From fc9cae24e99084241c4512ea4f1e5cd1a8595593 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 9 Sep 2013 15:40:21 -0700 Subject: [PATCH 001/687] Add skeleton R package --- pkg/DESCRIPTION | 9 +++++++++ pkg/NAMESPACE | 1 + pkg/R/zzz.R | 4 ++++ 3 files changed, 14 insertions(+) create mode 100644 pkg/DESCRIPTION create mode 100644 pkg/NAMESPACE create mode 100644 pkg/R/zzz.R diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION new file mode 100644 index 0000000000000..bffaa3acea340 --- /dev/null +++ b/pkg/DESCRIPTION @@ -0,0 +1,9 @@ +Package: SparkR +Type: Package +Title: R frontend for Spark +Version: 0.1 +Date: 2013-09-09 +Author: Shivaram Venkataraman +Maintainer: Shivaram Venkataraman +Description: R frontend for Spark +License: BSD diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE new file mode 100644 index 0000000000000..d75f824ec6278 --- /dev/null +++ b/pkg/NAMESPACE @@ -0,0 +1 @@ +exportPattern("^[[:alpha:]]+") diff --git a/pkg/R/zzz.R b/pkg/R/zzz.R new file mode 100644 index 0000000000000..235f554d04b0f --- /dev/null +++ b/pkg/R/zzz.R @@ -0,0 +1,4 @@ + +.onLoad <- function(libname, pkgname) { + library(rJava) +} From 01cdf0e2157b798eb6d74b9c0f959081f5f67846 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 10 Sep 2013 09:29:24 -0700 Subject: [PATCH 002/687] Add Makefile for SparkR --- Makefile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000..4de6fb5a899eb --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +LIB_DIR := lib/ +JAR_NAME := sparkr-1.0-allinone.jar + +all: sparkR + +SparkR: pkg/R/* + R CMD INSTALL --library=$(LIB_DIR) pkg/ + +sparkR: SparkR + +sparkr: SparkR + +#java: + #mvn package shade:shade From 83ce63fe917b831ff4b50e5b64ebde223bdc978a Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 10 Sep 2013 11:35:44 -0700 Subject: [PATCH 003/687] Create a JavaSparkContext and save it in .sparkEnv using sparkR.init() --- pkg/R/sparkR.R | 41 +++++++++++++++++++++++++++++++++++++++++ pkg/R/zzz.R | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 pkg/R/sparkR.R diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R new file mode 100644 index 0000000000000..70bf11cd6b327 --- /dev/null +++ b/pkg/R/sparkR.R @@ -0,0 +1,41 @@ +# Hardcoded spark jar +sparkJarPath <- "assembly/target/scala-2.9.3/spark-assembly-0.8.0-SNAPSHOT-hadoop1.0.4.jar" + + +.sparkREnv <- new.env() + +sparkR.onLoad <- function(libname, pkgname) { + sparkDir <- strsplit(libname, "/") + sparkJarAbsPath <- c(sparkDir[[1]][1:(length(sparkDir[[1]]) - 2)], sparkJarPath) + classPath <- paste(sparkJarAbsPath, collapse = "/") + + assign("sparkJar", classPath, env=.sparkREnv) + + cat("[SparkR] Initializing with classpath ", classPath, "\n") + + .jinit(classpath=classPath) +} + +# Initializes and returns a JavaSparkContext +sparkR.init <- function( + master = "local[2]", + appName = "SparkR", + sparkHome = NULL, + jars = NULL, + jarFile = NULL, + environment = NULL) { + + if (exists(".sparkRjsc", env=.sparkREnv)) { + return(get(".sparkRjsc", env=.sparkREnv)) + } + + # TODO: support other constructors + assign( + ".sparkRjsc", + .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName), + env=.sparkREnv + ) + + return(get(".sparkRjsc", env=.sparkREnv)) +} + diff --git a/pkg/R/zzz.R b/pkg/R/zzz.R index 235f554d04b0f..44a85dd170c19 100644 --- a/pkg/R/zzz.R +++ b/pkg/R/zzz.R @@ -1,4 +1,4 @@ - .onLoad <- function(libname, pkgname) { library(rJava) + sparkR.onLoad(libname, pkgname) } From 82aa17a12ff0e86c78d8414f05ad9c8ad1d5c431 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 11 Sep 2013 11:16:44 -0700 Subject: [PATCH 004/687] Add textFile() --- pkg/R/context.R | 13 +++++++++++++ pkg/R/sparkR.R | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 pkg/R/context.R diff --git a/pkg/R/context.R b/pkg/R/context.R new file mode 100644 index 0000000000000..b042cd58ff059 --- /dev/null +++ b/pkg/R/context.R @@ -0,0 +1,13 @@ +# Read a text file from HDFS, a local file system (available on all +# nodes), or any Hadoop-supported file system URI, and return it as an +# RDD of Strings. +"textFile" <- function(jsc, name, minSplits=NULL) { + if (is.null(minSplits)) { + sc <- .jcall(jsc, "Lorg/apache/spark/SparkContext;", "sc") + defaultParallelism <- .jcall(sc, "I", "defaultParallelism") + minSplits <- min(defaultParallelism, 2) + } + jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", name, as.integer(minSplits)) + # TODO: wrap RRDD around it +} + diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 70bf11cd6b327..6b4434b19d8b2 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -36,6 +36,6 @@ sparkR.init <- function( env=.sparkREnv ) - return(get(".sparkRjsc", env=.sparkREnv)) + get(".sparkRjsc", env=.sparkREnv) } From 4c2e5164be8ade5f8b58823309a887f500bf539f Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 13 Sep 2013 10:59:22 -0700 Subject: [PATCH 005/687] Add simple prototype of S4 class RRDD. Make TextFile() returns an RRDD. --- pkg/R/RRDD.R | 23 +++++++++++++++++++++++ pkg/R/context.R | 6 +++--- 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 pkg/R/RRDD.R diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R new file mode 100644 index 0000000000000..abeb75732d60a --- /dev/null +++ b/pkg/R/RRDD.R @@ -0,0 +1,23 @@ +# RRDD (RDD in R) class implemented in S4 OO system. + +# TODO: do we really want to mix S3 and S4? +setOldClass("jobjRef") + +setClass("RRDD", slots = list(jrdd = "jobjRef")) + +setValidity("RRDD", + function(object) { + cls <- object@jrdd$getClass() + className <- cls$getName() + if (grep("spark.api.java.*RDD*", className) == 1) { + TRUE + } else { + paste("Invalid RDD class ", className) + } + }) + +# Constructor of the RRDD class. +RRDD <- function(jrdd) { + new("RRDD", jrdd = jrdd) +} + diff --git a/pkg/R/context.R b/pkg/R/context.R index b042cd58ff059..761b569c00c5f 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -1,13 +1,13 @@ # Read a text file from HDFS, a local file system (available on all # nodes), or any Hadoop-supported file system URI, and return it as an -# RDD of Strings. -"textFile" <- function(jsc, name, minSplits=NULL) { +# RRDD of Strings. +"TextFile" <- function(jsc, name, minSplits=NULL) { if (is.null(minSplits)) { sc <- .jcall(jsc, "Lorg/apache/spark/SparkContext;", "sc") defaultParallelism <- .jcall(sc, "I", "defaultParallelism") minSplits <- min(defaultParallelism, 2) } jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", name, as.integer(minSplits)) - # TODO: wrap RRDD around it + RRDD(jrdd) } From 1284c13549894b0742b144daa4a86c19f8d0e159 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 13 Sep 2013 12:17:16 -0700 Subject: [PATCH 006/687] WIP on collect(): JavaListToRList() failed with errors. --- pkg/R/RRDD.R | 7 +++++++ pkg/R/context.R | 4 +++- pkg/R/utils.R | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 pkg/R/utils.R diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index abeb75732d60a..0a3759ef5d284 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -21,3 +21,10 @@ RRDD <- function(jrdd) { new("RRDD", jrdd = jrdd) } +# collect() +setGeneric("collect", function(x) { standardGeneric("collect") }) +setMethod("collect", signature(x = "RRDD"), + function(x) { + collected <- x@jrdd$collect() + JavaListToRList(collected) + }) diff --git a/pkg/R/context.R b/pkg/R/context.R index 761b569c00c5f..2459c4dc1250a 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -1,7 +1,9 @@ # Read a text file from HDFS, a local file system (available on all # nodes), or any Hadoop-supported file system URI, and return it as an # RRDD of Strings. -"TextFile" <- function(jsc, name, minSplits=NULL) { +"textFile" <- function(jsc, name, minSplits=NULL) { + # FIXME: if execute into this if block, errors: + # Error in .jcall(jsc, "sc", c()) : RcallMethod: invalid method name if (is.null(minSplits)) { sc <- .jcall(jsc, "Lorg/apache/spark/SparkContext;", "sc") defaultParallelism <- .jcall(sc, "I", "defaultParallelism") diff --git a/pkg/R/utils.R b/pkg/R/utils.R new file mode 100644 index 0000000000000..d724544feeae9 --- /dev/null +++ b/pkg/R/utils.R @@ -0,0 +1,15 @@ +# Utilities and Helpers + +"JavaListToRList" <- function(jList) { + size <- .jcall(jList, "I", "size") + + # FIXME: each call to the lambda gives the error: + # Error in .jfield(x, "Ljava/lang/Class;", "TYPE") : + # trying to generate an object from a virtual class ("jobjRef") + lapply(0:(size - 1), + function(index) { + # FIXME: convert to .jcall? How to specify return type? + jList$get(as.integer(index)) + }) +} + From f16b891ab0f5972efcdc92159ae6d59be238b886 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 14 Sep 2013 23:06:46 -0700 Subject: [PATCH 007/687] Convert a few reflectionc alls to .jcall --- pkg/R/RRDD.R | 3 +-- pkg/R/utils.R | 8 +++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 0a3759ef5d284..0ee88b4d2ab93 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -1,6 +1,5 @@ # RRDD (RDD in R) class implemented in S4 OO system. -# TODO: do we really want to mix S3 and S4? setOldClass("jobjRef") setClass("RRDD", slots = list(jrdd = "jobjRef")) @@ -25,6 +24,6 @@ RRDD <- function(jrdd) { setGeneric("collect", function(x) { standardGeneric("collect") }) setMethod("collect", signature(x = "RRDD"), function(x) { - collected <- x@jrdd$collect() + collected <- .jcall(x@jrdd, "Ljava/util/List;", "collect") JavaListToRList(collected) }) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index d724544feeae9..ad7686e18ee01 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -3,13 +3,15 @@ "JavaListToRList" <- function(jList) { size <- .jcall(jList, "I", "size") - # FIXME: each call to the lambda gives the error: + # FIXME: each call to the lambda gives the error, most likely due to type erasure in List: # Error in .jfield(x, "Ljava/lang/Class;", "TYPE") : # trying to generate an object from a virtual class ("jobjRef") + # Perhaps: + # calling toString() on every object and deal with strings? + # mimick PySpark: write custom Scala serializers for SparkR lapply(0:(size - 1), function(index) { - # FIXME: convert to .jcall? How to specify return type? - jList$get(as.integer(index)) + .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) }) } From 84c1fd2db017c186bafc3c7c7fa2d546cbce69ff Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sun, 15 Sep 2013 10:40:09 -0700 Subject: [PATCH 008/687] Use .jsimplify() to get around generic List's get() type erasure problem --- pkg/R/utils.R | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index ad7686e18ee01..8832ba83b44ea 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -2,16 +2,11 @@ "JavaListToRList" <- function(jList) { size <- .jcall(jList, "I", "size") - - # FIXME: each call to the lambda gives the error, most likely due to type erasure in List: - # Error in .jfield(x, "Ljava/lang/Class;", "TYPE") : - # trying to generate an object from a virtual class ("jobjRef") - # Perhaps: - # calling toString() on every object and deal with strings? - # mimick PySpark: write custom Scala serializers for SparkR + # TODO: test with RRDD[T] where T is not String lapply(0:(size - 1), function(index) { - .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) + jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) + .jsimplify(jElem) }) } From 978aa0f8ae837790c1cd9851aceb063d92002f28 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 17 Sep 2013 12:43:08 -0700 Subject: [PATCH 009/687] Add parallelize() skeleton: only return serialized slices now --- pkg/R/context.R | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index 2459c4dc1250a..10a47e0cca444 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -1,7 +1,9 @@ +# context.R: SparkContext driven functions + # Read a text file from HDFS, a local file system (available on all # nodes), or any Hadoop-supported file system URI, and return it as an # RRDD of Strings. -"textFile" <- function(jsc, name, minSplits=NULL) { +textFile <- function(jsc, name, minSplits=NULL) { # FIXME: if execute into this if block, errors: # Error in .jcall(jsc, "sc", c()) : RcallMethod: invalid method name if (is.null(minSplits)) { @@ -13,3 +15,11 @@ RRDD(jrdd) } + +# Distribute a local R collection (list/vector) to form an RRDD. +# FIXME: bound/safeguard numSlices +parallelize <- function(jsc, coll, numSlices) { + sliceLen <- length(coll) / numSlices + slices <- split(coll, rep(1:(numSlices + 1), each = sliceLen)[1:length(coll)]) + serializedSlices <- lapply(slices, serialize, connection = NULL) +} From 6b4938aeabfc47762df20da0538990542b57fe70 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 17 Sep 2013 15:09:40 -0700 Subject: [PATCH 010/687] parallelize(): a raw can be parallelized by JavaSparkContext and get back JavaRDD --- pkg/R/context.R | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index 10a47e0cca444..cfe7497782532 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -17,9 +17,20 @@ textFile <- function(jsc, name, minSplits=NULL) { # Distribute a local R collection (list/vector) to form an RRDD. -# FIXME: bound/safeguard numSlices +# TODO: bound/safeguard numSlices +# TODO: unit tests for if the split works for all primitives parallelize <- function(jsc, coll, numSlices) { sliceLen <- length(coll) / numSlices slices <- split(coll, rep(1:(numSlices + 1), each = sliceLen)[1:length(coll)]) - serializedSlices <- lapply(slices, serialize, connection = NULL) + # serializedSlices <- lapply(slices, serialize, connection = NULL) + serializedSlices <- serialize(slices, connection = NULL) + + # primitive byte[] + javaPrimitiveByteArray <- .jarray(serializedSlices) + # convert into List + javaByteList <- .jcall("java/util/Arrays", "Ljava/util/List;", "asList", .jcast(javaPrimitiveByteArray, "[Ljava/lang/Object;"), evalArray = FALSE) + + jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "parallelize", javaByteList, as.integer(numSlices)) + + RRDD(jrdd) } From 46eb063581b525b0c3a7e6c33cb29deea62838dc Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 21 Sep 2013 13:41:25 -0700 Subject: [PATCH 011/687] Make parallelize() return JavaRDD[Array[Byte]]. Add RRDD.scala with a helper function in the singleton object. --- pkg/R/RRDD.R | 10 ++++++++-- pkg/R/context.R | 19 ++++++++++--------- pkg/R/utils.R | 15 ++++++++------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 0ee88b4d2ab93..975a68253d30b 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -20,10 +20,16 @@ RRDD <- function(jrdd) { new("RRDD", jrdd = jrdd) } -# collect() +# collect(): Return a vector that contains all of the elements in this RRDD. +# TODO setGeneric("collect", function(x) { standardGeneric("collect") }) -setMethod("collect", signature(x = "RRDD"), +setMethod("collect", + signature(x = "RRDD"), function(x) { collected <- .jcall(x@jrdd, "Ljava/util/List;", "collect") JavaListToRList(collected) }) +# For JavaRDD[Array[Byte]]: +# x <- jrdd$collect() +# byteArrays <- .jevalArray(x$toArray()) +# unserialize(.jevalArray(byteArrays[[1]])) diff --git a/pkg/R/context.R b/pkg/R/context.R index cfe7497782532..0d6ea97f56526 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -15,22 +15,23 @@ textFile <- function(jsc, name, minSplits=NULL) { RRDD(jrdd) } - # Distribute a local R collection (list/vector) to form an RRDD. # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives parallelize <- function(jsc, coll, numSlices) { sliceLen <- length(coll) / numSlices slices <- split(coll, rep(1:(numSlices + 1), each = sliceLen)[1:length(coll)]) - # serializedSlices <- lapply(slices, serialize, connection = NULL) - serializedSlices <- serialize(slices, connection = NULL) - - # primitive byte[] - javaPrimitiveByteArray <- .jarray(serializedSlices) - # convert into List - javaByteList <- .jcall("java/util/Arrays", "Ljava/util/List;", "asList", .jcast(javaPrimitiveByteArray, "[Ljava/lang/Object;"), evalArray = FALSE) - jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "parallelize", javaByteList, as.integer(numSlices)) + # vector of raws + serializedSlices <- lapply(slices, serialize, connection = NULL) + # a java array of byte[]; in Scala, viewed as Array[Array[Byte]] + javaSerializedSlices <- .jarray(lapply(serializedSlices, .jarray), contents.class = "[B") + # JavaRDD[Array[Byte]] + jrdd <- .jcall("org/apache/spark/api/r/RRDD", + "Lorg/apache/spark/api/java/JavaRDD;", + "createRDDFromArray", + jsc, + javaSerializedSlices) RRDD(jrdd) } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 8832ba83b44ea..af39ba7fcabf2 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -1,12 +1,13 @@ # Utilities and Helpers "JavaListToRList" <- function(jList) { - size <- .jcall(jList, "I", "size") - # TODO: test with RRDD[T] where T is not String - lapply(0:(size - 1), - function(index) { - jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) - .jsimplify(jElem) - }) + # size <- .jcall(jList, "I", "size") + # # TODO: test with RRDD[T] where T is not String + # lapply(0:(size - 1), + # function(index) { + # jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) + # .jsimplify(jElem) + # }) + .jevalArray(.jcall(jList, "[Ljava/lang/Object;", "toArray")) } From f50121e360db7044062ace0fdef37dea343fb240 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 21 Sep 2013 13:41:25 -0700 Subject: [PATCH 012/687] Make parallelize() return JavaRDD[Array[Byte]]. Add RRDD.scala with a helper function in the singleton object. --- RRDD.scala | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 RRDD.scala diff --git a/RRDD.scala b/RRDD.scala new file mode 100644 index 0000000000000..59f49ca9a60ef --- /dev/null +++ b/RRDD.scala @@ -0,0 +1,12 @@ +package org.apache.spark.api.r + +import org.apache.spark.api.java.{JavaSparkContext, JavaRDD} +import scala.collection.JavaConversions._ + +object RRDD { + + def createRDDFromArray(jsc: JavaSparkContext, arr: Array[Array[Byte]]): JavaRDD[Array[Byte]] = { + JavaRDD.fromRDD(jsc.sc.parallelize(arr, arr.length)) + } + +} \ No newline at end of file From dc16af42df5fa41c5b78555bd754ea1ccd0e11d0 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 21 Sep 2013 14:03:16 -0700 Subject: [PATCH 013/687] Comment: toArray() allocates memory for a copy --- pkg/R/utils.R | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index af39ba7fcabf2..0926e17195355 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -8,6 +8,7 @@ # jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) # .jsimplify(jElem) # }) + # NOTE: toArray() allocates memory for a copy .jevalArray(.jcall(jList, "[Ljava/lang/Object;", "toArray")) } From ef305bf0d205507f9abc2557a2f7e9b14fba6823 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 24 Sep 2013 11:10:32 -0700 Subject: [PATCH 014/687] parallelize() followed by collect() now work for vectors/lists of strings and numerics (should work for other primitives as well). --- pkg/R/RRDD.R | 17 +++++++---------- pkg/R/context.R | 12 +++++++++--- pkg/R/utils.R | 36 +++++++++++++++++++++++++++--------- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 975a68253d30b..cdf0d9ab1df47 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -20,16 +20,13 @@ RRDD <- function(jrdd) { new("RRDD", jrdd = jrdd) } -# collect(): Return a vector that contains all of the elements in this RRDD. -# TODO -setGeneric("collect", function(x) { standardGeneric("collect") }) +# collect(): Return a list that contains all of the elements in this RRDD. +# NOTE: supports only RRDD[Array[Byte]] and RRDD[primitive java type] for now. +setGeneric("collect", function(rrdd) { standardGeneric("collect") }) setMethod("collect", - signature(x = "RRDD"), - function(x) { - collected <- .jcall(x@jrdd, "Ljava/util/List;", "collect") + signature(rrdd = "RRDD"), + function(rrdd) { + collected <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") JavaListToRList(collected) }) -# For JavaRDD[Array[Byte]]: -# x <- jrdd$collect() -# byteArrays <- .jevalArray(x$toArray()) -# unserialize(.jevalArray(byteArrays[[1]])) + diff --git a/pkg/R/context.R b/pkg/R/context.R index 0d6ea97f56526..ea2df5eddcb34 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -15,11 +15,17 @@ textFile <- function(jsc, name, minSplits=NULL) { RRDD(jrdd) } -# Distribute a local R collection (list/vector) to form an RRDD. +# Distribute a local R collection to form an RRDD[Array[Byte]]. # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives -parallelize <- function(jsc, coll, numSlices) { - sliceLen <- length(coll) / numSlices +# TODO: support matrix, data frame, etc +parallelize <- function(jsc, coll, numSlices = 1) { + if (numSlices > length(coll)) { + message("context.R: parallelize: numSlices larger than coll's length; defaulting numSlices to the length.") + numSlices = length(coll) + } + + sliceLen <- length(coll) %/% numSlices slices <- split(coll, rep(1:(numSlices + 1), each = sliceLen)[1:length(coll)]) # vector of raws diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 0926e17195355..c108bfab7645f 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -1,14 +1,32 @@ # Utilities and Helpers +# TODO: test with RRDD[T] where T is not String "JavaListToRList" <- function(jList) { - # size <- .jcall(jList, "I", "size") - # # TODO: test with RRDD[T] where T is not String - # lapply(0:(size - 1), - # function(index) { - # jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) - # .jsimplify(jElem) - # }) - # NOTE: toArray() allocates memory for a copy - .jevalArray(.jcall(jList, "[Ljava/lang/Object;", "toArray")) + size <- .jcall(jList, "I", "size") + lapply(0:(size - 1), + function(index) { + jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) + + # Either an R object or a Java obj ref + obj <- .jsimplify(jElem) + + # RRDD[Array[Byte]]: call unserialize() + if (class(obj) == "jobjRef" && .jinstanceof(obj, "[B")) { + rRaw <- .jevalArray(.jcastToArray(jElem)) + res <- unserialize(rRaw) + } + + # FIXME + if (class(obj) == "jobjRef" && !.jinstanceof(obj, "[B")) { + stop("utils.R: JavaListToRList: does not support any RRDD[Array[T]] where T != Byte, for now") + } + + # jElem is of a primitive Java type, is simplified to R's corresponding type + if (class(obj) != "jobjRef") { + res <- obj + } + + res + }) } From 8b951552e4d8ab385628d80aca692298ec0cd3c4 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 24 Sep 2013 11:26:40 -0700 Subject: [PATCH 015/687] Add testthat skeleton infrastructure --- pkg/inst/tests/run-all.R | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 pkg/inst/tests/run-all.R diff --git a/pkg/inst/tests/run-all.R b/pkg/inst/tests/run-all.R new file mode 100644 index 0000000000000..0a4773ae5e21b --- /dev/null +++ b/pkg/inst/tests/run-all.R @@ -0,0 +1,4 @@ +library(testthat) +library(SparkR) + +test_package("SparkR") From 6de9b8164522c2de0318082fded700eb6a800979 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 24 Sep 2013 12:00:42 -0700 Subject: [PATCH 016/687] Add a simple unit test for parallelize(). --- pkg/inst/tests/test_parallelize_collect.R | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 pkg/inst/tests/test_parallelize_collect.R diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R new file mode 100644 index 0000000000000..ad101d6868ab7 --- /dev/null +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -0,0 +1,56 @@ +context("parallelize() and collect()") + +numVector <- c(-10:97) +numList <- list(sqrt(1), sqrt(2), sqrt(3), 4 ** 10) +strVector <- c("Dexter Morgan: I suppose I should be upset, even feel", + "violated, but I'm not. No, in fact, I think this is a friendly", + "message, like \"Hey, wanna play?\" and yes, I want to play. ", + "I really, really do.") +strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge, ", + "other times it helps me control the chaos.", + "Dexter Morgan: Harry and Dorris Morgan did a wonderful job ", + "raising me. But they're both dead now. I didn't kill them. Honest.") +jsc <- sparkR.init() + +test_that("parallelize() on simple vectors and lists returns an RRDD", { + numVectorRRDD <- parallelize(jsc, numVector, 1) + numVectorRRDD2 <- parallelize(jsc, numVector, 10) + expect_that(class(numVectorRRDD), is_equivalent_to("RRDD")) + expect_that(class(numVectorRRDD2), is_equivalent_to("RRDD")) + + numListRRDD <- parallelize(jsc, numList, 1) + numListRRDD2 <- parallelize(jsc, numList, 4) + expect_that(class(numListRRDD), is_equivalent_to("RRDD")) + expect_that(class(numListRRDD2), is_equivalent_to("RRDD")) + + strVectorRRDD <- parallelize(jsc, strVector, 2) + strVectorRRDD2 <- parallelize(jsc, strVector, 3) + expect_that(class(strVectorRRDD), is_equivalent_to("RRDD")) + expect_that(class(strVectorRRDD2), is_equivalent_to("RRDD")) + + strListRRDD <- parallelize(jsc, strList, 4) + strListRRDD2 <- parallelize(jsc, strList, 1) + expect_that(class(strListRRDD), is_equivalent_to("RRDD")) + expect_that(class(strListRRDD2), is_equivalent_to("RRDD")) +}) + +test_that("collect(), following a parallelize(), gives back the original collections", { + # numVectorRRDD <- parallelize(jsc, numVector, 10) + # expect_that(collect(numVectorRRDD), equals(numVector)) + # expect_that(collect(numVectorRRDD), is_identical_to(numVector)) + + # numListRRDD <- parallelize(jsc, numList, 1) + # numListRRDD2 <- parallelize(jsc, numList, 4) + # expect_that(class(numListRRDD), is_equivalent_to("RRDD")) + # expect_that(class(numListRRDD2), is_equivalent_to("RRDD")) + + # strVectorRRDD <- parallelize(jsc, strVector, 2) + # strVectorRRDD2 <- parallelize(jsc, strVector, 3) + # expect_that(class(strVectorRRDD), is_equivalent_to("RRDD")) + # expect_that(class(strVectorRRDD2), is_equivalent_to("RRDD")) + + # strListRRDD <- parallelize(jsc, strList, 4) + # strListRRDD2 <- parallelize(jsc, strList, 1) + # expect_that(class(strListRRDD), is_equivalent_to("RRDD")) + # expect_that(class(strListRRDD2), is_equivalent_to("RRDD")) +}) From fc7693f97d5fe5bc4540755be82db8957cc91fc7 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 24 Sep 2013 13:13:42 -0700 Subject: [PATCH 017/687] Refactor and enhance the previously added unit test a little bit. --- pkg/inst/tests/test_parallelize_collect.R | 30 ++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index ad101d6868ab7..9b3a1d9057a56 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -1,5 +1,6 @@ context("parallelize() and collect()") +# Mock data numVector <- c(-10:97) numList <- list(sqrt(1), sqrt(2), sqrt(3), 4 ** 10) strVector <- c("Dexter Morgan: I suppose I should be upset, even feel", @@ -10,28 +11,35 @@ strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge, ", "other times it helps me control the chaos.", "Dexter Morgan: Harry and Dorris Morgan did a wonderful job ", "raising me. But they're both dead now. I didn't kill them. Honest.") + +# JavaSparkContext handle jsc <- sparkR.init() test_that("parallelize() on simple vectors and lists returns an RRDD", { numVectorRRDD <- parallelize(jsc, numVector, 1) numVectorRRDD2 <- parallelize(jsc, numVector, 10) - expect_that(class(numVectorRRDD), is_equivalent_to("RRDD")) - expect_that(class(numVectorRRDD2), is_equivalent_to("RRDD")) - numListRRDD <- parallelize(jsc, numList, 1) numListRRDD2 <- parallelize(jsc, numList, 4) - expect_that(class(numListRRDD), is_equivalent_to("RRDD")) - expect_that(class(numListRRDD2), is_equivalent_to("RRDD")) - strVectorRRDD <- parallelize(jsc, strVector, 2) strVectorRRDD2 <- parallelize(jsc, strVector, 3) - expect_that(class(strVectorRRDD), is_equivalent_to("RRDD")) - expect_that(class(strVectorRRDD2), is_equivalent_to("RRDD")) - strListRRDD <- parallelize(jsc, strList, 4) strListRRDD2 <- parallelize(jsc, strList, 1) - expect_that(class(strListRRDD), is_equivalent_to("RRDD")) - expect_that(class(strListRRDD2), is_equivalent_to("RRDD")) + + rrdds <- c(numVectorRRDD, + numVectorRRDD2, + numListRRDD, + numListRRDD2, + strVectorRRDD, + strVectorRRDD2, + strListRRDD, + strListRRDD2) + + for (rrdd in rrdds) { + expect_that(class(rrdd), is_equivalent_to("RRDD")) + expect_true(.hasSlot(rrdd, "jrdd") + && class(rrdd@jrdd) == "jobjRef" + && .jinstanceof(rrdd@jrdd, "org/apache/spark/api/java/JavaRDD")) + } }) test_that("collect(), following a parallelize(), gives back the original collections", { From f50223fb04dfbb3f2d7e8dd6c24cfcd2d8dc65f1 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Mon, 30 Sep 2013 16:47:05 -0700 Subject: [PATCH 018/687] Make parallelize() and collect() use lists. Add a few more tests for them. --- pkg/R/RRDD.R | 4 +- pkg/R/context.R | 12 +++++- pkg/R/utils.R | 51 +++++++++++++---------- pkg/inst/tests/test_parallelize_collect.R | 32 +++++++------- 4 files changed, 59 insertions(+), 40 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index cdf0d9ab1df47..1260cb0e208b3 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -25,8 +25,8 @@ RRDD <- function(jrdd) { setGeneric("collect", function(rrdd) { standardGeneric("collect") }) setMethod("collect", signature(rrdd = "RRDD"), - function(rrdd) { + function(rrdd) { collected <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") - JavaListToRList(collected) + JavaListToRList(collected, flatten = TRUE) }) diff --git a/pkg/R/context.R b/pkg/R/context.R index ea2df5eddcb34..a28af22ad8d3a 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -15,11 +15,21 @@ textFile <- function(jsc, name, minSplits=NULL) { RRDD(jrdd) } -# Distribute a local R collection to form an RRDD[Array[Byte]]. +# Distribute a local R homogeneous list to form an RRDD[Array[Byte]]. If a +# vector is passed as `coll', as.list() will be called on it to convert it to a +# list. # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives # TODO: support matrix, data frame, etc parallelize <- function(jsc, coll, numSlices = 1) { + if (!is.list(coll)) { + if (!is.vector(coll)) { + message(paste("context.R: parallelize() currently only supports lists and vectors.", + "Calling as.list() to coerce coll into a list.")) + } + coll = as.list(coll) + } + if (numSlices > length(coll)) { message("context.R: parallelize: numSlices larger than coll's length; defaulting numSlices to the length.") numSlices = length(coll) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index c108bfab7645f..7f4be9dbb8e6d 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -1,32 +1,39 @@ # Utilities and Helpers # TODO: test with RRDD[T] where T is not String -"JavaListToRList" <- function(jList) { +# Given a List, returns an R list. +"JavaListToRList" <- function(jList, flatten = FALSE) { size <- .jcall(jList, "I", "size") - lapply(0:(size - 1), - function(index) { - jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) + results <- + lapply(0:(size - 1), + function(index) { + jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) - # Either an R object or a Java obj ref - obj <- .jsimplify(jElem) + # Either an R object or a Java obj ref + obj <- .jsimplify(jElem) - # RRDD[Array[Byte]]: call unserialize() - if (class(obj) == "jobjRef" && .jinstanceof(obj, "[B")) { - rRaw <- .jevalArray(.jcastToArray(jElem)) - res <- unserialize(rRaw) - } + # RRDD[Array[Byte]]: call unserialize() and be sure to flatten + if (class(obj) == "jobjRef" && .jinstanceof(obj, "[B")) { + rRaw <- .jevalArray(.jcastToArray(jElem)) + res <- unserialize(rRaw) + } - # FIXME - if (class(obj) == "jobjRef" && !.jinstanceof(obj, "[B")) { - stop("utils.R: JavaListToRList: does not support any RRDD[Array[T]] where T != Byte, for now") - } + # FIXME? + if (class(obj) == "jobjRef" && !.jinstanceof(obj, "[B")) { + stop(paste("utils.R: JavaListToRList: does not support any", + "RRDD[Array[T]] where T != Byte, for now")) + } - # jElem is of a primitive Java type, is simplified to R's corresponding type - if (class(obj) != "jobjRef") { - res <- obj - } + # jElem is of a primitive Java type, is simplified to R's corresponding type + if (class(obj) != "jobjRef") + res <- obj - res - }) + res + }) + if (flatten) { + as.list(unlist(results)) + } else { + as.list(results) + } } - + diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index 9b3a1d9057a56..babdfeca38874 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -1,3 +1,5 @@ +# run in REPL with 'test_dir(path/to/inst/tests)' + context("parallelize() and collect()") # Mock data @@ -43,22 +45,22 @@ test_that("parallelize() on simple vectors and lists returns an RRDD", { }) test_that("collect(), following a parallelize(), gives back the original collections", { - # numVectorRRDD <- parallelize(jsc, numVector, 10) - # expect_that(collect(numVectorRRDD), equals(numVector)) - # expect_that(collect(numVectorRRDD), is_identical_to(numVector)) + numVectorRRDD <- parallelize(jsc, numVector, 10) + expect_equal(collect(numVectorRRDD), as.list(numVector)) - # numListRRDD <- parallelize(jsc, numList, 1) - # numListRRDD2 <- parallelize(jsc, numList, 4) - # expect_that(class(numListRRDD), is_equivalent_to("RRDD")) - # expect_that(class(numListRRDD2), is_equivalent_to("RRDD")) + numListRRDD <- parallelize(jsc, numList, 1) + numListRRDD2 <- parallelize(jsc, numList, 4) + expect_equal(collect(numListRRDD), as.list(numList)) + expect_equal(collect(numListRRDD2), as.list(numList)) - # strVectorRRDD <- parallelize(jsc, strVector, 2) - # strVectorRRDD2 <- parallelize(jsc, strVector, 3) - # expect_that(class(strVectorRRDD), is_equivalent_to("RRDD")) - # expect_that(class(strVectorRRDD2), is_equivalent_to("RRDD")) + strVectorRRDD <- parallelize(jsc, strVector, 2) + strVectorRRDD2 <- parallelize(jsc, strVector, 3) + expect_equal(collect(strVectorRRDD), as.list(strVector)) + expect_equal(collect(strVectorRRDD2), as.list(strVector)) - # strListRRDD <- parallelize(jsc, strList, 4) - # strListRRDD2 <- parallelize(jsc, strList, 1) - # expect_that(class(strListRRDD), is_equivalent_to("RRDD")) - # expect_that(class(strListRRDD2), is_equivalent_to("RRDD")) + strListRRDD <- parallelize(jsc, strList, 4) + strListRRDD2 <- parallelize(jsc, strList, 1) + expect_equal(collect(strListRRDD), as.list(strList)) + expect_equal(collect(strListRRDD2), as.list(strList)) }) + From 25a0bea75923abb1734afd3f947e6feb5df6d1d3 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 5 Oct 2013 01:19:30 -0700 Subject: [PATCH 019/687] Add support for apply, reduce, count Also serialize closures using `save` and add two examples --- Makefile | 2 +- examples/logistic_regression.R | 48 +++++++++++++++++++++ examples/pi.R | 25 +++++++++++ pkg/DESCRIPTION | 1 + pkg/NAMESPACE | 8 +++- pkg/R/RRDD.R | 78 +++++++++++++++++++++++++++++++--- pkg/R/context.R | 10 +++-- pkg/R/sparkR.R | 6 +-- pkg/R/utils.R | 19 ++++++++- pkg/R/zzz.R | 3 +- pkg/inst/worker/serialize.R | 26 ++++++++++++ pkg/inst/worker/worker.R | 50 ++++++++++++++++++++++ 12 files changed, 257 insertions(+), 19 deletions(-) create mode 100644 examples/logistic_regression.R create mode 100644 examples/pi.R create mode 100644 pkg/inst/worker/serialize.R create mode 100644 pkg/inst/worker/worker.R diff --git a/Makefile b/Makefile index 4de6fb5a899eb..c742e2a9c9f81 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ JAR_NAME := sparkr-1.0-allinone.jar all: sparkR SparkR: pkg/R/* - R CMD INSTALL --library=$(LIB_DIR) pkg/ + R CMD INSTALL -d --library=$(LIB_DIR) pkg/ sparkR: SparkR diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R new file mode 100644 index 0000000000000..c2ee04becc18e --- /dev/null +++ b/examples/logistic_regression.R @@ -0,0 +1,48 @@ +require(SparkR) + +args <- commandArgs(trailing = TRUE) + +if (length(args) != 3) { + print("Usage: logistic_regression ") + q("no") +} + +sc <- sparkR.init(args[[1]], "LogisticRegressionR") +iterations <- as.integer(args[[3]]) +D <- 10 + +begin <- proc.time()[3] + +readPartition <- function(part) { + t(sapply(part, function(line) { + as.numeric(strsplit(line, " ")[[1]]) + })) +} +points <- lapplyPartition(textFile(sc, args[[2]]), readPartition) + + +# Initialize w to a random value +w <- runif(n=D, min = -1, max = 1) +cat("Initial w: ", w, "\n") + +# Compute logistic regression gradient for a matrix of data points +gradient <- function(partition) { + Y <- partition[, 1] # point labels (first column of input file) + X <- partition[, -1] # point coordinates + + # For each point (x, y), compute gradient function, then sum these up + dot <- X %*% w + logit <- 1 / (1 + exp(-Y * dot)) + grad <- t(X) %*% ((logit - 1) * Y) + list(grad) +} + +for (i in 1:iterations) { + cat("On iteration ", i, "\n") + w <- w - reduce(lapplyPartition(points, gradient), "+") +} + +cat("Final w: ", w, "\n") + +end <- proc.time()[3] +cat("\n", "------------ ", end-begin, " -------------", "\n") diff --git a/examples/pi.R b/examples/pi.R new file mode 100644 index 0000000000000..a215c74cd9cd3 --- /dev/null +++ b/examples/pi.R @@ -0,0 +1,25 @@ +require(SparkR) + +args <- commandArgs(trailing = TRUE) + +if (length(args) < 1) { + print("Usage: pi []") + q("no") +} + +sc <- sparkR.init(args[[1]], "PiR") + +slices <- ifelse(length(args) > 1, as.integer(args[[2]]), 2) + +n <- 100000 * slices + +piFunc <- function(elem) { + rands <- runif(n = 2, min = -1, max = 1) + val <- ifelse((rands[1]^2 + rands[2]^2) < 1, 1.0, 0.0) + val +} + +rdd <- parallelize(sc, 1:n, slices) +count <- reduce(lapply(rdd, piFunc), sum) +cat("Pi is roughly", 4.0 * count / n, "\n") +cat("Num elements in RDD ", count(rdd), "\n") diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index bffaa3acea340..edc2d78e8b0c4 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -5,5 +5,6 @@ Version: 0.1 Date: 2013-09-09 Author: Shivaram Venkataraman Maintainer: Shivaram Venkataraman +Depends: R (>= 3.0), rJava Description: R frontend for Spark License: BSD diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index d75f824ec6278..4c27c2571cf25 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -1 +1,7 @@ -exportPattern("^[[:alpha:]]+") +#exportPattern("^[[:alpha:]]+") +exportClasses("RRDD") +exportMethods("collect", "lapply", "count", "length", "reduce", "lapplyPartition") + +# S3 methods exported +export("textFile", "parallelize") +exportPattern("^sparkR") diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 1260cb0e208b3..ac711e758612a 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -1,8 +1,8 @@ # RRDD (RDD in R) class implemented in S4 OO system. -setOldClass("jobjRef") +#setOldClass("jobjRef") -setClass("RRDD", slots = list(jrdd = "jobjRef")) +setClass("RRDD", slots = list(jrdd = "jobjRef", serialized = "logical")) setValidity("RRDD", function(object) { @@ -16,17 +16,81 @@ setValidity("RRDD", }) # Constructor of the RRDD class. -RRDD <- function(jrdd) { - new("RRDD", jrdd = jrdd) +RRDD <- function(jrdd, serialized = TRUE) { + new("RRDD", jrdd = jrdd, serialized = serialized) } # collect(): Return a list that contains all of the elements in this RRDD. # NOTE: supports only RRDD[Array[Byte]] and RRDD[primitive java type] for now. -setGeneric("collect", function(rrdd) { standardGeneric("collect") }) +setGeneric("collect", function(rrdd, ...) { standardGeneric("collect") }) setMethod("collect", signature(rrdd = "RRDD"), - function(rrdd) { + function(rrdd, flatten=FALSE) { collected <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") - JavaListToRList(collected, flatten = TRUE) + JavaListToRList(collected, flatten) + }) + + +setGeneric("count", function(rrdd) { standardGeneric("count") }) +setMethod("count", + signature(rrdd = "RRDD"), + function(rrdd) { + countPartition <- function(part) { + as.integer(length(part)) + } + valsRDD <- lapplyPartition(rrdd, countPartition) + vals <- collect(valsRDD) + sum(as.integer(vals)) + }) + +setMethod("length", + signature(x = "RRDD"), + function(x) { + count(x) + }) + + +setMethod("lapply", + signature(X = "RRDD", FUN = "function"), + function(X, FUN) { + partitionFunc <- function(part) { + lapply(part, FUN) + } + + lapplyPartition(X, partitionFunc) }) +setGeneric("lapplyPartition", function(X, FUN) { + standardGeneric("lapplyPartition") }) +setMethod("lapplyPartition", + signature(X = "RRDD", FUN = "function"), + function(X, FUN) { + serializedFunc <- serialize(FUN, conn = NULL, ascii = TRUE) + serializedFuncArr <- .jarray(serializedFunc) + + depsBin <- getDependencies(FUN) + depsBinArr <- .jarray(depsBin) + #jsc <- get(".sparkRjsc", env=.sparkREnv) + #jsc$addFile(depsFile) + rrddRef <- new(J("org.apache.spark.api.r.RRDD"), + X@jrdd$rdd(), + serializedFuncArr, + X@serialized, + depsBinArr, + X@jrdd$classManifest()) + jrdd <- rrddRef$asJavaRDD() + RRDD(jrdd, TRUE) + }) + +setGeneric("reduce", function(rrdd, func) { standardGeneric("reduce") }) +setMethod("reduce", + signature(rrdd = "RRDD", func = "ANY"), + function(rrdd, func) { + + reducePartition <- function(part) { + Reduce(func, part) + } + + partitionList <- collect(lapplyPartition(rrdd, reducePartition)) + Reduce(func, partitionList) + }) diff --git a/pkg/R/context.R b/pkg/R/context.R index a28af22ad8d3a..407fb2c6336a1 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -11,8 +11,9 @@ textFile <- function(jsc, name, minSplits=NULL) { defaultParallelism <- .jcall(sc, "I", "defaultParallelism") minSplits <- min(defaultParallelism, 2) } - jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", name, as.integer(minSplits)) - RRDD(jrdd) + jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", name, + as.integer(minSplits)) + RRDD(jrdd, FALSE) } # Distribute a local R homogeneous list to form an RRDD[Array[Byte]]. If a @@ -31,7 +32,8 @@ parallelize <- function(jsc, coll, numSlices = 1) { } if (numSlices > length(coll)) { - message("context.R: parallelize: numSlices larger than coll's length; defaulting numSlices to the length.") + message(paste("context.R: parallelize: numSlices larger than coll's length", + "; defaulting numSlices to the length.", sep="")) numSlices = length(coll) } @@ -49,5 +51,5 @@ parallelize <- function(jsc, coll, numSlices = 1) { jsc, javaSerializedSlices) - RRDD(jrdd) + RRDD(jrdd, TRUE) } diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 6b4434b19d8b2..28c4535d953e2 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -11,7 +11,7 @@ sparkR.onLoad <- function(libname, pkgname) { assign("sparkJar", classPath, env=.sparkREnv) - cat("[SparkR] Initializing with classpath ", classPath, "\n") + packageStartupMessage("[SparkR] Initializing with classpath ", classPath, "\n") .jinit(classpath=classPath) } @@ -20,7 +20,7 @@ sparkR.onLoad <- function(libname, pkgname) { sparkR.init <- function( master = "local[2]", appName = "SparkR", - sparkHome = NULL, + sparkHome = Sys.getenv("SPARK_HOME"), jars = NULL, jarFile = NULL, environment = NULL) { @@ -31,7 +31,7 @@ sparkR.init <- function( # TODO: support other constructors assign( - ".sparkRjsc", + ".sparkRjsc", .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName), env=.sparkREnv ) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 7f4be9dbb8e6d..79236cf5b0930 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -2,7 +2,7 @@ # TODO: test with RRDD[T] where T is not String # Given a List, returns an R list. -"JavaListToRList" <- function(jList, flatten = FALSE) { +JavaListToRList <- function(jList, flatten = FALSE) { size <- .jcall(jList, "I", "size") results <- lapply(0:(size - 1), @@ -37,3 +37,20 @@ } } +isRRDD <- function(name, env) { + obj <- get(name, envir=env) + class(obj) == "RRDD" +} + +getDependencies <- function(name) { + fileName <- paste("/tmp/", as.character(quote(name)), "-", + as.numeric(Sys.time()), ".deps", sep="") + funcEnv <- environment(name) + varsToSave <- ls(funcEnv) + filteredVars <- Filter(function(x) { !isRRDD(x, funcEnv) }, varsToSave) + #cat("Saving ", filteredVars, "\n") + save(list=filteredVars, file=fileName, envir=funcEnv) + fileSize <- file.info(fileName)$size + readBin(fileName, raw(), fileSize, endian="big") + #fileName +} diff --git a/pkg/R/zzz.R b/pkg/R/zzz.R index 44a85dd170c19..215da5c24cc36 100644 --- a/pkg/R/zzz.R +++ b/pkg/R/zzz.R @@ -1,4 +1,3 @@ -.onLoad <- function(libname, pkgname) { - library(rJava) +.onAttach <- function(libname, pkgname) { sparkR.onLoad(libname, pkgname) } diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R new file mode 100644 index 0000000000000..d6bd9977ddc4d --- /dev/null +++ b/pkg/inst/worker/serialize.R @@ -0,0 +1,26 @@ +# Utility functions to serialize, deserialize etc. + +readInt <- function(con) { + readBin(con, integer(), n = 1, endian="big") +} + +readRaw <- function(con) { + dataLen <- readInt(con) + data <- readBin(con, raw(), dataLen, endian="big") +} + +readString <- function(con) { + stringLen <- readInt(con) + string <- readBin(con, raw(), stringLen, endian="big") + rawToChar(string) +} + +writeInt <- function(con, value) { + writeBin(as.integer(value), con, endian="big") +} + +writeRaw <- function(con, batch) { + outputSer <- serialize(batch, ascii = FALSE, conn = NULL) + writeInt(con, length(outputSer)) + writeBin(outputSer, con, endian="big") +} diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R new file mode 100644 index 0000000000000..d5f1c4b871560 --- /dev/null +++ b/pkg/inst/worker/worker.R @@ -0,0 +1,50 @@ +# Worker class + +source_local <- function(fname) { + argv <- commandArgs(trailingOnly = FALSE) + base_dir <- dirname(substring(argv[grep("--file=", argv)], 8)) + source(paste(base_dir, fname, sep="/")) +} + +source_local("serialize.R") + +# NOTE: We use "stdin" to get the process stdin instead of the command line +inputCon <- file("stdin", open = "rb") +outputFileName <- paste("/tmp/", Sys.getpid(), ".out", sep="") +outputCon <- file(outputFileName, open="wb") + +# First read the function +execFunction <- unserialize(readRaw(inputCon)) + +isSerialized <- readInt(inputCon) + +#depsFile <- readString(inputCon) +execFunctionDeps <- readRaw(inputCon) +depsFileName <- paste("/tmp/", Sys.getpid(), ".deps", sep="") +depsFile <- file(depsFileName, open="wb") +writeBin(execFunctionDeps, depsFile, endian="big") +close(depsFile) + +load(depsFileName, envir=environment(execFunction)) + +if (isSerialized) { + # Now read as many characters as described in funcLen + data <- unserialize(readRaw(inputCon)) +} else { + data <- readLines(inputCon) +} + + +#sink(stderr()) +#print(execFunction) +#sink() + +output <- execFunction(data) + +writeRaw(outputCon, output) +writeInt(outputCon, 0L) + +close(outputCon) + +# Finally print the name of the output file +cat(outputFileName, "\n") From 4e89ca4952f1d176eaf9589bea4c1737c4dd8189 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 5 Oct 2013 01:19:30 -0700 Subject: [PATCH 020/687] Add support for apply, reduce, count Also serialize closures using `save` and add two examples --- RRDD.scala | 130 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 128 insertions(+), 2 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 59f49ca9a60ef..14c97fcfbc413 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -1,12 +1,138 @@ package org.apache.spark.api.r +import java.io._ import org.apache.spark.api.java.{JavaSparkContext, JavaRDD} + +import scala.io.Source import scala.collection.JavaConversions._ +import org.apache.spark._ +import org.apache.spark.rdd.RDD +import org.apache.spark.rdd.PipedRDD + +class RRDD[T: ClassManifest]( + parent: RDD[T], + func: Array[Byte], + dataSerialized: Boolean, + functionDependencies: Array[Byte]) + extends RDD[Array[Byte]](parent) with Logging { + + override def getPartitions = parent.partitions + + override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { + + val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt + // val depsFileName = new File(depsFile).getName + // val localDepsFile = SparkFiles.get(depsFileName) + + val rCommand = "Rscript" + val rOptions = "--vanilla" + val sparkHome = new ProcessBuilder().environment().get("SPARK_HOME") + val rExecScript = sparkHome + "/R/pkg/inst/worker/worker.R" + val pb = new ProcessBuilder(List(rCommand, rOptions, rExecScript)) + + val proc = pb.start() + val env = SparkEnv.get + + // Start a thread to print the process's stderr to ours + new Thread("stderr reader for R") { + override def run() { + for (line <- Source.fromInputStream(proc.getErrorStream).getLines) { + System.err.println(line) + } + } + }.start() + + // Start a thread to feed the process input from our parent's iterator + new Thread("stdin writer for R") { + override def run() { + SparkEnv.set(env) + val stream = new BufferedOutputStream(proc.getOutputStream, bufferSize) + val printOut = new PrintStream(stream) + val dataOut = new DataOutputStream(stream) + + dataOut.writeInt(func.length) + dataOut.write(func, 0, func.length) + + dataOut.writeInt(if(dataSerialized) 1 else 0) + + // dataOut.writeInt(localDepsFile.length) + // dataOut.writeBytes(localDepsFile) + + dataOut.writeInt(functionDependencies.length) + dataOut.write(functionDependencies, 0, functionDependencies.length) + + for (elem <- firstParent[T].iterator(split, context)) { + if (dataSerialized) { + val elemArr = elem.asInstanceOf[Array[Byte]] + dataOut.writeInt(elemArr.length) + dataOut.write(elemArr, 0, elemArr.length) + } else { + printOut.println(elem) + } + } + stream.close() + } + }.start() + + // Return an iterator that read lines from the process's stdout + val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) + val stdOutFileName = inputStream.readLine().trim() + //val reader = new BufferedReader(new InputStreamReader(inputStream)) + val dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) + return new Iterator[Array[Byte]] { + def next(): Array[Byte] = { + val obj = _nextObj + if (hasNext) { + _nextObj = read() + } + obj + } + + private def read(): Array[Byte] = { + try { + val length = dataStream.readInt() + // logError("READ length " + length) + // val lengthStr = Option(dataStream.readLine()).getOrElse("0").trim() + // var length = 0 + // try { + // length = lengthStr.toInt + // } catch { + // case nfe: NumberFormatException => + // } + + length match { + case length if length > 0 => + val obj = new Array[Byte](length) + dataStream.read(obj, 0, length) + obj + case _ => + new Array[Byte](0) + } + } catch { + case eof: EOFException => { + throw new SparkException("Python worker exited unexpectedly (crashed)", eof) + } + case e => throw e + } + } + var _nextObj = read() + + def hasNext = _nextObj.length != 0 + } + } + + val asJavaRDD : JavaRDD[Array[Byte]] = JavaRDD.fromRDD(this) +} + + object RRDD { + /** + * Create an RRDD given a sequence of byte arrays. Used to create RRDD when `parallelize` is + * called from R. + */ def createRDDFromArray(jsc: JavaSparkContext, arr: Array[Array[Byte]]): JavaRDD[Array[Byte]] = { JavaRDD.fromRDD(jsc.sc.parallelize(arr, arr.length)) } - -} \ No newline at end of file +} From ae19fa853d29953caaa79c88d6bacbf134ffb25f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 5 Oct 2013 12:02:20 -0700 Subject: [PATCH 021/687] Add support for cache and use `tempfile` --- Makefile | 2 +- examples/logistic_regression.R | 11 ++++++----- pkg/NAMESPACE | 10 +++++++++- pkg/R/RRDD.R | 10 ++++++++-- pkg/R/utils.R | 13 ++++++++----- pkg/inst/worker/worker.R | 13 ++++++++++--- 6 files changed, 42 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index c742e2a9c9f81..4de6fb5a899eb 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ JAR_NAME := sparkr-1.0-allinone.jar all: sparkR SparkR: pkg/R/* - R CMD INSTALL -d --library=$(LIB_DIR) pkg/ + R CMD INSTALL --library=$(LIB_DIR) pkg/ sparkR: SparkR diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index c2ee04becc18e..92455859caa5c 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -11,17 +11,18 @@ sc <- sparkR.init(args[[1]], "LogisticRegressionR") iterations <- as.integer(args[[3]]) D <- 10 -begin <- proc.time()[3] - readPartition <- function(part) { t(sapply(part, function(line) { as.numeric(strsplit(line, " ")[[1]]) })) } -points <- lapplyPartition(textFile(sc, args[[2]]), readPartition) +begin <- as.numeric(Sys.time()) + +points <- cache(lapplyPartition(textFile(sc, args[[2]]), readPartition)) # Initialize w to a random value +#w <- rep(0, 10) w <- runif(n=D, min = -1, max = 1) cat("Initial w: ", w, "\n") @@ -44,5 +45,5 @@ for (i in 1:iterations) { cat("Final w: ", w, "\n") -end <- proc.time()[3] -cat("\n", "------------ ", end-begin, " -------------", "\n") +end <- as.numeric(Sys.time()) +cat("\n", "------------ Time taken:", end-begin, " -------------", "\n") diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 4c27c2571cf25..2ebbc36788e29 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -1,6 +1,14 @@ #exportPattern("^[[:alpha:]]+") exportClasses("RRDD") -exportMethods("collect", "lapply", "count", "length", "reduce", "lapplyPartition") +exportMethods( + "cache", + "collect", + "count", + "length", + "lapply", + "lapplyPartition", + "reduce" + ) # S3 methods exported export("textFile", "parallelize") diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index ac711e758612a..dead936179634 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -20,6 +20,14 @@ RRDD <- function(jrdd, serialized = TRUE) { new("RRDD", jrdd = jrdd, serialized = serialized) } +setGeneric("cache", function(rrdd) { standardGeneric("cache") }) +setMethod("cache", + signature(rrdd = "RRDD"), + function(rrdd) { + .jcall(rrdd@jrdd, "Lorg/apache/spark/api/java/JavaRDD;", "cache") + rrdd + }) + # collect(): Return a list that contains all of the elements in this RRDD. # NOTE: supports only RRDD[Array[Byte]] and RRDD[primitive java type] for now. setGeneric("collect", function(rrdd, ...) { standardGeneric("collect") }) @@ -70,8 +78,6 @@ setMethod("lapplyPartition", depsBin <- getDependencies(FUN) depsBinArr <- .jarray(depsBin) - #jsc <- get(".sparkRjsc", env=.sparkREnv) - #jsc$addFile(depsFile) rrddRef <- new(J("org.apache.spark.api.r.RRDD"), X@jrdd$rdd(), serializedFuncArr, diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 79236cf5b0930..efcc5755712f0 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -43,14 +43,17 @@ isRRDD <- function(name, env) { } getDependencies <- function(name) { - fileName <- paste("/tmp/", as.character(quote(name)), "-", - as.numeric(Sys.time()), ".deps", sep="") + fileName <- tempfile(pattern="spark-utils", fileext=".deps") + #paste(tempdir(), "/", as.character(quote(name)), "-", + # as.numeric(Sys.time()), ".deps", sep="") funcEnv <- environment(name) varsToSave <- ls(funcEnv) filteredVars <- Filter(function(x) { !isRRDD(x, funcEnv) }, varsToSave) - #cat("Saving ", filteredVars, "\n") + save(list=filteredVars, file=fileName, envir=funcEnv) fileSize <- file.info(fileName)$size - readBin(fileName, raw(), fileSize, endian="big") - #fileName + binData <- readBin(fileName, raw(), fileSize, endian="big") + + unlink(fileName) + binData } diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index d5f1c4b871560..78f676c2bd3db 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -10,7 +10,7 @@ source_local("serialize.R") # NOTE: We use "stdin" to get the process stdin instead of the command line inputCon <- file("stdin", open = "rb") -outputFileName <- paste("/tmp/", Sys.getpid(), ".out", sep="") +outputFileName <- tempfile(pattern="spark-exec", fileext=".out") outputCon <- file(outputFileName, open="wb") # First read the function @@ -18,14 +18,18 @@ execFunction <- unserialize(readRaw(inputCon)) isSerialized <- readInt(inputCon) -#depsFile <- readString(inputCon) execFunctionDeps <- readRaw(inputCon) -depsFileName <- paste("/tmp/", Sys.getpid(), ".deps", sep="") +depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") depsFile <- file(depsFileName, open="wb") writeBin(execFunctionDeps, depsFile, endian="big") close(depsFile) load(depsFileName, envir=environment(execFunction)) +unlink(depsFileName) + +# Redirect stdout to stderr to prevent print statements from +# interfering with outputStream +sink(stderr()) if (isSerialized) { # Now read as many characters as described in funcLen @@ -46,5 +50,8 @@ writeInt(outputCon, 0L) close(outputCon) +# Restore stdout +sink() + # Finally print the name of the output file cat(outputFileName, "\n") From 1319cda23312ffadbdc8e9732001d8ee7236d2fc Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 5 Oct 2013 12:35:28 -0700 Subject: [PATCH 022/687] Make standalone programs run with sparkR --- pkg/inst/worker/worker.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 78f676c2bd3db..fbf117b4f277b 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -8,6 +8,12 @@ source_local <- function(fname) { source_local("serialize.R") +# Set libPaths to include SparkR package as loadNamespace needs this +# TODO: Figure out if we can avoid this by not loading any objects that require +# SparkR namespace +sparkHome <- Sys.getenv("SPARK_HOME") +.libPaths(c( .libPaths(), paste(sparkHome,"/R/lib", sep=""))) + # NOTE: We use "stdin" to get the process stdin instead of the command line inputCon <- file("stdin", open = "rb") outputFileName <- tempfile(pattern="spark-exec", fileext=".out") From 555220a1988943c87d8b6aac4b818420cd04c52f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 5 Oct 2013 12:46:19 -0700 Subject: [PATCH 023/687] Add readme and update Makefile --- Makefile | 6 +----- README.md | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 README.md diff --git a/Makefile b/Makefile index 4de6fb5a899eb..70e0f7055266a 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,4 @@ -LIB_DIR := lib/ -JAR_NAME := sparkr-1.0-allinone.jar +LIB_DIR := $(shell pwd)/lib/ all: sparkR @@ -9,6 +8,3 @@ SparkR: pkg/R/* sparkR: SparkR sparkr: SparkR - -#java: - #mvn package shade:shade diff --git a/README.md b/README.md new file mode 100644 index 0000000000000..952eb36b025e4 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# R on Spark + +## Building + +R on Spark requires the R package `rJava` to be installed. To install `rJava`, +you can run the following command in R: + + install.packages("rJava") + +To run R on Spark, first build Spark using `sbt/sbt assembly`. Following that +compile the SparkR package by running + + make -C R + +Once you have built Spark and the SparkR package, you can start using by +launching the SparkR shell with + + ./sparkR + +SparkR also comes with several sample programs in the `R/examples` directory. +To run one of them, use `./sparkR `. For example: + + ./sparkR R/examples/pi.R local[2] From ab2e061cba90fbd8bf979ef17dcd26c6394b7833 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 5 Oct 2013 13:02:56 -0700 Subject: [PATCH 024/687] Create LIB_DIR before installing SparkR package --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 70e0f7055266a..cb14863c44e72 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,7 @@ LIB_DIR := $(shell pwd)/lib/ all: sparkR SparkR: pkg/R/* + mkdir -p $(LIB_DIR) R CMD INSTALL --library=$(LIB_DIR) pkg/ sparkR: SparkR From fde3f9c729481968b9085310239ffe84b917a094 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 5 Oct 2013 20:21:28 -0700 Subject: [PATCH 025/687] Flatten by default and disable recursive unlist --- pkg/R/RRDD.R | 5 +++-- pkg/R/utils.R | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index dead936179634..dfc3ac629fbd3 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -33,7 +33,7 @@ setMethod("cache", setGeneric("collect", function(rrdd, ...) { standardGeneric("collect") }) setMethod("collect", signature(rrdd = "RRDD"), - function(rrdd, flatten=FALSE) { + function(rrdd, flatten = TRUE) { collected <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") JavaListToRList(collected, flatten) }) @@ -97,6 +97,7 @@ setMethod("reduce", Reduce(func, part) } - partitionList <- collect(lapplyPartition(rrdd, reducePartition)) + partitionList <- collect(lapplyPartition(rrdd, reducePartition), + flatten=FALSE) Reduce(func, partitionList) }) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index efcc5755712f0..31dca72ffa277 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -2,7 +2,7 @@ # TODO: test with RRDD[T] where T is not String # Given a List, returns an R list. -JavaListToRList <- function(jList, flatten = FALSE) { +JavaListToRList <- function(jList, flatten) { size <- .jcall(jList, "I", "size") results <- lapply(0:(size - 1), @@ -31,7 +31,7 @@ JavaListToRList <- function(jList, flatten = FALSE) { res }) if (flatten) { - as.list(unlist(results)) + as.list(unlist(results, recursive = FALSE)) } else { as.list(results) } From cabce6894d0da8d891209c93d2d4b9470a1a3f0a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 5 Oct 2013 23:58:04 -0700 Subject: [PATCH 026/687] Fix warnings from package check --- pkg/DESCRIPTION | 3 ++- pkg/R/RRDD.R | 2 +- pkg/R/sparkR.R | 10 +++++----- pkg/R/utils.R | 2 -- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index edc2d78e8b0c4..1bbdd65b97b96 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -5,6 +5,7 @@ Version: 0.1 Date: 2013-09-09 Author: Shivaram Venkataraman Maintainer: Shivaram Venkataraman -Depends: R (>= 3.0), rJava +Depends: R (>= 3.0), methods, rJava +Suggests: testthat Description: R frontend for Spark License: BSD diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index dfc3ac629fbd3..a71c7169e1df8 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -73,7 +73,7 @@ setGeneric("lapplyPartition", function(X, FUN) { setMethod("lapplyPartition", signature(X = "RRDD", FUN = "function"), function(X, FUN) { - serializedFunc <- serialize(FUN, conn = NULL, ascii = TRUE) + serializedFunc <- serialize(FUN, connection = NULL, ascii = TRUE) serializedFuncArr <- .jarray(serializedFunc) depsBin <- getDependencies(FUN) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 28c4535d953e2..3dd3beaf6c7ae 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -9,7 +9,7 @@ sparkR.onLoad <- function(libname, pkgname) { sparkJarAbsPath <- c(sparkDir[[1]][1:(length(sparkDir[[1]]) - 2)], sparkJarPath) classPath <- paste(sparkJarAbsPath, collapse = "/") - assign("sparkJar", classPath, env=.sparkREnv) + assign("sparkJar", classPath, envir=.sparkREnv) packageStartupMessage("[SparkR] Initializing with classpath ", classPath, "\n") @@ -25,17 +25,17 @@ sparkR.init <- function( jarFile = NULL, environment = NULL) { - if (exists(".sparkRjsc", env=.sparkREnv)) { - return(get(".sparkRjsc", env=.sparkREnv)) + if (exists(".sparkRjsc", envir=.sparkREnv)) { + return(get(".sparkRjsc", envir=.sparkREnv)) } # TODO: support other constructors assign( ".sparkRjsc", .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName), - env=.sparkREnv + envir=.sparkREnv ) - get(".sparkRjsc", env=.sparkREnv) + get(".sparkRjsc", envir=.sparkREnv) } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 31dca72ffa277..8e886d77ef5d8 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -44,8 +44,6 @@ isRRDD <- function(name, env) { getDependencies <- function(name) { fileName <- tempfile(pattern="spark-utils", fileext=".deps") - #paste(tempdir(), "/", as.character(quote(name)), "-", - # as.numeric(Sys.time()), ".deps", sep="") funcEnv <- environment(name) varsToSave <- ls(funcEnv) filteredVars <- Filter(function(x) { !isRRDD(x, funcEnv) }, varsToSave) From 3b26b589c477ea7931bc81e04f4c76726bb1d8fd Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 6 Oct 2013 12:04:42 -0700 Subject: [PATCH 027/687] Add a list of things to do. --- TODO.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000000000..b0362d647ce41 --- /dev/null +++ b/TODO.md @@ -0,0 +1,20 @@ +# Things to do for SparkR + +## Functions to support in RDD + +1. `head` which is called `take` in Spark. +2. `reduceByKey` and `groupByKey` -- Depends on implementing partitioner and PairRDD +3. Similar to `stats.py` in Python, add support for mean, median, stdev etc. + +## Other features to support + +1. Broadcast variables. +2. Allow R packages to be loaded into the run time. Also consider if we need to extend +this for any given R file to be sourced in the worker. +3. Use long-running R worker daemons to avoid forking a process each time. + +## Longer term wishlist + +1. RRDDs are distributed lists. Extend them to create a distributed data frame. +2. Integration with ML Lib to run ML algorithms from R. +3. Profile serialization overhead and see if there is anything better we can do. From 9594d8a9e000fc8d93ddf609ce8f441887e71f28 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 6 Oct 2013 12:25:14 -0700 Subject: [PATCH 028/687] Clean up LR example --- examples/logistic_regression.R | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index 92455859caa5c..62e95f046c264 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -7,6 +7,7 @@ if (length(args) != 3) { q("no") } +# Initialize Spark context sc <- sparkR.init(args[[1]], "LogisticRegressionR") iterations <- as.integer(args[[3]]) D <- 10 @@ -17,12 +18,10 @@ readPartition <- function(part) { })) } -begin <- as.numeric(Sys.time()) - +# Read data points and convert each partition to a matrix points <- cache(lapplyPartition(textFile(sc, args[[2]]), readPartition)) # Initialize w to a random value -#w <- rep(0, 10) w <- runif(n=D, min = -1, max = 1) cat("Initial w: ", w, "\n") @@ -31,7 +30,7 @@ gradient <- function(partition) { Y <- partition[, 1] # point labels (first column of input file) X <- partition[, -1] # point coordinates - # For each point (x, y), compute gradient function, then sum these up + # For each point (x, y), compute gradient function dot <- X %*% w logit <- 1 / (1 + exp(-Y * dot)) grad <- t(X) %*% ((logit - 1) * Y) @@ -44,6 +43,3 @@ for (i in 1:iterations) { } cat("Final w: ", w, "\n") - -end <- as.numeric(Sys.time()) -cat("\n", "------------ Time taken:", end-begin, " -------------", "\n") From bb0a3c346f0523b81e5bdcb856d13080ab37907d Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 22 Oct 2013 14:06:13 -0700 Subject: [PATCH 029/687] Add conf directory to classpath --- pkg/R/sparkR.R | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 3dd3beaf6c7ae..542036b9ea60f 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -1,14 +1,17 @@ -# Hardcoded spark jar +# FIXME: Hardcoded spark jar sparkJarPath <- "assembly/target/scala-2.9.3/spark-assembly-0.8.0-SNAPSHOT-hadoop1.0.4.jar" - .sparkREnv <- new.env() +# TODO: Figure out classpath using bin/compute-classpath.sh sparkR.onLoad <- function(libname, pkgname) { sparkDir <- strsplit(libname, "/") sparkJarAbsPath <- c(sparkDir[[1]][1:(length(sparkDir[[1]]) - 2)], sparkJarPath) - classPath <- paste(sparkJarAbsPath, collapse = "/") + classPath <- paste(sparkJarAbsPath, collapse = "/") + confPath <- paste(c(sparkDir[[1]][1:(length(sparkDir[[1]]) - 2)], "conf"), + collapse="/") + classPath <- paste(confPath, classPath, sep=":") assign("sparkJar", classPath, envir=.sparkREnv) packageStartupMessage("[SparkR] Initializing with classpath ", classPath, "\n") From 417aaeda0aaba604b6ff7c3a1312797575d028f2 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 22 Oct 2013 17:09:26 -0700 Subject: [PATCH 030/687] Use temp file in Spark to pipe output --- pkg/inst/worker/worker.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index fbf117b4f277b..b836480ab0b99 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -16,7 +16,9 @@ sparkHome <- Sys.getenv("SPARK_HOME") # NOTE: We use "stdin" to get the process stdin instead of the command line inputCon <- file("stdin", open = "rb") -outputFileName <- tempfile(pattern="spark-exec", fileext=".out") +#outputFileName <- tempfile(pattern="spark-exec", fileext=".out") + +outputFileName <- readLines(inputCon, n = 1) outputCon <- file(outputFileName, open="wb") # First read the function From ec3cd67ff124c94db43a36c2f3f8f6b267597516 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 22 Oct 2013 17:09:26 -0700 Subject: [PATCH 031/687] Use temp file in Spark to pipe output --- RRDD.scala | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 14c97fcfbc413..a4020b28d996a 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -2,6 +2,7 @@ package org.apache.spark.api.r import java.io._ import org.apache.spark.api.java.{JavaSparkContext, JavaRDD} +import org.apache.spark.util.Utils import scala.io.Source import scala.collection.JavaConversions._ @@ -34,6 +35,10 @@ class RRDD[T: ClassManifest]( val proc = pb.start() val env = SparkEnv.get + val tempDir = Utils.getLocalDir + val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) + val tempFileName = tempFile.getAbsolutePath + // Start a thread to print the process's stderr to ours new Thread("stderr reader for R") { override def run() { @@ -51,6 +56,8 @@ class RRDD[T: ClassManifest]( val printOut = new PrintStream(stream) val dataOut = new DataOutputStream(stream) + printOut.println(tempFileName) + dataOut.writeInt(func.length) dataOut.write(func, 0, func.length) @@ -78,8 +85,9 @@ class RRDD[T: ClassManifest]( // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) val stdOutFileName = inputStream.readLine().trim() - //val reader = new BufferedReader(new InputStreamReader(inputStream)) + val dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) + return new Iterator[Array[Byte]] { def next(): Array[Byte] = { val obj = _nextObj @@ -111,7 +119,7 @@ class RRDD[T: ClassManifest]( } } catch { case eof: EOFException => { - throw new SparkException("Python worker exited unexpectedly (crashed)", eof) + throw new SparkException("R worker exited unexpectedly (crashed)", eof) } case e => throw e } From 1e4427e6ce4eb585a4656c29b33374c59a866bd5 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Mon, 21 Oct 2013 16:01:55 -0700 Subject: [PATCH 032/687] Implement take() for RRDD. --- pkg/NAMESPACE | 3 ++- pkg/R/RRDD.R | 20 ++++++++++++++++ pkg/inst/tests/test_take.R | 47 ++++++++++++++++++++++++++++++++++++++ pkg/inst/worker/worker.R | 2 +- 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 pkg/inst/tests/test_take.R diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 2ebbc36788e29..0a5761e246a9b 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -7,7 +7,8 @@ exportMethods( "length", "lapply", "lapplyPartition", - "reduce" + "reduce", + "take" ) # S3 methods exported diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index a71c7169e1df8..d0222d65590e5 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -101,3 +101,23 @@ setMethod("reduce", flatten=FALSE) Reduce(func, partitionList) }) + +# Take the first NUM elements in the RRDD. NULL if there is nothing to take. +# (Not naming it as the more idiomatic `head' since SparkR uses S4 whereas the +# head generic function in R is defined in S3 style. Mixing will cause +# troubles.) +setGeneric("take", function(rrdd, num) { standardGeneric("take") }) +setMethod("take", + signature(rrdd = "RRDD", num = "numeric"), + function(rrdd, num) { + + # TODO: use iterators package (R does not have native ones)? + takeUpToNum <- function(partition) { + head(unlist(partition, recursive = FALSE, use.names = FALSE), n = num) + } + + partitionHeads <- lapplyPartition(rrdd, takeUpToNum) + vals <- collect(partitionHeads) + + head(unlist(vals, recursive = FALSE, use.names = FALSE), n = num) + }) diff --git a/pkg/inst/tests/test_take.R b/pkg/inst/tests/test_take.R new file mode 100644 index 0000000000000..aee261e1ea3de --- /dev/null +++ b/pkg/inst/tests/test_take.R @@ -0,0 +1,47 @@ +context("tests RRDD function take()") + +# Mock data +numVector <- c(-10:97) +numList <- list(sqrt(1), sqrt(2), sqrt(3), 4 ** 10) +strVector <- c("Dexter Morgan: I suppose I should be upset, even feel", + "violated, but I'm not. No, in fact, I think this is a friendly", + "message, like \"Hey, wanna play?\" and yes, I want to play. ", + "I really, really do.") +strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge, ", + "other times it helps me control the chaos.", + "Dexter Morgan: Harry and Dorris Morgan did a wonderful job ", + "raising me. But they're both dead now. I didn't kill them. Honest.") + +# JavaSparkContext handle +jsc <- sparkR.init() + +test_that("take() gives back the original elements in correct count and order", { + numVectorRRDD <- parallelize(jsc, numVector, 10) + expect_equal(take(numVectorRRDD, 1), head(as.list(numVector), n = 1)) + expect_equal(take(numVectorRRDD, 3), head(as.list(numVector), n = 3)) + expect_equal(take(numVectorRRDD, length(numVector)), as.list(numVector)) + expect_equal(take(numVectorRRDD, length(numVector) + 1), as.list(numVector)) + + numListRRDD <- parallelize(jsc, numList, 1) + numListRRDD2 <- parallelize(jsc, numList, 4) + expect_equal(take(numListRRDD, 3), take(numListRRDD2, 3)) + expect_equal(take(numListRRDD, 5), take(numListRRDD2, 5)) + expect_equal(take(numListRRDD, 1), head(as.list(numList), n = 1)) + expect_equal(take(numListRRDD2, 999), as.list(numList)) + + strVectorRRDD <- parallelize(jsc, strVector, 2) + strVectorRRDD2 <- parallelize(jsc, strVector, 3) + expect_equal(take(strVectorRRDD, 4), as.list(strVector)) + expect_equal(take(strVectorRRDD2, 2), head(as.list(strVector), n = 2)) + + strListRRDD <- parallelize(jsc, strList, 4) + strListRRDD2 <- parallelize(jsc, strList, 1) + expect_equal(take(strListRRDD, 3), head(as.list(strList), n = 3)) + expect_equal(take(strListRRDD2, 1), head(as.list(strList), n = 1)) + + expect_true(is.null(take(strListRRDD, 0))) + expect_true(is.null(take(strVectorRRDD, 0))) + expect_true(is.null(take(numListRRDD, 0))) + expect_true(is.null(take(numVectorRRDD, 0))) +}) + diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index b836480ab0b99..9aacda7d47442 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -35,7 +35,7 @@ close(depsFile) load(depsFileName, envir=environment(execFunction)) unlink(depsFileName) -# Redirect stdout to stderr to prevent print statements from +# Redirect stdout to stderr to prevent print statements from # interfering with outputStream sink(stderr()) From 9de093574d74d1c54b6b9e4ed6c61e5550399095 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Mon, 21 Oct 2013 16:01:55 -0700 Subject: [PATCH 033/687] Implement take() for RRDD. --- RRDD.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/RRDD.scala b/RRDD.scala index a4020b28d996a..8ad8b3eab622f 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -28,7 +28,10 @@ class RRDD[T: ClassManifest]( val rCommand = "Rscript" val rOptions = "--vanilla" - val sparkHome = new ProcessBuilder().environment().get("SPARK_HOME") + val sparkHome = Option(new ProcessBuilder().environment().get("SPARK_HOME")) match { + case Some(path) => path + case None => sys.error("SPARK_HOME not set as an environment variable.") + } val rExecScript = sparkHome + "/R/pkg/inst/worker/worker.R" val pb = new ProcessBuilder(List(rCommand, rOptions, rExecScript)) @@ -143,4 +146,5 @@ object RRDD { def createRDDFromArray(jsc: JavaSparkContext, arr: Array[Array[Byte]]): JavaRDD[Array[Byte]] = { JavaRDD.fromRDD(jsc.sc.parallelize(arr, arr.length)) } + } From a054e55fc1e4e0e3bc948de1d39e88c295625555 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 22 Oct 2013 17:38:36 -0700 Subject: [PATCH 034/687] Fix take() tests(): mode difference. --- pkg/inst/tests/test_take.R | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/inst/tests/test_take.R b/pkg/inst/tests/test_take.R index aee261e1ea3de..31a8b8d343c83 100644 --- a/pkg/inst/tests/test_take.R +++ b/pkg/inst/tests/test_take.R @@ -17,27 +17,27 @@ jsc <- sparkR.init() test_that("take() gives back the original elements in correct count and order", { numVectorRRDD <- parallelize(jsc, numVector, 10) - expect_equal(take(numVectorRRDD, 1), head(as.list(numVector), n = 1)) - expect_equal(take(numVectorRRDD, 3), head(as.list(numVector), n = 3)) - expect_equal(take(numVectorRRDD, length(numVector)), as.list(numVector)) - expect_equal(take(numVectorRRDD, length(numVector) + 1), as.list(numVector)) + expect_equal(take(numVectorRRDD, 1), unlist(head(as.list(numVector), n = 1))) + expect_equal(take(numVectorRRDD, 3), unlist(head(as.list(numVector), n = 3))) + expect_equal(take(numVectorRRDD, length(numVector)), numVector) + expect_equal(take(numVectorRRDD, length(numVector) + 1), numVector) numListRRDD <- parallelize(jsc, numList, 1) numListRRDD2 <- parallelize(jsc, numList, 4) expect_equal(take(numListRRDD, 3), take(numListRRDD2, 3)) expect_equal(take(numListRRDD, 5), take(numListRRDD2, 5)) - expect_equal(take(numListRRDD, 1), head(as.list(numList), n = 1)) - expect_equal(take(numListRRDD2, 999), as.list(numList)) + expect_equal(take(numListRRDD, 1), unlist(head(as.list(numList), n = 1))) + expect_equal(take(numListRRDD2, 999), unlist(numList)) strVectorRRDD <- parallelize(jsc, strVector, 2) strVectorRRDD2 <- parallelize(jsc, strVector, 3) - expect_equal(take(strVectorRRDD, 4), as.list(strVector)) - expect_equal(take(strVectorRRDD2, 2), head(as.list(strVector), n = 2)) + expect_equal(take(strVectorRRDD, 4), strVector) + expect_equal(take(strVectorRRDD2, 2), unlist(head(as.list(strVector), n = 2))) strListRRDD <- parallelize(jsc, strList, 4) strListRRDD2 <- parallelize(jsc, strList, 1) - expect_equal(take(strListRRDD, 3), head(as.list(strList), n = 3)) - expect_equal(take(strListRRDD2, 1), head(as.list(strList), n = 1)) + expect_equal(take(strListRRDD, 3), unlist(head(as.list(strList), n = 3))) + expect_equal(take(strListRRDD2, 1), unlist( head(as.list(strList), n = 1))) expect_true(is.null(take(strListRRDD, 0))) expect_true(is.null(take(strVectorRRDD, 0))) From 7d7fe3be8a01c4dd2e1fcb145d7543318f8a8b9a Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Thu, 24 Oct 2013 01:35:03 -0700 Subject: [PATCH 035/687] Re-implement take(): take a partition at a time and append. --- pkg/R/RRDD.R | 31 ++++++++++++++++++------------- pkg/inst/tests/test_take.R | 28 ++++++++++++++-------------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index d0222d65590e5..72a0f40531591 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -102,22 +102,27 @@ setMethod("reduce", Reduce(func, partitionList) }) -# Take the first NUM elements in the RRDD. NULL if there is nothing to take. -# (Not naming it as the more idiomatic `head' since SparkR uses S4 whereas the -# head generic function in R is defined in S3 style. Mixing will cause -# troubles.) +# Take the first NUM elements in the RRDD and returns them in a list. setGeneric("take", function(rrdd, num) { standardGeneric("take") }) setMethod("take", signature(rrdd = "RRDD", num = "numeric"), function(rrdd, num) { - - # TODO: use iterators package (R does not have native ones)? - takeUpToNum <- function(partition) { - head(unlist(partition, recursive = FALSE, use.names = FALSE), n = num) + resList <- list() + index <- -1 + numPartitions <- .jcall(rrdd@jrdd, "I", "numPartitions") + while (TRUE) { + index <- index + 1 + + if (length(resList) >= num || index >= numPartitions) + break + + # a JList of byte arrays + partition <- .jcall(rrdd@jrdd, + "Ljava/util/List;", + "collectPartition", + as.integer(index)) + elems <- JavaListToRList(partition, flatten = TRUE) + resList <- append(resList, head(elems, n = num - length(resList))) # O(n^2)? } - - partitionHeads <- lapplyPartition(rrdd, takeUpToNum) - vals <- collect(partitionHeads) - - head(unlist(vals, recursive = FALSE, use.names = FALSE), n = num) + resList }) diff --git a/pkg/inst/tests/test_take.R b/pkg/inst/tests/test_take.R index 31a8b8d343c83..87f5ec797ca6d 100644 --- a/pkg/inst/tests/test_take.R +++ b/pkg/inst/tests/test_take.R @@ -17,31 +17,31 @@ jsc <- sparkR.init() test_that("take() gives back the original elements in correct count and order", { numVectorRRDD <- parallelize(jsc, numVector, 10) - expect_equal(take(numVectorRRDD, 1), unlist(head(as.list(numVector), n = 1))) - expect_equal(take(numVectorRRDD, 3), unlist(head(as.list(numVector), n = 3))) - expect_equal(take(numVectorRRDD, length(numVector)), numVector) - expect_equal(take(numVectorRRDD, length(numVector) + 1), numVector) + expect_equal(take(numVectorRRDD, 1), as.list(head(numVector, n = 1))) + expect_equal(take(numVectorRRDD, 3), as.list(head(numVector, n = 3))) + expect_equal(take(numVectorRRDD, length(numVector)), as.list(numVector)) + expect_equal(take(numVectorRRDD, length(numVector) + 1), as.list(numVector)) numListRRDD <- parallelize(jsc, numList, 1) numListRRDD2 <- parallelize(jsc, numList, 4) expect_equal(take(numListRRDD, 3), take(numListRRDD2, 3)) expect_equal(take(numListRRDD, 5), take(numListRRDD2, 5)) - expect_equal(take(numListRRDD, 1), unlist(head(as.list(numList), n = 1))) - expect_equal(take(numListRRDD2, 999), unlist(numList)) + expect_equal(take(numListRRDD, 1), as.list(head(numList, n = 1))) + expect_equal(take(numListRRDD2, 999), numList) strVectorRRDD <- parallelize(jsc, strVector, 2) strVectorRRDD2 <- parallelize(jsc, strVector, 3) - expect_equal(take(strVectorRRDD, 4), strVector) - expect_equal(take(strVectorRRDD2, 2), unlist(head(as.list(strVector), n = 2))) + expect_equal(take(strVectorRRDD, 4), as.list(strVector)) + expect_equal(take(strVectorRRDD2, 2), as.list(head(strVector, n = 2))) strListRRDD <- parallelize(jsc, strList, 4) strListRRDD2 <- parallelize(jsc, strList, 1) - expect_equal(take(strListRRDD, 3), unlist(head(as.list(strList), n = 3))) - expect_equal(take(strListRRDD2, 1), unlist( head(as.list(strList), n = 1))) + expect_equal(take(strListRRDD, 3), as.list(head(strList, n = 3))) + expect_equal(take(strListRRDD2, 1), as.list(head(strList, n = 1))) - expect_true(is.null(take(strListRRDD, 0))) - expect_true(is.null(take(strVectorRRDD, 0))) - expect_true(is.null(take(numListRRDD, 0))) - expect_true(is.null(take(numVectorRRDD, 0))) + expect_true(length(take(strListRRDD, 0)) == 0) + expect_true(length(take(strVectorRRDD, 0)) == 0) + expect_true(length(take(numListRRDD, 0)) == 0) + expect_true(length(take(numVectorRRDD, 0)) == 0) }) From f60406ae3318221b64ec7d0a1daeb29a4c33673a Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 26 Oct 2013 14:58:00 -0700 Subject: [PATCH 036/687] Add ability to parallelize key-val collections in R. --- pkg/R/RRDD.R | 13 +++++++++++++ pkg/R/context.R | 50 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 72a0f40531591..513eeeb53b935 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -126,3 +126,16 @@ setMethod("take", } resList }) + +setGeneric("partitionBy", + function(rrdd, numPartitions, partitionFunc) { + standardGeneric("partitionBy") + }) +setMethod("partitionBy", + signature(rrdd = "RRDD", numPartitions = "integer", partitionFunc = "function"), + function(rrdd, numPartitions, partitionFunc) { + // TODO: implement me: + // create a new environment, add each key-val to the environment + // serialize the :qa + + }) diff --git a/pkg/R/context.R b/pkg/R/context.R index 407fb2c6336a1..b9a21b8e646d2 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -18,33 +18,51 @@ textFile <- function(jsc, name, minSplits=NULL) { # Distribute a local R homogeneous list to form an RRDD[Array[Byte]]. If a # vector is passed as `coll', as.list() will be called on it to convert it to a -# list. -# TODO: bound/safeguard numSlices -# TODO: unit tests for if the split works for all primitives -# TODO: support matrix, data frame, etc -parallelize <- function(jsc, coll, numSlices = 1) { +# list. Use pairwise == TRUE if coll is a collection of homogeneous key-val +# pairs. +parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { + # TODO: bound/safeguard numSlices + # TODO: unit tests for if the split works for all primitives + # TODO: support matrix, data frame, etc if (!is.list(coll)) { if (!is.vector(coll)) { message(paste("context.R: parallelize() currently only supports lists and vectors.", "Calling as.list() to coerce coll into a list.")) } - coll = as.list(coll) + coll <- as.list(coll) } - if (numSlices > length(coll)) { - message(paste("context.R: parallelize: numSlices larger than coll's length", - "; defaulting numSlices to the length.", sep="")) - numSlices = length(coll) - } + if (numSlices > length(coll)) + numSlices <- length(coll) sliceLen <- length(coll) %/% numSlices slices <- split(coll, rep(1:(numSlices + 1), each = sliceLen)[1:length(coll)]) - # vector of raws - serializedSlices <- lapply(slices, serialize, connection = NULL) - # a java array of byte[]; in Scala, viewed as Array[Array[Byte]] - javaSerializedSlices <- .jarray(lapply(serializedSlices, .jarray), contents.class = "[B") - # JavaRDD[Array[Byte]] + # serialize each slice; obtain a list of raws, or a list of lists (2-tuples) of raws + serializedSlices <- if (!pairwise) { + lapply(slices, serialize, connection = NULL) + } else { + nestedSerialize <- function(tuple) { + keyRaw <- serialize(tuple[[1]], NULL) + valRaw <- serialize(tuple[[2]], NULL) + list(keyRaw, valRaw) + } + lapply(slices, nestedSerialize) + } + + # if !pairwise, Array[Array[Byte]]; otherwise, one more nested layer + javaSerializedSlices <- if (!pairwise) { + .jarray(lapply(serializedSlices, .jarray), contents.class = "[B") + } else { + nestedJArray <- function(tuple) { + keyByteJArray <- .jarray(tuple[[1]], contents.class = "B") + valByteJArray <- .jarray(tuple[[2]], contents.class = "B") + .jarray(list(keyByteJArray, valByteJArray), contents.class = "[B") + } + .jarray(lapply(serializedSlices, nestedJArray), contents.class = "[[B") + } + + # JavaRDD[Array[Byte]], or JavaRDD[(Array[Byte], Array[Byte])] jrdd <- .jcall("org/apache/spark/api/r/RRDD", "Lorg/apache/spark/api/java/JavaRDD;", "createRDDFromArray", From 0e452935a714970ded9ad76061162f5b049d6ff0 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 26 Oct 2013 14:58:00 -0700 Subject: [PATCH 037/687] Add ability to parallelize key-val collections in R. --- RRDD.scala | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/RRDD.scala b/RRDD.scala index 8ad8b3eab622f..01feec8597e70 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -11,6 +11,24 @@ import org.apache.spark._ import org.apache.spark.rdd.RDD import org.apache.spark.rdd.PipedRDD +//class PairwiseRRDD[T: ClassManifest]( +// parent: RDD[T], +// func: Array[Byte], +// dataSerialized: Boolean, +// functionDependencies: Array[Byte]) +// extends RDD[(Int, Array[Byte])](parent) with Logging { +// +// override def getPartitions = parent.partitions +// +// override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { +// +// Nil.asInstanceOf[Iterator[Array[Byte]] // FIXME +// +// } +// +//} + + class RRDD[T: ClassManifest]( parent: RDD[T], func: Array[Byte], @@ -147,4 +165,13 @@ object RRDD { JavaRDD.fromRDD(jsc.sc.parallelize(arr, arr.length)) } + /** + * Create an RRDD given a sequence of 2-tuples of byte arrays (key-val collections). Used to create RRDD when + * `parallelize` is called from R. + */ + def createRDDFromArray(jsc: JavaSparkContext, arr: Array[Array[Array[Byte]]]): JavaRDD[(Array[Byte], Array[Byte])] = { + val keyValPairs: Seq[(Array[Byte], Array[Byte])] = arr.map(tuple => (tuple(0), tuple(1))) + JavaRDD.fromRDD(jsc.sc.parallelize(keyValPairs, keyValPairs.length)) + } + } From b3bfad29b8f79c4eff0a91cc4baca2712172dccc Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 26 Oct 2013 15:00:47 -0700 Subject: [PATCH 038/687] Update TODO: take() done. --- TODO.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/TODO.md b/TODO.md index b0362d647ce41..9cdeb1c31318b 100644 --- a/TODO.md +++ b/TODO.md @@ -2,9 +2,8 @@ ## Functions to support in RDD -1. `head` which is called `take` in Spark. -2. `reduceByKey` and `groupByKey` -- Depends on implementing partitioner and PairRDD -3. Similar to `stats.py` in Python, add support for mean, median, stdev etc. +1. `reduceByKey` and `groupByKey` -- Depends on implementing partitioner and PairRDD +2. Similar to `stats.py` in Python, add support for mean, median, stdev etc. ## Other features to support From 82c201ae40ccd15017946d165d68b413fa4de578 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 26 Oct 2013 16:46:02 -0700 Subject: [PATCH 039/687] WIP: need to figure out the logic of (whether or not) shipping a hash func --- TODO.md | 2 ++ pkg/R/RRDD.R | 28 ++++++++++++++-- pkg/inst/worker/pairwiseWorker.R | 57 ++++++++++++++++++++++++++++++++ pkg/inst/worker/serialize.R | 21 ++++++++++-- 4 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 pkg/inst/worker/pairwiseWorker.R diff --git a/TODO.md b/TODO.md index 9cdeb1c31318b..4b6b038e09bf9 100644 --- a/TODO.md +++ b/TODO.md @@ -11,9 +11,11 @@ 2. Allow R packages to be loaded into the run time. Also consider if we need to extend this for any given R file to be sourced in the worker. 3. Use long-running R worker daemons to avoid forking a process each time. +4. Memoizations of frequently queried vals in RDD, such as numPartitions. ## Longer term wishlist 1. RRDDs are distributed lists. Extend them to create a distributed data frame. 2. Integration with ML Lib to run ML algorithms from R. 3. Profile serialization overhead and see if there is anything better we can do. +4. Reduce code duplication between SparkR and PySpark3. 4. . diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 513eeeb53b935..a051c5341c5bd 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -127,6 +127,23 @@ setMethod("take", resList }) +############ Shuffle Functions ############ + +# TODO: add bypass_serializer: collect() shoudln't unserialize data, waste of work +hashPairwiseRRDDToEnvir <- function(rrdd, hashFunc) { + res <- new.env() + collected <- collect(rrdd) + for (tuple in collected) { + hashVal = as.character(hashFunc(tuple[[1]])) + acc <- res[[hashVal]] + acc[[length(acc) + 1]] <- tuple + res[[hashVal]] <- acc + } + res # res[[bucket]] = list(list(key1, val1), ...) +} +serializedHashFunc <- serialize(hashPairwiseRRDDToEnvir, connection = NULL, ascii = TRUE) +serializedHashFuncBytes <- .jarray(serializedFunc) + setGeneric("partitionBy", function(rrdd, numPartitions, partitionFunc) { standardGeneric("partitionBy") @@ -134,8 +151,13 @@ setGeneric("partitionBy", setMethod("partitionBy", signature(rrdd = "RRDD", numPartitions = "integer", partitionFunc = "function"), function(rrdd, numPartitions, partitionFunc) { - // TODO: implement me: - // create a new environment, add each key-val to the environment - // serialize the :qa + # TODO: implement me + + pairwiseRRDD <- new(J("org.apache.spark.api.r.PairwiseRRDD"), + rrdd@jrdd$rdd(), # RDD[(Array[Byte], Array[Byte])] + serializedHashFuncBytes, + rrdd@serialized) + # TODO: next step: call partitionBy on its jrdd + # .jcall(pairwiseRRDD, ) }) diff --git a/pkg/inst/worker/pairwiseWorker.R b/pkg/inst/worker/pairwiseWorker.R new file mode 100644 index 0000000000000..64b82aff0284d --- /dev/null +++ b/pkg/inst/worker/pairwiseWorker.R @@ -0,0 +1,57 @@ +# Worker class +# FIXME: refactor me and worker.R to reduce code duplication + +source_local <- function(fname) { + argv <- commandArgs(trailingOnly = FALSE) + base_dir <- dirname(substring(argv[grep("--file=", argv)], 8)) + source(paste(base_dir, fname, sep="/")) +} + +source_local("serialize.R") + +# Set libPaths to include SparkR package as loadNamespace needs this +# TODO: Figure out if we can avoid this by not loading any objects that require +# SparkR namespace +sparkHome <- Sys.getenv("SPARK_HOME") +.libPaths(c( .libPaths(), paste(sparkHome,"/R/lib", sep=""))) + +# NOTE: We use "stdin" to get the process stdin instead of the command line +inputCon <- file("stdin", open = "rb") +#outputFileName <- tempfile(pattern="spark-exec", fileext=".out") + +outputFileName <- readLines(inputCon, n = 1) +outputCon <- file(outputFileName, open="wb") + +# First read the hash function +hashFunction <- unserialize(readRaw(inputCon)) + +isSerialized <- readInt(inputCon) + +# Redirect stdout to stderr to prevent print statements from +# interfering with outputStream +sink(stderr()) + +if (isSerialized) { + # Now read as many characters as described in funcLen + data <- unserialize(readRaw(inputCon)) +} else { + data <- readLines(inputCon) +} + + +#sink(stderr()) +#print(execFunction) +#sink() + +output <- hashFunction(data) # FIXME + +writeRaw(outputCon, output) +writeInt(outputCon, 0L) + +close(outputCon) + +# Restore stdout +sink() + +# Finally print the name of the output file +cat(outputFileName, "\n") diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index d6bd9977ddc4d..bbe269ebcc598 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -19,8 +19,25 @@ writeInt <- function(con, value) { writeBin(as.integer(value), con, endian="big") } -writeRaw <- function(con, batch) { - outputSer <- serialize(batch, ascii = FALSE, conn = NULL) +writeRaw <- function(con, batch, serialized = FALSE) { + if (serialized) { + outputSer <- batch + } else { + outputSer <- serialize(batch, ascii = FALSE, conn = NULL) + } writeInt(con, length(outputSer)) writeBin(outputSer, con, endian="big") } + +# Used for writing out a hashed-by-key pairwise RDD. +writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { + writeInt(con, length(e)) + for (bucketNum in ls(e)) { + writeInt(con, bucketNum) + writeInt(con, length(e[[bucketNum]])) + for (tuple in e[[bucketNum]]) { + writeRaw(con, tuple[[1]], keyValPairsSerialized) + writeRaw(con, tuple[[2]], keyValPairsSerialized) + } + } +} From 11c893b9756a063e7e2e350b351fe5977165f982 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 26 Oct 2013 16:46:02 -0700 Subject: [PATCH 040/687] WIP: need to figure out the logic of (whether or not) shipping a hash func --- RRDD.scala | 181 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 151 insertions(+), 30 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 01feec8597e70..653a96b446bda 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -1,33 +1,132 @@ package org.apache.spark.api.r import java.io._ -import org.apache.spark.api.java.{JavaSparkContext, JavaRDD} -import org.apache.spark.util.Utils - import scala.io.Source import scala.collection.JavaConversions._ - import org.apache.spark._ +import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.rdd.RDD -import org.apache.spark.rdd.PipedRDD - -//class PairwiseRRDD[T: ClassManifest]( -// parent: RDD[T], -// func: Array[Byte], -// dataSerialized: Boolean, -// functionDependencies: Array[Byte]) -// extends RDD[(Int, Array[Byte])](parent) with Logging { -// -// override def getPartitions = parent.partitions -// -// override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { -// -// Nil.asInstanceOf[Iterator[Array[Byte]] // FIXME -// -// } -// -//} +import org.apache.spark.util.Utils + + +/** + * Form an RDD[(Array[Byte], Array[Byte])] from key-value pairs returned from R. + * This is used by SparkR's shuffle operations. + */ +private class PairwiseRRDD( + parent: RDD[(Array[Byte], Array[Byte])], + hashFunc: Array[Byte], + dataSerialized: Boolean) + extends RDD[(Array[Byte], Array[Byte])](parent) { + + override def getPartitions = parent.partitions + + override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { + // TODO: implement me +// parent.iterator(split, context).grouped(2).map { +// case Seq(keyBytes, valBytes) => (keyBytes, valBytes) +// case x => throw new SparkContext("PairwiseRRDD: un") +// } + + val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt + + val pb = SparkRHelper.rPairwiseWorkerProcessBuilder + + val proc = pb.start() + val env = SparkEnv.get + + val tempDir = Utils.getLocalDir + val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) + val tempFileName = tempFile.getAbsolutePath + // Start a thread to print the process's stderr to ours + new Thread("stderr reader for R") { + override def run() { + for (line <- Source.fromInputStream(proc.getErrorStream).getLines) { + System.err.println(line) + } + } + }.start() + + // Start a thread to feed the process input from our parent's iterator + new Thread("stdin writer for R") { + override def run() { + SparkEnv.set(env) + val stream = new BufferedOutputStream(proc.getOutputStream, bufferSize) + val printOut = new PrintStream(stream) + val dataOut = new DataOutputStream(stream) + + printOut.println(tempFileName) + + dataOut.writeInt(hashFunc.length) + dataOut.write(hashFunc, 0, hashFunc.length) + + dataOut.writeInt(if(dataSerialized) 1 else 0) + + for (elem <- firstParent[(Array[Byte], Array[Byte])].iterator(split, context)) { + if (dataSerialized) { + val elemArr = elem.asInstanceOf[Array[Byte]] + dataOut.writeInt(elemArr.length) + dataOut.write(elemArr, 0, elemArr.length) + } else { + printOut.println(elem) + } + } + stream.close() + } + }.start() + + // Return an iterator that read lines from the process's stdout + val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) + val stdOutFileName = inputStream.readLine().trim() + + val dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) + + return new Iterator[Array[Byte]] { + def next(): Array[Byte] = { + val obj = _nextObj + if (hasNext) { + _nextObj = read() + } + obj + } + + private def read(): Array[Byte] = { + try { + val length = dataStream.readInt() + // logError("READ length " + length) + // val lengthStr = Option(dataStream.readLine()).getOrElse("0").trim() + // var length = 0 + // try { + // length = lengthStr.toInt + // } catch { + // case nfe: NumberFormatException => + // } + + length match { + case length if length > 0 => + val obj = new Array[Byte](length) + dataStream.read(obj, 0, length) + obj + case _ => + new Array[Byte](0) + } + } catch { + case eof: EOFException => { + throw new SparkException("R worker exited unexpectedly (crashed)", eof) + } + case e => throw e + } + } + var _nextObj = read() + + def hasNext = _nextObj.length != 0 + } + } + + lazy val asJavaPairRDD : JavaPairRDD[Array[Byte], Array[Byte]] = JavaPairRDD.fromRDD(this) + +} class RRDD[T: ClassManifest]( parent: RDD[T], @@ -44,14 +143,7 @@ class RRDD[T: ClassManifest]( // val depsFileName = new File(depsFile).getName // val localDepsFile = SparkFiles.get(depsFileName) - val rCommand = "Rscript" - val rOptions = "--vanilla" - val sparkHome = Option(new ProcessBuilder().environment().get("SPARK_HOME")) match { - case Some(path) => path - case None => sys.error("SPARK_HOME not set as an environment variable.") - } - val rExecScript = sparkHome + "/R/pkg/inst/worker/worker.R" - val pb = new ProcessBuilder(List(rCommand, rOptions, rExecScript)) + val pb = SparkRHelper.rWorkerProcessBuilder val proc = pb.start() val env = SparkEnv.get @@ -175,3 +267,32 @@ object RRDD { } } + +object SparkRHelper { + + // FIXME: my eyes bleed... + + lazy val rWorkerProcessBuilder = { + val rCommand = "Rscript" + val rOptions = "--vanilla" + val sparkHome = Option(new ProcessBuilder().environment().get("SPARK_HOME")) match { + case Some(path) => path + case None => sys.error("SPARK_HOME not set as an environment variable.") + } + val rExecScript = sparkHome + "/R/pkg/inst/worker/worker.R" + new ProcessBuilder(List(rCommand, rOptions, rExecScript)) + } + + + lazy val rPairwiseWorkerProcessBuilder = { + val rCommand = "Rscript" + val rOptions = "--vanilla" + val sparkHome = Option(new ProcessBuilder().environment().get("SPARK_HOME")) match { + case Some(path) => path + case None => sys.error("SPARK_HOME not set as an environment variable.") + } + val rExecScript = sparkHome + "/R/pkg/inst/worker/pairwiseWorker.R" + new ProcessBuilder(List(rCommand, rOptions, rExecScript)) + } + +} From 45eb9431532f51536c33f5bc24a664f86a1e61d5 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 1 Nov 2013 10:47:50 -0700 Subject: [PATCH 041/687] WIP: second cut at partitionBy. Running into R/Scala communication issues. --- pkg/R/RRDD.R | 71 +++++++++++++++++++++++--------- pkg/R/context.R | 6 +-- pkg/inst/worker/pairwiseWorker.R | 68 ++++++++++++++++++++++++------ pkg/inst/worker/serialize.R | 14 ++++++- 4 files changed, 123 insertions(+), 36 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index a051c5341c5bd..302e1306d5ce1 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -128,21 +128,15 @@ setMethod("take", }) ############ Shuffle Functions ############ - -# TODO: add bypass_serializer: collect() shoudln't unserialize data, waste of work -hashPairwiseRRDDToEnvir <- function(rrdd, hashFunc) { - res <- new.env() - collected <- collect(rrdd) - for (tuple in collected) { - hashVal = as.character(hashFunc(tuple[[1]])) - acc <- res[[hashVal]] - acc[[length(acc) + 1]] <- tuple - res[[hashVal]] <- acc - } - res # res[[bucket]] = list(list(key1, val1), ...) + source("R/pkg/R/utils.R") +.address <- function(x) { + # http://stackoverflow.com/questions/10912729/r-object-identity + substring(capture.output(.Internal(inspect(x)))[1], 2, 10) } -serializedHashFunc <- serialize(hashPairwiseRRDDToEnvir, connection = NULL, ascii = TRUE) -serializedHashFuncBytes <- .jarray(serializedFunc) + +rrdd <- parallelize(sc, list(list(1, 2), list(3, 3), list(4, 4)), 2) +partitionFunc <- function(key) { if (key >= 3) 1 else 0 } +numPartitions <- 2 setGeneric("partitionBy", function(rrdd, numPartitions, partitionFunc) { @@ -151,13 +145,52 @@ setGeneric("partitionBy", setMethod("partitionBy", signature(rrdd = "RRDD", numPartitions = "integer", partitionFunc = "function"), function(rrdd, numPartitions, partitionFunc) { - # TODO: implement me + + hashPairsToEnvir <- function(pairs) { + # pairs: list(list(_, _), ..) + res <- new.env() + for (tuple in pairs) { + hashVal = partitionFunc(tuple[[1]]) + bucket = as.character(hashVal %% numPartitions) + acc <- res[[bucket]] + # TODO?: http://stackoverflow.com/questions/2436688/append-an-object-to-a-list-in-r-in-amortized-constant-time + acc[[length(acc) + 1]] <- tuple + res[[bucket]] <- acc + } + res + } + + serializedHashFunc <- serialize(hashPairsToEnvir, + connection = NULL, + ascii = TRUE) + serializedHashFuncBytes <- .jarray(serializedHashFunc) + depsBin <- getDependencies(hashPairsToEnvir) + depsBinArr <- .jarray(depsBin) + + # At this point, we have RDD[(Array[Byte], Array[Byte])], + # which contains the actual content, in unknown partitions order. + # We create a PairwiseRRDD that extends RDD[(Array[Byte], + # Array[Byte])], where the key is the hashed split, the value is + # the content (key-val pairs). It does not matter how the data are + # stored in what partitions at this point. pairwiseRRDD <- new(J("org.apache.spark.api.r.PairwiseRRDD"), - rrdd@jrdd$rdd(), # RDD[(Array[Byte], Array[Byte])] + rrdd@jrdd, # JavaRDD[(Array[Byte], Array[Byte])] + as.integer(numPartitions), serializedHashFuncBytes, - rrdd@serialized) + rrdd@serialized, + depsBinArr) + + # Create a corresponding RPartitioner. + rPartitioner <- new(J("org.apache.spark.api.r.RPartitioner"), + as.integer(numPartitions), + .address(partitionFunc)) # TODO: does this work? + + # Call partitionBy on the obtained PairwiseRDD. + javaPairRDD <- pairwiseRRDD$asJavaPairRDD()$partitionBy(rPartitioner) - # TODO: next step: call partitionBy on its jrdd - # .jcall(pairwiseRRDD, ) + # Call .values() on the result to get back the final result, the + # shuffled acutal content key-val pairs. + r <- javaPairRDD$values() + r$collect() }) diff --git a/pkg/R/context.R b/pkg/R/context.R index b9a21b8e646d2..f989580304c30 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -19,7 +19,7 @@ textFile <- function(jsc, name, minSplits=NULL) { # Distribute a local R homogeneous list to form an RRDD[Array[Byte]]. If a # vector is passed as `coll', as.list() will be called on it to convert it to a # list. Use pairwise == TRUE if coll is a collection of homogeneous key-val -# pairs. +# pairs (first slot will be treated as the key, second slot the value). parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives @@ -35,7 +35,7 @@ parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { if (numSlices > length(coll)) numSlices <- length(coll) - sliceLen <- length(coll) %/% numSlices + sliceLen <- length(coll) %% numSlices slices <- split(coll, rep(1:(numSlices + 1), each = sliceLen)[1:length(coll)]) # serialize each slice; obtain a list of raws, or a list of lists (2-tuples) of raws @@ -62,7 +62,7 @@ parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { .jarray(lapply(serializedSlices, nestedJArray), contents.class = "[[B") } - # JavaRDD[Array[Byte]], or JavaRDD[(Array[Byte], Array[Byte])] + # JavaRDD[Array[Byte]] if pairwise, else JavaRDD[(Array[Byte], Array[Byte])] jrdd <- .jcall("org/apache/spark/api/r/RRDD", "Lorg/apache/spark/api/java/JavaRDD;", "createRDDFromArray", diff --git a/pkg/inst/worker/pairwiseWorker.R b/pkg/inst/worker/pairwiseWorker.R index 64b82aff0284d..282f3c6c2d0e4 100644 --- a/pkg/inst/worker/pairwiseWorker.R +++ b/pkg/inst/worker/pairwiseWorker.R @@ -1,4 +1,5 @@ # Worker class + # FIXME: refactor me and worker.R to reduce code duplication source_local <- function(fname) { @@ -9,6 +10,8 @@ source_local <- function(fname) { source_local("serialize.R") +# cat("***** In pairwiseWorder\n") + # Set libPaths to include SparkR package as loadNamespace needs this # TODO: Figure out if we can avoid this by not loading any objects that require # SparkR namespace @@ -19,35 +22,76 @@ sparkHome <- Sys.getenv("SPARK_HOME") inputCon <- file("stdin", open = "rb") #outputFileName <- tempfile(pattern="spark-exec", fileext=".out") +# cat("***** About to read outputFileName\n") + outputFileName <- readLines(inputCon, n = 1) outputCon <- file(outputFileName, open="wb") -# First read the hash function -hashFunction <- unserialize(readRaw(inputCon)) +# cat("***** read name:\n") +# cat(outputFileName) # TODO: remove +# cat("\n") +# (1) read the hash function +hashFunc <- unserialize(readRaw(inputCon)) +# (2) read the isSerialized bit flag isSerialized <- readInt(inputCon) +# (3) read function dependencies +execFunctionDeps <- readRaw(inputCon) +depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") +depsFile <- file(depsFileName, open="wb") +writeBin(execFunctionDeps, depsFile, endian="big") +close(depsFile) +load(depsFileName, envir=environment(hashFunc)) +unlink(depsFileName) + +# FIXME?: put this before sink? +# (4) read # of elements to read next + +# Redirect stdout to stderr to prevent print statements from +# interfering with outputStream +sink(stderr()) + +keyValPairs = list() + +dataLen <- readInt(inputCon) +while (dataLen > 0) { +# for (i in 1:dataLen) { + if (isSerialized) { + key <- unserialize(readBin(con, raw(), as.integer(dataLen), endian="big")) + # key <- unserialize(readRaw(inputCon)) + val <- unserialize(readRaw(inputCon)) + keyValPairs[[length(keyValPairs) + 1]] <- list(key, val) + } else { + # FIXME + data <- readLines(inputCon) + } + dataLen <- readInt(inputCon) +} # Redirect stdout to stderr to prevent print statements from # interfering with outputStream sink(stderr()) -if (isSerialized) { - # Now read as many characters as described in funcLen - data <- unserialize(readRaw(inputCon)) -} else { - data <- readLines(inputCon) +# Step 1: turn the environment into a list of lists, starting with hashFunc. +envirList <- as.list(hashFunc(keyValPairs)) +keyed = list() +for (key in names(envirList)) { + bucketList <- list(as.integer(key), envirList[[key]]) + keyed[[length(keyed) + 1]] <- bucketList } +# Step 2: write out all of the keyed list. +for (keyedEntry in keyed) { + writeInt(outputCon, 2L) + writeRaw(outputCon, keyedEntry[[1]]) + writeRaw(outputCon, keyedEntry[[2]]) +} +writeInt(outputCon, 0L) # End of output #sink(stderr()) #print(execFunction) #sink() -output <- hashFunction(data) # FIXME - -writeRaw(outputCon, output) -writeInt(outputCon, 0L) - close(outputCon) # Restore stdout diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index bbe269ebcc598..1be5a9b7fb82d 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -1,12 +1,22 @@ # Utility functions to serialize, deserialize etc. readInt <- function(con) { - readBin(con, integer(), n = 1, endian="big") + r <- readBin(con, integer(), n = 1, endian="big") + write("** in readInt: ", stderr()) + write(r, stderr()) + write("**", stderr()) + r } readRaw <- function(con) { dataLen <- readInt(con) - data <- readBin(con, raw(), dataLen, endian="big") + + write("**in readRaw, dataLen: ", stderr()) + write(dataLen, stderr()) + write("**", stderr()) + write(as.character(mode(dataLen)), stderr()) + + data <- readBin(con, raw(), as.integer(dataLen), endian="big") } readString <- function(con) { From aea16c30398565ee1414d1c02c1938e4cc864554 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 1 Nov 2013 10:47:50 -0700 Subject: [PATCH 042/687] WIP: second cut at partitionBy. Running into R/Scala communication issues. --- RPartitioner.scala | 44 +++++++++++++++++++++++ RRDD.scala | 90 +++++++++++++++++++++++++++++++++------------- 2 files changed, 109 insertions(+), 25 deletions(-) create mode 100644 RPartitioner.scala diff --git a/RPartitioner.scala b/RPartitioner.scala new file mode 100644 index 0000000000000..2366b66b31449 --- /dev/null +++ b/RPartitioner.scala @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.spark.api.r + +import org.apache.spark.Partitioner +import java.util.Arrays +import org.apache.spark.util.Utils + +/** + * A [[org.apache.spark.Partitioner]] that performs handling of byte arrays, for use by the R API. + */ +class RPartitioner( + override val numPartitions: Int, + val rPartitionFunctionId: String) + extends Partitioner { + + override def getPartition(key: Any): Int = key match { + case null => 0 + case key: Array[Byte] => Utils.nonNegativeMod(Arrays.hashCode(key), numPartitions) + case _ => Utils.nonNegativeMod(key.hashCode(), numPartitions) + } + + override def equals(other: Any): Boolean = other match { + case h: RPartitioner => + h.numPartitions == numPartitions && h.rPartitionFunctionId == rPartitionFunctionId + case _ => false + } +} + diff --git a/RRDD.scala b/RRDD.scala index 653a96b446bda..0fd17645648b8 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -14,30 +14,37 @@ import org.apache.spark.util.Utils * This is used by SparkR's shuffle operations. */ private class PairwiseRRDD( - parent: RDD[(Array[Byte], Array[Byte])], + parent: JavaRDD[(Array[Byte], Array[Byte])], + numPartitions: Int, hashFunc: Array[Byte], - dataSerialized: Boolean) - extends RDD[(Array[Byte], Array[Byte])](parent) { + dataSerialized: Boolean, + functionDependencies: Array[Byte]) + extends RDD[(Array[Byte], Array[Byte])](parent.rdd) { override def getPartitions = parent.partitions - override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { + override def compute(split: Partition, context: TaskContext): Iterator[(Array[Byte], Array[Byte])] = { // TODO: implement me + // parent.iterator(split, context).grouped(2).map { // case Seq(keyBytes, valBytes) => (keyBytes, valBytes) // case x => throw new SparkContext("PairwiseRRDD: un") // } val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt - val pb = SparkRHelper.rPairwiseWorkerProcessBuilder val proc = pb.start() val env = SparkEnv.get val tempDir = Utils.getLocalDir - val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) + val tempFile = File.createTempFile("rSpark", "out2", new File(tempDir)) // FIXME: "out" causes problem? val tempFileName = tempFile.getAbsolutePath +// +// val tempDir = Utils.getLocalDir +// val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) +// val tempFileName = tempFile.getAbsolutePath + // Start a thread to print the process's stderr to ours new Thread("stderr reader for R") { @@ -61,19 +68,47 @@ private class PairwiseRRDD( dataOut.writeInt(hashFunc.length) dataOut.write(hashFunc, 0, hashFunc.length) - dataOut.writeInt(if(dataSerialized) 1 else 0) + dataOut.writeInt(if (dataSerialized) 1 else 0) - for (elem <- firstParent[(Array[Byte], Array[Byte])].iterator(split, context)) { - if (dataSerialized) { - val elemArr = elem.asInstanceOf[Array[Byte]] - dataOut.writeInt(elemArr.length) - dataOut.write(elemArr, 0, elemArr.length) - } else { - printOut.println(elem) - } + dataOut.writeInt(functionDependencies.length) + dataOut.write(functionDependencies, 0, functionDependencies.length) + +// implicit val cm : ClassManifest[(Array[Byte], Array[Byte])] = +// implicitly[ClassManifest[(Array[Byte], Array[Byte])]] + +// val iter = parent.iterator(split, context) + +// println("***********iter.length = " + iter.length) + +// dataOut.writeInt(iter.length) // TODO: is length of iterator necessary? + + // TODO: is it okay to use parent as opposed to firstParent? + parent.iterator(split, context).grouped(2).foreach { + case Seq(a, b) => +// val a = x.asInstanceOf[Tuple2[Array[Byte], Array[Byte]]]._1 +// val b = x.asInstanceOf[Tuple2[Array[Byte], Array[Byte]]]._2 +// elem match { case (keyBytes, valBytes) => +// iter.foreach { case (keyBytes, valBytes) => + val keyBytes: Array[Byte] = a.asInstanceOf[Array[Byte]] + val valBytes: Array[Byte] = b.asInstanceOf[Array[Byte]] + + if (dataSerialized) { + dataOut.writeInt(keyBytes.length) + dataOut.write(keyBytes, 0, keyBytes.length) + dataOut.writeInt(valBytes.length) + dataOut.write(valBytes, 0, valBytes.length) + } else { + // FIXME: is it possible / do we allow that an RDD[(Array[Byte], Array[Byte])] has dataSerialized == false? + printOut.println(keyBytes) + printOut.println(valBytes) + } +// case _ => + case _ => sys.error("*** elem is not 2-tuple") } + dataOut.writeInt(0) // End of output stream.close() } +// } }.start() // Return an iterator that read lines from the process's stdout @@ -82,8 +117,8 @@ private class PairwiseRRDD( val dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) - return new Iterator[Array[Byte]] { - def next(): Array[Byte] = { + return new Iterator[(Array[Byte], Array[Byte])] { + def next(): (Array[Byte], Array[Byte]) = { val obj = _nextObj if (hasNext) { _nextObj = read() @@ -91,7 +126,7 @@ private class PairwiseRRDD( obj } - private def read(): Array[Byte] = { + private def read(): (Array[Byte], Array[Byte]) = { try { val length = dataStream.readInt() // logError("READ length " + length) @@ -104,12 +139,15 @@ private class PairwiseRRDD( // } length match { - case length if length > 0 => - val obj = new Array[Byte](length) - dataStream.read(obj, 0, length) - obj - case _ => - new Array[Byte](0) + case length if length == 2 => + val hashedKeyLength = dataStream.readInt() + val hashedKey = new Array[Byte](hashedKeyLength) + dataStream.read(hashedKey, 0, hashedKeyLength) + val contentPairsLength = dataStream.readInt() + val contentPairs = new Array[Byte](contentPairsLength) + dataStream.read(contentPairs, 0, contentPairsLength) + (hashedKey, contentPairs) + case _ => (new Array[Byte](0), new Array[Byte](0)) // End of input } } catch { case eof: EOFException => { @@ -120,7 +158,7 @@ private class PairwiseRRDD( } var _nextObj = read() - def hasNext = _nextObj.length != 0 + def hasNext = !(_nextObj._1.length == 0 && _nextObj._2.length == 0) } } @@ -128,6 +166,7 @@ private class PairwiseRRDD( } +/** An RDD that stores serialized R objects as Array[Byte]. */ class RRDD[T: ClassManifest]( parent: RDD[T], func: Array[Byte], @@ -260,6 +299,7 @@ object RRDD { /** * Create an RRDD given a sequence of 2-tuples of byte arrays (key-val collections). Used to create RRDD when * `parallelize` is called from R. + * TODO?: change return type into JavaPairRDD[Array[Byte], Array[Byte]]? */ def createRDDFromArray(jsc: JavaSparkContext, arr: Array[Array[Array[Byte]]]): JavaRDD[(Array[Byte], Array[Byte])] = { val keyValPairs: Seq[(Array[Byte], Array[Byte])] = arr.map(tuple => (tuple(0), tuple(1))) From cd0a5e263c2cc6cbd43c5237459833dbcdedae84 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 6 Nov 2013 12:32:02 -0800 Subject: [PATCH 043/687] Properly parallelize() and collect() pairwise data. --- pkg/NAMESPACE | 3 ++- pkg/R/RRDD.R | 36 ++++++++++++++++++++++++++---------- pkg/R/context.R | 29 ++++++++++++++++++----------- pkg/R/utils.R | 40 ++++++++++++++++++++++++++++------------ pkg/R/zzz.R | 1 + 5 files changed, 75 insertions(+), 34 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 0a5761e246a9b..83f4c4b706f75 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -8,7 +8,8 @@ exportMethods( "lapply", "lapplyPartition", "reduce", - "take" + "take", + "partitionBy" ) # S3 methods exported diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 302e1306d5ce1..bd9727ac806bd 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -2,7 +2,9 @@ #setOldClass("jobjRef") -setClass("RRDD", slots = list(jrdd = "jobjRef", serialized = "logical")) +setClass("RRDD", slots = list(jrdd = "jobjRef", + serialized = "logical", + pairwise = "logical")) setValidity("RRDD", function(object) { @@ -16,10 +18,11 @@ setValidity("RRDD", }) # Constructor of the RRDD class. -RRDD <- function(jrdd, serialized = TRUE) { - new("RRDD", jrdd = jrdd, serialized = serialized) +RRDD <- function(jrdd, serialized = TRUE, pairwise = FALSE) { + new("RRDD", jrdd = jrdd, serialized = serialized, pairwise = pairwise) } + setGeneric("cache", function(rrdd) { standardGeneric("cache") }) setMethod("cache", signature(rrdd = "RRDD"), @@ -28,6 +31,7 @@ setMethod("cache", rrdd }) + # collect(): Return a list that contains all of the elements in this RRDD. # NOTE: supports only RRDD[Array[Byte]] and RRDD[primitive java type] for now. setGeneric("collect", function(rrdd, ...) { standardGeneric("collect") }) @@ -35,7 +39,12 @@ setMethod("collect", signature(rrdd = "RRDD"), function(rrdd, flatten = TRUE) { collected <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") - JavaListToRList(collected, flatten) + convertJListToRList(collected, if (rrdd@pairwise) FALSE else flatten) + # if (rrdd@pairwise) { + # convertJListToRList(collected, FALSE) + # } else { + # convertJListToRList(collected, flatten) + # } }) @@ -85,7 +94,7 @@ setMethod("lapplyPartition", depsBinArr, X@jrdd$classManifest()) jrdd <- rrddRef$asJavaRDD() - RRDD(jrdd, TRUE) + RRDD(jrdd, TRUE, X@pairwise) }) setGeneric("reduce", function(rrdd, func) { standardGeneric("reduce") }) @@ -121,20 +130,25 @@ setMethod("take", "Ljava/util/List;", "collectPartition", as.integer(index)) - elems <- JavaListToRList(partition, flatten = TRUE) + elems <- convertJListToRList(partition, flatten = TRUE) resList <- append(resList, head(elems, n = num - length(resList))) # O(n^2)? } resList }) ############ Shuffle Functions ############ - source("R/pkg/R/utils.R") +source("R/pkg/R/utils.R") +source("R/pkg/R/context.R") + .address <- function(x) { # http://stackoverflow.com/questions/10912729/r-object-identity substring(capture.output(.Internal(inspect(x)))[1], 2, 10) } -rrdd <- parallelize(sc, list(list(1, 2), list(3, 3), list(4, 4)), 2) +rrdd <- parallelize(sc, + # list(list(1, 2), list(3, 3), list(4, 4)), + # numSlices = 2, + # pairwise = TRUE) partitionFunc <- function(key) { if (key >= 3) 1 else 0 } numPartitions <- 2 @@ -175,7 +189,7 @@ setMethod("partitionBy", # stored in what partitions at this point. pairwiseRRDD <- new(J("org.apache.spark.api.r.PairwiseRRDD"), - rrdd@jrdd, # JavaRDD[(Array[Byte], Array[Byte])] + rrdd@jrdd, as.integer(numPartitions), serializedHashFuncBytes, rrdd@serialized, @@ -192,5 +206,7 @@ setMethod("partitionBy", # Call .values() on the result to get back the final result, the # shuffled acutal content key-val pairs. r <- javaPairRDD$values() - r$collect() + # r$collect() + r }) + diff --git a/pkg/R/context.R b/pkg/R/context.R index f989580304c30..be2a95fdae168 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -13,7 +13,7 @@ textFile <- function(jsc, name, minSplits=NULL) { } jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", name, as.integer(minSplits)) - RRDD(jrdd, FALSE) + RRDD(jrdd, FALSE, FALSE) } # Distribute a local R homogeneous list to form an RRDD[Array[Byte]]. If a @@ -35,39 +35,46 @@ parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { if (numSlices > length(coll)) numSlices <- length(coll) - sliceLen <- length(coll) %% numSlices + sliceLen <- length(coll) %/% numSlices slices <- split(coll, rep(1:(numSlices + 1), each = sliceLen)[1:length(coll)]) - # serialize each slice; obtain a list of raws, or a list of lists (2-tuples) of raws + # Serialize each slice: obtain a list of raws, or a list of lists (slices) of + # 2-tuples of raws serializedSlices <- if (!pairwise) { lapply(slices, serialize, connection = NULL) } else { - nestedSerialize <- function(tuple) { + tupleSerialize <- function(tuple) { keyRaw <- serialize(tuple[[1]], NULL) valRaw <- serialize(tuple[[2]], NULL) list(keyRaw, valRaw) } - lapply(slices, nestedSerialize) + sliceSerialize <- function(slice) { + lapply(slice, tupleSerialize) + } + lapply(slices, sliceSerialize) } - # if !pairwise, Array[Array[Byte]]; otherwise, one more nested layer + # If !pairwise, Array[Array[Byte]]; otherwise, _two_ more nested layers. javaSerializedSlices <- if (!pairwise) { .jarray(lapply(serializedSlices, .jarray), contents.class = "[B") } else { - nestedJArray <- function(tuple) { + tupleJArray <- function(tuple) { keyByteJArray <- .jarray(tuple[[1]], contents.class = "B") valByteJArray <- .jarray(tuple[[2]], contents.class = "B") .jarray(list(keyByteJArray, valByteJArray), contents.class = "[B") } - .jarray(lapply(serializedSlices, nestedJArray), contents.class = "[[B") + sliceJArray <- function(slice) { + .jarray(lapply(slice, tupleJArray), contents.class = "[[B") + } + .jarray(lapply(serializedSlices, sliceJArray), contents.class = "[[[B") } - # JavaRDD[Array[Byte]] if pairwise, else JavaRDD[(Array[Byte], Array[Byte])] + # JavaRDD[Array[Byte]] if pairwise, else JavaPairRDD[Array[Byte], Array[Byte]]. jrdd <- .jcall("org/apache/spark/api/r/RRDD", - "Lorg/apache/spark/api/java/JavaRDD;", + "Lorg/apache/spark/api/java/JavaPairRDD;", "createRDDFromArray", jsc, javaSerializedSlices) - RRDD(jrdd, TRUE) + RRDD(jrdd, TRUE, pairwise) } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 8e886d77ef5d8..fb5aec53dc397 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -1,40 +1,55 @@ # Utilities and Helpers -# TODO: test with RRDD[T] where T is not String -# Given a List, returns an R list. -JavaListToRList <- function(jList, flatten) { +# Given a JList, returns an R list containing the same elements. Takes care +# of deserializations and type conversions. +convertJListToRList <- function(jList, flatten) { size <- .jcall(jList, "I", "size") results <- lapply(0:(size - 1), function(index) { - jElem <- .jcall(jList, "Ljava/lang/Object;", "get", as.integer(index)) + jElem <- .jcall(jList, + "Ljava/lang/Object;", + "get", + as.integer(index)) - # Either an R object or a Java obj ref + # Assume it is either an R object or a Java obj ref. obj <- .jsimplify(jElem) - # RRDD[Array[Byte]]: call unserialize() and be sure to flatten if (class(obj) == "jobjRef" && .jinstanceof(obj, "[B")) { + # RRDD[Array[Byte]]. + rRaw <- .jevalArray(.jcastToArray(jElem)) res <- unserialize(rRaw) - } - # FIXME? - if (class(obj) == "jobjRef" && !.jinstanceof(obj, "[B")) { - stop(paste("utils.R: JavaListToRList: does not support any", - "RRDD[Array[T]] where T != Byte, for now")) + } else if (class(obj) == "jobjRef" && + .jinstanceof(obj, "scala.Tuple2")) { + # JavaPairRDD[Array[Byte], Array[Byte]]. + + keyBytes = .jcall(obj, "Ljava/lang/Object;", "_1") + valBytes = .jcall(obj, "Ljava/lang/Object;", "_2") + res <- list(unserialize(.jevalArray(keyBytes)), + unserialize(.jevalArray(valBytes))) + + } else if (class(obj) == "jobjRef" && !.jinstanceof(obj, "[B")) { + stop(paste("utils.R: convertJListToRList only supports", + "RRDD[Array[Byte]] and", + "JavaPairRDD[Array[Byte], Array[Byte]] for now")) } - # jElem is of a primitive Java type, is simplified to R's corresponding type + # jElem is of a primitive Java type, is simplified to R's + # corresponding type. if (class(obj) != "jobjRef") res <- obj res }) + if (flatten) { as.list(unlist(results, recursive = FALSE)) } else { as.list(results) } + } isRRDD <- function(name, env) { @@ -55,3 +70,4 @@ getDependencies <- function(name) { unlink(fileName) binData } + diff --git a/pkg/R/zzz.R b/pkg/R/zzz.R index 215da5c24cc36..1f0c7da2dff54 100644 --- a/pkg/R/zzz.R +++ b/pkg/R/zzz.R @@ -1,3 +1,4 @@ .onAttach <- function(libname, pkgname) { sparkR.onLoad(libname, pkgname) } + From 100ae658e71ebc47942bf657aba0fbccd0dcf7ea Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 6 Nov 2013 12:32:02 -0800 Subject: [PATCH 044/687] Properly parallelize() and collect() pairwise data. --- RRDD.scala | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 0fd17645648b8..84f5d3fc6f255 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -14,7 +14,7 @@ import org.apache.spark.util.Utils * This is used by SparkR's shuffle operations. */ private class PairwiseRRDD( - parent: JavaRDD[(Array[Byte], Array[Byte])], + parent: JavaPairRDD[Array[Byte], Array[Byte] ], numPartitions: Int, hashFunc: Array[Byte], dataSerialized: Boolean, @@ -38,13 +38,8 @@ private class PairwiseRRDD( val env = SparkEnv.get val tempDir = Utils.getLocalDir - val tempFile = File.createTempFile("rSpark", "out2", new File(tempDir)) // FIXME: "out" causes problem? + val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) val tempFileName = tempFile.getAbsolutePath -// -// val tempDir = Utils.getLocalDir -// val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) -// val tempFileName = tempFile.getAbsolutePath - // Start a thread to print the process's stderr to ours new Thread("stderr reader for R") { @@ -73,9 +68,6 @@ private class PairwiseRRDD( dataOut.writeInt(functionDependencies.length) dataOut.write(functionDependencies, 0, functionDependencies.length) -// implicit val cm : ClassManifest[(Array[Byte], Array[Byte])] = -// implicitly[ClassManifest[(Array[Byte], Array[Byte])]] - // val iter = parent.iterator(split, context) // println("***********iter.length = " + iter.length) @@ -83,15 +75,8 @@ private class PairwiseRRDD( // dataOut.writeInt(iter.length) // TODO: is length of iterator necessary? // TODO: is it okay to use parent as opposed to firstParent? - parent.iterator(split, context).grouped(2).foreach { - case Seq(a, b) => -// val a = x.asInstanceOf[Tuple2[Array[Byte], Array[Byte]]]._1 -// val b = x.asInstanceOf[Tuple2[Array[Byte], Array[Byte]]]._2 -// elem match { case (keyBytes, valBytes) => -// iter.foreach { case (keyBytes, valBytes) => - val keyBytes: Array[Byte] = a.asInstanceOf[Array[Byte]] - val valBytes: Array[Byte] = b.asInstanceOf[Array[Byte]] - + parent.iterator(split, context).foreach { + case (keyBytes: Array[Byte], valBytes: Array[Byte]) => if (dataSerialized) { dataOut.writeInt(keyBytes.length) dataOut.write(keyBytes, 0, keyBytes.length) @@ -102,13 +87,11 @@ private class PairwiseRRDD( printOut.println(keyBytes) printOut.println(valBytes) } -// case _ => - case _ => sys.error("*** elem is not 2-tuple") + case _ => throw new SparkException("PairwiseRRDD: unexpected element (not (Array[Byte], Array[Bytes]))") } dataOut.writeInt(0) // End of output stream.close() } -// } }.start() // Return an iterator that read lines from the process's stdout @@ -301,9 +284,17 @@ object RRDD { * `parallelize` is called from R. * TODO?: change return type into JavaPairRDD[Array[Byte], Array[Byte]]? */ - def createRDDFromArray(jsc: JavaSparkContext, arr: Array[Array[Array[Byte]]]): JavaRDD[(Array[Byte], Array[Byte])] = { - val keyValPairs: Seq[(Array[Byte], Array[Byte])] = arr.map(tuple => (tuple(0), tuple(1))) - JavaRDD.fromRDD(jsc.sc.parallelize(keyValPairs, keyValPairs.length)) + def createRDDFromArray(jsc: JavaSparkContext, + arr: Array[Array[Array[Array[Byte]]]]): JavaPairRDD[Array[Byte], Array[Byte]] = { + + val keyValPairs: Seq[(Array[Byte], Array[Byte])] = + for ( + slice <- arr; + tup <- slice + ) yield (tup(0), tup(1)) + + JavaPairRDD.fromRDD(jsc.sc.parallelize(keyValPairs, arr.length)) + } } From 67a433559d131cc79da47a4253d991dc0c1e735e Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 6 Nov 2013 20:21:52 -0800 Subject: [PATCH 045/687] Add unit test for parallelize() and collect() pairwise data. --- pkg/R/RRDD.R | 16 ++++++++-------- pkg/R/context.R | 8 ++++++-- pkg/inst/tests/test_parallelize_collect.R | 21 +++++++++++++++++++-- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index bd9727ac806bd..3eaf9f4fb4fd5 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -137,20 +137,20 @@ setMethod("take", }) ############ Shuffle Functions ############ -source("R/pkg/R/utils.R") -source("R/pkg/R/context.R") +# source("R/pkg/R/utils.R") +# source("R/pkg/R/context.R") .address <- function(x) { # http://stackoverflow.com/questions/10912729/r-object-identity substring(capture.output(.Internal(inspect(x)))[1], 2, 10) } -rrdd <- parallelize(sc, - # list(list(1, 2), list(3, 3), list(4, 4)), - # numSlices = 2, - # pairwise = TRUE) -partitionFunc <- function(key) { if (key >= 3) 1 else 0 } -numPartitions <- 2 +# rrdd <- parallelize(sc, +# # list(list(1, 2), list(3, 3), list(4, 4)), +# # numSlices = 2, +# # pairwise = TRUE) +# partitionFunc <- function(key) { if (key >= 3) 1 else 0 } +# numPartitions <- 2 setGeneric("partitionBy", function(rrdd, numPartitions, partitionFunc) { diff --git a/pkg/R/context.R b/pkg/R/context.R index be2a95fdae168..2a15ec4ffd2d4 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -69,9 +69,13 @@ parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { .jarray(lapply(serializedSlices, sliceJArray), contents.class = "[[[B") } - # JavaRDD[Array[Byte]] if pairwise, else JavaPairRDD[Array[Byte], Array[Byte]]. + jrddType = if (!pairwise) + "Lorg/apache/spark/api/java/JavaRDD;" + else + "Lorg/apache/spark/api/java/JavaPairRDD;" + jrdd <- .jcall("org/apache/spark/api/r/RRDD", - "Lorg/apache/spark/api/java/JavaPairRDD;", + jrddType, "createRDDFromArray", jsc, javaSerializedSlices) diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index babdfeca38874..5edbfee57c2c7 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -1,5 +1,3 @@ -# run in REPL with 'test_dir(path/to/inst/tests)' - context("parallelize() and collect()") # Mock data @@ -14,9 +12,14 @@ strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge, ", "Dexter Morgan: Harry and Dorris Morgan did a wonderful job ", "raising me. But they're both dead now. I didn't kill them. Honest.") +numPairs <- list(list(1, 1), list(1, 2), list(2, 2), list(2, 3)) +strPairs <- list(list(strList, strList), list(strList, strList)) + # JavaSparkContext handle jsc <- sparkR.init() +# Tests + test_that("parallelize() on simple vectors and lists returns an RRDD", { numVectorRRDD <- parallelize(jsc, numVector, 1) numVectorRRDD2 <- parallelize(jsc, numVector, 10) @@ -64,3 +67,17 @@ test_that("collect(), following a parallelize(), gives back the original collect expect_equal(collect(strListRRDD2), as.list(strList)) }) +test_that("parallelize() and collect() work for lists of pairs (pairwise data)", { + # use the pairwise logical to indicate pairwise data + numPairsRDDD1 <- parallelize(jsc, numPairs, 1, pairwise = TRUE) + numPairsRDDD2 <- parallelize(jsc, numPairs, 2, pairwise = TRUE) + numPairsRDDD3 <- parallelize(jsc, numPairs, 3, pairwise = TRUE) + expect_equal(collect(numPairsRDDD1), numPairs) + expect_equal(collect(numPairsRDDD2), numPairs) + expect_equal(collect(numPairsRDDD3), numPairs) + # can also leave out the parameter name, if the params are supplied in order + strPairsRDDD1 <- parallelize(jsc, strPairs, 1, TRUE) + strPairsRDDD2 <- parallelize(jsc, strPairs, 2, TRUE) + expect_equal(collect(strPairsRDDD1), strPairs) + expect_equal(collect(strPairsRDDD2), strPairs) +}) From e3fbd9ddbc97febfdaa59fbcfa6d92b923c02910 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 6 Nov 2013 21:14:32 -0800 Subject: [PATCH 046/687] Working versions: partitionBy() and collectPartition() for RRDD. - Use PartitionPruningRDD in JavaRDD's collectPartition(). - Add a simple passing unit test for partitionBy(). TODOs: - Clean up pairwiseWorker.R (refactor it with worker.R). - Fix partitionFunc's closure not being seen by R worker (the func is passed as an argument to hashPairsToEnvir(). - Remove the pairwise flag inside RRDD class (it is only useful for parallelize()). --- pkg/NAMESPACE | 5 ++-- pkg/R/RRDD.R | 29 ++++++++++++------- pkg/R/utils.R | 5 +++- pkg/inst/tests/test_partitionBy.R | 48 +++++++++++++++++++++++++++++++ pkg/inst/worker/pairwiseWorker.R | 45 +++++++++-------------------- pkg/inst/worker/serialize.R | 12 +------- 6 files changed, 88 insertions(+), 56 deletions(-) create mode 100644 pkg/inst/tests/test_partitionBy.R diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 83f4c4b706f75..7a98755322d15 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -3,13 +3,14 @@ exportClasses("RRDD") exportMethods( "cache", "collect", + "collectPartition", "count", "length", "lapply", "lapplyPartition", + "partitionBy", "reduce", - "take", - "partitionBy" + "take" ) # S3 methods exported diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 3eaf9f4fb4fd5..29a198819397c 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -137,21 +137,12 @@ setMethod("take", }) ############ Shuffle Functions ############ -# source("R/pkg/R/utils.R") -# source("R/pkg/R/context.R") .address <- function(x) { # http://stackoverflow.com/questions/10912729/r-object-identity substring(capture.output(.Internal(inspect(x)))[1], 2, 10) } -# rrdd <- parallelize(sc, -# # list(list(1, 2), list(3, 3), list(4, 4)), -# # numSlices = 2, -# # pairwise = TRUE) -# partitionFunc <- function(key) { if (key >= 3) 1 else 0 } -# numPartitions <- 2 - setGeneric("partitionBy", function(rrdd, numPartitions, partitionFunc) { standardGeneric("partitionBy") @@ -163,6 +154,7 @@ setMethod("partitionBy", hashPairsToEnvir <- function(pairs) { # pairs: list(list(_, _), ..) res <- new.env() + HACK <- environment(partitionFunc) # FIXME for (tuple in pairs) { hashVal = partitionFunc(tuple[[1]]) bucket = as.character(hashVal %% numPartitions) @@ -206,7 +198,22 @@ setMethod("partitionBy", # Call .values() on the result to get back the final result, the # shuffled acutal content key-val pairs. r <- javaPairRDD$values() - # r$collect() - r + + RRDD(r, rrdd@serialized, TRUE) + }) + + +setGeneric("collectPartition", + function(rrdd, partitionId) { + standardGeneric("collectPartition") + }) +setMethod("collectPartition", + signature(rrdd = "RRDD", partitionId = "integer"), + function(rrdd, partitionId) { + jList <- .jcall(rrdd@jrdd, + "Ljava/util/List;", + "collectPartition", + as.integer(partitionId)) + convertJListToRList(jList, flatten = TRUE) }) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index fb5aec53dc397..280f0f90bf0af 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -4,7 +4,7 @@ # of deserializations and type conversions. convertJListToRList <- function(jList, flatten) { size <- .jcall(jList, "I", "size") - results <- + results <- if (size > 0) { lapply(0:(size - 1), function(index) { jElem <- .jcall(jList, @@ -43,6 +43,9 @@ convertJListToRList <- function(jList, flatten) { res }) + } else { + list() + } if (flatten) { as.list(unlist(results, recursive = FALSE)) diff --git a/pkg/inst/tests/test_partitionBy.R b/pkg/inst/tests/test_partitionBy.R new file mode 100644 index 0000000000000..7dcd0661732e7 --- /dev/null +++ b/pkg/inst/tests/test_partitionBy.R @@ -0,0 +1,48 @@ +context("partitionBy() on pairwise RRDDs") + +# JavaSparkContext handle +jsc <- sparkR.init() + +# Data + +numPairs <- list(list(4, -1), list(1, 100), list(3, 1), list(2, 200), list(3, 0)) + +# Partition functions +partitionByMagnitude <- function(key) { if (key >= 3) 1 else 0 } +partitionByParity <- function(key) { if (key %% 2 == 1) 3 else 100 } + + # FIXME: this version does not work: the worker throws + # Error in partitionFunc(tuple[[1]]) : object 'kOne' not found + + # kOne <- 1 + # partitionByParity <- function(key) { if (key %% 2 == kOne) 3 else 7 } + +# Tests + +test_that("partitionBy() partitions data correctly", { + rrdd <- parallelize(jsc, numPairs, length(numPairs), pairwise = TRUE) + resultRRDD <- partitionBy(rrdd, 2L, partitionByMagnitude) + + expected_first <- list(list(1, 100), list(2, 200)) # key < 3 + expected_second <- list(list(4, -1), list(3, 1), list(3, 0)) # key >= 3 + actual_first <- collectPartition(resultRRDD, 0L) + actual_second <- collectPartition(resultRRDD, 1L) + + expect_equal(actual_first, expected_first) + expect_equal(actual_second, expected_second) + + + rrdd <- parallelize(jsc, numPairs, 1L, pairwise = TRUE) + resultRRDD <- partitionBy(rrdd, numPartitions = 2L, partitionByParity) + + # keys even; 100 %% 2 == 0 + expected_first <- list(list(4, -1), list(2, 200)) + # keys odd; 3 %% 2 == 1 + expected_second <- list(list(1, 100), list(3, 1), list(3, 0)) + actual_first <- collectPartition(resultRRDD, 0L) + actual_second <- collectPartition(resultRRDD, 1L) + + expect_equal(actual_first, expected_first) + expect_equal(actual_second, expected_second) + +}) diff --git a/pkg/inst/worker/pairwiseWorker.R b/pkg/inst/worker/pairwiseWorker.R index 282f3c6c2d0e4..7b19240288dd8 100644 --- a/pkg/inst/worker/pairwiseWorker.R +++ b/pkg/inst/worker/pairwiseWorker.R @@ -1,6 +1,6 @@ # Worker class -# FIXME: refactor me and worker.R to reduce code duplication +# FIXME: refactor me and worker.R to reduce code duplication. source_local <- function(fname) { argv <- commandArgs(trailingOnly = FALSE) @@ -10,8 +10,6 @@ source_local <- function(fname) { source_local("serialize.R") -# cat("***** In pairwiseWorder\n") - # Set libPaths to include SparkR package as loadNamespace needs this # TODO: Figure out if we can avoid this by not loading any objects that require # SparkR namespace @@ -20,23 +18,20 @@ sparkHome <- Sys.getenv("SPARK_HOME") # NOTE: We use "stdin" to get the process stdin instead of the command line inputCon <- file("stdin", open = "rb") -#outputFileName <- tempfile(pattern="spark-exec", fileext=".out") - -# cat("***** About to read outputFileName\n") outputFileName <- readLines(inputCon, n = 1) outputCon <- file(outputFileName, open="wb") -# cat("***** read name:\n") -# cat(outputFileName) # TODO: remove -# cat("\n") - -# (1) read the hash function +# read the hash function hashFunc <- unserialize(readRaw(inputCon)) -# (2) read the isSerialized bit flag + +# read the isSerialized bit flag isSerialized <- readInt(inputCon) -# (3) read function dependencies + +# read function dependencies execFunctionDeps <- readRaw(inputCon) + +# load the dependencies into current environment depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") depsFile <- file(depsFileName, open="wb") writeBin(execFunctionDeps, depsFile, endian="big") @@ -44,8 +39,8 @@ close(depsFile) load(depsFileName, envir=environment(hashFunc)) unlink(depsFileName) -# FIXME?: put this before sink? -# (4) read # of elements to read next +# read # of elements to read next +dataLen <- readInt(inputCon) # Redirect stdout to stderr to prevent print statements from # interfering with outputStream @@ -53,26 +48,18 @@ sink(stderr()) keyValPairs = list() -dataLen <- readInt(inputCon) -while (dataLen > 0) { -# for (i in 1:dataLen) { +for (i in 1:dataLen) { if (isSerialized) { - key <- unserialize(readBin(con, raw(), as.integer(dataLen), endian="big")) - # key <- unserialize(readRaw(inputCon)) + key <- unserialize(readRaw(inputCon)) val <- unserialize(readRaw(inputCon)) keyValPairs[[length(keyValPairs) + 1]] <- list(key, val) } else { - # FIXME + # FIXME? data <- readLines(inputCon) } - dataLen <- readInt(inputCon) } -# Redirect stdout to stderr to prevent print statements from -# interfering with outputStream -sink(stderr()) - -# Step 1: turn the environment into a list of lists, starting with hashFunc. +# Step 1: convert the environment into a list of lists. envirList <- as.list(hashFunc(keyValPairs)) keyed = list() for (key in names(envirList)) { @@ -88,10 +75,6 @@ for (keyedEntry in keyed) { } writeInt(outputCon, 0L) # End of output -#sink(stderr()) -#print(execFunction) -#sink() - close(outputCon) # Restore stdout diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index 1be5a9b7fb82d..f45a6831800af 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -1,21 +1,11 @@ # Utility functions to serialize, deserialize etc. readInt <- function(con) { - r <- readBin(con, integer(), n = 1, endian="big") - write("** in readInt: ", stderr()) - write(r, stderr()) - write("**", stderr()) - r + readBin(con, integer(), n = 1, endian="big") } readRaw <- function(con) { dataLen <- readInt(con) - - write("**in readRaw, dataLen: ", stderr()) - write(dataLen, stderr()) - write("**", stderr()) - write(as.character(mode(dataLen)), stderr()) - data <- readBin(con, raw(), as.integer(dataLen), endian="big") } From 75d36d9f7585ca006078c49755ee36b50089f3da Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 6 Nov 2013 21:14:32 -0800 Subject: [PATCH 047/687] Working versions: partitionBy() and collectPartition() for RRDD. - Use PartitionPruningRDD in JavaRDD's collectPartition(). - Add a simple passing unit test for partitionBy(). TODOs: - Clean up pairwiseWorker.R (refactor it with worker.R). - Fix partitionFunc's closure not being seen by R worker (the func is passed as an argument to hashPairsToEnvir(). - Remove the pairwise flag inside RRDD class (it is only useful for parallelize()). --- RRDD.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 84f5d3fc6f255..1e94c35559ee7 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -14,7 +14,7 @@ import org.apache.spark.util.Utils * This is used by SparkR's shuffle operations. */ private class PairwiseRRDD( - parent: JavaPairRDD[Array[Byte], Array[Byte] ], + parent: JavaPairRDD[Array[Byte], Array[Byte]], numPartitions: Int, hashFunc: Array[Byte], dataSerialized: Boolean, @@ -72,7 +72,7 @@ private class PairwiseRRDD( // println("***********iter.length = " + iter.length) -// dataOut.writeInt(iter.length) // TODO: is length of iterator necessary? + dataOut.writeInt(parent.iterator(split, context).length) // TODO: is it okay to use parent as opposed to firstParent? parent.iterator(split, context).foreach { @@ -89,7 +89,7 @@ private class PairwiseRRDD( } case _ => throw new SparkException("PairwiseRRDD: unexpected element (not (Array[Byte], Array[Bytes]))") } - dataOut.writeInt(0) // End of output +// dataOut.writeInt(0) // End of output stream.close() } }.start() From 4f00895276ce31bdf1c45fea05ba5ca0d6ece528 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 29 Nov 2013 22:08:03 -0500 Subject: [PATCH 048/687] Remove the unnecessary `pairwise' flag in RRDD class. Reasons: - It is only useful when creating pairwise RRDD using parallelize(). - It is no longer useful once a RRDD is created; the RDD operations should not try to preserve the flag. --- pkg/R/RRDD.R | 22 ++++++++++------------ pkg/R/context.R | 4 ++-- pkg/inst/tests/test_partitionBy.R | 4 ++++ pkg/inst/worker/worker.R | 1 - 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 29a198819397c..64ccfbd240006 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -3,8 +3,7 @@ #setOldClass("jobjRef") setClass("RRDD", slots = list(jrdd = "jobjRef", - serialized = "logical", - pairwise = "logical")) + serialized = "logical")) setValidity("RRDD", function(object) { @@ -18,8 +17,8 @@ setValidity("RRDD", }) # Constructor of the RRDD class. -RRDD <- function(jrdd, serialized = TRUE, pairwise = FALSE) { - new("RRDD", jrdd = jrdd, serialized = serialized, pairwise = pairwise) +RRDD <- function(jrdd, serialized = TRUE) { + new("RRDD", jrdd = jrdd, serialized = serialized) } @@ -38,13 +37,12 @@ setGeneric("collect", function(rrdd, ...) { standardGeneric("collect") }) setMethod("collect", signature(rrdd = "RRDD"), function(rrdd, flatten = TRUE) { + # Assumes a pairwise RRDD is backed by a JavaPairRDD. + isPairwise <- grep("spark.api.java.JavaPairRDD", + rrdd@jrdd$getClass()$getName()) collected <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") - convertJListToRList(collected, if (rrdd@pairwise) FALSE else flatten) - # if (rrdd@pairwise) { - # convertJListToRList(collected, FALSE) - # } else { - # convertJListToRList(collected, flatten) - # } + convertJListToRList(collected, if (length(isPairwise) == 1) FALSE + else flatten) }) @@ -94,7 +92,7 @@ setMethod("lapplyPartition", depsBinArr, X@jrdd$classManifest()) jrdd <- rrddRef$asJavaRDD() - RRDD(jrdd, TRUE, X@pairwise) + RRDD(jrdd, TRUE) }) setGeneric("reduce", function(rrdd, func) { standardGeneric("reduce") }) @@ -199,7 +197,7 @@ setMethod("partitionBy", # shuffled acutal content key-val pairs. r <- javaPairRDD$values() - RRDD(r, rrdd@serialized, TRUE) + RRDD(r, rrdd@serialized) }) diff --git a/pkg/R/context.R b/pkg/R/context.R index 2a15ec4ffd2d4..46768277cba9d 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -13,7 +13,7 @@ textFile <- function(jsc, name, minSplits=NULL) { } jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", name, as.integer(minSplits)) - RRDD(jrdd, FALSE, FALSE) + RRDD(jrdd, FALSE) } # Distribute a local R homogeneous list to form an RRDD[Array[Byte]]. If a @@ -80,5 +80,5 @@ parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { jsc, javaSerializedSlices) - RRDD(jrdd, TRUE, pairwise) + RRDD(jrdd, TRUE) } diff --git a/pkg/inst/tests/test_partitionBy.R b/pkg/inst/tests/test_partitionBy.R index 7dcd0661732e7..a35b7bea5eb64 100644 --- a/pkg/inst/tests/test_partitionBy.R +++ b/pkg/inst/tests/test_partitionBy.R @@ -20,6 +20,9 @@ partitionByParity <- function(key) { if (key %% 2 == 1) 3 else 100 } # Tests test_that("partitionBy() partitions data correctly", { + + # Partition by magnitude + rrdd <- parallelize(jsc, numPairs, length(numPairs), pairwise = TRUE) resultRRDD <- partitionBy(rrdd, 2L, partitionByMagnitude) @@ -31,6 +34,7 @@ test_that("partitionBy() partitions data correctly", { expect_equal(actual_first, expected_first) expect_equal(actual_second, expected_second) + # Partition by parity rrdd <- parallelize(jsc, numPairs, 1L, pairwise = TRUE) resultRRDD <- partitionBy(rrdd, numPartitions = 2L, partitionByParity) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 9aacda7d47442..ec3131fb10329 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -16,7 +16,6 @@ sparkHome <- Sys.getenv("SPARK_HOME") # NOTE: We use "stdin" to get the process stdin instead of the command line inputCon <- file("stdin", open = "rb") -#outputFileName <- tempfile(pattern="spark-exec", fileext=".out") outputFileName <- readLines(inputCon, n = 1) outputCon <- file(outputFileName, open="wb") From 95b9ddc774acce8b77021349ddcd4ce4d2229b58 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 29 Nov 2013 22:53:32 -0500 Subject: [PATCH 049/687] First cut at refactoring worker.R. Remove pairwiseWorker.R. --- pkg/inst/worker/pairwiseWorker.R | 84 -------------------------------- pkg/inst/worker/worker.R | 62 ++++++++++++++++++----- 2 files changed, 49 insertions(+), 97 deletions(-) delete mode 100644 pkg/inst/worker/pairwiseWorker.R diff --git a/pkg/inst/worker/pairwiseWorker.R b/pkg/inst/worker/pairwiseWorker.R deleted file mode 100644 index 7b19240288dd8..0000000000000 --- a/pkg/inst/worker/pairwiseWorker.R +++ /dev/null @@ -1,84 +0,0 @@ -# Worker class - -# FIXME: refactor me and worker.R to reduce code duplication. - -source_local <- function(fname) { - argv <- commandArgs(trailingOnly = FALSE) - base_dir <- dirname(substring(argv[grep("--file=", argv)], 8)) - source(paste(base_dir, fname, sep="/")) -} - -source_local("serialize.R") - -# Set libPaths to include SparkR package as loadNamespace needs this -# TODO: Figure out if we can avoid this by not loading any objects that require -# SparkR namespace -sparkHome <- Sys.getenv("SPARK_HOME") -.libPaths(c( .libPaths(), paste(sparkHome,"/R/lib", sep=""))) - -# NOTE: We use "stdin" to get the process stdin instead of the command line -inputCon <- file("stdin", open = "rb") - -outputFileName <- readLines(inputCon, n = 1) -outputCon <- file(outputFileName, open="wb") - -# read the hash function -hashFunc <- unserialize(readRaw(inputCon)) - -# read the isSerialized bit flag -isSerialized <- readInt(inputCon) - -# read function dependencies -execFunctionDeps <- readRaw(inputCon) - -# load the dependencies into current environment -depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") -depsFile <- file(depsFileName, open="wb") -writeBin(execFunctionDeps, depsFile, endian="big") -close(depsFile) -load(depsFileName, envir=environment(hashFunc)) -unlink(depsFileName) - -# read # of elements to read next -dataLen <- readInt(inputCon) - -# Redirect stdout to stderr to prevent print statements from -# interfering with outputStream -sink(stderr()) - -keyValPairs = list() - -for (i in 1:dataLen) { - if (isSerialized) { - key <- unserialize(readRaw(inputCon)) - val <- unserialize(readRaw(inputCon)) - keyValPairs[[length(keyValPairs) + 1]] <- list(key, val) - } else { - # FIXME? - data <- readLines(inputCon) - } -} - -# Step 1: convert the environment into a list of lists. -envirList <- as.list(hashFunc(keyValPairs)) -keyed = list() -for (key in names(envirList)) { - bucketList <- list(as.integer(key), envirList[[key]]) - keyed[[length(keyed) + 1]] <- bucketList -} - -# Step 2: write out all of the keyed list. -for (keyedEntry in keyed) { - writeInt(outputCon, 2L) - writeRaw(outputCon, keyedEntry[[1]]) - writeRaw(outputCon, keyedEntry[[2]]) -} -writeInt(outputCon, 0L) # End of output - -close(outputCon) - -# Restore stdout -sink() - -# Finally print the name of the output file -cat(outputFileName, "\n") diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index ec3131fb10329..df730d0cbe485 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -20,17 +20,20 @@ inputCon <- file("stdin", open = "rb") outputFileName <- readLines(inputCon, n = 1) outputCon <- file(outputFileName, open="wb") -# First read the function +# First read the function; if used for pairwise RRDD, this is the hash function. execFunction <- unserialize(readRaw(inputCon)) +# read the isSerialized bit flag isSerialized <- readInt(inputCon) +# read function dependencies execFunctionDeps <- readRaw(inputCon) + +# load the dependencies into current environment depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") depsFile <- file(depsFileName, open="wb") writeBin(execFunctionDeps, depsFile, endian="big") close(depsFile) - load(depsFileName, envir=environment(execFunction)) unlink(depsFileName) @@ -38,21 +41,54 @@ unlink(depsFileName) # interfering with outputStream sink(stderr()) -if (isSerialized) { - # Now read as many characters as described in funcLen - data <- unserialize(readRaw(inputCon)) -} else { - data <- readLines(inputCon) -} +# If -1: read as normal RDD; if >= 0, treat as pairwise RDD and treat the int +# as number of elements to read next. +dataLen <- readInt(inputCon) +if (dataLen == -1) { -#sink(stderr()) -#print(execFunction) -#sink() + if (isSerialized) { + # Now read as many characters as described in funcLen + data <- unserialize(readRaw(inputCon)) + } else { + data <- readLines(inputCon) + } + output <- execFunction(data) + writeRaw(outputCon, output) -output <- execFunction(data) +} else { + + keyValPairs = list() + + for (i in 1:dataLen) { + if (isSerialized) { + key <- unserialize(readRaw(inputCon)) + val <- unserialize(readRaw(inputCon)) + keyValPairs[[length(keyValPairs) + 1]] <- list(key, val) + } else { + # FIXME? + data <- readLines(inputCon) + } + } + + # Step 1: convert the environment into a list of lists. + envirList <- as.list(execFunction(keyValPairs)) + keyed = list() + for (key in names(envirList)) { + bucketList <- list(as.integer(key), envirList[[key]]) + keyed[[length(keyed) + 1]] <- bucketList + } + + # Step 2: write out all of the keyed list. + for (keyedEntry in keyed) { + writeInt(outputCon, 2L) + writeRaw(outputCon, keyedEntry[[1]]) + writeRaw(outputCon, keyedEntry[[2]]) + } + +} -writeRaw(outputCon, output) +# End of output writeInt(outputCon, 0L) close(outputCon) From 685aaad0b05f23c677141a28cc7a266d529dd27e Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 29 Nov 2013 22:53:32 -0500 Subject: [PATCH 050/687] First cut at refactoring worker.R. Remove pairwiseWorker.R. --- RRDD.scala | 52 ++++------------------------------------------------ 1 file changed, 4 insertions(+), 48 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 1e94c35559ee7..9c7f8ca326da6 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -24,15 +24,9 @@ private class PairwiseRRDD( override def getPartitions = parent.partitions override def compute(split: Partition, context: TaskContext): Iterator[(Array[Byte], Array[Byte])] = { - // TODO: implement me - -// parent.iterator(split, context).grouped(2).map { -// case Seq(keyBytes, valBytes) => (keyBytes, valBytes) -// case x => throw new SparkContext("PairwiseRRDD: un") -// } val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt - val pb = SparkRHelper.rPairwiseWorkerProcessBuilder + val pb = SparkRHelper.rWorkerProcessBuilder val proc = pb.start() val env = SparkEnv.get @@ -68,10 +62,6 @@ private class PairwiseRRDD( dataOut.writeInt(functionDependencies.length) dataOut.write(functionDependencies, 0, functionDependencies.length) -// val iter = parent.iterator(split, context) - -// println("***********iter.length = " + iter.length) - dataOut.writeInt(parent.iterator(split, context).length) // TODO: is it okay to use parent as opposed to firstParent? @@ -89,7 +79,6 @@ private class PairwiseRRDD( } case _ => throw new SparkException("PairwiseRRDD: unexpected element (not (Array[Byte], Array[Bytes]))") } -// dataOut.writeInt(0) // End of output stream.close() } }.start() @@ -112,14 +101,6 @@ private class PairwiseRRDD( private def read(): (Array[Byte], Array[Byte]) = { try { val length = dataStream.readInt() - // logError("READ length " + length) - // val lengthStr = Option(dataStream.readLine()).getOrElse("0").trim() - // var length = 0 - // try { - // length = lengthStr.toInt - // } catch { - // case nfe: NumberFormatException => - // } length match { case length if length == 2 => @@ -162,9 +143,6 @@ class RRDD[T: ClassManifest]( override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt - // val depsFileName = new File(depsFile).getName - // val localDepsFile = SparkFiles.get(depsFileName) - val pb = SparkRHelper.rWorkerProcessBuilder val proc = pb.start() @@ -198,12 +176,12 @@ class RRDD[T: ClassManifest]( dataOut.writeInt(if(dataSerialized) 1 else 0) - // dataOut.writeInt(localDepsFile.length) - // dataOut.writeBytes(localDepsFile) - dataOut.writeInt(functionDependencies.length) dataOut.write(functionDependencies, 0, functionDependencies.length) + // Special flag that tells the worker that I am a normal RRDD. + dataOut.writeInt(-1) + for (elem <- firstParent[T].iterator(split, context)) { if (dataSerialized) { val elemArr = elem.asInstanceOf[Array[Byte]] @@ -235,14 +213,6 @@ class RRDD[T: ClassManifest]( private def read(): Array[Byte] = { try { val length = dataStream.readInt() - // logError("READ length " + length) - // val lengthStr = Option(dataStream.readLine()).getOrElse("0").trim() - // var length = 0 - // try { - // length = lengthStr.toInt - // } catch { - // case nfe: NumberFormatException => - // } length match { case length if length > 0 => @@ -301,8 +271,6 @@ object RRDD { object SparkRHelper { - // FIXME: my eyes bleed... - lazy val rWorkerProcessBuilder = { val rCommand = "Rscript" val rOptions = "--vanilla" @@ -314,16 +282,4 @@ object SparkRHelper { new ProcessBuilder(List(rCommand, rOptions, rExecScript)) } - - lazy val rPairwiseWorkerProcessBuilder = { - val rCommand = "Rscript" - val rOptions = "--vanilla" - val sparkHome = Option(new ProcessBuilder().environment().get("SPARK_HOME")) match { - case Some(path) => path - case None => sys.error("SPARK_HOME not set as an environment variable.") - } - val rExecScript = sparkHome + "/R/pkg/inst/worker/pairwiseWorker.R" - new ProcessBuilder(List(rCommand, rOptions, rExecScript)) - } - } From 0b0326525cbd1fbfea788f66ba821e2a541bc471 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 10 Dec 2013 14:26:07 -0800 Subject: [PATCH 051/687] Update TODO with testing, docs todo --- TODO.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/TODO.md b/TODO.md index 4b6b038e09bf9..6ab4bf530bf15 100644 --- a/TODO.md +++ b/TODO.md @@ -19,3 +19,27 @@ this for any given R file to be sourced in the worker. 2. Integration with ML Lib to run ML algorithms from R. 3. Profile serialization overhead and see if there is anything better we can do. 4. Reduce code duplication between SparkR and PySpark3. 4. . + +## Testing plan + +### sparkR, context + +1. Fix JAR path in sparkR.R +2. textFile + collect -- use README.md, or some test file + 1. Check if minSplits works correctly +3. Check if parallelize has enough tests for tuples (+ collect) + +### RRDD + +4. Add a test for count, length +5. Add one test for lapply, lapplyPartition +6. Add a test for reduce +7. Add tests for groupByKey, reduceByKey + +### Utils +8. utils.R - Check if dependencies are serialized correctly +9. convertJListToRList + +## Documentation + +1. Write Rd documentation for RRDD functions, context functions From 987e36ff60757a626658ef3dcbd5add09eb195e5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 10 Dec 2013 14:28:21 -0800 Subject: [PATCH 052/687] Add perf todo --- TODO.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 6ab4bf530bf15..510bc15473db8 100644 --- a/TODO.md +++ b/TODO.md @@ -18,7 +18,9 @@ this for any given R file to be sourced in the worker. 1. RRDDs are distributed lists. Extend them to create a distributed data frame. 2. Integration with ML Lib to run ML algorithms from R. 3. Profile serialization overhead and see if there is anything better we can do. -4. Reduce code duplication between SparkR and PySpark3. 4. . +4. Reduce code duplication between SparkR and PySpark +. Add more examples (machine learning ?) and some performance benchmarks. + ## Testing plan From f196479c9db2851a2fb5c3b8b8a05bebc744a519 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 20:27:20 -0800 Subject: [PATCH 053/687] Add reduceByKey, groupByKey and refactor shuffle Other changes include 1. Adding unit tests for basic RDD functions and shuffle 2. Add a word count example 3. Change the dependency serialization to handle double loading of SparkR package 4. Allow partitionBy to operate on any RDDs to create pair-wise RDD. --- TODO.md | 25 +-- examples/logistic_regression.R | 2 +- examples/wordcount.R | 25 +++ pkg/NAMESPACE | 6 +- pkg/R/RRDD.R | 206 +++++++++++++++++----- pkg/R/context.R | 40 +---- pkg/R/sparkR.R | 17 +- pkg/R/utils.R | 28 ++- pkg/inst/tests/test_parallelize_collect.R | 10 +- pkg/inst/tests/test_partitionBy.R | 52 ------ pkg/inst/tests/test_rrd.R | 34 ++++ pkg/inst/tests/test_shuffle.R | 89 ++++++++++ pkg/inst/worker/serialize.R | 27 +++ pkg/inst/worker/worker.R | 97 +++++----- 14 files changed, 443 insertions(+), 215 deletions(-) create mode 100644 examples/wordcount.R create mode 100644 pkg/inst/tests/test_rrd.R create mode 100644 pkg/inst/tests/test_shuffle.R diff --git a/TODO.md b/TODO.md index 510bc15473db8..538b61010da11 100644 --- a/TODO.md +++ b/TODO.md @@ -2,16 +2,15 @@ ## Functions to support in RDD -1. `reduceByKey` and `groupByKey` -- Depends on implementing partitioner and PairRDD 2. Similar to `stats.py` in Python, add support for mean, median, stdev etc. ## Other features to support 1. Broadcast variables. 2. Allow R packages to be loaded into the run time. Also consider if we need to extend -this for any given R file to be sourced in the worker. +this for any given R file to be sourced in the worker before functions are run. 3. Use long-running R worker daemons to avoid forking a process each time. -4. Memoizations of frequently queried vals in RDD, such as numPartitions. +4. Memoizations of frequently queried vals in RDD, such as numPartitions, count etc. ## Longer term wishlist @@ -19,28 +18,18 @@ this for any given R file to be sourced in the worker. 2. Integration with ML Lib to run ML algorithms from R. 3. Profile serialization overhead and see if there is anything better we can do. 4. Reduce code duplication between SparkR and PySpark -. Add more examples (machine learning ?) and some performance benchmarks. +5. Add more examples (machine learning ?) and some performance benchmarks. - -## Testing plan +## Unit tests to add ### sparkR, context -1. Fix JAR path in sparkR.R -2. textFile + collect -- use README.md, or some test file +1. textFile + collect -- use README.md, or some test file 1. Check if minSplits works correctly -3. Check if parallelize has enough tests for tuples (+ collect) - -### RRDD - -4. Add a test for count, length -5. Add one test for lapply, lapplyPartition -6. Add a test for reduce -7. Add tests for groupByKey, reduceByKey ### Utils -8. utils.R - Check if dependencies are serialized correctly -9. convertJListToRList +1. utils.R - Check if dependencies are serialized correctly +2. convertJListToRList ## Documentation diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index 62e95f046c264..f5b4df09e8420 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -13,7 +13,7 @@ iterations <- as.integer(args[[3]]) D <- 10 readPartition <- function(part) { - t(sapply(part, function(line) { + m <- t(sapply(part, function(line) { as.numeric(strsplit(line, " ")[[1]]) })) } diff --git a/examples/wordcount.R b/examples/wordcount.R new file mode 100644 index 0000000000000..cf2f8e779f441 --- /dev/null +++ b/examples/wordcount.R @@ -0,0 +1,25 @@ +require(SparkR) + +args <- commandArgs(trailing = TRUE) + +if (length(args) != 2) { + print("Usage: wordcount ") + q("no") +} + +# Initialize Spark context +sc <- sparkR.init(args[[1]], "RwordCount") +lines <- textFile(sc, args[[2]]) + +words <- flatMap(lines, + function(line) { + strsplit(line, " ")[[1]] + }) +wordCount <- lapply(words, function(word) { list(word, 1L) }) + +counts <- reduceByKey(wordCount, "+", 2L) +output <- collect(counts) + +for (wordcount in output) { + cat(wordcount[[1]], ": ", wordcount[[2]], "\n") +} diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 7a98755322d15..7b54ae22665ad 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -5,14 +5,18 @@ exportMethods( "collect", "collectPartition", "count", + "flatMap", + "groupByKey", "length", "lapply", "lapplyPartition", + "map", "partitionBy", "reduce", + "reduceByKey", "take" ) # S3 methods exported -export("textFile", "parallelize") +export("textFile", "parallelize", "hashCode") exportPattern("^sparkR") diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 64ccfbd240006..428c6556b4bb8 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -38,11 +38,8 @@ setMethod("collect", signature(rrdd = "RRDD"), function(rrdd, flatten = TRUE) { # Assumes a pairwise RRDD is backed by a JavaPairRDD. - isPairwise <- grep("spark.api.java.JavaPairRDD", - rrdd@jrdd$getClass()$getName()) collected <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") - convertJListToRList(collected, if (length(isPairwise) == 1) FALSE - else flatten) + convertJListToRList(collected, flatten) }) @@ -75,15 +72,43 @@ setMethod("lapply", lapplyPartition(X, partitionFunc) }) +setGeneric("map", function(X, FUN) { + standardGeneric("map") }) +setMethod("map", + signature(X = "RRDD", FUN = "function"), + function(X, FUN) { + lapply(X, FUN) + }) + +setGeneric("flatMap", function(X, FUN) { + standardGeneric("flatMap") }) +setMethod("flatMap", + signature(X = "RRDD", FUN = "function"), + function(X, FUN) { + partitionFunc <- function(part) { + unlist( + lapply(part, FUN) + ) + } + lapplyPartition(X, partitionFunc) + }) + + setGeneric("lapplyPartition", function(X, FUN) { standardGeneric("lapplyPartition") }) setMethod("lapplyPartition", signature(X = "RRDD", FUN = "function"), function(X, FUN) { - serializedFunc <- serialize(FUN, connection = NULL, ascii = TRUE) + # TODO: This is to handle anonymous functions. Find out a + # better way to do this. + computeFunc <- function(part) { + FUN(part) + } + serializedFunc <- serialize("computeFunc", + connection = NULL, ascii = TRUE) serializedFuncArr <- .jarray(serializedFunc) - depsBin <- getDependencies(FUN) + depsBin <- getDependencies(computeFunc) depsBinArr <- .jarray(depsBin) rrddRef <- new(J("org.apache.spark.api.r.RRDD"), X@jrdd$rdd(), @@ -129,66 +154,48 @@ setMethod("take", "collectPartition", as.integer(index)) elems <- convertJListToRList(partition, flatten = TRUE) - resList <- append(resList, head(elems, n = num - length(resList))) # O(n^2)? + # TODO: Check if this append is O(n^2)? + resList <- append(resList, head(elems, n = num - length(resList))) } resList }) ############ Shuffle Functions ############ -.address <- function(x) { - # http://stackoverflow.com/questions/10912729/r-object-identity - substring(capture.output(.Internal(inspect(x)))[1], 2, 10) -} - setGeneric("partitionBy", - function(rrdd, numPartitions, partitionFunc) { + function(rrdd, numPartitions, ...) { standardGeneric("partitionBy") }) setMethod("partitionBy", - signature(rrdd = "RRDD", numPartitions = "integer", partitionFunc = "function"), - function(rrdd, numPartitions, partitionFunc) { - - hashPairsToEnvir <- function(pairs) { - # pairs: list(list(_, _), ..) - res <- new.env() - HACK <- environment(partitionFunc) # FIXME - for (tuple in pairs) { - hashVal = partitionFunc(tuple[[1]]) - bucket = as.character(hashVal %% numPartitions) - acc <- res[[bucket]] - # TODO?: http://stackoverflow.com/questions/2436688/append-an-object-to-a-list-in-r-in-amortized-constant-time - acc[[length(acc) + 1]] <- tuple - res[[bucket]] <- acc - } - res - } + signature(rrdd = "RRDD", numPartitions = "integer"), + function(rrdd, numPartitions, partitionFunc = hashCode) { + + #if (missing(partitionFunc)) { + # partitionFunc <- hashCode + #} - serializedHashFunc <- serialize(hashPairsToEnvir, + depsBin <- getDependencies(partitionFunc) + depsBinArr <- .jarray(depsBin) + + serializedHashFunc <- serialize(as.character(substitute(partitionFunc)), connection = NULL, ascii = TRUE) serializedHashFuncBytes <- .jarray(serializedHashFunc) - depsBin <- getDependencies(hashPairsToEnvir) - depsBinArr <- .jarray(depsBin) - # At this point, we have RDD[(Array[Byte], Array[Byte])], - # which contains the actual content, in unknown partitions order. # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is - # the content (key-val pairs). It does not matter how the data are - # stored in what partitions at this point. - + # the content (key-val pairs). pairwiseRRDD <- new(J("org.apache.spark.api.r.PairwiseRRDD"), - rrdd@jrdd, + rrdd@jrdd$rdd(), as.integer(numPartitions), serializedHashFuncBytes, rrdd@serialized, - depsBinArr) + depsBinArr, + rrdd@jrdd$classManifest()) - # Create a corresponding RPartitioner. - rPartitioner <- new(J("org.apache.spark.api.r.RPartitioner"), - as.integer(numPartitions), - .address(partitionFunc)) # TODO: does this work? + # Create a corresponding partitioner. + rPartitioner <- new(J("org.apache.spark.HashPartitioner"), + as.integer(numPartitions)) # Call partitionBy on the obtained PairwiseRDD. javaPairRDD <- pairwiseRRDD$asJavaPairRDD()$partitionBy(rPartitioner) @@ -197,9 +204,75 @@ setMethod("partitionBy", # shuffled acutal content key-val pairs. r <- javaPairRDD$values() - RRDD(r, rrdd@serialized) + RRDD(r, serialized=TRUE) + }) + +setGeneric("groupByKey", + function(rrdd, numPartitions) { + standardGeneric("groupByKey") + }) +setMethod("groupByKey", + signature(rrdd = "RRDD", numPartitions = "integer"), + function(rrdd, numPartitions) { + shuffled <- partitionBy(rrdd, numPartitions) + groupVals <- function(part) { + vals <- new.env() + keys <- new.env() + # Each item in the partition is list of (K, V) + lapply(part, + function(item) { + hashVal <- as.character(hashCode(item[[1]])) + if (exists(hashVal, vals)) { + acc <- vals[[hashVal]] + acc[[length(acc) + 1]] <- item[[2]] + vals[[hashVal]] <- acc + } else { + vals[[hashVal]] <- list(item[[2]]) + keys[[hashVal]] <- item[[1]] + } + }) + # Every key in the environment contains a list + # Convert that to list(K, Seq[V]) + grouped <- lapply(ls(vals), + function(name) { + list(keys[[name]], vals[[name]]) + }) + grouped + } + lapplyPartition(shuffled, groupVals) }) +setGeneric("reduceByKey", + function(rrdd, combineFunc, numPartitions) { + standardGeneric("reduceByKey") + }) +setMethod("reduceByKey", + signature(rrdd = "RRDD", combineFunc = "ANY", numPartitions = "integer"), + function(rrdd, combineFunc, numPartitions) { + # TODO: Implement map-side combine + shuffled <- partitionBy(rrdd, numPartitions) + reduceVals <- function(part) { + vals <- new.env() + keys <- new.env() + lapply(part, + function(item) { + hashVal <- as.character(hashCode(item[[1]])) + if (exists(hashVal, vals)) { + vals[[hashVal]] <- do.call( + combineFunc, list(vals[[hashVal]], item[[2]])) + } else { + vals[[hashVal]] <- item[[2]] + keys[[hashVal]] <- item[[1]] + } + }) + combined <- lapply(ls(vals), + function(name) { + list(keys[[name]], vals[[name]]) + }) + combined + } + lapplyPartition(shuffled, reduceVals) + }) setGeneric("collectPartition", function(rrdd, partitionId) { @@ -215,3 +288,46 @@ setMethod("collectPartition", convertJListToRList(jList, flatten = TRUE) }) + +wrapInt <- function(value) { + if (value > .Machine$integer.max) { + value <- value - 2 * .Machine$integer.max - 2 + } else if (value < -1 * .Machine$integer.max) { + value <- 2 * .Machine$integer.max + value + 2 + } + value +} + +mult31AndAdd <- function(val, addVal) { + vec <- c(bitwShiftL(val, c(4,3,2,1,0)), addVal) + Reduce(function(a, b) { + wrapInt(as.numeric(a) + as.numeric(b)) + }, + vec) +} + +hashCode <- function(key) { + if (class(key) == "integer") { + as.integer(key[[1]]) + } else if (class(key) == "numeric") { + # Convert the double to long and then calculate the hash code + rawVec <- writeBin(key[[1]], con=raw()) + intBits <- packBits(rawToBits(rawVec), "integer") + as.integer(bitwXor(intBits[2], intBits[1])) + } else if (class(key) == "character") { + n <- nchar(key) + if (n == 0) { + 0L + } else { + asciiVals <- sapply(charToRaw(key), function(x) { strtoi(x, 16L) }) + hashC <- 0 + for (k in 1:length(asciiVals)) { + hashC <- mult31AndAdd(hashC, asciiVals[k]) + } + as.integer(hashC) + } + } else { + warning(paste("Could not hash object, returning 0", sep="")) + as.integer(0) + } +} diff --git a/pkg/R/context.R b/pkg/R/context.R index 46768277cba9d..90e515b0e72e8 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -18,9 +18,8 @@ textFile <- function(jsc, name, minSplits=NULL) { # Distribute a local R homogeneous list to form an RRDD[Array[Byte]]. If a # vector is passed as `coll', as.list() will be called on it to convert it to a -# list. Use pairwise == TRUE if coll is a collection of homogeneous key-val -# pairs (first slot will be treated as the key, second slot the value). -parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { +# list. +parallelize <- function(jsc, coll, numSlices = 1) { # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives # TODO: support matrix, data frame, etc @@ -40,39 +39,11 @@ parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { # Serialize each slice: obtain a list of raws, or a list of lists (slices) of # 2-tuples of raws - serializedSlices <- if (!pairwise) { - lapply(slices, serialize, connection = NULL) - } else { - tupleSerialize <- function(tuple) { - keyRaw <- serialize(tuple[[1]], NULL) - valRaw <- serialize(tuple[[2]], NULL) - list(keyRaw, valRaw) - } - sliceSerialize <- function(slice) { - lapply(slice, tupleSerialize) - } - lapply(slices, sliceSerialize) - } + serializedSlices <- lapply(slices, serialize, connection = NULL) - # If !pairwise, Array[Array[Byte]]; otherwise, _two_ more nested layers. - javaSerializedSlices <- if (!pairwise) { - .jarray(lapply(serializedSlices, .jarray), contents.class = "[B") - } else { - tupleJArray <- function(tuple) { - keyByteJArray <- .jarray(tuple[[1]], contents.class = "B") - valByteJArray <- .jarray(tuple[[2]], contents.class = "B") - .jarray(list(keyByteJArray, valByteJArray), contents.class = "[B") - } - sliceJArray <- function(slice) { - .jarray(lapply(slice, tupleJArray), contents.class = "[[B") - } - .jarray(lapply(serializedSlices, sliceJArray), contents.class = "[[[B") - } + javaSerializedSlices <- .jarray(lapply(serializedSlices, .jarray), contents.class = "[B") - jrddType = if (!pairwise) - "Lorg/apache/spark/api/java/JavaRDD;" - else - "Lorg/apache/spark/api/java/JavaPairRDD;" + jrddType = "Lorg/apache/spark/api/java/JavaRDD;" jrdd <- .jcall("org/apache/spark/api/r/RRDD", jrddType, @@ -82,3 +53,4 @@ parallelize <- function(jsc, coll, numSlices = 1, pairwise = FALSE) { RRDD(jrdd, TRUE) } + diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 542036b9ea60f..46e2828c6aacc 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -1,21 +1,11 @@ -# FIXME: Hardcoded spark jar -sparkJarPath <- "assembly/target/scala-2.9.3/spark-assembly-0.8.0-SNAPSHOT-hadoop1.0.4.jar" - .sparkREnv <- new.env() -# TODO: Figure out classpath using bin/compute-classpath.sh sparkR.onLoad <- function(libname, pkgname) { sparkDir <- strsplit(libname, "/") - sparkJarAbsPath <- c(sparkDir[[1]][1:(length(sparkDir[[1]]) - 2)], sparkJarPath) - - classPath <- paste(sparkJarAbsPath, collapse = "/") - confPath <- paste(c(sparkDir[[1]][1:(length(sparkDir[[1]]) - 2)], "conf"), - collapse="/") - classPath <- paste(confPath, classPath, sep=":") - assign("sparkJar", classPath, envir=.sparkREnv) - + classPathScript <- paste(c(sparkDir[[1]][1:(length(sparkDir[[1]]) - 2)], + "/bin/compute-classpath.sh"), collapse="/") + classPath <- system(classPathScript, intern=TRUE) packageStartupMessage("[SparkR] Initializing with classpath ", classPath, "\n") - .jinit(classpath=classPath) } @@ -41,4 +31,3 @@ sparkR.init <- function( get(".sparkRjsc", envir=.sparkREnv) } - diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 280f0f90bf0af..0867743563040 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -39,7 +39,7 @@ convertJListToRList <- function(jList, flatten) { # jElem is of a primitive Java type, is simplified to R's # corresponding type. if (class(obj) != "jobjRef") - res <- obj + res <- list(obj) res }) @@ -60,11 +60,36 @@ isRRDD <- function(name, env) { class(obj) == "RRDD" } +isSparkFunction <- function(name) { + if (is.function(name)) { + fun <- name + } else { + if (!(is.character(name) && length(name) == 1L || is.symbol(name))) { + fun <- eval.parent(substitute(substitute(name))) + if (!is.symbol(fun)) + stop(gettextf("'%s' is not a function, character or symbol", + deparse(fun)), domain = NA) + } else { + fun <- name + } + envir <- parent.frame(2) + if (!exists(as.character(fun), mode = "function", envir=envir)) { + return(FALSE) + } + fun <- get(as.character(fun), mode = "function", envir=envir) + } + packageName(environment(fun)) == "SparkR" +} + getDependencies <- function(name) { fileName <- tempfile(pattern="spark-utils", fileext=".deps") funcEnv <- environment(name) varsToSave <- ls(funcEnv) + + #print(varsToSave) + filteredVars <- varsToSave filteredVars <- Filter(function(x) { !isRRDD(x, funcEnv) }, varsToSave) + #filteredVars <- Filter(function(x) { !isSparkFunction(x) }, filteredVars) save(list=filteredVars, file=fileName, envir=funcEnv) fileSize <- file.info(fileName)$size @@ -73,4 +98,3 @@ getDependencies <- function(name) { unlink(fileName) binData } - diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index 5edbfee57c2c7..d4ea02489bcd7 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -69,15 +69,15 @@ test_that("collect(), following a parallelize(), gives back the original collect test_that("parallelize() and collect() work for lists of pairs (pairwise data)", { # use the pairwise logical to indicate pairwise data - numPairsRDDD1 <- parallelize(jsc, numPairs, 1, pairwise = TRUE) - numPairsRDDD2 <- parallelize(jsc, numPairs, 2, pairwise = TRUE) - numPairsRDDD3 <- parallelize(jsc, numPairs, 3, pairwise = TRUE) + numPairsRDDD1 <- parallelize(jsc, numPairs, 1) + numPairsRDDD2 <- parallelize(jsc, numPairs, 2) + numPairsRDDD3 <- parallelize(jsc, numPairs, 3) expect_equal(collect(numPairsRDDD1), numPairs) expect_equal(collect(numPairsRDDD2), numPairs) expect_equal(collect(numPairsRDDD3), numPairs) # can also leave out the parameter name, if the params are supplied in order - strPairsRDDD1 <- parallelize(jsc, strPairs, 1, TRUE) - strPairsRDDD2 <- parallelize(jsc, strPairs, 2, TRUE) + strPairsRDDD1 <- parallelize(jsc, strPairs, 1) + strPairsRDDD2 <- parallelize(jsc, strPairs, 2) expect_equal(collect(strPairsRDDD1), strPairs) expect_equal(collect(strPairsRDDD2), strPairs) }) diff --git a/pkg/inst/tests/test_partitionBy.R b/pkg/inst/tests/test_partitionBy.R index a35b7bea5eb64..e69de29bb2d1d 100644 --- a/pkg/inst/tests/test_partitionBy.R +++ b/pkg/inst/tests/test_partitionBy.R @@ -1,52 +0,0 @@ -context("partitionBy() on pairwise RRDDs") - -# JavaSparkContext handle -jsc <- sparkR.init() - -# Data - -numPairs <- list(list(4, -1), list(1, 100), list(3, 1), list(2, 200), list(3, 0)) - -# Partition functions -partitionByMagnitude <- function(key) { if (key >= 3) 1 else 0 } -partitionByParity <- function(key) { if (key %% 2 == 1) 3 else 100 } - - # FIXME: this version does not work: the worker throws - # Error in partitionFunc(tuple[[1]]) : object 'kOne' not found - - # kOne <- 1 - # partitionByParity <- function(key) { if (key %% 2 == kOne) 3 else 7 } - -# Tests - -test_that("partitionBy() partitions data correctly", { - - # Partition by magnitude - - rrdd <- parallelize(jsc, numPairs, length(numPairs), pairwise = TRUE) - resultRRDD <- partitionBy(rrdd, 2L, partitionByMagnitude) - - expected_first <- list(list(1, 100), list(2, 200)) # key < 3 - expected_second <- list(list(4, -1), list(3, 1), list(3, 0)) # key >= 3 - actual_first <- collectPartition(resultRRDD, 0L) - actual_second <- collectPartition(resultRRDD, 1L) - - expect_equal(actual_first, expected_first) - expect_equal(actual_second, expected_second) - - # Partition by parity - - rrdd <- parallelize(jsc, numPairs, 1L, pairwise = TRUE) - resultRRDD <- partitionBy(rrdd, numPartitions = 2L, partitionByParity) - - # keys even; 100 %% 2 == 0 - expected_first <- list(list(4, -1), list(2, 200)) - # keys odd; 3 %% 2 == 1 - expected_second <- list(list(1, 100), list(3, 1), list(3, 0)) - actual_first <- collectPartition(resultRRDD, 0L) - actual_second <- collectPartition(resultRRDD, 1L) - - expect_equal(actual_first, expected_first) - expect_equal(actual_second, expected_second) - -}) diff --git a/pkg/inst/tests/test_rrd.R b/pkg/inst/tests/test_rrd.R new file mode 100644 index 0000000000000..9b5981f017965 --- /dev/null +++ b/pkg/inst/tests/test_rrd.R @@ -0,0 +1,34 @@ +context("basic RRDD functions") + +# JavaSparkContext handle +jsc <- sparkR.init() + +# Data +nums <- 1:10 +rrdd <- parallelize(jsc, nums, 2L) + +test_that("count and length on RRDD", { + expect_equal(count(rrdd), 10) + expect_equal(length(rrdd), 10) +}) + +test_that("lapply on RRDD", { + multiples <- lapply(rrdd, function(x) { 2 * x }) + actual <- collect(multiples) + expect_equal(actual, as.list(nums * 2)) +}) + +test_that("lapplyPartition on RRDD", { + sums <- lapplyPartition(rrdd, function(part) { sum(unlist(part)) }) + actual <- collect(sums) + expect_equal(actual, list(15, 40)) +}) + +test_that("reduce on RRDD", { + sum <- reduce(rrdd, "+") + expect_equal(sum, 55) + + # Also test with an inline function + sumInline <- reduce(rrdd, function(x, y) { x + y }) + expect_equal(sumInline, 55) +}) diff --git a/pkg/inst/tests/test_shuffle.R b/pkg/inst/tests/test_shuffle.R new file mode 100644 index 0000000000000..6cad25f7702ff --- /dev/null +++ b/pkg/inst/tests/test_shuffle.R @@ -0,0 +1,89 @@ +context("partitionBy, groupByKey, reduceByKey etc.") + +# JavaSparkContext handle +sc <- sparkR.init() + +# Data +intPairs <- list(list(1L, -1), list(2L, 100), list(2L, 1), list(1L, 200)) +intRdd <- parallelize(sc, intPairs, 2L) + +doublePairs <- list(list(1.5, -1), list(2.5, 100), list(2.5, 1), list(1.5, 200)) +doubleRdd <- parallelize(sc, doublePairs, 2L) + +numPairs <- list(list(1L, 100), list(2L, 200), list(4L, -1), list(3L, 1), + list(3L, 0)) +numPairsRdd <- parallelize(sc, numPairs, length(numPairs)) + +strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge, ", + "other times it helps me control the chaos.", + "Dexter Morgan: Harry and Dorris Morgan did a wonderful job ", + "raising me. But they're both dead now. I didn't kill them. Honest.") +strListRRDD <- parallelize(sc, strList, 4) + +test_that("groupByKey for integers", { + grouped <- groupByKey(intRdd, 2L) + + actual <- collect(grouped) + + expected <- list(list(2L, list(100, 1)), list(1L, list(-1, 200))) + expect_equal(actual, expected) +}) + +test_that("groupByKey for doubles", { + grouped <- groupByKey(doubleRdd, 2L) + + actual <- collect(grouped) + + expected <- list(list(1.5, list(-1, 200)), list(2.5, list(100, 1))) + expect_equal(actual, expected) +}) + +test_that("reduceByKey for ints", { + reduced <- reduceByKey(intRdd, "+", 2L) + + actual <- collect(reduced) + + expected <- list(list(2L, 101), list(1L, 199)) + expect_equal(actual, expected) +}) + +test_that("reduceByKey for doubles", { + reduced <- reduceByKey(doubleRdd, "+", 2L) + actual <- collect(reduced) + + expected <- list(list(1.5, 199), list(2.5, 101)) + expect_equal(actual, expected) +}) + +test_that("partitionBy() partitions data correctly", { + # Partition by magnitude + partitionByMagnitude <- function(key) { if (key >= 3) 1 else 0 } + + resultRRDD <- partitionBy(numPairsRdd, 2L, partitionByMagnitude) + + expected_first <- list(list(1, 100), list(2, 200)) # key < 3 + expected_second <- list(list(4, -1), list(3, 1), list(3, 0)) # key >= 3 + actual_first <- collectPartition(resultRRDD, 0L) + actual_second <- collectPartition(resultRRDD, 1L) + + expect_equal(actual_first, expected_first) + expect_equal(actual_second, expected_second) +}) + +test_that("partitionBy works with dependencies", { + kOne <- 1 + partitionByParity <- function(key) { if (key %% 2 == kOne) 7 else 4 } + + # Partition by parity + resultRRDD <- partitionBy(numPairsRdd, numPartitions = 2L, partitionByParity) + + # keys even; 100 %% 2 == 0 + expected_first <- list(list(2, 200), list(4, -1)) + # keys odd; 3 %% 2 == 1 + expected_second <- list(list(1, 100), list(3, 1), list(3, 0)) + actual_first <- collectPartition(resultRRDD, 0L) + actual_second <- collectPartition(resultRRDD, 1L) + + expect_equal(actual_first, expected_first) + expect_equal(actual_second, expected_second) +}) diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index f45a6831800af..50f2692e51f3c 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -9,6 +9,33 @@ readRaw <- function(con) { data <- readBin(con, raw(), as.integer(dataLen), endian="big") } +readRawLen <- function(con, dataLen) { + data <- readBin(con, raw(), as.integer(dataLen), endian="big") +} + +readDeserialize <- function(con) { + # We have two cases that are possible - In one, the entire partition is + # encoded as a byte array, so we have only one value to read. If so just + # return firstData + dataLen <- readInt(con) + firstData <- unserialize( + readBin(con, raw(), as.integer(dataLen), endian="big")) + + # Else, read things into a list + dataLen <- readInt(con) + if (length(dataLen) > 0 && dataLen > 0) { + data <- list(firstData) + while (length(dataLen) > 0 && dataLen > 0) { + data[[length(data) + 1L]] <- unserialize( + readBin(con, raw(), as.integer(dataLen), endian="big")) + dataLen <- readInt(con) + } + unlist(data, recursive = FALSE) + } else { + firstData + } +} + readString <- function(con) { stringLen <- readInt(con) string <- readBin(con, raw(), stringLen, endian="big") diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index df730d0cbe485..00e5506201cc3 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -21,71 +21,82 @@ outputFileName <- readLines(inputCon, n = 1) outputCon <- file(outputFileName, open="wb") # First read the function; if used for pairwise RRDD, this is the hash function. -execFunction <- unserialize(readRaw(inputCon)) +execLen <- readInt(inputCon) +execFunctionName <- unserialize(readRawLen(inputCon, execLen)) # read the isSerialized bit flag isSerialized <- readInt(inputCon) # read function dependencies -execFunctionDeps <- readRaw(inputCon) - -# load the dependencies into current environment -depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") -depsFile <- file(depsFileName, open="wb") -writeBin(execFunctionDeps, depsFile, endian="big") -close(depsFile) -load(depsFileName, envir=environment(execFunction)) -unlink(depsFileName) +depsLen <- readInt(inputCon) +if (depsLen > 0) { + execFunctionDeps <- readRawLen(inputCon, depsLen) + + # load the dependencies into current environment + depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") + depsFile <- file(depsFileName, open="wb") + writeBin(execFunctionDeps, depsFile, endian="big") + close(depsFile) + + load(depsFileName) + unlink(depsFileName) +} # Redirect stdout to stderr to prevent print statements from # interfering with outputStream sink(stderr()) # If -1: read as normal RDD; if >= 0, treat as pairwise RDD and treat the int -# as number of elements to read next. -dataLen <- readInt(inputCon) +# as number of partitions to create. +numPartitions <- readInt(inputCon) -if (dataLen == -1) { - - if (isSerialized) { - # Now read as many characters as described in funcLen - data <- unserialize(readRaw(inputCon)) - } else { - data <- readLines(inputCon) - } - output <- execFunction(data) - writeRaw(outputCon, output) +isEmpty <- readInt(inputCon) -} else { +if (isEmpty != 0) { - keyValPairs = list() + if (numPartitions == -1) { + if (isSerialized) { + # Now read as many characters as described in funcLen + data <- readDeserialize(inputCon) + } else { + data <- readLines(inputCon) + } + output <- do.call(execFunctionName, list(data)) + writeRaw(outputCon, output) + # for (name in output) { + # writeRaw(outputCon, name) + # } - for (i in 1:dataLen) { + } else { if (isSerialized) { - key <- unserialize(readRaw(inputCon)) - val <- unserialize(readRaw(inputCon)) - keyValPairs[[length(keyValPairs) + 1]] <- list(key, val) + # Now read as many characters as described in funcLen + data <- readDeserialize(inputCon) } else { - # FIXME? data <- readLines(inputCon) } - } - # Step 1: convert the environment into a list of lists. - envirList <- as.list(execFunction(keyValPairs)) - keyed = list() - for (key in names(envirList)) { - bucketList <- list(as.integer(key), envirList[[key]]) - keyed[[length(keyed) + 1]] <- bucketList - } + res <- new.env() + + # Step 1: hash the data to an environment + hashTupleToEnvir <- function(tuple) { + # NOTE: execFunction is the hash function here + hashVal <- do.call(execFunctionName, list(tuple[[1]])) + #hashVal <- execFunction(tuple[[1]]) + bucket <- as.character(hashVal %% numPartitions) + acc <- res[[bucket]] + # TODO?: http://stackoverflow.com/questions/2436688/append-an-object-to-a-list-in-r-in-amortized-constant-time + acc[[length(acc) + 1]] <- tuple + res[[bucket]] <- acc + } + invisible(lapply(data, hashTupleToEnvir)) - # Step 2: write out all of the keyed list. - for (keyedEntry in keyed) { - writeInt(outputCon, 2L) - writeRaw(outputCon, keyedEntry[[1]]) - writeRaw(outputCon, keyedEntry[[2]]) + # Step 2: write out all of the environment as key-value pairs. + for (name in ls(res)) { + writeInt(outputCon, 2L) + writeInt(outputCon, as.integer(name)) + writeRaw(outputCon, res[[name]]) + } } - } # End of output From 5db00dcd843d42ceef0e036340745300dd35f755 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 20:27:20 -0800 Subject: [PATCH 054/687] Add reduceByKey, groupByKey and refactor shuffle Other changes include 1. Adding unit tests for basic RDD functions and shuffle 2. Add a word count example 3. Change the dependency serialization to handle double loading of SparkR package 4. Allow partitionBy to operate on any RDDs to create pair-wise RDD. --- RRDD.scala | 64 +++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 9c7f8ca326da6..437d5c980af36 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -13,17 +13,17 @@ import org.apache.spark.util.Utils * Form an RDD[(Array[Byte], Array[Byte])] from key-value pairs returned from R. * This is used by SparkR's shuffle operations. */ -private class PairwiseRRDD( - parent: JavaPairRDD[Array[Byte], Array[Byte]], +private class PairwiseRRDD[T: ClassManifest]( + parent: RDD[T], numPartitions: Int, hashFunc: Array[Byte], dataSerialized: Boolean, functionDependencies: Array[Byte]) - extends RDD[(Array[Byte], Array[Byte])](parent.rdd) { + extends RDD[(Int, Array[Byte])](parent) { override def getPartitions = parent.partitions - override def compute(split: Partition, context: TaskContext): Iterator[(Array[Byte], Array[Byte])] = { + override def compute(split: Partition, context: TaskContext): Iterator[(Int, Array[Byte])] = { val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt val pb = SparkRHelper.rWorkerProcessBuilder @@ -62,22 +62,22 @@ private class PairwiseRRDD( dataOut.writeInt(functionDependencies.length) dataOut.write(functionDependencies, 0, functionDependencies.length) - dataOut.writeInt(parent.iterator(split, context).length) - - // TODO: is it okay to use parent as opposed to firstParent? - parent.iterator(split, context).foreach { - case (keyBytes: Array[Byte], valBytes: Array[Byte]) => - if (dataSerialized) { - dataOut.writeInt(keyBytes.length) - dataOut.write(keyBytes, 0, keyBytes.length) - dataOut.writeInt(valBytes.length) - dataOut.write(valBytes, 0, valBytes.length) - } else { - // FIXME: is it possible / do we allow that an RDD[(Array[Byte], Array[Byte])] has dataSerialized == false? - printOut.println(keyBytes) - printOut.println(valBytes) - } - case _ => throw new SparkException("PairwiseRRDD: unexpected element (not (Array[Byte], Array[Bytes]))") + // Write 1 to indicate this is a pair-wise RDD + dataOut.writeInt(numPartitions) + + if (!firstParent.iterator(split, context).hasNext) { + dataOut.writeInt(0) + } else { + dataOut.writeInt(1) + } + for (elem <- firstParent[T].iterator(split, context)) { + if (dataSerialized) { + val elemArr = elem.asInstanceOf[Array[Byte]] + dataOut.writeInt(elemArr.length) + dataOut.write(elemArr, 0, elemArr.length) + } else { + printOut.println(elem) + } } stream.close() } @@ -89,8 +89,8 @@ private class PairwiseRRDD( val dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) - return new Iterator[(Array[Byte], Array[Byte])] { - def next(): (Array[Byte], Array[Byte]) = { + return new Iterator[(Int, Array[Byte])] { + def next(): (Int, Array[Byte]) = { val obj = _nextObj if (hasNext) { _nextObj = read() @@ -98,20 +98,18 @@ private class PairwiseRRDD( obj } - private def read(): (Array[Byte], Array[Byte]) = { + private def read(): (Int, Array[Byte]) = { try { val length = dataStream.readInt() length match { case length if length == 2 => - val hashedKeyLength = dataStream.readInt() - val hashedKey = new Array[Byte](hashedKeyLength) - dataStream.read(hashedKey, 0, hashedKeyLength) + val hashedKey = dataStream.readInt() val contentPairsLength = dataStream.readInt() val contentPairs = new Array[Byte](contentPairsLength) dataStream.read(contentPairs, 0, contentPairsLength) (hashedKey, contentPairs) - case _ => (new Array[Byte](0), new Array[Byte](0)) // End of input + case _ => (0, new Array[Byte](0)) // End of input } } catch { case eof: EOFException => { @@ -122,11 +120,11 @@ private class PairwiseRRDD( } var _nextObj = read() - def hasNext = !(_nextObj._1.length == 0 && _nextObj._2.length == 0) + def hasNext = !(_nextObj._1 == 0 && _nextObj._2.length == 0) } } - lazy val asJavaPairRDD : JavaPairRDD[Array[Byte], Array[Byte]] = JavaPairRDD.fromRDD(this) + lazy val asJavaPairRDD : JavaPairRDD[Int, Array[Byte]] = JavaPairRDD.fromRDD(this) } @@ -179,9 +177,15 @@ class RRDD[T: ClassManifest]( dataOut.writeInt(functionDependencies.length) dataOut.write(functionDependencies, 0, functionDependencies.length) - // Special flag that tells the worker that I am a normal RRDD. + // Special flag that tells the worker that this is a normal RRDD. dataOut.writeInt(-1) + if (!firstParent.iterator(split, context).hasNext) { + dataOut.writeInt(0) + } else { + dataOut.writeInt(1) + } + for (elem <- firstParent[T].iterator(split, context)) { if (dataSerialized) { val elemArr = elem.asInstanceOf[Array[Byte]] From a82219b1aa4621fa96dc4297230f8a702248e2ff Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 20:31:49 -0800 Subject: [PATCH 055/687] Update TODOs --- TODO.md | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/TODO.md b/TODO.md index 538b61010da11..d05aa4920e694 100644 --- a/TODO.md +++ b/TODO.md @@ -1,16 +1,16 @@ # Things to do for SparkR -## Functions to support in RDD +## Functions to support -2. Similar to `stats.py` in Python, add support for mean, median, stdev etc. - -## Other features to support - -1. Broadcast variables. -2. Allow R packages to be loaded into the run time. Also consider if we need to extend +1. Similar to `stats.py` in Python, add support for mean, median, stdev etc. +2. Broadcast variables. +3. Allow R packages to be loaded into the run time. Also consider if we need to extend this for any given R file to be sourced in the worker before functions are run. -3. Use long-running R worker daemons to avoid forking a process each time. -4. Memoizations of frequently queried vals in RDD, such as numPartitions, count etc. + +## Performance improvements +1. Write hash functions in C and use .Call to call into them +2. Use long-running R worker daemons to avoid forking a process each time. +3. Memoizations of frequently queried vals in RDD, such as numPartitions, count etc. ## Longer term wishlist @@ -20,16 +20,12 @@ this for any given R file to be sourced in the worker before functions are run. 4. Reduce code duplication between SparkR and PySpark 5. Add more examples (machine learning ?) and some performance benchmarks. -## Unit tests to add - -### sparkR, context - -1. textFile + collect -- use README.md, or some test file - 1. Check if minSplits works correctly +## Unit tests still TODO -### Utils -1. utils.R - Check if dependencies are serialized correctly -2. convertJListToRList +1. textFile + collect -- use README.md, or some test file (check if minSplits +works correctly) +2. utils.R - Check if dependencies are serialized correctly +3. convertJListToRList ## Documentation From 2dee36c12df5b2a7d32d57cf8d7fdd0e33a45ab4 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 20:32:46 -0800 Subject: [PATCH 056/687] Remove empty test file --- pkg/inst/tests/test_partitionBy.R | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 pkg/inst/tests/test_partitionBy.R diff --git a/pkg/inst/tests/test_partitionBy.R b/pkg/inst/tests/test_partitionBy.R deleted file mode 100644 index e69de29bb2d1d..0000000000000 From 5880d4217ee5f9300476e9069796b06a223234f7 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 21:31:24 -0800 Subject: [PATCH 057/687] Refactor RRDD.scala and add comments to functions --- pkg/R/RRDD.R | 60 ++++++++++------------------------------ pkg/R/utils.R | 56 +++++++++++++++++++++++++++++++++++-- pkg/inst/worker/worker.R | 5 ---- 3 files changed, 68 insertions(+), 53 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 428c6556b4bb8..1b1c69743bef3 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -21,7 +21,7 @@ RRDD <- function(jrdd, serialized = TRUE) { new("RRDD", jrdd = jrdd, serialized = serialized) } - +# Persist this RDD with the default storage level (MEMORY_ONLY). setGeneric("cache", function(rrdd) { standardGeneric("cache") }) setMethod("cache", signature(rrdd = "RRDD"), @@ -43,6 +43,7 @@ setMethod("collect", }) +# Return the number of elements in the RDD. setGeneric("count", function(rrdd) { standardGeneric("count") }) setMethod("count", signature(rrdd = "RRDD"), @@ -55,6 +56,7 @@ setMethod("count", sum(as.integer(vals)) }) +# Return the number of elements in the RDD. setMethod("length", signature(x = "RRDD"), function(x) { @@ -62,6 +64,7 @@ setMethod("length", }) +# Return a new RDD by applying a function to all elements of this RDD. setMethod("lapply", signature(X = "RRDD", FUN = "function"), function(X, FUN) { @@ -72,6 +75,7 @@ setMethod("lapply", lapplyPartition(X, partitionFunc) }) +# Return a new RDD by applying a function to all elements of this RDD. setGeneric("map", function(X, FUN) { standardGeneric("map") }) setMethod("map", @@ -80,6 +84,8 @@ setMethod("map", lapply(X, FUN) }) +# Return a new RDD by first applying a function to all elements of this RDD, and +# then flattening the results. setGeneric("flatMap", function(X, FUN) { standardGeneric("flatMap") }) setMethod("flatMap", @@ -93,7 +99,7 @@ setMethod("flatMap", lapplyPartition(X, partitionFunc) }) - +# Return a new RDD by applying a function to each partition of this RDD. setGeneric("lapplyPartition", function(X, FUN) { standardGeneric("lapplyPartition") }) setMethod("lapplyPartition", @@ -120,6 +126,8 @@ setMethod("lapplyPartition", RRDD(jrdd, TRUE) }) +# Reduces the elements of this RDD using the specified commutative and +# associative binary operator. setGeneric("reduce", function(rrdd, func) { standardGeneric("reduce") }) setMethod("reduce", signature(rrdd = "RRDD", func = "ANY"), @@ -207,6 +215,7 @@ setMethod("partitionBy", RRDD(r, serialized=TRUE) }) +# Group the values for each key in the RDD into a single sequence. setGeneric("groupByKey", function(rrdd, numPartitions) { standardGeneric("groupByKey") @@ -242,6 +251,7 @@ setMethod("groupByKey", lapplyPartition(shuffled, groupVals) }) +# Merge the values for each key using an associative reduce function. setGeneric("reduceByKey", function(rrdd, combineFunc, numPartitions) { standardGeneric("reduceByKey") @@ -274,6 +284,8 @@ setMethod("reduceByKey", lapplyPartition(shuffled, reduceVals) }) +# Return a list that contains all of the elements in the specified partition of +# the RDD. setGeneric("collectPartition", function(rrdd, partitionId) { standardGeneric("collectPartition") @@ -287,47 +299,3 @@ setMethod("collectPartition", as.integer(partitionId)) convertJListToRList(jList, flatten = TRUE) }) - - -wrapInt <- function(value) { - if (value > .Machine$integer.max) { - value <- value - 2 * .Machine$integer.max - 2 - } else if (value < -1 * .Machine$integer.max) { - value <- 2 * .Machine$integer.max + value + 2 - } - value -} - -mult31AndAdd <- function(val, addVal) { - vec <- c(bitwShiftL(val, c(4,3,2,1,0)), addVal) - Reduce(function(a, b) { - wrapInt(as.numeric(a) + as.numeric(b)) - }, - vec) -} - -hashCode <- function(key) { - if (class(key) == "integer") { - as.integer(key[[1]]) - } else if (class(key) == "numeric") { - # Convert the double to long and then calculate the hash code - rawVec <- writeBin(key[[1]], con=raw()) - intBits <- packBits(rawToBits(rawVec), "integer") - as.integer(bitwXor(intBits[2], intBits[1])) - } else if (class(key) == "character") { - n <- nchar(key) - if (n == 0) { - 0L - } else { - asciiVals <- sapply(charToRaw(key), function(x) { strtoi(x, 16L) }) - hashC <- 0 - for (k in 1:length(asciiVals)) { - hashC <- mult31AndAdd(hashC, asciiVals[k]) - } - as.integer(hashC) - } - } else { - warning(paste("Could not hash object, returning 0", sep="")) - as.integer(0) - } -} diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 0867743563040..937a24479559e 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -55,11 +55,14 @@ convertJListToRList <- function(jList, flatten) { } +# Returns TRUE if `name` refers to an RRDD in the given environment `env` isRRDD <- function(name, env) { obj <- get(name, envir=env) class(obj) == "RRDD" } +# Returns TRUE if `name` is a function in the SparkR package. +# TODO: Handle package-private functions as well ? isSparkFunction <- function(name) { if (is.function(name)) { fun <- name @@ -81,15 +84,15 @@ isSparkFunction <- function(name) { packageName(environment(fun)) == "SparkR" } +# Serialize the dependencies of the given function and return them as a raw +# vector. Filters out RRDDs before serializing the dependencies getDependencies <- function(name) { fileName <- tempfile(pattern="spark-utils", fileext=".deps") funcEnv <- environment(name) varsToSave <- ls(funcEnv) - #print(varsToSave) filteredVars <- varsToSave filteredVars <- Filter(function(x) { !isRRDD(x, funcEnv) }, varsToSave) - #filteredVars <- Filter(function(x) { !isSparkFunction(x) }, filteredVars) save(list=filteredVars, file=fileName, envir=funcEnv) fileSize <- file.info(fileName)$size @@ -98,3 +101,52 @@ getDependencies <- function(name) { unlink(fileName) binData } + +# Helper function used to wrap a 'numeric' value to integer bounds. +# Useful for implementing C-like integer arithmetic +wrapInt <- function(value) { + if (value > .Machine$integer.max) { + value <- value - 2 * .Machine$integer.max - 2 + } else if (value < -1 * .Machine$integer.max) { + value <- 2 * .Machine$integer.max + value + 2 + } + value +} + +# Multiply `val` by 31 and add `addVal` to the result. Ensures that +# integer-overflows are handled at every step. +mult31AndAdd <- function(val, addVal) { + vec <- c(bitwShiftL(val, c(4,3,2,1,0)), addVal) + Reduce(function(a, b) { + wrapInt(as.numeric(a) + as.numeric(b)) + }, + vec) +} + +# Java-style function to compute the hashCode for the given object. Returns +# an integer value. +hashCode <- function(key) { + if (class(key) == "integer") { + as.integer(key[[1]]) + } else if (class(key) == "numeric") { + # Convert the double to long and then calculate the hash code + rawVec <- writeBin(key[[1]], con=raw()) + intBits <- packBits(rawToBits(rawVec), "integer") + as.integer(bitwXor(intBits[2], intBits[1])) + } else if (class(key) == "character") { + n <- nchar(key) + if (n == 0) { + 0L + } else { + asciiVals <- sapply(charToRaw(key), function(x) { strtoi(x, 16L) }) + hashC <- 0 + for (k in 1:length(asciiVals)) { + hashC <- mult31AndAdd(hashC, asciiVals[k]) + } + as.integer(hashC) + } + } else { + warning(paste("Could not hash object, returning 0", sep="")) + as.integer(0) + } +} diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 00e5506201cc3..8dfb11cea010a 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -63,10 +63,6 @@ if (isEmpty != 0) { } output <- do.call(execFunctionName, list(data)) writeRaw(outputCon, output) - # for (name in output) { - # writeRaw(outputCon, name) - # } - } else { if (isSerialized) { # Now read as many characters as described in funcLen @@ -81,7 +77,6 @@ if (isEmpty != 0) { hashTupleToEnvir <- function(tuple) { # NOTE: execFunction is the hash function here hashVal <- do.call(execFunctionName, list(tuple[[1]])) - #hashVal <- execFunction(tuple[[1]]) bucket <- as.character(hashVal %% numPartitions) acc <- res[[bucket]] # TODO?: http://stackoverflow.com/questions/2436688/append-an-object-to-a-list-in-r-in-amortized-constant-time From 0c7efbf78644084f4bae29e8020f96541432e0c8 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 21:31:24 -0800 Subject: [PATCH 058/687] Refactor RRDD.scala and add comments to functions --- RRDD.scala | 214 +++++++++++++++++++++-------------------------------- 1 file changed, 83 insertions(+), 131 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 437d5c980af36..35e54be6d1541 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -8,7 +8,6 @@ import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.rdd.RDD import org.apache.spark.util.Utils - /** * Form an RDD[(Array[Byte], Array[Byte])] from key-value pairs returned from R. * This is used by SparkR's shuffle operations. @@ -25,63 +24,13 @@ private class PairwiseRRDD[T: ClassManifest]( override def compute(split: Partition, context: TaskContext): Iterator[(Int, Array[Byte])] = { - val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt - val pb = SparkRHelper.rWorkerProcessBuilder - + val pb = RRDD.rWorkerProcessBuilder val proc = pb.start() - val env = SparkEnv.get - - val tempDir = Utils.getLocalDir - val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) - val tempFileName = tempFile.getAbsolutePath - - // Start a thread to print the process's stderr to ours - new Thread("stderr reader for R") { - override def run() { - for (line <- Source.fromInputStream(proc.getErrorStream).getLines) { - System.err.println(line) - } - } - }.start() - - // Start a thread to feed the process input from our parent's iterator - new Thread("stdin writer for R") { - override def run() { - SparkEnv.set(env) - val stream = new BufferedOutputStream(proc.getOutputStream, bufferSize) - val printOut = new PrintStream(stream) - val dataOut = new DataOutputStream(stream) - - printOut.println(tempFileName) - - dataOut.writeInt(hashFunc.length) - dataOut.write(hashFunc, 0, hashFunc.length) - - dataOut.writeInt(if (dataSerialized) 1 else 0) - - dataOut.writeInt(functionDependencies.length) - dataOut.write(functionDependencies, 0, functionDependencies.length) - // Write 1 to indicate this is a pair-wise RDD - dataOut.writeInt(numPartitions) + RRDD.startStderrThread(proc) - if (!firstParent.iterator(split, context).hasNext) { - dataOut.writeInt(0) - } else { - dataOut.writeInt(1) - } - for (elem <- firstParent[T].iterator(split, context)) { - if (dataSerialized) { - val elemArr = elem.asInstanceOf[Array[Byte]] - dataOut.writeInt(elemArr.length) - dataOut.write(elemArr, 0, elemArr.length) - } else { - printOut.println(elem) - } - } - stream.close() - } - }.start() + RRDD.startStdinThread(proc, hashFunc, dataSerialized, + functionDependencies, firstParent[T].iterator(split, context), numPartitions) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) @@ -125,10 +74,11 @@ private class PairwiseRRDD[T: ClassManifest]( } lazy val asJavaPairRDD : JavaPairRDD[Int, Array[Byte]] = JavaPairRDD.fromRDD(this) - } -/** An RDD that stores serialized R objects as Array[Byte]. */ +/** + * An RDD that stores serialized R objects as Array[Byte]. + */ class RRDD[T: ClassManifest]( parent: RDD[T], func: Array[Byte], @@ -140,64 +90,15 @@ class RRDD[T: ClassManifest]( override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { - val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt - val pb = SparkRHelper.rWorkerProcessBuilder + val pb = RRDD.rWorkerProcessBuilder val proc = pb.start() - val env = SparkEnv.get - - val tempDir = Utils.getLocalDir - val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) - val tempFileName = tempFile.getAbsolutePath - - // Start a thread to print the process's stderr to ours - new Thread("stderr reader for R") { - override def run() { - for (line <- Source.fromInputStream(proc.getErrorStream).getLines) { - System.err.println(line) - } - } - }.start() - - // Start a thread to feed the process input from our parent's iterator - new Thread("stdin writer for R") { - override def run() { - SparkEnv.set(env) - val stream = new BufferedOutputStream(proc.getOutputStream, bufferSize) - val printOut = new PrintStream(stream) - val dataOut = new DataOutputStream(stream) - - printOut.println(tempFileName) - - dataOut.writeInt(func.length) - dataOut.write(func, 0, func.length) - - dataOut.writeInt(if(dataSerialized) 1 else 0) - - dataOut.writeInt(functionDependencies.length) - dataOut.write(functionDependencies, 0, functionDependencies.length) - - // Special flag that tells the worker that this is a normal RRDD. - dataOut.writeInt(-1) - if (!firstParent.iterator(split, context).hasNext) { - dataOut.writeInt(0) - } else { - dataOut.writeInt(1) - } + RRDD.startStderrThread(proc) - for (elem <- firstParent[T].iterator(split, context)) { - if (dataSerialized) { - val elemArr = elem.asInstanceOf[Array[Byte]] - dataOut.writeInt(elemArr.length) - dataOut.write(elemArr, 0, elemArr.length) - } else { - printOut.println(elem) - } - } - stream.close() - } - }.start() + // Write -1 in numPartitions to indicate this is a normal RDD + RRDD.startStdinThread(proc, func, dataSerialized, + functionDependencies, firstParent[T].iterator(split, context), numPartitions = -1) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) @@ -254,27 +155,8 @@ object RRDD { } /** - * Create an RRDD given a sequence of 2-tuples of byte arrays (key-val collections). Used to create RRDD when - * `parallelize` is called from R. - * TODO?: change return type into JavaPairRDD[Array[Byte], Array[Byte]]? + * ProcessBuilder used to launch worker R processes. */ - def createRDDFromArray(jsc: JavaSparkContext, - arr: Array[Array[Array[Array[Byte]]]]): JavaPairRDD[Array[Byte], Array[Byte]] = { - - val keyValPairs: Seq[(Array[Byte], Array[Byte])] = - for ( - slice <- arr; - tup <- slice - ) yield (tup(0), tup(1)) - - JavaPairRDD.fromRDD(jsc.sc.parallelize(keyValPairs, arr.length)) - - } - -} - -object SparkRHelper { - lazy val rWorkerProcessBuilder = { val rCommand = "Rscript" val rOptions = "--vanilla" @@ -286,4 +168,74 @@ object SparkRHelper { new ProcessBuilder(List(rCommand, rOptions, rExecScript)) } + /** + * Start a thread to print the process's stderr to ours + */ + def startStderrThread(proc: Process) { + new Thread("stderr reader for R") { + override def run() { + for (line <- Source.fromInputStream(proc.getErrorStream).getLines) { + System.err.println(line) + } + } + }.start() + } + + + /** + * Start a thread to write RDD data to the R process. + */ + def startStdinThread[T]( + proc: Process, + func: Array[Byte], + dataSerialized: Boolean, + functionDependencies: Array[Byte], + iter: Iterator[T], + numPartitions: Int) { + + val tempDir = Utils.getLocalDir + val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) + val tempFileName = tempFile.getAbsolutePath() + val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt + val env = SparkEnv.get + + // Start a thread to feed the process input from our parent's iterator + new Thread("stdin writer for R") { + override def run() { + SparkEnv.set(env) + val stream = new BufferedOutputStream(proc.getOutputStream, bufferSize) + val printOut = new PrintStream(stream) + val dataOut = new DataOutputStream(stream) + + printOut.println(tempFileName) + + dataOut.writeInt(func.length) + dataOut.write(func, 0, func.length) + + dataOut.writeInt(if (dataSerialized) 1 else 0) + + dataOut.writeInt(functionDependencies.length) + dataOut.write(functionDependencies, 0, functionDependencies.length) + + dataOut.writeInt(numPartitions) + + if (!iter.hasNext) { + dataOut.writeInt(0) + } else { + dataOut.writeInt(1) + } + + for (elem <- iter) { + if (dataSerialized) { + val elemArr = elem.asInstanceOf[Array[Byte]] + dataOut.writeInt(elemArr.length) + dataOut.write(elemArr, 0, elemArr.length) + } else { + printOut.println(elem) + } + } + stream.close() + } + }.start() + } } From c40768e3b711fe6b41a549c6e4fe02c7a34c0b9b Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 21:45:59 -0800 Subject: [PATCH 059/687] Update TODO --- TODO.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/TODO.md b/TODO.md index d05aa4920e694..89c387f228413 100644 --- a/TODO.md +++ b/TODO.md @@ -1,4 +1,15 @@ -# Things to do for SparkR +# Things to do for SparkR, roughly in order of importance + +## Unit tests still TODO + +1. textFile + collect -- use README.md, or some test file (check if minSplits +works correctly) +2. utils.R - Check if dependencies are serialized correctly +3. convertJListToRList + +## Documentation + +1. Write Rd documentation for RRDD functions, context functions ## Functions to support @@ -19,14 +30,3 @@ this for any given R file to be sourced in the worker before functions are run. 3. Profile serialization overhead and see if there is anything better we can do. 4. Reduce code duplication between SparkR and PySpark 5. Add more examples (machine learning ?) and some performance benchmarks. - -## Unit tests still TODO - -1. textFile + collect -- use README.md, or some test file (check if minSplits -works correctly) -2. utils.R - Check if dependencies are serialized correctly -3. convertJListToRList - -## Documentation - -1. Write Rd documentation for RRDD functions, context functions From 88f11016b300ea8ac2579d22174bef23d72b99f1 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 21:46:43 -0800 Subject: [PATCH 060/687] Add unit test running instructions --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 952eb36b025e4..d10726e9534bb 100644 --- a/README.md +++ b/README.md @@ -21,3 +21,7 @@ SparkR also comes with several sample programs in the `R/examples` directory. To run one of them, use `./sparkR `. For example: ./sparkR R/examples/pi.R local[2] + +You can also run the unit-tests for SparkR by running + + ./sparkR R/pkg/inst/tests/run-all.R From 85b1d254fb8ba49fa2b6f392c2068775afbb017c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 11 Dec 2013 21:49:11 -0800 Subject: [PATCH 061/687] Set license to Apache --- pkg/DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 1bbdd65b97b96..b08fafc1d30f8 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -8,4 +8,4 @@ Maintainer: Shivaram Venkataraman Depends: R (>= 3.0), methods, rJava Suggests: testthat Description: R frontend for Spark -License: BSD +License: Apache License (== 2.0) From 16ac3141d9301de431c5dbd445374e3f02d03784 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 12 Dec 2013 00:17:08 -0800 Subject: [PATCH 062/687] Add documentation for functions in context, sparkR --- pkg/DESCRIPTION | 8 ++++-- pkg/R/context.R | 55 ++++++++++++++++++++++++++++++------------ pkg/R/sparkR.R | 19 ++++++++++----- pkg/man/parallelize.Rd | 30 +++++++++++++++++++++++ pkg/man/sparkR.init.Rd | 22 +++++++++++++++++ pkg/man/textFile.Rd | 30 +++++++++++++++++++++++ 6 files changed, 141 insertions(+), 23 deletions(-) create mode 100644 pkg/man/parallelize.Rd create mode 100644 pkg/man/sparkR.init.Rd create mode 100644 pkg/man/textFile.Rd diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index b08fafc1d30f8..27b07cc054dbe 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -5,7 +5,11 @@ Version: 0.1 Date: 2013-09-09 Author: Shivaram Venkataraman Maintainer: Shivaram Venkataraman -Depends: R (>= 3.0), methods, rJava -Suggests: testthat +Depends: + R (>= 3.0), + methods, + rJava +Suggests: + testthat Description: R frontend for Spark License: Apache License (== 2.0) diff --git a/pkg/R/context.R b/pkg/R/context.R index 90e515b0e72e8..1768e02242e2b 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -1,25 +1,51 @@ # context.R: SparkContext driven functions -# Read a text file from HDFS, a local file system (available on all -# nodes), or any Hadoop-supported file system URI, and return it as an -# RRDD of Strings. -textFile <- function(jsc, name, minSplits=NULL) { - # FIXME: if execute into this if block, errors: - # Error in .jcall(jsc, "sc", c()) : RcallMethod: invalid method name +#' Create an RDD from a text file. +#' +#' This function reads a text file from HDFS, a local file system (available on all +#' nodes), or any Hadoop-supported file system URI, and creates an +#' RDD of strings from it. +#' +#' @param sc SparkContext to use +#' @param name Path of file to read +#' @param minSplits Minimum number of splits to be created. If NULL, the default +#' value is chosen based on available parallelism. +#' @return RRDD where each item is of type \code{character} +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' lines <- textFile(sc, "myfile.txt") +#'} + +textFile <- function(sc, path, minSplits = NULL) { if (is.null(minSplits)) { - sc <- .jcall(jsc, "Lorg/apache/spark/SparkContext;", "sc") - defaultParallelism <- .jcall(sc, "I", "defaultParallelism") + ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") + defaultParallelism <- .jcall(ssc, "I", "defaultParallelism") minSplits <- min(defaultParallelism, 2) } - jrdd <- .jcall(jsc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", name, + jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", path, as.integer(minSplits)) RRDD(jrdd, FALSE) } -# Distribute a local R homogeneous list to form an RRDD[Array[Byte]]. If a -# vector is passed as `coll', as.list() will be called on it to convert it to a -# list. -parallelize <- function(jsc, coll, numSlices = 1) { +#' Create an RDD from a homogeneous list or vector. +#' +#' This function creates an RDD from a local homogeneous list in R. The elements +#' in the list are split into \code{numSlices} slices and distributed to nodes +#' in the cluster. +#' +#' @param sc SparkContext to use +#' @param coll collection to parallelize +#' @param numSlices number of partitions to create in the RDD +#' @return an RRDD created from this collection +#' @export +#' @examples +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2) +#' # The RDD should contain 10 elements +#' length(rdd) +parallelize <- function(sc, coll, numSlices = 1) { # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives # TODO: support matrix, data frame, etc @@ -48,9 +74,8 @@ parallelize <- function(jsc, coll, numSlices = 1) { jrdd <- .jcall("org/apache/spark/api/r/RRDD", jrddType, "createRDDFromArray", - jsc, + sc, javaSerializedSlices) RRDD(jrdd, TRUE) } - diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 46e2828c6aacc..f32a292de3a21 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -9,14 +9,21 @@ sparkR.onLoad <- function(libname, pkgname) { .jinit(classpath=classPath) } -# Initializes and returns a JavaSparkContext +#' Initialize a new Spark Context. +#' +#' This function initializes a new SparkContext. +#' +#' @param master The Spark master URL. +#' @param appName Application name to register with cluster manager +#' @param sparkHome Spark Home directory +#' @export +#' @examples +#' sparkR.init("local[2]", "SparkR", "/home/spark") + sparkR.init <- function( - master = "local[2]", + master = "local", appName = "SparkR", - sparkHome = Sys.getenv("SPARK_HOME"), - jars = NULL, - jarFile = NULL, - environment = NULL) { + sparkHome = Sys.getenv("SPARK_HOME")) { if (exists(".sparkRjsc", envir=.sparkREnv)) { return(get(".sparkRjsc", envir=.sparkREnv)) diff --git a/pkg/man/parallelize.Rd b/pkg/man/parallelize.Rd new file mode 100644 index 0000000000000..70ead5667796c --- /dev/null +++ b/pkg/man/parallelize.Rd @@ -0,0 +1,30 @@ +\name{parallelize} +\alias{parallelize} +\title{Create an RDD from a homogeneous list or vector.} +\usage{ +parallelize(sc, coll, numSlices = 1) +} +\arguments{ + \item{sc}{SparkContext to use} + + \item{coll}{collection to parallelize} + + \item{numSlices}{number of partitions to create in the + RDD} +} +\value{ +an RRDD created from this collection +} +\description{ +This function creates an RDD from a local homogeneous list +in R. The elements in the list are split into +\code{numSlices} slices and distributed to nodes in the +cluster. +} +\examples{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10, 2) +# The RDD should contain 10 elements +length(rdd) +} + diff --git a/pkg/man/sparkR.init.Rd b/pkg/man/sparkR.init.Rd new file mode 100644 index 0000000000000..7347b43b97fc7 --- /dev/null +++ b/pkg/man/sparkR.init.Rd @@ -0,0 +1,22 @@ +\name{sparkR.init} +\alias{sparkR.init} +\title{Initialize a new Spark Context.} +\usage{ +sparkR.init(master = "local", appName = "SparkR", + sparkHome = Sys.getenv("SPARK_HOME")) +} +\arguments{ + \item{master}{The Spark master URL.} + + \item{appName}{Application name to register with cluster + manager} + + \item{sparkHome}{Spark Home directory} +} +\description{ +This function initializes a new SparkContext. +} +\examples{ +sparkR.init("local[2]", "SparkR", "/home/spark") +} + diff --git a/pkg/man/textFile.Rd b/pkg/man/textFile.Rd new file mode 100644 index 0000000000000..ec2c9fc883686 --- /dev/null +++ b/pkg/man/textFile.Rd @@ -0,0 +1,30 @@ +\name{textFile} +\alias{textFile} +\title{Create an RDD from a text file.} +\usage{ +textFile(sc, path, minSplits = NULL) +} +\arguments{ + \item{sc}{SparkContext to use} + + \item{name}{Path of file to read} + + \item{minSplits}{Minimum number of splits to be created. + If NULL, the default value is chosen based on available + parallelism.} +} +\value{ +RRDD of \code{character} +} +\description{ +This function reads a text file from HDFS, a local file +system (available on all nodes), or any Hadoop-supported +file system URI, and creates an RDD of strings from it. +} +\examples{ +\dontrun{ + sc <- sparkR.init() + lines <- textFile(sc, "myfile.txt") +} +} + From fb7e72cfdf0f0697866ce99f0b319bce32b3902f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 12 Dec 2013 00:18:26 -0800 Subject: [PATCH 063/687] Cleanup TODO --- TODO.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 89c387f228413..c239705689761 100644 --- a/TODO.md +++ b/TODO.md @@ -1,4 +1,4 @@ -# Things to do for SparkR, roughly in order of importance +## Things to do for SparkR, roughly in order of importance ## Unit tests still TODO From 12bf8ce7e23ccf1e9203b755d22794a0595354ed Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 12 Dec 2013 19:32:58 -0800 Subject: [PATCH 064/687] Add support to include packages in the worker --- pkg/NAMESPACE | 2 +- pkg/R/RRDD.R | 9 +++++++++ pkg/R/context.R | 39 +++++++++++++++++++++++++++++++++++++++ pkg/inst/worker/worker.R | 14 +++++++++++--- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 7b54ae22665ad..888fe2f364cd8 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -18,5 +18,5 @@ exportMethods( ) # S3 methods exported -export("textFile", "parallelize", "hashCode") +export("textFile", "parallelize", "hashCode", "includePackage") exportPattern("^sparkR") diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 1b1c69743bef3..e98c930780d01 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -113,6 +113,9 @@ setMethod("lapplyPartition", serializedFunc <- serialize("computeFunc", connection = NULL, ascii = TRUE) serializedFuncArr <- .jarray(serializedFunc) + packageNamesArr <- .jarray(serialize(.sparkREnv[[".packages"]], + connection = NULL, + ascii = TRUE)) depsBin <- getDependencies(computeFunc) depsBinArr <- .jarray(depsBin) @@ -121,6 +124,7 @@ setMethod("lapplyPartition", serializedFuncArr, X@serialized, depsBinArr, + packageNamesArr, X@jrdd$classManifest()) jrdd <- rrddRef$asJavaRDD() RRDD(jrdd, TRUE) @@ -190,6 +194,10 @@ setMethod("partitionBy", ascii = TRUE) serializedHashFuncBytes <- .jarray(serializedHashFunc) + packageNamesArr <- .jarray(serialize(.sparkREnv[[".packages"]], + connection = NULL, + ascii = TRUE)) + # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). @@ -199,6 +207,7 @@ setMethod("partitionBy", serializedHashFuncBytes, rrdd@serialized, depsBinArr, + packageNamesArr, rrdd@jrdd$classManifest()) # Create a corresponding partitioner. diff --git a/pkg/R/context.R b/pkg/R/context.R index 1768e02242e2b..18ea41cfb0bde 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -79,3 +79,42 @@ parallelize <- function(sc, coll, numSlices = 1) { RRDD(jrdd, TRUE) } + + +#' Include this specified package on all workers +#' +#' This function can be used to include a package on all workers before the +#' user's code is executed. This is useful in scenarios where other R package +#' functions are used in a function passed to functions like \Code{lapply}. +#' NOTE: The package is assumed to be installed on every node in the Spark +#' cluster. +#' +#' @param sc SparkContext to use +#' @param pkg Package name +#' +#' @export +#' @examples +#'\dontrun{ +#' library(Matrix) +#' +#' sc <- sparkR.init() +#' # Include the matrix library we will be using +#' includePackage(Matrix) +#' +#' generateSparse <- function(x) { +#' sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) +#' } +#' +#' rrdd <- lapplyPartition(parallelize(sc, 1:2, 2L), generateSparse) +#' collect(rrdd) +#'} +includePackage <- function(sc, pkg) { + pkg <- as.character(substitute(pkg)) + if (exists(".packages", .sparkREnv)) { + packages <- .sparkREnv[[".packages"]] + } else { + packages <- list() + } + packages <- c(packages, pkg) + .sparkREnv[[".packages"]] <- packages +} diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 8dfb11cea010a..68a4943a6a757 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -14,6 +14,8 @@ source_local("serialize.R") sparkHome <- Sys.getenv("SPARK_HOME") .libPaths(c( .libPaths(), paste(sparkHome,"/R/lib", sep=""))) +suppressPackageStartupMessages(library(SparkR)) + # NOTE: We use "stdin" to get the process stdin instead of the command line inputCon <- file("stdin", open = "rb") @@ -27,6 +29,10 @@ execFunctionName <- unserialize(readRawLen(inputCon, execLen)) # read the isSerialized bit flag isSerialized <- readInt(inputCon) +# Redirect stdout to stderr to prevent print statements from +# interfering with outputStream +sink(stderr()) + # read function dependencies depsLen <- readInt(inputCon) if (depsLen > 0) { @@ -42,9 +48,11 @@ if (depsLen > 0) { unlink(depsFileName) } -# Redirect stdout to stderr to prevent print statements from -# interfering with outputStream -sink(stderr()) +# Include packages as required +packageNames <- unserialize(readRaw(inputCon)) +for (pkg in packageNames) { + suppressPackageStartupMessages(require(as.character(pkg), character.only=TRUE)) +} # If -1: read as normal RDD; if >= 0, treat as pairwise RDD and treat the int # as number of partitions to create. From a978e847c4a5298787b80cab7be67f0fd8e1e47e Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 12 Dec 2013 19:32:58 -0800 Subject: [PATCH 065/687] Add support to include packages in the worker --- RRDD.scala | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 35e54be6d1541..40b9816e1c813 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -17,7 +17,8 @@ private class PairwiseRRDD[T: ClassManifest]( numPartitions: Int, hashFunc: Array[Byte], dataSerialized: Boolean, - functionDependencies: Array[Byte]) + functionDependencies: Array[Byte], + packageNames: Array[Byte]) extends RDD[(Int, Array[Byte])](parent) { override def getPartitions = parent.partitions @@ -30,7 +31,8 @@ private class PairwiseRRDD[T: ClassManifest]( RRDD.startStderrThread(proc) RRDD.startStdinThread(proc, hashFunc, dataSerialized, - functionDependencies, firstParent[T].iterator(split, context), numPartitions) + functionDependencies, packageNames, + firstParent[T].iterator(split, context), numPartitions) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) @@ -83,7 +85,8 @@ class RRDD[T: ClassManifest]( parent: RDD[T], func: Array[Byte], dataSerialized: Boolean, - functionDependencies: Array[Byte]) + functionDependencies: Array[Byte], + packageNames: Array[Byte]) extends RDD[Array[Byte]](parent) with Logging { override def getPartitions = parent.partitions @@ -98,7 +101,8 @@ class RRDD[T: ClassManifest]( // Write -1 in numPartitions to indicate this is a normal RDD RRDD.startStdinThread(proc, func, dataSerialized, - functionDependencies, firstParent[T].iterator(split, context), numPartitions = -1) + functionDependencies, packageNames, + firstParent[T].iterator(split, context), numPartitions = -1) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) @@ -190,6 +194,7 @@ object RRDD { func: Array[Byte], dataSerialized: Boolean, functionDependencies: Array[Byte], + packageNames: Array[Byte], iter: Iterator[T], numPartitions: Int) { @@ -217,6 +222,9 @@ object RRDD { dataOut.writeInt(functionDependencies.length) dataOut.write(functionDependencies, 0, functionDependencies.length) + dataOut.writeInt(packageNames.length) + dataOut.write(packageNames, 0, packageNames.length) + dataOut.writeInt(numPartitions) if (!iter.hasNext) { From 41cea51d6716fddbeee07c28b2d66c1940b4b95a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 12 Dec 2013 19:33:17 -0800 Subject: [PATCH 066/687] Ensure all parent environments are serialized. Also add a test case with an inline function --- pkg/R/utils.R | 27 +++++++++++++++++++++------ pkg/inst/tests/test_rrd.R | 12 ++++++++++-- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 937a24479559e..a68eac3d9e2f9 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -87,14 +87,29 @@ isSparkFunction <- function(name) { # Serialize the dependencies of the given function and return them as a raw # vector. Filters out RRDDs before serializing the dependencies getDependencies <- function(name) { - fileName <- tempfile(pattern="spark-utils", fileext=".deps") - funcEnv <- environment(name) - varsToSave <- ls(funcEnv) + varsToSave <- c() + closureEnv <- environment(name) + + currentEnv <- closureEnv + while (TRUE) { + #print(currentEnv) - filteredVars <- varsToSave - filteredVars <- Filter(function(x) { !isRRDD(x, funcEnv) }, varsToSave) + # Don't serialize namespaces + if (!isNamespace(currentEnv)) { + varsToSave <- c(varsToSave, ls(currentEnv)) + } - save(list=filteredVars, file=fileName, envir=funcEnv) + # Everything below globalenv are packages, search path stuff etc. + if (identical(currentEnv, globalenv())) + break + currentEnv <- parent.env(currentEnv) + } + filteredVars <- Filter(function(x) { !isRRDD(x, closureEnv) }, varsToSave) + + #cat("Saving ", filteredVars, "\n", file=stderr()) + + fileName <- tempfile(pattern="spark-utils", fileext=".deps") + save(list=filteredVars, file=fileName, envir=closureEnv) fileSize <- file.info(fileName)$size binData <- readBin(fileName, raw(), fileSize, endian="big") diff --git a/pkg/inst/tests/test_rrd.R b/pkg/inst/tests/test_rrd.R index 9b5981f017965..aaa57988b8ac7 100644 --- a/pkg/inst/tests/test_rrd.R +++ b/pkg/inst/tests/test_rrd.R @@ -1,11 +1,11 @@ context("basic RRDD functions") # JavaSparkContext handle -jsc <- sparkR.init() +sc <- sparkR.init() # Data nums <- 1:10 -rrdd <- parallelize(jsc, nums, 2L) +rrdd <- parallelize(sc, nums, 2L) test_that("count and length on RRDD", { expect_equal(count(rrdd), 10) @@ -32,3 +32,11 @@ test_that("reduce on RRDD", { sumInline <- reduce(rrdd, function(x, y) { x + y }) expect_equal(sumInline, 55) }) + +test_that("lapply with dependency", { + fa <- 5 + multiples <- lapply(rrdd, function(x) { fa * x }) + actual <- collect(multiples) + + expect_equal(actual, as.list(nums * 5)) +}) From db56a345b7526a2541e09595efe8d93de4fc6c57 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 12 Dec 2013 19:42:04 -0800 Subject: [PATCH 067/687] Add a test case for include package --- pkg/inst/tests/test_includePackage.R | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 pkg/inst/tests/test_includePackage.R diff --git a/pkg/inst/tests/test_includePackage.R b/pkg/inst/tests/test_includePackage.R new file mode 100644 index 0000000000000..e0f33def4573d --- /dev/null +++ b/pkg/inst/tests/test_includePackage.R @@ -0,0 +1,35 @@ +context("include R packages") + +# JavaSparkContext handle +sc <- sparkR.init() + +# Partitioned data +nums <- 1:3 +rrdd <- parallelize(sc, nums, 3L) + +test_that("include inside function", { + # Only run the test if Matrix is installed. + if ("Matrix" %in% rownames(installed.packages())) { + suppressPackageStartupMessages(library(Matrix)) + generateSparse <- function(x) { + suppressPackageStartupMessages(library(Matrix)) + sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) + } + + sparseMat <- lapplyPartition(rrdd, generateSparse) + actual <- collect(sparseMat) + } +}) + +test_that("use include package", { + # Only run the test if Matrix is installed. + if ("Matrix" %in% rownames(installed.packages())) { + suppressPackageStartupMessages(library(Matrix)) + generateSparse <- function(x) { + sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) + } + includePackage(sc, Matrix) + sparseMat <- lapplyPartition(rrdd, generateSparse) + actual <- collect(sparseMat) + } +}) From c515e3adf9a5ecc03e418c0e1f438459f75e1826 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 12 Dec 2013 19:42:47 -0800 Subject: [PATCH 068/687] Update TODO --- TODO.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/TODO.md b/TODO.md index c239705689761..a2cf39767369b 100644 --- a/TODO.md +++ b/TODO.md @@ -15,8 +15,7 @@ works correctly) 1. Similar to `stats.py` in Python, add support for mean, median, stdev etc. 2. Broadcast variables. -3. Allow R packages to be loaded into the run time. Also consider if we need to extend -this for any given R file to be sourced in the worker before functions are run. +3. Consider if we need to extend `addPackage` so that any given R file can be sourced in the worker before functions are run. ## Performance improvements 1. Write hash functions in C and use .Call to call into them From d1dc3fa5a4c1b92764eab3c7dbf723d7d2869179 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 13 Dec 2013 08:59:20 -0800 Subject: [PATCH 069/687] Add more documentation --- pkg/R/RRDD.R | 138 ++++++++++++++++++++++++++++++-------- pkg/R/context.R | 2 +- pkg/man/cache.Rd | 19 ++++++ pkg/man/collect.Rd | 32 +++++++++ pkg/man/count.Rd | 31 +++++++++ pkg/man/flatMap.Rd | 26 +++++++ pkg/man/includePackage.Rd | 36 ++++++++++ pkg/man/lapply.Rd | 29 ++++++++ pkg/man/reduce.Rd | 22 ++++++ pkg/man/take.Rd | 21 ++++++ pkg/man/textFile.Rd | 2 +- 11 files changed, 329 insertions(+), 29 deletions(-) create mode 100644 pkg/man/cache.Rd create mode 100644 pkg/man/collect.Rd create mode 100644 pkg/man/count.Rd create mode 100644 pkg/man/flatMap.Rd create mode 100644 pkg/man/includePackage.Rd create mode 100644 pkg/man/lapply.Rd create mode 100644 pkg/man/reduce.Rd create mode 100644 pkg/man/take.Rd diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index e98c930780d01..6b51b2c37baca 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -21,7 +21,15 @@ RRDD <- function(jrdd, serialized = TRUE) { new("RRDD", jrdd = jrdd, serialized = serialized) } -# Persist this RDD with the default storage level (MEMORY_ONLY). +#' Persist an RDD +#' +#' Persist this RDD with the default storage level (MEMORY_ONLY). +#' +#' @param rrdd The RRDD to cache +#' @examples +#' sc <- sparkR.init() +#' rrdd <- parallelize(sc, 1:10, 2L) +#' cache(rrdd) setGeneric("cache", function(rrdd) { standardGeneric("cache") }) setMethod("cache", signature(rrdd = "RRDD"), @@ -31,8 +39,20 @@ setMethod("cache", }) -# collect(): Return a list that contains all of the elements in this RRDD. -# NOTE: supports only RRDD[Array[Byte]] and RRDD[primitive java type] for now. +#' Collect elements of an RDD +#' +#' @description +#' \code{collect} returns a list that contains all of the elements in this RRDD. +#' +#' @param rrdd The RRDD to collect +#' @return a list containing elements in the RRDD. +#' @rdname collect +#' @export +#' @examples +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' collect(rdd) # list from 1 to 10 +#' collectPartition(rdd, 0L) # list from 1 to 5 setGeneric("collect", function(rrdd, ...) { standardGeneric("collect") }) setMethod("collect", signature(rrdd = "RRDD"), @@ -42,8 +62,37 @@ setMethod("collect", convertJListToRList(collected, flatten) }) +#' @rdname collect +#' @description +#' \code{collectPartition} returns a list that contains all of the elements +#' in the specified partition of the RDD. +#' @param partitionId the partition to collect (starts from 0) +setGeneric("collectPartition", + function(rrdd, partitionId) { + standardGeneric("collectPartition") + }) +setMethod("collectPartition", + signature(rrdd = "RRDD", partitionId = "integer"), + function(rrdd, partitionId) { + jList <- .jcall(rrdd@jrdd, + "Ljava/util/List;", + "collectPartition", + as.integer(partitionId)) + convertJListToRList(jList, flatten = TRUE) + }) + -# Return the number of elements in the RDD. +#' Return the number of elements in the RDD. +#' +#' @param rrdd The RRDD to count +#' @return number of elements in the RRDD. +#' @rdname count +#' @export +#' @examples +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' count(rdd) # 10 +#' length(rdd) # Same as count setGeneric("count", function(rrdd) { standardGeneric("count") }) setMethod("count", signature(rrdd = "RRDD"), @@ -56,7 +105,8 @@ setMethod("count", sum(as.integer(vals)) }) -# Return the number of elements in the RDD. +#' Return the number of elements in the RDD. +#' @rdname count setMethod("length", signature(x = "RRDD"), function(x) { @@ -64,7 +114,21 @@ setMethod("length", }) -# Return a new RDD by applying a function to all elements of this RDD. +#' Apply a function to all elements +#' +#' This function creates a new RRDD by applying the given transformation to all +#' elements of the given RDD +#' +#' @param X The RRDD to apply the transformation. +#' @param FUN the transformation to apply on each element +#' @return a new RRDD created by the transformation. +#' @rdname lapply +#' @export +#' @examples +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' multiplyByTwo <- lapply(rdd, function(x) { x * 2 }) +#' collect(multiplyByTwo) # 2,4,6... setMethod("lapply", signature(X = "RRDD", FUN = "function"), function(X, FUN) { @@ -75,7 +139,7 @@ setMethod("lapply", lapplyPartition(X, partitionFunc) }) -# Return a new RDD by applying a function to all elements of this RDD. +#' @rdname lapply setGeneric("map", function(X, FUN) { standardGeneric("map") }) setMethod("map", @@ -84,8 +148,20 @@ setMethod("map", lapply(X, FUN) }) -# Return a new RDD by first applying a function to all elements of this RDD, and -# then flattening the results. +#' Flatten results after apply a function to all elements +#' +#' This function return a new RDD by first applying a function to all +#' elements of this RDD, and then flattening the results. +#' +#' @param X The RRDD to apply the transformation. +#' @param FUN the transformation to apply on each element +#' @return a new RRDD created by the transformation. +#' @export +#' @examples +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) +#' collect(multiplyByTwo) # 2,20,4,40,6,60... setGeneric("flatMap", function(X, FUN) { standardGeneric("flatMap") }) setMethod("flatMap", @@ -130,8 +206,19 @@ setMethod("lapplyPartition", RRDD(jrdd, TRUE) }) -# Reduces the elements of this RDD using the specified commutative and -# associative binary operator. +#' Reduce across elements of an RDD. +#' +#' This function reduces the elements of this RDD using the +#' specified commutative and associative binary operator. +#' +#' @param rrdd The RRDD to reduce +#' @param func Commutative and associative function to apply on elements +#' of the RRDD. +#' @export +#' @examples +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' reduce(rdd, "+") # 55 setGeneric("reduce", function(rrdd, func) { standardGeneric("reduce") }) setMethod("reduce", signature(rrdd = "RRDD", func = "ANY"), @@ -146,7 +233,18 @@ setMethod("reduce", Reduce(func, partitionList) }) -# Take the first NUM elements in the RRDD and returns them in a list. +#' Take elements from an RDD. +#' +#' This function takes the first NUM elements in the RRDD and +#' returns them in a list. +#' +#' @param rrdd The RRDD to take elements from +#' @param num Number of elements to take +#' @export +#' @examples +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' take(rdd, 2L) # list(1, 2) setGeneric("take", function(rrdd, num) { standardGeneric("take") }) setMethod("take", signature(rrdd = "RRDD", num = "numeric"), @@ -174,6 +272,7 @@ setMethod("take", ############ Shuffle Functions ############ +# Return a copy of the RDD partitioned using the specified partitioner setGeneric("partitionBy", function(rrdd, numPartitions, ...) { standardGeneric("partitionBy") @@ -293,18 +392,3 @@ setMethod("reduceByKey", lapplyPartition(shuffled, reduceVals) }) -# Return a list that contains all of the elements in the specified partition of -# the RDD. -setGeneric("collectPartition", - function(rrdd, partitionId) { - standardGeneric("collectPartition") - }) -setMethod("collectPartition", - signature(rrdd = "RRDD", partitionId = "integer"), - function(rrdd, partitionId) { - jList <- .jcall(rrdd@jrdd, - "Ljava/util/List;", - "collectPartition", - as.integer(partitionId)) - convertJListToRList(jList, flatten = TRUE) - }) diff --git a/pkg/R/context.R b/pkg/R/context.R index 18ea41cfb0bde..4ff58f5d858f3 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -85,7 +85,7 @@ parallelize <- function(sc, coll, numSlices = 1) { #' #' This function can be used to include a package on all workers before the #' user's code is executed. This is useful in scenarios where other R package -#' functions are used in a function passed to functions like \Code{lapply}. +#' functions are used in a function passed to functions like \code{lapply}. #' NOTE: The package is assumed to be installed on every node in the Spark #' cluster. #' diff --git a/pkg/man/cache.Rd b/pkg/man/cache.Rd new file mode 100644 index 0000000000000..490f8711bd2a2 --- /dev/null +++ b/pkg/man/cache.Rd @@ -0,0 +1,19 @@ +\name{cache} +\alias{cache} +\title{Persist an RDD} +\usage{ +cache(rrdd) +} +\arguments{ + \item{rrdd}{The RRDD to cache} +} +\description{ +Persist this RDD with the default storage level +(MEMORY_ONLY). +} +\examples{ +sc <- sparkR.init() +rrdd <- parallelize(sc, 1:10, 2L) +cache(rrdd) +} + diff --git a/pkg/man/collect.Rd b/pkg/man/collect.Rd new file mode 100644 index 0000000000000..4809ea29579d7 --- /dev/null +++ b/pkg/man/collect.Rd @@ -0,0 +1,32 @@ +\name{collect} +\alias{collect} +\alias{collectPartition} +\title{Collect elements of an RDD} +\usage{ +collect(rrdd, ...) + +collectPartition(rrdd, partitionId) +} +\arguments{ + \item{rrdd}{The RRDD to collect} + + \item{partitionId}{the partition to collect (starts from + 0)} +} +\value{ +a list containing elements in the RRDD. +} +\description{ +\code{collect} returns a list that contains all of the +elements in this RRDD. + +\code{collectPartition} returns a list that contains all of +the elements in the specified partition of the RDD. +} +\examples{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10, 2L) +collect(rdd) # list from 1 to 10 +collectPartition(rdd, 0L) # list from 1 to 5 +} + diff --git a/pkg/man/count.Rd b/pkg/man/count.Rd new file mode 100644 index 0000000000000..e4da2d8af4417 --- /dev/null +++ b/pkg/man/count.Rd @@ -0,0 +1,31 @@ +\docType{methods} +\name{count} +\alias{count} +\alias{length,RRDD-method} +\title{Return the number of elements in the RDD.} +\usage{ +count(rrdd) + +\S4method{length}{RRDD}(x) +} +\arguments{ + \item{rrdd}{The RRDD to count} + + \item{x}{an \R object. For replacement, a vector or + factor.} +} +\value{ +number of elements in the RRDD. +} +\description{ +Return the number of elements in the RDD. + +Return the number of elements in the RDD. +} +\examples{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +count(rdd) # 10 +length(rdd) # Same as count +} + diff --git a/pkg/man/flatMap.Rd b/pkg/man/flatMap.Rd new file mode 100644 index 0000000000000..1e2a143d3c5ed --- /dev/null +++ b/pkg/man/flatMap.Rd @@ -0,0 +1,26 @@ +\name{flatMap} +\alias{flatMap} +\title{Flatten results after apply a function to all elements} +\usage{ +flatMap(X, FUN) +} +\arguments{ + \item{X}{The RRDD to apply the transformation.} + + \item{FUN}{the transformation to apply on each element} +} +\value{ +a new RRDD created by the transformation. +} +\description{ +This function return a new RDD by first applying a function +to all elements of this RDD, and then flattening the +results. +} +\examples{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) +collect(multiplyByTwo) # 2,20,4,40,6,60... +} + diff --git a/pkg/man/includePackage.Rd b/pkg/man/includePackage.Rd new file mode 100644 index 0000000000000..58f1972f7305a --- /dev/null +++ b/pkg/man/includePackage.Rd @@ -0,0 +1,36 @@ +\name{includePackage} +\alias{includePackage} +\title{Include this specified package on all workers} +\usage{ +includePackage(sc, pkg) +} +\arguments{ + \item{sc}{SparkContext to use} + + \item{pkg}{Package name} +} +\description{ +This function can be used to include a package on all +workers before the user's code is executed. This is useful +in scenarios where other R package functions are used in a +function passed to functions like \code{lapply}. NOTE: The +package is assumed to be installed on every node in the +Spark cluster. +} +\examples{ +\dontrun{ + library(Matrix) + + sc <- sparkR.init() + # Include the matrix library we will be using + includePackage(Matrix) + + generateSparse <- function(x) { + sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) + } + + rrdd <- lapplyPartition(parallelize(sc, 1:2, 2L), generateSparse) + collect(rrdd) +} +} + diff --git a/pkg/man/lapply.Rd b/pkg/man/lapply.Rd new file mode 100644 index 0000000000000..2c8240be5a167 --- /dev/null +++ b/pkg/man/lapply.Rd @@ -0,0 +1,29 @@ +\docType{methods} +\name{lapply,RRDD,function-method} +\alias{lapply,RRDD,function-method} +\alias{map} +\title{Apply a function to all elements} +\usage{ +\S4method{lapply}{RRDD,function}(X, FUN) + +map(X, FUN) +} +\arguments{ + \item{X}{The RRDD to apply the transformation.} + + \item{FUN}{the transformation to apply on each element} +} +\value{ +a new RRDD created by the transformation. +} +\description{ +This function creates a new RRDD by applying the given +transformation to all elements of the given RDD +} +\examples{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +multiplyByTwo <- lapply(rdd, function(x) { x * 2 }) +collect(multiplyByTwo) # 2,4,6... +} + diff --git a/pkg/man/reduce.Rd b/pkg/man/reduce.Rd new file mode 100644 index 0000000000000..86cb70adf68f6 --- /dev/null +++ b/pkg/man/reduce.Rd @@ -0,0 +1,22 @@ +\name{reduce} +\alias{reduce} +\title{Reduce across elements of an RDD.} +\usage{ +reduce(rrdd, func) +} +\arguments{ + \item{rrdd}{The RRDD to reduce} + + \item{func}{Commutative and associative function to apply + on elements of the RRDD.} +} +\description{ +This function reduces the elements of this RDD using the +specified commutative and associative binary operator. +} +\examples{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +reduce(rdd, "+") # 55 +} + diff --git a/pkg/man/take.Rd b/pkg/man/take.Rd new file mode 100644 index 0000000000000..2f826901c3eea --- /dev/null +++ b/pkg/man/take.Rd @@ -0,0 +1,21 @@ +\name{take} +\alias{take} +\title{Take elements from an RDD.} +\usage{ +take(rrdd, num) +} +\arguments{ + \item{rrdd}{The RRDD to take elements from} + + \item{num}{Number of elements to take} +} +\description{ +This function takes the first NUM elements in the RRDD and +returns them in a list. +} +\examples{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +take(rdd, 2L) # list(1, 2) +} + diff --git a/pkg/man/textFile.Rd b/pkg/man/textFile.Rd index ec2c9fc883686..5efc7feb1330f 100644 --- a/pkg/man/textFile.Rd +++ b/pkg/man/textFile.Rd @@ -14,7 +14,7 @@ textFile(sc, path, minSplits = NULL) parallelism.} } \value{ -RRDD of \code{character} +RRDD where each item is of type \code{character} } \description{ This function reads a text file from HDFS, a local file From ac0d81dac3276c0c2254a910890da460e5a12b40 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 13 Dec 2013 14:46:12 -0800 Subject: [PATCH 070/687] Add more documentation --- pkg/R/RRDD.R | 168 +++++++++++++++++++-- pkg/R/context.R | 4 +- pkg/R/sparkR.R | 2 + pkg/R/utils.R | 17 ++- pkg/man/RRDD.Rd | 22 +++ pkg/man/{cache.Rd => cache-methods.Rd} | 6 + pkg/man/{collect.Rd => collect-methods.Rd} | 16 +- pkg/man/count.Rd | 7 +- pkg/man/flatMap.Rd | 6 + pkg/man/groupByKey.Rd | 38 +++++ pkg/man/hashCode.Rd | 26 ++++ pkg/man/lapply.Rd | 5 + pkg/man/lapplyPartition.Rd | 32 ++++ pkg/man/parallelize.Rd | 2 + pkg/man/partitionBy.Rd | 41 +++++ pkg/man/reduce.Rd | 7 + pkg/man/reduceByKey.Rd | 43 ++++++ pkg/man/sparkR.init.Rd | 2 + pkg/man/take.Rd | 6 + pkg/man/textFile.Rd | 2 +- 20 files changed, 437 insertions(+), 15 deletions(-) create mode 100644 pkg/man/RRDD.Rd rename pkg/man/{cache.Rd => cache-methods.Rd} (76%) rename pkg/man/{collect.Rd => collect-methods.Rd} (60%) create mode 100644 pkg/man/groupByKey.Rd create mode 100644 pkg/man/hashCode.Rd create mode 100644 pkg/man/lapplyPartition.Rd create mode 100644 pkg/man/partitionBy.Rd create mode 100644 pkg/man/reduceByKey.Rd diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 6b51b2c37baca..a8ab0760623f4 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -2,6 +2,15 @@ #setOldClass("jobjRef") +#' @title S4 class that represents an RDD +#' @description RRDD can be created using functions like +#' \code{parallelize}, \code{textFile} etc. +#' @rdname RRDD +#' @seealso parallelize, textFile +#' +#' @param jrdd Java object reference to the backing JavaRDD +#' @param serialized TRUE if the JavaRDD contains serialized R objects +#' @export setClass("RRDD", slots = list(jrdd = "jobjRef", serialized = "logical")) @@ -16,7 +25,8 @@ setValidity("RRDD", } }) -# Constructor of the RRDD class. +#' @rdname RRDD +#' @export RRDD <- function(jrdd, serialized = TRUE) { new("RRDD", jrdd = jrdd, serialized = serialized) } @@ -26,11 +36,18 @@ RRDD <- function(jrdd, serialized = TRUE) { #' Persist this RDD with the default storage level (MEMORY_ONLY). #' #' @param rrdd The RRDD to cache +#' @rdname cache-methods +#' @export #' @examples +#'\dontrun{ #' sc <- sparkR.init() #' rrdd <- parallelize(sc, 1:10, 2L) #' cache(rrdd) +#'} setGeneric("cache", function(rrdd) { standardGeneric("cache") }) + +#' @rdname cache-methods +#' @aliases cache,RRDD-method setMethod("cache", signature(rrdd = "RRDD"), function(rrdd) { @@ -45,15 +62,22 @@ setMethod("cache", #' \code{collect} returns a list that contains all of the elements in this RRDD. #' #' @param rrdd The RRDD to collect -#' @return a list containing elements in the RRDD. -#' @rdname collect +#' @param ... Other optional arguments to collect +#' @param flatten FALSE if the list should not flattened +#' @return a list containing elements in the RRDD +#' @rdname collect-methods #' @export #' @examples +#'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10, 2L) #' collect(rdd) # list from 1 to 10 #' collectPartition(rdd, 0L) # list from 1 to 5 +#'} setGeneric("collect", function(rrdd, ...) { standardGeneric("collect") }) + +#' @rdname collect-methods +#' @aliases collect,RRDD-method setMethod("collect", signature(rrdd = "RRDD"), function(rrdd, flatten = TRUE) { @@ -62,7 +86,8 @@ setMethod("collect", convertJListToRList(collected, flatten) }) -#' @rdname collect +#' @rdname collect-methods +#' @export #' @description #' \code{collectPartition} returns a list that contains all of the elements #' in the specified partition of the RDD. @@ -71,6 +96,9 @@ setGeneric("collectPartition", function(rrdd, partitionId) { standardGeneric("collectPartition") }) + +#' @rdname collect-methods +#' @aliases collectPartition,integer,RRDD-method setMethod("collectPartition", signature(rrdd = "RRDD", partitionId = "integer"), function(rrdd, partitionId) { @@ -89,11 +117,16 @@ setMethod("collectPartition", #' @rdname count #' @export #' @examples +#'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' count(rdd) # 10 #' length(rdd) # Same as count +#'} setGeneric("count", function(rrdd) { standardGeneric("count") }) + +#' @rdname count +#' @aliases count,RRDD-method setMethod("count", signature(rrdd = "RRDD"), function(rrdd) { @@ -105,7 +138,8 @@ setMethod("count", sum(as.integer(vals)) }) -#' Return the number of elements in the RDD. +#' Return the number of elements in the RDD +#' @export #' @rdname count setMethod("length", signature(x = "RRDD"), @@ -125,10 +159,12 @@ setMethod("length", #' @rdname lapply #' @export #' @examples +#'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' multiplyByTwo <- lapply(rdd, function(x) { x * 2 }) #' collect(multiplyByTwo) # 2,4,6... +#'} setMethod("lapply", signature(X = "RRDD", FUN = "function"), function(X, FUN) { @@ -140,8 +176,12 @@ setMethod("lapply", }) #' @rdname lapply +#' @export setGeneric("map", function(X, FUN) { standardGeneric("map") }) + +#' @rdname lapply +#' @aliases map,RRDD,function-method setMethod("map", signature(X = "RRDD", FUN = "function"), function(X, FUN) { @@ -156,14 +196,20 @@ setMethod("map", #' @param X The RRDD to apply the transformation. #' @param FUN the transformation to apply on each element #' @return a new RRDD created by the transformation. +#' @rdname flatMap #' @export #' @examples +#'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) #' collect(multiplyByTwo) # 2,20,4,40,6,60... +#'} setGeneric("flatMap", function(X, FUN) { standardGeneric("flatMap") }) + +#' @rdname flatMap +#' @aliases flatMap,RRDD,function-method setMethod("flatMap", signature(X = "RRDD", FUN = "function"), function(X, FUN) { @@ -175,9 +221,27 @@ setMethod("flatMap", lapplyPartition(X, partitionFunc) }) -# Return a new RDD by applying a function to each partition of this RDD. +#' Apply a function to each partition of an RDD +#' +#' Return a new RDD by applying a function to each partition of this RDD. +#' +#' @param X The RRDD to apply the transformation. +#' @param FUN the transformation to apply on each partition. +#' @return a new RRDD created by the transformation. +#' @rdname lapplyPartition +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' partitionSum <- lapplyPartition(rdd, function(part) { Reduce("+", part) }) +#' collect(partitionSum) # 15, 40 +#'} setGeneric("lapplyPartition", function(X, FUN) { standardGeneric("lapplyPartition") }) + +#' @rdname lapplyPartition +#' @aliases lapplyPartition,RRDD,function-method setMethod("lapplyPartition", signature(X = "RRDD", FUN = "function"), function(X, FUN) { @@ -215,11 +279,17 @@ setMethod("lapplyPartition", #' @param func Commutative and associative function to apply on elements #' of the RRDD. #' @export +#' @rdname reduce #' @examples +#'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' reduce(rdd, "+") # 55 +#'} setGeneric("reduce", function(rrdd, func) { standardGeneric("reduce") }) + +#' @rdname reduce +#' @aliases reduce,RRDD,ANY-method setMethod("reduce", signature(rrdd = "RRDD", func = "ANY"), function(rrdd, func) { @@ -240,12 +310,18 @@ setMethod("reduce", #' #' @param rrdd The RRDD to take elements from #' @param num Number of elements to take +#' @rdname take #' @export #' @examples +#'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' take(rdd, 2L) # list(1, 2) +#'} setGeneric("take", function(rrdd, num) { standardGeneric("take") }) + +#' @rdname take +#' @aliases take,RRDD,numeric-method setMethod("take", signature(rrdd = "RRDD", num = "numeric"), function(rrdd, num) { @@ -272,11 +348,37 @@ setMethod("take", ############ Shuffle Functions ############ -# Return a copy of the RDD partitioned using the specified partitioner +#' Partition an RDD by key +#' +#' This function operates on RDDs where every element is of the form list(K, V). +#' For each element of this RDD, the partitioner is used to compute a hash +#' function and the RDD is partitioned using this hash value. +#' +#' @param rrdd The RRDD to partition. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @param ... Other optional arguments to partitionBy. +#' +#' @param partitionFunc The partition function to use. Uses a default hashCode +#' function if not provided +#' @return An RRDD partitioned using the specified partitioner. +#' @rdname partitionBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- partitionBy(rdd, 2L) +#' collectPartition(parts, 0L) # First partition should contain c(1,2) and c(1,3) +#'} setGeneric("partitionBy", function(rrdd, numPartitions, ...) { standardGeneric("partitionBy") }) + +#' @rdname partitionBy +#' @aliases partitionBy,RRDD,integer-method setMethod("partitionBy", signature(rrdd = "RRDD", numPartitions = "integer"), function(rrdd, numPartitions, partitionFunc = hashCode) { @@ -323,11 +425,34 @@ setMethod("partitionBy", RRDD(r, serialized=TRUE) }) -# Group the values for each key in the RDD into a single sequence. +#' Group values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V). +#' and group values for each key in the RDD into a single sequence. +#' +#' @param rrdd The RRDD to partition. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return An RRDD where each element is list(K, list(V)) +#' @seealso reduceByKey +#' @rdname groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- groupByKey(rdd, 2L) +#' grouped <- collect(parts) +#' grouped[[1]] # Should be a list(1, list(2, 4)) +#'} setGeneric("groupByKey", function(rrdd, numPartitions) { standardGeneric("groupByKey") }) + +#' @rdname groupByKey +#' @aliases groupByKey,RRDD,integer-method setMethod("groupByKey", signature(rrdd = "RRDD", numPartitions = "integer"), function(rrdd, numPartitions) { @@ -359,11 +484,36 @@ setMethod("groupByKey", lapplyPartition(shuffled, groupVals) }) -# Merge the values for each key using an associative reduce function. +#' Merge values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V). +#' and merges the values for each key using an associative reduce function. +#' +#' @param rrdd The RRDD to partition. Should be an RDD where each element is +#' list(K, V). +#' @param combineFunc The associative reduce function to use. +#' @param numPartitions Number of partitions to create. +#' @return An RRDD where each element is list(K, V') where V' is the merged +#' value +#' @rdname reduceByKey +#' @seealso groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- reduceByKey(rdd, "+", 2L) +#' reduced <- collect(parts) +#' reduced[[1]] # Should be a list(1, 6) +#'} setGeneric("reduceByKey", function(rrdd, combineFunc, numPartitions) { standardGeneric("reduceByKey") }) + +#' @rdname reduceByKey +#' @aliases reduceByKey,RRDD,integer-method setMethod("reduceByKey", signature(rrdd = "RRDD", combineFunc = "ANY", numPartitions = "integer"), function(rrdd, combineFunc, numPartitions) { diff --git a/pkg/R/context.R b/pkg/R/context.R index 4ff58f5d858f3..3ab5c06eba042 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -7,7 +7,7 @@ #' RDD of strings from it. #' #' @param sc SparkContext to use -#' @param name Path of file to read +#' @param path Path of file to read #' @param minSplits Minimum number of splits to be created. If NULL, the default #' value is chosen based on available parallelism. #' @return RRDD where each item is of type \code{character} @@ -41,10 +41,12 @@ textFile <- function(sc, path, minSplits = NULL) { #' @return an RRDD created from this collection #' @export #' @examples +#'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10, 2) #' # The RDD should contain 10 elements #' length(rdd) +#'} parallelize <- function(sc, coll, numSlices = 1) { # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index f32a292de3a21..3889b02cfdf49 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -18,7 +18,9 @@ sparkR.onLoad <- function(libname, pkgname) { #' @param sparkHome Spark Home directory #' @export #' @examples +#'\dontrun{ #' sparkR.init("local[2]", "SparkR", "/home/spark") +#'} sparkR.init <- function( master = "local", diff --git a/pkg/R/utils.R b/pkg/R/utils.R index a68eac3d9e2f9..c5ed14a86483f 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -138,8 +138,21 @@ mult31AndAdd <- function(val, addVal) { vec) } -# Java-style function to compute the hashCode for the given object. Returns -# an integer value. +#' Compute the hashCode of an object +#' +#' Java-style function to compute the hashCode for the given object. Returns +#' an integer value. +#' +#' @details +#' This only works for integer, numeric and character types right now. +#' +#' @param key the object to be hashed +#' @return the hash code as an integer +#' @export +#' @examples +#' hashCode(1L) # 1 +#' hashCode(1.0) # 1072693248 +#' hashCode("1") # 49 hashCode <- function(key) { if (class(key) == "integer") { as.integer(key[[1]]) diff --git a/pkg/man/RRDD.Rd b/pkg/man/RRDD.Rd new file mode 100644 index 0000000000000..47400098dac32 --- /dev/null +++ b/pkg/man/RRDD.Rd @@ -0,0 +1,22 @@ +\docType{class} +\name{RRDD-class} +\alias{RRDD} +\alias{RRDD-class} +\title{S4 class that represents an RDD} +\usage{ +RRDD(jrdd, serialized = TRUE) +} +\arguments{ + \item{jrdd}{Java object reference to the backing JavaRDD} + + \item{serialized}{TRUE if the JavaRDD contains serialized + R objects} +} +\description{ +RRDD can be created using functions like +\code{parallelize}, \code{textFile} etc. +} +\seealso{ +parallelize, textFile +} + diff --git a/pkg/man/cache.Rd b/pkg/man/cache-methods.Rd similarity index 76% rename from pkg/man/cache.Rd rename to pkg/man/cache-methods.Rd index 490f8711bd2a2..0e2ec4daed8f6 100644 --- a/pkg/man/cache.Rd +++ b/pkg/man/cache-methods.Rd @@ -1,8 +1,12 @@ +\docType{methods} \name{cache} \alias{cache} +\alias{cache,RRDD-method} \title{Persist an RDD} \usage{ cache(rrdd) + +\S4method{cache}{RRDD}(rrdd) } \arguments{ \item{rrdd}{The RRDD to cache} @@ -12,8 +16,10 @@ Persist this RDD with the default storage level (MEMORY_ONLY). } \examples{ +\dontrun{ sc <- sparkR.init() rrdd <- parallelize(sc, 1:10, 2L) cache(rrdd) } +} diff --git a/pkg/man/collect.Rd b/pkg/man/collect-methods.Rd similarity index 60% rename from pkg/man/collect.Rd rename to pkg/man/collect-methods.Rd index 4809ea29579d7..7542439217660 100644 --- a/pkg/man/collect.Rd +++ b/pkg/man/collect-methods.Rd @@ -1,20 +1,32 @@ +\docType{methods} \name{collect} \alias{collect} +\alias{collect,RRDD-method} \alias{collectPartition} +\alias{collectPartition,RRDD,integer-method} +\alias{collectPartition,integer,RRDD-method} \title{Collect elements of an RDD} \usage{ collect(rrdd, ...) +\S4method{collect}{RRDD}(rrdd, flatten = TRUE) + collectPartition(rrdd, partitionId) + +\S4method{collectPartition}{RRDD,integer}(rrdd, partitionId) } \arguments{ \item{rrdd}{The RRDD to collect} + \item{...}{Other optional arguments to collect} + + \item{flatten}{FALSE if the list should not flattened} + \item{partitionId}{the partition to collect (starts from 0)} } \value{ -a list containing elements in the RRDD. +a list containing elements in the RRDD } \description{ \code{collect} returns a list that contains all of the @@ -24,9 +36,11 @@ elements in this RRDD. the elements in the specified partition of the RDD. } \examples{ +\dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10, 2L) collect(rdd) # list from 1 to 10 collectPartition(rdd, 0L) # list from 1 to 5 } +} diff --git a/pkg/man/count.Rd b/pkg/man/count.Rd index e4da2d8af4417..9ab6392b5bd41 100644 --- a/pkg/man/count.Rd +++ b/pkg/man/count.Rd @@ -1,11 +1,14 @@ \docType{methods} \name{count} \alias{count} +\alias{count,RRDD-method} \alias{length,RRDD-method} \title{Return the number of elements in the RDD.} \usage{ count(rrdd) +\S4method{count}{RRDD}(rrdd) + \S4method{length}{RRDD}(x) } \arguments{ @@ -20,12 +23,14 @@ number of elements in the RRDD. \description{ Return the number of elements in the RDD. -Return the number of elements in the RDD. +Return the number of elements in the RDD } \examples{ +\dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10) count(rdd) # 10 length(rdd) # Same as count } +} diff --git a/pkg/man/flatMap.Rd b/pkg/man/flatMap.Rd index 1e2a143d3c5ed..a98ca0deaef84 100644 --- a/pkg/man/flatMap.Rd +++ b/pkg/man/flatMap.Rd @@ -1,8 +1,12 @@ +\docType{methods} \name{flatMap} \alias{flatMap} +\alias{flatMap,RRDD,function-method} \title{Flatten results after apply a function to all elements} \usage{ flatMap(X, FUN) + +\S4method{flatMap}{RRDD,function}(X, FUN) } \arguments{ \item{X}{The RRDD to apply the transformation.} @@ -18,9 +22,11 @@ to all elements of this RDD, and then flattening the results. } \examples{ +\dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10) multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) collect(multiplyByTwo) # 2,20,4,40,6,60... } +} diff --git a/pkg/man/groupByKey.Rd b/pkg/man/groupByKey.Rd new file mode 100644 index 0000000000000..13938377b5e50 --- /dev/null +++ b/pkg/man/groupByKey.Rd @@ -0,0 +1,38 @@ +\docType{methods} +\name{groupByKey} +\alias{groupByKey} +\alias{groupByKey,RRDD,integer-method} +\title{Group values by key} +\usage{ +groupByKey(rrdd, numPartitions) + +\S4method{groupByKey}{RRDD,integer}(rrdd, numPartitions) +} +\arguments{ + \item{rrdd}{The RRDD to partition. Should be an RDD where + each element is list(K, V).} + + \item{numPartitions}{Number of partitions to create.} +} +\value{ +An RRDD where each element is list(K, list(V)) +} +\description{ +This function operates on RDDs where every element is of +the form list(K, V). and group values for each key in the +RDD into a single sequence. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +rdd <- parallelize(sc, pairs) +parts <- groupByKey(rdd, 2L) +grouped <- collect(parts) +grouped[[1]] # Should be a list(1, list(2, 4)) +} +} +\seealso{ +reduceByKey +} + diff --git a/pkg/man/hashCode.Rd b/pkg/man/hashCode.Rd new file mode 100644 index 0000000000000..d2dcd2090bc4f --- /dev/null +++ b/pkg/man/hashCode.Rd @@ -0,0 +1,26 @@ +\name{hashCode} +\alias{hashCode} +\title{Compute the hashCode of an object} +\usage{ +hashCode(key) +} +\arguments{ + \item{key}{the object to be hashed} +} +\value{ +the hash code as an integer +} +\description{ +Java-style function to compute the hashCode for the given +object. Returns an integer value. +} +\details{ +This only works for integer, numeric and character types +right now. +} +\examples{ +hashCode(1L) # 1 +hashCode(1.0) # 1072693248 +hashCode("1") # 49 +} + diff --git a/pkg/man/lapply.Rd b/pkg/man/lapply.Rd index 2c8240be5a167..e5168c925023c 100644 --- a/pkg/man/lapply.Rd +++ b/pkg/man/lapply.Rd @@ -2,11 +2,14 @@ \name{lapply,RRDD,function-method} \alias{lapply,RRDD,function-method} \alias{map} +\alias{map,RRDD,function-method} \title{Apply a function to all elements} \usage{ \S4method{lapply}{RRDD,function}(X, FUN) map(X, FUN) + +\S4method{map}{RRDD,function}(X, FUN) } \arguments{ \item{X}{The RRDD to apply the transformation.} @@ -21,9 +24,11 @@ This function creates a new RRDD by applying the given transformation to all elements of the given RDD } \examples{ +\dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10) multiplyByTwo <- lapply(rdd, function(x) { x * 2 }) collect(multiplyByTwo) # 2,4,6... } +} diff --git a/pkg/man/lapplyPartition.Rd b/pkg/man/lapplyPartition.Rd new file mode 100644 index 0000000000000..7dafd0e38feb9 --- /dev/null +++ b/pkg/man/lapplyPartition.Rd @@ -0,0 +1,32 @@ +\docType{methods} +\name{lapplyPartition} +\alias{lapplyPartition} +\alias{lapplyPartition,RRDD,function-method} +\title{Apply a function to each partition of an RDD} +\usage{ +lapplyPartition(X, FUN) + +\S4method{lapplyPartition}{RRDD,function}(X, FUN) +} +\arguments{ + \item{X}{The RRDD to apply the transformation.} + + \item{FUN}{the transformation to apply on each + partition.} +} +\value{ +a new RRDD created by the transformation. +} +\description{ +Return a new RDD by applying a function to each partition +of this RDD. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +partitionSum <- lapplyPartition(rdd, function(part) { Reduce("+", part) }) +collect(partitionSum) # 15, 40 +} +} + diff --git a/pkg/man/parallelize.Rd b/pkg/man/parallelize.Rd index 70ead5667796c..8f9c196e4faa1 100644 --- a/pkg/man/parallelize.Rd +++ b/pkg/man/parallelize.Rd @@ -22,9 +22,11 @@ in R. The elements in the list are split into cluster. } \examples{ +\dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10, 2) # The RDD should contain 10 elements length(rdd) } +} diff --git a/pkg/man/partitionBy.Rd b/pkg/man/partitionBy.Rd new file mode 100644 index 0000000000000..b6395b6368d61 --- /dev/null +++ b/pkg/man/partitionBy.Rd @@ -0,0 +1,41 @@ +\docType{methods} +\name{partitionBy} +\alias{partitionBy} +\alias{partitionBy,RRDD,integer-method} +\title{Partition an RDD by key} +\usage{ +partitionBy(rrdd, numPartitions, ...) + +\S4method{partitionBy}{RRDD,integer}(rrdd, numPartitions, + partitionFunc = hashCode) +} +\arguments{ + \item{rrdd}{The RRDD to partition. Should be an RDD where + each element is list(K, V).} + + \item{numPartitions}{Number of partitions to create.} + + \item{...}{Other optional arguments to partitionBy.} + + \item{partitionFunc}{The partition function to use. Uses + a default hashCode function if not provided} +} +\value{ +An RRDD partitioned using the specified partitioner. +} +\description{ +This function operates on RDDs where every element is of +the form list(K, V). For each element of this RDD, the +partitioner is used to compute a hash function and the RDD +is partitioned using this hash value. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +rdd <- parallelize(sc, pairs) +parts <- partitionBy(rdd, 2L) +collectPartition(parts, 0L) # First partition should contain c(1,2) and c(1,3) +} +} + diff --git a/pkg/man/reduce.Rd b/pkg/man/reduce.Rd index 86cb70adf68f6..ece7376bcfe4c 100644 --- a/pkg/man/reduce.Rd +++ b/pkg/man/reduce.Rd @@ -1,8 +1,13 @@ +\docType{methods} \name{reduce} \alias{reduce} +\alias{reduce,RRDD,ANY-method} +\alias{reduce,RRDD-method} \title{Reduce across elements of an RDD.} \usage{ reduce(rrdd, func) + +\S4method{reduce}{RRDD}(rrdd, func) } \arguments{ \item{rrdd}{The RRDD to reduce} @@ -15,8 +20,10 @@ This function reduces the elements of this RDD using the specified commutative and associative binary operator. } \examples{ +\dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10) reduce(rdd, "+") # 55 } +} diff --git a/pkg/man/reduceByKey.Rd b/pkg/man/reduceByKey.Rd new file mode 100644 index 0000000000000..d54bcb1a782ff --- /dev/null +++ b/pkg/man/reduceByKey.Rd @@ -0,0 +1,43 @@ +\docType{methods} +\name{reduceByKey} +\alias{reduceByKey} +\alias{reduceByKey,RRDD,ANY,integer-method} +\alias{reduceByKey,RRDD,integer-method} +\title{Merge values by key} +\usage{ +reduceByKey(rrdd, combineFunc, numPartitions) + +\S4method{reduceByKey}{RRDD,ANY,integer}(rrdd, combineFunc, numPartitions) +} +\arguments{ + \item{rrdd}{The RRDD to partition. Should be an RDD where + each element is list(K, V).} + + \item{combineFunc}{The associative reduce function to + use.} + + \item{numPartitions}{Number of partitions to create.} +} +\value{ +An RRDD where each element is list(K, V') where V' is the +merged value +} +\description{ +This function operates on RDDs where every element is of +the form list(K, V). and merges the values for each key +using an associative reduce function. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +rdd <- parallelize(sc, pairs) +parts <- reduceByKey(rdd, "+", 2L) +reduced <- collect(parts) +reduced[[1]] # Should be a list(1, 6) +} +} +\seealso{ +groupByKey +} + diff --git a/pkg/man/sparkR.init.Rd b/pkg/man/sparkR.init.Rd index 7347b43b97fc7..cbfa57ed65042 100644 --- a/pkg/man/sparkR.init.Rd +++ b/pkg/man/sparkR.init.Rd @@ -17,6 +17,8 @@ sparkR.init(master = "local", appName = "SparkR", This function initializes a new SparkContext. } \examples{ +\dontrun{ sparkR.init("local[2]", "SparkR", "/home/spark") } +} diff --git a/pkg/man/take.Rd b/pkg/man/take.Rd index 2f826901c3eea..c842d3885c9fb 100644 --- a/pkg/man/take.Rd +++ b/pkg/man/take.Rd @@ -1,8 +1,12 @@ +\docType{methods} \name{take} \alias{take} +\alias{take,RRDD,numeric-method} \title{Take elements from an RDD.} \usage{ take(rrdd, num) + +\S4method{take}{RRDD,numeric}(rrdd, num) } \arguments{ \item{rrdd}{The RRDD to take elements from} @@ -14,8 +18,10 @@ This function takes the first NUM elements in the RRDD and returns them in a list. } \examples{ +\dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10) take(rdd, 2L) # list(1, 2) } +} diff --git a/pkg/man/textFile.Rd b/pkg/man/textFile.Rd index 5efc7feb1330f..02309e720c890 100644 --- a/pkg/man/textFile.Rd +++ b/pkg/man/textFile.Rd @@ -7,7 +7,7 @@ textFile(sc, path, minSplits = NULL) \arguments{ \item{sc}{SparkContext to use} - \item{name}{Path of file to read} + \item{path}{Path of file to read} \item{minSplits}{Minimum number of splits to be created. If NULL, the default value is chosen based on available From 092a4b38f51112e75130ad97487cafd486d1dcf9 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 13 Dec 2013 19:41:05 -0800 Subject: [PATCH 071/687] Add combineByKey, update TODO --- TODO.md | 14 ++---- pkg/NAMESPACE | 3 +- pkg/R/RRDD.R | 94 ++++++++++++++++++++++++++++++++++- pkg/inst/tests/test_shuffle.R | 17 +++++++ pkg/man/combineByKey.Rd | 57 +++++++++++++++++++++ pkg/man/groupByKey.Rd | 2 +- pkg/man/reduceByKey.Rd | 4 +- 7 files changed, 176 insertions(+), 15 deletions(-) create mode 100644 pkg/man/combineByKey.Rd diff --git a/TODO.md b/TODO.md index a2cf39767369b..7a9075cc7bfaa 100644 --- a/TODO.md +++ b/TODO.md @@ -7,12 +7,7 @@ works correctly) 2. utils.R - Check if dependencies are serialized correctly 3. convertJListToRList -## Documentation - -1. Write Rd documentation for RRDD functions, context functions - ## Functions to support - 1. Similar to `stats.py` in Python, add support for mean, median, stdev etc. 2. Broadcast variables. 3. Consider if we need to extend `addPackage` so that any given R file can be sourced in the worker before functions are run. @@ -21,11 +16,12 @@ works correctly) 1. Write hash functions in C and use .Call to call into them 2. Use long-running R worker daemons to avoid forking a process each time. 3. Memoizations of frequently queried vals in RDD, such as numPartitions, count etc. +4. Pipelined RRDD to execute multiple functions with one call. -## Longer term wishlist +## Feature wishlist -1. RRDDs are distributed lists. Extend them to create a distributed data frame. -2. Integration with ML Lib to run ML algorithms from R. +1. Integration with ML Lib to run ML algorithms from R. +2. RRDDs are distributed lists. Extend them to create a distributed data frame. 3. Profile serialization overhead and see if there is anything better we can do. 4. Reduce code duplication between SparkR and PySpark -5. Add more examples (machine learning ?) and some performance benchmarks. +5. Add more machine learning examples and some performance benchmarks. diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 888fe2f364cd8..74e385edab280 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -4,6 +4,7 @@ exportMethods( "cache", "collect", "collectPartition", + "combineByKey", "count", "flatMap", "groupByKey", @@ -19,4 +20,4 @@ exportMethods( # S3 methods exported export("textFile", "parallelize", "hashCode", "includePackage") -exportPattern("^sparkR") +export("sparkR.init") diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index a8ab0760623f4..a9a445ce60a92 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -430,7 +430,7 @@ setMethod("partitionBy", #' This function operates on RDDs where every element is of the form list(K, V). #' and group values for each key in the RDD into a single sequence. #' -#' @param rrdd The RRDD to partition. Should be an RDD where each element is +#' @param rrdd The RRDD to group. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. #' @return An RRDD where each element is list(K, list(V)) @@ -489,7 +489,7 @@ setMethod("groupByKey", #' This function operates on RDDs where every element is of the form list(K, V). #' and merges the values for each key using an associative reduce function. #' -#' @param rrdd The RRDD to partition. Should be an RDD where each element is +#' @param rrdd The RRDD to reduce by key. Should be an RDD where each element is #' list(K, V). #' @param combineFunc The associative reduce function to use. #' @param numPartitions Number of partitions to create. @@ -542,3 +542,93 @@ setMethod("reduceByKey", lapplyPartition(shuffled, reduceVals) }) +#' Combine values by key +#' +#' Generic function to combine the elements for each key using a custom set of +#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], +#' for a "combined type" C. Note that V and C can be different -- for example, one +#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). + +#' Users provide three functions: +#' \itemize{ +#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) +#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - +#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates +#' two lists). +#' } +#' +#' @param rrdd The RRDD to combine. Should be an RDD where each element is +#' list(K, V). +#' @param createCombiner Create a combiner (C) given a value (V) +#' @param mergeValue Merge the given value (V) with an existing combiner (C) +#' @param mergeCombiners Merge two combiners and return a new combiner +#' @param numPartitions Number of partitions to create. +#' @return An RRDD where each element is list(K, C) where C is the combined type +#' +#' @rdname combineByKey +#' @seealso groupByKey, reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) +#' combined <- collect(parts) +#' combined[[1]] # Should be a list(1, 6) +#'} +setGeneric("combineByKey", + function(rrdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + standardGeneric("combineByKey") + }) + +#' @rdname combineByKey +#' @aliases combineByKey,RRDD,ANY,ANY,ANY,integer-method +setMethod("combineByKey", + signature(rrdd = "RRDD", createCombiner = "ANY", mergeValue = "ANY", + mergeCombiners = "ANY", numPartitions = "integer"), + function(rrdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + combineLocally <- function(part) { + combiners <- new.env() + keys <- new.env() + lapply(part, + function(item) { + k <- as.character(item[[1]]) + if (!exists(k, keys)) { + combiners[[k]] <- do.call(createCombiner, + list(item[[2]])) + keys[[k]] <- item[[1]] + } else { + combiners[[k]] <- do.call(mergeValue, + list(combiners[[k]], + item[[2]])) + } + }) + lapply(ls(keys), function(k) { + list(keys[[k]], combiners[[k]]) + }) + } + locallyCombined <- lapplyPartition(rrdd, combineLocally) + shuffled <- partitionBy(locallyCombined, numPartitions) + mergeAfterShuffle <- function(part) { + combiners <- new.env() + keys <- new.env() + lapply(part, + function(item) { + k <- as.character(item[[1]]) + if (!exists(k, combiners)) { + combiners[[k]] <- item[[2]] + keys[[k]] <- item[[1]] + } else { + combiners[[k]] <- do.call(mergeCombiners, + list(combiners[[k]], + item[[2]])) + } + }) + lapply(ls(keys), function(k) { + list(keys[[k]], combiners[[k]]) + }) + } + combined <-lapplyPartition(shuffled, mergeAfterShuffle) + combined + }) diff --git a/pkg/inst/tests/test_shuffle.R b/pkg/inst/tests/test_shuffle.R index 6cad25f7702ff..816e9985946bc 100644 --- a/pkg/inst/tests/test_shuffle.R +++ b/pkg/inst/tests/test_shuffle.R @@ -55,6 +55,23 @@ test_that("reduceByKey for doubles", { expect_equal(actual, expected) }) +test_that("combineByKey for ints", { + reduced <- combineByKey(intRdd, function(x) { x }, "+", "+", 2L) + + actual <- collect(reduced) + + expected <- list(list(2L, 101), list(1L, 199)) + expect_equal(actual, expected) +}) + +test_that("combineByKey for doubles", { + reduced <- combineByKey(doubleRdd, function(x) { x }, "+", "+", 2L) + actual <- collect(reduced) + + expected <- list(list(1.5, 199), list(2.5, 101)) + expect_equal(actual, expected) +}) + test_that("partitionBy() partitions data correctly", { # Partition by magnitude partitionByMagnitude <- function(key) { if (key >= 3) 1 else 0 } diff --git a/pkg/man/combineByKey.Rd b/pkg/man/combineByKey.Rd new file mode 100644 index 0000000000000..0dcfb8e502ebd --- /dev/null +++ b/pkg/man/combineByKey.Rd @@ -0,0 +1,57 @@ +\docType{methods} +\name{combineByKey} +\alias{combineByKey} +\alias{combineByKey,RRDD,ANY,ANY,ANY,integer-method} +\title{Combine values by key} +\usage{ +combineByKey(rrdd, createCombiner, mergeValue, mergeCombiners, numPartitions) + +\S4method{combineByKey}{RRDD,ANY,ANY,ANY,integer}(rrdd, createCombiner, + mergeValue, mergeCombiners, numPartitions) +} +\arguments{ + \item{rrdd}{The RRDD to combine. Should be an RDD where + each element is list(K, V).} + + \item{createCombiner}{Create a combiner (C) given a value + (V)} + + \item{mergeValue}{Merge the given value (V) with an + existing combiner (C)} + + \item{mergeCombiners}{Merge two combiners and return a + new combiner} + + \item{numPartitions}{Number of partitions to create.} +} +\value{ +An RRDD where each element is list(K, C) where C is the +combined type +} +\description{ +Generic function to combine the elements for each key using +a custom set of aggregation functions. Turns an RDD[(K, V)] +into a result of type RDD[(K, C)], for a "combined type" C. +Note that V and C can be different -- for example, one +might group an RDD of type (Int, Int) into an RDD of type +(Int, Seq[Int]). Users provide three functions: \itemize{ +\item createCombiner, which turns a V into a C (e.g., +creates a one-element list) \item mergeValue, to merge a V +into a C (e.g., adds it to the end of a list) - \item +mergeCombiners, to combine two C's into a single one (e.g., +concatentates two lists). } +} +\examples{ +\dontrun{ +sc <- sparkR.init() +pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +rdd <- parallelize(sc, pairs) +parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) +combined <- collect(parts) +combined[[1]] # Should be a list(1, 6) +} +} +\seealso{ +groupByKey, reduceByKey +} + diff --git a/pkg/man/groupByKey.Rd b/pkg/man/groupByKey.Rd index 13938377b5e50..1a1f7b25e8d1b 100644 --- a/pkg/man/groupByKey.Rd +++ b/pkg/man/groupByKey.Rd @@ -9,7 +9,7 @@ groupByKey(rrdd, numPartitions) \S4method{groupByKey}{RRDD,integer}(rrdd, numPartitions) } \arguments{ - \item{rrdd}{The RRDD to partition. Should be an RDD where + \item{rrdd}{The RRDD to group. Should be an RDD where each element is list(K, V).} \item{numPartitions}{Number of partitions to create.} diff --git a/pkg/man/reduceByKey.Rd b/pkg/man/reduceByKey.Rd index d54bcb1a782ff..9c1de0ff0dcaf 100644 --- a/pkg/man/reduceByKey.Rd +++ b/pkg/man/reduceByKey.Rd @@ -10,8 +10,8 @@ reduceByKey(rrdd, combineFunc, numPartitions) \S4method{reduceByKey}{RRDD,ANY,integer}(rrdd, combineFunc, numPartitions) } \arguments{ - \item{rrdd}{The RRDD to partition. Should be an RDD where - each element is list(K, V).} + \item{rrdd}{The RRDD to reduce by key. Should be an RDD + where each element is list(K, V).} \item{combineFunc}{The associative reduce function to use.} From bfecd7b9b40d913a055e8bbc70cc88fd905ececb Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 15 Dec 2013 12:20:07 -0800 Subject: [PATCH 072/687] Scala 2.10 changes 1. Update sparkR script 2. Use classTag instead of classManifest --- pkg/R/RRDD.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index a9a445ce60a92..5d330bdce6eea 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -265,7 +265,7 @@ setMethod("lapplyPartition", X@serialized, depsBinArr, packageNamesArr, - X@jrdd$classManifest()) + X@jrdd$classTag()) jrdd <- rrddRef$asJavaRDD() RRDD(jrdd, TRUE) }) @@ -409,7 +409,7 @@ setMethod("partitionBy", rrdd@serialized, depsBinArr, packageNamesArr, - rrdd@jrdd$classManifest()) + rrdd@jrdd$classTag()) # Create a corresponding partitioner. rPartitioner <- new(J("org.apache.spark.HashPartitioner"), From d4fe086fbce69b71920050ebcbb3fd7be9b80ae9 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Dec 2013 11:13:13 -0800 Subject: [PATCH 073/687] Move collectPartitions to JavaRDDLike Also remove numPartitions in JavaRDD and update R code --- pkg/R/RRDD.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 5d330bdce6eea..98e0d0725e150 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -327,7 +327,8 @@ setMethod("take", function(rrdd, num) { resList <- list() index <- -1 - numPartitions <- .jcall(rrdd@jrdd, "I", "numPartitions") + partitions <- .jcall(rrdd@jrdd, "Ljava/util/List;", "splits") + numPartitions <- .jcall(partitions, "I", "size") while (TRUE) { index <- index + 1 From 48265fdef3b8aedb6f26f260a32d7be30ac2ad36 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 20 Dec 2013 13:51:16 -0800 Subject: [PATCH 074/687] Use new version of collectPartitions in take --- pkg/R/RRDD.R | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 98e0d0725e150..39ab83d781b99 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -329,6 +329,8 @@ setMethod("take", index <- -1 partitions <- .jcall(rrdd@jrdd, "Ljava/util/List;", "splits") numPartitions <- .jcall(partitions, "I", "size") + # TODO(shivaram): Collect more than one partition based on size + # estimates similar to the scala version of `take`. while (TRUE) { index <- index + 1 @@ -336,10 +338,11 @@ setMethod("take", break # a JList of byte arrays - partition <- .jcall(rrdd@jrdd, - "Ljava/util/List;", - "collectPartition", - as.integer(index)) + partitionArr <- .jcall(rrdd@jrdd, + "[Ljava/util/List;", + "collectPartitions", + .jarray(as.integer(index))) + partition <- partitionArr[[1]] elems <- convertJListToRList(partition, flatten = TRUE) # TODO: Check if this append is O(n^2)? resList <- append(resList, head(elems, n = num - length(resList))) From c58f63e99b0d5eeb1b111e72692a4b7356050931 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 20 Dec 2013 13:56:14 -0800 Subject: [PATCH 075/687] Update collectPartition in R and use ClassTag --- RRDD.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/RRDD.scala b/RRDD.scala index 40b9816e1c813..443d805226e08 100644 --- a/RRDD.scala +++ b/RRDD.scala @@ -3,6 +3,8 @@ package org.apache.spark.api.r import java.io._ import scala.io.Source import scala.collection.JavaConversions._ +import scala.reflect.ClassTag + import org.apache.spark._ import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.rdd.RDD @@ -12,7 +14,7 @@ import org.apache.spark.util.Utils * Form an RDD[(Array[Byte], Array[Byte])] from key-value pairs returned from R. * This is used by SparkR's shuffle operations. */ -private class PairwiseRRDD[T: ClassManifest]( +private class PairwiseRRDD[T: ClassTag]( parent: RDD[T], numPartitions: Int, hashFunc: Array[Byte], @@ -81,7 +83,7 @@ private class PairwiseRRDD[T: ClassManifest]( /** * An RDD that stores serialized R objects as Array[Byte]. */ -class RRDD[T: ClassManifest]( +class RRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], dataSerialized: Boolean, From 999bd613ec12da6c363a44f3bc9d99ffefcc4b37 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 20 Dec 2013 13:56:14 -0800 Subject: [PATCH 076/687] Update collectPartition in R and use ClassTag --- pkg/R/RRDD.R | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 39ab83d781b99..63248ff2261ba 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -102,10 +102,12 @@ setGeneric("collectPartition", setMethod("collectPartition", signature(rrdd = "RRDD", partitionId = "integer"), function(rrdd, partitionId) { - jList <- .jcall(rrdd@jrdd, - "Ljava/util/List;", - "collectPartition", - as.integer(partitionId)) + jPartitionsList <- .jcall(rrdd@jrdd, + "[Ljava/util/List;", + "collectPartitions", + .jarray(as.integer(partitionId))) + + jList <- jPartitionsList[[1]] convertJListToRList(jList, flatten = TRUE) }) @@ -339,9 +341,9 @@ setMethod("take", # a JList of byte arrays partitionArr <- .jcall(rrdd@jrdd, - "[Ljava/util/List;", - "collectPartitions", - .jarray(as.integer(index))) + "[Ljava/util/List;", + "collectPartitions", + .jarray(as.integer(index))) partition <- partitionArr[[1]] elems <- convertJListToRList(partition, flatten = TRUE) # TODO: Check if this append is O(n^2)? From 78adcd85a9bb0f43a6dc93a02ed7634701cc95c4 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 21 Dec 2013 13:49:15 -0800 Subject: [PATCH 077/687] Add a gitignore --- .gitignore | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000..ec29e51eca2c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.class + +# Package Files # +*.jar +*.war +*.ear + +.RData +.Rhistory + +target/ +lib/ + From 10c8baa761ebe7e1728c9a3e639dac976c2f152a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 21 Dec 2013 14:20:30 -0800 Subject: [PATCH 078/687] Make SparkR work as a standalone package. Changes include: 1. Adding a new `sbt` project that builds RRDD.scala 2. Change the onLoad functions to load the assembly jar for SparkR 3. Set rLibDir in RRDD.scala and worker.R to load things correctly --- Makefile | 5 +- README.md | 29 +++++++---- RPartitioner.scala | 44 ---------------- build.sbt | 47 ++++++++++++++++++ pkg/R/RRDD.R | 6 ++- pkg/R/context.R | 2 +- pkg/R/sparkR.R | 12 ++--- pkg/inst/worker/worker.R | 16 +++--- project/build.properties | 1 + project/plugins.sbt | 3 ++ sbt/sbt | 22 ++++++++ sbt/sbt-launch-0.11.3-2.jar | Bin 0 -> 1096763 bytes sparkR | 39 +++++++++++++++ src/main/resources/log4j.properties | 11 ++++ .../main/scala/sparkr/RRDD.scala | 37 +++++++------- 15 files changed, 184 insertions(+), 90 deletions(-) delete mode 100644 RPartitioner.scala create mode 100644 build.sbt create mode 100644 project/build.properties create mode 100644 project/plugins.sbt create mode 100755 sbt/sbt create mode 100644 sbt/sbt-launch-0.11.3-2.jar create mode 100755 sparkR create mode 100644 src/main/resources/log4j.properties rename RRDD.scala => src/main/scala/sparkr/RRDD.scala (89%) diff --git a/Makefile b/Makefile index cb14863c44e72..239418f2a364a 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,11 @@ LIB_DIR := $(shell pwd)/lib/ +SCALA_VERSION := 2.10 +JAR_NAME := SparkR-assembly-0.1.jar all: sparkR -SparkR: pkg/R/* +SparkR: pkg/R/* target/scala-$(SCALA_VERSION)/*.jar + cp target/scala-$(SCALA_VERSION)/$(JAR_NAME) pkg/inst/ mkdir -p $(LIB_DIR) R CMD INSTALL --library=$(LIB_DIR) pkg/ diff --git a/README.md b/README.md index d10726e9534bb..ab5b953adc2ed 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,38 @@ # R on Spark +SparkR is an R package that provides a light-weight fronted to use Spark from R. + ## Building -R on Spark requires the R package `rJava` to be installed. To install `rJava`, +### Installing Spark +SparkR requires Scala 2.10 and Spark version >= 0.9.0. As Spark 0.9.0 has not +been released yet, you will need to clone the Spark master branch and +run `sbt/sbt publish-local` to publish 0.9.0-SNAPSHOT. + +### Building SparkR +SparkR requires the R package `rJava` to be installed. To install `rJava`, you can run the following command in R: install.packages("rJava") -To run R on Spark, first build Spark using `sbt/sbt assembly`. Following that -compile the SparkR package by running +To run SparkR, first build the scala package using + + sbt/sbt assembly + +Following that compile the R package by running - make -C R + make -Once you have built Spark and the SparkR package, you can start using by -launching the SparkR shell with +## Running sparkR +Once you have built SparkR, you can start using it by launching the SparkR shell with ./sparkR -SparkR also comes with several sample programs in the `R/examples` directory. +SparkR also comes with several sample programs in the `examples` directory. To run one of them, use `./sparkR `. For example: - ./sparkR R/examples/pi.R local[2] + ./sparkR examples/pi.R local[2] You can also run the unit-tests for SparkR by running - ./sparkR R/pkg/inst/tests/run-all.R + ./sparkR pkg/inst/tests/run-all.R diff --git a/RPartitioner.scala b/RPartitioner.scala deleted file mode 100644 index 2366b66b31449..0000000000000 --- a/RPartitioner.scala +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.spark.api.r - -import org.apache.spark.Partitioner -import java.util.Arrays -import org.apache.spark.util.Utils - -/** - * A [[org.apache.spark.Partitioner]] that performs handling of byte arrays, for use by the R API. - */ -class RPartitioner( - override val numPartitions: Int, - val rPartitionFunctionId: String) - extends Partitioner { - - override def getPartition(key: Any): Int = key match { - case null => 0 - case key: Array[Byte] => Utils.nonNegativeMod(Arrays.hashCode(key), numPartitions) - case _ => Utils.nonNegativeMod(key.hashCode(), numPartitions) - } - - override def equals(other: Any): Boolean = other match { - case h: RPartitioner => - h.numPartitions == numPartitions && h.rPartitionFunctionId == rPartitionFunctionId - case _ => false - } -} - diff --git a/build.sbt b/build.sbt new file mode 100644 index 0000000000000..de03c6757d1ad --- /dev/null +++ b/build.sbt @@ -0,0 +1,47 @@ +import sbt._ +import Process._ +import Keys._ + +import AssemblyKeys._ + +assemblySettings + +name := "SparkR" + +version := "0.1" + +organization := "sparkr" + +scalaVersion := "2.10.3" + +libraryDependencies ++= Seq( + "org.slf4j" % "slf4j-api" % "1.7.2", + "org.slf4j" % "slf4j-log4j12" % "1.7.2", + "org.apache.spark" % "spark-core_2.10" % "0.9.0-incubating-SNAPSHOT" +) + +{ + val defaultHadoopVersion = "1.0.4" + val hadoopVersion = + scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) + libraryDependencies += "org.apache.hadoop" % "hadoop-client" % hadoopVersion +} + +resolvers ++= Seq( + "Typesafe" at "http://repo.typesafe.com/typesafe/releases", + "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", + "Spray" at "http://repo.spray.cc" +) + +mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => + { + case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first + case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first + case "application.conf" => MergeStrategy.concat + case "reference.conf" => MergeStrategy.concat + case "log4j.properties" => MergeStrategy.first + case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard + case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard + case _ => MergeStrategy.first + } +} diff --git a/pkg/R/RRDD.R b/pkg/R/RRDD.R index 63248ff2261ba..6d06a148648b3 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RRDD.R @@ -261,12 +261,13 @@ setMethod("lapplyPartition", depsBin <- getDependencies(computeFunc) depsBinArr <- .jarray(depsBin) - rrddRef <- new(J("org.apache.spark.api.r.RRDD"), + rrddRef <- new(J("sparkr.RRDD"), X@jrdd$rdd(), serializedFuncArr, X@serialized, depsBinArr, packageNamesArr, + as.character(.sparkREnv[["libname"]]), X@jrdd$classTag()) jrdd <- rrddRef$asJavaRDD() RRDD(jrdd, TRUE) @@ -408,13 +409,14 @@ setMethod("partitionBy", # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). - pairwiseRRDD <- new(J("org.apache.spark.api.r.PairwiseRRDD"), + pairwiseRRDD <- new(J("sparkr.PairwiseRRDD"), rrdd@jrdd$rdd(), as.integer(numPartitions), serializedHashFuncBytes, rrdd@serialized, depsBinArr, packageNamesArr, + as.character(.sparkREnv[["libname"]]), rrdd@jrdd$classTag()) # Create a corresponding partitioner. diff --git a/pkg/R/context.R b/pkg/R/context.R index 3ab5c06eba042..437fd5f560c14 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -73,7 +73,7 @@ parallelize <- function(sc, coll, numSlices = 1) { jrddType = "Lorg/apache/spark/api/java/JavaRDD;" - jrdd <- .jcall("org/apache/spark/api/r/RRDD", + jrdd <- .jcall("sparkr/RRDD", jrddType, "createRDDFromArray", sc, diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 3889b02cfdf49..b48f5b426b0be 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -1,12 +1,12 @@ .sparkREnv <- new.env() +assemblyJarName <- "SparkR-assembly-0.1.jar" + sparkR.onLoad <- function(libname, pkgname) { - sparkDir <- strsplit(libname, "/") - classPathScript <- paste(c(sparkDir[[1]][1:(length(sparkDir[[1]]) - 2)], - "/bin/compute-classpath.sh"), collapse="/") - classPath <- system(classPathScript, intern=TRUE) - packageStartupMessage("[SparkR] Initializing with classpath ", classPath, "\n") - .jinit(classpath=classPath) + assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") + packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") + .sparkREnv[["libname"]] <- libname + .jinit(classpath=assemblyJarPath) } #' Initialize a new Spark Context. diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 68a4943a6a757..a01311ffd789e 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -8,20 +8,20 @@ source_local <- function(fname) { source_local("serialize.R") -# Set libPaths to include SparkR package as loadNamespace needs this -# TODO: Figure out if we can avoid this by not loading any objects that require -# SparkR namespace -sparkHome <- Sys.getenv("SPARK_HOME") -.libPaths(c( .libPaths(), paste(sparkHome,"/R/lib", sep=""))) - -suppressPackageStartupMessages(library(SparkR)) - # NOTE: We use "stdin" to get the process stdin instead of the command line inputCon <- file("stdin", open = "rb") outputFileName <- readLines(inputCon, n = 1) outputCon <- file(outputFileName, open="wb") +# Set libPaths to include SparkR package as loadNamespace needs this +# TODO: Figure out if we can avoid this by not loading any objects that require +# SparkR namespace +rLibDir <- readLines(inputCon, n = 1) +.libPaths(c(.libPaths(), rLibDir)) + +suppressPackageStartupMessages(library(SparkR)) + # First read the function; if used for pairwise RRDD, this is the hash function. execLen <- readInt(inputCon) execFunctionName <- unserialize(readRawLen(inputCon, execLen)) diff --git a/project/build.properties b/project/build.properties new file mode 100644 index 0000000000000..5e96e9672a6ca --- /dev/null +++ b/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.12.4 diff --git a/project/plugins.sbt b/project/plugins.sbt new file mode 100644 index 0000000000000..6d31a65f305a3 --- /dev/null +++ b/project/plugins.sbt @@ -0,0 +1,3 @@ +resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" + +addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1") diff --git a/sbt/sbt b/sbt/sbt new file mode 100755 index 0000000000000..d3139881348b2 --- /dev/null +++ b/sbt/sbt @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +export PROJECT_HOME=$(cd "$(dirname $0)/.." 2>&1 >/dev/null ; pwd) + +java -Xmx4000m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=256m $SBT_OPTS -jar "$PROJECT_HOME"/sbt/sbt-launch-*.jar "$@" diff --git a/sbt/sbt-launch-0.11.3-2.jar b/sbt/sbt-launch-0.11.3-2.jar new file mode 100644 index 0000000000000000000000000000000000000000..23e5c3f31149bbf2bddbf1ae8d1fd02aba7910ad GIT binary patch literal 1096763 zcmbrlWo#r35+&GXcDsyiW@cu)&CJZq%nW5_W@cYpiCT)5 zYI<^}fpwmFnR%90lI`G7Qi4XJiIs_gg^7WYg_(hYfr;(#5cHe86cqIOaqR@v-=CrQ zd&>XE2VwoaYv*W2Z(wg=WNt!l;p#yz;p#!cNM~ei;N+C7ysn5MfW!+%f}M&60HN0w z24DSV+7=lUi5w8HOC&7it<_&k6S8T-EP?rf;@1ZinflWrIhOBPA%#~$9^P=MDkJA4 zXJLWY$Mo$jc18~bepdtCO<*IXKq|r)jc_BmKyHY1LkVW9vH*`)@tBHkKL*tRA@Ro?L!biXFzckD-~i4r z3r|4)E+ZuCByj;@hyeoJk9njKAB36WbuuD&Rvj*(Dm-1Pagz{J-mDdNr;>O!+=&&` z?hAE=5L>2>Zj-c}^tJtv>kcv_Kn<+Cv`b5 z*Js0J~CDWCLJS%IwcevU!Nv>!iF zNH-Nel91m+Y-r!J+}aP(iYM_E%syO?r)JpFU$qOvunMM{39eTdK;XcyDN0H4)=~%? z)WdyQi<032`CJ0saV-do&3i3L$=l)biq& zkDnkdd?{G+)!unHN-PJyZ!ns0t=&zx2r@EFfe;%MJEkCN`~5GM-DqS-PYf-U z_(A@OesiiJ*=Eph-}E5`5hM`^01dPVIBFRYsLiU3+djMN!Ro+Un$r4Fki{nDI^3igyA?62a^4y;XD$kk_F<(LkSe| zgWeMEq;)@$;YjPmk&6@5X~Ibp)TzRmB$A{I(@9dK3Jmeki6;e(4C;Rv)rAgmL`G_O zhYTIkboUz4M^>t9Pwi={3B9|$CzrgUmsv{BY~d#q!06*X2^qv&gg~{U9Gk?VTctkiLqz{9e|F1tB>iH z+ECU@_g$6XK!DV((%OM95>8!vbZ-Gq*=R8^`MCh9@<%-u{zD#OA1KXWDQqn?M%}YD zh~*6c^ZO1q4Pq_F>%9R7Mf}WiRXf z@nx$5lQL`KR}HPf7lr9v&i#$5#*gv#oEsG zm$ZkPz190KGO}8~YH7Gq7?`LZK43TayDZHL8ddbH+iDFA^wml}htRkSvC61iJgQsb@iSdk>EJL&6oH2|RYZW3@u1QT`m;4Ra7op!+2J4RP?h!d4ivnvOti+(#V zYzq$B z@S2@HUdG6DEn2P5`Ax?xU*kx|bWjf$Uc4r7a3>g*+44s} zYz|t6KesG&EIXSED^H-}?_K-_D67XGZNpk`!*Z++$*z>(5OW13oRVLaH8it~RN&T2K(JH!3V;BphGKy95TvRx9@Cz)|GeWEiYTVQ5vH{9Gs}lS$P<9KN8mh$^y? zu5=z4c1le&dP=Ze@6zQR{ZoEateabMRZwT^LSz0$5=|jm+H_M7SctN|e@m`iH5Tg% zU+rr|N*f6_k3>EUOI5UBPL>~aEiL$A7+1a3z?cxTP-Vg#(o3{HJMDa z2lrOAZK7yIacv=kl6UQM6HRc%u!HN6+wJ=zsq>Dk15cl|uONZRPOX^7WD~C`h8QSc zrbEz>3B@A%n_mMhW!kGt_WItQil$VFiP9bLFDQrRYzz~$A~htkKdbY2__*^{s~MSqVpa~Na0w-<#R-rE)^Y05eXKsq-Ln6Cs7ph%n5YZ7U{HXOm;Ee z1MQUN4o0RQuGr;bv5drtwn`0f=r&X?vzr|kYrb5Z46=T>xPgJ|&CxMfkQKE*hQ58I z+>XF`Qte-1EdIGZg0+3=@vHn|!fSd(a38i*+o!Co8bVR+fR)p1O}!3Vs_8dU{X*ce zda$}~U6OQ<(fsZQp1=H;a9M5rdjY4kg(+X!P`e#)@5Q@>2`?#+Y=Ye>f+^&2ZMte? z*SeD^wi{XB*y7=S(Ps4TeZp8@@H5A_%`oT&X(x#7lzh7$!S2g-Lw3rvh&oDnCbO@w zgLN_1X9)QNcG3Wmtl1fE7$5lZUOtjT3x7)<%24yR$1&i>F3S-?#H1)9x`i?tvbQpY{Z_&Vi{iq(}IcyM{BPQ#oZ46?Bt}i zkfL}Ft$YsVe#9P!mvt>=d{og5KDtQ5$|@z^R1DrqV!ws8Qk)qnFqh@bddhMBeyBEv zR@MOKfg;81MVoO^uAt%SC-=nbTi>pGuwyd(ysRObFrjwA4~PQr;{M1(Ly*%!qGu6G zSrn;Rs=op`sZfqaNL`tLN_7W$Z}zYN>n)6%9WY}{K8=g)(i+S0f^>6jF&Bj~#MVhP z-CMaQ-6?wE{n?l-zP&7bN=-J0Cl-2zjw)AB8S9x8|Adq0ioE_-lBf~ER3*U8V>w1ii8sr_0m9}+a<6wr@p>d2-x$@47V+L~Bl^`R4l6An zDMO-@KgNmX0mi}mn&BAQjSX)&uD7YIAk@Ir=t5KtOvJm~s{D*W6nyV^^J^InVL9u2 z(M-9-bot5lF;_tH?*jMoGmu{gFAfxM+n&Cv1$2ETE zl?NR#o0i^-8S5IDEICm*+geISw0A4yg=MY^3IS;y1FH@ zoYme?BPh7Ye~&nff26=*-27swLev#uz4%ndvn3^SEavutg?sI~BddKuT9(dF`en^| zM}QSmu#(9iZu1d3TZ{ivbn|DhuCC|9fTlo&&E+|)sp_8FfnVE)ujXJXvhWbeo6oK~ z^?6RP4NW~(#+1cHvN4FhfrpTC-Hkd-68%#-R7@aQS17pgk$i(xCwZ(ESQ z-B2A3^#%2hPR8#6{jmr8?Hd*5f78h%|8JdaWant|Ppc?oXX|X@?)-1fT&$+$gtG+r z98O@pHE&EHo#z+fRGSKl;A(oAXeG5+%Ylv%Q~=)ghbns z*v+;r9vh}D34Ts8s3Ivbv`n!0Hm)cF3NIn_z)s$qmw8PmS~NzfuCm*yMDEG0{q3If z)aNO1`vb36_g!>^-Pv1dq{Z1=YsAgDvuvLfm;UUzI_B!+xjP2m+8_7<3I%?N%0a?F z!$4&}-^+E*JnJ6_iDj}JHUOH-P>a_BbKM|;o^j0xHpOH$+yy!Uaf#Bp-3z%vXCKu3%w)D83qHzM9Cc)AnW#rlHm!I%Wy|eB+D6~M9~{8mG+k4 z>w%vbgmWJq{H>q)%w;OmNd#BZ&wL}4?mp zl~re2<-A2@yg)9StI+I5K*h&-K|w9#a8%!Vet3K0FjH?vu_C>=J>Byw=087$R6|M6=Z>LP9wthVSHlH7j=A8=$-qOMh>$E|$ukh*@>kjBY{wA@ zKK^2DrQ3tUi0V(ZEFufr*mynC!-y_S)&}&NR&G(ot<0FMc2Arp$?n_#nr1G}r(Y9-ea6e+i zPrs)ZzqYAi_qy|y)10iqby+Yk(=Z8#EXOe=OaL03Qk(Uv0+{7E)e&#Tion{B0LV=` z?x@(kWqb4k;emGezEN=1sK^%D%Cg@=+Hd^}!pniUX-qHB?jNbi>+($UVr#l@h}9f& zqZn1PGC$S6JnLyFZaj?3Kck`3)Ohf)kWrTo<%HlMCSq|DDHBk#soSa2eF(GKx$Qxm?EmNJR9m>9mEw&e&{;)WxK`W#va}t91-QXS5 zY$$QV@MFH79=EbmdEk*+&mEyl?M*E}KxcRNPc$v12)zqtfFKnbW~jg~+hujCj)f@U zkO~Guy^*E1io8N9ilujJisW!w*^f51R>g|VOU>ZLgAkKMdo^WnTcER{{)CY@_rNOG ziP3xfMHqkm?;9~T($CT90sPf_`%cJ=d&xnuXBP}Fj_Cd715h^7?Y>tD8xXBOb@6v4 zV-VKaVrQh)R`%hzi;#~fPX)LwhSZ30sa2|@kDzLU9XHgqq)I&^Z#-)z8?Bv#9%rD< z!4tT5$8mK|c-c(NQ-xK3gcI_?+?F{Vpt&7>P(n7~yX`}NZAbb>8TjjvVz`MTC1 zpSnbf%OI-NewZ{mI0gDXsM-$**9V-@4Wva1dnLI?;T|EiGfq~m;)Dc=VOGjLlOdxy z>xteSTqARB?Y8>o7)VNZ$kdCrrrR*t2ar4w0^eSEL-4YSQu!-A+ZN;qW|2Lc!c+FMF?6mbMlYFdLy$bm7j=O#^uD!Rm&me9S z)t2wPqNT$=x=Z0!6Qizj7SXzFfLb}nU4PiirL(Ohz57u&Uxs28Ma zePm)2j{fYuiOu5GV#R_JT9Yk&By}dmsMD&5(nCA<#*Ic{$}W@z)%hfaey%RQ>&T#g8C_|%X`wu5Og$3Z8$3-mjD6|0yG!@DSFpSk|!YSX?h8dka$^# zFGNICKv$&QK95knp%JVyP2yjGT`Wn|VTVUnkr54x+1^{R#(Yhx9<#=j)gd=HHa3u zS#pKUpd$zu*^`8aG+(XX7wsXe+`N|$#)k@vbUlm?W)t~Ug=NP8(-nP)D5bftLLgNJyxEF_hY!a#gLqO+_oE-oo9A#S)961b1Wgk0~g zIY5cCsJ|B%vcOTW3qQwE z0VI=G0r4$53k})jd}H6SQsU7N?as2yGO2lDt2*XK%^A#YUd=}oT-h^@#gSA+P{K11 z-9*i*5Xt2tlUj~!`#yZhP@e5u5+DZEmXXbB=zgnzeW`iROb$UsziX>{x}WfQxode$ zVacvo@Q-+N@u}xThXtHuG$)HYp?4I(;iT%0Ff)seW4liNvPkyPOL}MQzgfEl%317| z;4sfX-7ar=1e96$$7#s>RK;B>=FYtQnuzA^Z*qdz9efkfRktuGE)fkNWxJm)K$xnK z>Ddi`Q#POzSkPTy>cZ>x^KsR@7TM|WSh?oeRSy-WqtCK!3$1nTZ5)i_k4K$Oi=V7B zwyM%}g(;>r8Sa^ls0C_kY`Ri4vTZ5oWx3AD~k2jMnx*M<@dYFnGp6{*)W z@*PRTW`!m4F^fX0JKYyEXWJxR#+=}r(Cc^FZsAU$qBI?9+GbGAV%DbbGqZ8z7!XiK zR3a6lP2tF_)sAHz*zlaNtt6|OqU%^nsq>+pI=;p)%z+bKslDC?&ho|f;+BTaI?)?m zB%l9i+tO&_wLI{4W%sN(3avG%Ms1@yac%66l>#udb&JP(@9JS5uMR|w|laLQ~r1h*1{wlKNWx9n(SpR9gRCwz;Srsr-JcsLo-`U_Vf#M4laI_cB!OcQG>zHV6Z?2(j*~n5y4;S;=9*HQpFFU!GL(qCW{Oly-6D)leTR&PhYvj> zrOw@5b176-ckPgK6&c)-em}U(nx(DR-%j0PxDm@B*Apzb?NHr4V*3gL^9nG!N0FVK z;gIXu0sV-Oy2sus-oC;60DeD~(=O?`27E-vp5QM#7ib^eeErMRn$v0G`}TLF-w5~L z822CB>;GYD{jYZAe`DN#^Xim3jJMWd{8uc^39r;lDl#brOn4$kIL(+VophWNCmCVL zAWV!Au^|EdZ9^e}R5eW~cuJx6Azdww3z!DNnvSK%+m!Y(743%J%guJ%!37w zC>P6Sxq>rLx%BcMU~MRdnKp>*E5TG+`+yM7*ih(uoIoE?BM}RajZXxL31&l19~wa6hVbR#cf2hr>a7E<-u` zTNcvuCjw~?QrfcRF%BRy6{JM37T*C^2} zyVN7USsZs;MU}33qf7Q6qBlSnuF;}P_Rp}gNo(+cn9miW%qGrkzD0A^m{WjmNsnym z8mAjKtSJJB$n@HIj--4Gl&QscPz zuX;H-vS{I73GxS3wq()|s&;FIS4(FFp1(?MC#rcxIacH3wo;^p4SA(=Qb@m(5YM%n zE*FvS!{n6xV6M}+!WLUM4cjV~jwJUyz31cYTrZ0}-_*m1A&+X`a{v7^X}jZ;EwfP7 z$gYSVIhNIpH7%t%)19*Kv}$WkIPJs+%WkI~cxg*)kg=+)-!4#;X|iDJi<*(65tg%H zdB>JHzi^--?tMBM)OIKn@4Mf;tYnX4crQjsf@i54?4+bVmW6ct^oWtN5<#T>Y z!mU`ev2_DPb;3X|z=-hJVTtlkMc0lcZY=oblYkzjkp7_biB5K}_lYihb(|5tD%R$1 z^*SnTtk+>Y=-!@AMGY%0?MRIwE9smte))w@#jTVSAe#LShs{bUnQw^3riYC(CfzC zDpat2$RhfaHKCRF$6hJN`ygFU2Qx<0F#fo}VDZslWD!CiwkuSr;iD|Bki%*`FFfoHYwoowF3`}a~uyF0h1UM^r?K*V#_ z@?PYjcFt-r!CE9^xkRks9E^7#1AQ%d)@XMVoD}Ekg4w1qWWUaqjUa2f^D{E)BdBfn z&=$cDs9@spVlL+f$?P}wAsCOWwAM7_*L(1Q8|D+G zzPp2r@C;I(Y^5{G&K@}n7J@7hP;!sc6IEwd(z@5(62XjZCh@#iFVe$+dv2djiiEm1 zFXA?IuB#8)N;?=_XN_Zd_2}TqTpGmZe_uxLnGb6k-tV-ucx25kKXF-me7fPHid}m+ z_K#PM=WX`>x{?@#dQEd_+1fU|l--@ed~2??t0b=LvKCh(4J~5Y(!sn!L3t=^W!ESt zr+(Y}DA``oak_I)G!(;&<)2u{MTIDxG$8mNE!gsrGYyuVh^9j!~0oS zbs}TqI*_pgbM8HJtdE83c&vuJd;G=hm91s${gUS=TchM;rX{NS)}3;tEfw-(lQq6U zONj=Rk{D`ZfzAr?cd49!rmLE&T+O`RE@16}&yzxTNw;14pDjMROxOt<)&-5o*m9cm z-<4vz3wYt_$z^5q)0Czc*vH$n^k9lG$R}%)E}YDkQIa~c2e5HX{En=0)E{6S^OR>h z3Vuup2bM!-W(OvfsK(WLCd4ESiqQs4l#?tbK}nm$N|7>_uh3kH4lgJH9^)%{#ynnZ zRT2#wXcuSEhA=4xgx}yyNA+giS%f~rhG!_Hy--GeK7aSkoRHfqonjACnfduyaStU5 z#SFry4*1DvGtgta5;!}V?!o5=t9EPm{fp@R%q4s1>j>qBLsBdcfBK|86OJX*(>Hx? zKNvyeo#yF9C^OW775}?oxz3B?x=gvANfEkfk))5W(y$y5l!;L3kDe2@^aSeLdvNNk z%%h&!3i}PD&AT?AZ6MGLn4Zv3 z$GNcbs9Kl(C_eZ?Knh4wUKXaW3u^Z)5*?x?-Uy@it^<4^v(b+?=ssk*F^0V$u-2cV zS(ADKHWcbyQC&>hsIV!?P)h1f&`LZeIrl5=%)ur4>0(B(%(|rQkP)+t&s!M0vKqZF zey#q0GA{TLmqY?><9^j(>t3yjK?d}OQWO2dwM6a?JCSW zgjM$&IkV%H#_k*4qvqtHxF`5VlybOnUq?z`Lbf7}*5#gZN1zdYAsLF*r8zmQ1Dub@ zuNF!UdQ3<#j7g-tKf^_GcD=89ttVByaDoDdKU^Vs9#Pi>A1V$RS#U&LD0WoAD4mP! z$B>#s0*3lOK;XDy3aFA44lBfWiR2t$F-mGppb=&=CD*ulB61^T+~f@));WWQtR>9k z%Xgot=#~zp4YDUr4clBOgE)qSY|lWF?wny$U7>9`&#_nCKpTF9u5gO2K#6ho&J=*o z7*OSmNb|`hyMx@_5OIH6X^-|y3-E`C;*5wQTEKOOXS;`k`2{TOuH$@O?GSon#O|2j z^iw~BcaLE8%&htP*X)H(z7Xepz=Rg_V$T*}tc;jwYlRe-*z;%!W$HA9#@AkhfOT(^3o+cM~ zHkEa^mTf60UpaI0E+6IOsqw0|IK7k-d>z9;R<1IW0DzXCI%7S!@7#So6KNx-s))VZ zTu}=gQMNIX4HNyuy0-<=JWiBG$;Bp{0&B#36Y!T|{-S^=89h3Waw5K^t}4oJ#! z60ntl#q~oTIrBz4hFSeF`-+RzU{aQgI5`cM zU-txP5^YrMeG<*bOraDgCzNZ)0g4hbmxre02sv4_iVb2{7NR+B$(=76Mn_f$42LoE z>*_<#RKLe^9fsaH(eFr&!1ORRU*?eyxsnF$>{)#yt!}tC{C~G)boY(?d1}qJ6L8z5 zt&Z{A5qd!E4t7hwHG794fBEv-Naw8jfi?_VufWS$2Fz-VXIYabEmGoixsm=ZQ%uoz z!go6>kRcE|FYTFSx{$~cs$1}K&!jRJYXQZPlff z=Z@WbqkwcOy#34#hpcHrjkt(;@*ztpL z>>8wNf$(ZhUD1irre7UkHpQ-sahNVn8y=|CFZQWjV5KOwV$7}{ux`)!@CCCx2~-zl zClY5jpxum8ZHLHqrrtiX9e8l&wk_ngXWtC>I-%nce%i5U{~j7{hj{;u+gp`R_ackk zFf=|{(G1G3i*<)jQJ8VMGof~v}*M|+LZL}JK)W9!Y6fWhw9$T{GM$6 ziEZN^k>{T7&n$laE#;(d=wccsh;nNZaqIgX$BYScZr{6I!kvaSn9>$2zwOqm-9IBm zizy+CaKvxlWQqP;gZrQSIB7dGIeTXdJ6orJx3xlGuN4{r zr8(6)T~Rzs2u@V1vV83UEG$r)E-RUfVjIuqtF!?MXP+Z=f*Q9PaK!uEu4=TP7>k+n zn`oBJ!)#7OK?_YFbDD_l&J2v({TEA}$Ialw=CSfmPB=2fJcG9GPW6o#V|R;K9@WNe zHY;Pck5*cFOvp%knwiZs1@hZ9U3b6-E~WzY?4&kiVL47i>eJrv;3#DLkGcL^zs+1R}vvV#lUKdV*yFQKJOm9ra7ZhccXu z?-7VE@@y&qFIn(rKiy*XH)oi(wRQZyVDiE|uu<5^Y@}Dyni==~^GANx0QsO`S`lgP zxyAR=BLO_@3P*3?-kViAEJc~M)AYowds!V)4)XvhaEMq=SqLSnDE3PJA!e#%XXs@NDdz*Z% zdNH^LbNEuO@dQEzEjx@j;>GbYQi)dOnR@Rs1oMxI^8Qx&5k4GUCdP(Z{7!6EJYl)Y z2Eb`7qbQtAzncz=6(QxC^dlOXdC&M0S*}~5FOE=p$Z*)u^j7%+<@Cspi6wN~Q6O&gA?cftJV(yAfEtoQx`N{zF>@_sWYYfBTr>mJRLViC%I z-@Zi@il(?7@07#?)7k#7HQ%PreBHXganSo;vytvU#DdYkcHaM&-SThy<==^ztfHfY zt@6V+1-w2eIPP#jaSfSzEiPzyxkhzOQ&Or}1`M_lBC=j0rIvKc&~;(Y+^n;%kU1tM zhO1!uei)s;brut3WSYY>kol8h7->ich>v>SuvPl^t+ zz;5ro(^7mxzgAQFN+fSgOsVaug;&|~QrljCfNtJEwWl)|zamtPOc|Lz=C)BUQ#J_H z08B$%wAF;Br$Q`t%XWC_Q~;hF_o;m!8+v0SuP#Hq=+^Fb*-Vd#X#^*4&RmsqpL+9D ze++Hnn$tI!!msrY>yO9#5VNmBY~9O*MI5*j>JSsHQqsmDK^%B5V+A?-6HHKA@X1C~ zY||Xg1xjMO6*H21TVU541 zb2aT=-xE#i;+Dk_3=T47b!B7pq$K0qab(tR>vLwr<5<}n!AWT?#WP&%(m2OqW3IC&-)>8qlRqCPG~Lnx5Lw8h|0J*?QxdZlgApG$Ds7 za*hzn6|#bEA3}y?Z6kLHPTUf~Ph4`1_0H>K87CSl$>Yr$(*ksVQZJJ#%=PLNU3pA0 zT)jOx3s-+>w?`UvroVS$c9|nR!K)$cr8sPLI%Yiu1-2AGQNj!KLs)*8AHd4v<-3sW zDPXtQAB&yhIFFN=)#Rf8zOJ_d6p{m7MVkTg*u?xon}aBo=J(ZJ%at?(F^3Yr9ebPL z=N0o0doqS7JQ~_fQCRM7aU-nrsrNR25>&8#1au25iD7cq0v|_rAQy98J8=SH9g|ea zJ%;pz{iBcje>^sT_;eNpTF*IEKLvV6rWM3Jo(h+UXB*pDm0P+b{t@@d<}cB-tj%bb zKIO@AD-YGs4P1#7W=Gnf?Z3)nn<*9lblwaCTY{;HdqtmKY`rx3U7^z>_S5g>bYu=t^D4g|Bju_Uc9jMC~&h6V5zkeATRW>x-Cg9(`!NUBvV#e}c2~6l8 z8WXm2v$eJ}F#g~4U$&x-RKGr|uWspdZ1ST)i75fvBpTgu{qgX%t~ovSVvs0ZD!M>5&1C94FW5w}+1#n4KRYfOVoOJCXZnQ0H zk`ancTo5~$JmF^lhR>Zar;O*$bPO>L^-AP|oU^wg=DB!MlbJd#i&jlN!xNg!T2@JU z)7op_z@{eO)DTNL{u8Au7{=G`j5N18CI(%q_LEH}ovT`k@+yqNI;@rmp0E>nuvXL+ z4RjU0e?<^Squ-mK2xIK+AnZ2edLjuKp_gZfJ8rnxtB=IL4Cj^CbSV5A-Mo57l3BcV z9xcz;Je`7e?|7CgP&9X8i~IsikS&0;$oF5+GCDi?c>JwR#9;r2(8`!N8yFin8~pFk zCfUd>$fJ(T1lw$i#xvrf0_5XX(bNUx<>4WR-J1x<$ih2kwVSyr3Q2AHp0mC4hld6+ ze82H0-S|!56;%n0COCP`@P2LcK4l%gzkckK18C>lg{6>rlgv2!negl}g@Nh!?;zQX~LmQkdzE&T^0_P;!(5=E7s>+c(VBtgRZqn`tWZ zot(1gt|9zZn-Cfh-4Op;7FO>;YO&5!9B*aWEV5@IC+1}Q%ebvBHZ30z0yPPnPv;4<6Tk_=5&`nuF=9^Z*v<`4PO#(gU0N zEa>QQDD-BiV_K})b3f-89yS;Dg*L0N2OxQb@;9YJ9~?g|v!#>ulBt8|GdHIc^Z$xu zdIrgqDy5E!s~>x&A&B2qV(lTWNiPE|;dtw>5B7*t+s z0%PPu8WK^F8M3@XS!UO8v{?76@_%>k`)o1D^9_{ULuAJY%!E{ zrw$2ip{im%8+s551p(s@-kd-;Q~i+jv9wD>K2?)sqpYqcljs)?3a^MK8|o&Ao6}j5 zNYEFf1eFi4Rfrfi53=27M?A;HD)Pw6(PIRvXaiJw6yBYn0C!nR&^m#~JkF4-_xj0; zobiI}94Bq1lo4?P^Y%t@+0O??W=OB#W6!Jmd&$18=+iqTL z0(ijT@)06lup7a+&puem|83$bn1r*m{1t2rQ2#A4`2Q>C37eQ2xL7+Yn%LVpSvcD{ zdi;w7WejW$%>HiD{Lj}HvlGT7!32;(zG4!iG*}`hrldv*!}ZT3Sct?2m6XHwx|mO* zaLJg3%*f)7khX;c06fp%_>$CdQNB9}@Ho@T(Bi8+ygt5z>SLd=MX*V-sm_b{PWuxk z3!z7H{vw>Im9NraEVHDZrNhX#uO?M1WOM_ieIYm=&NnF{cR}OYqc^ubg38^zC&zHgr@KVqU z>5~WSwpxtm!0NRs+C2=3GaP7*r<&d55kC|kyC*fj*}YB<4RR@zNcSxspf%MCCB6VGQ*JoFFz1rwnOBsYL+-`hlR*TY%)ekXIc(B($7r%_i3I53 zoS-@D#}6`drG4%Isvj_8UbjC|Buc~w+64fW;&S`!;+fCJA0W${+Q+nG{Y69b-2b#; zUYFUH8h_~x_+O>B>i+?Xf(AxbF82R)$S#gX|5t(gU%hg+%Ie>DQ&D-NEy#iZ;1Ev; zEl8lmwq*`R4zZGL=-n=4GB`LTBk6b$w3UtTu>1p5AjwqtKG%gbcI42KiYb2%>3Dr+ zIDIKY-M&IaHPpEH-t zq=8`;)$)SrGIvCACgo3YGmq-aaj(^GlNAsT!~bA5-e+-So8AeE27R^38lc2Jif?iN z31p+oI7UWXZv`f@MQ}{klCJAz0cL{tBlGq)7UD6KVd1gsKfYH!G7dyr+k}>8QRmRZ zoiU-Q-~eEs!ks&h?qmyiw=var-;Il?;-mHpFsv{~%dS`a4;vnwA7Fh_6NWA*_!3^^y1A&hpJT>$wsNf=&a{7 z9FGr>khOX|A^)o80+WgA2UnynfgO1RDdr{yY3?}J=iw804*xyM zhVob4)Va=(y59zmd$_8|;qYdA4AY)RNQ1wNbqb{uu2@r z*Lcm&Ibq#BT2a|y9UxiR*>o9N|$X5Z}bXSQ9 z^l97uWujgxp!M{|5~K6Gwn{l>OzqF zxY`~0wqwru^P9JGyT3zj6-IMmivPHr>I+Ts?}|>@!v+;TvBT0b@9OcR@=o2uJC*LA zhj1#s730{--QtIlD&4||QYyYN<9aGDdMck8<9cc@*i?Q>hj!)fHpxAOw{9w*Ipf=E zFHlrp@`w24??%af1-Ei4pXuXYCATvwpTXlj$}ehEUmfFL`L})*1wYaLu2rgv(5obs z6|_*jmKml|#VCpdQ&FinG*XFH7*O{)x{RkSLisg>_ps+=ni z(W$%(qIIauqSdJZVk!0%M0iTVd?MVn0df?3 z5+d)4fF8xc8nik+02JyCw#d6GK#p?HLgZZ*(4#iU9O14Cn4#SB5b4Yd!$7-%5_wku z_$dxbMLahUeHMhJqTNIg>8cFsq1|K<>8cH4N4P5i>?rqaM7*m;KO>yiraz{i_4pcV zsbMz6caFf>P+G%#ZNM*o_FjN{0w_plQ+w4xN08GJz8}?9LTd}{ta-Pl>DYuqSc3t% zVR(M-$bfhH|IEilukTseRc?j>$rab<0;ao~>({Iq03PT}kJb%ffW_W?9r0H9Qal zU@t)s>o1v?^^+91e~v`-NchMDYD+9HkT;HKfKEOuy5j-rM|#Z8+H3Ih)(dP%2!o0`yUcvB4?R*FS6yKQv*CoD22R^}g3-7>z zeu?w~e=>q#01d!nNbFI8bKqp_2524qhyYg*AT9JW68E6_JmVt)um^cJ1ZWS*H7JlC zaJ>sY4jo0XLnbeyABD??6o?R150qy^8iy2I{YioSJO?fc_<3-*dI*k3evJo=y{L`n zmDZ;Rib0wDIBnI5r0Yu0xiAGNr(r?zSbn$9^vb60n{ zT)BZ4(9hxEmgn}oZA%a5HsJ5}ph7TFjROeY3Anb#?CZNn=bxZq^{Y*E z+!BF~VDyS~%7JM2e=2`dyC#O+k;K}U%u)NMR%ZiYkHGsG1sCl%FhgX|2ZV#MCbNeF zdO`Du=SBAtgZoPDV1mvdy90aiSwHE4zdng?Sw8jRYhbvyV50p4YshPXy=dUo3&Q0) z8OIYn3&Q-LN-`WL4&Q)4??^I4A>bf^Zy*_@Qx6&9QK?10NS9cixnY=o#t%tjvD;Es z#;hwsq~F4rU%_Oe*O@H4f7FoObx{t5{|9UD6kX}tZ4Xvlv7J<$?ATVtwr$(CU9oN3 zwq3Dp+yDH|cTSJK=`l9Hveocl_8C*y*oGJQxrzprHRbb#gFXWC5}99nsYFq3+4p+tdPbQP)$@5)`Og; zI=W;|D5{zEVvzRp=8YMVR7^v(w%k<`8Symg)+jA>7NhcAQmW$c$Xp-xD~!}zyu2+d zNuS$hX~4~~+0TR7j%TYVEb87B$PfCZn#m4vLrZcS2{;+4C334WZ2aUBiy_#<^x7lr zuG7&4ulqOh6Y_;~uK6yIxyK)!ys(haT>^#(Tz+$X_}QV^5+Up_W2vGf=WZFZk}~-UEN; z+D;$@thSa%^2L@ptC_n=22l--3=lBD9HVOqApc5+%|JD^iJ-QgbIN?h;MNaU`Rd_3Q8 z!QWf6#7c<}^&;^36A5RYgwJYu3F}_wNhF=n4^7dtvKzCJH|q6|vm)H8ac0?SGQPw} zm|&JQvJqVLfI%B6+%po<gmXk_hND1`$;EUK_Rq}Eh~n?a=^VAwfI z=Pbs}YcpjDX(lhb+{HxaBuST&#-agh!;BsdXsCZ8%K(o|Mr)cEE@PImrrCyCX@R+pV%S` zM7fL=oH1U91qn%j*n=j_R3)O8*j^hU9kAzvqfZ2HU~ZAwhGsn^q{tzuASgrGDcDfs zVyGMP!_UUwArbdE4Qv{sshZ9m#g<{!o`E(4H&uI;A*iMBlcn&p4Zl1I7n#-a7kVr& z6f}~l=YuGzImscEk{&@52R6Y_M&|;o7g;hMW+I!WK#&g9QdL_)l-pnzf(07-kkN6? z2Xbexct?)4H0&O8>qVB>W3Nwr;UAv43HOid{&HIep_8aBgg1r1O0Q@Teja=_E{I8- zYbCV~&rZaMTV-yz2IGM|hfYaBh)80{2sI-pSkghi=0!S>%bMFa7$DJcX?QH+=q~fo zO@4fp1mqZH+e!}%1d1FA$GoPi6ZtK3tc&K!UDVeQI{ zg=hDdOoCDmDi+~FwX(a%jfZjX%sK5(wjD#;H{{<;j4XDw9EDA!P)o;ro8 zZn;fkD<&}>FUt1tZ(VeeqTM6-#CBot4=v5RQc`Db@IR<47Kb|uF>iEFtYJk?N)^a} zW83^RkS9JmOd(mTL(=W8o%}2q=VOFUt_nxf!jI@nLk~DvfjBOGp=AeU;RbAD`QSfl z1y}Vv;T0%YE=sM#jCUnOa)dxSGoz{ZV{#Xr+KGw<@6W{Wshz>3-4 zE*%b+#7agHUlpHsZs}c9Q1W)(E*YNW^~KkwQbY6n31Y;$U!_o45s8k2w2&8I^{NIU z$_m1t9CFL(9ja$H_w@P0vu!KRHQPbdhSom803wkYlM}8Nd(rEP4_->Ifh|N=gL{Lg z-ss@z{kZ>A*F#^)S+2f2?R0k=|BN1dhxRIPtMZAPn+vBnR`{1?0TokM2GdI1fPjZn zVfXCYuU5d&$WmL*bSK|C0@H@HF5E{DNfk&u?-Xb~9?AP}A>-t%g@9ycXd=H9JIBGi zFZhL-y^Jr9Z&U?PaYF0~g!^R$Sa7$4llyDBlnn4*_D&}9)~T{nq}(r6mmWB7)d{WW zBqSEO5VOqA{@vWGS5qrOXVM4tVswJxe9}Z2Z zqN2IJey4W1khzj2Jz)g~R8$H)=bTBsIbk&YIa*=?i*KVqHM~A~>;fIMELTKTq_2_C z8c?J~xAJ7nU?91_&)LA;;wP}#sn7eJ%F@uRVPE7&QKGH4Jh}SbR zq^nQvj-*SgQ?*=HGsqtv7!MbB!X01Y3c}aHA+p#DjTa+N0FqK09k1k0^Ts*r^}qx^ zS{4rZyz(+Ow-_i!%IBT+Z3fj-S0%VB>+>sv5j!{B%O7*Rpp;kIyOCc)4*Ey06=NG8 z1I*C&Dmt63lXrB)YRqL>lin|Y06Z% za-D2VRfFA3>YdAVeT9h;)K}{2%B`v0 zRu9Mhw$cXbFl0z38yjdNd>C=6uyQI0L7m1`F4MckPO~tKZtTwEA)tYIELdorZCH62 z>V+u!d9+!w3Ixk44BR~;gL3BH7FqZS1uVJ9MGSp_)PScq^hQv+#=Q`grFoPf9VoVr zP2M->AAEiFHyuV#E9(4!*(7p?6_1a>nSBFfKQ|RddukjQ? zDNz@KNVhJ!po{^P9%E7EO5MqAIz?k+3LZ>v;WxLTn^+4TLr7F2#WuiC)WZFQH3lFz2lUfpv#kS?C(1W6BPV|?8S z@%sm<$HHJTaF96M)I^NS!&XjerGgwoO96#%=Z3#>an^!ZHIfz_b+DjPxJ3{~24WRW zirx4R(=*hkhP=`QGCqQK9y^nev9=ZxQUK$&I@omcnF{D*tneYal4sa3^SpY1-aPxv zc1b0Z2Y_i635%-lNG)YWs-B@e?jAf-u6D(k#Av8z@dz|{|FtGK79}M{*j+W@Heo-h zN&VX(uX6PJjE6s|y;n~S^W#jb=h3C*m(2AhKxRaV0guNYBg1j=Mk$I zBba3_Mi!>Y;l46tc`EEV8Eo+snQ{j20l#aiCWO5*s@Ip^iDQ9LmF~9k9tO?2$-(bIn=*-C}MhQ*j42OU;>`1xtmOH?e7COAj_A1|-f2 z@5i_fgSS06j&2ZZTc0Q=JUml=Q67*uB3;NMOQrcBMS!Qelw z=(j8oX|fxB$1o1v3c$0edK)~~)=6^sc_>MgCysXllmZz0_t9WXN*lmnQ@{f5J+BX8 z(}{{XxkvKn<#TUk`n9@=({VO{Mh)!31T=?^%da|`ZVQx}1b7JA8 zZRV}Q2!;Ji0G)=tR)lwxgx~>&^XrQUsGa06?nY>Arim-Ol~ThCootn(;*a3YH>K18 z`Ewp;eRt~V%96G6A1J-AXQA|xeNppg((%$ABziNn!w~*z?s3M5l51nP{+~1U;fIC$ z7s_1NEOWf>1=B~I;Pn#bR~=HOy$#${yrJc~*3;tkBtdQ>kh1k%#f1f1hmS=pWa~vL z4)|qnZLIX-0!L*V6_Z4tsusk8iH($hv0$8Ot|$S%OqHT2a=p5)QCliTa|XDyY5A%L zBY(Ptl7inyO?fO6mRP;l*?8N$_(r-(Q}t11=TDu)s1xR#O#&N#&q-s#j4Qj4BF7+q z^rFqlsJXyDV<Npa_&qcAkSn@>ve6^NuGLLF)M*FQ{D4n(-Y02}{nYWs4-g<0a;v=Z z%10a!rWNnC8M=H!J_R6*tLLP~PIKh)sut z;%vWgbQYcS3WERxvJ>6me5`6Q$cY_t8rEE1^`R@yo3H=`%uFF zXwxcrb&A=3eZaaqWvDJZbnA_@6A{^6xtR_{b#eQ2vqM?Gbpb z;aLU-6zCM#4x8o3IdtWxu@P>B@r6h4&lPCF=MR65 z5U7pd=Z64-UNNt>rB??>V9|%;LbrH%3m&r$;?hdFTM^S<*K4o_q7k=;3-OH zCKqNZSey-FsIOI)-$!N$$Kz*Nazfk@%@&9YncK?4B6Ke}danNWt(eri-AHBvW6#Er zAiIT$!0JwQqlX?J2+K0%>b4&)CKpW*e+!P=U;FG)1A?Y_it&y1oktKlP+FI(5JFb1 zJ3sK$D@gC9AY0{4TBZ zPv)OOgt?Y%>sq5bxA#N5gr~eOhn5x1#&zDvYTZH4Ut`fe5~QCYp3f&3tQZDa6Z;08}N_e zZ12X5%L9+$&aQ?YZ5S0$x2nu(!D%(mM3Y8iF5}LoYamaCqElGEjUr@kXWt3p_o@D( zxBj&p$6r4%Mf&0|H!X?i7f9FRg8R5MX2TM4GeM5*8Q1X0EzO1XR{0fTf*Z}og&uOW zwjwh#6RV57&wda+7P(-;mtn;SW1^Qbrraw=1>9Jngl?EjK4KOs(&hP{BPFXB=~h60 zxV>(0c}(n7RJOF&bHqo&i3fq*?~)Rr739UF+R~9*6##~5=|49H=L~+S95Sr;MJl_` z@<$&T$2wY~D)TG*w8X+5`2-X+A$WBX9Nlc;-+e$kT-z!2Du z6RoS#Q+rOq)a7&CS!CO+k0&&#FwTh)>=Wb2X@pI=2?HXfhZ8RcMP~k{rUiZH(l)-f zy@jEH^MGNTMCG`OgG>>X&ZbeJkbHT+kI6dK;blrhq)R#^B9TS`=vjl9W&7oi)C4lN zERE6YEWjLG14#v^po%?Vh)Wm29eK9sSN0x$#Z=h2tZ3AUJvgXU0Q)&FtFk$TL9NZn zC1tO;TOXwy`|JAk(EC`*D(-Ucx+M%`Yv*q5qDI6=csBl!6V!G~S4IHn4Hw3+TLdzj z?<6Z|Z{?0Iz4OQ2as*(3?7cU^m*n0zF`+D}Ahccxno^YOO!$=5EC7@A4GHeiX z9I!lYi{b&cey*fhg3!H%5f~*rJ&WLzO)p&8&aYF{TRN^7t4flw1@WD~fx9_tideVX zz{*&_%&xbNPBWRi4UGa^aP7mT(r!P*L!-#DgDIR2^FLTw6O#31use1}T@Eio_{p?a zcf!~@t`r{yXgw8S!0lY8Q?F{V3m$Q^fcL6&@lMC0u%~}zjHO=tdNZTYqrYxnoMBXM z`szQD;*4(clXO5Etay~XJmm&^`KEm#B-O>}vA?1CpW7hlefcr2B-_%zK~?GcgkY~M z*)qO?UmAV+L)1)5`&3V9l4N5V%Q(8wNmA@u9urHr4Ch?dpw<)Gw{H&3W17iy?IVLv zY~?30vM^-9J8SzAEs_c2SVSK?HrKzajpp2D7}V^nq*A^5MLmh2k+}p6>aD232%+`= z89cYH!AQsyVy9Jw55&g^HQfS{Vvw z=|x1#4nsM#M7ar3NAv*_Krj2<(O2OrAb*q5Bz_xF9S?jg7dQ>vYmw`_)N9LwEqtw@ z%ajdW|H8!I%-^%z5RVge)W(S{b{5 z;*u!xU&Gp_R<>xI5wa~TEX(t2C$>q)GE>@i&mr|L8L$Of1l7F?k#8aS+VHHSN09dw zbAL0$GcuRAM|poFtHvG76Qk5M=P6>IIo)$@WbIafn?3e>Mhpov8RMPy3dOwOp5ye# zj8jMb&HriKUYtxI5l}oJ7b8EPrOfYv6_t0&zXI>euQwS+^f84+K0W8e_lof`&ocEo z_8}{uddyP;iFOeL3roC9;RwM})vHhgeHl@2kO4+G743wEPn}+(qpOmEdqicMK4Moi zxboa->kTrb!8xWgGZg(~`s&W!h?}H2tY)vY3;S_|kxH6Fu*mY$N!dX!Ev>nC^jCUN zfx4zv5s_m-4VJkcIhwLi8m_E+cxi zAGlDk?@Avl*A*tZOik3liL}AJo{%liX0}W={x>O=GP~ZYebYZ^i^eHkf2zA;xCw3R zcVV?=LM|D6wgqK_G~YSwpmzP@IXvp^egQY$J7VPA8d-nmcZTT>#T}+KCh*2=PtzG? zxhr3$em8f9=uX<`_ZiaOU8;wFi8|Nl!VFlI;)>atfPO*SjIlZBf2jmG;E;3$RPR3R zcsk#nJ%hZ1eax*gDSb>^QnnGier6UpKtN)Nl=A=nMPHign%j$1i7dkJ^PW85d6T z-SYx)83GQ~PnPBLly5Z3B<_Z{Tm?_Q^iMC@L5*awdmblc8&wOWhZ)lAshw?1t_Q?a zVc4UzabyTlXn7=~aSnvfX~T8x-p?UH2pj_t@wN+}PS7m_Fe$1+G{>F1f_S&Yt_j9oeal?x~ z!0U1RM9diA4Q_o$R_);p0(`+t?d$Y_f0Aepbo+C@@NV;bGIQaxo%5A@1b)SH_k0ch zI{4C~z5A+Tt?lxJcoRRKo=?*_Y6M^=T00eK!HrlabHc`#J4^^@HT2s&?61-{_leg% zxLpoV2xM0moNn8)!5x`Tjz?jF{sdFZ?bD5g4}pe_MhT)5M+p$Q_umTyDGJ-9!>uN{ zSFviB%Z})u8BDsFm--tUW?7`SXua%@>gd+mRXDW{qH%34LD~vEdSn1oJ7$vw=)Pk6 z!($10sY22`3kQiZk_;lK$~q(U?~AcSFJhY)J%SOX==qJ@zI050H#O z;jm(zJJ<9|}#G>M~+Kfe#DPayPP5_io zpvSrQegPo_E$Qw-OQNo~&gBH{q(y+wE_kuZf>PkyjWJvJ^Jej#5MGg%Db?n|@XD+^ z2zGsx)R5CJ9a+EkseRwicD$~?8k7(7v~L94IfluEq5^W`1bdW?=Dw7WK&(sr5w=XX4sYqvTD|I zE;aQe#3D>adA}d|w}5>zqDV_GSqsGD51tDyaqAtW$V8iZ5oGl0()A@oID*M#*zL}A zi{n96$!E*-OB?zX3^&o_785-=pm}dy3{gv$)GN{e<^4Y+uQ0{cgOG4TQJ(mg4ey6MclnDi2rbX*#)Q9W< zB=w>9jR%?Q`!N&Ww)e2+dcwlpg(`!qRW2Z$HnsX{Vbj+3zVmy^32D9$Bn~lmhPmsH}84MN$ zamuA<@vnQDjxx){BHLsL6^$zCVi~!V;Z}@-tC|6%ooFk}Y|mECcji*jO#*CZ?7w~T zbu%7F$<;9}hd3|_)A`ZpM_c+G?eb`3PNuwmwUf*+F^qz!l48#__baUZF71J~LIM$0 zXX@4&%FWEuI&>iHRySoJh8|^&FoT@eMR)X7>E?+%^iv5YK;cN4sSZx1^6&a#4*=L> zpo|ge`QpF{7-A-jBho3g>7`W!7S=&2kIB{WMF*elt1eRv_j20{h;J%3q`g}qdv?f5)8@ACw>5OuPD;QHv=$VO#zmSi95A964aa*}m4Y#~xPe>v!BLOv5tnXj$LPY_HdI?nS$ar>g40euhS`9?U- zyV~o9aAh$^0BJ@3B&uI=g>11oa~A>W$eb+(it10E3U@6tAEn2XmIj>+X|npkPWXo$ zZ)&hb5SDe;MCreMQq;ZCC7WCo)Qk&%_ERNdD1qjZLP47FA6s2FrZdSmV45SZuD~eN z**O-Iy8+c^5I*z)O9T~6sL~y`El8?qU_{c2k9A_2znXhRRISB%{i$0ID4-Zxu@GT7 zMLhXSex_w9{(GwxpjcH#%v2Onj#aaKaVD4yMbHjEio+ArUp(><&*r%&rx3zNEBP}R zPR-Bn*_v&(FD3s9-cma+i4WyNvfr9Vcl16opQit9!pYjiiGw;lN;#CTPeJh$RI?MZ z;dXfEl#O$+W|T``;ehHE<`(A=^B8kx+fKfcOSL)?f(=40*R#c;=8mp7-h9GO5rFs0 zBqSFT&o`_zU9B=To#%{gwWGdIP{|(akTh9pz90EesS?`};#+E6t9K84XJW*w$cB0v zCO0jSt|tpO9lPhA__zv+8;CvhK#sVFQ>c2u>&&@+N#&fBz#;6UdjXoYsjrzm$1}CL zY}ZxqVwNpeI;C;yoD_HWI9Og^z0>jGc*M;<$^1s5RiAyChS~r+#q@QaJkBdI%gg$x zx7NjJkq@#HXJxAx9t$g)u3Mcjdg=m}0Hmw6#I6+A-uI^z8BX+-NGu$Q2RgcK)19nqll_e*-;{nM#*oU~I>%z&kd3kN+ z+|7em(8dq%b56*>46w9{AbB+iRC^Z1(bnzQJH0k8)WZ>QRebaS9hxBH7i3i;nE;7G zbnE!2mTIQny*UV4G2VA2Z=kD@gX>r>5T4;T8^cg~Ok=mYAY4+FTJV)IetYJ2;VQlK z1N9~)@2SfKotleV$tH=c!C&#bMzmw~D@(VUkC~d&LGKwypjCGQJ!@jDbsN( zH*U9BUCP$GDx>Mo#%_#0e4Bk=k*?L_oX^9zG@n5o={}Urkfc|r!=rBlOm5w55|>Eu zBQ47WYXjB${ky2GDjlSFs5axn17!Bu&%!)3R=1EV5$JloTO(q(&GuQI z;xtLqBl8FK_EDbFS=8Nsun!_`EU#c#CzI0Xcdz+>Mc$=kSb(YQdMVjIdhMSab71ppkc_7wk1vl(o zT_h*`jS!1u@7?>fHsQW1g#yMMRAf^hc_qC#md)YT(3|=r?4J9zuUXiPn|rHEsOt6n zP6D%2UIcU~KKGk-$K>t^}F| zFu#2Gu{jCjo8aeY4%Vbr0duDz{nq8~G94gvIs*$V6M6i@A@tLSu})0Eu^!5&S8#Of zwL4lrkU3dkY?P02DV;D1WOv69$fL6T1^@RTYF!bInsg@Z7%9JCN zb8d?U2~H#8Tvq4MZyLSO_Xs{WkbS&+VNrN&Z85ypw??_l(a8lk_R2f8x92KX8$l?~ zU`~rU4k?6eBo0Xs?x*!F(S^tJ)lT~BYv7i=pAC#3a_mb(b1u`j;eNItQ0~S%S>Wzj z2k2Zm+*^bs`v9?C{I$E4jTl$BKs&9qB50a|;H2`EF9JpmTAq68{(}F9W-EdA!}$H% zj1JB2{|B1ww@%#YA8G&pUFh&Hnr)+!+qZHV1H56V0_N`hUbUSDUc{o zZwi9`L=*05THV^jCCe-GJ8@blhSd8HZ@^yqhI}rS@F(5mr}5#WN4JZVw$JD5BS;UM zvQlJuOWAI2xEt!UB2|g199=$s^>(a38B`WUiW1!t7%n<7j2K1|T^`?{Z!k^9e9oY) zb{{INh^?9cD~)&yv7YQObEG)Nyd63w?vt&=F!3Bm5wWC%YvdXS6cQQ<6;bgX`y9;h zd_J_zMVpn9RkMC2c%L05GR(!vY%+}3$@A1r1(|fBjOdDNgk^W*-?0MZ{Wn3zogr}a z{Yzp0S3gkBEKHvF_?54C;v{R1&h4;pqowmXY-{$1C*@J(_0{_^y~HV_a)b+I*Nq$8 z=}gM2=?EiC4*M&Xa+p%FVJH7L$0-k^DZ1xSn`J#_)txRCSP;Sy30|G5b?jH+w=t5$4j5|pNU zTp_t)P4lduhr6;PzJJj!q*fnhti=>9mu`r>g6E0NR1=R*uL{eHHi9}`#{0_c5ZTsk z%yGh)cKc?D3U?Wf+ZhdxKjN3VX(U_M5#qRmf*<>1I3B*1kcfY2|gsuv3$FNhoE z9p5b!FoxipxJHOwT37|YnSKgQC@N=3rYMZ&5_g4naVu8HN$<&(O&Lv-#% z!OIKHEtW7xg7S>%OKH;qshP!vFM6}^8Tc>&TjuLsVY!&FUn*t*XTKc)#|-H(2J8w8 z`)FR`p;iM=^c2*|>~G=@>0$_ClZGs&X1jGJd5vSns3~fUqS@M@O&P~Q+xQy1%s@7*E&`vtBq^OYz@D;Ar6Nn5MQpVv$D2?Nnem8J({_-FP9FPQAyri^_02D*)N^%Fw zm`*e?GV(g|xo#QBTJNm51UpT7-h7*L=&2c(w61z#&X0s@Hl=4crzmR=hBdaw+92B~ zU=6Z9h_Jw+9Y`JIT&X~0xlZC8ra>ymc~0Z4+)ArGP`gL$NPHqzD^ML8ad=RZo4=>9Vy{=XHNl4cH$M%Mo$ zQ%Q_zm+q%S365EtvrSZ8Mo@sz?I95a`U?q3FI1*T>^#f^szMqqok6%6P^`BN&y68Wc?=bFI`nX)1(>uss}gE8?87+Y1$abEZ(~R_eoNRH zx})}pZw~rxD-ex(hhI<%?<^z+21oGGPC2CH7}&n>tT6+7#V$ZwQTOhJ55;ic-(Wa; za=bRO$bxBnm%Nst+F-eL^blUUK|XZ;345$#6(Z)hhKTn+YKVmYW7wtsYfYY@k%NJ~ zneDd{Ov=dWf8=1q|J5sntR3y${?#c971qp=3=jWEred2I1NW9~>+Ivb=IEk$UW2>??6S%4b0HTNlN+a3OsX5Ftv>#d zP5P2vnza<}GzD{Fv5b%O%i5~(2|)x@<@-v2SLtu|aFl_w*lzrWU4mI3q!8%ZbRD-< z-GVjR+C^-J=(7(Y8iy;aIk#Me%>0WyEo3RdD$c)x=nW9DYE&M-7Wy+HS5B|cH$9T% z(3cfwLH}I8_66ed73tM|$beQy88-m?YDWg6IVd~4k#>siX0`>ZPdUa`Tv9p2)9>t6 zwzMTyh@0HTV+3dr5TTp6YV&hVeB~zCy3P_wt#rWi-5DLUao>v^_H^tC$>@?~l`N#z zZZr3Ygv)hUL$lMgU`c1fyl&y%=F?$=NyBzQt~y0SS-J(-Ts*)9X436@mbrT7+6-Qw z`*afpI88+usfHULjSF11!pQ^*M32Xp|5jC!&XZGm0Yn&qwrU&9{IhX>`q&xUD}ukDdd=tVI_znq~cHHjAN9w`)(??4UWSik?5H-xe){qD(k za%p_atN*>oh4cSya{YHkDO))pE1`JP5U((40bpfS%^erQ&D2-q1Np;I&7h;0sF4ba zx~${Y9M>kTmy?(M@jhTDo_pcF`!I(wQ)5xiBlpNMZ)BcjaHcn;Y72G>uMbu{u3C?{ zjmI`wm844|vtLjt4%=1IHodd%t}izB$9J&|J3a zX%>{+dGmPSe}ti&m=t48{g$O?9^Yg(=iJ{U`u8aXaAYU)WNE_n?S+pZb~JG0%&~5` zyh_r)zgOR+uyEg|t$mm_tGYDS)Zb`N*IC9%;{vsQ7rHjNmPBw)?fkc71$Ap*J*eGi zxMZG(8m~fSG)B07Z-@eiP_r_r_a*2S++DR3MbAO3#o|l{troGiBO;=#$ z-btp~WySM|!&Yr!8_P&O;K zsn>Dh(#6zIcE@bzOpYxtyY+a^=PYltpea*#h$Y4ZG)(;?SpCeLWKJ^`w*D}D#j>3; zi6$E*#eVrtqpBu6%FwbjCCo$TeA!#>M2NQyqcv7a^RRNbBiN05rx+FBfXFeW=?c9Y z_HO0fDW^`uIGwSkGJ!rN?bO+ggAVQD{qvvhqNJL)QVuB?=FS1-O@jjV!MK-J?et`z zh(@|o)~&DawW27NTjUNmk!E?xXHzmG26`NL znPB#N)rkez9@-0TZD`QWJ#?o+Ff{F3*9q8pm;L<3%E6oAvCaI?zPMt|GbIiY9d0IE z2Dl7%b`}ojQssr`hxsL6_KIY&LhiQ4eCHXW|+Jg1`d3_)DU1!e^PW6J&uK0JOwttc$YXfRDih8hVM>LR zg#+oXdz>)V{1n#Pvi35_Ui$Mpq|sbG8Zim4=p#doR`ZLpC+54$eMu}9^Ox?vOILY5 z5;$&}6X7ezI?FOsMJPy}X;BojI;(J;!FYCPyn8smbTi;I+#Q$6IVuEooRGN(cVJ=u zxElf%2GUnljYY$X5>%0^$!nb>;!*O*aRx{VY*Vp#&BxWzx=B0;jp|eJ&0{_8rC4sl zQ$BtD_O)->HO09H?7;262sVvXWslR15$bZKpsJ9>Vg<@VC%#5Gr9VhyN#H>2D)M5g zgm@o9%~TVl)1}>!Rkmj?rvohRPJI5sUFT*R_PX!3$n+m=wAubwtx?wA#@Wp9f5x6d z1r3Gy-zc9fm9W&YNqMM3@vzrC)hr50Nx(+&sxg!(?s9~RVC4W z%hKQngaOy3V1-1-`C%%;toJg5Fl(~R^f-Y)x9D#FqCrY1YrITirz;&M_G+Cqi}|eu zW>nUw0-9+a?!cFApWLXk)JAAqa+1ENA^f5nqE4vWKzlx7^w&5S)mA6mw~A!slpu$Y zV_{EoD+=c_=r3!)pD6n*GTS#$<yx$a?qbmM8IhQ$?9p&2f%JH<(WXJq(Qor&asRfWqnU?IwEBG@o9B$5MaW8ZR;h=a{J+lD z%pgG{zOd>NONcJO^m{H+?yspF1vxg)x?VNhz*9f4!)8_E@8J*^z_l(;=zd-q2jEv8a7^ySn$&2ekdkkiy_u` z{}&SfX!ccw{2uXG|05E!{IAkY#op|Db;iFy*h+@)ADw>%q?mBN|F+OIhj&MS-%#{W)sUcp%+7`5 zuL5EP?6-maHkC3jjkYp^9n$CMpw(lp4Qtg{W6C6xj}+Lxdz|n^M$~mxyKe?`M1|%% zWc|ySW3Xlp;V@hDyfT`hdm|EM{sp=vca4+*!VE& zT8V8&;mDaNt1#B*QI@qwzj50KLeQ)Put5+3xM*Q8)Efo~=*K(+h7ZU;70Y~klDzd# zfW8Nse?QEy{>Ko?>e)LO*((@1I+|IVI7r!8|6`o+e|aS&sW~8vAPj#I1)vtx_U_uU z_32rPGzE&l9WoUMu_KMr|sb^6^F_Q;X3q#7n-ft zCR!^m6i+bsDE4?|^KJ^_a1;jpF7Yr7DI1M`ngJSWv;^Cr9i~t;Wy)>~ zRIeSZ0nQTr6n)4%j?(+Y4J9eNw?J5aFoOv05r+6+SlSV5kfqpJ7?QJxl4@4!M#dXv{L>ooVUN5C}_m*=Eu}t)lmcq#mHtmzJ zB5TO3R>OjrGA^r@`YBhZDRqS74tShRg+k2Mj*q#k<7|}j@uTQ2g^Ob@XJ-^q_La$U zZC6*CH`pOQDzARG$q9>0_Oef!8XliRL$dO0c{CbKq3>CI@&?{* zsHWuG2~OoKK#L2Elx+!ftfW z?JfebGmM&#@Qbf2z4}qAWsMLVAScpn;ZM*#i|%$wU^O1~yXYdDs=p`cKCjezR^&+Q zqM9M}7i;`uw}`%DTJE|;(wx--lo`+qo5F4YWZ%K>HIBap_h)1*nTQMVnTo8U#l^bT zR%P^V?#9>9YE!Znfly+>o2{dByd%=yJ@7u?bhM;`Twf6k1|z~pyqFINvM=FBBIm@# z9!A&hsM^q6|F|g_(o|A;Fkalimg&T@Ho9s;=pj%$iFipygAE|^}GS@ zCq6LAV^^}OtViMp%=>TGHS3s_zrO^0RWJrDVD@08o~a)+@ioAYy8p}f$9WFsL-_kH zVdm$5DpltHeX0Jd*<~uJDSYo_{{&}QNvW{^3D`!Y*Z=7U3zc^Ru9(nItK;1K1bmNW|sG9rHaGPz4h4oeL9# z^6GypQDkRv`G3fXx$`dvZ6Yw;o3#Y;iA`CwL@UH)%-Vv8!6IYK(}l%j7134bVL`&O zlC(wcb`YYmb$ko<^5Too-`bf7+Ljz@2)rgic;V4p`UxsP=-tF7? zVbw?e9D8ioJ9gSJ5=D}mK2F&tR}*OMdQNS<(wC=+>%XQD)In}>Z9ka6k~2<}xG4o_^x3TzaEl49BV4dS#q2D+ zFPOwhSZ|h0fPWj^$j`Mi2%UT+dN>Vb!e22%V0Gv^m1v#R!rdlFO)`=rKGEPR#sTE8 z*R5w-aem7%>rOPMqtb3e-cp$s<=_!^Iy9sC;lprFLrK%W$-rYTbf^$~8>euq-SNu8 z8KG{Nj)jONcyqDNB47gM$&KD7l2te+at^EOnyOKBUPG72YgwTq>{_cE6tCBYzb3U7 zebNGV64->{HY}~zxybZ%@B_lj$$n(6N^MF;9hDAi5It0z)EegD*X8eXMyw@-JR_Zo zC*;S0#qIR3$R-)n=if(6N})}&=Mcf8L&)wwr1KF?X2OWmY@yLvsk#U}C@QD*@n&WD z$pj!nFp73b8W=nJV5~SWx`^m_wfcZs%Vj9MNN@~AU)|Rdk>HjHPHdhU-&AJrv38gN zC}Iwb8bT7;#dYDG<)$D0A7kyT-J6TuZ^*ilbKsrWZ?XL7#xo&mFnZDc?Gn{f+=g^9 zLhkaCTsf?#SW{M@UVoH@%VYdE?>=MLyUB3ykJ+XceOVL*Fss~+x^J=nf!gMJIAX2u z`t|#dcY*(TTKRwWCHhwZPbyB@&(k4n2FZrps^C)_wb)wHmON!($QyIaBa!ND_rVZV zRLTt}a>XH~sqFQDT;p&-1XL_br?K@;LgIDQb?|OInW=PtzCT0$5V_{^FGh4EToyXU z!O7CTrZ*v1fyCw@QkoNb_OvaN>T@01vl-ZT?bEjk)iS3S4}+|$jZK{o?qre9x?6UF zw*c9_R^xbxk}NnS6lRs~KF%&A${u47NNt*Hm!{YPQsZWzKVZR)H$&1Gy1#cxG^a7o zJACdK-72);b&#iQ=lAUhwnJ@VFhywUoas)dn9Yw&z(DX^r$0}C^FI6LGZP8wyf1gV@WU|lNMGC}{#Y2ofL8r^4D{*n#Gj_C+RZ)kFFR%$9OT@*KTvlS2$IlZ8Ab5(_d0oiT zfo&DB`*0RsPMs9`Is+So)8n;dZ?iw=W=)E&)`yZrj8>*pkOAK*giCaN~GLg$lgZwO(7M4qWs7!+Vib3{CyR<|!BV9JvMg98R#8$G=h+udh@0Ntbik#CFN# zdi3KBZT$=SpA=gO+!p%!p5(~>Kc(2e|3}CwhF%(k9zm!({!h?vz6gLRfImQCrjRc@ zutA5?bF!Bfd?(a(!mNL`{s!(>DfbUOiPzdWzkFf$?hk4lF08 zEubtQ4cbp1mPH&`d3X(S*#P%!Jn+J-j?8Z{k}xwabvQS=)J3rr$&@O!x{54&Liq)8 zcwNe#8Hn1EG)+xhm;&x#l~>*t@frzP+)26DuRz*{K@?{6!=~|_(+>#hT}jzLUB|#t zwb21Kp$%U3$x~C$ksS_3ZXgsl*$wD`_Mf;Ide_plfB)*^@8{p29H{e8)Olb&!J62ToVU7Q}yBt&^ZN+*Mu zNkWq)tZERqtL|-FZ4Z(e(FU7D3Z+xpJZ{GJN?Lkg?Wq-RheOV-7vrPzY+4^Lpl#&! z@EvoQB}dIgxkWpn;kIa4+$E>=8M#@xOnw+VF$c{wM;tj%oMBL&1X9%D0?#>+_=H2l zjN7CFcEn+nXepxT12f6J1V5SB*dZocICc<{eb|iQBXAng`e0NLov~#hLs(7z-X0Y; zgB((H>puNZ<2n}%G{%+o#J9&Pt46D4qmA{h=`-&zJrYI)>gEgUW)x8OuKA`#m)0|t zjH+oZ8gV2t?i8Oj^yoDTBX~YK6!1HiE66Lq&W%HX(hop?spKFs_4wuTgU7nP^HW6| zS<9f2*V*c27Gd5`MV2Lf;$9v2u?10?{m(anL9go?)>=Q6KtHqgb;(u zt>(7x%Zon@m1#vajo9VN7DUP(Kg*G*= zKLE_P(kB`Y!lBMO(wg&#F%;!r(x`HAK)c#nyHYEZGASI|i{%}_zpVSS?aRu~9usZ} z%x{VKu*gUej<{CQsY}cnaK8tXc)Wn-o$!xPkJ`5RvPP{(5T#1Uk~n@2tU0q!w4Mt z7Sb7VjsL0k^NsczBuGQTouO-&W$bbDu!32%j!_&VZt6OMlr#h=yZSnRF|4PcTREdo zuAScmX~KGW)#5|H^Y)9~$@U;q%Co6x2g{$ zFa_#~I^UEghr#q%2-0K4N^JKm4A$?Y08~5Kq`ejx8y&c_K4+;?Tlnl%FTFeVnxye*&#d^oF>+i%{Qb`SxEK9f^;A2x3D zY`!IFKhl#FzIT$>eI1pJ;J^qk+#bpsmlc66QtR2>l8)Abj}RE#EaJc5^Jf6EwOB4T zS_kvr(~}`T`SJ;8KhC{s@^mH%o{DN5O7R(VlsP6%AwHSDTeh*TW(buCuLJxNT$TtM zi!n9~M0O-FtsmmO~LTF z_TuyCC0i}xX^hzy)_vvkF%?O?xtNfy05x|P{#drlKfm$*=AL@sYv|kfZ7Y@fw{HIR z+y3e4|B+~_S*ZW9105tpDFagK&b4VM3ucy*!Z{(;7@iK6{xUf&eKbu1?AA|_qKcQC zYd!l)d}Ox~m_?Se;Kcth=eJ3Gaknz`h6GyfhQR&wvE%mBk59Iz&qvwozHs&gf}nFp zc)K9|kQk)RZM2TJn|wf2<2I^oA0YAIokD*R>-+eN7BG{sH_djL_;I%;L^3p(8h$hA zvlAo;iyg64Q6YRm!Cvbd5JDX*D3~4`kC-+|_eDM@Ss5}5=R6=_bsxw6!v`c?%=5U{ z_7^NPGEL})AucT=QZqoD4OVrf&jq4Mb<{vBn5LLsSGDFdKBR3)wSIAP2o2WTIND2G z_06rcaL9fYOqQH2hMF4cjgFZ1NGYr{_@AG^rFZaEC3nykSnC^w;dWx+GnTR~IC2U} zI11?8RWiU*?rPqZr=q;E3tfEkDQ{uoLE>aBC1bNGXY8y~0%75(D=UIPQPB@@kY-!9 z89d`CWNUJN(Ofbs7!XU7XTsy_aDyHw8s94?g8 zsv^4DY=DZxY_y-^Zl(H5gGB^vdrMJzLz^!CW1jt;=)(O7C@umU|>&6&V+FZdI?s($HZwvq&3? zNLw*fF@_s*39rMAI~@~iWn}SQ@GT;VUz-9~bCewAs;=&Z7zVWfPR>j)badjRYIm%A zzP}0;4FjnY+o>XilHv!4-E}9!lOL_<7EA%XB*#6>QCp-=?LlnxDuR{Fm;AbV6SZrP zg_I0R#1XRska>h9FB?{)jsd3L8rDNfm}XdEyejys8@yr&>u?>4oy28FESRq5#5T*) z?wq9P^@>xCxa}1i`Un#V)xY*!LOxXLJ4?0cdz-l(NY@uJ{iJez4g!5sIz~N~o;LH! z_(j2ggBBth)Qn>?Arb}E9&dH?6Ynq?^5YRYsqQ__JEso3*zG5tmCc@kXxF)kraG|) z?W+|*AGcOJw;3ItkoF^)vW1eLU*Rt@mU`xA75O*h`qOt(|B8VF7{>*}ul>xV)e>ezF5&SOc(A;<&Z*RRr~CI$aNcwG3Aj zZSAtK=MZyy%6D4c!?^CYc~P1&oeVn|nt^KE{O<=!$bKDr$RnMFo$d9Flufhj2tDxh zDww3z-0ozj=y8*;Nav3XAk+_ICHM7@t-d~gp8@<`LF2FRZ~PB(6VpHU%>P@UNL2nq zIR*0tlw_+3>u;zEt$5zuI4K81tO7<*l#!&SG?XE~FjyiyOgXWw%ly*YPRR@G%Ge_MkZy#mC(&$jTMvm0nN%hj+R5GNjL96C&BgV6ond=M!;YMR*IGrTUs zf=P6skUoHXPZe8LygRe+gDX0{E~RRI$QfwhDIa1fc+jZwq|^wBXa$xI=@JNyYp%$$ zNS`P;v%|;BO~egQHZ#cXpx!hspI8jPtj7*^OW-+5BjX=T!#ng<1|EDA!8C$PhPRc)GMa^`wR8qx3=`J3ngZ2{7(gz z|K@IGs%pQA-lM&|wPuYUk{pctqL^1KWJUq8asY9Mf^3Ou{q9?T>wuloIZ+|zqws=(&3 z)>}lWCgW|o)fi?c>ur{6+0BKH+ibFd1m%Wo4ZNHFrViV|c|P_A#GE%&9{eGrLElI> z-U(Z`JD+kU%^f>xvtG>AjGka1h%$db ztuWDCTe!5bine|VsYAvr|Jue&)Vc9h<=#Np`4a&nrL?V+UIkSxB^fJ|-~c~*B)8(4 z(vuNpKYuZGWvw$wr&ol*tmc8oeNdfVtDaJ8U-imJt@^tg?m^*A7}6VzMFodT@{kqz zMIQG?-b=mPMXqje0*y&VzkxFOTAX<(HCn8nTOJv&v+*zW=}N_>di<7VWlEseyfO9V ztaxTcme^@0HCYKG8)jv{zdo*BRDf9~BbQiy;f(<(M->>>P_BzLL|FxLHhh8EGUC1^ zO*E>ebx67sF6z_2dZ(e1AjP2!9VtZ3*ptwOTpL6Olt}pQYRjvFVOb+>J9r7J&WGHi zb*b_Z7*2j9-a6~T*(R~z+oCciP%Ep6GjD<`9fum{&GD1Z4L|6+`=|Pr@U|kJRLj5^ z1EE5$JYv#I;nd?3oSq9a{Ju$?MtL4MpD)O4?J~iq1vt)zw^^1fJ>3vd{Ad2mqeKrR z%n5J#nQ(u+{bjuGKalB|VclCo>o!AuB`0JY>ukspPgR6yu~zX?@6=GTWlII7L}jb# zh}2A59WYlW$cYA7jZftVXO)6~+=Pf$p*_ICT+jT%X)>32j+$Q?8o+fJiFW8_NISK| zy@xtuu0Ll-5oz0v@%m(I zE}Quj`*Gkw%blX>Xy$li+h!S5^2B>sEf2(h1P93_OU^&4-3q_W4SD}( zwk&62@-Jilw*Zl;G$M!p+Mj3H;4nql;3f~+Loot?L|Z7rg@oh=;e=YE-O@}ZJ^S${ z@b2qKFBBXH;db(JueE*z@IW)>9Uhh(hCEEHzc#Cm4ch~nu*$_WqN)J~E_m@N6^4*= zw0WsO8ImZ)9&a#LN<>W%4$Jp*=`U*wyd5e&6l^BS9(Zjv2WI|b{oH)x);>7gp2tO3 zB`Tj1bz<0`{be$!79DseBrOjq)|>;c9M|ETD&v^1rSMTzSLx*=Po(4pl5d7aL=NNT zjN`k8LOsCR5qT*u zgS3)+X;fT#rESEekA?2lr!m0F$$gd90>J+DXLiW2Hp=Gv>aj0>n;rh$!tehA0Tdif z>;RGU&VN6A;Q)z|QYp`&=Iuc>B% zucNPGsV}W$Lx-6rg$6!ZAdjsWjRMkjjppFsJB2ss--Anxn2q&eA26VC{bK_CQ6wE9 zJ%)u8#ovupQuH=w`kRnxK;XpeK++|{&?Z2IpTAj@L0?sXQYP1!6ow}CVWik3y9X%xO6~`c(3L#Ht;-JzS%0@es<^nIUO14 zL&J?4GEB7C^sbGS%Cyg@0(>bPvQ^i?f<^vAxPh5cA?GK?2U2gc7CfR01^gi|UTLEt zG9LKILv5S8q?$v8AkMR^_uQIu(KD6Ouq%W9Q6bakHjBwp@T=G3=cv(oIU(A58RTat@!#K1@H7kwX z3oI2j&x~OWp{^j-nsguyte)sp5`|jktkQ=PI-8Fn-L#p^+&d@XM4M4~#`dGkevUxU z!JQj5_mK%MUc8b?e}n{C(i2lFviyX?<(UgGZBLNunNomM=Kx=mc%md?3LbX;X~+dc zD!02vV$nmv0)ecYs&R=!Cb0VMtIV1erb7N%k5)_d1rW#TD0^dWxNk|qU5{nL9^9hk zQR<5<=*Qyu=`H}kLwsr4G{hKZ{$Y%8B{&+3K2}Cusz4S%Lx#-my^HgQht66L?Y(=w zWN&}Vp87r7a{NnXlIay}{X=n5)WqJz*4V_>=-*2|W2z&6X=)&_AqRdN6cJJ+>PCal z3k`)<3^M=VpQPX7$d;eZ{hc{JO+woDRc9VRjFimy1liet>58jMV%{}8R^cVT&c<`= zIzKeAzTN@V9N895gXN~muU1pM6&6kbgNnI>IZEeVtpA}akFvNq=R=olWNjJiwYj-) z6Ug*>$X*uYi^A)fp0n8+g)Hv!@Dduu$NXCMlN=C0K1_+-d=GLNH53{kpmd?%#uf?T zY5Y0PxSV9=C1%BjNKlnxWG?u5d(ff6<*Vodfq}0={c+qUcRKo_HY=Pd#>_V3mZsg#OZwA5FNJ@5n~!R@9CW%HVOc{}}L z14tD@K^@w!%6s(E-P_%C$F}5?G~>WPVwPwWzqOVE+n#dGPH4Z>Uth0VpToH66no`s z9m^c+`#lDna$!KTaT72ierwxOzhbMsHQlH3SCB-G(ze6)F2zEL_To z+qOZmalby~RSH3Ht(1BaacR+`jF7G@>VvW(+6-@E?MeSuAE#!CbR!ZoyX1DcDY)Df zyv40b97CB5+Xi;9@Fsl(o}^~Y5^1r*9!dLk?ILQiWlvs0O|XhW83- zbC^ek{h7Ib$&d{JzlJREZ*?l(|JKL;^XmWZ-WRAGDgD7#P0|)l*D85O8ool~4}cbf z7Hz?V@mI8eI?5kY`YsipMoIVx`@lU8|Muk^;%N_wC+j3wje7iZd}`g^LjWtc?an(YZu2j!cl*%nDIkND#%yPCQoz zTh;V28o`-yjRQ!eOgd&Wq(zl?_uB*OtYD4}d~G6*T7C?P@wcqqL-<4!UtRsZ`gtcD z2Dao{o7Hp1?`H>WFT9s9cwU#$>IhQ&I#{N*1G>@s76!y+MC$DpH&SfE`=#cXj5TnJ zIBRoza}5?Y-}cKa_R>GgyCS1jDk*^0!gZHru$#B#huVO`kG2~H_n;UE%R-ZiyV-V? z4Gi#X5C1AxH(%CWgjFp)=qK{6y11%fqrk{VCnkgcVKc%}a>Uc$xwTHf_`9(qC zg&~g3Q9hX4C$i%?*H4#yVd4Hz_F*3O4U?)Uri zOgGzuI0&d8iJxO^XIuB-uJg1`*gorbX)&nlv}N4#Jhs&>)^Q8^`TT;=M?W*>Pp)Ak zqcGC$#|L_`PP6{>S-9LxMCE&b{BXV$Ehicz8a#SG6>K1g35Ew^u~HhZMBB>1r(&{F z7;6oJV-^|ja%eTW1W0bN`1|4l%rw-hL2!tGNla__MNye9Bod~YFYjp7>{zNc-b4tW z!ne?M<%!2t+Dh#!la&~?ms@$P4qI59rl>J8lBo1h*#2lp(A)oHi=!rkt4GQ+TRe=P`=F3wY~&!@9&B*v#_>Q(7Pyjs<`Ut%;@FY_WA z;I_({5+pQSzaV!&-jm@Y5Kpxwzf3_j!YOO;Fr(w<&f%9gO5gF$kb=6^pxj}2EP;FO zChk*HMV=uP656tyP5`MY@TUZw-I4exH4iVB%}3!|3c9rHgM>IE@3GAvv01y$H>yy;d2cv=1X z6-A>Lba>u~yf^=OxHecaV+F7@2-UT}!sD5DWd<){WVZh(Ez?bFF}O-B$_LsfBKYto zuf8roVlIfOo{9F_yx7O~g&@aVvM|UW33|ew4DT|oy|E<~l9=HF~Z2pApzY8pLaU;@DEV#k)mdhnZ z4O`s>t#O_uQ<(}bMp!|IxmdRcJ7!>+coHZ7_tEkj!q7PHKciBZN>>CFRLZ`)cXE91 zD17;H@c_GlR>r~3Pw%C1p(tDsg;$C^F?Jd_2ooLj)%bRn;{(*~k&l_~Jpk%dWJ#@erRlV_EWh&)}!`)WLxy(jI!L_dQ zYyZ!m+Dz1fkpjLskzpu%%g)1bWgm`giXZ+y2K?ZgBKR^JxWYLw!1YrF$AiCp18=NjNU`;b~#AA?ERL^9O!x3;-1B zHxUxsB~z#{2<_I^j`!;qu}}9mFA!fsPT(uh(n%T(%MIGY;9dL`seBZI<62mid9LNs zE#kDe5-kgBz2aKkV^dwo3CGH>F1tN^idfg1CMcUM9qVwZK4RGHCXUna;38b}{W4S* zoDqL?^52-2ll&sUO#dT8MZtuXdhjkDfMs5=GVxb_fL|X z&HdmvHrQtu`9nS^7k`dFA2PU_BE6pc`s?%ex$N&d1db;EIC-Uiy!`udtJ!ETnPPV2 z!IKo)sjQe=WmW~h>2EAsuD3F)v1Oi;)0#hAgY@W~jj7)8AAA0Ma(j%_>a&2l5WO^a z1#O=&ZMEClACm5Lnvwj-Lq-1dJdy1Op#htG(E#3Kl>y51=OAl~%Yw*y5*3p#@{pMz z$pRdq=isAAt4ZB~T{Qtn8i4BD4bu03^P11{m^$4IFv+o)F@P@!l1PK_gS4R^aO}0a zR9CR?7(>xPZJ>J>K>Yhw?7n!Y?nm z!$wv04w+E#X4-&*z$!02uVLJX{mg)nH>C2Rd)L_Vs9=iSd1Q`@A-zH>WnZarQ{@J5 zOJ5{?oyfSlkyL>b$?M=2>eOCpI~zHSK2z}{OxHo6a9*d*fNj;-x3BJS<>qx5P&-6C z_?KIp$zk8OB@@|^CLJofN*K#qir)Bp|D~;=ZtXj+#o4SNZK%7h*v_}%1WM0cd`aiH zpNwS-&s@QoyhVt-2L{=C(Y>e(an#!9nf>kV=i*@BPenRIG&%feV=yr zboM6C!q9bI=S3po$3SMG7csRW6BV(wwA)7}>kTv;VO`PWV5CAae_n*Dq5$bvSk7|X zcv-gdvr4X8Y=jAKpxjxhj$tpQ7Lyd0OD1qevpY$T*MU~0%x&_z{D_z$cxki*QPJ^) z|C8%5Pm?XnVIKFc+4UW1*0dR%OZjsb?f$!V>UaRE}mGnE>os+wv>$>1~0b*eL{}MjPZd&3e5|$Hpwm!sYLmj?uy2ZWpXj93+I-qx z0!QOUU*QV`54oaf_=~!^e=!qZF1F+>wU0zYO2&A`mgg^?!gn)I6y9P#;a&CqtT0aX zq)@EC){%{WD`d_8H>sM%?7#J}5Y4 zxEV)h7HC{gTu)#C@-tDheRNLx=6jKBIKY53ZgCLCCu9NScH|GB_aI*&DhuN_3#AEv zS16bnWX#_O1w=1o!%bv~U;#R{u|yjHk=kkouYs^8*80NV(DyYli;=GB&q_i{$f$?-B=kVjAG62GfUF8f|bB@OMbC%GqQL#z*5F|Z$bNL zNlCfTT$CwDc9>`)70&_ZVo{wEh0_k#(jZxGBU~I^4uBI6>8lk1NB%ChHTQJ6tE|Oc zTE3Xl=JFn)KBiebaeuirsVy!okSqG_;6!_wsoPbiM+BU^)G(^_mxs$_QfA+tDar=x z?n%^9a1N$?;^~YaEH)(UuiNFX_kz;iZtSRRPHQF3#f6Sq)?eEKZEL<{$7dmORX9^1 z6otBE9DJ_3C0ijLL~|D%oPe5?F<{7_+-+E0k3IczBYV!5VYlg=0o~aJJZVr^z6H8L z)3X!j`Ma;uw2?O;WOQr#ZgCqhFliLO?}u~{yiog*IFLd<4$)*o^iEg4t>;H%uMc*b zq@`KO7I$`|f+GVKQvGzqEC}(i3@@`@1U2;2gB5LNy4F=9ibFfLR%2mvG4Xk$yU$l^ zt>VSB+OYM2wnVOW9Mk9Ep*f9n>rV-jQavyaBqILVFU^EK`#tcK%+gG2xN1WHje(d? zN?!%Mxy&AeN^gT@D%k{}i91sZ+89=7e@4Y{wU-44jx}j_t$jd3={vpJA!=dtFsiu) zcrfYgt*RUol4TS&Am^9J z?>^ZO#CSZds`sqOc$ke>$%@!mW3>G0w4I@{T)>hybr`bObhwS|ENgLSLwU6EUu zTiLC8A=*U7`eI&_z;Cr3#)uEaoCiay+Srn@jqdS=% zURw+IZ>@GLc{!nNAi&u$GOP&93|^_m)P{j-5B3iZe$!P>Z1!V)aiM&e+=D3(fB)S!Z4 zrt@{BjlNgT4Su!I=2xLg6?*O^OVp?lC^BAQ=Lvh6YzZHB)ZD<_EVoe|E!~qGk340- zN9oCBQ-zg+@BP?oF`arb7|*dJ8fl|+tA=u$!l5k5H4x&kG#Z}{UGc#bQh**>4+kPR zUrcjvddhaFM0&&;*5Z8eP%dzM7G-h8T$S6#7ju#HsqlWXZf|t*WVE)K0jQRst33mV}vjMl?`^AiT z&^yf*)5Q0uJh`7Re`~r=lrf12OaBwMnVa6-u?UzM4n}#Oa)jJ;KZt1T+q{Ps%sl0` zc88Pk;_i_dO}y6~zkU&oV~|?p0@NZDSk(TO`d5%&qmUmeqVWx3C7haBAg)8yg_HJY zlU(0Gd8kA37X1@6xQz)2M#QJ6UWjRQehIg)_q3@WSKz}EEQ{92RxYYKkCXGU4!YT{ z71r0ySAUJYuUSVNe}q4|b!c6kg6dv=(P8+jcm+ux9Ypim(6IR}T==`<)qevQ9Gxvp zU*W=EFdI(`_ysNoX(Jfm_GrxRqlq?m)ck|N5_S; zT9sAFFt(gF)hLZNLzYH=73JN|IQFZ8Yom{jfFtsqx+JdesW`h|-;a%r_9{x$om}c^ zGnsVCEQ()gerZFnt{@^)!0QdWIT#NjSAZXEz>#}5k)H=+3I3`GNmO=g*$twt8!*Pi z)8pyTak=q%uFt5v0&(upntmrMs&~|>y=1EnnM(1loPWr}mt|W|D~UL9#f9AC134Gh z+hbaA7%F>xpSziC=fS3$JXjNCT8?h~ky;u6n`? zw&2fM5ze>^UiQ}<5aYKQxaj{lWQf?=np&8-I2!!1xQ<-S!pXwW!rH?5U)z}e;*Aw1 z*lH$e=cp=RwwN;w1}KP;h`vii<@YHH@J zJdiW(u{w>rb?`Wip9u>3LZXE$nqu-RFc*DU@PBKZ-%QyT6V5$N zyTtN^)c*rkcs-_0@)k&%!~(?#H)$&hL{N)&sU)-22zqQTFu=ZLAKj+x5#m%|<2VG_ z;zt$OL3h}f!+;vCZ6ioB1)OekYe&ZPNp8~&SiN}mSVyIs>w0`3m#u-P4@tJ}p!=kw z+>WaB%88paZ4{eI_4}*?BqnQoIzQ&_IFp+YMU>GiZv!0Wl8+)yhbL^CKgs6PLZJ%omw=> zYQR|(u4~yBnZZ_so~veMioi}(6tC!u{=vsVTjhbL7V!URm{6~?!%&RUJ z@x!qM^wG(|rWx#p*KMf0nt_goQUg2r@lndXnBw1<<<{^ofd_`+yQouF2*WtVa3vZu z2mIW^-jDFZu2AhIjUv}ms_P_5D9+EhqM)zjY>HF#AND52g4w9`Lx0jy-kvtAWVPX1 zaI6ctb(|9}?V0*=p~IqsjiQ*t_v7(BGPq>4l&mNG0$nF%q(nomBn{aSV{`i8L2KSY zQ70ZKJobw}+ov=N8h3`T_c`#l?Ngrr-JSl+-HfRp zIbqCW{i>kwGV$nY1i+2xO9Y|qBx0hAQ0s5$TT9L^fb`)Y^JTwJFX`5nLp8W~MlZkl~y0-DmePdC1A6$sE77lYIP22NWo`2s;Szoow-% z;JICKnz+x*^YXhtJ;Hfo-CG7B1FH|C4|lHcMh|gggq0}vA^@EPq+CVs;7Nu-n}A~gImO^33=q?pI`pVI4}z{nIc5!(J*N|5 z%y0?(6$WT4gmelp7V5%0#V}Thsefk_0H))P$_T&+@PAX6?Zd(^-FD8B?!nKfG2mgeCyHwUnO1Z8-zNgYiV|x{lhO@{s&m14Pgz52hurBi= zpR=HV>N=lAAYNuUDl4O&jYnDD^xArfrBG*C>gVG36qYO}_W9}xd{kUbqgiGYH;{Pi zOC35{Ji&Fx&!ZU~Q|%I&roBUmXriP^zzM(7*mgxgC-QA;@DL!-OCtKvqDk92F`RML zT$7}D#b^o}^+pHlWlr3qq>mPzPiHk7uJo?1tvLy@c!E<_oP#*rzP?p7$lInK()D${ z_ZHtTvAthZU(T=&wwy7hOvJo+v|aQL)b8h=lYwi8H&bM)!-eEHP~zWBTJuzIO3%sp zfuD$GU%2jXGKju^I&+SrB`Fp!A~4c&x{*V;$=DH>B^x_yB?Or?3jm&cT*Z^oXzRS| zsws0EzExl6tn3t@g3a>^70SLhx$64JuimZkmA2XW9SWTd+Gd%oze+(W`S71qXF5$k z5Q#Lm`WOpGgYjotu}Wlo$&HRQtpf3DqP5Z8x(CIl3o0v2jx`47Rcxl;GsJHu<+m5o zkbH}7KMgvC*HzmH=GSuK=oy~Q1Ha$hx9HD~z{57`5-6@D9m{GgcPmkf#jKT2}uRp!-t7k>S&~hb>X6hS^;!aEC&@mP5M(GZ+B_1iY-_kmqV1JYdl+>h$=)saD-8~GtNZM^MK}e^=_Usx}53SBRo*$^s z&=j(A=%kd$W^JhVon&US7(?g&X%-m*eOYUQoA_yYglpD2I@oa~qhvTgD6gH5wxT!~^NG3j~0tRRWCnV{~Sx^ELRTm6j`C?g7P;pdJ#8K3RbK<37Qej;TJ^VcmcD3~OSJ`K z?J4?EtMElP*abaD%r!hvS7o!ie#4 zuex%7MjG`+ki^_?xch~t#k&E!Toe%>_Oi^joPUVPJ+7*U+Pw4Q(|5qKUEqR3;+DUx+;zX(0!&|(54DI&(_*DXlO^jpmdDH6x@r||dE zFp-uSbD21OA{-w@2|W~@a^GowGo8|S>b;AwB(3?ZO;JsXU0ncc7m$LAKm!{1UtXowD7s92H0sda4!IR0mm6FSnKkHFmUm9`A0Uetmy*q5}DPhBOyQd<|$f7jXgI|j-BooD5EmqR0U^;@ojkEBOIW0YHS^!%Sg0P)hj7O+IR zDIV>_@^9F#p{^l=f~LrMtr=?*NMlQ|`OaiYaT7Jnb?l6`0RpzNe>%x7v+vHXh9bB)Xaqtx;iJV}8T$}>UezYsdVsT*S!jql&> z1a^MY%d?%P6@7qaN*D0D?-P&-jZmSkqgA03IWXZlxBJCWywg4!(RFt^}r+zq=JKWit{uo;a4>lL)5|c6xq8xn=RX#uhRSMZ3sgxWQk|4H(+6X>E zCEnFdb;*LJ@O~=06wT&hV8dI_eXB4qIv#3D42)L*R?dp`bzJ zx7lS|Sx{iZYhtjq1ocI{f@iO^1+Xo>qJ`Cj;gD!XS5u|7coGv*dVQWLS^HB%fh7g# zg@8+Wg|T*rRI1EF?v&CodlG#)N=y2Ri&7-8SPn|$=$DUUDs2Y4PlG8q=lR$hy`oI9 zl5Gqx@mKg6UwA^*tlX`l{czfQ2@xPRqbmw>-QF8}P%t7>Sd+7ST!{pV2nGFFR;gy2 zXw}*p+MAm}-^F|n$?O2(OYF?$^!)RA`u|8ikePn38620-|B{rSZM`aUQxTH~|WHEB3{FLNZfO&i7N zl&Mj(L0puZ2i92);~c9B^bNPoV_g$=|_rkmhl_h!0Q^Kf%1fJizex%wRm!)91eQKWeF16&hxR<5VXwKjq|t8n zQMVu~c@3H21z`zTc0xDbk?X{>__F}rSSYr$$PAllwjoGaw?c0< zMzTP3U<7V*Y#$1&9(9K4K5{Ty`e9V5d8w{Sl4Cl*T_3LJORCLBbLrtp_F5znD)pv; z#Kz_lEs#_cXS7i;AGcI3&{R>eY3>PDy?4Aaj!UM}8VIAkE$yFtS-4Q>U7FJg5KI47 zJbIo+9hNZ})PV1l+F`tp7(6ep@To>72gfMt`5KD$qA0J&3b}{ln97~0blFyex?UHm z2^85SNak$N2Ru|3_h-BISd05!B32;%*q>nyN&-)Md|w-Oa8ez!SgCObGLL3<+D%{9 zU27S-WZ^Oj%9~EpfWCzrqTJN(3g(Irz!!B<8+`P`5hz5&N*mL{7@YL=dp5EwE+*RQS_x}1;OGOSh@>HaMhkS6(hn)NLZwGY`Rh;4hGKs8P~EGQ zME%xE{%*$6w(4VK!SKzmwMNk<$&?1M z7o+$2@_XJ@UIj;;zwWo?-zX1CoXbI%p<9ce`-2}@lT6yEjAZ*;!I5mC?`Sr{KdZy! z=fZFHQFn6_2h+a`K!RjMbf*btYbM_?fiQw(L~^GHr|!qp8OZ-k12F?>3NuR69I1_n z&0MLEj)9oeJ0}34*;eo_1PFtA4hpz+Q0|tr^uAYaFSRPPJuyF8VJXk_KoAMBjc~AW zvPsps5J?_EQP!U2A={(pu`!dF8S&i2CsZ|peCLZTnP5UT*J+a@;(cQ2rw^Tu1 z9>$j9ypquz|9Xf9qqL36zY@osc37#!zbZ-CN#LiR8EF?*Ehs=|t=_V_OSrn77&kL= zMU__J)UCA)bvIEjrbfdpp1LeYCqPm0e3nmzpQ4e$Bu8@_Ao;SN5a(vA^s6JMyF*~E zn^ziPot-{#Jr1qS2nXonguN)T%5lH>l8OmH2pj?RsjWuB3Pjxp8cYHp{bpNQr3!iu+T4}ole(&bB= zY-$4(Mtv0pP)0X-SQMLl74<4U)&qa0`$4=wmzq*&q*~a+8~WY>a#}T;n_l2!NRHV7 zn4C{??-;RCxErPQV{B>k@gxMP2M1yDK2EvO9nPgx3KeoZ3}fu!YLc`~=@v@j11?i9 z)P)f0DpvPV^Y>|vQUZmU)G$$I^tgOpabFvYT-{mzhnn33)AZJ|e5827)5(%9A8MP6 zH;_TZad%|B7d1E=4W^%+*)H_ygh*G&oMHo*<+TCQ2%@lps{u4m|HIQZRd9~b18M2~<4i0*q{kfWt3@w25TF^h{~ zHYNMg;wrge5QWx;tQKNKYrVtU>}`Gmu>Xv3Yl;vS+d={4PkXf|5zC}layo3X+!xS- z5&xcEK2w;iUx8=c#QmZk`Xi%keOJe%aY*RuS&^^otd~5}Q(N{kN)1j{KhaHHC)rOz zW6uQiE9FkA!{z$>))FY+LsZc*;iC_#zCRWH$h~L0YIJ}7S+9Ff?P+xI+P0+q?QUZE z|8d;?he!F3d53?}!Tv)s;2#lKZCM%L1oM{-V1a_Zi2+BMQK=6A(2rP~*r3H!&{*~U0rk27m3Jn;FG|j53b_6hLNJjWq^%>7@qWkcwKjc~ z`8YmA?Du?)^x4Us+(5WHKL{W2KB1a^lMLYqz)3+)v65I#x9K0663T$yBxW74fbJmC zYexDW=OQ@Ni?jptq8iy{f7d=%L@L19*?(VzO(iU zcVdLF+&Y(e5CXn!Af#RH;3ghqr)HffPvk+3u15lF6XwwojUIxKGFE5rcScZYU|CUP z@;e(q_8>DeLr+%%`0LXh7PhhXSoHcvEBLXQ)F@ex|637jM_>6Hc(ee>wyr1(h=#7H zR1}+!${1-ig^UYHw&f^@#cMeDqiV^OV==|1dOHiA!kKeQzf| z0kJJQeGND48*{Mo#PYt*qQGQPRu({sy%5iCT3RB#xlA0*OvDKR>hv1 z;$FygL4yUQQ1(tL0dqz#zW7;4adKe3QKVBpe4(7xDTbew*c3KB!k19>!|Z!vGD~~L zfrXgKQ4{%uOEfRd&mO&o(VnK7;+4DV3dXBT7G(k5ipIAUkw^l2nAEd6g2JE0my;*f ztXk*GOsq*08S65N&svqTP}+<8 zJc4qB5vBG&i)f28x{Pee8%&_Vh16xvJv_1O*))}Ha_z5LhAfX?&)hs!hZq?4>R!0m z9eD}rmm;iHG*wupEKc(MmO+qhtX)#kiVwx$R|l}<3Q{#*Aa%C7top>8@{x`27X;%#laSDmj3LsPLyh?c&DTGg3gJ& zGX)Pf=GF@SsZIN>8nZ}A4#>*f_bE|r;R?v#@hy&LwyKqQHBQx|_>K(Ov3yfzD;ESY zxLc(w05z>;9GI07QtX!%>v~nVR7<)w6|qAVcttiU=6@>qQ^3=pJj32w!WlsY3vH0M z2s_2ZZ(V|OH#}E{RAuWc#4DbVgJiJys=I~QV~_DpS6kgqlce#8!lU_Th z!o<;>m=3uPF9b=Xd|`Qa+SwG=00&IyI&thNKTe`g#D9cB03B=ZdtXk-{=cokko@1D zuK)d1?c%XCQngHCn@P%}7tHJpq!w1g!<1t;%7o|etS9J&B9%c~^ZyOmU`DX@H=p$WhNB5sFcs zQiG*pzS4tf;=ba8n&Q6lgDc{`qJx~`zOsWY;=YoDWTf46Kp#?nN?^RTQSiuoFJwHM zmH7=uuq8I%#I6^VAnS8RUk}@JXrCeWJ92Ojs*n+JdLJBehB5X9`+%co97qW>bGk9a zzQoNL3|H?iF{m8-fRq6?EOOQ!hG#!Qp%;$^WPG|Yetg5O57ei5Sfpb_U*42aI2N|A zH59b34HT8H9i{#w%j(RoG86#<4^HRct~!(hvuAQ2FG3vib3&gX4n9SowMF{yx?=bM zf`Qo$WAGEU@AR%M+hpJ;hbU6#%q}n6q{tjXC6;y!bO#sAfHd2OM_E-{I23hhcYX(E|kY&TO93T&| zmc=utPZwd^!ZD;z5<$T91~b?J=Y4P&8R0J(0p$QRf`D{*`3-BZCbnj`kl9w~&clj(=|@|ZqFM2 zNU9ZHQr43#F69P5xHZ1ZfzP;iNq>kmnQ)^(xHW|Dad$!p_0&-I<`@*xF-N)gQS}VY z=M8dB?wcU#qb9V_#pf*r`OObITtmTnH|C=)0Z_7dAunU9JZeg zRi%OQ=d8){;QT|bh2rm-{n`nEW}7ZOg52bY8W`xVzdRzyvA?qV4Gi6ldymPSlO$z> z_kYUtvtDAr%=ZVjhO#P}qSc5TG3126L!3A8$L5}Sb8l>PQgra3q%9uRv`yN$;3(tjnMl(OI>EuK~BC(r)JS%iqlG*a*<3t6QYCt<1i zkP-Yje;=HeDf%hHOk`~BuditKbR3Vhh=%j%xy6q=O&E24xJ(;c%r+eFgUU7Qv1bFD z1TQ;{DHME8r|_uV2fL#SOyj3~J^thoY)x5+0;ajINwkEi+2rO1==U=STk)HAuY={% zclmkK+p*C&#q_UPfIJayo&xWv>MNP4;and(iJXLp4y=3Mg6pNVuENEK<3&QRLQCm( zr~9DY78p>0nA~FpVh9BlH9MHPGB!7{oK?U1!k%jFSGrEWc-xeY-&KYWX%vwmW{lC| z!&rs;5gX4|Hq&Qr*o)qozI#^R2F3brIq-ec-@JRAnB4g!j_1yksya|bMtWrCRsrQt zJWm&xAsgP6?PvMPHz&9AwFX_8!M#sRs!D5DXQtn=cHBP$xESl}pFT4M#xh)->-8Qs zzL$Nbr~7YaQBP+$z1u-fdPt+~)bi;o@IiT(95e_B*vdPnq3W*7p1R3Cj?EV@^pPBx zpEiMvlwz)<%DGhf8T4@S5s|pnaP;!oFy7r8E{o)X8%yPnTqB3r=Vs#S%6o9#x~wZ< zmnEL!@=Dxh4C;^-VWu)vyXGk?t3}S%E}o}NWZ_mE7!{X}Q?XIr)^9SMl78I|e&)Ir z41pW}xeaf=^Sr`uuoqXhzQq}ODK3V536-7J$~4s0ZtBGE(?hj_)0h}C_$?%H2uy+_ zASE9`T)g}n?a2tk=jU58S0Ef>36`gpMeKMyW(SSmP zw}V^P6ne^wX1!?OrhLA(4}e^CIvYfyVj6%3#KCE0^@g!c}srl`--$nS|`@3j>puGFx#cR(7)(DlbEc zFq)If%>E+hyj2>8_#&^Saz-Qw^vx|p?RZf{DY3-#zK{iVSIv@!s^AlAgqx{Joy0oCaa%Tze&o$y|ifR|4#mg_LNYE%BaulLzYtrRHq1mzCnxar& zzH)+nfFl&twbDZSzB!p$uHI-llPeK!|M;BQYW1*#Ujb*S2?@4$ff>u5TZd5C2RQ&j zg7@0T{FjXv#LqUhHuUpe*6_!tV~uai?&{^1NrHL{_)Xj^&+(Cy>fCJ1dj@>1o`NXFiOM8`s+p6 zRGhZSdIQ3aZFA=AD1R8?Ruo!Qe|V5JiN^A-oY;kmf9nD7%gI`Y{HT@)XII~|4@J{y zjl~)i4deZ_mSlmcTJl@i8osJU5WEK9xRD2?SuQU zW?h|tHS|K(`c6HK*Eh9;7*7aMxiMc$;Qyp16Gt;(hKald*`gCmzD;Y9UP2g>_`QSm zECc|`V`R=-brMpkYLvPprAvvrl_YndNZQVxF`6ajs>(OVfqo@$R*zfgUj<3mCvyT$ zH(E+Z0Ul__Ui26pLN3eB6jJi{CnND?DXmGjczS3C|L19pX<9CdS61*~Rj>jbA|oCZ$US z8q~mRQY3UOHI?{mr`@So1Vxs7;&)A0(@LWVF*n1FlgQde14eTb3zUd8z`w zpx`$;_%-Erg`{!!>}yNZF%}vXL7$mrwF9WQ4^pw~ql=M6JLsnm?M3it(gBq7x=u|J zJmHgLtM%>_8np#MI5@8Tu~IB7o#_5dN_=MIaIa*r?NFuGK@y1{kV_M;@KuWBf0ISB zE79;Y(0MI5(!@pWN?^oy*F3m!zx0Tayn}k`( z7o&N#Y-MJWD7gI|fT|hGapX7TR-3CXQE1f&RPWfMubfL-hFyVeVwNM=A$F{fPO56i z#O_iL)UO+~nUs(IE_IT#=$l!6q|lmf&g>8@Ll|0O=wL3@F5#QY$ z3p_f(rTFCCgX7rpY*%mpg^U_?HoXOxH)2*L5;DCAd9K|vVSW8gLuAbdGk&patL=!< zQD+KJjySGk6!U}cKw-`XSKGgBN$xjoDX4mVl%GZcq1>XyA#JjnjpR`GmgF^sTa2`T zJ3n|FKuh?@gFJl)-S)5Y?NPjz8u#mQd(i%+vOhNc_?#+P*&k2Yo1=ZJyQMY>O)M#m z!b7arMJnj5aQ2*n@e8?iAs zi*==`UqV9s%3gbEEB-3mxg}au+TTWoB^$vC)7n}60!+ea$b~9XivTi-@fL`&rj%m* zjA$N1-ByV@xdN{g;q8Wgr1XgzK_i6%n)(g!p$ODGaz|8m-S8nD<_LU3o(20MZ@`cG zh?t4~28BknqP&@+S{Sid?2%@NMc0GK&IZfYp~{wL(2uw{;w;s{b;8o!a?tj6I8g}1 zRMw#@4q!PVb_?%&I1&66(+e1)edk?h zO5`I2_X7}MkBzlj0a>AVPRVufEig~J+Wp`8bUjgKP}gtt_Hg(Nxq@^%q{`+$Vi~38s64uI7N4&Jv_vpx#BUo);3ceJry^VQ`pRMDAtVUEOc8!8)gc!~ z$p?PJy$VRnf=OZAOny8; zjOIEy1$lH+QzfNRrG}Uc@yuVN1TyGOZ(7?rj7x8W1ORT%_X#JyA!1UdrRywr_3mw}{XH?8Nm zz!EY`P^nc=I3?VbY|vZcE-3k`ND$MI6Hm~cT3_;0c}*lLpEf!lx$=z>8ea&6uJjGF z^W2@*FIWLpA5n!BIYXJawy-Re@d?(_pQ)lbIx2Cr9<8Ka&(&mm)->5*l*Sk_7}#) zq0|bEWR|EKaP5PI50O@)HdAF|i!Cc1NbN_kv2fnCFs9s;-Qn-ITcw)}2JiRfBBu{z zBthN=!0n>vqjaN2jaK<*S8_WA{j9bKPhNL)fL^5dcGYhpg)S3eNjAN5czb@6f~JUb z`whsaPnd@^qXN{H00j(Y;LgBZ;;_!G<@~W55Jtu0xkLr$S@a1A5K&VXX|Dr&g{3o& zsDrZ$!fOawDq4PN)!P7~*e47hhP^9qLVjew+XpxD>}Ioeka4oFV3*SsysjQ=oMG4? z#w^NbeEr7}eR?S9{M}PWdnxBDlUjO!&5FPX#6KQqp5^^8fN*m}4r&Dd-4r-i=aKc} zSx{jOFF+KQaJ+{Wn|icPp)8aqKW@`NQD2@RbP|e37Ja>`(ahE%f+TxWpE*!aW^Z!{ zXbM61(S=g7#+jb@ToG{~{+Zq>42*#E>;K(kEB6$irRGo6@@I zEDP+l4Ce_1EUi>La>I^d8``ynMrzXnFHxXKww*cgo|UussU_e{F?xGu?Mws zB!QSeWV2QKOrIm^gF-=fzT}>Kk3AGV8V8Y&~z^Bov{ zAmH?;1a(&|>832SJ8h9Y4s!W+hiT0S?^)-W|55D#N#{)g1^@vu|6+>%>ws#umj?)Zf%@Ev0`l zz2~FKFmDg#C^OjDsIpgDO0hsD(q&9%`^th@p!bm|S*3n$iG+tvBj_YF&t`}dwKLpX zumt7OQ_c;|=4CPHMdJ1Op{Bf)&(TsJps5A)Klil211kAIhQv9Ul8_2OAgf@J54U@XDFJTjwe~h__PL}j>YP)=C>QCS915)oS z8yXgSk@p%|b{j4$24Q0Nr(Hrtnmjtv$_P^DKf8&h4){qzzCwjfU(t~NANBsv(bNB$ zIsI39=PQY;K@cr$HA%E|$Yx@G(D~K>+J$~r1{Pro(*Y+kaGFSL^Le8|?{!XQOc4CEe~+fKlCR1r{3~kdJiRR!hh-Az%)VnC{N<}v6@`^&1I+o8!Z$u zEVlsez)6om+K*920F~9!xJuuv%q|H{nH)Uc_}Rk?VI#om&TMLlmNox~w>Wc7!_*}< zxTDq{d--#vKpkda{j+R`%Nm`7!U$2i0YsEnn^HJYPKZlt4Zn+=rUVO+_VfJ2vxx13 zBEK1#8TJpxYn8SDPUjpbwwExlAx=%uC#X?LGOQnc9@!94CALAke{Og+ANe1)(kJX4 zRQRwWr~OM0E?0fx0b5Z#}4Gx$>c6S!2VyNn=CD=OxSQ`tsqCf_!hm z-#@^tdu7u1_zOie?Q!%5FnFF(eFHJ-eEzEVvm3Cr_sl`8ZP`QQ=$s4VT)VNryQC?b)h`4}R*l2)lAKa#kJ zBZHGXCD3MMfTc;#8RSUPz&i5W3|6i%Vc1|;1j=<|#&Lua z<}#DIz&>w|M3-_{q9o|XF76OF<6<)PQnTqChHK+ybMP{wZT?8lt-o+ag+u6R} zv0XVR%Qa(A1rx^t0)TNL0ibXSsdOI!iteHg;dp%yp>r6?a!(zh=C>$=LI17_RNCPH z*TqEdj1gV%YCR@bu06Ae!$Om?n@vdcED(GHL1S8ZrcJ{>A8+3R1*<<4wRbM~1 zU{Ja^DB6(I)8QGOtijd@HrQ2Wb+kkld(tn=c$^0V`1GdC(S7f}T$ub{pNHC#IYXEt z_!Pl{HGN5i;C-@K{#aAoH7Dq1^S@yQTmkXV9{F%tk^u`6s zf#sRv%jSEJ>$}GBo!VtW=uQ^@a^HuTeT4x7w*=ZTy)EV}Xo4x?ECMsT=Grls+zpPf zS@fIFirO&)Pv*)|9up>f-L%oLd`gsN+H!-uW=;il;|1A$($AdQa)2ayg`+vRtE_Q! z`TcGg%B*Q4sJ|irwp-%hV>1>kqQoISUr|8mE?ol`reTserT}sDi)R|W!oZ4|a;zeY zrw#z#sfAu)#K){2;%VH3Mu0Nfe3LJ@FC)eS5Ug|5klj{gRF~98yGa(^h;xmf`v>1w z4N&RSL*Kbd8qGsld5rmT6G)FSY}-p^Rv!la{&l~x>|_{dD{S{u9Q!&=oXlmr*AEp+ z`6}ADk{%e-i7J>jMER})$ZA^~G=h(IVqEbLd>RLaKiAPu4_KNx3H+V_f_3Txuo}+% zL&DALW7S)7pnpe;XzL9&N8{*4@tQkv3Q$M;gd_}g#dr`EZpMe3)h8>v16vwAK?IYA zf=Lwt@eu+Io(MgOL;Ia+iol!(Pf?6fp#1l43TN|Mj_VPo8*%N3k8eDwi_^+f^00b@Yh_YC^(J@XGp!Jk8hx0?U3PE+asPJ@5;zM0)B zvTEEiL46J@qJs3DWow*@je2;Ku>=IS2mo@zcAb}L9=1KzoQ9WQ3#VTl%ldjK32%qr z_YxMcGz#)rSV|k#h++w%XPI2GPvNr#ij`qsQk1$3_mCq_#LL zza7O6;h64XTZ)q7lXs@0MbbW;sloigwruUgL3jg#4wah>^+S0L6Jx~U99KngORJf? z#2i0-;R|54RQP_&gx;Y-VZ~P)9B-X4JcP?uip1WoCTWS?LX{FDNX0;O=Cc~=JhFK?OC?a`olaImATMwU!bk@qPUpwJ<@ zE%$JpCLO;>dtP-^tuD$x4N|gZxVx}O1gnK+Xl47e zRXs@jq{ag_sgv7ezQt18rc4!=59p|6SHpKlNMt=^l~1`qh{?w{0ud2&W?Hf@IXil? z(99w#9I{RoyxT+5F_xCNy&u`NogvKRuiIqG94Aa;8?p>dngnxrdm^&M z&zEgxKj$xnQ3#{Qmydb2X3 zmN%BFmdRE9wyBvez0%BHwD5F;%Lj+0UikdJ9kS5+9zd~+nmRSV=%$$2^b};k$Lvag zk**+8Fm=wN{`*dAI)=2%ECnF(z-QN5bev51U?UIaY!DzDFMjHUmZ#-a3rvG@;6q_^ z%4TbT;3NcX2TwZ6%K^@dYN%KOCQmE$H~)&m!$Z|cbM-v z1dlW@13dKwPJDu3(~>8;m&i2mz&;*|hDBX0;sTLI2zMn*ZS9_mk#qmGv(u~xEB@}| zY1833K?M))%C;=`rxVQ8g~qhCKil2a?mY1?9adKb=8YAV7G$ewW%~GZ3x8eQ?OqL7 z^06Gy54-$`a@K+nyIOD2o)Bx9MA?oL2 zjq=&#@WdT0hyxR5F!kG9i^@{-Ie1FEHFYk6X2W?@bwsc;=BDGiP~c$5f6lOD9? zI}s$J8(N5g-VRb&uq5I4x;?p8ODY4C<;WqT-zb;DgJUZwu+043$wQYcE5h1eS4PNC zDKK=;kZIZf3iT@bB`LZj6ghO2Oev)=lLjnFl?ELYC^-Mj%sjZS&4d~7)3@TTXjt)H z>Y6ydE*YaZqQwJlgOH5L*pQW-DzW}1$=rm-olsTjU=Ar7Z$g?fQO{?v#n90=3^LPT zQ+*XQI6ocdf~iy*$jl-=j4+wcVVp}E-a07 zE4)?Qc-1>2*0(Y_$rUGC#FNd!%}@`hrn3KRJ~Vqo1=d|myNV{F4`f#3i%xkZIyy?L zek*}kNHS-Y!R2AcR|6zwp2R3eV=<>sT#yki-BgOqrE?DE_Lcv>zkZM@;Xdo=i>`W< z;Kse>e8$Wh7V$vm88~z7>Yl42;(uQRXcsyrpt0}s2@%A3`E93j9)4Rg7zkC6%=ONY zQ z#7QFWvYyM`Lp82Qx)(w7I}x5P@Q;#`%;WfJX)f9ocH0cwKh z@SL=X5r&wPwVyXZneV}8tiST0-wCzc8vXDyZna^xwwm@NEcGx#o_{fKfBI6h- zWBLeau;~7?8N+#$SDfU?7)A#7LVMQF?VpjA-$}i|o9QIR>DBG|>>EJK1N|(>f%fw? zNB&_3^Or)6gMs*l7CJ(33U1jlx{Bi^=*b^=Sbw-q*F>$lfU*TyarAp{)x>Q3#Nd;o zoUH4#!iEFkSqMisJC5=a_Xp`0eqHlL4awj*{!;)cp5|`hLUrjr2-B`%Cn=>a7waZN z=81Sjq}M`alf(~Qsw{xRADmJ6Vm@tSskNdFpK)OzdY(HHrc(Cy zF_J5P9J32YBhZvOebetqWtcmam5J=3BzdAo-pD0Jhu1po6N|J4iN7c`YEay$_MUQ0 z+juug+>~Gy^G1BbGmXWr19mFGJORC>7L9Xe1~MMLi|JDmQ;ph)EFa>enYr%|vAAr_ z{nVDGVNxXl-x7_ADfE>ai)7<0igYF!cvYj^Q{fRK-4ibl#8s`M*w1$QUu>HaYn;}X z%eI+@`fWyKR_mD|Mb^>F7yt?o(|Sw$z)mfo-YjYIgBrb?S3|rrI=`!om+{}rHr&5l z51K`GDR8BNQUIAgD7VTU69+qI%ItWyGH!xW&I6aEhNVC`c$BuEsF2Plmc@_>zk>Jk zAM$S~O-sa#O|B#yh-<6{mxJE+wrSV<}m$Gp926+H5%TSSpfaszWkL}}XRjX6>XQZO;UC~g#f5fI1F)jOSK|7GNmy*Gh-atomDG&0?B$-w zMNJPO3C?83Fj|L%Uq=`h4AM#rQ(1m5iZLA?>qui)0QrIV`HMk{4}n7mZ8vX|;bvhy z)4k|&6O_9~{|sznkJtI<<&6X2yk;Geu;P;-pCGao$An_@uVn)PP5x0pf{jznN3draT?nn;p#}3ZIO>;I=ZxL;I_O*->b=1NKQqO zPY;8uZ-jU|8Fwe`xr-|F2S4b5xu!HT4C8JGC{M;>mu?3bhd~P)=7}oDT7xH~?;0uEYp57vo!>qSwTu+_*isR*sUgh!nPV4VD zTSFK5y>(7KTWTjx(K2%LZ^(&}AbN=0j))k&@%co0(1p9+=@6W~_^qgbUU^5rCW4zI ze8y5WO8ABm?|X=ZLwISKAIMeM@h+h!_*JN4`8(KEcu%jwGa+HG@C|WXShyn?U(8)u zRalNE4`0}E@BS)C2Qx^=t)3?sQ!u|L#kYNaGiin!48lMpU(noPPGhFOaF2V}#)AH^ z(4a3n{nla8c)ei0-94_&BFUAAk1f5RtbCf#o>FdtHc(9J6J_4kY*htko)rf32z2E< zi4|$=18`}foF(8kWgi%qq7^!6CXL(b5k+d6gr{sv=d$W6B}d9Cci&o(Me~rb^>w+* zFgdQD$aO{>C&YbFOi`S?v@9}z%^j|T$I@!hIJJ6GNp1FxSa8X%K?&N1-CP~~7B|Ay zl!ly{``smS{K3BddnF%ZI|R-Xx@5qInMfee{Dvgwb4Li=SA=j6?+?gMf9MT?9_VLC z)+|^{0p`_!-a0jG?jWC)C@&2^QLZo!k}1(M4E!j~Lnu>SUd7*Q*9UkN!3n3QPt}J; z_kpS{D;Z08BM^0Hg5qhY0eeq`%}}Hhre&b$>kxBj(+@SIVtshRFp=$Pm=AlaVBSoU z(XMhf&EARuW8ytW><|T$d){{;OILiDT^Yt&;&im_=`Jof=NpLrow!S$zm7s~K>W=9 zPboD1G~W7jCBXp?w?*!644T=K?TMkh2*G++u7!>BqhX6hp}vE&qRBr4WA=^6TcccL@QS`6ljul9@xp06&!ZkgrkUKXJR4-AGQ+sQ1F;KL;7HUeqLZNBiEL}9zu zMTNM)cdsOu;V_99y!Hs!j`W+J!Mv=!k=SQh*Z`cp_~D(i=OLbMIg=VU+m-CZGy2gH zodO;}fW64!Wrz)hay4m1;&Z;j;au}#e3^#wVBJ8qezL^)(kxb&7&q9?@<*r~-o)M# zAy(p+VaG1>kgJqbK)(7r;eF|u_h@nDM4WJXJgQcVvQ`+2R-BWPBUwm!%)Z5HgnS)h zOK-93kbbmaAny%dJK78tlMjjYaD04Ly6dD>(FTlLFpbS%gg0zH2Sv3Y0sD8ct{^4N zeSZQsFngRrp4GtTT7qqfRd|<;J*=u))7XO*6fbsx>g2TZ1F}`h^*uj0?4@y^NmCi# z&T&2oY_ClrKARgF7s6|^8|v@j@fjn`WbwKYlGJ0SyfEy{C)Z`=iXHIid4l?#r#!Vf_#@~&1I9lWA-@O3`>jWs& zBwc0mcw(%Ic4P?92Plt)xx@7R9% zkR@QQUcMZ)57qT(gMVx8MLxm5XxtV>GS@Vr{XlTC>yEN4*5YlUr|}4N#ik@zxDeur zIAhLJ@&T5~oPwSkZ;FesAWe*^l$GArAeE5|JL~LGb<8)Uxg98j5>XhwV(UkBNVRns zBM5-*-$-*M_V>%!g*Mh9`no=dTd%YvL4F_UazrF7(tW{cCCCfqy|u&`!!L0B!;Ig5 zyesaT+kc2f6YYg#?+F8cqwbnedO7oH_@i68WtLL8ARIE&vVug>VGSO$gH>-BY(}_j z6O?5Jw9M|u23?gmc5+QUy8fAt?w-JULALvILQ5Hubs*rAj)VTBkX=BAoOC7)A8ajA zwIFtZSotIKvPOjSWv_#;BDwP6L}A))nCyFY~GEP-l#&ky1U@mtl^ zke*<8>YYwd!P3!F`1L|28sIxwF=#-6<0qZxkMR}issQw!AIQ{me{p+??+>q2H2(%C z-KgGRe)wMJ-%W8!6=osWS>kPK6`q^?m}^^TmtD=fYv*6jP}Z!?&0wuLwG2~SmXWOS zzLzie@c$IisZf*1U^jH|5=ns6HY%#?r%nW?5CQY2=aN6@qcslaNkl#uCxVFt>(2@$ zpp0{e{B)~vUFwSzAvF}C%$2`76x@=Yn$KC3B6}ew{lpEZNM70CS$N^iEcO&4I7n<2?g5=V(AAbWQmhtBvve|XId!6TXY~dGz%AQ zxPa(zw{NLcfGn{IB&HNfOc&!!3#9-6EdLtQmg&8vD{wZly*)m(d=}g4A znZmbXHEE8F8U8DRxeTam=>-HxG?bLkh6{XKG8;vu3MMZR>Q0CA6QjT?(#_3=6U#UvaMz{6EC&0y*V(R3D7`aS0Nq_rgDygxAKAS^w4fjTN1-xcZj zL^(GWB>pThD>?f94xBEO5TIosZ&cC*PS9 zdCbf{KuX1U+0TJ)U zbepmz0jZBjFIUsoyedgC`z`AA@OCDgTtn!)Xo~%w_0S~|7U^U0~by%e2u3YKx!N#>yc$##9}>-r!r-R7Y_OqaAhA9r^e;I+c&g~UepV-Jjfi8T zW>3PeyjI@>(7aW&6AU>@Ghe(DieOQI+MqN?-^}Lh7(4ceLFA*ktvt{4Tc*dT)i%ZZ zP)U_0o_2sx8BtcFfxX#>t;q+=UVzON5M1J25$031zi05ioXW`a3^jmwk=D2O{dQlv za5sSRLdREnL_hd{lF%CAlQ!2B<7npFegS{%(xSjx8N!^=u` zd)z8!Mz?OED*^6C;lFCbCjg$m5e=%G+UT6Q>laKs$I;Y=9h3uY_Qm8M1Qyy#+Vi-Z zF}*HtxP!=ANPGIHy{ZScp|G0!IV1&A8S4C?4>6L0>jabvm%5PHxzz^VxxLe`^^9m* z0NS#vKB*YmG&yf*!j-;1cCCYhc|FxPs$A7}WOX;3vN5%zsN?V;!0C}%7g-@{8WBPz z=?8XMDz58eiri-U{3x;V6&F@F+VRiCPriMhyA|suwWd7nD92V-BwbW~E{WsO=uvrP zuGlbrg)q+mYcQux%rTN#p2b;nCCw5xqmzfUWrpL(()sw&0|5R?JbC2PIKvEE($@%kpxtn2(=n@c>EVic*eKj&!1S)T?fWvZ*qwup`~*!^_fx zO$o4)6?V_nkz2}e7D%L3eN8RGQ7m@PJ(zv?lVTPxv7SZG#e|oVc$v7gFq~u-oNRMx zzE#zz{@ILNQtPU9%GeDFR{VRStAsZ>Nr)of@!W2QyiK!@ix-W{{QH*Pj|jRcX_N?V zFD21T%bA6kqoFv(m)#|k_$^TDtDcwZ=71I~u21tM=wz8ph@WMQc&EL z`iL+wA>C0xV|=Km9Rq%J!1MJUA;?B(lhjSs2Uh>Hj&?Kk?Jwq6isby?)>8@nFQoYI zk%BMUmFgn%7wzgsU0*2y({bpUshvw_1Sdz?!A!{2(#W+J?}4@`AFm|qs%VYivDRx3 z`9_jEH?04AK9JO)Nzr9`EGyY1>F@i)2XvsN=Y{cD@OA!`afb0)tphnFoM%>a34&S+ zR>a`wuhfv7^kL(=({9{7ys%?YD2K5c8TEp#BITaHsm9Z_0UN9P`hTD$yRJ^%6=R5pRJw)2Xj~eCePWmEc|Bex) zUjLExItW;M3cs_$qH|&_H?cQJl|s~IxXgP<$?>L_mDQ%+)9oRT?>TT>jka^+*=c4y zEzO`7HRnCWCRtIZwqIkk|X(_x);kPA5>y+y5E2noYb90XvD5NNx!{|Q3XXSpUyIRm#WHY$V zuJ22$kKIM$m0$j{5HGHjKf`v5?o&PW7E!lIS2?vDaI2^~n|CbPS&QfOQPB!p`SjPp zHbC$p$egF1@HpAAHjmyLtM?+P1PWd0>X5=0RC+#V3@I|l5c^25NPJ$NVGqd1fDeY> z;1eDArrZfo;yWC6=G+l7a&7m@P1B6nww|;`$i}U(oO)s{#IdX4U+*^TgIN$9|9Loa z3S~8ImAOV$3;1V-X`+;A6y+{Yd3MD+ zF0?>kyhyruppZ!7p9@RDH;NgictsFLuntH&%sTzvxS)YOD>T*6_PL|nSq7rnK`|}K ztgZvV40=Z!hu%6HWNE+#ULGBmP8BWu`ODx4-!xfN1aVaJ#V6T3G7ZML&>KAOKn zC#!&Nd#d<|gBv8?LV9w(?6Gv8zql{zz@|F4wL41_+-rZT1}>x^=jgBNy_H5t96;V@ z=a`CZk}VhI`<_tW9Fx4oaiWG?-&w}Vu%Ypo8Zw5f(AepCp1Y3;tT#x|IkV@8{E4i1 zU*;wOwZT7GDw+6{TpwTG?;phGf1RHDSG4B;S*j%N>H5Wbb@{Jl_aDnGRaIXRT^NIZ z;d@6@m9J)b#CUkCz5qZ;sEP%2u1NX=1|{}Slj}&k*_yq3OYGqqbU-*$w~dMDtd#F# z_%quguP%hOCOYBcW=5ms6~7DB)7#8UIEY1JTK-siG7HmwSWFfxKvk;1us1L;Ch*RB za5gzCWLtrJmTEUBP#CiCt2?P7NLo*sIrRLiC@J3vwjxLu>}R67BOV!o6T7Anwvx-x z|HIf@Mn$$R%c70DJB_=$ySvl4ySqD$6z=X?xVty*4vo7*Eed^HyLSqwtzps?`|Ft86loG-~g>>T5!2q+vYU=rFCT$ zIw%CBTz~`oiTa>U*G`|BF&x11lWdVS)T05^2J<`nWg1^4YTH&c*W|2T6W&KzN9RsTho>HX@K;aqinG5f9VOY+dgdx)d03qA zY{CN&UsopP13HWeJPaIskZ267Sh-K$7k(V*_$-QZJBpf|0F|TXR%Alh^qL|gK;TGY zbg`{Is3@c=O`zdTn!c8df>-*9oPp6}*Pu{{I%gI)Cd|85y2ci>wqX-rSf((Y&9o??aHNrqu0O3^Ga2 z;4uoS%$*}hw(hspZN)A!?!LbiI$zmIw!2?`d`-wO6M&~*mAIydt2jkYQy z^Lr2?6}R5=g1sW0Fp`iX2IN&6qF*_cW}PuhRsG~Cf6*z12pk^i|go3y>9nX{Fv zk+H3rw5yrj-x%T-!~CgxiY|6+Bey64hg1+l848)K?DTEg7_wHHINrTpsax*hJ`igGqYDV*>%X#7?%DMRD-P+2jx=OK>?;_E2uO z8cooHxByCo78aWL#jZd9h9KxKimDH`5@E^b*KzQ9{d-Vl{e0KK*@Dr?(a6NojM2*7 zi_yfv*^Kf3230vL6El04|B`?8`)?>swbyA8q9roG07+=rbbn@H7WP7BPe+#$5@!>j z>lD>$*t9F@Bm`F6V?(I|6X9ofdJu$YHxuo$q+mUv5`1STOb&Wc)*h&ray!YsU~NnDUKqFD)B8b z_ZxE<2*zEy=?T4p#^V&&f}?z`xh-V>jdc|K&ECBYWcQPzy`M#%PT$_2d&=EQ1}xXI zTKxA5_6+riucjqyv+K}G0W*?(o@Md5}>FId;Vf9q`4iPR_HyRN&+SYdpNg%LMCwiuEIx1sF zmiu22u^6ZD(@37(F<7$vspvj75~ACz*1wI}N*MvpYZ%YW>&CO>8zroO!@=y03hIef z8vSM`?H@Jp?-$!~#8~A0y-qP0jqR;t5!v05;{N?n_Y<6axl>uGj=0|$qbp3DYNg-4 z?HDW;@`m(_$5JpW?Bf=RyI^SD&2525ENBpA6FKDWB`#OzkQAlFCd}WP6#q~O-z6~0 zrNF`_!xO8Rn!4VKXqf#va5DuGjHLJZb7gKTUf zKr?}W(;NY_ReD1pm>+wclf?c5_pcx?4{%d;`vg&`e{?tacg~If_rF?R?7zFzzvH`G z-A47R8n(ZJeHMWJ`X2sDr*b=s8;qeOmx-Dg zX`gE8If7EcxNaD0Z!gE-=W-w+E&%p#?{ihDbc(U&aWvA`JBZbvzH71I^Xd>aMg*|y zTyJGYQ|-Ry`u5JI;ci){c^I6bcO-8g0@7=4bynxs_ZPLi&^^Z-r~G!?ntja`15ech zj)hGpuRe~`r-J#|2O#{mWlvsN(X2V6|0GJ0-cQ&n&@}%v@3&(DjM^=54B-Q2qg8j{ zZ?diKhHmw9J8itTNXX_sx1`^rw%us1vb7Rx_Ip&YOZ44K4s4BD^v~K{Cy;gA#%ubH z}LP3EN&cpSsQ^u=5A%2Gw+s5mYfCkWva!PB=K(kDwK~Q#ej*2J27@_nZ zk@3qhYTd4jmIj=_!xlunvNm z)Rr_{YA=E{HuZ+;&qA;t$P|G^nN4WB%jr0JT$cAeR;qbC>xi+lNhCYzy(`7WmaOy1 z0(uF^u^PG?cx*q&Y|=vPzZU;qL${8{<+9{8R%)d?hM~NShtiGB@0O>xLg<4pW0w-~X0^#Km2PC6X;hVD-Ve%X!T)^w-W zEwy2k(5MUw?5aDVC%U4$+NjQHUz6s{@tEg7&T$Q$D-W8pdlDE!l9o*owotq-%dH2)6|2LrpKwMl&e^ig4kTMgn+TD3L^M?g{X#n0OQ_z4BE?{%pD0P5hsKx zmg_xlE=pRr&^fG(T!UG0R8OQKxxrQ>R=X}7gU$$S!ZUm(p3)AgvhMWbio&l!eFZs3 z4zuPx`qBiR>CF?Bb^x*G1b1#O$ZiG;n_Y`@z#wZ$R<( z5UF#$2)UXb{Gtc|2+SLg@cu#HJfg@R(Xp6{`>6UD-XUe91k^7D##<(q<=k=)n*j{+ z@%Ed)_)D%he56la?JkWCLv&TE08dAmU%*zb9dt7|E(5DLs5EW-yFb2!iM``-+AMzH zvLnCsjl8BFP;Mz2eGvW&xOy+*W7R%EtMDI%$o}Vkk^ldzB01{oDrmyU7Z7BS@vrhi z$~TGmb^|5_1BWy1KG*E5+$r1d?|LD1-Tz_unSSiv}x?FESOSL7nOw@ zy<}+sE33#lmVnnTa-@mVu6BUeTGq(II^E7dqqga&Ta$*j(AsA2JmV;?#Z!~(45VTb z{n(aH_m1sR@D%s#uWzK_p%-`S7eum;pVk^ z1CFcl8|{+2$A-#GX(A6-jx5n4XHZx5ty+97{IdCY1w#2=k3yNwbu;!d^T^CTYlEW# z0iUVg`yM(&cHmY%5g)(RexK^b@@l-ja&8kTw9k&QY(mIw_v96{QR-usD9bV+qAX>N z#-c>Einr@Tv#`1JTZu)4lvxbFqn$EtdL22ubVg+yUZYlmj2FH3eTjl9_XQab`fUK{ zPlgJSGIPs|8Z!)~;2u?L+}}!VOzHSbaggsN1KlsyWus=}4c5y12$-NHszXO@)Yv52 zF_7x=Y7qy4BwrH%PF{xz^#E;Zwk+HIo<>xp8OsD7skYoKCG+4xaPE0x7b(M^opj{N z^IeQy$SCa9X430gojdsiZG4V0Z`k`bOre!ke$#ry?W=9=Sa`mpd=WuWK|AI?k5FhZpSOq+g@^h}KO6h zRn;WpN6Ss;N0RnH!^FNnr^<9LovxDl8WX_sZcr^1y+LR^W>Lu8%9byLW>$Gz3Eo8^7(tMVHvw3D&rtsg&-mu|AMBqhtcw5W&!+T0u9g+u&77UB zOwIn64D0_ojrczg!GPaB1xAIDKPbqw603xe#e@bqv%odIo7qhiHUvc9bjMK4TXKDHL6T&sMPK^rOSay&~Z4?G~fgP0p&VdN&pT zgW$m~XWfP+3~eWq9T&9giVl(;K@yEf&XaPYQm7N*B6B}D8|Y3xea7S{Jwl|yBX@uL zZMPwo`2GxgSR9{p99L}*lHsJSyvj-UrxPJHfP=KYZhB&4(uvZB;WgK_VITg6zwKZm zJL3qV9{}UhT{Q-`p^a8T=a8QI3x@S-4T$&Ll2N0nD6WMG{583ryl6+$yM;y*LlDBXKu;H4|DoVS_%1Bnh zTZx=SENwHg6n-;=kC^3I7uM$?1K;#QfZ<(eY zP-~Dm5%{v7;-7*3ot6ykAO?9$sDt|%Cc)GiPP-uhE`|`=SSryL2(Ba&-%lFCh9ZsE zI@>8bt4a+Xl1Mn$)}Du16Ig`K^NsZzFCLF{fk|7-*O%B?`QD}q>tkMCqqD_La7SY%A^nd^SKvzgTab31&Yj|ZoVMm z{wkyhw6aVupf*3PAuvX~(;PC1#4g*g`t#SQ!X1KOyy3GBclgJ{VupW?7b{c7|E|8J zP5-XHW4>uAqA6qZi>76?EX+e7D+!rqDZqg>l%XrBQyWQ#r0<}K@-~TfaLYx!p}&Fk zT<1s7M^H$7+Nlm-DTGA=iT%i0CNpeYt zC)>iY!lTkhs=~>oNc4^5262zXsv7I%IZ_Adpd5D~Pm{Q~iY*gG!_YSc)MnJkOEFo- zd#p}E<${9c2E<8=%E;MMexkp>iAZB0$d6$y9O4~XnTiT-Z?UTRQ2NC;K`L=)O|hiCUQ2H-DRlwSsMWG-LOW z(5dxfqMoum;(_x;-=I6{Rc)y}vN8%Oe7BurT5f7gE=ZH>)-0PM)J?Y3AFZ%h)&BH# z`Ek3gR1JZsHx&Slk-RLus#RwSd|iKQjlz@ASx2GyNwH(fKB~Gn ztk8X!)RNcQ6{he9onll$wMBTJ;kNsheeF;aq7bjPmoZKQIo>B5!g+!% zOz1h2VOUHR%u{{1y*D2qoOzG{KFckZ$GGZ!n;1`@RJSNLWWC}fzVd`bL;U!dCvRP( z7Hvc&htx!)9To#4lzRe$`@W&iCanF>u=Fv%c5Qu;Tg0 zu=)?}?f({5DrWAVCX^2L{~cZ_pY1K02DX1Jj44cINFY{|Qdw)A80a1ldfvIQwc zku&=8x2ipX0g?gKfrdy*DHh+NJt#i)8`2*2`tMp8sE^-@HDy>&(p3|Ts3+nFq9Z|j zRF(UJBJCz&g@oW|1u2lj5hx%!OoHKboOLK}=O-!D?IxHS(Li&;)-l#cDKX6=9`>3v zni^oV63er5nOY1eRK#T!(IZb~a_?P@*BWA?IWg9|mu-&1o{C?dJ*>exE4%np?X)5wdFhn*D{H{{(5=BlGg@=)fdK zqh*!nrxT^%(ey7lQt2hdS2YuXSctVM#sF^w%-d0M)ZlwUOv@ZLxq)0%E}v|UNq_L5 z#-S#L*?PnD7ZqS#xsHu9t0J#9>(#K-T^fIvc9kaedv4#fwpn>`mKBKj(j=;|H$iy5 zVC|@H#umyu1V3-a&x_MX!X$wiq%~os98tw2aao1+#k8r&>NLGyVX3;jHjJ{Sl4E1e)AXi;e^>}soqgyWOFn$0BHGxC zdeG^DjqNyp=M-zT05b}wG>hm9V%dD`zyVpm3VPeF0$r@i1sA1zL?gl|a!Obn};)7*SgP!(ipFEH}3-EZo=g|jMRl{1BvGovX_BwYp*EO}E zQq2cM=OqgALzi;F#Fmg|>uc1U%&7eB2=grY`}}+#cs--}NNj-^Z6W|m&7ZMDGhY1WD^uPBfgIwZUC}cj>2O%S?OM?8Rm~iSf-W37*q;)y%LwJK6D#9+yYg9 zy>cC|{ffvf+w0O8x|_pPytpg&ci2B?NG^Lq0AnYe>*YnwLqz@N)F&QrN2tm-L#4r) ztN+oH-y9nETK-jRb5O&rY}4O5vy7T?;saN$9C%=H9G>%z+_^n7jpnm2dM+T?DRwTW z$FZ#;=o99+>D9RO@z<320BkHx;Ioen|HnR-?ms5}zx&t!#-$uJE!A~(^p6l`7Lmmj zb1P{n=wiBt80joFxDZTT70WtlxbN6fXsbOdup-VO=<}1VYt#2YMm-9}U8p8TK3A9m zYF546^wYSrd)+bH;Ym~LnQWgKkD2%B!lI&pkN0<^FTt~*p1gteUlzaIg3v{^k&=)a z3lA2ClcRWu`;zSChQE?%@&}#l7RE(!VZks!l819K5(nDD{60A*86OG+k1#>?ZugWG z0n_-}?uig7=CN%X7>$jEW!e=tq1!bvR2J>zOGO&`i)G%IGsXy~m5F4ZR5$5{xn?|l z0E*?vNm&9ji6yn2%1}xIB@G;U6V%u5Jqa}P^`(@cEN(HR1~+st+RjSCNJ_{O$=z07 zv3PMl-p5EmNOqg}_4FJpwK0rKS&{vX%N4XQD3Dg|`j4pA^!E|;N&sQ-aQ2~@Ig0$7 zsY@$7CT-nFgieJW>jc*reF~KxMD4Jxc4&yUii>#aEP-F9DC4b&0O?8Zq z`^=BMpF6j|5I2AY*8n@(KrfOq74lNNc3bVGv$Ai_ALRRPb`4G@KS{oQTh|SxWD?pw zsCANgu5zssaj$jX(KL~R)#<4lkG_m=GGa4L7D^5F%Z=yP? zc2jIrafKb~#owOyfQ!D!KJ#uzhl_4s6wi2Q%U;UV9Mv<7;smGb6GxW5tp-RE)uMxH zS90QXf66Il=6jaOBu^$(C>!9P+{x*!w%YI(V3hOduPfC6bV4A5s}*r=TC5MGY?$%% zt_~=309GCq9riV>G(Izx?D=0-`Ban)#tN#yT26rgIJO$le5xHuUP1*n5u2w`r)66& zV8lU<)nm3|AKq4x4yV*tQTlffGpN33)J+MCGc2|t{XJcT4-%?wS?$k9c_Z)eO^^E{ zwggHcwKO*_+0tual5qv&drzrv_O)7UEq+yE1XHA5kL^-uGQ_5J?zR+lQ=}1fT|~?) zR%wOscbnc2)?ISmG8YEPbCOqL$c3un;R>sOAVE-C7cwy1^3PBG(|%_b7Y>lfB1 z8&1Eh5Vku}ta9g`tHzuzQ1Tad{^IQAlPJ?72t>#_1*cg_Al?Y9cwdn$s-h>@a&k$d z4m7Q3(1_?ZE;JnpBS5hCC2wBYb{}y-vEta z9SY9!(+eGXaM@7?~`n?e}Zw?^6N|LQ%=r6!NmR1fgG;kzte0$+Q|)5niFcYyXOp`AO5F4kw^( z#|%_CY?sc|&exn*@3SbcRwx)d$r~O!TF{k|6ka2=}6Zd}EeVpqu<8jITI6WzF zHzP?1#q{-0{IwGdFZl-fE(*+c;W;mcxgYJ*-V0TW^Z94xlxE90|cj#&_^mZs2J z@xhP)2}nC^^OfOi6hNG|;gB{U3x|W*cQUA6b7ZHP2&)-W&Jg1(I$Vv&Y*2)yxur?l zP>?jVCR2u=+%P6U9e_OG4u?`?uBaU}frB8~}y$!0gJ*H&~aqYlI^?N4pQ+(|b*hLpevf596yf z>~VvEqqwJ!Q+fjf@G-sLPh!a(&SA;z<23b+3$v(`9o7O6USCUonnM$s)JEskotHjk zM_ZsIIU%-Acp`dCJmK_E?|W?!?|VEYN2hu1A$fiqCcII@2{3kW*jZrN8YIARV18}A z35Q3Eb}AtN$8yHBz^uwMN46HklJIB(0s z;QcOIOkezXBd||M?84M$1X{*U*kMu8q_$M$SBj7HDtnN#W{enBCKIDx(Ib}idcDHH zZ_t+2v{YNA4c^qw! z2+4;s$F8I$9}R_t(P2#%WaAHxL-|H!LIK59~_TT5ClC6kxM#66*F zDAgtar2ODAbJ^#q_#ixw(dc@Ptg);!$@<7cTxtvhEb{59;H4?cCp?}XMBu?26St*f@3SmZ z?%o>N3PreImja=>xUlY(%>l%tTH2xzaX_xGvFFTL=O=(_qD3zh^-8nq{)&oM2XwGk zJPq7q&Q(c(N0aCh5H|xX#mKEFVl+Z}a&*rvVf4~irgG>O|6RGgYvWa4)0upl1 zgrd1mi53CUZV;1P7wE*P9QP!%F~~~$0;=EK*b(tCfVE>mKlO6YDIUrG9Ag-6*?Y>h zU&;r;!G)rd#n)Uh-=Ph}8Ha73#-U4284QaIeL@N_04~Cpml5ydD(G$Pr0bDkeiiKh z1wOP^VZSWL`evQ4RSEFqSGl)~$Tovmv^)InC^mO;q|cJc{Fqtd6=OYsw>BTx(zvvH zH3oY7=Z?1_5QmiNL`s#Fw9WjzSLVku1|0(6>Og1zZRpZq`` z4}m8&Ia*0fa5`hxQq*%NS@Iq%j{828JEdoG>K;LsFnF=?b~$}%emQ?he|C-SBff|O zE91W0UC_@RzepKHPO6ln6zSOw(E=&8v!lKc>JX~WzfELyBN#8!^G2A} zgHs0Kyv5qxVEICqjGZ+?_T09_Uf05KRXVknjBXQ|eWHsv^>mYpm8o0a#aoCoM}D5o zn$ogFk~!FaAtx4F9hY|t1}@<6Y{?@@$K5wr$qDYy;`=9 zlzF6M;;=Cf$?MvaCheO#i?FWNW=+nse#!=MpdD7xt)5U@=PgAOEX7PGMTlJ}hxKaJ zIC8}qNg!b+n{wSw`Y;XsjEiWA#>RXQMem58dPlW@=XCEo-~pT>dI+-kIND*!Y`T#b z{`@qLM><*+vr&hC;CEabwAFy0ZhB?@$x{LqWoryC?!&x9k=gc(#mj{1GH8{8K(t_h zC$o`oU> zVv?9!I(e}~;j?G4Our}*TnU&{M_39vlu1o;(_UIr)TyWlGTWb4OTYWHmk|^?2Np4>HQ|`c)!aTPxA7Kh?V67$q-yN|)Kbr3BNCfpZo;F%E zfr&r^j-v{_hU5{gUOGL5!-(Y)y~MDUDMiG0yl%3T@@m++1Au7MTEk<|Srd5UmoC(K z(?gnW&i>obznVSA>G~jUNnrqw=g(b2j2YQ`>;u`wE9bw4I9~aUs)3&a9AvD2s_+>9 zhrQ{)R2NsB7 z$2~D(Ob&R-TNv~j)Jc~r53!iK=E6rXa}yO1M$o!XxC1rxYF?6B3<65%yzS?4*?r{^ z@YwC4@Bi|+e)WZJfE%O}91rZ6o}nI# z$=S7XGHgphv)Y83m2qNd9Q9SLZ8?V9(q$m*H$nJ`sd3h)7G7!uKEdQ5B*j_=H0#{Z zpgR&xT|`7R!KBDwaJweyp76Ozp@A5tC<%eYw?R@lKG+BttwEFUC{I*BlH9(}YXFP{ z(YQ7ot4?Q-7@jG?R0Qn?wXr+;RUFTJ5BedTYrKCem}F1%;WwEviG*P|SLi#5LXpNG z4jC7hHSY4FV_B8M30^#)IGzTGT2ONmh_{e+H?`?4Ax%EYXEASk5{Y{@dl+48gY&{f zdn~FcquA&+LFZuQCmKin=vY?au%csm(eZM+6hsuf?9^mf%lYzR3aGD$=iSv*>(wU< zB40*q_A((qHq2?liufJL#{S!jO|f*7cM4b|r4ZbNAUcKwi;ywb9~ z5+k#1myHw7bF(RBz9KR@(Whn;*nBgCc!B3ao82(eK@Mk=R#z!ijgVGb{*{x^@kDt#vjv zAo@2pqicm9K<>#L78Nk4!zXjWYr=zg3m(SvQR$1&k%E-A&#TW1?jF^_5YnpUqJ*J-*y z;_y;fG34F7jUE!VQ-5(YZ&XlSp2^3wC_i!0{6142!dM4mU<}7V5?u?uvT)KUoI|3d zfa?agm;*2M8+^QMsC9O&)k{_?y6^}!2#YSQ({^JwKcgyT(kWJmEu@fxeZpTNg%k)5r9 z0?xKiwrtAbWBcHp%YA(->SBOSA-^F_JlaUwe^8Jt%!;m0^zSvfrF(*oKcCF)Fob`~ zEj0fzw|w$!ZHz3;7%W}wY*WsMdT)171CaZ>L7#tWe3Agp;vWC{bdOv>rp1KcG z04U$@9*U#uF)$27r4^}mr~^lfPOROX{e9W|Iq(PwQRZSI&8*Bs6p|*$#L~qQ<07fkvEfH5FHeo@ zL-%`;95hHEsAj>WM7AjthQ)Mt&CgE z-SoivjEZ=tzMqq|I$RuLTa*&ryn396t~3tNII|AngJyZL`btQUTfd6E{N@7=H{t4w zRCp_@`35PU$x~CnjD=_`bR$?0FXcmD=>nhYBMO%ldWD~?r5rlU$u@2hkc5)CHFCt~ z+&l4M;yjDxaht^@PX7F~^=Ah^8$R^QkhKwBKGw#m>)J{v`$B_hBQ!OXnswrHDEQyFjMt*h6v9u(C8UpBnkbJLp9ch$&{JY^rv zU#257u!L~xV7T`%8T7!Qs5;=Gq`{zxYG zWajCVzft+XvXzClG{{uEeeu&kX$A$)04$S z61Y{cxD277&koO$_}B+cv~q^k}MO~1qIkl?1k0KVW_@6%-V%P2d#xur}f zW6k7rY2f{mZWH@Dg=9@0t?HBmw*YGF)FL^24ll9BEEhY`Ddb{HSPnD^Y_t-B=QGv| zjTwQMTQl@B{qT5(xT%B9Bpy&l2$lO{LTcQ~STHoXMlsj*{>Su^_~m?4NsgkaxzZF4 zo^|g=!^`dwf=}WN`I_|d5B?Kc_#c9yFgh~ln8J6|Ey*j_mCCHn%c0vgK1EM-@b2X| z(Av`)e3RPFnhz&9BgSSE2i9H5cow~rZ>cK53?nF$!O-#kC9@CMB{mzBmNHxVC|z7E zMZefK$P{Mq9~+jBxu;xj9f_~$M`)!et+^z)4rSG1)Zzc zrdG3Q%%swrRnDP?Yjl&dHl4+h64DfVBes3jXN9kxW4P)wA3H@gE1TkU@ZugTbncw< zv@4{T&-K^&IuIc8wgu@&o=xACKIX7bVcnQuEAq7nF7IfzJ1lB`K|eSpY_c_(H0iev zmTcy7q`}Byqnn!504JUSdmQ+Y(|PePB+u`j&AZg$j1p}+r$6yTA$Aft{W|TrG6(Hq z{~)m_mSL^cKCJ;t;I>+&e*i5KkGx8b|477m3YA1_F|Dh&KzT3yV@Gs?fLpExK8R~Kt|}zQSgt+ zzmfI+<}MZV6IqS^(E$5DP)S@|ja=Pa7*+qe{av)%#c#`i3ZoDIaMGA^n-a_bS}JS& zg0!16o0CTdH^!2{+KTyA7jt4?)hKecC@zfZItO;IG`A|xMg!Ty>T>j$!|Ea+u)PI> zSCBBIj`7@>>1=6(3Kz(C5^Pw2vE)nPS9wU1uH9f}Gnzj?IlP6@JN8tD#d=EHB1^)UM|#Wj zme49DC~tD^Q?5m7Om|q(5AM&7+nZ?o__1L$=6K%*Eg%YxuYE4JU?isr@HnAESz!Qk znp_LTId_{FBW&0b`!aKdPGr292;w=nY&7$3JQvE*?M?5I_pEj&jm40=LODAUL0NEb zA-A|g#?k9gE+_6Th<0XG@er1YE%5`08Scsw2+!i*mm0R=nnr;1No0>O)rl936@u>~ zcJt1+mE(U=6!799E3jcnug#Dir;s5b-$$tvFSeX6SPH2w$sSCOq@*jCr zmaMT5GB|Kla7=W~#NHqx$$k`Q4KgTHDJdZ%cMo^gF;nv#QZmmSKZEcxDo@%%ORJQ2 zxs;a}8o`&bfZl+C6@K0<8&1s3>bIlrOaC92{+kX*?;npdKfbI)U)?dvD=0u-TYgal zchng)Lve^|BiX}8(Gc&V-Q!2OifW_S14AKjlVHkNEtuAy1t zPqA!SszG}gk~5rGY3O_f5oO#57FU^gPwi+wR8xYKeWn3r7-2jk%Y^V+;eKN_Y0V(8 zA*#M$_>ri3WFKrq7B}V`UiD6kK)2`?{7JYHKVVjf0&kk|R&=bzW zY@?TyML?uAno;wW+}m{HU~U;Z-U$xN)OX;T{>~3dRLI{`G%0Xs7h$SsbgA~Uq z>Y;+U)W4=}v!0DqdM`41#f^=B{-7*%FCCLQs1bcCbBat&s~?AUDSo~w5rrH$=)D-u z!Gs=>k&0`Di*3z@Ac=1ZsJ_Ggo#mvVLE2KpRU^N9QzXuuTs*$md{@<=Hd4T6`!IJI z_p3YRbr1g4Sh?am-BWjn`%L4-(J-rN+>X!7KG7FiXlaD=DeO zgn(OI7bjPFKtgqy8h46~Pfxtfr=%3Dq`WdxSYZh;Gnw^s648pNv$NX4@3O7(OeE5- z^PLUp^a$doy9l)`EBzD>s#2Q{E1L!5&)T`@N>G_Bc2PUG*P;qHm54Jkm?P`EhI1)d zi*W5^bm?OEg=XV3qp6~dpTSuxsa>=;PyTwx!Zbi!CxVqp%6y)R!QTZ+lWeHk^UaH% zR5_K_%c1ZKc_FAJ6P1xB<^khw-)?PuSO=8Z1_Vk}0C0QOi}J8k5tT4QKXY917N@0C zHl#v6tZpf5%*r9<$1R;5A5as-s$~StROO2HRkKDLC!M4jvs0=ZcES|d_#-#ZxZy1U z3k4?(%#oRXWr9Ptpfr9%7N^5@+*Ln{JELpLGr3;tq44Hkz0r;Z;_WvwjEc2 zVp{;JhgSwKRxfTf&AF>9Vy>)-H!wE6KkwZeN$6ksx z+=Q+O$j|r^RyVt#hNdm`{BSW^N?6z9jZRxhN#qt|JjIl%{wD;;Zqnv~mvuXA2A16 zR$}?yUt{<|mHJ1fU>yC-Z=g)>>jqBa$V=+bg z4A;{V=5SK}NjKL@HUG3IEH_JSW?SJJYKYc45#$3@Ouh(~vTiA)3FOCIMvN$bN7IxC zt^<-*qEt^rpr#Aaq_ayZb+MX7Ip^~F+!9mwNg!7g{4pfxgI13#prG0) zq0^A_(UJBK1UE|TvMLi}{8=C8Ei1_nfBV6AnE0?Isz>s)MSE#D!q;r#q}`k{ZS9MP zf=Dm*mG7L~fO!)aV-Yf+AN91S13GQ&4&&B4r73vp(_8W{rZwCP^v>pIx~GHxr~L8n z4(S}-jBTx4EE$#lzKh#iSlR#APNJIPgnhpdJl@?J2cJ$)J}T5sZ-0(+`Hq+lnbK8O z9c)xTg*GagKolBkn7@!9WcSd*5*8Kdz~|oITt(=l>U2*&I!3Lo( za~7`6JWjzarUQFHH=BBZDU?BH%q^*Uu0{r7#=gD1sC~@CSuyk$&$Mnn7De94L1uI^ z!eQx;WnmdhOqJA3sh-M^+3x-BcKOW=rf@wfwZfpB)Fana;qxZBkBfsGdWy2^3om3! z!QQ9QbKs7Uo2U41l_q`(B=TWu#_opsosN)~zm`W zAU@z-WG3h^IQyO&!&V?yFrz#1fdilbvobDn6I4o5)1h^0yrhC%dK~U9;-b&QN)BQM zg3(2>54)A%1V?G+OEcO!#|VO|TTln?(dIKcIDq=Ld%5c}E>2!@S}#mrdYM#LgE>we zYHLeWiVa!x3rk$}Fj0M!Wn-XDe|$K(FfmufWNnDHzDZxj#Okj8$G0Vl6jyGo`3CLp z_giKsUi_+K<@M3l#j@J~CY)!=v0frvKnh|XF+ zP1-Wjl(!IVTvZBZ-|nTJufYnP3=Nt5tuDWL89FN7k8q`Bu7Sf)kf`O0J5P0sI}qA3{~<0q%POISSE*cmMSTXX&D6wuT+q9_h^h~$S*M)55-Mdy3!|8 zmt$6MTUgeq@7jYsW~dSenFTJ4Hini6Ge#B?^4TWzT`@0^h%U?a2Z=Jn{RX?Mx{xkb z;=aI!>%i))+=__09H4+c{<5Mszjjj*99+kA%TlWnPljfbd73==l1Yt=yljzUkn*71 z@s7pE*jMwZA9m~fhLw7obdYBP1d2Mes;U-arX~5?m)|?xBH)$DcAm}SKiV#;7W)Tr z{+hS{K&x?`E*!WV$LVlReS2iyJJ|E)6_ob}yxnn~Fire^P_~eM|00=P{O*2wmpq-2 zSKHa3wC0euB>g_>l`7oXBz(&9+)?yhxbu5jcU-?ouK3+;eZd}RFa(c$GmEVo!h$#9eu%|9FM)5c#pI^H@!#}>WOIGYT zBW3-V6^7*HH&2l_fKgE`TGaO!0jbz!5G)eB76cV!VF`|D3zL7s$>Cem^9;Q3496yL zqG@#X$X&IVoUuF;{MYmeS318<=rgg+{9|JKclrbW1=6Ap_U2X=Zq7!opR8>aGZzP2 zceDQ;sB^S@3{?*?{^U@c+AXZ7Vk&`tgM$t!28M@YD^c6c8SBK~(iD1TZKMii4)Vde z-F2THnJlzp*G{n=W)8ZyXT_JlryKZVuS-Tuiq=mdJ~!fCf1BT=72o zZa?RYcuc3=uIM1)gVhBFnLWwk5T>}e1on9m8Sfrdu4iPfO)G%SrMucqmxsHlAxW$$HRj`gE_Pw=TV z>}T>q?ptLD%8&fOocxEsLOGzf+<1_hYW+S)68=-CSdj=CMhUB@RFU($DglLGxg2SWwO%7 z9YV5dL%DOgeh;jevS#qA@`ftegxPy55}u`9!W+BUiIIXl9DJA?+H9w}gzi9;Jvoz(GMXarkN_xHZfpUfnMd zefe|qsbp_YK9L`JG4pf8u^K-%C?OzEWF=cu{c`pAGZ?G|P8fJRZU=Sl@LQc>LOmnH zC|p0+6!V(eQ>nDy0?*{mbQX{q2xO(?wRdzU8oYWD*w3M5W^GARM_D39QZKAzWo*WQ zIuE=JMH?U0__-DEaMdK(UG8IFMvWZDknM*&-h8r#euEI=5+fDRXut#K(7!l6v{k<( z-U0`{EzL2@dpn`j>g$lNlk#@XQLuBwjbT@Tjr4Yh7rY54IA=Q9N-c2G4v7t zI>C}9Jl7>mo#5jm8X`OMYi36yAykhvfTnCEd)g}+Cjxm2ft9u=|DRkL^T|;H_M^Ak z!vdaDRM4Cltp4K}y+Tk&HGjLq())`t$l=tJat-F~_AVYF6ggBwnvM@;9j2QvdUv3d z*vemx3}`erKErtN4hC|M4Yph+A|g6A4sLeeg^y~p)1^Ar5hIH_S>}v+w9k$g{r7Uy z6-RHgbOoDe9VtfDy_krFt(Jj2sBC8Fd1&$C;;W>Ork%Ak>R(K?Y23Bi`1l5$AI^qe z8BhuxG??(@bmVJV92r54TEzQ3`hE!nLe^c!P)eRX`eYoNT&q==>l^bs-7)sIS~Te4 z%ePx2#npTj!v|Mao_;4t&naq`GNjK{jwViCVp`Ps9f5&c$+&0BMwd-Hh*q`Jt8nC5 z0NYIag1|~<^=!=~PAS=+`Xk=rP-&ubZ_4TEYh}mSOjC#A-0h8N-Rpxij?UHArY0A+ zTJ2q;NO7i<)#7LSL9TAxbfv40p%O6QAjy(yPh|v%r#inde+vbTF;cpIV&!|zZ@g?Pi+!cf9Ru z$>t*U4wr> zi%DwOlsBWnEryrGfu&|X>+N^}SHMJzg+rmeW0J>4@$CVw(}T4P&47#jpLx(jqn=+$ z5QizN8g!U)Ap3~{D|V{;2=H&2|X43sBXOAPgf`o5!n#rjD|I=UZDJ5Byz= zzcA5SInftGrY3obLaF^HU#$;cJ@{OCqF46xN`_lqCabG?@6EXOr>5u-ck&^Gvm*Wc z=|==r*0TdaQkU5qRz^Y=@ZRGXDX|c5Grve|jdhRL2G%SQaN@I2V~RR;^hmMb8KNC_ zm53E4`@l-yF+c`BmAoQidx>VbleOL`Tfx5#_-1kj$YL03&%}%z8qPD=D#Q3x?uK}- zJMz><-a0}0mAnJ#|KU7EK;2@F@Bl@`b{Z3X>s=zPEIA&_Y!!$d z4P3pKr<1R4 zC?_Qr)!92p4od?Ijud5@YR9^Qnc$wQAQ>;?fnd@@p2$O&yr_IDmbaV&uzbkUqK~wv zML7QXS)Rxx^H8Ps(`FUL(PbP_agQEFegmmwPtDFm(tcS$A%SV}<55^|;UJZCqf|-EJ2~5i!C^4wR z;Buc&8#s}*1DQR6J=DbU>`+v1!^w;>L_geEIBaYjTBh@YR>SKT;Tu&@e*ODK^;?NT zX3*1Kd26o&w%h?CI0%3%vHc?(j3q^AjE9j&ckzBV(A6=hQv!V!TkC!mipHz^{D^aO zWhOhOnh{uQ6DT;Cxya$WMm(UV-)7->H1nf+AN4STuGg+DcHl7@FW16QAE0ed6qZ;5 zQV^Zq%M6}S*>Hn<+8fcLIri{80UbGXjO@X1UVk?a)@%k+(Z_BNhNb8q?!*&#y~c8V z(ojg-8TYXpVB4CS?FPWuQ>*S}U%hO~2e#f-fgM1*Izq)pdv|SS4xsHA1lg>a({_%g zJa!=%wzOkM+Eg3#F^wILN^jL4THQdxpAA^j*td7Mzrf-u*mOxTb@CzFCiEq2oBQx(i%P4J6#aW9>wZ_ zUP&gp1ib^Yza?Ho;6i8%FWgD-@d8|FG>gF>nQ6F?#2&+DrqRA|BXff7j*y;@B5sTn z=zHwKbJHIIbPwNn$v?qnG%HNmcG`J}ThH`bM(TYS^$9Pq6i@y2XUo6eKG@P|1mwKbF;LeiNw24MA^O+ARXLEG?g z+Z`n^LeHFX#FVR=yl_s%(uHcEXv4FKGV`?TlHjM#4r0cU>bgQI#&n6B06X~zD%!eT9_Gt8GXzf^E?_9QeYl*pC?RRD40vGEbKPMn`v@qpKP05Ivsx~(EUvFY06FS{OyzxdXqRjyto<`^-a0pv?;5qXt6}A zf~XBRo!%%r-Huij>7m=#%P>$6j&S;%p^ex?>f>sThr)~~$r$e{?i*w!qlXQtb$cOxi}$h|rivL-k|I$fK}g z50;+asHf0mo6@raDp?dHSh4v(3Zu+gwI$c{0LR~}?&Xe&8DU|=R>e5V-*Ev~Y8q~iG7agS6u;~KoTShHiIn@e=i2D-Ji6Tx1(u{(BlTbA!rl9#D_*E9;_s-s{yL)A{;44W+jmGtuwc7mf z{kBxm49Iup*wzkXI9k1GamTi14gN@A$3xuLd-ioiMI4qBnvo{)!kN4(fHUAmj#u>4);L@9S3M!6Ei+5e;!2% zriqw1Bz7$hb4vaKt~^-LeeN!RNF+m4GpMLwdA@ks_xGsT!kHW-_nZ)iG!hBRS7FjV z(hb`IUqW&`O_sn{1pGDXb}nJOqjvznHTs9D%eE>Vk~81cMo1U}b=1Vez* z)5`qYW7nViI|;6Xrm5{F^+WX`(v-0VY3pF?Cd24}5%GwC4VI280FMX@i>XEWtwF(l z2Fxy)bgtmKT+`D0E12b&)^B_S57MLS)lEhqG$l+}oHhYZ(DQ$bYM~~cC+>fX+TnjK zYX1K~8~k@s%a}MD7#lbn{GYIq|LG^!M?r@kya;nXe%j{6}S_9@?h-63y<>Jab zPc|Lgmd2YFC7TgHNB%+LJOCiyq_$2zWE+yiEpDfitwyt#F2AlGptT`yWF-k{1d;$_ z`4AcgQblo+WFh=^RMR*U%tn}FoOv{D3*Rc9_DRHM7?qH!FAREZChK(*n+xrxASc@P ziya3soN=6uYxjiChHK2_hvt2V5jC}e`@!-w9XQQ`qKt{%(#L#Pvfm|D84pd1WfD$A zmiR>Hy1%G@Enw8#4ae@p_t#3z!sueL9Z<|oSdxk-oyzSL8UVSn@_A0$+ckIg7@Xnn=_VbG>6rEv$VdsmK2XjNm zcxKr{Ct8NcP7;BLSJiYAev5NYq*S04L=Nc|l=D>CeFHxWu=l(Noqf^sA_agI%osGu zdEQ{n>z=zL>=1sFhCqmq;(HdghI2*6`>xK0JxivFd&b6v-z^{J{!2d99`ok)`8(g* z{9n0}|AYbk_mln~6w_*T4{zna#!OwNL=5uSAW(2f1E>#Uqko8o1ov7DB2pF#n!%O~E35smdLK_r z(o-dZ&gegTyl&f1v%FS5P9BDO3HZSEiN2Ggy&4@jaO^4pIT0T!Jb4EiXup(sN)J5H z=*s}v5s6g3wFd}Py2=ic!%|eTm4Lzs{&IJf;arujl7nZ)v@kd$2B=K146qhxYm_!o zLMlWI@wT{VQH&A7s{koeI&0)MN&QwBPNB(uPYf1o2O_zYLs0TPE{rX6Yk>5 zoPc!R?>uIRLy;;(c5?vL3$(ZD;OczwzM!|z;Ojjn9DiRb3r`R?C|~jZKRw0!p=+i4 zdE&SOt*p*4*N``hb0l{RH}m$W1gm$Dd{z4j-hzX%_ZD!yePXP*qu1EJ;aaRbAvml& z;hQX<&~8@llCFNyvF3p2zD3|(GETiU=2#6wMBjp~>APFWdlJ-aC2pOD8(J4ZmMUQ#Z$D?#qxY zNjw}0IFZ-`b~5Z4#9c{n4_1bfsyo{7pN9t(Y*CA>mv9*8b905P7lK>Tn(UjVFCzh; zn=ZBU^XJc@g&nQDxZnB6~FZ`6Gv(#n_4cAJ>0llJGyA#d|1%c>#_R-TrAeb!YpMtmMojd)VZgY zM~wU4NiJneqwg!_eiIxM71Ycn_Kb*a8L5wYUAfR9C;u*UU7X5RB^gV(uVI8xsvBlb zK=3hHMSUGcsXx{d)2MQbau>I>UT}P$E*?*d6JHwZ=*M_yo{vV_>{IOFBQ|7QG?}$u zDPoJMv&A3Cpo=;WWI70DT5Ysh)5Y`-^jLT(&Zk`4$C7arO`qou#YcxC--wd8Cah$t zk{cokclU0i`Ok&?%wq*>2m+6^d%_rPj^dd-!rsjBHeAtXV zfdRuJ*K=ViGo&OgdkQ0fJ;n7Z^<&l~N(NIB;|MjyL_;x>BPqsB27Yp1YFf1{`eti$ z`tJBiXgpZ>^Hqn;nE3WJw6!gZ-GU@=R>!UwU(G|%vSVFq%gVmsUX}~SKK!`=!eQEU z#@-`e2!)$xK-t{M8#SaMzBz&1HY`~Yq_&MA=(=KeB`$B-P z_%|Lp13*0dPMz;63}W7~K8%Ah6tOHqo5Oe`1B(1&_&ynjK~lgeR*Uq3u5O zi;j$b%Mb{y{b4qm5mugSnjXV!)#=78+)@)&uC15`qt||&6IU8K+S)V0KoBoHNwwQ{ ze|@yHl4b^TU(*&arF~ za^%jvKk;%~n`Rp}NTs-%)^=256$THFevoV>9;lP2BA;%s&TTZ6y)laiO-|>(uUOcb zI8|b%Buh6n&h(S9gW+499N2fZwUd{lIbRJG))m??x7xwdx6|yd=`KgQfJIh}Gj`$R z5LBgb8O=Cud~>>GRljwr!pT%-rY30IRPz%@Q(h)b!m<{#McTnA9W|1;=a)MhtO=Dq;P^#c*PwF42mM<-OOi^m@f-EoHzK51iN7-(D*o%LH) zHJX}qS}K9r*$S4N?ixi?R~G_AD!o*b=jsuFQk#n9Lt z8hw{yc>@}w%65Qkv?i-S9W0+B{XuCelXDU6z0g3|P@W~a41TIGTT}5W>j?Vfm#g#) z(Q)DYyArL|vqR@us6toxJGWSccf01@v4JlJXK~23gx7U>=r)7k?)LNFoEJqmn4|Mw zGp6nTYR3HEPVPcT=&@2Asl>Y1Tzd&Id6Iz5o9K+TddDy-jdzbA$E zR6wY~hdB^IMNsXRM8FS{@h;L@+^*Y3t*L28+#ae# zP&8yFQU@dG1|x72x4H=F92XCEgL6&v3kL9hu@8~|O*Nadnv9}jEETQ#x>w$UY;&va zj+*E(3(;Y%^h{4;eFmk!yFPX5d~?mUMD@5(y7o?~(L`6DDv63N#)GJgn2!qdQ`KZK zl?oeixtUYChSM4Gw=SpE$AskTXnJvgF} zsoc0dtWEb}c$$~{nHu*Mp71GyzK1wqT6z3=N@xkN#_fLjrdw;} zDo{xjl=E|kON&l<-7!%&S+UE@dXGfx^<-u4uRTx2=hR6Hzy|SksiehMQfom%#S7>~H0btF z*VMurMdXz7pu!?ZuR8r$*$$O3R1`(Zs7qLpoiQJ6F`b7!cFYq$S+BY)!uX1v{- z@~uuyPIYZfQBQg2q|dTHqD*;br}G<~%x1hfnSOVr{|rv)F+5^Sf1)w}w5I#nob0B( zwVL)%4_Kq8n;I}i(lm~-M(Uc@@6gOJM8cWY&(pA_52u?tq-$KUMCzE{|IxT&kA#>$ zFiQ8Me5^HgXs4-(8%}O$lSEgWJiyk_rjEQcuGc~5Hg@Qy`6i9zpF9B9*rJH+9XqIP zXp=x^pFBX<*rJNuG@hr4+%$0rrNK`a2GYPy8XjzL7ekka<3M>LzqOK3@)enr4J`0=(*_M{t2M;4%a)C-EW6(>oR|pwJ&JfZE z3L{N+RDQ(+tc7%UkDfMC)70mDkv1dS+E;(&4KroDtDcv(5s|(N+*qb8w8sJL1etWc z2MyXq@9zuxu9cVd753*;BQHQFXaZ|F*F|m~}N6)jBo|jiDSepdVPu z-42Gv2nZ%?>ZYlW@=6i7EltVgj@Vxg>JtNq@y7I2T_21cX{;fS6bH(hxGud<1GELP zEvPRV^jm1J7W9U&F0qdn^o9hHxGuKuH)zhUJ2wAUC~tv17+^hQKzd&-BnP5CC@2uK zzces9uny!AGN!0LuKztKIkLS*UWkt=P%;=)mdu_e@G4SUa^E%R4bdGWFyA_G^A#~L zy@oy+oYuH4$(;1wEhs+8oai2+|0q>dd)0m)w0pL78_APAse{z&NR!`P7CqI=XZ z?&k0a+=+edpmc=x?Ec%J_=NU<`lvy7NbWfOe+UWN-Q9`&CD1vdZAk9efoqZ7qx-l) zdqn%ZkTDJYxn8osx~}Me5m4Mi`Z7VkMfOl&Snj-GK-XA7Ykt{d0_BS8cYp<4DZsEa z;56uiZwly>_(wu%`~R5)MFkFoge7N4=v$*noAwp#`#{7@11r9Q1y)0B!vZ2oMRuel zBAB%m>}!NtgM=kyV1+qZ=yI~yX=ibzli^G)$&xZUU08ebc1Nc%mNV-QzY+wNLv&B? z(*o@wyVF5euKxmsM+TUo)0oI10mRU0%($Vhi0%3Pc|kQHd8GEpfb9?gh(M_g`mFg? zra$C&yudlX^R&3@X}fjv)PcEq;eJ{`~(Bmj>8 zC}b1mC+m010RQnV#V0fH?mZmnj3VImQ#AOe@2BF9;H@3{CtNT8F88e(`X~5S9#AWM z!T)Ix{FACzc()5M1=d3S=JpfX4=sOX@DoSs+f@TS6ciC3%V4;tMvL!frxZFlr4-t? zqawyJL(y?BChmBMMU5ZaRTO5|4mg{sCAM!SegI%ZjQ#4uUz$(!%Y&qjzMi&I6(;Zv zC4PVSK%I}hRUKmdWD|Khy@bjths5DmKmvh;C1nV!RTNLFv?n)O|aNN01)e zebb4_|5gpUh;&hlM3*WOU5^k_;+w39^uC|!kg{(CaS77=xpyXU%<(IQA-I3~CzlB7 z<8VZpNOxoS_SJ&9tY~P*sXU5}(E*SyNh2Jb7VC=4<7kTc5fjRfOLa68g)Z zz9LI=!p)$n567T?aXTsx@s3K5Y~qWsZBL>52eODehhAcAKzRg5c5Xf-zn>-&(03a# zwuImcqWUDg@(@>#z~8XGzo9}WG7%h+FQ3-mVZ<}}J5EryJig_`EsE#fz?%Sk5p98D z7^q`nDjn%PWZ=|?;)u3H_0C8;wV~}I&R6--Zcx|9z=*b3JLRD-+29z325O0Qic0iWlbsMk4^}#&<9_v$ahHKXHBE zlex-6cAw-TpR!E6Q3Aj$4&nE`i0<<79Q=9W0e)rT$TtDTLh}+>pTOXKf6VBN2+daB zvAbE>z_*z%eORMiDyA=CHkw3Jqu+5r@NXq)7(Y`jsLP(;Dwi|%VM(?2S*$1O+dz z+0YqbB+4$>lQbxHw9d+ZYJ|r zF3Xl6`!c3+7^}>7!xokD%Mv>tLoUw@g}(h+#SO%Nu4+w%_!5{W%u0lp6KcwZ z;1ypv;913G9Ij5_^e>=1)I2UZ`Y6chDQxi?mVp=53f;>xjl|L7eaUS8j@4wgb&ZGp zIT;05-+84gI(RhI=K>Yi^B8&Yp!W3}b;^p-@QWIYabl(6xa@;PsDYnt^WXYipBQH) z%>tJL^-A3MS~cL?tT%bwT@4yN&ALqcV*rD{>n9)MbX5VCOYlY6f7&VjK!=>gkmTXO z2zEM>ytF;lnR%&sc2Q|6BGPjGITS5ox6L_WFz*9AfiDf&DLJaxm01b@{gYnC_j57I z#-Sai5KhMPLEwr>Hl{9AL@9HFs2|s3*~Jr%J)m8!9B+q0XRZ? zffb_?J>19BfRZ+eq0bfOHSuy)dr1pQd)-sD_97pmIo8U?xE%Pp6nE56P&IxAkS@hl z=Z|kB-krMm9E<9`}7^q!)6?Asni(9VMx_%rwK0R3VB*W5Yv(#rhV&Y%#$P zQptz;BLqr<`L@G7WlOg03@s{7u z$i}4S+zlXso=-{S&csJ?VLgtga#He66~V~0h*>B|CF8)$N-z{`G?|P`Q=`*{Sr!qI zZ>G=Oz(85t|NN2l0*|+Uo=1_zhDfLc1jx=HXL=QHRSI+nqbTL@|8+^kxUM)qIa<7j zW7_OI|8VOjq^%MtfNVT9#$~V~Qpac*%-8303#5D1~AP zD1^U=cO$jevz(*KQsW?QiuZ7aSB?lIy`M!@F3HYfpS&NXom+kqOy<=7{7x+OA>^K5 zURZE$r+!vlWnC$Qsq=6=2r1s!P+B0{xhWy6mjAm%b^PZXwp?={RY3yPO*a&FSgiL6 z{(dqh=KyKD61{h^Xa{PS>(x(Kncq(N8_2TU$IR$mc`>$gL)gT5LYy*_?0g#M&~;HI zX@g&uvpX|_F*_GBFu!-P5c$?|(PfD7G-r{E|9sv=qeyXi{FfBHgba5MY7wWDrCHL5 zrJ{x1x`L9l=R~Go(~;ul^HCvLdy;6Zq?Pj%lmEz+v{jTtj4bQ@Qd1Zye+TAiT@wQ4 zIoV8P^JQVvB7$(O1i_biA)AcTJweuqcxb{*PRNYa=qwUl_@W<30w1}@TBZ`yLOlOZ zu30JGFc9jh)z7Yz2TS_XeN)r$bxO(=p)=~L8wM)P*Uzb~p}1gGXIO7(47mVmS;9V< zg_Q6$gK-q?*;9LROUU|tZleF3uF9+Hy1o6grB-6?Ji!lDrr^&~_J)-!c*JB$P2pkO zw9#6O+rdLeFKcm$Mttca+o?m771+ z{kOkeD(zm$!g>4z&kwL*%nCzh^;jCKn$rA>k*kX}MSg`|jL*q9%USjm#teMiAA=xf z1(`C><9(42+Yru)F+6R<9UHB66^xsDN1>33>K#J5$-p&4+KcMoZ3OC4R9D}DQDc`E z|7v!(ict!5(8SZ93-ydz2PX5?^J%}(D_=4H7|T;LyzOe%Eu_ZibT+}}@jVDaGa8AX zHZw9}kv?C-0C)@f;2@u}8Py8X4sHt+mLU>iOcFYYa3BrS&hwKD5T#hQy0x6-*v}o@ zW!j>OxyydxkZf+Kw5hd~_ADQ@TKf2E*(Y0C*+ZyVps_={p!uX8spxF13e=~;N-w)q zY+CVr!MFL+!kibb@DHvEHo zkkOchwv4O5xA8Y_ZI`2cdoSSVo|Y<)bGWv&V9}pAAua7?;8dkqFCs*l`mvi=w$($q zbF~hYKti%eK5WYw`EV2@4C36}@ZeOxdz)d}$erR!A)kLUINW14eO{ zU1{@|aRbsfsGHJC&=`~UI+8S#)B)t^7dv90$W{n64lj@-loxiM!!M<@f6unkn#OSZj>mWT>f)I-kg$#a5_MnF>WceIBeK-<`^M3za*&!Ur08E+Hw-AMZy=O z&5jM(oOnj-36%Q#Bm_+pN`c-9Vr(AhaSBKCmmCpYsA8LJ!3I;*)*D3U{hZ4UxPxBCkwUZAOBAs&94%UKnZaTDMxN*y`us@O5+^TN=d%2c>q^8L z8db{~kZaKN*wx>&REVsN+%LYwvpDp?hNHvr6YJ-W5!aAx%IopvA;1rb12c=SJAnD` zUZdJh{6_{qVKcmQBJB0TD9(TmTYSsLqx+Tjrceksx=oZYP_2xf(qHmX?S|Rd%9j}j zo*knvm@(L~bW0c2a5#@s>eK0`)xT-SpFmB6nSX&zGFl+JoL?aa`maC33Hk^Gb*-aN zz?>@Q{IM-SN7zW-l(Rq~!rV<&`p6(x>t^H4(3lF1(8RAIIPCnzIn0cSX+t|K(7K?* zKG@q(kMH9MtN7z8o-Fv3%81DsjzOCyD3XcJ;u&bZFn<4hh;2$X&W{!~YBK;=j!-Mo zDVw(c+L`%8A}K3mMMx7FL=7DUesAYBS1*inl2@McuXCvdJT3c%Dt5f@?Aj&8tz|R0 z5V1w9CPaujd30omW2jH}R=0WsINF!>h9wXiyNI)ix-Nu4 zO5@q~=OT=8?0H`VlPoKJ)e6rtT5MCOn9tJJIciSsghH{l13g=rV=wQ`i*+>n`WXvC z{tMz4Zx@o>0Xuw1$In<)7AoU`%jY31I0^U1Agr_3`4>fC|It#|zE{fnPR5;yEU6~e zuYz(h{AlbWgc5B20w*_0*b&^}Zu~$Czbm%5{x)a3Th>ur6E{;cyDt*{j4)32wwUi_ zpg@J}Z!YrS9>e*pOlmC!Zj+ zU)`;I0pf>#_(=nWWQ2zrdDyc>jO{aLGkQ_2Zlu`&Mx;OwF?TT@FFeaDo*!UIVC(}u zOoW)r$RhY~EAc~Cs=xu+uOUc;%yC_FQFy>t;`2rNK|!7?ZE6|iwO-ha!X>sjdAXnp zqY5${pLF?A$ld+4VUo3TI6W&1xGIt?$#y&8(#^x)xYuqwxa`;GfR(ghS)gj=`&5x$eBCLKL;8NzzgA!;Z)GF*EHRwto(`Ql}O zsvHQzU@A!WRMPAD&p%n;2Y+5Z!~Lpw{d;S9y&e#nPFFv9uh)lmmvjDN1=sDNKT=*T zcXCaqVxMr=>7%`KIlI_$!M)|Y)gzC#UlP4@D;Gr3JH&fWW>|mj)#_hJ#Q_9;o?bB8 z*1HJ9Dzx^8x@-DoUi;deYcPMcx#1j*wa3-&FigrEEZUr45xL~<;BhYloD`|Lw~}uA znC`k{TEjXFw$0Z*@LwyY(CUV6H~x<=10JqoFkL-3W@eu*L5q3RLi7(x;l(C#5WoD< zWc`i$;06^6j0A(v_x#)CAtL)BN`*jDWJ3u7`B1>($0pxp^);dK5q)NZKl2?~)mNxK zIy2q&E!#PktkD)Vrf@Z;v@KPEi}tj9>aia#Y<@%PGGL1P09;GAt6=7<7{tp)j2SUs zRbsolZQZpXljMoqtKbp}1m3$+PMnp>=)1$+^;v9+3|?J%J39#zED zYwjs3oSonVk z)lJHxU09jm`$IRA1+@0{4TjK)SA>e#_;0fSU)mHz;1jX6B^wCOO}2TK18%V_n zj=eOerIn{8o&xjwa9}7~Vg2NV7>^=iw^92qpan@iFapB8mfAFA4|1t;JYj1jbsbVP zW*R)GVV?XTvl4~wZUd1P7qntH?Rwna(dnqOt<70ev%;fDGuCpV(P;<;p*Wc$K8e1? zWTm@|zgD&^WGxSgzZ3N>Vzq^B;|+?_y0G?_d&*Bnb0S1u!7T^l8&HgC&SYKPz{48& zwjlznA`k4CUT*-)X*dbd>{c)~+R!)eZ$Mg?I1sJGPEd>{H+7P=|8DwDyN

`&E36 zow5)}I%gDB683(u6LSUoZEs;l)6tFRy2Pffvq9YtUxz(dePrWk;uAPnwvq7Oth7dB zg%Pd9%o~ccDOvDq7QdV~fH-xIarlbsJ!`8=l`TX&Wc!8&wqJ_&Zif%x1j%O|Vl+q{ zk8F)S-IQ!FQ$)ReR=0rXY_d_Et{Hzao@(S`8GeHZ5o8fFZ;^u&07D!Dn;eq`)=|zT zUxfu<+0HP;^mv@DZ#oD7T2wDPg#aro-AjnfSukG2^tAjs)DKvRm8&Mm)#T@U#_aR_ z4K?z|h5?c852HQNNU@YYxHh!Y9#a}Z>R`A%*vK69K6V@Qjfnd{HNm5MT<&1U-{3bh ze*1FPkXwBr{d(*7_9)yywx*H$=&sOPBP)G)*3?_$wxM3@-F1=OAYN;BhzBJ3$+^%F zfZ;oaT`<2xgnpw>LfnJd!NX5Hci_kD(l@m`Sn#t`&`^vbiMs|CEZt;fcNtBDpCr0K z_9Cx6+N~hBqOZH0r@w=SZfFAW+Ci~}(7XC4IB!Fy{?ihpJ(xvAzyb?)k5Kq$SmpN& z3s4WcOfZ4;;{LBiX+W$6(5Godz^+WR{aRBBtIoZc2pS#o^yd~+>A8&EX$vOJ=Za!D%F-KK@Vo*%Vec`Lt}U}!>%NHPJ}Jc zFNPw{$Kv@XdeGU{2Bb0%Ez%WlK=*)7yZ|q7AVXb0VPRQkJ@DCV$e_GwDB~2Ak_OV0 zDTx98U=wmKKAWh~r(?Fm4jk6#KQnZ8qir)Q5|}=uBrXo=Lx8AH*h=R;@|G-V=wwzS z=dkB$$MK|WT2xd<1Z%Uzss{X4rfYbslFG`;NqqAL*Lqiz4}CjGzHRv5gO?!8V!-w*R_}W-T4oU>JQT4ES#@0+9OD z18*#U-`P<&2kkj|Dz>pF#KeE>?I3O$O~bc#K2&IL&o8^~A~@Mkw>I@9u3Y)t`BG~I z%i>~KG@ohPj_XhN?i#Z;H)y~XY+eTQsb>Xma^tkR!9ST4Gk{iGkY+}1YJrc|J5rcE z8ZcIZ5@@a#TSIC0r}Rf#b82pko9oy%RiW93E%#|j2P0_UdCy$zbBCDOo)|%MXIGo} zy25kk*cb^a$3k@t&t2xHaVp-37wqmaxE4}PXo1h|T5bG!GyTJFTeeicCJFt zwPZVNeJYZQ#XcgjIY&NXc4DSET_%ERINOr($Sl^{P@H79Ut^h$2POE}AdCHJ8Z`h* z9Gw3oF^fj*P=wV|NE43Q0l=Sp&Es4|bb6Wg=iN*}QkU9|C1A9xdf*c!s} z;CZgk_D}ScsC(A-lzeG=`u5CwBX@e>_V7r3_LXo;q|W$_nOdXO+B40NtugIdV=Ql< zrUs4|BF&T9B`jQ)wYmQ6hdy4-<4r{a;#M;r6COn-x7&JQMVgeD!V5!4k62v07*XyQ z9@I1^6Hz#1y|9oRVg9f9IVJHktTR!+?kU0}Cdg-UN>1loX_16dx}Gzv3Yct?b(pwe zT~KN-sOux@?Y)yT+723$2hvj3CCxwdCnIn5dX$uo2iT5$v$6<6X6vl@4 zE?Z;l^VMC!w#POUhPMS;9t5)b1bvDxNF7OXb7Wal1Pp6Eki&`ov&SF%97}zfl~h+p z!r4SAjR@Z%$4)GN9fzVyXL)bG%r!8R$(fG&4w=w2W%hxlLw6~KZAY9< z)IZVL54pF(ZsR)%^qD@8B-iBRCw#$SzV^ie8-3XRVFXGm-CDQuHU(u}rdBgrqIVrlAFgP<)_@l2US3C-_Hk z`lGyY?jRm*83!DV;S+#*cr$RkAx?dV48Zcin%)DC74j>aGq3^;i!Yp^oD^3Sz%{_c zzdIy3W)}UO_Mp;`I^6_G$2^qsH(4OIBS_@Y?6GWEG)gTL08ODD%Dj~bP1%sE7Y}%& zaDA_j0BP4+7!Vf1IaZ%_-?)vZ{iEP)w`n*~b$Y)YzyDT0*gPXwsKtxl5MO#|k8vV^ z;mh-M;AFr+A2{EIi=hLw2=J!pe{t+VOt}-0kCsE=M{+YIvtt1eL~{S$Sb}NHSF5a; zP>fVf?JL(muw}VZ@opFFw+nMHb+?lUZV6Uzb=A_kVQFbeW$tQ5ixI+We7g&c8M5Jl zYjt3CK6TmKdoEMbO`Gtsr?KlpLlseFfIc0)gH;{mu9mYg)x{ZAa8@!0R|=+V)QegWo--al(|P8^tdP4PU1dgE!Qf zu?r%K+46p}_Jo%H$WjZFqy6gcP@MGUkGw}TP;%S9oXTK#JIU2_7exkt%z_-UFZ znQ=Kcv#ZH;Hh;7bYs-a4E4^~1efevqc}oi#p~dJiJmq7lZFVSbmt@CnWlZ zvHcV~;D>KSOBbUCe16C&4`v2ne(KkyZ@4mhN9fs8Cvap4$^oO(RG~rl_$0 z4{PrfU5U4CdshV&+qP}nwr$(CZQHhO+qRR+icv}B%m3_s+HK#%+4nr$r?pyJuVcPF6n%JK;HDp@Y`+s~XbF03RsDWAWhb3aYh^dg^eiwJvyoQ2RNK~1BSjkH+6^q~13jWHgrM&|SwC4x7@5@H5g1*rCS{Tq{&?B<3v2k!+J z0InH8iG$4TB>d5dcSb1k6_K$|@Dw(OTR*;4sKX_B8P_OkQ6bJCJstSC((5*r1nJAl>9I#`@q2V+at#SJ|-^~>K)gMt(q1B3@$QD8C#b6#x5 z`s)LudRM)jtWaao+7PGXCA|Dfy5w+cY%cCd5DpwiL@nq z&L0=*ag6&@p@L6Ve;$Z{2f>1OI}rdRqAU=r9+{~5>tRGfoClu5%?@3%yrIBpdS3rlGXI!}Qa5qEM})^U1u(MWEV}mz#wW3axYxe|ui4 z+CQKWGc*bloj`dxTaz4(>VUWbau%)XKvDtDrtoJjlCQe}$brd1cv(9ydh=t>mUa8d zTWA~In6uF@2Gp(?qai^qh#n0pT(*JQj9it?u~2LIjFC^t~riIVi0bz+VQ}|MuWCN3h8EY*;!|D^|Lu~AN_$4VHem=C8hjR@h=2ro$_6xv7&btB5rNObl# zCf3|&V9%#+nSMdj2R1w_Lawx^5w5WnvS?!$@U4%_U$CrrJZ~k++B3=KJIW!R&PfsP zMwfppEPhp5c8}yF5W~XSp@GFLyKvz0O+GE{ys6imy6?)0V-D-!6Qv0a)1p(j9wko^ zZpSdE=9zW#Zc5+APRiTIu4h5sbmKn<5(=_=vewBow$4OYdHqnBYR?qrAg7Za=Jj8v z?InabXhKrJ6IoVp&oqzo6eYC8Doi~xDB`(H6<#JoaDk|c&MtZMnO)N5vs~OkGz1p1 zANqEviiui+Ip0xBzHp4AeDOn)AV3;HL+-f9FxLvnn$G9;V~Ov}V1Kaw6KKa#V zWX&8LdJgA3-SMcL-T%JbY;vU8H@W|qp+fcpg3O7qreW-MrEVq$>3bS|0(|&>M+_bR$HCUq-zOV$Vdq$l`_iOySneHz#u# zcX*9->@Oig7nY&hnVQ&k#NQtA)KSPD-apg>ndR|Sdw53h+V0SQf0g# zWrg??|Z``u_7NRAGyk}eI$o+!XG;y`2n{qAV-S;A!tBe z1-5`F7V+Qggr9Oc>urPJJtderl;;t26bn1e1O`Gm@y}2)%A5Xi_m^ zwio{*%pP*!EfNQf$aO$Py`T6n@6U!Z5nFu3dOzu5-Qe}5w^riJNJalV#DyyO&-G=& zzZ?i(#KU~nUn~fEA|Fmf1Jni$ePorbU=4K9>fVQjaAbvRR+x@G z0lctU6NvXOLzR>_JPuGvfOQcyq+8N$2T5P$OMF{zqQuwOTSjr{sD@q{W1naec2Wx* z^B9I|tH>RlhM_ z;4a8D!d^rA4nAYK*eAH88?e&~eBT1ZAc0L-vGt_33n!X^1p~?G299#z@OU7{4|gGf zPR`u)o5 zeVq)XE;*vY2ge!7#_bWOX6H?R47FBALGWOLUZw|sX&LKR`n&(mGMZ?{`vAInz0!Ct6; z2AwcHN&vUN+aL628*=qwtYD)Xs4pQ95F#5s*q1@h1fDf z-vTaF&y?9ZrkvAS+II}zA7(8w*3cQs9N*XwSDlO~>8i-4A0g2~qHa8MIzaJ!(jO7u z&$d${-}Z{5`uN!pcH6M0xQe0p2orl!}avh7^9Mr7(9WwOI(q!lZHJ2D|&|&+?UFO;hQz z3k{SVRU?DyI{fb0Z)u&06;Du9s2;R_PGdRBgU(!?s3{$2AKZ(*ER59Fb1iw2v)niW z_SwuOx50!Lc7tKMSb)1oCCXPrA5u2msTGLM4(y?FH=PeN#2@mVHPq7K;;9 zCWW3k%=CJFo==RQ^S(Zwq5E;YY4!tuNcq$BBg7-rk2ijyhwuopDMr_I7VD`?}DZivtg;(qw=UC zcI0*(yyJ_kM zk>opIr8wb0138Hb_AfEUCN!=J3Du3HD8u=&jD>Mm$a%ewhLV& z(!@gv`Gf2;jJBdLQLQ#jS4yHH>3JzJhxZBrgaPY90b?Ik2NjH!DT){C9#f*NoOxtI zAK6ZImCz=eGUo7d<8cFX=l(4sE|w5hVVU+&m#)2;UvZfe7<>uL$$hO_X^u7wQ7>t*)@R zErIDLUGa>4yS0 zu#P+NLtM*}Q(2QzU)s*d_A;{Y@exFz`83UrwRzWBlqzyblrwIiD-ib=B`r;#aLYXY zdwmKllu2~6VfeTO zwMl3Z=IEYQp!fxOQAY7r)wH5skx8I}85@OSI0CuC*KcZ@AQXJ?^YUTWl|lLY{WF;) ze~Mjs#H@Vr%tf&$s%XUi9s_z@*Hf(o7HLP!J1TeIX0cDP`$+QqbW&@Z$aB_bf$U#5 zxy&pgtI78*KKmczVCnyNEy=%c@_$|7HEQ391}pz08ZghssoG0{!*)6-2OLbTM_*pw`aSk-{mw6wBX7L*{9#tM|T1e(9hfHqrdS*bMB zHn-f!dCq##Wk{nNgnu6SyzDy7alB+Z&3!wa#`e4b`2HBLZAcIZe?+)R4lNMo!r4g= z+r!O7xXBLV2y@Zyz5&xB-Nc7=gu1AAYzTGX?kdApgtFo8I>T7B$A&ONnrM^tu?Li) zaUBt^BtvG~^#(0iuFdTS^aeabDA0MXLlewsLb(u>LoLvFZbjfZw#Y(GMIc!_a0!wvom>>(B+EW<+_2JWa1qHo|I67IpFyhB!qIK!-9 zqSwOUG5f0EqIRXhqu0n_vU;7tIRGd`Uw<09Z6ZJl_b;SgD!>Z&@2?l}R~p+?02l7x z+_Vqip`_RDV7>!U2*1%Y;txm>m z3T{Wr5+-P}s;pLnz>TU80n7G*)=I0u!`LYtS=%t-fIV1(7+m~OgZ_A%FkDDDPkER{ zCAUo_L#fDeI&MKkVRHm(%!;1yH`L=msY}_f>=erN<@Li;_`zlo_%8kw%3Q&ZcwOYa zw?s1y71rFqZ*Eb5kV3vuwSFN{!pU+@f&fURy%(soH96 zd!wy0m>P*JLN8f%o_`hX*5f`@-l>=2LfEbV?WX^RLASVC8QRsSt_;~kq1$1%#K+H1 zpI>I|u-$#LX*zS%hs-Ds+X}*Q@KlqxO{f_*s*wy(?o!YDQ85EOgvo+T)I| zv1U{q0P<<+zJcmTJ{y_i%Y&^HWUzREajskV6p!&!Cra}jtb<1y8=Iqf#(_mRu>(gl z+A*@;cfK^>u<(M=sZc{n>DL*94Lt@(bYTNW#wn>oCzzQz{-VE~g%ZBfO;%-CY?KFf zwESYGC1$!g8DX84;0>TC@&miL^r4t?i@9WCT=UfQY+50gfiaOtAK+5CKxzX8Dh?^C z#E?G^RwG6za^B30O3xr-MH~RjqKtPDZnrqdu=%5AN;+`xz(ry!{w=VS&89T%s(fn}^_xn|9woFxXa|3}g{WW88@kaR*x>9RB0KS6sP!nGd$Tas^QEcvkMsM{+_W2@(n6=KG zIT_qxb4-aslWR4S-RZT5)7C|FqsT>m@n*!uQ$o1pSOQaN)`m2gU^i9%Xme|jStWIDgi3U9QOKI;==`9{FRXMM}_kN}koIVxg0Gdmwcz=TgZyKr#BiUjps0iLy7 z)gd>~Mx(R?rc)zR1l*Zn&2_R!R9&}<1I|FP@8vkGM)D2I3WW6S5ckN4cH>l{{mNwP zw{h?4w3+hv_gbtWU2=-ZD>1*y4y=3I3SQi#fpEdn$XLQPYp|y*77N6+a+J74a5-9W z@U}m|YrjC=Yaz;WJ5B}pbp<(}ssRft`~mZNprx6EZDDjfz=t@Y-{*XY0P+M${Lo^v z^XPocik<&}Cz7j1rYpOZI&G8VVnM?LWOh4DzBdfIGuT%jTG}vzKSMruSn+gngUQ^4 z!G^#dD0HKd|ycoV3{f#xipDMCHcgn8qZxZQL1U> zC|JWHktH~w+YYSQVl8DT5{odjs{~d#5s;D^Au}Xh9he26V5dOVBHA7amrfn0HrA4wpG5?s#BeK{Xxh>ld9mTOXn+%P(K{8*G5RETU3TuB8ssl}J zJom9fO35k8xXs`~y7t91x6V!_64oeEn;Z=TR{6I-`J-X7wy+p~fOfk7?N9G=wAdbW znX*NLc)X1VrkyGv(=ut?6?1^}BUyvy5 zB*~Dj28Hs((xf(gjKBSFzu^7}pptTfbW-{bEU-fTPop>Q|E^&ZakVh|$4*cD-(Q5k z^T+4J}D)~M=&f5?`#h99Piw+Zj%8F z2!BHS1;O(^5I};8Amx=jjANYLplwrxc|DwRGd=U(%g)%C`1p8w;_~;M9%rXI%8q8m zxM5_*P&3*7rhJD-;FAWWLl!`mfn=l36YfX*uhJW5gA*wSr~4-X9U64nsFJ&<`SXIV z&C}$I4baz;qYsFHwmE1F;26jpB?fk#$Nzv()D{%sCK$jwBi(?BsLf#Esj~{TEo}iE zJ2mxG7kr52IOr2rQGNB=wYrgn+&rUHM z#^#=$M(Q!KR(wO$fz$D(E+A{5>-a-ul{^eM@E&uls;Yhb zu~T(I_sC{)E=GB?u99+FQvUGiH(MY*B>d8KD1`__w0%5FJ~PSQBi?k_!;^7V+b(BL zvOH~{G;^X`OYfzi#}JNA!=@V2d(5jFu5VYIwGRE$hcB$#yBmlusRWB z+$qT*cJ`|z&ve%P!X`W$30GkKp>sxBOb}-Sj(RGiMUf*2A|sgco`zn5pePN~!*yYG zhT6?N7vswICAhEExw%5@#7sr-1wpgs2k3HT!z57U z3t^5xygh_3cL7K$!hq895r(0Atm=6=64X-E-=DmV{%)6O%YXUru>|8<;ZgLm%H!VI z7WiF*tvM^(2*gU_!ab_ZMeaH?V`Z2TMSVo#2!~TdxLzH%b!4$>ITMfu_DZX|(dmq{#REuRi8i&LzSUeaXK3DwY)oJM#$wHf`XU@2Kv z6UGU;RM_ISOcB?|O8E=3CmONO0wFpzT1y-AnQA|tQv=oa^Pf}6n6wW^3H;+nAlU!Q zQz>I-{7rY4F#ZR(@vl>vqNHQBq>t>oTVk`gZfn!FIuo}s!?9INt4pb3HySK>^9xD9 zj#)-;E1EgOLUY?rUST=QqsX0P5o^FEe}61xKMrv&%QbR`mNejD#3S#FBP=PekJsm? zJwj+8C}`$4rVo-al2MY8c3eGDXrP#$0|k+hl2E)V+)y&TIx;=naGca0a%nJIe4qLr zB6~<0D2hGTKbGTHg?x4JGpbOl{0_ZW=|Q^fl6sAuJrz0HZS?XQ@Sbay$%0>t{L@FN zfo-O06qc*qR6TbdmQCG)3%MOS+hF-3Io@Ah*Ads7eM}+a4J-T53Q4;v(FMu5R-i4X zv|*~yh{~IL%{HC0zcNj~<&949afcE{=*zEk*V>Hx-Yuy~|tVr-xZ+#R7XxewHU0 zI$Rhvn1{1^^cZvU+(y@+7%KTX*Ig&mDBYQ7p>#IsNB42&G7u&c(FH1k;*xk~HgTg! z8^7AbMSO=N<`e47!PpvVs4Mx5j*wn*%eO4S8RnDc8p3FN5C-BVEF44T5%?vSFvL{o zAzStb2ve7kCe~fN6?5_@^e0!cTDYXo4UzIE7P4bk`nqT=Ly zr4I~-9sHOUP+6W4xGzUGbh^Zh1%WnYitWylV7>!F>|nPL;w?iAugcjF=*-_=|CD5a zB>EfK_l|bzyDb0b9qs=ucIDqY+W-E4_*WIS{Cl*wWt@;Aor?!Sgdh}#2hZSF7q&sB zwuTTG4FTtXyeb zt=wtTv-+6zvSXYuRs>r1`zNgMCHK!x)Aq}((k;(Dy1&P(8!YYAfSD7ZG_(g(cNqW$ zLucWxF+|7mAvr{ask;Km4ArxG?FnsT{ty`2!rYw@Az+2frUEDg$boAU11RVk>sOF7p}b#fmc5&_Ksp+S0c!f_G;ZGrG+ zgc$)CeoEyF7a=!`M7%Z|-~=<%%$R-UM@*eu6j zC_DfsgA9{d#>ycwmMO*75YS*>)HQL&q{*78^4L!OEOc2E-XfwbsmE7jW`6N1S z&URATeC~-gr$A1d*TawlYL*(u?4}8)jB8j>j^2*;iU<8+ zkrp?wOVtJB3ZIjHUQJ&pdYOUzb6^C0rrpEH7*Y?`p?ETmgb7I7HeL&`Ll-?4Ti9>|bar#xf>_LHs7sHBKe?k5n_dE6e zQBy4V^j(3DzVy{Ob~F7HMv6#joR&zfTLY!Wxb!6hL6BF@E{k?1N~ zMnH+U0JTYp_8)s)G{Wac#jL6Md; zMJQTs(jHCuCNY_KS6(s-NpWqdrC`*a{nB2& zg9VepvXFVNR9#uwSV5g?R6i?R6*GdUZ^3{wj8%9uM!ug>xWMULqxl&=NPYIN=o0w* z%|81m?#5qh6dzEbQQ8*>Az`6$F3;?Op&$NE7BBIAH(_2JSBOG`$QhT)A( z)1mt;tqKe8eofrp=g^r7OzS-8l$!mT8w(gWrE2R^;!VJ*PTmgvnqq320p|Hu=dIcP zfBZ)EB|^*iP@!{CV1wD)9Ic`@F3@Z7S*k)Kvg1#0_1?dLFsXNf1cr!5s$i^`n5=`V zB@8>vkNHSGnW*_W>$VYY>)JH&+_^f^hze} zL`>K^G-@SY%K~tQ89v7?X(z8oipQwD;f~gQ;wLTP8UjsN0L0wYBx4DK#H*1^>R7Wz zD(;w7{Uy{uRvLfbG(J%zY0eS55=Xvmg*qcb<*d zS5A~s)0Q-}Xbmkih9(!|&>B$b5>TR)(pIR9Nw{1~O;)b?!nxBnc8Q0SU9pm`Gpi(Q zbX!jCk0+VN6M$!KEF7lKhb%*O(n$~5CqYdivdQVa_$aemc!1krdp0Jj|Ag2<=$6dr z9m(j0!P)6EP@Sw$Cu5t$ENETx?rj_5^Cckodb!UvO-a*4?GQ-$DO8KJcDj$92% zz9zCkG9_OEC+cBYxVc=>S|MrtlVkhbu`jb0`K<0_%APR=4{NMYXMA#7=^*MT`Sd-= zbuX3fk?SU#-E`5f1h-awKYYB7H0TAOI@%Dt#pA{JQY_Dfi^~G~W=RRT48eTDoax9( zT7|)`Ff+`}0##P-sOXi-a48R!m^r*5K~%o+nRLmBCil$ainT|zcMR%~-Klj-J0;Hp zZ0C_!HYZHm<>daZovS;tbY@hj>Ce~#k8(+@+}OvTGkA6)hc&t+UQ2 zAigL`_N7ELO6@cS??@TgjaMLacD5sVYL;;A7|A=L>if8Fi3hPd+#a>>?sR24n&O+1 zJa2|#84C0b7VRgk;Y0FNK(fgnY$&hC-NXv2j5Z_Dao1g9(^v^Z!D#7SWIo+}BZ@_4 zd>edP&VKy9CvobKo$k%f+tjKbU5mq>B#ko9AU_;sk2RyubA{&+sT9-o^b%1J#a0rY zC5^3sB}D{822XO;6Ia}WBh%cKbRSwmF)9aZ7%&hOrq>vzS9PLip)n?ONw{Ivs-hW` zb)wIeO98SwlUF^74QP4+7|&2@IqiSQS-EWIO?~k?RLEYtS%c?@-!A0Sh{SXTxH}R( z8guHdRM=H+_A~ZIzj=ad_Brn7+%Ez4nH|s_Z!>?FvC~7KA-AseJI3 z)5Ld1&~9*fyI%}DH-)rz#6(}14)ONW%<(inpXBwnBEnubE7|j&b#v?U7QwFZdc5}j zD}B*ChZ|1>^2ZM;jQ`Z5{x5X|Do)>gc4A=@dlOsZ|K_xpBWI2p$ST@QbD5mq}MnYm`abj!o8M**P4b5-n3)f|@_V4T488>V^qbZM~0!dtV2CG}OWKz}D%xbC1 z{v7uAGM;wzd0za|@=J_UNCbMoWQh3^4*i#E_zb-x<5V~N1bw$bx_47U-r2Jfjb1@{ zdD_QG69t5w7L3-JRj7Es>v+Mp6+c^@G>Jo(I$T7)3KFEJ6$qnb|1TOqQ>7`0P{lTX#`k|i}4K&o3cMx&2?bE%2n8b3lf1K~K;SPoiMvMUc z<$y-xnt6-3F9KUOw=jDKr+>CI9{yv3HZ3 z@MBnpdexm&|esv>N7rB0qUxxoL zBr^Xh?SC>J|IaEQM(KM&CxHAnRM&OOwm>I8kT5mNmaZ`nKaCKM5Hk@Ha~MR=nL?V~gTabc8&)-F6l3De%UA=Rl=P z`|Mrw(|%|7q@#+i30cT~qFLH4W1vrvKh*tdQgwy=Ucw=!fXq(QyT`SDC?{=HHbeeW z1upko98yU96=iF434Jijb%p{!R;mw!nF877Dj^k6m@LwMEKqYvN|WW=;+Vnzp)*6S zhH;#zK*J&e_odP#n}617(Xp-JqqmQ;)=U$s{>Klnr|&Rgd9&Luh8Hi9S4j4N zw7>+?s`5qA*=I86#@ireCJQfPCYSF`$S#z5O%4-{F2Gl6&H{tNB(9GtF|82jF-VP1 zOIn&@J(L7|o`Dzc&EM~q{WseDl#B2f^PEpG5H|TVV3GeC{O4E0?JJ={TiFvs%nhZ? zxe{TSgmnU)d~^a{bWAZ%r!cjyXV!E0q2Y$?1GIu7vp<@!kkNKw20=)m={fZMGlgs+qkSJiR|Zpt-M5sbCA5h3q0*VGB5sT62kva1NL79{@=O* zFLxy~jBj@AjYQHCs-YHp$4=B-uiQ6x4`<#>yvw5#g%2Mx3tAgas3hL*v(MdIuf5xs zo;JEYs4tIqMt{|h!O(n|P8cHA=uLnC7O(M;(f0~0J<&lyRC08Qk#^#>HTrhEo%#p^ zV{X!2c2osp&6u0+2#iseTnxq)Vv%S(3&bM|->zjSl$Gn+Vv%IL9tZZixkzxFa;bPH z))IQX0-?SLbqnMUa?xOn(AteZU@n028sRtwmbzc}8*TQAqaJQ6;0d}xHlBrJU#Jw1 z6KKD4HBUC~6WBcvFtSb~-iIF)2o2GwH=rO4>LDK=2I?U^Kz7Fqnm70d1v{u4 zyHjBH7y;k-Kkbg<+xmLq_Im%0-t0c}@MWGy%CD(mHFER2?`&iZoC&DM;j!vZ(f9QGL?bkOW)6^Vh7 zDI`nw8aeTTw&OyLDIMw}Cm#nEEg#MBY`tdWNn9=lgk&R1$b1M#+-gP^VKQdbu!8~- zoFvebXUH^RnsteI28o=}Zt>_*9_1xxGa0qoYR*2*3@$=c$18TrI>(^qo#ygZ<@M1p zBN7HWAyM-u^Y7Q04W+Ga=>{++- z^YCZU`@OVwG$Bs#F1xo?s;-b^dW}n{FDKYj`+6xCCnx3eK7$(bO+1RPyup)vHUc~BcchQKI zok9pbY#glBSV6v+NQr}p1jQb@BvDYZO+s+rR+AWd(g9w08O)zOM8vN3e}I41YVU4t zW@1&N07vnm6N@gk+N%!|4hRS4cp7RkGa_Qj+~XQUj*zUg8~qZmj)jPWBBk{vD)4sa zbU2Tpu5*eYf{!8oC=mBf;~j7rkhZs&XRLI30$Q|QwRs^6_dYnk-m#*{+9~HKK+Qvk zZ$(3!Ht}@utjt!@9SVoUS2=#bWFcWB=`pRxK6W)T%-yZlM zap8S-t*41d33U}CMnfJM*kDm|9nWjPm};N=T7$6Uw;GPYcC)Gl=7+u`U3SdFw6{7+ z>%F7{Fm(n=lkG0~YI<0(X($FXCZx?3qDKdMmlz9l(_c_DjtYsnXF{?L7*ng^whB9Q zW>F?J2oW>RMp=AV+;bNAnK1dd%xBlPko{>{(l=8P(TH=SUwI!M_ae4IHN-4gV5kT#L31+Cj^P>4fmK1Nwi6mSM7eO(r-v?Z)`P&w<`d)?U+jS=)?N3*}WilY@69L&S`C-G-oCh!u#LXx(aAif*tJiAK&~DWbUvjpc^OcEa=IaSWQ4 znIyaIq>- zo~kR#iRH%0SV)LqzuNteJ&V%cdf=~hARlaj?_58>g8aWE`o9Fx{>BKLe#9#W8cYD` zG&;^8Srb|8|CV0T%rYUEt$c5A! zc2AHkko{BcDQY7rv&<18E?P#QG*z;!!RS5gZb>@qSc4KYj3qD<{XvuNID#fg| z`LtA`BUM&buQ4uJQ$}XjZ9S1=Kr%UDD_BxIKw%@=(hNFP;$?0?6|(~+V>yOufu;5t zoU;N#a8tr1qR=Z?r6p{nPSqgPGmPNpyc_EbC#HSOO!{OT1bPR;4LKU$j==f7=sWOSJw#(^xalzfAV~p0WS@}S#zcboZ8gaT%Tt>sMyS8=c>RsPDLY*Ce{!c zYjx;yWvFFmYUO%_t;RP5?F)hX9N0qL=MsIRP%9(mX~9b2zA$Tzf0Y4(MgA7-A?Nqe z_s@V)C%I@({4E5CNBK{)GtK`+2=H$d)&F_-Z&CNs&r(78+G(9gBh|~(8f$D|x%$;C zv(>-O)Nd@OYQbe(q*WGf@lZ3BN=gzp2#>d~r7SFf5lJ{n8QBS8rAA685E+gSha!J` z0GAF*m5T5g3OnN_TKpYnXa1Kxp5FWy7dH-2XdITIeI*>#F z6e#c6@B+IUK81ZQQWJm#&Dj}3`&f{ImlyyMAlD@yo8K=2l!x#d2!*mv36B~Mu1yV~ z`04b-h(?(J-`@WX0OCTyTXKMNh4>KP9|LLw-=?(>iw(Q;!HL@!#pxT(;q(ofV7Gu0-b*PjkM-1*O{i!Dcr=k_x^ke^57 zTsnsuxo~uf7nB-9h{WhwP!IeWX$|2*cEJof%Y3+Ck9T4c(Kr@EWp)3S`Ny?cBnWXN zBxh~c@jPTb{>b}7U#aeRScBd|b90=+O89X)?1mr4?XnjsJ#1z)4PFF-0N~L9% zQ|VqqOPHb)BP(_&LrMo#qE>4z($Y~h$rR#&gdt-~5QTM6qHSVDU~>zt>y$s=Y$KElN&LnY}0&1v=^WY_NE zX%aXEECQg@|QDJ z-`6XFV5>1CUS`7>q$bVInWQc5fF%yPf%b>%mcuuqWUfZpDs@y#ajM-knExQWRMs z5m>mdjVCkO8O=fvp=^MUZY&%zHDmyq6NKPU@G^;$FTafe>udw}z>ch~vmj0gA2}?? z=1M+&DLHEBy>{A~@=N_Yigp!L%obJdwD-;$W|$`@6yfd>eE=TsSb&ddz&1TW#a>>_ z8Z0kLkc$lie9XeTOIJZ!XEYFaSD1Lo%-Z5FSb-C9fOQb96;Sq|Xq>2Y# z))7u8^x}$!gzYfg+>ClF`k|tMba@FYW=x10N={I+G7Ze4_=@5b0u;k|4n+Da1W{{3 z5izn(yv$!<>QUZXh#LMNwSf1I1G&tkARmKAZ2bLX_=YJ>ok>rBCjfA-?$#KVpzY(E zX7DSBBJor9gsx$mPBB-zv_5UjFaU?fR8n^4Y4PZR2`%HGg8NY{cTk~7FF4^w)ZPZa zH)Tes!1-D$VE}zeXB2(pt$QW0!l+%*qH9O|q|TIt9ZP+fo0uk3HcCY7IVhelm-K~l zzpk0+G7Qq`q5XIx|Gs-~1N#1VZFkoFZ4Knu@e}iO7~RR@G-2eqq(ytRVtl zK2cg&$z|A5>UmP})J3l7y|_wzFJB@@fuXXU4u>Gy|APFNzF5GASws=g+g$WpPVAp) zJBHtBbsv8wK6pdHUUOhWyzHs&&a!O+VMIP?%U^au=6t8m_uXdkWjQ^6+#c44`Z<9$ z$fs6uZ9W%jiZ+=rd%>L`|0Yq*aPmF9|iucdlxBmYNXl_8vz za)#V~k-I-mF?)D{r+o)edn_Yn@A6#$Td8jP=4DW6uN{r$>33mIy4GGjniFHBsSr_Z zF^^3293`c8423!{o9xl1rt-dswh=|%NZsL@svMtNTzP%g@Y2LP_b-}N(M$GgCA6`W*zmhhi3ARbM1?WJA$3UV|{qE?>9CFwoYO75(eP6s^&K6gBOro z3`s$#B6DV~9#|C~;4`4>>wW+XJJUFfWms!}V6%ZB*JUFjqFxB8`2ik1^o^#``{|6$ zE9wyIms!%Usr9r&HMFHsN#8Z_J~wbI$YI#d3e-~OYBa08s`=IQM%5Y1=IWYj02)kz zP^gM8R*_TpmMFjq$M+9BYoizEw&wrG*f|AR_H66E%eHOXwr$(C?Nwd2?JjlMwr$%+ z7rJz7pZ|`y_dc9`&U%;;D`Gy($T>&mmm|mceb$P)N581M!O849bZ~m>K3ZiUSNivw zp9hYY-=`mSliId!oOxJu-rQR3!_JYhO5C5*TJ^4x7Xpd0wE`>i(Vk2?Hn@a~89wKg zWSJRU(%L89(eOT>ElY&5wxQ)EtG zgEd%=XNOD6(GUo+ssA&^2iwf*N9AD$Z&43G3evjifMW9kUDiYxEJ4 zEhNv1gO_ofF;z!d5C!5uQY)y!fpe~USf<#C3$BRV6BF((6YmI$f9hD){<9{q> zxTEtEQIFvD%3NNS&l;T8CPU&|(_O2=*s*`cWVm(@>mSrlnyHg5v>D`QEx(Gc?2}oYqriBK zXxa-HQDh%1)xa*T=~aXV^kqJO(8$skOmtT7w{f^Z`#V)>H#SX(^}6!fA;RIAKl>u& zf%Xw)_a(bxT!|DlCc9mFvX2=qykTQyTtDdRPtkVcv~Ntye{=&kJ`(tL_I*=F=ZB1B zFv9DtBgN_vY$UcwXfVBhX?G)?E0%VqS72jil258o7y|JuC^rRm(1~_v4=OSYb6G<* zQwww~QJtEtw5wL7?ag98@^q;c~WjSJ(gMULj;4q(b~tp}Vy@ zJI4?6;|C_*e-h^Zy~FiCiP3)x^Z(aEtjib5P*v>S!|jjE_Qd1_6i}{iQE(_OF7>yi zO`1j@a_)hsfyxMm8xLrl3Oo~V4{c}a9 zM9Oo;J-^zgP|9=VJ&@Y4>RRdeRfVm_QAovR!MH%hJ&_uJ)p$;YuV_kK#XXZ6|L<`M z)z@Nbk8b&t_vi(h3OVkTYcGJE!W0rv_*dDUp1lVwkJ}=`g81pDL*dF&j-MPzP z6wKoYazHgG=QNnwJ{QL1$p}i@zNiz^02yo=vn{D%H`u;52CZ?bwNnO6>MkKbiJmjU zih?EExKA4+d$?p_&>CaWxg7nC3HL16%s2@qHA;Z-Jz~!f_;O%2tzZxg$mu)JcVbR6 zgavESp0Ce)6%4NKoU+<)n5u8=8M6lie0daH+ZwZ{1PJILB%U^E4crsP5FNs!w=~9K zjfldew|K!D*n+i#jbri^4Ge>YV8I<{3@!LsFbP(v)wAT8{!IsJ!2E5vI_^j@aD#Pi z>Rsg8aROsuy~;uSb_b1z`}Lq#lIST9%+ zEC5rqA?AoGV;(#4S z-qG5SJs;r98OFdpM2vUoMrK=+)-OB}J}`q` zbA-NKKYPj%W55q~1M7427IeTKP==Xn=9#<409(V-*>}r6&;c7@_L6RdFd%^0ZTb?s z2Lbp(CS;_9wf{ze`T~Ff#(*NsPWshAiPl|WC%geUSO=ze$v_j#VHVsgz|cM~-~sD5 zk>FVTlp$lZIi<%y`MvINMDq!H$nAeu~@F_p&RPaUY*Je+sh#Tns`eQEH-PGR5v z+j5-qK^A++$VyCn^VPB2Rvh7ddH@C%zsU>W$4L7g?p(hk!T=BK4bywfo(?eYAl%7; zAcroYJz;OirXx{dtiwJwpaIi=$dO9~W}q6jg^73YmT^EHAmRG{Lty?+#X^H}+C7Wf@chz2H>~`WJ0ds4wM{lY*7`N0amlmaULN@7(Y~zUh z?9MEZ+b_bIvcw6OH&=q7app`FRdJ*(z<%cZP2p|B)p2VJrXcLCO)RT}=Qyj+B?y5f z0)UrR?<-^8ESZJMD8c+HOpuX-t;AYpWM!!`;|$rOeLTD8u9`E0(XX7C@?;x;2b8&b zv22%3?Cest`(hi+9~MWWZoarT>l8|>*>h?4 z#Uofa!tpGk-x(}(dqvMJnrOk=?)$!pUcYLh$N7xU{*M1sD2?D&QD9Ku{NBMcgI>V+ zI4z%?h3rq48}Q?3x`_>n~%QCK!JTJS0q*)hCP6c=8WYk zMl@()5c$^_@LwCM{W}gY>%vd%`X2&h zpi68#YUmFMs(85Qa$`#8cVc{Q{syGyMm~!#=jZQ6*NFhTb*618`TnX@%^?(Rae*%6 z5Ev8}QbcIw17(#f@X}Ch5(G2vW0rJ@VSS4qdV|oCE?l;4FYI-3P7|` zDssK0XIR7t)Tth8=e?^zl7nduL#yv$c1hWrP2mAgQf1+upd(kp8`t5mWxoC4A|hNT zxwN06S{}R_no__j23%NqVZMl%8DalD!nv@lbzhp7~Gq*|b>#coy zH59hiMciU22pnr>LXsUrnK;UVJ?oSf_|(F_DDtkHPA_fJe1Vh4K?4qi^_4hU(;I<7 zwpZ?ziFr}IJ$Bd!T!EwOVdLz%q28#54%#0v9FjqSDjk0ptJ|t+_@%!Q52ufuWev|s z>>}CytOkn`Q!-BrzPW#FT;inSe7qgK2v2M7C5jqZJvoognkug>xvV*T1>i6cO%|I) zJ=mja!zv+Zo0KaT6jvlukR%-I^VY`eilVQ(iI{4qNiZ~f8hn-ZciBZcnwc=z?O+?L zB&HbyhO?L~f+C{8P|@KG5~+uiS^Nn65349g@{Ti1C#*VHWntHBZSJP6qS;x+>0*)# zq1DR+=A86Ewv&g=CTvR&(y4kzjiEw4ML+LkX{2Up>lPPpDhYPnOeg&`l~xS1m_Jjm z!|RfQ!`)}>r$O4zJexhC=`$mos7|fU*NgfY3ZSy=%<`PZ+$J+_f5+g=#Kc+ zcB~Gc8RE&ctTAC^^OF4u)C?caJ&#`v@lPOllA60QeoBR+qE_aVX>l<{brV>%zd)x@ z*FI_YbEu!LkW5&8qCS^3K^yN-Tv(-VBdRXEPEuxW{`LvYmMA{nln@`UwwGy98&7Ve zKsv-Y?oK(QUMKq_*M>L6?dU{hvRVp~`aEHWIb+9dPh9tfk}|(S*%fbp2HP?fz$R2B62lIZtuLz;#Ei`dw(PvU4z=EFHxmS6Y)$f>+@{y>Vt)RuIs5$;t8x#+SCTbF*rl($m5*9Nk`jg8?V)y+mkS6<%WYj4ng^EBpz*054Ka@(^~ZQ;0nahAxdtv+eD*53Y??;uYN$u^$`8_D2W0P#X34eYV4)q+j4txI zT5KMx<;}O8#>JXpRbg}8;vtzL`h#}N4@!3unyqZ>Q?TRgGuiLxE3LaDd(8)(O9Sth za?kFznQa>XLR->FDolH$teZ*v-=9r0Ey^EJ=r;%W?v_gRETyel%{6?H%J(JtQ0cnK z_r_%sX$fhle>{u%CLFwL4WL^KE7{+?Ze|}alKEm z98YJlxOuCk1cs2yp2}AR3TCP9mR7l{?PD~V7b*u5xc10;M zUj=pf(w^q;LN;S#HAh}@XVG3(a63`YyhWqXd}B~Cf8RYIr9MhOJ4?yA0zx^4%@OEIJsR^HaX0z+A`_u8eJ9OP3WcDwyoVB_- zZB~2mK5hVPq6Jbg>W}^yxZ`J{b}8c<*jo%dEVl18W%d&;tEV7;=WoocLr$9){jpjp*#Y0kl+y#KYu95PDakYcT`8E8CBJ8E;tThiJ%k07rf=<&KBi;!K zB8x%S3fi))EqCz}g=ubAYi9HBO=|CEG2PL^r7mOgO4H20OgPXJUxtU7Q+21WHbZ0E z7v<)YniLjllPsZ3PNfzlB}#uD#a9t2T|MikUY6%}YB$G`*AN3eP1Yr68!Qf3QxFTqbBNY76sBht5SX4`ikv zd^8Hbk*|<#VYntPOeXT&lm9lLGL8vOn=(`d@?)ytq&C7BDXHfN*gU&DYCH-lIpnf+$4r60KT%;=gucc71nS~lUO z*Y=)<3%7i(j?<*E$=%Vg=x}6ss1uP!uS1{ajU@Pl%vemcTP2mx;jTfcq*tpqmou1m z3oa7e+)6sP$S9R0*4$3YAzXBh0>aDfX#JI-yR|r(WgJ$L6xfG%F-i^R4^8tanOzis zEU{8PAyd(0@yi35YV38Be9Z|o*K*?Z{wk4dgW2wjzR~oczL;8oAcwQ~kG!`ubUb=e z%7EsU8rbrBvy3TS>NDp>vfA0pD{_ZEC3d}TJ%QNVI`^0FL*-1VAglj~*uBOJal;hi zNnzrZ4ln@p97i}oGBB4iCf1^JnttyRR+_Li+WGQQ&{R6-JD+`(b3CdWG`c9*T3Q#| z^49$*h~t|ha9(3`-MdWFX5Rkbc4k-#p2h{wUE-DcDt8mnseA%@ktuh#u&-l<&c}&U zhW%5v#^EP>)?%w*;WVU@ycju@D0O+lE1V6XaW%5VLO%LKRZR$$q~cn(F&|9x~hp&22AoRQ6ruH?blfF^&Rou?FlrYXHV@T8m=5^38s_BENfaG%(8 zxGeQ4s2NsOHIP|Z%0~xt7w(u7Qssgjs~GByQ)>!frergq+x>xM{d0Wv5Q|yNviZsm z#DY!I=n23U`lVFUb12{_k!HDTwWxIUAgHiwKxv3OF8uaVpk`{GSHLF|@QnjZb6Q1i z7dgbMZVuA^PNmC)tGcL^#|_R54wPT~eWAF>Wu6ARAQ5$g_^70@e0~P=(xMV#3B;Yu zy)x*UQFZ=_wKb*C)n+sPB3${=q@RR*S5?}3bmHP7w1QAF7V`X&&={!1*Ab_v54-(G z@2g$X1d>wz>tfLU zsw++b>$%9a?AZZ$81Hn08)#tOmu&g!vA9)peI{N-U-)XI6t9L83^y0t#qOkN?6WcQ zZ@;{@OqMiUju$Ab+y$8shyTJEa7>{$_lgCu_|t8Qh=xzG(-wJtRhD>p&qG-@-xAHw zmpMijQ**=QBDPTMeH}R=5fjrP+pqKT0>I!WiClM8Z4dwAVGI3URTIwu#xEP#q}pzy z6Vl`IGt3w@A4ymFMwwV9%7-&iqnh;*IL8s52BT72e4a7%#YTrgeizrZ>?X-~?qUtn zB|i!K;s-zQ2e}L9FSC2Df+^lkQkAMALKSZO4;GTAx$H1^zBhEyeG3C0=b!0lcOxt> zoswxu_VUFK5p45!gV<-Tf>TkhTxiojHEq`3FD$a#BzWJS*JwYubAFyvu0fAjNqNNU zZ*;mVjz-Qh;MOYjq_4Gf2TgNg?aao6XX{pw$QZL8LFoK)?XaWi6TC*#)$BP`Nu1RwKCLe4PI7{ z&n?SC3!(sXfL?33|AWwO)(hp{+oLP5q~fWEqZ5vLyK|Gu?_LcyK_nH0)1bBKbNg@%9R*GfRgPN9S<(A9BVYF=prKYx1*IwNXWtI zX=5VzJA@eM*66)Q2J^!PJ=Wkgwe*Zl8-;ve*P90%hRxBFQ4EY=e>((?<2e$?Tmga$ zF>T4zM%$TIg_k~b1ZfbfuTj{q)RmJ1g&2onjt zE!;ps?mtgofrKBVw$0BTwupUzD%S+S>VkFt8O|{vIDzRJ%L2V2M$&KYh!wW2A58kZ z4kzN#3$-+@8+~%tF!*jbWrw5Nut2#97f#yXl~GLyPAA3NWqkXqrABDF0?SVa>MvtK z-dq+W7>RcI%=Q(r-~eMZ?(!v(PWoJ0D5`0lD2e{L1ypR`77WK>)N)?lI#5Gp%q4s4 zc$UnR%T=>e4J~6fcn`-YRlpTxMLi?mbre9nvP7X&0K6ul<eV=i&WLs!EXd7tz6YOZ1(4sBItsQ$pob-Nqsqi&(5Wa$*?0GKSU!2NIbxW{lbbJA`$&Ik%T5m$GW+y{3(RWTv~V1or#6Y zf0jBJf+`p@lVe5^l%cwwJ;CB|OXaFWtnK^j5r>P8&e;x0tVCFsx|=M?F0u`!es~6t zG{8xrd$$qeb>dW2e#MIPoC${clr4DSI)z|REcQW)+%@Bb)(?xg#m0rG5kcvM(&*c$ zMcEGH*yVe{-o~(hQG5)E8!Wi3qXf(hCfv5A0~`E=e(6YuGl&qoZPJAQLMM6=%7zn& zfZ6RaCV8j*9n`gNzD|#iN~vFXe?hF$$)I`{HaqA+45QSlh-N>D!Tp4>#wmKZ%b5@- zG>0(I-z(1aVk%xI9+w1eO*RE}N{lhUIU~JXmn2qA zTQtlWWX=I8rLoNP;A8oBpqgnLZ~cKi{I#?cZ0?D`)xIbYLSLqPT_DC6twSkWMwy1n zRo-jdl#+!rt!>B^YloJJnpUn_x|yl+saBnyDRxGfR%3V1Htq3-7_=yw``v<`aiL0d zL?5cjYXK|x*KIpo+8(_P29lIg%KM|0Lo@9R)g)6r6>l^4S{T>jX~f%Z;)Y?&$D?Oo zvHPCLDwzI=9NLp?M=Hj3pVSO{%fWB7YRBvaSQOi3?caoUm*!W*k+aYt$ke*tIER0f zu1+ZYOqSrdP@^!`LEbtzBvMb%l?jQ4PBKMF${5qEKbx?;$ppR{!2YJL9-Uk+cjy!- zNMJ*xm$4rzBX~HB78<(AK}leR6;9HS`B4IQWlMrBEC2n`4}oP&1&i*VPOaVxixh}5 zc*bb3C{zU5&pr18XNbC0KGdl4XD=S{zXFq&Br_DzMl8SyK#5`zakp>lL|Zc5FvMLa zS%ty258NL$*tC!A1d(!GV2OjG@l#?j#W<}s61NJ|p$=EJ8-$t%lV7_Yr=F`G19w1Z zQ<^Usul8s3r;Y=Fc7}G66_t5GS%hkmw{wA=F@!=a!r_UwVDQieV*=5A0Y7=Kwp~`e zVxN#>HgnJ23D@fkAj`Z7CobNRPG)J7*#>ev%#&_qj&fy8Zx-A#%dXrf6>f;+SDkIz zhW3HL^omROd%Fz}|JFPe8=69qXO}c_>0AviGCttflXXV{V}h!sIQhufD!itOoh6yw zZ7GLLY6r9)ul1fgD%Y~|j#-5OA-;muhu-$I0T*OVhb=}lb%R%KQKJb5ZYK!w(hwQ> zlwx^@-k=#@o5?M$0~M1Hy0!uzj+VJt7H8;kDw&vUeZKq4tCpm>un7j!|Sm}R=>suB3s?Ab@J6R#10p!>WSMz&HPPCw|-s2r@^C7kc0<( z#}**``C-jsiepc*k@>RRm0hZ5)Or&_V`2;)aBz8$r3Aaez=ZZvu#Bn0Nnhytw?CiJV%aWZ)BG`KAt zq|A`Miex=Z^M{5pgC`nX;yeL=Z%{1+M4tvHX17=zqG#>wt>PR`cx0bvdiqZ>V{-Hb zM(IIYTC}KI+3aW%QIJ?LkH!DrQH68yMV&4>>tbol-?Pe%A5BTfW~UEl1V6#G!EKNR}I zTA?xauv#%^hRHmkl-T#EJo$3P*)^pH^kb`^^p!<@BIL!}#uV3wd^4+H^_5_(>IaW> zwZ97@OWVj;C!CuU>Bx2vurf-*sJR|^^ryxNHSR$XJb0tifEmi;ynvpLakmefJMAh8 z_&UKsRM1!&p0*hK&a4VECRbAy*A%_! zqoDeZIuAK_FR>daHCR##Jng0OvRQ)@VmIe#SM1{Q4elMiherCYdpx|2)M26>Gh^zx zT2OH_M`vVppq9@z)G-qlH;CjjFGlGP5$7r9f}}5OR4!)zM939FfzNj?2{9Bekc00r z!uC;?=!bwim%u-5>`x;gb9@U4Jn9% ziFJ9qlWVskP*H|>DdYZFrn*$!L*kc>@NOs>nQp39D_%lUT`g9iP^cjt@hz}DJHL|y zUpS>}G*lW3XF}j`<5+hXQYyunme_}EqjIx7ESlzd)}Jn}k~>RFLkthj(K$ALV4`eK z)kgad+W}N$DAx$i+{T z=@|3;0ct*0Eblk;=~lNjXo6FU7T~jUy3W9qWawYpux$W+>nosYpB>UZZ`tHDYSd4i zXa1~1D+$hU;*G+!Sh2C87H+Ju7_bFo8`cHIu|lYk4d4OG^OnHD>ij*q_$ZD6-*K$z z-VH-Ou;i#ak6NgkK$}~6%OSg4RI;iWBb-hE&o16O3D>sBEgQeAe2dDj7e=zxxJX`K z*~cLYs)%heX{rqTD20fzM;??f(SipqrLdVOvX@}ZFosB$JF+?;1Ej25IOp+}QK}s@ zk9~t7otL1O9|EKhZU+a=A@IOp&QfJeU2bcZN$1TA$dMl*bOHyPb%v6> z9gV!+wF7)a*K-lL5Bgfu@Eq10ty(XnCAw5meem4)O0EksRZ;Lx(JAC+vz^bSXJh%a z;T#q$b+4W2dQFR2S4&ojZX`Y(vsN8$3;dHjS5%i-Jrt>TbdEe8OpEsrONw>@mb-~( z2p3cy5fNj_C5Stg6mnyQ`Y^AanPNbRIsMU^d3OLgc<#i2F@x~CoA_iq(@wdIZJFol zE9CVim=yF`Y0A3nSW{hTOu-pW!+s?_*=VEA|V(@Rz!k0K#7_oEWIRCd% zT&MI&472(`c%6?y*1vr6PZ$k{Kadjfky0QQ$k{=4-+MqCYfjODGBq3zEcJY^TOquL zNiK0yQqwMFsRhoHWoRwh$_~_WAB6$92qs6M_oEniaiPf28JjZpPEc=3XMT=OS)+RC zj7d>9P)DYt2`ZC-j!T|i;L*@+SHP#l89lSznO%H=ZPCl&)bp{ION=iG1G%Ij(wDNi zUc@1qN%ZDmKf!+ME#`K{{ptivYx2#@ovI6gJ<}2Q)HqAKyVD@U4YBUzwwAaReM}da zuWclgD3-jEFUBO@q$Q97uY5vsNR=7~IexOVWf3Y$`i)}QjMK8LE!C)pyMD)noik3v zF`=&U*s4g^YBG~-OrOP7<5pikGB+${#zxq=S`IqX3k?~&Y5{g;OIk~BGniKXCWS$$-U{#t=>|HGedb6D6=Ka31rJMtXPBne*GER^tF;<0_du%@J1xUjg*@QfV0TnG{G*kg zSgxcVS=!7Av+m=RkECI}5>xBS7+wyPq5yYS*VmO1WD}R33nzEOJxv*2K3T@8hiuHh z_cikh(%xqJ3;m|q?M4qzl>+E%FX}Uv|6U1aQ%J{Amk6WMl{baEv84L7!xWg#oLO|U zt!w;JD`lkRlQnH2aKl99LgbuM3ffI+%25lPkDiZBhV~&M zqH19_dEzHZLNbax{FNKc5qD1asQ-!`Kuphe{O=vE`GeGS_5ewn=@gLzMyH1A{j@pi zc_Y!WV>dDav_;y*_Xdi3v1P~s2F4J3Xoy;R=_Evl9yG5CfZYZfd{62roC_Y1z;+w^ zH~`_yMhc^m+fQwTsH;UzmyDIsj zPAE4VV-)6&+l$FQ700Qv6E-g~>sIa6##cl?hG5+0PRA<;wO$N;6vx!St0z%@%QNHJd#srCTAL4K6^%UUW#Hb2=;Ew{RXSBik}~S-08Xb|X@a==j&b z@_B}KT!gVlTiHrfEfPO!;jGT>My5I+M>?YmHF?m!^9Qum1}&)E8Aw+O(5wL$<}j6r zVKXzVyjtY0s~ION%}}jARoF!`l4BP$vUUp7?N4TSebw0D7Bq%SrQrdNanKk23`ha$ zq|icHfUg&yS;ms1nHMWYS@iZfDhLAhB08Q|b%DpU(KQ%JcxSaq;;x zNnQI3*7z@ihIjhpn*fw4mW*GzQdRuiRPJV5iy42gjjQ`Cp_gg68|+I5uO)O%8t~1T zmBkzIu4DTAm|DwJQj2VZXw7Jpx(_kxUxxl6gU6)n4qKD|_`zfJpUT+&CpN?XSH`Ad z=IUx?Z{hM!qi>k zN<7Xu5XP=x(paBY3M^=7Ye08P>n-k*kxCYCS1g}+=PwDV^_J|oGgyyEtjUn1?V`Z| zA;&^EZxL8*0Yr~OFE)mAjiZ{?GF+P)L$Yf0vzjC>?77B9{JE69b3>kC z`96d*Jzx9A3CT-nLZaZef6~p=>uKwMZ9@i42TT3`-FMqoa`Wezcy_hB03C7m&~eJ1;CDx?L7* z2S_wM4`)M^aTd8%lhniMn^;m~jGahQY0P>cGLB82)%>wi690nwhC#qpng6#pjf**k zCLls=3*pPA4ysvFW)OR^ok&rH67d-edz0Y(1E*@4-KT8-f{r}RC4EQ5Xw zGhZx&_&YQJ#Vrz+!GIrgcdU=8Z-_@XnAD){L?4 zunQ;o0jVrjS$w<`c6&4dqwGMu6S#!wcV{+MkD%`Gh3qZ(fJ6EbF+atD9H0gBGZYES z;XofNU^v|D9SmXog+@isIBo(qV88^pP?nHK5f5Dx>zBPiel%4@zM^CXlb88T7S(#`QsoQf>ZPrDjn0_VZ-#Ud(E!^TZ zr%n^)Pk7m|ON%BZ*1vejI>fm+lW?gqcr-gpi(9+03fJC2FB zZxqR~PUe4S_@aQ~Ug5d|(*cE>>Y8X0Q|>~6i^JJP+oxFv@p?m%^43PtQsF0Qp zH4U-{ZI(XvE>%dV1({uG>t4ym!u}GkVMZj0S)uBfz%VeH;_z2UVK|c>y|`?*v1sk` zkZ1{P?BLm4nePbsE}WlvdUC83oa^^pbk0wX!{@USRV6Nf2qQ6Y+eLsdp+;zg-VdHynUQU}hB~g9O1t_-_#XN^3x9rgP#3}fpzOcHHYkWrcMK#)t;&CGQ>m-2c3yaMkE5a#`#Venwu$$x=*h(-6 z8k0LH;)#u*qMtXc`4@5}@sMN^O4*g-M0l(zIgfaO>J+{d=dx5G{_NTEYLQAbUT&uf z(IfsWGjsYgHf?u}HRKAIVy2+>3zpr%Z3^DG9>>|Q4QD2=SD;G^$FI$8;a6@ibq~#v zBYFWAtC`UaDZQtj%fl4w263(0xV_`srhmj{i2vA0>6(uGfIv(yXyp6vM(YV!?1=qz z9a()Z8|3h=H5pRxm8A&ljA5Emq-?=Df$%)tgf}u(41FEGW`Al)3Dnj6Gwkt zEN<_sNKM3HaG&=`}7->hJMAuv$?S!sXppHDc1sI z+_zUv$_+{~y<>2@dQZxn50#r+mhBxIk9R#2Evyvb{e> zoNdh=WVODcstn2cUA!icNBuW$*T6{rJa*>F$*Uw+1;+2RM|ih#nP7GB>syRKKq_d9 z$q7LI_;HN#pTr5*|E^nE(b>Vo%*92_)5Pq*WXeB!(k*UE8iWZoOyTnVRI?g~W52&W zQ=Kt*A`)j#4asWA51YZnG&6Y;;jiXzXnNlt1k#=5g@oxtZDV62eA&-&D;z&4R;B84 z3e$uL;S*i!f>=k}1t|zNp)QXPB$lYPsC7oIu43rK`xK_5+5WT%y6#;|<#Vv7{?2-h zey`3I{rmyepI5i=p&uhiZaJE1_s1Oc?&r=6(c2yc z7Cs%)$C1k*W^F@LtACN+QI0zJrbI0$`^Sx^&$ym>PIyi>H%^{L7#wzhFo(}zzu|ZpeG#zo$MOBr zWZo&KD#kg;7Y~S<2@(|QRCVeRa9;FP*TN9XlyfyEh#PK~1M#sRtJNl;JZ`wX`gkU* zg(kWYB$%^IK{4FYt3?ONzzRl5f)+-O+JQc3)ahG}5!b=&!u+U-^ZpZgq8k?nJ1=}YwDJA-~}!V)Zt`bzfbHZsCb|G zatT^d3p*o;JqbktE>G&F153?w;&vsU|3btq+iG1w|BP>-z!y&y{q-!D1-+DZwoYhI#J0#9CYfMFNwR#t@ zbNO}>ubOF>UxUsF%OnBj!p<^d-a2j58y@%D3SJU3YS)f3ot)NcYC9%3&t6w$S<5~2 znTV)uyh6qN+psqjwBr9<6gu_9*03YAnQl8vP4}4Pg5|^Y1$KiNvyc~(t$=6!S0WQb zu$b$JWXdK`o5CNlgA(quL$E`f&#+T``_z`u1Qll#s{>~?nh&lxrl}mfo&gexQrTV@ zP%pU->`Z!UeyflCG;p}?h}ww=(KEbjb&l5qZ~theYprA}mg*cJ%Oo5LQjAG9B%~Z| z!~<^>);?pLS-n^R;dMYZ?@+6|`}(YTW@(oAB7$idccT?8Ao4C`8+(Ui(ph>db&4h& zXRL!`Ne|T}bZV*dD>ZZ)$(vJ}6>5sS0H|Q3wg`^(fflGsfl>g{_!QHlETp~X1*p7i zmOBq^hvX0R7I;9-?9%=9aT@q-AkSAk&izj%a$;gMGZ)!(JMS~8=@HR~gF-%Ut@?C| z6@GAVa1d~P zcW`@maC~}jad32eaCUHYad0KLysE)^(U0uGPS=m!#KOr=SDPtDad7sm$<9e+o_yhx z_heOZaR0o?PSu|I&Emzv_`zb_{GY0d)=pB!N>K6RGgLBgl;aBWbo9$08N;K!XxRqZ z$=T2FbtkG~?5=6Dsnw)XVd}|5q4*&XvYhY&8*cHRY4C2*f4y#Rt;Mc3{C` zr3dPR0ErWV{zZ_i2l0{?bRs95DlO^C3GyP*%mtBj4iY;GI!6s8))iz&0ipP>1!T_K zZDr+q7Nh@<^W3+&>JJBJ3kD-cBNIzA1}k?j1``KoGX`g~f4b__zvngA{|mc_QL$54 zP{ic(z@bTI#$;4PHSoM@ms(TR&n7~Oo(nBN0_k(uQkNLhm0F=&>zNlNlr(-f|Ms@X z)j1|-m@`{*@tN_vKI5YB^Z)$&7p|As85$kU6x9@sSM^r1FERLtUzCY{LJkdhfLgdd z)GWeSHY`|FfEe>k0zurYt-uJog$=W{h$u!14kmrpa6cC?lD<+K+<~2IC~v5$V2`f} zH&LazRNr>xBj1#bl1_2yZMMMO82Q$G#+qq9_s4dj!N$JCD60m0imt`9fu)MV1N8W@ zM^hgI{<1JnMn4P`d4;VTL$eM1Cec~E=RAK&^EoH7?QGFB>$k^|WINO6R{OysZqF93 z-?=JYfE;1HkffpGLixJRpE$4$9}6^Upn0UE7Wi_r<_X6oyOwLTD~#CU2(TMJ``6{* zLz74Ka?<>|W;7()jqbpH@9wyVv+9e#UM;FMt2p+5LVADHJ*8y!&K{|PiE}6BdF3u8 z6D3xKbT?YRv5IJ6B$2;?wM>>^LuPz96whmO_|X-GyID0pjr>}-Q#t8d0OXC)&btsNwisv3OgzUhJ)ts%91j5>$x}R~f-3l0B@v6Wvm>tOyA@Y?l zW%vR)uz*xj3E=0H$|J@fw*RY=DDz2iP1gwMl10p7*Kf)waiw9JZG*053<)v{UGFmr0v8pROd2Gq=IMacp#=qWYJ zT;T^a?fhBcFm$R%=`eJfM$v*)=49hE!9v)kQRqz~$FyDuuxs>}_+AOn>wjTYD7q$7 z?}hu=^gU-U#4@1#fIGmzyKae(!y@Cnlp=EURrj=mE;=!z{Pd$mdN2;;JS#ESR!JBM zZ@Gh3U^<0%V}KoyJsW!e06QQtu0BC;QaUE}@_^c-wCe5h0pFl`=JomqfdJoNV4}W+ zVxTyM^mc$gLHVx25ZK?*1@xVObyw}zcq$I<+>)UM zq(OZ3I;g#?sDJfKp?wWop?&pansLA%x{*XA7F^P!Fzp-Lg&J)!Ob zj;mlzkR!ZkRRLv!ZQg`9%rR-*C4R9Y>_j(*((e1l=Ivo#{_SF%6iMdo>9arU z&W;ilo|$yVnKY6J<GE#`HB9k0( z!bN&L`(|Pl8`GyM0IedeKymOP&bZDcB-=KLb+rDOj`Z4IFoaE4#N<=N@+4pfA}Yaz_qZT~|3L_}EF`vYu)dA)a6IJ%)jTx`5hPNuegaekjG9(g>s1}<#v zPvSje!O!h#WK@HJ)8XH?j^6pv+HQEUV%ZW@4({Zxt7}J(n~|N9i7}U2RIA?G^*QL^ zWfdK*juu^)FCWDpC6-j~*e%>Br>>p!9;ClL<2ZjBhkLP&GA!CJJD(pd@6)cwPNSTF zG+l^I?CDlSo!s1p!T6pfaBuL9kacd0H)#vY3JmjiOs<+do{xnm+eY0Z05p}H5 zSz2#PbyTvUEoiauuv<~VX}WUqXSUZ2)SyUm(o1U7(WA9M5zm@u!JXdh_3Aq3vB&dY zbIulVuwc$QUtSp+^jH~=mBURQ=k2p~im&BJoc!C-BVa<>o0mbrr(>Mh{=c> znSbWJ`|N%0S$plZLhDwyj%;ZuCdmZ7nk|zX%OA$#Da+QU5L~Tp0PD34otwPtNg0o} zeDc>oA2T)vwnxBtfRVV5yL!~!-vdH^*4I{~0_j|2zttn<`j&aTr1N`OcgB(FjRXb5 zJ4bzGSqp+%oF3NSY$U2U3UE&;-VU;+{2ib=XI&$cvUn}Sso5I#HXSsAG4e{cJKreL zpjx}%wMxvvPVLQG%rJ1<&3MfQpH56{5w%tk?O4A;x3iie9rI4vL)=faH(&yA^O0gp za?SDN^z)iAWiohQR*L1?)g#1*Gj9ej!#t_aWb;7UbPHfA0bx&o?V-#!yighegC?tj zCh26RdJP#-t$}b;XNd>vQ?-Zy4*sP=3B>*^lZ>qx8v6c3;|uW}Pts}SabqjGYTc;%rqhaVGT1H+7tH6a*hmB6N}}oN zD>l0c3x&fP#a<1aTqZV8F6Tbx)#|H)VV;_pAESrbbO`lo<;fhxdF9#p#)UC5bt@du zU0w$Y5*uFzdwtM(A5Ng?H`mJ>@5dW^BUev7lpC#kz0*?HGU5{Hj372sm=d`UHv~md zj|}?U*+{&1YeR!Grnhck8)vRINM+rDJSc(3H(L^#-USX3-ep{Te$Q{t_eMLx(=Kzl zd3VpNk$M^ z`tA)M()T^=Oq!$Sjw{^mC{Xw!Wx!)3nAvB^5d?lIEkb+Smmob$$NeM$2Iol(jHAj< z8Ko$U8L9LqE|nQi)|JyKhMKGXgxsHvjTkkCdsPavK^^*Xw8H}!I!6JW*P}V~@pPe9 zd$87k9&luexy(J8GHQo3IBjygsB23WSGoeE)Vy0@P7!!dr(`?e;xvmExTMkQl^xwe z`D0rLV%F33`~QlGDl|s*1W8ri77^e(p|ZqDS>%GMgox*@MJrqdlXr-%0|9#&v0&9ivF@;{352si!+i@L6ULOv{YuI!oEwzPZiTv zC`imXa3exvQ?ng48tm`F1)HX6BkFplIWRClUx|;{Fpp|~7}zjBZ+qZrm*d=xvps|2 zGtBS`Q6o{lz~49(pUc9`6A3G;fgArjvXk&FQ@gAHR+m3Ns$iB}Hh(M~1XfmB4&e89 z(3y9r&-DBgKed+_%)=F-p>a5irBzR4^Od`+B;SL8PQWZ4dEM~GEoUvC|Cy0O#*c*q zVRCD3ihQ2Md0E*4uNJysIxB{jIpOHxk88|{mi3Hj-VKf$XK^H%b@>52E53k>p-t}6 z91U;7U_F6fur4xiM`Mx5V>5-6zwO~5d@k##sze8hcUcU|YbQ&e`S_ak?bHu^Y!c7{kP%nU2Ym zN2QV-A2`+14w%+SM+?e7>4oG6#&858J4Udov!mt~MHd)oG3KW(IbY&l9w{eEr{q#) znvK#_2dt9+=!%O?GQpep_EBq^pmp5JOb`3Y-os9~DDm%^-a*q5aVrM`&$ z*XY4DL(%!Ywh7U14IX)O6ksB*Qa4^B6q_pbf~zs29IQ|o>mz2N5XQh5``s4{37=^571J%YQ>!2TSyu_knPr{(a+j8F zg6Omn01e7SJS-7WM_yfpT5VeE+Rif)b26kzU-MhTQP}Xq`}$;btMvT!sNZ7I$Y!=; z0J6V;)OKR#ayaG%Qz7PWnIV{pW*>0{)C?aBjKlYQ!7#0mlj+pud=b81$c2fQB8UXv z<7X~I_;eVK`M-zvt*?F7)d7v7PPZsn=ILl92-P#G3EJ)Jc7)-V>GNS%_rj>Fg zDp`=5uTqDv@poe<@d{satzus%U!@9PCED4V#RgR$)vOg9+;kiqTp|C2kc5Do0Nf#C zL&!u~1i*hGFo?>SJ-MIwO8@8e@6jvPe~ZBUkDFIE``3?uDI1Y9|La_vqAcUEAcXQ> zQh&ae-lI%-sH9&&F4UQfhY_y`kEX1q_#MBkI!A70{6>6&Cp>S!Z!|veZybUz;%&;6hi!cODMtAqL3r-thfUss+fc& zWZ9zh16tYPz#1m_^cWx*Yw)VLvx&}Q@o0|xaEFU^3NY)t39s;@>8&>GrXLlWNyk7>=DS)R?*i2Wkz!k0u~H8UV>yoxLrv>v(rE|#eP(+oNpnbHWp`N6Yr z3D&Q}N-vhaHk+|F*;(JfXqwHUyskWLy`&M>fYeKmEe5meoU|^=zYIB?W>*Tpj#A5V zMGqWu`Oy$wL2&pUesuZr2#8b3kt~%{FC&(X8>g83tJa~ep18qhbPN0%eE5;|&FHWU zqS6c0@pZYwGpks=fWhRXAj9|kk-dyIYas4?Z0R!S8*@8pihwQ>Oay@{$F$Ce_ba3 zS|rUpR)%;>bF7^W?i95qIs%-O-(k7&^WuXcFk;DDz{0qY+>o+^MOv1p(X`MKe-9OJ z&`7k?q=^hBfFD^;B#d$d1cS@@E9XN?AYVGAbT$>^%k^aFRRdNVOzwR0{3d%i9k#kW zS?|n`_+M6i;(mksi-e%zBB$Ii;aW^^Nr2i}2pRVIaE~WEf}uYSx_`{_t^=wyeT$3U z9u@8ZOvYc=qV-Vjo}=}U>}H|$Q0%Uw^^omulY46nJdt}F3?P%gDGv0?JSPMb$vj5{ z=Se?j1aC_}=LCPG0P}+XP=JwxQGAbwP(rg!jHiS>O(d2I1i-pU0VRb)$*B|LX<*UG zNo3F(C`csGvaJl?R{M~sJ|Pld$5-hcJ19SsYm%T|^gdE3+8{XS$-r%tK78op0Riab z{zfEf3teu$V}Cev#j!SNkC6UKg!iGHna=^TFB1fckPcisid8OswjNtx&O5b8T=*6| zhJ-UYGdt8CG5vxBKsH(gX`D%?zWVE$uUG?D_;oP)hS#KD&z7(E*kKS@@D<^Sn4g3D zTOpVhz()Fe@td|=alAo0GT@p={yh4(qR;95f;ewk{Tc{8Cf5ewmL`T4@gu}}{Uit_ z+=eu)nsAKF9vNTY5JaH?K@Kp6nP0!97l8?w)#ZJWMxf+2J)lKRq!t7_J#`}{RX5Umd!N`++yX3`j_2!#)Oh2DpYyAz5GV@MJdgxkhq2sWeV z-;Mx>BWolyG}3nrF`EDuwJQjL!kYiBXVibcp6hFB-!BM7bEbfRr2a*OvXL>|S%_YZ z>uXem}2ALFY9eo??(?uL^6)HNz~GZ5I+D{+W$NIR==0t3$OEFKtH z7~auRZo6Y}m*&%PcYU?Mlt2aGxfGv9eu`#h@Md$;?sC2D$Py39= zC)R)LakG8fcjpls$Ot?ayQh2Rwf{?~LH7*3wM^vM%V?Aq$mslp302GTj2rqyusa;7=r15fP2P>Nk`E)cQUHT~!y-lv$|uDS z{zW%Hj;4_wZ9y~8kD~;E?M6F*v4~+r`!0lvL^2m_B@!v zRH>MYUnjg#$0p%C54hfj4dU~+;p>4pAbFXUG z!SS6)p%|*41TpbeaWnAG5yBj=M!9Tbm&hoM>TxqmC4bn`N+$~c@X;??!v|aPWi7`B zyHv|Kdw%tuQVaa_?N;eR_|dk$EqyUQE)5Yt)1YgU#$E+vU(Ri6sHtx`!hjfSPAxAx zbn)~incBZ_(~9nfkysFK`W_thh^kfFK9Gwvg<=zFV>T=EgSpNzATU=_6#gdEX)h8c zDKe1fuBqLHaNNw??v*mLB1})48UrRF9SH=*Ur={sJRSok7^uloIqffFxlYlTn)|(@ zZ2qg-NWvF*lv_aZ%)UddwI#QRO$>qvXM*MXBP1-sn|6`4naL(_QCS#Mvury2va+IZ z(}Oes1@V9!kS@jC} zCLWbN`8M1_g{yw1x>ujogZKoofWM*RUJ+)6c)BTf<}TR8DE2vje}4VPphPOSFF;;Oz#73Sn*Cd#ZNs%W&)(WeNeL|%)r4|QF_enLG6y*zvb7Z#KS25K`NmreQfk~i5LIx%|bLrTc+OkU}a zHz{^ouGeN6AR)A~MJz4+RDgBPO5qv|H;`%~NY;t&2(+?DEmB4GED;=dEk6wX?x|`$ zj^W8!422zQ=M^Y|=zJP`)o+~Kr%@}$rz++pE~|JP_oJJcXD3{Vm^oj?^*f6$vo9{F zeJ_1AIT6>osP*Lo|I<><~iHTmoIU^S(RX3ZeUi09FKEvmFx4PN{NZU4rr{rrL9_63Ed zT**%NR;~kZrV~f7EW0hP;GT}>VswX>6yue}unSt3B+yF}DVR1K@}RaXuE<_oUBiW& zd)GK|nOpD?$T=$YY)+L|Za!FA<7=V`Cao1$;gvK!mkiZ_s6d2rtDR;L23Yc6Ov=Z_ zaZzgr%H#G%3>kW75zbe+M8(fx<@@})E<_$EPm4c_9uxM3j%M-2#1v9wY`|Np zMe_z8U2D$4ve;uw*dHN#VK!Y5=Mxjzpxl63pBeu*5sQmMuJ zDZ`~MnInjQ^QCx?~}MO=GY zK}H{jjg}1cCEil~NZA01$ArNciB(a747?q}DQfi=R}&xyH+qtwuH5r$Q+H6=dYPv; z`?o*MM-CT+y8O10d9QPzgXDZy*Sd2GNY;-wBi3lZjl|T(_3f_m(dgK_*JgpMrfgm0^|W1{4vx$iLhm$XtMwC%axVP}Sv~gQb5s zuj`iv2doyhqg$;B-K!BOZl(yvEh)LUx`+|Z%nMRqp&>$3c(2){L8Q#`_nQ z=ehiJYDX?NlZS?U!EK?rXE2fN@m0cc@Z^@6XpS%9k!dvHO&>)E0idgc!w*tStQI}?f^vP1k{jD*v)pt)a=~_zj&Y6 zg?^MSfY}}UQz+@i;281M4x%>^E|*N@I9smo(%UsgC`fo<5jYDDPsQJCjv8cb1FJmW z{bklM?oX?|hCJYrJJ(zz^Fb!fDe2>SIY#o~2TY)S=Hub9Lcwh1QM>?RED!lvZ}B=V zm#(;C7*ogrfujf7s1adY$ka|+rBKVs14C2)Z6=_jsY_HyGr*&L$`)-FKtYyFan~}N_vW-==*pmeL>CX0`oZy2T0*=P3ra>Jf{@hCg95YeXQ-f4+-=J~~C^8FnYD9bxcTwvp0guVp$eLckbsF2-u5$b|sB=w+w zI6?`L+^(7zu%w}12dk8saPO;th7EZ}50tM%)fELYuM~Wv6hb_Jq0Mz*k(_~oj0Cfd zy9zFz@&WEQG*D-sw{TOXN$gfoTkh0PFj{PO=mU&c z&n2#&Fs5&WdGv)z#7Ol{636d~!>L{S`tr648TeLi-@{ z>&tJ>{8io{k>hs6}ugN=_fVYlTcKJ`0lqS(PQ!y zh`E+NscDgDb!5pF{W3@Ss0Y<%Cb)Bt<&N`~ZzdGRjIz#z*~Z>c%nS={avR`+O)Uwa zb!wb3mI@X6lc2^i7Sp@Ddm&2rb!7LaO!}sWL4wMpBS7@j3)mFRsPS~E$B~6v8D!N; zmY2~{T}Tf4-gs=n1DD?0s_kzQgPeTYt`ohl*Un(-PnVr?Q>v_qOd5}uS++cWqvh$H z#18^vv3M@L5i6_6-Iuy*%s!*v5fEhw5owgT+M&%WGNw#BVJRipTUYh^u-JKCx|WN( z6@|`^lx3#YMF5m#o{J?5D)A*#Gxcs1v--3@>nPwZSM^Jo+wHU=OFT3USpn9V<4R(gl9h9Ln0SsiJEfgGaOqATHa zI{-e&>HdXX-3^H2-4LLFJ{|T}!knc_6pIxhRC{xnFoH&~|< zJy5u3a-IGR@f$5KfNE&FKZ%2r&x98#x0ycZ*jDbki~bAaO2>}ay6ZKX)uq|G+%+6U zra)KUB$5ZrA!0_;iUd|qm**)(#4rW!YScde^(8qwPXz@gZq+=p8FOu~`EW z03DS?yRR#w?AFx8w6(dD0#WwzZ~6VBQ_-HzJ+Sdu^j+~4@W$w?sZ{4aH0kIsej#ig zG2&bPxYv~Uhz|WX*BopEya%*b1FP4B+~a?Mh~7fZf@BOtXkl@NblwP0160>2-f+A- z@X9N0d^D+XrMG^BbH9vo8%j|K!%O#EOb!foc0P0>=lrD5Zv6zdzR6%d6pb6qKGIHx zBPP)r8+8oX(H+NBhh|%8)gz<(}yEaHi{9|b=xVS)=g=$0q=MpP=B8-=l!Pb^Ly*NcZNN-6M zvKexm0Vl~D+Tw@e|6H!+9)4bsP5+IB4z0=&o(01xfXKA6Y>0g?olCk?$b2 zI&{;Tt4bUsZ z_)YfC-olt6K`mn5fLm;i%LzWGfm#=|c?Z3N3+DAGC|o}ETOii3iF#$>IM8=Rl17BE z3X0n7cL-_a_2@B){DTszI$jv{jO3G&<~c(hKNRNFPwm+QhN6d>t*_|MtX~x34?_03 ze!h`5$Gg3-nPm;U{apPzJ5xSFcs>+~oFbh-J|rq_C>3t3wh2F+Dry}aP?0HIj*bpR z1xhbRHwhYs4H{+!Sv%S)#*~|KYN(OxAY)XZYoUi`58JBR+cA(PO`dQ5YUW1&@dR7J zUw|~B%33`iu4DdPRNv@$jQOR}a8ESv>U7wD+{&xQ%YB(V;+1CbTOjQ5&I4ZjIjAjVOz7iSIN(00W&w`S)>iSVg z8h>c@X!MP*jGZy!_=6#FWKe!5!V5I(Op+#3i-i{BgZc(zF3e;8ozh%{3nLO&Y{EL+~ujPeb}qW@46N+;o#LcNb)6L!5m(mG4pBlh+Y zj|*BrxFcZKJ3Crp51bE6p)W);E((ar0K%&3M#lf9qNBpO!=?B>X(e zrv;eE=V0HzN9F%LvHpLH%Kxu}ns$o)pTv3;pVQ@hK|fdlk_9 z#S`%*HDifI@PFBnef^0jrc<%LOB?F5+--Gbcz<~Ng0&4X4HFM5MVbVh1M+xki!0Q) zsjMXZW0pt?~kn)Xhb{&c_i75@*SaXe`l@@VB z8rCP%)>s%>=GgRV`37ypj8?X^dsvx!qB_SqVH{>l(2xOO$E~0@{7j}ym6vy2!FC-? zEsxvdAA&lHxR5n&c6*$KqnoU-*&ixPONp@Gm&c)RZ;cRjycF`k_EYWF%65QGCyfgF3X-RE$c@^+-D!7!H#3d=s5!hFy})L|c|l8EtbH@!oQSzh?@-Z0#wg{b*lT z(8rzukk5TJkX(n(m-}h8^Emf-Tjlx9(l-}_Sz(&LAvqV#hhQVKQ#A1X$aLFF2d@xEtFUa*9yc03-HN22sW|4W>L|tE{UK1x$axbG*UE-JCAWdJ{#Uz( z^ACpLp`ntsr}}~$4NEF~H8q<}9JjG4PxgbTUU~WbVz7&sWv_F4ycWK;7%LlsZj0?i z))GpNO${C5r^7+zVKpezNqwrBhjq2CJdgh%BJOYLojf4z5&*zdKc0A7>3EZmfJYpY zcAhAwUG+!2?&LyyRV$JmY2=u!XsxU+=v`~#)Sds8a;}G{Uz1K~uvR4FR^Hv6HoCY- zcwR4>-QKR3qQp=e25T0G{jn&`)XEEkIH;SpHr{@vnM?bM{wsr)u2svSve;F-e&c6* zIqiB(hna&@E!af0?Yi2s+tb(@=({!9O3AkR6GiUpQ?2%3#-KOLH&C8eWK_i^FOD_g zZV=Pc$t3MQa{5Lw$>JQ6;c0Hqbk}ob zND92BA`r#t<)Cy29{6c8QTmDNu0%`G7|Kc_n#e}tEGUm~k*7otDo=9ZESB;}N-grv zKIzb!1V57?#*)cQjI8v*axj5XoouZl>2oY(Slh-*bu@?Us&>fKy`vRwU@!NOv~~IY zBN*#KKRr1t&2NlnU!}xxeS5!;AV0MbTqofb)d2VP&TuTqRg5|3*95pvORwhkDd8EC zRw@b3m+ccfCeh*NVjnC!7aujRvGif*V%=>7iJODRm@Yix9xWE%vmrH}%vlI6OUwE1 zd7&B-!Wz!D4rQ>q33x_LIUn$pkAXbFJkLJZ4?4=VVaf}ei&v7}Sk}Z#c016@+wg*8 zsxzX5j--P1J8*v4`gYwqKf<0nKHPgBIsYja7EU+AGoLJfm;cD}|37YkDVqTuoLv6Z z0E2E1C+jlSY;B8m|mTlN~tHmkCA}LQcspYn3h+ zWJDU%779Vh5?+vRL>a^^o7EP`jn2vBV2le-X}{kg)srSyRcN_Kh=sFPoRa3_J)%gr zgzTB7qpUSkOjqH0$Vq?c_(w>y;m>eG3M0V4V;s54!k1XkiMOnLhF-(bqEtbnd1|r` zbXZ;TP~u2!yC=wGD|(GOeup7)TW>pNm_$-vjNcz$JCV9_>1_?;7sshK=MubN1Xa8?(UIw$Ee=+nP)jg5KcS(fjbI z8Uy`R4q=+-m=<&y2n|I^_ zPI@M`X+|;Py?j@+YHn_pxC_bXCw;H7PwJAVD!=)PId1W* zrl4Sr)5pkU?Ot60@s2n6h^G;zxcG0OP$7s=zH!FFW6>VM?)pRH18D;V5M?w#IdteWZ{bJ2! z>4d>Q+4e2`!2BJ|{2fC-&NH6rfM;O!zdY@`Rwz~f88Sirk30RplTdK}AMzHAQf{9A z{RZ{l{Dv4Mewjf<4E~v-2+*3g-CrDhh=is<1*)*fC`A-&NIE3@+Edn^L`n)DSQl(R zIc#i5Xh)}Oi3rYO!_&px&06ho8l&+;zd;M^C~5&Wx)TE?(5Nnho-49;}8qXShz^m8+rQ!*@V zO23_%QMQr}XbBt{BPodFAzz}oMC_DK`e_DN2X@ZOvLJ2^%>80BEHSSoFfDQKKIOO| z5!SdwVr%L}`7?{JJd1V#wQce*Gdrn!0Tm6;2MR0>i-7oQdh z4zl1((Gl2LV&O$WNzsk*`e{KiKP=Y&JsbZ`X)jB;&gBev^^1Sz4{+x1o3A%G7brF+ zGNvL%4o`=pg@6gb%ap)qh)D-&+hB$VmDG$!@I&dXj6H0bD5^)ezj**vORz?rEDQLu{hvQA)KCk#b z@q3C{rCRvCOqd>hE1mpyi?|lo=^k0eWz_C0QuRXqNT}u!={yC_i%pCU@7oNu2|)oX!R|NljW^}nMcCj+j8!C#AO zVa+19Ab>?57(SPe-DGLhgc>YlW7K5%grB#Nm$7WvC#ICx<7oYE+l=&63Q?MsS4Wrf{3GJ}n2BK%C zIi;NaSd>A<;0vchey4U+hEL7)T6tM}I=Yzl{^;`i!ZpzHnJ$?zhVQS=o+UrKbSoKLTgwxtT2~&PM^qDX}G7B&yeaQYerjJeZ>NiFr*k?oN z-Uok>w~s?@#G#MI)i?r@(3vT&y7riOkNGWXC7Ys^~-OzVv6qm?;ugl}9T z0jc#uVdC;y5kGSr38)vh4P&VD6_T27e=-Y0+EB~q|2c4WI^97(qWjH=F2+76F77jQ z9?y0@bD90b9xZ-?!suB_O(+|1A`uM)$n8Ocun-tod$PL<`sLeG02BC*a7CfgG zsHS^!L^!yfxn4&8)F65O;J&|EQJHAzvOt)#JC0|Sy>e5i+_)RMd*o4LGJOPOUAfC! zZ}2l&%YhvZgeq0YkFa~Ll9HM?X>SN%NKLWZ-i3cBq>M`&f|nbq;iO-v#A%t^VG!Zi zK}oR$I!rK5M|ksUCSx7pZMkLY>Eqt#;^JQRI0`RBzk2KO9+iwRVf)r2K#tg*h)*!Z zwb{EWxGp%hZ#~uu6Ln&RN_<2zM1gqZ1S(`Z_7O`#@@x%zdC+&2mmx}~Gq{g*>YOC% zsNu$uEwZL6P2NFmdm~fdqa&7dhS&>!4VMGFrG`AKuZP@BvqJID!*F;nm9pvUt-iTRw9lFu_92hF7jRfLm79*fLE&Y_^WqKYCz zXv2xAe80~TYF1>!6%~YW`IPnvI*}-7g%Wf<{V(#~bb4qQ`)9%E`j4-S4F4b2=f4(Y zwU4_Y`pE6|@5?dwROC7_b~P~Q=mTLY=3sMToH~+pv@kX!_(EctSn{v(SKVFr@mo^* z9*jbL9FAzjkn=yTx}RQ^U(9RDvgJY3SAT+5yEijdKR+3(dc&T3SAPg0{FUaV;A%CV zX+xkfe4__6==jR6p+dqi2-Q6b2jbK`M0b@!MliODu8}{Ttp)_upQ+$JRCn`e-kd}H z%0ERu3uu34kwQ@$$CHLq8w-j>tBGciQqt@J#Ig&+oiQDANvAc2h9lc_Q8lRdq{VcL z!z(fC^-+IO?`ezamWH2WItG#2s}9LUwrQcZQtzpYZIpzsV>*VBa!~Kdi)|E#`_b)j zi}BTlV`JR>B-K|Q`Vr}2fJ#KYCnDxu6+VM;(@xr>IFuIoERDMT8Ambi((o%xt7y^~ zm7=d0r;1_~N=0NCW2KVc#jF*J;z>g=%asyHBQey9&`lHQ;Y$HdrjD%uj`2OghUZ$q zWx_C}mTl@VmevMcRCU7&WfYcH)92(E*1DNv9$?MPu@^uXKOEGsLK2nJutE_PW_nWx zAWRr8Y*?X>;&1Sf#fqEQgVo}ri7GX{X#)7h563k;OJNC4>|txY(MElY?Qv?oF+>TP z-jo8~6Nk4OR_J7iWn@#^0I*t#reh>BS`FkAiKH^C4F}1^_*%+lSQOg9GTGas%6DV2%7gRDLW>)C{%+dMx z1~%PP@loXhKuj`49Kh48TrxG%tXwoz+RQ2$kduy>R;K~mCAMP+eud%@*Y^iPfcP3U zAP&}Be#ZuU8|68*&mE$N>iTN{5$vaun+13;%5zHJ2h5xJjyt#?$}>C|Bc-CWAt1mJ z0)(C}v_lN80wYVo6w`+Qo&u4IQbtmj-G>UHj#5UpGZXq_MP#)ufpmA1))zKZ~$nkKe$3F#-y6fC$GB4Y2p5J8lEk z0&B2{qNt?PB>E@8OiSNZu^{d}0Y2g;yOKausASx(zrEy>t0~2@uH!@~xi+qkHtA%afLrqHw7| z=MfXHv9_o6QB!44Rb~T`9&#tvP_CV*vL)8I;;gY1M<9PIfcuf{{6WPz3x;3yk#7sX zaN4U75ZYk|k3;te>`Q{kCB0?~uz=x{+2IDCLH9`doS+pTzs3#dhG~-(B8eBt#|yZG z@Io1-h?nRS%clzX4iSnfZX-5|2pVTJ=9+U%Qf6yPil<1qt1`_yejsD=>r3B|hZ%eUrAF$)`Kmik6fo*N% z%mzY}I1mG=0y<$f+pMc=frNxiz>n}@$Xqu>Rl zM81nM#~X+l@(19-+7e&K(n8%`sqP-7l^auUS40|7w^0+<^(v||XMg;RM150G!?;~n zV@~|YheHNq3?O~ar;U7xtDxQ$to)fwR2!*O2E&}$$Musyfkk1*MvXZkov^Q0V>keU z@-9!+5d~2o#99SbcHghunCC+Wll56&E&0wsjX8DR#fKe9yx-jaGg~0o_9#lWP9hD%hKYz7LZ8IpmE}O?Sw>Vo%w+Gdiy#(&9Oz z!Xwq7JTgtHwDy|4!Xt(4{add-X6=IN_6~C8p4^#FTA#!lr<%8Lvx1dU&(RcwTlu`@ zdpvE-VQbmE$9oyAoDhZ;>6t1|ytUbzUjYp-Sb@;IlW#38!L*-7apAL1g$rA+c8dD-lWI9uDdQ6A^&PsJ6@{Qw%9)av z6=pM}M22wQwl(oqvl)<4KC6<7Vof^c~pL5~{ zwke%7Xyklj1TZARjPBI1Og#o}(0?ku?zSntU|~`4qOxMUqi~4RVvrcI*?!RuF|}+c3^@cauT%wWQgWCDpb|}2 zz}^$Pp+e6p`hCcm%!E|(OD6ToFS=rf{z#Lz=K3b{gJ8JyWH#GTB09Z>GSY4<0S-jA zte@{|C6dI;x*bdc2EQ*Y+&G89`{!?gOyMSHdOpe>w8p-=MNAQ=(x>S};fe8{G%+bX zAhsiTG9y)2z)oCAfySSR5bX7VgjZz)vQ;H3Lpf(FJFY!Oy#one*s2@G2ncLk8UK}i z7DF5HaJHCT%P)s^45e4no3A|IL*KF_!LSL<8{9HkItDRk z-LohNZ@R$uTOjojd@x%F&8bUFf61#5wYK#oXx^!ig|&ySGRDr7(LOt%p3JfSL0Wi2 zDWm*8N1MlhE)k0M%%5Dhv%^Ioko-Pz@`S`7i0H|#y0>Y(ilqN!5~2y+u|PWQ%&eF( z6zB7geM*R=6bR)2WdN*y zx^eY(lg7~HPtnlvwl%jfp%6P->GV#>(vl9|N?b#tx@U40FtN;)KTqfdMZ}xyu}kv^ zS>wwev5oz2VV%qR$(}g_zX7dZd4?~Tcv}@$q?GZC=aF0uBE*}O@{$P!t>0mL?}vt$ zBUZWN8LpJj=I#Al?2^#Z%Jp^=TVxi%4J6>#Mz9>qhie)2F=1;d_)E$d=Q6|TN>rv@ znnoM<=!75_KO_i01UYRKDgl{puT-s+1lmp0 zHz9g)KBAnfxzk(%5NFbK&Dvr)e<`)MAa83%dJB1`HaTkbabfo05;!BYvW55-v{&0v zv0i>bP^Vp45)wdXzcL`-E0nU;3?|qj2b;nSKbp40W?obM#@hy=p2uE(#OtDl-Q&8A zE5uDprmoVJ+7z1*@zIm@oN@qp*W03t?uOER8tQKJGa^{BAtNk}p+z(7R=3uRlro=b z#FMlp5yH$#&s03p|F)Y8S%)1il3-fL*4F{sV{+}*aH83irt*__g=Gy+nikwacB%an zjc8EQiEHe0LOw83xLnflQ#i?863+D?*3P!mr#G_ymh2)B7optdoXrHrd|x^8_~s&ZE5SD;~;mVD-^Ob}Pt_?bqDL z4xIgO!4ChdH$UF=647W9UA3G!Ie7N5bMx@_K^ z4Nw0OvK=D~5omg8Z=m`EQOhLVuW2Zv6I?IzdTFVk52h44=;(-8Bb+{?TECQ_uFG8kmc~yz?1dU*;@WGmzpP(T3)LmqT|+Jl(q04QF!b5- z!iuzoGJ1raeV%hleQa)Vpd4B<&=TabTx7mshgrOa+Z)ST!=qQ8R%J2aQv-W=I1+P!j}#K*%QEu};!w9yEP`c~QnLdOwkWNe%jmt#pfisfw# zt1HGebHr8d2XLJ#pK2^3{7ONtG+t*h%pV<^e3`q^^{ypWfc6Mv=ih`8l!KyBI@R>-8UgODoDF32OsneY$Ev6VtUW$edr<$kRv$0C+=3^u$C$mf!yMqrm zLDOT=tkm#(pHOE~C>jPT;SC~h zf>aC50Zh1PucG(VZ7=17pPjm%{dyhjv1g7Zn>(BuokR*G@rUB6BB|~f2D)F>oMs}& zTSU&cAQ>3~`#tjdrNqy80BV+HlJzg2H!=?@=BcAEUDHXi#tr z%oBg=*lG*Z!lx&X&CYA@kBoY$T93x~4qVkdga{ka>kPOeiOp%Ton&C;zMj-k*WQX% z0)H99wbNqR0O;r+LX0WA0Dyv`*oJnGDk}ynS?#$sp|33xUy}n!BsRO-&x3X`?a62u zoXOym@SJFwZwJr{dk+jn<>fLqZJ0C25;Q`ygk3$h2+Vk;M|+nEM5al!=>IsxZN_{WvfWdnn=NxWQb^9?Y$m$x!GOrc87LPA1vH7@>bQ ze)~4omg4_OykDf9Uh5vvz_xW8DdZVn!O$jvt3@pSTQVwVQkeUB2eay@h(=jtMGc)5cGc(&UGdqS{|L=QOT4}ZK-W^S= zr`4Z&TB@F@dVW=po3uAs8W_?}N(W2n4w3O>X7_DM5r8n;M(Dt>yb`i<-_c1GaST!G z_K6_LE2UB^)zrs@FXhnS2l7K}Ws`HmN9f6Kq}$fBF<^2l^%r6CwY~gpiHnHjZ$jj2 z@q=NJfl35w_YsO4Rp}?>nzjt=g<}~hbA@M=7_#$mATf@hhNas4zkofBGh7sD*>1?b z1)3MulRU@*J4bm{E{+T{ZY$lY9z}Jz>F2ueY%U=;=iL95PSUUHJZxmLxZ>OK> zVpak*MCa@spO6YwHX>b!dBXGJ=AnUJE9HIBfTsFzZcyZzK{g02<2(JEW>g*1}atWDuD*C0yL={oW^QL!-P;B*i9QX zE8Zuy$YEUkHD$B>HUpBVvV7B2bnt9@8`OS9q-{nv=lbd9a#Sh;w|9X)UpNDAlI#Iy z0-Deaj!fL*b0(wxk>%M+hqmr&`G~f~o2XD209+Mpo(i7D1j;$S)RCG-Xso}K@7Fy5 z-8JjYf`?E}F6oy*GmKm@e zaL_4s6<`Zfcg4i50@Gtk4=<7l!Ev-&h6F{Fd9@DOv-Ck3{Lvu+dD+6nXHJ@PfD4w~ znK_A)zd@YxZO~LFD2s;>2F@vWxEo!rEiGYpz);Om5_)eg! ztsZ=~hh>DZHoMp!H|K6hvuWB!eOD!$^4dGqc`~_-%E-&jSq;BHv1G1e4xCh>6jWPC zG9S1vHHnZ@-_9b+a}!ryE?YKH3yHreW7*6q&Q%Lmj$^gim+Q1-!JdEMoV<_Cd~u^Z z(Ucq(V3LeU&GMk1tYpe)nVVReE%h*eKSq;m-IkHI;Z>X}$y~pEOSYJMtVw^xhai=} z0x@NKjjJ0nNt<}3VYUYz?M5GrU5{r>?5AFhrfV!k4EubyPy>>WnNU;2b=y>_q!pVe zsd84;#+xWLy`#N!n;Y*i-Ugq(JLLPj3iK6>XOU|dGWAyT_)haXZ~rTk|4UdW*gqLu zqWaT_r*ZQ4K8IL8_5kjEiqQUtR0nbKtCIgxsCiYW!12>}SJ#1U6utc%x#{7yxW@5k z{!zP_KR4R4&|R!L=uc5Agz(O4kCc)4V2%d_HujHgTFYg)`*s1acPEEHqjsmxTkXao zQn>3|uPE7)TN!YzL&aJDN@*5pt0YFka8ta1Sf0E~RLQhaV7Cu$#ym$)3El$>j?n~su-D8f&v+YtfFyx zT4vI4EPA%z!h708Y_@f7_XJYrx1P^7f&t}wHutY>?X~)TflS%!o81ZxJh=Cw>TL+p z;>m4QPm?z}SJ}au78Gez36zY2-1ofxp?sV7|1a>?0yk^PEeL5-7jHB2&hSFEIuD2 zt1V#pwU4n@K>IN>ZsBk)NGn>D$grBTQ4o_<2lo6p=^jEY^(^F=QQ94iwQXG%RUeR2 z4+7WCkw>u+ox`O3`i5`M{Dx2+Y%_y2*n85`4b$sbuQ!*YGc(pE#+~u6FbU@7s?o9j zrmIJx@s{)>LoJ&1Sf68zGwK$tz5rl{ zzwXlFj`~-WMEabgr8(udcs>67uklJ9ksr;)^Y1!@)+@d-VPI6f$Z&yxd0rCC^%eWu zevmLN@==e~1tR656?-B39x9HO5DFtNjSxz2tqR|T zy^Aa@LQ6e$#!beJT^KZ1KPM5));BpnYLODhXJUl*uc0M;RdmSI@`6%V9M2Sr?{nbh zKCf?j_Y&(n%;#-iyeMn~W6&g~$;+=O%YRUm=a7~EATQ6MC>Nk8kD)BjF-D|au}9@_ zZ|++@Ja6uMBAap}Te144M|n--PYL^(=P=^iE(~EEV)x)xJFdDd?b{NBpLHN#*oQeE z!xM-5{C*YnIPq3Bb2YV1WpQv+DfKw!%PM_kixqsp&$8;^ha|1k>3!UjRd_G0ooN<~ zuv^tGheRtGTAnc%1w1@0dDb~N^Swg~Usi6865d^ynf(7wk0bw>P5p3_g z)wnje;3newls1sD9nVIXwOplTNJlMinapQb=g5L+PoPF(s!6yU>0OpIdEHu!VI}I( zElgW-WNz{2&GnfvKYML#jIY}NqPA{GS-IFc80)e3v$_F$cQAoka#qcO`4zOfuPYuJ zePj)c=GvEdpmD1+;{h5+b922i8wKmyZZodWN>i0}`!IVGfo+w8Y!QfEOSlb`Cz)>y z0EX}=gzh&Xt87ERaryH%_fA(?Q(*QS56Wv;`%cem2k{ty*u|8;F#(#w%s#0FAPw7C}C*D4zlTV9$@dWAeX3ftQ3UakYR= z@H&woz_SWPMj|<;zpQ?hLdW81njuJM5)DUoB2{|I*Q?(j21dnjbp+(}Dd4(SaSPo(8z8 zCA?<9gS@H>-1TYx!fzt|soRA7(NM69<_hp0k_)zTpwO>n-IaD_U9t_q+L}n)gDM|@vnhQuzGrQ^6u%MAJo5`ulO^?gBS=yGCHZ^f_dy~K4fJ|q zBf52Ym3qT`5C*Kkx<39mC<1L2)`5W*U7ab$J=}v>K63Z!lmY9AY~}=lH=Oo;mA$rs zU}|8Ht{h#tc6a^3{{Huay*m%S`abT`*kego8RH|0mi0X|c?ZHrktiHsM}NhmnB+osth z{;m?2PYsh?Y5odOA-U99zs>BK#foHGM{J5M`j~+-y%d2HNCAY_@CS8eOtG>d->so# z4F53YOa{@YeGRGARG2gqhRlGJwI*b1cmZ~++GFB^q0X6FQ|W`GSBUL7D?qY9{PmT* znW5x3wpcNs`&#qtfZLeSWmbHY=}kBvento|xe8=>|;NkfPS~iS;f(`kI@NNX2Xs{PdyK z!@c`H(VKL&&m!GU@=rTQvxLjQ`__)U7V(-kF=G=8LvhrEN(2$D3lYo!FYiMXX?s|c^T(FjuhrZRXhQj8LD$B=22cOYgy?>KUrk~P(uE2> zx1=&&?pJYzRH?-?gzJE_bZE#Pvh8!}#HbI>$uW_!t}S-|O-Dav8-6#L@A^n)#!Y$K z0oY(p?Lu+=M}N)Mb{*V~;HTxZE58pwr+q(*rKI0mCZmpP-Z&vt$1(k)msy((`KEeU zN}X^^;Cam8nq+wV*h-=3CnX_fvQWRc7pWS764TE|tMm-?vA8+el;s>Q|I#lN_+(@nW>u5AeZpn2`wZG)ojzMpYO+gvUZMxpL8w%wcHCrQ zxTCbTMol{Po0xsUZTPn}A$`0e8&~?lP7>y0`;nnjyB&ibVa7)oxl4KMp${R17d(oF zE~W_9)N%3&hocM}x^Sx9Y$(^@GC^m-z?oyDuvgv&;k@Ydv8wAWTYF5yy00Lknr}+SaZ*Kv$EK0tTtGSm*HaMx@*Ny_8! z;G>lFRr;UPgrmH5FKVFZyIZoMu1?T+yB*Ifav-9YfSc(VgrAJ@ryz2T=05rNclI1w z`)|`A_6<0!JN(v!irNUbKu&k$=b$4awn<~iwuq#gt#jC|5cZqybF!_Ntf{+I%}xQH z9Atx(JOAU0tsP`M4jfU)*t$$9e#AiKq?68Ze63WPDL25tjPNe77BiZIaa|`l2{-Gu z!Bs&87etvKhaH7}&!#sSA``@NF@e5~?u{+83)M=UJjAKuZyR{b)+NfZ9x4x&CO=QL z1_+On5JYOnD?jzJo6Wtj4*aH8@2K!1!}dt{#vEu(jyiiuE8Mj$5)p?lAVxNb%n0Q% znP_Z^1fVGWnrH>yQb#ogevg>h<>~4)-MM0b@G}BnC(Ouj<7& zMMX8c%XZ^q?E`$X{rO?nM>M%%*TdT}xnbNZ{C^@QiTMI^OMnWr86lU3oChSUoay(R z2pY+ZB<&#Mc;}4mMMH4}0@& zjnap8yN+;RzTMmMY^-zj7+A2vN4^eymFWkxC;Yk9CJNbxZ+qh)6Tra8=uY0&SayWW zKfL1vEIf$qH4b#Zv^Rn4*sI6Xk~_frHm2jF9-s81>CR%xVh2KVL3JmOp%(&=@||ju zCz)&$8=FP$${p&LdR>Z{=0M}sKN9iJ@S;T@)* ztFowqdA2%0R3KXTtT$;Gnw=Y}H=}1_z8%m@fnooh0XgllCPIDYhG-l7uc?-F!b9!&&YRjJn^E(K z8~2DCx;>(92X)`R8qFXv6&52OaHRR2^N)90M;;GzRTST3ql=FzL^IEp^ zopt96GeSr@)(^{WW|h2QRTHF#LEET1td1SttUD~8UEYb4p_U61s5)ssdBjBF#6;7u2|$s_ zqy^x(**LD{V25Si1%pJhnKA!8P*{l6pW z3w!G7w=ql(3(EH2EW?EMMgVWT=}6}{WYxK}J%tMQ2dXU^g+XQ}#mXhnx;3B$Vlel> zLTJpsopwIqCVh-A)^2V6JBV?<20I*eALy$Qad#c{fxc^=eIYnr$4Q5yMqH;hU?s6xd(z=@Wac?0QT=H>+40or! zyjwTOZH0Wq!n5z$hJ%TSq8eI@#BGIGg;8R^rm)EEEBBuq>4suw+SY@#(_+6SvNQ-O z_K$-8FoE>T9luz7tYXusSmRo8rLLgQ$9+_40mR;%=QR;^N1K~y% zGljL+rIaD86Uvudke?Z9)e_?X3;jU-n8H_BjMDhAj1?D17L7Wqz4xjg+Lpd;Y=FcG zI*%^!Hi@nu6e7*zp8b)`38dH?X*Xx9mnP}t$=206q;Y`>S%Ca2(Z*$u_OE5KHzxx! z$Bv+taqb@c#scmYarYYXhuP_cbl4H3^3nhBq@c(lc^Qh736GP6W1$w6G@A^h(MsD)zUy~!O^s|8Yw9F_pSv%Sb`g%k{a+9N@5+35P&F~@;i0VcS3Fm+Q00A zR}7NQs1nbB&e61Ngl>4eV*u7OJKIaTVcCR^zAe8zhXd2*B zeGD=-a3cyd&$9HoaOIR8TFK6NLt6(9S615fzidQ4OP}BLH0*7MJ-g*ml?+~)fN-9< z*B)kFU14C(B02N9@kbe%U=Q=l63)SKJBxfwBf@t1=+|1SKRv$;FJ;-|aj+>b#&=3) z*w1q8W3C2ho6y4ZNA#Gq*w<)5*$MZx6zqH|c@i>z%x7+^xg!R)54+10AGurCX^p>g zT|@4~Glj(>9Wt&X{!Mq832~Saw^#VlGh#Ng{2zFXln>;9&-hNA$P~*=9;v4@;xrSY84P$;J)qQ zKOe9-S^e@2%>QbtmLB=WT35C*dz!|cvBsV`>wS5;8;0to{vd0gp`j?p9VP4Y-0Aou7n@#v0e4qx~bb{wLF7%5t( z7DQ_T1IAeHo`lLcUb_Yf@hSbm4lMQ2w+#UAmffu+S1uUNQ*7F&`MB4KXPg0Jd$)X0 zOu=`(x&wvi20_P6$kk{kheXn6I1V)T!Jh+ATp}Ka#Cpw0H;njusQ3`bp?mi0{~0?# zAt{>nm~Yjc!XnN%Al7#eaNu?shlxd>#ktUB<87Meatx?9N4=a3B&zrclzkW~z26o7 zEs=Z}PB;~ySQKDB3&U}@N7`wHQ5mKwAg zlh1DM0t-OT6QM2iO1a3O4=Ea(y*JM+-wEYg1u6TW3QH+y9aE*Cu+> z5<(Cqs6u!DZ-R&*-!p_DW7@&FA_;6jz)s)#`JATsQW_JF=KZ4M^;d7I(NrQYdyC_M zn()h?`o3~swq}rK0kiNo67D!tZY(JzNk6~SnkUH(6?lmpr$8+S8N&5YW>`5hjmKD7 zBtx?yZrrr~k7k$&COG*O7MOWx&3W@6#hB z{SdXLi-^p+Lu65W%$&LV2$@P^_ncm%r}rxlw2Q?+v<&)!5&MIv6g68BvXevMeV&rn zJw)NDBj6hAKePjE-qzaMr&b*J-_i~||3B2^|I6!>w6VATFKKy_nvF7=I=U~zHx6se zxa&EHqR-DGNvQ!L(OgSWIx0IT_+Yg&ingGlQQLMePV#rkB7xo-7G=ofv{OofdvO=f zOEXqj>yn>oyk1WmcaND)j&>g(N7FrDHhOCey>W)Jm@Yv#ve<^IHQCJ-4w8e4TXAP63V6tz2+iNR1vROD1NHvT#-ND>2g zNTqQsN{vjlakn{~%2vews|8$+bZe0z6f)U_w8m0xSPl7SiO%3x-0tB@(2s*lG&-Pr zxC^4dULMH&SxOi>hV3oL3s)+2o~ST9f*jFw0{9Fyk4v*+U=RrK31sdvaN<)BYczAlFG_ zean5~p=Ev?J`HuL7n9?Lam@E15Y8U+w0U7;D?jG`^;8?M|Mm81Vn?N%-~X3f*{5@i{tYr7k15g&gsusyDgq)ac>E| z@-aw~8@fL7Z?~=?`W%Ai=y)39JU|wwnD~+@sJIH>{22L`Tb&LARKzE|&I^aRX#`rg zQVP+58MNX-ix$*v(%~8Zfjd{M$(YodW(*v|q)Ye~XHB1cm#Qw2zK_E>jY2_S4o2Yt z&~MN&u6wVq6cA5331$Rs#U`-RpGhV-d6L?I{N4Nz(amO2D{RY5Rs)XA9_u^F0OKaD z?ylb0p7J8J)zpzB$V)XhrpHLxDf8_Z;@2d?uac%_F6JTS;2F z*y~&`!4yd4?NbpyZoc-~+-=1X$L`1ItiF(Np{`owp{w*fDX6B#IFLM^RFa8_vu(2t z`QDDvpDUN^&+lA6$2U(jZQ{w1kQwdRuX^=pQHWvB>=0T#z^uiI?C^*DC$hxQHT^Es z+!qGoAnZ-V6uvXl?Vr0ZFe=kOaSYs&&Y_R_+r@BJHSRBbDJ@v}vOavm-(Y?w)Yx}@ zeQkA%gf*S{Ve_e-jqjcn3rN&q3ZO9(Z#~2zQ$mwP%gZj#p7{=~N4ymp71+*PfybH2 z$uC)pCmRG#)W9`X2^HNaL>E7KH=lS7WB3jy$&}_D;cvpGB0A0g7uA=DQLOavFZoX- z6R4kZ5F%mZ_7T;K4toNEi|HgsKM7x^dPtY+#R^19_vwu!Un=vjIGta{w`lme`~L(V z0iP<^R(^9TU@0+9iD(ud!K->kNmwhOw3TF4SXzBkxugd?Cgi$lJwlFbt{*USZFLNau$%hp13nh5_OTFcv z&lIq{!BxR<@3nIFqagCycz1RL@8b9;Bz^Ho4?wx6`L z5VQ~~27-7tZulT;W%qxUH^K5(C-BqoW_`B*{qi{ePo`PJ#`=GdX9|XnPNt6kgLgJn zkp0AJ(KD-T@-3RGesob2@;1`gLfK&mev=m+EOp;3l-^7?8#hzFXABh(lMjdS`z;{l zEekK?wKCjkxYgNmclY{$m>UI(Xpd0EvSQ%iWoji1*Qm^mEP}VZ#>Pyq;sF(yxe*No zh?878ZR27*@!ZMKmLwh?(Zmx#A88DZWiz2qJIk}EbkHPYoiN27ihcXeoL!@gHWrqh z=O7U2Z9(rruHH{Jhc5%bNe08<@MlAZMJq}7ul+k6Hy{!opIIuN9+ZfUuef1FZi?eg zOTXdX&k_b*q{S_iQ+2#)&E?mz0ZbFXZ{2Iks2YSoo0p4H%F04mghbpT5eLj;McV~c zSQ|55g|+uzCs|+K1IiQP7)y-_wp7|h3(z3V?f#)ntw%m4ol2SMzeE0KPcE_15t%-Z z%GUq(xK#MR-;+-s{eL+?)gAw*;saT#Hp=T_D85r1$+Z}$v`97yGh{XpL&cbEHWHAs z5xNOnsVPKyMnEtuaVU$>oJ2k4TjE>942Q5qF=Nha!OzVE)7~9dDSqIU>(#3HldGMY z-~0R7)fcfk;(VIDuuz=u?B5$m4!=zxXrNrH^yYt2?T!C!`n3Wg8?F>V<4hDf$B}tr z(3~2!HA#pOi+V#&aIXWvFG(83W1-Vage9zVFn=r@9RYzwic0uv*GQ+oMR*Uffs5I~%b zr)P*gk;Qig-!q5UI%MAy@$RSOI-mwQ-RSo7cif4}IY(^#v`bx1Q>DXkm(JvkEBfT( zJr>A_;|YE91~AAO@SCYy$>y>Om|bS0CAL}zIoXKF7|Hy>A5DJgLD}+A6Ab)TT(lsQ zlOmY8KtInB7y=j_1tw7OXhVYsac3vlT{#i$!o&@Z1$Oma=_0sfhqHHP_5(F1$;UUJ zBr*lnXr-kW+r&?Y#ukiR%2g^#0o02Y?(NJrAZp(AriD;b!8>m-?d?or*Wn#4^ZjwM zF`CkX_5i_BZJS>ylm~#c)v}8>|+YnBD%kb{khhPTq)JRP}W?3lEc@ zpZR#@G{*0o<$ualae|qgt+krpL1#bp46G+RKqWT;>Ut-jaZa0~+Dql^l8af>hD}cq zIKqq{Rv!qbsJaaWRsf&m0xPu+ngMp#O9~eBfAdE&uh?SKNA_NkyQAE??WXOg7S-eX z!<*1e#L|}-9TuL^T~;f70p`{jHOFbslsS@i4Z3)^Q#k3BDy#zzN%G>jD=ax4jYH48 zg{rv(i1I?Rv5y$U`;B^|KW3hgl-|Gm=pOvzy-Q#J>fFnO6Hg{F6`smA|3Jz(%~9d#Mawa`!Ls`_=Bq+gO3dB zIOG}~QbUAryfs7>UW}C&oZr(bBH#r1JEkF4% z1hBl(omwT6$;Y9scfN404za{%Y?z#$+>;UTZ;q;);0VElY}M7tA{z+7!CsGw{g(WK zBXiXif-5B?A%xhIrhd64Ntxp9>v#O>YHn`kX8w6SHSYHy^Fw^uzu}~|P1@t2=8$yg zK=(`BL!!P++=HR^P28iT_D$ZyqW+*Av_lORNj#3{lGsBD^OAIy-q7CTM}11-lG*z} z3i7U8oicc|e%3WH36h7@2$04;X4t6&6nA5(Z< zVqUT#A($EP6=bE0Vvw9L;D}X;qKEZukPIZyN;J^O)Y2SQfMbcBj-!QB?bavtNv{6_ z1!5zatsDnXMTic%FoZf$GYm1|kK5yep`rJzunKUJSsPmol2VTYkkmZOL)&-QzMBD^ z`c7ncbSoYDaPk8TdBJgjI~+_VIzx>ig=u>Ta2Nm)5CtFxsR9T9l&qQk*E}F)964jI ztX%+z6=%wbD`OWQlpZO;rQ2c)p*OxZ($lK|?>mFBH+yJlEbGC1IGpjCh@fU|AK zI(vuPs1jl7&sijqc8U1 zspBXnq09p~ONZdA0m&EpVlKuX3@G102zR?Ab&0#~&^7V6Y;NMi%6mNhIG2!fc9vD`G2sBfshaN@|;dg_&Gz>d)LO1#0E;_no zdP)v;?wW(-bj>OoReLN9i>!25n>2)^*~&K>H{s#KVI?ZOdK)!+a2xjd$4axq@27jl z7?4IC;gn(WDgc%$)r}G(SPYD5G~`nEuTQRd&q{+$Bzb#3>ofU5p>!|EW1-Ja>f0+}{72xW>8(4Ucg+aR5;c2&kNY-!5y_eN!H!OnXdx zmKr3`@l4;v0h!}u8~aQ$q#nX_)`2-eG91YL$hP?F5P?D z)5P#QaCz0_E!$(AuH5wbuRJ?%$ zEHq(FvHA8Lgqj#|1NUq8q;XFV$)h|I7zra)Z(7~>$tjN_f06mRQOg-dom4_JNxO`V0axh7XF2hvN`B{8O zrr%M+f>ND{0ec#PfNhcx(5>L~rxTRm>{p507JdHRl7AzQsBoADi?Q-jx}10pB?CPM zDj;dGQKDOeO9&Bi4%gDh#s}!~^QpT>^sMw8h^W^5LZZlrT2-0RY~8I$7Cp;zlq#x+ z8C^*+6gGez&8Gf$ZKX2FBuC1RD_?z0t(+`Gd+(EALlo?y!4H3d$TNZII*9x_L@Jp5 z$6CLX8ORiGnu6V`)4MZw8fmspiRR+JJc8^SV)~}dlYj3O(Ho1?x)n$52KirWym;RfVz>GZkYkM-TsI1Xk_Cr5D?21Xir6JGN%^*yiJs$`WBHgZf_OFXVSW-s1=rHO*ig&kRD#1>uiHGAY4|G|uA* zJ|)SoOxV}MG!>OXmcaQZ5&2lpm?0Xg$QWa$geM8fm7e^1P;XwYr967$Un7xl6)hOe zDot|wh9?nekr+^*bE<0bM8^zCTsd_|!C0uZ_1rI~jnG9>E1wSuchJ_tw%KWyoy}jz z=ntQhMIVTW#Tj#HX5-Z<9CO#_hh_~Te3n$!i<1fe!<{UrM=S-mS${A|$OWdk*=oT* z@zsen%(t4g73OD=sJYRf^kM@bE}QSdM|mAZP9DWnn(Z0+3*#fcnhD&(J;km_-J;0N z4pK~Dney|ybkli~^ZaB9cZ?q&7J?k2vRUJmYUq9 zh;gQ=m!dA2x{$a(|K2?tgyb8 zUt{;%Zj6B{x&OYAa7T9saP#o4TM6IB0I+<4gE9Jaj+} z_FgR-mwhz;J2?yJOaGNPPs}X##q)&FBWT%JdvM-T3yfw1Hyjw14V`t#Dci`TW1YWP zfLxVDnXh~*thS5?g@5^wx^yE_<#8Ey-=`Pj<9QjTaryl}RGH>)mWRaH8dU++-;Gij zCSf$~3QE6nz5@YC1H6S5v-@|6Y;l9f={Pru$9a#x$nf`gbi#(swRt=sZ6boG9S0#i z**q2tI`e-nTp~c@^3m66tPA;=W)|yI3~TjAWdk!Vk=dZ0;a6}eh1qIp{#xB;DzSJS zHsX-~$&N2DW1z`X#9W*iI2_W(yB{HW^oD0mQ<~}DdNFp`hN4@4zmSkTW$21d)p6N% zAE;?Chr@2>8i2eX=r8_CUr_m2i?eD6qO(F=<4bkxcHkAerIQjYtf{LjCr2r4qS+() zA#BsFfiMXoOEYq*;-u)xDxO3XAqj->?kgSDv>GT{P@ulp0nJz*9aHOw8hv^g*SN^+ zTTbiu^eOzx&Y_>i12f#wz>eI^ACnGo;ukerBYkC~?*SJdxJ;dr=sP8b7&B(NR5RwW zW+xB)+@ZrkqQFpN%42Qi47-=;!MQ6-y^_~<^y3v$i&iailhxkz%pyk9EILV^y*qcy z&`S5eLkt0IpGk`M{-P{eA~cGht|yNI7Z?6OFWZ^~|E|Ao^c=f?;mC^qvUaF83BTGT z7DOXO8Skim$|u=7qf(?6BUbkMg8n0tqKMi0oLdV1;R_V~yy>VDBC?$5+~Kbd!dnIO z2Qn-Hj5+vGU0_F?uT{k%nxWXr56%o-l?;nJ#{?g8X3J4nscxCs8I2C328B)hd7eR1f@c>Vtg69s?4XAojs_iURd3=VOJ=o9-b<%BO^?zEtIHzBNPWV;lL5@rTD zf9*wJK9wj5r73(J=PAJ*u-3ynTK#43oTdQMklz&OT$Qa#e?I(HK4N4xAxYy5m0#vg z4Y_ni@d8g^y>SZL5dL5$?ce87M)uD^?FeMt(C={T`l=^wNaB%|ni7}ZZW3Gcw^M(% z&}*~LdiDO5m0*I}(uJv%^EF_eWO4}FnF-@b?mHE)sc%gFm#hhVOCQ0t=PFN9f_5a+ z@;e4{gCFKiw(M=9;sO)Sj>zog%(ux>q;K~)1#xOJ5hC6d1f~R89L^^Q1^lQQXS_NrLoSia%)R}h3TwhXu$aQPM zhudk=3jf0BZpQ5Eu9VHy%iv_oP;yxu_jbe&I?>+F`G z)NcEUK`HdMW{usCN#x32tS4)j&*hUrDHLcvZ;v z43OX9>t-|@JuIO+AtUfIJS_2BzA}@8HBPBgL(r=<3gVGQuJ?SO3gy%Zx`{g=pz(<) zOK<_|r0@c*@I3)z*QJ!m`Fumgb*N?1o~m`Nm4Wb=1#XsLArEJM%iJ@ShS*$;AF2Oh zB!W|>c{a(Rc&0~DB$;v`Z^sC6Smw&E)Syb0RFCyJ)~1KrpYWfK#d|7)Qv(r7WVBy@ zEJe&6Ssq*t?sSrIuX`Rj3M<=mIW-bT7dH}}OS0cfRTeAPuZ@7tbI4bnaHZFj$eI9` zgGP*zOCf}k4Fxzd)anv(nBor}alf2?PcVm;vMPr?c{^783bAlLvO;NNQJlb!cX=Ay zZFMl@!e@P0t(%B8P*g5fSD7}SI|a(vRoSwc3xc&I^l%#(4k^Yzz1z(Aqm^kilhG{S zoN#2bp#l?5dVCl;ugav@X7E`uIeBooR#Q=qGA&v#7m3L2XrRQ{F`$Y(6mBMTX5EF^ zFhkQ~5bLfdkRDm}?JR8k92(ja3GH(wdeb8p3Eo}Xe?~4Ynzv$XqkXyW>^T6nc=7T! z=xJ0e^Zh7O`LCEAF{CU9gUWL1=vNJMB6SSa_^+jy%ua}_**gC+UGJvyu=S_zF-}|h z+^wi=IdcFsmAs+4)ud}E71l&Gl{ywDv)6>c&`lvYBA+7SEO1=0$nS(I$$eu_r$Gg7s#qo8Ma5x?>2en4ZI2 zS~Ry(b$Q@kt8D+Pb5YywDSEfCC~YIA>*G+pBvT5MhAnF5G|X;JoGBuZORYg9S7{n_ z(cYQP*bT3*oUF~WJ~vxgk=%rxAi;;=&2=KeQ|o0(e|E5EVC%)j{_PeqUFBa@q;~kT zyAp4z>MFp`1~fiS_1@+4IbSZK)BYb4z&I4Hhy)UuISikWY3ZUBXDf%#&5UYa* z?J=U9=%btn(rzTYB8}Lh;!=Q!(^p!G9ipv6wivI(3$Eb7hd;VP1R1|WQ1cBCc(Z>~ zwkjq69-i>`)7^r+8$+utbFw&UZrhyE+eW0du*}jDg&-u_dTrvRQTT)Om(0LP4U1Rl zYLcSAKzeg^y_36;C3Uu+UjKuZCe}vVB>ko(miN)*_P5|olp42=c7q7cZF-N+7dZENACS;aHX|SAF03B(XK^H)NCF-^~;wXEV`my?oUtsF{Y{!Gm6SGRSat4 zQ`Cko>Qltyxpl3lgq*m70})WK$0!Cn77l;JPHmq|UHSV%J3;8V9@$~Mk~rfw(Clei zz~Jm-vJbVMbzzbsrb%zwN7or_Q|^r4i&Cr~pG3ztF8x}vqI2PAY-)#tre`lNywNJQ zc_@DbQr-d=zww@@5=}=)Tq7O>ceo`<*16LZ~v-dlWM4yIfyrUW>hl+YP*ZKJxVzMj{O}wA}X_71kc_u z!;mDyERhs9(x}qTWw#91u(jP;D>-2cl!Gb&LXzRNQ$*(pB$Y*{{-f{w3V2t9slPjx zh5In$avD?t1q7w4KY^AeNV{ZyQcsO&Q@HoGzBalQvpruS$F&sSM9c$A3dr zmY1=EcB%UpRS1#}h0-rb3*!0rSwkV7LP31z8bRv^(AJGw` zpA@fbHqxU^;ozL)fsY^mr&qFM4cfoyx+tP2t)Sn`Xkmtz`2~^RpX6C;6TgHr&HYRYQ}SYI>MrEcleTnh5A>m}{I?O2OvI zK4IFQYb$S)*N!1e8#-y8c!u*6bnRE-HAM9m?*JN+_L4K3OZ;vj+@&E$3R9JC#+?sfDnS7*if z@2A9+U7t2iZzA#DkXzg5P}jrZTdZf0*h|mQ zsfrLgYRcsStEDbO2wn45rr%DtwA^>B^B3DnWxm8H;SeL=gB9q)CEmPlD#<@s$@{#m z)<#NrHc^^4IufT1Xms`UGkyzHh8QL~Znu67ZzooeAIxaqS+cqBBLAxUWVt_aFwfg% zbuqtArgh}@zLDr1Ogc1Rxf=Y_4V z$b!o$m{VIDh?wq_3}qZOD{mm4%b;HUcEAQKre^@J{Oy7Gh^iv3CIGG~;*OEPnRz&GtetgJ`I)LkrhC9yq zE@I{HANHLiLvZ*xHKyVsP{-RDVFw}>yRo2qPT>u zhtl>GGs*S(R`*;og-O#Xwi=rE{u~^2Vw@!`w?IvS&3`1kIXy-xSY!TErT~sp#uRh| z1kwR!e?p4782)J>Fk~Wt9S9@)UKGL*a^bQ1@hbygTCtONS@yDNnzisuYF`{lxVkH^ z{QElRmbN|HD=2nIX>=DM#kp~-S#Yzw5{~yZUF}TvLZ5NGgJDqfF+qSI^ zXKb@$Cmq|iopfy5w(WG1o%OEo+k4kJ-@D#(YSyfJ>Z$o>j&YBh*SN0E;;&zk6@{@@rGx{3V~!R*|@*b!Tz zI?^)(ABx{U1Up8jH48!(&@N#i1!%cb&#ulvuK0n_(;5biazn&?Yr+TI4cy=2zz}(c z>ao zFep3BDLddl=5S8@UU0^<%n?8Xfc=1?j{FSH>|-SDZ|h63bGz*XFL}mDcvRr_It6YS znReTiy{GyPuC9rQM84rnT(?CWEyr7ovN;LXhE)Xog#3*UXmK;$b4@dugC8=G4Gx*P*fQcHxi`k5y{zD>oqPptl#i<2BWRE3cQ&MUiq= zcmLP9cpdLW-K^GdhW(jn4>OnFlv+dBp01%fKD=iq6&c?7l`}X=XHo&dSnYP>edHrU zyJ_O2q@lw*2n-#**nLW$NnbNv(Qfc6>STb~)LK;zb?#dsl8H4pB8A7R_7;A@7LKvg zBhP9viTL6|t^~!e!YE9Mq5hi30;Nbj_QXi^;Oxm{*wIS0n83!#ol));wWfXRwg}GSb(B;v0$m4Dl5Cq4nb$)gRXR07=X4Co} zn?K2Fnx5$H^q#g*9}lf(@Qr2-4>C)e^FH1BlF69ry^Umw)T=pK#P86!HK(|6E*Xb6 zf;HP{JryBpVq^wgI=Zc}&4< zBuGG2e^n}nku`vY-aaI}lswV5UwS#G^e*W$Q30ouZu4NtTV88mE`k=k_gAQmr z>xcp#Lmzz^hsZ)x?q?~L^%P65nsc3g5;e5CV%u*BD#d`f<83M7{1RIASqq=$X5`f!^k8t1)m;(B{5 z@gXGD?2t5Q4q4N6z%;#~%e8=2yxq^)+TFJSmq?vq;A!%>7BqZ`p~Ns%XD!E)1L!51 zGaivnjpS8usS&B1VmIQ^6^U-xF;^_bO#0gt>?~#`*)M3%dHLN4NOr#dsP4 z8JlXW;s^wWMw9%UAPR-$bTFNuWBS29HKI!3xS{1{^PMc-Y>+YWj` z#lg0Vf}uPI6Cte`IGWm$P>{>~beHBsZ<5CKL8Kk>^Xlkd;0OB*#Xin2Uh1=d$>gewLI4+$#BG6L-f0aR_#s2bx8vDkw? z90(q&^Vy97EYJ)H!Hh|qEYU(P|4-!=cg~&j=IlaFm)%m!hSG9U*^Pa${aFhLN5Vi?`xGl?{I=5J& z$USbdW?T6=9En@tTa7{(rjAZ;octfMWYTS zhrLdL0LyVVVDgd(;hd57z^0U6P-=gyUN?|ze~!rFYosbZ`b+g|B${Nw1{hODnk2jW zP@6v0me6Nw1i|~`w64IJ3$z%=eb^g?lSz2#qA%huac*{slf@GjA!P$0Y*H)L!^UA` zhemPQcIz^QWaG9TT($Juj|Ahl0p_YV`s~e{KIzY-23y|M*`{v?g(+ceHCfY1OtBjB z)OxkQ_QDVgH-@Ea#ZUMHN&*|L;waCQ3Z4CMe_F4>un+z~6iq*C9OQL=WZ%R=baC`K zta(#2dJwsY78AfAB1z>VA4Kq~!ujIGzmZ?gru*^f#ukzN37J{I+vgAz`SvgAxM*<& zV2v-k)dK&ge1`r%xl$*0I}>9Q!2gxg6spTQ?s6dU3Zs7tCbo`Sfty(VYHx%T5=znq zK_g2|%eQKda9)m7nP_|Ux_bj>wQl-xR(CO4+z;D(^;>M< zEY|~I^&cO0Ae`l)F~JEqtDI1H-znf;#XQ|(?aA`Qy2U-xpeKCpxR_YrD8~mxjAw(8 z0Uf?wNOjCb&+mtab{q14a<;B-$+Erdou^r`a1pq2K}pVY0rjfm8}Ff7=$ zNR_7N`tfHD$D^S5_-Fv3f+alxcGcMl{r0#hBb`V(prtt0llC+)V*;JnHAx1>w)g`VAHtZ0U>WtX_7|5>?{ZK>LMvv|OwH8r z_Qi)dqpllFvj-&4{IcIQ zSKDS1*<#{*va#e=NfNK9wTw+hgNm@q#;2(>iMZ^JqkgjDh;eK41`wQ=iZ+Q5+%oLd zAv*e;<#@ETU}Cvi_#~*S%8X;&3lNaO}(89Tyf3!qY>sz zHk~E4U&U-4@o77SWE>;9`N%m*zbBU>DtrRUl!Y;t$^*|8#)S7>|B#jvj6+B*eH5w2 z?tt$p6=x9pSJ|-Bk{(GJ5Qf(xc=o>@&(N3E($viP9YXl9SVrW?U$S+tsp+$fpVweh zFFP)=_#78N%m%ev@$fLfWY3)z#P`IC-zq)o9n;|Ps8%fB9LtPfL??nXpvTQzTmRmw2b>~n`Vx6(DOsD)f!8|sL>(m4>t=KKEnCJsD ztSr<#9#|Ls+alr_P)G_TIuDQ#mYh-I1%P)lbvvxGz@IWoys^32$Vv;nzk~Y zDB4HbZ@BY&hY9PvFdSK(q%jc&Mr4H$ z1p1SLbApe-Sb4y#O{`%Efruz`w<}vqqZ4Ajp?btpnJgClN7p1 zhc~MRGEfY}ghN3TxQPe(6Hs~-VkP(k(r3sAoY85I)sg#5&?^}@01R{k?MgC^UV%>> zOcM6%L)Ov17)NiuB$W&z_Z-)EpFvRZ$ZQ-czD?W!IpVpGJEAf4?rhVEW5?s6%h>bu z!$*s^3?WH56=TVfv=yt3hnF77k{3_WRE1iZhwjX8ojQz6o|VR3kH?+O1PY>7CC^Rd zrRrj|>1r<2SCQZQTPEHKH3w!toD&;7IOU`+e@U*~W=C0<0}|?>c|zi&NAy*j}gbGN2VR8V|zze?(f?1uVfAc^j1^o~?r!T|P` z!QK`PkH=?xIozJJA31I6BoQ+|osWKo1;Cw5E3#X;tsmE1EEgh6t=li5z#W}QGS)X( z?@YDFE%>Bzz*#FdeJ>gd65W|dk8o!)-%3aF0K_%tFAK`kV1j+b5;p1@%1>tO}m)Gth_F(E;g>OzO-@Dp{ z5>RLLI=72_v0=58#ky<#xlx#S))3{9)k<|za8x&wXmVUqPA>a1)eUgW^Xzk3TfEJS zwD?$8>Df1kw1vtNEFl;tg^T{kxqo&1r*?sh-hkZhroz!o;DnO@<3PW~qeH~>_-8G9 z=7*nf{loNIkKK(#HEQ2BV-?7OO|49mX@`J4lEnSnqk6(^Wg;)T|0$AO5Lijzal#hM z1J}V1yoP%tNZR)$VE>uVPreaE^Lxmsy?LMPbrJPCSNzP8PG={QW~520-F>dr(zS$> z(p{5a*$fSF+=m}|NFj}O=to!teaXM?;P}4-M4FJM%wlCT81qI<&F1n{J7xoe3NU8! z#3E*_D6|~Wld;(BRzt0cq}DPl&BrK9Jo~ zCrEyVLusGEFK1kq+m}8qlth|F+97H>+iag3i8Nm0z;k&tTthTaZNlx0+-+&T*GQJ# z2|Q?FV%Xzo5)0~R{`3M`YYzx?Zdj%SiLo5hzu>xcO#eoX^Oc89TV8K8`M7d)Q z$H)^#6kYp;4^3jg8TuY+meMN?U!M}gP-=ic&(bmI2ya`!N^by72~Uk>I_;F6++z9G zc6182(RN|Kl?ium#9V_wF`F$_O_)YrWN+LiYQ&8ctxdyVOmQBTXOJXw=8HQyl4{`Y zk2{p5%SXJ$##Xjynm%0bN@9D1I^@dJOa)Uo%MG`pGIsLg5up_w&4#Q&Yjf);&n`+& z{t@FPXL9jFY*uN92!oR00J6#z zmtc+yo!@xDoxw|^u`|_0+cwi*(dZ{RT)+kHRLoB|SL{Q=MLnuN?;oIWV;5j`(}Np0 zlMGK=^y@{ZXsY!-P-eXNkw!sQ#F!fKz%lRe{fI6fvLDs6j`EN*Nv+ihE4)HJj--zF*pGGRw{^LZRevWZEM)igF&~93xQ;a2yVSanz$*~EW0WVV z2a%>_I`Z{os;x3&kQBibCy+oS@=*Ii zcVXzZaoTQ>u9j##os?jCi?j2iBE^V@sE#H7gigZ9soUlGAIrBW=sq39PceMkX7o5Y z$n*U%&6qAx*kpe=62UK7d=~OMe`;nKWL<=xj6oozkTDE*SRYSQOLhkk34^N*!F#`P(0|(JaLh45?AN;GDTDzTMoQP@CB}&L+)~% z`0#M*b{6gh59)!a-j$Muug(H)x4W)&_BKm^9GiMTSi6$oPu>`8CuF)T`bDXw8^Yzi`hQwlnGt{(3g6WdNSr2p^nS^V2(r0a)Hn3Ijm*3C-(%SBZHBK-6 z$^u;eF$?&&^P<11n!hU#M<8enSx7E?9RWDPIXqgu)1RLXAkUv`C+6caRxDx?w--N&bfe}$efGt<;a z(|n`%o;;cJZhJf9GxhlRbJV;AY&EdtbN>>X5EEyo+MABD8F$?j=t|N-z4INKQ2JS< zmlb-6)Qf5-IB-fzF&f|h9CIIB5CLWu#TW4gD0~J>AS@+Ozx|sy=ygOPA-q2x#=Zm) z@Huo2+=PFO1ZNX?4H|bqOpSbuuwX)-U<{}rSS>dcb~~86UQE$93?o}4=^E9+F|%Yw zUjl3#xlt^U=13MU6FA{mgBNNNAb-HOPu;~0DJcP2f| zeR#a&8-mG^XP_e!uh76q`s=(%`Y$n7b&f#=v{Fe16)_7f$V6n)EVX-;j(pn~@{2<+ zmt<=TkMQL&@)b>O=^<1$cJws{^ZYP2IA(NpCMgHsp~l!5w^;^vuVsaLa{~3&M3zRl zk-;^*$y~gEgl1lCO=aFfIles2v|RFez|i{~0&iapzmlU%^daI6+>&Y)xwvUd4UJN$ zKSwK_5|l6z6J-7Sd&hQ)q`gBuF%x`~+C&|G6~PO?+|e0eb|s-m`v%ztCT6#IqgJ+7 zvezlkJgdCNp9I=9B&(EHI|;)o$}4KpW`ap(O%M+(GoQ+YC0Zk=>-2Mwr=t!-khJB_Ln01tR;Q3ai>osP;(SyWYZT zPVAQ{OoT?xk(3t9ts7I2wvXhh^$jzim3Ppm6BC3v-8aX8LC00aHBpFC+8mvV?)7Uj zW-@af5dQ{ih`-|Kv)FZU7?b#A*J#IneBSm&Bdlfv^|E3NHKX^-0AZ$`xv<7TU}k}Z zzQPK^T%dOKg%mgn5GH}j_4}kxXQ5;tvG|2y$(+7Klbq~sXnTofsUyYX2N2chA6$lj z1HPd9_muYok|EeGs(a)#y`$HdbmrjO)Pt#S#UqYW+8|wS8a(a^gv~0)WG8Z=xg8Et zkw_r2us{8l?=UZEEygz_ofR8pEaLWqI0H_W6Wgxk2rBW8BwO%}#r<%& zUUNU5q&lucPEF^9KlF#p9=ZeTJ(wn9+UBEqRrN)w^{whlUb6yW`K|1c`imDxSG$JV zL3($R=rQtJF4@*a@y`K322wQdo7`>OG>PxU2EEiW{9JE5FzzFWc?84hBtv5HL z47f#%tV+4wJ3s`|vCOCeW#t$XSoT}*v>LmgMR0ma&IllQhyrtH!{^ntp*ge82Q_xY ziFwr4YSC#cxY`U3y^)Rpq<|tiQxLp!0LLqY0ef9!Go$w@VS}*y=6jF? zZ|jjMYt%R_qv_Srx;^RSp?rZ*7kF!(ohnF`R07eD4~&s6c{1G>I)6!lTIu1ZCixsW ztd(o9h1!u9(7>VEIFR!4OaXXa1k@6G;;9JJg89n!AEkqraefhI4{#L^cvKh=x8Cj| z3EY@k@BbpONl!;XfPer3n*GP78RtKx+W)DrjEbtY=@mc{F@;`+MkmFmHLr`Mm?JL3 zB8gf5F-h$>ysl{}y#FJA8}yk1tVkd>PC|wehxcMUYck}!uWLtts9}HL)s5+NhOGIy z*75~zlVDIY(HeShs*0MfCgeeB!Y=boQ|jiA^1RbTOmG z4|DKX7=pmEZK^C0MTP76NBzPlYpw!n`(~>+|6d1^H(%?euuGx>mg|wa@shH|-p)*z zZF>b2U3+3QG1T@8o-hgs#K#u~!$PCi5WXA=Z1m#YPoRFoT|t@D$b@)BK9g<6y-JE8NK zsBM9BKgujc6hwVdR7qBagRHbzo~a?)xHsioDXt{6N>wQTWfP>>5&t7^@=)pXT}=NC zGrf@O!>6jdjvB_4Q%>Qq6gI&PpOnx263;TD5eEMnL2sM)E=V(aL1r`XR4x^j{|1Wi8b~^0gUn|F|KP|F|JvX_2Un=@(1Y-*>|c)wEqv zRnb1=;sFk+dK6$>s#1*-b7#KE{**$}+TW&wrOl)TXGZo@J6klyg7~{#KmGV3-eh2Y$0S6!KOY+Z==?p!=Q(-4_4$5c3iNhkg5-g; zMAGrSCuv*4juefAM#4?KH!tvsq=SA36q-=#S)z9cg)jD6bo-d!b>Qk3(kUZKFd}5{ zwJ>~s6Wm)LRCr>f8l-NtTBhPT;#$M6NaGe^a{s!U|j#g^g z)AJbszykA$W>q^V9QRcOY*nl>DqS<{Qk~>XgCHY-qt{~%!XO-0Gs8G3Q?;?9Xv%Iu zgQBd>#L;SI z6Lb_C!h6>$w8((3%5L>LX3oml&6%jZWNx7#FGY%@EO3jU+;iiNs$RegBu_N^K*xYUnBN zx277RXRcP1^3Hl=blnGKIpmBH*zcw}LSu;p@z=Vqb_mCYKUZ?7PPOV2XV?&j5ujCLAhdH@#d<+XVh*1*Rrqd5_b~tyy@*pwdHRJr)t~jHil!% zFVgByze0VkUOGiv;>FN&0+tO~s-0#9W}|eEb5Hgm=#p2KmsoOHrt3|?drnLmNYoXi zrw&`X+5?YHxOL0tlcp!_P?HBN==-W;iue3Tc^o05!hb*~TnoV$*=)Skt0T{%v{?+3 zvEV0P<{a>4s;E&ZLG$v-P|l`pvFrXObz;8nKihM**DSRyYmGWmQ(&*0r@TcBO_~8?G6tC927Ur#*1vMhjWicxA-S2(oF4^5a(P(*j$H=lBd!RJi>0 z>n8TRm@sL-NK>p^i#qg{JTHNwzf?gW!swMp=ti5XI`k{p5?`#xbvq<_mPo=ima1z? z8JE9HWFF$s%r8_D$!#7v1DN6wm&l@O5)6BcB|C(!*h6}mZCe?pU`n-L5f#{|73j$t z#jb4FSL<`1z<R*2o{)ICc`^TD+@&B6#RW@;Q`syh={_RPf;JT8N{4G zVt5u*SP)Ja#1~7PLD+{wMRY_3x21Q}ezoE?5J8Xw28(aqL``Nu7 zJsm3f=jlpGudYq^r{y>_Gg471dLRmI$4EddwA}3lC8D}1v@k3o%?+iroinL}qpY7e zPb&Bvfeecyi@OH>tJj_m5mg&?bFjYRIraN#ed6U~Zw=koxuQ+O>1KE!F5*B^qs3f* zRA2-&;3`+Yn@PX#i7^73@X2mzNO=9G)*lj1+j7ApZ!gBx-HArXeGxHVB!WTK34;yg zARO9>sU$fI2mqH>*3pwaPY3ne5@3p8Y|;sr>}}s+&@<(S&GG@*gE&g zy*y^yn|JnH#a1;wsZ^Q^EIdF}E2nm$#$%O-h|1jg}lM%3(Id;uz@wH9h0 z2bc^USdwqUjd?wLE-D^-mje)-;jy5!bttJ}dfGhjplAWo z%ay=3I^EFcuq{U_`YGQth;d3L20^4W3LjyLLcUX>O@xMRQ)f&q(aL32pg03Je+W7A zzYA^%AU9VBEtnbk?Z!)MfVu@%@}N=3ENXMhM-4AVi!ue!r#zD`jIE8bI7Kr(-Hjdn z{1=|E;3lkN^2f}wQ`+;?tQ6AX7BH?I)eK$Zj; zyfp3_k2SjiJ$F0$WZifGP?l|G6>V-x&9P#(W$<3bM_6=+b5MhTj~Y7Ya?}8 z9{J(ff5}2;<_bNPOv^_UV<{}q*mZAs2fv9xYbsQrZ*!@gyeOY8&UbHk3SNYqV(Q1! zwMh;O&E$SS|8-~;HVVavzP97f*Z1FV$NzvyvUM~y{~O~eh{WLVUGIw(S z+q*@nSj*2Tp!rBOJ5z%XVnGqZAsL@R3}A{ZGa!3`x-$wfn8_TAtw@P+w?_wd?IOm| zzvYAp%=aH-CO_v#9yNhFv+O1xWqD4vPPt#6w7%cm&0zweroiXXhgyQzK&PPDX?NoT z&k=!5_vIw_pd<6-5qq`t=V%9JTfZM0PY-O@LHUV-J4s^=(`^ z=%`Y$`dwmWrl!dr)zDYlLxlbrV945DesF&8zSufC84Z}pm8-tTglBOk{mjw4mUz0> zaf5XMjeZ8f-k82CaqfY!?0jMlrA$BL$ z!^eBg{s^-K42+s1I*XwyNRv)1lL>q3Dn^(f2c-r!9GaVCUkqbDZeT%}_q%(*@eo@H zjfB_CI4w5RW12~bGYX~T=t9We!}ykX`2#rJ17k9{gcJz4{hz-s{+smDd7umMn+ziL z0%?`XK?YAppY7YHzM2(c0(JcX&UG~v2aR?NR3hh54u~p+?!{Hv^D0|T;S%F;9Bh+H z25gp2UE5~mB*qecA4gb3inI$kE)^%1b^c^rjh>Oi?G?L~6!JKBzC}M(My=f2!P=`7 z+(sm7Bh_kRW8Tr|p>;YXzl^Rt#WpR!Q!Ofu$ByHb)_aYgZ{R8wmRo<)9wm+fvHQh$f(PH{ z&9Voqbq%G+L*^cFJb?PzAWdSO3IRwI;V+zV7hAE^=;jh-uL(PHlN_Eg5xCv!`Z^zw zP&`5qO>vJQo zz<;#4>2f9}W^>DXdOZ@6DP z^rBfQ2VtqIP!%oOG4TFY&3OXX;WaBTxEA0m6vK;N!^^}Hx_mITdNH0RJfXb)U(5km zg4p6nF*A@|aOiJf=1Gj91lU91^dtpe1V_jL@?v=0CM44&dyFi@Zd%8ggNoQw(1}O( zGK1J)q$xTJe9(ne7N7e1B-`-dz3-dvya7@SddVX;5#kGW{3`)i<+g5ptbl3D-(|z6_WDnlx?V6-RqUJD{e6hBsVxNu-yq z);#e#ce6`_J^RDtLb&d4jx>S&Lxn;2Na`U5yO3@cbViaBEHG{KMh9S{b8~fR(i$wl zo>874(Ku6J8JMN?J4CZ4k)UQGY;4!gYf$8DMw~7NtZCbWHVL7oue($$tPztM!HqivV*I+vQ{gDtEFR(jSnPhIufESVe<6b z-vOT3JA545;^1jJ#2|X-Ll}772t2;LW(Q?a!wskt2x0`1qMZr({fy#nU#*mdlns@r z-H(DY>QXHl|2E(|(gZ!Exp7_bmNQMRc~@1^+!1svdbvK!g%%ix=Re8YV1Ajn)4MWr zRH~3EQOGeiS{M{<#oLoY>O}$S&r^3)u0igGj`#_tTy9Zi?}1iT0d;E}ZUG3B_DjrQ zo>`F>sjrx+H>9U`revj`9!ft8T7;g7>Wc1aP7~|yHC(;z2YjJeC+M?BTnk<*GQ!ce zQV;9>btpS|Cz@fo_e!5L`hoO^-7p(di1pQnvkwWEzUE7WOuTxf0W;xEZCZPLAsOfP zPw@LGgBweVf8y9$gLeVE$SZw2-xE>?2Uhb#Wvh#4VYp?i+)V%z-yuu*71~%W)yj>%rZsBuZl3Zt9D`u{s7ZI`gesP3l+rjYP zJ-&j|@2Y1E*t%hN-3@1jLa<)!lwqMDdsGE_=zlyNG<5Q;Mmh=}b zeHQw|{jATLu)HEf(fq@7I&y+JRB@mfJ#VG!UZZ`p=lO=@hbAvN?>*$bxM+TuppXbG zH}lpx`_@;di?G@j$PP{$q5`+Zpt}f|6cr1Ltl*ovFUUS@4Fp+$(tywQcbgX-4>kTp zA&-XuZHS4{%*qDSn;7mVv#^zW zrG8U57aSq(u&D>qU<%!Y$(EO6eJs=`v)NyQZMizeHHNTZ8zfjcojah}On@Jxt3636 zzPk!1zC-wt#FxmM9|TRw!x~^5OD1;DW5aY}(HI654JNRVCL)FlgkI?GyXD8ku~omU zIaQA65RK;HaDI{}S2yC!KI@`4qw!9P7w8t9$jOECT*RL<>H#Olu%iLrJx>R@yzsU8bO5OCn_y-ZnIr30c zs1!?83bCocRm#*##YlwJ^@O~%h;4g=WFtR^M|bVwf^1+*TM}G!ik&cwkprJYwyg^7c&r_(s*$(lNNPy z@TcQ~UAoK;kThR;f#d}TY*{o8LH)RHxPTo4$l64aofSr370jEkBB7 zi5-|PiO1nr!}N>hVDvH?Gk*6t4c4OK_ZYWJ*S9}G)XS|yp_mcm7FhVCFf>~D^wHI? z!3|7^h?`li(NU*qvZk${XZ7t%g6;<rQSo7r|`&n z-cCETnQ{)lRxp}%isvzn_`-)%5~I0X!pkXDj*QP;lu-hwS}&icR$^ot*6=my6q|A! zxN&CzLl@(l#G4dxz}(@Go-PZ+Sqw#@8H~XOUaK|@s}oi{%w{|WQVTVYwKL=U_+yRE zc!%xU?L+O2InsQPYzVVM9Ge%Cm)K|ZVH)c&m`F^=~1U9B? zUGVp;Xd~Iu<+M0n01p=Ku}o9qVU4w=?iSLfz;xQiv`yVWfwC5=p*BN2oJ(pu?Nd#K z(Os*|i2UyP#bTh5Xgof&XZ9KK(0Lt)N{{l&+7Yc5L-t<1a^273gEo8eu8VPv$ZaFM z7W`-X(RyT;8#Xd{R)yYiU==7yVQ^ zC-pwmj?L!ULQ>?~Os=r@V^O~XK_iz-)_hvhba++}CR;rBgj0Tbr(r#=XHye%KxUPt zqiERo^IlgVw)neX`{a?m_>eXS4uWQ`aktF5Sag#!&pb7%>ivS5sUOj!NTrnN!^^sA z_8(s5N8$7z42Pzp+oTLBXXh&hAt!x=l;4Z-e8axm5?7rN^#YhTMliX1_#e}e#0~qs znGG*(s3Nq(5WOQS=1>w(io_ChYa*d|H?mxw$%I4yaRC5 znc@)IV7#Dy1lo<*ao(^A3>tFTawPxa!P|L-&SFPH6eAfunK)WVoi9Cst`n5HFA$&F>&?|;i`~9fhF>NtKX{RoWwp8* zHlX3Z0wk3)f~dqZyU$Mfbf@@Kk4DmE$@mdq>i8TVsI?I?XL|&^W1sBq|K}1K(b_k8 zvOD|s9MxtgF>L(am|rN?;}C*$HTZ)9O*)beJfkFX%&(m9ydQQ!by! z@YwGbGDm@aUcen;61V|7Yt?7`pwje6e-VO*Q%A)UQf_R=>x1Ezu>3in@Q&C^>ipXy z^6Rv5!l5Z1OFoT)3)1-+?oCZ(U0}6QYwrAEO?^&McA+%_1t-Z}_{g=P+V;0LX*;=` zd0nnhUR1Z(}tn4h!QWmNBz)E66(rAey@+p9rH5fH<2lL0JSeaM~CLFBd+m_YT!C( zczz!R9R*$vUXAb|vROeS9LbqccvZxOc9Zbm$v(|q{WTg|VRg~R#`gzrg?Z)rajzis z2dvv$&0(jn2ftV2#|SWM$eo2P=uD+ks84u2>`N`-9acIAZW<#dEeB{N&swzOi!C{^ z*${%$j+ag_tQ{>~e@MzJv`*kvE_|0zf-+O^&)#0xZBIP>g8cY0ePwu;8I*G}Na#^w z(d6#j=I^rVwQKyLHm@8W$IN&U+V;@+y=xlz(kDkPkp%q*_Y74zL-wpJFGP(o)pNOR zFKI<$OgzR3af)KWN|}AB$iffF`!xpqfG49xePgMWs}3)Sw@$?J736rKjN~(7>JCEO z5e>Gq8Reac+)lyXi&lz|C~da~n$JMIMO>{Bm>)s(IUAm^J}A>vUeYZ%4khi#u8>ar zgk5}w30vA8cM`y-6u<|h(tpTXav#A*d8KhY?MtO$TUd0>f{QVmq%$}oHC7`qlAntV z`s?&6oWnj0L<%t%`cz|RFvut^aY`o>`A&K3Y5>5=7r-L$+37|Z_Jw|RzDlzp7tQc& z@rXHbH^0`EKE^kW=<(vZdP71u7=G!)xRz>WAW(DaIA@@wUt`Je`01{fGr7U=x~0V* zW6R~4-th5+;9m2P&vwm3d~T<^L5Ey3kK6sMDQIUmIbqS9>51MK}YYzo;I56?30SA|mPBe3v_>GD9b)gJT##L{Jx@Z>+lSrB#Wi?O{edA66QGpwr7Tg8>k z9D8PaJ$xKWrD~$qQqQ=vpHI?V9C>fT94p33O!E&oA2$+1?8PQ^|r! zgk*kacAp+w>Bed8w>Sa9yeIJSIJPnCRUwcAV7@X273pKhiju141Q!|MgHMarw*+MM z|1Z+sF-W$x*%n@HueNR5wr$(CZQHhO+qP|Mb+6WH+}oxtaE zWcTN|w^=)4Y5SqMRrxOGLJg;Wn10BD@W^o5iQ|2H z9|&FklM$#cs9F~Gs>a}0qu`PdA$JX!g7%xDcGv;3j31clj(^L3!)|&YM2E30cd_Y%ufr) zMzB3qm<{;QbSRB^ksIQoW@}+7%uf|gpDoPC<~n5!(9|{{=iOHOm5KG*Acu46sI)$8aNKvJ# zO>(W0SSQy|oT6pV;pFF3Qz6Po&?{*E)S)Ac$g}czSh6%gfXvh@`?Ly z&TtOa)hY3l%jwCbc`25ej@o2i6M|y)BREx!5U=Ei@7D<&CxN^QgVw@WM~SX_j@zud z8rUY^IiIZJxyI`Vd0GyER7krcat#ZA&Mq6#Qq#M}Kv&qJN+KL_QO0gYB1y(E_e6#-nsGd7}9>g=Bw?Klgx9z>h z>5Q7fa2nJKw0Nw=*LNCO$?FF3r3%Cnl!ZUb$LM~%`e}&zRtF|J7hY&K%-#@?1tz`- zCAj4V_95-c7!6G0XkW;#~nIA54hQ~h}VzP{pUkc8l6(=8aWPe%gEwW6!@)rT+{*aQq$kAnayr==|5z zUf9OP+`-o7uWhL^4lEtz<3EIJ+|{UAmNb%9Vrp`8nbqy;;`{OWhTVrp(tVa} zFFR5f^@l;kC~9Kt1+P%BkC`_E4tb7duL75*-Z4Cz2n&G*s*NCT5f-)ppl!Y+4|Ww9 zdM`wPh#Sy`qK!I6@JxX&Bq_kY2w4hmWG{mB1Wn^GJlNV=RuL*AUQtyd#pZ|sdSB78 zy$E#)S!ZGmVis-TzV{&4#_GX}+_8R0$=xziGYQEW>9e3lD*4HGGAkqzgJon7eHEsg zX&g^FGczmS^Mraf!Dcay{>f>Q$)!zRqh*S^yAMnVIb<)u=C1hH3}~xLb2K2aForX} zTRzw)a-)^;YZZ-y*2W1*I(Vw?X-X3|gL{)fJf_j_J67ZBx=FlKxAA)rGgTO(PS)D% z6YT!{x1ZUJ>=tMn7_6cBuUTRl+Sgqc_BNYDgDG@I8tlrH7VBK9zq?&4+A|lItIX|x z<8l*L4`*B@oYyT5C!D(kd`cgv%+nCmpj9)VX%A}#*>glMOe5RRAK|}`+ul`SA1v^A zjW6+Z<&O8qH6;=c$PBmu&j+gv!Hr-GluD6SN2z=h&AW1E7PwmKLj{%@NBA`n;UusN zg9p6J37c5<-J`35nE<+lRz!^;CVC=oK!tid3YdZyCY4~cD-d9U3V7kR~Gum^*KOOn4N_jNomA_2gcJ3~y>wdkZB8KPxl*2Cykl;PBs67XJu(-`RQh z>pF|0FxQBIcUB%^w{B$JUAi?@w_?k~_u^I)UAI`3zl9fDCg+5_4!+ zu^mAty@(Dj>241p#+>4^Q6y&3754$sN6jG&<|E>ib9$1Q5f-Ufe2mrKFbFU_XH2A6 z`oJ=R0$^cFt?tQnyFHrWynmgA6=P?b@}dgL25zbfH92?(y+)#`}5Ob=SN1xs&#JwRa{5s1AqMGwyLu9~S3+ zPaZbsZjTd|gewi{z9$S;2n*F-U?`M8CgMeGh#cOKfCuG1JWN*Di{!u&UN`JTVMvvr zfnY>9i@G1Osj+P|65;A@AoM3K(UtN1@vy<8n|y={3O((Fnr1|{&I`P;eVj0DBpcLl zq=O5&C}w03>ZDuS7QCk#mY#hmYI2t*u}l5h?12hx@%)4VYb2-o*730N*+V{HYkk{h zDCOL^0WQ>fDCPXM;Ez^GHpuK@Z>ktEx0vQrdV+nlpOS6>vXXA`+ByNm`^H+m)dJ=Bf6+x_aVgs3IadZ=nw)$!Vn`jAlKNk>oh653H1SJN{A0^p<1P4~pzITjp z67HyLvj-RvdPGGAVBPoz*taP6xkmrQ56ia6`k_gkI|zt_lU0;kBf^!HU$YUxj>jie z5ff6AuQPG3^_!v8SiIY^65 z@VCr1n3X#xn589U+vG2d(TaaP!oVwx0+Yr`e@`yU-;0lMY)c=a-GO%>{9P{3X{QQk;XYz`mH{KR!Zy)NZ87 z9UaCsA6(gYvmNFwP38@2^GlHj6_CG&oAHp@nyd-%?9`)wlEXNd5ay?gFv2fG5X`Yv z4w@8JHJb64=bHJ28_AqWa-E5|YAc$}Ffp!GqWwV!qe%E>`)kWd?AUM{ z4kcq#(B4mk5AFCHDd80PYs!?KGZhWFJ16^D#|XeFv%@LF3n@d(BMT}yqpw4f#gsZF z4*WUjFd45fX`v(xLO5J0)c9zzKqpjMdfa+E4@s1gPZ*UHoAEFrV`f;p6js2J#Wind zOlyx9{PByTR6f;UgS2PZNg`t9Y0@OAMuzX3RT!DI|ITG`1A|cK(1CznTxN4U$EZ=@ z%vMwMT8HFPqVSB=baI($qqkEm_YE8KfdHSbLs@lE+#)PnmtITc9vY!#xv#&Eitril zEG5rVIm@LZ*ID@p&uMDB5aanAmp4hW{0Wx zw3cX7j7TxcXnRQwTR4Qx)|e?OX4+D1+^oz1;e=ogXlUqwN2;9>ZQK5 z{o<fJ}j%r$g{d^l9iYe_C2qa|bB)c?Qlf*ws5m+cFwAh}NAt$WZ$OLX{&RK6Q&ex_nw%$Hfw3 z$$4?vuqO7^Pw&S0idj%@%+%b|$P)>ZxJHAwK?mWnE;=tUf#UB`LPvm(4rRu}v> zTdfvstrmzPUvzXQEKRBi~x(c<2Hb1 zs*L_Hn+?YzPjE54!5fEZJ0^kkDU~S)&~GECL}np<46_sU&Y+xk%)gGuE)V4&wcn+s z>)&q8{15tp|241_cC-6lLXgupwEPxm_;*41FJ7p1=XC?$Wa4|&m%zeMp^j1IHFI|{Y;BM8FQTU%~m@5=@zH!$<6$2 z?Jj_n9*rM5JR$*!@D_r-=1@}DIo|sjl)#WM1P-(vBN;zmEHJJ|JNn)UAZsA@U4gC$ zu;7+fGJQxHG{_(W!WNOea7ctCgNc10f7r-(*=T0vEV{Y4RAHF3Ty;}~Hexp25LwYu zc`VssafMx`Qf$VAr`e%RPsMl)X+{4iiuvAPg0lR3D<;QPp}v&*Qhk(V${^y9(RyXG zDhoZ=a=K-a19g$tHZ7!aY)@JfBs>4l=dX!{lZ%nY>f_P%sW%M4*JJ zr0!S&)fgo`D&EP9*D%zoCqup!sO+-WMODhp4{s6u%)r%hc}Zh7DrOg}x~k0%!TeMg zKda+N<5!6ofh9DGm&7=iG(0-y61{NXVjK+4xRMD4tF%MhCs&p|l^f+&7MoHTCqf+i z=sZAK414O(M!q6BltnleZ**rhiwpG=a9U$I{2*s?iQRpE5w?lABz?QPmVsdWNy0&q zU79cV3arx(eTV3Orm@YkN{vJp`H?yw2_FPcx+xc?u;^x%lpG5_(u;T1pNLp;bR#^+ zzeZ;pZ-`O|3r_Cr^cC;|;4gTCgTwf7^T}3kqp$>OSvLObUaeX#IB&^E`b>ba8eaj% zdNx!RR@^g@M8d@nDa9o8j#PH1!=J(u`ad3=T0q_ksSs{xwkHtq z7ltC>cLFbc|3MJTbbYQ)`7Q^?zDeW%xt;nSoEiV?d6(9=F*h-GbP_Yx|E~Omt^PYa zqM~VwsSNkI((0Tgoz*5Tu>d8Vd2&J|LmszRV!o&)rojoKpnxEuZ*7|;jm4>5D;O9Q zGz4^e2PhUc3SN$&bRi5Hqyd3%A0G!t3%&z)`wlqZx^l@Dg9@Skz1CoQlG(UBmGc|+ z%j*@!Pv7e8J_>iyXX=HXQZP9_EN>F-#Pyh^9C0-~c0$%_2 zCM#)vaVu?0iA{NYRED%@4arJVk^4=aXFt=URmM$AL#N(F`dC&udPO>88+^q^*tt8v zg4S_VWhQeEi1g4sQDll%%G|c5C)Oxp3kL{--ctV;FMg%P=IoW2V5K4+ZvJThE!KHN zPAVS!1Z#<@vtt%0cFwq#L?T?&xw>^vUHn{>r3HbYtRi)LKZXV8frX0h{I8R$k`g9E zjzViQbw{xvad4_5ND+n1d5|nk>0% z|HO7H1!i=C?-J1Lp)^qve%Q3^F0ODhyfAW zoi$Ysx;n}a4;$95EYVM~Ac0{~z!@Jwq}KDjy+l}7LE$lQ z$PUC^t%JdD*Y!)fFVynS^@1Crz31x%7JZe`^n>L~?jvZ5#c>(LPc{&IqDEr(op&L4 z1r8OmxRC6X1bo$Bm9CPj2oX-eBH5_+37r(&1qKLT3UUB$T0A4p?D_>Z);|JkN(f}s z*ocdx1TWKq2xP>=JcLp}SgDwxWYr@)BH76K`I;23k>*FW-TVYu-ek8RQ|1Ge&-%U3 zbmFZGJt@z67(D8>Ps4878%J~c;ek2{45J1)X8?NpAUeVp+lFeS6BfxQ%v%gY3V9~! za|byXS=nxE31gn=VxM2v-?IqqQypDn<#!(rUkM3)PgNgiU5;$2#9`D@0^0C{UzV*z zQre1Xr0YF-a`sl^kTx&*z50BrXy$Je5OMN|O*&n_phLF?cGf?tGj6+2qLVU9g}96L z_$$&VViNuTRnU3xkDY>HhAlXrx>S+ZPtvqqn;LjSO6p%+okJv z>ziI{+I^bknauSu!x{^uRiixU)cgv zNXp?;@lE0IsX5GbdKVb2b$Ztrt>oC5yDy3HUA|9=**$-8#s12tJd-%DkWr;{UM{O- z?yy){`bI276(5+9=axK~oB0$?%`T**vy00cnVaPlPc1CsOHeE=!b>Wcl?%%?q=UQI zU~y6JQUO0D`c8qNq1t5ocmTjaj6l4WLx*25aZ~ihLM^rk_H+QAp*pi1sFVmJDKlK!P92;HDhZdYkp>;HK;g0)9&MNdxwr4LWS?4MM7``NzK0DG=2T zg@SC6?G*yrpxTA{&A!crU4p!~`^iGRME#)23hjlvg8;}yx+4c@g)sk?t!AT4MnT|?_{3(1GXhOF>SiF$2 z0fS8|_6ikfM5YXC{X}OL^@H{&Zow0j_!J-qyb*?u9MlrfgudZ|yDY_;@nHRLI)gPKZ$ls|jb%HV+wt3bJ95 z=<@IxXC&@~lEtMHK?J2`_WX=uCt-ujhrN;Z!1M{zNexAbfyl^od3siffVL_lIq7C$ zxLPcErSNdW)>H@-DB`w#BlCRX5js^h`|=2k)@9VNVS0DUM2;eZT0&`Uayrg+4sUS5 zK?SBv`5VGRN59&{6)WNsf0Y+%%zL_)kx1wC(#Q+iY6!Zcbt(y4baPDxHba?)&u_?_ z=6WHj#eo%*OpKm6Dc52HAoLOh%NhKWVNUiEyPC#5x0P=D*mY(yE=)whdL;&Y5k{D7 z?aikrSCYf}nrW*ANaUZ*cv9kln{ihs8}HHcN?x{eQcjYvu`$dpPZ!Z2KJdrQi$bd$k#%ir2O#6gRJ)muJ@~D^CR2_}jG=_e< zp2m)K5*yP-Ai_RsKU3~p zh%|L}&S|Il3XN(Mc6;edp&1Gq5X+M;Jo=Bd#q?tk?>8{Do@ZILWnb9I|@}FfN*Nc86OTI*d$r86aepv+@!rj-=VLJd5$Y zRS6ZAsCj51HLGnD9+O0uGt|C-U zX^hR)fr`*s$0T0mzJ(QaBHEgS*bW@h)7Fh)C$kz%d`yQ8O$*tU#Ga6 zfufcQn4P#{O}cMPyPzX$Y%VNX3VPM%$RH}H`EqQcN*Ae@jsrpET#OgjxrxkjnVj+M z*w;E6uAvrq@-fv{YaYH7lDCo>j%u0jBMNA9#2Fc!k!M(;hSD0BB;NCL0yR5*&ZOm< z$fL9uk6#@tWG3?7JpNE-%xCbfe=IOg$`U`3>>G~nE^v~IVy?Q$YzY|ZDMa3gTus;B z3S58R?gaLO^?B_cQxAXVN|N_U*LZQjOvNo<8OtqO8PoM&QMP38yO&At*AzDYGlsh;A&xA{o zI$#-O%1_vZtn+9d&l-r;bB3GO8z)>qs8s%0p+8ZqTlbk0n-@`kj?H;_;KQ zq{aX?{OlkbZz$|e^n~B2Z4?2@T^W26Fc*Ml@wNaP^>qI9PH#tpJ8zUjjC-#|4tw;RnCtm<=I4ww__@-6f1oR?C0< zJk8NFvd{86j+2)(M~}|!ONNsd^1FnOtx>Y3)02s^W#1uIwXe-jT)178)42;;=QxxY zr%t$VsvLV}_sU28sn(R-CIV%3wc3Rc`qc4r|UxRuD-? zuvBaT+v-YjpFEz`iV0js*DIqGrs2t(gH_-q_&4OQI5*VpAkWF~fPW->qJfBQ_w~ka z??G1XAi0i|u88mKK&hrBw_+K{mzLFm1%_6GzSWG{TzYJBRxXJV-PA4}=O zSSO0qIC)+$vFyJp)$@t5CNBh37#0)h1HD%k1hHWINxwdi>8Ok3)bFtctwqiH$yj(b z_UflUK$G2mS^o&!qFyq&P~(O69n&3I3(d0N#F|(wVLhs?LnUCT<_@id+$0&kSANQ0 zRb#F#jL5db+0i@h8gFi$3)?lI_7O$g0ztfSdf$?;rzYLQP`rS8oh)C%Z)&yIqGZ_+ zX<9nAGe&6~$>$WLdibq4t$}}B-6Ej4nO8Zv7SL+g(*X$340KwST_&$;klcZRxkRH? zRIpaSVZQKP6VTt=8yFnOmCZ5L1?EngWBis;G_%VX04+UJCyNIejFHS2xTjLLdq&FG zeJbK3FFGIJ9C;7R3s}UVQuJ0UcUe5KwC}kX4W{sat_1Ls(+*`x9zmuE%(ehmt>j*- zw&}}zgCp*e1Ak4&I$qj#n2ic=MGP`6!?;W8ZayM!a|aXXMxM~O6wTC~)SrY<67zW7 zRit=zhK|N|_Mts53_F?Ip3l+E<+a&XRO9t;PZUqx1lIMhWA_3M52K7shHnjcKe*~1uS*+(k((5XPb2VM(wT*I+jecip}o%DTzA2QZC zhJ8b2e{lZ{UfD8vI!*7436PBlLz#;?;4r75orsdH9Ch;+DLb_IDkwyw!q>sR2kkQG zrHvdBTX*|2i`3W+0yYuB1~*p?N-{A4XdJ_!Xp+)!5oQlf$pIMRbV^BZ-0*?%)$YEG z9Unmo|5NGc&WCrfk({Bjsl1_rf$s8!e+nuI%tTqaW>4cMHmhpI)%Y$Q-Z8sY2DiKF zlTmXU?`ZEGcnwS&Ed4&>*xjc_)j)-O^?(7Xqyspj&Tv;-NVg@bVnZS=3?hCHM@j)~ zr9HLAd@Rc^-C(4BxZ^E8@l`|Gr@Bq=H0d)DFEHHU#OMMWg-WgOuqM@!HlAn>>b&p0*G+=M z4f1>s>IJJ2Wqe9Jl!0e2#We`X7{HbfbNKrvrEtGGJQ+>uziq_WFyY7U}pIp5IiLhnl& zhvIP;@)EVLvP(tBkk%)AX;-6{@$>qhstd9Zu%aE`fH4R5-?fYXgTu#v0@41_F8;GK zOjiD=~KVRg|Kx*B!6j22Q`g&^_xoGgUO=|! zO@K!*ItqQ2Z#};TgcBmIL^|62j-afdZ+SmRfq{Fx0XF0SRMB9ukUc?HaA^Zf0b6i} z7>N8J_&!O2p+WG2AUM+CGk5|Lpxrj^R_-nwA#>N!faKn) zR$z7&dT2@Nv}rQG^3_W8sLMAZQhEoKKXxiK$Y{ODbz{%y7u(Jevl{LC&#*jd{# zql6#s;V8vYEN{wGIkx!x;3d3;EvOkCWjJW-WsQlA|=KQBr>E7o@ zH+aa94-U}ai_d`Ph4oJurA}XAG9?Fj-`o^G?J~O%01PUfu-a9^9@hoH$HINSl*pO5 zUkRX1L#*>yz9A)BBn7;LzXBak5XQqCdBhRL`5BcOV)WOzx%pLKt4Ce4ReVGr7{}V% z8o~oH&1#J={c?}|GOgjP(FW+V_$hbrsuO;LR~L}@zLN^ARElO|9nuAxkns~Mk$&qO zrGZl)(hUN=ta}(g69}Ty(s7BJ0a>?8P1jyIy;;D8f&-%kr)9xoWNiN4Z(3xUREPk9cf877OxwRYpH3*y7-elBV2z%D7uwh2M+*p zVjDoKp2(0jSmzr2SE4L;-bBMahJ36qXR#k~ihVWe!0sAC+4_2l=S0u+W8;lv?P9!T z<;f#{?fvroYgRRU*mjTljZ*dht=HB6AolWKX-8I3)coJ5)PKjLzGXyJ5mk{sMG~N) z<(Uc)kR&OU@%r|fC7L3%m{Kx9GZ;@# zX(%(&6$OHRJNd#l@_o!C-={~-8hha%N}}tIzi5oGGW1mU(R8W!TV%<@^{Im}Y#=8c zCIvudAr=Y7(eQU5ld+ZSk;YJ#4M2c&+Vl70I8lJ_Hw1LI6~&di@Y7JN#o~Z4vuTF| zg+V&##H|Lpq1u8kkc#!<2?jtzF(3qm7{M)y0pI7uN$z{VnL~r>A4tHt!a*GvZb2U) zYQY?EcA*bxZ-F0p4h6ozw+6gG6!O1Q9r^U90gI7YT6K`@^BF4cMzK_uca)DrMGYQq z8E9}&cSo1!W$<}54+nbSMd`3T>xLVG8ydxn8;ZLIIJYuY&S{byOPz;QYfu?(aIjW`IH#?b7!s>FP4m^}7zk(B zgqbs*7o}wwxeP2Y7S%j;ialfOfi~9C)4ukHqo?f6muP~tsU{J;Qpx<9Ccfh`GTLA` zZGwPQL0dnBz>KOa9IQuB%ZsXL!bznRyR-!hQ z#xyQab?;u;=0hvAwo=maSY&FLHhs}zgHdn9MEhnF-FQ&O3SP2!@Kz+ENwUB5lx(~=?0 znz@vPM7!Yt(aTHOzHD?5<#-{-+0oP5s`#p@3DY8!q7p7o58hKv~&>-5vmN|iD zLCw@2Ll&cFoEkgv_RvhkGd&tZDM9K+ZpB+pUt-V#-e}LaW9hDxD!g|Vlw_~c=Vmz~ z##|TKRea!?^-F=<*0ScwRKh-OV_0JO%vAXE$b zj$7b55OAEO!)&xU#tw1cCj*z$6 zD8bKN-NsHRW1-mtx|w_&`3Bim%h?_v++q+dHU4F{OT#jRl)1X7k)OV6y@0}c)_|VI z@SgAeWKV5LgJG2R8_J=|z$u zNoClH58dr;HgG2qU(>8}S3i}aeL#5A^B3`;<$lPIthW#)2k7I@WTmg$nwWl@6@Gj^ z9FqEBtq`=);?w5i?H30TL(~#=rPNXB3k%RkfZvRR?}bF+*|-}Bh=98q2ic2;1l^;B z*fEBX*^J@|{vIj{pu!!|YI5u8wG-##*dELPI!e$&M(&y%^zHof1)Gv7HKro4Ddw)&S?K}y%ZYaq>6Cy0LX(VfQi2Vr8vT$-+sZkDcyZxWU2SqeXh)aREo{nT5hOURLN zE`i|4s61oU3!f}C=fKt?jC{k>)#uG3YS+63sn#WIq57RLB9pekZV@F(Ks1~?g5_L< zCz5CpW?u3zw7ZG8WZbp;k<$sL!TGIR&p;u6v{9N1oOO%`(Z(PyJjkfoSHjG@fK!MH zPZF$6ML$ao{n4OBS)~|hn?qFPDB8H_0oBaX9Yn~(d<=zqMU}{s8Rja`OAv&t>hTr4 z0V$fbAywEcIEbb{ig(-}z6K0#AjqbG>YPc*c@Z!0YDR3TIIpd9ubY3YieN999#Ue5RbGgzb@%#HrfAldv@oI?A`re9Hy)H-6|YjTK>fw}l-z!wT9A;LuCOW;ml zz_A!#p}AfM^bPe5qV0NVKo?&!{USSb?Ldbhr02@I^-A4!<^FiPd~Ut{abw60!yVme zZnQ{;%q4%P)XxYqi`*sm{Zgu{*ej0kF;Xg`D;J2*3LqE1DHAgk369vLV3Mjti;Dx; zTBr+R7r!x2GUXoxqOx!U7aSynrH?NfI2--!ZZIb|8;l z?2lOw&F5d9S|Lr~9Ef?!^JdFtM@>22PG;d^6Y#8ptc9Jv<@iAb^fEp%vJFbgu-1!3 zjE(dXh-I^B3I!7LOo=rCC;!R#5sJa(a{7M4YyXz<^Y>lD|8X4rEARhH{?Kr9yTPhF zg_ge`mZHhhXayB_D2;4>sOSKw1fCZs#8@rF$~AMH9O4TS(O(GB*N=C?&6IdU$^C4y z-F0Tm^Co-z_5R_~^#{I&@|KJJ>TpD4Nu(!YTR=x}B~Cvx6bvk}lsj4BNq#^^>}6UD z-R&WY%}bl1K5`?^3f-WbMRO-~WA#iv8v+-+`BZDPig}m*YcQ0Lp3(qoqmHhbK7;mF zx0y2ow&OhNy#LX~S(>SPm0Obe_^#XvyvRw&5ZTBm=JgjPeURbBoY`r(M6&yY+|JY! zkzjYBLOb)>wZwkBSq0+ z&bzrQq(i!0x!UE)KXRW;;I(Pzx30%u>oxzG3--6V9u_Xv)Zd=Ue=#2&|GVR-+P3W` z3!JZx|0k@_+rm%shvggnK^(2p^(JN)xK2t)XmGOdlytcwiG`Gp-CHtA6mkV~|KItb zzP+7OPEdM-x~+HUmJv26masN;7_?86g0$vZn}S%RnRQvIR?({u;^4 z#e)*g1fDe)7O>uDhsBO>px2YW^bEJoc)NG#^o$w2$%C}IZ#;7s1BiH?5Fcj4Y~$Ad zjHWQz-*NDMB7%{iVTSMW+@6%}YIP+>3I+gq;U(y30$FgV33LNDXk|pHHz#}9Ia=J& zjY`>m#og-(qQWSM#_xas4-Wfn97J{V&D(y)mZ$jv%QOcH2 zkGH4)to?5#yEeW@&WJhGv>RyTc2JKpboeK0>Dp42n|#`b{*bR8FMpizlqKeer{LP_98wz}rTflJ71^t%Ql@E^xHwNK7L#b#+u7Oc{LhXct=_&=c}t>6JaM%N zwzKvUi_DckW|`suG%!1ocBOR<32gjxls9d^4HLQ&dHaTl05;+bWBZDtkUMybK^Q19 z!$=Mxd=+`PT50qRUWPUTiW5n~JgKu-e;NcoIInfTx!O7^D6Z^X-?Sj`o}I|>wcYqD zhzh2GLEl3oV&&T|S?Xux?1?Oqz82Fb`D!=bt4T%LQ5mVM*Bl%>!eNls&G4iP?_ zsD12Cr_ejg-eNF~)xqvE6>!VRnJ9C+@5zpTtmCYl1pvOqn0{VigG=YVE_gxXo}mc` zk)&5&({aG2!m8Rc;Vgh`x!}UbE|?@5bQb?!gjndL6I1<(4y91?lpJ3w_=9mxxf;AF zHLejhIp6C)}E*@vp>DFP&e`Z1C!gdY*d ze-p)9Fhd0Svee&7iY$E>W_69_>Q>?KyT!Jamba*>1lcmd2 z(UP8tnDp~1`x7FyQ08Uafzk3okmmKl(20zNuz{3$jY2}J#cs+UrqSDA`GYG-gGsg7 zr+eNnSY3`|FMQ@}E4jp>+3eKYt!-9-8gJdTVENqfTe*N(4M9w&#uDLZhxmfU5s3{2 z2k6?u?Cd;4@GVI?xv*{heEWAH$vb6crZ8Xb>@5n?UhkNr5-S-QWZ)hV@ofWjiO&!9 zJ5aa&>+XRy(?9<#VW7c)(LK^u>;rj**+Q7I--o2pa4V9-Fm1bFIHKd6Ff^S9gwT}< zDq9R>N(F0YI=vH5EkEOMXH*Z8A>tRIgYCDcOp7L_CdD>CsnVUgGnRgo@Elnp4JE-w z_Thu2-qK+XcDb2GDA&Lf665xik|VkUM{wfk(@*InL+qXhrqL5=!fLTMSjUFT1Ibe1 zOr>z6x&Pu6Xf()j*MTi5?*7Q!U_=O9Z#K{IDZ(^klY7eBya1wcfVgQwh+_CX_mgM` z161mU87(&~d$nOiXs(UwG2!bUB;%}UiJCv(9jF8H-yJL@|DmYG3jD<>HrH?c!1Z|EsC=PGRq%{lybBH!) zhlt8lB(#;XXg<#~LJZ?-r!h#1rt||OM@(0NU$n^fsHR?z=$8n7W?J2(3O;9%9_{q7 z1B-rAl+%oq8Wb$Tu*8alk~L*+8p9-Vr5c)pgB1B$43Vy^Lk|b5Y07ycVS*HiZm%F9 zCn4sQs_AWpxu+N(bJOmIQSE8IZ&&=s7d*3+AR8FQx-DygsV2~DQPCQzJEL`g+PUhS z*9674o-p8Tu)#=C^wagY7Y~;z)of<^-E#P(id#NP5gwZX@>KoBdzE?)lgY#5DkeTA z8uJaxAve45B(S z@wcSssx>npZM@!Kj~lObidE=V%k=eAM7ao!ZnwQ?{ctwWW|uALNVLQ7R@^!(?Ja(# zTovAX$&+3@@i_lu6a~a6k>Ew^303=)D)}*WPPt3{Pb#U-rc z!zLb4ONnPUmAe_-`8Lx%RwpjOO@aW{ETCG?x{E(QHMS^6Bkw$N@S9E!Dm$4XBW<^Z zbsf!XI$v<_H%u z3}zH`hH-2hJJ#;4YO!l>;FO|3KU^UNWl+>Dc&D^RB<+%*Tq!%|&ZDQHjG^E;aek>2}U>u#25a|*> zm-M>FI;oIgcmn3Sl0PBv%qm>b0{7Y{@xo&vgWG@hAV=oyktpq+ZJqswsW;nd?d3DI z#&zYhc6D%HjgO9Z*GqX>xEnN*ow^6g6a=Fx_(a+sGvqy4rxqrlsi&Oqs)vMEjX#2l zKE&}n1~9o}Z}jSqFj=E-jzFL(+{`6RLpTdi^YbuGLVmO%`IH2Wtsl1N@6rC_8m>IIwc@`f_+8`m01-_*Y*Tu3A09XNj} zp6vs!8#`%eIki8(+BBqUN9Bdh9>JbuqY2g$3JcA3lDqHuIiI5k%&P~;`zzmwcDY$4XDYOV^<^}&$wb5;{pW{;9SQ88 zhq?IBJg9COA+0(swu=FJ)Hm(04!B8C0E^%%WChYAcYGKdHhE&BW=zICXF}AT4Rv-0Qk%{6xyUl-ElAiERf}>4dP>w92<4oV>I~F z0vb+TQ7YJ>^`fKj_@GZ0X9x%)i7_@!mvr@tqOcgwkI{)h95IHGF~BZoXniW!;#Q0C z3E_xqRfov*Okt@`SxM`P1UVw5prNf5^7AAxjor%AqS1&Vd9z_ppcw_?jjK{i=49Sh zUEJw)1>IORdv;Xwm~;msYzClJh@?RE{yLO#5*ptAKN;!uh6|h}Ttf?*TKYEGl$ZY( zY3~$Yd6#VsSH-q%Cl%YaZQHi9W1AJ*wr!_kn-y0@Z=R>S&pG|Q-OuUY`(5mt|J`0| z%r)m)bIdW0l;vXU_wQLDF$^{sR@N66nU_B2@;ypoDtJ0NTc}zDO<5uL<))N&T z<-A^$>ZGBo{n{TnNm1J#R2LU_rIO_f6R)z{e|C+{s7^xHHbK8IiFh zjqT-O@u*@+$16(xi1zgER zU0!jHpK!A>Uy+~Rjgd}gs3J>%(btZM!=!0}514XG%!K96L_LxbV~u}DBZ8GGK^1{L zFKMbK(vq(Ya~9R+q=6jLy1Ym=mAE7WCC1#hkH^}|Wc*!;C$)TPNf5Mx7z<0^2)S@# zTXelaZ$B9UPOLg_P0pDyCL>By92=QX=ZxZ{q_CRT=VGXh`0W{JYfAra^m0fyM%y={ z#CjS!VS_jo*MnCJ+f`_Q_p#Z2OQ3u9xF_0h8^ZJ#PK&}pMRzok-UGeqw&570xrC7L?KmE_IZocU&5rfk}mf5N?j7NKyKaObOR<6wO>s z?`d<+(AnVXp*{&O)gM2~e^C8^Gclls-)anyh;2`D5o@yX>EpnTP3aq0%3w@zolc!g z3O~?9Nw_k5<*Ef2FunRhRCvumhi;D$8@6l5>;2I?%lv8C5!|HVedu`bv)*ZCxJ8{? zhcIOo>RSPSeF?llPOM}2x504PV?;7%jH0ZaTwk7`z5(d~RcL*N#E}ypzK8FUW=Ktw z1t(8o?~xSBXIYzzth-|Ic=MY5?I*%?A^?Nz(&jC3qcjBGUD60b;nx`dXS2~HWM}pK2 z&Ts^RvN7hiFhKOafZTtD9}9)K6r&g#Q4eka@rw!Z%L(}f8G8x3xUa;#N94ML6gy`E zIEUin_|7nqBn=TxFw2)s)(*chl6$ z5AUj}l~wPqDK?0w3XI<)JB~1Yw0Nnl#EQIPl9uh5X-9;p@sc0W;RhnG$N@J$2f)20 zPFB*s*SM4WL{nVt*+kV3Uo$X2VP@E!-nu!*d~cleDU4nbQ=KZ5Ys{KgJa%C?PtzXS zZjc>TXX4Xmz>_ET^KKsYN+R*DiRnkh5=e*2#gXV5Y-RK%k(AXL0$Z{Wk9F1+DLPv$ z6l2vMvR=~g9mC`B#vJlJg*B3mQ$W%eqQY?HpJudmnvoKyXR>p&_dSaJg{}+SbBpCZ zDtBo&`FhPAIU`(1KSIi4cmJCIk)aFf|3cln)gQ$8JCvkK|kB9m_v8QB(ZMp&V zofLdfF_b1EZQw4AE+HV-4(srYJ36bh$RK|0%*65)`V ztOmU-1Z1ea5$`JcA7LX?-rZjM`nemJoUULK*?Eq~#rBrbQ!-2qvhu52UWjt&w`H_s zsy}EQnMS>J>E}HHvzTusO1Q31)oz4GJpzMM#_jO^K6NP>_0;n$h*R0p*ESk)nj6z4 z)FlLuJxWAQ%FYZBMa%nLQn{LGRL@pXpaq4t7#&qt5zAb2Ns6|{MVob}Gqfm2QmZcJ zD4A_bDi4eecnqrLuvNLk1#;XNXQbII2XA&&qSN>uecDfEesuRcoxt%La1HCCA({Ex z?|eajXpz77VeS%D>umzp+d;6LJanAfZmQ5s7A$VfLO)m z2q~QTi}~Ef^x8{IVk59f<&(ouIBNt_Dn&edZS3-QsX)u2N9O>E9?JOlp~C!q{D{K3 z6U;S{F7Z#rm*w*ev0yg@muGLH>o9Y#5ZO&Mb2W#9a*9QkRHZprMvd_k@?f~TeP9p5 zMEJ|Xyi7X560(haQ|?@}$yw4$d1|CZ08EonX7vtN`*8G6c)7Z|>&R$Y4=$W!7v86B zuF{9L4~^((Pp$-6ri2P-|I4D*8X`?DQ7fP>t@(8z_;1AK`4oZ70Sp{OWS?>YfB&eZ&qGExz5OgX9@K9BEkyfOtxRpreg4&;eNR=TpMk> zfh^dxLh}gZOHSgu%cpV2PUJ z?i=s%lG2MwaOcC)EVP6vVUd}{mC!)lXX!nMV$iZ~^j$`P6M){6zH7^N0a_<_z+Yk6 zcPjR_zjk{C-$>4$cs)L-0?F+(FzvX4y|_~QlWzmtazm4CG>DBnfBbQH>02Ze7=KpC ziGNuk)BfKTvc0v-r&plUHwjmdf4E%+d$6q$G za5QqUHgNnVVCeMO)HiY#`uhiA6MGX|V-s5=kAF1#|9+S&DEuL;{{Gm>&7#CK6&UC# z3A>g<9mwd3#~qa3I8t4-JB%d>({f7HjiNX(v>&9?&d4Uv2q4|yG9YjFeo^#r5ze}n z!+4SX3mF^Qf{Qanf?^MvMb$JnDhp9t9d!~;5frQi85TvTts?r2lvrWGM+x<8`m4(F0B-gP5jy(g~t*Qf0_D_d2kTvPn*R05IcuBkF z@uPYNS<$@1Zf+KHQ8Yp$5-rmB@c~j&axFcA8kuKsLxL}mQkQRHtxrh|Nu#L{(994$ z0o<&0k|{3-HZv{)S>Ua1dPx_Zts=f}ezUl@s1a}x*MH!%+x5td?X$B&`Pp~-_nRg4 z@A3J6ZI-m1+5fs<%Ik{A0th^bAgnah2)2Rf)j(}uprLeu@)7uFzd)s+Y4S?53aMMJ z%Gj_{-od^H_!%UFB~jt~+!WAw36{zuly=@rKV@C<@@y{oeZ2jK)rYbR3imBg+^bni@ArDGZ88hWu@L<2mm2trXeogB{gN~ z6pi`{W9^^Egd>4>1GGYGYj%%2!*V%^Gk}ne%T{nl!}b_rix$zo+bXE{4Fx&oGJFOv zz);O!JKm`>aJEHm#^lODP;NPNYuvNg=y?N1OEGdOEM<{fXyxaR?*i^uJvG1 z1^RtgFikT30l*Q2oEd*JLVbF`voN1%D(gE1vula!by9eTc52~M;JuCp$|UwsT{5wY zeJrznkA{&SS(bI|I3UHD9(;=B5!o?8M19d%8%>0`moth&ZlVj|@0WlEEEiftPQ4mP zw%U1&6G=UB7($NJhtV7od7i~2y1~|2N+x|TSxCw-GjaDA8zVAjj*1MIi8q44V*awx zcv@~6tcDq?R5Z^GKvSG<`Yup`wM;27!`rfu(yEOWU%iO}XtrdCte%KWDsE8qfypcP zh(3OF1DQLow|pZJ+I}#ardK@wsSu9J)d+q}gf>$(QFeN+q*r`tZP->e@HUr77hy1bwo!LEoo~u(+uOUl3%Iq{03Zu^ zg8_#b+1zrcr0T1(&zLc!mwm#d>zFaZXGU*}gWfAHZ@Uk89gu0vJ=opbznOGQBcz!n=lE-vs635J(g25=`K&4v7sR2=Ox(*y~?7>eY*GbUwQh}Y9iT-nn6OdbgJ z1-9Q5_R=wgiAdq62hyG1rbDhrW@@&-aE}Br+IpFLwjS^Lf`TqqjOM9|;4M+5Cv&pe zFNL#^FQ5Myqy=;>Pxt4$E5kYe}cS9ey!j!@lr!6j6yj2D) z=m5N}j>8NZSe|>yH)31id?KiDuQ)#@mS0TV4Jz+vq~k=4!QV669%W^f^P{f7@9G`3 zge5DSWAheuDMG3tNd{bJG>yLDpQdL9A^aYgGcfyc$xsQKlrnH(O>;?zFBUxa-jiHG zoTxzvpEN)v$p$Y(n`EI!PPr1;8LdoOPFspNBlOX@bJMMdA`TO^vGZ0?Mylqd@ zQE)qqjHf=uj~5E#tod||M>U&SOmgNr@o(F~yGvAYs4c_LM5;L_BlaV6;mkx>r)r~4 z*_C8(SE#%N&lWjuiN+RJHb^|-@sX2a#vC0uAeE_p7Alqtr5-?!wt(F&ysFU3s*|=7%yC^W=A5?GhGa z3{OBm#CA@-rB#e>Pd6&hIRRK4$vJO5BEj*4zpdl;pdQC7m*I=!9x$xD4~O4MHU>k5 zKyiW`r-yM0)2r*cPtN-%aymW@-p+WDj26%i$sZk^Ps9ICI-y4 zD;rX8+dy;;U^B!kzuPTdxh90O}cLdG2UTv> zY@M!S>S_-<&3&KE@}#(x9)4fd&Z6PS`4Y5=)*hdB1^vBMwUHO?61!KP`CLTvtB`sx z>}}F$M)7)9KRWyO4vz+ss_G{+ut~=pL&?xWKqc zd%{s->7TE@2pL)9U(FM8w?8s?ht286a8R+rgSYrmTTb5~((JXqqE73|rINYCTz#E< z{nOnO&ko6y;WLdS{v{Vm_&)&YA10swDMXvAI@T|VBK+4>%h2i$n+>DjCBHL zgpIthTuaW=Oqy4ri$5fpzY>M>_2QdwD@h@*Lxo>`9&VY}T*s3+_;uA@*Qv^;B1BXx+6F}@vyuC^;M!3blapzbX-$LQI86w9lNE1N6kW@hQ;-~+DH zKHk{JAHMv34mtYYQXi|GwY-{ln+H&nG?WA5`rGo6mHMF!HfZ*2WtB zC{R({ycSxz@}pe@vWP+u212k(fAGmG^`YIRL(P^g-j^CwUk7KImTk9tOvM+L+FsR+BHILIvEI)Bzm1H!4%1EB*HYj zjE@GrI}jwQ5zV4#V652Q`DIkO?)xH*mry0&5uL&fGI%f@yyauq;zNBJ>Qy};)AqM$ zYLI(r2#~stn??L6n z%sxCabH^XeJ0#H>3zPy`R=^hE%fIdR|E#f{o_(OM=)3$SW;1PE3~}IqC)> zi6O2Y~fd7T!_YShw<0q?v6lah_71R%)tpRg<_%WC%WDEr zu8~)`m~HLK*rrjV+$!#soBFa)O^^H70o!mXYYk;NlaF(?W*TI*I&8W{cQ=Voo8BUm zC@vq8E^Nm%(E9tLM&$Pv$H2p@Dc`vawf9gh%rzE^P0l>iAbJ$6Zca;8ghf)P$mV>- zhD2lu%!?yn=@-lFebP_e5?eM*Gs0!qUUTd@NdiiKN3e!qHSrEPXe$0= zVMl18v9VZ;SAX+cCLk*u*1D2#9~m6?-Ujd3yb-Xg{}tc!#1WQGj}@yvL( zyZZjxNoDS(A-iAjdVc-1IlKG@RbrkAWb`A_;d?I$89i`vvk?%-d`cYA47Tr-+TUE( zJq0w|UOtoE#9vvgsmU$@mae<+1hflzS1 zd;J#h8m~d`Sakx(77`K(canHwNDZX61bGq$O(Y`{234ee5(Zr)WD*5}@bCn7QKUqY z-Q>Z#gfyCP%7iqkaEktrkT0mOU~UW>1v@S7 zs(lmgqJ7ltr8{o!l6@7@PgoN#Jng8R0mmq>Ut=lUkz1&ri65!lq1`ClvEeD6kvUOc zG5J()&|ii7xLVcv^gJGQ$lkGMx<@vj)O%k}6mQ&$U%+SH6UpC0xKLlQ`BZMc`WEjH zb64&dahL5NSbXEhf(Up)Wq^vM>hIGbchhN=LG*CfMEvy}Pjp0|L_aAKOC)IloevXB z-5;te^6XGSbYu`qH16=}0&{|bAOciP#DY~^(@>h1%^Q=@#sY*ac~rfX-&}Tx$g-yF zD>{HiYfK}9U(K}V*%%HWe}rwp@+|Bep4}@)j9eIm$p{`9}EOjb-PL_gG&qP{^vej4qmM13j% zbKWRSGcWqeEz;=(IAA$d?^sh;CmydSmS0OyD+Nd{b`zE&XBfogA+ah}m>EEV^ zTP5Pj#CgEd8YI=Q@)?`{W^F>Ac+JyTYh=eR@eX>>DZmo$<0S~SrFS5HsVO$itx!FO zWF5Uo=$oEC@!Lj(s0vfxTKi#6$Kzz~=;Xl&rhsakzn0dVhHEuI)67lmf#$1=ry!(7 zoI+|Dt2#Q)$}?D}y0KDgluwY@3o8`0P%Jma+)arMTfQV7?5$_*V{vN56gEzE6$({{ zK&le#YG#Vgwp^;v6uykLGk=CrWs9Y6aTKj)mbY|c(W}@=n!bYL8Z+79SlT8)CcBVF zWqT5BIa(UdI-CL(&nGXNE%4RZx%jPzVEm#hehHJ+)@Mxo+`ZYQ)$t%f;`?k^Ta0OP z`(%Z&*8Q74@YRk_n+!H#-( znf!)d`pGYO6|Z{<9%AG{-rYhbsQQFV7b+8E2DXJSB4?Kq5VL`SLE_|^`VOss2!UK7 z-H&{v9X=qJ6Fj^iaR%~`We?O zc^sn!8`6jtRPAlaKDlY%N`t#+D*+R?5r*bdw<7%x3q=kAd7zLs-F9$pDR{ZFg6tzgAt487@wOgtN{u z3EM6f7);=igm5(#M;EhNh^iP?py}rQv~4sm?IP3etgSbQcgOI^CRAOqVohjct&?UpblK0 zRAyZU``v+--p&{uD>{T@X=?x;rE?`K^>j(7Y z*sWSHvGx8(kia}iIta52K*amf;t^VUeb@RS*HO!7tpG`eED9e*^3tUrUvRl-6b{(4CZsp zd?C+M-mFNU3$b>0^*qV6w4n@bboMs{7x0!8A-DC3 zZT~W#NXgoRn`?}~8GMHts zN|18oMpb}7P3c}u>EZOWXqOu!9<+U$`d?rfWg{FAd)(H-Nt)<;+S*Zfb-1vtI9S!9 z#MMH`wt+FS)`VuZL%R9i7!2HzXq^D|EdikG`G{*H?6xB#ZVNAabnUnkFFX!|>~p;O zwgEMC=ild#xz_NkVR+1(=58Vf$#3chE@XA_oqOw`W7}U#zU|PNTqnnO>1?tOT(x%E zo;|;M*{3ut%xPSoFbADkTQdSjJ@LY~1+(RbHRgn5Dgd<1dpc^7TIR3p3UIe&xw?bc zuL^O=C63kXXW{Z2;)Pg&c`rnCYq1Xt5vZH}H-roh?!2-qrETbUwqnt}b_p|94}@Ay zKMknQ>#|$Yw2JS@z<@aC@OqVbvne=IOiCEqvdPNiN8D?60Xw}wWJ&YWlW!X|cjl1DHl94~Wa&yn zJ}M}_rhXELmGL7f@9sZokC)5`$XhZNF7U(g+t3z#L#^M5PQKC%1fl4?P{iQnyRXXC zIrtmyA~x|#+gNNr-^r?8&(ueP_+#51$Z0Kp3 z7R4~BJV7bB*m?IJKK;D1q=|IF@f`autFxp>>XXuv00FY0Y+IN+Aaz-ad6#R#mlTiQsEUy?iYrQ+*@8Ot$l1}1EZV;Xxj9(U zWo1`X0iM4G`fLxd_vAQHIf8mx19u`HxkS?I=Rs!r48`*3c_nqaCVEX?VK^ZFC= zy#`aVNU2PLaJ(eQmcqJP(LkSdV746H{g!oLhYXidyVQZwuniMTX4~li4c=W!7_}&R zw<-fY%(H$0VUBp~29nopT>BJ$fW&c-M=l=V-a!kLY7nSC?UotwYNG1iUO;LbJ(3`~ z&%z@>5zYOeyg^ZgXI!^Ql^s?1Qt1w(q&vIYeT?@mIbj;VYsuH5vW-rARU=kqECzCW z1s`KRk;JzJ?lb2u$#)S)T>&|8@Uy501gvcMl;G#v0MfkQqz~V#ZfnxxxZg`63{%M{ zgU|y+`6W5+w=l@;M5qET@?Mm2>duY)|hUTtNH$CYOPlO_V@g1zw zQu#qr>G@0Ka?nSjso6<$yfLD#g`r>DaHB$}b23C5{erRfWn%0F5Mp^P<{P=D-vvq} zjAXl3H8Fk+gqVr-I^9>ICL{;=k>rg}RQ1re!`pPwH-?6zs~Y4+w)hQ4IbI5tJY~~n zo$h6c6vPoP3>kyrcmu~h1o&X4mSIr=2c;ElOzv|>9JJJm#=fNlmr2q-9_Vnmv#ONi z3(DcUXA6Gn1r@r$;lD%w@d#(a$6Dd?`Hp%2m%0p^|IZOG`zd1bw=+P|#L3Ru)x=oC z#974M$i)5+qrkrhzkHqS06&aRu?-+F`TDggbgu6EF3<5bk?R4ty6_(Q#DuY6q zp~^A>ivmar$EtEv5$kDgrr zuj~Ey1ywtD`oka2X5HDMK1t1^ktmFy&_dEZZ0WZCk#LS=2u)M#rf$=^U$9-vl`Z}Y z5LMV7@B=oJul{Rb(7tr`oS?Dub1>8USKoU%L_fF0#v+-#-HBDNKeY{?vojNWK3?AB zzHr@SM>R&l8)wDGr#h$(b6_5uXvaAy43lEwk3FjolQYsyv=Z$rVXB#UFZ&mr{44;g zc~OWA!{_Zh5(9SqwL5|*p!-Pdj}E$e9vXP*YuQO8UP7P~c>ilI3^%Y7g&!9VY95!L z=MnPO@(ZIY)I6=Y-504@!qI>)s`_qUsO$6sB3eK&Q4U%IkuenYAsmseso6t(K{0WZ z=wn)ekQqQz2$01o*lA^La8!5n`2!*qKsD;dcV$5FiOP4d0I1#p1yJ3CgrIr?YBwxf zO7^(KP~Ag_kWGEdrNPDeRu_dCO2n8;(qg|yWY01>+~~Y!n_!t_9y1uZ&au+P7nf|7 znym3I_5w^wh|hw{vuBA#>G0=hv|^*Q#;gG^#w1r&VE0+O7%7-CiWciYlFe7@=~;N; zN4JpFWlD^l{)Gh{pBMSy6MYMrpSX8J*mrMlJ zPhqDW3)jbu-D!ch*F7&Fo7=5d#LF_US(MPaws9-bkUxca>zB3VxzX$-Hs`F30)Ir^ zpCGrVFUrtvGffrR^@(itJHyb)ItOH_m_qle=%wl3sDpAV??|wtR+g(bbYATKe7)f9 zo_~0OS+Iw%g>6rVf}|BW?x1B#W?*Kk&al*MX^E5~p^3yS&KZq~J$*!Up%MCdx#U{m zH#@$Tv1JBv`AB7;Q9+jItihM9!UShi1jD4!DbU~Ec=dQf$&%@S-=*BId2P;{Ml#AR z;qFkgcUEh8Ud#n-2`M#(OOa1X`S|r}qDIAn&1VAY3eU&f{3G~`_nyGoMcerA?|$#ji9%Ae(X!DPEf7AI^@4uWEXN`!EgWjnns? z7v8_8Nzlr@7@rg9@;O#HBj0|-&DMR%Xhg~&)-i%RFPaKz3FeWTul#|AlrLA*QiQT$ z?JmWB>)ec_nyw^z7IyWRGj|_OL@yX=$MCMLwlHnIQ|{{yd8_C$f!AQlD3vZhqHzKi zsxo;}ZQnl4Fdgx3UtE)*Ghqc3s8(sp)iu~OPD^~eD6M)eXMkM76LMEP7#`1rqQL^=AB!F@JDFyV-D&JbLMAfl}%$DW^Y#8HhYxov`_^bLDX z=rV~7uVqglwh6`0RRNEDf23E)H+Xo!=i|HXU)r9r{RhYWe<#v^YH)?f%Se6F=zLa} zZ8ue4@=z;x+NumM#)L%T0tptolsikTw23Vg>sLeGskn?+0A;3Jzz(6EANZBkRbRzBo)ZN_eY(RO;%Kz8AzMmG1)e;k^bx9Ql)F){PdW&UhEmmO;H4*T;(a_{!(NY@6B z4Bm@fpx>_=&X!NnOp*FaqJ7ROs9+X*{36|3udHT@#*l_Kw6bK!gnLp?l?jU$6JqdMHd@ z@pnt@`Inq-r_*!uATA|b$_tmdIYVu6EEtcLxzl4M8ciJGxR`kZ{sU}T?q6kqK6`O=e@Q&~Pb$BE2HQU!2g!f$cf%FRNCatv zFjG*V6^amO3l|cEiHuCoatdJ%Pbg*JNu|Z~pc^?ZDx4?x9?HJKa}A6Jk2DLkAXMT#kBLPKrdj|+-q3*o3F0MP~2 zf1*lIASM8!i2~!Jz`UPA@TSnX(;T4y19{6oM6yR!Y%e#&Y)FM?C_e;qRpA~S9H9YI znl_??N(sZ{JcL}KCAvCmGeCJ(bE~xhbA;(ByHwO$|KQxqLu}8}o|X^2LVY$IV_@sJ zNp*c%eD2`0PMc(%0PR`aU-h&8P^&tTE^gt3RF)SWXoB*$XM1OA#jP=~hE=ywYDCKZ zxye;{>F?pObOxY$1Q(VOWNg&mDTHV>A@2zB(s61;zBz~GYT zc+-M;EZj7Bv+0}Hy(aUF{AiX2gsI>%WsG~i<&syF6ysz!6-XjvO9Iq^y9~nEICEec zQlpABE)%-5o`7dcEwq4h(AVF*R}Q$yd(EnkJW?DkBzq8ryqXwF0w8Q7$mGQfX}?Iq46rNIjr;Rz8oizLGDRs*@g<5DFJN%+zkJnf zprMS$%L^jJoEH>3F@6p+>C-WL2BpNrTj&RukDXl-W+QB_k?6^@NSGDn%e%z5#U{kf zzbrwMmDGF3wVG$6crh!ABGxQp3dC>-QeH$r!YDRL>%}4TkO-*~8nIfNzBYGb+yfmC z|M(*|e9D3>8a`vA@h|(-e?bMY{!>KrzbIM%tf~38OHs12l-&Y9!aJ+W#Ug`Ga5FQC zpcWK6{2tmkHDzqMKMD$vB6VT^m_(Mdl%?1snc^>8?YLGaS|pSZ;Jv{BrXFyN4n$Hy zAgYOm4yJAIhPx`)9^a2=$X+5<6k}8jC^S?WN_ACxk-jB^V1}YV18otA5f#nh0*wAb zyW)a4`rS-qh0!nzb$&r1EG8_*?zS){EII?#0h1G~>fIy&HhURis0VqIQ#^fe6}hbnrrraCcY0@G5Gb+CS(X zYz*cRvaY?6@2WPDV^1j$W50+L{jganH$zaxp%Q7(IBHX|xJIdU1<W-0lS^!;^uv0s&@yx=RGXi*j89aus6fywX_^_8F+Ch6n8=X@Qg^({r zvPbLyp#p46gX)m@?yJeS2QJ~q-=*kboFNT5=8>+X3+~^Nx5S*C8W#H)0C0^6j*8l6 z`oX)X&VH=pH<*reS-%3+xi|VSC|ltl4y{Ii-fU&!Z~rhT17U%))GQVw6tEM7(%1+N z;8O3$;(>>ehzPa6BL4%z@ZIh?TAvV(`pe_}Ux>W@gU$302>%cL*S`T*CRzZlj~^ps zyN05je-FXZ;G)W!q>yMA#E28uZ(&lLE2A|d1eiU^T&;6Ts@vP+`pu*JOC>@G1^@#w z(4&)l^2i}!LNh{8lX$w@*lIcWwD>+t;?RxNX+o7CYWhl-s_Re?d06yCSoM8Jaaz43 zxRj7w$7yI9iL7UCpLAs$8LgUGaI3K0vhP7?Bcj7VizQ(t8T}*HM-V)iHJi@BpKjJU zESE6YcVh14Pxh~Kyh3@^XGy#G`TO@%S=|4==>7Xr{I{~_zl!G&MJ*|80Sumk^J+%8;}V<#swn{^Z0W4%I`BtFklt*OuK(g zb8MTi`+e}df2|F20hfYH!L4K;Wgji3_eVsB$%*8J={OlFg@zWwo5x@pX$=LH_D~

hU>jF8`UCnXVSf5L*fvd~rwV2=Zs+zmPx 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%0DdqA{zQ&boLy&i5?@O2yy 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

?0yiJHX3f>NR%-yqM9SCIn|` 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%0D} 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 x>S5%rTOWMIjz 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 z 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

-7{YiV&Eno-2qaL1gf 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 Qo^joCIeZs^2<7nq0M|&~&j0`b literal 0 HcmV?d00001 diff --git a/sparkR b/sparkR new file mode 100755 index 0000000000000..2ee5abdcd6299 --- /dev/null +++ b/sparkR @@ -0,0 +1,39 @@ +#!/bin/bash + +FWDIR="$(cd `dirname $0`; pwd)" + +export PROJECT_HOME="$FWDIR" + +unset JAVA_HOME + +export R_PROFILE_USER="/tmp/sparkR.profile" + +if [ $# -gt 0 ]; then + # If we are running an R program, only set libPaths and use Rscript +cat > /tmp/sparkR.profile << EOF +.First <- function() { + projecHome <- Sys.getenv("PROJECT_HOME") + .libPaths(c( .libPaths(), paste(projecHome,"/lib", sep=""))) + Sys.setenv(NOAWT=1) +} +EOF + + Rscript "$@" +else + + # If we don't have an R file to run, initialize context and run R +cat > /tmp/sparkR.profile << EOF +.First <- function() { + projecHome <- Sys.getenv("PROJECT_HOME") + Sys.setenv(NOAWT=1) + .libPaths(c( .libPaths(), paste(projecHome,"/lib", sep=""))) + require(SparkR) + sc <- sparkR.init(Sys.getenv("MASTER", unset = "local")) + assign("sc", sc, envir=.GlobalEnv) + cat("\n Welcome to SparkR!") + cat("\n Spark context is available as sc\n") +} +EOF + + R +fi diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties new file mode 100644 index 0000000000000..3fcfdff9eb4ab --- /dev/null +++ b/src/main/resources/log4j.properties @@ -0,0 +1,11 @@ +# Set everything to be logged to the console +log4j.rootCategory=INFO, console +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n + +# Change this to set Spark log level +log4j.logger.org.apache.spark=WARN + +# Ignore messages below warning level from Jetty, because it's a bit verbose +log4j.logger.org.eclipse.jetty=WARN diff --git a/RRDD.scala b/src/main/scala/sparkr/RRDD.scala similarity index 89% rename from RRDD.scala rename to src/main/scala/sparkr/RRDD.scala index 443d805226e08..69cdaf031e01c 100644 --- a/RRDD.scala +++ b/src/main/scala/sparkr/RRDD.scala @@ -1,14 +1,14 @@ -package org.apache.spark.api.r +package sparkr import java.io._ -import scala.io.Source + import scala.collection.JavaConversions._ +import scala.io.Source import scala.reflect.ClassTag -import org.apache.spark._ +import org.apache.spark.{SparkEnv, Partition, Logging, SparkException, TaskContext} import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.rdd.RDD -import org.apache.spark.util.Utils /** * Form an RDD[(Array[Byte], Array[Byte])] from key-value pairs returned from R. @@ -20,19 +20,20 @@ private class PairwiseRRDD[T: ClassTag]( hashFunc: Array[Byte], dataSerialized: Boolean, functionDependencies: Array[Byte], - packageNames: Array[Byte]) + packageNames: Array[Byte], + rLibDir: String) extends RDD[(Int, Array[Byte])](parent) { override def getPartitions = parent.partitions override def compute(split: Partition, context: TaskContext): Iterator[(Int, Array[Byte])] = { - val pb = RRDD.rWorkerProcessBuilder + val pb = RRDD.rWorkerProcessBuilder(rLibDir) val proc = pb.start() RRDD.startStderrThread(proc) - RRDD.startStdinThread(proc, hashFunc, dataSerialized, + RRDD.startStdinThread(rLibDir, proc, hashFunc, dataSerialized, functionDependencies, packageNames, firstParent[T].iterator(split, context), numPartitions) @@ -68,7 +69,6 @@ private class PairwiseRRDD[T: ClassTag]( case eof: EOFException => { throw new SparkException("R worker exited unexpectedly (crashed)", eof) } - case e => throw e } } var _nextObj = read() @@ -88,21 +88,22 @@ class RRDD[T: ClassTag]( func: Array[Byte], dataSerialized: Boolean, functionDependencies: Array[Byte], - packageNames: Array[Byte]) + packageNames: Array[Byte], + rLibDir: String) extends RDD[Array[Byte]](parent) with Logging { override def getPartitions = parent.partitions override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { - val pb = RRDD.rWorkerProcessBuilder + val pb = RRDD.rWorkerProcessBuilder(rLibDir) val proc = pb.start() RRDD.startStderrThread(proc) // Write -1 in numPartitions to indicate this is a normal RDD - RRDD.startStdinThread(proc, func, dataSerialized, + RRDD.startStdinThread(rLibDir, proc, func, dataSerialized, functionDependencies, packageNames, firstParent[T].iterator(split, context), numPartitions = -1) @@ -137,7 +138,6 @@ class RRDD[T: ClassTag]( case eof: EOFException => { throw new SparkException("R worker exited unexpectedly (crashed)", eof) } - case e => throw e } } var _nextObj = read() @@ -163,14 +163,10 @@ object RRDD { /** * ProcessBuilder used to launch worker R processes. */ - lazy val rWorkerProcessBuilder = { + def rWorkerProcessBuilder(rLibDir: String) = { val rCommand = "Rscript" val rOptions = "--vanilla" - val sparkHome = Option(new ProcessBuilder().environment().get("SPARK_HOME")) match { - case Some(path) => path - case None => sys.error("SPARK_HOME not set as an environment variable.") - } - val rExecScript = sparkHome + "/R/pkg/inst/worker/worker.R" + val rExecScript = rLibDir + "/SparkR/worker/worker.R" new ProcessBuilder(List(rCommand, rOptions, rExecScript)) } @@ -192,6 +188,7 @@ object RRDD { * Start a thread to write RDD data to the R process. */ def startStdinThread[T]( + rLibDir: String, proc: Process, func: Array[Byte], dataSerialized: Boolean, @@ -200,7 +197,8 @@ object RRDD { iter: Iterator[T], numPartitions: Int) { - val tempDir = Utils.getLocalDir + val tempDir = + System.getProperty("spark.local.dir", System.getProperty("java.io.tmpdir")).split(',')(0) val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) val tempFileName = tempFile.getAbsolutePath() val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt @@ -215,6 +213,7 @@ object RRDD { val dataOut = new DataOutputStream(stream) printOut.println(tempFileName) + printOut.println(rLibDir) dataOut.writeInt(func.length) dataOut.write(func, 0, func.length) From a88898bc4899e2053cb270509b4e0ddae0f58929 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sun, 22 Dec 2013 22:32:56 -0800 Subject: [PATCH 079/687] Rename test_rrd to test_rrdd --- pkg/inst/tests/{test_rrd.R => test_rrdd.R} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename pkg/inst/tests/{test_rrd.R => test_rrdd.R} (100%) diff --git a/pkg/inst/tests/test_rrd.R b/pkg/inst/tests/test_rrdd.R similarity index 100% rename from pkg/inst/tests/test_rrd.R rename to pkg/inst/tests/test_rrdd.R From 238fe6ec15c5c6cd601b22b4833bdd5546ebe3e0 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Mon, 23 Dec 2013 14:29:31 -0800 Subject: [PATCH 080/687] Add a unit test for textFile(). --- README.md | 6 ++++-- pkg/inst/tests/test_textFile.R | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 pkg/inst/tests/test_textFile.R diff --git a/README.md b/README.md index ab5b953adc2ed..2026e09d2983d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # R on Spark -SparkR is an R package that provides a light-weight fronted to use Spark from R. +SparkR is an R package that provides a light-weight frontend to use Spark from +R. ## Building @@ -24,7 +25,8 @@ Following that compile the R package by running make ## Running sparkR -Once you have built SparkR, you can start using it by launching the SparkR shell with +Once you have built SparkR, you can start using it by launching the SparkR +shell with ./sparkR diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R new file mode 100644 index 0000000000000..678909432f504 --- /dev/null +++ b/pkg/inst/tests/test_textFile.R @@ -0,0 +1,28 @@ +context("the textFile() function") + +# JavaSparkContext handle +sc <- sparkR.init() + +mockFile = c("Spark is pretty.", "Spark is awesome.") + +test_that("textFile() on a local file returns an RRDD", { + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + rrdd <- textFile(sc, fileName) + expect_that(class(rrdd), is_equivalent_to("RRDD")) + expect_true(count(rrdd) > 0) + expect_true(count(rrdd) == 2) + + unlink(fileName) +}) + +test_that("textFile() followed by a collect() returns the same content", { + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + rrdd <- textFile(sc, fileName) + expect_equal(collect(rrdd), as.list(mockFile)) + + unlink(fileName) +}) From a45227d32be289a2d959bc5df8dd7a0182adaee4 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Mon, 23 Dec 2013 14:30:17 -0800 Subject: [PATCH 081/687] Update .gitignore. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index ec29e51eca2c6..f91d166aeb2f7 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ target/ lib/ +# vim tmps +.*.swp From dfad3f504eedbcefb1e968c74df272353c7dc70c Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Mon, 23 Dec 2013 15:25:14 -0800 Subject: [PATCH 082/687] Add test_utils.R: a unit test for convertJListToRList(). --- pkg/inst/tests/test_utils.R | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 pkg/inst/tests/test_utils.R diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R new file mode 100644 index 0000000000000..818307e56479a --- /dev/null +++ b/pkg/inst/tests/test_utils.R @@ -0,0 +1,22 @@ +context("functions in utils.R") + +# JavaSparkContext handle +sc <- sparkR.init() + +test_that("convertJListToRList() gives back (deserializes) the original JLists + of strings and integers", { + # It's hard to manually create a Java List using rJava, since it does not + # support generics well. Instead, we rely on collect() returning a + # JList. + nums <- as.list(1:10) + rrdd <- parallelize(sc, nums, 1L) + jList <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") + rList <- convertJListToRList(jList, flatten = TRUE) + expect_equal(rList, nums) + + strs <- as.list("hello", "spark") + rrdd <- parallelize(sc, strs, 2L) + jList <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") + rList <- convertJListToRList(jList, flatten = TRUE) + expect_equal(rList, strs) +}) From c4a3409421cf3c4ecb844451c4544965ed337068 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 27 Dec 2013 19:03:57 -0800 Subject: [PATCH 083/687] Use RDD instead of RRDD --- pkg/NAMESPACE | 2 +- pkg/R/{RRDD.R => RDD.R} | 204 +++++++++++----------- pkg/R/context.R | 12 +- pkg/R/utils.R | 14 +- pkg/inst/tests/test_includePackage.R | 6 +- pkg/inst/tests/test_parallelize_collect.R | 72 ++++---- pkg/inst/tests/test_rdd.R | 42 +++++ pkg/inst/tests/test_rrdd.R | 42 ----- pkg/inst/tests/test_shuffle.R | 14 +- pkg/inst/tests/test_take.R | 56 +++--- pkg/inst/tests/test_textFile.R | 14 +- pkg/inst/tests/test_utils.R | 8 +- pkg/man/{RRDD.Rd => RDD.Rd} | 12 +- pkg/man/cache-methods.Rd | 12 +- pkg/man/collect-methods.Rd | 20 +-- pkg/man/combineByKey.Rd | 10 +- pkg/man/count.Rd | 14 +- pkg/man/flatMap.Rd | 8 +- pkg/man/groupByKey.Rd | 12 +- pkg/man/includePackage.Rd | 4 +- pkg/man/lapply.Rd | 16 +- pkg/man/lapplyPartition.Rd | 8 +- pkg/man/parallelize.Rd | 2 +- pkg/man/partitionBy.Rd | 10 +- pkg/man/reduce.Rd | 12 +- pkg/man/reduceByKey.Rd | 12 +- pkg/man/take.Rd | 10 +- pkg/man/textFile.Rd | 2 +- 28 files changed, 325 insertions(+), 325 deletions(-) rename pkg/R/{RRDD.R => RDD.R} (77%) create mode 100644 pkg/inst/tests/test_rdd.R delete mode 100644 pkg/inst/tests/test_rrdd.R rename pkg/man/{RRDD.Rd => RDD.Rd} (62%) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 74e385edab280..dac7aa1e2986d 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -1,5 +1,5 @@ #exportPattern("^[[:alpha:]]+") -exportClasses("RRDD") +exportClasses("RDD") exportMethods( "cache", "collect", diff --git a/pkg/R/RRDD.R b/pkg/R/RDD.R similarity index 77% rename from pkg/R/RRDD.R rename to pkg/R/RDD.R index 6d06a148648b3..85a40424f8308 100644 --- a/pkg/R/RRDD.R +++ b/pkg/R/RDD.R @@ -1,20 +1,20 @@ -# RRDD (RDD in R) class implemented in S4 OO system. +# RDD in R implemented in S4 OO system. #setOldClass("jobjRef") #' @title S4 class that represents an RDD -#' @description RRDD can be created using functions like +#' @description RDD can be created using functions like #' \code{parallelize}, \code{textFile} etc. -#' @rdname RRDD +#' @rdname RDD #' @seealso parallelize, textFile #' #' @param jrdd Java object reference to the backing JavaRDD #' @param serialized TRUE if the JavaRDD contains serialized R objects #' @export -setClass("RRDD", slots = list(jrdd = "jobjRef", +setClass("RDD", slots = list(jrdd = "jobjRef", serialized = "logical")) -setValidity("RRDD", +setValidity("RDD", function(object) { cls <- object@jrdd$getClass() className <- cls$getName() @@ -25,46 +25,46 @@ setValidity("RRDD", } }) -#' @rdname RRDD +#' @rdname RDD #' @export -RRDD <- function(jrdd, serialized = TRUE) { - new("RRDD", jrdd = jrdd, serialized = serialized) +RDD <- function(jrdd, serialized = TRUE) { + new("RDD", jrdd = jrdd, serialized = serialized) } #' Persist an RDD #' #' Persist this RDD with the default storage level (MEMORY_ONLY). #' -#' @param rrdd The RRDD to cache +#' @param rdd The RDD to cache #' @rdname cache-methods #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rrdd <- parallelize(sc, 1:10, 2L) -#' cache(rrdd) +#' rdd <- parallelize(sc, 1:10, 2L) +#' cache(rdd) #'} -setGeneric("cache", function(rrdd) { standardGeneric("cache") }) +setGeneric("cache", function(rdd) { standardGeneric("cache") }) #' @rdname cache-methods -#' @aliases cache,RRDD-method +#' @aliases cache,RDD-method setMethod("cache", - signature(rrdd = "RRDD"), - function(rrdd) { - .jcall(rrdd@jrdd, "Lorg/apache/spark/api/java/JavaRDD;", "cache") - rrdd + signature(rdd = "RDD"), + function(rdd) { + .jcall(rdd@jrdd, "Lorg/apache/spark/api/java/JavaRDD;", "cache") + rdd }) #' Collect elements of an RDD #' #' @description -#' \code{collect} returns a list that contains all of the elements in this RRDD. +#' \code{collect} returns a list that contains all of the elements in this RDD. #' -#' @param rrdd The RRDD to collect +#' @param rdd The RDD to collect #' @param ... Other optional arguments to collect #' @param flatten FALSE if the list should not flattened -#' @return a list containing elements in the RRDD +#' @return a list containing elements in the RDD #' @rdname collect-methods #' @export #' @examples @@ -74,15 +74,15 @@ setMethod("cache", #' collect(rdd) # list from 1 to 10 #' collectPartition(rdd, 0L) # list from 1 to 5 #'} -setGeneric("collect", function(rrdd, ...) { standardGeneric("collect") }) +setGeneric("collect", function(rdd, ...) { standardGeneric("collect") }) #' @rdname collect-methods -#' @aliases collect,RRDD-method +#' @aliases collect,RDD-method setMethod("collect", - signature(rrdd = "RRDD"), - function(rrdd, flatten = TRUE) { - # Assumes a pairwise RRDD is backed by a JavaPairRDD. - collected <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") + signature(rdd = "RDD"), + function(rdd, flatten = TRUE) { + # Assumes a pairwise RDD is backed by a JavaPairRDD. + collected <- .jcall(rdd@jrdd, "Ljava/util/List;", "collect") convertJListToRList(collected, flatten) }) @@ -93,16 +93,16 @@ setMethod("collect", #' in the specified partition of the RDD. #' @param partitionId the partition to collect (starts from 0) setGeneric("collectPartition", - function(rrdd, partitionId) { + function(rdd, partitionId) { standardGeneric("collectPartition") }) #' @rdname collect-methods -#' @aliases collectPartition,integer,RRDD-method +#' @aliases collectPartition,integer,RDD-method setMethod("collectPartition", - signature(rrdd = "RRDD", partitionId = "integer"), - function(rrdd, partitionId) { - jPartitionsList <- .jcall(rrdd@jrdd, + signature(rdd = "RDD", partitionId = "integer"), + function(rdd, partitionId) { + jPartitionsList <- .jcall(rdd@jrdd, "[Ljava/util/List;", "collectPartitions", .jarray(as.integer(partitionId))) @@ -114,8 +114,8 @@ setMethod("collectPartition", #' Return the number of elements in the RDD. #' -#' @param rrdd The RRDD to count -#' @return number of elements in the RRDD. +#' @param rdd The RDD to count +#' @return number of elements in the RDD. #' @rdname count #' @export #' @examples @@ -125,17 +125,17 @@ setMethod("collectPartition", #' count(rdd) # 10 #' length(rdd) # Same as count #'} -setGeneric("count", function(rrdd) { standardGeneric("count") }) +setGeneric("count", function(rdd) { standardGeneric("count") }) #' @rdname count -#' @aliases count,RRDD-method +#' @aliases count,RDD-method setMethod("count", - signature(rrdd = "RRDD"), - function(rrdd) { + signature(rdd = "RDD"), + function(rdd) { countPartition <- function(part) { as.integer(length(part)) } - valsRDD <- lapplyPartition(rrdd, countPartition) + valsRDD <- lapplyPartition(rdd, countPartition) vals <- collect(valsRDD) sum(as.integer(vals)) }) @@ -144,7 +144,7 @@ setMethod("count", #' @export #' @rdname count setMethod("length", - signature(x = "RRDD"), + signature(x = "RDD"), function(x) { count(x) }) @@ -152,12 +152,12 @@ setMethod("length", #' Apply a function to all elements #' -#' This function creates a new RRDD by applying the given transformation to all +#' This function creates a new RDD by applying the given transformation to all #' elements of the given RDD #' -#' @param X The RRDD to apply the transformation. +#' @param X The RDD to apply the transformation. #' @param FUN the transformation to apply on each element -#' @return a new RRDD created by the transformation. +#' @return a new RDD created by the transformation. #' @rdname lapply #' @export #' @examples @@ -168,7 +168,7 @@ setMethod("length", #' collect(multiplyByTwo) # 2,4,6... #'} setMethod("lapply", - signature(X = "RRDD", FUN = "function"), + signature(X = "RDD", FUN = "function"), function(X, FUN) { partitionFunc <- function(part) { lapply(part, FUN) @@ -183,9 +183,9 @@ setGeneric("map", function(X, FUN) { standardGeneric("map") }) #' @rdname lapply -#' @aliases map,RRDD,function-method +#' @aliases map,RDD,function-method setMethod("map", - signature(X = "RRDD", FUN = "function"), + signature(X = "RDD", FUN = "function"), function(X, FUN) { lapply(X, FUN) }) @@ -195,9 +195,9 @@ setMethod("map", #' This function return a new RDD by first applying a function to all #' elements of this RDD, and then flattening the results. #' -#' @param X The RRDD to apply the transformation. +#' @param X The RDD to apply the transformation. #' @param FUN the transformation to apply on each element -#' @return a new RRDD created by the transformation. +#' @return a new RDD created by the transformation. #' @rdname flatMap #' @export #' @examples @@ -211,9 +211,9 @@ setGeneric("flatMap", function(X, FUN) { standardGeneric("flatMap") }) #' @rdname flatMap -#' @aliases flatMap,RRDD,function-method +#' @aliases flatMap,RDD,function-method setMethod("flatMap", - signature(X = "RRDD", FUN = "function"), + signature(X = "RDD", FUN = "function"), function(X, FUN) { partitionFunc <- function(part) { unlist( @@ -227,9 +227,9 @@ setMethod("flatMap", #' #' Return a new RDD by applying a function to each partition of this RDD. #' -#' @param X The RRDD to apply the transformation. +#' @param X The RDD to apply the transformation. #' @param FUN the transformation to apply on each partition. -#' @return a new RRDD created by the transformation. +#' @return a new RDD created by the transformation. #' @rdname lapplyPartition #' @export #' @examples @@ -243,9 +243,9 @@ setGeneric("lapplyPartition", function(X, FUN) { standardGeneric("lapplyPartition") }) #' @rdname lapplyPartition -#' @aliases lapplyPartition,RRDD,function-method +#' @aliases lapplyPartition,RDD,function-method setMethod("lapplyPartition", - signature(X = "RRDD", FUN = "function"), + signature(X = "RDD", FUN = "function"), function(X, FUN) { # TODO: This is to handle anonymous functions. Find out a # better way to do this. @@ -261,7 +261,7 @@ setMethod("lapplyPartition", depsBin <- getDependencies(computeFunc) depsBinArr <- .jarray(depsBin) - rrddRef <- new(J("sparkr.RRDD"), + rddRef <- new(J("sparkr.RRDD"), X@jrdd$rdd(), serializedFuncArr, X@serialized, @@ -269,8 +269,8 @@ setMethod("lapplyPartition", packageNamesArr, as.character(.sparkREnv[["libname"]]), X@jrdd$classTag()) - jrdd <- rrddRef$asJavaRDD() - RRDD(jrdd, TRUE) + jrdd <- rddRef$asJavaRDD() + RDD(jrdd, TRUE) }) #' Reduce across elements of an RDD. @@ -278,9 +278,9 @@ setMethod("lapplyPartition", #' This function reduces the elements of this RDD using the #' specified commutative and associative binary operator. #' -#' @param rrdd The RRDD to reduce +#' @param rdd The RDD to reduce #' @param func Commutative and associative function to apply on elements -#' of the RRDD. +#' of the RDD. #' @export #' @rdname reduce #' @examples @@ -289,29 +289,29 @@ setMethod("lapplyPartition", #' rdd <- parallelize(sc, 1:10) #' reduce(rdd, "+") # 55 #'} -setGeneric("reduce", function(rrdd, func) { standardGeneric("reduce") }) +setGeneric("reduce", function(rdd, func) { standardGeneric("reduce") }) #' @rdname reduce -#' @aliases reduce,RRDD,ANY-method +#' @aliases reduce,RDD,ANY-method setMethod("reduce", - signature(rrdd = "RRDD", func = "ANY"), - function(rrdd, func) { + signature(rdd = "RDD", func = "ANY"), + function(rdd, func) { reducePartition <- function(part) { Reduce(func, part) } - partitionList <- collect(lapplyPartition(rrdd, reducePartition), + partitionList <- collect(lapplyPartition(rdd, reducePartition), flatten=FALSE) Reduce(func, partitionList) }) #' Take elements from an RDD. #' -#' This function takes the first NUM elements in the RRDD and +#' This function takes the first NUM elements in the RDD and #' returns them in a list. #' -#' @param rrdd The RRDD to take elements from +#' @param rdd The RDD to take elements from #' @param num Number of elements to take #' @rdname take #' @export @@ -321,16 +321,16 @@ setMethod("reduce", #' rdd <- parallelize(sc, 1:10) #' take(rdd, 2L) # list(1, 2) #'} -setGeneric("take", function(rrdd, num) { standardGeneric("take") }) +setGeneric("take", function(rdd, num) { standardGeneric("take") }) #' @rdname take -#' @aliases take,RRDD,numeric-method +#' @aliases take,RDD,numeric-method setMethod("take", - signature(rrdd = "RRDD", num = "numeric"), - function(rrdd, num) { + signature(rdd = "RDD", num = "numeric"), + function(rdd, num) { resList <- list() index <- -1 - partitions <- .jcall(rrdd@jrdd, "Ljava/util/List;", "splits") + partitions <- .jcall(rdd@jrdd, "Ljava/util/List;", "splits") numPartitions <- .jcall(partitions, "I", "size") # TODO(shivaram): Collect more than one partition based on size # estimates similar to the scala version of `take`. @@ -341,7 +341,7 @@ setMethod("take", break # a JList of byte arrays - partitionArr <- .jcall(rrdd@jrdd, + partitionArr <- .jcall(rdd@jrdd, "[Ljava/util/List;", "collectPartitions", .jarray(as.integer(index))) @@ -361,14 +361,14 @@ setMethod("take", #' For each element of this RDD, the partitioner is used to compute a hash #' function and the RDD is partitioned using this hash value. #' -#' @param rrdd The RRDD to partition. Should be an RDD where each element is +#' @param rdd The RDD to partition. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. #' @param ... Other optional arguments to partitionBy. #' #' @param partitionFunc The partition function to use. Uses a default hashCode #' function if not provided -#' @return An RRDD partitioned using the specified partitioner. +#' @return An RDD partitioned using the specified partitioner. #' @rdname partitionBy #' @export #' @examples @@ -380,15 +380,15 @@ setMethod("take", #' collectPartition(parts, 0L) # First partition should contain c(1,2) and c(1,3) #'} setGeneric("partitionBy", - function(rrdd, numPartitions, ...) { + function(rdd, numPartitions, ...) { standardGeneric("partitionBy") }) #' @rdname partitionBy -#' @aliases partitionBy,RRDD,integer-method +#' @aliases partitionBy,RDD,integer-method setMethod("partitionBy", - signature(rrdd = "RRDD", numPartitions = "integer"), - function(rrdd, numPartitions, partitionFunc = hashCode) { + signature(rdd = "RDD", numPartitions = "integer"), + function(rdd, numPartitions, partitionFunc = hashCode) { #if (missing(partitionFunc)) { # partitionFunc <- hashCode @@ -410,14 +410,14 @@ setMethod("partitionBy", # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). pairwiseRRDD <- new(J("sparkr.PairwiseRRDD"), - rrdd@jrdd$rdd(), + rdd@jrdd$rdd(), as.integer(numPartitions), serializedHashFuncBytes, - rrdd@serialized, + rdd@serialized, depsBinArr, packageNamesArr, as.character(.sparkREnv[["libname"]]), - rrdd@jrdd$classTag()) + rdd@jrdd$classTag()) # Create a corresponding partitioner. rPartitioner <- new(J("org.apache.spark.HashPartitioner"), @@ -430,7 +430,7 @@ setMethod("partitionBy", # shuffled acutal content key-val pairs. r <- javaPairRDD$values() - RRDD(r, serialized=TRUE) + RDD(r, serialized=TRUE) }) #' Group values by key @@ -438,10 +438,10 @@ setMethod("partitionBy", #' This function operates on RDDs where every element is of the form list(K, V). #' and group values for each key in the RDD into a single sequence. #' -#' @param rrdd The RRDD to group. Should be an RDD where each element is +#' @param rdd The RDD to group. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. -#' @return An RRDD where each element is list(K, list(V)) +#' @return An RDD where each element is list(K, list(V)) #' @seealso reduceByKey #' @rdname groupByKey #' @export @@ -455,16 +455,16 @@ setMethod("partitionBy", #' grouped[[1]] # Should be a list(1, list(2, 4)) #'} setGeneric("groupByKey", - function(rrdd, numPartitions) { + function(rdd, numPartitions) { standardGeneric("groupByKey") }) #' @rdname groupByKey -#' @aliases groupByKey,RRDD,integer-method +#' @aliases groupByKey,RDD,integer-method setMethod("groupByKey", - signature(rrdd = "RRDD", numPartitions = "integer"), - function(rrdd, numPartitions) { - shuffled <- partitionBy(rrdd, numPartitions) + signature(rdd = "RDD", numPartitions = "integer"), + function(rdd, numPartitions) { + shuffled <- partitionBy(rdd, numPartitions) groupVals <- function(part) { vals <- new.env() keys <- new.env() @@ -497,11 +497,11 @@ setMethod("groupByKey", #' This function operates on RDDs where every element is of the form list(K, V). #' and merges the values for each key using an associative reduce function. #' -#' @param rrdd The RRDD to reduce by key. Should be an RDD where each element is +#' @param rdd The RDD to reduce by key. Should be an RDD where each element is #' list(K, V). #' @param combineFunc The associative reduce function to use. #' @param numPartitions Number of partitions to create. -#' @return An RRDD where each element is list(K, V') where V' is the merged +#' @return An RDD where each element is list(K, V') where V' is the merged #' value #' @rdname reduceByKey #' @seealso groupByKey @@ -516,17 +516,17 @@ setMethod("groupByKey", #' reduced[[1]] # Should be a list(1, 6) #'} setGeneric("reduceByKey", - function(rrdd, combineFunc, numPartitions) { + function(rdd, combineFunc, numPartitions) { standardGeneric("reduceByKey") }) #' @rdname reduceByKey -#' @aliases reduceByKey,RRDD,integer-method +#' @aliases reduceByKey,RDD,integer-method setMethod("reduceByKey", - signature(rrdd = "RRDD", combineFunc = "ANY", numPartitions = "integer"), - function(rrdd, combineFunc, numPartitions) { + signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), + function(rdd, combineFunc, numPartitions) { # TODO: Implement map-side combine - shuffled <- partitionBy(rrdd, numPartitions) + shuffled <- partitionBy(rdd, numPartitions) reduceVals <- function(part) { vals <- new.env() keys <- new.env() @@ -565,13 +565,13 @@ setMethod("reduceByKey", #' two lists). #' } #' -#' @param rrdd The RRDD to combine. Should be an RDD where each element is +#' @param rdd The RDD to combine. Should be an RDD where each element is #' list(K, V). #' @param createCombiner Create a combiner (C) given a value (V) #' @param mergeValue Merge the given value (V) with an existing combiner (C) #' @param mergeCombiners Merge two combiners and return a new combiner #' @param numPartitions Number of partitions to create. -#' @return An RRDD where each element is list(K, C) where C is the combined type +#' @return An RDD where each element is list(K, C) where C is the combined type #' #' @rdname combineByKey #' @seealso groupByKey, reduceByKey @@ -586,16 +586,16 @@ setMethod("reduceByKey", #' combined[[1]] # Should be a list(1, 6) #'} setGeneric("combineByKey", - function(rrdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { standardGeneric("combineByKey") }) #' @rdname combineByKey -#' @aliases combineByKey,RRDD,ANY,ANY,ANY,integer-method +#' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method setMethod("combineByKey", - signature(rrdd = "RRDD", createCombiner = "ANY", mergeValue = "ANY", + signature(rdd = "RDD", createCombiner = "ANY", mergeValue = "ANY", mergeCombiners = "ANY", numPartitions = "integer"), - function(rrdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { combineLocally <- function(part) { combiners <- new.env() keys <- new.env() @@ -616,7 +616,7 @@ setMethod("combineByKey", list(keys[[k]], combiners[[k]]) }) } - locallyCombined <- lapplyPartition(rrdd, combineLocally) + locallyCombined <- lapplyPartition(rdd, combineLocally) shuffled <- partitionBy(locallyCombined, numPartitions) mergeAfterShuffle <- function(part) { combiners <- new.env() diff --git a/pkg/R/context.R b/pkg/R/context.R index 437fd5f560c14..193ed10c49e91 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -10,7 +10,7 @@ #' @param path Path of file to read #' @param minSplits Minimum number of splits to be created. If NULL, the default #' value is chosen based on available parallelism. -#' @return RRDD where each item is of type \code{character} +#' @return RDD where each item is of type \code{character} #' @export #' @examples #'\dontrun{ @@ -26,7 +26,7 @@ textFile <- function(sc, path, minSplits = NULL) { } jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", path, as.integer(minSplits)) - RRDD(jrdd, FALSE) + RDD(jrdd, FALSE) } #' Create an RDD from a homogeneous list or vector. @@ -38,7 +38,7 @@ textFile <- function(sc, path, minSplits = NULL) { #' @param sc SparkContext to use #' @param coll collection to parallelize #' @param numSlices number of partitions to create in the RDD -#' @return an RRDD created from this collection +#' @return an RDD created from this collection #' @export #' @examples #'\dontrun{ @@ -79,7 +79,7 @@ parallelize <- function(sc, coll, numSlices = 1) { sc, javaSerializedSlices) - RRDD(jrdd, TRUE) + RDD(jrdd, TRUE) } @@ -107,8 +107,8 @@ parallelize <- function(sc, coll, numSlices = 1) { #' sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) #' } #' -#' rrdd <- lapplyPartition(parallelize(sc, 1:2, 2L), generateSparse) -#' collect(rrdd) +#' rdd <- lapplyPartition(parallelize(sc, 1:2, 2L), generateSparse) +#' collect(rdd) #'} includePackage <- function(sc, pkg) { pkg <- as.character(substitute(pkg)) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index c5ed14a86483f..8d54ac7290d36 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -16,7 +16,7 @@ convertJListToRList <- function(jList, flatten) { obj <- .jsimplify(jElem) if (class(obj) == "jobjRef" && .jinstanceof(obj, "[B")) { - # RRDD[Array[Byte]]. + # RDD[Array[Byte]]. rRaw <- .jevalArray(.jcastToArray(jElem)) res <- unserialize(rRaw) @@ -32,7 +32,7 @@ convertJListToRList <- function(jList, flatten) { } else if (class(obj) == "jobjRef" && !.jinstanceof(obj, "[B")) { stop(paste("utils.R: convertJListToRList only supports", - "RRDD[Array[Byte]] and", + "RDD[Array[Byte]] and", "JavaPairRDD[Array[Byte], Array[Byte]] for now")) } @@ -55,10 +55,10 @@ convertJListToRList <- function(jList, flatten) { } -# Returns TRUE if `name` refers to an RRDD in the given environment `env` -isRRDD <- function(name, env) { +# Returns TRUE if `name` refers to an RDD in the given environment `env` +isRDD <- function(name, env) { obj <- get(name, envir=env) - class(obj) == "RRDD" + class(obj) == "RDD" } # Returns TRUE if `name` is a function in the SparkR package. @@ -85,7 +85,7 @@ isSparkFunction <- function(name) { } # Serialize the dependencies of the given function and return them as a raw -# vector. Filters out RRDDs before serializing the dependencies +# vector. Filters out RDDs before serializing the dependencies getDependencies <- function(name) { varsToSave <- c() closureEnv <- environment(name) @@ -104,7 +104,7 @@ getDependencies <- function(name) { break currentEnv <- parent.env(currentEnv) } - filteredVars <- Filter(function(x) { !isRRDD(x, closureEnv) }, varsToSave) + filteredVars <- Filter(function(x) { !isRDD(x, closureEnv) }, varsToSave) #cat("Saving ", filteredVars, "\n", file=stderr()) diff --git a/pkg/inst/tests/test_includePackage.R b/pkg/inst/tests/test_includePackage.R index e0f33def4573d..35125f94b9cbf 100644 --- a/pkg/inst/tests/test_includePackage.R +++ b/pkg/inst/tests/test_includePackage.R @@ -5,7 +5,7 @@ sc <- sparkR.init() # Partitioned data nums <- 1:3 -rrdd <- parallelize(sc, nums, 3L) +rdd <- parallelize(sc, nums, 3L) test_that("include inside function", { # Only run the test if Matrix is installed. @@ -16,7 +16,7 @@ test_that("include inside function", { sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) } - sparseMat <- lapplyPartition(rrdd, generateSparse) + sparseMat <- lapplyPartition(rdd, generateSparse) actual <- collect(sparseMat) } }) @@ -29,7 +29,7 @@ test_that("use include package", { sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) } includePackage(sc, Matrix) - sparseMat <- lapplyPartition(rrdd, generateSparse) + sparseMat <- lapplyPartition(rdd, generateSparse) actual <- collect(sparseMat) } }) diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index d4ea02489bcd7..4b0c2461a114f 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -20,51 +20,51 @@ jsc <- sparkR.init() # Tests -test_that("parallelize() on simple vectors and lists returns an RRDD", { - numVectorRRDD <- parallelize(jsc, numVector, 1) - numVectorRRDD2 <- parallelize(jsc, numVector, 10) - numListRRDD <- parallelize(jsc, numList, 1) - numListRRDD2 <- parallelize(jsc, numList, 4) - strVectorRRDD <- parallelize(jsc, strVector, 2) - strVectorRRDD2 <- parallelize(jsc, strVector, 3) - strListRRDD <- parallelize(jsc, strList, 4) - strListRRDD2 <- parallelize(jsc, strList, 1) +test_that("parallelize() on simple vectors and lists returns an RDD", { + numVectorRDD <- parallelize(jsc, numVector, 1) + numVectorRDD2 <- parallelize(jsc, numVector, 10) + numListRDD <- parallelize(jsc, numList, 1) + numListRDD2 <- parallelize(jsc, numList, 4) + strVectorRDD <- parallelize(jsc, strVector, 2) + strVectorRDD2 <- parallelize(jsc, strVector, 3) + strListRDD <- parallelize(jsc, strList, 4) + strListRDD2 <- parallelize(jsc, strList, 1) - rrdds <- c(numVectorRRDD, - numVectorRRDD2, - numListRRDD, - numListRRDD2, - strVectorRRDD, - strVectorRRDD2, - strListRRDD, - strListRRDD2) + rdds <- c(numVectorRDD, + numVectorRDD2, + numListRDD, + numListRDD2, + strVectorRDD, + strVectorRDD2, + strListRDD, + strListRDD2) - for (rrdd in rrdds) { - expect_that(class(rrdd), is_equivalent_to("RRDD")) - expect_true(.hasSlot(rrdd, "jrdd") - && class(rrdd@jrdd) == "jobjRef" - && .jinstanceof(rrdd@jrdd, "org/apache/spark/api/java/JavaRDD")) + for (rdd in rdds) { + expect_that(class(rdd), is_equivalent_to("RDD")) + expect_true(.hasSlot(rdd, "jrdd") + && class(rdd@jrdd) == "jobjRef" + && .jinstanceof(rdd@jrdd, "org/apache/spark/api/java/JavaRDD")) } }) test_that("collect(), following a parallelize(), gives back the original collections", { - numVectorRRDD <- parallelize(jsc, numVector, 10) - expect_equal(collect(numVectorRRDD), as.list(numVector)) + numVectorRDD <- parallelize(jsc, numVector, 10) + expect_equal(collect(numVectorRDD), as.list(numVector)) - numListRRDD <- parallelize(jsc, numList, 1) - numListRRDD2 <- parallelize(jsc, numList, 4) - expect_equal(collect(numListRRDD), as.list(numList)) - expect_equal(collect(numListRRDD2), as.list(numList)) + numListRDD <- parallelize(jsc, numList, 1) + numListRDD2 <- parallelize(jsc, numList, 4) + expect_equal(collect(numListRDD), as.list(numList)) + expect_equal(collect(numListRDD2), as.list(numList)) - strVectorRRDD <- parallelize(jsc, strVector, 2) - strVectorRRDD2 <- parallelize(jsc, strVector, 3) - expect_equal(collect(strVectorRRDD), as.list(strVector)) - expect_equal(collect(strVectorRRDD2), as.list(strVector)) + strVectorRDD <- parallelize(jsc, strVector, 2) + strVectorRDD2 <- parallelize(jsc, strVector, 3) + expect_equal(collect(strVectorRDD), as.list(strVector)) + expect_equal(collect(strVectorRDD2), as.list(strVector)) - strListRRDD <- parallelize(jsc, strList, 4) - strListRRDD2 <- parallelize(jsc, strList, 1) - expect_equal(collect(strListRRDD), as.list(strList)) - expect_equal(collect(strListRRDD2), as.list(strList)) + strListRDD <- parallelize(jsc, strList, 4) + strListRDD2 <- parallelize(jsc, strList, 1) + expect_equal(collect(strListRDD), as.list(strList)) + expect_equal(collect(strListRDD2), as.list(strList)) }) test_that("parallelize() and collect() work for lists of pairs (pairwise data)", { diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R new file mode 100644 index 0000000000000..f2633bcfb5f91 --- /dev/null +++ b/pkg/inst/tests/test_rdd.R @@ -0,0 +1,42 @@ +context("basic RDD functions") + +# JavaSparkContext handle +sc <- sparkR.init() + +# Data +nums <- 1:10 +rdd <- parallelize(sc, nums, 2L) + +test_that("count and length on RDD", { + expect_equal(count(rdd), 10) + expect_equal(length(rdd), 10) +}) + +test_that("lapply on RDD", { + multiples <- lapply(rdd, function(x) { 2 * x }) + actual <- collect(multiples) + expect_equal(actual, as.list(nums * 2)) +}) + +test_that("lapplyPartition on RDD", { + sums <- lapplyPartition(rdd, function(part) { sum(unlist(part)) }) + actual <- collect(sums) + expect_equal(actual, list(15, 40)) +}) + +test_that("reduce on RDD", { + sum <- reduce(rdd, "+") + expect_equal(sum, 55) + + # Also test with an inline function + sumInline <- reduce(rdd, function(x, y) { x + y }) + expect_equal(sumInline, 55) +}) + +test_that("lapply with dependency", { + fa <- 5 + multiples <- lapply(rdd, function(x) { fa * x }) + actual <- collect(multiples) + + expect_equal(actual, as.list(nums * 5)) +}) diff --git a/pkg/inst/tests/test_rrdd.R b/pkg/inst/tests/test_rrdd.R deleted file mode 100644 index aaa57988b8ac7..0000000000000 --- a/pkg/inst/tests/test_rrdd.R +++ /dev/null @@ -1,42 +0,0 @@ -context("basic RRDD functions") - -# JavaSparkContext handle -sc <- sparkR.init() - -# Data -nums <- 1:10 -rrdd <- parallelize(sc, nums, 2L) - -test_that("count and length on RRDD", { - expect_equal(count(rrdd), 10) - expect_equal(length(rrdd), 10) -}) - -test_that("lapply on RRDD", { - multiples <- lapply(rrdd, function(x) { 2 * x }) - actual <- collect(multiples) - expect_equal(actual, as.list(nums * 2)) -}) - -test_that("lapplyPartition on RRDD", { - sums <- lapplyPartition(rrdd, function(part) { sum(unlist(part)) }) - actual <- collect(sums) - expect_equal(actual, list(15, 40)) -}) - -test_that("reduce on RRDD", { - sum <- reduce(rrdd, "+") - expect_equal(sum, 55) - - # Also test with an inline function - sumInline <- reduce(rrdd, function(x, y) { x + y }) - expect_equal(sumInline, 55) -}) - -test_that("lapply with dependency", { - fa <- 5 - multiples <- lapply(rrdd, function(x) { fa * x }) - actual <- collect(multiples) - - expect_equal(actual, as.list(nums * 5)) -}) diff --git a/pkg/inst/tests/test_shuffle.R b/pkg/inst/tests/test_shuffle.R index 816e9985946bc..6d1ea81b1a149 100644 --- a/pkg/inst/tests/test_shuffle.R +++ b/pkg/inst/tests/test_shuffle.R @@ -18,7 +18,7 @@ strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge, ", "other times it helps me control the chaos.", "Dexter Morgan: Harry and Dorris Morgan did a wonderful job ", "raising me. But they're both dead now. I didn't kill them. Honest.") -strListRRDD <- parallelize(sc, strList, 4) +strListRDD <- parallelize(sc, strList, 4) test_that("groupByKey for integers", { grouped <- groupByKey(intRdd, 2L) @@ -76,12 +76,12 @@ test_that("partitionBy() partitions data correctly", { # Partition by magnitude partitionByMagnitude <- function(key) { if (key >= 3) 1 else 0 } - resultRRDD <- partitionBy(numPairsRdd, 2L, partitionByMagnitude) + resultRDD <- partitionBy(numPairsRdd, 2L, partitionByMagnitude) expected_first <- list(list(1, 100), list(2, 200)) # key < 3 expected_second <- list(list(4, -1), list(3, 1), list(3, 0)) # key >= 3 - actual_first <- collectPartition(resultRRDD, 0L) - actual_second <- collectPartition(resultRRDD, 1L) + actual_first <- collectPartition(resultRDD, 0L) + actual_second <- collectPartition(resultRDD, 1L) expect_equal(actual_first, expected_first) expect_equal(actual_second, expected_second) @@ -92,14 +92,14 @@ test_that("partitionBy works with dependencies", { partitionByParity <- function(key) { if (key %% 2 == kOne) 7 else 4 } # Partition by parity - resultRRDD <- partitionBy(numPairsRdd, numPartitions = 2L, partitionByParity) + resultRDD <- partitionBy(numPairsRdd, numPartitions = 2L, partitionByParity) # keys even; 100 %% 2 == 0 expected_first <- list(list(2, 200), list(4, -1)) # keys odd; 3 %% 2 == 1 expected_second <- list(list(1, 100), list(3, 1), list(3, 0)) - actual_first <- collectPartition(resultRRDD, 0L) - actual_second <- collectPartition(resultRRDD, 1L) + actual_first <- collectPartition(resultRDD, 0L) + actual_second <- collectPartition(resultRDD, 1L) expect_equal(actual_first, expected_first) expect_equal(actual_second, expected_second) diff --git a/pkg/inst/tests/test_take.R b/pkg/inst/tests/test_take.R index 87f5ec797ca6d..b29ed296fb1a6 100644 --- a/pkg/inst/tests/test_take.R +++ b/pkg/inst/tests/test_take.R @@ -1,4 +1,4 @@ -context("tests RRDD function take()") +context("tests RDD function take()") # Mock data numVector <- c(-10:97) @@ -16,32 +16,32 @@ strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge, ", jsc <- sparkR.init() test_that("take() gives back the original elements in correct count and order", { - numVectorRRDD <- parallelize(jsc, numVector, 10) - expect_equal(take(numVectorRRDD, 1), as.list(head(numVector, n = 1))) - expect_equal(take(numVectorRRDD, 3), as.list(head(numVector, n = 3))) - expect_equal(take(numVectorRRDD, length(numVector)), as.list(numVector)) - expect_equal(take(numVectorRRDD, length(numVector) + 1), as.list(numVector)) - - numListRRDD <- parallelize(jsc, numList, 1) - numListRRDD2 <- parallelize(jsc, numList, 4) - expect_equal(take(numListRRDD, 3), take(numListRRDD2, 3)) - expect_equal(take(numListRRDD, 5), take(numListRRDD2, 5)) - expect_equal(take(numListRRDD, 1), as.list(head(numList, n = 1))) - expect_equal(take(numListRRDD2, 999), numList) - - strVectorRRDD <- parallelize(jsc, strVector, 2) - strVectorRRDD2 <- parallelize(jsc, strVector, 3) - expect_equal(take(strVectorRRDD, 4), as.list(strVector)) - expect_equal(take(strVectorRRDD2, 2), as.list(head(strVector, n = 2))) - - strListRRDD <- parallelize(jsc, strList, 4) - strListRRDD2 <- parallelize(jsc, strList, 1) - expect_equal(take(strListRRDD, 3), as.list(head(strList, n = 3))) - expect_equal(take(strListRRDD2, 1), as.list(head(strList, n = 1))) - - expect_true(length(take(strListRRDD, 0)) == 0) - expect_true(length(take(strVectorRRDD, 0)) == 0) - expect_true(length(take(numListRRDD, 0)) == 0) - expect_true(length(take(numVectorRRDD, 0)) == 0) + numVectorRDD <- parallelize(jsc, numVector, 10) + expect_equal(take(numVectorRDD, 1), as.list(head(numVector, n = 1))) + expect_equal(take(numVectorRDD, 3), as.list(head(numVector, n = 3))) + expect_equal(take(numVectorRDD, length(numVector)), as.list(numVector)) + expect_equal(take(numVectorRDD, length(numVector) + 1), as.list(numVector)) + + numListRDD <- parallelize(jsc, numList, 1) + numListRDD2 <- parallelize(jsc, numList, 4) + expect_equal(take(numListRDD, 3), take(numListRDD2, 3)) + expect_equal(take(numListRDD, 5), take(numListRDD2, 5)) + expect_equal(take(numListRDD, 1), as.list(head(numList, n = 1))) + expect_equal(take(numListRDD2, 999), numList) + + strVectorRDD <- parallelize(jsc, strVector, 2) + strVectorRDD2 <- parallelize(jsc, strVector, 3) + expect_equal(take(strVectorRDD, 4), as.list(strVector)) + expect_equal(take(strVectorRDD2, 2), as.list(head(strVector, n = 2))) + + strListRDD <- parallelize(jsc, strList, 4) + strListRDD2 <- parallelize(jsc, strList, 1) + expect_equal(take(strListRDD, 3), as.list(head(strList, n = 3))) + expect_equal(take(strListRDD2, 1), as.list(head(strList, n = 1))) + + expect_true(length(take(strListRDD, 0)) == 0) + expect_true(length(take(strVectorRDD, 0)) == 0) + expect_true(length(take(numListRDD, 0)) == 0) + expect_true(length(take(numVectorRDD, 0)) == 0) }) diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 678909432f504..409caa9a8b544 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -5,14 +5,14 @@ sc <- sparkR.init() mockFile = c("Spark is pretty.", "Spark is awesome.") -test_that("textFile() on a local file returns an RRDD", { +test_that("textFile() on a local file returns an RDD", { fileName <- tempfile(pattern="spark-test", fileext=".tmp") writeLines(mockFile, fileName) - rrdd <- textFile(sc, fileName) - expect_that(class(rrdd), is_equivalent_to("RRDD")) - expect_true(count(rrdd) > 0) - expect_true(count(rrdd) == 2) + rdd <- textFile(sc, fileName) + expect_that(class(rdd), is_equivalent_to("RDD")) + expect_true(count(rdd) > 0) + expect_true(count(rdd) == 2) unlink(fileName) }) @@ -21,8 +21,8 @@ test_that("textFile() followed by a collect() returns the same content", { fileName <- tempfile(pattern="spark-test", fileext=".tmp") writeLines(mockFile, fileName) - rrdd <- textFile(sc, fileName) - expect_equal(collect(rrdd), as.list(mockFile)) + rdd <- textFile(sc, fileName) + expect_equal(collect(rdd), as.list(mockFile)) unlink(fileName) }) diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 818307e56479a..3c86639a2489d 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -9,14 +9,14 @@ test_that("convertJListToRList() gives back (deserializes) the original JLists # support generics well. Instead, we rely on collect() returning a # JList. nums <- as.list(1:10) - rrdd <- parallelize(sc, nums, 1L) - jList <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") + rdd <- parallelize(sc, nums, 1L) + jList <- .jcall(rdd@jrdd, "Ljava/util/List;", "collect") rList <- convertJListToRList(jList, flatten = TRUE) expect_equal(rList, nums) strs <- as.list("hello", "spark") - rrdd <- parallelize(sc, strs, 2L) - jList <- .jcall(rrdd@jrdd, "Ljava/util/List;", "collect") + rdd <- parallelize(sc, strs, 2L) + jList <- .jcall(rdd@jrdd, "Ljava/util/List;", "collect") rList <- convertJListToRList(jList, flatten = TRUE) expect_equal(rList, strs) }) diff --git a/pkg/man/RRDD.Rd b/pkg/man/RDD.Rd similarity index 62% rename from pkg/man/RRDD.Rd rename to pkg/man/RDD.Rd index 47400098dac32..c3abc9f0b5640 100644 --- a/pkg/man/RRDD.Rd +++ b/pkg/man/RDD.Rd @@ -1,10 +1,10 @@ \docType{class} -\name{RRDD-class} -\alias{RRDD} -\alias{RRDD-class} +\name{RDD-class} +\alias{RDD} +\alias{RDD-class} \title{S4 class that represents an RDD} \usage{ -RRDD(jrdd, serialized = TRUE) +RDD(jrdd, serialized = TRUE) } \arguments{ \item{jrdd}{Java object reference to the backing JavaRDD} @@ -13,8 +13,8 @@ RRDD(jrdd, serialized = TRUE) R objects} } \description{ -RRDD can be created using functions like -\code{parallelize}, \code{textFile} etc. +RDD can be created using functions like \code{parallelize}, +\code{textFile} etc. } \seealso{ parallelize, textFile diff --git a/pkg/man/cache-methods.Rd b/pkg/man/cache-methods.Rd index 0e2ec4daed8f6..4f8efc7c35eae 100644 --- a/pkg/man/cache-methods.Rd +++ b/pkg/man/cache-methods.Rd @@ -1,15 +1,15 @@ \docType{methods} \name{cache} \alias{cache} -\alias{cache,RRDD-method} +\alias{cache,RDD-method} \title{Persist an RDD} \usage{ -cache(rrdd) +cache(rdd) -\S4method{cache}{RRDD}(rrdd) +\S4method{cache}{RDD}(rdd) } \arguments{ - \item{rrdd}{The RRDD to cache} + \item{rdd}{The RDD to cache} } \description{ Persist this RDD with the default storage level @@ -18,8 +18,8 @@ Persist this RDD with the default storage level \examples{ \dontrun{ sc <- sparkR.init() -rrdd <- parallelize(sc, 1:10, 2L) -cache(rrdd) +rdd <- parallelize(sc, 1:10, 2L) +cache(rdd) } } diff --git a/pkg/man/collect-methods.Rd b/pkg/man/collect-methods.Rd index 7542439217660..77bf79b80dc26 100644 --- a/pkg/man/collect-methods.Rd +++ b/pkg/man/collect-methods.Rd @@ -1,22 +1,22 @@ \docType{methods} \name{collect} \alias{collect} -\alias{collect,RRDD-method} +\alias{collect,RDD-method} \alias{collectPartition} -\alias{collectPartition,RRDD,integer-method} -\alias{collectPartition,integer,RRDD-method} +\alias{collectPartition,RDD,integer-method} +\alias{collectPartition,integer,RDD-method} \title{Collect elements of an RDD} \usage{ -collect(rrdd, ...) +collect(rdd, ...) -\S4method{collect}{RRDD}(rrdd, flatten = TRUE) +\S4method{collect}{RDD}(rdd, flatten = TRUE) -collectPartition(rrdd, partitionId) +collectPartition(rdd, partitionId) -\S4method{collectPartition}{RRDD,integer}(rrdd, partitionId) +\S4method{collectPartition}{RDD,integer}(rdd, partitionId) } \arguments{ - \item{rrdd}{The RRDD to collect} + \item{rdd}{The RDD to collect} \item{...}{Other optional arguments to collect} @@ -26,11 +26,11 @@ collectPartition(rrdd, partitionId) 0)} } \value{ -a list containing elements in the RRDD +a list containing elements in the RDD } \description{ \code{collect} returns a list that contains all of the -elements in this RRDD. +elements in this RDD. \code{collectPartition} returns a list that contains all of the elements in the specified partition of the RDD. diff --git a/pkg/man/combineByKey.Rd b/pkg/man/combineByKey.Rd index 0dcfb8e502ebd..ac46b4fde7cb1 100644 --- a/pkg/man/combineByKey.Rd +++ b/pkg/man/combineByKey.Rd @@ -1,16 +1,16 @@ \docType{methods} \name{combineByKey} \alias{combineByKey} -\alias{combineByKey,RRDD,ANY,ANY,ANY,integer-method} +\alias{combineByKey,RDD,ANY,ANY,ANY,integer-method} \title{Combine values by key} \usage{ -combineByKey(rrdd, createCombiner, mergeValue, mergeCombiners, numPartitions) +combineByKey(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) -\S4method{combineByKey}{RRDD,ANY,ANY,ANY,integer}(rrdd, createCombiner, +\S4method{combineByKey}{RDD,ANY,ANY,ANY,integer}(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) } \arguments{ - \item{rrdd}{The RRDD to combine. Should be an RDD where + \item{rdd}{The RDD to combine. Should be an RDD where each element is list(K, V).} \item{createCombiner}{Create a combiner (C) given a value @@ -25,7 +25,7 @@ combineByKey(rrdd, createCombiner, mergeValue, mergeCombiners, numPartitions) \item{numPartitions}{Number of partitions to create.} } \value{ -An RRDD where each element is list(K, C) where C is the +An RDD where each element is list(K, C) where C is the combined type } \description{ diff --git a/pkg/man/count.Rd b/pkg/man/count.Rd index 9ab6392b5bd41..58492a523fa47 100644 --- a/pkg/man/count.Rd +++ b/pkg/man/count.Rd @@ -1,24 +1,24 @@ \docType{methods} \name{count} \alias{count} -\alias{count,RRDD-method} -\alias{length,RRDD-method} +\alias{count,RDD-method} +\alias{length,RDD-method} \title{Return the number of elements in the RDD.} \usage{ -count(rrdd) +count(rdd) -\S4method{count}{RRDD}(rrdd) +\S4method{count}{RDD}(rdd) -\S4method{length}{RRDD}(x) +\S4method{length}{RDD}(x) } \arguments{ - \item{rrdd}{The RRDD to count} + \item{rdd}{The RDD to count} \item{x}{an \R object. For replacement, a vector or factor.} } \value{ -number of elements in the RRDD. +number of elements in the RDD. } \description{ Return the number of elements in the RDD. diff --git a/pkg/man/flatMap.Rd b/pkg/man/flatMap.Rd index a98ca0deaef84..8fb354c3b82b3 100644 --- a/pkg/man/flatMap.Rd +++ b/pkg/man/flatMap.Rd @@ -1,20 +1,20 @@ \docType{methods} \name{flatMap} \alias{flatMap} -\alias{flatMap,RRDD,function-method} +\alias{flatMap,RDD,function-method} \title{Flatten results after apply a function to all elements} \usage{ flatMap(X, FUN) -\S4method{flatMap}{RRDD,function}(X, FUN) +\S4method{flatMap}{RDD,function}(X, FUN) } \arguments{ - \item{X}{The RRDD to apply the transformation.} + \item{X}{The RDD to apply the transformation.} \item{FUN}{the transformation to apply on each element} } \value{ -a new RRDD created by the transformation. +a new RDD created by the transformation. } \description{ This function return a new RDD by first applying a function diff --git a/pkg/man/groupByKey.Rd b/pkg/man/groupByKey.Rd index 1a1f7b25e8d1b..8eb0b284bd8ac 100644 --- a/pkg/man/groupByKey.Rd +++ b/pkg/man/groupByKey.Rd @@ -1,21 +1,21 @@ \docType{methods} \name{groupByKey} \alias{groupByKey} -\alias{groupByKey,RRDD,integer-method} +\alias{groupByKey,RDD,integer-method} \title{Group values by key} \usage{ -groupByKey(rrdd, numPartitions) +groupByKey(rdd, numPartitions) -\S4method{groupByKey}{RRDD,integer}(rrdd, numPartitions) +\S4method{groupByKey}{RDD,integer}(rdd, numPartitions) } \arguments{ - \item{rrdd}{The RRDD to group. Should be an RDD where - each element is list(K, V).} + \item{rdd}{The RDD to group. Should be an RDD where each + element is list(K, V).} \item{numPartitions}{Number of partitions to create.} } \value{ -An RRDD where each element is list(K, list(V)) +An RDD where each element is list(K, list(V)) } \description{ This function operates on RDDs where every element is of diff --git a/pkg/man/includePackage.Rd b/pkg/man/includePackage.Rd index 58f1972f7305a..005ebcf636b2a 100644 --- a/pkg/man/includePackage.Rd +++ b/pkg/man/includePackage.Rd @@ -29,8 +29,8 @@ Spark cluster. sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) } - rrdd <- lapplyPartition(parallelize(sc, 1:2, 2L), generateSparse) - collect(rrdd) + rdd <- lapplyPartition(parallelize(sc, 1:2, 2L), generateSparse) + collect(rdd) } } diff --git a/pkg/man/lapply.Rd b/pkg/man/lapply.Rd index e5168c925023c..6a7cb107169c6 100644 --- a/pkg/man/lapply.Rd +++ b/pkg/man/lapply.Rd @@ -1,26 +1,26 @@ \docType{methods} -\name{lapply,RRDD,function-method} -\alias{lapply,RRDD,function-method} +\name{lapply,RDD,function-method} +\alias{lapply,RDD,function-method} \alias{map} -\alias{map,RRDD,function-method} +\alias{map,RDD,function-method} \title{Apply a function to all elements} \usage{ -\S4method{lapply}{RRDD,function}(X, FUN) +\S4method{lapply}{RDD,function}(X, FUN) map(X, FUN) -\S4method{map}{RRDD,function}(X, FUN) +\S4method{map}{RDD,function}(X, FUN) } \arguments{ - \item{X}{The RRDD to apply the transformation.} + \item{X}{The RDD to apply the transformation.} \item{FUN}{the transformation to apply on each element} } \value{ -a new RRDD created by the transformation. +a new RDD created by the transformation. } \description{ -This function creates a new RRDD by applying the given +This function creates a new RDD by applying the given transformation to all elements of the given RDD } \examples{ diff --git a/pkg/man/lapplyPartition.Rd b/pkg/man/lapplyPartition.Rd index 7dafd0e38feb9..771eb74fee9d6 100644 --- a/pkg/man/lapplyPartition.Rd +++ b/pkg/man/lapplyPartition.Rd @@ -1,21 +1,21 @@ \docType{methods} \name{lapplyPartition} \alias{lapplyPartition} -\alias{lapplyPartition,RRDD,function-method} +\alias{lapplyPartition,RDD,function-method} \title{Apply a function to each partition of an RDD} \usage{ lapplyPartition(X, FUN) -\S4method{lapplyPartition}{RRDD,function}(X, FUN) +\S4method{lapplyPartition}{RDD,function}(X, FUN) } \arguments{ - \item{X}{The RRDD to apply the transformation.} + \item{X}{The RDD to apply the transformation.} \item{FUN}{the transformation to apply on each partition.} } \value{ -a new RRDD created by the transformation. +a new RDD created by the transformation. } \description{ Return a new RDD by applying a function to each partition diff --git a/pkg/man/parallelize.Rd b/pkg/man/parallelize.Rd index 8f9c196e4faa1..dbd2555b71058 100644 --- a/pkg/man/parallelize.Rd +++ b/pkg/man/parallelize.Rd @@ -13,7 +13,7 @@ parallelize(sc, coll, numSlices = 1) RDD} } \value{ -an RRDD created from this collection +an RDD created from this collection } \description{ This function creates an RDD from a local homogeneous list diff --git a/pkg/man/partitionBy.Rd b/pkg/man/partitionBy.Rd index b6395b6368d61..d611ec64ddb17 100644 --- a/pkg/man/partitionBy.Rd +++ b/pkg/man/partitionBy.Rd @@ -1,16 +1,16 @@ \docType{methods} \name{partitionBy} \alias{partitionBy} -\alias{partitionBy,RRDD,integer-method} +\alias{partitionBy,RDD,integer-method} \title{Partition an RDD by key} \usage{ -partitionBy(rrdd, numPartitions, ...) +partitionBy(rdd, numPartitions, ...) -\S4method{partitionBy}{RRDD,integer}(rrdd, numPartitions, +\S4method{partitionBy}{RDD,integer}(rdd, numPartitions, partitionFunc = hashCode) } \arguments{ - \item{rrdd}{The RRDD to partition. Should be an RDD where + \item{rdd}{The RDD to partition. Should be an RDD where each element is list(K, V).} \item{numPartitions}{Number of partitions to create.} @@ -21,7 +21,7 @@ partitionBy(rrdd, numPartitions, ...) a default hashCode function if not provided} } \value{ -An RRDD partitioned using the specified partitioner. +An RDD partitioned using the specified partitioner. } \description{ This function operates on RDDs where every element is of diff --git a/pkg/man/reduce.Rd b/pkg/man/reduce.Rd index ece7376bcfe4c..3dab2da3606e6 100644 --- a/pkg/man/reduce.Rd +++ b/pkg/man/reduce.Rd @@ -1,19 +1,19 @@ \docType{methods} \name{reduce} \alias{reduce} -\alias{reduce,RRDD,ANY-method} -\alias{reduce,RRDD-method} +\alias{reduce,RDD,ANY-method} +\alias{reduce,RDD-method} \title{Reduce across elements of an RDD.} \usage{ -reduce(rrdd, func) +reduce(rdd, func) -\S4method{reduce}{RRDD}(rrdd, func) +\S4method{reduce}{RDD}(rdd, func) } \arguments{ - \item{rrdd}{The RRDD to reduce} + \item{rdd}{The RDD to reduce} \item{func}{Commutative and associative function to apply - on elements of the RRDD.} + on elements of the RDD.} } \description{ This function reduces the elements of this RDD using the diff --git a/pkg/man/reduceByKey.Rd b/pkg/man/reduceByKey.Rd index 9c1de0ff0dcaf..08246dfed098a 100644 --- a/pkg/man/reduceByKey.Rd +++ b/pkg/man/reduceByKey.Rd @@ -1,16 +1,16 @@ \docType{methods} \name{reduceByKey} \alias{reduceByKey} -\alias{reduceByKey,RRDD,ANY,integer-method} -\alias{reduceByKey,RRDD,integer-method} +\alias{reduceByKey,RDD,ANY,integer-method} +\alias{reduceByKey,RDD,integer-method} \title{Merge values by key} \usage{ -reduceByKey(rrdd, combineFunc, numPartitions) +reduceByKey(rdd, combineFunc, numPartitions) -\S4method{reduceByKey}{RRDD,ANY,integer}(rrdd, combineFunc, numPartitions) +\S4method{reduceByKey}{RDD,ANY,integer}(rdd, combineFunc, numPartitions) } \arguments{ - \item{rrdd}{The RRDD to reduce by key. Should be an RDD + \item{rdd}{The RDD to reduce by key. Should be an RDD where each element is list(K, V).} \item{combineFunc}{The associative reduce function to @@ -19,7 +19,7 @@ reduceByKey(rrdd, combineFunc, numPartitions) \item{numPartitions}{Number of partitions to create.} } \value{ -An RRDD where each element is list(K, V') where V' is the +An RDD where each element is list(K, V') where V' is the merged value } \description{ diff --git a/pkg/man/take.Rd b/pkg/man/take.Rd index c842d3885c9fb..4960b25a78b2e 100644 --- a/pkg/man/take.Rd +++ b/pkg/man/take.Rd @@ -1,20 +1,20 @@ \docType{methods} \name{take} \alias{take} -\alias{take,RRDD,numeric-method} +\alias{take,RDD,numeric-method} \title{Take elements from an RDD.} \usage{ -take(rrdd, num) +take(rdd, num) -\S4method{take}{RRDD,numeric}(rrdd, num) +\S4method{take}{RDD,numeric}(rdd, num) } \arguments{ - \item{rrdd}{The RRDD to take elements from} + \item{rdd}{The RDD to take elements from} \item{num}{Number of elements to take} } \description{ -This function takes the first NUM elements in the RRDD and +This function takes the first NUM elements in the RDD and returns them in a list. } \examples{ diff --git a/pkg/man/textFile.Rd b/pkg/man/textFile.Rd index 02309e720c890..95d50a3b56bb6 100644 --- a/pkg/man/textFile.Rd +++ b/pkg/man/textFile.Rd @@ -14,7 +14,7 @@ textFile(sc, path, minSplits = NULL) parallelism.} } \value{ -RRDD where each item is of type \code{character} +RDD where each item is of type \code{character} } \description{ This function reads a text file from HDFS, a local file From fbc5a95f2ce8356f9d79a6e36b113cdbe3a79903 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Mon, 30 Dec 2013 14:13:06 +0800 Subject: [PATCH 084/687] Implement take() and takeSample(). --- pkg/NAMESPACE | 4 +- pkg/R/RDD.R | 107 +++++++++++++++++++++++++++++++++++++++++--------- pkg/R/utils.R | 7 ++++ 3 files changed, 99 insertions(+), 19 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index dac7aa1e2986d..61fd69cea0196 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -15,7 +15,9 @@ exportMethods( "partitionBy", "reduce", "reduceByKey", - "take" + "sample", + "take", + "takeSample" ) # S3 methods exported diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 85a40424f8308..c357a7765e0a9 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -11,8 +11,7 @@ #' @param jrdd Java object reference to the backing JavaRDD #' @param serialized TRUE if the JavaRDD contains serialized R objects #' @export -setClass("RDD", slots = list(jrdd = "jobjRef", - serialized = "logical")) +setClass("RDD", slots = list(jrdd = "jobjRef", serialized = "logical")) setValidity("RDD", function(object) { @@ -89,7 +88,7 @@ setMethod("collect", #' @rdname collect-methods #' @export #' @description -#' \code{collectPartition} returns a list that contains all of the elements +#' \code{collectPartition} returns a list that contains all of the elements #' in the specified partition of the RDD. #' @param partitionId the partition to collect (starts from 0) setGeneric("collectPartition", @@ -164,7 +163,7 @@ setMethod("length", #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) -#' multiplyByTwo <- lapply(rdd, function(x) { x * 2 }) +#' multiplyByTwo <- lapply(rdd, function(x) { x * 2 }) #' collect(multiplyByTwo) # 2,4,6... #'} setMethod("lapply", @@ -192,7 +191,7 @@ setMethod("map", #' Flatten results after apply a function to all elements #' -#' This function return a new RDD by first applying a function to all +#' This function return a new RDD by first applying a function to all #' elements of this RDD, and then flattening the results. #' #' @param X The RDD to apply the transformation. @@ -273,13 +272,13 @@ setMethod("lapplyPartition", RDD(jrdd, TRUE) }) -#' Reduce across elements of an RDD. +#' Reduce across elements of an RDD. #' -#' This function reduces the elements of this RDD using the +#' This function reduces the elements of this RDD using the #' specified commutative and associative binary operator. -#' +#' #' @param rdd The RDD to reduce -#' @param func Commutative and associative function to apply on elements +#' @param func Commutative and associative function to apply on elements #' of the RDD. #' @export #' @rdname reduce @@ -308,7 +307,7 @@ setMethod("reduce", #' Take elements from an RDD. #' -#' This function takes the first NUM elements in the RDD and +#' This function takes the first NUM elements in the RDD and #' returns them in a list. #' #' @param rdd The RDD to take elements from @@ -353,9 +352,80 @@ setMethod("take", resList }) + +#' Return an RDD that is a sampled subset of the given RDD. +#' +#' @param rdd The RDD to sample elements from +#' @param withReplacement Sampling with replacement or not +#' @param fraction The (rough) sample target fraction +#' @param seed Randomness seed value +#' @rdname sample +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 10L) # ensure each num is in its own split +#' collect(sample(rdd, FALSE, 0.5, 1618L)) # approximately 5 elements sampled +#'} +setGeneric("sample", + # TODO: `sample` shadows the same-name func in R base; should we + # rename this to `sampleRDD`? + function(rdd, withReplacement, fraction, seed) { + standardGeneric("sample") + }) + +#' @rdname sample +#' @aliases sample,RDD +setMethod("sample", + signature(rdd = "RDD", withReplacement = "logical", + fraction = "numeric", seed = "integer"), + function(rdd, withReplacement, fraction, seed) { + jrdd <- .jcall(rdd@jrdd, + "Lorg/apache/spark/api/java/JavaRDD;", + "sample", + withReplacement, + fraction, + as.integer(seed)) + RDD(jrdd) + }) + + +#' Return a list of the elements that are a sampled subset of the given RDD. +#' +#' @param rdd The RDD to sample elements from +#' @param withReplacement Sampling with replacement or not +#' @param num Number of elements to return +#' @param seed Randomness seed value +#' @rdname takeSample +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 10L) # ensure each num is in its own split +#' # exactly 5 elements sampled (may not be distinct) +#' takeSample(rdd, TRUE, 5L, 1618L) +#'} +setGeneric("takeSample", + function(rdd, withReplacement, num, seed) { + standardGeneric("takeSample") + }) +#' @rdname takeSample +#' @aliases takeSample,RDD +setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", + num = "integer", seed = "integer"), + function(rdd, withReplacement, num, seed) { + underlying <- rdd@jrdd$rdd() + arrs <- underlying$takeSample(withReplacement, num, seed) + if (rdd@serialized) + deserializeByteArrays(arrs) + else + arrs + }) + + ############ Shuffle Functions ############ -#' Partition an RDD by key +#' Partition an RDD by key #' #' This function operates on RDDs where every element is of the form list(K, V). #' For each element of this RDD, the partitioner is used to compute a hash @@ -376,7 +446,7 @@ setMethod("take", #' sc <- sparkR.init() #' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) #' rdd <- parallelize(sc, pairs) -#' parts <- partitionBy(rdd, 2L) +#' parts <- partitionBy(rdd, 2L) #' collectPartition(parts, 0L) # First partition should contain c(1,2) and c(1,3) #'} setGeneric("partitionBy", @@ -408,7 +478,7 @@ setMethod("partitionBy", # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is - # the content (key-val pairs). + # the content (key-val pairs). pairwiseRRDD <- new(J("sparkr.PairwiseRRDD"), rdd@jrdd$rdd(), as.integer(numPartitions), @@ -450,8 +520,8 @@ setMethod("partitionBy", #' sc <- sparkR.init() #' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) #' rdd <- parallelize(sc, pairs) -#' parts <- groupByKey(rdd, 2L) -#' grouped <- collect(parts) +#' parts <- groupByKey(rdd, 2L) +#' grouped <- collect(parts) #' grouped[[1]] # Should be a list(1, list(2, 4)) #'} setGeneric("groupByKey", @@ -512,7 +582,7 @@ setMethod("groupByKey", #' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) #' rdd <- parallelize(sc, pairs) #' parts <- reduceByKey(rdd, "+", 2L) -#' reduced <- collect(parts) +#' reduced <- collect(parts) #' reduced[[1]] # Should be a list(1, 6) #'} setGeneric("reduceByKey", @@ -525,7 +595,7 @@ setGeneric("reduceByKey", setMethod("reduceByKey", signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), function(rdd, combineFunc, numPartitions) { - # TODO: Implement map-side combine + # TODO: Implement map-side combine shuffled <- partitionBy(rdd, numPartitions) reduceVals <- function(part) { vals <- new.env() @@ -555,7 +625,7 @@ setMethod("reduceByKey", #' Generic function to combine the elements for each key using a custom set of #' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], #' for a "combined type" C. Note that V and C can be different -- for example, one -#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). +#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). #' Users provide three functions: #' \itemize{ @@ -640,3 +710,4 @@ setMethod("combineByKey", combined <-lapplyPartition(shuffled, mergeAfterShuffle) combined }) + diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 8d54ac7290d36..9eed06c835f4f 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -55,6 +55,13 @@ convertJListToRList <- function(jList, flatten) { } +# Given a Java array of byte arrays, deserilize each, returning an R list of +# the deserialized elements. +deserializeByteArrays <- function(byteArrs) { + arrs <- .jevalArray(byteArrs) + lapply(arrs, function(bs) { unlist(unserialize(.jevalArray(bs))) }) +} + # Returns TRUE if `name` refers to an RDD in the given environment `env` isRDD <- function(name, env) { obj <- get(name, envir=env) From a9a7436b0dd206cf21b4d068b076498bd7d48cda Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 31 Dec 2013 14:18:51 -0800 Subject: [PATCH 085/687] Add DFC example from Tselil, Benjamin and Jonah --- examples/dfc/DFC.R | 393 + examples/dfc/README.txt | 19 + examples/dfc/example.mat | 100001 ++++++++++++++++++++++++++++++++++++ examples/dfc/maskUV.cpp | 35 + 4 files changed, 100448 insertions(+) create mode 100644 examples/dfc/DFC.R create mode 100644 examples/dfc/README.txt create mode 100644 examples/dfc/example.mat create mode 100644 examples/dfc/maskUV.cpp diff --git a/examples/dfc/DFC.R b/examples/dfc/DFC.R new file mode 100644 index 0000000000000..65e5677f04db9 --- /dev/null +++ b/examples/dfc/DFC.R @@ -0,0 +1,393 @@ +# Import required matrix and C interface packages +require(SparkR) +require(MASS) +require('Matrix') +require(Rcpp) +require(svd) + +# Get the command line arguments +args <- commandArgs(trailing = TRUE) + +if (length(args) < 1) { + print("Usage: DFC.R [] ") + q("no") +} + +# Takes a pair (matrix, iterations) and applies the base factorization algorithm for the specified iterations +factorCols <- function(itersAndMat) { + iters <- itersAndMat[[1]][[1]] + mat <- itersAndMat[[1]][[2]] + UV <- apgBase(mat,iters) + list(UV) +} + +# Fast rBind for a list of matrices by pre-allocating +fastRowBind <- function(matrixList) { + rows <- sum(unlist(lapply(matrixList, function(mat) dim(mat)[1]))) + cols <- dim(matrixList[[1]])[2] + mat <- matrix(0.0,nrow=rows,ncol=cols) + rowIdx <- 1 + for (M in matrixList) { + Mrows <- dim(M)[1] + mat[rowIdx:(rowIdx + Mrows - 1),] <- as.matrix(M) + rowIdx <- rowIdx + Mrows + } + mat +} + +# Fast cBind for a list of matrices by pre-allocating +fastColBind <- function(matrixList) { + cols <- sum(unlist(lapply(matrixList, function(mat) dim(mat)[2]))) + rows <- dim(matrixList[[1]])[1] + mat <- matrix(0.0,nrow=rows,ncol=cols) + colIdx <- 1 + for (M in matrixList) { + Mcols <- dim(M)[2] + mat[,colIdx:(colIdx + Mcols - 1)] <- as.matrix(M) + colIdx = colIdx + Mcols + } + mat +} + +# Takes a list of factors of submatrices and projects them +# onto the column space of the first submatrix +# The factors (U,V) should be m-by-r and n-by-r respectively +dfcProject <- function(factorList) { + tproj <- proc.time() + U_1 <- factorList[[1]][[1]] + V_1 <- factorList[[1]][[2]] + #pseudoinverses + U_1pinv <- ginv(U_1) + V_1pinv <- ginv(V_1) + numParts <- length(factorList) + partSize <- dim(U_1)[1] %/% numParts + r <- dim(U_1)[2] + # To be returned + X_A <- U_1 + X_B <- V_1 + + for (pair in tail(factorList,-1)){ + U_i <- pair[[1]] + V_i <- pair[[2]] + # We want to have U_1*Vhat_i = U_i*V_i, so we basically just solve + Vhat_i <- t(((V_1pinv %*% V_1)%*%(U_1pinv %*% U_i)) %*% t(V_i)) + X_B <- rBind(X_B, Vhat_i) + } + projTime <- as.numeric((proc.time() - tproj)["elapsed"]) + list(X_A, X_B,projTime) +} + +# Randomized Projection method for the C step of DFC +dfcRandProject <- function(factorList) { + trproj <- proc.time() + V_1 <- factorList[[1]][[2]] + slices <- length(factorList) + partSize <- dim(V_1)[1] + n <- sum(unlist(lapply(factorList, function(UV) dim(UV[[2]])[1]))) + k <- dim(V_1)[2] + + # random projection default parameters + p <- 5 + q <- 2 + + # Random Gaussian matrix, break into chunks for simpler processing + G <- Matrix(rnorm(n*(k+p),mean = 0,sd = 1),n,k+p) + Glist <- lapply(1:slices, function(i) G[(1 + floor((i-1)*n/slices)):floor(i*n/slices),,drop=FALSE]) + + # Initial QR factorization + # Y = AG then factor Y = QR + Ylist <- mapply(function(UV,G) UV[[1]] %*% (t(UV[[2]]) %*% G),factorList,Glist,SIMPLIFY = F) + Y <- fastColBind(Ylist) + QR <- qr(Y) + Q <- qr.Q(QR) + + for (j in 1:q) { + # Yhat = A'*Q then factor Yhat = Qhat*Rhat + YhatList <- lapply(factorList, function(UV) UV[[2]] %*% (t(UV[[1]]) %*% Q)) + Yhat <- fastRowBind(YhatList) + QRhat <- qr(Yhat) + Qhat <- qr.Q(QRhat) + QhatList <- lapply(1:slices, function(i) Qhat[(1 + floor((i-1)*n/slices)):floor(i*n/slices),,drop=FALSE]) + + # Y = A*Qhat then factor Y = Q*R + Ylist <- mapply(function(UV,Qhat) UV[[1]] %*% (t(UV[[2]]) %*% Qhat),factorList,QhatList,SIMPLIFY =F) + Y <- Reduce('+',Ylist) + QR <- qr(Y) + Q <- qr.Q(QR) + } + + # Take only the first k columns of Q + Q <- Q[,1:k] + + # Finally project (Q*Q^+)*M + Qpinv <- ginv(Q) + Vlist <- lapply(factorList, function(UV) (Qpinv %*% UV[[1]]) %*% t(UV[[2]])) + V <- t(fastColBind(Vlist)) + randprojTime <- as.numeric((proc.time() - trproj)["elapsed"]) + list(Q,V,randprojTime) +} + +# Accelerated Proximal Gradient algorithm for factoring. +apgBase <- function(mat,maxiter) { + + tbase <- proc.time() # Timing code + + # load required packages + require('Matrix') + require(Rcpp) + require(svd) + + # Load and compile the fast C++ code + sourceCpp('maskUV.cpp') + + ######## Set Initial Parameters ##################################### + m <- dim(mat)[1] + n <- dim(mat)[2] + + IIJJ <- which(mat != 0,arr.ind = T) # list of nonzero indices + II <- IIJJ[,1] # nonzero row indices + JJ <- IIJJ[,2] # nonzero col indices + + L <- 1 # Lipschitz constant for 1/2*||Ax - b||_2^2 + t <- 1 + told <- t + beta <- 0 # beta = (told - 1)/t + num_sv <- 5 # number of SV to look at + num_pos_sv <- 5 # initial number of positive singular values + + U <- Matrix(0,m,1) # Factor of mat + Uold <- U + V <- Matrix(0,n,1) # Factor of mat + Vold <- V + mX <- sparseMatrix(m,n,x=0) # Sparse matrix approximating mat + mXold <- mX # mX of previous iteration + mY <- mX # Sparse matrix "average" of Xold and X + + # SVD Truncation Parameters + mu0 <- norm(mat,type="F") + mu <- 0.1*mu0 + muTarget <- 10^(-4)*mu0 + cat("mu :", mu, "\n") + ###################################################################### + + for(iter in 1:maxiter) { + cat("iteration: ",iter,"\n") + # Get query access to G = Y - 1/L*Grad + Grad <- mY - mat + # query oracle to Gk + f <- function(z) as.numeric((1+beta)*(U %*% (t(V) %*% z)) - beta*(Uold %*% (t(Vold) %*% z)) - 1/L*(Grad %*% z)) + # query oracle to Gk' + tf <- function(z) as.numeric((1+beta)*(V %*% (t(U) %*% z)) - beta*(Vold %*% (t(Uold) %*% z)) - 1/L*(t(Grad) %*% z)) + + # Create External Matrix + G <- extmat(f, tf, m, n) + + # Compute partial SVD + svd <- propack.svd(G, neig = num_sv) + + # Update Params + Uold <- U + Vold <- V + mXold <- mX + told <- t + + # Truncate the SV's and update the number of SV's to look at + s <- svd$d + Shlf <- sqrt(s[which(s > mu/L)]) + if(num_sv == num_pos_sv) { + num_sv <- num_pos_sv + 5 + } + else { + num_sv <- num_pos_sv + 1 + } + cat("num sv: ",num_sv,"\n") + # update number of positive singular values of X^k AFTER the above test + num_pos_sv <- length(Shlf) + + # Compute the factors U and V from the SVD + Sig <- diag(x = Shlf,num_pos_sv,num_pos_sv) + U <- (svd$u[,1:num_pos_sv] %*% Sig) + V <- (svd$v[,1:num_pos_sv] %*% Sig) + + # Compute mX = UV' using fast loops in C + msUV <- maskUV(as.matrix(U),as.matrix(V),II,JJ) # Call into C++ code + mX <- sparseMatrix(i=II,j=JJ,x=msUV,dims=c(m,n)) + + # Update Parameters + t <- (1+sqrt(1+4*t^2))/2 + beta <- (told - 1)/t + mY <- (1+beta)*mX - beta*mXold + mu <- max(0.7*mu,muTarget) + cat("mu: ",mu,"\n") + } + # Output + apgtime <- as.numeric((proc.time() - tbase)["elapsed"]) #Timing Code + cat("U: ", dim(U),"\n") + cat("V: ", dim(V),"\n") + cat("RMSE for submatrix: ",errorCal(mat,U,V),"\n") + + list(U,V,apgtime) +} + + +# Base stochastic gradient descent algorithm for matrix completion +sgdBase <- function(mat) { + + # Set Parameters + m <- dim(mat)[1] + n <- dim(mat)[2] + lrate <- .04 # learning rate + k <- .04 # parameter used to minimize over-fitting + min_impr <- .001 # min improvement + init <- 0.2 # initial value for features + rank <- 10 # rank of feature vector + min_itrs <- 10 + + # Initialize + minval <- min(mat) + maxval <- max(mat) + row_feats <- matrix(rnorm(rank*m,mean=0,sd = 0.2/sqrt(sqrt(rank))),rank,m) + col_feats <- matrix(rnorm(rank*m,mean = 0,sd = 0.2/sqrt(sqrt(rank))),rank,n) + rmse <- 2.0 # set rmse + rmse_prev <- 2.0 # set previous rmse + + # Find nonzero entries + nonzero_rowscols <- which(mat != 0,arr.ind = T) + nonzero_rows <- nonzero_rowscols[,1] + nonzero_cols <- nonzero_rowscols[,2] + nonzero_entries <- mat[nonzero_rowscols] + num_nonzeros <- length(nonzero_entries) + + # Each iterate descends in the space of rank i matrices + for(i in 1:rank) { + cat("rank: ", i, "\n") + t <- 0 + impr <- 0.0 + # Descend as long as we can make improvements + while(t < min_itrs || impr > min_impr) { + sq_err <- 0.0 + + for(j in 1:num_nonzeros) { + # find predicted val + predval <- t(row_feats[,nonzero_rows[j] ]) %*% col_feats[,nonzero_cols[j] ] + + # apply cut off + if(predval < minval) { predval <- minval } + if(predval > maxval) { predval <- maxval } + + # Find Error + err <- nonzero_entries[j] - predval + sq_err <- sq_err + err*err + k/2.0 * ((row_feats[i, nonzero_rows[j] ])^2) * ((col_feats[i, nonzero_cols[j] ])^2) + + # Update row and col features + new_row_feat <- (1-lrate*k)*row_feats[i, nonzero_rows[j] ] + lrate*err*col_feats[i, nonzero_cols[j] ] + new_col_feat <- (1-lrate*k)*col_feats[i, nonzero_cols[j] ] + lrate*err*row_feats[i, nonzero_rows[j] ] + row_feats[i, nonzero_rows[j] ] <- new_row_feat + col_feats[i, nonzero_cols[j] ] <- new_col_feat + } + # Calculate RMSE and improvement + rmse_prev <- rmse + rmse <- sqrt(sq_err/num_nonzeros) + cat("root mean squared error: ",rmse) + cat("\n") + impr <- rmse_prev - rmse + t <- t + 1 + } + } + cat("RMSE for submatrix: ",rmse,"\n") + list(row_feats,col_feats) +} + +# Calculate the root mean squared error of the matrix +# factorization UV' on the non-zero entries of mat +errorCal <- function(mat, U, V){ + # Find nonzero entries + IIJJ <- which(mat != 0,arr.ind = T) + numNonzero <- nnzero(mat) + II <- IIJJ[,1] + JJ <- IIJJ[,2] + mX <- sparseMatrix(i=II,j=JJ,x=maskUV(as.matrix(U),as.matrix(V),II,JJ),dims=dim(mat)) # Call into C++ code + # Frobenius norm/sqrt(num_nonzero) = root mean squared error + rmse <- norm(mat - mX,type = 'F')/sqrt(numNonzero) + rmse +} + +# Divide factor combine +dfc <- function(mat, sc, slices, iters, randProject=TRUE) { + sourceCpp('maskUV.cpp') + + # Cut the matrix by columns into several submatrices, one for each slice of computation + cols <- dim(mat)[2] + listMat <- lapply(1:slices, function(i) list(iters,mat[,(1 + floor((i-1)*cols/slices)):floor(i*cols/slices),drop=FALSE])) + + tover <- proc.time() # Timing Code + + # Create the RDD + subMatRDD <- parallelize(sc,listMat,slices) + + overhead <- as.numeric((proc.time() - tover)["elapsed"]) # Timing Code + + # factor each slice + factorsRDD <- lapplyPartition(subMatRDD,factorCols) + + # collect the results + factorList <- collect(factorsRDD) + matrixList <- lapply(seq(1,length(factorList)), function(i) list(factorList[[i]][[1]],factorList[[i]][[2]])) + subTimeList <- lapply(seq(1,length(factorList)), function(i) factorList[[i]][[3]]) + + # Timing Code + subTime <- max(unlist(subTimeList)) + cat("Time for subproblems: \n") + print(subTimeList) + + # Collect the results and project them onto a low rank matrix + if(randProject) { + cat("Doing random projection to combine submatrices...\n") + result <- dfcRandProject(matrixList) + } else { + cat("Projecting all submatrices onto first submatrix...\n") + result <- dfcProject(matrixList) + } + + # Timing Code + projTime <- result[[3]] + cat("Time for collection: ",projTime,"\n") + + # Compute the error in the prediction + error <- errorCal( mat, result[[1]], result[[2]]) + list(error,overhead,subTime,projTime) +} + +# Driver Code ############################################# + +# Initialize the spark context +sc <- sparkR.init(args[[1]], "DFCR") +slices <- ifelse(length(args) > 1, as.integer(args[[2]]),2) + +# Read matrix from file +maskedFile <- args[[3]] +maskedM <- readMM(maskedFile) +dims <- dim(maskedM)[1] +revealedEntries <- nnzero(maskedM) + +# Number of Iterations to run base algorithm +iterations <- args[[4]] + +# Determine Projection method +randProj <- T +if(length(args) > 4) { + if(args[[5]] == 'F') { + randProj <- F + } +} + +ttot <- proc.time() # Timing Code + +# Run DFC +outs <- dfc(maskedM, sc, slices, iterations, randProject=randProj) + +totalTime <- as.numeric((proc.time() - ttot)["elapsed"]) # Timing Code + +cat("RMSE for the entire matrix: ",outs[[1]],"\n") +cat("Total time for DFC: ",totalTime,"\n") +outs diff --git a/examples/dfc/README.txt b/examples/dfc/README.txt new file mode 100644 index 0000000000000..fd1f2596943a8 --- /dev/null +++ b/examples/dfc/README.txt @@ -0,0 +1,19 @@ +First, run R. Within the R interpreter, run: + +install.packages("Rcpp") +install.packages("svd") + +You are now ready to run our implementation of DFC with SparkR! +Type the following into the command line: + +./SparkR DFC.R [] + + Should be in matrix market format. We have included + a sample matrix file, called "example.mat", which is a + 1000x1000 entry noisy gaussain matrix with 10% revealed. + + is the number of iterations + + = T if you want to use the randomized projection, + F otherwise. + diff --git a/examples/dfc/example.mat b/examples/dfc/example.mat new file mode 100644 index 0000000000000..b63831ec63ce0 --- /dev/null +++ b/examples/dfc/example.mat @@ -0,0 +1,100001 @@ +%%MatrixMarket matrix coordinate real general +1000 1000 99999 +3 1 -.9650753891727823 +13 1 .027442759272197498 +17 1 .2733140617433729 +18 1 -.7340556416756879 +27 1 .15588124326702052 +33 1 .5152452067181288 +40 1 -1.104664661081575 +46 1 .7782024486888124 +47 1 -.046467679395642655 +52 1 2.5849127359270425 +70 1 -.6645107891628912 +94 1 -1.4008796914290222 +95 1 .029205396733255146 +102 1 -2.97925560316333 +132 1 .09096597510077215 +141 1 .5611907077251951 +164 1 1.2301828508839157 +165 1 -.7718548277230168 +172 1 1.1325389211648973 +190 1 .964712862034632 +208 1 .5258534922344492 +214 1 .44272245421830514 +235 1 -.7058018868632674 +247 1 -.2019326538529025 +248 1 .6368410900021068 +255 1 -.056975676546590366 +262 1 1.7014249179864418 +272 1 .4139325951445858 +286 1 .657949417711765 +293 1 -.5494809791858845 +299 1 1.3538794200738142 +304 1 .50405598078307 +310 1 .46402457292281685 +321 1 .180921217728562 +322 1 1.43800281861266 +342 1 -.6992451016563496 +345 1 -.01935948885811964 +365 1 -.14379846038044292 +376 1 .9995985960725632 +378 1 .2493648091411485 +387 1 .3406406221144367 +391 1 -.1572044716462238 +396 1 -1.5445456047793666 +402 1 .44547062019127937 +415 1 .4568397165496011 +416 1 -.813461244107129 +448 1 -.6676299970732854 +468 1 -1.201383199459984 +475 1 1.126850640989943 +480 1 -.421632915233148 +493 1 .49666570172734736 +527 1 1.1258958572128965 +579 1 -.023838345636757553 +582 1 -1.1142713880873334 +591 1 -.01925506016329831 +592 1 -2.40752127150329 +609 1 -.36528709833876144 +624 1 -.8784160754077898 +661 1 .7324465782683363 +682 1 .12494819034040433 +683 1 -.059648875505251 +689 1 -1.8763212488247842 +702 1 -.4443067935824285 +710 1 -1.327791919870426 +715 1 .5489334199856281 +723 1 -.6064644619647935 +735 1 .9097952146231988 +738 1 1.0155824583208324 +750 1 .8143181466683873 +752 1 -1.153851950478546 +770 1 -.6787014764379927 +780 1 -1.495236340141261 +792 1 -1.1001158087329233 +803 1 .7408998977999657 +809 1 -.715050344565861 +811 1 -.14496386816706996 +813 1 -.7009046904486069 +814 1 -2.235023846291991 +827 1 -.365109066174373 +852 1 -.4445482462626273 +856 1 1.0967777124015285 +873 1 -1.7623518303716834 +896 1 -.60242906841624 +904 1 .11783812695668017 +913 1 -.4887617596938987 +916 1 -.06621088910389554 +922 1 -.01179121827236454 +933 1 -1.1644229671976978 +936 1 -2.0428332422053668 +953 1 -.6474239052914893 +958 1 1.1325620605154114 +963 1 -1.6957347328240697 +966 1 -.8016902602650933 +976 1 1.741958207586582 +977 1 -.4733003198454624 +980 1 .17083949000545787 +982 1 1.5775795282701197 +988 1 2.383067994368054 +993 1 -.6759145988623183 +999 1 .7245098229597732 +6 2 1.0917691197736878 +9 2 1.2829334312850245 +11 2 -.6771057020935008 +30 2 1.392068464484814 +35 2 .8178866830669387 +43 2 2.583004235006646 +51 2 1.1056057642348962 +57 2 .7008387144910388 +60 2 1.3965055432991407 +62 2 -.15018293135481828 +96 2 1.269315340807692 +105 2 -.885462919270759 +106 2 -.9404862881941443 +108 2 2.0648800618544456 +121 2 2.0023600911210315 +141 2 1.5978340407478209 +145 2 .5917982706934073 +147 2 -.5984510101836817 +167 2 1.26691354462169 +173 2 -1.1119788872444534 +185 2 .0725536070970415 +236 2 .5842166690630857 +249 2 1.0235673548897468 +255 2 .784192025705218 +269 2 -.5122873970730435 +270 2 -.5268793325016254 +273 2 1.5038834334242237 +284 2 -.011742637948503911 +285 2 1.557674434526471 +286 2 -.8868129682008409 +306 2 -1.4074918232924143 +311 2 -1.6424981473003701 +314 2 -1.294683791740073 +315 2 -.1318414079480327 +316 2 1.7561936625756454 +322 2 1.8102490444156978 +324 2 .8487600583960693 +329 2 -.666213221158499 +346 2 -.45881526699267666 +349 2 -1.7997497295359077 +353 2 .1948772997601262 +354 2 -.7937230247523609 +359 2 1.455689280494431 +361 2 -.1704918104995222 +362 2 -.5452503415598324 +369 2 1.1124102946442656 +390 2 -.9218323577503318 +393 2 .9362714028001683 +407 2 -.08590536633696103 +408 2 .6207077386941914 +419 2 1.3293088852219967 +430 2 1.0297984372539806 +440 2 -1.6295303555369745 +443 2 .05780459110631231 +450 2 -2.040037214802594 +459 2 -.2896144994955623 +484 2 1.4468063034039107 +487 2 -2.3006457058348486 +489 2 -.9447227239391234 +497 2 .4472106772013792 +515 2 .8813317746729444 +520 2 .12356722804771658 +522 2 .19668568103099804 +526 2 .6640663690483496 +562 2 -1.907663186640122 +563 2 .3462984583455576 +576 2 -.0707882571038762 +580 2 -.03141785311565789 +607 2 .9235875797247977 +613 2 1.3566534854495909 +633 2 -.27542955908552696 +638 2 -.6874974797699414 +648 2 .6811740648587197 +649 2 .7390751086425169 +652 2 .6866487893118679 +653 2 -1.2620752945066276 +654 2 -.42817771694966195 +672 2 .0780223523929203 +692 2 -1.459792392113333 +719 2 -.4503728066286463 +750 2 -.8918841444708168 +753 2 -.9833831719366004 +763 2 .9334423020009908 +779 2 .8960651545075122 +780 2 .555660398669094 +783 2 -1.0286352824498872 +796 2 -.5793497311459301 +807 2 -.8284912382143725 +810 2 2.643159193966524 +815 2 1.862360179862158 +848 2 -.6619951015349742 +855 2 -.3171491846975431 +858 2 -.7124774478583235 +880 2 -1.3886490037368495 +881 2 .30862916274171337 +900 2 1.1733136735750958 +901 2 .8813522480561969 +907 2 -1.786017714053841 +908 2 1.894130599859394 +916 2 .29088960163103417 +939 2 -.20075600312107644 +950 2 .46988825972452236 +962 2 1.6267268680884215 +972 2 .5486221221331551 +984 2 .7710068810263183 +11 3 -1.0719098236708575 +15 3 .17479499000508555 +31 3 .25752051387941277 +34 3 -.011221359864719036 +37 3 -.03366266343777756 +62 3 .5308770016366252 +81 3 -.6006198758028332 +94 3 1.5664515498542577 +107 3 -1.2124352756741923 +119 3 -1.8617154126264257 +136 3 -.277495217316616 +139 3 -.590587515497705 +153 3 .01070459661515901 +162 3 -.29859326718367646 +164 3 .9698857859199288 +171 3 1.1356268358108834 +183 3 -.47425694969363286 +186 3 -1.1029160907922693 +200 3 1.120716814432935 +203 3 .12419632280625466 +212 3 -.840176885400341 +215 3 -.006030405681676683 +219 3 1.018984186512253 +233 3 .5950242919348767 +242 3 -1.5000751945827635 +254 3 -.18916207887525494 +273 3 .27109749169221997 +276 3 -.17232563936972786 +286 3 .05292788785904094 +288 3 -.5068049229421359 +295 3 .7389997072351288 +312 3 -.6450938517935587 +325 3 -1.2547807032221012 +327 3 -.29953326154954524 +328 3 -.27248802341424805 +336 3 -.2598269353105859 +372 3 .4175300064289378 +373 3 -.02011168195394017 +386 3 -.8081570525198618 +390 3 -.6213176304687703 +397 3 .2718983800315414 +410 3 .33415797006868553 +414 3 .1618508292100309 +425 3 .291143620098459 +447 3 -.7232783297903655 +461 3 -.8882473816376558 +467 3 .19531564483150166 +478 3 -.4459666886220118 +482 3 1.3066753678519147 +490 3 .5688855182612373 +494 3 .5326829920823608 +502 3 .13254540943910237 +503 3 .1764943498386518 +537 3 .48197087814715667 +541 3 -.7803424440726658 +574 3 .3114317457336066 +592 3 1.298061899174722 +607 3 .19700205073130692 +609 3 -.3769338574912668 +621 3 -1.3811387146544178 +631 3 -.06861401739033088 +635 3 .4229385543157648 +644 3 .6250458081396149 +669 3 -.22268587870795703 +671 3 -.002367171947852381 +676 3 1.2233576996926996 +687 3 -.24466769081814876 +691 3 -.8791447031727959 +693 3 .12912359960174408 +694 3 1.0873886060324005 +704 3 -.1445012480322525 +705 3 1.3955022814099274 +724 3 .7051651636942317 +725 3 -.21129222819810384 +731 3 -.3632631335444913 +740 3 2.472100932918257 +742 3 -2.078705415567248 +754 3 -.5924030193252098 +756 3 -.3986646682758746 +777 3 .10046703520440244 +778 3 -.4430127991216396 +780 3 -.029515126218947203 +782 3 .41559984696158814 +787 3 -.05137623303346017 +789 3 1.0375067436946757 +792 3 .4926773282490402 +797 3 -.1017995447685906 +803 3 -.321488650902338 +813 3 -.041210074867503665 +825 3 -1.3981120110780754 +834 3 .35411182701582705 +854 3 -.3752823938789575 +858 3 -.3404502416428724 +860 3 -.5758194466642699 +861 3 -.471177338423169 +865 3 .3991895721715806 +879 3 -1.6593918452418612 +880 3 -.7260203711998985 +884 3 .2410796282683902 +892 3 -.41431503801728264 +916 3 .4323536895336385 +923 3 1.414990963573125 +934 3 1.7920713159560127 +941 3 .7415067307945218 +965 3 -1.4492886892936698 +974 3 -1.0619454315021 +982 3 -.5640879445901351 +994 3 -1.4232696747986828 +998 3 -.21157853129371051 +9 4 -2.222347545100131 +33 4 -.07275217848108888 +35 4 .16164355855860033 +42 4 -.46745196436470215 +45 4 -1.418917590113682 +51 4 -.24783087679019522 +55 4 -.09724093258671665 +65 4 1.18834324100774 +78 4 -.3724319385918872 +91 4 -.813073368541914 +101 4 1.4733744359042487 +104 4 .5511079043349141 +117 4 .6255500286226522 +125 4 1.6943406737228037 +126 4 -.1546873650242401 +140 4 .4770074004483893 +150 4 -1.0849807714798865 +152 4 -2.171207524232599 +162 4 .07729687799982558 +170 4 .19609358612775235 +171 4 -.581170896036264 +183 4 .5545734738119402 +184 4 .350568163181114 +187 4 .6259755666133885 +206 4 -.8877598024902578 +212 4 .5364668309607297 +216 4 -.0688439768168739 +227 4 -.35686608776896955 +238 4 -.4085545021208913 +246 4 -1.0525561797877854 +250 4 -1.1795287053669632 +251 4 .17599914256073176 +265 4 -.8910689427976664 +269 4 .1440075726080295 +280 4 1.1136048769586886 +281 4 -.6808047390159039 +282 4 -1.1896571625802816 +284 4 .7485757433256831 +291 4 .7350896806387052 +300 4 .4968572251237235 +314 4 -.10458818648203247 +331 4 .5083929601887763 +336 4 -1.844182199639845 +340 4 -.13459690007043454 +342 4 -.09314898664116437 +343 4 .21788854603505478 +358 4 -1.5926690990251786 +374 4 -.2690957962200258 +381 4 -1.2213703438107404 +393 4 -.658783785530266 +398 4 -.044030825492910604 +409 4 .08789660651403755 +421 4 .3340320020993794 +424 4 .15624993181581148 +462 4 -.03619565505981159 +477 4 .47206166852888454 +497 4 -.12125497898059145 +501 4 -1.3941467881082277 +511 4 -.27882471384776397 +520 4 .2909581696037223 +527 4 -1.075801834389201 +547 4 .8840169595730147 +553 4 -.002782142674669766 +560 4 -.21701972388675045 +565 4 -1.51788258528423 +588 4 .13374130877891488 +603 4 -.43625285622609505 +619 4 1.3260211750961468 +621 4 .03151574610979964 +625 4 1.100874504501118 +628 4 .38195342376963687 +634 4 -2.0665029325531066 +637 4 .30743834765401795 +640 4 -.26142685991286196 +645 4 .8686047393712115 +646 4 -.30372385239098826 +650 4 .34244776767332896 +657 4 -.4176003432581453 +668 4 -.33349942267974814 +719 4 .08543448588896291 +723 4 .5721283976795776 +740 4 .8686944960539423 +749 4 -.3032869290848199 +754 4 .2244753738230868 +781 4 .5406833595793787 +785 4 -1.1580215336812028 +786 4 -.5853815788094215 +804 4 -1.028925815579889 +806 4 .049198106477594525 +821 4 -.3291405572662923 +822 4 .9247254936645776 +825 4 .046796588117139076 +829 4 -1.14471094522726 +848 4 -.3511737251407629 +891 4 .29732027838420505 +903 4 .27908128944579 +913 4 1.6942650494152691 +914 4 .8079719818497563 +917 4 .08287552975980729 +919 4 .5973934724404315 +934 4 .9668442882525479 +939 4 .7039650123234902 +942 4 -.959187442506319 +967 4 .39596022591143204 +971 4 -.13552505367551382 +975 4 -.7502181428282978 +981 4 .004874400155456787 +3 5 .5802952119439417 +26 5 .7508738659433 +34 5 .1983679895836788 +43 5 -.4041519082679409 +45 5 .2644758766555975 +60 5 -.9548434758163352 +76 5 1.4606359276072767 +88 5 .3633759721002092 +99 5 .44185470031741747 +125 5 .1004914827587567 +137 5 .2594850734096633 +139 5 -1.213199919941382 +142 5 .7373639850481141 +150 5 .47538916832121897 +153 5 .39516407635942813 +166 5 .6372217401379099 +187 5 .10887109087571821 +193 5 1.145193890997891 +197 5 .8880942414708836 +203 5 -.9270302240985216 +204 5 -1.0993470998733308 +205 5 -.4095108757983451 +217 5 1.2480060091319145 +224 5 .2459287076893641 +235 5 .969531724412078 +239 5 .23811591947126484 +251 5 -.2767348484936707 +252 5 .3273193057769377 +260 5 -.46659955903310807 +261 5 .9548103284269265 +274 5 -.6037053809920341 +279 5 .31020455087274384 +281 5 .9718507791105235 +283 5 .16067707042971888 +286 5 1.4384575733973854 +287 5 -.05203107961320724 +292 5 -.20359046973900735 +298 5 -.21065688747128508 +314 5 .3000248807018693 +332 5 .8043355885047129 +348 5 -1.0832741519174847 +361 5 .11705688086874869 +363 5 -.09385414714152587 +368 5 -.528247473138306 +376 5 -.6567756885439715 +388 5 .13088710532407752 +400 5 -.17988697823023375 +412 5 -.07437519342620992 +416 5 -.4981871150392305 +437 5 .2431025402489136 +446 5 -1.0705396021246618 +448 5 .3370675434587495 +455 5 1.1908930686106782 +458 5 -.4461291698563858 +467 5 .9335547921093934 +469 5 -.6442731790857967 +488 5 .05067534162605902 +493 5 .7545955318890859 +496 5 .024546442233662643 +501 5 1.0241827499550196 +507 5 .4407940491432488 +516 5 -1.3000881555361818 +551 5 2.1343517862980774 +554 5 -.982881210988599 +564 5 .2937050581302254 +596 5 .9318719619156648 +609 5 -.819608874701478 +610 5 -.35067517996410574 +629 5 .3160383858203975 +635 5 -.3557253566530662 +650 5 .38905646750347517 +664 5 .122522411231572 +668 5 -.3224383135923646 +669 5 1.2418579977192366 +671 5 .48550780986146336 +693 5 -.27994142224725843 +694 5 .15276380079379848 +702 5 .2276177224750644 +704 5 -.746880304037474 +711 5 .3334230537521854 +721 5 -1.4543713877093953 +723 5 .6354751791406257 +725 5 .9021213864954278 +733 5 1.6209903058849435 +777 5 -.5547702730984286 +778 5 .42635726830430853 +805 5 -.8724654338069636 +807 5 -1.3766847989938509 +813 5 .2711058132382507 +815 5 .22839326328591228 +816 5 -.07160040553382399 +824 5 -.7172627330452074 +839 5 .002572736059822424 +848 5 -.5072436790233656 +853 5 .47821853247114665 +861 5 -.9812710869159204 +862 5 -.2713154389217948 +869 5 .11155984053483502 +907 5 -.1415922697749808 +909 5 -1.0058478734717318 +914 5 .31650151532894905 +949 5 -1.34348514390133 +952 5 -.11204178659345716 +959 5 .9222316669844491 +967 5 .8117443561642483 +984 5 -.24057810389930231 +994 5 .28772055387015505 +996 5 -.6205647383351257 +27 6 -.7036214465154359 +28 6 .11899233413999968 +31 6 -1.0297826767976141 +37 6 -1.1229068243819214 +40 6 .23647579440023325 +59 6 -.5394989649712639 +68 6 -.5171832181973068 +73 6 .697420086059468 +77 6 .28219078057589714 +100 6 -.5247532019579773 +108 6 -.2634496024379327 +113 6 .09143142189624569 +127 6 -.27694904980332785 +129 6 2.514500823831737 +139 6 .6711981028539944 +166 6 1.5210885156595857 +181 6 .7245697660206727 +197 6 -.3176424023909451 +198 6 .5641722608943115 +206 6 -1.0971389966529959 +212 6 -.03539260030154674 +214 6 -.6586382133210208 +249 6 .3522890122865078 +250 6 -.7237038637451689 +278 6 -.7477083373644041 +287 6 1.1398295461879757 +292 6 1.4529858556139692 +313 6 .8242693245866599 +328 6 -.13721212575111957 +346 6 1.0108260812525733 +352 6 1.2849872902393378 +363 6 -.16246947018296387 +365 6 .3975451759792117 +377 6 -.0021319596847892003 +385 6 -1.8050564974104075 +392 6 .9179925944039145 +398 6 -.599328932331017 +400 6 -.26885856344393316 +404 6 .6644253851377153 +419 6 1.278529884946125 +420 6 1.6344737587059646 +434 6 .2156418183591658 +436 6 .9192398718862086 +456 6 -.7170518437388533 +459 6 .6460902375123951 +469 6 .46264941750424315 +486 6 -.6417296893204033 +487 6 .02160341545537533 +490 6 .6844650801975654 +501 6 -1.2862360974016591 +516 6 -1.0090402568786818 +517 6 -.36417318432587903 +518 6 .2554390498723493 +542 6 -.0832794782214838 +554 6 .2954931228142225 +556 6 -.594109088266457 +567 6 -.2776602473531113 +576 6 -.17061763676071118 +577 6 -1.2649161633191566 +578 6 .40157696778684904 +595 6 .5683136051311299 +598 6 -.007514166571379974 +609 6 -1.216929875196106 +615 6 .39745438123286597 +623 6 .37942528761300975 +637 6 -.33277756776525097 +647 6 .586030786974455 +650 6 -.08059074848045336 +660 6 -.9293736841931224 +662 6 -.19841532595663589 +665 6 1.0569038821989278 +669 6 -.37938335199017315 +675 6 -1.8586601532628872 +693 6 .5053288869155868 +696 6 1.5884231809283411 +701 6 .7688692516312824 +716 6 -1.1608682054002921 +717 6 .885551592930113 +721 6 .22748967433190476 +737 6 -.05449931504441148 +740 6 .5361955251122865 +758 6 1.136730501085291 +771 6 .9814454033327982 +782 6 -.2555945631276051 +807 6 .3599567232376236 +822 6 .4882847341038878 +826 6 -.01493733446809404 +833 6 -.12439376062258556 +847 6 .6629515053248782 +853 6 .05071433369628001 +874 6 -.7389798360862941 +879 6 -.8636876067738899 +889 6 .12442224575324404 +901 6 -1.9797158139116569 +903 6 -1.123295986579759 +923 6 .9165408966223989 +970 6 .6261717114612476 +971 6 .6211548223176424 +975 6 .30016110831896503 +990 6 -1.6599662994352953 +5 7 1.6716266984909676 +13 7 .7674743791931149 +24 7 .9171772694010467 +28 7 -.44069243096180744 +38 7 -1.4100847590644683 +42 7 -.7873746333696605 +59 7 3.0794586412797273 +68 7 -.8809456780247451 +91 7 -1.6802601373883534 +105 7 1.2013927947713758 +124 7 -.8393396838263799 +144 7 .2063006163035504 +147 7 1.7550306237751854 +148 7 -.5651608840101646 +154 7 .0954523157427686 +169 7 .10859378405755514 +185 7 .008270165473689861 +195 7 .2603310257090184 +199 7 .8129779904743242 +213 7 .22232748682429793 +232 7 -.4032877651319446 +233 7 -.46860483324631913 +251 7 2.3241586366673763 +282 7 -.8601868341756591 +293 7 .5059583436049018 +297 7 1.34835306727892 +309 7 -.09249733004864388 +325 7 .014300928904782323 +328 7 -.29582197633301144 +341 7 -.7801474793966572 +350 7 -.9442020194919829 +362 7 .34027367879328185 +392 7 2.2906793563983823 +396 7 -.35822863101242286 +401 7 -1.6322817100739155 +403 7 .2184368345691909 +418 7 -1.0553265060319204 +421 7 -.5576288825050293 +476 7 .4826540411950274 +494 7 -.47987883794123515 +499 7 -1.9574794589623354 +501 7 -1.2865331725415616 +503 7 1.1062001258118885 +517 7 -.6860372241264906 +541 7 -1.8089774846762086 +542 7 -1.032552023474924 +554 7 -.9285571545193236 +557 7 -2.4254120694312147 +559 7 2.3497361102563707 +561 7 .33994499494552927 +572 7 .5055918308943488 +576 7 -.08643314797418192 +577 7 .3850940392168122 +581 7 -1.771819720481633 +582 7 .7907295941737529 +584 7 .176409827672402 +585 7 -1.3118600491824857 +591 7 .46399305584365463 +600 7 .4362395135436965 +602 7 -.39420004602267106 +603 7 -1.4176301951318417 +613 7 -2.1175214227891517 +614 7 -.876451364815877 +615 7 .29090240599809314 +616 7 -.13914592186856622 +624 7 -1.587079028224713 +630 7 1.1162504652737553 +653 7 2.2057634344584085 +659 7 -1.323856190756775 +679 7 -2.6180249878609017 +681 7 -.7102988299095546 +685 7 1.204101493443434 +699 7 1.37596252613054 +706 7 .031829384424093526 +716 7 -1.0347845342903534 +723 7 1.239211401031736 +725 7 -1.6977701961151994 +732 7 -.5109912503085754 +737 7 .9874417624971434 +745 7 -.8439188077673636 +746 7 -.0934938163607193 +747 7 .9429387612566557 +764 7 .7221377679754619 +770 7 -1.244296071405503 +780 7 -.8076147216052209 +786 7 .8617245514135796 +787 7 -.48288908893770943 +796 7 1.2587766255847193 +804 7 -.8762359830699793 +812 7 -1.6669081958681133 +813 7 -2.9575454941919497 +829 7 -.37306724349935994 +835 7 -.9580595127568532 +841 7 .6301615577432197 +844 7 -2.711453402891621 +848 7 .7927673712308166 +855 7 -.5999558048674807 +864 7 -.3614520610945278 +868 7 -.7641236254701791 +871 7 -.38753576139192447 +879 7 -.009752878933047493 +893 7 1.066341049990335 +915 7 -.005567327271024424 +938 7 -.32463988501317526 +948 7 1.2971549730690661 +974 7 -.7203066836605504 +977 7 .8273258528179853 +5 8 -.4572407222034704 +11 8 1.6831183520240227 +12 8 .17103201256166278 +22 8 -1.6027535639813317 +49 8 -1.254770165813688 +58 8 1.220455639026425 +62 8 .6106402138558082 +65 8 -1.4203894663440857 +67 8 -.4210197883370592 +73 8 -.6457985842010214 +90 8 -.2846438143608595 +91 8 .6689373650801862 +92 8 .4507027005290763 +93 8 .013375040956371292 +98 8 .8000883276001304 +100 8 -.23166642865355933 +114 8 -.19113078377021617 +154 8 .20783740792117583 +164 8 -.05652944542907708 +169 8 .09867277726346294 +190 8 -1.021189097072455 +201 8 .2391780169195171 +204 8 -.15283622031586144 +206 8 -.30275554625471496 +223 8 1.211160961290269 +229 8 .2965956097841304 +233 8 -2.0033839719822395 +236 8 .7341594046943516 +272 8 -.5569174283209841 +274 8 -.48643802312143103 +277 8 -.36319994559188273 +279 8 -.7821655427611868 +287 8 -1.0946611086849505 +303 8 -.7749844527315697 +309 8 -.25196947288143046 +310 8 -.28008918106460023 +313 8 -.01865958574084836 +347 8 -.7662344234634381 +353 8 -1.0045185942409858 +356 8 -.9158585686486417 +362 8 .03267331621973375 +369 8 -.5456647615452884 +373 8 .8510160384650419 +376 8 1.1909145137627628 +381 8 -.5563971432436917 +390 8 .945210010522818 +394 8 .6394296511109815 +405 8 -.3416169131529548 +419 8 -.003258646050085412 +438 8 -.5065846031410253 +444 8 -.6302548085213439 +445 8 .23709654930320304 +462 8 -1.426276177583183 +466 8 .2148598595093708 +484 8 1.5467855263905224 +487 8 -.07060807043117068 +497 8 .19119056435443327 +525 8 -.28328068136409734 +532 8 .17611070522750577 +539 8 -.5493353140155246 +548 8 -.09688026407502648 +567 8 .8882803511325812 +571 8 -.19302223193905935 +577 8 -.03245638106475488 +593 8 .8158116009803604 +602 8 -.5810399141693656 +605 8 .7687633980149488 +611 8 .8498238576826558 +622 8 -.7823741953169893 +625 8 -.9920101509717103 +634 8 -1.1582751215631393 +636 8 -.22284390499711493 +639 8 -1.2776402298437461 +641 8 .46360560796386296 +651 8 -.2133817493168086 +666 8 .11309144437387117 +668 8 -1.2743652843118174 +681 8 -1.345447563421137 +694 8 -.2136598084258509 +697 8 -1.0468347763111596 +703 8 -.540893537734283 +706 8 -.8099321360925081 +710 8 .8761614460418179 +713 8 .5082421642938948 +717 8 -1.282988152764682 +735 8 .7714680705062233 +741 8 .44256991679522434 +763 8 .41534923465820067 +777 8 -.6987569045370013 +780 8 .32547797810447077 +782 8 .33884960820871507 +787 8 .3582602556742298 +788 8 .8874712084218321 +790 8 -.4687676352229574 +794 8 -.5811771021171016 +834 8 .08438010118780179 +850 8 1.0443941442312186 +852 8 -.5150821815363789 +874 8 -.21008514726912728 +878 8 -.0814673346505924 +894 8 .6984294384108576 +899 8 .4030015845134836 +902 8 -.8340229717723551 +903 8 .5296911104073428 +908 8 -.6097199356909326 +922 8 -.06298040045715939 +935 8 -.0025886036259072445 +941 8 1.383889054556246 +954 8 -.41747136936125206 +956 8 .4532279380923157 +975 8 -.596735946827287 +981 8 -.5666664318332997 +988 8 -1.0929563866386693 +7 9 -.2695987639301383 +11 9 .08122949278860982 +19 9 -.4254467155741001 +57 9 1.1554682773488354 +93 9 -.3041621585664956 +99 9 .3333309067246158 +102 9 -.8936721486191582 +117 9 .44617653560889553 +123 9 -.6888397919627611 +126 9 -1.591085289721163 +133 9 1.0068763420581437 +142 9 1.0283524712866083 +149 9 1.231894207421209 +160 9 -.6537330781422657 +183 9 -.3199428384602221 +188 9 -.6090250288165687 +192 9 .2086879104689376 +195 9 .08887435673493412 +196 9 -1.233305822347445 +197 9 .17337082804639223 +200 9 -.4708161307854195 +215 9 .28725269759451066 +216 9 1.5915040684589004 +217 9 1.2832539003844465 +221 9 -1.5095032045306753 +243 9 .08837349325309532 +244 9 1.6856133085642417 +252 9 -.2948982964363473 +257 9 .42306465555897 +262 9 -.26509125116563975 +267 9 -1.2744622016237728 +276 9 -.02920685861471954 +283 9 -.11302119290658345 +296 9 .09701902837887129 +335 9 .8468123487414677 +341 9 -.15867315298228152 +349 9 -.5010228749273506 +374 9 -.16694503358702453 +396 9 -.2136777901469825 +397 9 -.8221375893713538 +408 9 1.006307496654604 +409 9 1.7736926028521403 +416 9 .8724292172628567 +422 9 .281046376618367 +425 9 .3984857329051384 +428 9 1.992241696149744 +448 9 -.9266265024393534 +458 9 1.6380805606262079 +464 9 1.665488574476507 +471 9 1.2173481154476025 +476 9 -.450007392074992 +515 9 -1.4753280328694145 +525 9 -.4942537707728072 +548 9 .4093148079398454 +556 9 -.6926846744126562 +578 9 .09551512469300039 +590 9 -.33416928978444993 +591 9 -.14907003342641095 +598 9 .45605242433970583 +601 9 .1437410388407795 +603 9 .16330561998958262 +604 9 -.5200353343676463 +628 9 .5237874710034781 +631 9 -.2419611033916501 +664 9 -.40702565506630994 +723 9 -.9417461128748869 +727 9 .07547811317074166 +732 9 -1.6681681417229541 +743 9 -.09408134421278982 +745 9 -1.3471805922927333 +752 9 -.8799674278672818 +759 9 -.7530432775026786 +769 9 .3087996916547723 +784 9 .3793531747292037 +812 9 -.42678395361237736 +821 9 -.6257828312501192 +827 9 .7943376617948078 +828 9 -1.3127182237483714 +833 9 .9142953708990857 +836 9 -.09542532715844629 +845 9 -.27239694028613726 +846 9 .7253052592770934 +876 9 -1.0289254616839283 +887 9 .9217799470288021 +897 9 -.4185695592277315 +907 9 .6124624232177872 +913 9 1.7102642678702553 +927 9 -1.2370168979360088 +946 9 -1.091790837531072 +949 9 .21539425509572507 +963 9 1.4002332946326155 +964 9 -1.101121731517189 +971 9 -.002667694712367885 +974 9 1.2599482390440861 +975 9 -.057127178653642544 +981 9 -.2645818425534425 +2 10 .20235070713936648 +5 10 -.39342765703074917 +15 10 .526449224539627 +17 10 -1.1289369517060661 +36 10 -.5954045660047362 +40 10 -1.3587057284982906 +73 10 -1.682319164199287 +75 10 -1.5835821504748968 +76 10 .1683552060088619 +81 10 -.9681792221938608 +83 10 -1.5022564522647506 +94 10 1.060613526913584 +100 10 .12213898768682727 +102 10 .18152135488012974 +110 10 -2.2732770640698394 +129 10 -1.7133746223668764 +167 10 -.6960012608821842 +171 10 2.9772458886525786 +175 10 1.1536152709123453 +179 10 .892232488073014 +184 10 1.4355527767817187 +188 10 .0276216464977707 +191 10 -.2742489047488022 +201 10 -.811120376310028 +211 10 -.16585131904768236 +216 10 -.7149265291809418 +225 10 -.48191946618394543 +229 10 -.2124847366250252 +276 10 -.2417371077307215 +300 10 .7705340095325193 +311 10 1.921875018893293 +322 10 -.023479186840885534 +350 10 -.9322689565641179 +374 10 -.8661854376950779 +382 10 .26209878203459885 +408 10 -1.2363018937050443 +410 10 .762010105486609 +440 10 .241575975262431 +441 10 -2.6870835080883517 +448 10 .03379513653970542 +449 10 1.947211644161888 +477 10 .12061831458481853 +479 10 .5842237842409428 +496 10 -.05809352209415698 +505 10 -1.4250932749730651 +508 10 .7925020913098988 +516 10 .4556689884129424 +517 10 .875683389991599 +521 10 .1452639747774483 +527 10 .7667489242313746 +555 10 -1.1664652398727398 +600 10 -.5311429478522532 +629 10 -.435271961150389 +632 10 .6784517860370782 +667 10 -.057862437661873586 +674 10 -1.0105601417779209 +685 10 1.4559744245938595 +690 10 -1.5388900147133875 +700 10 -.45299057066416676 +715 10 -1.141816899913797 +728 10 .05525656262094748 +741 10 .39148032860057835 +748 10 .33977906904825944 +755 10 -.6543306208181418 +769 10 -1.5321918624394981 +770 10 -2.3465227240217517 +794 10 1.142689224748942 +822 10 1.2879804835297946 +827 10 -.6805328588428553 +830 10 .049903098326358294 +831 10 .953827862503806 +843 10 -.19914098229876365 +853 10 .06569504996268373 +858 10 .0712195832738555 +866 10 2.6118672205739752 +875 10 -.5023959638768872 +894 10 2.734187067664024 +896 10 -.844285692026251 +904 10 -1.1321010308941744 +913 10 -.29420890779137204 +914 10 .37842684723792613 +918 10 -.4375037974215885 +937 10 -.08482772425514079 +938 10 .47033656952364045 +947 10 -.8966003180787034 +948 10 1.0632032830127247 +956 10 -.21251038193183905 +957 10 -2.0519444259164508 +962 10 -.003718436197280756 +979 10 .5794339370306606 +983 10 -.6126251985307587 +986 10 -.5016854805410625 +988 10 -.8008242821874942 +992 10 -.2812625843554877 +24 11 1.7926073783421628 +34 11 .13442534982389193 +42 11 -.3474116686316312 +53 11 .45496074402325803 +60 11 .13846668190804068 +65 11 -1.4426319734131623 +72 11 -.17315651553577982 +91 11 .6757652395015319 +107 11 -2.0048867889850612 +114 11 1.2902530134930186 +117 11 1.5038906107788264 +132 11 .4247244626981235 +149 11 -.8338190579437836 +154 11 1.5794579691929738 +164 11 .9349550522478931 +167 11 .7775661406271983 +169 11 .3754912340303349 +172 11 -.44391663227949385 +174 11 -.3046525493468557 +175 11 1.3542620259925404 +178 11 -.3358953986102493 +179 11 .38435248180432535 +182 11 -.2755477899835842 +190 11 -.810078206464782 +191 11 1.3370298019033775 +204 11 -.6450164414198212 +205 11 1.3164553367877245 +211 11 .6811405687649987 +212 11 -.5089120339962205 +222 11 -.5487558764849514 +223 11 1.1473287951787452 +226 11 .7026842866889642 +231 11 1.505131881172001 +247 11 -.9179045407588624 +255 11 .3979528946637285 +278 11 -.029462892147744644 +282 11 .3494316687885583 +286 11 -.02533374439655864 +293 11 -.8870767357719975 +301 11 -.3171151149391944 +304 11 -.9900713618387595 +307 11 .09159400863688014 +329 11 -1.8627808958026675 +342 11 .43703829809898453 +348 11 .9937864988818321 +354 11 -1.1898280369755385 +357 11 .21588046167954894 +374 11 1.7004017835647967 +376 11 -.9465983442010208 +379 11 1.0351980115740622 +381 11 -.3551475488461909 +384 11 .22568804185655117 +406 11 -.3732749329808046 +416 11 -.7586136447822587 +422 11 -.8950368517292246 +423 11 -.8299145059891049 +425 11 .37801152571314156 +440 11 -.21478588586313382 +447 11 -.4677166429263584 +455 11 .1817508468042948 +456 11 .18555374465187768 +468 11 .32201152981526976 +478 11 -.9217510236702701 +481 11 1.198629973052535 +484 11 1.0690816737834499 +513 11 .46003850468837215 +554 11 -.30916277809489695 +560 11 .14187563507484838 +585 11 -.9064613370152831 +625 11 1.8040933398311505 +626 11 -.22356689741793684 +631 11 .23791060490062088 +645 11 .566129770540371 +648 11 1.1816798585082513 +651 11 1.5274385430214599 +654 11 .7501882442058078 +669 11 -1.168415354373909 +709 11 .6367321866511343 +710 11 -.22136618314287537 +717 11 -.43257296690060215 +745 11 .30010634327512364 +749 11 .007054160903530907 +762 11 .6143197874037771 +766 11 -.35756072047975473 +811 11 -1.2484718111990993 +831 11 1.0026164357478435 +841 11 -.7349994743412783 +857 11 -.628472255386064 +858 11 -1.0885294655311972 +872 11 1.4980310561782053 +874 11 .048377293048626493 +889 11 -.17861960412516464 +894 11 2.0679988062243795 +900 11 .2438953501493758 +912 11 -1.2120772444842136 +924 11 -.1179253898754582 +930 11 -.6642437138326368 +937 11 -.5225454810809627 +943 11 -.358025326131808 +947 11 .9531636075727427 +959 11 1.8416339538536606 +965 11 -2.1261728347983184 +966 11 1.9906062637667545 +974 11 -1.551687474323484 +975 11 -.4638416227356876 +979 11 -.02581039026272698 +989 11 1.2126764359455628 +994 11 -1.1730510587419078 +9 12 .7253699533395683 +19 12 -.13452900334166526 +21 12 .3000679595863597 +31 12 .5807155245386809 +38 12 -.6555190261032318 +59 12 -.012975256197501108 +63 12 .2297454709640932 +67 12 .03215381943206927 +69 12 .5024819096630377 +79 12 -.15331803336218164 +107 12 -.5605715982027585 +140 12 -.502746893192083 +141 12 .20956522197685687 +192 12 -.1664865754522374 +204 12 -.8189739130856355 +223 12 -.01957589080278055 +230 12 .25408696982362483 +246 12 .24691091900038487 +249 12 -.014041120116310452 +263 12 .5437668641667459 +264 12 -.488135511565722 +279 12 .6839308253698533 +288 12 .18112621941225587 +289 12 .8098636582950605 +297 12 -.5827891806329982 +301 12 -.5202635759611647 +317 12 -.23600883247983306 +349 12 -1.1146369332215083 +362 12 -.12919808916535763 +376 12 -.7970244216293556 +385 12 .32228952789264365 +388 12 -1.0525701732623176 +389 12 .43285302708841944 +411 12 1.0363606816113176 +413 12 .2664227694699327 +423 12 -.5384816984913493 +441 12 -.7163168224580102 +442 12 -.18271829979131027 +452 12 -.1958154732678492 +454 12 .6133652645987284 +480 12 .14304065529772164 +481 12 -.29481309863363836 +500 12 .2231238912178033 +506 12 .15773438712789384 +511 12 .542044898820709 +518 12 .40595067694828807 +523 12 -.3553349319570428 +532 12 -.18605203060572376 +549 12 .009758743167990788 +557 12 .686732809907538 +560 12 -.0821082537415414 +588 12 -.7894255376542407 +594 12 -.025851863909897445 +626 12 .14979866970858738 +627 12 -.11833512944447422 +640 12 .3765344406200777 +651 12 -.5053377540894564 +682 12 .3347274722077542 +688 12 .1289927369509874 +702 12 .6122105139049586 +723 12 .2654064048679974 +731 12 .28786508241917624 +741 12 .8709410294909229 +744 12 -.35200002044357237 +747 12 -.6367030533380121 +748 12 1.274650889536923 +749 12 -.02357172222816112 +776 12 .01339968957847195 +786 12 .10988155331915944 +788 12 -.09011370394993401 +790 12 -.8868163004217982 +800 12 -.09119130816579545 +817 12 .7151743600639096 +826 12 -.5733940165793658 +827 12 .54852136635242 +857 12 .3426934494510422 +872 12 .3467902071264749 +879 12 -.21532534043333468 +881 12 .10948327613843027 +930 12 -1.0213317429077837 +931 12 -.587156058654745 +933 12 .9410492321539154 +940 12 .5729497300539319 +942 12 -.3108192584010774 +952 12 .37327585685963544 +956 12 -.16458887613170303 +969 12 -.11931398558966726 +997 12 .32841330474304953 +999 12 -.2977429616437796 +17 13 -2.7279710181191827 +60 13 .3479597196471941 +94 13 .681388798273315 +104 13 1.163024149133609 +106 13 1.88730676137842 +113 13 1.260869881463617 +133 13 .27023473012281385 +139 13 -1.51331397103846 +152 13 -2.4332099409128976 +172 13 1.5803610345659544 +175 13 1.543628269930542 +181 13 2.4551502680507524 +184 13 .2824873778730259 +198 13 .4813379543958384 +199 13 -.2974384431491653 +202 13 1.1936834792471183 +223 13 .9842601266704822 +245 13 -2.3435942173643816 +257 13 .9324567230107408 +264 13 -.8817928322622265 +270 13 .24028374768068464 +275 13 -.027083915101659306 +298 13 .9631080121110372 +307 13 1.265146352819054 +318 13 1.9993043715450418 +358 13 -1.267518811128569 +365 13 1.5088388253964369 +367 13 1.4981831065168159 +375 13 .8855415076215245 +381 13 1.0775011973712736 +383 13 1.1439553174891632 +395 13 -.3642108355472453 +432 13 -.8766172267803503 +434 13 -.8456533137651672 +447 13 -1.296844797183769 +449 13 -.1106018791258248 +460 13 -1.6375637239474823 +467 13 -.3635600988372762 +469 13 .5053482894080151 +487 13 -.006452057467476069 +488 13 1.7961377535214365 +490 13 .19408882796915855 +506 13 1.6543070732748182 +507 13 -.09546496824930278 +508 13 -1.3693291003527897 +518 13 .5492621018964219 +525 13 2.539851702337509 +528 13 -.13936286525643338 +552 13 .8810479376521086 +553 13 .14708340731189196 +554 13 -.17235558568858897 +583 13 -.30345711311393053 +584 13 1.0519678890437503 +587 13 .3416624586042989 +591 13 1.0839800657038792 +593 13 -.5223068283412138 +609 13 -1.7432704053018506 +614 13 .7990179859503617 +626 13 -1.998729208511692 +659 13 .30961733908055616 +661 13 2.112162684651808 +666 13 .27350888324615036 +676 13 1.6064248292741081 +688 13 -.6323058977010159 +689 13 1.1652526980659998 +705 13 2.887556814196321 +728 13 3.3363106997442533 +732 13 -1.686405117489533 +774 13 -.34201792134982156 +779 13 1.7157692023551376 +787 13 .050946091537767406 +803 13 -1.0081813347031343 +805 13 .8585942025001811 +806 13 1.6624149772400505 +809 13 .8588690660332694 +820 13 -.9695226185544967 +837 13 3.607410671595817 +841 13 .5955221018772351 +850 13 -1.6708267164538735 +857 13 -.08572927418118181 +858 13 -.3829922488648969 +866 13 1.4074022374860378 +870 13 -1.345968281976035 +881 13 -1.5396115802842616 +894 13 2.496757643393936 +904 13 -.3606297258063925 +922 13 -1.4450410263643851 +927 13 2.0741896832198288 +928 13 .38091474874975273 +939 13 .2595239073631143 +943 13 -.5257358670177449 +958 13 .33707112317993837 +966 13 1.8881227618458274 +974 13 -.623884470910605 +5 14 -.6293419600550545 +13 14 .23752021998964926 +20 14 .29689040441722164 +24 14 1.240866582325607 +48 14 -.04497152654674779 +55 14 -1.013797193675181 +62 14 .7199580478284748 +79 14 1.0694141411835443 +88 14 .05578851780227162 +113 14 -.9413343356898707 +115 14 -1.1684242030018361 +117 14 -.26189476580211524 +125 14 -1.0515248182200798 +127 14 -1.2107572293771371 +146 14 .9971062075622545 +156 14 -.2832569116476981 +157 14 1.3123423840486006 +160 14 .42663936384436296 +194 14 -1.4561019371472221 +213 14 .8444031606284437 +217 14 -1.6543489676653031 +227 14 .8634575636162112 +232 14 -1.6421753946672535 +242 14 -.5948739741873363 +243 14 .09175543514378803 +246 14 -2.045038423444058 +247 14 .246725398515956 +251 14 .9618006562584303 +262 14 -1.5141216962485051 +283 14 .007688277968428747 +287 14 .17988001748893373 +299 14 -.880467877541663 +310 14 -.7204274213304418 +322 14 -.632753438485686 +325 14 -.4350551372307038 +331 14 -.8347211324920123 +332 14 -.908786646119925 +345 14 -.31043570026832534 +357 14 1.0613414567023964 +366 14 .9342887078129147 +375 14 -.3528696298525425 +383 14 -.6443063292087209 +388 14 -.22534471623112584 +397 14 .08522111406380611 +426 14 -.6271980560000148 +433 14 -.15839995097901016 +437 14 -.6659617596534357 +459 14 .07869195897917294 +464 14 .8505078920405234 +472 14 -.3560226517286859 +493 14 .46380578242966236 +495 14 -.7213880221894676 +497 14 -1.1912713062458724 +515 14 -.4651491821776641 +527 14 -.5438390505684797 +535 14 -1.6277292447635772 +559 14 .14487344326886276 +561 14 -.05117181111617607 +562 14 -1.010288782108112 +565 14 -.6740164996090526 +572 14 .33346023296923655 +574 14 .44918253788301016 +579 14 .5402690085654925 +580 14 -.2658186540495727 +581 14 2.0927791674705216 +588 14 .03823989948773282 +589 14 -.6906000611183718 +597 14 .5110198156245435 +601 14 .086921704455896 +607 14 .1648474160168393 +625 14 -.2761271684004192 +631 14 .4595628047377673 +653 14 -.06932200174884977 +659 14 2.0721933283506604 +661 14 -1.2670567564138233 +662 14 .40629545439988846 +667 14 1.87588367490367 +672 14 -1.5323755550937006 +674 14 .015551583753736983 +684 14 -.38629447338114953 +686 14 .5057363557879302 +690 14 -.5321003392939543 +709 14 .4809691924793555 +713 14 .3921822078782861 +725 14 -.1507488704213205 +735 14 -.6596950964806472 +747 14 .7262270948531098 +756 14 -2.381671476647218 +758 14 -.3326288188101657 +776 14 .6252773079036831 +777 14 -.2453417965189606 +798 14 .21648239459424196 +799 14 1.1573129867278258 +800 14 -.8016487557695683 +808 14 .3537012735947547 +810 14 -.6457800069410682 +822 14 .5410926146713525 +831 14 .22421587885118685 +838 14 1.3828741953869428 +840 14 1.3363560025985095 +854 14 -.0699921038330005 +866 14 -.09583227002918693 +869 14 .06268333456325867 +882 14 .5293704436364016 +884 14 .14444781050873245 +905 14 -.7461184515347219 +907 14 .24319365897547054 +908 14 -.2770215010573115 +911 14 .08527811322328037 +913 14 -.5812189200736293 +915 14 .7030635031618748 +923 14 .9227204334349115 +948 14 -.4892187329063692 +951 14 .6625399841802802 +967 14 .48990680861843633 +970 14 .2498459487781035 +973 14 -.20771649413785517 +986 14 .5841454969122677 +2 15 -2.1939443806859984 +5 15 .6950997299592981 +7 15 .9901792256766214 +16 15 1.1641995027967218 +19 15 1.4219368132012076 +21 15 .8095637560950488 +36 15 -.014548187482846558 +37 15 -.524655051422456 +54 15 -.12162921839430216 +73 15 1.1128204680932823 +93 15 .22629843107386427 +100 15 1.1506489936140627 +111 15 .1032572136179381 +118 15 -1.2459208351330389 +120 15 -1.2627569677161379 +130 15 .3717454779973478 +137 15 -.4180430646095635 +146 15 -1.0697802538801457 +147 15 -1.5452160774339758 +153 15 -.8809230504710108 +162 15 -.15987389384872647 +163 15 .38199734087924475 +166 15 .8765025304733348 +171 15 -.7700786795906092 +194 15 .7375349559943241 +211 15 1.5473049544511084 +229 15 -.7317282593446467 +239 15 -.4448114276324397 +248 15 .2813533330835631 +250 15 .09312246736063859 +256 15 -1.1528119632114742 +271 15 .813495771964893 +282 15 .6795089071871551 +285 15 -.6615368848028748 +288 15 .612921328151741 +293 15 1.368872553204757 +300 15 -.1936902559274654 +311 15 -.7135328955692646 +315 15 -1.3709683045076388 +323 15 -.831790514309113 +326 15 .7164709527532276 +338 15 1.2582679343216716 +345 15 1.0482819514130874 +360 15 -1.7434612673131327 +364 15 -.07205123377681899 +379 15 -.8092190414388212 +390 15 -1.2368184853370559 +405 15 1.7567600755013568 +414 15 -.31178717932564204 +429 15 .4408125417738804 +443 15 -1.5079974304449801 +451 15 -1.3493775753668047 +456 15 -1.5243425756300888 +458 15 .4933167606215042 +466 15 .7802898280627286 +467 15 -.5786885510216995 +489 15 .386331467554636 +503 15 -.9179181962687217 +505 15 1.5993612555224135 +517 15 -1.3269432089103739 +529 15 -.001568604896087955 +532 15 -.34800264023687966 +536 15 .7106085235071549 +586 15 -.4075950963129019 +588 15 .21453659327445765 +606 15 -.7060970521208527 +620 15 -.2555285167237574 +624 15 1.0179021120462945 +627 15 -.7427239616825585 +634 15 1.9423526352400744 +645 15 -.6925916620201152 +658 15 -.48970841829826955 +662 15 -.2963771616258651 +667 15 .9500726649420692 +677 15 -.30816087835463235 +683 15 .571646552537691 +686 15 -.051801956395510884 +690 15 -.7603658412826539 +696 15 2.215965989942078 +698 15 .2769721084786655 +712 15 -1.94947157585998 +715 15 1.6215792509229092 +717 15 1.0257269874814792 +742 15 1.8570173298595376 +746 15 -.3756853123784686 +762 15 1.0585683903400742 +767 15 .5882263972393291 +771 15 .6511497381123801 +782 15 .10807814752940542 +788 15 -1.0684601917764565 +797 15 -.08803615994949547 +798 15 .08728633515763388 +809 15 -1.011884790030816 +810 15 .8884121064110903 +826 15 -1.9935111080000412 +829 15 -.9332511378271754 +835 15 .76433058724356 +836 15 .0004493173489041706 +853 15 1.5159285694245868 +863 15 -1.974287650590898 +887 15 1.0118039156087058 +905 15 1.4621519885604362 +907 15 -.06856328655247683 +912 15 -1.1167570205821418 +917 15 1.1359457799056174 +923 15 -1.0731848904754913 +929 15 1.7064646249327469 +932 15 1.3590442787368286 +933 15 -.047410700739248385 +956 15 -.3993677778508023 +970 15 1.0310531529147757 +976 15 1.0407959067196124 +979 15 -.8946842048681273 +981 15 1.168773900371941 +996 15 -.20938170937932077 +998 15 -1.5027575479591821 +1000 15 -.5756260775146285 +2 16 .08608785921803197 +4 16 -.19056880469303694 +8 16 1.1716882133757454 +36 16 .6507107469406057 +43 16 -1.095291659551676 +52 16 -1.0033701984223022 +54 16 1.5241895558221108 +55 16 .08499004068974017 +62 16 .15609149567777347 +122 16 .44417895918502004 +128 16 1.5375010915482852 +135 16 -.34586099238845525 +137 16 .18408955931176926 +142 16 .5431084156263142 +146 16 -.21238376163376904 +153 16 -.20482393801283894 +158 16 -.9297628102296756 +168 16 -.9253200350961833 +169 16 -1.0293349918988175 +171 16 .5904092547214693 +174 16 -1.0733100469772745 +176 16 -.16438386225804158 +194 16 .615810821118022 +218 16 -.25852149923469825 +220 16 -1.0375803825753604 +239 16 -.9524583498126916 +240 16 2.2207243002698154 +246 16 -.6435121410970643 +253 16 -.36996264248993904 +258 16 -.5550660291870263 +278 16 -.2173022158837072 +297 16 .23596465805410055 +300 16 .5106706043434234 +302 16 -.45541006575514875 +304 16 -.43144530642769907 +305 16 -.13357560638316388 +326 16 1.5142953786849458 +331 16 -.09969292205755188 +333 16 .40718997104576443 +359 16 -.4491133994488459 +367 16 .5753628529519068 +375 16 .7133318476460444 +410 16 -.3790847908071122 +434 16 -.4503533078060131 +435 16 .5483513628762418 +445 16 -.27254354794043795 +447 16 .3199519411060022 +463 16 -.335447440042872 +471 16 .4125643353777131 +481 16 .07015868042631973 +500 16 -1.2417229200294182 +508 16 -.16950116344873598 +510 16 -.03601116582024716 +537 16 -.18973231775781707 +557 16 -.46019913909577587 +578 16 .16972890254189849 +582 16 -.12006440723760978 +586 16 -.8661488015793015 +596 16 -.030962956690111634 +606 16 -.9178172586447411 +625 16 -.615981136080951 +663 16 -.2571099833507619 +671 16 -.7914755022080084 +673 16 .37493315735896715 +682 16 -.37743860001611046 +693 16 .8178655101371743 +704 16 .4718336343182406 +723 16 .267598632763106 +729 16 -.2404137465545294 +738 16 .39730753968128313 +751 16 1.2183795010154588 +752 16 -.4525078736321172 +755 16 1.481176488080303 +766 16 1.8373420143358785 +774 16 .18890404164438576 +779 16 1.2289972236968458 +802 16 1.3156064188226064 +816 16 -.1049239864824542 +818 16 -.006798973833709658 +823 16 -.12252550500240414 +835 16 -.44343710369793016 +838 16 1.2288039892857947 +843 16 .7590400376631974 +860 16 .6818920671279188 +872 16 .06453586222013354 +881 16 -.8623258032605849 +906 16 -.7944996090917577 +910 16 -1.0576074873026475 +917 16 .10748703825384731 +945 16 1.2047345547356343 +971 16 -.8895344261340558 +979 16 -.21408985594409546 +989 16 -.5482589377436846 +34 17 -.4984942084956633 +44 17 2.413697825242908 +48 17 -1.1884884817811106 +49 17 .1755384213871018 +60 17 -.7969418638176379 +78 17 -.6591385147037204 +88 17 .0294211698408242 +103 17 .5922802909780306 +106 17 1.439114343476212 +111 17 .7290314855778378 +124 17 -.7731787079901803 +139 17 -.010311734091273776 +140 17 .21123509902363477 +152 17 -.5377456632033079 +164 17 -.33292016527861085 +178 17 .6465727965438273 +191 17 .6904082585483975 +206 17 -1.38618629489837 +223 17 1.5861949232404027 +241 17 .42422557731521937 +247 17 .733485894007216 +258 17 -.31681778303741764 +271 17 .5691084027344125 +272 17 -.3618536029496876 +274 17 -.2881784655179663 +276 17 -.6152909234462506 +285 17 -.17581213171002777 +293 17 -.5801464002859558 +296 17 .06316835419035381 +300 17 .22027441404744147 +305 17 -.12033907664998833 +308 17 1.2851437006783235 +325 17 -.4012791986276837 +347 17 -.7217074673304311 +353 17 -.7739285911123753 +357 17 .6352240851739126 +367 17 .4756731206062343 +370 17 .4223846187341042 +374 17 -.21136299400706052 +375 17 -.119236815015268 +383 17 .1469376043063151 +408 17 .5342232384900868 +412 17 1.2352018902307456 +416 17 -.5975331637555954 +425 17 .058288284922587086 +438 17 .12574557825736904 +439 17 -.7557435603883234 +445 17 .9918960512240884 +450 17 .04245901193964591 +458 17 1.0979099363115334 +462 17 -.8441759982082642 +476 17 .5023648328763624 +477 17 .5440825770921894 +521 17 -.27060025812257604 +529 17 -.4988682419418412 +536 17 -.19818424816825878 +537 17 .547870344104914 +549 17 1.0991335719997597 +552 17 .13071038858785117 +561 17 .45713676607224735 +582 17 .6338372845041392 +594 17 -.48523277393497494 +614 17 -.31365080363109904 +615 17 2.035682833213214 +622 17 .40520866438692765 +629 17 -1.3293116292552192 +645 17 .6645038093111417 +651 17 -.3016831872563668 +652 17 -.8245753278439353 +668 17 .06709398537187689 +674 17 -.16497841748207348 +675 17 -1.1739053391609684 +685 17 -.6892402662702102 +689 17 .7971292358686649 +694 17 .7421567955572718 +697 17 -.03970458384466338 +708 17 .22834617426538137 +710 17 .9930535787360767 +711 17 .20888420771580404 +723 17 3.142374570100368 +725 17 -.8325127677747987 +726 17 .07151011624351344 +728 17 2.026538951981186 +731 17 -.8232844547960139 +733 17 -.33401742698957565 +736 17 .08380745607151188 +738 17 .5883075078251088 +759 17 .2649897820833681 +778 17 1.3996782483556789 +786 17 -.5051825673779662 +812 17 -.5230447971960939 +816 17 .07132789630621178 +822 17 1.4125382791205359 +824 17 -.014035042091321184 +825 17 .04223948780135105 +826 17 -.12399267083344354 +835 17 .05432858030618482 +842 17 .6140796179905482 +876 17 .3381783633544133 +889 17 1.0583860865995345 +925 17 1.0569363854477731 +931 17 1.2736102682116661 +941 17 -.3206458703905013 +949 17 .3328146205888023 +984 17 -1.567399680544674 +5 18 -.14680606553487255 +22 18 .012065833767345852 +24 18 1.1789923122933506 +42 18 .3785696563562799 +45 18 1.1844146316673922 +50 18 -.44767873246245554 +65 18 -2.054447785638157 +68 18 -.7340096718154966 +75 18 -1.1052191173623094 +79 18 1.4622576175963728 +81 18 -1.7782489722198485 +82 18 -2.068687803283775 +117 18 -2.7632800280757053 +140 18 -.7437020335045891 +141 18 .18030125563311247 +145 18 1.3377921274821059 +149 18 -.8831515538141449 +180 18 -1.0593743693117432 +185 18 -.4053303412200592 +188 18 .6082775145411099 +199 18 .21036695432789845 +204 18 .14319554333820897 +207 18 -1.9736747995029744 +217 18 -2.89466623994876 +221 18 1.0755562527522378 +242 18 -1.2135074176772378 +251 18 .463280601162097 +252 18 1.8525056807535079 +266 18 -.13949592265615823 +274 18 .26500608705947837 +304 18 2.448094463953677 +305 18 -.03487315632113644 +310 18 -1.1880725999886597 +312 18 .29554271893625345 +329 18 .49765029227536883 +330 18 -.6306106605161413 +360 18 1.763007655858052 +367 18 -.505566494584105 +405 18 -.025349497972754095 +438 18 -.5522665621587238 +459 18 1.9178828129765764 +461 18 -1.3947999626619478 +464 18 -1.5989446019002957 +472 18 -.9944479642007955 +494 18 -.9200002415900759 +496 18 1.7778516973567335 +511 18 -.9386016128343969 +512 18 -.16150312309282325 +528 18 .6050130456724234 +533 18 .1262244158914023 +542 18 -.5821842800428253 +547 18 .6314323558748287 +604 18 .5667233536253254 +613 18 .4874882505237777 +620 18 -.0378827748353823 +626 18 -.5093577117931354 +629 18 .5279730376773464 +637 18 -2.4674413568866695 +640 18 .6783514219305549 +648 18 .2786649906579723 +666 18 .6145817548377448 +669 18 -2.6981787635126526 +671 18 .3730093995875695 +676 18 -1.9220859882881738 +688 18 -1.3396735783389064 +697 18 -1.789701755096187 +709 18 -.08497290683427686 +732 18 1.4976188660003649 +734 18 1.2645950145221305 +749 18 1.259001628195999 +773 18 .9976885373593611 +802 18 -1.9408967708303644 +806 18 -1.0673110637824017 +822 18 .349129932271051 +831 18 -2.161942876896238 +833 18 .3173775047748272 +836 18 -.1736103071622751 +856 18 -1.767065882665499 +858 18 -1.004743859956476 +893 18 1.018647140289261 +896 18 -.1981744405106835 +936 18 1.3771679257175309 +954 18 -.534493151233777 +958 18 -2.772864741011306 +964 18 -.2321146582071618 +971 18 2.228247242567525 +986 18 2.7016417938003636 +4 19 -.17534731597203404 +31 19 .11450298053035049 +43 19 -2.6438681701130267 +50 19 .2926946077000022 +57 19 .46290294044444663 +65 19 -.1701701271921887 +67 19 -.29825968589917184 +69 19 -.7623745273027625 +73 19 -1.1003895324844024 +75 19 .1417648820677111 +76 19 .5354821167484654 +85 19 1.345679017067255 +93 19 .05107962177424269 +144 19 .8539250224597564 +149 19 .19335159920564693 +156 19 -.16569152241301638 +162 19 -1.063044093330015 +167 19 .1544300940161871 +179 19 .8747324313631276 +202 19 .8396477416263923 +215 19 .18766902050253967 +220 19 .5340795728194646 +222 19 .5791753455166314 +228 19 .5556180742263056 +253 19 .043064064161290286 +257 19 .14146737012820254 +259 19 .19208327684589258 +282 19 -1.4229674464983852 +294 19 .45527177176617667 +301 19 .6075478875161809 +312 19 -1.9796100860239376 +346 19 -.45014751579187307 +350 19 -.6764181255779451 +357 19 -.4914398573829316 +377 19 -.1589989960858985 +382 19 -.30757722073527427 +389 19 -.35090814326304187 +399 19 -.8676907108773744 +408 19 .5017849735142396 +411 19 .014934842121141836 +413 19 -.7184910044636027 +423 19 -.3310942664839058 +455 19 .34498769391881823 +463 19 -.14706849497686175 +466 19 -1.4258862927580995 +475 19 .4713121833119844 +496 19 .03739888702341304 +503 19 2.043200344729932 +522 19 -.2023631562101877 +531 19 .6972686489579205 +532 19 .4753801319837594 +535 19 .16414141328210288 +549 19 .6633230308942117 +559 19 1.1708908464733936 +609 19 -.3889343528996604 +619 19 -.4089930747148889 +634 19 .0034656354600101358 +655 19 .042980125947617034 +679 19 -.595799062708003 +698 19 -.18952848961219435 +703 19 -.08685122659918207 +713 19 .503425099590109 +715 19 -.8671685695393415 +719 19 .1518558372997342 +751 19 -.06382840725392896 +752 19 .4346529677561968 +767 19 -1.073593819728985 +788 19 1.3367688403038347 +809 19 1.0204540455523543 +810 19 -1.4664421520271929 +816 19 1.2552389387023462 +824 19 -.8211952712956698 +829 19 1.285041353502046 +836 19 .5707957243891748 +849 19 -.02685518140994425 +859 19 -1.1603770464437675 +870 19 .3921188926688411 +871 19 -.450765772883725 +875 19 .7355219791337901 +877 19 .4521534693463794 +880 19 .538865272398235 +887 19 -.2166398716348015 +900 19 .1888998622580409 +902 19 -1.2073170123076702 +938 19 .7389275161139874 +940 19 .5651928906956563 +950 19 -.31745946215958276 +952 19 -.31493992189004494 +958 19 .12135268709854873 +972 19 .47603098360576224 +985 19 1.204450258023833 +990 19 .942699007303536 +12 20 -.6871097075184339 +16 20 .9073464198293397 +20 20 .00896731716679236 +25 20 -.6389147101966118 +26 20 .08646891397296429 +48 20 -.8101653810047662 +66 20 1.2472630067601629 +74 20 -1.3814526881783082 +78 20 .060860988976387594 +91 20 -.8343741650290685 +106 20 -.7960347295918255 +111 20 -.42232173054828437 +124 20 -.157135206628556 +125 20 -1.4661424491009771 +151 20 .9434500030032631 +153 20 .0862184717053261 +167 20 .8979776008873118 +187 20 -1.283404714757654 +196 20 -.5457067316640807 +206 20 .3812874256390071 +211 20 .24035990471549198 +214 20 .6284919412681805 +222 20 .4805910847730353 +231 20 .5285795174134676 +240 20 1.379658909434911 +250 20 .44608690644262095 +262 20 .1591810923724244 +272 20 -.6265354675298379 +281 20 -.7902191843704224 +297 20 -.05299784992106851 +302 20 1.1638787011606742 +307 20 -1.2293973325761631 +326 20 .7235895488328923 +328 20 .5161999108316404 +335 20 .40339607019385015 +340 20 .4297546032460737 +343 20 .09543804417269192 +358 20 .3634907863570121 +365 20 -.19842646853411505 +370 20 -.24372513188729913 +384 20 -.3458517271024392 +387 20 .5509787581213246 +400 20 .5534022756845137 +402 20 -.27079302742958955 +418 20 .5939759047308553 +422 20 -.09355548761235213 +423 20 .1088425329946963 +426 20 .1350925940269735 +433 20 .4635101590200511 +442 20 .9226977701781779 +466 20 .28694385943845047 +467 20 .5127257471414828 +468 20 .5228200550987319 +472 20 -.0009343919004961565 +483 20 .640846473306788 +495 20 .8752035071640184 +505 20 -.946515653947047 +518 20 -.8939901614451479 +520 20 -1.606948374119393 +534 20 .2815781684903859 +548 20 .5102118603474685 +559 20 .45161857453806165 +586 20 -1.334833261617969 +587 20 .807976693734824 +589 20 -.6528727647024275 +609 20 .6824022200841492 +653 20 -.13022293381886396 +657 20 .49123628556559273 +662 20 .9755244561653968 +672 20 -.5909511265237032 +697 20 -.24684899188239834 +703 20 -.07298190061245843 +704 20 -.4115950403332665 +716 20 .14469991727175202 +723 20 .832651858585871 +733 20 -.6659824069761928 +736 20 .23735347893753028 +737 20 -1.105176702248082 +749 20 .19401502191340375 +755 20 1.095785299037927 +766 20 1.4244670884241277 +771 20 -.7835928714041911 +778 20 1.9723966100536494 +807 20 -.2747816918544914 +812 20 -.378551012221052 +817 20 -.5818864628522066 +819 20 .14758812319866585 +821 20 -.24904178311241676 +823 20 -1.5430020117350405 +824 20 .00800393613393549 +829 20 -.39234388271585824 +846 20 .6228547064051522 +852 20 -.6665186194709332 +854 20 .3132124619717601 +863 20 -1.2624464007338976 +875 20 -.315927260095378 +879 20 .8383475979048812 +908 20 -.5375658919993227 +925 20 .03894891277353964 +939 20 -.17069116886961416 +941 20 -.5016668085606688 +944 20 1.0014011377672716 +947 20 -.501602416893845 +956 20 -.3878521097277408 +957 20 -.06989212337018312 +970 20 .9090211662307234 +986 20 .7531095766831628 +989 20 -.48493871420024154 +992 20 -.2843847124987111 +20 21 -.1430173346485228 +34 21 1.1979882977654301 +62 21 .13255327348378948 +76 21 -.4458095205771501 +90 21 -.6106018871169578 +106 21 .0024711892310200056 +108 21 .5364813790381796 +116 21 -.15953112708843106 +117 21 -.02670396598161664 +129 21 -.5869232737390482 +135 21 .5085197107876381 +141 21 .4181387142880306 +142 21 -1.1941015299785787 +145 21 -.7380373458052523 +157 21 .35896540023521495 +160 21 1.0762645680088019 +178 21 1.2804998415343365 +181 21 .5674026480545834 +184 21 -.19437009823221338 +217 21 -.2367873949274526 +234 21 .10528095619574136 +246 21 -.5514218872091281 +252 21 -1.0165631972599976 +256 21 -1.0719452486904828 +260 21 .6395459136622965 +266 21 -.8105485454651894 +267 21 1.7996397590621513 +304 21 -.5115415256587794 +314 21 -.5977449205035406 +322 21 -1.229460627869784 +326 21 1.125357637825239 +342 21 -.06679788280151328 +352 21 -1.1970862601842853 +362 21 -.7434132323958015 +363 21 -1.2632258486770207 +370 21 .2055436362261222 +372 21 1.0885252888442132 +373 21 .38282457125995384 +383 21 .947722997774079 +384 21 .10833046515058167 +392 21 -.246028694523515 +408 21 -1.4694862228701562 +417 21 .1992043824231013 +421 21 .7859994290284577 +456 21 -1.3047112666501366 +460 21 -.10574863625795416 +465 21 .5383818912919942 +468 21 1.0605631427245852 +473 21 .11706208851546149 +476 21 .9641242833135193 +510 21 1.2258887094583806 +511 21 1.0942833576654218 +514 21 .5834851578224216 +517 21 -.12004188104488706 +531 21 -1.1421427517597782 +558 21 .1291609252007887 +576 21 -1.9032550771779744 +578 21 .4232967612988907 +580 21 -.6009956761201114 +587 21 -.4961661935459146 +592 21 .21070897169176075 +614 21 -.8145090902446057 +630 21 -.20033354039161802 +636 21 -.2659647869742316 +668 21 -.653425273056611 +688 21 1.8098299846323276 +692 21 .27689355931013293 +701 21 -1.4920826267802325 +712 21 .051994023621619076 +734 21 .12334975590343723 +736 21 -.9969746631290101 +749 21 -.17471768223270853 +760 21 -1.1722908185021366 +777 21 -.23167058131516277 +781 21 -.3054564155458381 +788 21 -.8177447438151583 +796 21 .7518913943141156 +806 21 -.4238445339804542 +819 21 .7860498891020631 +827 21 .35435957750710256 +829 21 -2.0521262638858153 +846 21 -.09327013513768122 +851 21 .808317552573875 +860 21 -.11958579303521474 +869 21 2.707505800778233 +878 21 -.5619916793611038 +880 21 -.04257934363069818 +885 21 -.13274843347968196 +886 21 .07789652217216607 +894 21 1.0084888111250636 +909 21 .17190214179860516 +911 21 -.24686908375612387 +916 21 -.04862041962086718 +939 21 -.4972486243107338 +942 21 -.802772675284237 +961 21 -.06891627955419162 +980 21 -.5963196720592444 +987 21 -1.896879555539689 +1 22 -.24339779814874588 +6 22 .5760078283484324 +15 22 .8621914658919236 +16 22 -.2448301478395037 +24 22 1.4861519551138007 +53 22 -.30375509450366023 +54 22 .21509524224074755 +60 22 -.1418954446752529 +77 22 -.9303058636360312 +96 22 .2536829129415404 +107 22 -1.2405424933164177 +153 22 .28216162671822415 +168 22 -.1401936984563866 +182 22 -.34694525174909785 +195 22 .7708431700867674 +197 22 .5347216529818424 +209 22 1.355574762457538 +210 22 -.723056861625225 +220 22 .37059288675357405 +225 22 -.12131878628578013 +230 22 -.9911961297089158 +241 22 -1.2131807141585589 +242 22 -1.4545181215271037 +248 22 .5433160273195408 +255 22 .014211609790553872 +275 22 -.02896587695205853 +278 22 -.3539829418966386 +309 22 1.0425054595602574 +312 22 -.711622482025816 +316 22 .9612913391370569 +317 22 -.23952694008963732 +328 22 -.46619856102934826 +343 22 -.3293621005346537 +353 22 .0750702019553676 +379 22 .6970417605007689 +382 22 -.568700645930614 +384 22 .1698584067710021 +402 22 .7098642114144071 +404 22 .30935412463053724 +406 22 -.4645514860499944 +411 22 1.0712965495877669 +420 22 -.9402276858550886 +428 22 -.2271858679227567 +443 22 1.4808819311700092 +449 22 .3065928788422668 +456 22 .535195780482563 +485 22 -.617807339579464 +504 22 1.341094613648713 +507 22 -.11234956402626811 +510 22 -.3848626129425601 +517 22 .33841963737288505 +526 22 .5121645569926271 +539 22 -.8244275657189366 +540 22 -.6806214841980953 +549 22 1.8316504414660573 +567 22 .3819045970905341 +570 22 .2682604255661943 +579 22 -.31466398189524175 +587 22 .37672418138464064 +590 22 .2679393556323442 +610 22 -.59114059096308 +630 22 -.06223464591479673 +659 22 1.4189177561385178 +667 22 -.2491479986426022 +696 22 -.5872223230668825 +704 22 -.5117982096169849 +706 22 -1.200264422275598 +716 22 1.2766392063765846 +740 22 1.2274288004220675 +750 22 -1.0437115276490787 +753 22 -.41800353407083524 +763 22 .24984607964796113 +769 22 -1.0390740772343163 +775 22 .1595102105532534 +777 22 .36839987331535096 +781 22 1.1472339485115897 +795 22 1.1831623325121787 +798 22 .5818837218317563 +816 22 -.6460787756300012 +825 22 -.6684337927899656 +849 22 -1.3050758817694168 +852 22 .6345794561725205 +855 22 -1.278672230434448 +864 22 .6288410385024268 +886 22 .12245148388840102 +890 22 -1.000762675768404 +891 22 .2441281523845889 +904 22 .07844432308289337 +932 22 .09686079066748035 +935 22 -.9045799272775952 +937 22 .19955711273997218 +962 22 .23735646060158938 +987 22 .7231440787598103 +993 22 .24480798994391081 +17 23 .6429764135852559 +21 23 -.6354952198226915 +22 23 -.6161891408446064 +25 23 -.4214625868365492 +27 23 1.5051405552915462 +38 23 .5165551103527026 +43 23 .15679242479151784 +61 23 -1.883054926037478 +63 23 .2687011300788329 +66 23 -.11017651229375537 +73 23 .4661697879795276 +74 23 .3486430622774991 +79 23 -.02276162103790169 +90 23 -1.0058635297205267 +92 23 -.25061623527633886 +93 23 -.6334186175301786 +106 23 -.6427190179691341 +108 23 -.4748201752531344 +117 23 .743366310346192 +131 23 .7852986129438625 +135 23 .945904557687927 +143 23 -1.67164656260747 +146 23 .18675132094131136 +154 23 .19414373940443844 +156 23 .1255715247827956 +168 23 -.4302235516398169 +174 23 -1.007283657462882 +178 23 -.9347327596796258 +194 23 .7421335242771839 +196 23 -.8801032837381959 +202 23 -1.596753974166322 +207 23 .23326214706858822 +228 23 -.7456264687452638 +275 23 1.3472968590530818 +285 23 -.11476391541578854 +298 23 .8356505749483659 +300 23 -.23758882063355885 +313 23 .8569444118949886 +343 23 .09059613951357501 +350 23 .8852676693496286 +396 23 -.7459702982482895 +397 23 -.041931108691634994 +409 23 -1.4997954014874328 +411 23 1.3120959444173206 +418 23 1.5244251662370374 +452 23 .3527335245008379 +454 23 1.5090002253045625 +468 23 -.23456150129253278 +493 23 .6661295729977267 +495 23 1.0855799208522443 +499 23 -1.5386797334820241 +505 23 -1.573916105814741 +510 23 -.7626515767098905 +518 23 -1.514836045450879 +541 23 -.433967422592459 +555 23 -1.519004543690819 +557 23 1.5903415092135833 +565 23 -.5276598222794028 +570 23 1.130686036798916 +573 23 -1.9403880771958428 +580 23 -.7495112292607682 +598 23 -.6911019064492825 +602 23 .13929340593006242 +622 23 -1.6408157908101761 +635 23 -1.085040590845245 +638 23 .9228959416901568 +644 23 .6122297270868584 +649 23 .07439479973395959 +653 23 -.4259028798764992 +668 23 -.6426875830648524 +676 23 1.1168496462733088 +696 23 .22647163801741238 +710 23 .45076945465807405 +716 23 .9376083184121811 +722 23 .4052048046453555 +724 23 .5802474656862722 +741 23 .7780566318280695 +764 23 -1.9799775063614815 +768 23 -1.0499018513148246 +769 23 .45562471904719193 +775 23 .09073957439998351 +779 23 .6686586373869651 +788 23 .5861982258885896 +789 23 -.9917517551139359 +811 23 -1.2731958029974368 +817 23 1.2570791667545949 +819 23 .6499904935307007 +833 23 -.4855958383204582 +853 23 -.000863801620051563 +855 23 .3218245146270981 +873 23 1.5925726928713315 +881 23 -1.0961656964182906 +883 23 .040739097216322614 +885 23 .14539328251593345 +886 23 1.2017289602815115 +899 23 .8359380481146261 +905 23 2.721082324285049 +909 23 -1.5593827571225236 +918 23 -1.476314635716876 +937 23 .43460718528294034 +942 23 .06329249148435037 +952 23 -2.377855390134919 +953 23 -.7382974578431203 +958 23 -.22904508947470592 +961 23 .16343250541083065 +969 23 -1.3791987490882704 +970 23 .19639265745668527 +982 23 -.21011028079697702 +984 23 -.9080432061227 +998 23 -.9885905474601067 +7 24 .8778720925498023 +14 24 .069426847289812 +19 24 1.3639965656485844 +20 24 -.048463239318999526 +31 24 -.4217038752603968 +34 24 .9187807748614002 +39 24 .3271768908953827 +45 24 .09534235580633035 +49 24 1.4041217315876702 +53 24 -.705270234614411 +56 24 .4295319231281637 +57 24 -.8003846627128524 +84 24 .5450701250109211 +113 24 -.17377444920434928 +130 24 .03622210332054615 +132 24 -1.376359613591807 +137 24 -.4779186030580178 +157 24 -.9154900081523196 +180 24 .39187938861260796 +201 24 -.2731757414300127 +211 24 .4387660981773086 +223 24 -.8586396134179928 +225 24 .5162779847841367 +229 24 -.22019702883716588 +233 24 .20567254513720049 +247 24 .30992562867910006 +275 24 -.01805439409483523 +277 24 1.649043707065881 +283 24 .21816570318433065 +285 24 -.30555816883118825 +294 24 -.33458045980081297 +314 24 .44621009622975566 +330 24 .17016647776997768 +339 24 -.8341769659481307 +340 24 -.9340612177325053 +345 24 1.0630314781134578 +355 24 .7088398334266948 +382 24 .2724115573257653 +399 24 .34108354452622663 +402 24 -.05008357342577535 +417 24 1.1118768729528132 +443 24 -.45064462934027344 +449 24 .06900785634578722 +456 24 -.5981689347763961 +457 24 1.305552123649221 +484 24 -1.5654331730734963 +488 24 .03862374370404585 +507 24 -.6974117057690239 +508 24 .46774188156782304 +520 24 -.19270214965467883 +526 24 -1.0035789913321798 +527 24 .852177118763522 +538 24 .10614229015863494 +549 24 -1.3399764482110281 +556 24 1.1319556860874054 +595 24 .13806242722768153 +608 24 -.18688189387311502 +610 24 .4462900959352493 +613 24 .651052104897792 +629 24 -.2918265477637941 +630 24 1.7004660154218312 +646 24 -.21948672332352023 +665 24 .0717027046929542 +666 24 1.211203954198088 +667 24 .45373075291900083 +671 24 -.05442762300046475 +673 24 .3468115756124395 +685 24 .3961326770349765 +686 24 -1.1668971397656687 +687 24 .38325964876322904 +692 24 1.0831722526056524 +716 24 -.9446886370764972 +723 24 -2.197291365978047 +731 24 1.116732877572341 +742 24 1.8279964428262687 +749 24 .3399270324750116 +752 24 -.27879161545367054 +757 24 .3883144993831309 +774 24 .23724873890234818 +786 24 1.1761974078631545 +792 24 .3036988868932492 +811 24 1.8299015051427616 +833 24 .9259455721430264 +850 24 .22351569341287747 +895 24 .13660569274383694 +900 24 -.6727945770224036 +901 24 -.9625025831002807 +903 24 1.42041796749178 +924 24 1.0111892552893231 +950 24 .388966155104945 +962 24 -1.0940785514914007 +974 24 1.5178766856531551 +975 24 .1528276622170957 +979 24 -.2017558335409441 +1 25 -.6003378517358834 +6 25 -.572547865378922 +11 25 .39223024268169876 +22 25 -1.9618177853284424 +26 25 .5978950813654393 +38 25 .3745291779554377 +50 25 .3633351897627036 +51 25 -1.0828323997556863 +64 25 -.6457278763381132 +72 25 -1.6303897784966221 +81 25 1.0251765564243354 +83 25 .4927164381834852 +96 25 -2.298778368262911 +98 25 .3731635967971261 +106 25 .13809277161114403 +108 25 -1.0308558817437052 +112 25 .1971812958518116 +113 25 -.8353630907774229 +127 25 -.5329711844281335 +128 25 1.014355014976548 +130 25 -.9242252537280781 +132 25 .7014734976401147 +134 25 -.2950680454740181 +138 25 1.1440275592877969 +172 25 .9628982841489352 +180 25 -1.3307232873328632 +184 25 1.289958160361894 +202 25 -.7398576765573524 +209 25 .8864054464568063 +235 25 .911292311473833 +249 25 -.08660233012384239 +264 25 -.03880004806087711 +281 25 .32710186287300397 +291 25 -.17262124927972475 +300 25 -.09026653901221113 +301 25 .9475947456282061 +314 25 .11285499371479504 +320 25 -.1802326126111515 +328 25 .7029810594602323 +330 25 .1300715561156649 +343 25 -.7634436215641623 +364 25 -.7225157589333565 +398 25 -.9493087118081632 +406 25 -1.1805318489272896 +411 25 .6743783603056019 +429 25 -1.3143397665673948 +430 25 .21307623627799718 +447 25 -1.1535893191279178 +468 25 -.43846609376408496 +480 25 .2411182063947251 +494 25 -.09956988105662729 +503 25 .561341187209564 +514 25 .35689214314683604 +517 25 1.3561764984613744 +538 25 .056197908996546656 +540 25 -1.3098037708522912 +547 25 -.885033152530369 +553 25 1.127295336055998 +566 25 .853197357961723 +578 25 -.31441274765497196 +583 25 -.13533635750911882 +587 25 .35535066579990665 +597 25 .19906562022512495 +601 25 .8644408620581957 +612 25 .43711230765447306 +614 25 .9838170644546173 +624 25 .02032355107706496 +646 25 -1.165223694017194 +649 25 1.0003305521480115 +657 25 -.06486665127457436 +658 25 1.2739009357723885 +663 25 .200177837966784 +682 25 .988207892565351 +702 25 -.8610944306864112 +714 25 -.15412310599840529 +726 25 .2754788663608221 +734 25 .25978826186174264 +740 25 .32758802146156746 +759 25 .4459092925779638 +770 25 .7485622252389689 +779 25 -.7130589686569653 +791 25 1.2170160976531978 +795 25 .46563105292836543 +796 25 -1.2573136146364698 +802 25 .29841190603168477 +830 25 .5021044764843877 +839 25 .9584435600695523 +855 25 .2579303677104166 +868 25 1.764628039922418 +869 25 -1.0025173051787764 +872 25 .1355667564461845 +881 25 -.7464176957556172 +895 25 -1.0881574507212148 +897 25 1.733815716859568 +902 25 -1.9291959484855576 +911 25 -2.006201741227332 +925 25 .4064594410380929 +931 25 .6773338276064077 +938 25 .1662373245130725 +963 25 -1.2669069984857118 +995 25 1.0455452890202455 +998 25 -.16790675802511623 +11 26 .7322822994753085 +12 26 -.23526623649783307 +38 26 1.504272823092781 +56 26 .48770626105185766 +66 26 .5475017795794922 +73 26 .32887207747493086 +76 26 -.686936862204628 +78 26 -.2836929884863118 +85 26 .24028438431672508 +95 26 -1.6131455892039603 +103 26 -.282830246151056 +110 26 .08504161885174882 +117 26 -1.0150317216849067 +147 26 -.5438645753942417 +154 26 -.8881188409198059 +165 26 1.2776855188666554 +177 26 -1.0649026332582123 +181 26 -1.363805483473932 +193 26 -.21226281477669026 +205 26 .26665456102626606 +216 26 -.3513700139732592 +220 26 -.7058432967239777 +221 26 .6953384412865343 +263 26 -.5424643661286629 +265 26 -.28558167593747036 +269 26 -.30383787823320046 +279 26 -.6859862901415631 +286 26 -1.1616043493977255 +291 26 -.5258112364379467 +292 26 .016858074143640003 +294 26 -.9899380528483879 +297 26 -.008606178747747516 +298 26 -.5470533989887403 +303 26 .2595044527696012 +316 26 .4209603381550028 +328 26 -.044435995800372136 +353 26 .9204107665179887 +360 26 .9076988799999363 +362 26 1.0601051046206187 +372 26 -.616251644779402 +385 26 -.7171975987693466 +388 26 1.2881626017119263 +394 26 -.1023995799783188 +399 26 .7778312859897222 +405 26 -.2609771947352998 +410 26 -.85360407574302 +417 26 .40397740795260173 +421 26 -.6880572389382038 +424 26 .3614352341355296 +451 26 .9904791612931002 +486 26 .5774512751587444 +492 26 -1.5024992655330704 +505 26 1.436033232615606 +507 26 -.348181122637804 +522 26 .9817194400761207 +533 26 .2299142914748587 +535 26 -1.202516508212646 +546 26 -1.1239432244935523 +564 26 -1.501409980277857 +566 26 1.0006565434526156 +570 26 -.47537418536356496 +602 26 -.34961379709541696 +603 26 .6441313563640793 +604 26 .12480303614796814 +616 26 -.4154379911116779 +622 26 -.39328548036441985 +627 26 .4154513324553989 +634 26 2.028406130609538 +638 26 -.7308745464022139 +664 26 -1.2850619384324014 +665 26 -.8458843518493063 +677 26 -.13983844596575146 +678 26 -.7021057818177038 +685 26 -.7403786294795743 +707 26 -.09191238076326899 +715 26 1.1673727099777396 +735 26 -.02690640863875754 +739 26 .881474646521398 +740 26 -1.2499863869414087 +756 26 -2.0399823808778423 +775 26 -.5358211269961685 +780 26 .10509739722399956 +787 26 -.9591713010225613 +799 26 .3000796202499319 +811 26 .5855403728746479 +819 26 -.6688151046239796 +837 26 .8125134196659476 +853 26 -.06444626045953927 +869 26 -1.0500769701545887 +874 26 -.59071635899984 +886 26 -1.0908351418519389 +896 26 -.23703984104884057 +914 26 -1.7756993265464436 +924 26 -.2585103539016911 +954 26 -1.3265550058982543 +956 26 .5540917265060485 +958 26 -.8471164994651897 +963 26 .098527888671164 +969 26 -.9911375099243532 +981 26 -.47177130732312483 +999 26 1.8043934483996151 +1 27 -.29301331761452815 +13 27 .05850553142335145 +46 27 .19206782922375584 +64 27 -.45365123354963127 +71 27 .5361678650296222 +76 27 .5343342826805121 +85 27 -.5691665745651101 +92 27 -1.027641057002319 +95 27 -.2590187190976264 +96 27 -1.3494850904145084 +107 27 .36616082291213403 +119 27 .7406787176103725 +131 27 -.23219132196500183 +166 27 -.9256848894634809 +192 27 .5171065656812195 +193 27 -.9233839695681907 +227 27 1.1818287635226352 +241 27 -.5903461836944832 +250 27 .07033964992346656 +255 27 -.1534058057795405 +262 27 .1629184652727224 +265 27 -.6531124926598701 +273 27 -.23088526512730403 +285 27 -.22831703569410247 +286 27 -.1733761621114659 +300 27 -.10292092150349086 +302 27 1.3085759166002051 +303 27 -.41132505730040675 +307 27 .208916863025502 +331 27 .2106726549435597 +342 27 .09523003462131363 +350 27 .1767838679428833 +353 27 .4248520447066726 +368 27 .2506712794822601 +375 27 -.6932957401774862 +377 27 .9768404156403169 +397 27 -.5796105280333722 +411 27 -.9721767464848421 +415 27 .7666044933401748 +417 27 -.4866665406092826 +428 27 .6950694972083613 +433 27 .04472939628459042 +442 27 .5531015548270908 +479 27 -.10805441261151638 +510 27 -1.0511430573575955 +511 27 -.5618960469210507 +528 27 .2197916063526621 +554 27 -.18307239539853537 +574 27 -.22802461817095482 +576 27 .9947621018762058 +583 27 .3032003285951373 +587 27 .5556935588043436 +590 27 -.1592399741472084 +605 27 -.38909768731904115 +607 27 .1957554641482936 +609 27 -.4642632373602253 +612 27 1.3500167252102881 +628 27 .4375523440483058 +638 27 -.5435585551816289 +656 27 -.3804355991854883 +678 27 -.36849312671136786 +686 27 -.8528254044186093 +692 27 -1.263536540100258 +697 27 .2276620719374053 +706 27 .29047538775387194 +708 27 -.9066151894728849 +729 27 -.16268275950093486 +733 27 -.07428060388409063 +734 27 -.7589869669082013 +755 27 .3762726230643064 +773 27 .2528515772903039 +788 27 .7793537213448387 +793 27 -.9682593740228035 +824 27 -.53086562143047 +834 27 -.561259157408195 +842 27 .6796986292053381 +850 27 .11021435809523816 +855 27 -.043977777180147656 +863 27 -.35326834044835204 +867 27 .30602768264259006 +869 27 -2.7072148997450096 +872 27 -.9648019598115813 +877 27 -2.3079058197192563 +878 27 -.1659976379845355 +880 27 .9235300890698906 +898 27 -1.339084984183679 +918 27 .4912637105596541 +920 27 -.4223445500856418 +923 27 .27960331190795484 +938 27 .2764982509498904 +939 27 .3970601332344716 +940 27 -.020188055530245885 +953 27 .7453306592094637 +957 27 .8640975599435916 +972 27 -.46297183506051864 +986 27 -.7646270688912815 +992 27 -.07651112300420036 +9 28 -.7585289143147049 +11 28 1.2201114941960678 +34 28 1.3185127131555585 +37 28 -.40931534466763175 +42 28 -.018571320196547364 +56 28 .7015434095004345 +58 28 1.2980400786906536 +75 28 .9832456877295159 +76 28 -.37299793588805163 +93 28 .1602054873696065 +110 28 -1.1738444028147406 +112 28 -.2433914586275298 +117 28 .7003293309752975 +124 28 -.09839058566984425 +127 28 -1.061343195247597 +132 28 -.2631993266800466 +135 28 -.1641293712526813 +149 28 -.4001693386152148 +168 28 .7241143716514955 +186 28 -.7201904695817342 +190 28 -.5839092259609009 +200 28 -.5393720354300411 +207 28 .06999150451183123 +210 28 1.599351929423776 +212 28 1.3393765707500593 +240 28 .5753955863790452 +251 28 -.642153204056356 +252 28 -1.7952075958831883 +268 28 -.28192256382632763 +274 28 .3507391981694502 +301 28 .2908806543673076 +305 28 .8627987386805176 +306 28 .5419153256319788 +311 28 -.08831683349801642 +318 28 1.1445824314772992 +322 28 -.7459058043520368 +326 28 .9512334445346986 +335 28 .4580143638064297 +398 28 -.6113888785440562 +412 28 -.6261283573531596 +419 28 1.0937284501708147 +422 28 -1.8075542041481554 +427 28 -.5360257102031264 +442 28 .010562878278733895 +444 28 -.3132679134764251 +446 28 .47697363089090405 +450 28 1.0284610274609733 +459 28 -.6854219150535972 +469 28 .6255664992511107 +475 28 -.5187414498280356 +495 28 -2.165192300325805 +504 28 .9529263103242029 +522 28 .9254690394448414 +543 28 .30700765832320565 +550 28 .1538119849946668 +552 28 .9680267922356367 +577 28 -.7423628846119502 +595 28 -.9902343107507473 +616 28 -.8199602769425431 +638 28 -.5739537860560758 +644 28 1.8807275996175155 +658 28 .18931467976916333 +660 28 -1.4256675466801514 +664 28 .012493769540271815 +675 28 1.1944861585433486 +676 28 .6829048640758912 +686 28 .01054370988698218 +697 28 1.5945772066319022 +700 28 .30750164927504986 +709 28 .211791461213946 +716 28 1.0742758908303172 +729 28 -.18140792776884257 +731 28 .28665805716766596 +792 28 1.1328300000457499 +797 28 1.1545281337002309 +801 28 .5106327200779744 +803 28 -.8422002331853851 +806 28 -.3357226013352054 +807 28 -.6053325899363238 +822 28 -.35240364693966586 +839 28 .03624255917956597 +842 28 -.10250295071905087 +848 28 -1.5727669639141624 +855 28 1.1509729536998499 +860 28 -.4580761852992407 +894 28 1.0744489333399643 +907 28 -.48297690724205367 +911 28 -.9270395319007245 +912 28 .8519130787732363 +937 28 -.8148438832431278 +942 28 -.524207588344409 +947 28 -.8046137952047342 +949 28 .021157189231235454 +950 28 .08885901375447486 +953 28 .15783801579903944 +983 28 -1.1677597772307187 +987 28 .039761548000206676 +999 28 .576683542896627 +2 29 -1.0538701031144937 +3 29 -1.286283616696739 +9 29 .3848661371422997 +21 29 -1.0999631035783912 +34 29 1.3596126192639115 +39 29 -.4279867778856937 +50 29 -.6207574420108635 +58 29 .11704292715922007 +60 29 .0683993108231899 +94 29 .2943584906535324 +116 29 .44475159053406693 +118 29 -.409246581838481 +119 29 -.4987187622291618 +123 29 .7777782815634113 +125 29 -.7127661056860728 +126 29 .19417016765077877 +127 29 -.2029370815763614 +129 29 -1.8509361342908512 +132 29 -.3942788607099531 +136 29 -1.9453410775522735 +144 29 -.6782388820207278 +150 29 .6587137810755865 +151 29 -1.1005803051603762 +159 29 -1.28146358440156 +165 29 -.4665188922708292 +186 29 .054459812698373064 +187 29 -1.6661592078881802 +197 29 -1.4552542253478569 +201 29 -2.1068162431692845 +208 29 .4093195275633967 +217 29 -1.0762851165461922 +229 29 -.5465656828400988 +230 29 -.19275169128867542 +232 29 .0855739543867333 +235 29 -.5861557395112982 +236 29 .5655844849081078 +238 29 -.8703050597653242 +255 29 .46614343669297453 +265 29 .6829664043222307 +268 29 -.8357529536041801 +272 29 1.6321553517583913 +292 29 -.7844513259029426 +295 29 -1.3537237054380427 +329 29 -1.7353671619546094 +331 29 -.4951253053762439 +346 29 1.1663506710813594 +350 29 -.15777825141328616 +362 29 -.9568061863161489 +384 29 -.008992850467314129 +385 29 .39339749281008063 +401 29 .5505701667487853 +412 29 .14119667310880873 +418 29 .9051215154568574 +422 29 -1.4006189162186273 +432 29 -.9104825492485558 +454 29 -.3206732822742599 +463 29 .5815665143247489 +481 29 -.4100348474435344 +485 29 -.5692079988657672 +494 29 1.2265105468383186 +513 29 -.8858648315444885 +526 29 1.1236703311419403 +553 29 -.13719518220673832 +558 29 .5067165467422823 +568 29 .45371742603630233 +576 29 -1.2267086198337542 +589 29 -.4162080118197429 +608 29 -1.1734520408893325 +616 29 -.5718543849773343 +626 29 .74848888854328 +628 29 .05660492134835521 +651 29 -.5575539355274013 +654 29 .6040337144255594 +659 29 2.0311233179354424 +670 29 .4343382622257656 +671 29 1.052129878467477 +679 29 1.363378733987593 +692 29 1.3603232206476914 +695 29 .11375421043861317 +703 29 .2929654189113632 +718 29 -.5466742519341042 +729 29 .2149409513101082 +739 29 .8786195060876579 +747 29 .18306048647700518 +761 29 -.0887113107681957 +774 29 -.40851017831991265 +779 29 .2435802537874584 +784 29 -.12662128525041905 +790 29 .5435646156480328 +792 29 .496158876415822 +804 29 .16115127938442564 +846 29 -.6882543750206802 +853 29 .34299771901803733 +872 29 .8026481595956487 +874 29 .6013498086501 +876 29 -.3585190834001973 +884 29 .702078498399086 +889 29 -1.618676534098179 +899 29 .02598980027616593 +915 29 1.3905379165285767 +921 29 .846608650471536 +927 29 -.3361987586474424 +947 29 -.588851013544686 +949 29 .5941208814540019 +950 29 -.6552650329997427 +951 29 .5950917309077505 +962 29 -.09710697512558664 +968 29 -.6767708469362056 +969 29 -.4186504313578522 +972 29 .10378930554884945 +983 29 -1.1392828260609305 +985 29 .406243513273183 +994 29 .6634025443630361 +5 30 .4613749701372738 +14 30 -.3964413219632601 +16 30 .1432645520460615 +43 30 -1.3617769900349719 +63 30 .39839220950385495 +74 30 -1.3289740162375883 +91 30 -.6469463252578471 +96 30 -.9963552823269065 +134 30 .5169038434635665 +150 30 -.6764579246937305 +164 30 -.347735508416589 +168 30 -.23689733041552005 +169 30 -.1285880928157319 +188 30 .4887050025742486 +193 30 .31719923738659406 +199 30 .5816706232311093 +211 30 -.6595940804919165 +217 30 -.8288205307944552 +220 30 -.4573109454158237 +240 30 .26883386813084836 +278 30 -.6958223353446562 +295 30 .6571823354945867 +316 30 -.9931079354826101 +325 30 .07433675321902324 +327 30 -.1572562107445482 +358 30 .4432175696274975 +367 30 .2555513373245544 +368 30 1.6727259509659598 +370 30 .07607042924121246 +399 30 -1.3202850392217214 +400 30 .029661882648010535 +401 30 -.07174867679176755 +408 30 -.38588473279258667 +419 30 -.6472178912780888 +437 30 -.119903461874853 +442 30 .5784920937970837 +445 30 .4438222673822667 +446 30 -1.5605045518490892 +453 30 .05006817230231997 +455 30 .8667607039099113 +460 30 .77789394462765 +476 30 1.1071067095107479 +484 30 -.143364191539248 +491 30 .012899641273922548 +493 30 1.2927394795114293 +496 30 .3124615193052584 +501 30 -.34410870225076967 +532 30 .0661783373684948 +534 30 -.3565499783255717 +543 30 -.0946849171177326 +583 30 .08326470665450575 +586 30 -.38235113869611 +589 30 -.2072064313457956 +592 30 -.7262789282517855 +599 30 -.4719962373129919 +601 30 .5650725181703949 +640 30 .08307298637267457 +645 30 .36201799522723505 +652 30 -.46900070983199127 +655 30 .6350757596536704 +659 30 .3680211919396475 +660 30 .6687600690947657 +681 30 -1.0571908840034274 +716 30 .4005200795513263 +727 30 .5298695893664143 +732 30 .5955907754435588 +745 30 .19109984671359107 +750 30 .0009325441362908402 +751 30 .31748887622064537 +756 30 -.09358387337841723 +762 30 -.14435116066017573 +778 30 2.3197141165152906 +789 30 1.2498820721998438 +795 30 -.4973022774096963 +796 30 .4563221497474416 +800 30 -.4126876366037071 +816 30 .16116353732812966 +819 30 -.10632798334371782 +826 30 -.5037609190424175 +834 30 -.24869561385912065 +840 30 .3891127657624226 +846 30 .39251304786171326 +865 30 .34602708327395953 +883 30 -.561905621291322 +888 30 -.01998557522873362 +892 30 -.3561185102579077 +908 30 -1.5168993921540186 +927 30 -.4924247369281253 +976 30 -.44965481649756067 +981 30 -.3185419324112253 +995 30 -.5272881305625765 +4 31 -.007709467817307185 +9 31 -2.1645381186636405 +23 31 -.008874212435669174 +27 31 2.7579023536457963 +44 31 -.018237205403642154 +53 31 -.6734179541888881 +54 31 2.3778091881843126 +68 31 -.8620927443235726 +89 31 -2.4597971759482498 +100 31 .3354984856648881 +110 31 1.644695836613559 +129 31 2.784948221573523 +132 31 -1.680993678840346 +140 31 1.1381355991174014 +144 31 -1.3515697246503424 +159 31 1.313628363866424 +160 31 -1.3636441357217242 +161 31 1.7153102309460122 +162 31 -1.9910499839000635 +170 31 -1.6013967887443814 +184 31 -.16847840781466733 +192 31 -1.1499370816543943 +194 31 -.3766336109151521 +204 31 .4800095514857968 +206 31 1.0641131856466604 +207 31 .010917719191467161 +218 31 -1.9380724596274845 +241 31 .590735260769212 +251 31 -1.6216848401790398 +253 31 -1.2966775258329237 +254 31 -1.142391449845884 +265 31 -.7325995819577715 +267 31 -.5287224981894305 +270 31 -2.3447690798454737 +282 31 -1.2389262819600946 +297 31 -.7770560942857996 +298 31 -.900522977228208 +314 31 .4248292577575127 +318 31 -.35339874697954426 +322 31 .015842443590853558 +333 31 .04988628586203572 +334 31 -.006190276299540186 +343 31 -1.9522641188945955 +344 31 1.50121405654805 +348 31 .09630781490928676 +363 31 -1.4144068663481995 +368 31 -.11233255208453517 +381 31 1.065188513709071 +414 31 -.18974158467432806 +417 31 .8275618281420914 +432 31 .6060998271111779 +439 31 -.4579009460662602 +448 31 .22336975689041494 +454 31 -1.1569676313409532 +460 31 -.3046028695863003 +464 31 -.6683961988682441 +473 31 .7337875360296138 +479 31 -.6077450408750376 +492 31 .5977716819618748 +504 31 1.4126505064336412 +525 31 -1.456322341938789 +528 31 .12173561827156874 +532 31 1.6492112912103782 +544 31 -.19220569492081324 +559 31 -1.075881939427438 +567 31 .7933753189228772 +571 31 -.25769568863019526 +584 31 .3057997888431153 +599 31 1.1338986259208037 +636 31 .5835344254864283 +639 31 .4759447392482687 +645 31 -1.3119866578200146 +654 31 .7547643949697831 +658 31 1.422907566677131 +664 31 -2.211254184260168 +671 31 -2.232617677374847 +676 31 -.8709276125172712 +695 31 -.5417003409683425 +700 31 .7651207393633325 +707 31 .8647700854590373 +764 31 -.6889878174210026 +780 31 -.2690821360067125 +811 31 1.3959390456560068 +822 31 .12017842913539765 +825 31 1.1120520147319322 +835 31 -.005400678476151222 +839 31 .8609132702510504 +845 31 1.7636837457905574 +850 31 -1.7608690998038856 +856 31 .10620314296385966 +858 31 .30447650682576366 +883 31 1.0867542743373149 +885 31 1.2124226636288875 +895 31 .8303002795830106 +896 31 -.3881539152582535 +906 31 -3.3540166577240833 +912 31 .5545771159605984 +931 31 .9377834130500383 +941 31 .11988671765713552 +942 31 .6262780439569 +943 31 .9964266677247184 +947 31 -.11207416970956949 +948 31 -.02851123324276722 +950 31 2.235507566803645 +970 31 -.6047171176167221 +982 31 .3936393557002602 +989 31 .30979342401074067 +3 32 .9313349828526281 +16 32 -.2731600265663719 +30 32 2.167709412097289 +31 32 .4469531218501233 +44 32 1.649605945851417 +54 32 1.885625705391134 +57 32 1.8467549349177033 +63 32 -.10749303916100461 +67 32 -.8178843781693027 +70 32 -.11921881136425719 +119 32 .39433379826865894 +122 32 1.095150836604684 +124 32 .34031525680735253 +165 32 .9056183689556601 +166 32 .6928574708783601 +168 32 2.513782738228347 +198 32 -2.351218328235711 +200 32 .8035106679169126 +205 32 -.05816237804488222 +210 32 1.3397023604982017 +215 32 -1.01078167652987 +247 32 1.8313179479854216 +263 32 1.4167156758271533 +265 32 -.3798198671873338 +267 32 -.4633481742338385 +270 32 .21894908560199827 +276 32 .0618900194356724 +287 32 -.4187375237284293 +294 32 .5646822203627185 +304 32 -1.2044999273079355 +311 32 .33071075558746554 +315 32 .4225729055752279 +329 32 .3225223148868679 +341 32 .24426425898233903 +357 32 -1.1488787943203707 +363 32 .680639610677429 +395 32 -.7825892482821288 +419 32 -.4529013737988596 +422 32 .9292186263981923 +426 32 .9279613866978317 +455 32 .9476703516322967 +463 32 -1.2738584287453307 +478 32 -.43096924755282007 +496 32 -.025999683126865687 +497 32 -.036797121983566425 +504 32 -1.046153044338013 +509 32 .6475243364740325 +514 32 .7940405046604061 +518 32 -.21904456675929126 +519 32 2.7305233494866954 +539 32 .9328863741311607 +543 32 -.6262230719646533 +554 32 -2.14876452107243 +555 32 .6089801100677666 +565 32 .07940296549088696 +572 32 .8458676600907111 +577 32 -.8732238315416628 +588 32 -.753916245861718 +593 32 .4622033829185952 +597 32 -.3906303632233109 +603 32 1.7284132191479316 +613 32 .1731764172043003 +627 32 1.3930926881312926 +642 32 -1.5104425928475524 +643 32 .9938645128341635 +650 32 1.0542397855444972 +655 32 .47588755480527034 +679 32 -.5109097581328109 +683 32 -.4643967134066715 +693 32 .9059251326603841 +709 32 -2.1763700826751586 +717 32 .9452096711204867 +726 32 -.9949432092706454 +732 32 .5682419894128543 +752 32 .6154878836397333 +756 32 2.785930765884849 +760 32 .8725894605945779 +769 32 .30226632329588476 +770 32 2.511829982487621 +783 32 -.47414918106095005 +785 32 .9349108023881143 +798 32 .5659565323011881 +801 32 -.5395640173304085 +811 32 -.10511031877687159 +830 32 -.12520276602432276 +836 32 .8371637488846077 +837 32 -.4840713905166958 +846 32 1.3162833716195361 +861 32 .993761346252142 +865 32 2.1096906324170703 +874 32 -.6068970924704004 +882 32 -1.1676687667353238 +900 32 .3530069323001558 +925 32 1.302686480308309 +930 32 .6444443042125453 +932 32 -3.0707341985915315 +943 32 -.7193432623753433 +967 32 2.2612994044073935 +968 32 .4622385055415478 +975 32 .04066459823188688 +987 32 .4883490785147378 +988 32 .8462188640496053 +990 32 .2434409594137094 +12 33 .3143625207161892 +52 33 .6208668235340186 +54 33 -.0014173551538826101 +61 33 .12841110404898154 +65 33 -.8262335291062044 +67 33 -.23126610015534482 +69 33 -.36578255628989514 +90 33 -.28007648017785197 +93 33 .02388314458621635 +97 33 .281522709380813 +129 33 -.3968961972293887 +131 33 .4422563939051292 +147 33 1.192143990099997 +151 33 .5290206371512567 +166 33 -.9035781323012232 +167 33 .7537243489554056 +179 33 .5615113483858921 +195 33 .4449085478450706 +209 33 .469043736177927 +213 33 .18540876624267347 +225 33 -.3254703467757929 +242 33 -1.2830212300126034 +285 33 -.3944112159623144 +300 33 .10047263186940614 +330 33 -.6199357089537885 +346 33 .0896858327362208 +352 33 .036260133711195755 +358 33 -1.269401045495875 +360 33 -.05262541976468872 +381 33 -.21373448785813862 +394 33 .16462656227733855 +418 33 .6785789005093646 +452 33 -.5219867411506369 +457 33 -.5402847242816755 +460 33 .555729642966817 +472 33 -.06566722792395711 +473 33 -.9428769623878018 +479 33 -.4211951736604732 +481 33 .6796511597701911 +485 33 -.17262386383424944 +486 33 1.0482389282237283 +500 33 .23990362321483066 +534 33 .16367227107533022 +538 33 -1.0681822608507257 +549 33 1.0883150650364475 +569 33 -.057886385642850924 +572 33 .33277798079917875 +573 33 -.4042005637400433 +576 33 .17831535245271624 +580 33 -.2813603933148326 +581 33 .5215242543381757 +593 33 .0858940886719923 +597 33 .17963071767125025 +598 33 -1.1220176981610477 +599 33 -1.8409515393560687 +602 33 -.14594647650314016 +636 33 -.5244649539814799 +646 33 -.04586838913568744 +657 33 -.09924542274293958 +658 33 .3769185442456474 +667 33 .17279059900447147 +669 33 -1.0048478760972035 +705 33 .06635805388538027 +706 33 -.5658968430029317 +708 33 .10832094190389292 +721 33 .8465181812904188 +728 33 -.11262102851580649 +729 33 -.07910016772793457 +735 33 -.3532320695739417 +752 33 .6025590641474986 +753 33 -.09583817997072494 +763 33 .6509796238184191 +781 33 .8084676308708434 +784 33 .05482652270485136 +797 33 .49828272995146716 +813 33 -.1531692179315677 +819 33 -.6678431212532583 +860 33 -.5910368582599628 +871 33 -.3331331595682484 +892 33 -.015495171120901652 +897 33 .19525166092932136 +908 33 -.5811111613513198 +916 33 -.10131058029546974 +932 33 .04823328605336301 +936 33 1.412398992485754 +937 33 -.3681326448774372 +939 33 .4729957522570011 +950 33 .11454158802791849 +959 33 .7525236338337591 +971 33 .3131512910543749 +974 33 -.773069043689509 +990 33 .6403402246042865 +993 33 -.5405262354519171 +994 33 -.8388847413541025 +15 34 -.5913174786129093 +18 34 -1.1528665899864394 +19 34 -.39144824177611526 +29 34 -.7938702950496384 +30 34 -.46649985973993613 +35 34 .5683118214380578 +45 34 .961459127279787 +49 34 -.5407817379944322 +50 34 -1.0660784981108578 +53 34 -1.1584141361306108 +62 34 1.5938774791102834 +81 34 -.3120439863456061 +87 34 -1.276522096609288 +95 34 1.1197212938089285 +100 34 -.7498477394284147 +106 34 -.03703051873172583 +116 34 -.10641775072874123 +117 34 -.2564808769279453 +121 34 -.2787693758928568 +127 34 -.7148797649159981 +132 34 .29259788130570086 +140 34 -.6610109350800476 +146 34 .6244844506907485 +148 34 .5374429184535984 +153 34 .8664163345947271 +166 34 -.2080688235129342 +182 34 .2033846046638142 +188 34 1.0252260032437872 +193 34 .5636838322757455 +199 34 -.15199861920980431 +206 34 -.43544151471092596 +212 34 1.2145819372988922 +241 34 -.27065394273688753 +249 34 -.18734015970139206 +254 34 -.4299837511534602 +255 34 -.5079193172932583 +257 34 .3225123063110559 +277 34 1.0807492222463888 +278 34 -.7887393200659993 +279 34 -.32065346587687127 +284 34 -.13350380205398063 +297 34 .28728608783751486 +302 34 .4950896423848552 +304 34 .6422965079878481 +315 34 .19585315482728766 +338 34 .002237052652134114 +349 34 -1.2208086324999052 +374 34 .9662121090795961 +375 34 -1.2151123566159592 +379 34 1.3660377810912172 +380 34 .9769990444384034 +383 34 -.5187144120228132 +385 34 .17616349898256545 +410 34 -.25294694558581887 +419 34 -.15867582912442763 +426 34 -.6332029806232627 +430 34 -.5377794108536318 +442 34 .4348551353305359 +460 34 .4456681167959823 +461 34 -.123030612537096 +472 34 -.3395304750441856 +489 34 .7524483218111873 +493 34 .19956405802356403 +515 34 -.18742347374616516 +518 34 .758316493150994 +520 34 -1.7093943180702516 +534 34 .5492420113658081 +535 34 -.38589861111696 +547 34 -1.356293769598337 +551 34 .11078114566476292 +562 34 -1.06091643934805 +584 34 -.3437236952638421 +585 34 -2.9766174758566217 +589 34 .3785933592367685 +592 34 -1.8093035327628826 +593 34 .9232072936272883 +597 34 -.004662719008792088 +633 34 -.487075602671176 +638 34 -1.3925107256086535 +644 34 -.05567769824753262 +663 34 -1.4447782771578328 +682 34 .6742470160776702 +692 34 .5679890046888958 +693 34 -.3393817419855417 +698 34 -.7146975038179664 +714 34 1.3453405955417115 +723 34 1.3180438820889087 +740 34 -2.5593526004772946 +750 34 .48344923383042265 +752 34 -.05324650358791494 +753 34 .5954148877557581 +755 34 1.8652376963676902 +758 34 -1.4030530564100643 +777 34 -.8085137825721955 +789 34 .2083041592701059 +796 34 -1.4113070730293034 +810 34 -1.2860236129152436 +816 34 .09963060852844016 +822 34 -.29042077847959635 +839 34 .30336805775424636 +843 34 -1.2876254652892 +851 34 -.6677247882122906 +854 34 -.5687593143509673 +868 34 .024685689655907173 +869 34 -1.0707135873301519 +875 34 .6207700988666482 +879 34 -.26308320917970734 +892 34 -.7650462193248212 +893 34 -.6578075302933684 +911 34 -.6299025528203586 +929 34 -1.1436537925762658 +936 34 -.9249705201290063 +944 34 .08566936861983113 +972 34 1.0144116688347762 +977 34 -.1169113725679336 +981 34 -.9751972028779443 +6 35 2.1689432083540496 +8 35 -.7407265504320089 +15 35 -.006614733297172465 +16 35 .3353201784365649 +21 35 1.2085697378009717 +34 35 .7427883841735579 +41 35 .03382829507896494 +46 35 1.5474093028718212 +49 35 -.504683123265173 +58 35 -1.9550562634709725 +65 35 -2.281120079828359 +67 35 1.5938037670092986 +74 35 -1.1344170532877365 +98 35 -1.0157409432391509 +109 35 .3305673338584502 +148 35 1.0429144338419292 +151 35 -.04839549329385105 +154 35 -.21493323565165467 +158 35 .17842761715783823 +188 35 -1.2678046427390857 +190 35 -.9873452892828869 +199 35 -1.272382328274912 +215 35 -1.0154172035642985 +226 35 1.034950477760784 +231 35 -1.055709370377103 +235 35 -1.320152873909466 +242 35 .7944423123297064 +247 35 -.7170603243891867 +283 35 -.27316140855675464 +307 35 -1.3444607781060618 +308 35 -.2924968638091794 +311 35 -1.4180074432553913 +315 35 -.3100256472139538 +317 35 -.9637831977038991 +345 35 .03457370764725924 +346 35 .9899373805955883 +373 35 .1499088046529895 +399 35 1.7117163403630529 +400 35 -.7842941649183588 +403 35 -.5625196768894324 +406 35 1.171497575565261 +410 35 .7297325850304917 +415 35 -.9874014190645759 +446 35 -.7336461021350261 +468 35 .04610209385761477 +483 35 -.7881438165525585 +488 35 .8321233032238687 +489 35 .009235797635130985 +495 35 -.5392547337181888 +497 35 -.1926075329352292 +530 35 -.29112160532899345 +547 35 .29968258823931265 +557 35 -.057611759833497866 +561 35 -.8771198222594077 +566 35 -.5890420926438974 +600 35 -1.9037408743686774 +614 35 -1.7233575799878684 +617 35 -1.8929318880477497 +621 35 -.25385492937641385 +640 35 -.3471120754587181 +651 35 -2.5478321427720165 +657 35 -.0768366074524556 +677 35 .34786063200129425 +694 35 -.6548531306180413 +696 35 -.2067162556511128 +706 35 -.22739343386768823 +707 35 .344621235666503 +708 35 1.1656169175603588 +710 35 -1.7127789748301316 +717 35 -.45604485486377055 +732 35 .0965055641062223 +760 35 -1.8180672476030026 +765 35 -.21943263874068447 +780 35 1.8515541175418058 +791 35 -.8599914827654932 +794 35 .8369968685424353 +797 35 1.3400025731713265 +799 35 2.537720606915923 +810 35 .9933638772946748 +819 35 .6000216002845811 +827 35 2.0491991394751925 +831 35 -.5611279486989207 +838 35 -.5250187436065392 +845 35 .2536415448746303 +847 35 3.35816835254494 +849 35 -.7412465426324832 +852 35 1.3846868871826103 +854 35 -.27596156061793753 +856 35 .005988413096493625 +893 35 -.25844797529504626 +894 35 -.6464537411386546 +898 35 2.0969652501465266 +900 35 1.183816359775505 +901 35 -.8327714615409538 +907 35 .8502817799251526 +918 35 .19046483482249799 +922 35 -.17340973495473966 +931 35 .042328190487514586 +937 35 -.22179028642990792 +939 35 -.40052263978154257 +940 35 .0025259654058167706 +960 35 -.6876485130273153 +967 35 -.12031727859310841 +979 35 -.21469702073073854 +983 35 -.6947622934189848 +988 35 -1.4481328791768986 +995 35 -2.240826620342675 +996 35 -.4710540308056964 +997 35 .9181729842288568 +10 36 -1.596340409542879 +24 36 .4272664814164577 +25 36 -1.8019522069658649 +30 36 -.7123456234664192 +39 36 1.1508222665526187 +41 36 .19860845142999875 +61 36 -1.1893156940619831 +64 36 -2.2219261559238612 +66 36 .09063470233912946 +83 36 1.2365489718930514 +84 36 -.3360417633581673 +97 36 -1.1113293319966553 +107 36 -1.4804587288069255 +137 36 .24805478181067037 +140 36 -.19704625909730472 +149 36 -.48698156581542823 +163 36 -.1731839700690086 +171 36 1.2976462853364013 +175 36 -.7529031712476694 +197 36 1.3353459674686081 +202 36 -.28663000100485453 +203 36 -1.6948425422566085 +229 36 -.31885698920343764 +234 36 .9795697366437224 +239 36 -1.7005262710409075 +242 36 -1.1890055685826293 +248 36 -.7488080308580588 +250 36 -.2894355752923163 +262 36 .8172582907205249 +264 36 -.4408294532734577 +265 36 -.33890942206554314 +277 36 -.7197564185807919 +284 36 .1589179879436866 +286 36 .06728413574863676 +289 36 .23587805859487251 +297 36 -.915065392854308 +324 36 -2.5424037121458953 +326 36 -.021285295424531038 +328 36 -.07798503630089523 +379 36 -.7600087615800425 +390 36 .6393643334194978 +392 36 .03186637920871921 +399 36 .09156839392230884 +414 36 -.7153821131353251 +417 36 .4360689881457396 +424 36 2.5590638789928435 +425 36 .6815474506260786 +432 36 -.39799002164163205 +437 36 .35479031723613585 +451 36 -.8624627167383001 +454 36 1.1807963030827344 +457 36 -1.9171160699603138 +491 36 -1.4465301980374479 +495 36 1.2099105654547597 +497 36 .222037475279385 +516 36 .3123794077044043 +528 36 1.8511737915911128 +535 36 -.8829900894901475 +538 36 -.48806234283852323 +566 36 .5618846717272913 +585 36 -1.5137645555339947 +600 36 -.45529600082953603 +604 36 .8546156687710774 +610 36 -.23046009186539418 +638 36 1.8523922534343276 +643 36 .3197373722878679 +657 36 .02820492416711537 +680 36 .09392566678777622 +682 36 -1.1303568255891145 +686 36 .6917568653526434 +697 36 -.6930687303317052 +698 36 1.5990014397988879 +725 36 1.7981414136738028 +741 36 1.3012611525175497 +751 36 1.053022692214641 +752 36 .9754462930331491 +791 36 1.1113419544307632 +813 36 -.8834715217044252 +822 36 .9184153749077304 +832 36 .0721812118444379 +840 36 -.420565710885657 +867 36 -1.3220839030402287 +871 36 -.3222836560604009 +875 36 -1.2246800527795632 +881 36 -1.2872524552393434 +901 36 1.5348715932923838 +922 36 -1.6009769848974196 +951 36 -1.2017770722209868 +968 36 1.0828388206356103 +972 36 -1.311517868940773 +977 36 -1.7740459196984042 +993 36 -.5387438753368978 +12 37 -1.1769146551474883 +14 37 .9662792026121622 +22 37 .5926078520498841 +27 37 -.1293835332180282 +28 37 .05560854064866062 +34 37 -.10735115290867886 +37 37 .2016348931299578 +44 37 .5325001825249113 +48 37 -2.5001076694957254 +49 37 .34873536512041264 +57 37 -.23133903533238037 +61 37 -.24405689491891658 +67 37 1.237316608096115 +68 37 .833306300470531 +71 37 -1.1604948081713766 +72 37 .9708444096064489 +76 37 -.2380665265432864 +87 37 .844210221420916 +94 37 -1.9371641560094501 +101 37 -.8000687622444951 +120 37 -1.0728842641934655 +121 37 -1.1298021166708352 +123 37 -1.0666515640060483 +135 37 -1.4799605569796612 +139 37 1.6165659934788215 +146 37 -.5754858312117619 +148 37 -.09395291289397145 +154 37 -1.3036242905687705 +155 37 .2042963292438425 +163 37 .3304194600011545 +175 37 -2.0688312070126305 +201 37 .7918973544496736 +225 37 1.3147808983857376 +242 37 1.9951986347172646 +247 37 .08980935834293019 +249 37 .4326442344594872 +259 37 -.16116463238545234 +268 37 -.14912160538838465 +271 37 .8517482415724263 +282 37 -1.2769409992426146 +290 37 -.759582497655503 +293 37 -.44614529102199246 +314 37 1.1863468538253228 +322 37 -.9581116796400935 +334 37 1.3191777706106866 +345 37 .5054432881553385 +356 37 .006373739109016056 +373 37 1.4450549150058007 +383 37 -1.4890628711518894 +409 37 1.7296204896535234 +412 37 -.2886490228637158 +416 37 .2865205481493958 +434 37 1.1514958423647812 +443 37 -.5854250895818169 +448 37 -.666095823926821 +453 37 -.2127897129646211 +454 37 -.5713164502583303 +457 37 2.1184973038286032 +459 37 -.07751291528727493 +460 37 1.0744507211486243 +471 37 2.170682033590025 +472 37 -.6006588183431107 +474 37 1.5246994627627202 +479 37 -.14957329915553796 +486 37 .617102393170844 +492 37 -1.1184177726142626 +510 37 .17554162954138494 +513 37 -.2655647966214755 +521 37 .005966466236973722 +530 37 1.3331024419155755 +538 37 -.8030073809980818 +545 37 -1.1594515829026821 +552 37 -.8633821134493572 +561 37 1.1864082384548875 +577 37 -1.6971633093683183 +590 37 -.9858375903767209 +595 37 1.9015085351945893 +629 37 .17106455389302838 +631 37 -.4197372723449253 +637 37 .2509453695131609 +647 37 .5452179971762408 +648 37 -1.7517173364608722 +671 37 -.12084015093955452 +698 37 -.45728745041380126 +700 37 .2485954628269855 +715 37 -.13031055283615328 +724 37 -.5086513806386708 +727 37 .6654967398185179 +743 37 .6128391419838047 +746 37 -.6082220729063156 +747 37 .6866429157215717 +760 37 .6841753495599118 +776 37 -.6435420977491721 +780 37 -.6698112601912828 +800 37 .564243340122081 +821 37 -1.2450785009390888 +826 37 1.0259354681718684 +828 37 -1.5418408871986387 +830 37 -.32754112393674767 +841 37 .41070347290804465 +843 37 .4515971556948857 +847 37 .14033040142612943 +862 37 -.011332881341218987 +863 37 .6160014679685628 +870 37 1.3534503411927692 +871 37 .13942940227667883 +879 37 .9041700393228266 +880 37 .7983710850786516 +891 37 .53332694938628 +895 37 -1.0352881822620013 +898 37 -.42767512367015237 +911 37 .5017054876943894 +912 37 .7916642576483031 +915 37 -.01642713224513731 +930 37 .5630652309626267 +939 37 .4029236798424525 +946 37 -.5412489505356455 +969 37 2.4055130527835797 +977 37 .8585793724196904 +985 37 .27086533615075975 +6 38 -.3745208924620927 +13 38 .2000829942029031 +25 38 -1.7848971273049732 +26 38 -1.4371864577295166 +31 38 -.702807183841329 +59 38 .10817109312291529 +61 38 .9901862902865257 +67 38 -.13636598045172973 +75 38 -.15306542748344742 +92 38 -.0435781178433918 +105 38 .6043726462621712 +109 38 .530282792962862 +117 38 .24650488864681494 +123 38 .8926972521391543 +127 38 .47258820665317725 +130 38 .4505537432151353 +150 38 -.6142548537894094 +157 38 .7553222606168308 +159 38 -.08973669494315395 +165 38 -.08410500434866719 +166 38 -.5641451948963343 +190 38 .47557683711950594 +209 38 .07942675686904532 +239 38 -1.4070184808991153 +242 38 -.8532875689640939 +246 38 .29731425102911085 +248 38 .4675769150533313 +254 38 .0056949785236232175 +263 38 .2057096940889452 +274 38 -.0014604218834977636 +299 38 .3785674530666006 +302 38 -.20533299480038875 +305 38 -.2631393644376525 +319 38 .7856643910748305 +336 38 -.30806974344247084 +345 38 -.6158152975293375 +355 38 .07098387707246684 +368 38 .2135705550293871 +384 38 -.04187754339516927 +386 38 -.41098435675664674 +387 38 .43523933782364876 +394 38 -1.4455309572591728 +397 38 -.374003622849675 +398 38 .48256532918549844 +418 38 -.7473432927119433 +420 38 .8253392242864594 +428 38 1.196566300978804 +432 38 -.4801376340491408 +446 38 -.44410389815166085 +454 38 .0036590158794343464 +508 38 -.11763257565174076 +509 38 .06568079938766784 +513 38 1.3186168842806958 +521 38 -.429151678486354 +535 38 -.3320726365816785 +538 38 -.23911233872393403 +539 38 -.39408866321922986 +540 38 .5615608396446584 +577 38 -.1545792389065584 +591 38 -.03583998443879427 +600 38 -.2758771085734831 +616 38 -.6886990671775953 +625 38 .05972085762847629 +626 38 .9797768501726991 +643 38 -.7803228661580514 +645 38 .13247414351003675 +646 38 -.9324108421641016 +650 38 -1.4078747478846119 +656 38 .0711857339311699 +766 38 -.6492712281371338 +774 38 .08338237752276467 +780 38 -.5637368696090533 +783 38 1.143316233906743 +798 38 -.7363889454080781 +800 38 .1849868159060967 +802 38 -.6325400592791173 +805 38 -.34008268420344046 +806 38 .05770851079834617 +821 38 -.6003783011673822 +833 38 .765495289737177 +837 38 1.5815555870432751 +839 38 .3021502024186291 +845 38 -.8614295962427135 +853 38 -.2529863129529539 +856 38 .040540957106683664 +859 38 -.23500248021770037 +880 38 -.23799338658481708 +884 38 -.10073939836041551 +909 38 .6414185615282875 +937 38 .09656784481072289 +966 38 -.4078113487004003 +970 38 .3054254721898127 +976 38 .8450942095423782 +986 38 .815904278772044 +997 38 -.5844385477382587 +7 39 -.4990206613550514 +22 39 -.6468670531359176 +28 39 2.4358790981394636 +32 39 -.7658254542386883 +34 39 .18386373220202262 +36 39 -.5621169748532603 +55 39 .6220835804508342 +76 39 1.3060396267867582 +77 39 .27432786396835107 +85 39 -.16567348007100857 +99 39 2.486019846165284 +120 39 .2876728314659762 +131 39 -.07779097260186031 +150 39 -.5066301712826144 +154 39 -1.0073164439867552 +173 39 .43055531423585514 +174 39 -.8504891242587135 +176 39 -.29252279960726857 +179 39 .5544677064717662 +187 39 -.21709872606973996 +192 39 .48165136736055464 +196 39 -1.9099761030784934 +198 39 -1.3035301186125554 +205 39 -1.6885572666191435 +208 39 -.9239466629477189 +229 39 .8675986516736367 +230 39 .7568136494663393 +232 39 .09746801842415706 +233 39 -1.1968805273785648 +235 39 1.1164844187667324 +238 39 -.5575051680701667 +252 39 -.8406392296344378 +258 39 -.9611634746510924 +260 39 -1.238876334810267 +279 39 -.26235628650278076 +288 39 .5101300351673218 +291 39 -2.7552533937800527 +296 39 .022706847650681858 +300 39 -.574887394365973 +301 39 -.007743473784029051 +309 39 -1.4846315881871461 +315 39 -.46428291931688326 +320 39 -.9136230345934994 +321 39 2.3694171213673827 +322 39 -2.9460586069630956 +367 39 .46003526856808435 +383 39 -1.4996581589947122 +392 39 2.089636009253201 +412 39 .31527859897376975 +413 39 2.2724060374211446 +449 39 .7301624296771997 +483 39 1.206501027836392 +505 39 -1.4552337562499684 +524 39 -.5250150496336733 +539 39 1.2234370397880805 +548 39 -.45879021589721375 +567 39 .08613399890967652 +575 39 -1.556567225452565 +586 39 1.2439031154711282 +589 39 .13682645658644543 +597 39 -.36154505375205104 +599 39 2.3132426795345147 +602 39 -.4922595405222349 +618 39 .3219989841757005 +637 39 1.4992469609900638 +640 39 -1.2342411000502231 +647 39 .562405965698312 +652 39 .9960880691094958 +655 39 1.3227925576195456 +705 39 .4218296236104766 +734 39 -.27400696686657866 +736 39 -.9805098656792529 +739 39 -.5792828264522163 +760 39 .36501237140633686 +761 39 -.09296026037716762 +762 39 -1.0985098204041066 +782 39 -1.5198309850393694 +785 39 -.4954720072360186 +800 39 -.44447089327911676 +804 39 .200507755962188 +838 39 1.2619060785150762 +842 39 1.1019207145901224 +845 39 -.0972684446874516 +846 39 1.451197830398738 +853 39 -2.097324339731098 +862 39 -.6486850218644136 +877 39 -1.5299568623106143 +893 39 1.5813952471161645 +894 39 -1.4431890007448895 +902 39 .10536622084022593 +909 39 .9355469417793986 +929 39 -.16712709910871243 +933 39 .1334412499118288 +945 39 -.4243101463299983 +964 39 -.4225808089659541 +966 39 -1.722512153623337 +980 39 -1.3295573686325166 +989 39 -2.752380787328297 +993 39 -1.7129652980266192 +996 39 -1.3957204547829931 +18 40 -.4366977852756713 +22 40 .03310506409941058 +65 40 .23624398838379884 +67 40 .3633202705383686 +72 40 -1.5161095229582893 +87 40 .7919242994514051 +91 40 .350665145797016 +94 40 -.23065651583339808 +97 40 2.9594955980551907 +99 40 -.7899705798491203 +103 40 -.5324003881739187 +107 40 -1.0241025143616664 +123 40 .227363663411419 +128 40 1.9834711585143818 +130 40 -.8923244219932208 +140 40 .228332578904537 +162 40 -.3543851499495566 +164 40 -.2254709839755752 +192 40 -.3258074462326701 +198 40 -1.415013229210043 +208 40 -.23239856835061248 +220 40 1.1608287601363116 +245 40 .7193212595746669 +248 40 2.1104331106618273 +255 40 .5760986622504418 +266 40 2.02021845674303 +290 40 -.3628343743088997 +354 40 3.179466740925852 +374 40 .350757881108239 +379 40 -.22914448742952695 +400 40 1.2328601252175493 +406 40 .5349048313432697 +411 40 -1.0806992831177737 +412 40 -1.906278785044783 +452 40 2.1578781537014455 +460 40 -.9937093289832313 +493 40 1.000309047452075 +498 40 -.31342083301063484 +516 40 -.17065450185757758 +520 40 -.6380331747246097 +523 40 -.2795825146161193 +535 40 -.8440454495837383 +559 40 1.1410438165792742 +560 40 .9834938122642598 +569 40 1.018663837253249 +597 40 1.4593331137735417 +609 40 -3.121600497615249 +612 40 .8117802306478403 +631 40 -2.1759036700462517 +637 40 2.6662956225509435 +639 40 .9079824629209027 +652 40 .444924930739885 +654 40 .24606912094971548 +685 40 -2.225461526170604 +698 40 -2.2676457975964066 +699 40 -.4523053010958809 +705 40 .8113003497849028 +712 40 .17928563530075078 +718 40 -.2750012220025994 +720 40 .0540968461663118 +728 40 1.5269391100610206 +730 40 -.1615518818886758 +750 40 .946061500972791 +769 40 2.2159094773698906 +773 40 -.22812481170678423 +792 40 -.6016858661899892 +795 40 -1.2754251731019088 +831 40 1.1555574054399536 +864 40 .5234509766803603 +868 40 2.430786523990818 +871 40 .7742197416148949 +874 40 -.08853609459985994 +887 40 1.5383479557368944 +893 40 -2.4959054807873873 +895 40 -1.0103200056178443 +899 40 3.120043897550201 +906 40 -.7762241480846498 +917 40 -2.252426672315252 +929 40 .9283177761772072 +948 40 .4092277623305949 +951 40 -.1791221225449263 +975 40 -.6036573982040149 +994 40 -.2336934168310942 +13 41 -.5069184995400817 +16 41 -1.3614519389047672 +31 41 -.08230492086530203 +32 41 1.1028250756350388 +54 41 -1.631746291514681 +69 41 .7038822253444917 +78 41 -.37159367723206077 +85 41 .8827367874013101 +97 41 .7383079650386656 +103 41 1.7036824144080343 +107 41 -.2969667001721248 +119 41 -1.0457459223550545 +125 41 .2312575883724896 +128 41 -1.2301385601910866 +138 41 .20690350005292596 +147 41 -.30206263176821635 +149 41 .26136440659050175 +157 41 .9323891089516453 +159 41 -1.4307762047082253 +172 41 -1.296636359440826 +174 41 1.1227236044533733 +181 41 .38833378887324926 +182 41 -.3111077068350398 +190 41 -.05709728812229642 +206 41 -1.0699387815160448 +210 41 -.8205220003892653 +216 41 -.7021770782497804 +222 41 -.012067839649199122 +228 41 .6001663198387641 +239 41 -.3195966693499246 +240 41 -1.6663977368323037 +247 41 -.6602756057412424 +254 41 -.47407139405259097 +257 41 1.015441989311279 +276 41 -.017174829453882275 +281 41 .46667377357962037 +288 41 -.04186602742955935 +290 41 -.5242308133103668 +293 41 -1.664043607768805 +307 41 1.025755892760331 +338 41 -1.1580612763028901 +345 41 -.9388970047233219 +346 41 -.3968203620125399 +369 41 -.25314060179255954 +372 41 .5810787822306251 +381 41 -.06586285780306284 +404 41 -.1665537723914418 +413 41 -.16567180022346345 +456 41 .9003718318206002 +484 41 .43900728832451796 +492 41 -1.1399815491938063 +528 41 .7229418563429585 +531 41 -.8493004226312858 +543 41 -.6016855085919606 +550 41 -.16688060385064232 +555 41 -.08755681182655775 +558 41 -.15564470724798984 +576 41 .6581718433702821 +581 41 .4908358476636491 +604 41 .05297166951586382 +605 41 .3107755597857293 +629 41 1.4614499958311997 +630 41 -.4170326697492879 +634 41 -1.7135406326249882 +639 41 -1.4346929462818843 +649 41 -.6931905119380307 +657 41 -.06122087299701241 +658 41 -.6383045566749139 +662 41 -.9581103398857342 +666 41 -.5586504248327435 +669 41 -1.1671990840769781 +670 41 .6330060996120976 +671 41 .3670572362297189 +675 41 .7855949761127919 +678 41 -.15288006076894506 +682 41 .6145474092899859 +689 41 -.5399335606215288 +713 41 .6715359107480142 +716 41 .6626608069517286 +717 41 -.3869406120474662 +727 41 -.7935566748307444 +730 41 .5381206065482889 +731 41 -.7630485085951922 +740 41 1.1903436268945333 +762 41 -.0938881165917034 +771 41 -.7892177672499684 +773 41 -.500827692171034 +775 41 .7074746315171225 +783 41 .3393094592090474 +800 41 -.33310024605762223 +806 41 -.2588421172039296 +810 41 .33037289625326627 +821 41 -.013032731871085938 +840 41 -.21799782811173846 +841 41 -.41500344810533446 +887 41 -.8566446471244678 +889 41 -.028175918175995733 +908 41 -1.1403501456814629 +909 41 .8147860279447857 +914 41 .270728320136322 +918 41 -.38017286038848763 +919 41 -.7517518445386872 +921 41 1.1449718414688077 +932 41 1.4896963191500117 +934 41 -.18138268735002328 +950 41 -.4034827241793639 +977 41 .7467327647769427 +1 42 .048775437331426585 +7 42 -.9005327496783775 +12 42 .4404090716936546 +15 42 -.861763641023655 +22 42 -.7078004911632233 +33 42 -.7635655358460971 +35 42 -1.3976615164352484 +45 42 1.4429736573854675 +57 42 .6085325878954981 +69 42 -.903405172390316 +75 42 .2793247087014626 +98 42 -.6559009192145995 +104 42 1.1286235075256186 +105 42 .6076445743721501 +110 42 .1690991295304713 +112 42 .7485667881689537 +138 42 -.7224327394923444 +146 42 -.8104360488760871 +151 42 1.1901675261802598 +162 42 .14561478405715161 +170 42 -.9636870740573794 +188 42 .6571180247837844 +189 42 -.3598743679541283 +193 42 -.05507645473385616 +210 42 -.11723219584421271 +213 42 .616364574743082 +218 42 -.31122640166277415 +229 42 1.4200326756948733 +248 42 .8694059007040903 +257 42 -.23021542521185276 +280 42 -.24893069078912408 +287 42 1.784244115972743 +291 42 -.7099213928396744 +306 42 1.541325276666738 +319 42 .26163425351076 +355 42 .9840994232589069 +372 42 -1.283419919167105 +378 42 .4017897151986828 +383 42 -.9052223154851284 +385 42 -.6638407851133069 +386 42 .6747635452145047 +410 42 -.8687817875233472 +419 42 -1.8935041226863611 +433 42 .7232354172938378 +449 42 -.30055306842799606 +452 42 1.1316779004314546 +454 42 .5942466665343893 +483 42 .4062152207379424 +499 42 -.6163630054007845 +513 42 1.119335229932291 +514 42 -.40729504084693857 +518 42 -.6498344341898624 +520 42 -.14133118145141726 +521 42 .3724025080882683 +540 42 -.4010065780971758 +542 42 -.10719484859268094 +543 42 .7605013463563989 +547 42 -.18441312659520998 +562 42 .30950362327675146 +567 42 .6940900922814668 +574 42 .8078773409879066 +580 42 -.24015138312399972 +586 42 -.4869938042884487 +587 42 1.6347644321167127 +604 42 -.4056428373753103 +618 42 1.2913500061958025 +627 42 1.7301874124264958 +632 42 -.2563716623615431 +641 42 -.41793337635494837 +644 42 -.3625506049686291 +649 42 .05428360255946976 +651 42 .43127645247040547 +719 42 -.5722076609418438 +731 42 -.5122362238342155 +735 42 .6034704021839947 +761 42 .0046699870608349695 +776 42 .8429916825348467 +784 42 .2689075230013071 +786 42 .4706497013314296 +790 42 .6243832443537446 +795 42 -.14374524115448176 +801 42 -.15150473678751117 +807 42 .3596484456340856 +814 42 -.8969050967453633 +816 42 .5888102674598303 +829 42 .9620139853946592 +835 42 .581392722951965 +859 42 -1.880762265178977 +873 42 -.21048181775303293 +876 42 .7027276372782272 +892 42 -1.000169338552323 +895 42 -1.2794960692859445 +910 42 -1.0352417057011059 +920 42 -.25216298589833475 +952 42 -.34942899362384794 +956 42 .25849505718292465 +964 42 -.12090380170598616 +982 42 .043109992552627124 +984 42 -.8420334547704295 +1 43 .33006131589050003 +4 43 -.620278310538278 +15 43 .8553861631125746 +19 43 -1.7011827661456373 +46 43 -.7894244493238481 +50 43 1.5234353944271228 +58 43 -.4661429154792463 +73 43 -.1930453862082568 +100 43 .4348386714087092 +111 43 -.1824676324476444 +125 43 -.11447316826398352 +126 43 .5031520547830517 +127 43 .8565989517807504 +137 43 -1.9724467637333434 +149 43 .6752899738452098 +188 43 .6617352461580909 +208 43 1.1341815042445649 +244 43 1.6682926839815047 +245 43 -.6589600489656892 +262 43 2.493045969330039 +267 43 -2.1431512153130767 +272 43 -.8348582356809711 +278 43 .20285710066530482 +283 43 -.5195997541167041 +291 43 -.6757019383782338 +312 43 .2379667166233988 +314 43 .6033819951511293 +318 43 -1.1548672772059505 +329 43 3.271600282601352 +338 43 -.9918465616450645 +360 43 1.3012304821637142 +361 43 2.8699975990064774 +371 43 -1.4739493585844183 +375 43 .193577875830524 +383 43 .2032129883014217 +386 43 1.4145286174861236 +390 43 .5920101268118038 +392 43 .19575323908916725 +408 43 2.35244275215304 +419 43 -1.4395653055402242 +446 43 -1.1861672265637753 +450 43 -1.2760088400260732 +480 43 1.2069886527585698 +484 43 1.601197222872369 +486 43 -.18550520494465939 +524 43 1.4115191773569482 +535 43 -.1195441135641798 +548 43 -1.3011336064726564 +551 43 .6137413884783367 +569 43 -.11354376456320056 +571 43 1.6294317148191968 +572 43 1.0974951571689264 +582 43 .021828162826297078 +584 43 .37149209958765966 +597 43 .8418419070740378 +610 43 -.9921324580527914 +618 43 1.833934696749743 +624 43 -1.9365965512970515 +626 43 -.9705359081800736 +628 43 -1.7065896800419706 +656 43 3.2526023792824335 +660 43 1.3668246714967152 +678 43 -2.0658323950925084 +698 43 -1.2195113928585792 +701 43 -.4691508934913162 +705 43 .10188341176523913 +707 43 -.8539169952372287 +724 43 -.3080324498965949 +732 43 -.54002709566239 +733 43 .054651195888968176 +740 43 .7357811283551974 +751 43 -.8063496887007515 +761 43 -.15045083937582876 +781 43 1.6286472857740015 +790 43 -.32461601582427385 +793 43 .9651495826372133 +800 43 1.398103398546721 +801 43 .3723199032076492 +818 43 -.5898412248032241 +839 43 .6425433933630451 +841 43 .6801618782902918 +853 43 .7581293187856494 +857 43 1.9250063748730457 +858 43 -.7726549979096946 +877 43 -.3397942856247863 +885 43 -.3024558830030714 +892 43 .10646238950275495 +896 43 .678333376524279 +916 43 .21156370755390874 +924 43 -2.064238483103953 +927 43 2.4162548102573513 +928 43 1.5888249993237367 +935 43 -.352587389887385 +937 43 1.2530996674916597 +940 43 -1.068187807298007 +943 43 -2.4752124310629813 +950 43 -1.4281570429756831 +957 43 1.408392054457849 +972 43 -1.1209983841132392 +978 43 .4655714776646468 +980 43 1.7206549727316445 +988 43 .44549992923981263 +989 43 .9981222664902965 +1000 43 -.5049670011929721 +1 44 -1.518721354293485 +10 44 2.407583081799446 +25 44 -2.466916190345792 +44 44 .3900933587501718 +66 44 .8559995730866344 +67 44 -.22266899728748935 +68 44 -.6679731862834013 +98 44 -.7968355147331512 +100 44 -1.9506675448646646 +105 44 .14556896982685977 +107 44 -.8775956036949168 +122 44 1.0199511597399344 +133 44 1.0991265309606413 +152 44 .10978162055635414 +162 44 .36183762135404945 +170 44 -.6386112688409045 +175 44 .1312464186332327 +185 44 1.2507968388300548 +189 44 1.018543843256804 +193 44 -1.2264516451740994 +231 44 -1.0627274298116218 +243 44 .9093679236701468 +274 44 -1.9928308018935375 +283 44 -.360284680758726 +285 44 .9928304556036104 +286 44 -.034763823449148606 +287 44 .3723997528821518 +300 44 1.5412713982005823 +305 44 -1.0398799960566036 +307 44 -.0193909075215914 +318 44 .5825440644834401 +363 44 -.3399820342960701 +368 44 1.651005782603584 +374 44 1.0875865356929426 +377 44 1.365979090469115 +378 44 -1.61823890769155 +381 44 .19498586033881704 +427 44 1.6018171733243114 +433 44 .8818347874857972 +434 44 -.49219350199376777 +437 44 -.8211541947672957 +440 44 -1.4085474214364808 +462 44 -1.7333299141636442 +473 44 -2.6025398356548446 +494 44 .10781665631652346 +502 44 -.562137463831825 +510 44 -1.9693345313733495 +511 44 -1.1196779751233419 +519 44 .7295493842095307 +526 44 .9862348167116552 +530 44 -2.3041407949793045 +539 44 -.20587948939530432 +541 44 .054968602588374854 +573 44 1.3663627809002779 +586 44 -1.5503823289478904 +619 44 -.47361350475151576 +628 44 -.14641000743334073 +637 44 .8526565503338739 +652 44 .6102407703979524 +655 44 .5886548313678311 +664 44 -.7827740125968378 +666 44 -.7797180922772526 +671 44 -.1539466288537181 +672 44 .26851488453620803 +673 44 -1.3412950381999942 +683 44 -.48214908561825404 +699 44 -.042504777992862716 +731 44 .12671628567286936 +744 44 -.5849161452359567 +745 44 -.40820644133562195 +748 44 -1.6037037778891314 +749 44 -1.9411076006803507 +764 44 -.6072316124279336 +765 44 -1.0368593745643124 +768 44 -1.4223707530448024 +779 44 1.6571144065807015 +784 44 .9460306460270007 +789 44 .42002189086221764 +793 44 .6394496356896668 +801 44 .9214346775689659 +817 44 -.060653247721063175 +818 44 -.664104964185151 +821 44 -.004487387996226132 +824 44 -1.0688062805694944 +825 44 -.82090069817441 +826 44 .532978570848008 +840 44 .5107442226315316 +841 44 1.016702045688923 +848 44 -.25592345523537274 +851 44 -1.2859958226152812 +866 44 -.04961922201564231 +871 44 -.2485075202295508 +878 44 -1.0112994669647837 +879 44 -2.175214672993261 +882 44 .5304321064412697 +887 44 .9351227204229767 +897 44 -.9886921396003249 +952 44 1.209111759058925 +956 44 .284271426268779 +966 44 -.11238184512864807 +970 44 1.0151579004874145 +986 44 -2.0841320122916542 +4 45 .11095005223714552 +6 45 .6124119622850043 +22 45 -1.5595912322701375 +48 45 -.741163617497414 +61 45 -.5264429740966605 +66 45 .014354048324706995 +81 45 .08887904255721792 +105 45 -.4962544328466374 +108 45 .0910861616609425 +112 45 -.7666011913465979 +119 45 .13754912917473744 +144 45 .7756984963168421 +145 45 1.351333492784858 +156 45 .7580672206270912 +161 45 -.14658515589005913 +168 45 1.44736934819256 +172 45 .028888315535376186 +176 45 .22495848549106523 +178 45 .883298407163967 +201 45 .3320983120168259 +216 45 .441632625357223 +220 45 .3142981768515873 +225 45 -.6551730816059484 +257 45 -.6589754339736793 +277 45 -.2104779766016203 +291 45 -.7124361384529568 +299 45 -.11359499651367135 +310 45 .585575470791421 +332 45 -.05747395324297325 +334 45 -.02163424659613941 +353 45 -1.2493853734475615 +359 45 .4229453233558131 +368 45 .13335868192076064 +369 45 -.12290138901782449 +370 45 .6778051367084805 +378 45 -.5156736588747064 +387 45 -.4431871704305018 +389 45 .6153335213972827 +403 45 -1.1293496365605753 +411 45 1.0450843661023936 +421 45 -.2908380617699714 +428 45 -1.697767800708566 +437 45 -.14872168880251402 +439 45 .23284341892422464 +454 45 .6703357141424406 +470 45 .9158191491310779 +472 45 .7564949331071826 +476 45 1.2398667079408907 +491 45 -.7113438587473406 +508 45 .23046428068675262 +511 45 .6216794204580051 +520 45 .7293459080214356 +531 45 .5318680044514246 +540 45 -.4282647152909531 +551 45 1.7257617633446738 +553 45 .8341502139412911 +557 45 .2816940612541693 +559 45 -.7476293772824909 +580 45 -.5394955268422529 +582 45 .4647068070168608 +583 45 .5759343703642532 +619 45 .06838556972342123 +627 45 -.48809187359024525 +632 45 1.1922116798333495 +647 45 .05010681361436724 +659 45 -.38328212456582555 +680 45 1.5791198832028264 +690 45 1.7184211265929348 +695 45 .051890064274402584 +704 45 -1.08148960716963 +715 45 .11414288153444717 +718 45 -.7413399917705524 +721 45 -.9248215373014397 +723 45 .8662234434499007 +735 45 .7719403751741801 +751 45 -.7399605808459992 +754 45 -.6314163548949988 +763 45 .04049748712858539 +773 45 -1.2731940659884309 +779 45 -3.0990074582290292 +789 45 -.18859846902569524 +797 45 .4464007065379913 +802 45 -.39675455276095095 +809 45 .002451804659426432 +826 45 .014045582902914511 +857 45 .6905583458253242 +868 45 -.14600710534779193 +876 45 .7063822809479945 +887 45 -.615787051489611 +896 45 1.2875636826415666 +900 45 -.2748320770330498 +915 45 -.1260122267508073 +922 45 -.5649903304612278 +924 45 1.1082684929372137 +926 45 -.9688274978165595 +935 45 .5256318001256229 +945 45 -.4393444197789723 +946 45 .5436450692203025 +954 45 .9011515362441089 +956 45 -.48261497388283725 +969 45 .36587857299382565 +977 45 .11410857617736206 +997 45 .39310438611574283 +1000 45 -1.317722405140937 +4 46 .8452032751056596 +9 46 -.5092739912848748 +11 46 -.3273525650492035 +16 46 -.07843641183457345 +17 46 -.44155437572960693 +21 46 -.013255171731312798 +32 46 .30169817823094736 +70 46 .08262747769729345 +74 46 -.1378286015432833 +84 46 .5995890236107698 +89 46 -.9800529559114415 +111 46 .9353637563493175 +121 46 .2949735941951276 +134 46 .34036885156754104 +140 46 -.3333423893723982 +143 46 .18669951179331196 +148 46 -.5604508241452518 +157 46 -1.1149150423264829 +210 46 -.62555836319603 +215 46 .35982088735690343 +218 46 .3306818883831139 +219 46 -.1782241211923821 +227 46 -2.0795050101847234 +242 46 .21735206636506255 +262 46 -.25957591451809037 +274 46 .6442200689839566 +275 46 -.25769663119279523 +285 46 .6174406695177004 +291 46 .7441152490760776 +298 46 -.23694489114474337 +300 46 .34351722172390214 +302 46 -1.3418782564396206 +308 46 .6608305289026372 +310 46 .19445846443568038 +326 46 1.1015093318263784 +349 46 .8037772008994373 +358 46 .3401935940808424 +360 46 .5123610151609257 +363 46 -.6922998754179516 +379 46 1.3661577323916705 +383 46 -.04899037356954951 +384 46 .12963790962355165 +399 46 .6369265703714657 +411 46 -.8970367037196579 +414 46 -.38363574915921755 +442 46 -.2948727050975511 +444 46 -.0032240304989372658 +445 46 .11263662813577771 +473 46 .6924063141445322 +490 46 .44219646289372777 +493 46 -.1455765404776711 +503 46 -.2992870957732428 +508 46 -.1018568537709592 +536 46 -1.2970098993943142 +540 46 -.38379521728478044 +559 46 -.3084662244698727 +581 46 .031214807652537795 +588 46 .5945173516767588 +590 46 -.5133728897064396 +593 46 -.0892877660465246 +599 46 .6528755691955869 +625 46 .3145581568739022 +626 46 -.3687007298423512 +629 46 -.3226144047434131 +642 46 .6314940560528415 +663 46 -.26389090167747353 +667 46 -.5285563990360924 +671 46 -.5162342694842643 +678 46 .22268683197551323 +682 46 -.31548307823431004 +686 46 -.3752836213071533 +689 46 .1258704105353938 +692 46 .853021653745651 +699 46 -.5942789633908461 +701 46 1.2274911463154763 +707 46 .4497927819896529 +710 46 .09859675076490851 +719 46 .08134197480804556 +727 46 .4977121693493552 +732 46 .6237628900631396 +753 46 -.08830197884888102 +764 46 1.0647363182807763 +773 46 .26759878499568707 +775 46 -.26745122786942555 +803 46 -1.4121103482603101 +806 46 .6570829089929846 +808 46 -.11110137703701524 +811 46 .7163875176945238 +818 46 .8118138191344024 +826 46 .2413281485551288 +846 46 -.08758077369480569 +853 46 -.042709688729123396 +855 46 -.2200009979313432 +887 46 .26486065236558154 +890 46 -.18771183403789474 +903 46 -.05744268714509074 +959 46 -.19165344156382602 +981 46 .09527085278083536 +983 46 -.38672985693144135 +985 46 .6129021632003249 +999 46 .7207504649868891 +21 47 .2199268709653181 +24 47 1.6187056586853845 +32 47 -.5593596912029791 +60 47 .6694865348928638 +72 47 .792124485703384 +78 47 -.12974465763259396 +97 47 -3.3061094102427973 +101 47 3.336065083050017 +109 47 -1.2850963490728051 +113 47 -.8221282842006109 +118 47 .8427756216738723 +135 47 -.3318009658132529 +158 47 -1.1441247005682658 +164 47 -.7759115031544774 +171 47 -.031623056527816266 +215 47 -.3931168605797995 +223 47 .6241463358875727 +224 47 .5353100733808878 +234 47 3.4259591771616473 +256 47 -.15099326333211835 +263 47 .2381699064491386 +276 47 3.239249922672189 +296 47 -.37154090069939716 +312 47 -1.1825858458649894 +322 47 -2.301375137493688 +327 47 -1.172926039694871 +331 47 .7364333760082206 +379 47 -1.2353622727482247 +401 47 -1.2907337969164674 +408 47 -1.6255145257837398 +409 47 -1.3203767402800093 +412 47 .14156289987451504 +414 47 .8062030702606248 +415 47 -.03418922775910874 +425 47 -.3750487042544707 +429 47 .4827612909566256 +430 47 2.1089059271496033 +444 47 -.1958516869456684 +448 47 -1.464396420772836 +461 47 -.8877184948404064 +463 47 -.9683062610521335 +474 47 .5385610023008067 +541 47 -.37210258920343414 +548 47 -.4440716385112222 +565 47 -2.2228596164030177 +589 47 -.9639120810537165 +623 47 -.2403366828772146 +625 47 1.6277196794126108 +627 47 .30389578751803004 +633 47 .7236481736620836 +653 47 -1.0283936675582694 +678 47 1.6283249878893125 +680 47 -.0446319116103359 +686 47 .9813398985583798 +688 47 1.9522999569314234 +705 47 1.5630589131553103 +706 47 1.2464312317815942 +708 47 -.9244775257275123 +734 47 -.07155152014791381 +759 47 .8620053544963819 +770 47 -.9026635338793064 +778 47 -1.079843077592215 +781 47 -1.0603064002156208 +795 47 -.8517120432102794 +801 47 -.7468643114094788 +807 47 1.5675866664541172 +810 47 -1.1384502134091854 +819 47 .45373409098546047 +822 47 -.8010615573649074 +836 47 -.7776478717690195 +837 47 -2.1171412245423764 +839 47 -.7065070292140228 +845 47 .4398029936447172 +857 47 -.5812185056208967 +868 47 -.7732847455003476 +882 47 -1.4535356018404724 +890 47 .37860348321371023 +901 47 -.18992416414452318 +903 47 -.5419306069530051 +920 47 2.2656699442813815 +926 47 -.4266125480080199 +927 47 -.704633468761884 +928 47 -1.8123517610246418 +936 47 .5655288291465168 +938 47 .65488535381942 +955 47 1.1941418107330237 +973 47 -.6322383386170862 +976 47 -3.1434499607592548 +980 47 -1.7033837368176683 +991 47 .9591572538068802 +994 47 -.5227511686443285 +3 48 -.3902188586444468 +9 48 -.17750384693757046 +16 48 -.9073273207337 +17 48 -.5736106111807057 +21 48 .8996547642961651 +22 48 .4605166393774664 +23 48 .6686295897722146 +24 48 -.6641842344090942 +33 48 .22748692319693403 +38 48 -2.4423591573838044 +51 48 -.33399818819300015 +59 48 1.0647985791536367 +77 48 -1.5286906037592771 +92 48 -3.1151761768859787 +95 48 2.6326282028677186 +114 48 -.8406113287350645 +117 48 .90555928111383 +118 48 1.0159316644243463 +125 48 .8084225051094137 +128 48 .9358296913189321 +135 48 -1.1556963159908031 +136 48 1.7491015152283351 +151 48 .9631865099540755 +155 48 -.46005540979070114 +156 48 .048191314051096786 +159 48 -.04898590006200303 +162 48 .35174003326882386 +168 48 2.404919998721982 +169 48 -1.9123823960504491 +179 48 1.145354193692109 +190 48 -.5683833310890505 +191 48 -.5829661817719692 +208 48 -2.0100769902649844 +216 48 2.023517896110544 +227 48 4.112136136634006 +259 48 .7758629207664194 +260 48 -1.3499556341047336 +264 48 -2.2507751081406164 +274 48 -1.563979861129347 +296 48 .5312092293829103 +297 48 -.5027348475309515 +317 48 .6400240319494861 +323 48 .8778243056933632 +329 48 1.7661930049316457 +334 48 .7813086067917225 +337 48 .264683655815821 +342 48 .7669326135398341 +356 48 -.6047872647124815 +386 48 .2192110361727545 +411 48 -.1187173827699525 +417 48 -1.6601978865166473 +444 48 .18419116160194884 +446 48 1.198985269526825 +450 48 3.900500103407182 +457 48 .2461201235757135 +468 48 -.309193181944753 +471 48 3.031308367500066 +482 48 .6198727184939675 +489 48 -.30910676166210777 +495 48 -.6750261370430972 +501 48 1.825512883141678 +515 48 -2.42081227248679 +517 48 .12067869380165604 +519 48 1.7199812764121816 +523 48 -.7214043670677518 +540 48 .854488511681304 +541 48 .556534874997746 +542 48 -.22505721811766616 +549 48 .09473354922916867 +555 48 .22565903912408353 +586 48 .5433789288695965 +593 48 1.4668206457295077 +607 48 .25024755471223326 +609 48 -.01339886449470374 +618 48 -.3463339057102177 +632 48 .07934058401974975 +633 48 1.6561392190213688 +655 48 1.8397299982308017 +658 48 -.8252157524686364 +659 48 -1.745278962512064 +695 48 .25534517042590754 +696 48 -1.7203512650422967 +703 48 .20511794039430722 +704 48 -1.915818336981534 +713 48 1.9075169495384556 +721 48 -1.6436640816005403 +724 48 .1859803083367 +734 48 .6612269824887835 +738 48 -.16491074371918008 +741 48 -.03803870242262447 +744 48 .8998202247510164 +778 48 .7540922848272831 +781 48 -1.9029422651946541 +785 48 .2173828036742252 +788 48 1.1659357114965216 +800 48 -.3423013992318291 +805 48 -.8924049457793818 +812 48 -.9125819273874967 +814 48 -.23924358932202547 +839 48 -1.1093680699655326 +851 48 -1.580957146073676 +860 48 .49934748761035475 +866 48 -.14073159753070624 +874 48 -.9753816319363318 +889 48 2.061446961486944 +892 48 -.5069296241992995 +923 48 1.0458462037212253 +928 48 .9689253606541715 +939 48 .8639714791462504 +948 48 -1.1010434994709466 +970 48 -1.5799586971987922 +973 48 -1.6688797894890386 +976 48 -2.025881682413352 +979 48 .7471672821906171 +983 48 .7728026663027538 +10 49 -.006435751981005933 +11 49 .35979709197017795 +15 49 -2.926462329441517 +23 49 .16217169397214343 +37 49 .9238413922297222 +41 49 .7599036178543502 +65 49 2.122769224423316 +70 49 .4143153667972035 +76 49 .46737154584691143 +84 49 .9532927408705753 +87 49 .8729465171286084 +93 49 -2.1495989686320987 +95 49 .825919186892836 +102 49 -.4779433748592758 +108 49 -.45962891490905294 +116 49 -.03699314259638893 +117 49 2.0594479559905627 +133 49 2.2640798618558464 +137 49 3.044214374139369 +139 49 .4460163152358326 +152 49 .051366543919828034 +154 49 -1.169908077763603 +169 49 -1.3030210622318972 +173 49 .07922906040629785 +176 49 -.33791010940737065 +190 49 .9898749171047148 +191 49 -1.1875279442773572 +195 49 -.03854772008702082 +198 49 -1.1251591232352107 +203 49 .5800011757897298 +209 49 -3.0941820162335154 +228 49 1.649470768507224 +230 49 1.0390268166421133 +231 49 -1.4326447841661234 +240 49 2.351700994309026 +254 49 .6335773118538213 +268 49 1.934450417677152 +288 49 1.5612807266335764 +294 49 .9337335131022485 +299 49 .4081705605404985 +311 49 -.5251007787894431 +339 49 1.8221405088475013 +340 49 -.8690298467872144 +341 49 -.19743790639533645 +349 49 -.8157902741440692 +368 49 .5060913411524371 +369 49 .130839326978907 +377 49 .960945049982776 +384 49 1.307247738687339 +405 49 -.41085328452171405 +433 49 -.5656920858301363 +436 49 -.5922386207682393 +447 49 -1.4385800152011106 +448 49 -1.877536352442985 +452 49 -.20357264357858412 +457 49 .9211519873648523 +462 49 .4811371180901265 +464 49 2.08740482114098 +468 49 -.1170239491880748 +471 49 2.8116201062497383 +474 49 1.6301089398994142 +477 49 1.1426766329431857 +484 49 -1.9715044092022918 +499 49 .6289518388012134 +517 49 -.36616639442760346 +538 49 -.253033802509596 +544 49 -.13241249855209775 +547 49 -.5604903504491947 +570 49 2.130797536326173 +596 49 .2071351189515851 +597 49 .3747135511449069 +605 49 -.42553086995593437 +621 49 -.20276370465017113 +653 49 1.0458635101652096 +657 49 -.7319179339960302 +680 49 -.5981805861350139 +688 49 -.14257826372939994 +691 49 -.25597536115139824 +704 49 .31397162010533225 +745 49 -2.344234417295076 +746 49 -.5067119416749645 +751 49 1.1037804935709012 +752 49 -.778472264945517 +763 49 -.7304434593355538 +767 49 -2.0189721631835438 +775 49 .05567789872519835 +777 49 -1.0077849165086854 +793 49 -.04696069411894521 +807 49 .39450812409341574 +823 49 .715813422897855 +848 49 -.3639032893763803 +860 49 .8140599045335729 +863 49 .22394594467043344 +886 49 1.4223093938174676 +890 49 .6949112819189119 +895 49 -1.0251643295896633 +900 49 .751249995953451 +901 49 -.13490766005116048 +904 49 1.6583365876638894 +921 49 -2.666972023171732 +927 49 -1.9212966857400302 +932 49 .998492788606783 +955 49 .6288377318600413 +957 49 -.9605313112410481 +958 49 1.2249451522886012 +965 49 1.0755641795937416 +970 49 -.8051081145574509 +975 49 -.977351623468353 +984 49 -.14584546567706874 +989 49 -2.0787023523406845 +991 49 .6395347875546398 +21 50 -.9550449756530952 +30 50 -.6952542300517942 +37 50 -.9961892892347993 +40 50 .45892016419333176 +42 50 -.06107884701333306 +49 50 -1.3610679363203277 +56 50 .2826388164572672 +68 50 .5883709502312635 +69 50 -.49279444474926426 +85 50 -.5695536254156546 +102 50 -1.5543813710431051 +112 50 -1.1359819950915702 +115 50 -2.0070820908506715 +130 50 .7708206792303722 +144 50 .6566164530199239 +146 50 .23907293266432755 +156 50 1.1304717647002671 +157 50 .4607623241449852 +160 50 .9825052934797687 +168 50 .49333731484355625 +172 50 -.4289688254326489 +175 50 .27332680476550053 +184 50 -.5523115054586498 +187 50 -1.8235682716435972 +189 50 .5937782109512083 +191 50 1.0878135468993684 +192 50 1.1574475077651458 +210 50 -.8290211903808822 +211 50 -.6666876897172234 +219 50 .538193445557108 +254 50 .501498389989546 +263 50 -.21785279272845698 +270 50 1.7765579592124 +273 50 -.40838162943706435 +277 50 1.1784755873919326 +287 50 -.3877391180505581 +298 50 1.602042683553185 +308 50 -.6019831515798851 +311 50 -1.232773010078328 +312 50 1.455417284935772 +319 50 1.74533254547222 +321 50 -.8801725963736765 +322 50 .8253304902585104 +332 50 -.8813432985996135 +336 50 1.3691994198131747 +338 50 -1.6616238867383117 +352 50 -.5655888662416726 +361 50 -.3055235812064339 +385 50 1.6484225318084305 +436 50 -.11669992482422208 +448 50 .08571465028584506 +476 50 -.5227554703383909 +486 50 .9197135780732801 +500 50 -.024913740517469373 +506 50 .004100000903469139 +517 50 -.09970559294380776 +518 50 .5162390658276482 +527 50 .3831716005931219 +530 50 -.7619881103301279 +538 50 -2.007351905761026 +551 50 -1.5739424312850483 +553 50 .5846458895958699 +592 50 -.5611553740435596 +624 50 -.6769419432896886 +632 50 -1.4461685034594791 +635 50 1.545804044878352 +637 50 -.29035029034603 +644 50 -1.8989988312578343 +659 50 1.0359077962071386 +660 50 1.0932188561833645 +666 50 .3026520508595655 +670 50 .14542010849150167 +677 50 .7847858864459744 +688 50 -1.2004057884669788 +693 50 -.8631354241264411 +694 50 -1.1361104722903226 +725 50 1.3992226787245912 +741 50 1.1772115227175588 +743 50 -.7151255353518506 +745 50 1.6983964267899938 +766 50 -.7503546230839178 +768 50 .36332987763745933 +783 50 -.1161183899958857 +798 50 -.9983140601626881 +809 50 -.08659590195870745 +812 50 .6295735104217219 +825 50 .016432409185368674 +845 50 .03357926928890936 +854 50 -1.3306673413422112 +862 50 -.9092549393348327 +881 50 1.0167370439622672 +888 50 -.9323173582626896 +889 50 .4938914728434863 +904 50 -.6426966531916106 +905 50 2.2090915343322477 +909 50 -.4452759277590421 +911 50 1.340671719769257 +913 50 -.33125675706199065 +932 50 1.189643627717103 +938 50 .43714430400593807 +948 50 -.9409664096661661 +958 50 -.21010548195359718 +974 50 .2056590942419298 +999 50 .17427021322075492 +2 51 .11010983574279268 +22 51 .4584212194292005 +27 51 .8273426591696115 +42 51 .261491304011092 +52 51 .9398670002877011 +54 51 -.7573332225795644 +59 51 -1.1065426840313344 +61 51 -1.321040286280434 +62 51 .41110934261158827 +69 51 -.4732532409072713 +82 51 -.0976867953047025 +94 51 -.5037126123345935 +101 51 .7041387878633572 +103 51 -.2974623397331819 +118 51 -.45162075004917895 +134 51 .07649971213228782 +143 51 .9177265485510505 +147 51 -.8615859225379344 +148 51 .1600908241672917 +149 51 1.2289598326052231 +172 51 -.4044261756574394 +176 51 -.837365242257731 +182 51 -.799194647481509 +186 51 .2723676986737622 +192 51 1.2807706182615621 +193 51 -1.4355813382235656 +200 51 -.39658206204374463 +203 51 .4784000920453022 +214 51 1.0401586666459401 +216 51 .3585650128251734 +238 51 .9875912625653236 +243 51 -.44831950039737184 +257 51 1.0007733024656262 +260 51 -1.3378238318757527 +267 51 -.18924518216837927 +272 51 -.9651115502094113 +276 51 -1.0196073405254353 +280 51 .3598064899266914 +282 51 -.09218571894833144 +283 51 -.5360754916271981 +288 51 .7690028552819583 +298 51 .4069703565926995 +307 51 -.3962601444940642 +313 51 -.3318420011976726 +317 51 -.45652013016986925 +319 51 1.1317673891740068 +320 51 -.17721486230565864 +334 51 1.5402100088784916 +341 51 -.609721425137113 +346 51 -1.12685378165129 +356 51 .2667821515761982 +362 51 -.6712834577946363 +366 51 .5448502501196687 +379 51 -.29226988385787855 +393 51 .23938273173246827 +396 51 -.753784397624654 +399 51 -.9771548021198028 +407 51 .9650431867723867 +409 51 .63674651162203 +418 51 -.548987429970083 +438 51 -.8475214118769876 +464 51 1.2767973871427487 +495 51 -.23611069273794238 +497 51 .36687735822952955 +502 51 -.3584098614451918 +505 51 -.7337896091744133 +508 51 -.2656943321198685 +509 51 .7966700242553267 +511 51 -.6818210526124885 +527 51 -.34302053364283924 +534 51 -.6217840932624097 +553 51 .35376161223680475 +580 51 -.3313216217966929 +599 51 .3894341910059362 +615 51 -.060968870038999395 +651 51 -.3356726322658504 +663 51 -.8586667691707202 +677 51 .6905674247075373 +684 51 .21845500754453792 +693 51 .3128109786283477 +696 51 .16651063435851182 +712 51 -.6179078024366761 +714 51 1.260753991752155 +717 51 -1.465690100908959 +721 51 -.005921108141141246 +731 51 -.37085517471892093 +750 51 1.7834333253276238 +751 51 .055213794070014255 +757 51 .6956235842607668 +789 51 -.8050244495544326 +793 51 .7633567037617274 +808 51 -1.3047877714636553 +809 51 .46512641696239015 +839 51 -.39128509353394214 +840 51 -.4278953069521422 +873 51 -.4272961085835756 +877 51 -1.4027788412499917 +880 51 .9818740591478518 +881 51 .661453838423937 +886 51 .5283112789750316 +890 51 .3431835577955685 +893 51 .3361801097710449 +897 51 .17263829746675258 +900 51 .37020197485075407 +909 51 .7472543847037788 +915 51 -.1441330645315237 +938 51 .8867958416261307 +950 51 1.0016732069869891 +958 51 -.9593891455642893 +959 51 -1.1964841324351028 +962 51 -.07967518557678809 +979 51 .6511099066805127 +982 51 .3497607070876003 +993 51 -1.0077590765967916 +2 52 -1.439045791845367 +23 52 -.37796382581496313 +32 52 .028302695678421363 +36 52 -.12190935523550508 +62 52 -.4655617541578018 +71 52 -.4495086758379814 +79 52 -.30189257766775174 +97 52 -.04768271251846936 +106 52 -.6417821734224333 +111 52 1.14698781485272 +119 52 .0775112562857116 +122 52 -.7670070951842594 +125 52 -1.4682469260736501 +139 52 -.4837612649918983 +168 52 -1.149225887958968 +172 52 -.07587916047890994 +192 52 -1.0210921335296672 +215 52 -1.3253693745896384 +219 52 .5939058939520887 +230 52 .733973566141285 +232 52 -1.0306060066372333 +239 52 1.952018646884238 +243 52 -.4002164112751335 +249 52 -.2838964822004631 +251 52 -1.813028313402513 +253 52 .5364238344210368 +259 52 .11953085988425077 +264 52 .7169111488600141 +287 52 .8971485304338577 +293 52 1.168583846465453 +294 52 1.098060093798252 +303 52 -.4528966961503038 +335 52 .9084623767305735 +337 52 -1.0020587926721114 +345 52 1.0757022771588978 +346 52 .7749791912039887 +354 52 -1.5941296892719308 +374 52 -.7102437627127325 +383 52 -.2615991678987331 +393 52 1.3194209604748122 +394 52 -.7783680847412247 +401 52 .19667835143051351 +410 52 .14597055614182558 +419 52 1.2860347862634618 +420 52 .8205694533726507 +443 52 -2.1020464592512855 +449 52 -1.1189679421758727 +457 52 -1.0252403433342987 +465 52 1.8552541702519276 +467 52 -.33134392750546043 +474 52 -1.3067825307743126 +475 52 -.35157453284016105 +481 52 .27690660864807404 +484 52 -.3777411269251263 +506 52 -1.2676069100762402 +514 52 .3245961380431836 +540 52 -.8117429604117451 +541 52 .2262456143645042 +574 52 -.4274982658171139 +599 52 .8321189645250906 +603 52 -.42279814062196713 +610 52 -1.257342974313433 +613 52 .35772083370630914 +618 52 -2.0878594304684137 +623 52 -.27230004621855686 +656 52 .2843573964382018 +658 52 -.9806886174161231 +661 52 .15273243715767132 +683 52 .6843595092631871 +721 52 -.19710322591246116 +723 52 -1.0706673604433745 +724 52 .15885517721336767 +729 52 .6069137854590085 +735 52 -1.4536534751766645 +744 52 -.29102913247171763 +747 52 -1.0075999756485206 +764 52 -.6479873366489126 +767 52 1.2946689207568118 +779 52 -.02355846906239109 +783 52 -.37654172712292744 +792 52 1.3418144726549046 +803 52 -.0340387559883064 +836 52 -.7599634026208665 +849 52 .3200979603684088 +866 52 -1.5380821004268066 +868 52 -.06151134021278844 +878 52 -.9707911574524926 +903 52 -1.1538580481423086 +918 52 -.016789280763328807 +921 52 -.17977593737165878 +925 52 -.5026518781208854 +940 52 .659874523134617 +948 52 -.15620726791024453 +969 52 1.2810138916955789 +977 52 -.20733442481077333 +984 52 .8578335626228158 +988 52 -.6942437698138988 +991 52 -.7640353473777058 +999 52 .8370090011393301 +21 53 -.07928301894397798 +23 53 -1.4003109793148363 +25 53 .2535999169392763 +35 53 -.25685871296446133 +43 53 .647000013957117 +48 53 1.3366970447973767 +51 53 -.3865526024642751 +57 53 -.04998571498206783 +63 53 -.4609581095122742 +65 53 -.38555797886748155 +79 53 .3391913630277598 +84 53 1.0118511751208543 +98 53 -.9649697171984419 +112 53 1.0987249001478285 +113 53 -.8002398150253495 +128 53 1.2974894715853844 +134 53 .23069281998841512 +138 53 .8476643085960003 +142 53 .06362448344847912 +150 53 .08368427385567714 +173 53 .25167661491611515 +175 53 .6216198949253838 +177 53 -1.893761511426405 +183 53 1.5974826964143227 +194 53 -.655509980397247 +197 53 .25127895758493113 +203 53 .9063979253856236 +219 53 1.501448406369936 +228 53 -.18344383073917678 +234 53 -.34966024796971407 +247 53 -.2755814439495624 +274 53 .7195865975685501 +277 53 1.4382323227960891 +282 53 -.6208279851323537 +295 53 -.5764849261595348 +315 53 .4565224919357947 +336 53 -.44256489716090286 +340 53 -.7811076342696823 +341 53 -.0830224222313925 +342 53 -.10893028825726309 +355 53 1.643701978150833 +359 53 .3949487811650648 +370 53 .09780393054388661 +374 53 .22782805591777988 +376 53 -.7142317008886123 +379 53 .6732053842854535 +380 53 -.7001664639174356 +397 53 .7118967827553447 +430 53 1.7720396430064858 +446 53 1.1553503158760599 +458 53 .3097311757304977 +471 53 -.5907623481362043 +504 53 1.4929784886203343 +513 53 .22339287984741765 +553 53 .004812683837097903 +556 53 .08468728641364909 +564 53 .6155508868499335 +566 53 .3432448836923858 +576 53 -.40900078881402274 +588 53 .5990745727053717 +614 53 -.5250330700490262 +621 53 -1.2508979465884376 +627 53 .2218786964901889 +660 53 -.8981685736477961 +666 53 1.1624012492520142 +685 53 .586125101870494 +713 53 .18452976305423624 +741 53 -.855000108280053 +747 53 -.7021026738743501 +759 53 -.0012296402025622835 +764 53 -.25313939879535297 +788 53 -1.0868390975220965 +828 53 .11040558957882984 +849 53 -1.229968071648144 +850 53 -.8657919240407462 +855 53 .0551275564593839 +863 53 -.07695007759150856 +870 53 -.3330357884758048 +874 53 -.23196147281483928 +877 53 .223173570857513 +887 53 1.4926053783460276 +905 53 -.2742721769176382 +922 53 -.5749503829226016 +924 53 -.6693923591154203 +925 53 -1.1409346952119683 +926 53 1.640147441407781 +953 53 -1.4415553039299096 +967 53 -.5535839048659945 +975 53 -.6946756279858501 +11 54 -.9032681013715583 +17 54 .562430909621765 +19 54 1.5833879457261633 +31 54 .32022470756862087 +39 54 1.2851336346909141 +43 54 2.357108710734808 +73 54 .5044816800416451 +85 54 1.9776424869575628 +86 54 .4026467166901367 +96 54 1.395591494859416 +102 54 -.05958280236833585 +106 54 1.4780597368792667 +132 54 -.24560528555408226 +135 54 .8949282360057099 +176 54 .4503243467497299 +178 54 .9965647975536331 +188 54 -1.1123508899080818 +212 54 -.6634957777262033 +215 54 .604250295195729 +219 54 -.2839948371059159 +225 54 .7955126570820736 +227 54 -4.351995144464417 +234 54 -.7415913688164878 +237 54 1.0373293231806977 +241 54 .3621539433960844 +256 54 -.8729322244699954 +266 54 .21864336835087606 +289 54 .8315807899359535 +295 54 -1.3096442287584866 +311 54 .9853318547875082 +314 54 -.5145278278394931 +325 54 1.0930642058841034 +347 54 .8155150567786842 +348 54 2.4792690792967758 +352 54 -.14933697330918316 +356 54 .6734120212293516 +360 54 -2.012969679631915 +362 54 .19338176062668844 +391 54 .909008088632146 +405 54 .2437572404861056 +411 54 -.34114754161941935 +416 54 -.686051699299428 +424 54 .5751361975919806 +435 54 -.6449405655858278 +437 54 .5240500355769953 +439 54 .8138559832633809 +455 54 -1.922003498009436 +464 54 -2.676090673545176 +469 54 .598106576017822 +491 54 -.37056809482104364 +497 54 -1.4091774047066075 +510 54 2.7597470709865086 +533 54 -.7998024638614509 +543 54 .6511627448482699 +547 54 1.294607797736464 +551 54 -3.409944983421479 +570 54 -1.459724065068753 +574 54 -.5553517147704596 +577 54 .6431789232497169 +605 54 1.949555564632016 +609 54 1.8329912455022783 +615 54 -.5498568311039551 +629 54 .1688477569615845 +640 54 -.42282360291782706 +647 54 -.5507947068937221 +674 54 -1.396973431300943 +685 54 1.2341414041871313 +686 54 .8039510298843294 +690 54 -1.5925140247753335 +708 54 .9341294523339986 +732 54 1.3601685976153175 +745 54 .6494786493054223 +749 54 1.3503229679914155 +753 54 .8689692466149648 +765 54 .14134986119024887 +766 54 -.7505973479953789 +778 54 .6644440197711 +779 54 .9789803339208069 +826 54 -1.6613257417839282 +835 54 .7582466886451146 +844 54 -1.5291915159308296 +848 54 -.05823442555727819 +852 54 -.4028624258965395 +861 54 -.35484189314554293 +869 54 2.2025032316727304 +872 54 .12363306119524967 +873 54 .033648381839785774 +876 54 -.9383420328310432 +886 54 -.1557841010295525 +907 54 .5253197272502573 +911 54 .9914557696097364 +916 54 -.12561882754958492 +918 54 -2.2460146648038743 +921 54 .5198745246719972 +924 54 1.6682278233515737 +925 54 .2682710678698259 +932 54 1.614641318005911 +951 54 1.241342478816352 +954 54 .11572911637385187 +956 54 -.20922899827607178 +966 54 -.5392381362284517 +975 54 .7388269046697142 +992 54 -.2315071307020496 +3 55 -.10191245199981926 +13 55 .07080730154702826 +30 55 .2568132947540779 +32 55 .09797456598224805 +34 55 -1.99459184074729 +51 55 -.6644020566090855 +63 55 -1.1902108693676836 +74 55 -1.4087055183268846 +84 55 -.691218439569889 +89 55 1.218925985773041 +109 55 -1.2796621009569669 +114 55 .6571249004895587 +120 55 -1.45961990631706 +137 55 -.9206493177649147 +153 55 1.3935363928069013 +169 55 -1.0492746015899848 +173 55 -.07996520513755437 +186 55 -1.3418553043164225 +189 55 2.1928667759583256 +195 55 1.164500353602894 +201 55 .32269071992793114 +214 55 1.2317072073424706 +218 55 -.6853063727063562 +225 55 .2387584569409563 +237 55 -.6827218003911131 +242 55 -1.7793884304543162 +256 55 -.25542729895350746 +260 55 .9797396940753043 +262 55 -.9678706787462098 +263 55 1.367271890958721 +265 55 -.7945673493504597 +269 55 -.05425527588942811 +285 55 -.5715018660615497 +300 55 -.37263117232496495 +303 55 -.5492935103092726 +328 55 .39772120564143176 +335 55 1.3492271989939262 +342 55 .9146520585418334 +353 55 -.9967178365129337 +357 55 -.2396621994541525 +363 55 1.4569501138806897 +375 55 -.1954784996895656 +380 55 .7075101647237284 +385 55 .9850273565005172 +423 55 -.2374494218344707 +424 55 .036541467930540944 +428 55 -1.6502018282686075 +449 55 .4698404764431833 +450 55 .3357555418840197 +452 55 -.1419888734873681 +461 55 -3.412421341415413 +482 55 1.9332499054086667 +499 55 -1.4208968872429042 +503 55 .3492426828147217 +520 55 -2.5433785549911185 +529 55 -.13728558458748294 +530 55 -1.3069770450397113 +541 55 -.1503911905767437 +548 55 .45158468934760204 +550 55 .8124525638178581 +553 55 -.8426439054941021 +554 55 .012954761261148882 +560 55 -.4432200377944222 +563 55 .3116498554620602 +564 55 1.0786484746909881 +577 55 -.3144618725757576 +595 55 1.8175599094461377 +603 55 .10099924649802353 +609 55 1.0898188226554608 +610 55 .7384338068366821 +613 55 -.48517239515870947 +618 55 -.6183876878488469 +620 55 -.8157654791548691 +621 55 -.07564540428941305 +630 55 -.32631451761106745 +638 55 1.3824703888781409 +642 55 -1.908445547784291 +661 55 .2470139008351295 +681 55 -.8848439688483608 +694 55 -.6444645723666244 +707 55 -.176596051089085 +716 55 1.1169553176677698 +733 55 -1.8660228722865728 +749 55 .39265411333904493 +763 55 .7852542999519337 +770 55 .135753894688381 +777 55 -.07806607863934006 +781 55 .29868477334551546 +785 55 .5458186105109661 +787 55 1.530038978613897 +793 55 -.6085364123459045 +796 55 .46870603162169155 +808 55 1.1404477913509687 +810 55 .6713351442384071 +812 55 .25063301972131036 +842 55 1.7362838776965406 +843 55 -2.6011240192317433 +845 55 .6306419452156743 +857 55 .6259093621618604 +860 55 -.20443657229968976 +861 55 -.8381978342457883 +874 55 -.09080583189145658 +881 55 -1.1766678888809028 +904 55 .3832296440170012 +918 55 -2.1463854598496903 +924 55 -1.6311538512432333 +931 55 .11164531214747059 +932 55 .8736835842580652 +937 55 .3172119356327553 +945 55 .04625443766478595 +963 55 -.7886142461387173 +980 55 -.5909944975830698 +988 55 -2.216199578909798 +990 55 -.3620798284540796 +994 55 -3.0005701075269453 +996 55 1.5482787102190785 +10 56 .2012398193661427 +35 56 -1.434979395193944 +44 56 1.4562262934147674 +58 56 .6875319829272969 +62 56 .1186138660833499 +66 56 1.2504621524333368 +86 56 -1.8025195378113295 +97 56 .901513783050596 +99 56 1.5377239258591207 +131 56 .3102621094224115 +133 56 1.1400575258591625 +137 56 -.4043580663685527 +141 56 -.6861648255531583 +149 56 1.0666958499666792 +151 56 2.956193900536479 +162 56 2.815965024650365 +173 56 1.3807894125023161 +175 56 -3.214673574636713 +177 56 .39605084048473643 +197 56 2.670167175718226 +200 56 -.1314306216441995 +201 56 2.43529797827179 +221 56 -1.6822017197861243 +240 56 1.9294718294713171 +246 56 .3177687910908036 +253 56 .6765207052847141 +258 56 .2492239780357444 +260 56 -1.7385911558058467 +263 56 1.757225863823224 +275 56 1.623024943429304 +282 56 .5222394360836664 +295 56 .8378821288079712 +297 56 -1.4654031323324146 +307 56 -.5082870437003424 +309 56 -.8601373636178459 +312 56 -1.6755907060633763 +317 56 .09182628165161626 +333 56 .6292227661720398 +335 56 -.11675330602145041 +338 56 -.06188028694806103 +344 56 -.8755651380250249 +358 56 -.5924875123661865 +370 56 -1.0843408730119324 +376 56 1.4575882209995246 +386 56 .44082630489791813 +440 56 -.09557063421637595 +454 56 1.4491756213434797 +476 56 -.12244540538628236 +478 56 1.5283923720144088 +484 56 -1.069039429125907 +492 56 -2.7522607426020924 +494 56 -.9273297600741233 +495 56 2.2906383816667093 +514 56 -1.9021194693489694 +534 56 -.5472425005203708 +537 56 -.8220701791717349 +549 56 1.7032245065465403 +554 56 .32935256656892115 +591 56 -.5956409589607873 +592 56 .30508087045254695 +597 56 2.126684540769186 +606 56 -.5987948206289668 +610 56 1.3811780884978522 +623 56 -.4563580348483368 +635 56 -1.9983911948648723 +643 56 .04808826947540321 +647 56 .7754433458587409 +648 56 -.5846956866453171 +649 56 -1.0360028464760738 +658 56 .7396696906406698 +664 56 -2.2571304043328335 +685 56 -1.9175820783760797 +687 56 .06679900566874444 +693 56 .07757019515873519 +701 56 .18091099766295515 +715 56 -1.7233901501457713 +721 56 .006788897140389324 +724 56 .12207615513974278 +725 56 .0647852587604839 +729 56 -.16725743868796428 +732 56 -.4594704602432703 +736 56 .5510652215514225 +748 56 -.004210863505175841 +759 56 -.37618280095333323 +768 56 .20197160379381007 +800 56 .6502061558044478 +808 56 .9481678711942191 +810 56 -.6691481040527422 +812 56 -.9389212055586872 +816 56 1.1027277944331142 +825 56 1.6009842310521867 +838 56 1.288567006768297 +840 56 -.8107943738517112 +845 56 -1.6104439565241937 +854 56 1.3575949137010073 +859 56 -1.089521140266151 +915 56 .0823467413674544 +919 56 -.20279418004213112 +928 56 2.0263209502625825 +931 56 -.7793364084337369 +934 56 -.738026593947944 +943 56 -2.4020725452513574 +955 56 .413956646620287 +960 56 3.140537436027118 +985 56 -.033478393579560325 +987 56 .07817282084576287 +989 56 .08419929124353115 +14 57 .05574688659457393 +28 57 .2065678146158031 +29 57 .23914309871691586 +37 57 1.2393901499722086 +38 57 1.0849805321092816 +45 57 .7067797486840872 +51 57 -.03216995496027959 +65 57 -.0011092104877748962 +66 57 -.07654948574946362 +87 57 1.179816133453425 +90 57 .05319632027250323 +107 57 .8222652765728187 +124 57 .40168158299810724 +138 57 -.5011641432578042 +145 57 .37486488353056563 +151 57 1.0166938505020147 +152 57 1.8467849767978148 +158 57 .5525614760631261 +166 57 .5050794488840098 +177 57 1.9230497897833974 +207 57 -.30962320375563407 +215 57 -1.318840377466993 +248 57 -.19910554739054726 +252 57 1.8421125045693518 +267 57 -.29992204900253555 +270 57 -.34170819788114903 +284 57 .532703713142864 +289 57 .09539974605584414 +314 57 .8520417674233427 +320 57 .2880039740203373 +322 57 -1.058297922110643 +336 57 .28442272630665416 +337 57 -1.7672134698227506 +354 57 -1.9692150121770715 +365 57 -.18088926994520868 +367 57 .4407161775284216 +368 57 -.4464034595733377 +371 57 -.18494630267419074 +378 57 -1.470223667969792 +417 57 -1.6716344306394135 +424 57 -.05612695490169822 +429 57 -.7121220563053066 +434 57 -1.5202779103777657 +438 57 -.7450035070847683 +447 57 -.4580692808879695 +457 57 -1.9617935167789635 +460 57 .25336880489461 +461 57 -1.7044488480420463 +465 57 1.6963033175941544 +477 57 2.6755749631904733 +479 57 .7554343653244978 +491 57 -.12986727838012266 +493 57 .533363134865709 +495 57 1.7153813291707758 +521 57 .5509393075272507 +549 57 -.0028327584900108838 +552 57 -.6536155345209682 +569 57 -1.3263560849116225 +597 57 -.35693155818765504 +599 57 -.7317924005212251 +606 57 .4637650410156775 +619 57 -.21473972567524993 +627 57 -.21998896361557008 +632 57 .9063715058359654 +640 57 .30686725125727626 +642 57 -.4348484493097764 +648 57 .2834297170616528 +652 57 -.17951006391370253 +659 57 -1.1693156965622737 +670 57 -.40451059537842154 +681 57 .052172532489301794 +683 57 -.4648289880485972 +708 57 1.1093416826224836 +709 57 -1.0214348019428596 +718 57 -.1796189346701942 +720 57 -.4259924701910844 +722 57 .06677948835761155 +736 57 -.6429489115884686 +741 57 .31420597249090554 +752 57 .15123210294535144 +757 57 -.533918177450813 +765 57 1.214241738298283 +773 57 .08918402583362371 +782 57 .6022373992524268 +792 57 .13687360151563735 +794 57 -1.4929586718947907 +799 57 .07268351166992984 +804 57 .3677867858735646 +828 57 .8944846762790089 +853 57 1.2522399875662111 +867 57 .9892961514135105 +874 57 1.313325485822629 +879 57 1.2252806530776545 +890 57 .168336013130591 +901 57 -.26244039613684034 +910 57 -.24712691009679616 +917 57 .8292316748725493 +925 57 -.005200279980212483 +926 57 -2.354559141797675 +945 57 .5540445386146363 +959 57 -.2877094845082521 +972 57 .054391668317613745 +975 57 .6065303654253051 +980 57 .12038681103300819 +999 57 .339210593716907 +27 58 -.34342581467865263 +45 58 -1.5125039074823896 +67 58 .6397784043100386 +73 58 -.8416027968428188 +83 58 -.5621515772362659 +85 58 1.6874799380962746 +91 58 -.43773254619140445 +117 58 -.5156329040704685 +126 58 -.8121614009691099 +139 58 .5893843748440939 +141 58 -.6146063631132788 +147 58 -.04721334579068893 +165 58 -.8481413979397477 +172 58 -.662817974512955 +173 58 .2965922096198617 +174 58 1.1748821945922576 +212 58 -.9479868225871487 +214 58 .44634640968472933 +220 58 -.5404999697333668 +229 58 -1.3349686416165298 +230 58 -.8163403502489993 +240 58 -1.5505336097106541 +256 58 .3298297883356832 +258 58 1.347729250065439 +265 58 2.1786836267930205 +274 58 .8348299654099681 +281 58 1.6371135967405892 +287 58 -1.2187749095240867 +290 58 -.48694565692801106 +309 58 -.2086798570589105 +311 58 1.579611518251955 +313 58 -1.3479641493356147 +332 58 1.2423333207628084 +334 58 .4911760799443492 +341 58 -.7055736435539687 +369 58 -1.43343720421226 +372 58 1.5098919030513 +375 58 -.5679505182685558 +390 58 .45431065977471385 +404 58 .383948766594891 +416 58 -1.3248082803076593 +429 58 1.03947575529885 +435 58 .4819461849048259 +441 58 .30573308877727967 +444 58 -.6175945525803058 +454 58 .2074040557179747 +471 58 .9966188298163525 +483 58 -.3436426542272506 +490 58 -1.3912942523800809 +495 58 1.3365870322310893 +500 58 1.754051139397591 +505 58 -.1689614632144724 +513 58 -1.236086637976833 +521 58 -.662506851730236 +537 58 .8085157245039147 +545 58 -1.276224907219634 +552 58 -.3481814623879923 +570 58 -1.3225999432288542 +586 58 1.9404826992365567 +589 58 -.117904889352242 +593 58 .7926454851102063 +611 58 -.4145540988377231 +627 58 .22751157235480737 +635 58 .09017802814931697 +647 58 .31378801328588485 +652 58 -.9877101222360458 +654 58 .18494179799297164 +670 58 .34486890519777624 +689 58 -1.277269172981062 +708 58 .8235692673539043 +729 58 -.40537277994937004 +740 58 .26773969064282294 +746 58 -.43019770514758093 +752 58 1.216216029408863 +753 58 .18411404567142917 +802 58 -.6748378870072871 +804 58 -.5892409496412637 +818 58 1.125063058973187 +826 58 -.6467195984465169 +830 58 .8772039072955007 +842 58 -.02794999647421806 +844 58 -2.8486869665641654 +848 58 -.7460465920818025 +853 58 -.5350548055676269 +884 58 .25878714992810403 +908 58 -1.914465058808969 +917 58 -.20251725145930582 +919 58 -.6218096838315847 +921 58 .44659384714579925 +939 58 -.16971650742545974 +940 58 .2535698760568272 +943 58 .46108884790851 +988 58 -.5177545045206158 +3 59 -2.3168309560602465 +13 59 -.52046900708695 +18 59 1.040063759068556 +21 59 .5294395979333613 +27 59 -1.4487156626357467 +32 59 1.4114992463220148 +41 59 .248827678313175 +62 59 1.0517939736477353 +64 59 .33666747460981683 +72 59 -.9951567862189358 +78 59 -.38438116669566247 +99 59 -3.3955358749677713 +119 59 -2.015465197247996 +130 59 -2.1583786087534595 +132 59 .6301967504145369 +146 59 .7366743943370964 +155 59 .4031313400788863 +168 59 2.282287807088568 +171 59 .30703082143525745 +178 59 -.7230584246091495 +181 59 .913176564530024 +184 59 -.42885571586235716 +187 59 -1.1996412885993974 +195 59 .34209118644905556 +196 59 .8217163688973795 +218 59 .2622955732882495 +229 59 .9643293784998488 +238 59 1.3583706749059128 +247 59 -.3791915322059212 +248 59 -.6686611232276751 +263 59 .6446234174091721 +268 59 -.38891833321645475 +276 59 -2.266803947299369 +284 59 -.2385688442568898 +293 59 -1.7158136037107918 +304 59 -1.370514192528399 +320 59 -.5224905376163491 +331 59 .4849212601032134 +357 59 -.6158896983026617 +371 59 -.7484601276820492 +419 59 1.0922967787206628 +426 59 .0807853804331423 +436 59 .7445624453941997 +440 59 .20776959725206207 +457 59 1.3510591638443605 +467 59 .19650321655190564 +481 59 .6925963788551337 +483 59 -2.4842083180720964 +490 59 -.13811349462224246 +493 59 1.074328440721985 +499 59 .5033219096252558 +516 59 1.2533046140533428 +518 59 1.825029273853936 +526 59 1.3858365923176972 +555 59 .6386048544891836 +562 59 -1.1438479461741828 +615 59 .13991434112981532 +622 59 .7080499045191005 +633 59 -.09209210048968916 +648 59 2.174683565159069 +657 59 -1.8036311128350293 +659 59 1.1709986550760307 +673 59 -1.3169022510908475 +675 59 2.4884113484134573 +691 59 .6970646686263456 +703 59 -1.1656082096797986 +705 59 .9444130718734912 +720 59 -.16282303511955076 +726 59 -1.500862588271106 +729 59 -.31040814446939274 +748 59 1.1638155572206312 +750 59 -.9146061937020393 +759 59 .42482037867648575 +772 59 -1.2289355948259082 +774 59 -.7012491006030895 +786 59 .5447969612168296 +796 59 -.6181364034393947 +819 59 .8570122347354125 +853 59 1.1569695935710178 +864 59 .3491752234912251 +876 59 1.0611678424223336 +879 59 -2.127963311159857 +883 59 -.05427645937675868 +887 59 -.5379334819717234 +908 59 -1.2901823637972885 +909 59 .5546017557380776 +912 59 -1.9752406801087623 +927 59 1.50799574175956 +933 59 .6169828280746268 +934 59 .7940143235481099 +942 59 .8119444782325954 +944 59 .004132905829335065 +953 59 -1.1851721436348956 +962 59 1.8587744235333077 +10 60 .4331174597135181 +29 60 -1.0933314934145346 +38 60 -.24756292310930328 +48 60 -2.74651936946914 +55 60 .4100480550847626 +75 60 -1.643224492154072 +107 60 .06444579991714533 +117 60 -1.0431263040952399 +130 60 -.27773312059689664 +134 60 .7927018990350775 +138 60 -1.5710967855111462 +142 60 -.2597550699290276 +143 60 1.0465157901761062 +147 60 -.9165098028642988 +149 60 .7660819783403626 +156 60 1.0417532954253432 +161 60 -1.9245554938577691 +166 60 .2716690767498795 +167 60 1.6518946294712322 +179 60 1.0053706476745525 +182 60 -.2587807389278402 +200 60 -1.445989888288537 +201 60 .2588859788112955 +214 60 .28356368271271165 +215 60 -.8927230936716176 +241 60 .6022014830824632 +259 60 -.7228867034703303 +261 60 -1.107086908475023 +282 60 .43630481784638186 +292 60 -.2736141774208506 +294 60 -2.336363880748508 +313 60 -.3206073781278744 +316 60 -.4699306377238469 +329 60 .6970264473506977 +330 60 .24180527171455102 +336 60 .3988479749175366 +349 60 -1.2660761913055976 +360 60 1.0126003424416774 +367 60 -1.0507821356919234 +369 60 -1.3292870398093335 +380 60 .7520364204397413 +399 60 -1.1040474398775983 +409 60 -.09836374850133416 +440 60 1.3083460069353503 +465 60 -.4663498667099383 +484 60 1.042802881588181 +486 60 1.948194990117416 +488 60 -.7557358697525695 +489 60 .27122286279162405 +490 60 -.7182350707675655 +493 60 .5463573476472563 +498 60 .3367989124584583 +504 60 -.5370149984064794 +538 60 -1.191607987535763 +572 60 1.0857697114752378 +574 60 1.7693730109979127 +577 60 .22000845115505246 +578 60 .015327776384032099 +588 60 .12800775072623638 +605 60 1.043095696318283 +613 60 1.6678519565075631 +638 60 -.9136180890460371 +652 60 -.48640446609279475 +659 60 1.4587240444711693 +662 60 .9393663200522752 +666 60 1.1953469002873025 +677 60 .24601445955068663 +690 60 1.3856679593122025 +700 60 .21650336270868464 +712 60 -.5922010439859695 +713 60 -.3322161752108394 +719 60 -.1438056182369688 +721 60 -.7907525910297998 +739 60 1.1009624959130626 +741 60 .17882830885663414 +743 60 -.9056595290571988 +748 60 1.7370181262313682 +750 60 .6272503729617949 +766 60 .6814322900592366 +767 60 -.5688145953928971 +768 60 -.04643999708946933 +778 60 2.785117435199516 +794 60 -1.8687829528751614 +816 60 -.0064933646299077195 +849 60 -1.789597336486474 +885 60 -.15087291490284296 +894 60 -.03146148236300561 +922 60 -.11104618176826175 +929 60 -.9332778617491605 +947 60 -.6668321218801704 +948 60 -1.1027074858416555 +950 60 -.8222611016464219 +958 60 .49939759678863954 +960 60 2.221666178627689 +962 60 .06153788232538619 +970 60 -.008555292025473534 +972 60 .28937907304513427 +976 60 1.5227745805276394 +5 61 -.07266817923830671 +7 61 -.27532183665404303 +17 61 -.48255247036992427 +19 61 -.15356719683081269 +36 61 .48928380649991676 +48 61 1.7913616321928107 +49 61 1.2020877482176995 +51 61 .2276509468061581 +53 61 -.7219693862183543 +62 61 .02531227539755035 +69 61 -1.3331712994281764 +71 61 .7000213777538005 +77 61 1.1393731715153883 +91 61 1.3982468038366962 +96 61 .9204718784964352 +101 61 -1.840096888202498 +108 61 1.8530383175471936 +114 61 -.10789297508338133 +124 61 .6467985512445182 +128 61 -.812199972664561 +131 61 .48981620910456725 +132 61 -1.190809842098333 +133 61 -2.458465964006735 +135 61 .9719041927950498 +138 61 1.721994126625085 +141 61 1.8800051961803625 +142 61 -.5512327787485795 +162 61 -1.6669795354065549 +175 61 3.1441427715112082 +177 61 -1.5760150037235434 +203 61 -.701558606678047 +205 61 .35096075906205537 +221 61 1.9076222884801461 +222 61 -.4457331534568595 +229 61 .4164249875450319 +230 61 .002910767385792906 +247 61 .6987070363717799 +298 61 -.7746212835053076 +302 61 -1.8262139865938027 +310 61 -.3762963352600693 +327 61 .3566201554862133 +363 61 -2.183020451191731 +365 61 -1.0623969870910002 +369 61 -.45307070149632583 +389 61 .3198449406869308 +396 61 -.18489310878272341 +413 61 -.8567214386701134 +419 61 2.040249585408528 +436 61 .2041969206622361 +437 61 -.4126926085165052 +439 61 -2.837188030554331 +452 61 -.1044049561377761 +486 61 -1.8956618745174878 +488 61 2.6985541580005146 +490 61 .5677233393612511 +506 61 -2.2904381788368564 +508 61 .28200408509026853 +515 61 .6784586513835758 +521 61 .18096527904301107 +541 61 .6084623183986513 +542 61 .5309922137649911 +560 61 -.5258647888454425 +565 61 1.4860819578087818 +577 61 1.7250617838225977 +600 61 -.7321100341642148 +603 61 .4102017637746256 +612 61 -2.4959220605987977 +623 61 -.5804425956649777 +625 61 .38079370767300796 +627 61 -1.7034102136074325 +640 61 1.2366235710136588 +641 61 1.4369503055690094 +656 61 1.2687530404245584 +683 61 .6484762577061259 +705 61 .4773272992928125 +714 61 -.8506652625249496 +724 61 -.27675327167890196 +726 61 -1.3887454056970712 +728 61 2.2269430772834418 +736 61 1.5035280378003375 +737 61 -1.012186529380881 +738 61 -.0013497267187282044 +746 61 .49531098515805033 +762 61 1.4876059340835206 +765 61 .5200048670968211 +779 61 -.27820427343566406 +784 61 -.07118426455898978 +787 61 -1.8799609860134379 +799 61 -.57526549558883 +804 61 1.357797769543717 +806 61 .8347848344922086 +807 61 -2.2791203837069793 +808 61 1.1480730410877904 +831 61 -1.4567603294738711 +842 61 -1.097148361449324 +855 61 1.696381840166227 +858 61 .04594212578922845 +896 61 .12657542080315765 +905 61 .805785713807437 +908 61 1.5166333490585855 +963 61 .35957708271196825 +986 61 .32817010965467575 +991 61 -.08649306096830489 +2 62 -1.792712037063403 +20 62 -.006958376955603959 +34 62 .5991071199878302 +38 62 .20764095639418834 +58 62 -1.9249244230276714 +72 62 .008428318713927685 +74 62 -1.0473368258176883 +75 62 -.3897511613506442 +92 62 .40468819241762066 +94 62 -.9805258928518392 +100 62 -.00390708871269102 +101 62 -1.9556351932082536 +110 62 -.4624299352494021 +112 62 1.7672059441252923 +113 62 -.09281491058550304 +114 62 2.0690899114593218 +115 62 -.6010185890306119 +116 62 1.4436528383070864 +125 62 .4487064597974127 +126 62 -.7435720159041237 +127 62 1.9214206659631428 +129 62 .16150868448993727 +149 62 -.28052511090893845 +174 62 1.3334220276407527 +181 62 .2130563116412197 +205 62 1.320934365097694 +251 62 .5165910486674257 +256 62 -.9011758337906277 +260 62 .7947763131062594 +262 62 .253557101083018 +263 62 .14501067193523098 +267 62 -1.1772986159952243 +272 62 1.7786001466305785 +276 62 1.6740415862677147 +286 62 -.9983911076423292 +289 62 .98911970268267 +307 62 .8952092606369997 +309 62 .665173064593034 +347 62 1.1755731882040437 +360 62 -2.93546392924793 +389 62 .575590537254572 +402 62 1.8308914088902135 +405 62 -.20535655297514616 +410 62 -.012275368321586 +427 62 2.0837977323641645 +457 62 1.0970653343274364 +470 62 .04955436864154142 +487 62 1.507748862037691 +494 62 -.12429603712091247 +510 62 2.2979042114423933 +530 62 .6575495571487309 +545 62 -.3526325959353545 +552 62 1.1060165842321967 +562 62 2.0261920769174484 +570 62 -1.3231093102398581 +573 62 1.1066856325532135 +591 62 .05344650758715491 +593 62 -.5171476105789172 +610 62 -1.174013789285434 +626 62 .7123141006262611 +639 62 -.5358833762099383 +647 62 .4630539477467377 +656 62 .24128649258877197 +657 62 -.6135177146920078 +659 62 .901789347525026 +681 62 2.5438818624312503 +683 62 .9912429819344759 +691 62 1.2078337698107022 +700 62 -1.1148709563030568 +703 62 .4499738650543652 +715 62 -.6714843455407508 +723 62 -.4005786872467517 +745 62 -.4213659683337341 +753 62 .15923884243218694 +763 62 -.24824261647339288 +769 62 -1.5459774747255177 +781 62 1.2514531413694754 +786 62 1.3186695931378078 +820 62 -1.6438943321432251 +835 62 -.1066758154989238 +837 62 2.155891500121672 +840 62 1.7278821102357962 +855 62 -1.9274669914506306 +858 62 -.6743162787779052 +865 62 -1.296974508546892 +897 62 -1.0261072992389453 +910 62 -.12627230315489135 +912 62 -.9804696907463729 +927 62 2.2083597025219257 +937 62 .13845804417204233 +940 62 .7611980532304063 +962 62 -2.591292056055457 +966 62 -.5122767145226228 +969 62 .3834501746992509 +970 62 .8461188518526913 +974 62 .6835828468403551 +978 62 -.5519643080125587 +1 63 -.6982653429246515 +5 63 -1.1851193898267671 +14 63 -.8198032548534686 +18 63 -.48877308234058336 +60 63 -.5516396277635692 +73 63 -.3015948375048896 +82 63 1.3354657736364812 +96 63 1.0162489473013254 +108 63 1.2239324498619144 +109 63 .299966153300288 +133 63 -.4859320521452425 +153 63 -.06712242030471853 +157 63 -.4243800924010998 +199 63 -.7232890828008443 +200 63 -.5133094686319696 +203 63 -.7494668101455632 +204 63 -.11940062750066247 +208 63 -.05839590081820531 +213 63 .03349658544110433 +230 63 .9077468209439341 +240 63 .19481839907034326 +280 63 -.5733830359304477 +282 63 1.0853296316082943 +298 63 .7582657049237667 +343 63 .3743604654763337 +347 63 -.6717845901568955 +349 63 -1.7731793037704402 +350 63 .17632262533410534 +356 63 .34464073384928096 +360 63 .7099416295676317 +387 63 -.055171398320680506 +393 63 -.10778311573878482 +394 63 -.3016484955450485 +400 63 .01487600291869514 +424 63 1.125945198087673 +440 63 -.5706391236821056 +441 63 -.9272270044009392 +443 63 1.325145665221297 +469 63 -.3517906846222434 +471 63 -.9269466501887708 +480 63 -.15563941655126046 +486 63 .671322671802702 +497 63 1.0271697206334682 +502 63 .06218052154364643 +503 63 -.2995803309884159 +506 63 -.7607173703944216 +509 63 -.4600353629426504 +515 63 .5142303479746911 +529 63 .869252490630978 +538 63 -1.027543413191862 +553 63 .5654619564321978 +570 63 .2717043965534233 +586 63 -.6447282703202158 +606 63 1.1946208034931174 +616 63 -.9410421015276801 +619 63 .010911168209169403 +623 63 -1.0182496573135966 +628 63 .22933271658420884 +633 63 .39644141833453994 +647 63 -.764905874283108 +654 63 -.4077364680671437 +655 63 .33163419135106015 +663 63 -.04321113659371731 +669 63 -.08686544910380857 +677 63 .4375899287490018 +696 63 -1.330485517973864 +706 63 -.19812642278372844 +719 63 -.5584381189575693 +735 63 .1237061923790303 +743 63 -.21907705830706203 +750 63 -.427376851774799 +751 63 .48077090462613936 +754 63 -.6494207856502467 +769 63 .18721135012001364 +772 63 -.055549534639171505 +790 63 -.7494985293051153 +791 63 .5164321022780618 +793 63 2.351462371230955 +801 63 .9325158271609643 +802 63 .4727348643149094 +810 63 .9723272617677527 +819 63 1.1602331972768811 +820 63 -.16326463485368908 +829 63 -.4760965302086083 +833 63 -.05137860448409151 +835 63 .9308719493018709 +855 63 .7059008448349788 +869 63 1.3455577506754148 +880 63 .6433553102632343 +886 63 .03159817115741053 +894 63 .39233350756698826 +898 63 -.40313564777288086 +905 63 1.8590400998726697 +910 63 .7717482750955424 +914 63 .3122925403920896 +919 63 -.21798577381928524 +920 63 -.22585765194023927 +923 63 -.9718282779874565 +924 63 -.8311947173315151 +938 63 .5040767924402786 +950 63 -.931970243689483 +973 63 .2313332051577235 +975 63 -.41001558854200004 +985 63 .7349710570212478 +988 63 .2701875327977944 +990 63 .26420308271929416 +999 63 .4788798889505951 +2 64 -.06915744576988792 +15 64 1.4066534380467348 +28 64 .08844398737586712 +36 64 .49525872010165967 +49 64 -1.3503775320464708 +71 64 .13721575026247365 +78 64 .35929524626249254 +85 64 1.0854869329875112 +105 64 -.5009449076077483 +116 64 -2.3838281908696066 +119 64 -.2125451848464487 +159 64 -1.956330268937747 +177 64 1.1714145867999808 +186 64 .30922831166781684 +194 64 -.7659031696437807 +206 64 .25187732648264943 +210 64 -.6384522179796991 +218 64 -.008443877615435094 +228 64 -1.3482567889376134 +247 64 .8933545463418143 +256 64 -2.021705766519323 +259 64 .5006411213964419 +269 64 .3987754416757871 +277 64 1.1981709934525828 +283 64 .48470460771040924 +298 64 .9123819487375083 +305 64 .3753608119026353 +307 64 .18231484702681816 +320 64 .26026510256778634 +322 64 1.2454201487412702 +345 64 -.09922423695720511 +353 64 -.7118906483415487 +358 64 .7886734648495686 +361 64 -.5570692828320065 +362 64 -.25482074722907855 +396 64 -.5730960112395764 +403 64 -1.12942812038584 +410 64 .5296060484370515 +418 64 1.6372375637882675 +423 64 -.37954717000702143 +429 64 -1.4654512357968432 +430 64 -2.0801064020772153 +434 64 .46166717658252265 +438 64 -.07752387662507508 +454 64 .6463413786183789 +455 64 2.600028135857387 +474 64 .921947830382809 +494 64 .8995255398519831 +521 64 .4211080084414134 +529 64 .8783146513438908 +545 64 .9765567797737471 +552 64 -.18034297557440057 +568 64 2.58141324093587 +569 64 1.0973887664786326 +581 64 .021680326142958967 +600 64 -.5992142529063491 +607 64 -.7076977584138622 +608 64 1.140157997415912 +611 64 1.308828818685162 +617 64 .31560362058287866 +621 64 -.4621111123971044 +623 64 -.25055351179208396 +629 64 .9768115728628308 +633 64 -.22677169167224936 +635 64 2.5746442336650475 +639 64 -.7507505070461904 +640 64 .9228730528373162 +646 64 1.9481640408160565 +661 64 1.2175475762523396 +665 64 -1.2135967996545927 +683 64 -.5858052424380341 +686 64 -.18579970638215915 +713 64 -.5012838601680621 +726 64 -.9280250030032549 +731 64 1.1493718995041962 +747 64 -.22344857696409218 +762 64 -.004368617579744299 +768 64 .1764321865605745 +770 64 1.6352726420342534 +801 64 .8381858254440347 +803 64 1.5968827220766464 +805 64 -.09851621298718011 +811 64 .0033657927471922866 +817 64 .16823959823739282 +819 64 -.7467016887658025 +829 64 1.0094983007881178 +838 64 -1.0901330728540148 +841 64 -.9516047936132408 +849 64 -1.5712177633679953 +868 64 1.0538470630025538 +870 64 1.2211920464330102 +889 64 .9826704821206593 +898 64 1.6661622788180053 +900 64 .5287088676106827 +910 64 .7430311690926608 +913 64 -.9423983182673551 +922 64 -.560799690034446 +960 64 -.6513607766204986 +967 64 -.7350237008086018 +973 64 -.4160789989756837 +978 64 -.09517570271605102 +979 64 -.12029804726378487 +989 64 .22840415384388765 +993 64 1.4747435153937365 +998 64 2.0576614629835706 +4 65 .4577618577882367 +6 65 .6237298001570086 +10 65 -.37075919859281137 +19 65 -.02605924565067294 +31 65 .020417615869273792 +32 65 .006277519097091594 +35 65 -.1375979308437049 +39 65 -.3273526403558361 +67 65 .6374805900663102 +87 65 -.4781356183093925 +104 65 -.3546742805365082 +105 65 .6335325492963353 +115 65 .1557719620104701 +127 65 -.026122252517938517 +131 65 .34793089709401814 +145 65 .44692242238428875 +155 65 .08413775547119645 +165 65 .04870469992900117 +169 65 .2895221678507526 +174 65 -.6363048209441108 +176 65 -.04931063021375738 +202 65 .39491262396075644 +206 65 .33345020658391483 +212 65 .26149943528886005 +225 65 -.7407087315542693 +231 65 -.5875996403535622 +256 65 .04177564719747865 +257 65 -.6188354895415356 +272 65 -.22063710436242565 +286 65 .9650806715097624 +300 65 .09330409828806148 +337 65 .3306824973888301 +339 65 .3476936565820027 +347 65 -.23641204689095474 +364 65 -.22355716614090268 +366 65 -.002201018811094274 +371 65 -.4006218284876738 +376 65 -.15493634320292335 +385 65 -.4496142911225909 +387 65 -.329468557496462 +392 65 .1988647787024098 +399 65 -.2872790472795263 +405 65 .1609438545211871 +410 65 -.767910677598874 +415 65 .1986702439946361 +419 65 .3236483230704774 +421 65 -.04110562331763473 +426 65 -.4735262300749639 +434 65 .5146095406174475 +459 65 -.5673531809778863 +479 65 -.48316825599441016 +486 65 -.06756321158842776 +487 65 .47754448671740557 +498 65 .22166467421492003 +505 65 .014023670574093369 +511 65 .5210743257811363 +513 65 -.9776068756507524 +518 65 .7483082192226476 +521 65 .6305027271915279 +524 65 .0780227195538295 +536 65 -.07614906865595805 +568 65 1.0433708924566758 +572 65 .0953837516874432 +575 65 .9083050756136167 +577 65 .23091248844026496 +592 65 -.9883222327790382 +599 65 .7193298186470112 +600 65 .3244756340098265 +606 65 -.09710979894423102 +617 65 .12488080069530044 +628 65 .40279868316860235 +629 65 -.12800060850357836 +631 65 -1.0870578341875885 +635 65 -.11365111161777201 +638 65 -.6963591123148037 +641 65 .20976135088662368 +661 65 -.10995659330183459 +670 65 -.056879995087195934 +678 65 -.07984107665867604 +685 65 .22063262079622162 +689 65 .11828939120952281 +697 65 .4126208640539722 +711 65 -.5097924447317306 +733 65 1.007659206553326 +740 65 -.7276126830448297 +754 65 -.14143773028916717 +769 65 1.1496648276360981 +781 65 -.35079985205014835 +785 65 -.15480231585102705 +805 65 -.37034643770985753 +818 65 -.07288565392647994 +822 65 .2565080819043528 +837 65 -.17161684713621794 +844 65 .17489863111894843 +869 65 -.17055966785697924 +898 65 -.653210663884906 +899 65 1.1736425593044337 +904 65 -.364403255175876 +905 65 -.740934544546277 +907 65 -.6661387855084104 +915 65 .7044773520242128 +927 65 -.49459891469130013 +929 65 .4434268037552378 +943 65 .4890030806831647 +949 65 -.5680327696717558 +956 65 .4563211771715344 +960 65 .39740061866297494 +969 65 -.3076423209630852 +977 65 -.4848207593886883 +3 66 -.7418233880478399 +17 66 .739397254564165 +19 66 .9185517207950646 +23 66 .42324093523934125 +34 66 .34044247300338265 +44 66 -.15642732220323186 +46 66 .696386680277523 +55 66 -.3041431344713681 +84 66 -.5999445818280968 +97 66 .09403238316688736 +108 66 .6273725946585794 +118 66 -.5851657999924249 +126 66 -.7743830889887628 +136 66 -.6158400648457787 +149 66 1.3097750064412943 +175 66 .5453247457735939 +189 66 -.15772067460753142 +198 66 .7342933281155284 +207 66 -.06526801482492744 +210 66 -.6570749829736755 +212 66 -1.2958080584648182 +218 66 1.2687083898973617 +240 66 -1.9620713226323916 +246 66 1.5400879354629915 +247 66 -.24627354777298055 +271 66 .5571007578504377 +278 66 .12326968199834007 +284 66 -.07248800541358671 +298 66 .3100507814548647 +341 66 -.06270198760782014 +346 66 .24833059462930301 +369 66 -.7329425347467647 +370 66 -.7209044657066772 +396 66 .18498201327468375 +412 66 .2954356022197384 +470 66 .10558235247839381 +472 66 -1.348623384103766 +475 66 -.13426984605539788 +485 66 .11047588392004723 +501 66 -.20603525989572 +505 66 -.35017747207310607 +514 66 -.06361775552327376 +519 66 -1.6570146121327605 +551 66 -.7364796985758898 +553 66 -.3642396921577431 +560 66 .06819369335228123 +569 66 -.2070019988061142 +578 66 .19562639193604742 +599 66 .6544593897515584 +609 66 .8510934870204665 +614 66 -.5545231368243755 +621 66 .9333127648416119 +632 66 .3502003344082931 +642 66 .7134121227978577 +666 66 -.14950870960103285 +675 66 -.17035861346377024 +690 66 -.2448450586041234 +714 66 -.18342312767513433 +724 66 -.20148453022083285 +727 66 .9353435076652146 +730 66 .6862202779825312 +776 66 .35256234769383965 +778 66 .9645088118580177 +797 66 -.10927701252384532 +800 66 .9890870853247097 +803 66 1.4462707606865055 +811 66 .08165868097789045 +816 66 -.08122409305854644 +819 66 -.1498934914263989 +820 66 .2094931219957049 +840 66 -.6884611600691004 +843 66 .16602571927794235 +861 66 -1.0422378992798078 +865 66 -.9783411133316199 +868 66 -.8727649527065416 +872 66 -.6248419306352444 +890 66 .2995621312698432 +895 66 -.06614695471694049 +897 66 .9991637113727343 +908 66 -1.466916216816736 +911 66 .9489511514821638 +934 66 -1.321381658153474 +937 66 .029612746313808114 +943 66 .11095483294489962 +948 66 -.1148347234584712 +950 66 -1.5312891848243453 +954 66 .3887697731821997 +956 66 -.2709775980818733 +968 66 -.5754390788130155 +984 66 .40059278424183903 +985 66 -.9784237310354458 +2 67 .29796903728550644 +4 67 -.25360253552095885 +25 67 1.286536984944269 +31 67 .5571972280151647 +74 67 1.3228531935532533 +79 67 1.1990645161223996 +104 67 -.8303616484206788 +144 67 .2731667133922713 +148 67 -.47082952631053626 +153 67 1.1046889377951066 +167 67 .24610989483617213 +168 67 1.2132325785462041 +177 67 .6149860425073416 +197 67 .8184859990846536 +209 67 1.4580099908436492 +219 67 -.29251838414819203 +254 67 -.185412986509226 +273 67 .2951669178099153 +297 67 -.5877931731850028 +299 67 -.5267818847858254 +303 67 -1.322771078979604 +304 67 .9245497100875444 +330 67 .26407929984455036 +342 67 .1185482914002133 +353 67 -.8728987598554154 +354 67 -.37213133800830245 +378 67 1.4334013834853025 +390 67 -.3186095675954431 +396 67 -.22170781974841505 +407 67 .5427408006628313 +413 67 -1.2062331405803262 +441 67 -.7808179619512301 +467 67 -.01664000222828542 +469 67 .2960403799249858 +478 67 -.7685341168083875 +498 67 .6504824421773274 +507 67 .5377709998572949 +515 67 .9311049316499348 +532 67 -.2881585427353987 +534 67 1.1730187860555201 +547 67 -.5167089699342655 +554 67 -.9861150312551317 +594 67 .15144818934373022 +607 67 -.6310168202070217 +622 67 -.4670722631089026 +634 67 1.2373580635126298 +639 67 -.5219148951859603 +643 67 1.0177503699089814 +646 67 -.5558455276346316 +649 67 .30990572937829336 +653 67 -.24269350325725453 +669 67 -.46275725184799504 +671 67 .3942369466561038 +672 67 .039777082685241466 +673 67 -1.063904799491103 +675 67 -.13810145739891044 +678 67 -.5938986212892645 +681 67 .6816291328511253 +686 67 -.7507829817838261 +687 67 .3806372948206933 +702 67 -1.0399426846604205 +703 67 -.8339694713055377 +724 67 -.2681906544167823 +731 67 .07193417027548524 +733 67 -.3623776876718033 +739 67 .3039383854753906 +740 67 .18566576391130513 +755 67 -1.3782206657369547 +756 67 -.10398453756267674 +764 67 .15630101492317494 +782 67 .788260794630307 +796 67 -.4398609549601987 +805 67 -.014307340871839005 +812 67 .7708059853230831 +818 67 -.5511762901199286 +826 67 .4287271403810787 +827 67 -.7352514861377246 +843 67 -.4812893014459225 +848 67 1.240819516486771 +851 67 .43383096423365275 +855 67 .09595385056299224 +888 67 .7202654662957025 +915 67 .04446020089798148 +921 67 1.8123452101660593 +945 67 -.3531475811072063 +946 67 1.0372426079428236 +948 67 -.5917195739817075 +949 67 -1.6739750144352237 +960 67 -.1708735512820724 +983 67 .5951961243846173 +986 67 .05357655942301458 +998 67 .9244541111247961 +5 68 -.33089908439426724 +24 68 .6419977382887232 +25 68 -.9511378692507768 +64 68 -1.3738016660170125 +79 68 .7876168525235718 +80 68 .9913196903679111 +82 68 .6287985080536747 +96 68 -.18858401647570766 +103 68 2.1371151658143313 +116 68 .17770233227729 +118 68 .2330041153506284 +121 68 .36325052674128844 +125 68 .9266553679962084 +175 68 -.2560100108354387 +192 68 .8900723257293088 +215 68 .6848411871065401 +220 68 -.25896331116434035 +225 68 -1.6356470327200183 +235 68 1.2540490438475949 +299 68 .42087379898808214 +326 68 -1.7632921641429058 +337 68 -.3558097776095247 +344 68 .9930252737692937 +360 68 .682844225055615 +378 68 .9638063074172043 +384 68 .267468931733544 +392 68 -.9180587206291282 +399 68 -1.3055983681007175 +409 68 -1.9283751189099516 +410 68 .4126780358462974 +419 68 .30254835239179934 +421 68 -1.6864751468450414 +441 68 -2.26733049091385 +446 68 -.7842703809897237 +448 68 .7237418417697794 +458 68 -1.2307518460302629 +464 68 -.8702820051630282 +490 68 -.6817702610676786 +491 68 -1.1606802835525583 +496 68 .7193379710511826 +501 68 .15983982124252458 +507 68 1.260709567170285 +508 68 -.09577112865752813 +515 68 1.5766563777665026 +543 68 -1.1161817939081597 +558 68 -.9725420086689327 +564 68 -1.4058265824818656 +565 68 1.0333914954707943 +585 68 -1.0603314268277158 +592 68 -.676577593381872 +615 68 -.26348661175095295 +619 68 .896839551322992 +643 68 -.2874710808068901 +671 68 .8581038642337895 +677 68 .0035722009115887604 +681 68 .49584633372786524 +682 68 .15161732752575896 +685 68 .7700966796798714 +686 68 .45549897113737065 +694 68 -.17624148174427798 +695 68 .05766028147153546 +697 68 -1.5449787393774157 +719 68 .8884256388870067 +739 68 .18512099764970374 +746 68 .1446250805152942 +749 68 1.1251286572437627 +751 68 -1.0366225034142853 +759 68 .4618143150561265 +767 68 .7849910613029375 +780 68 -.8154721917603027 +791 68 1.3934780736847328 +797 68 .08500307657869359 +815 68 -.26594776366218914 +825 68 .8679355915232206 +829 68 .16542191617870777 +837 68 .015198144158810906 +854 68 -.4528960759682238 +859 68 .31630763090652514 +888 68 .9050008692227635 +889 68 -.43428820522888 +895 68 .06536978507514946 +903 68 1.1876903514203516 +964 68 .35001021906679486 +986 68 .5881270659678973 +10 69 .4415800120417581 +12 69 -1.285414345481911 +17 69 -.5712059267527972 +20 69 .16685464592630406 +26 69 .425725583118378 +42 69 .5044056736700385 +52 69 1.218872228992608 +60 69 -.018439307635058966 +74 69 -.6620235974703608 +86 69 -1.110778753036815 +95 69 -.45981908725954734 +134 69 .3234378998906719 +147 69 -1.7157927627443652 +153 69 1.0469895473714448 +157 69 -.0004585527248243612 +160 69 -.9556805063887834 +175 69 -.8578438107981252 +182 69 .724129714218945 +186 69 1.2290255723238586 +187 69 .03806111659508675 +189 69 .5311490604269999 +190 69 -1.556321611428458 +194 69 -1.6252795575497023 +199 69 -.23337055475951193 +219 69 .19121229058946157 +227 69 .2298866004463193 +231 69 -.22463095908255848 +253 69 -.7637381201574256 +262 69 -1.0106467355276534 +264 69 .8558325274318807 +273 69 1.1955932679498982 +296 69 -.5292057620472923 +299 69 -1.4112492503541896 +301 69 .04657533605390038 +344 69 .8480327445594561 +350 69 1.018057021343855 +354 69 2.722842906416495 +369 69 .8169895105039371 +377 69 .942155553534149 +406 69 .352106200299448 +433 69 -.09840337536842672 +447 69 .8551452927823618 +458 69 1.0313092729635274 +469 69 .028891028891376735 +472 69 -.04693515052642584 +484 69 -.9485729085541569 +491 69 .42586866430292214 +496 69 -.4014644566958475 +500 69 -1.4025739340067074 +501 69 .6087584385180139 +508 69 -.21336835087396128 +509 69 1.1068322305771026 +514 69 .30929580727968253 +540 69 .20251588248248945 +544 69 -.4786332367151171 +545 69 -.5952695422713704 +565 69 .22300159940627268 +567 69 -.16378267611005734 +588 69 .562735162383568 +608 69 .23044079436293613 +614 69 .2081032717768827 +626 69 -.3265296875134208 +629 69 -.6199391173060206 +639 69 .530146336648558 +645 69 .25079211821899366 +665 69 -.00022855247004812274 +671 69 -1.0469276657478739 +682 69 .3856822357411677 +710 69 -.03601839472606795 +754 69 1.8455462121470094 +760 69 1.2475541103126124 +766 69 -.38476659046430695 +769 69 .40367965963505603 +796 69 -1.3158385481997026 +807 69 .7245156617669009 +813 69 -.6369632297831396 +818 69 -.08669722460405833 +847 69 .6065549989578779 +849 69 .8281607217936212 +867 69 .4630641676875148 +871 69 -.5608487709623919 +872 69 -.14202991655597846 +879 69 -.03372740362749565 +895 69 .17503383795256985 +921 69 -.7957869693510572 +924 69 -1.1249821198035244 +929 69 .3636057855731476 +933 69 -.1256408784041143 +946 69 .10222491105787081 +949 69 -.03263276808697377 +971 69 .4557665625821961 +979 69 -.024037807230633423 +992 69 .2990349772276184 +994 69 .5045424193327115 +4 70 -.6254797879931551 +27 70 -.6502652002801268 +28 70 -.4569278926130901 +29 70 .7765752853021396 +49 70 -.8344697290421441 +54 70 -.26862242963497623 +57 70 .5434077411321786 +60 70 .2589603644632057 +62 70 .2160284486084424 +68 70 -.05074252796180194 +77 70 -1.4182105613027012 +78 70 -.7357202915311573 +84 70 .12065267754764201 +85 70 -.12044103126771578 +87 70 .3816152878134108 +125 70 -1.2903733706159874 +130 70 .34261700993658395 +142 70 -.18528560139268196 +148 70 .45123156619698174 +149 70 1.128647881295262 +159 70 -.6704454878901167 +164 70 .17816191552076177 +172 70 -.2554756640847623 +174 70 -.5439500503280756 +184 70 -1.3733082866208903 +205 70 -.2265065954843756 +210 70 -.4459269071456655 +230 70 .35102656009677413 +259 70 -.01728075814417772 +260 70 -.17647652715442325 +263 70 .3251468925315913 +264 70 -.1190098216092928 +268 70 .13911307115017665 +273 70 -.12170420818736427 +277 70 .2662618154064376 +285 70 .7993240355622891 +290 70 -.30756591893812585 +296 70 .5484020422344971 +305 70 -.8763791052813789 +309 70 .6870057389997364 +315 70 .9229401185203635 +321 70 -.6735755953623387 +326 70 -.8297893118585422 +336 70 .2746858324890954 +340 70 .1933403869277821 +344 70 -1.453944376088499 +345 70 -.7125829249922737 +387 70 .37085635007176315 +399 70 .5701082567300565 +404 70 .013311222648536292 +434 70 -.3452021634320666 +458 70 -.1897732069950075 +477 70 1.041501222057434 +481 70 1.1723195662666488 +519 70 -.397047856281651 +522 70 -.49915557668145893 +523 70 .287398667141449 +524 70 -.010775758847581918 +531 70 -.43240362185549897 +569 70 .06936939445161103 +587 70 .19193644901079265 +590 70 .19387195094733492 +594 70 -.9919151740346013 +597 70 -.24625955434918578 +605 70 -.11289122145159161 +625 70 .46521287163899633 +638 70 -.728292047094917 +639 70 -.7067655218205999 +642 70 -.09816741916572483 +644 70 -1.5061236858498794 +658 70 -.7376408631747994 +665 70 -.48255273399698784 +672 70 -.1849992123405246 +675 70 -.14719712569185767 +684 70 -.8075373811006569 +686 70 .4545628213888796 +695 70 -.7431648595922314 +696 70 -1.029677899263362 +697 70 -.15393746998026053 +702 70 -.0601171256185693 +725 70 .5690490185478476 +746 70 -.15929971419240824 +801 70 .23816538932286868 +804 70 -.3807010075507471 +809 70 .13145255930059643 +820 70 .2056112094211378 +839 70 -.2802410069053786 +844 70 .7425305858235547 +855 70 -1.1370443257356946 +860 70 .02234336167500961 +866 70 -.3219280879869414 +872 70 .843287159421638 +875 70 -.7262204198946393 +939 70 .06819297337383513 +942 70 .014539544359084111 +975 70 -.13301762939042583 +981 70 -.8379828397501746 +996 70 .023947834583402702 +997 70 .5021170660505735 +1000 70 -.32992078981069206 +2 71 -.5164337755451591 +21 71 -.07618020034516805 +33 71 -1.1380437251333733 +51 71 .15699754707962918 +61 71 1.0347885760618083 +90 71 1.0122576988596745 +98 71 .3944826223614321 +131 71 -.18499591649920819 +139 71 1.113162504474144 +141 71 -.27913658054688806 +146 71 1.1500433851962426 +149 71 -.046800726797619756 +151 71 .6687192196110571 +162 71 -.10559808107433692 +164 71 -.00879739427256528 +183 71 -.479161582718589 +186 71 -.907997449136145 +200 71 .42931591872663544 +212 71 -.3302814561331042 +224 71 .3412193477194796 +231 71 .8748722706768448 +238 71 .6272869238946821 +258 71 -.625612644978794 +279 71 1.1046352506653183 +295 71 .42076815368715387 +301 71 .593045940516636 +321 71 -.24913456728085048 +324 71 1.4756028777188988 +327 71 .2721513322641428 +328 71 -1.198884997116339 +334 71 -1.3908584663348407 +347 71 -.5812117210798217 +354 71 .48656109557650973 +356 71 -.00639977390037863 +370 71 .6904955974141662 +384 71 -.7152456856875488 +394 71 .5816515525341035 +413 71 -.1816673762194578 +414 71 .5373634905410241 +434 71 .6157219782917245 +445 71 .45735745562297064 +455 71 -.7204206629419079 +465 71 -1.3222474732260028 +474 71 -.5123842449216794 +475 71 .16638098400438378 +487 71 .08116919783653767 +490 71 .28206333642607395 +492 71 -.3897940824192035 +499 71 -.806506214781654 +513 71 1.9456767290529529 +520 71 -2.048798965856045 +523 71 -.1466528946118089 +539 71 .10214364432238682 +555 71 1.4984074714924525 +557 71 -1.4329076248499675 +560 71 .8616959835008243 +580 71 .8553004842204065 +582 71 .2901715576637273 +610 71 .786089351802729 +615 71 .4727067476843956 +643 71 -.289780234525548 +649 71 -.18023829742359015 +655 71 .8869925132070727 +660 71 -.8894733779198719 +662 71 -1.1595829922205774 +671 71 .5957062341257533 +676 71 -.509301681641077 +686 71 .06479691530690018 +688 71 -.3200588932092963 +697 71 .7138122627417445 +715 71 -.7925681747595121 +717 71 -.558716225846344 +736 71 -.1840387333141421 +762 71 -.7055886309361481 +774 71 -.7662915105920483 +777 71 -.6197156085343356 +786 71 -1.062115376676162 +794 71 1.2669801983192979 +803 71 -1.7923460551058596 +805 71 .25365146582405906 +813 71 .30281869679098594 +828 71 -1.189679252699416 +838 71 .9415689510183792 +859 71 .7059275133944762 +878 71 -1.802531267651266 +879 71 -1.2498528895188152 +881 71 .18828314619398157 +886 71 .2855576729568852 +900 71 .26510860810891523 +910 71 -.5600148342433147 +913 71 .670645654087787 +917 71 -.8900192655251337 +918 71 .3270617957408495 +920 71 -.1813085894252953 +936 71 .6026718721250756 +943 71 .8504036406117853 +1 72 -.8781191067027555 +3 72 -.582907113753571 +12 72 1.0105639072264045 +14 72 .26762273558047567 +17 72 -2.1487783935527323 +19 72 -.7203552703030233 +27 72 2.555160039339903 +39 72 -1.0239426339630109 +40 72 -.7408326622828103 +43 72 -.5382737185170272 +46 72 -.6464684748402152 +70 72 -1.1449157005820858 +84 72 1.342688283736807 +86 72 -.9286071730192668 +110 72 -.12697671607791822 +113 72 -.6299105779627688 +117 72 2.8357333595025747 +142 72 .21934753244095812 +176 72 -.17117915161790292 +185 72 .7627088683364324 +194 72 -2.2819670166346846 +195 72 1.7832904287292177 +200 72 1.7496397827974268 +209 72 .9833537805816688 +211 72 .6226333857410165 +232 72 .9841539627508006 +234 72 .4248162797737517 +235 72 .4777884278188496 +256 72 1.3462135016321681 +270 72 -.8874047848428783 +294 72 1.2819312905284685 +304 72 -1.9709708066109588 +310 72 .8371872403686522 +325 72 -.26810944261383196 +343 72 .009437442640509677 +352 72 2.628535605306986 +353 72 -.51516609404303 +365 72 1.0804431504891328 +371 72 2.5904682520123954 +380 72 .5160539613323833 +383 72 .12657916868954852 +387 72 .20218841922292183 +392 72 -1.2685557476155311 +394 72 2.251699993803304 +403 72 .7699241193185186 +405 72 -1.142851019952229 +411 72 .43843907650649927 +412 72 -.6075480455516934 +430 72 2.6960651768371666 +441 72 -2.353141773857144 +446 72 3.5871113428002315 +451 72 -.9232233596258688 +453 72 .9747966188301495 +455 72 -1.7179209662213601 +469 72 1.0995610452771327 +499 72 -1.1764015145755937 +512 72 2.649872643733664 +545 72 .13042052341017124 +546 72 -.502996459430478 +556 72 -1.7050005925099507 +576 72 .5610924258298906 +580 72 .7778572710506423 +583 72 -1.9664788021114548 +590 72 -1.0913765244427347 +624 72 .24618357740456182 +635 72 1.0625113131942983 +637 72 -1.2356918838668984 +646 72 -1.0646427090396602 +647 72 -.5481138155710167 +649 72 .8290667357182226 +670 72 1.0948359823463492 +675 72 1.6955305260566846 +695 72 -.9583133504757487 +702 72 -.1379075785097495 +706 72 -.6541540314516375 +710 72 .34413959024754326 +727 72 -1.6772075329362652 +735 72 -1.259236521298733 +745 72 -.6221369223478757 +748 72 -1.5153719833495227 +751 72 .3116580438597152 +768 72 -.25898080184514793 +777 72 -.5103775626037498 +796 72 -1.758205890169635 +817 72 .4150462673579507 +832 72 .00945576997602049 +847 72 -1.551047787112847 +854 72 -.8793794522276721 +870 72 .24929646050595994 +904 72 1.085642832173814 +913 72 .7977654769648951 +931 72 1.0407029698156542 +939 72 1.2414141292371652 +941 72 2.0393152251247866 +952 72 -.9283672499654714 +970 72 -1.8914818000834712 +972 72 -.055429900858419465 +20 73 -1.8708070322264672 +21 73 -1.759254478534368 +63 73 -.471593953905383 +71 73 -.16791249654757365 +76 73 -.8245001692582777 +79 73 1.2752531322831242 +93 73 .5780797504644989 +95 73 -1.4006427656020333 +140 73 .39645060415613426 +176 73 .024872741361680786 +189 73 -1.6073969658210483 +199 73 .4368154341577895 +230 73 -1.869299295096735 +241 73 .4128608036504274 +257 73 -.025376255109530205 +258 73 1.0054791772399723 +269 73 -.4281520270678778 +270 73 -1.4346838662959485 +273 73 -.1925144387553314 +308 73 3.0728806181523027 +319 73 .4898771094591464 +341 73 -.868797479287835 +343 73 -1.8309909201103614 +348 73 1.4573331097842481 +353 73 -.5784487637691228 +370 73 .660099309174732 +397 73 .6482124466253818 +401 73 -.8031101282398762 +406 73 -.10788643821422769 +415 73 -.7756590428540583 +416 73 -.053018088366064337 +419 73 .037854071563152986 +437 73 -.15812951660983168 +439 73 .6376187230869513 +448 73 .45514753053337886 +453 73 -1.6556627196807872 +465 73 -1.6339587081691622 +470 73 -.9599650624275342 +472 73 .05896475445129673 +495 73 .1279943685584574 +496 73 -.796401987776483 +507 73 -.9382000989897809 +526 73 -.20833482989080657 +542 73 -.7074139437463953 +549 73 .6551446482044224 +551 73 -1.8162761791729292 +560 73 -.03555787142883821 +595 73 -.6759228571469592 +599 73 -.3804319624326293 +601 73 .1269752090525116 +633 73 -.9275150956340247 +657 73 1.332052776627856 +666 73 1.8152276608576634 +688 73 1.879170737145381 +706 73 -1.3535270798333283 +707 73 -.0628155259682541 +712 73 .7272153300834902 +724 73 .22810285401838243 +733 73 -.2054854886602625 +739 73 .1822276342494777 +752 73 .8696668940536972 +754 73 .015478889080211305 +760 73 1.7053608184246833 +761 73 -.3042268226156253 +766 73 .4468559284586848 +790 73 .6989636847075288 +799 73 -1.216457719254263 +815 73 -.6550271534196045 +818 73 1.5079373978698272 +819 73 -.9980728233177043 +820 73 -1.9301041880354317 +847 73 -1.4528471264539964 +848 73 .44965958327805416 +860 73 -.6063931439554436 +862 73 1.6162896225668277 +864 73 -1.1001733619414802 +872 73 .15296943347479472 +883 73 -1.6642427417339911 +887 73 .3272870736288291 +900 73 -1.1904657623832064 +911 73 -.9572946557672655 +913 73 -.9748042814907483 +924 73 2.544746657269202 +928 73 -.42692482759509165 +931 73 2.680186052219201 +949 73 .57141794578353 +966 73 .48616185595132794 +993 73 -2.253610683494132 +40 74 -.2806336267294681 +42 74 .6733741777675256 +54 74 .021365285934321146 +57 74 .48568125488822733 +59 74 -.45326415294575995 +82 74 -.03191355773734878 +97 74 1.3655480224711654 +131 74 .9544606105348954 +133 74 -1.1255608400038313 +162 74 -.5089885200066866 +186 74 1.6103871499239757 +193 74 1.511764235274693 +200 74 .2701568002479261 +210 74 -1.3589100175810012 +214 74 -1.3104225222511587 +221 74 1.242157570172922 +224 74 -.5119944668597115 +225 74 -1.4076020594853051 +232 74 1.0207062713342092 +234 74 -1.9386671371625432 +236 74 -.253371237018997 +238 74 -.09142370369516575 +241 74 -.0012998969771818303 +251 74 .04199622559040915 +256 74 -1.0190377970569144 +261 74 .22264933694752911 +268 74 -.22888068832635666 +272 74 -.6061111527458952 +273 74 1.075578190164731 +296 74 1.018292970916169 +297 74 -.7383618829859293 +309 74 -.8448581256012839 +323 74 .29759274829362237 +328 74 -.5911621395918804 +331 74 .14402748787831 +341 74 -.5254407987253871 +351 74 -1.457169754242448 +356 74 -.9330741941329765 +358 74 .6639357191473688 +369 74 -1.6419151872195288 +377 74 -1.2946172778103986 +379 74 1.0905970664929967 +400 74 -1.207588208133222 +415 74 .0865358721511231 +423 74 -1.4566457827569372 +424 74 1.0228662934566406 +433 74 2.0158211748157084 +441 74 -.721415899151714 +444 74 1.1257687085135408 +461 74 .9195058819311095 +464 74 -.739555480468444 +470 74 .2682448098315891 +471 74 -2.1060592811010834 +482 74 -1.2818841657129627 +489 74 -.5618639658191315 +500 74 1.1274385768324684 +510 74 .14726139827184154 +531 74 .11988137248655922 +540 74 -1.3199687428444784 +541 74 .34552833914156245 +542 74 -.012570120194967272 +550 74 2.5087164134987194 +551 74 1.3290083978190361 +562 74 -.11587525205338836 +580 74 -1.3389723609947037 +585 74 -.32242831615351336 +626 74 -1.6421334117904165 +630 74 1.0651674822305321 +648 74 2.061721696050501 +656 74 2.8520541359124723 +672 74 .1878359776002294 +687 74 -.3130243630052204 +698 74 -1.014947355035787 +711 74 .7457560481356447 +720 74 .6961785070382815 +737 74 -.6492678129913954 +741 74 -.5434656680122012 +748 74 2.901355262737825 +765 74 -1.5401567913309253 +776 74 .35874171278427536 +782 74 .5185729233595078 +788 74 1.087082122120261 +790 74 -.9289231992462534 +794 74 -.2169018062968658 +811 74 -.9964299025291448 +812 74 -.35000183661778694 +829 74 1.1886793463585605 +831 74 -.6515602894983556 +835 74 1.9055489348079981 +855 74 .6968965114765694 +860 74 -1.1341247288881533 +864 74 .1710418945533279 +866 74 -.4732171615795427 +878 74 1.8639572181025035 +885 74 1.5497469190387765 +897 74 1.9884009987504987 +899 74 1.1722822178954313 +902 74 -1.6649490552256587 +909 74 -1.7122074457000782 +916 74 -.28596086308908253 +919 74 -1.6515182570418776 +930 74 -.7237956686389129 +943 74 -1.123262985982619 +957 74 -.5407727655071527 +961 74 -.8425974564202111 +973 74 .26771722425581 +976 74 .9460768334137275 +980 74 2.5151018218070607 +992 74 -.9107776901485675 +4 75 -.3786945714543113 +5 75 -.6025036843434799 +10 75 .7808806208619156 +16 75 -1.0776804910855502 +25 75 1.3840121665259906 +39 75 .5426849728773311 +40 75 .5354742377867243 +52 75 .13227079701338496 +60 75 .44891399262750653 +61 75 -.09423963914806305 +69 75 -1.064868035939743 +73 75 -.10084553161032078 +76 75 .9290062115096387 +115 75 1.140321747455433 +138 75 2.824527367484552 +139 75 -.26426626145956283 +154 75 .04657818288832776 +156 75 .04011479725241046 +162 75 -.5442834595062213 +164 75 -.3366968281040476 +169 75 -.46144164245131053 +180 75 .07445756231827799 +199 75 .786737486991494 +202 75 -1.2838442047918133 +218 75 -1.4603662203150678 +221 75 -.7647967298149959 +228 75 -.9873634857413324 +253 75 .10190544604560814 +257 75 -.025148079043213978 +265 75 1.8071474949789739 +272 75 -.9443369541092771 +283 75 1.7628893672670647 +309 75 .6210592301463619 +317 75 .4199335277153279 +325 75 .46708842704273623 +326 75 -1.2054402580574546 +327 75 .35026276428067055 +345 75 .12662611327483672 +350 75 -.0735177168525676 +365 75 .4466558136213541 +395 75 .0923939799885633 +413 75 -.6283000900971737 +423 75 .6816746766764459 +431 75 1.3465466275355618 +453 75 2.500346905346506 +458 75 -1.9988328317266297 +464 75 .8792880992953602 +465 75 .17067935533610532 +472 75 1.4048167387349426 +479 75 1.6374887170837966 +482 75 .5825429367665189 +485 75 -.06867141361198817 +495 75 -1.4356095151161 +511 75 -1.514271879596518 +513 75 -.08036588134128644 +527 75 .3106182125408605 +535 75 -.016145646868583455 +554 75 -1.2355042075074114 +560 75 -.3675356232490733 +561 75 .45925989996480526 +596 75 -.11088503913464423 +604 75 -.262549196318162 +606 75 .27068711460684014 +622 75 -.6242275146805575 +626 75 -2.0881760310531896 +634 75 1.4975751398924118 +665 75 -1.1014622859360985 +692 75 -.8416849902768209 +702 75 -.7538782828162425 +703 75 -.1676075906865323 +711 75 1.2382234306854631 +720 75 .4231829069000231 +721 75 .023174082004494126 +730 75 -.6173821709480743 +737 75 -.2411736218342561 +742 75 .22087481903749406 +748 75 -1.6478343029201092 +755 75 -1.547145057578371 +766 75 -1.1638511634497946 +767 75 1.2556874020618818 +768 75 -.3943937923463067 +775 75 1.3785285252278219 +779 75 -2.202895472139579 +787 75 1.6542985295772716 +796 75 -.15374340889299867 +810 75 .7497436228353331 +833 75 -.8844627833661198 +835 75 -.993018540933594 +836 75 .053603898425906266 +851 75 -.21467917751803614 +852 75 .303685562609534 +859 75 .5433087747418304 +864 75 -.6664138057071834 +874 75 -.42439016161419296 +879 75 .7184769529112284 +886 75 -.8268316607198518 +907 75 -1.8177293686128675 +911 75 .21170471116114115 +915 75 -1.1688966865245423 +921 75 1.630471698294165 +932 75 -1.3977078183652671 +940 75 .7464231483181374 +947 75 -.9434421622516239 +964 75 -.06306264468550496 +987 75 .22087807826198178 +988 75 -1.6030975060213748 +999 75 -.17846882564309213 +27 76 -.7807339672116327 +29 76 .7639839896189005 +40 76 -.4074991136053617 +62 76 .4999870341431355 +66 76 .9753205695663314 +77 76 -.36529565690660815 +79 76 -1.1314621745777556 +80 76 -1.5098122547024644 +90 76 -.5092812574196279 +96 76 -.47246491218910935 +98 76 -.06051437123784487 +112 76 -.4042800067605052 +115 76 .8233904711992674 +120 76 -.8292579164637524 +125 76 .4219613921900295 +127 76 .3858600073478775 +135 76 -.6188275329736257 +152 76 .7241424055103953 +159 76 -.8420116564809869 +161 76 -.29545525932768185 +177 76 -.7717790507066857 +183 76 .4595865531771658 +232 76 -.5504865407991905 +235 76 -.0872169671273561 +240 76 1.834111186405164 +267 76 .8845866548926886 +268 76 1.240355538521455 +270 76 .26126997058989515 +294 76 -.9797030594169296 +295 76 -.3630238118018043 +301 76 -.5268628363580938 +304 76 .7557137770162632 +325 76 -.30562019260046497 +363 76 .6716896979644611 +365 76 -1.6308406395594417 +376 76 .5596026357957509 +378 76 -1.162910618154649 +388 76 .9534404375588326 +420 76 .7637023042703847 +458 76 1.869627966829058 +464 76 1.4045460873736517 +470 76 .673239695274126 +504 76 -2.082257970628195 +505 76 -1.3347666278639285 +512 76 -1.1984420734459227 +535 76 -.2105497498106872 +550 76 .10819370236011734 +552 76 -1.2676801041185597 +565 76 -.46688452669210534 +574 76 .679696152789274 +576 76 -.21228568547975254 +594 76 .8470179229020284 +597 76 .36342893917431107 +618 76 .5874856928842133 +619 76 -.6107673448634677 +634 76 -.03197452860931008 +651 76 -1.190244984547424 +657 76 -.24729352238193394 +662 76 .926661128314553 +663 76 -.7140421113135956 +675 76 .10997097385918136 +680 76 .6188663487118174 +715 76 .003876171005423104 +719 76 -.6749572708017975 +743 76 .9611885614326604 +748 76 1.9894871710661897 +750 76 1.6043972157939546 +765 76 1.2717980029397338 +769 76 1.4201758197103957 +774 76 .039582106049186994 +776 76 .34258424429640155 +784 76 1.5585197478451167 +786 76 1.2206363870856756 +788 76 1.545968218663161 +827 76 .8323471620731782 +839 76 -.5861921844601924 +847 76 .15174040479078174 +858 76 .5871358302663322 +859 76 -.6551421776434058 +879 76 1.4538324617700442 +883 76 .1802964786983466 +887 76 .15304864710961516 +906 76 .3867262186816772 +908 76 -.1806617653883101 +916 76 -.36680080369236345 +931 76 -.5088642202269623 +934 76 -.8471255215327292 +938 76 .23582439707134908 +959 76 .3041702321509426 +962 76 .32904427246416135 +998 76 -1.1185232710931177 +5 77 -.21211954720829826 +6 77 .4466446006335213 +14 77 .38766238232910527 +15 77 .23873688448528269 +16 77 -.47743277954030827 +35 77 .42983082960383584 +40 77 .13262359038757668 +41 77 -1.2307663450841944 +47 77 .2490747916072881 +63 77 .36121984810135266 +66 77 -.62315307522792 +70 77 .5003450577427129 +80 77 1.0667831747983902 +96 77 .03946810110604465 +109 77 -.035251512467299344 +118 77 .02869446278653187 +128 77 -.16868079758910037 +132 77 -.5764111715721157 +135 77 -.2502609637023004 +141 77 .38668159835988847 +157 77 -1.1599997188832194 +160 77 -.3609918513264182 +184 77 .4403400786506659 +193 77 .955862896757316 +195 77 -.34040511450695976 +199 77 .2385680639706067 +205 77 .4017557703235581 +209 77 .6008212855976064 +223 77 .11536194372770348 +227 77 -.2897082410830536 +230 77 .5904703210512396 +250 77 -.5361547711923793 +281 77 .8091006616159773 +289 77 .3168411171777464 +291 77 .13094390377650594 +296 77 .3457478143008394 +297 77 .262711051282477 +309 77 .2063223256490059 +310 77 .41290467684267906 +315 77 -.8850231180546483 +320 77 -.15276530924073844 +338 77 -.057043360304577406 +366 77 -.8320175370569534 +373 77 -.1289538017760533 +374 77 -.019761958187865365 +375 77 -.05216940705378977 +385 77 -.3076702086488108 +388 77 -.7561188487183413 +411 77 .0821796946565997 +420 77 -1.0330672457290926 +438 77 .3967753912139388 +443 77 -.296983353539947 +446 77 .6032379182724896 +451 77 -.8500454717437984 +471 77 -.20198789220873947 +479 77 .3702596165569981 +489 77 -.6902821282091939 +516 77 -.01727059425629593 +554 77 -.7357153469606893 +564 77 -.0028885382760036743 +568 77 .4719398191011931 +578 77 -.7080328758306869 +607 77 -.28428672027085183 +612 77 -.9347009926609994 +621 77 -.6330579637668144 +622 77 .32990130226014436 +641 77 .27535262706648744 +673 77 .25886769818384137 +678 77 .7379846471674817 +687 77 -.264099201155425 +698 77 .13110273085422922 +714 77 -.21906039747874986 +718 77 -.8979185647285228 +730 77 -1.2154746327038193 +737 77 -.23868200589151095 +750 77 -.6646808387719058 +765 77 .032241544421580844 +787 77 .16208948736687642 +792 77 .45008076546412534 +803 77 -.7564155298854913 +807 77 -.9108222915212575 +819 77 -.43267545418384135 +860 77 -.08813046940764535 +870 77 .3273560333046929 +876 77 -.028377499547689033 +879 77 -.015829212077492494 +900 77 -.15780087955614616 +909 77 -.6116826222005632 +910 77 .6118694038978759 +911 77 -.16978690910869337 +925 77 -.6117428430582891 +941 77 .715964485800657 +945 77 .20420850953459008 +950 77 -.06673672657903013 +957 77 -.4160187922353091 +995 77 .052074565500444266 +10 78 1.392798938814349 +12 78 -.7103989156155377 +16 78 -.9635972488519959 +19 78 1.996151258175941 +23 78 -.6060460422905246 +51 78 1.632875582977021 +64 78 1.7638922239444992 +81 78 -1.4579602910903147 +88 78 -1.6057065955790495 +90 78 1.1373214276622996 +96 78 1.8469253177284786 +99 78 -1.2569312033178803 +113 78 2.3518951344970356 +131 78 -.986463015818589 +138 78 1.4712661425327591 +139 78 1.3631713451049352 +150 78 .8398596723250422 +165 78 .7196555132703885 +171 78 -.48474184573246604 +176 78 .9721371249918882 +193 78 -.8867680013667067 +218 78 1.5484075168654428 +241 78 .4640912428654162 +242 78 .31571510966163463 +245 78 .9990689341264772 +276 78 .5084052759354194 +290 78 .17115344251118114 +295 78 -.23871917797632763 +298 78 .2243423695659501 +305 78 .47895723628941345 +308 78 .20827662576478545 +310 78 -.5920173401696103 +321 78 .22089272675745492 +325 78 1.6513689852089324 +327 78 -.3198957931882917 +329 78 -1.4412754348672856 +339 78 -.8133544891551291 +343 78 1.0968829509586921 +368 78 -.36446029493349064 +369 78 .039066723985295634 +373 78 .16236688845031977 +378 78 .9768790835488171 +384 78 -1.8786064132214206 +402 78 .9367537596779505 +414 78 1.161537916452097 +417 78 .0055464377219425764 +421 78 .42815095167940587 +437 78 -.3368589747681948 +450 78 -.9639345200134524 +468 78 .18106526804096584 +480 78 .669300920742645 +492 78 -.3523122791975558 +498 78 1.2791737613408014 +531 78 .25956592663632283 +533 78 -.208337559316004 +545 78 .5617592820991795 +561 78 -1.8995553106413523 +573 78 1.9536767067445044 +583 78 -.4663326221740131 +588 78 -.5264231567424967 +594 78 -.8787945309176537 +607 78 1.1971820930289863 +608 78 .07030959272908388 +617 78 -1.3956182945866455 +649 78 -.44822933910256574 +678 78 1.3206459112120132 +686 78 .7476405092267555 +699 78 -1.2588265096882592 +714 78 .5881154556866245 +716 78 -.2734387047073118 +721 78 .5327268617996084 +722 78 .6126745424082569 +726 78 -1.6255297839137546 +728 78 -.3587736025824188 +732 78 -.36877338764524464 +734 78 2.009599351773625 +738 78 -1.625320981540072 +756 78 -1.3015339324311428 +761 78 -.5602954539897783 +769 78 -1.6245425869211396 +774 78 .32854078168280754 +816 78 -.17545031078399428 +821 78 .13656650314718619 +866 78 -.3119874572547957 +868 78 -1.4102236110265016 +879 78 -.5686846018823485 +888 78 -1.7748812030836163 +893 78 1.2961959615432463 +896 78 -1.33250978579066 +913 78 .030156579773279443 +916 78 .8043000740414461 +918 78 .8315684610660813 +923 78 .1660676359002077 +924 78 .6966823329905851 +927 78 1.373858362133142 +932 78 1.479688377327893 +937 78 -.5648130605308088 +950 78 -.6866891704370597 +951 78 1.291195490670631 +961 78 .47268577662217887 +968 78 -1.081760125292378 +979 78 -.18580581326844398 +990 78 1.0842949500518886 +995 78 -2.7028447203676333 +996 78 -.667846892655617 +997 78 -.15217775587703755 +3 79 .27325601707986663 +17 79 .3884203404721352 +18 79 -.4965301545618842 +25 79 -.9782499335113873 +46 79 -1.446678722321188 +66 79 -.7542762921334372 +68 79 -.31932111798141405 +75 79 -.7285898586047139 +83 79 .3493116561336093 +99 79 .9201392231015406 +112 79 .48403384075923767 +116 79 1.4832632865749733 +123 79 -.026938964474254062 +125 79 .8278626482703447 +150 79 -.3083641379020308 +185 79 .03896186956209914 +191 79 -.2393654938555596 +197 79 .39053850005831336 +200 79 -.070943045041232 +203 79 -.3905171367399154 +236 79 .6308936737235654 +250 79 -1.1566389429742818 +254 79 -1.5386585589884212 +263 79 .7855753751271496 +264 79 -.7377168239835921 +272 79 1.1706554774813034 +278 79 -.38007488791540556 +284 79 -.5685509005867486 +287 79 -.1467251402370333 +294 79 -.07480459994400626 +302 79 -2.1474235325555573 +308 79 1.8226059172605893 +309 79 1.1491155286424428 +322 79 .06703514902124538 +344 79 1.5940976228392763 +361 79 .9252063358293532 +384 79 1.1486619455174165 +392 79 -.03594232895763222 +403 79 .06852384289231028 +409 79 .25494917149492424 +421 79 -.21044725378587562 +427 79 -.3675430571873535 +450 79 .4621065369559428 +451 79 -1.766928148646905 +455 79 -.521643021947307 +474 79 -.8937905845477527 +480 79 .060221301216528994 +501 79 -1.935287457040514 +506 79 .048531778537064904 +516 79 .31977479265635267 +517 79 .367953875693923 +519 79 -.20114751882971893 +565 79 .04310118174470645 +573 79 -.09483569388747312 +575 79 .6644119031454248 +576 79 -1.285372117316847 +578 79 -.1485632566840557 +581 79 -.5448939029646751 +606 79 .7218570845809034 +610 79 -1.0552581909074696 +645 79 -.4030159897179528 +646 79 -.40857499851895684 +647 79 -.7484121031363739 +652 79 -.789787869115985 +677 79 -.7351858726794704 +678 79 -.46754437327182075 +682 79 -1.0010045515915746 +693 79 -.16701241045347362 +721 79 .9970475143582024 +730 79 -.4509610623619449 +733 79 1.282776367035991 +747 79 -.1819820951338693 +749 79 .570286878083939 +760 79 -.04217711593407636 +777 79 .14096475166752898 +789 79 1.153459022239863 +798 79 .5872312846900092 +817 79 1.5620087071213788 +819 79 .36252528997019 +826 79 -.16188285472792302 +854 79 -.34542454907610487 +855 79 .31501647879294287 +857 79 -1.6490880087997701 +924 79 1.865302055681781 +926 79 .24039107004827032 +961 79 -.7812258255622039 +974 79 -1.394461921972809 +988 79 1.0287146505366047 +1 80 -.3573614032825329 +5 80 -.042512668724658434 +19 80 -1.12507638151427 +24 80 -1.0292861062758611 +30 80 -1.3127220832838382 +34 80 -1.0075481154181598 +38 80 .8719621721296225 +50 80 1.5606623543766003 +55 80 .24650541137476073 +76 80 -.6945848090273591 +83 80 1.5572292104977397 +118 80 -.17678548774475134 +141 80 .9682477150262152 +171 80 -.33899508953005164 +173 80 .0784589751897235 +175 80 .11904775590101775 +189 80 .04462135365819994 +199 80 -1.2228529808260884 +211 80 .40733053243285 +230 80 .023159680573374836 +231 80 -1.027111974650125 +236 80 -.5844407230186585 +238 80 1.348022066050293 +293 80 1.5325292838772626 +299 80 1.1981392040176746 +304 80 .9931715896110691 +305 80 -1.002444646026325 +311 80 -1.77018268829234 +324 80 -.39266931852639786 +332 80 .9024283838784647 +340 80 -.39148979770342907 +353 80 2.255947997295799 +354 80 .0347049555849363 +356 80 .90083856581141 +357 80 .03878978247234721 +360 80 .20644355702013423 +386 80 1.0966387588537945 +390 80 -.05066821654908438 +400 80 .31056407493140425 +402 80 .42470607316958936 +426 80 -.705737615273094 +428 80 1.9957486958881605 +429 80 .3204249213459657 +433 80 1.6896426365629644 +437 80 .12294291755615458 +447 80 1.0416501659539796 +455 80 -.37883356585145544 +467 80 -.6090325324647115 +471 80 -1.7601992116633998 +472 80 -.25412192129721134 +495 80 1.346932193591614 +513 80 2.0721859057012715 +517 80 -.5585641153223433 +518 80 -.6005210879696827 +527 80 -1.8788115791321574 +528 80 -.8446977031817968 +552 80 -.8447841194504766 +555 80 .4354337605627476 +567 80 .01743907305304848 +574 80 .28438063080357284 +576 80 .6694169741378024 +578 80 .8158152600959108 +603 80 -.9150441992138959 +622 80 -.8960435450224544 +627 80 .6428649841544194 +630 80 .9355896489854645 +640 80 -.06453709267736474 +648 80 .1973437856924834 +669 80 .855158948124919 +670 80 -1.275809180524004 +674 80 .8871427348771458 +680 80 -1.7720440742348273 +724 80 -.3023473340976563 +765 80 .9021640905972369 +770 80 -.1842405952371798 +776 80 .9643782690372908 +787 80 -.9743846588474985 +797 80 -1.3626385715569111 +799 80 .8180594363371497 +806 80 .4145672976895054 +815 80 1.254134568346531 +817 80 .6194598400187745 +831 80 .495303450732892 +840 80 -1.5816456392149503 +844 80 1.2088070488223135 +873 80 -.6927330436136354 +891 80 -1.2355957784019644 +904 80 .4150359527987979 +905 80 1.1769721947961582 +916 80 .46337528906066183 +924 80 -3.310068117149636 +949 80 -1.4618506040514878 +962 80 .8043734131478665 +967 80 .08512643622745122 +978 80 -.07618444886698245 +988 80 1.5063810840519793 +1000 80 -.09386020898215137 +4 81 .4172527319098459 +9 81 .025681801712732794 +12 81 -.31952546307562396 +15 81 .057778688217235086 +20 81 .21296284542066185 +25 81 2.877480861451683 +34 81 1.4727651090663736 +36 81 1.1184648642131563 +52 81 .8969266810326297 +56 81 .25315818094285775 +76 81 -.11247149166336332 +78 81 .48993215522892297 +82 81 1.3456699594475259 +83 81 .9533028993867301 +87 81 -.27136310757341064 +93 81 .8208902673295256 +96 81 1.14470654928624 +97 81 -.6735563228193139 +101 81 .8854177380366037 +103 81 .38881188471094125 +130 81 -.6609814792415826 +140 81 -.3689986246292544 +144 81 -.717096159230437 +148 81 .7378807470015013 +151 81 -1.9619830090295785 +159 81 -2.341275627471967 +165 81 -.33109979818453333 +172 81 .6904886981821344 +177 81 -1.967964559487778 +185 81 -.224902357524501 +194 81 .4316465814982666 +197 81 -1.9120926554896536 +199 81 -.9163158579542097 +201 81 -2.216744672601588 +224 81 .3852316138011829 +227 81 .7886308281797565 +233 81 .6397297140377258 +238 81 -1.3081892876756247 +248 81 -.506969518497471 +260 81 .19100473103445648 +268 81 -.18934099546047123 +283 81 -.058509735279576695 +288 81 .8764106192962723 +296 81 .01015863907395605 +309 81 -.4037083073790234 +311 81 -1.1979358787377197 +330 81 1.1147266304190506 +355 81 .9315052200089164 +361 81 -2.0932603335874913 +367 81 -1.323494119274149 +377 81 .18432798714238163 +380 81 .32126180816120686 +383 81 -.2072762516523504 +391 81 -.44971660593830687 +398 81 -.5973688530305286 +400 81 .8588555508026757 +406 81 -.00495518709853391 +407 81 .27210668206962924 +409 81 -.35466667342163044 +415 81 -.01179388015811996 +445 81 -1.1585130488864321 +457 81 -.48476370524708334 +458 81 -1.4551668039532646 +463 81 -1.7346919250432566 +475 81 -.48649627995941297 +488 81 1.7607282910495021 +496 81 -1.3438857536019675 +504 81 .9718671386212087 +516 81 .8262275345216955 +522 81 .6796039793612948 +531 81 -.17929008777878636 +535 81 -.053976598764828125 +551 81 .19059382171644906 +563 81 .7770809904017464 +571 81 .6081276430587285 +579 81 -.3439680061760983 +593 81 -.1525520915821526 +597 81 -1.3688667603300082 +604 81 .3992702111751416 +607 81 -.5074108479713649 +608 81 -.9906165580012902 +616 81 -.9784411403446026 +626 81 -.15427167269295503 +631 81 -1.1567433683571129 +632 81 -.08471096244113935 +638 81 -1.3680615342969902 +643 81 -.1377012893555644 +645 81 -1.0095972912193703 +647 81 -1.173474197016961 +665 81 .906907619048764 +675 81 .9917322364767934 +707 81 -.5298103099515287 +708 81 -.7085405762410822 +710 81 -1.3532980480470007 +711 81 -1.8059572587548278 +716 81 .9786943901876135 +752 81 -1.0778287341536859 +757 81 .34133029308952356 +783 81 -1.6257152018872916 +786 81 -.2415636500801068 +799 81 -1.3777050090318124 +813 81 .961046595310272 +848 81 -1.1056855600152058 +849 81 -2.293873169950676 +861 81 -.23991494244031925 +881 81 1.1063964465535707 +887 81 1.3376830488874165 +890 81 .3564184780452498 +902 81 1.2537715285077027 +907 81 -1.14676018246208 +941 81 .8506270256798064 +944 81 -.4139083496704454 +946 81 1.5969432129922077 +957 81 -.1595874232085973 +984 81 2.0481740291539277 +994 81 1.3904267602496128 +998 81 -1.236813650182299 +11 82 -.8390633651992045 +25 82 -.0037155601375555014 +26 82 -1.560443444893502 +41 82 -.20184741810948206 +42 82 .9597421058361759 +50 82 -.02416982783316306 +61 82 2.0779946085816383 +62 82 -.2146115716274667 +74 82 .06763384766600097 +75 82 -1.0023341348156378 +86 82 2.107375678349561 +103 82 1.3887168340297669 +129 82 -1.8005688784952314 +140 82 -1.3324060382488736 +141 82 -.10385231721753832 +150 82 1.5603409395220127 +155 82 2.5990715144344 +166 82 1.390514480512058 +167 82 .22877226569724657 +186 82 1.07026627240041 +205 82 1.2256922232312357 +214 82 -.8658184976226796 +215 82 .11474117612728704 +223 82 1.4060676230703488 +225 82 2.6380724286408825 +236 82 -.6922157530141386 +239 82 3.7572070678460463 +241 82 1.2861553201933709 +243 82 -1.237641809948621 +247 82 1.4640947014961825 +249 82 -.4102382508689572 +282 82 -.03707792025075672 +284 82 -2.882521299104565 +285 82 .9261542903034339 +297 82 1.758876160661152 +305 82 -.11397424338475046 +307 82 .9822878918376281 +318 82 -1.5614553044079982 +339 82 -3.3377222986191035 +341 82 .9095308383204082 +346 82 -.3136592274251455 +355 82 -2.362252106418963 +356 82 -.45726568168498943 +367 82 .05953159378304408 +372 82 .8525980704900529 +395 82 -1.535320310822622 +399 82 -.2770240125772585 +424 82 -.9628501145691243 +430 82 -2.4274858311523384 +436 82 .8760020665587418 +452 82 .2349021450483577 +460 82 1.1329246947603637 +462 82 .46090264145771276 +469 82 .44134479725774434 +477 82 -2.628730815948287 +479 82 -.0327075655441366 +480 82 1.219172982802722 +509 82 .29441474605369256 +515 82 1.364340405306025 +540 82 -1.9274034671052194 +550 82 .5424232076057255 +562 82 .16506926730100896 +567 82 .6165066914766538 +570 82 -3.095667429162527 +581 82 -.9455328699469121 +587 82 -1.5344266433537275 +590 82 -.994134933372609 +594 82 -.5275795415785297 +596 82 -.7962128251203877 +599 82 -.7176841998703976 +607 82 .2845862558525107 +626 82 -1.5252833132306272 +630 82 .8899579917893079 +651 82 -.6477298074697916 +658 82 -.5069375375034592 +665 82 -2.2452657645790244 +672 82 -1.1169802400977331 +673 82 -1.8877269604396185 +677 82 .131531275738212 +684 82 -.6666045586515775 +689 82 1.2115354221221293 +690 82 .7934481001755129 +692 82 2.3673913161881606 +701 82 .42964115575728895 +717 82 .4898980708367976 +722 82 -.1730461120068009 +723 82 1.3804026372488458 +727 82 .46638326622210435 +733 82 -.9524906646623981 +744 82 -1.4324376022816385 +745 82 1.5004952703747254 +750 82 -.6219582347794762 +773 82 -1.3263658730247045 +775 82 .9727502679535789 +790 82 .14730392321076421 +799 82 1.785805780129713 +807 82 .14996324611911657 +814 82 .01071605266682124 +821 82 .41975758513507205 +824 82 -.27858098961711497 +835 82 .4200869122809032 +840 82 1.0051773576462915 +848 82 .11425104958481079 +871 82 1.1593001566569738 +888 82 -.21103790412222817 +895 82 -.15657095035718788 +899 82 -2.090586499260661 +900 82 -1.0483432008729732 +902 82 -.7435994962691527 +909 82 .16992436917581566 +910 82 .8486563470274321 +916 82 -.14044028647239593 +934 82 -.8904241337073757 +940 82 -.14267670296680587 +963 82 -1.4596116077296077 +965 82 .725230605638679 +980 82 2.062005503837851 +989 82 1.5287451987342389 +7 83 .5417865369942256 +32 83 -.04403380434435167 +34 83 -.11092807149659432 +39 83 1.0701270185221405 +56 83 -2.2312858729764984 +61 83 .5344649588067965 +62 83 -1.8321513908791482 +65 83 2.651013417818035 +69 83 1.1162257305388361 +70 83 -.42364019200344005 +85 83 .9765067750158041 +104 83 .590203919424293 +115 83 .9690241085659109 +133 83 .6748033291311983 +146 83 -1.14417857924457 +158 83 .22471710540899756 +162 83 .7315308993752319 +164 83 -.028173989315748053 +172 83 -.4202117724024364 +187 83 4.426373257223753 +188 83 .854902778326833 +198 83 .37117030547071284 +200 83 -.1173518168498009 +261 83 .782726526073934 +271 83 -1.2131792614318302 +298 83 1.1758137880023662 +312 83 .7726094110942133 +333 83 -.3798410685250897 +341 83 -.45886909634181905 +344 83 .4552623259951675 +349 83 1.7307239299890445 +355 83 -2.002995287617114 +363 83 .5799372663793123 +364 83 -.6862420835483664 +371 83 -1.4232304106499531 +408 83 .03155143537827847 +418 83 -.25203273650228836 +434 83 .48214419555161886 +448 83 .2974484833940179 +450 83 -.11528715044443717 +468 83 .0892784073049576 +477 83 -.4464085501834274 +480 83 1.4553022697997804 +481 83 -.6565176186201308 +492 83 -2.030238937548135 +493 83 -.9325857529773719 +503 83 -1.2540681316356541 +512 83 -.8028577913459496 +515 83 .6993257914553467 +564 83 -2.403969194887711 +570 83 -2.3347214560615974 +575 83 2.5905669382539607 +586 83 2.4739600095636805 +593 83 .472782719068311 +607 83 1.6659249622221082 +610 83 -1.3494285786835605 +616 83 1.1614877900897351 +622 83 .22501632569557972 +643 83 -1.1768974242555097 +653 83 1.8789989649977539 +672 83 .7286302973116985 +676 83 -.6485756515430039 +678 83 -.9288581361636469 +680 83 .7564500422360304 +683 83 .6360517132890325 +685 83 .8742498997045727 +703 83 -.19485134492443235 +710 83 .7326513140824762 +715 83 -.6259076638725993 +720 83 -.846863944149837 +734 83 -.10892937177573798 +736 83 -.36646154329045744 +744 83 1.1548701430698742 +747 83 -.24184850553326595 +755 83 -2.892230024916928 +756 83 1.0008749539666346 +769 83 .5186988156973257 +772 83 .24230617964746554 +775 83 .7796066462982247 +777 83 .5059954811899376 +786 83 -.20654496659671862 +819 83 -.94813500697382 +837 83 1.1133425795743523 +851 83 -.04436293247739742 +854 83 1.063199615540316 +887 83 -1.0355838424831079 +899 83 -1.2061836360913705 +900 83 -.924458474286188 +944 83 -1.2138084016219264 +954 83 2.5872115885650913 +958 83 -1.5376024257089647 +972 83 -.5131917413919065 +7 84 .1586922737293448 +33 84 1.6378450110147584 +40 84 .0926714910485817 +50 84 .7223009335759153 +55 84 .8902341428129462 +58 84 -.008131352046529802 +61 84 -1.4833979775067203 +65 84 -1.249857681979614 +109 84 -1.6128535825759647 +115 84 -.934713410187668 +120 84 -.4686707383038993 +121 84 .4158594470541464 +127 84 -2.8778080421233327 +160 84 .8414086771934431 +170 84 -1.2442733614503876 +199 84 -.7031008351710815 +214 84 .7929340147304866 +216 84 .11572593252163393 +229 84 .4247870212237908 +234 84 -.4012133918172723 +240 84 1.7925830984352153 +242 84 -.7098440489320037 +243 84 -.7259000030131698 +255 84 .42618335572755905 +263 84 .6885180129892844 +269 84 .3160793470448611 +283 84 -.3832081285492837 +284 84 .5194394212000164 +304 84 .968774938130366 +308 84 -.8928832247034886 +312 84 -.4175583624166644 +322 84 -.25126013704330735 +333 84 1.4143182753689154 +336 84 -.46576977465475133 +340 84 1.1327252451831125 +361 84 .09966269126506089 +375 84 .06855909113526186 +390 84 .9654800414104234 +398 84 .0836806766389479 +399 84 1.2751499247571996 +416 84 .6635327662952343 +419 84 -.9733990622726395 +422 84 .019924091290375655 +429 84 -1.197044621694488 +445 84 .534934913637381 +448 84 -.24623527491683933 +461 84 -3.089956577452459 +470 84 -1.192344095218936 +475 84 -.20047208168909753 +476 84 .7727560571020926 +493 84 -.5650908936484818 +507 84 .24205251210287543 +518 84 -.8328544388183782 +530 84 -1.5403769372859277 +541 84 .8952798273938415 +546 84 .12339855143412577 +582 84 -1.016862677810788 +587 84 .9004692712475817 +588 84 -.09465529254947248 +595 84 -.22856831642060985 +600 84 -1.3041939732614798 +602 84 -.2654913115093737 +603 84 1.380258361727661 +605 84 -1.0888435972728323 +615 84 .02013364807592371 +617 84 -.5146190747372441 +634 84 .8496960743800241 +643 84 1.382608100898567 +652 84 .23288678715058136 +664 84 -2.373895516018315 +677 84 -.8810456643260476 +704 84 -1.5614019346496684 +708 84 -.481485056185849 +711 84 -.18213294297839766 +712 84 .7694291631006234 +723 84 .9021478659148136 +731 84 -.5398652278312901 +736 84 1.0369548854180017 +740 84 .07012117644828286 +743 84 -2.105261273727931 +760 84 .49911161152273786 +768 84 -1.0301275488763584 +769 84 -.45066786068423353 +793 84 .4149612923032861 +795 84 -1.1862115203816237 +800 84 -.8282712461325067 +818 84 -1.636741598921347 +854 84 -1.4272475306207018 +884 84 -.5431656309260197 +893 84 -.7003775172069753 +904 84 .41861005954782277 +906 84 -.7421409204773417 +909 84 -.7290361429557024 +915 84 -.4837134978812056 +917 84 -.11195436080717659 +927 84 -1.070875973366807 +949 84 -1.1255826125616843 +960 84 -.6314199425992183 +965 84 -1.0071555534305352 +970 84 .16908351373463143 +976 84 1.8287896447304852 +978 84 -.8369286968700113 +979 84 -.16620346098286432 +981 84 -1.2502428808603776 +10 85 -.3330455813285108 +13 85 -.6514194741293058 +14 85 -.023776090264009397 +16 85 -.6499315764932921 +20 85 -.007884750912557241 +35 85 .6062797815124858 +67 85 -1.9078260981631856 +77 85 .5677689225926744 +81 85 .4278510923380882 +89 85 -.8517654400158853 +108 85 .8442029159662648 +111 85 -.8679029831347667 +116 85 -.6863266436636941 +117 85 .4075840036406491 +118 85 .5703197112378083 +121 85 1.0934105818033468 +126 85 2.7333861837363393 +138 85 1.2606082768000948 +164 85 .3695261856734512 +166 85 .23439380214558914 +168 85 1.1837168565228227 +173 85 -1.5253524240817737 +200 85 1.7527351195117589 +204 85 -1.034689897658036 +208 85 -.16305379920043134 +211 85 -1.5675470545613384 +215 85 -.5130357603004466 +234 85 .26118981780761413 +235 85 1.4263739710195633 +252 85 1.596602475209027 +256 85 -1.6243216535286915 +286 85 .3755173120067133 +295 85 .9635778585966024 +308 85 -1.3101163309107007 +322 85 1.2780639536579481 +331 85 .3767263771051559 +337 85 -.3435922439747501 +353 85 -.7285778296323473 +357 85 -.3389167780422453 +359 85 1.1649717829582458 +360 85 2.8772261234653254 +368 85 -1.0394392523279277 +370 85 1.1549900307462568 +378 85 .043573882731337055 +382 85 -.5556007556615071 +384 85 -.10674414015634867 +393 85 -.3684428147065464 +406 85 -1.8663201372344447 +410 85 .551730391642098 +419 85 .4042233977104542 +420 85 -2.5217051985155465 +436 85 .46604371969391667 +448 85 .22371809985786367 +450 85 -.001097306375711267 +457 85 -1.2768253355322994 +459 85 .041792001461163325 +461 85 -2.0410885612861707 +476 85 .6443139501000426 +503 85 -1.614752916677766 +505 85 -.49574569615888875 +515 85 1.394568208114094 +522 85 -1.2505627812576698 +531 85 -.09575222540639029 +533 85 1.0025412577250359 +540 85 -.5853618753911423 +550 85 .8865675080427392 +556 85 -.8993658131548854 +558 85 .0869675887023472 +570 85 -1.3926522627979159 +579 85 -1.50739596126875 +581 85 1.0617541722695185 +583 85 1.6922805318191978 +606 85 1.495269010284599 +616 85 .6382925886745763 +617 85 .47102185289126264 +625 85 2.1812243729617844 +648 85 1.1473449896868855 +661 85 2.062935569215584 +662 85 -.8453787029245462 +681 85 1.0212740886796103 +698 85 -.03725336497204766 +725 85 1.197504913590368 +745 85 1.4360314857425598 +750 85 -1.0711339475329562 +766 85 -1.257573980805279 +790 85 -2.5691756154807934 +799 85 -1.0325143976588287 +813 85 1.1443716602739007 +817 85 1.0893803071258261 +828 85 .3425572398653771 +854 85 -1.6721166484471541 +857 85 2.353196753978147 +858 85 -1.1662043654388348 +874 85 .7848733414118607 +909 85 -1.435381951339086 +923 85 .36491826199332383 +925 85 -.7062175805680706 +949 85 -1.3222418702621948 +959 85 .05865202599064498 +962 85 .9713174348297272 +13 86 -.7710915685089202 +18 86 1.4641899142246302 +65 86 1.724093871213153 +90 86 .9985967247016794 +102 86 -.42967588541095725 +105 86 .8932783259496053 +108 86 -.9155263906714628 +109 86 1.3789355870816848 +141 86 -1.892422663220648 +148 86 -.5302241696988745 +154 86 -.7552108324233896 +165 86 -.4813030607818042 +180 86 .018924616570993813 +183 86 -1.2927836699269513 +193 86 -.4329551614206763 +220 86 1.5427413923744215 +229 86 1.6402022265992002 +247 86 .4434687753674794 +257 86 .4300176629671164 +269 86 1.3071632425076847 +276 86 -2.075834553426364 +302 86 3.6579556359128995 +306 86 -.4843267580821405 +315 86 .9962715987428931 +341 86 -.4201876994832701 +343 86 1.8043200470375547 +346 86 -1.3213834678530996 +347 86 .05739670916770083 +359 86 -.25269233439925365 +375 86 -.7430100913433935 +378 86 -1.0571625581232436 +380 86 .9839678925507424 +414 86 .3151556132426703 +432 86 .14978089120509908 +463 86 .11623213917898288 +466 86 -1.5182543211339532 +470 86 1.0223271081635714 +473 86 -.23838895795761486 +474 86 2.3414257357348913 +478 86 .5606476709042514 +482 86 -.913128357376642 +495 86 .04233837756690234 +505 86 -2.52488592796413 +518 86 -.35332660722042 +528 86 -.3022871144743339 +534 86 -1.6125217179653977 +550 86 .4942991086369185 +562 86 -.2542046930985617 +571 86 1.319031599235884 +581 86 -1.5814864143521947 +582 86 .020939392540037002 +583 86 1.1494382859987267 +604 86 .7477696000637263 +611 86 -.13489233403527248 +619 86 -.6691553346553059 +620 86 -1.5626307790037832 +623 86 .12754396783909414 +638 86 -1.609868974383573 +641 86 -.7945027009458747 +647 86 1.3581139452894537 +648 86 .16101070892952496 +689 86 -.8541590194606031 +699 86 -1.1441180413472696 +703 86 -.8324633767007458 +712 86 -.13471152610975382 +721 86 -2.112039929188567 +727 86 -.24553210311604082 +728 86 .7054863562810101 +737 86 -.007579923684620904 +747 86 .15395715459515155 +749 86 -.6884936920263223 +764 86 -.11008660649758009 +779 86 -1.6851420464192988 +795 86 -2.526764790676959 +814 86 -.7881216182513254 +853 86 -.36792306699696564 +855 86 .4999766687095595 +860 86 .5365923407957348 +861 86 -1.0585226497242985 +867 86 1.865835394450138 +870 86 .6386905518853335 +885 86 -.9803416841818767 +932 86 -.09335825107992407 +954 86 .4934070615993189 +964 86 -.3841447950595792 +972 86 .45872942898937835 +973 86 -1.0425819643105652 +981 86 -.09535139031410328 +30 87 -2.228675341855869 +35 87 .37878421621235464 +38 87 -.8433560217315914 +42 87 -1.5616368343810794 +88 87 -1.2086017769280792 +98 87 .3611539857960668 +103 87 -.9232394195566176 +110 87 .8549426292721567 +123 87 1.4185002624175844 +124 87 -1.4048871407071717 +129 87 .059890843523448575 +140 87 1.4399722798061099 +147 87 .30026316670201475 +170 87 1.6416813861606216 +175 87 -1.3740718634706486 +178 87 .7971201735886697 +188 87 -2.737735241942013 +189 87 .7666668285873921 +191 87 1.6093714212838663 +201 87 -.784963938383891 +220 87 -1.0349923646679833 +223 87 .5926926481232357 +230 87 -.1168283702270688 +246 87 -.8654843016951296 +247 87 -1.4746663396950912 +249 87 -2.1242429837437595 +253 87 .8751840003046856 +271 87 2.2443338978799834 +285 87 -1.8886333646848463 +286 87 -1.6306511503396166 +298 87 -.5199821064103904 +317 87 -1.9827619071807434 +337 87 .6835851545173746 +366 87 1.0305017199097797 +392 87 .6841353862189968 +399 87 -.40691652308236903 +400 87 .5626439313572248 +418 87 -.3399167883754235 +423 87 .34535123616107427 +434 87 -.6335689516026323 +449 87 1.0386490064787752 +486 87 3.0731578698208963 +487 87 -.10931100281890971 +495 87 1.0949303587417618 +513 87 1.2807558657494456 +524 87 -.12997801171390272 +525 87 -.6289669649126662 +530 87 -.7670430723109561 +542 87 -.9821417673661781 +544 87 -2.181677842559093 +551 87 -3.340946135539138 +578 87 1.5188537979671446 +588 87 -.28394321147931834 +613 87 -1.579226947653403 +619 87 .973598996132035 +635 87 -1.373756748405667 +638 87 -.05567838599505791 +640 87 -.8830212178805793 +657 87 -.07717378637614508 +675 87 -2.1166290513207464 +678 87 .19773765423245152 +687 87 -.26350706522347633 +693 87 .03615408349092934 +708 87 -.2937138905337897 +718 87 1.4032438236730758 +726 87 1.9310713473623227 +735 87 .24166032241913293 +740 87 -1.5749178382365046 +748 87 -2.885227395520146 +754 87 -.5977550441650439 +772 87 1.4043811828942485 +775 87 -.7650792521156528 +797 87 1.6917426616922078 +803 87 1.207814397075182 +817 87 -2.030569365676586 +821 87 -1.362852558393954 +826 87 -1.191447277301501 +836 87 -.5484128122487815 +857 87 -1.9381274134075916 +867 87 .008406633037712774 +893 87 .7379473224131348 +900 87 .9751714426784902 +903 87 -.23417476659148662 +904 87 1.3104167774029742 +928 87 .07087957278527514 +959 87 .5215732403215423 +960 87 1.951837786850253 +962 87 -.6331610572808533 +970 87 .4504775949961628 +983 87 -1.1643534952742414 +984 87 -.34810854286862725 +994 87 -1.0520762766612097 +999 87 -.9115863128937436 +5 88 .9635487641412909 +13 88 -.27461870921808185 +15 88 .2987197055353105 +16 88 -.07227617913641252 +53 88 -.388454335735834 +57 88 -.2802370171331273 +59 88 1.0517400983150322 +60 88 .09699986282629365 +69 88 .21980089990850332 +78 88 .362177942101478 +81 88 .00348613992841864 +85 88 -.019268221410424904 +95 88 -.5584951865238197 +110 88 -.6568548460979046 +121 88 -.32800557829752824 +135 88 -.3379924682246995 +172 88 -.08899816539117031 +174 88 .9123505045980802 +191 88 -.6264266542316227 +235 88 -.03294595454431354 +256 88 .4448240372416624 +258 88 .6926905803206591 +261 88 -.09257895069179425 +266 88 .3130118007742825 +280 88 .9386031048713529 +284 88 -.6008585399639796 +288 88 .03656091428644642 +290 88 .19191550962193166 +299 88 -.29923405452301666 +311 88 .8683179450711463 +408 88 -.1626817715588739 +422 88 .13759770556906953 +430 88 -.5254902568897784 +431 88 -.2926193516983208 +447 88 .6056586699198311 +460 88 .2741762525666104 +462 88 1.1151771070736882 +464 88 -.8347689278431127 +466 88 -.05154725425473376 +468 88 .3458458845167302 +479 88 -.23254402358285145 +480 88 .12719808824411874 +486 88 -.5480049916320886 +499 88 -.08590059365015221 +502 88 -.14386329445293058 +508 88 -.05267871015526952 +511 88 .056756837353979975 +516 88 -.3874202955225937 +530 88 .8475456408109403 +540 88 -.22090334350538535 +554 88 -.5357248530958371 +564 88 -.8200711289939027 +571 88 .08692189720140568 +601 88 .16937224602709594 +605 88 -.1450383448604905 +606 88 -.25358404886987773 +621 88 .21819138165938962 +625 88 .368599806013756 +634 88 .5476449928642747 +641 88 -.4343803859782018 +645 88 -.2624115459273727 +661 88 -.5656768050789582 +684 88 .6069776142531053 +695 88 .45457614147229813 +699 88 -.0907626377074786 +707 88 .07956951087198459 +709 88 -.19104014446815398 +725 88 -.768674721525175 +735 88 .2018043701849482 +737 88 .14247656564970518 +754 88 .3593074202048976 +766 88 -.43094155193944733 +767 88 .08251514861191842 +776 88 -.3849118949808947 +779 88 -.31117248428205113 +789 88 -.3410143967597864 +790 88 .2355523771888905 +832 88 -.006336198283914171 +864 88 -1.1907219921885017 +868 88 -1.2834844008763675 +873 88 -.7709291095855324 +889 88 -.5914755838164554 +891 88 .23830504837121816 +912 88 .7926880644876286 +919 88 -.21267403192490525 +928 88 -.44777992553760115 +933 88 -.5761754804666073 +943 88 1.3119930991619626 +961 88 -.40662124846001557 +978 88 .25847432214090854 +979 88 -.11283611543115982 +983 88 .4572152259284159 +987 88 .4571172330244653 +991 88 1.0216029409401521 +996 88 .008138121545217807 +998 88 -.02210860814781449 +3 89 .630203806573062 +16 89 -.16173210037770244 +19 89 -.7298077841331583 +21 89 .6122314789917697 +32 89 -.40603466872326044 +37 89 1.04759607489002 +38 89 -.7988261468071087 +41 89 -.5521904469457922 +42 89 .6263156461957605 +43 89 -1.8058491569062454 +46 89 .32603611349902406 +47 89 .470998476984054 +64 89 -.5148166841474167 +85 89 -1.8817955106744115 +102 89 .8137599652530237 +105 89 .3273936517897984 +112 89 -.47875862448641787 +116 89 .10847804770776656 +128 89 2.245306580941449 +139 89 -.48778253229498153 +155 89 -1.072063162281457 +167 89 -1.30054573273311 +169 89 -.7960851211707576 +174 89 -.6067907050231205 +175 89 -.5299548385058663 +179 89 -.4043289775609347 +194 89 .4148963963734426 +222 89 -.004707692490311527 +252 89 -.4281460356370721 +263 89 .8120425697181678 +267 89 -.2900971397855881 +294 89 .9263479113639641 +320 89 -.6617322783524254 +339 89 2.2289346837022923 +345 89 -.06300424282958274 +346 89 -.1575574554382509 +363 89 -.9399767033516828 +375 89 -.045006817006057534 +376 89 -.45712067448670896 +385 89 -.7155242921838704 +402 89 -1.2168843602868937 +406 89 -.7488119087027818 +426 89 .4369172682462901 +446 89 1.5216733528883406 +456 89 .430106317405716 +465 89 -.1535446259793782 +468 89 -.5364090471019818 +473 89 -.45033731288592277 +474 89 .8244302971031786 +503 89 -.6384669782539865 +507 89 .28327608449774483 +509 89 .35608641128057056 +512 89 .8219619056411431 +528 89 -.16702505908682236 +546 89 .39349816245985253 +549 89 .08903024645718771 +568 89 -.3443281259231593 +625 89 .4554678325430342 +629 89 .2331668139784523 +635 89 -.49789560404462857 +676 89 .7602107080862545 +709 89 -.11885118623811684 +721 89 -1.1373333714236253 +740 89 -.1693088595226696 +768 89 -1.0601768987383282 +771 89 .3917696799738282 +801 89 .396154438728814 +803 89 .14952665444250937 +804 89 -.0070010020992025135 +806 89 .6378415953971172 +815 89 .48373132302602373 +826 89 1.1297205010863465 +849 89 .318584583236095 +902 89 .13230022187364365 +907 89 .2390726000473798 +914 89 .21722934364027788 +915 89 -1.4285353843671176 +916 89 .012017426621932503 +918 89 1.7620181903119398 +929 89 .5514502297227395 +937 89 .8913552984361097 +945 89 1.8598830249547946 +965 89 -.1644518849954055 +989 89 -1.3493000621670803 +995 89 2.6354299269687993 +998 89 -.814990053491412 +4 90 -.1404672184747886 +5 90 1.0419896220873448 +8 90 -.7889801771060541 +17 90 -.11000881384131576 +18 90 1.5388405626753803 +21 90 .4136961781309969 +30 90 1.1818614259415796 +44 90 .5489105372368435 +46 90 .18409403895795612 +47 90 -.05351787247603401 +85 90 1.9202182053777488 +86 90 2.221352702285861 +103 90 -1.3602783672004255 +116 90 -.5866133935026412 +154 90 .8835671112738646 +170 90 -.29628874818858897 +172 90 -.6644998908163157 +185 90 -.7908354628434386 +216 90 .29581766894071937 +228 90 .33838354936369913 +231 90 -.039741662710607153 +276 90 1.9663873609936835 +290 90 -.19195693783172635 +312 90 -.8924592089824748 +329 90 -.498142723481963 +354 90 -1.6716175283411638 +372 90 .43548996658433897 +376 90 -.5847531192001509 +378 90 .1396325964648889 +381 90 -1.2350050673797717 +382 90 1.0165731305684713 +394 90 -.04417929604851316 +399 90 -.9394901422450781 +400 90 -.4973847558082934 +402 90 -.46054465871347816 +404 90 -.6615522919611438 +430 90 -.9257129685275141 +434 90 -.5565179035371096 +435 90 .572907292172399 +454 90 -.27569282037056386 +459 90 1.6486871009884094 +463 90 .7538208406548882 +467 90 .12160609763468645 +469 90 .14264745721931466 +472 90 .35841885227389003 +483 90 .4817073254290537 +508 90 .07430576964482834 +518 90 -.4721439526568115 +520 90 .6819841379208361 +532 90 -.405693037040022 +541 90 -.5767307744933756 +550 90 -1.897557235131086 +555 90 -.6559779899668453 +561 90 -.24710353547956806 +563 90 .17664772900610393 +564 90 .208969927786698 +570 90 -.7388217180729997 +587 90 -1.0262238330073141 +599 90 .8344804154585188 +613 90 -.8213529695536789 +630 90 .014830155515978036 +635 90 -.3269303512791623 +637 90 -.9561159140489692 +645 90 .4114996429885334 +651 90 .1707561025754383 +659 90 -1.3284469065721172 +695 90 .20833499140573164 +701 90 -.5340652599088778 +703 90 .6083212068798678 +708 90 .6217074590466315 +734 90 .2980958473281145 +744 90 .23419175503919334 +745 90 -1.3035588837636287 +748 90 -.25200998506953665 +750 90 -.07191304650540858 +756 90 1.0899758036185738 +757 90 -.6127565458563445 +762 90 .20675964088976723 +769 90 -.6670783681551465 +813 90 .005864008686235989 +815 90 -2.3341477477677666 +816 90 1.415205584885191 +824 90 .24389667660094402 +835 90 -1.2574014039408095 +842 90 .1330497726347074 +844 90 -1.8032570959083456 +851 90 .3074272239392055 +866 90 -.1177952934115111 +869 90 -.048444077323772705 +871 90 -1.004671445367038 +878 90 -1.0519255773377512 +889 90 -.5785313749537008 +901 90 -1.0719115549581082 +913 90 1.034194846793815 +931 90 .11022185448325234 +947 90 -1.4327651390263578 +961 90 .7099680604656485 +968 90 1.2177253321544361 +970 90 -.9544493175453512 +971 90 .15556142666913148 +976 90 -2.4531109733258325 +979 90 -.30465439924635246 +981 90 .6163508453268621 +986 90 -1.9578416261743958 +989 90 -.9780242448580654 +10 91 -1.5258588513108653 +22 91 -.061571367729615356 +28 91 .42544887517484586 +51 91 -.2871500167016905 +54 91 1.2281545272557464 +56 91 -.9126432281958609 +71 91 .5165172813899349 +78 91 .018305783651845806 +91 91 .4580720708210767 +93 91 .46817626079271035 +106 91 .33981826623016986 +133 91 -.18589333901941785 +161 91 1.1985437052299004 +184 91 .5998106977884831 +204 91 .16846358004808706 +212 91 .864060220041846 +216 91 .3361927757685355 +225 91 .745903886054987 +228 91 .47348963703370206 +235 91 -.3437064890584223 +242 91 -.28600384023006276 +282 91 -1.1762350060926388 +286 91 .584813452119352 +293 91 .7990876780506586 +296 91 -1.0650125392200953 +308 91 .44210746886979746 +311 91 .7262685229282788 +318 91 .5485806812332571 +320 91 -.28385404600936903 +322 91 .4071571078390639 +350 91 .26880191921115965 +368 91 .5206904520798493 +372 91 -1.5741868280560722 +376 91 .09689534489567125 +377 91 -.39002539667216013 +403 91 .41460968514452334 +411 91 -1.293379433939929 +412 91 -.5532856378986085 +424 91 .2497205230586106 +428 91 1.358001664553593 +439 91 .42222524373548054 +443 91 .27585974355901643 +447 91 .2908049354989877 +496 91 -.6213362096840249 +497 91 -.47957498215566136 +507 91 -.10152257793529776 +516 91 -1.267163706549456 +537 91 .4864125695407666 +559 91 .055030987929605035 +571 91 -.3921072262515819 +579 91 .8230036922936472 +581 91 .12022471563726536 +595 91 -.7652977035732303 +602 91 -.587757244138253 +605 91 -1.6470815541359536 +614 91 .5847123682345514 +617 91 -.10787124331691449 +662 91 .8271980381030803 +666 91 .8732156038693756 +668 91 1.7205210401179722 +676 91 .09907275597485662 +706 91 -.61929571185638 +710 91 .8658073252966063 +722 91 -1.2160995087531685 +727 91 -.2504556176721986 +728 91 1.1944240376820343 +731 91 -.6111594861978598 +747 91 -.45509591514243086 +759 91 -.6972613914697932 +771 91 .8930818129976117 +788 91 -.3347253916815525 +789 91 -.7378916067561911 +800 91 -.16585459984444634 +801 91 -.3026764312536892 +807 91 .49792455361902543 +808 91 .9307516707431946 +814 91 -.05547168148200171 +826 91 1.4615223606453132 +836 91 -.051399681733821534 +841 91 .7422093626554711 +853 91 -.8655798364510949 +861 91 1.9953653477732707 +894 91 .2841141686959835 +913 91 -.2562595428850297 +920 91 .7886184002421648 +926 91 .38631623610828325 +935 91 1.4580173684445705 +948 91 .6403189741679393 +955 91 1.3670332365229216 +956 91 -.12703538643034584 +961 91 -.6591550393018886 +981 91 .01644210320690282 +991 91 1.2067702084871348 +36 92 -.8314986988870438 +39 92 -.1988675825144179 +42 92 .5281709157732636 +44 92 -.5038376898577535 +53 92 .640634511844535 +67 92 -.5460538302570088 +74 92 1.1713560339311357 +77 92 1.7026156520691909 +84 92 -.6575372691841956 +93 92 1.246403165911745 +108 92 .4973728590081351 +117 92 -.435540431549953 +124 92 .49486688817452007 +127 92 -.19950379392185189 +135 92 -.09517660148237359 +147 92 -.4369558712516105 +157 92 -.7412438482057907 +167 92 -.11841894509624204 +174 92 .9455401752289678 +193 92 -.11182966268057204 +199 92 .20883411868301183 +204 92 .40734441611898453 +211 92 .5001562159406975 +240 92 -1.191532690600172 +253 92 -.6878416997106536 +277 92 .6837743352375765 +282 92 -.9544926044597157 +283 92 1.1743100396045374 +293 92 -.05073760345446561 +294 92 1.5015959810154293 +299 92 -1.2463392724792286 +322 92 .7107704725084554 +337 92 -.5743256288422337 +343 92 -.4253665954620891 +347 92 .187014915507304 +358 92 .161044776640235 +374 92 .6545329430029212 +382 92 -.39496347269899357 +383 92 -.06725761820801791 +386 92 .12075594303485634 +395 92 .2827703482918695 +457 92 -.4809406749763723 +478 92 -.32123322453848596 +488 92 1.4641306010074229 +490 92 1.4131496179414766 +496 92 -.09176575717926069 +511 92 -.9426532446447504 +532 92 -.13527830643611174 +535 92 .250810557086742 +539 92 .4002642463513134 +547 92 .924680841646145 +549 92 .31118518519416305 +556 92 -.34504483626280125 +564 92 -.5917614618333968 +589 92 -.4091021432296486 +607 92 .5666212789572314 +611 92 -.20386522014773717 +614 92 1.0245536105224864 +622 92 .0560937372818423 +637 92 -1.8536629671568723 +643 92 .5106612181228068 +648 92 .43129430571971095 +661 92 -.553352779255436 +663 92 .21774178347390624 +711 92 .49076865079151705 +712 92 .4321207963898218 +723 92 -.2830708978223082 +725 92 -.37598541356756476 +747 92 -.9418640342787248 +752 92 -.08457675384233235 +755 92 -.943272718896163 +759 92 .08233296078290218 +775 92 .20368691442166528 +793 92 -1.4538279927478035 +804 92 .105773793439003 +810 92 .6496940322096338 +822 92 -.5584645637675036 +829 92 -.19296489740164646 +831 92 -.7728076007774064 +871 92 -1.2027550503681717 +872 92 .4542900359905855 +902 92 .2743872880265116 +903 92 -.3276233657414343 +905 92 -.1484843272741648 +910 92 .37653274593233593 +930 92 1.1086621089927968 +937 92 -.13843156703784118 +947 92 -.5079591148779425 +954 92 .7111094323874434 +957 92 .3850653095949925 +959 92 -1.3108935546098406 +960 92 -2.432088281831742 +970 92 -.6373338474135902 +974 92 .3510854579525906 +976 92 -.48861323480806973 +982 92 -.17235383996009773 +988 92 .18555031159620264 +992 92 .7106301401711387 +1000 92 .0340039085018983 +12 93 -1.122592501477699 +29 93 .3333197250034817 +42 93 1.0987678458666408 +51 93 -.13588321184540172 +64 93 .43721298468039055 +73 93 -.46549622631029486 +74 93 -.38842993052387553 +82 93 -.32734222360770526 +89 93 .10564002084154642 +90 93 .5861091616430683 +92 93 -.9747197538476169 +93 93 .2565721783108728 +94 93 .20584376643637523 +129 93 -.22561367854288544 +144 93 .9046453682993738 +148 93 .4459045491341105 +152 93 2.000860146786269 +156 93 .3406905702925862 +161 93 -.3936481295898292 +164 93 -1.0565791849867656 +168 93 .9582135638214695 +173 93 .6344329475485914 +184 93 .5976731313786506 +196 93 .5574917875315855 +210 93 .515298590732294 +232 93 -.1515279266092457 +235 93 .9168646758134622 +266 93 -1.2285641119492492 +268 93 -.48480170464774713 +272 93 -1.7287773186670266 +280 93 -.028980216489348093 +294 93 .20252931508438396 +303 93 -1.2668871463794131 +334 93 1.4822813213587276 +348 93 -.9277412260709903 +350 93 -.7058707162239638 +375 93 -1.3468013085898016 +383 93 -.7386985569292454 +394 93 .2816881746949659 +411 93 .12526366515350565 +426 93 .9266624644047059 +430 93 -.5694766063455072 +439 93 .61134534571156 +442 93 .2743873335729021 +444 93 -.4908949082113027 +446 93 -.15533258476322914 +450 93 .6301208086368247 +460 93 .7569068315245271 +461 93 -.8732713637050167 +465 93 -.42206141932961605 +474 93 1.4726648647365224 +476 93 .32359786298673376 +477 93 .19555148427391006 +479 93 .45938863486106496 +482 93 .130043266255051 +525 93 -.7825944288438191 +539 93 .482401760917249 +547 93 -.760279985935733 +559 93 1.2175785962393417 +564 93 -.08184203086930047 +571 93 .40281962804855176 +578 93 -.10148114112357849 +605 93 .13704364028297705 +609 93 .6585016810149183 +612 93 1.4864684912726602 +613 93 -.06801124743279544 +614 93 .5587763378122019 +621 93 .6918434225060949 +625 93 -.559179442140854 +627 93 .5617481733974855 +639 93 -.3949378988531886 +642 93 -1.51999316243017 +662 93 -.6684556991016971 +670 93 1.057944786099378 +675 93 -.6232142060430349 +678 93 -.5307430682007854 +682 93 1.3415314833061647 +686 93 -.6757291753779646 +687 93 .5408093602840883 +688 93 -.5236912354979983 +699 93 -.16258329180346337 +710 93 .9670272756391262 +724 93 .18862787994267552 +730 93 .439763668209481 +745 93 .09338721991547289 +747 93 1.261821324915108 +760 93 .6288776563201668 +790 93 .070661973570928 +794 93 -1.2258503283679938 +796 93 -.1473498726234852 +813 93 -.0550950481809539 +819 93 -1.6233304221001499 +833 93 .15399510661593488 +843 93 -1.288242683769602 +860 93 .2574279254697672 +862 93 -1.6399309793674137 +875 93 -.48991386436689544 +876 93 -.22799745236881194 +887 93 -1.1115124062027313 +903 93 1.3200422704994168 +920 93 -.6423452899036484 +943 93 -1.2933754800239996 +950 93 .20066108471519128 +952 93 -.49237996675161644 +979 93 .4833981715877826 +28 94 .4641366283977738 +40 94 .5040216895383361 +50 94 .23193418419133055 +54 94 1.7923680149602177 +72 94 -.4188745242328981 +77 94 1.3495664425840646 +87 94 .6508850344795004 +95 94 -.4138929350296118 +97 94 -1.850928301037939 +111 94 -.5230030222659636 +112 94 .12101442877730176 +116 94 -.07503746273025047 +120 94 1.3740467351326728 +121 94 -.6031904661897911 +142 94 1.2466601432078797 +147 94 .5242055999449896 +150 94 -.15191078289865154 +155 94 -1.2784964700592714 +185 94 -.6405188337417634 +200 94 .42346371987760467 +220 94 -.6686660971184673 +223 94 -.34225785994762176 +255 94 .5317725619542888 +258 94 1.0224000029836906 +262 94 .848018757710721 +286 94 .3184419971322984 +288 94 -.08745752456505931 +304 94 .14301891011508183 +311 94 .22782214769533557 +330 94 -.37971238034250643 +364 94 -1.437106759979334 +372 94 -.005122680200319682 +373 94 -1.5603997673557402 +377 94 -.4128038317228736 +385 94 -.34687956111432494 +408 94 .3730661509515478 +411 94 -.3597650896734509 +422 94 .6238619428980178 +442 94 -.7251420541908654 +448 94 .395352932014959 +449 94 -1.8768333576734986 +454 94 .21635795632602323 +459 94 .11171567749093961 +460 94 -.7252380202684771 +464 94 -.24484106837033623 +467 94 -.06349960092224505 +483 94 .8091150097535866 +488 94 .19241358035783873 +515 94 .34967090316308913 +533 94 .5126642122319311 +581 94 -.38494110712271257 +585 94 1.0030462887964577 +587 94 -.20204843882264872 +595 94 -.344598381948296 +605 94 -.4343179998534727 +607 94 -.29758897277655555 +613 94 .6713734212470523 +621 94 .5394967903406165 +638 94 .5957877346655958 +649 94 .33414275708375496 +651 94 1.470497050718814 +664 94 -1.0360646729335086 +669 94 1.2971680627873439 +674 94 .8012464747232083 +684 94 .054186788452036866 +690 94 .699548999338173 +691 94 -.274758860505433 +705 94 .5620770838116745 +718 94 .5367658827259679 +720 94 .09387798829915606 +755 94 .6314843021643797 +769 94 1.3083230444784952 +773 94 .9421983442558766 +782 94 -.2621776309591819 +785 94 .7281726393862199 +791 94 .5413549027179574 +808 94 1.2085608349630488 +810 94 .7021506173946886 +828 94 -.14594227126872392 +837 94 -.5252793622899845 +842 94 .4172539455243442 +877 94 -1.5260582696233218 +886 94 .3274851248034564 +887 94 .055900208750715 +901 94 .6873522969505967 +910 94 .9159730213728837 +919 94 -.46242423839304475 +934 94 .2417765559469453 +935 94 -.554622184716496 +941 94 .8285564266969229 +945 94 1.7885271684114603 +952 94 -1.197809689816858 +958 94 .30258072836766225 +971 94 -.7369204897110058 +981 94 .6821590425308255 +997 94 -.03875795730670267 +1 95 .24767881497470196 +18 95 -.4597149689510075 +20 95 .801770996098489 +22 95 .1546314632112301 +34 95 -.5234786067715668 +38 95 1.1880782185969976 +48 95 1.597308440680649 +100 95 .6797619992684956 +105 95 -.15589506821793325 +110 95 .042489133269191875 +114 95 .3738719042242335 +124 95 .23082954509718967 +134 95 .7464254595613085 +135 95 1.2611955140227424 +139 95 -1.1230870935463837 +140 95 -.7234042707471862 +150 95 .4428545773148492 +170 95 -.4249367343211398 +181 95 .1786306216731411 +185 95 -.6089237608759638 +204 95 -1.2932290078457238 +211 95 -.8334441068313085 +212 95 -2.0091888943525746 +226 95 -.3144058349328104 +240 95 -2.002266283275286 +241 95 -.03683693830082234 +247 95 -.16895306644669747 +271 95 -.7347337606688997 +294 95 -1.4727957440415134 +302 95 1.1425592818420784 +306 95 -1.2273957140097094 +318 95 -1.5959833631949676 +322 95 1.5144830233965842 +329 95 .5282669114579864 +335 95 -.8736754080569727 +364 95 .07501807741948113 +375 95 1.0586851154875672 +399 95 1.0268168459034592 +401 95 1.5025047176996975 +409 95 -1.340391973680945 +411 95 1.3838182562269041 +415 95 -1.0445983309955105 +437 95 .14056289912492675 +451 95 -.1433846820537116 +458 95 -1.1651066117373765 +462 95 -.3402405304333904 +489 95 -1.1059141435166027 +497 95 -.21650189619631943 +498 95 1.2969957943149093 +507 95 .9570748439076584 +514 95 -.06609144867828537 +524 95 -.25772210848260224 +546 95 -.43184101784494344 +557 95 2.2318562537246516 +561 95 .1301937872863747 +564 95 -1.3911951275508816 +584 95 .3046425475618497 +593 95 .538719567877747 +601 95 -.23583313785887502 +621 95 .9554598490429369 +626 95 -.23940025567727405 +631 95 1.7732933334597738 +637 95 -1.6464174684377 +657 95 .5117438359077732 +660 95 2.2031276738796524 +667 95 -1.8867555351596672 +668 95 -1.3974317697895604 +669 95 -1.6268772616908356 +674 95 -1.6345818346005339 +684 95 -1.97678213402024 +700 95 -.9750948201290742 +710 95 -.4212424488885162 +719 95 .4328841480502564 +730 95 .9305920685215749 +733 95 -.9793943342398067 +734 95 -.11174705022375718 +736 95 .49965343307966825 +750 95 -.7302036214084497 +754 95 -1.077911645688004 +772 95 .8337276875198202 +783 95 -.34374678572327744 +786 95 .9383015295773297 +801 95 .6951649897567087 +813 95 2.9641443423418283 +815 95 -.11851265284009414 +849 95 -.7226378064846263 +851 95 2.023405914735946 +855 95 -.7495993678777614 +892 95 1.8507556790532291 +895 95 1.541805226890217 +904 95 -1.5012950569487091 +913 95 -1.191410713527675 +922 95 -.5747294070426691 +931 95 -.7420280329558321 +940 95 -.7127625733762989 +953 95 -1.4705786818387625 +960 95 -.15311450256714632 +977 95 -1.146495201684498 +993 95 1.5760041478198157 +38 96 1.8575785640859537 +40 96 -.7076706976858326 +61 96 -2.2730165207094166 +98 96 -.346027620931064 +99 96 -.45972520277649054 +104 96 -1.0386946283811638 +107 96 -1.26717950478487 +111 96 -.838099677600553 +138 96 .4892402037231324 +143 96 -.8996665867185556 +144 96 .28103992304400094 +164 96 -.948789863514073 +172 96 1.3209162440706117 +190 96 -.28521472594422514 +195 96 .6793909703121226 +216 96 -.3179060112391932 +226 96 -1.3788233116577502 +231 96 1.2358569721041723 +248 96 -1.2625092235124207 +250 96 -.12805367459186862 +286 96 .15194535652258462 +288 96 -.2878159735492902 +301 96 1.888479506838659 +303 96 -1.3794530812037848 +320 96 1.831548731711191 +327 96 .8754275330466462 +334 96 .7983397519677558 +337 96 -.17613225187965265 +346 96 -1.024589981440112 +361 96 2.112012269723572 +362 96 1.286162623087971 +363 96 -.9112899377484011 +387 96 -.47543921204730094 +397 96 1.4439772546406895 +406 96 -1.0597489463803607 +414 96 -.7278597877527887 +429 96 -2.056332520321688 +432 96 -.7576976923819129 +443 96 2.731345342469053 +446 96 -.1674213005124804 +456 96 1.3002759719953532 +461 96 .1245867198297877 +471 96 -2.968808874324015 +489 96 .8523238559017609 +491 96 -2.2504340137148833 +500 96 .6618743396795648 +515 96 1.7254811490531816 +520 96 1.5674811170933363 +523 96 .026770999322238295 +537 96 -.5740551383890664 +548 96 .7870358323778892 +549 96 2.3671829828177215 +562 96 -.1763325824229564 +574 96 1.5786479526603743 +588 96 1.1159445646131176 +595 96 -3.140274486292529 +609 96 -1.978142531324389 +631 96 -.47515780029782934 +637 96 .9101141280993565 +643 96 .9810717231827057 +650 96 -.4777909294286425 +668 96 .9620554470613017 +672 96 -.18467764072977932 +683 96 .12111362250503722 +684 96 .04612277431312357 +690 96 2.067620296143667 +694 96 1.0056181738284709 +695 96 -.3528061973731675 +698 96 -.7462059775441794 +701 96 1.4647259572609033 +709 96 .6768235682678728 +712 96 .4792292760672202 +719 96 -.5475881914684508 +723 96 1.834926936441304 +729 96 -.03940723157042317 +730 96 -1.358972445768905 +734 96 -.7951592298375285 +749 96 1.354018185164163 +757 96 1.1364391889072143 +762 96 .03523205473171692 +764 96 -.5776153918456921 +793 96 .09243126625826956 +815 96 1.5706835260900047 +818 96 -1.163900182455256 +832 96 -1.382135084334778 +839 96 1.5358841459444457 +850 96 -.9749512481256315 +855 96 .8532126835189904 +866 96 -.29250278393543144 +878 96 2.754781712084304 +899 96 1.5421418953436428 +926 96 .21802921168051395 +927 96 -.13742799091494348 +931 96 .6205682511886135 +932 96 -2.60383425838901 +957 96 .2051115553848374 +963 96 -1.0409554895729223 +964 96 .5786409532496127 +988 96 1.9756347213400929 +1 97 -.3462974934730866 +5 97 -2.4688478295486145 +8 97 -1.2809873152127966 +21 97 -.04673200970670763 +25 97 -3.5192077503862613 +29 97 -1.1983745246850117 +30 97 1.0729893343743395 +37 97 -.2978851378571989 +46 97 -1.4102632060398559 +50 97 1.3031192195254937 +66 97 -.01518361570588958 +86 97 -1.1100524451076677 +87 97 -.6518543232325322 +92 97 .30933395483567877 +99 97 -.7751895251156558 +115 97 -.5638738074574574 +118 97 2.428917449968251 +122 97 1.0830370354624423 +127 97 -2.5691757851816197 +136 97 .23028146399646132 +137 97 -.31417179474324447 +140 97 1.0501529537898828 +151 97 1.798275706075212 +152 97 -2.326937649615371 +153 97 .17996008830721888 +168 97 -.6867095886436614 +193 97 -.8936678837082686 +197 97 .8876655105151277 +201 97 -.9723688319643387 +214 97 1.0424904621052207 +221 97 -.43705348079021744 +270 97 -1.4355073759404768 +273 97 -.7147763412543701 +306 97 2.104682183263085 +321 97 -1.2982247186294023 +334 97 -1.862907206841255 +362 97 -.7013556851156065 +390 97 .004523842365913071 +397 97 .2570510971433457 +424 97 .5820438925318528 +428 97 -1.4178035281785881 +439 97 -1.7404597615195416 +453 97 .725285592084034 +459 97 .6574936703213766 +473 97 -3.4975123633292604 +489 97 .025979364497829727 +492 97 .8063943188946474 +515 97 .02949434511754237 +521 97 -1.5615210225107639 +526 97 1.6763251318166226 +551 97 -1.9709331163628578 +559 97 -.44651630388940267 +588 97 -.04410218576978397 +595 97 1.1141163591345749 +604 97 -1.8882666256472036 +611 97 1.454692027913543 +653 97 -.7427556982237 +655 97 .5629127421330733 +667 97 .9434575116903889 +672 97 -.4412541074833195 +695 97 -1.513812748444554 +701 97 -1.7061231034776847 +721 97 2.249118430683144 +724 97 1.8956202922836405 +725 97 -.681427498437238 +750 97 -2.428375190217686 +756 97 -2.2988147788316904 +759 97 1.4654044177545436 +785 97 -.7010106095579881 +790 97 -.0727154943814573 +799 97 -.09860304489099739 +830 97 -1.4271618616538475 +850 97 .028984846289889638 +856 97 -.508650840973613 +866 97 1.7293451649514036 +885 97 .4330069642897619 +893 97 -.007233044233013397 +895 97 .872221856219632 +903 97 -2.585508167623066 +904 97 1.149375652349586 +917 97 .22418870278792036 +918 97 -2.589278261271258 +932 97 .6492102328018885 +936 97 3.042352383185016 +937 97 .31967965452030755 +940 97 1.6655279838711736 +959 97 -.16835378205669918 +969 97 -2.139986776414132 +977 97 1.0480628380705745 +11 98 -1.7347606580516066 +18 98 .42173563534369163 +20 98 -.24537589070184432 +35 98 .7056003341355063 +54 98 1.0620473999427489 +63 98 .023370472470798494 +67 98 .12381511531048484 +93 98 -.3945432549594946 +96 98 .048432929450472756 +109 98 -.6611907447502552 +150 98 .3720069928591674 +153 98 -1.1151292697591175 +159 98 1.409082280747362 +161 98 .2516520204482725 +166 98 .3269813835697438 +174 98 -.8197916136805045 +178 98 -.20500371835301825 +179 98 .031705031262742475 +183 98 .44680807398387323 +184 98 .8115027014936655 +200 98 .8188733444205626 +217 98 -1.0232306600908816 +232 98 1.197685216883553 +241 98 -.1719485564747038 +261 98 .1333522076937 +347 98 -.14138698535060856 +370 98 1.2348111192196813 +374 98 .4451568403994545 +381 98 -.03647465584277024 +386 98 -2.272305314016009 +390 98 -.7620834482282373 +391 98 .909682661245018 +399 98 1.0972248893786174 +401 98 -1.4588015658263713 +414 98 .1910685352543967 +420 98 -.8970692547735949 +425 98 .06617532777053965 +443 98 .12883524093760543 +445 98 -1.1695240022455355 +449 98 .20213205060668907 +451 98 -1.7140320946123286 +454 98 .23232699816930982 +473 98 -1.9928971688542325 +476 98 .6337489026842527 +495 98 -.5055793204187301 +496 98 -.6100814683268057 +502 98 .12991881333641903 +511 98 -.42864164793833115 +519 98 .16785078156403804 +525 98 1.3498032261836654 +527 98 -.238325259347202 +532 98 .4266988912208191 +549 98 1.0514210390229544 +552 98 1.9434553468716271 +556 98 -.013480533521134125 +561 98 -2.5456731079023673 +563 98 .01927889739163196 +570 98 .9855493660473326 +572 98 .44488951860153686 +578 98 .08699951027107132 +585 98 -.9316093623587907 +593 98 -.265767816383363 +605 98 -1.2938189788229253 +619 98 .5996129324881462 +628 98 -.31147238656005094 +634 98 -2.11566433924184 +651 98 1.74856717394588 +652 98 -.5781992702862363 +664 98 .49330358425642007 +669 98 -.04032652612200166 +674 98 -1.1253810743496224 +682 98 .4988008490341737 +684 98 .030494779519093587 +700 98 .09155352535774433 +705 98 2.407104868219728 +719 98 -.36181310599153466 +725 98 -1.4129389542232427 +728 98 1.1549802731201997 +736 98 -.8252940640449828 +743 98 .8307364792892815 +753 98 -1.4858571344391114 +779 98 .3148878366053052 +785 98 -.14041474746713573 +792 98 .04396116475038482 +799 98 -.8432611845758208 +804 98 -.5500177036058681 +807 98 .1418612850356133 +810 98 .24748854708975493 +818 98 -.41041135523939004 +823 98 -.2092459753151734 +840 98 1.1631474946856977 +855 98 .12920025744183306 +857 98 -1.2711550672254537 +865 98 .08828559422025622 +873 98 1.1453058769681066 +874 98 -.7816448485139216 +882 98 -.7532818296532771 +893 98 -1.4918043256206264 +898 98 1.379116548714232 +904 98 -.7335606410745398 +907 98 -1.1213050670706644 +908 98 1.2103742063764422 +916 98 .18242608389844978 +925 98 -1.5820985714159375 +929 98 -.7704588370864666 +948 98 1.5957860097357988 +950 98 -.7440443042760502 +957 98 -1.4952942089523065 +961 98 -1.002491268049958 +998 98 .6082514739059632 +999 98 .9573370798417423 +21 99 -.40810025287110024 +30 99 -.8373358976514677 +36 99 .1954008007061444 +46 99 -.023222192824749 +59 99 1.5062460183608717 +65 99 1.9728746835261286 +69 99 .44826804112090485 +114 99 -1.3256478320945735 +122 99 .6982524812037824 +123 99 -.6640710412421771 +128 99 .9197033680641389 +143 99 -.8270231387524236 +154 99 -.05462797070042821 +161 99 -.41449882826471396 +166 99 -.40327326849094786 +173 99 .24127943125894033 +199 99 .9552124150966301 +226 99 -.17532068797589057 +230 99 -.5042677774869642 +234 99 .7437522044160181 +240 99 -.20947218797851613 +241 99 -.16783286670688846 +243 99 -.09459224773545356 +245 99 -.05809505661117363 +249 99 .6160623186959173 +253 99 .21412808938414413 +255 99 -.5237964538014019 +275 99 1.1684567336435143 +281 99 .8273590170830766 +297 99 -.8454195435498109 +303 99 -.026721487407017748 +306 99 .32311069492655853 +311 99 .7143205207273677 +318 99 .3615964279733392 +336 99 -.35289538434594975 +342 99 -.12900744995810542 +343 99 .26339759185159406 +348 99 -1.4771670238615582 +362 99 .6604450537722384 +370 99 -.8454329812802948 +372 99 -.1064045352973747 +387 99 -.17118531843878249 +388 99 .9462571908081076 +406 99 .23888872535937788 +408 99 .5894878287344498 +409 99 .8382691499988584 +410 99 -.05770422052366719 +412 99 -.16033095488279087 +421 99 -1.5757213381961506 +424 99 -.29595294474961176 +426 99 .024843424218072025 +449 99 .10828666355543196 +457 99 1.3804769353966047 +463 99 .37127621746233846 +489 99 -.09720187230902785 +495 99 1.157662876025848 +551 99 1.3686942551711017 +552 99 -1.5423436759198286 +577 99 .32982228503085337 +593 99 .16490887612488314 +618 99 2.2224847024178254 +632 99 -.03715167351895053 +656 99 1.8139540583519727 +660 99 .020311093481556852 +677 99 1.3249137750434858 +687 99 .3741356824380376 +693 99 -.2934074209705795 +695 99 1.0015847318784794 +714 99 -1.1091043237206755 +748 99 2.1488731714298352 +753 99 .12191537911115352 +759 99 -.6230531535635084 +761 99 -.5971503511890317 +771 99 -.2728776861949914 +782 99 -.832929919959787 +817 99 -.14392060352595734 +823 99 -1.4934790027761846 +828 99 -1.7871209084147268 +832 99 -.8053089290286377 +843 99 .8233449263228851 +844 99 -1.4422249025936982 +849 99 1.7755677092203022 +864 99 .1911527724628224 +865 99 .11059903281529113 +876 99 .9388643953921292 +890 99 .38727296957636276 +895 99 -1.5638057039044837 +905 99 -1.0401142905595053 +911 99 -.6255933790129358 +913 99 1.2384002346777438 +934 99 -.5720391887152602 +970 99 -.23077610799376852 +974 99 .09053074908592801 +981 99 .2848588582042678 +993 99 -.8858457665579533 +4 100 -.5104903222169305 +21 100 -.33623130017465924 +32 100 -.38941876854188684 +57 100 -.6994210683682378 +64 100 1.1463852680675484 +82 100 -.680260856997128 +96 100 -2.072838917588947 +97 100 -2.696652916660356 +101 100 .6237362605187777 +104 100 -.4979247746733356 +106 100 1.0480044806097715 +113 100 -1.364813474657149 +115 100 2.0841900868157577 +125 100 .8530931335002766 +129 100 .33422813248837824 +134 100 .00420743400644942 +172 100 -2.472662830736617 +231 100 1.4705730756423459 +234 100 2.634930763709169 +235 100 .9106933208701153 +245 100 .044148134947555255 +263 100 .0247932185200877 +269 100 -.6775115192455621 +280 100 1.0955909648971476 +282 100 -1.7587060575859639 +294 100 1.8804581623146315 +295 100 -.5035453321536925 +303 100 -.07886087956109675 +304 100 -.28390175095100395 +308 100 .9958792535343179 +322 100 -2.6573992290676216 +350 100 -1.0558170696315563 +353 100 -2.043031811983722 +368 100 2.463220489409158 +370 100 -.019242807477230214 +390 100 .28845619522636745 +395 100 -.9239233063088774 +419 100 .28767968620374157 +446 100 .3234122540547577 +463 100 -.1420773395104775 +469 100 .09638382474998053 +470 100 -.8703838246235837 +473 100 -1.7157989390316128 +475 100 -.6968639325859559 +488 100 -2.1358178963755625 +499 100 -1.7293441468850101 +510 100 .6295101223177734 +514 100 .7246524180908599 +522 100 -.3575199027463103 +524 100 -.1303412154212646 +538 100 -1.1531988789178296 +539 100 1.4816328897845463 +563 100 .14493274905434972 +571 100 -.6865329640821987 +590 100 -.4300504965552061 +593 100 .7652452741157784 +596 100 -.23737451725317438 +615 100 .1677105176476066 +624 100 -.5854037590629078 +642 100 -2.3093559598379447 +651 100 .1704349329043407 +676 100 -.43347242192134655 +679 100 -2.4800412240766807 +687 100 1.1274372958872998 +700 100 -.16759448149276418 +705 100 -.6030108827085927 +706 100 .1459716325938408 +720 100 .12806321899150108 +724 100 .719114618776336 +733 100 -1.151771635111192 +751 100 -.5528582446605628 +778 100 .7056869686007479 +789 100 1.0588947266961686 +794 100 -.7723524100627777 +812 100 .8414199987069766 +840 100 1.9329849125208929 +844 100 -1.0467048814934459 +855 100 -.405098073041145 +856 100 .3896066018214033 +859 100 1.9135704798450863 +877 100 -2.1646441115626893 +878 100 -2.587742409959318 +885 100 -1.1693859342140482 +897 100 .30318354579956386 +902 100 -.01200008082915818 +908 100 -.7663800708955606 +909 100 .9898275930583919 +912 100 2.7613785511781326 +926 100 -.5443889009529832 +929 100 -1.345812426828961 +933 100 -.7848087507685932 +936 100 .22576291921566013 +941 100 -.02573585759583584 +943 100 .7757507934887857 +975 100 -.09588761964508247 +980 100 -1.2490685366299676 +988 100 -3.160233059015313 +1 101 .4819545370651795 +8 101 -.6330038437578679 +27 101 -.8673938884156278 +32 101 .5652393185100177 +47 101 -.10627936236448102 +50 101 .14421227927020971 +55 101 -.4843424671354158 +58 101 -.38805283524637885 +64 101 -.17779055810355512 +68 101 .030874668204463135 +76 101 .05972721280271226 +83 101 -.7459685559348997 +92 101 -.6214340689970046 +99 101 .28098274515125476 +174 101 -.17844442906056496 +176 101 .29221029256159176 +180 101 .009998178887079032 +232 101 -.04999602433400002 +240 101 -.2670666592769566 +241 101 .1454178305197309 +243 101 .2802025688268825 +259 101 -.5023313229087234 +275 101 -.43912258850496894 +280 101 -.0067922337200450045 +287 101 -.385926198234939 +291 101 -.190571483221046 +297 101 .8682048318320653 +322 101 -.22486973490261797 +324 101 -.045959157722464006 +327 101 -.23641128706813003 +336 101 .06561184973949825 +341 101 .401925566643141 +351 101 .3796074745000862 +353 101 -.08745037320847404 +356 101 .14667397619081401 +363 101 .24052559892776135 +373 101 .4799031526893468 +382 101 .43456819628321947 +386 101 -.1997932397589505 +394 101 -.7734629225631855 +407 101 -.1804776044954295 +425 101 -.19311709357179097 +428 101 -.029880648748718888 +435 101 -.47226290999866266 +436 101 -.5506336535647041 +438 101 .5599599370178059 +452 101 -.4446386870844763 +454 101 -.03531911298109469 +521 101 .14023420595102137 +524 101 -.34348564959313976 +538 101 .6024879044176695 +571 101 -.24426096336688885 +588 101 -.4266883921591677 +591 101 -.47749319351503755 +597 101 .260998769815967 +599 101 .29125080096334793 +629 101 .024802449790405953 +645 101 .8119964981043697 +648 101 -.003717414419470943 +652 101 -.3100961302398979 +658 101 -.5266660679975184 +669 101 -.304040632522183 +674 101 -.10868418159913945 +703 101 .15350698512338276 +728 101 -.06442027090654376 +738 101 -.37039993817126804 +744 101 -.3503690352860923 +748 101 -.13840434615120328 +771 101 -.18013147683102582 +784 101 .039667224409218146 +790 101 .6159607015502443 +815 101 -.7414755937300569 +843 101 .27057601699132267 +848 101 -.6788881192494542 +868 101 -.3222163029458345 +878 101 -1.0338670313319083 +884 101 .18929912420366068 +887 101 -.022923114146369813 +898 101 1.0992620846321324 +902 101 -.21604604061315474 +941 101 -.8246390419051249 +942 101 -.01738789899398848 +944 101 .09463849359232296 +964 101 -.15354514336897176 +985 101 -.5085688426872497 +16 102 -1.1519726114279247 +24 102 1.3668678804382224 +38 102 -.6381141462716545 +39 102 -.2814055598745602 +40 102 -.17716052769753088 +41 102 -.8917749551901006 +46 102 2.0420349779661793 +55 102 -1.2970791966377075 +58 102 -1.0311977092439408 +96 102 -.019966813022046073 +104 102 .021673453145530236 +106 102 1.507903060124051 +113 102 .6099552234757627 +116 102 .10454884100678816 +127 102 2.755980205397423 +147 102 -1.4033660734162572 +153 102 .030880062167236412 +164 102 .06042049786921616 +168 102 1.557810238195614 +190 102 -.47767853937322197 +211 102 .40432082884924847 +222 102 -1.0545277168804048 +223 102 .44942892297827086 +241 102 1.8794620277930396 +245 102 1.4987428433840837 +251 102 -1.5242535036724756 +256 102 .44254603940005993 +258 102 -.48857560711081793 +308 102 1.689350641331895 +319 102 -1.2998002259260188 +324 102 2.885929700273998 +327 102 -.3933629883199329 +330 102 1.8377645305832053 +332 102 -1.3188003140922626 +333 102 -.7231218992585592 +341 102 1.014764213799963 +342 102 -1.1003082168985707 +344 102 2.3502338592675867 +346 102 .9594998996911939 +350 102 -.7864471761298223 +353 102 -2.0008028104799402 +359 102 1.390505511601732 +390 102 -.7794229957227996 +407 102 -.810806766436388 +416 102 .9396119690691191 +419 102 2.460645344255818 +424 102 -1.9107689383615554 +437 102 -.6468778971086407 +454 102 -1.4618345749519475 +469 102 .3801622432585824 +477 102 -2.940806308994791 +484 102 -.754925589113699 +491 102 .8018467027488493 +493 102 -1.5712840730769015 +517 102 .32015957951586826 +518 102 1.128294758862798 +520 102 -.5596527835258337 +528 102 -.9591942709465708 +538 102 -.3840691894203652 +552 102 1.4704447199767647 +564 102 -.6099677116026081 +569 102 1.5936098031182455 +598 102 .3059640967798187 +599 102 1.5797990387637977 +622 102 1.4428953524525716 +633 102 -1.3450432458977022 +648 102 -.13423467102455727 +657 102 -.005484958095969494 +659 102 .5179231660491408 +708 102 -.18955861312738992 +711 102 -.5789489359149296 +714 102 -.31067666408902106 +725 102 -2.5555806271677413 +727 102 1.0996819690552873 +738 102 -1.3737891232264516 +746 102 .7228457151057337 +756 102 .5721580939470314 +770 102 1.2383596365968037 +771 102 -.721799647862238 +773 102 -.5630950836575035 +775 102 .9660267104237973 +781 102 -1.872615263351294 +785 102 -1.5330210280038652 +800 102 -.3053362009582255 +805 102 -.3965579153690796 +830 102 -1.3214806773438554 +833 102 .023063887398132244 +836 102 -.19870439510724644 +854 102 .44592453648008135 +856 102 .8313764500423919 +865 102 .3637229694967743 +880 102 -1.029315933247479 +884 102 1.1682768483611568 +906 102 -.44460350368529156 +913 102 .7419267882305515 +918 102 2.094768501487771 +931 102 1.1150008255613506 +937 102 -.6990762317230659 +939 102 1.0530478523829871 +963 102 .6498769510738089 +975 102 -.07804188929214237 +1000 102 1.0084881896518665 +4 103 .05178963701025585 +7 103 .1177641069419885 +15 103 .1557380917053781 +19 103 -.48156558269645516 +20 103 1.1654879772507496 +23 103 -1.2069360204552646 +25 103 -1.180122474587302 +29 103 -.07521410684331044 +32 103 .45761126802951896 +43 103 1.3829459140504141 +57 103 .6004105590698205 +66 103 -1.0933128952395965 +91 103 .6687051987877515 +109 103 -.21175569388051113 +121 103 .7452809236850133 +122 103 -.17326648006113318 +136 103 -.5139173958468218 +158 103 1.2038676359735638 +160 103 .41814181487336083 +167 103 -.6693243991909976 +191 103 -1.1387303524579553 +193 103 .6458126468237887 +197 103 .49060961598392916 +232 103 .7167052839607211 +234 103 -1.419091100037288 +245 103 -.6191304113817417 +262 103 1.3716585298055612 +263 103 1.0036941186759938 +266 103 -.04222121087757541 +267 103 -.7736909853964796 +270 103 1.264268582018915 +276 103 -1.9796289213016909 +281 103 .18654938612944066 +290 103 .08103270384615045 +299 103 1.2236769086138317 +318 103 1.6859044444615798 +320 103 .6942660895288122 +344 103 -2.1028238429525827 +353 103 .35210275407233277 +361 103 1.1419482896825772 +376 103 -2.1603207567754614 +379 103 -.2137005021369826 +404 103 -.14488892625534605 +410 103 .6447335213252174 +416 103 -.9840971481065262 +423 103 -1.2487832923696858 +425 103 -.32551644525101486 +435 103 -1.5950515358189306 +463 103 1.6314462007122572 +466 103 -.7465173385817272 +476 103 1.0274274991173475 +481 103 -.44998803600283416 +488 103 .9180905905402479 +518 103 .5140262120872758 +519 103 -1.4254794560608643 +520 103 .7060243320537314 +545 103 1.896377030266041 +560 103 .2173995356905954 +561 103 -.12196601238720667 +562 103 -.17058152399498583 +569 103 .06779255316661786 +574 103 .5210150266119002 +597 103 -.18505435249104116 +604 103 -.052236313146982016 +611 103 2.198491470111752 +617 103 -.4135607261108807 +625 103 -.43434104322731326 +630 103 -.23250830084036572 +643 103 1.2728778751614975 +645 103 .6666606741005392 +656 103 2.3475894088772313 +665 103 .43081102048428727 +667 103 -1.344234587435784 +669 103 .5205057506362099 +702 103 .9216124417121657 +709 103 -.3014701638663977 +715 103 -.16970622762114035 +727 103 .3597120292096533 +751 103 .027631569417918334 +764 103 -.5405842117243596 +765 103 -1.232218300403267 +781 103 .28120079504207296 +784 103 .12074029200850248 +793 103 1.5571931206071505 +799 103 1.20313724683336 +804 103 .500639509474344 +808 103 -.08866514104531917 +825 103 -1.240401010511181 +828 103 1.4766612633486726 +845 103 -1.2620748263677692 +850 103 -.4715464045927957 +852 103 2.6635290904952105 +864 103 .6776469020305685 +866 103 .15197733159222146 +868 103 1.7170274298535888 +870 103 -.7227518670526663 +874 103 1.3997196833671657 +880 103 -.45908539042115504 +886 103 -.1271728360277519 +914 103 -.5490568455336837 +928 103 -.2334547007102799 +952 103 1.4143711388426834 +958 103 .6723314867110433 +972 103 -.01719060505869979 +991 103 -.27285806389426864 +4 104 -.5106064617654911 +42 104 .26950659024028845 +59 104 -.6362243574414325 +91 104 -.4426552549329535 +92 104 -.6984861568123588 +95 104 1.5712056552512397 +103 104 -1.676731139355484 +104 104 -.7419455977983235 +105 104 -.0829006010212733 +113 104 -.07566700664342978 +125 104 -1.3543243425279454 +137 104 -.0959375374309544 +142 104 .04315712912301342 +143 104 .5585412959957953 +153 104 .6002377742421237 +156 104 .7040651838416822 +162 104 -.9048640790462938 +175 104 .19650838284981992 +177 104 -.41490578451146987 +189 104 -.027437776581686335 +192 104 -.42339721589247703 +198 104 -.9827237909769805 +210 104 1.7854904609144049 +211 104 1.0962280467786996 +231 104 -1.240289686940358 +242 104 1.423352279456086 +243 104 .8154241151910955 +256 104 .2591597464227212 +263 104 -.8394332512589695 +281 104 -1.5814263894543494 +282 104 -.7448715159718097 +284 104 .9008330868374872 +302 104 1.6376608466153513 +317 104 -.09396939577182761 +328 104 1.0316853447221006 +335 104 1.1054037429142998 +344 104 -.9212591988357263 +351 104 1.3506284253294063 +352 104 -.5703578563764442 +380 104 .3030626844773058 +386 104 1.0186802995511781 +389 104 .056520248983179616 +404 104 -.07880803418998995 +421 104 1.3132303878278113 +424 104 -1.1421077763621945 +439 104 -.8689761901782692 +457 104 -.08873107508034413 +460 104 -.1306049847054219 +469 104 -.5084932354693699 +478 104 -1.060592515522711 +484 104 -1.0084416659653597 +498 104 .835780719093821 +503 104 1.4522167887370674 +517 104 -.16643504503544665 +520 104 -1.4372933353271244 +523 104 .18696612369338572 +532 104 -.05358720925636541 +547 104 -1.07296028851278 +549 104 -1.5343454391565208 +565 104 -.8425004334715341 +569 104 .48374318592192966 +570 104 1.48557346110894 +588 104 -1.1555988156071926 +610 104 2.3526150063095157 +611 104 -.20859440877341268 +612 104 1.9536362952889088 +614 104 -1.1798281319766355 +645 104 .7044185954095703 +650 104 .5300927375344362 +669 104 .5424275684351026 +682 104 .3100668022737981 +694 104 .21875523991166 +705 104 .22954209267294773 +717 104 -.5209082116349983 +719 104 -.28945824505736084 +730 104 -.486045484209971 +738 104 .006073307754266295 +748 104 -.5300220158022324 +750 104 .895147932310978 +758 104 .1072824386799712 +764 104 .24536057939112965 +777 104 -.7510661975330115 +798 104 -.16668887815433328 +838 104 1.609360461186595 +841 104 -.02990338375831242 +844 104 .7975124003246673 +862 104 -1.507797949416358 +863 104 -.3631152332695331 +865 104 -.003263195159753547 +889 104 .052535890093270365 +897 104 .27282813268463213 +899 104 1.330966402585363 +900 104 1.1521318978081256 +924 104 .5595320191117019 +956 104 -.3481843100439317 +959 104 -.5721530813259645 +964 104 .30695893076686676 +965 104 .8401138881358299 +968 104 -.98944234962805 +974 104 -.8349138025140947 +980 104 -.04608200769602466 +985 104 -.12985485535635957 +995 104 .4358640163203069 +996 104 -.9158713539315375 +997 104 .5663790602168177 +9 105 -.5469884280519854 +16 105 -.24664172251719 +31 105 -.3017740420872563 +57 105 -.4129688396904713 +59 105 -.09474859721147479 +69 105 -.1758998771114973 +76 105 -.6314929312956499 +78 105 -1.1591919120141791 +88 105 .12183719724587179 +89 105 .09630108094758805 +99 105 .02692232522789101 +100 105 -.6870208376431411 +115 105 -.13482762246172297 +124 105 -.26164729085199434 +132 105 -.20237933188244783 +136 105 .05021555978837358 +138 105 .8426924787904412 +145 105 -.5590952456319106 +150 105 -.12357868884405425 +173 105 .4298076653936188 +174 105 -.34791547103720744 +175 105 -.3595499585219212 +178 105 .06624863727069581 +185 105 .4356699955541199 +187 105 -1.4595943467809485 +188 105 -.24961116706799386 +195 105 -.08820432419644227 +207 105 -.28963700242568646 +216 105 -.473435939751814 +221 105 -.5264770580797512 +224 105 .5559547866235466 +225 105 .9783726037391325 +246 105 -1.4832022577622304 +266 105 -.9045293106798683 +269 105 -.9378524614229361 +281 105 -1.0876619790049125 +289 105 -.715645933242184 +297 105 .7955505162007496 +298 105 -.5470876724347238 +328 105 -.45175852725183197 +337 105 .2771393370331078 +367 105 .13079492206844012 +395 105 .23835364387364155 +396 105 -.44391049656617243 +401 105 .5359869875005314 +403 105 .45655803043404936 +424 105 -.020700623164526394 +440 105 .11394582855846892 +443 105 .13195163657570452 +454 105 -.3085670684344016 +456 105 -.249652091014971 +469 105 .3827538748036097 +476 105 .1534250023678369 +491 105 .4917498437164609 +493 105 .13479463635067476 +499 105 -.22794128154241494 +502 105 -.27544494193594576 +509 105 .948329900225741 +511 105 -.7110047737934461 +553 105 -.017961320166647615 +555 105 .7398701481046621 +556 105 -.6497932784422219 +569 105 .6124475886916748 +575 105 -2.1981404681602044 +577 105 -.9305556473709782 +584 105 .1793456088543854 +643 105 -.03825220663425437 +671 105 .3630367768103149 +680 105 -.47065349362739595 +682 105 .2653176159120715 +686 105 .20674971896752553 +691 105 -.651251771728502 +708 105 -.6938186601015676 +746 105 .44176903466780243 +773 105 .10585110756666465 +783 105 .6553983506774559 +797 105 .43252279543412564 +805 105 .721626371269763 +807 105 .7828685641941104 +811 105 .40606668189684064 +816 105 .028166838821664583 +823 105 .3608756546034021 +829 105 -.5712013184421021 +832 105 .5099792167216162 +843 105 -.378292410201415 +869 105 .30581123329724635 +899 105 -.4095696064254262 +900 105 .40228987624920826 +904 105 .6363663601350257 +914 105 .16065635633857583 +917 105 -.04122891361958204 +937 105 .1050034165669162 +939 105 .5611198494983537 +940 105 .42798934737894556 +945 105 .09719831090399345 +951 105 .030941809875297197 +953 105 .3443020676575369 +958 105 .4300240321541736 +971 105 .07517415382371806 +976 105 .32060516983209325 +978 105 -.4603916003327787 +988 105 -.12163785032524899 +999 105 .5747901647351287 +28 106 .12163133088416672 +45 106 1.4660098558700039 +58 106 .7461958849085917 +59 106 .9168900490372934 +66 106 1.5394738846126679 +72 106 -1.1323823897530363 +81 106 .5441324337719151 +102 106 .49139492176284744 +113 106 -1.3654569416081666 +118 106 -.8952868494362809 +139 106 -.8608109892116662 +145 106 .6952795924834483 +148 106 .346374940640608 +155 106 .2738800266499886 +188 106 .5682545347798325 +212 106 .7345074474207776 +248 106 .15805765103272143 +249 106 -1.4337933368201246 +261 106 1.8861717040640802 +282 106 .17776330108464888 +291 106 -1.3852456160379578 +298 106 -.5912963852624183 +302 106 .7321502940601753 +314 106 1.1413860060701244 +328 106 .4653629812538384 +344 106 -.6994371689658118 +354 106 .011573765041177533 +356 106 -1.2226182073534033 +358 106 1.2922035766758424 +364 106 .37043930992531005 +389 106 -.29214780210226876 +391 106 -1.2281956509230016 +393 106 -.8873232376274255 +407 106 .6660540585937504 +412 106 1.350417897972623 +430 106 -.24979607974355905 +431 106 .24679845223042302 +462 106 -.03640289821452765 +465 106 .6555756070149401 +476 106 1.6529128211727193 +500 106 .4714184147539239 +513 106 .08071757453590442 +514 106 -.15734455060278796 +515 106 -.4079095884936813 +532 106 1.270911171533326 +534 106 .8163180289049988 +549 106 .1298331532842118 +555 106 -.07558017530332131 +578 106 .3278126888653724 +583 106 .5792246200340564 +593 106 -.6774883617946128 +615 106 2.1258322343745224 +621 106 .8248007905237374 +627 106 1.222258396256262 +628 106 -1.3313995838980826 +656 106 -.11929369378428145 +665 106 -.2669830585512134 +676 106 .03660390807009847 +680 106 .58246470826119 +698 106 1.1059314728893106 +715 106 -.33680789166600444 +725 106 .9302026174381517 +733 106 -.16442962461035582 +741 106 -.6889990743192554 +744 106 -2.2794364943252403 +752 106 1.0147935627793447 +768 106 -.5074764570796941 +777 106 -1.0841627917146526 +778 106 1.7251090965094933 +781 106 -.5085374647856119 +782 106 -.7440909264964493 +789 106 .1759968546377167 +809 106 1.7555552285512896 +810 106 -.03631219491766591 +819 106 -.9339328432975419 +823 106 -2.707678747847325 +827 106 -2.0878340877708164 +833 106 -.3698896688499891 +836 106 .9507141285238087 +852 106 -.9956198400233711 +859 106 .04108886404878742 +869 106 -.1816718072309202 +882 106 .15551990921549078 +897 106 2.4087284670200435 +924 106 1.0722791592616474 +935 106 -.2214778282874949 +950 106 -.32369562918354045 +953 106 1.298500471670962 +955 106 -.2318285800750417 +980 106 .7297226997577745 +987 106 -.31456458109760915 +3 107 -.5092475948907998 +6 107 1.048247474886925 +17 107 -1.8855638724187496 +32 107 -.24445668804312273 +44 107 1.0466300470636476 +49 107 -.031708804667323856 +53 107 .33813470822098346 +56 107 2.435932368251804 +61 107 1.6507572021410615 +68 107 -1.4573983796902321 +75 107 -1.2710447853746403 +87 107 -.8801444530089997 +97 107 1.1383565421485613 +107 107 -.26986415959365084 +129 107 .04590795808878123 +135 107 1.6826468126234406 +140 107 1.1851901031084913 +147 107 2.709994345159606 +159 107 2.361161277321696 +167 107 .2776331441696639 +180 107 -1.7814640008453806 +181 107 1.6135209074181274 +183 107 -.7567996672209691 +188 107 -.12240424823974701 +217 107 -2.522954950298119 +232 107 -.8892636816631772 +235 107 -.20156214682464213 +250 107 .3333757089380815 +282 107 .9055449453059761 +295 107 .8948153324486738 +318 107 -.12344388411111784 +327 107 .6170236558998206 +334 107 -1.8832738336163386 +338 107 .4629998163829898 +345 107 -.3030263724931697 +355 107 -1.0389474017033287 +359 107 1.6698736092652995 +368 107 1.1797513479720125 +372 107 1.618291448341848 +378 107 -.5131613309397571 +393 107 -.3360979858895499 +400 107 -1.121765977014385 +407 107 -1.5483474146660248 +409 107 -1.6165935265205968 +421 107 -.1173085920808805 +433 107 .7107735328524103 +441 107 -1.469383510376472 +448 107 .9812576767169269 +460 107 -.12322623997047374 +468 107 .4389694361415491 +471 107 -1.9534792317237493 +497 107 -2.0783117639809934 +502 107 1.3963517239141074 +510 107 .727501039437642 +524 107 -.3442406747157097 +570 107 .024640344247029794 +577 107 .9076182780751306 +591 107 -1.0850846423664005 +593 107 -.6721376352397329 +597 107 .14278925993529673 +603 107 -1.0578927135058966 +604 107 -.6945731175461802 +654 107 .7189793624031602 +671 107 .7311751323631097 +682 107 .32033496173681564 +683 107 .03467088055480069 +689 107 3.027951709682772 +690 107 .04886634006576858 +698 107 .7866037153628388 +702 107 .7003526998764151 +709 107 -1.1359139190142287 +721 107 .6789755870840886 +730 107 -.46631689812766225 +769 107 -1.0683734222124706 +776 107 1.909092704856677 +779 107 -.011810225727197476 +780 107 1.5863398662733963 +794 107 .9605855197552986 +803 107 -.16282238602438073 +807 107 -.5384113919897423 +831 107 .03078485231502784 +843 107 -.7061449055849309 +858 107 -.4454517735692447 +867 107 -.11918920570913794 +872 107 1.7531369149231733 +876 107 .9295992329476624 +892 107 .5427153271331957 +899 107 -1.284785750825535 +902 107 -2.457227303210823 +912 107 .136257475717854 +936 107 1.5265615429666595 +941 107 .30999740974803913 +961 107 -.05040469387384637 +976 107 .12150471852148143 +995 107 -1.7126227132793754 +10 108 .20636190518578618 +31 108 -2.3028185556185403 +43 108 -2.041652850392132 +52 108 .8514995266335401 +61 108 -.24412555308304817 +67 108 1.280766439056999 +72 108 .4078887295063266 +82 108 -.35206331704344496 +87 108 1.0172311793360027 +89 108 -.7344556554050513 +98 108 -1.115152380556122 +99 108 -.8702377389945628 +122 108 -.20146510423242822 +123 108 -1.0300226952729088 +130 108 -.1697070488343082 +131 108 -.11372232002536109 +151 108 .035495458014168646 +177 108 -.3432761818699927 +182 108 .17124311502622405 +183 108 .5329403191375338 +184 108 -1.5787328913057808 +190 108 .09427535046721966 +197 108 -.4272595337567542 +204 108 1.6587128731055523 +220 108 1.164671949687756 +248 108 1.9914965682630972 +249 108 2.2833726635631657 +266 108 .6173091061486086 +274 108 -.7959411179358838 +279 108 1.3192387543851616 +284 108 .8638295417888421 +293 108 .38588601719769705 +301 108 -.6469806817389647 +323 108 -.31881873011251294 +340 108 -1.8489441212170064 +345 108 .49535058006385774 +355 108 2.42462282371147 +356 108 .08890198565617302 +359 108 .4094354835206167 +388 108 -1.4228501790988841 +404 108 1.6654889940618856 +406 108 .9846467474189616 +448 108 -1.6550370765376123 +453 108 -.5085078129154907 +466 108 -1.0014238327088139 +467 108 -.9722293268128815 +488 108 .553999637736225 +530 108 -.622091013728876 +531 108 -.27801405879860086 +542 108 .26172221624797865 +546 108 -.423696028432251 +555 108 1.4463202704582057 +560 108 .30497862336611525 +561 108 -.17283269838372783 +589 108 .5233811914880391 +610 108 1.0888190197029322 +635 108 .10539393669458662 +644 108 -.3945097258408304 +667 108 1.140317121338772 +668 108 1.90733367668262 +669 108 1.1670369320942848 +692 108 -1.015434025774428 +703 108 .45120897304365265 +704 108 .9560531048147493 +717 108 -1.0984451479167854 +722 108 -.6233698776835142 +732 108 -1.8251447464226962 +733 108 .4142635878850395 +739 108 -1.6491740344075725 +769 108 .9355337722440698 +782 108 -1.2140665852114796 +795 108 .08366489234658975 +813 108 -1.8074104679526377 +825 108 -.3112409026949414 +836 108 -.3959962028822078 +840 108 .7431011207692323 +845 108 .14932984502132188 +846 108 .9312800766555686 +849 108 .5032500215782634 +864 108 -1.0727402142387328 +879 108 -1.1363517305050257 +896 108 -1.752295095167782 +897 108 -2.31122220730825 +916 108 .13355527483197444 +918 108 1.638334058833952 +929 108 .7015251985930322 +931 108 -.39781920439128743 +974 108 .7506039075084439 +978 108 .9441393858583037 +1 109 .2403284230661733 +3 109 1.9212327827289615 +11 109 1.8617459410200154 +24 109 .7819953877170089 +26 109 .21515555506719738 +48 109 -.4813554678682893 +57 109 -.17331457875119669 +65 109 -.5197351419372128 +87 109 .4989286330911089 +93 109 1.614784112335451 +116 109 1.125510720301405 +118 109 -1.2137609656711015 +134 109 .8267877383545454 +136 109 1.010838535326235 +138 109 .2977742797504214 +146 109 -1.6494181995704642 +159 109 -.3614092156368281 +161 109 -.13016702913795797 +170 109 -.8274620979094129 +175 109 -1.0350859799499483 +182 109 .39588984362410046 +183 109 2.60872247815371 +188 109 .4389954634445189 +195 109 .365002493053741 +199 109 .3526391926635612 +200 109 .6577860226208102 +207 109 -.112017612857813 +230 109 -.8641055579419756 +233 109 .6060642853082091 +234 109 -.19677533760348698 +235 109 -.8675246564350685 +246 109 -.3737689592757601 +253 109 -.6045219494595733 +264 109 1.5798044676306562 +276 109 .3142201618910527 +278 109 -.714788850097864 +281 109 .5112134213785253 +284 109 -1.1963370304114171 +292 109 .46418201885046384 +307 109 -1.2274286095137177 +310 109 .4942729370155475 +314 109 .6453544478762373 +318 109 -2.153735605515202 +325 109 -.7849409077156007 +346 109 -.6206706595946211 +353 109 .3338840921308964 +355 109 1.0572909208926826 +369 109 -.0468222804164314 +371 109 .6577096450965642 +387 109 -.17293485684099172 +388 109 1.7959355785819031 +393 109 -.9532689769923229 +406 109 -.38297610076796945 +408 109 1.1279464553784242 +421 109 .00949975985698756 +426 109 -1.7444025351271284 +430 109 1.0092901051969458 +440 109 .5504121534117657 +441 109 -.022073443062546706 +449 109 -1.007856115586414 +450 109 -2.017167134848195 +461 109 .19852410739054582 +488 109 .09665780454949595 +501 109 .18860825543572962 +507 109 -.1521353215656297 +508 109 -.4371434590245924 +543 109 1.871439200624682 +547 109 .40891414385216696 +558 109 -.8041821006421753 +563 109 1.0122219906267764 +579 109 .6295238511131124 +585 109 -1.0254268029822373 +587 109 .9389298582827478 +604 109 -.007396804793262832 +621 109 .34431015071550214 +623 109 .5300618640660881 +634 109 2.5622251917292784 +652 109 .11618083161831874 +653 109 1.1286327950813972 +671 109 -1.3410797373957963 +679 109 .7103130252114807 +684 109 .300710821233491 +685 109 -.608117502394478 +687 109 .1875013526069828 +691 109 -.36386926181742174 +698 109 -.8517664699643275 +714 109 .01891949377465451 +748 109 -.40721643747864045 +761 109 -.14491259873428533 +772 109 -.788591323311546 +778 109 -.6671733764234655 +789 109 -1.3027079869316616 +823 109 .6425982722885961 +841 109 1.2898856671408387 +853 109 -.9044218916413866 +860 109 -.1717407028217584 +864 109 -.1555838949159221 +867 109 -.9724342417981016 +872 109 .4864489018448265 +898 109 -3.1414111789669503 +901 109 .07169778190533152 +906 109 -1.7390747752551055 +911 109 -.38396272934182396 +914 109 -1.6610567234100262 +941 109 -.2401099524701394 +948 109 -.1066751705392282 +982 109 .6487686215744345 +993 109 -1.4279039810253698 +12 110 -.7811337935689795 +38 110 -.9464057090744968 +43 110 -.7184919361672691 +50 110 -.685668493665508 +53 110 2.1461766142526404 +57 110 .5469113742905873 +60 110 .5693181594453929 +89 110 1.2929315528786456 +96 110 -1.587724341158458 +100 110 -.15048323266064367 +111 110 .36220529882710306 +114 110 -.2176816250360681 +132 110 .8887857729163995 +134 110 -.6484954428537053 +139 110 -.01827622176481955 +148 110 .7654413619075122 +153 110 .5769133187304537 +169 110 .4226028843034015 +178 110 1.139906501487422 +180 110 1.2579187247343464 +193 110 .07806063033017019 +204 110 -.2145502741138523 +226 110 -1.3475913996898867 +227 110 2.0946853507708547 +231 110 -.7549404358956158 +232 110 1.1921742367653367 +233 110 -1.2379573523332252 +234 110 1.657649446845141 +248 110 -.6413740367498496 +254 110 .26550836317819093 +266 110 -2.0824158897450635 +272 110 -1.156793272010097 +279 110 .6732082796343954 +329 110 -.6819719746295321 +334 110 .6599167044418331 +355 110 -1.727701086266765 +407 110 .9335317807686679 +423 110 1.1045996899960957 +430 110 -1.328852741555447 +432 110 1.0731025426782288 +434 110 -1.1358191982394643 +457 110 .04272425729874555 +466 110 -.005991432021019483 +470 110 1.1258902708173424 +479 110 2.232366665104876 +480 110 .8918512894673144 +493 110 -.9267667057621153 +495 110 -.15130651934920672 +501 110 -.2496857737939756 +518 110 .3052830605964938 +552 110 -.24680103728863717 +562 110 -.31031857325906576 +574 110 -.1638406424256449 +595 110 3.2712062891211637 +602 110 .4651474737152326 +612 110 1.2015751953700082 +620 110 .15328111823995422 +623 110 .3143633298354836 +628 110 .6729075999776013 +633 110 .3745623504140789 +635 110 .7735236038959028 +638 110 1.3742602411379123 +653 110 -1.820201692793306 +660 110 .6923578201784764 +692 110 -.4738818086299116 +701 110 -2.118169087998683 +703 110 .7278383357727611 +709 110 -2.4441044381914083 +719 110 1.5031414896179056 +727 110 .31000654108964154 +732 110 -.41152904759962733 +738 110 -1.2418487886067155 +770 110 1.0824219249328502 +773 110 -1.8263299504225996 +783 110 -.09505587706607616 +790 110 -1.2324502535968773 +809 110 -1.5614478377702 +810 110 .556879549725008 +824 110 -.6691158826797309 +843 110 -1.1736756817569158 +847 110 .33054630826703574 +849 110 .3763628010441167 +853 110 .2921546402521458 +856 110 -.8398555810545478 +865 110 .721757476180205 +868 110 -.5324834533188799 +870 110 1.4431287348179365 +872 110 -.9524500705476182 +893 110 2.535293589238488 +895 110 -.3718225739523887 +905 110 1.3509895799024985 +908 110 .21031249442125044 +916 110 .6846894248981832 +918 110 2.008134995267593 +960 110 -.46967086100001565 +964 110 -.18750826892564124 +977 110 .26699297929022286 +981 110 .5271100089828902 +987 110 -3.5812892979547417 +988 110 -2.7630921385220293 +993 110 .9915457981871896 +997 110 1.4996951356227666 +4 111 -.010838796617688731 +17 111 .9033514793449293 +18 111 4.661729687440761 +24 111 -1.4175031966910194 +37 111 1.151532720459866 +52 111 .08064884849291054 +69 111 -.46212825913930317 +71 111 -.927250876742643 +92 111 -.6285237809232023 +96 111 -1.1038060231044655 +120 111 2.3990629226645046 +122 111 -.18767701466201162 +144 111 .5078711695124735 +147 111 -2.5189212645765924 +148 111 -1.4352274813139798 +161 111 .22371239595816161 +163 111 1.2042070332905968 +184 111 2.269251710325505 +194 111 1.388053147104822 +207 111 .6689894371900117 +235 111 1.5681230211117534 +243 111 -1.123756865258682 +245 111 1.8973452991475377 +253 111 -.2740246228752448 +255 111 -1.7996065149416016 +264 111 1.0747700706089185 +283 111 1.5062370310935453 +287 111 -.6593902757142345 +295 111 -.30809770292232774 +306 111 -.8485966878082621 +315 111 -1.2580954184371023 +336 111 .16633841953280842 +350 111 -1.6130077578798103 +362 111 1.2178747383581485 +377 111 -1.3146051250560433 +380 111 .5815707397844652 +394 111 .7715673649327021 +401 111 -1.7364666335690941 +409 111 -1.4964625419832898 +425 111 -3.191695775883749 +430 111 -2.772204926568576 +433 111 .5070874408901352 +442 111 -1.1344392492298523 +450 111 -.17186675411545146 +469 111 -.5107505416676765 +496 111 1.0870982893385572 +503 111 -.9342890716145458 +509 111 -.7650320036164983 +510 111 -.48711671294983605 +533 111 .9424226288884388 +538 111 -.15781951570094793 +560 111 .20423293259940278 +562 111 .3225107486501543 +567 111 .8015871397061404 +580 111 .6588786226147392 +583 111 1.2579996391753958 +590 111 -1.1733942858759447 +592 111 -2.4811607615385407 +607 111 -.6956036323145396 +621 111 1.7170297225904947 +623 111 1.8098411597330744 +653 111 .30296758205172913 +654 111 -1.8293291669425356 +659 111 -1.7206746666584056 +684 111 .7955264684882211 +697 111 -2.260817622610275 +700 111 2.4481181766946736 +727 111 -.7753294929787031 +739 111 .22757342182546672 +756 111 2.426212713041902 +758 111 -.2078422652841768 +762 111 -.45583483637663436 +779 111 -4.041291126472314 +786 111 -2.191494674959423 +807 111 -.4506218864262623 +820 111 1.454791963782964 +836 111 1.7555557706029905 +843 111 .01402271729004162 +853 111 -.8795343808194644 +873 111 -.453194157929249 +876 111 .3058138503003514 +884 111 -.046655724353390673 +893 111 2.0661900699499856 +896 111 2.699585414963635 +912 111 2.853402506242479 +920 111 -1.014794530982177 +926 111 -1.3877387318467858 +933 111 -1.2952237409996918 +949 111 -1.0509545002286087 +955 111 -.3689302182360934 +972 111 .9809961474582106 +982 111 .29197880113926666 +2 112 -2.594135494651064 +3 112 .23274994572056779 +22 112 -.0011116301020244156 +29 112 -.5888552767744574 +46 112 -.796403270294721 +82 112 .8322395297476233 +88 112 .7455879144421241 +114 112 -.10857167263416781 +122 112 -.9390227401587992 +128 112 -1.0802320673944072 +156 112 .6864566798462921 +168 112 -1.8576977741615284 +196 112 .13260968299634104 +201 112 -1.0950763904774337 +206 112 1.2028257433384202 +210 112 -.3245178693238445 +225 112 -.5287384458429457 +230 112 1.0255489042931702 +233 112 .5034731756663079 +240 112 -1.0371317971475182 +259 112 -.28842839988183955 +260 112 1.8614723145367909 +266 112 .208572412723581 +267 112 2.445720657763488 +286 112 -.10794647502250897 +302 112 -.4316631100252802 +304 112 1.0169530525635602 +306 112 -2.309937779335472 +323 112 -.06679437615267908 +332 112 .2465005407427357 +333 112 .01333131478797481 +339 112 2.445065322304709 +371 112 -.40967296938164544 +396 112 2.2748221458508486 +402 112 .3602791837616351 +408 112 -2.426999667010919 +427 112 -2.0343256110017576 +437 112 .4092669151288735 +440 112 -.6750653334123803 +448 112 .8100278227381019 +452 112 -1.8597498965238226 +473 112 1.80330067050392 +475 112 -1.7823104447164133 +477 112 -1.722309484112224 +486 112 -2.180582508800515 +490 112 1.0301288702631715 +499 112 1.3084189083139413 +505 112 1.885767155967247 +508 112 1.6859824279844586 +522 112 .6762893078683075 +528 112 .7476483750443137 +549 112 -2.0366277563519293 +557 112 1.1970626833645839 +560 112 -1.8020584346887925 +575 112 .8198005135593323 +576 112 -1.7761420994639716 +607 112 -.7795900705454553 +617 112 .49283112726297723 +640 112 -.9300598745749806 +655 112 1.2765664433529518 +665 112 .10829324272387245 +669 112 -.7415850399760912 +672 112 .48855333472905144 +691 112 -.01767339376810815 +708 112 .863745255007982 +720 112 .5093944332167485 +730 112 -.9462244933864059 +744 112 .3642236564722715 +760 112 -1.0868890227101227 +773 112 2.252355718251216 +775 112 -.45988630603532943 +788 112 -2.532224240422773 +790 112 -.9693556771111858 +813 112 2.4113629125797518 +826 112 -1.6355308861207798 +827 112 2.3601847451448843 +873 112 -1.288026120963953 +884 112 -.007100926985400768 +889 112 -2.77583002052897 +917 112 2.8830780221080627 +950 112 -.1242440729653603 +968 112 -.25956305267241553 +972 112 .6235494000240476 +986 112 1.446854215826663 +991 112 1.0682568275598963 +993 112 .11339548625326312 +995 112 -.6867093787744156 +999 112 .6661473464269494 +14 113 .8987894870453074 +15 113 -.13440536109898682 +29 113 .9391055711546529 +30 113 .04763839243145098 +33 113 .6886572316888454 +49 113 -.3011261993275114 +72 113 .6480502136220225 +74 113 1.5113904017180166 +75 113 .3038996490766731 +76 113 .33499438298233075 +78 113 .6133374387496713 +109 113 -.25926551678406684 +128 113 .07742042483568158 +132 113 -.4008177519664947 +137 113 .5540097559127601 +149 113 -.10103168737025543 +162 113 .2636052437405568 +167 113 -.2882463371337464 +182 113 .06280446376803069 +199 113 -.0625938089500476 +213 113 -.09574044303494891 +217 113 1.0889997407960712 +223 113 -.5518237933140027 +224 113 -.10361828241735183 +241 113 .3821421764320087 +248 113 -.1333688661131499 +256 113 -.311855596001433 +269 113 .02491444342687893 +274 113 -.31889071618074116 +278 113 .8174380637640222 +279 113 .11005322920162014 +288 113 -.2420865113003036 +302 113 1.0852233775809248 +305 113 -.11123471657226022 +316 113 -.8346689487542297 +324 113 -.11015071780831204 +329 113 .4581020609824274 +331 113 .07174634216660934 +336 113 .4042126064346758 +337 113 -.09074620658284707 +368 113 -1.4933108334217704 +386 113 .6343367376361858 +396 113 .7884104611832117 +402 113 -.6916094899644951 +403 113 -.15733086624978448 +408 113 -.17198259244946695 +417 113 -.12259210877287874 +420 113 -.1684356887947589 +423 113 .49519329012660324 +432 113 1.0250609314990844 +436 113 -.6263728640910143 +438 113 -.4537230855639495 +447 113 -.04705283119796172 +449 113 -.9490487038339759 +451 113 -.28075484536764783 +465 113 .4189788338658148 +495 113 .03848218809847596 +501 113 .5427698830121377 +511 113 .1806075019029138 +536 113 .9172299988402791 +541 113 .3494358258361964 +543 113 -.1581985379574277 +553 113 -.41950962189191493 +557 113 1.198794316973494 +559 113 -.13060457358620636 +566 113 .11433350862726019 +568 113 -.4805960850340986 +581 113 -.2723357314841252 +588 113 -.05119536001528132 +589 113 -.16106126262635057 +594 113 .04838100153553079 +604 113 .4200722623877653 +610 113 .09628461925381401 +624 113 .06854987497199481 +646 113 .08879454300539044 +652 113 .6247004215091049 +655 113 .44455387553601877 +678 113 -.17767038873700547 +688 113 -.4526829033884872 +705 113 -.4651424043176627 +719 113 .19371929212823247 +726 113 .1896795305294749 +736 113 .1404669798042614 +744 113 1.035088134534319 +750 113 .9426569929204358 +758 113 .003708923685254731 +763 113 .33031318717034963 +782 113 .09522926055086714 +798 113 -.1762027565836183 +811 113 .8513418858618937 +815 113 -.5303934684754525 +836 113 .10551549412787027 +841 113 -.4623438217782021 +849 113 .6690180282217405 +854 113 -.2588938269927662 +863 113 -.09206403473924618 +864 113 .07584239451196698 +880 113 .2555197516036286 +889 113 .024258215975438105 +890 113 .8604938027449316 +910 113 -.02782036421400147 +911 113 .38829352634276365 +913 113 .5962280379117204 +917 113 .34691413888062383 +921 113 -1.100832003267581 +938 113 .04867325187329612 +940 113 -.5206314249111359 +944 113 -.8601755986248789 +950 113 .7073154186339519 +970 113 -.4477805027014794 +981 113 .1651363046521907 +991 113 -.022187894916385814 +16 114 .3957039594700044 +28 114 -1.0871788845570618 +30 114 -.9307175773380386 +31 114 -.15515079103612728 +42 114 -.44265816764924415 +44 114 -.260162068163642 +48 114 .19204937660322186 +71 114 .7832142528046224 +78 114 .5156958496064475 +94 114 -.18873570993491773 +97 114 .1949042125127421 +143 114 -1.09565101279695 +154 114 .4144729844700728 +175 114 -.6208455894069632 +180 114 -.4270286449848407 +181 114 -.7227468308366248 +200 114 -.36376164999431226 +213 114 .38649757314792943 +219 114 .2186335665554343 +225 114 -1.5807570537871627 +235 114 .20992725315779967 +270 114 .18624123017597385 +303 114 .5849241959199496 +305 114 -.33288074763363096 +326 114 -.7920692574289859 +345 114 -.39465509340567984 +349 114 .3234126355082382 +352 114 .23998036850726429 +371 114 -.46681713021328103 +385 114 .6282386824507623 +389 114 -.12691554066282318 +399 114 -.11792168769200441 +423 114 -.9957134143325677 +426 114 -.4752240735100169 +430 114 .5706083444671051 +440 114 -.7120299681576441 +449 114 -.7424182079846757 +450 114 .02873515608058605 +471 114 -1.0306725474021052 +474 114 .4347497543205799 +494 114 -.048209532852782205 +532 114 .5630210607189995 +543 114 .14998183501190898 +579 114 -.47750677563229793 +582 114 -.18359077096340817 +609 114 .18970084601521633 +614 114 -.38567167468885993 +643 114 .1747520941167168 +667 114 -.3965462499226201 +671 114 -.4288872972347543 +673 114 -.12305312476473942 +684 114 -.6476115257556921 +692 114 .037419052952722937 +697 114 -.5887976024089148 +702 114 -.23961740962957656 +704 114 .01773069729038812 +714 114 .18739561473573085 +720 114 -.7247956819612384 +727 114 -.6211841423420594 +743 114 .5680129247661203 +752 114 .06331532884385552 +758 114 .11223152511303225 +780 114 .05536378572527109 +784 114 .6193706291876719 +808 114 .41905010042429947 +811 114 -.8034658603815936 +814 114 -.1639922063192081 +816 114 -.6685367034038214 +819 114 .7372009204227663 +820 114 -.31777808230433857 +833 114 .5057007584385348 +848 114 .6746317584820445 +850 114 .21854525046915607 +851 114 1.0726573589933885 +853 114 .7246094869343606 +865 114 -.3047990181096721 +866 114 .4467591435451158 +867 114 -.16790051673694628 +884 114 -.5326033001193211 +898 114 -1.4729838867529184 +909 114 -.5646787811720204 +916 114 .018108166587842645 +923 114 .040763967301484856 +926 114 -.7275106182399214 +930 114 -.8764114343228266 +932 114 .9091585119173263 +947 114 1.6449555666050522 +954 114 -.28115357260482876 +959 114 .6627827286674515 +963 114 -.5301089789195952 +978 114 .21795658758067663 +981 114 .060537031537212106 +989 114 .4240527769750318 +990 114 -.42194980107876046 +991 114 -.47914191613399365 +6 115 -.5116724135118789 +12 115 -.6275713753668133 +16 115 .4694628131053712 +17 115 .9939271811319103 +51 115 1.0603795637624351 +57 115 .14265698400627674 +58 115 -1.6422445172900766 +60 115 1.8981756317226681 +61 115 .8547249399340532 +65 115 .8610485056662537 +72 115 .3329442638528859 +81 115 -.20520687612889907 +84 115 -1.1260832889817753 +86 115 2.210503171081279 +87 115 1.5543701272175596 +94 115 -.48283300557048847 +108 115 .8464034231482259 +113 115 1.5553714998962216 +116 115 -1.793171542243725 +129 115 -.6670982007941175 +132 115 -.1822011768908609 +150 115 .17991007529506337 +152 115 1.4729828490732286 +182 115 -.005340682323097028 +190 115 .511394617323125 +192 115 .20715305539033974 +202 115 -.9604523877771958 +211 115 -.9307107142725098 +219 115 -.611036402310467 +220 115 -.08420595420031013 +241 115 .5961757894877004 +277 115 -.5940116714850125 +289 115 1.4648104945320939 +292 115 -1.8803784432541397 +305 115 -.576258797219438 +315 115 -.9823853086103511 +317 115 -.5829880417579464 +328 115 .1557652769388595 +342 115 .4655083168752512 +347 115 .9441568625013086 +348 115 .6526708528465596 +355 115 -1.9571655595000526 +357 115 -.8143634535072029 +369 115 .6671379362440234 +370 115 -.7633775556819571 +399 115 .1448896148046665 +422 115 1.7647906889274743 +430 115 -.6962990501808836 +439 115 .6507476162433321 +440 115 -1.807007238325871 +441 115 2.5468574440753926 +458 115 -1.102773128630498 +471 115 -1.039005529110168 +477 115 1.1376877735091637 +480 115 .5536847382768313 +481 115 -1.235288480876646 +488 115 .015137935889089987 +496 115 1.151221588923026 +497 115 .059685782001319916 +514 115 -1.3208758409908439 +517 115 -1.3917986412838177 +525 115 .8330919498906175 +529 115 .5989335274140811 +546 115 -.25682624635645235 +566 115 .4366556383397244 +596 115 -.43813222681087555 +599 115 .09681514170607103 +605 115 1.3950341037483391 +613 115 1.3664103957577565 +614 115 .34239465196001867 +615 115 -1.477715802626995 +628 115 -1.0213231053823706 +629 115 1.5451197394164091 +634 115 .08685328748448184 +661 115 1.9736891394248408 +673 115 -.246582558299746 +680 115 .5366816072168109 +696 115 .45386139334296466 +700 115 .07214556429071384 +705 115 -.5450405129081292 +706 115 2.5273475704927986 +707 115 -.698626745045377 +708 115 1.89263716774171 +713 115 -1.534422989735029 +732 115 -.7770096499672512 +734 115 -1.4349892677710037 +735 115 -.5218091755578987 +738 115 -.6710995608010999 +740 115 1.9896541418496465 +758 115 1.3751034537827627 +760 115 -.7535854356338092 +768 115 .48591362155950485 +771 115 .4561935331884997 +782 115 1.0410621410802778 +786 115 .7778983848249751 +787 115 -.9794536778973568 +788 115 -.7105800089851875 +798 115 -1.1622269172876676 +799 115 .67342626515774 +808 115 .7756722521390117 +818 115 -.6541392787092537 +820 115 .9670476974771698 +824 115 .25686293874190785 +825 115 -.9082155451556677 +840 115 -1.3356369274509132 +841 115 -.35389905602960425 +859 115 .027466350907312365 +871 115 .8455761491642123 +896 115 1.3033911584629183 +916 115 .5464177516429723 +927 115 2.004478476472552 +956 115 -1.2528165223208625 +962 115 -.8864790221484173 +972 115 -.1651859283710371 +973 115 -.8358252263481928 +985 115 -3.0028869283342363 +989 115 -.3564466090601913 +993 115 1.496256252083757 +5 116 -1.3934214332706811 +18 116 -.1990231126522311 +20 116 .47805397395329907 +27 116 .9235592843503345 +45 116 .32764379437045377 +57 116 .8322917567458986 +59 116 -1.1830828602297854 +67 116 -1.6679807517760648 +76 116 .12107238230546076 +89 116 -.38439215994440695 +108 116 .8348569387817335 +112 116 -.2629951593672198 +118 116 1.2501321029041157 +125 116 -.03889658903349589 +130 116 -.3828142268825809 +149 116 -.7166301037976246 +161 116 -.1200814861586109 +167 116 .10850951689949856 +172 116 1.188775063568414 +181 116 1.1878763609383667 +190 116 -.09914870328746934 +236 116 .19675281937657013 +247 116 -.3123261956625574 +252 116 .8607761258507406 +290 116 -.2708591698976402 +292 116 .2844710715736476 +302 116 -1.0575699083853873 +304 116 -.2263688518843573 +306 116 -.15167561473484295 +313 116 .8422877623310784 +321 116 -.4695870144659728 +323 116 -1.082611093779103 +327 116 .08979401742198806 +329 116 .7808264782588904 +332 116 .08827828389521536 +352 116 .8694796221640938 +358 116 -1.3946772652896717 +360 116 1.9116332205300834 +363 116 -1.183117686406413 +373 116 -2.2928685674965985 +374 116 1.0332255163349695 +377 116 .5393684895036267 +385 116 .7851229488783646 +444 116 .715996165248714 +458 116 -.9347212139986685 +485 116 -.5312634743197897 +492 116 .7343551772560051 +495 116 .3308928635921946 +515 116 .3262549869895617 +519 116 1.1150518846143092 +524 116 .09068534500278773 +537 116 -.5132770777470083 +571 116 -.9902988150137613 +577 116 .7662116235566695 +579 116 -.2917594619999991 +588 116 -.18575878189235473 +623 116 -.8858495291984849 +625 116 2.078702927996454 +628 116 -.5528756146697344 +633 116 .879604060793051 +647 116 -.20463934725945981 +663 116 .8133361418839338 +665 116 -.9371447678023193 +667 116 -1.0948536852187827 +675 116 .7784652713825022 +683 116 .20202271200006855 +716 116 .7643012183700316 +719 116 -.7434368325932286 +720 116 -.20474394481825636 +752 116 -.4797341654050641 +774 116 -.060879712767292087 +778 116 -1.5255894883785024 +781 116 1.4158713552535085 +784 116 -.13664964492091353 +795 116 -.3430247187359783 +801 116 .535588756059212 +816 116 -.8781891688656843 +834 116 .11163923774107551 +860 116 -.16010622711037867 +867 116 -.6142344004598363 +877 116 -1.3272823836638965 +883 116 .00385546476823051 +891 116 .06810996174316425 +897 116 -.8020571049266043 +906 116 -1.3603541422440952 +916 116 .16964802153722988 +928 116 .6274784764215264 +934 116 1.2264010559450629 +951 116 -1.0500364932066084 +953 116 -2.2523307336418403 +976 116 -.22680738903635067 +977 116 .04710807842664777 +996 116 .34953554569035783 +997 116 -.2700617463071462 +9 117 .22087173002938368 +17 117 -.8158500264884855 +37 117 -.15465271699529107 +41 117 .5100151651747792 +52 117 .4831299118037183 +56 117 .3613439199578132 +64 117 -1.3095113953666841 +70 117 -.9855291960944446 +71 117 .8707346908945064 +83 117 .7275477481226624 +103 117 1.4803338514028486 +104 117 -.41455478215103203 +107 117 -.5126977754978468 +111 117 .18564559064123767 +131 117 .8940987127034867 +143 117 -.4688767886325321 +149 117 -.8264880200380061 +172 117 .09323384365673379 +184 117 1.9550915448736452 +187 117 -.07908717991711368 +192 117 .9083410903852696 +200 117 .4819480183101663 +204 117 -1.3213847892536479 +207 117 -.6397370511659134 +213 117 .043945137516872027 +222 117 .9438182619278983 +237 117 -.30430617634741514 +244 117 .13786024498534014 +251 117 .8789774104306415 +273 117 .121200236203684 +280 117 -.5277086153449879 +285 117 .7775172564727135 +295 117 .07195879257725009 +305 117 -.21505120427040544 +314 117 -.391130662841525 +325 117 .13853154099710846 +327 117 .4160740566244394 +337 117 -.8306704003357965 +340 117 1.7235352306867335 +356 117 -1.2281920983708123 +358 117 -.3035622617596427 +382 117 -.1373932686291951 +387 117 -.18656065808274058 +422 117 1.059030574749199 +423 117 -.7517108340427869 +437 117 .2516787519258202 +450 117 -.9346856898875415 +461 117 .07255341345440734 +462 117 -.2046281826225234 +463 117 -.07509885670855149 +480 117 .6593445029722946 +500 117 1.1560590330583291 +523 117 .19730284676201942 +530 117 -.7509653974160277 +534 117 1.216960787773377 +540 117 -1.042048561732982 +542 117 -.3059681187865849 +545 117 -.4682295236247836 +549 117 1.7087808391850354 +558 117 -.8671451835836995 +562 117 .2573390502302652 +582 117 .29494190277034626 +590 117 .29427057468286333 +622 117 -.5895707082053805 +634 117 -.6963891393340841 +647 117 -.173207505298828 +649 117 -.19212990622373424 +660 117 .7243861110986647 +664 117 -1.211152718591978 +702 117 -1.081960565795035 +708 117 .5021755571466722 +711 117 1.262021103785164 +714 117 -.12011488560524089 +728 117 1.506850005018167 +749 117 1.1361988788800992 +751 117 -.6057235870690949 +772 117 .15585729063454062 +778 117 .5226003240335069 +791 117 1.7338468778722926 +806 117 .7279096749128932 +814 117 .5273795703959082 +817 117 1.2924527584496668 +843 117 -.448736450032526 +851 117 1.8241595104258832 +853 117 -.23890383489154182 +857 117 .38395649800173925 +860 117 -.811831689720401 +878 117 .8231927216853497 +918 117 -1.3579367530763737 +927 117 1.6072376439390816 +928 117 .26460405847463925 +937 117 -.12568772187987576 +938 117 -.24066920751734533 +939 117 .08826528839562886 +946 117 .08600908190452765 +948 117 .15192253302777947 +951 117 -1.680928398649827 +961 117 -.23767248457642312 +969 117 -2.2030984118161197 +16 118 .26044510284436856 +19 118 .06687657192366729 +29 118 -.22878095390270106 +38 118 -.7479841839557307 +39 118 -.9149576066203015 +55 118 -1.387894487353911 +59 118 .02266169591913786 +70 118 .1330953577586938 +89 118 -.23815275819159284 +145 118 .5832580181249037 +154 118 1.8698284805436545 +156 118 -.7463092322480434 +166 118 .8690084137196082 +168 118 .19528559234278178 +174 118 .12172361825685576 +189 118 -.8219042640770297 +193 118 .45065182916233015 +196 118 1.4382360618839254 +200 118 .8926685646102781 +205 118 2.315111507155517 +215 118 1.4945519447094175 +241 118 -1.5961858503228976 +249 118 .7776497518018941 +251 118 -1.1000054399895616 +265 118 -.9796168559952529 +270 118 .06356597571758588 +282 118 1.046926643905446 +358 118 -2.572340910569573 +370 118 .4078375294035355 +371 118 -.6524773843281814 +390 118 -1.100430643518147 +393 118 -.04603111680272552 +438 118 .8124301721497279 +442 118 -1.2576711705516734 +479 118 .05073858944556585 +498 118 -.37957812027885873 +501 118 .6747665933577042 +502 118 -1.0207363672700727 +508 118 -.8205306545742617 +516 118 .9693727261695916 +522 118 -.12209202883867404 +530 118 -1.21364085200167 +533 118 -.06295295123202976 +543 118 -1.274044784712734 +555 118 -.43769739278322006 +557 118 .31301573776994185 +560 118 -.062303217873191805 +566 118 -.13668639485642545 +570 118 -.16417198021085522 +571 118 -2.0852195342108244 +581 118 1.9308517016942035 +588 118 -.610461717756716 +593 118 -.6385832128947929 +596 118 .8617063127610586 +606 118 1.1710479936540834 +626 118 -1.122428905529618 +655 118 -.6362176411649596 +660 118 -.06669504316478617 +667 118 -1.5084597842880416 +674 118 -1.1927731479702184 +703 118 -.3092564990969862 +704 118 1.7540501899059417 +708 118 .8613358477404245 +714 118 -1.213951506772616 +716 118 1.8079596652384158 +718 118 -.38548642787625387 +730 118 .27498649648862683 +742 118 -3.726921064822398 +744 118 -.03312783938897382 +762 118 .5881830601813051 +786 118 .5631621712338739 +818 118 -.259319698102585 +819 118 1.3532356533235386 +823 118 -.41540315690470236 +855 118 -1.3966119162148474 +870 118 -1.4784156768756895 +871 118 .46599230048797136 +874 118 -.839030230532512 +895 118 1.6605391321124836 +901 118 1.3564192468692113 +907 118 -.5773612455877468 +920 118 1.468567869299285 +952 118 1.081553157945509 +958 118 .3140419870101796 +963 118 -1.4725336880500783 +965 118 -1.534882167091486 +971 118 1.0478837803281345 +973 118 .31448469142097357 +979 118 .0074686586153893935 +990 118 .5975704611434748 +1 119 -.5072344961125024 +9 119 -.9887367424752422 +29 119 -1.2264543195437367 +41 119 1.229269782800223 +47 119 -.8772534678066295 +50 119 .15259709902424415 +54 119 .26234342706516756 +57 119 -.4742225133331441 +60 119 -1.1015725632637483 +81 119 .3666416640648963 +87 119 -1.35046243619234 +92 119 .46471809265966674 +103 119 .7702964250626564 +113 119 -1.1013754469296324 +133 119 .2872067546193826 +145 119 -.21619263691559115 +148 119 .8074287663991783 +149 119 .007893271974100443 +154 119 -.3445473715398775 +160 119 1.6553100541187356 +170 119 .30516281302221904 +177 119 -1.0669928926102468 +180 119 -.6368677913227557 +181 119 .3656981586323138 +183 119 .6223558905800937 +184 119 .6574921943613479 +185 119 .6442717624409197 +186 119 -1.2813467907318512 +188 119 .35247160804267796 +190 119 -.42788924083673463 +203 119 -.13214984580660036 +204 119 -.3016455445832299 +216 119 -.18532872083697127 +217 119 -1.0745911119604887 +220 119 -.003400469240687626 +238 119 -.22788733827209173 +239 119 .3099315523172172 +243 119 .7738283118931172 +249 119 -.5650600627508513 +250 119 -.6760499507378751 +271 119 .33227399571059585 +278 119 -.9322946072936984 +279 119 -.08816527693772944 +284 119 -.35036143535744213 +300 119 .9865519410625406 +323 119 .2535639725410497 +333 119 .24443431946736158 +335 119 .7441278472367197 +338 119 .5198421308501281 +339 119 -.8244870250013622 +354 119 .8260280770766267 +355 119 .740558147207203 +356 119 -1.1998087521133016 +365 119 1.026349718502766 +371 119 1.5319577157195725 +386 119 -.4157271540043681 +398 119 -.4049213201221517 +401 119 -.1419875792400755 +402 119 -.28014441701028553 +423 119 -.631112953389889 +435 119 -.17555715282981743 +454 119 .8237804514363073 +464 119 1.839049700740662 +472 119 .4025384252865256 +474 119 -.38636572801448815 +497 119 -1.078047481247362 +508 119 .43836123341266575 +529 119 -.5190789268369322 +533 119 -.226440839212973 +536 119 -.05115238695014081 +547 119 -.16433111872567382 +548 119 .08703405738461578 +575 119 -1.8283959645026884 +581 119 .6572649540353457 +584 119 .3487788893741982 +592 119 -.3923459360553458 +598 119 -.7210317036112683 +605 119 -.4468227258556874 +608 119 -.5775878988314607 +615 119 1.4419904225212845 +639 119 -.5675603799425277 +666 119 .3918514370141194 +672 119 -.3524157603896884 +683 119 -.5101947795309405 +687 119 .04214974765042681 +706 119 -1.691742288910068 +714 119 -.19320199616220768 +716 119 .6999310416218614 +720 119 .5297241305500209 +746 119 .42799637284360803 +749 119 -1.6007573804248239 +751 119 .8694653228898374 +758 119 -.3532242251591206 +762 119 -.5681427055329398 +790 119 .54755394435777 +811 119 -.574804326123709 +817 119 -.07600275911238862 +818 119 .6613837673801501 +842 119 .5842376815096988 +846 119 .49594680736811264 +861 119 .028635491857912698 +865 119 .6109058737242374 +875 119 .07225533210754367 +877 119 .7486221123360465 +881 119 -.9448645237514991 +882 119 .15850650182877923 +894 119 .13584353662556065 +905 119 -2.122024395441757 +919 119 -.11175354205518268 +931 119 1.3404791418049995 +934 119 1.077765057720292 +956 119 .5598018730798342 +967 119 1.020446832920356 +968 119 .8162748340791743 +972 119 .27026370777526154 +975 119 -.5536151732874776 +981 119 -.8318982804162237 +995 119 .2003533771808963 +997 119 -.345956816006992 +2 120 -.8020704574723619 +6 120 .4142857617653788 +23 120 .7015491015523538 +29 120 .21636260602213933 +35 120 .3113206672356903 +39 120 .22829650764548326 +46 120 -.07341469875167311 +56 120 .05870237781336041 +58 120 -.004730813616398287 +78 120 .40033762641968146 +107 120 .45205726467617857 +109 120 .3835513768697429 +138 120 .13292285992055355 +149 120 -.5960039396576218 +158 120 .5845477763936702 +172 120 -.5062562622159199 +175 120 .5291217921443528 +182 120 .40492078259242614 +183 120 .14937303743617553 +185 120 -.5644561337393612 +201 120 -.16955546941882532 +202 120 -.7164385460726663 +207 120 -.4967518633297768 +223 120 -.15544661057106343 +228 120 -.2117994613497569 +231 120 -.05313001089701587 +242 120 .7394392823661018 +243 120 -.5829655341728475 +262 120 .07588263117441536 +266 120 .5481690762959297 +278 120 .461970299394348 +285 120 -.19081818642104395 +288 120 -.15948796743071253 +293 120 -.3457017359158904 +304 120 .9664779257218832 +310 120 .00166764907003919 +316 120 -.18515447991623527 +329 120 -.4956430200160492 +343 120 .33671531679736333 +358 120 .21575408144343144 +363 120 .4728493752903907 +365 120 -.6258580153417248 +374 120 .3835688710144312 +387 120 -.8317432703407579 +390 120 .026613174276288634 +392 120 -.7449506454199013 +399 120 -.4115322672699088 +402 120 -.19397592641542521 +410 120 .18749523892458964 +414 120 .17244948388272818 +417 120 1.088292093639256 +462 120 -.21440910934106577 +470 120 -.31076042389905534 +486 120 -.6074245019896212 +520 120 .40259430840644883 +523 120 -.6654236128551969 +580 120 -.37792306738705184 +589 120 -.10653322437156448 +603 120 .8989945625311637 +608 120 .5361477310252085 +611 120 -.2833489093125063 +622 120 -.60430644287114 +642 120 .6516187409380838 +656 120 .36842274386563245 +670 120 -.07639773541238329 +679 120 .3380908309343822 +688 120 -.05676163498358529 +691 120 .3524285952090891 +694 120 -.9171924155524811 +698 120 -.1422928760507285 +701 120 .45291603019932214 +708 120 .3953366234806683 +728 120 -.7739052672503156 +742 120 .6548655234244143 +752 120 -.029764462680610976 +759 120 .004476260843082636 +765 120 .32133540380137626 +774 120 -.0734122911117096 +777 120 .33296414357978976 +802 120 .029558965393610886 +815 120 .13359602669505494 +825 120 .47682497708827926 +827 120 .8387175957434316 +838 120 -1.2046518350707487 +841 120 -.5982125267583375 +846 120 -.3486688821185962 +855 120 .6865556975158108 +858 120 -.1698199694156941 +865 120 -.1209175616370566 +877 120 -.2491318372584022 +934 120 -.5133477888664983 +944 120 -.5155488031618225 +945 120 -.8499572542259964 +947 120 .32143330544604537 +982 120 .3877244069934971 +10 121 1.5082751708055961 +13 121 -.2620779277418255 +14 121 .8805995577413155 +20 121 .6714377354973459 +56 121 -1.3514003763615787 +60 121 -.16354672625204603 +63 121 1.1477164576770582 +65 121 1.4175131115630468 +66 121 .47099452552096216 +74 121 1.3703847222789345 +75 121 -.24220526547521593 +86 121 1.2096737931678485 +128 121 .24232385987370786 +142 121 1.3735796768049087 +143 121 -1.1622249316223665 +160 121 -1.3162266871241095 +174 121 -.8460379128470567 +183 121 -.9738551657279927 +184 121 -.25284145248592205 +185 121 -.8872539716213949 +197 121 -.06660253245451192 +204 121 .10942746063062897 +220 121 -.2113309823917079 +236 121 -.5925555966053289 +238 121 -.04507545201749917 +242 121 1.7041465273672063 +248 121 .14400108915436916 +278 121 .4934702830448853 +283 121 .29464281029959905 +328 121 1.4458401004897463 +329 121 1.0489338961702317 +335 121 .20471656479026923 +336 121 .6315350173346354 +338 121 1.0057700627451958 +352 121 -1.0502263759397095 +357 121 -1.8782369088677082 +383 121 -.9761386809385018 +385 121 -1.3276762488073823 +395 121 -.8241084976208349 +409 121 1.0904383282577346 +423 121 .5325201916917852 +424 121 -1.750885351784279 +431 121 .40388242289048315 +462 121 1.352039797383453 +464 121 1.568737173089039 +484 121 -.4739137560860308 +492 121 .4906922370360391 +498 121 .536475928738851 +500 121 .05867478881037461 +516 121 -2.2989427759299312 +521 121 1.158794708074581 +539 121 1.5629930979075892 +558 121 .9807012402909808 +559 121 .6578870687863809 +570 121 .3769809168070589 +576 121 -.8029111519279729 +601 121 -.9799633243465512 +602 121 .39881188903573167 +618 121 -.49965992490438094 +623 121 .40457511810683744 +631 121 -.41131319980629977 +639 121 2.369000821893873 +658 121 -.3905102439291786 +679 121 -.9546834932771482 +703 121 .4521784449662437 +716 121 -1.6668487321748626 +722 121 -.6428539788633171 +739 121 -.1007815732610247 +740 121 -1.7989337213704109 +741 121 .5804253852851154 +745 121 -1.2937890705259658 +756 121 2.887433602562956 +764 121 -.06910967539720449 +773 121 -.6632225502693674 +779 121 -2.119892482845295 +797 121 -.852097656930649 +802 121 1.8378154685712533 +814 121 -.14753147969555408 +859 121 -.8999262894190659 +860 121 1.6630942776265523 +872 121 -1.4731305850748455 +876 121 -.5439773154681715 +880 121 .772895339162835 +913 121 .8306692953213621 +925 121 .4209101423305353 +944 121 -.7295660473110352 +962 121 .01049779256500677 +965 121 1.9144007243839143 +971 121 -1.1602904978648 +975 121 .4483175119978902 +985 121 -1.5639342078956981 +997 121 .1796758559536149 +8 122 .21340101282315455 +17 122 -.48675487989905053 +27 122 -.3266353953650642 +29 122 -.3653824290150284 +32 122 1.0950944568959187 +63 122 -.05598662388648522 +74 122 -2.7110648363863463 +100 122 -.6476867307689117 +108 122 .05145022597251059 +135 122 -.5476617071093945 +140 122 .2085143846314687 +145 122 -1.0426477595869397 +151 122 -.026162019278953414 +165 122 -.5058424634306248 +170 122 .8813730728724378 +195 122 -.5907761421483504 +234 122 -1.03282572344465 +248 122 .8374824842675412 +259 122 .1275847216266831 +264 122 -1.6805905313853666 +268 122 .2565833832148617 +279 122 .25483309157375345 +306 122 1.2504467712428802 +326 122 3.10268188642523 +334 122 -2.543308699676074 +377 122 -.6496585576669948 +388 122 -1.5477721811082588 +389 122 -.4104439163394858 +393 122 -.821289293056558 +394 122 -.8229183243999857 +397 122 -.13982985400353787 +418 122 -2.2850380102642376 +422 122 -1.290347236215053 +425 122 1.7562983740085383 +437 122 -.8814320804114701 +439 122 -.46744643216009385 +451 122 .6042249934470278 +452 122 .38648056581688384 +475 122 1.030483124255627 +483 122 .5807812887470153 +504 122 .8858550170684223 +510 122 1.4691770927155834 +536 122 -2.3185571184444544 +548 122 -.6075395380821909 +554 122 .34942285660073047 +559 122 .9414027220576393 +566 122 -1.3705861034155498 +583 122 -1.9614384278892774 +589 122 .634286549161396 +601 122 -.2947922106131537 +605 122 -.6590337793080063 +609 122 -.5589232211397538 +618 122 1.3404945286162893 +621 122 -1.338013669842784 +638 122 -.607672450928622 +644 122 .14826940602243815 +653 122 .9638160121106112 +657 122 -2.145618951816793 +681 122 .4592846068401032 +689 122 -.674118781176904 +694 122 1.9809293668220618 +705 122 1.1211866528477468 +726 122 -.7469259638630531 +735 122 .1412262706965403 +738 122 .323908091339581 +762 122 -.952952504439486 +773 122 -1.1029547844885192 +775 122 -.45580818222510805 +780 122 -1.0919551462467731 +782 122 -1.5507031915300586 +808 122 .4900413317777107 +826 122 .35237310976563396 +850 122 -.6583091243170233 +869 122 .056584108536295516 +883 122 -1.002219404304359 +884 122 .5172202688814614 +889 122 -.45424503704525265 +893 122 -1.292838219687127 +910 122 -.9991435181726241 +911 122 -.596152529055861 +917 122 -1.0533257532500413 +923 122 1.2871941219597711 +932 122 -.5309218457973897 +944 122 1.0116502761625987 +949 122 1.7692711383395 +964 122 1.1555209651648026 +979 122 .9388932816774284 +980 122 1.1060634795931552 +1000 122 1.0095535666506932 +4 123 -.24159479676807655 +5 123 -.4842031471026173 +7 123 1.2889707455294979 +11 123 1.1533595389542988 +16 123 -.22610120299406297 +25 123 -.884819110898553 +34 123 .34212249341482404 +39 123 1.092882064496244 +41 123 -.9010667332061926 +43 123 -.7583325494311387 +106 123 -.7757168064639263 +112 123 -1.9246818059817234 +123 123 -.29601256375721785 +128 123 1.3364092695062264 +172 123 .17103755158293849 +173 123 -.5924584401993561 +184 123 .8558119011988279 +186 123 -2.011389855229249 +199 123 .4550459701593643 +200 123 -1.2244469246360983 +205 123 -1.5504656031446826 +214 123 1.5688457740720203 +221 123 -.6969248401198738 +225 123 -2.6355571950272667 +253 123 -.0986037425902537 +257 123 .9063519352503424 +260 123 -.24347619229311154 +262 123 .2968890844625994 +263 123 .46978243830062993 +270 123 .5811986027496883 +278 123 .5517378529995982 +293 123 .3321285002816773 +315 123 -2.5002409577612528 +325 123 -.48677906170721297 +333 123 1.756070052136549 +356 123 -.8352055984107263 +358 123 -.576395707055097 +359 123 -3.306348111341949 +366 123 .4023206757971211 +382 123 .4543222990953466 +384 123 .7418707207478045 +387 123 -.5042606411273256 +399 123 -1.7665480790195767 +400 123 .6847880067286791 +405 123 .14034930612305563 +416 123 -.5977798536974088 +421 123 .3094611060928582 +426 123 1.2718958196862538 +430 123 .4533844381079557 +431 123 -.5409094114154828 +435 123 .0033153105642994216 +436 123 -2.181718596339153 +441 123 -2.1262307889478733 +446 123 -1.5436229555636678 +449 123 -.199884772194254 +453 123 -.09737062184351306 +463 123 -.34784803105804957 +467 123 1.7140000960141744 +475 123 -1.5401936253693955 +477 123 1.0248377508509758 +478 123 1.4145101309942851 +481 123 -1.7457092039439688 +482 123 .6954588011203824 +485 123 .7139434639753377 +487 123 1.0934844716929715 +498 123 -1.3109853033905332 +505 123 -2.238072683956621 +515 123 .14130984189942014 +520 123 .945306677723651 +527 123 1.6091479168566472 +529 123 .6340220948716855 +533 123 -.30792920129172935 +575 123 -.45417248372276126 +582 123 .42506151311617446 +610 123 1.7317622773474557 +613 123 -.5408310880274568 +631 123 1.235876358632292 +633 123 1.1186474503064208 +635 123 -1.2810695761999462 +655 123 1.4006372400598064 +665 123 1.1142089734428415 +674 123 1.8021965586761968 +687 123 -1.3485504333340281 +697 123 -.7747664412106605 +698 123 2.5144681163443527 +711 123 -.2576399072039487 +712 123 .12328183321750731 +718 123 1.802694512579417 +740 123 -1.090051107456235 +742 123 1.7065205663158631 +746 123 .14974291549775398 +753 123 1.123116649537969 +779 123 -1.5599746976017872 +808 123 .36481948918061935 +810 123 -1.0623809055556868 +814 123 1.9230953152153403 +838 123 -.7533265666748726 +850 123 1.6261992183290308 +853 123 -.574265832613855 +857 123 -1.1833935889276403 +873 123 1.3329706074911754 +874 123 1.2724343853022124 +878 123 -.29073858424923127 +881 123 -.3992940102371282 +904 123 -.4858836053462742 +916 123 .037798662786235615 +917 123 .6152789794229305 +930 123 -.6131595757728849 +947 123 .32981647895014293 +2 124 .1438106440257361 +3 124 3.6467889477933277 +11 124 1.1401747724102338 +20 124 -1.5504300219704001 +52 124 -.07433154035927232 +55 124 1.849765518114222 +65 124 2.8824696481415306 +79 124 -1.8994547334947893 +89 124 -1.1927280325169636 +91 124 -.8309544385262174 +102 124 1.6722330340546046 +105 124 .7114705894322998 +107 124 .0932835448174604 +118 124 -1.2684662780299494 +135 124 -1.0353924360906317 +136 124 1.522152849535572 +168 124 -.45200645621936764 +171 124 -2.2058676981108185 +208 124 1.1927995376323384 +219 124 -.20814268446146134 +238 124 -1.4182809514889203 +243 124 .33616615620463686 +245 124 .41255359483220105 +250 124 -.8911597574129465 +261 124 -.10374091122992676 +295 124 -1.7273004775471732 +312 124 -1.2668644957719566 +317 124 1.072767542642871 +333 124 -.696810486309668 +342 124 -1.0317524574720733 +343 124 -1.8809686945584043 +361 124 .28449670286898343 +371 124 -.34075378430989656 +403 124 .735198969733483 +422 124 .7258439200086297 +445 124 .24850113851739603 +458 124 2.5236756310827397 +474 124 .8553767204530136 +477 124 .2695748658439025 +478 124 3.3261576569411284 +505 124 2.5752652355301895 +512 124 -1.374332656283521 +525 124 -2.3287746887912926 +534 124 .6214592772700958 +536 124 -.5220695573789901 +537 124 .14836928561318424 +568 124 -.6444481712717914 +577 124 -.05436146263472491 +585 124 -.24312408313598569 +604 124 .433200278446509 +605 124 -.5318269848797769 +625 124 -.18258435529664827 +626 124 -.01810476461402153 +638 124 -.24062568625781053 +653 124 2.8893174211836197 +660 124 -1.5042394012745406 +661 124 -2.1722639669773782 +664 124 -1.613735114787354 +672 124 -.1296160822312949 +688 124 .03494009055151179 +692 124 -.8881742616495641 +695 124 1.2599578022876063 +701 124 3.4254722470178307 +702 124 -.9973107721541086 +710 124 .9075736240472208 +721 124 -.4361129713134893 +731 124 -.8740656627554336 +737 124 .7788267992083301 +740 124 -2.9786460779534663 +764 124 -.19479981905423782 +778 124 -.838402106971616 +779 124 .6234864626485873 +787 124 -.7305125530259162 +788 124 .49836410446722235 +813 124 -3.0033969396973337 +818 124 .22008672289109787 +823 124 .8558479136441705 +861 124 2.377386831809978 +866 124 -.7582505393204819 +886 124 .15795181040408202 +893 124 .18338129017101484 +901 124 -.3690980280750112 +902 124 .5338608259481256 +905 124 -.8882818997642838 +913 124 .8889626628463367 +931 124 -.3519309402491838 +932 124 -.2448992381614398 +984 124 1.4223021385292556 +992 124 -1.566820079205139 +6 125 -.3409494241135561 +15 125 -.3966915357657943 +16 125 .8761942125692743 +24 125 .2579640080237761 +33 125 .5194362326497909 +49 125 1.3106950460003217 +50 125 .5477326468260142 +54 125 .32088402487031464 +56 125 -.8229496257103313 +60 125 -.8313909072876734 +63 125 -.14613471267860242 +81 125 -.028147360616393724 +86 125 -2.2217980685971055 +90 125 -1.2485142976086938 +95 125 -1.8145659084727082 +109 125 -.577884850187002 +113 125 -2.6968737379582755 +116 125 3.0014020137906496 +122 125 .08783773143079922 +124 125 -.2788345955311802 +133 125 .23014213178759502 +135 125 .23652346169910865 +169 125 -.04124760792929476 +178 125 -1.1861349499605778 +184 125 -.4674917395795039 +201 125 -.9381446368316435 +215 125 2.168241049055208 +223 125 -1.503220555866437 +242 125 -.16530171645081543 +255 125 1.1445612299176897 +258 125 .8258847086375627 +263 125 .96999684916884 +270 125 -.825511967095016 +289 125 .518151815661132 +300 125 1.4594535173230392 +309 125 .2949521522243554 +322 125 .42090300535920294 +330 125 -.03769412139419562 +334 125 -.2552129553675356 +346 125 .06815371215261529 +362 125 -.9906510143621755 +388 125 .3738015739983207 +390 125 1.046709832887209 +396 125 -.5742314470156128 +406 125 .5741539019688304 +407 125 -1.0409802325451438 +412 125 -1.2265240322318702 +418 125 -.8705699697501061 +436 125 .8624170170721531 +448 125 -.08651335606282236 +449 125 -1.4859109427619968 +453 125 -2.4178306357866344 +460 125 .0950060540880987 +471 125 -.578544516095605 +473 125 1.9555239135936267 +481 125 .48200926280341766 +489 125 2.443980609379408 +495 125 1.6074611303170316 +497 125 -.8102406895122777 +516 125 .9689228142904595 +517 125 -.2505259587274479 +519 125 -.3876746179723673 +524 125 1.0547275498075177 +532 125 2.0807007211260853 +575 125 -.7307141965636258 +580 125 -.7398330019664829 +583 125 -1.2885225614010107 +620 125 -.9343271796153753 +627 125 2.1330115454633067 +634 125 -1.0666352550650324 +636 125 .25659791678978205 +644 125 -.5001037801203904 +651 125 1.9702513486637943 +663 125 .020836451798133537 +667 125 1.1062590797255978 +690 125 -2.287410680414811 +710 125 -1.045476235203498 +716 125 1.5315024319625583 +727 125 .21047504519695429 +734 125 -1.05714678847003 +747 125 .0820084702807441 +749 125 -.3358301385083022 +752 125 -.888477937813393 +755 125 1.373867329712083 +773 125 1.5053727576123064 +783 125 .6103071856222086 +786 125 2.059091382079005 +789 125 .423699279923991 +803 125 -.3109512365185234 +805 125 .019252156015322208 +811 125 -.8593636428570542 +824 125 1.6145002711278023 +830 125 1.3822811008407612 +838 125 1.836373512352693 +841 125 -.5050013834391599 +847 125 -.01238024766343912 +872 125 .5006006454927784 +874 125 -1.0735146083304694 +897 125 -.9321170755581212 +912 125 -1.25550976279635 +918 125 -1.710496309388882 +922 125 -.10518407625774692 +932 125 .4576534239346107 +940 125 -.7882915619234432 +975 125 -.784886463354577 +978 125 .5635455404107856 +8 126 .21444828180377845 +10 126 -.3584357468171489 +12 126 .5269582396661197 +20 126 .9673674202883352 +29 126 .7534072672235773 +34 126 1.7292127124844865 +41 126 -4.086352234213619 +50 126 -.17428101616157246 +60 126 1.6464152442842914 +61 126 .8273185520800125 +64 126 -1.6021517604164979 +73 126 .022181956654416815 +77 126 1.31698648824705 +114 126 .8427965052514034 +119 126 -.7196380994004631 +125 126 -1.0886793843505562 +144 126 -.3817350978921965 +147 126 -.15569920877404797 +150 126 .32845352879813483 +153 126 -1.3851309753342094 +157 126 -1.3124175904375344 +193 126 .4902783905635339 +216 126 .03810071183627871 +232 126 1.1945646187798853 +244 126 -2.3926251373896874 +253 126 .1719347418531808 +267 126 .8178311653190611 +278 126 1.2328347497708545 +282 126 1.0087910996031328 +285 126 -.5594977102920998 +291 126 -.3491408247517158 +300 126 -.309218406664182 +323 126 .6313257665976222 +326 126 .30262784698873035 +339 126 3.5544967516999697 +370 126 -.2460690951743934 +373 126 -2.294377763133634 +377 126 -1.3426402497118357 +382 126 .6311976246076403 +385 126 -.3803212792553352 +391 126 .4863987093644684 +394 126 -.9894613274100543 +408 126 -1.2419314407038127 +412 126 -.2653770234540528 +428 126 -.9381204748799667 +446 126 -.8041031537071706 +448 126 -.3893914824873606 +466 126 .6603588486638445 +478 126 1.0669783340887256 +493 126 -.2514413997538503 +495 126 .7579360223138132 +506 126 -.605087232691372 +536 126 -.18346405581597705 +539 126 .4980949595892963 +552 126 1.442975992916449 +572 126 -1.9094617107924676 +582 126 .7165114919136363 +587 126 -1.8779260233899997 +609 126 .5011370753134851 +614 126 -.31985786560432694 +623 126 -.8239537732947385 +626 126 .3259002876426965 +634 126 -.48955703402994455 +643 126 .021451976606167766 +667 126 -.5794919414509581 +671 126 .29048497411924323 +690 126 -.8692439853525804 +717 126 2.231001619974714 +723 126 -2.3827369831771654 +727 126 .8003668351563691 +734 126 -.8934128113855022 +745 126 -1.9138915721604504 +759 126 .6945215943301801 +764 126 -1.4584114260277408 +765 126 1.1244861197756324 +766 126 .1614622729274633 +771 126 1.413219387074973 +777 126 .8916596756024172 +792 126 .07400414968232026 +798 126 .5982685319660711 +819 126 1.423576586017035 +823 126 .56246163404499 +830 126 -.011293043382532134 +836 126 -.2978690312200055 +837 126 -.9530991008414409 +846 126 -1.1919252246453376 +864 126 -.505213952033743 +890 126 -.16566739383197238 +903 126 -.6531778370656991 +925 126 -2.12541139179734 +928 126 -2.7870198630761704 +932 126 .33523182742285185 +934 126 .8149009206462114 +944 126 .047322272116587016 +948 126 .48680059843570367 +953 126 -1.3364720692695553 +17 127 .04773783623995784 +35 127 -1.506533454853565 +36 127 .3882327439265699 +37 127 -.31542534285296586 +43 127 -1.9418804286645195 +55 127 .09854834593978408 +91 127 -.49551746111537953 +94 127 -1.0970344664288598 +96 127 -.5588770110870902 +101 127 .17468882214529352 +112 127 .6375788669649308 +124 127 -.16626053363573728 +145 127 -1.450774051329691 +158 127 -2.561187629094193 +160 127 .36766105254026726 +162 127 .5599257080954381 +182 127 -.645760931341139 +189 127 .7964700522866246 +190 127 1.024240866343679 +192 127 -.08344636424645957 +194 127 -1.1856366260295812 +206 127 .008471449329440314 +211 127 .6325630351378821 +216 127 1.5972805491542024 +226 127 .36099169771611445 +243 127 .2542139280996724 +247 127 -.7526019035685855 +253 127 -.7113639244971626 +262 127 -.04923415630932153 +277 127 -.6244254308962911 +281 127 -1.5561314291057784 +303 127 .7934799114388454 +311 127 -.6293194726102764 +316 127 -.20621409380279404 +317 127 1.7208221520399931 +324 127 2.391579653706621 +327 127 -.11584012376986405 +329 127 2.1234597291998227 +338 127 .6366838013904444 +363 127 -.2855571416791845 +370 127 -1.257658494049531 +375 127 .18437910490162074 +380 127 .08921683062578922 +389 127 -.07729192267513518 +393 127 -.341706716859756 +394 127 -.43603027482633977 +413 127 -1.5480726496960326 +429 127 2.8731641571398088 +431 127 -.44951885927664237 +447 127 -.04947695693857694 +473 127 -.059323407948867264 +480 127 -.13096021048871861 +481 127 1.494999571816844 +486 127 .17257733775580297 +488 127 -.3714468762704672 +502 127 -1.5623444010615057 +512 127 1.2725808102910892 +520 127 -.029778492790938922 +527 127 -2.271435643630297 +531 127 -.08984172856663536 +537 127 -.6202596935524064 +541 127 -.4317684669767191 +549 127 .6047361394743319 +560 127 -.17129907805201183 +578 127 .08977671513776084 +585 127 .8162061881984848 +602 127 -.9514659939902221 +603 127 -.49153381242994626 +608 127 -.037200776787371624 +616 127 -.25840990260216423 +618 127 -.6656718047805446 +620 127 -1.857743431322982 +628 127 .31357237657710063 +630 127 -.5892435101437682 +632 127 -.6130411930250123 +633 127 1.410703106769062 +640 127 -.3734608321643207 +648 127 -.17037993067604423 +653 127 2.799940431758756 +663 127 -.5785821835128339 +666 127 .038636833858192055 +669 127 1.3182286423387723 +670 127 -1.1683356524422983 +691 127 .05706565113506376 +693 127 1.2438827353390274 +695 127 .11209999867711928 +704 127 1.0662242194483167 +724 127 -.09854943036576966 +731 127 -.4842769532683631 +732 127 -2.8128270968752433 +740 127 -.19679972280089303 +744 127 1.6579150291390217 +748 127 -.6969029409162792 +769 127 .7151891662281383 +790 127 .39118295268062137 +791 127 -1.4198948130017055 +801 127 -.018992621720917285 +821 127 -.21649991471276775 +826 127 1.043578391151387 +857 127 .5237277288600043 +886 127 .9286612675444189 +906 127 -.4946796135848472 +908 127 .2819776596152862 +923 127 2.0173142904974073 +925 127 .4317148400926216 +928 127 1.7638992364924646 +930 127 .18505255057111922 +940 127 .21021188918212486 +959 127 -1.3405643873875517 +967 127 1.522634942998717 +981 127 -.17919127079233194 +983 127 .03133794849703385 +5 128 -1.881502177554729 +7 128 1.7450243627974957 +13 128 .13662676044811417 +41 128 -.5056049754107768 +82 128 1.0905217415619732 +95 128 -.03632989632643435 +108 128 1.6192603446173224 +110 128 -.9515593674961297 +119 128 -1.4799583478976959 +133 128 -.4078755602590162 +136 128 -1.7754210193783675 +137 128 -.6191681440479224 +151 128 -.012145586147832593 +156 128 1.496978225391144 +167 128 1.234963532504771 +172 128 -2.0137542155340857 +186 128 -1.005122790079198 +187 128 -2.688882276353202 +188 128 -1.9289019578965467 +190 128 -1.7508371974784476 +191 128 2.0725111574917614 +192 128 .5872098671877363 +215 128 -.9600132941908718 +222 128 -.7993507888596718 +238 128 .9597975659173117 +258 128 -.4405003307633327 +259 128 -.5519299862224963 +272 128 1.8203432439260299 +274 128 -.03733565534384091 +280 128 -.26345465881884844 +309 128 1.0146804434193097 +316 128 .9001910343547354 +332 128 .6900504332364166 +335 128 -.8879621376043334 +337 128 .5323227393811266 +347 128 -1.0461268358008964 +369 128 -.3129856529869968 +376 128 -.4891729678335336 +380 128 .8374202317448873 +393 128 1.9730860307983822 +403 128 -.6060564988889614 +433 128 .5685906437524699 +451 128 -1.3566095406164416 +455 128 1.978281222213979 +458 128 -1.6939843550899152 +462 128 -1.8580514167050304 +467 128 1.1115319235634882 +484 128 .2404424153225732 +489 128 -1.437526140693156 +491 128 1.3891977774292965 +527 128 .6711726928027189 +554 128 1.8382875145864137 +564 128 .4987220713638525 +571 128 .02798662818649636 +586 128 -.958284087533353 +600 128 -1.7644610614528176 +601 128 -.8388270194911777 +607 128 .12244543258265826 +608 128 -.11730673121085139 +615 128 -1.383147229243176 +629 128 1.1609714602909296 +635 128 2.085580679046205 +648 128 -.11085088200316318 +677 128 -.12051998347062098 +701 128 -2.657250870946423 +710 128 -1.1982149391040082 +712 128 -1.665258870603395 +716 128 2.9128376849571884 +756 128 -1.8264603039317926 +757 128 -.3770082148883913 +773 128 -.6451119965336636 +775 128 -.14864587595100703 +777 128 1.3338462104634365 +781 128 .30941256048873567 +790 128 -.15849036443828643 +796 128 1.1501131544748358 +797 128 2.740296628414054 +800 128 -.47068337065408333 +804 128 .07986159510046023 +808 128 -1.3381054407502262 +842 128 .5492948601699212 +860 128 -.8798688735665304 +872 128 1.2771552787811469 +874 128 2.3686675029748976 +883 128 -1.4096444353964417 +909 128 .18200049940614876 +937 128 -1.1271194395864281 +940 128 -.14983279713734352 +941 128 1.6890400512410313 +957 128 .9101169308985708 +959 128 2.0294356356556573 +967 128 -1.484673282185942 +976 128 1.2813246589514617 +979 128 -.19865306671340818 +996 128 -.1728865883296796 +13 129 -.1419076986630484 +22 129 -.9740108555325508 +45 129 .64552293677246 +53 129 .08853991788712454 +54 129 1.312569509096631 +66 129 1.8566461486262464 +75 129 -.1960661626236234 +92 129 .8996469033245755 +96 129 -.932560263794016 +118 129 -.9556511095606144 +122 129 .6718071065859289 +136 129 -1.3041044525803447 +143 129 1.344675722003877 +151 129 -.34144994167700243 +161 129 .6116217057488527 +174 129 -.8342757780358587 +180 129 -.5345189886405356 +185 129 -.2098904166391118 +203 129 -.8820337343056761 +211 129 .9504735027520658 +214 129 .42724959550473296 +234 129 1.0395048605627408 +251 129 .17580155491076177 +255 129 .021131563674762356 +272 129 -.8034765833645413 +290 129 .7204265432126897 +341 129 -.11849556445111352 +359 129 -1.3312179477028696 +363 129 .37704495577391106 +369 129 .4711354739688931 +379 129 -.14661413002842932 +386 129 .6133141429215557 +401 129 -.37575528862277396 +414 129 .20855686966312897 +423 129 .8107850794514188 +432 129 -.5930001355722749 +442 129 .4150077763561918 +459 129 .6890438842315859 +470 129 -.9431170898778575 +475 129 -.6368884997164267 +483 129 1.2266023276764362 +492 129 .9748303609490834 +545 129 -.43551112096683053 +562 129 -.8477364358225615 +576 129 -.08356017462693234 +581 129 -.1743500076265604 +598 129 -.2972683104259076 +611 129 -.34572639782187214 +618 129 -.606316364555282 +654 129 -.45406014500920017 +663 129 -.564715572739808 +678 129 .6838261353944862 +693 129 .3243747168754867 +701 129 .7789677579862445 +709 129 -.8254873034834201 +725 129 1.2127441513127082 +726 129 .6063524825788499 +749 129 -.7740316034552466 +754 129 -.6806719914036822 +756 129 -.10305825396191881 +762 129 .0316497036531871 +782 129 -.19621198740954224 +788 129 -.3721832779724306 +805 129 .7573934856241666 +807 129 -.019565131561270502 +814 129 .5935782044578745 +823 129 .3767601097859583 +826 129 .6374910765106192 +829 129 -.32726958473487877 +842 129 .6495238103964582 +852 129 -1.1060456456839698 +853 129 -1.037535809267434 +882 129 -.6769241053687733 +887 129 .3011353429649936 +892 129 .14700935758753508 +895 129 -1.0688580454395393 +912 129 2.7429236076116843 +933 129 -.3157324407250036 +959 129 -1.0535681057624964 +968 129 .5461181658496609 +972 129 .8561474343505394 +978 129 -.5752618483400879 +989 129 -.9290848847744229 +12 130 -.5067699194295364 +15 130 -1.2857247191214256 +22 130 .5683126956421428 +25 130 .819228954711492 +32 130 .6045901583547295 +40 130 1.0155730694577394 +49 130 -.8676666410349871 +57 130 1.2214644374538257 +65 130 .6004151559721432 +89 130 .7045845528874425 +107 130 1.5708083454284016 +108 130 .4896530225264917 +113 130 1.712290507794431 +118 130 -.4442546113673729 +122 130 -.10409389848444917 +140 130 .5463406643421291 +143 130 -1.0627741563871804 +145 130 -.633782672242426 +159 130 .21542626411015858 +186 130 -.494182408145505 +196 130 -1.3287158858163493 +201 130 .509227780240281 +205 130 -2.002772008724499 +211 130 .10295055557016397 +223 130 -.21376332476224233 +237 130 -.9451395694056096 +241 130 .45782553164903345 +255 130 .8120927069802373 +257 130 -.6413114040069948 +260 130 -1.2552326444761794 +263 130 -1.30615875358917 +264 130 -.4291030015892818 +269 130 -.586373745606477 +286 130 -.010398972567785103 +312 130 1.4898211441276057 +319 130 -.4948162790192123 +321 130 1.2386706289340448 +336 130 1.5466120385756212 +349 130 -3.0382952847313303 +353 130 .5557875596329357 +354 130 -.6261018377366043 +358 130 1.1767845948776798 +359 130 -.10640190184659457 +366 130 .47582432404495667 +380 130 .21750398650372776 +385 130 -.47552938000861583 +390 130 -.3877553762174458 +394 130 -1.9978109117539877 +395 130 -.259838040482857 +396 130 -.13605915762931944 +412 130 -.38868788411269845 +427 130 -.2269358402116652 +432 130 .8504871048129456 +470 130 .828763510067375 +488 130 -.23059199179437295 +498 130 1.056047439948897 +516 130 -.7597814291021472 +525 130 1.1644272791002512 +531 130 .7334864363817987 +574 130 -.07957011146332724 +581 130 -.8142013887156427 +583 130 1.4933466409331615 +590 130 .13007771110666497 +602 130 .5402378741561119 +619 130 -.9195605139143113 +627 130 -1.0574597739062384 +630 130 -.5454117640409968 +631 130 -.03289404298333057 +635 130 .022058377961607378 +652 130 .23000845985276738 +654 130 -2.0610365418558456 +663 130 -.21883313733868007 +665 130 2.003727057738941 +695 130 .3488731845262622 +701 130 -.9928936207061254 +703 130 -.05581817762106581 +717 130 .6425099380139498 +733 130 .2784625703330581 +738 130 -.6023548791621901 +748 130 .9347792507456935 +749 130 .022841214900826697 +751 130 .06956143936389449 +755 130 .3818768110873937 +757 130 -.36535391835957554 +760 130 -1.4396456195438336 +762 130 -.09655126568741934 +803 130 2.345604944921328 +804 130 1.1478123562627847 +805 130 .008626358693953833 +822 130 -1.0009466030191676 +824 130 -.5114963825852631 +830 130 -.11255976179180428 +849 130 .512843421826237 +851 130 -.9359211689944131 +855 130 1.0732876860396898 +870 130 .7066871845660979 +879 130 .9971032517562005 +893 130 .7777013226184981 +897 130 .6914524131626442 +898 130 1.4249296170222214 +902 130 -.3965457005833387 +909 130 .17401192656863798 +911 130 .3460606323997043 +914 130 1.3436883911963733 +930 130 -.6056517499480147 +935 130 -.4321323386034191 +948 130 -.3287956265442464 +967 130 1.686224183550367 +982 130 -.05454522365421205 +995 130 -.4554478261177266 +1 131 -.21847349508504568 +27 131 .22118830575275045 +36 131 -.06010566140418151 +39 131 -.7058230306740942 +41 131 -1.0832832799600436 +72 131 .5912529423717068 +86 131 .14088119242522906 +100 131 -.49294222866560056 +116 131 .6243635149428298 +121 131 2.2128436295688534 +136 131 -1.477281699263987 +155 131 1.0089787263115062 +159 131 -.5449426246667115 +166 131 1.9349216866189778 +170 131 -.052216450765381506 +174 131 .39179077717323657 +175 131 3.127274844712076 +183 131 -.5283630876420994 +184 131 -.5564807438673094 +187 131 -1.7553869056726417 +191 131 2.065454459479254 +207 131 -2.321425952622359 +215 131 -.8472741309402041 +218 131 -.3976922092123656 +219 131 1.548751330905833 +225 131 .3670131137209523 +248 131 -1.0083451717309213 +251 131 -1.3416857077314643 +254 131 -.9518789954894022 +265 131 .3545342539153608 +266 131 -.9322868517580762 +286 131 -.8512002129174085 +295 131 .09616385089742674 +297 131 .08832170072682576 +299 131 -.5457892532661108 +308 131 .7499391850033167 +322 131 2.0881728082692264 +346 131 .38926859763572785 +355 131 -.736731732299868 +400 131 -1.0745732159960446 +410 131 -.05868373957395559 +427 131 .6472580720287789 +437 131 -.7357687304839136 +461 131 -2.171634893166457 +472 131 -.31648597596692135 +482 131 1.4619717985664469 +484 131 1.4571280016676624 +487 131 -1.6045797542854892 +489 131 -.8019217921088402 +490 131 .6580802712896768 +491 131 .8553687900805815 +492 131 .5729092183502739 +497 131 -.8995698294477306 +505 131 1.1704422262094285 +511 131 -1.0264665801566053 +524 131 -.2667165457296362 +529 131 .579808742742496 +564 131 -.6590052705338976 +567 131 .5781698097836717 +572 131 -.9942184312623766 +579 131 -.5637992416185508 +590 131 .1711180908058551 +599 131 -3.1909911110416482 +604 131 -.8174817955348052 +606 131 2.1795089396866385 +609 131 -.14071547094568596 +613 131 .09378332498056413 +630 131 -.17790612110650758 +645 131 .2261334917542448 +662 131 -.5332054858789935 +693 131 -.7517168485455533 +697 131 -.19036025957849534 +699 131 .24689221847715753 +705 131 -.05885617780961887 +727 131 -.3362591991797765 +767 131 2.0955995217015153 +772 131 -2.099438804973615 +781 131 .7396313320327079 +782 131 1.943185803945982 +793 131 1.1373456469443748 +794 131 2.781609029875821 +812 131 1.226602545741834 +816 131 -1.967711559305621 +827 131 -1.1675311905180352 +844 131 1.7109387968872296 +852 131 2.4319501349483668 +864 131 .26116199281946645 +885 131 1.1468964171141407 +889 131 .08551385699586161 +900 131 .34851677120637997 +914 131 -1.5024577954351779 +927 131 .6678904380429177 +936 131 2.4430625698168704 +940 131 -.0718334762710358 +943 131 -.10795246217476817 +976 131 1.4131496566422945 +978 131 -2.1952785674210142 +997 131 .6389686436860014 +2 132 .8500987213355954 +33 132 -.25012468683431816 +39 132 .8315007916867799 +50 132 .6471349072171139 +83 132 .4752434065717682 +86 132 1.081246163029704 +93 132 .6725068770316855 +95 132 .8275874312836184 +109 132 .35579431275589274 +122 132 -.4718526893881885 +125 132 -.828659972897636 +129 132 -1.7855608067118989 +130 132 -.5647004902159284 +153 132 1.231279674392338 +162 132 .8650030933903913 +169 132 .7718333612451381 +188 132 1.4869059861251095 +192 132 1.2948602850179178 +200 132 .5557258918125105 +201 132 .9405298515019584 +203 132 -.9443968179389386 +206 132 .7698210641747288 +209 132 1.925476273938467 +215 132 -.5318568402486259 +217 132 -.924273123464622 +228 132 -.4756365521109382 +229 132 .1597501692747632 +238 132 .7636975332044261 +240 132 -2.7922987643433848 +248 132 -1.7005296345080705 +270 132 2.3836017626847292 +282 132 .8831448813799199 +285 132 1.3914493824187235 +286 132 .5671414684196682 +288 132 -.923214587309566 +293 132 -.9530621760845248 +299 132 .5759181090648756 +305 132 -.47654875232086147 +313 132 -.5622347273764906 +319 132 .8154948262733596 +326 132 -1.519160795721561 +330 132 -.1153960728617007 +333 132 .220325689026902 +336 132 .9009953828540347 +344 132 -.8604721595105164 +375 132 -.7023794939779147 +378 132 .5751722265784086 +401 132 .46370093930779077 +405 132 -.3187426792634776 +410 132 .38267943627411016 +428 132 -.7647559549457245 +440 132 .7747606192845945 +476 132 .050874215616794324 +488 132 .22600218000581807 +491 132 -.3797659374168023 +520 132 .08125387181301513 +523 132 -.3460635465516523 +536 132 -.6523732454944826 +545 132 .29654750917580136 +557 132 1.6276296184725603 +563 132 -.20588833377143714 +569 132 .553272136592989 +572 132 .4529580351594902 +586 132 .8675665429988195 +594 132 -.5307865072234748 +595 132 .19247101001919348 +606 132 1.161562979894227 +608 132 1.6758233147110455 +629 132 1.0215581111842749 +632 132 .4862837554102107 +649 132 -.2246988089570907 +662 132 -.596905763879777 +670 132 .7565043477867341 +677 132 .2763599930219077 +703 132 -1.3324699860083045 +715 132 -.03038760964249662 +735 132 .4743849637661606 +773 132 -1.2787624101013304 +777 132 .4348425402083669 +814 132 .3949064515469844 +834 132 .6862671778925414 +836 132 .5791815365661088 +841 132 .18877061066936848 +860 132 -.606342810381069 +903 132 .5819577354795956 +913 132 -.6174479746248316 +925 132 .32350613161027436 +930 132 -.6668509480290716 +933 132 -.34324070839610216 +939 132 -.2060464057147746 +946 132 -.09733721925087876 +947 132 .7316061711443986 +956 132 -.012109934170630082 +958 132 -.692169220756417 +968 132 -.5714095662296573 +998 132 1.655795068591459 +5 133 .40014654350122153 +7 133 1.0317415593653592 +14 133 -.6317064404017017 +15 133 .3134166682970636 +29 133 -.03372952380648526 +33 133 .0166831477313822 +40 133 .1572153184696367 +54 133 .023722626818952444 +57 133 -.3050995841667287 +61 133 .4043963972315706 +63 133 1.5856051613244433 +67 133 1.0616904670363436 +68 133 .6792091143082882 +72 133 .643033911039559 +86 133 1.5304349515381968 +92 133 -.5037361137680372 +115 133 .8003460824286422 +144 133 .08544924892163601 +153 133 -1.6432386127635454 +155 133 -.5190657335687143 +158 133 1.2735434462032211 +177 133 -.6866553475994537 +181 133 .14885126959304001 +202 133 .2338756613931863 +210 133 .11435813529654162 +220 133 -2.2077222669643044 +256 133 -1.5819316313247729 +260 133 .2657102481228766 +270 133 .6648226801961484 +274 133 1.3312947176739207 +277 133 -1.1318838491169632 +281 133 1.4364060020058966 +290 133 -.09023671691316876 +298 133 -.00854252558395599 +312 133 .9704650153329217 +318 133 2.253106840190022 +334 133 .1963400842076326 +338 133 .2542529647187937 +344 133 -.04728913224941064 +346 133 1.0756062962742299 +348 133 .9187510680909292 +356 133 -.15061816245828466 +374 133 -2.781498132983457 +377 133 -1.4618987707861524 +389 133 .6124674793965929 +396 133 .5613908833871777 +412 133 .4743857711658263 +418 133 1.4662268299038557 +420 133 .22164570133831663 +426 133 .8874956160972496 +436 133 -1.3318976104239926 +438 133 .5524747006162898 +451 133 -1.643340403686945 +454 133 -.01476323463804928 +455 133 .744550550125064 +461 133 .9376682383663607 +473 133 .4491581144145265 +480 133 .5117804426689254 +510 133 1.6835578801369784 +514 133 -.3029757896180073 +517 133 -.007502540049473205 +541 133 -1.1252549699312109 +545 133 -.3532953047267616 +552 133 .7728711901789778 +567 133 -.22724192989160685 +574 133 .059226510441354775 +610 133 -.42364026998551274 +622 133 .9357387283744503 +630 133 .9807486402261352 +640 133 -.6623475731629309 +665 133 1.0681054432538661 +671 133 .8267625718183351 +687 133 -.6825136996081059 +698 133 1.8708032211159447 +703 133 .7492673943795755 +709 133 -.6619018926612822 +721 133 -.5050448588732888 +723 133 -.8264121635188111 +726 133 -1.0322280505075456 +733 133 1.6356111695437627 +740 133 .9233484630078261 +750 133 -.48798156122132863 +761 133 -.12934309708292108 +762 133 1.1939276671461234 +772 133 1.6793546471247205 +795 133 -.5561247666975946 +820 133 .0405626220711985 +827 133 2.0057090972624367 +832 133 .03824198616974536 +833 133 -.044088828207674916 +837 133 -1.3014599874738373 +839 133 -.5198257913380475 +847 133 -1.4875288936499167 +849 133 -.10790832118106958 +868 133 -1.8335628110474507 +871 133 .3596347578912967 +883 133 .45961329858253763 +884 133 .5911139111713941 +891 133 -1.0452308877754837 +895 133 -.0812013507337341 +915 133 .16054852559105115 +944 133 .14214676556981204 +957 133 -1.0666471853264072 +969 133 1.6413570047028185 +981 133 1.7725268025097602 +1000 133 -1.870431430744833 +10 134 1.8612522715814483 +12 134 .004508048017895335 +15 134 -.18539781874121872 +18 134 1.2512964779614681 +35 134 -.10917852057829544 +36 134 -.09024864388348143 +37 134 1.0576420211277926 +48 134 -1.703967328708308 +51 134 .33535312131913353 +73 134 -1.508724510571653 +80 134 1.5529559358948744 +89 134 .7472346127784503 +119 134 -.4103255737945239 +123 134 .06970541764864308 +142 134 -.022719151483589384 +147 134 -.4344198557485459 +168 134 1.0672723466754876 +170 134 .7284511269036149 +182 134 -.2094471270932369 +185 134 -.18352659062607304 +197 134 -.15050875560494575 +212 134 -1.5244362344448525 +218 134 .8320579674193503 +221 134 -.9995373647782078 +223 134 .25256878554528595 +231 134 -1.2774108704725349 +232 134 .8994081922691826 +233 134 -1.5595490819989528 +235 134 .993044886457525 +243 134 -.6746843169492762 +244 134 -.09330330986808033 +264 134 .13814797609681823 +267 134 -.13326261896166502 +313 134 -1.7749134841437773 +314 134 .10778628477685386 +318 134 -.21646752234266636 +319 134 .2602793760260145 +333 134 -.008158166698891064 +335 134 -.7133922891297653 +336 134 1.3062331562311955 +379 134 -.0536796555185214 +389 134 .42630752868226046 +392 134 .036564885706576025 +394 134 -2.072475142065153 +400 134 -.6366686718414957 +406 134 .4512089298912342 +408 134 -.4915911139549567 +419 134 -.1002957173726332 +431 134 -.23821857488892714 +437 134 .1640627726034855 +466 134 -.8202189061444084 +512 134 -.4225283717988846 +513 134 -.1549846555067896 +519 134 -.7025858451012426 +554 134 .6451656105388928 +570 134 -1.5419518987185696 +572 134 .6415888809875964 +582 134 .3829247140328851 +585 134 .25965466555079464 +597 134 -.5953370468783122 +605 134 1.6102991778228493 +612 134 .2734014801994946 +617 134 1.3481450493268055 +620 134 -1.0878269197688275 +631 134 1.0623792459348371 +635 134 .7388423001879368 +653 134 .29167713415131746 +670 134 .24824744431402862 +724 134 -.24037902569906022 +739 134 .4080891559979041 +742 134 1.706740476422308 +745 134 .7178410385373095 +761 134 -.3240702142656169 +769 134 -.22922982518338778 +782 134 .3944886767667857 +793 134 1.2464175582862824 +795 134 -1.0303072657279966 +796 134 .6637042951718712 +803 134 2.036357175103543 +816 134 .43002884770816396 +840 134 -.8694759127857866 +868 134 .559616183960299 +870 134 .7256414335326778 +888 134 -.27255288946089246 +898 134 1.2061487542887257 +900 134 -.1516608310110827 +901 134 -.1734333131509115 +904 134 -1.0406938375131396 +910 134 .3674755494889552 +934 134 -.6627953244237372 +976 134 -.22836919698855807 +980 134 .6661497093087776 +987 134 -.8993390632617716 +990 134 1.3321195877395027 +992 134 -1.3196079255569857 +999 134 -1.5194648948507368 +6 135 -.1740822052096646 +10 135 -.5436025056663899 +15 135 -.5895292639295829 +18 135 -.032930514177920395 +27 135 .5143852438963686 +41 135 .5251836125605287 +51 135 -.1770653194446703 +60 135 -.437402722571001 +63 135 -.017634317747018582 +69 135 -.2024702342055383 +80 135 -1.213545230507743 +106 135 .466116599949049 +110 135 -.30888209906478825 +127 135 -.520072556750951 +146 135 -.3176478566020749 +158 135 -.05940635786735819 +167 135 -.07529024011508681 +173 135 -.17774086020056767 +191 135 -.6334451154557699 +210 135 .31303911281961794 +226 135 .740341798094954 +233 135 .680633605933384 +241 135 -.543474131602985 +249 135 .8496406991845025 +263 135 .9419927475088035 +267 135 -.8114902582716015 +272 135 .3700945519229369 +278 135 -.2695161399261525 +302 135 -1.146832871591891 +321 135 .21526503109353373 +324 135 .836091030358388 +330 135 .8350920218397234 +353 135 .0978182317582284 +359 135 1.0765068349680067 +398 135 -.6301695897725095 +404 135 .901220689688802 +409 135 .43260619798351196 +430 135 .12611146125741385 +432 135 -.6528934420397916 +434 135 -.07248056179866885 +438 135 .0933761488157738 +441 135 -.7543963183123792 +455 135 -.5072801472681742 +461 135 .9153546709791711 +469 135 .35842736999792835 +476 135 .05393991696777467 +495 135 -.19372506165320247 +514 135 .1321073817619283 +519 135 .9466277311208461 +527 135 -.34526601887068376 +528 135 -.34853772310957015 +537 135 .2255157187612326 +545 135 .05897872086945996 +564 135 .3487972231544 +568 135 .34758502394118146 +574 135 .2872745156649777 +594 135 .41969411909086635 +603 135 .2159176550798136 +609 135 -1.0051474597818362 +610 135 -.46885366299715087 +619 135 -.24413746067397696 +628 135 -.030443339280344296 +630 135 -.33881612615405443 +654 135 .2747574422280076 +664 135 -.3482854594439788 +678 135 .18347114277773474 +679 135 .18417731836979134 +684 135 .5213346260995294 +694 135 1.1939553625233763 +697 135 1.0296189502151154 +702 135 .37431813761868377 +707 135 .40819349533594873 +711 135 -.3767948682347097 +724 135 -.11175901656711135 +732 135 -.1388035976947936 +734 135 .41637429143080085 +737 135 .15484086659590598 +756 135 .46284985984606375 +758 135 .3984444242357695 +776 135 .16797334824077792 +801 135 .5807540408223105 +840 135 .5425252045203294 +842 135 -.4894071662869378 +843 135 .7403435333540278 +871 135 -.20953699061577782 +876 135 .6501604120684213 +879 135 -1.1759309798067916 +883 135 -.3459443602286414 +887 135 .49345594966848233 +913 135 -.11253983408597462 +917 135 -.49072591173075747 +921 135 1.0948368425965072 +925 135 -.3640519585298121 +936 135 .3444554916197286 +940 135 .3705457652101679 +954 135 -.42614863889022075 +960 135 -.12462260385154263 +964 135 .6197642197807868 +968 135 -.12302325092329919 +970 135 .2659635541062506 +972 135 -.5019106395570944 +980 135 .6144787238394601 +984 135 -.4302193958580383 +988 135 1.686237495078082 +990 135 .17472790307132868 +992 135 .1783523449432881 +998 135 -.7242573324835904 +2 136 -.35282989463079545 +4 136 -1.3008882201379153 +18 136 -2.3892496779985253 +49 136 -1.0488948475834259 +58 136 1.629576600366728 +74 136 -.8352902490674284 +75 136 -2.266945422974935 +86 136 -1.3451799124788024 +87 136 .6789108795349729 +96 136 -3.746989611747309 +113 136 -2.933952292036078 +118 136 -.870712444827628 +120 136 -1.7105350374365254 +121 136 -1.6392704047367073 +134 136 .6463353820361302 +148 136 2.079069177212088 +156 136 -.07222432213759239 +160 136 .16528121709906665 +190 136 -.8021766636054553 +203 136 -1.3646411527644673 +213 136 .003820988769981701 +239 136 .7281172586267213 +259 136 -1.6162186179450324 +263 136 1.6133550306958981 +271 136 3.0218392410840744 +272 136 -1.1750923347281284 +273 136 -.13906204087736418 +279 136 -1.7940150488451714 +296 136 .5703406657661166 +301 136 -1.2697300111840932 +304 136 .47210597375385843 +306 136 .2136416405772239 +308 136 .18795290610756119 +313 136 .9661802841355126 +330 136 -2.65191540283388 +333 136 3.0578390421490425 +337 136 -2.254178753139682 +364 136 -.9401008107979123 +383 136 .20133517504771697 +395 136 1.7645928377263103 +401 136 -1.867357472603807 +405 136 -.3022243542743715 +419 136 -1.7907203588703782 +427 136 -1.0501820236461952 +429 136 -2.072195741524676 +436 136 -2.249108038444785 +441 136 -1.1580822912614233 +460 136 .8935887653216757 +480 136 -.5057406524666349 +482 136 .8302795058076057 +491 136 -.8502479722541001 +510 136 1.4840424267887042 +514 136 -.7065750042590653 +516 136 -2.345292156483478 +519 136 -1.2262622042963838 +525 136 -.6446217614782908 +544 136 -3.4598830058581043 +562 136 1.0995003979286724 +563 136 .9887184371739368 +568 136 -4.333777687999061 +581 136 -.5663908226203431 +593 136 -2.250543168324528 +613 136 -.5318335967380878 +624 136 -.3427820927761017 +628 136 -1.0740584143450012 +630 136 1.801665795330304 +632 136 1.0405651948378853 +666 136 -.47396749931633325 +672 136 .36703810752554283 +675 136 -2.802609748257179 +680 136 -.16222925677783298 +681 136 -2.8349750834953586 +709 136 -1.4510034923620554 +711 136 .606332045952332 +728 136 .026993782151768016 +733 136 -.17903348874149944 +738 136 .4659040698867107 +756 136 -.42104085465303087 +781 136 -.377521417847161 +784 136 2.3160090671510307 +785 136 .5929632966865873 +787 136 -.6539533658622239 +803 136 .3238442380097317 +808 136 3.6864275636931265 +836 136 .10638446433473478 +849 136 -.6240212747906945 +864 136 .6597952368906309 +868 136 .14424047543062077 +869 136 1.0757846476470365 +886 136 1.3081453294590304 +887 136 .06991178739907457 +891 136 -1.760832204605775 +907 136 1.3117671300200728 +937 136 .3218562619722306 +943 136 -1.2984652680712905 +945 136 1.6096650156103902 +954 136 -.7169321187923013 +959 136 -.670195759379657 +969 136 2.2592200624919165 +977 136 -1.307158230461975 +979 136 -.08244412100746606 +1 137 .28247666507599 +5 137 .1512683935658408 +27 137 -.9110410523090148 +31 137 1.4237975463854924 +32 137 -.01449930932554912 +42 137 .583147320964518 +47 137 -.73963872513386 +50 137 .6900290872720005 +64 137 -.9109978584433298 +66 137 -.9361146396364399 +83 137 -.7776811646472099 +98 137 .11624481958127195 +113 137 1.9253668416494036 +132 137 .8781006910543999 +143 137 -.38747072618958145 +146 137 .6761303946393797 +166 137 .3355069921708059 +169 137 1.148289086812361 +176 137 .1305066487316992 +202 137 .8658964893589579 +204 137 -1.2384901913508108 +206 137 -.5807840012586785 +207 137 -.034833213901030426 +209 137 1.0685580870596132 +217 137 -.6708668139436555 +221 137 -.4624061873739769 +222 137 .23977197543472367 +224 137 -.14818525127089535 +225 137 -.4546043280923808 +235 137 .9730862970262539 +253 137 .6197630342621127 +267 137 -.3324720028673097 +278 137 -.1777864446112184 +286 137 1.4829613361443943 +303 137 -.14748203320076447 +334 137 -1.353497571567728 +376 137 -1.4575316494205681 +380 137 -.695295498240303 +384 137 -.4279664212868907 +397 137 .048387869643739846 +416 137 -.8810890141579979 +441 137 -.8372001470838298 +454 137 .40615222651643246 +476 137 .708048545972441 +493 137 1.1925540017897398 +506 137 .9508383122900813 +511 137 .8962297525394874 +515 137 -.05587952577488753 +525 137 1.3907020852533896 +531 137 -.18904595569763466 +541 137 -1.2338707200798675 +550 137 -.10649374084711723 +553 137 .3875514056613999 +562 137 .45770314142189994 +573 137 .49745713934003644 +575 137 2.538308458294465 +579 137 -.5269002797246345 +582 137 1.0808971472171132 +589 137 .5536036058757554 +627 137 -1.005520467928985 +638 137 .8783706368407376 +665 137 -.015267403056502662 +666 137 -.5868123261277867 +669 137 -.05916579545200712 +670 137 .5874863229565305 +671 137 .9835469775717505 +675 137 1.7173697488340998 +683 137 .043817420908002114 +689 137 1.1775245701852606 +711 137 1.3354287248288232 +715 137 -.7201102813710991 +717 137 .8945888532881016 +726 137 -2.075871398537674 +733 137 1.0644183680393227 +736 137 -1.1417003147187192 +741 137 .34109853002881485 +754 137 -.8873383980044535 +769 137 -.16273101953695157 +774 137 .2836170748480642 +820 137 -.25894800220930875 +841 137 -.4829423622185619 +884 137 .24300906090943147 +890 137 .43248757155520234 +897 137 1.3694795340776018 +900 137 -.15568357365617874 +909 137 -.1779273452616238 +915 137 -.03820077482091358 +917 137 -.1277212900417257 +922 137 -.9058333198065573 +927 137 2.1627557157713233 +942 137 .4009920262514333 +957 137 -.950471844487219 +963 137 -.9942375974554467 +972 137 .6428171161218806 +980 137 1.671154616957231 +990 137 1.791371644423116 +995 137 -1.4122877394513786 +996 137 -.30726913313222554 +7 138 -1.8069457096375354 +22 138 .599491814218691 +32 138 .999898903977138 +37 138 .24613493204318804 +49 138 .48192688965619995 +55 138 -2.073910751145062 +64 138 .454490567951223 +94 138 .5063471411155902 +99 138 .7405880238355966 +102 138 -.2968878324638351 +105 138 .5971407519504108 +108 138 .2664097290760159 +119 138 -1.3790448496621084 +142 138 -1.0530158551805324 +144 138 -.8970840994714263 +151 138 -.17262821879725146 +163 138 .18658515598083347 +172 138 .6297493511951722 +182 138 .3150666472583789 +207 138 .4669615113773149 +217 138 -.4681580069876308 +231 138 -.6345051965429938 +235 138 -1.2866087476486108 +241 138 .5114497073797869 +244 138 -.48309842806636216 +259 138 -.002346070104901305 +264 138 -1.7136330368039512 +275 138 -.8407530859094734 +284 138 .24852479523839263 +290 138 .24697246786668925 +317 138 1.2618371967158337 +323 138 .11789823146183603 +335 138 .6726336969151587 +362 138 -.06525258615062993 +373 138 1.8040556484394465 +390 138 -1.4260797191499894 +392 138 1.472060063615969 +394 138 -.7070356929627953 +397 138 -.15598798322670998 +409 138 2.1688281161336986 +418 138 -1.9551806017857811 +421 138 1.0507581954082292 +448 138 -.8049531380487361 +472 138 -.8007541208868868 +475 138 .2506473939035967 +476 138 .1240491069681883 +478 138 .4595307743431178 +496 138 -.6784910065037765 +502 138 -.989923190739566 +503 138 1.1154774366805027 +508 138 .1700518530641496 +516 138 -1.1904963383336518 +522 138 .8582430189754721 +526 138 .8814573825351394 +532 138 .03895031253656399 +544 138 .660040671294099 +550 138 -1.630499478675621 +555 138 .5038505069423846 +566 138 -1.7832392199985965 +578 138 .6058518999039824 +586 138 .1143856334806204 +589 138 -.20037161504784498 +605 138 -.31764975995358236 +610 138 .631451487504871 +622 138 2.2313743313813723 +623 138 .11586944505067878 +638 138 .37166392821116856 +643 138 -.7476111956170088 +672 138 -.3387581758332481 +679 138 -1.3371626476688205 +680 138 -.9989918715417537 +698 138 .7111495668965574 +699 138 .0457280124507124 +706 138 -.2728695962843462 +716 138 -.19857016705285832 +727 138 2.0012569379121947 +739 138 -.8102129922458103 +744 138 .10220033232301287 +748 138 -1.4281765329379728 +753 138 .041663526920169974 +755 138 -.2783366909354921 +757 138 -.4613216850719878 +771 138 .48638684699503365 +780 138 .12978903137045608 +784 138 .5246164111618647 +787 138 -.0935846888846591 +799 138 .5902257431288396 +803 138 -1.11964176957092 +805 138 .6604987502340786 +813 138 -.8728873904138519 +826 138 -.529562267575476 +838 138 1.687379415439552 +844 138 .1468430815440459 +852 138 .1890035112603573 +857 138 -2.4983429302197195 +878 138 -1.425257407929229 +881 138 -1.1817390868785085 +890 138 -.5349740112524445 +902 138 .1766204173774214 +908 138 -.12682977894143183 +912 138 -1.0819290234344074 +914 138 -.4276756885890141 +922 138 .08658551509466285 +931 138 .708471930952681 +938 138 -.11900540030526392 +952 138 .943124846440752 +960 138 -.12489870831656742 +962 138 -.09623069044763059 +987 138 -.06257455608293175 +9 139 -.16947076588645346 +27 139 -2.7741583237087846 +30 139 -.5804645385580609 +51 139 .011869375644974006 +62 139 .18708305662559951 +72 139 -.2821622397629503 +75 139 2.129484871160291 +77 139 -.9682370495469681 +90 139 .6210057290468776 +115 139 -.029055230469180047 +135 139 -.9608718357708614 +141 139 -.2972922318120121 +172 139 .8019919141585656 +180 139 -.5807783094675545 +201 139 -.23279295204268047 +202 139 -.11818900256897474 +206 139 -.8785567474399434 +221 139 -2.3871400844592916 +246 139 -.6441170283694192 +252 139 -1.119433311151166 +254 139 1.2304390057164853 +265 139 -3.187763069181238 +288 139 .11610193814847927 +293 139 .8369287332969435 +296 139 -.5234576267419323 +301 139 -2.9864946391467693 +303 139 .5486750017069005 +328 139 1.3142326827348538 +335 139 1.4355636601029147 +336 139 -1.041956276696248 +360 139 -3.9154113905149677 +365 139 .10360627978020356 +368 139 1.3961764119393025 +371 139 .05690100998004071 +378 139 -2.4257593143440324 +389 139 .9135216360174712 +405 139 .10448926809759046 +409 139 1.8062673665012663 +429 139 2.070214709392373 +430 139 1.377477360402715 +446 139 .9360661985235067 +448 139 -1.8931847259323502 +451 139 -.33472090010794786 +466 139 -1.5466326877643342 +469 139 -.7606171649954933 +490 139 .19918274800189903 +500 139 -1.97929901852581 +510 139 -.88758711811264 +513 139 2.2482127868054507 +519 139 -.7770414712837074 +521 139 1.023107730686009 +526 139 .8609578617660225 +534 139 -2.3417153287474517 +535 139 -.38595731998833693 +536 139 -.15228930913110322 +548 139 -.42329053027367997 +556 139 -1.11248847454833 +574 139 -.449555150467463 +581 139 1.313669766435756 +583 139 -.29251200037454195 +586 139 -.42416008087703383 +595 139 1.4403226664038553 +610 139 1.9945579176697112 +627 139 -.040796136736219735 +629 139 -.5292079482672407 +630 139 -1.931033829552608 +641 139 -.2873593516781581 +667 139 3.2190753441431816 +668 139 .8854600683536387 +676 139 .8985385289024791 +682 139 .2643406318537779 +686 139 1.0596419601816174 +688 139 -.08615560318743515 +732 139 -2.518739101482543 +743 139 1.3346531605712826 +744 139 .9995947576683871 +745 139 -3.7102064874341285 +747 139 -.7047613892308966 +765 139 1.1744556137182838 +775 139 -.26378393051841015 +792 139 .6193626871440095 +795 139 -1.4440048250080026 +796 139 1.730079120277826 +800 139 .8688388041278073 +812 139 -1.7335664889832108 +829 139 -1.3010854754854229 +849 139 1.306937971328727 +855 139 -.14904399054937348 +866 139 -.09341234998528247 +868 139 .33345094992629787 +869 139 .27018703463959504 +871 139 -.4904850885616939 +874 139 .09182723989616247 +894 139 -1.8775340417227084 +896 139 -1.9314944873207769 +903 139 -1.662046628210022 +907 139 2.1156567670920183 +921 139 -2.1311993784255034 +924 139 -.7652774918927071 +928 139 -.19951477506211762 +929 139 1.9332384151820805 +946 139 -1.4054966885411038 +951 139 1.7628356526367648 +961 139 .025099573496739008 +994 139 -.6366349722150823 +11 140 -2.2272056895813943 +12 140 1.315112214741498 +13 140 1.0057173386460545 +34 140 1.8207129846096712 +35 140 1.1668738463562627 +57 140 -.21586466351809294 +60 140 .5027421812068689 +72 140 .28733702766015223 +93 140 -2.1169570725327027 +115 140 1.3707742415194628 +120 140 1.1240179880005752 +125 140 -.1547722613690467 +136 140 -4.147044397598935 +140 140 .6843782301009698 +145 140 -.13296064465378113 +151 140 -2.6392910502751126 +159 140 1.378975395943657 +165 140 -2.278178015674726 +188 140 -.9028996279970125 +191 140 -1.7669951914314086 +196 140 -.546382376993729 +210 140 .8458932802874937 +223 140 1.3580881370629445 +251 140 -.62500576863134 +270 140 .4391418903119917 +286 140 1.8738173808062275 +288 140 -.10117113696798424 +289 140 2.7815342912695713 +291 140 -.33749650970414297 +294 140 .823548462280285 +295 140 -1.190950528377317 +298 140 -.4977256340040463 +308 140 .6140947331229888 +322 140 -1.6042633859718047 +329 140 -2.1669404912000663 +333 140 .8658741833414423 +346 140 2.157870386132505 +350 140 -1.4737101139813114 +372 140 3.160623962932827 +373 140 -.7883503886123064 +374 140 -3.870728284603956 +382 140 1.0829403254192884 +395 140 .019365031480314016 +397 140 -.803540211445643 +422 140 -.4998225392486286 +480 140 .7202598555417139 +484 140 .6609049792174782 +492 140 2.3303332309169873 +495 140 1.5251359705414445 +496 140 -.7196821885638198 +504 140 -2.3561711508952388 +507 140 .09912772557164354 +526 140 1.691789394073267 +527 140 1.549109749506891 +540 140 .5017147733080118 +553 140 .15093563631106455 +560 140 -1.0611067625992645 +564 140 2.943375661488642 +578 140 -.269468074783408 +585 140 1.3269035824707827 +601 140 -1.1112773701257188 +603 140 -1.8628213831391363 +630 140 -.17453872639873072 +646 140 1.9953500440547336 +659 140 -2.1111901478551234 +663 140 .8130283334842988 +674 140 .038369998664811875 +687 140 -1.1926027984933516 +713 140 .6881226874491845 +746 140 .5802218875510888 +747 140 -1.2146219652146435 +748 140 2.7408938225863797 +759 140 .8346902561729691 +764 140 -.8897834398127378 +769 140 -.1688934517164985 +777 140 -.4831991313904114 +778 140 .745297677491426 +802 140 -.35209402786282584 +806 140 .4138784829707229 +825 140 -.4432543367022636 +829 140 -2.0896162820070288 +833 140 -.756768792589343 +846 140 -.5735979602191709 +853 140 1.4621639156054933 +857 140 -2.236260621819195 +862 140 .07422316690378435 +867 140 -.741173215162634 +876 140 1.2895616375052585 +880 140 -.2910656916387692 +890 140 -.8291748016285896 +900 140 -.5662240546736671 +906 140 .7040317546518037 +910 140 2.2728687187164756 +914 140 .8467655641141886 +926 140 -1.8779690529646091 +933 140 1.4116604507707915 +954 140 2.0139994130000867 +959 140 3.3288961766020737 +978 140 -.19261219353678263 +980 140 -.07951910084792269 +983 140 2.1868032625962726 +986 140 -1.7463754716930833 +989 140 -.7640122205750352 +3 141 .8735422273452538 +13 141 -.8236680438084275 +21 141 .15204528036917597 +25 141 -1.5186334596698825 +26 141 -2.116688465072954 +32 141 .022926955635601952 +34 141 -1.3233083653774138 +36 141 -1.6330106731136396 +37 141 1.2648722861689066 +53 141 .9532454007971196 +62 141 -1.2036061803047093 +64 141 -2.58517455397733 +82 141 -1.5285543520886793 +100 141 .04221750171073288 +125 141 1.1019065815314495 +133 141 1.2802688155739725 +139 141 -.06636422290167436 +146 141 .2602581358940683 +165 141 .8137089216157524 +168 141 .49761408116086303 +175 141 -1.9108540800121878 +210 141 -1.238686690589005 +220 141 .8521098694735881 +231 141 .5860247682414719 +232 141 .4561381790069189 +248 141 -.41103023082527207 +252 141 2.1159056425731513 +271 141 -.6952291947345075 +276 141 .9314344422960827 +280 141 1.5066969366321898 +291 141 -.5379080288590868 +300 141 -1.0435828869758565 +306 141 .18133628279150127 +313 141 -1.035801698309012 +334 141 .6698062380493802 +336 141 -.8549558863944708 +347 141 1.1486333853180235 +361 141 2.2176370714892735 +370 141 -.23067472759606808 +371 141 -.7495748641217972 +380 141 -.19179371425161365 +390 141 -.0929984973161661 +391 141 .5813699586626274 +393 141 1.2414087993746497 +409 141 -.2620597448210216 +423 141 -.1968681927519928 +441 141 .5833287559187913 +445 141 1.331216068575683 +484 141 -.017102804697464752 +498 141 -.3989423019310482 +507 141 1.8073037132830794 +512 141 .43190775182413865 +524 141 .6988454456399626 +527 141 -1.8852083765626177 +544 141 1.2827300543980327 +545 141 -.4168797107366178 +561 141 .8287065452119858 +566 141 -.15281062806707357 +570 141 -2.3554613187836035 +575 141 1.7430855322306547 +582 141 .7427094024617065 +583 141 .9479254016247829 +585 141 1.204448382527482 +588 141 .08058347646063423 +590 141 -.08791992735370663 +599 141 .041831460015138454 +617 141 1.51746438418001 +620 141 -1.7425397212763625 +623 141 .928760273124448 +627 141 -.06976982526239353 +643 141 -.049471083468167545 +661 141 .19678033414166102 +682 141 .9246395558661492 +684 141 -.9230058817375647 +692 141 .7173891476867569 +693 141 .011595537497801608 +695 141 -.1655146869412223 +710 141 1.1919412688485662 +737 141 .8836704509218034 +739 141 -.1155384083594547 +741 141 -.3336341716284751 +743 141 .08831819839739338 +744 141 -.5026971699495156 +746 141 -.023923208039117842 +748 141 -1.01218362546574 +755 141 -4.049846670737788 +770 141 .9473386124356399 +788 141 .644211752613453 +795 141 -.023306700784257273 +796 141 1.6355773134426683 +797 141 -1.3600169621852178 +803 141 -.17482835083314202 +828 141 -.7507310577572142 +830 141 .1614583203867529 +834 141 .7249185237461477 +838 141 -1.481303445457995 +847 141 -1.2030360485438192 +853 141 -.641059091161413 +873 141 1.7697354884376855 +882 141 .024855234442986048 +892 141 .4507914532424366 +897 141 1.1723572024244429 +901 141 -.78954476564652 +911 141 1.0006916745541374 +913 141 1.9313372224490404 +914 141 .5824242455783979 +917 141 -.038986268432878474 +920 141 -1.553604445525638 +925 141 2.332598478539055 +929 141 -.15759078785753242 +932 141 1.2349356007344598 +933 141 -.5501915837744173 +942 141 .9101013030176834 +945 141 -.7250876286661744 +947 141 -.7573620605890627 +948 141 .5722428606807832 +949 141 1.5535186340152012 +958 141 -3.6093743644667717 +992 141 -.13380656717547418 +993 141 -.07789607160606425 +994 141 -.8124031067640496 +997 141 -.31370138085661703 +2 142 -.2900754530470144 +3 142 1.9574320729453512 +27 142 3.056470568671684 +30 142 .40750850503348734 +37 142 -.34965741767111325 +43 142 1.2208867480692784 +48 142 1.1463798820075908 +50 142 .4555683230527727 +56 142 -1.834881033938099 +59 142 1.5266431301525174 +67 142 -1.3457686728755258 +77 142 2.767492260984853 +92 142 .817756194310911 +104 142 1.0469938081479944 +107 142 -.05144161979692666 +112 142 2.089736360819868 +121 142 -.2343966891411047 +125 142 3.2762405100891328 +126 142 -.05131965084281594 +143 142 -.39920491653183265 +145 142 -.1699643332614268 +149 142 -2.527783663257148 +150 142 .11760131635874092 +159 142 1.6971466784647595 +172 142 -.46678522143580137 +180 142 -.2513469713325663 +191 142 .6858683780872806 +196 142 1.3804934066133734 +205 142 2.747832309510831 +213 142 .4788367757953571 +217 142 .1447792622825056 +222 142 .5199426220100645 +244 142 .9094634825775966 +251 142 -1.7181099697352626 +262 142 -.30327982980387014 +271 142 -1.4559917483137559 +274 142 2.9918279488284782 +299 142 -1.4539669841055636 +303 142 1.792904322440203 +311 142 1.3210551708709926 +319 142 .3787236334943964 +326 142 -.8681070291098331 +329 142 -.031304716562624096 +331 142 -.12027659071429203 +332 142 -.3007348549116195 +357 142 1.7011679728827438 +365 142 .8758096115555479 +368 142 -.2835014596924436 +375 142 -.7806585744960877 +379 142 -.26579045193518536 +382 142 .8776966692172207 +423 142 .7442982913609335 +433 142 -2.2053233716457497 +439 142 2.2281099976410466 +478 142 2.2343480451396958 +497 142 -.47489461621710244 +519 142 2.275189502628462 +552 142 .4107598431644353 +554 142 -.8667562561154728 +558 142 -.25360165776604937 +577 142 -.4345328808563334 +579 142 1.00855750535026 +580 142 3.0925364360330216 +591 142 2.12800131831203 +604 142 -.8421058333110214 +605 142 -1.1307779091818175 +612 142 -2.018223459165249 +613 142 -1.5796424856087385 +640 142 -.7139098534256247 +641 142 -1.349929358265312 +676 142 -.8635920193173707 +677 142 -.5090405602697543 +721 142 1.7879602906051295 +729 142 -.12622152469862227 +732 142 -1.0915557106748262 +736 142 .8231821507969895 +745 142 -.4032985543902063 +758 142 -.12679262548865083 +764 142 -.38711536128492174 +768 142 .6321512699349562 +770 142 -.23028190325915776 +771 142 -.17350563650289036 +781 142 2.037613606471632 +784 142 -1.579615958389178 +793 142 -2.9137308188762945 +796 142 .39803326749319357 +802 142 -.4453724537826318 +807 142 2.2524323010968996 +838 142 -1.695152228795984 +844 142 -.629526419403435 +846 142 -.7319511212602517 +864 142 -1.7684942513021384 +875 142 -.19417458197527648 +878 142 .4681103696673227 +889 142 -.15254245322665383 +891 142 .9484359416535422 +908 142 .1482573909997452 +922 142 2.0728556092742187 +943 142 1.5107289635669345 +946 142 1.0873270941910298 +956 142 -.41754562557136715 +978 142 -.03907163777280345 +997 142 -1.7709109873148716 +4 143 .11115665289462762 +11 143 -.23842865658365808 +12 143 -.5212390277155287 +13 143 -.24615068103443227 +36 143 -.8062982380482782 +37 143 1.3135545635914911 +41 143 -1.9558239531953072 +44 143 .48590990445323684 +57 143 .12496975762022944 +63 143 .8961682282063785 +78 143 1.2900105159760382 +79 143 .24248007440549157 +87 143 -.10620952754462328 +105 143 -.2907078462365912 +118 143 -.782285790355732 +130 143 .30295001066719995 +150 143 .7433082271853753 +207 143 -.3353216312892002 +210 143 .6893968951876634 +222 143 .09543631180494454 +230 143 .631926020313377 +242 143 .3559036855523482 +244 143 -2.2263143254714923 +259 143 -.0755063626626181 +276 143 .24384722951531743 +283 143 .7694239836344036 +291 143 -1.3090800079521474 +294 143 .558955160098542 +298 143 -.20099809732676446 +299 143 .10131827874724347 +316 143 -.8747450355788754 +327 143 -.661712281755818 +330 143 -.5826540753892736 +353 143 -1.4245073156254935 +355 143 -1.6825307012187105 +410 143 .6408152177560387 +435 143 -.7150367956053326 +454 143 .059726561647719736 +456 143 -.09918294509188288 +463 143 .0373375599191437 +484 143 1.4304809731972659 +487 143 1.6307588942035622 +496 143 .20540152891696228 +501 143 -.6287404022419845 +543 143 -1.000801697643881 +568 143 -1.0407811515088858 +574 143 .06485598266626587 +590 143 -.1397035857731122 +594 143 .002726386778306167 +598 143 -.049744322649967185 +605 143 1.0653491423616226 +619 143 .16979664242790765 +625 143 -.007632981265169814 +627 143 -.5167692691263489 +629 143 .31935308402738927 +632 143 1.320065798639914 +642 143 -.4266591509993014 +645 143 -.7113184089789791 +654 143 -1.9437866143426514 +657 143 .2808535203638477 +667 143 -.3590759996566227 +674 143 -.3586718912841783 +694 143 -.907890250377644 +699 143 -.6041987818504188 +700 143 .7580840748501101 +703 143 .5911420137226853 +712 143 -.17134348638880795 +715 143 .3393382582128603 +736 143 -.7707799255890163 +739 143 .6358364019961489 +779 143 -3.056537430865773 +785 143 1.1729883242383765 +789 143 -.006933616419600929 +798 143 -.6329465843101403 +804 143 .7109119887032188 +809 143 -.5198695872106086 +840 143 -.39652490823016984 +856 143 -.7181976471292123 +867 143 1.1542923879539209 +888 143 .7020706129283766 +899 143 -.1503006982005381 +915 143 -.10473022070787495 +930 143 .3788211376931965 +936 143 .6199926999468702 +940 143 .6746923996641886 +951 143 -.18112257995119418 +968 143 .0396321248780557 +981 143 .7822312778803171 +984 143 .25773300338921223 +28 144 .07359911838945728 +29 144 .9488755712421018 +32 144 -.5120134967109057 +40 144 .9496857024931722 +60 144 -.2924780921636335 +66 144 .04599302934792579 +71 144 -.24741273860825108 +101 144 -3.055863332088374 +119 144 1.9412245056309698 +129 144 -.44654959167520136 +156 144 .008772870330340854 +177 144 .41507265179737973 +199 144 .2132701288980692 +201 144 1.2754502829060559 +204 144 .05893869411093171 +207 144 1.6302001994762199 +217 144 2.0554384024749925 +235 144 -.6623802259746496 +248 144 -.7454083056330428 +252 144 .010103878053232832 +285 144 .5120157190532288 +291 144 -2.891351110265396 +293 144 1.2598243477517346 +309 144 -2.2508968676764542 +318 144 .6282051378441686 +378 144 -.27683890603527384 +381 144 .8535984482429375 +387 144 -.47143280190435105 +403 144 -.6262619964199272 +404 144 -.9462760651556357 +417 144 .16155291186468507 +435 144 -.5034703790975628 +447 144 .29869928739717777 +454 144 -.14999690119120013 +455 144 .37944247902019335 +476 144 -.669745849115741 +495 144 .3982130988307706 +505 144 .6083940483048346 +513 144 -.9887093375943385 +514 144 -.9656897182799784 +520 144 .7806563745714175 +530 144 1.192800754150516 +533 144 .434007773528443 +536 144 -.25528642268811114 +543 144 .34603728113341453 +551 144 1.3878356539199643 +581 144 -2.0640774276780536 +582 144 -.057100021537100004 +588 144 .07504122798729551 +589 144 .8155548268303342 +591 144 -.32549222317555176 +615 144 .5815585353346138 +643 144 -.1739011428551683 +650 144 -1.1083261960622535 +653 144 1.3221213016224598 +670 144 -1.5450085996909526 +676 144 -1.468590667568427 +680 144 1.1626661580372526 +682 144 -.4699064800625913 +684 144 .770685175108156 +691 144 .6195416440173885 +693 144 -.6674320251116139 +699 144 -1.4600910922429104 +700 144 1.2362437896613125 +704 144 .3456118058126759 +715 144 1.3847377570831112 +726 144 -2.1725367265649735 +738 144 .19894576839535252 +744 144 -.06186228102710834 +795 144 -1.3732118506474018 +808 144 -.6958518906996671 +810 144 .6243899801001203 +814 144 -.7443120860076421 +828 144 1.076289003169109 +858 144 1.0241399953151211 +859 144 -2.0596610793352523 +879 144 1.5764283775729615 +880 144 .6300778889991826 +895 144 -.5267698028446522 +905 144 -.035935520457021995 +911 144 -.3695364102039873 +912 144 .9064159938286288 +928 144 .5231150187203122 +950 144 -1.0684583237809824 +960 144 1.2428593320799495 +962 144 -.4932565343166136 +977 144 -.6643017076628265 +981 144 .8523860827936622 +988 144 .42061137052983477 +989 144 -.24486215068952072 +4 145 .2747647764062542 +7 145 -1.3460851131258156 +16 145 .21703511221376032 +30 145 -.01565245439144889 +34 145 -.013858685552720566 +38 145 -.6504903214012875 +59 145 .7993371409906267 +75 145 1.8732354729056033 +81 145 1.0504814238066968 +114 145 .0390740328354965 +116 145 1.5417159326607819 +119 145 -.4730092648705596 +122 145 .3919323097824432 +129 145 2.1376273998768776 +145 145 -.8025380184865044 +157 145 -.4763249686650852 +167 145 -1.3389556109671965 +171 145 -.30097258063723664 +184 145 -.267423514093439 +196 145 -1.0176599652108091 +199 145 .02881260868485214 +212 145 .10457772220886705 +228 145 .8665046352194113 +234 145 .917980362994717 +238 145 .09817702624524752 +248 145 .791941142973424 +253 145 -.9082759815467741 +254 145 .12274666638634282 +274 145 .21700541372099594 +281 145 -.9532933948492529 +283 145 -.12908907613604761 +289 145 .023716897081599186 +300 145 1.2223493954402644 +306 145 .22254341466800656 +307 145 .765114999055972 +322 145 .25870030438759306 +324 145 1.6345867247052275 +326 145 1.6433479999267042 +357 145 -.36866025128130203 +362 145 .1253136177896348 +368 145 1.0477957312785497 +383 145 -.6141198225486376 +403 145 .3905420862617462 +422 145 -.3404793586452248 +425 145 .37596714687722954 +444 145 .6708125348162103 +448 145 -.8677488687409091 +473 145 -.6126477237987752 +474 145 -.6817862272460304 +476 145 .12932228285219483 +481 145 .9408276391675279 +493 145 1.380699350228476 +496 145 -.561452739918895 +497 145 -.7828844350910006 +500 145 -1.008348594867895 +507 145 -.3254531714011197 +529 145 -.08618390122245012 +556 145 -.20595848113463552 +562 145 .7735569552614423 +564 145 1.1393676200947502 +573 145 .6548308795278456 +576 145 -.36293906582151136 +578 145 .13682200493878113 +579 145 .7555137761279899 +583 145 -.7266298040650997 +593 145 -1.0441820920047094 +604 145 -1.5272137692119763 +608 145 -.6379626495857267 +619 145 -.1894931050697415 +634 145 -.01468405776827246 +643 145 -.593498282332115 +650 145 .6800310339877451 +663 145 -.666373506899117 +686 145 .2603159284408322 +687 145 .36726250282316825 +704 145 .8302947007011996 +720 145 -.04539535773415054 +723 145 .4421376772285427 +725 145 -1.2471833626585453 +737 145 .6064988500662585 +738 145 .259956944457016 +742 145 -1.0830901081105744 +776 145 -.06404205909253816 +778 145 -1.2116422526706554 +784 145 .04307228298068842 +794 145 .9390051349973745 +817 145 .15890590731846144 +824 145 .1827850331391636 +827 145 -.28435729191861725 +832 145 -.568649762199308 +853 145 -.2521179761172011 +855 145 -.23936066635436207 +863 145 -.2821186001528372 +867 145 -.7093262163018235 +871 145 -.8552516000023955 +878 145 -.10379301583524339 +886 145 .8459428786684983 +890 145 .02551996671655553 +912 145 -1.709495329292971 +931 145 -.385848746170019 +935 145 1.2280374851576297 +940 145 .7661236625005505 +951 145 -.6400540235119421 +955 145 .541990148727856 +983 145 .21958272704847545 +986 145 -2.1647470038742793 +15 146 .13025899772449012 +18 146 -1.2833503133519708 +19 146 .6814426895437593 +24 146 .5785244576846243 +46 146 -1.2638125952964052 +50 146 -2.457318163818665 +55 146 1.8087041868204057 +67 146 .48763506430473036 +83 146 .39520832049090726 +111 146 -1.5054074441882737 +117 146 -2.9763622381291066 +138 146 -3.153499723292748 +152 146 -1.3930871385713182 +163 146 .1282332235698413 +171 146 -.7852178237727078 +183 146 1.771107481411719 +191 146 .1788435948488378 +194 146 2.675663846000498 +195 146 .31670599114971926 +201 146 1.7752159649080614 +205 146 -.5971618282251319 +208 146 .8049090666028558 +214 146 2.785065054910031 +231 146 1.984716005333683 +242 146 .7557923201342691 +243 146 -.030839095643681397 +246 146 1.3884307682211072 +252 146 .16937125027106792 +274 146 1.4889250838267973 +300 146 -1.2091931503717581 +312 146 -1.0793785198537424 +317 146 -1.3397943759652837 +331 146 .18402240963102237 +340 146 1.6714948118053115 +364 146 -1.3247535470523206 +366 146 .7444876994747481 +368 146 1.2993436653032981 +373 146 -.16232873447317558 +384 146 .567764066695403 +389 146 -.5348448192225647 +392 146 1.9253239795917618 +394 146 .7028359038757721 +407 146 2.5320288973154215 +410 146 1.022890776297138 +416 146 -.9636410726531126 +418 146 .6142048873261863 +425 146 -.504437019005189 +434 146 -.6039564759927212 +436 146 -1.7942585782927434 +463 146 .516272278630762 +466 146 -.1638021912760159 +481 146 -1.9864005405498666 +489 146 .35132548501642513 +500 146 1.7348342310080005 +507 146 1.0412457622255404 +510 146 2.4117434255404593 +528 146 1.683847636348548 +551 146 -2.907834886036272 +552 146 -1.756738934719833 +553 146 .4161830805440909 +557 146 -1.454159891306753 +559 146 2.4442834109127776 +575 146 -.5131821665401423 +576 146 .5360002811878467 +577 146 .9253887744069241 +598 146 .6306691890603772 +603 146 -.565985018222599 +610 146 1.8062221948703825 +618 146 2.4996537031725596 +625 146 -.8192808607829409 +638 146 2.530070786396299 +668 146 -1.973091989793799 +671 146 .013771816603216885 +682 146 -1.6755063584699172 +684 146 -.24512398815902364 +686 146 -.7859283663976513 +688 146 .8019778407134831 +689 146 -2.598323793321761 +697 146 -1.3461848515323551 +699 146 1.9580148726538162 +722 146 -.9255146016263677 +734 146 -1.8623931873723203 +738 146 .2807367798684103 +749 146 1.2491812154736397 +762 146 .5766216676498889 +763 146 1.2551872397022148 +788 146 1.0612341508992156 +794 146 -3.2590510343328423 +805 146 -2.3071526340806754 +812 146 .027240711209014182 +819 146 -1.0969609439485426 +828 146 -1.7460751659301392 +830 146 -.052924257952064596 +833 146 2.104872597022691 +836 146 .47021283819780035 +838 146 -1.0800755720627953 +840 146 .7026760879585061 +848 146 1.5486895831579635 +861 146 -1.4885287465143673 +880 146 1.692408193704069 +883 146 -1.2548429261255944 +894 146 -2.7714146139392457 +895 146 -1.6166320809649537 +902 146 .6649025812360402 +913 146 2.3457160545173488 +916 146 -.5660114853730909 +920 146 -3.1404607748385533 +921 146 -2.387389532157341 +942 146 -1.4346789912061955 +943 146 .06394977296321397 +947 146 -.6500778595263477 +7 147 -.9011433838904382 +11 147 -1.0397905309107498 +13 147 -.6502170185020861 +53 147 -.5589540572992555 +74 147 -1.4469403094383657 +79 147 .4220536776899009 +81 147 -1.7321945513440489 +88 147 -2.2093937189233235 +119 147 -.7792257067329 +136 147 -.37224085473058405 +150 147 .3552863518980074 +155 147 1.8488261413108527 +157 147 .25478423503151326 +167 147 -.44410384794482877 +172 147 -1.0998090991864615 +174 147 .3294802766956994 +195 147 -.9889832001431883 +201 147 .21585205226501628 +209 147 -1.1642551633364713 +222 147 -.4868548779161005 +239 147 1.8174180519211536 +245 147 .9924000974572358 +273 147 -.4782114513815984 +275 147 -.923894060018722 +279 147 .5852013581288613 +290 147 .24545127032512964 +314 147 -.48145267938068725 +335 147 -.3565839067233724 +336 147 .9428378801892136 +364 147 1.6884212896315158 +366 147 .1939818391518123 +378 147 1.0532525280653693 +379 147 1.8116124194652379 +381 147 .030180448230875567 +390 147 -.8072587988006966 +395 147 -2.147031195002074 +401 147 1.1642781753617915 +404 147 -.09325054023777188 +407 147 -.681856281696033 +408 147 -.3259897883828065 +414 147 .4357410629371481 +436 147 -.09202019448459373 +443 147 -1.7869341023143372 +457 147 2.8559394693544427 +468 147 .7542078675742492 +475 147 .8732646573164174 +480 147 1.0706041315605512 +482 147 .44364060285259593 +483 147 -.8293794904082371 +484 147 -1.4996653414469125 +514 147 .9823425909891309 +531 147 .259681736329509 +544 147 1.5831085562634204 +547 147 -.16596060926906292 +558 147 1.1916543206790267 +565 147 .23490568273105722 +569 147 1.2896042987918455 +570 147 -1.08009920814296 +574 147 -.04028171504213449 +576 147 -.26003175798179884 +577 147 -1.5604831757278255 +578 147 .3048624092301719 +585 147 -.8434876996314726 +591 147 -.517690036068351 +596 147 -.8939785520905262 +607 147 .4356236229528883 +623 147 .9501916069180016 +634 147 -.868984623331386 +643 147 -.9815226216150759 +667 147 .7170765378402519 +676 147 -.33758557527966715 +717 147 -.8421696601239541 +720 147 -.11558070970398483 +730 147 .041698505673716746 +738 147 -.6187394297768166 +751 147 -.8121010331614424 +773 147 -2.018248973716992 +775 147 .025257534165506593 +788 147 .8009046647256824 +793 147 .9986686153093282 +805 147 -.4451025140370013 +814 147 -1.7012294344145935 +823 147 -.6952264860590728 +827 147 1.2076695930642165 +836 147 .35658255227875635 +847 147 1.128318768552932 +853 147 -.5313188816266058 +870 147 .924091348931081 +872 147 -.7413474573805618 +885 147 -.21989166677301017 +896 147 -1.8815996957498962 +897 147 -.021377304050567036 +908 147 -2.658997924634688 +910 147 -.9105995985852199 +931 147 .08221858400395449 +932 147 .6697974012665949 +933 147 -.6892225626203986 +958 147 -.536541648867224 +965 147 1.7477906665670913 +974 147 .4696833584188467 +975 147 .7105191567158039 +982 147 -.509650119122292 +984 147 -.5276989023493626 +990 147 1.1883036244042058 +995 147 -2.1832438863058186 +31 148 .04175183864840225 +42 148 -.6427432479130744 +49 148 .3577642501278472 +52 148 -2.791523746983362 +68 148 -.37047995116142846 +75 148 .1084581999025748 +80 148 -.6842177958381108 +95 148 -.4462930470710912 +107 148 1.1957279271550407 +109 148 -.4224711591804413 +129 148 .9735128692474961 +138 148 -1.0271920825499887 +145 148 -1.4478012912294729 +151 148 .605892010768016 +158 148 -.6383895266046404 +159 148 2.330773981606426 +168 148 -1.7308106669479622 +182 148 .000848583959402632 +195 148 -1.5784524499579151 +199 148 -.7635545900116616 +200 148 -.8707381267381191 +219 148 -.014757736374987548 +220 148 -1.2538043818131481 +226 148 1.1987639402593846 +239 148 .9539189242699864 +256 148 -1.6565080698472423 +265 148 -1.705180913239609 +269 148 -1.8571365517056848 +274 148 -.8105156853471087 +275 148 -.7618709587146094 +279 148 1.0416119273487023 +284 148 1.0631389472019603 +306 148 -1.9686471195037245 +315 148 -.17710053724774294 +349 148 -1.7414696562555658 +361 148 -.18199112943949028 +368 148 -1.0061907538558443 +397 148 -.8306594912166028 +423 148 .2381831406900078 +429 148 .7211961084187971 +430 148 -.5504033855458365 +457 148 .05043538821648506 +463 148 2.1880792811217367 +465 148 1.8913831182390541 +472 148 -1.036414448854653 +483 148 .3435433949003126 +493 148 1.2968418570971345 +506 148 -1.817596689028291 +522 148 .48182734918282005 +528 148 -2.510276027602689 +531 148 .39742544625573645 +539 148 1.599045439461137 +546 148 -.19854391249112774 +548 148 -.5717196412688919 +565 148 -1.5923156858913643 +573 148 1.360100787186401 +575 148 .36013141688527894 +589 148 -.40581613730329297 +591 148 -1.4982526296605956 +593 148 -.6898678683776036 +594 148 1.1605638818018045 +614 148 -2.076531886266915 +637 148 .8217691688427831 +639 148 1.8964693171401488 +650 148 .33080218699471636 +682 148 -.37518498604581374 +684 148 -.724359542267167 +686 148 .8863849591425987 +700 148 -.4014885935275111 +704 148 1.1217335168282678 +707 148 1.0610604114650102 +718 148 -1.8545336148467275 +750 148 .5443605662235391 +753 148 -.01044516949836738 +754 148 -1.138735783192423 +764 148 -.15100805915155935 +778 148 .4043595276586243 +785 148 .028507328253067662 +786 148 2.230825296566599 +790 148 1.4041077646484907 +793 148 -.14763315417221842 +814 148 -.8935981444396593 +836 148 -.3464011509996371 +845 148 -1.138053561594309 +846 148 .048022792752382804 +848 148 -1.6373496513424421 +858 148 .22961205657292144 +865 148 -.941553638457209 +870 148 -.3200877601643725 +890 148 -.21174958712759057 +891 148 -.36322046090716154 +895 148 -.3519143404343461 +901 148 -1.3540919439517842 +905 148 -.5067042931956353 +906 148 1.0353166639550813 +923 148 .15571564012789912 +927 148 -1.5654943663589995 +928 148 -.28381416245544344 +970 148 2.330532868701745 +977 148 -.4906691982291652 +990 148 -1.3499006185364533 +998 148 -1.4433128508533257 +27 149 .2919001487754673 +33 149 -.9905691528156504 +34 149 1.356715002104803 +48 149 .7787356860140044 +56 149 -.3124377995151908 +66 149 -1.3445398815869223 +75 149 -2.4410539884786795 +96 149 1.4053457857889846 +100 149 1.9108424252329548 +105 149 .7414951238445419 +152 149 -.23441271999776925 +156 149 .16426667620654328 +166 149 1.3427121274256222 +168 149 -.8886497669552005 +174 149 .9909598999913583 +179 149 -.5273012610157755 +187 149 1.86603595905038 +191 149 -1.0079121051881674 +193 149 1.7883181963998676 +199 149 .7274711554912676 +205 149 .5770104453219645 +217 149 .13181878174194134 +221 149 1.9354744811519748 +224 149 -1.2707100677264138 +225 149 -1.4627225180838848 +226 149 1.3507305187017917 +232 149 .7252558130675698 +244 149 -1.5615952153363477 +267 149 .8939963347567582 +277 149 -.018968525504341777 +293 149 .2949164276648869 +294 149 -.9566824832299491 +295 149 -1.6485842447673513 +298 149 .5879985462083408 +299 149 .7455129117243464 +315 149 -2.0093098842915382 +319 149 .8551694203029453 +337 149 -.6083618511842178 +345 149 .4195194215886502 +354 149 -1.25995451837941 +359 149 -.005502609060228814 +366 149 -1.3460767933875084 +369 149 -1.512128816017798 +371 149 -1.9576428885609614 +378 149 .8355082018534219 +381 149 .5096629973191956 +388 149 1.321772189986945 +394 149 -.6707003069991315 +405 149 .9504153200432568 +411 149 .44197105849913454 +415 149 -1.0798802952968527 +424 149 1.681361655081179 +432 149 .4841004507315777 +434 149 -.21070401206010028 +435 149 .1784194430069425 +459 149 1.0136678471672103 +467 149 -.415362702258011 +474 149 -.19047013471952232 +491 149 -1.9501959603847043 +492 149 -1.4160822464266873 +494 149 1.139550584892571 +498 149 .5869325975832383 +501 149 -.8594779286609789 +521 149 -.46079176459564186 +524 149 -.3166787792571551 +527 149 .9558407520617495 +529 149 .8211097462111309 +537 149 .4989000764496233 +545 149 -1.472557948374359 +558 149 .7454150174027773 +559 149 -1.0640811456606825 +568 149 -.14922878828428449 +574 149 .2066308511476177 +583 149 .8295432015414618 +596 149 .6680803080139334 +621 149 .9208772623224325 +632 149 .5987174028502606 +638 149 1.4886459816569337 +643 149 .03871860438217148 +660 149 .29755174094461584 +678 149 -1.5731827212860594 +680 149 1.479634183635198 +688 149 .7389036067437422 +691 149 1.0217186268011176 +696 149 .5170381239989013 +704 149 .8677087736001744 +714 149 -1.106492861160986 +718 149 -1.5017652723522088 +747 149 -.2647879895092715 +759 149 -.22422764918013605 +775 149 -.6027196552837786 +778 149 -.09332857953022775 +779 149 -1.3607254429460907 +787 149 -2.2700302351086936 +795 149 1.1167124785362565 +802 149 -.21337527916684107 +805 149 -.7730973919984752 +843 149 .802025614727526 +848 149 -.6136083897196649 +873 149 -.7920847537199668 +899 149 .08346750433837405 +900 149 -1.7690629602969794 +921 149 1.6502269609520457 +933 149 -1.586962094189128 +935 149 -.05072390142396779 +938 149 -1.8832681049666955 +958 149 -.030763106911422755 +960 149 .5818058857666267 +974 149 .11694105687079154 +996 149 .7558348476542239 +1000 149 -1.1269215592358113 +13 150 -.061898025047160105 +22 150 1.5437240282622908 +29 150 -.03833188107790843 +34 150 .030527413940460765 +38 150 1.8726141702633001 +39 150 -1.6347853097372052 +65 150 -1.1821424350041283 +77 150 -.33132648882771987 +85 150 -1.0655506459006479 +93 150 2.6098724681094714 +99 150 -2.418988477041937 +113 150 1.9726112388868908 +125 150 -1.4289097123120844 +126 150 1.012892522178337 +140 150 1.5295496348579587 +147 150 -.5506828997496187 +152 150 1.398622365832604 +157 150 -1.5552129991831531 +158 150 -.5096081447434512 +185 150 .2897146883026077 +194 150 -2.48554557914198 +195 150 -.3840922793561042 +199 150 -.9925944443047786 +204 150 -.29395168091820334 +218 150 -1.3529020747992793 +222 150 -.008018664317123989 +223 150 -.09197285930206836 +270 150 -2.1491492281397195 +282 150 -.17707869821554315 +286 150 -1.5051775874832118 +299 150 -1.395985193156925 +310 150 -.2824030217945167 +339 150 .47903367169274363 +340 150 -1.3399052747226334 +349 150 -1.7302709758895523 +352 150 1.3902655284215242 +369 150 1.989903249883808 +392 150 -.31370797735925476 +395 150 1.575791806716747 +401 150 1.3822287001545297 +402 150 -.35550573366522287 +438 150 -.19859736093249475 +448 150 -.6185667596365954 +459 150 .04002310492912314 +470 150 -.9914142513479548 +491 150 1.585881050399041 +504 150 1.5093894332518727 +517 150 -.1929796239282004 +547 150 1.5647065508038696 +549 150 .162240477244672 +553 150 -1.5607481395116067 +573 150 1.8992311080390851 +595 150 .24876162830986662 +599 150 .9444020242935972 +618 150 -3.0184181238758914 +636 150 1.2158769256604813 +638 150 -1.4829407777177754 +662 150 -.279961847453824 +674 150 -.7505382231611628 +679 150 .9183938876196003 +694 150 -.8073874250882938 +696 150 .002395502194121437 +701 150 .5982509485367371 +710 150 -.7133541985079423 +713 150 -1.0252348602083627 +720 150 .39746260757007046 +750 150 -.22192600908250887 +758 150 1.896154919380101 +761 150 .9030472741763762 +766 150 1.0416032510274724 +773 150 .23464777123342573 +775 150 -.17845981806764838 +778 150 -2.6331136768356176 +783 150 -.20250035455201126 +802 150 -.2413375208646925 +803 150 -.8612811268606944 +808 150 .5415379039641577 +823 150 1.6358097104937575 +825 150 -1.912698594546385 +857 150 1.006177561633396 +877 150 -.2973593737333019 +884 150 -1.4532638142111645 +889 150 1.6840085847695603 +890 150 1.2547897372043917 +901 150 -1.3699024539807256 +922 150 .36787465147451903 +953 150 -2.1398688125311063 +964 150 .553638543899972 +998 150 -1.7141645775239853 +999 150 1.72546620830924 +1000 150 -.020206168155912203 +4 151 -.15351137118844044 +16 151 -.9327569120031716 +18 151 -1.1649871730722297 +19 151 -.4529778481639114 +21 151 -.537769010312653 +32 151 -.03901588877529401 +39 151 -.7033060689649394 +43 151 -.7933125734033495 +51 151 -.6595048145545856 +61 151 -.40062265957589843 +62 151 1.7189565665684357 +75 151 -.4892089597873258 +77 151 -1.7048851025709035 +128 151 .06444087614643043 +136 151 -1.93944166978901 +143 151 1.4803645308611602 +151 151 -.29426525053283487 +155 151 .17948382829943366 +161 151 -1.309959413119034 +162 151 -.3360841881604479 +164 151 1.125996788999045 +168 151 .35809429825073147 +169 151 -.2084848158557733 +174 151 -1.9994319190408663 +183 151 -1.2400056247088285 +208 151 -2.07468984368875 +210 151 1.3948119243327497 +221 151 -.2690989142950725 +225 151 -1.7680653494599228 +240 151 .2140580353137186 +257 151 1.4290022123682955 +265 151 -.7211729342144084 +268 151 .5034614686574278 +283 151 -.3717135830686118 +291 151 1.809331363039534 +301 151 -1.158868624438635 +307 151 .1829259317898461 +308 151 .8859009041084436 +314 151 -1.913327781829673 +319 151 -.6576119249270571 +335 151 .7603709599150648 +345 151 -1.9567471778719732 +354 151 -.5867332853326241 +362 151 -.8441591320211802 +363 151 -.5870537730614681 +369 151 .43116276836508494 +373 151 .3429582156747295 +393 151 -1.0783197684400585 +399 151 -.25020190784470414 +407 151 -1.6886881751188099 +415 151 -.40843198602216957 +425 151 .289429071769298 +431 151 .154746468586762 +435 151 -1.3996830901338913 +442 151 -.5102284303281966 +512 151 2.0412676426885037 +523 151 -.8343791547085595 +533 151 .07097041004373475 +542 151 .14336129344449391 +545 151 1.7843348773995555 +558 151 -.6981679394522026 +576 151 -1.3927684141055117 +578 151 .47264542957906197 +584 151 .3563674109451862 +585 151 -1.945829829176287 +591 151 -.7127004519795943 +611 151 2.404591658507709 +614 151 .16286618832537214 +621 151 -1.672201451978704 +623 151 -1.0938316086623057 +669 151 -.5027983768905364 +674 151 .4025490074163661 +677 151 -.936030181981226 +679 151 1.7627298422800002 +689 151 .359599566892992 +712 151 2.169003275810028 +741 151 .706481225551098 +746 151 .7265970457206162 +748 151 -.5725260531699681 +750 151 -2.2760319156073483 +757 151 .9325668792170042 +764 151 -.5875746156850667 +785 151 .7546280064088895 +798 151 .5657446547025261 +807 151 .2621311668094738 +834 151 .16894703194367824 +837 151 -1.8403919489799045 +841 151 -1.1291993771592632 +847 151 1.6225055257814733 +848 151 -2.7789676894206643 +856 151 -.48916062605773014 +857 151 -.5310133663334954 +865 151 1.050426003944771 +872 151 .9411508876271646 +873 151 2.3363499545388033 +874 151 1.1980919151794434 +877 151 1.080976840838345 +885 151 .8090296333453761 +892 151 .08081202862926018 +930 151 -1.3538409453131899 +932 151 -1.1155197076305408 +934 151 2.6170812738933593 +939 151 .48979435680988104 +951 151 -1.8561797688667077 +960 151 -1.074954289162381 +969 151 -.5965648801176792 +972 151 1.7428503196771652 +976 151 -1.3787788240781778 +997 151 1.5698277545730457 +10 152 .14441102232837277 +18 152 -2.911260671261782 +21 152 .10236836802084691 +38 152 -.26508558012131694 +43 152 -.6669978902667679 +84 152 .3050140031784951 +96 152 -1.673758298372255 +98 152 .10730621120495559 +104 152 -.033508545169395706 +105 152 -.2697990230830671 +112 152 -.015238125342783564 +114 152 1.3683690258836365 +120 152 -.7262348851243472 +150 152 -.9453018736084797 +167 152 -.08368049621760433 +179 152 .29888370518172247 +182 152 -.8344686564055401 +190 152 -.5340669848094496 +197 152 1.6564819871378977 +199 152 -.04648715553778058 +201 152 .26383090029655987 +220 152 -.8096760994698201 +222 152 .36154558408498727 +252 152 .4703913177010144 +253 152 -.09353862180529046 +258 152 -.22034045272493297 +260 152 .5364463494557101 +276 152 1.0439632535989758 +285 152 -.8377189065194423 +291 152 1.3039802249535581 +298 152 -.20403385432283028 +311 152 .40504389733998264 +313 152 1.1874796530872522 +324 152 .26080282869774424 +343 152 -.05909049265292178 +351 152 -.5677669306620147 +361 152 .7961928721358813 +365 152 .5914326829869336 +380 152 -.8129505508445594 +406 152 -.4108365632183336 +412 152 .6853098474309951 +417 152 -1.2214102929575898 +419 152 -.8379289521668541 +422 152 -.633321718996783 +427 152 1.0845565062998896 +447 152 .07123121885963042 +455 152 -.9390709006871495 +459 152 .432254784515683 +472 152 .5804998307423388 +508 152 .23493225168301815 +515 152 -1.0382911783834128 +522 152 .3160189863251759 +548 152 -.4320679755730929 +567 152 .3029238024303716 +590 152 .632616009087788 +597 152 1.17613551040696 +604 152 -1.1716067445162128 +623 152 -.5346588936719886 +627 152 .7628438640618178 +628 152 -1.0911283780349332 +631 152 .644271786419227 +635 152 -1.4247368725878582 +640 152 .8118295692751958 +645 152 1.0440177515657778 +654 152 1.471577367768216 +667 152 1.6059669670354055 +676 152 1.5892156353618327 +710 152 .4081216495097786 +712 152 3.2953272342124698 +722 152 1.0350916457542225 +729 152 -.09165110901605313 +731 152 -1.3978567468183165 +734 152 .34904460139056076 +735 152 -.9799986279259015 +737 152 -.03347317753212238 +742 152 -1.4734277832502942 +748 152 -1.9879341820004646 +752 152 .24563750142626842 +756 152 -.7643555460938894 +760 152 .8740356586062544 +771 152 -.8798719905596825 +799 152 -.0020654790751130914 +812 152 -.9770769076337829 +820 152 -.7362415935471353 +821 152 -.06413015069420806 +829 152 -1.3566604642207951 +834 152 -.20384622483849718 +842 152 1.3814326399351506 +844 152 .22272966321229332 +860 152 -.15113617999493945 +870 152 -.5947404405106061 +880 152 .11028823871801335 +895 152 -1.0379002078687167 +907 152 .8109478708256903 +920 152 1.1482470917384116 +927 152 -.6051032334109109 +935 152 -.35483501157631336 +937 152 .7209552414438154 +944 152 .9424643679222985 +947 152 -.6108417030277293 +948 152 .282803844941089 +952 152 -1.3785813401147327 +974 152 -1.2730596580634952 +997 152 .3211921157527885 +1 153 .04015526715064885 +3 153 .6068644332791749 +5 153 .7707806512831152 +10 153 .8005830083951002 +11 153 -1.0865564542497428 +22 153 .49057163448400987 +30 153 -1.2765523850920977 +31 153 -.10960224109408856 +39 153 -.18541578571337938 +53 153 -.07935143996253882 +80 153 -1.965252022479324 +85 153 -.11965379729721076 +86 153 .03966704876126606 +89 153 .8969132597468684 +91 153 -.8898414650623342 +92 153 -1.2936212379037832 +105 153 1.4597121755918523 +106 153 -.10228488366636918 +110 153 1.6183915513037457 +117 153 .9589649082561266 +123 153 .12435508712197522 +129 153 1.0044670995497438 +134 153 -.13449748052698018 +158 153 -1.1717114531567305 +159 153 1.3425497552375834 +164 153 -.2556319719270935 +178 153 -.11122694981922422 +184 153 -.7265084726159097 +189 153 .4598541901822716 +193 153 -.43573938481861596 +205 153 -.6784729643114485 +207 153 1.210814336809617 +212 153 -.49957274212097014 +213 153 .04070835276508203 +215 153 .38671390851118825 +241 153 -.7137971261359743 +258 153 -.43948857094909693 +269 153 .2786385302346503 +273 153 .07039540347272127 +281 153 -1.3997676671705737 +283 153 -1.0446111870445054 +294 153 -.3071873586552537 +307 153 -.03747365677569711 +310 153 -.13171261915681176 +326 153 .9256772494805929 +330 153 -1.052417160258932 +331 153 .29902065003640566 +336 153 -.7190481986338563 +354 153 -.5691753155320234 +356 153 .017737200820358748 +367 153 .8330830411509524 +384 153 -.0022786656714015308 +385 153 -.6886533857894405 +389 153 .21569937576699813 +403 153 .614545901692439 +427 153 .903218902201966 +436 153 -1.0719439864177103 +456 153 -.8789486162253907 +471 153 .6303860392677043 +473 153 -.5860705502824195 +476 153 .8583399988099051 +478 153 1.55376456105992 +486 153 .9405320313467452 +491 153 .06803151874102459 +500 153 -.8616483211508887 +501 153 .7997115894046569 +514 153 -1.2591482497652113 +527 153 -.8960437750730383 +528 153 -.9729574217148205 +539 153 .7672874714688467 +596 153 -.11181806975665184 +601 153 -.09095703377421836 +606 153 -.9822324590432948 +612 153 .8695058099455524 +621 153 .4405974762689142 +625 153 -1.1743491862167466 +626 153 .8332493365491772 +637 153 1.8671264564874213 +657 153 -1.351219281903799 +670 153 -.302313549987775 +685 153 -.5036694385501943 +690 153 -1.1237601386239997 +696 153 .45058049501477526 +699 153 .5129719393585778 +727 153 .4650012685360282 +731 153 .08691904981260776 +739 153 -.06732708791607922 +747 153 .018378975709031492 +755 153 -.35690815350480803 +802 153 .8756753474669238 +820 153 .48726915851430413 +821 153 .15361393626655057 +838 153 1.0888520738512335 +840 153 .03335707132204696 +847 153 .8572793578656865 +851 153 .3247242711813454 +865 153 -.20635838256354236 +876 153 .6577332654172351 +877 153 .17279800585587887 +878 153 -.5283112081104371 +886 153 1.345011249486054 +901 153 .0007796921222425202 +937 153 1.4438517313185708 +945 153 .7504099568520103 +952 153 .39055981771438925 +963 153 -.26867644938949253 +967 153 1.7632282600960982 +970 153 1.5483431969619574 +972 153 -1.1523040175941799 +977 153 .21874197090303688 +985 153 -.5054260585170771 +989 153 -.7358604603327811 +996 153 .05949505325282281 +998 153 -1.13453195426318 +1 154 .443454310808116 +2 154 -.6187320754468602 +8 154 -.6373810195082528 +10 154 1.2825135231688425 +11 154 -.02685689905914218 +13 154 .4864640205340095 +18 154 -2.1808005845013887 +20 154 .16614117658902086 +26 154 -1.1985456985319909 +31 154 -.9653979659369942 +52 154 -.8058835715854461 +55 154 -.9760360655700977 +63 154 -.9077660052449753 +66 154 2.1287673245708087 +72 154 -.43836587809522354 +117 154 -.44468365884183236 +120 154 -1.8937114318323602 +139 154 1.249501368334873 +148 154 1.5353184082593596 +152 154 -.9844568474703753 +156 154 -.8953367742065997 +158 154 -2.0389407447648122 +165 154 -.23940247115512012 +170 154 .2069565947612356 +171 154 1.2150005525236316 +174 154 -.5633013637075555 +175 154 -1.6659422451934036 +185 154 .8422536378964065 +187 154 -.6054024303845823 +191 154 .2682487779536855 +196 154 -.1751165682113243 +214 154 .3881738961771151 +232 154 -1.7497030069752966 +233 154 .2395147960670469 +236 154 -.760399138687011 +243 154 .8086947894844659 +247 154 -.2510139873824347 +260 154 -.769946740833014 +267 154 -.9445338014671335 +280 154 .15648065496225147 +284 154 .5312482818090196 +295 154 .33838412920560623 +314 154 .8755801623446038 +325 154 -.7013137390310324 +328 154 -.1767123536547061 +329 154 .14079502642719194 +340 154 -1.0364462340152918 +344 154 .12125668981131502 +347 154 -.3544967945032549 +352 154 2.1219305081567676 +355 154 1.9473075729544818 +369 154 .46464239349565395 +372 154 -1.0553591537067377 +385 154 -1.6307380531361666 +405 154 -.9849854247176605 +427 154 1.827081648585734 +432 154 -.49582935326079314 +445 154 .7306758190133013 +464 154 2.0781746938195993 +476 154 -.3579537669175685 +484 154 -2.7100805919125754 +488 154 -1.3030770660548936 +489 154 1.6942697819757004 +490 154 -.42129356042952604 +510 154 .4356878501475721 +531 154 .3071724067666457 +539 154 .9671603036977523 +560 154 .036796213285200365 +582 154 .3710780439749957 +586 154 -.7624115122180155 +591 154 -.23140586781541578 +595 154 .5953338647773342 +621 154 -.052431051513844085 +659 154 .38397663249406166 +668 154 1.256446540934979 +671 154 -.016072861620698015 +682 154 .8815117300623823 +684 154 .6991336293892192 +688 154 -.014433382667021925 +693 154 .6181228140761673 +705 154 .003464223311396954 +710 154 .16184440109596734 +712 154 1.952293470039826 +714 154 -1.0150347246092333 +715 154 -1.0218665551485289 +717 154 -.7696963087093417 +719 154 .009309207970495476 +721 154 -.373068640862539 +727 154 1.1313465843118957 +742 154 .3349953070946101 +753 154 .6308768225805653 +775 154 -.0965647397414437 +778 154 .5999694122849305 +793 154 -1.0651024992863494 +803 154 -.991973254060042 +807 154 1.2593894485013544 +829 154 -.27948740590066107 +866 154 .1491190684790616 +871 154 .1421867648321697 +875 154 .9153218271129472 +894 154 -2.2547614458825658 +914 154 .5343495093266599 +920 154 -.30771748604662286 +926 154 .535395293725421 +930 154 1.0673121488857353 +932 154 .27736221242595066 +935 154 1.3405500704090842 +959 154 -1.1754986183049465 +964 154 -.601395869168646 +994 154 -.20367708279205377 +995 154 .6356545795282974 +20 155 2.354105633772198 +21 155 2.7264295398527056 +33 155 1.4696125726714022 +40 155 2.1019528783108563 +56 155 -.6160407445900867 +66 155 -.9518470454371536 +67 155 -.9483385199222305 +79 155 -1.3147565182492433 +80 155 .9900197014264644 +90 155 .7147181063526198 +93 155 1.013300198562695 +95 155 1.0160722126077455 +112 155 -.5931577820657561 +114 155 -1.4674326498205406 +118 155 -.01760591824201989 +130 155 -1.123742857760675 +138 155 .38071469651628376 +140 155 .9325383593042089 +144 155 .36383506447827973 +148 155 .740757012742092 +164 155 .6150654997041409 +172 155 1.149525669540158 +189 155 1.3357524236392238 +192 155 -.06983041122557607 +206 155 2.06065446038696 +212 155 -1.4423284944345567 +216 155 1.8603579258967529 +218 155 -1.925840669455718 +231 155 -3.207350279842772 +237 155 -2.246622960999177 +285 155 1.410356599764164 +286 155 -.3603519068634792 +331 155 .27257522172023496 +338 155 -.2588295982516815 +369 155 1.646755575698894 +400 155 .20300161602138 +407 155 1.1801116928726205 +410 155 -.16748316265975288 +413 155 -2.643697172871259 +432 155 1.454510406170361 +450 155 -.40020626872346754 +476 155 .1987263448939432 +490 155 .8357399221221193 +506 155 -.5536256282990449 +512 155 .4269592442044398 +547 155 -.327035064906657 +548 155 -.17085422278777274 +550 155 -.22526713439751825 +551 155 2.965136897147847 +552 155 -.08809007687694553 +554 155 1.00277898588686 +558 155 2.5982742794031077 +577 155 .025685599058148295 +583 155 2.3801423620260955 +601 155 -1.0780101650835687 +611 155 .31319880347157536 +620 155 .028426351482384343 +621 155 .7399138058395331 +636 155 1.3685875819508635 +654 155 -3.0512057945160738 +673 155 -1.340315896238212 +676 155 -1.5952111445029742 +688 155 -1.9890559309305793 +694 155 -2.0991067364217306 +701 155 -.022464767626946602 +711 155 .787253044795593 +726 155 -2.4628810302076825 +731 155 2.7220845544248986 +741 155 -.6588876392365741 +757 155 .07189869287940606 +770 155 3.216947833353684 +796 155 .0299985173489587 +817 155 -.6266416320829219 +826 155 -.9984557806659335 +863 155 -1.6545500638149706 +864 155 .5512933415433117 +896 155 .794878156129858 +937 155 1.8095376794303146 +939 155 -.8325722901596769 +955 155 .1946686870133736 +976 155 .28567384153806974 +986 155 -2.054579302536645 +991 155 -.46335080700725706 +17 156 1.7756374177197451 +18 156 .7847436110464583 +27 156 -.6821309555377432 +30 156 -.4044399739722351 +38 156 .6808930467495252 +43 156 -2.162064007248866 +47 156 1.2428904505715415 +49 156 -.8093999288881666 +51 156 .002912784914984097 +55 156 1.5268064289201373 +77 156 -1.8513942405304713 +86 156 -2.476677284130399 +92 156 -.730308629864132 +113 156 -.6487186141462196 +115 156 .7243876199291996 +118 156 -1.4442336076063722 +119 156 2.9318577783773874 +125 156 -.8974512420872277 +128 156 1.225505046945303 +130 156 1.6632256634621536 +134 156 .3051594062433352 +141 156 -1.1643842326883955 +149 156 .9358330652212832 +151 156 .3633974349985491 +156 156 .42398149368545385 +157 156 -.483801305886805 +180 156 .5171049943232708 +205 156 -2.0142300686950043 +213 156 -.03701336615082415 +218 156 -1.1771458949277285 +222 156 -.13143893453683142 +226 156 -3.295578714558818 +227 156 4.115259855378147 +247 156 .7580995083768047 +248 156 1.9531439067029996 +262 156 -.7919256980909453 +274 156 -2.034196433238071 +282 156 -.7194881373280637 +283 156 -.06577229428082566 +284 156 1.9786403424940993 +294 156 -.7004609588533577 +296 156 .8075295209700316 +322 156 -2.4095817784270137 +326 156 -1.1826469295563462 +335 156 1.2080790894157718 +337 156 1.2219335756704066 +342 156 1.5949027773976086 +344 156 -1.2846987138636505 +347 156 -.6965866545930532 +356 156 .4687270642455811 +360 156 1.1780247175426175 +367 156 .17776168881480858 +369 156 1.6676688875516024 +391 156 -1.6157535609765392 +399 156 .2033709751141189 +410 156 .37497313645682406 +411 156 -.8069614195291576 +425 156 .8995222838685788 +427 156 -1.1825122911247687 +431 156 2.429202761157499 +435 156 -.021374082816970535 +437 156 -.032393596203168576 +438 156 -1.3472485015575888 +445 156 -.888839024907627 +451 156 .5708088849049262 +482 156 -.7392175261691497 +485 156 -.6045569657011105 +497 156 2.1953297636818094 +500 156 -1.7223449573717988 +501 156 1.2437292615055597 +515 156 -1.1485979058850082 +523 156 -.6258037400617942 +529 156 -.18360850176209004 +532 156 .7794023219677109 +551 156 1.4930637412224166 +565 156 -.9179738959891283 +571 156 1.5199230159361576 +589 156 .2933075933011903 +591 156 -.3902432937281375 +637 156 1.7377872864510664 +650 156 1.562318252390352 +655 156 1.2395713490615434 +656 156 -1.4719811190921213 +664 156 -1.4573246245967943 +672 156 .6494266943516734 +675 156 .14105826473958064 +685 156 -1.6836445835455522 +696 156 1.000512433880451 +699 156 -.8272802956486789 +709 156 .5407904339528006 +710 156 -1.0216840247358923 +719 156 -1.3701035529192838 +727 156 -.7448137015849808 +729 156 .5579712833425732 +754 156 .9158194488276465 +756 156 2.4847214404575104 +758 156 -.5709734056324405 +760 156 .022989788147378287 +768 156 -1.9779279142149284 +769 156 1.3018452605987785 +783 156 -1.3439747724370217 +797 156 1.5812113679975592 +805 156 .5740310101053056 +809 156 -.5649292222990621 +810 156 -.45477006040045614 +812 156 .9262054007297233 +893 156 -.46492788899853904 +900 156 1.6645638887501624 +924 156 -2.340666647801963 +937 156 .07864972028473625 +944 156 -1.6347832343921787 +949 156 -1.6842088628725418 +951 156 .9457032514650693 +976 156 1.1724464497437928 +983 156 .5394114889870353 +994 156 -.6436954088606025 +1 157 -.4920023134247382 +2 157 2.895659863933859 +7 157 .025019687678919142 +12 157 2.688407011305652 +33 157 .8701742208042051 +47 157 -.6663919536660686 +67 157 -.8611696103759966 +98 157 .16162953251961334 +110 157 -.7717879865393908 +117 157 2.363510837786785 +133 157 .27016582513523907 +142 157 -.7425832347699073 +143 157 -1.2351893252193356 +161 157 -1.4864521900671508 +164 157 1.29385665807664 +179 157 .66172214162541 +191 157 -.4679854266895716 +198 157 1.0221368085898743 +204 157 -2.0407535913261636 +213 157 -.3525267775270872 +214 157 -.36044119537716357 +224 157 -1.1633312936669233 +228 157 -.3762801819028995 +230 157 -1.423858438440874 +243 157 .5452178368484203 +253 157 .3730683574550512 +266 157 -.2635074045278202 +267 157 .14409240276725857 +270 157 1.2345584644163683 +290 157 -.315870644433163 +310 157 -.009582722340191585 +315 157 .5327378291438206 +341 157 .5425878829091441 +349 157 .7154537765852784 +353 157 .19345041277086927 +356 157 -.9222932469990273 +368 157 1.7582526471395272 +388 157 -.7088845105751986 +392 157 -.8753764673313523 +393 157 -2.0365142574972372 +398 157 -.9319449651295435 +400 157 -.8421173315319052 +405 157 -.6144945836725177 +406 157 -.5457268087428837 +407 157 -1.5589148224318643 +429 157 -.7821251501814285 +433 157 .8872848787498647 +440 157 .023829378174487062 +465 157 -.06565909300204723 +471 157 -1.23582807930239 +488 157 .5048213983404395 +493 157 2.79999075172075 +511 157 -.06211163185621471 +519 157 -.29993379258296404 +531 157 -2.1371132946404576 +533 157 .0586662487836935 +547 157 -.5600102260763997 +562 157 .21816140291906294 +565 157 .4903540730419589 +573 157 -.10133488718936548 +575 157 2.107730127548156 +584 157 1.3741446272579632 +592 157 .7018870144583101 +604 157 -.3932426722194754 +618 157 1.9631462804337731 +621 157 -1.3236268962390259 +624 157 -.29187661206140486 +637 157 .5716436122714279 +654 157 .8975636190955414 +659 157 .19555745967925398 +668 157 -.980543054286987 +676 157 2.431132278553566 +677 157 .13990586794304724 +679 157 1.382181384932251 +694 157 1.6187846063943203 +697 157 -.3306144896431437 +722 157 2.4906674460399993 +726 157 .7377232984780302 +730 157 .5236544078823384 +736 157 -.749882385729766 +747 157 -.4921596284177459 +749 157 .34320679238043694 +764 157 -.6754808270062675 +777 157 -.11717905416708146 +782 157 -.0494738500377753 +804 157 -.8194944371124693 +862 157 .18891477784105926 +863 157 .39369630347872653 +867 157 -1.4175305276822745 +880 157 -.07950081418327225 +886 157 1.5106010944080799 +894 157 2.1149347797532108 +896 157 -.05239656876792297 +898 157 -.25083985994837493 +899 157 -.1103401283110031 +940 157 .6054725960290259 +946 157 -1.312060791510036 +948 157 1.2977113339635191 +959 157 2.9254926794880367 +965 157 -2.062563922762371 +967 157 -1.1438845700853082 +972 157 -.994835099728313 +985 157 1.0766302909262149 +999 157 .7535418631730939 +6 158 -.483573021474833 +35 158 1.1814456534680786 +37 158 2.6393765038701993 +52 158 -2.6376211526018833 +67 158 1.4790868698473432 +75 158 -1.717150689143107 +80 158 1.0331858298589753 +102 158 1.218411576334057 +111 158 .1503905560509503 +119 158 -2.109992648323519 +127 158 1.8647987352049264 +130 158 2.2941569414160417 +134 158 -.6320553148831765 +139 158 .3658037927398444 +142 158 -.6214084770376616 +146 158 2.1444403355911303 +148 158 .3988496705803786 +152 158 .5024156067985242 +155 158 -1.317208773785969 +165 158 -2.352004874996989 +172 158 -.518859451981095 +174 158 -.6518929552403623 +199 158 -.34790551461317787 +204 158 -.40801943105346256 +222 158 .381165137132538 +232 158 .7032878601148967 +244 158 -2.473514186211355 +245 158 -1.1750440796961843 +255 158 .9557367127247627 +267 158 1.0754157360783563 +278 158 1.119467565641667 +283 158 -.7187203458594391 +290 158 -.9019327841520064 +296 158 .4931357743283066 +300 158 -.556403859615219 +316 158 -1.757258028389374 +329 158 .3714923206697525 +337 158 -.6789250155949044 +340 158 -.5894900775702557 +342 158 .6179910567506207 +354 158 -2.922597278285763 +365 158 -.33361984404539546 +373 158 -1.2520126836010252 +381 158 -2.940152100811185 +431 158 -1.8806666853400655 +434 158 -1.7292113483917901 +437 158 .9042184589439591 +439 158 2.401355689795666 +442 158 1.6115209987926276 +444 158 .5893020625742269 +450 158 2.9503006884423884 +461 158 -.7604656294605664 +473 158 -1.1276736304076125 +501 158 -1.4860958593079063 +502 158 1.0216360464352334 +506 158 .7061309791600718 +507 158 .6428244328622584 +508 158 .8962963700925839 +512 158 -.5359051158696464 +515 158 -1.2132375579573287 +527 158 .3043241438859512 +529 158 .7171283844605317 +567 158 -1.1603904238473655 +568 158 -3.6496965068490383 +569 158 -2.4872330761937707 +596 158 1.0370196977285429 +601 158 .009185157955585221 +617 158 1.0885216016174535 +644 158 .2451650107346032 +647 158 -.2226436512802118 +677 158 -.421102005699729 +683 158 -.8120545524247178 +687 158 -.40708849787302126 +689 158 -.515241254122627 +691 158 .10205298993417575 +694 158 -.37681545162267427 +697 158 -1.3576930464359689 +706 158 2.2714315115520836 +736 158 -3.5561790606520463 +757 158 -1.9014933253604624 +760 158 -2.2728496782879857 +765 158 .07456718460998832 +766 158 -.3683730542739275 +776 158 1.2989491072333879 +805 158 -1.016377497989291 +832 158 .9263807358521696 +852 158 .6540017293502264 +856 158 -.5746935885321255 +859 158 2.6350339816014423 +868 158 -.6758035241018419 +877 158 -.3959973561539297 +898 158 3.1173167891901064 +903 158 .6962989826417393 +905 158 1.4803104626653325 +924 158 1.1307004818910296 +930 158 -.31800554799506764 +938 158 1.4101962023483965 +958 158 -.09230965139449203 +963 158 .686214116266216 +965 158 .8633717364176892 +967 158 1.5359081297537764 +969 158 4.097889615383072 +3 159 -.12613876546172978 +4 159 .3045397972799745 +16 159 .22204143028037754 +19 159 .424059371649115 +20 159 .004337063576236186 +21 159 -.38202319044045957 +22 159 -.24550876863138738 +25 159 1.4779255439151522 +34 159 .6788937213403426 +38 159 .4727480062896653 +46 159 -.09947070710033115 +54 159 .22200568484318464 +83 159 .5244494188942947 +100 159 .8368315728145513 +133 159 -.7239390897615182 +142 159 .1571161719783023 +146 159 -.44394033447922493 +153 159 -.3320285812166088 +159 159 -1.1823758110798275 +187 159 -.3564497189571231 +190 159 -.06519345696089195 +205 159 -.6756722677731832 +213 159 -.08634705953722013 +245 159 .983882453018946 +253 159 .056423986123324554 +263 159 -.9440712210492137 +280 159 -.27629506266179255 +296 159 .3502248710296281 +305 159 .6358467998069648 +321 159 .371513724104992 +324 159 -.6532789856819631 +327 159 -.09102550287181203 +329 159 -.5810813963817728 +332 159 -.3632366858420487 +335 159 -.5517550500639483 +342 159 .36365860299902314 +345 159 .5163157088038188 +369 159 -.4653734559175187 +378 159 -.3858962465156389 +382 159 -.2757717691110029 +385 159 -.09281439743950823 +405 159 1.2147735505018786 +408 159 -.5805104328308491 +414 159 -.11019297969137966 +419 159 .6795480807605517 +463 159 -.5229380831824498 +478 159 -.010979243573783364 +480 159 -.35802358540849666 +489 159 -.41925263666508644 +514 159 -.20629978350862985 +528 159 .1762127475567995 +537 159 -.5677195374759004 +569 159 -.21272200488892343 +586 159 .040370327131438136 +590 159 .2084373725477985 +618 159 -.6635813190865432 +619 159 -.30129725624890846 +627 159 -.3801810063231955 +634 159 .5301138792266272 +638 159 -.3778211779159469 +640 159 -.43881564414901686 +668 159 -.39500870357599194 +669 159 .07083642720505332 +679 159 1.131561824081135 +685 159 .1846058087628058 +687 159 -.6728163102445264 +690 159 .5331093388922968 +698 159 .07145419768754645 +700 159 .13289434067541636 +705 159 -.6271576970846932 +711 159 -.6939759471966356 +718 159 -.40851551520274293 +766 159 .04702362742919969 +773 159 .5853236745806334 +780 159 .0658234549418456 +782 159 .3543795054253629 +783 159 -.7416405532991841 +788 159 -.36438763800093016 +815 159 .596585853342398 +824 159 .05531385840126968 +825 159 .11321871645861352 +843 159 -.013224054413534927 +844 159 -.28989084887466415 +846 159 -.00868568331837559 +856 159 -.5767170546213052 +879 159 .8955514067962501 +887 159 .12652416840307432 +917 159 .4602430919290188 +943 159 .05833545509954747 +951 159 .2728863209715127 +960 159 -.4067727202867605 +963 159 .8178711129482079 +966 159 -.1182134547349237 +967 159 -.37640674334203345 +975 159 -.16470327959573872 +976 159 .4401968407190897 +983 159 .37523221415649144 +25 160 .7679528089778334 +43 160 -.6024800947843068 +50 160 -.4155701606240199 +54 160 -.4679148198106549 +59 160 .9349665529036828 +61 160 .5017304209725376 +70 160 .08657287891244561 +72 160 1.4170189936263633 +105 160 -.5808916786404342 +107 160 .016976469115929017 +121 160 .30500205527063506 +123 160 -1.1311649098073053 +127 160 .8649700108669397 +129 160 .453790474601484 +132 160 -.6620552416628106 +142 160 .030972510824669626 +158 160 -.12706361757381313 +167 160 .021301087612348453 +177 160 -.9858670948350636 +201 160 -.9456018500175938 +204 160 1.7324994627342216 +211 160 .7600850570628204 +216 160 -.8167007488455382 +225 160 2.055365911192312 +235 160 -.2990195975776442 +250 160 -1.5238650410444936 +252 160 -.6301598460332047 +262 160 -1.611845857526783 +267 160 -.05112084227748828 +273 160 -.08820788444934302 +280 160 1.3381766165565432 +294 160 1.9751175112723267 +295 160 -1.3229063864056623 +323 160 .22108906518438104 +326 160 .5162173343469372 +340 160 -.9160141316598707 +347 160 .3399923280577317 +357 160 1.1759927984341478 +365 160 .43544573716469 +369 160 -.21682797428480388 +376 160 .12316288480973239 +392 160 -.3279470568591185 +414 160 .007066220478408727 +418 160 -1.369330741725861 +419 160 1.4571168634282399 +454 160 -1.36843166251635 +468 160 .09032130782051674 +486 160 -.1459251507741752 +494 160 -1.2828972021859582 +502 160 -.9944393081237617 +503 160 -.7497304594176085 +518 160 .8903126677880422 +521 160 -1.7497526574985878 +524 160 .31398815813150155 +540 160 -.5741335689772008 +546 160 -.14334102413555205 +548 160 1.3677926520599863 +565 160 .6835818353079824 +583 160 -1.9515105070740533 +584 160 -.31847454399425373 +591 160 1.1049384065861096 +593 160 .13882486612555484 +595 160 .39720991086267465 +599 160 1.097813612069774 +600 160 1.7433670314654421 +602 160 -.3638971003095211 +603 160 .915797492321009 +607 160 1.0417316888953525 +609 160 .2005208572180141 +652 160 .7652832416789587 +654 160 -.2777312196696694 +665 160 .12823777133017836 +670 160 .5306265744067371 +677 160 .16764932461864146 +706 160 -.5184309765160683 +741 160 -.6587352437732308 +753 160 .2831285702856866 +762 160 -.267956495894511 +782 160 -.11346710167043442 +796 160 -.40892641015409154 +810 160 -1.6157033893716075 +839 160 .37782537271037786 +842 160 -.9281006957279959 +883 160 -.45622146594195445 +892 160 -.924323817499075 +924 160 1.7930328647391018 +934 160 -.4218575104647903 +937 160 -.9845436836315952 +945 160 -.3517488125267045 +972 160 .49983296133370647 +977 160 1.3210814702640166 +979 160 -.18552252534024538 +984 160 .8396444951901038 +28 161 1.6635986805373402 +44 161 1.2462634391333622 +61 161 1.285771921542958 +66 161 .6906081671532612 +69 161 -.3798110470858188 +74 161 .10874795798864542 +109 161 1.2967189897263887 +121 161 .7631703918963428 +136 161 -.6320204487254294 +148 161 .1803106879811426 +167 161 .41185939090887624 +171 161 2.9624513049659633 +173 161 -.9710573937984639 +185 161 .8592978646797391 +202 161 .8920924579873393 +207 161 .17932506307931526 +212 161 -1.5283340120092515 +226 161 -.7470591491959305 +246 161 -1.516587732689103 +248 161 -.025744133710282502 +269 161 .40875787531730573 +285 161 .7737768742360462 +311 161 .4416393795191226 +325 161 .10117963379404035 +344 161 -1.149313202860395 +358 161 1.9195402276849927 +382 161 -.6789968901042287 +383 161 .25057182378910836 +386 161 .9263631444594033 +387 161 .48150315693651313 +397 161 .16493151516471544 +408 161 -.0885069783797668 +416 161 -.43255343937014396 +449 161 2.6017169748688342 +450 161 1.1924499373507986 +456 161 1.2889122171881198 +489 161 -1.203836057833014 +509 161 1.1706762350856779 +511 161 -.18571205099806593 +513 161 1.403928106748833 +528 161 -.26213873898200074 +529 161 .12099467055153333 +531 161 .07869293471015634 +549 161 .6309307715469334 +586 161 .504361848436651 +604 161 -.43468950819798624 +621 161 -1.5637067711864205 +647 161 .856662097238758 +651 161 -2.168090458698831 +653 161 -2.2497677431474465 +676 161 .5126220347699865 +677 161 1.044176603224669 +694 161 -.7601081831639718 +702 161 -.19039145973120392 +718 161 -1.4538754137062946 +721 161 -1.1298309353760538 +724 161 -.014468873910915031 +735 161 1.035190902636288 +741 161 -1.287010606074323 +749 161 -1.882396799538594 +752 161 .09766706202093202 +767 161 -.5711271200324345 +769 161 -1.1135591416124264 +801 161 .6966993463919541 +810 161 -.058750792374239 +815 161 1.3687417337151375 +816 161 -.06669685872711631 +823 161 -1.1294991489798185 +833 161 -1.2615083506051565 +834 161 .38879761752914394 +841 161 .6294967748760012 +855 161 .3038766400486434 +898 161 2.665771045180422 +901 161 -.4578585214353387 +938 161 1.694215722804266 +944 161 -.34571650244639895 +950 161 -1.7498928799514815 +952 161 .8004421140546027 +964 161 1.263434994064264 +973 161 -1.533000250505684 +977 161 1.5895446901080936 +984 161 -2.427675427256165 +989 161 -.684694074593337 +996 161 -.26844893188608043 +998 161 1.9370989256940232 +1000 161 -1.1139432389655026 +9 162 .666353258070919 +65 162 -.6720278303848621 +69 162 .7406358307322246 +81 162 -.3882250508438242 +91 162 -.71325420319407 +95 162 -.164451502856473 +160 162 -.4533228338418698 +164 162 .2745136811038834 +172 162 -1.1653150049719916 +173 162 -.0940642837391113 +176 162 .735498967468455 +179 162 -.45869363761798865 +214 162 -.3385880378797697 +216 162 -.42252070028686 +218 162 .8302425062955502 +220 162 .7302542160334464 +228 162 -1.0028613280987047 +229 162 -.791687640628736 +280 162 .029840802166914038 +328 162 -.24737440020955767 +337 162 -.06397840703349156 +348 162 .5876602852730888 +352 162 1.6520709267489053 +362 162 -.41633138088511 +369 162 1.5773874208416983 +384 162 -1.4889234447465391 +388 162 -1.469303765933315 +395 162 .2912731437422741 +420 162 1.1786378302031841 +432 162 .539749408695653 +434 162 .21186949526545676 +447 162 .6697563393765249 +453 162 -.13567920336148845 +455 162 -.5124571948426815 +462 162 -.17073240540847637 +469 162 -.08348126106672564 +472 162 -.7190054431721253 +483 162 -.2997878232407232 +488 162 .36920071119376435 +494 162 -.13075244081803816 +508 162 1.0121157340264941 +511 162 -.2069568400634705 +527 162 -.9348908972089948 +528 162 -1.8456618863797705 +540 162 -.18787967002378822 +553 162 -2.0253324120835945 +560 162 -1.4826481116441252 +563 162 -.35127045001717755 +565 162 -1.6135537040753607 +573 162 1.798049393240452 +577 162 -1.1823768587437784 +583 162 -.39688613766255043 +610 162 .37843552206088493 +622 162 .21668655069870674 +630 162 -1.5060932118612798 +635 162 .5225608220295321 +636 162 -.2104635374705481 +639 162 .5481194847993699 +642 162 .5336528294013123 +650 162 .6458924965274698 +679 162 -1.066532961835382 +687 162 .9282732173331848 +693 162 .4358786431796509 +695 162 -.8137422770527343 +708 162 .5863167788196265 +728 162 .28470639886399557 +729 162 .3542102372147439 +730 162 -.29006310933225 +734 162 .9764371833781555 +736 162 -.9927254572423471 +745 162 -2.235871881180369 +747 162 -.4558059480893684 +750 162 .0652996365999568 +767 162 .4151658044225632 +780 162 .9699084558217606 +793 162 -.8235391859030223 +800 162 .5881621953953153 +809 162 -1.0787394474696985 +821 162 .09244634448438012 +831 162 -.22450959538694282 +845 162 .8594725478656171 +859 162 1.3068466906396004 +863 162 .11132148857050643 +870 162 .6349050352745986 +875 162 -.050328326449360514 +898 162 2.9326079366895335 +906 162 .5706402598215468 +910 162 -1.4535642052153372 +918 162 .3102047525654362 +932 162 1.4698958126476136 +937 162 .4851967633689223 +948 162 -.02206743576473054 +974 162 .681974385475182 +989 162 -.6399099249691079 +7 163 .6590487755220753 +27 163 -.22365358015692763 +29 163 -.8215754060294208 +43 163 1.973620079346849 +52 163 -.37451956955183363 +55 163 -.48143749129991714 +60 163 -.16492337112592487 +71 163 -.7011273752541601 +73 163 -.57549835260717 +80 163 -.03757325777439264 +101 163 -2.22529137350672 +128 163 -1.8383020093594822 +134 163 .8964708042025061 +138 163 -.9785792289187593 +150 163 .4847157753637954 +155 163 .7761765390566062 +158 163 2.0955125354713946 +161 163 -1.04708971625811 +167 163 .21005308679458004 +169 163 1.6429656846534302 +198 163 2.3145999429907036 +201 163 .6957377861911355 +202 163 .995480118723084 +221 163 .5040743613352873 +234 163 -1.0233849599019413 +241 163 1.2201156794241492 +247 163 .17109599698209127 +288 163 .020960399818214515 +293 163 -.025658712073514077 +304 163 2.2837535654447096 +312 163 .4527599267479824 +332 163 .5126715150459755 +342 163 -1.182723410223817 +346 163 .5041154528595544 +348 163 1.7551315157903642 +360 163 -1.041405872124898 +363 163 .8761709185781887 +369 163 -1.2312106462343353 +373 163 .6804070166183838 +379 163 .5117122823730428 +392 163 .30742437059405636 +404 163 -.8567271384052284 +410 163 .5318513368806345 +421 163 -1.1889330977913022 +433 163 .33774655646585605 +437 163 .1653757716613473 +451 163 .37985641707194867 +481 163 -1.4816326475542092 +485 163 .15637159591763136 +487 163 1.0691263517055036 +502 163 .8758165130759902 +511 163 1.3777177229996 +531 163 .21290259767554348 +532 163 -.20572899722409196 +537 163 .22039000820802626 +549 163 -.6719613976175355 +564 163 -1.2046302214853781 +583 163 .35403475970160503 +585 163 -.4252927683163964 +586 163 -.20464718805623733 +592 163 .000732205148276252 +602 163 .6338278897003209 +610 163 -.33732310779073343 +626 163 .5830644216131642 +636 163 -.4983833486363247 +639 163 -.25370487646127676 +640 163 .06229661193535384 +642 163 -.8942712259548047 +651 163 -1.3498279455559812 +676 163 -.26892066250098956 +679 163 1.220492156981195 +685 163 .016146487000653464 +704 163 .37270675692363003 +718 163 -1.6603643578665437 +721 163 .41581729691307173 +741 163 .15362358456478165 +750 163 -.0767058152855279 +756 163 -2.613212490503133 +765 163 -.32129737448687934 +771 163 -.03280028731398778 +774 163 .0824977263322291 +776 163 1.6067464152269815 +790 163 .9864247702680791 +794 163 -1.4334511170293496 +796 163 1.5544921165231391 +797 163 -.6840277938354944 +802 163 -.6168964845116778 +820 163 -.9768241862954838 +832 163 .6149757927730667 +844 163 -.9361105836648107 +846 163 -.4665263845725941 +847 163 .5099855799190689 +855 163 .06465943824253796 +876 163 -.3032351261419791 +885 163 -.5482977731037606 +914 163 -.3927341549922341 +915 163 1.8992870663753016 +920 163 -1.7632811953920862 +935 163 -.3400708211700461 +939 163 -.46354232474620466 +945 163 -1.6590263841352297 +947 163 -.8734864609476725 +949 163 -.44195919573008335 +959 163 .9102795230738105 +963 163 -.6852600430279924 +976 163 1.6528110542080008 +978 163 -.11502077251262954 +990 163 -.18683799473290724 +996 163 1.133445521565688 +32 164 .29861685931991677 +48 164 1.8002950978979926 +49 164 -1.8247196442372844 +72 164 .2779628978559452 +75 164 -.017239959687484402 +88 164 1.1348640425197827 +91 164 .7502179357913985 +96 164 .46217957798240533 +120 164 .5147370548949226 +121 164 .8768756968457189 +127 164 -1.408734668451253 +138 164 .14854333182215143 +160 164 1.4862873194409734 +204 164 .18803883652769648 +206 164 .009657740439967644 +214 164 .26412575209779016 +236 164 .8094107570812893 +244 164 -.4858223751109978 +299 164 .49529278906726565 +309 164 1.3101123906797156 +311 164 -.3833578860610857 +329 164 -.2643362418807471 +336 164 .8726564315550925 +347 164 -.31771753018464477 +355 164 -.7259352962590016 +362 164 -1.1783477747523712 +370 164 .6559217148129881 +373 164 -1.3674778643396384 +392 164 -1.9469856647680543 +393 164 -.15841436544885906 +402 164 .7321751128077628 +412 164 -.33878556602465404 +427 164 -.8107647162870166 +448 164 -.5327467072645165 +450 164 .8818384920870838 +461 164 -1.6425714577007524 +468 164 -.4301724522885336 +471 164 -.27525012681152894 +484 164 1.4158046415637429 +490 164 .6092091045651092 +518 164 .6434637129511865 +520 164 .7106189931765239 +526 164 1.159200378483351 +536 164 .7078317520384025 +551 164 -.7180144829832017 +557 164 1.4151696920840038 +562 164 -1.0874333413763948 +574 164 -.4173025031863243 +579 164 -1.2873052360286197 +588 164 -.5169318347743189 +593 164 .846677763948087 +596 164 1.0093169432221252 +602 164 .8134988397099521 +610 164 -.39422273265455143 +615 164 -1.4642697035947374 +628 164 .796932831496013 +659 164 -.15384056809788832 +660 164 .5875920089508069 +667 164 -1.7677288976725936 +682 164 -.1441724778086222 +683 164 -.4539846246965749 +704 164 -.8051546387906865 +719 164 .006336595749866697 +722 164 1.1325972312516281 +727 164 -1.1375571094252508 +732 164 -.8190102694971173 +748 164 .944951170791908 +780 164 -.10113416477496168 +792 164 .20631014486157745 +812 164 .3119493104919966 +813 164 .6757255774282732 +823 164 .8856189860877359 +828 164 -.1487872204954364 +831 164 .9816617457998338 +848 164 -1.407418974799465 +867 164 .19437722922361259 +868 164 .5068369458123962 +883 164 -.6276209491009116 +904 164 -.569594343656532 +908 164 .8004032152386995 +961 164 .25283308037470165 +969 164 -.9963616362050789 +988 164 -.012087323869710703 +993 164 .7147190727040877 +994 164 -.8117225411350597 +1 165 -.2760707452885129 +11 165 -2.213450494987312 +13 165 -.3597876969909236 +25 165 -1.1790220492337549 +27 165 .03604965919048883 +29 165 -1.2178061521059864 +56 165 -.18634334040861333 +72 165 -.8328893946969207 +82 165 .39252493351783 +96 165 -.1038449969711876 +102 165 1.3063577124108385 +140 165 -1.1471127159232413 +160 165 1.4962736156395875 +187 165 -.7395118559208357 +203 165 -.4125871414100679 +209 165 2.1305578029639434 +212 165 -1.6325628983446314 +250 165 -.3292441145795924 +260 165 1.6957687245364654 +274 165 1.70236785297688 +276 165 .6642822336819497 +282 165 -.12530809325339262 +285 165 1.1219006357510088 +296 165 -.06538605505578228 +302 165 -2.7048960800706694 +314 165 -2.1868198767626534 +315 165 .11629441089419357 +323 165 1.3783839450348603 +330 165 1.0048771180970295 +346 165 .3244093714925861 +348 165 -.12563571170052526 +351 165 -2.8300416146899643 +361 165 1.0561575584690988 +373 165 .2598645146573335 +377 165 -1.6728411690038618 +380 165 -.9170240477619324 +393 165 -.9766694260207046 +410 165 -.5503088163231405 +422 165 .0955782430795927 +427 165 -.45045745545567994 +445 165 -1.7996718172191937 +468 165 -.2314109878175367 +476 165 1.0570329760163368 +487 165 1.4324623737642364 +500 165 1.1806867436667403 +536 165 -2.590020329695989 +537 165 1.3241078166605127 +543 165 -2.4259253930272426 +549 165 .6944611855805033 +551 165 2.204740719048171 +558 165 1.3565104219101969 +568 165 .10667202587925984 +591 165 1.4685864550038668 +603 165 -.9474264556767312 +641 165 -1.01186061420321 +645 165 1.4006587774809593 +652 165 -.22997127831812278 +653 165 -2.3834041007721187 +662 165 -.7030776647949396 +664 165 1.02264055436787 +678 165 .6912376148152385 +702 165 .7622801284121556 +708 165 .8975419505644089 +709 165 -.9594887570748667 +710 165 .4633441198020618 +725 165 -1.4337890836197988 +731 165 -.09150033876332456 +748 165 1.6739176420717763 +758 165 .8158752963399958 +761 165 .2799730756344971 +774 165 -.07539783836260945 +785 165 1.1125719156573899 +802 165 -1.6220218200005423 +808 165 -.17178893360624997 +814 165 .8287672104776389 +820 165 -.8451852829564329 +866 165 1.7212723381574422 +870 165 -.30760162019366577 +871 165 -1.066061642338091 +872 165 .7056580178644549 +887 165 -.09050744917800739 +892 165 -1.2360179452988733 +906 165 -.5863487986073308 +910 165 2.141716099915732 +925 165 -.9608971256652667 +927 165 2.5502506146454316 +929 165 .21763638802963886 +936 165 3.011231412768723 +956 165 .062024957242014844 +969 165 -2.671798360125546 +973 165 -.3712761198628616 +978 165 -.9230212474281995 +14 166 .519071219608645 +24 166 .23415123129094967 +33 166 .25592862434238195 +51 166 -.6253183683804107 +74 166 -2.711309352906794 +110 166 1.1391239911222937 +117 166 .49492844826570837 +130 166 .5317252969099402 +132 166 -.12230539350216904 +133 166 .7615605895163564 +134 166 .9726787662690932 +171 166 1.0206909302778149 +173 166 1.0340053535117173 +176 166 -.47934268312243045 +184 166 -1.344990001012119 +198 166 -.3390340421287248 +200 166 -.43071625510741174 +215 166 .39744957752229426 +217 166 -.35330633524828003 +219 166 .5730630210507647 +226 166 -.04054201797064334 +228 166 .3405522508508281 +231 166 .07767123214683119 +232 166 -1.4614171239371703 +239 166 .1717704751166649 +240 166 2.0063276017202925 +241 166 -.6851897166988203 +252 166 -.9556296733707218 +253 166 .06731122943005516 +260 166 -.9611659068806221 +267 166 -.308635057287044 +284 166 1.1688174429230715 +285 166 -.6444094300729101 +286 166 -1.0115247760659363 +302 166 -.05066422784900297 +319 166 -.263201399537953 +326 166 1.3942372638540768 +327 166 .5316056106105558 +330 166 .6196942520692408 +332 166 -.07151232468156385 +337 166 .5096487566002601 +342 166 -.4123825609796358 +343 166 .4855604717514453 +346 166 .08219906866257728 +355 166 2.2350262015172757 +364 166 1.2475321154274246 +366 166 1.1398167342021563 +371 166 .8744676561517978 +380 166 .3028700486221125 +387 166 1.0201095985724546 +395 166 .434850288203395 +401 166 1.3569806209778157 +433 166 -.45830233762664635 +452 166 -.3134871760743253 +455 166 .07050572253972817 +462 166 -.1613889913147895 +484 166 -2.4055017447121783 +488 166 -.9889019893128355 +499 166 -.18274285937997975 +503 166 1.4016986325972927 +504 166 -.02742918146308404 +514 166 .39187120317935786 +515 166 -1.62911631571971 +519 166 -.19222788406601798 +520 166 -2.1325713358347715 +552 166 -.5375958110029564 +563 166 -.6374878495729375 +569 166 .6234258433831714 +573 166 .5406403934612827 +574 166 .25783498098785645 +587 166 1.692646615194016 +590 166 .02966558955113477 +638 166 -.7681473715286715 +649 166 -.027432922400552215 +655 166 .3159359950795923 +657 166 -.11578895737326632 +661 166 -1.3984300185065097 +665 166 1.1025158571528912 +674 166 .973267859372152 +688 166 -.3078735232983832 +700 166 -.8392586243807268 +709 166 .49157989180014783 +721 166 -.12473265854626796 +723 166 .49081029765211526 +729 166 .13510996255251384 +739 166 -.4708713584273419 +743 166 .13851578288903957 +752 166 -.885622673262563 +786 166 .8548374463051194 +792 166 .7881386069254598 +797 166 .1305863433802916 +830 166 -1.069240808465354 +831 166 .6570213824510285 +837 166 .038982923553465915 +852 166 -.7733087947253334 +858 166 .26976767739466995 +859 166 .4585527760609188 +866 166 -.09201102457875035 +871 166 .10723805624843435 +877 166 .011805870258691495 +903 166 -.7855116567773074 +907 166 1.2037983597504125 +909 166 1.4916254977501966 +910 166 -2.1546049289891442 +917 166 -.6075991219647817 +919 166 1.5029492379987153 +924 166 -.18271985689823983 +926 166 .7516679443669303 +927 166 -2.3755242778992405 +932 166 1.0938437632726743 +948 166 -.05335582630455166 +963 166 .3013708301727407 +979 166 .6133205708290561 +989 166 -.5216531047706667 +995 166 .7524202614219879 +997 166 -.23257368056298006 +9 167 .534671724095545 +14 167 1.737770378523863 +31 167 .5558921764767613 +47 167 1.0722909015373603 +54 167 1.290094110285605 +57 167 1.3678880621423404 +67 167 .44147929594998125 +80 167 1.489174258182922 +95 167 1.0917862286118758 +114 167 -.7535031109045369 +118 167 .27415866844994435 +125 167 -.21299028442145151 +131 167 -.7715490785693961 +140 167 .8799752438094355 +142 167 1.2878851345826705 +146 167 .21956885285612074 +154 167 .3015230801327115 +156 167 .09409421381228801 +163 167 .9549822879459028 +165 167 .494380071251454 +189 167 .3453675598096732 +191 167 -1.5269614244706289 +204 167 -.14034116811822653 +205 167 -.5184829594533988 +209 167 .3062627655488143 +218 167 -.6283775405473173 +238 167 -.2916496910492342 +263 167 -.9864394030254297 +278 167 .9277094481491298 +315 167 -1.0695653481236778 +322 167 -.30334869273614223 +323 167 -.1362036900510736 +330 167 .49690469229311773 +346 167 .7102683673969928 +350 167 -.3177568000418366 +383 167 -.3982614611989117 +391 167 .08177668367923085 +392 167 .02848032897988756 +399 167 .3787642042885553 +405 167 1.0906156094685073 +412 167 -.4622735883344279 +426 167 1.7270388143310176 +437 167 .23460788885682965 +442 167 -.027621706616024734 +448 167 -.7782123106615314 +457 167 -.0755635178266274 +483 167 -.09458867144929478 +491 167 .29120756045215623 +493 167 -.8361456156427145 +500 167 .22836095223325215 +528 167 -1.121537290843321 +539 167 1.0067302935273368 +540 167 -.15431663306462196 +545 167 .6397697503053651 +546 167 .2695037940454054 +547 167 .12875338640245898 +552 167 .9374360335137949 +581 167 -.728995483412789 +624 167 1.048883064505941 +632 167 1.3973299421026333 +645 167 .5828842138342484 +654 167 -2.966102491336404 +659 167 -1.9539392789151915 +674 167 -.3015249082236946 +701 167 -.29430601899512415 +721 167 -1.4681487709123915 +727 167 .29234358819153905 +741 167 .2573402097885063 +750 167 .029718902562924636 +781 167 -1.3905162633203365 +786 167 -.7497123006811434 +790 167 -1.2176873358337441 +800 167 .8555334063806006 +810 167 1.1806576373444462 +823 167 1.166045595219666 +824 167 -.6243518133380497 +833 167 -.666642079907437 +834 167 .41202479090458183 +836 167 .223709733519381 +848 167 -1.7837135934598702 +855 167 1.7069351260752135 +857 167 .7581192558274444 +861 167 -.1650992707154249 +862 167 .589821853322311 +863 167 -.18877179270941405 +866 167 -1.0633761395379744 +896 167 .5142744054190569 +897 167 -.37521395575915417 +904 167 -.11690181543759826 +906 167 -1.3222570908979525 +953 167 -.5530167930253638 +982 167 -.2784912747753939 +993 167 1.4219058887988303 +995 167 .4608502042758846 +33 168 -.34047164505178545 +45 168 1.235654477034102 +59 168 -1.320592803576 +61 168 .18546853713580386 +67 168 1.0170750712386334 +70 168 .8113666590657747 +71 168 -.10016320473914322 +79 168 1.5199043534136278 +97 168 1.891038500343135 +99 168 -.3919015215054856 +101 168 -1.6274280863404624 +109 168 .08469734147264049 +117 168 -.2627742396598548 +133 168 -.7832510558894816 +134 168 .8602622450940131 +139 168 .03339049163271447 +140 168 .5139079008451441 +146 168 -.3459206770187269 +147 168 -.9268969896538675 +155 168 1.0761016272278705 +165 168 .6668208349805999 +171 168 1.0332034017799445 +180 168 -.17423585922092122 +195 168 -1.3059481839305465 +211 168 1.113076388556402 +213 168 .33558132329219315 +261 168 -.3507849983253841 +266 168 .2942727458251636 +272 168 .03174896852174171 +300 168 .5379589970174202 +303 168 -.7132002678134176 +338 168 1.6625638708705186 +344 168 .030477160959062707 +347 168 -.8766042930424097 +375 168 .44711252141731317 +376 168 -.8305448447896007 +380 168 -.7149790736140745 +388 168 -.6392924858550576 +389 168 -.2276177382826838 +398 168 -.41607347366600794 +410 168 -.8989547990924793 +411 168 -.7206925151151449 +413 168 -.5337513591302623 +417 168 -.5472775492268683 +426 168 -.5161400412461006 +449 168 .5280025550921156 +468 168 -.7149503578311526 +490 168 .5048648203951361 +495 168 -1.0796789981891182 +501 168 -.9897829842124185 +510 168 .6368689049629954 +513 168 .19620908548722554 +515 168 -.7249459561428219 +519 168 -.1867486937333509 +520 168 -.4618166418739519 +529 168 -.41851173966403993 +534 168 1.1873337382760258 +542 168 -.4580888779140335 +547 168 -.6205441030283423 +564 168 .3097692453549035 +567 168 .23905250627058683 +589 168 .21415571952299528 +590 168 -.33479442248306357 +598 168 .6543888605373832 +607 168 -.8562001108881034 +621 168 -.8615933799424123 +626 168 -.1575215313158712 +633 168 -1.6703486789433868 +635 168 -.3217377748839847 +644 168 .48906533623099374 +647 168 .40812164900300085 +648 168 .28381044424625057 +661 168 -.9589381388163325 +671 168 .5348493073305836 +689 168 1.1260269402971925 +693 168 -.3819969515349269 +694 168 .5761655976103821 +710 168 -.41678228383542937 +716 168 -.0002625114404233679 +754 168 -.5814481204855156 +760 168 -.20807089169152745 +762 168 -.04800960012180076 +767 168 .04543483461983746 +789 168 .11554008289149384 +796 168 -.07611951486079378 +799 168 .6716155941134385 +809 168 -.3982863910775458 +814 168 -1.2125580329529364 +821 168 -.05355893879108506 +824 168 -.22038317099777813 +839 168 .5678850649311197 +846 168 .6703259493025455 +856 168 .9066667962444986 +863 168 -.8598496198490049 +866 168 -.9440017864989421 +895 168 -.17638979767697135 +929 168 1.7724391251536868 +934 168 -.4560445217328278 +935 168 .719983944544825 +954 168 -1.5440127223805487 +960 168 -.4377992604057525 +981 168 .14804183534296372 +986 168 .0639149850395915 +988 168 .49502350690168617 +999 168 1.9407930378518121 +4 169 .2413195583390781 +12 169 -1.2982909767050577 +54 169 -1.6931776436708654 +55 169 .12602951222090594 +69 169 .41717744106487653 +76 169 -.26405177117388223 +79 169 -1.1885417181331712 +88 169 -.7797573974271669 +92 169 .17831156335032375 +97 169 -.6684162281279102 +105 169 -.18822901728389307 +123 169 -.46079723980590737 +143 169 1.878552925526749 +145 169 -.6622240775958557 +158 169 -.42109434635768717 +163 169 .06592872732749508 +164 169 -.26400585725599235 +174 169 1.59443292149864 +224 169 -.15081045789965425 +225 169 .8321210310706431 +227 169 -2.2265387069333467 +235 169 -.11648536519880827 +239 169 .6772557404748576 +240 169 -.6558421291292221 +260 169 -.48503947527837193 +272 169 -.34701469635978033 +278 169 -.13169449805640354 +282 169 -.43124438825572126 +283 169 .3033355514346515 +284 169 .020631213587710737 +287 169 -.6283603419245725 +290 169 .12413027157150874 +292 169 -1.682447264125905 +294 169 .8063303979470202 +316 169 -.5705840851885571 +351 169 .45354890719696844 +366 169 -.8385409000510711 +381 169 -.4786322066510882 +392 169 -.11581343180951477 +393 169 1.314185569404885 +407 169 1.4394527595981867 +408 169 -1.6338324114771878 +431 169 .5727731887030543 +434 169 1.3786679155870682 +437 169 -.0025043173475217395 +438 169 .06098465187201543 +443 169 -.6745897359669211 +446 169 -.35162679806764985 +450 169 -.7316430506210363 +458 169 .5615919094379087 +459 169 .5387709109434352 +461 169 .49063504183607476 +477 169 -2.028175612595166 +492 169 -1.3529954781084097 +493 169 -2.4068380963520872 +494 169 -.6395805486182926 +530 169 1.6025264243682986 +532 169 -1.4179787211707964 +535 169 .11803981194783933 +540 169 .8021000245365368 +552 169 -.4558132554744271 +573 169 -.3818326008139372 +579 169 .18098444311761724 +599 169 1.0529552105703417 +629 169 .6378589747276211 +632 169 -.42834325708503174 +638 169 -.43281721619985064 +639 169 .45585125229066137 +654 169 -.4255590837409539 +663 169 -.6459480012693849 +679 169 -1.1943011437383368 +707 169 -.5012590981559596 +709 169 .08832688050339219 +719 169 .9190104898218683 +725 169 -.4917736142038334 +735 169 .9675755547408548 +763 169 .07915308994640011 +776 169 -1.0866126656146982 +781 169 -.6742425348335781 +797 169 1.1217145269151474 +804 169 .11915741918778715 +823 169 1.3638237046194792 +824 169 .4622632082192447 +825 169 -.14067819093280465 +833 169 1.2545812077850644 +841 169 -.0896545261867377 +856 169 -.061856603803359465 +867 169 .6993348914749327 +892 169 .3449058494037218 +900 169 -.7361900748622172 +905 169 .11305393407755379 +923 169 -1.1806435044265176 +930 169 .5296789686133855 +931 169 .10209239187178715 +939 169 .059348123690002336 +955 169 .46113124140447737 +957 169 -.15705077714327836 +961 169 .8029960584245004 +963 169 1.0706679448955712 +964 169 .07181491532645909 +974 169 .8173944000362932 +984 169 1.1697403962859092 +997 169 -.3235866783430821 +14 170 -.3841105494051138 +24 170 1.2358115285684357 +38 170 -.1730181757691795 +39 170 .7137218950620602 +40 170 -.2715690943114335 +49 170 -1.7437450935184247 +76 170 .42759182280805275 +85 170 .2804794155019047 +95 170 .4573429693952163 +121 170 .9074208404585388 +124 170 1.2250536783704173 +140 170 -1.323809411863205 +165 170 -.3774271857478012 +201 170 -1.0113752090495942 +202 170 -.5049580822723888 +208 170 -.37243854915904095 +212 170 .1883957398409114 +228 170 -.6161442237140196 +229 170 -1.1535309453967295 +232 170 1.0639160941213224 +263 170 .6256047597030325 +264 170 .9053321240508557 +286 170 .317086116773491 +288 170 -.4556998645723259 +303 170 -.252453863622159 +325 170 .8428485411487798 +343 170 .3254749172358663 +352 170 -.36322880933032736 +371 170 1.3545559940891463 +380 170 .9261514011914672 +412 170 .9962816233328676 +413 170 .785859304540677 +415 170 -.22275105212880633 +423 170 -.13117488533348298 +429 170 -1.4852050670900483 +431 170 .5157005161350275 +440 170 1.606244430003408 +443 170 1.8463579074304193 +446 170 .4249332726780407 +454 170 .5508782129308883 +459 170 .5690577117885025 +461 170 -1.9940632382639003 +466 170 1.2312657414865331 +471 170 -.8847104654380206 +493 170 -1.2314848123691642 +509 170 .38252090307824727 +517 170 .552196686666007 +519 170 .027797242788828 +522 170 .011913678945415854 +526 170 .8110346335252941 +534 170 .5269939211498473 +538 170 -2.4725967731768654 +542 170 .28981186783547086 +546 170 .5308486612242215 +553 170 .6686485772193239 +555 170 -.9531564798087993 +556 170 -.6149087832637615 +563 170 .6763501251019752 +577 170 .15472891495699995 +593 170 1.3260871240770866 +595 170 .6177079382604179 +597 170 -1.5438351006281725 +629 170 .5528483457411398 +635 170 1.4388007596625978 +639 170 -2.0275453178841722 +645 170 -1.0053120417565586 +657 170 .9591976413145518 +673 170 .2398010814504904 +686 170 .5151843695505753 +698 170 .4255062490340249 +702 170 -1.1203559789311408 +706 170 -.14298690668149233 +734 170 1.2677150779714739 +775 170 .5927874883453279 +776 170 -.41916754807122353 +789 170 .40817707751995463 +817 170 .7822472185855653 +828 170 .040775798558242524 +837 170 -1.5558406851608686 +841 170 -.8552740271125904 +862 170 -.1687378722735584 +875 170 -1.5020222536390022 +878 170 .46382388640975397 +881 170 .02170221237525631 +888 170 -.031702364309203784 +889 170 -.03823688100188015 +896 170 1.0890839433102864 +908 170 .4209487585964931 +921 170 1.0813526727376412 +935 170 -1.065543301122187 +936 170 2.6967120165802037 +943 170 -1.0842696376082441 +953 170 -.43107599868260055 +957 170 1.3297978064786742 +979 170 -.16019124077013314 +989 170 .8204529915007089 +993 170 -.3342692732090009 +998 170 1.9636246360339502 +2 171 -1.2667046392090637 +5 171 1.3699766389027859 +7 171 -.3877499042290667 +9 171 1.370170483849758 +21 171 .37993843759480794 +32 171 .5501136389349068 +43 171 -1.1758468946556824 +50 171 -.45606821174607537 +56 171 .8023388441995336 +82 171 -1.0079672993377646 +85 171 2.0788954956205106 +108 171 -1.1649092915471482 +123 171 .2124728925824435 +125 171 -.5498577856872118 +135 171 -.46463234158693345 +161 171 -.5406714018708003 +167 171 .6630324359863267 +176 171 -.45015932098772077 +182 171 .48149115000465836 +186 171 .2139802414554558 +190 171 -.32810452986909 +197 171 -.218452884370007 +199 171 .276575962509524 +203 171 .2174843134997376 +209 171 -1.2720032040744575 +234 171 -.9884303145630877 +239 171 2.4571076878661278 +255 171 -.7439238467050969 +269 171 -.7783623913239807 +277 171 -.3051659186508559 +289 171 -.7131593530920491 +292 171 -.28299343809367417 +320 171 -.45466801408428603 +326 171 .26649597417803544 +327 171 1.0406695606829661 +339 171 -2.45614018250183 +342 171 -1.1501014803534728 +343 171 .39811435972426396 +351 171 .9110003463463809 +360 171 -.5895433410237942 +366 171 1.2525761034812952 +369 171 -.27145776055053195 +372 171 -.06627826016429203 +378 171 .6442053681723608 +380 171 .3579798897070783 +381 171 .1974655329844507 +392 171 1.1500463027549084 +417 171 -.4639491904334126 +418 171 -.6926507082790523 +419 171 -.20150244305859882 +440 171 .25616948368471976 +443 171 -.7912575860065456 +448 171 .4552666114428447 +454 171 .14949030913262334 +458 171 1.77700940035597 +471 171 .38692484962635454 +478 171 -1.0124393805418137 +486 171 .959613065081367 +504 171 -.40586905903058323 +516 171 -.4350544649558221 +521 171 .27086281184605654 +531 171 1.0041734658926904 +532 171 -.8243998509620859 +541 171 1.0768799557678113 +544 171 -.4084787348881355 +562 171 .036453131058649724 +579 171 .8556785248426455 +595 171 .8927560926349132 +602 171 -1.1946601124936702 +612 171 .25977433020960333 +620 171 -1.0658030787296813 +639 171 .4086160334987624 +667 171 .9984575661870604 +673 171 -.7440705360425588 +677 171 .5079149802417037 +683 171 -.13281166379806827 +693 171 -.8717030059986592 +700 171 .0562058425645839 +701 171 .40460925420169325 +717 171 -.7393961999293518 +722 171 -.28088216217992784 +748 171 -1.1656893424063994 +752 171 -.0740933826072234 +767 171 -1.1803006403893628 +772 171 1.1454350192377452 +784 171 -.1538177003930552 +795 171 .3100328521753812 +822 171 .2102152535701443 +832 171 .7217355511856536 +834 171 -.15708047030423994 +851 171 -.5956856885665199 +852 171 -1.1839899476647093 +858 171 .8785795724354163 +879 171 .38650179169236437 +908 171 -2.272330024767766 +928 171 1.2113772296541059 +946 171 -.6692362367178497 +947 171 -1.9712828255300936 +988 171 -1.4324630998028425 +997 171 -.03349503430587531 +14 172 -.8524098006203189 +33 172 -.8142622612336549 +49 172 .8463278900090088 +52 172 .8823498679856547 +54 172 -.384984579670741 +60 172 -1.4169194851649494 +61 172 .012489232279035999 +63 172 -.4212372705393496 +64 172 1.1345995445891601 +76 172 -.6035171014314245 +80 172 -1.2434702344264348 +86 172 -1.7651880168595906 +91 172 -.01349136210756173 +96 172 -.2104161440062996 +103 172 .6448005866537224 +107 172 -.3765865864913548 +115 172 -.9782974137832854 +125 172 -.06553467720437933 +128 172 -.28709753179321884 +132 172 .5880024606710142 +144 172 .6230547063730925 +170 172 -.0005146532519469602 +175 172 -1.493935562641918 +208 172 -.1307125851045526 +228 172 .002382089718327665 +245 172 -.4681284089483605 +259 172 -.13586845144425008 +266 172 -.9756847230166295 +270 172 .5058174642399028 +276 172 -1.4901140515345261 +282 172 -.49960162345100473 +283 172 .04700728105158228 +286 172 -.4224711653411537 +303 172 -.33815655015538343 +313 172 .6416260989293796 +321 172 -1.3461500826003727 +326 172 1.1758809040533131 +329 172 .5692252789595084 +332 172 -1.223950191361049 +338 172 .08371516099035223 +361 172 1.1596564158726441 +391 172 -.00016005059040957725 +395 172 -.2861319541566343 +396 172 -2.2935564078882 +402 172 -.4423732215173899 +403 172 1.4379850678629131 +426 172 -1.2059543256903944 +432 172 -1.9059090644733154 +442 172 .006785135405215453 +457 172 -.04065460496597743 +458 172 1.7247082635281235 +465 172 -1.2503372811320241 +492 172 -.9122479101592428 +501 172 .5391676631176994 +523 172 .5130504964179923 +536 172 .006912128968765946 +539 172 .09499844549337007 +570 172 .6522772454150825 +576 172 1.8524053492622783 +587 172 1.3175408385761322 +591 172 -.38274727031227235 +595 172 -1.1481201582974885 +597 172 1.1229602229159314 +606 172 .22649043767847665 +611 172 .4798210599819396 +622 172 -.368083559641799 +633 172 -.7537575565298117 +636 172 -.49694847505586387 +643 172 .7369523968344358 +644 172 -.6105113148663591 +658 172 -.06242527103487597 +668 172 .5096216931064839 +670 172 2.454209365078211 +685 172 -1.8968844401643306 +688 172 -.3713156487187838 +700 172 -.33692501704904765 +711 172 -.42926041936318315 +724 172 -.14622916055593957 +726 172 .7833196965954905 +733 172 -.8123818345058957 +738 172 .9803848141009371 +747 172 .9972114638892235 +764 172 1.257583417177328 +767 172 -.9132146205570075 +780 172 -.18061306023467116 +782 172 -.820655191209465 +810 172 -1.148562351013156 +815 172 1.0692428924853794 +822 172 1.0643161399625454 +853 172 -1.881381769727207 +863 172 .26043342556367594 +872 172 .440301117951361 +875 172 .24236996459206572 +889 172 2.0253113225896837 +891 172 -.3992640957783779 +892 172 -1.1301408016523715 +896 172 -1.3444017096180705 +919 172 -.3118716918026413 +922 172 1.1063113331814232 +925 172 1.2104066647362979 +932 172 -1.0720047504652206 +939 172 .8643649056345903 +956 172 .808869784060384 +960 172 1.323897784350345 +961 172 .034080003874850336 +967 172 .9230011919361999 +972 172 .11686746024950034 +990 172 .17948737697575534 +992 172 -.031297057668224285 +996 172 1.1665487982205023 +4 173 .7630781097378478 +5 173 .8482870864238796 +9 173 -.5617394630720297 +20 173 -.8747073627538794 +34 173 .5818083119048792 +43 173 -.8516157216577331 +44 173 .6737075072243623 +57 173 -.4440923713881634 +73 173 -1.3438755671200127 +74 173 .10897758826036733 +91 173 .37256154808023034 +94 173 -.8634929524564103 +103 173 .9444506628282604 +107 173 .026755457686898944 +111 173 .20536430823459212 +116 173 .03442697629031473 +119 173 -.2340644185181501 +142 173 .25375089471609563 +143 173 .9505845526631342 +145 173 .7847666844197755 +146 173 .14340587055745185 +147 173 -.2225922998178223 +159 173 -.40129440385864756 +172 173 .03458026991400035 +184 173 1.5330093914427492 +190 173 1.0571996123304688 +208 173 .11357228209209595 +217 173 .36424712306283924 +219 173 -.9375739062451462 +223 173 .20441375109693688 +232 173 .9947109548582519 +243 173 .4761227448292895 +252 173 -.6022797965008103 +265 173 1.022823861243929 +268 173 .27515083982042526 +287 173 -1.3209119487852188 +317 173 .5114149949253195 +323 173 1.625796677650245 +341 173 -.2462073426016339 +350 173 -1.1086041966308828 +359 173 -.22498780319187295 +364 173 -.26747041791912807 +395 173 -1.4736368023969364 +415 173 .2663948063479842 +422 173 .026021772256066306 +431 173 -.427079433163868 +453 173 .5890257064464417 +470 173 .3686304779258653 +472 173 -.3360194991851115 +486 173 .5086560117297375 +489 173 -.21614804773600976 +491 173 -.7420481906631762 +493 173 .613536930290108 +497 173 .283580563613149 +498 173 -.3123520864513276 +502 173 .5449339967114041 +511 173 .42363606607491855 +524 173 .25281564221794683 +538 173 -.7005691951869975 +542 173 -.7592491914980299 +550 173 .5266322505742789 +575 173 .6907681613757484 +578 173 -.26703179198813826 +597 173 -.056269956545855905 +599 173 -.0828952316358586 +609 173 .8687063812943414 +625 173 -1.5195248410810982 +631 173 -.5415385897820284 +636 173 -.36446667120200077 +649 173 -.32092903077567564 +657 173 -.8606658439428696 +658 173 .3439904993278938 +668 173 -.6698653801867152 +672 173 .57156693941257 +676 173 .4716134391864263 +720 173 .5318281301002445 +724 173 -.34812573337999425 +730 173 -.258112897204673 +733 173 1.0722154042430385 +738 173 .04161670940178527 +741 173 .19411315127210282 +748 173 1.4523822510947 +750 173 -.043011780083024226 +752 173 .9354943877729471 +766 173 -.5469333991431604 +773 173 -1.1705526188293212 +789 173 .6313319139612708 +817 173 .4226407530429487 +866 173 .5435282016124556 +868 173 -.6366842451642086 +882 173 -.3968966185143753 +899 173 .8945203829087529 +900 173 -.6951913674288864 +909 173 .09422033122706433 +915 173 .7030073158442197 +924 173 2.382971933159484 +926 173 -.06416251866251842 +933 173 -1.0154213260443956 +937 173 -.4622911869698365 +952 173 -.43142515997005865 +955 173 -1.5232391556880878 +976 173 -.8844322243357662 +984 173 -.4428799088629555 +996 173 -.42464339948661245 +7 174 .8640762941894984 +17 174 .7131253644412134 +28 174 .15547888589501566 +30 174 -.15269158622736279 +43 174 .6393532560404265 +60 174 -.47200967824147655 +63 174 .4963799314265235 +64 174 .3445754937950119 +66 174 .13289502546693066 +71 174 -.3684013143265241 +92 174 .5540757543691106 +114 174 .01981847202647704 +121 174 -.058593171943423214 +124 174 .82486620245299 +132 174 .3875945834880503 +133 174 -.6293766212130502 +135 174 .8049212271670773 +145 174 .06630535056490935 +166 174 -1.7868286384694412 +175 174 -.2196566227632898 +204 174 .5532020761843015 +208 174 -.11430017070305412 +215 174 -.7208337795678644 +221 174 .49356935216147985 +243 174 .29696206667341984 +248 174 -.8725313105220744 +251 174 .5843460216981722 +272 174 .0332615476210086 +279 174 -1.504688650485432 +285 174 -1.7772503664663268 +289 174 -.018608799607577522 +302 174 -.08178142693195473 +303 174 .07760213047766135 +306 174 .5421197406680002 +308 174 1.4264290611124972 +318 174 -.47015071094575217 +329 174 -1.3943003768614464 +341 174 -.3186349265731049 +343 174 -.16803690351342948 +370 174 .6282188011374806 +377 174 -.197254572715933 +385 174 .38114672240635084 +399 174 -.5588988000134849 +420 174 -1.040748989619861 +423 174 .5371517734896769 +465 174 -.12041893051696066 +472 174 .22336033089621157 +475 174 -1.0608621988657825 +495 174 -.15828889320618755 +499 174 -.4470467286100827 +502 174 1.0820508413255456 +505 174 -.6095225498213882 +511 174 .4304345297618321 +513 174 -2.5428384805801962 +523 174 -.756582447564749 +535 174 -.36280169576634136 +540 174 .5405177749919525 +547 174 -.506845511425425 +566 174 .02232804393081623 +583 174 -.18317396064331978 +598 174 -.36729537202177404 +605 174 1.1401603605972543 +614 174 .07464417425750161 +617 174 1.0002321992288616 +629 174 -.09784890743251956 +639 174 -.4579346993318549 +646 174 .8369665610173949 +660 174 .2960033151728154 +676 174 .809955199550198 +677 174 -1.3547734041365893 +678 174 -.4025991326034476 +679 174 .5537274278023046 +681 174 -1.9357130032605065 +709 174 .10500343419383436 +712 174 -.3822292111887678 +726 174 1.443970585083744 +731 174 -.7312382924393908 +738 174 -.0658583152632319 +742 174 .5431026512984429 +749 174 .5192795449019745 +756 174 .06255010302874495 +757 174 .004942103825773703 +777 174 -.6825650584487982 +791 174 .42603138345722547 +804 174 -.014930138681154479 +827 174 -.3157898153392272 +828 174 .1909327418449775 +841 174 -1.1295416483043064 +846 174 -.21231923236946065 +857 174 -.953956822823132 +861 174 -1.3335292287768439 +862 174 -.07283350913743132 +874 174 .6514108374304219 +886 174 .08510081046476414 +887 174 -.33996855769071543 +898 174 -.3103760609259936 +901 174 .6457534673520857 +904 174 -.4729812659953976 +914 174 .871747854373643 +934 174 -.12214669367941819 +942 174 -.8060699259577233 +947 174 -.2270524626738347 +951 174 -.34542629195045943 +957 174 -.19640364112249187 +963 174 -.08655896927904448 +967 174 -.3821410024704881 +971 174 -1.2649121977867375 +988 174 -.8643672183984742 +998 174 .7663152320988975 +16 175 .0013091199521453462 +31 175 1.0465613646590557 +34 175 -.8626720655297418 +35 175 1.2071215667284045 +45 175 .8224438334126354 +83 175 -.5945760902389193 +86 175 -.007539393266493485 +104 175 -.9141126890168557 +139 175 -.9739169261535985 +142 175 -.469932099172862 +153 175 .9795626790112978 +162 175 .7110114779569248 +168 175 .02636360562636847 +170 175 -.23372101932389291 +177 175 1.2078130339082649 +192 175 .18826155662429633 +199 175 -.2704646807582666 +228 175 -1.7663696257790524 +233 175 -.6149437841121179 +242 175 -1.1892823179890208 +261 175 .844989338184692 +320 175 .09274799631924457 +326 175 .23763885553957428 +336 175 -.41842368438286154 +340 175 .6041829902950152 +344 175 -1.458669668529119 +349 175 -1.6941546726816612 +351 175 -.21031905048098612 +353 175 -1.109820653764595 +356 175 .014002564371023318 +379 175 -.41917597277783836 +380 175 .025782814604872015 +385 175 .5247345922086198 +390 175 -.16301019954854196 +405 175 -.16464162543201974 +406 175 -.7721900830750605 +409 175 -2.8475370465264414 +410 175 1.3958550226332902 +413 175 -.7690402044855633 +418 175 .7487685775934682 +419 175 .08840001330256375 +424 175 -.29628029918270293 +437 175 -.3923873526656466 +450 175 1.5192623808987582 +475 175 -.8789768496146549 +485 175 .01000017242027662 +488 175 -.08222345863845487 +492 175 1.501920701960568 +507 175 -.06109115848687835 +513 175 .8354769834529447 +522 175 -.22601514762756825 +540 175 -.4922771916588622 +541 175 -.13899615286933611 +562 175 -1.1973616342744449 +564 175 2.072764748919613 +566 175 -.37931300738983353 +593 175 .3771058334259271 +595 175 .5918785919280413 +596 175 .6186662190826024 +615 175 .723061991940053 +634 175 -1.5070815820082428 +643 175 1.6138102149881526 +644 175 .7518440686975894 +651 175 -.7190824223915377 +682 175 1.0933146222172752 +692 175 -.6946820253400404 +704 175 -1.8455560928041022 +742 175 -.7434733271835128 +761 175 1.0206378594469308 +763 175 .008496589351123726 +766 175 .789594814276866 +777 175 -.7363999080264879 +779 175 -.6613429067167992 +806 175 -.45020785988028805 +816 175 -.7180315533345908 +829 175 -.530320503783026 +832 175 -.43466804524554853 +841 175 .19436171435122127 +850 175 .5532309244775063 +868 175 2.2840071405574993 +888 175 .5760950853586915 +914 175 1.2637889242717706 +920 175 1.8066177451699774 +922 175 -1.8031233376548883 +937 175 .7586163101792305 +954 175 -.7452116178030862 +969 175 -.232386255373699 +972 175 1.1355429454268757 +973 175 -1.9501906730260046 +981 175 -.77269701315359 +992 175 .8956275054436171 +5 176 -.5407401871307721 +34 176 -.17317378189843968 +73 176 1.0134610868592802 +77 176 .19509233161910405 +85 176 -1.75263208557893 +87 176 .6367596910245822 +96 176 -1.6468653157982078 +98 176 .2875393371205288 +113 176 -1.1531207306191265 +131 176 -.2281452654803456 +152 176 -.6489670757946937 +158 176 -.7216016226027346 +169 176 -.5465243163630853 +171 176 .40689178975285495 +197 176 .9108661451287917 +202 176 -1.5981182539352161 +212 176 .928886730403171 +231 176 .6577023873757447 +246 176 -.814751204764443 +252 176 .17491093440207803 +279 176 -.08510328423095054 +291 176 -.0943143584260197 +322 176 -1.4406444534291203 +346 176 .652685360951895 +348 176 -.3911077311279991 +356 176 -.0051968183690037015 +358 176 -.4318605460281046 +365 176 -1.0358646159109706 +369 176 1.1348960506863792 +375 176 1.207581307283569 +381 176 -.5451299538705198 +382 176 .11630926856922162 +390 176 -.2731962904262003 +410 176 .3103749503896692 +416 176 .4575478095436175 +417 176 -1.0722483810890822 +419 176 -1.022345415220928 +420 176 -.06919960151113563 +430 176 2.0706310763282363 +434 176 -1.1334091302152467 +435 176 .8408086630268875 +437 176 .28746378570682457 +443 176 .18452106616094174 +455 176 -.02252044512593615 +459 176 -.005713480101481757 +482 176 .6213980056307212 +488 176 -.0802172943673577 +492 176 1.5643229162650756 +495 176 .8222667665515587 +505 176 .06004427528198095 +517 176 -.32492653216781897 +531 176 -.20113326382671157 +536 176 .9194833197594245 +548 176 -.14293140346324734 +563 176 .40337239996369156 +570 176 1.727369235025797 +585 176 .8334012948380218 +599 176 .21534884712952498 +609 176 -.4565676791271571 +623 176 -.7340873791842251 +628 176 .3166399218796656 +642 176 .005510571546618069 +653 176 -.2849009970982007 +682 176 -.5507413104929059 +698 176 .896983016854024 +720 176 -.05370212307267383 +745 176 -1.0733678333192742 +764 176 -1.27742623709858 +785 176 -.12337707801750225 +790 176 -.1088205945136633 +804 176 .03123118871496383 +806 176 -.20601163218740073 +809 176 -.20681943146181256 +812 176 -.5770355905278318 +813 176 -1.4798710302026183 +819 176 .8380636880742798 +822 176 .2967522370280756 +825 176 .21799368440186676 +826 176 -.20162916410447634 +829 176 -1.2114661392687978 +830 176 -.6147121060594937 +844 176 -.017672616692917614 +847 176 -.14958571958794803 +857 176 -.6414480070084402 +863 176 -.6201270720957516 +865 176 .4420148476801224 +867 176 -.9751027103958144 +871 176 -1.5101699090108605 +897 176 -.8862516506525007 +928 176 -.5435643364830525 +952 176 -1.0365392011129249 +954 176 -.1389261729753558 +964 176 -1.0210321256375536 +966 176 .6450601035984825 +967 176 .39552682762075986 +990 176 -1.1694321658285987 +994 176 -.5051241523863985 +2 177 -1.1212961763452067 +6 177 -1.1817384329936935 +13 177 .9590988160098702 +29 177 -.05613104937710414 +37 177 .2437863303395632 +42 177 -.6029107674876243 +43 177 .7891790454241788 +55 177 1.6103173913969266 +61 177 -1.9322655097569583 +77 177 .045637064280446726 +84 177 -1.4105340858707338 +89 177 1.0957032733726964 +96 177 -1.8270922683901178 +100 177 .4237529676290671 +107 177 -.7582001797608012 +120 177 -1.532010799345254 +121 177 .04522599431244914 +124 177 1.6256463173670173 +135 177 .5341138007335186 +172 177 -.09151118207993564 +178 177 -.05754589201201577 +191 177 1.1705906790753944 +199 177 -.43174950702790915 +207 177 -.8512825277081227 +225 177 -.5045888116276435 +233 177 .5105218201835525 +240 177 2.544766989089007 +247 177 -.5920396157932656 +251 177 -.4660935207129714 +258 177 -.2391373093825728 +267 177 1.8602584421343933 +270 177 -2.554054102391501 +279 177 -1.4309054297649564 +284 177 1.3196130905541552 +286 177 -1.227637715297211 +288 177 .014196008204872233 +299 177 -.42670189302191885 +311 177 -.8382775963308374 +327 177 .0010223828940229829 +346 177 .3931664171817081 +357 177 -.3110417818513948 +373 177 -2.655447430488269 +374 177 -.77562505021812 +377 177 1.3505171369543112 +383 177 -.07904575223683485 +392 177 -.21827263006091957 +402 177 -.4754513680553264 +407 177 .9874097469199183 +408 177 -.9460940091851873 +410 177 1.4413486810164529 +417 177 -.21188575257736672 +420 177 -.5404969754749736 +430 177 3.113428619132783 +431 177 .8970339317165277 +445 177 .5277168650550608 +466 177 2.0787828664488432 +471 177 -.05810541032291325 +479 177 .7383123856400122 +493 177 -1.7620495422780322 +504 177 -.8984007398032349 +507 177 .3263647400370849 +509 177 -.21018557900250773 +513 177 -1.5575110342011873 +515 177 .7170076405070823 +529 177 .05970396738945691 +535 177 -1.9622555150460177 +543 177 .7111745430440322 +546 177 .9459204023270118 +565 177 -2.0437138106570627 +568 177 -2.203904589397484 +571 177 -.06511390041202673 +584 177 .5665278188803091 +593 177 -1.2410710543814651 +600 177 .11547876818993666 +630 177 .3446072305857126 +646 177 -.13704554448897874 +647 177 -1.872501369226759 +648 177 -1.7431907922071188 +650 177 1.1703505328760182 +658 177 .7049128439629809 +672 177 .46524630923718996 +680 177 -.26152260072510525 +685 177 .6095577593373798 +689 177 -.37094017769612814 +704 177 -.07203583859747605 +708 177 -.9431170132665019 +711 177 -.25521310975771594 +713 177 -.20330448413547042 +716 177 .21828777466486332 +734 177 -1.300004216831886 +736 177 .028400849385755253 +742 177 .5886963569336996 +745 177 -1.4213299571598372 +748 177 -1.3677521366452434 +751 177 1.1085153768668508 +758 177 -.04352361533690511 +759 177 .9062335157000849 +760 177 .13613511561201677 +762 177 1.056268418569065 +799 177 -2.140680030310513 +822 177 -1.0012873481655207 +835 177 -.6789913597099771 +845 177 1.0814186154102887 +868 177 -.6792571555174726 +877 177 -2.753894777908631 +879 177 1.5104698826037521 +883 177 -.7803882752946671 +889 177 -.5406414901711069 +897 177 -1.1135348889847632 +901 177 .1882931551010424 +912 177 -.11835723040677251 +920 177 .6580433034303854 +923 177 .06155444488856185 +940 177 .28718062070623096 +958 177 .004335975495168259 +960 177 -1.4933440206223436 +973 177 -.12685262505963493 +985 177 -1.4492951599109585 +998 177 -.7697206105502035 +1 178 -.17338339684964932 +10 178 -.7141885107880662 +22 178 .2520371758959394 +26 178 .7644111013874172 +27 178 .23372514766049074 +40 178 -.17630090337819818 +64 178 .5279643716591933 +71 178 .10823971923974096 +77 178 -.02506202390945428 +81 178 1.432965744653126 +83 178 .003062181724586041 +86 178 -1.0048418368222138 +91 178 -.5048226310079204 +92 178 -.14658810379767812 +98 178 .37924222212683556 +130 178 1.2261514988170585 +166 178 -.7449636134398382 +177 178 -.5962211229733344 +187 178 .39258890680427927 +190 178 -.6998256988101428 +210 178 1.4111329926528497 +217 178 1.8430701940379484 +227 178 .8060443806457314 +231 178 .23804180209499914 +239 178 -.9659689515723953 +247 178 -.14521000897636552 +271 178 1.4928464202144627 +305 178 .4657878221764101 +321 178 1.4560225749685076 +339 178 1.6341978410688378 +342 178 .317692206461499 +345 178 .40361165584753456 +353 178 .03065396502263268 +381 178 -.5675263501795276 +406 178 -.4664223328560843 +407 178 .42643629646914855 +413 178 1.2949189148142197 +415 178 .03186291141678768 +422 178 -.5507152119574794 +425 178 .6873583317043503 +428 178 .15690692219690144 +430 178 1.0000492079777314 +444 178 -.8109688254623912 +448 178 -.2797020465841429 +449 178 -1.1418041533869205 +458 178 .4834678941854206 +464 178 1.0743755786509774 +484 178 -1.1961907213724563 +500 178 -.46989497525361096 +501 178 -.890008261260819 +515 178 -.6872354957265471 +534 178 -.008075287028181923 +550 178 -1.1134483716022765 +551 178 .7394933322028637 +557 178 -.47224485925122817 +571 178 .16448535656996185 +582 178 -.26690350478412095 +597 178 .25228653175570526 +599 178 1.8630718968572975 +601 178 -.3341126354922709 +607 178 -.4793360485305024 +621 178 .37432416891926884 +635 178 -1.4922103029460234 +654 178 -.5718389213631953 +660 178 -.5793469611047366 +661 178 -1.5330506018476164 +668 178 .4212047465107196 +679 178 -.9181765507193534 +684 178 .6816987011565572 +698 178 .9593179290151146 +704 178 .07191552377151217 +707 178 .4079929173372399 +716 178 -1.0017614742033873 +731 178 .12962797514708532 +739 178 -.23495615091553174 +740 178 -1.7433583580901943 +744 178 1.1756448763664678 +755 178 2.192443712054246 +773 178 1.2695922518115337 +788 178 -.49873593332008226 +803 178 -.1652959639558791 +818 178 -.060063682867404544 +821 178 -.6234856032010483 +824 178 .11848705937586189 +826 178 .613610459059683 +835 178 -.7054974975143579 +842 178 .9948408944437012 +846 178 1.0540686774448766 +852 178 -1.2950010645532946 +870 178 .31382333767861303 +876 178 -.5979721418025583 +887 178 1.0067363740621977 +898 178 -1.1124825683496675 +913 178 .587785811664294 +918 178 .6499560586986933 +924 178 .5248850026008912 +946 178 .2326969245789564 +953 178 .9613359662740182 +963 178 1.5691156249237777 +985 178 -.48021926011169286 +987 178 -.7412288697451 +988 178 .4190537854853426 +990 178 -.7735318798887023 +991 178 .48642349672640617 +992 178 -.10480886542310433 +998 178 -1.1342345241198484 +3 179 -1.0046412992587759 +11 179 .045764561009130976 +15 179 .053662854450809906 +19 179 -1.2447032989502673 +59 179 -.35874076976613684 +67 179 -.8621125303609443 +72 179 -2.1710710898070373 +78 179 -.6077700415437272 +82 179 -.29471527215996157 +124 179 -.9300786164378816 +140 179 -.15415578481613643 +144 179 1.5698481297344602 +148 179 -.35679261742833707 +151 179 2.036605359130856 +154 179 .07696108756032866 +157 179 1.7654684269817416 +187 179 -2.972916900700173 +188 179 -.9678023156895319 +189 179 .34706122998602584 +196 179 1.125106227982793 +205 179 .05999914927988821 +223 179 1.3282713404751296 +256 179 .18817789849204786 +265 179 -1.831883327841723 +274 179 -1.6664763802616833 +280 179 -1.2820597598224994 +291 179 1.6773270080022498 +305 179 -.3817164538058499 +310 179 -1.2033759133768038 +361 179 1.6124771791296355 +374 179 .9038244622785111 +375 179 .4963808321238191 +378 179 -.5909613927548989 +381 179 -.22000146141685326 +387 179 1.1137936692835824 +388 179 -.3661357611050936 +395 179 .24128451196390527 +396 179 -2.487035662263407 +430 179 .49842151741766777 +432 179 -1.742301262417038 +451 179 1.0099475828828186 +461 179 -1.443020926397192 +472 179 -.05585289793553977 +492 179 -.35378833720663816 +493 179 2.93579716089152 +530 179 -2.4409998702655638 +531 179 -1.526388621293305 +576 179 .2429290108582791 +579 179 -.8410281610193454 +589 179 .07392657018010816 +596 179 .0886418713029587 +599 179 -2.5693692691194774 +627 179 .6473690282321242 +629 179 -.23331064474124363 +643 179 1.3266802624288005 +651 179 -.23699250575195346 +655 179 -.3207839357786472 +665 179 -.9515388656492482 +691 179 -.7157075941391122 +717 179 -1.9995071013975698 +737 179 -.6291532146820664 +747 179 .8153976231912163 +754 179 -.6906935310717679 +780 179 .4275401382666718 +786 179 1.0428499601774912 +806 179 .10973984808382425 +810 179 .336512774735426 +813 179 -.3465984735208958 +819 179 .7116017842146731 +838 179 1.3666287480816373 +842 179 1.2899431781549626 +854 179 .1406703805168728 +874 179 -.7107967283639215 +910 179 -.3962398980992007 +912 179 -.03516756232309286 +916 179 .559882223101078 +919 179 .16083967528672505 +920 179 -.22312594399530566 +922 179 -.5962654958079757 +929 179 -1.5406050577581085 +931 179 .3540509235306354 +959 179 1.7102756083722848 +973 179 -2.3203974138468535 +975 179 .1708785030085808 +995 179 -1.139610368593526 +998 179 .33717697891149234 +12 180 1.809123218090767 +22 180 .31198521415736674 +32 180 1.6761765109341016 +33 180 .7937880749668371 +46 180 -.07014911537886392 +61 180 -.2550789432745187 +66 180 -.6722878342809073 +72 180 -.2981112339401287 +80 180 -.4281956955798785 +86 180 -.5267921319349829 +87 180 -1.8201033318918987 +94 180 -1.3930842069557674 +99 180 -.03447758310889232 +102 180 -1.7435491922918485 +103 180 1.7101223183939984 +133 180 1.951979070433366 +146 180 -.48515659119601295 +162 180 1.233029438600554 +163 180 -.3377144924989628 +173 180 -.024203552509523777 +174 180 -.606271158365207 +185 180 1.1160683307245278 +207 180 .8609898278806796 +216 180 .4057790166680272 +219 180 -.795764430387074 +226 180 2.2084886149314142 +232 180 1.4403603479736038 +240 180 1.0224743470941509 +243 180 .7986819498205194 +244 180 -.48332739023696364 +262 180 2.1372800884216074 +270 180 1.5938442565699482 +281 180 .06788350420233466 +285 180 .7024702949226699 +313 180 -.9059542166718103 +315 180 1.0761397592814053 +327 180 -1.116955094806121 +337 180 1.7151443030084212 +347 180 .8264979984341791 +390 180 1.7494793090470941 +409 180 1.437292344330837 +418 180 .012458561962478132 +466 180 -2.2472566742353006 +467 180 .10596460400606275 +473 180 1.9313231906577106 +475 180 .3962513194646446 +477 180 .30907152238249924 +521 180 1.7530795683273943 +526 180 .9482961749510426 +543 180 -.5947509052468278 +546 180 .3646384124473501 +557 180 -.6229501692129784 +561 180 -.6590789443747128 +563 180 -1.0802459853481803 +570 180 .9693678937319689 +579 180 -.608202603042602 +612 180 .8390875940133198 +631 180 -1.0390337766525823 +675 180 2.236783943634486 +676 180 1.595387927436915 +690 180 -2.1992534065319487 +696 180 -1.3663330140082708 +731 180 -.8704680752428906 +737 180 1.1549858347597832 +743 180 2.8479861078299553 +756 180 .7965786242044314 +759 180 .28124811311153747 +781 180 1.1912959465231094 +783 180 1.3555983463237997 +814 180 -1.1506336858330735 +822 180 .8075552726679782 +823 180 -.8415869761439567 +828 180 -2.0074971489089486 +843 180 .2915888070358993 +856 180 .4200047071824058 +860 180 -1.2790247698547523 +875 180 .2761349525309216 +879 180 -1.2115895054750108 +890 180 -1.6323675082686837 +903 180 -.11055886343442431 +906 180 2.9337697979193833 +907 180 3.0746500084880446 +924 180 .22459563903799376 +926 180 .2801632213396782 +930 180 -2.1914479738004435 +934 180 -.821805898174891 +941 180 .8525308668386026 +946 180 -2.2201570917080837 +949 180 3.0376335124802494 +950 180 -.9237223724137783 +957 180 -.9605085038341146 +970 180 .013138829700498816 +976 180 -.5965085782280376 +29 181 -.2619634524096442 +38 181 1.333012269932439 +53 181 .054245247284514506 +57 181 -.6906383095342149 +60 181 .7416339956701916 +61 181 .5572297433400939 +63 181 .08047139034603856 +73 181 .6490885913792559 +78 181 -.1549299654333114 +94 181 -.47702062186801014 +95 181 -1.3751021611135492 +108 181 -.8629984050348588 +112 181 1.8133178888360004 +128 181 .791871041502107 +140 181 1.8606917063074018 +145 181 -1.3945692330785688 +151 181 -.6785546662204391 +159 181 1.9865515717581017 +164 181 -1.4608689588531147 +170 181 -.021322317271468202 +180 181 -.5049617140787125 +187 181 2.321219599384084 +190 181 .28976699097716324 +191 181 -.8855339719533332 +200 181 -.5992743740574014 +210 181 .8602877413692145 +221 181 -.9382782075583205 +232 181 -1.8155001261119437 +235 181 -1.2421410677627596 +249 181 -.3189685351122155 +253 181 -.9312872153345995 +254 181 -.530044179251547 +259 181 -.44740672870064124 +283 181 .5606418912476229 +287 181 1.194145712489218 +304 181 -.005788760677124763 +312 181 -.7114171792142917 +315 181 -.8646779043548249 +317 181 .6472405210903847 +318 181 1.1133557905321647 +324 181 1.812285116260096 +336 181 -.71847862420731 +345 181 1.1324820490625434 +349 181 1.9077059711618822 +361 181 -.6632894062308009 +389 181 .0005046075473788825 +391 181 -1.498132674591779 +402 181 -.643911170944482 +413 181 1.8098049910270058 +442 181 1.2306931061328645 +453 181 -2.435498832007787 +456 181 -2.027518615480353 +475 181 .0061608467095375305 +477 181 .1466930379514566 +481 181 -1.4103643238797363 +502 181 -.7415729503912298 +504 181 -.26961628040204044 +512 181 -1.3992102941256104 +538 181 1.5141592826510892 +541 181 .17470776219073753 +547 181 1.1782962615309758 +549 181 -2.062421040444007 +575 181 -.963960919986816 +591 181 .15658831607656865 +596 181 -.36182311617243257 +637 181 1.427605162043824 +660 181 -.9375322388100659 +664 181 .48291951067486955 +666 181 .6606450457865685 +698 181 1.0087013942534575 +715 181 .731672129103615 +732 181 1.1008664009282831 +734 181 -1.2832723654667584 +744 181 .9634505585270416 +760 181 1.2679453434106547 +780 181 .5324126893467481 +784 181 .6771316367573643 +813 181 -.9204930779647974 +857 181 -1.971045925007219 +860 181 1.4756057718625186 +862 181 1.2161113380416388 +879 181 1.1760236302555687 +890 181 -.31337198288496027 +893 181 .2943703993415774 +894 181 -.7482345756996731 +903 181 1.2692773122573433 +917 181 1.0959080446538592 +923 181 -.3401715073674866 +931 181 .7812768118433271 +940 181 .44303572636597416 +941 181 -1.359837829989989 +958 181 .23638083422398135 +961 181 -.23564172771430575 +962 181 -1.4475298838252757 +965 181 .21440089619132302 +973 181 1.2164942941631276 +974 181 .47086447781952384 +991 181 .7437825023392692 +994 181 2.1980722591070876 +999 181 -.017349120317669636 +3 182 -.8661636602247706 +10 182 -1.3910861736005766 +11 182 -2.2172140101567335 +16 182 .789013443480728 +60 182 1.5211629078768956 +91 182 .07261009645333746 +110 182 .2253234377719996 +116 182 1.758402451458091 +127 182 -1.3998671431162868 +142 182 -1.9815666383759816 +144 182 -1.7993907920399037 +145 182 .14764713464573143 +149 182 -2.005126016877149 +150 182 .7847881236375568 +154 182 1.791294038433855 +173 182 -.3544512997405975 +179 182 -1.072206602668798 +182 182 .5788786162523345 +207 182 -1.700194540896565 +209 182 2.5378658989321634 +214 182 -.6453902945691555 +219 182 1.3713912120335452 +221 182 1.845444283128154 +227 182 -3.3006907374588597 +228 182 -1.6427364691574973 +237 182 1.7508129207751981 +239 182 -.5753652077929129 +242 182 -1.8534842096146442 +243 182 .2608089699762409 +244 182 -.43864397469920297 +268 182 -1.43376079136089 +269 182 -1.3880092821872612 +279 182 -.4546009071623333 +294 182 .4719422884654905 +309 182 2.2831802503028142 +330 182 -.4939112993834399 +331 182 -.506529449268651 +354 182 -2.24151565836698 +361 182 2.2010109632528 +369 182 -.368652728119119 +373 182 -.7011117316436744 +378 182 .5311014764259607 +387 182 -.04382974100658843 +395 182 1.2933676555601992 +409 182 .5143765604536281 +418 182 .13725021663285 +432 182 -.05305618476770443 +453 182 -1.761441429212857 +459 182 1.3837539215832397 +480 182 -.36527197919646626 +488 182 2.452937759976287 +490 182 .4291439188982494 +514 182 1.053631756424222 +520 182 1.0091982123140513 +522 182 1.8996411338524781 +523 182 1.1023704506023808 +529 182 .20521220739589408 +534 182 1.3432571348859896 +540 182 -1.3676436517358406 +544 182 1.1934331415039054 +545 182 .0851247629277971 +556 182 .8430513115495614 +567 182 -.4975202728700756 +572 182 -1.722586822933378 +576 182 -1.9930421853010385 +586 182 -.5958999104404756 +619 182 .2341912716388424 +622 182 .7945988049349199 +623 182 -.5332063236143144 +626 182 -.7675969356761758 +630 182 1.299745491963313 +634 182 .0530954085661576 +674 182 -2.0522502824497275 +683 182 1.293934766629691 +685 182 2.3383792086639708 +689 182 2.235690111104923 +702 182 1.6797283253928528 +715 182 1.0492430200720022 +720 182 .560955901456544 +721 182 2.078791505502977 +723 182 -.2689931505798347 +729 182 .17412136674432085 +731 182 -.337249688518441 +738 182 -.6873978740964677 +754 182 -1.5585735443511186 +755 182 -1.3294332285958328 +756 182 -3.230083195728194 +786 182 .34390996683830044 +809 182 -.2824311632294537 +812 182 .36675219335905074 +814 182 .40768751425301547 +821 182 .8905541468454077 +823 182 .4267401777250781 +827 182 -.7672306419412007 +832 182 .9965358806595992 +841 182 .45533348801194373 +842 182 -.5114141968051 +847 182 -1.0605970185950633 +850 182 -1.5609420029241812 +852 182 2.0345885544647646 +867 182 -2.3998828546683884 +884 182 .10940273901667696 +893 182 -1.4922921288696378 +898 182 1.4505105940775866 +901 182 .3032113000545162 +916 182 .018204661452383586 +926 182 1.1869579776542043 +927 182 .7541682746087837 +931 182 1.753278137803985 +937 182 -.9125796452985817 +941 182 .8785510816542841 +947 182 -.14255015410975447 +949 182 -1.2504891862757126 +958 182 .36381724105904156 +960 182 -2.0089302596729413 +966 182 1.3258001038872758 +974 182 -.24345497499960425 +989 182 2.271103004873031 +15 183 .19289045925386375 +19 183 1.7202631328004419 +30 183 .247628856361305 +33 183 -1.6297798864513486 +44 183 .9482742101947826 +58 183 -1.4077909692928765 +66 183 .9292744621364907 +70 183 .8211251743807915 +75 183 -.4909678502246177 +79 183 -.2141438088626066 +99 183 1.3335676275250121 +103 183 -1.9927044631476059 +106 183 .33139739619763836 +108 183 -1.0535685455987387 +110 183 -.3190492012320309 +115 183 1.4356460699920752 +120 183 -.9748344256047848 +122 183 -.08853590757956636 +123 183 -1.2472087361887365 +138 183 .4424865527606742 +156 183 -.22997661096738442 +157 183 1.069875239239618 +158 183 -.029784579955512508 +163 183 .08941091141170689 +164 183 -.7141584423141145 +172 183 -2.0053411268973944 +181 183 -.5450083414198554 +182 183 1.380011864118711 +221 183 -1.1858478653454771 +236 183 -.1565853987287629 +246 183 .23457612820692927 +258 183 -1.0766324599807857 +324 183 .8629812231126939 +328 183 -.934996483700105 +341 183 .11645756681201981 +358 183 .7930238736151806 +362 183 .3930049246409599 +379 183 .12493888827706848 +381 183 -1.1005003977341725 +398 183 .5508737507435755 +399 183 -.4663301128567623 +401 183 .17498218836211205 +414 183 1.0606995640035974 +440 183 .4767140334657287 +468 183 1.1237090341092095 +483 183 .5807658583320494 +490 183 -.031185503743944423 +491 183 .19980150313886785 +510 183 1.1119871046751941 +532 183 -1.4562615245800465 +533 183 -.3546011056353549 +543 183 .10852781221367072 +549 183 -2.009988583659263 +583 183 -.6865422117564312 +598 183 .4187561016139071 +599 183 1.9194028062815809 +603 183 -.0456006856770458 +605 183 1.143009479880806 +624 183 .9010262655461483 +629 183 -.6180746027384602 +635 183 -.039866785684959494 +653 183 .3901107519462538 +656 183 -.8100853219344368 +659 183 .11135659041215488 +661 183 -2.6365705167215614 +669 183 -.9136861449007457 +725 183 -1.3327451075776517 +726 183 -1.1995731082182033 +746 183 .1382258702182253 +750 183 1.352485435103924 +765 183 .7958197886604877 +776 183 -.35660506602435216 +794 183 -.6449198356470562 +796 183 1.8383670146345066 +818 183 1.5678684271916958 +827 183 1.9806167006405853 +837 183 -.8423064727621407 +839 183 -.4684331388399997 +841 183 1.2323380251814344 +842 183 .36163021984299 +846 183 -.24155205037435512 +847 183 -.30475909157755454 +855 183 .2182497882309356 +865 183 -.5550092495433838 +911 183 .25861604851421405 +920 183 -1.0672644990802622 +942 183 -.15504691032829188 +948 183 -.5594088231093476 +952 183 .2265243024499192 +967 183 .23150318694714875 +996 183 .05886550314516435 +998 183 1.470518540465525 +24 184 -1.5737427484894655 +27 184 .926242722993507 +31 184 .19959517499140905 +38 184 -.3012703101268941 +48 184 -1.4995367691984054 +78 184 1.8854794420503134 +96 184 .6827730142080114 +143 184 .06397397722648893 +148 184 -1.2187736209198559 +166 184 .6606461249719238 +173 184 .27219948072130395 +187 184 -.8128064242698836 +188 184 1.8402490442687824 +192 184 -.13343090747387384 +220 184 -.21308326160310853 +229 184 1.5951786618774568 +252 184 -1.3896877770634752 +273 184 .47889167553398876 +281 184 1.3442058255739149 +283 184 -.19554418126946282 +284 184 -.9075345564911806 +291 184 -.5874836438980328 +294 184 -1.1426813578602861 +298 184 -.3503022216119698 +329 184 -.2615722145685151 +349 184 -.630270032345868 +350 184 -.16621149316428557 +358 184 1.4362908744668437 +371 184 -.10280975915591006 +375 184 -.7923256581891784 +386 184 .06521995244476979 +387 184 -.4844669606133999 +397 184 .68274977388064 +399 184 -.9634520100311782 +412 184 -.9577601468598251 +421 184 -.6572447820167997 +422 184 -.16693810956156446 +425 184 .9262533993253927 +437 184 -.6385032149949187 +440 184 1.5559924155774598 +445 184 -1.5008284264779859 +465 184 -.9172424812234566 +479 184 -1.5313433768898195 +494 184 .30554276729561813 +496 184 -.7054197838771603 +499 184 1.019128547044244 +520 184 1.9865586619624933 +530 184 -.06012132770839125 +535 184 .9524760013893456 +536 184 -.02592864764592001 +543 184 .20279250003936738 +545 184 -1.4321323065066314 +558 184 .2452673388379119 +565 184 2.1002894077394894 +568 184 2.591956381367091 +580 184 -1.8672172493447017 +582 184 -.4220650575275748 +590 184 -.7905825909166089 +598 184 1.7240923167301105 +616 184 -1.031656768338672 +625 184 -1.874356686416645 +628 184 1.4909393975468312 +635 184 -.3083058020634713 +640 184 -.2906675489017184 +654 184 -.9590589587323035 +665 184 .4813716003973937 +686 184 -1.4204565679230474 +689 184 -.7868964564881107 +694 184 .8061809482118206 +700 184 1.3278552330989237 +701 184 1.7522291254756173 +705 184 .11317730577474085 +713 184 -.3094846801716714 +722 184 -.23136045907420008 +727 184 .17321408446103626 +779 184 -.7863210640292024 +781 184 -.5711581378957129 +795 184 .4626280614300835 +819 184 .8331045859188418 +841 184 -1.2791859067102047 +850 184 .22721871956731032 +853 184 -.32723561175285293 +857 184 -.15548711579312688 +872 184 -.5465205927539708 +873 184 -1.5171441170783118 +877 184 1.2135432712086525 +887 184 -.07366731090422754 +889 184 -.4752397681123423 +910 184 .7995406221389381 +933 184 -.9382021982670864 +938 184 -.9002214853271444 +944 184 -.4620529748204316 +946 184 .27874453538175936 +960 184 .8601896032297076 +965 184 .2628342251541172 +969 184 -1.1287514266648715 +977 184 -.5128408188613408 +979 184 .025075048216458007 +981 184 .77403688480442 +984 184 .7236082818739148 +987 184 1.2422351015177786 +988 184 2.1784549449384385 +997 184 -.7956008327574065 +9 185 -.5705144912374964 +15 185 -1.3723046701790038 +23 185 -.8196153998192931 +32 185 .46001182570223476 +33 185 1.2372003965998972 +36 185 2.172633961090739 +51 185 -1.7010759030196434 +53 185 -1.4032735400137835 +66 185 .994365363780049 +68 185 -.7091742618980043 +77 185 -3.2850877170121002 +78 185 .25730594393600403 +112 185 -.288847268206242 +118 185 -.2650710321851628 +124 185 .42573971092508134 +126 185 -.26700776328795317 +142 185 .7823399192617446 +149 185 1.5468072749746433 +155 185 -1.296531173544244 +191 185 .7916985059282384 +194 185 -1.720819860672996 +228 185 1.1332923481126893 +249 185 2.2412885346422264 +255 185 -.3237939581625016 +258 185 .010911167092035254 +264 185 -.3235640973776623 +269 185 1.0409380548807146 +274 185 -3.511712755642492 +281 185 -1.366239591715727 +292 185 .49036929237765076 +294 185 -2.1726531348481237 +296 185 -.9827592154226235 +297 185 -2.8254857948037126 +298 185 .8087389440814461 +301 185 -2.3738502852208403 +323 185 -1.0418680163781224 +337 185 1.6703765339058154 +345 185 -.268421534405473 +355 185 2.393110136432027 +359 185 -.7411578386971809 +360 185 2.129931534861633 +382 185 -1.199459279781783 +391 185 -1.337750876547679 +402 185 -.6567656355866454 +403 185 2.662621464182117 +407 185 .5996250411774957 +418 185 -.8775829141415962 +421 185 -.8902274985970876 +426 185 -1.669330010803124 +428 185 2.0168954759627797 +433 185 1.764638863985392 +442 185 .3198373279444642 +444 185 -1.471157960829391 +445 185 -.21162617889343277 +449 185 -.9075382423460505 +454 185 1.2581841932023525 +493 185 .05895607151380086 +505 185 -1.4317298731749915 +510 185 -1.5719646312136233 +511 185 -1.912392967821864 +538 185 -2.307456553557749 +548 185 .529658928112812 +555 185 1.1489340113315654 +557 185 .6171064288294736 +559 185 2.0566732789208384 +605 185 -1.2664508746208476 +606 185 -.36253927844075096 +614 185 -.1963592216081546 +619 185 -.2731960093904772 +626 185 .6288517896377022 +631 185 -.41247144350260884 +632 185 -2.2038817119112672 +649 185 -.5029335712864306 +684 185 .42441549891364955 +694 185 .3700317823032963 +700 185 -1.001520611280885 +706 185 -1.9721178791771956 +707 185 -.261179150479047 +709 185 2.377373849347038 +719 185 -1.3842165724791498 +734 185 -.5805272469841151 +747 185 .9824674775861244 +760 185 1.790961237166401 +761 185 -.037895439252467966 +795 185 -1.6235517499027519 +829 185 1.2580109592682132 +830 185 1.18672052910589 +835 185 .9218657027718653 +841 185 -.037243147342623184 +846 185 1.2635280677325962 +857 185 1.6121772913663963 +904 185 1.1724653063133852 +913 185 .8351154426988622 +936 185 -.9976172463801848 +939 185 .12313305648118258 +946 185 -2.937423547952891 +958 185 -.9325250632026171 +968 185 .49027744627791514 +970 185 -.24792329985104278 +982 185 .731317717359057 +9 186 -.6739970238053579 +14 186 1.2552244387226588 +16 186 -.09114868923503709 +24 186 -1.4313650727618707 +25 186 2.4816316533269815 +31 186 -1.3565880790872884 +33 186 .09337338417383924 +69 186 -.6912683024001448 +79 186 -1.581949842971693 +97 186 -.795220305980923 +116 186 -.4354445924977348 +135 186 -1.73855055780035 +137 186 .5119816363294638 +183 186 .34613148457370735 +199 186 .11893734257236922 +203 186 .40961071310513936 +239 186 .16951913934581817 +248 186 .5540694584314882 +249 186 2.294075333178453 +261 186 -1.0085361292344375 +265 186 -.7439906767780966 +313 186 .029665506146114563 +334 186 .5606044977258472 +367 186 1.4494833309611117 +373 186 -.10840325536726612 +391 186 -1.6029391719600858 +400 186 1.1121153941187567 +402 186 -2.0426847277359883 +412 186 -1.333864890378751 +424 186 -1.5084612977260672 +443 186 -.3731246275030391 +445 186 -1.7949825403116448 +447 186 -1.8579083424959395 +450 186 .9479011153332243 +482 186 -1.6660825985840653 +484 186 .8622376834560644 +487 186 -.3572716323461114 +491 186 .12826063460117373 +494 186 -1.656496595541788 +503 186 -.2227070059613332 +515 186 -1.6469706574600314 +520 186 .40889640426685364 +532 186 .11605213364012353 +542 186 .8020790838660616 +552 186 -.985124484904048 +555 186 1.0898528490558252 +567 186 .6082735975934994 +576 186 1.2337595775763897 +585 186 .9305617287585018 +588 186 -.3233811494422179 +590 186 -1.5934555266597565 +593 186 .40871060238610146 +658 186 -.08382925392069543 +660 186 -1.5800313113532574 +664 186 -1.0815836056679333 +682 186 1.5611616899554086 +693 186 1.3864908621646261 +703 186 -.2026619358704329 +712 186 .031623486059463746 +734 186 -.34332828264814685 +746 186 -.1262502278017698 +762 186 -1.913930621914939 +781 186 -1.271558844696628 +785 186 .5197105264104579 +792 186 -.6398590531867372 +813 186 -1.5627774885389227 +817 186 -.8327175625900922 +829 186 2.3224559372754308 +852 186 -.4588624519743977 +881 186 1.4229116608464432 +893 186 -.11264340101163599 +912 186 -.6854751921308619 +915 186 -1.2474505196024606 +927 186 -.4548008032431564 +938 186 -.050791753532557646 +941 186 -1.582963838576196 +953 186 -.30373688550437394 +967 186 2.157295564162215 +980 186 .15851982800846304 +986 186 -2.032072664864392 +993 186 .26027126095739794 +995 186 2.4620083643443245 +3 187 -.434933028769047 +6 187 1.0484741835932654 +11 187 .4060426737636097 +13 187 .8645348498375105 +17 187 1.1323067727398297 +25 187 -.6157858207105718 +29 187 -.03595834249391883 +51 187 -.12190641750941543 +71 187 .46911961847996647 +72 187 .5563125647593069 +74 187 .23238725037067667 +77 187 -.6913542237728431 +89 187 1.6315355626707573 +97 187 .008779075975804684 +121 187 .7164381938892791 +127 187 -1.9921426526891621 +137 187 -.6030571403708326 +144 187 -.009037140220183842 +148 187 -.8325339691987389 +155 187 -1.1674931062963303 +159 187 -2.2165899705343146 +165 187 -1.284556374722091 +169 187 1.0984178602741568 +179 187 -.20759442946894083 +193 187 .5085728098163305 +198 187 .5714980180992328 +229 187 -1.3137129081263523 +237 187 1.602977602333818 +243 187 -.39189918200727203 +258 187 .49468306407436097 +267 187 1.8352878967359247 +295 187 -.5731194663055752 +321 187 -.9919631385943378 +322 187 .19353381760646396 +329 187 -.43226733807717965 +331 187 -.4907584542393837 +338 187 -.8194607725330229 +349 187 -.22843928960879747 +355 187 -.36525657003712764 +369 187 -.49332933477455715 +375 187 1.316344056185354 +406 187 -.8807887932620706 +407 187 .4689250566568971 +416 187 -.43969306135184294 +421 187 -.4926065568684212 +424 187 2.1201932816925178 +425 187 .8416446424516221 +428 187 -1.492144323645289 +438 187 -.7065431162488097 +440 187 -1.7536375455885973 +442 187 -.5916768423370935 +443 187 1.2402953944156045 +445 187 .6740965425077211 +450 187 -.6321759744343385 +464 187 -2.6883010978115633 +465 187 .8750395650624287 +490 187 -.7984175388112269 +510 187 .5513484010297627 +531 187 -1.494339301599263 +566 187 .6202177131251565 +577 187 2.232312647307089 +581 187 .982722810205066 +611 187 1.0978474823687787 +626 187 1.229523919152362 +639 187 -1.1122234670754434 +653 187 -1.1017625524478922 +674 187 -.5217025486798864 +675 187 -.5629604949268074 +677 187 -1.0234724568225049 +685 187 .1576328465516821 +709 187 1.5405704922381296 +756 187 -1.9951086537602272 +763 187 2.241588352356839 +765 187 .28489762338040137 +769 187 -.19466855058192623 +776 187 .8410956713194332 +778 187 .8809730925425306 +797 187 1.6575811222502224 +799 187 .4843115648497504 +810 187 1.8806852103034308 +814 187 .8935857045261548 +824 187 .8298577562850467 +851 187 2.3231670504424096 +864 187 1.7966070678770678 +865 187 -1.0853684310144303 +866 187 1.0187862453667045 +871 187 .8099200214983321 +876 187 .9711890600704698 +879 187 .28740158261638754 +880 187 -.07980532871555036 +882 187 1.2098598956080222 +885 187 -.9241060436569452 +890 187 -2.0469794834681525 +893 187 -.750442709418738 +896 187 1.5384112673323471 +904 187 -1.1908565218092255 +922 187 -1.711809579520534 +959 187 1.9961241819997937 +978 187 -.42245614881037785 +988 187 -.7315406255283782 +991 187 -.8817735599102624 +11 188 1.4958620932504092 +31 188 .5239456022814667 +44 188 1.5527893243614768 +58 188 .7248625335682712 +66 188 1.3245173209833756 +67 188 -.03636701052050918 +68 188 -.10986343343918822 +69 188 -.5024679349936181 +72 188 -.4638803129323166 +82 188 .11847826556894021 +90 188 -.20447803125421982 +125 188 -.5072229167207432 +126 188 -.6906452735476121 +130 188 1.456128007972476 +136 188 -.47214044546625655 +146 188 .5875080837648414 +149 188 .9335015656599235 +152 188 .4849229853684026 +156 188 .6706960498422577 +164 188 -.8646187631995672 +175 188 -1.678531696735635 +185 188 -.11718106807280851 +186 188 -.3721407241294503 +195 188 .21987153339013582 +197 188 .42874181270679207 +222 188 .9128447289552746 +235 188 .39962030353549166 +240 188 .6772610882966602 +249 188 -1.127258891767182 +254 188 .5216585163687005 +260 188 -.6507822971530179 +267 188 .8893134319259246 +299 188 .7324487016323068 +302 188 1.7600793941134694 +320 188 .9125596270650239 +340 188 1.1167218549692495 +347 188 -.07091785588870089 +356 188 -.2558386000370936 +362 188 .06775412714126114 +380 188 .706432246846372 +384 188 -.20009582391063835 +392 188 .2504780401008917 +393 188 -.05773050195026187 +398 188 1.1539759502735532 +411 188 .8663305745835498 +435 188 -1.15462783253924 +464 188 .7266523154513194 +469 188 -.06973525687249471 +494 188 .5447770772227797 +497 188 .10892599144399306 +498 188 -.21399950467364703 +507 188 .1651603256758533 +512 188 -.43335850897681266 +521 188 .8507566682409448 +523 188 .2330429876606836 +524 188 .515247121276896 +526 188 -.20292719366833686 +546 188 .9083819795762333 +550 188 .9125568289866725 +565 188 -.6015642083698983 +591 188 -.9790601373759614 +598 188 -.2097316795267809 +601 188 .6210091877010941 +608 188 .9748959591312464 +611 188 .04194331738835264 +616 188 -.9014011397462945 +619 188 .17599543661242822 +623 188 -.07292892092012254 +669 188 -.7119509448101969 +683 188 -.9730984068616148 +686 188 -.1454430264262621 +687 188 -.2780085745952009 +689 188 -.409759832868632 +691 188 -.09427077793032611 +693 188 -.3722001253911434 +699 188 .669923338550864 +702 188 -1.090499926393234 +703 188 -.5880864302238886 +730 188 .641503064166268 +743 188 -.35520139261372335 +745 188 .9533212412214123 +751 188 .41562468161398514 +768 188 .3136173995618818 +799 188 1.1439935940326336 +810 188 -.3899474284682428 +814 188 .2323688798654624 +820 188 -.3562880300048771 +846 188 .2708801286819206 +866 188 .12327980136062225 +869 188 -.8041906484477552 +871 188 .339361702092303 +879 188 1.0924922803058201 +885 188 -1.3931244839279129 +889 188 .2046920461611897 +907 188 1.7920894328570487 +912 188 2.1210594626635446 +919 188 -.09219858581656587 +921 188 -1.5592339101910389 +929 188 -1.356068135798858 +933 188 -1.5825788409756614 +940 188 -.7116550329965964 +948 188 -1.018268291980111 +949 188 .9868284167843077 +951 188 .04259437208993635 +954 188 -.7684735684858798 +961 188 .6437601394935326 +970 188 -.38556999471959497 +9 189 .18611889544315238 +24 189 -2.6176689066141132 +30 189 -.3642245067051353 +40 189 1.4462875049310222 +55 189 .6709034877243711 +60 189 .52828349783887 +64 189 -1.131124875473602 +77 189 -.2817180446985602 +88 189 -1.8393543243923165 +92 189 -3.569579676673503 +112 189 -.7990565848987135 +115 189 -.23603416310365577 +126 189 -1.5201995915936242 +130 189 1.969449979537152 +132 189 .8758263451561554 +138 189 -2.2415382812186655 +147 189 -1.162693657515866 +163 189 .6936691409776816 +165 189 -.27450756501551654 +166 189 -1.2106138376486009 +169 189 -.5589997587227387 +171 189 -1.6625597129712912 +193 189 -1.6129763905034915 +204 189 .6005756635224376 +208 189 -.19448920694589353 +221 189 -.9383683531371713 +227 189 .9917357233283574 +228 189 2.402663355297414 +234 189 .5865830908340328 +239 189 -1.5687651764710677 +247 189 -1.0148110076387449 +255 189 -.40161270135355587 +276 189 -.3485180921095099 +278 189 1.7525337400647134 +291 189 -3.201542025210458 +293 189 .05552166762591461 +312 189 1.7188076049938497 +313 189 -1.9484877007315464 +316 189 -.8396332054474768 +326 189 -3.0996340590954534 +334 189 1.2864860951268546 +336 189 .6192234790078007 +338 189 -.5099515514164729 +344 189 -2.1553758066279025 +345 189 .5889355966975127 +361 189 -1.4606346570508508 +371 189 -1.8014370633710042 +372 189 -.6438026278295742 +373 189 -.7836080546078881 +400 189 -.18877725351550334 +409 189 1.2232460073768314 +415 189 1.3487978974652748 +420 189 .8768618547944206 +422 189 1.801729791050468 +449 189 -.5530420857187365 +457 189 2.30208351318581 +466 189 -1.2753943905464822 +471 189 2.171807472540682 +484 189 -.7116675871810448 +494 189 -1.5803805421744213 +502 189 -.932371286054695 +519 189 .8196559476407056 +523 189 -1.0158506740939173 +534 189 -2.8023508646093296 +538 189 .7435251420344187 +549 189 -1.2225756247249853 +567 189 -.8442635893430254 +569 189 -1.1035208103587026 +596 189 -.6705602469666556 +637 189 -.453403243760375 +640 189 -1.6686738396897383 +665 189 1.200904081243388 +672 189 1.5258003968705156 +706 189 2.013636423382799 +713 189 .6333677265084124 +727 189 -.5039576683334186 +738 189 -.5629834903203548 +744 189 2.2818740083417963 +751 189 -.40895061087577433 +754 189 1.4292779967094031 +762 189 -1.443311291806266 +781 189 -.2593741032855414 +789 189 -1.7976893114770958 +800 189 2.1084111768368476 +805 189 -2.3031270338250276 +867 189 2.030708198728371 +878 189 .04724025475446826 +888 189 -1.2695959011710396 +891 189 -.32160220265673267 +897 189 .6075229749566878 +910 189 .30954026072719804 +912 189 -3.0127664487148045 +930 189 -1.002168403708714 +937 189 1.5597600640691873 +939 189 -.7377620633427231 +975 189 .323268291671576 +978 189 2.2068819002203415 +980 189 -.4395425292263502 +984 189 -.7639020612558269 +998 189 .5142821014212742 +8 190 .8397221929711576 +16 190 .5612089287091899 +18 190 -1.4458088690766728 +19 190 -1.08107574709943 +20 190 .598291249393806 +29 190 -.23391466714230247 +31 190 -.43234915531774754 +39 190 -.5597835142972054 +41 190 1.5512683840857322 +42 190 .6012625666151854 +44 190 .6324151038652317 +104 190 -.5444750448937098 +121 190 -.011860047741651437 +124 190 .4187742176943252 +125 190 -2.245317882736277 +133 190 -1.32947211202532 +140 190 .9950438736830194 +141 190 -.008576523619839238 +164 190 -.6770540887594471 +165 190 .4260545242519357 +168 190 -.5293811747281773 +172 190 .347134372258366 +189 190 .5439567963897031 +195 190 -.0918285166292847 +209 190 .2267294129832829 +219 190 1.9578012774767775 +228 190 -1.5848003323398525 +229 190 1.430421837312277 +262 190 -.5557945827054436 +263 190 -.42257237336095776 +284 190 .5589915833934611 +297 190 -1.5235423208000305 +298 190 -.7810731478439386 +317 190 -.9179706542518529 +329 190 .2191050731095041 +336 190 .1909752810481782 +350 190 .9536745816135479 +368 190 -1.022543629770045 +369 190 .8562322748089478 +371 190 .897016098392371 +384 190 -.20620937259048322 +392 190 .06074611921049128 +448 190 .23708934582228663 +454 190 .5505696337624182 +482 190 -.07268532952121165 +484 190 .4787845751230686 +507 190 -.480269726600733 +513 190 .8079870702360072 +517 190 -.09038275881182567 +530 190 -1.4821562113425522 +538 190 -.4158460597711703 +550 190 1.7831287845738162 +558 190 -.22202199255118366 +563 190 .01714268151223683 +568 190 1.1230641050483676 +575 190 -1.2417840018797885 +577 190 -.2497689093847899 +580 190 -1.3774546018490568 +611 190 .7909347647535658 +614 190 -.6589977913313174 +655 190 .19079644279537075 +659 190 1.0028634962266667 +678 190 .48020319710983117 +684 190 -.34715253578482297 +706 190 -1.1255358634270272 +735 190 -.8757458657957766 +744 190 -1.0339423987703091 +754 190 .07065467753128456 +764 190 -.7388676686741203 +768 190 -1.2220786146402347 +773 190 .7538608955347453 +774 190 -1.0462008762116906 +801 190 .028976230240479364 +805 190 1.6835601020781843 +812 190 .28773781833537426 +814 190 -.4243744843555608 +818 190 -1.0315797581878003 +825 190 .1555747270553735 +837 190 -.7646917293774711 +839 190 .18787553508418642 +861 190 -.1620307821222563 +863 190 -.8195774762858498 +866 190 -1.2513437013814863 +879 190 .16272048643624876 +892 190 1.1847598031895659 +973 190 .5054798873258238 +976 190 2.6518833940762905 +981 190 -1.233113646435193 +989 190 -.3532733536578764 +990 190 -2.1883213355635993 +1000 190 -.40704529177389076 +3 191 .712081695114719 +4 191 -.15432220336452282 +11 191 -.3481158719479769 +16 191 .09564134851018297 +22 191 .8656707321158803 +26 191 -.12700111278915888 +39 191 .2193437317489173 +71 191 .28650801203308873 +81 191 .6344686392722674 +89 191 .3007345909200581 +98 191 .15425546292815842 +113 191 -.6195261647262096 +118 191 .10727910297061491 +143 191 -.7276240892101328 +157 191 .02065977756452231 +158 191 -.593132804936826 +159 191 -.394647984680931 +175 191 -.5336570679381405 +181 191 -.2854515133911233 +184 191 -.5628735631324326 +209 191 .08017675439929545 +215 191 .9412478377590084 +216 191 .3383303345690217 +218 191 -.43187681363163544 +228 191 .7795792362097915 +244 191 .5441659719863611 +246 191 1.02683289483799 +253 191 .03107348516819869 +261 191 .37793761998424663 +265 191 -.04730574228022477 +282 191 .5432706804993653 +284 191 .4657627111213658 +296 191 -.2622871149057766 +314 191 .575045618754038 +329 191 1.335314067167684 +333 191 .1027245377160957 +334 191 .6935500223956828 +339 191 -.18505784397847314 +349 191 1.1353743054649859 +351 191 .7368123302931645 +370 191 -.6383683062909007 +371 191 -.39976164976832523 +372 191 -.2847570598094862 +373 191 -1.0814320864414058 +407 191 .6285402936016432 +430 191 .7270469238310576 +436 191 .25641176805624566 +440 191 -.35827405518098965 +484 191 -.38098615849941364 +485 191 -.13157073783195875 +501 191 .7115762708501173 +504 191 -.23928697762050766 +507 191 .7332153462493329 +508 191 -.3819225735556087 +509 191 -.6370272254076547 +521 191 -.15969922441440706 +539 191 -.8518220033580455 +546 191 -.09452974140840395 +560 191 .0895635711234492 +565 191 -.26542022002111476 +571 191 .40088333246273883 +573 191 -.5566976236823062 +580 191 .4204196544397377 +602 191 .36008833681925684 +634 191 -.398140768719505 +636 191 .04951184898859233 +646 191 -.877372760789707 +650 191 -.17000982277885213 +655 191 -.8519412433370478 +658 191 .29231459534601983 +672 191 .15658809832512222 +716 191 .0829444245492266 +727 191 -.6403395978863429 +736 191 -.028188312114815827 +741 191 .5332475255587051 +742 191 -.6053733170345592 +743 191 .9706527361194096 +757 191 -.8636357255597014 +758 191 -.3177758955608488 +768 191 .32721644096856567 +774 191 .355880093475437 +776 191 .3644189113063616 +781 191 1.2597245082795023 +795 191 -.7923235076405387 +800 191 .564439980287945 +806 191 .14015140322765465 +818 191 -.2626243967372436 +820 191 -.36079762775393087 +823 191 .0663585025225108 +835 191 .17520531977752077 +838 191 -.7873412554004995 +840 191 -.5570720448323782 +847 191 -.5366985074478481 +851 191 .3574349927274204 +861 191 .3109083129007929 +862 191 .313875286068374 +869 191 -.48877356845118025 +871 191 .12882759293203344 +872 191 -.3108280462995665 +896 191 .5025796101959152 +912 191 -1.451046185731815 +921 191 -.545280932694339 +923 191 .3319985907923392 +928 191 .3815738372932463 +930 191 -.38834039479697124 +969 191 -.26345417398459336 +988 191 .5330574736491253 +1000 191 .4859888281680103 +23 192 -1.0023607295451522 +42 192 .052624744351295306 +50 192 .12842633292158498 +56 192 1.9311528020737738 +58 192 -1.4362962515054873 +62 192 .36532707675328013 +64 192 .9199312324556302 +71 192 -.7979500145309529 +76 192 -.3791620613163679 +88 192 -.4861849479720493 +90 192 .692039635046937 +92 192 .0920123736605555 +99 192 -.6716559399058242 +131 192 -.8110709818497915 +133 192 -.19371072766658193 +134 192 .8202028631532721 +137 192 -1.262573318081498 +139 192 .13023257327508747 +149 192 .009053294042677795 +154 192 .7977141574325659 +163 192 -.8434219906307913 +167 192 .21263833095342946 +175 192 1.8212353999800048 +216 192 -.5347685740899905 +217 192 -1.8235494957281915 +233 192 -.023823351964284853 +249 192 -1.2823579709193704 +266 192 -1.970172016378454 +268 192 -1.9822459873787477 +291 192 1.0100692460020646 +308 192 .3849387566497934 +319 192 -1.032250186227975 +328 192 -1.073740847722572 +329 192 -1.687523799986296 +341 192 1.5188560235669915 +355 192 -.5033034746861216 +357 192 -.17004333110531838 +363 192 -.1409106223270711 +364 192 .75567392473997 +368 192 .91884674344281 +384 192 -1.4359690159108587 +402 192 .8269791433942986 +404 192 -.5099897486482051 +411 192 .6533610487014673 +435 192 -2.108654838480486 +442 192 .2137010735885884 +450 192 -.6153965407732692 +454 192 -.34312329106441825 +455 192 .5473340051078197 +458 192 -1.1505175844111095 +461 192 -.8806879188019358 +463 192 1.1007016915408383 +484 192 .08835265640722866 +489 192 -.5639575949338274 +493 192 .5305296788514302 +522 192 1.0818347868232325 +524 192 -.8646286059264918 +529 192 -.06337076781204096 +553 192 -.8596359970912341 +554 192 .22017766569299785 +592 192 .9084348710696775 +595 192 .5482888850703107 +599 192 -1.1385923049093238 +646 192 1.471572144075514 +651 192 -1.4214670444096322 +657 192 -.49663557557217236 +668 192 -.16558236247848188 +673 192 -.12985700141933673 +675 192 -.544237789867731 +683 192 .06349116433154715 +684 192 -.678040364958835 +695 192 -.4715049462758051 +698 192 .4697812294179769 +700 192 -.4139383004558218 +704 192 -.1427725052777668 +706 192 .01452798095220778 +715 192 .13175759466674178 +726 192 -.9481593151836889 +730 192 -.5860860243995419 +752 192 -.11800011788545677 +762 192 .8747642978638563 +770 192 -.5205794569325518 +771 192 .1814000535195378 +774 192 .06964502930275548 +793 192 .017237963171307852 +803 192 -.5413548172568486 +808 192 .16750033868085812 +810 192 .8837621772461797 +818 192 .8191781999174765 +834 192 .6991154927413219 +847 192 1.4063932159641965 +851 192 .47908147829070147 +855 192 -.0652966041785687 +868 192 -.12303268329889538 +874 192 .3977669544548263 +882 192 -1.3568619771451502 +884 192 .450473619806965 +895 192 .2521857331189788 +901 192 -1.0401006160589539 +906 192 .5266962835295942 +913 192 -.5849474588582497 +924 192 .4229116091796943 +925 192 -.1815315357770974 +929 192 1.0778316266753611 +930 192 .4173586387579177 +933 192 .4305830622098551 +948 192 -.07229435698737857 +953 192 -.016504461248904742 +971 192 .6449529709797432 +3 193 -.7166882151454876 +10 193 .44770863973948943 +14 193 -.017040677982008506 +23 193 -1.0362886613952689 +34 193 1.2038641559712837 +38 193 .09590292494316884 +48 193 .9721066111120942 +50 193 .8927163852011505 +55 193 -1.2662284673318969 +76 193 .02343335912027547 +79 193 .3881886129778215 +86 193 2.3287458909992047 +96 193 .6387148028632013 +108 193 1.3027866801799233 +110 193 .04431243259174847 +115 193 -.2360557213140977 +117 193 .7150058826235008 +121 193 .36410181987267204 +122 193 -.49330079220236006 +123 193 -.7638251808389869 +124 193 -1.141711396795327 +139 193 -.11103443817202707 +144 193 -.6861169706559099 +147 193 .9440170370744405 +156 193 -.4832346171698807 +157 193 -1.5838985210348415 +162 193 -.7455907549215207 +165 193 .3033167293181449 +179 193 -.6583639540859594 +185 193 .2706234238784103 +186 193 -.5246847659817685 +191 193 -1.0895741533431818 +252 193 -.4131215671689673 +264 193 -.670735421923121 +276 193 .6096075527172682 +283 193 .1317109275652834 +288 193 -.11944650446593234 +291 193 -.04323439395077125 +295 193 -.27928353051421756 +313 193 .14691114218738444 +330 193 -.24122144343199334 +348 193 .48512927490143654 +350 193 -.5107972323978617 +351 193 .373729264560291 +363 193 -1.5501243838101746 +365 193 -.05846217952096261 +366 193 -.15856643158283287 +372 193 .8854886544814778 +383 193 .6456390493839368 +393 193 .32878375351218125 +395 193 -.9073418927668156 +417 193 -.5630212063218002 +440 193 -1.3363747640272603 +444 193 1.871799986578124 +459 193 .10253727698276083 +500 193 -.07944273413951564 +503 193 .5386402861397189 +518 193 .6117769370188164 +528 193 -1.6468921796559124 +546 193 -.5960476817912447 +547 193 .6901752693287572 +549 193 -1.0569750941174503 +550 193 -1.220417867041548 +577 193 .7809586426645335 +602 193 .4531418490354027 +615 193 .20281747346254703 +625 193 .09771040160939608 +631 193 -1.2151957109530598 +635 193 -.45855124658302615 +642 193 1.0842523853039012 +658 193 -.22382140190418812 +660 193 -.5402811377124515 +680 193 -.598861993602776 +706 193 .7552212377808966 +713 193 -.2505011217958487 +714 193 -2.2392395259072173 +719 193 -.28999574564505337 +722 193 .5545705374487417 +727 193 1.4642557463719728 +731 193 .9243345354922415 +735 193 -.5890663290003522 +746 193 .0012723816801088056 +748 193 .6972845621975367 +749 193 -.07038160787104111 +753 193 -.6145967897468135 +769 193 .5097366114597973 +775 193 -.4867662216154804 +785 193 -.010282314065745521 +828 193 1.0795547351887207 +837 193 1.540853328010223 +846 193 -.2579900975274251 +852 193 1.268786580759977 +859 193 -.6911487723709133 +860 193 .21345217106143038 +864 193 -.9412336780694157 +871 193 1.1619828123490425 +879 193 -1.0441976033584526 +914 193 -.975278909384963 +929 193 1.9102658072184258 +954 193 .3220978410236774 +980 193 1.2573213462001305 +983 193 .7408368268006575 +986 193 -1.9010890901201452 +996 193 -.00621389764161509 +2 194 .2936448592089156 +8 194 -1.6094259031270608 +9 194 2.2894358569537028 +12 194 .014558705270732747 +23 194 .5371396560139104 +25 194 -1.2097853061156851 +27 194 .73098976982012 +34 194 -1.6533869550193945 +38 194 -.8421694418806521 +44 194 1.5790588414357567 +53 194 -.47686690975395185 +67 194 -1.2618063089633798 +68 194 -.12354297302681964 +83 194 .046134597873746463 +102 194 -1.3576304646332942 +109 194 1.8247587090498383 +137 194 -1.5376908127719664 +155 194 1.2135176456316232 +158 194 1.6632747819949094 +159 194 -1.7990866072586749 +179 194 2.0044648148969175 +187 194 -1.6252292585501424 +189 194 .8960832561086232 +195 194 1.0652429259599638 +210 194 -1.304743022656435 +236 194 .15264380044704517 +243 194 -1.4308598569416389 +245 194 -.03715599331332638 +264 194 1.7280853495744872 +265 194 2.4977278604723825 +295 194 .8180437628344666 +303 194 -.2434091133507506 +320 194 -.0005760213810160619 +321 194 -2.784094677318729 +326 194 -2.360276668226306 +330 194 -.834203843355112 +331 194 -.20181667435580403 +345 194 -.795620997412778 +361 194 1.8033509855260876 +372 194 1.6605954093238633 +380 194 1.1870134977771898 +393 194 1.2537239878277615 +434 194 .3704325686112761 +452 194 .012163933537627208 +453 194 1.7014040019282228 +454 194 1.788592766320724 +462 194 -.8620078549697194 +488 194 -.933762514112416 +497 194 -.47002751659757186 +499 194 -.39674531738443963 +501 194 1.3908129608573008 +513 194 .6392004768904483 +518 194 -.279530322703847 +523 194 -.2558505698625591 +531 194 -.2491890167901879 +538 194 -2.0880721963060527 +557 194 .25540402627971315 +572 194 1.3030041388889286 +579 194 -1.2731139437536392 +580 194 -1.1013636432544311 +586 194 -.08135272949544728 +590 194 -.21489003357633576 +632 194 -.46235447140799885 +651 194 -1.3074042829009536 +658 194 -.7259843655526678 +666 194 .054993195093879094 +687 194 .8134785043095873 +691 194 .973261772494267 +695 194 -.18092783718965302 +707 194 -1.9270403090664325 +709 194 -.6307104957520064 +711 194 1.1125826458988537 +716 194 .6552605867937609 +726 194 .24824950567433815 +735 194 1.1499397667142268 +737 194 -.7232635102322499 +748 194 -.17070730947162688 +756 194 -2.28274916464715 +760 194 -.014134950042706339 +789 194 .9561475927144709 +793 194 2.41307723642176 +796 194 -.19189979233661364 +805 194 -.752578109724815 +817 194 .014099578991386544 +836 194 .6321716164212283 +846 194 -.8998995340456196 +858 194 -.8471216818735524 +871 194 1.4559887018266389 +879 194 .09616772324769121 +880 194 .13655349398689495 +902 194 -1.107368293338642 +903 194 1.150437588536219 +914 194 1.300893024744053 +921 194 1.4599873007555675 +926 194 -.8004341216867825 +932 194 .29259287635277664 +945 194 -2.77997418293519 +956 194 .6715681290020521 +960 194 1.969388436193066 +965 194 .9262341082510847 +966 194 -.4388446801444822 +973 194 -2.558130041919817 +979 194 1.1714521766576236 +980 194 1.1769944125373601 +999 194 .19783598459143734 +14 195 .5906733137239749 +20 195 -.2389273094773834 +25 195 2.219439894816874 +32 195 -.4946377435266169 +76 195 .3133864529433739 +79 195 -.214974667792015 +96 195 -.022729060753363783 +97 195 -.8267601775669855 +102 195 -.26865282677974467 +106 195 -.8653513479745429 +108 195 -1.357201830741733 +109 195 1.2184339706766913 +115 195 .4133899232850815 +122 195 .17034029622910243 +125 195 .1957397146054608 +132 195 -.06291266672697352 +142 195 1.171455688444166 +151 195 -.11210577084769206 +171 195 .17904519544871078 +173 195 .8578312124024308 +179 195 .4279980704032821 +181 195 -1.5318721012212253 +186 195 1.0615429384539143 +201 195 1.0105685026550346 +210 195 .5732582142922099 +231 195 -.20795549887246292 +248 195 .3039416901922852 +249 195 .5928908985596933 +256 195 1.4738493084360427 +263 195 -1.0486387003791013 +270 195 1.109877070905347 +310 195 .4877643463861019 +335 195 .199492275418479 +339 195 -1.2923700886099259 +345 195 1.1133789582299216 +354 195 1.9383315776795083 +356 195 -.6247860028343833 +359 195 -.755176699534312 +371 195 .28478665519146545 +387 195 -.004678372640137998 +393 195 .41319686839633424 +423 195 .48842792919032696 +425 195 -.4870014324584834 +426 195 .2568663639920455 +440 195 1.6171362560771438 +454 195 .5040821761336549 +456 195 1.0588599282360722 +459 195 -.0849829252800261 +468 195 -.8679860969108695 +474 195 1.4103570005193093 +480 195 -.19894250731896843 +488 195 -1.080781144776931 +505 195 -.11420058988316716 +518 195 .0467031900250247 +523 195 -.8392348402896039 +526 195 -1.1423339053407184 +552 195 -1.0878925582974954 +558 195 .15500367595702563 +576 195 1.848804456276431 +579 195 .26935002451182755 +597 195 -.7120504787432397 +602 195 -.9395563070279711 +604 195 1.2922798728107203 +617 195 1.3597372607425084 +630 195 -.24697513648849756 +631 195 .30456492367249116 +644 195 -.4054867882836079 +658 195 -.3883525369594214 +661 195 -2.1565735812142868 +684 195 1.0313555387999194 +695 195 .06355546732416276 +701 195 2.14001294321855 +703 195 -.44846495305803596 +717 195 -.6021306348124545 +736 195 1.2855732597538903 +739 195 .16626301794559623 +748 195 .23512701647375558 +750 195 2.1619830771578874 +758 195 -.745182282072823 +788 195 1.1251078249946935 +801 195 -.957634250327403 +807 195 -.38748670019374515 +815 195 .2772816812678407 +822 195 -1.1731733571998266 +845 195 .7968797901314821 +857 195 1.3612106716120298 +871 195 .04868997124331749 +890 195 1.603530223156519 +901 195 -.8658762574441359 +902 195 -.10891212906232234 +904 195 .07845018998036908 +907 195 -.5971992621052636 +919 195 -1.1789013014248535 +924 195 .24105448090179013 +929 195 .20088074343315188 +931 195 -.23272725024185553 +951 195 .1496637043604102 +953 195 1.2982876051591998 +985 195 .8248667273253085 +2 196 1.8880967749786821 +15 196 .33087671225954435 +17 196 -2.1415069116450858 +18 196 -.5134749752646243 +38 196 -2.1042993108419306 +49 196 -1.1413771478713515 +53 196 .19450623001218054 +54 196 .11572386306962655 +56 196 -.4527304953153648 +58 196 .6855230508534044 +60 196 -.382228967502285 +78 196 -.17924793866228314 +90 196 .4040259286227743 +93 196 -.8024151004885914 +104 196 1.1305921538183108 +106 196 1.4922754867881298 +114 196 -.9337846911362016 +122 196 .5591798245397571 +136 196 .8593343825134949 +139 196 .11585476750354823 +156 196 .07412983328690287 +164 196 .2127946878067451 +175 196 -.7116146094183661 +191 196 1.3580117744394424 +195 196 1.938773723446496 +201 196 -.5977728771605559 +224 196 -1.5976356007841628 +228 196 .38491551666794255 +240 196 -.514026218038375 +269 196 1.5303704277638988 +276 196 .27401902695468194 +296 196 -.8245500584558644 +299 196 -.400343110845512 +307 196 1.2460623775886133 +313 196 .07665914612111654 +323 196 .8021655423435439 +345 196 -1.6880913011830652 +353 196 -.6133318514187568 +374 196 3.1508828436015293 +376 196 1.398227669606907 +382 196 -1.093453416267454 +386 196 -1.1575189746110413 +391 196 1.399794683790816 +405 196 -1.354287530482888 +407 196 -.6172081505365248 +418 196 .21099781716034371 +427 196 -.38883302606755926 +446 196 2.177640480209447 +453 196 2.225420655049212 +456 196 1.907361927572514 +461 196 -1.2048950223312587 +462 196 -2.252135053809476 +478 196 -.7464663361034302 +491 196 .5680507714470534 +537 196 .8915859770998502 +541 196 -.1482822994245409 +545 196 .18419736308839504 +570 196 .35092081762904065 +597 196 -.48972690621790177 +603 196 .7159524119596459 +614 196 1.8005228127100097 +633 196 .9721736271915625 +639 196 -2.3048469538267424 +646 196 -.29530456135588534 +653 196 -.7140184380930834 +656 196 -.5418956320776526 +668 196 -.6807790040487782 +672 196 .928805246134008 +694 196 -.485647140745321 +704 196 -1.32812148416226 +733 196 -.14306633314865508 +740 196 .8769121825084597 +759 196 1.1544310651195222 +761 196 .1721825582881544 +774 196 -1.0697357843456314 +779 196 .4304399944273031 +782 196 .37768162996696414 +783 196 .13851657646121013 +784 196 -1.3370334759676612 +809 196 .21540447276583163 +811 196 -.5593626089168142 +812 196 1.0835176255922578 +813 196 -.7867289033533987 +843 196 -1.608933274565875 +846 196 -.31448371663588404 +847 196 -.6160139908490285 +850 196 .36888449682531943 +877 196 -1.551523438609307 +881 196 -.1378472638480362 +882 196 .615829163994322 +885 196 .46464887586362624 +886 196 1.1121267554770689 +924 196 -.9135073507932729 +926 196 .19765217540812455 +933 196 -.28002311671561475 +952 196 -.7886085609883642 +954 196 .7227720239540985 +967 196 -.3439184805133696 +981 196 -1.0956205971001427 +999 196 -.9875211142148832 +2 197 .5854564714225755 +12 197 -.10282672141218656 +24 197 2.498431815330762 +32 197 -.7148117491374608 +33 197 -1.220326927121067 +59 197 2.035897572449528 +65 197 1.4813322119998624 +67 197 -.8129052798495162 +68 197 -.9622967276625571 +81 197 1.9729870266015528 +91 197 -.5178365391929963 +96 197 -1.6949631086210992 +100 197 -.3224223115043704 +104 197 1.2290361031758108 +109 197 -.6034502132822821 +129 197 2.128111357489525 +136 197 .6389098817290846 +147 197 1.2503669588907729 +159 197 1.3129451375577597 +166 197 -1.5728149086603442 +170 197 -.8663947966731591 +183 197 2.4963428971827724 +210 197 .3436705568074922 +214 197 .9873660161033883 +216 197 -.07353076241663983 +224 197 -.7778744272767908 +228 197 1.4104644563903204 +234 197 2.264791556332097 +239 197 -1.7566460499477847 +240 197 1.099671983953872 +262 197 -.689966701191129 +268 197 1.07393377207525 +272 197 .11126071271678133 +280 197 1.7781736186394763 +288 197 -.23900478323536045 +290 197 -.513713172798732 +296 197 -1.5836949270452876 +305 197 -.5365022693377139 +312 197 -2.3570073446648605 +324 197 1.6539479572823725 +366 197 .6728499876499299 +369 197 .510027633958007 +376 197 .6679798600291214 +387 197 .14562235251092334 +392 197 .9615789761976751 +393 197 -.9720348486422506 +398 197 -.2563865631755424 +411 197 -1.3023860030461898 +418 197 -1.4363934787188963 +423 197 .22900691800722778 +441 197 -.3569472037175573 +446 197 1.7887182117498637 +468 197 1.001114333600729 +471 197 .8157065563460784 +478 197 1.6991212072987378 +501 197 -.534002482329097 +521 197 -1.930182621148556 +530 197 .3098940794412699 +536 197 -1.5073083603171433 +543 197 .10653942204171998 +552 197 -.3737467609294629 +556 197 .18752483431082084 +577 197 -.8120464802506266 +588 197 1.022115033494623 +591 197 1.6900745908847 +613 197 -2.4373928311801487 +616 197 -.25212621223692633 +619 197 1.0414094377335867 +639 197 -.6242033329334913 +642 197 -.9593133555465382 +664 197 -1.1156333175258262 +674 197 1.2609787209018115 +694 197 .750840109946578 +695 197 .29689299506813305 +698 197 .41342840960431415 +727 197 -.687278623009218 +735 197 -.12316824754058785 +747 197 .5253181167220595 +759 197 -.35913481870373754 +785 197 -1.174550678658332 +787 197 .7911352119000898 +815 197 -1.5016769369718106 +821 197 -.4787499572991478 +829 197 .04713280106697547 +838 197 .4445544616020021 +861 197 1.9695167041145847 +866 197 1.0199385540828856 +869 197 -2.399961986893826 +876 197 -.054832634348085024 +881 197 -1.5766985680909167 +882 197 .2708267754756928 +884 197 .12651062358051693 +890 197 -.6236247633018559 +894 197 -.8519367031061618 +905 197 -1.741145270879471 +906 197 -.5247396609148378 +920 197 -.303665645880231 +932 197 .010464422158794943 +945 197 1.609388521982868 +951 197 -.9766283912708431 +961 197 -.008694296074719911 +972 197 -1.141223005354937 +20 198 .7071210927108434 +29 198 .9254898708621977 +35 198 .9282891017906878 +41 198 -4.373724614104727 +63 198 -.5335475694557041 +86 198 3.265883037144318 +94 198 -.7218655403146369 +106 198 .5388267601591064 +129 198 -.014489399094382238 +133 198 1.2132650854981406 +142 198 .14533881130100168 +146 198 .11493862140208568 +147 198 .16857090004768457 +149 198 -.45062441444479645 +158 198 .04771843958112834 +162 198 -1.3976999425783578 +168 198 -.313737201879076 +170 198 .7818752975959291 +197 198 -1.8559913304516114 +198 198 .5708176831174356 +203 198 .9461450632303916 +211 198 1.1618605342673647 +224 198 -.4461968317496643 +228 198 .09629229610030159 +235 198 .42333775252590744 +280 198 1.5159543393756953 +285 198 -.8067310821933308 +295 198 -1.2591174726410737 +327 198 -2.2246220421319958 +329 198 -2.149074511045424 +335 198 -.11364436706234253 +344 198 .5635093330557404 +357 198 -1.8350101061711415 +358 198 -1.8590147031593411 +366 198 -2.3098251482812437 +377 198 -1.5929140472969536 +380 198 -.9362557217413165 +382 198 .4216918683047269 +422 198 -1.1210361402969902 +428 198 -.16940029914924865 +483 198 .11521731121617 +489 198 -1.7040832725508352 +491 198 1.2919991518864062 +493 198 -.9988763200496186 +516 198 .007507809879159527 +525 198 .722751858544613 +532 198 -1.5535415798293888 +542 198 .8636500737568169 +549 198 -2.1404026713254725 +556 198 .053344419683293696 +557 198 .22744623093840172 +569 198 -1.1558596274528592 +573 198 2.1934398520610556 +578 198 -.7670543235038074 +602 198 1.8288623915158695 +606 198 -.35197835542357947 +617 198 -1.5756646851837959 +623 198 -.13824818871282266 +625 198 2.844451568373129 +658 198 -.24433604255916788 +665 198 2.386908492795076 +668 198 -.20966281077959958 +685 198 3.918583816792768 +686 198 1.2250355164342104 +703 198 1.9959507461416182 +708 198 .6251390997526572 +710 198 -1.087006635399167 +711 198 .46013363778196387 +732 198 -2.586276385014864 +736 198 -2.9065747455403566 +744 198 2.51490792310052 +755 198 -.23206996285978987 +762 198 1.1187093525631324 +788 198 -2.8634719611438793 +799 198 -1.2245605611726011 +807 198 .1035354744585732 +820 198 -.056882026599782726 +831 198 .3409548416214091 +841 198 -2.608269288098989 +845 198 -.33493740153844986 +851 198 -.5076947663468324 +854 198 -.2090561797169021 +866 198 1.6150840807937272 +903 198 -.5239782763806687 +909 198 1.120404167728792 +930 198 .2769322349685209 +937 198 -.32970342448305695 +943 198 2.7626611256370186 +950 198 -.2593811235057046 +952 198 1.2847176083233671 +967 198 -1.0740365046326659 +987 198 -2.83093415213746 +990 198 1.3436033221501944 +8 199 -.12358766277483857 +10 199 -1.1688616223080643 +19 199 .5230495486466181 +21 199 -1.24514921381915 +24 199 .9767250169168641 +36 199 -.24213940641251122 +40 199 -.8084184164020456 +43 199 -.5833399250004623 +49 199 -2.3839824276816675 +78 199 .029651267503468193 +84 199 .4710499044029284 +88 199 .5267289855884948 +112 199 -.8489787498248437 +121 199 .300014648079283 +124 199 -.28697235575752716 +136 199 -.5203162864804576 +138 199 -.5221148264877463 +145 199 -1.0718072306934106 +152 199 -1.9956379450716093 +161 199 -.7729010822648038 +173 199 -.15082223883265589 +176 199 -.21715256837372604 +185 199 .4753921561758226 +197 199 -.4095608284107185 +199 199 -.04069281856330011 +226 199 1.0308669262573973 +231 199 1.1346612458367789 +232 199 .6544194955662818 +239 199 -2.3871266485511375 +261 199 -1.0454842744195216 +272 199 1.0566392908309092 +307 199 .6004984813696499 +325 199 .4421723228668654 +338 199 -.5308689236253139 +339 199 .2930091234247082 +350 199 .1693629923723064 +380 199 .9232357455326086 +391 199 .6590360441835424 +394 199 .7803596582715088 +397 199 -.6492721288848979 +415 199 -.5022640328094405 +436 199 .07211489573396071 +454 199 .3837839273719875 +455 199 .04644203225002208 +458 199 -.4962854805300998 +462 199 -.902112593450091 +466 199 -1.1132742778114246 +467 199 .6533884305232351 +480 199 .27702978630895475 +482 199 .9324868304371672 +486 199 1.4931228260354175 +505 199 -1.2316324682401472 +507 199 -.3669731106812791 +511 199 .4138838220307512 +514 199 .02169875879096289 +518 199 .24613221732473842 +522 199 -.3823787985711843 +537 199 1.3239799168411766 +545 199 -.11516592280986031 +546 199 1.0384902955153115 +552 199 -.6670620383556414 +555 199 -1.1172519416932396 +562 199 .4513076084619252 +563 199 -.04667828295101735 +573 199 -.13886624581343485 +613 199 -1.8199807632800011 +648 199 -.5024923125530162 +664 199 .8149689026775959 +665 199 .13038976696689888 +676 199 1.5104885902150724 +677 199 .09173639649147239 +681 199 -1.3777729138431534 +685 199 1.2415984386082766 +689 199 -1.7883557966908996 +699 199 1.0198924346493008 +708 199 -.5579464827575521 +712 199 .16154334375458243 +724 199 .6886502129809526 +737 199 .9008838881639925 +738 199 -.07523604767877154 +739 199 -.3940016876455274 +760 199 -.7465263533807496 +791 199 -.5747316746310811 +792 199 .12091232570217912 +798 199 -.13258812035899098 +801 199 -.8617554611984932 +824 199 1.2269617619722866 +825 199 .0559445317433754 +830 199 -.14790725554717657 +836 199 -.5753528284455444 +839 199 -.3161307441913586 +847 199 -.2212809325583735 +866 199 2.428948049189512 +884 199 1.0874735843613168 +886 199 1.6035130989453785 +890 199 -.8502938898694654 +891 199 .09397273035130534 +917 199 -.24734147858750935 +920 199 -.2430793865453483 +923 199 .5579514852784742 +938 199 .2587087173113019 +947 199 -.04403409613752991 +951 199 -.8846189615286697 +961 199 .09654760795122316 +984 199 -.37108491671863025 +986 199 .5465852162898747 +10 200 -1.3569382352950965 +20 200 -.763886905321219 +28 200 -.291523866664928 +74 200 .07241915503509276 +78 200 -.8187691257139216 +85 200 -.21098415139501986 +99 200 -.2208876319832747 +105 200 -.6327778676081143 +107 200 -.6324102953432684 +118 200 -.3283843073939799 +128 200 -.7684597953654667 +132 200 -.4939202367931061 +135 200 .9780989696865394 +142 200 -.4793935516675073 +154 200 .5777200986891668 +161 200 -.44805630016378706 +167 200 1.0936744219088725 +175 200 .5148316918359155 +184 200 .48439930244622165 +196 200 1.1483262340245375 +214 200 .6000195582549929 +222 200 -.8829747846185053 +235 200 -.1374192148848479 +255 200 -.18061858517635002 +271 200 .10325967639354973 +286 200 .3014784866120521 +290 200 .4408740574121156 +300 200 .05735853300276583 +304 200 .6947538548976102 +327 200 .21029320843285812 +354 200 .419775848659952 +361 200 .11945846711365277 +366 200 -.9502945160391831 +372 200 .2631306752160405 +373 200 .13561287314197448 +393 200 -.5196782495497101 +397 200 .5958835764100864 +410 200 -.3612339539715805 +415 200 -.40163990027571195 +432 200 -.4410548546321535 +433 200 -.24701207249588233 +437 200 -.26617876701501003 +444 200 -.7173593410534157 +462 200 -.6509610699904397 +469 200 .8998373218836833 +477 200 -1.9803832234376464 +486 200 .0654965449404625 +490 200 .6494749542726205 +496 200 -.34575338648265697 +512 200 -.2080210991469233 +530 200 -.15358087698655737 +544 200 .7180770414805153 +546 200 -.1809191893980186 +550 200 .5027619911935964 +564 200 -.5245859225153552 +573 200 .07072378890649023 +585 200 -1.1316763377723598 +591 200 .32685920813848035 +594 200 -.6096007888670194 +619 200 .6407248516982287 +632 200 -.47405734092164076 +647 200 -1.2195571989785594 +657 200 .6924983868241551 +659 200 1.0516085529065733 +674 200 -1.0396537918572757 +686 200 .08723923484689486 +689 200 -.13338953365388653 +693 200 -.3217531393894646 +704 200 -.11042702805439497 +709 200 .5206520237308798 +724 200 .05757247498993032 +730 200 -.9637980458926931 +734 200 .7218392294239886 +739 200 .3146701155067293 +741 200 .27275258424309035 +742 200 -.8347946193285966 +760 200 .08904697787780796 +768 200 .24814922646849946 +774 200 -.4331887398475499 +777 200 .0958329563491854 +778 200 -.49446955670364845 +781 200 .3347845929259391 +782 200 .5416124224735974 +802 200 -.5005707592405321 +813 200 1.0151617538087032 +816 200 -.36969525049543556 +824 200 .12873508892992538 +826 200 .6945354696131467 +861 200 .3598107577113421 +865 200 -.2834633639200408 +909 200 -.48374840542174996 +923 200 -.5041364176477169 +937 200 -1.4938524122351486 +939 200 .2065732775455969 +977 200 -.41516629670870947 +978 200 -.4713792703974022 +979 200 -.23982759868253187 +984 200 .7589748337737703 +994 200 .36607361022648105 +999 200 1.0533648973027363 +7 201 -1.6930461652989237 +24 201 2.415269378525139 +25 201 -2.39229220799925 +28 201 -1.6783248132901702 +36 201 -.941490703950902 +50 201 1.5014915477116253 +61 201 3.0841662192869217 +72 201 -.695535677561917 +90 201 .560011528296107 +93 201 .9052235935995765 +105 201 -.16914570206953755 +109 201 -1.2402044284864115 +131 201 -.8958230739422756 +135 201 .7537004385187203 +163 201 -.5922886244544182 +164 201 .5530499681522545 +176 201 .4974818140318735 +191 201 1.2645777536862142 +195 201 -.1281681407097793 +196 201 1.9903833000983138 +220 201 -1.207454244764991 +222 201 .2898502194074088 +238 201 .7359695328283701 +241 201 -.4128035235224787 +249 201 -.5066699839610668 +250 201 .31724334501026336 +255 201 .3114374466246158 +256 201 -1.09777948014629 +257 201 -.12379595203305696 +279 201 .23877976131499468 +290 201 .8604307589717619 +297 201 1.8542258659955344 +309 201 1.471169279902198 +340 201 -1.0235334057844088 +354 201 -2.5889260871134896 +360 201 -1.7719160818445079 +361 201 2.831227628639856 +379 201 .7839279929556455 +392 201 .22486179199203132 +395 201 .08942169084396985 +424 201 -.13976481109880612 +428 201 .8310640059570791 +460 201 .9561356660768907 +472 201 -.9198880431783696 +479 201 .017891092604112174 +483 201 .17801818447692586 +484 201 -1.3246809419497694 +486 201 .05035885950055813 +488 201 .8200069802914589 +501 201 -.9401484938201228 +510 201 1.278326683285506 +514 201 .2354603492762426 +522 201 1.2467095614572454 +532 201 .30195832881210927 +539 201 .744841347976701 +543 201 .3008570217382809 +577 201 -.05684178971525487 +583 201 -.3935220195015577 +593 201 -1.2214897203527273 +595 201 -.3239868379860306 +615 201 .1569568692300968 +630 201 1.313469887549131 +643 201 .7040554477694995 +656 201 -.11351553202816363 +667 201 .886964311067657 +668 201 .9760248240042295 +673 201 -1.7405271698996667 +700 201 -1.0477923702040866 +721 201 1.626367635210822 +733 201 -.8450425969610055 +743 201 .9773451798586408 +756 201 -3.5285107710926664 +757 201 -.7872518624746995 +788 201 -.8371613793282972 +797 201 -1.4614356808866789 +846 201 -.8668176291894159 +847 201 -.1134417962407907 +848 201 -.48358113273663794 +872 201 1.2589266372851842 +886 201 -.20582126799657138 +890 201 -1.7795003442604782 +891 201 .3717510681397933 +907 201 -.7576843981064845 +921 201 2.1573764124859722 +927 201 1.3016242820694368 +932 201 .6411214451066569 +934 201 .09107923470865317 +963 201 -.9907343035968293 +978 201 -1.6316181352911974 +986 201 -.48455855563458367 +999 201 1.131002183837049 +7 202 -1.3281116768032892 +12 202 -1.184590732953866 +19 202 .4806349870363072 +25 202 -.6436385472919528 +26 202 -.43480643705075195 +29 202 -1.2279921565423464 +32 202 -.5658462488473459 +34 202 .7828525825734478 +38 202 1.7038438866256054 +56 202 1.7898449155920768 +61 202 .31503839181441873 +70 202 .8785516256537594 +92 202 .8535503722335804 +100 202 .039218532680218965 +107 202 .07500467984459476 +108 202 -1.325714411082675 +130 202 -.13673953876791314 +133 202 -.1504394479853426 +147 202 .8038696414876778 +154 202 -.6772116703501687 +171 202 2.380036844562421 +175 202 -.417302465171578 +176 202 .1914269603590785 +190 202 -1.2347166419424418 +194 202 1.1887351976989144 +201 202 .2038371555882335 +204 202 -.045400935722315655 +232 202 -2.782172562050623 +243 202 .9022429803379073 +245 202 -.7316374300670874 +250 202 -1.2307499344797905 +253 202 -.04536739181775372 +257 202 -.6772989482208784 +267 202 .8467520225670606 +269 202 -1.9935288000772282 +276 202 1.1683365691833578 +280 202 -.8483726853416278 +289 202 -.4573567355612962 +296 202 -.2683052950469376 +300 202 .31928269908811624 +306 202 .16894380005446374 +322 202 -2.9043554369993974 +330 202 -1.0483100151036668 +336 202 -1.1675590088179917 +345 202 .22072691406556255 +346 202 1.7126660668790268 +373 202 .1346222599889657 +378 202 -1.144844963858021 +420 202 1.7715824038079808 +422 202 -1.4083740748501823 +425 202 1.4129758868806124 +427 202 .31176062071355976 +434 202 -1.2264219606000628 +442 202 .9661836529486636 +445 202 1.4716714372154232 +447 202 1.3287869617912484 +449 202 -.9070292860570848 +450 202 .12497465464905377 +479 202 .9744846766074077 +482 202 1.092725710257329 +490 202 .02883078260990088 +491 202 .04463818330128187 +502 202 .5683374596547826 +521 202 .5958592585117959 +527 202 -.05023180239117975 +529 202 -.8185239728383061 +530 202 -.2400174679641182 +534 202 1.0072692986883907 +559 202 -.6386506348592447 +561 202 -.00947080153483347 +581 202 .16047623438747122 +593 202 -1.9466329913675144 +596 202 .13488297657913476 +599 202 .9546024466368714 +601 202 -1.0137767350995919 +603 202 .6698795484543103 +614 202 -1.6286073512720516 +618 202 -.6032447540663342 +622 202 .05260669262175731 +636 202 -.922783864064595 +651 202 -.05041722556626414 +677 202 -2.493387444828829 +686 202 .7659854776505868 +687 202 -.5538965632534325 +690 202 -.750696966184902 +709 202 -.5586491287310695 +713 202 -.6450325041982369 +724 202 .5817534864824785 +733 202 -.5529199704054725 +735 202 -.9964889523682685 +742 202 1.065747485303209 +753 202 1.1859754848612296 +755 202 1.3944044938851383 +756 202 -1.0589402234462646 +767 202 1.6166593518486145 +783 202 .0015713039369358167 +787 202 -.4633013435485907 +788 202 -.883240598367572 +790 202 1.6670389339003482 +823 202 -.7241060892115693 +835 202 -.4689163670698624 +850 202 .4299617799090534 +860 202 1.3331710831955674 +889 202 -.590533195275686 +916 202 -.5923426477233829 +928 202 -1.0963086398186839 +948 202 -.3934460896334122 +952 202 -1.6892149289592164 +967 202 .9090622611456196 +970 202 .8649764868523211 +975 202 -.17867548887820545 +980 202 -1.0213153276217581 +994 202 .05417551344719776 +2 203 -2.332436567064134 +5 203 .2301087184889439 +18 203 1.9481024129515965 +35 203 .7395212060316869 +37 203 .7794672585689583 +39 203 1.846321580908484 +49 203 -.5389109664238607 +55 203 .21670976384784663 +70 203 .39417567616527016 +72 203 2.04832998858301 +74 203 2.3861694753985154 +75 203 -2.866104415776478 +78 203 .3697488166219156 +80 203 2.3255701498130263 +85 203 1.989344348717566 +89 203 -.13594758068823276 +97 203 -3.1310359748582677 +99 203 1.2308399449183478 +118 203 -1.4875641174800347 +120 203 .34112866202190795 +127 203 2.4292172265040004 +131 203 .3157102726891727 +156 203 .673372231060068 +160 203 -1.9279203001980743 +173 203 -.30689873955726243 +185 203 -1.4808562704403103 +191 203 -.011652713373299095 +199 203 1.2794004738926161 +226 203 -.20867485140091868 +233 203 -1.1373400955968964 +243 203 -.6564595092061277 +248 203 -2.394182234756213 +253 203 .3059698954813425 +255 203 -.6174324044807594 +257 203 -1.6711580691079182 +258 203 .45731476222695605 +269 203 .08901169423130564 +280 203 .3783605458791624 +283 203 1.4346308034921995 +286 203 .6519351785584702 +294 203 .40848894523710033 +318 203 -.10859255389787255 +322 203 -.7740232741268308 +344 203 1.6846595671392401 +347 203 .18909748924982123 +351 203 -1.8925671235217874 +364 203 -1.303063271763927 +370 203 .7866624983706141 +375 203 -.1670813216535446 +398 203 -.04523599587598605 +406 203 .011982005480730161 +411 203 .7905476327152889 +412 203 1.6908746981160427 +432 203 .816702983764264 +455 203 .9864292775328202 +457 203 .24999078306554293 +463 203 .16628280050292515 +481 203 -2.119158221116803 +501 203 -2.2434177629069056 +502 203 2.1555898097346797 +508 203 1.6370367598384197 +522 203 .5085331806134424 +526 203 -.16412100253813136 +537 203 1.1559011950518372 +538 203 .11576708722862336 +556 203 1.7754052972119805 +561 203 -.5948821783314548 +565 203 .98421984249634 +569 203 -.27078578445613327 +583 203 .3144583798124748 +591 203 -.22621552519515065 +602 203 1.0739963028363793 +605 203 1.7128065716895053 +614 203 .83539238528523 +622 203 .05398209304593059 +629 203 -.20032101840613403 +630 203 1.763892471798831 +644 203 2.1127019338893662 +653 203 -1.7139762985034865 +663 203 .6464986367305146 +672 203 .416534118543337 +681 203 .055772981544937206 +683 203 -.1452972000719448 +684 203 -.550681670497577 +703 203 .5205982185570257 +713 203 -2.3120916807582983 +715 203 1.5921786463261058 +718 203 -1.0277589675217877 +719 203 1.3720887265500277 +734 203 .3936639581042287 +750 203 -.3007882337265488 +768 203 .7126668707007322 +772 203 1.269537500635976 +783 203 -1.4776306029392727 +786 203 -1.8134353658394469 +792 203 .4981428917581815 +809 203 -.4406468518207288 +822 203 -.7718538483435436 +880 203 -.5775067142769946 +899 203 -.8570944472262603 +910 203 1.7500525512876208 +919 203 -.8923283856390166 +923 203 -2.0329901920489775 +927 203 1.5057509114928387 +940 203 .26742114304727493 +945 203 -1.4401204937852323 +957 203 -.2965515048705126 +971 203 -.6859341644411631 +988 203 -2.6279631552630858 +989 203 .2727048574469408 +998 203 1.9071753028655996 +1 204 -.04409839832207452 +10 204 1.7867212931516285 +11 204 1.3223217955048292 +13 204 .3080237585770254 +18 204 -2.908966553405585 +36 204 2.0036695687848343 +49 204 .7521484867331517 +52 204 -.2631335858101334 +53 204 -1.9128722720980813 +67 204 .0667749501886406 +81 204 -1.4097408586150175 +83 204 .7884184424103974 +85 204 .7692048727270757 +86 204 -1.6740884786149528 +104 204 .6478617085708982 +123 204 2.1566165331201503 +127 204 -.7785760825346664 +144 204 .9577205936800677 +160 204 .19764828543064544 +167 204 1.5339975729371707 +173 204 1.0341784690998486 +174 204 -1.9177143976423916 +178 204 .9153565218795087 +184 204 -.426773907396581 +200 204 -1.0823526800064147 +202 204 1.892065832290535 +237 204 -1.1177890717939374 +245 204 -.16855250357230933 +267 204 -.39555541064296895 +283 204 -1.566283238800302 +292 204 .47957187925486944 +301 204 -1.4121326870093571 +303 204 .17719912008986005 +316 204 .13512630205394602 +317 204 -.2480100168281401 +323 204 -.3668222065728969 +353 204 1.7773498794170832 +374 204 -.4066468556481471 +380 204 .24377274040289154 +385 204 -.2582670549488799 +388 204 .9098771820061333 +394 204 -2.2888504811788497 +403 204 1.3992406512147864 +407 204 .041731953105253974 +411 204 .5395813492884844 +419 204 -1.6301021189528626 +427 204 1.3269552558354576 +433 204 1.9867792522935475 +445 204 1.1120293683926974 +449 204 .839224390110346 +452 204 .1841128687915709 +468 204 -.2381804490473557 +474 204 -.6729924836706487 +477 204 1.956985128247924 +482 204 -.8635820107361001 +489 204 1.7499577656175458 +506 204 -2.4301648185032776 +525 204 .9510241618168136 +537 204 -1.8445004081756937 +565 204 .3270522447090232 +569 204 .6916642498109955 +587 204 2.0024282250989005 +616 204 -.9529164137499307 +617 204 -.33237375683976506 +628 204 -1.1817925579741195 +638 204 -1.8733526655860036 +641 204 .26281669713919137 +649 204 -1.2998962067303135 +652 204 -1.278720505920214 +654 204 1.7733212815802617 +665 204 .05496899125627945 +666 204 1.8183950827528765 +687 204 -.47527532738763145 +688 204 -1.2755180961524308 +704 204 -.418413966287117 +705 204 -.738374200650982 +723 204 1.4709465183102135 +729 204 .16121289761980404 +739 204 1.1531246735435443 +755 204 .26000523385927365 +762 204 -.3793634550008885 +788 204 2.873739968693022 +808 204 -.8634222643342588 +822 204 1.240355075745108 +826 204 -1.3161493407294147 +855 204 -.4834586345907821 +868 204 1.4764952350580531 +881 204 -.24871102297195008 +883 204 -.3103093249014478 +890 204 -1.2810280341951557 +893 204 -1.2706509896246112 +894 204 -1.734942445703302 +900 204 .7480578753000202 +912 204 .8539256442061102 +922 204 .635644699184084 +950 204 -.9888289723970679 +969 204 -.3873161338814845 +992 204 -.6195497381597255 +998 204 -1.8421890513491592 +3 205 .2286102492168744 +6 205 -1.171568194994344 +19 205 -.3779591286506071 +38 205 -1.5600053116464094 +51 205 -.19417754757457528 +52 205 -.36478608713034094 +53 205 .01882802170879405 +54 205 -.7660504631866089 +60 205 -.00914067860956988 +104 205 1.4530194652796853 +107 205 -.12095345564013997 +117 205 .9382055151614489 +139 205 .3639701168855968 +140 205 .20051517436323515 +147 205 1.2547711297783095 +153 205 -.13589019924963366 +159 205 1.680504950709809 +180 205 -.5408753378742679 +224 205 .3809472462454853 +226 205 .8149126400572327 +227 205 -.29425688753832085 +232 205 .5247061691292432 +234 205 .8355069064951405 +242 205 -.20166206776553128 +246 205 -.4251766517622709 +284 205 .40320322566042316 +294 205 1.3469072704913543 +296 205 -.7735369819680665 +324 205 1.3102302863499218 +342 205 -.4458455065631643 +348 205 -1.0949230068552107 +353 205 .3537483113620893 +354 205 -.252412809824703 +359 205 1.157715201731869 +366 205 .879505178234566 +380 205 .2768449013230301 +383 205 -.5385812718553381 +387 205 .503092298717428 +395 205 -2.094384175944937 +414 205 -.052581577887116454 +440 205 .9177024574485281 +441 205 .1988837518555964 +442 205 .5919440090939748 +452 205 .6676239748142347 +453 205 .055670583194973644 +464 205 1.4149291425152235 +472 205 .21501675109861823 +495 205 .785375672279774 +501 205 .5994057544753658 +507 205 .05926707154750676 +510 205 -.028054518959963165 +512 205 1.1988526051591066 +526 205 -.20869784247794945 +528 205 -.7780288810537178 +535 205 1.1132718253366385 +561 205 .1630616315530602 +565 205 -.6203344226120403 +569 205 .14782851872143357 +587 205 .5351790890555645 +592 205 -.39950867506501114 +597 205 1.2575594531101262 +599 205 1.205143991270027 +606 205 -1.0709875766543195 +609 205 -.6044234354496105 +616 205 .2945294650389919 +619 205 .1062413894764452 +624 205 -1.5509571857960085 +647 205 1.4215442398419107 +655 205 -.005763523835692452 +667 205 1.0216101398847428 +702 205 -.11105286729072665 +729 205 -.4230378309645192 +739 205 -1.4967227493594277 +742 205 -.4926452023928233 +744 205 .8188134523783486 +746 205 .12995087274940628 +754 205 .9293143946433828 +755 205 -1.352854133530408 +757 205 -.49373840650249406 +764 205 .4871962888530175 +770 205 .016909022081273692 +777 205 -.7815899515303244 +779 205 .3188708330683677 +786 205 .1340455076909472 +809 205 .03603141846704162 +813 205 -1.80621543192572 +817 205 -.678209321963105 +821 205 -.07291060724484193 +827 205 -.07101716534942396 +834 205 -.566146518559751 +846 205 .3608329369201469 +857 205 -.0029952269575820867 +869 205 -1.9036467788446867 +905 205 -2.872409263129624 +908 205 -1.1017949781228316 +930 205 .5170934603984316 +940 205 1.0975311723916459 +946 205 -1.4614188490549382 +948 205 1.076420586900292 +949 205 1.862704837000632 +977 205 1.7489124121957573 +982 205 -.45116018876948566 +987 205 -.369201862768744 +996 205 -.8469280957306006 +5 206 -.03077097131984166 +6 206 .3739998207276453 +10 206 -.30584146821741465 +38 206 1.0742317384199467 +41 206 -.3003571221561716 +48 206 .7090296271049155 +62 206 .08160912228390246 +64 206 -.9846108325376552 +78 206 -.02511071234559803 +85 206 -1.0168025932963358 +95 206 -.5333033900366493 +132 206 -.23397604998212804 +133 206 -.17457377418009362 +136 206 -.4857950043471684 +139 206 -.6105235924785413 +157 206 -1.4159372289443268 +186 206 .031394463245531884 +213 206 .5121986395998371 +214 206 -.10593753235488367 +220 206 -1.936854120325816 +228 206 -.5760351767699394 +229 206 .21263863692314713 +234 206 -.22890073125181148 +239 206 -.8872979845115851 +243 206 .6709518711017897 +264 206 -.003935711350871996 +265 206 -.7204916051950419 +270 206 -.5682694581030279 +280 206 -1.1874238885763417 +303 206 .3430222404996268 +306 206 -.6929416864784536 +307 206 -1.0980074065282053 +309 206 .1237744977395069 +317 206 -.716549741067841 +338 206 .7176474526461256 +349 206 -.15083700403907047 +354 206 -.151944405187084 +356 206 .17783771204813373 +378 206 -1.2641769858294496 +387 206 -.2125912253695695 +415 206 -1.077809190772565 +419 206 -.1788908902931995 +430 206 .38854269858927803 +438 206 -.6017949453714064 +454 206 .00998194648902442 +456 206 -1.4158646989590287 +457 206 -.8030670222673322 +461 206 .18098436744470864 +463 206 .5868572756666448 +475 206 -.3243879222019939 +488 206 .4605721820394196 +490 206 -.36481635435240295 +512 206 -1.4464552401997457 +519 206 -1.3437586443804177 +521 206 1.2654800981550585 +527 206 .327254004402415 +563 206 .26490742938946443 +587 206 .27898601620846175 +593 206 -1.0633962282593412 +604 206 .2234862901132363 +614 206 -1.3255424896235326 +623 206 -.8614958346361745 +637 206 1.5954193676642836 +647 206 -.18465172473379493 +649 206 -.04941223058861362 +655 206 -.45215317675700795 +677 206 -.5701102377634261 +684 206 -.20724379002373824 +686 206 .6117151450992152 +693 206 -.2503390989789423 +697 206 -.10765704393758528 +700 206 -.64564713111173 +714 206 -.8088705770076138 +726 206 .16091910543211804 +730 206 -.12355058977848504 +742 206 .20595197212740615 +757 206 -.47231544119382546 +763 206 .39153685421611273 +778 206 .6026511832443643 +779 206 .796888875342725 +782 206 -.21010405260190068 +784 206 1.4724101519537478 +800 206 .12855880020765914 +821 206 .39926335186209777 +827 206 -.3058064893467939 +843 206 .3177824674201991 +855 206 1.0066142399013234 +859 206 .3488509869443599 +863 206 -1.4520750153946862 +875 206 -.05127164052201334 +886 206 -.43610495887968237 +889 206 -.8340541280872171 +897 206 .4531086884270494 +900 206 -.07429488752682427 +902 206 -.32461983465878563 +942 206 -.20525977971037507 +952 206 -.04941388591380236 +955 206 .5867797599774112 +959 206 .7625231615268857 +962 206 .16588506133365014 +972 206 -1.090908589656419 +973 206 .29117034138160813 +974 206 -.2814490144920265 +977 206 -1.663903106666227 +982 206 .45263518979809153 +983 206 .3171578621807055 +989 206 .4945776812376517 +998 206 -1.5407567137188969 +7 207 1.3954402912703419 +8 207 -2.2243146981448945 +12 207 .02002980173088742 +14 207 -.9821516132940808 +42 207 -.2878254833878943 +50 207 -.5799980608157074 +66 207 -.12550741170441593 +71 207 -.955369105351819 +86 207 1.0216924037189894 +92 207 -.5679279070174883 +115 207 -.2946065254227747 +122 207 -.3008097968406447 +128 207 -1.061827334807758 +142 207 -.3377994676296274 +163 207 .010192116366416891 +165 207 .41067787800432853 +166 207 -.6215490614023861 +175 207 -1.56914964380057 +192 207 1.6487267655042976 +195 207 .5054770351021647 +217 207 -.9747972007926822 +241 207 .2926129191201422 +249 207 -.0662859484041415 +252 207 1.0473028192633713 +267 207 -.5172494714849529 +271 207 .372908471717012 +273 207 -1.080815754672445 +277 207 -2.293848931551035 +279 207 -1.7456297066202233 +283 207 -.3200100720514869 +289 207 .7388689082049489 +290 207 -.10370519710236019 +298 207 1.665243987356639 +301 207 1.3619521573045068 +305 207 .12406522421539953 +307 207 1.020885144132472 +311 207 1.1809942438451573 +322 207 1.1119810520567244 +339 207 -2.4669946410123096 +345 207 .008826087262976415 +347 207 1.6940742192890603 +356 207 -.3275759011933268 +401 207 -.161402170694031 +410 207 .2966291314231136 +434 207 .18266457631081967 +441 207 1.0855196719430598 +450 207 -1.0365940750206162 +461 207 1.2645738353354123 +464 207 -1.3548585088212992 +465 207 -.5666606793510436 +470 207 .2821098679441292 +487 207 1.3920360854607468 +490 207 -2.412819676782003 +524 207 .7369963410140888 +526 207 -1.1117874230722813 +534 207 -.19251613239892412 +536 207 -1.6715358409749903 +540 207 .38397297710789696 +541 207 -1.213594149913038 +561 207 1.1778618330751813 +568 207 -.6251865826905413 +571 207 1.85249473257128 +576 207 1.304053464513819 +581 207 -2.3594315043758574 +599 207 .367962074411165 +624 207 -.7766853945688696 +636 207 -.9842559563747655 +646 207 -1.189286606481216 +666 207 .6825288269411345 +667 207 -.851409278897441 +695 207 .9156593253427705 +703 207 -.8378195767711699 +709 207 -.446656945028526 +715 207 -.3536177433806486 +719 207 1.1472663478827718 +726 207 -.7518247042426881 +751 207 -1.3189268991024685 +755 207 -2.6566889311370496 +758 207 -.3219931102503373 +800 207 1.3277617461817757 +815 207 -1.7824814423207045 +818 207 1.1216617286790584 +826 207 -.8825223842723646 +847 207 -1.3953315674979605 +852 207 -1.1421895815320038 +863 207 -.5486899422196149 +869 207 -.956914526224275 +878 207 .037259988570514255 +890 207 -.5598591463367281 +893 207 1.7562297902427504 +905 207 -.26175499546208914 +908 207 -3.247769586521031 +914 207 -.11966976224693907 +919 207 -1.0798694668094075 +920 207 -3.00616060578152 +927 207 2.8946246554926645 +947 207 -.020415274282042088 +949 207 1.245747994365436 +952 207 -.5715347632887811 +958 207 -3.009474177191744 +964 207 -.677138349338769 +966 207 -.6104545802029903 +974 207 1.3788923102726043 +982 207 .494738490668335 +990 207 .9556436127569137 +998 207 1.4121184647254685 +8 208 -1.7124800941310923 +9 208 1.0196279160190231 +11 208 -2.2836912151854953 +13 208 .3850509368646791 +16 208 .8057374557398962 +25 208 -2.1367967611391903 +59 208 .9928213060378932 +63 208 -.005356206970163452 +64 208 -4.258710160313526 +85 208 1.0322330240266102 +98 208 .9047558204283326 +103 208 -.5211388778904679 +104 208 .03414698944022371 +112 208 -.91237119306262 +114 208 .3387567920458507 +143 208 -1.9646833661841734 +145 208 -.1430308265141197 +159 208 1.6110327137147469 +172 208 .5479273002962752 +186 208 -1.2287219335775152 +208 208 -.39419978126853844 +209 208 .8661553650516305 +211 208 -1.1521028802631412 +252 208 1.3890421230961216 +253 208 1.1498514981594559 +263 208 1.7864428922949596 +266 208 -.29224172333821874 +280 208 .3947001293994798 +322 208 -.12665552078414608 +346 208 -.13587286846916413 +348 208 -.5448882046496416 +363 208 .34992809065131925 +393 208 -.07077056873699102 +398 208 .4525180592442105 +422 208 1.5617024661841772 +425 208 -1.5494532009171065 +427 208 -.17755752483022388 +451 208 -.07061506403547943 +456 208 -.4943909600379063 +469 208 -.5935124400577401 +473 208 -1.8175021003331229 +485 208 .6359615643955343 +488 208 -1.1358674561403614 +490 208 -1.9744792505635012 +491 208 -.032716609103597485 +497 208 -.5270730918077897 +500 208 .5166639024652275 +501 208 1.5039451114900377 +505 208 -1.425984199931005 +534 208 -1.6278345874355835 +540 208 .49682878632424543 +541 208 -2.354324194269159 +552 208 -1.0077069693890175 +568 208 -2.9663728937975264 +575 208 2.4766325057658807 +582 208 .573273938461115 +596 208 .3501275272315752 +640 208 -.020456371892583175 +641 208 -.21501467066989827 +645 208 -.07135985796195765 +656 208 1.9895815950814475 +662 208 .8521124821919502 +668 208 -1.3182383105767872 +675 208 -.13199234134534155 +679 208 -.6024136226358145 +681 208 1.1571794085178555 +702 208 .26873050667035225 +720 208 -1.330255818000147 +721 208 -.1668105961654604 +754 208 -.48769669421927603 +800 208 1.0991168533616396 +806 208 .25508613378198064 +817 208 .23372010683862207 +822 208 .578410784317389 +824 208 .4385701924915159 +829 208 -.25941232161716676 +836 208 -.4106418694936985 +840 208 -.7718234146463263 +861 208 -1.8686780252210995 +864 208 1.4791560616713402 +869 208 1.1159280061597607 +912 208 -2.0692088830880317 +918 208 -.8885131045153132 +921 208 -.3633540210181523 +936 208 .7867382853614648 +941 208 .4943691021902381 +942 208 -.294535196889607 +943 208 -2.016229458663026 +956 208 -1.4958101101270278 +967 208 -.07087612097736487 +969 208 .8270445430727522 +972 208 -1.2420858465682911 +973 208 -2.3413732120789383 +975 208 .8144830418907372 +981 208 .2993730835926422 +997 208 .9893538740531838 +9 209 -1.212959164646872 +11 209 -1.1849736543643414 +12 209 -.2474285951895458 +19 209 .13577744597029653 +21 209 1.428111263628437 +27 209 -.8127146397743353 +30 209 -.3286796551075519 +31 209 -1.1604953717196804 +34 209 .4161561939029783 +55 209 -1.7243662174295125 +75 209 2.0334998033356673 +79 209 .10788271240205452 +83 209 -1.3566617671334564 +90 209 .2647301313562983 +97 209 1.856616479461517 +130 209 -1.3981708255061551 +131 209 -.7637188028074623 +152 209 -1.5422984842002054 +166 209 .3267009609900793 +168 209 -.7773286246518029 +171 209 1.1071772799672592 +174 209 -.7973624059003885 +183 209 .03148002617403276 +188 209 -.9468512497844863 +199 209 -.26280096084953536 +206 209 -1.7376224057981873 +215 209 .5253299151570376 +217 209 -.4315672236333627 +224 209 1.7813278562938142 +233 209 1.9484236401327306 +237 209 -.9795966482701256 +242 209 -.2701410532147392 +248 209 2.1296798493117937 +249 209 .08196599891140655 +250 209 -.8745071476226257 +258 209 -1.1767886915543457 +267 209 -1.5319298664171586 +277 209 -.03363515097516097 +289 209 -.1501621072459623 +324 209 2.5097228922031145 +335 209 1.5483507286677576 +348 209 -.5056173949546571 +356 209 .16317001484968294 +358 209 1.1270270508761757 +373 209 1.1822744514907573 +388 209 -1.0783813086250704 +403 209 .4463466349419799 +405 209 -.45859447036582324 +443 209 -1.80449349745255 +473 209 -1.336212655377155 +475 209 .48780986010852695 +476 209 .1920816132824463 +482 209 1.024700621656778 +496 209 -.7577424929378027 +536 209 -.9038472148954406 +547 209 1.431717112808136 +550 209 -1.404215467335633 +558 209 .2736778902658799 +583 209 -1.6287199407611619 +594 209 .6228108910829435 +604 209 -1.938152967722785 +615 209 .9142009293337473 +618 209 -.7138117164449931 +622 209 1.3808615729885096 +636 209 -1.2095699342757436 +650 209 .5007951052264327 +655 209 .20483647472071087 +665 209 2.2974707026784666 +668 209 2.2025363610067297 +680 209 -1.4959843680450393 +690 209 -1.9294523969407547 +694 209 1.886555592140935 +729 209 -.03934537785718312 +738 209 -.2794336108755846 +749 209 -1.4178740077530636 +750 209 -.40354328316877675 +755 209 -.23630529988891155 +763 209 -1.7131200193147065 +773 209 -.19635241457886213 +784 209 .7232193406908763 +789 209 1.0985080181529485 +802 209 .10955912559788372 +804 209 .1853806388453259 +805 209 1.6089473985750302 +813 209 -1.6262568567784432 +815 209 -.6449510110205464 +816 209 -.19870085680023475 +821 209 -.20667015613906586 +827 209 -.43544843666115174 +840 209 2.1304656582737196 +865 209 -.07771727744889687 +878 209 -1.3461808316548574 +883 209 -.5872449108700398 +888 209 -.11165589309385705 +889 209 .036881451053230305 +893 209 -.5402148263831332 +905 209 -2.7436926685075957 +906 209 -.31467820446950195 +924 209 .3194619825342529 +929 209 .8433335843740721 +954 209 -.9485290513971836 +973 209 .4997950556876826 +1000 209 .3515912223010261 +16 210 .26631831344903356 +18 210 -1.2288743538438207 +29 210 -1.2458685168620585 +30 210 .6884049469537493 +31 210 -.8638374819355105 +37 210 -.6875940326308871 +40 210 .24683455916818905 +51 210 .12371670366687895 +53 210 .41779983528914355 +65 210 -.23796591187224844 +70 210 -.3088911105530573 +82 210 -1.995964422112898 +104 210 .22363478401232484 +114 210 .5634464124653097 +120 210 .18631562952350172 +127 210 -.8801052005662745 +135 210 .5655916001899634 +148 210 .7678873946626438 +149 210 -2.5835945985679745 +163 210 .08063953278825944 +164 210 -1.1420378822589738 +165 210 1.1360567789789147 +172 210 -.37811029065886637 +180 210 -1.3788185596675997 +181 210 1.472521500468702 +201 210 .016765071185715363 +207 210 -.7494684691898065 +216 210 -.8428320185895573 +233 210 1.9116666274569238 +251 210 -1.076512340519531 +256 210 -.06059066653902839 +257 210 -.13020667447058104 +263 210 .5811080993742122 +269 210 -.3629860966261589 +293 210 .46881695133872725 +301 210 1.2017027300753085 +305 210 -.6875949974283367 +307 210 -.02835596677067638 +315 210 .6434351899151648 +334 210 -1.8007404702442857 +339 210 -.06518419873097625 +342 210 -.4614304717367691 +353 210 -.5930385535823942 +370 210 .4531342344170813 +400 210 .09481488072347882 +413 210 -.052699256536601666 +424 210 .3800750133384686 +428 210 .8126325642873848 +443 210 -.06304366353425384 +446 210 2.2027619548781456 +450 210 -1.6357572583854345 +478 210 .6052171393539184 +482 210 .5671788070070057 +489 210 .8909605178201679 +497 210 -1.5749067551888931 +498 210 -.13797113649022238 +500 210 -.27484860839993264 +508 210 .06695664300447246 +523 210 1.2990327966712982 +527 210 -2.1823871340086676 +533 210 .11351471690750226 +535 210 -.8776651424757768 +537 210 2.0947555692949154 +549 210 1.3130325858471834 +555 210 .5318128801735131 +579 210 1.0699239119866502 +593 210 -1.8701191646549484 +604 210 -1.601171208122439 +612 210 -1.3302360670034457 +616 210 .4434987169797325 +618 210 .15839265124829668 +629 210 -1.026534420940613 +643 210 .19686318282930496 +673 210 -1.299615277238685 +678 210 .819233981492768 +679 210 -1.0158025453349264 +687 210 .9117781355735822 +703 210 .6484316307563488 +711 210 .8271802005719714 +715 210 -.20440801629195762 +722 210 -1.4824461847720318 +726 210 .7512268577988798 +739 210 -.4902731383084694 +781 210 1.2077776896023997 +806 210 .06160780719774139 +811 210 .44333037332954195 +814 210 .7394044040961412 +815 210 -1.010638218086432 +819 210 -1.4914823771999575 +831 210 -1.2635479902706797 +842 210 -.16223933010979255 +849 210 .7315846912960937 +905 210 -1.1726503830236625 +907 210 -2.452718484503119 +970 210 -.25072751014199446 +974 210 .5858776409355652 +988 210 .5665078647474138 +1 211 -.9386773183123496 +12 211 1.804910432756427 +14 211 -1.5620563592397165 +15 211 .21953899532725377 +16 211 -.8496709884228906 +25 211 -2.411503593760664 +44 211 -.9583481942998939 +72 211 -.49160709312974094 +75 211 .3620427123903506 +89 211 2.182224320051477 +107 211 -2.6175311604826272 +114 211 1.0310732426698244 +122 211 .5058019291843404 +123 211 1.463197431978805 +136 211 1.3782097617971805 +139 211 .297569701020754 +172 211 .584582847393564 +181 211 -.18214693846984584 +201 211 -2.1877869283690403 +209 211 -.2946796018488718 +220 211 .19642392899297562 +230 211 -.7488205299664449 +251 211 1.4239940423199233 +256 211 .6842324256900545 +262 211 1.4555282282198112 +276 211 -.5826405258656558 +278 211 .9414110181611908 +282 211 .923839282206648 +285 211 .3769974516864437 +290 211 -.6861028201361573 +299 211 1.4180367111690748 +309 211 1.7013513815460177 +311 211 -.5363298248220557 +316 211 .4851243866169366 +326 211 -1.799610385709596 +333 211 -.18798547120835368 +352 211 .769900486961888 +368 211 1.1518123226424715 +369 211 -.9692929397683462 +384 211 1.7726767947991573 +385 211 1.313328086505617 +390 211 1.933512345883891 +412 211 -.629494991466419 +427 211 .0024455469524893164 +437 211 -.3252855511731136 +449 211 -.2795078689460875 +455 211 .13867891497677814 +458 211 -.29123326994983834 +466 211 -.9153921726356647 +505 211 -1.8143831292173402 +512 211 .7185252177074746 +521 211 1.1937393918047567 +530 211 -1.303337982818883 +547 211 -.05473762247589445 +562 211 -.006949091226487958 +563 211 -.011097880239526958 +570 211 1.5346288462318187 +601 211 .47195863286961753 +607 211 1.0876990212521749 +610 211 .7201369291511639 +645 211 -.10536906848678433 +658 211 .423623341515031 +683 211 -.7759054273642156 +696 211 -1.4630223320550293 +697 211 .3475351885430493 +719 211 -1.0733694220657226 +725 211 .7706674387978875 +730 211 .970683038441141 +738 211 .4838696362592377 +748 211 .9614011696119691 +765 211 -1.238201724029442 +768 211 .508308037145049 +786 211 .9153563973134864 +804 211 -1.0394595220304776 +807 211 1.1120940527014114 +824 211 .8160618604203598 +827 211 -1.0459788825931335 +831 211 1.613788409465092 +836 211 -.8463319726205282 +845 211 -1.4103536941501125 +848 211 -.2905548725194176 +849 211 -1.533133577667988 +851 211 1.46426718409089 +853 211 .14402697796146685 +854 211 -1.1803913156269135 +859 211 1.180163860694729 +869 211 .7833917291081525 +879 211 -1.4799707627856546 +881 211 -1.049410198888134 +885 211 -.5903451300408533 +887 211 -.36073528482443695 +892 211 -.23616002877441697 +905 211 1.5969791485529776 +906 211 2.02395906324048 +920 211 -.6104432282088863 +933 211 -.33322813564661485 +936 211 .6865857506228723 +946 211 -1.6866602315752137 +951 211 -1.200991314818644 +957 211 .6893749459706621 +960 211 .7371007834650508 +988 211 1.3382049610703786 +3 212 -1.1739390089590789 +5 212 -.8290644281603032 +17 212 -.7660728891665045 +53 212 -.2791124169067957 +56 212 1.842475522715343 +74 212 -.4574341327128394 +78 212 -.9518643198915315 +87 212 -1.239124922583021 +105 212 -.07191244660714718 +118 212 -.026375330955863502 +124 212 -.240676179223897 +125 212 -1.8447688511358356 +130 212 -2.4413528249704903 +132 212 -.4534160360926421 +142 212 -1.0589117715238696 +144 212 .09574777710303407 +149 212 -.09027216581525144 +153 212 -.04840028792588959 +154 212 .29008383555868805 +166 212 1.2977304933223737 +170 212 .23677232812279295 +171 212 2.2477674574764617 +173 212 -.8682589213209877 +181 212 1.3303224799180318 +185 212 .47452329876531485 +189 212 -1.6831358652536963 +191 212 -.257576274700619 +209 212 .3308976802992518 +212 212 .2506284883938816 +220 212 -.9071242321682662 +223 212 1.3419610208452026 +229 212 1.1009011676911924 +230 212 .5178124076307108 +253 212 .27354979609199653 +260 212 .5154509482201066 +269 212 -.8574509244876252 +301 212 -.4057135634706094 +307 212 -1.1038172527623404 +313 212 1.0391546448993447 +320 212 1.2244998313785325 +323 212 -.0829435417634291 +339 212 1.4999811520249822 +346 212 .8460655436296465 +349 212 -1.813406252816234 +357 212 -.06383488350729655 +367 212 -.34701862840002706 +375 212 1.1591362372677614 +401 212 -.24626360783039497 +410 212 .048069483397239654 +416 212 .015046222843834358 +429 212 -2.1942271827397843 +436 212 .0637246850426475 +443 212 .22649365844230648 +449 212 .24753348402353953 +467 212 .9104611418620173 +481 212 .25074107720954386 +482 212 .8514935631292155 +497 212 -.4495023691094898 +504 212 .38028631199448676 +506 212 -1.1931717080931388 +564 212 1.934697133636493 +573 212 1.1355551743539103 +577 212 .5423101987118719 +593 212 -.18333464373220082 +624 212 1.1304125677950512 +627 212 -.9284091943509907 +662 212 .5383179456437888 +667 212 -.25747884247482994 +672 212 .20957989497771967 +692 212 .23447508710545906 +718 212 -1.0009455576516784 +725 212 1.1667164256148657 +734 212 .45426677819921035 +747 212 -.8636747244968499 +749 212 -.5194724194819589 +761 212 1.2669235714886056 +764 212 .09549310735531388 +781 212 -.7605921876504519 +800 212 -.9445013037424063 +801 212 1.5685461852637324 +810 212 .930067459878088 +812 212 -.3496614550171877 +814 212 .1054721079759113 +815 212 1.5842817683044317 +826 212 -.8918619118644814 +831 212 .4332284788068956 +837 212 -.22046336228990937 +843 212 -.38910117831735763 +852 212 1.6500370769595047 +853 212 .7469800246774342 +864 212 -.227710033636951 +869 212 2.7554114779596617 +872 212 1.521967481533268 +886 212 -.6046291010620434 +888 212 1.3578920372183594 +893 212 -1.8443961521863828 +912 212 .27883559250171297 +913 212 -1.9150908384371308 +922 212 -1.8495754648834868 +926 212 .5587694457884441 +934 212 1.258392877067853 +946 212 .6263411162292349 +966 212 .4160980181367135 +967 212 -.05041446050416504 +986 212 .42104673163204787 +992 212 .48039171771012 +996 212 .45799063484334795 +15 213 .559442340455021 +50 213 .3892180610858844 +52 213 -.14823960339318779 +53 213 1.0061292394689947 +58 213 -2.532159446127099 +66 213 -1.2584196149479734 +75 213 1.8031087702085398 +92 213 .4081668113339966 +109 213 -.6764424747269392 +112 213 .5604405186917483 +114 213 .7212401682289541 +118 213 .605657608309878 +137 213 -1.2887691161475405 +145 213 -.39143746375119004 +157 213 -1.5445777289579201 +166 213 1.6230672957443901 +167 213 .23063920688325312 +172 213 -.6190899798930785 +199 213 -1.1540413006847228 +212 213 -.998893914654593 +213 213 .18004052713861546 +219 213 .37515927060571125 +237 213 .472520755640807 +238 213 .515436762557224 +254 213 .009344821701370933 +287 213 .30677012205487 +294 213 1.5487826143477472 +312 213 2.0357137916027224 +347 213 -.40949917047285417 +353 213 -.18311509525109948 +366 213 -1.4371765068944955 +372 213 -.2188960973200564 +378 213 -.011400918856975147 +380 213 -.6020505700835479 +401 213 1.350790239736491 +416 213 1.2759201208933102 +428 213 1.0520722394410766 +437 213 -.5795313915781619 +448 213 -.5925525701039172 +455 213 -.043801554080444366 +467 213 -.8195685807029984 +469 213 -.106470835941743 +480 213 -.5176601107984727 +484 213 -.3649128551046527 +490 213 1.2252500008302782 +512 213 -.18652703352897665 +515 213 -.20570255001124388 +516 213 .5552046213467506 +517 213 -.4438701887172934 +529 213 .026736417593404407 +546 213 -.7725287093348029 +580 213 .6786370314650533 +601 213 -1.6603297566744017 +614 213 -.14123809757594036 +623 213 .008410926735697962 +645 213 .8316003678776156 +649 213 .7430291915342665 +692 213 -.03275741340126529 +713 213 -1.0312652611488935 +729 213 .6696882369780595 +745 213 -1.6076016168347391 +753 213 -.17204254683956305 +759 213 -.18200734311014982 +761 213 .0469566313520908 +764 213 .023763395048624333 +779 213 .2401486628919168 +788 213 -2.3127878345515462 +792 213 1.0019292631844843 +808 213 -.028381948204442155 +830 213 -1.0981955057026063 +837 213 .3946039225914878 +855 213 .24301351532902404 +856 213 -.34584372776649713 +866 213 -1.3568950239793254 +873 213 -1.7673893208281788 +890 213 .4001110690335018 +894 213 .5073143996684903 +901 213 -.8843451518022112 +902 213 1.3158341633223953 +903 213 -1.2746467726785562 +915 213 -.041959222879837554 +917 213 .9201583612611013 +918 213 .5576951245687928 +922 213 -.1174198507834858 +932 213 .8717131454958309 +934 213 .12483354408480002 +952 213 2.498493355504575 +954 213 .34540016222579983 +975 213 .4836964741224189 +987 213 1.7206964343556108 +36 214 .3245064448907915 +46 214 -.45226154929810586 +105 214 -.04516208404997532 +106 214 .282890888453887 +110 214 2.1044351750788826 +124 214 -.36059048244656944 +140 214 1.656735154460599 +145 214 -1.1118926970444023 +146 214 .5938200708072727 +149 214 .34943659846672015 +158 214 -.10612940183395134 +161 214 .367170359867221 +192 214 -.5025173389931068 +194 214 .09682072212068606 +214 214 .20590983579231248 +224 214 .4920721821440891 +237 214 -.09417887080684947 +241 214 -.0026789930750781288 +259 214 -1.128630758774946 +274 214 .001751840217980933 +278 214 -.4143617937480808 +280 214 -.6993165650693604 +305 214 -.393609995757809 +306 214 .36019643584471656 +324 214 -.1494468073951452 +327 214 .4058618620235281 +352 214 .7145854562277493 +383 214 -.08709948891423126 +402 214 .2615145345195188 +403 214 .9639143331601927 +416 214 -.06729564313132966 +436 214 -.5387856831050196 +459 214 .20437036333962705 +465 214 .671842025977207 +469 214 .17728660328803655 +471 214 -.45271427806596704 +474 214 -1.0854108701593632 +515 214 -.6789882458158417 +523 214 1.6105769991426437 +528 214 -.6112255429034983 +530 214 -.9043998095878577 +531 214 -.1349467691595619 +534 214 .22742872924258756 +546 214 .0035775403294532465 +565 214 -1.6072199851085127 +583 214 .09319566430705165 +589 214 -.6811789092682623 +590 214 1.1524898871543445 +591 214 -.9442081472715892 +602 214 .18593166035355044 +613 214 -.6425383969317602 +615 214 .7758426950672945 +618 214 .015798549181501642 +623 214 -.6062796762538095 +631 214 .3957508066342794 +643 214 .6669124639295324 +651 214 .307000730965234 +653 214 .24036237903648722 +661 214 -.06533493041880956 +662 214 1.4334736698671091 +670 214 -.056606254052522655 +693 214 .3656329916978004 +706 214 -.42093585380505316 +739 214 .3720630520279433 +742 214 -.07476813090954845 +750 214 -.6024457449197702 +758 214 1.2111330313637327 +787 214 -.4281939390902522 +803 214 -.1335377850726759 +811 214 -.5058668574814063 +823 214 -1.2208390571979753 +841 214 .8236258652128903 +842 214 1.3009995484144314 +844 214 .029171631571819838 +889 214 -.12456689504559133 +893 214 -.32554478315581237 +899 214 -.5461402646271678 +902 214 -.48199883843415076 +904 214 .6136580264742438 +907 214 .8178334951425735 +912 214 -.4378461832690776 +918 214 -1.3304714621299278 +926 214 -.37868220815035936 +930 214 .45230694452827125 +932 214 .026755084863108486 +951 214 .7444780095265232 +956 214 -.4640432358394674 +957 214 -.2765208935362586 +959 214 -.05066599134428597 +977 214 -.8970222494386246 +996 214 1.3727539916622844 +3 215 -1.0909681116409327 +8 215 .6184792508076468 +10 215 1.570315815794084 +13 215 -1.3902756342284839 +18 215 2.2906985276657714 +31 215 .28682693743290866 +34 215 .9884897275136177 +35 215 -.14854998930461774 +50 215 -1.0691574879723882 +75 215 .03449665783589742 +84 215 -.17697695471345093 +96 215 1.4794587484790054 +100 215 -.45466598981309575 +115 215 .4536262880559511 +148 215 -.20536196574352833 +150 215 1.7747570040592655 +162 215 -1.6473649540368949 +166 215 1.0879368508452487 +191 215 -.6140196284324256 +202 215 1.1981047460969512 +203 215 -.004896318144400591 +208 215 .6855447445827401 +214 215 -.8990508002232519 +230 215 1.0796037486052805 +242 215 1.5348742852641561 +257 215 -1.680715252273412 +259 215 .5831675307466307 +272 215 -1.498788105473027 +273 215 .33680214312515544 +278 215 -1.220169028182703 +279 215 .736132198390701 +300 215 -.235386557814964 +305 215 .995624153978616 +317 215 1.5965249022695414 +327 215 .237925908572444 +338 215 .6870951654036966 +346 215 .142227006590534 +352 215 -1.210779690639311 +360 215 1.1248393616859527 +365 215 .2178903457551618 +369 215 -.7343044635851097 +416 215 .5621580819397864 +420 215 .5091665013192537 +429 215 -.38830946263302074 +432 215 -.6992623105236069 +439 215 -.6707086898643861 +444 215 -.2569091218492363 +448 215 .02245589820767959 +455 215 1.4654466521654743 +459 215 .2180406025032175 +481 215 -.6905954434731039 +492 215 -.5457551779645722 +493 215 -.8320970051800683 +519 215 .7011734955587238 +536 215 -.6648925576953744 +538 215 -.33184566661860404 +549 215 -1.1035534445352637 +580 215 -.6159830180837123 +603 215 .9647667692669093 +619 215 -1.4558736091852833 +621 215 -.45600214457817695 +630 215 -.4867590361589097 +633 215 -1.4121800211583773 +662 215 -1.8819774452539428 +665 215 .5820472607215446 +675 215 .35678633920439984 +682 215 1.0537302391463308 +706 215 -1.2592274110542174 +746 215 -.35032123648895924 +747 215 -.18706548001263198 +752 215 .23211042593392162 +758 215 -.7616075714564879 +768 215 .4700399013800948 +771 215 .5498691108619386 +778 215 .4048217194898192 +785 215 -.6435311187065527 +789 215 .04284755232213311 +792 215 -.30220614197104056 +798 215 -.4873947987216497 +807 215 -1.4550640264484047 +826 215 .9397190406200663 +829 215 2.013065683656857 +849 215 .7405291401918187 +859 215 -1.1189035994208132 +876 215 -1.7205011301892752 +888 215 -.5297756193067107 +889 215 .061968491457677355 +896 215 -.6695475776456005 +901 215 -1.506344948348446 +912 215 2.972576546180833 +930 215 .5280714502944555 +931 215 .5131821157357453 +934 215 -1.1438172673489253 +940 215 -.678788807306232 +947 215 -2.951230043532229 +957 215 -2.248411109140229 +960 215 .4881327994398631 +964 215 1.9832536168304984 +975 215 .24798032559356825 +980 215 1.0846117602492014 +990 215 .866317414557819 +995 215 -1.6978916271181377 +6 216 .0526662349247431 +8 216 .6504713723940428 +13 216 .25071777953719043 +30 216 .266482535110961 +52 216 1.0810725796259124 +59 216 1.6712599351043869 +65 216 .1889167683732545 +66 216 .2383282455659102 +73 216 -.692814984076829 +82 216 -.08695693038680323 +84 216 .6434445029840445 +90 216 .19371534228950021 +94 216 -.6476535608529262 +107 216 -.650145242235287 +109 216 1.4187213328407304 +113 216 -.7956904114119765 +133 216 .387228444333698 +139 216 1.0616752947520214 +147 216 -.027265916462856234 +159 216 -.1686542511050504 +164 216 .3476877320546291 +174 216 .09547162805496177 +183 216 .8541486473001909 +191 216 -.26517421960934245 +201 216 -.4921460796629354 +210 216 .7781582700156008 +212 216 .6284939238346469 +215 216 .6762016505431514 +229 216 -.18433331118411814 +252 216 -.8926552084723172 +262 216 -.43779076260369665 +268 216 .1016014930699878 +269 216 .2581975597600613 +278 216 -.8075319549536941 +280 216 .8044421082264013 +294 216 .9192419679372459 +307 216 .4632281846007421 +308 216 1.9713130193355375 +329 216 -1.482338535444779 +341 216 -.06097987690570268 +350 216 -.6459126076812628 +351 216 -1.5918238171890153 +357 216 .07410077467817047 +371 216 .4522353692301336 +378 216 .7186363856747799 +383 216 .3932934626201305 +391 216 .058149648747884 +398 216 -.3937392100803364 +399 216 -.8548852603356609 +447 216 -.18577873608404527 +462 216 .23151817305714437 +466 216 -.9013459205523363 +473 216 -.029842805100506957 +485 216 .4117346960250269 +492 216 .43442880589064103 +530 216 .1389947368823034 +580 216 -.10420033448464132 +588 216 .2380001732898946 +589 216 .08956899246715591 +591 216 .8404655069692817 +592 216 -1.4331204230620134 +633 216 -.4648152763135758 +658 216 .6475370553321772 +680 216 .44557845200060076 +689 216 -1.0362162840177451 +702 216 .11688675737382917 +731 216 -.6553523347340395 +733 216 .6792710382304098 +739 216 -.6343718320753752 +741 216 .1427258671372932 +756 216 .30412330807276916 +782 216 -.4827157635661794 +792 216 -.25385386892585493 +794 216 .6793180561649484 +807 216 .3014640353376309 +808 216 -.18003856330737894 +831 216 -.12624879031636005 +836 216 .20188296491472385 +840 216 1.2737870856606592 +861 216 .34710020429435995 +899 216 -.40539214795251516 +906 216 .3963878286782729 +910 216 .7213708037267018 +920 216 -.16794368546833113 +937 216 -.7692338983510207 +969 216 -.47474028696140586 +993 216 -1.0894008906486714 +1000 216 .9728137107350383 +10 217 1.2883953286637833 +24 217 -.5936933246158256 +82 217 .4555208131650459 +92 217 -.5053527696575028 +100 217 -.6999644947624601 +109 217 .594613510859964 +112 217 -1.0234701615552733 +120 217 .08066852110551123 +145 217 .36449211652553526 +146 217 1.1131671002179653 +156 217 .8474226478484841 +179 217 .8687542371444011 +196 217 .1612200469279303 +202 217 .08897654821936495 +217 217 -.3639948484074808 +230 217 .7990469880472556 +235 217 .5734484006659317 +237 217 -.13787869980844678 +254 217 .09038900207314518 +257 217 .4099925849200745 +281 217 -.5052167360292698 +284 217 .1859662692296184 +301 217 -.7104380108303477 +311 217 -.6532450206090601 +312 217 -.02685793895571849 +323 217 .21496069557836547 +324 217 -.9368838746709416 +348 217 -.39839184069644556 +360 217 .9026906519179145 +364 217 .716328688823614 +376 217 .411206656231644 +384 217 -.3234935448260803 +398 217 .11667074799094444 +404 217 -.8149926565951295 +439 217 -1.1841490799313468 +440 217 .33619830151509095 +444 217 .11361462514927487 +447 217 -.7607943304419679 +455 217 1.6311897337085175 +460 217 -.2354405740768498 +474 217 .48528536530872923 +489 217 -.37382659267972856 +498 217 .1400553878633261 +502 217 .5870359512838308 +506 217 .16811635367542405 +512 217 .7593576515498733 +520 217 -1.4304935658503148 +528 217 .3266274311860921 +534 217 -.02265356682929988 +535 217 -.23072193996871027 +539 217 -.34830970775624287 +559 217 -.1959000120467348 +570 217 .1888613465319689 +572 217 .45908027566541587 +574 217 .5718079046181175 +576 217 .08758169134473284 +579 217 -.5758132921372547 +607 217 -.5869142871337749 +633 217 .1466740310981524 +644 217 -.2886701778062255 +646 217 1.0433375280954154 +649 217 -.2511222800601907 +655 217 1.144981387942831 +683 217 -.5656984089764573 +701 217 -.43383439896276443 +703 217 -.227875501810148 +745 217 .2572312835500418 +758 217 -.7811869172249175 +761 217 .5772092128583252 +765 217 -1.0768951436734897 +769 217 -.7098899149629762 +781 217 -.721944310568889 +783 217 .28351449192460065 +785 217 .43058048651831976 +807 217 -.13060172000890496 +821 217 -.2575614586047798 +834 217 -.08080319930398916 +874 217 .6255361430067778 +899 217 .7901493983245984 +902 217 -.46102408204206646 +913 217 -.19308783669958218 +936 217 -.340536053216156 +951 217 -.38484982363242587 +952 217 .3241572746171968 +953 217 .29327357900616985 +957 217 .09819757841408552 +964 217 .10418109615266759 +969 217 .09172393094863156 +970 217 -.0006653545852774445 +973 217 -.5784757472911803 +975 217 -.2989599893755356 +992 217 .14546673887671568 +997 217 .6370473998693122 +998 217 .5541935980955851 +5 218 -1.589217628399352 +10 218 -.04577142022815914 +11 218 -2.4573645487612223 +23 218 -1.0184723219722378 +27 218 -1.706046231331556 +29 218 .17910122548411492 +38 218 .2696145668737196 +47 218 .5300849399656891 +69 218 .7359702395983067 +78 218 -1.0740078732993013 +91 218 .3516896056864347 +105 218 .2141914005693636 +109 218 -2.152509980482689 +117 218 2.127948290168529 +140 218 .5266112840962532 +141 218 1.478415344328222 +155 218 -1.4771472418512483 +162 218 1.193784358705342 +171 218 -.10744397495499056 +177 218 1.1689748410359382 +191 218 .29758658504728347 +192 218 -.695935774180314 +220 218 -.5689086068769718 +228 218 -1.7990259733666827 +235 218 .4032855834732223 +256 218 -2.8283672257194064 +292 218 -.27625546326163114 +310 218 -1.044328003652238 +318 218 1.4469266142102493 +328 218 .412428129876044 +329 218 -.20553502812710198 +345 218 -.5523305327322702 +350 218 1.076170664056641 +355 218 -.9919970511228975 +357 218 -1.20397159960488 +360 218 -.44757738001602154 +367 218 .2988697694518426 +370 218 .07875088914858006 +379 218 -1.0792825691602164 +381 218 -.0705812767756194 +391 218 .8009697210495657 +405 218 .8905554896448602 +409 218 -1.330298693778231 +419 218 .2312750481676621 +423 218 -.7875831790216407 +432 218 .5753371833774387 +436 218 -.06611383311886086 +453 218 -.038464248467733234 +491 218 .47409959520613076 +506 218 -.2404123625598673 +508 218 -.37985860164607643 +510 218 -.6496106269184002 +525 218 2.3618807174274585 +534 218 -.6637891034840344 +545 218 2.1665626219899035 +550 218 -.0890823675939764 +575 218 1.9347330390570832 +586 218 -.7047417547925987 +608 218 -.97960635315397 +620 218 .0641608357737496 +631 218 .679315642321465 +644 218 -.6778421194091655 +649 218 .38046727074403247 +657 218 -.41206018611922207 +685 218 .5009300912714048 +696 218 -1.0236821238343836 +716 218 1.9171908493976715 +717 218 1.4440708245864917 +718 218 .12002714769569695 +755 218 -1.0145454772457585 +771 218 .9270614140372868 +780 218 .7069401517485762 +786 218 .7384209895307562 +794 218 .942780457609992 +805 218 .9250208268305495 +808 218 1.4164133218575299 +809 218 -.2629420616344899 +822 218 .017169036846665084 +851 218 1.656929913661219 +854 218 -.4663685110301551 +856 218 -1.5173590460849022 +864 218 .8803192055434256 +878 218 .23633396620996305 +879 218 -1.1130197897472485 +883 218 -.381713020185115 +888 218 .9459456583244633 +898 218 1.3732146797414881 +900 218 .854305868669008 +903 218 -2.3231680268760058 +929 218 1.160151037266016 +931 218 -1.084722920670209 +938 218 -.25245668829160045 +947 218 2.8470050177044843 +956 218 -.4187056389024676 +973 218 -.3099626855235765 +981 218 .5601053715811791 +991 218 -.6234738074680881 +998 218 -.31181148345239107 +4 219 -.48221082381192926 +26 219 1.2294329327787628 +36 219 .4343019559876491 +54 219 .18269577934288622 +94 219 .9105787204993767 +125 219 -1.3453844384505294 +129 219 -2.4444198499770877 +139 219 -.8549556918085185 +142 219 -.24136918061181345 +162 219 1.0100477157961212 +193 219 1.0222723228889017 +196 219 .3936060993472441 +206 219 .6836746472283795 +231 219 .45748862604740603 +232 219 .5086961007054264 +245 219 -.40584955534606226 +258 219 .5464475262425522 +259 219 -.6579848041610585 +260 219 .6751337329478141 +269 219 1.520983106987387 +287 219 -.9943029232590599 +293 219 -.47165100477460403 +294 219 -1.5584142984576335 +306 219 -.36388297495811794 +318 219 -1.0921781511458222 +325 219 .5411758618334209 +330 219 -1.49834892905137 +331 219 .16749855986784165 +339 219 .18284299839252594 +345 219 -.8689938966928803 +351 219 -.8257081629759069 +355 219 -1.7706873460891828 +368 219 -.2730362504342595 +375 219 .2837453329799371 +390 219 .10834468587630997 +396 219 -.5800570495731289 +404 219 -1.6431048277575862 +414 219 .5948767942162774 +418 219 2.465647247276908 +427 219 -1.9002832312383326 +449 219 .7482672741507558 +472 219 .41862156373391574 +476 219 1.5206515240988279 +495 219 .2374988858100473 +502 219 2.0609707482355506 +506 219 -.4361407878993289 +540 219 -.010141547607805279 +544 219 -.743922623505405 +553 219 .5240173464857419 +562 219 -.2993319919070221 +566 219 .7165759662193892 +573 219 -1.4856021459203956 +581 219 -.8595009144935944 +594 219 -.8817225952177776 +607 219 -1.251932652641786 +609 219 1.401356935984572 +611 219 1.3408875951478483 +613 219 1.3441782726146012 +620 219 .43790938248981454 +622 219 -1.202430646505121 +628 219 -.30335011759669706 +643 219 1.2012645844751202 +646 219 1.1047214595663397 +662 219 -.2057017478748991 +679 219 1.7200866080136148 +700 219 -.41445968908888714 +718 219 .05816697596542343 +722 219 .9857418882984236 +739 219 1.2437566088180627 +750 219 -.8905518647826802 +776 219 1.0779150176036603 +780 219 .9458301393971251 +788 219 .5430328189534365 +789 219 .2718414396847511 +805 219 -.5062094729543308 +811 219 -.5297125709606201 +812 219 -.254544738930461 +826 219 -1.1705028048324604 +832 219 -.46144522617789285 +847 219 .4148756466751925 +848 219 -.6996564000841654 +850 219 .9559845947493356 +880 219 .45908875912050434 +883 219 .26311100263725906 +887 219 -1.5302302516698485 +893 219 .806812457612653 +894 219 1.6724366602053093 +901 219 .8161669424674355 +939 219 -.26585182650653366 +940 219 -.2615435459297356 +943 219 -2.004871222741278 +945 219 -.38744379120036243 +951 219 -.9831063561269328 +954 219 .09076495596944928 +958 219 -.0703179323686579 +979 219 .050024145157834383 +981 219 -.14143227326016372 +992 219 -.7153425875093705 +4 220 .15008194226463534 +14 220 -.3395888338744764 +15 220 -2.0682895498624845 +20 220 .20381517153072068 +21 220 .8969498969190041 +31 220 .25171672092971714 +34 220 -.12988101669985605 +40 220 -1.8394804897824109 +44 220 .7282754846666855 +58 220 1.1541939790796696 +88 220 -.43603341457770345 +101 220 1.2360830027595182 +113 220 -.36761852645841864 +114 220 1.0830005485240735 +119 220 -2.73412651262025 +121 220 -.3617303379307379 +156 220 -.05800595463148134 +163 220 -.37306029272446223 +170 220 -.13971006590771726 +177 220 .2274853525215645 +192 220 -.8843264853825283 +193 220 .6204040375854477 +200 220 .16138342808782047 +210 220 1.7455476632800284 +214 220 -.6048669737293572 +228 220 -.3073964944505184 +231 220 -.4439814039434121 +248 220 1.2696953938081839 +297 220 1.6339768976564013 +308 220 .5440770858295232 +314 220 -.021877017511033648 +325 220 -1.828689923721 +335 220 .9016331496836199 +336 220 -1.6493391253294456 +337 220 -.18597162779844206 +350 220 .15064947816329022 +354 220 -.6781460419985569 +365 220 .28291826432597056 +373 220 2.1007386240836374 +386 220 -1.3572620051906892 +391 220 -.20779616710500237 +392 220 1.2298003587425095 +396 220 -2.012834415167059 +401 220 -.9189848485208797 +407 220 -2.467885374614844 +415 220 .008935737385359618 +419 220 -.5616656094192669 +430 220 .19865161691195288 +431 220 -1.2299433492307892 +444 220 2.263556817139302 +451 220 .6216985328901419 +458 220 .7339816514461537 +469 220 -.14766471451283594 +475 220 .06651845196541623 +483 220 .13818676653084744 +489 220 .6843261080466403 +493 220 3.304679556657507 +522 220 .08096812217462168 +525 220 1.6689220042240263 +532 220 .9824770385159085 +534 220 -.9498053205043032 +541 220 -1.167556871410352 +570 220 2.5972166796667406 +572 220 1.664457153379854 +577 220 -.2221891394999906 +580 220 -.11038181407222444 +583 220 -1.0846751189591122 +584 220 .5438189648288414 +610 220 1.2891215021176006 +619 220 -.10969273035793224 +622 220 1.7888232854970143 +645 220 2.325118831847647 +647 220 1.2956892901164359 +656 220 -1.2364630540946824 +670 220 .7714066675066363 +676 220 2.1150249010391318 +678 220 .8453687923633832 +680 220 -1.2966308411260399 +703 220 .4720645857423136 +707 220 1.5712323447304044 +709 220 -.5203819008993725 +721 220 -.943552498588962 +722 220 2.2068781657639427 +728 220 2.06024980646568 +734 220 .6134366772668643 +757 220 .33559055479757766 +763 220 -1.3968180821663112 +768 220 -.6399408860489392 +786 220 -.005465372808313523 +792 220 -.2666393141332558 +802 220 -.28660248493473733 +815 220 .7365059488024593 +819 220 1.6350447168822804 +823 220 -2.0096749626486097 +834 220 -.5130189793290342 +836 220 -.100657243437553 +841 220 .7467863312105854 +845 220 -1.2565392166205755 +849 220 -.9842890473516005 +852 220 .6459738435933141 +876 220 .9864884269497799 +883 220 -.9630634925610906 +889 220 .781719301381693 +906 220 .8835615384878386 +923 220 1.664695975309473 +929 220 .18325239536196916 +933 220 1.688548072353577 +935 220 1.1633088844815038 +946 220 -1.8070009388691834 +955 220 -1.3577700361346188 +962 220 .9636956484670507 +965 220 -.7596086373292423 +979 220 .7797717126257708 +980 220 1.3031688401662511 +982 220 -1.3794992254934595 +986 220 -2.464455483913699 +991 220 -.25010731274811715 +1000 220 -.7583878001904627 +3 221 1.3213798356244153 +4 221 -.41416024203454427 +24 221 -.10194669288070643 +25 221 .9993702518624085 +35 221 -1.111025960650518 +36 221 -.5541689669048223 +40 221 -1.302605833235126 +45 221 2.6703805423997733 +56 221 .9131821068806696 +64 221 2.0258103301302772 +85 221 1.783757581714333 +86 221 -.9046558210139158 +91 221 .2112686223073012 +100 221 -.6035231593587649 +108 221 -2.4848456498523457 +110 221 -.49240136318788663 +113 221 -.8056178217817382 +116 221 -.3288694376695406 +119 221 1.6155045902459557 +125 221 .5993617277086852 +129 221 1.3415353207144751 +155 221 1.7420827928248104 +160 221 -2.0949307569871105 +178 221 .6585731199567997 +181 221 -1.062772735419305 +200 221 .23470411868079005 +221 221 -2.077126828068837 +255 221 -1.3321543155757092 +270 221 -.3545283880875633 +293 221 .00022056280983143162 +324 221 .4725352891100071 +325 221 -.5965646095147257 +331 221 -.06573011958357497 +340 221 .6918327362386256 +351 221 -.8766978753746483 +353 221 -.5872349298916004 +400 221 .7231596789135529 +405 221 -1.184503875936661 +414 221 .27383211552475 +419 221 -.18461863234588471 +432 221 -.4645362646017079 +433 221 .29574521344686244 +442 221 .47000543532632066 +452 221 .24660782643744733 +455 221 .2454068404526135 +463 221 -.5987768079784418 +467 221 -.2857689295760197 +493 221 .1464565352457117 +503 221 2.3438663988474877 +516 221 -2.014870482554607 +524 221 1.6738811487140994 +551 221 2.271631099913911 +558 221 -.0726825653183732 +561 221 2.623267506101641 +576 221 2.2664663397447526 +578 221 -.1651219283863651 +580 221 .3776876158034764 +584 221 -1.255416827256356 +625 221 -1.8392658851649242 +632 221 .661132799246352 +635 221 -1.4820702937346666 +637 221 .7026607089509913 +674 221 .17668333792170687 +687 221 .9707936483452988 +705 221 -.5903003078739864 +709 221 -1.4198198985875377 +714 221 -.3598144333225302 +722 221 -1.5242974801653868 +734 221 .3060415444731551 +737 221 -1.1785723738058649 +738 221 1.0313446289613162 +739 221 .044548332999150925 +754 221 1.3378933349761764 +757 221 1.920655884196384 +759 221 -1.2304541439675447 +762 221 -1.0126688936268011 +782 221 -.9055273322225209 +786 221 -.9355231893931544 +796 221 -.8006417604221914 +801 221 -1.3978083018404168 +806 221 .06383301369519909 +840 221 .7069119421237924 +841 221 3.4085071265425664 +844 221 2.044211498534933 +861 221 2.2196697085565282 +870 221 -.1805182148278731 +883 221 1.3386009030829276 +896 221 -1.0579275726393005 +901 221 -2.112650615244778 +940 221 -.6366473587963466 +945 221 -.9236195512583221 +954 221 -1.1405316342989575 +956 221 .01949938745942814 +964 221 .2721254749895099 +977 221 .7433338534392464 +984 221 -.8407635924613487 +989 221 -.7079737377347174 +1000 221 .7462951129437899 +5 222 1.0574122623725133 +39 222 1.3160708091137359 +51 222 .6037066113144809 +82 222 .8007280337870413 +94 222 -.9125123580514691 +95 222 .4100336617755727 +104 222 -2.033357187879057 +122 222 -.16333354526946914 +125 222 .599336183556014 +153 222 -1.5738586494176947 +171 222 .76315758199828 +175 222 .33501121278073215 +180 222 .9657436026557397 +192 222 -.6476655085348875 +193 222 2.2404681450052775 +206 222 .8629130730473212 +222 222 -.955266215091344 +228 222 .09364911657380214 +242 222 .3878347428131308 +244 222 -3.0415377880129286 +257 222 -1.4523067368659184 +280 222 .3404079876535957 +283 222 .8238044073902191 +286 222 1.1997659465117292 +296 222 .4321253649669662 +304 222 .24580780415212689 +311 222 1.772051640401547 +347 222 .650732825803443 +354 222 -1.032613005650356 +355 222 -1.957150605658967 +360 222 -.9579482802911155 +369 222 -.8951863854081065 +402 222 .08436057055972572 +407 222 .6815499686005844 +410 222 -.024921676756120524 +419 222 1.3393997215527769 +461 222 1.781571397796254 +464 222 -1.0456419974523141 +469 222 .2904787776153567 +470 222 1.3372693460095926 +474 222 .26455908265537376 +478 222 .9703185331974942 +488 222 .12229294695902634 +493 222 -.32495120697622165 +494 222 1.5523602088461765 +505 222 .8223106077143536 +529 222 .6129907504760408 +560 222 -.4897403833187884 +562 222 1.6338784526294337 +568 222 -1.4009180482935206 +577 222 1.4972903218853322 +580 222 .11411617858513706 +588 222 .06075310377581769 +592 222 -1.026669917487415 +594 222 1.005767274040703 +604 222 1.1097020506470687 +616 222 1.217598320414304 +632 222 1.4171366248635755 +635 222 -.4729496348224342 +656 222 .8946475064698016 +658 222 .8749421822407949 +663 222 .39002697057590374 +665 222 .6036093880083361 +668 222 -1.0064884445971398 +681 222 -.05275048208204977 +710 222 .8881857819772925 +713 222 -1.1718549596288887 +715 222 .7155059836463992 +733 222 1.299025191621686 +746 222 .024010804703497618 +764 222 .2960511022336059 +770 222 -.45207986805355943 +771 222 -.19305169095216934 +778 222 .39407111436070186 +782 222 .2957633614736482 +789 222 .6611183786468782 +790 222 -.5910224634264941 +795 222 .5217139765983315 +803 222 -.411497777991813 +808 222 .5106087257930049 +816 222 .13130332124051153 +817 222 .536985076816897 +820 222 -.14378362230434238 +826 222 -1.1688817384128751 +840 222 .18448476002717443 +844 222 -2.475049278295837 +853 222 -.10821747549405311 +855 222 1.7561850345591954 +869 222 1.5743599439291809 +873 222 .16689264897692743 +874 222 .7409759204849015 +882 222 -1.6400499164365403 +906 222 -.26012842773793304 +953 222 .9737087176700336 +956 222 -.8636971164891744 +957 222 -1.2334871667599945 +958 222 .8122315110849061 +960 222 .18761776929795043 +975 222 .4083070048944424 +977 222 -.5245375840324317 +996 222 .22770007703438577 +998 222 1.2064652834619296 +1 223 -.062386810221234976 +4 223 .5239028512038172 +12 223 -.18458992280278258 +21 223 .17570730344866634 +29 223 -.5027677086231339 +35 223 -.0939136144804287 +39 223 -.8750573150213564 +41 223 -1.0548233129119668 +56 223 .5033276860117888 +66 223 -1.5195576224354048 +71 223 .4458836523581172 +73 223 1.2104097112795178 +77 223 1.0913950855587435 +79 223 .4399703150774758 +102 223 .9444955689786256 +119 223 1.937669024065871 +130 223 -1.8160927596650702 +131 223 .49962738803061896 +138 223 1.9306370561211184 +142 223 .610460514269227 +167 223 .8617732578958182 +179 223 -1.117980526088239 +190 223 -.45945030661031677 +208 223 .8329491256595751 +210 223 -.9994755136282051 +218 223 -1.8000687745578647 +221 223 2.8093306950046535 +222 223 -1.066156515317996 +228 223 -1.2428771682213753 +245 223 1.4039783153427947 +256 223 -1.6379783994498267 +262 223 -.5522376764387654 +279 223 .8676881136413686 +281 223 1.483280711872039 +282 223 .2722547688835063 +290 223 .47272883756217227 +293 223 .6924281591823348 +299 223 -.8713787788253938 +319 223 .005373456331137597 +329 223 -1.5723832534399058 +330 223 1.085390374919882 +356 223 .49626977029898334 +370 223 .8336895962076766 +380 223 -.7852486887665163 +392 223 -1.4059098253431 +394 223 .8234355831237687 +396 223 1.6343196350992462 +397 223 1.5652899072680246 +405 223 1.4489565248147491 +415 223 .24674607219050876 +420 223 -1.5755408970687517 +435 223 1.146857887602381 +442 223 -1.4653896051405684 +449 223 -1.55886992892539 +450 223 -2.928295046964252 +473 223 1.3726218982956668 +494 223 -.22476518771690984 +497 223 .23163660531753996 +501 223 .3199630769214218 +524 223 .06158510602377197 +542 223 1.3555399638567789 +549 223 .3935575841698732 +556 223 .3417617554867977 +561 223 -.9300606418940197 +565 223 1.754119700669389 +581 223 1.2563091085545297 +583 223 -.0004228442972542684 +600 223 1.1557832278329383 +613 223 1.0601740965078872 +614 223 .9292199554431703 +647 223 -.4363859931857451 +648 223 .5608416257377145 +654 223 -.5779822503649432 +655 223 -1.1089757410220096 +688 223 -.09427212367037685 +702 223 .36961344903448345 +707 223 .25339532865988645 +715 223 2.3723866827945725 +742 223 -.8912813164504485 +744 223 1.0140143322854351 +750 223 -.6122397286993114 +764 223 -.528405189369024 +780 223 -.15868684373345743 +784 223 -1.059587081279381 +798 223 1.8535250883411354 +803 223 -1.304640235142205 +808 223 .3385875793429815 +813 223 1.6260826698212347 +825 223 -.7992450412459621 +836 223 -.3214609840596939 +838 223 -1.2383824475565546 +860 223 -.01109573425706159 +861 223 2.4110985435538828 +932 223 -.5638357725388506 +943 223 1.0475771259045805 +951 223 .7266184007210504 +969 223 -1.90224884952463 +984 223 2.0279779970909653 +990 223 -1.8094971056491844 +993 223 .9155629909919286 +998 223 -1.280166553336326 +28 224 .13396916196031255 +32 224 -.8781496345236567 +56 224 -.16695085628965847 +70 224 -.13524550967365986 +74 224 2.2445825924464518 +91 224 .03738559786567937 +94 224 -.5427167983766992 +99 224 1.0718716560944324 +112 224 -.7347219918589499 +113 224 -.0725455147636965 +120 224 -.08516326268236818 +127 224 2.244491096537843 +136 224 -2.84306182473634 +141 224 -1.1252861231551328 +153 224 -.5790295243906586 +182 224 -.026399560088656515 +194 224 1.4503078807607679 +221 224 .07571269258548348 +231 224 .90026016142613 +234 224 1.3475752496093023 +249 224 -1.5588301196269645 +254 224 -.9397306545313425 +255 224 -.8626578355160128 +256 224 -.5136788656891863 +292 224 -1.4245210747460348 +296 224 .5219821728227748 +303 224 .00567015821540319 +316 224 -.8781144361482988 +339 224 -.17300562387714433 +346 224 .18652039035591272 +353 224 -1.1710051297635284 +367 224 -.7703190115849459 +375 224 -.7375285780902434 +378 224 .985599021993823 +381 224 -1.409039249976503 +386 224 -.28465487994082617 +388 224 1.3083399093414307 +390 224 .07919977765986448 +392 224 -.44480468502387266 +401 224 -.5887494277926291 +404 224 -1.4110321971424173 +420 224 -.5207020794968974 +430 224 -.8797929653410622 +433 224 -.3312236414452949 +442 224 -.6252479045633762 +459 224 1.3891594326753138 +469 224 .2184535765813041 +472 224 .13320488189780672 +517 224 -.07290547885015064 +518 224 -.6821159634875943 +519 224 -.7226715892148692 +522 224 -.47919399520799794 +557 224 .3311107295862018 +560 224 -.02976582876083989 +571 224 .5968523279733273 +584 224 -.6662250657225194 +594 224 -.6062871635895826 +596 224 .5209410511487665 +604 224 1.8615565919435848 +607 224 -.3642640559105432 +623 224 .9911706463755954 +631 224 1.58105630345702 +652 224 -.3934355704255993 +676 224 -.22289543646268808 +710 224 .9713070594752504 +712 224 -1.105890710986505 +719 224 1.446536155651393 +729 224 .2774209380282915 +732 224 1.2702770802435785 +775 224 .6110128842210717 +778 224 .8872518659217346 +786 224 -1.185003474047933 +788 224 -.25961122872976233 +796 224 .9209453890814052 +828 224 .6757255224593289 +853 224 -.8263970868404358 +863 224 .8743904658587683 +878 224 -.08948389123555307 +892 224 1.037396016271754 +906 224 .37612900069242416 +908 224 -.6492555849872311 +911 224 .3098763382874322 +930 224 .6485136648332979 +932 224 .07234707059491619 +934 224 -.9018527919786992 +935 224 -.26531779687213236 +978 224 .4682662075411281 +3 225 .5196200789834267 +12 225 1.39759062694362 +28 225 -1.36297645839045 +33 225 -.2559615648321372 +48 225 -.36967407154408116 +52 225 -.15986284428822592 +53 225 -1.0788991685372116 +58 225 1.5728396076912499 +67 225 -.37657414245442977 +69 225 -.07568822547195643 +91 225 -.35752729304918623 +92 225 .36212496992707244 +94 225 .2249989490208823 +104 225 -.06037715263841186 +115 225 -.5966120943023885 +121 225 -.7595532840357905 +133 225 .628902647723266 +152 225 -1.952853279259203 +165 225 -1.0021752178993848 +175 225 -1.2012720408207198 +176 225 -.6824764479077391 +180 225 -1.2117913476980253 +189 225 -.7022480951679745 +194 225 1.3353658261323424 +218 225 .7813701908777366 +224 225 -.42232263921191154 +247 225 -.618877336981969 +252 225 .2542365657701148 +266 225 .3240642041897758 +274 225 -.35824895879168145 +275 225 .9568942567665014 +282 225 .7757853232025925 +289 225 .2520747568389243 +297 225 .20709887399976745 +304 225 .8214437617267566 +307 225 -.04369718602177847 +314 225 -.017239241958269202 +316 225 .31032292329413014 +320 225 1.2856047275878428 +324 225 -1.4147708146489486 +344 225 -.33467092420706884 +351 225 -.8725906373513086 +371 225 -.3269075499841335 +376 225 -.5734750358705502 +379 225 -.13961513476264198 +383 225 .9074238561042864 +385 225 .08177764543630653 +396 225 -1.4259705523383106 +400 225 -.5443589286650311 +418 225 .4339192818049886 +420 225 .3390447371615409 +421 225 -1.430433917334926 +423 225 -1.0778994416780212 +430 225 .4318293578498906 +452 225 -.6176241786650479 +455 225 -.7966245816440309 +463 225 1.188265730694923 +478 225 1.2256729144929799 +494 225 .48600327778940616 +504 225 -.7281220564007369 +513 225 .43920330189471835 +530 225 -1.1230661859730047 +543 225 .054504685982568885 +560 225 1.1077116752374876 +563 225 -.12345650839605359 +570 225 .9535720061917745 +588 225 -.07885806864952849 +603 225 -1.1154579948864567 +613 225 -.44199704878312374 +620 225 -.7663207911048456 +628 225 -.9617483368871299 +629 225 -.1663833926532164 +634 225 -2.6425909623937036 +637 225 2.0801263262418916 +642 225 -1.4807685810957696 +648 225 .5596097312044818 +653 225 .3076271377562708 +657 225 -1.0156178067015813 +672 225 -.022454504408680465 +682 225 -.2135214168227234 +687 225 -.3957650721210667 +695 225 .731310445322566 +730 225 1.0082637736375266 +736 225 -.2240975531286056 +749 225 .5572319310121525 +752 225 .6327612753885511 +764 225 .23186381118361993 +765 225 -1.0551893750546175 +766 225 .905567748278316 +767 225 -.09910559089528917 +779 225 1.0190117270770014 +780 225 -.12562420126485124 +793 225 1.130660714952373 +807 225 .1645564749220697 +811 225 -1.4821629786091586 +817 225 1.2892947474927625 +829 225 -.9511654206814747 +854 225 .5820307933259297 +855 225 -.578836288008936 +865 225 -.537721228232255 +866 225 1.5854375273323298 +876 225 1.5827650098002155 +886 225 1.3138640551610008 +901 225 1.1973255402906964 +931 225 .8141387142794762 +934 225 -.20902096735862863 +942 225 .23539181568968068 +961 225 -.8442539925775815 +964 225 -.18963603311110713 +984 225 -.7965948882451432 +989 225 1.1157131153781377 +6 226 -1.107777569449089 +15 226 -1.9714633637159538 +30 226 1.0387431610202946 +43 226 -2.7987059695482226 +44 226 .4185789985289045 +56 226 -.7986250674178782 +62 226 .4269839591849588 +81 226 1.6452300076242914 +100 226 -1.0819428159582816 +105 226 -.941024737744887 +107 226 -.30406232790555227 +109 226 -.5119190818158555 +111 226 -.4084330220821449 +124 226 .5361518560764496 +126 226 .3388602865701777 +141 226 -.4473514091033234 +144 226 -.029454782764483455 +172 226 .8555368480847798 +180 226 -.21502051489370239 +207 226 1.1799629275913208 +209 226 -.678570215313754 +217 226 1.8357799659703486 +233 226 .9288047422526641 +244 226 .897714463297439 +248 226 1.3594305958789252 +260 226 -.31948468695303883 +261 226 -1.001154311711236 +263 226 .3295159659185104 +275 226 1.1416150127952829 +288 226 -.1499153862993918 +291 226 -.7422330318373801 +317 226 1.421736758194407 +321 226 1.3356681422935592 +322 226 -.5570995765279587 +334 226 -.40694566880035976 +378 226 -.2260087064644361 +389 226 -.3924837743862517 +441 226 -.5152397149956216 +444 226 -.44429614934755063 +455 226 -.1435425918359625 +461 226 .49419558249026296 +465 226 -.8901378625523015 +489 226 .824147061107503 +518 226 -.056061035953801686 +526 226 -.9121207571678523 +539 226 -.05480701266271504 +549 226 .8261786186996749 +603 226 1.82826152092372 +605 226 -2.370616552550591 +606 226 -1.5141465354751127 +615 226 .38742426985326783 +622 226 .07235172416926466 +625 226 .4973241857820907 +631 226 -.7912807504204366 +655 226 .13225560556549976 +657 226 .30813846242017484 +691 226 -.5886091812077987 +698 226 -.5500619592780338 +701 226 1.80957207239681 +713 226 .4807012109907619 +723 226 .35648938351046533 +773 226 -.10737145719200797 +778 226 -1.515521708487918 +815 226 .8635281823511775 +816 226 1.4872642010846993 +818 226 -.9266226613460219 +833 226 -.3501524715294444 +839 226 -.07325495583644481 +868 226 .703234628384312 +874 226 -.8687698583152067 +879 226 -.2424990205330745 +885 226 .8935201980065597 +886 226 .1800957034374539 +900 226 .7858146955038485 +909 226 .7407516980647075 +917 226 -.7290907257664617 +919 226 .07933579848087269 +931 226 -.2014207937351068 +936 226 -.5062918575763555 +949 226 -.32295412071265056 +971 226 .3277290312094526 +975 226 -.6667440075227297 +976 226 -.9890046617247539 +983 226 -.20578022625548556 +987 226 1.1056392696069128 +11 227 .3299752934657544 +16 227 -.5232013978505532 +20 227 .9355992257473129 +23 227 .43731508078573644 +25 227 -.9527015525137561 +31 227 .11687041751614266 +54 227 -2.0451541482774545 +56 227 -.687130824715121 +77 227 -1.5654423304266918 +82 227 .8896591867485865 +90 227 .2477137772694819 +91 227 -.4278988646914476 +94 227 -.711350045052543 +102 227 -1.634990097525539 +103 227 .4242006789702686 +120 227 -1.0123821211522082 +131 227 -.6089356107284403 +145 227 -.09734409955167284 +158 227 -.7284984159547483 +170 227 .02930217621524353 +172 227 -.3465508632824477 +179 227 .7232651579790297 +187 227 -.23007137512028072 +194 227 -.6670255578316429 +222 227 1.302133799885203 +228 227 .611426856537871 +263 227 .08159998955173803 +264 227 -.13946472878813365 +268 227 .6438145468133387 +274 227 -2.080688561022615 +285 227 1.0959367530103337 +304 227 1.0640181019204993 +305 227 -.43096211590042544 +309 227 -.5515287742414772 +321 227 -.8797460236168543 +346 227 -1.0603417071623504 +353 227 1.1112453502792425 +364 227 1.1826333018806698 +367 227 -.38213275339200564 +369 227 -.09510509817729347 +371 227 -1.128555189676851 +387 227 .21066702950186397 +399 227 -1.3271790018009508 +400 227 .02132183478757399 +408 227 .31993324826174013 +433 227 1.5183150209778717 +434 227 .41352333934362295 +464 227 .0949911352143139 +470 227 -.16576316130862734 +476 227 -.5054677760827665 +489 227 -.6044684711743386 +512 227 .050326215608059895 +519 227 -1.2282762977174162 +534 227 -1.5656844813047894 +559 227 1.5303875011229244 +575 227 .44163579319881724 +580 227 -.41577696448373647 +606 227 .22049195849047198 +614 227 -.08585780266856965 +637 227 -.19152148590513926 +642 227 .05851823679450821 +650 227 .213276610783272 +656 227 1.3988257617265314 +659 227 -.2736860243225411 +671 227 .6586108460871306 +672 227 -.132231221167591 +675 227 .22842469202193805 +688 227 -1.934233935875977 +704 227 -.787020655432335 +712 227 -1.3394714432212862 +725 227 .2621105055505638 +732 227 -1.6985690145066958 +744 227 -.5393473796218072 +745 227 1.0696353443520783 +763 227 .8408138169623747 +779 227 .046720199443826174 +801 227 -.08709432013298604 +811 227 -.7154887279496962 +830 227 .37736447997249245 +841 227 -.8361192777795333 +844 227 -.5762690788143453 +847 227 1.7279770363993563 +855 227 -1.2272438899104352 +870 227 .3936098942595022 +884 227 -.9825437773267754 +899 227 1.0363734381260576 +902 227 .2623354605338334 +908 227 -2.0484375201716696 +915 227 -.49658718450554934 +916 227 1.074972433427837 +981 227 -.2797106049949045 +999 227 -1.4782615288646037 +23 228 1.1117457280942378 +29 228 .9515336784205843 +33 228 1.0887181600247946 +44 228 .2988325622280754 +58 228 -.04154722217722502 +60 228 .5811923293537224 +73 228 -.5347530240318925 +75 228 -1.5118537411255129 +79 228 -.41400901985545946 +86 228 1.1708110975114945 +91 228 -.33051815247920713 +95 228 .7280617201396955 +96 228 -1.5372250442888347 +117 228 -.78383083562254 +134 228 -.0688698727694733 +136 228 -1.2155787631391368 +140 228 1.157958654755344 +146 228 1.5721525498846014 +157 228 .632798333231596 +171 228 2.0922664217396005 +182 228 -.7650239057894723 +187 228 .1846647171097452 +188 228 -1.1715791710007135 +189 228 1.5308401812377799 +191 228 -.3771641765545545 +197 228 .5348554477903414 +211 228 -.782778284628303 +237 228 -1.133380987410444 +243 228 -.22210326680724146 +252 228 1.016350388765643 +253 228 1.3318726661399665 +263 228 .5444346309974966 +264 228 -.9563019059805845 +266 228 -.7312625575565218 +288 228 -.553651777125961 +295 228 1.3108762374275327 +296 228 1.748077701459395 +297 228 -.6787596573953151 +311 228 -.4087511609302287 +321 228 -.06922571715050857 +328 228 .9426902458860826 +333 228 2.113211229304851 +381 228 -1.2932577567650625 +398 228 .604574577856915 +421 228 -.20973947644601612 +424 228 -.72760647512297 +427 228 -.7848438902712581 +429 228 -.19413350123398665 +439 228 .5838317053211235 +482 228 1.2328376557653233 +505 228 -1.8501468989413914 +513 228 .06461238307677045 +519 228 -1.6712017949832765 +522 228 -.9346791654347048 +538 228 1.3840779302701003 +540 228 .4266577467930689 +601 228 .16035432347248624 +606 228 .10098471096556055 +618 228 .10213844882582059 +643 228 1.1443677071195033 +656 228 .9711580970295961 +659 228 -1.597823920125562 +691 228 -.31478197086404547 +694 228 -.5763609588887753 +695 228 -.028101205250929358 +696 228 .1360970777547641 +707 228 -.4633710776878602 +708 228 1.3652984333211133 +716 228 .16928277056344498 +720 228 -.8171183954377041 +733 228 .1388044960548808 +780 228 1.4881475607366375 +783 228 .2652661597745486 +793 228 -.7585290207808674 +796 228 1.615338095571326 +797 228 -.07563825654049644 +804 228 .1944620828125932 +833 228 -.18675866375652875 +838 228 -1.2173026319523286 +849 228 .06289103816552334 +856 228 -.8044424603930329 +874 228 1.6110896325069808 +877 228 -.42090666058457415 +891 228 -1.2232477416052239 +904 228 -.6392118237480218 +913 228 .8899552191812787 +929 228 1.1249177183013384 +933 228 1.2546043499565234 +934 228 .8815243317818235 +942 228 -.038526882384843586 +945 228 .12056104570839132 +957 228 1.3362304001423013 +968 228 -.12537442033889543 +975 228 .5277592512766405 +980 228 -.038138670292620684 +997 228 1.7038835746674095 +998 228 .5111761588336722 +2 229 -1.486185912230946 +6 229 .7538543080509228 +13 229 .0773788110132055 +23 229 .24954184411603345 +33 229 -.6058779030314937 +63 229 -.20725853689751375 +71 229 -.6371285820243441 +75 229 -.44707448174821773 +80 229 .20481839972146254 +84 229 .010157251710398829 +114 229 1.761506035126998 +123 229 .9557685877665456 +127 229 .44751244043493144 +141 229 -.49553572134509494 +154 229 -.30223973739012916 +171 229 1.7321086365018896 +173 229 .8988419697452562 +217 229 -1.9877525574651802 +221 229 -.548992630343849 +234 229 -.4947390810347648 +236 229 .383688441070546 +246 229 -1.6326273209352489 +291 229 .8551474174180798 +294 229 .13401831509040418 +317 229 -.9645126353021855 +324 229 -.3759650613112516 +331 229 -.5741148537263134 +336 229 -.3327546974905394 +347 229 -.9009431060550311 +353 229 -.7852756919716352 +381 229 -.8639730214334687 +387 229 .8013121131700719 +401 229 1.4586725950236863 +409 229 -.3781378332543033 +452 229 -1.669189791772241 +470 229 -1.72368738357111 +503 229 1.4263295225721078 +536 229 1.2630056851607123 +544 229 -1.169914540516517 +562 229 -.419935537515074 +564 229 .4697569957594133 +587 229 .11845830222194907 +596 229 -.08168239139115363 +602 229 -.43241288634473174 +606 229 .32246912378564246 +650 229 -.6522744879489045 +653 229 -.5398969450191207 +661 229 -2.063931861739651 +663 229 -.31099995278950016 +675 229 -1.6033741835960662 +686 229 .6020009690591851 +688 229 .8587695945039341 +705 229 -.8293976645916534 +715 229 .029408474325679612 +732 229 1.8821802204411364 +737 229 -.6194631689317932 +746 229 .17327816168643842 +749 229 -1.0313849724230053 +783 229 .8032641572871023 +791 229 -.13923087237503587 +804 229 -.6611065447960419 +834 229 .20207232755375004 +865 229 -.38780202265798547 +869 229 .6750747303356227 +882 229 -.16504775263229182 +888 229 -1.0779455367927036 +894 229 -.8676224493796759 +895 229 -1.059149001007229 +913 229 -.26077347057149314 +914 229 1.1959322809160715 +917 229 .5600151401645432 +924 229 1.568613980815931 +940 229 .1639975944747053 +941 229 .20108616571531032 +947 229 -2.2277914214231216 +950 229 .4279167159270679 +952 229 -.853087383938316 +962 229 -1.3603783451954983 +984 229 -.26725023620988914 +986 229 1.248153953298216 +15 230 .006423650850464098 +22 230 -.9448643356335303 +84 230 .5393953345046579 +91 230 .44419557601937093 +111 230 .8472343769451193 +115 230 -.3297644739290073 +117 230 .31262279756471667 +120 230 .9044867018738929 +121 230 -.5091416225271983 +136 230 .20212170411010386 +137 230 -.9244759138474977 +142 230 -.024201497413637682 +143 230 -1.032989809432976 +153 230 -.15435632964195445 +157 230 -.9560456200580124 +161 230 -.30827613937998083 +171 230 .9126461959222311 +176 230 -.5322054592076781 +189 230 -.8144736538755031 +195 230 .014807760016191433 +201 230 .9289536284749559 +206 230 -.20585892239459766 +207 230 .8277266260619051 +211 230 -1.0175334958914812 +223 230 -.025609847548613146 +224 230 -.044277903261360635 +238 230 .16326812407538455 +240 230 -.48703623134623236 +251 230 .38994823157309916 +252 230 .4722118828596376 +258 230 .7909187828781371 +271 230 -.7026871055840596 +283 230 -.09926505200116877 +285 230 .8418945108092019 +288 230 -.26864241124506494 +290 230 -.08155258315502792 +291 230 -.3891521430361752 +302 230 -.14793152171268645 +311 230 .858573346813285 +315 230 .8958851454294562 +341 230 -.25302574931079636 +343 230 -.9814057633037938 +345 230 .42333262673936645 +358 230 .4375108914603668 +380 230 -.718597672350631 +394 230 -1.062897016532439 +397 230 .2144442220732376 +401 230 -1.0209083532273389 +416 230 -.9642360528396682 +432 230 -.25773397719742985 +436 230 .2705139808830025 +439 230 -.08191013464086447 +452 230 .7676630033982638 +467 230 -.365325783727353 +487 230 .9037148581988749 +508 230 -1.1160097237822537 +538 230 .8935334009053844 +544 230 .8171542008476765 +550 230 .9665795679197406 +559 230 .8584117234629198 +567 230 .7460336406634546 +572 230 .8994274203058245 +584 230 .1596519387056299 +591 230 .4476029910414807 +597 230 1.1257129510143462 +603 230 -.7823151642938907 +621 230 -.14986349960097373 +622 230 .6988064041379989 +629 230 -.3005137627262272 +630 230 .8030355232273195 +668 230 .5804795074325593 +670 230 .8974337476140989 +709 230 -.2943811981005858 +711 230 .6583969285335165 +724 230 -.41414381669343625 +735 230 .44740351272767254 +738 230 .45149282516860645 +741 230 -.9554686586982809 +745 230 1.484836935999965 +749 230 .06357686355092595 +758 230 1.2349024048399893 +762 230 -.6921175956456598 +798 230 -.20406078225004565 +802 230 .04868956068532633 +808 230 .08894510815344715 +839 230 .547603811087217 +841 230 .9742045704154872 +842 230 -.7135623376618042 +846 230 .23803763037705677 +869 230 -.5482772791559465 +883 230 .5870070014215834 +890 230 -.1120933227029568 +891 230 -.9215681476413077 +939 230 -.3364959184996897 +941 230 -.7031897262676199 +943 230 -.20370823495514595 +949 230 -.5733432403116435 +958 230 -.37244208885185737 +971 230 .687253024839502 +973 230 -.3082541759758319 +982 230 -.15070657692456246 +988 230 1.125071056534464 +2 231 1.1887572061514755 +17 231 .14522744925982375 +18 231 -.09593514934486265 +23 231 .007563540982042032 +33 231 .07841505128003903 +38 231 .6743178577793307 +54 231 1.153760584316079 +58 231 .6059518626576708 +59 231 .6132206197641598 +92 231 .8942594185742127 +100 231 .7404208524590771 +168 231 -.5181961972493839 +174 231 .0690623511536687 +180 231 -.3158162175845419 +184 231 .8329701571945597 +185 231 -.36570915833599094 +186 231 .6533007619220247 +190 231 1.008088592032812 +203 231 -.1672586136756649 +210 231 -1.08564408266802 +221 231 .8049635131805082 +223 231 -.10479307389524328 +225 231 -1.1476804548075445 +277 231 -.40711095640793293 +289 231 .5089427135919529 +296 231 -.348749383110725 +328 231 -.11601189801821207 +329 231 -.3681376194747855 +357 231 .28036012434682167 +359 231 .5456378262319083 +363 231 -1.435501180966983 +378 231 .00282656900386752 +392 231 -.2960745378507611 +400 231 -.14500665393169446 +402 231 .7970640130517151 +443 231 .8149233901525494 +448 231 .7630474950681806 +449 231 -1.4179875484843696 +456 231 .21410682331768363 +462 231 -.005462841610494318 +466 231 .673498621841126 +473 231 -.14416907519019018 +503 231 -1.0854596029792511 +506 231 .04544116922001948 +522 231 -.616644883593158 +528 231 1.1664439783349483 +542 231 .6079584208733039 +547 231 .7375402494945206 +557 231 .6708054082608446 +576 231 -.4355578425325813 +584 231 .9250437988613498 +585 231 .4467603746267806 +595 231 -1.172347684648958 +598 231 -.3010457439743987 +606 231 .814312786688671 +609 231 -.7094414444594005 +640 231 .47749534996191334 +683 231 .4098651556438838 +685 231 .9110668191714498 +689 231 .8254583464688425 +696 231 .46992085200840006 +703 231 -.1407452810207048 +706 231 .6931740837737369 +741 231 .4744789108032558 +745 231 1.007668975462175 +746 231 .38453063964408707 +755 231 -.6267802364876314 +758 231 1.0870739913517296 +769 231 .6661010094853682 +782 231 .03836608542774145 +787 231 -.9118299386437883 +796 231 -.23421325398890752 +798 231 .748763658107604 +800 231 -.07703389175028738 +802 231 .0364180413335031 +807 231 .15902927369210224 +811 231 -.8320255646278105 +821 231 .8156320525478377 +822 231 .8584586701454683 +846 231 -.4317483669231893 +855 231 -.025177827579044673 +881 231 -1.306337195185523 +888 231 1.568328550960721 +906 231 -1.0853646428743262 +913 231 -.4907871567314589 +919 231 -.5665679260343661 +930 231 .17068739284900156 +931 231 .2665080638771536 +940 231 .1669809113047029 +962 231 -.20417503612780985 +968 231 .17159475955404963 +973 231 -.2733562462115967 +975 231 .19566808299251431 +978 231 -.5043455755558786 +980 231 .39127720591208026 +983 231 -.12056310399139739 +987 231 -.021373503001759123 +994 231 .3143430075335775 +1000 231 -.5572311579720954 +12 232 1.0002189621717394 +45 232 .3291992350263812 +49 232 .6720006641692142 +61 232 1.1136935337467553 +73 232 1.0739360746665414 +78 232 -1.576384076451296 +81 232 .4006042845120934 +95 232 -.7097214084518558 +96 232 .03652674708103973 +118 232 1.6767680633103197 +126 232 -.5251545557201869 +135 232 -.07640443407102013 +137 232 -.4149409046822064 +147 232 2.403850826377252 +157 232 .3526018416885546 +160 232 2.091176640974358 +173 232 .11503133393620929 +174 232 -1.2437096043416123 +175 232 -.6329256388982065 +194 232 -1.5173218224531007 +213 232 1.0009595788120047 +218 232 .34460391563386955 +221 232 -.9759605073974429 +235 232 -1.0306846531919271 +237 232 -2.079377835474043 +255 232 .6272660550605269 +258 232 -.5625812625787331 +263 232 1.763097234084011 +281 232 -3.0556017286051733 +289 232 -.2945931952148628 +313 232 1.077954939329547 +322 232 .21847684088832814 +330 232 -.0528884167640664 +338 232 1.0858966121701528 +352 232 2.60127525255869 +353 232 1.605710779125419 +357 232 .0970750896782141 +366 232 1.0950372907230934 +382 232 -.3222752104108294 +387 232 1.3665359405508497 +418 232 -2.0617797861143337 +419 232 -2.0149490438400344 +420 232 .9596190797260319 +430 232 2.2799044275672844 +436 232 .9303711730836703 +463 232 .7585775591229067 +472 232 -.07437067285360811 +487 232 -1.3104437269187517 +493 232 2.2355340293341714 +541 232 -1.1719107638812385 +556 232 -1.424625223232523 +582 232 -.14974241873763455 +585 232 -.5435567029103252 +588 232 -.42369133846921136 +598 232 -.9725682306275982 +611 232 .6021348792909582 +617 232 -1.9687555329461728 +621 232 -1.1891664147625793 +624 232 -2.372240921047783 +631 232 -1.0342361210447906 +651 232 1.283902162868859 +652 232 -.3118161522429136 +670 232 .15627395496821098 +675 232 -.31160257075059433 +685 232 -.7195602431136441 +686 232 1.0257426628890414 +696 232 .21856140840081675 +698 232 -.7514201991558533 +707 232 1.3055368094460886 +721 232 .5332597618314209 +724 232 .4288638022341689 +727 232 -.0772540795754878 +729 232 -.17846041258779574 +739 232 -1.1304709912409279 +754 232 .5867039336463489 +756 232 -1.048911627754746 +792 232 .06002006231822159 +798 232 1.0649605450432336 +802 232 .2031901593665712 +839 232 .2908636988194092 +843 232 .39653356262962886 +845 232 -1.1377335511169189 +848 232 .5423191309586101 +865 232 .15230555421928282 +866 232 1.1090577641292476 +900 232 1.2378753009288839 +911 232 -.4305205478808895 +915 232 -.016163204748329343 +918 232 -1.1164658774742122 +922 232 -.32388417801196684 +930 232 -.33307039469426303 +948 232 1.372693585060997 +965 232 -1.3710027137469358 +970 232 1.4590079215037395 +988 232 1.86739812549418 +994 232 -1.0864647727627106 +998 232 -2.0912911122841353 +7 233 -1.4081474494016168 +10 233 1.4404934258370214 +13 233 -.4595757673971006 +22 233 -1.221586447722046 +28 233 .8499488261720215 +40 233 -1.6244521636654496 +51 233 -.8897353558492833 +60 233 -1.2097127346099736 +107 233 1.2692908515877954 +109 233 1.9288915478468454 +110 233 -1.2702524800584987 +117 233 -.9713771500625896 +128 233 .45079478845933435 +131 233 -.19772621450732633 +140 233 .20563881286431354 +144 233 .7633171688557161 +157 233 .520512017159349 +159 233 2.1221823311438195 +171 233 2.3310319120876803 +173 233 .9009426992534788 +207 233 1.671109109485948 +223 233 .06990971165611762 +224 233 1.3991189182068462 +236 233 -1.375346477836999 +237 233 -1.7416731657234465 +248 233 .7183769109941919 +264 233 -1.5963760434525827 +275 233 1.6245509235967435 +283 233 .34508020836453046 +284 233 -.27865272021209625 +290 233 -.47014964552333804 +295 233 .6194104876502002 +315 233 1.4851824016517101 +341 233 -.2445233497609002 +351 233 -.2569824583966211 +367 233 1.1821057450710208 +375 233 -.8083519219545529 +403 233 -.6163584562343061 +407 233 .10184672924561589 +411 233 -1.1561571795701417 +412 233 .21338995162677665 +419 233 -1.2882783077916529 +420 233 2.27413862335648 +422 233 .8440275272776774 +427 233 .1810928588568757 +433 233 .07981897049550782 +434 233 .34308073418819074 +440 233 1.6497887498957684 +471 233 2.140770440174114 +476 233 .19499380061770571 +487 233 2.5820367725845914 +489 233 .7296516430557669 +503 233 2.7831893846839413 +505 233 -1.0371600223309168 +508 233 -1.047826474250666 +510 233 1.2067895424306312 +513 233 1.0366482275282525 +532 233 -.08136167038081282 +540 233 -.2802897493059433 +545 233 -.2883839626370835 +560 233 1.1824023570561553 +563 233 -1.2761969234129764 +567 233 .4401464990193973 +570 233 .4133324286853318 +577 233 -1.1789995715926238 +609 233 -.310460263340249 +612 233 1.3595220786044213 +621 233 .5496481985185805 +622 233 1.567823348306485 +631 233 -.35136803359088103 +659 233 -.40207156225646407 +672 233 .10820955395630272 +685 233 -.5674596791262341 +689 233 -.836070745505624 +697 233 .49924089041900366 +701 233 .8303627520324501 +705 233 .38631340935880315 +726 233 -1.8852257452936456 +733 233 .8613665101572988 +753 233 -.10600727212098672 +795 233 -.15988976442477576 +805 233 -1.3249253706085868 +814 233 -1.2684765817648576 +825 233 1.6416310371610845 +828 233 -1.9149318423648638 +836 233 1.0818144198494086 +837 233 1.3202837431134244 +847 233 -.4176049126217577 +860 233 .3175919053179577 +869 233 -2.692373156322253 +872 233 -1.963685923314235 +886 233 1.3410922218062908 +898 233 .14366111649577495 +935 233 3.1180313130187503 +959 233 -.35870018123703873 +962 233 -.9044887023871424 +968 233 1.2059157113265628 +995 233 .34757104916960135 +12 234 .7357227242270208 +13 234 .43524107661053724 +21 234 1.3867039296260673 +37 234 .08454676842426981 +40 234 1.1709741807095466 +78 234 -.660297688479426 +94 234 -.18085870499145895 +95 234 .01625222928635872 +103 234 .12192023837035423 +114 234 1.2498408380833148 +127 234 -.3191063956602557 +133 234 1.4071274408463095 +139 234 .23692438865794113 +148 234 .2404374621822969 +153 234 -.3377934825243556 +162 234 1.0011127657864398 +175 234 1.4624287984223705 +179 234 -.2883000833212357 +180 234 .960452630172749 +192 234 -.398399466706885 +205 234 -.270280963845746 +232 234 .8475835711788803 +239 234 -1.1698276017626545 +243 234 .15176418986878595 +245 234 -.3533099921218201 +249 234 .15777671775570623 +258 234 -.4433316540933616 +271 234 -1.393935663816345 +275 234 -2.328479933390956 +288 234 .516064898062241 +289 234 1.6371020075587797 +291 234 .4843860625619366 +293 234 -.24789817642033296 +310 234 -.36870746877176064 +314 234 -.6697432545446449 +317 234 -.594628159454955 +320 234 -.37217768399141576 +325 234 .5730238473655348 +339 234 1.3116366952386906 +354 234 -1.7607081109984324 +356 234 1.9007784861366124 +373 234 -.8278791318164389 +374 234 .5893246777976795 +381 234 -.46128412025721915 +384 234 -.6768326253175707 +386 234 -1.0393346658911886 +390 234 -.8230816416121154 +393 234 1.2664624204265909 +395 234 -.29864928638845345 +396 234 .9565715194470723 +401 234 1.0759640553341827 +404 234 1.5649651666336997 +406 234 .35094517438870193 +413 234 .6134525803162061 +440 234 -1.721839465281341 +447 234 -.9512934747859678 +460 234 -.6936075862494305 +461 234 -.696313376372466 +478 234 .13286186693293434 +496 234 -.357420236403346 +513 234 .8226117212436711 +519 234 -1.537054422789593 +525 234 1.5446223781688608 +534 234 -2.144190260118205 +553 234 -1.0019679619203086 +562 234 -.1794580940962337 +565 234 -.9660124835603923 +582 234 .048897678929815 +585 234 1.5685736552424172 +593 234 .6087991058116906 +601 234 -.6697933743868772 +614 234 -.6819530311567013 +641 234 -1.0001862292962462 +665 234 1.2907006421919727 +715 234 -.46248773685181743 +720 234 -1.0228518231149129 +727 234 .3035161065006985 +728 234 -1.5152950185117093 +749 234 -.3096980895675348 +762 234 .3315841744101681 +764 234 -.6868861358248484 +795 234 -.6859972980815666 +799 234 .9801644517370824 +800 234 .5773548390705102 +819 234 1.7934484645811464 +826 234 -1.0722187910495866 +833 234 .33827902467771415 +839 234 -.6241802340167447 +843 234 .1614137514305004 +846 234 -.780381872647818 +851 234 -.5842783843185286 +865 234 -.5890704094349015 +872 234 .2147705685401042 +874 234 1.1119346586311805 +879 234 -1.19433218140646 +896 234 -.7533933570754081 +910 234 -.2861954381679485 +915 234 -.8218876010106836 +923 234 1.063108214480605 +934 234 .5222982717422957 +939 234 -.5845190441424082 +952 234 2.323783717432259 +987 234 -1.4743559587037363 +995 234 -.5015528250065551 +997 234 .04626347402346383 +8 235 1.8214017643731475 +20 235 -.47508046577718777 +22 235 -1.540984153656584 +35 235 -.13567089888387893 +47 235 -.2630115115655578 +51 235 .27737425950711325 +54 235 .6062173190851554 +58 235 2.036875179083931 +62 235 .3544558267158326 +90 235 .39685713833859726 +95 235 1.5611509667646617 +103 235 .49366313297851744 +110 235 -1.9973223820633381 +125 235 1.851275927876097 +137 235 1.7932337645806038 +162 235 -2.110803354063565 +173 235 -.6937423778144847 +178 235 -.709061117331898 +181 235 -.21697457674765436 +183 235 .6880756076375923 +184 235 1.3744641174263967 +185 235 -.16525415945163735 +202 235 .1637729094999032 +206 235 1.0777400565543025 +208 235 .09039758714398745 +210 235 .6313756693317925 +218 235 -.6757953837121207 +226 235 -.044167537502013784 +227 235 .28061768506261586 +231 235 -1.4247279303166263 +241 235 .18991427342844155 +248 235 -1.6766870679289443 +253 235 -.9271498894300326 +267 235 .4485858888803012 +271 235 -.3871913409071527 +293 235 -.18386315358039856 +313 235 -.3393296868728728 +315 235 .049236379639620395 +329 235 .09353264795470054 +331 235 .822600270931773 +336 235 -.12515067218101011 +338 235 -.9803903204426632 +354 235 .5083998613829562 +359 235 1.0393019379675112 +361 235 -.7804877596075791 +383 235 -.0459751138239171 +400 235 -.17211334886365492 +419 235 -.10056570025563229 +428 235 .17426412299809466 +431 235 -.08919647557098123 +434 235 .7217600381481565 +452 235 .6194323097393348 +498 235 -.7337278290449765 +502 235 .26766294266312196 +508 235 -1.1190592198742773 +519 235 2.0202605391681736 +525 235 .42186390544223945 +526 235 -.5780908318274538 +553 235 1.9304506677300568 +561 235 .35667083776802355 +563 235 -.2335273631209816 +583 235 -.22503413584548224 +588 235 -.3472218219726728 +590 235 -1.3899917370791968 +601 235 .26267179268201857 +608 235 1.1367916621335568 +617 235 1.2887856079174058 +618 235 1.0730002539941854 +619 235 -.2226347604764065 +640 235 -.15710047590349738 +650 235 .02050309904370444 +652 235 .4177367179726934 +655 235 -.3020424085511821 +668 235 -.0031804166596127725 +672 235 2.1142889066540027 +682 235 .8962479384488691 +707 235 -.2294936536116059 +713 235 .5166996195401429 +726 235 -1.4496476453438147 +754 235 .46673837417404646 +763 235 -.2344758998516456 +768 235 -.33930505030504243 +771 235 .8002392055760004 +775 235 .537350998745476 +778 235 -.742518901987902 +810 235 -.7587806686680653 +819 235 .7797329478289603 +820 235 .514807683598818 +840 235 -.8353144713125358 +845 235 -.14598610240344223 +858 235 1.426153342324756 +860 235 -.38574815046333716 +868 235 -.517162041690203 +894 235 1.2441736536577832 +927 235 1.1078789289389128 +930 235 -.496052421874163 +939 235 -.43813097995399725 +967 235 .9222570883342179 +971 235 -.8299271688860465 +978 235 1.422036094339396 +11 236 .405242839459736 +27 236 -.3901897868027105 +33 236 .446755582456748 +38 236 .3760607271552804 +51 236 1.3772857060888333 +73 236 -.14511393884033225 +75 236 -1.501217621416916 +77 236 1.8128209710252878 +107 236 1.0359178536969724 +115 236 1.4057889557824725 +117 236 -1.609567220347756 +134 236 -.8065667958925854 +136 236 -2.6254093979442215 +142 236 1.2079532191571782 +151 236 -2.0397289319064793 +163 236 .028060893714569712 +179 236 -.0041586955346902404 +182 236 .40974233564416807 +237 236 2.0549330951381704 +254 236 -.7078898298951729 +258 236 .6778007181568902 +270 236 1.216132705194006 +280 236 .6956036443160324 +312 236 1.6170338479411057 +313 236 -1.471647481271667 +315 236 -2.955591133732176 +340 236 1.1170406170122902 +341 236 -.6289057961388013 +345 236 .1375378330325867 +352 236 -1.99595121761224 +359 236 -1.1256318584659246 +374 236 -.7441040401143637 +381 236 -1.1358635501972212 +395 236 .2349857261873312 +399 236 -1.1532276932823953 +409 236 -2.780420838221228 +413 236 2.3522024969155004 +419 236 1.2500782231943093 +430 236 -1.0941832096993234 +434 236 -.286489324193357 +446 236 -.5084931343378899 +480 236 .2015591565961629 +486 236 -2.1821606725175786 +490 236 .6678395042265933 +500 236 2.225464230105138 +506 236 .15912595942704913 +510 236 -.05032788244684333 +533 236 .5599718132696258 +535 236 .8731265285719592 +540 236 .7285473361288393 +548 236 -.3020354704328903 +549 236 -1.0859260996299975 +560 236 -.7487545581390362 +561 236 -.5638324434983268 +564 236 -.7635372523500584 +582 236 -.023088629965941923 +609 236 1.5306516232550642 +632 236 .6532756015715804 +649 236 -.4445458002172019 +656 236 1.773868558801927 +662 236 -2.621213626098368 +671 236 .931659881572784 +686 236 -.2898988066995614 +691 236 .5464186443459736 +693 236 -.09538136067378418 +695 236 -.0027844924834889984 +730 236 .5921001427730106 +739 236 .9550666474914278 +742 236 1.871939163588686 +758 236 -.7526865718257508 +793 236 -.9534312472095203 +797 236 2.2047770911183666 +800 236 -.2129291914152956 +809 236 -.9985786037567904 +818 236 -1.4201255653032712 +822 236 -2.0938678599219043 +843 236 -.970545405498939 +847 236 -1.4621504160813326 +860 236 .08359319486475653 +891 236 .11569438323218598 +908 236 .8331807682454029 +909 236 -1.1782475984541305 +924 236 .5271029454585808 +927 236 1.657509138878299 +929 236 .050780417314337786 +943 236 -.5359417891672191 +945 236 -.8866191506735955 +961 236 1.1177665476102476 +964 236 .0960473044104422 +973 236 -.4356824339554606 +979 236 -1.2221749264739759 +13 237 -.48993587398855254 +23 237 -.21791707590714135 +26 237 -.35446057953521537 +42 237 .9907285497511873 +43 237 -3.197944308256731 +55 237 -.4971334373730459 +63 237 -.7703524438340994 +81 237 .8927165871885638 +90 237 .6985797836843289 +104 237 1.7117435872418287 +106 237 1.1613584092063725 +121 237 -1.0718568982334298 +133 237 .9612321974601667 +137 237 .2143122190176058 +143 237 1.2645504071039335 +155 237 1.1669816205103847 +164 237 -.6366337278399526 +170 237 .3509960745680502 +180 237 -.9782846197441064 +188 237 1.1427568854999373 +194 237 -.5936131463065392 +202 237 1.3227212111514475 +210 237 1.002188479690568 +216 237 .505707756410872 +218 237 .5862654773621503 +233 237 -1.0770853814212842 +262 237 -.34810839327321746 +268 237 .21034866906453453 +279 237 .37951644623048675 +297 237 .7302915123756788 +326 237 .017191721837235052 +329 237 1.477554666334854 +330 237 1.055496266841128 +337 237 .45833843523951834 +344 237 -.16859655892397518 +353 237 .19322875824178481 +358 237 1.3730039081774 +360 237 .15627108367861026 +371 237 .9898459168600137 +373 237 2.652205001427634 +379 237 .5422641393140923 +386 237 .5663380197768099 +389 237 -.961519161736672 +409 237 .605375555209875 +413 237 -1.4623155347502033 +418 237 -1.4713600982888952 +428 237 .8849277545073909 +430 237 -.3200410705961553 +440 237 1.4658140075709822 +448 237 -.47176953951457784 +455 237 -.14001957217818253 +458 237 2.2105875835443602 +467 237 -.18549813764944684 +474 237 .5819074791287743 +475 237 1.0460074694354817 +500 237 -.9101680059414793 +539 237 .08112077881310546 +554 237 .2687578700053671 +556 237 -1.1381056671068484 +575 237 -2.150831902109864 +580 237 -.15158445136681037 +589 237 .27853376942116836 +602 237 -2.293993504170004 +603 237 .46976916169948435 +604 237 -.5778580126675158 +608 237 .9533776817089108 +614 237 -.28885245496441037 +631 237 .14076979960840202 +642 237 -2.1733409460262276 +654 237 .38543799347145935 +659 237 .9583646896085515 +660 237 -.657628498210759 +663 237 -1.4504839351265717 +664 237 -1.1402874319271021 +688 237 -.7633356920803439 +696 237 -.6538899760085741 +701 237 1.3184828688300034 +706 237 -1.761027511489028 +720 237 .011290024692203124 +751 237 .336197250258799 +757 237 1.3443440111519738 +765 237 -1.6481979435925538 +771 237 -1.1847806423664662 +781 237 -.7397066734426262 +785 237 -.9631703283047832 +792 237 -.4957307057081931 +795 237 .18144461757331642 +830 237 -.02699390898617847 +833 237 .5023009703933716 +837 237 1.0987581466643928 +839 237 .23101727894712043 +845 237 -.42810140605065683 +847 237 1.1644918449599773 +886 237 1.1769454676344482 +902 237 -.4573648997920438 +905 237 -2.721715452495954 +911 237 -.8280420261957919 +915 237 .378225447078098 +931 237 .30064830680212845 +933 237 -.6181524903248133 +936 237 -1.1919684047045487 +938 237 1.3008354944627343 +946 237 -2.2406557481993303 +947 237 -1.5161492562739298 +948 237 -.3144767700424434 +960 237 1.7944426204731114 +970 237 -.7181577939186874 +989 237 -.3555882899082946 +2 238 -1.681940888890975 +4 238 -.8695147459601623 +13 238 .09834126359934013 +24 238 -1.455864084054632 +33 238 .9537918526085047 +34 238 -.015295119469219187 +47 238 .9505098192069968 +48 238 1.2262149387234018 +63 238 .36570653092951816 +81 238 -.2263984683703078 +108 238 1.261194301965911 +119 238 .35916092530477794 +122 238 -.8899696488541226 +126 238 -.5477220378575004 +137 238 -1.1026124437970668 +144 238 -.6642435802922733 +152 238 2.130860127768619 +164 238 .28376223168254056 +171 238 -.9910997690448489 +189 238 1.2942617522840256 +206 238 1.6391810517112642 +212 238 -1.7643665144453775 +222 238 1.1682032888490224 +228 238 -.6254538473252316 +259 238 -.3666984879261924 +268 238 -.4838492144379667 +274 238 .37720452853979636 +302 238 1.9631323304806594 +312 238 2.3967199735473534 +324 238 -.2965641156511031 +329 238 1.335575780088738 +337 238 -1.3252379348685899 +356 238 2.2816857033730438 +389 238 1.6924776619619977 +392 238 .48093612791547097 +402 238 .43195765535064085 +410 238 1.0327138009365524 +414 238 .9418198778583833 +415 238 -.8116926531229275 +422 238 1.3667774685143894 +423 238 .6343278728451025 +434 238 -.731921252910332 +440 238 -3.109531094136065 +441 238 4.561708487726961 +445 238 .6634684303780313 +452 238 .7866132446629434 +465 238 2.535407521544792 +491 238 .43911911123393166 +495 238 2.045485259277807 +503 238 -.8952083837472407 +531 238 1.2826252638260809 +533 238 .125088001825441 +542 238 1.0263635048868955 +550 238 -2.109022857696613 +571 238 1.5572708470307781 +588 238 -.7682172110212346 +596 238 -.8029211864365596 +629 238 1.764442423308533 +678 238 .14003145174470527 +704 238 1.0630796972005954 +711 238 2.0825867980038617 +726 238 -1.938159344734918 +728 238 -.7527250303915289 +730 238 1.7584451968549648 +732 238 -2.2732678221993674 +750 238 .9295106791121122 +754 238 -.6223974513789066 +768 238 .16483442557091413 +781 238 .044745309278718476 +782 238 .8480259038383103 +795 238 -2.438877163338122 +802 238 -.22723466944980653 +806 238 -.3315800210849875 +807 238 -.9109681900216072 +815 238 -2.219320515184273 +829 238 -.17349893916250994 +835 238 .705105862178038 +852 238 1.770229523471837 +868 238 .10693358381923546 +904 238 -.2847047618915786 +911 238 1.3059805335415557 +917 238 .9786849685420729 +926 238 -1.9514098880281083 +956 238 -1.4966096407333562 +983 238 3.464795726947906 +3 239 .1772183134762382 +6 239 .25179308061286954 +28 239 1.2442691253289127 +33 239 .47893538209575404 +44 239 .06826355400992815 +48 239 .052121534632730795 +64 239 -1.2195325420711243 +67 239 -.4682762914782406 +79 239 2.1747040016701655 +84 239 -.18438054015528527 +87 239 -1.555941157454448 +92 239 .09283111763734339 +93 239 -.7682230488347743 +97 239 .7967789266738518 +105 239 .5985889893344403 +112 239 -.1408864244951501 +166 239 .7843239043629654 +167 239 -.07440913248769027 +168 239 .95801877817673 +173 239 -1.2296789055924346 +175 239 .24823058478089624 +180 239 -1.095520318586397 +182 239 -.3652746639936226 +196 239 -1.8831554359074414 +223 239 1.04771514272574 +228 239 -.8345541973666661 +237 239 -1.0291416609044557 +238 239 -.826310010626658 +246 239 -1.6377333243875163 +247 239 .1288059036942849 +250 239 -.13923892104610697 +254 239 -.25750170295220376 +256 239 .5598262787809962 +267 239 -.15618158336532767 +277 239 -.6698046349751263 +279 239 .4491962112906456 +287 239 .1925066287997306 +291 239 1.0171953495843906 +297 239 .2010047305455915 +298 239 -.24858135456589586 +299 239 -.22161440491850704 +306 239 1.130420155088763 +308 239 .7124760219970009 +313 239 1.5571709842367998 +325 239 -2.623126024163789 +334 239 -1.7306667465238341 +337 239 -.26231973928227786 +345 239 -.7121450313682652 +374 239 -1.1492184554838163 +386 239 -1.418093600324979 +402 239 .13483328825237728 +410 239 -.3658267633052731 +420 239 -.7049143311706089 +425 239 .7371684715674021 +429 239 -.9814660811983369 +432 239 -1.1882870464958184 +458 239 -.25150512009832066 +466 239 -1.2384174167583566 +474 239 -.8382704693104228 +479 239 -.30563174947977706 +485 239 1.4214760448446648 +501 239 .3794992056481427 +515 239 -1.6381688005738986 +528 239 .7284096741062975 +553 239 1.3329670735850225 +555 239 -.2505615261065308 +560 239 .6228991399809957 +562 239 .21442136541192053 +563 239 -.2939721719046531 +602 239 -.5354521821229637 +612 239 .9827740490013352 +622 239 1.2489139586765696 +632 239 .709781294403126 +636 239 -1.1086896180914732 +647 239 .6085392199505398 +653 239 -1.6591418860094465 +656 239 .07686556969115912 +664 239 -1.3005539286757744 +668 239 .6648266003255994 +678 239 -.07225147766459472 +699 239 1.1738147787850832 +700 239 .6585164118844843 +701 239 -1.1614762336603779 +704 239 -.5297107561779301 +707 239 .549960467591082 +744 239 -.9952778854598463 +769 239 .49911993181192565 +795 239 .32347920550448256 +820 239 .0005732410959563283 +832 239 -1.4479499855799565 +837 239 .8334935973110934 +839 239 1.1706696538075227 +851 239 .8567259188634879 +859 239 -.9264027632270834 +869 239 .9284181334835706 +877 239 1.684781344150072 +885 239 2.20278224279183 +895 239 -1.4854510090507267 +916 239 -.10973772495194645 +932 239 -3.127617458975767 +933 239 1.5700861600659624 +937 239 1.2290128787624488 +947 239 .5910783390550275 +973 239 -.8106846912172095 +995 239 1.5607962944557505 +997 239 .06337477304844033 +3 240 .3205580738509204 +31 240 -.044378300081627464 +32 240 -.17160514632817214 +42 240 -.8843112032173016 +54 240 .9084557803228456 +76 240 -.5583934504812987 +83 240 1.3307958303822727 +85 240 -1.8286483801082258 +90 240 -1.2293309711114844 +94 240 .4161334172567316 +106 240 -.5138422447979274 +114 240 .3465026397727792 +118 240 -.6300226582418769 +141 240 1.386994522761692 +143 240 -.5271120574917877 +145 240 .34102195346702613 +158 240 1.0776404611784633 +186 240 1.0813180313212662 +194 240 .08698913796156127 +196 240 -.3774561097614547 +205 240 .6686288407243949 +208 240 .9376243800456078 +240 240 1.1375208022504006 +244 240 .0779870846436391 +268 240 .024325036025103386 +285 240 .7461005475924088 +288 240 .7783509406891851 +290 240 .402622991253068 +299 240 .33711994289682856 +321 240 -.37041170484978764 +334 240 -.4959448360296683 +351 240 -.4091693731307945 +359 240 -.44595193293615165 +398 240 -.49496759991414546 +403 240 1.1089236341568012 +421 240 -.07689728035157337 +429 240 -1.0364335939311227 +430 240 .9133214420438204 +452 240 .5435149556227924 +467 240 -.5037494517136157 +476 240 -.29359735940046666 +478 240 .21007422126205388 +487 240 -1.4293402945711697 +515 240 .971807147653213 +558 240 .15090745775547493 +565 240 .8027760851174892 +567 240 .01965675324716422 +578 240 -.019928085116593802 +605 240 -.19368357653094376 +607 240 -.21649631646999018 +625 240 .17041178587432326 +636 240 .8972686001750594 +640 240 .1768861532713118 +643 240 .045319559806767495 +645 240 -.943917139215673 +660 240 .10316312518498257 +666 240 1.5806870722331583 +667 240 -.7741379415197411 +712 240 -.8580940225041105 +725 240 .9192892896939927 +742 240 -1.1155378164635472 +761 240 .46139257685732366 +767 240 .29943629059386057 +771 240 1.1449004046728386 +793 240 1.3646163516756158 +797 240 -.0905641675986606 +805 240 .2619880469506269 +838 240 .2653401359986332 +850 240 -.4009362820063519 +865 240 -.8470287903939531 +878 240 1.6611992765020678 +890 240 -1.246725943105798 +893 240 -2.08041116413259 +894 240 .702796037036285 +898 240 -1.6247537650364219 +912 240 -.5214963347341316 +915 240 .8136743585312705 +916 240 -.3500206914951058 +938 240 -1.2191130582108942 +943 240 .02203081887769723 +959 240 .9374236146458617 +961 240 -1.0532921654723606 +962 240 .641815882414609 +982 240 .9216797795762829 +11 241 -.24028356823456573 +13 241 .24746289974711533 +15 241 .7453117409796596 +30 241 -1.3477422745307952 +47 241 .33512909470319074 +53 241 .3525128251909456 +56 241 -1.4851059535836078 +66 241 -.6562741603644107 +70 241 -1.0242160531540896 +73 241 1.0806520581242078 +98 241 .5192228783665341 +107 241 .20675647113517315 +110 241 1.8638593506492753 +117 241 .1447499492044638 +133 241 .6245642218098361 +144 241 .5450513890849353 +146 241 -.7197217103451317 +161 241 -.9223095228249821 +189 241 1.6852386606135394 +202 241 -.4178923625295785 +209 241 .27939055550985115 +214 241 .9682147810780467 +222 241 1.7989116932055456 +236 241 -.06385255588500828 +239 241 -1.3611113131674477 +249 241 .4016326412490461 +270 241 .23303904991978922 +271 241 .20853184642554237 +279 241 -1.1576730850307868 +285 241 .714832991083495 +287 241 1.1926977520800162 +295 241 .44937782415876903 +319 241 1.8409095149058765 +337 241 -.21103308288750533 +347 241 1.0494300166500015 +354 241 -.7612747951617951 +370 241 -1.1633638206398875 +371 241 -1.2950783854432886 +387 241 -.3874479543229793 +389 241 -.0014789667491316716 +403 241 .2490316103675028 +405 241 -.3697606790074237 +408 241 .919863702644347 +409 241 .7656406952056013 +424 241 .5969527979840943 +430 241 .4750220497020333 +433 241 .7983285581863144 +434 241 -.15718775514671074 +442 241 .08462347134475026 +458 241 .7011816408681082 +471 241 -1.2852706811148151 +472 241 .31756534811268045 +476 241 -.6578013841273027 +479 241 -.9039075468011919 +482 241 -.6138571815627588 +484 241 -.4169820170975092 +489 241 -.21945789000068194 +491 241 -.560313751592933 +518 241 -1.642965264999202 +556 241 .35032769753104537 +561 241 1.2108752415581996 +565 241 -.6237913828596771 +566 241 .9245905156933252 +569 241 -1.7405993656810625 +572 241 -.10147417175622395 +578 241 -.08977346965930677 +585 241 1.4289496781497535 +603 241 -1.107460749105499 +604 241 .8589947139777745 +610 241 .0024201891420676247 +613 241 1.7107221938309833 +618 241 .39065082372344195 +663 241 1.8191356994451984 +679 241 -.2622377554247257 +700 241 -.7847401598122761 +717 241 .18051159055997912 +737 241 .7713585284385173 +755 241 -1.0247981518936782 +773 241 1.1594349604803424 +776 241 1.3918400170574958 +781 241 1.8344791907290536 +795 241 -2.539009235792849 +796 241 .47317063928457115 +799 241 .46151598145096284 +812 241 -.46769006331947416 +850 241 .14588907597142242 +881 241 .13321375476029879 +906 241 .9214173089342078 +907 241 1.1456231078517276 +931 241 -1.893376230935904 +932 241 2.2223787442414618 +943 241 -2.5304937530330474 +945 241 -.1688598323487692 +968 241 1.1308612940669422 +980 241 -.8139817895665413 +996 241 .0865115913527463 +1000 241 -.027992255872900926 +1 242 -.7335631660117977 +4 242 -1.3660037194820254 +11 242 2.8206607510212263 +14 242 .6991023702686315 +36 242 .7526608478877378 +58 242 .09657728250295575 +71 242 .6745209322034262 +87 242 1.1609893335800179 +119 242 2.314528755346318 +120 242 -1.0786808272644104 +121 242 -1.2656522514158481 +124 242 .39075489299530486 +133 242 -.2981681274449739 +145 242 .04931538703487601 +159 242 -1.1019107722867054 +162 242 .5317886149795965 +173 242 .8375873989876379 +183 242 -.4019522509305101 +185 242 -.8210830430626023 +186 242 .16642328386695748 +215 242 -1.9135898807659562 +223 242 .19302524895316195 +255 242 -.24872911042270152 +256 242 1.070669575914906 +270 242 .38402179600918734 +273 242 .410743849996726 +279 242 .07990227467735586 +298 242 -1.1783097013074544 +319 242 .8466426523068463 +321 242 .04813333117905222 +331 242 -.12342951556064027 +337 242 .1616100236899427 +338 242 -.08104940271095311 +340 242 1.1103674339629608 +348 242 -1.2564170858787769 +359 242 -2.0344536938419027 +360 242 1.226402062608319 +361 242 -1.586602740277372 +368 242 -1.4257143860162522 +369 242 .6582555907491148 +380 242 1.131283668867253 +399 242 -.8313160027872748 +418 242 .6637328216610409 +423 242 .661670086709719 +428 242 -.5581800921142624 +484 242 .3091529376702489 +488 242 -1.7924144346970114 +497 242 .9681107543827274 +505 242 -1.3745730195383563 +506 242 -1.4172754186036591 +513 242 -.4418552113419592 +517 242 -.2860668746445761 +528 242 -.28516726313781743 +533 242 .230107005021914 +534 242 .8029257316400933 +542 242 -.7776432538870065 +561 242 3.223839832913609 +583 242 1.00600493691421 +588 242 .01088174465794095 +597 242 -1.0464223025398878 +598 242 .7708693025274618 +638 242 -1.3346350846590145 +640 242 -.33802415315761103 +646 242 .5283685792227858 +648 242 -1.1103008959822764 +663 242 -.6168235098257281 +693 242 .36943052114864094 +713 242 -1.462179949225542 +719 242 .2101424282551989 +725 242 2.606984947964591 +726 242 .31051356734593666 +727 242 -.018153974810173668 +753 242 .9010024718795239 +769 242 .48179834504210317 +774 242 -.7246996015950747 +785 242 .5676167544333544 +811 242 1.282115030260068 +814 242 -.14661330452447058 +825 242 2.095668748167252 +829 242 1.9874496869786045 +847 242 2.3305223895854628 +849 242 -.6330015484124337 +851 242 -1.1273942051502788 +854 242 -.07463094437373546 +857 242 1.2720370577991065 +865 242 .9110131596362641 +878 242 -.5760360023511132 +884 242 .03230435244231883 +888 242 -.5903609304750945 +893 242 1.1907041235890645 +898 242 -1.3213292351220574 +901 242 -1.333755561903606 +903 242 1.4898215015442813 +905 242 1.7940275890310358 +912 242 3.1848793352927123 +913 242 .05916444380797921 +916 242 -.6580391416725809 +917 242 -.3526820167756308 +951 242 .8114587006764569 +952 242 -.30224330051839776 +979 242 .13376359924021242 +994 242 -1.0837681338528633 +997 242 .9408036383442303 +13 243 .27906566869270866 +19 243 -.4258653848514976 +25 243 -.648278392374785 +50 243 -.2691676481260048 +61 243 -1.2760725136911288 +74 243 .6147999166127484 +82 243 1.0384939224673935 +111 243 -.8223165752200716 +113 243 -.2626536328376745 +114 243 -.19511331935790874 +117 243 .9148724909717887 +130 243 .39571510691931944 +154 243 1.7865108227087252 +224 243 -2.3595580721982965 +231 243 1.3830596914238016 +252 243 .6782589652682584 +255 243 .43736948100367024 +274 243 .6865665205847443 +276 243 -.35457780795256505 +281 243 1.6902659753428344 +299 243 .9914953661721126 +334 243 .4441380302388021 +348 243 1.0939636333772584 +356 243 -.5850063906225005 +359 243 -1.0529356381800536 +376 243 .72792560451755 +405 243 .05012561315400603 +407 243 -.0393462790423936 +416 243 -1.051582832380285 +418 243 2.3965079357174703 +432 243 -.6489709363282435 +436 243 .2161486684883451 +437 243 .09921965163332969 +475 243 -.9009972661626092 +479 243 -1.3053345972147903 +493 243 .2616646638852893 +508 243 .1752544795924541 +509 243 -1.005682751081106 +517 243 .47603053287564556 +522 243 -.2813614404202053 +523 243 -.6082603348777915 +540 243 .3105263425276724 +546 243 -.1456564585115572 +561 243 -.9148550601552888 +565 243 .9216949144966278 +569 243 -.9465378891418537 +577 243 1.842599077329726 +580 243 -1.4391971856238228 +588 243 .6090127503966802 +595 243 -1.6133504592017887 +600 243 -.04791122072610097 +601 243 .2923551031480893 +623 243 -.9828755381719975 +626 243 .0696490660367348 +632 243 -.7792098757707707 +633 243 .11773996017557062 +637 243 -.053148187442828926 +649 243 -.9548792395713598 +688 243 .3879037520794876 +693 243 -.6458138782024241 +695 243 .011773050526958706 +706 243 .06485713558496072 +708 243 .15279523735114114 +711 243 .6405846669879606 +715 243 .09364850782184045 +716 243 2.4070834418684526 +726 243 1.9233458056678259 +727 243 -1.2747270792145082 +730 243 .35238599653840086 +736 243 .6799426754509823 +757 243 -.24047715545051884 +764 243 -1.1008728062905924 +767 243 1.1701195879037152 +772 243 -.602016917026894 +773 243 .738951359450675 +776 243 .6112766585851249 +781 243 2.1354833584122437 +789 243 .27471562809257805 +793 243 1.762560377294711 +794 243 -.12328952937352221 +798 243 -.2834393690463077 +816 243 -1.6394257145505735 +817 243 2.171090816207432 +844 243 -.9949692223207406 +862 243 .18434796650054402 +880 243 .01447435987284892 +882 243 1.2844013307900237 +898 243 -1.3921113120818618 +905 243 2.3563125010898784 +926 243 -.24666467278835583 +932 243 .0692332267578524 +938 243 -.6238604741532853 +940 243 -.5407115024853062 +941 243 3.4693248040132043 +953 243 -1.1240945072864692 +963 243 -1.9006116381848233 +972 243 -.721904910023534 +974 243 -1.01068561342239 +985 243 .6222700231831828 +990 243 .9796227965265679 +991 243 .0452940461127318 +8 244 -.4702431498845313 +29 244 .25980364208935597 +36 244 -.4693898527559657 +38 244 1.9751161655439484 +52 244 -.1811486592479088 +73 244 .2689776959421811 +90 244 .2406029168539918 +96 244 1.3251985434234945 +106 244 -.6040492296970705 +107 244 1.821076312194839 +116 244 -1.1320029898096633 +131 244 -.021124142401446555 +137 244 -2.500471964501294 +141 244 -.17937477225245987 +154 244 -.5821373240146569 +159 244 .8926819157274287 +165 244 2.0439837164669497 +168 244 -.04170041748752579 +213 244 .5969753606659073 +220 244 .24109453578535517 +224 244 .2933761736036139 +227 244 -1.650149001377237 +235 244 -.9350722226564575 +238 244 .31861119990673004 +241 244 .9479777995336927 +242 244 .4564085263555252 +243 244 -.9681068258008937 +269 244 -.949608122190145 +270 244 -.3258239171015351 +277 244 1.5377710256447157 +284 244 -1.320093245367934 +286 244 -1.0378364132473576 +297 244 .15179166708273203 +301 244 .9891862402791048 +303 244 -.31049915636398007 +312 244 1.035311917272179 +376 244 .6187008110692993 +390 244 -1.1431543895915783 +394 244 -.4649693965131597 +405 244 .6804974296113472 +416 244 .9865528768898831 +423 244 .6134223217612286 +427 244 .7201603546027187 +443 244 -1.1921568249444896 +452 244 .694339783528862 +461 244 .4489265833469201 +473 244 .9383876414258279 +486 244 -1.2342847805730073 +490 244 -.06854541607724862 +500 244 -.12077860811400712 +519 244 .2573853338552996 +525 244 -.5478763978853884 +541 244 1.4442233075083426 +555 244 1.5042976171734725 +564 244 -1.8876456481670358 +583 244 .4627620365190329 +592 244 .31104614565876854 +593 244 -.33926273825776887 +599 244 1.7868515817473833 +612 244 -2.1452633074115672 +620 244 .5465068336781258 +637 244 -.8663496744183964 +660 244 -.158405239245386 +668 244 1.1255439926349806 +675 244 -1.9284675173279089 +677 244 .03415109997227144 +678 244 -.1710077977386568 +689 244 1.2660653618229725 +699 244 -1.0372640262211807 +704 244 .4551608173236169 +741 244 -1.1994655838522355 +746 244 -.33101686271777186 +748 244 -.6383226651492331 +749 244 .6777975314290074 +775 244 -.08540073302642981 +777 244 .8637064712760015 +782 244 .40132489769842183 +798 244 -.2797337204995046 +806 244 -.21824692153974595 +807 244 -1.040180861863297 +808 244 -.3020751134614137 +814 244 -.6488306725897476 +817 244 -.6384765215408531 +823 244 .711521592136968 +830 244 -.17969814027894926 +840 244 -.5731386274758664 +872 244 .353795245944653 +878 244 .13629492833941975 +879 244 1.0016717690831347 +881 244 1.0340285784086458 +883 244 1.7683441361258119 +887 244 -.0073593016394594285 +893 244 .11023890632426103 +898 244 -.16520360959578995 +910 244 -1.1397756461115547 +922 244 1.8364856968898444 +929 244 2.206670700973076 +935 244 .022784341450082513 +939 244 -.261790047220853 +946 244 1.4400343986336386 +951 244 1.620106197744925 +966 244 -.695163826703767 +981 244 -.22869399171668606 +993 244 .22185962604942833 +18 245 .391687276296511 +28 245 -.6000289100976749 +38 245 1.6089881092393363 +39 245 .5244563146139838 +45 245 .1418404171777788 +50 245 -.5732185751324428 +58 245 -.6808697217225185 +83 245 -.2886918019985848 +131 245 .12675445447109684 +137 245 -1.7888771110205282 +145 245 1.3085248059534418 +146 245 .5324778255492585 +155 245 .9175694718655413 +158 245 3.358402616654984 +160 245 -.8280908849163899 +171 245 1.6882750439059064 +177 245 -1.2884260067144109 +184 245 .8009236042821415 +191 245 .2168750238160769 +204 245 -.9646976503792404 +209 245 2.0861335634621576 +215 245 -1.967659611259317 +220 245 -2.3574335753218048 +225 245 -.4770182118862982 +233 245 .09795527966770952 +245 245 -.2258134918292793 +254 245 -1.0821270258692561 +256 245 -3.375752170833226 +257 245 -1.6046596424404322 +280 245 -.8452497886143349 +281 245 1.547053409437193 +290 245 1.0702567522540787 +301 245 1.6144388573712058 +305 245 .7291131847490407 +333 245 .06993484642114288 +360 245 -.10824602238495674 +364 245 -1.4827495673900808 +383 245 2.06801899578205 +393 245 .1945703120087335 +403 245 -1.009869141424314 +404 245 -1.0009378957932815 +413 245 .9506377444124153 +418 245 1.8420990990441117 +427 245 -1.0084103326463223 +431 245 -.35661263646711594 +444 245 1.3408331200791799 +446 245 -1.1997544532321989 +448 245 1.2090697282723823 +452 245 -1.67164738062097 +454 245 -.46926496110868415 +457 245 -1.1789301457802375 +465 245 1.756184502594901 +467 245 .45427226730262166 +484 245 1.5535098922464403 +494 245 2.4332196305188494 +496 245 .23884702510857406 +510 245 1.6552400041900617 +514 245 1.3739186846132863 +524 245 -1.3868975507195427 +534 245 1.8320226421486432 +540 245 -1.505287377320684 +587 245 -1.6938859580034218 +588 245 -.08581819651108973 +627 245 -2.3631220225488834 +641 245 1.3305599880753758 +654 245 -.27591097719487095 +662 245 -1.029183494817697 +677 245 -1.7418044197003093 +687 245 -.5523258852742593 +690 245 .0561580660914526 +708 245 1.6452514885727196 +716 245 1.2743172776013934 +726 245 -.9832778970123682 +731 245 .5929203492564351 +738 245 -.875698826437921 +773 245 .1917862488813481 +793 245 -.17553713281815578 +796 245 1.4448995710678894 +799 245 .058809722106921175 +804 245 .8185275710330101 +818 245 .27838193735807215 +837 245 -.7280371018690516 +847 245 -.08812080165478137 +865 245 -.8857004199447422 +874 245 1.8224576565064217 +894 245 3.7196893716354955 +925 245 -1.4991764901005067 +929 245 .6077438912123122 +932 245 -1.2303671342101834 +938 245 -.26102828423215174 +943 245 .6744938677690965 +945 245 -.3697210607841193 +946 245 2.485259921322857 +951 245 .34393653325778467 +960 245 -1.5941877120216932 +964 245 1.2200719006969922 +981 245 .6492121093718797 +999 245 2.2772919333053077 +16 246 .9925508827179044 +19 246 -.7960935471922056 +21 246 .44195568288781634 +22 246 .7605102239948143 +63 246 -.28477272448743296 +79 246 -.41302324685949426 +84 246 2.1368805348324655 +87 246 .9865974925995709 +110 246 1.767392868341432 +112 246 1.4887558345707164 +114 246 -.06511091618581238 +118 246 .2614912182872273 +122 246 -.6777228463563032 +137 246 -.8677141643085208 +138 246 -.7680356551414956 +157 246 -1.6756217610679682 +163 246 .862411006014552 +172 246 1.7294322823658608 +198 246 1.1630131894561726 +204 246 -.949481088882415 +217 246 .5429912983571866 +222 246 .43529086698787783 +242 246 -.5318805143078151 +244 246 1.7240950173581178 +248 246 .3440830372289836 +251 246 .45671609012992687 +252 246 -.04443626986673685 +255 246 .5779604072781054 +263 246 .5611262318451127 +265 246 -1.9312998162362005 +297 246 -.8539632052822091 +310 246 .15588157582172793 +321 246 -.8647234507139863 +322 246 1.0401269174583823 +329 246 1.2014220999321226 +330 246 .031626965605666954 +346 246 -.3381808256597927 +347 246 .9384716017125592 +362 246 .5129503912093385 +368 246 -.8295788972837095 +417 246 -.30166136189014603 +422 246 .22597521337120216 +444 246 -.025307642806975394 +447 246 1.5622758607692457 +462 246 1.688336210986956 +466 246 -.32566462258562034 +468 246 -.42746888578254444 +471 246 -1.3562938568798713 +508 246 -1.6385043867776974 +536 246 -1.3110763785170338 +547 246 .9484075786047047 +570 246 .4277196658739536 +575 246 1.6542445207234155 +576 246 .8135818413996054 +581 246 .8707743726007701 +586 246 -.6239071485078643 +587 246 1.5236563063958481 +611 246 -.48251263129305866 +632 246 -.6391351912060762 +636 246 -.08340700900821543 +662 246 2.3237037405858425 +664 246 -1.1189692951009502 +674 246 .33409669659730706 +677 246 .5506896014233376 +678 246 -.6654518455872458 +690 246 -1.0317581300510383 +691 246 -.03823425735817179 +714 246 -1.7058813753091522 +739 246 -.45326620819366403 +752 246 -.6025986964446577 +768 246 .03161145372500005 +771 246 1.3559591629180783 +777 246 .5938057836229117 +786 246 1.5318513667515292 +788 246 .5975826532341005 +793 246 .03665332167984531 +807 246 .19930338122275482 +821 246 .04733794279577393 +826 246 .17378155647000565 +827 246 -1.4680134028197689 +843 246 1.5469912541958681 +851 246 -.31364743371415205 +869 246 -1.1097608041244924 +892 246 -.43611508109006036 +905 246 -.6788074765252945 +913 246 -.4246365520640999 +929 246 .018693463354310214 +934 246 -.764138179811378 +941 246 -1.0521964477341377 +960 246 .6821739198654071 +966 246 .15342555703382796 +977 246 -.15081850677242745 +978 246 .22181641822621564 +995 246 1.6316233902896577 +11 247 .6471411038119906 +15 247 -1.728579535530029 +38 247 -1.2205298571266412 +59 247 -.9531923202884339 +63 247 -.8925574820001267 +65 247 1.2026298581269228 +77 247 -1.8233030443972027 +82 247 -.5947449393303514 +98 247 -.7507675332547725 +106 247 .6172722058292939 +126 247 -.2650584882772191 +146 247 -1.0696249732265712 +149 247 1.5664260840430348 +150 247 -1.1122564535706263 +151 247 2.302304641821049 +160 247 .6955616016763313 +163 247 .25485609714355295 +168 247 2.07989485494126 +172 247 1.288429793606953 +178 247 -2.874894419340815 +188 247 .4564811066488975 +200 247 .0808204193880232 +214 247 -.05931871141135435 +230 247 -.07454222384230574 +256 247 2.8984371410941896 +258 247 .15862583815992423 +263 247 1.127578238991338 +264 247 -.7366771956056908 +276 247 -1.8830450675765251 +291 247 -.5154800115106232 +293 247 -.009343069021148127 +311 247 -1.068869100264078 +317 247 1.5486835969838917 +339 247 -2.337921414752957 +348 247 -2.125864845766818 +351 247 1.0215981358596298 +361 247 1.0503224034249175 +373 247 .9688074783729987 +384 247 .9548769408546814 +407 247 -.0013880168668783596 +412 247 -1.2075525455345533 +421 247 -1.409008351717876 +433 247 1.3813836144022906 +443 247 .9416528278106008 +462 247 .5679208212503435 +479 247 -1.3727532054004705 +499 247 .2624530609846015 +512 247 1.4220449005725 +542 247 .7501553506975756 +556 247 -1.2193201203116113 +558 247 -1.2000137507310888 +574 247 -.08409045986309546 +578 247 .23919380515548735 +584 247 .8136118431498649 +596 247 -1.2733029115578147 +608 247 1.0530547902772378 +618 247 .6675923514398103 +627 247 1.8957936028171427 +632 247 -1.2544667889644792 +654 247 1.2417387157679198 +661 247 .6332732869764025 +672 247 -.6357577239351031 +673 247 -2.1857104936807 +674 247 1.2271316035598299 +709 247 1.3804450958994212 +716 247 -.40358027769454613 +719 247 -.5706401012726278 +722 247 .51425126451544 +754 247 2.3877415969032785 +756 247 .6061545640007369 +780 247 -1.8802513874673028 +794 247 -.7221007765479435 +798 247 -.01767684923569937 +809 247 1.586377870927977 +813 247 -2.163817006417479 +818 247 -.5977934644682543 +819 247 1.168353634806761 +846 247 1.0563467533965687 +847 247 .7225061829430504 +853 247 -.5181924219478792 +857 247 1.7123084519250007 +858 247 .34475719584738845 +860 247 -.43260548664873694 +896 247 -1.2093538255634033 +903 247 -.761449576430921 +905 247 -1.489704593549641 +912 247 -1.3702726411491657 +928 247 3.2142187867425394 +931 247 -1.5045496370925104 +932 247 .5910316416647122 +962 247 .9032630729661231 +980 247 .8697871772133275 +986 247 -.6244528556561596 +994 247 -.8485114959275395 +27 248 .778431698867257 +43 248 -1.233606615523987 +69 248 -.2575478018384325 +79 248 -.9156171459063986 +86 248 -.8334461170122579 +95 248 -.21074533069140453 +107 248 .32044518549820245 +110 248 2.7463765215391844 +158 248 -1.4902954289112058 +167 248 .29472024474114517 +173 248 .4353820008042242 +188 248 -1.272739517538485 +194 248 -1.5835840856859074 +201 248 .3907281186372118 +214 248 .6934011186869229 +219 248 1.1424864120293707 +245 248 -.0484490271198352 +262 248 -2.343291011593858 +265 248 -1.053592013473674 +275 248 -.5993228292013824 +284 248 .7743865463865719 +307 248 -.13834472865431438 +329 248 -.7295355067932578 +346 248 .21272141750964266 +353 248 -.9580460547912599 +355 248 1.7137770156393923 +362 248 .14403753192660426 +367 248 1.0303871354786505 +378 248 .11949532323779441 +386 248 .2011081857992217 +408 248 .17391687701567043 +416 248 1.6756414230438241 +441 248 .2535584214637089 +464 248 1.18470977941816 +473 248 -1.4488717463277925 +475 248 -.31135598549001053 +477 248 .22014320969622053 +483 248 .6133924897550054 +484 248 -1.137943076147859 +492 248 .9421187698882361 +494 248 -1.1071329394954237 +498 248 -.2228560272992127 +499 248 -.9297080857305791 +519 248 1.0987338530479616 +526 248 -.35799088296098747 +536 248 1.0869359803335286 +542 248 .23045469596678742 +546 248 .5611180877073529 +565 248 -2.0132932532031784 +583 248 -.3026631886914775 +610 248 .44883534272057474 +630 248 -1.1126857368882326 +668 248 1.0057774395825263 +671 248 -.6721697732003556 +678 248 1.528308921337618 +683 248 -.02807978147786696 +694 248 -.40052968510307574 +697 248 1.1572303151870285 +708 248 -.7809497361905021 +720 248 .2911040310854849 +731 248 -.17080125705513743 +733 248 -1.776947042636296 +792 248 1.8504820334219871 +794 248 1.009147564267004 +798 248 .9233926698351689 +808 248 1.6287523014604184 +815 248 -1.5987710767856524 +817 248 -1.83136497571636 +826 248 1.1634965908137007 +843 248 -1.007067996967338 +844 248 1.190098291126685 +867 248 -.14920815798725023 +882 248 -.4411891148259401 +891 248 1.447883142109493 +894 248 -.9808362241518438 +907 248 -.3131174215017792 +908 248 1.158572891522829 +920 248 .8253705254494701 +939 248 1.2064877934495946 +952 248 -.742657306842271 +953 248 .547904223264293 +955 248 1.812190452123473 +967 248 .7519124904932376 +974 248 .3775160595960255 +978 248 -1.1949330846485038 +986 248 -.6502826491358057 +2 249 3.0200788013727387 +11 249 3.2575973889447347 +17 249 -.31067144360820453 +19 249 -2.357139938211643 +20 249 -.20181225075221199 +65 249 .8111349073129652 +75 249 1.5581234047422932 +86 249 -2.9659525827868873 +102 249 -1.6522094348211767 +137 249 1.0730670918683396 +140 249 -1.0704642791360435 +163 249 .4008117873541115 +172 249 1.6544543682117565 +189 249 1.7237782903436176 +192 249 .8739585916513319 +213 249 -.18948496883258462 +214 249 1.0017209276408363 +216 249 1.5731841924030439 +223 249 -1.1744122825145502 +225 249 -1.7958495341956957 +229 249 2.0803439203457286 +234 249 -.13223769587876416 +237 249 -1.5651365422275716 +247 249 1.0756301565604134 +248 249 1.5517631468523971 +258 249 -.19524441896559716 +269 249 1.7958013904760297 +274 249 -2.9155734496080323 +287 249 .4563124922554903 +301 249 -1.493916315389123 +304 249 -.10239145609765682 +312 249 -.7593249799134624 +316 249 -.860959836985644 +325 249 -.18965659232188814 +328 249 2.3495403393363175 +356 249 -1.2838131275153708 +362 249 -.8682205072798824 +376 249 2.566262066689107 +379 249 -.6812484383381131 +381 249 .9915792180571614 +405 249 -1.2274379366625672 +406 249 -1.0031431032598876 +426 249 -.8977892701444716 +437 249 -.29532675727518365 +439 249 .06445925463519683 +442 249 -.09877732833971922 +445 249 -1.9284306388761008 +449 249 -.5223729042116421 +457 249 -.6728967129821911 +511 249 -1.7701638813749612 +513 249 .47000115229067524 +525 249 -.05709318284686081 +536 249 1.8254501808436194 +545 249 .4080272578658007 +557 249 1.0289909031492739 +559 249 .9784906166390591 +560 249 1.2880369762861463 +570 249 1.904451323101897 +583 249 -.18839841732458032 +593 249 .9972212245945433 +597 249 -.22821851556715111 +609 249 -1.6847107921000715 +617 249 .6276649515211337 +619 249 -.18279486645564202 +631 249 -.4798195279696625 +636 249 1.7172206584544842 +654 249 -.4498372676152902 +655 249 -.6548371674102355 +656 249 -.8190339729419992 +669 249 1.6491353586899717 +693 249 1.1233668959955243 +694 249 -.002717514437806462 +696 249 -1.569235401309504 +699 249 -.22355341703836779 +702 249 -1.3408111045482647 +705 249 1.0158910882276861 +706 249 -1.4853175718649432 +713 249 1.678759995994058 +719 249 -1.1758390036919466 +741 249 -.13109767994490718 +746 249 -.31315832012784095 +752 249 -1.0214634430054534 +773 249 -.639231849843594 +774 249 -1.5819396906609504 +808 249 -2.4060829414197036 +809 249 .7623387679771301 +821 249 -1.0712911069561466 +825 249 3.2155681805644143 +880 249 1.6236395167910183 +884 249 -.21401020546492452 +886 249 .9467239627355827 +888 249 .02217368691520491 +894 249 -1.740596791910817 +897 249 .7649301423283404 +911 249 -.9417270313705655 +951 249 -1.8802337866137422 +967 249 2.7747008124334536 +970 249 -1.348851789533444 +981 249 -1.0945804894496767 +990 249 -.06593096914885531 +8 250 .027827658179344954 +26 250 .3881825767286283 +30 250 1.109073922825676 +45 250 1.198210312315194 +65 250 -1.3268818372402023 +68 250 -.47900615160142535 +87 250 .6596764796132967 +90 250 -.1537846337963687 +98 250 1.0947620245292213 +111 250 -.3938396070658594 +119 250 .35231971797605444 +138 250 1.0722359451250651 +146 250 1.8399526893689386 +167 250 .7166917174225718 +168 250 -.6536288483430766 +181 250 .6267970992747667 +188 250 .6223092709288071 +190 250 -1.9877424567144524 +192 250 .46487559704361897 +194 250 .3325465330430495 +216 250 -.16167940656485535 +223 250 1.8210803824404922 +236 250 .9153389531608682 +237 250 .5232885364457281 +247 250 1.4770425080689797 +257 250 -.3649957653612857 +260 250 1.190993892100411 +275 250 .7398331041940385 +284 250 -.7002747652447078 +293 250 .18478595344269333 +303 250 -1.7379044314099592 +306 250 .026565779544591182 +320 250 -.44486922753547564 +330 250 -.7218359804414801 +338 250 -.0001385294469491219 +344 250 .1236087395388353 +363 250 1.5388885547671942 +370 250 .7668494991502954 +374 250 -.661004595856501 +377 250 .3350053791522211 +378 250 -.011834153655737922 +388 250 1.098457785372948 +395 250 1.0371465501427468 +396 250 -.7037984536060001 +398 250 .29941256510971404 +403 250 .3406332854758102 +426 250 1.333254109226767 +449 250 .814889747746956 +459 250 1.783367373771519 +477 250 .6080960780106089 +491 250 -.29973883074123514 +492 250 .2560205905223411 +522 250 .029862127554499296 +528 250 .3915876004379468 +532 250 .35675991418455333 +536 250 1.795181548188856 +537 250 .20781003726258296 +542 250 -.7477278455288505 +546 250 .945265617990764 +552 250 -.33262258456799143 +580 250 .20973883022944667 +600 250 -.6522906593730727 +629 250 -1.313801152984074 +639 250 .09648188511485895 +640 250 .6401622523002695 +648 250 .1680820203534432 +653 250 -1.2675912691363522 +660 250 .8280739531032681 +667 250 .8951480369651162 +674 250 .4587834382513786 +678 250 .05650971990107946 +681 250 -1.55473720782846 +685 250 -.9365787034554723 +695 250 -.3399317384653506 +708 250 .3291376401393121 +726 250 .1815599322614405 +754 250 -.36093789098818535 +775 250 .40969207134894947 +816 250 1.0725903708140123 +834 250 .5806338893154976 +843 250 -1.587500387363564 +844 250 .23017086173112944 +845 250 1.2543475659960979 +848 250 .32882342373067824 +856 250 -.5739504037160484 +865 250 1.0696570812315256 +882 250 -.7162180714466707 +885 250 -.09897148647841181 +896 250 .9430912271208205 +900 250 .37239764230996375 +906 250 -1.224443300611765 +908 250 .4365703974119317 +909 250 -.9935068375122265 +915 250 .11866299694091209 +917 250 .904390496540214 +924 250 .6443836207414122 +929 250 -.2916901066527239 +933 250 -.21111242708855465 +946 250 .8096374147508172 +950 250 .4666034804572562 +954 250 -.32354634706993823 +970 250 -.5707871436999297 +986 250 -.011004911581370472 +990 250 -.37130262788558344 +995 250 -.5302344406767732 +19 251 -.5098759836788682 +28 251 .5999502067033486 +34 251 .27212308943842944 +42 251 .03828521536185181 +50 251 .3676681304732382 +76 251 .6055607554289937 +89 251 -1.2010747403625543 +91 251 .3816839779808318 +103 251 -1.0399776399186036 +105 251 .34189600253583097 +133 251 -.16975163125657897 +142 251 1.2008885506444102 +176 251 .5510465226570254 +197 251 .8834001803341742 +216 251 .6895349389141117 +218 251 -1.4362082531818847 +220 251 -.1714012534933665 +227 251 -.1304029374468447 +240 251 .4435101081884098 +244 251 .24817163659038427 +269 251 .45528690887619266 +299 251 -.21483853419035714 +304 251 -.031770294607982044 +306 251 -.8401257900588561 +318 251 1.6124628415104765 +324 251 .6623947210683997 +325 251 -.6284173998449551 +326 251 .2263300171009438 +327 251 -.3004119330675901 +347 251 .7747454105387678 +354 251 -.11487403110425333 +391 251 -1.4287526841102773 +397 251 .5040924646084759 +403 251 .11653355227857862 +432 251 1.274254315182865 +447 251 -.13986465244884172 +475 251 .35614052957385234 +485 251 .44232473356180035 +486 251 -1.2691914833693376 +508 251 -.9087059681004934 +510 251 -.8539213769818551 +513 251 -.3768181123263088 +522 251 -.958679522341803 +533 251 .6489753892390324 +534 251 .11369585681958973 +554 251 -.4775316306577456 +556 251 .7804191768812998 +561 251 .5080684186543203 +572 251 -.6414766212959754 +579 251 .7511120031424825 +585 251 1.5651381812132112 +593 251 -1.008536384423266 +598 251 1.01037878413694 +601 251 -.3216121259402938 +609 251 -1.7336231189706472 +612 251 -1.030392555320708 +613 251 .8339056641963396 +619 251 -.6547362029564344 +636 251 .124188799403649 +649 251 .9371376236036901 +666 251 .1538770422610134 +667 251 -.5368678949744973 +672 251 .7886266228571277 +679 251 -.6838365240172225 +680 251 -.12201641135022036 +682 251 -.3233796886218914 +685 251 .6508379118609993 +707 251 .26551095202914043 +715 251 -.009366927395158264 +737 251 .45320134103535986 +745 251 .019284401156962838 +763 251 -.160110236249161 +766 251 .4545139043314449 +771 251 1.1567883017760132 +787 251 -.8142652892724466 +789 251 -1.2781406359406375 +791 251 .08222045055806267 +794 251 -.26356146532963465 +802 251 .9861569878455716 +808 251 1.0872680394485714 +862 251 1.097350266432401 +869 251 -.7026452460483903 +891 251 -.26213784405862467 +898 251 -.7217558570911764 +910 251 -.07585110146489427 +918 251 .3354457828308169 +922 251 -.07186356142399239 +935 251 -.17728165553279324 +936 251 -.020093747156179793 +957 251 .40104748619873143 +975 251 .4186426854449939 +997 251 -.3080565856363198 +5 252 -1.1819553355028092 +12 252 1.5740119207801306 +15 252 1.4521252987556317 +23 252 -1.984707731226819 +41 252 -1.2073921050260619 +42 252 .2015732953171319 +44 252 -1.3443313554150331 +64 252 -1.7366510544769156 +67 252 -1.6202021609733641 +82 252 -.6394339983831248 +99 252 -2.152075232160971 +104 252 .5871382768457517 +116 252 2.178024246159938 +122 252 -.4877215476314333 +123 252 .10366230050735226 +130 252 -1.7191467726063367 +139 252 -.8254897045379253 +168 252 .5144276725824617 +171 252 -1.6374412558280989 +184 252 .1738795064402197 +188 252 -.1778872638831373 +197 252 .9778034576726863 +218 252 -1.62519220558322 +226 252 1.0542353539737963 +240 252 -.7115579353000507 +258 252 1.9262469672980282 +259 252 .9724623552108497 +282 252 .3826750793815405 +296 252 -.5797757237957838 +305 252 -.9162190033143118 +322 252 2.690017187969943 +337 252 -.3911711879563998 +341 252 .6615671340472454 +345 252 -.6609644692360495 +351 252 -1.687685393481857 +356 252 -.004049247076476414 +360 252 1.8002753511679381 +365 252 .9484707544222022 +381 252 1.0771415207796085 +402 252 1.1808274492094624 +441 252 -.7901063673006773 +444 252 1.1267217422878766 +459 252 .26355939917189264 +460 252 -1.166841454834875 +464 252 -1.474277406908367 +488 252 1.966289368898773 +495 252 .3306608904260686 +509 252 -.48491113702428523 +544 252 1.5829411439417846 +559 252 -.8958847058980323 +563 252 .5331851884406852 +567 252 .3766745160669055 +572 252 .06008321292039842 +609 252 -1.2832010553859483 +615 252 -.8961022313366291 +617 252 -1.184368130958604 +632 252 -.03965676690769925 +645 252 .38676722399620045 +692 252 -.7617098734277531 +696 252 -1.1610031841483506 +702 252 .24952703348352623 +710 252 .22030670803132463 +728 252 1.4471557612637367 +758 252 .5544757913297447 +763 252 .53595076766219 +767 252 .5813371452636995 +769 252 -.11763316617753145 +779 252 1.766561353717384 +786 252 -1.1461075061579544 +803 252 -1.5867178811304101 +810 252 1.4686853447333201 +816 252 -.9060871204059651 +821 252 .9436252428846433 +824 252 -.05936856624849239 +829 252 -.7391694698664291 +834 252 .7017432965371078 +855 252 -1.3466877558529047 +866 252 .9096115433224029 +871 252 -.9219742247966949 +875 252 -.6054751774760153 +879 252 -2.1372410998772704 +882 252 .09531689569768512 +893 252 -1.2469805746590172 +896 252 -1.2597582850532714 +901 252 1.2919836338500124 +903 252 -1.9148281336080557 +926 252 -.08707970064513648 +933 252 .8314323891415603 +938 252 -1.7483224626805056 +951 252 -1.7564114280100203 +965 252 -2.033168648125247 +972 252 -.9323432290847418 +7 253 -1.4243359041943036 +16 253 .2593027534122089 +32 253 .07062914189060683 +42 253 -.5081450446073468 +60 253 1.4679654989964503 +84 253 -.7139095906808979 +95 253 -.7013312891950996 +102 253 .9348980901861326 +103 253 -2.540132519808558 +109 253 -1.1930217273949024 +111 253 .9876527955070944 +119 253 .14878584642817796 +143 253 -.011706827274292342 +150 253 .010505703280460105 +152 253 -.1907045936609557 +172 253 -1.041930066698868 +174 253 .6987268606029788 +175 253 -.21671862566065733 +179 253 -.8269140484418178 +181 253 1.076411180422762 +206 253 -.2535439585826744 +208 253 -.5037304416321335 +211 253 1.6904029210843565 +213 253 .1919123482314472 +217 253 -.7148294197045866 +224 253 .9896488842433 +247 253 -.32143593828820294 +275 253 -1.4562641495774014 +283 253 .9888070971442212 +334 253 -.46983024880864527 +341 253 .8406604285525754 +346 253 1.1989590482139225 +352 253 1.7821251154161022 +363 253 .4099727213808495 +365 253 .2362399086741634 +379 253 -.9841738439003792 +398 253 .12997208837828125 +406 253 -.3684399846895313 +409 253 1.124789141184929 +413 253 .8248413662772995 +419 253 .6879385435893044 +424 253 -1.5750839700795622 +430 253 .9827137955951556 +435 253 -.2000067039352118 +441 253 2.1277274572784997 +444 253 .48318990492536196 +453 253 -.9100310334565421 +467 253 -.5070438625477787 +473 253 -1.2752697286656094 +474 253 -1.0479261875477184 +478 253 -.11262585593918509 +484 253 -2.191145824336965 +493 253 -.489717003582405 +499 253 -.7291708831827617 +516 253 -1.839659065368744 +542 253 -.3975472393722132 +559 253 -.10146010772219563 +565 253 -2.2783610586726595 +591 253 -.12453558242595386 +596 253 -.6914329478410715 +606 253 -1.2777153936505288 +613 253 -1.7997294747743608 +615 253 -.5074195401388728 +616 253 1.61060863417201 +629 253 -1.1654683694006773 +634 253 1.9253191966513816 +640 253 -.5806491042003246 +644 253 1.1577067431617898 +656 253 -1.6796616262850528 +668 253 .9855646610528399 +676 253 -.524752904113652 +677 253 -1.7259277307977028 +683 253 .4471586165399971 +685 253 1.1098878714141038 +692 253 -.19610948467249378 +708 253 .1397720952789444 +718 253 .3867894624270589 +721 253 -.07699519804046867 +733 253 -1.1588957492928353 +747 253 -.007012096314491012 +749 253 .042935659462263284 +750 253 .1995485085464307 +757 253 -.5112708154605388 +767 253 1.2803483274383656 +771 253 -.41559352815138617 +791 253 -1.5372830871187695 +792 253 1.359513526857151 +800 253 .8111002557339719 +805 253 1.742732032335541 +814 253 .4974070153796234 +820 253 .3492310256669109 +831 253 -.7219665167808085 +844 253 .0413605936544969 +855 253 -.31983980701879333 +865 253 .08820806302651128 +883 253 .03820364987547251 +898 253 1.9828766866103862 +932 253 .7816733981773041 +939 253 .8299234588202414 +943 253 1.6730253279679514 +961 253 .6235431107409005 +965 253 -.00020712111403588251 +983 253 .3697817492722886 +985 253 -2.289254895751576 +990 253 -1.3015076614611725 +993 253 .3871231784665836 +998 253 -.1332208142833124 +38 254 -1.158044241781492 +47 254 -.21323853090951927 +51 254 -1.1776688464983882 +59 254 -.7990320398571303 +60 254 -.6996931562652151 +78 254 -.13911441479930214 +96 254 .9884635631325832 +102 254 -1.0004976558239858 +114 254 1.058593432537358 +116 254 1.8329243987084995 +118 254 1.0663634108212383 +124 254 .11705588946449384 +130 254 -1.588045909732377 +134 254 -.1155086286313757 +139 254 -1.748473259234881 +143 254 -1.0881933491179667 +149 254 .28081869499011847 +150 254 -.9962869653441663 +153 254 -1.331787630237537 +154 254 2.172178233386389 +155 254 -1.013058035604432 +178 254 -.6834818164260689 +181 254 1.180786370639139 +196 254 .9212739333848196 +205 254 1.6276382912360354 +218 254 -.3016007120693337 +228 254 -.7757432094048243 +230 254 -1.019964649832723 +241 254 -2.3521778041583157 +242 254 -2.1871925778132457 +249 254 .19114333490590996 +257 254 1.0576484922943103 +271 254 -.9378947720316032 +272 254 2.2987508868183073 +276 254 -1.574966008000089 +278 254 .623455695475083 +288 254 1.3237656054428741 +300 254 .9723998904187653 +308 254 .8975113164715322 +309 254 2.163184375688937 +310 254 -.6183315062887456 +312 254 .6802760885077554 +320 254 1.985727810154042 +333 254 -.21512698879669617 +337 254 .6260697418529478 +343 254 -.8756504718880962 +348 254 .42697685934456897 +355 254 -1.199385814337914 +368 254 .6403988784707451 +371 254 -.47170335215429227 +382 254 -.6827311863570344 +416 254 -2.0618601858942243 +431 254 -1.6626388508255008 +457 254 -1.1092700723689366 +499 254 -.6532526164457221 +503 254 -.6383801914409757 +511 254 .2838819704331662 +516 254 2.3627889785439775 +526 254 1.7246640442228856 +540 254 -.014645608528595047 +547 254 -.39493093172059146 +567 254 .13914711476622987 +569 254 -.7781455403162544 +573 254 .20317553571080638 +589 254 .8923381740942671 +591 254 .08652545974058319 +602 254 1.126669498460008 +611 254 2.966565386733078 +614 254 -.025304234528490198 +629 254 .967966045386897 +630 254 .12589696382013935 +641 254 .07544264217532305 +646 254 .5445189438158621 +675 254 2.4908464026091086 +692 254 .21379520829739826 +707 254 -1.4763481470967963 +711 254 .5909654584855645 +717 254 -1.9519814437420246 +724 254 .6775404117334145 +731 254 -1.2571727713124747 +749 254 .8585347483335467 +750 254 -3.1148467591812707 +755 254 .274648437790117 +769 254 .057456779182312054 +771 254 .619396917076535 +814 254 -.04856718240226296 +820 254 -1.6838333778955166 +828 254 -.3377382808946484 +829 254 -1.8145008575668786 +855 254 -.8365156750008728 +862 254 .38370961629066347 +866 254 2.6893478163969835 +873 254 1.6575939395679566 +876 254 3.094051176366259 +877 254 2.4413325797428835 +898 254 -.5327335821946018 +904 254 -1.2719995797562254 +920 254 .9951724422161299 +936 254 2.0022689955701893 +937 254 -.13164197315961124 +951 254 -1.9487050968864166 +959 254 4.1259082406092 +981 254 .44958606931189127 +996 254 .5159296355113117 +1000 254 -.9237265996814703 +1 255 .4147030451828374 +2 255 -1.2649795278541545 +29 255 -.06236840375231989 +33 255 -.09928021528313387 +44 255 .7331239794788844 +53 255 .3947195178038333 +58 255 -.37849549373901636 +61 255 .5296510614652375 +120 255 -3.0673974451349904 +132 255 .07466551505510388 +135 255 .2700682669424346 +156 255 -.08516057122365889 +162 255 .8848273540538231 +189 255 .022868976796249885 +197 255 -1.038120207102161 +214 255 1.7448715333984675 +220 255 .01684445786803071 +224 255 -.20592052397852903 +236 255 .4808990064910702 +259 255 -.6965453536446773 +260 255 .013488315479528251 +261 255 -1.5571171209856034 +263 255 -.08733829911895075 +264 255 -.46328385695817725 +265 255 -.619929365495719 +275 255 -.7612996327643192 +286 255 -1.1055641750727792 +297 255 1.083579735193819 +300 255 .6905421249897791 +305 255 .556724187898113 +307 255 -.5798240205969719 +316 255 .09225137658226523 +337 255 .8473196371759054 +356 255 .6548649671463029 +367 255 -.7253161372705086 +372 255 -.1329520759856343 +385 255 .2658311602032573 +405 255 -.07607987146931176 +406 255 .8162166896581231 +408 255 -.7927566464757143 +425 255 1.6036648671670852 +426 255 -.9564909972483114 +428 255 .010026614263516273 +434 255 .3669505354597399 +436 255 .27207804126485835 +462 255 -.38788128046173403 +466 255 -.8253062071639693 +470 255 -1.4569877417969994 +487 255 -.5979724439306787 +516 255 1.6516514380568132 +519 255 -1.1523289531581198 +533 255 -1.0072743806542506 +537 255 1.161551374536687 +538 255 -1.8598002664025362 +545 255 -.1688658487238262 +578 255 .715731440122072 +579 255 -.0765039023712738 +583 255 -1.3807856993444465 +585 255 -1.6220147433448948 +593 255 .26332356651127403 +594 255 -1.2465051607405206 +618 255 -.09641134642447152 +619 255 1.0863506659104079 +630 255 -.30014679019246054 +631 255 .22447206623404564 +633 255 -.42987220427033057 +665 255 -.4138889139485939 +666 255 .4896359355046827 +682 255 -.345100078964373 +685 255 .22993738133935324 +693 255 -.07258035957807867 +694 255 .25830756110114683 +704 255 .25959240119999155 +778 255 .8061528911815878 +805 255 .2804450706315819 +820 255 -1.4789492799604038 +844 255 .3654347281062525 +856 255 .06489705227338088 +886 255 .644096336671079 +894 255 -1.8744105161722728 +900 255 .012979826972875919 +909 255 1.5015119573532094 +911 255 .9076644419869 +951 255 .6376349264072638 +955 255 .3874302447548952 +983 255 -2.2330420491731835 +984 255 .261977539577604 +24 256 .12514042174893802 +26 256 -.9976097923462874 +32 256 .4227927795940052 +41 256 -1.1605290467572555 +42 256 -.1454712540396114 +67 256 -.46165773985963393 +68 256 .65744544067018 +69 256 .547521610241082 +71 256 -1.279355427331164 +73 256 .3215318369041459 +76 256 -.04841690035841134 +82 256 -.47857982597419435 +83 256 -.27827257863899685 +88 256 -1.210491889037872 +90 256 .9609719774417382 +94 256 -1.8619496389622983 +100 256 .32786478206015474 +107 256 1.550859385097259 +118 256 -.09089711013486437 +119 256 .5316972023813348 +127 256 2.3254015881045267 +151 256 -.16247863341817903 +157 256 .28423406032719983 +160 256 -1.2745657849771965 +176 256 .6089744939882306 +183 256 -.27036000940067406 +191 256 .4329656121414801 +231 256 .04475755575858438 +246 256 1.5256355385155078 +247 256 -.23021492479262348 +253 256 .08733912825890434 +255 256 -.8004033984059973 +259 256 -.3370532615946325 +267 256 -.7537143804152466 +299 256 .16442995165052038 +306 256 -.6634944329083792 +312 256 .8281322601715188 +314 256 .28026516949331565 +321 256 -.6091757163308121 +343 256 .4906861826129387 +346 256 -.21466574816939693 +355 256 -1.424358082731508 +369 256 .04000082245025427 +372 256 .36002357171548893 +375 256 -.6759850921572443 +376 256 .8017080048469116 +382 256 .9053998881323092 +391 256 .556803718473581 +400 256 -.45746093959934553 +402 256 .0838055801260986 +403 256 -1.4114215461723942 +407 256 1.3735496692489253 +408 256 -.3966590711989734 +412 256 .415431787090275 +423 256 .6460515436257556 +444 256 -.5099306536430732 +446 256 -.10467277675927504 +452 256 .22780317157821192 +473 256 .34245971395070957 +484 256 -.3457193154009631 +488 256 -.5740510129314099 +511 256 .4671982355573018 +514 256 -.5146347162564745 +519 256 -.19551225433952235 +523 256 .4181417149314802 +525 256 -.8324443138226101 +530 256 1.67454470404758 +543 256 -.5634488018011814 +550 256 -1.3669448039726944 +553 256 -.6764997028893383 +556 256 .3679249593747051 +560 256 -.3086470105073283 +561 256 .1389076845345579 +565 256 -.08975476576298372 +579 256 .17799357151178988 +586 256 1.4264588158562144 +597 256 -.41881400945041447 +623 256 1.0544452649966387 +629 256 1.3419777154962207 +643 256 -.6555596305413842 +648 256 -.7336134873511002 +656 256 1.237681510549559 +657 256 .5192476590665908 +660 256 .23539991569368987 +662 256 -1.407185065472999 +664 256 1.1347713637176413 +671 256 -.23792329454316016 +673 256 -.09051371372709517 +676 256 -1.022288801700805 +688 256 -.9187161879902283 +704 256 .6511660800807612 +705 256 -1.4229196330864726 +720 256 -.7004426936912779 +751 256 -1.1889454685697645 +752 256 .6594838790069623 +770 256 1.0595360290377924 +775 256 .4778844356697285 +776 256 -.08399369756801206 +779 256 -.9955953258983095 +782 256 .5406608742786355 +789 256 -.018569193277003238 +791 256 .09305439637865556 +792 256 -.6719742504779675 +797 256 .03958424452324147 +803 256 -.08471536904821482 +808 256 -.3542753925551602 +810 256 .275928600923993 +818 256 .3702751669347941 +831 256 -1.0620134532788397 +837 256 .3214272390644894 +839 256 -.41030431937619183 +840 256 -.022366399871312462 +857 256 .6953186422762336 +864 256 .21132733479985988 +897 256 .20877320890151022 +901 256 -.7358793372382861 +913 256 1.092995370417579 +916 256 .2193448042241669 +924 256 .21506842609148435 +939 256 .2474030609213857 +953 256 .5504556976723802 +963 256 .3785614578785518 +971 256 .8588671476332319 +972 256 .0767940670484519 +985 256 -1.442397044987863 +13 257 -.11103442923946105 +37 257 -.009653399217739403 +39 257 .48947637920679515 +41 257 -2.896392626372551 +66 257 -1.8113731300963591 +104 257 -1.2553948354863325 +127 257 .15352055877137832 +133 257 -1.3165265887938828 +150 257 1.371763042093595 +156 257 .09160287844427722 +165 257 1.090932812789767 +167 257 -.6811082833892551 +168 257 -.488199659840723 +173 257 -1.0291450485007492 +198 257 -.15777459552218778 +204 257 -.6148319795060643 +221 257 1.8146094910446233 +235 257 -.007554668956593569 +238 257 -.49402014434468217 +239 257 .8631898644241215 +244 257 -.6736448534171189 +245 257 .16044927412360058 +246 257 1.2221853573731378 +260 257 1.5137225897483528 +262 257 .18462323657804192 +266 257 .2841736756184038 +268 257 -.6123120090662184 +273 257 .5958317851626806 +277 257 .6892254762966293 +308 257 -.8216941120852108 +326 257 -.6009941600308694 +336 257 1.6376760483744481 +343 257 -.39420378055814953 +344 257 .15760259012989158 +356 257 .7516863023648406 +357 257 .3122326922335722 +379 257 -.3204604208195788 +398 257 -.5885262941917427 +402 257 1.1342360276831207 +409 257 -1.332465495619292 +412 257 .1438441942255367 +423 257 .4253078199379523 +429 257 -.46340256600852936 +432 257 1.0699795833529535 +435 257 .13291200051548313 +436 257 .07267430258980909 +449 257 -.9767421588385093 +463 257 .12745265087060476 +477 257 -.673001648175749 +491 257 -.34965511753654327 +499 257 .7245634520780206 +501 257 .4092537069818142 +502 257 .5875638618086977 +511 257 .4579913781222408 +519 257 -.45055124367666655 +525 257 .8754563667600601 +529 257 .9278362821448621 +534 257 .9009888886571699 +542 257 .72802013220278 +546 257 -.586336031243068 +550 257 -.34171765511701235 +561 257 -1.0698398566427558 +572 257 -1.579263101688548 +573 257 .3234745517116452 +624 257 2.030913505903178 +629 257 .9461944629038542 +637 257 -2.1640190494014173 +640 257 .43285944755899175 +681 257 2.011828058105441 +688 257 .22576539064578627 +692 257 -.35645935120438177 +693 257 -.4674793610065298 +707 257 -.5996657395908181 +716 257 -.01951967832322528 +721 257 .6111153754928507 +728 257 .11146829207035605 +751 257 -.9007649521952231 +753 257 -.6497879774517533 +759 257 .19695689393932622 +769 257 .5095380209733906 +784 257 -.8896910609981686 +791 257 .9905338711388546 +804 257 .5503689868267555 +817 257 1.0303234108188548 +833 257 -.7475168788407545 +841 257 -.7867446646008049 +852 257 1.8246976699239097 +871 257 .014691407609475644 +873 257 -.044616178514049865 +879 257 .5917881484679215 +883 257 1.2193668279561647 +884 257 -.8257290258421868 +889 257 -.8996705609248576 +895 257 2.0834044294535174 +904 257 -1.1582421217015444 +916 257 .32187550872119575 +919 257 -.455342430303736 +920 257 .8112265755628597 +930 257 .3466389698036247 +962 257 .020192854212193856 +972 257 .40215517495757436 +998 257 .5303212693982212 +1 258 -1.6813549740266867 +15 258 -.7229809096346265 +17 258 -1.4690019690085383 +25 258 .14040372726727665 +30 258 1.7635198585636709 +39 258 -1.1228380812169718 +67 258 -.9126032196417813 +73 258 -.17310878604230623 +76 258 .7407056868620773 +101 258 1.6021211729945772 +110 258 .04222333520931694 +125 258 .18282745746340523 +143 258 -1.4312091353747332 +149 258 .7838911281735346 +151 258 -.057572894926865084 +153 258 1.4722267527870916 +158 258 -.6568461376854969 +169 258 -.7091549281556137 +170 258 -.7762179984594307 +176 258 -.15480129968609696 +183 258 -.8569234284063949 +197 258 .6793741955285363 +201 258 -.43459464858988683 +207 258 .9856103732512649 +210 258 -.37345224074183847 +221 258 .31558870055782906 +244 258 .6356457915821452 +245 258 .26189364798726217 +254 258 .9312431346759521 +265 258 -.4722157316564561 +284 258 .3637399170614724 +287 258 -.6402458825687553 +288 258 -.2726488649923232 +294 258 -.026053020173182506 +320 258 -.9429664871963134 +325 258 .34317816758881103 +328 258 1.3225859986873987 +332 258 -.39162870561758384 +356 258 .07244080020501827 +372 258 -.43932573540641146 +375 258 -.4009915211631511 +385 258 .9001221219929864 +398 258 -.7677843040506134 +399 258 -.15497961399987556 +406 258 -.7093141175121125 +428 258 .5948746876144536 +441 258 -1.206078481469482 +448 258 -1.1331333287051544 +449 258 -.3994033880233646 +461 258 -.8502559443905806 +471 258 -.08208618851576033 +472 258 1.5113405282377739 +473 258 -1.4092252827541438 +486 258 -1.5841688746994358 +488 258 1.2542374815681474 +490 258 .9919387065940732 +512 258 1.8188639408625609 +550 258 .9123216699161036 +557 258 1.766294222354849 +561 258 .010709526056607514 +597 258 -.8318156209100912 +606 258 .35959200904261995 +609 258 -1.8879233686842136 +625 258 1.1748714822573034 +641 258 -.9195544639062685 +649 258 1.0114185875251496 +673 258 -1.0916619969192518 +701 258 -.5138456479482749 +702 258 .13294209641281202 +704 258 -1.161218514479977 +710 258 -.4983693904724358 +720 258 -.41655244655851725 +727 258 -1.8441522801479209 +748 258 1.7821353459432088 +756 258 2.3847795801112426 +760 258 -1.322207940037896 +761 258 .9194367712040171 +764 258 -1.1700023371128725 +781 258 .13256709438266148 +792 258 -.8663292555914195 +803 258 1.0462559580921664 +806 258 1.0292349187367 +824 258 -1.7770122281186458 +832 258 -1.960114807902841 +839 258 .14754443711094714 +849 258 -.9514823629253321 +853 258 1.1254045981960186 +854 258 -.459493441445444 +858 258 .3400696684155381 +884 258 -.9223633100651338 +886 258 .5901053056045127 +890 258 1.5069910895913294 +900 258 .9139649012325864 +908 258 .8962033870685583 +925 258 -.8206491352871459 +930 258 -1.6696869182252863 +947 258 1.8403066628430569 +957 258 1.3006112400246088 +963 258 -.6602015138685309 +966 258 1.440120340274091 +985 258 1.708378879709086 +992 258 .924903189998417 +999 258 -.46235819149088314 +1000 258 .20828112478848615 +5 259 .6515279607288667 +9 259 -1.359538351775604 +20 259 -.03868366811059437 +22 259 .5303119935138229 +31 259 -1.5357999087439649 +39 259 -1.15100612362262 +40 259 -.9913183352328879 +41 259 1.3526897528748318 +50 259 .9977380875468038 +55 259 -.9519441766616059 +58 259 -.3242817677613661 +59 259 -.7902627840903037 +75 259 1.8777295993711673 +76 259 -1.1928711949550586 +82 259 -1.8156206756557651 +84 259 1.1755017604185831 +86 259 -1.3826783470747988 +91 259 -.6446254833352957 +103 259 -1.4457139238462315 +118 259 .8036775624440488 +121 259 -.5928153702198155 +140 259 2.2279433891212 +147 259 1.351978755548272 +152 259 -1.3256471120051692 +154 259 -1.7302357677456652 +171 259 .466487151425433 +193 259 -.9457056714225551 +209 259 -.6583220781491435 +224 259 1.5978998240315088 +233 259 1.914371535958326 +240 259 2.8348372257133083 +251 259 .5334100348499895 +258 259 -1.1161717992621836 +261 259 -.5954710335843785 +278 259 -.9209306083742045 +279 259 .40236728462887633 +297 259 1.3362582727553436 +308 259 .4227488657226424 +318 259 -.16364461483199574 +335 259 1.3891159427826796 +342 259 -.31655753205747694 +378 259 -.3241138390442603 +386 259 .1973436447331688 +398 259 -.677573486522445 +404 259 1.680612723492695 +409 259 2.7175642954571 +414 259 -.9154120142300798 +421 259 1.1095048841682862 +431 259 -.193448745819064 +439 259 -1.4676285829060844 +443 259 -.4585071155535022 +471 259 .11596155056812335 +473 259 -.6306475520214146 +492 259 .9517366036180289 +511 259 -1.4636174755400708 +523 259 1.6157795072136623 +542 259 .004015769466550745 +553 259 -.515164284626223 +560 259 -.5462207875108077 +569 259 .7326823273852385 +584 259 .3136069202765472 +586 259 -1.764716763978551 +623 259 -.25996147173126816 +630 259 -.12127548906180877 +659 259 .7142913287726962 +665 259 1.4565623353625066 +672 259 -1.3766206793855564 +675 259 -1.439130459856332 +684 259 .4288482809332147 +686 259 .2307384663343734 +693 259 1.060050442526003 +719 259 -1.2360844123281813 +725 259 -.6138784679366199 +735 259 -1.1517103535580984 +741 259 -2.603949253437372 +754 259 .8282502958061692 +761 259 .5932972359958972 +777 259 -.6519583751088961 +779 259 2.857097715546752 +795 259 .5196958126775965 +805 259 1.8010903859107583 +813 259 -2.2366467619881862 +818 259 .9777958804016686 +825 259 -.6488410488490273 +831 259 .1548563410363813 +845 259 .06588363792955265 +850 259 -.7920951989092601 +853 259 -.716710092173118 +855 259 -.5527859769092833 +856 259 2.0584841244795937 +885 259 .7143106375366248 +890 259 -.45167676155816766 +903 259 -1.9715956647353257 +905 259 -2.225492066706406 +911 259 -1.348552760829647 +927 259 -2.5209126175511596 +928 259 1.45092420454724 +941 259 -2.018165388464112 +942 259 .652787253053194 +958 259 .06062565991369899 +970 259 .8715586196373714 +974 259 .5242277567459948 +985 259 .6723611647280963 +993 259 -.3785960676776218 +998 259 -2.6130317086580637 +21 260 -.7152261128886741 +37 260 .6792907483610543 +41 260 -.6509758814556219 +43 260 1.0048588667125096 +46 260 -1.5332187875008279 +59 260 2.1089252347700724 +67 260 -1.011024652982174 +69 260 -.3942617274854254 +84 260 -.22270662391924612 +85 260 1.9043979140794782 +86 260 .0748636896087907 +100 260 .42197088142069056 +113 260 -1.3216446116544731 +117 260 -1.4166656043199595 +128 260 .5082833267762827 +135 260 1.5480579980690865 +136 260 -2.535969764195657 +140 260 .7119415160474885 +152 260 -1.7544670111887062 +154 260 1.061734003540411 +157 260 .23710431818236663 +165 260 -.10129080382037735 +166 260 .23575192868802153 +170 260 -.6878191239247932 +198 260 2.2039293021622193 +201 260 1.222421854891397 +222 260 .6328717029795834 +232 260 -.8711966004920221 +244 260 -1.0457783188807563 +249 260 -1.496605688197377 +250 260 -.6348618484917973 +265 260 -.2062063689083023 +282 260 .11989839209327849 +296 260 -.6122003136490101 +312 260 -2.2836711519253865 +341 260 -.25709270433995013 +349 260 2.4379549309684534 +358 260 -.68617266888408 +371 260 .26554883216611325 +382 260 .8802478014849331 +401 260 -1.9173115476581675 +404 260 .2726030651930925 +434 260 -1.3530584596403534 +441 260 -1.6399390666651756 +442 260 -.772383286160768 +452 260 -1.169532934967593 +467 260 -.09627402318008985 +483 260 1.0768206626510648 +486 260 .9110383135310416 +516 260 -.9432610440710968 +521 260 -.8402722712276596 +526 260 .0168878159190273 +536 260 -.6775598654833088 +539 260 1.0843366052321814 +554 260 -1.9664286838989975 +558 260 -1.3688419815832438 +580 260 .35458652947374136 +584 260 .40184159044000656 +589 260 -.25798017307015125 +598 260 -.7196617616236137 +602 260 -.28752516188798055 +609 260 .32814229393981337 +620 260 .6556965979335634 +632 260 .8215524373387403 +663 260 1.4787575063807188 +670 260 1.8286048120424336 +687 260 .11128353026082898 +693 260 -.2540684450257824 +708 260 .2714911318579525 +728 260 1.0519620349694323 +729 260 -.3810757269861482 +742 260 -1.0486363114750146 +751 260 .21070639416906708 +753 260 -.4579676708965287 +755 260 -.9568017664301779 +758 260 1.9068113205221815 +767 260 1.6114106571073528 +771 260 -.15682588031208308 +775 260 -.0672457609645287 +777 260 -.5471625511289809 +782 260 -.17457366767487054 +786 260 -.7932205375957438 +796 260 1.0354642981461828 +801 260 -.3716843796621835 +816 260 -.5611748365288004 +821 260 .5284219625914589 +825 260 .12095347162918799 +847 260 -1.6651372830548095 +848 260 .09575560175998735 +856 260 -.22674866567039736 +888 260 1.9943006821878995 +897 260 1.4757570818196908 +909 260 -.8249135934031188 +924 260 2.2568004151822305 +926 260 -1.1782970627730058 +934 260 .4776971308216976 +953 260 .729487020180423 +956 260 -.490998305415591 +963 260 -1.585880325830345 +974 260 -1.0733958735778657 +986 260 -.5194494161249958 +998 260 .04782743958788939 +10 261 1.2485019240434956 +18 261 3.9986165648591183 +37 261 .9724482481204269 +66 261 .9584550039875956 +74 261 1.3531879585465343 +90 261 1.2399447795627827 +109 261 1.952271458737902 +146 261 .21166764700968327 +156 261 .12678108541398564 +158 261 -.6384449158881179 +163 261 1.2451378382750953 +167 261 -.7317502322631023 +173 261 -.21333281383859481 +174 261 -.7101014916873891 +180 261 .8847242454525175 +191 261 -2.1445733762204355 +221 261 -1.8437186781706245 +228 261 .817269201503925 +241 261 1.5371695744508211 +244 261 -1.3018393205385472 +247 261 1.3248525534464486 +260 261 -1.1980037516830684 +276 261 -.7511317526398639 +292 261 .3607399000000699 +301 261 1.8891261178488752 +335 261 .24292784901320774 +343 261 .3189464070718247 +355 261 -.545675408456605 +362 261 .46056034331307344 +383 261 -.9237619689037797 +395 261 -1.9461660770484444 +405 261 -.7578635814168055 +409 261 -.6429284117235822 +416 261 .48119894732384094 +418 261 -.9825878301351775 +425 261 -.6004726574853783 +458 261 -.09185882910305218 +459 261 -.54432283668584 +466 261 -1.2135194466043744 +471 261 2.2354202818101117 +472 261 .21032644447071186 +488 261 .2973523271373603 +492 261 1.254274112252692 +496 261 -.39520564470829445 +499 261 -.34884434366084444 +508 261 -.8201973267691532 +511 261 .6098077836299384 +532 261 -1.1856709393496443 +566 261 -.556902851745648 +567 261 .8125014490471396 +585 261 -.6337296837636232 +592 261 -3.3578482954056006 +612 261 .319073896396535 +666 261 -.7142391424624404 +671 261 .8635753882193665 +684 261 1.9015751798759368 +691 261 .15522956697078355 +701 261 1.4040211465850894 +720 261 .8550503479904543 +723 261 .551724213573803 +729 261 -.4938584104218239 +730 261 -.6289257264120073 +732 261 .4103237148772541 +739 261 -.9559012329964924 +748 261 1.4447665829642238 +752 261 .496070976540019 +759 261 -.7991805743685307 +774 261 -.19529352001999817 +792 261 -1.0272712376561608 +797 261 -.9871120397282548 +799 261 -.6638028721666311 +831 261 .4237133329066656 +838 261 1.9431573435742977 +846 261 1.0072322747316251 +856 261 1.4685895890625944 +862 261 .26890956749518385 +873 261 -.49316283284710183 +874 261 .08986775157889298 +875 261 1.761920390636551 +880 261 .5385750367733102 +885 261 1.2382649251510844 +896 261 -.038898643034864705 +898 261 1.0463352515819007 +915 261 .12072289105556594 +919 261 -.9061015784469005 +944 261 -1.2787510397825004 +961 261 .09050215124922008 +975 261 .20246612370049472 +980 261 1.1754757031317606 +994 261 .7730268250923291 +18 262 -.7617249785520521 +26 262 -2.0222011304768057 +27 262 -.9340384836264232 +35 262 -1.3145142717805187 +41 262 -.152845552976517 +70 262 -.27160622406391544 +83 262 .35148941197925154 +109 262 -.0817682666132711 +128 262 -2.1107806371650755 +134 262 1.0894965312315479 +168 262 -1.5617421445082658 +172 262 -.7226163934246503 +186 262 2.2964564616676366 +191 262 .600973463086147 +192 262 .45797981371220625 +200 262 -.386638801246524 +205 262 -.323423197590816 +209 262 1.301047081403186 +213 262 1.2462834957059732 +220 262 -.7264451153030979 +228 262 -.029853112931528134 +229 262 -.594517908122113 +239 262 1.4608452308212105 +251 262 .31398314776152114 +259 262 -1.1697678015449338 +267 262 -1.4592805676466987 +291 262 -.20712651167616408 +299 262 .6830180880606597 +305 262 -.33491547848342484 +306 262 -1.043553991017444 +307 262 -.8601994802741276 +320 262 .7485803076552973 +326 262 .8252826347543418 +343 262 -.9892317003300596 +355 262 -.6922375048578325 +365 262 .916208613012613 +369 262 -.39010585522756797 +378 262 1.4884302227696793 +382 262 .9049282497519459 +385 262 -.08744788507830872 +387 262 -.19681250404733192 +392 262 -.008532366241391528 +412 262 .32940171928598827 +415 262 -1.0528064685447136 +419 262 1.0087513535344779 +426 262 -.6184921733410905 +434 262 .590291246334411 +444 262 .6121182244606592 +475 262 .6350675244730134 +502 262 -.7484048068374483 +524 262 .5438701704351104 +529 262 -.11711875142438175 +537 262 -.7343909478987827 +542 262 .10570545941802154 +548 262 1.182434032146332 +550 262 .014686593424406896 +560 262 -.19663647685506314 +579 262 1.0746881301426678 +602 262 .47858110008759386 +604 262 .2787784989134408 +613 262 1.6918180215280976 +615 262 -.027595746954284378 +628 262 -1.9180375357799855 +634 262 1.7601691620114344 +649 262 -.6211274431393556 +651 262 -1.4037159866517415 +661 262 1.7076252925659283 +665 262 -1.29910985237559 +667 262 -.7424396395543547 +669 262 -1.1375097856904786 +677 262 .10554402413530689 +690 262 -.5247159503784007 +695 262 -.24064218129732257 +699 262 -.5314560696917972 +702 262 -.24433145674338486 +711 262 1.194438385094455 +735 262 -.5503290038841085 +746 262 -.6894514923750448 +754 262 -.13709973510533074 +760 262 .05084437678437201 +764 262 .47767017971850445 +765 262 .8579155975845264 +772 262 1.147569577434646 +773 262 1.3249163218544557 +793 262 .9548711276601959 +824 262 .6613064177098027 +847 262 1.1417638696018808 +861 262 .7800647738775435 +862 262 .10437799559174055 +884 262 -1.080587386972053 +887 262 -.6194339178398102 +889 262 -.4736564696721706 +896 262 -.09389457438412854 +908 262 -2.31385984841537 +922 262 1.866218725795015 +925 262 .37221366510441733 +926 262 .42497447711083985 +928 262 .5141961865804474 +937 262 .059340109265846944 +952 262 1.6263423415493592 +956 262 -.09408466281378827 +957 262 .41045832040140695 +967 262 -2.2767173815400423 +968 262 -.5373306950115722 +973 262 .8977894707303709 +976 262 2.6255692155825767 +995 262 -2.02189767555605 +3 263 1.692352609277564 +27 263 -.5042952006616324 +29 263 .625436940014542 +42 263 -.5287719458059621 +62 263 -.5681341179814096 +73 263 -.11419461514220683 +76 263 .9162334960056243 +80 263 -2.0489601527176755 +87 263 .9671664953662549 +95 263 -.8297949177913114 +102 263 .7952150868990535 +107 263 .12514559193432395 +117 263 -.10668827213059068 +123 263 -.5228392621393453 +137 263 .9561436128391174 +156 263 -.6032464151920287 +157 263 -.1370882466499241 +169 263 .2912697056272878 +180 263 -.9335988137350933 +191 263 -1.6440294999881806 +208 263 .1508210910939257 +216 263 .9516350500360973 +237 263 -.9511580736168089 +239 263 -1.625671545397839 +244 263 -.7636401805658912 +256 263 .6871954994346077 +268 263 1.8248035961286073 +273 263 -.20745722487930718 +277 263 -1.8864997410934436 +293 263 1.5695392696885626 +294 263 -.171355566962496 +304 263 -.12803630413552425 +319 263 -.2668047914709403 +344 263 -1.1853590701824743 +345 263 .2140686883651341 +350 263 -.8090458170460612 +357 263 -1.352581830085549 +364 263 -.6286178851623558 +365 263 -.9186808294673224 +367 263 .8438467420946931 +371 263 -1.0040871598073 +381 263 -.545974591278781 +383 263 -.09179081642886307 +385 263 -.9317020037279902 +392 263 2.298131342854295 +405 263 -.6238620621371678 +407 263 .5613422192419056 +415 263 -.5037128260799625 +420 263 1.5618950810491428 +432 263 1.1430707331821235 +433 263 -.31101802062960826 +435 263 .7460986881697051 +436 263 -1.6150951382884458 +446 263 -1.2381316875332877 +450 263 1.1346732635359973 +467 263 .01808685227554948 +469 263 -.3411102416371964 +472 263 .5178935262663363 +501 263 .2139130340154461 +513 263 -.3813706001180859 +517 263 -.681892665118188 +520 263 1.0549299241689025 +524 263 -.4886192105189718 +526 263 -.6418258446515647 +527 263 -.8411250572191052 +548 263 -1.563890960981976 +555 263 -1.1163818780347463 +568 263 -2.8674129888953686 +575 263 2.085421994976523 +582 263 .7209298628195561 +584 263 .3319716635604773 +586 263 .3388094546898342 +587 263 .288816014647277 +590 263 .8198195848713984 +593 263 -1.3989565556774122 +600 263 .01903649761682849 +612 263 .7862690248217497 +623 263 -.3545592561344971 +637 263 2.1189493673264623 +645 263 -.27769271097604253 +669 263 1.0655231743372868 +676 263 1.092023963880773 +684 263 -.03177559680562561 +694 263 1.508951609653098 +701 263 -.7592728257369294 +706 263 .9573174187374272 +724 263 .2597841395398751 +732 263 -.6439053410407771 +737 263 .44882722292957705 +738 263 .39772148545955505 +750 263 .2715222134145413 +758 263 1.6362296751346486 +779 263 .285250193755341 +786 263 .9035966495736739 +790 263 .5528425103492443 +796 263 1.1056167667225725 +821 263 .4190055623716479 +831 263 .5033611045853454 +838 263 .3071998352002596 +848 263 .527078597378391 +860 263 1.0521551429000862 +891 263 -1.7370774820893353 +905 263 -.294984008292207 +916 263 .2801231397636409 +918 263 -.017920112062391837 +951 263 .02567752016584868 +968 263 .8829308216465073 +982 263 -.02275849517997397 +18 264 .7119512291090705 +19 264 .1390834464212532 +33 264 .5756331875092384 +49 264 -2.0020867767333823 +56 264 .8459512069107931 +58 264 .2354394681864061 +68 264 1.5087785167938323 +81 264 -1.0250715484744348 +83 264 -.41801181473389154 +86 264 .040975123367407267 +91 264 .35329543425555354 +97 264 .5625030797251611 +101 264 1.1285467990260465 +108 264 .5366849247485436 +141 264 -.9883923049513434 +148 264 -.5255226090133933 +166 264 -.019106585808126544 +179 264 1.4967865588434044 +208 264 -.09733007224363033 +220 264 1.1466066380949396 +239 264 2.0661648464048303 +241 264 -.12431687349934124 +250 264 1.0067129723223387 +253 264 1.3497061723053494 +262 264 .6362657503719061 +281 264 -.5509083091437059 +283 264 -.49500053719816195 +284 264 .5533458622272077 +286 264 .5669189805939713 +298 264 .00030221871271790546 +299 264 1.3101752506424953 +306 264 -.675275670389637 +335 264 -.5022140909573247 +342 264 .1467810158770424 +346 264 -.4443476289056826 +354 264 .9706300900185364 +361 264 -2.008839764642387 +366 264 .043850168217799884 +372 264 .7808241069991178 +373 264 1.8243382238155144 +389 264 -.3092398132813776 +393 264 .9249367185923743 +399 264 -1.2025857329319172 +400 264 -.3165498992347802 +404 264 -1.3130611193975361 +436 264 -1.3268386159041552 +440 264 .06988496809893865 +444 264 .24158030060759958 +484 264 .6751282196210616 +503 264 1.5104089321657392 +504 264 -.7118948971344989 +513 264 -.436977917660026 +529 264 .5579302580449093 +534 264 -.7009424606489749 +562 264 -1.9137931325397128 +572 264 1.236512276095632 +573 264 .2706339250552166 +583 264 .5610258587794713 +591 264 -1.5887141766525879 +602 264 -.007338014157663053 +617 264 .3927478997101158 +646 264 2.868667756842732 +647 264 -.1408547463151813 +648 264 .25603899018165654 +682 264 .8824905339242993 +688 264 -.4150381433351053 +727 264 .5472944806808147 +740 264 -1.9068128189123357 +748 264 1.1717475811014373 +749 264 -1.1299408906122625 +767 264 -.8193464967687942 +772 264 .8059399655615516 +783 264 .7410196250203247 +789 264 .06029676387808308 +805 264 -.6244842057461956 +820 264 .5667959772109747 +823 264 -.6795236664822463 +824 264 -1.2847152625512706 +852 264 .43829053717970895 +856 264 .2427159186638861 +875 264 .5709638578762728 +880 264 1.0848282510670917 +885 264 -.2589356909154632 +907 264 1.6870346224196948 +917 264 -1.3756269295477137 +949 264 .33142179902852403 +959 264 1.0995455295287577 +960 264 1.3077461439885323 +961 264 .682931630000802 +969 264 1.3434493702782633 +971 264 -.6280956975651282 +990 264 .9650758335317707 +998 264 1.0724062637952136 +999 264 .06884130649831689 +4 265 -.25611827867895065 +5 265 -.2248504994302591 +16 265 -.1148659665779101 +29 265 1.1744661123131863 +39 265 .6392269764761681 +55 265 .25076793282051807 +85 265 .8186453288669865 +89 265 1.1644353007515529 +101 265 .5399549799087122 +108 265 .16539008711700798 +111 265 -.21358381977893032 +116 265 -.5683293857342177 +147 265 .13624049295346555 +149 265 1.2357276579615202 +155 265 -.6774715017588976 +195 265 .5539634135107823 +246 265 1.1341534628405574 +248 265 -.28622030446360136 +255 265 .17418257488906685 +258 265 .2950558625946202 +263 265 .19848818314013597 +265 265 .7389137176105343 +278 265 .5759091804416756 +289 265 .48354103661548165 +304 265 .675088752191047 +307 265 .5325997766363026 +324 265 -1.3265841515579198 +326 265 -1.4522264169398824 +344 265 -.929971367142477 +346 265 -.5141563108627404 +353 265 .6088164101020439 +360 265 -.6715564948687517 +367 265 -.25015236690757087 +368 265 -.8239139634308731 +370 265 -.3071091407703168 +390 265 .23036443708132237 +420 265 -.14853774322828442 +425 265 -.5894974117956793 +427 265 .05940744043330404 +442 265 .4526243128224222 +444 265 .14816836991377366 +445 265 .25969383673666563 +446 265 -1.0596205517583572 +451 265 .4114665239103231 +460 265 .594735996507014 +476 265 -.34244412048355166 +486 265 .2382441960294107 +489 265 -.46100498198464146 +494 265 .06903316003975886 +498 265 -.20235840679885553 +512 265 -.29212776914917316 +514 265 -.8269273010483262 +520 265 -.2778346002203882 +523 265 .188317423240779 +528 265 .1683468856395698 +534 265 -1.071717211592231 +565 265 -.37965210178596015 +578 265 .2879661381656116 +588 265 -.49519986859444104 +593 265 .7852566693182472 +594 265 -.2973167250596077 +602 265 .1903400502197567 +606 265 .5161437579672006 +629 265 1.3151434637404522 +646 265 .38227810148914865 +655 265 .16375686583059582 +657 265 -.6021114298955459 +686 265 .25898703297728387 +692 265 .7167767559796604 +693 265 -.5095787445816063 +698 265 -.10406234378469478 +708 265 1.0808812724487966 +715 265 -.4882769334290239 +722 265 1.0169028472680655 +723 265 -.41237609857493707 +737 265 .36469142347227723 +758 265 -.6731860048027634 +768 265 .8658600363294326 +808 265 -.5855358894118134 +809 265 .17072385634317425 +810 265 .7491797768573991 +835 265 .6483174198718515 +837 265 .4086391022599245 +847 265 .5743204799746664 +850 265 .40122647614447926 +851 265 1.1459170144425177 +859 265 .24637932845890542 +860 265 -.24963826112375478 +873 265 .5724599483036797 +880 265 .28496845560756834 +888 265 -.4767485698775029 +899 265 -.11057077121172904 +906 265 1.4899773116090875 +909 265 -.009343226994544013 +911 265 1.1849621955007588 +949 265 1.09029897420689 +973 265 -.9681675255558593 +984 265 -.6014052496114585 +993 265 .35894641773699676 +10 266 -1.1874200014859095 +12 266 -.5859672376707076 +20 266 -1.0728953508845864 +22 266 .6931701796355558 +23 266 1.5833001938472422 +37 266 .02320016089370426 +41 266 1.1959777581487994 +55 266 .9751504960006825 +56 266 -.46457711333540014 +72 266 .8706338006698069 +98 266 1.2870674350182263 +103 266 .28693569601988766 +114 266 .18595778332422416 +119 266 .5670178309233814 +126 266 -1.0062049040252214 +130 266 3.050899549263901 +137 266 2.1326113653077887 +139 266 1.393886334757888 +153 266 -.6682174926228965 +171 266 -1.3165294456517664 +174 266 1.0494743529735742 +187 266 -.21502393297801042 +190 266 -1.551170122455748 +203 266 -.41257240475443274 +209 266 -1.344009555190942 +214 266 2.2993500442905477 +220 266 .16250095162990813 +232 266 -.015274977274469664 +241 266 -.5234771205166224 +242 266 .8298509482845392 +249 266 -1.0720059287445665 +256 266 1.5916119901912862 +270 266 -.15552394907028197 +281 266 .01813323924175658 +283 266 -.745200745144228 +309 266 .43307528528019934 +332 266 -.14669040635895814 +352 266 1.344738475973195 +371 266 .8201623539218297 +374 266 .9258966459801472 +390 266 1.397374809904507 +396 266 .6597416982781984 +420 266 -.0863671164301473 +449 266 .4845183714309215 +454 266 .011916597244794776 +477 266 -1.1206438863875792 +498 266 -1.062377534801577 +505 266 -.24391090399808663 +510 266 .6383820281225113 +548 266 .6470195965494332 +552 266 -1.3158514080560757 +556 266 -.01771399991200829 +564 266 -.13087785957283155 +565 266 -1.0392085971189835 +581 266 -.4664741791651776 +585 266 -1.687975801831883 +591 266 -.07798443934579102 +598 266 -.24161395777086625 +603 266 .874798775086912 +607 266 .5451932456808593 +611 266 -.968554998168139 +619 266 1.531553400442895 +620 266 -1.3419911725410159 +633 266 .631300806977737 +636 266 .05202945839576002 +639 266 -1.0295345378628553 +641 266 .42761466265654335 +642 266 -.8565426029426549 +652 266 -.06766094398955816 +655 266 .04658511152851652 +661 266 -.950457552216266 +662 266 -.3083403664640892 +667 266 1.0493129516468307 +674 266 1.1701064090204287 +685 266 .41760631132926845 +712 266 -.7257931813874837 +716 266 -.06332673854515528 +718 266 2.3650618439617075 +719 266 .4346390809689134 +722 266 -.0004902774574787327 +730 266 .4277477748661249 +731 266 -1.3260021824039858 +739 266 .19186089282621516 +759 266 .20384976341803038 +774 266 -.1612917554054913 +778 266 1.069882912163501 +796 266 .09901500204131458 +802 266 -.10566186290872044 +826 266 .8830415270457296 +830 266 -.6362631338796167 +832 266 1.3715024822264814 +856 266 -.28582619514708263 +874 266 -.4943959068040939 +903 266 1.5386681927321832 +918 266 -.9922453825411198 +931 266 .73297054279149 +951 266 -.13040471873039883 +959 266 -.04892116414586478 +972 266 -.14042445790279662 +975 266 -.9360902691225423 +987 266 -2.4785544329594464 +991 266 -.1955201755668338 +992 266 -.31591767807198035 +15 267 -.9159357882345918 +29 267 .04048225512877771 +42 267 -.12914369408125456 +48 267 -.9758077532367527 +59 267 -.9154022267241474 +65 267 -1.477484702542928 +80 267 -.5062573212829423 +104 267 .34896046958456095 +117 267 .015760801225484983 +122 267 .8059381399200723 +138 267 -1.0029177957789734 +164 267 .28431474763594 +169 267 -.4530009627096987 +172 267 -.3389444759378434 +185 267 .6254736175336398 +188 267 -.4587237027299996 +207 267 -.3829196623572852 +214 267 .5663989826615174 +222 267 .015459248082595273 +251 267 1.8883940847565943 +285 267 -.41957297482180606 +290 267 .2707085761090434 +301 267 -1.6516397242185532 +304 267 .35917411886121414 +306 267 .5251421627156709 +313 267 -.3239285766071209 +317 267 -.8884093297764666 +341 267 .3012799215190914 +347 267 -.9429296070313942 +358 267 .43480536330059033 +373 267 1.1715315889933653 +387 267 .7853417162074446 +405 267 .20555537203378554 +408 267 -.10095283758860943 +410 267 .7394298836683733 +422 267 -.7179946789472615 +434 267 .13035927412414083 +436 267 -.8234511292044915 +449 267 1.0722750169884312 +477 267 .7622712322971792 +485 267 -.25333255055894016 +495 267 -.2659901195759935 +503 267 1.5872711938285349 +506 267 -.6494059347358604 +525 267 .12853031222291025 +529 267 -.43369940416068814 +545 267 .9046716858515651 +553 267 -.05156317905545106 +556 267 -.9913233874326991 +566 267 -.691714762105861 +573 267 -.04724690437964714 +593 267 .5222299583688133 +597 267 .028806658888499648 +598 267 -.7686165391528164 +615 267 .8148111401368434 +632 267 -.44156589291247805 +634 267 -.8397903806307258 +641 267 .5169062578538419 +644 267 -.7704000833627818 +688 267 -.2827048461481655 +717 267 -1.604176428040609 +747 267 1.0040485695008552 +750 267 .5932969764760169 +763 267 -.39668801592062175 +768 267 -.10057312124841872 +774 267 -.8736758741696586 +776 267 .8581025117449056 +779 267 .5051647219571938 +781 267 -.739341160674161 +783 267 1.1299970924216096 +803 267 .898464797966107 +810 267 -.6138080620054653 +822 267 .14363107097858374 +824 267 -.2778544499272729 +831 267 .813288267681086 +832 267 1.18396999387199 +834 267 -.3191568438959885 +845 267 -.48592801722365225 +848 267 -.3742031563244914 +860 267 .037512497889526694 +865 267 -.08740397368217012 +883 267 -.9691207760798304 +884 267 .2877094217671573 +917 267 -.8335598106415472 +918 267 -.35091972029145646 +924 267 -.021992490012611148 +934 267 .0856826339664721 +939 267 .13318545876067697 +941 267 -.339224333510593 +945 267 -1.3519291614511044 +946 267 -1.0809271085418826 +959 267 .22434128990571783 +968 267 -.0757053805298107 +989 267 -.47276864605935454 +1 268 .4013613698738542 +47 268 .6786418570918207 +60 268 .4177978644808095 +71 268 .5755940249559911 +80 268 -1.1134109299515558 +98 268 -.07911167274345751 +101 268 .4622030891710529 +113 268 -.9398046988576785 +118 268 .4814015755484174 +124 268 .15478814301841162 +125 268 .45343111239883294 +126 268 .12856876601713102 +127 268 -2.0321307687698797 +139 268 .051965140195108145 +145 268 -.3031183617306979 +155 268 -.48062847211229964 +169 268 1.1546183764124005 +187 268 .21337642613835478 +209 268 1.0880852447318257 +212 268 -.3962927905329887 +213 268 .9418590838255948 +220 268 -1.4601719291920292 +223 268 -.5358082723161386 +225 268 -1.1387787220654846 +233 268 .3307182968342756 +256 268 -.6300137581099213 +257 268 .62529669341239 +258 268 1.51430696835453 +275 268 -.6810240104958374 +298 268 1.0798654112096484 +312 268 .46245961922945705 +319 268 .7778763388510711 +326 268 .8615209551224499 +340 268 -.1111427490874257 +373 268 -.5731289137219326 +376 268 -.6355992983741486 +387 268 -.2288877766465462 +403 268 .6031474071570389 +407 268 -.9078358634438082 +410 268 .5191922503144214 +413 268 .45869248904822557 +416 268 -1.2910665074757297 +418 268 .7087879464851711 +420 268 -.9367562740207201 +450 268 -.5286451566854351 +468 268 .5662237131474176 +477 268 -.6172433740293155 +482 268 .26595840504094004 +499 268 .08913957472301708 +549 268 .8620382628170362 +562 268 1.1201156700585153 +565 268 .1710683908979025 +594 268 .14552015280112254 +596 268 .686361365242913 +599 268 -1.7686363477354183 +603 268 -.6444793778892243 +617 268 -1.215067552172138 +628 268 -.592525604615349 +636 268 .006714740139231859 +652 268 -1.394162999336018 +669 268 -.3170965442675308 +676 268 1.4502442903655826 +685 268 1.2124404466565513 +699 268 1.7456459054790021 +714 268 -.4524076051298814 +715 268 .005995437593202146 +725 268 -.40315537341153107 +726 268 1.6357386144260442 +737 268 1.0028084247068052 +756 268 -1.9505855906272356 +781 268 2.4472990714078176 +782 268 .19846569044881723 +811 268 -.9433281111463385 +812 268 -.00811366939075915 +821 268 -.050075308076860614 +825 268 -1.4127322266321136 +838 268 -.8447857993421288 +847 268 -.8094442156589507 +863 268 .06714922562190674 +865 268 -1.0311521359084488 +866 268 2.052250751589211 +892 268 -.19527706697285818 +922 268 -.9354619120318504 +932 268 .8406448107792277 +938 268 -1.6588895339652887 +958 268 -.46738233206139124 +959 268 2.048727717890994 +963 268 -1.629292086203023 +970 268 .618075004313868 +997 268 .019015533486600004 +3 269 .5481207313773792 +14 269 .5707538385900587 +16 269 -.8259854583376929 +34 269 -1.5028009219709215 +39 269 1.358161262566963 +59 269 -.0059200847914332305 +63 269 -.522110561720377 +64 269 -1.5915680632045057 +82 269 .55161618545729 +85 269 .5489712514283144 +91 269 -.2917401311568107 +114 269 -.6133097264825559 +143 269 .10731911211398926 +144 269 .5834813830136549 +146 269 .5614546962197159 +155 269 -1.328292831078629 +165 269 -.2552171735323676 +166 269 -1.5190202420592813 +169 269 -.3639021934851676 +170 269 -.6050560163449401 +172 269 -1.2483811339783288 +202 269 -.9225558666606128 +210 269 -.5804255601961152 +221 269 -.09048817029450681 +241 269 -.3388820462363791 +257 269 .816143605506854 +263 269 -.03102725216221812 +264 269 -.16098633239645882 +295 269 .7045417960567707 +302 269 1.697068711792733 +309 269 .25486540114269407 +318 269 -1.6357209178622265 +320 269 -.13760310827468622 +358 269 -1.3838934929689068 +369 269 1.0189108988288422 +383 269 .08460438925837858 +398 269 1.0808033504592585 +404 269 -.9657168682810158 +410 269 1.1430180186504753 +422 269 1.395654853843189 +428 269 -.6825238828774591 +430 269 .6325384688757382 +446 269 -.16157338957286202 +458 269 -.4906872703447127 +470 269 -.11012678461936838 +481 269 .044523894902463945 +486 269 -.0773530744739489 +499 269 -.14395723218548184 +519 269 -.1534669665910276 +526 269 -.2427386188098165 +531 269 .15960733828084156 +540 269 1.20629088225121 +542 269 .4274931628188332 +543 269 -.41560661882638306 +546 269 .8921068026717193 +548 269 .05670956784308043 +553 269 -.5465476645020684 +557 269 1.7276259120600603 +585 269 1.1113689443376897 +600 269 -.19936564969677428 +604 269 .7725506001751012 +636 269 .13070419859020577 +647 269 -.5583380556925558 +664 269 -.35908733394477044 +666 269 -1.2696124721943194 +670 269 -.3972358279655499 +685 269 -.6126676128545672 +698 269 .39314791796470844 +710 269 .11106324757572822 +723 269 -.7389213946770733 +725 269 .9305377672528111 +727 269 -1.2404824554288643 +728 269 -1.370399139464546 +733 269 -.9404823090772525 +736 269 -.5452726039719952 +746 269 -.29072221758303984 +748 269 -.15529669145113295 +754 269 .4507543394736507 +764 269 -1.4737491304438604 +769 269 -.7446359203732522 +774 269 .1553571666629936 +786 269 -.12914702401254624 +808 269 -.11570472895513317 +818 269 -1.0763098592817248 +830 269 -.30522346695171615 +833 269 .737647172709547 +838 269 -1.9976480667206973 +839 269 -.8017475486640246 +859 269 .9794965464721986 +868 269 1.0667573070516374 +869 269 -.7220472879495143 +875 269 -1.4982015892816023 +876 269 .08857153986470148 +882 269 .6166979143171062 +888 269 -.9157354853892142 +895 269 .6349875559809843 +897 269 .9040954674584123 +913 269 1.2835612928244677 +942 269 -.6235737730733175 +944 269 -.7342616628581786 +956 269 -.6485988814164355 +958 269 -1.5986450028589363 +965 269 .5065179033309528 +966 269 .46739161460381595 +978 269 .18515213134284686 +996 269 .2790073820346088 +998 269 1.2481715204605766 +1000 269 -.396059828392576 +2 270 .3625521790160112 +4 270 .7501856811430734 +15 270 .546694043667223 +24 270 -.0511103544054307 +28 270 -1.2944727534469302 +30 270 -1.3462637237283692 +52 270 2.3044967449808538 +68 270 -.6377814455354954 +76 270 -1.5861302898687535 +78 270 -.9197716897237473 +82 270 -.37177005787855366 +92 270 2.4850943915197368 +103 270 1.8425313860165669 +105 270 .4496835484904532 +114 270 .8923098114884991 +124 270 -.48134577332713907 +141 270 .9216310910766499 +144 270 -.5451775269256806 +157 270 -.37104045781465356 +158 270 .3271330299113777 +171 270 .4724059460030382 +221 270 1.5690818742808268 +222 270 -1.8356372208060723 +231 270 .6747910737220516 +239 270 -.8882953586833663 +243 270 .8269975193051393 +268 270 -.6959889918935469 +269 270 -1.1198052156631124 +285 270 .14840428005291162 +293 270 -.34032471146740434 +315 270 .488467503878518 +322 270 .20770872757387382 +324 270 .5917408823154171 +330 270 1.2377176336724647 +331 270 -1.0168571925459158 +343 270 -1.746903189651069 +344 270 1.5666338904079733 +353 270 .5718765446017884 +358 270 .8507257363664653 +361 270 .08896025565357008 +411 270 .7876414095832577 +417 270 .899819359468581 +443 270 1.5994808025918643 +461 270 .805554429885827 +479 270 -1.661382806429869 +482 270 -.8133811724611376 +488 270 .5918912791775016 +503 270 .9623841081376318 +517 270 .7712280742661447 +522 270 2.29793691086331 +547 270 -.6219283353519216 +550 270 1.9250918676492512 +557 270 -1.9496869259291383 +562 270 -.6005889835924049 +564 270 -.5647739469320874 +569 270 1.6931653272610423 +571 270 .016802178664748292 +584 270 .6461949972411687 +589 270 .3895653852426676 +592 270 -1.285672380120656 +601 270 -1.1590208411705942 +602 270 -.363661362319394 +614 270 -1.0132915847729818 +629 270 -1.3243836327951775 +651 270 -.22736007492567117 +668 270 .8335115521834439 +674 270 -.8635050468446087 +682 270 -.4303773761819681 +688 270 .6009672588498256 +718 270 -.6443248233319336 +740 270 -2.0778196177219446 +750 270 -.11700969515557413 +757 270 1.5855336170733316 +771 270 .013346546299004308 +785 270 -1.496129448783468 +787 270 -.3560693355345063 +788 270 .8476719318886512 +791 270 .2629455321406401 +806 270 .19874769800330752 +808 270 -1.159010772811557 +810 270 -1.0558697745653483 +814 270 -1.4542127399176685 +824 270 .4859456889600138 +860 270 -1.0324045819532928 +887 270 .2961865301336606 +910 270 -.6415504219196821 +926 270 2.7922682060757644 +938 270 -.11621559516005281 +951 270 .18736824305638072 +954 270 -2.427135199105714 +970 270 .29817049909763516 +973 270 1.8588892670477914 +982 270 .6789958710544364 +996 270 .42373992943966404 +3 271 1.6370663980156355 +10 271 -.07485075708864938 +16 271 -.003388953069717735 +23 271 .5765187160193147 +24 271 .4302937286125554 +38 271 -.15990491074952007 +55 271 1.5812657512547246 +59 271 -.11916854517762826 +76 271 .37491528908464533 +84 271 .36927306647044855 +93 271 -.9296787264172519 +105 271 -.3819828035311308 +115 271 .6066216559500899 +124 271 .740848249237299 +127 271 -.8393009171255935 +136 271 2.1376070813870087 +166 271 -.9246777953326784 +172 271 .5468427853068668 +181 271 .11738816334106533 +192 271 .684031474403259 +200 271 1.0205772917222815 +228 271 .3988057889841226 +245 271 -.6821268726715631 +246 271 -.18194715129484057 +268 271 1.5800799784122541 +273 271 .1373229957529679 +275 271 .299369022839908 +293 271 .9775338285830597 +294 271 .125324916460757 +295 271 1.1287090542028426 +322 271 -.8181529682887889 +329 271 1.9030270847016564 +337 271 -.4767720552273844 +357 271 -.622173405902626 +362 271 .4288697695379056 +363 271 .9238676902240914 +384 271 .302792994610707 +394 271 .588072746833601 +399 271 -.4964334268643648 +400 271 1.5545090079516841 +405 271 -.7054928713967177 +411 271 -.9217787553682161 +437 271 1.008098681014827 +462 271 -.3211978815321533 +468 271 -.09196432703757956 +475 271 .44581477136975767 +487 271 -1.1886742946007742 +491 271 .1776973432031943 +512 271 1.0410338278241495 +524 271 .26593021662786553 +531 271 .7411572084903686 +537 271 -.8183949026192324 +538 271 -.19082883408490386 +575 271 -.24199391250327015 +603 271 .6581147509127522 +613 271 -.04167834433768236 +614 271 .6041579408431912 +617 271 .404300035129426 +643 271 .27426172767725554 +644 271 -.3757313593967982 +648 271 -.4446570334255657 +655 271 -.2223176293734959 +658 271 .46965294727914986 +661 271 -.41682086331839663 +666 271 -.8381204869014858 +667 271 .7736580056248747 +670 271 -.3159307046921257 +676 271 -.28753874929751955 +679 271 -1.2575758299591158 +696 271 .7737866451047177 +727 271 -1.4086952978520593 +733 271 -.4685316597707019 +734 271 -1.3086664669488746 +752 271 -.3843328495185693 +755 271 .09334922977586088 +773 271 .8981469109716709 +779 271 1.1305492193014524 +793 271 -2.046943569735475 +796 271 -.3684969185757177 +797 271 -.2669679773069114 +814 271 .41301492819080426 +817 271 -1.0234340172719711 +836 271 -.5935429513488133 +849 271 .7482658869011142 +850 271 -.05763245201752612 +863 271 -.7845182895823929 +868 271 1.9558941521039848 +896 271 .5626981597277033 +909 271 .11604868614467996 +919 271 -.23504620028681872 +939 271 .40248868315284914 +946 271 -1.3926013974992197 +985 271 -.5715550340623867 +994 271 -1.2754473021256933 +15 272 -1.2192646078280507 +20 272 -.1902364257582179 +28 272 -.9020802435419494 +30 272 -1.7963313751510719 +34 272 -.0509445371613203 +35 272 -.09159522437454924 +38 272 -1.5625279452703722 +43 272 -.6480756664438414 +45 272 -2.3828302376966586 +67 272 1.4358586982405916 +79 272 -1.880912340762249 +81 272 1.6890704637589142 +99 272 1.006649779647104 +103 272 .02253622504913458 +105 272 .7638650099887593 +126 272 -1.2388104745999966 +132 272 .576272855017046 +139 272 1.3303904476465338 +143 272 -.23300244354678828 +151 272 .5481220468268789 +153 272 -2.0238636417964266 +179 272 -.8707058409568149 +180 272 -.01340861476081058 +199 272 -.7354711494272431 +227 272 -.7349421147213328 +232 272 .060174638628312446 +247 272 -2.2373297499920906 +250 272 -.8719092467206906 +251 272 .8817839884302163 +255 272 .6105298764402425 +258 272 .6795236142013474 +266 272 .26889879350819035 +271 272 -.006815682551631293 +275 272 -.8833733460689642 +278 272 .5097672252195304 +288 272 1.6186517891897503 +294 272 .619892341381309 +296 272 -2.779046532671679 +303 272 2.411210321152036 +306 272 1.2193964023981394 +315 272 1.5621279609374428 +325 272 -.6249400731012392 +329 272 .011130838944071065 +333 272 -.18548780955032504 +337 272 .8266479546316864 +338 272 .5051241322570282 +339 272 .8337181203157319 +342 272 -.12519696621445722 +348 272 .16807605317892577 +387 272 .5642519743956107 +397 272 -.8656840391266828 +403 272 .8331796590972756 +412 272 -1.0198122646301582 +413 272 1.5502866632659689 +420 272 .837751645453317 +439 272 1.3913697658530526 +451 272 -1.1544829503736658 +457 272 -.3604965732393946 +460 272 -.29033036800443107 +481 272 1.0280026093152104 +485 272 -.19285193959716007 +490 272 .2826190019573833 +491 272 .8288693985316793 +499 272 -.4291373356614372 +500 272 -1.3824944078084551 +504 272 .591154551047061 +517 272 -.5692949222889675 +529 272 -.11191947021605628 +542 272 .6827412616857794 +543 272 -.40974499843861545 +563 272 -.25426034883568727 +599 272 .3699821355619262 +602 272 .35042600087598874 +616 272 -1.721117117127564 +632 272 -1.5506807997390024 +638 272 .1953765821496215 +645 272 1.1810024194234776 +652 272 -.3441993970838818 +686 272 .7486603378256472 +689 272 -2.2264209897643856 +702 272 1.1617383574493847 +718 272 2.5640088595848605 +736 272 -1.6644772047160297 +752 272 -.3418515773658104 +770 272 -3.207677609672266 +776 272 .5390609257267647 +810 272 -2.2342797004612254 +814 272 -.19600249203738776 +839 272 -.278732139719457 +841 272 -1.1386265585570354 +853 272 -.3464120061716317 +860 272 -.20739429585573566 +865 272 -.732856352348781 +867 272 -2.6139518379912783 +874 272 -1.4169532259274689 +877 272 -.8532488984134863 +882 272 1.1769996564815066 +886 272 1.8160933761160354 +887 272 1.107173751490197 +893 272 -1.2365206370096107 +901 272 .9887071966372161 +912 272 -2.772442216149238 +939 272 .15940018408826356 +953 272 -.08912651536503668 +961 272 -1.0793037887820234 +981 272 .42898817615002416 +990 272 .45318850510921505 +17 273 .08195709946788693 +45 273 -.5260593005508418 +50 273 1.2422108962860987 +62 273 -.07994659169731703 +68 273 -.7357600076503754 +70 273 -.04708035948837962 +83 273 .149789026490682 +87 273 -.01033823328813734 +88 273 -.3931582738398186 +121 273 -.024857496608888877 +137 273 .5557329821280714 +138 273 -.6560645079593612 +140 273 .30538326629553875 +153 273 -.3539324078666958 +168 273 -.3263105651758661 +169 273 -.09362794757046872 +171 273 .12816167754658392 +195 273 .6855940841539987 +199 273 -.3773898354748284 +213 273 -.2294241661480521 +219 273 -.2325102589093583 +230 273 -.8240769393847458 +241 273 -1.1380686191935754 +243 273 .1459883733551377 +244 273 .08677274731557494 +253 273 .36881960412852777 +260 273 -.08908207192971049 +268 273 1.5262593470751629 +277 273 -1.4019425296841184 +278 273 .5625842522832765 +289 273 .38734404044211224 +290 273 -.47562630024847774 +294 273 -.08992525569592612 +298 273 .6907498468896205 +307 273 .7766883016427979 +308 273 -.5277339803586835 +309 273 1.1138506259706242 +317 273 -.19070181256679633 +329 273 1.1770689540021684 +334 273 -.35003207620706606 +347 273 .55543025919486 +360 273 -1.1515036009388333 +371 273 -.2267536352324373 +378 273 -1.0706231268314526 +400 273 -.2208346417013605 +429 273 .930717882290004 +469 273 -.33526247656956765 +475 273 .05005091708549283 +478 273 1.2481040984083096 +479 273 .2178871605571323 +504 273 -.9565389040608839 +529 273 .2482055156709325 +534 273 -1.4397809747471473 +540 273 .3064355239489611 +544 273 -.2026691977559672 +548 273 -1.5006275823182382 +557 273 .23066610883724006 +590 273 .4506930141338262 +594 273 -.08051105034343475 +625 273 .8931115551000958 +629 273 .7901323757948017 +630 273 -.17311053054318837 +631 273 .5193723062380542 +642 273 -.038777169500980896 +647 273 .4212969108011679 +659 273 -.9939486809821533 +667 273 .14169294438344265 +673 273 -.06446783811162729 +680 273 -1.2292935252339592 +696 273 -.5920461014405812 +708 273 .13023074908978133 +711 273 1.0720356725927567 +743 273 .861546067119002 +745 273 .24278816417999094 +756 273 .3252796618866516 +770 273 -1.2728983751160101 +775 273 .23150659846436886 +778 273 .2315819840424801 +780 273 -.18656630206009828 +782 273 -.10077162081540114 +797 273 -.651187541791171 +805 273 .07160819976600181 +813 273 -1.2993354011408078 +825 273 -.2579839551669166 +828 273 -1.1692945300733635 +837 273 1.0454565285303092 +841 273 -.4032030932120954 +844 273 -.898620963639144 +860 273 -.17400662040623782 +875 273 -.619391982394336 +910 273 .32406102393348024 +947 273 1.3452823198083321 +960 273 .4904579697525928 +961 273 -.2902035333697928 +971 273 .30700965104242656 +2 274 -.3205259364234702 +9 274 -1.8267230183931564 +14 274 1.0942387592941163 +25 274 1.267019284133124 +26 274 .6876945148506629 +33 274 -1.1550171893095336 +44 274 -.22621213792594136 +46 274 1.7374135941097166 +50 274 -.5752718832165565 +51 274 .8237568014269292 +65 274 1.0830361821753602 +93 274 -.2110592953449943 +160 274 -.29610755152309914 +172 274 -.4794957365890521 +192 274 .047320920720508614 +218 274 .32102876891346604 +234 274 .3579605353104866 +235 274 .2886583934937734 +246 274 -.02343095968475581 +251 274 -1.1054980563792758 +254 274 -1.2297361278772296 +265 274 .9843470445799115 +270 274 .34875973969715085 +290 274 -.619339339236585 +295 274 -.7502539303980654 +301 274 1.7172944795283673 +316 274 -.03802220875826995 +320 274 -1.335278172996957 +321 274 1.623504416586993 +326 274 -.5456714211189928 +327 274 -.7247301746932991 +332 274 -1.1081490514831154 +345 274 .34219674299464914 +357 274 -.3735851349372263 +370 274 -.11355531133236954 +394 274 1.1223896967547138 +414 274 .4982894207393304 +415 274 1.2047548815846083 +436 274 .8675042342002093 +441 274 -.01069129269150848 +462 274 .6549983467378122 +474 274 .5819734778941417 +475 274 .5672826350801967 +492 274 .6918795049651807 +493 274 -1.2597276039010206 +507 274 -.4142761701076332 +512 274 .1805800793644597 +518 274 1.3701200534037619 +525 274 -1.0422785116072064 +526 274 -.36563478969956265 +541 274 .7798732566870691 +551 274 2.1890098330528023 +577 274 -1.548208253185414 +584 274 -.9595727305623547 +596 274 -.07863160292356969 +603 274 .8246251466013763 +604 274 -.09927920982978178 +618 274 -.13803564425965897 +619 274 .03848021490780899 +624 274 .8472797979680785 +629 274 -.1110799765663514 +641 274 -1.2849804090061863 +649 274 .6038699108159006 +650 274 -.5327538362841557 +669 274 .719648892289006 +685 274 1.0830590872866237 +726 274 -1.519424176443501 +744 274 1.9056986876892759 +748 274 .14426246031110776 +758 274 -1.4123726287588987 +767 274 -.8274557236489218 +770 274 1.054847457592938 +792 274 -.42460181684008225 +793 274 -.4615510186528504 +808 274 -1.6955250229350467 +813 274 -.061198177104233406 +820 274 .15247403392137615 +823 274 1.9567831129004898 +848 274 -.4736626584701684 +870 274 1.4893460262670752 +875 274 1.1367299477247683 +883 274 .5689622374015295 +913 274 1.0135289840009936 +927 274 .22018497056881725 +930 274 .5030724193239905 +934 274 -.1727200749702597 +937 274 -.42901179751366486 +943 274 2.189677363153934 +946 274 .3808802787345301 +950 274 .15517418903642435 +960 274 -.3511444974981056 +962 274 .41727522185702964 +986 274 -.8018339912016789 +7 275 .5238145672461809 +11 275 -.5479218267547651 +26 275 -.9557927518472742 +41 275 -.2669084949208953 +44 275 -.48985814313830117 +54 275 -.021860996084087925 +55 275 .862455585908866 +61 275 -.39083994799997734 +62 275 -1.3416241984415362 +72 275 -.3836372330014561 +99 275 .13781003039166523 +103 275 -.20410243005413276 +109 275 -.5731629745663408 +110 275 .23238523852405468 +137 275 -1.2521622164615656 +147 275 -.4034317518096554 +160 275 -2.2452890382622175 +178 275 .04909653796447831 +183 275 2.0483446804838463 +185 275 -.6269935959530621 +187 275 3.6483085494568734 +193 275 .4842276621494749 +202 275 .13953667020761518 +203 275 3.1500651207813646e-5 +214 275 -.5124848825122903 +221 275 .7112319478224535 +239 275 -.7601545155127074 +247 275 .7425789362513688 +262 275 1.302497840266696 +266 275 2.2313119253801355 +271 275 -.1758963848837692 +273 275 1.45678268944422 +288 275 -.20100555341357929 +301 275 1.8682284953852728 +305 275 -.4717537334799488 +327 275 .4847427592529565 +334 275 .8874577444850185 +339 275 -.9266279690631072 +340 275 .8430146670554188 +347 275 1.356592323963155 +354 275 -.03717225417013641 +355 275 -.9724977208949729 +379 275 -.49606347519840255 +382 275 .5685283689601657 +399 275 .2889276169515407 +405 275 -.3473298023690541 +408 275 1.177240529144243 +410 275 -1.058691023510058 +416 275 -.15809972177622825 +429 275 .3462008943413362 +435 275 1.3442512987914124 +452 275 1.2931066303621161 +465 275 -.3981832359465441 +485 275 .4565146999912057 +499 275 .4546142056579964 +505 275 2.180975682822531 +507 275 .8477084650834477 +513 275 -.5256464602618879 +536 275 -1.5695315664567797 +552 275 .22498636588715865 +555 275 .2178843469910574 +559 275 .5385786944789083 +582 275 .04497970440771608 +584 275 .20926932406307797 +598 275 1.8059326938867981 +605 275 .22074888811597884 +610 275 -2.2064997885025956 +622 275 .06818588540903658 +651 275 1.0657953443276031 +680 275 .5300442338518669 +705 275 -.9116448816414686 +717 275 .9124031780730124 +738 275 .5806142992098569 +747 275 -.16753327624719788 +753 275 .028719096036037006 +754 275 .4837813446817003 +808 275 1.2046988855454206 +827 275 -.718020199142897 +832 275 -.6143202363280397 +839 275 .9102633761701718 +856 275 -.5173727012365783 +883 275 1.2842871159645581 +890 275 -.6271721243579087 +893 275 -.262271151187721 +901 275 .06739382811281364 +904 275 -.6134776498614503 +907 275 -2.1135524560753973 +920 275 -1.3371907221280963 +921 275 .9466326718286063 +938 275 -1.8698533782751736 +965 275 -.26284428384092695 +979 275 -.20009921122299362 +980 275 .5320003801272427 +987 275 2.340440894618686 +990 275 -1.219742466582956 +11 276 -2.792386154895413 +25 276 -.08137642747033999 +30 276 -.43206697809424177 +35 276 -1.397645063262906 +44 276 -1.7349445230755658 +52 276 -1.1926849083522661 +60 276 1.6639894592832063 +65 276 2.344187084552757 +70 276 .1079286600922614 +77 276 .9783293440745071 +78 276 .49737941977913563 +102 276 -.051276282624913475 +110 276 1.9466050630017961 +114 276 -.24467981337555403 +125 276 .7560001217982074 +169 276 .04675256496571456 +177 276 2.811493683935693 +196 276 -.14945979573455456 +218 276 -.7191837951463615 +228 276 1.0171260124097425 +238 276 1.351154422076671 +239 276 -.9459589043060745 +251 276 -.4496715659919398 +266 276 1.2087193413739374 +275 276 -1.276661313740096 +284 276 .6266517298426306 +297 276 -.9062085300622883 +329 276 2.473020485193695 +340 276 -.42323192925714836 +342 276 .4514532723624438 +343 276 .3095223564200098 +350 276 .0028016562935397546 +354 276 -1.9946193898665041 +357 276 -.5324146064745932 +362 276 .7475782482528661 +365 276 .6153495190052486 +377 276 -.3204492590366129 +416 276 -.3677545875452718 +448 276 .010586558703555918 +470 276 1.2541637640065455 +477 276 1.8096140145323427 +486 276 -1.5043590314737536 +488 276 -.09208856179936556 +492 276 -1.6633526196101192 +530 276 1.0786803663498823 +548 276 -1.3269728791137125 +555 276 -.3322217270552906 +558 276 .33047562687939264 +559 276 1.866427003447464 +561 276 .41935678626242673 +581 276 .1258004062914131 +586 276 .8394727608789586 +602 276 .11036153708835485 +603 276 -2.4655406568168767 +614 276 .001788514694800944 +621 276 1.2252476087049224 +626 276 -.4059663412373899 +648 276 .3947285573324987 +661 276 2.153481839970126 +666 276 -.25313294723183477 +668 276 .18560014968858657 +674 276 .36582761620656296 +679 276 -1.6661781487666383 +685 276 -.03851823397361358 +695 276 .04508930556436494 +697 276 -.6817351158285821 +698 276 -.5720094376458975 +702 276 .11399009739516455 +703 276 -.6533038587366017 +705 276 .11045838514067982 +712 276 -.5896948127364094 +716 276 -1.2458801494420104 +726 276 -1.248505003224113 +731 276 .23748261013788463 +734 276 -1.159754475563033 +742 276 -.12490163710297102 +792 276 -1.529348184298234 +829 276 .7216056591065344 +839 276 -.09062981040286278 +845 276 -1.3021818353061936 +849 276 2.676001636612099 +861 276 .4471413129580679 +874 276 -.3199767834848801 +884 276 -1.704556986029782 +895 276 .7295052327191354 +897 276 .058623110563052666 +909 276 .21030747274888167 +923 276 .8899703631234099 +926 276 -1.6246430643886336 +934 276 -.06495454759289881 +958 276 -1.3898844724084842 +978 276 .5169643691538807 +979 276 -.15464689512796037 +982 276 -.06242297800708707 +988 276 .786782099739265 +997 276 -.565207365323349 +7 277 .5665832896826137 +14 277 -2.031370848854014 +16 277 -.8314395233319629 +23 277 .7691823481337824 +25 277 -2.7387135899973454 +29 277 -1.4565381412383942 +38 277 -1.661383700909924 +54 277 -.12935587811924537 +63 277 .627703094402188 +67 277 .7332635860629209 +106 277 1.3586624317229725 +124 277 -.2928779012262882 +128 277 .5004530155868172 +130 277 .2223600936407338 +138 277 -.17063996233622813 +139 277 .266296154528634 +168 277 -.04071610890995041 +186 277 -1.4027465050414198 +196 277 1.053736698199457 +213 277 -.6323361171227291 +236 277 .7068425578242099 +238 277 -1.32921047177388 +247 277 -.5076517501894763 +255 277 -.22455529420550813 +259 277 -.5853245784020575 +280 277 .6716536580352229 +297 277 .9613373162853247 +301 277 1.7869555226108746 +329 277 -1.3284811545956487 +331 277 .7755243227144464 +332 277 -.14942735190706768 +335 277 -.959775309683928 +337 277 -.10546437601742886 +364 277 -1.7366961485531356 +365 277 -.027517373109960254 +366 277 -.7582034083423344 +368 277 2.9101777877228687 +370 277 .8693525032308885 +408 277 -1.842832463538735 +426 277 -.17818184107804222 +431 277 -1.9129737820314767 +443 277 1.2386879995198254 +491 277 -.8865095647691099 +506 277 1.3710570484484355 +508 277 .6746179225289043 +548 277 -2.0734813799823284 +552 277 .10041765117978176 +560 277 1.261946959825212 +564 277 .24266061445056328 +567 277 -.016149695221483296 +572 277 .8778595393760774 +574 277 .2739531052624845 +593 277 .4198877277132791 +604 277 .8572334429635347 +619 277 1.5653345518472839 +632 277 -.04781800440114439 +633 277 -.10542914467403115 +639 277 -1.4539247802116892 +655 277 -.09024207536043558 +662 277 .021671746316646374 +664 277 .6293940093078344 +667 277 -.7405885892360602 +680 277 .8136904870131739 +689 277 -.753929462219609 +694 277 1.2935295300087002 +713 277 1.603327360365118 +738 277 -.2509513228325239 +787 277 -.2595877026259733 +796 277 .007769060861143484 +805 277 -2.0599264501812242 +810 277 -.8783951338190806 +811 277 -1.1576712983601796 +812 277 -.821386103338074 +814 277 1.32407014200033 +817 277 1.6593854221134214 +821 277 .2884317826756378 +824 277 1.0936044187530523 +827 277 -1.0131091655649678 +848 277 -1.8178681800579348 +850 277 .596413996158376 +862 277 .21897018906481508 +864 277 -1.1046586890344994 +866 277 3.1724108078628914 +873 277 1.7033373706654582 +875 277 -.7267645985404225 +877 277 1.670736733382543 +881 277 -.9808259691633714 +887 277 -1.5451792918132417 +890 277 -1.2538080589014846 +893 277 .0011178269345107628 +905 277 -1.2359061660741322 +912 277 1.5230401661532833 +915 277 .27968246275228636 +918 277 -.4946976118910119 +938 277 -.37177585088234444 +944 277 -.0472990754452022 +961 277 -.2848628193308665 +976 277 -2.341001440079245 +979 277 .8353604990956085 +983 277 -.6133279838930046 +984 277 -.646302341785289 +5 278 -.260079746235511 +11 278 -.047174277271420983 +16 278 -1.4816177093520533 +17 278 -1.5065953703340045 +24 278 1.4864794405342856 +27 278 .2660409764417872 +36 278 -2.016783571234747 +51 278 1.1866678320675121 +97 278 -2.6482715512962294 +98 278 1.5259054078555208 +99 278 .8532928715917596 +123 278 -1.1200246169423558 +139 278 1.7141230182172407 +153 278 .6981221033088758 +167 278 .1392006303408039 +210 278 1.2568501828061334 +223 278 1.272213262073504 +226 278 -1.6310224660621824 +272 278 -.5863820641230761 +274 278 2.0979887167056654 +284 278 -.5520051804646889 +291 278 -.2134932139778655 +298 278 -.28614616149978495 +301 278 1.257032377713498 +311 278 .3697755414851817 +320 278 -2.2455364103767175 +325 278 .5308392895596654 +328 278 -.4362506925993561 +354 278 -.38278523768509487 +356 278 .050331044911545414 +375 278 -1.2575996413233717 +388 278 -.32498047744622555 +395 278 -.04350433764720103 +407 278 .10132607451449602 +410 278 .22137814652368346 +418 278 .05608423090910941 +421 278 1.8846673821760036 +427 278 -1.098275853641479 +428 278 -1.9030999070099894 +434 278 -.17488099201358087 +447 278 -.491160921425532 +469 278 .35661575187809297 +470 278 -.972878759471297 +474 278 .29587142982523307 +478 278 -1.9844255061689269 +483 278 .08376224534165566 +491 278 .5634598634529133 +492 278 .487289414923515 +499 278 -.9487133951608782 +514 278 1.9048932556580116 +523 278 .07291924439595661 +527 278 1.1394035079827336 +530 278 1.444657942873307 +531 278 1.6334163374471022 +537 278 1.6314368272987712 +538 278 -.8408834894273369 +563 278 .6479377217849529 +564 278 .5159961887663675 +579 278 -.07698044495521288 +616 278 .8928233307504264 +627 278 -1.2711665511806012 +634 278 1.413159261623586 +635 278 .678714897406449 +648 278 -.5299229687696263 +650 278 .32545806257423837 +668 278 -.22985412982316958 +678 278 1.568341149965156 +686 278 .3417670269251056 +691 278 -.4838275857223758 +708 278 .22337631588828 +717 278 1.8599060300242285 +729 278 .7067329343080904 +753 278 .2536563251576149 +755 278 -.16101238173997834 +767 278 2.0459200164638953 +773 278 -.07708651739264595 +781 278 -2.1642837338710628 +796 278 .9570845274099261 +800 278 -.82869378417562 +811 278 1.809324605154442 +816 278 1.9171563385676509 +823 278 1.5732661416667615 +832 278 .3015321157982712 +838 278 -1.072788959831387 +840 278 1.703013234966348 +842 278 .5894439944074766 +844 278 .08923744911878141 +852 278 -.676702222336607 +858 278 .8304651823624212 +864 278 -.6280011772995989 +865 278 1.0441007287686275 +870 278 1.2478560294103487 +878 278 -2.3615287743046154 +891 278 2.0466830534597116 +901 278 -2.265591919797928 +910 278 -.03045323546654309 +916 278 -.051116455131072006 +917 278 .999849374841459 +922 278 .9275035568837209 +923 278 .312659078717068 +941 278 .48177309297712884 +944 278 -.9431800130605301 +952 278 -.8812797708317053 +956 278 -1.0843335489847776 +961 278 1.8312985432555742 +980 278 -1.1716887085749643 +995 278 -1.1900629425479914 +3 279 -.9059189198839116 +12 279 .7893936401980318 +41 279 -1.6778930983966356 +49 279 -.41326175455622316 +61 279 1.062170429011705 +66 279 -1.429955443879252 +79 279 1.465357940032274 +95 279 -.11213614872695202 +97 279 .7173702282280456 +99 279 -.31517395767489675 +115 279 -.9210856953290052 +116 279 -.28626879494943547 +120 279 .1842609422077262 +122 279 -.598427452440184 +128 279 -.5125177040017315 +130 279 -1.8364875788790964 +153 279 -.9500607122547273 +155 279 .037556526624204944 +164 279 1.4592781123095502 +201 279 -1.149474297511864 +203 279 -.43040511331249154 +211 279 .6252633952599894 +221 279 1.3143469372658827 +236 279 .33146737604888993 +241 279 .5777249099679693 +251 279 -.5803983697647581 +261 279 1.5199003703206704 +264 279 .5115822291356075 +268 279 -.6201332211925913 +271 279 -.0718429906419486 +272 279 1.4901223492791118 +275 279 -.844681630919912 +280 279 -1.0161383853085806 +285 279 .3232290945857282 +304 279 -.275005889219223 +310 279 -.7139419642353992 +313 279 .42000101193800016 +314 279 -1.2801006924468585 +335 279 -.7778488604703504 +341 279 .5952802883481014 +349 279 -.44291166960243755 +355 279 -1.103702128565351 +375 279 1.8960862364920497 +377 279 -.9623977190715355 +392 279 -.8191813753514042 +435 279 -.962778779092112 +436 279 .024207362201625726 +452 279 -.9159946920068476 +456 279 -1.0008100281752061 +476 279 .6309021874661593 +499 279 .04801513628321665 +510 279 1.1824811397364057 +533 279 .15540161875990469 +544 279 .252728983199092 +550 279 .12713463225685245 +551 279 -1.1395607028120158 +554 279 -.006528573419112496 +556 279 .5094527233682328 +564 279 .6082728546104998 +567 279 -.12523590803284265 +587 279 -.8606676680539028 +591 279 -.5117234381207681 +594 279 .41776794325956346 +602 279 1.1220744346719158 +613 279 .28099999456261004 +615 279 -.03777993774099733 +618 279 -.09797510905335885 +621 279 -.2930855069641246 +623 279 -.641049144717361 +633 279 -.9107372204286144 +634 279 -.827328058127025 +643 279 .7901800671420146 +648 279 .9243628202809443 +651 279 -.39434555232103957 +656 279 .7036516042576508 +658 279 -.060409736981163656 +659 279 .5509377203490534 +684 279 -1.2065702480413334 +703 279 .060982425884692326 +705 279 .48884499768447276 +712 279 .12140319467096991 +720 279 .2184114255252625 +749 279 .8617982152253095 +757 279 -.5764341995449002 +763 279 .5072708978664964 +767 279 1.6408140134110252 +788 279 -.8736424843977674 +797 279 -.015298034934271468 +798 279 .526375159105872 +809 279 -.3468722918272081 +815 279 -.011316222922004515 +841 279 -.8767855734159697 +845 279 -.19354441780136478 +852 279 1.9719965052190473 +854 279 -.3523335524905582 +861 279 -1.364539233605144 +878 279 .14002031249564414 +884 279 -.1705694019898198 +887 279 -.036795733455177074 +898 279 1.5226953133779701 +908 279 .32615489721393387 +918 279 -1.0979960245825047 +933 279 .3779018736252868 +940 279 .6054683674483591 +952 279 .27855260399609594 +958 279 .9341744767829065 +970 279 1.8388195786322885 +973 279 .10838489830035641 +979 279 -.6344305883642191 +982 279 .1292455302500487 +992 279 .4584068547669002 +997 279 1.0073484513035202 +4 280 1.5427603583827199 +7 280 .6322683562788479 +12 280 .04571765628561133 +23 280 -.46187326005302287 +38 280 .7791097077275522 +59 280 .10575532883367318 +63 280 .6426139683813227 +75 280 .5212803298149451 +76 280 -1.2404966847118772 +77 280 .7300963842929729 +81 280 -1.6670450109616688 +83 280 -.5757663782642403 +85 280 -1.3111623844943594 +87 280 -1.4530605384692497 +88 280 -.4682079727214789 +93 280 .3905971456050257 +97 280 .4141902183619479 +118 280 -.18968905940298725 +122 280 -1.5233750602606833 +143 280 1.4768635991234509 +148 280 -.2661189373884998 +162 280 -2.173867948484207 +197 280 -3.028709059033503 +204 280 1.7756428048693036 +212 280 .6860279961474359 +238 280 -1.7282776926430024 +240 280 -.8686237646173083 +245 280 .533084086368473 +253 280 -.9934718883069223 +280 280 .9444506422620739 +282 280 .13003402309029227 +294 280 1.190819594527629 +308 280 2.300103794655214 +317 280 -.8501790199482941 +329 280 -3.8023297306175 +338 280 .8476121464848164 +342 280 -1.061808219053472 +363 280 -2.3411667669319844 +364 280 -1.3164274026759204 +393 280 .8722366331078547 +410 280 -.4947783503804717 +412 280 -.4862836211426329 +439 280 -.46461747993578373 +441 280 1.0675824451998057 +447 280 1.1475527069662694 +458 280 -1.5196086322546656 +461 280 1.0515489656225356 +475 280 -.9435572476730659 +504 280 2.1873857306191193 +508 280 1.8452066756556287 +511 280 1.1393453722679494 +549 280 -2.3029963647455087 +553 280 -.6089744868788793 +562 280 .7247360657989912 +575 280 -1.537632377610418 +586 280 .7791006820525408 +598 280 .5284877151049265 +622 280 1.2773912583539895 +670 280 -.9621479009074365 +671 280 .21453964889435542 +672 280 -.7462840429421093 +708 280 .0663566443368662 +758 280 -1.3093529091814875 +766 280 -.90365922846026 +792 280 1.4540218405299743 +793 280 .5123725903338923 +806 280 -.5268308002929845 +807 280 -.9358735395458024 +817 280 .8603205404528308 +836 280 -.48780067493941087 +844 280 -.8919076824995475 +862 280 2.1489551336480073 +880 280 -1.542862772242596 +883 280 -.7260341015404431 +918 280 -.25887955402749296 +930 280 .42852540894578234 +932 280 .609887374879027 +941 280 1.3692907587501024 +942 280 -1.404188809804432 +945 280 -.917495707003806 +949 280 .28469667713078817 +953 280 -.8342415104264203 +977 280 -.8765116342401231 +984 280 3.1943752449053786 +996 280 -.3937888824016278 +999 280 .46852521233325967 +1000 280 .11930837867084008 +6 281 -.512811072637736 +17 281 -.7755892045522432 +22 281 -.40170937301507037 +30 281 .01234139137128066 +39 281 .022792845073719994 +45 281 .327930953100658 +95 281 1.5776653234206566 +101 281 1.4680993912410112 +107 281 -.2851625458579014 +118 281 .7428604412131299 +122 281 1.6710646505449325 +136 281 .6181817087340613 +144 281 1.2746068744462753 +155 281 .46748409195755436 +159 281 .3337634748802188 +175 281 -2.1109039563184755 +178 281 -.7715672764722417 +180 281 -.7298188630034832 +187 281 -1.8576045496695355 +196 281 -.05351348792271003 +208 281 -1.4064663894118337 +210 281 1.3870414673621854 +215 281 .5223246145158171 +216 281 .7841959192121583 +220 281 .4218522212069544 +239 281 .454437635194124 +261 281 -.632377065005565 +263 281 1.7247127606185855 +286 281 .38476189922631693 +310 281 .0862310679935937 +315 281 1.2805624846289085 +353 281 -.4380842124021555 +377 281 .8755541543942531 +393 281 -.8380997642704976 +395 281 -.9017566022811502 +397 281 -.5607360730955079 +402 281 -1.1482630704637264 +408 281 .03713110544858855 +420 281 .7446690962700683 +444 281 -.04504948597330782 +446 281 .18469715634233766 +450 281 2.337479012270063 +464 281 3.3542485458416826 +477 281 1.3428433129097062 +498 281 -1.284965476911701 +502 281 .46258350380194563 +505 281 -1.9896228540414422 +508 281 -.1374501254270888 +513 281 1.2467075060328219 +516 281 -.7802319290246384 +534 281 -.7847828068717428 +536 281 .04324186345706971 +540 281 .2361638540752145 +549 281 .5808904163114964 +556 281 -.7528422098391301 +564 281 1.5367726582188173 +599 281 -.03880546104694568 +618 281 1.203012138726172 +625 281 -1.1557036499489932 +633 281 .4737845010554065 +634 281 -1.6925817566587753 +656 281 -1.7873439874693413 +666 281 -.4710952613200743 +682 281 1.5158277382815284 +697 281 .8775771807102755 +719 281 .18106430045434352 +721 281 -.7051481738396855 +722 281 1.6494829182320485 +723 281 2.3511579376861085 +726 281 .3372576235251078 +729 281 -.12160464667983674 +735 281 .8305940570317359 +738 281 .34993995767402575 +739 281 -.524205623355573 +745 281 -.8031986382860719 +752 281 .3244828138384727 +756 281 .996557623460131 +765 281 -1.286117117751748 +779 281 -.4245763006213569 +787 281 1.2556380652068027 +798 281 -.41651292510915644 +803 281 -.048824227310718435 +821 281 -.5744580584926793 +835 281 -1.2099294892653205 +864 281 .3066571194687004 +870 281 .9450213560262631 +871 281 -1.0391201087883053 +874 281 -1.290614240656821 +875 281 -.27747625404014237 +894 281 -.9291649968097977 +895 281 -2.2974802105999768 +904 281 .6164635512610437 +905 281 -1.640158530117192 +951 281 -1.0342491940592768 +961 281 .45129326336054304 +970 281 -.8749135050815391 +986 281 -1.2672613165496864 +990 281 1.1235410414704374 +2 282 .9130075125259899 +24 282 -.26866805461980037 +44 282 .9821046489613942 +51 282 -.640865662121288 +71 282 1.0928443396735459 +72 282 -1.8673714252004818 +86 282 .3285246776855042 +89 282 -.0336317916693168 +93 282 -.06727598128998663 +101 282 1.2555878204471669 +103 282 -2.8527062418773634 +141 282 -.8736153290515585 +162 282 -.17716277161122243 +184 282 -.9064574730053608 +196 282 -2.2975827602722636 +221 282 -3.1597039930309485 +223 282 .6634104227797719 +241 282 .44170435939457375 +242 282 -.4895023321629806 +247 282 .25673539174606597 +250 282 .0076728393285589724 +282 282 -1.1731540976731445 +294 282 .9318513486770313 +296 282 .6688975434713647 +298 282 -1.961405354897826 +316 282 -1.4841780239509939 +380 282 -.6187141210114092 +381 282 -.7521233935090668 +390 282 -.16940522481740436 +398 282 -.07017710284299142 +399 282 .3595748403749518 +407 282 -.8046581943617145 +416 282 .6135235536026747 +433 282 .025646893709371107 +470 282 .6447215219361385 +475 282 .1583969574901471 +490 282 .0739997494777157 +495 282 .5087825938599148 +519 282 .8597094759270376 +535 282 -1.1573487846988908 +540 282 -.3474353574314588 +546 282 .37815516361658896 +548 282 -.9044354711057225 +552 282 -.42045939959106393 +554 282 -.8242039107190512 +560 282 -1.248180400122823 +562 282 -.2389397046668667 +577 282 -.3222372251753175 +580 282 .8251492343646093 +587 282 1.5433942845440267 +590 282 -.07209760253494603 +593 282 -1.0493312744590537 +596 282 -.19426043901154408 +615 282 1.3649232335484345 +626 282 -.6071345154617717 +651 282 -.4708663336961255 +672 282 .7710969057147847 +673 282 -.4450474906666186 +700 282 .4311079760967496 +701 282 -1.0319289537413892 +707 282 1.7432939985484686 +720 282 -.2799336233069831 +725 282 .5523891652326448 +746 282 .7762848104055629 +761 282 1.094040889367535 +764 282 -.7992207128770393 +765 282 1.1038355704528722 +766 282 2.41145688971837 +768 282 -1.637157771777354 +793 282 -2.4897630872040986 +813 282 -2.1315448060570765 +817 282 -1.1433672958008456 +831 282 1.61451456018094 +846 282 1.5574640118340237 +862 282 -1.3611442327239034 +867 282 .44405182168084584 +881 282 -.6536586241559991 +883 282 .6158139642290599 +886 282 1.0229300992122639 +887 282 1.2488331519045313 +890 282 1.1862985374749278 +904 282 1.2483072997747586 +906 282 -.8568418023295636 +907 282 .740121227994964 +909 282 .6767785698519053 +916 282 .5900569488785249 +921 282 -1.4099236857971411 +922 282 -.7084435388944679 +927 282 -1.6866387067053732 +943 282 -.6891520389406911 +951 282 .001200316053926953 +962 282 .3849360439189299 +965 282 -.14656198081135008 +970 282 .6950310099331811 +983 282 .9776997701949234 +7 283 -.2853630553415361 +18 283 .49191697085905095 +31 283 1.0959873500708253 +32 283 -.6537660830304765 +43 283 .8515585453032279 +55 283 .06328897123102827 +62 283 .32153198569048635 +65 283 -.04727207851642902 +82 283 .8532744818685222 +97 283 -1.1554763778044481 +116 283 -.05759465223725731 +129 283 -.12059870574358242 +147 283 1.5784092497613196 +167 283 -.6483468494258604 +218 283 -.5015590497295601 +238 283 -.8212542878684742 +239 283 -.3843113335904707 +272 283 .7433614970505497 +273 283 -.4422961276940942 +277 283 -.43297951087741876 +305 283 -.06635163911943123 +311 283 .7608499992596272 +315 283 -.934308538997742 +321 283 .5663080423421029 +324 283 -.8072251870950047 +352 283 -1.2528746636725394 +355 283 -.9676081903440377 +356 283 -.4012243354085454 +364 283 -1.1977582115767857 +370 283 .7303154795174231 +376 283 -1.8111103491783087 +391 283 .1229784780750021 +392 283 -.17124655942151554 +423 283 -.35791977814030046 +426 283 1.1299991124921447 +454 283 .25980085649033746 +466 283 .3751394965561666 +473 283 -1.7220640416081157 +476 283 1.9519031140738565 +497 283 .2738656342851556 +498 283 -.6638798640177284 +507 283 .11007518453912643 +509 283 -.3594680444466767 +513 283 -.7260533415342458 +527 283 .11553683262465614 +540 283 -.5390812849692027 +553 283 .28396192131968756 +559 283 -1.42390713175752 +566 283 -.09829643919361047 +580 283 -.46324256240805245 +582 283 .5211160086914455 +585 283 .4357717987147636 +601 283 -.5768719831110966 +603 283 -.49695154493464244 +616 283 1.2949076070365944 +621 283 -.643330186223034 +622 283 .3369941021470941 +649 283 .7603349593656813 +650 283 1.5852356546089184 +673 283 .6987834219888 +679 283 .935565403622943 +686 283 1.4625588830397511 +690 283 .09165455622811482 +699 283 .5169592984095827 +716 283 1.5246449241426883 +726 283 -.18336601993918827 +737 283 -.03418180396763967 +740 283 2.2476035559279994 +741 283 .534857371874968 +771 283 .6260404793516413 +777 283 -.36091520589963305 +787 283 -.16998812645334688 +789 283 .6378001566722976 +794 283 1.004964213888522 +796 283 -.09838672732393378 +801 283 .9781228194996716 +805 283 .2642735253195143 +807 283 -.1637982095890629 +820 283 .10524047532793285 +848 283 -1.8441548875279474 +865 283 .5007500794351537 +866 283 1.0679140130980793 +867 283 -.7387544426987813 +879 283 -.4191573989577574 +881 283 -.9770728032854465 +892 283 .4284471974656807 +894 283 2.6525249415906904 +912 283 -.8572154199007814 +924 283 -.04217503686206736 +925 283 -1.3844257097226744 +949 283 -.9749684861450685 +954 283 .24328664872600242 +960 283 -1.2124737459827895 +978 283 -.9246290028715112 +982 283 -.5285030037796155 +984 283 -.3509391550638655 +990 283 .5446501923703593 +18 284 1.0489171860980495 +27 284 -1.0215908740826725 +32 284 .3117515803536506 +38 284 -1.4070757584071831 +66 284 .2263335822557176 +72 284 -1.7361537805979865 +77 284 -.18846858779232012 +86 284 1.344823041846585 +118 284 1.099736564528001 +120 284 1.498308196324654 +121 284 -.24197687408809487 +145 284 .6635566629468092 +149 284 .9494279022308509 +179 284 .47408305991685024 +181 284 .6370312650874692 +209 284 -.3824953482495851 +248 284 -.21816740725882697 +250 284 .6411768558720836 +253 284 .07246765652231911 +260 284 -.879177206173148 +270 284 1.187919069801556 +295 284 .6116376467336302 +299 284 .22193953704022695 +307 284 .6934240838000261 +312 284 -.7213505378590928 +320 284 -.010347173856612012 +331 284 .8507084708161693 +337 284 .14729080657495922 +357 284 -1.106774628253323 +371 284 -.5997632264301955 +374 284 -1.0081369991872702 +377 284 -.7644040835929684 +385 284 -.5965236730815686 +393 284 -.9681394326935183 +415 284 .2669153504360175 +425 284 .6587864553010747 +438 284 .7664353453812268 +440 284 .33738542668037824 +445 284 -1.4072072864690677 +483 284 -.1945708406027311 +493 284 3.043608694888649 +494 284 1.1300295137432812 +498 284 -.36930986286579554 +503 284 1.8214036905929663 +506 284 .35895614843710716 +510 284 .899280923286921 +520 284 .9316796896180002 +525 284 1.7281049421472237 +537 284 -.16301655253569242 +539 284 .6818884218670946 +550 284 .7692716692704218 +552 284 .7026752261339849 +574 284 1.0709362741482185 +587 284 .6429756054431497 +604 284 -.688456081605952 +610 284 .0910510624870628 +615 284 1.9895550354423512 +621 284 -1.3942278465418376 +642 284 -.6175409240678205 +683 284 .2438351315644787 +692 284 1.1525931561773086 +709 284 -.20317208471258175 +734 284 .3161215220159206 +737 284 -.37691114523108094 +744 284 -.8500832353782174 +748 284 1.681637078970111 +752 284 -.0007232217645570685 +754 284 -.6092472125112974 +762 284 -.7537693141725125 +766 284 1.0142674516044092 +776 284 .6670645344222694 +777 284 -.8715932170167939 +811 284 -1.6453317666857548 +833 284 -.7861885864164421 +834 284 -.5128830470084749 +858 284 1.4015230192355936 +872 284 -.3052967268360517 +880 284 -.1430453956209511 +891 284 -.6890749558348835 +912 284 -.43137742475245516 +913 284 -.026127090231777374 +928 284 .2532927332659875 +929 284 .8778610956681581 +939 284 -.5193032951707193 +944 284 .7218176589311567 +964 284 1.4023293007539706 +965 284 -.07393727066296125 +984 284 -1.4033010716298255 +6 285 1.423246486411772 +9 285 .46442342814172055 +16 285 -.07204968856228161 +17 285 -1.1675702554610747 +21 285 .015519587358654274 +33 285 1.0454294812869425 +35 285 .007081407397540068 +36 285 1.4989088136383848 +41 285 2.702259734044023 +43 285 -.31282311688802394 +54 285 -.8862952313228484 +71 285 1.2336289880346136 +91 285 -.20295616038584885 +108 285 .691906343004733 +119 285 -1.86948912114077 +126 285 .2813177864409735 +135 285 .303322723322523 +153 285 .02621348207096675 +161 285 -1.9996559752032308 +192 285 .10090796806813566 +196 285 .7638551730762912 +202 285 1.7761316822762887 +208 285 -.48064767876980774 +216 285 .08120192433248313 +220 285 .5461883270731932 +236 285 -.1557579933752027 +265 285 -2.6268105113394733 +286 285 -.49587736270310334 +290 285 .04161664461216143 +300 285 1.3513275097526274 +302 285 -.28320514934184604 +318 285 -.8597028380304673 +345 285 -1.1865231509788454 +350 285 1.1585496900228174 +352 285 .8148550348680266 +353 285 1.5332665123945632 +354 285 .5310983848748686 +355 285 1.299811414450424 +370 285 .15103130248325744 +388 285 -1.3049806736204834 +409 285 .645756018136662 +420 285 -.8035234531492681 +431 285 -.5560321278073 +434 285 .534667660867045 +439 285 -1.9821598896713988 +457 285 .029705812228121593 +475 285 .6779899664944753 +477 285 .15165827890799297 +510 285 -.13046900298304798 +511 285 -.4879856337240391 +523 285 -.1143851394731313 +537 285 -.5850963822644192 +547 285 -.1595197043581801 +548 285 -.4412667652776084 +561 285 -.39190037450967846 +580 285 -1.2610111342363954 +589 285 .5259590848058906 +607 285 .7026265895591136 +608 285 -.9348119454311264 +624 285 -1.8266749923260306 +632 285 -1.1646791748714356 +638 285 -1.6137556506253767 +654 285 1.4657437367268205 +668 285 -.11382904723680942 +672 285 -.9041617822822117 +679 285 1.6567761342097236 +681 285 -.09511799519574686 +699 285 .6959053621344731 +707 285 -.0022491015732077485 +709 285 2.193726130650059 +727 285 -.10739212440902449 +732 285 -.9256660166067191 +740 285 .2928967326766935 +747 285 .17783182940221104 +749 285 -1.1282509113735006 +753 285 -.6085536039097718 +754 285 .21846771377873273 +759 285 .5714727977718269 +766 285 .6684629945562514 +779 285 2.6266284019329924 +796 285 -.916920986338706 +812 285 -.9019268078019718 +840 285 -.02220258519675676 +867 285 -.5938586257405881 +873 285 .20273549159325438 +886 285 .6866575883933392 +920 285 -.21014251173650125 +944 285 1.1292318656142404 +950 285 -.3108023591032649 +954 285 -2.0961312836381087 +981 285 -.8333246316623096 +984 285 -1.1236039640156354 +995 285 -.47960746434967927 +996 285 -.2341557938593679 +2 286 -1.9621052115898543 +10 286 -1.120037240568704 +21 286 -.41247298556108103 +25 286 .361670473684525 +29 286 .4321880016511766 +34 286 .5704691479517316 +36 286 -.9543127481639223 +38 286 .45638434923234744 +39 286 .33959245208326916 +50 286 -.32693074786323684 +63 286 -.46422750161466 +65 286 -.4547791447850354 +70 286 .03916581178108711 +81 286 -.9106607548471977 +84 286 -.13758942852183673 +107 286 .07892711764410772 +111 286 .17740551039712557 +116 286 .26831269682716735 +140 286 -.6918790508901967 +161 286 .08339841232277445 +163 286 -.5510784646358458 +182 286 .1289040869752801 +198 286 1.0271717657515982 +213 286 .19502564376756454 +214 286 .47092912223767575 +244 286 -.20055643404378748 +251 286 -.8284959630686591 +272 286 1.6750218703034823 +277 286 .07575960523916575 +280 286 1.2675077303361328 +283 286 .15307070688850777 +297 286 .1202526825548261 +309 286 1.150483575518712 +312 286 1.9765847824289784 +332 286 .10878297821988184 +348 286 2.1675085375085708 +362 286 -1.1400139473989679 +381 286 -.3196677557180132 +401 286 1.071391395307095 +409 286 -.24348688412626765 +412 286 .2045113613031707 +414 286 -.0032777429010035636 +426 286 -.03522066982624362 +439 286 .43175686677066405 +452 286 -.24283489986876705 +454 286 -1.0053182945769676 +474 286 -.21477082564267855 +477 286 -1.9578118058047493 +478 286 -.15225459604963393 +481 286 -.2774403900755344 +484 286 -.29718759071604384 +486 286 -1.1900366320245936 +487 286 -.4459449325772884 +502 286 -.31601706270168844 +513 286 -.9332288067024936 +515 286 2.0272034989572485 +529 286 .5607264735216679 +546 286 -.21212591860320346 +556 286 -.0717454325194375 +563 286 .6783383719141579 +565 286 .13237783783132082 +571 286 -.0591521281296014 +574 286 -1.299980453476854 +575 286 -.5098229234523365 +580 286 .7972298146956284 +584 286 .056092521791194845 +600 286 .8573113425505061 +603 286 -.8914556322560004 +619 286 .7797443592550699 +621 286 .8547395304597537 +625 286 1.9626945899136619 +655 286 .26788921517041936 +669 286 -1.5482069024748177 +681 286 1.524648100016321 +692 286 .3937149952616128 +695 286 -.5251649510479675 +704 286 1.2132404467332054 +718 286 .4233987922034608 +727 286 -.0220578289190434 +736 286 -.09887793441829025 +745 286 -.4237776408901983 +757 286 -.9973859218365485 +765 286 .14939624097747348 +766 286 -1.8975422119945329 +773 286 1.2045737880837057 +777 286 1.502379995086007 +779 286 .19923646793906635 +780 286 .48211269510843213 +786 286 .23662622774424028 +808 286 .13235723840731117 +821 286 .3760981729662229 +845 286 .6859388560083729 +848 286 -1.1702290518209384 +849 286 .862011504652914 +855 286 -1.0066995973254658 +870 286 .05976529228367847 +873 286 -.7011876813302993 +876 286 -.9688346886787093 +894 286 .3072481760549127 +908 286 -.20018748623622423 +957 286 1.134961604385146 +977 286 -.40046454064563675 +978 286 -.5350811287312854 +7 287 -.06420116812882723 +23 287 -1.4180453812523737 +27 287 -.22685716647517018 +32 287 .5596821647892629 +33 287 .28328580510407386 +53 287 -.715474525310722 +62 287 1.2756404639810772 +63 287 .36546147320172256 +107 287 -1.3086526576840014 +110 287 -2.886873838927352 +128 287 -.19400198717708578 +141 287 .8095123671473556 +156 287 .7526203591587103 +159 287 -.2907216282828524 +180 287 .3582576376849501 +200 287 .22412541964844349 +211 287 -2.3013499186460113 +216 287 .21362908723058757 +229 287 .6923367181606226 +240 287 -2.8963834301443123 +242 287 -2.1788656326130744 +261 287 -.591965633979032 +265 287 .684811527160224 +266 287 -1.0928200778165893 +279 287 1.433881619532742 +297 287 -.6103392614456039 +305 287 -.4410785454166411 +311 287 1.0936491105681987 +348 287 -1.1125482915885003 +350 287 -.0029745822592411875 +352 287 -1.7893527100367947 +368 287 1.2269643116767976 +393 287 -.6299906574970542 +401 287 -.2290612549705744 +404 287 -.5043601352671181 +410 287 .11222107226696316 +420 287 -2.0048682968551157 +440 287 1.510599924963668 +446 287 -.25133264668618405 +471 287 -.6163310175909609 +474 287 .10727706505178736 +475 287 .10133652528959636 +488 287 .8295440744248487 +489 287 -1.5282317647299315 +507 287 .7170270487096757 +522 287 -1.1699812988924496 +526 287 1.6352948251740025 +538 287 -.7674267892150015 +540 287 -.9350485023726365 +550 287 1.9089691923554601 +557 287 .220980882863798 +558 287 -.15192546919077068 +560 287 2.1693750258144266 +580 287 -1.1957576410988464 +582 287 .4548292808591158 +601 287 1.0785197319922886 +602 287 -.8036012004884382 +610 287 -1.1003263504281535 +616 287 .3771871978289939 +617 287 .1754087224510417 +619 287 .10408741514892386 +628 287 -.5454327885993828 +631 287 -.05255326965560475 +640 287 1.9476587469943534 +650 287 .8435923004725125 +661 287 2.589951074127954 +669 287 .09779207418405023 +677 287 1.7424069802088686 +680 287 -.17634324595283835 +682 287 2.420670575191143 +684 287 -.3577422729598776 +702 287 -.37258444744629765 +704 287 -1.3732657594372324 +709 287 .027407643001228277 +726 287 -1.1056827121329245 +739 287 -.7910252201626939 +741 287 .24972723305158515 +749 287 -.4465209456461585 +771 287 .42813934723219826 +774 287 -1.0106037425974352 +776 287 .6464507883349693 +779 287 -1.2063484631683867 +795 287 .9971382282974419 +797 287 -.7755000525648857 +800 287 -1.0622397056201662 +806 287 1.4583648179619428 +808 287 -1.8071924075904187 +833 287 -1.0123618751865897 +838 287 .33231423151163997 +841 287 -1.431028058416319 +845 287 -1.0979859083636536 +852 287 2.295280237380716 +869 287 1.546621980371362 +871 287 .3377717805088222 +878 287 .6797867758918252 +895 287 -.08379055484517989 +897 287 1.6706737813731836 +898 287 1.6827283452984925 +899 287 -.15026184580718005 +904 287 -1.8730891598933153 +909 287 .019838841908044073 +922 287 -1.504467066690887 +944 287 -.06707112678296727 +960 287 .43145409113956706 +966 287 1.4383757865766813 +1000 287 -.47336043071077405 +3 288 -.1033994540094152 +13 288 .3811740979491797 +21 288 .290473853854597 +42 288 -.21019383786104595 +48 288 1.0231066158850544 +57 288 .5100810025059502 +66 288 -.9988373024228249 +68 288 -.07898484911248788 +76 288 -.013042629261016429 +79 288 -.2579706943619533 +83 288 .4247012896327345 +94 288 -.210080928246489 +103 288 .4225212518221226 +104 288 .5324601220083354 +118 288 .4836724881139425 +124 288 .15142450338586116 +136 288 1.023665341036459 +140 288 -.3419789848840073 +158 288 -.07092294558571738 +167 288 -.4581693536088634 +170 288 -.5017953409913727 +191 288 -.5274826257145625 +203 288 .4539930829331529 +208 288 -.0788098036944281 +209 288 .38145168395845125 +223 288 -.6845509569642536 +242 288 -.21012848898843708 +254 288 .2781697543320224 +276 288 -.10783057800960263 +300 288 .48605241109856856 +315 288 .4623873239397887 +317 288 .38443576783377414 +339 288 .7725896944377011 +343 288 -.30622877452405567 +358 288 -.6984800680461294 +364 288 -.4947133893523735 +367 288 .0652325260576513 +370 288 .03203550240491031 +376 288 -.6012555928580022 +377 288 .1267367975924304 +389 288 -.08143282403651358 +433 288 .21822581777242048 +455 288 -.3632692927957309 +468 288 -.5400963914764122 +470 288 .6128971458841682 +472 288 .17294907775379856 +485 288 .3000148472671149 +515 288 -.23417470571588972 +532 288 .5292612511718846 +533 288 -.08345751682534484 +542 288 .7558000384935407 +544 288 .6824701651806259 +556 288 -.19907870935195657 +557 288 .5421261832032608 +568 288 .26514492109869153 +580 288 -.19583660421660712 +594 288 .3706499565715945 +602 288 .4088123617997245 +614 288 .06198602636007253 +618 288 -.27213311073572305 +621 288 -.6993672107726978 +637 288 .2609880727009254 +639 288 .02809095588126477 +645 288 .12036684416746829 +671 288 -.8712605284737956 +673 288 -.11356675030166549 +688 288 -.05839062340221013 +693 288 .272440542985914 +709 288 .9033822589998861 +713 288 .6555346371493845 +716 288 .7779091937965714 +732 288 -1.0571162596719668 +739 288 -.5172749541962833 +750 288 -.8056533286401552 +761 288 .21708927954182372 +775 288 -.3193973555543548 +781 288 .6694190663555963 +788 288 -.07969033737086137 +802 288 .45890498122992046 +826 288 .09506133569049462 +837 288 .7905769243214729 +842 288 -.6189869854498927 +853 288 .6235392641282637 +857 288 .24624748179462533 +871 288 -.022673503061961114 +889 288 -.058922991446297424 +893 288 -1.069441153088184 +894 288 .42548830907017493 +904 288 .007754594229665561 +920 288 .6373019401855394 +954 288 -.1634835239471593 +959 288 .7683617495026642 +963 288 -.22929230502927012 +965 288 -.824983292870918 +969 288 -1.1478373882670831 +983 288 .1466789869192422 +987 288 .37584488618220524 +995 288 .7808282859133151 +997 288 -.2776832846804568 +3 289 1.6344909021458516 +17 289 .935018664703746 +35 289 -1.1338438692128638 +37 289 -.13571158664211014 +43 289 -1.193121204265474 +46 289 -.4923244306208384 +57 289 .28352207496396764 +65 289 1.0389468149875292 +70 289 -1.0914970936629929 +92 289 -.07910786338959866 +94 289 -1.354634258380099 +99 289 .5923682062936427 +110 289 -.7783882182477421 +122 289 .6294149653962485 +140 289 -1.2096546923997722 +148 289 -1.5373380508940575 +151 289 .9096818491491795 +153 289 -.12750476665762306 +155 289 -.26719584395292156 +193 289 .6083494166741861 +194 289 .818919370348864 +217 289 1.0732609132799136 +224 289 -.4087863337512444 +232 289 -.04002274570889844 +233 289 -.8299547513642275 +251 289 2.172300913689975 +260 289 -1.636955148137029 +269 289 1.6409726046036663 +270 289 1.0557434619571138 +284 289 .09104160246378384 +291 289 -.850094254834721 +296 289 -.9358097268282701 +306 289 1.9156304387312013 +308 289 .26519662327505045 +311 289 .18234677690700668 +314 289 1.05647976351676 +329 289 2.31880373439328 +331 289 .22601424571732417 +333 289 -.6348495941347114 +336 289 -1.0214296110401369 +337 289 .7672150350478342 +339 289 -1.444860824507149 +341 289 -1.7267896027259315 +343 289 -.9441558681441541 +345 289 .14627669475825478 +350 289 -.012342278449855831 +394 289 .11351507038926408 +395 289 -.9428094296466943 +423 289 -1.139075439085378 +428 289 .9121090939015609 +431 289 .010073573462351104 +432 289 -.8526401923309125 +439 289 1.6030320738550934 +462 289 1.1199819986470214 +489 289 1.264673923740119 +490 289 -.9501465460285623 +494 289 -.8325285095249385 +515 289 .08493381816013587 +535 289 -.016357538275671754 +541 289 -.150659488998381 +549 289 1.4442426335714822 +563 289 -.2694761089139346 +606 289 -.07994369047183494 +609 289 -.5618548400459359 +610 289 .9849873532963149 +615 289 .9499598399393482 +618 289 2.1613988850735417 +619 289 -.560937722798634 +630 289 1.4099614129317004 +635 289 -1.0058350177320632 +640 289 -.3390202329991573 +658 289 1.0342178441303393 +672 289 -.19097449112121498 +683 289 -.3887070815282625 +689 289 -1.3796683370023162 +698 289 -.747136740386202 +703 289 -.7193794803663499 +706 289 -1.1922541083829639 +721 289 -.3377599520949412 +746 289 -.7726485166028113 +771 289 -.5285408387818846 +776 289 1.0760216271926784 +777 289 -.490747880024403 +784 289 .5120077162151234 +785 289 -.08489329348929242 +797 289 -1.4537899824049412 +801 289 -.4471612612272889 +818 289 .26182146577750776 +855 289 -.1776912945322549 +862 289 .21786612967781133 +884 289 .27293565809672016 +887 289 -.6962641565009251 +889 289 .7550456185034253 +900 289 -.8052728755781281 +905 289 -.833882955471514 +908 289 -1.003658339541968 +924 289 .07565153547751885 +926 289 -.413823026741084 +941 289 -.4134132276698058 +948 289 .484282344149254 +960 289 2.846503709855252 +974 289 .3362928389934747 +978 289 1.578314576376727 +15 290 -.3230548617897901 +21 290 .19951174677213376 +39 290 -.5050776692303506 +49 290 .6686859537502174 +53 290 .04648872812748675 +59 290 .645367757336368 +60 290 .5439361944138491 +108 290 .008081314366167762 +110 290 -.6276284980653553 +127 290 .9421893067356232 +132 290 .032415002391687764 +153 290 -.4961722038726177 +157 290 .4018818785806079 +160 290 .21402224114343904 +167 290 -.5430083948661593 +172 290 -.4513254042555708 +188 290 -.05829627926216835 +191 290 .3591587442671594 +199 290 -.11186344663619047 +206 290 -.9828925945891722 +209 290 -.5185629143758799 +244 290 .20643770818836815 +270 290 -.06217866177713896 +304 290 -1.0151590089180726 +310 290 .2819175667223638 +323 290 .4311520570963553 +354 290 .1381681048548927 +356 290 .3287740686571244 +377 290 -.15936314190874737 +401 290 .30389197937538526 +411 290 -.9169383634376814 +418 290 -1.4335857144285495 +442 290 .3380006356205293 +447 290 .20451249984685158 +465 290 -.7733890594288265 +470 290 -.043082551942701844 +473 290 -.027185418651775983 +475 290 .536254979263035 +500 290 -.247242356549716 +505 290 .9459244429341747 +506 290 1.2199946675995008 +514 290 .3150450416623062 +518 290 .5404579904184096 +527 290 -.655067263636128 +567 290 -.8452099158336245 +572 290 .2876045842141004 +579 290 .649304750801799 +590 290 -.656458004313301 +605 290 -.3686171591453546 +614 290 .2996184189743753 +619 290 .028527756328223686 +622 290 .8712535436695391 +623 290 .4794045759979808 +649 290 .005046276246547545 +653 290 .9930223282038146 +657 290 -.699984449738684 +676 290 -.10005386847874077 +690 290 -1.210011231233104 +705 290 -.15897527993824256 +706 290 -.09527323163356319 +708 290 -.42185603038260444 +713 290 .4924238454223282 +722 290 .217435025076819 +728 290 -.20162031705892192 +752 290 -.1898595963258083 +763 290 -.7030726688293537 +779 290 .4001327075957312 +789 290 .6436964981809996 +811 290 .3134502375345676 +812 290 .16282252850617926 +822 290 .4428571017284843 +824 290 .7582381130175095 +827 290 .7911612699755992 +833 290 .42937138405933817 +836 290 -.38279955833052026 +855 290 -1.2509421063537387 +862 290 .5187937588685384 +873 290 -.522416513220105 +877 290 -.011610626407667942 +883 290 -.6962774435900652 +892 290 -1.0142383965562831 +915 290 -.11069757158216922 +918 290 .558072575123475 +952 290 1.0389351114817917 +953 290 .4558255725272631 +954 290 .6828676564704782 +961 290 -.25916144125035145 +983 290 -.2573040062715212 +997 290 -1.137546409920866 +3 291 -.07558465421954869 +16 291 -.1106092533094507 +29 291 .9299346701146015 +65 291 1.027290777315366 +77 291 -.1965153365476844 +78 291 -.05498506508423531 +94 291 -.9433202315265209 +125 291 .36194671889080166 +144 291 -.05810394462905541 +145 291 .2996957453996182 +160 291 .15413810596393349 +163 291 .4142508761798024 +165 291 .6346294208534354 +183 291 -.36667535070524 +189 291 .22515054138471474 +191 291 -.25550856692579693 +207 291 .7179626638466936 +231 291 -1.0832350434630047 +235 291 -.3777522433621121 +255 291 .10968815038887358 +258 291 .5880115742546626 +265 291 -.517445182053355 +283 291 -.19165319615456392 +302 291 -.04052254351852513 +316 291 .81515568957896 +324 291 1.3412658521493737 +327 291 -.2389595713370914 +329 291 .8665178686398819 +352 291 .6425337973543006 +353 291 .928402385118186 +354 291 -.008073431412644072 +387 291 -.3622773432001637 +390 291 .0012660117190806675 +391 291 .16388118877636235 +396 291 .67675343597634 +407 291 -.19143434684469118 +410 291 -.5454049910204997 +424 291 -.29663205037908585 +426 291 -.42919791745837593 +445 291 -.7418922248622877 +500 291 -.4937451041895137 +504 291 .7750108263463495 +541 291 -.25457360816152697 +555 291 .32888066275021915 +559 291 .04354963955180049 +560 291 .13868357682437985 +569 291 .26644301027218226 +576 291 .20815326259344308 +591 291 .6458924619216357 +595 291 -.9086780167348936 +605 291 -1.0325917503412652 +610 291 -.9326954399657179 +620 291 -.13921216315042073 +624 291 -.13643435090545047 +632 291 -.4880662298733062 +644 291 -1.2544322232582465 +650 291 .2240161695264047 +667 291 -1.0378141480152716 +688 291 -1.1692813705232799 +699 291 -.8399907302107855 +728 291 .22665622284381948 +747 291 -.978392527251085 +753 291 -.6821131763505943 +764 291 -.7402704833497465 +765 291 .22830450670754848 +775 291 .015714861632399726 +776 291 -1.1053137872849683 +802 291 .2646077872083751 +820 291 .2940647673867908 +840 291 -.6222707294372541 +851 291 -1.30533471280764 +859 291 -1.4767174117176436 +860 291 -.13270957110217574 +864 291 -.3660297989803744 +870 291 -.28721046499759517 +875 291 .4030604985700787 +879 291 -.8605217988500646 +882 291 .42179238844500655 +905 291 .19125452910670526 +906 291 -.6122473446374284 +917 291 -.5718258424229864 +925 291 -.4811279661188886 +926 291 .35751327134689714 +927 291 .5635646924337774 +939 291 -.370040195831076 +953 291 -1.376967123929486 +955 291 .46802213513200025 +969 291 -1.1359514127274044 +974 291 .9568749421787645 +5 292 .40685658352665866 +7 292 1.922920935084603 +14 292 -1.7794465040817924 +21 292 -3.1798099138362734 +26 292 2.527559463273853 +37 292 -.44275548458514025 +44 292 -.21994804711946897 +82 292 1.384967653562828 +92 292 2.2372028745992205 +104 292 -1.7637581038299752 +115 292 2.6685244167544258 +124 292 1.043813620508083 +133 292 -.9950570311508224 +144 292 -.6864457085288542 +165 292 -1.1378657639350376 +172 292 -1.2228868093389555 +174 292 1.5669307312894634 +178 292 1.056194370102172 +184 292 2.552776172375215 +186 292 1.350598726349873 +196 292 .8155677541947538 +203 292 -1.6212267307407926 +210 292 .2928592639481116 +227 292 -4.26228634478133 +242 292 1.7777393007167501 +251 292 -.2808965691431762 +254 292 -3.4184776485774195 +276 292 1.0333417212236913 +290 292 .1404662376922746 +293 292 -.6497092176932469 +296 292 -1.3571845342255344 +304 292 1.6351956444682918 +316 292 -.21036588927899222 +317 292 -1.2220907586487315 +319 292 1.485295099024396 +325 292 .7432639370779011 +339 292 .4662959207330165 +351 292 -3.0818224937950096 +358 292 -.6906808776300217 +360 292 .5829810614120108 +390 292 1.1327806560855234 +392 292 -1.1746409244595124 +393 292 -.9390316322236287 +403 292 -.9643675909071505 +417 292 5.322508642308176 +421 292 -.423190285860945 +424 292 2.813977288744893 +434 292 .9623203141215926 +448 292 .9767567645427593 +454 292 -.4421112779226585 +455 292 1.244386239450194 +457 292 1.6266185104225932 +471 292 .28929880810316844 +480 292 -.06292534504051484 +483 292 1.240937749928891 +489 292 -.6906425147375781 +494 292 .49400224204202803 +499 292 1.1871321793095724 +501 292 -3.5658659102138923 +507 292 -.2981081352313789 +508 292 1.6724532881217087 +540 292 .6436860888445677 +557 292 -.9627584601161894 +559 292 -1.734321105141618 +563 292 1.57132278788704 +566 292 .5898465603241612 +571 292 .5868469634622279 +592 292 -2.962177151973556 +598 292 1.8392109875557852 +600 292 2.7963552769035642 +610 292 -.7968310808752792 +618 292 1.5353081614864692 +619 292 1.2233270391275308 +624 292 3.953303379220888 +642 292 .24357340934399768 +666 292 1.6857199540168173 +675 292 1.0535538660523152 +680 292 2.7276570785932996 +687 292 -.3301378665388858 +700 292 .6621460434266737 +703 292 .9406949658732061 +713 292 -1.0781673171413202 +725 292 .545862781796019 +732 292 2.9896627942114646 +752 292 1.839422713961795 +756 292 .4899396059114005 +776 292 -1.6038563502400107 +786 292 -1.4215738613774078 +788 292 -.529804441396029 +794 292 -.574130479221431 +795 292 1.6301267896862714 +798 292 -.5760411538066061 +800 292 -1.5895804662664565 +815 292 -.3124822149525906 +817 292 1.2575750350554677 +818 292 1.0530198938306015 +821 292 -.49547410963171234 +823 292 1.7291924516619632 +825 292 1.631303791961508 +848 292 -.9260068675987003 +879 292 1.90008508858003 +884 292 1.8711968717780225 +890 292 -.685504362579443 +893 292 .022370200277636754 +896 292 2.1594276571310917 +903 292 3.0735635374608568 +907 292 -.8277928550488339 +908 292 .698373523613501 +913 292 -1.026308250396506 +929 292 -2.8412277955482335 +935 292 1.6938787478209996 +940 292 -1.2079411124803066 +950 292 .14030749202905113 +955 292 .36698808520901527 +986 292 2.8832644892400086 +991 292 2.8351833153106814 +999 292 -.2933988219375153 +4 293 -.5482684247577376 +7 293 .5212868076092709 +9 293 .5490002929697599 +16 293 -.06290761435465979 +40 293 -.24407233057404618 +44 293 1.2607325010074282 +45 293 .2644038523597876 +59 293 -.09519885730552947 +72 293 .586633154167369 +81 293 .4974250056928139 +105 293 -1.1734827468345006 +130 293 .726517931753045 +131 293 .8434727652052689 +132 293 -.2477407615920858 +136 293 -2.723906407686568 +146 293 .9617300335186806 +148 293 .8114078430051385 +149 293 -1.4793046724169299 +159 293 -.5413435871522042 +169 293 .3264166254753451 +170 293 -.8909836245332361 +217 293 .059890026416159904 +221 293 .3669525559034438 +230 293 -.056271505035912786 +238 293 -1.267368688431333 +240 293 .23190930277516408 +263 293 .13837695941043063 +279 293 -1.223963086576857 +297 293 -1.1423037492310422 +301 293 .46496973113082724 +325 293 -1.0840475490709585 +331 293 -.1912294214887099 +350 293 -.49918313176212137 +365 293 -1.1772084781136911 +370 293 1.216155899196423 +374 293 -.9940972202901688 +376 293 .7047337567740849 +387 293 -.54080343547194 +394 293 1.867889036488684 +416 293 .7860808078349458 +477 293 -.09600674512767861 +483 293 .7312319338871199 +511 293 -.14344441105779332 +513 293 -2.2412228325815864 +523 293 .2925090503327295 +526 293 -.146600290152393 +542 293 -.1830948223816079 +556 293 .8857529783358506 +558 293 -.6478968224143788 +565 293 .02564145488444919 +589 293 -.6808285653926611 +606 293 1.0479239818832067 +619 293 .7165954188152166 +635 293 -.5253940520961767 +637 293 .5932972070391782 +665 293 -.9169276449895322 +670 293 .41144042392234886 +671 293 .9194887990717427 +680 293 1.0342790018257144 +686 293 .3950371757917236 +689 293 .9394734508296996 +698 293 1.8065935585596447 +701 293 -.46067508392438405 +702 293 -.15251658505028556 +714 293 1.1148495938782226 +722 293 -.7228035924931502 +749 293 1.0415348459014437 +761 293 .689382456667733 +766 293 .6474460917527157 +767 293 2.8503705839423663 +777 293 -.5804705063488684 +785 293 .8342555609217146 +795 293 -.3506662214404561 +808 293 .9039568639837998 +816 293 .022375698489075703 +818 293 -.8611444925910492 +819 293 -1.3900244501974712 +823 293 -.30030092290142596 +830 293 -1.0325940034581405 +831 293 -.3339060518208329 +844 293 -.5940868922209118 +849 293 -1.966688441720286 +857 293 -.19941470129030053 +859 293 2.0067968152740763 +861 293 -1.187794139452854 +864 293 .40227074050949607 +880 293 .5211899075447192 +918 293 -1.2100345346900583 +919 293 -.5345432719061302 +932 293 -1.346569216391008 +938 293 1.0324010904306002 +945 293 .1432730516995547 +954 293 -.19160033092471568 +11 294 .7402952819480921 +17 294 -.019079976217009798 +34 294 1.1525063851457198 +46 294 -.40663268629336613 +54 294 -.5088970629622203 +87 294 -.6631377876446587 +94 294 -.09779503364716252 +95 294 -.6987453211432941 +127 294 1.3042098764278878 +141 294 -.6011267448462368 +158 294 1.0537751973349418 +165 294 -.474889857457256 +177 294 -1.425701357346796 +178 294 .6172162661221496 +196 294 2.2870041949681843 +205 294 .2768917731052994 +216 294 -1.8068707461165003 +219 294 .41279418300355103 +249 294 -1.6984745674111281 +258 294 .4714498844374299 +267 294 1.9213186085700085 +271 294 1.501233191653651 +298 294 .6508392043166403 +303 294 1.319899789862591 +317 294 -1.2013631924565522 +337 294 -.30228118451076547 +338 294 .03755610052852278 +350 294 -.5364390543584391 +372 294 .41542093946287717 +377 294 -.4073450201558332 +378 294 1.9351608678262027 +380 294 .09058579566418719 +395 294 .05329017860555049 +396 294 2.064909522393085 +397 294 .023877824773757272 +401 294 -.28403968409974056 +422 294 -.638603755097904 +457 294 .18430114355515775 +470 294 -.815551062102058 +479 294 .1292904797929153 +486 294 .04467797167262052 +488 294 -.48587828359995244 +495 294 -.3793648173665382 +502 294 .6545565582759946 +510 294 1.7709817312525382 +524 294 -.6187745476661124 +531 294 .20543649963714591 +536 294 .6192214003025615 +556 294 .8388332465591212 +557 294 -.90335825247958 +570 294 -.770954258109951 +575 294 -2.2843719753400187 +589 294 -1.594537964253272 +603 294 .8146587648366324 +636 294 -.32134033356662933 +646 294 .11184246207284107 +652 294 .08180254515588178 +657 294 1.6507125569086079 +668 294 -.7024031546124812 +679 294 -1.3423140263680196 +681 294 -.8737917821662443 +691 294 .815110457099561 +701 294 .7559043389522382 +702 294 -.10844403019058456 +715 294 .45095286887265695 +729 294 .44125098757573844 +731 294 -.5683077031521211 +747 294 1.0391453091730067 +757 294 -.15424419628434308 +759 294 -.31543598833474873 +760 294 .38154556117772315 +785 294 -1.475453016823461 +791 294 -.029304634474783625 +793 294 -1.5239187025222005 +803 294 -2.195775592460087 +817 294 -.7924571799861064 +820 294 -1.3934662443308476 +828 294 .529317529382163 +838 294 -1.5974141790932364 +839 294 -.33916316281011566 +851 294 .8474166289685725 +856 294 -.8363049321209018 +892 294 .5396499220787989 +894 294 .21924555601528242 +910 294 1.1476989281347896 +920 294 -1.2042091607302732 +937 294 -2.376847525845884 +947 294 -1.8464488995082202 +950 294 .8476823532538372 +970 294 -1.8925620209801295 +974 294 -.39213934084283775 +986 294 1.9239883336627306 +992 294 -.7759804374427415 +999 294 -.9574226372686512 +6 295 1.7793144425679535 +12 295 1.2085852357853635 +14 295 .26913000745402893 +20 295 1.1702142714603982 +27 295 -2.472260863778744 +40 295 -.3042629932719249 +46 295 .6820842744411221 +51 295 .13160330859944055 +52 295 -.48146303981267946 +62 295 1.4957874970257863 +68 295 .5998172526383889 +108 295 .9651054294526362 +120 295 1.0459189286101644 +167 295 -.30324575425819617 +172 295 .113560280324757 +176 295 -.6163146117687884 +181 295 .5815783427029401 +190 295 1.5929616227270411 +194 295 -.1147123365872057 +202 295 1.5308520106622805 +224 295 .48391023560870144 +240 295 -1.8616476309086114 +243 295 .2518165169594268 +250 295 1.4504749871465732 +253 295 1.2500504003456534 +258 295 -.5540269394944922 +291 295 .10222229736333954 +300 295 .07218144417531977 +307 295 1.1146320816590918 +328 295 -.5681354407767883 +329 295 .9394179068225565 +337 295 .024235502160244227 +339 295 -.3189783271232837 +352 295 -1.5882925103828678 +357 295 -2.113876805103832 +376 295 -1.3007076208011417 +391 295 1.3938001372324573 +399 295 -.9917820710503957 +404 295 -.24561669826714672 +405 295 -.23776033846940473 +428 295 -.7617451525421327 +434 295 -.14189205910545027 +435 295 -2.018767017698579 +447 295 -2.2520713617973525 +464 295 1.291189332997411 +469 295 -.9226330320962829 +470 295 .6540115060963466 +473 295 -1.6055391295200752 +478 295 -1.1051956320369927 +499 295 -.4454098543855368 +504 295 -.7794888473877778 +506 295 .8694136150615753 +510 295 -.1501907824434947 +523 295 -.6624594746521687 +533 295 .047148573978388876 +591 295 -.786774462165146 +596 295 .6037956917934729 +607 295 -.4784587056668386 +608 295 .8223497382280963 +625 295 -1.5455501841447514 +634 295 -3.0989559315421564 +659 295 .3029009484497529 +672 295 .8466036324693182 +682 295 1.492039360334973 +689 295 .32561323056027247 +727 295 .40604443839903054 +745 295 .5260803157685126 +754 295 -.6552964935049584 +759 295 .641968216459971 +765 295 -2.541387944816303 +768 295 .4570071174472816 +770 295 .12763486439354121 +779 295 -1.647279557461209 +787 295 .33075546429697583 +792 295 -.9774852430577783 +825 295 -.7591703578068657 +850 295 .8114647707395308 +855 295 -.08132070662725296 +859 295 .060824198754669004 +872 295 -.013408254549616284 +875 295 .154617286184551 +881 295 .7821071263156387 +896 295 -.11835205676840795 +909 295 .5106038299770065 +912 295 -.9451204462705546 +917 295 -1.4057638659246763 +954 295 -.14423552267180034 +964 295 .9356283539176984 +977 295 .4052421710112086 +979 295 .8568998911604202 +982 295 -.6339196638569627 +985 295 .4693087372546051 +994 295 -1.5209959946713703 +2 296 .5621459673979158 +6 296 -.5040151428406002 +36 296 .37350112246122713 +47 296 .09500545575906243 +54 296 -.118011848998516 +66 296 -.8152197748566717 +77 296 .43936308732343876 +83 296 .5480599695680685 +86 296 .0800218434011577 +92 296 .19019706036171835 +104 296 .6331867152577835 +108 296 .733189452562042 +114 296 -.1757439774552636 +120 296 .5448475265434317 +124 296 .17613662208041006 +142 296 .6010369118494072 +161 296 .372019175215203 +165 296 .3380844578292415 +171 296 -1.3127569420645635 +187 296 1.9150210358584303 +194 296 .34232458676977534 +230 296 -.041848617923854 +238 296 .08547723187356428 +262 296 .925727819493296 +268 296 .6144254954860396 +276 296 -.07466489710688189 +283 296 -.6191123565199526 +289 296 .8132370709217579 +292 296 -.3558754832244473 +304 296 .327427987583771 +308 296 -.4510622310063444 +309 296 -.6067605323299549 +311 296 -.11897811795003074 +313 296 .39388279581695607 +315 296 .6484073984151676 +319 296 .22972613644709944 +341 296 -.6866763818713331 +356 296 .17411381441595808 +413 296 -.5065561868440825 +430 296 -.034643880966287795 +431 296 -.2741190504079511 +497 296 -.2738954828693502 +511 296 .2989509524816226 +514 296 -1.1230221271824805 +518 296 -.012320597722554658 +525 296 .13745940816358346 +535 296 .23871603107197334 +567 296 -.40976074889134123 +604 296 -.31924461336806104 +607 296 .4376532189716427 +636 296 .3942302819734465 +645 296 -.2651955868344336 +656 296 1.0353227257096091 +675 296 .08050223492997031 +677 296 .9914937433318539 +681 296 .9072690768124054 +685 296 .5083843783791773 +692 296 -.0006948407240223078 +695 296 .22652436489255884 +699 296 -.30083712220195125 +731 296 .1970762385658379 +737 296 .4989077797502476 +750 296 .5417732009103396 +759 296 -.7071174188467239 +762 296 -.27993927873200547 +771 296 1.2949672882328436 +775 296 -.5313715022065741 +779 296 1.2396744324462743 +794 296 -.17371959361991632 +809 296 .17911781469265997 +811 296 -.13829949793060756 +815 296 .37550721460502523 +816 296 -.17498789861888708 +824 296 .6734337222990258 +825 296 -.04397554604179785 +831 296 -.7161888602531401 +844 296 -.17565855188283838 +848 296 .9677117566321664 +862 296 1.1087940420444817 +863 296 -1.046186301550445 +864 296 -.4424035253195795 +878 296 1.087297697894945 +882 296 .5504248248011983 +892 296 -.38325679638550253 +895 296 .43769349783272316 +899 296 .6368505728328745 +903 296 .13513639236578676 +906 296 -.5466110392041694 +912 296 -1.3359007266847245 +913 296 -.2510083841632232 +926 296 .35127933237819764 +930 296 .14332029410023878 +935 296 .36932082609471834 +940 296 -.6423004667228894 +956 296 .1424262280910121 +959 296 -.14533101673854748 +965 296 .05572986903337045 +984 296 .8530834153794677 +986 296 -.36419111363933515 +987 296 1.483780029516612 +989 296 .4532110851779326 +9 297 -.02570846806644876 +18 297 .0285571699152634 +19 297 .3934228540216488 +36 297 -.03880550166370397 +61 297 -.6568997376386131 +70 297 -.23059284157581675 +71 297 .1020431001061088 +74 297 -.294239886667724 +77 297 -.2445918401236108 +87 297 -.07008088991866401 +105 297 -.3996490648332095 +130 297 -.4839594965574506 +135 297 -.08245745220871287 +137 297 -.9753546096160036 +150 297 .9594397526806251 +158 297 .4197989712256198 +159 297 -.956195025394776 +161 297 -.2431833722705103 +171 297 -1.0968339553861957 +178 297 .5152068621624339 +194 297 -.5366265859693624 +196 297 .0709711526083189 +205 297 .03567387150565633 +232 297 -.6782454055292958 +233 297 .2647499961616458 +241 297 .435429447169398 +247 297 .7913030377504747 +283 297 .4734315502637364 +291 297 .6436280768413523 +301 297 .6977919857973967 +321 297 -.43742171195544394 +331 297 -.8122511971017691 +336 297 .7925371762616817 +338 297 .08026884296131072 +354 297 1.5406112628705462 +372 297 -.6286967522085328 +392 297 -.5993533812539276 +398 297 .14962981283665092 +409 297 .3968429686538192 +417 297 .7035667156114042 +420 297 -.45820244218899875 +438 297 -.05922568854529747 +439 297 -1.1185028903682661 +441 297 .3397147316331504 +442 297 .028517825000664687 +443 297 .32753505858735965 +486 297 -.0342232233509497 +487 297 -.9876636729801499 +533 297 .20600283705340736 +558 297 .7780725086710822 +570 297 -.5211335443198661 +580 297 -.1617576537976595 +582 297 -.5778153436272372 +583 297 -.8529816237967143 +591 297 .10541321557577699 +592 297 -.22946178792740524 +605 297 -.03144215780977219 +615 297 .09315815497966864 +620 297 .8170101073420105 +622 297 -.5598224790260214 +625 297 -.25660059097214805 +627 297 -.558538499835463 +648 297 -.4515861606394123 +651 297 -.03986236936466256 +673 297 -.5527517330186652 +677 297 -.07606445732207362 +691 297 .04200842973179483 +706 297 -1.1233138737116377 +727 297 .11907296522135397 +733 297 -.7111934089547959 +741 297 -.4217288714024578 +749 297 -.2274562123532056 +758 297 -.687768747931673 +759 297 -.4722347846050704 +770 297 .3337926509561177 +780 297 .2854948425329603 +806 297 -.5233071594418418 +808 297 -.5485906231550767 +824 297 .03616891206209158 +826 297 .5930985083472684 +830 297 -.47641521979639234 +835 297 .861963139052401 +838 297 .28379822275254196 +840 297 -.03396739723188096 +850 297 .029132733752397326 +860 297 -.15641038855895267 +870 297 .512320994649614 +878 297 .31938480694005367 +881 297 .46978586406478395 +885 297 .33687699859100123 +900 297 -.1570679735034192 +901 297 -.2964210433763296 +917 297 .4631302564324799 +918 297 -.2955529029097871 +929 297 -.22615526369041905 +945 297 -.8768122446461382 +954 297 -.7912472136960842 +963 297 .6775094618124897 +999 297 1.2982271278655997 +4 298 -.8740122276463678 +11 298 2.5560827604281826 +13 298 .41145935388958454 +31 298 -.8373685120819421 +41 298 2.9116633631418916 +45 298 .2893401548597237 +52 298 -.0048901392536175375 +60 298 -1.3625821643316445 +124 298 .29004308119936173 +125 298 .24977281422417186 +135 298 .49530219592828206 +144 298 .5262135695694209 +151 298 2.2851646903968965 +158 298 -1.3912993223656 +170 298 -.28961448084593283 +181 298 -1.358204383380207 +206 298 .27654769567536974 +221 298 -1.3850077753579633 +222 298 .7792696985190638 +223 298 -.10441577715508886 +225 298 -.44514092328838184 +226 298 -1.5891708859476887 +230 298 -1.040832918056397 +241 298 -.8243193121872046 +253 298 .03164452208663685 +274 298 -1.4835547383308094 +275 298 1.6707879738159863 +276 298 -.32343742241584367 +310 298 -.3549574463319314 +341 298 -.9529021941301684 +364 298 .8361702837559233 +380 298 .9342892013485128 +381 298 -.2437693709074952 +383 298 -.9796060498312277 +396 298 -1.454206431110761 +400 298 1.994637334950521 +405 298 -.973787612122112 +425 298 1.5378402075226352 +430 298 1.8072818257162437 +440 298 .042802512480319244 +445 298 1.0365881188092159 +453 298 -1.2373853517439748 +475 298 .00905819572490428 +479 298 -.998848319814463 +480 298 -.7941166456592779 +484 298 -1.6527393563736827 +496 298 -.14414992223879503 +525 298 -1.507865125905355 +527 298 -.6559578904843861 +530 298 -1.1324147818701382 +531 298 -.21648902289157748 +559 298 1.7194324911977596 +561 298 1.6806468825077912 +563 298 .2580354667288934 +587 298 1.6743476350807653 +591 298 -.7567504488435064 +599 298 .1914320808497091 +607 298 -.6537483059698704 +619 298 .6049072477075023 +623 298 -.09692563481705077 +627 298 2.451092441523469 +628 298 -.1873375012815726 +629 298 -1.2255290556301162 +634 298 .22475237169730616 +640 298 -.17232790865034953 +643 298 -.1126919229878398 +646 298 -.9746650674097148 +659 298 .5278250951832895 +692 298 -.14402430670440908 +694 298 1.1120932564947459 +715 298 -1.1142063286255885 +725 298 1.1396472171653766 +733 298 -.73898502494308 +734 298 -.8806370279052453 +743 298 -.20041877337501482 +775 298 -.24558241491978144 +779 298 1.7031362214140426 +780 298 .32307419876713395 +789 298 .28804668780885045 +811 298 .3509936602634489 +813 298 -2.5562922351584647 +831 298 .7971465910524285 +835 298 .08820269517868211 +837 298 -1.1861967989305264 +847 298 1.6094482660766727 +879 298 .360954585157596 +904 298 1.1493851230394372 +916 298 -.8929902139049253 +931 298 .924979853141569 +938 298 1.197226119606753 +941 298 -.02553457823514757 +952 298 -2.3043697039463993 +959 298 -1.081760660037959 +963 298 -.6733575230426659 +972 298 -.9683792880816934 +978 298 .520471779334554 +982 298 -.31172610581792093 +6 299 .6229288458759777 +7 299 -.41755701297634035 +12 299 -.13323850512044455 +21 299 .2293347852783465 +41 299 .4727672577664798 +52 299 .9888417172358781 +53 299 -1.0886673317602804 +55 299 -.4183514399405216 +58 299 -.9511711850546869 +79 299 .7733382191309414 +86 299 .0980822110446766 +88 299 .32664574879702457 +99 299 -2.3714736128192713 +115 299 .13983219754120263 +117 299 .8411820340538709 +144 299 -.7159993832456183 +149 299 -.8926932893192302 +152 299 .9323862977495893 +164 299 .20295965742184838 +184 299 -.19841318108551118 +187 299 .5089931907982171 +205 299 .4324132265744641 +221 299 1.7357752125751518 +229 299 1.1799767942390704 +240 299 -.6190740251909191 +241 299 -.017082722899296944 +244 299 1.2288947593709758 +257 299 -1.4558319751731101 +274 299 -.5964178374186263 +282 299 -.2020438214747142 +286 299 .2466025608730786 +296 299 .5070760762642735 +303 299 -1.3782719844251798 +304 299 .08713340438369105 +321 299 .17966989274761563 +326 299 .8909437670444726 +327 299 .6638521880586346 +337 299 .47785601644759235 +338 299 -.12889569046922267 +352 299 -.5459499642670514 +368 299 -2.3996485807154446 +370 299 .24059431156052266 +371 299 -.1375686976605087 +381 299 1.5434089733956926 +395 299 .3456366724543458 +407 299 -.09076362629104695 +409 299 .37771676067586146 +415 299 1.3470004743869757 +441 299 1.3198575452758647 +458 299 -.245287614172684 +459 299 -.5206075263978299 +460 299 -.7966229330469892 +484 299 .8553666492112191 +491 299 -.2947400666311859 +492 299 .6067395763212117 +496 299 -.05582266882157311 +497 299 .009277085751438235 +503 299 -.2932155920963653 +507 299 -.30578788995802897 +510 299 -1.5207965970804282 +516 299 -.2088177069048302 +518 299 1.2635522323430102 +520 299 .7946458905806171 +524 299 .6343033696418032 +530 299 -.2342594494618451 +536 299 -.6525764782210365 +545 299 -.2889762829835098 +560 299 .06188223038978815 +584 299 -.5501412345065242 +604 299 -.6923129168591265 +608 299 -.43453641875103444 +615 299 .2967374095810831 +623 299 .44040125211743253 +627 299 -.8144503583527914 +629 299 -.26726962099596485 +642 299 1.5015275714778196 +662 299 -.3238427541585923 +666 299 .6899651518187967 +678 299 .6809751003429038 +697 299 .7532655596505573 +703 299 -.47163826947847154 +722 299 -1.9383652582065616 +746 299 -.06933869876903305 +750 299 .13959365083543532 +781 299 -.4163864175584194 +791 299 .5630870342232733 +800 299 .7987618868292138 +805 299 .6986421198837427 +808 299 -.8211598998051098 +818 299 -.7913402582538087 +839 299 .758361416908665 +868 299 .15256522082897056 +876 299 -.2414825334197841 +877 299 .42504000258473495 +898 299 -1.0164117482047483 +899 299 1.2343669632125691 +906 299 -2.243205457366093 +910 299 -.42264764828619655 +917 299 -.08956872278023192 +918 299 .9778676838351915 +931 299 -.44463554718064763 +948 299 .0765432357072511 +949 299 -2.525018778794452 +952 299 1.4518679172909958 +954 299 -.7012913425990966 +957 299 -.31210333713764327 +967 299 -.9020375921437684 +991 299 .7554230903327198 +993 299 .5264483911583552 +1 300 -.5297447909927688 +13 300 -.32631241668590094 +21 300 1.0803382583695373 +23 300 -.880226896197108 +36 300 .3440558503187484 +44 300 -.6741337747680219 +89 300 -1.3982677981059441 +93 300 .2550738525534014 +100 300 -.09333816910254095 +107 300 .07176071538358143 +119 300 -.9578591331476419 +123 300 -.7137083825062922 +141 300 .2284108771380423 +143 300 -2.093402668891547 +154 300 .11975126097391586 +158 300 -.10992734073220121 +166 300 1.9062891861749163 +175 300 .5520649221354624 +191 300 -1.6060698230243813 +193 300 -.12161163296429746 +197 300 1.877702708865017 +204 300 -1.5752054694892785 +222 300 1.0294906179971122 +235 300 .5725029514787268 +273 300 .85708523332111 +304 300 -1.426990264463454 +307 300 1.1089388917864613 +316 300 .8031108943862618 +318 300 1.8866913613145964 +322 300 1.470293695095961 +324 300 .08953282058317531 +334 300 -1.0200977518538885 +335 300 -.0683508374055793 +343 300 .3693116265104108 +377 300 -.5349156694640056 +386 300 .4174455762746619 +394 300 -1.1962997435803011 +412 300 -.3532791508439572 +414 300 .9955471216606909 +435 300 .26191477662772694 +440 300 .12211919887288694 +441 300 -.10092840997864151 +444 300 2.144567449661033 +466 300 -.531576290854554 +484 300 1.916256720618687 +491 300 .01583024030140575 +509 300 -.7058734116892335 +518 300 .09731192324258174 +522 300 -1.250179794797692 +525 300 1.8436948337032446 +528 300 -.8276627228084849 +536 300 -1.9700924912536486 +547 300 -.08624821402409483 +559 300 .6073481153457213 +574 300 .08244888102959466 +585 300 1.5099559345897564 +593 300 .08523461564992799 +601 300 .6528885867059041 +607 300 .012391920201727753 +619 300 -1.0528653062307805 +634 300 .06658506802553343 +649 300 1.2478693495989972 +651 300 -.18796765990057065 +653 300 -.15737136638931842 +660 300 -.1791289533236416 +685 300 -.9717729152339716 +695 300 -.6956064957608464 +698 300 -.7393854906703269 +711 300 1.3387988782630995 +734 300 .1861580312367792 +743 300 -1.3638913999265445 +758 300 1.9138257185458702 +771 300 1.8317235422759643 +776 300 .3081165327961276 +777 300 -.37834527165353293 +783 300 .23106545886183893 +784 300 -.6661297629669626 +803 300 .6180576462610741 +807 300 -.4113756387522406 +810 300 1.1760038034369935 +835 300 -.20754578574661536 +836 300 .07546230084420608 +841 300 .6485891083809702 +850 300 -1.3749714050232233 +858 300 .8450684619763894 +860 300 .10729225319465259 +878 300 .4974728959149663 +882 300 -.4926549915694978 +894 300 1.6672174176656882 +903 300 -.9658985668523556 +905 300 -.9921241009069025 +917 300 -.6913824984926707 +919 300 -1.128538723328705 +947 300 .7429094597420554 +949 300 -1.6836835768753007 +955 300 -1.172791323229949 +3 301 -1.1375229172423678 +28 301 -.5807091443366948 +97 301 1.5314033107963168 +102 301 -.424586914458118 +112 301 .16730657353670192 +118 301 1.0829979645545154 +132 301 .8479121657890862 +155 301 .2090644871687279 +186 301 -.7588961096979684 +192 301 -.2580824821628165 +199 301 -.3064231295594139 +211 301 -.32502026438628595 +243 301 .21983496453315246 +252 301 -.32211228194690483 +259 301 -.29243865340004493 +265 301 -.24849759197694665 +275 301 -.8333109981732719 +281 301 -.1907180191018073 +290 301 -.20765955599288827 +331 301 .2816746260377593 +351 301 .5387299279691553 +366 301 -.18651042518762295 +378 301 -.43171750660763386 +380 301 -.45324345829257623 +385 301 .1995171496621942 +388 301 -.9034687447911887 +390 301 -.7855888209239429 +393 301 .5649270768157698 +395 301 -1.0519697969685016 +399 301 -.07949891723539637 +404 301 .8548418829017309 +405 301 -.23754761367139335 +425 301 -.11422199277658551 +429 301 .9784214537464202 +434 301 -.3498317610559444 +452 301 .37953027782712256 +455 301 -.9763645918924115 +462 301 .6110894917637046 +469 301 -.33382698710323266 +483 301 -.4951925811590048 +496 301 .13319438638542722 +499 301 -.45534645141336183 +500 301 .033525546603540936 +502 301 -.480442445771926 +505 301 -.4476289642888879 +516 301 .1843323268962183 +544 301 1.2662624921119556 +573 301 1.110587919695068 +576 301 -.9694017097212044 +577 301 .3269211684628551 +582 301 .5840564841025822 +588 301 -.7683384882999976 +598 301 -.47972173104731 +599 301 -.2675429069499157 +602 301 .040539983464838746 +607 301 .6913890188289404 +608 301 -.14086921334639485 +655 301 -.02662605230309286 +689 301 .2886140207108293 +708 301 .8361971548773629 +728 301 .03305162552132615 +737 301 .5664785219611533 +783 301 1.202685435407469 +790 301 .5108021269385444 +791 301 -.19335733193809237 +792 301 -1.0378814367634375 +799 301 1.4089073017391989 +803 301 .44162734758191485 +827 301 .8157172902269509 +834 301 .16956799282473695 +844 301 -.9447613326975058 +870 301 -.48827398805790706 +878 301 -.5979470971117185 +881 301 -.47054560265051126 +883 301 -.5385458030098286 +897 301 -.3146917858787398 +904 301 -.22330442558137906 +928 301 -.1885730568006258 +950 301 -1.463255292982444 +956 301 -.13626932997016927 +973 301 -.3920936756977076 +983 301 .5329193803423116 +987 301 -.3644338823512484 +991 301 -.0719367764601914 +994 301 -.15622413035878424 +18 302 -1.4414186080995781 +19 302 .3882168082542396 +38 302 .37032599199925625 +57 302 -1.1167898218682855 +58 302 1.0039671494806963 +62 302 -1.397199016991881 +66 302 -.206914118955422 +109 302 .42819316593922696 +111 302 -1.0473698844626576 +131 302 .5759827178681526 +133 302 .05843113759399123 +159 302 -1.6216577321463572 +163 302 .31420506537644965 +176 302 -.1288188554031789 +184 302 .5338498032335287 +197 302 .04367085621114275 +205 302 .26109328440977997 +210 302 -.9677176247107037 +220 302 -1.4588791553812341 +223 302 -1.2753022586258795 +225 302 -1.5028780152984786 +227 302 -2.7778809572649363 +230 302 -.9358910645168816 +239 302 -2.928634407957465 +257 302 .2200112808169568 +277 302 -.5263536693162453 +301 302 .3807712199978712 +320 302 1.337605407251165 +324 302 -.6018448021982278 +325 302 .6905195973763434 +328 302 -.5941770479525769 +340 302 .5941656293359036 +351 302 -.021995557788658644 +377 302 .20380432195416798 +383 302 .2878337445182294 +387 302 -.5573898232932938 +396 302 1.042762705071069 +397 302 -.5520456081195306 +401 302 -.26428272372038775 +404 302 .8129146286964322 +407 302 1.6589253567436728 +418 302 .581912421244897 +427 302 -.2147626690014644 +442 302 .32270582351911514 +462 302 1.5305503156698708 +471 302 -.5436548365677424 +478 302 2.0448476632524137 +482 302 -1.4827816869643389 +487 302 -.9104667169117969 +497 302 .7678306451789099 +503 302 -1.1082965530915319 +508 302 .4419926725569578 +528 302 1.3254713112816268 +530 302 .4487368606732741 +544 302 .6536024944001427 +564 302 -1.441127885041545 +565 302 .03501679657587999 +577 302 .8591731209480239 +585 302 -.8314624886232238 +590 302 .9676371566935522 +592 302 -.4241635078676179 +594 302 .3908766223787187 +600 302 .7498729365514443 +609 302 .9841655337145776 +613 302 .15354710467867208 +627 302 1.4427722231178006 +642 302 .4025709391629146 +649 302 -1.3386716980673952 +650 302 -1.5982685669186487 +651 302 1.5016423120727762 +653 302 1.630632837380731 +655 302 -1.9001536930810699 +661 302 .46117942327661615 +664 302 -.4860885087435528 +671 302 -.8637888817349466 +686 302 -.8248653928918952 +698 302 .13428253206210483 +717 302 -1.1996993357670669 +731 302 -1.3107495831446092 +751 302 .18816466861228628 +757 302 -.7755244438090497 +768 302 1.0965897954927935 +781 302 1.5181778913616872 +807 302 .29565047832000124 +817 302 .21548372395169607 +821 302 -.6331221075943543 +825 302 .9817364545207147 +831 302 -.9305892281508812 +833 302 1.2778392682164563 +849 302 1.0269769416642853 +909 302 -.4589587889801085 +914 302 -.5101749015919829 +915 302 .4836465096422535 +930 302 -.07612906216901681 +939 302 -.17249637057970935 +963 302 -.33125756756052394 +984 302 1.417127535638401 +986 302 2.085424953217722 +988 302 .1899840994853134 +996 302 .181796336740136 +12 303 .5436443245404814 +23 303 -1.9339957464290705 +31 303 .7698904224145431 +42 303 1.9085909203057647 +54 303 .5448207545995458 +64 303 2.1628773324358215 +93 303 1.6459892838672607 +118 303 1.4390312089871649 +120 303 3.003686360301102 +124 303 -.7807841638252649 +127 303 .34978959333974813 +150 303 1.4481212647644772 +163 303 -.3015299251335148 +180 303 -.30105630239865955 +187 303 -2.87460921793003 +194 303 -1.5012255683861566 +203 303 -.1405975259650936 +232 303 .7246515077929362 +234 303 -1.742849731046595 +250 303 .12532507272843665 +301 303 1.172265280409009 +306 303 .24700487791064377 +327 303 .3056369528495756 +329 303 -1.2332019792968316 +331 303 .6129391497985821 +346 303 -.4139227990965303 +360 303 2.519953890350963 +383 303 .1878229554723737 +385 303 .4992954436966973 +397 303 1.2933034721021495 +436 303 1.1610641376027802 +453 303 2.312525378818437 +462 303 -1.9136269373181019 +476 303 .7626492774631699 +477 303 -.8154235474234268 +481 303 1.3515210811439389 +491 303 .8908861413782347 +492 303 1.5678644110641768 +496 303 .27215319722019937 +503 303 1.521557569085306 +508 303 -.2796661483499935 +526 303 .5898965164142334 +539 303 .5309410255549364 +560 303 .561551041976435 +589 303 .7634686515010993 +590 303 -1.6453510802926132 +601 303 .11839662912192349 +604 303 -.8128655307564852 +605 303 -1.5783531860080582 +606 303 .8371066947264706 +620 303 2.125818027526196 +625 303 .14428492609924218 +655 303 .883488604460918 +660 303 -.9403742251382418 +677 303 .6343398008343872 +686 303 .35990135325795514 +690 303 1.752795822798219 +711 303 .049406524849671486 +717 303 .09624529986969976 +720 303 1.0829123502056406 +736 303 .30141017683140536 +739 303 -.6762462140268173 +740 303 1.415498190820321 +754 303 -.2653008563266817 +755 303 -1.4326715929264158 +764 303 .7937647938771913 +769 303 -.8177346324870335 +781 303 -1.3327831007868856 +782 303 .9254434047256033 +785 303 .9502385848482998 +793 303 .4003214660149865 +800 303 -.7778292918551943 +802 303 -1.4977200236457169 +803 303 -.8251100079312105 +806 303 .7261062009491603 +812 303 .09071510696054529 +822 303 -.442324464629322 +825 303 -.38096207503093416 +842 303 -1.6655268962215275 +857 303 .9311903170837119 +860 303 -1.1944965303492512 +876 303 .49822653681189893 +887 303 .03344643892069267 +890 303 1.6809620830212477 +892 303 -1.0837201477681893 +897 303 .14726499549814132 +901 303 -.5634299836902991 +911 303 -.6816555967451401 +937 303 .8172189005930951 +951 303 -1.766901930921948 +953 303 -.26604212478753664 +973 303 -.3667409492130717 +988 303 .16018063639053384 +5 304 -.141738024527238 +6 304 -.0914751347451436 +14 304 -.9220582176521683 +16 304 .5607281110225888 +21 304 .1884244031637206 +34 304 .400312102432425 +36 304 .2698951573803831 +49 304 2.0577220655011224 +50 304 1.5521994535154209 +56 304 -.9086739826699486 +73 304 1.3553992352636843 +82 304 -.7704878917045952 +83 304 1.1745283721411812 +95 304 -2.3338170327873287 +97 304 2.64581170527151 +109 304 -.9413905174148371 +113 304 .15276120663752707 +134 304 -.22364063808633977 +138 304 -.5756458431253353 +180 304 -.25485166447574625 +181 304 .11332836633193835 +194 304 -1.0558655833805677 +219 304 .36452141770485 +223 304 -1.3597821156693302 +226 304 2.4673391591432705 +237 304 -.5668450888092582 +248 304 -.5263880497463543 +276 304 .49408143192372955 +292 304 -1.0559036356165963 +309 304 .8842006980892211 +311 304 -.17489451450548008 +327 304 -.24865810024171023 +328 304 -.8044766065074603 +331 304 -.6499559015176115 +347 304 1.0197997668995544 +352 304 .5543370421375077 +362 304 -.5814767569502307 +363 304 -2.383809095915028 +373 304 -.9577587684299618 +382 304 -.11180974455312083 +391 304 .21639031275587184 +393 304 .3238273538369647 +407 304 -.6449493134049427 +424 304 1.0556706347878586 +439 304 -.4719705575366788 +440 304 -1.5166871221451848 +441 304 1.961356023964557 +448 304 .12795615710192898 +472 304 -.9781685424161023 +475 304 .9210488717388327 +489 304 .7976315134658499 +495 304 1.4782591918534698 +530 304 -.7457346377880864 +533 304 -.29928453988685955 +541 304 -1.712627606890936 +549 304 .6166260344469627 +551 304 -1.6329676364615524 +553 304 -.6688492848265878 +573 304 .8519183929589024 +574 304 -.9123290851381436 +577 304 1.0209027781758484 +578 304 .3522566900931209 +593 304 -1.187727769220779 +610 304 -1.9969248819812833 +615 304 -1.2147549039437426 +644 304 -1.5648578286075119 +653 304 1.369889050499366 +664 304 .5819118822505176 +670 304 -1.006136624421026 +683 304 1.1688124647538785 +694 304 .9565397841359443 +711 304 .423864958148381 +713 304 .09832690232638602 +716 304 .7218424223501516 +721 304 1.5581982127083625 +736 304 .2216426924043838 +741 304 .06436176699213247 +745 304 1.0901172786562456 +765 304 .1954591592374983 +771 304 1.2479672937488666 +792 304 -.5852479151365787 +794 304 1.1027608769535002 +805 304 .1259427077769173 +817 304 1.4747361078821537 +824 304 1.4679769803190452 +837 304 2.4568241724542843 +849 304 .4287187471316481 +864 304 .1302800676485628 +866 304 .7143935084153864 +875 304 .22285407744964922 +887 304 .45804080974083566 +902 304 1.1216914616712734 +914 304 -2.642117322745497 +919 304 .5634811068286552 +930 304 -.3973479611599535 +934 304 -.8261071018574233 +940 304 -.4978380293671324 +948 304 1.848775701902424 +957 304 .3019289227722164 +977 304 -.11610997813624716 +986 304 .6872075409655841 +992 304 1.0396633337933743 +8 305 -.2612702492611551 +9 305 .43150856233036394 +13 305 -.5093687994588201 +17 305 -.3481957141251335 +25 305 -.22354621108622064 +39 305 -.12990362538084904 +44 305 -1.4315479890012188 +45 305 -.7846168445391365 +54 305 -1.7300309573559 +60 305 .7040960018804209 +69 305 .8325198604183877 +73 305 -.8988905449074852 +97 305 1.2478131306259774 +98 305 -.5886541222816372 +100 305 .6581220791662852 +111 305 1.7981557552088314 +118 305 .5255808320666315 +128 305 -1.5329773231579547 +134 305 -.4546536301652774 +135 305 .07598627865309705 +152 305 -.7665228487636432 +161 305 -.43249058304997795 +170 305 1.2283068006454985 +178 305 .5400144060822398 +180 305 1.1492255855662423 +216 305 -.9507002243748244 +224 305 -.7559768263430044 +230 305 -.11131201541397458 +231 305 -1.169415770566633 +243 305 .08414245933148834 +254 305 -.8092338882301282 +257 305 -1.069053533416159 +260 305 .6568762659071553 +262 305 1.2291725645739162 +278 305 -.30077810786867365 +279 305 -.015684101852381116 +280 305 .48788413925479013 +296 305 -.0873835146206433 +304 305 -.16243031796319035 +305 305 .40736575525516633 +308 305 .8741796163282392 +322 305 2.2585363517164607 +336 305 2.228228761928872 +337 305 .09567706081815402 +338 305 -.09158744158695618 +347 305 .5315303229978179 +366 305 -1.764383812658606 +375 305 .22160622603661972 +379 305 2.3982084967452275 +386 305 -.46481813729455757 +402 305 1.6704972658978674 +410 305 -.5109354665239251 +412 305 -.20386770497187814 +416 305 -1.148043265799398 +421 305 -1.310586828815942 +429 305 .29213703425392845 +432 305 -.1248983955643097 +447 305 -.15096819682931195 +461 305 1.820873007515784 +469 305 .007949957336905053 +470 305 .9439483534475975 +485 305 .030334319816476996 +488 305 1.676966115071369 +489 305 -1.0504756184071329 +492 305 -.4920129090988792 +496 305 .0976647101484186 +504 305 1.4121164151918628 +510 305 1.3044445713288515 +511 305 1.2332511967744713 +515 305 .88313797820551 +541 305 -1.1110945157367436 +553 305 -.05539605471268466 +555 305 -.06201624852906894 +558 305 1.686714599184667 +559 305 -.8085925042879005 +579 305 -.21390503494105187 +580 305 -.2731122445672378 +581 305 -1.0854805167255979 +601 305 -.61004992681228 +607 305 .3841450856772507 +608 305 -.1843872040204941 +622 305 1.4273534903985536 +629 305 .9955871553206379 +645 305 .4199358901426387 +648 305 1.000293663851932 +672 305 .1492193379463692 +689 305 .7505680170838348 +703 305 -.17119419405909658 +718 305 -1.8969973979560986 +738 305 -.8643494304773928 +747 305 -1.08540036928282 +752 305 .6371088816327032 +772 305 -.6779228358657873 +777 305 .9980912552594797 +781 305 .6696851592123861 +786 305 .25880884655308894 +787 305 -1.253837002616239 +796 305 .5392286327568536 +803 305 -.2509716900341375 +812 305 -.2230973816826042 +834 305 1.037875883208493 +846 305 -1.1906816243885343 +873 305 -.4931847338231123 +874 305 .14869503751241694 +898 305 1.6575223289596666 +901 305 .6845728168311154 +919 305 -.6575440606128343 +942 305 .2703847337327829 +944 305 .6065217887637737 +947 305 -.06563907598832994 +958 305 .5903754914406316 +959 305 2.1564346736661233 +979 305 .20907394502995205 +986 305 .3041367565102792 +991 305 1.2371931322366305 +10 306 .6386281927124997 +40 306 -.1890975412526914 +75 306 1.1844820156876104 +76 306 -.30323252774310444 +94 306 .37578755750858217 +111 306 -.880596152224321 +155 306 -.13537281254993183 +161 306 -.781874985416945 +167 306 1.1700951496749523 +208 306 -.7393786334431093 +215 306 .35531686954094654 +217 306 -.2990578696633316 +219 306 .1932940187052602 +226 306 -.5230906036934644 +228 306 .26789491653477304 +229 306 .5932386243772039 +235 306 .27538762423195334 +248 306 1.280805942280682 +257 306 1.1047379609855614 +260 306 -.821329354473934 +263 306 .28612966106449655 +268 306 .3625108248064579 +272 306 .08168845049593149 +280 306 -.14547318209113153 +281 306 -1.027927666962954 +299 306 -.1005448880140784 +301 306 -.9571067854642006 +315 306 .9610186837801065 +325 306 .3882750212166723 +333 306 .14540902429301494 +335 306 .37468575084393957 +338 306 -.5384378856292117 +345 306 -.6184407556730032 +350 306 .7070739952791467 +356 306 .21724511857809348 +363 306 .4036766993018619 +369 306 .20883278622148452 +386 306 .1194665961988764 +409 306 -.3688504365087826 +416 306 .15860902334493626 +418 306 -.26603560428467027 +430 306 .5309148392176537 +436 306 .4091356112352379 +443 306 .8156900130348474 +446 306 .9529503411779716 +452 306 .4426091545687131 +469 306 -.21298596274870382 +478 306 -.8306398915904755 +496 306 -.3104769297495345 +510 306 -.7781839984505514 +515 306 -.44680360415363507 +517 306 .025663113182392297 +528 306 .1266504912842657 +529 306 -.07605039643935965 +538 306 -1.48731921209923 +543 306 .15783265341200417 +551 306 -.0724806404271382 +555 306 .45610852104899013 +557 306 -.36268368243174864 +572 306 1.1212637673478452 +611 306 .16918156890678437 +618 306 -.6968145997647555 +622 306 -.2832613533252968 +655 306 .5564171369095765 +659 306 .4332900506821359 +660 306 -.17940026760616234 +664 306 -.2415177883823998 +680 306 -.47175912757540905 +682 306 .7849409896789388 +686 306 -.3013422181599892 +695 306 -.03716866763527407 +721 306 -.121945692352574 +722 306 .8600803576276589 +739 306 -.592756656798581 +750 306 .6896491866251483 +756 306 .39995924823338697 +757 306 .5496807439718396 +760 306 -.12332858880867138 +767 306 -.9100027588542104 +778 306 .5779775837688014 +782 306 -.2570551985847888 +790 306 -.20819953681093809 +791 306 -.35631492594281444 +796 306 -1.0809348936048515 +826 306 1.1774326818368883 +837 306 -.0900534701917729 +840 306 .23294423080697893 +841 306 -.212398114097128 +850 306 .8794938652438719 +863 306 1.0361525032883234 +867 306 .1722146930615013 +880 306 .5820531606086059 +898 306 -.24115917463835157 +906 306 .7646114461422757 +912 306 -.4907527878045381 +937 306 .2505350966995115 +940 306 -.0975715861425342 +941 306 .14267564901852064 +944 306 -.7829346461400358 +959 306 .08310190494306564 +964 306 -.38174030457949804 +977 306 .42007678029318274 +23 307 .5397768540686443 +26 307 .2807564460656087 +32 307 .0746064552290244 +83 307 -.4464532064769428 +104 307 -.41147093055466455 +127 307 1.9233298279321773 +166 307 .6838659677670698 +185 307 -.4053822287254742 +191 307 -.7289868231365475 +212 307 -.2724648836214107 +227 307 -2.0180810867356693 +269 307 -.6109336774800805 +279 307 -.032057111839079604 +293 307 -.12648534106233245 +301 307 1.306017298563943 +333 307 -1.6336744329526804 +338 307 .20823384138760945 +340 307 -.8333384709388685 +349 307 -.8165892305736577 +382 307 .10998649641124286 +391 307 .3836596628765584 +398 307 .045530715978024786 +399 307 -.54234797687412 +415 307 -.30523142903191813 +418 307 .04243484475356574 +432 307 .7372238089690055 +436 307 -.2919065951020204 +438 307 .173278441579121 +442 307 .21313092763474978 +443 307 -1.2509278827345147 +447 307 .3607638368006803 +451 307 -.3235854260691376 +474 307 .3721626107012679 +475 307 .1006588652367956 +478 307 .090935102904139 +483 307 -.05596378203876834 +487 307 .9861199370459175 +495 307 -.5152097423407601 +496 307 .11001682389968812 +539 307 .4147785901083643 +557 307 .23186552875096564 +565 307 1.118269366021092 +571 307 1.3594564058783314 +581 307 -2.03203500463022 +591 307 -.09336005830869677 +593 307 .527647708910106 +598 307 1.600096230297001 +601 307 -1.0024109964118773 +605 307 .7786862328748174 +607 307 -.2612178690106849 +619 307 -.838351230409953 +632 307 .427693092402473 +641 307 -.21042690435168843 +651 307 -1.4797602131932357 +668 307 -.10209990601758578 +697 307 -.6445522767159136 +708 307 .6426402691914423 +719 307 .514661892018963 +720 307 .1455416490183306 +727 307 .9547595912259563 +768 307 .5281648324964633 +777 307 .6868985571331817 +784 307 -.7662023908231329 +789 307 -.6225253743643888 +791 307 -.19392986663544493 +796 307 .45447219048983944 +797 307 .18526447676304153 +804 307 .9723429724781022 +811 307 1.1322725193808427 +814 307 -.18139841782725857 +826 307 -.5647379325214277 +828 307 1.4639102480814676 +831 307 -1.4472621290158416 +839 307 -.24575369929584917 +843 307 .9448506103780824 +857 307 .15976105960391412 +859 307 -.44435712417528084 +864 307 -.5697126352106201 +882 307 -1.0233193638237317 +885 307 -.16519802158389013 +898 307 .6537898704776298 +909 307 -.34891266697849405 +918 307 1.2136265051257353 +948 307 .22934327421970704 +972 307 .3653050372468446 +983 307 1.7302641399188214 +984 307 1.3650558877874266 +985 307 -.6710467173227721 +12 308 .5649539692254323 +24 308 -1.3862078594848801 +25 308 .2884462449251555 +59 308 -2.416320554129601 +66 308 -1.7302241290962883 +71 308 -.5244264750786704 +73 308 .1721284784115069 +79 308 -.5702023202160785 +89 308 .6660601791789117 +94 308 -.6949339225736465 +96 308 2.8583462776862123 +99 308 -2.0802358148959055 +101 308 .6186416132773929 +106 308 -.7895330278376806 +114 308 .9368618148417223 +115 308 -2.723175684626967 +120 308 -.4971253767540464 +127 308 -.31247503093509466 +137 308 -1.044031116841284 +146 308 -.21050898893801165 +152 308 .5131356548717111 +160 308 -.3208479815529038 +163 308 -.4918666750523639 +168 308 -.1731667407023607 +170 308 1.1580818786796778 +174 308 .37255632202009137 +197 308 -2.437835658155353 +221 308 2.523598146345801 +235 308 -.44128271110711426 +243 308 -.28440357581652875 +249 308 .6971349892127879 +260 308 -.4732470982306243 +270 308 1.3098589408970676 +316 308 1.5944075304566905 +336 308 2.8883004227363944 +341 308 .7960790728924202 +348 308 1.1997005286837763 +373 308 -.6657988180757671 +384 308 -.9121411865913381 +385 308 .9355759173136852 +402 308 1.5418057948185444 +412 308 -.6844273600586539 +416 308 -.3026559166801217 +422 308 -.18654497945206402 +448 308 -.47492830034284894 +455 308 .7762696333348988 +458 308 -.7930061341991159 +464 308 -2.4189565536846414 +471 308 -.6762846405038683 +492 308 -.0641592618516248 +502 308 -1.4493999773912885 +535 308 .8628950086409414 +538 308 .46725116422457835 +545 308 1.0541841699849561 +548 308 -.20952762726914914 +566 308 -.22265493996519437 +567 308 -1.0837736625614738 +569 308 .2466042753247938 +574 308 -.7762512606759631 +576 308 -1.047628311017672 +585 308 1.5728122046936837 +587 308 -.6947950368799148 +592 308 .36790398921101186 +603 308 -1.8423352010569034 +605 308 1.0050674295039705 +630 308 -.5480266814346263 +633 308 -.3467208121496416 +638 308 -1.4439501186565649 +653 308 -.08659266083836858 +684 308 -.5875696123434425 +685 308 -.17154551200646367 +701 308 -1.0357472860502879 +713 308 -.033895514079477516 +728 308 -1.4991955516366482 +734 308 .11833264612795831 +735 308 -.3555010124868033 +748 308 .9997357240462204 +761 308 -.40018550981574375 +762 308 .6882693650123155 +805 308 -.09406850221427021 +808 308 -1.6771476237270069 +814 308 -1.1955790180272288 +824 308 .3832907470426661 +826 308 -1.5124663775670388 +831 308 -.3174416807655717 +843 308 -.06310977614525695 +856 308 -.9114662914004281 +864 308 1.1115164571961957 +875 308 .22338461137406657 +893 308 -.9340956554466345 +895 308 1.6573890561880198 +898 308 1.491390577049079 +900 308 .6762666955853691 +902 308 1.1752768799965205 +904 308 -.4714719659321722 +917 308 .16455364076835616 +918 308 .17429960033353806 +931 308 -1.2015922314115532 +940 308 -.7923251551783654 +943 308 .0067760240760892515 +944 308 .384850591889723 +955 308 -.9568450814086956 +963 308 .3889979708645838 +972 308 -.09047797633643606 +996 308 -1.444130942547454 +3 309 -.05527545939867256 +4 309 .15790093182706133 +10 309 -1.008194666566401 +11 309 -1.0902969640064977 +17 309 .3273131354002846 +29 309 -.6837553193828576 +31 309 .07126925047728484 +64 309 -.42276518444927746 +73 309 .628894181230506 +77 309 .7448527116971149 +83 309 .025914177475831218 +112 309 .5034101904067391 +122 309 .015784513343575834 +129 309 1.0072068547765292 +137 309 .19444123671331712 +158 309 .36565513812657807 +176 309 .8007346354664393 +193 309 .5780222945884101 +194 309 .6271989735958212 +211 309 1.5574991457925407 +214 309 -.12948085210940657 +219 309 .8187491569514763 +234 309 .8179466656615983 +237 309 .9769922532863407 +240 309 .7437136168771209 +249 309 -.4922381849786272 +253 309 -.5535105206237183 +268 309 .26393465162280555 +275 309 -.5197695463601133 +294 309 .4534292433665855 +295 309 -.7927607829274396 +305 309 .18175843726860275 +311 309 .278778042815335 +332 309 .2881220286419383 +336 309 -.0772431644523778 +340 309 -.8716430378131366 +358 309 -.1855585090135616 +369 309 .3876579947465548 +381 309 -.4812997370602953 +409 309 .4630993620236761 +416 309 .24817917012464638 +433 309 -1.2153002744879573 +442 309 -.1782122537002125 +489 309 -.0072181055003504024 +492 309 1.7356329098790229 +503 309 -.7688445837271936 +505 309 .9438284350798173 +507 309 -.672980327179101 +524 309 -1.204180307357919 +561 309 -1.6105174686815462 +571 309 -.8786336298635076 +589 309 -.19791374005403978 +599 309 -.007131094987324185 +612 309 -.2342743242402434 +626 309 -.10411950214486035 +636 309 -.18919526685746696 +653 309 -.8167939106518344 +663 309 .5380855782190638 +685 309 1.5543397374372485 +697 309 .9911055865378138 +710 309 -.49954746384397697 +721 309 .1044046556428132 +730 309 -.6525599263064878 +742 309 -.1588419613920055 +746 309 .648786210150097 +768 309 -.633578621394653 +773 309 .9202898591687821 +775 309 -.6834269839293489 +778 309 -1.21160299666435 +780 309 .2766040650083621 +792 309 .7745854384628472 +810 309 .1892109215881389 +814 309 .6141493674592688 +821 309 .4948695016172034 +824 309 .863112431664324 +889 309 -1.2901939302519352 +897 309 -1.2780201709098566 +899 309 -.48576081204857713 +912 309 -1.1339626283697661 +914 309 -.8169348071650281 +918 309 -.33506800958260125 +923 309 .3567371434746807 +924 309 .3859303438813704 +977 309 -.3889192587796091 +994 309 .7221654002662532 +10 310 .848442458784285 +17 310 -.3888161540651829 +24 310 -.4263277429671215 +29 310 .8260429492536561 +41 310 1.2570371400570821 +47 310 -.5092213495003859 +55 310 .9329193848368822 +68 310 .11020902122575592 +87 310 1.066322765109089 +93 310 -.09247087132544599 +100 310 -.8717447715034007 +117 310 .26228972086898206 +120 310 .1300315451315615 +124 310 .22464415308604108 +128 310 .252450987544949 +132 310 .3413323040737927 +161 310 -.583689313071281 +163 310 -.5295070980766403 +174 310 -.017634826758913 +189 310 2.068264339409375 +190 310 -1.3601746225287665 +197 310 .9219054474891533 +202 310 -.7810691377880725 +212 310 .09135262147734363 +216 310 .9289124424656847 +227 310 2.419009431158273 +233 310 -.7517666482052721 +249 310 .38972583368750013 +299 310 .04262078628851803 +345 310 -.1627510137975473 +350 310 .5282996435323088 +361 310 -.2786569313009035 +368 310 -.15119524025227166 +372 310 -.8452433637600048 +382 310 -.24708273636041145 +385 310 .5279172348646913 +388 310 .21767837334626547 +392 310 .25066212823040657 +394 310 .17083869718028416 +399 310 -.7695358269095606 +401 310 1.1270310793997838 +404 310 -.8310409998960742 +410 310 .21588671717131688 +425 310 -.4547710675741629 +445 310 .26824408395232796 +446 310 .8085197027631769 +469 310 -.7225011435320157 +470 310 -.8164215145120727 +480 310 -.14149550280231182 +493 310 -.5417675302388055 +494 310 -1.2222561346090106 +511 310 -1.0158058404472021 +541 310 .6280043953986829 +563 310 -.5774304697514556 +564 310 .00798514891872941 +577 310 -.9444610627833658 +586 310 -.8744069111256062 +593 310 .5952056791630796 +594 310 -.8848322052238934 +597 310 -.4169969267233138 +603 310 .5674421125729429 +618 310 -.4738584191609277 +649 310 -.26259827010313874 +679 310 -.017943817893786476 +705 310 -.07216543722211305 +709 310 -.0515544096122307 +722 310 .2801663648605643 +724 310 .0025256599906499505 +729 310 .19818237940959427 +755 310 -.1445356241360915 +760 310 .7171662746161633 +770 310 1.6929803399596548 +783 310 -.004539544631580544 +786 310 -.2991814986834158 +788 310 .8826017138577968 +792 310 -.04038651891582113 +794 310 -.7731280539830434 +813 310 -.9836221853162735 +832 310 -.22356862622424317 +846 310 .3327957643066148 +847 310 1.2471643947302304 +854 310 -.09269130562777401 +870 310 .30556666588410014 +883 310 -.056517134240296474 +892 310 .5233541584357427 +909 310 .11649606329510237 +920 310 -.48612611536677314 +922 310 .5869411927006107 +924 310 -2.0686435215733616 +942 310 .3440734020778617 +945 310 -.03942132866934139 +948 310 -1.0235113046021431 +953 310 .3134066997363376 +978 310 .13646097078068753 +984 310 -1.2935974646457018 +993 310 -.2586068723240772 +11 311 .2597378896382034 +35 311 -.2528787163252404 +52 311 1.383479537426062 +56 311 -1.728257444916278 +62 311 -2.0333024181376507 +72 311 1.8942874176491504 +87 311 1.0082626094880744 +97 311 -2.2965361852890847 +99 311 -.4317553678930538 +112 311 .2530693350569406 +122 311 -.9531157073637265 +124 311 1.3118911504043833 +148 311 -1.4667485260635966 +155 311 -.8509682718477015 +161 311 .5171221963356627 +163 311 .27444451886401167 +187 311 3.968723901288625 +191 311 .8940528899659914 +199 311 .17571249285073745 +200 311 -.3986405231485663 +202 311 -.6933762140860509 +212 311 .10839788965566007 +219 311 -.9475428572137339 +225 311 -.021532171290463392 +226 311 -.1744725047810043 +238 311 -.24829804878695544 +239 311 -.9898285057377805 +244 311 -.06566787259697601 +250 311 .027816543789013742 +251 311 -1.1983174177302722 +254 311 -.7312349064222001 +260 311 .569868962837946 +269 311 .6195874578678359 +275 311 -1.2346073556614876 +292 311 -2.7126105479843483 +299 311 .18504699961664628 +302 311 .38557428888641426 +321 311 -.3502251849076091 +356 311 .5836735503102397 +375 311 -1.511664267337648 +376 311 2.215599209970191 +380 311 .7083654773572841 +381 311 .2396488099671181 +388 311 1.463592688559868 +391 311 .14577616252332892 +409 311 .13392214790111787 +411 311 -1.275712859429521 +429 311 1.46564507064368 +442 311 -.7610309606747583 +443 311 -.10001122923835953 +457 311 1.0122525303687926 +461 311 -.03998503348694605 +472 311 .0359475171335 +475 311 .12936927222340125 +498 311 .1957510350802633 +517 311 -.851002095875734 +531 311 .404652791929528 +562 311 .5912215846233015 +573 311 -1.0275404572507076 +584 311 -.32474660317605125 +599 311 .4687406213621475 +608 311 1.719828541339266 +611 311 -1.8452431923318329 +626 311 .1156114949060835 +635 311 1.4140673064954643 +643 311 -1.3628026689323918 +644 311 -1.053355233197447 +657 311 1.5989269598825415 +662 311 -1.9713172742495502 +682 311 -1.0518647215783246 +695 311 .019736102154119133 +699 311 -.37373208501232436 +702 311 -1.0230209112037971 +716 311 -1.9662585929854586 +720 311 -.593251237774171 +731 311 -.49233969112928555 +738 311 -.4683371894446719 +777 311 1.039041639429791 +778 311 -1.2400352187295127 +788 311 -.9386186013134786 +802 311 -.08652020588331327 +820 311 -.08467102512058967 +836 311 -.2874402447583106 +858 311 -.9932800305511614 +881 311 .7737934138892126 +895 311 1.7439109089584333 +901 311 .4993568539315341 +905 311 1.6187061574672958 +927 311 2.4656947451061146 +928 311 -.32248712179092365 +977 311 .2041883880937492 +981 311 .5433355562378822 +986 311 1.3947524680167187 +990 311 .3661418206707521 +991 311 1.2028574575322273 +997 311 -.594345338679421 +13 312 .14274700982135471 +17 312 .5948910537388576 +25 312 .4834644086383673 +26 312 .48189710690622883 +27 312 .4951692673275119 +40 312 -.34809694603748925 +42 312 .2678910082964821 +46 312 -.3073277166487429 +48 312 -.8800093039568982 +60 312 -.4544024943926209 +73 312 .07096117962702707 +76 312 .6949791245904766 +89 312 -.48614037415466615 +90 312 -.12435433860813089 +104 312 -.15608503989584138 +115 312 1.0509296855623953 +126 312 -.39582116688307134 +150 312 -.30445533294202365 +151 312 .09521459776906771 +155 312 -.25041142385183396 +156 312 -.3215945176730066 +165 312 -.14640634482565879 +175 312 -.8575658047791798 +176 312 -.17739130930406807 +179 312 -.030690432740740042 +226 312 -.8162796734769544 +248 312 .13576013613647972 +262 312 .04057895631372383 +266 312 .6388647746999495 +286 312 .47363466620051675 +288 312 .08878351466630166 +291 312 -.9229956444801422 +295 312 .06191448084598012 +317 312 .45877395478221394 +321 312 .293816645747471 +336 312 -.838093218150038 +339 312 .822732547508124 +342 312 .4727097366032857 +345 312 .4806962804363358 +373 312 .0492375933255771 +392 312 .869928460797159 +396 312 -.1737940564897756 +398 312 -.2070656231300036 +400 312 .6745841128926446 +401 312 -.9856233997944225 +406 312 -.5692239652595815 +409 312 .2628868021174166 +420 312 .17862248759994073 +423 312 .15945233521787316 +429 312 .15174306371277013 +430 312 .5003629032122464 +445 312 -.5112909533126757 +446 312 .292321135654082 +449 312 -.7688501620664225 +454 312 .19358910028377618 +460 312 -.25561625927265597 +462 312 .2450295356301921 +466 312 .12844197381359726 +483 312 .9159883056469689 +492 312 .4174640032832946 +513 312 -.5177677688957811 +523 312 -.0888080263002812 +533 312 .15487070569562655 +561 312 .6828038059772302 +565 312 -.08129657277588612 +587 312 .5698565532084267 +591 312 .3486077657952894 +604 312 -.06567371511773126 +612 312 .6944430539057515 +630 312 .11356477010380303 +653 312 .457061643030252 +658 312 .7087385749879811 +668 312 .4552874566493525 +680 312 -.15131508818888023 +682 312 .16215348035249907 +687 312 -.33744907368422083 +700 312 .6359360112011939 +722 312 -.40743009271178005 +723 312 .4487993800011735 +734 312 -.6805662002931872 +735 312 .06714519498744619 +740 312 -.7317595033368066 +741 312 -.17271202305094313 +748 312 .7153188755162262 +774 312 .2647730025310104 +777 312 -.7724476323628837 +792 312 -.15827708514393468 +793 312 -.8542361035150093 +797 312 -.531402272189416 +811 312 -.004410126495362335 +817 312 -.026579880703422182 +821 312 -.0249911345657879 +822 312 -.03879491539982115 +845 312 .024032013864338703 +874 312 -.09037591294237514 +878 312 .5481289598102639 +879 312 .5409744014058202 +883 312 .5091297397666792 +894 312 -.09615562891698093 +910 312 -.20364144300366405 +918 312 .43484898637372366 +938 312 -.11750108505036583 +949 312 -.6783002115115099 +963 312 .3077051818835197 +965 312 -.22576439830950637 +1 313 -.017258018618055967 +22 313 -1.1977754447291344 +31 313 .14108152839555863 +59 313 .408350456367394 +63 313 .6078586496563201 +66 313 -.8060743375402553 +89 313 -1.779007371543667 +92 313 1.49628066090352 +102 313 .8047469838578101 +106 313 .04630825731702213 +111 313 .9302335759562187 +120 313 2.3510744252100912 +126 313 .901886553405709 +127 313 -.430502147915816 +128 313 .7292793882430955 +135 313 -.069507613863113 +141 313 1.2963607081645403 +146 313 -1.0625870025245652 +152 313 -.7674941560384341 +154 313 .44738191973569563 +170 313 -.682069125027267 +183 313 1.3000641901811456 +190 313 1.4026557552784489 +194 313 .5499196126799842 +205 313 1.3474599692445568 +206 313 .1639113143195817 +209 313 1.2343194843428926 +217 313 .9142797303425438 +219 313 -.22444473160337014 +230 313 -.7913502876577174 +279 313 .03937320458708832 +295 313 -.3483552631416201 +323 313 -.16434906090035567 +330 313 .6372676995950389 +336 313 -.3069893335952742 +340 313 .06568171251650612 +368 313 -.4718149476760088 +386 313 -.1244726822848099 +392 313 .16152800951534607 +406 313 .014584685409001263 +414 313 -.00013272532487242084 +430 313 -.3998422432186587 +437 313 -.20450684591993298 +440 313 .20469240588956816 +444 313 .990221626878465 +452 313 .832167940832932 +480 313 -.08622642751322371 +491 313 -1.2084281372169192 +505 313 1.2100893520145275 +512 313 -.46449924356079864 +518 313 .46880175197208507 +522 313 .09327462393030489 +525 313 .8509268306711408 +556 313 1.17307032163803 +583 313 -.24875780093042438 +586 313 .7270643799158113 +598 313 .8734042748754376 +622 313 .7531499916985503 +660 313 -.7533668446594796 +667 313 -1.1486544788124424 +673 313 -.7773246344261159 +678 313 -.37810114874185424 +685 313 .5157511308280291 +705 313 1.0683667043866472 +707 313 .2123457030004236 +722 313 -.5262844928568521 +729 313 -.47585224597707215 +782 313 -.18019937854879567 +789 313 -.5652554022350007 +795 313 1.3473338521630092 +801 313 1.0826942439436795 +802 313 .47444826839447624 +809 313 .8629397237990586 +810 313 .6731700534325774 +817 313 1.7279895476823643 +820 313 -.3446989947759401 +846 313 .2615397317114264 +857 313 -.18915262144648937 +871 313 .5375551203910172 +872 313 .24753664111105234 +877 313 1.0570039599667453 +884 313 -.02104907888659284 +896 313 -.4101859865196131 +899 313 .2026331317181317 +904 313 -.663080422311227 +907 313 -2.3924139147867867 +909 313 -.9442900986992447 +911 313 -.8829886349409727 +919 313 -.42765143583805604 +929 313 .48471418318427606 +944 313 .5357655088551297 +946 313 .7756494116086174 +956 313 .23131372424585328 +968 313 -.7492978973440174 +975 313 .3586708439702628 +31 314 -1.817089041875003 +43 314 -.4597566219557027 +44 314 -.21747172149983104 +53 314 1.0179712997822674 +55 314 -.23309874334488165 +65 314 .43015233469210323 +66 314 -.015396247125104776 +69 314 1.0077160708348558 +86 314 -.21374458350806314 +98 314 .6000150223452555 +112 314 .9469021436382595 +132 314 -1.2301964810462982 +167 314 .23975825753782723 +171 314 -3.6205922121487846 +182 314 .7521404689436069 +188 314 -.3569218850811721 +204 314 2.9875575945089126 +213 314 .5059941621707373 +232 314 .24296025325774648 +236 314 -.02109519117261187 +248 314 1.019018978227994 +261 314 -2.0348051516044547 +270 314 -1.2902945411357984 +274 314 2.054929076403664 +281 314 -.02370661884064068 +286 314 -.7314816310315355 +287 314 -.7672392671643611 +296 314 -1.651542008545918 +308 314 1.2337662020582452 +310 314 .5446584077341694 +313 314 -.4374956395468775 +317 314 -.09744172520288312 +325 314 1.5503259280502901 +342 314 -1.0688050411670846 +352 314 2.580101892379156 +360 314 -.04906337225864432 +368 314 .32359119091281446 +389 314 -.2722481403906814 +395 314 -.7460842762381992 +404 314 .42985155553281523 +420 314 .5367950667215322 +422 314 -.615908304776798 +428 314 1.447120817545317 +430 314 1.2177190456524103 +432 314 .5906971714748566 +451 314 -1.4198001290008737 +452 314 .4377316874724365 +453 314 .22725345691883406 +483 314 .12210177638395092 +490 314 1.106434378348864 +515 314 .7776030657671484 +523 314 -.5445992030466125 +529 314 -1.0097614291706303 +540 314 .5676873225833816 +555 314 .9896506433737129 +558 314 .33307629220703105 +559 314 .6308763724887025 +600 314 1.8031159306763447 +604 314 -.5504174450242371 +609 314 .9643726794730759 +623 314 1.4758289762458623 +662 314 -2.402181576221353 +664 314 .8692060910114005 +678 314 1.1373098780458815 +696 314 .5944074730785206 +701 314 2.3945892201239705 +711 314 -.4817720403028398 +731 314 -.8151239902263457 +743 314 .7813931723145731 +753 314 .9442319544215272 +776 314 -2.2736518612797916 +779 314 .8699635803373823 +781 314 .01001185840242013 +796 314 .17601121848519752 +824 314 1.0584120135035315 +830 314 -1.2265594630000507 +841 314 .6556970984851633 +897 314 -3.079511302751312 +909 314 1.9509716840918616 +915 314 -.8206139423040529 +920 314 -1.8373558766662323 +924 314 .39982720541524547 +934 314 -.9886445866418025 +956 314 .43801347462603835 +960 314 -1.1252873283123002 +971 314 .6065288418830066 +978 314 .15437216350687336 +989 314 -.3873419717822897 +992 314 .5647222996871359 +998 314 1.25088699852479 +5 315 1.4720099693533273 +8 315 -1.2220606336474935 +15 315 -.8001903213091138 +37 315 .3931348649723956 +48 315 -1.9730128050375102 +59 315 .7936488317141136 +66 315 .9521546331212379 +78 315 .3711111592896176 +87 315 .9240504808093022 +93 315 -.591403892258982 +96 315 -.7636278542791306 +115 315 -.09018537048047963 +154 315 -.8597547598583603 +172 315 .817620356442802 +187 315 1.6955187344438347 +189 315 .14299668327009646 +190 315 1.2696056881339206 +194 315 .1696049372000044 +197 315 2.3522320827992047 +209 315 -.7447809830672031 +218 315 .05383390298273624 +236 315 -1.0518623481276537 +267 315 -1.7062137687992784 +271 315 .036709141201724055 +275 315 .8038756633142479 +280 315 .462331013686415 +303 315 1.0432420636905502 +309 315 -.8787766103055188 +310 315 .21164478618394192 +314 315 1.725535363542356 +325 315 .07916308267953673 +333 315 -.058835672848822136 +344 315 -.5148166475770284 +363 315 1.0132787092566549 +377 315 .2592714638087513 +386 315 -.1467143448914539 +408 315 1.6364929304788818 +435 315 .5058903005826357 +443 315 -.026369580912736074 +471 315 .021464687314046313 +478 315 1.3358651764158704 +483 315 .6843935392746716 +494 315 -.9848231251713786 +498 315 -.798874834199371 +500 315 -.37796755133089127 +508 315 -1.1420980615377356 +509 315 -.21273802467109204 +515 315 -.6630376426062107 +517 315 -.8099611840322637 +524 315 1.3889421325461864 +528 315 -.7255504476971856 +531 315 .35392450995195013 +533 315 -.5132946707314474 +546 315 -.8502610286594114 +550 315 .1803057173882883 +554 315 .2180170454749495 +568 315 -1.2229185764183803 +583 315 .02084363304209698 +585 315 -.5357798531063056 +589 315 .1307104976877443 +596 315 -.8294426356176499 +611 315 -.7276920579965676 +622 315 .5587500000550935 +623 315 .38106613345836376 +637 315 1.5233625557634483 +641 315 -1.155315432225938 +642 315 -.8488542027239511 +648 315 -.1605169445182974 +651 315 .7023893370395193 +655 315 -1.4497326137322966 +666 315 1.1287721397402195 +667 315 1.3320723478667924 +673 315 -1.0698242388240067 +675 315 -1.2003087631348828 +677 315 .07466635798878635 +679 315 -1.204541054701829 +697 315 .18785214840507675 +720 315 -.12541683860983316 +723 315 1.261330408755059 +727 315 .21343125042046185 +728 315 .40428240950885797 +736 315 .18850862130574023 +742 315 -.19682777415773464 +750 315 .7244198129494537 +769 315 .3240717938751778 +776 315 2.000422047406209 +809 315 1.5664273024778697 +825 315 .6173200007908777 +846 315 .540477813062807 +847 315 -.3444534964078015 +850 315 -.6816889912110626 +858 315 .15479797390022482 +871 315 .7234085735680404 +875 315 .4473539042720924 +881 315 -1.0911661666258134 +883 315 -.32901720705372545 +887 315 -.27647965544009434 +891 315 -1.4584768448380552 +924 315 .11629462901897611 +949 315 .8753873448522425 +961 315 -.5437666289963212 +981 315 -.4235204226395934 +11 316 -.5960943573903417 +25 316 .7385520878597684 +30 316 .4477594384335394 +37 316 .05817220073548911 +42 316 .4537110429558643 +47 316 -.603125428209134 +49 316 .2815953407306742 +58 316 -.18966906611506842 +61 316 -.6849991354420036 +62 316 .19436278105048554 +74 316 1.0017836946804328 +122 316 -.41245946273033374 +157 316 -1.499031546658635 +165 316 .6109781202976989 +166 316 2.221279346037271 +169 316 -.10646832747354369 +179 316 -.04661279661246817 +194 316 .17760115966964513 +237 316 -.6518159437875669 +289 316 .36762422844289366 +291 316 -.4939880792437017 +312 316 .4926298411811997 +322 316 .26246189546219567 +338 316 -.34653343201788434 +352 316 -.8322274500612856 +358 316 .47510547314538515 +360 316 1.0330639680401954 +367 316 .5589728041138127 +372 316 .5527559118210474 +378 316 -1.334844851814975 +379 316 -1.4202134695938118 +389 316 .31188400142127237 +395 316 1.6367627893685115 +403 316 .5400127265957265 +415 316 -.2511343330390589 +464 316 -.10651029477655659 +465 316 1.6940977233393473 +475 316 -.24995895195351236 +483 316 -.14623703115088316 +487 316 -.6232297557700546 +496 316 .33552193496816607 +504 316 -1.0243590038888812 +521 316 .8076492863823215 +523 316 .6443755618256862 +525 316 1.514892209481274 +528 316 -.17560619885284345 +538 316 1.4134381701980128 +539 316 .018430121557810056 +546 316 -.26212566725976066 +553 316 -.3897613606299558 +584 316 .15881125780948616 +585 316 1.60081946532455 +618 316 -.3994192707070141 +623 316 -.9298551133502622 +627 316 -.43527748503555297 +628 316 -1.1089579312000553 +639 316 .3739295126611135 +640 316 .8374950266778068 +646 316 .1717261393480783 +647 316 .20299094619435729 +651 316 -.6728518811549375 +661 316 1.4866638147229756 +683 316 -.38543760298901175 +708 316 .6689590837550622 +724 316 -.2575211328207455 +725 316 1.9836997810788 +735 316 -.9842955843645961 +750 316 -.6973911443731347 +757 316 .08984566434232454 +764 316 -1.3197001422065022 +783 316 -.837965256235277 +786 316 .007705484389340721 +792 316 .15243601154099967 +811 316 -1.241394405998653 +827 316 -.8100317885231536 +845 316 .19535744440846278 +860 316 .5311941280510446 +869 316 1.280541097104105 +875 316 -.44192499543926855 +887 316 .2492294040921739 +893 316 -.6496029769714063 +904 316 -.6466269166815358 +905 316 2.2636171148454327 +918 316 -.5308290478006858 +931 316 -.7298752448626539 +939 316 -.7001182763564044 +941 316 .01500209155016767 +945 316 1.0088975428317886 +957 316 1.122834865060622 +962 316 .5265059920750136 +974 316 .48436075730573086 +988 316 .4176910821244514 +998 316 -1.3929371173155574 +6 317 -1.407254547888513 +31 317 .17640882077019301 +32 317 -1.2425265280509967 +37 317 .678140296790368 +61 317 -1.3897997967230917 +64 317 .2531898838155847 +74 317 .9275090423029642 +80 317 -.6844165055818536 +85 317 -.4534042354511094 +91 317 .008125289195792078 +106 317 -.6327054372085861 +107 317 .3777017321153456 +112 317 .1049774971328061 +113 317 -1.1172850831100678 +118 317 -1.1228606267689791 +121 317 -1.0550586204082721 +125 317 1.4487390059054146 +130 317 1.0176339177825888 +132 317 .03844136449596539 +147 317 -1.0165768471105165 +150 317 .0176428334481617 +157 317 -.008269225109761219 +166 317 -.1377575389664618 +167 317 -.3815305435942765 +204 317 .6390451042010833 +208 317 .3676416734909919 +223 317 -.4695854670239426 +252 317 .3376816265378162 +261 317 .16869167930438858 +266 317 .514334159376701 +274 317 .30773972283940865 +275 317 1.1297736073876912 +279 317 -.938528710382549 +281 317 1.0525665815692793 +347 317 .5684365759100976 +348 317 -.8735010988095826 +358 317 1.110375775823614 +363 317 .851646392626694 +369 317 .06537884484348712 +372 317 -.8005223837848418 +388 317 1.2311213564440973 +406 317 -.3985010312980041 +412 317 .16392482681805504 +420 317 .329413918050693 +428 317 -.15959088702411062 +431 317 .3611505622585308 +432 317 .731904593108879 +451 317 .18963891344095604 +462 317 .9854114926150824 +469 317 -.18390907959267813 +470 317 .4298765641351456 +487 317 .36605332570721083 +489 317 .13999054490474883 +497 317 .8761318347346975 +499 317 -.22626883468102496 +530 317 1.030109853769431 +538 317 .009703929177327764 +542 317 -.4181633249146262 +558 317 -.2257085721398742 +562 317 .4756921680818134 +563 317 .4958225806563258 +571 317 .9249554761733348 +614 317 .29366525735077387 +639 317 .719030833008238 +642 317 -.04669078326665799 +644 317 1.3247935970387141 +652 317 .48087909949766316 +654 317 -.653920848533908 +656 317 -.15777415018405683 +660 317 -.5553742940111164 +663 317 -.33084044394191203 +667 317 .40587962029955 +673 317 1.123572914785037 +678 317 -.6742180152726923 +680 317 1.027408721636825 +687 317 -.18346449633399076 +693 317 .6401388362331818 +698 317 .5075660973808418 +703 317 .5000168017660847 +729 317 -.05030226133513675 +742 317 1.5629968252504505 +756 317 1.3983990366646746 +764 317 -.276099934921088 +775 317 .09416311222545828 +780 317 -.5016077511888112 +782 317 -.6696610299468311 +795 317 -.4668036950792283 +806 317 -.025811482913878303 +822 317 -.4648395708877016 +829 317 1.0291517533670391 +832 317 -.6877058214744339 +837 317 -1.175011014256421 +843 317 .49924820740771253 +858 317 .5365260574288936 +864 317 -.9121417437903665 +866 317 -.5956957838381498 +868 317 -.9361908607668444 +886 317 .062117721386566405 +894 317 -.2846399768379887 +897 317 1.2251088642233299 +903 317 1.8510062166199874 +906 317 -1.1854377338884758 +913 317 .44983621783428085 +916 317 -.6975987851588576 +921 317 -.7523389750092254 +922 317 .6267213907602427 +937 317 -.4278292518865042 +947 317 -.4711959904241501 +974 317 .02650531612735605 +976 317 -.5589936412046868 +978 317 .920012043308336 +7 318 .03217024967031694 +11 318 -1.4668484369203183 +25 318 .7186048732969459 +29 318 .6652855183036915 +36 318 .9164323680342683 +44 318 -2.0378603107147453 +53 318 .577452174000586 +55 318 .4449260310682239 +57 318 1.664657857756783 +77 318 .1712699209784019 +94 318 .18938859076557657 +97 318 .00059579869202811 +98 318 -.4666878629018686 +102 318 .516812238931857 +115 318 .3047776041138688 +117 318 2.789325997493126 +126 318 .8489277294339602 +130 318 -.7138018112607399 +133 318 -.5573204996581225 +146 318 -.8839342065492416 +151 318 .19888931528347412 +170 318 -1.9254683207507444 +190 318 .41275836060373217 +191 318 -.3173861481568331 +203 318 1.140740831243148 +214 318 -.6030926510288176 +217 318 1.2824324003932086 +220 318 .6048392482053779 +226 318 -.4682395134808549 +229 318 -.40230637876816505 +237 318 -1.3585490788224475 +255 318 1.0068373411670948 +273 318 1.539943100128294 +294 318 .37796130137513767 +305 318 -.9861193487510634 +306 318 -1.2207629890763865 +308 318 -1.491644984550652 +324 318 1.5372580900441224 +328 318 1.8028357948552547 +338 318 -.5190191636516519 +363 318 -1.916911213934976 +364 318 -.8404923698554266 +374 318 .3851355526742567 +383 318 -.18437844201987003 +400 318 .6277143623792623 +404 318 1.227834524887904 +405 318 .3195952674054295 +430 318 2.1855259767453945 +435 318 1.9849818827857324 +441 318 1.2149149166012954 +444 318 .8827085060507172 +448 318 -.9356099749308586 +458 318 -.9157068493326888 +465 318 .3915327590480684 +471 318 -.8901750054300575 +479 318 .49912292388807555 +503 318 -1.5692590324423334 +542 318 2.0947416002480947 +559 318 -.817798920900862 +565 318 -.2814953607062225 +592 318 2.003199792083916 +595 318 -.6901537589157818 +608 318 -.809605719809456 +611 318 .5497097887134546 +615 318 -1.4528502789840376 +616 318 .6970428649060985 +651 318 1.993277524640682 +663 318 .6390186780110366 +668 318 1.316945673453403 +671 318 -2.6435574575614385 +727 318 -1.4293355615794556 +734 318 -.9696271107955347 +745 318 -.487543678313644 +747 318 -1.1597146310270654 +761 318 .9016600016540119 +764 318 -2.021084801380647 +791 318 -.0071211557998913655 +797 318 -.3652685269551975 +823 318 1.430282922535719 +829 318 -.5950950258340535 +832 318 -1.1349899458376422 +854 318 -.610597587085257 +858 318 -.49162602774294395 +860 318 .5752098792183362 +886 318 -.3682507397934552 +892 318 .558114512485991 +895 318 1.80655536032048 +899 318 -.0907712299192171 +913 318 -.12229384510900118 +918 318 -.16091297905277593 +928 318 .383134464819779 +929 318 1.1178483088887126 +933 318 2.584119466572621 +937 318 1.110816221970993 +945 318 2.698230894705357 +960 318 -2.054837492619476 +967 318 -.6808135451012319 +982 318 .6147887093116674 +988 318 2.342725311578629 +991 318 .5091478608638853 +992 318 1.7707936637179056 +996 318 -.18909707354162644 +1000 318 .38174436271755785 +20 319 .8982982045416622 +32 319 1.3883314437214032 +37 319 -1.1536690335839315 +46 319 .8276617336068051 +50 319 .6690064965130552 +52 319 1.096815035684747 +61 319 -.7252399274385818 +78 319 .2686650195952253 +81 319 -.47334514873317735 +86 319 -.8238252560522832 +92 319 -.5325858073262857 +102 319 -1.7948638752582222 +112 319 -.717917476118996 +149 319 1.8365510969881869 +154 319 -.3168778799701327 +155 319 -.6121146956408922 +156 319 .2624639330931518 +164 319 1.1756156403783566 +167 319 .8904980055054503 +196 319 -.45745398912886276 +205 319 -.5617364201273648 +206 319 -.2682020547267177 +213 319 .28512256784666035 +224 319 .25958143722474397 +245 319 .8835910132265302 +262 319 .7673573484481763 +265 319 -1.152273664059273 +276 319 -1.8065319508277533 +284 319 1.3543141879045797 +285 319 .9214262829367765 +293 319 -.0712347033280135 +297 319 -.772727472357337 +318 319 .6163101483423601 +323 319 .2952532432969793 +325 319 .305455896384113 +328 319 .2701956961478983 +331 319 -.17335056932381201 +361 319 -1.6349170723342215 +380 319 1.055513503848284 +389 319 -.3695698230370746 +425 319 1.599642249653705 +431 319 .22953145383227203 +446 319 .34494304054680036 +451 319 .4363814548678545 +454 319 -.1985098710657565 +471 319 .3950553602914526 +520 319 -.03142222204488679 +523 319 -1.1274917738835395 +535 319 .5445491080642224 +543 319 .0013521553997443772 +565 319 .4898345060261302 +567 319 -.8715046746440627 +570 319 .706061106401301 +573 319 .9974438127854715 +595 319 -1.6101196692538042 +615 319 -.9943473254982993 +624 319 -.8504231772074187 +627 319 -.23918317206954828 +640 319 -.39481430263156564 +652 319 .05715588281346704 +663 319 -1.2765414794022933 +664 319 .7208952206865917 +673 319 .19007258440385125 +674 319 .43849714118967975 +675 319 1.531600832004998 +686 319 -.44746236693865504 +688 319 -1.0186567525621775 +689 319 -1.068001122685438 +724 319 -.6644543016635743 +746 319 -.7727075000100667 +750 319 .6592801206885319 +753 319 .2779314586102055 +756 319 .7622471000491994 +759 319 .1501519718897053 +797 319 .5739104805129112 +799 319 .5805532664591031 +813 319 -.33472269524306386 +836 319 -.22065108197060282 +853 319 1.1692050824605595 +858 319 -.12963397226470386 +859 319 -.5447829403296576 +874 319 1.3943792655889902 +886 319 -.16085116136059768 +895 319 .9097937178273938 +904 319 .6261657625282887 +919 319 .5170428606283284 +930 319 -1.921628060802422 +944 319 -.5346392001366278 +946 319 -1.1460911530137998 +955 319 .37120474013979976 +959 319 .8092916482024107 +991 319 -.26318895128244946 +7 320 .49326933193361744 +9 320 .4076692573775646 +11 320 -.3252924302977473 +12 320 -.3388102773265331 +25 320 -.5145992042371252 +42 320 .3106836506250934 +43 320 .6204117218297955 +49 320 -1.1263624882426122 +52 320 .5566580382717874 +57 320 -.6275906095418258 +83 320 -.2950260461505302 +95 320 .26162430646285156 +124 320 .04517663607590062 +141 320 -.35848995368306424 +146 320 .691830022589755 +160 320 .41171909929650047 +167 320 -.2834195633005796 +170 320 .3545520441718366 +195 320 .6338588653817848 +212 320 -.9431722104862242 +216 320 -.4671424872695088 +231 320 .4935400755045547 +235 320 .8099398831692903 +236 320 .2006287916374534 +243 320 -.7521646423592324 +271 320 -.33639946661452297 +282 320 .29595556614695945 +286 320 .0006798469019051179 +294 320 .611122012047994 +295 320 .11148149744569412 +302 320 .21270117614041995 +308 320 -.0140895860705052 +331 320 .3015293774335013 +344 320 .34497997057941654 +352 320 .4737314255819247 +353 320 -.5086618012551473 +355 320 -1.208104191599395 +380 320 .5330142213376374 +387 320 .07523524925607272 +432 320 .21533857674548207 +440 320 .4375768357262716 +441 320 -.5316286011727359 +445 320 .2685868197075413 +447 320 -.27895070368172586 +457 320 .44567614033752484 +467 320 .2202862434732211 +480 320 .6620997221697555 +490 320 -.39808289031165794 +497 320 .3371498313489372 +518 320 -.2081957377360334 +537 320 .6138009196864138 +538 320 -.948489755054593 +554 320 .18980436115048016 +561 320 -.6432798021764257 +573 320 .03156058947925411 +577 320 -.1376487768059312 +582 320 .2234877952021699 +592 320 .4334901531725498 +594 320 -1.353324475570662 +596 320 -.0697633162906245 +602 320 -.10944743462652236 +610 320 .054804296700580846 +613 320 -.3188349135579984 +631 320 1.2507143923610662 +644 320 -.7941500963030944 +650 320 .31342165986327897 +665 320 -1.405385205828442 +674 320 -.4458928299121634 +691 320 .8572655203503257 +700 320 -.43096623831031405 +702 320 -.4523069319504158 +712 320 -.46800933913283993 +720 320 -.6969674728007645 +729 320 .0897054644970662 +742 320 -.20082379640239456 +765 320 -.6403965343610466 +766 320 -1.8376626091000772 +779 320 -.7466656943418614 +781 320 .3996057899434008 +790 320 -.5200112645950143 +798 320 -.6143004110361445 +816 320 .6227560066512572 +824 320 .012479930791239349 +830 320 -.23326099884296728 +847 320 .0916651094024334 +856 320 -.9283820895121717 +873 320 .7731747785404792 +880 320 -.24480000477450226 +892 320 .7844747176603082 +894 320 -.08592565080252335 +910 320 1.1096538146135233 +927 320 1.874104610596059 +929 320 -.8494505032084012 +939 320 .43631467774181537 +943 320 -.6456961104853844 +945 320 -.7409600753288147 +953 320 .2778031426485199 +954 320 1.0628427491453514 +967 320 -.7107713304392865 +971 320 .9710946345311399 +986 320 .3708117014923843 +995 320 -1.2900464778342375 +12 321 2.1701604091973086 +15 321 .9042061509407231 +31 321 1.7905620728190754 +33 321 1.3000304729965504 +53 321 -.6868936747918225 +61 321 .24070946284825787 +93 321 -.13825768138529457 +106 321 -.5691221431443133 +110 321 -.5667516700874284 +127 321 -1.4674176495389661 +170 321 -.5487997257058328 +186 321 -.6773056978468646 +191 321 -.8490874080362492 +194 321 .7702955942512191 +221 321 1.0811900026862256 +237 321 -.1826251497500497 +251 321 .40674287716752927 +258 321 .9869888752332796 +259 321 .09999786986919355 +261 321 1.0323643208201787 +263 321 2.291099896528617 +268 321 1.023367994876967 +271 321 -.3977844421802099 +278 321 .255250164514731 +282 321 1.6683315600081285 +291 321 1.5037798118589243 +292 321 .3261892814276717 +301 321 -.0742748345799964 +302 321 -.2567338149662974 +308 321 -.14242726156120328 +315 321 -.8660406736954765 +328 321 -.15768251862700133 +329 321 -.3390292574321775 +333 321 .6989774954317791 +335 321 -.9471299325926388 +342 321 1.142282174951096 +357 321 -.9898764109863146 +363 321 -2.030222862422982 +379 321 -.04302467446585101 +381 321 .29182479369778663 +396 321 -1.7082600194481057 +406 321 -.622400208114526 +443 321 1.226908789916854 +446 321 -1.445668122003996 +455 321 1.4993386603263847 +483 321 -.8652681489493861 +486 321 -.27051405499236236 +490 321 -.41942315493517657 +511 321 .6670312546398798 +534 321 .6404371732550311 +539 321 -.5243992932900602 +554 321 -.7267152259442997 +559 321 -1.668418713124305 +570 321 .7844244458144789 +576 321 -1.634512142528117 +586 321 -.3908028110722729 +599 321 -3.0501402581839714 +620 321 1.0840122698312833 +627 321 -.348055949269618 +650 321 1.2653385918872335 +657 321 -1.4489354500240528 +665 321 -.13690807026915106 +671 321 1.2112477696448694 +681 321 .12600978657886294 +704 321 -.8243569985478176 +709 321 .11859161579505297 +713 321 .9511225456288506 +717 321 -.5788802944227652 +719 321 -.8671605785315848 +726 321 -.28417499765705645 +730 321 .13003395502577234 +739 321 .7462289432028448 +748 321 2.634215946499493 +752 321 .18910966080735397 +758 321 1.6435806331039888 +762 321 .6784138101754082 +769 321 .6324657770248501 +789 321 .8730161448545332 +791 321 1.5904870551714962 +793 321 1.9845045989995518 +822 321 .5814237194359457 +840 321 -1.1958991348914656 +858 321 -.6576238435396999 +900 321 .17750085188145273 +906 321 .05030976772897766 +908 321 .5284782607258364 +909 321 -1.7792244089718707 +914 321 -1.110280235681285 +923 321 -.06829228663449582 +928 321 -.7168188093980512 +937 321 .41488776315623777 +953 321 -1.706818465694702 +964 321 1.101774533734621 +969 321 -2.705674922048161 +976 321 -.8297139339631703 +981 321 .22724772509624747 +9 322 -1.2996719161722041 +65 322 -.7804614923915769 +67 322 -.0631866906575084 +83 322 .45354623656976345 +91 322 -1.5574936199447684 +95 322 -1.7816362082767594 +96 322 -.9281675739613253 +106 322 1.1689248656793703 +123 322 .9695947717539563 +144 322 -.6347715185605604 +146 322 -.6010336051902508 +157 322 1.190408766799422 +175 322 -2.581207104100183 +200 322 .3412082363611481 +207 322 .15216315923926024 +223 322 -.5590423326559779 +230 322 -1.2375607129589685 +238 322 .10663259367692018 +251 322 2.117422037335758 +281 322 -2.7099378925944073 +298 322 -1.301834106006576 +299 322 -.8844503585642871 +302 322 -.973263760072048 +304 322 .9898182882422899 +316 322 -1.4647667570547693 +319 322 .5374963056334282 +321 322 -.7366659347616356 +328 322 .892926703942609 +338 322 1.4601613080512352 +352 322 3.1916741161040143 +368 322 1.5780229088599067 +374 322 -.20838163225916329 +384 322 .5170133730636017 +385 322 -1.8989132596500076 +386 322 .331285592321391 +391 322 -1.7029025862101288 +398 322 .3488478704922403 +417 322 -.8930738361155467 +439 322 -.08200468221349701 +444 322 -1.4839189542258533 +490 322 -.5919820445980848 +504 322 .17571408717621734 +509 322 1.066651601248446 +516 322 -.5253862842389462 +523 322 1.67056276463866 +525 322 -1.7798753009482584 +526 322 -1.264670224716606 +537 322 .14715362094770285 +553 322 -.23436277122279545 +558 322 -1.8981611786054908 +571 322 .575440489744168 +572 322 .06966953411724079 +586 322 -2.4026067388897436 +622 322 -.898150145985577 +623 322 .030834814277431274 +625 322 -.9360068344371453 +632 322 -1.2704551665218442 +642 322 -1.6780414262287613 +649 322 -.41223600573242786 +652 322 .20085839207610515 +658 322 .6194359739005677 +661 322 -2.4396737786766596 +695 322 .2715323533496749 +697 322 2.046130837188065 +698 322 -.37570306341258536 +703 322 .5548864325892224 +704 322 .4502611898128477 +725 322 .1138469438973646 +738 322 1.492857589072674 +755 322 1.510169268322161 +760 322 2.933922605603052 +762 322 -.43073812340151163 +774 322 -.38770333476077196 +779 322 3.404872028422124 +796 322 -.021365658240175556 +799 322 -.10358958224190205 +808 322 1.6876908284866783 +821 322 -1.5338148695597538 +862 322 -.143402576132324 +869 322 -2.603172115150072 +875 322 .3848622732466246 +876 322 -1.1302254805065732 +881 322 -1.9344841904642252 +883 322 -1.356873277686917 +886 322 .3690986628759034 +896 322 -1.54541443243293 +897 322 -1.2042869606581827 +906 322 -.16852339391726912 +908 322 -.21771020074511058 +910 322 -2.7015680791660452 +911 322 -.9386185090594543 +925 322 .8567092033727939 +926 322 1.2115887855073357 +928 322 1.799648712646836 +941 322 -1.3175565417441446 +943 322 .008545342042701774 +954 322 -2.2634790304138934 +962 322 -1.2526572116931471 +966 322 -1.0000822331266903 +972 322 -1.6474429817150167 +986 322 .7001599874805048 +991 322 -1.712416853652963 +994 322 -.47816739266925945 +43 323 1.1624370308414218 +45 323 .019322378447817392 +54 323 .6080586383374893 +55 323 .5625576912926608 +56 323 .3112190266184203 +60 323 .42865474480503224 +91 323 .09694599522709091 +102 323 .687634790278226 +105 323 -.24714463896833858 +129 323 .5283170817513361 +133 323 -.7094492959020687 +135 323 .6997786491813419 +142 323 -.1681860955731434 +146 323 -.4362806445288828 +150 323 -.2011594506771367 +154 323 -.20035642541476076 +168 323 -1.2226044590967873 +190 323 -.8469745796962159 +192 323 -.01193127067393409 +196 323 .4756243755878277 +197 323 .454891882563059 +208 323 .3515428578003763 +214 323 .498701200306506 +217 323 -.4810166142135794 +233 323 .40072795302003617 +236 323 .6051668229275315 +237 323 .26824295720613117 +257 323 -.05536510173336205 +261 323 .6605384634245095 +262 323 .15877994830847203 +276 323 .8097302879905897 +280 323 .22404385615965783 +285 323 -.13505408672935407 +289 323 -.11577095946688096 +324 323 -.1155622631670061 +340 323 .4920036105538399 +349 323 1.4340872646319989 +351 323 -.21944183270931095 +355 323 .02720438823088854 +366 323 -.045151495180481754 +377 323 .24785906683081846 +393 323 -.10466190101503645 +398 323 -.162897293517133 +403 323 .8835620370604094 +411 323 .0037294717054596888 +451 323 -.7764044080039538 +460 323 .5539027160621739 +464 323 -.847859065435578 +475 323 -.268258558648204 +484 323 -.07644375111542723 +485 323 -.41225369185501787 +503 323 -.5807748339060448 +511 323 -.5519490359208851 +527 323 -.9595698991492336 +534 323 .5170649448848281 +545 323 -.23250400983651873 +548 323 .6435480854732148 +552 323 .0706056403532836 +559 323 -.16811145890418155 +573 323 -.8216388584560267 +574 323 -.24575295695715382 +577 323 .7179471214956443 +582 323 -.17922927133331898 +588 323 .7734280933497641 +594 323 .046519456385298495 +611 323 .00521490719724106 +615 323 -.1675566826929311 +632 323 -.2203599746204487 +649 323 -.06667980962433637 +656 323 -.04528887423919088 +661 323 .6118362577081 +671 323 -.7590391695407763 +679 323 .2371393674292737 +681 323 .0380080540900964 +699 323 1.0843667099174457 +709 323 .2356191976433406 +718 323 .5088149378443043 +723 323 .2702879219476627 +727 323 -.5025870806946791 +742 323 -.3361023345220817 +756 323 -1.1766158992115332 +777 323 .44303421663801 +778 323 -.35161364424368574 +782 323 .2903057382321458 +801 323 -.5107959404404904 +830 323 -.1493019555688878 +837 323 -.2485555865896319 +851 323 1.0428766634192341 +858 323 -.9151315688476878 +859 323 .4432488349872258 +868 323 .33054181846458 +891 323 -.5013778930180354 +897 323 .050980869323707795 +911 323 .23903900589747953 +930 323 .5365659889373565 +931 323 .17870149094971816 +964 323 -.6494311205453613 +984 323 .2961352392137586 +987 323 .25905693436264055 +20 324 .3871462788047155 +53 324 -1.2892015709735327 +78 324 -.6127645147061973 +115 324 -1.9847482399840137 +117 324 3.3243014477211945 +122 324 .47511847894723325 +124 324 -.9734481156234133 +131 324 .4253165153916962 +137 324 .2131804920093174 +139 324 -.026520834125711306 +143 324 -.03625303771182016 +150 324 -1.5205734265761985 +169 324 -.41595454599889914 +205 324 .6641985093057025 +207 324 .7122868275683797 +208 324 -.26232925050284817 +211 324 .23591352988024153 +231 324 -.07135378139255431 +249 324 1.3292250858709285 +259 324 -.25929045994756406 +261 324 -2.1411410512426827 +265 324 -2.552616048466799 +277 324 9.542625259706394e-7 +294 324 -.950035907738849 +297 324 .4972589124926754 +305 324 -.30603336534734915 +310 324 .012252034082568908 +322 324 .9922499124327379 +338 324 .4676785114837815 +351 324 .3632771580688208 +360 324 -.5268115769346351 +363 324 -.9133397391347118 +365 324 1.1509413598701115 +397 324 -.2740338843596474 +400 324 -.2742767046889488 +417 324 -.6852693927166039 +425 324 1.9003877428295628 +440 324 -.20851961821313697 +443 324 .8441392562598674 +444 324 .07894697166583156 +454 324 .6966993828323341 +466 324 -1.9992845942962711 +469 324 -.1663855351559654 +470 324 -.2540911750907793 +474 324 -.55995930551253 +484 324 -1.5215390022173179 +491 324 .4170353833677621 +510 324 -.016129191137504884 +517 324 .025239735979211142 +519 324 -.0588832549630202 +524 324 1.1236190205816219 +539 324 -1.3327512137433972 +568 324 1.4437109874956067 +571 324 -.5582825691150508 +582 324 -.5150001268452049 +596 324 -.23869835032008152 +605 324 -.4730798253431031 +610 324 1.2810075300882933 +627 324 .8889748712968917 +643 324 -.6408487202703776 +647 324 .3836529122175326 +648 324 .3039938218656327 +669 324 .468946993280714 +676 324 1.0761730652472914 +686 324 .05182075440632844 +689 324 -1.2650726568910775 +707 324 .24095891898608476 +709 324 1.9298334915350168 +710 324 -1.1769470721682953 +729 324 -.3467286457208304 +746 324 -.38721635164010815 +755 324 .1742779373081987 +756 324 -.6752624732332695 +774 324 -.8213842328807787 +783 324 1.570621993809124 +799 324 1.224254589143012 +813 324 -1.8045680451165353 +818 324 .738508457049615 +826 324 .7527533635453472 +829 324 -.2797344209354006 +831 324 .9709016928049106 +839 324 .4874498990381416 +859 324 -.802311850178878 +876 324 .7112345868901482 +885 324 -.03836853984714857 +896 324 -1.401700540757992 +902 324 .6473363751023307 +924 324 -.9215717087130829 +925 324 -.5308828196181762 +962 324 1.026168468415717 +979 324 1.0685227591881317 +986 324 .5487662486696154 +988 324 1.92461561026236 +989 324 1.0299644612445482 +990 324 .4967958518344038 +997 324 -.8393000439854751 +12 325 -.6414623497491967 +16 325 1.8236441543217454 +18 325 3.0082273118318095 +47 325 .20322291637911089 +51 325 .2898895876691663 +56 325 -2.0300219686164382 +61 325 -.0676027971665622 +62 325 -1.1653569113250146 +69 325 .2396172911204891 +76 325 .24955773131420245 +117 325 -1.1847365721584917 +123 325 -2.5293095156554086 +124 325 .2961794094596193 +132 325 -.7552642759040349 +144 325 -1.5919100309798497 +154 325 -.7988006892329352 +164 325 -1.4960666227001909 +168 325 -.2022413526867333 +187 325 4.005846658153885 +194 325 2.554198477516516 +203 325 .6541050082924363 +218 325 -.06682446146386808 +221 325 -1.5571934541506582 +233 325 2.257568863255957 +256 325 1.5944547176740482 +265 325 .06895959770754254 +270 325 -2.0670816811905928 +271 325 .8728157034348822 +301 325 2.0585002303853246 +313 325 .4841380916550213 +319 325 -.8582082498416208 +338 325 1.7387679681264847 +347 325 1.634106493813786 +363 325 -.9835278675281564 +365 325 -2.145653884073974 +370 325 -1.6099547034014587 +391 325 -3.155248943217962 +403 325 -.3141660948033926 +404 325 .9748266317159802 +407 325 .4517594545136816 +410 325 -2.2457608182261426 +449 325 -1.9217080368152444 +462 325 3.506439913103247 +498 325 .5047350727810644 +505 325 2.874046383031664 +507 325 -.42953445813364755 +510 325 1.249674332624969 +516 325 -3.286212044238255 +527 325 .3888769417973718 +535 325 .401784391389786 +544 325 1.2818590090448825 +563 325 .716113861699909 +565 325 .17479598347584202 +566 325 -.15524648367173688 +570 325 .7970782770791459 +574 325 .32585276498604365 +575 325 2.1907815604866943 +582 325 .6686470639473637 +583 325 -.8987470367729129 +586 325 1.4730018062843857 +599 325 4.9763998946070815 +602 325 .3645841487044603 +603 325 .8583559928066796 +606 325 -2.260675973278403 +609 325 -2.1481159127833416 +617 325 .7358113191478051 +620 325 .5746391411676116 +627 325 1.6624226593566178 +629 325 -1.1558214661100292 +631 325 -2.4070909517324544 +639 325 2.722100213110194 +647 325 1.3841724365688506 +674 325 .7996796375132798 +684 325 1.9245274680642723 +718 325 -1.1309361605319375 +719 325 -.4540836282680176 +725 325 -.718554327268677 +732 325 .8555540295512376 +736 325 .8646821568743416 +741 325 -.5687944222424376 +786 325 .1219907650916039 +802 325 2.159479390054801 +819 325 .14407775263116304 +828 325 -.06867011350343018 +844 325 -.8794012186253644 +846 325 1.3054186622312882 +848 325 1.4972771373879756 +858 325 2.0895306668591376 +864 325 -2.586698419350609 +888 325 1.0142941657838973 +891 325 -.24071861060951194 +893 325 -.3568192744999378 +909 325 -.22109311366257306 +925 325 .8479160862019113 +932 325 -1.4600300709572278 +939 325 -.45107708026634596 +944 325 -.2268019340822599 +951 325 1.0990414754433895 +962 325 -.9648347790211156 +963 325 2.0658891793514185 +965 325 .3092593119946477 +968 325 1.0422221143719224 +978 325 1.1409999067885805 +982 325 .5608307242587389 +989 325 -.6201913367178872 +993 325 -1.4148994419761962 +14 326 2.9205648340023314 +21 326 1.0190875998413782 +22 326 -.2522575767478952 +26 326 1.5896666462225484 +37 326 .9730090659636357 +73 326 -1.5709754808979255 +85 326 -.7680127336950994 +86 326 1.5191208278430925 +92 326 -1.8512059901939517 +93 326 -.28061819635354596 +95 326 3.7686510055660887 +103 326 -.9534859178187051 +112 326 -1.693679699871917 +113 326 2.4804311597605575 +122 326 .1453269960784749 +124 326 -.9545353325082715 +128 326 -1.094688201552344 +131 326 -.5770308731774396 +141 326 -1.3423985539274665 +147 326 -1.798130444669497 +164 326 1.6166409434945477 +169 326 -.7814180322669867 +185 326 .2813722848158421 +194 326 -.20468197576347943 +200 326 -.8625506020405946 +204 326 1.7957516609708062 +213 326 -1.8921140785736132 +215 326 -1.7721909627052908 +218 326 1.2831833040814478 +242 326 2.5823872088215993 +244 326 -1.8155772879754717 +260 326 -.48919003360055063 +265 326 .2955569225471672 +267 326 1.2622416386285948 +284 326 .9158205688107101 +288 326 -.17195475775896257 +293 326 -1.4269263808566983 +322 326 -1.4988393097414878 +325 326 .07218770827591059 +339 326 2.3407907594518123 +352 326 -.9616347299479222 +355 326 .7703922615157731 +373 326 2.025874380903517 +375 326 -1.298625976639796 +391 326 1.5248375087885908 +394 326 1.2547031459043272 +397 326 .12357815328570385 +398 326 -.10840896465001215 +405 326 .7344194736173484 +413 326 2.3013250394745386 +418 326 -.785081763641319 +422 326 -1.497729030326148 +433 326 -.27149880037605373 +451 326 -.2561723440162181 +458 326 -2.193599436610346 +465 326 .6983215972892235 +472 326 .11579391511399889 +483 326 -.7079350282587545 +494 326 1.1406810698984882 +510 326 -1.4254356235080545 +531 326 .33250926947815457 +537 326 -.4120141416214863 +539 326 .6090122865978029 +551 326 2.714723484748957 +552 326 .7697640654759701 +559 326 -1.225239322011586 +575 326 -3.362995368020775 +582 326 .16210009604873937 +606 326 -.9873108471179849 +611 326 -.25984103708033784 +628 326 2.199161875815741 +644 326 1.4267578807868462 +668 326 -.031125998130077062 +669 326 .640689200254919 +672 326 1.2602555682866767 +698 326 .1379745640615227 +707 326 1.5529716665670643 +718 326 -.5752672215358021 +726 326 -1.905758421880162 +743 326 -1.23028394448015 +760 326 -2.4674877163768705 +763 326 -1.3906085147200364 +768 326 -1.0363581895183387 +772 326 -.7771536401928725 +785 326 -.35714366930778246 +791 326 -2.1093157917811416 +795 326 -.2799786940138895 +797 326 2.0544729718570425 +815 326 1.0584832674086069 +830 326 -1.4671432304224923 +833 326 -.3660864278654176 +840 326 .8993229074358225 +875 326 1.2384960558607516 +876 326 -1.6496276849037812 +887 326 1.1946120766584227 +898 326 3.7081770286877855 +910 326 -.7013668830254807 +930 326 -.46131609443728827 +932 326 -.5150443670720216 +941 326 -.5887443363463932 +956 326 .11860813067046595 +960 326 -1.7979780454075316 +974 326 -1.8354420882164617 +991 326 .313891750010956 +3 327 -.003607148966263518 +7 327 .09243349570072901 +19 327 -.11178591470541985 +32 327 .6620103792458946 +46 327 1.744772098683226 +54 327 -1.0675166113834893 +69 327 .2633942066088263 +70 327 .060445621143680614 +71 327 -.3364407552938904 +80 327 -.4278283588664402 +85 327 .1498235240185821 +95 327 .8888767184250197 +114 327 -.3070753261261104 +126 327 -2.0918385975225604 +155 327 -.08399000683905491 +157 327 .894947259574818 +169 327 -1.1099918574754961 +174 327 -.5833477258009917 +197 327 -.09344730392378507 +204 327 1.162420828344548 +219 327 -.8094429176703749 +227 327 1.4582533275828844 +239 327 .2906326169931041 +268 327 .5784756516820295 +294 327 .06208264319423057 +320 327 -.5810550940745096 +345 327 .446834004209702 +353 327 .8305670542035961 +362 327 -.592414499239389 +368 327 .02518564860777376 +375 327 -1.3253489349136671 +381 327 -.16371249332948246 +400 327 .6709606313808654 +404 327 -.018348391226296223 +430 327 -1.1190962526832986 +432 327 -.15947526366353426 +451 327 1.9832853240521062 +454 327 .44785163387183846 +471 327 2.2676826920812405 +476 327 -.027128604743960137 +489 327 .7843650779821957 +490 327 -.47783680859797073 +518 327 -.006469548254479866 +549 327 -1.0595046368397707 +550 327 -.13755137852209598 +582 327 -.11941527787027037 +594 327 -.013955500152025851 +595 327 1.000432085389545 +598 327 .84990695644742 +614 327 -1.0350857616424443 +626 327 1.55329027950071 +640 327 -1.3913584211736396 +657 327 -.5197568261007263 +665 327 1.4955605880163159 +669 327 .9831644268651424 +705 327 -.42380737999171664 +718 327 .18636037245168252 +722 327 .27661920591440553 +766 327 .27895217977127656 +776 327 -.03200096800336391 +781 327 -1.484749679745153 +790 327 1.2699687360990484 +801 327 -.44147464881512893 +812 327 -.6450537541961263 +823 327 -.30240518001885824 +827 327 1.0490560700367577 +839 327 -.946665751344056 +841 327 .11935583513908257 +842 327 .3848454509326119 +848 327 .8243355578625756 +877 327 -.47679429445937194 +879 327 .5835741546163697 +887 327 -.04182660289782569 +894 327 -3.014895947857173 +901 327 -.8985014607808522 +902 327 .27348672037246224 +914 327 1.9492879020113365 +915 327 .028002394224730512 +917 327 -1.6279352432996546 +933 327 -.19020140284659667 +934 327 -.4399125890132298 +965 327 2.105495959791435 +966 327 -2.137197119520522 +973 327 -.1467306624240124 +981 327 -.31551539513423993 +987 327 -.6927079883450488 +995 327 .9802943132718565 +999 327 -1.7078823535265468 +5 328 -.5263491435088865 +9 328 -.14779677141402567 +16 328 .021335008634311148 +24 328 .526530734427013 +30 328 .03776740181030098 +32 328 -1.2586621856517939 +34 328 -1.3642544574256863 +35 328 -.3680180298656225 +39 328 .5788399470299604 +46 328 -1.3885452699497847 +90 328 -.8485498320000813 +143 328 -.18644400736762973 +180 328 -1.3336400319092192 +181 328 -.5980641355273317 +196 328 -.41488129581235894 +197 328 1.514685939455338 +204 328 -.5762901309269579 +207 328 -.30545692460674284 +216 328 -.16469535447290862 +224 328 -.6617030558963597 +253 328 -.07379472479216503 +277 328 1.2576907135547013 +292 328 .4598443151107914 +294 328 -1.9172359444087572 +300 328 -.2444690584034398 +307 328 -.9438903116340982 +314 328 .361122321784652 +317 328 -.2820443647162064 +327 328 1.386443228260008 +358 328 .4433600752699901 +374 328 1.4996833770993288 +388 328 1.4705818812401712 +390 328 1.0130851599315545 +399 328 .7875430597984945 +410 328 -.29682346172811075 +414 328 -.7399427554052049 +425 328 .2267403714847637 +427 328 -.08519333276599582 +428 328 .21419178514720605 +443 328 2.534790118878243 +453 328 .5720971684536851 +454 328 1.0050912732122683 +462 328 -.8877061383762425 +466 328 1.6207054447483384 +468 328 -1.3589888201823146 +470 328 -1.5358392384958266 +475 328 .47624676399222127 +479 328 -1.2010337488474911 +506 328 -.6369628136514636 +507 328 .3470050848725853 +509 328 -.10941367518490269 +520 328 -.8604077180065524 +545 328 -.38586148324455993 +550 328 2.4319321158169034 +556 328 -.6020024253514412 +557 328 1.0879512242983242 +567 328 1.2708153648502136 +569 328 .5411261798487975 +571 328 .550543025127633 +573 328 -1.459869398620753 +578 328 .003696425277514126 +586 328 -1.6308653866460858 +593 328 -.3223350574538204 +595 328 -1.094071325560505 +599 328 -.9523768875368505 +608 328 .30025668967589475 +618 328 .09288115033933256 +623 328 -.3710763088656743 +634 328 1.9249637601754332 +660 328 .6090720887986392 +666 328 .9247576369130732 +675 328 -1.068088479866098 +676 328 -1.0910423807150083 +685 328 -2.178966727512784 +687 328 -.47300735016646966 +694 328 -.10360337634171042 +703 328 -1.2721511208178866 +721 328 .9630416934937194 +735 328 -.502827428180939 +736 328 2.592720436022646 +742 328 -1.4138505507600791 +744 328 -.8354347684292815 +746 328 .2095371457769997 +750 328 -.07570915512551757 +756 328 -1.4483410108419046 +767 328 -.2670492752168744 +768 328 -.7559098019773566 +782 328 .17658672139912374 +799 328 -.8107582290182246 +802 328 .6476203673477723 +818 328 -.994199602214366 +838 328 .9169173100789685 +847 328 .5442362501760883 +872 328 1.1932760331817884 +874 328 -.9211712627355442 +886 328 -.6309679687601272 +907 328 -1.768018026286252 +929 328 -1.2456063105944557 +945 328 .4836794823462993 +954 328 -1.5488693516624188 +963 328 -.7431375882644051 +967 328 -.5711339167537001 +983 328 -1.4979297932609965 +13 329 -.2702062951384131 +20 329 -.26854585499834827 +25 329 1.8693000648378244 +41 329 -.8054097308117717 +76 329 .4372792052663653 +89 329 -1.7370332584279433 +92 329 1.367838804538652 +93 329 1.674518778617722 +94 329 .5553327356440679 +115 329 1.073306340169716 +122 329 -.538493346758313 +140 329 -.05385562289455026 +142 329 .7422960126805823 +154 329 -.11699427735128654 +163 329 .5836006869378016 +172 329 .39784595913697784 +176 329 .3073206658944747 +197 329 .4327316381077754 +225 329 .2555231770970691 +233 329 .7647808517093969 +259 329 .7115044173444811 +260 329 1.1595434597695784 +265 329 .4174987846810941 +267 329 .1747713252433917 +273 329 1.0539646067453403 +303 329 -1.2976413072673219 +329 329 -1.0495709073429342 +330 329 .7897825154053004 +331 329 -.10053933655058707 +339 329 .7919343420193804 +344 329 .5497978323144009 +364 329 -.7113305546712184 +389 329 .0606659203414832 +393 329 -.6660137191880162 +430 329 .07961615143768391 +441 329 -.4729189884896764 +442 329 -1.2080488080393257 +497 329 .19282546244847193 +499 329 .07809992373263912 +500 329 .2423224961415999 +519 329 1.2121986440402304 +535 329 -.43919078999042915 +544 329 -.13711336908609 +559 329 -1.369595276257095 +563 329 1.0742728611223233 +564 329 -.38005068912959805 +565 329 1.0192059398744062 +571 329 -.2497758903521083 +592 329 .1104891631650626 +600 329 .5250777694455384 +605 329 -1.0689160820805435 +608 329 -.4139072038309428 +645 329 -.7296448143228924 +658 329 .5376960360174722 +678 329 .5052565487622329 +688 329 .5276543038027588 +692 329 -.6451147041550659 +699 329 -.14240478818770327 +714 329 -.10833806460241295 +721 329 .08760243706669557 +732 329 1.1037031202635823 +739 329 .20346159467161767 +760 329 .4615832031719704 +808 329 .37241043795925965 +821 329 .30593615473143654 +822 329 -.4483242388127726 +851 329 -.4009092974665916 +855 329 .9867171466321552 +885 329 1.0946288951845238 +886 329 -1.2267600326502581 +896 329 .32045229985845874 +902 329 -.4823928874817201 +904 329 -.3451806189879767 +908 329 1.5299333679853302 +909 329 -1.0675244939469173 +918 329 -.11099856407904664 +921 329 1.1054049268619202 +932 329 -1.5661989321530574 +933 329 .09359431418220213 +942 329 .9597246434614084 +951 329 -.26438928799271494 +965 329 -.6390099376441155 +969 329 -1.180135332791379 +987 329 1.6120309153737988 +33 330 .7424380803892486 +36 330 1.2779345598680645 +37 330 -.21976970345545593 +51 330 .3612270605482217 +53 330 -.5273835491828669 +57 330 1.1159036149819634 +81 330 -.5931680579047294 +109 330 .9544285063609034 +113 330 .43695463462536405 +115 330 -1.4705794112193076 +129 330 .09699616973603614 +130 330 .0895737452013773 +138 330 -2.8316562910965826 +145 330 -1.4302896714623885 +150 330 -.6110652309816145 +180 330 .9013408579447836 +211 330 .6626937047201656 +217 330 2.030796313782903 +238 330 1.0541851748653133 +242 330 1.966880912239336 +245 330 1.4502182378989812 +270 330 -.24755048324321427 +318 330 1.8534339877738102 +337 330 1.193181100025154 +350 330 -.24019843547405617 +364 330 1.170641459141274 +367 330 .07275743353073869 +369 330 -.9052725124067031 +382 330 .12908809318543282 +399 330 -.46327938346150477 +401 330 .4643523252562187 +413 330 -.4512669524112773 +428 330 2.533622006431783 +430 330 -1.1227847352551592 +440 330 -2.0305507251429087 +447 330 -.1214903488284654 +454 330 -.3795312842528789 +464 330 .004113819824537374 +471 330 1.3086170905900838 +477 330 1.5314814384185953 +483 330 -.07304038776825571 +488 330 -.22724059720033835 +491 330 .7085004079264936 +495 330 .7762167030319662 +511 330 1.8744408753643595 +517 330 -.8076996465135862 +518 330 .8925487450351582 +535 330 .7603415809581265 +567 330 -1.2802289297720193 +568 330 .8405012278668691 +577 330 .16011654012450327 +587 330 1.2831916637225942 +593 330 .15906341162823534 +605 330 .6639157349085923 +614 330 -1.9989015226159363 +623 330 -.7942131419195336 +639 330 2.0532979089703933 +649 330 -.32372008190780327 +652 330 .23780007431191302 +695 330 .8648916058487084 +697 330 .7710425860800415 +701 330 .018753320090996506 +722 330 .16930427675639526 +741 330 .6910617230315126 +776 330 -.49302398285382343 +778 330 .6400621714247449 +808 330 -1.257299749871568 +818 330 .2918766008699919 +820 330 1.0811807462185334 +827 330 2.918818015285357 +828 330 -.05245944260426451 +858 330 .4180849157445619 +861 330 -1.1698007942220567 +876 330 -.7078854514674957 +884 330 -1.244047254384242 +927 330 -1.8031832515053916 +982 330 .9569985645405885 +986 330 -1.0839515350080176 +988 330 1.6341802518201205 +991 330 -.3367103623033971 +999 330 -1.180200122970272 +13 331 -.3864416952322306 +21 331 -1.5799308257868512 +25 331 .2359943250464908 +55 331 .4412675983098421 +62 331 -.666976275744732 +64 331 -1.0806633090952054 +67 331 -1.5117222456607693 +70 331 -1.4830081726154967 +91 331 .9975865899347912 +114 331 -1.3914171340329433 +115 331 .5604151377807164 +116 331 1.623679015782333 +126 331 .9155532546966701 +133 331 -.7782400653895669 +139 331 -.49811394508018136 +140 331 -2.031630573133856 +150 331 .43377554763862525 +152 331 -1.5538549544131535 +157 331 -1.0717264900239334 +158 331 1.5845429256198118 +165 331 1.131448534636396 +180 331 -.2626618056112714 +211 331 -1.8370254712648855 +218 331 -.8156352830835001 +238 331 -.6813384478038156 +253 331 -.7286271031553855 +263 331 1.1171025433971224 +302 331 -1.5255761153766654 +303 331 .8948409594234268 +306 331 1.588038961072082 +310 331 .7105184875709107 +313 331 .5714727666493332 +333 331 -1.4845079543057502 +345 331 .13249685492423166 +352 331 -.6357645305963094 +353 331 .5809945910493304 +363 331 -.9514932946999946 +370 331 .5407183491423164 +382 331 -.2727935883046298 +417 331 2.3210189277994067 +420 331 -.8877670003192474 +435 331 1.7693775510235143 +440 331 2.40735965523642 +496 331 .7117830930039785 +503 331 -.3510029326798332 +514 331 -.5111117817472484 +521 331 -1.5218572405483999 +524 331 1.447281614063403 +533 331 .47911271723226356 +543 331 -.18437888437178623 +548 331 -.4052324828172173 +552 331 .3016845285108452 +574 331 -.10505259690625696 +579 331 -.07763679892926904 +584 331 .5806012028367835 +585 331 -1.0839451064725993 +587 331 -.4381477947356852 +602 331 -.5894697135439947 +610 331 -2.348211560137033 +612 331 -2.0047004430831845 +614 331 1.3650791484751712 +615 331 .5055454423880459 +617 331 .6018326153232207 +630 331 2.0470523646247676 +635 331 .3736341512795597 +670 331 1.2432442860134914 +674 331 -1.082649874612782 +677 331 .7126079745087508 +712 331 -.23995374580889015 +745 331 2.6587291783070017 +775 331 .31499857323199665 +801 331 -.08231063403166756 +834 331 .19511711790319053 +843 331 1.2384123380609258 +875 331 .35483531303312243 +880 331 -.30750172100715745 +884 331 .10353280654891346 +886 331 -.06332109553652537 +887 331 -.8002365954517379 +895 331 .02996040118037023 +898 331 -2.2056346973874157 +908 331 -.8133710437479005 +913 331 -1.0884937042569525 +923 331 -.22610382921374916 +961 331 -1.1012550529592422 +969 331 -3.25897980837266 +8 332 1.3186640719718754 +22 332 -.36888116115312847 +23 332 -1.5069219577047768 +40 332 -.90480259345689 +59 332 -.6210979134268496 +88 332 .9578421991851354 +94 332 -1.0553221591028628 +100 332 -.23716752227608026 +101 332 -1.5133074340157282 +107 332 -2.52665455159223 +119 332 -.27979247481042496 +144 332 .3048894668300148 +164 332 -.8060385107636971 +169 332 -.8625294609294692 +184 332 .11028574220444864 +189 332 -.462860716944068 +193 332 .1448690845610323 +208 332 .3859322072419007 +215 332 2.705049910271237 +249 332 3.1785377165652218 +253 332 -1.1057485811754666 +254 332 .44678891471536636 +263 332 2.5716483359201714 +264 332 -.4769556931895905 +272 332 .33014957298830155 +285 332 2.184404071249732 +289 332 -.8106265632766371 +311 332 .11216530208877636 +314 332 .9545368721808509 +317 332 1.9339161412512063 +331 332 .026351439571286855 +355 332 1.1287091324302279 +359 332 2.030532354990656 +370 332 -.14344360078883273 +383 332 -.7675520357586235 +384 332 2.2241883819614716 +421 332 -1.6770980677489513 +431 332 -.42560120804732615 +458 332 1.7528254185721694 +501 332 2.96742715730245 +505 332 .528991445101162 +507 332 .66028312319609 +511 332 -2.2055116457116504 +517 332 1.1105743016181695 +533 332 .32880155502834296 +544 332 .613716187087529 +554 332 -.2263973944153882 +558 332 -1.8364673688799769 +561 332 1.0855646767834128 +562 332 .5013497789239266 +569 332 .36976461362552926 +571 332 -.6286331380478563 +575 332 2.312275993389503 +594 332 1.2580050745271858 +595 332 -3.6365481155823516 +597 332 2.355344640226986 +606 332 -.1818162014833792 +616 332 -1.2700304354243366 +621 332 -1.131162147977878 +629 332 -.3830757742221733 +639 332 -1.290229824496146 +649 332 1.1058788131095758 +669 332 1.866160003918096 +677 332 .7714111112686071 +680 332 -2.4469202471505396 +685 332 -.9578913623596491 +687 332 -.24399654130842932 +689 332 -.45066344092489585 +690 332 -.3086517541883206 +696 332 .33999551046091303 +706 332 -1.2614484766319403 +717 332 -1.347378990391491 +728 332 2.0495174488343126 +743 332 .0838594710409265 +771 332 1.4391053957846667 +784 332 .1849909026977888 +787 332 -.6048967299009285 +795 332 .4248727194884697 +813 332 -3.3125131383074553 +814 332 -.882722790978981 +815 332 2.304206438941426 +818 332 -1.4963034228628092 +820 332 -.6255823826142395 +826 332 2.1420963468320116 +827 332 -3.7372485016951704 +842 332 -.510213061679414 +852 332 -.15977039356947212 +856 332 .92251319571062 +866 332 .5077435058691198 +868 332 2.920606899277226 +875 332 .5187990674198452 +883 332 -.36518928747737184 +894 332 -.4471409755452212 +900 332 -.4570475975940835 +902 332 -.5510775871105951 +914 332 -3.0597204962950806 +917 332 -1.5304338362111172 +921 332 1.5756577958823774 +926 332 .11377288216715678 +933 332 .37100924832759835 +950 332 1.272009052208705 +961 332 -1.8628361856222686 +975 332 -.23925039439104795 +4 333 .272441412910701 +19 333 .6407193634796405 +31 333 -.27372475996967643 +35 333 .2792345478067154 +36 333 -1.029646549087797 +48 333 .9851062308932811 +54 333 -.28736224769794366 +77 333 .8432794859187528 +94 333 -1.0811132575178894 +102 333 1.4073777482705856 +110 333 .8997545954484077 +111 333 -.65390660821497 +124 333 .4528687370981678 +131 333 -.5187867632921078 +135 333 -.23533878908147596 +142 333 .8715459543130973 +143 333 .08815496755321846 +144 333 -.3897619726975901 +169 333 -.09297472814573393 +181 333 .3040906432615207 +211 333 -.32325249844413895 +217 333 .4129320408556102 +220 333 .5710847790446703 +225 333 .11076394441057201 +226 333 .09271331933689855 +244 333 -.6599187452836084 +245 333 -.5501164490873451 +250 333 -.6252484375304457 +255 333 -.47839053498549594 +257 333 1.09667380442953 +267 333 .12639529484066991 +276 333 2.549977072935146 +295 333 -.7739543178345922 +313 333 -.8522479008125731 +325 333 1.0753158493508592 +331 333 .34027459314057695 +332 333 1.078173642799173 +336 333 -.327370902161182 +346 333 -.07992778909525887 +351 333 .6542919455670702 +375 333 -.4651964235659873 +376 333 .48330898322869037 +390 333 .3570278810360869 +417 333 .6751997247673319 +419 333 -.1165532371624915 +425 333 -1.2320543639484711 +446 333 1.4107456962958846 +451 333 -1.3168416151700253 +457 333 .16123565162168618 +461 333 -.4600045060475919 +476 333 -.5144841373123226 +499 333 .18223307096711427 +502 333 .029756502655924957 +511 333 .18417400847090137 +548 333 -.36798965124464567 +579 333 -.42425160135402756 +581 333 -.4670643339618959 +599 333 .30274838976602564 +609 333 .7897624495540783 +613 333 -1.1986188150697437 +615 333 -2.5618846144920466 +619 333 1.4329817729768193 +636 333 -.30468480807365417 +649 333 -.28408347639513887 +650 333 .3781990956301014 +651 333 1.6385988820265067 +655 333 .38064353100883713 +679 333 -2.441789497666763 +680 333 .011998813809718983 +687 333 .3687403280715068 +695 333 .03800761923349244 +713 333 .511915768278515 +727 333 -.6854001970250574 +739 333 -1.0295979040413088 +756 333 1.0640337526476045 +757 333 -1.433606903159201 +758 333 -1.2034997812979293 +775 333 .7250352121161507 +784 333 -.48880689204673683 +786 333 -.24643239939520495 +812 333 .4732262875331101 +831 333 .49690707942228873 +852 333 -.4449738349347552 +867 333 -.03538631110993032 +871 333 -1.744262034567349 +882 333 -.246988987564349 +884 333 -.7075170073598751 +912 333 -1.8121015368440536 +915 333 -1.6997651827267815 +924 333 -.291796335796824 +927 333 1.6520216328945372 +929 333 -.5000537533570928 +946 333 -.06207825700605185 +967 333 -.21717828452775895 +971 333 -.18853915865444704 +986 333 -.38853060624569624 +992 333 .347178115915875 +1000 333 .9800010001941077 +27 334 .36521638144081325 +28 334 .5372116806672618 +38 334 -.04297834165470954 +54 334 1.2195531050421864 +62 334 .32311948895918907 +80 334 -.18901424487741814 +108 334 .7386499716902925 +113 334 .655835648581043 +132 334 .840634676542156 +139 334 -1.2417407666510494 +141 334 .9991974913073458 +146 334 .7843773096428684 +155 334 .425189311843735 +164 334 1.1056175441164882 +169 334 1.0168779735679165 +170 334 -.6427525782929537 +174 334 -1.2687580338723774 +206 334 -.9354364700445622 +217 334 -1.1465576373414628 +238 334 -.5720114421044096 +244 334 -1.224441004814436 +248 334 -1.1644253321407123 +255 334 .7897097672546298 +256 334 -1.1614439666255052 +301 334 .5805202176122224 +303 334 -.5426651071236079 +313 334 .9628110119531399 +315 334 -.4337810613911102 +319 334 -1.0853372183335959 +322 334 .6700088452533537 +331 334 .6985749808479201 +343 334 -.5915954348281484 +350 334 .051717235085066385 +385 334 .6301160070586552 +402 334 1.0969760705905873 +404 334 .2352640382971168 +412 334 .5713249355993069 +422 334 .03975783504567232 +428 334 -1.6865303365868145 +448 334 .6067330233179216 +458 334 -1.3202223319959572 +461 334 .20882400962671918 +469 334 .6765404034944746 +474 334 -1.1840931449276466 +483 334 -.11716206086787609 +487 334 .6160216719042881 +491 334 -.317021296779889 +536 334 -1.3069433341338963 +555 334 -.5659812974449909 +561 334 -.9120768755243093 +563 334 .11673815731159715 +568 334 -.9838583482047749 +586 334 .16841173281920924 +600 334 -.3644708596301612 +621 334 -.9675205693418674 +639 334 -.7641033648186327 +650 334 1.0738377624689748 +653 334 -1.8282897371224547 +656 334 .918171628583666 +670 334 1.2043381320958486 +671 334 .576787606527307 +693 334 -.3207746245341705 +704 334 -.38804483901358316 +716 334 1.4281711649182318 +718 334 -.35365111284337364 +721 334 .458800923682151 +723 334 2.575287759840833 +728 334 1.803383775581606 +737 334 .019244592464622262 +738 334 -.21821338034039686 +780 334 -.043042273225853134 +787 334 -.3408725916452502 +796 334 .06473303493000584 +802 334 -.9693281013392723 +814 334 1.0367652932253675 +818 334 -.7402632998041663 +823 334 -1.5492043768609423 +827 334 -1.6991997969147408 +841 334 -.016697092197762387 +843 334 -.1456481342599864 +852 334 1.8241254265340205 +856 334 -.4487772126686206 +870 334 -1.0347470739137592 +882 334 -.5230929517853569 +885 334 1.6839262285183516 +893 334 -.27815293995992446 +905 334 -.9649436937741673 +916 334 .306551561772755 +921 334 2.5061148996410787 +950 334 -1.080799388565559 +953 334 -.6459092366152596 +961 334 -.49090721882691735 +981 334 .30535087973184594 +985 334 -.06545477230049987 +3 335 -.37417976986238216 +8 335 .6349216205308725 +13 335 -.0791292220251322 +16 335 -.7042543660967889 +41 335 .29524124375979066 +85 335 -1.3324536179276014 +94 335 .035536010027597056 +101 335 1.3857709668922293 +112 335 -.3774909365363295 +130 335 .3443205303974144 +133 335 -.08564832147215327 +150 335 -.20532978837559362 +152 335 -.22642424325871668 +153 335 .5857131049719333 +170 335 -.026516591881476537 +179 335 -.06415380222765889 +186 335 -.08443474762029303 +187 335 -.42774288124689364 +191 335 .2538018365037645 +202 335 -.4272003699225686 +208 335 -.48940807749670867 +219 335 .2059787686308302 +220 335 1.5985975998493882 +234 335 -.3792365724163292 +238 335 .3458800228489057 +243 335 -.2486451858673756 +247 335 .12346116060939256 +250 335 -.4660373719115595 +257 335 .9356733185496531 +276 335 .26524855917475487 +282 335 -.35228163249127264 +283 335 -.08056360320172887 +296 335 -.2671754010762497 +304 335 -.7897921517381387 +305 335 -.1791155700250855 +313 335 .27473034995886236 +315 335 .8994993349244209 +318 335 .45373517199129415 +326 335 -.727963387241389 +331 335 .06135754762455689 +336 335 -.2979340286222055 +353 335 -.021249300968863724 +356 335 .147236352332758 +359 335 .3394843855589198 +360 335 1.2774671702166391 +376 335 .507957809858618 +382 335 -.6560952400883968 +390 335 .7710859189785688 +401 335 .7701105277487466 +405 335 .06730227708998796 +410 335 -.26240505246479195 +414 335 -.22036068465937014 +417 335 -.2830388176337729 +428 335 .4445661066234852 +469 335 .10932762548604454 +474 335 .2424107502481029 +477 335 -.5030902591566225 +501 335 .8394037600917214 +521 335 -.19849798184434353 +524 335 -.14316239784134932 +528 335 .3092553121458458 +531 335 -.3287468037492538 +557 335 .6027032920240648 +570 335 .32509529126294606 +572 335 .4196054909633363 +583 335 -.2475039070834642 +584 335 .20910814701921493 +596 335 .06269069658932759 +604 335 -.39054022220149975 +606 335 -.08057981458607014 +639 335 -.29394814412403014 +648 335 .2191228519824292 +657 335 .39840260919898074 +661 335 .5265855701710165 +663 335 -.5607320967627741 +667 335 -.6439700880621751 +674 335 .2642545451328532 +676 335 .1056286383721518 +696 335 -1.0109781537322178 +698 335 -.8139694929469495 +703 335 -.22594365180043074 +732 335 -1.4073659781224686 +754 335 .6970753112706412 +761 335 .04831819346921612 +785 335 .03420070771944034 +795 335 -.10490628208110037 +799 335 -.814571366102664 +813 335 -.537164914846833 +814 335 .14913034118237364 +832 335 -.25868174608639394 +837 335 .0774136263764883 +840 335 -.2797791593067397 +841 335 -.734526401151008 +844 335 .8649632231924764 +863 335 .6384173152686312 +869 335 -.7478606801194336 +870 335 .45274446871815877 +871 335 -1.2664979639680982 +882 335 .2838163669877098 +894 335 .07185361309400215 +908 335 1.1542540617569772 +909 335 .522836867581689 +949 335 .2145987077713715 +953 335 -.9001102338257769 +956 335 .5672745742552541 +976 335 -.17983820117006238 +979 335 -.10359234819864577 +986 335 .1280204881367772 +996 335 -.6191417842443876 +2 336 1.0773900348633616 +9 336 .16460972026326132 +22 336 -1.0082961949828941 +25 336 2.55555501803181 +44 336 -1.0104030826408705 +45 336 1.9773737069439514 +56 336 .6165674957304863 +83 336 .5120526587829942 +97 336 -.20573501086533127 +102 336 1.3775026860687467 +110 336 .4495066278425861 +113 336 2.168428202663859 +132 336 -1.449646943378638 +136 336 -.2075642616842911 +154 336 .10813401685736478 +155 336 .3274397246978811 +169 336 -.2153566588301139 +184 336 -.060831001024078485 +220 336 1.0839498766211013 +223 336 .3372473374782361 +225 336 .6783251417638734 +226 336 -1.561843686469061 +244 336 .715806206350357 +245 336 1.0997774193215006 +247 336 1.7596544410927095 +273 336 2.037977999410546 +280 336 -1.0812403223558393 +294 336 -.046540639793085675 +317 336 1.0507206268163674 +330 336 1.2256128299749756 +336 336 .2434018222713442 +353 336 -.825203984692805 +356 336 -.5525413313955538 +358 336 1.2647082752054906 +366 336 -.6989412371978396 +378 336 .513677278096549 +383 336 -.03975557756500038 +387 336 -.5536715794861298 +388 336 -.5020681777280555 +396 336 .44847103747257705 +402 336 -.010005683106523389 +417 336 -.05395186707550649 +433 336 .7683295928195215 +442 336 -2.336852891639763 +447 336 -.33361253889166065 +449 336 -1.0025745285188896 +452 336 1.6737791730500577 +464 336 -.7550803384885332 +469 336 .7333636684638268 +472 336 1.1196292599626323 +501 336 1.913847418164414 +502 336 .2722453424050482 +504 336 1.6292759033118476 +509 336 -.8379783887710199 +517 336 1.5648451666515422 +520 336 1.1077939764103428 +528 336 .07232186404892099 +561 336 -.10994048152876859 +571 336 -.8484486077123077 +580 336 .205978935428431 +582 336 -.25050767106940486 +588 336 .0974871992131697 +596 336 -.04666300908738061 +641 336 .6309455666154515 +656 336 1.508818906419986 +657 336 .9014958356191741 +664 336 -1.5530512347330168 +666 336 -.11923790391287126 +674 336 -1.2726931125848098 +684 336 -.04179300200702554 +705 336 1.0447447535068006 +706 336 .19876197761810505 +709 336 -.42188749184107555 +714 336 .17133388091086937 +734 336 .6324965664194565 +736 336 1.9776296373417808 +751 336 -1.0878738041816054 +753 336 -1.600291610877362 +759 336 .05584876559475599 +767 336 1.2249075706321677 +780 336 -.28457700559570986 +789 336 -2.0583964368898555 +798 336 2.2088571968236415 +810 336 2.211992213679169 +811 336 .037492794171229644 +813 336 1.522300906199166 +839 336 1.1488161805930737 +876 336 .8609053841902639 +882 336 -1.0331206922014198 +884 336 -.45357351217591035 +911 336 -.46848860834143713 +914 336 -1.9300848031965279 +918 336 .25888241069178886 +924 336 -2.1208630399357262 +930 336 .2211742641556541 +932 336 -2.4999382471625853 +944 336 .07987602880620646 +945 336 1.609675412268355 +952 336 .05250657565536161 +964 336 1.4163283081600069 +965 336 -1.1634312390209263 +986 336 -.24823552015102804 +997 336 -.5811863227466144 +16 337 -.4858507640451992 +25 337 -.730029905278843 +35 337 .7890818960037103 +50 337 -.05683913700153964 +56 337 -.7345782964497626 +67 337 .23496233368274844 +77 337 .23018832295864106 +85 337 -1.4698840057084062 +100 337 .13771791866791594 +115 337 1.3976039263177498 +148 337 .5227640867884971 +149 337 -.7483922468652118 +159 337 -.5825042893792705 +170 337 -.20796575984220667 +176 337 .2661374798900139 +188 337 -1.471200595597004 +192 337 -.563116595730073 +211 337 .3079653383367191 +224 337 -.7989824530879174 +226 337 -.14035650916626685 +229 337 -1.0850864407458103 +233 337 -.0695690358923284 +269 337 .6688456474165547 +275 337 -.31020724614771755 +294 337 .21112567578170047 +296 337 -.8018819483958171 +302 337 -1.0226197418026848 +313 337 .4081078523322717 +333 337 1.1291008821757265 +364 337 -1.4787113863876948 +366 337 -.3600962584597634 +388 337 .1916493901087259 +398 337 -.14390790812125917 +452 337 -.6459279781881395 +455 337 -.5043703985846775 +459 337 .19137492668934306 +468 337 .5440786820385184 +490 337 .6844912127606131 +518 337 -.5400871223447022 +524 337 -.7410958158562262 +528 337 1.5072075816621253 +536 337 .7906705380081115 +565 337 -1.2625403377496047 +571 337 -1.1719983217107168 +583 337 .0796452035478189 +596 337 1.2063011097014762 +604 337 .25056064832507163 +620 337 -.1001246216898408 +641 337 .9421917460998662 +654 337 .4212980832457975 +656 337 -.7135090877871976 +657 337 .41446024525457253 +667 337 .28956024829318094 +668 337 -.715923465408761 +679 337 -.5121546658982506 +688 337 1.019279510735993 +698 337 1.3883218716888843 +710 337 -.015458926171954357 +713 337 .9907235340095562 +718 337 2.1394689240517786 +728 337 -1.984491932379555 +730 337 .2758930559259833 +737 337 .7492400438695614 +748 337 .21789290261598904 +761 337 .13095959971883187 +769 337 -.5989013268619905 +773 337 1.1335634825135201 +778 337 -.4200391173869096 +791 337 -.13954439849591338 +798 337 .7319513587890645 +829 337 -1.3440695566947094 +845 337 -.09095916055820102 +868 337 -.14040960566275174 +871 337 -2.186701798418256 +896 337 .8178287367994692 +903 337 -.3470596292044319 +907 337 .8597113153862823 +918 337 -.633794612193797 +927 337 .06751384858193038 +978 337 -.16601870357023307 +988 337 .43991481506725216 +12 338 -.9710209256570546 +29 338 -.6798424054446222 +47 338 -1.3294479069336 +92 338 .9083103796365841 +95 338 1.3814227784410409 +110 338 -1.364201973157502 +128 338 -1.3045971333862914 +139 338 -.5577233106645252 +140 338 .020567199740697206 +143 338 .8742993335218386 +160 338 -1.8163059920945404 +168 338 1.4721190570599412 +172 338 -.08243538292269137 +178 338 1.4480294869051131 +186 338 .8166504702877797 +197 338 -.24320421662873176 +202 338 -.5190385544256242 +212 338 1.4275251189479299 +221 338 -.1672238159432141 +243 338 .16049931784870441 +247 338 2.379679149643557 +258 338 -1.5486511704803914 +263 338 -1.1358052436488046 +264 338 1.7046352607728312 +284 338 -1.1391213903945876 +287 338 .40836550146923034 +298 338 -1.3153490002423505 +303 338 -2.324132305071683 +304 338 .9943026274152393 +320 338 .6034450483469419 +332 338 -1.6183251754434558 +334 338 .9572832487315426 +335 338 .4711359476526914 +345 338 1.433065203920183 +348 338 -.7687675759823119 +362 338 .6029404593271692 +364 338 .9725994466242638 +371 338 .683657850606209 +376 338 1.3673010988154455 +385 338 -.7268634666664378 +417 338 .11974622081270533 +439 338 -1.144150696692406 +448 338 .7754629227674551 +457 338 .5236564883802112 +466 338 .695857419628338 +474 338 .3373286786625237 +477 338 -.5814764403062853 +489 338 .3963582472591708 +492 338 .5912433303442239 +493 338 -.7349442475600207 +505 338 -.5471999164267531 +523 338 -.6457662757718536 +530 338 -.26846381023344 +531 338 1.7466451717710507 +536 338 1.6032281667627628 +537 338 -1.5975426480845174 +547 338 -1.9312763050098907 +569 338 1.5822279708854168 +576 338 .9532597873685469 +580 338 -1.4391190515379797 +596 338 -.6325950960007457 +597 338 -.6981996911571338 +633 338 -.9394990713933706 +661 338 -2.5754848474504186 +666 338 .37015169056010017 +693 338 -.42760315411834404 +695 338 .2914224954388159 +700 338 1.1701960025373648 +701 338 1.6821438207372739 +716 338 -.8558845166786652 +726 338 -.9963132630498336 +727 338 .2826984353550672 +762 338 -1.0849489020121623 +778 338 .9296256272880927 +781 338 -2.1931339344465037 +797 338 -.22621676647764188 +807 338 -1.5977749993463415 +830 338 -.5482949258788443 +840 338 -.6390275299863727 +845 338 1.1543565758859 +855 338 1.810747956526246 +857 338 .6449674979688849 +890 338 1.6271399323738185 +921 338 -.5886734262839639 +932 338 -2.2674111767992415 +946 338 .5789840034090715 +951 338 .0711033714502101 +954 338 -1.4502002182425853 +973 338 .6953273201161813 +975 338 -.16817365583651298 +988 338 -.2171486924004527 +997 338 .2286595615692501 +15 339 -.4924602440840169 +22 339 1.2015190845900832 +27 339 1.5886361846316588 +59 339 -.3573836526554194 +72 339 .8337577145229526 +87 339 .5836489389868506 +88 339 1.0452134978919827 +115 339 1.0749697933137141 +120 339 -.9486602858788371 +121 339 .3172208115279599 +123 339 -.06517625195726738 +124 339 .9760985164037144 +132 339 -.34797037701100497 +139 339 1.2765510518803034 +140 339 1.1868323298874646 +141 339 -.07131702881214781 +145 339 -1.4071598325594608 +157 339 1.9885762711980042 +172 339 -1.053228396535596 +196 339 1.3053906350347668 +197 339 -.38358707615403315 +198 339 -1.5982077360979123 +234 339 1.6445516435789524 +250 339 -1.4856209701472374 +264 339 -.3490996398223629 +281 339 -.9550063368137016 +283 339 .24450926911698717 +288 339 -.10101482636450611 +299 339 -1.3306064244405518 +302 339 -1.5052651988832504 +303 339 .06918805232506055 +305 339 -.0030069519151250806 +317 339 -1.1510151450807893 +318 339 -1.4185847134497003 +341 339 .6120647870962292 +364 339 -.2037986203502573 +396 339 .8686193226062163 +400 339 1.4643100460512821 +401 339 .8972456807067883 +414 339 .09875912976381102 +429 339 -.14679986127556643 +454 339 -.7581354246715133 +462 339 -1.8116654977884614 +465 339 -.6097404520753653 +472 339 1.1545475211792113 +475 339 -.5665363543829759 +478 339 -.2551672462449679 +495 339 -.4354714036674516 +502 339 -.22859738150147957 +504 339 .6262699896460664 +536 339 1.651146056525254 +544 339 -1.5162141745247601 +573 339 -.329052589457072 +598 339 -1.190426406310244 +617 339 -.4099522856995947 +620 339 -.12085259598444768 +622 339 -1.4405228323931494 +630 339 -1.0220224521862817 +631 339 .9094333272530174 +650 339 .9544409618032937 +666 339 -.922757581552707 +670 339 .21278455747320268 +698 339 .45530801204751625 +702 339 .061004911487434435 +706 339 -.11375852261720698 +719 339 -.06180694085280242 +722 339 -.6266336218715152 +723 339 -.3674794141974076 +725 339 1.054898113677137 +733 339 -1.2263828702586175 +745 339 -1.591672581138248 +755 339 1.4739928437292193 +770 339 -.41155426122438166 +791 339 -.40371971677354257 +803 339 -1.1327968472772358 +805 339 .5639940946218012 +807 339 2.1971447845459022 +811 339 .802728180803776 +821 339 -.8301251849505502 +826 339 1.6262168262409964 +827 339 -1.0118556042765852 +870 339 .6751055992156096 +873 339 .4252847768335348 +893 339 .3025275267809234 +905 339 1.5861520557119633 +906 339 -.687406206859761 +914 339 1.0120142440984439 +921 339 -1.0658012872639009 +932 339 1.0663146063302378 +949 339 .9300437741696582 +976 339 -.05252381723828756 +977 339 .08495022702124885 +981 339 -.7456534807740623 +983 339 -1.6343958426971203 +986 339 .8447658100373249 +992 339 1.1775366478374458 +994 339 -1.3432627721106913 +11 340 .7067979144894231 +16 340 -.39098596491171167 +21 340 -.1628923671440441 +32 340 1.048771197116472 +37 340 -1.4883569136653705 +46 340 1.1183581282467903 +47 340 -.255930950781446 +48 340 -1.139726707028432 +53 340 -.7471320334147403 +58 340 -1.71426976970818 +77 340 -.2332698725379662 +82 340 -.9547309079529724 +85 340 .8713965409095719 +93 340 .7404447513297411 +98 340 -.46383605145604667 +113 340 .09434346803745586 +114 340 .31308857561629133 +118 340 -.9864099188969011 +119 340 1.365268270802455 +130 340 .6450529632478657 +131 340 -.15535762366032993 +142 340 -.4090245028132468 +153 340 .12221029286459859 +157 340 -.2752496128760306 +158 340 -.22976460418170652 +172 340 -1.5329991808963241 +175 340 -.5548633517191197 +177 340 -.1264923516389172 +186 340 1.7677445270211993 +187 340 1.6001838417743022 +206 340 -.1428595812134395 +209 340 -.8636622402567464 +217 340 -.4080757769350369 +235 340 -1.0570241851965003 +273 340 .3249680052794396 +281 340 .44594378028204384 +289 340 .15524953354598153 +303 340 1.5393222724239404 +322 340 .9235144867976401 +328 340 -1.2218451981170113 +334 340 .74780010929313 +351 340 .9797709646246359 +361 340 .2544814583858415 +371 340 -1.702861969736348 +374 340 .8847810355594061 +377 340 .07541991729045755 +403 340 -.6720901209946213 +414 340 -.7210910269739622 +421 340 -.30846522001995164 +442 340 1.0516114784211767 +450 340 -2.1138554682477055 +456 340 .020579267818882745 +487 340 .07505630568271719 +509 340 .1118143294977047 +518 340 .057539853570718474 +520 340 -.8948645093888611 +521 340 -.3863052193145499 +525 340 -1.3203540690893174 +535 340 -.10099238651507188 +538 340 -.39801129835820664 +546 340 -.7566394866459802 +560 340 .6541121131989556 +561 340 .5368272865030841 +564 340 -2.800444545377659 +567 340 -.886402562009655 +568 340 1.081227333899246 +581 340 -.8981410580432408 +583 340 -.3475319685775629 +589 340 -.10324790889138252 +596 340 -1.6726394199692698 +603 340 -.39592231334425715 +608 340 .6333711367122663 +621 340 .9652178759208349 +636 340 .8875863120338959 +637 340 -.5819759925278114 +640 340 -1.078830338582477 +647 340 .1662246401285784 +665 340 -.7709951843157443 +668 340 .19877066810577818 +673 340 -.7295663343138632 +676 340 -1.9494320265524618 +679 340 -.5744825486941749 +687 340 1.358182083047576 +703 340 -.48805466234588585 +704 340 1.0244666779000087 +711 340 -.29457310204197845 +725 340 -1.3384106153470237 +734 340 .003409221854771091 +745 340 .17596544111821677 +766 340 -1.2900486915525748 +771 340 -.39783085706359 +781 340 .2079552868464953 +786 340 1.7195313794504639 +792 340 -.31163080314556957 +793 340 .8942483967909324 +825 340 -.6938588435136711 +834 340 -.11714697424129822 +836 340 .46955842446131246 +841 340 .8958524594761982 +849 340 1.9804826213869158 +858 340 -.12491767936747802 +859 340 -.6756211064550006 +861 340 1.1595862638240206 +864 340 .6603166168422419 +866 340 -1.3457911647366352 +891 340 .3061910788183004 +897 340 -.5940651164685145 +905 340 -.5256478525937728 +916 340 .032573231044797285 +945 340 -2.6641218752966886 +948 340 -.06968571593619609 +949 340 .9022116518900181 +951 340 1.8834096552133026 +974 340 2.3528724685220763 +975 340 .47585859311253603 +979 340 .24211243328450852 +982 340 .6771644602552003 +987 340 1.6421159582910623 +989 340 .7333974531885934 +992 340 -.6499764337279681 +994 340 1.4624671469106638 +995 340 -1.3283827056408344 +998 340 .10129319796897307 +999 340 -.4737865990347488 +14 341 .19869255137621925 +18 341 -2.258223750708116 +39 341 -.174021999594986 +44 341 .8291516202189336 +52 341 .8468801911279312 +73 341 1.0282773337518663 +77 341 -.5977927384819537 +93 341 1.1047672358398763 +107 341 -.8191723896126138 +108 341 -1.036473928694094 +155 341 .17269335796759439 +170 341 -1.0077626066207381 +195 341 1.2619060571444947 +208 341 -.9248272050222907 +227 341 .8799358389041791 +231 341 1.9419014864306094 +238 341 .32918990221024946 +239 341 .6072518062041203 +261 341 -.3141054653900896 +270 341 -1.1157533312620622 +279 341 .34957035533473735 +286 341 -.9952570863200824 +307 341 -.3743423508047057 +308 341 .5163688301698433 +333 341 1.256479573459001 +336 341 -1.9120097305904074 +338 341 -.22591771168195873 +353 341 -.6468849290679313 +362 341 .026899445371421287 +364 341 .22306161700952812 +371 341 2.2286227005233528 +373 341 -.7460848435198766 +385 341 .07107495366224595 +395 341 1.0487892778930565 +406 341 -1.2335873086399662 +422 341 -.3878098258061056 +424 341 .29455366881897777 +432 341 -.48306968194355493 +450 341 -.3219622722080253 +465 341 -.8092740251256194 +476 341 .004739160405977091 +478 341 -1.3749524895667955 +483 341 -.3393091896260326 +500 341 -1.0756392082008523 +515 341 -.03789383705572491 +521 341 -1.037286785998246 +539 341 -.5956016862193826 +589 341 -.6094367086671444 +599 341 -1.3164673641170792 +603 341 1.2577723374487388 +615 341 .13358981286744412 +621 341 -.7542743857595897 +630 341 -.6526651303050447 +638 341 .7006530288677483 +644 341 .2502179085005522 +661 341 -.46695002991431434 +671 341 -.7254742223911754 +682 341 .4975419455646002 +712 341 2.2341226325169354 +730 341 -.934694533476462 +741 341 -1.5169996185705341 +746 341 .9397385840791572 +758 341 -.10568921321522971 +769 341 -1.5202299533240573 +779 341 1.5774069142775664 +787 341 1.3484758109253356 +800 341 -1.276706840122105 +806 341 -.7714311365507454 +814 341 .3905044509910465 +831 341 .6055924991013176 +832 341 .17459840149912487 +834 341 .34341902153493253 +836 341 -1.2400064974269216 +841 341 1.8804778537146025 +853 341 -.8843002815360337 +859 341 .5104458596926797 +878 341 -.46370758418033875 +886 341 -.16171738561807686 +893 341 -.3696335272710579 +903 341 -1.420426402971438 +911 341 .28755739270003045 +937 341 .1182642318161814 +938 341 .4869466841720753 +949 341 .06548300948349273 +952 341 -1.497589560394561 +5 342 .1459559034871805 +12 342 .4478502871144422 +20 342 -.7092019391550903 +51 342 -.8661382571231181 +65 342 .11497797032212431 +71 342 .5440235107138203 +74 342 -.7697918425192684 +87 342 -.5515479105807207 +107 342 -.5661713338901904 +110 342 -.7743476284602677 +117 342 -.042211994262733143 +118 342 1.481339044254007 +138 342 1.9498070467987259 +139 342 -.09902342724798752 +142 342 .5842886690215047 +158 342 -.9315507178817202 +162 342 -1.879281880420869 +171 342 2.0520118272762096 +173 342 -.37459951194610386 +179 342 .9273621809111399 +182 342 .34423058150990415 +186 342 -1.8865748027695453 +214 342 -.26711685552744574 +223 342 1.2654826419384093 +224 342 1.1777990364599606 +235 342 1.1089760776547677 +236 342 -.13940063326174765 +250 342 -1.023015848579794 +262 342 -1.6762067468722452 +265 342 -1.063291197319706 +286 342 1.823548003849405 +301 342 .5082402940859762 +314 342 -.05951977891564857 +316 342 -.9148247852303554 +320 342 -1.433510359134572 +326 342 .9231542625971166 +331 342 1.0532730132166848 +333 342 1.7506333940840673 +335 342 1.5167710308404196 +348 342 -1.9981220591028785 +356 342 -2.0355715173302897 +385 342 -.5437775834011889 +394 342 1.7793251463656607 +445 342 -1.3918068237176962 +455 342 .45158823825180516 +461 342 .518859653058307 +466 342 -.8879716391635291 +478 342 -.48080321128363196 +486 342 .9811816925506096 +490 342 1.0503510257095323 +497 342 -.23769392267716355 +498 342 -1.2887319539670659 +505 342 -1.2696164639724452 +514 342 1.15899252665427 +515 342 -1.8050580070767306 +534 342 .020965536821137318 +545 342 .30157602005470086 +552 342 -.07397324756509066 +556 342 -.8751723978686309 +577 342 -1.1329493357866345 +583 342 -1.510517912330272 +595 342 .43592589493312434 +607 342 -.6261720548478917 +616 342 .25175388924632247 +617 342 1.1145407844958166 +618 342 1.1890683246665172 +625 342 -.19318317961824671 +626 342 -1.1347688119679704 +632 342 1.0504298749689465 +633 342 .054278934507553736 +634 342 -.8821377169410146 +647 342 .7186491439882559 +652 342 .7669564261308206 +657 342 -.9031028542513784 +658 342 .669418778783477 +684 342 1.014408487066429 +686 342 .33801651038667785 +693 342 .8158759686780713 +697 342 1.4148215626073297 +716 342 -.29573627128099583 +726 342 -.5122019387614566 +728 342 2.6217695952083107 +735 342 .5466537455845598 +753 342 -.8930697565024629 +761 342 .9028180705116379 +763 342 -1.233144111490601 +784 342 .10852210871127886 +809 342 .22740965314785422 +820 342 .29373754028956467 +832 342 -.999685294863322 +841 342 1.1310187517184176 +848 342 .13430304024454204 +854 342 .1115330486185579 +855 342 .5632805122341493 +857 342 -.12814076131348195 +858 342 1.3518103587246086 +885 342 1.415867519909141 +887 342 .1639986313969607 +894 342 1.3305740790594238 +899 342 -.6707111360596917 +926 342 -.7479025646765096 +929 342 -1.1791664034524354 +935 342 1.8990032638239052 +946 342 -.9442384379797593 +951 342 -2.297841148377497 +965 342 -.45870254463016 +966 342 .02353632783073012 +970 342 -1.23854659634372 +978 342 -.2935843671599435 +985 342 1.2284769354939955 +987 342 -1.1048204806173902 +994 342 -1.6502767469919137 +996 342 .14673176679388417 +21 343 -.6550706330994115 +27 343 .32563618972431785 +28 343 -.7186612467818275 +30 343 -1.0745390714535925 +33 343 .44106830684870846 +37 343 .22695829078364455 +42 343 -.9927223152131945 +53 343 -.12080961240093957 +58 343 .9976749047993899 +60 343 .2871092702663619 +66 343 -1.0726361267272537 +85 343 -1.25797489299585 +99 343 .6804584889815765 +109 343 -.11612274770744703 +112 343 -.2817111334169949 +120 343 -.7150203823680543 +122 343 -.016879294233429876 +138 343 -1.046524736221897 +186 343 -.19802897012454032 +195 343 .6495592394074401 +196 343 .6479705058395999 +200 343 -.4614294343485301 +216 343 -.10401110899931933 +221 343 .7343599138237301 +228 343 1.1538370575879298 +229 343 -1.41162403351552 +234 343 .7494348180501897 +253 343 -.6697402076761372 +254 343 -.6638067820845013 +270 343 -.5396679201588775 +283 343 -.8479461631523895 +293 343 .13609993290011163 +323 343 1.0299275057548736 +328 343 -.07121538302900332 +337 343 .5706173384787523 +342 343 .0588289336849266 +345 343 -.9020113453058433 +346 343 .11795707290626627 +347 343 1.22600325550005 +352 343 .5236370973703639 +366 343 -.6774689683280558 +367 343 -.7793060770913864 +385 343 .12419796127010782 +406 343 -.4344538216325867 +426 343 -.4379790495253549 +434 343 -.27283937271136455 +441 343 .11827203429482151 +442 343 -.15744484807541997 +445 343 -.5304751817680917 +448 343 -.334406489845422 +457 343 -.22962129173681162 +460 343 -.17618186354626192 +478 343 1.828034575979916 +481 343 -.1859049863902582 +493 343 -.38621678527060443 +514 343 -1.166831520194107 +518 343 -.21914972439690023 +526 343 .29410059858471527 +530 343 .6048826073053615 +548 343 -.6300324048289262 +554 343 .24275879676467482 +568 343 -.6949393407377445 +572 343 -.1987284326320767 +588 343 .4579830423279451 +600 343 .8526545329464263 +606 343 -.01049479774764396 +610 343 -.06221031061148734 +613 343 -.7454269700794238 +614 343 -.034549474253900245 +624 343 .27303339179735864 +628 343 .965317472452132 +629 343 1.1232113996833792 +632 343 -.891718583150894 +639 343 -.43641907142897196 +643 343 -1.5184115708340322 +644 343 -.0808143381605752 +663 343 .4071566735353806 +667 343 .022936409542754513 +672 343 .6979353512810041 +678 343 -.15034490442652942 +681 343 -.42060593486746867 +682 343 -.7791820593505816 +696 343 .6525288552063881 +703 343 .577281878642427 +706 343 .6785788076685682 +709 343 1.079474562730159 +715 343 -.6359512035804611 +719 343 -.5165209445458152 +732 343 -1.2786642357473081 +735 343 .025693179923198084 +738 343 .017082405781023394 +757 343 -1.4630167390485755 +759 343 .1801653970553948 +763 343 1.1190948271363041 +788 343 -.20831348267876273 +794 343 .006938026646696044 +801 343 -.22149508874891594 +813 343 -1.610150475860048 +818 343 -.2339835289575148 +821 343 -.21502372131429803 +832 343 .6731865169319251 +841 343 -1.7805963917233436 +845 343 -.9345475649484981 +849 343 .4784654751685672 +851 343 .5980610106870672 +884 343 -.13327708379123634 +887 343 .018320088445819636 +893 343 -.36755872563386005 +896 343 .6456014689570029 +899 343 -.19242505620710923 +906 343 .7862612421181818 +914 343 -.06902002420035998 +915 343 -.7494412697021021 +918 343 -.6426029571786905 +921 343 -.8228707161737572 +924 343 .23719453066109536 +934 343 -.30468828296097933 +942 343 -1.6203506720297767 +948 343 .667133093845314 +950 343 .4799569078052745 +955 343 .7098300953485475 +965 343 -.5752424517034322 +970 343 -.8425305817082045 +973 343 .3404765410981403 +975 343 -.4726756001484579 +978 343 .6954262507108178 +980 343 -1.4227283329459899 +988 343 .630622570428941 +996 343 -.4056822548367959 +997 343 -.431387606879576 +36 344 -.051087147925468125 +38 344 -.32707225898642706 +58 344 -.18204455984724077 +69 344 .4739874642918259 +79 344 .02897322757302661 +88 344 .14151466324999012 +103 344 .3265089106496618 +122 344 .9561148843407277 +124 344 -.21951523926404676 +132 344 .8150019233967561 +142 344 -.49954434517607604 +145 344 -.5757219531622474 +146 344 1.32868585222793 +148 344 .83629568469164 +152 344 -.9551122037070982 +158 344 -.1555661764892356 +166 344 -1.3534985178954382 +168 344 -1.0660698818797751 +182 344 -.6009290887993357 +201 344 -.03818764593652467 +204 344 -.7574931024881157 +209 344 .5008264342651157 +218 344 .06270265663160504 +219 344 .5604538240346759 +230 344 -.7315935181574045 +240 344 .5750001795067994 +244 344 .1571639835771563 +262 344 -.5899623875906069 +268 344 .5630273181967467 +270 344 -.7121484356033698 +272 344 .7939214907650898 +286 344 -.7828569753596353 +293 344 -.37020730192435103 +300 344 .17004730025104026 +308 344 .18653422679754933 +310 344 -.7162481183655 +324 344 -.5075951267151491 +327 344 -.07173670261108708 +338 344 .008516117015658194 +340 344 .3757251591192482 +366 344 .3899668342784618 +378 344 -.6292901563006024 +396 344 -.17471487416611162 +397 344 -.40830536970754017 +428 344 -1.199314499171812 +446 344 .22083212976184197 +450 344 1.0167316593029758 +453 344 .09725293729638781 +463 344 .3676739204504774 +465 344 .500914200581852 +466 344 -.12457343825327398 +486 344 .8256722887152127 +510 344 -.2462804500377139 +512 344 1.3427701229754103 +519 344 -.5614702912231418 +534 344 -.8019583637300872 +535 344 -.7243522754498476 +543 344 -.40996195617311204 +548 344 -.36809040972915735 +555 344 -.6055337793296485 +566 344 -.625861243528302 +573 344 .09444426792744047 +578 344 .5574061994028489 +580 344 .337577052493271 +617 344 -.028913075271472743 +623 344 -.6825971746162114 +627 344 .4048933827478319 +638 344 1.5987528393777108 +644 344 .20452537140513766 +652 344 -.2808871645451452 +658 344 .05686924721185984 +662 344 .375005366539594 +671 344 .4677776821202413 +675 344 -.3455500988918492 +677 344 -1.0632577244072576 +689 344 .14033321516515515 +695 344 -.3340180593306896 +702 344 .09952314132504324 +708 344 -.0032576889761604527 +714 344 .5961936763055098 +732 344 -.7588544598510923 +738 344 -.35238461788073555 +740 344 1.3308913204504789 +749 344 .014957985674112845 +764 344 -.6114172707601024 +766 344 .2277284291249475 +771 344 -1.2678898632406557 +778 344 .3958478124828516 +785 344 .062067046250140916 +797 344 .6097138880999979 +799 344 .29290075504811103 +802 344 -.7788256248128923 +805 344 .7255480744037565 +813 344 -.6587751631739174 +829 344 -1.10388323800815 +847 344 .8004204110756918 +878 344 -1.2806778866505928 +881 344 -1.3307216258911219 +885 344 -.3588455228714549 +893 344 .5645857632906724 +908 344 -.11575100372647307 +914 344 .8507014825038917 +921 344 -.1353995414308439 +935 344 -1.5490550376237797 +948 344 -.12213242953199444 +950 344 .394806493166907 +963 344 -.8110184216530372 +976 344 -.7222129512183638 +986 344 -.4884706551685844 +991 344 -.8140761879452898 +999 344 -.4169704787512286 +9 345 -.779164830131498 +23 345 .5389434523981195 +31 345 1.2554271573611537 +35 345 .7762636617812924 +55 345 .015810022424716123 +61 345 -.1013879021646725 +68 345 .17404676167111605 +78 345 .2188140984031438 +87 345 -1.8896337170066524 +89 345 .7632921545654052 +96 345 .713497588437947 +97 345 -1.122662149507785 +102 345 1.3887079528132253 +113 345 -.3293139571596847 +121 345 .17764580230412544 +131 345 .5616393430606281 +133 345 -.20696403348273182 +141 345 .8635222158884941 +143 345 .23859650748525396 +155 345 .010552044567759059 +167 345 -.34804453000363844 +184 345 1.2080484021923275 +188 345 -.1608755802458152 +190 345 .9817963758095867 +212 345 .2616641203500723 +213 345 -.2999088111985058 +220 345 -2.0479377329303117 +241 345 .6346438459252539 +263 345 .1280700941851414 +264 345 -.0978497739615074 +267 345 1.9845762737171235 +273 345 -.9644312344146055 +296 345 -.8934144548257931 +301 345 1.1320205476825493 +314 345 -.9955560449504878 +319 345 .2945614496044418 +322 345 .05974427381222727 +332 345 -.08013460601271466 +347 345 .6380805670896738 +363 345 -1.6484093493063399 +393 345 -.717881784773742 +399 345 -.07595623963721268 +430 345 .131059743195774 +438 345 .24171087491425647 +452 345 -1.3918252003305998 +458 345 -1.1848062000305437 +460 345 -.1710604018210708 +467 345 .366556054462024 +472 345 -.6703033175725183 +485 345 -.16317751232064742 +487 345 .5177433664615052 +488 345 .6745743334241933 +491 345 -1.157766866644546 +496 345 -.35237904638991036 +506 345 -.24486533859180248 +532 345 -.06233672494208432 +543 345 -.5088774216352232 +546 345 .2724268617795372 +569 345 -.9894005775278567 +581 345 -1.2616712959386975 +595 345 -1.067740570153461 +597 345 -.28348920397757627 +600 345 .8285769921127644 +602 345 1.638647168192719 +604 345 .8205083608239441 +615 345 -.7784735615652711 +619 345 .988290362518974 +625 345 .4187961220975268 +630 345 1.2043269365489628 +631 345 -.3664027540713207 +639 345 -.6424674997134342 +644 345 1.094486419790312 +667 345 -.9023288244212816 +671 345 .702513173640276 +677 345 -.47222843847364976 +688 345 1.7253888112791032 +706 345 .5981228521983192 +707 345 -1.2514699526601363 +714 345 -.4309382983302377 +733 345 1.0865533360492712 +734 345 -.10836836875611171 +737 345 .5506041454206371 +758 345 -.38025282622650114 +760 345 -.9038679719335491 +779 345 -.3346799071825765 +781 345 1.1980768098820658 +786 345 .10886565371948054 +799 345 -.44281740722215024 +816 345 -1.4888847155191514 +820 345 -1.3069186257909868 +834 345 .3036479458772003 +837 345 -.9698614872121968 +845 345 -.6037422530285045 +846 345 -.750582308653286 +849 345 -.5918397691359893 +850 345 .09757701607269317 +851 345 1.956904676759152 +855 345 .7665577665081392 +859 345 1.1856736820933451 +864 345 -.6878190737030614 +865 345 -1.1735825136521287 +874 345 .8051435984180837 +899 345 -.14596982830321245 +921 345 .6975571981409233 +922 345 -1.3987228260344566 +931 345 1.3553324854871098 +938 345 -1.2265887882847994 +941 345 2.339407609837429 +946 345 1.2758904148799273 +947 345 .5734375549294897 +953 345 -.39656350852037764 +957 345 -.8551451361104864 +960 345 .15830951743738025 +963 345 -.46652694208860834 +977 345 -.8570661807576836 +30 346 .4462371226262016 +46 346 -1.4761670455479394 +49 346 -1.5955038701900728 +69 346 1.4169086024991144 +71 346 -.26397515888995643 +82 346 1.0613502666341998 +91 346 .26081571969370426 +120 346 1.2662235428592754 +131 346 .18709930147266837 +138 346 -.4947205453763458 +156 346 -.0982736524845057 +182 346 -.8669118169897818 +203 346 -.6694607139142604 +204 346 -.19852727670556272 +207 346 .053736383696496304 +217 346 .5014662284073006 +227 346 -.6848867593485262 +229 346 -1.8447692524411352 +246 346 1.4550317531905015 +254 346 -.41893631187569874 +277 346 -2.145739318607533 +281 346 2.1127038562723834 +290 346 -1.0400398217913027 +304 346 -.08092222476467707 +306 346 -.6116419022374456 +310 346 .3666680425457082 +326 346 -3.238177888515734 +333 346 .7076143566061602 +335 346 -.6770221455364976 +340 346 1.168564200731297 +344 346 .3793386611430404 +357 346 -.9952479067071373 +372 346 .8014267289725927 +381 346 -.6020353648590819 +386 346 -1.3631174633966325 +398 346 .13302783311323746 +404 346 .09497578524554327 +417 346 1.462575538713757 +423 346 -.2104122835454542 +428 346 -1.0628380717086878 +431 346 -.7911910572055383 +442 346 -.9031008505580298 +461 346 -.5154495837039564 +467 346 .14525436044783205 +478 346 1.7380147515323272 +479 346 .2409502434100098 +481 346 -.7344344013641664 +499 346 -.4632960453854726 +518 346 -.43042708882894026 +524 346 -.7933408927217456 +539 346 -1.0415039277813554 +557 346 1.3870072948934558 +578 346 -.9105064649853366 +579 346 -1.2354746377240162 +589 346 -.1614344830480691 +602 346 1.1164687830019007 +603 346 -.44780463863291875 +606 346 .6707200224865941 +610 346 -1.0996207776453852 +627 346 .4752846135874126 +633 346 1.7677465853879932 +634 346 -1.9989282575423337 +640 346 -.22419413483600212 +652 346 -.3829213000212079 +653 346 .09803623591492078 +654 346 -.058661899073539955 +681 346 .5284795339639305 +693 346 .31322531431879624 +704 346 -.07561151057546268 +706 346 2.0623593242986216 +712 346 -1.1213144324679039 +722 346 .6263406535277983 +727 346 -1.49284322316529 +747 346 -.03855902611937381 +767 346 .24304887240956136 +770 346 -.5212610780707728 +772 346 .017580024472362385 +795 346 -1.054070647024699 +800 346 -.15153918850927306 +803 346 .42974863221077475 +805 346 -1.9887418695623051 +806 346 .25574250435642004 +815 346 -.8118282978164921 +835 346 -.4797760744576006 +846 346 -.9883514959018658 +850 346 -.13412274820495723 +857 346 1.2708196138231382 +858 346 -1.0818525271878878 +859 346 .2934733233284261 +861 346 -.23899254778031176 +898 346 -.23452497523484692 +902 346 .6340262089250355 +907 346 .8438931604972801 +915 346 -1.811952720748605 +952 346 -1.0165822908080868 +960 346 -.15924322756975184 +961 346 .42449604614857406 +963 346 -.3631500387060478 +972 346 -.15561489392797864 +981 346 .67318959338904 +982 346 .6070259001178785 +983 346 1.2118043255040711 +985 346 -.5777649310922068 +5 347 -.25842133033581927 +19 347 .3132225087990913 +36 347 -.6752755047770677 +42 347 -.11774221110486328 +43 347 .6557793910844888 +51 347 .4836488447448901 +52 347 1.7588219965340706 +68 347 -.026365656068964544 +74 347 .278087866850611 +86 347 -.33079105102415196 +95 347 -.6519328453829933 +121 347 .6078959287182448 +136 347 .15393161661787583 +145 347 .34819417928120433 +146 347 -.6413407342645767 +151 347 -.6047125387217498 +153 347 -.291100449176557 +156 347 -.47772004797236545 +157 347 -.07172565354157132 +163 347 .175486952952576 +170 347 .1603285563669855 +199 347 .13039639826598703 +232 347 .3872705443208586 +241 347 -.31090667560822394 +253 347 -1.0202733449397412 +255 347 -.7127463479119802 +301 347 1.1346543504520428 +302 347 -1.9413262971794791 +303 347 .5766025760435826 +313 347 .4322475347039301 +355 347 -.05470860616310882 +399 347 .41278995137804764 +428 347 .3551199358410667 +430 347 .6035259344583427 +446 347 1.2486045680549853 +458 347 -.7270972959365529 +459 347 .15219236286264026 +465 347 -.9376850963121537 +466 347 .4879491904976695 +470 347 -.26160037803199077 +475 347 .06864231618175014 +479 347 -.09604387525865982 +489 347 .07566239809703826 +497 347 .02705512065881016 +507 347 -.021247502788871234 +524 347 .3554699939002452 +541 347 .06140611653636034 +546 347 -.5140406117331605 +555 347 .5178569920581471 +579 347 -.03871279784954306 +595 347 -.22280256562397982 +617 347 -.39734710495925346 +619 347 .37519234399074586 +630 347 .21862552861027912 +633 347 -.32586296070374615 +634 347 .5267869995399167 +641 347 -.4260955164914449 +643 347 -.4626434464646093 +644 347 .29219993428188906 +651 347 1.4793250347956584 +656 347 -.3111509681155466 +668 347 .42461427779565797 +669 347 -.30436015564490776 +689 347 -.3433816078719151 +701 347 1.2180771269518447 +714 347 .11102987265732328 +720 347 .2061093268766813 +721 347 .8963909902550505 +723 347 -.4684952405420762 +741 347 -.13921073541082835 +765 347 -.025762648984602537 +774 347 -.000503323454175239 +781 347 .7575402134136057 +809 347 .0760767439062029 +810 347 -.3263252014369518 +844 347 .3976816750755635 +848 347 .11555963688408893 +849 347 .2754478067417909 +851 347 -.16864356346803017 +856 347 -.28974241836985254 +886 347 -.5812000367911474 +916 347 -.16991767383696363 +918 347 -.3409761836419676 +928 347 -.08551777769370164 +929 347 -.8269911180043362 +944 347 -.24693209823263335 +955 347 .6960618119848982 +956 347 .6998406715466283 +961 347 -.257295043533157 +975 347 -.20316330009313893 +992 347 .1234225143908469 +994 347 .7021996638481143 +2 348 .6063986128823207 +7 348 1.484278866406055 +8 348 -.10352195939811512 +9 348 -.33445638858130544 +13 348 .124265394574048 +17 348 2.0699522916688515 +43 348 1.7221367651146333 +49 348 .2872624584055285 +60 348 .47284705964999413 +100 348 1.9373377355975785 +105 348 1.394746293575744 +106 348 -.5906410115816493 +136 348 -.8445032963103607 +143 348 -2.2560678932423386 +150 348 .11221426368325177 +160 348 -.6756865825468192 +178 348 .10643690914220146 +194 348 2.0077607241989344 +196 348 -.8860043569898499 +222 348 .755360960346106 +237 348 -.03250239198461484 +247 348 -.5325907359150606 +285 348 .402329088280562 +286 348 .5036950436331051 +295 348 -.6798557226712982 +296 348 .3234117575166611 +303 348 .8286005476218848 +309 348 -.45915439348005344 +330 348 -1.5837731813527693 +337 348 -1.1539855528964005 +340 348 1.2286294142264693 +365 348 -.8569727329154516 +381 348 .15180900028488245 +407 348 1.3621010966953149 +415 348 -.6483700820836925 +423 348 -.4314069917014547 +431 348 -1.2183703032142945 +453 348 -.46207285340068527 +459 348 .3733699775078805 +463 348 .7458820490555369 +466 348 .2721513804650869 +474 348 .7603727195801041 +476 348 .029286816131676136 +484 348 .9687299527186484 +492 348 -1.738668208144745 +530 348 1.332306435154543 +533 348 .4618530268376291 +539 348 .25694159603165073 +545 348 -.8255784716500312 +551 348 .050446929525062204 +572 348 -.5455396862934176 +583 348 1.6477092753076266 +587 348 -1.0053042920298403 +592 348 -.00774175701776416 +621 348 1.5724631888459437 +633 348 .8060762687633221 +634 348 -.6608061051147882 +640 348 -.6518266010135231 +660 348 .6589765347387154 +668 348 -.6882721286120504 +686 348 -.24125685323291957 +687 348 -.2776133090831948 +705 348 .07275821389594542 +739 348 .5414034241341611 +742 348 .4224909110068469 +749 348 2.14955623999303 +751 348 -.466740012166018 +756 348 .7831579786723805 +787 348 -1.8190680793004699 +794 348 -1.643971430717633 +801 348 .4671023551553931 +805 348 -1.3249078704617792 +807 348 -.6697289162244501 +815 348 -1.255816352366149 +817 348 1.3746155570980032 +824 348 .5206506352619581 +832 348 -1.034330246944633 +834 348 -.05641202421900776 +848 348 .547457654044105 +861 348 -.509483104931438 +888 348 1.4795426230754405 +898 348 -1.0427404228378006 +903 348 1.7184773254605776 +909 348 -1.5446554469054241 +914 348 -.9547924919997234 +917 348 .4844890418546256 +921 348 .3702787854983997 +923 348 -.6866898966278197 +935 348 -.5367935788026018 +950 348 -1.0533852145931517 +964 348 -.371228010192043 +989 348 .3092911567186138 +997 348 .2324733834751627 +998 348 -.22050057752435026 +10 349 1.0791629661561106 +19 349 .22975241543640712 +34 349 -.33230068195762236 +53 349 -.4611678886191944 +58 349 -.22095210024850606 +60 349 -.26425153111537286 +61 349 .6518873376116607 +62 349 .1362842188462361 +101 349 -.6870500805674281 +134 349 .8086045568585043 +136 349 -.15332241607573321 +157 349 .3918102363030813 +158 349 -.1275499235717756 +171 349 1.7436840628050299 +182 349 -.6240427454518582 +184 349 -.0022571726467314895 +194 349 1.0423587837873887 +195 349 -.6251045629861464 +202 349 1.0999753353004955 +219 349 .18785312867505674 +229 349 .29764175250493075 +234 349 -.37460184399367197 +239 349 .5310734199091294 +247 349 -.08094191351538627 +255 349 .7043388572942576 +256 349 .38812226671169436 +262 349 .5507656512190235 +273 349 .19526267775264244 +275 349 .5673022870149453 +276 349 -1.3135056132691127 +285 349 -.37211408769363624 +306 349 .21902780912799016 +314 349 1.0384475717016055 +351 349 1.2582271149391866 +357 349 .13995515074383524 +358 349 .08230736161618221 +367 349 -.20135831958296713 +377 349 .24371523329409336 +406 349 .5493759135228456 +408 349 .18537311146501467 +413 349 -.8689859230739804 +423 349 -.11561471980449806 +424 349 -.17604220895898132 +427 349 .7751182280891016 +428 349 .1917663665844838 +453 349 -1.7301880252042197 +457 349 .13969353592402434 +470 349 -.5124234103816916 +493 349 1.079183261524355 +494 349 .9976572139002701 +503 349 1.6514620176829393 +521 349 1.113328533380828 +536 349 .7044150984361573 +545 349 .12762155579252774 +550 349 .21584221764593775 +551 349 -1.6911508618195557 +568 349 -.9994129726646142 +572 349 -.08058511345393063 +581 349 -.7330849968675603 +601 349 -.2390180717581807 +609 349 1.0296859727682135 +612 349 .846170088881995 +614 349 -1.5251301648603521 +622 349 -.13068482118190872 +634 349 -.34693891996165116 +641 349 .1336495352773767 +648 349 -.8913263070846926 +649 349 -.982041084898393 +655 349 -.5427411447294725 +672 349 -1.4082140003584152 +680 349 .1423540890766155 +681 349 -.8917287519877988 +690 349 -.8785241426749308 +700 349 -.9558740659952323 +707 349 -.6174355430012863 +709 349 -.046076216098430905 +723 349 .4755039502215008 +745 349 .64540831507427 +748 349 -.4641575701922591 +749 349 .46279535435949126 +753 349 1.0109108767904615 +768 349 .5282989008489012 +784 349 1.1832223835758597 +802 349 .3368609153357078 +805 349 .24850139294390686 +814 349 -.55843204465946 +816 349 -.3590372733269461 +820 349 -.29610351426624637 +826 349 -1.700984476685367 +829 349 -.11416061202618923 +848 349 .7053465939448859 +886 349 .3322851837154007 +909 349 .09633878667209571 +910 349 -1.2389444328270551 +923 349 -.8225657031297989 +926 349 -.6423798435037087 +927 349 -1.279749215775417 +930 349 .3226391778795561 +937 349 .37382432074755645 +941 349 -1.1666484515830304 +951 349 1.2546027288419392 +963 349 .016367231189703485 +985 349 -1.0296223175584518 +999 349 .5337305531720606 +6 350 -.534402823331346 +27 350 -1.5660702844821603 +31 350 .5275489242833498 +37 350 1.0939517099693248 +39 350 .7035501550038191 +57 350 -.26770638811148506 +63 350 .4647874666442857 +92 350 -1.0901304191095291 +96 350 -.7831401429883952 +97 350 -.19211244633487268 +121 350 -.6037372872642669 +135 350 .566067247509331 +136 350 -.6970400535864532 +157 350 .19313808253125792 +196 350 -.2930752146570219 +206 350 -.12424004056245015 +216 350 .16368036545957868 +241 350 .40525011643502057 +252 350 .730087008103564 +260 350 -.053074189638509545 +271 350 .8804866532602269 +288 350 -.3131507067496346 +301 350 -1.432466174987188 +309 350 .35889875561139517 +310 350 -.8739718953859382 +316 350 -.8593771992582508 +326 350 1.1562985966645276 +327 350 -.04932400384547417 +355 350 -.28760960796295637 +356 350 .6332450977696663 +357 350 -.9131814639163991 +359 350 -.42350520487203874 +377 350 -.16913276504089306 +379 350 -1.762635984785277 +391 350 -.4647021583970784 +393 350 .5816034067727635 +396 350 -.028301740417111552 +402 350 .5435018464272363 +403 350 .03205164787820558 +405 350 .34471507996609885 +421 350 .13554867559428826 +423 350 .030180103959520234 +425 350 -.08311903349757388 +436 350 -1.602203851368017 +437 350 .5490010365035981 +465 350 1.6307873681495686 +494 350 .7763615570012341 +498 350 .15672877985007538 +504 350 -1.8346716386929354 +506 350 -1.1929520803727534 +522 350 -.06829641171583144 +536 350 -.29604075981460887 +539 350 1.210716985155209 +550 350 -.8464456896394306 +558 350 -.3210344171135343 +575 350 1.0288986140779377 +600 350 -.964507325049084 +602 350 .5452413203806338 +616 350 1.5968987764428104 +631 350 1.0447720571875219 +642 350 -.30677393928913466 +680 350 -.5558749300030644 +710 350 -.08844361616083632 +718 350 -.27944925641549107 +744 350 -.9490081318136091 +748 350 -.4881872592117515 +774 350 .7931765205678263 +798 350 -.6571906770057983 +822 350 .6230651198880534 +825 350 -1.0126782917657182 +832 350 .46862515616591777 +847 350 .6671851782710502 +888 350 .4004937327309432 +896 350 -.0638437598784814 +897 350 .4889631375627109 +899 350 -1.140481772387518 +909 350 .054855218137817414 +927 350 .07332537217088651 +929 350 .796657621645324 +947 350 -.14664449042202476 +955 350 -.26001293069192244 +966 350 -.8089436664279327 +980 350 .1093894578351231 +984 350 -.24375158453491572 +999 350 -.4050876256898882 +8 351 -.28725016862799146 +11 351 .20937520702331022 +28 351 -.6653804489615374 +46 351 .5740294984071961 +61 351 .4009557466087288 +63 351 .28371926670138037 +74 351 -.9189940986917126 +97 351 .3871065619871381 +98 351 -.3382772802251084 +109 351 .3943379516762572 +112 351 .10521578640893661 +118 351 -.5336295009775388 +125 351 -.6362385170479 +136 351 -.32423287976203075 +139 351 .4136033228780988 +152 351 .4995541704168952 +177 351 -.3979707611329753 +214 351 .15251705371046823 +227 351 -.052886488403591524 +236 351 -.020767471299295834 +252 351 -.24449751445681286 +253 351 .3734501886710121 +258 351 -.8770027944961812 +265 351 -.47373672241672304 +271 351 .8483061450402157 +279 351 -.07590708413196184 +293 351 .09101510460564577 +303 351 .2531894765247048 +318 351 -.7786754060079712 +338 351 .9929024037611042 +360 351 -1.1786639973454118 +366 351 .65728338948953 +367 351 -.034933178112303516 +378 351 -.016572039486142914 +404 351 -.08628306844097057 +411 351 -.3141077808298853 +422 351 -.5874301539222981 +439 351 -.41167529954338034 +441 351 .7069758111044684 +464 351 .2427419227846844 +468 351 .7275880600646537 +475 351 -.05522356592930876 +480 351 -.26395874950810216 +490 351 -.4185848660766357 +504 351 -.3854525635430658 +522 351 .7299808368104654 +525 351 -.30270960057409946 +533 351 -.28450048096629094 +536 351 .6027951933703892 +538 351 .354775095011645 +561 351 .32915300212806897 +567 351 -.11267462697257528 +577 351 -.2748639049723056 +614 351 -.9539614897728984 +630 351 .24910034379462578 +632 351 .08552403075057038 +633 351 -.5080760568971451 +634 351 .4312862590501661 +636 351 -.12843313630483083 +663 351 -.3473455830457055 +675 351 -1.1592805136121866 +682 351 -.14467303834896938 +710 351 -.157079000877214 +713 351 -.5324844385407457 +723 351 .08573193210585035 +741 351 -.37477833836493285 +742 351 1.1242614070422003 +743 351 .05690125856897815 +761 351 -.18106141829511407 +768 351 .11377283772998051 +781 351 -.6572833425871625 +795 351 -.13079557160851038 +808 351 .0581405302913611 +822 351 .1500093277305954 +825 351 -.5564678247145298 +843 351 .04198391305455112 +885 351 -.3745855940690083 +903 351 .19836090422382838 +905 351 -.36062896458743515 +909 351 .26461932560734247 +920 351 -.3825362116148069 +926 351 .01397463610119476 +931 351 .16055038283493933 +935 351 .06014677713238988 +943 351 .40708811279048845 +958 351 .03660968536542719 +971 351 -.12641096679990155 +975 351 -.0717646061435589 +981 351 -.06236782936494618 +994 351 .24250382209639693 +12 352 -.8479783361787651 +14 352 .4734475553419138 +23 352 -.4327089204603224 +24 352 1.5472310338865045 +27 352 2.144617536294374 +28 352 -.1297183795425558 +33 352 -1.5538734159427752 +34 352 -1.2637396940184729 +48 352 -.6421397845426154 +50 352 1.8154134026786728 +69 352 -1.270934679737071 +72 352 -1.3382477243136477 +80 352 -1.4801702291568115 +87 352 2.560931481037565 +88 352 -1.5845373184040845 +92 352 .2808550164922067 +95 352 -1.9491944818840454 +100 352 -.5657666963804181 +107 352 .6608709714554806 +133 352 .030223420950517707 +134 352 -.13192620500455185 +151 352 2.3490072143396428 +158 352 -.9271642135051168 +167 352 -1.4694391597148058 +189 352 .33448064594241406 +194 352 -1.6285340027763024 +196 352 -.005511678450541624 +198 352 .6009150837062902 +202 352 .14330155104388745 +216 352 .44789463214070907 +219 352 -.6457268072849148 +222 352 2.113390261137092 +227 352 -2.0230448649967845 +230 352 -1.8708830675543908 +231 352 .3124420035425207 +236 352 -1.5353510455904427 +263 352 .6040825561046744 +273 352 1.7312135998564977 +279 352 .4955226633912519 +295 352 .7998981042154545 +316 352 .44194285152740154 +322 352 1.633541282118435 +352 352 3.4476853672883045 +355 352 .5901144335118329 +361 352 3.0495421953801367 +362 352 1.8241922598364435 +365 352 2.0405393057377683 +367 352 1.957064937591953 +376 352 .22302337145275614 +377 352 .15055301243769412 +399 352 .7319432156146359 +402 352 -.4532154540589791 +415 352 .8930975639600753 +441 352 2.5631000184900046 +443 352 -.7785611420224726 +459 352 1.1405796017023901 +465 352 -.8724200949488432 +469 352 -.0201037641817704 +474 352 -1.3668037992804511 +489 352 1.4778584636766607 +494 352 -2.4534647099112314 +497 352 -2.529115637369786 +500 352 -.8124115503305565 +513 352 3.3326666673228096 +514 352 -.969314426437878 +515 352 -.3947061985220136 +516 352 -1.9680442182444948 +554 352 .03772557170384272 +563 352 -.05885968642634773 +565 352 -.5219197455172445 +582 352 .022763716673588757 +588 352 1.2460975465935706 +595 352 .7424462696209013 +602 352 -1.6930097705617795 +618 352 .7331615369807286 +623 352 1.0737257699641063 +652 352 .22518490844589248 +654 352 2.367590527015847 +658 352 .2642023463954497 +673 352 -3.436634096511113 +696 352 1.8784922477862018 +703 352 -.5986263069615518 +731 352 -.6393811140622507 +757 352 -.2740910682228012 +782 352 -.6444608929682769 +807 352 1.5147371252923236 +808 352 2.1530277879717863 +813 352 -1.4437515592661687 +825 352 -.018414157556428598 +830 352 .23975306499750323 +843 352 1.504752351214204 +864 352 .07468193510937013 +882 352 .629417934141245 +893 352 .7346979061357108 +895 352 -.0696877768402134 +897 352 -1.0833583945680962 +902 352 -.5504181059865727 +903 352 .25688601734738165 +914 352 -2.1681322775963268 +921 352 1.3930779951664178 +922 352 2.8570915297292254 +926 352 -.7269475147464032 +946 352 -.3475977146432873 +948 352 1.060693632865272 +949 352 -.7361383676209274 +964 352 -1.2361886060880984 +966 352 .07834053554395352 +972 352 -1.4273172399234704 +985 352 -.780004000384737 +988 352 .6790229317285578 +989 352 .3778408501348848 +2 353 -2.0437569148168353 +7 353 .07707825689571016 +23 353 -.05540024039359531 +26 353 -.8977150774199606 +35 353 .7971407087523809 +49 353 -.6735189069095654 +52 353 -.38549793083769823 +57 353 -.7341483534665834 +60 353 1.9820319142426517 +64 353 -.10196107750905305 +65 353 .21994811982183896 +86 353 .8472462607554698 +94 353 .6159154656932163 +110 353 1.2354888419778387 +111 353 .29178623911800594 +117 353 .26627036989872255 +127 353 -.36128682265166745 +153 353 -.5643400157082246 +155 353 -.1638565548907807 +157 353 .6901981582132712 +159 353 .15365858859304618 +168 353 -1.3971045043647834 +182 353 .227834130563308 +183 353 -.7140692578103711 +204 353 .5025876643328577 +206 353 -.980020870427833 +213 353 .22903356301223332 +221 353 .6609270086031358 +230 353 .12055114547996244 +261 353 .6154144411209418 +262 353 -.9656217471614655 +264 353 -.44128391963102226 +267 353 .09204807970905955 +275 353 -2.5136457634343987 +280 353 1.0498751187081679 +300 353 .05518262685837625 +308 353 -.010062190073452094 +315 353 -.29974040220782905 +321 353 .551918949453449 +324 353 1.4522076975023754 +347 353 .3340503868501418 +348 353 1.2340620525740718 +358 353 -1.8287681533609412 +363 353 -.7179377135925632 +376 353 -1.0059744587819281 +382 353 .47779532950251746 +384 353 -.8931348002210656 +401 353 .9459160894225223 +406 353 -.41981834126993856 +422 353 -.7646495563155971 +434 353 -.4756627461468195 +436 353 .08092011972481 +455 353 -1.1493407179069512 +457 353 -.5808179691659952 +458 353 -1.2622866493659242 +463 353 .707496665377785 +473 353 -.3766826467674975 +476 353 -.5599785730854525 +483 353 -.27518796727674966 +484 353 -1.4901824321098616 +491 353 1.3951905302611647 +505 353 1.040705168915379 +509 353 .4311826485496101 +532 353 -.7494651315517014 +533 353 -.3809885186747768 +534 353 -.5649592109429286 +570 353 -.5536089259862165 +571 353 -1.1021166182469653 +572 353 -1.4527451285434168 +573 353 1.0998425131163698 +574 353 -1.3788681177223523 +578 353 .01555077231737699 +582 353 .10407208382551697 +586 353 .07595923943657826 +587 353 -1.0529195966062193 +590 353 .2893233485338088 +594 353 -.7396616739746069 +596 353 .03893692735112611 +603 353 -.9848048344757604 +610 353 -.685158425458093 +632 353 -.09687902437497009 +644 353 -.021251271025683922 +655 353 1.1358159939339232 +660 353 .20304120905464998 +671 353 -.5163525350808885 +674 353 -.23419314897702878 +679 353 -1.210763964605656 +695 353 -.5834607041544291 +696 353 .35878860524397765 +698 353 .6332422910011121 +701 353 -.9738572976380588 +707 353 .6441550640972525 +726 353 .4636449034691943 +735 353 -1.1548184523676168 +736 353 -1.3518933973110596 +745 353 -2.1089565871949514 +749 353 .2286296789544135 +757 353 -1.1186813224557834 +763 353 .5159362740762058 +775 353 .010563680853008905 +786 353 .04775191219423275 +795 353 .46466785416089107 +797 353 1.6437556334906769 +806 353 -1.093974893247922 +824 353 1.2406230672732388 +834 353 .6790844180957717 +848 353 -1.8396141135508244 +853 353 .6365516068774226 +854 353 -.14809566766429663 +858 353 -.9595831683825847 +859 353 1.7013979814837066 +872 353 .512833594616249 +883 353 -.8602171015640793 +886 353 -.5018089831997407 +888 353 -1.1752581452945667 +891 353 1.3646846667495847 +897 353 -2.30940259028412 +911 353 1.1463118946823219 +922 353 -.48200801837478147 +928 353 -1.1267319033241638 +947 353 .1718788934784572 +950 353 .526607083328785 +953 353 -.49719348620677806 +956 353 -.37117101547784614 +958 353 -.12118171226682665 +959 353 -.18658876894053533 +974 353 .23364030509291556 +995 353 -.5501448659266244 +996 353 .00645651366886224 +3 354 -.6657336597462726 +25 354 -1.2173609919776958 +33 354 -.24928628074940948 +35 354 .037156201284401676 +37 354 .0435560041784728 +41 354 -.0983605934384306 +42 354 .5387771715143368 +51 354 -.2410365951533771 +53 354 -.8486793204225056 +58 354 1.0647980125827696 +65 354 .7850880342304768 +66 354 -.9117836108615005 +73 354 -.7883618420403573 +76 354 .2863822102358742 +83 354 -.1561138473113123 +84 354 .6238668194985976 +118 354 1.5896790131181169 +123 354 -.6556246987352431 +132 354 .6164685039982086 +133 354 .31444506334974465 +147 354 1.2622081663971418 +168 354 2.0516017435204743 +171 354 -.17442542161153884 +178 354 -1.2446647624272378 +188 354 .936742488633486 +206 354 -1.0780173531847166 +211 354 -.8182087757737757 +217 354 -.10018386067603194 +238 354 -.38958992916694013 +239 354 -1.797295060713607 +260 354 .1952324088599574 +263 354 1.5441613709054631 +271 354 -1.364394896303855 +275 354 .19459210023896054 +285 354 1.1205429027758704 +290 354 -.4269340373784503 +300 354 .8359102463482346 +301 354 1.1695304759327982 +305 354 -.17951932336942747 +307 354 1.2133726791176211 +313 354 .46547903285478287 +337 354 .43788510873028186 +340 354 -.21423417019928717 +346 354 -.2775549744577753 +366 354 -.6708411220974281 +389 354 .29529026869298325 +396 354 -.32108250716822617 +449 354 .3249186343447101 +451 354 .21433420599525277 +464 354 .4027483325674447 +481 354 .6810328012770565 +495 354 -.6761123840233524 +505 354 -.4257578855568585 +506 354 1.8735400789672252 +514 354 .11413351463833404 +521 354 -.26913610986383796 +542 354 .3467842379624335 +552 354 .5118559443459995 +553 354 1.0981163962967475 +555 354 -.16416415968436499 +566 354 .12909998460834832 +567 354 .3925349026347803 +584 354 .724186895434688 +599 354 -.8007757254494893 +610 354 -1.2099931313626549 +622 354 1.3821125157677772 +630 354 -1.4179893724837718 +631 354 -1.684466060807616 +633 354 -.08584860286857951 +636 354 -.4913166968648885 +678 354 .20181492639050527 +697 354 .8373938476378098 +712 354 1.029318896605919 +714 354 -.7998604997857894 +732 354 -1.1319330156818765 +739 354 -1.132670375205124 +740 354 1.681161582995155 +747 354 -1.279179279610329 +751 354 -.014636087954129934 +753 354 -1.44825072571309 +756 354 1.4385318888393703 +759 354 .407006155927653 +770 354 -.9869888659144411 +788 354 -2.6153024259095714e-5 +800 354 -.7327488844123704 +801 354 1.1425851778218579 +803 354 -.6601574261931779 +805 354 -.87272810248464 +816 354 -.8196566154884789 +831 354 .9485860664365775 +845 354 -.4797029355886093 +861 354 .7075947966531476 +873 354 .48351589730129707 +880 354 -.5772298612380015 +884 354 .2306870567015162 +892 354 -1.7865217886820686 +900 354 -.23984417627628185 +902 354 -.3468456264759038 +924 354 .08375040396096867 +926 354 -.07966095248576464 +937 354 .38563006773088676 +939 354 -.031888330746871196 +940 354 .6707138815398084 +960 354 -.44647258397130657 +961 354 -1.0510683435286163 +965 354 -.924143283467515 +966 354 1.2772062909170991 +971 354 .20933326356762028 +36 355 .855857965957445 +56 355 1.9118740472862628 +59 355 -1.6344635020666372 +67 355 -.05107612076498849 +79 355 1.801166324446592 +93 355 1.6151785470049884 +102 355 -1.0628770985090374 +115 355 -1.5884122209720832 +123 355 .6041354613039267 +127 355 -.31716439003055164 +140 355 .26406376920515917 +145 355 .6759870887284063 +147 355 -.11157033148022316 +157 355 -.3365875493916659 +160 355 -.440541062658582 +165 355 .8837504720194367 +236 355 -.10754327801098056 +265 355 -.409914568552331 +266 355 -.9110119308015925 +282 355 .6303485691037355 +300 355 .06549722859846775 +305 355 .06676477883258625 +317 355 .16496347423366314 +324 355 -.7715166299555566 +331 355 -.06581363344512142 +354 355 .12810934403058882 +394 355 -.5338713232006838 +407 355 -.40243522294258005 +423 355 -.4580768448389875 +446 355 -.4990758147511766 +452 355 -.0021753000015941448 +481 355 .22718537127368235 +489 355 -.2775734104969241 +500 355 -.6327747173181733 +510 355 -.40643303537414743 +513 355 1.1307279580789744 +519 355 -.65909105293417 +537 355 -.8784925790498324 +539 355 .4540740772325007 +541 355 .9027740563194129 +544 355 -1.0330013792775952 +546 355 -.2686645641415548 +557 355 .46756874539298715 +562 355 -1.5421951017095183 +566 355 .28698491391485054 +574 355 1.1302387910901546 +604 355 -.018882479010456338 +612 355 -.2694854571405567 +618 355 -.9439325952049437 +620 355 1.0310420200514856 +663 355 -.24480316393520313 +667 355 -.5251762892027739 +677 355 -.14231452701600344 +685 355 -1.5166763182918985 +688 355 -.45917518513915423 +693 355 -.6706893215717338 +712 355 .3714161382880034 +723 355 .9436707316071409 +724 355 -.1665396579143423 +746 355 -.25425040950989075 +769 355 -.27778468612778684 +781 355 -1.1506882020898148 +786 355 .1049809337934687 +821 355 .17759701378303588 +836 355 .4344073078275067 +851 355 -.20230151876672126 +857 355 .3059376584070683 +873 355 .22391303621879907 +874 355 1.1626755325053852 +875 355 -.0018441428259931003 +888 355 .08229077783275925 +893 355 -.4870005087900649 +904 355 -.29846759990234784 +910 355 -.9305870583894622 +911 355 .1216476294368652 +913 355 -1.267305683962558 +929 355 1.7333041388294852 +934 355 .5713432574045769 +938 355 1.4416979056765176 +957 355 -.3103342333322869 +961 355 .37211612985779463 +966 355 -.6138253567496526 +977 355 -.4917377920030661 +978 355 -.8091059430302892 +981 355 -.6589843423957856 +993 355 1.0330190562498698 +15 356 -.25935115675080256 +18 356 -1.0542003722958015 +49 356 -.7322471824407015 +65 356 -.408312110873464 +80 356 -.28793861104165397 +84 356 .7624964761684465 +102 356 -1.225866252999041 +103 356 1.7464607480515848 +115 356 -.7358463216692721 +122 356 .4019147905212799 +128 356 .802461160518192 +168 356 1.0148074355292669 +175 356 .48104586771882496 +177 356 -.5626961131143395 +183 356 -.13875850271156256 +197 356 .19428070733869707 +212 356 -.2572998567916405 +214 356 .03927005464046762 +220 356 .5229308491994332 +241 356 -1.4180628613994655 +246 356 -1.3167982806249938 +259 356 .7189137365867652 +279 356 .6506650229544575 +281 356 -.8243270991131364 +284 356 .17536634910067286 +300 356 1.0214722449010971 +301 356 -.36281461284115823 +306 356 1.3764630149867059 +319 356 -.3922216738745129 +328 356 -.3789318564373818 +361 356 .04759530589135319 +365 356 .5485545625640975 +371 356 1.2436578918717733 +382 356 -1.0808532948155671 +383 356 .4144305723708682 +397 356 .18185422262647277 +448 356 -.9632555960272713 +455 356 -.028994155091782686 +461 356 -.10893835532365809 +462 356 -1.3487076273884404 +464 356 .6676605183577525 +470 356 .13393281228680626 +487 356 -.7319522450810028 +494 356 -.3498131816141445 +502 356 -.5040106273667139 +507 356 -.6881942712436673 +508 356 .07751964346107312 +512 356 1.5343293518293872 +513 356 .9758716922613304 +515 356 -.5596108719806394 +516 356 1.1447516137469265 +523 356 -.6517685828867021 +528 356 .7713843828528094 +529 356 .17366731756242038 +530 356 -1.6588605399903094 +545 356 .8751077617071237 +558 356 -.3443558927739465 +564 356 .8967440736297894 +576 356 -.5088128520573797 +577 356 -.43138590918015596 +589 356 .2554361813002937 +605 356 -1.2237578752217562 +617 356 -1.0163421504690127 +623 356 -.4192201794382916 +653 356 -.985694897967336 +661 356 .5775909045756024 +670 356 .7986404998635273 +675 356 1.5473339202837422 +704 356 -.40127689060084437 +722 356 1.696763561997333 +749 356 -1.148906797372784 +767 356 -.4976357885377075 +787 356 .899033497050449 +789 356 .8023458792032205 +794 356 1.7954373054167025 +810 356 -.860319502271826 +812 356 -.22674017218915532 +825 356 -.49525476407763774 +832 356 .0988290056688397 +835 356 -.8877426396573573 +842 356 -.211715734851041 +853 356 -.3302934981503956 +873 356 .7671167491953235 +882 356 .36006813361590845 +896 356 -1.1812928139622056 +899 356 -.06709796370591412 +907 356 .275509967088325 +928 356 .28824135890104247 +935 356 .5443219142187644 +936 356 .92885155349709 +941 356 1.2020062247767578 +943 356 -.15195284967211348 +952 356 .07531289278044292 +986 356 -.020799356094047948 +989 356 .5595812728002971 +998 356 .4383579769219167 +12 357 .3248834369446977 +23 357 .8262970484182108 +48 357 1.4885894456841295 +49 357 .1356467451611708 +64 357 -.8393654304848254 +65 357 -.8110925490727856 +68 357 -.5872158854380483 +75 357 -2.5484998425865384 +77 357 3.7773729295783096 +83 357 -.849414872303081 +89 357 -1.0641489741309826 +124 357 .4580336581916297 +126 357 2.110779356507811 +130 357 -2.3999208993410694 +143 357 .047504826109504 +165 357 .7874478503498037 +172 357 -.33318956711830916 +181 357 1.6023981367757236 +205 357 1.2681574639239857 +236 357 .6213239674550392 +244 357 -2.950534326410299 +262 357 -.6840202603103729 +272 357 .00875501788390197 +280 357 -.3115609634253607 +301 357 3.5921711143481807 +333 357 .6441390367643638 +341 357 .3467539265185226 +343 357 -1.6919411897314396 +347 357 .14835419558015378 +355 357 -2.760741017728184 +367 357 .14568423861274324 +383 357 2.129645598887461 +385 357 .03817944400935283 +397 357 .9955858276789606 +400 357 -1.2497338306621752 +405 357 -.07574916346471547 +413 357 1.900142406959377 +414 357 1.4215426346906403 +415 357 -.9555952554325496 +417 357 2.1642616990433425 +424 357 1.1229580292182175 +442 357 -2.0223984895863434 +457 357 -.7092396684214912 +459 357 2.4729109682788404 +462 357 .24215822975942802 +469 357 1.5201448606076335 +481 357 -1.306563801043436 +514 357 1.527960162193097 +531 357 .8939564083062274 +532 357 .021003760989951922 +541 357 -.3514359519072345 +557 357 -.5001094497641321 +559 357 -2.2810167152834793 +561 357 -1.4659582864274259 +563 357 1.5029192676044194 +567 357 1.3994322425377799 +574 357 .533032528893036 +584 357 -.685659286366193 +586 357 1.528828854406883 +598 357 -.5106746711165975 +600 357 1.1112067964614971 +608 357 -1.006782168031332 +635 357 -.24990240923327095 +639 357 -.3531764202235714 +661 357 -.5810069964331841 +669 357 -.7632317759056999 +715 357 .5732004597515353 +718 357 -1.595505680545911 +723 357 1.9789658898860332 +751 357 -.9452375918181393 +757 357 -.0702550109768093 +763 357 .02724323299884071 +765 357 -.4459090381505451 +767 357 3.575929796167394 +770 357 -.6502558180200382 +775 357 -.0005622876145957023 +783 357 -1.2259255005180123 +789 357 1.3507417086421942 +793 357 -2.1936457210018427 +799 357 -1.2133583574685542 +804 357 .25891686146765586 +814 357 2.251535062952032 +819 357 -2.1266601580675712 +828 357 2.6700664671696583 +829 357 -1.0253457102174428 +834 357 1.3690619811146565 +866 357 .9980249873924572 +883 357 1.3919648529092912 +899 357 -2.321251021933696 +902 357 -1.8814922428367646 +907 357 -2.3292641319093703 +909 357 -1.816515167784571 +921 357 3.4147567081486807 +939 357 -.04940181491303117 +952 357 -2.621339961672774 +967 357 -2.769597742014878 +987 357 -.2921301450266085 +6 358 .02296122517384598 +10 358 -.24040829883329953 +22 358 -.7580114851697269 +25 358 1.0783070650190707 +45 358 -.21700883216258685 +54 358 .5527204091769016 +55 358 .9300712916793525 +56 358 -.7897721017114914 +57 358 .42535976078183485 +63 358 .29767052899939545 +65 358 .43740716648956385 +86 358 -1.4306977961173941 +89 358 .14068202612827546 +90 358 -.48013796507663453 +97 358 -1.2900355365810827 +110 358 -.7275893759906454 +147 358 -1.1364696644583872 +161 358 -.7673401024214361 +184 358 .039257697679315036 +188 358 .5508803781583173 +203 358 -.7547325911102243 +205 358 -.6847142463074621 +219 358 -.031266522316647546 +221 358 .4203395292383123 +222 358 -.3529341713607318 +230 358 .996507735978039 +235 358 .6578021966204096 +243 358 .20488516950187072 +273 358 -.41657879076743676 +283 358 -.3039497176404972 +287 358 -.7496990428036401 +289 358 -.4735647351746248 +291 358 -.8180403137939235 +292 358 -.24897128768523125 +293 358 -.19322375420590876 +297 358 -.9536749621770221 +308 358 -.10768860051115155 +310 358 .6658367136192918 +321 358 .6653801291235077 +338 358 -.7518624023849694 +351 358 -.02919447927461795 +357 358 -.5580499911895985 +358 358 .7957347451882845 +375 358 -1.0036053241596246 +380 358 1.353128581089631 +384 358 .8776992895758926 +389 358 -.8289475293858701 +392 358 -.2046216257721593 +399 358 -1.3290511240175877 +403 358 .5776887271667199 +404 358 -.23327396173646425 +416 358 .16983416644459615 +420 358 -1.0892337575898545 +436 358 -.41828334815831963 +450 358 1.3686627176065895 +467 358 .8056038440206232 +468 358 -.6417516870561755 +474 358 1.5126320733641334 +479 358 -.6114841233889458 +492 358 .7266471682517427 +532 358 .17011498565183442 +535 358 .12559265632479516 +541 358 .8998723296782586 +543 358 .10222998441288442 +551 358 .4957381846348983 +562 358 -.7549366184115998 +575 358 -.9321873157240383 +589 358 .7192385764141505 +603 358 1.5350537161346085 +605 358 -.01829964415020012 +606 358 -.2804025610848792 +619 358 .12583145765199855 +620 358 -.10855255901612036 +625 358 -1.4282098008578723 +649 358 -.2438481210371818 +653 358 -.3535802756924276 +660 358 -.2484559268883677 +670 358 -.2989802011756134 +672 358 .7081007609401868 +673 358 1.1534351869865345 +685 358 -.5605894641512189 +690 358 1.0617377394614922 +707 358 -.8355447940099958 +712 358 -.9647763924416501 +732 358 .05309651203350571 +744 358 .8440419125049708 +753 358 .6732715763701606 +773 358 .02294842752156577 +799 358 -.8576355482373524 +815 358 .9204699449675884 +822 358 -.6850954069296875 +825 358 2.033369519984748 +827 358 .3809621769794686 +834 358 -.6692676305697721 +843 358 -.5853570108080574 +845 358 -.14161487289419394 +852 358 -.9059306512312483 +867 358 .35226033143675417 +881 358 1.0662926669318156 +882 358 .3368494609857011 +894 358 -.9467198783008426 +908 358 .7732766411027671 +920 358 -.22382309786810223 +924 358 .22891308700464083 +930 358 -1.1182583286116639 +932 358 -.09935572210964723 +948 358 -.8722085927043032 +956 358 .30035714765467547 +960 358 .5258406881060841 +983 358 .08548360495549562 +993 358 -.903491071783573 +25 359 -.9721971164196211 +39 359 -.7656326749472347 +46 359 1.172835044313934 +48 359 -2.233985383669487 +51 359 -1.2744780521642403 +58 359 1.0930486478565853 +63 359 .3611035082934834 +65 359 .050236681772543305 +78 359 .44236379805240955 +80 359 -1.7842764038547712 +101 359 -2.016511364715717 +103 359 -.10085672026245922 +111 359 .898089870693665 +116 359 .9775123929049478 +128 359 1.080174447045463 +137 359 -.3994705339209528 +166 359 1.087166055553081 +172 359 1.4074138417471864 +190 359 1.4479283795424385 +193 359 1.158348070496358 +216 359 .923877653355574 +229 359 2.2249801311250375 +230 359 -.5758934606020146 +254 359 -.199004002893236 +257 359 -.49940134762516153 +260 359 -1.0520371693133668 +269 359 .3264435794550854 +273 359 .9049689032995922 +282 359 -1.1363321006499827 +292 359 2.010157131760226 +296 359 -.7492388328520135 +312 359 -1.791419920771132 +318 359 .8660891305800675 +328 359 -.06931593839513861 +333 359 -1.0048011618358708 +338 359 1.1938935966951723 +345 359 .3501587620493818 +346 359 -.16501149392600833 +360 359 -.04971175192425434 +371 359 .2248231640106978 +377 359 -.4848233211194086 +409 359 1.1668056507882862 +421 359 -.5739479472589543 +430 359 -1.0278197585506768 +439 359 -.5999700044399394 +458 359 1.8216959691264787 +468 359 -.3979900042278091 +477 359 .6550524396553081 +480 359 .13311825819027712 +483 359 .3097377085170808 +501 359 .43702653997051505 +534 359 .2502717990926102 +536 359 -1.2480816192777227 +539 359 .65614938825392 +588 359 -.35506996112759015 +615 359 2.7133415515390644 +628 359 -.04674106554810312 +631 359 -1.782017530161559 +642 359 -1.1868456667056748 +649 359 .776799056100867 +650 359 -.33592088295714184 +658 359 .626829591902732 +696 359 -.2605063082436875 +727 359 .6629575233717437 +732 359 .7234458726625899 +756 359 .9492053656342794 +762 359 -1.6359301024297923 +764 359 1.345118197300427 +769 359 .8966964957762931 +784 359 .16718486799346155 +789 359 .5142817019861403 +795 359 1.2218886133757858 +797 359 -2.133421267881127 +822 359 1.1654709773658511 +826 359 .8123798547406781 +848 359 .9720506907914402 +850 359 -.5615014379230292 +856 359 2.0236970044237106 +858 359 1.798966843832947 +865 359 .22796975038941297 +875 359 1.62245590856173 +882 359 .0801510946284208 +885 359 1.3183704452294147 +888 359 .9515413939298542 +899 359 .9771839625467076 +942 359 1.0569892648806378 +946 359 -.8849249961102876 +992 359 -.7276036219444261 +998 359 -.8984616242462264 +2 360 .1497844466879482 +11 360 1.2257865906831644 +19 360 -.5207800490249459 +35 360 -.3733106897586164 +41 360 1.0774667159176547 +48 360 -1.5287392094073153 +90 360 -.1284395431922836 +105 360 .40913016174920974 +106 360 -.6795814816845774 +108 360 -.8631133740506328 +118 360 -.8080126798948242 +126 360 -1.190376378495279 +128 360 .901849874714987 +164 360 -.945358842105836 +172 360 .7340428859476578 +173 360 .635304496538297 +205 360 -.9029583476859895 +230 360 .37690631715583467 +233 360 .0972708374818666 +234 360 .8260815683162492 +235 360 -.09937198336241782 +238 360 -.22032996236840888 +245 360 .831642631382939 +247 360 .39265647136605947 +250 360 -.4096697052230342 +294 360 -.13026793514808768 +297 360 -.026582724671295993 +306 360 .31170678341035213 +338 360 .6841968501162783 +344 360 .12309417003282344 +351 360 .5427571776495735 +379 360 -.5421050143950032 +380 360 .5519148110538173 +393 360 -.6550352691752654 +409 360 1.1938194602346661 +416 360 .28012885588614256 +420 360 .6102863078859257 +422 360 -.26446672612772226 +434 360 .5698639684574041 +441 360 .36205044735415437 +455 360 .670553026987439 +473 360 1.0579179308080633 +474 360 .6720737000111168 +477 360 .5323779760243732 +479 360 -.2160195653378548 +496 360 -.5084957338389564 +500 360 -.6145014053115933 +504 360 -.49715622685225574 +514 360 -.36584358609093975 +523 360 -.27437811250346683 +527 360 .6643930521246125 +546 360 .4498113575151998 +548 360 .40815777104958323 +549 360 -.43203232307666534 +557 360 -.5247731439691147 +562 360 -.1126634524154298 +564 360 .6222980658761509 +571 360 .7592154616490784 +579 360 .676865328701747 +592 360 -1.249803620340863 +595 360 -.1549799135396946 +617 360 .4174876997371608 +619 360 -.46795772011097536 +646 360 -.471088427252238 +655 360 -.115152065222251 +662 360 .6948790648035258 +678 360 .11229070304755698 +682 360 -.20620538074910388 +701 360 1.2627742499795673 +731 360 .3430876852235909 +754 360 .8139296717558996 +769 360 1.0336637314798494 +773 360 .2821092134633893 +805 360 -.2022252172665297 +830 360 .12503196569807162 +838 360 1.3864165805750208 +839 360 -.4029791174744462 +863 360 -.45707332664054445 +871 360 -.2981817754007503 +872 360 -.7854580222968539 +883 360 .311212545821966 +893 360 -.13626446677398582 +902 360 .18570037735153538 +910 360 -.8618201425303376 +915 360 -.1000237701652891 +955 360 .7908490166305954 +963 360 .6639855628060969 +971 360 -.7235150736507424 +986 360 -.5776587186349204 +991 360 .24237151578359392 +996 360 -.55379970596519 +4 361 -.6315548526905497 +15 361 -1.9784240481496624 +21 361 1.0633605193555622 +25 361 -.4833395388780394 +35 361 .42555042840598806 +53 361 .6041249636744418 +95 361 1.1027124224502052 +108 361 -.6452590759319465 +124 361 -.002764673425218786 +125 361 -.545407310540476 +137 361 .18149481035669474 +148 361 1.926223598671704 +149 361 .905850487223732 +151 361 .8289336922264271 +175 361 -.2519648685534888 +190 361 -.9304487297142208 +191 361 .07713433128191707 +195 361 -.2260131063942024 +211 361 1.2509429399784813 +217 361 .5603361375636783 +218 361 -.4438641477348044 +237 361 -.8981507630115158 +245 361 .04204208802375799 +254 361 .5174234348033335 +255 361 .7327055702648275 +266 361 -.7245867650485449 +268 361 .5697731382645228 +270 361 -1.2285745316525951 +289 361 -1.008842403216452 +294 361 -.05465820198358459 +306 361 -.009046497596134906 +312 361 -.5841516953364775 +322 361 -1.2927175606422936 +326 361 .770276577623591 +327 361 .14546729836486966 +334 361 -.1859840047581736 +340 361 -.43146177919568945 +349 361 -1.5253955886666903 +353 361 .20064216513653788 +354 361 .9429186138236101 +355 361 1.8678612364171239 +375 361 .21766536494351751 +377 361 1.4515099684436272 +384 361 .26582549593852645 +388 361 -.8666193322146245 +389 361 .0013446230473176946 +397 361 -.44220337886055694 +402 361 -.9592451054284905 +442 361 .6806889964163546 +475 361 -.1218400090850513 +491 361 .9435004704374121 +494 361 .14882590448995808 +501 361 .5682753345671707 +502 361 -.29854716777398865 +514 361 .05259423673380306 +528 361 -.6007319564992096 +546 361 .5373419354142992 +549 361 .037274201602280996 +550 361 -.036210207033254976 +565 361 -1.5064683373398644 +568 361 -.1818674539686005 +571 361 -.5703814443468738 +572 361 .3963924435977667 +588 361 -.829653909831357 +590 361 -.1997536538494975 +593 361 -.23407144890955445 +618 361 -1.6333235671691433 +620 361 -.3305111697975505 +627 361 .6537902564660641 +642 361 -.24111902903231328 +647 361 .1702120376327984 +651 361 -.2819413338676593 +654 361 -.46454817010096594 +687 361 -.4818703067472073 +706 361 -.34474226268106367 +742 361 .044851183892403446 +752 361 -.9611055682088805 +754 361 .41404015009392525 +756 361 1.010071371355024 +757 361 .417392852492642 +762 361 -.6978576889420192 +769 361 -.10901956203085816 +780 361 .4298017619509522 +792 361 .7992480998444228 +795 361 -1.3248582119679488 +798 361 .8818444464970645 +815 361 .41356673243253966 +817 361 -.7426818367143805 +826 361 .6421219411043133 +830 361 -.6874287489403326 +835 361 -.8222997309308041 +842 361 .6125911925726564 +845 361 .1712766931963849 +857 361 .257186117504586 +888 361 -.2280139918922873 +891 361 .5727534687257518 +893 361 -.5537917155076572 +903 361 -1.6091468394010442 +922 361 -.8442537099281671 +927 361 -2.09924342268433 +937 361 1.106633313522168 +962 361 1.307598997398877 +966 361 -.1383853633781089 +974 361 -.4132600562950071 +981 361 -.4527547362363875 +990 361 -1.0647611124845793 +994 361 -1.222406262271339 +1000 361 .009788010641084643 +4 362 -.6181900291571427 +11 362 .2925661037725356 +24 362 .47331042438421295 +29 362 -.314501900207125 +64 362 .40840914370289105 +82 362 -1.1076803377877058 +95 362 -.5013713562552512 +105 362 -.6420406232020354 +122 362 .27619499373727874 +125 362 .5043192616964323 +129 362 1.1206633241477615 +161 362 1.1892578329396686 +162 362 .024075162486694092 +175 362 -1.5646195153719547 +202 362 -.5325649622599643 +204 362 .32243016649786266 +212 362 1.377372661408072 +223 362 .16378936198255692 +224 362 .7390366280741056 +228 362 .20808150849370446 +231 362 .5003605133296152 +241 362 1.5586393115194341 +244 362 .37521331832270144 +252 362 .8580588866277543 +255 362 -.7305640677658692 +264 362 .38029301016520567 +275 362 .46587709664000077 +284 362 -.5211626731275849 +311 362 .15999182685048263 +314 362 1.116275053427851 +329 362 .09216664620040434 +335 362 .8157143434228818 +353 362 -.5727325167414095 +360 362 -.6427480370229014 +378 362 .7420897011459472 +389 362 -.16442570566249823 +398 362 .42170531279875084 +428 362 .2266636402595659 +443 362 -.7022068896562811 +453 362 -.7279939583183747 +465 362 .00559117031566439 +489 362 .39334876269953445 +493 362 -.6250265447882051 +505 362 .8106396313128488 +509 362 .2535428948382775 +523 362 1.132598259293196 +528 362 -.7308975027160851 +541 362 1.0360558959998252 +558 362 -.3315220334719427 +566 362 -.0930616537438354 +572 362 -.7920587550370816 +584 362 -.9300773297658187 +592 362 -.07033217859904344 +593 362 -.538504846871964 +600 362 .14043366040418648 +604 362 .21396047827026474 +628 362 -.38618333846942743 +634 362 1.9989923869611899 +644 362 .5390642447860559 +663 362 .24590486267050465 +678 362 -.3585265678027078 +681 362 -.7059699052416802 +689 362 .154808977424779 +690 362 .6252589612685495 +712 362 .6256404333994624 +716 362 -2.206742132684142 +724 362 .02109989906797994 +725 362 -.259407659389081 +737 362 -.47633739731236463 +750 362 1.2122946506477876 +752 362 .6917483195924228 +756 362 -.756039834265669 +770 362 1.6274498014812007 +771 362 -.8060911050574288 +788 362 .1286580688150168 +795 362 -.24338842630892343 +804 362 .24739543941311004 +821 362 -.44831474191108384 +827 362 -.15833651719386235 +836 362 .3599283008395744 +837 362 -.5877287991446892 +840 362 .6554765142435729 +852 362 -1.8322830688214848 +877 362 -1.3161835632649144 +901 362 -1.7673271444631906 +906 362 -.5465624796306876 +908 362 -.7232064014588979 +915 362 .2029002982478117 +922 362 1.7932317247527614 +932 362 -.21979665966719225 +935 362 .5175104883652824 +956 362 -.9531300819832051 +960 362 .5312136581234695 +962 362 -2.0935954297332584 +972 362 .30396851796101076 +994 362 .27876189865304946 +995 362 .06944540227705154 +4 363 -.7240085256227315 +6 363 -.40423742077602753 +30 363 -.02061147105392984 +44 363 -.13764959616163097 +46 363 -.5939183380963486 +50 363 -.23360044431375632 +52 363 -1.43941173675145 +56 363 .790393776646222 +70 363 .5451596581735219 +73 363 .8690736265503083 +76 363 -.2976806239492571 +102 363 .8174799970154474 +112 363 .2879676624251963 +114 363 1.1626540614619638 +130 363 .23249601157535768 +132 363 -.5040868216177672 +134 363 .5261617780601731 +144 363 -.6582729787717866 +148 363 .8619129913231314 +155 363 -.32566341357249295 +183 363 -.43385657690071777 +190 363 -.5835028204342887 +207 363 -1.053603271415553 +208 363 -.019540414937974135 +232 363 -.7426253058827834 +245 363 -.9882586797390839 +280 363 .029003609858391868 +292 363 .15534285450885238 +295 363 -.2701846928028236 +301 363 -.6756111058327764 +302 363 -.723350209066689 +309 363 .9124521375504363 +312 363 .15867721695267334 +320 363 -.09200419998257289 +323 363 -1.0337598863526916 +328 363 -.02466763734529596 +345 363 -.07986291113312591 +363 363 -.136555689049642 +369 363 1.0543228955642399 +383 363 .41832912165554886 +396 363 1.2013616794112345 +406 363 -.9300191810491452 +407 363 .06279883306181024 +414 363 .33882973173027486 +416 363 .48352261466975466 +436 363 -.36311678173203155 +447 363 1.0842698164004463 +502 363 .24323789004152202 +506 363 -1.00590477453134 +511 363 .33456008233379453 +512 363 -.5051327190598239 +525 363 .08500666331280408 +531 363 .36416546393775034 +551 363 -1.6599999990744705 +554 363 -.026039223469572208 +566 363 -.01992714096184399 +571 363 .10538629193058192 +579 363 .46748735533734853 +581 363 .4759978744900727 +588 363 .18039733221307824 +591 363 -.7264837025418867 +592 363 2.2429745381861124 +605 363 .6756782617561188 +609 363 .35216399876653876 +620 363 -.039197236881661206 +645 363 -.17784804998677867 +646 363 -.11852436564332916 +654 363 .656510746633003 +661 363 .5943756810313763 +670 363 -.46333691880264766 +682 363 -.959644913639752 +696 363 1.4145383427942617 +699 363 .5398343458517133 +714 363 -.40168789231131563 +717 363 1.6916994783498018 +725 363 .020936920121487596 +732 363 -.016857920571182544 +737 363 .3688062790598471 +744 363 -.8159132011687529 +747 363 .18818776565115114 +748 363 -1.4021125993351236 +754 363 -.7995778910876689 +763 363 .5158801069183364 +765 363 1.3791044081704402 +784 363 .26106065454033156 +785 363 .31885297993788775 +796 363 2.021447638214575 +800 363 .4405539147468306 +804 363 .21632962403658745 +811 363 -.07144927988703839 +813 363 .40795972844001016 +818 363 .2365475032055877 +832 363 .6442064456257193 +840 363 .3505245074814989 +848 363 -.6045528436268496 +883 363 -.09832795861070212 +888 363 .00558791053807417 +899 363 -1.5452254880068064 +900 363 .25289155875965785 +901 363 -.6504670911811652 +908 363 -.08067766456236414 +909 363 -.3817441719862029 +922 363 -.3161857918497597 +928 363 -.7643680297793312 +934 363 -.08033927508802044 +939 363 -.16869811804967227 +962 363 -.9519622037160708 +973 363 -.5716795486352132 +981 363 .2331992478485519 +987 363 -.6579224154700745 +992 363 1.0243936356478307 +993 363 .731200008975351 +7 364 .24432239455444982 +18 364 -1.0860468627022937 +33 364 -.4658260836231028 +35 364 -.6220239027016994 +40 364 .08999449012824426 +41 364 .4866547683736496 +46 364 .5682543413099457 +65 364 .1401988967039845 +103 364 -1.6224598209214447 +107 364 1.2334472982885518 +112 364 -.08711512705000123 +116 364 -.6240486140572952 +125 364 -.17059345845997173 +130 364 1.2031385045185792 +137 364 .5858161720996746 +150 364 -.7706434307050506 +154 364 -.4115909663087255 +173 364 .8984720435834499 +186 364 -.7333096360976337 +188 364 -.6569279446170897 +193 364 -.6362208097803334 +195 364 -.5379502737604012 +204 364 .3702794940457598 +213 364 .12132160877275741 +228 364 .7917005107476164 +231 364 -.3917712430804673 +239 364 .4271126809935785 +249 364 -.7341015009097696 +250 364 .1426698428554833 +267 364 .032969296333687614 +270 364 -.34517566857407583 +281 364 -.7191934565547452 +287 364 .092798121970076 +299 364 .39281299366172956 +303 364 .9239476901287546 +309 364 -.6762565113038296 +328 364 -.22338132816035036 +341 364 -.3667306734192073 +352 364 .48232341736497314 +372 364 .39371161362157564 +373 364 .3907793303510845 +386 364 .09675508683156796 +394 364 -1.1425894722565937 +413 364 .4102888561081336 +418 364 -.4886819546598199 +432 364 .5547577962592869 +435 364 -.6778775047841787 +442 364 1.7096453232038056 +447 364 .6485862480289966 +452 364 -.8831756258573208 +473 364 .4599330372384797 +475 364 -.018009570016951703 +483 364 .4058149163395105 +484 364 -1.8577896386685768 +493 364 .06096871530282724 +495 364 1.2800029949827194 +500 364 .045837723053594834 +501 364 -.9376349178798303 +505 364 -.34676740387521765 +506 364 -.8025971798709647 +523 364 .78133243515679 +545 364 -.09463620922086335 +547 364 -.1778433224444754 +552 364 -.5036990953354978 +553 364 -.4993756963498419 +563 364 -.4408718272062198 +588 364 .017598750099535633 +592 364 -.09286142292243871 +599 364 1.4192169645325585 +617 364 .5562463971716564 +626 364 1.6179370641981563 +632 364 -.11261182538231745 +653 364 1.3288962270683982 +661 364 -.7429403568164051 +668 364 -.5581797661518368 +672 364 -.6097986803478905 +696 364 1.2673259813331168 +700 364 -.4932678228756815 +704 364 .6317471568095964 +719 364 .4223364212050629 +738 364 -.020812226282809126 +755 364 -.06775909233736092 +757 364 -.582578879374805 +769 364 -.5949772425467735 +771 364 -1.09389535228468 +792 364 -.38763318429675464 +799 364 1.2900724023335282 +802 364 .12958720946281008 +803 364 .7031234553237029 +814 364 -.408316871036918 +817 364 -1.489968008391892 +819 364 .1508645764066418 +827 364 1.0937454858528637 +833 364 .8722639752133858 +838 364 -.03322342430561622 +845 364 -.8427938389097519 +849 364 1.4206964951883496 +855 364 -.1820076066256136 +881 364 .03292891098359423 +883 364 -.19549667419620917 +896 364 .15579690995821388 +897 364 .30749127000542653 +913 364 1.1196671876929696 +914 364 .9134246986178931 +916 364 .20438025925943656 +923 364 -.552106984460356 +940 364 .3512406768335465 +984 364 .24778138348531437 +11 365 -1.4747653842361979 +27 365 -1.6157823218289884 +32 365 1.287430891408483 +47 365 .5572224410222767 +57 365 -2.0020663857590395 +70 365 .6577140900957361 +77 365 .6061545498384996 +88 365 -.9181745214026376 +101 365 -1.324799918056716 +111 365 2.139114233547678 +115 365 -1.2345917594821776 +116 365 .2772528927392051 +117 365 .10260043634180285 +124 365 -1.0163333692191487 +145 365 .3649696863528605 +148 365 -1.5552147873658326 +158 365 2.762147053541838 +167 365 -.41188334204152777 +181 365 .39693377126014123 +197 365 -1.6030456155792634 +206 365 -1.9728113367158622 +217 365 -1.6186234568744386 +243 365 .24639499647083035 +244 365 -1.7903259426213693 +250 365 .11842871459534288 +254 365 -.9660293548345668 +264 365 .7635579235148856 +272 365 2.4334474711189165 +297 365 2.4630447458328857 +310 365 -.7466007648233557 +312 365 1.7452873854741717 +319 365 -.3840733839881726 +343 365 -1.5064462373703247 +345 365 -.45849223717806564 +349 365 .8244196157089261 +355 365 -1.7283405188282654 +361 365 1.2438847944692593 +369 365 -1.9621292320572337 +381 365 -.2100898986057192 +382 365 .29533168271301335 +388 365 -.42996493458235074 +415 365 -1.9524322452118434 +422 365 -.8857139687300595 +438 365 .9819039887821203 +440 365 -.7673770840096203 +445 365 .49873949344887497 +449 365 1.0284125986301365 +453 365 -1.4846146883769593 +460 365 .2952927510764664 +462 365 .6253050024480945 +465 365 1.096924586210096 +469 365 .6818437582791119 +470 365 .4488495239959144 +493 365 1.032184612991284 +496 365 .1423971217784224 +502 365 -.35828518777485086 +512 365 -2.0403018859103557 +534 365 .7443683038358765 +554 365 .6159676527131611 +574 365 .01337062042311836 +577 365 1.6596525235049626 +585 365 .01888978274211385 +593 365 .15763478454082597 +594 365 .5034575336785252 +601 365 -1.5383457194599879 +605 365 1.9046551967381853 +607 365 .23675942999852834 +609 365 1.9792663692650627 +631 365 -.6340608282881522 +635 365 .8816370964453345 +640 365 .06727390000422011 +647 365 -.4410369394923678 +650 365 -1.3614153449856181 +653 365 -1.292152130817668 +659 365 1.8398125371699838 +674 365 -2.6557912596259436 +696 365 -.43120084575459694 +701 365 -1.6882147330423933 +716 365 1.875460681201528 +725 365 -1.5329463265586496 +729 365 -.08582547381427641 +735 365 -.33904355636603384 +738 365 -.8767925466409918 +741 365 1.0322568787190405 +746 365 -.4254417087869956 +769 365 -.21730318459632791 +774 365 .3966494613225443 +794 365 .9558145496842316 +795 365 2.25819861244464 +810 365 1.5555397834848061 +829 365 -2.008039237289534 +839 365 .4961351944182733 +842 365 -.8375468492901696 +855 365 -.0255447757271947 +856 365 -1.0697127184934487 +866 365 1.6727036666888673 +868 365 -2.4537626013761047 +876 365 -.1639273911664382 +884 365 .6210278622972473 +888 365 .3655088918510852 +905 365 -.7891368708581783 +910 365 1.2099311566377098 +911 365 1.138246307140496 +912 365 -.47588021438858646 +913 365 -1.4971348010884982 +914 365 -1.252233910061041 +929 365 .30835244767015274 +933 365 -.9698081072048883 +936 365 .7187540726472488 +961 365 -1.0671733448066403 +972 365 -.24073127909626907 +976 365 -.004603496864409806 +2 366 .7531194264065793 +13 366 .35988926735725824 +17 366 .7939979781433224 +39 366 -1.23054408960383 +43 366 -.4042970248252341 +53 366 -.8479272530389508 +81 366 -1.0609497079954202 +96 366 1.5599075717528745 +115 366 -2.7086772459347253 +116 366 -.574541200615563 +117 366 1.9366181226110124 +120 366 -.7120474805902636 +155 366 -.7648504043566233 +158 366 -1.5734827705352787 +206 366 .5377634816446761 +226 366 -.05912343579443036 +275 366 .5327512132536553 +301 366 -2.292860515342148 +305 366 -.7863200398214787 +308 366 -2.2128335870706386 +320 366 1.443141645593096 +345 366 .924712913339856 +348 366 -.8334185809410173 +361 366 -.025402124767260593 +370 366 -1.186442969375287 +375 366 .884737385094424 +380 366 .2608200662333564 +396 366 -1.2581376737392866 +397 366 -.3954121644166431 +405 366 .5549696638316809 +408 366 2.2528674884126607 +412 366 -1.2851865528718318 +419 366 -1.3031958616821857 +421 366 -.5273031853075592 +423 366 -1.120869398416746 +434 366 .8340300402256232 +446 366 -.8459253189224202 +447 366 .941256626208239 +458 366 1.9739609019945719 +463 366 .5674707477013392 +505 366 -.7511320399274425 +506 366 -1.6864293463123168 +509 366 -.41117578064143623 +517 366 -.5302693971371885 +533 366 -.0026705771119400756 +555 366 1.1607194985022313 +557 366 1.2208820659112383 +565 366 -.13158601896633254 +574 366 .6968455430248403 +579 366 .9526120085525389 +586 366 -1.7413491717463578 +587 366 1.8515372650501485 +590 366 .13119042210730664 +593 366 -.26147529189818 +596 366 -1.6827003452240628 +601 366 -1.151329874322686 +612 366 -.6258668194227222 +632 366 -.5809085239723564 +633 366 .31829872282103416 +640 366 -.246775925186773 +678 366 .1254601487484108 +687 366 -.6153191437176073 +705 366 -.6111227964300904 +737 366 -.7053462964474047 +755 366 .13376677567296769 +782 366 -.5270499138751406 +792 366 -.5140955325895789 +802 366 1.4557696006177578 +808 366 -1.0417125500210822 +816 366 -1.126277054214842 +818 366 -.44955435782407394 +823 366 -.742527696446836 +825 366 -.7870242766387703 +840 366 -1.6313885222974942 +871 366 2.6319561743872733 +872 366 .63782153586306 +878 366 .7663028492754351 +885 366 -.8264138533167042 +888 366 -.6697016410060869 +903 366 -1.5010475147928066 +908 366 -.4727276095741602 +934 366 -.7596450351553549 +943 366 -1.281796598328358 +946 366 -1.7560099482009166 +963 366 .7211338268844507 +967 366 1.1727751545242986 +974 366 1.7316647636099278 +980 366 .46149937409756125 +981 366 -.47444407337184136 +985 366 .297897794725439 +986 366 .12186323282794884 +996 366 -.9519533063224895 +1 367 1.6430863053903955e-5 +25 367 -.43483211414938533 +28 367 -.5848972300999788 +29 367 -.32594230198295393 +32 367 .4828907145545922 +34 367 .058145443890477766 +51 367 -.36421890924708894 +54 367 .43457894843272593 +59 367 -1.5077746985082285 +67 367 -.023922369443422797 +75 367 .6865262056020531 +76 367 -1.006382839493304 +81 367 -.9146740858116313 +115 367 -.8211319245583093 +120 367 -.16445777286489172 +133 367 -.509386112204321 +155 367 .37685776596779064 +164 367 .2994673447070516 +172 367 .6320980201722143 +175 367 .7437359425548429 +178 367 .393546692490897 +180 367 -.803746914793275 +185 367 .6194683069175284 +208 367 .005061182346683041 +231 367 -.3775329125218533 +244 367 .9612712457956822 +277 367 1.4942064036543035 +294 367 -.4077609981941643 +299 367 -.13533147158908468 +303 367 .17166118398656008 +309 367 -.14780536490158036 +313 367 .9104972669287344 +325 367 -1.0250366446248382 +378 367 -.19342738045616242 +382 367 -.4953856653818085 +409 367 .9917578689497352 +419 367 .12750080411993198 +420 367 .23997343183947617 +431 367 -.06721289313506375 +435 367 -.5825241314576112 +445 367 .3527734008228687 +457 367 -.4783640397896866 +475 367 .3734774349512578 +493 367 .7823873523371547 +498 367 .5688801281456697 +510 367 .12948885988752712 +523 367 .8220369351713364 +555 367 .8041035233159688 +570 367 .7066190165675275 +598 367 -.17759625475780058 +603 367 .10106495715643347 +610 367 -.21252015261278173 +613 367 .1719687352675204 +617 367 -1.4494662336214224 +628 367 -.5833045213980401 +633 367 -.7850203617258118 +635 367 -.5273543878101502 +641 367 .011269586862218045 +653 367 -.07566927306711026 +676 367 .04482453446847383 +677 367 -.14582877290646235 +680 367 -1.0188004691299397 +685 367 -.37770470261674066 +690 367 -.7252990432738087 +699 367 .2557980939438839 +716 367 .5685296724593666 +722 367 -.10317349852461546 +733 367 -.2251514417330035 +741 367 -1.2572860643600705 +757 367 .3274573931996496 +765 367 .12179581532061574 +800 367 .3612793060205379 +824 367 .20072319904661057 +841 367 .578944403933989 +842 367 -.5048657455205836 +853 367 .5743526657210155 +861 367 .42293668945408436 +866 367 -.1983668126782961 +875 367 .4873172817865418 +883 367 -.12530943592484037 +888 367 .20712983822378417 +897 367 -1.0753080657880898 +904 367 .30246742269278837 +922 367 -.204513930408064 +925 367 -.47188311195747684 +927 367 -1.3620251429193044 +928 367 .4943923603210465 +948 367 .46227568923278717 +959 367 -.2874945429304031 +962 367 .35378147871391763 +995 367 .07313542644264517 +1 368 .4386020514173894 +48 368 -1.6112506037182022 +52 368 .16879628880259478 +56 368 .554902904869205 +66 368 .9955315241610847 +84 368 .06825668831216108 +85 368 2.6315356274019077 +88 368 -.1586665043667806 +101 368 -2.22172469510329 +123 368 -.26410505661694816 +131 368 .06286951446455757 +136 368 -1.3475943872739318 +141 368 -.6971642007457884 +144 368 .5798787116157547 +158 368 .6263030669610202 +160 368 -.9055454558231574 +180 368 -.6432738125392947 +191 368 -.3478482249900453 +193 368 .8091776739950559 +199 368 .9038718833986152 +200 368 -.2920149778701192 +204 368 -.2468181507848365 +210 368 .004142535984941964 +221 368 -1.4972296218423193 +229 368 .507209098086786 +232 368 -.18726767144759615 +245 368 .37597705962078304 +262 368 -.40690716518867065 +263 368 .5129932869377348 +272 368 -1.2389336948410445 +290 368 .3848193046214391 +292 368 -.05934802557814617 +296 368 .39900132590366494 +302 368 -.4412351327896761 +304 368 -.04167963620055582 +347 368 -.10363221147532979 +350 368 -1.2180238771360223 +355 368 -.7347554499701392 +365 368 .9276756709420838 +371 368 .008980053948341924 +374 368 -.302863032362375 +393 368 .0007973931376309418 +400 368 -.4626421948434897 +410 368 -.5886942230022897 +466 368 -.49484165875479047 +468 368 .4564281033564525 +472 368 -.3542623902952608 +475 368 -.024115009400173942 +481 368 -.02145458112138235 +489 368 -.14449915915231254 +503 368 1.6367181998484535 +511 368 .12644640178881833 +519 368 .3754502043748353 +527 368 .7000995903494136 +560 368 .685713092788933 +566 368 .018047530990390054 +572 368 .5047817126477072 +584 368 -.9280010887397044 +607 368 -.6817654590480154 +637 368 -.5499034393770216 +645 368 .32618191366284305 +651 368 -.9244674932538772 +654 368 -.19371274437503683 +658 368 -.07291217819428829 +659 368 1.0102084263115625 +664 368 -.03991430035719745 +665 368 -.07968799618684586 +675 368 -.43831680178950594 +681 368 .5131187598275726 +683 368 -.023808557491892868 +685 368 -.21720929019444904 +689 368 .3586274895364081 +691 368 .24452981545433738 +701 368 .3553481025221441 +707 368 .16498572220142474 +714 368 -.5100918829636975 +716 368 -1.018192545153476 +725 368 -1.1558841272413762 +747 368 .4427397162766711 +752 368 .814142384116253 +763 368 -.9235636709963442 +781 368 -.8419403797960984 +783 368 .304237874535844 +788 368 .698774215171184 +801 368 -.5831921089833403 +803 368 -.8176012103267196 +813 368 .8536504190847835 +827 368 -.7326079137876318 +845 368 .23898178342711274 +866 368 -.34607745469953066 +875 368 .4078390945866751 +879 368 .17440064897260854 +896 368 -.5945077193808639 +900 368 -.5529493548275576 +943 368 .5906704107848183 +945 368 -.9775946617588016 +13 369 -1.1225477131937238 +16 369 -.16220449930483072 +23 369 1.3371541387912227 +27 369 -.5447176906799024 +67 369 .20854427635190856 +68 369 .5905519001760559 +74 369 1.2349436743707063 +85 369 1.8821095417173204 +102 369 1.2056719472492854 +114 369 -.9336834211202798 +118 369 -.6276255902578852 +149 369 -.130357845184131 +153 369 .541623781892414 +166 369 .4016143547737717 +174 369 1.4999872777070806 +185 369 -.6194263443489896 +203 369 .09067256047003996 +214 369 -.579195185349237 +215 369 -.5160104616176994 +223 369 -.49906202405149025 +232 369 .23253306300831708 +252 369 .26355771945849255 +270 369 .48755252549794925 +272 369 -1.8138310166447877 +274 369 .25765401316545244 +279 369 .5282759043114214 +284 369 -.9679570856868807 +285 369 -.39113192297469934 +296 369 .9737835981128209 +320 369 -1.68128248645913 +326 369 -.6346874042762513 +327 369 .20568534337362485 +329 369 .3058005064964274 +357 369 -.03698861247665648 +358 369 1.8708528644795357 +359 369 .7784308920126988 +364 369 .5588999030235811 +368 369 -1.1327647605470073 +372 369 -.2948311811413779 +377 369 -1.271942419461161 +390 369 -.41783811066037646 +391 369 -.17588136822696576 +396 369 .6189117595487278 +397 369 .03312966761274766 +399 369 -1.5947504359978102 +404 369 -1.4954881871533237 +416 369 .6033203360875369 +419 369 .974330180388371 +432 369 .9019187746104784 +444 369 -.14321146264865386 +457 369 2.155494349083079 +460 369 .6732914134193527 +462 369 2.2085843065978867 +477 369 -.844510708733039 +495 369 -.34774563935902736 +501 369 .03454569125882676 +507 369 .2757285341004338 +521 369 -1.364139109151291 +529 369 -.4865487984830273 +555 369 .7280451650622018 +567 369 .03556913840888114 +569 369 .6843203126144007 +577 369 -1.1814080053157276 +583 369 -.057118862433886766 +590 369 -1.2381160098298294 +592 369 -1.59982854869096 +599 369 2.746540777375474 +612 369 -.9400021825085585 +642 369 .16298560752598687 +649 369 -.01411654663457576 +651 369 -1.582492536512606 +662 369 -2.071475223968996 +669 369 .18751382150090895 +683 369 .5148499879758732 +701 369 1.63751981106769 +712 369 -1.0296406826596245 +716 369 -3.0324475693322794 +769 369 .6255005619438068 +777 369 -.27020506999675714 +784 369 -1.3309469413695012 +789 369 -.5646232439145064 +816 369 2.3579885035229524 +817 369 -1.6958631406842226 +821 369 .026111927825584746 +825 369 .6881941861460059 +831 369 -1.4236902962405515 +833 369 .8034262860168727 +877 369 -.542192887217158 +901 369 -2.0077645824512835 +938 369 -.0794513949178315 +948 369 -.34702867907796964 +970 369 -.9993441364252941 +971 369 .09999670483271267 +977 369 1.0035795280980448 +988 369 -1.4445443974256267 +993 369 -.7218542205115711 +3 370 .26591432915250907 +20 370 -.43929970456305667 +25 370 2.7603011100247157 +29 370 -.4439802929627654 +61 370 -.7240463434673933 +63 370 .21729006273388923 +68 370 .6506005271003356 +87 370 .41765997703562574 +91 370 .6251147657679809 +93 370 1.5514210778573385 +95 370 -.6023132897747332 +118 370 -.8043596417838104 +120 370 .8019636531014974 +127 370 -.004661251691148338 +150 370 1.706859928977404 +176 370 .9320778199812733 +188 370 .8689650558689462 +202 370 -1.3228648295710945 +218 370 -.7192699443042975 +227 370 -1.6522402140292547 +233 370 .5034206828176051 +243 370 -.5303389941479952 +244 370 -.40785706455223564 +259 370 .8344825797215367 +270 370 -.6132298311281523 +312 370 1.0741393849375078 +318 370 -.08205703575144366 +322 370 .3819740253001268 +326 370 -.34786829201958847 +356 370 .4326397770933 +360 370 1.520236502072576 +382 370 -.08046792229019195 +388 370 .34078345212781946 +389 370 .03962780272095569 +394 370 1.1268246078791126 +398 370 -.46104991982939814 +406 370 -.3015331378977517 +417 370 1.4591085936923491 +423 370 1.0523984971439713 +424 370 .10255695376765758 +431 370 1.0672553559775197 +432 370 .7305324362404876 +443 370 -.28518573654791907 +445 370 .17614890347696568 +459 370 1.019600286537448 +470 370 -.09541704731920242 +471 370 -.5435500534455244 +475 370 -.22509985515431874 +487 370 -.45776474214898494 +506 370 -.3233279184223509 +514 370 .6373745102430255 +536 370 .2274860925202207 +553 370 -.4375190260350553 +583 370 -.1226648993060598 +607 370 .09988367861903258 +625 370 1.1936444331219058 +627 370 -1.3967644298666702 +628 370 .4157819401248395 +631 370 -.08720538113889596 +635 370 .8356457453003201 +641 370 .5727378597877757 +648 370 -.4618524491888265 +649 370 .4440890825707382 +651 370 .3559029172971136 +673 370 .20017668511109524 +689 370 .449440525905298 +690 370 1.077066739459674 +695 370 -.5788654075701901 +704 370 .2322221568988912 +708 370 .08865940623602998 +715 370 1.8314004375114774 +724 370 -.4220408215705318 +732 370 1.07630013264794 +734 370 .30722001137987404 +737 370 -.018647808056752153 +763 370 .4852170089721383 +806 370 -.4811089127596815 +809 370 -.193019150858442 +826 370 .2993809213982495 +828 370 1.8283844593494747 +831 370 -1.7156015098572257 +832 370 -.5373433959116223 +855 370 .7657564246202372 +873 370 -1.3885706307156402 +898 370 .3921425189698219 +899 370 -.3439485475305473 +909 370 -.8099298967947339 +910 370 .7371257254520244 +921 370 .6143591190090429 +923 370 -.8370949337313967 +928 370 -.8052460867414123 +936 370 .7434468349277715 +954 370 .689899416679967 +983 370 .47780121038518597 +7 371 1.5184510694893392 +11 371 -1.2087882923066746 +18 371 .9928129040965629 +22 371 1.5031932512759847 +24 371 -1.7906546505910739 +26 371 .07107086422433005 +32 371 .6206503044445797 +51 371 .8578617114848059 +52 371 -.8077212751118801 +55 371 .45093369575688313 +64 371 -1.35517210383225 +74 371 1.8393946014425901 +78 371 -.014275668001141632 +81 371 -.5485695200464683 +135 371 -.5762026139388261 +140 371 -.05518406966660344 +144 371 -.012256752252634506 +155 371 -1.6047369359722008 +157 371 -2.3481377825128993 +179 371 -.8316297896364204 +182 371 -.09275502166994645 +183 371 -1.577454577716713 +184 371 -2.1241918133363344 +192 371 -.37293653916930347 +198 371 -1.4931226527789394 +216 371 .620875512376197 +219 371 .4059161375297732 +237 371 -1.244578976870716 +240 371 -.0464587000939409 +248 371 -.13999397940899194 +271 371 -1.771979895004421 +276 371 -1.1270729308362417 +294 371 -.7854116984677572 +305 371 -.7179290986763397 +309 371 -.02687527074605786 +310 371 -.3675849667320936 +316 371 .8476208168187102 +320 371 .6051546154680657 +351 371 2.244222666499444 +365 371 -.7388600515452882 +371 371 -1.3189955997226366 +372 371 .03953911979566515 +373 371 -2.6891740293327815 +377 371 .24774120267867675 +397 371 .038379012542878815 +407 371 .4186733582628348 +409 371 .20787027791154442 +429 371 .9866145095641119 +440 371 -2.825144400019434 +457 371 -.5651431026930803 +464 371 -1.3173070839179033 +497 371 .4896622881271303 +500 371 -.9787309981736699 +515 371 -.23191851716424847 +516 371 .4125819675414786 +522 371 -.40309291537876446 +523 371 -.0035189838393529377 +527 371 -.7421581977638283 +540 371 .543689361684682 +542 371 1.9849658952299996 +571 371 .8861043020376008 +578 371 .11268424513496186 +604 371 -.28283149588409073 +628 371 -.06709410703720803 +629 371 1.4774889627400065 +632 371 -.11711395338604455 +633 371 .8047644985621594 +635 371 1.2020671459938688 +640 371 -.15452339947994279 +647 371 .3541201424133144 +649 371 .5961331393263395 +650 371 1.1026263917851666 +651 371 -.9100819448789698 +662 371 .21805139357449754 +685 371 -.7297740639537037 +732 371 -2.163480294308439 +740 371 1.3721907233467645 +755 371 -.22091288127526784 +768 371 -.5189560202719238 +770 371 .2366277527738694 +771 371 2.0256447317136757 +772 371 .0342209563114336 +773 371 .11462237923763552 +795 371 -1.9333648529562326 +807 371 -1.4714310956488692 +821 371 .9065611280224712 +826 371 -1.2039362384092884 +830 371 .7602954667847893 +831 371 .07934700513560759 +868 371 1.3697227459863939 +869 371 1.0420107564994368 +875 371 -.10893678116795275 +876 371 .4712310515642247 +893 371 -.8664091542632111 +895 371 2.1209540457760303 +899 371 1.0961276726554716 +905 371 2.8036445048606993 +909 371 -.7083530565770296 +927 371 -.010066407815094935 +932 371 1.350332760639973 +936 371 -.6813482850615027 +955 371 .3367831111129923 +961 371 -.4177763311492373 +962 371 1.8625276262095534 +965 371 .3341013859506857 +975 371 .3981348336652332 +982 371 .8071089020224841 +988 371 1.0593687158699971 +995 371 .2060357032296738 +997 371 .1704610373304508 +8 372 -.49203845610654506 +10 372 -.7553904821641019 +29 372 1.2751705470962336 +41 372 1.2915000958420357 +48 372 -.27730045092951916 +49 372 .4465172098091371 +52 372 1.9655842149952862 +59 372 -.5327252673322839 +88 372 -.5046180368930324 +94 372 -2.187872474243604 +96 372 1.7978920871355508 +101 372 -.5462180985067806 +140 372 -1.663171544652035 +169 372 -.027615533683435445 +186 372 1.1804413575523793 +197 372 -1.0687100447029971 +216 372 -.015547111790719052 +220 372 1.0078932415549264 +225 372 -.46658137829565244 +250 372 .5847673171594403 +257 372 .6845379233893449 +266 372 1.7119888537892736 +273 372 -.3087522311702801 +274 372 -.5478460193928445 +284 372 .6349471649149074 +291 372 .18823731502648225 +307 372 .32295488360581565 +317 372 .2661114952975031 +328 372 -.7506257891491221 +331 372 -.0970936937228378 +344 372 .33030223536377573 +370 372 -.7309596034514932 +379 372 1.0091074946681107 +405 372 -.14360721040578076 +407 372 .7753225964300426 +408 372 .18180084778778105 +411 372 -.6538264192814197 +417 372 .9664911978809412 +420 372 -.16807827445748838 +422 372 .28060219827813726 +428 372 1.670294308909395 +431 372 -.29718131357559885 +448 372 -.49083816160581817 +455 372 -.8721820246106403 +461 372 .7160393798362935 +480 372 .35394595133189 +496 372 .014798418772738964 +507 372 .5622884178268082 +510 372 -.2863987037584486 +514 372 -.923137565576511 +515 372 .7807348761638396 +535 372 1.0984671491424318 +560 372 .9277992358000853 +564 372 -2.2227894814332947 +568 372 1.7913352060263446 +576 372 .8890417536187879 +581 372 -.18034025001729412 +589 372 .5618807303345813 +593 372 .9111135458495303 +598 372 1.0223109294772175 +606 372 .01921555067205391 +613 372 .12437721483337635 +618 372 .08665070465179038 +628 372 .9613142463018483 +630 372 .1814442909352125 +631 372 -1.2922795530285467 +633 372 .9071124849522277 +665 372 -.9955051642999625 +667 372 -.9324809585651779 +671 372 -.7724071551497971 +674 372 -.10373282267721792 +677 372 1.8652631538264515 +696 372 -.5054655535343442 +723 372 -1.859286958335642 +735 372 .847704840818997 +757 372 -.6160054349977943 +764 372 .707443611462056 +774 372 -.061112894499138676 +785 372 -.8243339240210439 +788 372 .8425228640961108 +790 372 .13319640017581436 +795 372 -.1654820966906151 +806 372 .24923157180100522 +807 372 .3764917619732421 +820 372 -.5604550538807276 +853 372 .17981407305982205 +860 372 -.5228239087996197 +868 372 -.3148024741536835 +876 372 -.2661165220352038 +886 372 .04490635761390541 +893 372 -.5208961786304855 +921 372 -.376902395980883 +928 372 .9528432873733756 +930 372 -1.107470855403263 +934 372 -1.4954032405402056 +945 372 -.7103747021169372 +959 372 .551304503131878 +998 372 .3296951193828974 +1000 372 2.081370008866185 +2 373 1.0682508374420605 +3 373 -.3739992149258662 +13 373 .09551872443134146 +22 373 1.3365715614432347 +35 373 .29314350112621534 +39 373 -1.9897558573621554 +67 373 .5038274241714488 +76 373 -.48371951423713944 +84 373 1.2024112767647588 +86 373 -.7367890081148004 +95 373 .4201004734393883 +119 373 .6934927984410931 +124 373 .5291203422495775 +133 373 -.1960912061946939 +137 373 1.7667328667344238 +152 373 -1.5730236863689655 +155 373 -.4026511148560748 +156 373 -.9654691761773828 +158 373 -2.0042656499996094 +163 373 .5137226000854057 +180 373 .8770509989457035 +182 373 .44094378617650165 +192 373 -.9263117147589165 +219 373 .5512032873304058 +254 373 -1.4755251622150287 +263 373 -.07782065864216955 +277 373 1.0624328697969 +300 373 .9925011434959344 +301 373 -.29619332874028487 +303 373 .02456157155185615 +306 373 .7974848747574682 +308 373 .6160001774216126 +316 373 .5941984349845246 +320 373 -1.3018955668344476 +323 373 -.1270279024041353 +324 373 3.45721492276924 +326 373 .028016045792439444 +330 373 2.33264044980268 +336 373 -1.5421647080225447 +346 373 -.4036853000516736 +353 373 -.3450846048608262 +358 373 -.02961922310470147 +366 373 -.5887490539066307 +387 373 -.08047828770854804 +390 373 .9510677133645185 +398 373 -1.06299338118343 +409 373 -.6725975133064415 +420 373 -.7030618338470178 +444 373 -.6675795796877935 +447 373 -.8736481660348365 +463 373 -1.9096967958893463 +476 373 -.6840301341262187 +477 373 -1.7022454814322472 +502 373 -1.706000062505837 +509 373 1.3486224783407361 +515 373 -.6473099113632903 +538 373 -1.4144911996372997 +542 373 1.200758644804134 +545 373 .07694783852808941 +554 373 .3359810819490559 +555 373 .8555938371348749 +580 373 .5016774626637374 +583 373 -1.7573535643093792 +592 373 -.036049104949295835 +597 373 .12972607887212798 +598 373 -.034065376513428 +610 373 -.17500121497704507 +620 373 .3854974239841084 +631 373 -1.9799864420670996 +634 373 .8901172466953676 +637 373 -.8133995081690667 +668 373 1.6841023200567102 +676 373 .20104446307768742 +690 373 -.17080950725583566 +692 373 -2.055339898100369 +698 373 -1.0214787915005266 +708 373 -1.7543614857550618 +719 373 -.7472656229180794 +721 373 .5557342177369434 +726 373 .9676275822479393 +728 373 .0655269724620613 +738 373 .15363161493282573 +756 373 1.5050439016918609 +758 373 -1.6723244604665672 +775 373 .5918841856192409 +778 373 -2.522471363821241 +789 373 -1.0093631912741512 +799 373 -1.9272750832076095 +807 373 1.3949606008437947 +820 373 .0886249701041455 +822 373 -.5975293882957179 +825 373 -.1189499760165666 +827 373 .2416726718023377 +829 373 -.051998018962118975 +830 373 .004278993500866385 +834 373 -.16329351020702526 +840 373 .9449616082511129 +848 373 .14305440971931538 +853 373 -.759702145281766 +867 373 -1.1356827744358557 +875 373 .45094547491176845 +876 373 -.20499923646444101 +903 373 -1.5368377236250248 +917 373 -.737008640101772 +938 373 -.626996360606231 +942 373 -.9762790753981214 +944 373 -1.37925102808274 +947 373 .49023233059655524 +952 373 .47814829215538357 +955 373 1.8466546418904939 +964 373 .27441688056530694 +967 373 .36720648119740157 +982 373 .5957136847677005 +984 373 .15985211189371737 +986 373 -.5599981384431233 +997 373 -1.8421651336151508 +7 374 .34898575666019255 +9 374 .0672864964264247 +10 374 .49052430817235415 +15 374 -.6180552536477679 +17 374 -.12596379771124278 +26 374 -.026791203303877742 +67 374 1.1263346765181026 +85 374 .8294965267531412 +103 374 1.0716354424179755 +117 374 1.1835264805788546 +118 374 .5716638290144431 +132 374 1.5232174072705544 +142 374 -1.0045968896480337 +146 374 1.0380295708861784 +175 374 -.4946485044497608 +194 374 .2998212446554662 +218 374 1.4251928354417167 +253 374 .3141430753019631 +254 374 -.029500060881584717 +271 374 .6377671005622749 +280 374 .5093603155592215 +322 374 -.02413635939966821 +323 374 1.8599659698153581 +331 374 .7331400290341524 +351 374 .015730732471164452 +355 374 -.47659218564802613 +392 374 -.5144732155070801 +398 374 .5989134984493502 +409 374 -.24859306770674036 +412 374 -.03137364120260752 +427 374 .006712188146480005 +428 374 -.5261556605507832 +433 374 .0025730560969762784 +436 374 -.513940377769912 +439 374 .8251907905730949 +442 374 1.054922089276201 +443 374 .13551986494996637 +461 374 .4402580592950479 +463 374 .7795743439981233 +465 374 -.5225243506918404 +466 374 -1.8805841421004683 +478 374 .036450994361398606 +483 374 -.9147539315191483 +487 374 1.0761423427326104 +501 374 -.5607590026991925 +529 374 .046833777732396276 +544 374 .7918674118192183 +550 374 -.1663309970752234 +553 374 .7648105926932326 +560 374 1.274722357404016 +563 374 -1.1179354562911228 +565 374 -.12502331169097053 +566 374 -1.1747501825298312 +588 374 -.6710092726893364 +602 374 -.350283315738549 +615 374 .10883001667793742 +622 374 .7808891955951336 +634 374 -3.4196074423012823 +639 374 -.669866966779912 +641 374 -1.2353588567337999 +666 374 -.29640592707797425 +671 374 1.451612940035398 +672 374 .5681842323597306 +690 374 -1.2478584198603626 +692 374 1.1123177302247422 +696 374 -1.5371820864655694 +701 374 -1.0137197851598811 +705 374 .4492897980352093 +707 374 -.4111395686559405 +720 374 -.6622701957119553 +722 374 2.282181705158726 +730 374 .9436652272053365 +753 374 -.00335086599143046 +755 374 .10846296571832521 +765 374 -2.2791490324974286 +769 374 -1.2747870584808787 +781 374 .07803058048396434 +794 374 -.3893940886314057 +803 374 .8347299988114336 +809 374 -.9188768532784688 +836 374 .12538251060871897 +855 374 -.5555574587343797 +865 374 -.4180506094703449 +868 374 .24680024546603088 +877 374 1.2058489692107148 +879 374 -.9123733356818481 +897 374 .5875237983744899 +911 374 .26861351002807143 +928 374 -.21472139049946526 +945 374 -.782116132372197 +951 374 -.79020612248952 +974 374 -1.441608524447293 +992 374 -.5718215167982275 +3 375 -1.5888014591279935 +15 375 .2841364248374794 +25 375 -1.5758356774455025 +26 375 .780863764117221 +41 375 .6015182549738327 +47 375 -.28108620339215384 +64 375 .06301410461065421 +66 375 -.12756054111544454 +84 375 -.5481559114198638 +94 375 1.7711435287630153 +108 375 .8919240620147915 +111 375 -.8264834509995459 +124 375 -.08204842283335162 +125 375 -1.6431375570404267 +133 375 -.4050863643541328 +138 375 1.078696736757731 +141 375 .6740459103060275 +152 375 .40200275400416896 +153 375 1.3839863218261828 +158 375 .2461453644310274 +173 375 -1.2407467860791117 +177 375 .6871103241508925 +193 375 -.12157875589747551 +199 375 -.5996112692167614 +213 375 -.4813708202276863 +215 375 -.3116222693119032 +236 375 .5282633390296099 +257 375 1.3966225566253314 +262 375 -.015914986364801237 +267 375 .21826939953457014 +291 375 1.9492012007775252 +316 375 1.0591467527975202 +328 375 .1618880312049983 +334 375 -.7940068114766488 +338 375 -1.2647571103880817 +349 375 -1.815883705164784 +387 375 .5068045336724815 +388 375 -1.4494343228393787 +394 375 -.027645132822361224 +417 375 -1.3178675944285418 +429 375 -1.1254253104271363 +436 375 .5266481822450911 +451 375 .09307150551943928 +460 375 -1.025372560443585 +476 375 .7367595303656942 +487 375 -1.2745353479605683 +491 375 1.0519002993129758 +539 375 -1.4595615808891167 +558 375 -.4745784212073318 +575 375 -1.1316792474039252 +583 375 .4454379286514462 +589 375 -.01950368950742673 +609 375 .6776353291437542 +610 375 .15315219881443992 +619 375 .8000709008370421 +626 375 -.4148804135443027 +658 375 -.6436298364909648 +670 375 1.0503846535299164 +677 375 .06536127268650356 +702 375 -.5327322628272145 +717 375 -.9949006235639363 +723 375 1.491773041841243 +731 375 -.32329596243758696 +733 375 -.5608249040575953 +743 375 -1.5069444415683684 +750 375 -1.4721883171723202 +751 375 .13090738013401815 +758 375 -.8638704862786439 +767 375 .0916464446843346 +779 375 .5508193453328332 +797 375 1.4896672779693563 +800 375 -.9057786499942726 +846 375 -.4864374454494221 +847 375 1.948324434248892 +854 375 -1.3675973352564366 +869 375 1.3730205785840308 +871 375 -.4267833552922664 +880 375 -.33957475186987107 +909 375 .04476021872605791 +911 375 .8724271523247094 +923 375 .8610995301400342 +926 375 -.21964570287035678 +942 375 .5768387408857689 +947 375 1.22949969688327 +975 375 -.40703340944880434 +987 375 -.5102803201865609 +992 375 1.317424914225479 +993 375 1.2841845322389343 +999 375 .9349019413135762 +25 376 -1.46172634529691 +26 376 .15003879946910617 +29 376 -.7637422947072606 +46 376 .8695084803517291 +50 376 -.03962900247237276 +52 376 -.6630171021615678 +71 376 -.5957456573206561 +74 376 -.6188534124010272 +83 376 -1.2877730982683555 +96 376 -.8945897362781796 +101 376 .7891922498358859 +107 376 -.467367969207854 +134 376 -.15810855690979173 +141 376 .04018317861534844 +163 376 .13910520603184834 +170 376 .6376256895095426 +173 376 -.2508293550427425 +180 376 .17201429839726196 +188 376 .25791996629694747 +218 376 .8023093429176097 +229 376 .4734896770686898 +241 376 1.036534175265964 +262 376 -1.5545606279681556 +269 376 -.9385107224447615 +295 376 -.10574390582085584 +304 376 -2.4690284635707807 +310 376 .42994478743428327 +313 376 .3069066178065759 +322 376 -1.2733503367489767 +323 376 .8619915365236663 +330 376 .7491148153386544 +331 376 .6204031833655835 +363 376 -.8654063161319119 +384 376 .2622482555797351 +402 376 -.22149536091065514 +421 376 1.0487711272897515 +427 376 .13951505700176892 +428 376 -.48047144199601616 +436 376 -.30128681265796353 +443 376 -.8383650883783818 +460 376 -.7974177983699233 +468 376 .48781265154283593 +497 376 -.21169874998121674 +508 376 .2810878064671747 +523 376 -.003544964444682247 +528 376 -.8050492654414239 +530 376 -.20941238175399512 +539 376 .897170992137423 +543 376 -.6952944662242341 +545 376 .6883406935558513 +550 376 -.9399460000954981 +558 376 .5978745716293294 +562 376 -.05466851638163796 +585 376 -.8591082304068878 +587 376 .3698665039199603 +602 376 -.2914758617022144 +608 376 -1.0491909115823104 +638 376 .48928715380985216 +643 376 -.3673711099439106 +645 376 1.767867310918954 +663 376 -1.0258777180453214 +684 376 .7714447781662149 +700 376 .23697442407452798 +703 376 1.2287349215852363 +704 376 .16897370013069077 +724 376 .26480784824333625 +725 376 -.4672982647555197 +727 376 .9750433816089454 +732 376 .025259620815345857 +735 376 -.15461674122312272 +737 376 -.19769823428660538 +749 376 -1.8030786838026183 +766 376 .8169208919225746 +785 376 -.8327798607004996 +793 376 -.9990629427251623 +794 376 1.2394423263330354 +797 376 .2515829936888266 +801 376 .4116426824534637 +809 376 -1.5226470477553125 +822 376 .2916446255992108 +830 376 -.6416661630720932 +833 376 -.5810297567495066 +838 376 1.507970637841812 +856 376 1.1088324227979245 +877 376 1.2388918541904803 +884 376 .9722101220043026 +893 376 -.20850386672921037 +924 376 1.8294501547144983 +927 376 -1.2231170439104488 +931 376 .8335205767018075 +942 376 -.5030561441613935 +943 376 1.6336653934240273 +944 376 .05850795865999093 +953 376 .9654266016706449 +956 376 -.41853746457531854 +959 376 .7283696191690617 +973 376 .021651479774410357 +991 376 .733168422985173 +992 376 -.08034647262315403 +1 377 -.5650422934527539 +12 377 .06676442695463583 +27 377 -2.5539088394175695 +36 377 1.808345340236908 +38 377 .21026743778027074 +40 377 1.0406556932346995 +49 377 -1.5467081761237627 +69 377 .34396010714044617 +81 377 -1.1499658503008858 +92 377 -.274911533716504 +101 377 1.063673467787988 +103 377 .34701398259087607 +134 377 .27951010551321215 +141 377 .06898421577455649 +142 377 -.14192661420697633 +145 377 -.22609998180789842 +149 377 1.7178856433682528 +150 377 -.24418282554203338 +165 377 -1.3373994150899946 +196 377 -1.172596472475833 +209 377 -1.3977058849347916 +212 377 .29728005754951814 +215 377 -1.123255318468648 +225 377 -2.726440308367237 +229 377 .4280667605308442 +249 377 .052334723862610205 +251 377 .670580775192466 +252 377 -1.4347461797051007 +264 377 .44918389372635387 +269 377 -.7823516910979176 +284 377 1.2571175037898445 +290 377 .06238228925007982 +295 377 -.18317835283780334 +308 377 -1.1980550869125521 +315 377 -1.7080883174984065 +324 377 -2.0907416255865523 +342 377 .3673446107152449 +367 377 -1.4825512392546805 +368 377 -3.0961297861064776 +379 377 -.22399518985323263 +400 377 .021799336885292273 +401 377 .5164728680210173 +403 377 .025922617069878223 +418 377 1.6934036519916371 +434 377 .3792525513076773 +442 377 1.0477370229719132 +455 377 2.8412754200238495 +478 377 .18514817970117214 +502 377 -.49007335431044896 +503 377 -.41466444739353986 +516 377 1.401773242350851 +526 377 .8013256212922429 +528 377 .011455384125772572 +532 377 -.6568582672662837 +566 377 .06918429660312422 +572 377 -.5042777866636603 +594 377 .5545864831761728 +612 377 .10796079610758724 +622 377 -.3325785257226227 +626 377 1.9910289829744454 +632 377 -.5766555506650236 +663 377 -.08801068922495808 +677 377 1.1532227943092614 +682 377 -1.4886030818569465 +686 377 -.5629993631489147 +698 377 -.2349196062973392 +710 377 -1.804660348655772 +717 377 -1.2718501055706364 +722 377 .23972677731545922 +732 377 .051388332362626514 +750 377 1.1087331208243334 +768 377 -.003434266743426853 +802 377 1.5337327811200305 +804 377 1.3208415122336545 +810 377 1.1968200619365597 +822 377 -.9350504052202058 +829 377 -.37830313926031356 +839 377 -.7787798746914291 +842 377 .15983691980229145 +846 377 .13244875137796205 +856 377 -.23643246497950787 +864 377 1.3171294711343027 +868 377 -.8314258412998501 +882 377 .927539143840014 +918 377 .26978523227859413 +954 377 -.6997808120141817 +971 377 -2.035054681149761 +988 377 .24746547677805203 +989 377 .09218922233806971 +9 378 -.45408538328868225 +20 378 .18367271459907716 +49 378 -.05004146518816166 +53 378 1.0398687643639493 +62 378 -1.2643122205456956 +64 378 -1.481282032737516 +65 378 1.0791751518006216 +68 378 .6056187139001487 +81 378 1.0911334083475013 +86 378 .053574155502786644 +92 378 .025486789602413573 +97 378 -2.143565087977312 +98 378 .15353717241448725 +103 378 -.8651787961741233 +122 378 -.32849953820420164 +136 378 -.16445049540494308 +153 378 -.7958552564439093 +155 378 -1.3863554742172637 +156 378 -.48782477970335225 +163 378 .4359725667288191 +167 378 -.9634636170927249 +197 378 -.4608408164530549 +203 378 -.013975406353163425 +212 378 .6537052051899604 +215 378 -.5252465575192191 +228 378 -.5070703888370192 +235 378 -.05284724864080695 +251 378 -1.5291656445841963 +257 378 -.20549605570748636 +258 378 .3034797894211353 +259 378 .16264193116836395 +260 378 .29757813674310013 +269 378 -.3243728336851849 +290 378 .1105527229192868 +299 378 .005481957683287617 +310 378 .05831863663294193 +314 378 .4128806945846507 +323 378 -.7124737268621687 +331 378 .034135305521081086 +354 378 -.5121746457336853 +357 378 -.41845416613999054 +362 378 .16850948818569145 +370 378 -.4908308271289879 +377 378 -.025738051650141744 +390 378 -.64411175996149 +394 378 .7340385993976004 +399 378 1.0026072429080655 +409 378 .22923004443450004 +417 378 -.009222857527497843 +423 378 .5356718645093299 +425 378 -.24823815363448148 +429 378 .590679410580858 +435 378 1.244602993845075 +439 378 .5551434723449644 +446 378 .6542668839984328 +457 378 -1.1555470279760462 +467 378 -.425900790715774 +515 378 .287431341315126 +545 378 -.11139738960473909 +552 378 .5826323615755814 +553 378 -.5736373772409107 +559 378 -1.0760363939720685 +579 378 -.044250163593906565 +593 378 -1.0426734397670063 +605 378 -.3060688465936174 +611 378 -.506337295702183 +615 378 -1.818161778575528 +617 378 -.45457750790973556 +620 378 .2544712604837022 +626 378 -.07344331387915481 +633 378 .6023729066414416 +637 378 .06954972641820364 +656 378 .33619776905970383 +669 378 .6497473229582792 +699 378 .3837049368097708 +714 378 -.47153882969208943 +716 378 -.23034543163646692 +722 378 -1.271045005416721 +738 378 -.36203938549393483 +748 378 .48702900289941436 +759 378 .06897771607780935 +766 378 .3784867428972421 +776 378 -.6919192723127308 +780 378 .33645741807405694 +786 378 -.05354967601047603 +790 378 -.8182065826795132 +791 378 -.38996069087385576 +803 378 .17527192781442402 +808 378 1.6184211993780775 +811 378 .36619263718462924 +820 378 .7041918542317988 +823 378 1.4291976682509506 +829 378 -1.0312769559565782 +832 378 -.14047778307360917 +833 378 -.04495149903454089 +837 378 -1.2070147594641087 +843 378 .6450800646526001 +886 378 -.42332494039985413 +899 378 -.18978072734718776 +920 378 1.0822299479912547 +927 378 -.15084268707888046 +929 378 .49620920238373456 +930 378 .31636469887905194 +931 378 -.4394289238569484 +940 378 .26911907523375606 +948 378 -.008735490802728674 +966 378 1.0267552265193054 +972 378 -.5305573487896895 +983 378 1.2536311957805983 +17 379 -1.022456350837508 +26 379 -.7512269000785978 +30 379 .357834240412246 +32 379 -.4609860482774668 +57 379 .1237697152522107 +83 379 -.03458898560228804 +85 379 .8905555189008487 +91 379 .23303461814359472 +98 379 -.06394987982066819 +104 379 .5555399103443784 +105 379 -.5622669705485207 +134 379 .0520246569086598 +143 379 .09530463397705058 +145 379 .17798945321608878 +152 379 -.0717112792112356 +160 379 -.6939033734487665 +201 379 .9161937625817131 +219 379 -.012819669094357382 +224 379 .17084726436941036 +229 379 .23214953113286965 +250 379 .1287265775659026 +254 379 -.15550485470245962 +255 379 -.7026414114762793 +267 379 -1.0170061592416744 +298 379 -.04111001706401688 +305 379 -.6331141220006615 +314 379 .18835805768267067 +322 379 .4919312899665421 +347 379 -.13172185064107572 +360 379 1.0586986869102637 +363 379 .6360285923667819 +367 379 .6308582293596616 +368 379 .3114464323489934 +371 379 .6304605286625443 +376 379 .5539941005849973 +378 379 1.0812636099882096 +379 379 -.04797046312312179 +380 379 .04296035324176935 +386 379 .7766688640408538 +411 379 -.6484925823247801 +418 379 -.61760461364238 +449 379 .07435843570393712 +452 379 .6235747912805185 +455 379 -.8325985302754076 +466 379 .16402742538705306 +467 379 -.694940593452202 +483 379 -.003706594442352669 +497 379 -.9743928002851546 +512 379 .7365913914469039 +514 379 .19013644653322032 +515 379 .06123924465316076 +535 379 -.468778753958899 +536 379 -.5407470474886344 +539 379 .3840033747393007 +555 379 1.1376898176627823 +558 379 -.16482102846369212 +563 379 .056293305452417224 +575 379 -.16469065281630157 +584 379 -.4335889164914032 +585 379 .00013010533303194072 +588 379 .3597437719366013 +603 379 .6159948028178289 +608 379 .09559207756290561 +609 379 -.720374900931517 +623 379 .7895145280818481 +627 379 .12704342067318014 +644 379 -.03042682038956715 +661 379 -1.0246376029462183 +663 379 .02742684138962769 +681 379 .4706688628140262 +683 379 .2028744860492235 +704 379 -.3058688385264609 +705 379 .10793154283206463 +713 379 -.2937284810826147 +718 379 -.3156138163980716 +723 379 .7765472417561584 +726 379 -.18781754149829538 +728 379 1.6703167499806142 +734 379 .43930632383489265 +748 379 -1.206403710073372 +770 379 1.0463977525854014 +803 379 -1.123916468241175 +806 379 .05262761748908973 +810 379 -.28662601083009076 +827 379 -1.0975587814002368 +849 379 .7019700496868431 +863 379 .09101420403286392 +875 379 .06886516037711193 +880 379 -.17872501592638748 +922 379 1.1608431329977804 +945 379 .11635324985671901 +946 379 .04509467193795041 +950 379 .6611560074793081 +951 379 -.3739813010465023 +973 379 -.06831035604833822 +974 379 .7822418109691119 +986 379 -.17164868457655819 +991 379 -.4434123690153273 +994 379 -.30484275872848243 +11 380 1.5776113243571737 +16 380 -.437954806207567 +24 380 -1.3377439300176917 +27 380 .5622153247767124 +29 380 .7681352468238359 +30 380 -.5291125136404893 +36 380 -.09150055908095023 +37 380 -.5512104287424353 +59 380 .384256252793093 +74 380 -1.1908966828950844 +80 380 -.979593287421516 +105 380 .8593366405545952 +108 380 -.8738958355202344 +109 380 2.0277748726084797 +113 380 -.4172808454839298 +127 380 .9965146801284758 +130 380 .12375440584418382 +132 380 -.12862275139982482 +156 380 -.6823255897243249 +169 380 -1.3641759469986867 +171 380 -1.0315765820700369 +175 380 -1.6049064979262047 +177 380 -.28627674756904214 +180 380 .44769122102395553 +197 380 .23253083730388868 +199 380 .07420915185128787 +223 380 -2.0627919114279996 +232 380 .22943841978924878 +235 380 -.633949760525548 +238 380 .5464113933689495 +256 380 3.670170835294574 +269 380 -.14780857282980836 +277 380 .146579035721894 +288 380 1.19170913988561 +293 380 -.09781853300704015 +299 380 -.5409081288223896 +305 380 -.05584506684351334 +311 380 -.2787942975675301 +316 380 -.5356485580208528 +333 380 -1.7188017931702304 +337 380 1.6476682483183172 +338 380 .8699342450960706 +343 380 -.3687594327057584 +353 380 1.084747839666428 +360 380 .6894332164464513 +362 380 -.9887199755211803 +363 380 .35544608068889816 +364 380 1.3324305466021147 +379 380 .9670210308294178 +390 380 1.6899856476575457 +393 380 -.43837923913299764 +402 380 -2.0466743660437627 +407 380 -.16853246788309306 +408 380 .829445728222363 +421 380 -.01551601867742898 +436 380 .9849965715425872 +447 380 -.5922963818521607 +453 380 .14297073564405183 +472 380 -.3914583116401128 +482 380 -2.065989288411666 +487 380 .2114296905158706 +500 380 -.9781495114284473 +501 380 .9695246222547168 +504 380 .9154327232770831 +515 380 -1.8674611922390407 +517 380 .8237134429115672 +547 380 -.6511521729751613 +549 380 -.05311406702344654 +551 380 3.1308893554171755 +553 380 1.3996178430470458 +562 380 .01976735794500123 +572 380 1.7513521702236898 +577 380 -2.6286980888955824 +579 380 1.754835295026966 +580 380 .105788126919798 +581 380 -.8970151961418613 +582 380 -.4940241535682458 +585 380 -1.7937789769920673 +596 380 -.7549119015720327 +606 380 -2.275435286512353 +619 380 -1.1742704150773409 +622 380 1.2891576392803983 +623 380 .94666439310384 +628 380 1.7133248662730682 +631 380 -2.697486296228868 +657 380 -1.0166853149345125 +658 380 -.09044472336370674 +688 380 -.9377495003049218 +689 380 -2.228214122225144 +702 380 -.8824791948137111 +719 380 -.30717976934157887 +737 380 .15382727682030484 +744 380 2.5719757089388633 +783 380 .7457190534444135 +786 380 .43911910621191114 +799 380 -.38882740918903724 +809 380 -.36798584196685163 +815 380 1.7315637512209476 +825 380 1.7310590044358045 +845 380 -.1770942543302399 +852 380 -2.394344246910379 +873 380 -1.9354896511518993 +875 380 2.4171093681474125 +878 380 .44688270579351574 +885 380 .5077357605774131 +890 380 1.3037249637151085 +904 380 1.5614406784227095 +938 380 -.5795839777003076 +939 380 .26539211351804604 +951 380 .06190665886338538 +952 380 1.616946986201539 +976 380 -.12028229269019124 +980 380 -.06344261738101556 +989 380 -.805031475277693 +39 381 .026447016164421362 +50 381 -1.5268500016643063 +54 381 .4759432042743745 +62 381 .6953969887522837 +68 381 .49983328917831876 +87 381 -.6396866010251557 +94 381 -.8419221481588501 +102 381 -.19686993279599843 +107 381 -.9353368891544356 +116 381 -.3206170052588825 +129 381 -.9848875830608771 +137 381 1.5909736200280948 +147 381 -1.5652407097374574 +150 381 -.5734070504267264 +155 381 -.9454936764970983 +161 381 -1.132809653735248 +168 381 -.4321477767862414 +182 381 -.9629253438294498 +190 381 .5620314332828579 +205 381 -1.3346298770123084 +232 381 .06648106940774201 +235 381 .1288686553658283 +241 381 -.6358816360557958 +251 381 1.1636139664745162 +265 381 -.22064735085473586 +277 381 1.0669161276406878 +283 381 -1.2503836387783434 +295 381 -.8663704707782376 +298 381 -.5812789798544349 +319 381 1.0399444303635297 +321 381 .9359472358557752 +333 381 -1.0277541962252608 +366 381 .41699775568257846 +369 381 -1.5229033404337566 +372 381 -.4966726346154327 +383 381 -.33813909551435717 +394 381 1.2331749105331498 +397 381 -.14904476828378485 +398 381 .5582426908653169 +408 381 -.7548170258486739 +412 381 -.6940748633117932 +429 381 -.7643777657567017 +448 381 .101907753280809 +452 381 -.39766188959023396 +461 381 .9052631952807666 +462 381 .7310274161082931 +471 381 .24838124323621347 +490 381 .2570780438554763 +499 381 1.5108456807994672 +500 381 -.093682746232164 +502 381 -.39614281545747226 +506 381 -1.0844192655560176 +521 381 2.1542112767974086 +523 381 -1.548018585409662 +528 381 1.0297986479322092 +532 381 .9848111327891959 +545 381 -1.2164016431295694 +546 381 .8546336297850827 +568 381 2.03403792446832 +570 381 1.7007247269073527 +590 381 .35644446119018736 +598 381 1.5881290926501537 +620 381 -.3634287152196324 +628 381 1.7257424328552693 +632 381 -.9832678378097924 +641 381 1.0708560453701974 +654 381 -.16611187191189944 +662 381 1.220714535080134 +665 381 .6960367450729797 +672 381 .4310310701248259 +683 381 -.5024555378233899 +696 381 .8544940047105631 +718 381 .5389826548634526 +731 381 .16814076786687554 +732 381 .6789058293657241 +749 381 -.4694082535606952 +760 381 .04291334007479138 +772 381 .3034413604276174 +777 381 -.3875510292640505 +782 381 -.8783283939156303 +784 381 1.6043269529347841 +792 381 -.7234520407541964 +802 381 2.7215757674926166 +806 381 .20025463249748113 +808 381 -1.4394338501512571 +824 381 .2175764565673085 +835 381 1.0121286011365043 +836 381 1.2413265033997418 +844 381 -.5084714447887082 +850 381 1.2981912639049717 +854 381 -.5292454340469861 +855 381 1.636775712157776 +870 381 .8665393517160376 +876 381 .5491931089202687 +907 381 .8840475419965114 +910 381 .38115242421879353 +912 381 1.378420367348122 +916 381 -.7817660906857651 +934 381 -1.2474124713793233 +935 381 .7010525366595315 +942 381 -1.405629658380344 +955 381 1.2526688369454788 +957 381 -.7770212236537624 +959 381 .9196607060171349 +970 381 -.5241141472379935 +971 381 -2.5912623934108985 +985 381 1.3532753523741081 +14 382 1.2961194667362148 +56 382 -.012541815016527513 +71 382 .08453104048485208 +75 382 1.8488620008812842 +89 382 -.2882633916264047 +134 382 -.24030290930087914 +148 382 .21049501702941878 +154 382 -.8687375891521523 +157 382 2.345917220531982 +164 382 .15335743499567442 +185 382 .9748705098379261 +190 382 -.9681498045953303 +234 382 -1.2552330515048378 +247 382 .389939630345901 +248 382 1.6796882735055259 +258 382 -.23141604093361656 +269 382 .24615420886127398 +275 382 -.40823091352821406 +290 382 -.6103575516380207 +319 382 -.032416584831691186 +333 382 .3212077574506457 +365 382 2.4755691350233087 +379 382 1.3157626765244848 +381 382 .06617317379766768 +400 382 -.19798426883504452 +404 382 -.2469425635041369 +405 382 -1.5110862703028707 +407 382 -.8912176563967413 +424 382 -1.373374613784452 +467 382 .014149897577801024 +469 382 -.21128123974995855 +476 382 -1.050505623167825 +477 382 -1.2874134316397237 +479 382 .5004104120559086 +481 382 2.4472716557789216 +504 382 1.4421794130510723 +505 382 -.6093168814903496 +528 382 -.2795822353823869 +548 382 .551660171370461 +549 382 1.5067658623290092 +570 382 -.4354360012917593 +572 382 2.2676161364492233 +587 382 .4471882229401627 +621 382 -1.2440100422246443 +622 382 -.03153978480887581 +640 382 .6881244555323893 +663 382 -1.4346557250881726 +676 382 -.509333427369274 +678 382 .7840788023598761 +683 382 -.3214488851873777 +713 382 1.8645696301789774 +728 382 1.7523941271927799 +736 382 -.6094032234017648 +757 382 1.2021846969605008 +765 382 -2.1772586392972464 +773 382 -2.2536025195119036 +788 382 .8816171994381969 +799 382 1.28804542612847 +828 382 -2.4019266774748873 +837 382 1.59857075352798 +838 382 .9900414169398659 +841 382 1.4357487654355432 +850 382 .4987296496386814 +865 382 1.6048655690316536 +868 382 2.04807433708779 +883 382 -1.2813452499569637 +884 382 .10289306706063345 +908 382 -1.256384546158819 +910 382 -.34657074789771725 +914 382 1.0992836955910363 +925 382 1.6231804790365552 +951 382 -1.040262919237425 +956 382 .9353376992431331 +959 382 -.9647374975859498 +963 382 -1.4017791283931118 +967 382 .8263679884619541 +968 382 .5150555199891487 +971 382 2.2715462780748275 +976 382 -.0970139675741706 +996 382 -.8362114526153833 +1000 382 1.905063266179259 +11 383 .0016398970469022958 +15 383 -.8051800470349351 +47 383 -.7170322424039975 +67 383 1.3278386058706018 +73 383 -3.0142382066742828 +75 383 -2.9383117754622408 +81 383 -.20705616913764577 +99 383 1.813148335598235 +130 383 .5835536908054213 +131 383 -.7913791265647058 +134 383 -.09770929247258361 +152 383 3.0313242603082307 +159 383 -.0707148856397351 +161 383 -.9237126111981153 +171 383 4.605842422289686 +176 383 -.3540571160681377 +184 383 1.691177695377545 +194 383 1.6981510518233867 +209 383 -1.8535637481571094 +218 383 2.539682868153335 +220 383 .1911610534942423 +225 383 -.2665645459392727 +227 383 2.2761284884819633 +236 383 -.25738918990917026 +240 383 -2.9582860909976323 +244 383 -2.76169763175429 +246 383 -.24301986275648527 +249 383 -3.243112241434033 +258 383 -1.5730769170631167 +260 383 -.5243421181749114 +267 383 1.263088836760743 +272 383 -2.078420890107307 +278 383 -.7200894602242879 +279 383 .4783431359868274 +289 383 -.08152084413080096 +293 383 -2.189168447334532 +296 383 1.8785078012686491 +301 383 .3403510791802917 +308 383 .13519607191964564 +317 383 -.4214484703533641 +318 383 .08852994658585975 +337 383 -.9129591414084306 +338 383 .6719413036328524 +339 383 -.36029669288947086 +349 383 -2.7841129556351523 +353 383 -2.2631885681816506 +355 383 -2.263799458211907 +360 383 -2.209480402436855 +361 383 -1.4998566653234975 +375 383 -.8165013546781783 +395 383 -1.9072892721475265 +399 383 -2.8689731240057554 +413 383 1.732502238563026 +417 383 -.2878767326756151 +421 383 -.5343891348482174 +445 383 -.20272355776565512 +455 383 2.542337381773515 +460 383 .5133484804899964 +465 383 1.383911851805101 +467 383 2.7499851037279335 +475 383 -1.3205487569746985 +480 383 1.6450693709262736 +483 383 -1.066601234717815 +486 383 .3954729457943994 +492 383 -.025862386777209534 +494 383 2.2071133842002695 +497 383 .4615461843200333 +515 383 -1.5099119816254218 +520 383 -1.9892111080287633 +530 383 1.4857035398976919 +532 383 -2.25517642847784 +533 383 -.19298493279347584 +535 383 1.3567228524904864 +537 383 .06437917521089881 +538 383 -.33601067446658395 +543 383 -1.7295167565973788 +550 383 -.35297294376150185 +559 383 .7537385346066179 +574 383 .685439067549801 +581 383 -3.0181359476986405 +591 383 -1.6881301238974376 +618 383 1.6180469888809552 +632 383 1.4330869155740067 +672 383 1.4396019397526598 +676 383 .8913038251373449 +708 383 1.926948361335918 +725 383 -.3523313240903019 +736 383 -2.4615065774428992 +743 383 -.6432491570881187 +759 383 .6490105156306827 +807 383 -.7094600668039234 +827 383 1.7285755905708837 +844 383 -2.3852885630817884 +854 383 .8890506511217129 +858 383 1.1321064524526925 +885 383 -.8632279531597957 +887 383 -2.044305353073037 +936 383 -.5602270349576391 +937 383 .05149465973660857 +956 383 -1.070944658944545 +985 383 -1.018966902074034 +2 384 .6357444955366749 +8 384 1.1444542091344807 +29 384 -.15805676318908843 +33 384 .7954923262495099 +34 384 .6811897874304497 +38 384 -.9538604779930152 +40 384 -.47564107380057125 +47 384 1.044027026038789 +55 384 .023103375354150413 +59 384 .38386300985108324 +60 384 -.29231076349523255 +77 384 -.5296542158146279 +88 384 .4731771413552055 +98 384 .04225599764953329 +109 384 .3906110831381493 +118 384 .17527119981675526 +132 384 .5221496982010108 +134 384 -.39206601352067444 +148 384 -.047601910737074704 +164 384 .6992013620300819 +166 384 -1.100675443868505 +175 384 .5507210815217313 +182 384 -.6452755034988212 +195 384 -.167542552903813 +204 384 .12755800182938995 +206 384 -.2354646675430146 +209 384 -.7550347123730969 +212 384 .7706813552115328 +217 384 .9111286265492966 +224 384 -.10998563388468842 +232 384 .7195359182081459 +244 384 -1.5737202667984778 +248 384 -.32622262893458503 +255 384 .7083222857482272 +271 384 .7514712803494689 +272 384 .871246806413853 +276 384 -.02629142832838434 +297 384 .08536953837702782 +299 384 .6049660423647407 +303 384 .5431859364172819 +308 384 .8413094709102662 +314 384 -.6434544596529289 +341 384 -.21260169171017868 +354 384 .4085298778737873 +367 384 -.5119589493266961 +369 384 -.7301823501099272 +376 384 -.7998001095397348 +380 384 .0997211945527828 +391 384 -.2675472419935248 +406 384 .1841159788399706 +412 384 -.7504745133366767 +413 384 1.9067596049485145 +421 384 -.10318018370143958 +422 384 -1.1694813985581753 +435 384 .7916218725368963 +464 384 -.20821087349779793 +467 384 .2628392875715747 +472 384 .1103237961453821 +484 384 -.34554287262213096 +507 384 -.426933141391349 +520 384 1.3465602704041035 +521 384 1.0954909523996732 +532 384 .6358226263222646 +533 384 -.27562454524276364 +539 384 -.6619851955391759 +561 384 -1.2025383093236248 +571 384 -.6384813346587404 +583 384 -.6232096876862269 +584 384 .8691720172270474 +604 384 .06974360457419976 +608 384 -.6677918284379083 +621 384 -.8641167196708832 +634 384 -1.5417807569561983 +635 384 .07230058972906533 +646 384 .7765896581696252 +651 384 .4947110227894547 +671 384 .4200473858513284 +684 384 .34823907314666513 +690 384 -.9560281229088661 +699 384 .5091692678529337 +705 384 1.0368581729232065 +713 384 1.1843814531158505 +724 384 .1556769028490262 +732 384 -.2617419402464676 +734 384 -.30709560575485917 +739 384 -.2915101078199101 +752 384 .19261313917068762 +790 384 -.11857143629785877 +814 384 .24175362533139538 +823 384 -.008959071759263748 +841 384 -1.9096755888681947 +858 384 -.05164232941814573 +862 384 .5731281698113658 +873 384 -.12119786303139318 +888 384 .573152283273789 +891 384 -.20903185215204392 +898 384 -.25238084905802344 +913 384 .02180948610812293 +916 384 -.1745499550131464 +922 384 -1.6479470856280192 +939 384 -.44307201554024356 +945 384 .724663151701719 +953 384 -.21177478935327082 +957 384 -.8802867808772861 +965 384 -.6750668079097617 +977 384 -.6000149037733417 +979 384 .06875483469915977 +980 384 -.6359769655761507 +981 384 .746743475803647 +991 384 .9796513616913785 +997 384 -.0279326032916178 +6 385 -.35813788896592424 +18 385 -.2026416461567689 +29 385 .3828122933397264 +33 385 -.13377491813253845 +34 385 .054493362899867566 +42 385 -.030134356182265856 +52 385 -.5308706367915145 +59 385 .3295763361925502 +76 385 -.1939533222958953 +85 385 -.38000293923233647 +86 385 -.4216836641942362 +141 385 -.7869237560490768 +153 385 .11635291672187062 +159 385 .20406748380399184 +160 385 -.02570372770257895 +180 385 .09544976939555463 +184 385 -.4871926401986156 +205 385 -.46337636885702393 +206 385 .08586828992193435 +213 385 -.12086849200481085 +215 385 -.10318672995443903 +216 385 .35850419456540455 +218 385 .3320353801405521 +229 385 .42204911844999576 +231 385 -.1010095671324102 +236 385 -.30592865782564316 +240 385 1.1334542773780552 +243 385 .42025945053664027 +246 385 -.55305952291374 +251 385 .060476927730039425 +258 385 -1.1177106111710629 +268 385 -.048032056780623625 +270 385 -.8197727142691201 +284 385 .7247284255504857 +311 385 -.3312512108861166 +333 385 .15187619316125134 +351 385 .8453075758425234 +352 385 .7648581759120019 +376 385 .021308201647909003 +396 385 -.2965653701645091 +416 385 .704388963934401 +433 385 -.7495323664056791 +440 385 -.08951983222164656 +446 385 .553760586615844 +489 385 .5312831190935156 +491 385 .6246605839372668 +492 385 .6468873237937073 +494 385 -.28348790694802534 +512 385 .5542456989716192 +514 385 .3325132351588249 +520 385 -1.0212545634815229 +535 385 -.3684889449113129 +551 385 .713369266603515 +557 385 -.9968134232011188 +559 385 .47352544331243673 +561 385 .37382414614013804 +562 385 -.11149652204622297 +597 385 .15843935477309695 +614 385 -.4127457405095125 +637 385 .7845501347682481 +658 385 -.2469171478787667 +668 385 .5107544913576332 +669 385 .28758843802183454 +671 385 -.16267329277651515 +677 385 -.1295694055694802 +689 385 -.9591175020558813 +691 385 -.2780615521670993 +697 385 .8668014093297478 +721 385 -.9582711797478775 +724 385 -.15963830728757988 +735 385 .28102881713792666 +742 385 1.0120639697153597 +743 385 .05463736617298174 +761 385 .07937096575235145 +768 385 -.41541979893394776 +789 385 -.12219575020571513 +791 385 -1.089805996637721 +802 385 .3933014835500767 +817 385 -1.28097224235045 +820 385 .5501225178614219 +827 385 .4706206659040574 +830 385 -.527742936256365 +852 385 -.9341854022316154 +853 385 -.7946515460945927 +863 385 -.03992662174682957 +877 385 -.5514261247248772 +886 385 .38461084804553475 +893 385 .2834741689233648 +898 385 .1771486373510355 +910 385 -1.0864679163495796 +914 385 .8987677016141579 +922 385 .5646300621703308 +924 385 .25645662724524676 +926 385 .30500001165067664 +942 385 -.3113164529438875 +949 385 .8106443040460638 +956 385 -.31769609345488603 +962 385 .22578407059436062 +967 385 1.7096682962135161 +986 385 -.9591280683757131 +3 386 .13027668479761748 +20 386 1.441216847320422 +53 386 -.014925137907395261 +67 386 -1.6203118102648542 +76 386 -.1462126577995868 +80 386 -.17519919113502763 +83 386 1.2420855616472553 +86 386 .8507837640919754 +88 386 -.28911410393830206 +91 386 .4993616060437884 +115 386 -2.2020805987814387 +127 386 -1.3865085890508635 +130 386 -.7514578133590748 +144 386 .4612994730236596 +150 386 -.8120465198032849 +154 386 .5860151402914251 +167 386 -.9249869853546571 +169 386 .18369238274997796 +172 386 1.4472152609987976 +181 386 .42036289267988525 +183 386 -.9303142642106161 +185 386 .5425897179659116 +189 386 .5132719390455586 +201 386 -.0564050191602512 +211 386 -.7552817057683189 +217 386 -.7785404928980559 +235 386 -.04277979643751182 +247 386 -1.0938605096897802 +256 386 -1.1113993918432274 +274 386 -.9150822928501691 +283 386 -.9998707866582918 +298 386 1.309150436303913 +310 386 -.2187888719330237 +328 386 .29062254590915737 +331 386 -.02326851618466002 +348 386 -.38462441350575194 +349 386 -.010915292144015494 +352 386 .7115304573086247 +359 386 2.1511275705030997 +368 386 -1.7057807142553798 +381 386 1.681785179121947 +427 386 1.4568838303437501 +429 386 1.315847182555224 +455 386 -1.8181484207774143 +475 386 .8354677426625794 +477 386 1.3889257920494786 +479 386 -.5009504695352949 +491 386 .35592249186098507 +515 386 .23080165877378409 +529 386 .8309423103775059 +531 386 -.913435559293474 +540 386 -.13782836467338913 +558 386 -.14114022501527845 +567 386 .07893946192832765 +576 386 .1639201160374198 +581 386 2.113008686306582 +585 386 2.058360428978421 +599 386 -1.0648136976204392 +601 386 .16425852467159943 +621 386 -.1545906787240947 +641 386 -1.1138196956660644 +678 386 -.3770621771619874 +688 386 -2.4024992032812644 +695 386 -.8512379899976278 +696 386 -1.4146696944157053 +703 386 -1.3952886547998267 +709 386 1.1607615866499732 +711 386 1.8197958340298293 +735 386 -1.0828397015148068 +760 386 -.8692503756344404 +777 386 1.5945402856788722 +795 386 -.8579787649862897 +796 386 -.1330942608498572 +797 386 -1.2124676615066186 +824 386 -.22400449495766353 +828 386 .20841747552666814 +829 386 .3060208697527632 +833 386 -.1536194699106975 +835 386 .8546837577914813 +839 386 .4101979521208351 +843 386 .0829987893365286 +845 386 -.9420604615386314 +852 386 2.220295880343142 +856 386 -.7191554561416752 +911 386 1.2470329191314102 +912 386 -4.11208085161731 +919 386 -.47241457203090925 +931 386 -2.0368292461530006 +937 386 1.6115654546233285 +952 386 1.7149847666094513 +960 386 .11977855212602037 +970 386 1.6601165881098492 +974 386 1.3026455263532057 +986 386 -.6329209972218638 +998 386 -.8081471850273474 +4 387 .17367006663167323 +11 387 .15798206537411627 +16 387 .4233468574092297 +38 387 .8696094715109156 +41 387 -.28033048993947846 +44 387 1.0497817115864225 +56 387 .7307543416065725 +58 387 .6395914768564405 +60 387 -.01739948556701576 +73 387 .30447295333674035 +76 387 -.3389869804873322 +83 387 -.6942209468744297 +97 387 -.9488268993730387 +105 387 -.20839097090726788 +110 387 .3232050243245431 +128 387 .47255159016909715 +137 387 .7074507702469399 +138 387 -.1573532961560769 +148 387 1.2089705894996572 +161 387 1.0729338241659256 +177 387 -1.9182001862049567 +185 387 -.351993453879732 +189 387 -.9918064756467595 +206 387 -.17670002762022546 +236 387 .45644676439697196 +264 387 -.5684977933703764 +266 387 -.4089227876009326 +267 387 1.3310409663908613 +277 387 -.37798030366678315 +284 387 -.014106243306551823 +298 387 -1.1671715015798778 +320 387 .5518235465922048 +324 387 .39724781732653397 +329 387 -1.7098559524433672 +336 387 -.9241253170901096 +368 387 1.3070436846300586 +377 387 -.4147550738162361 +381 387 -.9301403814087299 +382 387 .7974054638664685 +400 387 .49952377957769684 +402 387 -.3641685272149614 +418 387 -.2717212519578376 +434 387 -.5377063504517895 +438 387 .1337871945225238 +442 387 .8212146954431125 +444 387 -.9766334733607116 +453 387 -2.0419289375572163 +475 387 -.738203572828009 +476 387 .9009031974013492 +482 387 .41237179532212903 +509 387 .3027729378994187 +518 387 -.9013169639338896 +521 387 -.0017686768485571033 +529 387 -.6768536021360303 +541 387 -.08234167286222965 +547 387 .571013209321875 +548 387 .9734058431156634 +575 387 -1.7042182149635206 +577 387 .2296276446017987 +600 387 .23191367998059592 +604 387 .0019662053058580597 +635 387 -1.7888447590433687 +658 387 .7795867383454357 +661 387 -1.8502519385954854 +669 387 -.4479555696060799 +674 387 .43967144286855936 +675 387 -1.9512972384276128 +682 387 -1.215109571990339 +702 387 .6891355114100501 +703 387 1.4275345405894189 +704 387 1.0562697014329416 +717 387 .29651626740670833 +719 387 -.3520964736871223 +726 387 .6850984968959275 +727 387 1.3381315508434026 +735 387 -.06766494393592223 +738 387 .004983902414180057 +754 387 -.7920106404915572 +768 387 -.14111032608853305 +779 387 .3132693626288305 +785 387 -1.145232831559039 +788 387 -.6833204745339638 +795 387 .4246192271094393 +814 387 .4953199016045463 +827 387 -.43285532863336285 +842 387 1.3298530422922747 +850 387 .20353882907651016 +873 387 -.2895657709804305 +884 387 1.122221236152869 +900 387 -.3734941184107621 +913 387 -.1710562719781629 +918 387 -.638336140305142 +919 387 1.732456369206737 +922 387 .39075050655093724 +931 387 1.7729449086797286 +945 387 .09640812779249361 +962 387 -1.3815289968355677 +982 387 -.06778100322192768 +984 387 1.1818214594948717 +988 387 -.6921043017831301 +994 387 .9607991050578655 +997 387 .4462820382081247 +25 388 -.7494914504772191 +29 388 -1.362131172031816 +44 388 1.1410624994454506 +47 388 -.5766637423834299 +65 388 -.7654609048983254 +80 388 -1.0122930483213184 +90 388 -.8352658191194183 +96 388 -2.2438245749031482 +104 388 -.1024514534056241 +116 388 1.6535190084920883 +119 388 -.47337465764036124 +133 388 -1.303558465688747 +138 388 2.188500115169987 +140 388 .44997581658980296 +154 388 -.5287739880530301 +165 388 -.15065813037278505 +182 388 -.5593812971995034 +193 388 -.0029644085747395 +196 388 .3470998175634832 +200 388 2.303050719311309 +218 388 -2.3726117773012394 +221 388 -.31726830281723184 +222 388 1.0228269356802047 +258 388 .8131195682634026 +287 388 -.2747311565213603 +298 388 1.0914926436226828 +304 388 -.1527360482067508 +306 388 2.15200717030824 +326 388 -.5510902273911632 +339 388 .47192064561734703 +386 388 -.33906123411289446 +393 388 -2.2328725992645206 +397 388 .844081791969099 +430 388 2.8688954913325824 +462 388 -2.9904204697883805 +466 388 1.2962000952246056 +479 388 -.02834679083704841 +484 388 2.0413413885459093 +487 388 -2.8574093578638458 +491 388 .09202726538528562 +511 388 -2.6970242673243563 +522 388 -.695846336547198 +528 388 2.1748450184265997 +531 388 -.348499264694746 +532 388 2.2892512816361 +535 388 -1.4073305188641279 +538 388 -2.2396271581475045 +539 388 -1.4756957112085747 +546 388 .32047614165965777 +565 388 -.058734146941911924 +566 388 .855901075257688 +570 388 1.4096191994225544 +576 388 1.535999020076933 +580 388 -.42790987043829326 +589 388 -.05183071880375957 +602 388 -1.1321582995929078 +605 388 -2.199954232542743 +606 388 .7619872070448173 +615 388 .05858518427225824 +617 388 .09949530076964169 +625 388 1.721442771721874 +632 388 -.4078555163183325 +645 388 -.768609094625368 +650 388 1.8980151713089564 +651 388 3.0024128836991135 +663 388 .16692071291718236 +689 388 .06842280886071259 +694 388 .6185318942380794 +703 388 -.5604538892567059 +710 388 .9549097885214939 +755 388 1.079739625865742 +759 388 1.3189463749083363 +760 388 1.3735498131096509 +782 388 .2291711258242049 +783 388 -.7592560457492177 +792 388 1.4012564131604985 +807 388 1.8388925147702233 +823 388 .4248513071267278 +825 388 1.652019320104454 +843 388 -1.930034738002964 +864 388 .015848899254886546 +880 388 .4100954209592569 +888 388 .7478087830633099 +913 388 -.36135390912453513 +937 388 .12144921603860809 +946 388 -.2591997732485807 +949 388 -.794202724946333 +954 388 -.8829412431441519 +974 388 -.8644012336937645 +987 388 -.42960026084210157 +992 388 1.260196762710049 +6 389 -.9141892816746839 +9 389 1.5141303596386222 +10 389 1.0085893856930106 +15 389 -.5561740728399351 +17 389 1.5555884416958752 +18 389 -.3340846832197538 +43 389 -.6788311920259934 +52 389 -1.4137619705309759 +60 389 .19709085004383647 +76 389 .6005318379744933 +81 389 .7409444608110554 +83 389 -.12069277658656348 +92 389 -1.877580210781224 +108 389 -1.2302515451352944 +109 389 .6638995152079359 +129 389 -.7486242704274185 +135 389 -.1413307603295157 +137 389 .41351069564459453 +139 389 -.03390975770271282 +143 389 -.3467917506313162 +145 389 -.21004500038484247 +146 389 .4064666673627472 +152 389 1.7300228378236722 +165 389 -.15627468607220393 +195 389 .09883168402974847 +198 389 -.2755233260936853 +209 389 -1.0008698008685777 +215 389 -.20854923487168645 +219 389 -.8391161938650047 +221 389 -1.4164212413719355 +222 389 1.606851127362174 +223 389 -.1112378732390666 +224 389 .17105681778862483 +228 389 1.0188265879849863 +234 389 1.1053635080470874 +261 389 1.183601692842846 +263 389 -.19721059552740897 +264 389 -.39303832990931076 +269 389 .32557783710269933 +275 389 -.14728079749411463 +282 389 .6193475430632251 +289 389 -.18170103133219379 +293 389 -.005423959137459938 +303 389 .05495077298838195 +316 389 -1.695024746114015 +325 389 1.6076611518085182 +330 389 -1.6322516466951522 +331 389 .1787123855968324 +333 389 .5466629163588581 +337 389 -.5235744819027311 +350 389 -1.2246059494525492 +353 389 .4998620172259589 +367 389 -.04861525480832837 +372 389 .67657746477428 +376 389 .998848370367501 +378 389 -.2342742156784453 +386 389 .9449459835599284 +406 389 -.4192346219392656 +416 389 -.03942510954237399 +417 389 -.2924962612211941 +419 389 -1.300898826743222 +422 389 1.7416976263020492 +437 389 .8685236908710412 +445 389 .8612201815686489 +447 389 -.028847003277248345 +463 389 .8609194546011081 +464 389 .9574038837191698 +501 389 .9163752241358869 +517 389 -1.2245944555282855 +522 389 -.83515427558333 +536 389 .5393793435985444 +537 389 -.898867009483459 +557 389 .431011766705724 +566 389 -.22520709817530155 +578 389 .20696188382675124 +596 389 -.9143914481579437 +597 389 -.05702605535491879 +599 389 1.0042641280415898 +629 389 .8526434225398234 +632 389 -.06646672327532677 +635 389 -.6805356804503908 +640 389 -1.069794619631856 +675 389 -1.163591421072311 +677 389 -.08621677062687019 +685 389 -.9127238073439966 +688 389 -1.2005519784165053 +704 389 -.3292442741313414 +726 389 -.23755022952492266 +736 389 -.5492282488186705 +737 389 -.012227068593051633 +746 389 -.6700637986992118 +756 389 .03375543437246152 +778 389 1.5917826522997427 +791 389 -.1716093347995624 +796 389 1.1462259893129085 +811 389 .1713455274176272 +817 389 -1.7494435787131903 +827 389 .9093846064643957 +832 389 .35208104207236246 +834 389 -.353811257631669 +854 389 1.1813736390318121 +880 389 1.109316010809711 +894 389 -2.1078551952270947 +901 389 -.8686915910654466 +903 389 2.1687784398366774 +907 389 2.1049805550379386 +925 389 1.507684865621678 +931 389 -1.1615251677279497 +941 389 -1.200374488164494 +972 389 -.27427571241664234 +978 389 1.2837248753029638 +980 389 -.66101157427764 +982 389 -.20587471420217884 +988 389 -1.8200741251340071 +996 389 -.07195232587566183 +16 390 .9058206085630911 +23 390 -.20617633238885724 +99 390 .5075879133259649 +120 390 -.8085667000753812 +133 390 1.9137882929396448 +140 390 1.9274933565833856 +142 390 .28409009587966366 +152 390 -.2347309499811356 +157 390 -.2539655419732657 +166 390 -1.2346912842832924 +169 390 -.4980447872601562 +177 390 2.4143161259185133 +181 390 .4363782244058385 +209 390 -.40587117426497304 +216 390 1.0645549673955907 +228 390 .3441265275943921 +229 390 -1.010310811710342 +257 390 .7973481124364662 +273 390 .15529180727939457 +293 390 1.1012902136973624 +298 390 -.6997866701337145 +333 390 .8913213288365092 +337 390 -.30350687288702005 +340 390 -1.4773299558691368 +341 390 .3965095141389709 +342 390 .7040560571210137 +352 390 1.7657205490769976 +369 390 1.2429307032374073 +393 390 1.28858512651142 +395 390 .29550663901990637 +396 390 1.4133651542477192 +408 390 .546739483890739 +409 390 2.2077444749420407 +418 390 -1.2039811016709132 +430 390 1.3804059511281352 +436 390 -.8955762507790687 +450 390 1.0452561688220021 +455 390 -1.892913166395885 +461 390 -.5907447529782128 +502 390 -1.2556138429827968 +505 390 -.44973925689766137 +513 390 1.248879696114888 +517 390 -2.034779627100512 +519 390 -1.1962890799545316 +533 390 -.7093553297781132 +546 390 .1825141548448958 +553 390 -1.7128155220088666 +560 390 -1.668300573358121 +570 390 .49914523216210605 +573 390 .9542783513208051 +577 390 .905513924308693 +578 390 .611307891454817 +584 390 .4262992904256242 +591 390 -.5036889550697188 +593 390 -.8815390072691662 +595 390 1.3913998458770616 +601 390 -.48794463199045496 +604 390 -.8714175704690639 +608 390 -.20253842070314027 +635 390 -.6951075990112351 +650 390 1.13579719643209 +655 390 .7621851870482037 +674 390 1.7666598677533956 +681 390 1.1397976099130964 +686 390 .9037747760225548 +687 390 -.041297417201707376 +689 390 -.3837122202437995 +698 390 .583188133756363 +712 390 -.47391974310757484 +727 390 .37181856112507017 +730 390 1.9963331399852782 +739 390 -.5394991718805597 +750 390 .8203875687089554 +760 390 -1.2448639414630822 +761 390 -.10703920525178622 +762 390 .4349335736286804 +798 390 .05644860347571501 +832 390 .9141686291238349 +845 390 -1.3594467412175777 +847 390 .8160022000111191 +856 390 .37618671754841543 +858 390 -.9249551443801285 +872 390 -.19600112183048504 +889 390 -.7479175159510673 +897 390 -1.4495645135934168 +902 390 1.187272187718301 +912 390 -4.590979919607499 +916 390 1.2868568799371691 +927 390 -.14984161809783297 +931 390 -2.2135480095233526 +934 390 .47325013186528164 +936 390 -1.7145412342620738 +947 390 1.853138935680188 +948 390 .8930684561781024 +964 390 -1.8683717334357548 +966 390 -.3511120216428582 +968 390 -.8939975335527591 +975 390 .19524909967492526 +987 390 -1.7612213339880245 +12 391 -.22626998779679863 +38 391 1.0528536230943342 +42 391 .5308043411259254 +49 391 1.2005580617870695 +53 391 .09588024184329959 +54 391 .37420828938428163 +56 391 .9670296113321472 +57 391 .87927936102684 +58 391 -1.3674573435848887 +77 391 -.938669115604917 +97 391 1.9123940843751002 +101 391 .37657404207763734 +112 391 .14958320584242113 +136 391 1.3231806298636908 +139 391 -1.0356322171963233 +163 391 -.44936111408063156 +199 391 -.9154114968994879 +217 391 -.31270262925085557 +246 391 -.14519243903044815 +247 391 .5034989694209002 +250 391 .7718494202703323 +251 391 -.8934316661587806 +287 391 1.0597290304211828 +321 391 -.5773902079132214 +331 391 -.49273547137525064 +345 391 .8291085166012163 +354 391 -.014264893979024362 +355 391 .5974139137884836 +371 391 .35266872908634966 +379 391 -.024095962232706727 +384 391 -.5798744644683741 +411 391 -.21263793756570015 +432 391 -.49407249819515175 +433 391 1.0905655457848165 +434 391 .16600220284942216 +455 391 .5106213653981285 +467 391 -.3658317432419069 +471 391 -1.4569412703911009 +481 391 1.0811918988444107 +509 391 .06581231823535565 +523 391 .504896045117861 +530 391 -1.1501715923212392 +548 391 .5248502461923632 +550 391 1.1070381126243045 +555 391 1.1329693897935482 +561 391 .1710866644470423 +563 391 -.21968373149268317 +585 391 1.3690510588274694 +597 391 -.4235256261121772 +600 391 -1.3095649804063538 +604 391 -.942606223125683 +606 391 .33570868843750157 +610 391 -.8753076962533002 +625 391 .34042539127330823 +629 391 -.31687992631741 +631 391 -.22110760431864307 +639 391 .16409444216791425 +665 391 -.2199676269333209 +682 391 .21549941142578177 +692 391 -.6971274181043849 +713 391 -.17665405951213595 +731 391 .8774823490219161 +732 391 -.3881120496589042 +735 391 -1.1151404930618147 +744 391 -.31667922352252326 +797 391 -.07509721827718235 +800 391 .4945708600035828 +823 391 .7556426295161158 +828 391 1.2349249742876944 +868 391 1.6318786676575843 +888 391 -.1898562827461857 +908 391 .8465442285758796 +909 391 -.33927871506793045 +911 391 .5307232484780621 +918 391 -.21536666270389146 +933 391 .9852993642584238 +951 391 .357869220887973 +997 391 .13002818946445355 +3 392 -1.24918941564308 +15 392 1.5511780473186387 +31 392 1.334359629125944 +33 392 .5385758414802317 +35 392 .47557754619723486 +53 392 .3131452006600744 +65 392 -2.542896315313825 +75 392 -2.563760114919346 +77 392 -1.1952424687933667 +96 392 1.8928441611651166 +97 392 1.7418591008412552 +120 392 -2.5040829141545116 +137 392 -2.7367866292043037 +138 392 -1.5916072227839584 +144 392 .5233799038716751 +162 392 2.672076914730942 +180 392 -.5849787137942737 +182 392 -.5654535793759359 +183 392 -2.666619940286745 +201 392 .171311010564828 +211 392 -.5125077780119393 +221 392 1.0595580812428553 +225 392 -.8479363172269897 +236 392 .18345384589152022 +247 392 -.4590797070312971 +257 392 -.7597381504060066 +258 392 -.9073618368573968 +260 392 -.07567927074272753 +281 392 -.44455947187451555 +305 392 .17030544215323756 +326 392 .08243136719293645 +330 392 -2.1057848366478984 +353 392 .5659399946945021 +355 392 -1.1359376938402534 +365 392 1.3283921225217297 +372 392 2.674899752049602 +391 392 1.5055753367583862 +400 392 -1.1432449303113172 +417 392 -1.5283686838373498 +420 392 .032604697066390895 +439 392 -1.5305121378391051 +443 392 -.1469097418258926 +447 392 1.558394003879124 +452 392 -.7239751814259591 +454 392 .5852450234232781 +458 392 .43276737062246545 +460 392 1.609166745713888 +480 392 .4025196474060459 +497 392 -1.1020174568460614 +507 392 .0822170092221079 +515 392 1.047299502262137 +518 392 -.3805206103529321 +532 392 -1.12442329732395 +533 392 -.19724178536714898 +560 392 .4420089212635798 +563 392 -.333615768986807 +565 392 -.13301237170511682 +572 392 -.4130443492730909 +605 392 2.5275849958618877 +611 392 1.2027897579297506 +618 392 .043218539899809075 +629 392 .5663544325226928 +641 392 .4299628399432532 +642 392 -.4817941719923422 +645 392 -.4951567795645344 +649 392 -1.7070243942650207 +664 392 .7814645529410589 +679 392 2.7590700016588587 +688 392 -.9898977653981473 +724 392 .599099436318943 +748 392 -.36532696051112434 +749 392 1.4759893534779094 +750 392 -.008336238633927961 +754 392 -1.7770844902959424 +761 392 .1506863684109304 +762 392 1.548541311050428 +772 392 1.928215625987456 +783 392 .8247529891010685 +847 392 3.6416998092309703 +852 392 1.3619424272611953 +867 392 1.4420849410549497 +868 392 .6130298414817733 +869 392 3.3815125593425006 +872 392 1.083568169663732 +876 392 .031564893353282775 +906 392 2.1784574755824857 +931 392 -.3491389021037905 +952 392 .7554365755290604 +962 392 -1.05134172910693 +967 392 -1.1340433001425971 +970 392 2.5191654183215006 +976 392 2.50032057721461 +978 392 -.5821772431381338 +980 392 .8347262503702048 +984 392 -.055552592495859754 +8 393 2.026434011054169 +34 393 .049127325475013035 +40 393 -2.6634478680389893 +42 393 -.12570383220279768 +53 393 -1.7415584392571342 +56 393 .14655050378293877 +65 393 -.5888077920098412 +80 393 -3.657843839776821 +98 393 -.8853881719188758 +116 393 2.0692864192617 +119 393 -2.0759148300958463 +122 393 1.3437774394649322 +123 393 -.012441213245711596 +127 393 -1.5484805309019227 +132 393 .952410324166536 +135 393 .05024079298062836 +149 393 1.0964425826557682 +156 393 -.305155563639803 +166 393 .37158638832441415 +173 393 -.026059768621542412 +205 393 .29154729879018715 +207 393 1.5077083297452016 +215 393 .5231929230016884 +216 393 .8085856849749513 +218 393 1.0086986045942419 +230 393 -1.0653975290384754 +235 393 -.5136778185710771 +252 393 -1.3398354761071634 +258 393 -.658384123370508 +259 393 -.011922694830450137 +260 393 -1.358521295243788 +268 393 1.5404269509261277 +270 393 -.5127649204567147 +279 393 .4325496480438249 +280 393 -1.7317886969159733 +292 393 3.786026355333775 +293 393 .7672426237752058 +297 393 1.6279503764979377 +320 393 .7903241243081344 +330 393 .7765386598042797 +331 393 .42938374608987206 +341 393 .32416832311603516 +342 393 -.08746893652466059 +349 393 .15018576469277983 +356 393 -1.8344081746104253 +359 393 .2447848673030835 +366 393 2.5311008542650613 +371 393 .9885046949599875 +378 393 -1.7737801370535653 +381 393 .3808230306712047 +388 393 -1.333589400055356 +397 393 -.14783038799805825 +418 393 -1.4012690165651502 +452 393 -.25495085141967727 +479 393 -.6272435440048716 +489 393 1.7879998183027785 +497 393 -1.6537734942333469 +503 393 2.4144383285012863 +511 393 -.43211655395622905 +516 393 -.7099295049277334 +522 393 .46711398543009164 +533 393 -.24387104640517177 +537 393 -.26561387350819765 +543 393 .4179128072445637 +546 393 -.09250374413815034 +550 393 1.5462589929318513 +578 393 .9678969543076166 +611 393 1.268096266221643 +645 393 1.5444636293318867 +658 393 .8060611310274813 +663 393 -1.1299024190532876 +670 393 1.0323618340000094 +676 393 2.008773668132363 +679 393 1.066033691656148 +685 393 -.5196895565729115 +691 393 -1.7377132436082525 +695 393 .7274039462658528 +696 393 .04099083577090386 +703 393 .1973539794035567 +704 393 -.15320641159721077 +712 393 3.5549120641667127 +724 393 -.17289111819243802 +730 393 -.5337405268032336 +741 393 -1.8373392608722579 +783 393 1.7153145374460625 +800 393 -1.0634913260255932 +803 393 .00038971031511053633 +806 393 1.4464206938009994 +822 393 1.7382851829206891 +833 393 -.9980022849910055 +835 393 -.5866794243948544 +847 393 .6131919053788863 +848 393 -.20986729731021225 +850 393 -.016414834440418746 +853 393 -.8083198003619573 +858 393 1.285791275828419 +872 393 .192670808979697 +881 393 -1.4660231500883563 +895 393 -2.802259592453891 +901 393 .12087502174391507 +920 393 1.9941561126390626 +941 393 -.9631247311295085 +943 393 .08982241946739913 +951 393 -1.4194615171818024 +958 393 1.4890347058979763 +968 393 -.3772062848338931 +985 393 1.8805241970752828 +987 393 .4468807296058154 +2 394 -.987884386983258 +21 394 -.34514911664409886 +33 394 .8022848621424044 +36 394 .15449033666339795 +51 394 -.03340536979514361 +59 394 .4200954974768811 +60 394 -.05411303088855396 +63 394 .5975311297343584 +68 394 .24650520123106362 +84 394 -.7980367131668216 +89 394 .6993710545028163 +95 394 -.49810076684547255 +118 394 -1.0939489052492626 +120 394 -.8999902280760128 +126 394 -1.4538933825493865 +131 394 .28751435482508236 +142 394 .39767694094898165 +143 394 -.3390748827274468 +147 394 -.31981973462788105 +153 394 -1.3834317770228557 +154 394 .2769467492699202 +167 394 -.3191574510099442 +171 394 .31312425511554687 +198 394 .2730307538904041 +201 394 -.6853273382362594 +207 394 -.1651066486533506 +233 394 .7605082351359774 +240 394 1.9519341944653865 +246 394 .021071361043061884 +250 394 -1.221280032353998 +258 394 -.184746955117419 +281 394 .07614024421386835 +309 394 .4090515158556296 +331 394 -.06395114333957032 +332 394 .5014466577699441 +357 394 -.9058492538248861 +370 394 -.3727472164427008 +383 394 .028329122376931318 +390 394 -.054785966398209845 +392 394 1.010566609741831 +395 394 1.28506287931828 +398 394 .2554674386089276 +399 394 .46807292089236174 +409 394 1.0317920248208512 +411 394 -.2681075010113405 +414 394 -.46829283129508537 +421 394 1.2488563195970315 +422 394 -.9533090105036244 +445 394 -.17221728386285895 +448 394 .05637998549709519 +482 394 .2722149814374079 +485 394 -.09127770003092744 +495 394 .6206796648764015 +524 394 -1.24188052904056 +546 394 .7686443132152856 +549 394 -1.0417457466753879 +555 394 -1.1165154784861975 +565 394 -1.218639798317013 +575 394 -.6078943551169154 +581 394 -.9846336398545535 +593 394 -1.1098429104914005 +629 394 -.7373852199907822 +632 394 .21954539598320674 +648 394 -1.522509169136404 +657 394 .8770499778638057 +659 394 -1.4135577037750537 +672 394 .5654431295894665 +673 394 2.275173074414481 +681 394 -1.852093149145454 +699 394 1.0812181161350816 +710 394 -.1582909567738796 +714 394 -.44645522108140634 +742 394 1.5041964990155359 +751 394 1.0840915660691337 +754 394 -1.0449765921455827 +763 394 .4996282573430978 +769 394 .4440031715914448 +770 394 -1.3599126681856812 +785 394 -.2686705020502598 +789 394 .2337014166362592 +804 394 .8763748249005542 +808 394 1.6171302516095905 +825 394 .48599680423681463 +826 394 -.820681361314428 +841 394 -1.1837069493944452 +845 394 -.17369634350695584 +846 394 .45440681576327124 +848 394 -.6265002791685564 +849 394 -.7796178550557938 +855 394 1.4990458089834995 +879 394 1.6610188252906386 +880 394 .5380621825631512 +883 394 -.15413915806592243 +903 394 .40664909896193546 +934 394 -.29019736502102156 +949 394 -.5730320593505938 +968 394 .619965456259232 +974 394 -.8793899509011934 +975 394 -.6305559041671934 +981 394 1.1902606552732686 +983 394 .5114523009105766 +991 394 .7540990325273147 +1 395 -.3441805582734879 +4 395 .014195423919503212 +11 395 -.7419591332026038 +18 395 1.0922335343833036 +27 395 -.6782580062212328 +28 395 .8450078191797763 +46 395 1.2890336177748414 +72 395 -1.0605065794417436 +77 395 -.2267645814794303 +89 395 -.3561502383507836 +100 395 -.38955727589078265 +108 395 -.5183811999440091 +114 395 -.5690509649339801 +118 395 .46697063015580986 +122 395 .6591981145129646 +124 395 -.5873906979510659 +134 395 -.9572562599252675 +135 395 -1.3271428008678336 +138 395 -1.145664149660464 +141 395 -.7974632580218943 +174 395 -.5609422697915625 +194 395 .31868915477764537 +198 395 -.5321627344954514 +199 395 .0954180725885122 +206 395 .5448882496841241 +231 395 -1.3677611933663034 +253 395 -.3150687547399935 +270 395 -.6063739640751444 +280 395 .07861103348770332 +285 395 .336025295546758 +295 395 .7175054464516101 +308 395 -1.1128555619814717 +325 395 -.03855791134968417 +332 395 .9100362052213775 +343 395 .08649382783016668 +364 395 .6443231448953954 +369 395 -.07776820350014423 +373 395 1.148842450433671 +387 395 .2954598418890571 +388 395 -.6029642598114878 +401 395 -.8975176367488554 +408 395 1.0821047617953115 +423 395 -.3075724283694393 +427 395 .5564470278382394 +431 395 -.6587467528225229 +433 395 .12895571515137624 +434 395 .11090952274824364 +440 395 .07705618329710784 +451 395 1.5617502716651814 +455 395 -.9380999430544942 +475 395 1.0560280906159814 +495 395 .6762165916416801 +499 395 -.3941692200792268 +546 395 -.2057983672488521 +553 395 .6015050759328713 +556 395 -.03532494192149329 +575 395 .5506635544537385 +581 395 -.6874372383653413 +610 395 1.2136917624390895 +611 395 -.5633411669027143 +615 395 .48170891026274704 +620 395 -1.2628997924115088 +622 395 .8852250316763488 +635 395 -.8946663555925836 +650 395 .2224649655150123 +656 395 .3957814708617003 +681 395 -.07184150301449285 +695 395 .5540215516417614 +735 395 .873383713179858 +742 395 .8057806243453811 +761 395 -.10422954662087132 +764 395 .02407191366656783 +769 395 1.018565725452802 +782 395 -1.21924281913102 +790 395 .42382320252545025 +796 395 -.6375586163986002 +813 395 -2.4987522032731935 +821 395 -.21387430532756263 +832 395 -.5795681996546717 +856 395 1.6523452568788886 +863 395 -.8461088944865188 +879 395 -.19086002064560775 +887 395 .6632628728789601 +894 395 -1.6377576097127136 +901 395 -.2629578602916605 +906 395 .07661458898293282 +942 395 -.6263690581599142 +949 395 .6527970950062574 +963 395 .3015286092001028 +966 395 -.9431066007202518 +975 395 .007637348697563558 +978 395 1.1041299303610617 +986 395 -2.300085999586261 +995 395 2.1562047321226747 +996 395 -1.274086670478211 +1000 395 .8116934028752453 +36 396 .2674041570696407 +43 396 1.3862157390838046 +49 396 .4589105314673871 +52 396 .31891461882779654 +67 396 -.4803817846517771 +68 396 -.3643393866488644 +85 396 -.6318062232386179 +90 396 -.09452041872289678 +106 396 .5710816570343797 +109 396 -1.2009995429765439 +111 396 -.31412093960916493 +115 396 -1.2754535079666223 +116 396 1.3464143853687327 +151 396 1.1426131746433752 +153 396 -.04456652723456467 +169 396 -.2528255892505593 +179 396 -.6994029119986711 +193 396 -1.488573086273325 +197 396 -.09900748004658119 +200 396 .49575391462523616 +217 396 -1.1112015582529575 +221 396 .96919884523494 +222 396 .4304171295138739 +223 396 -.7635471813038595 +227 396 -.4766926828418513 +229 396 -1.460779011032478 +238 396 1.089075244073291 +240 396 .5514836070359119 +247 396 -1.6974803188055156 +293 396 .13343240477853685 +309 396 1.1363571079753991 +310 396 -.5708952149955135 +314 396 -.12061808056845506 +318 396 -.20441257902362509 +333 396 -.11528543491528351 +335 396 -.11308032022455101 +351 396 1.331021449796126 +353 396 1.0778739491103562 +364 396 .2521141949173863 +373 396 -1.9150145820263431 +374 396 1.4640541634096695 +375 396 .8869768778967544 +389 396 .3257168880834941 +415 396 -.48022748403023485 +426 396 -.2597185227293618 +429 396 1.3379158726251252 +439 396 -.1588397854374015 +448 396 -.3272367554504326 +453 396 -.39952447203398134 +455 396 -1.9849129988597658 +457 396 -.44255638138372866 +465 396 -.07082180716044634 +475 396 .4940681566525192 +514 396 -1.085740497922583 +515 396 .26007265784190114 +519 396 -.48947398382151375 +523 396 .8268095946394809 +524 396 .04453496436552537 +529 396 .10708028633395175 +545 396 .8135172081359503 +546 396 -.7592847486430601 +566 396 -.06690471197185713 +571 396 -.14795348665773644 +593 396 -.5153962672572902 +595 396 .11446981253474464 +619 396 .3251129476063849 +622 396 -.6085041893310855 +630 396 .16737081395334447 +648 396 -.28687040352923887 +660 396 .9068965918859433 +667 396 -.12320265410591465 +674 396 .5298896668712197 +679 396 -.6812447719228677 +691 396 .7154035154575717 +704 396 1.23474711554723 +706 396 .7434463921903294 +709 396 1.4819474813791889 +712 396 -.46988107117058825 +739 396 -.42888009974317537 +740 396 1.5943820435854907 +748 396 -1.150736404411019 +749 396 .7298438717492551 +754 396 .38985325756798184 +759 396 .22872226436049745 +785 396 -.30515378899844586 +814 396 -.43364164262501326 +819 396 .7228565129250659 +848 396 .12318689133255722 +850 396 -.47060922884738643 +873 396 .04652148995536713 +886 396 .4311057194332664 +888 396 -.9854738404452328 +890 396 -1.0763788090017525 +907 396 .6725853259182304 +912 396 -3.3461893475904105 +922 396 .07155080908142653 +925 396 -.32238634101374464 +931 396 -.992255349391528 +935 396 -1.4114926265584444 +940 396 -.06775540156450487 +943 396 -.5320989691678402 +948 396 .9958416948530551 +960 396 -.3366512122772111 +968 396 -.4677784274555854 +989 396 .5773310984350859 +14 397 .7869681810533029 +18 397 .6146095567475242 +26 397 1.0194123631133907 +30 397 .07373664586409456 +40 397 .3041269926912047 +43 397 -.6741089163880053 +54 397 1.2310090279295833 +103 397 .2309314754185844 +114 397 -.26737748602447364 +117 397 1.9397277082124191 +118 397 .33614270081043107 +124 397 .2588374929723994 +142 397 .47440710449873713 +143 397 .40630536384622756 +151 397 -.9941673193871858 +157 397 -1.5111208826996143 +167 397 1.7883401899518183 +174 397 -.1483532967319794 +189 397 -.7346837559354632 +198 397 -1.0507217823137291 +212 397 1.0881570995378391 +222 397 -1.6949272006053557 +225 397 .8347445007405645 +242 397 1.6865558336449995 +251 397 -1.8540570985205396 +270 397 -1.4767462572148744 +312 397 .7068730138175019 +338 397 .286294065231168 +343 397 -.6375851387008558 +344 397 1.1216018437659447 +348 397 -.12380687235498329 +367 397 -.2949660655377137 +370 397 .2100467257158486 +377 397 .7251212955480119 +382 397 -1.4667224443979436 +390 397 .0849470351111931 +391 397 -.24286177367743966 +393 397 -.24662948637167792 +408 397 .3120644271871689 +416 397 1.2350966192658765 +418 397 -1.3376313184786917 +432 397 -.6770957959224989 +434 397 1.3055339645895967 +439 397 -1.9849156462260922 +447 397 .4319244477125763 +454 397 -1.0812490276186444 +462 397 -.5504089827525774 +465 397 -.7608753292569913 +487 397 -1.7346004809542082 +490 397 2.4067215395023385 +508 397 .11439868106469256 +533 397 .08415302490583787 +539 397 -.9926487104522654 +561 397 -.7816713459886775 +565 397 1.0090622420945143 +569 397 1.6082971206958545 +574 397 .2754146948869851 +587 397 1.0796830456494526 +589 397 .6237569504855451 +594 397 .03264992454661368 +595 397 -1.4484305645782254 +600 397 .3316422114264448 +607 397 .490501225787857 +622 397 .15366774683921294 +639 397 1.024807664855685 +652 397 1.2533008207157526 +655 397 .02455792129189907 +659 397 .6757786919751249 +664 397 -.3745048213961951 +666 397 .5724713974120719 +675 397 .7485719524473248 +678 397 1.849564798664288 +686 397 -.5091097280919934 +688 397 .18773502277477075 +696 397 -.2899093406198403 +697 397 2.117347913436594 +705 397 -.16413835102421875 +707 397 1.3400515078111164 +727 397 -.23135137702129116 +729 397 .32188275350186246 +734 397 .6525034600840736 +742 397 -.9041777645096746 +745 397 -.7960517673605961 +746 397 .2186261488736938 +780 397 -.6244194440103503 +787 397 .41580402817627876 +798 397 2.2139847626275104 +811 397 1.2117575735928476 +812 397 1.4225086381288214 +814 397 -.8071055059095987 +852 397 .2306922886011502 +868 397 -.5525826573069358 +870 397 1.1289512774050834 +893 397 -2.3237722270655734 +900 397 .7144202590031317 +907 397 -2.024302438480289 +913 397 -1.2674188418836814 +922 397 -.3284986479009166 +933 397 .9956407118463395 +941 397 -.40497653255574323 +985 397 2.1018811842452627 +997 397 -1.2206269343984366 +3 398 .8313634632659698 +7 398 -.41973248649363915 +11 398 -1.1346409224128102 +17 398 1.4517309905417648 +18 398 1.4486659882609771 +19 398 .5013629892663357 +22 398 .7869775744495358 +43 398 -1.470953598693033 +44 398 .09256507878473715 +48 398 -.9055123460266279 +56 398 -.8230830062005956 +58 398 -.20188765736598274 +63 398 .10703429959781949 +65 398 1.3853665965386395 +72 398 .49761492211470426 +76 398 .9006127822743757 +116 398 -1.654925369775807 +139 398 .25979995099817005 +144 398 -.17085630539717545 +149 398 .324163610993388 +163 398 .7269004818442828 +193 398 -.963921165205455 +219 398 -.33688835412658547 +223 398 -.08160554555651185 +232 398 -.5286554041925464 +240 398 .44223425200375654 +241 398 1.8205878075252928 +244 398 -1.0102549853645773 +247 398 -.11811640561762823 +250 398 -.28173677791091745 +256 398 .029755893751903795 +267 398 -.17392430483814697 +275 398 -.3511899131998159 +278 398 .3563681844883625 +305 398 .1318526133703225 +334 398 1.2349908286276625 +357 398 -1.6543443602598984 +358 398 1.0050231853522906 +359 398 -.38722777109825096 +380 398 -.5439294810734856 +383 398 -.9310763519870686 +384 398 -.8021734060496792 +395 398 -.04348096873266995 +398 398 .28239757511321056 +413 398 1.2810416909062379 +432 398 1.5101764954337737 +458 398 .07987871379524908 +469 398 -.5503235012517618 +495 398 .7757219774545953 +522 398 -.8423786631923943 +530 398 1.7341584883714878 +533 398 -.1494880040029475 +545 398 .12663459358903587 +559 398 .4289849554723999 +565 398 -1.665796310977542 +566 398 -.7750648038191851 +571 398 .6903764062023784 +575 398 .044061716591300044 +577 398 .33271030467110113 +589 398 -.4533411259601846 +591 398 -.17997638063173288 +597 398 -.32936771398522025 +598 398 .3778671562629646 +604 398 .07219468384397047 +618 398 -.9123051966893332 +636 398 -.35167951234679146 +651 398 -.7699591376709957 +673 398 1.4512772264562044 +688 398 .4564401399879505 +690 398 -.026244245186446774 +692 398 -.6197296982357315 +699 398 -.4997110438445468 +705 398 .14180320768127697 +726 398 -1.1278419002660873 +745 398 -2.372341361119334 +752 398 .10680244156240012 +759 398 -.483781926819394 +764 398 -.6359513609451235 +767 398 .350310050301894 +785 398 -.02795644604274046 +791 398 -1.440060607203778 +792 398 .16741670084010085 +794 398 -.8619864009177672 +802 398 .9377568389928834 +812 398 -.6147004748358494 +815 398 -2.1034624538013875 +823 398 .128579151727103 +824 398 .20685752853781605 +825 398 .6915105101011119 +826 398 -.7493081330032392 +839 398 -.9909632731544982 +840 398 .39647726555163787 +864 398 -.43654044311808754 +882 398 -1.2299377641351767 +893 398 1.2143923859402848 +894 398 -.44592217099439213 +908 398 .6815591199433457 +913 398 1.2734522348743025 +928 398 -1.1025239487116432 +931 398 -.76003036195758 +942 398 -.7631155495449125 +945 398 .3075356627408109 +954 398 1.1768563604372142 +962 398 -.5231606050440674 +1 399 -.07701285332516163 +20 399 -.6535958502503338 +26 399 -.905492913698291 +54 399 .31954150490029 +56 399 -.29478635931666014 +71 399 .28682091629800593 +81 399 1.5168884159891571 +86 399 -1.0342496279741444 +100 399 -1.7959772959332978 +119 399 -1.0611798578769123 +128 399 1.3873583233688904 +129 399 2.539599108963575 +134 399 -.2867448393223024 +157 399 2.087241199315876 +158 399 -1.4055868415107111 +160 399 1.9259858880593421 +166 399 -1.838667084105931 +168 399 .40192465927645143 +182 399 -.23046812060678384 +186 399 -.9639234376777971 +195 399 1.555373799202001 +208 399 -1.3459763555773854 +210 399 .3814963677962262 +223 399 -.2925734777123156 +225 399 2.2230950913231395 +229 399 -1.2673185907449922 +241 399 -1.9658133791213703 +263 399 1.4137019958124315 +264 399 -1.3558683801434335 +276 399 2.9836665435702048 +286 399 -.4357864047496345 +288 399 .15082498126712168 +303 399 1.4569063952071437 +313 399 1.3117439888405162 +335 399 1.3988403607698194 +371 399 2.3588489072172463 +378 399 1.4755442019303466 +405 399 -1.395409291252324 +412 399 -.19789437752566363 +419 399 -.2848101742568359 +429 399 1.4742888071971467 +431 399 -.5571530199541518 +445 399 .025699589595859437 +466 399 -.7192442114633831 +473 399 -1.6324165585914425 +478 399 .17492572094720807 +482 399 1.1240558468521706 +514 399 .12758604557352865 +515 399 -.11598929912449275 +537 399 2.2454731055533776 +540 399 -.3031592829628304 +542 399 .5030420464545636 +553 399 -.139575214916643 +568 399 -.6479892662513603 +574 399 -1.490426379718168 +599 399 -.7514885062605208 +602 399 -.9676373522762054 +606 399 -.32243361367471923 +611 399 -.29376563400546024 +616 399 -1.286188020492739 +617 399 -1.5526311346209307 +621 399 -1.5493467496691087 +634 399 -.9595728509921841 +647 399 -.40728407195510097 +676 399 .7863849837020606 +693 399 1.3876917436020917 +727 399 -1.1354909306943681 +747 399 .2306035366309601 +748 399 -3.3814215441432025 +761 399 -.421948877399115 +810 399 -2.325623299751625 +813 399 -2.4239489947527764 +850 399 -.5063606487653586 +862 399 1.644108147664758 +873 399 .42367700649463425 +883 399 -2.4279753049737023 +891 399 1.8798185172325887 +899 399 -2.6133669079665554 +930 399 .5403036251994664 +954 399 .4489137492471368 +966 399 1.7473698216008604 +968 399 1.3573913688632668 +2 400 1.795654079212321 +12 400 2.0607823158039666 +16 400 -1.0742385136889037 +31 400 -.3647024751072061 +37 400 -.6011086825361374 +42 400 -.323908576428113 +50 400 1.3727184992572643 +51 400 -.5225422024883114 +58 400 .8973070044115776 +63 400 -.7367824068687696 +68 400 .004580874620008071 +99 400 -1.6796079664815717 +100 400 -1.2302394275721122 +103 400 3.102699510970699 +104 400 1.6435546347494019 +108 400 1.0473586849564918 +119 400 -2.2700139934679817 +129 400 -1.0108120405439933 +147 400 1.4068834995232042 +149 400 .7596856577148489 +154 400 .7652205513788842 +168 400 1.2349382863334288 +172 400 .08763311654757697 +218 400 .8095937933550372 +227 400 .06286867878951312 +244 400 -.3293282913485022 +270 400 1.4531280134358326 +276 400 -1.0712497464343367 +294 400 -.223949607025164 +297 400 .9238967884212599 +312 400 -.00613977230355023 +338 400 -.43341892739288623 +343 400 -.07122291584015311 +350 400 .7474512517799681 +352 400 .07734024677731238 +353 400 .2969334463602482 +355 400 -.11781979132255856 +359 400 .639988699119324 +371 400 .42469168910857297 +378 400 .4158652362865458 +391 400 1.3013416997225957 +400 400 -.9622523832737061 +401 400 .8945920542550644 +409 400 -.8411030422964203 +414 400 -.5099764339647201 +424 400 .6813677497124001 +430 400 .15173057485353422 +433 400 .0018492176830134524 +451 400 -.01692900274740447 +458 400 -.4138821984101584 +473 400 -1.0208065999111833 +485 400 -.3351487093538529 +490 400 .17757311412306012 +506 400 2.047361633851823 +516 400 2.4062389882748167 +521 400 .2743575612329623 +524 400 .4035892680808948 +541 400 -1.181557042392507 +548 400 -1.280088796754261 +559 400 .09521763817079985 +568 400 1.9345470764198098 +569 400 .9745963008399668 +571 400 -2.4316170102093637 +576 400 -.668661892082038 +584 400 1.1014229315053554 +602 400 -.4629174870208853 +603 400 -.923807093959425 +604 400 -.7433142311294835 +618 400 .8361749949313707 +686 400 .6982936306627657 +703 400 -.2697357816439335 +706 400 -.9508058197994913 +714 400 .6379095124019137 +715 400 -1.1195134903051098 +720 400 .004233293188751555 +721 400 1.1281318354165388 +736 400 -.7831677095293095 +743 400 1.3514557991964542 +758 400 -2.175957600597057 +762 400 -.7657127570334334 +791 400 -.006843526186975729 +798 400 .7616333659696093 +802 400 -1.2857751793698633 +803 400 -.7587801955417824 +824 400 .6468656824012204 +833 400 -.27950032320202617 +850 400 .4022090458328346 +851 400 .4747504514642647 +872 400 .5009014497518826 +883 400 -2.1115056659794935 +902 400 .7983190717792507 +921 400 1.7862974484251501 +949 400 2.6441434328813265 +950 400 -.7175591688082789 +963 400 -2.5426869367833627 +966 400 .9279922951686524 +981 400 -.5002342548165175 +6 401 .5837789792092938 +7 401 .2748985330718749 +19 401 .7486093109593873 +25 401 .6890246029956135 +37 401 -2.075818822702163 +55 401 -.40225396513078504 +57 401 -2.035423899884006 +61 401 -.2309594410769322 +65 401 -2.5336611223392675 +68 401 -1.1873138293224503 +69 401 -2.051002732141677 +74 401 -2.250730464484084 +76 401 -1.725748518182466 +109 401 .021921753874783647 +110 401 -.2847465907297456 +113 401 -1.2927397059300716 +118 401 -1.650888322309639 +126 401 -1.1115671840883685 +137 401 -2.3178532524591167 +146 401 -.8109868601024824 +174 401 1.2300915102353704 +177 401 -1.6854102094726413 +181 401 -1.7030363502440835 +185 401 -.06369330032898673 +187 401 -.09570286167580888 +195 401 -.2960461561349368 +197 401 -.8564358790467608 +218 401 1.0202944191480525 +223 401 -.04446375990054255 +235 401 -1.7112625513160975 +236 401 .450181529448648 +242 401 -.05375933878901787 +244 401 1.9014535875415004 +246 401 -.06313956560633413 +247 401 .7948707154016813 +252 401 .4791224504590725 +259 401 -1.3735259296095284 +268 401 -2.399374366440073 +285 401 -.46319080230654375 +286 401 -2.4360932017546477 +291 401 .9780730073151883 +301 401 .6735408076050365 +309 401 -1.054622047734336 +312 401 .16517296312712687 +324 401 .4795375108931788 +329 401 -.5170852748414974 +332 401 -1.1187690678097832 +374 401 1.0136359273605924 +400 401 .22598387574030293 +404 401 -.8611427670699159 +413 401 -1.476352527182812 +417 401 .6376730928713145 +464 401 -1.9286904833325844 +466 401 1.1118832326968306 +475 401 .24705102276632082 +488 401 -.5321552628030422 +491 401 -.21978741340429975 +501 401 -1.6164963842554971 +515 401 1.8409818572732595 +532 401 .10962330561497576 +535 401 -2.167412734029005 +548 401 3.146161187117504 +553 401 -1.1441813708012205 +555 401 1.4592238466458023 +558 401 -.3529859954658711 +563 401 .9016682606226866 +573 401 -.29537586339498256 +574 401 .3408683889393334 +581 401 .40224006157386716 +588 401 1.6647228576268682 +594 401 -.5559790121003927 +605 401 1.2544125300446631 +619 401 -.3535430791295139 +620 401 -.20153768336680578 +627 401 -.5273264721714042 +630 401 2.4700601060125282 +635 401 -.42501632859334076 +690 401 -.08667548222456856 +698 401 -1.111751354735791 +704 401 .5065811605661992 +706 401 -1.7710849981650787 +710 401 .31797973621514286 +718 401 -.4216697687733947 +724 401 -.2942248306874237 +737 401 -.6438996137834173 +749 401 .710589751689583 +761 401 -.5490181467467015 +774 401 -.4009302570523096 +828 401 1.5993330017091332 +834 401 .024298688346236996 +852 401 -1.6559759953518691 +853 401 -.41324130480980426 +864 401 1.465587003582568 +885 401 -1.0424193811490698 +888 401 -1.559795642295322 +898 401 -1.6326704869577509 +903 401 .7329921900142595 +912 401 2.4225920997160673 +913 401 -1.628849618374428 +923 401 -1.134672502240133 +961 401 .11338799638999025 +989 401 1.5745469583903229 +993 401 -1.2688176340465653 +2 402 1.5106551966063988 +9 402 -1.2321564302798365 +14 402 -.11060533335662368 +16 402 -1.7229743966235163 +38 402 -2.4225988853979006 +44 402 1.3266492675790436 +45 402 -.4452085373536695 +59 402 2.192206589259091 +62 402 .6621367582729206 +72 402 -.8824945486501914 +96 402 -2.2355401593920052 +98 402 1.7828668126224132 +103 402 1.1455439799685294 +136 402 -.6327456129992404 +137 402 2.4184678726525344 +144 402 1.6094988552310703 +164 402 -.17056911924897103 +206 402 -.06754697293347225 +209 402 -.3613770234552021 +210 402 1.149045307142975 +223 402 .879336299623668 +225 402 -.5525309940908312 +228 402 .769339232728477 +231 402 .9465042431223408 +234 402 1.4709157410664573 +250 402 -.5401201253741402 +253 402 -.3057523055997281 +254 402 -1.1771059589027106 +263 402 2.1335442467048544 +270 402 1.8916198836584668 +272 402 -1.240473198153953 +275 402 .5450452382009155 +279 402 .11209183477636783 +283 402 .35341100486882915 +298 402 1.5983582425874183 +300 402 -.3878022760447833 +317 402 .270323592205357 +332 402 -.244738828806523 +334 402 .3974568610233567 +336 402 -1.7013228962405853 +345 402 -1.4641928602152288 +353 402 -1.4833436351462486 +371 402 1.6421845186057125 +383 402 -.00335038551157793 +388 402 -.526674397299582 +419 402 -.7454091775583748 +428 402 -2.065905798459379 +444 402 -.6272139860369379 +448 402 -.5793479217135237 +466 402 -.8421017434715534 +469 402 -.06792502282328207 +476 402 1.1380749353772592 +498 402 -1.8456046238852397 +517 402 .9385590199725857 +519 402 1.7229798532867093 +525 402 -.2674780420954908 +538 402 -2.255638940764706 +546 402 1.3832723459115979 +547 402 -1.1465799005818087 +586 402 1.3973260551491624 +589 402 .20499499812384409 +600 402 .7931283195194069 +629 402 .5245980930509447 +631 402 1.1142471377024956 +633 402 1.2585691130693744 +643 402 -.41632466741823126 +655 402 .8468652137064581 +658 402 .4718347652604731 +663 402 -1.259382501303179 +664 402 -.46021794504167013 +666 402 -1.3445642898430776 +684 402 .3531662306142336 +698 402 .8198484866723836 +707 402 -.20569511821148623 +708 402 -.10511937613660716 +710 402 1.315407749722276 +715 402 -2.2098151296171746 +726 402 .3613932871780266 +736 402 -1.1621382038992767 +739 402 -1.0797390730167193 +745 402 -.19615706069285468 +749 402 -1.0002665316964396 +758 402 -1.502518154332518 +768 402 .0695851826919586 +771 402 -2.070119317578418 +777 402 -1.4868599800294748 +784 402 -.6880459740215074 +792 402 -.6883682421201778 +795 402 -.014275149502314122 +826 402 2.1161805722487643 +840 402 .49498035110609007 +848 402 -.11177725670467845 +856 402 -.11322672352650084 +858 402 .39027171540113775 +881 402 .4134517914386999 +907 402 1.3843733482952612 +915 402 -1.3371761570368006 +917 402 -1.0440304542770296 +918 402 1.0665685018853226 +927 402 1.6744312340441976 +934 402 1.6669193704201821 +942 402 -.09165990023976542 +950 402 -.12065577544125906 +969 402 -.35552600523679995 +972 402 1.1130326035312375 +990 402 3.0703476234516422 +997 402 -.3440546471237006 +6 403 .2893111241765833 +9 403 .9627600113863561 +58 403 1.1058168271596356 +113 403 -.6376096141423898 +128 403 -.6614781036252528 +143 403 .9254576640510813 +148 403 .12177058882142389 +161 403 -.5711646697562514 +167 403 .49583673219676844 +170 403 .7221529389979763 +172 403 -.8104710644066481 +192 403 .6825463542114547 +193 403 .4611343651115898 +205 403 -2.2787845087598906 +209 403 -1.6950770563507724 +228 403 -.26729369427328126 +258 403 -1.03929283913525 +267 403 2.0683164721317167 +285 403 -1.7062718185470147 +306 403 -.8616430699552572 +312 403 .4315130755920233 +350 403 -1.2892394544792143 +352 403 -1.6057392260106165 +377 403 -.021612655521525484 +390 403 .5064110559963683 +392 403 .48557841273873875 +422 403 .05730727105176195 +464 403 .5122340398155177 +496 403 -.1253746496820017 +498 403 .4881446203392956 +541 403 1.2931691025210488 +546 403 1.5144223700470991 +558 403 -.20386349566701517 +602 403 .8737671367728659 +635 403 -.4636091318499615 +645 403 -1.5492778552060176 +647 403 -.8838755923318786 +655 403 1.376811005028935 +661 403 -1.39119985947017 +679 403 .39355586866141645 +680 403 2.141212908675008 +684 403 .11738311770529898 +695 403 .7016573506341567 +697 403 -1.3706118001140786 +701 403 .22686715082980988 +722 403 -.530516433250334 +739 403 1.2171059921874368 +742 403 3.064860737398457 +755 403 2.3768416449244527 +786 403 -.5833394259752267 +802 403 .6985435197459515 +809 403 -.7094139751785288 +828 403 .7067212510199284 +833 403 .4442596647711945 +863 403 -.08812724587203968 +872 403 -.9435130074041677 +876 403 -.43268951071834794 +891 403 -.5949074266262827 +893 403 1.0840679451800228 +896 403 2.603835234013539 +897 403 1.9965900912941812 +899 403 1.49075170141557 +900 403 -.24597783673452436 +915 403 .3440688473077202 +938 403 1.2232507045476377 +941 403 .7561569950530336 +959 403 .0025808659004598333 +982 403 .04572862216884418 +992 403 -1.601070375848905 +993 403 -.9743172391629046 +14 404 1.0764571654429815 +23 404 -.12392706576639508 +34 404 -1.0227273262480931 +35 404 -1.1312968077477878 +39 404 -.09868612528726581 +42 404 .6072007023581218 +45 404 .2337351793386956 +82 404 -.7171510941256821 +93 404 -.35026279602546795 +127 404 .32957126991151503 +158 404 -1.3338532033039496 +165 404 .9141899477061971 +182 404 -.2749470956073857 +184 404 -.6097849521750693 +211 404 -.26789871764766265 +214 404 -.865163167275304 +215 404 .84933558951905 +221 404 -1.463324578079526 +239 404 -.26089712612941734 +247 404 -.36819599308493656 +250 404 .8919677620433981 +259 404 .3535657521765191 +267 404 -2.3313422814312648 +290 404 -.7382994989280893 +296 404 .32962111000988964 +315 404 1.594420312790387 +349 404 .9323942314125488 +355 404 -.0714996857227671 +356 404 .33106444276827207 +367 404 1.6045574378579675 +374 404 -.04750788637052894 +376 404 -.47500464826924155 +377 404 .35851000799592475 +383 404 -.8063743633919175 +385 404 -.06023919136791551 +390 404 -.18909781542711737 +401 404 -.14803593167820356 +410 404 .0030331855553492465 +412 404 -.43711388406779317 +419 404 -1.4470324868965936 +421 404 -.05798752046978589 +430 404 .7004257718803769 +436 404 .30292865465086677 +437 404 .8718370256192124 +445 404 .09396797911178636 +459 404 .31644361054881254 +461 404 -.2668010669297537 +490 404 -.2677670410715481 +491 404 .6095426733817277 +503 404 -.20631845824027337 +507 404 1.092578326758888 +513 404 1.6079064692908132 +536 404 -1.6711949909461388 +543 404 -.8499648449274481 +547 404 1.3716858347486078 +548 404 -.6672963536642922 +550 404 -1.0558444855668698 +557 404 1.046845017154491 +560 404 -1.042804008902631 +561 404 .7309409929497876 +570 404 -.3439278349320797 +572 404 .099623075974692 +591 404 .5842397584531474 +597 404 .5546874813900123 +603 404 -1.0895966468298086 +610 404 -.8531273681978224 +620 404 -1.1699466127467864 +632 404 .1659135134348838 +648 404 .5906926427299786 +666 404 -.9368517343844964 +701 404 -.00563310359752206 +702 404 -.26506649836548346 +703 404 -.13684658877865805 +713 404 .2307438717416325 +715 404 -1.1347141846092086 +729 404 -.40975820424540077 +742 404 -.6161667607610637 +747 404 -.5434816811982175 +753 404 -.9778378891131106 +759 404 -.4103167131580685 +760 404 .846471885504876 +779 404 .8819241786533225 +784 404 -.5632108803068422 +790 404 -.3799640119750313 +791 404 -.40138103598038305 +800 404 1.5068984921366617 +803 404 .08604598751862065 +808 404 1.521739117711438 +817 404 -.281766739197545 +827 404 .27122143719106295 +828 404 -.8143250953852272 +830 404 .23758865345581648 +835 404 -.8910056909079014 +837 404 1.549842059828187 +845 404 -.3804190897243266 +859 404 -1.153220948931511 +860 404 .9779469708453732 +864 404 .025920833734094678 +869 404 -1.5017797492489104 +880 404 -.37170932217966524 +884 404 -1.5023306900880211 +889 404 1.2380553866085904 +890 404 .737138914193001 +908 404 -.1049205411362098 +912 404 -2.515611960753675 +946 404 -1.1200550958554745 +953 404 -.60949558770131 +983 404 1.2216668034668292 +984 404 -1.02448873271719 +987 404 .3217753759459024 +4 405 -.023159948881685422 +21 405 1.066827021511045 +26 405 -.35104411787842726 +27 405 .30215036573106735 +29 405 -.3129374223715284 +63 405 -1.218080459140067 +77 405 -1.3964525611265188 +83 405 -.27401295202661136 +97 405 2.003597321577953 +101 405 1.4532327135170475 +105 405 -.5999823601561688 +126 405 .1778586640712576 +134 405 .19616786860740557 +138 405 1.4470414754710776 +141 405 .7640410811090282 +142 405 .3032624469691994 +148 405 1.9080589982330138 +151 405 .9279118424330703 +152 405 -1.0509785784217582 +158 405 -1.9035738535003386 +167 405 .6605012235594502 +168 405 .8544213784982008 +175 405 .09243478701133195 +196 405 -.4187502266236478 +198 405 -1.1052778526971712 +218 405 -.6450674036630719 +243 405 .6324821973559451 +267 405 -1.269939108022327 +273 405 1.2862554322409463 +294 405 .7269801309730929 +313 405 1.1787999779202563 +320 405 -.7218917483602247 +327 405 .2941955556897923 +343 405 .03367026320501172 +369 405 .9813788185852174 +386 405 -.23371544886808154 +391 405 -.15473588006743935 +400 405 .856319711070965 +416 405 .7303980357928336 +449 405 -.6906746931110359 +451 405 .32027618282339254 +498 405 -.66049693673058 +523 405 .39870064238496655 +541 405 .32809170249450026 +543 405 .4191595969095693 +552 405 .25013244284621206 +566 405 -.671121155565034 +575 405 -2.5502581064042262 +577 405 -1.6489206658554112 +600 405 -.45608074115884 +621 405 -1.6547021356704916 +623 405 -.6334337645169591 +635 405 -.24497178304873501 +679 405 -.246425855462932 +681 405 -.22396040873303763 +701 405 .6885724158913406 +702 405 .6679380015197723 +710 405 -.4779461561228485 +744 405 .8310760375471015 +758 405 .1464855267647367 +765 405 .06380346390439096 +775 405 .007260732200490658 +777 405 -.46236832834047026 +783 405 .7674338535372182 +804 405 -.32074919145357517 +809 405 -.13294611640511728 +817 405 -.3131473786307556 +820 405 .13979832307396609 +821 405 -.20998128654138673 +827 405 -1.1752435724232597 +831 405 1.1250452122556698 +840 405 1.0782841377814847 +841 405 .9800324239740413 +849 405 -.6678805528529504 +853 405 -.13211738911798615 +871 405 -.9395668069418509 +886 405 .10000556436280997 +902 405 .6280148836945947 +908 405 1.4184199854283737 +917 405 -.8635472107826759 +929 405 .5627645102235597 +950 405 1.3460660814950705 +970 405 .07003168029503412 +973 405 1.0444026305461682 +976 405 -.13514597068694795 +979 405 .014169691034705174 +986 405 -1.0301099617069844 +999 405 .40477923504323626 +14 406 .7387025835499881 +39 406 -.4576360825734555 +49 406 -.48375967803341824 +72 406 .5462482838733637 +82 406 .5331912050678111 +95 406 .2463539486395485 +107 406 .27376753526740855 +114 406 -.0006828335066366431 +116 406 -.45594894816757586 +120 406 1.1310388717842432 +143 406 -.26667015971318286 +163 406 -.14997497714997346 +166 406 -.13142214518926737 +171 406 -1.1408126979928153 +174 406 .5475909698121062 +176 406 .4291252894850304 +180 406 1.1590543722081035 +182 406 .2558413753925962 +185 406 .19108932312523785 +198 406 -1.120854255775217 +229 406 -.5181297872261349 +240 406 -1.3722102018559736 +241 406 -.309060058151839 +247 406 -.451116985418823 +258 406 .46289643347837145 +296 406 .6648693774872699 +305 406 -.024378086740794266 +318 406 1.1077126319366006 +321 406 .24113251468489277 +330 406 .22225726207435492 +331 406 .12185181863971964 +342 406 .490552490995592 +349 406 -1.1011771299263489 +352 406 -.4705768495285699 +354 406 -.8193136052565375 +360 406 .5976080639682037 +367 406 -.11436956533446803 +373 406 -1.0325836569215385 +379 406 .37138853054853166 +384 406 -.27351084204659615 +408 406 -.24182809144068443 +416 406 .5171958687534431 +417 406 -.23148015141783954 +436 406 .3208082012517794 +448 406 -.7190804430385926 +458 406 -1.291135264209721 +463 406 -.11837440673023762 +474 406 .5978618604624131 +476 406 -.663348947697102 +478 406 -.3236623740316369 +484 406 .8898797207093214 +489 406 -1.0431318085386347 +501 406 .8534943517881999 +505 406 -.026771154145967032 +509 406 .031727474540288625 +513 406 -.16718372086611774 +530 406 .4241619649843458 +535 406 .8861585989131705 +553 406 -.1855097099762688 +556 406 -.7480683021566238 +561 406 -.646751008429402 +581 406 .2324183441417593 +585 406 1.3152412419981865 +586 406 .6300953925450712 +589 406 .1872726150185282 +623 406 -.2456883072200461 +664 406 1.027352067142323 +665 406 -.08693928217152203 +685 406 .1960129377660985 +692 406 -.2807422056433139 +701 406 -.41963837912754093 +711 406 .2590080669217505 +722 406 .4509255773933089 +725 406 -.06892349919212551 +730 406 .5067397065913737 +735 406 -.2711071359825204 +737 406 .2511948498942546 +751 406 -.44471038884471314 +754 406 -.21787246965891743 +766 406 -1.1579778711894169 +776 406 -1.2852257505750149 +780 406 -.15198048455882257 +786 406 .022023315906259285 +804 406 .32530009625572764 +840 406 -.554708821001307 +847 406 .07965941329280589 +849 406 .2770627956589744 +864 406 -.12827686028841806 +866 406 -.38158882206160605 +868 406 .33837368031119147 +877 406 -.18949771549239264 +906 406 .05956910890158911 +908 406 .32568419700071705 +924 406 -1.3385613533750396 +931 406 -.9408783072266048 +942 406 -.5357343993459122 +943 406 -.05629725888798667 +959 406 .5564947596967535 +972 406 .541036102963006 +979 406 -.432396180328469 +981 406 .2666687466908474 +985 406 .12715338718447075 +995 406 -.48783692554599045 +5 407 1.6235716390950299 +25 407 1.2216791754355685 +27 407 .13566136408218438 +29 407 -.5384334163293599 +77 407 .6767491913737854 +81 407 -.0695869874084391 +85 407 .6782473348253828 +107 407 1.2282182238227828 +123 407 .42076694234498757 +127 407 .7793265927043431 +129 407 .6809777402463292 +133 407 -.46211096861862455 +137 407 -.7192227203617869 +145 407 -.8728524411565133 +150 407 .22913981972380768 +160 407 -2.220501653029819 +170 407 -.2511087947831683 +171 407 1.4431961831822895 +174 407 -.21650319613858376 +178 407 2.4555702716802426 +185 407 -.9270761308504094 +223 407 .23009221180318568 +230 407 -.6272258593976723 +231 407 .6793033598400892 +238 407 -.7312535214167519 +247 407 .7126977046246215 +259 407 -1.897463882853652 +263 407 -1.217225226034187 +296 407 .28870964721915854 +308 407 .21183100191890822 +317 407 -1.081529786358634 +334 407 2.60431952894468 +336 407 -.08757128264739827 +345 407 1.2929185726702879 +352 407 -.33091044758604526 +376 407 .8249097648934698 +394 407 .7299259651786576 +414 407 -.5335785606428376 +446 407 -2.343990050709342 +462 407 1.2731389479665105 +468 407 1.1964667365553885 +469 407 -.021230960364266555 +484 407 -1.8141056016382786 +498 407 .6616400495082554 +505 407 .7608169988530101 +516 407 -1.4695496071808707 +519 407 -1.3513036646789416 +527 407 .8432087379760611 +533 407 -.40586679835891676 +536 407 2.2276938358469764 +541 407 1.1039059593796112 +544 407 -2.03575515097702 +566 407 .16981598958554944 +590 407 1.4055121881235788 +603 407 .7935523147273496 +634 407 2.2698719358329744 +635 407 -2.422285053753918 +642 407 -1.209739966618755 +645 407 -1.9629809450012787 +652 407 -.09791641725356026 +662 407 .4441866556885028 +664 407 -.8472973079357891 +672 407 -1.5429371439122974 +685 407 -.31527384802519365 +690 407 .3366827676607288 +698 407 .9650749764258041 +714 407 -.6908762319411048 +718 407 -.6017857525323796 +726 407 .3506976752219864 +728 407 -1.0186158221385821 +736 407 1.1699764584564192 +738 407 .6590254457483116 +749 407 .7141220725465462 +750 407 1.726685420851176 +756 407 -1.5812309378138811 +759 407 -.9989048529426544 +761 407 -.20277461964022814 +777 407 -.4290811102057774 +778 407 1.6608773942425508 +786 407 .6081918854899423 +787 407 -1.200815411182819 +799 407 .07753022555766709 +806 407 -.7516182913860694 +810 407 -.4920795342399613 +816 407 .8338459247786829 +835 407 1.2691594477929418 +844 407 -.5560660277052668 +849 407 .5293135916549673 +862 407 -.7611913048616357 +869 407 -.6254919498671583 +873 407 -.8072989430203769 +890 407 -.44096684429984156 +898 407 -1.8448981854745967 +909 407 -.818795109323617 +911 407 -1.1129448877699621 +912 407 3.2601675669465098 +919 407 1.5983799244211672 +939 407 -.12661697842980793 +946 407 1.0600394973753127 +960 407 1.2950713444312325 +971 407 -1.2985058557991984 +975 407 .33451191960785864 +982 407 .026883336864143542 +987 407 .02835323785267732 +990 407 -1.9725013033532806 +4 408 -.8962258302361931 +9 408 .4151253702202292 +58 408 -.6150706921630709 +92 408 1.0001359444667415 +93 408 1.0897468068893739 +105 408 -.5938847331128058 +120 408 -1.8627406390430996 +135 408 1.2814504591694973 +136 408 -1.6573478163544255 +171 408 2.2749376615565544 +187 408 .7803013596109947 +198 408 1.7224534198258974 +201 408 2.2091389165108444 +207 408 -1.088274109878527 +221 408 -2.364160182180483 +222 408 1.7746306964740621 +266 408 -1.0575103462278472 +281 408 -.665436060362797 +282 408 -.18197959200783023 +285 408 -.8386096423972911 +293 408 .3754257767534145 +299 408 -.6394611131434698 +328 408 -.526224573965326 +329 408 .19413139909486649 +330 408 -1.7509891389822507 +331 408 -.43072202926166897 +340 408 1.4054174695609574 +343 408 -.8750093762589507 +359 408 -.20939959997971896 +381 408 -.396271237410179 +412 408 1.8414848755404294 +423 408 .18552149464174325 +440 408 -.022323120304628827 +454 408 .4920986184143029 +455 408 -1.3724783360979818 +458 408 1.8811695797977772 +471 408 -.9910382334624932 +474 408 -1.2961510762379636 +479 408 -.479623555778226 +483 408 1.1268290436828001 +489 408 .7174470666236329 +500 408 .455148388954554 +504 408 -.8743743655202382 +508 408 .2597740399901928 +509 408 -.15213346607997089 +516 408 -1.2788153083171465 +531 408 1.319424350030726 +533 408 -.14977274581282943 +574 408 .636880666673782 +577 408 .12191149982512499 +591 408 -.8653464586390165 +609 408 .6375843420419898 +617 408 1.1778966281971173 +621 408 1.287506418917486 +627 408 .5533520337935413 +635 408 -2.1591629182544256 +640 408 .4870188357402243 +646 408 -1.4454493805819293 +651 408 .432819990715872 +661 408 -1.6920715086724816 +664 408 -1.5955606245647793 +683 408 -.291665009826134 +692 408 1.4330592494628112 +693 408 -.2695743604069364 +700 408 -.8882638544863368 +701 408 -.5252574519656547 +706 408 -.7643829934798417 +707 408 .03156014697431429 +709 408 -1.358053597553273 +710 408 1.67563788087437 +715 408 -.8005127917650957 +731 408 -1.1662791476788432 +769 408 -1.2509362521718297 +778 408 1.2962427734959918 +783 408 .6337196876111851 +784 408 .5474361997173073 +807 408 1.3589848466436407 +813 408 -.07828994694293544 +839 408 .8150752456246972 +878 408 -1.5660536868554933 +887 408 -1.073396633687165 +888 408 .8396935904214364 +902 408 -2.0073333128023076 +908 408 -2.227174767069056 +924 408 1.5176775461085361 +929 408 -1.0990201061932612 +930 408 1.9337656863816204 +958 408 -2.574037659434214 +960 408 1.1714233304343409 +976 408 .9931207764674664 +985 408 -1.702726129769361 +11 409 -.46656600946931986 +40 409 -.21032409183230844 +47 409 -.7578231880952508 +51 409 .27011801863287827 +83 409 -.0520135703346194 +120 409 1.9741292737543603 +124 409 -.031779034869586026 +135 409 -.9113708968634322 +141 409 -.4929507066749885 +149 409 -.1501731943605272 +175 409 -.12474498631578193 +189 409 -.2429702313843173 +192 409 .03728326886387273 +201 409 .8809232924189517 +206 409 .9508998148574203 +208 409 .2878649577125886 +211 409 -.7503931591978534 +235 409 .21872773018524935 +253 409 -.3622496070082522 +282 409 -.626535323399659 +291 409 -1.623659785630043 +292 409 -.19537402500189444 +299 409 -.1720652339426232 +300 409 -.10331137454662509 +316 409 -.13092947017895343 +321 409 .6174109024335832 +342 409 -.003010151107994378 +346 409 -.48811313158939684 +355 409 -.26798587119666145 +379 409 -.14062989703224243 +385 409 -.2868503614250922 +386 409 .737395689759361 +390 409 .014842887313555209 +392 409 .930153291219684 +395 409 -1.1483096765704572 +403 409 -.5400439936529549 +407 409 .4189527498971584 +418 409 -.7514104919564403 +423 409 .0615496382097325 +426 409 .1705278246434358 +427 409 -.11018145733533849 +434 409 .501047802938616 +439 409 .5606821774013773 +462 409 .9240426625018623 +495 409 -.2874613785093969 +503 409 .3467603695849864 +512 409 -.11309626008542525 +521 409 -.2256420143877339 +531 409 .9236242517055859 +541 409 .5863521850656632 +548 409 -.45216970741818396 +557 409 -.09633631828288293 +559 409 .7320214355206751 +560 409 .278876147303337 +566 409 .14264838987167563 +601 409 .21665125721194278 +603 409 .08017941957098132 +606 409 -.8085036903167657 +641 409 -.760433490619381 +661 409 -.778961203312833 +678 409 .043875764819246266 +700 409 1.628962393370415 +718 409 -1.0701663912953736 +720 409 .15166756890224117 +726 409 -1.5990083760546054 +733 409 .6022841573678291 +765 409 -.08905539815410346 +767 409 -1.1686665651917572 +772 409 .40091456498095407 +786 409 -.2418170815891991 +798 409 .2219205528588505 +800 409 .8525108484831029 +809 409 .33565116798880634 +821 409 .09462455898759126 +835 409 -.20193757560602837 +840 409 -.3296820917837259 +842 409 -.9922076040065503 +853 409 -.28435000017088136 +865 409 .38635508960967657 +866 409 -.9153288672854334 +879 409 .1420664649999026 +888 409 .6299956898136364 +900 409 -.23730749815261887 +931 409 -.7386471628718507 +953 409 .16360787109887506 +960 409 -.04272630612425943 +962 409 .5250329281959301 +978 409 .7119200459265235 +996 409 -.6348395267789188 +5 410 1.1130948796979114 +8 410 -1.2478942042419827 +23 410 -1.3917181422456526 +28 410 -1.1157115849242936 +32 410 1.3535632732108218 +41 410 -.2613435307672245 +43 410 .4585497339981191 +50 410 .8136778419337822 +55 410 -2.0195301934270957 +117 410 -.06562296634379926 +126 410 -.9182069099974435 +162 410 -.0850311009090806 +164 410 .6382376344745458 +202 410 1.4243289504521444 +212 410 -1.2829512282264042 +217 410 -1.4428268051830455 +218 410 1.2778976845026109 +233 410 1.3370231012151876 +234 410 -1.4360089519838772 +237 410 -.5933478630349833 +238 410 .7076556465130457 +252 410 -.553326851774329 +286 410 -1.1904852383675464 +292 410 .18819433276854716 +297 410 2.5016607351895614 +312 410 .12845615634259663 +314 410 -.18487723879274987 +315 410 1.3232013350125824 +317 410 1.2836537841457327 +323 410 -.7172099815246491 +340 410 -1.777174077886015 +356 410 .8735102997773243 +357 410 1.0734880855122357 +358 410 .22885014611966928 +365 410 1.5218664857811444 +373 410 .9703952266767042 +384 410 -1.0588366828266365 +392 410 .6750778544093501 +407 410 -1.182355187403541 +415 410 -.3388400869697403 +448 410 -.4264737616831376 +486 410 -.3467567993065767 +490 410 -.29169790527334216 +509 410 .42496858331809173 +521 410 -.7713067974698896 +524 410 .4045998023110565 +538 410 1.4166695667307623 +539 410 .9757803991395547 +554 410 1.1366289890791719 +575 410 -.9366094124297751 +578 410 .3472172314646342 +581 410 .7733711520472971 +589 410 -.3358090168061272 +610 410 -.37217436846758684 +612 410 -1.6938090038701195 +623 410 .4860075083449252 +633 410 -1.3364517607240705 +655 410 -.022910244860127965 +672 410 -1.6280257938889684 +688 410 -.6182736297867208 +696 410 .6223634590263312 +697 410 .9348321702289905 +705 410 -.6644674498688925 +711 410 -.1504786665193437 +719 410 .21834604236611643 +734 410 .8354324876920193 +757 410 -.3029846249338748 +764 410 1.41553865997718 +775 410 -.4747939953710206 +782 410 -.08730704804908637 +784 410 -.8269729018412558 +815 410 -.5551399522663301 +820 410 -.5461257211132069 +825 410 -2.782125014027982 +838 410 .4645602053978917 +841 410 1.6465027827703358 +847 410 .5989692888546883 +849 410 1.644108689008038 +850 410 -.9832946083200146 +856 410 .7425252489113126 +864 410 -.3049005001777595 +874 410 -1.2117493159289874 +893 410 -.1292252514564901 +898 410 1.5445249893292687 +900 410 .19726537634180183 +904 410 .6503761422479448 +925 410 .6863730737852269 +927 410 .09072829303134425 +934 410 -.6533657273954073 +948 410 1.307987418321043 +961 410 -.8420481135496114 +974 410 1.1879005489209336 +984 410 .32638771741420075 +987 410 1.8865681516533384 +988 410 -.05921288257389251 +996 410 .04248463123881428 +997 410 -.8930344520659266 +3 411 .24553089636735823 +7 411 1.2434770478165689 +8 411 .24545908371735922 +18 411 -1.5699498491673913 +24 411 -.24125960533316823 +40 411 -.6591339957707898 +49 411 -1.8485877868478036 +55 411 .9097438314542791 +61 411 -.8876547187552624 +83 411 .8821012506686433 +86 411 -1.3922730631176667 +91 411 -.25848796041609445 +95 411 -.06603772064655898 +117 411 -.352823999370089 +125 411 -.9112250394899106 +127 411 -.9514073784510756 +140 411 -.30842231551450155 +145 411 .27435845112230106 +154 411 .7420679511059312 +171 411 1.1478863806948112 +173 411 -.4917756732535709 +182 411 -1.1328460231968116 +217 411 -.20015302456493564 +221 411 .7088462491799083 +232 411 -.0017211591137994697 +257 411 .5939997834642001 +260 411 .28887569871442176 +270 411 .9424773342213284 +289 411 .19440314814019288 +292 411 .06973432632531279 +297 411 -.8993753233297469 +305 411 .5208272951464665 +307 411 -.7065539616784436 +311 411 .007646855816359155 +323 411 .5883197429250785 +324 411 -2.5352411240528463 +325 411 -.1274854084803106 +326 411 -.7398060702048177 +343 411 -.24645862701286314 +354 411 .02322948423262168 +366 411 .006383076338962249 +367 411 -.9225757893889986 +382 411 .17868722013403068 +391 411 -.15187095574442766 +392 411 -.17502283403955357 +393 411 -.992045977847503 +399 411 -.39623509886960623 +403 411 .8052351615082538 +426 411 .027597331428287117 +435 411 -.7268155539038313 +453 411 -.3936602324700888 +469 411 .40065645434535313 +472 411 .10358559191944916 +473 411 .41975674975393384 +479 411 -.5283354150501849 +503 411 .1823250706554161 +508 411 .7984551545562462 +520 411 .3852723855954698 +529 411 .5642272911214347 +531 411 -1.2772429695505108 +561 411 .10464658392040868 +564 411 .9219665737986265 +571 411 .6112944251259842 +583 411 .6213225758671417 +592 411 .04769832162477545 +594 411 -.36423395425136484 +602 411 .9056364891008167 +610 411 .5182932434222429 +619 411 .602186569015615 +635 411 -.59670408762241 +637 411 1.7364934921445547 +664 411 -.5193697280941815 +672 411 .24880275232744137 +678 411 -1.2606719793665415 +682 411 -.8623073243673887 +684 411 -.9344460043032231 +687 411 -1.234752652222884 +698 411 1.096929425118398 +713 411 .33212140049604766 +714 411 .8152707709843633 +720 411 .033520857948489594 +731 411 -.5178144983135716 +732 411 1.2203063200080828 +766 411 .2849425570622691 +767 411 1.0242061412422867 +768 411 -.1338442673048264 +781 411 .7942547292244774 +790 411 -.12109225988200473 +856 411 -.9536904520010296 +877 411 .6664269341275572 +886 411 .7284093854652657 +889 411 -.6735210418400034 +905 411 1.8904213066979036 +919 411 -.11303055046593516 +920 411 -.32538212047954773 +923 411 -1.0048238122401763 +943 411 -1.4535528484543416 +949 411 .11963457459504945 +976 411 .5204010112614834 +979 411 .20764837746770248 +985 411 -.0213228322000506 +4 412 -.05479440554952718 +6 412 -.2461957175501296 +29 412 -1.0266817417007996 +30 412 .909261477983872 +34 412 -.08854483340583 +35 412 -.5745694647544222 +37 412 -.9637868465000758 +54 412 .7700434586032114 +55 412 -.48846190186779237 +60 412 -.13010973510166854 +64 412 1.4753761883938281 +66 412 .8213322808171337 +68 412 -.41074740956301226 +70 412 -.2345010907989148 +75 412 1.0760172560595764 +80 412 -.2927681011041436 +92 412 1.3115262499942024 +110 412 .30877169838291757 +120 412 .5664171157279316 +125 412 .38070947371248176 +165 412 1.594864299314824 +172 412 .24143164229985198 +177 412 -.15342283909418225 +182 412 1.2045975676672305 +183 412 1.344528629540602 +192 412 -.2948473521142465 +206 412 -.043164486841518385 +216 412 -.01964338838537638 +252 412 .47007171920187124 +280 412 -.2968488056265679 +302 412 -1.614205352493822 +309 412 -.37638595263279295 +313 412 .9452314610625229 +320 412 -.5139678775481414 +327 412 .8323711326327999 +337 412 -.10989761193348392 +344 412 .6412624451395172 +380 412 -.42472212092350065 +386 412 1.0859342598228487 +393 412 -.1757129135301867 +394 412 1.0708227484605612 +396 412 -.11755065234134834 +398 412 -.6915677812782819 +411 412 -1.0940742731153095 +418 412 -1.1820168115353022 +434 412 .5054535369216169 +452 412 1.0617239184474505 +459 412 .26741875255071634 +474 412 -1.3055963727431632 +475 412 .6036201386524279 +484 412 .03154224800440761 +511 412 -1.4933399824763718 +521 412 -.8512983884944202 +533 412 .5340800989767449 +549 412 .9815402594580238 +558 412 .6301067785250656 +561 412 .6999133290839709 +578 412 -.061893261261571936 +592 412 .2612418174673512 +595 412 -.34659648646252605 +602 412 -.97246126896799 +624 412 .550113832253426 +630 412 -.020003620445009404 +651 412 .5585944395274731 +657 412 .7871513525282648 +665 412 -.35591845486667906 +666 412 .3755349204223316 +671 412 -1.0133508000747362 +673 412 -1.5493172566709004 +676 412 -1.229327257526635 +686 412 -.4338661468095933 +694 412 .152088505469234 +703 412 -.1992045368269446 +706 412 -.9812381671057699 +708 412 -.6653411990456569 +732 412 .6046181258840371 +745 412 .38940168999217367 +748 412 -1.3925661615450562 +750 412 .13344976441201772 +755 412 -.6368851738978791 +779 412 .5894807601351392 +799 412 -.7019183149766852 +803 412 -1.5101957920803692 +805 412 1.2694321712446217 +813 412 .13165206503277932 +818 412 -.025753331655797032 +819 412 -.9554258323505789 +827 412 -1.2603260340615663 +859 412 -.8509795803801634 +865 412 .6277012452697056 +880 412 -.558087281216507 +896 412 -1.1621379677776114 +905 412 -1.109108739008783 +914 412 -1.158952310672289 +924 412 -.6036263140474342 +927 412 -.5852673337894889 +929 412 .4075401203904624 +936 412 .11465946635610962 +944 412 .27109594481919536 +946 412 .8033654982118531 +947 412 -1.0250390249521764 +961 412 -.055371395049389614 +979 412 -.23128679765043356 +980 412 .5040062088198307 +994 412 .0016533835870860825 +995 412 .6215517413031795 +7 413 .01667241284396241 +12 413 -1.2982215100960943 +24 413 -.07869188944604594 +27 413 .3754556363338805 +30 413 -1.2101357436851399 +56 413 .9139358167001409 +57 413 -.6679959509598052 +63 413 .4079187489739819 +66 413 .7404235674063966 +76 413 -.8386693402692783 +81 413 -.9370594583151444 +89 413 -.578364937521497 +100 413 1.148333650649068 +104 413 -.8819167359731644 +115 413 1.0146746438104153 +122 413 -.7875449159458641 +123 413 .01916985281844666 +125 413 -.37539566558295484 +132 413 -1.4720590662837063 +139 413 .8505221574994024 +162 413 -.7025406064588635 +170 413 -.31725392595296875 +175 413 -.1985314838622365 +197 413 -.45696958277619637 +210 413 -.4355672298071732 +216 413 -1.0391518382485705 +218 413 .6257436860422851 +220 413 -2.1664716090210825 +227 413 -2.6674765079975598 +251 413 .32621046719164354 +261 413 .9688332489116823 +265 413 .10261414489231868 +269 413 -1.7266870126192548 +273 413 1.3541316338571299 +294 413 -.30789142009044645 +304 413 1.8706388913753502 +317 413 -.3701888583077568 +333 413 -.7730533486496717 +334 413 .9068244073096772 +352 413 .008016696398377259 +356 413 .29609025287343455 +357 413 1.740107692806648 +366 413 .8323103839707165 +408 413 .05789295841328821 +419 413 .5739492545526494 +420 413 1.6694103793864157 +465 413 .2767175969316696 +478 413 .35015330947249235 +489 413 1.2875940833034643 +502 413 -.3470508850592892 +503 413 .17215788290897077 +511 413 .5813408979277276 +513 413 -.8618268294934844 +518 413 -.7279503882266332 +537 413 .24433177346502297 +597 413 .5698813097889471 +598 413 1.2911696782888156 +604 413 .2464836777253287 +606 413 -.6715929300916245 +630 413 2.7381619880163766 +636 413 .3685247204197343 +642 413 .4054710998693141 +649 413 -.054553517095230264 +660 413 .18461605813093063 +669 413 -.31300902037763656 +671 413 -.9510642915407044 +679 413 .3757164610298363 +702 413 .18918886050060763 +703 413 .500787140463599 +709 413 -.04120673003228373 +732 413 2.321942187104603 +752 413 -.30222246825358656 +760 413 1.4734668140428588 +768 413 .12243977213322665 +779 413 .6604825501400934 +787 413 -1.7264265623755286 +805 413 1.2274814437769876 +814 413 -.24274938385247052 +840 413 .1041878997178157 +848 413 1.0043796501089048 +862 413 .9249779872789079 +865 413 -1.3068975350355025 +869 413 .33867824400686247 +872 413 .08705886583809998 +878 413 -.07427112161081598 +894 413 -.778621736167835 +904 413 .5145028484877564 +923 413 -1.3279946374064928 +928 413 -.08362244871508925 +955 413 2.145499156075565 +959 413 -1.6016050695866202 +961 413 -.42140358898309715 +962 413 -2.3200009986253036 +963 413 1.5196991475021246 +966 413 -1.3112504741777449 +973 413 .9522417458331665 +2 414 -.7467889222204014 +8 414 -.6616816007466317 +10 414 1.7413477006335643 +11 414 -2.0087315765896054 +13 414 .44609863670357364 +18 414 -.6601583632870415 +46 414 1.2506516782489803 +65 414 -1.0117333875404897 +69 414 .7647691310240317 +72 414 -.4967808966919698 +82 414 -.6127309242778909 +84 414 -.504202238710684 +116 414 -.03807920650701567 +131 414 -1.0885584008184586 +134 414 .4717176804376633 +146 414 1.0367577112390194 +149 414 1.1802715520211489 +160 414 .3516693625926631 +168 414 -.627203491733141 +175 414 1.3862251188061776 +202 414 1.4262668771974134 +234 414 -1.1247665942151865 +251 414 .003405084152199145 +253 414 .7279034089214729 +260 414 -.05986126693845415 +299 414 .04370659570561445 +313 414 -.16184450940038186 +323 414 .2474299951501216 +330 414 -.08435729317571107 +335 414 .16791510040755964 +338 414 1.6576242840756499 +358 414 .3107364071693127 +417 414 -1.0836079739291358 +419 414 1.2590361036037867 +442 414 .9458992235184182 +445 414 .07907494678879312 +452 414 -.8906674704821007 +464 414 .23715741014038572 +466 414 -1.2563763638634382 +474 414 -1.4666359329698668 +479 414 1.0210390767033957 +486 414 -.2316882788678224 +487 414 1.486596218397646 +492 414 .7072349326053867 +505 414 -.5457171935718996 +509 414 .42903525736701226 +519 414 -1.5835497204234157 +526 414 1.1857307509980886 +555 414 .585588860413391 +556 414 -.3443841228199116 +560 414 -.15173864524031985 +575 414 -.24771201623552855 +583 414 -.28031863095681525 +601 414 -.9037148239028951 +609 414 .2966898747067225 +617 414 -.8852786867254181 +620 414 -.019457998478548656 +622 414 1.54413205322315 +629 414 -.2720547653782077 +657 414 -1.5792470489190673 +680 414 -.5694965190673114 +702 414 1.2633592684734114 +705 414 .5080853801733602 +711 414 -.02132399252041208 +712 414 1.3061290301838822 +716 414 .5684500882981808 +734 414 .6611483986283002 +739 414 -.05018359372113468 +742 414 -.05374068431500482 +772 414 .5240190741167418 +785 414 -.05761337124172207 +790 414 1.2088867066158158 +791 414 -.877517285916435 +804 414 .06590122368310132 +819 414 .6784646249075493 +829 414 -.9972942821559043 +851 414 .17978164408463737 +856 414 .462798792588714 +867 414 .15770422688934765 +874 414 .17401447686212707 +883 414 -.24043537235712698 +890 414 -.376190643880007 +901 414 -.9011640983905442 +910 414 -1.100936895254992 +923 414 .5454224490758983 +924 414 .7361904771582165 +929 414 1.5934796330731502 +931 414 .22704282200063475 +942 414 .49788993526703273 +950 414 -1.2641021083901962 +969 414 .8413912616509378 +971 414 .24138661030184666 +981 414 .26684754157551377 +995 414 -1.5093278746968632 +997 414 .4834182953684665 +8 415 -.9042148431760964 +11 415 -1.0426060669238815 +12 415 .4289737024551961 +21 415 .001551558927281399 +22 415 -.8076669880420941 +26 415 -.03796415954649555 +44 415 .6731647647393807 +70 415 -.18794542494388083 +79 415 .962883035638907 +83 415 -.3763850774842681 +89 415 .40390130539837993 +105 415 -.6798376924898686 +108 415 .4092738901591992 +111 415 .22639146704892005 +120 415 1.2352661200295771 +143 415 -.29009567405571335 +148 415 -.2667952937291861 +169 415 .7519151572778313 +171 415 1.4054813194437115 +185 415 -.5212989824377696 +200 415 1.0955408570234257 +206 415 -.3842267446042247 +212 415 -1.1844200005191388 +223 415 1.7643089569701047 +227 415 1.41454790349431 +233 415 -.876655596457386 +259 415 -.12851684604198638 +261 415 1.975669634441388 +320 415 -.49609701634969083 +340 415 1.16278361421578 +348 415 -.2244033831053925 +350 415 -.11171073371209689 +351 415 -.9025371232105486 +358 415 -1.002518955922347 +365 415 .5441169115861112 +371 415 .5525563796779773 +386 415 -.24966163877390868 +388 415 -.22514593528104263 +392 415 -.9578163822911734 +394 415 -.5696485625292985 +395 415 .4044355165510449 +403 415 -.5433784237791954 +406 415 -1.1530415473332105 +409 415 -3.531817918880307 +474 415 -.07458230029794558 +482 415 1.5308098600363291 +512 415 .654632025903807 +514 415 .47786541973194463 +524 415 -.6598435020961697 +528 415 .9678044175009138 +531 415 .020238952281485895 +547 415 -.2605889771331625 +549 415 1.1286525550215407 +563 415 .16148097853060578 +589 415 -.42009321295444596 +595 415 1.1958034480446722 +612 415 -.2552108591315812 +617 415 .8375681061715142 +620 415 .5045054937080387 +639 415 -1.3214651331277547 +651 415 .252280051934039 +656 415 1.177896099550531 +657 415 -.08235498210787222 +671 415 1.3084053963286444 +672 415 1.313960009808956 +673 415 -.3794170409506412 +681 415 .8453121408505838 +686 415 1.2944899506742644 +710 415 .7073372055534394 +712 415 1.5177826889285473 +714 415 1.1995445023717834 +750 415 -1.7914444851619709 +762 415 .9047468582812421 +767 415 1.4569303719920352 +784 415 -.5560412734043451 +785 415 1.7252889236155426 +792 415 -.13684390068857963 +796 415 .3512703535361683 +813 415 1.0970091803754338 +814 415 1.3573902569164 +822 415 -.20311856260214764 +828 415 .73758157930385 +829 415 -.05154716261429801 +834 415 .8570431448667237 +837 415 .03548608014045594 +852 415 1.7022727489943918 +857 415 .8858672461212447 +880 415 -.3707983934654288 +894 415 2.4359834097675166 +925 415 -.07759341940678756 +935 415 -1.3629969278408942 +950 415 -.8613594090174932 +959 415 .6325289803122673 +961 415 .8105970907417056 +967 415 -.9607397467128891 +973 415 -2.4040886019227443 +990 415 1.140287194757304 +1000 415 -2.041345075577116 +29 416 .05456707176766458 +30 416 -1.1488701528909115 +46 416 -1.3222610849520158 +48 416 .1754666669076002 +66 416 .24986584747566537 +80 416 -.07749253814640437 +82 416 .07007161795456651 +98 416 1.0710285057777889 +103 416 -.7234383474872702 +107 416 .9358090666728652 +128 416 -.8907549114710482 +143 416 .0282502717836568 +163 416 -1.0149967828561999 +250 416 .2739067192500133 +260 416 .49563863795499485 +294 416 -.5910299805746408 +301 416 -.7455221463841261 +303 416 1.3705586855285299 +312 416 -.3932162959381081 +317 416 -1.8644380969968237 +319 416 .5759433300241282 +321 416 -1.1202723593198256 +322 416 -1.906743208544595 +324 416 -2.4457088870445656 +337 416 -1.4037441671927644 +341 416 -.27751280802274964 +348 416 1.2283149878057045 +352 416 -.4725093129372695 +354 416 -1.795326655674928 +361 416 .5573304254879817 +365 416 .5449017185849411 +374 416 -2.060075986558483 +376 416 -.42920099258240885 +379 416 -1.363405579804195 +427 416 -.6861641717000099 +449 416 .37280602802134216 +450 416 .005240169964250134 +452 416 -2.294706233905671 +458 416 .6465498015392714 +484 416 -1.0679821961696074 +485 416 .16538192530567405 +490 416 -2.277952278095613 +491 416 -.21322520967819797 +507 416 .5053033941895234 +533 416 -.8088618086265794 +543 416 .049874726159884794 +554 416 -.18982024084958843 +555 416 -1.7410188014262147 +562 416 1.4496620823932482 +578 416 .6411033733696563 +590 416 1.8489562030735869 +592 416 1.1934650758082552 +649 416 -1.656091927277246 +650 416 -.47324236241151946 +671 416 1.2826344937756162 +691 416 -.04966430394951357 +707 416 -1.0816929321484519 +708 416 1.4566186547320665 +709 416 -.8138549292077227 +713 416 -.742187230789531 +726 416 .6119053008438063 +728 416 -2.0491300859323105 +732 416 1.2341246482419406 +741 416 1.3180089930694094 +742 416 1.524633625412497 +750 416 .19420085422171315 +767 416 1.5097064264727367 +783 416 .32134140072916123 +784 416 1.3244755981951333 +796 416 2.692116893426039 +797 416 .4145579041103519 +803 416 1.1148470840739617 +812 416 -.8788926843471719 +817 416 -.8188449527607399 +834 416 .1416187589491541 +843 416 -.5984774083715847 +845 416 -1.2217701003689279 +857 416 -1.4724025474816813 +863 416 -1.2160376428881783 +866 416 .5830594359668878 +868 416 -.8512928653663707 +878 416 -1.5341424338167364 +884 416 .3191119328986558 +886 416 .8634871065324878 +888 416 -.11501891284136634 +890 416 -1.30221361989194 +906 416 1.9402549117430827 +910 416 .268988855559501 +914 416 1.332673635268589 +926 416 -1.7170937865980547 +928 416 -1.4774153568933637 +934 416 -1.038107840127244 +935 416 -1.8923226300251341 +947 416 -.5066973115614891 +959 416 .8959533218995156 +960 416 1.6015086785734516 +964 416 -1.5928229261618154 +967 416 -.4326940859922258 +981 416 .2421329364520798 +998 416 .9219525718546104 +29 417 -1.1101353513246504 +70 417 1.0483033670619581 +91 417 .9432816111978155 +95 417 1.8834788322406875 +97 417 -1.3482313125728809 +109 417 -.27219488204647546 +114 417 -.3727822812310954 +126 417 1.4102192357744427 +132 417 -.8256976967140558 +145 417 .519138090586068 +174 417 -.7863252651991631 +213 417 -.9443586530993873 +225 417 .39964290747396775 +228 417 -2.2488102897183566 +230 417 1.6601133258346523 +234 417 .20974302218002328 +240 417 -1.3116604201048032 +256 417 -1.678164197332972 +260 417 1.1893997163256913 +262 417 -1.8754289148227994 +269 417 -1.1383418623096044 +279 417 1.4077067102222371 +285 417 -.6482248633776561 +320 417 .036591089322227335 +345 417 .5181899131660209 +351 417 -.5433323309044844 +352 417 -1.7972835630174542 +380 417 -.19066918325749438 +388 417 -.9150304739163286 +391 417 .827930316866899 +409 417 -2.5576758960744668 +424 417 -.7414717919789389 +425 417 -.3405778160429613 +431 417 1.431493133493246 +433 417 .4696126432959358 +451 417 -.7413776715218929 +456 417 .11917081204840199 +469 417 .15969680704882575 +478 417 -2.336136365106221 +480 417 -.6710076715111855 +494 417 1.6462110296070986 +497 417 .8961189729816629 +512 417 .20362553246971715 +515 417 -.44860025165962847 +524 417 -1.2234799668716858 +527 417 2.029435279493876 +533 417 .7012536596095862 +536 417 1.7408100347905398 +540 417 -.972796577843455 +541 417 1.6503445635176752 +545 417 .7579321601736655 +553 417 -.2504811684867742 +568 417 .5629376412559745 +592 417 -.3265664005467434 +602 417 .25493379192489 +613 417 .7273733055297721 +614 417 .5093625442885418 +615 417 .7688424403809777 +627 417 -1.6981448211594448 +644 417 1.73361008107496 +649 417 .8217040096404159 +652 417 1.2367254110807464 +654 417 -2.297773700582737 +656 417 -.5054716762738761 +659 417 .32432980819931945 +686 417 .31676639053304934 +694 417 -1.0099108333445337 +700 417 .5392163997596806 +715 417 1.3300724559166415 +729 417 .3321972596624158 +737 417 -1.4135481880624097 +744 417 -.8415532212053581 +748 417 -.5133889366734334 +814 417 .714245683541612 +816 417 -.46476146862198486 +831 417 -.1869405194168629 +841 417 .17838743582077535 +865 417 .4766247663607467 +874 417 1.8633467904518675 +885 417 1.0114050746329335 +893 417 .12543072044345524 +899 417 .34480150195807224 +915 417 .29183333428412267 +929 417 1.686922129989433 +931 417 .594007225858197 +942 417 .654357224690763 +960 417 -2.0558420321956596 +961 417 .9895270014146477 +962 417 .715138750638593 +968 417 -1.7062486855176526 +971 417 -.32420303817191115 +979 417 -1.03976411341615 +987 417 -.009538426515098244 +993 417 1.0315161903516743 +9 418 -.610635977079367 +16 418 .27156971746511965 +26 418 -.35313708117650866 +42 418 .45984396493057234 +43 418 -.03585305078950832 +58 418 -.6130113821044298 +60 418 .19391104923007307 +77 418 1.155205457911415 +98 418 .2202235184510168 +99 418 .2904765301904925 +106 418 -.0980713142841442 +115 418 1.1463766842260372 +128 418 .4129003600063124 +142 418 1.0929186397158803 +154 418 -1.0468964831666066 +155 418 -.21624120475370365 +161 418 .6135442344454041 +171 418 -1.5018112551797782 +176 418 -.2189851980975532 +179 418 -.2821555973441028 +186 418 1.794678913881209 +198 418 -.6189185445229684 +200 418 1.3402268898792933 +209 418 .9191414219484091 +212 418 .6552141287997629 +223 418 -.3007416302346775 +228 418 .4763431663066837 +244 418 1.7829988773449066 +251 418 -.09684191038666976 +257 418 -.3414970093242968 +261 418 .862098319085043 +276 418 .9810743848550902 +281 418 .5334147598601412 +293 418 1.0346114937938329 +322 418 -.19326104916850173 +332 418 -.21047208458264366 +334 418 1.7023786365843014 +348 418 -.5011546927018515 +363 418 1.1024275075060461 +364 418 -.2847146286557154 +376 418 1.555315035994636 +377 418 .4750584665529637 +389 418 -.24998884251497935 +390 418 .3189388109783524 +392 418 .8875591327363282 +400 418 1.0778833748793024 +405 418 -.7721291148683476 +407 418 1.3303923399433566 +422 418 1.3198597457211083 +432 418 .7154511573067087 +446 418 .6712007388767751 +450 418 -1.4817719685121193 +469 418 .2876468153346159 +472 418 1.0198760310921395 +476 418 -.5852203579835831 +509 418 -.5729062640557113 +533 418 .4418440298814075 +543 418 1.1419106248528308 +564 418 -1.509171347562885 +578 418 -.3783937727087565 +587 418 .5476106271268023 +590 418 .17464566527069245 +593 418 -.9932576502493146 +609 418 -1.3946115163961164 +625 418 1.1536453914947018 +635 418 -1.1706690166536993 +636 418 .01295427248098073 +641 418 .29007390688780865 +643 418 .6641836913748359 +671 418 -1.5850595453856529 +684 418 -.12854357545857972 +686 418 -.917425829958256 +708 418 -.5941873247974983 +709 418 -.22982365265803953 +718 418 .5146603895812968 +721 418 .3414493135254112 +722 418 -2.1095714733758393 +731 418 -.5384163476404584 +736 418 1.7669049263140104 +739 418 .39368145194017273 +742 418 -.06539289219336285 +763 418 .06661339823240356 +764 418 -.7332026963558241 +767 418 .15747565877064834 +768 418 -.4065503544009428 +769 418 .9148964353569361 +774 418 .24067192780354799 +775 418 .343863111031338 +799 418 -1.421624428062177 +804 418 -.10045072770759982 +808 418 1.1787946265515084 +809 418 2.1031532218607016 +826 418 .9697982903223179 +843 418 .06452912457367047 +845 418 .7347692412179584 +847 418 -1.133291237255369 +849 418 .9508957298627532 +881 418 -.4340609668582276 +902 418 -.39741029572470105 +903 418 1.0513652718112039 +913 418 -.09519554083081194 +924 418 -1.092256561841919 +926 418 -.5378415030137823 +946 418 .3970780663677763 +947 418 .07312941821248352 +952 418 -1.2444323255859646 +965 418 -.18710703164879594 +968 418 1.5857504412554158 +974 418 1.8910231774304398 +985 418 -.5173430250737037 +8 419 .6289857877318276 +14 419 -.38541706391821107 +22 419 .08411154255051914 +27 419 -3.4483253078611207 +30 419 -1.828932439753692 +39 419 -.881634163925089 +44 419 -2.14379898777852 +47 419 1.2038530828477791 +52 419 -.851875122072946 +53 419 -1.1099287641171964 +61 419 1.0496296392214037 +69 419 1.5487921684259107 +78 419 .8046242926202966 +115 419 -.49821090647466165 +120 419 -.44101133600142095 +136 419 -.32992545662236195 +137 419 .4138401624461642 +146 419 -1.260070014465308 +150 419 .3365605934750092 +154 419 .7023294680917965 +207 419 1.0772319342437044 +215 419 -.4563669326564875 +229 419 .3212174383857488 +235 419 -1.2919943086911176 +242 419 1.8132394051763157 +263 419 -1.9252086656474345 +269 419 -1.1774017393553486 +273 419 .44045617790829694 +276 419 -1.4124481312825583 +283 419 -.9088867000204433 +287 419 .5706091486819822 +299 419 1.762996474079485 +302 419 2.161714957709039 +303 419 1.2689807119776804 +309 419 -1.6039978481345158 +311 419 -.059691187105135074 +317 419 .3132323441862307 +327 419 -.6177637500002457 +340 419 -2.250527367111953 +348 419 .8310829529691492 +369 419 -1.834791727567798 +374 419 -2.298806119368918 +404 419 1.5377881964377342 +410 419 -.21600891814621506 +411 419 -.9273939328347978 +414 419 -.6858932073712205 +420 419 1.1816656046325338 +423 419 .16755181344210907 +424 419 -.14949013734461525 +426 419 -.0752516413641934 +433 419 -.14096797979890757 +458 419 .4753487403166962 +470 419 1.5233198792432876 +474 419 -.36798118900485843 +489 419 .15429814432174294 +516 419 -.014883192578383796 +517 419 -.548174331514227 +519 419 -2.4264429399127168 +520 419 1.7576531579746084 +533 419 -.10885188604933463 +552 419 1.4148079809019762 +562 419 1.0847423710702448 +563 419 -.5520701943186417 +569 419 -.7634413917414542 +583 419 .19687287750169663 +590 419 .6382424282791758 +591 419 -.5088719073506457 +606 419 -.23835064313787727 +619 419 -1.3865680816446473 +623 419 -.43742082960380524 +624 419 1.0086704915726061 +647 419 .4449071805058248 +659 419 .06215655275648546 +663 419 -.39588686473259793 +679 419 .6783188333534806 +681 419 .8792615696309896 +692 419 1.8211190606235803 +694 419 1.0078868521096305 +716 419 .41807546203052615 +739 419 .5849254175458287 +761 419 -.2676290039025727 +775 419 -1.5580640315349024 +776 419 -.4937803212857775 +806 419 1.0071018633473645 +823 419 -.0854861510040196 +825 419 -1.6980806242202875 +836 419 .776959822798777 +843 419 2.3556512937240526 +844 419 -1.3475092019406278 +846 419 -.2935138980517862 +852 419 .6380243304451146 +879 419 .30842319569894777 +884 419 -.051082468803877054 +886 419 -1.0498768435569517 +890 419 -.7990584118672015 +891 419 -.6430665682879817 +895 419 .3378183216639344 +913 419 -.6898732591303419 +942 419 -1.2343247256263454 +963 419 1.1992881145569152 +965 419 1.0490506321960047 +978 419 1.0527818096320591 +6 420 -.7068444641787003 +10 420 .04442038316022101 +14 420 .8028795883492634 +15 420 -.8872570376202369 +19 420 -.20358436125124096 +20 420 .6076876878265685 +22 420 1.5927674047651792 +26 420 .17351137753334855 +40 420 .6543237065568375 +54 420 .26473002412765734 +60 420 .6535902220804581 +65 420 .4719310128448493 +72 420 -.25469496174072564 +99 420 -.11489950601389104 +103 420 -.19617158238977617 +116 420 .31917852180541756 +121 420 .37010694809702255 +127 420 -.7421465626247685 +132 420 .5135210671223026 +136 420 .8905431949380578 +158 420 -1.2126831991152833 +161 420 .21180040491060897 +173 420 -.51656348088517 +179 420 .02216861991524391 +183 420 -.8542035675282045 +191 420 .7898490327106914 +192 420 .359742635910136 +201 420 -.25480703172983693 +212 420 -.1942729987471731 +222 420 .4973122953249693 +224 420 -.49188561863756625 +230 420 .11031998679156198 +231 420 .3835084539483674 +242 420 .06854052001850856 +261 420 .18615941050301876 +264 420 -1.1238309245902145 +274 420 .034045329648297984 +289 420 -.5209231129812041 +292 420 .38406009707871097 +296 420 .08224788337313674 +314 420 -.004630091541664945 +325 420 .5172828340567043 +330 420 -.45358753043266103 +392 420 -.49360572799676444 +393 420 .06985114213668478 +409 420 -1.2082934732192707 +410 420 .7829621126439672 +411 420 .48636949107975364 +413 420 .035508670009396004 +467 420 .31724421729635444 +475 420 -.050045648210685884 +476 420 .47077025785451426 +489 420 -.474012416802874 +505 420 -.8334279442439613 +506 420 .9860402064266545 +531 420 -.4708264424628408 +534 420 -1.4042724188120543 +547 420 .5126873379247036 +564 420 .7122571205118988 +580 420 .41603382819157697 +597 420 -.39162275438126476 +609 420 .4948246402823713 +619 420 1.1727890590622256 +623 420 -.3363726005467077 +632 420 -.6905633672329119 +659 420 -1.0739819945525926 +685 420 -.16555586029080988 +688 420 -.5563989963719628 +692 420 -1.5828944228168043 +714 420 1.008322514964117 +736 420 -1.3292564291487876 +740 420 .6847513696462079 +758 420 -.9764277020833901 +770 420 -.35714047253202574 +774 420 .19664109542694758 +780 420 -.077456319426221 +785 420 .04730549170111211 +787 420 1.4305724699390154 +792 420 .250114560936885 +825 420 -.1558609596179546 +841 420 -.4907016970004852 +851 420 -.01979894526837425 +858 420 -.8445311803211363 +861 420 -.38857973336441265 +885 420 -.5320870926107937 +898 420 .6669995027517528 +905 420 1.129475247921158 +906 420 .38074793586257993 +928 420 .09171648178421918 +964 420 -1.5344361086597547 +969 420 .21184837198476847 +973 420 -.7845035901381727 +980 420 -1.0165386914210939 +992 420 1.297006112648804 +10 421 1.0407197101842547 +12 421 -1.6226237876185485 +15 421 -1.1071794263839632 +24 421 -.5683063965253115 +30 421 -.4228176545382213 +59 421 1.7241314969668946 +65 421 .17526100785117382 +84 421 -.6805677800484766 +91 421 -.8974749908964421 +94 421 -.47762301561020704 +102 421 .9269786581318463 +125 421 .5137928452691284 +139 421 .9963556755052317 +158 421 -.747912556810336 +162 421 -.6970458122067099 +168 421 .16007955399072724 +172 421 -.9731765661118579 +189 421 .007981748712715647 +201 421 1.7218858250851279 +212 421 1.251825450344053 +213 421 -.6049793287909926 +218 421 1.2478077373514807 +220 421 -.5164466058318792 +225 421 1.6234567810274485 +229 421 .5232827610918777 +237 421 .762963877517087 +238 421 -.3790419919599789 +246 421 -.1217745152539155 +250 421 -.5479728673680289 +255 421 -.8602280272478878 +260 421 -.6287173611182207 +272 421 -2.195945085831808 +328 421 .20125053713874194 +334 421 1.412843769902043 +338 421 1.3825352733855347 +362 421 .7582896498653637 +371 421 -.1954161941739163 +396 421 -.7342874362497851 +398 421 .9531784641639656 +415 421 .34810800221503313 +419 421 -.023922195175771023 +436 421 -1.3382167362568729 +446 421 -1.0303496537829158 +455 421 .6236097330023173 +467 421 .4597684513462186 +473 421 .20826037796690453 +489 421 .28256934607014766 +500 421 .722064172986207 +506 421 -.5291069011437356 +511 421 .8739688793358301 +512 421 -.6019553758069137 +515 421 -.8232577489190331 +530 421 1.5533541769326806 +533 421 -.2704043666319527 +541 421 1.0904395423106188 +551 421 1.0016653092807832 +561 421 1.1950037941144565 +567 421 -.04354104454839974 +578 421 -.21487319450465198 +587 421 .2945501264979083 +605 421 1.1164022188958884 +608 421 .8847080182305862 +625 421 -2.149934542917099 +643 421 -.5048173587175426 +653 421 .5298056082546797 +663 421 -.7971578887573617 +670 421 .263837151313949 +672 421 -.45192871135902957 +674 421 .3750423447168346 +694 421 -.6496204997049676 +704 421 -.2913409272619776 +732 421 1.4467332998590459 +736 421 -.011791553855845543 +741 421 -.515970171302143 +758 421 .2426325092593749 +770 421 1.6618999021320593 +777 421 -1.047514009235723 +793 421 -1.8236525037365845 +805 421 -.2666760850805115 +813 421 .0024429724030879396 +825 421 1.0567984794663414 +831 421 -.6928265900979225 +835 421 -.580101067755922 +839 421 -.5947871014032081 +851 421 -1.0158516446050343 +855 421 .9033425836806951 +860 421 1.165757310602863 +877 421 -.3658853408000559 +941 421 -1.455284644872161 +942 421 .22593232347463732 +945 421 -1.434653783141727 +962 421 -1.7111441860988028 +970 421 -.9630259131388609 +980 421 -.6951084732368233 +982 421 -.7290877862772329 +7 422 -.8819190604923687 +15 422 .046120907666405815 +22 422 -.3786652444318085 +29 422 -.9316905773747904 +41 422 1.2546547210149985 +46 422 .14526390526715632 +49 422 -1.0075669116744699 +70 422 .1432951042021923 +77 422 -1.6761434540713016 +79 422 1.5743876919923983 +84 422 .6005232914061541 +102 422 -1.9305897558929537 +107 422 -.7650597104670668 +108 422 -.32045170015091856 +109 422 .7327125746805913 +118 422 .6101298911271957 +122 422 .6569348197478377 +126 422 -.1205393726867021 +129 422 -.4164562443003498 +148 422 .5709141969712819 +168 422 -.7893867182220843 +176 422 -.7895943109329394 +180 422 -.5709873749307043 +193 422 .4529968554032578 +204 422 .03162438036355603 +213 422 .2876903385706334 +214 422 .5734365404964386 +228 422 -.2609617927762427 +234 422 -1.5534484150840047 +256 422 .19413390304986894 +274 422 -.16136220085435876 +283 422 -.5211991805201205 +286 422 -.4675637384428417 +292 422 .8058127797860535 +311 422 .2096082029729533 +313 422 .2563074038806696 +316 422 .5716477800478911 +340 422 -.6042750814911115 +342 422 -.6067266575463605 +357 422 .37469028742989935 +363 422 -.1677514560805186 +367 422 -.327793714660048 +368 422 2.3017311584712306 +369 422 -.477659647664201 +373 422 1.9582250321289645 +375 422 -.22854327065814584 +390 422 .18459319560818663 +395 422 -.026595057435967323 +402 422 .6892340506584467 +411 422 1.4716413573412819 +426 422 -.6388103151281742 +428 422 -.6915792124119727 +448 422 -.4341822415946939 +470 422 -1.1855714803506388 +471 422 .3559196375642963 +477 422 -.6036001933300088 +483 422 -.45574573173908245 +488 422 -.4243036621089211 +496 422 -.3027397547783561 +505 422 -1.3119900870224068 +510 422 1.371166884748415 +511 422 .08293805748750799 +515 422 -.5552183126426872 +528 422 .04255542384836257 +529 422 -.30052496413245644 +532 422 .1649483395267049 +547 422 .047960262817942925 +557 422 -1.8032266794914533 +563 422 -.6345476328784269 +565 422 -.5040234520825919 +578 422 .9512064837385488 +579 422 -.37785896461083895 +594 422 -.9859514413398326 +601 422 -.037507525171327716 +619 422 .45873490877421896 +631 422 .020856727305647207 +635 422 -.22554547210273926 +647 422 -.5037117675459994 +651 422 -.32026341470049136 +661 422 -.37996797058047393 +686 422 1.1059286693935122 +699 422 .7803012009372449 +707 422 .20880997172390559 +708 422 -.08479614004875258 +713 422 1.275244504145352 +720 422 .023960774267344664 +742 422 -1.3108457169505494 +746 422 .22697466454068588 +748 422 -1.716449080843636 +749 422 -1.503669337809908 +754 422 -.7408169721763436 +755 422 .23664928586601203 +758 422 -.7990346125323535 +768 422 .3892657412086733 +778 422 1.3786063976878609 +783 422 1.5439063020263033 +785 422 -.9261464408788587 +803 422 -.5721760722691674 +833 422 -.34639568753399275 +837 422 .4019894748748495 +847 422 1.7769325158012597 +868 422 .19265356820040708 +882 422 .581524574617541 +884 422 1.056016491373066 +885 422 .06870962666797487 +890 422 -1.148863647548373 +897 422 -.6403940924523626 +899 422 -.40517946367243896 +904 422 .18097677777400925 +918 422 -.8716093507242986 +925 422 .06681936115105866 +933 422 -.6701504899723759 +944 422 1.0204465718865596 +950 422 -.28646779811481327 +953 422 .7838964676711903 +959 422 1.3661770673142741 +963 422 -1.5245044021413339 +972 422 .12560976955817904 +980 422 .2381762304467122 +983 422 -2.337414289418639 +989 422 .6248778159343571 +991 422 -1.0761080193525612 +4 423 1.2113586952165976 +12 423 -.12248934660460399 +17 423 1.240733630609392 +24 423 1.220406869313842 +49 423 -.06383246568745754 +55 423 1.2396478768688757 +56 423 -1.0031483309012537 +60 423 .5047155448941767 +70 423 -.6445656043868095 +73 423 .7619746194029661 +75 423 -.7911844904261817 +78 423 .7554553001182255 +82 423 .7700371443847963 +92 423 1.8754570402527027 +97 423 -3.092027623260517 +101 423 -.9102003244138084 +107 423 -.7155185963982981 +131 423 1.2937100494023612 +133 423 -1.3308029094678586 +135 423 .05364787549871608 +139 423 1.7797532535990894 +187 423 2.2750879085560114 +199 423 .7154773217631575 +201 423 -1.153071824511358 +212 423 1.6473998430160954 +213 423 .020320391857990686 +215 423 .4131044220383578 +244 423 -2.070373468825003 +260 423 1.2973227863277605 +277 423 -.02413453560846307 +283 423 .7833333824801807 +308 423 1.6950363025307331 +310 423 .5523810565686216 +315 423 -2.057908599747282 +317 423 -1.1442122138933546 +345 423 .02611263736152193 +350 423 -.031030254558815876 +354 423 .8861993033545217 +355 423 -1.0675218472994916 +378 423 1.9241782188921115 +381 423 -.12034297855981424 +382 423 -.0916665855123909 +395 423 -.05355550836966953 +409 423 -.5277570933121543 +410 423 -.4549015134720142 +411 423 -.19024212797774223 +416 423 .3919413349221271 +431 423 .24402088561758226 +432 423 .971746792334038 +440 423 2.0592275099678883 +472 423 .006250940642248837 +476 423 -1.200288195841384 +493 423 -3.103101625585853 +499 423 1.4206596623342913 +517 423 .0035509212697435594 +548 423 1.1272431476502065 +577 423 .2569057467711107 +588 423 2.0337165632487304 +590 423 -.08268220919424778 +591 423 1.6043904021813813 +599 423 -.33772060625924116 +603 423 1.835040889470529 +614 423 1.410684909801023 +631 423 -.5135339398326415 +634 423 .26537901652844903 +636 423 1.0115974065702522 +637 423 -1.223769662067845 +658 423 1.3007709954153894 +676 423 -.3915527058581084 +689 423 -1.646897094352315 +693 423 -.1293948426739564 +702 423 -.27060658467771415 +711 423 .08227924082565236 +713 423 -.9037348105467923 +724 423 -.12336831910441481 +725 423 .20763543109364327 +751 423 -.9358584567404867 +765 423 1.3375882460670296 +777 423 .6482462715197784 +778 423 -1.406785590576452 +782 423 .7068780276662524 +785 423 -.762073439654955 +800 423 -.9170813304190394 +806 423 -.45859066669421583 +810 423 -.5221329205126735 +815 423 -.8968474523092451 +818 423 -.2833890997046351 +819 423 -1.432384953401829 +837 423 -2.2824987931673686 +839 423 -.3462867069091103 +848 423 .165756905013246 +858 423 -.7813472436301111 +860 423 -.5348016959208359 +872 423 -.48197536826296167 +882 423 -.5243456517186443 +918 423 -.288490622193295 +969 423 -.4671472125584344 +977 423 -.5634816712204384 +979 423 -1.135471406910376 +981 423 1.0663053523401664 +992 423 -1.396731883054624 +993 423 -1.8487651047159002 +1000 423 1.65961899941913 +28 424 -.7620606676487109 +41 424 1.5860703773943163 +42 424 -.8851808297637113 +48 424 -1.0716042569747146 +70 424 .4403461802355022 +77 424 -.7013795453895069 +94 424 .8761917063475686 +98 424 -.2914444083119101 +108 424 -.41857662306326515 +125 424 -.6012352177979463 +127 424 -.49601210623014247 +130 424 -.36993513468285155 +137 424 .26501233879374325 +149 424 .11142375536658866 +152 424 -.29651454525451043 +161 424 -.7112198285192979 +167 424 1.1848915073785047 +198 424 1.527743340742425 +202 424 .7290174858927213 +203 424 -1.2293977516054542 +233 424 -.6099428937858493 +245 424 .22975798984356802 +255 424 .831751000381884 +258 424 -.6940029585635565 +260 424 -.46686671799443236 +263 424 -.08935187389450983 +302 424 .6034440977870892 +315 424 -1.7581771315014 +349 424 -.6255162996253782 +360 424 -.9709251778430183 +361 424 -.8177230986948796 +362 424 -.31512139758730434 +388 424 .662759524679192 +392 424 .7816791945463094 +399 424 .06650470646806844 +418 424 .9307435629193471 +423 424 .09583730180484948 +434 424 -.17634477994377265 +444 424 -.8367427851419349 +447 424 .47970666063115125 +462 424 .07420840099220878 +486 424 1.9478395118665779 +490 424 -.010852454891130854 +502 424 .2913183049816031 +507 424 -1.6367478172088472 +517 424 .3698708417657073 +521 424 2.067793177543423 +566 424 -.2354272542056772 +583 424 -1.145897803358041 +592 424 -1.7039352559739507 +606 424 .25673402709514126 +613 424 .20842658493645766 +637 424 3.0626305051913216 +657 424 -.26897386050523203 +662 424 1.0396120644355298 +664 424 -.3443714413507362 +677 424 -.7572111359018854 +693 424 -.7512056210503856 +724 424 -.5403063884021214 +726 424 .3392793781907453 +731 424 .031697995276411844 +736 424 .4112658138035949 +748 424 1.2188062661479164 +749 424 -.6613103952962192 +755 424 3.213019280368729 +756 424 -.10795425212194693 +761 424 .5821442189634904 +763 424 .025733835674687407 +771 424 -.3822349236028492 +788 424 1.0857605692654768 +807 424 -1.2398332673903925 +824 424 .4135468670599356 +830 424 -.008945022820609265 +834 424 -.7790494407347869 +870 424 .9171929292582124 +883 424 -.3264667939117685 +898 424 -1.3985293648984367 +908 424 .41551412843783764 +917 424 -.10605209810223232 +920 424 -.006347275507427377 +928 424 -.6401818029160018 +930 424 -.39899774334085125 +947 424 -.8319145600533319 +961 424 -.5392682570266836 +965 424 -.4618315946796952 +982 424 .13881291971922594 +998 424 -.8898774016400587 +5 425 .7285773422628483 +11 425 .7383917651705905 +42 425 -.13100648818315377 +45 425 -.005928420451300709 +70 425 -.569408613994048 +72 425 -.6954778560295621 +74 425 -1.7392954839192176 +82 425 -.5642880936138713 +90 425 .10195848472782415 +99 425 .031875259696047105 +110 425 -.007901858967602215 +126 425 -1.02389696569131 +132 425 .22019734950738273 +137 425 .5297070702276047 +144 425 -.0242695319277611 +151 425 .8624636058783273 +156 425 -.27858358553813567 +158 425 -1.5449475560789048 +161 425 -.215227789405816 +174 425 -.15585960043525904 +177 425 -.2338124255385893 +178 425 -1.2887647965109341 +186 425 .04543789968658317 +202 425 .8503816947781921 +213 425 .41795040752983625 +214 425 .6341234679329824 +235 425 -.26319694829720325 +238 425 .5602186308611544 +251 425 .8728036703377678 +266 425 .6985587558863069 +277 425 -.12537027793368843 +278 425 -.20415686806374095 +292 425 .4300093393891698 +301 425 -.49872803749000544 +303 425 .5934068115748201 +307 425 -.2509453303114081 +319 425 .35785295328592104 +359 425 -.15330266802316006 +365 425 .37545357889673686 +371 425 .07147198859925027 +382 425 -.39440126215589927 +388 425 -.1388752532606213 +391 425 -.7804992164182399 +394 425 .1813111701333372 +395 425 -.5710057915006044 +409 425 1.57953696251596 +431 425 -.06895651676182643 +439 425 .4644995815666118 +440 425 .34692263205210855 +450 425 .28382884255121255 +465 425 -1.2557431250324205 +491 425 -.07005642398155593 +501 425 .5797445175203748 +506 425 .5592964304127889 +536 425 -.37665096813868437 +546 425 -.3628000897711513 +561 425 .5931221862789391 +563 425 -.6251058611202982 +569 425 .026546424016109627 +577 425 -1.1204904038195371 +578 425 .31642110445299476 +586 425 -.2520037377619976 +588 425 .41084554110752936 +591 425 .3412993291342821 +596 425 -.6628546068822379 +610 425 1.2339754927817685 +618 425 .3021800512634595 +628 425 .37650904484893477 +657 425 -.35297154196131986 +678 425 -.15122018542484822 +694 425 .46209173256123115 +706 425 -1.0264354184756808 +717 425 -1.2973333657142008 +729 425 -.16273337373485564 +745 425 .13354316355479945 +751 425 .4902458966835343 +753 425 .3444055839028783 +770 425 .10888719506379874 +804 425 -.4838889036484002 +806 425 .35803475348259994 +809 425 .09216577205972226 +825 425 .5068888679675416 +850 425 .30267065546136396 +851 425 -1.1527887543592732 +853 425 -.7217009796321611 +861 425 .9134601991452952 +864 425 .0566513421191434 +865 425 -.09144231360015864 +869 425 -2.1820306058348407 +872 425 -.512974788269575 +873 425 -.6333877594914228 +895 425 -.809970538661944 +915 425 .13249916764091613 +925 425 .5561056629403893 +940 425 -.4992720889844914 +947 425 -.08625061674555562 +950 425 .6738586975959657 +952 425 .3429530115736027 +953 425 .41932600929331115 +974 425 .6807779859780005 +975 425 -.340053802467113 +976 425 .48764789260740987 +982 425 .2395600007628508 +990 425 -.0977191185839766 +999 425 -.497624381740979 +13 426 .7486652837674731 +23 426 1.2389727172665097 +43 426 -2.070815180922432 +49 426 .5138995077796401 +52 426 -1.5785646425240272 +73 426 .9642535500628173 +74 426 -1.2172982259278562 +76 426 .2897886764579767 +82 426 -.25047356435829377 +84 426 -.006708022482314779 +91 426 -.9346308361619208 +109 426 -1.1805518219943765 +114 426 -.2991415611137017 +119 426 1.5975065403676563 +122 426 1.0127819297081155 +133 426 .23952468753957878 +140 426 2.6114754942383396 +169 426 -1.745229811587925 +196 426 -1.9574891774890348 +200 426 .4148786045853685 +206 426 1.1840073642817583 +236 426 .366414733458188 +239 426 -.6270715839506353 +244 426 -.09143290999922327 +257 426 .20808797173229587 +277 426 .39007355462476945 +289 426 -1.2745319835550724 +294 426 .5317566907698289 +301 426 -1.1828192647098952 +319 426 -.6451103999688098 +320 426 -.08093216133896292 +323 426 -1.2196097037328262 +335 426 1.7646751999722727 +358 426 1.3619508864479961 +364 426 -.062211771065561 +366 426 2.0776341402674854 +383 426 -1.554575074416784 +395 426 1.1940274708054568 +419 426 -1.6381885567074448 +421 426 2.204013733888992 +452 426 -.9135192984031032 +453 426 -1.3316859969243784 +462 426 .10838797431491558 +469 426 .1258485173060665 +477 426 1.592319927141816 +480 426 -1.3704689599166147 +481 426 .27441933459902335 +498 426 -.6422176944138991 +508 426 .16489312728711433 +509 426 .6840411642245074 +510 426 -.1363976241236754 +516 426 -2.114381809555893 +526 426 -1.28044254074794 +527 426 -.40090059821955953 +528 426 -.35134628481938573 +532 426 2.110197216176099 +536 426 1.750120048061294 +541 426 .9898547110591118 +546 426 .817798050576493 +556 426 .7581577648183375 +576 426 -.03953521047293207 +582 426 -.19797460472306996 +586 426 -.8778567857601742 +600 426 .07807760267545096 +609 426 -.9908627879447613 +626 426 .24015697068702577 +636 426 -.21310424041440718 +644 426 2.305208122923286 +652 426 .8605494475818607 +656 426 -2.866359261954866 +658 426 .8764594606695041 +665 426 1.5827113105138817 +670 426 -.685178757148956 +677 426 -1.9835103948848185 +682 426 -.4982616650171625 +684 426 .9832853971692128 +689 426 -.6731863976568957 +690 426 .2133268350427923 +727 426 .014734891342004008 +745 426 -2.026201395624085 +749 426 -.37345350331152005 +761 426 .4185402404456872 +773 426 2.248699250054563 +776 426 .1241717703228086 +810 426 -1.9117974163585256 +830 426 -.9379434820871174 +835 426 -1.2017816356908053 +861 426 .07256401505104434 +878 426 -.2822935931761066 +900 426 .3863429118481444 +908 426 2.072489594318465 +911 426 -2.1365395287713276 +918 426 .07352361623707211 +930 426 1.3815425716140275 +934 426 .625249684405604 +935 426 .26243607258855184 +944 426 -.35565434264826007 +981 426 .14835640194964886 +989 426 -1.8390506491809318 +7 427 .5415414274962902 +21 427 .13310421824918794 +36 427 -.18373513013495973 +48 427 1.0984476139552632 +52 427 .2655556895562046 +54 427 -.051411068309468205 +96 427 .9401926986792898 +97 427 .46130853075445627 +125 427 .3856533911222291 +140 427 -.8543223145194571 +153 427 -.29429420054434396 +162 427 .2773626404500736 +166 427 1.5034580239269195 +169 427 1.0839285027284586 +174 427 .7451901870127641 +181 427 -.12214062746405283 +191 427 -.2004464850006995 +203 427 .2830682005162752 +207 427 .046928195719522225 +230 427 -.26896557524011444 +258 427 1.301375995322082 +277 427 .11233021004802306 +282 427 1.0553315770997456 +293 427 .32606296256331924 +310 427 .0018053268452605103 +318 427 .8201885119327013 +320 427 .4351731429468344 +335 427 -.7192781220257369 +354 427 -1.1898063331126147 +363 427 -.9068344755296607 +385 427 .5117256801450996 +389 427 .4320515398575878 +405 427 .19389378272793212 +407 427 .19276544710729446 +424 427 .4405337862336636 +458 427 -.29127836140944285 +463 427 .6228687425297696 +465 427 .3278618710724013 +472 427 -.5009811303926179 +473 427 .6831516950464688 +487 427 .2220349835159089 +504 427 .2884378745936693 +508 427 -.8774534463434059 +519 427 .010508986444815772 +521 427 -.7443925055446182 +536 427 -1.453877119047846 +538 427 1.1857767141360245 +541 427 -.7124272527778642 +542 427 .47973063927896153 +545 427 -.4177057267083748 +558 427 .6897309173740371 +570 427 -1.2319039201760857 +572 427 -.5140179242537491 +577 427 1.150810631362151 +579 427 .007860882243403755 +581 427 -.2990552292521081 +584 427 .21208611697900903 +596 427 .04419482300845426 +605 427 -.01867773064384197 +606 427 .5189173285185257 +607 427 .5712336914669417 +610 427 -1.9602832437002484 +615 427 -.7429935823508524 +630 427 1.3272724145751582 +637 427 -.8131509806538512 +642 427 1.310661142694176 +658 427 .3434475680889491 +676 427 -.1588685853669162 +679 427 -.05955754440857802 +684 427 -.17969186209396815 +686 427 -.13487685092993743 +693 427 -.4436530704631989 +737 427 .48875122168176577 +745 427 .9696084426836135 +753 427 -.562084518687434 +754 427 .08748423165769569 +762 427 .4630873583775959 +775 427 -.06515104289589779 +810 427 1.3509489810882052 +812 427 -.1789733448546147 +814 427 -.09304340940352199 +829 427 .11144907060494867 +833 427 -.08810324004534384 +835 427 1.0417727426820946 +849 427 .7115271222366699 +872 427 .21603169022050903 +876 427 .5395538899590976 +881 427 .10657664797462818 +882 427 .1564086308407941 +887 427 -.3145854329629712 +896 427 .16443376757703831 +900 427 -.7818544370457543 +910 427 .8357257843123943 +916 427 .2785450305698299 +917 427 .33031788903250625 +920 427 -.3710700931220071 +943 427 .13070628240273352 +947 427 1.1365732748413797 +952 427 .6531571737675866 +956 427 -.0026808909231405068 +957 427 .3550146720080053 +959 427 .49290444672385303 +965 427 .04816673168342156 +966 427 .4011187687626735 +970 427 .8348928058291972 +977 427 -.3760416680409532 +984 427 .7266398479405215 +16 428 .057978852119475316 +20 428 .5382121602328342 +32 428 .9616928307572931 +42 428 -.1887096164595764 +49 428 -1.0068493499835134 +55 428 -.694661698966799 +64 428 -.18420832584145602 +82 428 .7176891500022027 +86 428 1.0519265678022711 +99 428 -.4982212390667954 +109 428 1.1191330699311042 +115 428 -.9615898871108296 +124 428 -.754650478943762 +135 428 -.5089192846304323 +142 428 -.18487971322800317 +144 428 .5846150003335155 +159 428 -.128487937609274 +190 428 1.5951720414255983 +219 428 -.964041395806771 +223 428 -.09378353997117386 +235 428 .3854978250026194 +248 428 -.23242780422444792 +249 428 .05388662503869798 +254 428 .3611175935706108 +264 428 -1.3787898511619159 +287 428 -1.2119580397090453 +296 428 -.19957687852092626 +300 428 .4408831150446128 +316 428 .18629922960488418 +320 428 -.19280211617794757 +321 428 .9738686425850411 +329 428 .4582331965353547 +339 428 .35692352509623626 +344 428 -.6697414610252419 +349 428 -.6656733308793923 +353 428 .3697175639553393 +414 428 .09950318938932239 +416 428 -.7813729100945721 +443 428 -.6327154381171635 +452 428 -.372821445958718 +470 428 .946992004077188 +471 428 1.330734315962722 +481 428 -.21381082181405284 +497 428 .14781469554835724 +523 428 -.7669574827857699 +531 428 -1.0974771867666449 +543 428 -1.395484169364638 +546 428 .21206262554607128 +550 428 -.3525389960924141 +586 428 .6045070499602554 +592 428 -1.2202978838015064 +597 428 .027002568987166686 +601 428 -.06461160256684728 +603 428 -1.3263595511323232 +632 428 .10401732248239047 +637 428 -.11679438194716307 +656 428 .6392068625879881 +671 428 .8694222785531271 +680 428 -.21375933248892603 +687 428 .17822527155594486 +701 428 -.7614739383868679 +712 428 -.04489446029995868 +713 428 1.3686024485223174 +715 428 -.734589139619547 +739 428 -.7662616663567634 +750 428 -.3396952783256655 +752 428 -.04724835289402443 +769 428 -.34493762435011943 +774 428 -.19450009507901872 +779 428 -.5567299106992402 +790 428 .3433002597703546 +799 428 .9102384595408757 +819 428 1.3101685376411156 +824 428 .21904613095543146 +827 428 1.0505078379963573 +828 428 -.8865822166670064 +847 428 .23317621543817135 +848 428 -1.3310752385739697 +856 428 .4527030583601477 +857 428 .008850023839562404 +859 428 -.22565081981047264 +865 428 -.1409570501640791 +874 428 .07973972247841031 +877 428 1.390915297566867 +880 428 .1314142928864457 +890 428 -.013483057979454482 +894 428 -.16271043011600334 +897 428 .4163126504169347 +910 428 .24660850786526994 +923 428 .16743948964038122 +926 428 -.611355975008838 +950 428 -1.3268600716430685 +957 428 -1.1670705701481483 +972 428 .22458617698709865 +991 428 .33723403072851754 +994 428 -.13814765731916304 +14 429 -1.399963740196789 +18 429 1.7542821267235018 +26 429 -.448289403342234 +33 429 -1.3718149575466485 +37 429 .8061370874857996 +41 429 -2.1863427717611565 +49 429 .45415442075057333 +59 429 2.4318782547707087 +63 429 1.7002653071441178 +74 429 .8422953869620285 +76 429 .5781771511778571 +81 429 -.6629859912474877 +82 429 .135189122668973 +106 429 .27150194617950546 +111 429 2.029805206302186 +125 429 .9289141440073878 +129 429 -.681026330800746 +138 429 .5399800126158325 +139 429 -.2642577772421839 +141 429 .6742867516365108 +142 429 -.41150888189971935 +158 429 2.184650995785427 +182 429 .43032590348614214 +183 429 1.154114557370816 +226 429 2.319885580095709 +230 429 -1.3199343379739452 +231 429 -.21578903307936867 +232 429 .29638304300334595 +233 429 .7897356192869797 +242 429 -.7001979103629092 +248 429 -2.336526215472398 +265 429 .7843162257995402 +270 429 .19807679246547194 +278 429 -.9973769819794643 +289 429 2.0199773894838837 +301 429 2.265320404030722 +306 429 -.658641091549416 +308 429 1.5059222293958914 +309 429 .26995120221193614 +317 429 .7080365334444525 +319 429 -1.1875170227830758 +333 429 -.7398444277478351 +336 429 .24582738595897982 +338 429 1.1305607467855208 +339 429 1.5510430874555223 +341 429 -.3174861805199012 +343 429 -2.1316286445626402 +355 429 -1.572364940375613 +356 429 -1.3551954655978198 +357 429 -.36273510711033025 +371 429 -.9776285111941572 +381 429 -.382955657418007 +386 429 -1.7087378954674293 +398 429 -.8874842044004888 +404 429 .8396612210757194 +408 429 -.6425045703339571 +414 429 .18995062158829779 +425 429 .037303348226679356 +448 429 1.0763190474008766 +451 429 -1.337110250390374 +469 429 .706702740310905 +476 429 1.132962819310738 +482 429 -.17375844366950338 +495 429 .6887748039298907 +502 429 .7373703331887334 +504 429 -.25217301760766353 +556 429 2.3716104079559104 +559 429 -1.2252463202959067 +571 429 -.4416095946429972 +574 429 .5586933569563104 +582 429 1.3374819086171874 +591 429 .8132162922131223 +592 429 -.5274936443846181 +594 429 1.793248682903467 +604 429 -.08617467261305187 +605 429 .6016594779074813 +618 429 2.124596656050322 +624 429 2.3832279577658584 +626 429 -.5178221348405313 +628 429 -.2762858551223102 +635 429 -1.1152011921177256 +639 429 .781874798517843 +641 429 .08384503178961097 +645 429 -.2583592690463964 +649 429 .6725228703354289 +650 429 -.751105048589745 +662 429 .10786599013802156 +670 429 .2533187723123935 +673 429 1.4224359179778683 +675 429 .6820544437362552 +685 429 2.6957395707448564 +708 429 .5022677356178112 +714 429 -2.736234229111713 +724 429 .027529234942625776 +731 429 .09036989180996001 +735 429 .08321463017615195 +758 429 1.7864298031347274 +770 429 -1.8568561404953965 +779 429 -1.150093126233942 +781 429 .26767943675276007 +786 429 -.5893468165799113 +802 429 -.1820054159573103 +805 429 -.5033157924093962 +817 429 1.7895249879958186 +828 429 1.3062598781504529 +829 429 -1.0024821470266632 +830 429 .9801323871706248 +842 429 -.6644866790636518 +844 429 -2.1767489083251848 +858 429 .4971961898183379 +859 429 -.4271186665931117 +875 429 .420671241116365 +880 429 -.7391318621463929 +883 429 .5691097233451189 +889 429 -2.1807093429452125 +898 429 .7841981241143458 +910 429 1.1978773252354837 +935 429 1.280145018143567 +938 429 -1.6082807775223957 +948 429 1.5817692728797454 +949 429 -1.0077486833807836 +954 429 .5795314722180405 +976 429 -2.3502237440270934 +995 429 .02200977726466762 +996 429 .6035628433197067 +9 430 1.5938259361914877 +11 430 -.11374466303531519 +12 430 -1.328741557409801 +27 430 -.9800984926743987 +29 430 1.379004262908815 +30 430 -.21983392812088895 +36 430 -.13504031456201093 +41 430 -.07415516972186115 +42 430 .25819719515877354 +58 430 -1.0739994040467837 +96 430 -.7289332128892708 +101 430 1.2609604546821092 +106 430 -.4333463903590461 +122 430 .6336483191613009 +140 430 .522931769459243 +164 430 -.6167544404471438 +174 430 .4927288966278729 +189 430 1.9166896738981243 +191 430 .9696104204507854 +193 430 -1.8543321299394608 +195 430 .31247184449932586 +200 430 -.18632373135500496 +208 430 -.5704596536959581 +246 430 .451110492803507 +259 430 -.7579483572844397 +275 430 -.9017172782260124 +294 430 .3306310355150497 +296 430 .9834551725607156 +306 430 -.3844687156703148 +317 430 -.7007573913043147 +334 430 1.6491358032671761 +335 430 .530994411505164 +349 430 -1.1455193122941458 +355 430 -.11657283058334955 +366 430 .24532381105252227 +375 430 -.35591617206200044 +381 430 -1.0007944746871555 +383 430 -.6618027890323892 +388 430 .6102821224702237 +401 430 1.6432718118658585 +416 430 .4902436153624812 +459 430 .663544196999371 +462 430 -.1065079029540882 +487 430 .5037878793850843 +542 430 -.05015205538001813 +557 430 .4953785231349258 +566 430 -.48490090817157866 +572 430 -.04272880948156085 +576 430 1.087887883899542 +577 430 -.636967235546304 +579 430 .07252500683705634 +586 430 -.14067292177411722 +599 430 .33674106705841617 +601 430 1.1237812741889224 +603 430 -.7030783623952255 +606 430 -.3621147531307413 +609 430 1.1481497849362097 +611 430 -.3997053361725501 +613 430 .10591856709897274 +627 430 -.4331111235236659 +636 430 -.24555488813598186 +664 430 .23547832342701785 +725 430 .04406808231048459 +733 430 -1.150213279481017 +744 430 -.468409262649259 +745 430 -.5771022827753852 +760 430 .10551880508211277 +764 430 -.12910355860478812 +773 430 -.22829877848127011 +775 430 .29533389597761284 +776 430 .815638420304683 +784 430 .03277017798603641 +786 430 .6008822692955116 +788 430 .6243152013373439 +798 430 -1.565416895397314 +817 430 -1.8654558279023843 +836 430 -.10230119949110321 +839 430 -1.1074867496314353 +853 430 -.20773454839590827 +888 430 -1.2779130414471347 +892 430 1.1935156768181907 +901 430 -1.0384721080345436 +913 430 1.3931784404923917 +926 430 -1.0141337108670392 +936 430 -.820904229994133 +938 430 1.4349991575101186 +941 430 -.9126498038621381 +950 430 .016700319779554718 +952 430 .5259929442787894 +965 430 1.4473094059771896 +969 430 2.3985254437196444 +987 430 -1.5783655380158486 +8 431 .9315041333706355 +11 431 -.7179739076889342 +13 431 .5024071119146322 +33 431 .9260667683981012 +42 431 .24669665286057113 +60 431 -.8463943141283676 +87 431 -.29682798827867607 +94 431 1.581284296339643 +103 431 -.2665356012368021 +104 431 .36560257776168803 +136 431 1.2711842810416494 +158 431 -1.0927122923931458 +159 431 1.224621049678241 +162 431 -.38122209702049514 +176 431 -.7611380143109043 +209 431 -.6274036323423177 +235 431 -.5440952385461307 +244 431 .4699901959669145 +264 431 -1.1357493349827437 +273 431 .8849603965599595 +282 431 -.2240002446356725 +286 431 -.0699847003885293 +315 431 1.2798751694692112 +322 431 -.6149165299211176 +325 431 -1.5890397184656568 +354 431 -.0565378338921739 +359 431 .5201032776896519 +373 431 1.444618809325353 +390 431 -.4861589401040305 +405 431 -.016160705727481045 +409 431 .07837169281099267 +410 431 .14844808313800117 +412 431 -.9222734548323799 +422 431 -1.3872396943485605 +426 431 .2212207758848315 +448 431 -.8897983586114256 +486 431 .7502446290194446 +488 431 .3651492144105737 +497 431 -1.1783488970623313 +499 431 -.8767327991667527 +507 431 -1.3300196205391894 +513 431 2.3700190815558297 +525 431 1.7744303979367737 +532 431 .5803447123830864 +555 431 .6809524801701313 +558 431 .3461514334241292 +571 431 -1.007658270898303 +577 431 -.2541832782938544 +585 431 -.7985796094100812 +591 431 -.7609752159480043 +597 431 .6984661874603747 +598 431 -1.0062366405144418 +614 431 -1.457284662611122 +616 431 .43889439657583346 +628 431 -.35328973443658335 +635 431 -.7047871975346218 +636 431 -.34010364505628915 +643 431 .9563490636950396 +652 431 .013051409984495749 +660 431 -.014339083276046834 +661 431 -.09777349601960557 +682 431 1.2279414183553665 +684 431 -.005627332784088404 +696 431 -1.2327245448578705 +704 431 -.4287083680226671 +706 431 -.817102148389901 +721 431 -1.0032602077352124 +750 431 -.9733152305255933 +755 431 .3987407501367658 +757 431 .688994909645175 +773 431 -1.914482317927082 +777 431 -.772560521649474 +788 431 .7994588839788396 +802 431 .11666412222844796 +803 431 .8416674110395519 +813 431 -.6505628016560422 +814 431 -1.1369033135867845 +818 431 .089433287780671 +829 431 -.6518926513989087 +834 431 -.49251217913933926 +841 431 .4071338167837618 +843 431 -.03238301294188317 +845 431 -.5570458148757755 +848 431 -1.3208642567885716 +860 431 -.09481097550185838 +861 431 -1.3692639398079893 +877 431 2.1262394337993267 +886 431 .3899432957843784 +892 431 -1.0750772342717898 +894 431 .21260627671176185 +911 431 -.975845030210391 +915 431 .35825296214887015 +937 431 1.6599556856062443 +972 431 .08372204234170408 +974 431 -1.0574411990426842 +997 431 .18748282457003007 +1000 431 -.741676557450514 +3 432 .26631015615206766 +6 432 -.748364212137251 +10 432 -.6717159585874245 +11 432 -2.27785300647813 +19 432 .06501136256903994 +38 432 -.9809472793900902 +47 432 -.9737028243564245 +54 432 1.2546797765537605 +72 432 -.7765625826329297 +91 432 .394325963191741 +95 432 2.655118829266389 +96 432 -2.6593121623337943 +101 432 -1.6310083891433726 +118 432 .931757185283121 +121 432 -.5198733090717673 +127 432 3.1865834202917456 +128 432 .7130338949427578 +133 432 1.2400857429544816 +136 432 -4.546479401185341 +155 432 1.456736735068368 +168 432 .5540065007088975 +171 432 4.041631822114028 +178 432 1.9036328813147898 +185 432 -.5707593849519286 +209 432 -.29857134684454123 +211 432 -.5736947543908248 +213 432 -2.088881547263799 +237 432 .6250301964048467 +238 432 -2.1184412792339766 +244 432 -4.201542494968841 +245 432 -1.3336253727395702 +246 432 -1.2291278960443501 +254 432 -1.567732860006426 +256 432 -.6399928597562838 +265 432 1.1748271014024139 +278 432 -1.2939809478521924 +279 432 -.13077501262018137 +282 432 -1.5043357660531063 +312 432 -2.7153888105925392 +315 432 -1.8061415824149227 +318 432 4.087929665674973 +325 432 -1.5931673939768571 +372 432 1.7431723069332703 +377 432 -2.8444823811093762 +382 432 .9036218981095298 +384 432 .01655223290521371 +387 432 -.42735518826226454 +390 432 -1.3388744859283068 +393 432 -1.7132680694165523 +394 432 .44325480688305385 +405 432 -.8973950454979694 +412 432 1.170344685814929 +424 432 -.1614426115939898 +465 432 .7844006109592463 +471 432 1.9187009988447232 +472 432 1.0094276394032218 +501 432 -2.4325725160563 +505 432 -.6185640871179003 +513 432 -2.08485863909443 +515 432 -1.2993285340504885 +523 432 .335980527371087 +531 432 .25189834890016954 +545 432 -.4760441597842777 +561 432 -1.271054920198042 +568 432 -3.1756358387617 +570 432 1.2123223199122592 +583 432 -.9713243380725753 +584 432 -.9416088875524866 +591 432 .7134647256680017 +604 432 .05848473310468674 +610 432 -1.2803430949201553 +625 432 -.13118861923542527 +626 432 -.9483684512980026 +628 432 -.24799947320600194 +668 432 -.14867801240308526 +690 432 -.11810588130262471 +693 432 -.0594079682722086 +697 432 -.16286158123354538 +707 432 .636802027360643 +708 432 .7378086700718032 +716 432 -.7123690106165721 +717 432 1.9978576313722565 +720 432 1.0900985199981328 +738 432 -.8599575636509934 +746 432 1.0708149873619768 +762 432 .7551613601664219 +763 432 -1.2061064924039093 +766 432 .4951857173741598 +767 432 2.223342737605391 +775 432 .6116733814986373 +777 432 -1.8981917970054292 +783 432 .06923415780113064 +795 432 1.6628488383418345 +801 432 .056259306737704975 +817 432 1.0260675952254545 +820 432 -.10592970251827236 +838 432 .7819592286304082 +842 432 .15015407637918576 +844 432 -2.8772476417185837 +861 432 -1.8553048875449394 +869 432 2.2742371011671763 +871 432 -1.3452745825173722 +873 432 2.489351849545963 +881 432 -1.1668711785803718 +913 432 .20534735898787554 +915 432 .14736586862925638 +925 432 .34675947550198283 +937 432 .09506233411497723 +949 432 -.13470648551982567 +952 432 -2.160694546712622 +956 432 -1.544223205171527 +968 432 .6736709879498604 +975 432 .5242002000463878 +977 432 .9977205002582563 +980 432 1.7556185546495051 +983 432 1.7441773003813374 +990 432 2.6913794045726527 +5 433 .4320184890600576 +11 433 -.9459489291057104 +23 433 -.5992698277477333 +41 433 -1.1258849817569916 +42 433 -.5010318437818213 +44 433 -1.125475122561047 +46 433 1.7513784508466208 +73 433 .31718476304924104 +104 433 .7839588144829568 +127 433 .6400506114576354 +133 433 1.0894947884491217 +135 433 -1.4009638280655448 +154 433 -.4885380387141914 +160 433 -.006706612761160961 +162 433 -1.4192005564028272 +163 433 .888033673100823 +164 433 .24580829875720497 +167 433 -1.3429184131985417 +178 433 -.4056098127532524 +191 433 -.7068489821030395 +202 433 -.06651550600561262 +219 433 -.5464090253719031 +228 433 .9752388936267085 +232 433 .3614569494039357 +241 433 .15346948774274616 +243 433 .8735220181986265 +247 433 -.9966858629999054 +251 433 -1.656392488492338 +273 433 .15137871867980168 +275 433 -.9317355113051364 +282 433 -1.2746690112386827 +286 433 .5746950043763442 +298 433 -1.414592855600623 +302 433 -.5394742562698345 +308 433 .06903065706520113 +323 433 .431712213015674 +328 433 .49027639744235635 +329 433 -.6314685795101259 +351 433 .8906291529981806 +358 433 .5962335786406924 +368 433 .07353978922622004 +374 433 -.6046693497710848 +414 433 .20822001172295818 +415 433 .3328775213553457 +420 433 1.275450414082221 +431 433 -.48475644368636445 +437 433 -.3273869892149628 +460 433 -.7206877590279428 +473 433 .4316960798509043 +486 433 -1.0366728650690684 +495 433 -.3670512640520845 +496 433 -.9995099446102538 +510 433 -.552471745516752 +516 433 -.9091368487378599 +531 433 -.18236932363641142 +532 433 -.7329551315023248 +542 433 .17082440987295397 +544 433 1.0072635241949797 +550 433 -2.297519661827693 +559 433 -.056379055512402965 +582 433 .1334190598015822 +602 433 .3368432851037643 +603 433 -.21998409845840589 +608 433 -.4648441807191392 +627 433 -.16991381139095077 +649 433 .775768766386349 +667 433 1.0893538114765557 +668 433 1.2146966565882498 +684 433 1.3778024144273588 +686 433 -.337778049318856 +706 433 .5768982136252068 +716 433 -1.0667369429047395 +717 433 .7990389442700361 +723 433 -2.0328043482966764 +734 433 .037420096976388754 +739 433 -1.3162897786975407 +742 433 .9317747371214676 +757 433 -.557372963748616 +766 433 -.10583554927174393 +780 433 -.5624930930962513 +790 433 .5184718561401007 +791 433 -1.9075203390938784 +795 433 -.14889822363754293 +817 433 -.8663654012392488 +821 433 -.0322043904882576 +826 433 .4158365615377587 +839 433 -.6431954486768768 +851 433 -2.6279243676464685 +859 433 -.4594780915867863 +881 433 .3921561507499954 +884 433 -.25316354432058374 +895 433 .1782300525860025 +904 433 1.1501729600638844 +905 433 -1.5151743897786947 +907 433 .10980617847284094 +911 433 .032612911337816936 +917 433 -.1731288309123562 +923 433 .6265831579637872 +926 433 .9153630098893087 +927 433 -.7463891974051886 +957 433 -.9663403177235811 +962 433 .894344843492783 +975 433 -.19044145218337866 +987 433 -.1566427488257167 +8 434 -1.6410318459747182 +37 434 .04106678707713182 +59 434 -1.2916791098974492 +73 434 .3719750952777898 +76 434 -.7334415897230446 +80 434 .7697825836726797 +99 434 -1.274890767903693 +110 434 2.327581697795152 +125 434 -1.6163812063482748 +132 434 -.19868551210938645 +133 434 .9119236566717978 +135 434 -.4554726109167122 +170 434 -.34587734443967827 +173 434 -.40571995900463786 +175 434 .7452054063037471 +176 434 .005902719734764397 +179 434 .22464660282664023 +182 434 .11384583554019223 +183 434 -2.440371236809681 +207 434 -.27358644979403873 +208 434 -1.440458805806953 +214 434 -.47736667178119163 +234 434 -.7924560994729736 +251 434 -.4869871855332237 +255 434 .16057853130024394 +264 434 -.8109516436568308 +276 434 -.12096579456316998 +284 434 1.5626635471620336 +285 434 .6546851490572344 +302 434 .13544487359068835 +312 434 .0986226182231709 +331 434 -.19445387358291177 +337 434 .03346938722939155 +340 434 -1.3805720417717167 +357 434 -.7974909687622234 +371 434 .3796785241656335 +377 434 1.258899041005802 +383 434 -.8744047164999086 +385 434 .0027638219052180946 +393 434 1.8013982058544504 +394 434 -1.6406041262230424 +433 434 -.15170309163107554 +451 434 .5056979402102417 +459 434 -.19032530717163937 +468 434 -.16402988469855498 +497 434 -.9315290759601206 +499 434 -.08616480315787338 +519 434 -.23631034947433532 +523 434 1.0140204808905855 +529 434 -.5170538884841583 +532 434 -.5896904911768532 +560 434 -.7965841307898139 +562 434 -1.2863676027288342 +564 434 1.5439200123750294 +565 434 -1.9061197390772608 +573 434 1.6798797843530369 +574 434 -.9024703495760236 +575 434 -2.3938874109423702 +589 434 -.7247584971486333 +599 434 -.12369826417070218 +600 434 -1.916235357309999 +609 434 -.5175585844937887 +617 434 -1.7431440135003013 +618 434 -2.387295182967304 +619 434 -.07247462566531929 +647 434 .642803115501333 +655 434 1.6251381241837692 +667 434 1.2061433064395206 +676 434 -.3096816932044219 +690 434 -1.137489628562332 +692 434 -.4203311452538723 +700 434 -.965544500414072 +707 434 1.698053025497095 +709 434 -.15655677834525383 +739 434 -1.0092906250831493 +744 434 -.07616044409595765 +749 434 -1.0280386939727628 +752 434 -1.3715999716153287 +782 434 .20481507370411958 +783 434 1.345915246723511 +789 434 .44849175272415975 +796 434 .9130370022819866 +798 434 .6060442243591666 +800 434 .788286002025236 +803 434 .664815917886239 +810 434 .41402665890083556 +812 434 -.7485488573178718 +823 434 .1909884959624992 +856 434 .6084553480756291 +861 434 -.04212806285141768 +871 434 .04260552613482095 +878 434 -2.017458607093298 +885 434 -.544961830211462 +887 434 .9708850692535622 +897 434 -2.0799392853640293 +904 434 .9862983537820124 +921 434 -.6856168855357638 +923 434 2.1542031677442575 +929 434 1.7885841838859875 +938 434 1.586876576262773 +949 434 1.051235896374868 +952 434 2.0745281073089106 +970 434 .776000483049299 +983 434 -.5045422294414893 +992 434 2.073522932353198 +994 434 -2.2313872785543865 +6 435 3.239761388458462 +9 435 3.146713224256999 +13 435 -.8643548899480654 +14 435 .5074195538470339 +28 435 .945948751267829 +30 435 1.5545999228745544 +31 435 1.2934471613385548 +34 435 -.4115534265729558 +36 435 1.6530433570389582 +53 435 .30653054873819924 +58 435 .06885542742046191 +66 435 .3426694959888984 +100 435 -.7649055775683965 +105 435 -1.2918841046690908 +121 435 1.448124918147738 +128 435 -2.282776112985213 +129 435 -2.048221686238808 +130 435 -1.0529563358636782 +132 435 -.3859595910072504 +133 435 -1.8000589120156185 +167 435 3.6618844954156593 +169 435 -.5764956468802112 +173 435 -1.3127434370448445 +177 435 -.07781857717177754 +181 435 .8251533802578859 +183 435 -2.3161018707374437 +184 435 -.9811934513047117 +187 435 -6.0374918951705965 +198 435 -3.2104487786520135 +201 435 -1.7990237505660256 +220 435 1.7939745706593488 +230 435 2.781017722703126 +234 435 -2.1699802904015772 +257 435 .07276584961544252 +277 435 2.852339626981216 +292 435 -.6309720593341677 +326 435 -1.2061970018201222 +331 435 -.10200735761144815 +339 435 .2997458094758309 +364 435 .9790150790839915 +365 435 -.5634156313081827 +377 435 1.174500063731919 +416 435 .988676418799697 +430 435 -.8078573496461782 +440 435 -.1529548086962666 +442 435 -.6230215022199427 +460 435 -1.3812228980125538 +471 435 -.8505236261343889 +473 435 -.9193338526662986 +478 435 -3.9918262904592097 +497 435 1.8147612962370274 +499 435 .8699901629982285 +500 435 -.28064743629285516 +503 435 .34222281027443296 +510 435 -1.5631259251039231 +514 435 2.4424049341202396 +529 435 .7718585763661883 +532 435 -1.0748082447651284 +536 435 3.3172305423857686 +538 435 -1.949856020302214 +539 435 -1.0127924491885099 +558 435 .9951428859226892 +583 435 .6072555180204632 +585 435 -1.2185593956483698 +588 435 -1.468496535296097 +597 435 -2.972818622259915 +600 435 -1.5879161837759637 +618 435 -2.1946449870066154 +620 435 1.9828753550013656 +632 435 .21676387158302673 +636 435 1.9034134912007228 +648 435 1.033869657616044 +661 435 .3699131137638395 +662 435 -1.0824460684825197 +664 435 -.5453845424388225 +667 435 -1.782741737403241 +671 435 2.8127104176431033 +680 435 1.0430782608299478 +687 435 -1.6885761011635403 +702 435 -.29986041837397437 +707 435 -.6578026862247704 +722 435 1.578668581840021 +732 435 1.2717435546890534 +752 435 -.949867139688523 +757 435 2.5610978767646184 +759 435 1.6410799808771184 +783 435 -.6110881163979989 +787 435 1.5507052977321858 +790 435 -1.6741139996864034 +792 435 1.357550815279743 +796 435 -1.6402199184376482 +798 435 -.06211691685078293 +802 435 -.41943604692784764 +808 435 -3.0552829668176926 +809 435 -.5897749604997906 +810 435 1.6415741501798224 +825 435 -.08761702546734801 +826 435 .29600721832381993 +836 435 1.0941180276264768 +839 435 -.25929322927326043 +844 435 2.2406258734366733 +866 435 -.6392321854099103 +878 435 .04964085100084348 +888 435 -.14405206665114542 +894 435 1.8682147931700677 +897 435 .5483282878050285 +907 435 -.10358894935704198 +908 435 1.2882207547830227 +916 435 -.11583500969016948 +930 435 -2.1845181969391514 +936 435 .15792920338339528 +937 435 -.7622153902901972 +938 435 2.605405001295548 +940 435 -.4800938203791413 +975 435 -.7899663357928453 +980 435 .5565257751610009 +983 435 -1.2855633175630914 +985 435 1.9351985936800566 +989 435 -.32708557887385376 +991 435 -1.4907412783734517 +997 435 1.5908923961745323 +999 435 1.8430971581785263 +8 436 .45307467590101724 +12 436 1.4597080482586948 +18 436 -2.6993929570911033 +26 436 .3929635475861699 +42 436 -1.2254728706975393 +52 436 -1.9972899338047194 +55 436 -.08642463611300993 +67 436 1.2648275585147402 +109 436 -1.380584725247465 +119 436 -3.356032421251918 +134 436 -.24598130805821072 +147 436 3.2417333216393533 +168 436 -2.569518098939988 +182 436 -1.909477500882565 +195 436 -.42211094770324703 +214 436 .798961168433748 +218 436 .8256291357233396 +228 436 -1.106326954778572 +230 436 -1.1530712899201976 +237 436 .22806018137783976 +245 436 -3.2983271760263295 +262 436 .015181400900662775 +272 436 1.5023430938687587 +283 436 -1.678695160595294 +293 436 .7330165384311466 +298 436 -.24431036078844917 +300 436 .7958559029126171 +304 436 -1.7524530415312325 +319 436 -1.0316003364098618 +328 436 .6226241367407355 +333 436 2.167017021042527 +353 436 -.009548571419348756 +359 436 -1.806259788229684 +360 436 -3.9473585469953094 +361 436 -.8939497863334582 +368 436 3.4411202234627956 +378 436 -3.398483005630764 +393 436 -1.7292260121473388 +410 436 2.007399106810745 +421 436 .7323665482563707 +424 436 1.651552668193323 +429 436 -.8467038648004878 +441 436 -2.151896676704517 +467 436 1.560177095745226 +477 436 3.101749673681839 +487 436 .2463327054636486 +495 436 2.107118413452184 +508 436 .5677763506415007 +512 436 .5146318179486242 +527 436 -.4770003335122447 +538 436 .6263815179999049 +546 436 1.5879623344862446 +583 436 .404098472107276 +587 436 -.0205929415135105 +593 436 -1.1861364624587096 +597 436 .5390879164892817 +622 436 .7343788132183453 +631 436 .6269651694519383 +635 436 -1.8757534758257788 +644 436 1.9332217423856264 +651 436 1.0268810898281115 +652 436 -.821758186612216 +663 436 .8165546033963824 +670 436 -.3287928474366037 +673 436 2.1895162081725124 +683 436 -.9716215468218661 +686 436 2.4740816444810636 +699 436 2.229535839772684 +720 436 -.5764627671842097 +727 436 .3359835361540896 +732 436 -.803199957379369 +751 436 2.5786212377682745 +773 436 -.059786057312910965 +775 436 -.5245072262770049 +787 436 -.30506745478647346 +801 436 .4340596805519138 +826 436 -2.0831839823457123 +847 436 .46604037548058774 +859 436 2.405519060333704 +860 436 .12980566890792405 +862 436 -.861848867331027 +872 436 .5350251210353519 +893 436 -.5826289330903979 +911 436 -1.2034842104635335 +926 436 -1.5330164218418039 +943 436 -.8807320071933804 +947 436 1.4241127737255455 +974 436 -3.3111641369996474 +996 436 .6159886908343595 +997 436 1.7349188981694668 +2 437 .6906333940922499 +3 437 .8332593481785278 +13 437 .9132572997147533 +15 437 .07606779664259837 +40 437 -.21429136354605208 +41 437 .6732375098101685 +52 437 -.2035895986389622 +65 437 -.42855248894332976 +68 437 -1.4699449851238269 +70 437 -.575412223404587 +76 437 -.8992333748656233 +96 437 -.5915604218925501 +107 437 -1.2718881218791824 +108 437 -.5792139961872055 +125 437 -.16230907887170898 +135 437 .7385389898941151 +214 437 .9427603810985992 +232 437 -1.4117212145221976 +245 437 -1.8806773797585266 +252 437 .5121061551440032 +253 437 -.10977997635908086 +264 437 -.36835613220065333 +272 437 1.04015903116419 +293 437 .8356058861173074 +329 437 .5356381028168946 +361 437 1.1745698602507293 +369 437 1.0337020913189634 +384 437 .22068654488451417 +398 437 .008030092148576029 +400 437 .8745165556690234 +402 437 .3837560953163787 +412 437 .010090371959784322 +429 437 .011652168318376677 +430 437 2.473522465785386 +451 437 -.15800836218210818 +453 437 -1.0165952769707673 +457 437 -1.7617908452618525 +466 437 .327932094031105 +470 437 -.5388963308020698 +472 437 .4812352273547513 +490 437 -.6068093736674963 +497 437 -1.1585046354927087 +504 437 .12518054102573642 +505 437 .15749626668524716 +520 437 -.9410489130875055 +545 437 .6740965827332734 +546 437 -.44427898709034275 +565 437 -1.2321987705382156 +571 437 -.624018303928902 +580 437 .6241382436333331 +581 437 2.052002126357989 +588 437 .43031265242817235 +607 437 .6484700791755447 +629 437 -.5544702681210146 +644 437 -.4222502323479226 +647 437 -.33544376784252916 +667 437 1.1006682052133285 +669 437 -.3121468189054361 +687 437 -.021180563095055692 +696 437 1.2256038361663064 +701 437 -.2689980263429384 +704 437 .5852564800505365 +710 437 .0566678055212303 +715 437 -.8156790084017085 +717 437 -.14112655478232625 +720 437 -.3573879498281438 +729 437 .00817831899628163 +740 437 .8062787134161353 +744 437 -.20653828077144482 +749 437 .3831375040546196 +756 437 -1.8635184290622722 +787 437 .06150497357722162 +789 437 .25762830255652913 +797 437 -.14494330152135984 +807 437 1.5803087868904844 +824 437 .4326920629599109 +827 437 -2.293362595611572 +831 437 .45019357555231954 +848 437 1.452287762129226 +862 437 .09047923693347332 +867 437 -1.233401754273127 +875 437 -.7184645017115276 +885 437 -.43268434029104225 +890 437 -1.5040785836263506 +896 437 -.9035675452509545 +898 437 -1.2352697454127937 +909 437 .032502666585020164 +925 437 -.0852270365150476 +974 437 .6007532970860405 +985 437 .017340045480378215 +986 437 .34281308455835585 +987 437 .3189721921693471 +988 437 .4775647153828098 +33 438 1.6809725101799078 +36 438 .37306419189000223 +46 438 1.2668039814942482 +57 438 1.0001389235908882 +98 438 -.11482666702837699 +99 438 -1.229698902676657 +130 438 .2839074094117069 +132 438 -.2919574208311788 +152 438 1.4654474076013808 +177 438 1.6618851408423967 +186 438 -1.0606391605181975 +189 438 1.0362655160824255 +194 438 -.9428326932274298 +203 438 .5680711981028155 +209 438 -.30927878578940576 +248 438 .9713823421627716 +251 438 -1.6530349573553904 +257 438 .5726685400064264 +285 438 -.0662642258897808 +299 438 .23511613860937433 +302 438 1.1496785249929669 +321 438 2.228192985843601 +324 438 .4717917781136328 +329 438 -.2922153601951297 +337 438 .7442901303808304 +359 438 .060739994466220866 +371 438 -.14861734356302678 +375 438 .26374309676042174 +379 438 -.434998636848989 +388 438 -1.9306893016028113 +405 438 1.3361012219247783 +421 438 1.4169160467201647 +430 438 .11225573115572436 +443 438 -1.5744211121102125 +468 438 -.5029183148641553 +475 438 -.4206174213445383 +486 438 -1.6073458735431199 +498 438 .4665596521647458 +500 438 -1.1918767006880504 +502 438 -.7379109477559749 +510 438 -1.9117377338678734 +515 438 -1.3024671391622202 +517 438 -.7064316020772701 +528 438 -1.2078993372723714 +538 438 .4198355896346081 +549 438 -1.5654260081590223 +552 438 .1504151252206069 +555 438 -.01873324137024976 +561 438 -1.097612980462226 +581 438 .9426087789523446 +587 438 -.4410915031923283 +595 438 1.303706805753718 +598 438 -.7431765835896552 +618 438 -2.8967205905220834 +641 438 .15738902675590008 +646 438 1.9825815582360375 +651 438 -1.4015138392841977 +654 438 -2.3739910817817194 +655 438 2.2938801565756193 +660 438 -.02177667092335933 +663 438 -.9316539579115871 +678 438 2.0030691497773407 +680 438 -.172948352843824 +683 438 -.04446049829555599 +686 438 .4436268526345014 +692 438 -.8808405702898426 +712 438 -1.247971209741158 +716 438 .7030910168015089 +721 438 -.7836140699672312 +737 438 .33986073920878757 +738 438 -.8759967346333625 +748 438 -.19881585074190272 +759 438 .5900470602862538 +794 438 1.008978944492334 +810 438 .5539372012196699 +818 438 -.9170915864242278 +820 438 1.1754385547055604 +827 438 3.2841559451855593 +844 438 .18799175551742262 +849 438 -.13677908117301912 +850 438 .9020777709300294 +856 438 .18171326236607024 +865 438 -.04022861049664898 +871 438 -.165209848237321 +879 438 .020513402265025498 +885 438 -.41295654448761127 +888 438 -1.3581056902655082 +892 438 .40389682295446416 +893 438 .12784450991698665 +894 438 -.31058286586773703 +897 438 -1.6790766414892622 +907 438 1.1236488341699755 +913 438 .6558529868351991 +937 438 .23173464488088294 +958 438 1.5997020158723196 +972 438 1.1738153246518463 +987 438 -1.3271720392165653 +993 438 1.7036621097982771 +6 439 -2.02238979651323 +16 439 .6422064689602631 +21 439 .01363264751699314 +25 439 .604835891506618 +44 439 -1.1765164201251148 +60 439 -.6653103565999563 +61 439 -.8530630226379423 +63 439 .3699342000866036 +71 439 -.11427216152455717 +75 439 .15367941584274447 +90 439 .07213793847525306 +100 439 .8123938684567942 +116 439 .39818730777586503 +124 439 .16923622413051642 +152 439 -.9741880435801026 +161 439 .7809532716560995 +165 439 -.9963868825324029 +202 439 .3504496998736097 +208 439 .5876732932413469 +229 439 .3312170893714209 +230 439 -.37572172064148013 +232 439 .9787539026638133 +243 439 1.0450190308683522 +245 439 -.07386226048825527 +246 439 1.5008882673178712 +252 439 -1.0523356197813938 +306 439 -.09741386972465067 +307 439 .787581098155004 +320 439 .28666440847794006 +327 439 -1.3763525150138738 +342 439 -.03465008692646679 +354 439 1.1919112826521174 +365 439 -1.4578484140775547 +366 439 .9449599704207596 +369 439 -1.0274882942116395 +375 439 -.18921853908089334 +413 439 1.447631669466378 +426 439 -.4020900865719137 +436 439 -.41338271283456235 +438 439 -.17164042620476871 +448 439 -.434215791753229 +456 439 -.1849629306270063 +459 439 -1.428027715174104 +464 439 .8176509658838866 +512 439 -1.082730767663955 +513 439 -1.383765238400574 +526 439 -1.6260655516835356 +538 439 .4044101084698535 +552 439 -1.1280096133758903 +566 439 -.5691056735686044 +568 439 -.23266252220570824 +576 439 -.253841777066651 +582 439 -.016326862556730604 +626 439 .9650698426613359 +633 439 1.9800366774560694 +656 439 1.204387247731998 +663 439 -.8371554951622415 +665 439 1.4744818223750589 +676 439 .7461486553262615 +681 439 -.5480026482353731 +690 439 -.6347605921063847 +698 439 .18053981152341742 +709 439 .5327572965617757 +716 439 -1.2447880927161803 +735 439 1.2936437122894642 +737 439 1.062558071653675 +748 439 3.123139952553562 +750 439 1.372427022004282 +761 439 -.7489894630697398 +762 439 -1.3278845258798349 +772 439 .596904165892508 +789 439 -1.1002840272487986 +812 439 -1.2457117222425638 +816 439 1.1834736452133692 +821 439 -.39218398539454147 +830 439 1.9303587811648348 +857 439 -.027777592088038552 +860 439 .8372035228391057 +871 439 -.23691570352672744 +885 439 -.5118408518666004 +890 439 -.24833248302552993 +902 439 .6468298684139681 +910 439 .7880221487228495 +914 439 -.17579037813433115 +915 439 -.8715927009299566 +929 439 -.46621815313941006 +947 439 .8785825044850508 +954 439 1.4060331223877236 +961 439 -.9677618274460864 +970 439 -.6466828443881762 +978 439 2.2227558865537764 +991 439 2.029739306333771 +1 440 -.10284674402563271 +14 440 -.3246402416905755 +19 440 .5960987684357572 +35 440 .8608577467225059 +37 440 -1.4155404205804267 +40 440 .02816737147750742 +44 440 -.5088365734173184 +51 440 -.12493345387567653 +52 440 1.062410087947866 +53 440 -.033831471586413836 +54 440 -.7890825593023074 +59 440 -2.003885756947442 +66 440 -.4574235458293063 +74 440 -1.7714348975191074 +92 440 1.0582147758478828 +98 440 -.9005035894329643 +100 440 -.5204014391004812 +125 440 -1.6191999260213794 +136 440 .1806348581511412 +148 440 .24234328936082689 +152 440 -1.3609715464098149 +158 440 .7213756452233658 +177 440 -1.0485161770681193 +195 440 -.07453537887125197 +229 440 -.09911467837611955 +230 440 -.14919614038010554 +238 440 .2698404383491707 +242 440 -.6531745424905492 +255 440 .5874025905757605 +264 440 .6682780718254717 +282 440 1.1322769696096737 +301 440 -.7829669395164989 +307 440 -1.1461421023485143 +310 440 -.944116850214334 +313 440 .639215656552918 +325 440 -.2704295640790057 +343 440 -.19357837234921638 +348 440 1.3456442408095248 +361 440 .23638288257961418 +362 440 -1.226426727841239 +364 440 .6332664697628939 +369 440 -.37711370588331666 +372 440 .5867847242347546 +407 440 -1.3718819239272422 +414 440 -.5693613654408928 +438 440 .19461760230374386 +440 440 -1.2495927730718477 +459 440 -.4360101896612819 +474 440 -1.714367339624515 +486 440 .5426486344340062 +491 440 1.2264384847359104 +493 440 .4146616223892259 +501 440 -1.1497734106015938 +502 440 -1.3699782118070525 +519 440 -1.5130610922654781 +527 440 -.5052700173553992 +528 440 -.13061070263458208 +535 440 -.5335457074893409 +544 440 .07406041018155077 +552 440 1.0222100498848028 +560 440 .1645177426479454 +573 440 1.382938256184257 +579 440 -.18058494171840136 +585 440 -.6528772447789748 +601 440 -1.1614356462105435 +622 440 -.12126988284933543 +625 440 .2593506662417293 +627 440 -1.3047410593709925 +629 440 -.12048538029261771 +631 440 -.33293639669776737 +653 440 -.9624499258321508 +669 440 -.8105900141554199 +689 440 .5767871721083596 +704 440 .5314855086192907 +710 440 -1.067449448367984 +714 440 .8553157343882819 +723 440 -.1881001526006729 +725 440 -.19091303286553576 +728 440 -.2955417558654634 +765 440 -1.4055255848805328 +774 440 -.6765165959479742 +788 440 -.3808246656890365 +791 440 .027054977958995502 +798 440 .6221209625920233 +828 440 1.0752418325441198 +843 440 -.6335948702592592 +850 440 .31956253191767314 +876 440 -.45787199900699216 +878 440 -.21897353098398564 +926 440 1.5449388715260963 +935 440 -1.0290288667803706 +951 440 .5488567879619377 +953 440 -1.2092584738209768 +960 440 -.399103723465675 +964 440 .7570708539274805 +968 440 -1.205562510551918 +969 440 -1.3586362519511035 +979 440 -.07623487937830103 +987 440 .687522387928175 +988 440 -.11333095333457013 +991 440 -1.2978358825908651 +995 440 -1.5573779445492895 +999 440 1.4825557943840335 +1 441 -.631579185026292 +13 441 -.4507872290949752 +20 441 1.2364588480899164 +35 441 .19571811192663818 +48 441 .066046865047074 +59 441 -2.2066359139062253 +61 441 .1371192475262581 +67 441 -.7435225442229592 +79 441 -.36325347503798283 +86 441 .1670986635860284 +91 441 .5811718398504938 +92 441 -.7713661739063717 +93 441 .7963963919873595 +94 441 .08321737884405034 +96 441 1.32204137708006 +104 441 1.141056621303934 +111 441 -.5650877176979077 +123 441 .9529165912910793 +125 441 -1.4299469361221204 +130 441 -.5497186756599572 +133 441 -.43256583464417037 +139 441 -.6878570192280236 +142 441 -.24125576721587472 +145 441 .0430624201649481 +165 441 .9046639356318052 +167 441 1.1748039636835312 +168 441 1.13596505615572 +178 441 -.677514987348105 +194 441 -2.084904055644929 +212 441 -1.5733701128917041 +218 441 -.47549757183787816 +230 441 1.013425507911889 +234 441 -2.5592672798789895 +281 441 -.7362758520017835 +299 441 .4032769103415965 +323 441 -.8580710743378068 +328 441 .26187891822271947 +332 441 -.541126952715013 +335 441 -.011943982193235447 +339 441 -1.1128103304025738 +341 441 .762614699606242 +344 441 -1.22658344032631 +348 441 -.19156706444247587 +351 441 1.494659742363543 +355 441 .35316648796737504 +356 441 1.385203213274121 +358 441 .0461092716854791 +383 441 -.32607399690558164 +392 441 -1.6339267743846124 +393 441 1.518090643071085 +395 441 .36914965374911674 +429 441 .30484796434203076 +436 441 .5367357554571042 +444 441 .6469872042729987 +455 441 .42079306100031155 +474 441 .14978266170265972 +479 441 .11839308051650074 +488 441 .5316421105941861 +496 441 .4394483590926774 +516 441 1.1404038690648204 +533 441 .23537886369220407 +542 441 .9576318073443478 +547 441 -.138304920365229 +551 441 -.09144892243892591 +558 441 .8440578701025747 +563 441 -.6841875000555466 +580 441 -.31480378470696646 +586 441 -.7391861080248419 +607 441 .6321429868227636 +614 441 .1734896595339992 +629 441 .7575974550989353 +630 441 -1.2928349031297917 +653 441 .1288122528437568 +654 441 -.1320664682500484 +665 441 -.8903086745420999 +671 441 .08519987006323355 +674 441 -.6037116217703047 +699 441 -1.2250500261388995 +718 441 -.6180641987880002 +724 441 -.41902093344776825 +728 441 1.2727066134940612 +762 441 -.4166327390645005 +764 441 -.2905593925623464 +766 441 -.2518738008596621 +770 441 1.1159486662557971 +779 441 .6187031567274655 +797 441 .34951586835226206 +803 441 1.1913589773490592 +813 441 1.2881202423172557 +828 441 .3953626341911604 +835 441 .8977845402623381 +839 441 .026350589674686106 +853 441 1.102475181762264 +861 441 .5475194790786466 +866 441 -1.2825193231812604 +868 441 1.7852773887136257 +871 441 1.2025087143888358 +888 441 -.9633611976574578 +897 441 -.7659712684706194 +900 441 1.2589995259486892 +902 441 .2416687977980606 +905 441 .9087624452675718 +948 441 -.45626451012344826 +956 441 .7756385386817689 +979 441 .11596812732024342 +13 442 -.9565544373252315 +20 442 .6261039992602658 +22 442 .14358634132822615 +27 442 .3917064877376953 +29 442 .20941393509441183 +34 442 -.8575255490625284 +35 442 -.2881533071390769 +46 442 .8728435407300786 +64 442 .24972792455055676 +71 442 .5152695239582048 +80 442 1.2781461070822646 +92 442 -.6405669815753313 +120 442 2.5604955027883123 +134 442 -.5713025013302628 +142 442 .782942632302782 +155 442 .026591960738543557 +174 442 .5491263001970026 +206 442 .08589313083866656 +213 442 -.6671562662765188 +222 442 .8462724712560143 +245 442 .6789176912577145 +247 442 .7682988614671259 +248 442 -.3999776893417971 +251 442 -1.6227446211939553 +291 442 .10664088254989341 +303 442 -1.2233578239410203 +305 442 -1.0152604972246657 +307 442 1.2166646631470115 +310 442 .7969926493439118 +315 442 1.7012284689985835 +325 442 .7821406546147751 +329 442 .7000695803094906 +346 442 -.9167262192309831 +348 442 -1.1573603270597967 +352 442 .8286438366766363 +355 442 -.48920941540309915 +361 442 .6409473448073881 +366 442 -.2700311137651361 +376 442 .0979887092500818 +379 442 .1904570897882687 +397 442 .3721026209615637 +421 442 -.5508059810898306 +430 442 -.5554319243345051 +431 442 .6837361458997689 +441 442 -.1521053207598267 +444 442 1.2083228662722774 +455 442 -.8576851141473546 +465 442 -.09811856346538853 +466 442 .04920102419176353 +473 442 -1.8996505357873843 +475 442 .5579809563705918 +487 442 .019673588733715455 +488 442 1.030145991756091 +508 442 -1.0064474612513565 +512 442 1.691210023803442 +516 442 -.663364449567486 +518 442 .3302363732911917 +529 442 .12449384404147343 +547 442 .21188739743655033 +551 442 2.29053324384663 +556 442 -1.3499065142198516 +564 442 -1.052043651069372 +566 442 .5494724211991344 +570 442 -1.3264095066888926 +580 442 .671323409941164 +596 442 -.643691107180218 +602 442 -1.3123711886783198 +611 442 .5576781596084619 +621 442 -.5969006060982482 +641 442 -1.5036568617841146 +642 442 .2886443184133906 +647 442 1.007779456481793 +657 442 -.15493836819219287 +669 442 .2859008417733869 +671 442 -.6718695327141084 +684 442 .2845314430139232 +689 442 .763472919370077 +706 442 .41752590875217543 +760 442 .0287488569292437 +761 442 .1824078303488425 +775 442 1.0044607326976729 +777 442 .02927394769085065 +779 442 -.7178606452396169 +785 442 .767698730699747 +794 442 1.1517400025682762 +806 442 .5804515764312338 +825 442 .21605423312370334 +831 442 .3198891164503774 +838 442 -.02497454885417708 +841 442 .8203644598074932 +861 442 2.2809147042139086 +876 442 .21128191502723664 +877 442 -1.037944348845294 +882 442 -.5770057894603812 +883 442 1.0755663695860231 +884 442 -.6636573506382342 +902 442 -.41353516019002007 +910 442 .3260441775561682 +916 442 .4988943500827641 +919 442 -1.5726442220971633 +924 442 -1.8440450644112014 +927 442 1.8200191106186248 +943 442 -.31040931052077236 +946 442 -.3128127545048826 +955 442 -.7980640162666217 +983 442 .22341161462855705 +993 442 .9641728838246069 +994 442 -.9107042767158248 +998 442 .7015452829465592 +1000 442 .4541988290059645 +2 443 .48887337533664854 +5 443 -.5220358503144059 +13 443 .4383030894931538 +21 443 -1.1282839860398888 +23 443 1.390375838114912 +31 443 .40816482905651247 +39 443 1.9725045072003546 +42 443 -.9444068079875056 +47 443 .16383280186640772 +60 443 .3308684108063382 +72 443 -1.0038730282341155 +92 443 .18628349664236693 +97 443 -.6350977233326023 +104 443 -.10282872211541763 +109 443 -1.0008471982500267 +115 443 -1.0384808169108786 +122 443 .22453773930848345 +124 443 .85602807726299 +136 443 -.23888048272960727 +165 443 -1.1010724210286225 +177 443 -.43932704192782657 +178 443 -.016665587778427138 +201 443 .7432447263388872 +228 443 .30412368725051514 +232 443 -.5403466121530327 +237 443 .34527696310499423 +248 443 -.7185696484678076 +252 443 1.3988982378773516 +255 443 .968408957996219 +273 443 -.5870495531862342 +274 443 -.12703355047693662 +278 443 .5944986165482504 +288 443 .45610436446654357 +291 443 .5996018551693719 +319 443 2.110765346276107 +335 443 -1.1374982813876384 +338 443 -1.1526568586751016 +348 443 1.138946147315734 +356 443 .39886659658688395 +362 443 .3036796150688339 +371 443 -1.1823995863493786 +373 443 -2.4866709773360176 +374 443 -.7643811797479553 +380 443 .049365070402401685 +388 443 2.8745827425223234 +393 443 -.43859027811999585 +398 443 1.1183413937618858 +399 443 -.11924265207328981 +410 443 1.7675588054495823 +429 443 -.5220833430184024 +443 443 1.6420383499562579 +483 443 -.003865087024367081 +490 443 -2.4563276417442084 +500 443 .9136747108816289 +503 443 -.7851132348519143 +514 443 -2.3395248336952257 +524 443 .10246980058627149 +525 443 .15009630290900342 +540 443 1.1955533417113655 +545 443 -.11494468460168158 +626 443 1.4473416562807833 +630 443 3.1482913385159517 +646 443 -.7229269432942038 +657 443 .8576397699242451 +663 443 2.604316750986092 +673 443 -.23442969997351104 +680 443 -.3815643257757103 +686 443 .6656433339414687 +690 443 -.6115401330976438 +694 443 .5462126215815952 +713 443 -.12571757322021815 +719 443 -.29736510615079853 +733 443 -.0026486650738592743 +737 443 .5249416336031411 +762 443 1.2878774085135625 +772 443 1.55041098944246 +774 443 .38553918677193666 +777 443 .9127691923554575 +784 443 .9990121310728088 +790 443 -.030420693333525137 +793 443 .9652481651402495 +801 443 -.7765054323251176 +805 443 -.4917529391128466 +813 443 -.7824950220529225 +816 443 -.6951727874833442 +823 443 -2.1229614543887205 +825 443 .12309265976525526 +828 443 .272199297872901 +830 443 .855632108730424 +834 443 -.21468321810214674 +878 443 .8693569109803758 +879 443 .5933361467154895 +887 443 -1.4370013030503728 +889 443 -.5236101671506167 +891 443 -2.575605188632569 +900 443 -.92464621013268 +902 443 -.2391981873046382 +909 443 -1.4579467386861218 +926 443 -1.4838294535903347 +936 443 1.1179343265491248 +950 443 -.20895572558045156 +953 443 -.5618782437121126 +955 443 .3400438412591439 +970 443 1.0615047632291121 +974 443 .4443537411026491 +977 443 -1.5733083864947663 +990 443 -.37812238497112904 +996 443 1.4526213716831715 +7 444 -1.311515335415414 +10 444 1.1723665702926507 +13 444 -.5889673447972269 +19 444 .06666958537440616 +51 444 .38392568604902855 +58 444 -1.4492469144964024 +67 444 .0746862576968454 +72 444 -.11767199028059867 +74 444 -1.4426542575970904 +81 444 -.22470126012725655 +85 444 .852517672131557 +113 444 .9438128955802114 +126 444 1.0346425318189094 +143 444 1.5760360234757909 +156 444 -.25378704173820915 +165 444 .7860822020088934 +183 444 -1.1430517904560837 +190 444 -.7366686677867414 +195 444 .9685848653430358 +213 444 .06807344695868878 +229 444 -.11564934798920229 +242 444 -.4541706184220304 +256 444 .7491641590539302 +259 444 .9315669486371732 +304 444 -1.293112373898648 +315 444 2.663435861423625 +321 444 -.1595154221951692 +331 444 -.27319319827255206 +336 444 -.7860715657787058 +340 444 -.7200334452721988 +377 444 .7064974641133506 +392 444 -1.5115076751623242 +393 444 1.0885250524168093 +400 444 -.7004172135559683 +402 444 .09788499829188807 +405 444 -.9563384265853057 +409 444 -.8586213162533861 +410 444 -.5928572629339384 +428 444 1.3397526787008014 +445 444 -.16565791421634268 +458 444 -.21680966455134948 +471 444 .7572520416747494 +490 444 .37256019433211274 +494 444 -1.642352726646309 +496 444 .012734201940419715 +504 444 2.168631539208391 +505 444 .006798715704345953 +512 444 2.260402311798773 +527 444 -.9819506300529152 +530 444 -1.0641510129391356 +535 444 .8231993113882133 +541 444 .10168591155067278 +546 444 -.5312413910599459 +567 444 -.4586159922668683 +587 444 .24634671236670735 +604 444 -1.0438281569005579 +607 444 1.722155195102884 +616 444 -.8430166162297106 +643 444 -.3320660868882734 +652 444 .47923344755540354 +672 444 -.9484857264944839 +708 444 .019400048417747756 +713 444 1.5565482355860452 +715 444 -.8584681736510295 +729 444 .029573064006687466 +737 444 .564161795501209 +738 444 -.30482255420283955 +747 444 -.043435492945976456 +750 444 -.14818217586234408 +751 444 -.43344569449935016 +770 444 .21246860760329184 +783 444 1.500254557021298 +786 444 -.017561678216327967 +790 444 .5545955339632394 +791 444 -.35930428155194416 +798 444 .4983147203990882 +806 444 -.23305230720942316 +811 444 -.15476253438428494 +839 444 .110416506542577 +874 444 -1.857189220988237 +878 444 -.9298129229476785 +899 444 -1.1211320024853764 +912 444 -1.3644287271020474 +933 444 .22382970032306668 +934 444 .5893427307082932 +943 444 .4383470346136371 +946 444 -1.184682157750842 +951 444 -.3927333049070482 +968 444 -.47980702327753944 +978 444 -.2516274762448498 +984 444 -1.497008878990395 +990 444 1.0806129369655244 +8 445 -.41093585645714953 +11 445 -1.5322691695049797 +16 445 .7490797066217776 +43 445 1.9572513512441334 +50 445 .8304619869730592 +59 445 -.3811599891663474 +60 445 .9134089315400308 +62 445 -.1991166119893379 +83 445 .4674302062838728 +85 445 -.14362800761993483 +110 445 1.885544901347198 +116 445 1.0164222153089773 +121 445 .7688287220869692 +143 445 -.9997656401926258 +163 445 -1.0656999141424326 +164 445 .18627084726001986 +167 445 .028321190861584952 +193 445 .37770799477416256 +212 445 -.5720785550606565 +217 445 -2.1155314040165547 +219 445 1.5398118905975566 +220 445 -1.6774880749505585 +236 445 .7189485628997907 +239 445 -.3157980569839517 +248 445 .14563584831802923 +257 445 .6708415813693166 +258 445 .3991932261376157 +265 445 -1.6377710517189221 +285 445 .05254530377682884 +292 445 1.3366656504487608 +296 445 -.2401981344119532 +302 445 -2.052861802512698 +310 445 -1.2968018539461434 +354 445 -2.0843936881779133 +360 445 -1.3231822229297436 +391 445 .48366045951446085 +402 445 1.5165215423674976 +403 445 .7135210125830157 +406 445 -1.2674488520363163 +423 445 -.5818038897872936 +438 445 .01617586222582905 +446 445 -.4133083290853922 +452 445 -.9091103461259863 +454 445 .18324898188392724 +456 445 -1.1999448360698282 +468 445 .6755855677807152 +471 445 -1.6887315489797072 +486 445 .4933841935207601 +490 445 -.33459383274012433 +525 445 1.2994812735171262 +526 445 1.3250235017798548 +530 445 -1.4912299902931223 +531 445 -.9468034603543639 +548 445 -.695592688421408 +553 445 -.8596750033891741 +584 445 1.015053246738168 +590 445 1.529579108497315 +602 445 .7567270443528423 +612 445 .17310979483410688 +630 445 .43870299136213065 +667 445 .3823683344704187 +671 445 -.15727334164668194 +695 445 -.6402279309998448 +724 445 1.1551918168283086 +726 445 1.246040515719572 +742 445 -2.187634764976955 +753 445 -.39759689409770615 +762 445 1.5937359891022869 +769 445 -1.327495641774365 +770 445 -2.6022324995127626 +773 445 .589804947881316 +782 445 .2886333408367787 +786 445 .03139445656815387 +804 445 -.4652820502567807 +812 445 -1.02029828705175 +818 445 -.5935870175027398 +824 445 .6206894549908831 +832 445 .35391351819546346 +850 445 -.4730264492334476 +857 445 -1.504672416199412 +864 445 .8230649838232769 +904 445 -.1392365949712836 +910 445 -.04372279074335873 +911 445 -.34814477192272186 +930 445 -.00575814382342775 +948 445 .5262940407219674 +949 445 -.5916898497264858 +950 445 -.032251065495617834 +974 445 -1.0988378801648144 +993 445 1.136675067668739 +2 446 -.4556067445875369 +7 446 -1.271812117288184 +10 446 2.1694175316520954 +14 446 1.035463348196195 +21 446 .27665360818966467 +40 446 -.6640187609391578 +49 446 -.16175550239395176 +62 446 1.3742125901090336 +67 446 -.5595783325540812 +70 446 .15935575697029447 +80 446 -.05675616844166201 +83 446 -1.0361727972354748 +95 446 1.3265866656636462 +107 446 1.0119098163547438 +116 446 -1.223026905698269 +123 446 .48226911038602294 +126 446 .4523182869803289 +128 446 -1.0251719310808654 +149 446 .44141894888606426 +161 446 -.15929809328917197 +165 446 .6360711603971781 +182 446 .7756010591060754 +186 446 -.5034047862946057 +195 446 -.4318148410234831 +208 446 -.4868490032776407 +209 446 -.4366827033585131 +228 446 -1.034577391268288 +248 446 1.2434098438802856 +257 446 -.22158507540263328 +263 446 .28908755578086026 +273 446 .15732120792635293 +278 446 -.6352131414215729 +279 446 .8319124907452758 +301 446 -.3178921703977754 +335 446 1.217839869325016 +364 446 1.4679479390866255 +376 446 .5044583117543532 +392 446 .5055230832129615 +397 446 .12942244699520825 +402 446 -1.0832787521516398 +404 446 -1.5351200422910916 +408 446 .13059671269983236 +424 446 -1.2106875742036651 +434 446 -.11045888728160133 +459 446 .5880775197737943 +463 446 -.3918304889006957 +493 446 .2886466135942909 +510 446 -.5827447130730604 +524 446 .545410674419223 +526 446 -.211047718812539 +530 446 -.5673485143838535 +541 446 1.5353338256295028 +545 446 .9090036497676532 +549 446 .1365721618069377 +597 446 -.4180041007904486 +599 446 .040042231397872254 +616 446 .259089679214337 +623 446 .5304248176586267 +624 446 -1.1104789954961451 +647 446 .1840233627773898 +648 446 .4378338176238996 +654 446 -.29067418645937804 +660 446 .2337857973530693 +663 446 -.6091643264299179 +679 446 .653150831466411 +688 446 -.1432229292837492 +700 446 .10293738580949101 +720 446 .4119983189331494 +730 446 -.42859131455245325 +743 446 -2.405511798861755 +748 446 -1.950024266539444 +773 446 -1.03352897233083 +781 446 -1.624311388758085 +783 446 .4147461546804379 +784 446 .20377712461906447 +806 446 -.5232461536801727 +810 446 -.36431771169050403 +818 446 .013558876478386245 +828 446 -.100340317549276 +835 446 -.14166089436076515 +839 446 .018564420736730522 +840 446 .28578733494182484 +842 446 .3371409760520152 +844 446 1.5368020353785785 +850 446 .6589807252826769 +852 446 -.5648029517283069 +857 446 .4042851214978035 +861 446 .26134731599780625 +862 446 -1.813727132186373 +864 446 .7832769412838821 +868 446 1.1823964565167364 +893 446 .9731117987387177 +902 446 -1.2141049742312704 +914 446 1.3080743195956357 +918 446 .4761238804374517 +978 446 -.5656541865320759 +983 446 -.5449498754411961 +8 447 -.5578684201411626 +9 447 2.0224461000059595 +10 447 .7466183864338449 +12 447 -1.1040942283623094 +16 447 -.39797264757699113 +77 447 -1.3623257276345024 +79 447 -1.5641384765033037 +87 447 .8458301233070404 +106 447 -1.8097603989661617 +111 447 -2.5517578594953223 +124 447 .9005426434052823 +141 447 -1.1483840055056338 +156 447 1.0391417083295444 +180 447 .6198889609273397 +258 447 -.39123475200269586 +261 447 -.2617447215690618 +265 447 1.3985353332646835 +276 447 -2.185415795404152 +289 447 -.5461284178996123 +311 447 -1.931494631370685 +313 447 -1.1756910924062116 +325 447 1.933168430246793 +326 447 -3.8123491715452524 +335 447 -.6410417390496783 +350 447 -.07891862509022868 +368 447 -2.704420680695626 +369 447 .37287303353948276 +370 447 -.4087942867923592 +373 447 -1.4938980632371355 +374 447 .6298832585970737 +402 447 -.42752235272738937 +409 447 -.06665384043925823 +415 447 .34537172385251835 +418 447 1.570630935908173 +423 447 -.25756710660212145 +431 447 1.807955428076988 +438 447 -1.4727299817182653 +439 447 .94254776870489 +446 447 -1.1296931683774118 +480 447 -.37729144474040643 +488 447 -1.7887180056994028 +502 447 .2150039312686991 +587 447 .04118663842586913 +607 447 -.290932192386544 +609 447 .64006826823898 +640 447 -.5863609417366612 +650 447 -.41641934529218283 +658 447 -.4906673396492931 +681 447 -.9364652033205975 +699 447 -.40166145046367363 +700 447 -.560911426450409 +708 447 .14243254081364978 +711 447 .031532687769369676 +721 447 -.35304293368483675 +725 447 2.0553860489427405 +730 447 1.1555064989255168 +738 447 .5941392273251204 +742 447 1.6025733517074165 +755 447 1.221279405953452 +761 447 -.3296166845544864 +766 447 -.6897761667864318 +778 447 1.4773398303122374 +782 447 .37354144846935405 +785 447 .8839701678248936 +811 447 .7794028130007883 +817 447 -.9988857633810058 +828 447 -.0678918504974781 +833 447 1.2893574069094056 +845 447 .04722169011195065 +852 447 -.778909348825872 +871 447 .6358195677393783 +878 447 .6359391153841911 +882 447 1.8033728950229062 +885 447 -2.163705271214418 +889 447 .8107265437985121 +891 447 -1.2496777048076506 +903 447 1.610254832693851 +917 447 -.39427988215201015 +921 447 -2.5207781005420973 +922 447 .6292978692744232 +924 447 -2.2228422020011265 +930 447 -1.4350783871804638 +940 447 -2.3847410525251265 +942 447 -.13018245245767351 +949 447 -.08315032758697169 +966 447 -.5726219301533518 +986 447 2.2073825719357734 +989 447 -.37997728123203234 +3 448 -.20954401469327294 +9 448 -1.3190273339415328 +25 448 -.6827716571426911 +43 448 1.5262303565986897 +45 448 -1.8893403057169784 +46 448 -.7407767444082836 +49 448 -.8113172737908998 +69 448 1.1682778738199766 +95 448 -.9322118477577845 +100 448 .6722277548776499 +108 448 .7548191274440151 +168 448 -2.582798680265426 +175 448 .9780533284305208 +204 448 .46488154820574357 +238 448 -1.4448300839401411 +245 448 -1.0699516211420645 +252 448 -1.0228782690091893 +264 448 -.9995545144734925 +273 448 -.028690907698678797 +298 448 -.7059960636400885 +301 448 -.287809187670722 +327 448 -.6273064960119679 +329 448 -2.433664260071958 +331 448 -.5083522857453363 +338 448 .8465259596212352 +348 448 1.835309534230564 +361 448 -.825761480772271 +369 448 .054441614954879654 +379 448 .37664754140915807 +389 448 .08411969968299132 +394 448 1.0512627469075317 +434 448 -.9121792030475433 +453 448 -1.8643041752595837 +462 448 -.18066026228652782 +475 448 -.9466063362201389 +481 448 -.5134483686670775 +490 448 .7022616276549003 +493 448 -.27780204315450696 +501 448 -3.286124069537744 +516 448 .8032460588680483 +524 448 -1.3463170684939663 +543 448 .15514596658303645 +555 448 -.8817951344579821 +569 448 -1.1024784887416466 +578 448 .3201259531665444 +587 448 -.21711680988958548 +618 448 -.5916490734165513 +639 448 .5483616727353022 +662 448 .15188056039017309 +673 448 1.83516383722363 +676 448 1.3157932125924212 +683 448 .4626388852831964 +698 448 1.4517725068152807 +699 448 1.0253153337245453 +711 448 -.7845657970516171 +731 448 -.3863462174942648 +732 448 .474570526284605 +738 448 -.4144141934366314 +740 448 .8790270922123369 +741 448 1.1475183133628026 +758 448 -.20871034623508822 +782 448 -.05994937430876194 +788 448 -1.766897123066537 +792 448 .9862456784979913 +812 448 .23588525207966896 +837 448 -1.2746872783856966 +839 448 -.09262078905571983 +852 448 .3751934888727243 +869 448 2.741166752899866 +870 448 .21055403707554315 +879 448 -.33096869122534167 +880 448 -.5096800652451381 +886 448 -.14777903512610638 +888 448 .2036082792265483 +896 448 -.16587762013345156 +905 448 .7652152613743977 +910 448 .1920760929611817 +911 448 -.05227090071954005 +925 448 -1.7550911616905076 +951 448 .9427689614772634 +972 448 -.8201153040437617 +987 448 -1.4326757644161225 +993 448 -.3760369420328695 +4 449 -.24443743347739683 +6 449 .546054330620943 +12 449 -.680747374382831 +20 449 .593058556335827 +26 449 -.1064001808323436 +47 449 .3513514121323813 +60 449 .3424219604392064 +62 449 .16002840085971978 +64 449 1.445948962688755 +71 449 -1.223878540801235 +77 449 -.9887957445186358 +83 449 -.8792825613453493 +91 449 -.6597649460534653 +99 449 -.07448827232235505 +102 449 -.8639777338757527 +108 449 -.39790072627316814 +116 449 -.9779048774274851 +132 449 .033212134982535224 +139 449 .9317652960555776 +150 449 -.28205586416994133 +157 449 1.5551350656961542 +160 449 .0032684821894612276 +162 449 .7865729010520154 +163 449 -1.004684353154077 +165 449 -.33763921765887256 +175 449 .06275099366540897 +188 449 -.04702417585150212 +201 449 -.5383575546454902 +204 449 1.0313084481241865 +224 449 .26451511663021854 +237 449 .26055628559863314 +241 449 -.11570459164683469 +274 449 -.3445749549688619 +290 449 -.07830399688941186 +293 449 -1.4019807827804767 +303 449 .3731709876517867 +316 449 -.2606641673769765 +370 449 .04902136090126495 +384 449 -.9645995811500526 +412 449 .465657166653077 +419 449 .8536029098087874 +423 449 .4814364851553605 +424 449 -1.2675974701571495 +451 449 -.03985589168480046 +477 449 -.8518046761772087 +478 449 -1.3421591952424607 +488 449 -.7104087303635505 +493 449 -.894958599598892 +520 449 -1.9495670877847304 +530 449 .47095263653367603 +538 449 -.9299468527849433 +540 449 .7754366032130563 +544 449 -.03944878982536814 +557 449 -.27448920979457875 +566 449 -.7629547781949342 +569 449 .4470587799190162 +591 449 -.9230747282166275 +593 449 1.3500159134083924 +594 449 -1.0998600408733117 +604 449 .35299689652128496 +616 449 -.2644017507830849 +621 449 .19691412694467625 +628 449 .4061750517621826 +655 449 1.2051388157602019 +661 449 -.5020168002401444 +669 449 -1.2254243394766189 +675 449 -.46728512018913526 +683 449 -.3306430486126128 +696 449 -.5866776219539024 +717 449 -.3563365938479808 +720 449 -.3535910710451351 +732 449 -.13637491794923193 +744 449 .1279490198743378 +772 449 .22749879197917738 +782 449 .35383167405242116 +784 449 -.20929412889329363 +785 449 -.5188199203065526 +789 449 .8891657033376852 +792 449 .3149812725582126 +793 449 .7766953096780385 +809 449 -.8955714540644346 +822 449 -.4959894949789655 +828 449 .12576538709438576 +840 449 .548571553535821 +846 449 -.4995207847041771 +883 449 -.44548028862378297 +889 449 -.34168252804782134 +903 449 .5622283827574347 +905 449 -.06613994590737496 +909 449 1.047572738390835 +950 449 -.27187406544633175 +961 449 .7486126498706519 +970 449 -.7343779822885624 +985 449 -.23451620646165408 +4 450 -1.3080120367812693 +20 450 .8770206115664391 +27 450 -2.542923576308912 +29 450 .8533021082148319 +31 450 .7076616798164838 +32 450 -.8450202003032804 +49 450 -2.4399472918269147 +51 450 .030584092971277566 +61 450 -1.2895867621965902 +68 450 .7242664334214479 +82 450 1.9138921303666847 +83 450 -.06070066854302911 +86 450 -.30545472117892797 +88 450 .5704053909475524 +97 450 -3.2350445350049157 +122 450 1.1642997357476208 +135 450 -.6247822308598294 +152 450 2.9727539502880274 +172 450 1.3109549968066518 +174 450 -2.3192928095877234 +187 450 -1.3893287917051105 +227 450 5.113145295167375 +233 450 .5359166597194783 +247 450 -.40188839554430644 +249 450 -.9760665042948197 +270 450 -1.0655070661680253 +283 450 -.145749856360262 +287 450 -.24532220872262225 +288 450 -.03866689998349736 +292 450 1.6760022885410875 +301 450 -2.7400954141369596 +303 450 -2.551414998210134 +308 450 -2.220474307964224 +312 450 -.16264090469920672 +314 450 1.5426328439742065 +320 450 .632978299316916 +331 450 .6894417207353113 +342 450 1.8670024816562614 +343 450 2.2467841860208075 +353 450 -.17784600540074244 +378 450 -3.6586901100620004 +385 450 -1.370080166493509 +400 450 1.2338687307583895 +402 450 -1.6225938620754006 +420 450 .2863416472317739 +434 450 -1.251257444283355 +435 450 -.9985180039623724 +444 450 .6036027762903526 +452 450 -1.164039320592757 +458 450 -.5563944591298036 +461 450 -1.5191909875196663 +480 450 -.9625065747102194 +490 450 .36780348413171177 +499 450 -.299004739233887 +515 450 -2.124083355941536 +535 450 -.9856344308287017 +539 450 .86740723152284 +544 450 -3.1309470967486286 +551 450 1.849004655414259 +556 450 .13211559332953293 +561 450 1.215241211611916 +567 450 .4899882390723635 +579 450 -.07963134720060949 +600 450 -.961566490735804 +606 450 -1.30853500392368 +616 450 1.0006665684662845 +633 450 1.1640392497177152 +647 450 .022070026244817104 +648 450 -.7136195916213981 +649 450 .6851877910411885 +657 450 .2492176216277702 +659 450 -2.552111123961598 +690 450 1.0855860422636434 +698 450 1.386152562298813 +715 450 -.3365939901373307 +742 450 3.007443025472454 +757 450 .05000947561813861 +762 450 .012106535706131571 +767 450 .22284102105621786 +790 450 -.7069764404451386 +792 450 .49992387408414585 +796 450 .19886602145550297 +808 450 .3005376549713343 +809 450 -1.2852848486804604 +814 450 .8682786380262737 +815 450 -.5962843739767331 +817 450 -1.008674651609967 +820 450 2.643943447788978 +824 450 -.979014850150373 +826 450 -1.4751174750620393 +857 450 .35590018370531573 +872 450 -.2085927253457281 +890 450 1.408498051472202 +898 450 .5497541322502884 +904 450 .7498378048148867 +908 450 2.264263962996717 +919 450 .7853051860303463 +933 450 2.3743991884864784 +964 450 -1.2228734744863774 +965 450 .6707693755924453 +971 450 -1.3234455096354378 +972 450 .5526205361260084 +983 450 2.090916641489916 +11 451 .14752151286451318 +12 451 1.4683365840707483 +14 451 -1.8940570059017774 +27 451 .13441575270101008 +29 451 -.23290757181694138 +31 451 .34168602847767804 +52 451 -.01863624690991568 +58 451 1.4184550074781288 +65 451 -.10359020103851592 +73 451 -.4037089252074429 +86 451 -.8135972491219755 +109 451 .37252981898052223 +138 451 -1.7869240985749186 +141 451 .5576219564546869 +164 451 .394003612185435 +179 451 .8383194176647342 +198 451 1.4322971108977536 +200 451 -.817610509863859 +204 451 -1.2899569107937432 +213 451 .40290913273187023 +220 451 -1.0096173771626722 +224 451 -.3622791493368376 +226 451 1.1437105866472639 +227 451 .548640075282139 +237 451 -.9284430617014736 +258 451 .5739856576209339 +268 451 1.6192180000421128 +277 451 -1.451212915612466 +293 451 -.13607554975976344 +296 451 -.9661937056773651 +297 451 -.16600443840863544 +308 451 .7213118033490422 +312 451 -.8127011426161577 +314 451 -.08166137704927529 +329 451 1.2395251133255472 +335 451 -.6169167446467616 +342 451 -.2867090615765071 +351 451 -.13454363859520874 +354 451 -.395030081611381 +357 451 -.47167683000161226 +358 451 -1.4279626983663625 +362 451 -.1924087743195502 +363 451 -.22791162161876777 +371 451 -.4796346954213373 +399 451 -.6286749978854045 +418 451 .5114579336234903 +430 451 .2678191138748029 +438 451 -.28977575928226423 +450 451 1.2641623185695858 +469 451 .10972415360598553 +477 451 1.5664495005576886 +479 451 -.8314580662711825 +492 451 -.7506002771929785 +505 451 -2.0986955388753663 +524 451 .5937910209851868 +526 451 .6438590645632558 +537 451 -.13142681424704683 +538 451 -.4034813532592971 +539 451 -.6381124879605491 +547 451 -.5210043895048394 +561 451 .18098785301797318 +568 451 -.37467318988068116 +585 451 -2.0526213329172442 +586 451 -.7744872228652713 +610 451 .9266115673670302 +614 451 -.8345780695901253 +623 451 -1.0388704138753417 +625 451 -1.1833266334369859 +627 451 1.224510444427633 +641 451 -.4105704212995045 +644 451 -.5678832435096466 +646 451 -.1788259767550016 +652 451 -1.4167046011582478 +655 451 -1.0318662985919864 +680 451 -.8184498365684514 +681 451 -.7451701247282669 +696 451 -.4616194245471036 +699 451 1.2374471752534337 +700 451 -1.062314066402156 +701 451 -1.5149761341321397 +705 451 .8331431685040713 +709 451 .5659176469003628 +715 451 -1.5584842073867533 +716 451 1.834320191050821 +737 451 .19095487659112845 +739 451 .18400710488514954 +743 451 1.5612691116494093 +753 451 -.2797010517896337 +770 451 -1.8630419709928734 +778 451 1.918677972171736 +784 451 1.0230261590631207 +796 451 -.019282706113752893 +803 451 1.0880061727645225 +808 451 .24434110893889643 +815 451 .39363997335350287 +825 451 -.11882135191872548 +833 451 .1782882292887822 +834 451 -.7584985659812084 +855 451 -.7433922191284105 +878 451 .047916188508035015 +883 451 -1.6315522703935643 +894 451 -.5258017072240209 +898 451 -1.056949771463954 +901 451 1.2028182121852253 +908 451 -1.4779996914492166 +909 451 .1342222803299269 +914 451 -.08116148682774213 +917 451 -.8674349197884934 +932 451 .2932066368861061 +934 451 .13096835583972083 +953 451 .29013548024650104 +958 451 -.587561176817477 +10 452 -.029540008022745534 +20 452 .5548968811367712 +34 452 -.6301112215827025 +88 452 1.07718632013515 +92 452 -1.4575474814288987 +101 452 1.9001400446054848 +103 452 1.9584261691548097 +115 452 -.5750418245509149 +120 452 2.4955436510507556 +124 452 .564262623036714 +134 452 -1.215322272737399 +143 452 -.22381120875388993 +146 452 .861721031386692 +153 452 .8132634283242699 +158 452 .28030208892533376 +177 452 1.8485228038645076 +192 452 .5941624614366618 +215 452 .04285922629938244 +238 452 .26922658242510034 +239 452 -.17286956234236273 +241 452 -.9661051304682668 +251 452 -1.685075922007913 +256 452 -1.3663816901304806 +261 452 -.3999369924473662 +266 452 -.33023157937902164 +301 452 .01990828491436089 +304 452 -1.127264697077102 +315 452 .24630045247627588 +316 452 .9174737456092216 +322 452 1.8837799195619753 +331 452 .781794434545013 +363 452 -.6479758166797505 +372 452 .8097818094217245 +374 452 1.8740469891180984 +375 452 -.7226716550303662 +385 452 2.06143377121918 +386 452 -.6552079298696077 +388 452 -1.6185231570861713 +389 452 .7575480746465106 +390 452 .49957063666225066 +401 452 .4053873618515402 +403 452 -1.164662656978576 +434 452 -.051125481945532555 +437 452 -.0015440622973773924 +441 452 -1.4846320962838997 +461 452 -1.5686751703224275 +473 452 -.9225963668474745 +481 452 .3891742900782913 +489 452 -2.0665450183065617 +499 452 .2737216700779677 +504 452 .16856026754643602 +511 452 -.045401722648416354 +516 452 1.1664852237167438 +525 452 1.3358940914445743 +534 452 -1.0473060261010172 +540 452 .22227049319956066 +570 452 -.9208869703635318 +572 452 .9020819710197283 +577 452 .3230227345895949 +608 452 1.3237852215593127 +612 452 -.8800916769207758 +623 452 -.5039618402600079 +689 452 .11596027797994587 +690 452 .8424543392262855 +697 452 -.9733575048887684 +703 452 -.4799192742917854 +716 452 1.1099526190848539 +719 452 .5152883601544848 +724 452 .3656048429347589 +726 452 -.5397138995225437 +741 452 1.428333888196077 +753 452 -1.5954250325985007 +754 452 -.08395126892736986 +756 452 2.2037998061818413 +758 452 -1.2560647622374932 +766 452 -1.7963681168378014 +769 452 -.2597009314165635 +791 452 .7439104939187913 +797 452 1.312105666176498 +802 452 -.6864892884276871 +810 452 1.3339031940365942 +818 452 -2.2117211729857966 +820 452 .4506917509322564 +835 452 -.5531572806137809 +838 452 -1.9171869752056814 +849 452 -.678961508493314 +894 452 1.6021443963672275 +911 452 1.0842499249846533 +928 452 -.44963047474826456 +951 452 -1.879356719239969 +955 452 -1.8199991865864225 +957 452 1.5659557912783448 +959 452 1.1726167432056296 +970 452 -.7675604762782439 +974 452 -.7459726654958303 +992 452 .4619279684048244 +3 453 -1.689588355289312 +7 453 1.0569817960871308 +12 453 .09078176346497935 +41 453 -1.3628582860695941 +49 453 -2.230250276200351 +51 453 .9840501486309972 +72 453 .8552638524342229 +76 453 .5392803035382077 +83 453 -.1058064403080458 +87 453 -.4151436355704585 +91 453 .6321792663859053 +98 453 .09201944848210428 +101 453 1.6230062257042799 +106 453 -1.3816563760307274 +108 453 1.5845582744246545 +116 453 -1.9906883412014096 +121 453 1.0446654958360566 +123 453 .16601059017950184 +150 453 .4845243580704328 +165 453 -.19446916757933114 +193 453 .23410999826957168 +197 453 -1.5750832604393445 +202 453 -.5090989760673212 +224 453 .35415884921963037 +230 453 1.8220782518612093 +245 453 1.2610617330927518 +263 453 -.9549605123389987 +278 453 .8775033910703307 +279 453 1.2736680578689503 +280 453 -.7964432428184659 +283 453 -.10292911615393203 +297 453 -.5237956561385866 +325 453 .34243838146264355 +332 453 .3851586706447489 +334 453 -.08667452127498898 +345 453 -.05799839819012604 +363 453 -.2135215263737818 +370 453 .39223333372808833 +371 453 -.4200502638363273 +381 453 -.6901798080623495 +411 453 1.3947588281611734 +412 453 -.02827346429439191 +414 453 1.0068773688663828 +425 453 -.7125903314569596 +446 453 -.4877662278367723 +477 453 -.30144218783113047 +487 453 .4714499024472422 +488 453 .923673811921077 +506 453 -.26402462385445863 +532 453 -1.3838543606530989 +555 453 -.6850917656901819 +557 453 1.5694337199593906 +567 453 .04895392535187679 +568 453 .6869776612693549 +577 453 .6694406985823342 +578 453 .031068741939699662 +585 453 1.1190377534055092 +588 453 -1.0185144402648418 +589 453 -.04132955649110952 +590 453 -.004520769967042912 +607 453 -.6467087923092413 +627 453 -1.8518795520388072 +640 453 .3183086878455889 +655 453 1.745334482568212 +660 453 .5228773097270937 +683 453 -.48658633316882155 +693 453 -.649561814325939 +709 453 -.14833994673994694 +710 453 -.6900158116385657 +712 453 -1.2041094492050062 +715 453 .7057002308026711 +734 453 .41163870515565554 +746 453 -.17868075129628241 +788 453 -.6306900061490293 +791 453 .22716617150518315 +797 453 1.6556831983845397 +809 453 -1.2091291472969938 +812 453 -.3217957587211998 +827 453 2.3858475040028284 +834 453 .4185888194472607 +835 453 .28290513465011613 +858 453 -.17212655144712796 +862 453 -.9356463449157595 +867 453 1.3712546824202403 +868 453 .025436967285905623 +885 453 .15767875742919882 +896 453 1.1268881306223952 +905 453 1.9061901628867326 +907 453 .6895101626647155 +918 453 .9843794662525192 +921 453 -.15391087225918693 +929 453 1.5027749488280893 +932 453 .07806461648275916 +936 453 .03589102272051355 +945 453 -.6784879145135824 +958 453 1.584913096504483 +976 453 -.24757559781225408 +980 453 .0940742440768455 +998 453 .8771917746587647 +1000 453 -1.617617190811644 +1 454 -.056082270565210264 +12 454 .5581861702106906 +30 454 .6919351559162001 +39 454 -.06054405018394096 +45 454 -1.6593508454325028 +86 454 1.7347081804240516 +98 454 .3862243141308704 +110 454 .19085531298606812 +120 454 1.251831473269745 +123 454 -1.4072405206813503 +130 454 .36338043751815785 +131 454 -.4936060169427416 +132 454 .6221993954991698 +138 454 .25353922033414933 +142 454 .4439967999279519 +144 454 .033162321430020486 +156 454 .15704667391281485 +162 454 -.9380859507294712 +183 454 -.5333061502006563 +202 454 -.4452525359649265 +203 454 -.3380402405047984 +208 454 -.7566951110852554 +209 454 -.35773650451511807 +211 454 .14088269368119508 +215 454 -.31657888930210915 +217 454 .9439227800247015 +232 454 1.1310574926204107 +262 454 -.19090026272821098 +270 454 -.37711947967434983 +273 454 -1.1502532036697042 +279 454 .4362256189833194 +283 454 .08161640117010172 +284 454 .9242173900225805 +294 454 1.3992185817483136 +310 454 .44813068711491244 +325 454 -.5390889822028216 +328 454 .48341591471291806 +335 454 .10585410011145432 +349 454 -.41974477704135377 +364 454 -.8737567358767633 +376 454 -1.636242397683606 +378 454 -1.633993622263261 +389 454 .7544845201335054 +394 454 .2202913155623937 +404 454 .841555394144153 +405 454 .24574871111382116 +408 454 -1.148469058943572 +409 454 -.7560925841650505 +416 454 -.11904195075383625 +420 454 .068667567088317 +426 454 1.4748414344662883 +430 454 -.04600212123922583 +454 454 -.29189762337479963 +457 454 -.04910188918208967 +460 454 -1.1689996926445316 +487 454 1.371560896167417 +491 454 .05330765609014172 +497 454 1.0806938012745442 +506 454 .8594162312974725 +528 454 .0875042147159728 +540 454 .488346157131623 +558 454 .683168826030611 +560 454 -1.0338474255629166 +562 454 .3786978290762207 +563 454 -.3107988733622675 +564 454 1.7618412712400793 +565 454 -1.0493101520245913 +587 454 -1.14111022853385 +591 454 .2886679315991342 +595 454 .850477570788076 +602 454 1.0328790367869496 +604 454 -.004390512103907618 +610 454 .00565396010673852 +613 454 -.7993593987352159 +630 454 -1.151111679116891 +647 454 -.07506559738014983 +652 454 .17337289731441397 +660 454 -.3997402023138981 +664 454 1.6639214793944486 +671 454 .21548865878234547 +685 454 1.8510657431207767 +689 454 -.3156634020585872 +692 454 -.8558288519094167 +693 454 .48823752104633844 +720 454 -.16903304543495215 +727 454 .16542956182143626 +743 454 1.21030971427341 +746 454 .04763161737867058 +754 454 -1.0694741025018994 +759 454 .2653695300003084 +778 454 -.3532162493058335 +807 454 -.1255807761774903 +825 454 -.021988461978695445 +831 454 .8166471632115528 +839 454 -.7582637659481084 +841 454 -1.5243935440021952 +847 454 -1.4992784503712369 +856 454 -.11355955496906275 +858 454 .3081200962154027 +860 454 .3976227631807063 +867 454 .012346271475199705 +868 454 -.8318295359643161 +877 454 -.24310716019821724 +893 454 .5758108360435783 +896 454 .5194067040844608 +916 454 .6741267930609314 +952 454 .0884785965600177 +960 454 -.8380678002488862 +962 454 1.0138953282892134 +968 454 -.47505724634381713 +973 454 -.18082889552271586 +993 454 .6811224269028422 +15 455 -1.1203853653409348 +22 455 .30381593467864465 +28 455 1.350208516238908 +29 455 -.05001081637073576 +31 455 -.08277496808479075 +34 455 .18214474828983185 +39 455 -.209691121873131 +75 455 .7056859788198858 +80 455 -.5142326195380728 +84 455 -.8014241802395068 +86 455 .2729054251853205 +88 455 .21346969637996177 +94 455 .7949465946643111 +105 455 -.15529574852436706 +107 455 .013053601075804024 +115 455 .9593992246087836 +144 455 .058002360355287226 +152 455 .709926261009461 +153 455 .4059600621808004 +154 455 -.27397388521368193 +157 455 -.46784029734283233 +170 455 -1.1088804820481795 +187 455 .5637100550139028 +190 455 -.07432922009549478 +191 455 -.8828275655726077 +202 455 -1.473580030663109 +206 455 .9187541375714333 +211 455 .5652818023849088 +213 455 -.5466429627277168 +278 455 .7361719510348185 +308 455 -1.1778032283343516 +310 455 .188127162859142 +318 455 1.4187215559867967 +333 455 1.3887249824926466 +339 455 2.106841513646682 +349 455 -.9913988157959579 +388 455 -.346313614452956 +391 455 -.9800546465994321 +394 455 .6968177225447687 +415 455 .29112069455853673 +421 455 1.1716008992985305 +442 455 -.05557615531940193 +456 455 .0005584590854030014 +480 455 -.48661879084619636 +481 455 .1716884250561646 +485 455 .3365783501352619 +490 455 .8635668951077646 +498 455 -.23193076005760196 +502 455 .5888260159415584 +510 455 -.9867672471526299 +519 455 .8763712938126933 +527 455 .021644032527042778 +532 455 .6316176901087269 +544 455 -1.1056813250758815 +550 455 -.5952901045829624 +555 455 -.3839575132388646 +556 455 .2072828173286984 +565 455 -.9635935703577599 +570 455 .9630645265452207 +575 455 .5377724568188769 +606 455 -.8816678564987828 +607 455 -.4847715136940096 +612 455 .34391509586898555 +623 455 -.3372254809937234 +644 455 1.316800765029721 +655 455 .6776983664390348 +656 455 -.0015002136014480583 +657 455 .14530138566582546 +660 455 -.29077159816374687 +674 455 1.2372075299078895 +679 455 -.4323126808259784 +693 455 .9983386512235807 +698 455 .5938889433966955 +704 455 -.14827990918464345 +716 455 -.41650172542155933 +734 455 -.8933545102953937 +763 455 -.28340342005730224 +764 455 -1.0604675954268246 +767 455 .2996410054056451 +774 455 .5603248530210381 +784 455 .5642426448610962 +794 455 .24028840175140498 +829 455 .13912270820928846 +838 455 .07824489464600987 +842 455 .21538469314122538 +846 455 .5314133681456692 +847 455 -.52153770960226 +855 455 1.0219596938400186 +867 455 .058018590086088895 +875 455 -.1736368661189717 +896 455 .39461694139533393 +910 455 -.13318892661627946 +917 455 .16546295569514877 +929 455 .8768205081117808 +947 455 .5049635930421794 +955 455 .8822782792221383 +956 455 -.738941811745524 +971 455 -.35159495970195137 +980 455 -.15231733325310143 +983 455 1.01670681352625 +52 456 -2.448467545437173 +53 456 -.21499637443241976 +67 456 -1.1099678933537134 +71 456 .8463799765114035 +79 456 -.8315087357621906 +81 456 1.9319157602959376 +98 456 -.3385619106020975 +111 456 .23034617588336725 +116 456 .03503914499025787 +119 456 1.600758362608535 +121 456 -1.9836154198432845 +130 456 -.31568906201584024 +134 456 -.6342643353021955 +145 456 -.3212246321094297 +152 456 .49320076098717147 +153 456 .36838394526705015 +156 456 -1.4928968660012834 +161 456 2.839709859868363 +189 456 -.054481895745097576 +190 456 .9308525169977975 +191 456 -2.3465102142203436 +215 456 -.29481943984828085 +240 456 2.322491891901047 +241 456 1.3899377114301257 +252 456 .9712382203036211 +259 456 .2821905158291359 +262 456 -.8432744552964461 +285 456 -.8026492261452093 +293 456 2.5938644965367885 +316 456 -1.6153310172088204 +317 456 1.8757075133500578 +323 456 -1.8531536008522536 +345 456 1.7642644321205174 +348 456 -2.0478709157241592 +362 456 2.5634494894470996 +364 456 -.7892936780077067 +365 456 -1.8837473574559327 +366 456 2.5015301618508716 +367 456 1.9958727807706702 +370 456 -.9104148717667897 +373 456 -.7776949785373262 +383 456 -1.6776760792899659 +411 456 -2.8067286936493163 +420 456 1.7053013425130776 +421 456 .9879916126554065 +427 456 -.1277319710215234 +437 456 1.0512847147530764 +445 456 -.28706147742948807 +455 456 -1.4348550779456253 +456 456 .1698905001695758 +461 456 1.5289111049468254 +468 456 -.23545953384149232 +476 456 1.3053445593837958 +481 456 .0027161615887937307 +493 456 .6115082449057575 +494 456 -.7230911632108206 +528 456 -1.1265476384942792 +539 456 1.6893953437495146 +541 456 .8279093095586211 +578 456 -.6851585122261926 +591 456 1.0180189931740153 +592 456 .7408217732911837 +603 456 1.5927167547761807 +619 456 -.8159067120254422 +643 456 .4774432803466665 +646 456 -2.629973941557907 +655 456 -1.052595285913993 +665 456 1.624260021394396 +681 456 -1.098821306761967 +696 456 3.1408623571121135 +703 456 .7976693606951999 +709 456 -1.2518097560655261 +713 456 -1.0145264650651264 +722 456 -2.2830056255118203 +749 456 .27662538681763427 +755 456 .5587501074984625 +799 456 -3.338468377277015 +804 456 .8600740480552633 +805 456 .9749742643312178 +810 456 -.9120310188486759 +824 456 -.6119418532030143 +837 456 -.06195269263299556 +842 456 .26985741235071614 +843 456 1.9784450464558891 +846 456 1.9164132758502368 +848 456 2.8214242318495275 +855 456 1.5468353097834537 +881 456 -1.141763404515767 +885 456 .7605511050583292 +890 456 .9324310810476663 +905 456 -.7169873088370171 +923 456 .5014465350813918 +924 456 -.2061212594665263 +926 456 -.9663305431198723 +927 456 -1.311958833371773 +934 456 1.2291434482891843 +937 456 1.6181582929473346 +952 456 -1.723675073717711 +956 456 -1.4436746691257474 +958 456 .1941955275844659 +973 456 .34829835420821537 +21 457 .7454407842618994 +24 457 -1.4045081152203374 +31 457 -.08442319904745602 +39 457 -.10032155325239617 +44 457 -1.1131363546307402 +45 457 -.15501466963143454 +55 457 -.5785141373401175 +58 457 -.7861056184140207 +66 457 -.6900638451495947 +72 457 .49419321572910524 +77 457 .24697599704366274 +82 457 -.3366800638503941 +88 457 -1.3345767963482282 +103 457 -.7341823402049531 +109 457 .1791320148089397 +127 457 .21975350461257806 +129 457 -.23861983076083537 +147 457 -.642696161098381 +152 457 -.2549860911686885 +156 457 -.07473911220830654 +184 457 -.5394163166652478 +189 457 -1.4576872693482577 +194 457 .7755751922465076 +199 457 -.7445467193480313 +201 457 -.23868622674285492 +202 457 .7333100181861506 +203 457 .5673578015549571 +210 457 -1.0940038192362551 +215 457 -.10343897502275054 +216 457 -.17190309321288588 +217 457 .07383284667430334 +224 457 .19764034695150637 +225 457 -.44323922445952313 +227 457 -1.9970029268061635 +237 457 .26891114357434276 +243 457 .1327521586174218 +268 457 -.4398227846963157 +270 457 -.2878215186680347 +284 457 .2931753959251604 +293 457 .9185196615661753 +299 457 1.0852959285545414 +311 457 -.17039431712300956 +318 457 .45096929877638037 +327 457 .17968002328300536 +334 457 .0725653472916654 +345 457 .7900920955930701 +359 457 -.3266106032502113 +366 457 .028665734515906982 +375 457 1.5841615614704376 +406 457 .8193834222436167 +420 457 1.1531342620728007 +430 457 -.8106060201640852 +443 457 -1.2624219839602229 +449 457 -.8676323366829417 +451 457 .06867515081151636 +494 457 1.1935485694970271 +503 457 .16643463072758086 +511 457 1.6479543187850116 +560 457 -.35242325874247515 +569 457 -.48562674763635616 +574 457 -.007000452483785075 +576 457 -.8745081516853495 +579 457 .8451966814207827 +596 457 -.6844454212293541 +604 457 .10563586067674487 +626 457 .9901439011863957 +630 457 1.8772960878968536 +640 457 -.9526931952643987 +651 457 -1.1715822995254987 +668 457 .4252570540373472 +670 457 -1.3523307230497594 +674 457 -.8042973726788085 +681 457 1.038995791151055 +690 457 -1.5251213306278546 +693 457 -.9814349816087066 +698 457 -.32288724768034605 +701 457 -.32081370825191685 +726 457 -.9865490357263229 +731 457 .6664573826528524 +747 457 -.4152914838699911 +755 457 -.3560562354750043 +757 457 -1.0668163968636974 +789 457 .046798439424516364 +796 457 1.4362868063696317 +801 457 1.2048870965519527 +804 457 .9506667135839936 +810 457 .8585014600003873 +811 457 .03784433687899144 +824 457 1.4072367081948993 +833 457 .7767488464567979 +835 457 1.652765668294936 +866 457 -.414510752691598 +891 457 -.8391053364814866 +893 457 -.7197958350789734 +901 457 -.04212271722099235 +907 457 .4047756877247533 +908 457 -.7555233722251546 +915 457 1.364659406846315 +924 457 -.07190203118087493 +927 457 -.5342365248625084 +928 457 -.08904672343493196 +945 457 -.6563138862451109 +952 457 1.5511392706053606 +975 457 .6709747053182753 +981 457 .8595490951959643 +990 457 -1.1384323885135081 +991 457 -.46951562639781647 +2 458 .7912298604202641 +6 458 -1.6395528394776653 +22 458 -.5618963693725617 +36 458 -.8312309086720153 +37 458 .6295391619423192 +40 458 -.25588848044121193 +42 458 .35619222302596476 +51 458 -.3919560380974323 +53 458 -.4709459301566471 +67 458 -1.8524881588826556 +88 458 -1.2260495818120374 +105 458 .5435359476669824 +108 458 -.8380612872373331 +111 458 1.1231635502156316 +116 458 .19113737959278193 +129 458 1.034645951133775 +139 458 -.8234444925753701 +149 458 -1.1845926705485237 +155 458 .46768601517545616 +165 458 1.479925988411812 +168 458 -.3179013335735862 +170 458 -1.9803747958653983 +188 458 .8176919307275734 +190 458 1.5429434525778958 +224 458 -.05737714236098013 +237 458 -.8743332707602508 +239 458 .5211744976680529 +242 458 -1.4249103955851319 +265 458 .32942983458940606 +272 458 -1.425950924408452 +275 458 1.0971727141100749 +285 458 .49474089358553747 +293 458 1.2327951287621033 +309 458 -.7085751861025193 +342 458 -.7073637178914887 +349 458 1.949421352989674 +353 458 .23306924294147116 +381 458 .7914489375811462 +386 458 .2906146637837411 +394 458 -.9073172897114511 +401 458 -1.796863641251135 +407 458 .8034442831940392 +413 458 -1.4805375971568364 +429 458 .30803148721835866 +436 458 -.19138459194919558 +442 458 -.6795396515755532 +450 458 -1.4566179542122157 +471 458 -.8029396632497328 +484 458 .35513390142302803 +496 458 1.0921153556590963 +497 458 -1.7842229623735362 +500 458 .9371526971407121 +506 458 -.5854667138382827 +507 458 .7638905470219722 +518 458 -1.6329240114799806 +556 458 1.4437943642418978 +568 458 -2.0614530260590964 +576 458 .9979091064213976 +577 458 .8036714175038092 +581 458 -.9716230941056627 +585 458 1.1774721377422457 +593 458 -1.5416557407323839 +599 458 1.8852112996215986 +601 458 .9710947768022106 +609 458 -1.5786228976900913 +610 458 -1.8554792987842006 +616 458 1.9166291988457047 +632 458 1.022911049035787 +644 458 .4142366190380843 +651 458 1.0004691875607477 +659 458 -.7007527468385683 +674 458 -.07971075495005606 +676 458 -.694413061254683 +682 458 -.21978732763343492 +687 458 .7115436608966279 +702 458 -.5663614313057822 +711 458 1.967415065679484 +712 458 1.4155151454095536 +716 458 -2.391874998784533 +740 458 .7714520932983475 +784 458 -.3333901629272177 +789 458 -.4607983396040409 +790 458 .4521384144509486 +791 458 .7665274642235318 +793 458 -2.1640622106212306 +814 458 .1868535907851661 +840 458 -.06471282157536534 +847 458 -2.0378586513284693 +848 458 2.201334313225998 +875 458 .26982960817540647 +926 458 -1.6220963833381152 +931 458 -.28093500207509736 +939 458 -.06001196471640665 +945 458 .764030183166269 +964 458 -.5337102348955758 +978 458 -.25677086452163633 +983 458 1.3202981892762375 +984 458 -.42622527132065996 +985 458 -1.567763785410552 +12 459 -1.1705491242704564 +32 459 1.286921012973064 +41 459 -1.5915882676844375 +44 459 .06806368405788228 +47 459 .3285442296143869 +50 459 -.6838649473618714 +52 459 -.14029775300276123 +69 459 .35906618701328896 +71 459 -2.226958687600141 +89 459 .5821744750698108 +91 459 -1.0125653482604668 +107 459 1.7004728956665145 +126 459 -.19532967664767098 +135 459 .553103260212214 +152 459 .11058554058865214 +156 459 .08197623881527827 +167 459 -.5680471588029016 +171 459 -.8008464286472426 +181 459 .1905786826001493 +200 459 -.11009385551182932 +215 459 -.6053799352631035 +218 459 1.4429435527447552 +219 459 -.27009430973661713 +228 459 -.5532192902467485 +229 459 -2.0437788437804856 +232 459 -.6963383221904711 +241 459 1.11765885811025 +247 459 -.7591798411288584 +249 459 -1.2217400659099973 +257 459 -1.5382031560968197 +262 459 -.4182458143448546 +266 459 -.5576495856988475 +304 459 1.0259098403520468 +305 459 .12798101861724837 +310 459 -1.3284657634199812 +316 459 1.2904592107878226 +338 459 .8501388933428691 +350 459 -.7620560411396048 +362 459 .22509463402632104 +367 459 -.5959476253929281 +372 459 1.3686618623074605 +376 459 -.7121323670329079 +377 459 -1.1314503254654174 +379 459 .9491923951453018 +421 459 .26613634700342226 +427 459 1.2805116676513821 +433 459 -1.038537797123709 +446 459 -.9455969156731427 +459 459 1.9894675320147366 +467 459 -.856552826797129 +472 459 -2.211312850961142 +483 459 -.5376395671867803 +517 459 -1.4878016340769882 +533 459 -.340234083856111 +534 459 .6427173454474434 +539 459 1.2278673518357763 +552 459 1.6073768817046314 +562 459 .8927682513737294 +584 459 -.7886258830796046 +591 459 -.886791482950272 +599 459 .020967317947049063 +621 459 1.292552691186096 +634 459 .480797600910002 +648 459 -.4420174508306507 +654 459 .6771801039693113 +657 459 .6836114284005014 +680 459 .6108710438770276 +683 459 .9407990079834976 +719 459 1.3842881377976695 +759 459 -.5138330979026284 +776 459 .2184361467665453 +778 459 -.7962168753414233 +782 459 1.3575334172701679 +786 459 1.1768464801517635 +790 459 1.3900627775013175 +792 459 .9064453096410203 +807 459 -.13545205190558124 +810 459 1.919791235704271 +821 459 .35332699178921145 +832 459 1.6064115577934244 +833 459 .5473175096533858 +843 459 .1093859205963639 +845 459 .7749076590247823 +847 459 .9268593025780524 +859 459 1.3270860695875142 +862 459 -.22633115159603812 +891 459 .7884842174617578 +899 459 -2.5624349185987305 +913 459 -.7565638974684521 +915 459 .8619667617153954 +921 459 .8707703402406632 +923 459 -.2697136113384251 +955 459 -.6754625277457211 +965 459 .6524273153445304 +967 459 -2.9221972652328443 +978 459 -1.23356773742843 +988 459 -3.2265249370771745 +989 459 1.1171715241202782 +992 459 .3166753207173578 +5 460 -.12701129732480668 +23 460 .555379673046674 +56 460 -.5024868803058948 +67 460 .0679400853518391 +70 460 .5809887989611564 +71 460 -.2505108236380635 +72 460 -.751937162415601 +78 460 .7700496282288705 +85 460 .5620239653041182 +96 460 -1.770954954204496 +103 460 -.731764020321119 +155 460 -.32811380456366473 +160 460 .880371456998258 +181 460 .8740622162610076 +198 460 .0411257170050382 +199 460 .5600036538513072 +236 460 -.17687499436531848 +240 460 -.001479729357149448 +249 460 -1.1852856997666097 +257 460 .4573602868594988 +272 460 -.4974341660665885 +285 460 -.7680130972879207 +315 460 -.27379358384870767 +322 460 -1.0706128360881535 +323 460 .7511787976103346 +327 460 -.9645647933480246 +352 460 -.2282668653961432 +356 460 -.5168485080559418 +360 460 -1.6119941640853432 +363 460 .003214917112683617 +370 460 -.03134307471072982 +378 460 -1.404564850562399 +396 460 -.554070046144947 +408 460 -.36415693306330854 +446 460 -.4593571042056962 +450 460 2.325766072936719 +451 460 -.10992241234232064 +462 460 -.39067183888256984 +485 460 .932254179832044 +497 460 .01903288215271548 +498 460 -.8278024531988153 +503 460 .7214608768342576 +512 460 .4095024663399898 +521 460 .2330346810807175 +545 460 .5494636199734044 +553 460 .02884390914230575 +579 460 -.4155389027549862 +593 460 -.11381883008149171 +614 460 .05186625123232594 +628 460 .04669509479479543 +645 460 .7281978999288712 +650 460 .8507574674486976 +659 460 -1.2952663943249305 +661 460 -.3284073728725827 +663 460 -.18959253073732735 +666 460 -.9594254242637912 +670 460 .0921743824840987 +696 460 -.2686635282884768 +717 460 .7745178110409704 +719 460 .2694535137925923 +729 460 -.3840611057133575 +763 460 -.32224783638160637 +773 460 -.9955572823467614 +776 460 1.1432112714543265 +782 460 -.39587622418710755 +806 460 .16116804771483403 +809 460 -.43916028293976805 +811 460 -1.0585357134095479 +816 460 -.041528839996518324 +828 460 -.8375306456253019 +829 460 -.0548500967413606 +832 460 -.5237655779892892 +833 460 -.3399407196617743 +839 460 -.21815331354669681 +843 460 -.01054744515123035 +879 460 -.04733948757258599 +881 460 -.4848827380375064 +888 460 .7226623839622873 +889 460 .0031456665486673807 +904 460 -.26556536698298705 +907 460 1.4386499451075119 +915 460 -.5649107589135157 +924 460 .9639244515909707 +938 460 .8862255429817077 +943 460 -.3766640119955791 +970 460 .01764733321319538 +971 460 -.2072670011485194 +974 460 -1.5078948446995053 +991 460 .34333337424498817 +19 461 .0823285120228851 +36 461 -.02584026150086216 +40 461 -.14934008141210156 +81 461 -.24398920171683786 +88 461 -.08484109629327102 +106 461 .13561238445200124 +120 461 -1.0923210359986544 +128 461 -.6797157148718547 +131 461 -.11527500295349613 +139 461 -.22738346762914674 +151 461 .2077813290982068 +165 461 -.4976114460449868 +167 461 -.15658894039942833 +185 461 -.3416127511221279 +190 461 -.2658890827664004 +196 461 .9539618373021329 +198 461 .6994972894182235 +220 461 -.9530031555551276 +250 461 .546395858384142 +257 461 .018956587184231592 +272 461 .07194630237686575 +273 461 -.8333726841058412 +293 461 -.34790645551790067 +305 461 .20977415390234513 +331 461 .02538555113776371 +344 461 -.25571078123555513 +349 461 .0054529719490148745 +365 461 .3532385155058913 +380 461 .04894324994074495 +404 461 -.5071972428878107 +426 461 .6601346407812623 +442 461 .012205561902720041 +452 461 -1.1789637063047895 +453 461 -.2995191677633863 +454 461 .4567292280988982 +460 461 .6118496046416353 +465 461 .7854951590323984 +473 461 -.36175055670662787 +479 461 .04794074306562156 +485 461 .011192398888307212 +547 461 -.5046132399647874 +554 461 -.15727117737195628 +555 461 -.8836075987506555 +559 461 -.28852301843044953 +583 461 .8253918338307197 +585 461 -.07157117641595703 +605 461 1.5603463657089542 +628 461 -.9647063259265666 +636 461 -.5264491042809798 +661 461 .9296252161781562 +677 461 -.6854072468375776 +708 461 1.2205534422181852 +732 461 1.019347122510819 +747 461 1.0263349071527534 +755 461 -.2382787239276053 +769 461 -.9208833291862759 +818 461 .6342266517271539 +834 461 .3398059297523638 +841 461 -.1342430802560447 +862 461 -1.2506594639898552 +865 461 -.42989436074668735 +866 461 .4227875701839455 +869 461 1.651887423367026 +871 461 .5182753411653307 +896 461 .7139844402077364 +897 461 1.3186627844054488 +901 461 .09215076313790609 +903 461 .4664678335907211 +905 461 1.164730438867502 +906 461 1.227259235968255 +927 461 .5700013237435659 +944 461 .7661663096350956 +947 461 .10486937135235307 +964 461 -.5622653536889529 +981 461 .0842265970013655 +992 461 -.34363333331904333 +6 462 -.35909290944780536 +9 462 -2.604016818109314 +15 462 -1.0865729394407575 +19 462 .7973558150904809 +46 462 .6838040658079124 +48 462 -2.5028021580085493 +66 462 1.551011410436441 +74 462 -.45375139037015644 +82 462 .6367095666126944 +94 462 -1.5071465009837568 +96 462 -.47882937103391776 +106 462 -.04593938703565845 +107 462 .1370795253278002 +111 462 -.5848828256431791 +114 462 -.7669591913296949 +126 462 -1.877568045302339 +143 462 1.6077406776096619 +146 462 -.8297904695078369 +148 462 -.17762659544544082 +161 462 .43658442525385016 +164 462 -1.0579651673026396 +173 462 1.179646131280984 +176 462 -.35594185322362465 +182 462 -.2700674437088108 +194 462 2.547404790033877 +197 462 -.2722585030046301 +204 462 1.9297098246702833 +212 462 2.6050529271825584 +217 462 2.2500832821447325 +223 462 -.5961381819950385 +231 462 .4167095610324536 +251 462 1.2251843845788084 +253 462 -1.275880428322568 +277 462 -.8015844394722046 +279 462 -1.8243994891953614 +299 462 -.20348113734686354 +302 462 .7167764990667077 +307 462 -.18423941833565513 +313 462 -.42043230096013956 +318 462 .26419468767440546 +320 462 .0308316342313382 +332 462 -1.073264218586032 +356 462 -1.9230182208217017 +364 462 -.43005436292868715 +379 462 .704081377055181 +392 462 1.3388695166725721 +404 462 .5527689149701168 +431 462 .024480469656267573 +434 462 .7859180691465906 +455 462 .9962146717301652 +466 462 -.9899122726533957 +474 462 1.2434881549652406 +483 462 1.408555601241606 +490 462 .6453191163026033 +505 462 -.13517366894883398 +509 462 .7580170866160051 +523 462 -1.5990997801648956 +526 462 -1.0235661916069096 +532 462 .2840339441604489 +539 462 .5840828879734413 +552 462 -.17912796763509353 +579 462 .09539183820317496 +582 462 -.06418468265340058 +591 462 .7378008049340237 +595 462 .23672001830245118 +601 462 .2611883276011487 +603 462 1.7927603137984265 +608 462 .5285716848466517 +621 462 -.10111926478236055 +622 462 1.1569669633650235 +628 462 1.9729654370156882 +654 462 -.6208707650212211 +673 462 2.679942850638486 +684 462 1.925352048834604 +689 462 -2.444268699465691 +711 462 -1.8276419521294325 +718 462 .7180552725946188 +731 462 -.3794417854513803 +732 462 1.530539876964526 +741 462 1.0828105929300527 +743 462 1.1485051838678537 +751 462 -.009540833862907352 +753 462 1.5347669527429566 +760 462 .869294295621972 +809 462 -1.0231248184326505 +819 462 .060590398921335886 +830 462 .18233676842764962 +840 462 .9321232766235112 +842 462 .8048227004979684 +892 462 -1.5156358347246865 +894 462 -1.257025655248124 +896 462 .7080598419614583 +906 462 .28899698298561316 +916 462 -1.0477810701077699 +921 462 -1.33548530425377 +926 462 1.0320340528927423 +932 462 -.8339299833615702 +933 462 -1.7349488049689794 +949 462 1.6699521807544784 +950 462 .49813311678047845 +955 462 .45441520605731195 +978 462 1.9127040165031037 +983 462 .3184074646166439 +995 462 1.3005729376832504 +5 463 .3194005537847259 +24 463 1.2807811416695238 +36 463 -1.434472983506363 +37 463 -.10945616876826163 +38 463 -.7983960549099325 +42 463 -.10604465400710303 +47 463 -.20330212563933142 +55 463 -1.6034967261802973 +60 463 1.1116741439779043 +68 463 -.04637478782909518 +78 463 -1.065885438890762 +80 463 1.6019444190137317 +92 463 .2153285931152354 +99 463 -.9234630337362623 +120 463 .29035043360592966 +160 463 .22954116877138864 +162 463 -.030760249467284152 +177 463 .34487113120286617 +179 463 .08483345930338379 +194 463 -.5714849839041978 +202 463 1.66858762014341 +209 463 .8490050541706823 +212 463 -1.8006355601342983 +226 463 2.1258285026396155 +231 463 .2566184290102997 +234 463 -.8604153612341268 +306 463 .21484135037958416 +309 463 .8444805777568698 +317 463 .6278067190926188 +324 463 .9395944783206926 +335 463 -.46634248261675465 +340 463 -.5827307762402906 +343 463 -.08916706823722553 +349 463 1.3937906941152514 +351 463 -.9837274901995716 +360 463 -.8050174415568251 +380 463 -.5330867458968219 +409 463 -.5910610621882073 +419 463 1.8934608709677114 +433 463 -.9403388966839653 +438 463 1.2704344362872373 +439 463 -.10487363419248129 +451 463 -.6908983586201428 +459 463 .8784795019839091 +473 463 -1.313814261426221 +477 463 -1.663833652669287 +481 463 .25371099173320233 +489 463 -.8264117501440574 +490 463 -.33085494745086164 +497 463 -.9258796370460334 +501 463 -1.03887575479163 +511 463 .28342018865989804 +519 463 -.7560055906894221 +520 463 .1933667557925375 +527 463 -.20113574701330295 +538 463 .1040626451178104 +555 463 .2048281107120172 +557 463 -1.1444115003735422 +564 463 -1.0197415701679193 +577 463 -.32974030431099555 +581 463 -.3064541686932055 +597 463 .04321112923236652 +603 463 -1.793126138684941 +605 463 .43433217167035654 +612 463 -1.4130053321426914 +616 463 .7598685155149747 +619 463 .43863630920011604 +629 463 .4817367082121443 +654 463 .07724273837249232 +657 463 -.9300105224024042 +661 463 .42528150941566356 +663 463 .053561191398865254 +667 463 -.5139092121591116 +719 463 1.1596968001388184 +748 463 -.8759491466729632 +751 463 -.8013280405480047 +753 463 -.8880289621976852 +760 463 -.7556089544755442 +766 463 -1.6178452862563588 +776 463 -.04371589687549948 +790 463 .285298174663078 +817 463 .2827447093000456 +822 463 .7503827336753928 +827 463 .47412225419300347 +872 463 .02276729886394782 +878 463 -1.0473502514838982 +890 463 -.4244688562343026 +896 463 -1.3285789321362491 +916 463 .4076246703015991 +928 463 -.8084998962486792 +952 463 .5293220172825939 +954 463 1.0522928296573415 +958 463 -.5358835752891538 +968 463 -.08676259560290348 +972 463 .5034044407744949 +976 463 -1.335769316012408 +985 463 .07059117886114283 +990 463 1.733143201619366 +8 464 .7252721647133169 +17 464 1.1454085363661242 +20 464 -.35938409545147687 +28 464 .20406243342042157 +31 464 .2687808464131466 +41 464 -.22248900005788327 +46 464 -.4468210144624736 +47 464 .5942560437254598 +53 464 .6963211141807332 +66 464 1.0894284400115062 +83 464 .006074297423036001 +105 464 -.27922429721506115 +117 464 -1.5250103329992193 +127 464 -.6130430194088305 +132 464 -.27690343552713786 +143 464 -.06914582392536113 +170 464 -.4904229063339834 +172 464 .050696999809434415 +178 464 1.288746950798601 +179 464 -.3974508627183887 +181 464 -.03485890698605219 +185 464 -.6206936811242068 +202 464 -1.240176823824011 +204 464 .03492043160508968 +216 464 -.02823303025211129 +230 464 .01826543345924738 +253 464 .015622119823375233 +255 464 .9320264891419394 +260 464 .16103548793925368 +261 464 .9632566015501333 +267 464 1.1127539726554527 +270 464 -1.5834953444042554 +272 464 -.5392421939316512 +280 464 -.717515504401961 +289 464 -.47647686566833697 +300 464 -.18048536046775454 +316 464 -1.4135127208288556 +331 464 -.02966254226993084 +337 464 -.4231371444646882 +338 464 1.1081671849598504 +358 464 .7305889981150429 +360 464 -1.2429028647640392 +362 464 .4279083051968433 +393 464 -.5959132562567729 +398 464 .3446079801364015 +399 464 .47767952359636023 +400 464 1.1144600646378302 +410 464 .5992856776931195 +448 464 .3258486203970209 +452 464 -1.4681603729131731 +456 464 -1.2824250442856622 +471 464 .182105788263668 +472 464 .3844599416052749 +475 464 -.6306041818589274 +479 464 .32357805361932584 +489 464 .6601890338042223 +502 464 .6936357230229794 +506 464 -1.6752442966702792 +514 464 -.034361483769112314 +521 464 .6419442966102238 +526 464 -.36394092897045804 +529 464 -.23221829802559482 +534 464 .4222755746832808 +537 464 -.07169758777502412 +538 464 .21585929131916537 +610 464 .9704431440671154 +614 464 -.9697023228096816 +627 464 .586855674486362 +632 464 .2579319715117078 +635 464 -1.7062314744798466 +645 464 -.7701738849326105 +662 464 .2772725214673802 +663 464 .1439438543552084 +668 464 .08295372195324059 +669 464 .08059131580590725 +688 464 .9597145350645738 +707 464 .09725699811058172 +709 464 -.3820007784559908 +720 464 .27913424245321394 +729 464 .21396620266328192 +746 464 .28425520995309433 +752 464 .22867392677865267 +756 464 .031193943072133606 +765 464 1.5602119534213903 +769 464 -.305889236972196 +770 464 -.2149697579709311 +771 464 -.5414528671380114 +773 464 1.216886784986233 +804 464 .4609744189592536 +806 464 -.9134394416352437 +818 464 .2120086927135838 +833 464 -.13271736585913757 +843 464 -.48567863765406527 +853 464 -.14141923076183652 +878 464 -.4641732235065939 +879 464 1.2320995602260743 +885 464 -.49610002457874586 +890 464 -.18961509746109795 +899 464 .25925428840278264 +921 464 -2.01082862255869 +927 464 -2.148398428195023 +931 464 .4625125977931109 +938 464 .8729455128148067 +953 464 .7715101938487033 +960 464 -.21201949990577612 +961 464 .5982131898445572 +984 464 .5618635195698395 +989 464 -1.0352699425344936 +999 464 .7502917968138031 +49 465 1.7892220156838587 +55 465 -2.044609921804918 +65 465 -1.785593862601531 +74 465 -1.0055500129025376 +85 465 .9918462096946823 +91 465 .18484270441867823 +148 465 .20843477491751825 +160 465 -1.2412982634324876 +165 465 1.093020315706586 +172 465 -1.0477976215723268 +187 465 -.5279470344703707 +197 465 -1.5520353575752743 +199 465 -.15537271859239699 +221 465 .8361564170968528 +226 465 2.1425558270238536 +237 465 1.1175661874891905 +255 465 -.27752040477898704 +267 465 -.3068095950077978 +281 465 -.30781131188725386 +290 465 1.0138441535688958 +292 465 -.5126620747110968 +314 465 -1.1441851392150475 +319 465 -.7580165576766934 +320 465 -.18596995646641878 +328 465 -2.019915753963148 +345 465 .6771834910742613 +356 465 .41279600046824433 +364 465 .8670994148531639 +379 465 2.400569085824822 +384 465 -.9909698594776494 +386 465 .6153494572949469 +420 465 .9328091432019533 +423 465 .4258231343629252 +431 465 -.15937651328584174 +452 465 -.45093571167974317 +472 465 -1.8734725961645533 +487 465 .701618387764894 +491 465 .7118486239146722 +495 465 -1.4764290010246892 +516 465 .35884166736422507 +533 465 .0905414394179736 +536 465 -1.008323694917243 +542 465 -.9202634078707665 +556 465 -.04807961541651608 +559 465 -1.0396371559468685 +563 465 -.11340392641210768 +572 465 -.4884228821169121 +588 465 .22928288534983488 +592 465 -.4529715127649846 +595 465 -.7169138735183056 +606 465 .31271722035475025 +609 465 .07786765186582996 +628 465 -.4718068462962954 +630 465 -.11194207067623907 +647 465 .4655523562451981 +672 465 -1.8731094718186831 +685 465 .5432350643785114 +710 465 -.04811949523198204 +714 465 -.7933674098743486 +717 465 -.4557207317208271 +722 465 -.7119645142443057 +725 465 -1.853167174088432 +732 465 1.4496796566230568 +734 465 1.5817057433566264 +735 465 -.14735657593331095 +743 465 .2192388013103311 +753 465 .09950884309367863 +762 465 .3141738342238177 +763 465 -.9332657679708163 +771 465 1.18320344524136 +781 465 -.8354958987153824 +800 465 .43487721298205856 +803 465 -1.8616241560697504 +806 465 -.16603231008868619 +832 465 .93836485233626 +833 465 -.41777980851463303 +839 465 .6100941534109525 +869 465 1.533885181671929 +876 465 -1.9005111549482272 +878 465 -.7826089293145353 +906 465 .31775144791929816 +907 465 -1.6585338532711726 +909 465 .6145157310466123 +914 465 -.9835652001245516 +922 465 1.213918980907825 +942 465 .7754063139372313 +943 465 2.8391773553875503 +954 465 -.8642584603840343 +964 465 1.9599732202366251 +965 465 .5062427452338458 +972 465 .8196193100311697 +989 465 1.1018579110909483 +1000 465 .1593239571501018 +7 466 1.9001956426183713 +45 466 -.1931079135794519 +78 466 -.08354711364095456 +81 466 -1.2642416965390986 +88 466 .1539911094615938 +95 466 .09858581310105746 +96 466 1.1196293210846446 +111 466 -.8555919655504687 +112 466 -1.4987230741365416 +133 466 -.5855686351879188 +136 466 -1.646169570813274 +139 466 .24812386948112602 +146 466 1.4031112942521795 +149 466 1.4427268609609039 +158 466 .771408608465702 +161 466 -1.4027134436816857 +175 466 1.252309726011624 +179 466 .5649136491734194 +181 466 -.6998129467874067 +184 466 -.8645565921694566 +185 466 -.6183260336585092 +190 466 -2.085504960526427 +203 466 -1.0758275384981701 +213 466 -.23682213408608765 +218 466 1.316145127019952 +231 466 -.4842810232567981 +237 466 1.458894176659318 +258 466 -1.3067679988236056 +267 466 1.819778221983129 +272 466 -.118036111891735 +276 466 -1.7479586540676288 +283 466 -.15648314493748056 +287 466 -.9538980712145898 +300 466 -1.1924428794397173 +324 466 -2.323339277384543 +328 466 -.2640115996911059 +355 466 -.3316772696893379 +363 466 1.7021341378877899 +365 466 .05792573564855444 +411 466 1.1059255496730105 +443 466 -.5905662837038227 +453 466 .4925426953930878 +465 466 1.6402225724362212 +466 466 1.022736942122252 +510 466 .460586334472196 +526 466 1.0550498359075338 +537 466 -.5739647678586439 +538 466 -.44665283728085936 +559 466 -1.1821994106987583 +570 466 -1.3771993549994153 +571 466 1.4018070227580064 +577 466 .45103306796073833 +580 466 -1.3101913665523246 +582 466 -.2901265485974868 +622 466 -.9791806365710372 +651 466 -2.7907181500866347 +657 466 1.0419559463268633 +658 466 -1.5650667066771773 +672 466 -.5774039481955007 +696 466 -.5332006392598918 +703 466 -.3370248293722461 +728 466 -1.9430195290304422 +729 466 .801811919423004 +730 466 .5523636452484679 +732 466 .9852716178282322 +738 466 -.5888982367077774 +742 466 2.1124698688586894 +745 466 -.2767164472318073 +747 466 .8323055822431927 +772 466 1.5084060027790014 +775 466 -.46379569055892467 +785 466 .5623726045298001 +786 466 .9731588703638717 +789 466 .39993703124045604 +796 466 1.181589439909863 +798 466 -1.7749264650033965 +807 466 -1.182885078813059 +812 466 .362761740423854 +814 466 .20686827031667065 +818 466 .24798348169042797 +839 466 -1.1300519235605782 +844 466 -.30981060901020707 +847 466 3.1059621809285773 +875 466 -.8581606421596001 +879 466 1.6710994115301903 +886 466 -.9413454933927075 +888 466 -1.2649576328664105 +891 466 -.12381425415072866 +903 466 .5630493565896683 +906 466 1.4498082667990397 +911 466 1.4044008470152631 +914 466 2.049068259996488 +935 466 -1.7738734057662433 +940 466 -.6304789522921049 +986 466 1.8291222843412334 +987 466 -1.7526260719150357 +991 466 -1.6291982715538482 +999 466 .05576198112385406 +23 467 -.7120661364640827 +38 467 -.238801985631395 +44 467 -.11210500610504877 +50 467 .020024534048643544 +75 467 1.7395483610344007 +99 467 -1.2953670378668722 +103 467 -.34398571334550976 +109 467 .7658114617374747 +113 467 .257805263272008 +130 467 .46073882818696543 +135 467 -.9960867150059531 +149 467 .7466419205762898 +168 467 .6958667856854908 +188 467 -.06690380819709374 +205 467 -.21706788577167824 +212 467 -.014857646962093796 +242 467 1.2166703165424804 +243 467 -.3135013630455637 +255 467 -.8049466671409871 +284 467 .47554172535512285 +291 467 .2807622315873817 +300 467 .3928185449529288 +302 467 -.10760425725742503 +314 467 -.07814755601757004 +319 467 .2878462973658295 +321 467 .46862771589740404 +338 467 .3846085794227825 +354 467 1.4056349224112323 +383 467 -1.0596601338163965 +406 467 .9146368489705202 +409 467 .5727820883237741 +410 467 -.4883223283114391 +454 467 -.8660618804502251 +460 467 .4758703150924568 +488 467 -.0007935316243610976 +496 467 -.21512367172948396 +512 467 .7930295930040442 +518 467 .7695184597192491 +545 467 -.16459551070033795 +554 467 1.7468943899370128 +557 467 -.4828287222445302 +558 467 .7067744912599924 +560 467 .15229436517835943 +564 467 -.6024833912403634 +584 467 -.2582247231265381 +590 467 -.8371616296758777 +594 467 -.7356506746876925 +595 467 .9610229972041576 +596 467 -1.2906655240808276 +597 467 -.3820561373227459 +609 467 .14632987254307578 +630 467 -1.3065160607311277 +661 467 -1.164327041577899 +668 467 .6386733360136839 +683 467 .39149539208596795 +694 467 -1.0072866744197524 +697 467 1.100749698573786 +719 467 .1755912212242312 +739 467 -.5136634181005411 +744 467 1.198021183958637 +765 467 -.1724705534806889 +771 467 -.635532934706115 +783 467 .7606429418178041 +795 467 .47216131768551084 +813 467 .3788893937563916 +826 467 1.3310904869203775 +828 467 -.3077920298066076 +857 467 .5146399806514479 +869 467 -1.4938233148391258 +877 467 -.3186543778738247 +882 467 .17893298159270032 +883 467 -.5814539630991493 +898 467 .257326749291428 +900 467 .5127922365425557 +901 467 -.7964630964549251 +914 467 .5646314726341495 +920 467 -.9198690176664737 +934 467 -.7755537239224176 +938 467 .394283883927671 +955 467 .5846730572813887 +957 467 .22819346994805742 +959 467 -1.178179609707468 +979 467 .10038094924185162 +12 468 -.25014489468773127 +30 468 -.867326648329616 +39 468 -1.0570794113339663 +55 468 -.33991465582276037 +57 468 .05337047556452755 +67 468 1.1484909484855736 +68 468 1.0054698857567685 +69 468 .6172058743489247 +80 468 .5548887068915396 +94 468 .7188628363869236 +101 468 2.519103876621089 +109 468 .6645567094457785 +110 468 .030929107362597713 +113 468 -.025921770360561786 +120 468 -1.5007613136353437 +123 468 .6404075694606313 +125 468 -.7333337240810924 +136 468 1.1812139873315624 +141 468 -.4532590754138423 +143 468 1.079824076233535 +154 468 -.5988073906664418 +167 468 .9482939696540928 +187 468 -2.231501802367353 +238 468 1.0624276724364803 +241 468 -.8704697926738462 +263 468 -.3841288396332439 +267 468 .7322608004235112 +272 468 .24202856091223002 +276 468 -1.33707663744041 +300 468 .2163551454255503 +314 468 -.24919877097032245 +331 468 .01789531186469326 +332 468 .08884706299407963 +335 468 .39705751094940683 +350 468 .28738042933118113 +354 468 .6264188915624036 +359 468 -1.3841250847614988 +379 468 .2822540044683829 +388 468 -1.1368612949698313 +392 468 -.6715120263327838 +398 468 .7045611079168307 +414 468 .055370904722087236 +418 468 .024893191694275105 +454 468 .1529261129633951 +492 468 .8426211326690055 +509 468 1.0559114197414385 +515 468 -.6052796578068071 +521 468 1.2727049426912358 +527 468 .5053425860827992 +531 468 -1.0733040249436416 +535 468 .20071893582841158 +540 468 1.186668352539402 +544 468 -.8699290701581809 +576 468 -.2237104789763974 +596 468 -.20182009177395877 +597 468 -.7779009640836415 +617 468 -.4646904813391933 +621 468 -.4531778668144664 +625 468 -.9048626791190031 +642 468 -.11114819898247469 +657 468 .008006919381753602 +664 468 .7827401607458699 +689 468 -.926067364053137 +694 468 -.6207853206378822 +696 468 -1.2852521264821555 +702 468 -.020055097934288252 +705 468 -.281669789530106 +714 468 1.7003226962529725 +719 468 .012881754136049611 +721 468 -.31618574803718846 +740 468 -.8848887233278493 +741 468 .5604307124519544 +743 468 -.16058073545216064 +747 468 .512126573656776 +753 468 .42728435794998054 +754 468 -.06433922035911187 +764 468 .032534201620666905 +779 468 .2537735518042784 +783 468 .8820502392290136 +791 468 -.7723473501275135 +796 468 -.1888861486734596 +809 468 -1.3345228568554173 +810 468 -.43486491942314454 +830 468 -.6530287063181959 +834 468 -.2882820177693297 +836 468 -.09736538189790782 +851 468 -.5503441682641805 +856 468 .26212769596795954 +860 468 -.2142387926561079 +863 468 .8018318707290416 +878 468 -.9086769607606444 +881 468 .6488993634915107 +904 468 .6188341779519446 +913 468 1.1810715864746006 +924 468 -.4530372830539053 +932 468 1.5750358546204706 +935 468 -.5816083698120461 +939 468 -.12189940448190537 +946 468 -1.3104087638651214 +957 468 .3915943402281912 +963 468 .020650712232716487 +966 468 -.6422538517734347 +967 468 1.5716918542405438 +981 468 -.36775510791452415 +989 468 -.8000797018880951 +3 469 -.8835452603137722 +24 469 -.08736400804466699 +31 469 1.0896931869788224 +33 469 .6016103015639965 +47 469 -.2571539872747617 +51 469 .47980396108873963 +61 469 .5931603295514507 +77 469 .8371079775087525 +104 469 -.29321680731721556 +121 469 1.1676506008766123 +133 469 .29352563460461045 +142 469 .2616886594908323 +152 469 .006800780122607708 +153 469 -.08857313145842256 +157 469 -.2744336773709821 +168 469 1.4939929832977499 +170 469 -.0030427146336559907 +171 469 -.04244140273627746 +175 469 1.2733126677375823 +184 469 .7894492557684397 +192 469 -.054911000002137667 +201 469 -.47495898617125876 +222 469 .28050045680696795 +231 469 -.508366265023835 +241 469 -.5789190793944115 +243 469 -.10005122265982269 +250 469 .493935762680961 +259 469 .9653804802946206 +261 469 .5059247950125924 +263 469 1.5408346964218347 +269 469 1.8605856508805352 +274 469 .9989666590337601 +279 469 .8115242295116756 +286 469 1.4659414873092462 +315 469 .0403004310925876 +322 469 1.7129748001907905 +339 469 1.2990605325230833 +341 469 1.0391616049586032 +343 469 .7065401335951051 +346 469 -.1620302606533081 +347 469 .3570206795652087 +363 469 -1.3583771998125003 +368 469 .25610569119096827 +386 469 -1.1300521347260835 +398 469 -.7023192863100371 +401 469 -1.0748007275806057 +414 469 .8611372855854895 +420 469 -1.6694644429206065 +425 469 -1.618507410157453 +440 469 .6646907014097029 +447 469 -2.268481833963812 +475 469 -.2917086409115339 +480 469 1.0358368583502902 +482 469 .6490727961381799 +519 469 .4072291427275881 +540 469 -.5224765286356295 +549 469 .8262129954004724 +551 469 .9938527649985622 +560 469 .39799808621805927 +565 469 .6314440438990117 +577 469 1.2287861498784958 +593 469 .7075908427366698 +610 469 -1.82080386082562 +612 469 -.9515462486591795 +636 469 -.6311741464794504 +646 469 .7747071919133385 +679 469 -.16117131185583483 +685 469 .8350327250866527 +695 469 -.3387937141298242 +704 469 -.5173390275304863 +715 469 -1.0830879181670086 +737 469 .563590142010522 +746 469 .0419543865335458 +749 469 .5557923924515946 +751 469 -.5869099478553313 +754 469 -.3530983587077018 +775 469 .6196151051715959 +783 469 -.2629427595509429 +799 469 -.529808880042522 +807 469 -.25353623517286816 +809 469 -.2273725001845091 +813 469 .5583260318304044 +822 469 -.3031713865268 +823 469 -.4036216825679417 +824 469 -.4530310619345254 +825 469 .05749425445681645 +839 469 -.03944213200960964 +850 469 -.689840226725968 +876 469 1.8843439544951204 +884 469 -.05541618633460817 +900 469 -.09476152399421911 +915 469 -1.3373515902616993 +917 469 -.08993337055570857 +920 469 1.3629203750937804 +922 469 -2.0078790158581956 +926 469 -1.3153239229157772 +935 469 -.1507405101126907 +936 469 2.1291518985845386 +941 469 1.772111141512746 +970 469 -.0778359237005742 +982 469 -.14826425310135893 +7 470 -.31283560659327936 +13 470 -.29047956379704315 +25 470 -.4144341295296411 +44 470 .4937589448586758 +50 470 .37697308131768364 +54 470 -.10497687348912804 +61 470 .10396721385065022 +89 470 -.19245776234433443 +97 470 .6674573464551259 +127 470 .6450038057245507 +138 470 -.9164671421801716 +170 470 .269638377063888 +189 470 -.4959862587911856 +193 470 1.0107090991670742 +199 470 .47290153066532387 +201 470 .6607994545162019 +202 470 1.0648539959175114 +221 470 -.8737476510285453 +222 470 .08684805420261264 +247 470 .6545713284224219 +253 470 .5223638847082992 +256 470 .8089836164645766 +265 470 -.42436500668517096 +269 470 .6579739086705304 +280 470 -1.219037631459626 +294 470 -.7115048756274668 +299 470 .7872400292245617 +353 470 .41369967153356174 +361 470 -.1777149361725509 +367 470 .4796652676698645 +382 470 -.4572709810272818 +403 470 .0009451111207651507 +414 470 .04797103256545477 +441 470 -.778517149106407 +450 470 .7621619038814328 +483 470 -.2580911014826839 +505 470 -1.5352449180943024 +527 470 1.3563856432121024 +529 470 .19938041995435274 +542 470 -.8428866189402725 +572 470 1.3196511077643405 +574 470 1.1743888957600497 +575 470 1.2280203444035733 +595 470 -1.598158484184142 +598 470 .5778229594926907 +609 470 -.6015495692257595 +613 470 .8072478972232662 +619 470 -1.0876500540860918 +639 470 .8013967543121354 +642 470 -.7193621686874917 +643 470 .10227161234552412 +647 470 .968724865238567 +650 470 -.011525698595364606 +651 470 -1.7113264482233863 +653 470 -.42563528830469993 +664 470 -.05561861236952584 +673 470 -.15381172930898399 +678 470 -.534716556367426 +711 470 -.7089095216190608 +755 470 .37037308129552926 +785 470 .5644386845585728 +810 470 -.39503918527661336 +811 470 -.6434719312044714 +814 470 -.9867745506922078 +818 470 .25173167156151566 +821 470 .17783479271679298 +823 470 -1.5280239867080414 +827 470 -.1727228314848831 +837 470 .47819124885327247 +838 470 2.179874861499144 +851 470 -.476162925563403 +852 470 -.18221708826735647 +862 470 -.6937521337282759 +875 470 1.174876143457912 +884 470 .5496099589634483 +886 470 .3154310211155209 +896 470 -.04025722799773344 +919 470 -.24606167083025865 +931 470 -.32912027986415276 +957 470 -1.5480794064776255 +968 470 -.7124481432802224 +974 470 -.5870237118729995 +988 470 .874291897435725 +999 470 .5124278724158792 +2 471 .6174648974106847 +3 471 1.1093543962198171 +10 471 -1.8603900249330994 +22 471 .5386460313382149 +32 471 .1581593641032449 +43 471 .13613335102430155 +56 471 -1.0538135104697612 +59 471 1.0886206704925856 +64 471 -.8669170908691943 +65 471 1.1678597314300394 +66 471 -.13159413393071429 +82 471 -.8884338924619316 +86 471 -.7621312074998079 +92 471 .7313349737307724 +97 471 .5889282115725262 +115 471 .6775102676696962 +125 471 1.8222940860749344 +128 471 1.1857797338446874 +133 471 .18473264116345978 +141 471 .6263288826146937 +176 471 -.046185438649669314 +193 471 .3740094229190065 +200 471 .15680479422179938 +205 471 1.3188722094416903 +206 471 -.8530239731058221 +207 471 -.06792022600267494 +220 471 -.43723410362082293 +222 471 -.02321265976984002 +227 471 -2.266809940895476 +251 471 .5366442686236862 +255 471 -.4243116686462975 +267 471 -.3513503075472442 +278 471 -.39539620749850785 +279 471 -1.3744703404792016 +304 471 .07488657579981339 +309 471 .6314401081071641 +318 471 -.1861393756976634 +321 471 -.42660131010442337 +332 471 -.4709007102821644 +344 471 1.5297868396937064 +368 471 1.2528194750047827 +379 471 .4933236875802064 +393 471 -.6584794994723777 +402 471 .3490334484089438 +424 471 1.046970864995583 +430 471 1.2400603518978552 +445 471 .29536427923957403 +455 471 -2.1680062457683014 +483 471 .6152113842843113 +524 471 .915638341071622 +552 471 -.13333826741841787 +557 471 -1.036837857154099 +563 471 .35007811960390595 +568 471 -.7535467488545033 +579 471 .24602448295928964 +586 471 .03062101274167632 +592 471 .3010665743866824 +594 471 .2945007321315801 +597 471 1.468019512722621 +601 471 1.079280748924462 +606 471 -.09944892824275398 +609 471 .01302635582316318 +613 471 -1.3204372864231226 +614 471 .012800009897311906 +619 471 .7614411914038608 +627 471 1.2897764961997065 +639 471 -.7115630116067873 +640 471 -.17816555682406404 +650 471 -.7603732486690266 +659 471 .18735086793264988 +666 471 1.2449908215333363 +669 471 .0837097752491151 +678 471 -.601341996057869 +680 471 -.7300329683616221 +681 471 -.05837079238234394 +698 471 .019631362590089553 +699 471 1.1427676429673668 +706 471 -.5008722989063266 +710 471 .2854377094515605 +720 471 -.012947023249552575 +726 471 .9688369121067585 +743 471 1.3859408395689072 +746 471 .14476766975712008 +747 471 .29639377525431626 +749 471 .027078252643473282 +759 471 -.26775360619352906 +782 471 -.7648017371674964 +784 471 -.21397936962460365 +794 471 .21324676359936207 +798 471 .3791392516376244 +806 471 .6481014014574957 +815 471 -.3920103582959875 +823 471 .19379826208748643 +826 471 1.0843533125075053 +839 471 .40625973630395384 +856 471 .37547428066937455 +859 471 -.5002418403523031 +868 471 -.3781447677798043 +871 471 -.783597800657462 +911 471 -.06585655470501836 +935 471 .8190902538593694 +944 471 .26249929469043376 +950 471 1.0916607197152333 +953 471 -.013998138994229192 +960 471 .7417327504034297 +967 471 -.9033701358238372 +969 471 -1.2927642795374006 +974 471 .1258621574445693 +976 471 -.5536630142836618 +980 471 -.5322084780226666 +990 471 .18232026119031178 +1000 471 1.4682455249279682 +11 472 -.053305824189168446 +16 472 .10929903139341238 +34 472 .7618319646581158 +46 472 .6759475971493795 +54 472 .28131245809736466 +71 472 -.45250844236860027 +72 472 .6142637538658136 +122 472 .22912709480138715 +127 472 -1.3051442167514171 +131 472 -.3283886670952576 +132 472 .09684802569109618 +143 472 -.034371230398959104 +154 472 -.4205386147114389 +156 472 -.6789658546220407 +169 472 -.5440506596545734 +174 472 -.20881204570140408 +182 472 -1.1433620388911208 +193 472 .14471682294397367 +210 472 1.4709449742328617 +218 472 .6843021192440486 +228 472 1.6270831288547773 +234 472 .9836970233256449 +255 472 .5815938311697345 +270 472 -1.713077385433018 +275 472 -.8215882130354278 +288 472 1.734770120482475 +295 472 -.5918676760185417 +300 472 1.1282199257302752 +327 472 -1.459757011065302 +333 472 -.8121058263913191 +346 472 .8637514953181129 +377 472 .4580973304013753 +392 472 .8087166496608408 +395 472 -.4665341583482587 +403 472 .13162222416083175 +417 472 .17324810094725498 +439 472 1.551960414397613 +463 472 -.33936803823630796 +482 472 .05347264797700501 +484 472 -2.9572613142006263 +485 472 -.019225065768513183 +487 472 -.13357614678203109 +499 472 .7864840542214327 +510 472 .12061672424079656 +522 472 -.5025947869758634 +526 472 .5696563636617062 +528 472 -.2654915568383125 +544 472 .5175529843385696 +561 472 -1.6396709269198702 +562 472 .7324307636230976 +570 472 2.5717799620980752 +577 472 -.1558571796270711 +595 472 -.5825426881389079 +600 472 .893955245478465 +601 472 -.8479581932335205 +618 472 -1.1165998484387583 +620 472 -1.0984411609013645 +624 472 -.08640547338970468 +632 472 -.8028853048278264 +648 472 -1.4165384845321052 +667 472 1.8710408705959327 +668 472 .25680356770421303 +681 472 -1.277917921687986 +689 472 -2.5727668829790353 +729 472 -.7358088744998106 +756 472 2.040456775733182 +760 472 -.5044843084906945 +779 472 1.8524861433980875 +785 472 -1.932339547187809 +793 472 .15371949294116188 +799 472 -1.1069347284380697 +807 472 .5965900476956124 +809 472 -2.6101109973425425 +828 472 -1.9280136855129382 +842 472 .6605989655940498 +872 472 -.6986765563267461 +884 472 .07219384076684146 +885 472 -.2835580183511215 +897 472 -2.1813778665913053 +901 472 .6176717668705122 +915 472 -.7523616870183149 +919 472 1.8873797942373298 +924 472 .6038377504086289 +926 472 1.2786493723773966 +945 472 1.4475584897936011 +946 472 -1.1758901219762357 +957 472 -1.1310646773432684 +958 472 1.5954300687636842 +980 472 -1.9157954585530876 +989 472 -1.019429251605513 +23 473 1.4973918370694717 +35 473 .5438112713699715 +38 473 -.3409691996656888 +46 473 .9275621691473693 +53 473 .5992497519601682 +60 473 -.5905545421510165 +66 473 1.8985281031871688 +74 473 -.5777625910535009 +87 473 -.8478839175984665 +109 473 1.2927455889807509 +121 473 -.5427206300695544 +128 473 -1.2243828499410159 +139 473 1.2731048918662302 +144 473 .30083108128807584 +153 473 -.25244324955686437 +175 473 -.9566816795766703 +181 473 .5246027280846188 +197 473 .12206097446113465 +212 473 1.1990689109511061 +213 473 -1.0587074649576642 +218 473 1.9078580849242996 +250 473 -1.5421024200504188 +257 473 -.32410975200532116 +265 473 .7406175044251737 +269 473 -.7505717240861404 +288 473 -.9860329650821078 +324 473 -.3634846354009136 +327 473 -.13180483309937724 +336 473 -1.2349696794792515 +356 473 -1.232368420770586 +362 473 .721772301058419 +368 473 3.1498201229618417 +408 473 -1.6459872072316726 +416 473 -.1853661914360341 +418 473 -.07041140312376347 +420 473 1.4671812504104436 +423 473 1.0661782910411484 +430 473 -1.2788218551040136 +441 473 -2.243944138667173 +480 473 .6707009215974582 +505 473 -.2925467052149166 +515 473 -.8719790154337395 +516 473 -1.2534797968114748 +530 473 .8006242383429372 +599 473 .4722011045374647 +603 473 .26488348576211546 +609 473 2.117579519110159 +629 473 -1.7880668190776448 +634 473 -.6403302020204928 +635 473 -1.0177972671931377 +640 473 .23399734034106587 +643 473 -.23025464138514626 +644 473 2.629193057019839 +654 473 -.932926096901951 +656 473 -1.995731173090856 +657 473 -.4142985647665309 +658 473 -.22595661758645427 +672 473 -.024207075342109495 +674 473 -.28046659250686906 +701 473 -.49759404654244044 +702 473 .2055604035963278 +719 473 1.3351385955847563 +736 473 -.9689542809281144 +760 473 .5934710117678282 +764 473 1.6094403603880434 +768 473 .29775392194497735 +774 473 .0016006943095590725 +776 473 .8831552464938783 +777 473 -1.663491420847856 +789 473 2.10647652936044 +798 473 -.7336839498154027 +838 473 1.0629054943960972 +852 473 -1.535827147320398 +865 473 .3683853502569391 +888 473 .23539060523990374 +908 473 -.9767935405044221 +920 473 .34098741768368557 +922 473 .7526244451519418 +924 473 4.297360847366909 +929 473 -.8153792796584439 +941 473 -.03644559379663884 +952 473 -1.7008339975436024 +962 473 -1.9265539045934328 +987 473 -2.0369814805246973 +993 473 -1.3383542616025617 +1000 473 -.9509740426951812 +3 474 .795388607181433 +11 474 -.010813211742531248 +15 474 -.25860229667552787 +16 474 -.6299198156054029 +19 474 1.2601122280353083 +41 474 -.4627923612709861 +43 474 -.9518608082580384 +47 474 1.1453772992660123 +49 474 .16313005751670884 +53 474 -.04495087745926743 +54 474 -1.5099806533153572 +55 474 .4459159457457961 +86 474 .9487366757900877 +90 474 .6972678230538361 +122 474 -.14254762219903383 +129 474 -.6709606448108802 +133 474 1.190104309769261 +142 474 .9710665538176212 +157 474 .5096391700919187 +166 474 -2.0285902365728985 +167 474 -1.9473591720765948 +170 474 1.0116424473912906 +180 474 1.3233068098841345 +201 474 .8715298475718365 +208 474 .7142870398078377 +256 474 1.272108419520696 +259 474 -.3657515353111114 +262 474 .31231134750512535 +263 474 -1.366005905715075 +284 474 .26091008520683606 +289 474 .7556218923922334 +306 474 -.32516658387226965 +311 474 1.0935852986747918 +324 474 1.0538753868057904 +340 474 -.06958925154396303 +351 474 .12465241833563105 +372 474 -.051021485733090455 +373 474 .876760708937868 +374 474 -1.4324155647754715 +402 474 -.7465931759743221 +427 474 -.8057253981553794 +439 474 3.618765495675306 +452 474 -.7551424255566529 +454 474 -1.1257072408617164 +459 474 .5467388672710249 +483 474 .9710272073664665 +530 474 2.61988937640923 +531 474 .38051284893443926 +532 474 -1.316333752059188 +545 474 -2.193675253847983 +558 474 .2768646764401313 +560 474 -.07826279588628404 +562 474 1.9812739186236907 +567 474 -1.2381802583334545 +570 474 -.9031388336464871 +579 474 .6275802860919348 +584 474 -.7642773842066862 +585 474 .268931274425139 +597 474 .16375916096790658 +600 474 2.3768347525978606 +652 474 .3564406390561105 +656 474 .22193306502357682 +666 474 .06208586029862391 +667 474 .7666610289434176 +689 474 -2.1273659444785666 +718 474 .380681635681063 +725 474 -1.391078352854821 +733 474 .7513082860116862 +735 474 1.7084414421744145 +740 474 -2.011178453345396 +752 474 .8133059498661174 +783 474 -.2620122618382744 +788 474 .19160046957661123 +802 474 .4205400236591436 +818 474 1.2804662010794476 +855 474 .3789462434124893 +870 474 .4488236677029212 +883 474 .19097202864640866 +893 474 1.7488410504345817 +899 474 .021218477568928418 +901 474 -.61606630627558 +903 474 3.6100621329352753 +917 474 .0008586555875236407 +919 474 -.02054639227784652 +933 474 -1.0954478193879178 +936 474 -.9625274358842991 +938 474 -1.0033213825643543 +939 474 .04649665705623837 +946 474 .2735159263340333 +957 474 -.6604956395582717 +965 474 1.8475025093479867 +968 474 1.544140619733195 +984 474 1.0930666237429971 +2 475 -1.1277674058639287 +18 475 .4266357840827938 +20 475 -.4418295067796402 +27 475 1.4781737172640683 +33 475 .20153477329528308 +46 475 -.5115940312509839 +57 475 .048002068965356574 +73 475 .4240877638795836 +86 475 -1.141143457914012 +87 475 .7305352813758881 +96 475 -.8220993971541493 +104 475 -1.677259596181009 +122 475 -.16928622138890312 +124 475 1.417904613541395 +127 475 -.473168314143676 +135 475 .5561306184768273 +139 475 .2988845377430984 +156 475 .41977688135199376 +178 475 .7711811259644693 +181 475 .015177944780112038 +182 475 1.2166390448883018 +199 475 .43980214751190644 +203 475 -1.0895356910571328 +204 475 .9964727006576293 +215 475 -1.6505102153455782 +230 475 .96088607466285 +243 475 -1.164750643361491 +248 475 -.2784549564914292 +261 475 .5786178030842662 +265 475 1.5044049499992485 +287 475 -.21515745455203208 +289 475 -1.4373458089915456 +305 475 .4131196805468485 +313 475 .23807306984512583 +316 475 -.6379587516768224 +325 475 -.09014426001743245 +332 475 -1.423923710931191 +342 475 .7104760787393195 +351 475 -.6149899630112452 +362 475 .23047238962515165 +366 475 -.13739983444324289 +370 475 1.0460858929153611 +373 475 -1.5493156000361186 +377 475 .7633055278770101 +383 475 -.4063582049997677 +399 475 .6838495899986274 +403 475 .35199805110088717 +417 475 .3838751899210861 +429 475 -1.832994327200961 +437 475 .2689394713099911 +440 475 .4771399414567287 +459 475 1.3200009560672907 +461 475 -2.2913342170416686 +462 475 -1.5765150691656171 +463 475 -1.7472655405179252 +478 475 -2.0159565658384926 +491 475 -.1207048455101955 +506 475 -.6302875090573367 +514 475 1.0292365383382764 +518 475 -.5098600526208261 +527 475 .9216597179050499 +536 475 2.411318464939127 +552 475 .04379414675452625 +556 475 -.3369734579347067 +578 475 -.5001248713609681 +608 475 .5976535149473071 +625 475 .6530145656374896 +628 475 .1468568677532704 +632 475 .389625985784963 +637 475 -1.1494893931130623 +650 475 .12072805249086119 +661 475 -1.6352936624218783 +675 475 -1.6084361791715325 +686 475 -.3630590620932222 +700 475 .057563573327607205 +745 475 .12267400846899383 +747 475 .9084279863256342 +765 475 1.2259709400996064 +772 475 -.07633791954650083 +774 475 -.24670708017065462 +784 475 -.3973870392436083 +791 475 1.0027748208216059 +798 475 .02594808550273478 +799 475 -1.218352095896824 +833 475 -.3191329367700879 +846 475 -.08384195339880168 +849 475 -1.0578272371063424 +862 475 -.5363904517646736 +869 475 -.5275560799273434 +881 475 .8118280170151708 +884 475 .20246248803665268 +893 475 .7399167755284817 +897 475 .2518876512679068 +901 475 -.8003280785424253 +902 475 -.2276135255760859 +914 475 .8513739940848453 +937 475 -1.1117399216478816 +959 475 -2.493865253557752 +966 475 .49749432150271816 +968 475 .4200585466785451 +971 475 .4687518024216142 +978 475 -.7791992464033797 +990 475 -1.0663267488266674 +23 476 -.7256114477433762 +25 476 -.10933087035755658 +30 476 -.7844358238033003 +40 476 -.6668674909907666 +49 476 -1.2285368783027646 +62 476 1.9486160603237188 +63 476 .3404756201218528 +82 476 1.4309025219243423 +92 476 -1.4278700689702324 +99 476 -.3607232944547688 +107 476 -.18407508650820747 +122 476 .49960543224398374 +143 476 .40455796577759456 +154 476 -1.1938503730664145 +168 476 1.4575412052245786 +170 476 1.3036824358261139 +188 476 .7239930805368264 +196 476 -1.8035156015687759 +199 476 -.562767718936386 +200 476 -1.5052877457361629 +201 476 -.7370169126013487 +204 476 .8418618192989897 +206 476 .17806027266561594 +224 476 1.543182361758488 +233 476 -.6566689999592414 +246 476 -.2625331539099631 +253 476 .06991495095957259 +274 476 -2.546617348347436 +280 476 -.651869648040814 +283 476 -.6978639420456946 +296 476 -.2108158960005322 +323 476 .9823881629937361 +355 476 1.4266349977964439 +391 476 -.5345115543151298 +399 476 -1.2527636612272783 +402 476 -1.0372249357646897 +431 476 .2639447723114095 +435 476 -.6168820270981716 +454 476 .7260503565390442 +455 476 2.2878496133261326 +460 476 -1.1494500226317932 +461 476 .6064601796110499 +463 476 -.36214936587723123 +468 476 -.8586145706152883 +476 476 .3922642649065767 +495 476 -1.3861298322707143 +499 476 .7765969332060917 +503 476 1.2867405213915408 +516 476 .05411039471985801 +518 476 1.2685221651232808 +540 476 1.0975236649084057 +548 476 -.6790279341618409 +576 476 -.44058669878788964 +580 476 -1.5381844565590248 +605 476 -.20299577391828466 +617 476 -.07298333647429156 +618 476 -.5482796156680856 +640 476 -.5660854743540815 +646 476 1.3930201335180368 +656 476 -.5848741280415003 +660 476 -.9395966616640022 +662 476 .4388165426375 +703 476 .051250476889811894 +711 476 -2.072406702235078 +714 476 .0715170237582185 +726 476 -.5678604570516267 +734 476 .03834479777272133 +741 476 .38968561270655266 +743 476 .2523875172704763 +749 476 -2.219017461975941 +756 476 2.625595008481554 +764 476 .6632583351407829 +775 476 -.2118824014813316 +787 476 .9512432259130934 +802 476 1.4125548600196731 +810 476 -1.4903310022379186 +834 476 -1.1273197766017677 +840 476 -.20666339006384027 +865 476 -.06492662671646698 +881 476 1.40997761695086 +889 476 .34379930418061594 +907 476 1.6785455532753553 +924 476 .014702767677543964 +932 476 .04999459448789468 +964 476 .6813896073701898 +1 477 -1.5284640457786574 +10 477 .3194883704243422 +11 477 .0172314994609557 +13 477 .24151839266702546 +19 477 .048867404901791194 +20 477 .6052572508534084 +24 477 -.8650867915442089 +28 477 1.541218781254949 +38 477 -.1744607319621166 +57 477 .7865115810080737 +58 477 1.469749560415851 +67 477 .7716331198221338 +71 477 .30432082570028685 +76 477 .7752980233528519 +91 477 1.4008669676002297 +92 477 .03791773019926308 +126 477 2.0277021102795922 +135 477 .3083884550837212 +145 477 .8592749667408498 +152 477 1.2592738584645204 +160 477 1.2276494783527068 +169 477 .4215373609571973 +179 477 .6152808346210337 +185 477 -.07966567395097487 +201 477 -1.8574033041728335 +212 477 .3023044244465908 +218 477 -.060506869848568956 +222 477 -1.1733460775924187 +253 477 .21947831041006355 +259 477 1.167179753104947 +268 477 -.034632245063000125 +271 477 .17789562196847272 +279 477 1.3369655609598854 +301 477 -.43054484366084245 +310 477 .07311977912722854 +328 477 .6490845185839653 +342 477 1.5431083741826053 +343 477 .5118429774571277 +344 477 -.7631430672823979 +373 477 -.1755273334436947 +396 477 -.6061406480842078 +416 477 .13851159261485727 +440 477 -.5005851732954134 +444 477 1.3582614821707457 +452 477 -1.3350154374527348 +458 477 -2.9072647811767767 +461 477 -1.1592848335600223 +472 477 .957863793174011 +483 477 -.6083182727674489 +485 477 .04479183614032656 +497 477 1.233945022737796 +505 477 -1.764974772166756 +506 477 -.45896020292653833 +512 477 .24371774302471055 +514 477 1.5670914669668665 +525 477 1.6947763215450726 +528 477 .6185407942227268 +530 477 -.4558319818227683 +543 477 -1.0394575241339183 +564 477 2.5203211223464956 +566 477 -.13675351328288085 +585 477 .09218354478949861 +591 477 -.48026742003411516 +603 477 .7888550706953793 +610 477 -.44266215705982975 +611 477 1.9963546167981097 +623 477 -.9550571948243858 +624 477 1.660669075166592 +631 477 -.3542976105586043 +634 477 -.42494010125678106 +662 477 -.7532399578773331 +664 477 .6487781922205594 +676 477 1.189450860966402 +689 477 1.4812855473616269 +718 477 -.8354665183876093 +736 477 -.6275206322816195 +737 477 -1.0246438139189546 +741 477 .8221353867692888 +744 477 -.6073663963395831 +746 477 .5317414726264511 +750 477 -1.995958886266798 +754 477 -2.014464915603018 +756 477 2.317960434372034 +764 477 -.8336699792711175 +765 477 -.7658263615716189 +767 477 1.694686801854245 +792 477 .8473160803590976 +794 477 1.6081354077657362 +796 477 -.9644052966122063 +821 477 1.0076509726582268 +833 477 -1.4186022824570528 +835 477 -.7708829009670366 +854 477 -1.8214540004357305 +897 477 .03912206455398239 +902 477 -.7196170288402157 +907 477 -.2424252039847457 +909 477 -.7938621215274989 +928 477 -1.7123188101667857 +941 477 1.8177182799719271 +948 477 -.5456070516465448 +963 477 .3194454699535156 +993 477 1.7512531550043542 +20 478 .5263172810819544 +31 478 .27458147995355514 +34 478 -.10693003909705236 +36 478 .8455273490542511 +40 478 -.7389733176120818 +47 478 -.8808278257669073 +51 478 -.4204051649046895 +68 478 .22850192595508328 +79 478 1.5238679187874657 +94 478 .5105637907409097 +106 478 -.5502832561673614 +114 478 -.29999760243912066 +135 478 -.16250449320092344 +141 478 .3437160968580807 +148 478 .018634504435671682 +150 478 .5676916475886759 +179 478 .7781967454778903 +180 478 .3148937135115164 +187 478 -2.8320190554484688 +208 478 -.561310495947881 +209 478 .539403827630104 +216 478 .34333016543229433 +258 478 -.3083205589139805 +271 478 -.9671066892836493 +274 478 -1.605046431908191 +310 478 .6017789789023974 +312 478 .19652576279753192 +320 478 -.18337292529719262 +324 478 -.279035109275012 +329 478 .056557291369406903 +334 478 -1.3225362498180027 +339 478 -.11380477627099017 +346 478 -.5687866157132984 +355 478 .04416759069372721 +362 478 -.3149416446924482 +367 478 .20827090193550452 +372 478 -.34542385817834614 +382 478 -1.525631722987309 +388 478 -1.6685599526454467 +393 478 -.636522119684656 +420 478 -1.3672336426626341 +430 478 -1.2419034146294838 +438 478 .13427875196186748 +443 478 .7153289576224935 +454 478 .860060953363783 +459 478 -1.2711845678067188 +471 478 -.1298688359902418 +473 478 -.7779426337657316 +479 478 .11347476881520642 +504 478 .703259676783874 +508 478 -.3612973097992178 +530 478 -1.285435120226136 +532 478 -.2849284423064949 +537 478 -.844591277205181 +538 478 -.3561542806965467 +543 478 -.35985365664717883 +546 478 -.02469388999492521 +564 478 .14915381446334092 +568 478 2.579629695983479 +572 478 1.4579600321149837 +575 478 .21534537481663713 +579 478 -.4901906591281784 +607 478 -.5116893923493341 +613 478 .8710115382656165 +614 478 .3616704885333936 +618 478 -.10302424613540798 +636 478 .4732573469820876 +638 478 -1.582636908638803 +639 478 .16183651950621664 +650 478 .9385191877203116 +662 478 .2569277204315721 +666 478 -.20838424056038052 +674 478 -.5818971180501231 +679 478 1.5366550673720336 +699 478 -.9929308748248161 +711 478 -.8505858512654405 +719 478 -.0414442512598098 +736 478 .23546362296673085 +743 478 -1.3378661298515315 +746 478 .05675974574991243 +751 478 -.008914675673433348 +754 478 .05377678602737712 +756 478 1.1473123038663664 +759 478 .5934933360934466 +765 478 -2.1094667330310877 +803 478 .40084334112965914 +804 478 .206383687556256 +847 478 .9119486293012347 +853 478 .04909923686026296 +856 478 .24247931204514972 +859 478 -.5993068150481717 +865 478 .6689229014177319 +878 478 .596957783827963 +879 478 -1.090601434204636 +896 478 -.76157803404998 +901 478 .6456553413467727 +911 478 -.41608013801006344 +929 478 .793884777435178 +933 478 .6065241383637631 +935 478 .853728384044383 +942 478 .8581810807470919 +944 478 -.12435252778360316 +957 478 -.74773294355107 +960 478 -.5624949660730271 +974 478 -.8154593983981285 +992 478 -.06421126579482861 +998 478 .1656242603583954 +4 479 -1.2947958890816276 +8 479 .10282305457585789 +12 479 .4403534734365998 +14 479 .13465113278505408 +27 479 -.7824494751526712 +37 479 1.4977474407191644 +39 479 -.4121279121966638 +49 479 -1.4688814821162788 +52 479 -2.2672901007879585 +58 479 .9946252348021446 +69 479 .01731359020181865 +72 479 -2.4082583361150163 +74 479 -.24657914134641729 +76 479 .953911155982421 +81 479 1.9948306863510306 +92 479 -2.195932892122928 +93 479 -1.0323221551384998 +110 479 3.0598960908190946 +129 479 2.0011414536248533 +134 479 -.3972902246931166 +140 479 1.5376911295756404 +141 479 -.4415536915454975 +151 479 1.7767936253911454 +168 479 .31597453564326794 +172 479 1.9929890109011756 +176 479 -.8998249497339432 +179 479 .3421407875096826 +185 479 .15770743378039645 +199 479 -.3824142505657341 +207 479 1.3769136516546356 +209 479 -.36374929035041276 +219 479 .36966659127702445 +224 479 .6587981661891693 +238 479 .92911674815742 +243 479 .24440629826206947 +245 479 -1.1410016889369057 +254 479 2.249115045309441 +267 479 -.85945853402945 +282 479 .02378696667166316 +289 479 -.8044270026062513 +296 479 .7900853136770998 +308 479 -2.186251799560919 +322 479 -1.2127093299138962 +331 479 .5869166948222628 +339 479 1.4501582423989183 +353 479 .5675719581623593 +356 479 -.08840414219388507 +364 479 .7150517301968764 +365 479 -.6621482030428156 +366 479 1.877775373788891 +375 479 1.093052124536016 +380 479 .28344726381663454 +383 479 -.6737170002352268 +397 479 -.6788201798637713 +408 479 1.328765759372514 +438 479 -.6505376885035785 +443 479 .24478473468353706 +447 479 -2.0622417418186756 +452 479 .5628272851338018 +467 479 1.008127624452722 +489 479 .15947383164932719 +504 479 -2.4157671073703004 +517 479 -.3137103897770382 +518 479 -1.1682080581428742 +537 479 -1.619587496330806 +541 479 -.7496159919160754 +542 479 .7614230295062133 +544 479 -2.593820442155135 +548 479 -1.4759218889342505 +551 479 1.658582468148715 +554 479 -.05309041328784374 +556 479 -1.1336326551829163 +569 479 -1.1855771626809477 +571 479 -.4589590134674885 +579 479 .08277721988557571 +594 479 -.004103856204062331 +608 479 .363904876793769 +609 479 -1.399031200328434 +627 479 1.6711260955964957 +646 479 .07421927496858413 +660 479 .9833138127219813 +663 479 .34932182751262386 +678 479 .36464745581383096 +682 479 .7713870222452879 +685 479 -1.3400183621253436 +686 479 .5060695331875639 +689 479 .013092666148558446 +695 479 -.043535798406362056 +701 479 -1.53510721859044 +728 479 1.1635470098041396 +748 479 .31496401533017954 +752 479 -.6942472206253242 +762 479 -.8873941055284751 +797 479 -.5512377399706735 +802 479 1.0205557830580687 +815 479 .1354423066291592 +837 479 .13750990615559866 +845 479 -.9927434984747074 +846 479 1.0983939570441843 +852 479 .8082161165747033 +866 479 .15157023018483493 +875 479 -.6118811114620978 +878 479 -.3680408392260629 +885 479 -.32779315991213065 +891 479 -1.1354339005170144 +901 479 .22366864441633721 +912 479 -2.0212219057549827 +919 479 .3639351748526336 +944 479 -.5339665782778313 +963 479 .172173907523182 +968 479 -.28037528849030063 +977 479 .05517566912322977 +16 480 -.021118307567869476 +21 480 .19699448911201745 +28 480 -1.3431789797040719 +37 480 .17197428502392878 +38 480 -.14233810767189964 +63 480 .5255683459724295 +68 480 .3438593441731421 +86 480 .5527135839779378 +87 480 -.30691146508538936 +88 480 -.8555689532982171 +91 480 -.7955903025344384 +96 480 .7350916541827809 +111 480 -.12921286368084733 +119 480 -.7599556201764263 +129 480 -1.559576111415783 +149 480 1.656932307754008 +154 480 .25090850475984205 +159 480 -.8927375456324116 +161 480 -1.2970814574910212 +182 480 -.650090681306895 +187 480 -.722357379827953 +192 480 1.2486501572961433 +195 480 -.46147430692642893 +196 480 .8987514820207894 +198 480 .27960674483682213 +201 480 .41212743499059756 +211 480 -.3182058574165391 +222 480 .6331359053899502 +226 480 -.036508250628962804 +230 480 .31353779532383913 +235 480 .15328017191865292 +250 480 1.1847886356706332 +280 480 -.38135119731060374 +287 480 -.32975595470025476 +288 480 .14772072607086398 +294 480 -1.0022630080969066 +303 480 .4311449523643101 +316 480 -.22933993703031658 +326 480 -.7515504932594032 +348 480 .6756002893249072 +369 480 -.1740680605971454 +376 480 .3777741234987492 +383 480 .4348990281937524 +392 480 -.3597643630057136 +417 480 -.8361032317708084 +435 480 -2.2295847065940837 +438 480 -.16068440071861473 +449 480 1.1726735035143723 +458 480 .45351341626512987 +463 480 1.0967773656229722 +464 480 -.33921497600468226 +477 480 .6771183625868548 +492 480 -1.3992054271512193 +499 480 .4349107361894912 +516 480 1.066481326077707 +527 480 .17984091101139976 +530 480 .1158995356482399 +535 480 -.5720969695706828 +537 480 -.6465904798030631 +544 480 -.5791331519852317 +545 480 .7037926464482721 +558 480 -.3875303527955909 +562 480 -.22817117920066488 +567 480 -.4886616359101109 +568 480 -.19596184717758136 +579 480 -.1438666330369121 +581 480 -.21449672380977391 +583 480 1.278556209308201 +586 480 -.6710471688040751 +595 480 .9871641019579558 +610 480 1.0360530732851871 +613 480 .4872566973711473 +621 480 .8528514914778662 +649 480 -1.6188688930373316 +653 480 .34498599463497154 +689 480 .4623211152446985 +694 480 -.9169128366146155 +709 480 -.20766901984415514 +728 480 -.9765537693256483 +735 480 .28476419185810864 +761 480 -.23643911021575503 +772 480 1.5438931085030858 +777 480 .3957382848211495 +779 480 -.41379888062693543 +782 480 .583841361310116 +795 480 -1.192386095173977 +829 480 -.12608319775147792 +856 480 -.740780580399071 +872 480 .05918869924345942 +879 480 .2867075196369664 +880 480 .3333904339875734 +895 480 -.22770137382860306 +904 480 -.5990389881579039 +905 480 1.232530208290994 +928 480 .039495542308783216 +955 480 -1.2600886138599057 +978 480 -.008647455650620063 +15 481 2.1666307836576304 +20 481 -.02490027943727363 +29 481 -.14459586855820145 +33 481 -1.4095374864861407 +38 481 1.6313272342820322 +51 481 1.081433389148711 +52 481 -.5113624255479144 +60 481 1.3573891443772457 +63 481 .29113085943989153 +64 481 .2630376487413534 +70 481 .31223525771803423 +86 481 1.4077455224945117 +103 481 -.27397737165310354 +105 481 -.6547002867202981 +106 481 .2665414473047437 +108 481 -.0250903939481949 +111 481 .7924964759751112 +114 481 .7255276323031649 +117 481 -3.3310648920332375 +119 481 .24766150286509772 +122 481 -.9240614852162277 +143 481 .6476767744369879 +171 481 -.09150879919950869 +173 481 .5884368518736606 +207 481 -1.4634503942484014 +215 481 -1.0818347023668695 +236 481 .13327313136565705 +243 481 -1.2035997002191596 +270 481 -.07789025780577905 +271 481 .04057886472398323 +280 481 .5527630023230272 +289 481 .4927357187059893 +293 481 -.42712774985886254 +302 481 -.3281138225461918 +322 481 .2527527664936927 +325 481 .9988566193795869 +396 481 .9556459494255676 +411 481 -.41657390912653547 +431 481 .025468155948218805 +435 481 -1.541774902215491 +441 481 1.5722799411084303 +442 481 -.06608357929622151 +445 481 2.0834470949362642 +449 481 .8667285350307901 +460 481 1.8238126269520596 +466 481 1.3528265598561457 +471 481 -1.0874959513390015 +474 481 -.7241827350259326 +480 481 .41750020369301144 +488 481 -.02807576278491366 +496 481 1.0814571270348148 +502 481 .5664776965793057 +524 481 -.3692965153992934 +533 481 .052225663950882094 +550 481 -.7990771962644465 +561 481 -.19019814040541147 +571 481 .9333886234160202 +572 481 -1.6172619677229358 +573 481 .017029924332329485 +576 481 .5453301174108686 +601 481 .14492258194671362 +613 481 .16779980663006103 +649 481 -.8916293196129041 +666 481 -.1424657150516118 +671 481 .5640783980588177 +685 481 .397116720582227 +691 481 .8236208191094637 +703 481 -.06264031829369043 +710 481 .7146691063885965 +728 481 -.035248334271363604 +733 481 -1.616418079380567 +735 481 -.18586214962908895 +762 481 1.8427602997727919 +766 481 -.9787727348085036 +784 481 -.97885833413791 +790 481 .8025870176488119 +792 481 .7483351301885505 +804 481 .19179613049904937 +813 481 2.5134085501155825 +844 481 -.6379908737648436 +863 481 -.5161275181657402 +888 481 -.40358271127703094 +892 481 1.2282484350517937 +893 481 1.7335972515831828 +902 481 -.32367682323640556 +924 481 .9047080107689415 +940 481 -.172214569914644 +944 481 1.0305712415324602 +945 481 -1.8654924470646777 +970 481 .06007433282603569 +986 481 .8918019129226042 +990 481 -.49852182271905826 +8 482 1.277565899524374 +19 482 .6259387968169775 +23 482 -1.0605023318039746 +44 482 -1.0043360717746712 +49 482 .10249541243471841 +50 482 .1631022158588382 +104 482 -.49426635307744043 +112 482 .13950334350099575 +117 482 .6316457520971059 +131 482 .4591840101809357 +134 482 -.3018304777938472 +149 482 -.9328911236958844 +151 482 -2.1834993873941633 +156 482 .3311311179678696 +160 482 -.42823448984755913 +164 482 1.514899555658441 +180 482 1.5990158411561064 +195 482 -.2331903152551784 +199 482 .0067062946358505725 +200 482 .3070720097707433 +201 482 -1.2197024172557716 +218 482 -.5184253688572765 +239 482 1.1579513202076994 +243 482 -.1100231057093555 +246 482 .0003983765939823379 +253 482 -.6127979243039503 +262 482 -.7987563637389153 +266 482 -.3620146086647027 +278 482 .14778478388017677 +281 482 1.2744325718390308 +284 482 -1.1618122719842023 +295 482 -.3157307655934002 +298 482 -.0879979754073077 +305 482 .5611874549377388 +312 482 1.567607841893418 +343 482 -.18797157083319466 +351 482 -1.1994469938358756 +374 482 1.3008944143881611 +406 482 .9201270795399821 +419 482 2.5234340979658993 +423 482 .42004006669824906 +443 482 -.362360343927512 +447 482 -1.194661147123645 +490 482 1.9217455998522066 +510 482 -1.1107442683933575 +520 482 1.0916609131234118 +532 482 -1.547244395969552 +622 482 .5795802408647505 +657 482 .1075245982014447 +671 482 .5173637383584715 +674 482 -1.7848981221449183 +683 482 .43651317273523743 +687 482 .24394538478412886 +693 482 -.43964561888581 +696 482 -2.0485313042228825 +701 482 .8928826020457843 +708 482 .3616614950755051 +717 482 .53004398758519 +732 482 .4244036370041422 +754 482 -.23860034448812353 +756 482 1.433761647657752 +765 482 -.8183706821427962 +766 482 -1.0983773876543332 +774 482 -.1868244441983776 +776 482 -2.76971478996528 +796 482 -1.2855799826377998 +802 482 -.39149662880142666 +835 482 -.39635532900114007 +861 482 1.5108164613345199 +874 482 .9788710052701647 +879 482 -.00888900596135786 +880 482 -1.0131001962783943 +891 482 1.7754905560569534 +917 482 .14698292088458348 +920 482 1.101076457512158 +935 482 1.0009119169653258 +944 482 -.7685171629891546 +949 482 -1.1651356960321892 +952 482 1.20805083834938 +962 482 1.352650236316234 +963 482 .897149769409838 +966 482 .6916073985284038 +975 482 -.18438490098244906 +993 482 .6273130989383509 +6 483 -.9005635036327937 +21 483 .8446367430236231 +27 483 .33790667749297115 +29 483 -.726876511926954 +30 483 .5387514916909454 +31 483 -.49974811194801494 +50 483 .34414721829853223 +75 483 1.3687434330111121 +77 483 .6692225056707382 +93 483 -.1085743243174083 +104 483 .4883232265112401 +119 483 .06436941360494593 +127 483 .6399535590926251 +128 483 1.2686488912941687 +136 483 .6606451773363244 +155 483 .8196042855754733 +160 483 -.0600910398534089 +163 483 .8673702487653997 +165 483 .4476653106495422 +169 483 -.5423181498135559 +172 483 .8390157511586882 +182 483 .6078106431840731 +195 483 -.4079762267660773 +202 483 .19530300660097405 +230 483 -.5378725892011377 +232 483 -.7477075534166839 +247 483 .42637144349233824 +248 483 .7270588146971574 +262 483 -1.2355775231404 +266 483 -1.0855500748121267 +268 483 -.27277610420896126 +286 483 .7349316465322288 +289 483 -.44820799498967023 +295 483 -.1808584154155377 +320 483 -1.2968042100909845 +329 483 -.6380604009992414 +341 483 .3265950071736876 +357 483 -.09890691273920522 +388 483 -.6098299008412464 +389 483 -.09412464532713187 +394 483 .845026008995117 +398 483 -.7656663487777121 +442 483 .44358910990341804 +459 483 .17384060729233874 +490 483 .8060565602402197 +504 483 .3034441000636183 +509 483 .7567706751761507 +513 483 .9631739199492843 +515 483 -1.6275105378868149 +516 483 -2.0262315702937457 +519 483 1.3569669265822955 +520 483 .21443359880306187 +521 483 -.5872960822733035 +580 483 1.0552753307909666 +582 483 .6172622539409656 +585 483 -.36624540985494325 +589 483 .3051294486818955 +596 483 .025600304214419223 +601 483 .08817570781005418 +633 483 -.3943693292239792 +640 483 -.13332269671123764 +642 483 -.40116638883497946 +650 483 -.12145650900198689 +669 483 .9107898348231199 +688 483 .7401809241319638 +694 483 1.284732919621994 +700 483 .9155001727133663 +709 483 -.6907016178398735 +714 483 -1.9446692366472722 +770 483 .19772716650327293 +771 483 .4300157609343084 +779 483 .0932212764531552 +800 483 .18350323883074643 +808 483 .9022917575973733 +820 483 .08940067992449013 +822 483 .7421262194931669 +833 483 -.2694464238704752 +840 483 1.603082138102149 +845 483 -.15858310098338002 +876 483 -.6233244944880534 +877 483 -.06962302727267759 +878 483 -.703224187816202 +893 483 -.04427899808870245 +896 483 -1.6945169156518056 +900 483 .21267703090909787 +916 483 .029357686693672863 +917 483 -.5469290345557859 +921 483 .43626951707672884 +940 483 1.2749555446671363 +947 483 -1.7961278465598343 +952 483 -.13540017634932278 +956 483 -.4143761389317837 +958 483 .5964224873410457 +968 483 .2982377855140486 +971 483 -.06861625772416904 +976 483 -1.5380469548918843 +10 484 .5352676905655558 +21 484 -.9638122784193267 +22 484 -.40024227783201144 +33 484 -1.4899494651120575 +72 484 1.8541859597462345 +77 484 .33218824654416534 +92 484 .40731200549619695 +112 484 -.4685700259460218 +114 484 .3558147358447096 +118 484 -.7433023005642987 +130 484 1.5541597878575157 +134 484 .7440152673709642 +135 484 .31154940561292477 +137 484 1.0512211803549427 +171 484 1.2249821165690922 +184 484 .796598007654314 +190 484 -2.655876009064942 +204 484 1.7901215740230574 +209 484 -1.224666282522866 +210 484 1.615309058492885 +215 484 -1.0991108596232189 +217 484 -.8843932125923466 +219 484 .39034761555354264 +229 484 -1.020811891083511 +251 484 .09596195690208434 +256 484 .2677844833172296 +263 484 -.9168050725635545 +280 484 .5846727562691417 +298 484 -.37085637163186497 +305 484 1.1272125036934955 +313 484 -.7349314227302497 +323 484 .35639844956520994 +358 484 .9411932441141835 +373 484 .9973880942008869 +376 484 1.0863847615312134 +383 484 -.11112846181789672 +386 484 .375585855644097 +405 484 .03786345242059906 +407 484 .25660014598182085 +432 484 -.010832319667774069 +440 484 1.8820285427471715 +442 484 .1803023049601091 +445 484 .9521637862064696 +463 484 -.8621942087087817 +479 484 1.474949307636055 +489 484 -.5427461933962153 +490 484 .5723922770359708 +509 484 1.5717250954803723 +521 484 -1.5667979197362065 +526 484 .4073560269988728 +533 484 -.31181110696586767 +552 484 .5881677512178519 +564 484 .6421586434141876 +577 484 -1.621573142824563 +590 484 -.4614134911206038 +592 484 -.8805205520772216 +605 484 .7401898936625536 +639 484 .1176695241526022 +641 484 .5907342599382671 +648 484 -1.175067919633104 +649 484 -.5752141564370836 +662 484 -2.726571359832442 +684 484 -.029073479161932744 +687 484 .7527303682396607 +690 484 .8694515167270306 +702 484 -.612795425066673 +707 484 .23778431857283983 +718 484 .7484882596576212 +719 484 1.7118605013501165 +735 484 .8496985682606228 +736 484 -.2789448087565867 +745 484 -1.9768276047153486 +768 484 .23189237822662018 +772 484 .4418934399230485 +782 484 .3067955380353333 +783 484 -.18527518964311218 +796 484 .7594141420937397 +804 484 -.33780564173497524 +812 484 1.6977765849651676 +826 484 .9618731149236077 +836 484 .1692164456489611 +852 484 -1.9470765917261794 +857 484 -1.0824800152516327 +874 484 -.37851517203703905 +888 484 -1.0743691739726755 +899 484 -1.4780642734287202 +900 484 -.30584912596134306 +910 484 -.002708014504304704 +915 484 .4712362257650087 +927 484 -.5347812500055106 +933 484 -1.3256456675095023 +935 484 .749001374035115 +953 484 2.897257555665831 +959 484 -1.212578827227575 +964 484 -.6277970722500662 +967 484 .6900037173036704 +973 484 -1.7104741716582048 +974 484 -1.084907408814338 +983 484 -.6449381265492062 +991 484 -.2540097855658762 +999 484 -.9260945042156495 +11 485 -.15917503881910205 +18 485 -.8699979856763913 +23 485 .693588878904897 +26 485 -.17796576070039 +27 485 -2.0147366762771064 +51 485 -.9182934029278003 +68 485 -.09702435500517825 +71 485 -.7677607603189361 +90 485 -.06980333982301377 +150 485 -.2676478226487743 +160 485 .28426607036534635 +164 485 .6967756008858903 +165 485 -1.399689237214453 +195 485 -1.191591343313751 +217 485 -.6461629344218528 +246 485 .31322263524811295 +251 485 1.9809166014832904 +252 485 -.8959537918702148 +276 485 -1.3562728017228411 +286 485 .2899600190323353 +292 485 .3959500100486675 +314 485 -.14592267644660437 +333 485 -.2398665787871755 +337 485 -.37154763388149564 +338 485 1.353151059454972 +345 485 -.5808724502433742 +352 485 -2.103386718984296 +393 485 -.18356284191205957 +399 485 -.4838263430542228 +408 485 -1.0345536982255434 +423 485 -.17509689754555932 +446 485 -3.0676333409245014 +463 485 1.636934036196607 +470 485 .35698831518948504 +472 485 -1.1526252331954938 +523 485 .32600978958771387 +535 485 .16287439272873566 +538 485 .8065720444264454 +541 485 -1.1186415238768057 +542 485 -1.051113444773943 +543 485 -.1516670213118249 +544 485 -.5597036539206799 +547 485 -1.0792922090091106 +554 485 -.26049428566142263 +560 485 .2358788511152481 +562 485 .7275631063052419 +574 485 1.0135414853988693 +581 485 -1.7993405745637157 +583 485 .1319011914288751 +594 485 .40672541632849646 +603 485 -1.352901258218155 +610 485 1.3195697424878814 +614 485 -1.6834239810236962 +618 485 1.1643434763139107 +622 485 1.162884624630752 +624 485 -.02296245699065949 +641 485 .41993946632223195 +646 485 1.480930691042171 +648 485 -.31231617820663565 +675 485 -.4806525607046559 +682 485 -.3027073941691303 +690 485 -.9562235522463018 +692 485 1.7627911569388215 +693 485 -.9807379410019266 +694 485 1.1538304352842341 +735 485 .8911406756795414 +745 485 -.03027779796281515 +776 485 1.7812779499560742 +777 485 -.48830518464608175 +788 485 .9284151315790656 +790 485 1.1782259503287977 +794 485 -1.163693448923621 +808 485 .16415902775213292 +813 485 .4216685961238751 +814 485 -.22305493491590395 +838 485 .7056052467866956 +845 485 -1.3422932427136962 +846 485 .03259327088874517 +869 485 2.371928493366917 +872 485 -.4497251068948469 +879 485 .23503952818287094 +896 485 .37959760166683504 +910 485 -.36151591468203575 +915 485 1.4649140010507828 +919 485 .783345905441592 +926 485 -.6620923644438814 +927 485 -1.0288863488915434 +930 485 -.49661501085058923 +954 485 -.7391177448461154 +959 485 2.046686170270976 +967 485 1.0625822879044007 +975 485 .3709531918625998 +982 485 -.3984582305151561 +999 485 .1601314194194734 +10 486 .9192775686549775 +21 486 .526266875453683 +22 486 -.393681611842014 +51 486 -.07616639965604532 +58 486 -.25997488855406387 +59 486 1.1979842229405484 +74 486 .17535481260495417 +87 486 .3562298568583518 +91 486 .19119300378861742 +107 486 .9063557583210688 +118 486 .26245157058571755 +184 486 .7406302840244837 +191 486 -.9330985061888029 +209 486 -.47010606621444945 +213 486 -.7028604092934319 +218 486 .20914869713339407 +222 486 .4874511247775818 +225 486 .9441775533501523 +230 486 .1319640499697737 +240 486 -1.027052604907308 +247 486 .6071515296961988 +276 486 .03390813465058211 +282 486 -.48515156367807366 +283 486 .6537339752905232 +348 486 -.8668238873712516 +349 486 -.44266984630636447 +364 486 .42694306299871426 +375 486 -.02336078759344351 +407 486 -.12745220800697285 +420 486 1.1067982942360282 +427 486 -.15288918513808714 +435 486 -.2781594612297124 +443 486 -.9090548015597714 +447 486 -.9356276151209337 +462 486 .6013580860430502 +467 486 .16778059531789807 +475 486 .27405111694198386 +476 486 .2507331834646574 +477 486 .7564182776342633 +480 486 .7550824434279113 +493 486 .5206809617524591 +496 486 .32452783804136254 +505 486 -.1702503079499076 +515 486 -.7970076414403628 +524 486 -.10880863450734979 +525 486 .1462346848513065 +530 486 .6941923299405122 +569 486 .34410340669113526 +582 486 .6215233882751772 +583 486 -.0917363257801598 +590 486 -.4510061008724036 +604 486 -.18584818433656308 +606 486 -.6890594061501988 +610 486 .34780007987324346 +615 486 .9725587522384888 +616 486 .8750804167946431 +619 486 -.4056299387118886 +634 486 .1767099392431546 +646 486 -.1762323704866073 +666 486 -.39711490212285067 +675 486 .12256648955981567 +708 486 .2737675861094243 +723 486 .81208194531984 +739 486 -.3435124006603042 +740 486 -.29895334706385 +745 486 -.5265623527436024 +747 486 -.21892667568662072 +768 486 .0019572747847531394 +778 486 .15670840384318077 +787 486 .03883808799571642 +789 486 .059899802247517224 +802 486 -.15576394076517483 +808 486 -.1606940802896213 +819 486 -.3940970002418425 +822 486 -.1680206970657762 +831 486 .19873468462856325 +855 486 .5081403591540039 +861 486 -.019837026427958926 +864 486 -.49693021452385805 +871 486 .07322227223455074 +880 486 .12841489767172787 +885 486 .06875657834035395 +886 486 .21410421743906527 +916 486 .2537292426474098 +917 486 -.4135060367966241 +918 486 1.1641854626570356 +919 486 -.341662303552387 +925 486 1.0137310386568765 +940 486 .7418128787581405 +942 486 .5485742640286645 +952 486 .2618395586249526 +957 486 -.8141973272728915 +966 486 -.6161137354775168 +967 486 1.1014149104956392 +989 486 -.7354898350652346 +998 486 .3723317337644577 +3 487 .9320422330830581 +9 487 .6329851879721134 +13 487 -.9519236078659983 +19 487 .000279561456644456 +24 487 -.9949635220392867 +25 487 1.918007988642426 +32 487 -.02338001625264092 +37 487 -.6320524113147302 +38 487 .9205641756285993 +62 487 -.029548787887765715 +69 487 -1.1429762953912084 +74 487 -.2420496118523643 +86 487 1.436038951722532 +93 487 1.5269049431254487 +121 487 -.7663017424170214 +125 487 .6125808839431424 +130 487 -.9881004232140221 +133 487 .02307061707983512 +137 487 -1.832614355068631 +139 487 -.15164898799942853 +145 487 .5796623896865098 +147 487 -1.337048497538063 +148 487 -.570756046251031 +167 487 -.6515287115700166 +168 487 1.41316263763661 +172 487 -.4329688936618678 +189 487 -.48153221988720973 +208 487 1.0940301179460517 +233 487 .7240459032185614 +242 487 .4772214599347351 +248 487 .19852178205370738 +282 487 -.3622178214315183 +287 487 1.6715688202258052 +296 487 .9140146705106911 +318 487 -.8002401148763952 +319 487 .028980251349936516 +323 487 -.8913686887534842 +330 487 .8976428832353165 +338 487 1.033623134632789 +340 487 -.342536972604697 +342 487 -1.2765929241618508 +358 487 2.288226797256429 +361 487 1.4977136244513727 +368 487 -2.187839824677254 +371 487 -1.3423642995884861 +372 487 -1.1776307171223264 +374 487 .04673857740601135 +389 487 .08303928778084521 +402 487 -.9417768631009001 +417 487 .06407058376821091 +434 487 1.543838756456147 +448 487 .8440522197359548 +462 487 2.3969582222075063 +470 487 -.8355597444397206 +486 487 -.8248625108155162 +513 487 1.4073701246909132 +524 487 1.3728105451038413 +527 487 -.28293194360337615 +532 487 -.8399550175672652 +537 487 -.8531230049240189 +543 487 .6692230964943072 +556 487 .28681614363181546 +561 487 2.2365111741110457 +564 487 -2.47168570233578 +574 487 .15767833111794227 +577 487 -1.345045543435457 +582 487 .2141292447785724 +587 487 .7048734172796703 +590 487 -.9755964740259389 +595 487 .5785964686105224 +615 487 1.0441331858783776 +631 487 -.4480443578370892 +639 487 .8562063383303139 +641 487 -1.6722404008783125 +659 487 .7297865051810175 +666 487 .5360250346677413 +673 487 -1.9380653934649303 +680 487 .5721999714189403 +692 487 1.3529413420422718 +702 487 -1.3555975642656088 +704 487 .40477850618894184 +708 487 .3200900359105418 +715 487 .7806923385095472 +716 487 -3.1318777602396737 +718 487 -2.2701217038697434 +733 487 -.7635529508967455 +734 487 .03792943400484183 +745 487 .6861676713496838 +754 487 1.3362258416830541 +764 487 1.370534588836432 +780 487 -.3969096346694757 +787 487 -.26774804188630175 +801 487 -.15798414511937126 +808 487 -.8459759947398644 +821 487 .12178667415563513 +848 487 2.076447700073576 +849 487 2.650320411285811 +875 487 1.7387781952009962 +882 487 -.30491030428544075 +888 487 -.5044480485098994 +899 487 -.06526498429998925 +913 487 -.13911921116448173 +915 487 .7237754403716343 +916 487 -.0005072423703114393 +932 487 -.06438002456179046 +936 487 -1.4282047043166244 +937 487 1.0092453992359807 +938 487 -.31717833681064966 +944 487 .36328227561734516 +947 487 -1.6823826574864704 +958 487 -1.5314405046034343 +977 487 1.0920090787847585 +996 487 -.2498067687221509 +3 488 -1.280201577437904 +14 488 -.20277580650679045 +17 488 .017386856477365417 +21 488 .5381532738335373 +25 488 -1.4044672734748616 +34 488 .4087279371772542 +37 488 -.0595399741494701 +43 488 -.4153103258604607 +56 488 2.0298773999667796 +66 488 1.115427468585089 +82 488 .05423331482644664 +86 488 -.929273025497088 +87 488 -.5030211237474017 +88 488 .06780585599368164 +109 488 -.2112324183408257 +112 488 -.726557951263173 +114 488 1.8189673461858047 +118 488 -.4173580472385314 +125 488 -2.166689581225018 +131 488 -.6440443437541152 +138 488 -.24272224593426722 +156 488 .6841111707719659 +163 488 -.8940463894855759 +168 488 -1.6408469884158938 +179 488 .346164101465581 +180 488 -.47386417783767765 +192 488 -.5287212071281264 +206 488 -1.1275724119019148 +209 488 -.8019369677843349 +215 488 -.9715906793977211 +220 488 -.9569000833768433 +231 488 .13149641955504177 +243 488 .5655013723465979 +246 488 -1.1358973301285162 +251 488 1.0965309929748424 +260 488 -.16656630471786057 +302 488 .40455635660608713 +304 488 -.0769672000510506 +311 488 -.9860225610703243 +332 488 .40060748367046967 +339 488 .32745277099303977 +360 488 -1.74150083569605 +364 488 1.0361665620579084 +368 488 .7245841802087885 +372 488 .31346542434137736 +378 488 -1.3574376289786456 +410 488 1.1286286042668108 +411 488 .8470241789922398 +420 488 .541966317465519 +432 488 -.8567927554704236 +448 488 -.598237882940015 +491 488 1.0812007940296207 +493 488 .6163456344338495 +497 488 -.32623504335253783 +509 488 .6342649219407974 +532 488 .2057558749451838 +539 488 .6822131078464605 +540 488 .2823025558048568 +551 488 -1.19580853040866 +572 488 -.313445663506187 +581 488 .8635571395332073 +588 488 -.6629659750156888 +592 488 .5847680021345275 +593 488 -.08642340239811827 +602 488 .18754753812832706 +603 488 -.1776865807941163 +606 488 .03130011829365122 +617 488 -.8217118378299428 +619 488 .02088999841229367 +622 488 .2504795233286638 +640 488 .22501546982610932 +642 488 -.7829629882821244 +659 488 1.135627975352228 +668 488 -.42243529277563363 +678 488 .8139029536306402 +682 488 -.25248969415711087 +698 488 .5625858322733699 +719 488 -.6267090158218941 +732 488 .8507958531399704 +735 488 -.44651358526952684 +750 488 -.2503631177594303 +774 488 -.7975817446895723 +789 488 1.285285363149909 +824 488 .406064896717137 +831 488 .534905078520066 +832 488 1.1926000034062751 +843 488 -.8811361340450814 +847 488 2.6636800711727466 +858 488 .03332170673954468 +875 488 -.091691280211078 +914 488 .8347641041329159 +916 488 .11684750938308883 +960 488 -.2245751211826576 +965 488 -.276680943804272 +966 488 -.7975588464270981 +987 488 -.8536634598989878 +990 488 -.46817336643669355 +994 488 -.8308357198012387 +996 488 .4795759219650404 +8 489 -.36679836705382063 +19 489 .6107454007992933 +20 489 .32614532085100567 +28 489 -.7093681438417432 +30 489 .15178807124883908 +39 489 -1.3035991075122206 +87 489 -1.8896885627318558 +90 489 -.029801342847315226 +96 489 2.170804260855862 +98 489 -.04908275486310931 +105 489 -.3723825810970756 +110 489 -2.9311073814428767 +111 489 -.6937086151859746 +168 489 1.9908403664694552 +171 489 -1.9049790477897777 +179 489 .7401262988524407 +186 489 -.5221267231573832 +189 489 .373940653383545 +191 489 1.7773136985103597 +215 489 1.735580260747718 +239 489 -1.175076395849075 +260 489 .016877995146064452 +261 489 -3.4957270212656884 +267 489 .787407390299973 +275 489 -1.0022513276511897 +284 489 .12788737421889662 +303 489 .8061250373972975 +318 489 -.607994918617545 +325 489 1.9059346373309953 +331 489 -.28828382352911497 +350 489 .9571183083795662 +358 489 -1.4282666476708654 +361 489 -.5743922641086167 +372 489 -.07263772651393162 +382 489 -1.5224070401880634 +388 489 -1.816509633022253 +389 489 -.5645280173182095 +392 489 -2.73888653922448 +393 489 .40446665369083457 +410 489 -.22731584295903892 +412 489 -.5140824885493723 +420 489 -1.9321866248337496 +421 489 -.6887003081151514 +425 489 .3852908216104616 +429 489 .45349508012851136 +439 489 -.9599267013570854 +454 489 .21916362986297067 +458 489 -1.007793180442563 +461 489 -.5958720981356023 +466 489 -.9510177250333836 +483 489 -2.093236075760646 +509 489 1.2704724798236107 +516 489 3.397830081950633 +526 489 1.4160263544449443 +527 489 .38060404114461777 +552 489 -.3488614452728676 +581 489 1.4528724929076198 +583 489 -1.1529713145373015 +587 489 -.3085335340482844 +594 489 -1.8531120253440294 +614 489 .697905814818215 +654 489 .11827209592372981 +671 489 1.1768088395618082 +676 489 .2580191959244751 +692 489 .38969843715392816 +709 489 1.5613222666574187 +710 489 -.5328864044897962 +713 489 1.780859100188159 +718 489 1.120632561670694 +725 489 -1.2220711505350879 +727 489 -.9299087349591131 +734 489 2.4416685351071896 +744 489 .8915293217669307 +749 489 -1.5910344018077436 +751 489 -.5942716855503922 +752 489 -.44498818115155225 +761 489 -.3040818978261616 +769 489 -1.252828841767819 +770 489 -.6718356660606807 +771 489 -.8148964914367228 +774 489 -1.4066960013654102 +778 489 -.11716186677199471 +809 489 -.982900890329974 +819 489 .32697820123320087 +822 489 -.26745740154789494 +831 489 1.0770348241015089 +834 489 .18366849646224542 +848 489 -1.0366769838396306 +849 489 -.7794781227430199 +851 489 -.4321534909675029 +855 489 -1.490018700173755 +875 489 .20755677847668014 +914 489 .5297821994031063 +919 489 -1.19807565838192 +924 489 -.4495798931573445 +926 489 1.697674948328595 +946 489 -.681369838697323 +987 489 -.028631695108599038 +989 489 1.0801364002547031 +1000 489 2.1944841138992484 +29 490 .6673883372087139 +38 490 -1.3474704540443185 +58 490 -.10837484119531171 +60 490 .14048222773453767 +72 490 -.7115080746868359 +83 490 -.7067567286245333 +88 490 -.6845511187507543 +90 490 .6280331547909999 +109 490 -.4489115908244437 +113 490 -.200922480881202 +139 490 .32129234797448436 +148 490 1.5001518557832048 +156 490 -.9683127104734135 +161 490 1.5866213329596497 +163 490 .13387793376611548 +187 490 .36089451789782545 +191 490 -.3436268961534544 +199 490 -.009130310183664198 +212 490 .044974224999585394 +216 490 1.2857523963998025 +218 490 -.8112198701186154 +244 490 .8090121916040294 +249 490 1.0321945291716155 +282 490 -1.773211167050489 +294 490 2.003455969532794 +298 490 -.7212727271747875 +307 490 1.03802027501506 +341 490 .8135062837378906 +343 490 1.6372514683430917 +344 490 -.8899309048209868 +346 490 -.5013038273593713 +365 490 .3666948701256945 +378 490 -.7441876927681084 +383 490 -1.58036749319457 +394 490 .6141226590036462 +419 490 -1.2734957904492203 +426 490 .6734072457649396 +427 490 .879779718941821 +450 490 2.4112762359495985 +458 490 .409332727918855 +459 490 -.7726705126547538 +467 490 -.06728307111994429 +480 490 -.0066077625834085885 +490 490 .993933022290447 +514 490 -.16762416362512117 +525 490 .11670277230077995 +528 490 -1.255894587729811 +549 490 .3019257685223777 +586 490 .23029451685597818 +596 490 -.456731615660783 +632 490 -.15572486395103774 +637 490 -.10344622805573993 +639 490 .5999773061299051 +651 490 .9658662704328991 +658 490 -.3121481742222672 +687 490 .5272488396586809 +708 490 -1.2326734802910688 +718 490 1.3543593267540806 +721 490 -.9103166992026468 +723 490 .22940904948819305 +736 490 -1.278446947851529 +751 490 .7812667935616782 +762 490 -1.4039920198943512 +771 490 -.5037733446303664 +775 490 .8118916011268933 +777 490 -1.0853438462694958 +779 490 .6587957558975163 +789 490 -.4635501973375178 +809 490 -.4800030286908099 +820 490 1.2116013941372117 +825 490 .5048376103518245 +828 490 -2.5545239298542195 +833 490 .037489551048096384 +838 490 1.2960728309410363 +857 490 .9133633049833184 +875 490 .18942226961573772 +879 490 -.8742475864487493 +890 490 1.388631936289903 +898 490 .6321421716592868 +905 490 -1.188948947973412 +922 490 .027440535531810473 +924 490 -1.2319837912833025 +936 490 -.7657090335251444 +938 490 .6117436433707568 +951 490 -.23744984621946122 +956 490 -.3165243638705092 +961 490 .13309752365552344 +981 490 -.4148466231986043 +982 490 -.6452630018990083 +998 490 -.2697035037780446 +16 491 .012684900449874442 +36 491 .2552612722780821 +41 491 .7149808224348891 +49 491 1.2899896395923367 +52 491 -.24330658104821484 +56 491 -.34274261921957866 +87 491 1.0909116995410388 +88 491 .29458010493447845 +95 491 .6606110941665296 +114 491 -.9706043522924324 +117 491 .27205770330475443 +118 491 1.1531967138538324 +126 491 1.1919968194000363 +136 491 1.7039062730528554 +137 491 -.9129418341491905 +139 491 -.8627879724664741 +174 491 -.31115464538993026 +179 491 .5366060020719979 +194 491 -1.1860327211295796 +199 491 .7250872350807398 +207 491 .7262836455557724 +216 491 .9625472665303847 +221 491 -2.082335856012326 +230 491 -.7544589853298712 +233 491 .5806902422957325 +238 491 .7489563321178678 +240 491 .44012997479723215 +268 491 .5590358002256013 +276 491 .3653681316063898 +284 491 -.6939531873861358 +285 491 .8704467251365992 +290 491 -.45779632765884903 +305 491 -1.2173653821239296 +310 491 .44321841349813973 +332 491 -.26362595163542496 +354 491 .17951113011398656 +372 491 -1.5191547890162305 +374 491 .5431884650569837 +379 491 -.9628222782289906 +388 491 -.008559678158684289 +390 491 .5037990737029371 +391 491 -.9995920321783651 +401 491 -.41722986189186817 +403 491 1.0130308059457933 +406 491 -.8695750658964223 +410 491 -.9307339301043508 +416 491 .3305867254735333 +421 491 -.4266523995582801 +445 491 -.02345417901426107 +458 491 .8860746009376245 +475 491 .8560146754040264 +520 491 -.8347956646106125 +528 491 -.5967118556704225 +536 491 -.8877470926451385 +563 491 -.25062754898005635 +582 491 .09760123497523704 +588 491 -.24818058402371668 +594 491 .018968752215350507 +603 491 .42789119734530234 +617 491 .2556900897987488 +625 491 .6925220700448564 +629 491 -.9233100725022314 +638 491 -.4281998358174343 +640 491 .8293635085940401 +646 491 -1.612800681614763 +650 491 .8546193949638908 +651 491 1.1644994330039435 +653 491 .8496354657059004 +660 491 -.21520879887910838 +666 491 -.3020562507729444 +676 491 -.1536557843969615 +679 491 -.7236789313704668 +682 491 1.5793361121402243 +689 491 .4293264772913819 +690 491 .99741230095906 +694 491 .21906753732807865 +722 491 .02381521536764372 +724 491 -.19282814112394864 +733 491 -.1652788738173368 +737 491 -.19894352463283455 +745 491 .7645232131478037 +751 491 .05278779796994242 +766 491 .697050747994751 +768 491 -.8530174769451543 +777 491 -1.0631244678036482 +779 491 .5266957164559246 +788 491 .6430953340049874 +790 491 -.052440750430957334 +796 491 -1.006760447747771 +824 491 -1.2920061055031153 +830 491 .378963720581151 +838 491 1.8309568845956579 +848 491 2.384231727210633 +859 491 -1.482743020406145 +871 491 -1.0837705182324098 +881 491 -.5878540243928558 +882 491 .37452761306124227 +903 491 -.5266415888290208 +907 491 -1.0305700244428722 +926 491 -.8198733429474152 +927 491 .49648129334835317 +929 491 .124083139762254 +934 491 1.5578570298066479 +966 491 .28314437367900513 +993 491 -.13495218394858913 +12 492 -.6964554596458917 +19 492 .7065872356613229 +21 492 -.684061496294186 +27 492 .8404005016938902 +31 492 -.46392586032032873 +32 492 .42421597945662826 +45 492 -.9721860330480704 +55 492 -.10300249482923884 +63 492 -1.3423106588824931 +73 492 -.012735076532135884 +79 492 -.5517167707077639 +91 492 .6600994641308631 +107 492 -.021444657698862783 +116 492 .28301558169188784 +136 492 -.08094553259315335 +143 492 2.626444408060248 +150 492 .47553076767774094 +155 492 .6976941764095258 +163 492 -.4631901857182822 +170 492 1.4219763633430296 +175 492 .1853921987379763 +176 492 .3989772699718251 +189 492 .8322382445366069 +190 492 -1.587331222184789 +202 492 -.3196608635148697 +213 492 -.6545748172772072 +228 492 .0990976928715826 +233 492 -1.1600591525450419 +246 492 -1.0390673075220844 +250 492 -1.358807103809001 +263 492 -.6390133636801119 +266 492 -1.3588607736218568 +269 492 -.4439761306123244 +286 492 .7209239327609939 +288 492 -.42874904733356806 +295 492 -.43193735923820986 +297 492 .3953446177606734 +318 492 -.16117419614331996 +319 492 -.1745671279186988 +326 492 -1.566957697802242 +341 492 .9810705935921541 +344 492 1.7169944485427937 +359 492 .0374743331545032 +378 492 1.1719283201369695 +381 492 -.6584485058866908 +383 492 -.2401054177156111 +388 492 -1.3352706324233086 +392 492 -1.4973041468460075 +396 492 1.0473891713243315 +398 492 -.17949498549807535 +400 492 .3076964327787278 +405 492 -.005890035476219191 +411 492 .25163838204124267 +412 492 .10132947395143363 +434 492 .8971445850597927 +461 492 -.8398488812984729 +481 492 .9532646210525422 +492 492 .9947278406686386 +508 492 .9051138535188201 +510 492 -1.0651237324193874 +522 492 -.07777776276541358 +541 492 1.0862530511199118 +570 492 -.5768753540560387 +579 492 -.5839227951408044 +583 492 -1.3562451149569474 +589 492 -.7145509544511963 +593 492 1.6864083177301434 +624 492 .9297951656066458 +628 492 1.4259999149517997 +631 492 -.13787068165749047 +644 492 .4902013938260171 +665 492 -.37291994824808156 +672 492 .25383991208423434 +683 492 .03760943305328995 +687 492 .5089464521109379 +692 492 -.5776716738462354 +697 492 .6656864637725238 +712 492 -.5159874230526873 +715 492 .19678302898018957 +720 492 .3585313751008606 +721 492 .5614986257776049 +733 492 -.5837551674151187 +743 492 -.5962294251725382 +745 492 -1.5358795892666388 +752 492 .16538022017779075 +786 492 -2.0454986842869807 +796 492 -.9265464735107497 +801 492 -.75841533107734 +806 492 -.880138430567182 +826 492 2.5058967272400308 +833 492 -.1242951338178811 +847 492 -.384006060114295 +855 492 -.39166753718336267 +867 492 .3142206053908997 +872 492 -.02722418946309005 +876 492 -1.026919277366188 +886 492 -.36561043221810224 +898 492 1.2240891294035143 +901 492 -.23362625735798315 +931 492 .792997888084367 +953 492 .349780079672558 +967 492 -.09924316123990523 +989 492 -.5286662966331773 +24 493 -.778253545270933 +39 493 -.08683904066631154 +48 493 .9638136195759429 +70 493 .38959467610924836 +123 493 .3258839503577661 +130 493 -.2103923616118233 +137 493 .7794048575740831 +144 493 1.0144076727525955 +181 493 .6580377376607126 +184 493 .05785039418911263 +193 493 .755245342566407 +196 493 -.28636961995385657 +216 493 .4303254072267587 +222 493 .11363629503919011 +228 493 -.4573017967086155 +233 493 -.45421451171927807 +234 493 .14418918551401008 +246 493 .5358324296820488 +266 493 -.23981584736599593 +271 493 .20359191970651627 +272 493 .4480204770373569 +279 493 .22918746488274264 +287 493 -.8701146413876828 +322 493 .12480204212453172 +323 493 1.1756824136874662 +325 493 .05915824220534582 +327 493 -.8666713642128435 +352 493 -1.259371264951486 +361 493 -.08505947663894892 +363 493 -1.0470114894282214 +364 493 -.8787176291406413 +372 493 1.3422458802532922 +384 493 .4514614294527021 +398 493 -.013404417716447202 +403 493 -.13138066805533583 +406 493 -.6621615855607069 +420 493 -1.1214428512304024 +449 493 -.23504139294552806 +456 493 .0525194223558518 +466 493 -.7945970992215317 +471 493 .006592577118996204 +497 493 .5053317383757265 +501 493 .7714332008962861 +508 493 -.6848941143957616 +531 493 -1.506839489286936 +543 493 -1.532721909203783 +546 493 .38659396526738277 +571 493 -.7051881559400393 +575 493 1.4915935360083195 +588 493 -1.015814292573825 +603 493 -.8946393599489476 +612 493 .25519873160321904 +614 493 .0024357891860306118 +615 493 -.29140596523506346 +616 493 .3246756932373383 +629 493 1.0183770357429776 +631 493 .24284147250862323 +639 493 -.5034348269972179 +640 493 .3023946088959685 +647 493 -.07644804411534348 +654 493 -.8580261117308761 +661 493 2.3172648132827742 +662 493 .6506731247516069 +670 493 -.32020931696883026 +676 493 1.8835966128051393 +681 493 .1400423669826207 +688 493 .22432311226839655 +697 493 -.6456717451058462 +698 493 .748426678171054 +703 493 -.21791113183408206 +710 493 -.6690668026387838 +715 493 -1.0079538110883752 +718 493 .422298417911102 +719 493 -.494006663906215 +744 493 -.5303784297739643 +745 493 .3491022735635574 +752 493 -.03348612267639563 +756 493 1.628063124544265 +767 493 -.08398490475851977 +773 493 -1.2696162377554665 +774 493 -.15503655551197543 +779 493 -.46840044184243734 +808 493 -.20737285007306602 +834 493 .10009590383379727 +842 493 .4443789027629409 +844 493 -1.322334944677749 +848 493 -1.5514757650772752 +853 493 1.0453939697742962 +872 493 .1573851520083516 +885 493 .20966721152200601 +897 493 .955065253502245 +919 493 -.43958506217692767 +929 493 -.25338266756783867 +935 493 -.8861619904972995 +951 493 -1.0004289003594353 +954 493 .40148934970829103 +965 493 -.4806419385216055 +979 493 .14671574058882236 +986 493 -.7153189947674222 +998 493 .38125810304871927 +999 493 -.40610973548310947 +4 494 -.005494280171348176 +26 494 -.43488435171100315 +40 494 .8121351914865553 +52 494 .502749900761971 +61 494 -.045041668134742446 +67 494 -.677113307405001 +74 494 .167737562394835 +78 494 -1.427547205232972 +92 494 1.9526185308946098 +93 494 1.4300731053102476 +113 494 -.1611611136394613 +124 494 .7461234354766776 +153 494 -.5592379453367856 +157 494 -1.4597728278230435 +177 494 -1.1430457335195405 +196 494 .07515285148763597 +206 494 -.13345130825576212 +209 494 1.4988304807765551 +210 494 -.8889984123154073 +243 494 -.2645904697635426 +245 494 -.2923462369805175 +267 494 -.42737820275462696 +272 494 1.3363054496275646 +273 494 1.758646512051914 +285 494 .42489081375087384 +303 494 .6170697605627995 +304 494 .3420509604091593 +308 494 .2566650516327871 +315 494 -.06888295828903537 +317 494 -.20542141377998233 +334 494 -.8999798359291149 +352 494 .4601586894270917 +357 494 1.5482475796249626 +358 494 -.6734747985056893 +370 494 .2530574686917728 +373 494 -1.006906624440564 +377 494 .06546972998032105 +387 494 -.12803119328746898 +393 494 -.26532010054817934 +425 494 .7371824144391207 +452 494 .7942887581701442 +455 494 -.8600037415851989 +472 494 -.04283154365899096 +487 494 -1.401402314343173 +500 494 -.6412424435040321 +505 494 2.1086488649077144 +518 494 .0011655751922821263 +522 494 .7915706326060132 +523 494 .7511634086622283 +530 494 -.6277138895053999 +542 494 .7657744458572457 +569 494 .27697017979108174 +574 494 .06670039288995261 +583 494 -.4140063334656096 +610 494 -1.8028549060942385 +618 494 -.9247825543882613 +622 494 -.7315539695368447 +643 494 .5034188907317929 +646 494 -1.2720591784595603 +651 494 1.6326759604460204 +677 494 -.9120666587806479 +688 494 -.10227249515843867 +712 494 -.29234663679155876 +716 494 .3690690051792169 +725 494 .5563575139027203 +739 494 .2369553265868125 +749 494 .6860729608285544 +756 494 -1.5696871044672247 +779 494 2.0130309750233493 +784 494 -.07591341396350093 +793 494 -.20257410043068508 +815 494 .5090138501117886 +846 494 -.37396085098035253 +869 494 1.0190994326931118 +876 494 -.14910303985667958 +880 494 -.8382768789911184 +885 494 .6533728389019696 +913 494 -1.7541656746053749 +920 494 .5422838205405178 +922 494 -.08809788337622138 +924 494 -1.2086865845230637 +946 494 1.4236062134470513 +979 494 -.5964075661670803 +986 494 1.0947994426542353 +1000 494 .31368556154851485 +2 495 -1.23485793112002 +32 495 -.06034971952722598 +42 495 1.3342813472570616 +45 495 1.2261425208875194 +47 495 -.7291262484065069 +50 495 -.39487577060806034 +55 495 .13181854784367986 +64 495 -.005503064983780295 +68 495 .22983789991588063 +71 495 -.5089722079327758 +77 495 -.0357425716328815 +111 495 .05585723219877664 +112 495 -1.7479759510192103 +119 495 -.7325370746225511 +125 495 -1.8885189853576094 +128 495 -1.4531481763415388 +129 495 .12379880538970936 +131 495 -1.2004666303625169 +133 495 .6214748727195045 +168 495 .06835053853548262 +174 495 -.5835660022622974 +190 495 -1.5240665353739156 +191 495 .35279845031231555 +209 495 .12063592900308494 +218 495 .3610463111120831 +222 495 1.8978936537869036 +228 495 -1.307461217308481 +237 495 -1.1283582046426248 +239 495 4.698851753408784 +267 495 -.6300412238373484 +280 495 -.6913000205860211 +285 495 -.9669682229993191 +292 495 1.1076489662969546 +297 495 .12087666056604986 +307 495 .5466641859425325 +317 495 -.5240035742693104 +319 495 -.6382784648678111 +330 495 -1.0351018954236764 +333 495 2.559962224772909 +353 495 -2.000191752445745 +355 495 -.6024143364019234 +370 495 .09461490023487126 +377 495 .6676965027910658 +378 495 -.9169599796133276 +401 495 .6596402308643066 +405 495 -.30799440008647516 +415 495 -.11561524571302276 +420 495 1.1733199617360495 +423 495 .5697311836074261 +432 495 .763476524347561 +466 495 .1531310020270037 +467 495 1.7009634690034208 +473 495 -3.160682186208769 +485 495 .3336145957340761 +501 495 .6615390388561417 +511 495 .1899230823050467 +520 495 -2.9393050300117847 +536 495 1.263472728861754 +571 495 -.14521969846193278 +578 495 .35977848859125516 +588 495 -1.3472095417216277 +591 495 -1.3562587707822062 +592 495 .5780266784282772 +595 495 3.7169628556581844 +615 495 .8426577702828237 +620 495 -.3757006126608948 +621 495 1.22374159353625 +627 495 -.6220542632982389 +658 495 -1.4139482111292923 +689 495 1.1183976665606372 +696 495 -.682200015334143 +704 495 -2.2339154551327804 +714 495 1.4482019313067167 +727 495 .14240490619624907 +732 495 .10003169626133648 +736 495 -1.5358614364903878 +745 495 -1.263713626862939 +746 495 .33084510574914844 +757 495 .736252152033475 +772 495 2.1509184777225587 +774 495 .08466783606857928 +793 495 -2.112178216759355 +797 495 .7864375692341651 +803 495 1.0236123916621374 +817 495 -1.9899938892477282 +823 495 -1.2362012514250833 +866 495 -1.4237677723001934 +868 495 1.1838849492408035 +888 495 -.6534004739220278 +895 495 -1.1193150970643226 +897 495 1.4390985705996377 +912 495 1.2646095237085249 +915 495 -.6589895725356727 +920 495 .7015471659754007 +921 495 -.9950116045111898 +922 495 .1387346576226303 +930 495 .8401224148594109 +940 495 1.629243054508442 +943 495 -1.3723731000729364 +953 495 1.9281679671048055 +971 495 1.7690109002811514 +975 495 .5128371252828194 +976 495 -.8077898692268922 +988 495 -3.2545738444402836 +991 495 -1.7812845966381703 +994 495 -2.470787404731998 +997 495 1.46483484546966 +3 496 -1.0557648515670426 +15 496 -1.5240299571614782 +16 496 .8376042420758026 +29 496 -1.8894247089926295 +35 496 .7206190692567378 +41 496 .6306777135210808 +42 496 -.35164797190720454 +67 496 2.9958429814434977 +69 496 .1416038138831414 +87 496 -1.939656746311147 +106 496 -.6359698539541834 +114 496 .0027554171868034993 +117 496 1.2177706641583896 +148 496 .7230907514812971 +152 496 -.6072557198413282 +169 496 .5768690434051461 +178 496 1.6682622277857895 +189 496 -3.233414659924321 +201 496 -2.115270607019072 +205 496 -.5383732750050259 +214 496 -1.2402566132934123 +221 496 -.21699743069953323 +229 496 2.363000825303403 +246 496 -1.536282916127244 +254 496 -1.9102495129750041 +267 496 1.9809466931843172 +274 496 -.032054511802581544 +282 496 -1.6521761119574259 +285 496 -.8366252202255515 +286 496 2.76141912086041 +319 496 -1.8143654816598733 +340 496 -1.5103037719975716 +348 496 -.4185948702846773 +349 496 -1.2167901615485635 +351 496 -1.9262452536046275 +372 496 -.6767785046202262 +374 496 -2.0944467400662092 +381 496 -.17161449287216923 +398 496 -1.1203873277398677 +401 496 -2.5592124489545145 +413 496 3.062458587212558 +421 496 .8329177226727004 +437 496 -1.8893954532416521 +465 496 -.2762479150681857 +473 496 .8036675511008355 +476 496 1.6549230638536474 +478 496 -.026504420692545598 +483 496 1.110401403702061 +529 496 .16010066117741123 +531 496 -.8109690824993997 +548 496 -.5635402479023157 +554 496 -1.3155028526455905 +594 496 1.5256164901645528 +597 496 .39332973946880534 +599 496 1.3697442082193079 +606 496 -.5568879550037962 +609 496 -.6153053472860063 +613 496 -.8725968378714047 +629 496 -2.1682197088487567 +634 496 .24418792364763214 +635 496 -.8826830396117954 +639 496 2.1794132776616046 +640 496 .012189372215157243 +642 496 -.1398126007497585 +649 496 1.129606197610264 +654 496 -2.42805332700944 +655 496 .28678723589381033 +659 496 .6160784930595872 +662 496 .5430130082485095 +664 496 .9547218413231933 +689 496 -.16679560793382775 +704 496 .35643386060755067 +708 496 -.8954885284979385 +714 496 -2.0757821780195207 +733 496 2.51185476638743 +747 496 -1.635664755388806 +750 496 -1.0266397968320669 +757 496 1.1648241250828053 +776 496 -1.4232273221330558 +777 496 -1.4717741567725626 +821 496 -.19018502665304543 +823 496 .40702603474132526 +839 496 .682463713895521 +843 496 1.8073884549746788 +847 496 -.8973689452455229 +850 496 .08558451374186382 +852 496 -.3432749731066681 +855 496 3.213435659185773 +863 496 .39344220453347345 +875 496 2.2006745292069065 +911 496 -2.5943453027658907 +916 496 -.6322122043242889 +923 496 -1.192450190560844 +925 496 -1.443613319854504 +927 496 -3.2113232924377026 +932 496 -3.2673308480375898 +950 496 -.8990602522198248 +952 496 .04873514507383209 +954 496 -1.2663052265370016 +972 496 .5526692459406272 +982 496 .22604912762024088 +990 496 1.13284868743648 +5 497 -2.039662760479757 +10 497 .0819481365243114 +14 497 .2864126458888503 +20 497 .5994107658242251 +35 497 1.2890705777153617 +36 497 -.02133624379527908 +44 497 -.4111650951145933 +50 497 .48070713354853545 +71 497 -.1359281131665145 +73 497 .2508066201557095 +84 497 .8573464420778938 +90 497 -.27074336498978074 +117 497 1.7729941586299254 +125 497 -1.2293660188188125 +128 497 -2.0856393599398952 +133 497 -1.3081952716830174 +141 497 1.9331678798888952 +164 497 1.9555333478284749 +167 497 2.4622265553866964 +189 497 -.592045623413693 +195 497 .5094710004258176 +205 497 1.3642512960545474 +209 497 1.5594379712985196 +218 497 .990985204107276 +232 497 .9208427837349544 +237 497 1.0516746832970179 +257 497 .9602018145340027 +259 497 .5514986941289263 +263 497 -.5498770538293554 +306 497 1.2704838110883407 +319 497 .29126543523207393 +329 497 -1.6010410063433926 +352 497 .03590564322366163 +353 497 -.15964830061058413 +358 497 -1.6964529473627186 +362 497 -2.5731243253922904 +363 497 -.9655985522512279 +370 497 1.3769361381148788 +372 497 .23178018922501248 +391 497 3.3246068860192572 +395 497 .3610082866230876 +397 497 .8827873149243324 +411 497 2.000430212940115 +417 497 .265832541833543 +435 497 -1.0628977915895426 +452 497 .24164519810348167 +476 497 -1.5796126880154748 +479 497 .06247995862715585 +480 497 -.18017176243868963 +488 497 1.5993230663405118 +490 497 .6727990812213619 +506 497 1.0106693514177203 +518 497 1.868525532330218 +519 497 -1.0210579536753221 +537 497 1.213393752983699 +542 497 .48116380617053306 +543 497 .2618141026330119 +582 497 -.8128970850400087 +597 497 -.8902655800452741 +599 497 -3.2158133528497297 +612 497 -1.1169462448274439 +613 497 -1.1065343880411 +615 497 -1.0875783917492368 +625 497 1.1739123009434387 +627 497 -2.2288145667734507 +628 497 .20890407246852546 +645 497 1.339206984342934 +653 497 -1.3975262743001888 +662 497 -.755878691562729 +663 497 -.5016220515939177 +665 497 -1.3882018571085557 +675 497 .6522722027819803 +682 497 .3401352340137863 +690 497 -1.044690780233565 +698 497 -1.151549322688664 +710 497 -.8241998960542094 +719 497 .23363253618520305 +726 497 1.1352473617333132 +729 497 .3531097925094162 +741 497 -.28810471021516115 +750 497 -1.389500627219884 +755 497 -.4415953370770379 +756 497 -2.772225063707699 +766 497 -1.9047908091279768 +767 497 .2646323406506069 +773 497 -.5507867878733458 +787 497 1.0490477213607792 +788 497 -.8993796946189161 +789 497 1.682173116254641 +800 497 -1.6226702267648225 +802 497 -2.2280692330587737 +806 497 -1.0409553859135672 +813 497 2.171386347207638 +838 497 -.8196506006547085 +856 497 -1.01002667613142 +869 497 2.609528068138402 +872 497 1.7817205146754844 +882 497 .1685726370621721 +894 497 .5650719169594605 +912 497 -1.4455601473671418 +918 497 -1.3648131035165074 +922 497 -.3723031432302715 +934 497 -.01735652207178834 +940 497 -.5017744481227022 +945 497 -1.3179709554587737 +948 497 .1334050417572081 +956 497 1.8960944144612812 +973 497 1.026449391848453 +977 497 .3411647754890386 +994 497 -.6793209957877953 +995 497 -2.5854264191856937 +6 498 -.7156945838157249 +7 498 .1772837356213764 +15 498 1.1918017899322897 +18 498 1.21812041231684 +19 498 .40854367899054367 +21 498 -.5359369315935805 +22 498 -.2955496961951326 +27 498 1.1093193549137232 +51 498 .18503092868168294 +52 498 .4712161175545553 +58 498 -.07578553533985322 +62 498 -1.1048630653799747 +63 498 .40076530416379885 +64 498 -.953858889416957 +72 498 -.03409593473871167 +77 498 2.1188683020368377 +83 498 .5837788912833055 +92 498 1.1190712736523483 +114 498 -.6015516586208147 +132 498 -.09087942205002597 +139 498 .19361223478075254 +143 498 -.7001455953580152 +145 498 .8452150155299466 +162 498 -.6127526126544941 +166 498 1.252960197530211 +171 498 -1.1322582309995297 +175 498 -.2581273315106248 +189 498 -1.2940468105288834 +193 498 1.006344120937649 +201 498 .6571942460409492 +210 498 -1.1938939901882986 +226 498 1.553586179465978 +245 498 -.19758819938359454 +252 498 .2945013660479851 +254 498 -.4796437215500111 +258 498 1.214494337350407 +261 498 .19331846483308107 +263 498 -.11896546507153015 +265 498 1.0606888571385678 +275 498 .3900042443947732 +276 498 .6240379021701578 +277 498 -.5821798642238087 +278 498 -.32934152991532895 +284 498 -1.201500628827141 +293 498 .5257302633242464 +302 498 -.8833986007278247 +315 498 .19930964392527029 +328 498 -.9335600981979159 +329 498 .19772911911963778 +333 498 -1.6609898275557742 +340 498 .037502556318086834 +351 498 -.9757734274717831 +355 498 -1.126310778282476 +357 498 1.1266796581262946 +375 498 .13500619170729128 +402 498 .532554693563639 +403 498 -.5829312576712794 +407 498 .4466890627916603 +417 498 1.8930873613647101 +419 498 -.1033387931376761 +459 498 .6669187554756563 +490 498 -.5150705554938522 +502 498 -.46255787777015916 +514 498 -.5390523064439632 +515 498 .8257724858984045 +516 498 -.38603920331690117 +526 498 -1.2037700890922818 +527 498 -.4933541991973017 +532 498 .09206537436588466 +537 498 .6813208014852721 +549 498 .033498889178168074 +565 498 1.0318249807709532 +610 498 -1.5795616051070989 +619 498 -.46392125796120876 +623 498 .6610476365322091 +625 498 .34771026423995827 +644 498 -.04945228406181807 +671 498 -1.1663542326217566 +694 498 .3862391746081612 +696 498 1.3173515654876657 +704 498 1.5229428592370104 +709 498 .2578753672338634 +711 498 .7424794333096124 +723 498 -.4754223277018502 +729 498 -.22502282441807586 +731 498 -.48254184451555626 +736 498 1.038909669139757 +741 498 -.08991827130943172 +744 498 .3223733992476443 +750 498 .11939757477931505 +760 498 .8118827776894377 +763 498 -.2795518803021449 +780 498 -.8178198900861712 +797 498 -1.746921144993395 +798 498 -.06732263621223819 +804 498 .11228493478790837 +807 498 -.38777780496488057 +828 498 .49192130445392934 +842 498 -.864324175367823 +843 498 1.9423468602569032 +852 498 -.7290852606653295 +857 498 -.3320581656382493 +862 498 1.8296382262044375 +879 498 .3205209546536678 +887 498 -.2790873481708684 +907 498 -1.4600793771956693 +922 498 1.1347261913402862 +932 498 -.2986268589515168 +933 498 -1.0793606252466952 +942 498 .09098529124849762 +946 498 .8913454157485764 +949 498 -.34198984881761674 +962 498 -1.060819883734179 +976 498 -.13594630654256556 +993 498 -.901741903641013 +996 498 .18849807629111986 +1 499 1.4694385410601911 +9 499 1.0860852510976153 +11 499 1.935388955259749 +23 499 2.9379827615131178 +26 499 .17148752430032893 +34 499 -.4488573019332053 +36 499 -.7190893387839918 +37 499 -1.1271348976986026 +41 499 .3365566061548225 +42 499 -1.1461971392263148 +43 499 2.2384901790621825 +63 499 -.19158900027923942 +69 499 -.8198744309244228 +82 499 -.6015801216289283 +84 499 .1417947483564161 +102 499 1.0173758385325402 +125 499 -.1820816499778765 +131 499 .04671575430738925 +139 499 1.394519663170904 +148 499 -.7536723212680876 +156 499 .18343576914794338 +171 499 -3.515339298734623 +181 499 -2.8543021128703376 +202 499 -1.6712031377058165 +209 499 -.13818653632643974 +216 499 -1.2636636505976662 +219 499 .5227038925288864 +222 499 .7047344408128262 +223 499 -1.5065465831187712 +224 499 -1.330152835621709 +229 499 -2.321984580062175 +242 499 1.7040107466438275 +276 499 1.0926655860091656 +290 499 .5608338252545713 +291 499 -1.7018000502357373 +296 499 .8203923392386793 +302 499 2.3338833010622513 +308 499 -.9893189877870604 +310 499 -1.2292649141689667 +315 499 -2.1210224357004863 +324 499 -.7267955397210789 +331 499 -1.4921383069426495 +350 499 -.32986305818001804 +367 499 -1.8587840763033534 +373 499 -3.1639743733594208 +380 499 .9114856071282214 +388 499 4.066102671490628 +409 499 1.9576306892547999 +413 499 -.42361104199863403 +426 499 -.24105967050748983 +434 499 1.063167827954435 +445 499 2.972340810897145 +446 499 -1.2601503752045449 +455 499 -.7488217316641405 +474 499 1.4967929167290595 +479 499 -1.1562251109859463 +494 499 -1.3399557790558783 +506 499 -2.4971711849590004 +513 499 -2.109671154541964 +520 499 -.6075613915520893 +565 499 -.47667278318872425 +569 499 -1.5093255203624345 +602 499 1.5054744057389666 +606 499 .11293355746586989 +627 499 .03544588333667392 +628 499 -.3227401863065058 +629 499 1.032149856499039 +634 499 3.0443165346250796 +646 499 -1.3846519497198957 +658 499 -.3983245903060163 +663 499 1.733108284712129 +694 499 -2.5157573602243635 +695 499 .19363251240129667 +715 499 2.1283116820941106 +720 499 -.516496019028009 +723 499 -3.641821871239038 +743 499 -.20040366515951738 +760 499 1.6457425902659633 +761 499 -1.4945324204145765 +770 499 1.2145689942576487 +778 499 .29036206234108886 +785 499 -.2555738256969448 +789 499 -1.8200539238147755 +793 499 -.9843132806046598 +795 499 -1.658076553471918 +804 499 .7670071731685921 +812 499 2.5674760796322613 +813 499 1.336056391563464 +815 499 -2.668430289873441 +816 499 1.8390160405030573 +823 499 1.4895647689702125 +831 499 -2.737519686673147 +837 499 -2.4181806065213274 +842 499 1.0723879956249633 +856 499 -1.722927082804884 +858 499 -1.8853153261591853 +859 499 1.0523479420216293 +864 499 1.902307161172059 +872 499 -.36340287846004393 +885 499 -3.157373658140943 +899 499 .1204899747072534 +909 499 -1.3893737959021952 +941 499 -.38671156393193923 +944 499 -.22844026460960945 +950 499 1.675253400905711 +962 499 -2.910925521871596 +963 499 2.244192564165271 +978 499 .8537059450086325 +996 499 .7497804408311883 +18 500 -1.5764978231027784 +20 500 .852070446997184 +27 500 -.7098888022537226 +31 500 -.5250831097350354 +32 500 .29113273430610087 +34 500 -.9211736909793027 +38 500 .32221571585336656 +55 500 .3319744124242852 +58 500 -.8437293146379459 +59 500 -1.3686711699165501 +65 500 -.1730333653034714 +79 500 -.5779736658055846 +96 500 .3287903451442938 +98 500 -.28375639023253163 +103 500 -.13276302998037393 +105 500 -.007778613162020789 +106 500 -.28781229889167215 +118 500 .38185539156532866 +119 500 -.34812330129474656 +124 500 -.12816407327066376 +135 500 .07529971005151506 +153 500 .9255956016797465 +155 500 -.81972462667966 +160 500 .28530148649397263 +162 500 1.852915929299985 +173 500 -.15823279026749393 +180 500 -.5974437963492814 +181 500 .20136738559338407 +185 500 .08203816638899017 +196 500 -.05006830600848672 +208 500 -.24502935009960414 +220 500 .7329793863500264 +223 500 -.03946995170989581 +238 500 .9822935401027659 +242 500 -.4313051910647983 +249 500 .17707565867451014 +265 500 -1.1684904747533769 +275 500 -.3498536191513002 +298 500 .13220674951231393 +318 500 -.9158930467519004 +321 500 -.667239551655858 +323 500 -1.10342422253173 +327 500 .5518939278628145 +331 500 -.2277070588435224 +340 500 .10761716544463125 +353 500 .8927468613744585 +362 500 -.08659793135193412 +379 500 -.8579972709882862 +380 500 .15945305025120204 +409 500 -.03408465577098202 +415 500 -.07935922804449054 +418 500 .10449056941908424 +419 500 -.8639172996627786 +434 500 -.3251502423682121 +435 500 -.6775222838989445 +437 500 .08772237958001611 +448 500 -.06085557005129638 +464 500 .09054966159614711 +465 500 .45650306651986317 +469 500 -.3570119330639415 +480 500 -.15639262083446664 +482 500 .30701749159080727 +483 500 -.5670097647485405 +502 500 -.3926079569365973 +512 500 .635175711914342 +513 500 1.327474678757404 +535 500 -1.0905160462219134 +536 500 .7789314663294274 +541 500 -.2445709134091033 +553 500 -.7683878068744942 +554 500 .955392852977362 +565 500 -.5470549998857225 +572 500 .006616801983586967 +574 500 -.16810467153783515 +575 500 -.20006035966845073 +612 500 -.2554827571228816 +641 500 .3306971155798438 +648 500 .004998702720450596 +668 500 -.08460964814118413 +680 500 -1.2018433611692876 +693 500 .28147831221818864 +698 500 -.5385222890008359 +710 500 -.7683614054376661 +712 500 .1781064366277956 +718 500 .34351132116903993 +753 500 -.33088684317831735 +757 500 -.2391232756548088 +775 500 -.1180828610007341 +776 500 .37317395071766835 +789 500 -.4536517684088359 +805 500 .9879437940406786 +808 500 .35212346148480883 +848 500 .3895920327149825 +863 500 -.710828479926789 +864 500 1.4167940212579861 +892 500 .8415016882181123 +895 500 .721566191006256 +899 500 -.02775067480709506 +902 500 -.1564673272844131 +916 500 .24917020768078166 +920 500 -.08368011530340594 +928 500 .8791573789618088 +943 500 -1.562082410589362 +956 500 .023517039168781947 +4 501 -.009796054826874189 +14 501 -.3428805004361465 +34 501 -.10260315446240914 +38 501 -1.1112391022172319 +54 501 .06810461783454799 +59 501 2.466000015618506 +64 501 .5809579449385952 +76 501 .9733291018228664 +85 501 2.14493842563564 +89 501 1.0154265399885565 +92 501 -.6528582628764574 +93 501 -1.0400789489092555 +98 501 1.095492663676136 +104 501 -1.0230379770490663 +126 501 .06937940962181173 +132 501 1.8564410448537627 +141 501 -1.356025318447238 +167 501 -.336915982922847 +170 501 .789669188587093 +175 501 -1.505880701078358 +176 501 -.4291893612125344 +181 501 .299980733830519 +194 501 1.6134869117966213 +238 501 -.5519514395200535 +272 501 -.9596810847496008 +321 501 .44397420218308087 +332 501 .29722035515833983 +336 501 -1.5275821163754688 +361 501 -.6872210792175096 +369 501 -.38888760654555976 +377 501 -.30030127012900365 +391 501 .23725803880878543 +392 501 .9786016866884083 +394 501 1.101376500072853 +395 501 -1.008556131140533 +412 501 1.385723106232187 +413 501 1.8961242241244227 +427 501 -1.2733193664845124 +435 501 -.8165583656197744 +440 501 1.8435401212219824 +441 501 -2.9141541075490767 +444 501 -.0979512994403112 +454 501 1.1075892567748593 +459 501 .8846623318391931 +480 501 .5373967070190281 +486 501 1.4684735588566202 +490 501 -.29075561921211707 +493 501 1.2532470991744349 +531 501 -.25082509453293034 +540 501 -.3035477805400583 +553 501 .8458463923275695 +571 501 -.9785473098892348 +575 501 -1.211327756046522 +582 501 1.1079795305118716 +602 501 -.8819636243322336 +604 501 .6471287311384344 +607 501 -1.2168773967650908 +608 501 .3819173613734538 +624 501 -.14588165692130306 +628 501 .009945143733216893 +648 501 .2740141028934019 +671 501 2.023585991380463 +681 501 -1.5548521670550262 +689 501 -.5887145027021026 +697 501 -.11229168895883677 +705 501 1.0359051230451952 +712 501 2.422558439100901 +733 501 .37141046233880853 +742 501 .8684871934589837 +759 501 .12846776990353842 +780 501 .3293849554473958 +782 501 -.6715663866123787 +795 501 .39745251464398124 +798 501 -.7818795711135567 +802 501 -.7615213271081297 +826 501 .27500847630356173 +827 501 -1.0953254401353583 +834 501 .041056140720401896 +835 501 -1.4101820457972547 +850 501 1.157969763123958 +868 501 -.6380680140740491 +877 501 .6553719865896428 +881 501 -.521050420001744 +898 501 1.0958013838192744 +908 501 -.6406834032345001 +927 501 -.04840499278293847 +928 501 -.966605326715677 +934 501 .8812899287334856 +938 501 1.5996181357262835 +945 501 -.3815204637436477 +946 501 -.33849142106367386 +947 501 -2.536092295063332 +957 501 -1.5317685622295543 +970 501 -.9550082708172501 +992 501 -1.035382174516434 +999 501 -.5571572543713614 +14 502 -.25511191991889537 +19 502 -1.0059785653855582 +20 502 -.14867745505834856 +26 502 .20516034495810082 +28 502 .689030782076329 +42 502 .7270665544093221 +54 502 1.6195326159954067 +56 502 .5041432961799696 +67 502 -.9796078021786997 +93 502 .832484868499695 +94 502 1.100091986819251 +113 502 .07756872782101946 +137 502 -1.0107865776398028 +154 502 -.1890356031614461 +166 502 1.2533616113397446 +183 502 .7058475066812842 +193 502 .11381938983855491 +200 502 .9124245983503171 +204 502 -.8760650081588718 +211 502 -.1213243264622641 +217 502 .22407294584303253 +236 502 .4638764837038628 +244 502 .31999963625804656 +250 502 .20884559846778064 +253 502 .15734473818370004 +256 502 -.2848329919364506 +260 502 .32730085325420727 +265 502 -.3579905980576311 +274 502 -.14533310979111186 +276 502 .12687536787223555 +288 502 -.6861292397536121 +292 502 .7936991431999081 +294 502 -.46138853834297483 +295 502 .3876210526611326 +303 502 -.9616762612317059 +323 502 -.7836020582660916 +329 502 -.19831690917014 +337 502 -.7302182496744113 +347 502 -.3094697020733038 +367 502 .5079457473579361 +368 502 -.08339243561895811 +373 502 -.8388169912971594 +380 502 -.3911284743320713 +384 502 .05890816793429407 +401 502 -.9095687075947041 +404 502 -.6625716794292421 +428 502 -.4331619906550523 +439 502 -.45322078910505226 +453 502 .22252137830535065 +454 502 .5250476407960587 +457 502 -1.4965123796141637 +460 502 -.239902263305431 +467 502 .0295823254787006 +497 502 -.27017228646980357 +501 502 .748735752453906 +506 502 -.6870732156446298 +539 502 .5729873809081233 +541 502 .4551780696353519 +558 502 -.10165745202214713 +564 502 .7308754694683893 +565 502 .023243387577818443 +599 502 -.0710135915140834 +633 502 -.021978508964938942 +635 502 -.7050339497982252 +658 502 .5200517306862412 +670 502 .09347163447937108 +712 502 1.1569159680589738 +714 502 -.17956601257597382 +720 502 .34474237632105303 +725 502 1.0646941326558614 +726 502 -.2093699610688019 +730 502 -.19400905973308893 +738 502 .3952683912965875 +751 502 .2301103865175082 +754 502 -.06429990822124591 +759 502 .11615180422295272 +782 502 .14472106225405384 +810 502 .6895484130049352 +813 502 -.03520256860810197 +854 502 -.20925996260059565 +878 502 .3631092070215679 +900 502 .18904031473171634 +904 502 -.21205992271073723 +916 502 -.24853134178015612 +921 502 .3524314565794782 +923 502 .058820841460956196 +945 502 .817340658472369 +969 502 -.30392943704612807 +1 503 -.964013130263015 +2 503 .8714042008988157 +10 503 .049658400045192556 +15 503 -.5765001005649149 +21 503 1.3269084486669664 +22 503 .5504839212811604 +26 503 .557966494503439 +33 503 1.2686682413959889 +43 503 .255676844975286 +65 503 .1847811039117138 +68 503 -.17941178328043306 +81 503 .13022685423191974 +87 503 1.8702090254943493 +96 503 -.5199390362921836 +102 503 .054601720846891084 +120 503 1.8659417185640281 +131 503 .174941821540029 +138 503 1.1629498719030722 +146 503 -1.155016756844629 +156 503 -.6210526365950219 +162 503 -1.0321319359618584 +167 503 .6936571041662399 +168 503 .5724007130191031 +187 503 .4481201730088656 +191 503 -.6754783779204047 +200 503 1.8192337667405583 +206 503 1.373974466227138 +219 503 1.3687787535727298 +224 503 .30654167834087276 +225 503 .14116553081022096 +233 503 2.7321258092907907 +241 503 -.37925901325779887 +256 503 -.5333931258222828 +257 503 -.9244976517087429 +272 503 -.32187444617433814 +278 503 .890865591801584 +279 503 1.5061082038115332 +320 503 .5559143514799098 +339 503 1.637616177855379 +354 503 1.1077043214830304 +355 503 1.3686281122513984 +373 503 -1.8661218032042193 +375 503 .9795869311443232 +387 503 -.023162054855595332 +394 503 .9135012681278076 +420 503 -.7125023099712714 +421 503 .9757280358610064 +434 503 .17110781857878782 +447 503 .3923207433498129 +457 503 -1.8588131028168828 +521 503 .40419475596630183 +522 503 -.08996554629946292 +525 503 1.0202654496538905 +529 503 .11817765754949835 +532 503 1.0956287246083969 +555 503 .9782387057923734 +609 503 -3.25865542656583 +612 503 -1.4295658471619406 +618 503 -2.15866297672418 +620 503 .9949640974623393 +624 503 .5412920977490115 +641 503 1.1736426860328892 +653 503 -.026100169756081038 +666 503 -.10540008107633264 +675 503 -.04522028460924954 +698 503 -1.060855003207098 +700 503 .7748650993855141 +701 503 1.1450139869488762 +705 503 .7532165291380458 +710 503 -.7722026664242936 +713 503 -.7684907972177685 +719 503 -1.456413348357037 +721 503 -.27006671748861155 +728 503 2.1931541518092548 +734 503 -.9152886707203849 +736 503 1.4609434794572915 +746 503 .37082175120098315 +779 503 1.1834181943020368 +781 503 -.08780137579107541 +782 503 .08541549381161151 +793 503 -.9099999739929825 +799 503 -2.0623742554586064 +814 503 -.33052451337279093 +815 503 1.4616932367081916 +824 503 -1.1690442836719104 +835 503 .444080247326187 +845 503 1.180321461232624 +854 503 -.4900886639372577 +871 503 -.6222858080159778 +890 503 .7785568529550133 +894 503 .5453575660915115 +914 503 -1.6077375488412462 +916 503 -.15680441138829818 +918 503 .2932147185592589 +929 503 2.217173361049587 +933 503 1.9995904729945584 +972 503 -.3493314359771258 +974 503 1.2490765589851536 +979 503 -1.1150623789782186 +980 503 .48378262872177275 +990 503 -3.037997589197872 +991 503 -.3583478251249162 +998 503 -2.6527902600137914 +1000 503 .035062968836545944 +3 504 -.5674194297677579 +7 504 -.4321599797522687 +10 504 .5089983851452047 +19 504 -.1156545828884097 +20 504 .30187447612166163 +42 504 .39874794421342225 +43 504 -1.1343580210132471 +46 504 .48018292846367966 +51 504 -.08453601676990669 +58 504 1.0958427515006859 +64 504 1.0489231726020223 +68 504 .3714334586173481 +72 504 .2418887844231965 +91 504 .14340291032893412 +93 504 -.3432191292512683 +114 504 .06266250154760614 +120 504 .9319278643019852 +121 504 .14997056911759835 +138 504 .5013775696594799 +149 504 .138558285529857 +150 504 -.06514895315397817 +152 504 .568721857278897 +160 504 .8930475387093173 +189 504 -.02559278320860553 +211 504 .6070623616446928 +232 504 .2534888584884195 +235 504 .36542655723141976 +240 504 .4098901219427703 +243 504 .7245004952304694 +247 504 .12272580420441209 +248 504 .3197145015323923 +268 504 .11426196319449927 +282 504 -.8724020482465242 +286 504 .862996918834384 +292 504 1.0173850107041373 +309 504 .3751583841297242 +311 504 .05148709117513445 +335 504 .6981093574249936 +355 504 .4624396853791993 +385 504 -.3973493437915154 +392 504 .01640549157063978 +397 504 .20005480012574278 +410 504 .19618422614208364 +416 504 .4627774810354853 +421 504 .6764770293776717 +423 504 .4366371137610119 +432 504 -.26126338530963245 +448 504 -.8406535883375276 +468 504 -.2741573567845002 +497 504 .8724118500758884 +499 504 -.4353474368073363 +512 504 .5405770613861155 +513 504 -.6974158803307756 +517 504 .4967732277808373 +538 504 -.29010892630448454 +555 504 -.08676835317914779 +563 504 -.08929050223423027 +572 504 .15955986611739303 +575 504 -.9843914311717077 +599 504 -.05223617071320871 +603 504 .8796491751942443 +608 504 -.32059021441297914 +609 504 -.13430305229868322 +610 504 .8224140098065122 +623 504 .02683385900495633 +624 504 .381922699570309 +649 504 .6257191994977086 +653 504 -1.476204700069816 +660 504 -.5744930122699707 +665 504 1.52498012582659 +677 504 -.06642789933651404 +692 504 -.6991269151865094 +694 504 .4412032245424076 +702 504 .678350691635798 +731 504 .3879885996152309 +736 504 -.6117297998126794 +744 504 .07472209281065012 +747 504 -.34501150750424764 +751 504 .467776955154033 +765 504 -.14580577156220326 +773 504 -.7713425671188285 +784 504 .44760975009639237 +805 504 .21299056033925784 +807 504 -.40964651621851966 +811 504 -.06111490743006944 +812 504 -.29100342000394364 +822 504 -.664212868334948 +840 504 .26135370829794524 +863 504 .45614643431237456 +874 504 1.0228711804564918 +877 504 .43554759395769727 +915 504 -.15693401396928125 +931 504 .4217361709357216 +941 504 .4134665026772908 +961 504 .430444305119636 +962 504 1.1273400538939375 +967 504 1.4652222519016682 +969 504 .7485244883624796 +972 504 .8135938227767588 +980 504 -.40863554919098444 +992 504 .054973171379000686 +993 504 .22937830927945782 +994 504 -.49266812721132247 +10 505 .8901232582592059 +29 505 .3526569936182683 +33 505 1.1896091819792458 +56 505 .2999468290864824 +79 505 .26866714916232814 +80 505 -.47859009479757925 +88 505 .5431414300942933 +104 505 .5205388903978371 +107 505 -.813900384148471 +129 505 -.6216904776782702 +138 505 -.8236932372239745 +152 505 -.19377299449118235 +160 505 2.219362702162365 +169 505 -.35315755523467496 +170 505 .11756687268722357 +186 505 -1.5322012899323239 +190 505 -.11613731569668342 +195 505 .691777579465023 +198 505 -.7135962775371326 +199 505 -.49289995990980434 +202 505 .4369141350514998 +209 505 -.1482485451717773 +213 505 -.12397898668448148 +228 505 -.11028844347236658 +234 505 -.6224121694714239 +236 505 .17147267909637015 +245 505 -1.1592475741156512 +253 505 .6060514502044396 +256 505 .31060181460376113 +258 505 -.34043417147489513 +265 505 -1.4359858123064182 +269 505 .5875874365075636 +294 505 -1.2560752108796194 +300 505 .38237000592535453 +301 505 -1.958639350178544 +308 505 -.4713537802166732 +334 505 .21670240080177744 +347 505 -.7103369428178943 +362 505 -.37343098702676214 +372 505 .7321165708123409 +383 505 .5691644668907436 +400 505 .0493757252322828 +410 505 1.2178666472859407 +415 505 -.09897519702513026 +416 505 -.7306839798198862 +429 505 -.23505119754070086 +431 505 -.39626312377356454 +437 505 -.12759212335960796 +448 505 -.6659149836181568 +488 505 -.9082262710887534 +516 505 .9215926152602173 +529 505 .21780507402945237 +538 505 -.8976672010334257 +542 505 .30680396452531034 +543 505 -.4587101616250451 +547 505 -.5170665187568796 +554 505 .6727008669749744 +561 505 .12509025381221464 +562 505 -.6971565010847913 +569 505 -.5255403394595859 +572 505 1.3538009158404911 +587 505 .5674840227284217 +590 505 .3067718540403735 +593 505 .5812435876371451 +614 505 -.27605470058710657 +642 505 -1.0501192299986983 +651 505 -.2405051525905166 +662 505 1.26031937494569 +676 505 1.3707110107231448 +683 505 -.8144637382102922 +689 505 -.16826379063612854 +703 505 -.5634036030157781 +711 505 -.0678642323098054 +724 505 .4839048767686678 +731 505 -.6456856743935108 +753 505 -.5378543204954568 +769 505 -1.006968431511806 +783 505 1.0856971540344214 +788 505 1.2471465729967162 +789 505 .8307930795266055 +790 505 -.03830543766096205 +791 505 -.04670127344964105 +798 505 -.3149750309712355 +802 505 -.20700505654695647 +805 505 -.16114947544989985 +808 505 -.46603701266880326 +816 505 -1.068711181426065 +818 505 -.4985036039619834 +834 505 -.41537289574754793 +850 505 1.0241622774018964 +858 505 -.7430498595514573 +885 505 -.32525548633419316 +900 505 .6643875064679259 +916 505 .5595455321435637 +917 505 -.9858031602261784 +948 505 -.2633448785445134 +952 505 .09157161209989359 +957 505 .37843324576318194 +973 505 -1.3869115810466723 +983 505 -.8469250065719496 +986 505 .023369429557605733 +997 505 .6780238038419492 +11 506 -.5280108456367785 +12 506 -.3374109370126581 +14 506 -.7374047222006873 +15 506 .2804710957109592 +16 506 .8450322335083351 +32 506 -.3903623901212343 +51 506 -.28049858142822975 +55 506 .9258644141240178 +56 506 -1.0421136878031352 +59 506 .4401539516884052 +64 506 -1.934655759060897 +69 506 .22870569196845064 +70 506 -.3771283038180105 +72 506 -.1606413290289191 +81 506 .2495877940087117 +92 506 .09594553436605564 +101 506 -1.5923704301439485 +102 506 .5229899234359172 +114 506 -.20097605854808792 +117 506 -.9850243124593755 +129 506 .42941399230671407 +134 506 -.08591634526852454 +159 506 .8328557038666551 +178 506 .05663101281362752 +191 506 -.3739108209649013 +194 506 1.0433245944830678 +217 506 .5383958408140557 +222 506 .5565309900740044 +229 506 -.4711968247943723 +242 506 .07336399451851408 +277 506 -.8013223792176671 +286 506 -.6426183746894126 +291 506 -1.057743745668935 +296 506 -.17801658437083126 +305 506 -.1507606566809564 +322 506 -.08650175815150281 +325 506 .04044547625708737 +349 506 1.893454904630232 +371 506 -1.365750027601089 +381 506 .5095160130982406 +383 506 -.3040389341758064 +387 506 -.05393002194862104 +391 506 -1.3481368178386608 +394 506 -.560570572969861 +406 506 -.28584983552224574 +416 506 -.537014716640239 +420 506 1.0098501082639453 +425 506 -.05221898665147462 +426 506 -.6194136092507697 +429 506 .7717471365010894 +430 506 .2942922242865613 +433 506 -.36097701063959925 +461 506 .9532535091217171 +534 506 .30235908997097616 +576 506 .4125223911850305 +580 506 .5745819783484576 +583 506 .3527227250927605 +597 506 1.0470346672796276 +611 506 -1.0991087542504712 +613 506 .30791826661703897 +615 506 -.283190243681399 +641 506 .037417414700336604 +654 506 1.5483279579390343 +655 506 -1.4111536903198574 +667 506 .726131652679399 +689 506 -.08523356612615571 +705 506 -.9557144174216332 +721 506 .1692282025919058 +729 506 -.035886466524122 +732 506 .02288269072875257 +738 506 .3170627903816555 +742 506 .8074704096945997 +743 506 1.1870852212170957 +750 506 .7855955847170898 +757 506 -1.0308815178203585 +765 506 1.4996865171819926 +778 506 -.11058811936268334 +804 506 .26120050061406735 +807 506 .17427437312467603 +809 506 .6809853766533578 +823 506 -.37016575857968487 +843 506 1.1420231864248243 +851 506 .7146879484381261 +866 506 -.5454440810359362 +884 506 -.569679115313241 +893 506 .2506452550320156 +950 506 .27753871000564373 +951 506 .7153215037387094 +968 506 1.277533186844053 +982 506 .5005978126176546 +986 506 .05804194084442323 +993 506 -.694731901803319 +3 507 .1345116335940866 +8 507 2.0900801077383537 +16 507 -.7601165564019174 +30 507 1.318921893446716 +32 507 -1.0847719673438243 +35 507 .5035597916603606 +40 507 -.3874718109045206 +47 507 .032213484338564455 +55 507 .4522513776642916 +78 507 .4771681910947638 +100 507 -.5678800466328595 +157 507 .1198907002975336 +171 507 -.5173309029936616 +183 507 1.0026077279360301 +204 507 1.466422168537688 +207 507 .4503225475158987 +217 507 1.7714462627258474 +226 507 -2.191973291981749 +227 507 1.9635530254147804 +234 507 .9475460606496549 +260 507 .11003376177830032 +265 507 -.18023519906495705 +290 507 -.31469048484944173 +306 507 .5142912716209207 +314 507 .22104015126371265 +335 507 1.0332958410705326 +338 507 -.7833301125027828 +343 507 .5041796452776051 +347 507 -.7840539032609893 +350 507 .48940295153922947 +354 507 2.5303118007073655 +356 507 -1.0310274444015564 +363 507 .11475655317803823 +369 507 .8734309133990243 +374 507 .7405775528757774 +377 507 .5103739691144787 +379 507 .41231508402609596 +387 507 -.27206446598831663 +391 507 -.5837408493223748 +401 507 -.5451517168459851 +410 507 -1.0033768680073267 +416 507 1.484843503651212 +419 507 .04320388438555546 +422 507 -.2598645727789257 +425 507 -.06210335442156625 +432 507 -.48580416221527256 +435 507 .8315213638178505 +451 507 .46191271118235344 +477 507 -1.1809091423820455 +479 507 .544643515327413 +493 507 -1.5511855382821225 +496 507 -.7886106309703476 +503 507 -.41807593947282473 +507 507 -.3257376392670316 +508 507 .09218510857486076 +516 507 -.417935834209042 +520 507 -.058482414523785886 +535 507 .1299356771506053 +540 507 -.3414089440405351 +550 507 .44260729468947796 +558 507 .4456350745846952 +562 507 -1.6417006383095933 +563 507 .3949689579482726 +577 507 -1.432410399520944 +586 507 .2567936877139381 +587 507 .6925116234329146 +608 507 .4279346005819107 +614 507 1.0242698196235203 +619 507 .12553669143200608 +622 507 -.49616219903345615 +624 507 .7272405205929009 +628 507 1.5696782186586646 +635 507 .5046143219430489 +642 507 -.34055878103872494 +643 507 .038896149009821065 +666 507 -.8964600113435484 +691 507 -.6975481810548608 +695 507 -.5248635734563908 +721 507 -.8692465485999146 +743 507 -1.8190709222242125 +750 507 .3046547232082728 +754 507 .9569737527018126 +793 507 -.9620073428065692 +798 507 1.062717391656339 +819 507 -.46050106234385485 +828 507 -.9341163136448711 +831 507 .7561009967501975 +839 507 -.13134471852319196 +846 507 1.1047714783153961 +873 507 -.6983879059218856 +874 507 .0655600391276412 +897 507 -.4482355582208787 +898 507 -.7891230787226761 +901 507 -.3207172627037043 +903 507 -.16100341362222514 +908 507 2.4022072033665403 +910 507 -.12970315064147386 +937 507 -.39761850832237783 +947 507 -.5408080013245289 +964 507 .5602470565526162 +965 507 .23798096264713248 +973 507 .9475341243463631 +990 507 -.00949054226163032 +991 507 .7539759870220845 +12 508 .008349319297172218 +18 508 3.5816838858275526 +19 508 1.4910720529370003 +27 508 -1.9686871631363647 +37 508 .24642743677866963 +40 508 .7503772117804773 +47 508 .905863655369076 +81 508 -.7065735585897281 +84 508 .5428785954757047 +87 508 .4872846176829889 +120 508 .8676318464745127 +121 508 -.5546770587311954 +127 508 2.7405932501880175 +142 508 1.043933411542438 +149 508 .7472478823589783 +153 508 -1.09281474522029 +158 508 -.3305420305280874 +177 508 .013078759962406553 +197 508 -1.4522993943940412 +203 508 .4471438780695932 +245 508 2.014435246736493 +260 508 -1.463405675587684 +264 508 -.24012475647773102 +275 508 -.18338702373076288 +286 508 1.1628183437557658 +296 508 -.10004367932605956 +316 508 -.09304010119034943 +331 508 .5756917082483277 +333 508 -2.216470447511215 +339 508 .6457382039109947 +347 508 1.3048903991912166 +352 508 -1.4356450162619891 +353 508 .9632937417479235 +355 508 -.652944259590808 +387 508 -.7610508936986824 +400 508 -.9646457173297912 +403 508 -2.051655951492637 +404 508 .4097031769514137 +407 508 1.0414600830727867 +409 508 2.2940220817553945 +415 508 .24887417711656884 +418 508 -.9817557755859677 +428 508 1.7864799113552525 +440 508 .39434030184738134 +445 508 -1.361836315029792 +449 508 .19561597099519262 +455 508 .07513476827622141 +458 508 .4823048252317638 +468 508 -.4361339691175794 +472 508 -1.324051011073776 +473 508 2.6596707589222444 +476 508 -1.3911070714809675 +479 508 -.3655936048290568 +487 508 1.9788667440385426 +488 508 .34857488835219813 +495 508 -.10903033073377202 +501 508 -.16266657239180027 +507 508 .23158290512938148 +508 508 -.5040717595793666 +523 508 -1.0220024730989372 +531 508 .3507170152782461 +532 508 -1.7063694125400226 +533 508 -.11594167905108795 +550 508 -1.431058732073482 +557 508 -.17535529517611803 +567 508 -.974917708350058 +579 508 .6633150682606943 +631 508 -2.034275888546017 +639 508 1.3938999366711966 +641 508 -1.2338365680561754 +650 508 -1.320119644126422 +654 508 -2.1567029068138086 +688 508 -.07165699206727108 +690 508 -.7364975847568326 +701 508 1.398796817691286 +708 508 .18892565248254378 +709 508 -.2624598041369542 +710 508 -.5511424271124892 +713 508 -.7349359910396219 +723 508 -2.6943174658616345 +732 508 -.7552375522888666 +746 508 -.8734087673604002 +781 508 -.5697035488778301 +788 508 .25087380658438224 +791 508 -1.0765169365583613 +793 508 .5339516435064594 +798 508 -.47190738911280294 +801 508 1.1437483483118838 +808 508 -1.7549951346041075 +811 508 .978944842142693 +812 508 -.3728810811076215 +813 508 .5040553231488829 +832 508 -.13502828677361367 +837 508 .07991350541326861 +838 508 -.3166086813656435 +849 508 2.090321707977527 +850 508 -.19351327611982921 +904 508 -.07208667505109573 +908 508 -.4744929062686086 +917 508 -.4935680432220738 +932 508 .5910353809328049 +936 508 -2.0978898103145087 +950 508 -1.1304691216618636 +958 508 .7529220913495485 +981 508 1.7573357452974616 +983 508 2.5088346165297413 +996 508 -2.2575676286135336 +1000 508 .8737497057206448 +8 509 .6547633481064465 +22 509 .7123802986434037 +24 509 .30387928902519945 +80 509 -.5576037361972075 +83 509 -.5542692015596489 +92 509 -.5485437427531701 +94 509 -1.3680079512255594 +104 509 .6870845053035368 +115 509 1.7656484515891855 +120 509 .21084761884830275 +146 509 -.7275227355965321 +151 509 -.8926741703568156 +155 509 .16343071485976576 +158 509 -1.7302978287390727 +159 509 .7561416036005927 +165 509 -.41211154168098774 +168 509 .42521722335807766 +169 509 -.5584809555641617 +170 509 .6201452609339514 +185 509 .2305367707260651 +191 509 -.9092991314358237 +200 509 -.684203303855575 +201 509 .16730209396776452 +206 509 .041781650990527414 +215 509 1.1319272821967479 +221 509 -1.1031419111145964 +222 509 -.8317513062079758 +230 509 -.09598070692835825 +236 509 -.722676182431605 +238 509 -.3716778400675157 +249 509 .7060381461141044 +277 509 -.7927500390379617 +294 509 1.8953355258343927 +300 509 .6207339392831327 +312 509 -.5306602386515369 +315 509 .6297334218629395 +317 509 1.1490999869281993 +318 509 1.8317206112509499 +320 509 -1.0108815663343174 +337 509 .7401424912824395 +343 509 -.25431680261706313 +348 509 -.5791011025085555 +396 509 .7307152088526528 +435 509 1.7765197662075836 +455 509 -.8104071294652413 +473 509 .7077176531218414 +481 509 -.16093783816114787 +501 509 -1.0778447695288196 +511 509 -.03348531183171401 +518 509 .31055124071572315 +519 509 1.0770066365579478 +525 509 -1.1646167332565514 +531 509 -.2595011933318533 +540 509 .5873608400107251 +541 509 -.4205295921859701 +549 509 -.8273090515292378 +554 509 -.2774753145360704 +557 509 -1.6768965625409398 +560 509 -.4158107904495095 +582 509 .18859313691639604 +602 509 -.2003940951275929 +617 509 -.06779152728116308 +635 509 -.7203393555814099 +636 509 -.5526692797978091 +639 509 1.0291123357853447 +671 509 -.9829054704150485 +689 509 -1.8213779163204231 +693 509 .5564334605337816 +707 509 .9694117431771365 +717 509 .10977066627709721 +725 509 -1.2492468567417525 +729 509 -.391099031690213 +740 509 -1.3601750302544398 +741 509 -.17288971535031752 +753 509 .48219521887680417 +756 509 1.6411264278681592 +759 509 -.9159301211718185 +762 509 -.922883274167173 +763 509 -.9416061464160248 +768 509 .030402992039189017 +771 509 -.41030986184907225 +778 509 -.6078761304553496 +804 509 -.1576334171444793 +812 509 -.3965410921509705 +815 509 -.4491457989467686 +817 509 -.6597970124314674 +819 509 .48765306908953965 +822 509 .0455203170927268 +823 509 1.0630357180806893 +826 509 1.2344073549459293 +846 509 .5419225906860716 +847 509 -1.6764054704194737 +861 509 .755871696805164 +864 509 -1.774269673000568 +878 509 -.3520681234649217 +881 509 -.029980618390619322 +888 509 -.7319712368918464 +893 509 .06022341232705584 +899 509 -.07451948112155352 +909 509 1.236997825495131 +911 509 -.7300574905391972 +920 509 .18589099694666078 +922 509 .6650341212081256 +924 509 1.5938494507072554 +927 509 -.5293269239825374 +928 509 -.04749735987255882 +935 509 2.1748841853178273 +951 509 .22664382379860482 +7 510 .929169994384148 +27 510 .5669072920544855 +32 510 -.8784446113295883 +41 510 .24907513730854713 +54 510 .18831835826614748 +83 510 .3163883920791884 +126 510 -.9940324179781405 +128 510 -1.0435076195050392 +147 510 -2.23518595434659 +151 510 -1.3848328423152263 +158 510 .6341709620150706 +162 510 -1.3993396189372234 +177 510 -1.7224401218385883 +201 510 .2724153790280477 +206 510 1.6125545690503298 +209 510 -.8991136073423568 +222 510 -.7537291298916592 +224 510 .062035270406316234 +235 510 -.45911050186955127 +241 510 1.5348316687473538 +245 510 1.9001835476745992 +252 510 -.10160643436982364 +255 510 -.34642307224777086 +256 510 .2280296269681557 +289 510 .1437249195805792 +298 510 -.7431435455945277 +306 510 -.2390127483971815 +311 510 .18243331056765313 +317 510 -.41466603981393085 +320 510 .7349416840525803 +322 510 -.5747399955102684 +338 510 -.00949529903705229 +366 510 -.2068411672276026 +372 510 -.3963058208420959 +376 510 1.2069798746989335 +386 510 1.0558302163922513 +389 510 -.5146374370810329 +411 510 -.7957117143304858 +424 510 .48011386236585935 +428 510 .06649224890445843 +430 510 -.9125975727988255 +432 510 .23051460834453696 +434 510 .8310035556488687 +439 510 .9981911107661805 +456 510 -.26118281694511497 +460 510 .862804645818598 +462 510 1.1931566606756714 +463 510 -.6506282250152042 +470 510 -.6431487560022149 +471 510 -.16788792915705375 +483 510 .9666289676448598 +486 510 -.08276476464348417 +497 510 .9880232652262404 +502 510 -.11997799780898191 +520 510 .7647365813448621 +526 510 -1.1457711470459528 +533 510 .37106070619344184 +561 510 .7769750938437163 +567 510 .0017597205450074482 +572 510 -1.3323995047022157 +578 510 -.7719759089475159 +593 510 -.07789366903190921 +602 510 .6761544773312717 +606 510 -.21415749699136294 +612 510 -.27597846893684214 +615 510 .14135725055340218 +638 510 .026572975510925134 +639 510 .938092923956246 +641 510 1.005730743859421 +657 510 1.186061124622594 +660 510 -.6166749336950866 +663 510 -.35014840379672496 +702 510 -.5944973060389377 +716 510 -1.2290274912076689 +717 510 .0768631998311892 +725 510 1.0229650695636772 +746 510 -.37395828956912147 +755 510 1.2401706688679406 +764 510 .6161694350332546 +803 510 -.13514165932156935 +810 510 -.21599150289873922 +813 510 1.061889755378911 +827 510 .6718140776771627 +840 510 -.4509341902143907 +865 510 -.7917611435131295 +875 510 .4473861693261835 +876 510 -.9486117242361084 +881 510 .8933256193746034 +922 510 .9255467668249581 +924 510 1.568873377045164 +925 510 .2720868587278167 +929 510 -.031639429112396755 +948 510 -.7825682164974784 +970 510 -.7267308623762048 +1 511 .3933254102572149 +2 511 -.4231381952879859 +4 511 .9090244433206934 +5 511 -.46449250964599625 +11 511 .8742613956668193 +27 511 1.1625949827792241 +32 511 1.1444916458040433 +34 511 .34951203750494975 +40 511 -.8601758490634498 +41 511 1.1186397634517677 +52 511 2.406627811941411 +68 511 -.18717855218642396 +78 511 -1.084683111521101 +90 511 -.17043537972160128 +98 511 .4590295147124768 +107 511 -1.1224089486982787 +121 511 .6340343580048625 +123 511 .6280460577705593 +124 511 -.48629213979056335 +134 511 .17363774899776407 +136 511 -.9108785926826485 +150 511 -.24415072608648067 +167 511 1.0130515686165529 +186 511 -.5741716844794128 +193 511 1.216516759241312 +204 511 1.0470861417904322 +211 511 .35839667915609896 +215 511 1.2294101043954144 +219 511 -.03339771315584891 +227 511 -1.8122562795035746 +237 511 1.2522817537376163 +247 511 -.6387109020304658 +248 511 -.1559375784129704 +252 511 -1.1285054119067968 +288 511 .5151484056234222 +294 511 .09044566743118554 +323 511 1.1285540255424356 +327 511 -.354309618299477 +329 511 -1.3983966732138138 +331 511 -.31991784182775324 +348 511 1.4581499037830121 +355 511 -.07174614089204492 +388 511 -.5908652661690647 +403 511 -.15402756045711474 +411 511 1.2610863521477804 +427 511 .28757023228740597 +428 511 -.6809900219294139 +450 511 .022239301002846212 +470 511 -.9293111753027625 +486 511 1.3127646123231747 +495 511 -.5101253811429117 +496 511 -.2390875522674462 +507 511 -.8192926523724804 +510 511 1.4010724736192217 +529 511 -.0002317739311516187 +549 511 .14430654599476034 +550 511 .12285854496475693 +559 511 -.39722386402133414 +561 511 -1.7741017333485563 +577 511 -.47182392342507234 +583 511 -1.5051961216928906 +587 511 -.6799453873876472 +593 511 .7930696244531827 +595 511 -.5359153730482162 +608 511 -.547835729375289 +623 511 .1021581660290502 +643 511 -.9575634280228127 +660 511 -.48097098782650377 +663 511 -.6970038877662559 +665 511 -.7525828716098407 +674 511 -.8684592210729692 +683 511 .08987120298254805 +686 511 .48461759432439844 +694 511 .4112397627306539 +703 511 .4530192706589716 +705 511 -.33878089541577566 +720 511 .3824240501672354 +724 511 .44399153413927717 +739 511 -.09167449967326423 +751 511 -.17869831573770478 +756 511 -1.682703497985471 +762 511 .2218042619254299 +777 511 .19459628595129605 +799 511 .9500104834688206 +813 511 .2462099605420812 +845 511 -.11376924038396492 +873 511 -.030921544164082992 +877 511 1.2958912244371261 +880 511 -.4142133637756322 +887 511 -.6665080205826949 +915 511 .768977058909316 +938 511 -.43484178502210424 +959 511 1.5839407251429964 +963 511 -1.4549807354609468 +971 511 -.36349840042946385 +974 511 -.9451797448748955 +980 511 -.22683148878010062 +997 511 -.4059143907114858 +10 512 -1.5558615399265587 +31 512 .7795783288346015 +36 512 -.35271341575144033 +48 512 1.3379375105682345 +49 512 -.849492163534211 +53 512 .24868525893479404 +65 512 -1.5208557577804573 +75 512 -.17172210027919743 +76 512 -.15492467306143645 +98 512 .4112336805839509 +118 512 -.4466425773339274 +119 512 .21238171546479653 +146 512 .6260153135240534 +153 512 -1.0806479402771978 +156 512 .10566344822689552 +181 512 1.011947984718706 +182 512 .37549195073244235 +201 512 -1.503562501990337 +214 512 .6689097529551563 +219 512 1.7924040650232484 +235 512 -.13061775540367104 +249 512 -1.4410942624736838 +250 512 -2.4302846388020187 +260 512 1.6736513073228938 +263 512 .16044364021335417 +267 512 2.2215989709784676 +275 512 .8638933868013332 +296 512 -1.0293388601853837 +307 512 -.9308548803754901 +311 512 .6180067392470772 +316 512 -.2547897161689384 +318 512 .21936333480588324 +319 512 -.49624563127113597 +320 512 .820071638925943 +346 512 1.47341608006897 +364 512 -1.1933778114838767 +370 512 1.2717690512765032 +384 512 .9017041591164632 +390 512 -.47229039904128156 +396 512 .20821358824726566 +410 512 -.01735201598197343 +414 512 .15852124236808518 +416 512 .3390733717629374 +420 512 -.7324379892751023 +433 512 -1.183713894730942 +434 512 -.7793685226142035 +437 512 -.41763704239324695 +458 512 -1.0964969663595912 +477 512 -1.201565544440388 +478 512 -.31448287098481176 +506 512 -.8292518618755261 +531 512 -.3587769484245869 +571 512 -1.6464401804579047 +578 512 -.05437755178954991 +592 512 .4127310548138194 +598 512 -.6458419992422487 +609 512 .7945271068026518 +619 512 .9989089338737313 +623 512 -.07789654207470684 +629 512 -1.909489925683057 +645 512 -.5683664493118057 +659 512 .5713533767063966 +662 512 -.032985826372413374 +668 512 .2267237988227482 +679 512 1.0663272901386722 +687 512 -.7226441549753705 +701 512 -.07492199047999379 +702 512 1.0619547916684526 +704 512 -.37453220879767 +708 512 -.9284860182485828 +726 512 1.372176723608827 +727 512 .10404331844735429 +741 512 .16052401656743884 +748 512 -.9932389943999258 +752 512 .6361121193124383 +760 512 .2678834035092829 +791 512 .154431969677788 +799 512 -1.8530449687553245 +808 512 1.4754301088865018 +809 512 -.7901560096677831 +825 512 .26108257393788725 +829 512 -1.8184318431058941 +831 512 -.10875395653170827 +842 512 1.0625418275129337 +868 512 -1.8276015367732448 +869 512 1.7117984888805247 +871 512 -1.6898591364268836 +873 512 .035377750029513544 +879 512 .16860543380597973 +883 512 -.7026399921019995 +886 512 -.0667072374013915 +895 512 -.20324750459281807 +927 512 -1.8560814262784822 +928 512 -1.589909797523264 +932 512 -1.7625317615133698 +938 512 .17127826877559185 +963 512 -.037988062037957265 +967 512 -.2859694865698566 +968 512 .45191522136460927 +989 512 .2565607756499827 +991 512 .629905697325062 +998 512 -.3180888696938612 +8 513 -.9065064684148978 +14 513 .6710177497269901 +17 513 .7054059830524082 +64 513 .7478400598984025 +73 513 -.13927719202460143 +98 513 -.15093824813124368 +108 513 -1.8876844422380008 +131 513 -.8079968943551189 +132 513 -.288284165345416 +149 513 1.2682511745596279 +181 513 -1.1606344475773527 +216 513 .30301832831812836 +226 513 -1.0862668518434082 +232 513 -2.0618274316537253 +235 513 -.5414625707302791 +243 513 -.09548960996457612 +244 513 1.0020386305914817 +245 513 .9815515496352002 +248 513 1.6507736085722222 +249 513 -.8388276787199653 +254 513 1.2030098490510694 +271 513 1.3221767208620778 +299 513 .008993573788526187 +307 513 -1.0895426076121761 +310 513 -.6987448869333169 +311 513 -.8041794361218421 +316 513 -1.4899370955445952 +320 513 -.07240740247300016 +322 513 -2.005632198430193 +325 513 -.1763325991471878 +328 513 .36671117910560763 +332 513 1.0827710527028995 +341 513 -.3036738018122952 +346 513 .3323479579861498 +351 513 1.644200485669317 +355 513 1.2041702778421868 +358 513 1.855058609474543 +374 513 -1.26850790294702 +383 513 -1.0389658627657754 +390 513 -.3761928565702176 +399 513 -.1847379680547844 +405 513 .15389933331750383 +410 513 .5262238881725911 +417 513 -1.209888423769939 +418 513 -.5913409615110898 +424 513 -1.5646903986202128 +429 513 -.620657638266869 +439 513 .018114626403096766 +450 513 -.489970259621192 +480 513 -.2033417111817754 +500 513 -.8346149710341422 +504 513 -1.3140492331424487 +506 513 -1.7063408317658122 +541 513 .961657820062026 +550 513 -.19281703254463922 +564 513 .6470005556939558 +577 513 -.8878328174453607 +583 513 .29033524616894435 +613 513 .15487464105481688 +621 513 1.2256091804971931 +648 513 -1.0484690676092359 +679 513 .3157504078078758 +683 513 -.26253293090701696 +684 513 -.1450981593848541 +714 513 -.11078224755565175 +731 513 .6279068440193293 +732 513 .8337257129958799 +754 513 -.037366980172020184 +758 513 .8617927995347451 +763 513 -1.008387529787717 +777 513 -.5018954971213747 +800 513 .87626920052839 +801 513 -.9709504672326893 +806 513 -1.014609984755702 +831 513 -.6092547776073443 +832 513 .7854525163218382 +841 513 2.032737999522576 +861 513 -.6202481854398852 +862 513 -1.6879129224789575 +864 513 1.190427892437771 +865 513 -.1700004758618357 +867 513 .9315797151940037 +872 513 -.583323124659073 +876 513 -1.5630800026076213 +883 513 .4649482828257611 +885 513 -1.5753786737393638 +886 513 .006162867657794099 +903 513 1.0053562166747672 +921 513 -2.264142397863855 +926 513 -.17697407432753814 +940 513 -.1739136487171892 +945 513 -1.3117978064911906 +962 513 -1.6973366329339794 +966 513 -2.1525691647136305 +972 513 .3464655206421588 +974 513 .957676583792774 +988 513 -1.6185738588323306 +992 513 -.38805628483086907 +5 514 .902017325504054 +6 514 .07642754957869637 +17 514 .9290147088678363 +21 514 1.4585524206389755 +31 514 .09216791383895967 +39 514 .2780803842406404 +40 514 .5710823270821438 +58 514 -1.4053066376462038 +60 514 .6056017342398062 +61 514 1.4806579283854293 +86 514 1.1793189761580587 +88 514 -1.920930030911077 +100 514 .21840084611982197 +104 514 .6970950275645866 +113 514 .5408097924759445 +135 514 .0003040499358625895 +154 514 -.024940914497606007 +168 514 -1.0013930703713316 +172 514 .20515842266022644 +174 514 -.643164250465679 +184 514 -.6126041060433256 +190 514 1.2161614400406644 +191 514 -.48053865351775293 +192 514 .8011350661755134 +201 514 1.1143546116018301 +206 514 -.08989665019189981 +214 514 -.7341614868891215 +223 514 -.201845552108422 +225 514 -.03090947036678718 +232 514 -.6784863314484988 +264 514 -.25711874396016204 +274 514 -1.7410203875778054 +275 514 -.6497881461099771 +281 514 -.7661602533075985 +330 514 -1.6938540440418566 +336 514 1.0832459748281509 +344 514 -2.4471919264508757 +347 514 .47574325759536173 +352 514 -.09505493395383702 +353 514 1.6496817901938365 +354 514 -1.9742981036502407 +361 514 1.1189219442258622 +362 514 .8127832383480582 +369 514 -.0858024284799786 +377 514 .09229507967402534 +387 514 .5626931960210508 +388 514 .4999722330839674 +396 514 -.7067257449213122 +417 514 -2.088269964836897 +419 514 -.923967816953252 +426 514 .6194988985361282 +442 514 1.3734777689775597 +452 514 .43658071355789213 +453 514 -.8196252695932955 +454 514 .40324643434085533 +458 514 1.493603554563619 +476 514 -.3199280618885287 +492 514 -1.7593204669256608 +498 514 .7832134476653378 +508 514 -.6544469460571878 +528 514 -1.5027282591753288 +545 514 1.4279179638481587 +555 514 -.2439587701616531 +570 514 -.8902953972600668 +573 514 .07509337264522978 +579 514 .6661089549143486 +604 514 .17210740076920605 +606 514 -.08620187868899554 +608 514 .7444004390601209 +609 514 -.1490204993282463 +628 514 -1.3505579848956144 +651 514 -2.172368377439241 +658 514 -1.0820502554314928 +667 514 .5088924360655287 +692 514 1.1746241005395701 +693 514 -.7053010928765985 +700 514 -.6016071249863396 +703 514 -.78173600613443 +707 514 -.2838461314793732 +742 514 .9424793564290013 +775 514 -.36725960012058134 +795 514 -1.8899398368036004 +798 514 -1.7006698273157517 +802 514 -.18609900201653 +803 514 2.160919911809268 +824 514 .23791057206135025 +833 514 .7490425306081776 +843 514 .31549074202630534 +846 514 -.37689538732483574 +864 514 2.175457277137494 +906 514 1.6927163374113967 +909 514 .2124504932033892 +960 514 1.8435709435005505 +988 514 -.7873051892378949 +989 514 -.3996589634529004 +991 514 -1.6492530767228037 +995 514 -1.2155684088693468 +1000 514 -1.4580703282567045 +2 515 .16885964216473554 +11 515 -.1144727500483178 +14 515 -.5413867900719975 +51 515 -.20684450565536566 +52 515 -.5307898425633274 +78 515 1.6224065588180432 +86 515 .1037018484638087 +102 515 1.555629673202985 +126 515 -1.1467577585986932 +133 515 1.0899065336864433 +137 515 2.0701031432937564 +143 515 -.6708379866726847 +145 515 -.07479544216905176 +153 515 -.7896299296227368 +155 515 -.8733326290560287 +161 515 .6243498343901598 +162 515 -.10301904905703274 +170 515 -.2950031547549435 +182 515 -.9050620740577564 +186 515 -.2385222310868382 +190 515 1.3556886131320658 +192 515 .12015693773295352 +204 515 .2791121337173935 +219 515 -.8618049523090106 +220 515 -.8775156024681839 +234 515 2.0354436878103686 +253 515 -.6782037672127723 +254 515 -.05264730624877556 +260 515 -.6023669470041513 +264 515 -1.3194660842422523 +267 515 .43618335799996955 +274 515 .6292416636246465 +281 515 1.2121007348559496 +282 515 -.11564900991342364 +295 515 -.8318219655432014 +313 515 -.5077811867065489 +321 515 .537430166319742 +332 515 .9434312597820214 +342 515 -.062081615636760734 +350 515 -.6221811893153183 +360 515 -.8952702210301163 +366 515 .4739002458632912 +373 515 -.41265258301626884 +378 515 -.19844396187961488 +383 515 .032410099755938865 +396 515 .5516704969491413 +398 515 .4204820946338727 +399 515 -1.4679485737062858 +402 515 -.5418809836748365 +418 515 .2824618626951056 +420 515 .4277002657958972 +423 515 .2372781950597566 +430 515 -.024695249305075426 +452 515 -.5533885619707287 +468 515 .6096117647306248 +473 515 .7084202501817654 +489 515 -.11025872827355863 +498 515 -.9349897281788117 +502 515 .5415429315885409 +505 515 -.05879343103783267 +518 515 -.7582827783338688 +525 515 -.6349540648188586 +528 515 .7075708658044031 +533 515 -.11094430299106327 +540 515 .7010004414139261 +541 515 -.6261369400589929 +548 515 -1.0328042168287386 +575 515 1.2450333156129485 +580 515 .6029211014618611 +581 515 -1.8875737603350171 +596 515 .586019470261982 +600 515 1.1626998800696113 +607 515 -.16860305683048737 +627 515 1.5017027786152868 +661 515 -.27151967280340733 +674 515 1.2055327380402245 +684 515 .26107449575393205 +686 515 -.5283164760277543 +697 515 -.5341191755993832 +712 515 -.5610507770948473 +715 515 -.5664948032667403 +724 515 -.12697746728477888 +729 515 -.5150297644178432 +738 515 -.19004082756221496 +744 515 .7906899994890092 +752 515 .9791047277661864 +759 515 -.21630323787442796 +779 515 -.6634185061368029 +784 515 .29894771826289585 +792 515 -.9784099234393723 +798 515 -.8261542698733488 +806 515 .48800822381880804 +813 515 -1.588040617199883 +838 515 -.389489583080755 +848 515 .748139130349831 +873 515 -.009797069356504318 +879 515 1.217756066730552 +882 515 .1850612512482335 +884 515 -.0058040945710108455 +893 515 .7285319391959486 +894 515 -.434331961315701 +903 515 1.6232080803517823 +905 515 .023236897620142326 +906 515 -.1901012705570306 +927 515 .693544746839246 +948 515 .48843478850429806 +964 515 -.561028388207332 +979 515 -.11496853520807349 +980 515 -.7614317149436427 +983 515 1.63510711367756 +985 515 -.9136943280140233 +987 515 -1.4459620917450025 +17 516 1.0038579107773784 +26 516 -.33728930236178667 +52 516 .07105246586244764 +71 516 .8323274841271879 +80 516 -2.3422994402370882 +118 516 -.3341708745385351 +130 516 -.958716533632229 +137 516 -.9156139746861518 +158 516 1.4394213371653108 +172 516 1.4846278212128756 +174 516 -.41663246268392357 +188 516 -1.483529059808716 +195 516 -.15049008392811605 +222 516 -.46363675651084524 +224 516 -.7771559098269749 +229 516 -.5912297900532094 +242 516 -1.1287342218750889 +243 516 .35476405512733034 +250 516 -.04106368670108079 +253 516 -.4572951732240942 +260 516 .6291837641725395 +303 516 1.447942286085541 +312 516 -.07829531373090926 +320 516 2.1873456967849663 +322 516 .3875546446680575 +332 516 -.1558143708203797 +362 516 .3202536337086777 +387 516 -.3353759219594519 +393 516 -1.5261566668850854 +413 516 -.11514459989287754 +415 516 -1.436586452742441 +419 516 -.6917693883161468 +423 516 -.5484769526140472 +442 516 -.7420194809601902 +444 516 -.0786993265156781 +451 516 -1.1759418027818702 +473 516 1.3235961424787275 +485 516 -.1964762176209702 +490 516 -.4029364053416818 +494 516 .5380268600620826 +498 516 -.16040356318926435 +513 516 -.7895986731945316 +523 516 1.0321934286850893 +538 516 .8084675436404731 +546 516 -1.146141348825358 +562 516 1.529277070588614 +566 516 .838635281189839 +568 516 -1.3049906507322573 +571 516 .33965741130260096 +622 516 -.03504935125926914 +625 516 .5467065498374507 +628 516 -.8592875723218621 +637 516 1.7650094281053428 +638 516 .9542795521888934 +641 516 1.1980220477039003 +642 516 .669122257415153 +653 516 .12903641797613843 +655 516 -2.2227654609579117 +659 516 .31457500690436674 +678 516 -.8781789250310259 +684 516 -.674731303315276 +693 516 -.0562107233415457 +699 516 1.740097188061742 +703 516 .19267474554354522 +706 516 -.44909743043035016 +714 516 -1.3617877378265317 +720 516 .4636016182118181 +728 516 -1.2101948752596656 +734 516 -1.3066227370523102 +741 516 .05893063524206343 +744 516 -.546401751032522 +753 516 .6095957848290215 +774 516 .2652501674536609 +790 516 .25008997789902193 +815 516 .11047520205098268 +823 516 -.5709679079273998 +824 516 1.3413185333410031 +842 516 .25452231814951376 +848 516 .6703702397473781 +850 516 -1.1439772845123692 +859 516 -.1912337531790504 +861 516 -.3427958545910449 +869 516 1.8271425524013944 +873 516 -.44648194285743403 +875 516 -.053084297554062104 +884 516 -.11667509897085607 +888 516 1.540481656007938 +897 516 -.2889923288666624 +908 516 .6164225520006414 +915 516 .7409148430907673 +919 516 1.0856622565887915 +936 516 .7662404058887512 +976 516 .7478369505773599 +987 516 1.0150027374236636 +990 516 -1.509786494301236 +1000 516 -.2860186489210592 +3 517 .9186246207241385 +5 517 1.4944459695795977 +34 517 .2517707335651262 +42 517 -.9778737459818249 +51 517 .27770503903593335 +60 517 1.0911266927698868 +65 517 2.2817264654931932 +73 517 -.41063437278382675 +82 517 -.13583803776303446 +95 517 -.7423773572317393 +103 517 -1.5610677131331068 +141 517 -.9677658586445875 +142 517 -.024621327008293052 +156 517 -.46525228676353947 +160 517 -.5123718928261902 +171 517 .5896072220073741 +174 517 .6291633736733001 +182 517 -.9831840985538541 +190 517 2.2575198839956503 +196 517 .04053729544548735 +197 517 .6563981494190199 +199 517 .6835368319159216 +200 517 -1.1430466664022836 +230 517 -1.0472557263858961 +231 517 -.23159763057907246 +255 517 .2862445430996147 +266 517 .0753989671534025 +275 517 -.7729828570620526 +283 517 -.13047063584550614 +302 517 1.2469739450661619 +304 517 -.12355722256093297 +313 517 -1.0873788428669728 +336 517 .07881189150291237 +340 517 .1400869875172623 +342 517 -.4880613724105251 +347 517 1.9505612960779473 +350 517 -1.720532516426651 +353 517 .24865411559604284 +361 517 .44043999827189084 +374 517 -2.6224855954303736 +380 517 -.38607503347975064 +389 517 .7757234068642573 +391 517 -.5666222303808823 +399 517 -1.7181918675612788 +406 517 .07645963626007082 +411 517 -1.1737747642309029 +419 517 -.6795723156827363 +426 517 1.067704894868234 +448 517 .54996679684388 +453 517 -1.006410450020442 +501 517 -.6032710756925385 +506 517 -.014517315583190471 +509 517 -.662360140438823 +514 517 -1.83187975152993 +529 517 .18769932636630854 +535 517 .5812302478062333 +539 517 1.5993417578006623 +556 517 1.4099148506825738 +569 517 -1.9198457548364765 +577 517 1.396111532938809 +593 517 -.6617755226893561 +603 517 -2.495148051855456 +622 517 1.110317812607344 +623 517 .44017743053929415 +630 517 1.672461584160334 +636 517 -1.993467165035711 +680 517 .5617330748300362 +683 517 .14401501222481367 +684 517 -.5492536826595148 +704 517 1.3089242937289918 +707 517 -.2917998608352708 +715 517 -1.2432920529716447 +742 517 1.6574275572893298 +751 517 -.18047501059182947 +771 517 -.9889638009775988 +776 517 1.8316354238333092 +796 517 2.6159155351316135 +806 517 .3807521166967537 +818 517 .9973127846932199 +845 517 -1.8690881742485428 +859 517 .17824562059671337 +861 517 -1.8013145511373585 +865 517 -.7533855059950161 +873 517 1.0122161063191606 +881 517 -.578231908562526 +882 517 -.2227209553455677 +890 517 -.6054662184880796 +894 517 -.9589853728705675 +908 517 -1.732434594291886 +913 517 1.9438899162551446 +914 517 .5816177093029145 +917 517 .391379562624633 +922 517 .6006866836427686 +934 517 -.7698055991876581 +950 517 -1.07243795255575 +956 517 -1.5983895622270878 +968 517 1.4755624482350531 +988 517 -.9168361635463587 +998 517 .8003647793190066 +15 518 .276932189019646 +16 518 -.19230009110970248 +29 518 1.7637627953193986 +85 518 -.27163824625554667 +87 518 1.6081035886748645 +92 518 -1.5680738633204478 +97 518 -1.563500031286267 +107 518 1.3971316521117454 +116 518 -1.4194621077993181 +129 518 -.12300849959945225 +138 518 .5679561308854565 +162 518 .7249596785940756 +187 518 1.999033984058387 +200 518 .23956046726017016 +217 518 .06776599721394139 +223 518 -.09655041260765226 +230 518 1.2890682505072761 +231 518 -1.4559470002066546 +232 518 1.1510839885656372 +238 518 .758328510448634 +248 518 -.5544544954081664 +253 518 .6253957132485166 +287 518 -.7376233983426244 +289 518 1.5219863082888028 +290 518 -.39508446720892887 +292 518 -1.4489439895286405 +296 518 1.5650668315883727 +299 518 .2171816771728216 +324 518 .5915027905814421 +327 518 -.37456579378038724 +347 518 .4196196813107421 +359 518 1.2854113541151995 +377 518 -.38537601094997653 +398 518 .14461681291087403 +404 518 -.6766167852860355 +424 518 -1.6012494031525488 +426 518 1.9488877769602155 +453 518 .8788306653221352 +460 518 -.43780877531562906 +470 518 .8221486765469628 +486 518 -2.956838174139947 +507 518 1.0330751588502227 +509 518 -.46779065045542645 +519 518 -.8126976805111488 +524 518 -1.6295268674048957 +525 518 1.0099368175448138 +545 518 1.0295401256033394 +557 518 1.8056077256002703 +560 518 -1.7404598582885584 +595 518 2.4281202055133506 +601 518 -.530415271203479 +607 518 .9379074220412039 +619 518 .20493043922231619 +623 518 -.1356930378027238 +631 518 .8762399188219638 +634 518 .3803025894134668 +642 518 2.046774274595742 +648 518 -.10615316532294468 +656 518 1.6066567992173793 +666 518 -2.20023211335751 +670 518 -1.8619876104362079 +675 518 .04108199858729964 +677 518 .23767085493709822 +707 518 .42243087038540117 +709 518 -.6953544738143671 +729 518 .16799909010050273 +743 518 -.08092731760149832 +750 518 .14447999215520463 +760 518 -1.984865911628427 +766 518 -1.0395266003057946 +776 518 -.9886122328542163 +784 518 -.5938482064896997 +797 518 .6964384046211876 +818 518 -1.057698118138261 +819 518 .19036616264302708 +836 518 -.635267016041539 +844 518 -.8857678285321795 +850 518 -.3607775357991033 +852 518 1.8374932087861564 +861 518 -.5522292903641317 +862 518 -.3186929641177672 +863 518 -.14059640764163073 +880 518 -1.180358377437376 +888 518 -.6772790839153704 +897 518 -1.1015328527879447 +900 518 .6687429688477586 +901 518 -.6655918398856435 +908 518 .4723505773754013 +909 518 .15333404837766695 +927 518 1.1614686826016398 +943 518 .31946317302432153 +945 518 -.44855733887942995 +949 518 -.5133390756604693 +965 518 .8828343543830004 +967 518 -.7902284342803502 +968 518 -1.5421155122206092 +971 518 .4952338686790928 +974 518 .624070690282538 +983 518 1.9769544744878562 +986 518 -1.0578803867869522 +17 519 1.322388444150636 +21 519 .7706577870435084 +40 519 .2807325972680816 +50 519 -.8086555409242057 +55 519 .1337260855902658 +71 519 -1.0734395554327245 +74 519 2.0432004733597524 +87 519 .6487063751021998 +92 519 -.4749634089323466 +100 519 1.245472720771085 +112 519 .22433922988242366 +116 519 -1.337246939606114 +141 519 -.4511673851360881 +144 519 -.4671524338080955 +147 519 1.0861543372208196 +152 519 .43367563054300895 +155 519 -.2547242607757244 +157 519 -.40488996224961804 +160 519 -.8301958714225756 +161 519 2.1971027198349637 +163 519 .6180620076565264 +166 519 -.16675809548297 +167 519 -2.755905583420125 +170 519 -.9229868172126778 +185 519 -1.3838128582219682 +200 519 .10057432427197402 +202 519 -.9779245230491084 +212 519 .4936163498936685 +213 519 -.9661419436728744 +235 519 .35176838870229515 +238 519 -1.1849445043036693 +259 519 -.44567958246404266 +260 519 1.1343868562124473 +274 519 2.494885577432802 +279 519 -.43764038400476996 +294 519 1.4665300815240991 +301 519 .5104162548530295 +307 519 .7914923891816648 +308 519 -.19867824755057573 +329 519 -1.716170772748728 +339 519 2.872807157438452 +342 519 .44058772730836093 +361 519 -.009423778001604016 +368 519 .7420594139957749 +374 519 -3.7107736331388734 +377 519 -1.6250663728786656 +423 519 1.0847677923352284 +424 519 -.09752903941903182 +455 519 -.6003188628459333 +479 519 1.2287635426142423 +486 519 -1.6919823129003124 +499 519 -1.8444043964386763 +525 519 .23532867152209663 +534 519 .18359802367669503 +546 519 .586484187863232 +559 519 -.9643064623677088 +572 519 -1.9519142873383843 +573 519 -.052789401071682146 +578 519 -.05959816850728589 +587 519 -1.1642337365511493 +603 519 -.9233694073102007 +642 519 -.3025078233370797 +647 519 .3112776627607866 +661 519 -.5253631268617672 +673 519 1.7126436466766373 +674 519 .27639846716541816 +688 519 1.9960361533587168 +693 519 .5585183964740439 +699 519 .1933905801224914 +705 519 1.0890061117281482 +712 519 1.096263679315794 +714 519 -2.106641620089876 +757 519 -1.3905723949310225 +768 519 -.331877670052262 +775 519 -.15258572966319622 +790 519 -.3716430922000682 +792 519 .024388793893242944 +801 519 .17204533540307462 +817 519 .37679345074449205 +825 519 .30403290853396725 +827 519 1.2650617913165805 +831 519 -.5220259695874643 +851 519 1.127482325083609 +859 519 .8845761525121536 +865 519 -.176479774356825 +867 519 -.5447102296900432 +881 519 -1.1268748250992264 +923 519 -.17631345093463874 +927 519 .5389238285438972 +948 519 .6040440251465969 +956 519 -1.9108401758774505 +957 519 -.5889903871022781 +958 519 .500953304906661 +965 519 -.40311991134099456 +977 519 -.3612936624519735 +982 519 -.8812411092912772 +995 519 .6321976591248959 +996 519 .803691290655555 +27 520 -.28287618354600774 +49 520 .4593786574747951 +68 520 .8152335019857868 +83 520 -.2102379795394222 +93 520 -.2214951104274669 +109 520 1.1783900678789216 +112 520 .686316607135872 +116 520 .1223521345559354 +119 520 1.0489433967868886 +120 520 -.9140188206654339 +123 520 -.6855801976638436 +126 520 -1.3123920760467587 +136 520 -.11377454729602696 +163 520 .34101280582858906 +166 520 -.5094782440351067 +220 520 -.1510773442063723 +227 520 -2.3509811606883932 +268 520 -.5592987523213836 +274 520 .7570086946522369 +275 520 -.7537592296838419 +276 520 .5711205456827377 +282 520 -.10640157492787722 +289 520 .6144811123095973 +293 520 -.4010025529745886 +303 520 1.235878405956674 +309 520 -.6090045964585011 +326 520 -.5296835442916773 +345 520 .1819848924135313 +346 520 .3524627975314224 +351 520 .03781826098473823 +356 520 .6555795276391538 +368 520 -.8630515703361834 +377 520 -.30509866328017193 +389 520 -.2523826320361584 +397 520 .022383145665172098 +407 520 .5638758836790541 +410 520 -.68081301299306 +428 520 .7108269911771821 +429 520 .8162580336691809 +450 520 -.4850890391029917 +457 520 1.4240096631043353 +458 520 .33223122413896033 +464 520 -1.402200262169951 +465 520 -.598974469329719 +477 520 -1.8427593420136792 +487 520 .3937975856038548 +496 520 -.362239865762941 +500 520 .32629595801639955 +503 520 -.6807520387322962 +554 520 .712415867991818 +564 520 -.9575789751484491 +570 520 -.6396242435641255 +575 520 -1.1381850296336269 +593 520 .5273529557505069 +594 520 .2105563080504383 +615 520 -1.0833739022852609 +618 520 -.44785192819376635 +630 520 .31258347387732266 +635 520 .5275505760684932 +678 520 .18905076826609574 +700 520 -.015505696239749553 +726 520 -.328943729433633 +730 520 -.2074519617357064 +738 520 -.3730145423141507 +741 520 .6195434669945257 +743 520 1.2585614626918489 +757 520 -.2100944038125153 +758 520 -1.5780535619759155 +765 520 .2913671402641834 +778 520 -.11419120806554243 +779 520 .0009277828464978599 +791 520 -.7110681393882127 +795 520 .5323687545541296 +803 520 -.624096984025743 +817 520 -.8666337327525878 +831 520 -1.042061702083571 +851 520 -1.06310237275384 +862 520 .9855127083433601 +863 520 .4779779470293182 +880 520 -.10888740909416514 +894 520 -1.223259270617127 +899 520 .22708355794054785 +902 520 1.5467446945932273 +932 520 1.2728832945236896 +958 520 .14137433608370814 +959 520 .1056867736108621 +990 520 .5510688563076716 +991 520 .7231255409285353 +993 520 -.905802137966543 +14 521 1.643905696416684 +19 521 1.6433307157617478 +20 521 .20293106281982454 +24 521 -1.7193867728989778 +34 521 1.544609727095463 +38 521 .3953539986486281 +75 521 -1.025140708880047 +93 521 .7784143505654553 +106 521 -1.440902441871878 +128 521 -2.2427380990634886 +145 521 -.6112753558766373 +149 521 .7741512030901606 +155 521 1.4299100209698508 +156 521 1.013875804823846 +162 521 -1.6296238134329901 +174 521 -.5180283615313591 +180 521 .9931887484955256 +182 521 1.8230172778965987 +197 521 -2.3130564806317344 +205 521 -3.006888956961231 +207 521 -.20356585288683682 +232 521 -.8063734386588008 +238 521 -.4817996005438502 +249 521 -1.8208404923663377 +253 521 .5286404748520724 +256 521 -.8372034966263233 +258 521 -2.1707686931479513 +264 521 .8048205549708178 +266 521 -1.4964598179892101 +288 521 -.6442490959824158 +292 521 -.14837640318448755 +297 521 2.661734251531707 +317 521 -.014873456678855104 +321 521 1.7908758554478796 +339 521 .670732385280908 +350 521 -2.4380147297592965 +357 521 -1.0812250933273704 +365 521 -1.1160231070961317 +396 521 -.5493388318695276 +401 521 -.3145486418045611 +403 521 -1.7624711279378482 +404 521 -1.9719780196007102 +411 521 -.5623580515909601 +414 521 1.5270951467685632 +428 521 -1.6955004510349287 +450 521 .28414643520196836 +460 521 .7020171507396167 +464 521 .7311495564082563 +471 521 2.1456864699212743 +491 521 -.039241525838065464 +492 521 .8696642968391616 +502 521 1.003563435674784 +509 521 .480277283803354 +512 521 -1.1797637807812882 +520 521 -1.3375515304139676 +546 521 1.432466591871012 +552 521 .8604883276323722 +567 521 .09506754076328967 +570 521 -.5674950936979979 +582 521 .9648765457414751 +589 521 -.5982975276625855 +591 521 -1.394625510348745 +592 521 -2.289255025483418 +593 521 1.1351847352017514 +594 521 .14393336168253007 +597 521 -1.453043611761588 +617 521 1.3525952673104504 +624 521 1.0413113003423402 +629 521 -.8620417348496958 +635 521 -.2601654652713059 +656 521 -1.0706569827191381 +669 521 -.28600186069945016 +672 521 .07290322139051947 +674 521 -.6899048958658269 +688 521 1.7461595205293217 +695 521 .890153733080861 +712 521 -.9506065635213841 +721 521 -1.9940595948766393 +724 521 -.4371392813323626 +726 521 -2.332709340215601 +738 521 -.8606629971802008 +756 521 1.4494201395300383 +760 521 -.9251725212904043 +777 521 -.8337310372535689 +788 521 -.3296534617446919 +800 521 .4208041611936484 +804 521 1.6382217250931113 +811 521 2.0628925083419003 +841 521 .41172606658774585 +856 521 .7469031907211874 +863 521 -.014318702610046481 +873 521 -.6061777900741244 +876 521 -2.1732133345577553 +885 521 -.5401818829206487 +905 521 -.7470951096790042 +910 521 -.9074756467006759 +923 521 -2.2609437354150916 +924 521 3.061333335297961 +926 521 .30027720094420435 +932 521 -1.019597605996786 +937 521 -1.0040509555232529 +946 521 1.4615752999633187 +955 521 -.8520562513522068 +959 521 -.8867913687680868 +960 521 .15013006416432592 +961 521 1.1413477764167614 +970 521 -.47878051919045184 +1000 521 -1.5013907095389978 +10 522 1.224391205956993 +11 522 -.2740278285131982 +47 522 -.9227828384634308 +54 522 1.3938109815337114 +59 522 -1.027335423570295 +60 522 .6576908325348495 +63 522 .42214358817177605 +73 522 .4314298860149758 +75 522 -1.7854766407094376 +83 522 .5144858998541264 +93 522 2.1573355854246965 +104 522 -2.3574495797644337 +117 522 -3.3946800484076167 +123 522 .9209865523260066 +126 522 1.3563713228130132 +145 522 1.061472434184438 +157 522 -.02056467149755628 +165 522 1.4706044399144245 +169 522 -.023804731947977914 +194 522 -.02373461446505952 +196 522 -.3163204156799311 +202 522 -2.5595847907706393 +217 522 -.8285983111311598 +227 522 1.7966609899018164 +236 522 .7400332442231865 +253 522 1.4820406593485662 +256 522 -1.9357922133042813 +264 522 1.9857433728490388 +269 522 -.25338505408309053 +270 522 -.7299741657173194 +271 522 .31940966546329186 +276 522 .2347416055043528 +284 522 -.7482087772347787 +286 522 -1.595839823592777 +288 522 -2.098131230182087 +292 522 .30540892759213145 +294 522 -.6859138348298202 +302 522 .7774347012711211 +304 522 1.820384199243982 +329 522 .13130906101945333 +335 522 .8349336120182387 +349 522 -1.9103911036840748 +371 522 .49877911131786845 +374 522 -.8515357175315567 +385 522 .0452217499836588 +391 522 -.34190360435344913 +398 522 .06653591597743458 +400 522 .7926734598391194 +402 522 -.3826709312473162 +411 522 .31285179807070806 +418 522 1.8483859668222575 +442 522 -.974022738486783 +443 522 -.0659989836611713 +465 522 1.9534398554426342 +467 522 .5479742025991674 +473 522 -1.4673960909673076 +474 522 -.081316194543748 +478 522 -1.1006149373601093 +483 522 .20511617040743657 +496 522 1.3169653390089269 +523 522 1.9424086349751304 +531 522 2.632863344932216 +536 522 1.9039862159224996 +538 522 1.1858517754313702 +539 522 1.0111260972980907 +547 522 .13333321075199503 +561 522 1.7302573574930784 +564 522 .12291030485606388 +570 522 -1.433415212765117 +588 522 -.30796065264846606 +610 522 -1.4341655429335043 +620 522 .6956777055716505 +628 522 -1.8443943703493255 +655 522 .46793279402015475 +657 522 1.7317218846856937 +664 522 -1.7631435584202932 +672 522 -.09677527741250282 +676 522 -1.4865918527851314 +710 522 .849327604787773 +732 522 1.2303105891701331 +772 522 2.26486135181199 +800 522 1.1154291356616082 +801 522 -.6852105408457747 +806 522 -1.1995621299829393 +817 522 -.4668321102668344 +826 522 -1.3697026055595858 +831 522 -.9853412157919487 +842 522 .6841233808122963 +847 522 .9515312460465477 +851 522 1.3366648828379977 +856 522 -1.7040554347557242 +857 522 1.2687689971132485 +861 522 -.2814601269804371 +885 522 -.49980193498986747 +892 522 3.0133757784475264 +905 522 3.3978749181290726 +907 522 -1.1251992530865966 +919 522 -.31660065982756963 +939 522 .11707719049814862 +979 522 -1.0256436165144427 +987 522 .2507021846605422 +995 522 -.9196135815743043 +997 522 1.8493700257411985 +1 523 -.3201219268254725 +20 523 1.0870147107715722 +30 523 -.6751406701625053 +36 523 .8482759129261908 +62 523 1.3790193542767932 +67 523 1.6536011869504772 +77 523 -1.084406570799018 +82 523 1.33885526760499 +92 523 -.8265632951250114 +94 523 -.5961687193311896 +102 523 -.7257921757312473 +112 523 -.6184955876421815 +118 523 -1.2157075463119187 +125 523 -1.6910629120071288 +127 523 1.4449477389339727 +129 523 -2.2433313393973213 +130 523 -.9722608842493278 +148 523 -.5917560999971573 +163 523 .13399709021637424 +175 523 1.4815128045078503 +193 523 .3807974409571648 +194 523 1.4357828817233558 +208 523 .45973752177752614 +231 523 -2.5312808958427175 +258 523 -1.1559350638569765 +289 523 1.5532988111647084 +291 523 -1.1769834169530133 +330 523 .35982725543109234 +331 523 .03450203139982061 +344 523 -1.4057527618179717 +345 523 .6093299467100082 +352 523 -2.717819756803351 +357 523 -1.1982033634784905 +376 523 -.7527957636461358 +382 523 .10719633357739994 +387 523 .08040866600262019 +397 523 -.5551895759586214 +398 523 .5977169291189404 +399 523 -.41540980421889273 +418 523 .4840849735865711 +426 523 .7596601790888519 +432 523 -.508908194339889 +433 523 1.2086009481610083 +437 523 -.7246387948253883 +442 523 1.7755936166896071 +463 523 1.1772422763282713 +479 523 .39492739128510057 +487 523 1.585482806128545 +495 523 -.6570022704774229 +510 523 .7324605877798498 +524 523 -.717435210368237 +527 523 2.458598627794725 +535 523 .9872144263205714 +537 523 -1.4386520278131754 +539 523 .6081397940109254 +557 523 -.010182073926565713 +567 523 -.3953461220057067 +569 523 .30922910445773244 +574 523 .872055940404196 +575 523 .49745942741717525 +578 523 .39594984217131085 +583 523 .6311439932675869 +594 523 .6769856521062982 +595 523 -.7618692183818144 +596 523 -.004002316349068186 +619 523 -1.335456714632018 +627 523 -1.0543631360301697 +634 523 -.4162765027632445 +638 523 -1.724159404756614 +640 523 -.743678661381937 +659 523 .630338300758916 +666 523 -.3208558390234192 +670 523 -.8846583351888511 +678 523 -.09746354783634838 +680 523 1.0209995519563126 +697 523 -.4666853587293813 +703 523 -.16862491058558535 +705 523 -.7347541283125131 +736 523 -.7060756806697842 +749 523 -.5838604496402996 +792 523 -.6565147748379577 +799 523 1.9029509119104497 +813 523 1.941596135826976 +818 523 .7221004282169625 +820 523 .39419855598536896 +824 523 -.06989203816852405 +841 523 -1.4840814490797318 +858 523 1.0691550206729186 +859 523 -.08089127002242366 +864 523 .5458318427183232 +881 523 1.716548177786693 +917 523 -.5669916908794043 +945 523 -2.0589795054196833 +954 523 -.4771369432000654 +956 523 .23727203667303967 +968 523 -1.812292437469634 +972 523 .7933601874854027 +34 524 1.006297966773091 +41 524 -.49197626537853867 +54 524 1.7010814206853482 +57 524 .7989909454018278 +61 524 -2.6853317652452944 +64 524 1.346408660881913 +65 524 .4974176346967757 +81 524 .3512424716764049 +96 524 -.017095511975438793 +107 524 -.018580197452301994 +125 524 .009895617630465453 +140 524 .02172526077373016 +165 524 -.30381887380035744 +173 524 -.5798747789313288 +183 524 .727718728629382 +192 524 -1.0398092290057757 +195 524 -.6708621277509551 +197 524 -1.6372347608497007 +219 524 .6701356289982305 +222 524 -1.3812818101251183 +231 524 -.39919603456092234 +255 524 .33458156635137515 +260 524 -.06723188521395114 +266 524 1.4031518536798993 +279 524 -.457417810951502 +301 524 .09264881529158815 +326 524 -1.4902874817520875 +329 524 -.9667046438229191 +333 524 -.0019891839983773307 +336 524 1.0746934999075617 +337 524 .6616800543762287 +365 524 -2.922387306259583 +378 524 -.972332668483449 +392 524 -.19655943934245426 +410 524 -.11251015821518166 +412 524 -.5085955086874617 +413 524 1.367471633929698 +419 524 .3135876249217271 +425 524 .1952342827980323 +433 524 .07488661808588162 +435 524 .8401808193957714 +442 524 -.10544816676889988 +455 524 1.963249206763866 +461 524 -.3469783940591383 +466 524 1.7951341898926152 +486 524 -1.1338816136517964 +488 524 .9341687175286878 +499 524 1.8376848188413497 +526 524 -.6195594475375605 +527 524 1.6630823815329825 +532 524 .08455111207310965 +536 524 2.4899287498461153 +557 524 1.6279340733902141 +558 524 1.0198163698652059 +589 524 .1426770718981694 +614 524 .1737134159345907 +616 524 -.8866467897016308 +623 524 -.17860319055611024 +629 524 -.09565106919458592 +640 524 -.8113031076354841 +647 524 -1.0451106122960159 +650 524 .34457307517760755 +653 524 -.8097021535474409 +656 524 -.17332024313785638 +682 524 -1.3643280917153533 +691 524 -.36815997334122297 +722 524 -1.8402508960698918 +758 524 -.6094120036523104 +759 524 -.18054568448718128 +782 524 .17179616727154307 +790 524 -1.1645387673665677 +797 524 1.6262237343968875 +802 524 1.9067085382819517 +810 524 .17441586044783502 +837 524 -2.7413187585867775 +839 524 -.6597803114237254 +840 524 -1.3600256836450189 +850 524 .44301642215028414 +876 524 -.31764938326419345 +881 524 1.1928739214393587 +921 524 -1.720810948316562 +939 524 -.3165806381297137 +962 524 1.2610032330374457 +966 524 .4587764542268408 +995 524 1.5378517542679093 +996 524 -.9799055140641671 +998 524 -.9113253488629448 +24 525 -.5347454852049329 +26 525 .1727107450069225 +33 525 -.6646135073645093 +48 525 -1.5359126323474044 +49 525 -1.6243794197689738 +50 525 -1.5088693767767702 +86 525 .15020477291107545 +103 525 -1.114471196403617 +135 525 -.3110039215720721 +137 525 1.107123344278055 +140 525 .8680075087702405 +148 525 .9416012316626121 +150 525 -.16178974014216344 +157 525 1.5980026485587384 +172 525 -1.1993770592802429 +187 525 -1.4586617682692005 +224 525 1.5452444886779197 +228 525 .28141133681554886 +235 525 -.04773534742437162 +241 525 1.2180834010323676 +256 525 .5262077068756643 +263 525 -.694161273738959 +272 525 -.7227406134189581 +274 525 -.21365651758854415 +283 525 -.18479807986839908 +287 525 -1.1946331250701676 +289 525 -.19522586824025984 +296 525 .07677373671218747 +300 525 -.22260563026333668 +312 525 -.4318547103835712 +328 525 -.45307861520068976 +330 525 -.1850592243561495 +343 525 .9932112078894935 +350 525 -1.2241482339397811 +353 525 -.6988223977369002 +387 525 .4471478676175172 +389 525 -.21860923550385303 +393 525 .8592512887860788 +428 525 -.8709405195501364 +431 525 -.09062739565961717 +442 525 1.844986072366691 +457 525 .5978926232824883 +460 525 .9720772107043637 +465 525 .3741322291311733 +486 525 1.2866103290756061 +487 525 1.53234467194602 +501 525 -1.9957798366568356 +507 525 -.9619589515753233 +534 525 -.5677881697841863 +540 525 .5807587855216605 +546 525 1.417291858799177 +556 525 .05355367863796855 +598 525 -.3332226921414366 +616 525 -.05403856950926132 +617 525 .7069802482288057 +626 525 1.8594738071887122 +637 525 1.209286191245662 +660 525 -.04036818283873396 +661 525 -2.2796826615644092 +674 525 .4592024360691848 +680 525 .9998806691556423 +690 525 -.44644158974215065 +710 525 -.03819550695846968 +722 525 .4176748850785303 +755 525 1.3475893559517187 +760 525 -.2557705868719755 +761 525 -.19240747651350384 +763 525 -.6598599492284836 +767 525 .01866370929798622 +773 525 -.4764649185128322 +779 525 -1.2579129938346372 +782 525 -.5326368199765272 +788 525 .39123943413790235 +794 525 -.719067681550705 +797 525 1.0258189672385427 +807 525 .06491031629627536 +812 525 -.2730110803900744 +819 525 -.3535528451455534 +830 525 -1.4835557400141677 +836 525 .5314093519312751 +842 525 1.0268938404047103 +848 525 -1.3690834792290743 +867 525 .7226118623023268 +873 525 .1302064521744429 +895 525 -1.5809851802054669 +905 525 -.7263942100078462 +917 525 -.12689534262123736 +920 525 -.5386824483413435 +928 525 -.845450451298837 +930 525 .20271682727904383 +947 525 -2.2035448527672927 +949 525 1.851490747107057 +966 525 -1.8757583425185427 +987 525 -1.9399947435530305 +989 525 -1.3176108865976732 +996 525 -.4833191074720393 +1 526 -1.18556384986982 +4 526 -.022209562834232074 +15 526 .8990344377941916 +68 526 -.08297512394800756 +74 526 .47169682768220916 +80 526 1.0573607451950184 +86 526 .5992784163649401 +91 526 1.6776402432260125 +95 526 1.4868853287876866 +115 526 -2.408357910886323 +123 526 1.3204222993175736 +151 526 -.2779419674514213 +164 526 2.4782304518584097 +186 526 -.487185190398691 +194 526 -1.309907723489252 +195 526 -.2967082864170146 +196 526 .11005942058037829 +200 526 1.1644112967784994 +215 526 -1.6418999775843799 +217 526 -1.2436105737273775 +219 526 .9844106828605541 +231 526 -.6420578597810197 +243 526 -.07129176640355062 +257 526 -.11599777525777866 +263 526 1.0199912687699177 +271 526 -1.6988658887715222 +273 526 1.1163975570887665 +303 526 -1.5767692047811188 +313 526 .8213872988695033 +319 526 -.7701451191642495 +320 526 .9896851884465356 +332 526 -.5263633943248037 +336 526 1.7325226511006533 +339 526 .9716826453631416 +344 526 -1.5166352981934583 +347 526 -1.8276815807358877 +349 526 -3.0929358250768164 +351 526 -.37889414485176 +352 526 -2.2207056697575016 +356 526 .6847953540901784 +357 526 -.3323359754235473 +384 526 -.44969000146079274 +386 526 .597349432275175 +410 526 .5967286044731058 +413 526 -1.5622649210868071 +416 526 -.1596790267508663 +423 526 -1.2160635735007297 +426 526 .44028537608013163 +430 526 -.03952228786438905 +432 526 -1.0574316934497403 +440 526 -1.7401282286254343 +453 526 1.030659934853122 +459 526 -.9619511464938771 +477 526 -.01971357556669323 +486 526 -1.0780299405608862 +504 526 .7786146613797067 +508 526 .14920374590365368 +509 526 -.5466387766330923 +510 526 -1.1933822704548342 +520 526 .013879233850891806 +542 526 1.1898920879419863 +549 526 .9122197789577648 +550 526 1.8878861820722233 +558 526 1.2699016874207034 +569 526 .9170657406445388 +572 526 .03938851006626351 +575 526 1.1083331195058737 +596 526 .9106458819608482 +606 526 2.1133178214127355 +626 526 -1.5668869058113777 +629 526 .01412055199716275 +635 526 1.487258274929399 +645 526 .6839083724980485 +648 526 2.4704853351474703 +652 526 -.3578002029804242 +658 526 -.46125230873760475 +667 526 -2.1890045475769955 +675 526 1.509480935162859 +682 526 .3217127036256845 +686 526 1.8350225642156826 +698 526 -.38779809675781696 +707 526 -.10606382728995983 +714 526 1.0224778342553589 +727 526 -.42401300165797184 +739 526 .6148662496177049 +742 526 -2.136590014310432 +745 526 1.3602653890148912 +755 526 -.02267047790692015 +785 526 1.45220059691605 +789 526 .49465052451353886 +802 526 -.9448380411067688 +810 526 2.9581981769860892 +816 526 -3.203522381774637 +833 526 -1.8637008233997996 +854 526 -1.4987068261668326 +858 526 -.2860538721519105 +869 526 4.305913193120879 +878 526 .8040435245195895 +885 526 1.7785113284126384 +888 526 1.3257464710456162 +890 526 -.3086636029367681 +894 526 3.4985021714197146 +905 526 1.3108889915553552 +917 526 .21294857165324566 +922 526 -2.8731189962564443 +926 526 -.019854502414909908 +927 526 -.19805450540643482 +932 526 -1.3420466703295455 +953 526 -2.4137725377890753 +971 526 .48502830936405367 +978 526 -1.7511668369661493 +4 527 -.2541308873432097 +20 527 -.6643111188481235 +26 527 .1606823901723599 +29 527 -1.178296462839452 +32 527 -1.394734990424499 +34 527 .7850044995095857 +36 527 .11431349678489242 +38 527 2.1963423063943983 +57 527 -.5373163652843181 +78 527 -.6605984539723195 +118 527 -.40209840938036656 +123 527 .4981409810546248 +125 527 -.19844293748367514 +126 527 1.086061502191971 +134 527 .571530968564975 +136 527 -.8571966961704705 +139 527 -.48480780391880446 +145 527 .9393831431480224 +153 527 -.1612195312317197 +155 527 -.26172814603767713 +157 527 -1.4082654947098823 +158 527 1.8847095880287066 +170 527 -1.0519006839255602 +184 527 .05437464246594255 +191 527 .38397930873319985 +208 527 1.0381149285593934 +218 527 -1.435721144794924 +237 527 1.3524651021855572 +238 527 -1.1185086151818042 +241 527 .5596893902379146 +249 527 .024331358922742297 +251 527 -1.0991951940302267 +258 527 1.1445192227285377 +259 527 .15030719765839556 +267 527 .0861365042161405 +276 527 1.1226859128776427 +284 527 -1.3544163036219348 +296 527 .23654236506898296 +331 527 -.5907936671491139 +332 527 -1.0963783259581565 +351 527 -1.2668605082622473 +352 527 -.2794484035302621 +360 527 1.6036250931532363 +368 527 -1.0676626416833037 +370 527 .7466360667773775 +371 527 .1847955670796455 +375 527 .8599777190607156 +389 527 -.03715965836004978 +394 527 .9933900019887943 +399 527 1.8630778153226455 +405 527 .677728952230971 +406 527 -1.1959697785844434 +408 527 .42717655096002405 +447 527 1.4422304042780938 +453 527 -.2686722933481479 +476 527 .014466061367126096 +485 527 -.6889532569479622 +505 527 2.2213114938113785 +507 527 .2179058969488791 +510 527 .06840889379544322 +524 527 -.15874054489528455 +527 527 -.6091982048609219 +531 527 .7300395965300551 +539 527 -.14082726672093665 +541 527 .4639002887900478 +548 527 1.1038213790680111 +561 527 -.5456800271725338 +562 527 .27433935970014095 +566 527 1.553821800050437 +569 527 .028486095708012707 +577 527 .991261203526797 +579 527 -.02452606771764869 +582 527 -.15230207899728876 +603 527 1.0307166768169305 +636 527 .7020839100796884 +639 527 -.393778987724545 +640 527 .7225987508466306 +644 527 1.0242287629452287 +655 527 -1.2428530171796475 +664 527 -1.4023574514753434 +667 527 -.9500489819998033 +672 527 -.5537008304975174 +673 527 -.6657499360622747 +677 527 -1.4272871312480295 +686 527 .21447172311036833 +690 527 .6613329376243028 +699 527 .8071491940590354 +711 527 .5133765283552414 +712 527 -.17698562629673298 +721 527 1.215604447832965 +740 527 1.147447985704581 +758 527 1.2296331975809596 +760 527 .8817649533089187 +763 527 1.0330909475290015 +774 527 .08749401933367351 +780 527 .28415298810444195 +788 527 -1.4611026546667627 +789 527 -.8074085961217674 +792 527 .9350516539600999 +795 527 .9301463951662454 +806 527 .05899517679000192 +818 527 -.8723664059648609 +823 527 .7871804306583362 +829 527 -.7376830255080276 +836 527 -.41206118546637627 +838 527 -.9963326108719016 +862 527 1.4107908646163647 +868 527 -.5306521947975799 +887 527 .08612903167000668 +890 527 -.6306360663240037 +900 527 -.6273535519610891 +904 527 -.5182454688487299 +916 527 -.6527786575606465 +921 527 1.057748444344082 +930 527 .7423013090245073 +935 527 -1.3275420612264388 +936 527 1.6898199027031098 +942 527 .48456791660751436 +949 527 -2.5566715318658955 +962 527 -.3918275947789665 +985 527 -.6490252749780274 +989 527 1.2560732202785934 +998 527 -1.0804083577727845 +6 528 .356501945538202 +29 528 -.09799787181914363 +30 528 .749019327149622 +44 528 .3585852051936181 +49 528 -2.2442171094217094 +70 528 .24884465774256137 +71 528 .6282982076769328 +72 528 -.873993658109946 +73 528 -.7619619934579404 +77 528 -.25605549133439026 +78 528 .7093288308590909 +92 528 -.9487250740531273 +107 528 -.3063846938595876 +140 528 -.10742995630593388 +151 528 .08296292535789393 +154 528 .7893160269291004 +175 528 .1368178405337465 +194 528 .4027744617843158 +199 528 .22380175523058898 +225 528 -1.6359113057694856 +230 528 .23296869890276958 +254 528 .3464827718904117 +262 528 .41024735923577627 +267 528 .548857835580215 +320 528 .15841649466780242 +322 528 -.553110500998352 +323 528 .629996794966021 +344 528 -1.067481053118817 +347 528 -.6205302912024049 +351 528 -.4089517541208299 +359 528 .04031246403504163 +363 528 .03851182992952656 +372 528 1.0592869174558581 +374 528 -.09002041609455527 +390 528 .3912160609653265 +396 528 -1.0406153110957028 +405 528 -.3491644521453479 +420 528 -.9355607657773715 +424 528 .3267367369766617 +433 528 .8571961071794487 +442 528 -.4449397832113486 +451 528 .24464250145903854 +487 528 .36329604715077046 +489 528 -.8443443770768637 +506 528 .35560620883097654 +510 528 -.5136624301728484 +526 528 .7649025349030588 +529 528 .7728074818941449 +549 528 .5043105775558522 +572 528 .5974714034286723 +580 528 -.8121495607765122 +593 528 .6050060639027514 +595 528 -.045362466452013486 +601 528 .12847610138285515 +640 528 .9001128898076725 +641 528 .3137209993260979 +648 528 .9797643487530344 +664 528 -.38882851476135527 +666 528 -.9795410476321853 +667 528 -.6687036704158309 +697 528 -.8378336482327249 +706 528 .6007128317412374 +709 528 -.6875951258146503 +710 528 .15155028795860107 +713 528 .9222991377263015 +718 528 .32245686538102936 +726 528 .04533502139113574 +731 528 .07826585012475824 +749 528 .17272152132167376 +754 528 -.7884911449843296 +759 528 .9627469078371823 +768 528 -.48671462818834227 +772 528 .5667661468000202 +777 528 -.5813442096300554 +801 528 .1327312185039745 +802 528 -.07804425221260927 +808 528 -.39747337130458205 +828 528 -.5504829357075472 +830 528 .29916517788604824 +840 528 -.5254233864952846 +861 528 -1.71610307246461 +889 528 .6181656285818442 +891 528 -.5897038583089692 +898 528 .9796172797322038 +902 528 -.9048239419712125 +914 528 1.100572553606402 +929 528 -.36522161932277036 +948 528 -.4870415919395892 +974 528 -1.5270300848382676 +978 528 -.08588437328605585 +979 528 .2830466770851301 +981 528 -.2022781087808304 +989 528 -.5529334935546403 +22 529 -.25470553043014377 +26 529 -1.675651121710873 +36 529 -.38053001416446813 +46 529 -.025347686686228846 +66 529 .5932011053364539 +67 529 -2.1416727704973075 +78 529 -1.2925512381045683 +90 529 .882411000005088 +93 529 1.420547915894243 +118 529 1.126400849140424 +124 529 -.7144407171905011 +125 529 -.01385746763841815 +129 529 .33865443693745656 +131 529 .04052698388548194 +132 529 .36661009709617476 +139 529 -.721418862097704 +140 529 -.34645859232455833 +141 529 .4890125460237938 +150 529 .132645878276983 +151 529 1.944450787635617 +152 529 -.5331936379314794 +158 529 .6974893766623319 +162 529 1.3104533439538004 +170 529 -.9625014491555717 +171 529 .4290048055391138 +177 529 1.2132241174845202 +185 529 .5685032495445879 +187 529 .07052135221041467 +191 529 1.2808121440612958 +196 529 1.2682712819308277 +227 529 -.8687081469563736 +234 529 -1.8209804024796945 +239 529 2.020181466519959 +241 529 -.792236831591268 +245 529 -.8728235068674802 +253 529 .7952175882783185 +266 529 -.8468132900769224 +268 529 -1.2018568794066236 +269 529 .5367903233786414 +272 529 -.24315872844019523 +283 529 .3568441972581481 +289 529 -1.3807942074095738 +297 529 .20311806165692248 +314 529 -.4716156022042286 +322 529 2.2688172560187816 +332 529 -.7584334420069744 +343 529 -.6097143728261866 +357 529 1.715984347958227 +360 529 1.3926228922169028 +367 529 1.0757933386405232 +372 529 -.2668529433120654 +373 529 .6666229290458989 +378 529 2.2339828340931 +380 529 -.2647980520961215 +393 529 .5068466358711263 +400 529 -.7829500410822452 +410 529 -.8273695840257623 +413 529 -3.4151308718270545 +419 529 -.06342501915313739 +420 529 .18351407796009467 +433 529 .8873493154567627 +438 529 -.21913098169395406 +445 529 1.2525660156752652 +449 529 1.2459524265042308 +464 529 .4161498357814442 +466 529 -.5569806969920268 +469 529 -.022512048695622427 +474 529 -1.2947340999443142 +480 529 .8516646591045486 +498 529 .18796911111806675 +516 529 .10758669269193044 +517 529 .6244021480063021 +520 529 -1.5519462300541957 +531 529 .5206295963835751 +532 529 .08058897208890259 +534 529 .7897557818686362 +537 529 .027437024077223718 +551 529 .27594282074423 +561 529 1.0322063284006384 +563 529 -.5995059053414635 +585 529 -.705122333975039 +594 529 -.507220989414613 +603 529 -.5583823406447992 +617 529 -.29620991600004226 +637 529 -1.3515602795535622 +650 529 -.42465692796666854 +658 529 -.15580616655570062 +662 529 .855591249292357 +665 529 -2.086977119814452 +667 529 -.5863797890488976 +677 529 .2604385497020797 +682 529 1.2842008737555581 +687 529 1.4402283895925816 +692 529 1.1999039654681627 +701 529 .2186456650061592 +712 529 1.8102539390331596 +728 529 3.6257490873730482 +739 529 -.14972151886610777 +740 529 1.2541057320282267 +756 529 -2.5049312476043246 +765 529 -1.852182336456354 +767 529 -.9960010479970156 +768 529 .6563346853639399 +770 529 1.1253356949909696 +806 529 .5024564145901147 +809 529 2.556860864745409 +816 529 .5326972936247636 +837 529 2.978442598788915 +856 529 -.22260282706297368 +860 529 -.9251506140674937 +875 529 .07074856816715148 +879 529 -1.616492610188219 +894 529 .06436912547404605 +895 529 -.4029025046480589 +896 529 -1.8265737779414633 +930 529 .6433326964808826 +946 529 -.7899533744245777 +966 529 .13991932787264721 +968 529 .59509123124292 +978 529 -.7597049309945327 +991 529 -1.0114541253225235 +997 529 -.5619848848478595 +14 530 -.9101638688348297 +25 530 -1.2166133277110847 +42 530 -1.3960756533390282 +46 530 -.6670716512579268 +49 530 -.12617105594861702 +54 530 -.8992122329921489 +79 530 .2769418291736195 +88 530 -.8247197623234536 +93 530 -.6029450867741042 +98 530 .8213924257278796 +103 530 .5142732958404773 +110 530 -1.0025007763264553 +120 530 -2.2158064817722343 +124 530 -.21295782277618128 +131 530 -.0938211358713081 +133 530 .21964097818336492 +141 530 .4931627161942217 +150 530 -.1721574171465026 +166 530 -1.8040002124119212 +168 530 -2.213377769960006 +170 530 1.060666327459043 +172 530 -1.4533747703116482 +179 530 -.46111846655864175 +196 530 2.0495205120541877 +201 530 -.44170514515941445 +236 530 .6948089773173067 +237 530 2.132974274055622 +251 530 .8090191971617808 +272 530 1.4304480357548734 +289 530 .8540551949487256 +293 530 -.2542674114002275 +301 530 1.4105239588225236 +334 530 -.24198508092333562 +339 530 -.5990194009659728 +348 530 2.2075815383998556 +351 530 -1.0195892501798733 +365 530 .6128451562240328 +377 530 -.8347580600338455 +397 530 -.36977503562609 +403 530 -.6316313509395635 +406 530 .6316310259165915 +412 530 .9080992567502739 +418 530 .17396597256418125 +433 530 -2.449220376749712 +439 530 1.7652376401473104 +449 530 .1961723012857242 +454 530 -.7366267197891981 +455 530 -1.7315827983623453 +458 530 .08447771474218752 +461 530 .8709837390217554 +487 530 .7232686423422661 +494 530 .05154554311234953 +505 530 1.5789210344031184 +515 530 1.3996798232191172 +520 530 .7722491189869963 +524 530 -.6102847108575655 +534 530 .34484234281081305 +556 530 1.4422277094865903 +567 530 -1.1107501739316539 +575 530 -.9384508222784553 +598 530 -.0897205039145135 +604 530 .26333681304816575 +610 530 -.23176291769175386 +613 530 -2.0155198828515477 +622 530 .6893865839653933 +654 530 1.5207873775694962 +662 530 -.4537720071662558 +664 530 1.122054831482804 +677 530 -1.1929250754070186 +678 530 -.5312570561263562 +684 530 -.5810557583588172 +686 530 .8486132724540973 +689 530 -.9327974206365863 +691 530 .6218263083688 +700 530 -.8768436712899047 +708 530 .011086733180448893 +711 530 .2329050833545643 +719 530 .5832248724290192 +721 530 1.4737405595519508 +733 530 .037853327975635 +735 530 -.14157965422962207 +738 530 -.3873369918270545 +767 530 1.5254280167252428 +769 530 -1.2874918859563316 +772 530 .04773140690775381 +774 530 .8628857689077456 +806 530 -.5320625656340116 +811 530 .7349479332194047 +820 530 -1.8872763245197566 +821 530 -.32868554503711755 +823 530 .0241049242777477 +829 530 -1.7270126234821868 +857 530 -2.1833504793989302 +884 530 .9533013579814889 +896 530 -.32977155358463484 +899 530 -1.9208409498715306 +904 530 -.2657398400455053 +918 530 -1.4235807968813976 +923 530 -.1686582715617226 +927 530 .8748857805544861 +934 530 -1.3069806754197992 +950 530 .4909073213412673 +964 530 -.17349758125387588 +986 530 1.138932891279996 +987 530 -1.912973827243324 +994 530 1.4581725690433798 +9 531 .5095185717565245 +13 531 -1.2127881333874082 +23 531 -.35858771603132017 +24 531 .31633479395205755 +32 531 -.5451599181833678 +36 531 -.5863385647602841 +40 531 -1.660467861966865 +51 531 -.4204342660143719 +56 531 1.0491441514954476 +76 531 .8159292287903394 +77 531 .2607119640473098 +79 531 2.266711393522882 +87 531 -.5337315440762067 +104 531 -.19730560216025622 +115 531 -.06934238194829473 +116 531 -.42660285861049857 +117 531 -1.207394580235758 +118 531 1.0032657761150767 +153 531 1.6651935654451964 +161 531 -.29677262894602635 +165 531 1.176289699714202 +172 531 -.426708223782261 +179 531 1.5731636339704012 +200 531 .663900983474496 +201 531 1.6056998918239027 +202 531 .6298398776365208 +212 531 -.895687028101762 +214 531 -1.2959116998811973 +220 531 1.2318958727745986 +225 531 1.3183904198044645 +226 531 -1.1858614940431638 +228 531 -.5580145133566503 +254 531 -.10656175524690888 +256 531 .6597540637358572 +273 531 -.43599128132234527 +288 531 -1.7054800815782007 +290 531 .009472284699463988 +295 531 1.3333246476481009 +300 531 -.07293047270415014 +306 531 .9040837910828868 +307 531 1.0731511490789933 +327 531 .32528545905656203 +356 531 -1.5700019343637528 +370 531 1.172044164752743 +371 531 1.1350752241798534 +399 531 -.9551934261309565 +412 531 .7047086892589111 +415 531 1.2522068594411309 +418 531 -.5437792757304828 +421 531 -.5775430717789487 +423 531 -.534790699645995 +432 531 -.8670573336226091 +439 531 -1.0867319435673395 +443 531 -.07492690118812759 +454 531 1.2314349307641113 +469 531 -.25693560523522135 +481 531 .9518907316318287 +483 531 -.6888500961058274 +492 531 .14132936321857953 +496 531 .7455030192886013 +513 531 1.5728975375278587 +520 531 -1.4480534086272634 +536 531 -1.1660433556087972 +545 531 .548207713144991 +560 531 .9314653956679602 +563 531 -.655842023599663 +580 531 -.03831051451474371 +596 531 .02559572566468446 +617 531 1.1459913518428435 +625 531 -.85787219176774 +628 531 -.7894028942465203 +647 531 1.1013293364563586 +650 531 .5254197194564408 +667 531 -.24456119214327018 +672 531 .5021880757657048 +678 531 .1519703605975624 +687 531 .7635290948208926 +690 531 1.6231367739453975 +691 531 -.5557554703866096 +714 531 -.012209387703510394 +722 531 1.1515351200668686 +728 531 4.630680342456396 +729 531 -.15182933790422332 +730 531 -.6916232637365143 +748 531 -.960595855308066 +753 531 -1.553945587395594 +762 531 -.9938716590420175 +776 531 .6953466859868848 +777 531 -1.5144152041007446 +782 531 -.039134553039616424 +791 531 .4292013950926889 +835 531 -.7837845589187662 +841 531 2.026854435543688 +852 531 .021846603218711347 +873 531 1.8523904946151475 +876 531 .7764752137247324 +894 531 1.4326957149590474 +917 531 -1.1262002028237523 +928 531 .5045398314621297 +943 531 -.3494125813880563 +963 531 -1.3724611573996606 +987 531 .8176450332061659 +3 532 .7338675203192379 +26 532 -.35410438101554287 +34 532 .11453661081499568 +38 532 -.061230913244349705 +58 532 .17864701724638268 +63 532 -.03522153574202593 +73 532 -.3514070245947214 +78 532 .1581522348119998 +81 532 .26093552942599374 +105 532 .05654926869439584 +110 532 -.16760573614075652 +132 532 .28722715575830327 +155 532 .3025965563484383 +195 532 -.06454995376470418 +196 532 -.4842233582692458 +200 532 -.19977122555623536 +240 532 .5158603673550813 +264 532 -.4113180518888118 +270 532 -.4550547169012352 +292 532 .7424063663165992 +300 532 .01790768464194696 +305 532 .015216567036065845 +313 532 -.07911077922484804 +353 532 -.22287866971788484 +386 532 .08028442995836603 +391 532 -.5763093471750542 +417 532 .32948295836907154 +432 532 .06303378201714165 +437 532 .1886038005817301 +441 532 .23756616684408458 +445 532 .1135551763419248 +455 532 -.24473458222421096 +460 532 .5057687695939215 +506 532 .019022485893371226 +526 532 -.7197310278357846 +542 532 -.6998740420209393 +543 532 .4235296867122945 +556 532 .37347430509548973 +572 532 .06996066110054443 +584 532 -.4827607547491915 +615 532 .673426312189472 +618 532 .6986220353873915 +623 532 .8506255971697729 +639 532 .4881216530764982 +640 532 -.3930754007544605 +656 532 -.745171123924623 +661 532 -1.600411002908391 +682 532 .1550176365810549 +688 532 .24588469946996896 +737 532 -.06763624262805684 +763 532 -.7390806835343605 +766 532 .22185135827433788 +774 532 .2740017324274658 +776 532 .2775522295273442 +795 532 .17239976319230885 +803 532 -.6125581941090327 +820 532 -.056095950076918144 +832 532 .31726299031266114 +834 532 -.5096211317796586 +839 532 -.10096243365772048 +841 532 .9358539508477118 +847 532 -.3923392271664994 +860 532 .6701477085779467 +869 532 -1.3927263488747121 +874 532 -1.047491991777681 +905 532 -1.4785010160937795 +917 532 -.2057017128978976 +934 532 -.32347140226312415 +941 532 -.8542249593378131 +948 532 .06612438291962851 +958 532 -.4572969933406176 +963 532 .20336008565499633 +974 532 .16663913450763873 +976 532 -.09189511995626322 +990 532 -.06669473479709816 +1 533 .018924930624584266 +4 533 .5926018152675352 +8 533 .15488439887700198 +14 533 .7809864690747255 +17 533 -.7626357214386357 +46 533 .399641260793318 +56 533 .4870881223445753 +58 533 -1.7958656529534935 +78 533 -2.0960454169121063 +89 533 -1.0249332349420264 +103 533 .7296638279607411 +105 533 -.1308637565226894 +107 533 -.4815668163460683 +112 533 1.3213601062551452 +121 533 1.2835443209483481 +122 533 -1.4282800856073514 +140 533 -.13577838281892352 +147 533 -.9966755175305333 +150 533 .7396505475553189 +153 533 -.20442358307198913 +190 533 -.6567863733360363 +210 533 -1.0817173369821982 +232 533 -.14378521349224538 +234 533 -1.868435916255659 +239 533 -.6529485895471182 +241 533 -.9515244529797726 +243 533 -.45405643829550024 +258 533 .22860961229285676 +265 533 -.41779042347282613 +309 533 .7865035481347977 +310 533 -.15127520700881988 +349 533 .39315010672514883 +364 533 -.13245212657580993 +398 533 -.7895198215677061 +413 533 -.5613290858198503 +420 533 -.7192482496008017 +423 533 .16807567894686293 +429 533 .420883775143078 +435 533 .5388786565309202 +453 533 -.6160046217263428 +458 533 -.6043717234759955 +462 533 .2480914096903014 +480 533 -.9016586783373994 +495 533 -.8592038900634655 +509 533 -.1330106924567553 +532 533 -.40050610846579326 +562 533 -.37901803381943955 +581 533 2.132402985368529 +588 533 .8566115264649459 +589 533 -.05099101235229191 +607 533 1.4841404826668299 +609 533 -1.3307541894054173 +617 533 -2.5890153203777904 +621 533 -.8239630839016033 +622 533 -.26297413258899155 +623 533 -.39025310675072433 +624 533 1.1960890165826574 +697 533 .9772858689316841 +701 533 .988942288680437 +710 533 -.8925558137709569 +717 533 .18913488899954586 +724 533 -.3628377068433538 +726 533 .17553380885573008 +731 533 .3010793030559487 +737 533 .2892577288905398 +740 533 1.1355983209481446 +753 533 -.12888770174078348 +768 533 -.08468087493128647 +776 533 -1.8478246081712069 +789 533 -.7197927996996041 +800 533 .3969709764744505 +802 533 -.16975544669706938 +803 533 -1.2334366852281993 +816 533 -1.0121522222648356 +824 533 .509638863799722 +837 533 1.1297354850708863 +857 533 .06659598431725469 +868 533 -.5574195596451037 +884 533 -.9980121331833625 +921 533 .8128525694371755 +928 533 .6833072222851698 +935 533 -.5799889293294961 +938 533 -1.3691573215004336 +950 533 .7832585078830647 +961 533 -.641575689531061 +982 533 .9420002966091525 +985 533 .5741096756337605 +986 533 1.3566205654205954 +987 533 2.4744303953567144 +13 534 -.3448219393815353 +16 534 -.12245833568893544 +19 534 -.8840203702545298 +20 534 -.5141365328531652 +31 534 .1865601666308636 +38 534 .27129186174463177 +41 534 2.8203984515335976 +51 534 -1.5450742550971823 +53 534 -.7440576527188723 +60 534 -1.3514708682464989 +63 534 .2733909886955713 +67 534 -.560216002800171 +75 534 -.6918732891248485 +84 534 .22037756598317843 +127 534 -1.122297387625057 +182 534 -.1920177362732457 +183 534 -.1366757919471018 +191 534 1.3704261548165673 +201 534 .0422135960619547 +217 534 -1.8239911644860858 +225 534 -.020315764367333178 +226 534 -.9844867714457475 +228 534 -.8333520817963478 +241 534 -.19401757963199326 +242 534 -.8663143110722833 +246 534 -1.6018303299530807 +252 534 .21635538907226154 +262 534 -.29192189027108356 +266 534 -.57690883621262 +272 534 -.4551601779998287 +275 534 1.320268439982803 +277 534 .7208928150481526 +285 534 .07300692299084777 +311 534 -.470647371976193 +321 534 -1.8454772274012496 +325 534 .020551707368567457 +336 534 -.29792637623151486 +350 534 -.1306579799348745 +353 534 -.3413839902812509 +363 534 1.5608607196907622 +371 534 1.0472367109821437 +387 534 1.0409464052706416 +395 534 .7487851281220455 +403 534 1.3529737098872925 +444 534 -.5621382252121996 +448 534 .8328840078194643 +458 534 1.1881057051618822 +472 534 -.26223597057517034 +487 534 -1.0471990558995914 +512 534 .9797010663274258 +514 534 1.251931690302385 +526 534 .20732705333673096 +534 534 1.0361657684493344 +537 534 -.31605461190264933 +543 534 1.4290970740722995 +544 534 -1.7619941872319753 +572 534 1.01219573345844 +594 534 -1.1138486766228088 +607 534 -.9822071915416342 +613 534 .09753577258239457 +619 534 -.20785089775661184 +625 534 -1.8078195485653623 +636 534 .22039147778816576 +650 534 -.31722266553557166 +652 534 -.47466453727035 +658 534 -.13177806919567805 +662 534 1.0290178791622306 +668 534 -.4678166202391069 +685 534 -2.123218376619118 +690 534 .7962604079156832 +716 534 .9554245301728633 +722 534 .40052444739357246 +736 534 1.233400725981732 +742 534 -.6945038385717739 +753 534 .02132018408123297 +768 534 .05710351766554058 +769 534 -.9990519189973841 +778 534 1.8755264515284384 +786 534 -.0573050606634445 +794 534 -.6011621732535084 +798 534 -1.0026286269929998 +837 534 -.10813169074044754 +842 534 .6534577539700523 +846 534 .3539349097003355 +849 534 -1.853555787614856 +863 534 .210241860478086 +889 534 1.5943894852008806 +902 534 -.9359267508641035 +913 534 -1.2277379557744126 +930 534 -.5818757409671335 +934 534 -.4671505938975819 +967 534 .11863035542695917 +982 534 -.46481457273925164 +992 534 -.13270805654632037 +18 535 2.3481785915107274 +19 535 -.00021822061476560461 +21 535 1.0799800915127222 +27 535 -1.037617513558753 +31 535 -.17139730012549056 +36 535 .7586273920532562 +50 535 1.8137065879816057 +64 535 -1.0999433417957611 +78 535 -.4192019579735859 +85 535 -1.8094028595108136 +90 535 .06473843030243662 +98 535 -.9800969778396831 +100 535 .43389899832403245 +120 535 3.051210017586069 +164 535 1.7763163028242752 +169 535 .6096881823227697 +180 535 .3828539042089828 +183 535 -.36006521917670337 +189 535 -.8102346069279714 +190 535 1.7900623054681934 +193 535 .3637705803615552 +195 535 -.27515461004941744 +196 535 -1.0573550108691534 +206 535 .004636731125328877 +233 535 2.1733975408294817 +248 535 -1.1523945321239115 +249 535 1.5089519262162694 +252 535 .1683285613341819 +259 535 1.3349776592096723 +273 535 1.479789863402389 +291 535 .7012782773732833 +296 535 .10482114111155359 +332 535 .16181482274525102 +339 535 2.2346218539996245 +341 535 .701430888100047 +366 535 -1.1698453991873854 +384 535 .5488476666537925 +389 535 .9388365442922905 +409 535 -.5083091322623695 +414 535 .3568344977273609 +428 535 .8882832000898144 +467 535 -.46088910614365897 +470 535 1.6068337360993317 +486 535 -2.577970474709917 +500 535 -.42510381813885484 +511 535 -.008068280500624775 +516 535 -.5711515829638858 +526 535 .6358282480573979 +536 535 -1.6977095971801972 +542 535 1.4053330507238648 +549 535 .001976638375230516 +554 535 -.0173091588907852 +557 535 1.4564645764201296 +563 535 -.10546609415031516 +564 535 .4961520600324819 +572 535 -.4274552962368983 +580 535 .11348506641229819 +583 535 .5753409546481982 +602 535 1.0528628469938983 +610 535 -2.4937397071572907 +627 535 -1.3437229537912643 +629 535 .5851693018256205 +650 535 .9914569630213983 +651 535 .5771322290318113 +663 535 .38970169561851814 +664 535 .7215940018015994 +673 535 -.4578941550747188 +676 535 .646407783569682 +685 535 1.162476391463815 +690 535 -.27009088177509694 +705 535 1.6041963286224732 +709 535 .2396489871372726 +730 535 -.48013745058437485 +741 535 -.12092182941070985 +769 535 1.3224604044545964 +771 535 2.5918808095422534 +778 535 -2.2145120734280446 +779 535 .4159612527803258 +797 535 -.7085719424685059 +799 535 -1.275881337974702 +806 535 1.424409450570884 +822 535 -.47130791896330704 +843 535 .9192574675935288 +852 535 2.4752513161486953 +864 535 -1.2124597662832437 +865 535 -.14074497084674042 +869 535 1.7741750151432307 +892 535 -.17521874268278206 +897 535 -1.0157532405214098 +903 535 -2.2420821281064534 +922 535 -1.8051067403444154 +935 535 -.2816764227228593 +940 535 .8327506220452843 +944 535 .01796607840513205 +945 535 2.130616796848044 +989 535 .46823489778156263 +997 535 -.2141093291761714 +5 536 -.3022279844147233 +11 536 2.277803473069894 +13 536 -.6618813378420043 +41 536 1.3508160905201163 +52 536 .20680195596983345 +60 536 -1.3329398795444054 +64 536 2.186575633648784 +79 536 .26953596574162536 +87 536 -.3679521416553988 +89 536 .48573460136611707 +97 536 -1.4697916379208498 +101 536 1.1080712947008822 +103 536 -.20301821181101748 +104 536 -.7664148594663143 +114 536 -.6328090739437495 +141 536 -1.5418083228380581 +163 536 -.0731355516074608 +168 536 .9770054885549025 +196 536 -.6549080589500418 +197 536 -.5066156289815202 +198 536 -1.599769411661155 +202 536 -.3810851828977948 +213 536 -.6709126184774704 +231 536 .2849054252730542 +235 536 .7585025696369813 +236 536 .5160017081868398 +244 536 -.6018921348357449 +261 536 -1.0145650230376004 +285 536 -.8835921591607325 +299 536 -.0260749936310882 +308 536 .42802284279993796 +323 536 .5565428647898741 +335 536 .4988436800749866 +343 536 1.0780481443879342 +352 536 -.6881256631050524 +379 536 -.11439353265406346 +382 536 -.5781926726735143 +387 536 .04351941539898824 +391 536 .18036180464888318 +393 536 -.3712979070263452 +402 536 -1.3786297679198116 +410 536 .21159315750109436 +438 536 -.058372255770632 +440 536 1.2597769476268192 +448 536 -.2924070677353261 +477 536 -.41961736319634085 +487 536 .1968956063957918 +491 536 .0586077535351497 +519 536 .3305864844408963 +532 536 -.22157314848474674 +541 536 1.59470029066404 +563 536 -.21524930759952718 +582 536 -.17152735677617478 +583 536 -.4895396982458001 +600 536 .0015790464030527585 +605 536 .20478446436081066 +615 536 .5081982457169563 +617 536 1.5608024525871744 +620 536 .2668458321236246 +621 536 -.23055810514783448 +623 536 .346507893518347 +644 536 .8774302727819617 +670 536 .8410983191354691 +672 536 .5672836353888893 +677 536 -.11822279691809305 +680 536 1.1366403210409142 +693 536 .1281248094810826 +698 536 .31740469610776767 +702 536 -.7266251152294302 +708 536 -.2957968861317065 +715 536 .06614251362522933 +718 536 .42170162254193466 +724 536 -.2085644750103069 +742 536 1.3526052337924952 +752 536 .35007505541823336 +780 536 .1952401300738352 +800 536 -1.0576619364897224 +818 536 -.14415457079544855 +828 536 -1.0289941757285825 +830 536 -.6753794762012981 +836 536 1.0038884409852251 +838 536 .9937754619296633 +851 536 -.6458471751022835 +854 536 -.6372307357652409 +857 536 .5212600355356899 +858 536 .8030807189546014 +860 536 -.02385875930759177 +861 536 -.7286033885367433 +862 536 -1.303458345894621 +864 536 .18139701134642963 +879 536 1.0221720680328548 +881 536 .9880230340561826 +891 536 .23423777280643035 +893 536 .519929334844763 +900 536 .26309554595274076 +904 536 .129545577734852 +911 536 -.7862564939874963 +924 536 1.0463481110905635 +925 536 .4755007426589438 +944 536 -1.0299004801912233 +983 536 -.07965415470181958 +987 536 -1.2823404683625155 +989 536 -1.3435000995275612 +994 536 -.8118713198217198 +996 536 -.5688073309416488 +998 536 .9618316812957637 +13 537 .39217170555856107 +51 537 .20828862686934724 +75 537 .9554125376108393 +77 537 -1.3737899364755128 +79 537 -.16747266506904307 +90 537 .519446758040061 +105 537 -.4813641255260589 +128 537 -.4646453103287 +136 537 -.32054230187749677 +146 537 2.1616434614673317 +151 537 .4852966503200558 +159 537 -.029440869605014866 +167 537 .02036244264382639 +173 537 -.32126340375537876 +196 537 1.8265959606237268 +202 537 .4847681458808169 +212 537 -.7869453672455797 +221 537 -.5782997097827909 +224 537 .6838639853772543 +231 537 .21127476367188863 +242 537 -.40281806608382836 +260 537 .6182064045872496 +266 537 -2.5311881646642425 +269 537 -1.301950230103464 +282 537 -.23557190862269092 +286 537 -.19002211911703765 +317 537 -.5364988606217204 +324 537 .5319419847476732 +329 537 -.8548492071649436 +339 537 .6541940138719273 +340 537 -1.127979421514573 +349 537 -.6983506513047775 +356 537 .9391561558065689 +359 537 -.11754073853165126 +369 537 .6802314407236655 +385 537 .27489694327138003 +389 537 .6637717990349995 +408 537 -.8624845515365636 +414 537 .7409471703436119 +415 537 -.4487535126118749 +418 537 -.4663509484383304 +423 537 .05535913143970346 +472 537 -.10678140199523989 +477 537 .22927469481429053 +496 537 -.3540304331783668 +503 537 .4755097244051763 +505 537 -1.169204081239526 +533 537 -.7899018711428094 +544 537 -.3737333468762779 +569 537 .27866831309770734 +572 537 .29298262804808006 +575 537 -3.205201952306263 +584 537 .04470637327633291 +592 537 .9836042375945914 +598 537 -1.9374751965055423 +607 537 .7524256053101136 +611 537 .7279173569503093 +619 537 1.153807145937977 +644 537 .08030577534075738 +647 537 -.36121128416213694 +649 537 -.1732964146213878 +652 537 .11961233013405619 +656 537 -1.6256926111310441 +681 537 .28880139443941705 +696 537 -1.42929004256408 +699 537 .13264344737682915 +704 537 -.433049207191152 +723 537 .36122023402602293 +760 537 -1.3149179131933377 +773 537 -1.495925140098569 +796 537 .9439730932807091 +832 537 .9764940659044941 +834 537 .2137644892980144 +838 537 -.20625848762597496 +839 537 -.29924326901191034 +843 537 -.8703231476015791 +855 537 -1.0495795764056968 +857 537 -.8184319356505179 +863 537 1.3700705953218306 +865 537 .08820256562489076 +866 537 1.0215300041964528 +870 537 1.41767697844683 +881 537 -.5388775944295997 +904 537 .5083566502581849 +912 537 -1.6486077147571507 +924 537 .006289263061920854 +929 537 -.15967290402330095 +944 537 -.02152800618414777 +947 537 -.8928566598785824 +954 537 .17527750938361447 +963 537 -.3808025930919429 +966 537 .08019717944166291 +968 537 -.6248600718303717 +981 537 -.5047232832489225 +996 537 -.19202653341031006 +999 537 -1.2317039331907196 +1000 537 -.5874046170107021 +13 538 -.7759438611869041 +21 538 -1.0281142285884226 +32 538 -.343089367739032 +44 538 2.207976110439952 +65 538 -.710453468707248 +82 538 -.9877939781948333 +94 538 -.2946884879584871 +95 538 -.3415361336208977 +99 538 1.2121184377381005 +101 538 -.9922992847335474 +122 538 .95569445070103 +123 538 .791749629988769 +139 538 .5570653844986649 +148 538 -.4244624992381086 +150 538 -.6187811028646382 +155 538 .8469886166870197 +158 538 -.4545054313312683 +163 538 -.2869395185291808 +168 538 .13538081020031106 +170 538 .09549044628546621 +183 538 1.0979658087520985 +191 538 .798583731040652 +195 538 .8635553301413746 +208 538 .37831967627387253 +210 538 .1574417174661099 +219 538 -.2330502901814428 +231 538 1.4491407098241922 +242 538 -.6332842201753288 +245 538 -.467203326876745 +246 538 -.5317108932576122 +268 538 -.09757638718394424 +277 538 -.9994589819344577 +286 538 -.6200815244638723 +289 538 -1.89455232723464 +309 538 -1.0409977610435492 +316 538 -.938863199055879 +320 538 -.11761156107701291 +340 538 1.5567676410235718 +345 538 -.5345550642133913 +363 538 2.1879890986625745 +375 538 -1.6344606039218346 +378 538 1.7421764182449884 +381 538 .26802469294528436 +390 538 1.5498972710602472 +402 538 -.5651959756942364 +411 538 -.14313919583540405 +420 538 .548151405041336 +423 538 -.33771121487494404 +424 538 .1541217700133481 +429 538 -.6458072644400409 +446 538 -.4878670414530808 +449 538 1.1905170487016452 +456 538 .24714817799705902 +479 538 -1.1496866800488508 +481 538 .6421531137308898 +490 538 -1.4058281568937179 +501 538 .19534125049345044 +511 538 -.8000352488778171 +514 538 -.16791555252984905 +516 538 .3266390582650184 +523 538 .31598028522733995 +525 538 -1.6100051848406165 +528 538 .776409057653726 +550 538 1.0917398690918234 +577 538 -1.0752281084756383 +597 538 .893298466989252 +605 538 .4484330515509094 +608 538 1.274438185625575 +612 538 1.516649825192887 +615 538 1.1845731022631196 +620 538 -1.2099258288296775 +628 538 -.4648823142280951 +642 538 -2.216697854617959 +653 538 1.37183020967522 +656 538 -1.1158570098711555 +671 538 .406541435260406 +674 538 .6985010460835541 +676 538 -.726425466535431 +681 538 -1.4448562398091032 +697 538 -.30778369111110343 +713 538 -.19410536055197153 +753 538 .5960400340332159 +782 538 -.6105852479354346 +809 538 1.6646087510110428 +846 538 .5674705774210832 +854 538 .48134306545979705 +859 538 -.11619937885377743 +879 538 .36181114304052675 +880 538 1.0982333362993262 +884 538 .6572876511942988 +886 538 1.0033492947698353 +895 538 -1.7632764020712088 +908 538 -2.0128869164712495 +912 538 2.8405487869591144 +939 538 .7876755412403696 +943 538 -.8673287233920235 +945 538 -1.114501571502298 +946 538 -.9376636837631628 +950 538 .6999099268926037 +951 538 -.33989802444759276 +979 538 1.1478165923204813 +983 538 -1.1620833846444423 +991 538 -1.0021752350857038 +993 538 -1.7842117979608396 +994 538 -.6825435846107467 +999 538 -.12744766073146965 +11 539 2.3815242541368966 +12 539 -.09860536517934188 +30 539 -1.904681999463619 +31 539 -.20112448003186228 +48 539 -1.8878882244984603 +60 539 -1.1386404793725116 +73 539 -.13334242361963497 +87 539 -.6337505482403643 +95 539 -1.4029758347217627 +102 539 -.9662347561143134 +104 539 -.014696787884901091 +123 539 .802418065491029 +125 539 -.2689566987726275 +153 539 -.3670281537606263 +173 539 1.3370768696265543 +213 539 1.226997622949908 +216 539 -.5540453412952443 +219 539 -.02290163894487729 +226 539 .30120271287238537 +228 539 .7392969895964723 +231 539 -.11638031790263928 +234 539 -1.3216193617703818 +244 539 .3061456709390819 +245 539 1.2822077418555524 +247 539 .512764115340284 +255 539 .18295232814937884 +259 539 -.852585628274791 +263 539 -1.2708240805498519 +264 539 1.2303915076030583 +265 539 .24018246218451605 +272 539 -.7927094803247463 +287 539 1.3352730777525779 +294 539 -2.1024863324588456 +295 539 -.7935434788434829 +311 539 -.470343332775799 +320 539 1.631299448863441 +324 539 -.8160485846490207 +329 539 .6837626848001246 +347 539 -.07913985315934037 +352 539 -1.1243611126186672 +365 539 -.30761227975262223 +379 539 .4493012797041618 +383 539 -.33697273909244263 +403 539 .8551704978214614 +415 539 -.2992894619079795 +425 539 1.3034619556899296 +432 539 -.9126481894270586 +433 539 .8156912759860467 +467 539 -.22332011777232577 +468 539 -.31630583965525877 +483 539 .604972356719399 +521 539 1.204826886039967 +538 539 -.613160271608141 +559 539 .5821656523568972 +576 539 .8257605089393929 +578 539 .005988556018640651 +582 539 -.5398655364307847 +589 539 .5371338174138715 +590 539 .30039734558306824 +599 539 1.002057646707486 +600 539 -.2988159302023174 +631 539 -.7078047730681258 +633 539 -.5492094507048636 +643 539 -.47781766428928124 +664 539 -.5359715802750731 +681 539 -1.396056671111319 +698 539 -.9556501666128271 +721 539 -.20541365896922922 +735 539 1.0682161654432447 +743 539 .17616343542914165 +752 539 -.16249433784631157 +770 539 .40960060495310363 +776 539 .20603782900725212 +783 539 -.16981975048579417 +791 539 .6348995022182193 +798 539 -1.3721105009464476 +804 539 .5162146127020877 +810 539 -.5038001892078133 +816 539 -.020897484252796084 +839 539 .12078648112470516 +845 539 -.49323698273448946 +849 539 -.13968680339697087 +881 539 .6536203636227321 +890 539 -.5928629670961428 +900 539 -.649041194251927 +903 539 1.3545336717755183 +925 539 .2414811033285552 +931 539 .26134482952290544 +932 539 .18547222647822353 +934 539 -2.4713921808390507 +936 539 -1.8237393842078486 +937 539 -.9309744299441441 +940 539 -2.232407168345668 +951 539 .9535829116266495 +959 539 .15366696410458924 +971 539 -1.1813061394594826 +979 539 .4786242939449035 +980 539 -.31088496571123503 +982 539 .9300269722613436 +985 539 .6929082793305777 +991 539 -.19679899477135246 +23 540 -1.0745355429192152 +51 540 -.1724451321242389 +54 540 1.3046615924517166 +55 540 -.43676889067873775 +57 540 .3339778366878934 +81 540 -8.203438154246595e-5 +104 540 -.10486858379516667 +112 540 .8487450421387271 +117 540 .1002509168899465 +120 540 -1.2455585531080426 +132 540 -1.5242757613706657 +135 540 -.37065121430920034 +152 540 -.062032737016715675 +173 540 .5317846726589991 +174 540 -.6435783157507272 +184 540 -2.383147765154551 +208 540 -.27240530939808366 +213 540 .940152864981731 +226 540 -.3062158970856746 +234 540 .24344664202437732 +237 540 .6431115008865238 +243 540 .5918923717924996 +260 540 -.0904394494949888 +261 540 -.09822201683792917 +268 540 -.5925882449122146 +272 540 .6637185049019394 +311 540 -1.4509387925806183 +314 540 .7997355374189523 +343 540 -.47587917765288257 +345 540 .9214516418698696 +347 540 -.7162066081367006 +357 540 .6123922028193054 +391 540 -.6511214566160487 +392 540 .973947511143981 +396 540 .05029587756588266 +400 540 1.4150401927819827 +401 540 .3929954322235605 +423 540 .6119726712665653 +430 540 1.9548820260683002 +437 540 -.32595607851466946 +451 540 -.7403563218067335 +483 540 1.2671103907992227 +485 540 -.7931283248379971 +489 540 1.608229943939506 +490 540 .954555196497213 +510 540 -.634406001687196 +517 540 -.7977181372766735 +521 540 .8918208564443377 +534 540 .37475720724286543 +560 540 -1.4102588593704952 +564 540 2.0508994094868886 +566 540 -.39199578414728764 +574 540 .5116258664933867 +595 540 -.3641750051228718 +596 540 -.6394915872076119 +607 540 .06129337779284649 +613 540 -.6076955900506102 +616 540 -.28969765969034755 +629 540 -1.7157092347404554 +641 540 1.292739360805649 +648 540 -1.038945497749577 +649 540 .7962214653051408 +650 540 .37143039694323854 +652 540 .7818479593404111 +658 540 -.3913872167775089 +664 540 -.6726884136726206 +678 540 1.8183061061973917 +691 540 -1.163377418430626 +700 540 -.526296352030451 +702 540 1.1422952935576163 +703 540 .9530970253956671 +716 540 -.29230482538508606 +727 540 .7297176243143351 +728 540 .044041876688834594 +734 540 -.8785894311279718 +737 540 -.5427474156819565 +754 540 .052392540532573396 +757 540 .36121637907267856 +765 540 2.276593468408046 +772 540 -.2974960092021669 +786 540 .5898069737326719 +799 540 -.7436265185667341 +802 540 1.387036987151711 +809 540 -.7249223746793462 +810 540 -.5397991230744329 +817 540 -.6927643081241929 +822 540 -.3011492345045831 +851 540 -1.9657969199087912 +859 540 .38416196350260245 +860 540 1.2366555199345763 +862 540 .45755285182763505 +868 540 -.5949372863385403 +874 540 .778811376248242 +875 540 .571596351831236 +916 540 -.32445483867895974 +918 540 -.1410679734157185 +920 540 .8972800012722686 +933 540 1.2281699655256735 +938 540 .3520070524428065 +953 540 -.7701797960174286 +958 540 1.3479844255200695 +960 540 -1.3687116934623322 +964 540 -.5919819501425924 +967 540 .8897558638213884 +995 540 1.523225469811568 +998 540 -2.511582779050689 +999 540 1.300635209796815 +29 541 -.5177002886605895 +36 541 -1.1822792370785977 +39 541 .6741419873302031 +99 541 -.7163906863823702 +103 541 .4930599642640851 +108 541 .22835630391520773 +109 541 .596283975980731 +113 541 1.3251051317767772 +118 541 .6592191281373723 +119 541 -.35851826661822667 +121 541 .27587467438282176 +126 541 2.0707634949785785 +136 541 -1.5478472322725898 +142 541 .9538429045461985 +144 541 .6015877391641087 +145 541 1.8076515446648882 +148 541 -.40590103828317314 +152 541 .8311562689092644 +153 541 .7628402620137047 +156 541 .13446049203900654 +160 541 -.15627832890858487 +188 541 2.1585632209416423 +205 541 1.094287363812373 +245 541 .19443227868499735 +259 541 .9574032211652924 +261 541 .4823355758977771 +278 541 -.07863164490411971 +285 541 .12626307360378003 +290 541 -.4920799367914044 +298 541 .6920097453715208 +320 541 -1.5977005277222833 +329 541 -.511691805015413 +332 541 -.6111723244563008 +341 541 .5262732586011474 +350 541 -.3160397074825414 +359 541 1.8054352881840925 +367 541 .4091440753764447 +382 541 .02257319710011521 +387 541 -.7509826895976244 +388 541 -.4762185334119319 +404 541 -1.417778175196027 +418 541 .4040495738661398 +425 541 -2.3343041395643294 +433 541 -.005862014324243315 +436 541 .36265067441353416 +485 541 .6844534374461032 +499 541 -1.4409501088623708 +508 541 -.253555153261198 +509 541 .07495536263269792 +511 541 -.6023179690194475 +525 541 .05690913486128356 +527 541 .6196758128924329 +529 541 .41546194718134044 +548 541 -.8686912533296021 +562 541 -.2399229322111387 +588 541 -.17037824431061313 +593 541 .7795131436777893 +595 541 .8996185741960446 +598 541 -.18384127015652527 +599 541 -.25175320780132027 +617 541 1.292837082177199 +623 541 .9194254093123045 +630 541 -1.0142687197015423 +635 541 1.0046515528780582 +644 541 1.3202908786810938 +660 541 -.8222583369651152 +682 541 1.0530706018852372 +700 541 1.745600349045798 +703 541 .13377980711771623 +710 541 1.4023174217738994 +721 541 -.4139906876167976 +725 541 -.530236034367568 +741 541 .12370633561886496 +747 541 -.4993179511510257 +748 541 1.0491980616460457 +760 541 -.25344389472293016 +779 541 -2.53790457299366 +790 541 -1.7656286121595113 +818 541 -.9536147137570599 +829 541 1.155838576870209 +841 541 .14229370463502736 +847 541 -2.2449324957470607 +867 541 .7885384694124069 +869 541 -.3367424441445052 +891 541 .28628889914807354 +901 541 .11635796132916798 +915 541 -.9828668358769646 +925 541 .6610070326750005 +940 541 .761246332512836 +942 541 .3989671477418975 +944 541 -.933729212076058 +954 541 1.787901167574489 +984 541 -.6867468585890356 +992 541 -.4889439281851678 +993 541 .08191181284436612 +16 542 .1683448236475429 +21 542 -.3192149624605804 +37 542 .7118361243563378 +52 542 -.04134880027005669 +82 542 .47501540183509244 +90 542 1.1145093861786284 +92 542 -1.2975853648969462 +101 542 -2.259237322541202 +111 542 .8205891738988662 +115 542 -1.0641103801004208 +132 542 1.475968864430359 +137 542 1.0498529620913737 +144 542 .49435341681974426 +159 542 -.2335143490669887 +168 542 .08426145085981392 +181 542 -1.7484662356405394 +183 542 -1.7975991513722998 +184 542 1.5318980660670385 +206 542 -.5288660202312312 +224 542 -.07421955571459976 +230 542 -.08336124451519067 +243 542 .12639864409646415 +245 542 .12573026799839895 +262 542 2.3845219203083605 +273 542 -1.7131184935225694 +275 542 -.4929968771653939 +299 542 1.9464054870671161 +310 542 .015223931347055852 +319 542 .261464957770145 +332 542 1.6306290479717525 +339 542 -1.9493175365544877 +380 542 .2515288722784183 +390 542 -.038302332401456016 +396 542 -.4394558872680785 +419 542 .20743950700644875 +423 542 -.3463079656246507 +440 542 .791515317047355 +458 542 .8262007996868516 +464 542 -.6408029005506876 +501 542 -.5489022119554225 +505 542 -.9382952749908888 +507 542 .1891527291287432 +523 542 -.5040713103088732 +532 542 -1.8702937563460185 +569 542 -.4450749045572301 +576 542 -.56629218973378 +577 542 .8244036591890589 +584 542 -.5333590298044052 +592 542 -2.2057746888101306 +605 542 2.710105662418485 +613 542 .36808714540469745 +631 542 -.034042772410295984 +634 542 -3.2570315114544783 +636 542 -1.0008001315031807 +638 542 -.03105516906383981 +648 542 -.23631202780384583 +657 542 -2.004360401576869 +659 542 .511492866388452 +660 542 .4224838815958851 +668 542 -1.8313436737863922 +673 542 1.1446156650943793 +676 542 .12141452803380065 +689 542 -.5373322190036175 +699 542 -.6736705841065272 +715 542 -.1349599531858874 +730 542 1.6858733263975931 +743 542 2.314782403880522 +747 542 .2016361036784287 +763 542 -.297888209812909 +781 542 .3738685197209066 +800 542 .9843688838140219 +801 542 .635629449640112 +804 542 -.07334026301605538 +813 542 1.1963743250109948 +820 542 -.5584466836686204 +836 542 1.2697407020942175 +850 542 .7910330682102908 +866 542 .7770372974007976 +874 542 -.22782461345556632 +876 542 -.22054111170185267 +878 542 -.6651892838054773 +895 542 -1.2800343236421359 +898 542 .980645727398312 +906 542 3.203568436502887 +915 542 1.129617634948506 +921 542 .14261461150442678 +934 542 -2.019983618051796 +937 542 -.3415389890834043 +958 542 -.8791486683485107 +965 542 1.9809039375174218 +968 542 .45932217806593617 +970 542 .49532144400671096 +991 542 .43968659327880444 +2 543 2.5275514310861515 +12 543 1.2532970850553586 +15 543 -1.186856344279678 +18 543 -.6076169800965885 +50 543 .8304475250081008 +53 543 -.6698436776640764 +77 543 .4515741787716385 +87 543 -.29527357516320496 +105 543 .5637778170742723 +119 543 -.9014711465560145 +141 543 -.015947607827607898 +179 543 .2154685418481082 +184 543 .8731323611881894 +195 543 1.065700832793268 +197 543 2.6572676454946196 +199 543 .5972933608834616 +201 543 .9299685671341177 +218 543 -.9489957607413716 +220 543 -.3712137294179195 +225 543 -1.2332963424053403 +233 543 -.07450491738647734 +236 543 .00979966589468173 +256 543 2.383825002195877 +257 543 1.3981434897999816 +263 543 2.3342551106898797 +279 543 -1.0379511389420872 +295 543 .0793208972943987 +303 543 .31196144244526613 +305 543 -.6773275574998178 +311 543 .9984142603758563 +313 543 .8932938273303928 +315 543 1.1160408198244969 +325 543 -.6843366270689407 +329 543 .9941605469974888 +334 543 .6425756187731997 +344 543 -.13961473673588726 +345 543 -.9411701712766827 +358 543 -.8693017081146052 +368 543 2.351318131136947 +370 543 -.22433004727611722 +382 543 .19486297329722557 +387 543 .19684244643138707 +405 543 -1.7651126013695426 +412 543 -.12718542150743165 +425 543 -.15382490754585226 +429 543 .7677070942037094 +437 543 .710167073810386 +441 543 -1.8653804681816857 +445 543 -.9981380546621429 +447 543 -1.2611821752594405 +478 543 2.359926286787461 +487 543 -.13010563487994703 +500 543 .30328883781781757 +501 543 .834390142796267 +535 543 .07759475171963362 +586 543 .31450461003927543 +587 543 .9066451062267077 +618 543 2.117095705185411 +634 543 -1.932264219689803 +646 543 -1.6900651533564335 +654 543 1.4148499082947328 +660 543 -.1253340275329346 +661 543 .07614531635053728 +685 543 .18422688403474982 +689 543 -1.2585052507321033 +698 543 .8767601542482683 +703 543 .04368336046886455 +715 543 -2.226771455066466 +721 543 -.11457551277704758 +731 543 -1.7423143011295052 +733 543 1.4237559988145063 +742 543 -1.0918214155045303 +750 543 -.8336510370491452 +764 543 -.7868934123605615 +765 543 .09317927666624043 +770 543 -.7863491698148654 +790 543 -.3705144785527973 +818 543 -.6759105944985766 +824 543 .16846969156658897 +845 543 -1.3952821555949853 +863 543 -.049034859510860576 +865 543 1.1267138286171332 +868 543 1.3871860093095227 +885 543 .262680690821232 +904 543 .40784535198802835 +905 543 -.9086322657459467 +916 543 -.26077146705952925 +919 543 -.6476523305224676 +920 543 .8429083281539153 +928 543 .2381982044369766 +930 543 -.22759007533140524 +938 543 -.46653100812291975 +942 543 -.47450711655374417 +974 543 -1.2158485261220713 +989 543 -.32805266722189974 +996 543 .3908448942016316 +997 543 -.7383907505113547 +998 543 -.799921572692055 +20 544 -1.1748293868930082 +36 544 .8994906588812192 +40 544 -1.7451276823084676 +61 544 -.7148352599331018 +65 544 -.23858950726502604 +78 544 .9921346764934118 +84 544 -.09800357923070908 +88 544 2.0776057576497147 +93 544 -.2103385266795722 +97 544 .6212828118465038 +99 544 -.9918384822902151 +110 544 -2.2380237252881408 +121 544 .14454566911518407 +129 544 -1.132323009408242 +138 544 1.3178382623086702 +140 544 -1.6967468379501662 +175 544 .4538715656969051 +180 544 -.47502710516381047 +191 544 -1.0716155145810191 +194 544 .5282644229116675 +206 544 -.3133401349468822 +217 544 -.5418169600918656 +221 544 .003787965010957961 +228 544 -.5395833718152693 +229 544 1.3195702010995645 +255 544 -.06646184353329268 +258 544 1.7081887984453574 +263 544 3.0596104822699552 +310 544 .9296049280890311 +312 544 -1.6747451911278788 +315 544 .6783095673949148 +324 544 -1.5700712241096375 +333 544 .5669182201066882 +345 544 -.9169924774878622 +352 544 -1.8634675363511104 +362 544 .9043881435880552 +374 544 .412561879815161 +376 544 -.3323698543408437 +394 544 .41619297253510823 +418 544 1.1476728491415127 +419 544 -.2931937005522536 +430 544 -.6558753184036239 +432 544 -1.6078356239943843 +440 544 1.797391230795125 +443 544 2.343484718883793 +450 544 .8047078120388542 +451 544 1.0860596435846603 +471 544 -1.2401106125630557 +490 544 .1925269993415018 +508 544 -.9461715673058204 +520 544 1.8767314452772672 +529 544 .9711008970651989 +534 544 .7782472875780881 +535 544 1.0470811158255884 +539 544 -.913967366661946 +543 544 -.8574398720075632 +547 544 -1.546621079282886 +550 544 2.75737844362411 +551 544 2.4735539431561215 +561 544 .36971012667043984 +567 544 1.7203366610446977 +568 544 1.676956970253911 +571 544 -1.7134212751750781 +586 544 .43395812980847187 +591 544 .9898938906567637 +596 544 1.6391016745809122 +610 544 -1.676982932768405 +620 544 1.3700510098010747 +632 544 .571506433264218 +647 544 .45232690578818613 +652 544 -.7468491919346558 +653 544 -2.03573579344411 +661 544 1.0161578309404116 +666 544 .925019904505801 +670 544 2.1464317467308334 +679 544 1.4799869774219128 +685 544 -.9792705510663987 +697 544 -.4086352192152757 +699 544 .6054862326435595 +719 544 -.4159281740236101 +725 544 .14015134000725366 +738 544 .6847142185593448 +739 544 -.3574900060502192 +741 544 -.6175251172404376 +750 544 -2.767699428352089 +763 544 -.07873913953088285 +781 544 .7822666987423395 +788 544 1.0302277664567774 +799 544 -.9893112295444968 +815 544 2.3164557608489815 +821 544 .6303354664210709 +825 544 2.0071288483884886 +826 544 1.270057758479866 +828 544 -1.07261749366505 +836 544 .6917278823253545 +840 544 -.5504495947419623 +844 544 .2866644845719057 +855 544 .5393272793944084 +859 544 -1.4398532744148247 +883 544 .22614241923347883 +899 544 .5606060360871341 +903 544 -1.4836031575908544 +941 544 1.7542644177028752 +943 544 -1.5614201671160832 +951 544 -3.523254171550055 +961 544 -.4935082913045824 +963 544 -2.7960575501184946 +967 544 -.6105031692405148 +971 544 .7648577486182697 +989 544 1.377640505661297 +10 545 -.01468964883996541 +12 545 -1.0538486467452584 +18 545 -.3456837500914056 +37 545 .9956076169063093 +47 545 -.5629491629601119 +54 545 -.878494527192558 +55 545 .2833443874678671 +72 545 -.682073498690568 +85 545 1.4334433365891401 +88 545 -2.0963624780152728 +110 545 .9344467421570313 +123 545 -1.3593258405843636 +130 545 1.7822725618179271 +140 545 1.6114216440134501 +143 545 -.39556432652320506 +172 545 -.00849178743370185 +174 545 .803955200220057 +185 545 -.24870070485426585 +186 545 -.31768436084321505 +189 545 .367166731348052 +199 545 1.1241074434464542 +226 545 .10659088202546288 +234 545 2.308701575162362 +244 545 .21983271107607272 +248 545 1.4663637831843905 +254 545 .6532591124737418 +255 545 -.8775115437167221 +257 545 -.31177811867366195 +265 545 -.7438329059556233 +269 545 -.09616306485243968 +285 545 -1.349898690281569 +324 545 1.0564430217053982 +327 545 .09040235291364992 +356 545 -.891812350347219 +361 545 .23649359545627163 +366 545 2.323475709099255 +408 545 .5528073343283212 +420 545 3.218126469916169 +434 545 .25153164280599094 +435 545 1.0718654706653754 +442 545 1.5963426388510928 +463 545 .8417065262003104 +495 545 1.9095582331025978 +496 545 .1516301356276653 +502 545 .2443360979016113 +506 545 .34114089196760017 +516 545 -2.6618791066493186 +525 545 -1.6662608029860668 +531 545 1.1079749961958347 +542 545 -1.1520464720447956 +547 545 .5308853033109584 +561 545 1.6952246108982039 +562 545 1.9959920096435766 +566 545 -1.0701719267364325 +574 545 -.3776403416071561 +581 545 -2.1054265295708183 +591 545 .3887461684784493 +608 545 .9479999405578894 +613 545 -1.5204465079521974 +627 545 2.3381623345480405 +654 545 .8470677819769135 +668 545 .8179655646711427 +671 545 -.8553144198108585 +675 545 -1.6691036717921652 +676 545 -.4814585192021434 +678 545 -1.0481351715485443 +685 545 .350178303777746 +686 545 -.8564564448609039 +715 545 -1.496267616256964 +740 545 -2.072724399016048 +746 545 -.11546754983113308 +758 545 .5206946300935212 +777 545 -1.2623738165341913 +789 545 .2976276563090904 +795 545 -.6872005478387371 +799 545 -.03419136165762561 +800 545 1.202147869625258 +813 545 -2.5696282601798295 +821 545 -.6945648821885338 +832 545 .4066615565902235 +872 545 -2.2825328406340137 +873 545 .017094133202912365 +905 545 -2.5295657125942586 +908 545 -1.6484755069411634 +934 545 -.9293207493985801 +936 545 -1.6919579096597572 +939 545 .4682674092913137 +947 545 -2.2189060960140714 +972 545 -1.208916090040896 +1 546 .04492954068586254 +6 546 .6074382504939557 +24 546 .5523292399107893 +35 546 1.4426839160468585 +49 546 -2.0628212478133032 +54 546 -1.8137464186976808 +64 546 2.3994073606165025 +65 546 -.9336943624220793 +72 546 2.7070831363211982 +89 546 1.8068311082916577 +90 546 -.47371023803671747 +103 546 .09058138969985864 +128 546 -1.0579714737772903 +131 546 -.717009300103044 +154 546 .04579426112891459 +161 546 .03986363550030097 +164 546 -.11232330143142888 +191 546 1.960436277602576 +195 546 -.20544634608878076 +201 546 -2.1438778190914793 +206 546 -1.0575548154000514 +216 546 -1.0409966344043853 +217 546 -.6970506057109384 +226 546 .8708247199988807 +240 546 .476507676065384 +241 546 -.21004650470741149 +246 546 -.31058931427529746 +247 546 -1.3551768186125486 +253 546 -.5240180933925752 +254 546 -1.0860711825928977 +273 546 -1.6372209426492321 +281 546 -.8089540399324142 +332 546 -.24923127907315532 +346 546 .8917605907519983 +349 546 -.044436692117649335 +358 546 -1.3750267744024236 +372 546 .11355797386141393 +376 546 .8858151792692499 +379 546 1.0243470553979916 +407 546 .3254957297655492 +420 546 -.045084090135580984 +422 546 -1.744332432189439 +429 546 .5000029997852824 +445 546 .3699538934678546 +450 546 .4996839864162823 +452 546 -1.569814416928464 +453 546 -.22571269237777375 +461 546 -1.1835560253402102 +479 546 .9626653362219976 +480 546 -.4865145126993883 +484 546 -2.3344314746334125 +489 546 -.23375355543729914 +522 546 .7634984645006739 +527 546 .546247262984886 +534 546 -.962491125190152 +536 546 1.5477605249680946 +562 546 -.4822791610341998 +568 546 .12145809012491283 +569 546 -.25775996446307775 +578 546 .3649051493819933 +579 546 -.5963621545542327 +588 546 .4666967298057173 +594 546 -1.6751799458899506 +601 546 -.24734633199467887 +609 546 3.0281873032530995 +617 546 -.8883613462278488 +622 546 -.39192221718743564 +623 546 .10116469028138338 +626 546 2.2633171244774797 +627 546 -1.116230594560013 +659 546 .7505048736338136 +667 546 1.4047103600885293 +674 546 -.1434265653165646 +687 546 .3030583781876241 +691 546 .7297900278868702 +700 546 -1.705371568638878 +713 546 .505680899393595 +724 546 .4371019156026086 +728 546 -3.774691599521375 +739 546 -.1338600638835285 +744 546 1.5674823763714643 +775 546 -.05281675725831366 +783 546 .6470472742216548 +785 546 -1.711173745261898 +819 546 -.1720229722298935 +833 546 1.1101844847003735 +834 546 .200274141324274 +840 546 1.0609153322215201 +852 546 -.6904901156837376 +861 546 -.9328940280825264 +875 546 -.22224417647232675 +893 546 .6125298043227462 +904 546 .8841136661644803 +917 546 .5344158894487274 +922 546 .28950313897026964 +931 546 .553839922621261 +940 546 -.03169464995879802 +945 546 -2.0826738252583703 +946 546 .5004068656752324 +947 546 -.6971681072757415 +957 546 .21797900613718044 +958 546 .08949039024277665 +963 546 .9904427689505437 +966 546 -.4411004078802737 +976 546 .6089839993609044 +991 546 -.5268280155389544 +992 546 .40936334205210245 +4 547 -.06283766588126363 +6 547 .9075110490582258 +14 547 1.2513760798101534 +18 547 2.088600019095371 +39 547 -.20595360284441755 +64 547 1.0305066672891146 +74 547 1.5622176649114325 +76 547 .9410711688746101 +84 547 -2.169447336443687 +85 547 -.14199980193000233 +91 547 -.4993271678367731 +97 547 -2.5165328088423795 +103 547 -1.3250211063840924 +106 547 -1.537649639339905 +113 547 1.4042297901973233 +116 547 -2.7351888079583135 +127 547 1.8667083904412005 +131 547 -.671701066678335 +166 547 -.7867981640335232 +175 547 1.2562807118645964 +177 547 .17348131583808218 +181 547 .22634522631379103 +188 547 .42035157421870567 +204 547 .5870711376145928 +206 547 .8558865576785459 +209 547 -1.5327451608542946 +219 547 -.37973928949298785 +228 547 -.8310489656292117 +232 547 .28121473282320203 +258 547 -1.480827586893348 +262 547 -.6183612113252891 +266 547 -.6885308675616695 +277 547 .32639806005667316 +297 547 1.229444180527918 +309 547 -.5941149218167162 +316 547 -1.1153660480736554 +338 547 .6870779859888153 +353 547 -.9609099101526941 +363 547 .3353654047903109 +371 547 -.6270957107310963 +378 547 -1.6649279645902846 +385 547 -.5152565512162991 +409 547 -.5685448472216409 +413 547 2.4643720788319783 +418 547 .9605986858524932 +420 547 .4626416448646434 +438 547 .7026214393037116 +447 547 -1.5906024692142913 +464 547 .257593271499951 +480 547 -.11167564469017523 +489 547 -1.2329926437601304 +519 547 -1.6163471593000922 +531 547 .46203152132616826 +537 547 -.22194526490779254 +554 547 -.2094915005606059 +565 547 -.7771889313409777 +569 547 -.8079049232139911 +600 547 .09643492551734002 +627 547 -1.184319544311906 +639 547 1.8483550363861674 +640 547 -.9134029747326528 +656 547 -.05524907586411467 +690 547 .20252360058077043 +701 547 -1.167042760784974 +711 547 -.43680523149177786 +716 547 .03818593791276848 +721 547 -1.6119097366680362 +735 547 .8216594089983187 +738 547 -.8775767449355711 +746 547 -.32110044729843423 +751 547 .00036387618454258863 +758 547 .059089811393499905 +824 547 .3171536282897026 +846 547 -.0006977029339596272 +859 547 1.5897422852539598 +868 547 -1.9027278765752194 +873 547 -.13846756572682048 +877 547 1.199514718645293 +897 547 .5867092747349846 +913 547 .31450683059870677 +923 547 -1.7186387941838324 +934 547 .0749590642605383 +938 547 1.371808527794622 +945 547 -1.2768654038620368 +947 547 -.7793087333124491 +952 547 .9941534505777309 +993 547 .4389958272151002 +5 548 1.6863488123345052 +10 548 .30595388804518137 +31 548 1.2832036478169442 +38 548 1.720512948722339 +61 548 -.34636510227862843 +79 548 1.6252389996253613 +112 548 .7136378813205844 +122 548 -.6638210924915338 +124 548 .3390328808183082 +126 548 .0747347681502804 +134 548 .22843096321306336 +135 548 .4281649473313784 +136 548 -1.29776892742627 +141 548 -.2419198323513389 +158 548 2.2115195342923477 +176 548 -.43757282598952824 +179 548 .29315501724129317 +183 548 .40431127908199627 +207 548 .4086096892823302 +227 548 -1.092061436007558 +231 548 -.830663066804265 +238 548 .2571795963800003 +248 548 -1.9680747777983478 +261 548 1.528208291508774 +263 548 -.08284960297839039 +286 548 .16809320847654502 +294 548 -1.8560315884718055 +297 548 -.7389706918314337 +306 548 -.6404849475458088 +307 548 -.43713325103648726 +310 548 -.07131836400257402 +319 548 .9440134935185405 +329 548 1.332966291284306 +345 548 1.5371902002010862 +351 548 -.8219224819615415 +354 548 -.4929400971247748 +361 548 2.3356563047438916 +378 548 .8677702337084764 +381 548 1.1067820368339263 +402 548 .42666793945266734 +429 548 -1.2693525235723149 +452 548 .5624806837210587 +468 548 -.36615779673097676 +478 548 .1826687972464412 +486 548 -.4283671042133722 +525 548 .650369259003702 +535 548 -.023695848672625502 +549 548 .4470787964591415 +558 548 .29843655949065534 +561 548 2.257610092325693 +562 548 .6700984506779403 +566 548 1.7632572149678525 +575 548 4.776119607413626 +581 548 -2.1839936063105574 +589 548 1.0203902678421157 +615 548 1.3920549947135736 +616 548 1.4376103888925373 +618 548 1.8769487759418269 +622 548 -.1717829316137118 +643 548 1.0267135804558563 +646 548 -.8032971978237058 +649 548 -.3516576174741424 +657 548 -.1428216727420275 +664 548 -.8667653077104732 +692 548 1.4579762888699959 +702 548 -1.0759291394346628 +707 548 -1.4339215864560997 +710 548 .9150982378500324 +718 548 -2.687749349390917 +725 548 .17495034433593465 +755 548 -1.7675845682374607 +763 548 .09085631792439819 +766 548 .2739309061029214 +772 548 2.2060289049774036 +779 548 -1.5816500350508091 +793 548 .28248514332718816 +796 548 .2476626858510538 +799 548 .8430465151418829 +804 548 .909758920738596 +805 548 -.24484556335595956 +836 548 1.806491986561639 +856 548 -.8597036455314945 +911 548 -.43444643191915766 +912 548 2.635926841112647 +922 548 1.071785187360097 +928 548 .3282213885900114 +947 548 .13963407262166394 +956 548 -.44123693227949545 +957 548 -.142534630441061 +958 548 -1.1618800394814621 +963 548 -.2866418753251941 +973 548 -.665648988816977 +978 548 .4045166112082666 +984 548 .05165023838023135 +7 549 -.6152525858239714 +8 549 .918698696994531 +17 549 -.7629674065499669 +36 549 -.2439662555472557 +72 549 .045447554922201525 +106 549 -.9162074588355944 +118 549 -.9939384860512952 +121 549 .10442334928977628 +130 549 -1.2581468310023753 +151 549 -.8036061947798572 +154 549 .8291174506317175 +157 549 .4908063218408335 +165 549 .1534690045441916 +178 549 3.0271568518310965 +187 549 -2.2325164737251413 +189 549 -.5080161186950836 +201 549 .4384235276508354 +234 549 1.7707090102971206 +238 549 -1.3735275896829975 +246 549 -1.3337776120707245 +250 549 -.786944516578617 +265 549 .814180430737203 +284 549 -1.6412087928883552 +289 549 -.622886584331698 +308 549 .4511228223196626 +332 549 -.02217317165309622 +339 549 1.0173729393905768 +377 549 -.6441383000329293 +394 549 1.1628479230407418 +405 549 .708035572792814 +423 549 .7523753977059202 +438 549 -.37635359505639465 +440 549 -.13028843439810767 +442 549 -1.1091433249610716 +443 549 .33316412576551235 +450 549 -.20254848331516412 +451 549 -1.152889489913564 +454 549 .7909533832439094 +456 549 -.6841774979312137 +458 549 -1.6360824654875938 +463 549 -.19466844642283648 +469 549 .8651004819441899 +471 549 -1.0978482794306315 +472 549 .9719388532965783 +476 549 2.997772185686179 +488 549 .13514120164397242 +491 549 -1.0979795547835605 +492 549 1.2665853131179878 +505 549 -.3783522464463209 +530 549 .08059499127713643 +536 549 1.951967585799485 +540 549 -1.4492051591400807 +571 549 -.35400442970802926 +578 549 .10633240421581154 +581 549 -.886741003450522 +582 549 1.0096885381675678 +588 549 -.41716314502197704 +591 549 -.9617468489279338 +599 549 -1.4025490929624145 +612 549 1.13462863865193 +617 549 1.7089433621653798 +618 549 .6696570419854779 +623 549 .18694811497733071 +624 549 1.7308743561484532 +643 549 2.460742697906499 +651 549 -.8749835554138111 +654 549 -.6055661795196112 +660 549 1.0782851716282296 +667 549 .02641837470271427 +704 549 -1.6816218103178213 +714 549 .41485436761530425 +715 549 .6515598448981413 +718 549 -.9867600604082978 +724 549 .5265505847262846 +739 549 1.5311699903129037 +747 549 .35987767810693944 +781 549 -1.290748030084059 +790 549 -.7521410081417553 +804 549 .7427950561622365 +813 549 1.815035590281993 +814 549 2.0684157707985555 +830 549 -1.073659808249273 +839 549 .2994347595800555 +842 549 1.0608233287195765 +852 549 .6616056665820057 +863 549 -.3354992314597839 +880 549 -.03570897118526689 +893 549 .8191989171774223 +934 549 .7931664575891646 +937 549 -.8449037945659833 +944 549 1.0706272942174802 +945 549 .22552242383275123 +953 549 .8527010125600599 +955 549 -.4308588743920152 +958 549 .8844672284361771 +975 549 .171107785739594 +995 549 -1.0095477818173084 +999 549 1.9680158622741504 +3 550 -.7421501877161117 +12 550 1.0876461383929978 +28 550 .5817662335719301 +61 550 .39108787325710653 +87 550 -1.88457847478319 +110 550 -1.7864026153074657 +117 550 -.3006392228857132 +119 550 -1.36702210924719 +129 550 -1.3060184363860292 +135 550 .7634789741408012 +150 550 .3438786642028228 +161 550 -.17948363176166368 +173 550 -.9226137781745738 +174 550 -1.8996985366012593 +177 550 -1.8692860798453559 +190 550 1.084123411277633 +205 550 -.3096831118565977 +208 550 -.5618789968428343 +211 550 .32515258820095505 +236 550 .6009279509337095 +251 550 -.04213461052068032 +267 550 1.6843513064810787 +269 550 .11773182219017103 +275 550 .8419592268098668 +282 550 -.30421447977603755 +283 550 .06497798092789962 +298 550 -.5753277187059459 +310 550 .016343674846451106 +311 550 1.6185900839394158 +321 550 1.1847396981310887 +329 550 -2.1910143763797523 +335 550 -.02708209917105825 +342 550 .08376810031207071 +352 550 -2.645923346702884 +356 550 -1.2447805343721714 +361 550 -.7266038543659401 +393 550 -1.5265825929876213 +401 550 -2.122608994450006 +406 550 .5182178814944944 +408 550 -1.6675902007797199 +412 550 .18807726605885883 +425 550 .5144526417089269 +443 550 .12662638948733032 +448 550 .1465482240956723 +459 550 -.33774322166656645 +465 550 .8182514875234788 +466 550 -.7483858806266593 +471 550 .6411502388775961 +485 550 1.1979234436569262 +489 550 -.4757625101087943 +520 550 1.2402029212139265 +535 550 1.053245106442474 +548 550 -1.4123026284328892 +557 550 -1.110144310782464 +559 550 -1.5889019847172265 +581 550 -1.301835954043665 +583 550 -.6861755871096312 +601 550 -1.1290316293286584 +611 550 1.2891279649978087 +627 550 .030453037420832982 +631 550 -.3908405053456223 +684 550 .40873301397057515 +691 550 -1.1630152252555663 +695 550 .7810081976247799 +698 550 1.9267477110938256 +702 550 1.7178776631185098 +713 550 .6660212985941933 +726 550 -.7990114014886173 +729 550 -.1599078185612452 +734 550 .5130443253567767 +735 550 .28119660484805686 +746 550 .29301395332215374 +763 550 .01389186194608491 +774 550 -.25483310305275997 +814 550 .7696055398014169 +821 550 .5010727225602876 +827 550 -.33521207121530916 +839 550 .35444595057399264 +848 550 -2.686474407030051 +874 550 .8369007607326375 +889 550 -1.428167632583781 +917 550 .3371461255810587 +927 550 -.8666755860855067 +935 550 .8263359595844902 +936 550 .39560556340035025 +940 550 1.4920792903385747 +950 550 -1.4468653293506695 +970 550 .3537876658970194 +972 550 .5653782983813417 +973 550 -.7324375050269784 +980 550 .7280308485808468 +985 550 .11415804833591237 +992 550 -.8912581215987306 +995 550 -.049540614898141655 +12 551 1.7606697572568588 +13 551 1.057946597506926 +37 551 -.013737414440157024 +44 551 -1.261512310427531 +52 551 -.4051598207692281 +60 551 -.37254404184309065 +67 551 .6916354625571989 +77 551 -1.0759416675138307 +85 551 -1.456357510850158 +96 551 .4764580286497346 +97 551 1.8479961780329694 +113 551 -.13911227796591502 +118 551 .7353056278372717 +121 551 -.181462475423593 +122 551 .10755759194297435 +145 551 -.5281134071485443 +151 551 .30151379464272166 +165 551 -1.1468886855749 +183 551 -.410051280083704 +193 551 .6964723386979914 +201 551 -.8376170426894474 +212 551 -.5689716398572483 +217 551 .4306523735123383 +225 551 -1.3531530949575492 +237 551 -1.0552436027766585 +261 551 -.07567963476822379 +268 551 1.5759300112082437 +272 551 1.1216135266275558 +278 551 .49528921311807433 +280 551 -.5452048680877628 +293 551 .8016193489920701 +314 551 .19232070745896845 +316 551 .5526970751498769 +325 551 -.9186238911891687 +333 551 -.48117045717642587 +346 551 .29008739127183675 +351 551 .6674051905603992 +374 551 -.8782595808095721 +389 551 -.041650236431577586 +396 551 -.725180778911779 +410 551 .1855452332078399 +423 551 -1.329552659199695 +454 551 .5007388953745517 +456 551 -.7431380205324892 +482 551 -.09715534956050398 +488 551 .40766163025086094 +489 551 .6071128625318063 +496 551 -.5424220534672102 +497 551 -.5422279621218001 +498 551 -.5452004487056974 +516 551 .09205522928158642 +534 551 -.9362114489430502 +541 551 -1.5017400059905524 +557 551 -.10282334908590285 +560 551 .3392163368315529 +565 551 -.1898033139598616 +568 551 -.15738236131003894 +569 551 -.63107785164789 +578 551 .633277396457872 +581 551 .787456913416094 +598 551 -.01965231634114989 +601 551 -.9346838552162824 +616 551 -.2814421985795561 +621 551 -.8661920499506237 +641 551 -.290456083112658 +656 551 .5165810297030373 +665 551 1.2162135714326636 +667 551 .049249943625345065 +669 551 1.028453571559505 +670 551 -.7685126886193483 +676 551 1.4317207735109607 +682 551 -.04290866313314132 +689 551 .025624178713046675 +697 551 .8037471670023295 +698 551 .07122405453385679 +720 551 -.23844638009773647 +729 551 -.6887226718583965 +736 551 -.8687843955290288 +738 551 .3935810936951176 +747 551 -.89940399945909 +749 551 -.29569454667057765 +770 551 -1.9851530354308387 +778 551 .5840061771065792 +799 551 .2861757800464754 +803 551 1.3686483455650271 +805 551 .038982329926902176 +814 551 -.8945606778246457 +829 551 -.9814436773563098 +839 551 .20398832633417308 +840 551 -.28716030379056867 +845 551 -1.9228650294449008 +847 551 .5167758831875999 +857 551 -.9994166603555918 +887 551 .42915664525089436 +899 551 .9948029902449504 +912 551 -2.4296882812438074 +914 551 -1.1024064125465556 +925 551 -1.4943085126765323 +926 551 -.1655899050497735 +929 551 .23864102619588007 +933 551 1.3140144638144906 +934 551 .6299127584860804 +935 551 -.013544697036666387 +953 551 -1.081811223809607 +986 551 -.7838845664596538 +994 551 .08298662003837412 +995 551 1.1217886677015165 +7 552 -.46224883423087687 +31 552 -.8477768383897383 +36 552 .23267973817232815 +42 552 -.4879845983032472 +43 552 -1.226952684055744 +74 552 .2709679993757469 +77 552 .5637206986785531 +79 552 -1.4952208024809834 +93 552 -.35247910233403557 +103 552 -2.3360856245138844 +136 552 1.0723155385240914 +146 552 -.75823755328815 +148 552 1.4746870613186687 +165 552 -.34609068621897576 +186 552 -.149435504031756 +199 552 -.08302023966925759 +206 552 .9749955091001845 +210 552 .9595690941637295 +213 552 .05988440008967142 +235 552 -.2079911061470495 +237 552 -.2226261247508624 +261 552 .9415428451458889 +265 552 -1.6548611862882714 +269 552 -.6813914412007287 +284 552 .9123828048159456 +290 552 -.468064778359352 +294 552 .9614933936032887 +296 552 -.4183945311745956 +300 552 .39425324537862017 +306 552 -.6379078627947783 +330 552 .09920551090173207 +336 552 -1.3673658020373776 +341 552 -.4706329841735676 +343 552 -.21901653270157048 +346 552 .5547802181655165 +350 552 .529070035329499 +361 552 -.9610360264309549 +381 552 -.2884980340526714 +382 552 .4279441862133268 +391 552 -1.8761209586654406 +415 552 .31046328296483194 +426 552 .2926491601288366 +464 552 .9489584320743338 +477 552 1.7469519107600802 +487 552 -.2997583418124963 +491 552 -.046175313219552774 +506 552 -.4719427498502742 +518 552 -.5815219874440356 +521 552 .09505927716265522 +533 552 -.1094987430822065 +538 552 1.391482963250662 +541 552 -.06271515390918891 +542 552 .5714542682211238 +571 552 .10693906994064316 +578 552 -.2069081054881678 +583 552 -.0877742642147722 +597 552 .9035834310553482 +609 552 -1.4787234540694916 +619 552 -.10749964134047879 +629 552 -.8927303759857659 +635 552 -1.8545187582616987 +647 552 .47884983489191646 +670 552 -1.597827699559646 +680 552 -.8505954877520092 +681 552 -.7473457141154853 +683 552 .356866791989361 +702 552 1.1897877578124276 +708 552 -1.158239849934454 +713 552 -.1197476103636885 +725 552 .6893658273508013 +728 552 -.34449034260599043 +747 552 -.4475401406276629 +750 552 .3476753767049303 +752 552 -.42037875149590354 +754 552 .4716517881696514 +759 552 -.45691756721828997 +761 552 .2821798953584116 +770 552 -.2719318827384056 +781 552 -.2782700927391636 +791 552 -1.4629542603890355 +798 552 1.0649876212227363 +803 552 -.30637665369343586 +816 552 .5767709503371912 +831 552 .003251983823110094 +834 552 -.5666569561833301 +854 552 .718068698492769 +856 552 1.347003348956998 +869 552 -1.1757758778325393 +875 552 .28338119872318074 +922 552 -.49560647917767786 +935 552 .2114946457159947 +986 552 -1.6801241317329065 +999 552 -.4072044892742255 +39 553 -.5688774925439644 +49 553 1.5678125160441008 +57 553 .49761994016940253 +63 553 .32929919105181465 +78 553 -.3727961701756528 +96 553 .3196755168794198 +99 553 -.3739591813860381 +128 553 -.7551425592352036 +133 553 -.011425940550466814 +137 553 -1.5987308060733108 +162 553 -.7882284798052521 +166 553 1.803362944001954 +173 553 .7875017309469264 +174 553 -.5660320370600536 +179 553 .2900416971636929 +194 553 -.1974428635245255 +216 553 .39932729449832927 +221 553 -1.233705706998081 +233 553 .43360496308155316 +236 553 -.9190275108630783 +247 553 1.3150904122979752 +252 553 .12843775059405876 +254 553 .594261557302735 +256 553 .7556789693596766 +265 553 -.8904544658753483 +268 553 -1.25313237490177 +273 553 1.189325428039147 +274 553 -1.3588245853233718 +281 553 -.905595996963823 +287 553 .7686467595717545 +305 553 -.07126388174048806 +306 553 .36010225076516345 +307 553 -.3961233092011306 +327 553 .9964948260344041 +342 553 -.7924432365581535 +343 553 -.3356234604129859 +348 553 -.6654960510612586 +360 553 .5154553758736179 +370 553 -.11878752498705161 +373 553 1.7377165315388488 +374 553 -.01341931672207497 +384 553 -.49527810481508355 +385 553 -.8944106585272302 +397 553 .3439570202715485 +400 553 -.3875090916360988 +405 553 -.4229824641298206 +409 553 .6705816416285724 +410 553 -1.078063693953578 +425 553 .35681234375119597 +434 553 .6071594616789617 +462 553 .5741885081323359 +470 553 -.7845131212208418 +477 553 .022097050185610312 +482 553 -.5420120488066766 +498 553 .7867930597479159 +499 553 -.25340993350036023 +502 553 -.18908364955825663 +509 553 .4137989927433181 +525 553 .24770154829506164 +532 553 -.23126215544499892 +534 553 .7029006124758659 +544 553 -.49364188532105563 +552 553 .39935073743786836 +555 553 1.691167052951927 +572 553 .6040380061456934 +583 553 -.5828638056448039 +584 553 -.8745734968569088 +587 553 1.0016725768297106 +598 553 .6586133406065298 +606 553 -.6357026370905225 +622 553 .7427948759477501 +623 553 .6692919314828331 +630 553 -.14065001362039997 +640 553 .2686381226648794 +644 553 -.16461221907258572 +649 553 .6563193149873661 +654 553 -.3456242694592107 +665 553 .7325960989427645 +671 553 .2592833883675424 +692 553 .8997321593447515 +693 553 -.1411331670574402 +701 553 .9224656923662635 +720 553 .6046291127087218 +751 553 -.25848429190821104 +763 553 -1.5158125993626261 +775 553 -.06170285408839103 +781 553 -1.1643566013788764 +786 553 -.12401096472710993 +807 553 -.5961145958415763 +808 553 -.527793173071883 +812 553 -.09664706003948997 +837 553 1.4122359415251184 +839 553 .4622794336274739 +849 553 .1731271418594083 +861 553 1.3885880169547828 +866 553 -1.1970368527682524 +868 553 .4954506695411086 +872 553 -.054647912314288574 +879 553 -.30384015925209645 +888 553 -.033419083449232015 +906 553 -.6112793955752116 +927 553 -.84313846051294 +933 553 -.18051221933260925 +934 553 -.15699715478421838 +935 553 1.5084776977272585 +936 553 -1.235475234514817 +941 553 -2.512216778923172 +946 553 -.09648517460930112 +953 553 .8399509296404455 +955 553 -.3096820141678019 +956 553 .372628586273301 +974 553 .5944090879876133 +982 553 -.712082272143441 +990 553 -.6677163287176394 +993 553 -.11615489352486584 +994 553 .022533140745522585 +14 554 -.34645226341777047 +34 554 -1.0706381872484616 +36 554 -.3751188773252557 +37 554 -.41398116979781885 +42 554 -.4694141902742389 +74 554 -.9387272789149849 +84 554 1.6351913078494311 +87 554 -.14377408988460172 +99 554 -.7052855369300135 +102 554 -1.2582530834010406 +109 554 .19892048326935577 +117 554 .7091934433471783 +131 554 -.4539515791533738 +139 554 .23531801712536568 +146 554 -.3038946790771101 +154 554 .30207832770797005 +159 554 -.29999824485048016 +162 554 2.356916673264196 +175 554 -.7233402856270045 +176 554 -.18236765332226218 +198 554 1.146313992164737 +203 554 .9679930109908104 +246 554 .749412015873619 +248 554 .05504098854364588 +253 554 .26266889349411854 +256 554 .07872417453227454 +261 554 -.4515375671084178 +272 554 1.1265926932978918 +275 554 -1.2761451161227872 +288 554 .40918258753531533 +295 554 .07465719614705105 +296 554 -.6259082125641443 +300 554 .04661975748599528 +301 554 -.17094750963460803 +319 554 .8399006305062054 +323 554 .11334908818229612 +341 554 .08842421996641649 +366 554 -.5768276270515191 +397 554 -.741282484718849 +400 554 -.626114701765961 +404 554 .6133081493266792 +408 554 .7906862543766843 +417 554 .1546516612831067 +436 554 .6187565480580303 +441 554 1.0074249895144212 +444 554 -.08640560331751482 +458 554 .7675072162904815 +484 554 -.9660258578407416 +500 554 .06760518313749832 +502 554 -.8525010973344326 +515 554 .6911057677678584 +541 554 -1.5326641619878205 +569 554 -.14766327764174536 +599 554 -.5819028656878107 +604 554 -.14543629773228545 +605 554 .5608645289210741 +637 554 -1.1233397733015815 +644 554 -2.2327930355374277 +645 554 .3684170850908519 +665 554 -1.7118388535454765 +675 554 -.31702918977016126 +683 554 .43871787018869224 +721 554 1.3134189053000285 +724 554 .5581337686693792 +727 554 -.31982425091924216 +744 554 .12982590457965315 +751 554 -.2935360407622365 +752 554 .004393681516618928 +769 554 -1.1311081803926202 +790 554 .8015750083015416 +804 554 -1.0190340015326094 +810 554 -.04465872102316347 +837 554 1.693155074878188 +878 554 -.443200466526565 +881 554 -.38544740127691296 +899 554 -1.4059796472523807 +903 554 .5041815885794337 +923 554 .8588261987819068 +930 554 -.1810752867323695 +943 554 -.29963173055503034 +944 554 .32210277925997877 +959 554 .6528382589284534 +960 554 1.2446876544582595 +969 554 -.7154193370660553 +974 554 1.1282090633158113 +976 554 .5164153758671536 +982 554 .5036111086232486 +984 554 -.542556550992064 +999 554 -1.0638958499941609 +40 555 -.32546200245507984 +43 555 .16458363843652218 +60 555 -.18736022412353 +91 555 1.1135311702708666 +110 555 -2.649803871993257 +123 555 .18401674608288976 +131 555 .7069680532124086 +138 555 1.4107864847902396 +161 555 -1.0413200771673354 +174 555 .8609788269232151 +204 555 .9425643103495702 +211 555 -1.064566071267055 +224 555 -.9340966377661316 +231 555 .6461496344261936 +233 555 -1.888340849267309 +248 555 -1.1102147277446075 +261 555 -1.1935767071221695 +266 555 -1.3799238438006918 +267 555 1.2436402137781828 +274 555 .6183750669069245 +302 555 -.6834141631431205 +318 555 -.5199482539848052 +323 555 1.2142545127663376 +326 555 -1.9817068763283021 +344 555 1.3042525900440787 +347 555 -.47016989459563324 +352 555 -.9272118571721757 +357 555 .2982198100470673 +364 555 -.18451410508577057 +396 555 .15557192206675685 +401 555 .6439320665350575 +405 555 -.12750155176378747 +413 555 1.1089000838737724 +415 555 .4152140678417904 +416 555 -.10088560808344833 +436 555 .6345210308509212 +438 555 .343810375680479 +456 555 1.0631236958237062 +465 555 -.8153313679289027 +472 555 .14327328457588626 +479 555 .3343469361719828 +484 555 1.8820766314573993 +507 555 .21092071883091756 +521 555 -1.0452921978130643 +523 555 -1.4696607053341877 +524 555 .06834745043342472 +528 555 1.5259938529803383 +536 555 .07448090630184978 +537 555 .8783197711792866 +542 555 -.02323573605770274 +543 555 -.7100227499517213 +548 555 .08724159997251918 +550 555 .5766503551232118 +568 555 1.7625826614156481 +581 555 -.40019327082610806 +587 555 -1.3823090366018618 +595 555 .5255911950931691 +598 555 -.6242130433518427 +603 555 .8610195725394029 +620 555 .9047912418801876 +641 555 -.26307645321752215 +642 555 -.691563692802729 +645 555 .10015236977351252 +669 555 -1.1282363457461841 +679 555 .18474503909766943 +688 555 .6484644772742093 +692 555 .3008272172919039 +694 555 -1.460014894047202 +702 555 -.7072809168167392 +716 555 1.0518923328520184 +717 555 -.3918808826654111 +721 555 .7256450529238809 +727 555 -.8706074548727388 +728 555 -.2759606201175043 +734 555 2.0128800849892285 +745 555 .2907361427307116 +750 555 -.7171630915962791 +754 555 -.20298119824953853 +759 555 .7393362905973621 +763 555 .6406672976499789 +771 555 -.9421185167946188 +772 555 -1.2376502154053195 +773 555 -1.224937370361451 +780 555 -.32285067039856513 +786 555 -1.7005043917321558 +790 555 -1.2011348881760797 +816 555 .14600742682841855 +824 555 -.8038679703090867 +827 555 .2724179736501376 +859 555 1.2775479027977672 +867 555 .6164820842662178 +870 555 1.5410015166504138 +876 555 .20988033407032383 +881 555 .8955799071945292 +924 555 .9716116564166081 +939 555 .6306696503481835 +959 555 .7801498050499629 +969 555 -.9025725138236611 +986 555 1.500768975615821 +998 555 2.631070006159586 +32 556 -.04761036098037774 +35 556 .5639940097709111 +38 556 -.8053010101893727 +45 556 .9538247706531247 +84 556 .49833594589470875 +103 556 2.8310751731690025 +105 556 .06380194033529457 +114 556 .4849784766996479 +128 556 .4690318402750112 +138 556 .5665168785904213 +142 556 -1.047206717820986 +149 556 .19338502359679932 +159 556 -.5597443268666985 +174 556 -1.5749214132609228 +188 556 -.10079891023059233 +197 556 1.1558567261709178 +208 556 -.4915892840196909 +219 556 .7828003306781605 +230 556 -.8493767668702128 +244 556 -.16984313636678086 +247 556 -.1220163666661721 +248 556 -.31525825480273106 +272 556 1.1197400725164288 +275 556 .7783486957526197 +290 556 .26782865353857543 +310 556 -.1281910014317923 +321 556 -.9499739905182312 +324 556 -1.0697203321959587 +354 556 -.2480826865871879 +355 556 -.34437596827326544 +362 556 -.16042298681901226 +367 556 -.01813293447973066 +370 556 1.2015033828036399 +373 556 .9132133355392877 +389 556 -.15506653455487973 +407 556 -1.7418672457943694 +422 556 -.46158363057379836 +436 556 .9165197968751362 +472 556 .3296251595560834 +481 556 1.0364778222693458 +489 556 .13028077233330726 +514 556 .6941929422658698 +541 556 -.7765099637759862 +563 556 -.37731246068659235 +567 556 .7610160093413457 +575 556 .7342420253438172 +586 556 -.9027495514848654 +589 556 .8085767005516769 +599 556 -2.854402241574838 +608 556 -.910028991675697 +626 556 -.5883252192617361 +661 556 1.9320045004382398 +664 556 -.9270874543509038 +667 556 -1.2987123308738793 +679 556 2.211376612799896 +680 556 -1.1655962459492433 +692 556 .4797302851178198 +693 556 -.5402445221667507 +724 556 .2685711483793133 +771 556 .6702189967238532 +809 556 .6910012232971985 +816 556 -1.9760188359862036 +829 556 -.8507329521157686 +830 556 1.0147248627551484 +837 556 1.2115526763942495 +853 556 .5006409798926224 +867 556 -.8290304286800698 +885 556 1.4692598736323408 +888 556 1.2168253224837144 +895 556 -.1566359018561983 +912 556 -.46964612843097825 +923 556 .742344071373089 +925 556 -1.5197378517429938 +929 556 -1.3254297333783103 +930 556 -1.573612835600051 +950 556 -.772169048665735 +951 556 -2.1741528310822718 +952 556 -.5986036681903314 +958 556 .5980307639999393 +959 556 2.134349702486454 +964 556 .8499779238034829 +965 556 -1.689878009515873 +973 556 -.6275803508672548 +984 556 -1.1939079650191684 +999 556 1.7810252874968762 +4 557 .14795650648038572 +11 557 .2312785974958584 +14 557 1.9837787731618286 +16 557 -.46980860140605835 +18 557 2.624673579161334 +21 557 .8160795860344775 +24 557 -.6243952889397859 +36 557 -.5413003502494116 +40 557 1.637772261258866 +49 557 .1774129941593482 +55 557 -.20299283235339563 +67 557 .7415098441154622 +86 557 .677849557245981 +102 557 1.128186029171434 +108 557 .8876365474938132 +109 557 -.03694654532283824 +131 557 -.20998887778963168 +134 557 .015989806152170785 +163 557 .30323254840385694 +168 557 .5208764315804291 +174 557 .6388845362519774 +190 557 -1.1817138671535943 +193 557 -.7220661418959662 +199 557 -.31656653438571103 +220 557 .8862535529567475 +221 557 1.445124813888068 +222 557 -1.3048612607545416 +223 557 -.4479965408101915 +267 557 .5460166664141355 +273 557 .7717171718860588 +284 557 -.03191784398913153 +312 557 1.9587195677816358 +326 557 -.48242160870644807 +334 557 -.3897252058618056 +353 557 -.7147231483617201 +368 557 -2.0784458458549606 +375 557 -.3948146246814549 +390 557 -1.211355942187631 +394 557 1.0622888716322274 +398 557 -.23115081351308472 +418 557 -.0355147886217408 +428 557 .09229681039976569 +444 557 -.2632515418886795 +458 557 -1.6613368676118463 +461 557 -.527880469307714 +492 557 1.5692251916399036 +508 557 .634710228417043 +523 557 -.740172424936797 +554 557 .4057849917892722 +556 557 -.16681402938650342 +567 557 -.2234351168779527 +570 557 -.859128988936711 +587 557 -.7526822716070602 +589 557 -.3867475027778383 +624 557 1.8881865709786356 +626 557 -.6512661368974678 +635 557 1.3980094770467673 +643 557 .15397177169154103 +645 557 .03885931777061982 +651 557 -1.2504373212456987 +658 557 -.9384520377710183 +670 557 -1.7198199572774293 +684 557 .45881848288751453 +698 557 -.45787563595365466 +711 557 -.6555329399263488 +718 557 -.6216304116237615 +720 557 .5145843955480608 +727 557 .17633850364987017 +745 557 -1.6665056006707435 +750 557 .7533168533480654 +765 557 1.2057892869313984 +773 557 .4059829288038532 +775 557 -.1443915627408261 +780 557 .5946320564730243 +786 557 -.8596856164385192 +787 557 .6488628026320202 +798 557 .7084312706886289 +801 557 .564299483639536 +807 557 -1.06041148087678 +812 557 1.5284130953335051 +821 557 -.016729295033754754 +841 557 -.8502912826718555 +849 557 -.15612004326381312 +856 557 -.22914931156475682 +863 557 .5738450176883447 +866 557 -1.5817199948847518 +876 557 -1.7220123686855788 +880 557 -.8813448188753347 +887 557 1.1957651769007758 +901 557 -.8037516455319103 +902 557 1.0527248152922288 +903 557 .0642912064684418 +904 557 .18118331796380815 +932 557 -.0654264862004523 +933 557 .7016799501027527 +954 557 .8491094863097288 +955 557 1.012053843696751 +976 557 .604613282580943 +996 557 -.9495136706503479 +1000 557 .00973648322762727 +4 558 -.01564293253582305 +11 558 -1.0234454895790799 +19 558 .16015056696521512 +22 558 -.6889610386947194 +73 558 -.6130646653319585 +76 558 .5560748919029164 +107 558 .33159482955148173 +110 558 -.522868578195721 +111 558 .8800172178522732 +127 558 2.1749139472557566 +132 558 1.324886967660429 +133 558 .9610901611231436 +137 558 .3430025129841083 +140 558 .33286348980069536 +161 558 .009138560538046916 +164 558 -.9256216200484788 +174 558 .25215577769967645 +182 558 -.7635931776031639 +188 558 -.009064222542971997 +190 558 1.6415839160891486 +191 558 -.4537116303122809 +224 558 -.3836371339822816 +228 558 .9292845332423121 +238 558 -.6588217146163489 +244 558 -1.3814749306622642 +247 558 -.39551793527860507 +250 558 .16471289820150795 +267 558 -.044757025541222184 +293 558 .5834622977371385 +315 558 -.8981663518710271 +319 558 .3678924405531175 +329 558 .3253674837400483 +336 558 -.6908215769830107 +342 558 -1.0054699949733896 +345 558 -.40701749758495176 +352 558 -.6603605973849936 +369 558 -.8310591934233021 +372 558 1.59297341610131 +381 558 -.7405488637635907 +391 558 -.9295286750725025 +411 558 -.06182079348384352 +415 558 -1.3479925235117352 +418 558 .5165954758933835 +428 558 -1.004567322931538 +433 558 -.9998788390247164 +437 558 1.1034244806967632 +443 558 -.2528978027934353 +450 558 -.07474161848792386 +453 558 -1.5929033922870972 +470 558 .9539221205825588 +475 558 -.24167285727172041 +481 558 -1.1145192203500582 +502 558 1.540628148632291 +542 558 -1.3059200913325064 +571 558 .6873021301138622 +572 558 -.4120556159857305 +582 558 1.3193130999855134 +589 558 -.7696783636792324 +603 558 -1.6030298443791917 +647 558 .47448487009490714 +652 558 -1.2919075399484756 +671 558 .3379231507419662 +674 558 -.023383880524972325 +676 558 .7471236644962728 +698 558 1.7155512399931803 +701 558 -1.099478475207571 +705 558 -.18394043610547844 +716 558 -1.0176143792771297 +746 558 .011170409167705578 +752 558 1.8282071543284446 +757 558 -.882331259102411 +827 558 -1.0144562992675827 +834 558 .24842754909069314 +853 558 -.8410648421621816 +856 558 -.2843996489318973 +858 558 -.5737605095174372 +860 558 .2849589668122402 +866 558 .9539290513752111 +867 558 -.8995359145723717 +868 558 -1.0625696886276748 +872 558 -.9579485158448335 +898 558 -.3853740387623682 +900 558 -1.5859154473816233 +916 558 -.19816673010174812 +924 558 2.691674945435809 +928 558 -1.0744602269464865 +961 558 -.15082296967241746 +962 558 -2.56909918825509 +968 558 2.321108243248533 +973 558 -2.392559743860056 +989 558 .5236229225841307 +990 558 .5761354512058418 +994 558 .778592259512502 +998 558 .616596596096344 +2 559 -2.0854842066691797 +22 559 -.22768688252323088 +24 559 -.5517419949703363 +44 559 -.7414298816938085 +48 559 2.3471145875586963 +52 559 .7857017402508829 +61 559 1.6209277799697042 +63 559 1.156618905969381 +68 559 .8064494268000202 +106 559 -.2511580368867306 +112 559 -.4919189127733615 +121 559 1.7203510479042219 +124 559 -.748816611772182 +128 559 -3.282999075993351 +137 559 -1.6410584568150353 +143 559 .8855382686546871 +146 559 .8593664970964984 +156 559 1.4134592739522358 +159 559 -1.2112358882823113 +165 559 .039477595890885106 +167 559 .5641035782565453 +187 559 -1.0046061806506883 +201 559 -1.8294118038198062 +212 559 -1.958942072024289 +235 559 -.295637033216858 +236 559 .4154007147118261 +258 559 .013789890889957232 +260 559 1.1329207592254644 +273 559 -.7188648552261028 +278 559 .12059338538204425 +281 559 1.048363361312153 +302 559 .46122555655428443 +309 559 .45982590921641237 +316 559 1.9451129368923534 +336 559 3.3170490727702484 +346 559 .8066603619105117 +367 559 -1.508999446519681 +369 559 -1.104594006740516 +371 559 -1.9832899012708176 +382 559 .1374976115607568 +404 559 -.9119083958101504 +409 559 -1.0379313444308118 +418 559 1.8752100451380989 +419 559 2.99177079245968 +421 559 -.8185062370285962 +441 559 .5981659506810042 +451 559 -1.3226942625428586 +453 559 .07868289330090261 +474 559 -.6740731375013228 +502 559 .17301136919771276 +523 559 -.11953111021563034 +537 559 .3276322014220515 +553 559 -1.1671419375771883 +563 559 -.10732442225404443 +572 559 -1.0545996870582743 +582 559 .24510520639537126 +584 559 -.3874522287128711 +599 559 -2.6329774160742736 +612 559 -1.8203774994492539 +617 559 -.7304448966517033 +619 559 .11860142006661553 +622 559 -.031086561814970867 +624 559 1.110690419977334 +644 559 -1.4925048266937828 +655 559 .9784726575960289 +656 559 1.3358272247043517 +664 559 2.7726703900131047 +705 559 -1.3957418876545402 +714 559 1.1269891046011549 +716 559 1.936903350503976 +721 559 1.1240032085633134 +722 559 1.261572898287411 +731 559 .876053372300847 +754 559 -2.1682557797978683 +771 559 .2911285934494369 +775 559 -.5361401098385593 +778 559 .876469228278157 +780 559 1.7664360302915292 +783 559 .43422484452244453 +787 559 -1.0950275500181361 +790 559 -.1107404167694558 +802 559 -2.175524472305158 +810 559 2.5571161592982277 +823 559 -.5366353323883302 +830 559 -.8919724690220222 +844 559 -1.148519835281836 +861 559 -2.0413644622198057 +865 559 -1.6503335527373681 +883 559 -.17888147194756482 +891 559 .00724778974268675 +905 559 1.4643333545429198 +919 559 .1683954104645361 +937 559 -1.2525853604895743 +945 559 -2.6059568091623038 +948 559 -.03726967541504789 +951 559 1.1328012743046778 +952 559 1.4645501342253917 +957 559 -.3214971823500033 +958 559 -.18940210303532937 +962 559 -.45158134439435316 +969 559 .34179503376679604 +979 559 -.3338690408413257 +999 559 .5357974557614872 +4 560 .842424487810073 +20 560 -.5709925704715473 +36 560 -.8769498216546068 +44 560 .28009433269264644 +45 560 -.934926480505082 +56 560 -.4488623532782018 +62 560 .330796047256413 +77 560 -.16507836545933657 +81 560 .04884467300431874 +90 560 .7622803626206115 +92 560 -.3702799688435175 +116 560 1.0444055116636417 +134 560 -.6376033297196478 +140 560 -1.5259026725065654 +141 560 .00921881633451331 +147 560 .8511419436830663 +155 560 .7192000911130537 +168 560 1.0594507806360374 +186 560 -1.3105568180171474 +197 560 .03418902660931968 +200 560 -.6555336824288895 +208 560 -.5762416670432278 +215 560 .6768874126799819 +232 560 1.1901232604666987 +236 560 .1523453478113943 +240 560 -1.2121385674639429 +245 560 -.9723709024710729 +255 560 -.6907661792309787 +262 560 .15746173877523145 +294 560 .2843880953736977 +305 560 .5052500586207397 +317 560 .11941734956910047 +320 560 -.623591764971596 +321 560 .04231827722850545 +344 560 .8868347966677805 +350 560 -.5762966213347922 +378 560 .42463126309560406 +394 560 .10911939454086278 +396 560 -.5602287640348673 +401 560 -.6055281234636274 +415 560 .20129658339026105 +435 560 .2888315219242933 +441 560 -2.2526227568345334 +442 560 -.40965993423790686 +450 560 1.450193117626645 +457 560 1.127247900595532 +484 560 .7961960754572782 +499 560 -1.0877337744344968 +518 560 .8368081988405422 +531 560 -1.563770933122803 +533 560 -.07919656998473046 +538 560 -.9217158123299327 +555 560 -.6045606136133164 +567 560 -.18831342385033514 +570 560 -.0005525050378257096 +580 560 -.22994542422279704 +585 560 -1.924061189715645 +590 560 -.604169459803862 +595 560 -.23238442872279721 +609 560 1.3991420809165342 +611 560 .5603979357473207 +623 560 .4784540707957482 +625 560 -.08762524650987191 +633 560 -.04771347055267997 +635 560 .7633852886913803 +643 560 -.7699474674041752 +662 560 -.5361819660198824 +665 560 -.24671813368007506 +667 560 -.5921409453565242 +668 560 -1.1544661154202647 +679 560 -.588143328218084 +681 560 -.04940673598242987 +704 560 -.27024428008785445 +718 560 .2858273050527367 +734 560 1.6333459800788774 +735 560 .7785248251393734 +765 560 -2.2053585980698296 +771 560 -.9197373375730618 +822 560 .5514375134175544 +824 560 .3425780446470545 +828 560 -1.1247336212257428 +829 560 -.22926727405723982 +840 560 .9352290524506716 +844 560 -.8658260405557994 +845 560 -.5392672319546935 +850 560 .3954533489873495 +859 560 .47337004111956055 +860 560 -1.258502076150657 +863 560 1.782148607660658 +864 560 -.816007020023761 +891 560 .2509122274306701 +923 560 .15167850647129502 +948 560 .3430489796532472 +960 560 .5834023848300323 +982 560 -.1610110511354068 +988 560 .026813610286947565 +992 560 -.6999725305357852 +994 560 -.2171238223329251 +995 560 -.7553243190746053 +2 561 -1.03940287124209 +22 561 -.4449886437654676 +33 561 -.9900511393001239 +83 561 -.9925828812776651 +91 561 -.7518971882305723 +92 561 -.14138495805423915 +109 561 1.289955362614904 +113 561 -.9071058201088043 +119 561 -.22435444678301186 +123 561 -.7883968172173085 +127 561 1.347855996058691 +129 561 -.3614774048324722 +138 561 -.30271306298825496 +146 561 .37554334407664225 +164 561 -.15973960279876245 +185 561 -.0917470343849708 +186 561 -1.2472558944519876 +205 561 -.46966834614855396 +206 561 -.4206873516184908 +217 561 .2759592351477078 +220 561 -1.4869733444268771 +224 561 .6108740388153606 +225 561 .20521161893680517 +234 561 1.254449689334605 +236 561 .24007304067575963 +241 561 1.3208219197563158 +271 561 1.8881987029357068 +273 561 -1.4101158577823416 +274 561 1.1920290882597295 +275 561 .049293447003009534 +278 561 -.810386227752586 +279 561 -1.273360445745281 +302 561 -.2540937592816499 +310 561 .15005190216122943 +311 561 1.414262805460893 +312 561 -.9229838630944056 +313 561 -.3399987036392151 +334 561 -.03799815002895038 +351 561 -.6096397391148886 +353 561 -.8635949148948097 +371 561 .03879779060681931 +372 561 .4648114137306507 +389 561 -.10263890491920348 +396 561 -.04835043066942863 +403 561 -.6673192321276442 +419 561 .3198307876044133 +432 561 .04667840209240423 +445 561 -.3404378119182094 +447 561 -.4178944772044803 +461 561 1.4906105851996434 +501 561 -2.9380278962939723 +516 561 -.34605581055611545 +526 561 .3223848031784847 +545 561 -.8978867641914174 +558 561 -.3742772659369029 +593 561 -.05116628805530004 +605 561 .9795491178434381 +637 561 1.1061965637219888 +651 561 -.19327249258514045 +652 561 -.27609917142771173 +655 561 .7785614987329927 +666 561 .15672366651307382 +668 561 -.6273189544428313 +675 561 -.09112313584687773 +677 561 -.5351840781732324 +692 561 .8738287900458325 +695 561 1.138646381198772 +696 561 1.0244284068363556 +698 561 1.4552853580421163 +707 561 .003929165387390665 +711 561 -.8347017204582309 +714 561 -.9138540618967007 +723 561 -.16374974608480922 +731 561 -.17260797661243768 +736 561 -.7150755682039388 +761 561 -.3789554317551734 +773 561 .030556164223630427 +774 561 .3330228631340725 +777 561 -1.005146956516094 +778 561 1.1064861417998892 +779 561 -1.1796526866035753 +809 561 -1.3687889165595015 +812 561 -.3417085701117919 +820 561 -.49382717635017487 +824 561 1.1074147040622337 +846 561 .27432895125630635 +847 561 -.6328161420470046 +849 561 .7039620117902314 +851 561 .22181055605833652 +864 561 -1.0481497057219384 +870 561 .900122923847503 +873 561 .12685069959936962 +878 561 -.9353128880643917 +887 561 -.05368169836438423 +895 561 -1.2084128400648393 +902 561 .21640972003861 +925 561 .31604394370830874 +940 561 .8227309129449828 +941 561 .3678846833326155 +944 561 -.32431277149169985 +949 561 1.5090424363604038 +955 561 -.38605803547564366 +967 561 .8998727147626382 +971 561 -1.3733642843741798 +5 562 -.4377867292608699 +25 562 1.7604825125872514 +37 562 -1.5886022311785462 +39 562 -.18818304271003786 +53 562 .038652230953271124 +54 562 -.6511262502536576 +59 562 -1.2141524301410467 +69 562 -.16980368772999693 +127 562 -.002766150585770205 +143 562 -.047156212175543145 +169 562 1.1582273055566192 +187 562 1.906056401189293 +200 562 .7854715050659717 +205 562 1.2983947873241546 +206 562 -.6605668043693915 +216 562 -1.5758096174725953 +228 562 -.6211596374285118 +235 562 -1.0443131622324775 +236 562 .12473088382714076 +272 562 1.739257131244678 +281 562 1.8856321255901303 +300 562 -.02583055087302935 +304 562 .6785345033995182 +309 562 .5915560567750217 +312 562 2.1768531276360186 +326 562 .41141047266824254 +334 562 -1.4466680543710833 +343 562 -1.3225906416049662 +351 562 -.8296218005302746 +358 562 -1.153397681936456 +361 562 1.4056321184834917 +372 562 .34717236261337375 +419 562 2.721213568692353 +421 562 -.03052265048886771 +439 562 -1.6277411773838792 +446 562 .6999336090399773 +472 562 -1.065928888154843 +496 562 .41046711600415475 +504 562 2.5502011546203587 +509 562 -.9616414355431256 +513 562 -.4731573042403662 +520 562 1.0252110567402073 +533 562 .4199854268404375 +537 562 .802692156535174 +547 562 1.4360270995307407 +555 562 .4824036785024634 +610 562 -3.0434071033364543 +614 562 .8247160764575074 +615 562 -1.5085888847658704 +619 562 -.22108979839210258 +623 562 .19377608882524539 +632 562 .08367388713457267 +634 562 1.5396510780732129 +639 562 -.3900741114854334 +663 562 1.0066760825230125 +671 562 -.8339658610690078 +674 562 -2.7426912962037426 +680 562 .33505095132073126 +691 562 1.0224994925369706 +694 562 -1.0784739948325093 +697 562 -.47378832360185075 +702 562 .15876781473123552 +703 562 -.19793498730703873 +709 562 .7270771028148282 +712 562 -2.1177113546536375 +715 562 2.1200549586185087 +730 562 -.972012061969414 +731 562 .6929282244338046 +773 562 1.386324565307217 +774 562 .5205977029481453 +775 562 -.46711711144963347 +778 562 -2.5261279152525042 +802 562 -1.2850131946005543 +804 562 .5796825994855075 +812 562 1.4756800571575126 +829 562 -.5471562757247568 +831 562 -2.4058992448194636 +832 562 .17817708916462444 +851 562 -.010386031125925158 +860 562 -.49200171187837305 +884 562 -.7356570551147877 +902 562 .9997554448784822 +922 562 .12650754421588262 +960 562 -1.9878807294081229 +964 562 1.201038871411376 +965 562 -.3884010062825058 +973 562 1.7017838192471384 +23 563 -.29315194630226177 +33 563 .5626551096505262 +34 563 .34952374508325784 +39 563 -1.0064136243624737 +43 563 -.5440200784313401 +68 563 .352523340230239 +76 563 -1.0889604131069364 +100 563 -.28723385074503494 +103 563 -1.7194128249378506 +106 563 -.8347736177108682 +110 563 2.334765157080896 +134 563 .6335594819482486 +158 563 -1.6805548040720573 +159 563 -.733873241399365 +160 563 -1.1027742104051106 +162 563 -.8322246165760494 +165 563 .30088817747571717 +192 563 -.9814588786228676 +196 563 -.5771957350814323 +219 563 1.2832610551064152 +241 563 -.3652329968956078 +248 563 1.80586199562498 +283 563 .09269871068076085 +288 563 .6430004623765743 +308 563 -.3769724909989105 +309 563 -.27047340930159436 +317 563 -.3674141406801517 +320 563 .3225498907594157 +326 563 .6954864830314467 +328 563 1.3890898533792706 +329 563 -.4654523713563118 +340 563 -1.1415614919658217 +349 563 .33866100571667 +355 563 2.694246166154111 +357 563 1.3774029492320505 +364 563 .21406481937234123 +373 563 -.5615537043309242 +388 563 .06632976522936261 +391 563 -.914980312745541 +408 563 .3823639039471869 +432 563 .5259874675518125 +433 563 -.8533070723135827 +434 563 1.0238507628620324 +449 563 -1.87065089733564 +451 563 -.6619101009697226 +459 563 -.39399228214690574 +473 563 2.371470499708863 +481 563 .3857986705331041 +483 563 1.0949365518676544 +492 563 .7719321007203387 +496 563 -1.1330891424002363 +499 563 1.9143004677057958 +510 563 -1.1985161007350704 +512 563 .11712840374015686 +522 563 .6546605360016492 +527 563 -.5409596332124946 +530 563 -.09802573676941671 +543 563 1.7088773728666082 +546 563 -.08106185401158691 +550 563 -.6757744039604532 +558 563 .4727720064075379 +568 563 .46049139384365584 +578 563 -.024783068437872 +581 563 1.3285386131607433 +590 563 -.005184428613625128 +593 563 -1.0472357630036098 +603 563 1.9162055531776783 +609 563 -1.331765901902381 +614 563 -.5682646350412106 +617 563 -1.4786797467737585 +637 563 .7421399843545711 +645 563 -.3000798378018782 +648 563 -1.6693463834672977 +670 563 -1.6642407335903053 +673 563 -.04178792097570659 +694 563 .24790628318408153 +696 563 2.19398769829731 +720 563 .36919841819824345 +723 563 -2.3894834283468533 +762 563 -.3100044356041113 +769 563 .9283285860394421 +817 563 -1.0052904627228485 +821 563 -.8724210375348052 +827 563 .686127034505625 +856 563 .9134642733548746 +873 563 -2.326249605779668 +892 563 .6422767726212396 +895 563 .7566772556336009 +905 563 .8908621043637048 +918 563 .04687786528187801 +934 563 -.5912877700528221 +944 563 -.4862431276783278 +954 563 -.6000665360279158 +980 563 -1.777436087343443 +986 563 .6597686270918987 +998 563 -2.323929523981582 +14 564 .3989054765288641 +21 564 -.24486973381935773 +31 564 .8316817675870701 +41 564 -2.1985284513478396 +44 564 -1.2220493433469901 +87 564 -1.3469199524642261 +88 564 1.0670000479546977 +92 564 .2451437877961538 +94 564 -.3584472364591959 +104 564 -.5526107226085937 +106 564 .36810109990131773 +110 564 -2.1111773870483845 +125 564 1.2550276119833081 +133 564 -.22424357171414944 +138 564 2.7530027271829898 +155 564 .49948946964073127 +163 564 .4367772413862946 +170 564 .6550173324615293 +176 564 .5568018449969732 +188 564 1.7423160358813625 +196 564 .6175077521284068 +198 564 -.41107842427954583 +211 564 -.21106041602919454 +215 564 -.04445350379519142 +223 564 .6013945342474106 +228 564 -.5019934061512423 +229 564 -.2995477614902544 +231 564 -.6331463432466264 +236 564 .13354043882663438 +247 564 -.05952367215233355 +256 564 -1.3246950206759116 +265 564 1.0784610854934091 +275 564 -.40747768299149173 +280 564 .13083236568346557 +288 564 -.6652370929706045 +305 564 .1464481843566231 +306 564 -.39246074157687827 +308 564 1.1433084581090802 +311 564 1.7779580284864835 +326 564 .48080942101815743 +338 564 -.8745771659702419 +341 564 1.4073589965008904 +344 564 1.0020482178420431 +375 564 -.3538764835744581 +385 564 .46736343989929463 +389 564 .33043147365273895 +395 564 -.8532861872562066 +396 564 .7422557006193127 +400 564 -1.308562106922964 +404 564 .3960797817965529 +416 564 -.2548625326497672 +427 564 -.8589058638280709 +430 564 -.5568632104633774 +448 564 -.898837785434195 +473 564 -1.7152559082283687 +493 564 .11512805134874168 +507 564 -.12850850468980862 +511 564 -.3325786034786293 +540 564 -1.3923190672060557 +542 564 .36223157320139165 +547 564 -.14489398467901834 +551 564 2.171751820465965 +553 564 .9781975152492712 +572 564 .4303307655314927 +577 564 .07100106768849868 +580 564 -.14147029788471244 +585 564 -.24283022540747098 +587 564 -1.4411730315136428 +630 564 -2.250666477122086 +635 564 1.917556812459935 +637 564 -2.1620934615640754 +659 564 -.4381426544579123 +673 564 .9335842257348432 +697 564 .676412457763714 +704 564 -.04511258905738813 +707 564 .49796192968329434 +723 564 .38307359991761814 +730 564 -1.1238049418116682 +744 564 .7471725665360922 +757 564 -.019762620684044024 +762 564 .048709448639868175 +765 564 -1.7993290972035616 +771 564 .9203338571429333 +778 564 -1.8913626644472272 +781 564 -.170658804863104 +791 564 .0332663345190224 +792 564 -.06498938421913142 +800 564 -1.0611215255588815 +803 564 -1.5146901792686673 +805 564 -.8788397997685642 +816 564 -.5564861907003614 +857 564 .1059445112831662 +867 564 -.4074776375016416 +870 564 .6337843617205953 +871 564 -1.505552304608482 +874 564 .015873650774204884 +882 564 -2.005984911867411 +886 564 -.1863918680684763 +940 564 1.4828266986387977 +948 564 .6723860852265516 +965 564 -1.0633236809192321 +967 564 -1.2204179690253047 +979 564 -.5607769909317234 +980 564 1.1402931798335367 +993 564 .737699196093228 +995 564 -.5178487333096793 +1000 564 -.35481053031130255 +3 565 -.7693495337427938 +11 565 1.4132282852416198 +13 565 .3394337903022691 +16 565 -.5526647950512438 +28 565 -.05224866756194753 +35 565 .5271031616777985 +56 565 1.0460679131763364 +65 565 -1.1477664937435301 +81 565 -.6810585962161176 +85 565 -1.5279677092556019 +102 565 -1.1116749878545729 +112 565 .4979054921344499 +116 565 1.45451675265099 +131 565 1.0193038280392472 +132 565 -.8881655802847976 +133 565 -1.0764083756103133 +151 565 -.3961043720662873 +159 565 -1.3093913612241954 +182 565 .3693359235118683 +231 565 .6761140323857399 +234 565 -1.369299514685782 +262 565 -1.2009295058172906 +272 565 1.3099469882536092 +286 565 .23035098525748915 +298 565 -.27296299499593246 +310 565 .16791982415247872 +346 565 .38870028109478183 +354 565 1.8565468454751937 +366 565 -.27170461889469266 +374 565 1.4722666183564768 +375 565 -.4876951939834505 +391 565 .48762727429627994 +392 565 -1.014819579778787 +396 565 -.28972334764103086 +397 565 .8058120702814698 +399 565 1.195124619696838 +406 565 .5926734464494842 +412 565 -.607648044195364 +413 565 .2957649566380386 +429 565 -.67661232146298 +443 565 .847891072495441 +463 565 -.872870371648955 +479 565 -.5245961928950655 +488 565 1.1630947467387311 +492 565 1.497954168227504 +498 565 -.29998485334986597 +499 565 .5935133058470896 +511 565 -1.0074697261287715 +515 565 .08277802379412957 +530 565 -1.3434289104941184 +534 565 .6693134942122566 +554 565 .43342274918904866 +557 565 -.8357053311935931 +562 565 -.8406556287223604 +593 565 -.11388739380402725 +642 565 -.025084448800020913 +647 565 -.800035595597039 +653 565 -.9819933781790687 +665 565 .5525623073727637 +667 565 .180433260370938 +673 565 -.11487268057539121 +678 565 1.1894410328896436 +679 565 .8417302230229119 +709 565 1.2415647919464199 +710 565 -.380865500234862 +715 565 .7176459527371138 +732 565 .3430134771691205 +738 565 .46488315078962206 +754 565 .2742394251418986 +755 565 1.5242307999890294 +761 565 .6125566142497345 +767 565 .1949426184564428 +770 565 -1.066590205294842 +790 565 .0248995009116295 +792 565 1.2568548138232294 +793 565 1.1058055270724798 +803 565 -1.754742243930265 +808 565 -.47297515363841675 +809 565 -.49824222344390673 +812 565 1.2088750690726084 +816 565 -.7514823999030263 +823 565 1.5692273112178496 +826 565 1.5349354455137882 +863 565 1.2000001190616048 +902 565 1.0339789735715832 +903 565 -1.7477201057008287 +909 565 .5705741035638315 +916 565 -.21445994312117259 +919 565 .64176181717183 +921 565 .5882988762648365 +935 565 .6966550996289333 +950 565 .9187850165294371 +961 565 -.5643471743410976 +993 565 -.3581535773905483 +997 565 -.782462807958686 +9 566 2.5532051161215086 +13 566 .07366241655750348 +41 566 -2.3334179805772473 +50 566 -1.2218130550228288 +55 566 .28333375838655805 +56 566 -.2365431246687922 +71 566 -1.3942987224313463 +73 566 .5676779827403328 +79 566 -1.5939765958467356 +90 566 -.42567877043281727 +101 566 -.19301025700568494 +113 566 2.026344416119834 +115 566 -.07004681304342865 +128 566 -1.5406184978020276 +135 566 -.6926123731805419 +136 566 -1.178382656213756 +161 566 .9424072421273915 +173 566 -.3919098557506365 +183 566 -1.8920355491469472 +196 566 -.9180491511419323 +211 566 .45313584270780605 +212 566 -.27820447302627654 +215 566 -2.1932424701018194 +222 566 -.8379559318994818 +224 566 .704826048761774 +244 566 -.7259156605281318 +245 566 2.516666678185205 +283 566 .347224404271512 +302 566 2.6865994375808095 +308 566 -2.1701025945141095 +320 566 .7004298027547645 +331 566 -.28328395042994253 +341 566 -.3812122990543857 +346 566 .7042717774142812 +357 566 -.9189842513720796 +373 566 -2.198216430102135 +374 566 -1.7529398994195176 +388 566 .37416884418903607 +390 566 -1.702837613122271 +393 566 2.276585147413516 +400 566 -.23293563761214856 +412 566 -.10126282636422917 +434 566 .33121274172285825 +449 566 -.8635206731612382 +454 566 -1.379337795602489 +462 566 1.112899609305776 +486 566 -2.637886159629519 +498 566 2.1313488926313986 +501 566 -.3109731819348396 +502 566 -.32324435860827105 +509 566 -1.2444924714228085 +527 566 1.4159801643395684 +528 566 -1.1786040110835305 +554 566 1.0759071004528826 +563 566 .38861938447955013 +564 566 .14095343915459457 +584 566 -.9862992310220389 +586 566 .5875161107863384 +587 566 -1.1640371628235067 +607 566 -.40736004407089194 +637 566 -.8479997576323086 +642 566 2.8889314220446978 +653 566 -.1264806154636218 +656 566 1.5520401773539367 +660 566 .6311101823359575 +691 566 .6636884331993097 +693 566 -.5372163595004442 +700 566 .24940148946064816 +703 566 .44795786555693706 +711 566 .09759117254402777 +738 566 -1.0423813435235803 +752 566 -.5580795505669525 +767 566 1.008876968339708 +772 566 2.072109197735447 +780 566 1.7605396598759244 +785 566 .7477677868264503 +789 566 -1.1477507449974687 +793 566 -.19708893783336032 +798 566 -.8032411751993527 +829 566 -.24087869920505886 +833 566 .7644700824469364 +835 566 1.046580030349153 +839 566 -1.360723165994877 +848 566 -1.7498860907533729 +889 566 -2.1658570068015566 +912 566 -1.0740723559013352 +925 566 -.7419145081404859 +942 566 -1.2774056091752817 +943 566 .8661900056080847 +954 566 1.0225444295766417 +967 566 -.19537171371826406 +978 566 .40645871700427705 +992 566 -.5092914308676297 +18 567 -2.122589609459719 +20 567 .23254624914187977 +40 567 .21507615458571638 +45 567 .634156078500824 +57 567 -.2529091164128322 +62 567 -.18682447985603995 +67 567 -1.0352339447075578 +73 567 .7255523312164124 +88 567 -.1201398918087754 +98 567 .20033880293603068 +100 567 -1.1215129630398466 +106 567 1.1024197873642079 +122 567 .19655116581424803 +135 567 .18165662290887385 +149 567 .028362138523117884 +159 567 -.12381730266377877 +162 567 1.2946277497314413 +167 567 1.0474061328823905 +186 567 .1644393843910868 +202 567 .3363075518233938 +224 567 -.5103880617360523 +231 567 .8963646601945602 +242 567 -.8752682254872124 +268 567 -.885029602145436 +270 567 -.5532588208469524 +273 567 .3139758595244814 +283 567 -.04781030847587911 +290 567 .2500257644950998 +292 567 .16092699332453902 +302 567 -1.0126828017394096 +310 567 -.4885453865199139 +311 567 -.4885519376667252 +312 567 -.48591456311051795 +317 567 -.019933772929957905 +321 567 -1.3693776117981649 +334 567 -.4557095296730965 +340 567 .11205343884723581 +346 567 -.45776078166462647 +359 567 .5251090070190613 +374 567 2.2283372220189936 +396 567 .1749199284134296 +410 567 .08722081524407203 +417 567 -.833847803171322 +422 567 .17005499786592992 +434 567 .20908042932497575 +443 567 .4882275544295992 +447 567 1.0429806147025822 +454 567 .046733794275533605 +469 567 .241493535242551 +478 567 -1.2296297669964444 +491 567 1.0728901255702417 +492 567 -.9244021212061699 +503 567 .2111162377641807 +505 567 .3235788801806492 +514 567 .29840752441511736 +517 567 -.3916534463053579 +519 567 .357497964519791 +528 567 .0019526242596963894 +532 567 -.12426875110858258 +541 567 -.08743077898587753 +556 567 -1.3001123041791012 +581 567 1.9343041949583455 +582 567 -.2694343639164988 +603 567 -.3259097755366588 +605 567 -.6843513934172295 +606 567 .2623600564517428 +613 567 -.8095550608715146 +615 567 -.2924064188089848 +619 567 .5380248044611193 +632 567 -.6786289462482653 +647 567 -.3209309446405324 +654 567 1.4083859834389545 +679 567 -.10214540806852003 +686 567 .31588415269384806 +697 567 .20960517724385436 +701 567 -.08011102745392856 +717 567 -.20141951157941082 +723 567 .4373692808229316 +729 567 .352396576981979 +743 567 -.6579240493404084 +746 567 .26636947550844653 +747 567 .6597967777058467 +782 567 .30046910566629714 +787 567 1.0286983295471415 +790 567 .3956624739680778 +802 567 -1.3113895901601067 +812 567 .5545310857219227 +822 567 .2706204230237167 +854 567 -.2267580297974534 +865 567 .476614703811551 +869 567 -.3154640692476579 +875 567 -.690775861357925 +879 567 -1.0757728926991363 +889 567 1.3286256227642703 +891 567 .5150538033951513 +893 567 .2168993311828894 +923 567 1.287435184213352 +928 567 1.0028072889422053 +930 567 .30513597107055884 +932 567 .8686874781432234 +940 567 -.10745303689723082 +954 567 -.5335635507256706 +963 567 -.6048568682257031 +969 567 -.8724682161258275 +972 567 .24062927175672635 +973 567 -.6982020964207025 +9 568 -.43019443498722326 +21 568 .6709624545776532 +26 568 -.9391885720756913 +37 568 .42260217422806373 +50 568 1.207968486890982 +59 568 .17352425148903733 +101 568 -1.1182348171104985 +108 568 -.5034176017412738 +122 568 -.038425301917369786 +130 568 .3357164487167562 +145 568 .8660409961494934 +165 568 .9553346045726135 +189 568 .8327196492001181 +197 568 2.4688536429529395 +198 568 -.6473258087522709 +199 568 .34569854227646457 +211 568 -.5773641848492128 +225 568 .0331378033132598 +230 568 -1.031157009753806 +231 568 .5834371075421558 +234 568 1.8249308103502957 +251 568 -.7298217540270635 +253 568 -.1210594888541498 +287 568 2.414714447040819 +312 568 -1.1828486014261914 +314 568 1.4119401810156527 +317 568 .5685055150676558 +326 568 .0067331450705243046 +338 568 -1.053943650936044 +355 568 -.5008520783032571 +361 568 2.3072267593129983 +362 568 2.0894657715408353 +365 568 -.2081227311169297 +368 568 -.8567368025021947 +377 568 .03392261388182019 +380 568 -.8857641603573267 +381 568 1.2086903460839993 +423 568 -.5295464093417728 +425 568 -1.2964454691004312 +433 568 .31304957934981315 +453 568 -.16112037263577283 +472 568 1.5663561959369399 +477 568 2.091990931856804 +493 568 .5542069127002985 +494 568 -1.3009328380929832 +497 568 -.7299665978872516 +504 568 -.7495707339866484 +506 568 -.2504024066690139 +516 568 -1.8105043659514368 +518 568 -1.9133518187710077 +525 568 .22677507732055938 +535 568 -1.4048976381162361 +547 568 1.2834874508893617 +553 568 -.35674335887136804 +575 568 3.3136783969620507 +594 568 1.1226893419484196 +596 568 -.23260908987765655 +638 568 1.1166707105677671 +646 568 -2.7309307889086756 +648 568 .3291519933669085 +649 568 .9918536707640297 +651 568 2.44110005868244 +668 568 1.1542844843806643 +678 568 -.9066384241383532 +694 568 .4706081089582511 +705 568 .6680810833361419 +720 568 -.3750967650810395 +722 568 -1.4918436688814074 +724 568 .07818045129993863 +731 568 -.8126146473967267 +737 568 .42219640866273256 +758 568 2.5420012035042516 +770 568 .5986797047464555 +775 568 -.03759594971867178 +784 568 .20279872058601128 +786 568 -.4113777409630962 +808 568 2.4337075988830787 +813 568 -1.6680427231610164 +826 568 -.1092813848825407 +834 568 -.14386174957153086 +845 568 .11926676524427135 +862 568 .6821100666427349 +863 568 -1.8574361868123368 +883 568 1.2402071711789826 +893 568 .2823908778995842 +896 568 .868924878044195 +923 568 .9776020704157806 +924 568 -2.1187231621486626 +926 568 -1.8155640093892698 +932 568 -.743876194402302 +950 568 .8784153454090052 +957 568 2.070558043674245 +962 568 -.9450011773268171 +970 568 .6287242355959817 +5 569 -1.375547365752518 +28 569 2.269814399739833 +30 569 2.612350209020766 +34 569 .9949411825189475 +74 569 .8471800932968525 +85 569 -.37171851721443755 +86 569 1.069579583962762 +88 569 1.1644460554960012 +95 569 3.1245380456773293 +118 569 1.975085666701264 +119 569 -.8091010980362981 +127 569 -.07380842317675712 +128 569 -.24503534212210556 +132 569 .2627102253870714 +145 569 .24044167269758981 +146 569 1.6132122130144 +150 569 .7231161246146862 +172 569 -.5349931494145742 +203 569 .07507794135133797 +214 569 -.42845953137928483 +227 569 1.3302898234100229 +231 569 .1959213538989688 +232 569 1.7325675093811606 +239 569 .8077173251603545 +250 569 -1.8473098287585754 +251 569 -2.103141722562677 +285 569 -.2968958938971164 +304 569 -3.20672005109141 +305 569 .26311182281672285 +306 569 .45305514510938094 +308 569 1.5591969695881973 +311 569 .8714038264883885 +313 569 .3122315651940732 +338 569 -.3128497351994898 +356 569 -.36315949989858043 +374 569 2.0358153250632154 +386 569 -1.1815666920425714 +387 569 -.060787791934682714 +399 569 -.03858857321506108 +404 569 -.004889827328936228 +406 569 .5118746967670983 +439 569 -1.3225131847445961 +456 569 1.3899564716885209 +475 569 -.6241355347732983 +476 569 .6417197124339278 +479 569 1.760335589051503 +484 569 1.695499599908493 +524 569 -.5981170875652694 +537 569 1.518288999505526 +539 569 -.06469587943595417 +542 569 .13072179598025488 +544 569 1.0633412741973867 +572 569 .8325777741049136 +575 569 -2.4396854908239747 +577 569 -1.6447193582676285 +586 569 1.134499149678318 +589 569 .12318723581158264 +594 569 -1.3117021473608437 +599 569 -1.305676832321585 +604 569 -1.0784463732340497 +608 569 -.2505235249493069 +623 569 .4313903781827228 +631 569 -.9657506486659216 +634 569 -.6120078863037508 +635 569 2.0650453051112327 +644 569 2.1026908131426927 +655 569 1.8869660662477725 +660 569 -2.029015716283899 +664 569 .8821747945578522 +672 569 1.474563780009906 +673 569 .8064047190861119 +680 569 .4003680122974676 +682 569 1.8776726141210969 +688 569 1.793609570295588 +704 569 -1.1782620704967541 +706 569 -.3684995256792283 +715 569 -.5623922844057351 +717 569 .24456039914481834 +731 569 .03282779737073917 +735 569 -.33149435974890135 +738 569 -1.1089655687556703 +755 569 .6479046432504633 +762 569 -.8145371681513656 +771 569 -.04171427793851156 +775 569 1.2564305692071687 +777 569 -1.1028333902236314 +778 569 -1.4913922745101986 +787 569 2.074578736839904 +829 569 -.1694943213992613 +830 569 -.8062916371851816 +832 569 -.7656363190040646 +843 569 -.6555573734780847 +858 569 1.214863911589512 +862 569 .954848441576219 +867 569 -.012591465829080321 +871 569 -2.2803280675253945 +877 569 .3164999968138885 +879 569 -1.4738783275494032 +886 569 -.0914572818892063 +890 569 1.4962367356142936 +892 569 -1.3081328575278106 +899 569 -.9357813354336749 +909 569 1.1684577699947982 +914 569 1.0323143775009178 +924 569 1.2100841250557774 +933 569 1.4799344005157242 +943 569 1.5666252009984432 +946 569 .7958029133519335 +963 569 -.40318083214957295 +966 569 1.0902459874874402 +967 569 .43839557919037986 +971 569 .17438484906200555 +978 569 -.6588449097107305 +989 569 -.6349908470594321 +994 569 -.7765015302780106 +995 569 -.00032823555437416774 +8 570 -1.9010853866077055 +11 570 .41481580242646 +13 570 .06917609901188904 +15 570 -.5184949613583324 +26 570 .4801800154181118 +32 570 .7588468489603353 +63 570 -.19369470279962514 +72 570 .22735659887241363 +73 570 .5126705969124598 +82 570 1.390692986569732 +85 570 .2386226212132242 +86 570 -.4483641711302558 +91 570 -1.4407529133958783 +93 570 -2.3743331544768385 +109 570 .826108720019968 +110 570 .9446506082932733 +113 570 -.9001621195327146 +124 570 .2673991425914474 +129 570 -1.5006325001694496 +130 570 3.9748798954968327 +132 570 1.3633404734718901 +147 570 -.5205456739659994 +159 570 -2.2942119274985395 +170 570 .08460683127222582 +178 570 -.75470712685088 +187 570 1.3164168356762593 +194 570 .5079052186512621 +197 570 -.8731979786280322 +206 570 1.0085526353557972 +217 570 -.1708281291041333 +249 570 -1.2169634379584278 +261 570 .46517348086692645 +264 570 -1.4344917330962992 +271 570 1.5640249968133022 +273 570 -2.3538944572206884 +279 570 -1.4553937712796208 +283 570 -1.3519455154562918 +294 570 -.5583564968144439 +311 570 -.9696859768663191 +340 570 .8479453963988725 +342 570 .3939102430138642 +346 570 -.6156429058678978 +349 570 -.05964152088427187 +388 570 1.470195852257252 +399 570 -2.4018132431705497 +403 570 -.033917824092348704 +404 570 .15239094566745703 +424 570 .011789764978047866 +425 570 -.7738007258649598 +427 570 -1.025377546268199 +429 570 1.0146397683177715 +439 570 2.9728656000628604 +452 570 -.5594076743323974 +459 570 -.09859190241551843 +483 570 -.46645592416179454 +490 570 -1.9051914650074417 +491 570 .2171010444421017 +557 570 .9361546840787065 +568 570 -1.047739399693454 +575 570 -.6066780070936629 +593 570 .9050202850345284 +605 570 2.257973647692404 +620 570 -2.82058303431561 +644 570 -2.020401667696846 +650 570 .1270962578972865 +660 570 1.9924062104922018 +672 570 .43018876850000964 +681 570 -.7933518885842008 +696 570 .3830810136984811 +697 570 -1.789818654767717 +709 570 .13841655707656608 +710 570 -.5764202507327679 +732 570 -1.7242690443201016 +759 570 .23644105594263432 +760 570 -.6335463553412818 +780 570 .36724910686001444 +789 570 -.017290310998236372 +798 570 -2.608219460216959 +802 570 -.07061629854941773 +804 570 -.4953384637010381 +826 570 -.8860124653746855 +832 570 1.1786635309037372 +841 570 -1.7089640489900766 +845 570 -1.2626159027499417 +847 570 .8405623611162438 +848 570 .44362719819104995 +882 570 1.4573798925378008 +887 570 -1.4351550548584304 +891 570 -1.2707327925209513 +902 570 1.0260432132397355 +903 570 2.0907334504681367 +923 570 -.6018469868839604 +927 570 .9278814937096963 +928 570 -.005673088368394114 +940 570 -.32008379475759713 +984 570 -.35385845913722885 +6 571 .15633492357518763 +7 571 .2165987184302797 +29 571 .4677871645894227 +36 571 1.0238258878290207 +39 571 -1.017345962865567 +43 571 .3156972383022749 +85 571 -2.6511220736024166 +86 571 -2.6925420185333775 +93 571 2.2752842696746622 +99 571 -1.7708228004955653 +101 571 2.6348842845441034 +104 571 .2614211430689007 +113 571 .07648236366428346 +117 571 .569883454208385 +126 571 1.174689290165394 +136 571 2.71844367088132 +139 571 -.07965939016732601 +146 571 -.07155342455926798 +148 571 2.1320939583368586 +153 571 2.168763115095424 +161 571 .1523491647622925 +171 571 -2.9123627791958597 +175 571 .7739253169121012 +179 571 -.5117518617080111 +184 571 -2.770049789434327 +194 571 -2.972396892155213 +196 571 .59081116437566 +198 571 -3.506261305278099 +201 571 -.8822331929170785 +239 571 .8747544175153183 +249 571 1.0639046851466072 +255 571 .27663384232283156 +267 571 -.1595195826046809 +292 571 .2580653874783909 +337 571 .5804178049262916 +343 571 .8257168259202882 +344 571 -.19460652098823164 +368 571 -1.8657667699699618 +396 571 1.0180649871680967 +406 571 -1.996955359594216 +411 571 -.6591358215225641 +417 571 -1.7640673121328843 +429 571 -.7381706100863576 +435 571 .12417696527810165 +456 571 .8289337706368292 +458 571 -.7259420299167914 +473 571 .8919284286620562 +496 571 -.2512725994174233 +497 571 .7396798985611814 +520 571 -2.042473506922623 +525 571 -.7149327461929659 +543 571 1.772398669886204 +545 571 .7357189688027417 +557 571 2.633022564991339 +571 571 .20470149490648687 +575 571 -2.6717014852940095 +577 571 -1.129884447386471 +582 571 -1.8231985951833405 +612 571 -.4874684709553882 +617 571 -1.8015707560716194 +620 571 .30533500414661546 +622 571 -3.0072730305743756 +632 571 -1.1262085854190236 +658 571 -.7977388828895043 +663 571 .519091511948016 +675 571 -1.7856286190728266 +681 571 -.6047778487501505 +694 571 -1.4773316902629716 +698 571 -1.516740701659206 +700 571 -.9550028895068686 +704 571 -.9556808873585936 +705 571 -1.1268902871796276 +708 571 -1.0319828184695772 +717 571 .5988647190166081 +722 571 -2.081747679912721 +738 571 .3030095769149811 +742 571 -.8675600435480657 +748 571 -2.9018922563687957 +755 571 1.3016615343208968 +771 571 .5307129617752185 +776 571 -1.9628102653380344 +795 571 -1.041112360396101 +797 571 1.7570535126648066 +812 571 2.517751406302229 +826 571 1.5998439406347724 +831 571 -.009567478658693243 +837 571 -1.0533863202867115 +844 571 3.4333779960281063 +864 571 1.184467542298916 +877 571 -3.0558567698421397 +893 571 -.7070874678516139 +897 571 -2.7436436314986747 +902 571 1.0589257258953688 +913 571 -1.1294450594539562 +922 571 -.09892281423822008 +935 571 -2.7194942659697547 +937 571 -.06306838024675027 +948 571 -1.8971421531125072 +959 571 -3.544994028634323 +961 571 1.1223471724610241 +962 571 .8141878764877708 +969 571 -.7715572116731252 +976 571 3.0912340562615346 +984 571 .9106282041551212 +986 571 2.0670556575227064 +987 571 1.982736838851903 +1000 571 1.2056578662716835 +6 572 .5416553251493623 +10 572 -.06943546066017751 +16 572 -.6126812619075068 +34 572 -.26343575504543565 +48 572 .002887241975846694 +49 572 .09497056560208644 +51 572 .0642382429177974 +62 572 .14428893248745683 +94 572 -.848784043439732 +95 572 .17846627601350212 +102 572 -.4902290604227813 +124 572 -.540532531988913 +126 572 .6622887455737712 +130 572 -.5625873198598774 +156 572 -.057000982235943506 +175 572 .33075165028672354 +185 572 .37033210818115053 +186 572 .08103622619578452 +188 572 .8164465855351862 +195 572 .3683382740020051 +196 572 .8145341438964331 +202 572 1.269539923297294 +207 572 -.15149043511139468 +216 572 -.14134271136397672 +217 572 -.8998810371242496 +219 572 -.891114051965684 +231 572 -.2111659510179374 +234 572 -.9379104938069179 +244 572 -.13190958725963964 +256 572 -.18428943424818311 +262 572 .7725394919243165 +270 572 1.3544754411382136 +272 572 .5062927487576754 +275 572 -.2952522183599546 +278 572 -.2218103386208832 +304 572 -.122098618911925 +310 572 .11832703923561422 +323 572 .731629617509329 +328 572 -1.204159832596827 +336 572 .2699529426692628 +337 572 .13798396102937174 +341 572 .4006874042691889 +366 572 -.4656687062908988 +371 572 -.5610327518318866 +389 572 .15800745080453232 +394 572 -.8535727730287503 +395 572 -1.1228039014080116 +401 572 .20484401053244944 +414 572 .08162916904553433 +436 572 .4320760157515897 +441 572 -.6675571187491653 +454 572 .6431780927310149 +455 572 -.6870947351298589 +494 572 -.1541719394349442 +504 572 .4011993996871321 +548 572 -.8529807241623071 +554 572 .09222428763963389 +563 572 -.46908005685591464 +565 572 .8560245577503383 +570 572 -.7018719217852517 +609 572 .35460182152922576 +614 572 .27477098349188656 +617 572 .13488718075706607 +618 572 1.1341423698611826 +623 572 .2572403330975013 +632 572 .05260501899970382 +636 572 -.5013468511524364 +641 572 -1.41390970252774 +660 572 -.12193729343779745 +662 572 -.1260550177684575 +669 572 -.48916818284144303 +679 572 -.3992399557880891 +686 572 .15799627326840646 +689 572 .003971096082225178 +709 572 -.04701845477468937 +720 572 -.16533320932057893 +730 572 .30229579761412984 +773 572 -1.3470598520921055 +777 572 .1167589494596579 +782 572 .13975611939386787 +795 572 .9465231324875572 +796 572 .023502515588674777 +815 572 .46604127867140865 +832 572 -.09993437345796759 +833 572 -.041004843372812974 +837 572 1.3603890121041486 +845 572 -.4836946828538068 +861 572 .2391259991966276 +872 572 -.1906269893780468 +873 572 .43272755553153985 +877 572 .8594391474264366 +880 572 -.38141724644442154 +885 572 .3015474377446876 +894 572 .432372375382034 +902 572 -.1706777052174684 +915 572 .06604655753235164 +918 572 -.1166880629225337 +931 572 .10002579484243276 +932 572 -.10446476081584914 +942 572 .37322972838895807 +945 572 -.28423633569951995 +953 572 .010240854833362662 +966 572 .19660627812906636 +967 572 -.8538027155436034 +972 572 .017852022021710417 +975 572 .4774438194195467 +976 572 -.5172598244125224 +980 572 1.1367400506819867 +4 573 .7802160211593483 +35 573 -.39171757072227525 +42 573 -.47294468995188577 +63 573 -.3389909492072571 +64 573 1.3938228886125898 +102 573 .4069552239575133 +111 573 -.3506215235590955 +122 573 -1.0734064803740926 +131 573 .46221802435878784 +137 573 .7986494669819836 +140 573 .11301093021361963 +149 573 -.6837883273229793 +154 573 -.7968138146930205 +158 573 -.7764455526269475 +159 573 -.7186867947120762 +163 573 1.3742169152133328 +171 573 -2.2474001254350804 +176 573 .3102854805102961 +178 573 -.6646696901857923 +193 573 .09983423118262116 +201 573 -1.067275593621446 +202 573 -.9891279388067882 +206 573 1.1055914783323209 +231 573 -1.0066631320941921 +243 573 .7676896673390059 +250 573 -.8634861211007603 +252 573 -1.297257547956452 +260 573 -.4528949017783582 +262 573 -.34566607892324475 +263 573 -1.5844712901061588 +276 573 .95005956654676 +288 573 .6666897360992288 +297 573 -.48819514966609606 +301 573 .5633742274357163 +306 573 -.6981839182926619 +308 573 -.38225152542279905 +320 573 .2767482005055056 +326 573 .5053093866758664 +337 573 1.2595307235773963 +344 573 .612590939737047 +345 573 1.0800213610491072 +349 573 -.124463281362614 +357 573 .30017827954252074 +371 573 .25411988236613603 +384 573 1.1425294472710623 +393 573 -.5575310326497833 +400 573 .6272050626941215 +401 573 -.8673943533487591 +403 573 .2425783647844899 +441 573 1.5702671965968722 +447 573 -.3644765887923419 +448 573 -1.0826215653641122 +475 573 .5842667463318744 +508 573 -.40221474828973014 +517 573 .4491732160860647 +536 573 .12395288201107102 +540 573 .21185543694011402 +553 573 .34746869560966565 +571 573 .12092436356363041 +576 573 -.6150231819027276 +578 573 -.6287797208140026 +589 573 .9119265097795115 +607 573 .6331692343681279 +620 573 .8251455212666454 +630 573 -.8788576946510818 +631 573 -2.5071856875002054 +637 573 .22571515651825083 +643 573 -.907355895204832 +645 573 -.1568299126678541 +649 573 1.3488733771575445 +650 573 .05416599790298286 +661 573 -.4134305714667149 +681 573 -.048344603124598734 +705 573 -.03524445623364225 +712 573 -1.753625373809442 +719 573 -1.121818764343809 +736 573 1.0323168124493096 +739 573 -.9763863885975299 +741 573 .026838835314056425 +743 573 .21164035258475666 +753 573 .4355182430382263 +757 573 -.23039265461839503 +759 573 -.558511487630576 +761 573 .3035365277379174 +763 573 -.13558524140558353 +764 573 -.236942920630342 +781 573 -.4081091935768334 +783 573 -.8668747453285384 +784 573 -.21906788531337862 +786 573 -.0690075217998059 +799 573 -2.138523929905375 +810 573 -.4691457508920806 +811 573 1.1606446608845442 +816 573 .005138947467100349 +817 573 .4320398084661624 +836 573 .011343871921379908 +845 573 .8054272048482232 +861 573 1.5793365070384406 +879 573 .06793729734094216 +892 573 -.48781651026288786 +897 573 -1.8445976732545681 +900 573 .19623743277750022 +913 573 -.5010016052286551 +922 573 -.30874482465064734 +933 573 1.163140561059123 +957 573 -.35973706438596653 +963 573 1.595317998378946 +967 573 .35911922980530053 +998 573 -1.9170378084242408 +10 574 .5854876017901776 +14 574 .8483653752521066 +41 574 -.7485683987264521 +56 574 .7669820034307805 +70 574 .4177472958871903 +76 574 -.38043589151473245 +79 574 -.8786580945948547 +81 574 -.8217943330009697 +86 574 .06034112228814611 +91 574 -.18484288505515206 +94 574 .2299828238317907 +98 574 -.00036465059561984565 +102 574 -.040497103901583495 +110 574 .25745613290443137 +124 574 .1031823606296442 +127 574 -.27006051156220173 +129 574 -1.2312185294715488 +131 574 -.42380423591798644 +138 574 -.14778256902818637 +139 574 .2260398318552348 +147 574 -1.759408463825437 +155 574 -.3174646933784837 +185 574 -.5969346098592799 +209 574 .24254793008070988 +226 574 -.32526987619276476 +228 574 -.9747847269878818 +243 574 -.36844065434779677 +255 574 .23040695358265156 +282 574 .71627949691573 +286 574 -.7654564237894306 +303 574 -.3412343934215733 +316 574 .030884996921209322 +319 574 .6299367916082436 +331 574 -.5114389523374123 +345 574 .19533223442791078 +348 574 .8587205177038636 +380 574 .54539140487089 +395 574 1.0758302848164785 +404 574 -.9933187616954917 +418 574 1.1362517457299963 +422 574 -.3324274328971332 +425 574 .030034317666695065 +435 574 -1.238132796854571 +445 574 .2700598312905981 +462 574 -.6942513004493522 +464 574 -1.4665914902441854 +470 574 -.7804264957873233 +473 574 1.2020924914466802 +477 574 -.9515964907866712 +478 574 -1.2300275622126462 +481 574 -.7232605033365119 +495 574 -.7094745124794055 +512 574 -.9508595622736774 +570 574 -1.174858681023762 +574 574 -.2339349549409353 +601 574 -1.1591425524977794 +613 574 1.1567612530098446 +615 574 -1.33573544627422 +616 574 .014022215948776812 +631 574 .8065453782968021 +649 574 -.6680343759308126 +652 574 .31148811003110527 +657 574 1.1197261632548383 +663 574 -.031267989213741965 +674 574 -.6900456261442578 +697 574 -.8621208884881112 +734 574 -.13451311618815054 +735 574 -.1850757307335958 +736 574 -.018838222898088782 +742 574 .8687001635602185 +752 574 -.5634711328080707 +762 574 .943713311466697 +768 574 -.0329235952912137 +770 574 .23929648150137053 +793 574 .9071404547585167 +822 574 -1.7459156610640025 +844 574 -.13760199870982245 +845 574 .940394513254623 +847 574 1.57243634057595 +862 574 -.5147933262368609 +887 574 .15217219716089564 +890 574 .2579642413870679 +896 574 1.179546311449757 +923 574 -1.182874683132104 +933 574 .10603018360741723 +948 574 -1.0811735776785898 +958 574 .5187532937574866 +960 574 -.8043426951995352 +962 574 .36795514995616074 +965 574 .8160260095852155 +992 574 .09945498223896443 +3 575 .3546180811388216 +8 575 -1.5797904810918475 +10 575 -.7522030373074117 +20 575 .2315293259779122 +27 575 -1.0923292236157027 +32 575 .7065187174682361 +34 575 .5773676674590291 +35 575 -1.2233672111933953 +37 575 -.23327667108281275 +44 575 -1.2243440071230554 +52 575 -1.1984443237337157 +63 575 1.4810006715798147 +65 575 .2386254266948185 +67 575 -.3882422033435479 +69 575 .7718006989074339 +76 575 -.7481411363964086 +82 575 -.9261707090105096 +93 575 -.3652513993035597 +95 575 -2.4020911995308847 +97 575 2.506059361880285 +106 575 .9638088995218037 +157 575 -1.5744494742616673 +162 575 1.9331304187338523 +184 575 .5919280559035092 +195 575 -.9175410692965181 +197 575 1.034004041055951 +204 575 -2.2517432362642773 +212 575 -2.4525509338063705 +223 575 .01867223098279737 +228 575 .2062832859639422 +237 575 -.3964986113045667 +238 575 .24875214726133937 +244 575 .04953177045891653 +247 575 -1.7686544555401214 +248 575 -1.1898769553447814 +258 575 1.228927478597433 +270 575 .021996639061568526 +283 575 -1.0946566066747838 +308 575 .05402102749573759 +315 575 -.12226561855560586 +319 575 .2869441206699767 +327 575 -.003985276850846497 +330 575 -2.2784191226807913 +341 575 -.5194142398177457 +364 575 -.5856006779204864 +371 575 -3.068065801737105 +384 575 -.43507382553936635 +388 575 .9286115631811743 +392 575 .5648518631518833 +397 575 -.6485697848139458 +403 575 -.3608029130710422 +404 575 1.594356635400898 +405 575 .3342170156583184 +408 575 1.1389687965614788 +426 575 -.6511669563701992 +428 575 .8442320585626264 +436 575 -.7251842331840646 +440 575 -2.621477426643519 +442 575 .1585968174779232 +460 575 1.1763508093730284 +464 575 -2.869584377776652 +465 575 1.288326727472659 +467 575 -.9966988830738671 +472 575 -1.6234107454898459 +484 575 -1.1144793598678628 +485 575 .3502829851919217 +497 575 -2.4271962575083803 +511 575 1.9137640790411727 +516 575 .00123063829488693 +526 575 .1393396696750899 +554 575 .6757660735244975 +561 575 -.5183203117287412 +563 575 -.08448086059793072 +573 575 .3951299099712975 +579 575 .6181878111007412 +602 575 1.2635885305839758 +610 575 -2.021481527978186 +612 575 -2.6331652800839005 +613 575 .7843274264928901 +619 575 -.7962506473614821 +626 575 .7164358182990893 +630 575 3.3956883262955557 +651 575 .231751716845656 +656 575 2.4398079112444586 +658 575 .3111770870794999 +692 575 2.3234497627842563 +699 575 1.2559252346246268 +702 575 .8420241402875739 +704 575 2.7267589220687176 +722 575 .5105316496303806 +732 575 .7316147117070815 +746 575 -.33494661268521486 +748 575 1.4941638077564072 +751 575 .26456858823965723 +764 575 -.0878965918328075 +772 575 1.5594731805372752 +811 575 -1.9888205647590782 +863 575 -2.5919381865672313 +867 575 -1.31473695601477 +868 575 -.27231128324538945 +877 575 2.6733789033527304 +881 575 -1.8358379546234043 +890 575 -2.8599458559958593 +908 575 -2.529070168238753 +917 575 .904361852420173 +932 575 .7616873666801083 +934 575 -1.6235406385523743 +943 575 .15851953916237388 +946 575 -.114124014707458 +947 575 1.3828631765447934 +950 575 -1.8610648336965645 +962 575 -1.7405241775880975 +969 575 -.5888406678968447 +976 575 .14833849630898685 +2 576 .9296070431254072 +16 576 .5783853817743557 +25 576 1.0308801549462452 +58 576 1.294758203584724 +87 576 .2311140797340937 +89 576 .1874915838499 +98 576 .2550674745245649 +108 576 .7403456362100302 +110 576 .9163360642339635 +114 576 -1.1605144116289579 +120 576 1.7350871773868741 +124 576 .39312879470573636 +139 576 -1.243811436032179 +168 576 .26278446718271176 +170 576 -.46646337659356807 +181 576 -.0008022279708021288 +198 576 -1.2689539568422903 +207 576 1.218901880336947 +227 576 1.807731979382464 +230 576 .8442133146112347 +232 576 1.3002763263367607 +237 576 .0096096626136922 +238 576 -.6661576410709414 +256 576 -.515164383100518 +269 576 1.2850530148272614 +271 576 .6901691930877024 +290 576 -.6465310785871211 +295 576 .12019722648114817 +304 576 -.3704636966477247 +309 576 -.4017924714127787 +326 576 -1.2402721705867001 +331 576 .6750613320805141 +356 576 -.21609078695114417 +385 576 -.12837486699156814 +387 576 -.7409890731775857 +392 576 .389597423050809 +423 576 -.006954508918121462 +426 576 1.3231697483768377 +451 576 -.2538594794601492 +458 576 -1.1159419851961947 +464 576 .6001664828013602 +466 576 .22959228335567788 +468 576 -.24944283889811142 +483 576 .4247659372294595 +490 576 .3914717602537962 +493 576 -.2075547792482819 +494 576 .574666093372207 +503 576 -.758710833201234 +505 576 -1.0637902923492326 +577 576 1.7749848246422577 +587 576 -.5958847870311906 +594 576 .9997295321439585 +596 576 .9330373547443568 +604 576 .9046693651606182 +610 576 -.00865693060864844 +622 576 .2040578100751551 +625 576 -.2079604133808391 +627 576 .37412074117604777 +628 576 .9875684908823531 +632 576 .6823240381477689 +633 576 1.2996879278111744 +635 576 -.10991869566644721 +646 576 .7242943164780491 +648 576 -.08906329858552181 +655 576 .5967172094263857 +660 576 .06432495638315705 +679 576 -.36576556548551586 +684 576 .49960067557779875 +686 576 -.10977603973265516 +697 576 -.662908297038618 +699 576 -.8340775107390634 +701 576 -.6105035487510769 +713 576 .15966089813927914 +727 576 -.558475455734545 +736 576 -1.019443830821292 +740 576 .007004489277759346 +749 576 .6571457628183366 +773 576 -.6282934171046995 +775 576 .07020985135037561 +791 576 -.28444636187781547 +796 576 -.14777777355474192 +797 576 -.10410240622220729 +816 576 -.4648583230961771 +820 576 1.4282088407447364 +827 576 2.0297566063639634 +840 576 -1.380063903903342 +858 576 .2876376927773998 +864 576 -.29936875883603975 +866 576 -.11459237021678711 +881 576 .8921737937365349 +885 576 -.11234284502143023 +892 576 .484676619593703 +900 576 .13848858775157874 +906 576 -.17426259404621275 +908 576 1.0524955980201862 +921 576 -1.1174747944011965 +931 576 -1.265424529713737 +936 576 -.4439115721257503 +955 576 -.4138653283200727 +958 576 1.2769796686829267 +980 576 -.21014363948606468 +989 576 -1.2972045620906747 +992 576 -.5646177293437 +8 577 .8368559426750866 +35 577 .3197480129156232 +38 577 .4476505758601035 +42 577 .1975718169268135 +43 577 -1.1155566570780817 +69 577 -.4158789894766598 +79 577 .19994762426257923 +82 577 -.3681466044921346 +87 577 .8355601141726867 +90 577 -.07769630065260508 +97 577 .22908968650716044 +98 577 -.3549750047392377 +105 577 -.4684406293592994 +110 577 1.5771799012328966 +118 577 .5492393968276958 +130 577 -1.0690438061107488 +141 577 .2652983705408734 +144 577 -.28329654660244025 +187 577 -1.15890721207746 +193 577 -.5276224434091572 +210 577 .9279632804360487 +214 577 -.5192979873027955 +224 577 1.3190845473525568 +231 577 -.11266551385449547 +246 577 -1.2946977228655219 +247 577 .2640345812991672 +262 577 -1.7812717936049667 +268 577 -.32010154572491417 +296 577 .1368536893761476 +311 577 -.7572925856724142 +338 577 .9868306525551805 +350 577 .6292250847973284 +357 577 -.19832517898458873 +381 577 -.2080362545022904 +394 577 1.0064167861112425 +426 577 .31217533531360014 +439 577 -1.5625393554327445 +444 577 .6308588030836216 +464 577 1.2590957786641173 +466 577 .1860217581550746 +470 577 -.22025913419124404 +482 577 .7501089530693147 +490 577 1.3969615485128926 +504 577 .0037869352178767635 +509 577 .47071656115304 +532 577 .6877361554243684 +538 577 .6842640580420905 +551 577 1.3847255827812304 +593 577 -.7261420526569792 +650 577 1.0640852466337978 +656 577 -1.7150186702930366 +658 577 -.18608187432759976 +659 577 -.3103661171955948 +662 577 .3717803345365208 +683 577 .19847204281317365 +691 577 -1.1811326586110928 +698 577 .06911950595440837 +700 577 .24984329770331554 +714 577 -.4541015430738763 +727 577 .08868762755424667 +744 577 .07651754200405084 +748 577 -1.4902142959882194 +749 577 -.9630710894168931 +757 577 .5520007487828169 +765 577 .8658852036665983 +766 577 1.5337590413021247 +768 577 -1.255274934961687 +770 577 .027106425658011732 +773 577 .052731837660752484 +785 577 -.537227455579554 +791 577 -.9955262906819923 +804 577 .26247025458557866 +807 577 .11206733013366482 +809 577 -.33182457236443674 +814 577 .023171027936443905 +823 577 .6744023281572177 +844 577 1.5060800603199953 +858 577 .8756036994667137 +864 577 -.48126937338398906 +865 577 .7751292543464028 +877 577 -.08893001349320279 +883 577 .1508966595279339 +886 577 -.26985098944597363 +887 577 1.4289175592594945 +893 577 -.8675463359067573 +894 577 .35562592439729857 +915 577 -.17640017791394438 +923 577 .8435747710410691 +941 577 -.7204978927319052 +945 577 1.2766447635033724 +952 577 .368943961044287 +954 577 -.6651876993077703 +979 577 -.553346687105785 +991 577 -.438756230357772 +8 578 -1.5972455511432473 +15 578 -.16502551383210476 +30 578 -.02089749609568496 +46 578 -.09204387471446583 +50 578 .07445272494481092 +64 578 -1.158739976790585 +74 578 .16004956278380933 +81 578 .7426962319190547 +87 578 2.4871708043148026 +101 578 -.20085942789512462 +110 578 3.0659390543362646 +121 578 -.17054756427125484 +132 578 -.8771964263150841 +136 578 .5511147339720588 +162 578 1.345099447608414 +169 578 -.8379784778842575 +188 578 -1.2634819019640855 +191 578 .6063269729777695 +197 578 .7051034288279617 +200 578 1.0013011435201642 +201 578 1.6654261892698996 +209 578 .7256655721254417 +214 578 .26972594707026104 +216 578 .29872726998797017 +224 578 -.03310484826112333 +234 578 1.597388041023939 +236 578 -.09256089104186145 +266 578 .21537553835838136 +267 578 -1.447880740321058 +290 578 .1513515042769238 +292 578 .5927153723469056 +293 578 1.0810827838891799 +296 578 .9008449037355495 +306 578 -.8740988282320501 +317 578 -.0868225006805598 +320 578 -.9962610671085437 +323 578 -1.9680661697036521 +352 578 2.3075628419063716 +375 578 .4836484702141022 +376 578 .315085898031918 +391 578 -.6162233706131011 +396 578 1.039151272505043 +397 578 -.37269423970272586 +398 578 .4606672239277912 +423 578 .8956708865878058 +432 578 1.5507556979107162 +441 578 2.1914560702357337 +463 578 -.002289279888683965 +471 578 -.42088794265593876 +476 578 -.4342036021844109 +478 578 .6958583026432976 +486 578 -.8270556128122898 +502 578 .29276811685001247 +504 578 -.8292906045516686 +505 578 1.4528808788204006 +522 578 -.31127769915256315 +546 578 -.1152057641499879 +548 578 1.303982151876418 +558 578 -.47621673901608674 +580 578 1.755123455172833 +581 578 .5798825767299007 +583 578 1.1181033723972897 +620 578 -.8852739442752751 +621 578 1.665181626019314 +627 578 .16377970442328207 +629 578 -.10815871059628808 +634 578 2.3902928361974434 +648 578 -.8741637390991506 +666 578 -.834264300262515 +671 578 -1.4609904903473185 +672 578 -.6285967019849595 +676 578 -1.126033667505869 +691 578 .10492496999897338 +694 578 -.900926449675799 +695 578 -.4581218124501383 +701 578 .3894307525010339 +707 578 .8442575372942711 +715 578 -.2113800119150718 +731 578 -.07278724291232494 +733 578 -1.5756637165664171 +739 578 .17749633287418715 +745 578 -.9659513594392095 +757 578 -.598427239245122 +760 578 1.2594407321870897 +773 578 1.826155041917448 +774 578 1.0517595232104906 +781 578 .17469520839724767 +782 578 .25392171419106063 +785 578 .21285549340052307 +803 578 -.13256864515643502 +821 578 .12375378958505805 +827 578 .15769611440933573 +833 578 .46845128954587445 +842 578 .6064055378128544 +868 578 .47569001597506816 +894 578 -1.5145164806207605 +905 578 1.2153453529177394 +907 578 -.4212668188671673 +912 578 -.7290242365770288 +922 578 1.0896632711485958 +935 578 -1.4237227012770874 +962 578 -1.8918339561526227 +970 578 .07923503143188196 +979 578 -.7272412272140062 +988 578 -1.0264942568752589 +996 578 1.0349172486866762 +2 579 .30475515148817534 +21 579 .863248925115076 +23 579 -.6675482874853373 +45 579 1.2915220618546868 +54 579 1.1813882491907295 +65 579 -.5762161156450835 +72 579 -.9955745734878573 +74 579 -2.227343797650376 +92 579 .4470048659239749 +112 579 .7815504525119994 +131 579 -.26756515252042 +152 579 -.19205740000401156 +163 579 -.36216912334368545 +175 579 -1.015833499907604 +177 579 -.027709548662887773 +202 579 -.7224817739748454 +214 579 .27462177936130994 +217 579 -.11703844300152765 +226 579 -.99565045730507 +243 579 .0470452126828791 +273 579 1.3926409148486998 +279 579 .024202424332803715 +288 579 -.017204044518454684 +294 579 -.6531520007629159 +299 579 -.3481176405087302 +309 579 .07459356096888693 +315 579 .7594415760132119 +325 579 -1.5247005075147015 +336 579 -1.2697190645811804 +337 579 -.16084246572043326 +375 579 .6440235428502423 +382 579 .09109462827133008 +383 579 -1.0418100642535293 +409 579 1.7044194619666202 +431 579 .6252670653885439 +436 579 .17948200675886145 +439 579 -.9092111395182008 +468 579 .06293702101320792 +474 579 -.8933150225228496 +475 579 .48870258924148147 +479 579 .07017174832302885 +516 579 -.6034694723397821 +535 579 -2.1001730708689905 +539 579 .15787185872257428 +540 579 .04644395985485265 +555 579 .8519245051559741 +562 579 -.23495550886464037 +566 579 .0707609330000531 +586 579 -1.8443981453100124 +594 579 .17862582565914042 +595 579 -.22816132126884503 +605 579 -.7854497244251177 +620 579 -.8292529651862379 +642 579 -.6141127078886938 +649 579 .1566074953912706 +652 579 .30226523248739656 +669 579 .3205654047690063 +683 579 .07896479964838773 +692 579 -.5967058204919548 +701 579 .32335277628536363 +717 579 -.05822056954370608 +719 579 -.837523841051787 +726 579 1.4046025759110483 +734 579 -1.0430194386612426 +735 579 -.8990180279214037 +736 579 .764674284058267 +739 579 .12161767051469238 +744 579 -.26636867064713105 +775 579 -.8723090114556555 +777 579 -.018083945191017553 +788 579 .0411691215899366 +810 579 -.23069892913919748 +842 579 .9346295149584223 +844 579 1.7331426762120827 +870 579 -.8201411479039696 +873 579 .09401395880772884 +886 579 -.054691150185042434 +893 579 -.46152462771913155 +907 579 -.08955621850548959 +919 579 1.370960761700362 +922 579 .5930787321499935 +923 579 .6726642997883804 +927 579 -2.0631718401482475 +929 579 .12827311194608998 +936 579 -1.0799990303373035 +960 579 -.017130404803139626 +973 579 .08310031203690724 +981 579 -.6549397203838077 +2 580 -.715624594894634 +24 580 .8524110703399701 +40 580 .24351081752855674 +43 580 -.4910722281635482 +44 580 -.6235455993365178 +51 580 .6917440016107006 +56 580 -.8383814829250141 +57 580 -.6642387957460284 +62 580 -.5404553171470233 +65 580 .5567539124920896 +70 580 -.08273573729743178 +81 580 1.1871185922701604 +85 580 -1.8901465797890138 +111 580 -.9958280914125371 +114 580 -.20586763450797113 +125 580 1.468196817960863 +147 580 -1.388232269412609 +154 580 -.03228259183656747 +181 580 .014494427477675875 +191 580 1.0779318580837784 +192 580 -.39588700112636876 +195 580 .3922961392939802 +200 580 -.2692081399916142 +203 580 .1155878344726353 +213 580 -.17602173544990468 +214 580 1.3373472023852109 +218 580 -.28038772288703123 +221 580 .9887955439283993 +222 580 -1.2258070951844826 +233 580 -.6519691857036414 +234 580 .8233268527755139 +239 580 -1.4450490254716435 +243 580 .2678977171574304 +263 580 -1.0833614606920179 +277 580 .09000968572730772 +298 580 .5237058160008834 +315 580 -.3623597595870818 +333 580 -.32692635494801675 +338 580 -.7728840253099843 +346 580 .18682087191072533 +356 580 .09787258657024962 +367 580 -.8318540515603814 +382 580 -.5817150495922317 +388 580 -.7848094044996596 +407 580 .041210821864285575 +427 580 -.6406869198233599 +436 580 .8523241879477357 +444 580 -1.8880106724012584 +454 580 -.9883383338548587 +475 580 -.2885766899231605 +478 580 .07924019804790831 +498 580 -.7526717308903073 +524 580 -.23917558328954278 +542 580 .3682652405357786 +580 580 .25024638452434855 +582 580 -.6393580174292797 +589 580 -.3013265166714867 +614 580 .7783231223993831 +618 580 -1.1085452299043597 +622 580 -.05468477764665605 +627 580 .44700401555763614 +634 580 .13652634341218067 +640 580 -.7797902188777679 +641 580 .03747746811512423 +645 580 .06378972334606778 +649 580 -.29966650349371654 +655 580 .6655881011444158 +660 580 -1.4398628612486828 +675 580 1.1195873763848292 +684 580 .9761409060720517 +685 580 1.4328004564668393 +699 580 .186948679300332 +712 580 -1.1621478288181146 +739 580 -.8228761017883697 +740 580 -.849096457095576 +757 580 -.055386495549046455 +771 580 -1.1071153919998205 +786 580 -1.126320301491656 +842 580 .24073728015026497 +844 580 -.2775424551722016 +852 580 -1.1045933558101069 +854 580 -1.0536703072922111 +855 580 .10814511722794182 +857 580 .06584382360372189 +860 580 -.19884954472990152 +875 580 -.2198107647437795 +878 580 .4096383963425967 +888 580 -1.3150183559628505 +889 580 -1.0149112715778579 +893 580 .1533189846852523 +908 580 1.5935519689330435 +912 580 -.050910784771206544 +920 580 -.14196903307127237 +925 580 -.17181490408410963 +927 580 -.11870896343751472 +935 580 .7169332351397848 +937 580 -1.4081289795094714 +943 580 1.157541040605382 +944 580 -1.506826956990101 +949 580 1.67217308268942 +960 580 -1.0479979107260116 +982 580 .7870353424523888 +990 580 .9500157222640195 +997 580 -.8705930870242752 +5 581 -.7152015314115995 +10 581 1.0436406096020068 +16 581 .6362034935372585 +19 581 -.1042033075068702 +20 581 .4088558475212288 +36 581 .7150362819760026 +50 581 .9042570961636477 +51 581 -.9017471192490113 +74 581 -1.9268613893105837 +84 581 -.6457105035235938 +86 581 .08781379153083792 +93 581 .3369279899868983 +108 581 .7170975469868244 +111 581 1.4107626344303337 +113 581 .09325843162976678 +125 581 -1.199566967900114 +129 581 .9992308193441937 +132 581 .3051104680558213 +137 581 -.753478300276392 +138 581 1.6486068610990987 +147 581 2.146706230225847 +200 581 .45876824555892154 +204 581 -1.0774827549075052 +207 581 -.2515785134605877 +209 581 .1584757842979081 +216 581 -.34505819756245143 +231 581 .1029740850451302 +248 581 1.0971030379580555 +280 581 -1.7369377319400037 +303 581 -.45915728615758256 +305 581 -.11412186764074807 +312 581 -1.3055738073332737 +325 581 -2.5198123091725084 +336 581 -.6089865039062615 +338 581 1.3632314331584876 +344 581 -.51141718230784 +366 581 .7147041102188649 +395 581 .7377375094401841 +404 581 1.4102868084705689 +411 581 1.4080318236768656 +432 581 -1.3508002795031782 +433 581 -.3119640659581498 +449 581 .5784297200977282 +466 581 -1.3982067242556038 +468 581 .10228001289907929 +484 581 -.008821516224514131 +496 581 -1.2593895200659797 +500 581 -1.4258433712104543 +523 581 .40533090352974366 +524 581 -.8803634853884352 +542 581 -.07894698927283224 +587 581 .974041783087948 +592 581 .7076579057302983 +604 581 -1.6124965162506337 +608 581 -2.200014432257028 +609 581 -.1833070268680408 +620 581 1.3454733271121004 +627 581 -.47810053642319966 +629 581 -1.6298612592190653 +637 581 .8079847613042556 +688 581 1.503995098123187 +706 581 -1.1070273140128313 +709 581 .12215592532039603 +711 581 -1.1567616757612154 +734 581 1.2348178202942597 +743 581 .20143754691081595 +749 581 -1.6858343906911375 +752 581 -.4460300926563711 +759 581 .8339916341563869 +761 581 1.3233721266954024 +762 581 -.0038145197972508232 +763 581 -.6860296772117886 +769 581 -1.1557123074169837 +777 581 -.6878179273632083 +817 581 1.1346581120852661 +819 581 1.3720653097553637 +838 581 2.0671536759516713 +843 581 -.18090966108614823 +844 581 1.543477863246126 +845 581 -.020943727911466842 +856 581 .9109117466419001 +862 581 -.1229978987635613 +888 581 1.1317236268945539 +900 581 1.167376468558671 +905 581 -1.5565905645582492 +935 581 .2352559317610518 +985 581 1.033552007295592 +989 581 .21617902565815378 +999 581 1.760689472498448 +13 582 .08723366175934294 +19 582 .44356164575254386 +23 582 .04215616712234817 +24 582 .7276769375563303 +31 582 .21095839144210188 +35 582 .08740270676177825 +37 582 .285007469609541 +44 582 -.38717962926883026 +86 582 .9570167959206897 +89 582 1.2280766224408635 +95 582 -.5605040363504328 +102 582 -.4066079934510998 +111 582 .3988119102774888 +114 582 .9824300198698419 +115 582 -1.2090186664983684 +116 582 .2848694758680283 +126 582 .18432495453713404 +137 582 .18453478904755022 +138 582 -.4579573499607799 +142 582 -.7088762519284998 +147 582 .7037318892577629 +156 582 .15658243850155718 +158 582 .05975280288928486 +168 582 -.4751087499209004 +179 582 .20496730322630788 +187 582 .9522267565547441 +193 582 -.6299817682218314 +200 582 .1007148138473879 +202 582 .8900087603891378 +211 582 -.5619452717388989 +212 582 -1.4526771849753541 +214 582 .3031617669474189 +218 582 .4365811119696593 +234 582 -.524163001444855 +238 582 .866193753791977 +253 582 .5161066058737551 +260 582 .46786517440092756 +267 582 -.46090517083905 +270 582 .33379647854855354 +276 582 .24506514309909727 +281 582 .09840680255137235 +287 582 -.7368568133330528 +289 582 .49946405147369954 +319 582 .3950518225224606 +327 582 -.21254428847289508 +329 582 .7264331754015461 +343 582 .7598947686229296 +355 582 -1.105801410897193 +361 582 .9902508193212423 +380 582 .16912058227171264 +391 582 1.4358306527036362 +406 582 -.2305758705451535 +426 582 .4394123827516336 +432 582 .32066688462894966 +441 582 .5214251092569703 +444 582 .41959263192846774 +452 582 -.0686219031070456 +479 582 .30091025190726006 +491 582 .8783665229100436 +503 582 -.06930141787332544 +504 582 -.11267501638845434 +506 582 1.0013159714729045 +515 582 .4639818668112115 +518 582 -.436445306836064 +523 582 .4977765359447283 +551 582 -1.8571096344207432 +556 582 -.5725689288239306 +565 582 -.7949628854171855 +574 582 -1.044442968944139 +588 582 -.09641165633241239 +597 582 .01905004160744231 +612 582 -.36795412011186845 +642 582 -.25844496492846447 +648 582 -.10621615049845087 +666 582 -.5970269715997583 +671 582 .31167759033006565 +673 582 -.34287787416611426 +688 582 -.5637776788323446 +717 582 .3349626516574954 +722 582 1.017759793205441 +726 582 .2285288453264402 +727 582 -.03491964421462032 +752 582 .20626004296254286 +756 582 -1.4425848859338466 +757 582 -.8054420694356835 +787 582 .16884748728591975 +790 582 .36130510337498 +796 582 1.34925861748852 +801 582 -.4145398152951301 +805 582 -.12777058050658338 +810 582 .6234173192933703 +824 582 .912876999200836 +834 582 .43353878548312264 +903 582 .28179939783137187 +904 582 -.3922689406684169 +912 582 -1.35406919874918 +932 582 1.7897388290592136 +933 582 -.10695527137103931 +937 582 .11760292543335922 +959 582 .8527292666496818 +965 582 .20587890399816605 +970 582 .3001289427139217 +2 583 1.186340540938554 +5 583 -.19240305221522377 +10 583 -1.131601030038264 +19 583 -.037503835321041144 +28 583 .3072435965674251 +33 583 .16242909520397505 +35 583 .7932317278047524 +37 583 .3861416929437729 +40 583 -1.9402434214760478 +42 583 -.5282663197108936 +55 583 -.5988320079249673 +69 583 .5913900238877585 +96 583 -.9029475031593023 +99 583 1.1919413906490886 +106 583 1.2233718490426202 +119 583 -1.684568677853319 +129 583 .5062344594664381 +133 583 .5453041445342146 +136 583 -.7875366756368608 +149 583 -.6291907879593295 +152 583 -2.773784782311426 +157 583 .6007119558591569 +170 583 .5526976252476106 +176 583 -.40379404958591025 +179 583 .03480319346332178 +181 583 1.0930164357066747 +217 583 .13053353013805913 +229 583 .6021811001598902 +253 583 -.8934253477502384 +257 583 .7402407753702263 +261 583 -.49781308914437317 +276 583 .8659827072228087 +280 583 -.647026378276736 +287 583 -.9195923544797253 +289 583 -.21336701304275507 +324 583 .2252346467282169 +338 583 .7999210567949665 +344 583 1.0606813059555327 +346 583 1.007245365180089 +352 583 -.48332377054144393 +367 583 .13689423449527377 +379 583 .9105226064545057 +405 583 -.3228294646976464 +428 583 -.99001316306019 +464 583 1.0637060286806268 +472 583 .418830109598633 +473 583 -.9343323651137709 +493 583 1.8553439876461004 +494 583 .9761000073567349 +498 583 -1.4199506440981347 +517 583 .8714994747949759 +556 583 .4395152418832907 +559 583 -.9608293432010027 +574 583 .9382594281989488 +588 583 -.1824829593916445 +600 583 .11600088362620242 +612 583 1.8148269582814254 +617 583 -.2240076688777131 +625 583 -.4541039206685583 +652 583 -.510345852536358 +681 583 -1.8698947326871038 +683 583 -.1257946301048133 +699 583 1.6499771499640847 +706 583 -1.171013478430902 +708 583 -.907079789122482 +742 583 -1.1410102835104876 +749 583 -1.1902334750827843 +755 583 1.9916632323202634 +758 583 -.22712257846466427 +775 583 -.4778421747354946 +798 583 1.4306313140017024 +800 583 -1.8481989781595296 +805 583 -.09386610409158272 +808 583 1.0585196242434745 +820 583 -.951882910754849 +833 583 -.8477192006436252 +835 583 -1.3181597310719126 +870 583 .5040232647032762 +871 583 -1.0254810719446175 +872 583 .2165592453383663 +876 583 1.1419957191994818 +879 583 -1.3767273567748934 +898 583 -.14774186747630533 +900 583 -.13352493494217255 +912 583 .17832932896232467 +936 583 .43706238662533936 +938 583 -.11343972264743651 +942 583 -.5555301516792805 +944 583 .4614087734009425 +951 583 -1.3410801284976772 +953 583 .4057900578819072 +963 583 -1.236231549024689 +969 583 -1.1961005051416937 +971 583 -1.20959371592395 +977 583 .07226577671260317 +983 583 -1.6406492897641922 +999 583 .5915309118641396 +19 584 -.2704517468608623 +22 584 -.20683893183753832 +29 584 -1.3516118479955979 +47 584 -.9295997084969526 +62 584 .42170930124047673 +77 584 -.10564975094096409 +112 584 1.1441186613091328 +124 584 -.27695606012745727 +130 584 -2.08244124346543 +138 584 2.346395717193557 +154 584 -1.4512612384060777 +172 584 -.05873754881692066 +175 584 .8018058134243362 +186 584 .31795944156165823 +188 584 1.1235864525859263 +213 584 .11456695337544665 +214 584 -1.1684219804830331 +229 584 1.4394838870133977 +241 584 1.2257860647025018 +249 584 .03347120120893601 +251 584 -.8345456995187228 +252 584 .17871229257061905 +256 584 .0971224314578763 +258 584 -1.9194993252958534 +264 584 .9728233451369446 +278 584 -1.0324994094095996 +283 584 1.2532209144422424 +287 584 .6956077259851161 +289 584 -1.3291366975987837 +303 584 -1.2510898253882874 +305 584 -.3414284766375589 +315 584 .5109590633123368 +342 584 -.27904645408634726 +377 584 .08088244182350587 +426 584 -.026336659066637506 +431 584 1.146234748792437 +439 584 -2.2730878172539404 +441 584 .291477429323902 +445 584 .6439576474294949 +455 584 .5642803435126464 +463 584 -.2935544726415734 +465 584 .11586017794062126 +466 584 .2802793135954735 +488 584 .6490775396535778 +498 584 .8991219351674773 +507 584 -1.5409639360572684 +520 584 -1.7725660703206148 +525 584 -.3213923455464774 +534 584 1.368238971507967 +539 584 1.3850290144125017 +541 584 2.0064747674758956 +552 584 1.4656388575133308 +568 584 -.13362364603505641 +571 584 -.6524694640723347 +585 584 .23237112635199664 +592 584 .5100401702748042 +599 584 1.3460485613052424 +600 584 -.75960891867126 +616 584 .7343577381285399 +623 584 .7507172131160158 +626 584 -1.2935098485339396 +631 584 -.5679409180833904 +635 584 -.742888972210336 +643 584 1.105175778235796 +651 584 -.6141961458874609 +656 584 -1.70577450930368 +668 584 2.2191243567338907 +678 584 1.5348091883485002 +689 584 1.3089075231762117 +697 584 1.6007138751070706 +699 584 -.4151582645488171 +700 584 .679372194063453 +713 584 -.834514597688312 +716 584 -1.288536575296509 +724 584 -.41823829970439613 +731 584 .9930083154909914 +732 584 1.1253160734776682 +733 584 -1.1639002173393802 +736 584 1.1682319945701924 +740 584 -.39169114391398513 +741 584 -2.4732326971336454 +742 584 .4597301760871684 +768 584 -1.1993158696837858 +794 584 1.082623294615797 +798 584 1.2802135117368663 +803 584 -1.5135279444315883 +809 584 .5537156713264566 +815 584 .06256076432186095 +835 584 -.48303959622123127 +863 584 -.4858273303465448 +875 584 .8309190145107935 +878 584 -1.0503442381722605 +902 584 -.9325775572156871 +904 584 1.004888920452415 +907 584 -1.9094453306063202 +908 584 .8839501524924679 +911 584 -.9319975888795602 +924 584 -.004103692876847198 +937 584 .9340085856815786 +952 584 .1840663383132432 +974 584 .5255345964241436 +986 584 -.9433724617025971 +8 585 -.8580975527099989 +18 585 -.5002057446776722 +29 585 .07903883376752646 +41 585 .33853563617184307 +51 585 .7169992471490326 +57 585 -.6566752994401959 +64 585 .8869962470386308 +73 585 .875477147130255 +85 585 .041041423254506285 +104 585 1.3004962568517657 +110 585 -.41891985325718684 +112 585 1.7968602266609368 +117 585 .4133841525024479 +134 585 .28156457532691104 +142 585 -.5083040414714705 +165 585 1.2410054650764337 +173 585 .7291601253155813 +178 585 -.683936117921143 +183 585 .4376096827763237 +222 585 -.5826019820855391 +246 585 -.08345119165753605 +251 585 -.764771996235401 +253 585 -.5605631553640175 +260 585 .45867075546426517 +263 585 -.9228693068506473 +265 585 -.037194357103784444 +270 585 -.9194730926571586 +284 585 -.7464322073093712 +285 585 .7777023927429452 +286 585 -.8911713645142849 +294 585 1.1210653035257216 +307 585 -.15192938975843312 +324 585 2.503130347235218 +334 585 -1.507368111295833 +337 585 .34042468790669567 +365 585 1.3199380286578586 +373 585 .009327896108509523 +395 585 -.21173935795789028 +398 585 -.2048922350231742 +401 585 1.038014817737585 +406 585 .5428151883238564 +421 585 .41567959752234085 +443 585 -.7977159115791357 +449 585 -.15465392945965384 +457 585 .9298859542866317 +466 585 .14405703036282114 +480 585 -.13713442377885923 +483 585 -.08072496432561321 +504 585 2.306643728261621 +515 585 .706559733385445 +517 585 -.27479395888033514 +520 585 -.26133012226085733 +527 585 -1.3836705214814757 +528 585 -.8447463078641322 +560 585 .10620841033971382 +572 585 -.669648433961311 +585 585 .8211741598224975 +605 585 -.6768284001359731 +626 585 -.5158165917073306 +653 585 1.403657015643284 +662 585 -.2372333157920755 +678 585 .753834505410504 +712 585 -.5179059665067863 +725 585 -1.9236868204727577 +733 585 -.7142130075315298 +735 585 -.7771537019727186 +747 585 -.4069923309046717 +753 585 .004649943834472307 +763 585 -.05028026618271503 +778 585 -1.7810538228046813 +786 585 .41765279666563093 +790 585 .7814415820516211 +809 585 .04417681905682318 +823 585 1.6048191044685676 +828 585 .6723615370866389 +837 585 1.8131922042184272 +841 585 1.1362785793540495 +842 585 -1.1317873622462666 +849 585 1.2921792183705354 +861 585 2.45944575281452 +869 585 -.0015334354805164319 +884 585 -.8073877992799359 +886 585 -1.202590691755503 +896 585 -1.800478599649256 +899 585 -1.2039431023105325 +917 585 .04510278004211127 +934 585 -1.0662487536250531 +935 585 .43385973068968187 +939 585 .2996531978899921 +946 585 .8474492474513285 +976 585 1.0989244229842017 +980 585 .08234491218857433 +987 585 2.368745257047413 +29 586 .4719568481164122 +31 586 -.31557987569822726 +41 586 -1.1478629887951308 +44 586 -.150866759221498 +46 586 1.0543212821114492 +48 586 .4892744540356403 +58 586 -1.4482902741482309 +75 586 .6286244945349945 +79 586 -.5026226160033204 +108 586 -.06757096971944004 +127 586 .4178583722596823 +128 586 -.6677627276146232 +169 586 -.10596840934987295 +174 586 .23774897981948764 +183 586 -1.0511898166343334 +189 586 .04044437796459513 +197 586 -.4833778616262775 +218 586 .3898826079508848 +229 586 -.30764067987173616 +233 586 .9959331653816776 +239 586 .9398613457934746 +260 586 -.002811163643376288 +267 586 -.7725572621830764 +268 586 -1.1579384816976939 +308 586 -.8265366900631321 +349 586 -.4953347858332483 +373 586 -.71988517338511 +376 586 -1.0717212974542099 +377 586 -.0534364765258475 +405 586 .48326578529385333 +410 586 -.07508625998873145 +412 586 .05701554165608118 +417 586 -.9857810557378467 +428 586 .9565850065452912 +464 586 -.1529070141540953 +468 586 .21597565393008633 +477 586 .6515942865681771 +493 586 -.21874408941123524 +494 586 .3129547072371335 +503 586 .2261405004659061 +506 586 -.3196700831570352 +517 586 -.782685885162608 +545 586 .5038835276671867 +552 586 .5535273790534271 +560 586 -1.0629133998490166 +566 586 -.5283911547190686 +567 586 -.3141639611057844 +571 586 .13578801870050383 +580 586 .9977711114423543 +588 586 -.45910731746279904 +591 586 -.21454068351455982 +600 586 -.33945171603611973 +602 586 .2007308558417812 +604 586 -.5665168885346857 +608 586 -.448284113022865 +617 586 -.7765087389630364 +623 586 .17057343077600556 +632 586 .42496699797404974 +635 586 .052666313625795935 +638 586 -.1344627792280542 +644 586 -.1264284361217542 +660 586 .00742624640338407 +667 586 .7806605101194808 +704 586 .7467703401982486 +705 586 -.19193655376590146 +712 586 .054184508357307544 +726 586 -1.0387080987228843 +730 586 -.09813329516676306 +736 586 -.6288481037884857 +741 586 -.3848143149063249 +770 586 .34989105043250124 +772 586 .5470815376691979 +779 586 -.07481753953479323 +805 586 .899541898015437 +821 586 .30532334556516905 +843 586 .5574867988752816 +850 586 -.35096291482494224 +855 586 -.10430955073158366 +867 586 .42912669479904014 +875 586 -.05389656013975966 +882 586 -.7355268698575445 +884 586 -.628011423685677 +885 586 -.37908787161335755 +908 586 -.13686967741534511 +911 586 .2810357792173725 +914 586 -.10551089760589977 +939 586 -.10662274960807651 +960 586 -.7532355304118465 +980 586 .13373354489894143 +991 586 -.6535120716926163 +46 587 .92757984502456 +47 587 .6649587260531293 +52 587 .6310511802452041 +57 587 -.7456518741368858 +60 587 .7710003041447023 +72 587 .6763429521682125 +77 587 -1.0516060885229725 +84 587 1.1139862575397197 +91 587 -.843390002590338 +108 587 -.14713216090644238 +111 587 -.022435796221536047 +136 587 .6799188239425826 +139 587 1.0563316051847544 +148 587 .23845796977141173 +153 587 -.16382896973630623 +154 587 -.3757219687623889 +163 587 -.6802958775857656 +164 587 .16846997396550423 +166 587 -.8781989598856125 +180 587 .3036309674992367 +182 587 -.1275525254138321 +187 587 .05393817772085079 +200 587 -.409154437089616 +208 587 -.17601455389234322 +210 587 -.17149889439130261 +213 587 .6162582832003749 +216 587 -.44173421541270774 +227 587 -1.2196400610432019 +241 587 -.6316937910642011 +247 587 -.7582999908229713 +252 587 -.9454526203775553 +278 587 -.17084027293317858 +293 587 -.7347760948515316 +304 587 -.1600698296946628 +305 587 .25131085509844403 +339 587 -1.1395923363965161 +369 587 .16578808276839307 +376 587 .16562705104156078 +377 587 .6348424519627097 +378 587 .7668218711779184 +381 587 .07621380159263345 +385 587 .029171783045984084 +389 587 -.18034124380913702 +398 587 .46554261289579135 +401 587 1.7419510707524255 +406 587 .7348677559246816 +407 587 -.3061365031008207 +430 587 .25800068175678204 +445 587 .4846136937999831 +446 587 .5810345492842571 +465 587 -.3653362244658912 +468 587 .34657083249311516 +469 587 -.04634754435051211 +494 587 -.6478112452949488 +504 587 .9945866440577376 +511 587 -.08083078344752163 +516 587 1.2118849301670476 +524 587 .31116561728231495 +525 587 -.6193070052648066 +529 587 -.6256432324179614 +532 587 -.7725821271233392 +534 587 -.4684502068876098 +537 587 .581235497156342 +539 587 -.33199862882106806 +541 587 -.3412846779269769 +542 587 -.1443097812016236 +561 587 -1.0139357888602034 +566 587 -.6719626651104608 +576 587 .39942910562236855 +577 587 -1.071931887919514 +589 587 -.5926426318095659 +591 587 -.25550141832619633 +601 587 .020239949008376168 +648 587 -.7731514796666267 +649 587 -.6287815521585266 +657 587 .021935677259046493 +665 587 .0685000674283494 +668 587 .03627113441821612 +679 587 -.7262953829680918 +693 587 -.08025236055810864 +697 587 .5985582843624573 +700 587 -.9160160175981055 +704 587 .6975704980056059 +706 587 -.29886938837794913 +723 587 -1.1853021442474985 +728 587 -1.1228336803281815 +729 587 .36218348775927645 +730 587 -.05401455213408051 +731 587 -.17207108971596174 +733 587 -1.0636754606700305 +739 587 -.3913571166056842 +752 587 -.340129148680122 +768 587 .5612819309405781 +772 587 -.5234932067969214 +776 587 -.4344635402602602 +794 587 .44906590055263174 +806 587 -.9200795487920347 +824 587 .9912542873134255 +831 587 -.036900882419901804 +835 587 -.2871361204708254 +843 587 -.0015325940181776486 +852 587 -.25351833174655236 +858 587 -.417841726502137 +870 587 .8694628606203447 +897 587 -1.6829450805617947 +901 587 -.691658028341331 +912 587 -1.1577731254721013 +913 587 .4563903523574208 +930 587 .1683621569989546 +934 587 -.5854664904318121 +948 587 .40657970603835925 +951 587 1.2706824860473498 +959 587 -.18670386253563287 +972 587 .03856330073497235 +981 587 -.2886204176546027 +986 587 .5618126534661475 +987 587 -.07767356868213335 +994 587 -.10526946698570526 +12 588 1.7115344888679669 +24 588 -1.517561495870834 +27 588 -.6791583229478994 +44 588 -.2405094282949029 +102 588 -.48632448818480917 +124 588 -.4091702851552428 +149 588 1.0805202991168967 +152 588 .4071225902809775 +160 588 .03152808497504965 +169 588 1.864855689766713 +176 588 -.7274543317145156 +205 588 .3759115237651626 +212 588 -2.869711601547712 +214 588 -.9281392521538339 +217 588 -2.0973070170497565 +247 588 -.02545160684141247 +269 588 2.4045857463733884 +271 588 -.4239713096683844 +282 588 2.8103820621543116 +293 588 -.709512476746657 +308 588 -.3947140601783286 +312 588 1.1914664608820011 +325 588 1.5504329013221667 +333 588 -.5758487226002439 +343 588 -.40042603785954883 +348 588 .24552544088048395 +396 588 -1.0866631586075528 +404 588 -1.3442735710507479 +410 588 1.0050751662921242 +423 588 -1.9485023195107947 +437 588 .27164554762343834 +441 588 -.7348759437074296 +443 588 .9582012460764102 +448 588 1.8858637091556576 +465 588 .8340918527487141 +471 588 -2.6307993695012493 +473 588 -.33252686324382685 +486 588 .299370315539795 +492 588 -2.7511777839722336 +502 588 1.1765501516706776 +511 588 1.3010103167707123 +547 588 -1.3379946293306695 +561 588 1.2140833417658434 +564 588 -2.4256159146689447 +570 588 -2.099886303716229 +572 588 1.0496748080368632 +598 588 -.04270091607994589 +616 588 .6311151349256032 +623 588 -.7117249242794276 +625 588 -.7287471205358594 +626 588 -.017683959124356607 +639 588 -1.8778291537837009 +645 588 -.9809654412302352 +655 588 -1.3259625361191096 +673 588 -1.3573531390706675 +683 588 -.4871275392551842 +685 588 -1.0010796166047644 +692 588 1.957559387026676 +703 588 -2.093009843754118 +758 588 1.024856040116886 +765 588 -2.4662550715456195 +786 588 1.4008137188987666 +802 588 -1.270242647852325 +804 588 -.24601262113008077 +814 588 -.23230024675615385 +815 588 .4188155980825182 +831 588 -.23027118186504278 +841 588 -.45082808493281523 +843 588 -.4204826457827936 +851 588 3.2144221820398213 +852 588 1.6041868230177954 +869 588 2.0713615982091067 +874 588 .3391087157015083 +877 588 2.1357777923724486 +881 588 .1736643186348076 +883 588 .23554370865816887 +891 588 -2.550046425822581 +904 588 -2.6710806479829543 +907 588 .7772525642248503 +914 588 -.6849133913763421 +919 588 -1.884568364647404 +949 588 -.5908949186757398 +961 588 -.6648976636423899 +979 588 .8413764942292059 +982 588 -.025712352650961723 +985 588 -.33929946083652857 +988 588 -.6154970993996529 +5 589 -.031052217023337852 +15 589 -.5389788491074546 +42 589 -.8668905355377061 +72 589 -.7985250244881397 +77 589 -.12479424197339739 +95 589 .6089382831537569 +97 589 .3217090328807386 +116 589 -.0683107974720306 +121 589 .025728701194616163 +123 589 .3027417088122914 +124 589 -.7963510460129001 +134 589 .5777266258508637 +138 589 -.6410569692851447 +139 589 -.8309707628646453 +143 589 -1.378305534100291 +144 589 .17765735203677344 +150 589 -.2105087885467269 +156 589 .33303522589973855 +157 589 -.8727386880446766 +160 589 1.210075839626889 +162 589 -.6162716875352077 +169 589 .9432791814121242 +170 589 -.08650824534877982 +175 589 1.1650575313463738 +191 589 -1.1529670831870644 +205 589 -.6092757787647889 +210 589 .5741149188245331 +216 589 .10460553762316871 +220 589 -2.5974623848946474 +221 589 -.48117179039914343 +233 589 1.0914352810576273 +237 589 .35286155356573645 +240 589 .7864761449744812 +244 589 -1.4912935066019568 +246 589 -.3698962545876675 +260 589 -.03343781813452679 +263 589 1.1383407912500192 +272 589 .6062867952125974 +291 589 .38159844116832226 +294 589 -.8265552312588825 +313 589 .6241677727245327 +315 589 -1.0691451471617013 +324 589 -1.2696900906015247 +333 589 .7767117697536144 +349 589 -.4975291327436562 +354 589 -1.503679244742221 +359 589 -.009955855817516984 +361 589 .28711787927599464 +372 589 1.5386308546219205 +392 589 1.022648714196513 +397 589 -.40567272187903863 +401 589 -1.4468423693887156 +404 589 1.5747303208650476 +406 589 -.019987725996340272 +416 589 -.7377454933399484 +426 589 .3924495627964181 +433 589 -.07098140375525676 +438 589 .19455482298118615 +440 589 -2.121239611188677 +458 589 -.010035904171473056 +470 589 1.2034063974731852 +475 589 -.9275125022031006 +482 589 1.1402295028448282 +484 589 -.5385762404442802 +489 589 .06932634160040838 +513 589 -.19497124158563534 +518 589 -.03193569031635983 +520 589 .6827806484038261 +532 589 .7952562438997051 +535 589 -.13433453746150653 +543 589 -.38042181130255676 +553 589 -.35629173933608926 +583 589 .22852037824242186 +589 589 .12652754295065577 +592 589 1.0506688168013951 +613 589 -.031412729143640364 +616 589 .9273766785111748 +617 589 -.416294252381174 +626 589 .09376140351377432 +630 589 .31325875062461384 +631 589 -.33719833195282883 +633 589 -.6002255890217472 +651 589 -.7594486930561549 +654 589 -.16947761571843356 +657 589 -1.1798539331493871 +668 589 -.09846421955771338 +671 589 .5067644475438385 +706 589 .21905997738623192 +723 589 1.233957998685578 +725 589 .6275719311151461 +733 589 1.0711145381231677 +740 589 1.5636696778383987 +763 589 -.1847946291730587 +785 589 .2905167469668475 +787 589 -1.3485054731580202 +790 589 .3773381438572077 +794 589 .3185883136800821 +796 589 1.1609399296144625 +800 589 -.013696117547317685 +821 589 .9228863328294301 +822 589 .7453517995231735 +849 589 -1.8156715686716156 +873 589 1.2349181803693676 +875 589 -.06991097980178203 +888 589 1.917237548403364 +891 589 -1.1546373169496804 +900 589 .45335030356116107 +914 589 -.4945479075578867 +919 589 1.635838416155926 +923 589 .11911875039863314 +931 589 .5127496816211744 +932 589 -1.2409927634524596 +938 589 .25575593706763544 +941 589 .3508319045599874 +950 589 -1.1371036476351226 +976 589 -1.2122799183056356 +988 589 .6322808009437931 +994 589 -.1459320272889115 +995 589 .13690447273280393 +16 590 1.004968486013171 +28 590 -1.1032464797477701 +39 590 .2876535383146279 +51 590 -.32123833723465267 +60 590 -.14123473790198876 +89 590 1.0110395485425132 +91 590 -.47215440257024716 +101 590 -.31433399670101564 +102 590 .19609272833373106 +117 590 -1.1228943357309122 +145 590 -.30198952631075 +147 590 -.48979005424614197 +157 590 -.5439205632242203 +159 590 -.5640643390088492 +160 590 -.32324456348686215 +161 590 -.5634994690305644 +164 590 .47788825766342335 +169 590 1.2543491725599787 +177 590 -1.6008292295450062 +191 590 -.44621493650886257 +193 590 .8048200918572351 +200 590 -1.1419504893325556 +214 590 .019949051376696017 +231 590 -.08437369751846002 +235 590 -.24129532240144497 +237 590 1.4612575563925747 +244 590 -1.340719993284696 +256 590 -1.259408209211057 +267 590 1.4035132674877415 +277 590 .44192377822121764 +284 590 .28085006733956563 +293 590 .47259157148915226 +300 590 -.36874698779109244 +328 590 -.4946391769792602 +329 590 -.33603236350977655 +335 590 -.6065410167501412 +359 590 -1.5655073311914085 +379 590 -.03157636346146486 +382 590 .49676718871118575 +396 590 -.18362924580349824 +401 590 -.2094492122817404 +410 590 .79324532142448 +411 590 .6698243117585587 +418 590 .97931929083631 +428 590 -.9313225663337115 +436 590 -1.3308063952954154 +475 590 -.7258396165843938 +478 590 -.03135508844000909 +484 590 -.23660924487782123 +502 590 .38867059415296884 +504 590 -1.0328955921045047 +510 590 1.7110706889957927 +512 590 -1.8632981904792603 +545 590 -.15285257117866802 +551 590 -1.4886849975881598 +554 590 .17487852302898077 +556 590 1.1712097547456872 +568 590 -.54537077084628 +583 590 .5417135322964072 +616 590 .05763152433086932 +620 590 .19538600820041918 +644 590 .4950880500643214 +665 590 .5725652739424142 +666 590 .5764749484014426 +676 590 .266441870771998 +692 590 1.059765809992265 +702 590 .7934228663941028 +709 590 -.0143956962401727 +714 590 -.17362618665513732 +732 590 1.5728391430874888 +743 590 .5779155023894195 +755 590 1.2784644812766022 +766 590 .5412320633942085 +776 590 .5865364131436447 +815 590 -.5408995550444552 +824 590 .7165550789187117 +836 590 .5085090129053157 +848 590 -1.2070562781952445 +862 590 -.7001892675741515 +867 590 -.14855363986620007 +870 590 .23127585824138064 +872 590 .21376736478508193 +878 590 .2224107388730024 +879 590 .9450973028070785 +884 590 .5510849661234158 +885 590 -.5758428859358824 +891 590 -.9449303693092943 +908 590 -.21152133090352895 +914 590 .16686628258423417 +917 590 .8106647590543261 +924 590 1.2835096895671572 +938 590 .1504588377867595 +947 590 .18310154716513394 +949 590 -.6077154103549101 +957 590 -.833003546427477 +961 590 -.2040432718059158 +982 590 .255015269521898 +992 590 -.9000029015030037 +995 590 -.8215421163510953 +3 591 .80722506508267 +12 591 -.02711535603787238 +25 591 -.4204092812864252 +31 591 .19017545176383777 +39 591 .2966993275450289 +52 591 -.8634605869049495 +58 591 1.227930210509939 +68 591 -.40058555102938576 +69 591 -.3155926009089402 +75 591 -.9014340200014045 +78 591 .6485265039675976 +83 591 .8644720662468346 +98 591 .24767324794756632 +101 591 .9275509301710317 +104 591 -.31539634301929 +108 591 -.4889950742010276 +112 591 -.5617476163543651 +132 591 .25308816682493335 +136 591 .5665628745462418 +154 591 -.33174352667950724 +163 591 -.10845463373193794 +173 591 .06134685538295538 +177 591 -.7483893612246314 +181 591 -.5236999732230221 +199 591 -.19557879387594299 +203 591 -.7191488357927646 +232 591 -.6580327232110588 +233 591 .007897219497224356 +243 591 .24899954956564815 +247 591 -.33057304729091697 +248 591 .704479676368654 +258 591 -.2706095348668013 +266 591 .6627392668229564 +281 591 -.39228571656307737 +290 591 -.07537670200955418 +298 591 -.2456423262792148 +306 591 .09233713612582689 +308 591 -.2686293926711057 +321 591 -.28348631207181374 +334 591 1.6449297103800968 +343 591 .02144614495507697 +355 591 .7525851216252387 +360 591 -.5314069644315423 +368 591 .17655377695587068 +376 591 .15861392180236994 +382 591 .32149071072226193 +394 591 .2560226108191262 +396 591 -.8003957171828007 +401 591 -.25676998344914126 +403 591 1.2930714476163403 +404 591 .45757704960178414 +425 591 .8521258274568166 +426 591 -.031465965091716355 +430 591 .7458629706282035 +434 591 -.9121053398433531 +453 591 -.8358696454493796 +459 591 -.17553888237566506 +468 591 .3902436386736102 +486 591 1.2856771072222652 +516 591 -.1906773224585807 +535 591 -1.1807533883455945 +538 591 -.3072644610985398 +541 591 -.2779906504672228 +574 591 .4738023571416209 +584 591 .39675239634090276 +597 591 .42130007211484355 +599 591 -.09415694277986592 +601 591 -.2350066802685171 +615 591 .23750096186131997 +626 591 .5286110274781375 +627 591 1.1494813150841752 +633 591 .6460592419247337 +635 591 -1.343262949527908 +640 591 -.21428574425942842 +645 591 -.8220331526508551 +646 591 -.2587584993812678 +656 591 -.4146739926771244 +661 591 .24045301444072892 +698 591 .6325999602968152 +714 591 -.2043149322797875 +716 591 .5445321642964278 +723 591 .37887570374552326 +735 591 .07165054389504469 +737 591 -.3065589534504025 +742 591 .537858632368452 +745 591 .36937436294096176 +757 591 .04413851609179695 +765 591 .7827615025385624 +772 591 .8923890591277189 +778 591 1.4280730113512048 +786 591 .6828828434442058 +800 591 -.3198569164536661 +801 591 -.3776935180925818 +838 591 .5323657299016278 +841 591 -.39315361309088814 +843 591 -.474412098105608 +848 591 .9049621343485126 +849 591 -.849002739300202 +859 591 .34678562533028656 +862 591 -.8750302134246644 +869 591 -.45713391474637943 +884 591 -.021766769948272084 +891 591 -1.4275660071931118 +892 591 .6680295731589762 +893 591 -.1621300340769038 +907 591 1.1164067711849683 +913 591 .2607719431482643 +943 591 -1.213577726793974 +944 591 .27523487681123116 +955 591 .8171317267947916 +958 591 -.25139462311282473 +959 591 .13791841697510504 +978 591 .24248115745527754 +1000 591 -.5426934546476764 +14 592 .10244025830511756 +25 592 .11628463705844644 +33 592 -1.0917580175909616 +43 592 .19876780000827635 +46 592 .2843592224266498 +54 592 -.1276830975966683 +59 592 .8182050380133723 +68 592 .31516733319972834 +73 592 -.5757890846251339 +81 592 -.8454297107557809 +88 592 .21776594079210404 +90 592 .06857602011180353 +110 592 -1.972872901741965 +118 592 .17817727551709284 +125 592 .35429463750205326 +128 592 -1.019687440623366 +143 592 1.176666138661465 +154 592 .8736184547234146 +180 592 .5887166555791647 +193 592 1.454168377847854 +219 592 -.02865476727306613 +233 592 -.41693427593517884 +236 592 .5006868600425525 +238 592 -1.2292445681005215 +243 592 .29775509607639444 +246 592 -.8388384711454014 +247 592 .27258277961153 +254 592 -1.772553407023233 +258 592 .2768935638714101 +262 592 -.9116718200323641 +264 592 .7577363161482513 +265 592 1.2427190161960473 +323 592 .8076273153001976 +355 592 -.4997352185192758 +360 592 .39341584388050466 +368 592 .8152708304142072 +373 592 1.316864186814943 +381 592 -.4384562329844274 +386 592 -.39479785241649257 +391 592 .8887029062633051 +442 592 -.6088821976554196 +454 592 -.5868286599393187 +505 592 .8994428168064658 +529 592 -.08364283800011757 +532 592 -.6168838945559622 +541 592 .3726727752390958 +543 592 -.008557594604956642 +547 592 .16193926867284142 +549 592 -.376654959197788 +560 592 .18944927100701323 +565 592 .8695463073185827 +576 592 -.5648070098587781 +579 592 -.45189045419365215 +616 592 .05826797563890765 +617 592 -.08630586802930257 +619 592 .16707075280711634 +623 592 .633222612723949 +624 592 1.686660872815927 +644 592 1.1869912266269262 +646 592 .6255490480457404 +670 592 .7534318393467169 +671 592 .6356223112268646 +679 592 -.2464092412331097 +684 592 .23788285290405087 +688 592 1.248580690801874 +704 592 .01951602083101804 +721 592 .509786252107118 +731 592 .062424324702460635 +732 592 1.2379519446591762 +749 592 -.6841112712467446 +750 592 -.7774810951997011 +752 592 .633854543727282 +755 592 .23997793035577794 +779 592 -1.0869507147891926 +784 592 -.7711457359867895 +789 592 .8293829705969512 +795 592 1.8695129646022504 +801 592 .00591060015322907 +818 592 .7675545112794137 +819 592 -1.0534959276274332 +820 592 -1.0913088206830084 +826 592 .6093350731854175 +835 592 -.566880134071331 +836 592 .22987728746906694 +837 592 -.38123966428923023 +848 592 -1.310216001533487 +850 592 .012106140279115642 +856 592 -.2034689083252696 +880 592 -.6785341110504849 +892 592 -.8140530207901667 +893 592 .03949550957371811 +895 592 .05819121723133888 +907 592 -.9244260791902607 +913 592 -.823275046584636 +923 592 -.34264582281694034 +926 592 .8841007102896128 +948 592 .044708247502929 +953 592 .5867860082351022 +965 592 -.23716836229089625 +969 592 -.41319623627444996 +971 592 -.5979235931378087 +982 592 .014490618635125671 +986 592 .68190118206742 +989 592 .5491741233881211 +990 592 1.2497649875285455 +999 592 .37444606504109346 +67 593 1.553486602221151 +80 593 1.6994177245664872 +83 593 -1.2663374179196656 +93 593 -.6655133782132692 +94 593 .21026994594397674 +103 593 -.8041459059626446 +105 593 .15841613277286226 +114 593 .06689432666607575 +135 593 -.6820630405503757 +146 593 1.3173596681785773 +149 593 .8755198629403337 +150 593 .29267496870554793 +155 593 -.18372286591537362 +168 593 .6951814038978978 +172 593 .32762439013266065 +173 593 -1.1618781826533882 +175 593 1.3469974100848374 +197 593 -.9721195284059692 +200 593 -.7913514162976756 +208 593 -.895683517290387 +222 593 -.5473804590107151 +224 593 1.063333633521062 +229 593 .06415714447265493 +230 593 1.4534745529510893 +233 593 .07403611861722909 +235 593 .862493550099697 +238 593 -.16235741132632042 +243 593 .510890735631984 +244 593 -2.0676139494597536 +256 593 -1.574234778383975 +259 593 .8092565963013016 +292 593 .14381091371957253 +297 593 .9438908432704096 +307 593 .940975594902295 +308 593 -.868807884444257 +309 593 .1582867916452927 +316 593 -.8152458235715012 +322 593 -.9542883221638974 +338 593 .4728858249256049 +347 593 -.2774045284897997 +369 593 .1999747780675502 +373 593 -.20641867234954916 +376 593 -1.8689008206150686 +394 593 -.6088020789502689 +404 593 -.20227093686460496 +409 593 -1.2206956301938336 +414 593 1.3147102397288266 +415 593 -.1935109992550974 +418 593 .3855253294438778 +446 593 -.3176569144520521 +448 593 -1.212279229137065 +450 593 1.6824631178046363 +455 593 1.7440589891878022 +461 593 .15230014386030782 +468 593 .026911434818417318 +479 593 1.9817437598324177 +484 593 .6161707631655992 +485 593 .5944032790367342 +495 593 -.5603434748272342 +508 593 .2353658725653019 +517 593 .08754565290983715 +518 593 .9917967832465195 +526 593 1.1787791271077308 +527 593 1.683408159370035 +529 593 .6734975241654574 +544 593 -.05824665862422399 +570 593 .3099114818417318 +583 593 .5648531412422635 +589 593 -.050848470571142695 +600 593 .32843457999243275 +605 593 .3035120007001407 +608 593 .25177575412473924 +628 593 .9720075642388714 +635 593 .5469063617527293 +659 593 -1.5656385462000804 +669 593 .6850590397839194 +679 593 -.5621886874245545 +681 593 .2677123563672375 +691 593 -.15499563708529948 +711 593 -.1466316517861445 +729 593 -.1029210627442334 +731 593 1.5433184737141068 +744 593 .24699836405921813 +749 593 -.46145663529203096 +751 593 .05553452352040285 +778 593 .11509850730353785 +787 593 .36716362353314685 +796 593 .7814648179222148 +798 593 -.011096029073363961 +825 593 -.36359294422894517 +826 593 -1.0533478840276451 +827 593 2.9715148865852448 +865 593 .09083576139964983 +867 593 1.0992650556518424 +869 593 1.4077975904390159 +879 593 .5374689385035775 +880 593 -.2244683876059026 +883 593 .9186501252882859 +885 593 .36570519004216884 +887 593 .35521724102287977 +896 593 .4310671234248416 +898 593 2.9758190051217284 +901 593 -.3938037798876792 +903 593 -.18036069245525388 +915 593 -.6147095005346354 +925 593 -.5384764163550128 +928 593 -1.5574500223968872 +929 593 1.967204721658608 +944 593 -.7415644175338473 +952 593 1.1482181633308366 +956 593 -.800950965114917 +972 593 1.38943145716828 +990 593 .9112178908115622 +997 593 .4342258849375752 +36 594 .44998564387920326 +48 594 .4392632226604613 +59 594 -1.402668981385574 +99 594 -.8329457038321809 +103 594 2.014161694813261 +127 594 -1.793176273740245 +157 594 3.2003384125868246 +164 594 -.13430206399968597 +165 594 -.9973217367586795 +179 594 1.1240174636170142 +183 594 -.8390616233338338 +190 594 -3.0872144700059114 +198 594 -1.6208455494163572 +220 594 1.9890987705109338 +230 594 .24031325071771137 +257 594 2.705391247690725 +264 594 .12419417729123086 +269 594 -.3916163843793782 +291 594 2.2146583402897235 +294 594 -.5542090880157916 +309 594 1.061982793086255 +324 594 -.08111223864572778 +325 594 1.3941766558716089 +334 594 .2299596865119754 +384 594 .09487676289384953 +391 594 2.1141224934834133 +400 594 .7208643224962417 +422 594 -.6856262652901082 +424 594 .17357267240213403 +447 594 .28731434848731285 +448 594 -1.1266082065631777 +450 594 1.1197040107792737 +471 594 .17806854794227295 +480 594 -.4111771739306356 +492 594 -.0906380001282087 +503 594 .1457488489155191 +517 594 -.2652878403868674 +518 594 .1200609933581604 +523 594 -.8472468588269738 +525 594 -.7561043338124755 +530 594 -1.3851621574279878 +546 594 .9261084228234673 +551 594 -2.311810809933446 +553 594 -.007369405369984899 +558 594 -1.6031531247413184 +564 594 .08442009450198477 +567 594 -.6682662313412178 +583 594 -.8376886305449597 +587 594 .40503447220088795 +592 594 .2264239877780586 +597 594 -.7246943438217885 +632 594 -1.815193115840295 +639 594 -2.075309231686966 +649 594 -1.1504798915653505 +652 594 .13306200185742711 +660 594 .7250686932683115 +661 594 .047715274570264254 +666 594 -.5038839046372903 +680 594 -.8015096689718537 +683 594 -.9756550159780005 +690 594 -.08162707456979344 +700 594 -1.959765042410255 +703 594 -.44357514068361825 +707 594 -.30711956943822405 +712 594 .29732009647595786 +715 594 -.9324489815324738 +730 594 -.1795188683235574 +758 594 -3.06463173491674 +761 594 .13053004031688464 +771 594 -2.5103857422753078 +780 594 .07240889256036023 +781 594 .251995729271115 +785 594 -.9721327863181871 +787 594 2.2847006936966494 +791 594 .057320103225885086 +792 594 1.284447584701247 +798 594 -.499487300252857 +799 594 1.1973311925220615 +808 594 -1.7761707204008317 +825 594 -.8822754095439049 +838 594 .10390805124933868 +886 594 .7519170471003936 +907 594 1.7694354153850465 +910 594 -.2633488523338685 +914 594 1.653506522376678 +915 594 -.5501589197068545 +925 594 .13397071285335455 +937 594 -.7548031270491802 +948 594 -1.2983016957546425 +955 594 -.09760705283279199 +967 594 .12160673944976771 +976 594 1.4871317164236804 +986 594 2.4704778708298276 +3 595 1.0929465835642125 +5 595 1.2227996454699728 +6 595 -1.4639441444131684 +16 595 -.12952460240341052 +18 595 .5326860359490926 +66 595 -.5611924049471961 +67 595 -1.360937088717096 +70 595 -.5202851033793899 +73 595 -.09077133891174523 +82 595 -1.8072567549125031 +85 595 2.8205916344685047 +102 595 1.9133853311612483 +113 595 -.2957659759602205 +117 595 -1.9715729603836332 +126 595 .6795109451437503 +138 595 1.6035150445946222 +143 595 -.07609198082389604 +171 595 -.4555419335737501 +189 595 -.6688778861295381 +210 595 -.6542863362250152 +213 595 -.12471654643106024 +229 595 -1.4851209370275744 +238 595 -.782537864661616 +239 595 .39116511608316673 +245 595 -1.3990358002510828 +250 595 -.4224243238808422 +252 595 1.3922958073258984 +256 595 .17614402201499857 +264 595 .018063673251905416 +268 595 -.6867745480367959 +281 595 1.469495354920523 +286 595 .734419100615372 +325 595 .3248450617810438 +354 595 -1.815977495029184 +356 595 -1.1466223157307385 +360 595 -.17435148619048185 +390 595 -.7697802551011864 +396 595 .998796738132362 +404 595 -.3592563345317424 +405 595 -1.1294298746654121 +420 595 .8075218640729054 +444 595 .18941071773938978 +446 595 .6028943768800155 +452 595 -.039665467816239156 +469 595 .8866546192393054 +477 595 -.7744661917624918 +480 595 1.1333960950642537 +515 595 .9480022083216948 +524 595 .20734385736090039 +532 595 .2268418391728739 +552 595 1.1197250343621221 +556 595 1.1603939157810659 +576 595 .6453710407576636 +579 595 .4933046790601559 +587 595 -1.0756393521056147 +592 595 .7797463623971839 +615 595 .07693714563727588 +628 595 -1.3095141157640149 +629 595 -.20111554770975945 +641 595 -1.1682626716536832 +660 595 -.5821859870936957 +680 595 .4534372287855554 +681 595 1.786956412407907 +688 595 .5956347613767273 +693 595 -.12121799333057125 +695 595 .1226869978982294 +707 595 .5005290407290973 +726 595 -.8931620064124771 +730 595 -.3430483842119894 +764 595 .6800355550146109 +793 595 -2.496089859193847 +807 595 1.2613482239059706 +819 595 -2.1774941709414612 +822 595 1.5450398938576706 +832 595 -.27321040420491594 +842 595 -.4176010632099904 +843 595 1.3440349760945114 +847 595 -3.242332156594423 +854 595 .9940368237044822 +861 595 2.0398722638279465 +872 595 -.608505992545036 +888 595 .886936210435666 +896 595 -.8711468499462317 +899 595 -2.7961898656248745 +909 595 -.25834376666809095 +913 595 -.03847255444533492 +929 595 -1.0393652805480509 +934 595 -.24416168975351502 +948 595 1.1433124654871567 +950 595 .04783406041841495 +965 595 -.6594734888037951 +979 595 .005539568620971352 +985 595 -1.0009028157843116 +30 596 -1.4346033747483704 +49 596 1.3664747548876541 +65 596 1.9528993094533253 +81 596 .3429903068163026 +83 596 .23274540848070985 +124 596 -.11163334353963175 +129 596 -.35758234120193333 +130 596 .1157412922756869 +133 596 1.0952673909491748 +155 596 .13023919656008773 +171 596 .6309672950368984 +172 596 1.6648117847180384 +174 596 -.30114734865112147 +178 596 .16430985931708852 +181 596 -2.0698759848388986 +185 596 -.03557448622834239 +211 596 -.8348699436305439 +216 596 .9914209057415875 +222 596 .1400769832923378 +232 596 -.1489547390954033 +235 596 .003057597933059819 +259 596 -.5309667375028404 +308 596 .19654392242911123 +312 596 -.8154540680204794 +313 596 -.28802777606817914 +319 596 .2907084742049575 +320 596 .7102988657515845 +326 596 .0796356623561478 +334 596 1.2314442294124046 +340 596 .20786874747406814 +346 596 .08376285873122288 +355 596 -.12108192620597155 +373 596 2.076333500307215 +375 596 -.16054570676536628 +379 596 -.30754431374763375 +386 596 -.10718272301597631 +392 596 2.320587934262656 +394 596 -.30575348155796495 +401 596 -2.397406473175542 +411 596 -1.3236268943294374 +418 596 -.7775339433419934 +444 596 -.9270707077237439 +453 596 -1.2666581022474421 +456 596 -.24995783188456916 +481 596 -1.975819553432752 +487 596 1.7206271517855614 +504 596 -1.0476503061438427 +508 596 -1.189840280345222 +520 596 1.8933511884961056 +540 596 .22380233686310802 +549 596 -.6157972192734013 +552 596 -.3925507209781331 +566 596 .0003400584221923686 +567 596 .06296554739029708 +580 596 -.2896442519657669 +596 596 -.030970449793412014 +597 596 1.4559910189232843 +599 596 2.7193944604665083 +641 596 -.6508103605123093 +644 596 .2728399205612598 +649 596 -.44511121166611195 +680 596 .9820296858047673 +688 596 .1111782973792964 +693 596 -.2320156596556403 +707 596 -.5369261226366296 +740 596 -2.2674418300658177 +741 596 .15187783460068852 +742 596 1.6040014571079322 +749 596 -.23033645975196235 +753 596 .7657573851071839 +763 596 -1.0255478838700474 +764 596 .9300794427375481 +768 596 .5873225036780192 +774 596 .43434046874166066 +778 596 1.214931403117824 +802 596 1.821683972276901 +821 596 -.28143115158628873 +855 596 1.1697534428220675 +864 596 -1.0465829986620856 +866 596 -.05081428077770953 +867 596 -.21765955532002956 +898 596 -2.1441811116950986 +918 596 1.3499680364138233 +928 596 .5803303150014996 +944 596 -.5586069378417181 +970 596 .09875461679352529 +994 596 2.118585815501149 +996 596 -.8343222883447736 +40 597 -.04611057735813453 +50 597 .686660912572024 +51 597 -.030874100557033116 +96 597 .4099393325783987 +119 597 1.4080019181907435 +120 597 .19702904543872612 +130 597 .5215523042104662 +138 597 .750087722898791 +140 597 .28708307171990255 +142 597 .8938953277920025 +152 597 -.5119603628057336 +153 597 .7211773965015046 +155 597 .3295363894574147 +158 597 -2.340520172455226 +176 597 -.25768264644882694 +198 597 -.7784024274076515 +199 597 -.20451437573380646 +200 597 .16699956308689098 +213 597 .45588458712818647 +221 597 -.6841306362462454 +225 597 2.0552116207548363 +240 597 1.291494819827088 +245 597 .9040297545628375 +254 597 -.2887180034294398 +262 597 -.9665649163830713 +271 597 -1.3118875526226166 +391 597 -.4349704653077639 +414 597 -.5798883839747611 +418 597 -2.5574923327166017 +482 597 -.7997785003477852 +484 597 -1.572144545203875 +501 597 .6727973069451175 +502 597 -1.6699628743438713 +536 597 -.9718702094226116 +548 597 1.2905685663215773 +555 597 1.9565646065264441 +572 597 1.0640818806793568 +615 597 -.30117852762574615 +643 597 -.9229303170240368 +645 597 .9913699971149621 +656 597 -1.2808662157098114 +659 597 .15396848693354231 +668 597 1.9460081102432527 +678 597 1.2398797472971743 +693 597 .9883722809667003 +694 597 -.32600081497735295 +697 597 1.8147957288068728 +699 597 -.31459643200605264 +709 597 .8581356127206428 +713 597 .6097173435914539 +721 597 -.12055589674922759 +723 597 -.5708599020647255 +760 597 1.392356786346585 +778 597 -1.2488901376046728 +779 597 1.6296918501080369 +786 597 .07092369960357428 +811 597 .9719223336585554 +842 597 -.7250285217291987 +844 597 2.145894006154091 +849 597 1.505672730221026 +852 597 -1.6086654327517633 +854 597 .5678433590534042 +876 597 -1.137232752830694 +888 597 -1.5861384611399378 +894 597 -2.3977608750574326 +907 597 -.8330420383400283 +908 597 .2876762328915094 +912 597 -.7201163932025478 +914 597 -.24826121038774956 +916 597 -.1644044655412066 +918 597 1.154666602170075 +930 597 .3649318360361436 +936 597 -1.0625281699170974 +942 597 -.21543486875460874 +945 597 .02042635379214272 +960 597 -.1628087134565765 +974 597 1.2822513927720744 +7 598 1.3738753399103503 +14 598 .35983476204096077 +17 598 .9855710830695827 +24 598 -.691737365035871 +28 598 -.6860055612439405 +32 598 .45281506698195984 +38 598 .1997468124829023 +62 598 -.1769754452854782 +80 598 .5709128894590588 +88 598 -.37975163355080227 +90 598 -.2385645165725312 +95 598 -.46502925733144684 +101 598 .6374510331668547 +115 598 -.522371627002208 +116 598 -1.3369841079324356 +125 598 -.8882320821528852 +144 598 .13401651533168363 +152 598 1.2116887730077541 +159 598 -.7048245307715866 +160 598 -.5321894054429728 +162 598 1.1748184651133446 +190 598 -.43153188782035506 +192 598 .3962652603107524 +199 598 -.5018374983251941 +204 598 .3178523203103928 +213 598 .11222567836098851 +220 598 -.11432176638263836 +224 598 .16023555711789528 +241 598 .06859510636410857 +262 598 .4793429031192735 +274 598 -.28280388083158303 +288 598 .21024945935444114 +293 598 -.04220864259380766 +311 598 -.7486540086778135 +339 598 -.12744291758270135 +345 598 .1523818879092671 +363 598 .9733472172182058 +365 598 .0045341095952430716 +380 598 .2167191926880243 +400 598 .19356583039786734 +418 598 .5643964194540079 +420 598 .139318634468641 +436 598 -.793247543331423 +448 598 .11256164663819733 +452 598 -.3495862930452761 +457 598 .24070624972181712 +462 598 .19342251546164385 +463 598 .30685548186246153 +470 598 -.32963041199935394 +475 598 -.12635674109017095 +486 598 -.12448442368353455 +491 598 .027955347404450673 +496 598 .09083334224080386 +498 598 .5360694099740781 +508 598 .31585103467838693 +523 598 .13325307534928035 +538 598 .14050889027151672 +563 598 -.03856425594697955 +569 598 -.7075914618522909 +572 598 -.6264850601671968 +573 598 -.4603042979323975 +605 598 1.163617898978542 +618 598 -.7913992453036487 +620 598 -.570219007322693 +646 598 .663512389653611 +651 598 -.9565707764024063 +660 598 .9149129870081242 +668 598 -.6366177194291844 +684 598 -.4965829423976754 +687 598 -.3343716309388536 +699 598 -.35852900390403225 +702 598 .0051408931219499715 +719 598 .25606478800508387 +720 598 -.5735988742922081 +739 598 .6790380062937033 +753 598 .7307590596929188 +754 598 -.09207572642395365 +755 598 .2606695589742235 +764 598 -.3711067630261445 +765 598 .7194400388668949 +799 598 .8822756971554058 +801 598 -.03962223460842141 +806 598 -.7728175836766081 +818 598 .06255163059704248 +839 598 -.6625221198675254 +848 598 -.1936718263529522 +881 598 .750586654883842 +885 598 -1.2680004123302164 +902 598 .3265443297297499 +907 598 .9945792336416818 +918 598 -.16691336454406225 +922 598 .18732351890243143 +934 598 -.8222732846169349 +945 598 -1.1088024480675496 +964 598 -.6742461705959804 +968 598 -.05082997536948744 +981 598 .27532336197192997 +2 599 .1509447893367078 +6 599 -1.826052758667859 +11 599 .3326415657795278 +21 599 -.2018116754177009 +36 599 -.35067193040933864 +41 599 -.8836019833857768 +47 599 .38776079555568954 +51 599 -.30788285544185967 +58 599 1.325984828206714 +69 599 -.19109401498251252 +93 599 -.41191769484319823 +95 599 -.27906346453858444 +112 599 .2484679349057815 +117 599 -1.3958044147136925 +122 599 1.0244126216038096 +127 599 -.5164574347792135 +129 599 1.7607551508930612 +143 599 -.4078699667519827 +146 599 -.003943072961778454 +163 599 .5346824186691261 +180 599 -.621757022552589 +187 599 1.0456820558321516 +196 599 -1.1717718086541438 +235 599 .6418965615076956 +240 599 2.1789892042037917 +245 599 -.92289249792802 +248 599 .15298536118428246 +250 599 -1.3398943728753747 +251 599 -.04526181715152349 +254 599 -.8414815339081605 +269 599 .2023814693880649 +271 599 1.8262880474377694 +281 599 .04058735926584086 +311 599 .796879499464187 +316 599 -1.8652834320100526 +345 599 .03662698711170523 +355 599 .6174924542786898 +358 599 .2901853195127926 +362 599 .8621774312026408 +363 599 -.4054724840170174 +366 599 1.1035835694515432 +371 599 1.221982650766427 +386 599 -1.0171379566013399 +400 599 1.4308807169221331 +411 599 -.5232405631825263 +429 599 -.3053869548716058 +432 599 1.0170601441019953 +435 599 1.5554431781109999 +444 599 -1.148168379788134 +446 599 .3661767821411824 +456 599 -.7987380892011811 +464 599 1.1238943929600855 +467 599 .033248344785156536 +468 599 .6838838346876993 +471 599 .5548425470052281 +476 599 1.358338453411614 +483 599 2.0781727863868484 +505 599 .5613239259602698 +521 599 -.7014689298255414 +525 599 -.9809621637595104 +528 599 .7043839256038865 +545 599 -.9525565744266777 +550 599 -.8215425163395419 +557 599 -.3070863201201472 +564 599 1.603644493215391 +585 599 -.08085405830790729 +587 599 .2694368264083809 +597 599 .4612352180763984 +600 599 .508953109298292 +604 599 .14431382880210797 +645 599 -1.234128665628195 +654 599 .3780002225219217 +661 599 -1.6055291149945738 +664 599 -1.443283969637366 +674 599 1.6282181870245447 +680 599 .1156807724648593 +686 599 .023013840939396693 +694 599 1.3459882139442407 +703 599 1.0229018382530646 +712 599 1.2244617044631079 +717 599 1.3451629291598393 +722 599 -1.2326239729545048 +738 599 .22603525284418943 +743 599 .1337351240707378 +746 599 .7536174055420818 +760 599 1.4910092033295945 +767 599 1.2726150073446625 +770 599 -.26581931370790574 +781 599 -.08507663315329815 +783 599 -1.1581258534869057 +795 599 -.7285704110444013 +804 599 .0697127103699028 +811 599 .5790149139942862 +819 599 -.15526234225391078 +830 599 -.44429905755636007 +833 599 .03328715495798795 +835 599 -.9207318511871997 +837 599 -1.8125104550074789 +838 599 .2834652046989128 +846 599 .789398514947792 +872 599 -.531047427605182 +877 599 -2.0164280862378523 +882 599 -.24781790071403886 +892 599 .8188684922154018 +898 599 -1.3293276511111873 +901 599 -.49487613417890075 +914 599 -.005134893817404909 +922 599 -.2934712596276584 +924 599 1.1508796205590026 +927 599 -.9621438657810665 +930 599 1.2750211407694643 +931 599 .659973805585278 +934 599 .4789218285993756 +991 599 .9467463549281487 +992 599 -.13393983634970896 +995 599 2.5120935089011835 +1 600 .3045109850392858 +21 600 1.235573771874392 +25 600 2.5854701401566516 +40 600 .49212755691049104 +41 600 -.20413504418931933 +52 600 -2.410436053144531 +74 600 -.6254830560579805 +87 600 3.010607151369466 +89 600 -1.6861737053515904 +96 600 -1.6913025942633924 +120 600 -.22420901526063605 +121 600 -1.272228942056231 +130 600 -.8006918083896559 +140 600 3.6232143172328333 +166 600 3.094519894228586 +169 600 -1.3388364522161647 +170 600 -2.7396249097499212 +171 600 .36682496001797066 +179 600 -1.4459757748329716 +186 600 2.0239298654654228 +188 600 -.9067814341357723 +201 600 1.3614638937882133 +203 600 .27157841888072154 +205 600 -.6737316802150988 +208 600 .7708536290621933 +223 600 -.6023491891098889 +252 600 1.1346455199489793 +256 600 .5866851715632786 +266 600 1.4150493766100736 +277 600 2.232632857175202 +304 600 1.2161450329704122 +308 600 -1.1823855790793385 +314 600 2.294082758722467 +325 600 -3.282103118531066 +362 600 2.182838334265692 +364 600 -.22459186567075373 +365 600 -1.9986290975554748 +376 600 -.31731724643029874 +391 600 -2.8818366581849952 +403 600 1.933057906098111 +404 600 .18315854366790152 +411 600 -2.7370232430481125 +421 600 2.0950060584932224 +441 600 2.4889158790082626 +460 600 .6634188805697967 +463 600 -.6593319448843152 +467 600 -.9619465647487291 +486 600 -.393431757232101 +487 600 -1.3372325177221016 +491 600 -.8708988659529433 +492 600 .5937922061190439 +501 600 -.049733045045321965 +531 600 2.7150597873856253 +542 600 .3122092447423519 +559 600 -.5241330236962224 +561 600 1.6983515732979362 +589 600 .10042840546994716 +590 600 .8903871762957526 +612 600 -.027171167605018726 +622 600 -.7785061620421417 +624 600 .8840780776889381 +644 600 1.651054815710657 +645 600 -1.4306932346182115 +657 600 1.6636646603803473 +666 600 .7723928752224216 +675 600 -3.5601273114882233 +687 600 -.3721276415740728 +690 600 .9645047761101841 +696 600 4.536810782624131 +708 600 -1.4347472301221231 +720 600 .8662699366093858 +731 600 .9068190564140972 +732 600 1.5733519930627022 +771 600 1.7817277744443432 +776 600 .3019180623037609 +777 600 -.28658745522210716 +783 600 -1.5240357048200894 +792 600 1.5020127677372859 +817 600 -.4122709631753029 +830 600 -.8004862254146874 +831 600 -1.6417828377630974 +837 600 -.6153401607962334 +841 600 2.4010328442569753 +843 600 1.1302050730669475 +847 600 .025496931252167065 +848 600 2.899108251663709 +858 600 .5888754962116595 +870 600 -2.1507874943591068 +871 600 -.3858882466956608 +883 600 1.824370496538685 +900 600 .832514659836626 +911 600 -2.100558500335389 +912 600 .992473976348506 +923 600 -.3476554467267095 +933 600 .9325220305800755 +939 600 -.06318881594528403 +950 600 2.218647254343631 +951 600 1.756160963151566 +971 600 -.5821847433501184 +973 600 1.4777782154828862 +976 600 1.8416732836397356 +977 600 -1.1346933270239474 +979 600 -.9525971961201697 +994 600 1.0745155205938233 +999 600 2.9268992741193998 +1000 600 -.2982208332512062 +13 601 .3661831854606289 +22 601 -.16004350324996142 +30 601 -.39634811892918964 +59 601 1.0981222686186507 +74 601 -1.3913940506371434 +75 601 .5210188103080811 +103 601 -1.0183267714927322 +110 601 .5449674957883878 +114 601 -.24589767985583405 +119 601 -.04677880663296602 +125 601 1.2136908152584114 +131 601 .18275763466880807 +134 601 -.21951551792227852 +138 601 -.3487168921628407 +146 601 .1630744385868244 +155 601 -.008764917180709552 +160 601 .6811756590891079 +171 601 .6741360975949309 +184 601 .2469859230510963 +192 601 -.31375344255668136 +194 601 .8269257179797314 +195 601 .1949993727993814 +219 601 .021774946866327333 +229 601 .7294924559271718 +235 601 .008658493515058888 +242 601 .24285508520759214 +249 601 .22333420800555231 +253 601 -.7177348353123751 +265 601 -1.5178711276850225 +271 601 .7096112938181328 +274 601 -.11716230986498338 +282 601 -1.287392487446409 +308 601 .5042778282485023 +321 601 .5538541663091142 +331 601 .0958820333479441 +333 601 .4609293052130306 +337 601 -.06582273285167387 +338 601 .6640152267605 +341 601 -.16047735124811918 +343 601 -.09407912516549902 +359 601 -.49329700877124344 +362 601 .18903032701625477 +395 601 -.704556426368563 +398 601 .16357124736725195 +402 601 -1.0006216041862432 +405 601 -1.1051631642245274 +411 601 -.7006066194315181 +415 601 .6284406856719297 +425 601 .4977906722755929 +428 601 .30201290149907756 +438 601 .07447424206749531 +449 601 -.4528442688300337 +455 601 -.403798793603188 +464 601 1.925786851377658 +474 601 .05306089972994402 +491 601 -.10141994389951292 +495 601 .37575729509042144 +496 601 -.3826122669001414 +516 601 -1.1221620997547843 +540 601 .2575160867974043 +550 601 -.302479052399136 +551 601 .9185624732778183 +552 601 -.5085023795985577 +553 601 .5732895974539634 +564 601 1.229509546414272 +575 601 -1.215555954935709 +578 601 -.025676666206562185 +579 601 .4906942509290843 +583 601 -1.0512472603087877 +592 601 -.42304539643217304 +593 601 -.5319310528629939 +626 601 .2734677281833835 +646 601 -.6917531265350818 +658 601 .7003269080537337 +678 601 -.09991238080105641 +708 601 -1.303139138523602 +709 601 -.24644624698897027 +720 601 .2464698948985965 +735 601 .42710425476708275 +738 601 .6345791098012542 +739 601 -.6470599057841776 +740 601 -1.3484467775700815 +757 601 .15898190221562056 +759 601 -.34181126926126054 +767 601 -.9469146409045828 +771 601 -.792760188104788 +772 601 -.032934067240285025 +773 601 -.17030260805384115 +780 601 -.4950756519208199 +792 601 -.23475003272816636 +802 601 1.0206061253880683 +809 601 .2158043106062093 +811 601 .03671118488286529 +813 601 -2.2544215154243212 +820 601 .08709127355166141 +825 601 1.3815400063058652 +828 601 -1.9691554094315016 +879 601 -.1727157027439046 +894 601 -.9541985673008277 +906 601 -.19814417317223082 +908 601 .24121588509684339 +911 601 -1.3971435411042934 +913 601 .875561570057027 +919 601 .3522439926297777 +920 601 .5181539973070599 +968 601 1.001361144287756 +982 601 -.32549489582273444 +991 601 .4377398848809314 +993 601 -1.0021743610264995 +999 601 -.5220656424469026 +38 602 -.9017592555984081 +40 602 -.32206956393693503 +41 602 .015899797258244794 +42 602 -.14619794103253894 +60 602 -.5670124711054322 +63 602 .9905072912528623 +73 602 -1.0144318589819556 +81 602 -.6574285903171743 +82 602 1.436949302518735 +110 602 -.17247149302889533 +129 602 -1.1805546893532342 +140 602 -.5616200599088997 +144 602 1.0937675849315334 +148 602 -.6426742110999977 +165 602 -.9550854758482692 +177 602 .004222594695503817 +180 602 .5637066761919198 +183 602 -1.5821347166020117 +205 602 -.81522695405963 +212 602 -.9146470265353362 +226 602 .594022465412175 +234 602 -1.0630967393703947 +240 602 -.05552242690266243 +244 602 -.49048129236378113 +254 602 1.0283489698776547 +264 602 -.5304928583916171 +279 602 .5582778273012485 +280 602 -1.2753310142542575 +290 602 -.11852817594077888 +295 602 .8906630629017718 +303 602 -.46467831507758 +325 602 -.4699638670722574 +327 602 -.38516050786218614 +333 602 -.10504698540189464 +342 602 .8943112927767426 +360 602 -.4934119091167302 +371 602 -.5412449298898313 +377 602 -.07511338403897486 +379 602 -.19532814240851917 +380 602 -.05819001454954335 +389 602 .3269863373794274 +411 602 1.3060846770882197 +421 602 -.6405581687705486 +437 602 -.4642362777970801 +447 602 -1.1606316502115586 +452 602 -.22574308744196656 +476 602 1.084057646755842 +492 602 1.4072870404693014 +495 602 .37340461562773347 +511 602 1.1122199847355636 +513 602 -.1355563516047753 +528 602 -.1459353674315324 +537 602 -1.1303890408364259 +538 602 .5672492844659415 +542 602 .5332364761351779 +552 602 -.4026630492654182 +609 602 .05771897096054937 +613 602 1.2975489345553053 +614 602 -.749216209996001 +630 602 -.6889367576909748 +642 602 .4756960282206201 +647 602 .44896885431873196 +658 602 -.07186216927551786 +659 602 -.306839816693969 +667 602 -.6770338893148393 +669 602 .7225453803910024 +673 602 .34947019357151093 +683 602 -.5157315883817958 +687 602 -.8732778420211952 +695 602 .23343654776167266 +709 602 .3740989037722337 +710 602 -1.0728976271466983 +715 602 -.2315883513861961 +716 602 1.9267139217324531 +722 602 1.806815074835287 +735 602 .21978678973896662 +747 602 -.710925343020623 +756 602 .8312407029280795 +762 602 .03898682219864828 +798 602 -.13713429700920887 +805 602 -.2853674779887637 +811 602 -1.702465926059944 +817 602 1.1706066862898554 +821 602 .5065838920581692 +824 602 -.25383894928651446 +826 602 -1.564810314458117 +830 602 .9138009617424241 +835 602 .9034244345806415 +850 602 .4308841158475852 +891 602 -1.109757069590696 +908 602 -.10681122109232136 +933 602 1.036059876278367 +937 602 .5765357853002574 +944 602 .2595904425689488 +948 602 .5414404941569941 +966 602 -.14209617554086174 +977 602 -.8264887066317623 +991 602 -.3790720828251067 +6 603 .8655638825153722 +10 603 1.9806463590191372 +11 603 -.5566724395467032 +31 603 -.7047959818100469 +35 603 -.019175471556979864 +37 603 -1.0453148992098862 +102 603 -1.392188420699614 +104 603 .22839525904447994 +165 603 .4367305723165778 +170 603 -.77292398093675 +176 603 .5287037150048255 +177 603 1.4106691967105236 +188 603 -1.94579511643291 +198 603 -1.3915227907023715 +208 603 .3185827620455289 +217 603 -.135422197566019 +223 603 -.5356385659216356 +227 603 1.785111310197229 +243 603 -.834833993840687 +266 603 1.146985187156551 +299 603 .8438762749437917 +300 603 -.40729914113298626 +309 603 -.463919418592244 +312 603 2.215522438435888 +319 603 .39615292453370654 +333 603 .19502042092020244 +346 603 -.14438018212969675 +347 603 -.5382008739415958 +354 603 -.5013556273801392 +360 603 .28511944070898065 +372 603 -.21476133077599013 +375 603 1.3518679468340802 +376 603 -.3224483514940119 +378 603 -1.146964184284202 +382 603 .16098262307397926 +386 603 2.2929436614346375 +397 603 -.23728662284407182 +407 603 1.1527039530044414 +412 603 -.40450765017293955 +413 603 -2.469951704847311 +422 603 .036860884355958023 +426 603 .6738881953037914 +428 603 1.076630400120219 +429 603 -.07844716651603904 +432 603 .5967266502415628 +443 603 -1.0998652962172883 +451 603 .274286778697719 +458 603 .1571404944324475 +483 603 -.6704695839850037 +489 603 .06920505357126076 +501 603 1.4798910344504277 +511 603 .4159650360902498 +518 603 -.08431638068062278 +530 603 -.23471618070401984 +537 603 -2.1030716442655115 +538 603 1.167625639149127 +539 603 -.3122697057597757 +557 603 2.256489645193693 +563 603 -.20826547417121688 +564 603 .3086070159955074 +600 603 -1.8579983292165327 +604 603 -.008485475200082498 +607 603 .007740833607328024 +608 603 -.12041603225066655 +634 603 1.8935599314130187 +646 603 .7074406933035672 +647 603 -.13784785932774435 +648 603 -.611356833618192 +658 603 -1.6051847635174155 +665 603 -.156621564679929 +671 603 -.46511023235670906 +678 603 .7614536324726191 +684 603 -1.1003188117515679 +700 603 -1.02992250154777 +709 603 .7698479387825886 +718 603 -.7429037954556096 +720 603 -.8699969487323362 +722 603 -.8314964431927367 +730 603 .5300537629364669 +759 603 .1775854090766819 +767 603 -.148348553382146 +773 603 1.0140638897051966 +786 603 1.9557632870776598 +802 603 .583203120971028 +816 603 -1.114120890882904 +827 603 1.598841266014587 +834 603 -.04092785233674337 +836 603 -.3372445638738579 +838 603 -1.0344608554011552 +846 603 -.22681783807945005 +856 603 -.33255564850003805 +860 603 1.2455953865118663 +863 603 -1.5985661153401982 +875 603 -.021730269694545584 +876 603 -.8876181868406836 +886 603 -1.5344456012208487 +899 603 .8830887422771877 +911 603 1.5244577589188724 +913 603 -.6774805084565323 +914 603 .07095481437541244 +919 603 1.5156797721935635 +930 603 -.4428253257222324 +935 603 -2.8174999058813057 +940 603 -.9477875768219315 +965 603 .5469837767415293 +969 603 1.5419081966473505 +979 603 -.8360168503568488 +9 604 -.15508397570584115 +11 604 -.0711835042668994 +24 604 .7181352531783365 +35 604 1.1928390914335052 +41 604 -.9874662877678052 +55 604 -.7742962311259012 +71 604 .3931962450701831 +74 604 .5519156019464883 +106 604 -.3014786035782744 +110 604 .7065209896301179 +112 604 -.597688823153652 +138 604 2.6876485616434413 +140 604 .9220758362871513 +153 604 1.2159763626370623 +161 604 .925732010113223 +177 604 .8665752154822165 +214 604 -.8107168171651018 +217 604 .5559901692797403 +222 604 -.7423674299462903 +234 604 .5087873044927074 +241 604 .1661021271122382 +244 604 .12805733608715078 +255 604 -.4419503552011819 +270 604 -.7479139932933495 +291 604 .33225075311027774 +295 604 1.0405111607708883 +301 604 -.6733108249175318 +327 604 -.2899621817632124 +339 604 1.9789054423903638 +366 604 -.2503686381056783 +368 604 .9833160238169893 +369 604 1.323710095012118 +370 604 .8687038715940918 +380 604 .21321132548789362 +387 604 .17316402306830989 +417 604 -1.3994012353600256 +418 604 -.6202982448641798 +454 604 -.3690307480665771 +456 604 .6665079484691682 +459 604 -.5253844847527618 +488 604 1.5375891071767551 +490 604 2.428686854634802 +500 604 -1.0704531008734075 +517 604 .8254437787013115 +525 604 .3322453586069749 +526 604 .8631562267518933 +528 604 -.6625130264894709 +532 604 -.3167665872630672 +536 604 .7628602116546761 +543 604 -.41224121572115635 +586 604 -.24267619712814542 +593 604 .5565173270519479 +597 604 -1.3305409002885922 +601 604 -.5833847829258343 +604 604 -1.059965331603091 +611 604 .6627499115924371 +621 604 -1.6656676037457774 +627 604 -.9912409062636628 +631 604 -.16326752717171616 +641 604 .6176544052806293 +651 604 -.16897983459562438 +682 604 1.348738186633108 +713 604 1.1235685611449109 +720 604 .505222737314253 +725 604 .8519740056596196 +728 604 2.085581935945211 +729 604 .18126735940740127 +731 604 .8413814330253535 +748 604 -1.4534504353751934 +750 604 -.9533688493139405 +752 604 -.9154080785512444 +758 604 -.1865189225520391 +761 604 1.0822980393548034 +765 604 -.30823185321883395 +779 604 -.5963299907128405 +781 604 -1.6708354600676278 +787 604 1.9014649367826133 +791 604 -.8680294593160648 +821 604 .3130479365423813 +822 604 -1.4281879789524672 +823 604 1.8379507532906394 +824 604 -1.3337489122471293 +841 604 -.0422883363293976 +844 604 1.9335513226444418 +859 604 .5932126294938982 +865 604 1.5764705283743248 +877 604 -.5391780883602583 +890 604 1.8964915078608648 +905 604 .13899651225885454 +907 604 -.9884089962352338 +909 604 .531125361554963 +913 604 -.20863391194028136 +919 604 -.06081766163759462 +932 604 -1.108383187303394 +975 604 -.7049699853109105 +979 604 -.4956990398280998 +997 604 -.16190632879045178 +17 605 -.004525547182236259 +29 605 .8287809880231751 +32 605 1.2726376483017279 +40 605 .3584117305160692 +43 605 .25591728427500077 +50 605 1.3766938574357674 +58 605 .3334234303694794 +59 605 -.7890891808433325 +63 605 1.2183744302097415 +75 605 -.08428920347389089 +103 605 .8400279436166226 +120 605 1.2347130936239368 +129 605 -1.4335552886002807 +145 605 .1759981064533219 +146 605 1.335545228141177 +149 605 2.413811055311495 +156 605 1.1226237940170476 +159 605 -.14674346110189845 +171 605 2.001328363077104 +184 605 -.9677248815437133 +204 605 -1.2475778064483578 +217 605 .17942695499816746 +249 605 .027778643208637245 +251 605 -.38708755228972963 +270 605 1.5489740630378313 +274 605 -1.2342689656695711 +275 605 -.9173606252887102 +276 605 -2.288320843588221 +284 605 1.2888517383792923 +302 605 1.6965487444167382 +307 605 .6689403787702557 +314 605 -.8751590881682606 +356 605 .9389831999693868 +367 605 .1998584847681485 +392 605 -.7371489132223132 +403 605 -.8697781094164148 +415 605 -.4219212278995902 +428 605 -.4911822351046751 +445 605 -1.5280680867423406 +464 605 .4286181635577297 +484 605 .7687222123212093 +511 605 1.673951541645398 +513 605 .4036834775794836 +524 605 -1.2072176246398416 +528 605 -.588703309684184 +530 605 -.6655148729093561 +547 605 -1.0826715417272188 +549 605 -.9347700135769385 +554 605 1.2912130369157082 +559 605 -.516349312057963 +565 605 -.08711755313739636 +566 605 -.7109300767264892 +571 605 -.7673366683227651 +579 605 -.6827488606294037 +580 605 -1.2170373234550753 +600 605 -1.2632025338314927 +613 605 1.022933049415776 +615 605 .04389631288628092 +620 605 -.16125995337570453 +657 605 -2.1028711013399812 +669 605 .7297282351769473 +674 605 -.19691612649960455 +679 605 1.5995979409600396 +680 605 -.4892128751673196 +682 605 .7131857275068957 +686 605 1.2155205781793044 +704 605 -.5073830289703258 +708 605 1.1646678582345429 +712 605 -.056110036319482304 +722 605 2.6348167738169366 +736 605 -2.0480466821338625 +738 605 -.6246727739916942 +743 605 .5283873314748722 +746 605 -.5928912076478074 +764 605 -.4285662196535817 +767 605 -.7210164154502579 +788 605 .35129428963650755 +806 605 .543717918754087 +863 605 .0008461844547479475 +870 605 .9955725905928832 +876 605 1.0389041070322174 +877 605 2.6260428474023945 +895 605 .5035641457283084 +897 605 .5584057824066285 +898 605 2.2672099871696636 +903 605 -2.1912471357678696 +913 605 .18168153009691648 +928 605 -.5208108525554233 +940 605 1.1255244445884742 +942 605 -.4306135323564537 +950 605 -2.4541802071408503 +951 605 -.4536277822681719 +970 605 2.014293246336589 +973 605 .00904158313883574 +988 605 .7024174946099397 +989 605 -.25680546959404615 +990 605 .7916812906583472 +6 606 -1.3042374941661923 +8 606 -1.3197293496971427 +23 606 .46175756404644014 +25 606 .36565757838612 +32 606 .5672721812891728 +44 606 -1.7915420934982862 +67 606 1.0766617127374187 +75 606 1.1670992993738534 +93 606 -1.7887869814958084 +103 606 -.7953518675077949 +104 606 .6559149923748144 +113 606 1.1266335775291612 +125 606 1.5365995040263567 +150 606 -.32031261055670845 +154 606 .9052013781146363 +163 606 .3290592498686189 +184 606 -.6086987016662329 +198 606 -.6071493743872225 +199 606 -.06649053269709425 +208 606 -.6854392028411852 +223 606 -.9835664614338719 +233 606 .26419956267035993 +234 606 1.5859761912849069 +268 606 .7350920123794911 +269 606 .012216914494506445 +279 606 .4669788782477108 +281 606 .679084567663873 +310 606 .5408216194683559 +314 606 -.06529699734577006 +320 606 -1.9239067923477202 +326 606 -1.7564797599560273 +349 606 1.1610710414937107 +373 606 -1.6983182865823876 +374 606 .3431072209189939 +380 606 .24788632373746894 +382 606 .6501330299555383 +409 606 -.17135862777225244 +413 606 2.6835390599291733 +428 606 .48137352517977244 +437 606 .6481608686975333 +438 606 1.1392864818502761 +441 606 1.6286086650167602 +455 606 -1.8912240856309337 +458 606 -1.7477174995865126 +460 606 -.6988864592856961 +474 606 1.227893545098861 +545 606 -.41999172348409597 +558 606 .8956462836548774 +564 606 .2533631704955749 +572 606 -.8776674081673336 +586 606 2.155570207700958 +589 606 -.6429241872786567 +601 606 .6212194450913475 +606 606 -1.008169241041645 +624 606 .9504537194286973 +630 606 -1.2168141353484858 +633 606 .9032127170226597 +659 606 -2.099850412091313 +665 606 .6495017490692346 +668 606 -.36367318461205633 +690 606 -1.0721666882573602 +696 606 -.5050111432131561 +705 606 -.033516952064284664 +723 606 -2.796794219706997 +731 606 -.036405149204583126 +742 606 .36269384247597486 +747 606 -.7892667638893587 +756 606 1.8334959114129843 +771 606 -.6143728782912112 +778 606 -1.9424461969318318 +785 606 -.488135559528104 +790 606 -.7800887961867402 +792 606 -.46779525931344007 +797 606 1.1215361377221333 +800 606 .5581557312187492 +810 606 -.4189662166143546 +811 606 .40782585232467217 +812 606 .24945928718853413 +817 606 -.9082250772082012 +832 606 .18825026599862466 +838 606 -2.7408526856881634 +852 606 .4662694352382054 +853 606 .35888197464572763 +871 606 -1.6082193389956032 +884 606 -.721553714368062 +895 606 1.6792172865461952 +896 606 .0348942812568331 +920 606 .31681457493796 +930 606 .4387952007417967 +946 606 .2745736528196292 +977 606 1.157918599415499 +987 606 -2.2551888524035024 +996 606 -1.496009576825864 +1000 606 .7288651335914889 +3 607 -2.0206398060557373 +6 607 .9172083633868059 +25 607 -1.8660880452568354 +43 607 -1.0031333534300746 +57 607 .5932972712602492 +64 607 -.10082404012959541 +86 607 1.0270282700241402 +119 607 -1.5574422774362386 +138 607 -.027699217958666034 +146 607 2.204739177846506 +147 607 1.186790497520231 +151 607 1.147937681681121 +158 607 -1.4872391158507412 +167 607 -.2878788292807399 +188 607 -2.2467244965996147 +194 607 -1.2543455425824248 +199 607 -1.309505086439624 +206 607 -1.1871399590287646 +221 607 -.9188969271818863 +241 607 -.9827153907599859 +247 607 -1.5157891135331218 +252 607 -1.185387112795109 +266 607 -1.8215330751560783 +268 607 -.5219513963166525 +274 607 -.7674137491004005 +280 607 -.7537434585297582 +288 607 .012868127621551852 +307 607 -.08706456930883485 +315 607 .6872890359383057 +316 607 -.28354583579526244 +321 607 1.3499112251351062 +323 607 -.5113065441510433 +329 607 .31093887048925417 +335 607 .9786964987197269 +347 607 -1.0382753018656943 +349 607 -2.6927934556784066 +360 607 -2.4836348982096035 +363 607 .23493488661564327 +372 607 .4133400829859474 +375 607 1.213820609003858 +378 607 -2.382999825033596 +409 607 .06913276088560415 +412 607 -.4989805116074373 +415 607 -.24873707913837043 +418 607 -.952781106578225 +451 607 .016446913055664175 +461 607 -1.6261626903639899 +466 607 -1.0976975122913935 +471 607 1.3457689635056747 +476 607 .8098231416284033 +484 607 -1.6294699537585475 +486 607 -.24750606028783864 +494 607 .8102424895641602 +495 607 .20466331214408515 +499 607 .17056455617761188 +520 607 -2.428848432654731 +528 607 -1.7558238734820824 +530 607 -.516620263121035 +553 607 -1.477440218992116 +588 607 -1.6206275506620893 +609 607 .2565415773812234 +611 607 .8340393016069352 +616 607 1.0000070480461432 +622 607 .5080019814776451 +623 607 -1.113900777698324 +624 607 -1.584546239736091 +639 607 1.0413811907837893 +644 607 -.958942991985386 +647 607 .4542547500312099 +650 607 1.7593128807123302 +655 607 2.251074896645812 +667 607 1.5818963986661907 +680 607 -1.3138812684945123 +686 607 1.3118159361509996 +697 607 1.076862267875196 +699 607 -.5690902675466418 +738 607 -.5434931198422964 +740 607 .9822008859792027 +742 607 .2624853574430328 +775 607 -.0648176008891366 +778 607 .19484068734017848 +793 607 .6034769098652403 +803 607 1.605058217305827 +814 607 -.7373720598182435 +815 607 -.04961257501835768 +835 607 -.7136253962674667 +846 607 -.21675876211360415 +857 607 -.2347801995201111 +865 607 .18080171954632032 +877 607 .7876862723462857 +882 607 -.5585957993251212 +912 607 -3.068257099502911 +914 607 1.7975388109149086 +944 607 .22412657441186332 +950 607 -.5755682247348235 +952 607 2.313762084601028 +957 607 .1708431376359083 +959 607 -.021694584855234123 +972 607 .9157790673442683 +979 607 .014317150855343075 +996 607 -.9132645998580289 +18 608 -.7492679953877501 +19 608 -.848471008201347 +24 608 .3077564349565135 +47 608 -1.762205840539831 +58 608 -.22292888018334767 +70 608 -.793540529579591 +80 608 -.7453025543978887 +83 608 -.1700259781221495 +86 608 -1.3051614555264837 +90 608 .25768043403503366 +102 608 -1.1065965378357832 +106 608 .5813308952036225 +109 608 .7075750378581777 +110 608 -1.3298174058528642 +119 608 1.1353020002850294 +140 608 .028629138049083708 +161 608 -.1552858644729635 +170 608 .16242366855373322 +178 608 -.3386912319004964 +179 608 .5734042091307286 +201 608 .9054974247743439 +205 608 -.1162537279157976 +233 608 -.6691005618724221 +234 608 -.5966031587365151 +237 608 -.2702220609094876 +238 608 .29516303275353317 +241 608 .1604395792269737 +251 608 .9600155256938632 +253 608 -.04789414446519591 +255 608 -1.4764832078277739 +260 608 -.5070059441973972 +261 608 -1.6894459522694667 +267 608 -.5324572774669045 +276 608 -.8669663677923318 +277 608 .4310299032641712 +289 608 -2.0142622482082544 +296 608 -.08793359860818656 +305 608 -.015761591970863256 +311 608 -.1788055627771885 +324 608 .6656209700362927 +348 608 -.589913212299909 +349 608 .4480247953889921 +366 608 1.2386477044333972 +370 608 .20036214967112323 +376 608 1.9342317321878448 +389 608 -1.0835913204043612 +399 608 -.40307328036344214 +404 608 -1.0861155287097048 +414 608 -.2748468052488415 +418 608 -.9925491009696715 +444 608 -.688331096457484 +446 608 .6059680340227882 +456 608 .5493166035277619 +468 608 -.5852835426185378 +478 608 -1.2262201532674828 +481 608 .8589256384337908 +497 608 -.9974701075844518 +505 608 .6150177314864023 +506 608 .16481942858393517 +515 608 -.15820180380524373 +529 608 -1.0123293108801628 +535 608 -.6176622144985171 +537 608 .05798492646323025 +550 608 1.0635841563491395 +562 608 -.5429943337712524 +596 608 -.9844982030808079 +621 608 -.5266211555582501 +631 608 -.14910637248091374 +662 608 .1806279041909432 +667 608 .7671738521780471 +669 608 -.3628337108127696 +677 608 .207332198391102 +701 608 2.2835661525147515 +726 608 .1379864764841829 +761 608 -.06919685391720304 +765 608 -.6777122908113261 +775 608 .34845665993420377 +791 608 .4424614518025759 +806 608 -.032011976994561264 +810 608 -1.5449562355311097 +821 608 -.9582628827157007 +832 608 .07995033475825439 +842 608 -.2482488905833723 +843 608 -.354852232544804 +849 608 .06272544088610121 +858 608 1.1484114245668389 +864 608 -.0200011287795914 +865 608 .7237412435027515 +870 608 .4682786701583117 +877 608 -.2570834562169157 +901 608 -.9633772544107122 +909 608 .4880443588788584 +917 608 -.9790298703754924 +928 608 1.6911764190157548 +932 608 -1.0256675934208206 +935 608 1.7345392377464437 +958 608 -.8482086844939366 +960 608 .6287827246173218 +963 608 -.771886647707861 +967 608 1.0449499713884913 +981 608 -1.3812231851099828 +23 609 1.515181916383836 +32 609 -2.2536662649399584 +47 609 .6806321599562485 +62 609 -.09987897759058029 +83 609 1.2444926450097078 +89 609 -.46885779956374746 +106 609 -1.8831903490756126 +108 609 -1.0625721954887737 +119 609 2.0221924589723264 +130 609 1.2352308337068443 +139 609 -.3933099207931387 +166 609 -.3029209900142532 +167 609 .9084580265190246 +176 609 .01622022134749119 +179 609 -.0054048566053002366 +187 609 -1.0009760644615697 +190 609 -1.6113817870872793 +207 609 .3777575747209188 +211 609 .05732916895005499 +230 609 .7765865311578586 +232 609 -.40439318960034043 +242 609 1.050813156459373 +248 609 -.6558002632980635 +264 609 .18436625111343946 +272 609 -1.6115856350423456 +279 609 -1.0411796414876895 +280 609 -.6773876864327194 +287 609 .13579495026328844 +292 609 1.0076450489152649 +294 609 -.8614211683039404 +299 609 -.22566101455892001 +306 609 .18598051689102207 +354 609 2.292135835856709 +359 609 -1.96854258398902 +362 609 .2934668406299745 +371 609 1.906429516967548 +382 609 -.36211717139513644 +383 609 -.5133108764988085 +384 609 1.3197612938686545 +392 609 .36417778589141725 +407 609 1.3076591015273267 +414 609 .0540769395968293 +423 609 .6577863120342218 +429 609 -1.6723809442916338 +437 609 .3710560645597186 +440 609 .7093082593383365 +446 609 .45948171168931956 +452 609 -.9100250883755553 +468 609 -.5204122342695052 +469 609 .4433635949312491 +531 609 .6801678376157877 +535 609 -1.2069998119978687 +547 609 -1.1707080981809885 +560 609 -.6287419879015089 +566 609 .838921373804571 +580 609 -.8010313979696372 +596 609 .9834440096990152 +632 609 .448393017718115 +637 609 1.6919630330673174 +655 609 .09848478514458728 +677 609 -1.5404874082365805 +688 609 1.2397674457696817 +696 609 1.2545753406020201 +720 609 .7267308282050072 +728 609 -.6253037037078255 +749 609 .43578123536042623 +761 609 .7986165393732069 +763 609 .7149628086848804 +804 609 .7754935663380894 +810 609 -.37931853926104525 +811 609 .7958047872530665 +816 609 .7526522008312839 +820 609 1.2720271926829947 +827 609 -.6453818310166703 +832 609 -1.2109394694571765 +839 609 -.24186825869909936 +842 609 1.113597854222466 +849 609 -1.8099035158122883 +851 609 .001120837778452649 +852 609 -1.1229207351879813 +854 609 -1.6285137430231658 +862 609 .18594344443532326 +924 609 .5672853855792175 +936 609 .3710709523534859 +943 609 -1.1873777242636256 +955 609 2.071237542764512 +959 609 -1.009715211368961 +968 609 .875502004678304 +972 609 .29315310982870324 +980 609 -1.4915956406056539 +985 609 .2361740568384623 +995 609 2.419779237812668 +997 609 .6422907741400347 +5 610 -1.374989955177199 +14 610 .3771831225426913 +29 610 1.5597606177702468 +33 610 2.6568909478718634 +35 610 .41806899700871686 +44 610 -1.6497868599282857 +56 610 -.48185503406696345 +60 610 .4400499233558589 +65 610 .195037521371773 +73 610 .8202757349115325 +82 610 .8745569597842042 +83 610 .26634146043633244 +98 610 -.8757533003761133 +106 610 -.11480604191559798 +109 610 -1.1825861647113207 +113 610 .15909739153457125 +120 610 -.6668210563273236 +126 610 -.5176651867555458 +131 610 -.8801484317001419 +143 610 -1.4946218240005515 +160 610 2.4796732189137596 +161 610 -.4501253451074015 +168 610 -.9529511390454182 +191 610 .2410493351842616 +192 610 -.870668326043143 +193 610 -1.3711693898013322 +195 610 .018566635743064566 +202 610 .06794370530987645 +227 610 2.8889268844791003 +229 610 .3838885647757218 +230 610 .5268016868996408 +232 610 .09577984413441828 +237 610 -1.9410633196739298 +257 610 1.6777877745454597 +259 610 .18323603192938603 +266 610 .17857585910504975 +293 610 .6917650591641985 +295 610 1.5081056890070619 +323 610 -.1535249557321493 +325 610 -.7916252469504798 +327 610 -.3207269607763732 +329 610 .9627813641616723 +336 610 .1983243586003629 +349 610 -1.5007207906408666 +350 610 1.483663120115431 +372 610 -.10584823947873158 +377 610 1.407300001632561 +419 610 -1.3602945654219674 +425 610 1.779387115770229 +430 610 2.0597398602468417 +449 610 -1.2432541690633454 +454 610 -.08399992750652527 +467 610 .20265831916933197 +473 610 -.4241789052729771 +477 610 2.414699057369518 +494 610 .390574033094167 +501 610 .6991664956130506 +510 610 -1.3754790942109258 +515 610 -2.074143471105343 +520 610 -.864751779746158 +523 610 .3957800469206992 +525 610 2.3227946382712843 +544 610 -.9951503676785397 +545 610 2.8202854669964545 +563 610 -1.2456232990300213 +565 610 -1.5199099337467639 +573 610 1.573190419023736 +576 610 -1.813875880704268 +587 610 1.4743354196338534 +598 610 -1.3871186966021194 +603 610 -1.664046187405241 +606 610 -.44781568046744696 +608 610 -1.124538318919065 +614 610 -1.4594889016387862 +627 610 .010255392845360367 +639 610 .35365431452029056 +644 610 -1.4454495997439658 +648 610 .10071183470703256 +653 610 -.11793325962179935 +687 610 -1.0286315497042937 +688 610 -1.0229406546503297 +689 610 -.2473751084443878 +713 610 2.43696319688448 +717 610 -1.0127799396905341 +719 610 -1.7275174054610316 +726 610 .7873485637032571 +752 610 -1.8864765563052273 +759 610 .9849236366384906 +764 610 -1.1046140649285698 +772 610 -.646273975107215 +773 610 -.8957318664234138 +775 610 -.6577295988324245 +777 610 .3432495087236715 +779 610 2.7268816401162534 +802 610 .40736630159372805 +811 610 -2.1490578256310724 +813 610 -1.7703020287776663 +816 610 -2.3541567127439995 +817 610 .2369287982440715 +866 610 .90107473001326 +884 610 -.9819024219035816 +889 610 .1345616951995247 +900 610 1.7844878273025941 +902 610 .8646998738411078 +910 610 -1.2760640199297926 +915 610 -.7976156206889093 +929 610 .967518437168997 +938 610 .3071615718259134 +953 610 -1.715196706221348 +966 610 .3428998964202522 +991 610 -1.2726954435104632 +995 610 1.2012920846893247 +1 611 -.6279992561748033 +6 611 .5025004503131629 +16 611 -.9756470066893712 +23 611 -1.2482830484432077 +29 611 -.2314981542847557 +31 611 -.5708412835188368 +36 611 -.24226066550327519 +43 611 .6870523378699471 +58 611 -.876507320974407 +72 611 .49931441216174205 +80 611 1.469643221144885 +98 611 -.13767272563499866 +113 611 1.3636585092626394 +121 611 1.287255102420047 +122 611 -.4020433616098521 +124 611 .3804117085608336 +131 611 .24837219079308281 +147 611 -.09530952723089361 +169 611 -.47496860297459553 +189 611 .19018545526573832 +201 611 -1.203630004139244 +203 611 .34325516315125215 +220 611 1.2780768126038864 +229 611 -.3507172259170614 +230 611 .3886220625105762 +240 611 -.9007949944010314 +257 611 .698272074024906 +272 611 1.1775816886552846 +277 611 1.0309882742742766 +279 611 1.2566184886814034 +280 611 -.0009699468969697062 +282 611 -.2790036573926874 +288 611 -.47879401297056284 +314 611 -1.3608614303562734 +319 611 -.5530753498328991 +342 611 .7371518916542826 +353 611 -.7799593468534978 +373 611 -.7380038046395748 +375 611 -.269430358250343 +380 611 .10957033063504097 +389 611 .15596702835149884 +390 611 -.1941345342490443 +392 611 -1.4562895761682113 +403 611 -.23610032493432534 +404 611 -.0660162879258985 +428 611 .11518006090485686 +430 611 .8340574850963594 +431 611 .4427023392529694 +442 611 -1.0323524779905005 +444 611 .46469678172026063 +456 611 1.1359863236582879 +460 611 -1.1190551263721475 +473 611 -.7904603550718332 +480 611 -.09292915805382729 +486 611 -1.3290572249936423 +498 611 .08025910250650553 +502 611 -.5522116567492478 +503 611 -1.129476332157134 +505 611 .8203749576955927 +507 611 -.09655225191527761 +509 611 .5839216809643452 +534 611 -.07114937308165373 +537 611 .5187398439309109 +547 611 .9213940806733462 +564 611 -.1486020278216621 +567 611 .08174510319727536 +576 611 -.20678106632774662 +588 611 .020787279007145637 +596 611 .08435581637940007 +598 611 -.6277939934307106 +608 611 -.31740060753539645 +609 611 -.5723605332383818 +629 611 .1700944360518362 +631 611 -.11922066241220211 +640 611 .8580098667177498 +647 611 -.3815752378069257 +651 611 .9401596873617509 +657 611 .3695832535486565 +675 611 1.0080001793231546 +680 611 -.4942112922727879 +697 611 .5269150903337532 +721 611 .7303367958803143 +736 611 -.1623665763831544 +738 611 -.5778414476737138 +743 611 -.8740606506273988 +757 611 .058037855903883495 +761 611 .22928807302606147 +765 611 -.3771513506196119 +770 611 .0615995260530601 +780 611 -.42321605083665853 +795 611 1.1037277431502897 +822 611 -.4575785396666484 +824 611 -.5073978563374815 +837 611 .3630160863207814 +843 611 -.5630182163460792 +860 611 -.5109538775714174 +864 611 -.8144020664156071 +868 611 .3290891966099785 +879 611 -.9818612859565173 +884 611 -.34021205368393387 +891 611 1.6401881490723291 +892 611 -.2074158698944248 +906 611 -.8358326376124328 +922 611 -.5433776821992735 +926 611 .8633957296108659 +927 611 .6995513450406875 +970 611 -.5050894260838301 +974 611 .02851946226934507 +979 611 -.35010239482255523 +985 611 .8316888787910641 +20 612 -.38767625929996086 +23 612 -.46463967286296654 +78 612 -.1777211548070852 +80 612 -.11810492644804586 +83 612 -.28321519704444736 +89 612 -1.3988198854642264 +93 612 1.735781190998936 +106 612 .16826424910902288 +124 612 -.623224330817886 +131 612 .4225170068008469 +138 612 .5219872278753108 +145 612 .39355984998924376 +155 612 1.5240030861233622 +158 612 .2862193795516037 +159 612 -.163336537150177 +164 612 -.03487022503939237 +208 612 1.0004539297458963 +235 612 -1.2165046778255195 +256 612 1.0068134652993774 +261 612 -1.5037414401654134 +285 612 .2798536286877423 +287 612 .9240854750582204 +292 612 -.19367004094443116 +309 612 -1.6617929678477716 +312 612 .20275877367629142 +315 612 .42623965539165454 +320 612 .22684373236279498 +321 612 -.4161132174774526 +324 612 .8975619099391783 +326 612 1.270206826906171 +332 612 -2.035475891651286 +333 612 -1.8033835475537963 +337 612 .6299274676639479 +354 612 1.8539238324741942 +359 612 .3464795196293598 +361 612 .1301140096895943 +381 612 1.1019773682140188 +385 612 -.46965524921157764 +392 612 .21391601736788393 +396 612 -.6460636268821549 +402 612 -.5373566824054609 +430 612 -1.227128052091387 +439 612 -.9291927941497116 +446 612 .06329339450633349 +452 612 .29030099384399993 +466 612 -.06543939244451594 +467 612 -.7991007140933206 +475 612 .7753615131651443 +480 612 -.495357937017994 +520 612 -.6070458165121099 +538 612 -.20108055425626817 +548 612 1.8227851520478677 +554 612 .20871517945204246 +614 612 -.24335783512378006 +616 612 -.6180435445656105 +624 612 .5944504228518768 +663 612 -.8074919369131026 +664 612 -.2558847369970657 +683 612 .45414468682547393 +689 612 .06409040144253185 +696 612 .4843645345478064 +706 612 -1.512745647724825 +712 612 -.6604439872205322 +720 612 .9223906117140129 +723 612 .17452504933622687 +750 612 .8636392131724553 +751 612 -.5679370968822537 +773 612 .210325230746433 +778 612 .07388939757265225 +820 612 -.3377896051471651 +830 612 -.008747782065104577 +871 612 1.0991273778027373 +886 612 -1.4174619964024653 +903 612 .6401494394972745 +908 612 -.43197159013863135 +912 612 2.3053033531604576 +915 612 1.4535468882784919 +920 612 -1.0339779003642802 +929 612 .4561021816246391 +932 612 -.9782984616291861 +952 612 .5408466563736168 +958 612 .2212657622082289 +985 612 .9457555927977419 +988 612 .15967995092242027 +998 612 -.4657933484021739 +1 613 -.16490102122232259 +6 613 .12892487266905547 +24 613 -1.6346574102833231 +45 613 .07443875741748175 +48 613 -.8030862481607999 +54 613 .31812063736284074 +56 613 -.340396668319643 +66 613 -.15034196927102672 +85 613 .3885259025863393 +87 613 .03025282187188645 +92 613 -.7189758568962694 +106 613 -1.3547711614776579 +121 613 -.569857565923123 +146 613 .36153026498393737 +171 613 1.6695147714783194 +176 613 -.12196968724798307 +182 613 -.6211910731118934 +186 613 -.10050560798493868 +187 613 .5018721634502866 +196 613 -1.4255251601082306 +219 613 -.4793387683670297 +223 613 .34998908395125383 +236 613 .20482084624955418 +238 613 -.35139095167829976 +239 613 .4078621697635569 +240 613 -.6300345176585211 +252 613 .6708713487661132 +261 613 1.7631428968514729 +265 613 1.2051194499577618 +268 613 .8563719727739278 +269 613 1.3045564215286276 +271 613 1.2712161688069639 +274 613 -.4772180471872381 +290 613 -.2553382263834464 +310 613 -.2265788377749146 +311 613 .15708318124225962 +321 613 -.09301476295570528 +325 613 .05380097479882312 +330 613 -1.6112227099869942 +350 613 -1.078579670836878 +370 613 -.3531229952674563 +372 613 1.477321459181927 +377 613 -.6211428396168046 +383 613 .7175862048388544 +395 613 .10505790761617699 +398 613 .5900467711804817 +402 613 -.010068335573306109 +438 613 -.4780135674754236 +442 613 .058498924548959594 +449 613 -.30296373614667904 +457 613 -.1526022897881657 +469 613 -.5797747695556027 +474 613 1.3115373164061377 +475 613 -.5722641039728587 +483 613 .2360576812065759 +488 613 -.7314852831864478 +499 613 -.4084606407924959 +502 613 1.517140748862896 +503 613 .18045494434135098 +507 613 1.0763893525634003 +510 613 .4193793077346752 +511 613 1.4427651313026704 +531 613 .13531584940215047 +534 613 .1451262618516465 +537 613 -.9346048863714349 +555 613 -1.4089910560516457 +604 613 1.4263597494605107 +611 613 .8469637273595774 +616 613 .9027222448026486 +636 613 -.29372646887373133 +646 613 .5078424305255396 +651 613 -1.1455396574587124 +661 613 1.4512982847815556 +664 613 .11830610151178682 +671 613 .9516497470949331 +674 613 .13573539760992728 +682 613 -.3230482591504571 +690 613 .7722900728397377 +699 613 -.21756466038853284 +703 613 -.38931552909429057 +708 613 1.0245954875531629 +715 613 .04227852769038345 +728 613 -.39526937176267357 +733 613 1.1476913545712646 +737 613 -.387739770817988 +749 613 1.3164686348027421 +759 613 .24052781714734242 +761 613 .012423926926534781 +784 613 .9162261761419412 +790 613 -.7926822839681934 +794 613 -1.7954710491732595 +820 613 .8834743006894825 +833 613 .0513707933886076 +839 613 -.5961753104842644 +845 613 -.8967262505733026 +859 613 -.18852472573146994 +861 613 -2.261594992244495 +873 613 .8495810918335384 +890 613 .1816299078818185 +908 613 -.3504372906862557 +910 613 .7815673597921875 +926 613 -1.935717891084217 +930 613 -.36469372652316123 +969 613 1.155299620919966 +979 613 -.2483674886943672 +989 613 -.43244922210145864 +15 614 .8727927350895429 +20 614 -.7543924646076122 +22 614 -1.595796388122662 +32 614 1.23624602289725 +34 614 -.4650217584902087 +37 614 -.31790463905952004 +39 614 .5900871731370062 +50 614 -.5092374183828877 +53 614 -1.357618460582793 +54 614 -2.3462699376416194 +59 614 .7467110102375981 +69 614 -.10247090664316541 +89 614 1.3403451057759974 +100 614 -.7910795757931384 +102 614 -1.90053043593667 +114 614 1.0642318321754962 +124 614 -1.3585458807032704 +151 614 .36131765550294476 +152 614 -1.1127889474092827 +173 614 .74963141146465 +188 614 1.151929023952927 +196 614 1.9722807631454478 +208 614 .39146797526473365 +215 614 1.0304155182489156 +227 614 -1.2825386410742876 +233 614 -2.485578499597166 +244 614 .13102035536940604 +249 614 -.7643892544082221 +256 614 1.032545783535744 +265 614 .7435933979427415 +268 614 -.41092943609637994 +277 614 -1.165221569502491 +292 614 -.9865374075141901 +300 614 .10343684535418071 +312 614 -.3629775188669679 +331 614 -.008081859219017135 +352 614 -.8043478384835285 +353 614 .050110590215873024 +360 614 -.285198954337581 +362 614 -.8829502912707058 +388 614 .19577033769828278 +389 614 -.8946680503518036 +393 614 .26752993755748844 +413 614 .2058428903263387 +424 614 .5198731339934022 +430 614 -1.5513371532212483 +439 614 .1214114433259172 +449 614 3.0225498767630783 +450 614 -.08544284417238826 +455 614 .3861319560190798 +457 614 1.8530426969748577 +458 614 1.2176953851396555 +462 614 -.13041676399156502 +473 614 -.19922312457749144 +485 614 .1929082767327801 +494 614 .17695971368932212 +524 614 1.3819212074793956 +525 614 -.4187727936421735 +530 614 -.9744899646399795 +540 614 .09668624839917239 +552 614 -.757211094544424 +555 614 .24789165143344896 +569 614 .8448919923318461 +571 614 .07590570985447055 +574 614 .5259610601891569 +586 614 -.23300109512027614 +603 614 -.8183160080860843 +608 614 .8134872563581568 +610 614 1.5393300579847509 +614 614 -.3591438802862729 +624 614 -1.0769356407126431 +628 614 -.45041848568565435 +629 614 .3011482554230135 +636 614 -.642198446531123 +656 614 -.44959534740736534 +667 614 .11141524651753887 +671 614 2.1355341535790786 +678 614 -1.4121891257859303 +698 614 -.46267113038802815 +699 614 .28650474175258694 +710 614 .5304691942010518 +717 614 -2.960282860238547 +732 614 1.269296128285467 +751 614 -.5516745021816019 +757 614 .9697568062240629 +768 614 1.4432655777737065 +781 614 .3676331238562556 +788 614 2.0584029658982725 +800 614 -.9792813481991908 +809 614 .4687510363182272 +825 614 -.4729347717269175 +830 614 .39836435532995973 +831 614 .24011722156847293 +850 614 1.2473121741914257 +856 614 -.07006970725143083 +866 614 1.540857437151013 +867 614 .09283495020109658 +871 614 1.605233494865096 +879 614 -.9516333369999668 +884 614 1.360534387139748 +894 614 -.759878858100668 +898 614 -.14518644692968036 +906 614 2.7707471514246835 +910 614 .5279797311184941 +916 614 -.24160161927443546 +917 614 -1.042433615850442 +940 614 -.5421501855943721 +952 614 -.09493350713260065 +979 614 1.7637397468455507 +4 615 -.6743777870849051 +24 615 .7652054320344077 +59 615 -2.5684129977569676 +62 615 -.20137045849943802 +69 615 -1.5836407161060069 +102 615 -.42216259316340643 +118 615 -.8189263653645573 +129 615 .8110954446090124 +142 615 .24896877014306204 +155 615 -.6191475341421204 +169 615 -1.276902749186426 +175 615 -.03676629805547449 +185 615 -.4580860075604395 +189 615 .6662022490979195 +192 615 .22626563728930998 +193 615 -1.1491096454963734 +200 615 1.240417552137537 +218 615 -1.5971168917917802 +224 615 -.6648012651074287 +244 615 1.722198000646012 +261 615 -.3567651872598875 +290 615 .4195985137531306 +303 615 -.978925438275846 +324 615 .1009977202860876 +336 615 .05418400800943249 +349 615 -.5807363068118476 +357 615 1.50564978381063 +367 615 -.6113953110218698 +369 615 1.2394450321771082 +379 615 -.6103518638851804 +400 615 1.5123330060095213 +406 615 -1.5575991500246213 +408 615 .43295237740961623 +409 615 -1.317575882323844 +421 615 .828586542558528 +422 615 -.2898644478956987 +425 615 .6161248305063732 +431 615 2.0499727485858283 +438 615 -1.1887253741412844 +446 615 1.2060447485164858 +448 615 .18449280656162156 +457 615 -2.170952957309191 +458 615 -.5030164439663672 +459 615 -.035362766279708996 +462 615 -1.804958494240728 +481 615 1.2244751367356408 +490 615 .8184740909598164 +501 615 .7451387757269567 +512 615 .7674280730517643 +525 615 -.8807402112778098 +559 615 -1.3110783235794432 +578 615 .06897487995198548 +579 615 -.38366820600086426 +606 615 .610200376196966 +607 615 -.049250564764429586 +608 615 -.333484880414023 +620 615 .7473215949638472 +625 615 1.3749012130396787 +636 615 1.663270513040751 +639 615 -.9322462181935145 +661 615 .24433686170793653 +674 615 .5045644836044711 +709 615 .9548118672864316 +715 615 .8880378960330297 +719 615 -.45011344221891625 +744 615 .10231916344865413 +787 615 .5924867724829156 +794 615 .3755142701209451 +801 615 -.7741095546240248 +824 615 -.9325416213848661 +861 615 1.1322517214007428 +872 615 1.6675158664852159 +875 615 -1.2248594488673294 +877 615 -1.8085646560954147 +884 615 -.7535406677770977 +894 615 -.005544141188888546 +901 615 .6216183517322282 +944 615 .08808380909049182 +945 615 .3429834876501909 +952 615 -.8757881090064227 +961 615 .6421456972826807 +967 615 -1.0117112365784946 +981 615 -1.0806178597989156 +991 615 -.8963862092695053 +5 616 -.41164250288089055 +18 616 1.1303999447234419 +26 616 .6658771572220392 +28 616 .7139612628690772 +29 616 .850864280617118 +30 616 -.10708002465142091 +39 616 -.6161312969581507 +55 616 .608661677627216 +58 616 -.7211485769288257 +60 616 .7057620287575105 +75 616 1.105767970224222 +105 616 -.3669669564391966 +112 616 -.4499984832177202 +115 616 .63459995582904 +117 616 .20261908726542088 +118 616 -.4554706476646854 +120 616 .329056469526096 +134 616 .08673013215412644 +165 616 -.1471100307815363 +183 616 -.3188740500178085 +186 616 .40161834243790967 +196 616 -.8572810190375904 +206 616 1.1426837954504716 +239 616 -.11138664091077694 +242 616 1.4978589751515028 +260 616 .03846273768623471 +264 616 .22345659325101488 +267 616 .3808190692956835 +275 616 -.7751177721988662 +278 616 1.3381919601852235 +282 616 .0977438088839336 +284 616 1.1346256059295354 +289 616 .4125258148312228 +354 616 .29944651088151425 +356 616 1.19352647739968 +358 616 .5382778522174225 +384 616 -.3529977828236876 +394 616 .7408863889069182 +398 616 -.19055865512349665 +399 616 1.0892760982715741 +404 616 .0765522620950221 +405 616 1.4641916671088604 +434 616 -.12306873147357916 +450 616 -.17724730855981335 +451 616 -1.1326942545145067 +471 616 -.1564463438963521 +474 616 .3737699476060117 +490 616 1.1582577204747384 +494 616 .20052842679342694 +496 616 -.6112790558025192 +510 616 -1.5676228418617335 +515 616 -.3040032939271037 +516 616 -.44545248846306074 +527 616 .24499666552657073 +535 616 -.5684420387556627 +547 616 .6232986625367841 +559 616 -1.3381015722689318 +586 616 -.24878804126150714 +599 616 .8673972198925757 +602 616 .9610391565221185 +626 616 -.13168845438606247 +634 616 2.1222788746987025 +638 616 -.6523428504602983 +652 616 .7949200364676404 +657 616 1.1370675126931535 +660 616 -.004908849909573828 +674 616 .5596854852953294 +676 616 -.7549510901206866 +691 616 -.1720842430140248 +692 616 -1.5110754375689994 +699 616 -.9298817223495285 +703 616 .4786884088270803 +713 616 -.42806248487067855 +729 616 .45618546321292786 +731 616 1.2713605292905585 +748 616 -.20381457357352278 +751 616 .3216453480913315 +769 616 .7540101464159463 +811 616 .8376990327631482 +823 616 1.793126382975499 +828 616 .9877233568956214 +843 616 -.08406730603686577 +846 616 -.017222546138356012 +873 616 -1.2732296838882853 +875 616 .06671620225510752 +880 616 -.15320618031919503 +893 616 -.44089616684087 +902 616 .9882765787400988 +913 616 -.19621538232164776 +918 616 .6370145910700494 +925 616 -1.0776851292970713 +939 616 -.4620544221003674 +948 616 -.5988443371912956 +952 616 .9266863315153469 +953 616 -1.245495257488819 +954 616 .2897303863338015 +962 616 1.0411991244192658 +984 616 1.3916138004448635 +994 616 .20558004390847112 +5 617 1.4790535306175634 +12 617 -1.0107864854350124 +17 617 1.7842759389514011 +56 617 -.3781917479140305 +77 617 1.262416478801984 +81 617 -.4930888502409718 +93 617 .3444900527429346 +102 617 .6103023987861719 +110 617 1.3527250743640762 +120 617 -.9494909158192045 +130 617 .19089137773294915 +137 617 -.4009557596301617 +139 617 .08387569484428664 +143 617 -.7641379021878699 +149 617 .011393254489769578 +160 617 -2.0514074976303913 +161 617 1.3526022453513322 +180 617 -.1820721434800241 +186 617 .8118747907955847 +204 617 .1893259442349708 +207 617 .5597805290524397 +217 617 .8944895837767637 +219 617 -.49679423188983024 +220 617 -1.2998288203111021 +225 617 .779523635469746 +230 617 -.00469205612305941 +231 617 -.8602645703824122 +246 617 1.3647585204767576 +249 617 -.15252082606967965 +256 617 -.3840645439061156 +257 617 -1.473886592901704 +259 617 -.9207141258741756 +260 617 -.5970285553732457 +266 617 1.038375794547368 +294 617 .06522147931256567 +302 617 1.0918104054308724 +312 617 .7282880335870173 +326 617 .8088156565878388 +336 617 .6709586066171507 +344 617 -.3498112951769477 +351 617 1.5829025546728712 +358 617 .6427975164500366 +383 617 -.7379948103312405 +415 617 -.6249528497768876 +438 617 -.20002419091338022 +444 617 -.013916606881854332 +447 617 1.290908601760462 +455 617 -.7786604666032194 +456 617 -1.1117796507329538 +464 617 -.7854482851719597 +473 617 1.4446915183216074 +482 617 -.8702420728751116 +483 617 .9366865288638571 +484 617 -1.652693976994853 +498 617 .9692350973541041 +501 617 -.5989509697368923 +515 617 -.32995738906757804 +521 617 .23931375409728337 +544 617 .07310688634254907 +556 617 1.539415444908083 +559 617 .4149791760883952 +564 617 -.22830312513107048 +569 617 -.7403156520399743 +587 617 -.06528319807899982 +594 617 1.454044368496096 +599 617 2.4469572941850437 +622 617 .48155294177573443 +627 617 -.2181503054545505 +635 617 -1.299787099083859 +638 617 .02170580582797269 +647 617 .5714419412845542 +656 617 .36467931793683483 +662 617 -.3134337323701851 +669 617 .22736611573293813 +677 617 -.1131712535024301 +683 617 .7156584600007674 +691 617 .5436618596850764 +735 617 .31356550483550044 +744 617 .02725540634388718 +748 617 -.06970569015269565 +749 617 .6994434328713574 +761 617 -.6552704151057701 +769 617 1.1809459909379556 +771 617 .6790183010386809 +772 617 1.7450486606015334 +784 617 .5641377890719302 +796 617 1.7812650804894654 +806 617 -.2580308377030485 +814 617 -.20799803337561112 +818 617 .9960864164649696 +825 617 -.41123130922613654 +830 617 -.17414935406926393 +831 617 -1.6375906590916653 +835 617 .7386437251958085 +855 617 .39271721064220344 +873 617 -1.0014784850717162 +886 617 -.7515793103965862 +949 617 -.842833567765614 +958 617 -.5621251490173776 +964 617 -.35741555565101013 +983 617 1.7861677007286003 +987 617 .759790175305964 +988 617 -.49853228174453695 +18 618 -1.1093866112871058 +25 618 -1.451360676930507 +60 618 .05759243362711869 +94 618 .2800710700605233 +108 618 -.6277950851357865 +110 618 -1.4022665927700861 +113 618 .307510344138539 +126 618 .19343813706570534 +131 618 -.038402999421588355 +134 618 .5051157161185305 +139 618 .7612130052699717 +154 618 -.42434041111393783 +162 618 .2667295544703216 +168 618 .4926319676937134 +176 618 -.32839653350911846 +177 618 .14896546446453188 +183 618 -.9112865633434631 +184 618 .2814321164200764 +205 618 .15145216003475964 +218 618 .888689522479581 +235 618 -.15514214609144372 +265 618 -.2712981777339337 +274 618 -.15897551231008192 +278 618 -.6440391825478783 +288 618 .008160891249184926 +301 618 .1285006776920557 +330 618 .8215680952075914 +349 618 .15429807437614557 +361 618 .12190619608365692 +363 618 .6689230782886824 +373 618 1.4230670596750035 +395 618 -.6505724864849393 +425 618 .3959332994027034 +427 618 .7099701103056595 +440 618 .9430517449986784 +443 618 -.027490499627329648 +468 618 .17123850274005442 +477 618 -.7526624079150268 +489 618 .11083304249001616 +491 618 .8219746435726841 +497 618 -.9086713580451428 +499 618 -.6278525486042839 +505 618 -.2644193785457065 +514 618 1.2476485101510135 +519 618 -.12544501227071597 +528 618 -.24845703876525443 +529 618 -.3300210101426043 +561 618 -.26748500330310393 +566 618 -.27476094077944613 +567 618 .040471760538904666 +570 618 -.34991336877326384 +581 618 .49043082497804835 +589 618 -.4917382586610435 +600 618 -.49894674844884973 +616 618 -.4329024950218704 +618 618 .18856827926389302 +637 618 -.7798370536831521 +638 618 -.20006107967267894 +659 618 1.6033869305988708 +670 618 1.2540476330011332 +686 618 .1405558195099929 +689 618 -.21282332846478125 +699 618 .13231224700823266 +710 618 .32404822351815515 +719 618 .7261349211201419 +739 618 -.4264180441706156 +748 618 -1.6705139773850175 +770 618 .07694149273924272 +782 618 .004205469408571666 +789 618 1.2994694577752965 +790 618 .7628473689227034 +799 618 1.5502537244499979 +801 618 -.36376189090983957 +802 618 -1.35845986582157 +803 618 -.7317030896478083 +815 618 .3173403377692362 +816 618 .3178447460233432 +817 618 -.7281934159273232 +820 618 -.8493510888894145 +832 618 .7472137723318463 +848 618 -.4119793504732994 +876 618 -.6532402233747475 +887 618 -.4112510712978743 +901 618 -.6351445255746015 +905 618 -1.5158349929508714 +907 618 .1588556466598871 +928 618 .6830817843804182 +931 618 .5308820205295888 +969 618 -.22024245889454658 +991 618 -.7758928694260262 +992 618 .2296427186538718 +995 618 -1.393040125928455 +8 619 .2383938698500021 +14 619 -1.6125818216385428 +37 619 -.2662688464284305 +39 619 .4886083295097313 +42 619 -.3114069573438176 +46 619 .1639716412844995 +47 619 -1.6079802634326965 +77 619 .8548807197153835 +79 619 1.6291417387811904 +83 619 -.04439145007531117 +105 619 1.1774374834990962 +112 619 1.278897581202489 +114 619 -.006006887096526609 +121 619 -.5848348785613088 +126 619 -.7541839794807833 +131 619 .45501753326233774 +134 619 -.0015012302613504613 +138 619 -.6255358713727751 +141 619 .3905162778052506 +142 619 -.7526667472622687 +146 619 -.97183807886949 +149 619 .01814664567318005 +160 619 -.19325998750402398 +179 619 .1326595834342869 +184 619 1.527235265090346 +202 619 2.3255855407378947 +227 619 -2.383400895562092 +238 619 -.29373800436222003 +244 619 -.2587345131400828 +276 619 -1.351966611054674 +281 619 .675716411147881 +301 619 1.646115313959136 +302 619 -.37648592789791985 +310 619 .33074441087878603 +316 619 .9835122342537838 +317 619 1.3999214229455086 +322 619 1.073722567444516 +355 619 -.7973718594585094 +356 619 -1.1969530672751725 +368 619 .1330705647824748 +373 619 2.4806042444010283 +383 619 .4967766248579755 +390 619 -.2521261774239765 +412 619 -.2588500365064357 +414 619 -.7050699626732811 +419 619 -.021317472841150528 +435 619 .02666281391542004 +447 619 .6274491025095886 +450 619 -.9329802740439033 +457 619 1.4989648556319954 +479 619 -1.333743633629492 +481 619 -.6121018082629405 +500 619 .7561876170505255 +525 619 .31214139650875933 +531 619 -.33194880145568106 +542 619 -.932448455873625 +546 619 -.919889528334925 +550 619 1.1672779092593624 +570 619 -.09236595164002855 +610 619 -.3110948916043583 +635 619 -.7801465506439389 +639 619 -.04023678703570227 +701 619 .23635483572465738 +702 619 -.34368185448280525 +707 619 -.3595789775707836 +714 619 -2.054728636287063 +715 619 -.02895676230716652 +718 619 -1.7225695119347064 +726 619 -1.4873033477279314 +738 619 .46471426834728863 +743 619 1.0616563687096843 +794 619 -.5765037121830716 +795 619 1.5655865271580705 +802 619 -.28045807218894575 +803 619 -.3364169305364919 +810 619 -.5885442382027188 +834 619 -.2376118737590504 +835 619 .9375836498833465 +848 619 .26748642296277253 +867 619 -.6496019466763824 +877 619 2.4521530616397818 +894 619 .24928638679166892 +897 619 1.3276989054649713 +902 619 -1.0126998774548541 +910 619 -.1503216417923048 +937 619 .16545160296157685 +939 619 -.3787204115690427 +942 619 .798015548496299 +948 619 1.4089996638607076 +951 619 -.46169616930083907 +953 619 .59206962966552 +962 619 -.813181027385408 +968 619 .26687186152040066 +985 619 .4408710289329757 +992 619 -1.306923847744985 +993 619 -.9503119469047733 +996 619 .2875024832349936 +20 620 -.8221770853105542 +41 620 .3505942555658833 +45 620 1.6638981041533354 +48 620 -1.4530897756350427 +60 620 -1.2486920981599297 +72 620 -.5757036158584032 +85 620 1.0514714878353864 +93 620 1.3618925220301725 +103 620 -1.304202624916654 +107 620 .7664944776838074 +113 620 -1.0136689022735452 +117 620 -3.1398836468357882 +127 620 .03770771872641913 +189 620 .022337760492450454 +197 620 1.2179121857477426 +199 620 .7910118034431743 +201 620 1.335935160086811 +222 620 .770955837068865 +224 620 .7284697443516872 +225 620 .18048161111188127 +242 620 -.4666996658685743 +255 620 .12004902328031014 +271 620 1.759048899758149 +278 620 -.9221072432627699 +308 620 .058125288926975674 +315 620 -1.2901856976198909 +326 620 .7781844197711313 +350 620 -.4528699837681713 +351 620 -.7931714091914773 +357 620 .19751661308909135 +370 620 .4783012669139779 +381 620 -.5949879628167548 +385 620 -.6592404947582073 +389 620 -.23854915904556498 +391 620 -1.125443071209679 +394 620 1.0161584164727397 +401 620 -.6994843009902127 +405 620 -.1110155855038454 +409 620 -.6275587121443282 +438 620 -.7906331851253748 +455 620 1.4352414817162473 +457 620 -1.650823196555034 +464 620 1.5023822532166835 +471 620 -.8440235240011039 +473 620 -.6807329313965826 +510 620 .6408665962797925 +512 620 -.2167261897794581 +519 620 .3022274889249443 +540 620 -.8085666404374269 +570 620 .33320587825525894 +572 620 -.4594730660345335 +591 620 -.870513335386369 +604 620 .4782882733523526 +605 620 .10926725750020651 +606 620 .0857668884444293 +609 620 -.2026010682817688 +612 620 1.2349466283571418 +617 620 1.5395596463127583 +632 620 .7561143627872203 +634 620 1.9751413419564685 +636 620 -.4862296969413733 +645 620 -1.2049444777902905 +648 620 -.11538453903871618 +654 620 .33134574971674124 +659 620 .24228014489091804 +671 620 .6848895280288969 +679 620 1.200367396112263 +684 620 -.408429341977936 +698 620 .6247038916457052 +709 620 -1.3871998393032574 +725 620 1.6410040882147794 +738 620 .5571902799996135 +739 620 1.085863191695072 +742 620 1.3511915513575392 +759 620 -.00011767240656107222 +802 620 .4843091771310391 +805 620 1.1257161066605548 +825 620 1.6757783343154122 +844 620 .37386438920397524 +859 620 .49504494026812157 +860 620 .6649466377964257 +861 620 -.06726132461906956 +869 620 -.38226051380557796 +897 620 1.5045699943786282 +902 620 -1.8213967149652077 +903 620 .48390487478008204 +916 620 -.7809436472610048 +923 620 -.6689780293134824 +924 620 1.0324930012152957 +928 620 -.24455636663665642 +931 620 .8215620946025373 +937 620 .15619136616718368 +943 620 -.8991177280341787 +949 620 -1.9106598440058176 +959 620 -1.5961567500804401 +962 620 -1.2913650259342646 +970 620 .31945492199851666 +990 620 -1.118815055012876 +4 621 1.3177680705310304 +14 621 -.14114547925992904 +38 621 1.5997817301009192 +42 621 -.5105517599757594 +90 621 .12177364063417087 +101 621 -3.3287071563932327 +104 621 .1789833091311522 +113 621 1.2580033853989636 +120 621 2.6227573382973453 +151 621 -1.760698690671004 +154 621 1.166800690350068 +178 621 -.7088935185416492 +188 621 .7013506792158608 +194 621 -.964989712406424 +200 621 1.3648671349468098 +205 621 3.2628244779598186 +210 621 -1.8116856448156657 +213 621 .5890218862258316 +221 621 2.1006201691435544 +225 621 .9113542183259795 +241 621 -.04313736361368456 +275 621 -.867133146147516 +277 621 .7017096492077461 +286 621 .4760273772407853 +291 621 1.8067954088184486 +293 621 .48285414411118716 +306 621 -.3600603532122184 +307 621 .6072711918389072 +317 621 1.5706358979962556 +341 621 -.06686924104014626 +348 621 1.5655562966381353 +349 621 3.103720198642436 +368 621 -1.2962342626468135 +374 621 .623005736735961 +377 621 -1.843930118477474 +378 621 1.6970495317329584 +382 621 -.16349343050271894 +401 621 -1.5458754415709577 +411 621 -1.7430405342768012 +412 621 -.9209560866778028 +432 621 1.0010687659157624 +454 621 -1.6089893605055097 +455 621 -3.0071248739133134 +458 621 -1.4213837049278228 +491 621 -.7032227211251089 +509 621 -1.345373487291036 +533 621 .7760323703086192 +536 621 -3.263542289820636 +548 621 .6904286365610266 +554 621 -.5280991548389593 +558 621 1.9340646990509498 +560 621 -.904048561179129 +570 621 -1.5339264068248872 +574 621 -.9978307817264664 +594 621 1.3991615890951545 +603 621 .009082705258044154 +605 621 -1.5145826192991017 +607 621 1.7708348167361148 +612 621 -4.361927585793543 +616 621 .9074896980365967 +630 621 1.1244912391139763 +638 621 .9385910879201935 +645 621 -.07267764658234624 +649 621 1.3909605750574312 +651 621 2.7842367786149747 +656 621 1.8588196283634462 +665 621 -.9882502127217222 +667 621 -2.163994326822741 +669 621 .24616421686304923 +676 621 -.38215060456010214 +687 621 1.0291294712285126 +695 621 -.7966288014891616 +716 621 -.8985702794656958 +729 621 -.3591988398996725 +758 621 .911249298971964 +764 621 -.24620838192776845 +765 621 .7259412515378043 +766 621 -.943969835851604 +768 621 .4937418858952336 +774 621 1.0705812328550914 +781 621 1.7090874859599103 +783 621 -1.1443780122077798 +790 621 -1.0234894431531982 +794 621 2.4898777572217115 +799 621 -1.7563361597855314 +809 621 .29960741095311266 +837 621 2.181981937521413 +853 621 1.1543608945004826 +864 621 -2.5146691331973 +866 621 -.03414923039972644 +867 621 -1.6014741446701717 +868 621 -1.4809789429573843 +869 621 1.22304355515597 +894 621 2.445664420146552 +901 621 .47901518137664323 +902 621 .9057147784719676 +908 621 1.5460641168635574 +920 621 1.007834138648722 +921 621 3.4872123922077614 +929 621 .8971850692499822 +931 621 .38919926429994844 +935 621 .4896172019299127 +970 621 .08965575311890962 +18 622 1.6928996828490004 +23 622 -.12364982832301796 +32 622 .3934680540594143 +33 622 -.9042445249293685 +36 622 -.38004822385221837 +44 622 -.9218273670882398 +48 622 .03423786386159705 +63 622 1.185279953162728 +89 622 -.3405877662189367 +91 622 -.05134093241824015 +117 622 .23996684267780807 +130 622 -.9856041072450131 +146 622 -1.5607302187993146 +156 622 .009818829054026174 +160 622 -.7859459166434386 +161 622 .23881716790391005 +174 622 .014290868111218998 +193 622 1.0315763251835177 +211 622 .15738751143840768 +214 622 -.5610045475083818 +217 622 1.18256987174073 +221 622 .9450532168809079 +224 622 .030519553036776392 +226 622 1.823784131999698 +234 622 -.5157006985033513 +247 622 -.3647124281085818 +272 622 .03004911555862927 +284 622 -.6073573198060687 +297 622 1.1959499225746812 +308 622 .7369078111967613 +322 622 .6163564610743463 +325 622 -.34445470433483816 +340 622 -.6824606036268934 +343 622 -1.3554927825250682 +347 622 .7132176610987809 +353 622 .6771087986470727 +365 622 -.9345751675743591 +366 622 -.3804120646065307 +370 622 -.557460376575169 +381 622 .6728539224450669 +383 622 .3066340234728274 +406 622 1.3760499576750904 +408 622 -.21894028090936674 +417 622 1.2953199587329982 +419 622 .5999592632281163 +433 622 .0802937726091284 +456 622 -.28532552299787994 +457 622 1.6947648888778788 +461 622 2.299108445809697 +483 622 .5636237803302648 +490 622 .23695544423588227 +493 622 .31422823592626103 +511 622 1.1474104700084475 +517 622 .24767645431678748 +519 622 -.43590069574631063 +538 622 1.0358046805290935 +554 622 .12827932645389867 +577 622 .6229593714294692 +589 622 .5415145775469854 +600 622 .7780068829357922 +602 622 .6849504049618358 +608 622 -.5603015585543122 +609 622 -.3481905268953046 +628 622 .5358206694661731 +630 622 .8131852477472433 +636 622 .2544826294385517 +648 622 -.07223222884064096 +658 622 .12908270773267858 +661 622 .22769125290128706 +695 622 .7286122252079437 +696 622 .46959088710513414 +699 622 -.7168170947387541 +741 622 .3566982406492994 +744 622 .5906896428429265 +756 622 .5321039796818063 +757 622 -.6388053236147762 +764 622 .7962832376292611 +772 622 .227068737917575 +828 622 .9435445587074717 +840 622 -.01264686234124908 +845 622 -.7079254625536027 +879 622 .1617211210760992 +891 622 -.4456877540661686 +905 622 -1.3063279443634148 +929 622 .7822932398073711 +942 622 -.35657435941992754 +956 622 .27913055389071983 +1000 622 .41346699160961803 +1 623 -.7424607457139305 +14 623 1.2800641411544424 +25 623 1.7518911953480896 +29 623 1.0265853765063344 +36 623 .4895929773364821 +42 623 -.01942395158510926 +43 623 -1.1043934155380122 +47 623 1.23574151121708 +49 623 1.0519048371273774 +69 623 -.13947508992915048 +88 623 -.1932879580689742 +91 623 -.0817565286576585 +92 623 -.3881799298828641 +93 623 .2729108619526054 +116 623 .6126385451913948 +153 623 .6006818587873166 +177 623 .9013008513973422 +192 623 -.3912336821907455 +195 623 .4942014871787685 +202 623 -1.5741390898748777 +224 623 .18879015443039152 +228 623 .44056180497818276 +229 623 .016717185625698197 +234 623 .6488156850468852 +253 623 -.9318941385570605 +263 623 -1.1252075004036262 +291 623 -.8100589032133356 +294 623 .8371760672900256 +316 623 -.451642422506374 +319 623 -.1871994103478284 +325 623 -.38050756140916675 +342 623 .7074384031200389 +345 623 .7703564020676341 +346 623 -.46757033153047695 +350 623 1.5130608669415433 +351 623 1.425007425773941 +352 623 2.4477580417132607 +356 623 .6718121181740835 +375 623 -.2958479347127833 +383 623 -1.5684724215410717 +384 623 .6998762267666893 +398 623 -.42649553807441165 +399 623 .9057632165684202 +404 623 .7306647829241624 +405 623 .3453890757016995 +406 623 -.7401564055767818 +420 623 .14238569431358272 +426 623 -.25295254300608333 +462 623 .1795859912079864 +480 623 -.956733943450292 +514 623 -.626202740283069 +518 623 .07493918431586119 +529 623 -.3488852174014003 +544 623 -.452966446934696 +545 623 .02847267866540474 +548 623 .9990578079470132 +557 623 .9497574122918084 +569 623 -.06863316239385216 +572 623 -.46736651576414767 +577 623 -.8659017726131457 +586 623 -.3068377715297692 +591 623 .6033599495192403 +594 623 .22016846714449567 +598 623 .6329963429726718 +599 623 1.6674529913316618 +613 623 -.16635395180447493 +615 623 -1.166357506630161 +632 623 -.5669069481692482 +648 623 -.8746715581590014 +651 623 1.0724727940358332 +661 623 -.2824737286788091 +668 623 1.5623703711327457 +671 623 -2.2517846131390633 +675 623 -.03134565570515397 +676 623 -.7602773322333135 +688 623 -.9242362820172576 +709 623 .9334539360740579 +711 623 -.7603362235937717 +727 623 -.9965357837960899 +729 623 .2892459963504764 +733 623 -.5897295478181969 +737 623 .5002234662979153 +746 623 -.10716040157870256 +789 623 -2.038918926123536 +791 623 -.9787651107682032 +798 623 1.2262276883561098 +802 623 1.0801644287194103 +806 623 -.25362433178391913 +816 623 .8243741982851495 +819 623 .8298386121607403 +826 623 1.4087675681763472 +835 623 -.6239493398986182 +839 623 -.47011402590316403 +848 623 1.3739963859216031 +850 623 -.5137068111367628 +879 623 -.07962017007911582 +885 623 -.1302149385682091 +887 623 1.7780051239416093 +893 623 -.625797268370079 +901 623 -.3423173519246452 +902 623 1.2630910349205178 +907 623 -.7841852264310611 +920 623 .6130334948941296 +921 623 -1.3753991144132656 +925 623 -.1451379856249661 +932 623 .9795277309555634 +951 623 .8441176352456835 +953 623 -.9148234641246471 +956 623 .13532434535080198 +978 623 .17554939425320013 +984 623 .7208911710010695 +989 623 -1.0496031528456926 +994 623 .22707619945664292 +9 624 1.3579383826198057 +14 624 -.23428038662508954 +24 624 .12478448005175566 +34 624 -1.188736194641751 +59 624 -1.6437521755235422 +60 624 -.5066364454121604 +62 624 1.4293774838108122 +86 624 -.34357381218438016 +112 624 -.5547170173899323 +178 624 -.542309593775014 +189 624 .11789185752428545 +197 624 -.17421164851259568 +214 624 -.3501485370251708 +217 624 -2.4188612325588705 +228 624 -.8865633843208834 +230 624 .11080076011719052 +247 624 -.13538751352669542 +261 624 -1.429229078896207 +271 624 -1.6569048484911106 +275 624 -.43958885431693473 +276 624 -2.2500566638072783 +288 624 .3751797100416663 +289 624 -.3689563439618191 +350 624 .9189956559681582 +353 624 .1523164907761395 +366 624 -.37692186717798826 +393 624 .609943229549997 +427 624 1.158302688301127 +432 624 -1.8803214443114835 +436 624 .925970967165192 +447 624 .025342849485238697 +448 624 -.5212913039265014 +456 624 .6144346015848767 +464 624 .31534410646104905 +467 624 .42933352764412824 +478 624 -2.3799185880870573 +488 624 .6042238154223047 +494 624 .415186330683502 +502 624 -.4359026977473377 +526 624 1.6392477210580445 +531 624 -1.43862708144094 +546 624 -.4019559979462149 +549 624 1.5466095994154538 +560 624 1.34493539110385 +569 624 1.3998044213831253 +575 624 -1.3246858311893075 +577 624 -.7531200066573358 +587 624 .5815956775167491 +595 624 -1.774179926305922 +596 624 -.19215382397027922 +606 624 1.2204734234998573 +609 624 .3377491284134373 +620 624 -.3117647496176379 +627 624 -1.237257709631543 +630 624 -1.4658829979272643 +631 624 .19750875628225995 +636 624 .2444750355422768 +665 624 -.8959860314389568 +670 624 1.3920217361273852 +676 624 .38703610615968725 +679 624 1.9465398534414233 +687 624 -.04214519879128893 +689 624 .4568676474610547 +692 624 .9384706174629747 +696 624 -2.6210102582342865 +707 624 -.1769612610365618 +716 624 2.5012067511455633 +720 624 -.09746166238789584 +728 624 1.5601323301362535 +737 624 -.4753882704932654 +740 624 1.226390471040818 +746 624 -.04267620333387857 +757 624 .9311713592787612 +765 624 -2.6931756341416335 +769 624 -1.5573742659248389 +775 624 .23904717515516558 +785 624 .22684698771394435 +822 624 .45541059256524025 +823 624 -.6056902567482386 +842 624 -.3456567145651554 +855 624 -1.6131778236546193 +865 624 .11178538130068744 +880 624 -.4425600140377949 +888 624 -.5568966664190751 +899 624 -.08646698911311568 +909 624 .5965186372759612 +931 624 .22161625663043338 +940 624 -.2841795517568818 +947 624 .4320874408394275 +964 624 .652755445220406 +993 624 .9022274958307805 +1 625 -1.3203866376172126 +19 625 -1.0194914285487275 +22 625 -.47431836863506077 +38 625 .04531850046810394 +39 625 -1.2602004690396236 +57 625 2.504490310724316 +67 625 -.5175158349809094 +74 625 2.679379208706864 +90 625 -.03824290622540907 +94 625 -1.275098983792791 +95 625 .812239410059974 +99 625 -2.628118041856893 +102 625 .06843654675367601 +107 625 .008411405247129883 +109 625 -.07377469106749521 +114 625 -2.28044812455377 +122 625 -.9384806270373311 +123 625 -.7307020999734706 +127 625 -.5626092430862701 +143 625 -1.9670964158933613 +144 625 .7043559635474657 +158 625 -.5070265791114704 +159 625 -.6392701556053069 +193 625 -.3494438190167012 +205 625 -.2617401825450496 +217 625 2.9161541797623665 +219 625 -.6897842040045622 +222 625 .05244396075909205 +236 625 -.6047111609937066 +245 625 2.224381714411586 +246 625 1.8052841454574429 +248 625 -.8568688840138206 +256 625 -.3326812051704249 +263 625 -.7067698874718892 +268 625 .9021475801226458 +283 625 -.103158973049943 +296 625 1.18639073627873 +298 625 -.5046579057952991 +309 625 -1.348594018650252 +338 625 -.781524056076653 +346 625 -1.2233304075080733 +385 625 .07326877130388595 +389 625 .08776046805579026 +393 625 -.08716970986779139 +398 625 -.6452737707583233 +399 625 .12707667793412036 +402 625 -.6455749182811741 +415 625 1.2989217737170822 +427 625 -.6361893305196149 +431 625 .7815009594221706 +464 625 .18467171667805482 +471 625 -.6040583567418044 +498 625 .5972806102425795 +503 625 -.5348068133337734 +516 625 -.6651209694249227 +517 625 .9679336905755869 +535 625 1.087082621550537 +542 625 1.568643480900919 +544 625 .40388141327510546 +547 625 -1.285039862046683 +568 625 2.836058302663487 +572 625 .4763880140392792 +580 625 -.9407650792632136 +598 625 1.7335488720103083 +599 625 1.0131772115732618 +605 625 -1.536008908984043 +618 625 -1.3305325442188194 +642 625 2.6184962260785953 +646 625 .04539387105489688 +660 625 -.7617086173003601 +701 625 .8465043959786749 +702 625 .23681100716410342 +710 625 -1.0422610091952313 +728 625 1.515627203230669 +752 625 -1.3209881045522451 +754 625 .769286931621635 +771 625 2.873525856238634 +779 625 -.6106101911276045 +793 625 1.2390667218239282 +794 625 .08381552291516453 +795 625 -1.4978262405446792 +798 625 .8107121114869118 +812 625 -.24889975627748603 +813 625 .2357629836468382 +823 625 1.097104562719514 +827 625 1.7359189436000215 +828 625 .2665162942054591 +843 625 .4979222360830984 +863 625 -.5333731686457115 +864 625 -.46605601101318644 +870 625 -.1461606246496782 +894 625 .6576917439699606 +899 625 2.8311328319777895 +903 625 -1.0013814022580687 +907 625 -1.7267712523302774 +908 625 1.8176168935602435 +910 625 .31656572878369954 +917 625 -.9493322487680069 +919 625 -1.0982505485133058 +936 625 -.8151176808591694 +943 625 -.7801403745556141 +969 625 -1.0581353479461244 +973 625 2.3957753940813693 +988 625 2.8725489203712256 +994 625 .6590290403543069 +14 626 .6736722795415543 +28 626 -.29577617914957854 +40 626 .17283849090694803 +53 626 -1.2576532024218692 +56 626 1.3072305792118004 +62 626 1.2018548943659284 +66 626 .24029857032090024 +76 626 -1.97807798956572 +83 626 -.17923479123012742 +90 626 .07345926732630056 +101 626 -.775495439014361 +129 626 1.8926818335412177 +147 626 -.3624377742006528 +155 626 1.1595169344498162 +189 626 -.9706025326820874 +198 626 -.48674077716967423 +211 626 1.6045588643093533 +235 626 -1.6580232502858625 +240 626 .27170621976607023 +250 626 .24174406475805582 +258 626 -.6071806938784148 +264 626 1.608233591573243 +266 626 .0881458369769675 +271 626 -3.2876508513379763 +291 626 1.9289171370432057 +301 626 -.17428006163565196 +303 626 -.16168690318194062 +308 626 .08993540427427442 +317 626 1.8236796952582741 +318 626 -.4949596282212181 +325 626 -.7803118399520002 +333 626 -1.474523641367807 +339 626 -1.6784694536262912 +351 626 .19212604317475387 +354 626 1.7054910681259847 +362 626 -.631342820479852 +372 626 -2.477435380097551 +387 626 .8402942502637323 +392 626 -.9680389036007162 +409 626 .7064902009284314 +413 626 -2.7516124343893904 +424 626 -.9425967500495557 +427 626 2.932243232546541 +448 626 -1.0237336801272519 +450 626 -2.4317472675391634 +461 626 -.0176726248488685 +464 626 -.10378386535357592 +466 626 -.4758215938784498 +479 626 -.4300166836291518 +486 626 .14739790652879742 +503 626 .8861568616871629 +571 626 -1.0021286631877981 +578 626 .5824490874145969 +582 626 -.9989556878771907 +589 626 .9235877284626632 +611 626 .12919130025188622 +617 626 -3.2082106723731414 +621 626 -2.474088659699912 +627 626 -.9796349243050751 +633 626 -1.3232270958267096 +645 626 1.6758766559856146 +662 626 .9200016712192711 +666 626 .8780748366877555 +676 626 -1.3206699302132436 +677 626 1.4785068285952634 +684 626 .7804163500923648 +697 626 2.516556746477412 +705 626 .12716574385656892 +738 626 .6147075137754594 +739 626 -1.0781196728529232 +741 626 -3.148085695840925 +763 626 -1.2214863741779824 +766 626 .7017234480138148 +769 626 .36398490558080343 +777 626 1.02564870832766 +793 626 1.844689781628231 +799 626 .824523112761995 +810 626 -.021877069633125704 +815 626 3.5096515979782734 +817 626 .3541590871924225 +819 626 .23983543931957768 +831 626 -.45059371481444455 +850 626 -.8508705381866286 +855 626 -1.2851507509060651 +863 626 .8496482783010831 +880 626 -1.0917094656862834 +900 626 1.2609041111861208 +911 626 .7504121219777202 +913 626 -1.6869674986199337 +921 626 1.5320593702406202 +931 626 -.08541045400701855 +936 626 -.6760618830428785 +960 626 -1.7610941127530455 +962 626 1.3346256136906622 +969 626 -3.1922023772941577 +982 626 .3054541285694754 +2 627 -1.2216194546137598 +3 627 -.08020617252764943 +4 627 -1.2855868617097725 +12 627 -.9499758918659716 +16 627 -.0025833541436625085 +21 627 -.32722614673072364 +35 627 1.2535140263297944 +53 627 1.7926677293804876 +55 627 .6955562975050713 +62 627 -.18619722271325698 +64 627 -.9147486721151543 +73 627 .8102249384926355 +83 627 .3485260743175814 +86 627 -1.7636930445564194 +96 627 -1.189479835697288 +115 627 -.9376230430150233 +119 627 -.6629657078103205 +122 627 .5527358476508049 +124 627 .6384487787049355 +126 627 .5521798132868936 +130 627 1.5133762137981397 +135 627 1.6594183374021545 +144 627 .39822136904069594 +148 627 1.2131338268810614 +159 627 -1.174493004028282 +165 627 -.9491105961488773 +166 627 -.9918688946238025 +172 627 -1.5837267052689603 +177 627 .07408813007992554 +183 627 -.5817629227103394 +203 627 -1.0179132231071475 +210 627 -.47947180075859475 +225 627 -.44497099211975566 +233 627 -.8444979246054514 +240 627 .8778926210318609 +243 627 -1.021758658309295 +257 627 .9903928517324303 +258 627 -.7439414280973143 +266 627 -.9933496979647755 +268 627 -.6113853011248686 +282 627 .9306314886336231 +283 627 -.44660774603984604 +331 627 -.645631799536004 +333 627 2.0457863168425856 +348 627 .7845836655630144 +351 627 .8539141577979209 +379 627 -1.339352871140572 +389 627 .09555957828336006 +422 627 -.002905189247673051 +492 627 -.3679919399685005 +494 627 .6250840097582055 +504 627 -.8657307547498455 +506 627 -1.380356573548037 +548 627 .7592301001002256 +587 627 -.3134407302507846 +663 627 1.5169921070855232 +666 627 -.8867579572233104 +677 627 -2.4406563666877465 +681 627 -1.5125179701500373 +683 627 -.8329619935813322 +710 627 -.11975424208499405 +719 627 .12188591077616814 +721 627 1.0531485139609196 +736 627 -.11454605086205105 +744 627 -1.7698793821370473 +754 627 -1.051105778470335 +760 627 .0701342536979023 +767 627 1.8923732905090793 +776 627 1.436345765030617 +785 627 .40061346758640504 +804 627 -.27962473448165476 +809 627 .6690913677525391 +816 627 -.4939579115405539 +837 627 -1.9012129185113984 +846 627 -.5354830300972235 +892 627 2.2971663079113642 +913 627 -.12764944606537376 +921 627 -1.5401303146746645 +934 627 .31383345692082054 +945 627 -.7149707033606203 +965 627 -.9654500962122764 +969 627 .5503190802799274 +981 627 -.8233574388333398 +983 627 -1.2526106034445215 +993 627 .3222264908820716 +999 627 .8730565686793245 +11 628 -.5456111788556802 +16 628 -.5212808272866752 +25 628 -.7061847889806915 +47 628 -.3672549165333837 +48 628 -.5247222023728897 +50 628 -.4113269665325481 +65 628 .2065491520403555 +71 628 -.9207958696038184 +95 628 -.7778286040022628 +114 628 .04476623276153696 +125 628 .3970966973698333 +130 628 1.5917152653027529 +133 628 .6428287849212629 +134 628 -.21029194132366566 +135 628 .3377837227999403 +140 628 -.4636470249954012 +152 628 .03971460587424373 +177 628 1.1039997433673792 +187 628 1.7935179046939795 +205 628 -.05032635898822219 +223 628 .4065120814859756 +231 628 .6861770807577005 +242 628 -.5607880641641346 +255 628 -.792674575787582 +258 628 .5100170432501726 +264 628 .24921648078499592 +271 628 .3703392548454213 +272 628 -.3487031452072574 +277 628 -1.6578763386020614 +286 628 -.6440499709278809 +288 628 -.5372438227049698 +294 628 .17001962258915826 +307 628 .709361002541425 +314 628 .3184711478594036 +319 628 .9143989694160162 +329 628 1.0482882164340608 +336 628 -.09234004385128664 +341 628 -.28852003996992165 +346 628 -.3266413989477855 +356 628 .1860282667798847 +367 628 -.0186516917397377 +378 628 1.3654318265885 +387 628 -.08799142484404868 +388 628 1.3629773393513358 +427 628 .028373445123193564 +442 628 .18040151917535863 +459 628 1.3303796197415445 +473 628 -.30342431270099973 +481 628 -.3590704286007621 +482 628 .30186704657330915 +495 628 1.3244326007126015 +505 628 .11632677812931405 +522 628 -.2562655820277324 +524 628 .22860880522039445 +558 628 -.8842507334882135 +562 628 .9476776630460253 +565 628 -.45615922251238944 +584 628 -.3693485544097786 +594 628 -.5155079902074992 +597 628 -.06832267760889724 +606 628 .11492391656742293 +612 628 -.1737495597225056 +628 628 -.7612498098858812 +629 628 .7772668051508256 +650 628 -.8668598738279486 +662 628 -.778144475042492 +672 628 -.5660153575378447 +686 628 -.02725297486477562 +696 628 .4141234823131007 +700 628 -.24278772102215065 +727 628 .009302352532893028 +739 628 .46580935446032823 +745 628 .2994928993082366 +762 628 .5267106855541089 +790 628 .5248194733700362 +798 628 -1.575673011521544 +799 628 1.3020987291714385 +805 628 -.6072640624351743 +807 628 .7599241154566241 +826 628 -.44849166055661693 +829 628 .4685827758401029 +831 628 -.6501721502780132 +833 628 .8759678408582661 +851 628 1.3156771395855877 +857 628 .399474780264847 +865 628 -.21415706743702168 +874 628 -.9332347647752277 +877 628 -.9861616398319387 +885 628 -1.386391195748749 +904 628 -.7260013073095775 +906 628 1.1861821506494596 +911 628 1.0617580325030966 +915 628 -.1496855002521198 +926 628 -1.0012553528618222 +947 628 -.6613609932895009 +950 628 -.3987721093389433 +980 628 -.13956524150845298 +981 628 -.2943245447191165 +988 628 -2.008315008272252 +993 628 -.6284586451720489 +995 628 -1.4379977409156013 +10 629 -3.283851686961456 +27 629 .21667203550123088 +80 629 -1.6040757263043106 +82 629 .31529011867167644 +84 629 2.326218080760025 +91 629 -1.051785342627489 +101 629 -.12395917118502267 +110 629 -.28038440885082416 +112 629 1.0188645926332347 +124 629 -.2306759548013802 +128 629 1.8076923519252848 +129 629 -.5034479110962097 +144 629 -1.045063931805714 +146 629 -1.882570318889344 +153 629 -3.30481996952783 +165 629 -1.8255318170428925 +184 629 -.392146703531814 +198 629 3.3863397698038336 +204 629 .11703459167930204 +207 629 -.13746116269879186 +226 629 3.923762458142066 +231 629 .7431452397606382 +240 629 1.7374631814755668 +249 629 .73946934999912 +261 629 -.5674908545817715 +263 629 .39219726310219494 +268 629 1.628608163435851 +272 629 2.8865514940455497 +279 629 -2.254430745262293 +283 629 -1.8175349247882235 +287 629 .8302438078173172 +296 629 -2.5782858180521444 +297 629 .22665622799984303 +304 629 .5012296221964831 +306 629 .7234838608416171 +313 629 .860391669270483 +322 629 1.4845819025361173 +351 629 -.5120677642237765 +352 629 -.2642317438936236 +369 629 -1.8015649576912767 +389 629 -.34802546094360715 +395 629 .23884516981924844 +402 629 2.157045150777737 +407 629 -1.127637868530586 +412 629 -1.0804621060176822 +425 629 1.915908833470436 +428 629 .8038682782433635 +439 629 .898391257500761 +440 629 -1.086474241888389 +443 629 .8059597832728549 +449 629 -1.858125989708907 +451 629 -1.8798233178603738 +469 629 .7850074917805985 +492 629 -.1008569575696019 +497 629 .06744291130776275 +499 629 .8879922033505622 +504 629 1.035882995750699 +505 629 .9935394866802167 +521 629 .37310030980014774 +523 629 -.5027444688457428 +532 629 .8372412943826304 +533 629 -.9406390154655679 +543 629 .12551616463805093 +557 629 -.6169683509245082 +579 629 -.3898296984815143 +584 629 2.049748718112939 +592 629 .9094978228528032 +596 629 1.1531358072714746 +607 629 1.2623926753973558 +632 629 -1.499946000666378 +633 629 .14237831863705408 +639 629 -.6890054977804613 +659 629 .3364983235310293 +675 629 .40639075692471244 +690 629 -3.08512564427506 +695 629 .8225348864681961 +698 629 .6186568561950608 +702 629 1.4199527610882872 +715 629 .007891994349297271 +735 629 -1.0442335105190164 +762 629 1.058431827067655 +771 629 .22147919793044213 +775 629 -1.1641770653332364 +782 629 -.5420499907455792 +784 629 .8264070821722557 +806 629 .9896336901759424 +807 629 -.13496038143259867 +815 629 .6866633681482082 +819 629 2.1570228660029898 +826 629 -.9422135649145942 +851 629 1.6798126328720582 +853 629 1.0166507107063174 +854 629 -.32306072536051655 +856 629 -.2730801247239862 +858 629 -1.648775443852084 +864 629 -.31941899873040547 +871 629 1.090872322358828 +875 629 .05669220800813821 +887 629 .2478521913826356 +904 629 .07770458712348124 +918 629 -2.3015723019346757 +933 629 -.943658362462573 +936 629 .5132901386806515 +948 629 2.605037983161468 +953 629 -1.7518920646799958 +961 629 -2.0325910716928814 +964 629 .4339718172218411 +977 629 -.9811288263926929 +6 630 -.627286543190172 +12 630 -1.0729663748010414 +16 630 -.9009050289012662 +50 630 -.8891086123498683 +62 630 -.33374257611046776 +64 630 1.5310258789659446 +66 630 1.3840870400053762 +68 630 -.002753625688441473 +81 630 .36383228679394897 +87 630 .5069246938955736 +97 630 .20611039685119287 +102 630 -.909083381502707 +105 630 -.5106559338891171 +111 630 -1.1477866703769946 +114 630 -.46181694937192314 +121 630 -.6546935831278005 +125 630 .9356177316166158 +127 630 1.0381278678620578 +136 630 .9976767016838176 +169 630 -.7373221702627611 +178 630 -1.0713885934712315 +179 630 .24104251385075284 +189 630 .8815424626107968 +190 630 -1.272434470673065 +243 630 -.5113315463376975 +248 630 .8181299008606374 +275 630 .28264780518350807 +280 630 .8091405757659245 +305 630 .1821932926848009 +318 630 -2.7807635849731276 +322 630 -.16841112287515642 +338 630 -.536070506668369 +342 630 -1.0668966152324562 +359 630 -.6810349155561617 +377 630 .6808539966342532 +378 630 2.0405687386662015 +383 630 -.9727691190493146 +387 630 .16164840319585716 +388 630 .879938742081394 +389 630 -.6742688701669121 +390 630 1.1046162948659062 +398 630 .7960952208091172 +401 630 1.1326644566111252 +427 630 .04023820734289521 +429 630 .31198957706366814 +470 630 -1.5674374850124742 +474 630 .9128174768510285 +485 630 -.14201413347471298 +496 630 .6075849799580385 +510 630 -.05270620934749323 +517 630 -.2730854602441396 +518 630 -.36383316280709277 +534 630 -.052931068962001185 +541 630 1.2264134171480439 +546 630 .23949432087757683 +558 630 -.8998947325649196 +564 630 -1.6916318578321012 +566 630 .20480660136618814 +570 630 -.9929194824363117 +585 630 -1.3194266898367863 +605 630 .07223189766566752 +617 630 .5443632308626205 +626 630 .22954152276385506 +636 630 .33856142911814924 +637 630 -.41248056258310833 +663 630 -.6372133703781931 +673 630 -.5837722971760735 +678 630 -.5368141571942245 +697 630 -.17600882296931178 +703 630 -.39986237664871344 +719 630 .7591473434247049 +725 630 -.6662401498800365 +739 630 -.02929227550561403 +755 630 -.2808405093854127 +769 630 -.6784580757938199 +783 630 .08745318032070962 +791 630 .22404323692607458 +794 630 -.8395438447174872 +795 630 .17306852764504999 +808 630 -1.1184327953157538 +840 630 .1943979951759321 +852 630 -2.0507097444522877 +860 630 -.11599221341442283 +866 630 -.8516343808277871 +886 630 .20042570414688132 +919 630 -.7161663670912193 +922 630 2.295227488412336 +944 630 -.6104472239584959 +947 630 -1.2246549309882988 +950 630 1.0431345058608483 +952 630 -.3230164401783861 +967 630 .4808338946144757 +972 630 .3536332047214862 +982 630 .07160148972938785 +988 630 -1.1051396835243072 +994 630 -.2460794003735169 +33 631 .42550841088832875 +35 631 .34877389957992955 +43 631 -.6446316717907896 +49 631 -.7699390129747484 +72 631 .1533023518832991 +73 631 .04926159804668834 +87 631 .12082526146281553 +94 631 .3200408109200846 +107 631 .6189802946514783 +119 631 .6603368463735827 +121 631 .12648090806165752 +130 631 1.4273530194170572 +138 631 -.5756907632414876 +139 631 -.07618527258887542 +140 631 -.6990770763407329 +145 631 .09166894800903631 +152 631 1.6585186258484648 +154 631 -.951423107144926 +163 631 -.9270206854767983 +173 631 .25968537313308615 +193 631 -1.5084924587119222 +195 631 .67443823758203 +206 631 .3131666703041939 +234 631 -1.3738063370675473 +255 631 -.7728564976886657 +262 631 .08927693210304576 +263 631 -.5790995504296832 +283 631 -.27615278575497104 +306 631 .20802721913413424 +328 631 .3599158928749654 +337 631 .7272721543677423 +342 631 .12358945448515998 +344 631 -.6753737221877982 +354 631 .8997631669540671 +357 631 .017809527790096952 +360 631 1.327467756060681 +373 631 -.12352829312854635 +380 631 1.7912806389506788 +382 631 -.3840056624993514 +383 631 -.6467410558772493 +384 631 -.6851037642704838 +386 631 1.695016656786829 +388 631 .1749998760682136 +392 631 -1.2252527969396096 +413 631 -1.2348717678997352 +420 631 -.6997792652787631 +428 631 -.20705420526579743 +435 631 -1.2349729223241979 +453 631 .9488938487703087 +456 631 .5262812289587919 +462 631 -1.380669521589179 +465 631 -.4852494406008476 +491 631 .4910243147153194 +500 631 -.18638059580276267 +519 631 -.3530993309100398 +557 631 .7292537027870153 +576 631 1.4814149308614537 +582 631 -.7444847949372867 +583 631 .5336873819741762 +586 631 -.9034020608374391 +601 631 .8804696539686602 +615 631 -.1043723685424155 +620 631 -.9716542855325174 +633 631 .5363993995851642 +634 631 .00839667896601795 +636 631 .9661986225842474 +639 631 -.7832885593671274 +643 631 .2700543402375568 +651 631 -1.1859402943866595 +672 631 -.6919778902592402 +674 631 .3040882650158985 +686 631 -.5043248831634247 +696 631 -1.1768707085190826 +699 631 -.37135544942058096 +711 631 -.375185607166008 +715 631 .18756910819458303 +717 631 -1.080473723320704 +728 631 -.0021721545339996318 +734 631 .5369893889026572 +751 631 -.2381198440122019 +761 631 -.05635549970274771 +765 631 -.6410598070671253 +772 631 -.00900246673342886 +773 631 -.3650748725444269 +786 631 .24405031621628118 +795 631 -1.1125095169233208 +796 631 -.5633999250238366 +800 631 -.24402404981593936 +805 631 -.11445185902818737 +808 631 -2.059719279538397 +819 631 -.5944211577892343 +824 631 -1.09128644609237 +842 631 .36855221784905756 +850 631 1.4265330781949348 +865 631 .2373776623073206 +866 631 -1.0581886139728034 +874 631 .3492561777908208 +879 631 .24309225029827244 +880 631 .587381426370294 +916 631 -.05321490506841027 +927 631 -.5839615520388148 +930 631 -1.0033137305964426 +943 631 -1.5680753404055878 +955 631 -.42395984734343195 +961 631 1.0454765401158097 +964 631 -.7111860251409471 +966 631 -.31197723901119173 +967 631 .6049550106409821 +973 631 -.582889303841169 +977 631 -.029376717824933937 +981 631 -1.1023599676877318 +990 631 -.06905887447371181 +18 632 -2.25585555906579 +44 632 -.28838764798182975 +61 632 1.7937221493557585 +62 632 -1.095836551534425 +69 632 .5528709688173005 +76 632 -1.7763290972084196 +88 632 -2.7327383328114383 +110 632 2.080077831826011 +119 632 .3129905299910709 +122 632 -.5713918231326394 +123 632 -.38066358926141247 +133 632 .7791223941323687 +147 632 .1556128925587899 +149 632 .32556248829384316 +157 632 .39502809087627716 +158 632 -2.2867771859839916 +164 632 -1.0928420429809438 +179 632 -1.341966105394598 +186 632 .15447518293909776 +187 632 2.603847849672007 +190 632 -.47979769175318654 +199 632 -.8018495790137337 +203 632 2.726484372666009 +219 632 -.1542391271037959 +227 632 -2.2361960579006537 +239 632 -.680610282361347 +240 632 1.4835729837053864 +241 632 -1.2765537417410031 +245 632 -.13039359280430496 +266 632 .04268751185150739 +269 632 -2.1534830195236934 +270 632 -2.5906532267554607 +273 632 .9685156613534034 +274 632 .2844477619722333 +286 632 -2.080229955278012 +319 632 -.5799806731640612 +327 632 .8003682418818161 +346 632 .402604975561616 +382 632 .8522832741981171 +384 632 -.7397529032183611 +386 632 .10384024337703973 +390 632 -.7194425591582456 +400 632 .17617268028086552 +409 632 3.595024010148437 +424 632 -1.9675549906059808 +427 632 3.5104171733157066 +430 632 1.4590757420772154 +440 632 -1.2146392973638551 +448 632 -.8885266980207805 +469 632 -.31834426484978173 +476 632 -2.0828640119742694 +485 632 -.46980725223149766 +491 632 1.5544462114271107 +494 632 -1.8505916481037747 +530 632 -.0015108736473763845 +533 632 -1.0109948399085735 +541 632 -.43361612284330403 +542 632 .13424518235751323 +549 632 -.43648104681287586 +551 632 -1.0849847332589464 +557 632 -1.4649922952841212 +598 632 .25444972299409896 +605 632 -.7771922180122793 +620 632 -1.7249243431754178 +622 632 .6779136918365234 +628 632 -.6830451056462533 +642 632 .6169364478999191 +647 632 1.1782906957178008 +654 632 1.6440052617767937 +677 632 .30607798260541835 +684 632 .1253138558035473 +694 632 .23468480078591736 +699 632 .31564327122292635 +723 632 -1.456489562397372 +728 632 .1364283382647387 +732 632 -1.700419732704039 +737 632 .8844823980203288 +763 632 -1.1524038384959812 +818 632 1.6547031883922525 +846 632 .06405797977325148 +892 632 -.3407517457398721 +897 632 -2.943480670340205 +906 632 .47169544564941845 +908 632 -1.1786590151943575 +920 632 -1.1816005070972053 +934 632 -.7521379506580448 +938 632 -.5692052340424274 +942 632 -.25429788111937657 +955 632 1.5616833889059005 +966 632 -.9965112312923936 +970 632 .2537598767545159 +980 632 -.9559386542505575 +983 632 -.7479636630424333 +995 632 .6594481867349742 +997 632 -1.4538409350915378 +2 633 .10325165568565668 +8 633 .9008939517338124 +21 633 -.9654423503795507 +24 633 -1.1434097788630515 +54 633 -.819737731569014 +57 633 -.06060559933778402 +60 633 -1.5135758576051372 +64 633 1.9096172970071172 +77 633 .5339261680188173 +88 633 -.25643557873549977 +99 633 1.0370122858134287 +100 633 .07899713047190879 +121 633 -1.0849066942497108 +151 633 -1.4603993554646395 +160 633 .17652236157425338 +174 633 .1608827744319707 +178 633 -.03087877158603962 +179 633 .4364699956835748 +186 633 -.32660672135443514 +203 633 -.6627662716016253 +206 633 .9851873978595477 +210 633 1.3629730313650066 +227 633 -.6812905295981423 +235 633 .8302536317402205 +237 633 .748502897566618 +240 633 -.47416052147081816 +251 633 .5345405309979796 +254 633 -1.1503599674570786 +257 633 .004446207350758513 +258 633 .10058519080279474 +259 633 .1855844329869658 +269 633 .8257552414591988 +274 633 -.16724844054195473 +281 633 .9406820387238027 +290 633 -.5926466925624049 +302 633 1.2032948853842669 +310 633 1.4095819830176706 +314 633 .6150045829178092 +372 633 -.3186469601996266 +389 633 -.6482212870214688 +394 633 1.1986757473304106 +427 633 -1.571014878392086 +436 633 -.3792426050219365 +437 633 -.2638702752745091 +448 633 -.3227110992126447 +456 633 .5051122250077872 +488 633 -.8917187963087996 +500 633 1.386357906438748 +514 633 .2607302330531271 +524 633 .29110416300364106 +529 633 .015924886237438846 +535 633 1.801394447392647 +540 633 .48361273246344794 +542 633 -1.5440764853774864 +552 633 -.5448601366247635 +553 633 1.938220103512465 +557 633 -1.7755794204526936 +573 633 -1.0060623279976193 +577 633 -.8924461981853345 +587 633 .010548104614818171 +598 633 1.370916325531193 +604 633 1.0080689355339765 +606 633 -.9067619447547578 +628 633 1.6089323231993449 +648 633 -.5444024476437052 +656 633 -.24584855108208864 +663 633 -2.142293601743712 +685 633 .5817617310019877 +688 633 .995597863367569 +693 633 -.215153398863417 +698 633 .016620626946836137 +702 633 -.5677761814216526 +756 633 2.532419907963682 +770 633 1.077538532583143 +775 633 .4505511181342861 +780 633 -1.1512296331555933 +781 633 -1.2714583086378575 +783 633 .09154385526779443 +792 633 -1.1779330119496838 +794 633 -.9369290970971756 +796 633 -1.0160397690556493 +810 633 -2.51317241217188 +816 633 1.8483276395461148 +818 633 .7849217464557967 +821 633 -.9113752166319117 +828 633 -1.901853201445852 +849 633 .9184456213116333 +867 633 .5043955388196018 +874 633 -.6957781067407375 +876 633 -.07012887000042567 +877 633 .2336898055554354 +881 633 1.45575744501525 +892 633 -1.5739693896402907 +893 633 .6504478044337664 +908 633 -.4760719538950567 +911 633 -.9746871902389588 +913 633 .8729840733496459 +971 633 -1.2800523931452794 +974 633 -.9808234700029121 +982 633 .2532360339757165 +991 633 1.6398353054727752 +993 633 -2.099135008803668 +997 633 -1.063726642807594 +2 634 -.08227347618512942 +32 634 .33064456099463024 +34 634 -.5611651121727296 +40 634 -2.047295698873717 +46 634 1.4352862397697255 +73 634 -1.0582058435407071 +98 634 -.07367814763313363 +105 634 -1.0063419647196927 +114 634 -.23992368835384925 +120 634 -.8366711709135312 +126 634 .0443973672912677 +154 634 -1.5174752110475627 +164 634 -.43991537811220227 +170 634 1.5241302888005406 +171 634 1.280809925695747 +176 634 -1.0231191448089145 +184 634 .5169362716361507 +196 634 .12456913090740329 +197 634 -.21398854465198244 +199 634 .4362270902157566 +207 634 .02310860480625218 +209 634 -1.9380535067402347 +215 634 .4368849220081342 +224 634 1.1709681445146718 +234 634 -1.2227497680734123 +251 634 1.446926975615691 +257 634 .5926122694651629 +258 634 -1.1398871752595818 +262 634 -1.414672968247171 +269 634 -.44889644952871455 +300 634 .2431193211737389 +308 634 1.9009760044880226 +331 634 -.010545936218261137 +344 634 1.3014896818752528 +360 634 1.4576977372798063 +364 634 1.8154310777295375 +365 634 1.2569327197293079 +366 634 1.1241429685331403 +380 634 1.1355074952892905 +402 634 -1.2072718208383804 +403 634 .5439370029094327 +404 634 -1.1448665893745262 +408 634 -.3217382113796558 +426 634 -.9476315403654832 +435 634 -1.0422789816172275 +436 634 .628988614012838 +447 634 .21270860643537542 +473 634 -.337445234237789 +474 634 .47440283505410563 +485 634 .2786036344985768 +486 634 2.4162321151131225 +490 634 .4224982668947797 +492 634 -.12916371948766942 +494 634 -.5360727663105984 +515 634 -.6663616223642103 +526 634 -.30048312545061756 +536 634 .6050658190576882 +541 634 2.120596463214809 +554 634 -.07845000068196617 +558 634 -.3441571650486707 +560 634 1.9327559163378023 +563 634 -.6538251558479662 +564 634 -.7295837385031981 +570 634 .42006837484752113 +573 634 .06892458212013161 +574 634 1.366991039170543 +576 634 1.986599576744595 +603 634 1.9485324010814984 +610 634 2.2604312760806025 +623 634 1.2500847157924642 +625 634 -2.400232472572145 +628 634 .7369057138585182 +634 634 .6168610985119739 +638 634 -1.5719152473311575 +649 634 -.3789129968263618 +653 634 -.3321044410692836 +656 634 -2.515459961398594 +663 634 -1.9971652889781586 +721 634 -.317735216462794 +728 634 1.6884915664968585 +735 634 1.5731878311450815 +738 634 .6799654579345287 +750 634 .8479853954429923 +756 634 -.27898609232609306 +771 634 -1.387916154900403 +799 634 1.0992265185273191 +801 634 -1.318738474574275 +813 634 .104677012297719 +814 634 -1.2486249660184976 +841 634 1.721452206057317 +869 634 -2.66447289985665 +874 634 -1.5641282054308092 +878 634 -1.0824852096005637 +891 634 .8678182546871718 +897 634 .161954318573168 +909 634 1.3998479034582696 +914 634 1.1429865296761401 +915 634 1.1378363754566643 +919 634 -.5780652551150871 +939 634 1.1819267667324769 +949 634 1.5916877014191075 +966 634 -1.3235129513113475 +968 634 .9099711474835576 +969 634 -.24382584708871707 +991 634 -.7677469588499554 +994 634 -.4058972828347035 +14 635 -1.3442076765984048 +21 635 -.7161747537621996 +22 635 -.13231972883865278 +31 635 .4096869522570165 +32 635 -.3277331381424769 +35 635 1.2372651104738022 +49 635 -2.736497501005071 +52 635 -.3027189929578945 +58 635 2.6429998646844206 +59 635 .41193956596343606 +63 635 .15479572324083957 +69 635 1.5342158956024536 +72 635 -.8715839193685073 +79 635 -.40400130750420576 +82 635 1.9041729590971577 +88 635 1.6483504891805754 +94 635 1.4361930688980433 +103 635 1.1626736218523077 +108 635 .9804395904636182 +110 635 .9214491457738676 +154 635 1.3004693877266296 +169 635 .18761506612567092 +170 635 -.3969336128708504 +190 635 .8788455466512001 +222 635 -.7264832897699911 +241 635 -.8323638836486279 +243 635 1.0101141168272714 +246 635 -.43106545981280087 +256 635 -.1953712801421921 +276 635 .9411958639115418 +285 635 -.559678164385365 +289 635 .9974787236112203 +306 635 -.19753492025083158 +309 635 2.2349566037876403 +324 635 -.7560472333703454 +340 635 .19918502001173663 +359 635 -1.045480484138838 +372 635 .8189624518563474 +385 635 -.0877344557497094 +389 635 .18759817285493818 +449 635 -1.575754761643228 +467 635 .8118536627989812 +480 635 -.4193400842162611 +503 635 -1.4551190068831878 +504 635 -.8926176040387594 +525 635 1.0786103662818536 +526 635 1.323996838863561 +528 635 1.6878625583739457 +555 635 -1.8791457540160112 +564 635 2.898603288293722 +569 635 -1.7850065848589263 +573 635 -.2863380300534318 +577 635 2.1560498049104835 +582 635 -.13705729461505167 +624 635 .7698896274414754 +630 635 -1.0432949152508548 +631 635 -.3888722665881092 +637 635 1.7490202696494301 +640 635 .6063426539315284 +650 635 1.8839849535502826 +656 635 -.49728576504268807 +657 635 -.6475992537393607 +664 635 -.2164609700581659 +665 635 1.00548291449875 +668 635 -1.1290334030643654 +691 635 -1.2682624110616956 +697 635 .5825032710638895 +699 635 1.3901028578810626 +706 635 .8515899436741873 +708 635 -.5743571909124954 +741 635 1.8956582183614903 +744 635 .303982510284285 +758 635 -.1140200234196428 +772 635 -.6390437564435785 +775 635 -.2959766469917751 +779 635 1.0677741472887747 +785 635 .3558894320536697 +794 635 1.0123969632591399 +804 635 -.12440228097700748 +809 635 -1.41451957006869 +833 635 -.5132249284094516 +845 635 -1.0567662179854518 +850 635 .27230189365456775 +857 635 -.9262425487650752 +859 635 1.0631707492932625 +871 635 -1.845548047701299 +879 635 -.8142298911975754 +902 635 .3380424588431016 +910 635 1.6571316784337524 +917 635 .29831203862352673 +931 635 .3662775182981165 +935 635 -1.0307730740923415 +945 635 2.846642679290205 +952 635 -1.43430068815546 +953 635 -1.1488293994722127 +964 635 -.23714352815253475 +965 635 -2.0246437749877924 +975 635 -1.1283396962056587 +7 636 2.1549635093800696 +23 636 -.9389417036063036 +51 636 .20121003679913887 +52 636 2.393710890169076 +53 636 -2.352359852907897 +56 636 -.7267595570438582 +58 636 -.4955161785655115 +59 636 -2.1336151472027076 +83 636 1.4514649287852772 +88 636 -1.2984527612859578 +91 636 -.8646444305194632 +104 636 1.652225128490057 +108 636 1.6453650114147065 +112 636 1.5766588365451844 +118 636 -1.60043641526305 +120 636 -2.2318475245450036 +127 636 -.20223642562923277 +147 636 -2.1625385095236216 +167 636 .8918539600278813 +174 636 1.1050239051043582 +178 636 .05649871264514178 +199 636 -1.1888172802877133 +203 636 1.0213997271597646 +208 636 2.4385610749591615 +209 636 -1.1171812991540284 +217 636 .5574581569414732 +222 636 -1.4502222371998004 +229 636 -.029292076813323076 +235 636 -1.8952181291332029 +247 636 -.8987140123521311 +252 636 -1.995722440518108 +253 636 -.259781580353561 +260 636 -1.8262548708566015 +267 636 .1041491871957615 +272 636 1.5488961072896112 +273 636 1.2388851222533048 +274 636 -1.2623747646673247 +276 636 -2.482186955386914 +298 636 .332243455667009 +332 636 -.9395429676118012 +334 636 -.0638956523645331 +341 636 -1.3381367488040974 +351 636 .9722726882954525 +362 636 -1.8781302624122376 +364 636 .38952457454718126 +366 636 -1.3028591787188022 +373 636 1.7791562407939288 +378 636 1.2863302928887914 +381 636 2.4096808338120392 +384 636 .6902209175132707 +385 636 .21783433517050024 +390 636 .1780121504195296 +395 636 -.6538729599991191 +397 636 -.06710220214244361 +406 636 2.236835159727489 +412 636 -1.27455152783429 +413 636 -.08360882226720578 +416 636 -1.1229401925606914 +417 636 1.7419715941616358 +435 636 -.32871815729416953 +443 636 .03833651909703801 +448 636 .4708824927858152 +451 636 .7139742312771628 +461 636 2.138129538900585 +476 636 -3.354714181333001 +482 636 -1.931955931694929 +496 636 .06322926748247076 +502 636 -2.8085014869387175 +513 636 -.45990293298203877 +526 636 -.32003511081185704 +529 636 .2591515307803689 +536 636 -.8555743662498676 +537 636 -.7399124509367624 +564 636 -3.177133044838524 +566 636 .4557921744378688 +577 636 .1172587750023917 +584 636 .7345139922656047 +640 636 -1.357688595540683 +645 636 -.7864706951015004 +656 636 1.2060312649895584 +659 636 2.0904057108848453 +664 636 1.6500150917907423 +679 636 1.2540960804835013 +680 636 -.13516075395594285 +700 636 -.6571914723207555 +705 636 -2.673792785597404 +708 636 .14227430736907798 +715 636 2.200241842863077 +717 636 -2.6748814924114206 +735 636 .5936164196236885 +736 636 1.2687141557202717 +737 636 .4625741017212142 +738 636 .4560833752654981 +748 636 2.0550637770080966 +749 636 .5600840448592788 +752 636 -.9978658602138117 +754 636 .2898103004330532 +761 636 -1.221341213348501 +767 636 -1.8606536809664653 +772 636 -.47946057189701746 +791 636 .2834289973611095 +794 636 -.6711735453108765 +799 636 2.613477425613555 +800 636 .9312287673244616 +810 636 -.014698410996119099 +826 636 -.9290838473641985 +837 636 1.3463106692831 +839 636 .07517020220313309 +843 636 1.7727313455460907 +845 636 -1.151626247569296 +849 636 .6196343162082265 +855 636 -.6555430989492881 +868 636 -2.1507535005402008 +881 636 1.0996133784661604 +894 636 -2.072681752731748 +904 636 -.4117872228663514 +907 636 .010316054215774903 +922 636 1.4436416245766333 +937 636 -1.246120319313558 +940 636 -2.7368938712112865 +944 636 1.0237617891611535 +946 636 .05672464672541655 +952 636 2.3416023018153833 +957 636 -1.4065970103258072 +964 636 1.7318874378722608 +988 636 1.0617285758146453 +998 636 -1.1101081720186574 +6 637 .6566499709067115 +26 637 -.05546403066250919 +36 637 -.012139814290281312 +37 637 -.9256061288523283 +39 637 -.7520071528648451 +44 637 -.6578569941556951 +68 637 .7282080551187964 +96 637 1.7350575805631885 +102 637 -1.376581222338797 +106 637 .258112673948107 +108 637 .30411489480180726 +113 637 .5998276645872171 +120 637 -.876377122898934 +126 637 -.8299368865927932 +146 637 -.5347572107510048 +158 637 -.39228330480504425 +159 637 -1.5542202853423754 +190 637 .08010442300932774 +196 637 .9752935329382253 +209 637 -.540686708503477 +212 637 -.39506822414403564 +222 637 -.9959586693825451 +225 637 .6080911268639005 +232 637 .48354975579525394 +234 637 -1.9647613047859918 +261 637 -1.8682575279732903 +270 637 .7198245507599608 +275 637 -.6891244225536656 +308 637 .15082044360918193 +312 637 1.3612009039818849 +327 637 .10536389742587779 +332 637 -.966210159265905 +333 637 -1.8226246400033639 +335 637 -.6096354770628986 +343 637 -.04031239263475144 +345 637 .10072256105834917 +350 637 .01595221139715984 +351 637 .6222784693466729 +355 637 .4283692330443481 +365 637 .7730424004532606 +368 637 -.9080053809762796 +373 637 1.0853363583905014 +390 637 .30988836512685247 +397 637 .05721509364633346 +399 637 -.12969333504048977 +414 637 -.3333663725006111 +416 637 -.11214543403010996 +435 637 -.1296955239419314 +436 637 .5193667350649341 +455 637 .2279239849628407 +458 637 .47258819179171074 +470 637 -.9498400140557883 +475 637 .5981445741146049 +481 637 -.16578666816108198 +491 637 .631327615392769 +515 637 .36402379148905234 +516 637 1.5068415167960545 +520 637 -.631545204894958 +521 637 .1163641077346222 +531 637 -.5900782212327684 +551 637 -.6970468638583668 +557 637 -.39517381134411916 +563 637 -.41362194048352907 +567 637 -.8218873101546025 +580 637 -.2101515450370783 +581 637 .0637465399358422 +595 637 -.4514083986656948 +602 637 -.09742974226713412 +606 637 .007420729951846582 +610 637 .7521726325251801 +611 637 -.9629554879179917 +627 637 -.46776578620121856 +641 637 -.9486628541436894 +653 637 .9471017087443948 +663 637 -.866760328558038 +676 637 -.7646648499931731 +687 637 .4890921794745471 +704 637 .5110290432223469 +706 637 -.6226744785532881 +709 637 1.0595326526551037 +711 637 -.7764350777645302 +714 637 .3426145030629174 +728 637 -1.1918891512083163 +758 637 -1.5700352947780352 +792 637 -.031488805520873575 +794 637 .2345431861092609 +799 637 1.3533259430936433 +811 637 .7497355898002125 +815 637 .7069695599996537 +822 637 -.12022395590677701 +840 637 .12220877648701915 +847 637 .9395201492665272 +860 637 -.37348995254916484 +877 637 .7146728488148515 +892 637 -.5441834035029778 +897 637 -.9368243361061686 +903 637 .5370116505503864 +911 637 1.1493800651453512 +928 637 .5713952143712998 +936 637 -.7786605223825781 +943 637 .8998304834350185 +954 637 -.08390304718636304 +955 637 -.13113376777620708 +981 637 -.008865728450441382 +995 637 -.8939086121265664 +997 637 -.5801833008591195 +999 637 -.5241650191954401 +1 638 -1.0331965582150706 +13 638 .5977421767030442 +16 638 1.0117767519816465 +19 638 -2.4338980518731645 +27 638 2.7722477431304435 +28 638 .8190846232731022 +36 638 1.7266078246586716 +43 638 -.04773585350862278 +46 638 -3.0102903059642325 +51 638 -1.7429555463507784 +59 638 .21451714466532365 +78 638 2.831245097374309 +83 638 2.7070806870562345 +84 638 -.3401123281706854 +85 638 -2.0879975420251418 +97 638 -2.5754701878161077 +98 638 .4088272925797237 +102 638 2.0282452299279794 +114 638 -2.44050127631382 +115 638 1.7299178011412315 +125 638 .9662875881969764 +135 638 .8972491508172336 +143 638 -2.044219302401377 +144 638 1.2575041968370564 +161 638 -.9961375952167546 +165 638 -.885466741493311 +171 638 .4721628469904988 +176 638 -.7921584659207364 +186 638 1.071394303433299 +193 638 2.2408740402186242 +197 638 3.0283748277213705 +205 638 .32462502077065586 +215 638 -.39386679194769436 +225 638 -3.810419899294381 +228 638 -.31980489211644514 +242 638 -.7970852737048442 +251 638 .7414273384731778 +253 638 -.46432930168394193 +261 638 1.1133280102398608 +275 638 3.677870690210705 +276 638 -.5267033777943928 +287 638 1.7900235679104983 +289 638 -.5440928822885875 +292 638 1.3571963755028302 +311 638 .5137716865235931 +329 638 .5367860721369306 +335 638 -.4748208976989886 +345 638 .1191176625624617 +349 638 .6056177814597523 +359 638 -1.60667501904229 +375 638 .5331480622724902 +376 638 .7356366387223943 +384 638 2.691299597735705 +396 638 -1.0070706177790298 +398 638 -.36919957860480024 +419 638 -2.8478378595975067 +422 638 .9219847647676117 +454 638 1.6177107417947867 +474 638 1.139503879437622 +491 638 -2.9961403617667206 +493 638 1.0593762808326272 +498 638 -1.585374729136212 +504 638 -1.749565896475043 +516 638 -.8791536845135475 +517 638 .9542613323925608 +529 638 .8551426539703298 +545 638 -.8354480130181778 +558 638 -2.288292911099111 +569 638 -2.007580878625232 +575 638 3.6805461882833264 +600 638 .14173908576509747 +603 638 2.444002773090522 +615 638 1.0941533124082963 +648 638 .3133162996890974 +649 638 .4031388627845579 +655 638 -2.155453055158498 +675 638 1.0925257373090922 +697 638 -.8183091179219675 +698 638 .7322898441059411 +700 638 .515205622331895 +706 638 -.21414355065972046 +707 638 -1.6862521664317018 +713 638 -.0897186849281833 +716 638 .552408337654104 +717 638 -.4841493939520962 +722 638 -.7261138628113903 +727 638 -2.002421735221111 +730 638 .023376568575916988 +732 638 1.6993285244570793 +735 638 -.1220594273803002 +741 638 1.2301887952033084 +742 638 .08842322456290225 +747 638 .3897338446681398 +758 638 1.25093920356121 +770 638 -.21560635539163048 +771 638 .5986463056910918 +798 638 -.11919455558665015 +803 638 1.1593531211140862 +808 638 1.2615899789189098 +814 638 1.4884984275845758 +838 638 1.1602161273595228 +841 638 -1.0370596637096567 +849 638 -2.4578705289085314 +853 638 -.10291547043322789 +862 638 .3618229886542897 +868 638 .9870119022870754 +871 638 -1.290433195423549 +876 638 3.309138614978058 +889 638 1.0208519772930083 +900 638 -.6894462307488204 +904 638 -.6760065244248034 +908 638 2.050346504360484 +929 638 -2.213394353071322 +950 638 .7244809217606462 +991 638 1.2808613521198522 +993 638 -1.0822419389682034 +1000 638 -.42969512657199405 +18 639 .2594504711409047 +19 639 -.26921360561297153 +22 639 .45829054276234055 +25 639 .5408662226476397 +37 639 -1.521900726598746 +41 639 .6834379735924087 +56 639 .21927558039886919 +62 639 -.197936686795796 +64 639 .8715627131348528 +91 639 .9224247730853912 +94 639 -.582778606350999 +96 639 1.4633036584078856 +106 639 .7457434650879611 +123 639 .3066981703301917 +126 639 1.5810785375838852 +131 639 .6603442409619874 +139 639 -.24174563000442936 +154 639 .061032315231890046 +162 639 -.378935626400266 +168 639 1.5741703763217512 +195 639 1.0588469203329876 +203 639 .8350558629905288 +206 639 -.9393626249380076 +210 639 -1.014639770184032 +221 639 1.9368988435729795 +225 639 .2791649148448755 +248 639 -.26901171906695975 +295 639 .16277896357632043 +296 639 -.6951217631622719 +339 639 -.8223299116021708 +341 639 .5463678951191968 +354 639 .6053070695420117 +359 639 1.7155541011936526 +368 639 -.46955135185677904 +371 639 .3854085686585897 +373 639 -.34304936654669216 +376 639 .707622924732741 +395 639 .002307403575564762 +397 639 1.1663336123580883 +401 639 1.0342095556263868 +434 639 .8079420800442838 +451 639 .11203479528162127 +452 639 2.0848125251866207 +480 639 -.06586116491811733 +483 639 -1.172648296919547 +485 639 -.9812289510686001 +498 639 .1096696979765336 +499 639 1.1552033738790657 +533 639 .40059378012349517 +544 639 1.4662320970316638 +557 639 .6380527290878983 +563 639 -.037458502777319685 +579 639 -.2773901989989054 +590 639 -.6414895392326997 +591 639 1.2831990076449866 +610 639 -1.531520025790359 +620 639 .8672081827207145 +621 639 -1.2025949048985103 +646 639 -.5533646924662639 +647 639 -.14761393641099993 +657 639 .15672641436560886 +673 639 -1.6143885961649762 +681 639 1.3710692843160701 +695 639 -.9311800620366562 +715 639 .4762634785542282 +716 639 .5286683080378448 +721 639 1.259090468194158 +741 639 -.9374614355076452 +742 639 -2.55173111748829 +760 639 -.026157929772444723 +773 639 .15417244207330882 +779 639 1.3167450830206853 +792 639 .2835023533307333 +823 639 1.5420816499995944 +824 639 -.36205439556693925 +850 639 -.9253515549572188 +854 639 -.9290730034502879 +855 639 -1.084538929674816 +863 639 1.2608817871963984 +877 639 .1680640518333026 +883 639 -.4355558639065977 +892 639 -.5585208477020663 +893 639 -1.3188970913599256 +900 639 -.10665982321668148 +932 639 .10889466246052444 +940 639 -.8275385328441074 +941 639 .47400695021981026 +942 639 .4921604341856858 +957 639 .23417773928546587 +960 639 -1.2159501695840622 +961 639 -.6015662109519948 +968 639 -.8645870223191633 +975 639 -.0783079719964408 +977 639 .628406453477995 +1 640 .5456738950836396 +7 640 -.9786093158651173 +9 640 -3.0361299584264296 +21 640 -.23171899882585234 +23 640 .1558452075391442 +26 640 -.908168986241038 +28 640 .30482063001850906 +44 640 -.6325774839213847 +64 640 -2.3926922667202852 +77 640 1.8968037825954611 +79 640 -.4985690558609139 +90 640 .8265317985707241 +93 640 -1.7638185715793326 +108 640 -.3267724756871204 +122 640 .5361751508363163 +144 640 .43763338819267705 +151 640 .19050034314966252 +165 640 .0027005792046590066 +173 640 .3221183749302233 +180 640 -.6813089176686811 +197 640 2.9537534063359114 +210 640 -.036297076412058454 +212 640 -.6598849456717581 +221 640 -1.65449658070225 +222 640 .8799683427284232 +234 640 1.3707487609164863 +271 640 -.711584193243968 +274 640 .4794530379681531 +290 640 -.662429319870917 +302 640 -.9819395592180649 +303 640 .9744672370765174 +328 640 .13934488769754794 +332 640 .09311034853994313 +341 640 -1.0793458905806728 +351 640 -1.5497933102297206 +368 640 1.1467082399532 +376 640 -.3232000499991507 +382 640 .3373881210503179 +384 640 1.792713361509845 +390 640 1.3691063742015035 +408 640 1.6614377328845298 +428 640 1.7014522554423703 +442 640 -.5140911987370335 +451 640 1.437703638672751 +457 640 1.348535420729011 +498 640 -1.8056442626556766 +510 640 .4921735362167007 +516 640 -1.7325629295350429 +553 640 1.4802034871172791 +571 640 -.4195754678368945 +574 640 -.14247674150483522 +575 640 3.191318924216886 +593 640 -1.11712065255006 +595 640 -2.0330664564538425 +596 640 .7838795949282439 +598 640 1.5196113583011954 +600 640 1.7744367975625401 +614 640 .6958832061425739 +632 640 .10210828000382756 +641 640 -1.9859784353357806 +649 640 .7301368708027989 +667 640 -.32054295167674146 +668 640 1.2652387055076055 +671 640 -2.073532341882233 +675 640 1.7516076579921678 +679 640 -2.0300037575352183 +687 640 .9279183119266061 +694 640 1.889734244465446 +697 640 .6316650852013538 +718 640 .008447060841226341 +723 640 1.5027978418803158 +739 640 -1.4614998903486691 +749 640 -.19406755966140465 +756 640 1.7949263539812348 +763 640 -1.1282117023545664 +768 640 .7171286949634764 +769 640 1.7325540576561367 +770 640 -.7141222741581654 +779 640 .8705169516066708 +797 640 -3.2645660414629014 +806 640 2.5701574555355706 +824 640 .5070987635464653 +838 640 1.6946558820722113 +840 640 .4948705455340146 +851 640 .014180736697369474 +877 640 -.45734671923774284 +889 640 .28654085427922216 +893 640 -.6022164075380803 +895 640 -1.2132660068898493 +908 640 -.7427411247945962 +918 640 .5077492637568511 +919 640 -.7858953135214625 +932 640 -1.3231218019143076 +945 640 2.310072123187865 +962 640 .30722168304491415 +966 640 .34491660328484264 +998 640 -.94920548996599 +24 641 .5974821253761737 +26 641 .4856815273196947 +33 641 .2971011102337202 +49 641 -.6891929712127073 +55 641 .31088839206254504 +66 641 -.654255708687489 +71 641 -.32892027544120894 +82 641 .29494612980054613 +87 641 .13440400956224663 +96 641 -.25688412243311887 +100 641 .2773224003650272 +101 641 1.3863198436602462 +102 641 .533680895166785 +111 641 -.5658002567812923 +116 641 .4135109445741133 +125 641 .8929258147742922 +130 641 1.4234213668427624 +131 641 -.07603312054195176 +144 641 -.2204742103043962 +148 641 -.06046127537219234 +178 641 -1.015344313068903 +195 641 .4106222082657123 +203 641 .2778450002718892 +209 641 -.33417869607057504 +210 641 .18150986783479114 +220 641 .3175682628234921 +234 641 .8847582041519909 +245 641 -.36712776624470334 +283 641 .14448568344801394 +290 641 -.4566713900305247 +304 641 -.41307693026416703 +313 641 -.21305832840473826 +314 641 -.28384872698577734 +341 641 .09033701191366901 +353 641 -.18631392796065127 +357 641 -.23041530464637838 +365 641 -.3350473409398236 +370 641 -.2755401356744418 +376 641 .5171336401591287 +394 641 .9665865954783152 +395 641 -.3060815064670713 +402 641 -.14293108748697642 +407 641 .33314016112959544 +408 641 -.9321302742537847 +413 641 1.7531346255122457 +425 641 -.28978341374837896 +429 641 .7949633228710045 +452 641 -.0730893019821186 +463 641 -.7028333940474235 +465 641 -.6038234872957006 +472 641 .30247043765235004 +476 641 -.4488372739390558 +490 641 .6206123851473145 +495 641 -.005784020816262447 +505 641 .41424085985583114 +517 641 -.2739896597747155 +538 641 -1.1261076465144852 +550 641 -1.293876862134788 +557 641 .18481979189509165 +564 641 -.05477949874171643 +566 641 -.4166414249774669 +567 641 -.9389229856867954 +575 641 -1.2122658026093354 +597 641 -.40893523247376123 +599 641 -.10215184424984394 +601 641 .5338733593205771 +602 641 .6297335333265727 +604 641 .1574106373488813 +612 641 .21316059125130965 +613 641 -.9761276281767945 +623 641 .1873948088457492 +625 641 1.1012196321104337 +655 641 .19636336346769306 +670 641 -.4985284865711994 +671 641 -.419146216075077 +675 641 .7034638146936633 +703 641 .5573974752542614 +704 641 .3467865040897306 +705 641 -.23506094813101058 +723 641 -1.3745044582937116 +748 641 .10291772080768406 +754 641 .2641570617678744 +762 641 -.09269601780013072 +764 641 -.47542369302079884 +792 641 .009185634061270445 +796 641 .15721387515373964 +799 641 -.7418247969659295 +830 641 -.18686025834631578 +849 641 .5535958917682515 +861 641 .051167299237044564 +915 641 -.7278955217420061 +925 641 -.058360009742011276 +945 641 .1911543185537855 +961 641 .26671391512675063 +964 641 -.24197468100628208 +973 641 .2527666892162562 +2 642 2.93736459707879 +20 642 .2789973718139823 +23 642 -1.3290157584133266 +26 642 -.02734589853419639 +35 642 -.5180077473289941 +44 642 -1.9504718809529613 +57 642 .8315339951770953 +63 642 -.493535942273793 +78 642 .1889925564282264 +88 642 .5440461896874937 +109 642 -.8762900255972774 +124 642 .3244565183361029 +128 642 1.367360358845359 +144 642 .43839558917950744 +169 642 .33182242090285474 +180 642 .06597428007218198 +192 642 .0930685741114625 +211 642 -1.091875778939854 +216 642 .5137530676543608 +240 642 -.3006910890309558 +248 642 -1.08125298992702 +250 642 1.2025734367406204 +310 642 .3873974765148579 +311 642 .23436834452604005 +322 642 3.0305311009356837 +324 642 -.0198378917896794 +325 642 .6387076483591198 +331 642 .22596214175447665 +332 642 -.21507753720066924 +339 642 -.16014700907215154 +341 642 .168294865277115 +356 642 -.19788715503916637 +357 642 .17011057911109406 +377 642 -.17763540892354482 +393 642 -.9292421727448934 +402 642 1.41619521226455 +419 642 -1.099761313301559 +442 642 -1.273698934390019 +451 642 .4256877263841985 +457 642 -.24720409042497943 +483 642 -1.359079486209322 +507 642 1.2016238542762125 +510 642 -1.3797705756745635 +518 642 .15305183286872054 +534 642 -.7501588791526785 +536 642 -1.885968427491884 +544 642 1.7250805101002102 +545 642 .6111435208289707 +552 642 -.5161147136125329 +554 642 .6500176212315752 +562 642 .23809954669910116 +563 642 -.2346046938879286 +566 642 .9438509934548672 +579 642 -.35515243842452426 +584 642 1.5978299487447942 +587 642 .08479575042067239 +598 642 -.11591695309224362 +613 642 1.0724203678663602 +636 642 .2476435077492576 +645 642 -.13568792799739515 +646 642 -1.2278006221371593 +650 642 .6144936043225798 +656 642 2.7650242754009153 +687 642 -.036329627384562024 +690 642 -.44305868043039304 +730 642 .9427109573296465 +774 642 -.3241082979105426 +784 642 -.6448959588149301 +786 642 .5743197984100474 +788 642 .5579015914236891 +801 642 1.2807037007432331 +816 642 -1.1295115650838459 +817 642 2.120111406942899 +819 642 1.4913129672722487 +824 642 -.14593746153794263 +830 642 2.270142522613206 +835 642 .585003473215667 +848 642 .7140193088847551 +851 642 .672652244192471 +870 642 -1.7283992918745443 +885 642 .5610056511043274 +906 642 -.25851797907917706 +907 642 -.5309002649131728 +909 642 -.5310401138509981 +912 642 -3.2432099955729585 +913 642 .11707566957015667 +938 642 -1.7101089987659022 +952 642 .6018980317587351 +958 642 -.30775482649419805 +968 642 -.8990202896266059 +971 642 .9118981608123747 +972 642 -1.393944021196353 +991 642 .5528579852501208 +4 643 .1149050638458941 +10 643 .4018656339244928 +18 643 -.8912759917273472 +19 643 -1.029575662671302 +33 643 .21198006364481342 +38 643 -.39104987481944314 +79 643 1.6332091743439598 +85 643 -.26431235764840055 +89 643 -.10882000935414149 +90 643 -.31533355196021223 +94 643 .7995570908471976 +99 643 .3095663241179409 +109 643 .12755113367106696 +132 643 .4862611835042655 +140 643 -.16274731019514682 +144 643 .6565935080879165 +151 643 .2516044771734408 +159 643 .15159055327336923 +163 643 .11275680608877342 +181 643 -.011245005646753486 +187 643 -2.3642510506234546 +189 643 -.9154987306460483 +192 643 -.18504211730340187 +206 643 -.5579009128724021 +207 643 .6235986680632306 +219 643 .40395104590711983 +220 643 -.3927847194261117 +221 643 -.5343299339197067 +233 643 .04111935761784839 +249 643 .19898805724079105 +258 643 -.35499721799029965 +264 643 -.13737765362759963 +265 643 -1.7377117076389688 +287 643 .39974545603722655 +295 643 .5757399907152699 +299 643 .14777743911543328 +303 643 -.7305422054780314 +320 643 .8403748915140581 +322 643 -.2544174473164355 +347 643 -.862844195374296 +355 643 .6207756850778596 +363 643 -.4113969530991669 +376 643 -.47940676226404544 +393 643 -1.134934028982144 +394 643 .10346244865435056 +417 643 -.6744314874053481 +424 643 .5387982997938899 +427 643 .16971695412458854 +428 643 -.2421826634677845 +431 643 -.1527464266234968 +436 643 .13777612750632046 +444 643 .40397923123710067 +470 643 -.0024700421922143508 +474 643 -.47516395103984527 +485 643 .8177749841918175 +493 643 1.7191843889628189 +498 643 -.32255656572106983 +508 643 -.2717706891522833 +512 643 .45007538112097994 +539 643 .07728255822728008 +545 643 .6206283493726007 +553 643 .9088242931224741 +607 643 -1.0204820618459174 +614 643 -.7038263564271646 +625 643 -1.607614540002683 +626 643 -.026528283699399052 +630 643 -.370166740879662 +634 643 -.3835486594366816 +638 643 -.8600728855779266 +648 643 .7620806305823685 +651 643 -.6456299284609531 +656 643 -.5620867121158765 +731 643 -.054933290965019095 +738 643 .6342477844897867 +751 643 .9031780550092688 +773 643 -.93596529833628 +781 643 -.27944809586602215 +786 643 .30224135700831267 +810 643 -.22509068655748202 +816 643 -.8529101269918763 +817 643 .677290504979996 +829 643 -.10466514729009405 +839 643 .5555575759205567 +841 643 .18623798143270787 +855 643 .7037696631872696 +874 643 -.118461024488275 +888 643 1.0193050253816442 +893 643 -1.106823983548245 +894 643 .6050058358514822 +900 643 .2775318777043482 +902 643 -1.1408483911728087 +903 643 -1.2626096767534611 +910 643 -.6031310545056576 +931 643 .4649058254329693 +937 643 .7054119122703214 +945 643 .5150503766811456 +957 643 -1.1930102721801676 +974 643 -.9780145748910827 +994 643 -.4042638172842732 +995 643 .34731196444608414 +5 644 -.9717330725650216 +9 644 -1.1129072355158176 +23 644 -1.82187927919101 +33 644 .497805273820121 +52 644 1.9584495866102147 +67 644 -.8917920471102039 +97 644 1.8453108663769815 +111 644 .377457299848723 +127 644 -.9469922452265234 +136 644 1.953082372155131 +138 644 1.2994581337608364 +151 644 .6061547325272636 +182 644 .19872445548134715 +217 644 -.7910543364888676 +227 644 -1.030743180138937 +235 644 -.15937131225493117 +236 644 -.4196200805627782 +238 644 .9137479810069642 +249 644 1.9348202669904828 +252 644 .21029823033785733 +260 644 .43146213151880375 +288 644 .0872823823389551 +299 644 -.35072374297609177 +329 644 .6573775150506538 +330 644 .9868059682246283 +334 644 -1.7324123053911629 +338 644 -1.252414707033825 +347 644 .7626434974077146 +354 644 -.9239287046532073 +366 644 -1.6468647584209832 +372 644 -.9788125667466235 +388 644 -1.2915293540581323 +398 644 -.5916868658341313 +421 644 -.41171345500446477 +441 644 .9488930270317502 +467 644 -1.45535113625786 +483 644 -1.2568795084540147 +495 644 -.1483510444595798 +496 644 .28934677432305833 +498 644 -.42154986876921935 +499 644 .6787350927475765 +512 644 1.3572142423663909 +513 644 1.673162906699956 +515 644 .49057342143833393 +516 644 1.1955741372231066 +538 644 -.3526422692611533 +542 644 1.473133731994832 +561 644 -1.2664790612066557 +571 644 -1.399791667570163 +573 644 1.1076041368608727 +582 644 -.6435727575635898 +583 644 -.053897923936723116 +608 644 -.043104793640039586 +609 644 -1.3439080001592132 +625 644 2.687590213725944 +633 644 .485708895643164 +639 644 -1.35511155656345 +643 644 -.4447415590337362 +644 644 -1.8777192543142194 +658 644 -.18514711982316073 +661 644 2.1639718517560027 +689 644 -.1776709330847156 +704 644 .9890968936286375 +711 644 .9197675793547752 +733 644 -.1389659355681313 +745 644 .38619686616454313 +755 644 -2.272797249745785 +757 644 -.720333060541869 +790 644 -.7464913810881396 +803 644 -.8460958548889065 +806 644 .6122283928817782 +808 644 -.14542813849328193 +816 644 .07085307434597696 +823 644 1.6019681936342134 +840 644 -.06157898284800094 +847 644 -1.0219409108796553 +861 644 2.4168155957084596 +870 644 -.958928834473701 +917 644 -.5089354197808738 +918 644 -.4354767700127922 +925 644 -.49380726324642715 +932 644 1.237071715961706 +934 644 .7136057879368871 +941 644 .1440134680046981 +942 644 -.10215400587769444 +968 644 -.9747930659628471 +977 644 1.4123531539887022 +981 644 -.17772240941383088 +1000 644 1.5760092737875027 +9 645 -.21824523211217084 +16 645 -.2671615347608553 +44 645 1.3550452217781728 +61 645 -1.412954887713003 +65 645 -.060476530381737746 +66 645 1.2939372800629219 +70 645 .07251771148031975 +72 645 .3720270074463286 +73 645 1.3414014428844896 +74 645 1.9854281145523276 +130 645 .8092061539269119 +146 645 1.0377619949435384 +147 645 -.5550192893691743 +161 645 2.5518309689063976 +163 645 .24387387240319244 +185 645 -1.6540008431054538 +188 645 .5566658703936855 +202 645 -4.210479577456027 +203 645 -.32794651503332406 +212 645 1.9857112797700525 +218 645 -3.135103916302417 +235 645 .504223360783162 +243 645 -1.4198561423526583 +246 645 -1.5820070678441998 +251 645 -2.5525124562809567 +258 645 -1.4843342594261706 +270 645 -2.942380956849426 +288 645 -2.929075541690304 +300 645 -1.0241409662022796 +301 645 -.4379494589232035 +315 645 -.5299801028397049 +326 645 -.5799660050667181 +332 645 -.3196240197102156 +345 645 1.4462589404578003 +346 645 -.6874013168499331 +368 645 -.13752635105001193 +370 645 .8462987382612099 +374 645 .056664894696347765 +376 645 1.3696795265248818 +378 645 .08117009266721413 +386 645 2.1163052350921157 +394 645 2.8159453815548265 +397 645 .9406928262678973 +401 645 -.289750705761209 +411 645 -1.6347969330621288 +414 645 2.12758808555902 +417 645 -1.5313137693199337 +429 645 -.5983537966221802 +465 645 .4709195530538078 +470 645 -1.0550956107694938 +476 645 1.5999597530198453 +480 645 -1.1393367420697558 +499 645 -1.1093069185810434 +541 645 2.982343630806288 +544 645 -3.267141650463556 +554 645 -2.1094035411077883 +556 645 -.9196547398049786 +566 645 .9394546918044833 +568 645 -1.725806292287736 +572 645 -1.5033249254771288 +591 645 .2566714463944091 +600 645 .39642183642362816 +615 645 -.019310876983296355 +639 645 .8421940896303255 +646 645 -1.0979531998625511 +654 645 -1.3182597540007661 +655 645 1.312682658197296 +659 645 -1.8900288124363818 +678 645 1.665034758185383 +697 645 .35399034589039524 +705 645 .33736124402127415 +712 645 1.8999040923019992 +723 645 .7252627318530066 +759 645 -.14161777361947997 +764 645 -1.8449505461292388 +774 645 .4962478098527658 +777 645 -1.155584209878561 +789 645 -2.8754156881757993 +799 645 -3.3268418469187946 +800 645 .3984981181394588 +817 645 -2.086542239103098 +835 645 -1.377518864221535 +838 645 -.3732287979873901 +860 645 2.0308033941486627 +887 645 1.2259163963446988 +904 645 1.393094660867709 +918 645 .6198469789137669 +921 645 -.8172911848865134 +937 645 .8905672215071966 +944 645 -1.1599539243248547 +966 645 1.0808125954495131 +991 645 -.6932467290369853 +18 646 -.9039043634268306 +31 646 -.3531012900487084 +46 646 -1.034816027133067 +63 646 -.2369110616392908 +66 646 .4008518199061621 +85 646 -.45009927640345504 +90 646 -.4021186618124164 +93 646 -.4632229225574997 +94 646 .0933930321861137 +108 646 -.8521162640208066 +120 646 -.44583959043111 +133 646 .058777943643153197 +137 646 .5487371916267738 +140 646 .44096947319444185 +145 646 -.4828579507504065 +152 646 -1.2439351519944628 +153 646 -.60139450634322 +155 646 -.6203611225277313 +162 646 .11864092842329466 +174 646 .02164596783958645 +193 646 .15810873367764938 +207 646 .48796701706736445 +212 646 .6294870792352195 +218 646 -.6660728097188209 +237 646 -.21123387301925814 +239 646 -1.6070675749167616 +243 646 .3458489533986772 +248 646 .18691604472482903 +252 646 .2519457574734434 +272 646 -.12274743385823104 +278 646 -.20321447859720734 +294 646 -.31345635479444306 +296 646 -.9213416159292029 +304 646 .1014385456482702 +313 646 .7673487874458118 +324 646 -.0016486389786528333 +338 646 .11778495286643975 +344 646 .37732368677191924 +358 646 -.4743544562762959 +362 646 .42308125773776895 +367 646 .14202829533492256 +377 646 .16571134190583134 +383 646 .015282548258320122 +386 646 -.9664897306697514 +398 646 -.07560668042018734 +417 646 .1873697957207936 +435 646 1.316939996115605 +439 646 .9780583889559642 +457 646 -.6834429519736803 +472 646 .44645822810119395 +478 646 1.4333672689965453 +492 646 -.5076208696833068 +495 646 1.0183138270209233 +512 646 -.019635987651049867 +519 646 .6863988054814687 +522 646 -.5694456031723527 +536 646 -.029230139020566787 +555 646 -.2178361678346456 +564 646 .33951023545563797 +572 646 .0037175411071444786 +574 646 -.14810523314932011 +575 646 .2622286123597494 +581 646 -.023534373154719485 +582 646 .12832816566967312 +603 646 .31439969425556696 +612 646 .6862501896952958 +621 646 .3067658798102659 +628 646 -.3138544691681163 +645 646 -.5711944469678911 +670 646 .23512893736415022 +676 646 .665359532829557 +679 646 -.6527499812032834 +681 646 -.9006128271990134 +684 646 .09666548315874052 +692 646 -.32493402502973223 +694 646 .9873638795859789 +700 646 -.3204612162261781 +702 646 -.046237978166808774 +704 646 .5091626897603717 +708 646 -.84636332285475 +718 646 .9755286599597809 +723 646 .5883355436067744 +737 646 .2752775071378599 +748 646 .07599230233145973 +750 646 -.06628510769887909 +757 646 -.33489225447659976 +759 646 -.10423380087252021 +770 646 -.5459026740968878 +787 646 -.1783802844533107 +792 646 -.20887282793556955 +793 646 -.8656328550215447 +812 646 -.3020026907545527 +839 646 .15877158233754862 +842 646 .7935874774162927 +845 646 -.5305310150106413 +848 646 1.46027549207943 +850 646 -.31730610542159404 +856 646 .3067502730717558 +857 646 -.37343050986866794 +862 646 .4781759307312823 +883 646 -.45210073675394713 +884 646 -.05092237408475585 +888 646 .7036756886742837 +900 646 -.4724894688291932 +902 646 -.3397601765784904 +924 646 .16775678821256645 +933 646 -.1909339224662694 +944 646 -.0350050398213452 +959 646 -.14486451033127867 +978 646 .06395638095537054 +985 646 -.1511120168882441 +995 646 1.4249561100073713 +996 646 .6779704646854747 +1000 646 .57241655257081 +2 647 .15407262133670846 +5 647 -.8574626941121753 +28 647 -.13882531826616495 +37 647 -1.233696596056229 +42 647 .5074281893529872 +49 647 1.4578209780550953 +64 647 .6872051979427992 +80 647 -1.6347703350378857 +81 647 .7920678495836379 +82 647 -1.614598715549973 +90 647 -.45374718686619087 +129 647 3.649245824570621 +132 647 -.8420227142967792 +133 647 -.6670037387986956 +163 647 -.8661044551943108 +167 647 2.112760285172137 +169 647 -2.7648312095218666 +198 647 -2.004819699588051 +218 647 -1.027256038846859 +222 647 1.3505741623603231 +226 647 -2.2154438367209086 +231 647 .86864742009078 +241 647 -1.9462454046604654 +266 647 -.25475757263318155 +275 647 .01477293768820672 +280 647 -.3856296056373498 +301 647 -2.6960625740558433 +309 647 .05686197202844519 +326 647 .45981095085671814 +341 647 .6011044660106662 +389 647 -.7307761076302399 +416 647 1.613528433349525 +440 647 -1.1625772684244546 +448 647 -.7674418629350425 +469 647 -.2677776114542272 +472 647 .6841778054548087 +477 647 .7722396395871358 +486 647 1.7340779448609849 +503 647 .8240003193917449 +510 647 -2.434203933473985 +511 647 -2.614670088845426 +514 647 -.0026948234970176066 +515 647 -.9202662253300152 +527 647 -2.5882265679587233 +528 647 -.9732959930774241 +536 647 1.4648102717896068 +538 647 -1.1435259514343523 +573 647 -.06464284706331208 +602 647 -1.7142707695936248 +630 647 -.6733597454014917 +633 647 .37947605635319914 +636 647 .9937994125028364 +638 647 -1.7222654815329428 +643 647 .8477600128232857 +647 647 .027382371278906914 +654 647 1.9291606830367685 +685 647 -2.643445856872453 +697 647 1.5860987760328058 +704 647 -.6109190787324225 +707 647 1.4643437212221067 +709 647 1.0036858691750155 +712 647 1.418951588320952 +723 647 .5699902636804224 +728 647 1.6302393317135773 +733 647 -2.542557617371178 +738 647 1.0278358570304806 +742 647 -.9336549782492334 +744 647 .3936698467649358 +746 647 .2786581121921471 +750 647 1.2362330332620834 +770 647 1.3303607811337461 +787 647 1.6877314006331512 +796 647 -.5499056809694167 +805 647 2.2905750873104633 +853 647 -.6794127030720012 +873 647 -.09076233605534631 +890 647 .218375499303409 +905 647 .5942786813472736 +910 647 -2.8345001202097504 +912 647 -.937374543195248 +916 647 -.1738823098001412 +917 647 -.8783073116884965 +928 647 2.666268700219117 +929 647 -.2975937045745435 +949 647 .16583438964701847 +960 647 -.6906257602770889 +988 647 -.09837957232447325 +989 647 -.5899018992945444 +6 648 .3484346730828162 +13 648 -.4452157080958156 +22 648 -.49167325763628145 +23 648 .8650884203955863 +25 648 1.3950970654828185 +28 648 1.6680665254788494 +36 648 -.6920424379003711 +40 648 .2903667216739029 +41 648 -1.3409066519973805 +44 648 1.2167844708267217 +48 648 .4946862752083144 +60 648 .059507649532773585 +64 648 1.0710636157030937 +74 648 1.502421116898377 +86 648 .07932412871183424 +111 648 -.6190516823027571 +113 648 .5055380862386529 +131 648 .1488044927329767 +143 648 1.0795832768877542 +152 648 1.779095167784468 +154 648 .20718039824986373 +174 648 .16094155669345642 +185 648 -1.091718450428052 +193 648 -.22021153545547295 +202 648 -1.9399323772221628 +220 648 .2825072992088785 +226 648 -2.1272649553540637 +246 648 -.5964031772233223 +250 648 -.8144040877435339 +283 648 1.1451161445084752 +289 648 -.9940787299135172 +308 648 -.28462872719256216 +313 648 -.23825760381925337 +322 648 -1.4584553951110295 +329 648 -1.3257707771630114 +367 648 .03966143355489801 +391 648 .9031585258112194 +396 648 .36077468559469866 +414 648 1.4670376732472477 +415 648 .2533513672030744 +422 648 .03182493581272806 +429 648 -1.3331522437050467 +449 648 .5644876081727294 +459 648 1.0660851139378167 +462 648 -1.671394831574464 +469 648 .6701532297087367 +470 648 -.36584993437138347 +471 648 .24088570215604183 +478 648 -1.4777706604611023 +488 648 .1864757153993622 +500 648 .5321377715527134 +504 648 -.4573553702839507 +507 648 .03987837368271106 +530 648 .5648735081153295 +535 648 -.4933329275805781 +536 648 1.7546956311120159 +539 648 .39670940751752953 +547 648 -.5184795332226279 +552 648 .2326114331904892 +564 648 .7542396116889184 +576 648 -.0890809096530342 +592 648 .22340858441814626 +607 648 -.8273126893898648 +612 648 .9723015426942496 +614 648 1.1830350200466169 +620 648 1.162975923636739 +635 648 .6446973290866654 +651 648 -.3850658485722774 +664 648 -.5445031626595406 +704 648 -1.6472863317124429 +716 648 -.18405839318769024 +717 648 1.431640456171788 +723 648 .5893128497076685 +738 648 -.5590958737539323 +739 648 .334832518244512 +742 648 .85844919083234 +752 648 .6492969777873938 +753 648 -.058165990926681205 +757 648 .6991044359502273 +778 648 -.23285834907821737 +783 648 -1.1616035278432921 +784 648 -.15156007862586365 +795 648 -.36530003296549407 +805 648 .46032186057032376 +829 648 .023262455286043905 +833 648 -.6707920487310014 +841 648 .15827226893023472 +866 648 -.5653401756916596 +874 648 1.1564447724236293 +875 648 -1.0956581539132204 +905 648 1.6277579192623435 +913 648 -.3380844076381192 +917 648 .9478865479109855 +934 648 1.0773286399460167 +935 648 -.7905242526271488 +952 648 -1.160258790157675 +957 648 1.105604770027027 +969 648 1.129692207411286 +972 648 1.8336729517124009 +992 648 .026109674228909592 +1 649 .7271246193719378 +29 649 .49886369202874375 +33 649 -1.0739767968805287 +37 649 -.12582134446927093 +48 649 -1.793164136925481 +51 649 -.14079554423421695 +60 649 .2421434378728676 +120 649 -2.7922141595344128 +127 649 1.0881730633912976 +131 649 -.6974213991607009 +171 649 .3413927562364664 +193 649 -1.2510014897337947 +200 649 -1.3092208483397099 +203 649 .5252774760380108 +212 649 1.4172470393509267 +220 649 -.5775005571541765 +232 649 -1.6502797789271482 +238 649 .3173217892089121 +241 649 .7193146213132291 +242 649 1.4821358810337866 +250 649 -.4316359026582596 +251 649 1.2579398198560763 +252 649 -.8307214189839237 +261 649 -.5442701212805937 +272 649 -.8244203881823747 +279 649 -.848901863862149 +281 649 -1.5152533717892214 +321 649 .7027895204234217 +329 649 .24607613182401514 +338 649 1.7930899797826565 +362 649 -.21084769011438825 +363 649 1.9407258339883153 +365 649 .500957010583945 +367 649 -.05482634264026588 +373 649 1.3195633792705468 +374 649 -.7942527340165926 +409 649 2.6204897617970935 +420 649 2.312167858917608 +433 649 -1.2614184475873602 +439 649 .9002938539648271 +458 649 2.2661984211942308 +459 649 .6086775975709311 +462 649 1.211645186297361 +463 649 .38667668274530087 +466 649 -.4398537192015504 +478 649 -.22273739564078687 +484 649 -2.850235755854961 +486 649 1.1938140241193718 +487 649 .49775233158018223 +496 649 -.08495323168095396 +502 649 -.5034877612541162 +600 649 -.2988858581407487 +608 649 .0437388593752225 +611 649 -2.200895407489136 +632 649 -.4196869325618989 +633 649 -.37093218250870297 +645 649 .24465686264694145 +669 649 -.3874027840054565 +675 649 -2.5071360313288573 +691 649 .2473364986946031 +702 649 -.2922685902380618 +712 649 -.3394155962236885 +728 649 -1.4122371548437556 +742 649 2.2250731678769493 +743 649 .6031614024715203 +747 649 1.2430014697682632 +754 649 .46263609556339413 +758 649 -.5245461132128986 +768 649 .2938744383980302 +782 649 -.7536135896164806 +790 649 2.263590910757617 +791 649 -1.3711618687804932 +802 649 .4881217866468715 +806 649 -1.0827017115952517 +807 649 .4161342792619709 +812 649 .4672553578862424 +815 649 -1.6445543016831827 +824 649 .8154504414029741 +827 649 .969446395652351 +830 649 -1.4017949660456241 +843 649 .4441006377449681 +850 649 .9639307654457834 +853 649 -1.17594707655565 +863 649 -.6144557217805449 +872 649 -.9796558129746457 +874 649 -.4507777937619832 +882 649 -.057367601491508706 +884 649 .267568669335798 +892 649 .05396919649848552 +896 649 -.4530765716055751 +898 649 -.346821026707385 +909 649 1.1449115765589888 +949 649 1.347053755362729 +956 649 -.40035631178947084 +958 649 -.8897499511571154 +986 649 .13063876969146576 +987 649 -.5114317054441596 +991 649 -.8360816191262713 +2 650 .8568607165282799 +9 650 -2.9487815929233054 +20 650 -1.9890035487942346 +38 650 -.9105389979328365 +46 650 -.028075445437517086 +47 650 -.7996919785356337 +54 650 .7309393289929572 +57 650 -1.2900843231262935 +82 650 -.7726781448160034 +107 650 -1.287434607094561 +124 650 -.45117603105545045 +128 650 1.1117277533865382 +137 650 1.4329583006241893 +140 650 .1697212561325917 +150 650 -.18269036879446832 +160 650 1.599632887773415 +181 650 -.24925832805184195 +188 650 1.091756562237332 +192 650 -.37091543246067454 +196 650 .05407363589852712 +198 650 1.1140072600425943 +210 650 1.6275624000089595 +232 650 -1.0640521372691896 +272 650 -.19905813971621605 +277 650 -.6585721405940892 +279 650 -1.2972232212038766 +283 650 .2072240661015854 +286 650 .8076136269789598 +291 650 1.0116618197903624 +325 650 -1.3203273286453454 +336 650 -2.549575643172166 +342 650 -1.0499966825196354 +353 650 -.9018708727814819 +357 650 .9898245385097527 +358 650 1.0589208154306151 +396 650 -1.5777749748188397 +409 650 .26549828397468894 +427 650 .21368051893775994 +428 650 -.7725071430523259 +434 650 .2510786674718916 +442 650 -.1641141685809367 +449 650 1.2180437186609294 +457 650 .06643966698750445 +468 650 .8115734269914414 +469 650 1.2706366906009965 +477 650 -1.0594253925777466 +491 650 -.15478069709541492 +492 650 .7160528452605806 +520 650 -.4942035117928969 +539 650 .14448075572637847 +544 650 -.3262092940619863 +554 650 -1.4857852881323466 +563 650 .1729405609546168 +593 650 -.2830708894256314 +606 650 -.5436477937316808 +608 650 -.9588337217316169 +611 650 -.07577673843886407 +615 650 1.9717715893279006 +618 650 1.6759378313255486 +622 650 .544741580459515 +644 650 2.327797869721489 +651 650 1.3856609602320578 +657 650 -.298078946973887 +663 650 -1.2985811505628257 +678 650 .2155726654744759 +681 650 -2.8262308741207045 +688 650 2.0866534469204456 +689 650 -1.3937483372915787 +709 650 .1977034747560577 +711 650 -1.5779871212477494 +720 650 1.3424441878352267 +724 650 -.1289409772860728 +740 650 -1.7708996693993606 +763 650 -.7718942001599086 +765 650 -1.2439007774643598 +772 650 -1.0852126159827609 +807 650 1.4527547919755468 +812 650 .5230229184416879 +818 650 1.778285620010309 +828 650 -2.3293924166413036 +837 650 -.5574523790487933 +850 650 .6140443612219835 +851 650 -.023302934768653513 +862 650 .8066915855151063 +868 650 -.9652651420062321 +872 650 -.29429516912927767 +881 650 -1.3695392817316017 +885 650 1.0952102958484797 +892 650 -1.6723831554907025 +897 650 -.3049293469146444 +913 650 -.2949933150107768 +918 650 -.38981245234330897 +921 650 .21544432828456192 +943 650 1.0222292893690303 +946 650 -.2154693451447227 +952 650 -2.4101310775236917 +953 650 1.8590541427929892 +955 650 .4016844887376948 +958 650 .6369776148552787 +959 650 .08991500006009019 +962 650 -.438792041827552 +966 650 -.5125536878577132 +968 650 1.83089141125551 +980 650 -.3034418023095204 +984 650 -.6211077051705647 +40 651 .9384772428828254 +43 651 -.30852535225769673 +44 651 -.9179273560654715 +67 651 1.2817994478001546 +76 651 -.1615071896478053 +91 651 .46314458487046867 +125 651 -.3153041151143081 +126 651 .1263136093347268 +142 651 .46193595906088536 +145 651 -.24424814557151037 +150 651 .5481102164510423 +157 651 -.4276317818167894 +185 651 -.21334105540479706 +194 651 -.35509357974727906 +234 651 -.4854662539602601 +235 651 -.12121497397708325 +246 651 .24298726804605741 +247 651 -.2702599406606198 +265 651 .6627380123257345 +273 651 -.08746070438988575 +286 651 .5654441179253077 +305 651 .29422278023979215 +333 651 -.6211442566242074 +341 651 .6594269139901413 +350 651 .05172360861741947 +358 651 .9097076356244536 +361 651 -1.8903364408036964 +368 651 -.7168872466990186 +370 651 .24562249687610369 +385 651 -.0490137082978814 +392 651 -.7577166405003428 +398 651 -.1747933643382747 +409 651 -.6213747668188723 +410 651 -.29917349115409775 +411 651 -.34893000796838264 +418 651 -.6481879172625069 +425 651 -.2336999282667384 +428 651 .33330530631234884 +454 651 -1.0694583240756677 +495 651 -1.598425122775818 +498 651 .692244189587667 +499 651 1.2398778491023281 +526 651 .5823285131121881 +529 651 .15019456005892928 +531 651 .18900911478768692 +537 651 .09867906149633356 +542 651 .14025684360308777 +545 651 .22280313917613892 +547 651 .047688576330913765 +560 651 -.25420997702281234 +569 651 .5486646940980607 +576 651 -.9011451438899742 +577 651 -.8162838570951433 +583 651 -.26622177251168494 +591 651 .31457240866027913 +625 651 .2344430177681998 +632 651 .18336490401964042 +633 651 -.21257450247769918 +635 651 1.2919612103298546 +638 651 -1.2047431468932774 +642 651 1.2243405021551812 +650 651 .26120233099342194 +672 651 .6455953121147456 +684 651 1.038244107767544 +696 651 -1.315984693942016 +697 651 .47412637204848584 +700 651 .6282805569274363 +710 651 -.4986470044093821 +714 651 .24349678525937485 +718 651 -.33577105007989616 +730 651 -.7583321387739174 +741 651 .24908364639447228 +759 651 -.11082992466068502 +770 651 .48708598139005854 +783 651 -.11982138806162113 +786 651 -.4223078144101292 +787 651 .7071549839859599 +834 651 .2449617589974442 +835 651 -.6703839140079982 +838 651 -.38606239548129306 +872 651 -.2757346017581347 +876 651 -.959674867387384 +880 651 -.4133158086111659 +888 651 -.6965333195587843 +908 651 1.1302965327217047 +916 651 .3324821069503884 +921 651 .038371574813982824 +931 651 -.29352766437269295 +935 651 .6332050716785418 +940 651 .2805222221977006 +941 651 -.0776807658557923 +944 651 -.8075925839669865 +962 651 1.1482286478709154 +972 651 1.2450689158875103 +978 651 .26993309227332063 +2 652 .8491100894709008 +3 652 -1.215214544758274 +7 652 -2.148281059587583 +15 652 -.6354103597983088 +36 652 -.6669663477824036 +68 652 .19823270474696128 +74 652 -.046877525958483865 +78 652 -.28242191947483336 +79 652 2.11138324711351 +81 652 -.9757166459205385 +82 652 -.05944209684145202 +83 652 -1.4270958081874734 +91 652 1.267289961858518 +119 652 -.15304295360625605 +131 652 .55169617209261 +149 652 -1.0410928483545598 +161 652 1.0990105862414992 +173 652 -.16488385204985018 +186 652 -.20108723980094118 +192 652 -1.6800650416920766 +194 652 .5539104305399292 +197 652 .07995583648361934 +200 652 .014565304565400505 +208 652 -.3231054743342128 +214 652 -1.7110997739330245 +218 652 .6416448552534016 +228 652 -.10956096048023042 +234 652 -.7663382903417207 +243 652 1.637010358666719 +258 652 .1918552805810644 +283 652 1.261888666279356 +311 652 1.689730750481184 +315 652 .4905586942238681 +341 652 .8629352360835818 +342 652 -.6001336266015224 +344 652 1.2854281739726803 +361 652 -.26579931048600064 +370 652 .94662928781824 +371 652 .7075001538414306 +384 652 .9089918761987059 +426 652 -.7616691551994061 +432 652 -.828421290710339 +435 652 .6884165082974293 +447 652 -1.4113312578245425 +461 652 2.7835834359043643 +467 652 -.06939221158448376 +470 652 .9541861358185872 +508 652 -.2283836773328075 +517 652 2.147998435917241 +545 652 -.2071667950063385 +549 652 -.09036405610096974 +566 652 -.3693151784030752 +583 652 -2.298390435850618 +596 652 .9571058156119823 +613 652 -1.0579729655519334 +615 652 1.589914259435548 +629 652 -1.2303666251922727 +644 652 2.3398720083834745 +656 652 -.4259748524791089 +668 652 1.6660397511387286 +673 652 .5046841822162812 +697 652 1.9505979839307206 +713 652 .5550791631019507 +728 652 2.5719822936467955 +733 652 1.366749085632382 +743 652 .10193824630456214 +757 652 .9470586095509019 +762 652 -.9101818544570419 +775 652 -.06862483466814903 +795 652 2.89979724333025 +802 652 -.1024246253852391 +803 652 -2.0199141672014793 +817 652 1.1233403215842024 +833 652 -1.3448543955407888 +837 652 .9992939108924017 +841 652 -.12871660083767134 +842 652 -2.016680670418074 +858 652 2.30639025724343 +864 652 -3.012328242030037 +872 652 -.03445821074401481 +877 652 2.7344078207590297 +879 652 -1.5160759758914595 +883 652 .7504094979667686 +894 652 2.4831634934199887 +899 652 .07257647351710092 +909 652 .6425927764091356 +924 652 2.273359542088169 +932 652 -2.956212574487131 +935 652 3.2908786533313967 +938 652 -.7123588397860358 +940 652 1.0158351892847677 +946 652 .8157992102437225 +956 652 .7427278175865526 +964 652 3.033242090608089 +979 652 -.1321530933869626 +987 652 1.992150063390922 +1000 652 .5837848913648535 +2 653 -1.8594945962337663 +3 653 .5983104269366255 +5 653 .7275411849607112 +14 653 .7780212620302988 +18 653 1.4631672127400632 +26 653 -.05033890950670625 +52 653 -1.7618513489639385 +55 653 .77654726477014 +62 653 -1.1688197380927714 +70 653 .8505695283963871 +71 653 -1.399782243142827 +78 653 1.0948623096761427 +81 653 1.015524854520888 +87 653 .6860543426496134 +111 653 .17405823514040691 +115 653 1.943253215618478 +118 653 -.6390501945090397 +122 653 .08164966688963962 +124 653 .36049026103966464 +128 653 .5611264148999191 +129 653 -.3140905936785958 +140 653 .7808294663241763 +142 653 .7751691218797861 +145 653 -1.1353189131372825 +150 653 -.3524529189640824 +157 653 .239342627966376 +167 653 -2.347057574995018 +177 653 .4330303690358001 +178 653 .49908535190476 +180 653 1.0211381149537475 +184 653 .03672434084450176 +192 653 -.36590121151306726 +200 653 -.9022909821903294 +209 653 -1.339091840278502 +244 653 -2.0694031632433147 +251 653 -.7016570944865229 +267 653 .8816715628215269 +286 653 .42620120950768825 +291 653 -1.8668887380791288 +293 653 .8683124197663328 +307 653 .6636650067042459 +310 653 .11582823033792743 +314 653 .7289309419514476 +322 653 -1.5188932941218234 +329 653 -.3277824504499324 +334 653 1.2838076590698917 +339 653 2.0963111886513337 +343 653 .6604277282373493 +347 653 1.308167322854805 +353 653 -.06390663763117496 +393 653 .4720402896819214 +396 653 1.6161401130603308 +413 653 2.8246694755685406 +478 653 1.8702441385322224 +489 653 -.8479399696259193 +509 653 -.4737324346155919 +511 653 1.6235272793704356 +515 653 -.20155228863327973 +516 653 -1.0920573849384736 +528 653 -.06765279699530469 +564 653 1.0600123367351675 +566 653 -.7831093500354198 +582 653 .5250833201384343 +586 653 1.4680221551515988 +615 653 -1.6176464467995944 +618 653 -.49965250127744326 +641 653 .3955633118022932 +643 653 -1.0854613289105088 +647 653 -.3581209760266484 +648 653 -1.6571556183872855 +649 653 -.19664344145570084 +661 653 -.2487759504344705 +685 653 1.8588687539792204 +697 653 -.4812827956282834 +699 653 -.2959256680173252 +707 653 -.213461866778731 +715 653 -.05219482521767212 +732 653 -.6247293848154469 +734 653 -1.3107111814840298 +746 653 -.23239002943881493 +749 653 .8485605371109556 +755 653 .7421465267888478 +770 653 -.4211991882392482 +779 653 -1.279985174457107 +781 653 -.48723229231005205 +802 653 .4211460580643893 +804 653 .5580737711198066 +812 653 -.36883859140843606 +827 653 3.0776955388096563 +835 653 -.7473533059666096 +837 653 -1.7748830760293572 +856 653 -.22044290206160083 +862 653 .255769141402869 +864 653 -.6543462982290917 +866 653 .12917434477154638 +878 653 -.5750907218657867 +884 653 -.15301498106740688 +885 653 -1.1316105142515724 +892 653 .7327684740428995 +916 653 .1788641056295336 +920 653 .0785971182301249 +935 653 -.3398056905394562 +937 653 -.4154145197621165 +953 653 .7244722383911197 +975 653 -.024126155779996217 +980 653 -1.5458088075470047 +983 653 2.4163391849386144 +2 654 -1.185190806275285 +11 654 -1.956408152493536 +17 654 .13140887925986983 +19 654 .5185220872671922 +32 654 -1.1691079343293485 +35 654 .6116315093272067 +39 654 1.7776595946143061 +43 654 2.648954845204741 +47 654 .06603463810390131 +48 654 1.9543119621489458 +53 654 1.3993664817430067 +67 654 -.8715507956634447 +76 654 .9318150086101772 +84 654 -2.109499956604896 +89 654 .327353399421425 +106 654 .030894928408809398 +119 654 -1.1108723748791236 +134 654 -.34053529357148354 +148 654 -.3023167827647754 +177 654 .31119525131096354 +179 654 .15441487636860604 +181 654 1.2982238689311634 +185 654 -1.087615071363242 +190 654 .41791582561298757 +194 654 1.233230489764678 +197 654 .043918586307661434 +200 654 .5315284174854104 +206 654 .3083407799782857 +285 654 -.7096350444478825 +287 654 -.6655337587431377 +304 654 .6074856612942593 +321 654 -.9284257299486769 +349 654 .7717946722877309 +359 654 .21666620473401133 +360 654 -.917535603412292 +363 654 -.39822570621770675 +367 654 -.13519119233059923 +372 654 2.5450445942519058 +420 654 -.1981911005732407 +422 654 .8451350884545096 +439 654 .903847114573981 +442 654 -1.14277087370752 +449 654 -.32204681150097325 +467 654 .6487072412547817 +475 654 -1.5230815261882809 +489 654 -1.6297894221720293 +493 654 .25856095342888963 +500 654 1.9775526832102215 +510 654 1.3952273026884354 +531 654 .2677335377226584 +534 654 .8536588138364506 +539 654 .9154681562646989 +540 654 -.5665320121333783 +556 654 1.4711632486696584 +558 654 .10883844264155947 +570 654 -1.2524898542892915 +578 654 -.08818161995294313 +593 654 -.47085080842385696 +605 654 1.4212246999111837 +620 654 .9811680728757346 +622 654 -.13034072110332712 +633 654 -.6853645547254448 +662 654 -.9889712621218671 +696 654 .6756848560903964 +697 654 -1.9517334558759198 +720 654 -.12968185999599513 +722 654 .08329222556756263 +728 654 -.27974850231277193 +731 654 .07333380913306858 +736 654 -.7048122550717127 +740 654 2.72165099642014 +746 654 .7133303868431458 +753 654 -.46146817075850244 +769 654 -.7773856878906413 +786 654 -1.1675641839656237 +799 654 -.3478821616239782 +820 654 -.3206239839283307 +822 654 .19729534348378402 +830 654 -.33531960382360537 +870 654 -1.653079777551541 +872 654 .2929689470636311 +875 654 -1.5108532599804863 +886 654 -.3131890227674194 +903 654 .942748277748812 +905 654 1.5112866585877418 +921 654 1.2679731689512563 +925 654 -.28447968899371057 +930 654 1.007533388170795 +945 654 .23064048332696974 +964 654 -.34506866482585136 +968 654 .5626282887160021 +969 654 .7097027892688628 +990 654 .4088027306061709 +995 654 -1.433542351579246 +31 655 -1.1815720267126095 +55 655 -1.2528113018416747 +96 655 3.2184866800130423 +118 655 .6332662831259882 +122 655 -2.285599677346098 +125 655 -.4878522195551389 +198 655 -.24137507988432377 +214 655 -.14376383068246554 +218 655 -.2303155294655875 +228 655 -.9765912127804734 +238 655 .16540890289661422 +244 655 1.3392525423557617 +245 655 1.8520371510235 +250 655 -.877822619934009 +251 655 -2.907870680663808 +261 655 -1.6327135940404742 +303 655 .697116921597408 +339 655 -.7846712880945592 +348 655 2.488452050672746 +368 655 -1.919029074015647 +371 655 .02693198820679707 +378 655 2.3923833020959413 +415 655 -.19173723016082472 +431 655 .9672876701647802 +435 655 -.06819083000315199 +436 655 2.6345860857340484 +447 655 1.9910662970473858 +464 655 -3.909969056868073 +479 655 .5776473590434258 +487 655 -1.6263067792485477 +489 655 -.9052160873279986 +490 655 1.7126364656006667 +493 655 -3.286800099285279 +504 655 4.065266655707755 +505 655 3.473236662849802 +506 655 .6879536201308029 +513 655 .006380857530571132 +518 655 1.7552844213356333 +542 655 .6419309447987119 +552 655 2.0954979732910766 +563 655 .6926864474711415 +575 655 -2.354288299319896 +576 655 .29514360803526873 +593 655 .7982506983471869 +604 655 -.5308061730550675 +611 655 -.6926299889781171 +619 655 .3267941763294407 +635 655 3.400900948281754 +637 655 -4.515303086531319 +638 655 -.32561407232335277 +660 655 -.9949687658737633 +675 655 -.5546198442331477 +687 655 1.0195330501031918 +696 655 -1.1832052436697822 +700 655 -.3715032894884014 +715 655 2.1830315529247923 +717 655 .627099939051882 +726 655 -.015801490189489162 +738 655 -1.1669113219633331 +740 655 1.451358757307091 +761 655 -.621071366619247 +762 655 .8403431996915334 +772 655 -2.927283052808764 +780 655 .0954129509289009 +782 655 1.9990031802993466 +785 655 -.9885417895732274 +787 655 .7698556997593451 +788 655 -2.9443955205517147 +791 655 .46473240398781507 +792 655 1.9631452520390338 +796 655 -.06943034112009469 +801 655 .2781754629907652 +816 655 -.21861482908387453 +829 655 -.4684317185930429 +841 655 -.1435230735484026 +850 655 -.5247505307691991 +851 655 -1.4755323121835726 +875 655 -.02192986813212841 +878 655 .17459105818500104 +883 655 .012150416817457148 +891 655 3.219399490495577 +909 655 .4165483828024065 +930 655 .26067378034310684 +938 655 -1.004151516958101 +950 655 .9934054081824785 +978 655 -1.384194683689355 +990 655 -.5418365787102736 +994 655 1.096513351671486 +1 656 .7597717966052165 +12 656 -.46709348633782666 +13 656 .4054440255989132 +24 656 2.5537351109078315 +49 656 .4153672196492081 +62 656 -.17627233586830188 +75 656 .6502175899015967 +111 656 -.031650730490350054 +112 656 .6421250223926607 +113 656 -1.93025297251108 +114 656 1.7063655190462539 +121 656 -.07929955962967453 +122 656 .8213221030725852 +126 656 -.16023357444568895 +131 656 -.1734758931253251 +138 656 .7235930652826281 +141 656 .25261724680162356 +142 656 -1.4459301229760966 +151 656 1.9027917096039735 +153 656 -.02220396467812291 +157 656 2.434905376374142 +164 656 -1.0681038974376076 +173 656 .9508820955690005 +179 656 .23859135801527842 +184 656 -.47308649043091644 +185 656 .7361138986399681 +201 656 .0818305215586723 +206 656 -2.1119987587879256 +261 656 -.4853099044656292 +271 656 -.13330357556159741 +277 656 -.9544822602767503 +284 656 -.009931624048542503 +306 656 2.3449870375727957 +310 656 -.7482022077706711 +316 656 -.23490153145693124 +324 656 1.0683217640094504 +327 656 .7958641409150505 +355 656 1.3628991094280638 +357 656 1.2494171004799604 +358 656 -1.0575709401627298 +360 656 -1.4474493460726374 +361 656 .8573498934498472 +392 656 .538201485543788 +405 656 -1.0427797145788993 +410 656 .3207493069871924 +422 656 -.726451712725323 +439 656 -.44832794497912876 +446 656 .9216484194029658 +466 656 -1.1012649512347594 +470 656 -1.7462190590060191 +493 656 .7398085965003656 +495 656 .36476961107655836 +497 656 -1.6965786386324646 +505 656 .3389327174071049 +523 656 1.3365677543206516 +531 656 -.3789504589316113 +534 656 -.32562751920317257 +537 656 1.5897029029886935 +545 656 .3067533410531602 +546 656 -.1605595553215249 +561 656 -.542542544214549 +588 656 .5476853931342073 +590 656 .4460217829081163 +598 656 -1.3810214904060458 +613 656 -2.4404948775972066 +615 656 .2910464889012639 +635 656 -.7815543899554298 +650 656 -.037722194270524444 +661 656 -1.231190348174925 +666 656 .31092507545494336 +682 656 .3525164847972467 +686 656 .8668090603514998 +702 656 -.5326130784748595 +712 656 2.1067701868746376 +721 656 1.4172554391981396 +726 656 1.8909661318521176 +730 656 -.4607804180300971 +741 656 -1.4725876089832324 +762 656 -.010727105188134597 +768 656 .4522847556119021 +770 656 -.8816365986987907 +771 656 -1.6924268194574221 +777 656 -.377243379257001 +812 656 .23194919812834291 +822 656 1.4144176942168736 +832 656 1.5488264808200753 +838 656 .8818848190512821 +876 656 -1.2197389197311541 +881 656 -1.8483952752407211 +902 656 .38042364968890374 +906 656 1.073006600969821 +910 656 -1.187405069906091 +912 656 -.031865946886337565 +915 656 .1915005565836033 +924 656 .1841341644757132 +926 656 .7016456339370862 +931 656 1.2217838816206203 +936 656 .4961056920570121 +937 656 .3135769067664411 +938 656 .7587941498743215 +965 656 -.9254003888426661 +973 656 -1.280105672137769 +976 656 .323621048353884 +984 656 -.9392099991283587 +986 656 .3001117887935767 +990 656 -.08733952995454103 +991 656 -1.2056585474293287 +999 656 -.055361150815418425 +4 657 -.6615244816813315 +9 657 .26406749930754353 +29 657 -.12631922790057534 +30 657 1.1523153869896405 +31 657 1.5748966392760932 +32 657 -1.4547740458082925 +36 657 .04591164122958745 +61 657 -1.9803476310701247 +67 657 -.7109279665330143 +99 657 1.3120424804268418 +105 657 -1.0517584951143535 +117 657 -1.2176671638998626 +135 657 .7672327132426002 +136 657 -1.688725360035251 +141 657 -1.3011891560742175 +154 657 .5787934946676259 +161 657 -.6833332333650859 +162 657 .2512369480032216 +169 657 -.18023597266090793 +170 657 -.2963716058929961 +192 657 .9894894866219227 +196 657 -.02146801156762379 +209 657 .35141934114148216 +212 657 1.0882765862756567 +220 657 .5683404348151226 +224 657 -.7139955139849791 +226 657 -3.048844332786262 +227 657 3.1765920106653827 +229 657 -.5541992398031654 +234 657 2.5120804325843062 +245 657 -.43072689294600386 +257 657 1.0471081914686395 +258 657 .05028108219884045 +267 657 1.7455038964070333 +268 657 1.0686322449438812 +270 657 1.0267301755139329 +292 657 .14238700844417848 +294 657 -.4043809647685697 +298 657 .9060328263351985 +307 657 .9878166420945931 +309 657 .7988166069960484 +310 657 .007155162697935757 +323 657 .8325986219955012 +331 657 .847782968580384 +345 657 -.9438933724909517 +353 657 -1.794600490487392 +357 657 -2.0404122691340842 +359 657 -1.4124590798205923 +367 657 -.28006942881620267 +372 657 1.0332143582192874 +374 657 -.19902969368484222 +412 657 1.0569147469157942 +414 657 1.4385092793519552 +424 657 .5476509815039383 +436 657 -1.291674558941265 +437 657 .7748516023394612 +438 657 -.3551803287353445 +445 657 -.8806969102337977 +460 657 -.6906229239190882 +463 657 -1.581897689969372 +471 657 .16780571121901694 +486 657 .06349180930286621 +497 657 1.9986476604732013 +502 657 2.6608900076318722 +508 657 .5635497850827917 +521 657 -.06211488801350385 +540 657 .4209721281233258 +542 657 .10754948207238672 +549 657 .6893769517001402 +557 657 1.3445088229040338 +575 657 .40970675973199444 +580 657 -.6374559319684511 +584 657 -.17050825487193555 +611 657 1.004244359308145 +615 657 -.42327714036363884 +623 657 -.17196491076994103 +628 657 .6539662522678088 +632 657 .3951426429724964 +633 657 1.3797198898263563 +634 657 -1.3004021425286476 +637 657 -.15725794244274421 +641 657 1.4883164073849746 +645 657 -1.4802462493745434 +657 657 .7642789403830679 +666 657 -1.7830408497615045 +679 657 .009258142374709483 +684 657 -.41602266584203246 +692 657 -1.8541177601076275 +710 657 .837477600658767 +717 657 .9002195464143706 +727 657 -1.7404249289756242 +728 657 -.38934237552983736 +740 657 -.03712653200219035 +746 657 .38663456647098116 +748 657 .780964066083497 +755 657 1.5113358950463396 +776 657 .5126778073171459 +777 657 -1.3783102124502067 +786 657 -2.4144071259884843 +788 657 -.2164421573613777 +802 657 -.045989027412588396 +804 657 -.3917331657461099 +859 657 1.9306568593503386 +866 657 .41719501350359434 +871 657 -2.6277513605189107 +875 657 -1.8133037762631539 +896 657 2.578168882883942 +909 657 -1.1468029520356389 +922 657 -1.585854729033787 +938 657 1.6875926443811886 +948 657 -1.9034162085022306 +957 657 1.9202144549260147 +969 657 .8748170074052789 +986 657 -.20306308489484862 +991 657 .341231083366233 +996 657 .3107891825776725 +1 658 1.0733676433623642 +3 658 .9745430252960684 +10 658 -.5771773659973353 +22 658 .397554095690476 +34 658 .4955242760862924 +46 658 1.6838088534018234 +54 658 -1.443492953308661 +65 658 1.1579781194415364 +68 658 .07528003484973451 +72 658 .8432672064165717 +78 658 .6468051570006158 +83 658 .4514353755175258 +101 658 -4.437779851382074 +110 658 -.8080111203160588 +127 658 1.1620222602551293 +130 658 -.11373277877874005 +136 658 2.2374214899607074 +146 658 -3.077769323374131 +154 658 -1.3598022014033988 +164 658 -.6282293523263501 +171 658 -2.580144731719911 +175 658 -.8469435134116925 +206 658 .9926669979556717 +209 658 -1.1773905586976252 +211 658 -.05858421923399898 +228 658 2.1372558343211505 +245 658 2.2149437689802887 +260 658 -1.5596876067207328 +261 658 -1.8474078462478516 +276 658 -.2485255442968002 +296 658 -.9196135835865602 +297 658 .6462619883245717 +300 658 .029445114561813597 +326 658 .17084897129278181 +332 658 -1.337451342703167 +340 658 -.8991556048415273 +341 658 -1.6527121490041883 +353 658 1.7648961750569494 +354 658 2.2455821995865 +362 658 -.15429155533719602 +366 658 .08124265018198855 +385 658 -.9240496484645551 +389 658 -.671890358846935 +404 658 -.1685066830107768 +411 658 -3.2603361343254478 +426 658 -1.8030231830292138 +428 658 3.5223073407072514 +442 658 .603107034440115 +443 658 -.6844349624051145 +457 658 2.6741187410726566 +472 658 -1.5947672227897176 +489 658 1.6754237206827933 +491 658 -.8874618532708514 +503 658 -.0832268227211544 +506 658 -.4292444834108247 +513 658 .1951066432660437 +514 658 -.8726313431988063 +529 658 -.6860821978861612 +539 658 .22058381747774775 +542 658 -.3820693630486136 +571 658 2.160162697262529 +582 658 -.49231931461427836 +596 658 -1.6100804691368034 +605 658 -.1390905361890077 +622 658 .8255954484478722 +624 658 .24413348889006609 +629 658 .2257103002503498 +634 658 2.6368647497649644 +649 658 .08665336024969515 +655 658 -2.0449869478236264 +657 658 .3017969940276693 +659 658 .32749099458628983 +660 658 -1.7708337802186704 +665 658 .03471162983331176 +673 658 -.6453974524389972 +686 658 -2.396533997455915 +696 658 1.437451929399333 +703 658 -.3270651942314235 +711 658 -.6116013088559068 +741 658 -.9977406119423841 +745 658 .37916334101715965 +750 658 2.5084988442396776 +761 658 -1.045573555429566 +766 658 -.5603329376224024 +793 658 .4726449304722733 +794 658 -.9787854585575158 +804 658 .6609394302998469 +812 658 .8997077681845775 +817 658 -.7528915331410474 +832 658 .2876843620024006 +848 658 2.5076609845076807 +850 658 -.9169622969470881 +859 658 -3.0026139667344176 +882 658 .4776534580110996 +884 658 -.7071742637813142 +893 658 -.8417641264971264 +896 658 -.6634380012927188 +898 658 -2.3077279116143057 +900 658 -.9026970061938016 +916 658 -.48219766005942777 +925 658 1.136235303898371 +926 658 1.8672673257528718 +932 658 .8197171338567083 +962 658 -.7450623594247849 +968 658 .2598318676916028 +979 658 .13040061902829148 +981 658 .1796534826537881 +989 658 .8401811532646141 +999 658 .04733987924144875 +36 659 1.1847490344552234 +45 659 1.1895169500687257 +95 659 .7197971175905274 +100 659 .02023159053977619 +110 659 .5588287605334183 +114 659 .3743783495552999 +115 659 -1.115759641423365 +133 659 .7578811881566885 +177 659 .44240955576988783 +179 659 -.06211399915643437 +186 659 -.533208146859939 +245 659 1.0681255135749286 +251 659 -.03079114458936839 +253 659 .5199854683737436 +258 659 -1.3292488456169569 +273 659 1.3013143855831584 +276 659 -1.6341480297659339 +287 659 .927537413302611 +310 659 .21021159241076948 +315 659 .32263841784332903 +330 659 .42431026500963137 +335 659 -.09067964232179528 +355 659 .7741755573952485 +358 659 1.8757092362300192 +388 659 -1.0794507206227455 +401 659 -.17991801930452983 +403 659 -.2869701457804277 +412 659 -.9953411979852116 +418 659 -.7752862431160064 +431 659 -.11118754253787277 +435 659 -1.3267781675126005 +440 659 -1.8302462892559646 +459 659 -1.3263870957998238 +467 659 .35618086813339994 +469 659 -.8369774567713172 +495 659 .04027995133446462 +516 659 -1.2232113280629524 +534 659 -.5884803944224849 +535 659 .21790498316883392 +556 659 -.12265659998320107 +580 659 -.7936271672445956 +593 659 -.22302390491787277 +598 659 .42320857838392734 +617 659 -1.0726476353372463 +620 659 -.03495958536275767 +634 659 .7948616154537035 +635 659 -.7429397159773563 +637 659 1.2801271231925073 +645 659 1.1039074033182974 +674 659 .10365392109657537 +681 659 .26523732375519327 +701 659 -.36049917291416045 +731 659 1.688418976534507 +733 659 .723810074137814 +736 659 -.5306758873734527 +799 659 .819077199010452 +803 659 1.5808190507965008 +807 659 -1.5894324811003107 +812 659 -1.5274053244070036 +819 659 1.708318574483638 +833 659 -.22702523072923325 +847 659 1.3863457614020631 +851 659 -1.393613950443455 +861 659 -1.201525692034965 +870 659 .371188926303477 +894 659 -.3725650077097317 +897 659 -.02604178332160642 +911 659 -.715248399715611 +914 659 -.30259074249764784 +916 659 .5521634472573889 +924 659 -.4407687811703114 +927 659 -2.0297747583699963 +930 659 -.38879368043944046 +999 659 .6465708796440103 +1 660 .45555233743030127 +15 660 .6894927146259404 +16 660 -.8619905553765723 +27 660 1.0477191906912733 +37 660 -1.1230344409986397 +61 660 .24145594444715765 +84 660 1.4531676582095918 +87 660 -1.0103291601626685 +91 660 -.4142663281997044 +93 660 -.20259515882836293 +97 660 2.0956147483153935 +116 660 1.4875575475194678 +117 660 .9278268152631731 +125 660 .5796442669127078 +161 660 -.9584204457820561 +166 660 -.6526991014703933 +167 660 .5165751364308108 +172 660 -.700588655192527 +178 660 -1.0580736121048082 +192 660 .568782954974465 +196 660 1.5566522584736349 +203 660 .626082763932941 +216 660 -.6428835931077062 +220 660 .5497777943183126 +229 660 -.35828963674184955 +238 660 .40420898592061294 +241 660 -1.3866819139216853 +243 660 -.3277993347171565 +258 660 .6281989857218246 +267 660 -.14586135051587096 +275 660 -.4739078942134882 +276 660 -.5557552079391549 +287 660 -.31085788931264424 +297 660 .5249450746023452 +305 660 .016754379314527 +318 660 -1.1448911356885139 +342 660 -.9212208910506117 +347 660 .17972054063014642 +352 660 .6657425898756841 +357 660 .7802969119904611 +368 660 .41958371094716224 +386 660 -.37116838637453525 +417 660 .7549405449821979 +421 660 -.6621414926652012 +423 660 -.5091322695964673 +428 660 .7002727057079843 +433 660 -.06272674866027547 +458 660 .4300678259011953 +475 660 .46588777522395863 +481 660 .6558418579514027 +484 660 -.632957867152832 +500 660 -.14572439754370353 +503 660 -.06877938627077651 +511 660 -.22962080191273201 +515 660 .8752065938639866 +523 660 -.5331128772519014 +535 660 .41029585611454855 +544 660 1.1777004951982517 +551 660 -1.382604452635227 +563 660 -.14261935433291853 +603 660 -.6612617149293123 +615 660 -.36326477864015616 +620 660 -.5708791108882821 +650 660 -1.0404858858022288 +654 660 1.6098209617539652 +668 660 -.07864225252698592 +672 660 -1.0099320181296318 +687 660 .5625347908429371 +690 660 -.8396446592669502 +695 660 .08159300003351237 +696 660 -.6300709059035544 +697 660 -.03154308170267894 +707 660 -.3915356066877098 +728 660 -.8001645536794137 +734 660 .9266085578800805 +736 660 .14834364249700016 +738 660 .03992785134883087 +743 660 .9470462991352874 +759 660 -.08326427645085996 +763 660 .20409484968680125 +764 660 .8585523628993967 +778 660 .22176531812709446 +785 660 -.9884705378726234 +792 660 -.36557806979804824 +801 660 -.42540878101665325 +812 660 .4106521699906278 +813 660 -.1789494490901612 +819 660 -.3282784302744728 +825 660 -.6518298787812843 +826 660 .9432173799581451 +833 660 .5227337370443869 +843 660 .01620248122256497 +847 660 .33907534774189185 +866 660 .632953157035821 +871 660 .5088053394967058 +882 660 .8210027894346601 +891 660 .1851516289918696 +892 660 -.871952848152673 +893 660 -.4290265707550277 +897 660 -.4168900740414937 +903 660 .2982231321112615 +917 660 -.5681110250620747 +932 660 1.1027977155427882 +957 660 -.28187864989976735 +960 660 1.08262588170397 +970 660 -.2019853661544965 +981 660 -.5528924385593394 +15 661 1.3850640856219703 +19 661 1.187122977433802 +24 661 .5134451329470324 +32 661 .724596369440641 +51 661 .20671962519666714 +60 661 .7208722960180628 +64 661 -2.0448734611576174 +66 661 -1.3029893212153423 +68 661 -.206530610489679 +80 661 1.3421449400776908 +87 661 -2.164437856158396 +93 661 -1.2760768071346396 +94 661 -.41891773499634605 +104 661 -.6576170035546901 +144 661 .3369602185829181 +169 661 2.1880435935038336 +199 661 .38464385389893807 +201 661 .03556228776194992 +204 661 -1.459565630758001 +205 661 .5407631851091792 +229 661 -1.0820094791348571 +245 661 -1.8552819869386135 +261 661 1.3546322196234986 +271 661 .2802117712457519 +303 661 1.780182791730238 +307 661 1.4556502360097339 +315 661 -.6537769471020853 +329 661 -.6473883694031825 +352 661 -2.4474771126670145 +360 661 -2.000610534339661 +365 661 .8192489659838522 +372 661 3.072435896036921 +398 661 .025777940748749825 +424 661 .5210334919467428 +432 661 .005389952346499971 +435 661 -.9607474037432775 +443 661 -.6567768488991422 +448 661 .5621371700683891 +470 661 1.5643089050285839 +494 661 1.5323968511264063 +502 661 1.0034199425905515 +520 661 1.2784598637530118 +543 661 -1.9821469777064058 +556 661 .7291918873551648 +608 661 .06785261370173076 +622 661 1.3247973432059794 +625 661 .16174573129828623 +637 661 -.8224887433682222 +645 661 .7650829466729078 +649 661 -.7825598075146772 +651 661 -.36967951719639064 +652 661 -1.582835334112684 +654 661 .33297020680719824 +660 661 .8594710771480611 +662 661 -.372858855227105 +680 661 .6117431129156095 +696 661 -1.3661365537178922 +698 661 1.3444589862663012 +715 661 -.8710101031190488 +721 661 .4804480693422312 +726 661 -1.2937152080008598 +742 661 -.8793538510808458 +774 661 .29186657078043965 +788 661 .1965167539520855 +791 661 .4321320960884665 +820 661 -1.4814181602766314 +832 661 .373943460401958 +836 661 -.07164656693591755 +841 661 -.9790155953784059 +844 661 -2.8998635162825743 +849 661 .22702353227606603 +855 661 -.3249648137204566 +866 661 1.9581396693364386 +874 661 -.04975242428648028 +879 661 -.8260197492294843 +889 661 -2.0737323045872365 +897 661 1.1342950649500478 +899 661 -1.4379091928044052 +912 661 -.3864581989292839 +915 661 .44835358975844064 +919 661 -.44132720136352627 +931 661 .797932127398678 +936 661 1.7946709472369773 +956 661 -.21164935232198173 +963 661 -1.8168939046121102 +974 661 -1.421748099067709 +978 661 -.30154484013719995 +993 661 .6346471247657065 +999 661 -.5491706301058856 +1 662 -.4095669356867972 +13 662 .1980084173096402 +17 662 1.0785794925969148 +20 662 .26935604914105693 +25 662 3.947685502967709 +28 662 1.1058693548840597 +32 662 -.9656407034584515 +37 662 -1.3427335555702147 +39 662 -1.0563536986912743 +41 662 -1.3289743487664514 +49 662 2.484647196138558 +50 662 .28539381430057603 +51 662 1.081915870528091 +52 662 .8691857165910368 +56 662 -1.7855513428841416 +65 662 1.7860797415358074 +77 662 1.3374394755146906 +92 662 .9821570597899351 +96 662 .7845597809960421 +100 662 .8434404699652752 +109 662 -1.316872063398507 +129 662 1.5341386128052292 +134 662 -.7360148318603529 +148 662 .10542254219595136 +152 662 .1568284376656839 +174 662 1.3813100378323515 +177 662 -.21458763833837488 +186 662 2.365518392491799 +188 662 .44533278250321046 +223 662 -2.1472860642757605 +224 662 -.17029668364042458 +252 662 -.46154601017447483 +257 662 -1.0033197800671272 +263 662 -1.7598559674715297 +264 662 .9718771295341442 +271 662 -1.5381848708139918 +278 662 1.1914733222211946 +284 662 -.23347175177980392 +285 662 .5575485671563545 +286 662 .36012935852285205 +312 662 1.699061527980087 +323 662 -.8479502505420562 +324 662 2.67034578897524 +330 662 1.4844950329414928 +341 662 -.5158323433006381 +405 662 .8918411694556404 +411 662 -2.3989094607520336 +418 662 -.9293845068164 +432 662 1.279716961835964 +437 662 .18817529662662918 +439 662 -.08388074323077133 +442 662 -.6904067956864935 +443 662 -.7605496333543611 +446 662 2.4226456827597893 +449 662 -2.575148210554771 +453 662 .025260289335166306 +456 662 1.0032352259284196 +457 662 .17673254104389705 +470 662 1.03471662076929 +480 662 -.9197008356207392 +493 662 -2.3690007027633593 +496 662 -.9381735240547209 +499 662 2.210351581995962 +510 662 -2.0064599381586983 +512 662 -.8285985120500817 +527 662 -.055489321533381764 +529 662 .19711181863015387 +561 662 -.6961366164970092 +573 662 .6424432535471207 +582 662 -.7255985067189723 +595 662 -.8078847714450967 +596 662 -.16761360760489985 +613 662 .7154460451534199 +642 662 3.28472246201337 +650 662 -.14360099111041846 +655 662 -.6882145827257542 +663 662 -.4190088285218942 +674 662 -.10106852880729317 +685 662 1.1956379694424455 +690 662 .6759668970110727 +726 662 -.5413735770309243 +732 662 -.9826926191631256 +742 662 .3414627950899135 +755 662 .9322975771325968 +774 662 1.1126699106900524 +785 662 -.08168094383757704 +790 662 -1.3825719129441028 +792 662 .07347522250461175 +802 662 1.951843031339873 +815 662 1.1055798689314313 +819 662 .6079704318728832 +825 662 .7552496801059594 +831 662 -1.284699918865931 +834 662 .22020542299523546 +838 662 -.9582474000196404 +845 662 1.3452928599475882 +846 662 .060931565928043885 +853 662 1.1322020802072563 +865 662 -.014517224100384613 +870 662 -.5538172354356706 +872 662 -.0037237975485567842 +880 662 -.9185025811888522 +891 662 1.2700331394791942 +892 662 -.004352044590695603 +894 662 .5445564036626864 +896 662 .27441840398958794 +902 662 1.678716814392955 +904 662 .7528429600487976 +917 662 .6545279569099123 +919 662 .010236240365834592 +936 662 -.19708567503892666 +942 662 -.8812695974241547 +959 662 -1.5385520859824435 +976 662 -.10008764561676602 +980 662 -.4936576449930315 +989 662 -.06132428650086616 +991 662 1.9613949972192248 +993 662 .4270647368415292 +994 662 2.33374648225422 +997 662 -1.2967433597947264 +3 663 -.1265728922946634 +16 663 -.25487641745767936 +24 663 2.101633284973442 +30 663 .8062884613194511 +31 663 -.531738608074027 +42 663 -.4504848397980948 +47 663 -.8150993263971079 +62 663 -.8407958868955413 +69 663 -.12547838618001528 +80 663 .25540650650693153 +87 663 -.2191614457365606 +97 663 2.0448536417311596 +116 663 1.8481110977915027 +140 663 .01981800650247545 +157 663 -.5655813878735714 +159 663 1.5309821032889448 +163 663 -.15914936275555558 +183 663 .826932138979656 +196 663 1.7023529171130203 +197 663 .1392367065030445 +223 663 .5131106157525684 +226 663 1.6245483191564258 +228 663 -.2058399773502861 +230 663 -1.3147028096429227 +248 663 -.6786689929992613 +261 663 -.030309159498421154 +274 663 1.7993586583571988 +281 663 .2366768249385438 +299 663 -1.1955833271542522 +318 663 .014155618909090423 +321 663 -1.2981546869476828 +355 663 -.4728338658176028 +357 663 1.9507007473942986 +360 663 .4645069524485112 +378 663 1.6179451170255885 +380 663 -1.1524343019009724 +385 663 .16472653691095346 +402 663 1.2991067666780434 +407 663 -1.109409835330727 +428 663 .9282404023140526 +436 663 1.8197546556192041 +440 663 .20501634692033283 +441 663 .4730002406116173 +450 663 -2.1188222152932434 +461 663 .6107577506820122 +472 663 -.6374308604874882 +489 663 .4111476474543477 +507 663 -.27479798772914826 +508 663 .2543016215824382 +525 663 -.30807404271842753 +562 663 .587576700405892 +574 663 -.3453573542994113 +577 663 -.5464807847717355 +608 663 -1.0886676289658352 +622 663 .2737717208318894 +648 663 .8823471299602426 +658 663 .2513610293822757 +661 663 .2978678533689375 +666 663 1.0405367465134066 +685 663 .8361066791295131 +694 663 .3435687719736581 +698 663 -.38587569725640875 +716 663 -.1750643321355474 +726 663 -.3558017175031317 +736 663 .9103909054747263 +755 663 -2.572881994952341 +765 663 -.6716147923447437 +776 663 -.03273604832105993 +782 663 .24178454165764443 +799 663 .43191255837685916 +800 663 .06680541319876532 +807 663 .6878393124834219 +813 663 1.1112516916338553 +815 663 -.06660573224916932 +833 663 -.4355409044133671 +843 663 .8276733134917056 +844 663 .957090889005499 +861 663 1.9671004845043263 +864 663 -.892837995406884 +876 663 -.48064834037446436 +880 663 -1.5499137433047805 +900 663 -.6211877946244424 +909 663 .17304042404028255 +913 663 -1.3207393311762343 +920 663 .11703534122666745 +945 663 .22893218348863698 +963 663 -.7818942114519614 +991 663 .4225586482303182 +19 664 1.0829852077930302 +26 664 -.6969912381504233 +30 664 -2.176616168527255 +37 664 -1.877755765739038 +65 664 -1.8621063387469947 +79 664 1.1519265600394537 +84 664 2.107349439411059 +98 664 -1.4408998196614233 +128 664 -.6973423731462468 +147 664 -.08153193152991081 +148 664 -1.1666906816539417 +151 664 .4497804620114667 +171 664 .6407773166622941 +177 664 -2.5128928539930095 +188 664 -1.0397249768822225 +196 664 .8448238213482724 +203 664 .8919209649210179 +218 664 2.7232195834290827 +225 664 -.5851441866168763 +230 664 -.6258798606328381 +244 664 .5301497026354941 +247 664 -1.1578611081837413 +251 664 2.408261980101336 +263 664 -.5945206139939757 +268 664 -.3976130509235779 +290 664 .7671100034014547 +292 664 -.6114446761147201 +296 664 -1.5953108980532895 +303 664 2.204309412841267 +305 664 .7508636337698282 +330 664 .22690570687945466 +356 664 .8751023146502388 +373 664 3.1738895163655356 +385 664 -.13422865838742984 +386 664 -.34008756188044953 +399 664 .42936404969467856 +413 664 -.26316827488944783 +422 664 -1.7701546908886123 +424 664 .5646864154056419 +448 664 -.18400293941427912 +472 664 -2.728810991363112 +486 664 2.1520632748403217 +493 664 1.5083799718665762 +505 664 -.5026883606000722 +509 664 .20964560849171582 +537 664 -.0036031023439427688 +547 664 -.15791032214141243 +550 664 1.0279732112138977 +573 664 1.254622324651229 +590 664 .319465728726623 +591 664 -.9502192595148037 +592 664 -.6724820037469026 +612 664 -.07270042550791894 +617 664 -1.8559862408905365 +619 664 -1.1434496271501535 +625 664 -2.697259224660191 +626 664 2.2411577175523743 +642 664 .1389016028840464 +661 664 1.2037154396491425 +666 664 2.2800270304923593 +675 664 -.5419845826479023 +686 664 .19085442397876412 +702 664 .25629253494578835 +722 664 1.237598326021691 +724 664 -.22021604351263768 +727 664 1.6013399361140779 +773 664 -.2017145840229888 +785 664 -1.5350522773087858 +801 664 1.1745023527939997 +833 664 .4733350360465891 +841 664 -.7027352409030917 +843 664 .7722139308490779 +846 664 -.1831717011471397 +854 664 .3525891031373959 +856 664 .8906100115331655 +873 664 -1.1919112696415524 +886 664 -.08844611660782155 +930 664 -1.3896880020932478 +937 664 -.3926319594940997 +947 664 -.1456370224834145 +954 664 -2.295468856350726 +956 664 1.3206764001687068 +969 664 -1.0119391925667585 +973 664 1.5094758823616343 +984 664 .4958120321221852 +13 665 .8597577500816418 +21 665 .9735656850990496 +34 665 -.6942647363744606 +56 665 -.5728039874832058 +62 665 -.3507964473243631 +96 665 .04879059589698103 +97 665 1.3096654976558812 +104 665 .9701668637014924 +113 665 .23090128962963397 +126 665 .13964657416198728 +163 665 -.6258875733099127 +168 665 -.6378572812131774 +172 665 .6261635720737672 +177 665 1.5033420792702559 +184 665 -1.2055587759536472 +191 665 .35327928892715305 +193 665 -.9642845947866232 +196 665 .4507267233194316 +213 665 .24282611594694287 +223 665 -.12850335249824557 +227 665 .5618544302310451 +255 665 .7849006784433583 +257 665 .5109675831326599 +274 665 .065819722800035 +295 665 .7229563884561235 +299 665 .5653946952393001 +305 665 -1.0615972858633773 +306 665 -.7025204841531614 +309 665 1.0156854847209624 +312 665 .43382284355370937 +315 665 1.2400292946730485 +320 665 -.2326743806116787 +389 665 .6969872761921467 +404 665 1.2622143062715485 +409 665 .4418376266165205 +429 665 1.2580788701443064 +454 665 -.18041407400990395 +459 665 -.49530760390622125 +470 665 .49578192383474534 +472 665 -.18160893320088878 +478 665 .6143955606217285 +495 665 1.3832825187701716 +500 665 -.9359054854838764 +510 665 -.777793287046393 +516 665 .08236408926383887 +530 665 -.6248231138671787 +537 665 -.3118834638070157 +539 665 -.35218689742974624 +543 665 -.6682245466358893 +555 665 -.34829168435504276 +556 665 -.9156190851284642 +584 665 .8386287636694696 +601 665 -.005418750413892566 +606 665 -.34887506348325026 +622 665 .0054503918570304455 +623 665 -.8731097323456553 +627 665 -.22189129882159858 +638 665 -.08313819384366339 +641 665 -.5371394172406132 +642 665 .6253965484000246 +647 665 .5803208798817758 +656 665 .6766348890947099 +661 665 1.8345048319213295 +676 665 .6351309597884441 +677 665 .2751223944249212 +685 665 .1622314969914888 +697 665 .4067170277606813 +698 665 -.1306171641697243 +718 665 .45776882931370905 +738 665 -.14170926407466194 +746 665 -.02705838180433779 +747 665 -.3054836784744541 +748 665 -.5595731571141039 +760 665 -.6473440750879443 +770 665 -1.1100764777318342 +772 665 -.22967474055653048 +773 665 -.1454818539343389 +782 665 -.19921685301696196 +787 665 -.23103731806201516 +789 665 .48028593800032593 +813 665 -.8516367194705036 +863 665 -.6468336580719711 +872 665 .49760064384420594 +882 665 .6730881495746691 +883 665 -.6968280773990909 +886 665 .5520176919390613 +894 665 -.3808173607210949 +905 665 .21258984035197256 +923 665 1.4482201612784034 +932 665 1.4497125134813194 +934 665 .6548414516478168 +935 665 -1.2677882113368328 +940 665 .6817936235032866 +943 665 -.48646567388685014 +946 665 -1.0901569080976905 +948 665 1.145563763211844 +949 665 .4210756534518565 +954 665 -.0035443609549949823 +956 665 -.3197034291856046 +972 665 -.8571961537174386 +977 665 .4681620088433091 +986 665 -.9712176617623282 +997 665 .028079257103473792 +999 665 -.48997635022158875 +37 666 .3984338919509238 +41 666 -1.133694412655858 +43 666 .186663107129612 +51 666 .766535222950563 +71 666 -2.0271860654932206 +74 666 .03323772383768815 +80 666 .927672678158078 +102 666 .3638448251304932 +130 666 .20265994817590155 +132 666 .28386609431540394 +139 666 1.046792937512107 +142 666 -.46846147712772124 +150 666 -.1344899546346876 +151 666 -1.0112585633573332 +164 666 .6618101920922002 +165 666 -.5551611779758859 +171 666 -.04563783729360826 +211 666 .570115576255712 +213 666 -.03461556369996979 +227 666 -1.8516927790348277 +255 666 .22190755951295701 +263 666 -1.1001978718049774 +273 666 -.8947933453856136 +303 666 1.807822721391251 +311 666 .501184413907905 +312 666 1.1035105982017317 +330 666 -.21135366683791693 +354 666 -1.181864589490601 +358 666 -.5287612691451316 +359 666 -.2669801396397061 +363 666 -.08726636444815655 +364 666 .15492055292510643 +388 666 -.7126614750270817 +416 666 -.43321293917714554 +435 666 -.19556564337873297 +461 666 1.5251603242581417 +467 666 -.13437962505743611 +503 666 -.017783534164890334 +518 666 .45401783495574505 +520 666 .28050784399760464 +549 666 -2.242426279344613 +557 666 -1.1839240084610805 +560 666 -.678135263391367 +569 666 -.5285515672549832 +604 666 -.021744103999909586 +641 666 -1.1929178922424248 +643 666 -1.2968521263423634 +647 666 .40684819045587584 +650 666 -.7894931075842239 +668 666 -.3907554219652105 +671 666 .10476087458049047 +683 666 .3975694397349505 +685 666 1.9087396537072596 +692 666 1.014006693235843 +695 666 .6061352304074238 +701 666 -.6691470301525013 +725 666 -1.6856672349687227 +740 666 .5687897828695333 +746 666 -.33693461659799306 +748 666 -.1301220439382123 +786 666 1.4708346389618563 +796 666 1.9771519408416989 +800 666 .9311367936654046 +805 666 -.5633020001891057 +809 666 -2.025368101920676 +841 666 -.733111619592128 +848 666 -2.08760051381258 +853 666 .4446504618023464 +863 666 -.18586493957072242 +881 666 .17579153339031636 +890 666 -.2243594856166713 +892 666 -.3387847576751936 +896 666 -.5907382560374801 +902 666 1.0673369265479713 +918 666 .7291789691260459 +962 666 -.5829281817753862 +968 666 -.23272552885767975 +969 666 2.311412937720691 +970 666 .06962769964154436 +971 666 -.8529118071406827 +974 666 -.10261738831920605 +980 666 -.4186176976909958 +4 667 -.09032482791807334 +7 667 -1.3794789205503488 +11 667 1.257833533588874 +14 667 -.16748593536865233 +24 667 -.28088611704420186 +35 667 .845283678235492 +45 667 .6894292205090944 +57 667 -.08655727579546707 +59 667 2.715029477467363 +84 667 -1.8075243954130724 +99 667 2.2501554942630952 +111 667 .2677013851838763 +117 667 -2.575082112213042 +122 667 1.7808695725225825 +134 667 -.031692707032957394 +139 667 .054851631126011546 +140 667 .04840717741396339 +148 667 .5672036700086363 +157 667 2.134121375360118 +159 667 .6596736319237673 +185 667 -.251876963985872 +205 667 -1.3875957962592762 +217 667 -.24574797818497945 +230 667 -.058752529382620614 +234 667 1.7047496553019315 +241 667 2.3025382844185516 +247 667 1.3761984204954614 +269 667 .7370255746751233 +274 667 -.10111026914764168 +277 667 -1.9552545396132452 +296 667 .7761160717861622 +299 667 -.34152943463643687 +301 667 1.4180646829787693 +309 667 -.8259325822119303 +321 667 .7887927123180118 +325 667 -.5420600956709051 +336 667 -1.2986752155983152 +340 667 1.2790433247013735 +342 667 -.2521663495350353 +348 667 -.9870048251881355 +368 667 2.990711916553651 +379 667 .27795112757440127 +382 667 .02863945751029849 +409 667 -2.666359269536582 +425 667 -.8600920702125495 +467 667 2.148916422860845 +481 667 -.7660997641266348 +493 667 1.3061555425382947 +495 667 -1.231337025089757 +500 667 1.3648816814615492 +530 667 .3018083178749715 +540 667 -.9144211171958215 +551 667 2.2328286116711737 +562 667 -.10197676381260945 +582 667 1.2852828142933295 +604 667 1.0432521536576818 +625 667 -2.551472624201077 +632 667 1.3317855803735579 +666 667 -.8292004369989652 +669 667 -.17986865464339102 +684 667 .3403232613427586 +737 667 -1.2487899761227546 +762 667 -.5854648885259299 +764 667 1.3022949324420756 +788 667 1.2710673663498855 +789 667 1.2938107183646064 +800 667 -1.463652526063325 +810 667 -1.74482621620649 +823 667 -2.0029162090437667 +842 667 .9610766431407405 +850 667 1.2059397929634113 +853 667 -2.339017639487915 +867 667 1.1644685011677298 +870 667 1.393987536146465 +885 667 .3824013117661518 +891 667 -.43437022234355893 +902 667 -2.088931188085762 +903 667 1.3405722229480985 +908 667 -.7477027213198131 +918 667 1.753327852960429 +921 667 .17395722318082396 +931 667 1.4398632727285772 +939 667 .6600642111003034 +949 667 .5342635211712627 +971 667 -.24204981282438703 +979 667 .8237897642567558 +981 667 -.32499666783605446 +985 667 .5966902536214185 +990 667 2.545486863016617 +27 668 -.1293371869752552 +33 668 -.16955137444059337 +50 668 -.5686759720886296 +67 668 -.5987279448824793 +72 668 .659646923781104 +74 668 1.279994142844769 +89 668 -.39965493065136415 +113 668 .37522677398190485 +116 668 -.7269115614311152 +136 668 -2.736875924672677 +141 668 .8601700961322811 +142 668 -.7345009641443156 +144 668 -.9734046704829278 +153 668 -.8390842069927941 +162 668 -.41549060270444327 +177 668 -.8218685754338323 +199 668 .2737559900188426 +213 668 .18273296695461053 +234 668 .5356872501894334 +248 668 -1.4939953193206839 +257 668 -1.6334044079714714 +261 668 2.454334000674213 +282 668 .9542164954051917 +291 668 .45467559950432257 +303 668 .4098541492603284 +312 668 .31523246429198576 +319 668 -.3535874106025726 +326 668 1.362885142447311 +337 668 -1.3169366711437918 +348 668 1.793778006818659 +354 668 -1.9094542773022412 +356 668 .47881998288965966 +363 668 -.7700017581743065 +381 668 -.35682589526365166 +383 668 1.3232208023589387 +393 668 .4878687436796287 +398 668 -.23137227394054266 +406 668 -.5107500537193969 +414 668 .7067886915723683 +420 668 .03345499116553609 +452 668 -.9248283304813119 +454 668 -.9916989547803445 +469 668 .9399009877709709 +495 668 .9448220214074327 +510 668 1.1418912178453309 +518 668 -.49581543941816475 +529 668 .187520039371933 +540 668 -.9668933502163697 +541 668 -.4990487761274805 +548 668 .37301490907488444 +568 668 -2.3537589113920254 +578 668 .027745751441320687 +579 668 -.012538417371581843 +593 668 -.9971037972724759 +604 668 .0897196620792206 +625 668 1.3138378643580204 +626 668 -.7518958945647293 +644 668 1.2489568929865977 +652 668 -.3527445071783981 +656 668 .7119629984714381 +658 668 .46314660443783384 +659 668 -.07769876606513507 +670 668 -.35344645249277346 +678 668 -.24053841835415174 +687 668 -.006398860888765429 +697 668 -.8572341370794785 +710 668 .29182935322651016 +721 668 .5539040398139937 +723 668 -.40710802554426284 +726 668 -.5883652752878762 +757 668 -.6540515487892026 +763 668 .7581277102117034 +765 668 1.321696133872972 +777 668 .9272658361934927 +779 668 -.3804043715319717 +794 668 .40288168818522996 +799 668 -.3919826930850296 +818 668 .17517695483640056 +819 668 -1.0310522916430078 +831 668 -1.599782166587636 +833 668 -.704863541644851 +850 668 -.9327243624350653 +856 668 -1.1997197370012171 +873 668 .08497477058696706 +874 668 .9558987643387294 +879 668 .837861931052911 +886 668 -1.2536193105854538 +937 668 -.7749530045338101 +941 668 .6040510506665654 +944 668 1.1926452290281515 +945 668 .2816813510539075 +951 668 .7512003354735894 +968 668 -.12699979596882038 +972 668 -.17212759033422026 +986 668 .45412800605561393 +989 668 .7748812023600504 +991 668 .1554104730485967 +994 668 .8616280784578696 +7 669 .1965587034350592 +18 669 -.9538412566104458 +35 669 -.40286579488720486 +38 669 -2.418548026969423 +48 669 -.456832652800539 +65 669 1.4527107510605606 +76 669 -.032523322856819886 +89 669 1.113243099449386 +111 669 .018804337311718905 +176 669 -.6918038504940909 +179 669 .4348339505339046 +183 669 .9134635395537037 +201 669 -.548700229745225 +203 669 .15860197629704068 +218 669 .6969210606405452 +236 669 -.4313864608380663 +241 669 -1.6441867809005823 +266 669 .3372833528303636 +295 669 -.6488713972545257 +322 669 .4907645987508681 +338 669 -.2498511877566203 +343 669 -.9264907668415475 +364 669 -.5066579498859379 +376 669 .02398124090957834 +409 669 .8856066086646668 +414 669 -1.411712108036067 +435 669 1.6527483540849592 +439 669 1.8309474014947145 +460 669 -.41205211408471293 +473 669 .3200784182197439 +476 669 -.43245285951217655 +482 669 -.4311171337638568 +492 669 -.3713144337353097 +495 669 .7640858446093829 +511 669 .23131644803716797 +514 669 -.8540571034960603 +545 669 -.5864138681485607 +547 669 -.27649027991242997 +554 669 -.24721574639188754 +556 669 .30945518430099594 +590 669 -.21245483376462476 +597 669 1.3090906950698111 +604 669 -.005108510884994841 +607 669 1.0212798435289545 +612 669 .975754632094793 +613 669 -1.1996657010143243 +649 669 -.581300017553434 +683 669 -.02708341576460757 +690 669 -1.6785683122930648 +693 669 -.0486014457321971 +701 669 -.12526319526913626 +711 669 -.41430102618641707 +726 669 .8112791108094239 +769 669 -.0762414247559441 +783 669 1.1160229111803015 +807 669 .9278791215527333 +813 669 -2.278028648692497 +824 669 1.2924099283379062 +825 669 .7824862443437574 +836 669 -.1288910472628581 +840 669 .8604686940937329 +841 669 -1.1032945537765724 +847 669 -1.4569088080517458 +853 669 -1.0655377552391174 +860 669 -1.3287864408382644 +872 669 -.7790233441598605 +876 669 1.2492768565968073 +886 669 2.072089116647928 +887 669 -.37526663430121276 +890 669 -1.4366465952890177 +941 669 1.1386318109959028 +949 669 2.890856815522046 +958 669 .03612184620952666 +969 669 -1.5914143988486549 +970 669 -.8006231124445499 +986 669 -.022401704980532594 +2 670 -1.5210671657548573 +13 670 -.922776268874242 +14 670 .29492059867142667 +15 670 .9829148233700898 +21 670 -.934315318370759 +32 670 -.9501215394890749 +41 670 -.5249971997863744 +42 670 .6656663993124418 +62 670 -.048720368925705956 +63 670 .3834836189150771 +89 670 -.3908306155817066 +90 670 -.05510253287124046 +100 670 .4107665286411368 +101 670 -.5636916665885181 +113 670 .4076540357999281 +118 670 -1.2932076688830358 +120 670 .16799840787401396 +137 670 .63860810860852 +151 670 -1.4252673191088516 +155 670 .7317104202587974 +163 670 -.09125639557866858 +168 670 .40208847008718807 +186 670 .44226476373403834 +191 670 .25317056142574634 +205 670 -.5441777410026494 +206 670 .6815609139463424 +213 670 -.5746657319562956 +220 670 -.03514755811969007 +235 670 .722106498546009 +238 670 -.9006621331922458 +253 670 -.049240735885135084 +260 670 1.0424910253002375 +269 670 -.047127171203360047 +283 670 .9589521224428186 +296 670 .6980062238382951 +325 670 .527313993304457 +359 670 -.757055370570831 +366 670 -.5304641481314535 +386 670 .7397691199039717 +387 670 -.5224585191231932 +388 670 .5763503067040655 +395 670 -.1547018988843395 +409 670 -2.062979582706677 +421 670 .40621360980034593 +445 670 .0401316960610611 +474 670 .8710063742719357 +477 670 -1.9921430784210308 +491 670 -.7672621309447243 +497 670 1.4274431737511848 +510 670 .6493895723493132 +511 670 .19017909790671794 +518 670 .3136524496809225 +522 670 .43648854031265805 +524 670 -.4949191897161488 +526 670 -.06064099699700226 +527 670 1.9146220558571136 +537 670 .7913955291380398 +552 670 .398425396101695 +565 670 .8075657896199092 +576 670 .2859886208320608 +586 670 .8733632946377833 +591 670 .070046538410935 +597 670 -1.3216022816537807 +600 670 1.1526367885499575 +618 670 .05960538536481941 +642 670 -.5240978377363366 +648 670 -.4578438283183514 +662 670 -2.3407759721684025 +682 670 -.004709006840587929 +686 670 -.5515657266770896 +698 670 .6342217755794023 +712 670 -1.051373543817011 +733 670 -.4051053616317454 +734 670 .7030320785901611 +737 670 -.7690575372581108 +750 670 .34095000169186734 +753 670 .38712465018723163 +754 670 -.29182431896812555 +758 670 -.9069699301426408 +777 670 -.41327297244809297 +793 670 -1.0971447161520225 +840 670 .06108156515361412 +846 670 -.5103067424088193 +865 670 .33648093433778825 +869 670 -.20957291439384945 +885 670 .11114988220070282 +894 670 1.027622775209049 +898 670 .38621108519041536 +908 670 .4310979353255685 +909 670 -.507852131368925 +916 670 -.7177841397165124 +928 670 -1.2299832883986261 +932 670 -.8792519190594532 +948 670 -1.3788118242363097 +950 670 .14425750452700287 +957 670 -.044810313996836854 +959 670 -.7231800788031982 +979 670 -.5086595436221133 +999 670 -.01120511617166374 +2 671 .06619705228409795 +5 671 -.09948577639210734 +12 671 -.5942114929623505 +20 671 .9274403325324795 +30 671 -.15159951128442845 +42 671 .3362207255665029 +49 671 2.4596164916967287 +66 671 .41429266895269773 +71 671 1.086383264980323 +74 671 -.987610633267262 +87 671 .4713134209707692 +90 671 -.5385948639281614 +91 671 .5495298292171223 +100 671 -.6000829799703508 +133 671 -1.9197252324339473 +135 671 -.6267050627752879 +158 671 -.3738855444981359 +161 671 -.8343635338587891 +169 671 -.897440691762897 +174 671 .440350646744804 +195 671 .07225785196907948 +197 671 -.9133428741024079 +203 671 .7559158575824922 +211 671 .6452092136599902 +220 671 1.7973315393468192 +231 671 -.6637068691266389 +237 671 -.36764134341923094 +241 671 -1.230593459873258 +248 671 .976317238976043 +249 671 2.214192758773283 +252 671 -.528909393477652 +269 671 -1.144118867945827 +277 671 3.1783016719015826 +286 671 -1.0778534586659703 +289 671 -.8302545561451663 +295 671 1.0038301821219637 +301 671 .04838333598268339 +311 671 -1.9732120880166093 +313 671 .4762127822092235 +314 671 -.2397406394876622 +328 671 .05284622480896893 +329 671 .5110377335108482 +338 671 -.17583310936849367 +343 671 -.5070111408081138 +345 671 1.0429882242033108 +348 671 .15112508401657151 +349 671 -1.3013374857139826 +354 671 2.291914635540537 +355 671 1.5774268078173763 +361 671 .12224572888808599 +365 671 .7770486738685338 +370 671 .20218653588940436 +384 671 -.27490592016961907 +385 671 .02972527652873483 +404 671 -1.1829954380707381 +414 671 -.5685087298750161 +423 671 -.26026755137067353 +438 671 -.7447248432091768 +465 671 -.61756363055534 +470 671 -2.272628523015848 +486 671 .0006858932207898768 +491 671 .5531740784371956 +518 671 1.0278904188175693 +525 671 -.18040733962991218 +550 671 1.6098059863209542 +565 671 1.8039426840788586 +572 671 .30534148871270933 +579 671 .9767393077272559 +606 671 .2746112518374562 +617 671 -1.7737607854230109 +622 671 -1.035591085175498 +634 671 2.9997578684797874 +641 671 -.3653081223731943 +643 671 .5250964592984422 +648 671 .16474618514608932 +657 671 .848680264408788 +690 671 1.1237448106757486 +698 671 -2.9493675827066927 +701 671 2.210933344923662 +703 671 -1.1870809083944218 +712 671 -1.3082795097897728 +729 671 .6898720882062733 +730 671 -1.4439539720452004 +736 671 2.170918425312644 +743 671 -1.8943915837652188 +744 671 .2660842397513604 +754 671 1.250435656027422 +764 671 .5695873293836458 +795 671 .7423135461296185 +796 671 -1.655517990487639 +803 671 -.11306144652810221 +826 671 1.1636737574668223 +834 671 -.001617770468772331 +873 671 -2.1966980744142783 +881 671 1.034090250214536 +896 671 -.9966398609257029 +904 671 .5371687596574244 +906 671 -1.0707373450303992 +909 671 .18203014071110935 +912 671 -.18545320470769552 +921 671 .16504970874658303 +932 671 .4885552744513738 +933 671 -.5733143070329155 +938 671 -.08107243036953724 +968 671 -1.488810403921207 +986 671 1.772031320726846 +990 671 -1.948453558182659 +9 672 1.6976484108699772 +20 672 .044689610129582336 +56 672 -.21590150138298558 +68 672 .2656973697362631 +97 672 .708088832435715 +121 672 -.6616090382114819 +134 672 .4553282709611397 +138 672 -2.096847614603579 +153 672 .14812163152876154 +166 672 .8263099346639142 +182 672 -.10757264722822671 +183 672 -.6113896727708344 +186 672 1.848435498322216 +197 672 -.7602845809666764 +198 672 1.0300984292185738 +202 672 .636954051689634 +210 672 -1.025559614275921 +219 672 -.6550866046836589 +221 672 1.1499024824737087 +229 672 -.1144837931565531 +250 672 1.2624789176625635 +268 672 -.7984674289218573 +275 672 .18025515803988146 +280 672 .1807431827125522 +282 672 1.3053152577515776 +284 672 -.25714707516690155 +317 672 -.366733680546352 +327 672 .9564784143668529 +335 672 -1.1058841916289435 +347 672 .5621966329199414 +358 672 .20354646859582776 +365 672 .08657950854829492 +380 672 .46042959631851677 +382 672 .32349853402003736 +385 672 .31658924375190656 +394 672 -1.5093324589396642 +404 672 -1.268510658390358 +410 672 .3212223138395429 +412 672 .14419751005996087 +414 672 -.6574879242108284 +425 672 .10205780592005148 +430 672 -1.785520952964013 +437 672 .2756064304175975 +443 672 -.14334138042656797 +446 672 -2.1100544231934135 +454 672 -.21845058254564645 +455 672 .1820430667544668 +464 672 -1.4998161595267094 +468 672 -.14638211201180257 +470 672 -.7738530472918961 +501 672 .405606308747192 +542 672 -.6309324126584274 +544 672 .24340489166415333 +565 672 .9132054309004858 +579 672 .45093861858938605 +593 672 .1951459230991288 +595 672 .12352895940934511 +600 672 -.3348380924729919 +607 672 -.3432963407780624 +610 672 .22149637675297257 +616 672 -.3082996127081859 +629 672 .8586485713635404 +639 672 .4045170764000342 +668 672 -.4406540090840395 +684 672 -.19696515249591492 +691 672 1.1930447989488937 +699 672 -.6942552743713928 +700 672 .09877348318951483 +710 672 -.3283450268110776 +714 672 .15060343520316538 +724 672 -.6884211795231063 +732 672 .9305390480669947 +746 672 -.9153224466631483 +750 672 2.0260138992567582 +752 672 -.07422580722959796 +754 672 .2330456706416816 +755 672 -.46890452242223624 +760 672 .29357294489205443 +765 672 .5953129060111261 +766 672 -.6671261896866986 +793 672 1.263430267327521 +801 672 -.22742971799752493 +803 672 1.1687099539970254 +808 672 -1.0211243177755758 +814 672 -.7221345136247775 +815 672 -.45235094527432645 +824 672 .0465704280506965 +829 672 1.0991334555479366 +847 672 .8848272809241002 +848 672 1.3540998933416142 +849 672 1.0545165555420866 +850 672 .45522039152166427 +879 672 1.3853226331031676 +883 672 .9749284067916149 +886 672 -.8842710801475195 +892 672 .39010004709469936 +904 672 -.6462300741042425 +912 672 1.3551063046728915 +938 672 -.34840723751882785 +943 672 -.10662512827376336 +947 672 .02472079022261922 +948 672 -.3006261168573261 +960 672 2.0023379174736595 +964 672 .2501006149927154 +969 672 1.2142630233370801 +975 672 .7253498800397316 +982 672 .8354783769238795 +987 672 1.245552760042738 +989 672 .5376446602611166 +995 672 -1.32409522480353 +32 673 -.30355531402666547 +36 673 1.4417585136431574 +39 673 -.786445482532055 +41 673 .798062619157071 +51 673 -.6916006060173168 +54 673 1.1765861902993573 +72 673 -1.9701700616517748 +80 673 -1.2777651001127468 +81 673 .053748753452272396 +86 673 -.12956260145341741 +87 673 .7338257465172532 +94 673 .6265538953986111 +101 673 -.43693530386539653 +117 673 1.7179986774366944 +133 673 -.07327778886935302 +134 673 .1855160078948911 +144 673 .9116028979166565 +150 673 .00863281698915283 +158 673 -.6703006899972999 +159 673 1.528803921269106 +160 673 -.26060360766298546 +164 673 .37058751858380745 +177 673 1.3817759891519836 +187 673 -.7572193681445514 +201 673 .8354822403659715 +225 673 -.28246514637865744 +228 673 -.7652449683995266 +235 673 -.2202502060402663 +236 673 -.7319596262875548 +239 673 .501968987653852 +262 673 .4768750474226813 +267 673 -1.8207776368869881 +278 673 .1539325242867308 +292 673 1.195126349647491 +320 673 .4247227421947817 +337 673 -.32624912479086504 +367 673 1.4441831954671818 +396 673 -1.6973017186137447 +398 673 -.5899461264437796 +409 673 -.0574474538165201 +410 673 -.2877360484090693 +412 673 -.853537762941641 +421 673 -.6783080656967305 +434 673 -.0718219164759967 +448 673 -.08983593253819738 +491 673 .3218492232531165 +501 673 3.171004075012882 +518 673 -.1405521513872934 +523 673 .593225626657304 +536 673 -.35425508094590435 +546 673 -.7776286868373334 +547 673 -.5406319820321246 +558 673 .17056669645270736 +594 673 .6628537582255143 +597 673 .7321776897654019 +598 673 -.21739073205934134 +606 673 -.30400876089917017 +618 673 -.12377575924788302 +623 673 -.8447392414335496 +651 673 -.745244516401097 +653 673 .2242167361701292 +656 673 1.0999045158062215 +658 673 -.07118633593917392 +659 673 -.10989950026459293 +668 673 1.1952421334158114 +676 673 -.11877857569655151 +684 673 .033313195172655304 +686 673 -.06653069220811864 +698 673 -1.299914554903429 +704 673 -.595045550757264 +709 673 .18370173137896145 +726 673 -.6400323357930127 +740 673 .4474910090204637 +742 673 -.9721193662813119 +744 673 -.9313440176756039 +747 673 -.7928869529767466 +754 673 .4508135965634276 +760 673 .26038462243563704 +768 673 -1.1132636469547974 +777 673 -.05240716021116322 +784 673 .21869798959467104 +794 673 -.06837964421653442 +795 673 -.8381567310971945 +801 673 1.1187632971511094 +806 673 1.1681904685607765 +813 673 -.5241733637587273 +836 673 .1518734365837836 +838 673 1.7904845630297965 +844 673 1.8726764603611734 +845 673 -.23037481764722811 +852 673 1.1615200400873156 +889 673 2.410730511285447 +893 673 -.8586030363930832 +898 673 -.5822657804718981 +901 673 .10590555111398756 +924 673 -2.659527268060999 +937 673 2.094240256335315 +945 673 1.4801475406288738 +949 673 -2.0194300641384504 +952 673 1.2067251509257853 +963 673 -.1476837574006401 +964 673 .09056392123721305 +965 673 -.3750809632097423 +987 673 2.3712448269882023 +991 673 -.861815885851908 +994 673 -1.0183827031838573 +1 674 .8473523079514697 +13 674 .08356399805156023 +29 674 -.5393394379289613 +36 674 -.6960211794517283 +56 674 -.07116577011597139 +77 674 .927515608361871 +80 674 -1.1101951947577602 +86 674 -.32513242107763785 +98 674 .7480132117749604 +138 674 -.20629579172378876 +139 674 .3452884629170531 +149 674 -.7013799370217845 +153 674 -.24918173913457842 +177 674 -.10193261628281053 +199 674 .8116954873223523 +206 674 -.27369032737078347 +232 674 -.8843194358233855 +234 674 1.5558115311452907 +237 674 -.3633744861267486 +247 674 .23886427358318044 +250 674 -.396484287779456 +253 674 .047325422205947466 +263 674 1.2044773082047915 +292 674 1.2058587294568108 +303 674 .6586432405589716 +322 674 -1.0566222991802878 +337 674 -.96382539333491 +345 674 -.37387841442164577 +348 674 .01010788284038805 +353 674 -.17496333156516974 +358 674 -.42318621533721357 +368 674 1.7301180722882799 +369 674 .13075712717815316 +371 674 .2815487612082517 +390 674 .21183900930880215 +394 674 .16689254817619248 +404 674 .13294200954397928 +405 674 -1.1526608818424386 +412 674 .8491225528304013 +421 674 -.4303146095538615 +426 674 .01573647574513562 +429 674 -.21770177722245518 +432 674 -.06166233938187306 +437 674 .6980330485230173 +440 674 .6198315245248475 +457 674 -.3709099388212135 +458 674 1.4347228126712277 +471 674 .22837720290775243 +495 674 1.3225580041743532 +496 674 .5235045410437207 +498 674 -.7697016422850402 +533 674 -.24045489616488017 +540 674 -.16167214342533873 +542 674 -.7923590804101623 +555 674 -.25916722424242267 +562 674 1.2589000379963353 +568 674 -1.515059078961568 +572 674 .13608798013211934 +575 674 .08250745785918306 +584 674 .11230421403681429 +592 674 .3567197115778487 +608 674 .17346147848911336 +612 674 .8866482924980615 +613 674 -1.1061099706729742 +628 674 -.9016768145803051 +633 674 .26235266974629023 +656 674 -.9801336760538667 +660 674 .379966671914967 +687 674 .5226529380397722 +690 674 -.3139852466318076 +723 674 1.7028896260762405 +730 674 .5240547444724979 +732 674 .5983175322101455 +734 674 -.39356259453686104 +736 674 -.06045698750610668 +745 674 .18738543604099264 +748 674 -1.0527638498471645 +752 674 1.0767689700823546 +758 674 .6265088715896019 +759 674 -.42275813428365083 +763 674 -.22095667545709405 +767 674 .1879264633788894 +792 674 -.3443423085712592 +802 674 -.2221246572933293 +817 674 -.3909239374311293 +818 674 .7058910446446717 +826 674 .229681984705646 +829 674 .05753975365826958 +831 674 -.048682481433332814 +836 674 -.24426603376271508 +840 674 1.024018395463788 +848 674 1.3991466646588548 +852 674 -1.3244087649626661 +858 674 -.2701884682993615 +873 674 1.178477181403926 +885 674 -.5092445094461154 +892 674 -.14663778908022065 +905 674 -1.2055085800128114 +909 674 .0976216922067203 +911 674 -.9301684843452491 +916 674 -.26935287076894887 +923 674 .563785871862082 +938 674 -.04252501866909847 +948 674 .08025201204483244 +950 674 .3698608436584357 +951 674 -.6325457091471105 +952 674 -2.017675511635268 +971 674 .5263419631787637 +983 674 .0239104483493546 +984 674 -.7387811334609338 +986 674 -.33806429216668005 +55 675 .5313687713978652 +68 675 -.023578311429250473 +98 675 -.10972879825556506 +118 675 .5655768360011599 +122 675 -.5117858707691816 +135 675 -.5718979630722393 +145 675 -.3271020737328657 +158 675 -.7128029663237709 +170 675 -1.5610788546405805 +177 675 2.0789697705280292 +187 675 1.8757629387416703 +189 675 1.238474215605273 +194 675 -1.476048379619625 +198 675 -1.6373704108475322 +199 675 -.4560934207254098 +212 675 -.6980241823824299 +237 675 -1.3703048510405702 +246 675 .3937576975101202 +265 675 -.35767535364810793 +283 675 .4358938720585679 +284 675 .41024759600058125 +299 675 -.5156417235528232 +312 675 .39243591818814244 +329 675 1.2657511575949185 +335 675 .6321481910295359 +351 675 1.6346141054928873 +370 675 -.28643980213632175 +377 675 .5594466949140374 +388 675 .1512318894989263 +390 675 -.5308521883159698 +414 675 .19868960790962387 +420 675 .4517613706360987 +428 675 1.5140451440558773 +446 675 1.1462236685030194 +447 675 .4345917351198737 +449 675 -1.2557383968263875 +454 675 -.6181841189116242 +467 675 -.6869994605336942 +471 675 -.5867800952858828 +475 675 .546080966512955 +497 675 -.49055595224247794 +509 675 -.33809167823301245 +515 675 -.4038675614574784 +551 675 .7244051410674459 +564 675 -.518912593695343 +573 675 .2460703095690441 +577 675 -.4795176371006237 +579 675 .9392734485916765 +606 675 -.6168521772147645 +610 675 -.9420080006572753 +613 675 .7930579424613233 +618 675 -1.6070149538481635 +622 675 -.8888511777593882 +623 675 -.10144547995551677 +628 675 -.6381525797382182 +629 675 .22768972669220094 +652 675 .5113662612313753 +663 675 .6572157763465357 +664 675 -.7036723469831899 +692 675 -1.217835540036971 +701 675 .41563718427098056 +704 675 .16786304254662854 +706 675 .7220664139408941 +720 675 -.44084431899769394 +737 675 .056947131097880785 +745 675 -.32982086849029035 +750 675 .9377770874210964 +752 675 -.8710407718363197 +754 675 .8461185386910827 +758 675 .9218492638066738 +766 675 .28204787799474057 +783 675 -.41725901950804484 +786 675 .07779974972005482 +787 675 .2426440088134717 +788 675 -.6759344388311238 +805 675 1.375906845713742 +809 675 .7274987875832797 +819 675 -.6366427940283056 +821 675 .38192334484751744 +843 675 -.04616812360141773 +855 675 -.7227034945277019 +856 675 -.0020977477818279605 +867 675 1.1536184385392825 +868 675 1.4569460898803563 +873 675 -.2835326558457938 +875 675 -.11135462191453467 +879 675 .11215374246062779 +893 675 .6885201477936168 +895 675 .9680222396045707 +898 675 .2519124964604048 +917 675 -.06586827384768623 +958 675 -.8812453284858649 +959 675 -2.2894964886346467 +970 675 .3883996108670168 +973 675 .3256831790637952 +9 676 -1.0483942773367798 +15 676 .3565645097534325 +16 676 -.9663484016647853 +22 676 -.5035063450342815 +25 676 .1292824138466963 +33 676 -2.3409794329040032 +34 676 .012674108341232192 +44 676 2.9439940240928846 +47 676 -.6375114609088668 +50 676 -2.286707391237303 +51 676 -.38641500989660915 +57 676 -1.8430227240269994 +76 676 -.7920231627053458 +88 676 -.49090552754682254 +97 676 .42712430097730963 +113 676 -2.1810912083439216 +114 676 .16346433837980506 +116 676 .2138973217830035 +121 676 -.9189813891838574 +149 676 -.46998324312422746 +159 676 -.8874378544051977 +176 676 -.335871614740107 +185 676 -.07513688191150905 +195 676 -.0343294808787598 +198 676 1.1920642928521819 +205 676 -.6281803045045672 +222 676 -.1622109773268848 +236 676 .12648456175980743 +240 676 .2722529559822999 +241 676 1.0045356973326034 +258 676 -.9211532604981645 +263 676 -.8756319507525064 +278 676 -1.9883187577584032 +289 676 -1.9755793419914132 +296 676 -.9356758653607189 +310 676 .005510484283134026 +315 676 .1966265397895075 +320 676 -.7187129005175876 +336 676 -1.1665151528022681 +341 676 -.6317384392323299 +358 676 1.1729378972238584 +362 676 -.37030943776137837 +368 676 1.5488906517609053 +371 676 .7623086674062212 +373 676 2.8178946890932877 +384 676 -.4226181869956016 +391 676 .3547496492949308 +393 676 .6143380375112066 +395 676 -.8971469209167224 +417 676 1.5669906301519303 +441 676 -.7451908774254578 +470 676 -2.342606462575641 +476 676 -1.2674649637165787 +484 676 -1.8786209321349103 +485 676 .1180952633026856 +496 676 .15253906308430815 +497 676 -.6539826687127139 +510 676 1.9825589573944866 +511 676 -.6765628445057134 +519 676 -.0029847533150937702 +520 676 -2.34980220330782 +526 676 -1.0177222595041682 +527 676 .8952413386178363 +536 676 .4709894095597671 +544 676 -.2334437951352985 +548 676 2.5128484260191284 +566 676 -.285033589216878 +567 676 -.5299199664541482 +579 676 .6219359072854819 +582 676 .19656020067479615 +599 676 1.0809623040820984 +606 676 -.8344217390916191 +607 676 -.18525422694604565 +613 676 -1.8541782807352063 +622 676 .06498551961278196 +623 676 1.9037589457587838 +630 676 .9727042816766388 +631 676 .6393130913700947 +638 676 .2358386785447596 +655 676 .30335601181449867 +672 676 -2.2203794733205484 +686 676 -1.2568152523468334 +689 676 -1.4746410614790766 +707 676 -.05492716594054632 +710 676 1.4852636887423494 +750 676 1.9034669767524193 +784 676 -.4127550354479034 +797 676 .4755438170445724 +800 676 -.7518388624022234 +806 676 -1.3338918646117495 +811 676 2.492051316506818 +817 676 -1.989104993420503 +823 676 .3512725598576916 +841 676 2.469252774053706 +847 676 .5265911015152873 +865 676 -.33523069821697726 +893 676 1.5370461365754569 +907 676 .10982510808203785 +923 676 -.8317198300206029 +926 676 1.6843144755009274 +931 676 1.8246330943827502 +947 676 -3.801528622358978 +958 676 -1.9005281858640213 +968 676 2.7582066274077506 +973 676 -1.0047874091490911 +975 676 -.27816754635350277 +999 676 -.5176779862408611 +4 677 .36437584213950713 +96 677 .5631589985541798 +113 677 -1.7543187623262588 +134 677 .8934261285002429 +138 677 -.1796072266131607 +144 677 -.725712914042923 +154 677 -.984123171335756 +158 677 -.8546270196002141 +180 677 -.16561540682568254 +181 677 -.5629737612059184 +194 677 -.1427328107110548 +203 677 .8941419092217726 +208 677 -.12635840506932805 +214 677 .9088070574651377 +219 677 .9430684409410485 +236 677 -.2086934476923394 +240 677 1.8410542301640356 +258 677 -.6713427216931488 +282 677 -.9943014810182765 +292 677 1.2647029695324825 +306 677 1.3075626806358824 +309 677 .0874556233149084 +310 677 .02548099608365467 +318 677 -.9242295381273182 +329 677 -.9813812054985455 +335 677 .3928277942336309 +343 677 -.9148636686429721 +358 677 .26745737621700466 +363 677 -.24405820578505694 +374 677 .0372795499909119 +400 677 .4109310885289802 +422 677 -1.7470179013545135 +435 677 .3434154441692555 +451 677 -.4410926624248447 +457 677 .2933782703652378 +461 677 .6704564166408464 +473 677 1.0200585251713012 +480 677 -.6089283474263524 +502 677 -1.1697315465172526 +511 677 -.40284164601368266 +525 677 -1.311188063682694 +529 677 -.8646580809218258 +579 677 .8450831657704688 +584 677 .17543680356323618 +612 677 .999587459014331 +614 677 -1.203484701132445 +620 677 -.28175698448455516 +625 677 -.6398432808386243 +644 677 .42932836881492886 +647 677 -.2566331187227744 +651 677 .40445697144672366 +653 677 .8657506050109325 +691 677 -.26374896693256794 +695 677 .47594827356606134 +716 677 .1261366161150592 +732 677 .7150830204555393 +752 677 -.45177474232595416 +762 677 -.23043357743049245 +778 677 .11704864703142748 +780 677 .1672119741399573 +786 677 .8323211459262725 +820 677 -.9046020004017602 +842 677 .39424131801182344 +845 677 -.08698658069010759 +852 677 -1.3915353498698566 +856 677 1.069081312596024 +863 677 .21486796487911042 +878 677 -.7590429878059903 +888 677 -.9598253580931406 +918 677 -.41897575282746913 +927 677 -2.069382506041484 +932 677 .6210906612726247 +940 677 -.11905925680291811 +941 677 -.38204179229640356 +946 677 .2698905016303276 +953 677 .7638526519234864 +957 677 -1.2492246341382562 +958 677 .17572983254444224 +962 677 -.5351767545253169 +972 677 -.3828332338653869 +976 677 .9617698587383473 +2 678 -.0890868841514599 +5 678 .788369078504309 +9 678 .4650426786398333 +15 678 .3460163096340762 +29 678 -.33711844384776196 +38 678 .8315462565292233 +44 678 1.0028522835625502 +64 678 .5076865948434786 +69 678 -1.1260674571451537 +71 678 -.13354186192008966 +79 678 1.1771275414583338 +83 678 -.8765743568894514 +88 678 -.1579524096312543 +91 678 .8525894820787903 +93 678 1.5529978710135657 +114 678 -.5588920868690234 +130 678 -1.0999952751254352 +131 678 -.07088971724939414 +133 678 -.48703914804988235 +142 678 .23931436064329578 +147 678 .016708064879281496 +176 678 .1502994888912963 +180 678 -.8589220705862659 +194 678 -.9650848513574671 +222 678 .9549616066774158 +223 678 .589145778430729 +234 678 -.013229091865392 +246 678 -.4687742053308357 +263 678 -.0856760794252559 +278 678 -.6062144849957342 +289 678 -.864407679608415 +294 678 .8314576049431771 +301 678 1.0947220891930032 +309 678 -.4316754057517799 +359 678 1.8121818318586298 +370 678 .33199319111110537 +374 678 .4456540058576047 +388 678 -.0649558738767235 +400 678 -.3949704003121386 +422 678 .8647707675696318 +429 678 -.1477048950202577 +434 678 .31910239493638526 +459 678 .9126866445686348 +464 678 .48158660810540777 +468 678 -.3895923725836943 +477 678 -.17980700030031155 +489 678 -.31236294486181837 +498 678 .6319237910558471 +503 678 .8392987500397882 +505 678 .7782174242407731 +519 678 1.0686992967013618 +561 678 .6652776455116851 +566 678 .3638567439955533 +574 678 .010724023136250219 +579 678 .6496948170848991 +583 678 -.009184989515531358 +601 678 .38986110750828085 +603 678 .13463463834429285 +612 678 -.9296278022021275 +631 678 .5282267897023589 +639 678 -.06510363424680164 +641 678 -.6083409283882248 +647 678 .7888694702455701 +665 678 -.6579796745963272 +667 678 -.3627675518839867 +672 678 -.39994715141614556 +675 678 -.8205022034453489 +676 678 -1.191338298931872 +683 678 .1648933676545836 +687 678 .8441995230626704 +694 678 -.8877001451769512 +717 678 1.027333104078879 +722 678 -.8314089914149536 +732 678 .5273499587804097 +739 678 -.11371044053440575 +743 678 -1.8203402932788275 +757 678 .8822414577902432 +761 678 .03715195189996157 +762 678 -.2118763850366216 +766 678 .20080892739283723 +786 678 -1.0171352379922203 +791 678 .3553292377890309 +793 678 -1.25222721578741 +797 678 -1.1557613623089522 +800 678 .5677537610340524 +801 678 -.33412223230198845 +803 678 -1.0321940431382473 +809 678 1.1749135340605334 +822 678 .05002904426366428 +840 678 .1770421256669733 +843 678 -.008652288222528233 +871 678 .25098799909570346 +875 678 .3070224734919595 +884 678 -.19865454191318777 +885 678 .6203177107368267 +889 678 1.2319304561806463 +904 678 -.022443190952572162 +907 678 -1.718798201125275 +910 678 -.7360496188043458 +923 678 .604588711640928 +931 678 -.14186289405394334 +936 678 .4134433331183741 +953 678 .33770202102792723 +971 678 1.5032155071436861 +972 678 .7533288389592734 +973 678 -.4605188322707039 +974 678 1.1095280627648478 +976 678 .42993709026833676 +986 678 -.7097984109403372 +4 679 -.9245015582028534 +12 679 .20921092248014522 +25 679 -.21419418740392665 +32 679 -1.1373237810640393 +47 679 -.8648798806862245 +56 679 -.9478046393412468 +70 679 .05278470851974733 +76 679 1.880016169448117 +86 679 1.2248721830991098 +103 679 -1.2625864770561224 +113 679 .16414330714835676 +133 679 1.1217901117843907 +150 679 -.3325223332912948 +164 679 -.31025249617114903 +180 679 -.6019909147348304 +184 679 1.1066053363354917 +185 679 -.9935126924225965 +191 679 -1.8077419215934087 +211 679 -1.6772316489388455 +235 679 1.2034967476262066 +240 679 -.8627973848345198 +241 679 .9979530026471725 +255 679 .5785772025057085 +262 679 1.5411043361204997 +268 679 1.4656194951462158 +281 679 .8391946012001266 +294 679 -.7181220988448608 +298 679 .12041899851010524 +318 679 .9733891416086586 +322 679 -1.0477377738043596 +337 679 -1.3180989185728356 +343 679 .9336617059561065 +344 679 -2.210613740976021 +348 679 -1.426322320466618 +353 679 -.13929780535611117 +354 679 -1.6477175223683318 +396 679 -1.0241595208860512 +405 679 -.5868429055762183 +406 679 -1.1431105192478332 +407 679 1.1364238912142424 +413 679 -.5102378829713473 +417 679 -.7313060783568224 +426 679 1.576847901500328 +430 679 -1.227223210815929 +431 679 -.4779119673740661 +453 679 .47608868695056283 +457 679 -.6512237633809967 +467 679 1.192694661099418 +491 679 -.9022510519274549 +498 679 -.4979566720178068 +499 679 -1.5997742923796965 +504 679 -3.3012351973914025 +517 679 -.2612727060221761 +525 679 1.2487541660307302 +527 679 .2996942727412638 +548 679 -2.220380806383735 +564 679 .8153152748758075 +569 679 -1.813221876211398 +594 679 .818304743553379 +598 679 -.24453555437834895 +604 679 .9559680269089448 +610 679 .3227890922655975 +622 679 .03725135935415466 +628 679 -.3872594283067041 +631 679 1.6060631384750108 +634 679 -1.1248918133399244 +677 679 -.2305723811044766 +679 679 -.12905636511851248 +682 679 .43282476642101453 +688 679 -.23084037741793423 +693 679 .0683154367201335 +697 679 -1.9776104492834405 +711 679 1.7858375898257388 +713 679 -.1508542465059763 +717 679 1.2698809240728015 +724 679 .19606184412524988 +734 679 -1.7068347062344156 +740 679 .25252202806454455 +750 679 .17886310792969184 +752 679 1.0746071265337844 +769 679 .6935188243459797 +780 679 .27052123159750896 +781 679 .029103439407585724 +786 679 -.21277179045350963 +789 679 -.5088144397493413 +793 679 -.9765170894301413 +806 679 .6313601027420834 +826 679 -1.5228478402785692 +828 679 -.19819522894260672 +844 679 -2.3904871982575058 +856 679 -.3467878636307816 +857 679 .9494101755956076 +862 679 -1.5510285370806098 +871 679 -.1472710407744858 +877 679 -.8338410337044952 +880 679 .9919271955660219 +887 679 -.97217183694906 +890 679 .7741782603222818 +894 679 .45863662503691593 +910 679 .8281627598852823 +911 679 -1.0328059716633624 +912 679 .4903983606531005 +921 679 -.8402195320342627 +946 679 -1.0431310402272098 +959 679 .3257703493775195 +998 679 .4083571236341408 +5 680 .9949519819208652 +38 680 1.6668050210017664 +64 680 1.2684625299155845 +75 680 -.2270751423896466 +78 680 -.48172386474766926 +91 680 -.2895409913168443 +100 680 .565600080483651 +102 680 -.7340569343678957 +112 680 2.0295085832070283 +130 680 -.8686268784491501 +133 680 -1.7270547088932715 +135 680 .37856780515742344 +146 680 -1.867153236331429 +147 680 -.6625588277551564 +150 680 .4381911015256918 +161 680 -.7056673443027991 +171 680 -.27234586867525246 +181 680 -1.6011239669833426 +189 680 -2.3027091377845283 +206 680 -.09435465306251868 +218 680 .6037174135673053 +243 680 .1513262953882713 +280 680 -.20467107678324853 +287 680 2.003794540103826 +289 680 -.4716216263075769 +299 680 -.3245183725095251 +319 680 1.0196918008021902 +323 680 -.7679939642514274 +326 680 1.9161853438856127 +329 680 -.7788659341804427 +330 680 .3422242560046072 +331 680 -1.0110434944196591 +334 680 .009511019036528484 +346 680 .28229827640851335 +347 680 -.07587875131758218 +361 680 1.2088449549019544 +367 680 -.9471533575712681 +372 680 -1.0187053612185804 +386 680 .4196921885177646 +404 680 .3798446726216167 +411 680 -.37806853282363984 +416 680 .003786611398119877 +425 680 2.157232577706979 +438 680 -.6597651393923033 +439 680 -.7481864471517652 +443 680 1.0737957736904784 +476 680 -1.048116272315588 +483 680 1.1850922492107694 +496 680 -.4367675138386794 +520 680 .0371963183252141 +531 680 .2199004737352174 +541 680 1.074939294718703 +602 680 -.05340819324077355 +604 680 .07692904453608432 +605 680 -.016945767886599218 +612 680 -.2862718140373281 +629 680 -1.595922655073335 +646 680 -1.4343782965015959 +647 680 -.4913336033355503 +685 680 -.08997481278020308 +686 680 -.7007038944041081 +690 680 .0014079326837327794 +691 680 -.0967585986491604 +704 680 .9228755785711106 +705 680 -1.497305272193338 +711 680 -1.2244297587567847 +716 680 -.019057064687206374 +721 680 1.0368122369743953 +732 680 2.7198146166683324 +737 680 -.7785159352798788 +751 680 .22588827189869018 +753 680 1.2499500425813053 +754 680 .4085690776940736 +756 680 -2.53467613402327 +763 680 -.07757178333004731 +764 680 1.0964505976693864 +767 680 .2518071097537732 +780 680 -.08178852383558158 +782 680 -.6453678764895711 +787 680 -1.3057402851938202 +795 680 1.6075297017816532 +831 680 -1.6564441927897673 +835 680 1.4304388043642733 +842 680 -.15603037636756348 +860 680 -.3735159059806712 +867 680 -1.3180031343083685 +868 680 -1.4988233470528614 +869 680 -.44980805245939715 +877 680 1.1959402307971718 +881 680 -.5767616725542667 +907 680 -1.9499084527363206 +920 680 -1.249249063156119 +944 680 1.5439237579065248 +948 680 .408699111357564 +962 680 -1.0972020816996277 +966 680 -.4283131148066815 +967 680 -1.1233487521485435 +989 680 1.8168374658587316 +990 680 -1.4259495191699663 +994 680 1.7840476416007276 +1 681 .4522186528887252 +20 681 .7209334676948189 +23 681 -1.1159539132558094 +26 681 -.6411505341027183 +32 681 .7415579510989561 +40 681 1.2088438830784631 +50 681 1.3633646954284262 +62 681 -.6554382514289132 +65 681 1.1234723191367952 +67 681 -.4375794106348115 +75 681 .8778428108658766 +81 681 -1.345736944710756 +82 681 -.41018068029118715 +83 681 .37377449665662354 +92 681 .16037744081572222 +110 681 -1.4668603860577736 +123 681 -.40530520557753275 +156 681 -.13820565685316166 +165 681 1.6352029090393925 +170 681 .23315850172337177 +173 681 -.06738572004430235 +183 681 -.42548278369672493 +194 681 -1.168992847971728 +198 681 .7248270202665643 +202 681 1.1557867489608615 +208 681 1.1730153489507393 +214 681 -1.1249855449482182 +216 681 -.004050902113062013 +218 681 -.5464455497294242 +249 681 2.525048442977098 +270 681 1.1537436024916488 +273 681 .7925424267090819 +275 681 -.7740636790740466 +287 681 .625534371546286 +293 681 -.46022873337833425 +298 681 .9269328737666656 +314 681 -.45464694675125433 +315 681 1.437355875827075 +316 681 1.9706715470283 +322 681 2.9870395498402913 +326 681 -.5935067061057685 +346 681 -.8871889889385417 +347 681 .8532508538972178 +349 681 .2758184606159307 +351 681 .10978458077103109 +382 681 -.33536270901920257 +415 681 .8069313036736403 +426 681 -.8514499694323627 +435 681 .9264961261998511 +438 681 .26051671540004495 +440 681 .4086609076019329 +453 681 .4553960005031581 +461 681 1.4556451742909258 +464 681 -2.1207003546961594 +465 681 -.3361909572883596 +481 681 -.2070528205912474 +486 681 -1.9052803262778923 +492 681 -1.1495221900871535 +531 681 -.20908428392648404 +533 681 .45267284157426235 +535 681 1.7668723300949019 +536 681 -2.7787577849359923 +546 681 -1.5811203031614185 +555 681 .49131632929888236 +557 681 1.1203234408292644 +564 681 -2.8994503634504962 +565 681 1.9875255314623603 +582 681 -.3738490437953039 +588 681 .11938807761970756 +595 681 -1.058926713662936 +597 681 .17963788160446853 +627 681 -.9231299238708741 +632 681 -.1787973125785204 +651 681 -.14070733230005633 +658 681 -.4105273542742859 +665 681 -.6793967980576119 +686 681 -.8014764560490126 +688 681 -1.6868890274634316 +696 681 -1.5229691332435817 +704 681 1.1418850642178782 +728 681 .3845008663774451 +729 681 -.325057407509221 +733 681 .5609287559882351 +737 681 .8885675956777317 +739 681 -.5330954121420202 +745 681 1.1048989751919611 +780 681 -1.5798295601929593 +796 681 -.6612179269785369 +811 681 -.17074663192113865 +812 681 .23050395836570275 +840 681 -.8244031037001271 +842 681 -2.3831267591055387 +865 681 -.7718525178353031 +873 681 -1.4534956350170867 +940 681 -1.0632521091072247 +941 681 -1.1767699835607848 +948 681 1.5133953876103439 +949 681 -.337311440451244 +952 681 2.318071448777632 +966 681 .3671604882745166 +996 681 -1.4087393542821112 +4 682 -.48584142619313747 +9 682 -.29442095583843403 +67 682 -2.264947465214195 +71 682 1.3391205790036782 +72 682 -1.7185522526524615 +81 682 .8814119651437734 +82 682 -.44734367668339403 +84 682 .10684347845612943 +89 682 -1.7019274223483838 +118 682 .6507350824112772 +136 682 1.0388434508198063 +147 682 .8656547122451015 +156 682 -.22602133356247658 +160 682 -.5689590575517918 +163 682 .6416968794468535 +176 682 -.48920958162681233 +184 682 .6752197707562693 +189 682 .8242787875398799 +201 682 1.7886123536668603 +204 682 -1.2687903983884938 +216 682 .6925893102891751 +218 682 -2.1393310758553667 +229 682 .6952391275736189 +250 682 .7841904104727717 +266 682 .4325103528694232 +268 682 .738457316657558 +286 682 .44602922192940847 +289 682 -1.1287285322627472 +300 682 -.2970852580624441 +314 682 .5743620944381587 +325 682 -.06106375706786158 +331 682 .38586713815303614 +342 682 .5589226713537389 +343 682 -.06486043156500443 +344 682 -.6568276506317346 +357 682 .23141174113663582 +362 682 1.4447075131176976 +372 682 -.8354033532536964 +395 682 -.07192848607821664 +409 682 -1.2819650766361266 +414 682 .3361535307340199 +425 682 -1.6508817463799856 +439 682 -.040279708972057994 +441 682 -.7065235445002196 +442 682 -1.407286623229112 +462 682 -.23758185178529945 +476 682 .07097002190319299 +486 682 -.6544017818783275 +489 682 -.2415147721523739 +490 682 -.171092792229178 +503 682 -.08691877556178951 +508 682 -1.5398477005452356 +519 682 2.3765568934017556 +547 682 -.16916711424008682 +553 682 .5424241562988831 +557 682 1.2854654038831137 +559 682 .7799540922454293 +587 682 .3444624757640167 +602 682 -.991684664387151 +619 682 -.5136335951887752 +628 682 -.8621928290042069 +647 682 .8759032161621723 +652 682 .19733528560133912 +658 682 .7380090555035039 +662 682 .7512642247866463 +671 682 -1.0371878499932565 +686 682 -.3600010054779238 +698 682 -.6647851117610373 +706 682 .11274025978021018 +715 682 -.7894975760701313 +763 682 -.3677629223568177 +776 682 .4544799037769947 +783 682 -.4435856800966142 +792 682 -.5764249594709823 +796 682 -1.1760024126351993 +809 682 2.1888183453204824 +810 682 .7000744246801541 +813 682 -.9667387559733956 +825 682 2.1171193537767867 +844 682 .6807537261177138 +848 682 2.4717761643274128 +869 682 -1.737320882852619 +871 682 -.9655709431942976 +873 682 .6810065947383219 +874 682 -1.0674186240603503 +894 682 .9304759032881358 +904 682 -.3085829805758692 +907 682 -1.7211704307957372 +921 682 1.2421563123963155 +922 682 .003153219258306028 +926 682 -1.277432515221898 +932 682 -1.4502166821388836 +934 682 .9615280253328784 +943 682 -1.6877291372248246 +966 682 1.0550723527123085 +968 682 .23654125689655253 +982 682 -.4007852849281883 +990 682 -.5206711585625292 +28 683 .19585016554255177 +43 683 -.3967778364374353 +49 683 -.24067772761357387 +51 683 -.29230649394568975 +55 683 -.2673795971294374 +60 683 .48008086020415497 +66 683 -.4235345871136419 +75 683 1.4900434662094508 +76 683 -.22650109713027905 +77 683 -.8996738612484 +86 683 .07352704143831695 +88 683 -.015012498448911976 +93 683 -.6514434539266404 +94 683 .48833111345571933 +97 683 1.1487319068131028 +102 683 -1.0185556234715882 +119 683 -1.4895362407782533 +122 683 .1552719355449681 +123 683 .09426165374523637 +147 683 1.6858659140580365 +190 683 .40187289990748765 +208 683 -1.0943852102111737 +211 683 .43110740979246936 +215 683 1.0207674917551095 +226 683 .35320395912848646 +281 683 -1.2393142353985849 +300 683 .9289045336186929 +302 683 -.6049332062398691 +312 683 -.2522106292604884 +340 683 -.6790995614035985 +355 683 .37388115145292 +362 683 -.5274490582568105 +368 683 .969437312293662 +396 683 -.20462344889218442 +397 683 -.12636895324879527 +416 683 -.4456660414896383 +420 683 -.147730918009291 +428 683 .7897353846376216 +432 683 -.2153174863583099 +433 683 .10460916425824554 +436 683 .7054214655657896 +438 683 .11179988005182957 +443 683 -.037458013379308264 +446 683 1.074876181090886 +452 683 1.05827269998648 +487 683 -.6060041693375945 +496 683 -.2480084785943482 +498 683 -.9715678929277498 +506 683 1.091903433521028 +514 683 -.3237310898673489 +516 683 .3275044393640255 +539 683 -.5354688513315351 +552 683 -.2974792358674702 +568 683 -.20752893678120077 +569 683 -.005549589996572941 +590 683 -.15624824823484212 +604 683 -1.2425070818703325 +625 683 1.0650706077746837 +639 683 -.40440897920719165 +644 683 -.6729033877025596 +671 683 -.7292958367282 +673 683 -.8202678041335852 +711 683 .1762298172902123 +713 683 1.5205265213264285 +716 683 .8060688049667332 +732 683 -2.094490392956842 +752 683 -.8543092093163491 +764 683 -.6192162997227928 +766 683 .1911440058363742 +786 683 .26213731673028184 +802 683 -.37399789493079616 +813 683 -1.267012908056014 +816 683 -.6745636878512151 +817 683 .5295887421035772 +825 683 -.7985067637938728 +826 683 .42319044693866353 +848 683 -.2189833825807322 +851 683 -.21937548839018234 +917 683 -.6307401552943439 +923 683 1.8005916935973607 +960 683 -.47775047278717225 +964 683 -.42319663587323336 +979 683 .07307797433850058 +981 683 -.26949478285128087 +992 683 1.4123773481476338 +996 683 -.18286771294831644 +1000 683 .38094693090123977 +26 684 -1.0326545428134164 +36 684 -.19480322571117015 +42 684 -.1412088149043776 +55 684 -.31908501393382127 +59 684 2.3875892314964324 +68 684 .15421994330310465 +69 684 2.13588326158166 +84 684 -.30125663505455175 +101 684 -.8164788589618235 +109 684 1.5277054005369004 +119 684 -1.7108123811807352 +127 684 3.1389572014012748 +129 684 -1.6220497545719885 +135 684 -.3609427324218428 +140 684 .11441023521254616 +145 684 -.41930131039500584 +146 684 .6967293154502606 +151 684 -.34529456297926453 +153 684 -.8350231559181394 +156 684 .43561613397363674 +158 684 -.3463997523326692 +168 684 -.269881735606152 +175 684 -.7932854859351719 +179 684 .4515721957589621 +227 684 .46725668560286393 +228 684 1.5609593018221635 +233 684 -.6221197690320369 +240 684 -.9408530628419203 +253 684 1.0644432232141194 +274 684 -.6384816146476221 +275 684 -.34724794524335034 +287 684 -.6293538453286326 +294 684 .3608894650205277 +304 684 -.8006869560896797 +314 684 1.0845581597169076 +323 684 1.8104478473681764 +325 684 .9506507959605864 +326 684 -.09889150056926316 +330 684 -1.2589128154480054 +334 684 .5160213225556107 +341 684 -.2010178351005426 +342 684 -.1999609071691846 +345 684 -.16395802557285943 +355 684 -1.5993550783225565 +378 684 -1.7963159902441421 +381 684 -1.253072809756398 +401 684 -1.4104916874778861 +407 684 .4651164048631017 +410 684 .9944909428676927 +418 684 -.12346902740140525 +427 684 -.37750818537081887 +430 684 -2.5138974611725984 +437 684 .2452001752390419 +442 684 1.458065877439184 +447 684 -1.833971756603353 +449 684 .674129876891593 +453 684 -.2684871284796214 +459 684 -.16485020408014925 +471 684 2.017047647137221 +473 684 -.7872927970622884 +477 684 2.9161174812886865 +498 684 -.3936915034972594 +508 684 -.8268751025368481 +515 684 -1.6759037132842454 +518 684 -.40629502532119516 +522 684 -1.1295876689748967 +523 684 .37788727551405765 +527 684 .5844562582132866 +539 684 1.5890960073120755 +544 684 .5795161693552255 +547 684 -1.0684860227121415 +555 684 -1.4463665018987515 +570 684 .14116864111534844 +592 684 -1.3758287586720603 +605 684 2.009365935959681 +610 684 1.5715823851703674 +612 684 .642422265144012 +617 684 1.4085886972396382 +624 684 -1.7240106928622876 +635 684 -1.287949966444415 +641 684 -1.229846131276255 +643 684 -.7802880464976125 +644 684 -.3631298068258813 +647 684 1.4488058988427206 +651 684 -2.4038579287984887 +652 684 -.7984269631302555 +655 684 .7309576867686017 +656 684 2.0364777059654555 +677 684 1.123948379276208 +683 684 -.5911399776311381 +693 684 -.605471605339281 +716 684 -.7378516477510803 +732 684 -1.0947714096418515 +741 684 1.1653254686494654 +756 684 2.139275002200531 +761 684 -.43329263670402485 +763 684 -.6157040055999021 +766 684 .22817172694554586 +776 684 1.986375114683071 +785 684 .9554224349011231 +820 684 .6465020676551081 +823 684 -2.756919015891214 +851 684 .8201146634143383 +868 684 -.03948084065608832 +869 684 .7851582568901945 +883 684 .3156275804742282 +884 684 .3464047840826033 +902 684 -1.0287490303560995 +911 684 -.2932753174825177 +920 684 -.46447797335821334 +929 684 1.4630881094555777 +930 684 -.1203887223093832 +937 684 1.166978032284174 +942 684 -.7570222079128376 +946 684 -2.113945739768684 +948 684 1.1604716889084292 +957 684 -1.2231870838833865 +958 684 -.02144040686280646 +964 684 -.28810778529531245 +970 684 1.0428753777584714 +971 684 -.8327979454867092 +975 684 .7228312932186697 +12 685 -.33212172870879175 +17 685 -.40859244455241395 +39 685 1.3445386581458878 +41 685 -2.4992237158818873 +42 685 .542291696368961 +55 685 .6488645695943096 +57 685 -.6175692628678571 +75 685 -.5377057051212902 +101 685 -1.196987069664399 +104 685 -1.5613016281284056 +131 685 .34616743543397177 +136 685 -2.773837824836973 +158 685 1.6342024211892272 +161 685 1.0849668629963611 +167 685 -1.0501814769145854 +178 685 .25455741833906464 +182 685 1.0572893898620566 +192 685 -.19877830669558255 +224 685 -1.081509583184004 +238 685 -1.3127603590156454 +300 685 -.7488814658677687 +304 685 .09227484647167726 +325 685 .07761922157242708 +342 685 .06584808619414043 +353 685 -1.6740007872563742 +357 685 .5301137199494935 +381 685 -.5784657136671127 +384 685 -.18659540775353167 +388 685 .6388522667068899 +396 685 1.6760199598771242 +405 685 .03695325373506987 +415 685 -.003252117213844205 +437 685 .5710548921390375 +457 685 -.4346834297087196 +459 685 1.6339932033346327 +462 685 .030081555930562456 +463 685 -.5601208166471114 +466 685 1.4387224821351918 +476 685 .3470430133448321 +502 685 1.3131576860634473 +512 685 -.5007236786513375 +534 685 1.043546450046013 +538 685 -.02520854566406462 +539 685 .8263028974493494 +549 685 .1708667936686155 +557 685 .24560482539733325 +559 685 -1.1317675762148456 +571 685 -.6160429222631486 +577 685 .7090329573709064 +581 685 -1.3732120701477435 +596 685 .9227337795830239 +601 685 .5695595413435411 +606 685 .48910078485715713 +607 685 .02917740635571285 +609 685 .28647050556898357 +611 685 -.24183131574216526 +616 685 1.1536856838356129 +651 685 1.3983279762835097 +662 685 -1.713414141163563 +676 685 -.18937766204052528 +717 685 2.1891034522830224 +751 685 -1.0273119199313379 +758 685 .4403581246573219 +760 685 .45290725652444247 +789 685 -.39068160567673627 +804 685 -.10112583047640203 +809 685 .26249141173293566 +815 685 -1.56920275412103 +816 685 .9802955767213593 +826 685 .4824435484959609 +830 685 -.5110380020253132 +835 685 -.48835360359582414 +841 685 .34215929947091905 +849 685 .667109893134834 +854 685 -.5923738129046447 +859 685 .5090442647299955 +863 685 .7624578804224754 +871 685 -1.753002374461335 +917 685 1.6472770478943526 +931 685 .9390319738384704 +934 685 .253358301489926 +940 685 .3293959244131771 +944 685 -.3701279547022125 +950 685 .4814454968825498 +951 685 -.8383481680214301 +963 685 .2920528309448951 +970 685 -1.2174796076432886 +975 685 .41227010681133347 +20 686 .7643414921765966 +21 686 -.023246665712646195 +22 686 -1.2380885301211026 +23 686 -.07470777614671202 +25 686 .016853213939401993 +39 686 -.35073115142975103 +48 686 .19740206767923585 +54 686 1.3492294248528411 +58 686 2.550042488335502 +60 686 -1.4218779439586102 +68 686 1.289605521716244 +78 686 2.2208293370625567 +83 686 1.1040458445109391 +93 686 -1.365352225147555 +95 686 1.8872813510298578 +113 686 .7461987580899399 +119 686 -.7080168332183552 +129 686 -2.5846010282133456 +148 686 -.19144623423956286 +153 686 -.034450669786687704 +161 686 -2.188511537343649 +174 686 -2.923585626292875 +178 686 1.2929662998963551 +186 686 -1.4432023141339057 +188 686 -1.0800054538026782 +209 686 -.9121128032858911 +233 686 -.9230721225878823 +244 686 -2.2205080763833327 +273 686 -.36083480500656046 +289 686 1.230824493919325 +308 686 -1.1684339862658162 +310 686 -.5383620272397274 +320 686 2.7839099481652623 +382 686 -.41671378860192654 +394 686 -.5718968248492364 +404 686 .049135744469127565 +433 686 2.0667806193208214 +445 686 -1.5715375026594474 +446 686 -2.3914726265872686 +447 686 -2.0902532983711266 +492 686 2.979770231345373 +500 686 -.22044642457050243 +506 686 -1.8023625966511476 +517 686 .03474467818157524 +532 686 .2663506653610796 +536 686 3.1945095546797195 +541 686 -.3392550590019915 +554 686 .34975050923711115 +559 686 -1.840835732269798 +573 686 -.6921907155314624 +575 686 1.1233042298065712 +586 686 -.8375528486768788 +595 686 -1.7124397162862974 +597 686 -1.6880722333089777 +605 686 .9973646641600353 +631 686 .33233976593482967 +632 686 .17220541149382912 +648 686 .06135031336042142 +693 686 -.2576919465726927 +705 686 1.3657118587551822 +715 686 .19090645909553922 +726 686 .4413411866182493 +732 686 .08439128892517034 +739 686 1.195877478452148 +740 686 -.5424117103234503 +747 686 -.6343120730242309 +756 686 2.5769195001206158 +766 686 1.3930254376673912 +768 686 -1.3144668672646642 +770 686 -.8236801450321574 +779 686 -1.2704249554083629 +785 686 1.9211799264923346 +786 686 .8293940662897162 +791 686 .03872957227233961 +803 686 3.942782248017824 +806 686 -.1020848689256217 +809 686 -1.677972271398611 +812 686 -1.579125905872146 +816 686 -2.8622576674078966 +827 686 1.0320881442365732 +830 686 .6723065680293466 +837 686 -2.6505284789603043 +859 686 1.0181941610505565 +872 686 .45876951446527414 +877 686 1.700645499906907 +895 686 -.21831784009009514 +912 686 -.5021885131475617 +926 686 -.8266362421129521 +929 686 .6614653027877289 +933 686 1.1562488645136126 +947 686 2.9046606569501443 +962 686 3.0208255256214005 +969 686 .93516126777352 +974 686 -2.4181809925633413 +978 686 .789957572418869 +980 686 -.4552396456081902 +991 686 -.3290536444800684 +992 686 -.544144800793742 +996 686 -.9699391302239287 +8 687 .3707839300625638 +37 687 .8093415923728093 +48 687 2.2150357102991824 +61 687 -1.2632602981935686 +82 687 2.320858326979583 +86 687 -.5231338504288763 +89 687 1.1156923512036232 +91 687 .06520395370900585 +106 687 -2.0152404210080905 +110 687 3.900576066515164 +111 687 -1.5021198696150686 +112 687 -2.4790130593233624 +139 687 -.5071510830754088 +140 687 1.5095351250365598 +174 687 -.8972634466078103 +176 687 .6364562405647276 +183 687 -1.4570544033257617 +213 687 -.9086221284497296 +218 687 -1.3946214493188784 +240 687 1.6538274711570302 +251 687 -1.4328231494147146 +263 687 -.3837784492729116 +266 687 -.2780266073621459 +288 687 .009105190942936547 +297 687 -2.284524453314618 +298 687 -.44532984836386824 +315 687 -.9610534444503175 +349 687 -2.909277134158547 +402 687 -.47166199692641403 +441 687 .19119013434154436 +453 687 .8596500688903134 +465 687 1.6252546798171683 +468 687 -.266618371335981 +471 687 .5660394526419138 +536 687 2.4719504046025906 +550 687 -.9648689306720573 +554 687 .8707665598865596 +562 687 -1.6115468029172388 +572 687 -.7959271080820656 +576 687 -1.7254977473897917 +589 687 -.273936878546567 +590 687 .4352028726365006 +599 687 -1.1611184888396582 +614 687 -.16335682640165056 +618 687 -3.446983513442304 +628 687 1.2180483510123645 +629 687 .9111239131018413 +658 687 -.776711346400173 +674 687 2.0586679247866915 +676 687 .9300441894410354 +681 687 -1.0519392954700701 +682 687 -.38217505996845064 +699 687 -.1257412917932325 +701 687 -2.0513855713250133 +713 687 1.75902958479185 +736 687 -1.6288844630839896 +743 687 -.5610283006582517 +744 687 1.0374607454212983 +778 687 -.7038186012795354 +806 687 -.9594155766057861 +807 687 .15089688925494488 +822 687 -2.144388295461664 +824 687 -.389767172705044 +838 687 -1.9026178174081936 +853 687 1.7264358055097255 +865 687 .9117114088556011 +866 687 -.08631487057471508 +871 687 -2.01620793190645 +885 687 -.6762103177670588 +933 687 3.1249022826906425 +937 687 .3805234629784433 +956 687 -.5119515076825608 +959 687 -.13921440036147703 +965 687 -.4879855485405428 +971 687 -.4708228488804911 +973 687 .2846454779889471 +974 687 -1.0029543289422262 +978 687 -.5053434490715509 +983 687 .39741976813185187 +4 688 .008426136446992666 +11 688 -.19512421205603142 +17 688 .9161328128195053 +18 688 2.1873649112947824 +19 688 1.0977286706402891 +44 688 1.1233969274238045 +60 688 .03922604713711557 +63 688 1.1711163573117331 +67 688 .9625607683654542 +76 688 1.189066014271162 +84 688 -3.3522923029876557 +85 688 .0937932053106672 +90 688 -.2409513638969265 +101 688 .08575730576754942 +102 688 3.696156998578277 +105 688 -1.1787512936563351 +106 688 -1.1861642251094417 +126 688 .2905013780887365 +131 688 .041916651014455554 +132 688 -.2138585816905705 +144 688 -.3540691643940066 +145 688 .27581099564740774 +164 688 -.3592622368141111 +172 688 -.7758516177680589 +178 688 2.6764798290109373 +214 688 -.3521912616204628 +219 688 .2747365058354718 +224 688 1.1216287581803412 +233 688 -.21195277356577005 +245 688 .5952614170650006 +274 688 2.6107315389994414 +281 688 1.119441965504457 +298 688 -1.3788520064900416 +307 688 -.007221336132052954 +309 688 .6239182830874725 +326 688 .7660371670714221 +330 688 -.5053405791916221 +331 688 .4430549261699256 +333 688 1.5444361077932296 +337 688 -1.2822651179038853 +339 688 3.181986993145696 +347 688 -.36114475147574454 +355 688 -1.0178985310864017 +356 688 -.951931640138701 +375 688 .6199016802349655 +410 688 .5745025325536117 +419 688 2.2954795859203183 +427 688 -2.7630521773182513 +446 688 -.8041594541953032 +453 688 -.025433961273797934 +455 688 2.349437829443381 +468 688 1.1324236807973742 +470 688 .9307700395450168 +473 688 -.7621095142864717 +500 688 1.4360889305192561 +508 688 1.712779662003223 +510 688 1.2968956838779973 +512 688 -1.0449403204392749 +553 688 -.006295419293804956 +561 688 -1.2258269921265303 +568 688 -2.301366465460326 +586 688 1.209683126675162 +613 688 -.7639079100070683 +618 688 -.19225730081461959 +619 688 .8183617063487537 +620 688 2.579270006260002 +630 688 .07911622894110096 +633 688 -1.17104478620959 +636 688 -.8155386150219618 +637 688 .05199728292862105 +648 688 -.38565050665884876 +650 688 .5340746903650004 +657 688 .6928133668214853 +662 688 -2.1998823245228616 +663 688 .07502671359714863 +669 688 -.30405631355131435 +685 688 1.997878010506643 +702 688 1.6627790944166072 +708 688 .43423910925410086 +725 688 1.609845583243933 +728 688 -.5950927447959519 +732 688 2.653853248529549 +742 688 2.389195649569163 +748 688 .16204237560558638 +750 688 -.7293716294161374 +787 688 -.14750603628284173 +817 688 -.04542937168137287 +825 688 .7670366841415655 +839 688 -.4714602422682151 +844 688 -1.8223449208185434 +868 688 -2.8763854317357276 +877 688 .09733295840934927 +878 688 -.6571902143631776 +882 688 -2.921080461151971 +884 688 1.4380006897641824 +888 688 1.373945022677243 +902 688 -.6842928409050837 +918 688 1.189694478035514 +920 688 2.2461766432569306 +928 688 -3.3348850036785445 +933 688 .36497838725891335 +938 688 .5103989336206662 +946 688 2.669786844004804 +953 688 1.5021906601059802 +960 688 -1.7077486458557356 +961 688 1.0556074653780836 +965 688 -.30037761845547395 +973 688 -1.01676314628695 +975 688 -.31735963297702774 +983 688 1.4918587208370333 +994 688 .786818329441159 +5 689 -.4058826159782416 +11 689 -.6497226860154063 +13 689 .34906470382914834 +15 689 .8584149554968069 +25 689 -1.8114730134307524 +42 689 -.30200025189549407 +65 689 .10796405618970017 +67 689 -1.3037407062744995 +88 689 -.31130812948281533 +96 689 .6879821144048369 +105 689 1.3236321089687773 +112 689 -.3533409674702064 +116 689 .46318304337708543 +122 689 -.005858584396290181 +129 689 -.7706655638801946 +139 689 -1.3038359212417339 +148 689 -1.92296169930746 +150 689 -1.0076254016601454 +152 689 -.6971354634897843 +156 689 .20304164454248597 +164 689 .4356107001222116 +165 689 -.2806528711809483 +173 689 .009968117792615652 +180 689 -1.2504328795589135 +189 689 .14379903641183825 +193 689 -.15464359257948862 +223 689 -.0551871637401446 +224 689 -1.1213905113785452 +238 689 1.106225618170597 +244 689 1.1963923834956016 +245 689 -1.7009516496881447 +250 689 1.9993898682756666 +333 689 .0027590196229533223 +338 689 -.7695112455675925 +362 689 .49792590406713144 +365 689 1.3059582528164126 +374 689 .3308320068531 +378 689 -.17610124495142077 +380 689 -.19912732805125533 +388 689 .9867813182738573 +391 689 -.08048900704384582 +395 689 .13429480950213513 +411 689 .6477013051770907 +415 689 -.7957221689390632 +422 689 1.2482052575206466 +435 689 -.4059387172274985 +448 689 .8595241180334328 +453 689 -.6075987553419886 +454 689 1.113334039426656 +456 689 .05075445678870421 +477 689 1.8969651741776559 +484 689 .1781224852959507 +501 689 2.003519995726271 +523 689 .8927498381523404 +549 689 1.190430752486886 +555 689 -.8455247507618555 +556 689 -.17452325902661447 +561 689 .6925995689272826 +566 689 .829991006503079 +570 689 -.6892434119835404 +577 689 1.6630120995995599 +590 689 1.2383131205053004 +594 689 .29365844941812236 +598 689 -.2841526181628319 +603 689 -1.9143181391581425 +610 689 -.456759379768048 +638 689 .11537722566279808 +640 689 .5461933057444887 +641 689 -.5414086707687151 +642 689 .006309883015771844 +652 689 -1.643662029171472 +654 689 2.210540817071355 +658 689 .28852960817741 +659 689 .4175489989777124 +680 689 -1.1367340155484535 +690 689 -.703240916028453 +691 689 .4772793857122924 +696 689 -.3194030889574546 +699 689 .7563357375550146 +714 689 .11379736818969038 +715 689 -.8280319901578352 +716 689 1.2978201050931981 +718 689 -.20379304596127917 +721 689 .7322037126226618 +727 689 -.5392957049526579 +729 689 -.14391885545494218 +741 689 .5058014929385496 +751 689 .11316872449590354 +755 689 -1.912960426993562 +783 689 .6887318591312427 +784 689 .36309979372030143 +793 689 1.9767724446778088 +795 689 -.8921302686458088 +821 689 .4406428886485106 +822 689 1.2724089058155497 +828 689 -.08466320100508001 +829 689 -.1851398594668418 +837 689 1.8838063492797892 +852 689 .883967996747101 +873 689 1.0197580130633903 +876 689 1.7614321886846565 +886 689 .7232021091026717 +919 689 -.3224423764499388 +922 689 -.07031085058669731 +929 689 -.3463497860694329 +931 689 -1.1164156726810355 +934 689 -.5580098887024163 +941 689 -.14548003784852506 +944 689 1.0481931763605976 +955 689 -1.1927774997619673 +956 689 .09017669930009986 +963 689 -1.745452788446555 +967 689 -1.1255538423277918 +976 689 1.1894943511137064 +988 689 .12427596302205356 +992 689 .4332299425101066 +998 689 -.48224983647743963 +14 690 -.9654255686004473 +24 690 .9792414399125688 +34 690 -.9422122308062864 +37 690 .2838420185998365 +76 690 .2242761064387841 +78 690 .6289541467728257 +83 690 1.2747347316410087 +91 690 -.4161292208297285 +98 690 .5502755409079011 +100 690 .05686145279197363 +103 690 -.7496921704171645 +104 690 .550277240067862 +111 690 -1.5036768171001549 +130 690 1.6982824990966587 +132 690 .4186332749281692 +138 690 -.7365899583529467 +140 690 .6091686351448545 +147 690 .9703013608913731 +156 690 -1.0485617166297803 +157 690 .775557780603776 +158 690 -1.3189185153907035 +189 690 1.0411135157613638 +202 690 -.9978153269275102 +230 690 -.9971604740273796 +238 690 -.2543215954453916 +251 690 .9689776330707751 +254 690 .051507487338370794 +258 690 .8308326011464681 +259 690 -.3790676292008142 +269 690 1.2036820642650405 +277 690 -.7371982658921697 +287 690 1.4389594413686742 +289 690 -1.2210062996633217 +301 690 -.6039606410693414 +329 690 1.1291114507000626 +331 690 .026575781580303756 +336 690 -2.090978025583525 +344 690 .26745513366994556 +348 690 -1.036801522753915 +363 690 .25013917217545356 +366 690 1.0376807339388971 +375 690 -.19167898918688736 +381 690 .3756566387700042 +384 690 1.3478625872285142 +390 690 1.4234358929375226 +391 690 -1.8996109019181318 +414 690 -1.0776308611102494 +430 690 2.0607522870297 +434 690 -.340133743234334 +447 690 .6744844816997156 +449 690 -1.8451058554419035 +460 690 .1908732832213243 +481 690 .8598203602305099 +498 690 -1.5613069812820757 +500 690 -.31988719311462466 +502 690 -.05126685440610511 +505 690 .11320354848872172 +509 690 -.25405198619839464 +540 690 .5972953803172485 +557 690 .15827766378873004 +568 690 -.767260426104592 +573 690 -1.6141847897113986 +579 690 .24648728663959502 +583 690 -.08882737950672992 +621 690 .5595720154086427 +627 690 2.4914525465999926 +632 690 -.8191217081053591 +653 690 1.5165096821156656 +655 690 -1.5289055706837946 +658 690 1.4091023099517397 +666 690 .6086938247730173 +671 690 -1.795712414774784 +673 690 -.27090523576434294 +685 690 -.5224012180239153 +697 690 .5820144282869403 +716 690 -.7431628334140311 +729 690 -.06982727141996758 +736 690 .8446576857575557 +743 690 .01168825084129102 +755 690 .5581218524008322 +761 690 .014111279788836681 +772 690 -.014817543124069854 +776 690 .8441836942476918 +787 690 .352452380343357 +795 690 -.9124076750010552 +828 690 -2.006077590786112 +830 690 .5014941731453177 +834 690 -.6897154811893944 +846 690 .6730809435270604 +854 690 .08081715519749758 +870 690 -1.1676673082034343 +875 690 -.4183527533137645 +878 690 .8017307792043589 +879 690 .3895505840496418 +882 690 1.493371208266703 +884 690 -.5639079368379215 +887 690 .28833110784385585 +901 690 .572716815359234 +928 690 1.0804590678161845 +959 690 -1.2397692220602636 +974 690 .4715630725995872 +984 690 -.36446542810044713 +27 691 -.4325898286987855 +32 691 -.20059716407627443 +39 691 -.613865269586754 +41 691 2.2999762685601195 +50 691 -.25363327769251653 +63 691 1.263618615024535 +64 691 1.8651878049289994 +79 691 2.1725066764068295 +82 691 .21720163856604116 +89 691 -.4342458778821829 +101 691 -1.2703096221720394 +114 691 -.3191389677949217 +118 691 -1.2205404105319504 +142 691 -.3739698925190112 +171 691 2.255980206049369 +194 691 .6749062516535527 +204 691 -.256984582220894 +214 691 -.546175979030673 +217 691 .7685351238364275 +219 691 .38717754493953943 +221 691 .25242922925776484 +230 691 .7649500581374767 +234 691 -1.6475534733674633 +277 691 1.899249803752455 +282 691 .2773918128896286 +287 691 .9238545944096773 +290 691 .5742514694327617 +301 691 .01066315623518585 +306 691 .41240763929225266 +310 691 .02888699470582955 +337 691 .4388402495575161 +365 691 -.6943633225268575 +399 691 .420445174518281 +415 691 .49827678173994444 +417 691 -.4972529157169228 +419 691 .1672814615480724 +421 691 -.35459599040322143 +424 691 .051276790542880576 +436 691 -.30254283118307623 +440 691 -.1422060625471592 +442 691 .42966456333192166 +450 691 -.6061593347642203 +451 691 1.9390272752766329 +458 691 1.061008847193507 +459 691 -1.2234370969733788 +473 691 .7567553082000322 +478 691 -1.4660590908563054 +483 691 -.19218376525395522 +485 691 .5304753218917636 +491 691 -.2520020031128569 +496 691 -.403400643436692 +502 691 -.09794254461648247 +508 691 -.0630027461935384 +515 691 -.6737354434257629 +516 691 -.03402855685627358 +518 691 .6837544700205502 +521 691 2.157626183891037 +530 691 -1.5463819861044301 +537 691 -1.5983477002325732 +539 691 .2620647785094515 +542 691 -.6640469621395835 +556 691 .09152361872181092 +566 691 .6028205173453416 +574 691 2.0670719436098706 +577 691 -.49211592429973816 +583 691 -.3575140472418407 +592 691 -1.5238099058593262 +597 691 .07627981797655627 +604 691 .28886365408906733 +622 691 .13209603420210134 +625 691 -3.155021528700641 +630 691 .021117199513525427 +635 691 -.5408427016921158 +637 691 1.9849728597152518 +641 691 .8258977764127321 +654 691 -.39564972229400885 +669 691 .4314464075493424 +676 691 -.5341289115717783 +677 691 .4665705740425717 +692 691 .9511344023992142 +705 691 -.09410134135901412 +708 691 -.08053869719435158 +712 691 .12429461419927977 +713 691 -.5483961493803806 +734 691 -.2431056027771489 +736 691 1.4752814217377823 +739 691 .7566993763631116 +741 691 -1.0553284814584967 +756 691 .061167234460202835 +757 691 1.734169642644391 +759 691 -.16736645493067992 +763 691 -.9846010191771322 +774 691 -1.248055526274508 +783 691 .4765989668945877 +800 691 -.2579852758645773 +803 691 1.0211358016729424 +818 691 .3641410525397287 +821 691 -.2837034009861692 +840 691 -.7170358697892983 +842 691 -.5532587133294641 +869 691 -.38818988143252775 +872 691 .4705249879608506 +897 691 1.0567844537618465 +902 691 -1.3312327235689108 +911 691 -.9793646682635699 +920 691 .4745021873017947 +923 691 -1.3942874140584922 +937 691 .15994314032757623 +943 691 -.5039615594441803 +952 691 .6426957883922277 +985 691 1.6221548431716881 +986 691 .5211164595904139 +2 692 -1.196901201273247 +21 692 -.05810130225079774 +27 692 .5199850181518059 +30 692 .7994774138075458 +33 692 -2.1854664048908274 +49 692 .4690400920397752 +52 692 -.9124261402763545 +76 692 .5973146199534439 +82 692 -1.4161929394553514 +86 692 1.955544277840721 +99 692 1.3049409328369135 +102 692 1.1474638226998426 +112 692 .6413199500553842 +113 692 -.3501609575091991 +118 692 .45885381467288255 +139 692 .6155697906776253 +145 692 .2514480616881043 +147 692 .8770552597287299 +154 692 .3142681705067604 +206 692 -.46302411640138286 +213 692 -.5874979883639605 +229 692 -.8327692855823109 +243 692 -.36720907258777985 +247 692 .40714064097345254 +258 692 .1803643363007662 +276 692 1.1530260803948795 +280 692 1.0996610914911977 +283 692 .8851891389593453 +290 692 .08692113304505736 +294 692 1.3177865588297413 +302 692 -.3524490981549948 +314 692 .642505159896602 +321 692 -.9339700590511723 +332 692 1.3952568201694764 +351 692 -.8169192234196512 +364 692 .3060565176502829 +368 692 1.8136876260774093 +378 692 1.5013308171579889 +380 692 -.6586537980795876 +384 692 -1.2654795013047258 +389 692 .509168093769878 +422 692 1.3375304175455025 +433 692 -1.1893307413554934 +442 692 .16089987790837856 +446 692 -.705678728739062 +461 692 1.1292255264208206 +466 692 -.7569000057914566 +481 692 -.0008793658036626364 +483 692 .511325311656244 +487 692 2.5204323648678866 +491 692 -.31436490972625286 +492 692 -2.3782665114929316 +509 692 .3043687454455879 +510 692 1.5889875222935874 +533 692 -.28941343813304565 +540 692 -.8226609183426791 +550 692 -1.108962263863678 +551 692 .24377864935047555 +577 692 -.5678356701477807 +598 692 -.35492624245048887 +623 692 1.4500134623133636 +626 692 -.07503520833780278 +647 692 .8329438887527618 +656 692 .23413395670554643 +663 692 .6334192862510429 +680 692 .8236902970630876 +686 692 .46051975187798133 +687 692 1.493067584495511 +690 692 -.18859485089900224 +698 692 .9555538959904386 +704 692 .19395420767992708 +712 692 1.730915360800613 +728 692 1.1818375198378366 +754 692 .14312449782194853 +758 692 .9319955452344774 +776 692 1.94405761608964 +794 692 -.7449935527707945 +816 692 2.0235344762383347 +823 692 -1.4337833741967803 +849 692 2.7658678221756094 +881 692 -.43992983396699264 +898 692 1.6633487781719773 +913 692 1.3674318693240972 +926 692 -1.4962571685727308 +933 692 -.933926911212764 +934 692 -.30033589859275445 +937 692 .6020982563278934 +963 692 -.8030692462333019 +984 692 -1.1163726306042505 +999 692 -1.5471456431088082 +5 693 .4444746565994402 +8 693 1.188251855270666 +16 693 .19412135231177383 +32 693 -1.2100131653004447 +52 693 -.9057678216319928 +56 693 -.9354668583844192 +72 693 -.8784371190494074 +77 693 -.06212332634343071 +81 693 1.2487089029071443 +91 693 .29399441711455077 +119 693 1.1744554724478955 +124 693 .6328951672786123 +140 693 -.07980960145029532 +143 693 -.39251581122484025 +155 693 -.7995931543744506 +166 693 .049596447257962264 +167 693 .08191677700777789 +174 693 -.7745820822724354 +190 693 .1501271144052414 +213 693 -.5645020219167304 +225 693 -1.0063964067889832 +263 693 .5875648199891936 +264 693 -.3343806700954661 +267 693 .10695846842169686 +272 693 -2.374875713561451 +273 693 -.1546510343608703 +275 693 1.6228938883339066 +278 693 .4465426713802458 +307 693 .20782538384684393 +335 693 .19304392429541573 +352 693 -.08611608127571568 +353 693 -.025608049200638063 +362 693 .8103222666202767 +363 693 1.1858432118191078 +371 693 .5507126698163801 +380 693 .8260657729619514 +381 693 -.3440573970318881 +389 693 -.3351881803158364 +415 693 1.1277057772886137 +417 693 .07299075781923361 +418 693 .38630232398006087 +436 693 -.7025256444178268 +442 693 .05541714780174159 +449 693 -.2540870674012669 +455 693 1.1131699655086666 +459 693 -.5584508101191895 +478 693 .731245656218598 +500 693 .2643180837764829 +506 693 -.15550708922205536 +508 693 -.9187338334059518 +511 693 -.2242564810764089 +517 693 .43010499224602855 +526 693 -1.2060736782161912 +534 693 -.1973434339560504 +604 693 .791081859512352 +624 693 -.8005591586162993 +634 693 .6007408314780359 +653 693 .005146022426149144 +668 693 .02161984179090659 +671 693 .108511066344287 +690 693 1.8468031838394672 +728 693 .8846887431880824 +731 693 .3858019834773897 +738 693 .9148933454065167 +777 693 -1.032345074113678 +788 693 1.1289765307908541 +796 693 -.9065433089699613 +799 693 -1.04962768819858 +803 693 1.3635945166119499 +811 693 -.03527334568115925 +813 693 -1.0830707712566356 +819 693 .21868099487601111 +837 693 -1.018488840875454 +841 693 .06980827999277142 +851 693 -.7637147891646114 +856 693 .49535361417960144 +857 693 1.2778070402377542 +859 693 -1.0526182630958452 +867 693 .942627227725782 +872 693 -.8990598911884468 +901 693 .1310415319883163 +902 693 -.6501147503767215 +907 693 .15351631649547842 +938 693 .8373629918547378 +941 693 -.359752309560274 +945 693 .1766395993102748 +959 693 -.9110052421610744 +963 693 .5924567652905108 +976 693 -.31065340224508886 +978 693 .8119229027265201 +988 693 .7022017849987614 +994 693 -.49220039086912243 +6 694 -.44719110671491763 +9 694 -.8899998073057608 +33 694 .33969463150981527 +34 694 -.21034366388177592 +37 694 -.7871324865472649 +44 694 -.6226444355287281 +51 694 -.15544959748664133 +55 694 1.0107811682499976 +61 694 -1.5535304662040212 +88 694 1.075073439705227 +92 694 1.0794335691079828 +102 694 .5208322093199779 +104 694 -.08022527894862744 +108 694 -.1906209486190196 +109 694 -.9862225578947716 +113 694 -.7460472467068197 +115 694 .7893216840568167 +122 694 -.3749280304152373 +124 694 1.299300666787694 +137 694 -.43457403939782907 +139 694 -.2822959258051418 +148 694 -.16932449876853217 +161 694 -.217073261003265 +174 694 .7154105358671567 +183 694 1.7340385051925946 +199 694 -.10625500909481156 +215 694 .26511871035547196 +222 694 -.06520966097637432 +228 694 .1146331798082875 +242 694 .15793156377539933 +243 694 -.6147212727005722 +246 694 .223565728924552 +251 694 -.5862411546994051 +284 694 -.52102738235943 +286 694 -.344153780596762 +292 694 -.16088307988193376 +302 694 -.507243481167437 +321 694 -.5274596298179532 +329 694 .026139336511789034 +341 694 -1.1183287026087938 +348 694 .1364595751330552 +358 694 -.2778686387335772 +361 694 .3306510787388956 +371 694 .5148170882417888 +386 694 .20030020654819725 +389 694 -.541343487458009 +401 694 -.2604240984583231 +415 694 .41443499294172487 +431 694 1.0620010743672057 +434 694 .2314713439029338 +436 694 .8368378253559003 +445 694 .17923650844221015 +455 694 -.0024207771477069706 +457 694 -.7976605346991779 +469 694 .46266757281221316 +476 694 -.3841344693524185 +485 694 -.6918469927268667 +490 694 .5233208712229831 +501 694 .5877897252577445 +514 694 -.5477921672736401 +533 694 .36004718549649617 +534 694 .9685952348132496 +537 694 -.09831964220667139 +557 694 1.1820048157335312 +586 694 -.41836399299045396 +625 694 .9095385445833025 +626 694 -.6324023865539034 +636 694 1.0135010229616312 +659 694 -.23310757152475609 +665 694 -1.2570653954787845 +673 694 -.42620534961203216 +707 694 -.5507604714918599 +711 694 -.20023183452283938 +727 694 -1.0550156476518262 +731 694 -.39186955245065785 +736 694 1.8263428208527088 +759 694 -.08295781805439183 +763 694 .6164446646022699 +769 694 1.296775166357198 +777 694 .4148681720166633 +791 694 .7979965667950879 +812 694 .9603870397057582 +827 694 -1.0868788211466343 +840 694 -.8331179455918614 +854 694 -.8092450922903107 +863 694 -.2942469948999131 +871 694 -.5770144846951217 +882 694 .846332000016909 +883 694 .3941779338956425 +904 694 .24019518506777365 +927 694 -.11236661664691168 +928 694 .45221627062861663 +929 694 -.7852734955072538 +932 694 -.116202949722837 +937 694 -.5030535004348727 +939 694 .1863375473537336 +949 694 -1.277372154743827 +973 694 .8528375529981296 +978 694 .05936474610659623 +980 694 -.4614955215563451 +987 694 1.2284459674061172 +11 695 -.019545574339492947 +30 695 -.05412614613273901 +41 695 -.29556470852688654 +49 695 -2.0875186702247115 +52 695 -.8983828135038749 +54 695 -.05575062958358776 +56 695 1.2190916643528626 +57 695 -.6438929163866156 +59 695 .3685810334164967 +76 695 .6887681205039542 +80 695 -.0020385440935245525 +81 695 -.6089721146841227 +91 695 .18969527741642248 +93 695 -.7454206358798966 +105 695 .2728499185708642 +108 695 .26913648579031363 +115 695 -1.524869533518783 +127 695 .33236670077877684 +146 695 1.4609607341934006 +149 695 .5695788259004455 +155 695 -.0793539521524027 +156 695 1.1960452036345084 +161 695 -1.9210891470817246 +167 695 .12055401734447191 +170 695 -.006197388373819501 +174 695 -1.4872224860638865 +187 695 -1.795332548777463 +195 695 -.16189697826402102 +196 695 .2714141882632186 +199 695 .04112463010762463 +229 695 .13051375078972138 +233 695 -1.4454272355277333 +235 695 .9093376045332084 +236 695 .5292544319061427 +237 695 .2512813762795904 +244 695 -1.151272135523623 +257 695 .08429374790537203 +258 695 .26143009465947187 +269 695 1.0281456172075696 +287 695 -.8640867645132122 +293 695 -.4000936635640349 +308 695 .06912886039419118 +317 695 -1.512205326410402 +325 695 .04100381270426355 +337 695 -.7794667468105119 +338 695 -.2954041265685613 +340 695 1.322765507846718 +345 695 -.9757984244355346 +351 695 -.44380184008974305 +353 695 -.42799422765631095 +389 695 .25168030224786164 +397 695 -.32361630703074706 +398 695 .3975863772296545 +420 695 -.8388941322741323 +430 695 -.8229240213224032 +439 695 -.38705934736955266 +440 695 -.4147687546403425 +446 695 -2.283233527776992 +457 695 -.7827351433371992 +462 695 -1.3855287341295095 +464 695 .15050132327135773 +485 695 .4740927281166084 +494 695 2.0338655644175145 +499 695 -1.1226270574447792 +507 695 .40671360018039093 +534 695 .22564681116914326 +539 695 -.0003648734433254197 +550 695 1.5717669022216079 +556 695 .28693654615502845 +575 695 1.8073143452779177 +582 695 .6601823820594839 +586 695 -.5458899298435854 +593 695 .3119489074781382 +606 695 1.8161974205668694 +612 695 .8274499294749674 +620 695 -.054928558350350765 +636 695 -.8801074473714482 +642 695 -1.5704181631701948 +662 695 .6108152913423982 +671 695 2.090566569630007 +699 695 .7273211652247488 +702 695 .06860483163568229 +715 695 -.6968914514916517 +718 695 -.5564195158750714 +725 695 1.0477837183157572 +744 695 -2.4096749353671614 +751 695 .20507342629707792 +753 695 -.30776522957457775 +760 695 -.7325580351895102 +785 695 1.6559748378160308 +798 695 -1.4643728857123979 +799 695 1.044129305948507 +801 695 .27388479805784427 +809 695 .561947242178839 +813 695 1.120822392853657 +814 695 .9993924534450249 +819 695 .21894805060942388 +820 695 -.35831355372983437 +838 695 -.49521869969751675 +839 695 .06718142784516563 +842 695 1.1295950961504757 +843 695 -1.3116513910433925 +860 695 -.5735322971877921 +871 695 1.1278164341143406 +873 695 2.098002338310467 +888 695 1.1379960854945528 +914 695 .5556320649889731 +918 695 -1.167634236868259 +921 695 .12471258381349382 +933 695 -.43499755170955356 +938 695 1.160885639996706 +944 695 .792885641749537 +945 695 -.2529756176074218 +959 695 2.165197156752031 +965 695 -.4125401762580441 +976 695 -.10288196343335054 +2 696 .2545825777102442 +24 696 -1.7037486120778653 +35 696 -.8846446596473829 +40 696 -.021266815205371353 +45 696 .09517406771310455 +49 696 .7499475468672072 +56 696 -.9907829495943121 +60 696 -.4079323126377976 +63 696 -.056039927508111764 +66 696 .5683270846809717 +69 696 .024179021977825906 +77 696 -1.7448751494150057 +94 696 -1.4387163951836512 +102 696 -2.1353884077201775 +107 696 .34135272557893376 +109 696 .9009973404582535 +110 696 .3310752061924839 +111 696 -.7472252415570584 +113 696 -.6426447215865798 +119 696 .8901134309687717 +137 696 .10446183273359369 +143 696 -.40024128391336733 +161 696 -.42368670434508793 +169 696 -.6690049744240038 +179 696 -.4542108776385745 +180 696 -.05955903268496933 +185 696 .4326664937904151 +195 696 -.1339704619318381 +201 696 .24070551925029107 +221 696 -.11129930659988738 +228 696 1.371109674999633 +235 696 -.7912330643892158 +279 696 -.05207209095392365 +287 696 1.1201591505196793 +299 696 .934204552081308 +314 696 1.1326687557733721 +317 696 .3286796891432283 +318 696 -.5713650278609744 +324 696 .32439099153712386 +325 696 .43994604951536476 +346 696 -.5840772847480274 +350 696 -.04226758862111424 +389 696 -.6386544545276951 +391 696 -1.020121207226655 +399 696 -.7527437934083215 +412 696 -.9492185784781876 +413 696 -1.0497682360771874 +418 696 -1.2403657070920273 +424 696 -.513472936561497 +431 696 .27858127513608666 +458 696 2.3298958912816845 +465 696 -.7582272621514067 +466 696 -1.2672547640144116 +481 696 -.4869147773823368 +483 696 -.01669431126141703 +487 696 -.13709982154064143 +489 696 1.352191593744883 +498 696 -.010354950340388414 +524 696 .8828366213286848 +530 696 -.5192706917263448 +547 696 -.5620277538916673 +551 696 .062370240090960684 +564 696 -.5160002224835037 +567 696 -.6986874204134743 +569 696 .0764416632825703 +573 696 -.18495304415355185 +576 696 .7568488625026314 +599 696 1.541474539438175 +614 696 -1.3253928908656267 +616 696 -1.1094297417822436 +625 696 -2.036952492378557 +635 696 -.6446856220648591 +644 696 -1.818560185905304 +647 696 .7950588954123591 +659 696 .20988305732107282 +685 696 -1.027494591519834 +698 696 -1.3889817026445752 +707 696 .025406953382289592 +710 696 -1.223283095013125 +720 696 -.484866049292932 +727 696 .5290355453238955 +731 696 .5249230866133734 +739 696 -.1837031203833515 +745 696 .31562226644012387 +749 696 -.6897368436532149 +756 696 .19018183520481227 +764 696 .5359618925843174 +782 696 -1.2344063866555257 +784 696 .5030304910694905 +790 696 1.3375940203922332 +794 696 -1.3709496725266281 +803 696 1.3636073191451994 +821 696 -.7348709223411015 +822 696 .12648719776658415 +832 696 .5401419892483907 +841 696 -.1985954404427254 +852 696 -1.161662908368723 +862 696 -.2769030489676316 +870 696 .5363818175862332 +890 696 -.32423286830986486 +895 696 -.841385918904447 +937 696 .4826141637422805 +954 696 -.664720095339563 +972 696 -.8894568819667322 +995 696 .6913436546720797 +25 697 -2.209602705871359 +36 697 -.1952788414525792 +41 697 .4708913010742755 +42 697 .08561948644263151 +45 697 -.3594061239264191 +46 697 .7752808801725402 +48 697 -1.2088720979338212 +63 697 -.0860758291942644 +74 697 -.7952736097481695 +83 697 -1.0435246129863294 +113 697 .3340359845969935 +123 697 -.1957151881808152 +127 697 1.5370737458226478 +128 697 .27330522342377106 +180 697 .25295853394510215 +189 697 .5020083946429474 +201 697 .09271668642459777 +203 697 .21828690380387542 +207 697 .3669104129681706 +210 697 .6418841204007998 +211 697 -.8479508957966526 +244 697 -.7009507247918537 +264 697 -1.4037114233969583 +274 697 -.4483902681497453 +277 697 -1.6911349270367249 +285 697 .17107772286642192 +303 697 .5006850953814532 +316 697 -.13398883001420475 +320 697 -.7872858479739654 +333 697 -.16868367407319748 +334 697 -.7173386181061254 +341 697 .6200151122517769 +355 697 -.6412111669768313 +356 697 -.1721649239649017 +359 697 .0012773912491760853 +369 697 -.8415447944452866 +378 697 -.6082018356593997 +389 697 .08127520001251388 +408 697 -.21798523978475196 +413 697 .7035998477966234 +420 697 .8815844876577812 +423 697 -.46807172635040123 +429 697 .8291839351880866 +436 697 -.39571675329860034 +449 697 1.3533834652102004 +450 697 1.7205095750728427 +452 697 -.4208429375202433 +453 697 .38416688319222736 +468 697 .7166405441640566 +474 697 .46078655905295096 +483 697 -.6799122668762705 +491 697 .8122500109542801 +503 697 1.3079384088729868 +511 697 .6436072203804406 +523 697 -.2797961622296943 +533 697 -.5089553860711759 +535 697 1.19035996769616 +566 697 -1.3019426365809836 +572 697 1.3120698447684502 +585 697 -1.201061574617105 +626 697 1.0256936668536478 +640 697 -.06775210315840316 +667 697 .6230079195645355 +668 697 -.8154626433446436 +674 697 .17241963223534829 +684 697 .06861939618466954 +705 697 .9351179005301871 +706 697 -.08209172524706852 +722 697 1.8699731381538622 +725 697 -1.4079597690885053 +737 697 .3238480895882344 +741 697 .4065298032590328 +746 697 -.2888986330999033 +760 697 -.7066444108513281 +761 697 -.37604173733863566 +779 697 -.6553946028973918 +781 697 -.20511408494000344 +782 697 -.4017005372368904 +783 697 1.5806320045667333 +787 697 .4224779738581268 +788 697 1.3273078073096571 +790 697 .6563148862661885 +830 697 .5211937595623183 +843 697 .04612195191866281 +878 697 -1.222460230083947 +903 697 .10481466788042568 +909 697 1.266336525950087 +910 697 .20143310327741631 +920 697 -.296593023445015 +935 697 1.3576201846068505 +936 697 -.44856917314059164 +951 697 -.5332074210383331 +959 697 1.6342233406738744 +979 697 .9811637845562673 +988 697 -.6202545354386303 +989 697 -.48746683866305274 +996 697 -.7942038992445977 +2 698 2.1457161438189134 +4 698 .13303387341063466 +6 698 .344158443855821 +10 698 -.28543643296988463 +16 698 .9641115610702238 +27 698 .615357739283127 +30 698 -.341458509879046 +35 698 -.7164745742530557 +57 698 1.2889273233344678 +88 698 .9103597073112808 +95 698 -.6454664794850127 +99 698 -1.7854712836275484 +102 698 -1.004537875255898 +123 698 .5378605584544294 +125 698 -.01856070416812458 +145 698 1.0863442667952752 +162 698 -.4460705504782729 +169 698 -.5873678601432771 +170 698 -1.1180954041161084 +171 698 -1.2935121613419684 +172 698 2.0897338130319993 +176 698 -.7025694941343812 +222 698 -.12510146477134182 +231 698 -1.1308269608844939 +235 698 -.8211751420513975 +238 698 .004269394428508488 +247 698 .6496246520074463 +277 698 2.136506993729597 +283 698 -.6614623136525286 +286 698 -.0736444777432436 +311 698 -1.1219909175141127 +321 698 -.11087193308251347 +335 698 -.5056355371368217 +340 698 -.10657327081003558 +345 698 1.0519300021620097 +347 698 -.24074709797463925 +352 698 -.020394536358563364 +355 698 .8387976364106169 +361 698 .6985257176145887 +371 698 -.24264224199200757 +372 698 -1.5980996971825565 +381 698 2.208302187168784 +388 698 -.12478971545090961 +391 698 -1.4039179797926076 +400 698 .644475757715249 +409 698 1.1703062917487959 +425 698 .808650178422156 +431 698 .8484567721060828 +432 698 -.6081594470642919 +435 698 1.0876400895884062 +436 698 1.0320070715059633 +449 698 -1.537714162931638 +452 698 2.4858792728325163 +467 698 -.9314258537703023 +486 698 -.2561942912144764 +506 698 -.8038265285533992 +513 698 .5933431353059899 +545 698 .2675725908222629 +559 698 -.23905247566746213 +562 698 -.803975783102125 +577 698 -.03447207994727931 +584 698 .7267385722538379 +585 698 .23214599237729946 +598 698 1.185699810902068 +602 698 -.2537345098713068 +603 698 .9557251624300372 +608 698 -.34315922307920116 +625 698 -.31264696724707747 +631 698 -1.5073083220858539 +655 698 -1.8315437727938357 +663 698 -.08327151807713658 +691 698 -.11929845937825662 +692 698 -.6699427548198771 +714 698 -.22997251256839657 +716 698 .3165195338392488 +748 698 1.6949757098525944 +751 698 .30086721587776416 +756 698 .5456182232558758 +762 698 -.98034862458599 +765 698 .47856150080058973 +776 698 -.7032945442308057 +780 698 -.8991701355714673 +784 698 .17220854866723287 +788 698 .5915464131958614 +803 698 .44784744713244407 +844 698 2.2095403233637034 +859 698 -2.5145712599843666 +864 698 .09416292778560005 +868 698 1.2862056625558724 +869 698 -1.6070266908243795 +877 698 .3362590864234054 +884 698 -.8583365710682904 +900 698 .5511084808627028 +913 698 -1.233442646321439 +914 698 -2.1666302852742763 +925 698 -.8806157304121458 +933 698 .5210975429830403 +966 698 .4361199215524216 +979 698 .049161439189256834 +988 698 2.9270628696149563 +992 698 .30216116443647095 +999 698 1.9090887659544866 +1000 698 1.0782664485148283 +12 699 -.5196841627967953 +17 699 .23531986128546517 +26 699 .3897297440104824 +32 699 .5173427175275256 +39 699 -.8027449472786334 +46 699 .3786541536425355 +50 699 .005945571552281842 +58 699 -.19391682605018756 +60 699 -1.190816458633441 +69 699 -1.5943430658721272 +92 699 .2737859074941399 +99 699 .19423798966949007 +107 699 -.17905232065942972 +108 699 -.6911221590665263 +125 699 -2.0253777033619724 +127 699 -2.2306773857501465 +130 699 -.2884993013205531 +137 699 -1.7107868219759894 +153 699 .9371469378731474 +160 699 .3822040694577675 +178 699 .24657447328036786 +180 699 -1.1975532377211886 +190 699 -1.7852488088156053 +201 699 -.4914455384598334 +205 699 -1.6125891707070625 +226 699 -1.1453467610439514 +231 699 -.10683279266628913 +237 699 -.6004439576905388 +245 699 .63346066328579 +253 699 .6153311965126603 +259 699 -.6367693617924219 +269 699 -1.2812534434202965 +273 699 1.3439426370750729 +275 699 1.1318272274686625 +293 699 .504808882433817 +295 699 1.1452547468368408 +304 699 1.3475706496921946 +306 699 1.063612647484487 +314 699 .6601966830471862 +317 699 -.9395436511040165 +323 699 -1.2385682718060087 +324 699 -.7610693838931613 +332 699 -.5435572056518564 +349 699 -1.96632912188649 +352 699 .8977213693810646 +360 699 .1274107233959099 +379 699 -.4253496910662169 +392 699 .3024163855978207 +419 699 -1.1646625013620377 +428 699 .7210156604690503 +432 699 -1.7135400104514473 +434 699 .3728922212711279 +443 699 1.22125824072253 +447 699 1.4095974955083124 +468 699 -.7634602652921149 +477 699 1.0519123388439522 +503 699 1.5567435820019604 +504 699 -.09860421513365264 +505 699 -1.3959403929109997 +521 699 2.180143620801296 +526 699 .11731602115363945 +561 699 1.3783613880791377 +567 699 .2672368836096627 +570 699 1.2824203367270628 +572 699 .9030996565738334 +603 699 .6870184009539934 +613 699 .9059244703790074 +616 699 -1.3926406352833123 +625 699 -2.2735602951883798 +628 699 -.2669611522650869 +633 699 -.02844449637964795 +649 699 -.4137869288471462 +654 699 1.080179911546107 +656 699 -1.7376655536653711 +658 699 -.7183292574573011 +659 699 1.5781360743120285 +660 699 .795364055023266 +699 699 .5160346627451733 +703 699 -.8271980676423677 +708 699 -.8262235872626663 +717 699 -2.2363665821026344 +728 699 .5205654551552182 +736 699 1.0931514871138661 +754 699 .27128856350691577 +764 699 .14849571180168164 +789 699 -.19460568878616236 +795 699 -1.0513108177530506 +798 699 -.4030367289007099 +826 699 -.3009957366936212 +844 699 2.259531177201693 +847 699 3.7724307892270548 +850 699 1.1404615407425003 +857 699 -.5145661833708157 +859 699 .18914204933958173 +860 699 -.07677831666983084 +893 699 -1.290262508815454 +911 699 -.23563016478582618 +912 699 .4379624951972276 +914 699 .026713124079952175 +919 699 1.1607291655387 +936 699 -2.0360417727798845 +938 699 1.4875930935567916 +952 699 .689975306533267 +955 699 .9220639119561648 +970 699 1.1641760006633655 +977 699 -1.036141740984061 +991 699 -2.3971162356085025 +992 699 .6664999494549474 +5 700 -.13452591162699737 +14 700 -.34054867429750707 +33 700 -.3905431899804688 +36 700 -.7108448962022204 +39 700 1.2214602754511317 +47 700 .04797385296534255 +51 700 -.18901062067390798 +52 700 .30494207297980513 +54 700 -.443168636995298 +84 700 -.21128648046969112 +100 700 -.08274238951632666 +105 700 -.7575230705492785 +180 700 -.05754829412808293 +218 700 .3104237638169411 +220 700 -.3288824484070608 +231 700 1.5495203702177198 +244 700 -.36583963378199963 +250 700 -.574561437461538 +321 700 -.7642715064481329 +329 700 -.32276370902221724 +330 700 -.7009110258548295 +331 700 -.3130327359400312 +334 700 1.0716369117983588 +346 700 .1621301233453138 +379 700 -.2426926873588906 +385 700 .6407452475836038 +388 700 1.1647030110020165 +389 700 -.3545338411000216 +390 700 .40057119673508773 +402 700 .16385139964631523 +445 700 .960628262619792 +469 700 .5636325305055374 +482 700 .2583335685948053 +483 700 .2621517026045817 +487 700 -.09186487411630262 +520 700 -.7723935049967857 +524 700 .19282059290343606 +528 700 1.045254279751752 +529 700 -.20011293868199004 +538 700 -1.2119961098737215 +541 700 -.015346369285519836 +552 700 -.4365348035432775 +555 700 -.4651300700027634 +558 700 -1.2759546652448228 +559 700 .3887302831648222 +561 700 .19212296438218462 +584 700 -.12327101520941933 +590 700 .4869837535122077 +591 700 -.15443494786900908 +603 700 .2722902354165957 +608 700 .38047175153902785 +620 700 -.2452519978095432 +640 700 -.08463321573481386 +679 700 -.4148992840137589 +691 700 .1893436747789401 +695 700 .1480402228127291 +700 700 -.7257524813650305 +709 700 -.31486681026809826 +724 700 .5669835568789411 +731 700 -.8893291845143915 +741 700 .5028916867281668 +752 700 1.096406138910752 +769 700 -1.2019560774513272 +814 700 .8767012133161324 +823 700 -.2272187903485504 +834 700 .3093988812579038 +849 700 .4232614545213057 +866 700 .42719732604864796 +867 700 -.28512554591797185 +897 700 .548530771027069 +917 700 .7452651486121296 +923 700 -.3838843750024328 +932 700 .46180143744557506 +962 700 -1.5076812972384523 +964 700 -.8336101790757782 +966 700 .013850114227673689 +972 700 .210448180640604 +974 700 -.2688199709543965 +978 700 -.01824908376485082 +990 700 .37658613228661125 +998 700 1.1778505960048342 +8 701 -.0753759705682306 +22 701 .8615072353843253 +27 701 -.2244838249151442 +41 701 -1.2054277569081928 +42 701 -.49651340890788487 +70 701 -.1372943983652844 +74 701 .8219499710012781 +83 701 1.410798611025765 +94 701 .5760525794327085 +135 701 .6578660382657718 +142 701 .1795524402542826 +152 701 .05380173135711602 +159 701 -.03493431217814645 +161 701 .08372190437599394 +166 701 1.3080224430366119 +167 701 .19474646994936545 +172 701 .8123847732323253 +173 701 -.6083983429984047 +192 701 -.4933411099503876 +197 701 -.25116692214126246 +219 701 1.0363530712719757 +226 701 -.42166770750637805 +239 701 -.42527840233301806 +240 701 .29629794042374524 +244 701 .7947499595866493 +248 701 -.32636551283475745 +253 701 .15786472380014344 +259 701 -.19335860451268114 +283 701 -.3211148879185986 +295 701 -.026202445776580457 +297 701 -1.752704901823141 +320 701 1.0336325313975148 +323 701 -1.3881300595121895 +330 701 -1.088968287188619 +359 701 .11883233074403515 +418 701 .9054462405951609 +426 701 -.22919855834006958 +432 701 .7809307745478724 +440 701 -2.0548493050379073 +455 701 -.37438301566554655 +456 701 -.07930930203719194 +461 701 -1.6227281277217456 +464 701 -1.9310521347453835 +468 701 -.7242673827980399 +473 701 .7852587104331203 +491 701 -.41704698128203843 +492 701 -.21108604363549888 +496 701 .12107084683107514 +499 701 1.0251036379912934 +501 701 .8275730556352039 +512 701 -.8074408175804173 +516 701 .3928519730992246 +524 701 -.6098911320389925 +538 701 1.0523878175482444 +557 701 2.162674361310897 +560 701 -1.0761088621233745 +561 701 -.0988635713877449 +602 701 1.1627844171485833 +615 701 -1.1555231003274582 +621 701 .6029002652835068 +631 701 .39707069077833745 +639 701 -.1019606194218832 +645 701 -1.0855053188271626 +652 701 -.28547024401196586 +655 701 -.6727670962163089 +661 701 1.998210748071061 +664 701 -.6069043525180805 +665 701 -1.1068230295214372 +666 701 .2759202674688411 +683 701 .3473773835652553 +697 701 -.745670890889543 +709 701 .9973534497671148 +710 701 -.549975793669141 +722 701 -1.0558388528785214 +737 701 .15511924502491575 +761 701 .30681487721734674 +763 701 1.1314053293055542 +767 701 .6839079137062707 +783 701 -1.010411420104682 +814 701 .46830915004838636 +825 701 -.9459216290631148 +835 701 1.1841989348343718 +847 701 -.09665484951736161 +857 701 .5213680679234689 +860 701 .4662554391237151 +869 701 1.3104314073125054 +873 701 -.4829227253140136 +875 701 -.9397752371702912 +877 701 -.7337403266468487 +885 701 -.3204049267832493 +903 701 -.9882243067520642 +910 701 .2323070580927835 +912 701 -1.9931871994664594 +922 701 -.8559168695746652 +926 701 -.22514976212413063 +929 701 .6276808604986872 +945 701 .7665728713658957 +967 701 -1.9394760837457206 +978 701 -.7429334357778631 +986 701 .8765155286744123 +1000 701 -.638308126237317 +2 702 -1.5882044425899196 +5 702 -1.988794116424848 +10 702 -.57871857534776 +11 702 -1.0188915401197893 +16 702 .37425998956459455 +18 702 -3.005418375367541 +24 702 2.279079208792479 +39 702 -1.4205089725860192 +60 702 1.8235465883569268 +62 702 -.9242705950516809 +67 702 .32606228699037937 +93 702 .7613548838625404 +112 702 .10728386665774346 +118 702 .6239475933606365 +123 702 .8133736636815154 +144 702 -1.6338193680366921 +168 702 -3.176767257858603 +169 702 -.9731787017642344 +182 702 -.01827021859777528 +189 702 .0696108542699308 +190 702 -2.578032663955114 +192 702 -2.0418212157026043 +195 702 -.13190174945699107 +202 702 -2.3162268011481024 +207 702 -1.3231358987691906 +219 702 2.99013183457272 +227 702 1.0380733212206925 +228 702 -2.064173629335215 +240 702 2.7080156099684327 +243 702 .07178821428420099 +246 702 -1.2973102139516044 +270 702 -3.8402116818379826 +287 702 .7297517232802428 +295 702 -.36160244389127305 +302 702 -2.5483224809821756 +308 702 -.11304379938435385 +320 702 .5911582221192395 +327 702 .3547374945294617 +356 702 2.2172859686920625 +370 702 .24434664480746848 +382 702 .11363660363393491 +388 702 -.7589907568020825 +391 702 .8227065021676407 +406 702 -1.6190175676230896 +433 702 -1.697455777986615 +447 702 1.5039245142759827 +453 702 -1.4930946820038995 +471 702 -.9284763173744601 +514 702 .0824380186283808 +525 702 -.04874020627824686 +555 702 -.42370291282572153 +558 702 .1982216948105535 +559 702 -2.2049736602713 +589 702 -1.4700460328618383 +591 702 -.5903980451324984 +607 702 1.2365324849082895 +609 702 -.2191361729936629 +611 702 .17961528742350047 +612 702 .24734547235083715 +616 702 .03772660019498547 +624 702 .9575956751012707 +634 702 1.2433767830541098 +646 702 .4180810225375613 +690 702 -1.9704942096924825 +722 702 -.6699757924753478 +724 702 1.0334511265309894 +733 702 -1.5227671508497806 +737 702 .45478896360292215 +754 702 -.8680088584086476 +756 702 -1.9043062465542249 +773 702 3.050374750836191 +786 702 .41160266337663115 +807 702 1.0576261581001163 +809 702 -1.2138027978201344 +841 702 -.26602866553681204 +882 702 .34067683737777876 +899 702 -1.5964698293914037 +908 702 2.544511655017318 +923 702 1.414502411155414 +926 702 1.139327255342195 +927 702 -2.0701763599990617 +929 702 -.06146417871418711 +932 702 1.7415995644235378 +942 702 -1.2458910673003631 +946 702 1.2284503540203566 +960 702 -2.9255220657518244 +962 702 .4844851514754856 +975 702 -.8073744731346305 +977 702 -.9739172010968362 +4 703 .4521557599268638 +7 703 -.330296149332215 +20 703 -.6090623220161585 +27 703 2.385385648313559 +29 703 .6273200400704158 +32 703 .28793451963987915 +47 703 .3612600293098796 +52 703 2.0365194270054423 +96 703 .37828253427632974 +107 703 -.010856114049959235 +120 703 .30101892429818866 +123 703 -.8058391873382127 +138 703 .8181071759179908 +148 703 -.5002577576994824 +149 703 -1.3337373657737328 +151 703 .13378331982337835 +152 703 -1.4386180336035084 +166 703 -1.0497672457129998 +183 703 1.6263748096827633 +206 703 -.20467926416075877 +208 703 .22128682673612926 +228 703 1.8087685241336307 +256 703 1.5288293295714306 +268 703 .1943726086025097 +270 703 -.947191723154302 +291 703 .5447088574006074 +292 703 -.9879174099653647 +317 703 .8074729798087885 +319 703 .6430303578371392 +321 703 -.5542482040736122 +323 703 -.07600047727394739 +339 703 -1.2580920138529086 +341 703 -.42969163276185524 +342 703 -.8071905238067243 +344 703 2.0320644564659878 +348 703 .3019105599723404 +354 703 .5594237626962958 +365 703 1.176942753702395 +393 703 .3315105380584194 +398 703 .013894099858021244 +404 703 .21416497963444503 +408 703 .3913530324683861 +416 703 .21547391666922736 +428 703 1.8480947171473507 +434 703 1.2645575950861876 +435 703 2.241480273691563 +454 703 -.9304069715857392 +463 703 -.6475919474013481 +474 703 .3132216574616951 +505 703 2.419807345940097 +506 703 1.856028295904065 +512 703 .5632130443846498 +514 703 -.5664849796038645 +516 703 .4531435410558884 +517 703 -.23078077272237063 +523 703 -.30120943694728625 +563 703 .25323106704678916 +567 703 -.6625121765083204 +573 703 -.28710853467086006 +586 703 1.006012580617814 +591 703 1.6544595495588315 +595 703 1.4742451213449685 +604 703 -.5847048405474775 +607 703 2.0885030856474387 +620 703 -.6665575199192515 +643 703 -1.3375208580451694 +644 703 -.8570684830485682 +659 703 -.271001319882725 +672 703 -.8404080315303231 +704 703 1.120312219088182 +717 703 .40403253035427633 +720 703 -.2701803243965753 +727 703 -.7919800022168785 +763 703 -.00040097297873164356 +798 703 .44850294850398364 +822 703 .3444137211781811 +839 703 .10287749668564213 +841 703 .8348696106232557 +842 703 -.44444785603702097 +847 703 -2.2142483510689317 +848 703 2.0463877467903466 +868 703 -.3213637501521357 +869 703 -2.671853230931224 +877 703 -2.7677624867306143 +911 703 1.1779951080069595 +912 703 -.6670719209640288 +917 703 .12773420835268684 +919 703 -.7288635142371926 +920 703 -1.4815332465297057 +923 703 1.250014060991182 +942 703 -.36056448682555087 +953 703 -.12693348737083432 +972 703 -.5712173046475442 +997 703 -1.9424135338797988 +1 704 .166904724673881 +2 704 .7457950175628639 +12 704 1.1808243886455163 +25 704 -.6280152537178134 +40 704 .14636895954444254 +42 704 -.4900316947961684 +44 704 -.9209696323639289 +59 704 .5037875120330464 +61 704 -.2649419081048227 +63 704 .8962456486473225 +98 704 .11426670291276511 +116 704 -.9329009241335459 +120 704 -.35569177612550035 +129 704 -2.5877725949593477 +141 704 -.6767025760435218 +148 704 -2.6451013564375816 +149 704 2.3075564314006116 +153 704 -.68332104085229 +159 704 -1.526802954670785 +169 704 .9377117519900868 +170 704 .6663714387521436 +171 704 .009238672303316361 +172 704 .8132700064580959 +176 704 -.48647240611004616 +178 704 -.6224042037946129 +179 704 .37421870790357536 +214 704 .09319717959660109 +219 704 -1.738918771183204 +227 704 -.12422255760751749 +246 704 2.444291534199749 +253 704 .7172777505531471 +254 704 1.5893772626376548 +273 704 -1.2134679853042845 +278 704 .7748156950090143 +284 704 1.305112120529371 +294 704 -1.255107086815781 +306 704 -.6364002554858043 +324 704 -2.1641567243974946 +328 704 -.2483222703962704 +330 704 -.7325931598060291 +343 704 .6415595267952949 +347 704 .8761713614758668 +353 704 1.593655081654543 +376 704 .3046012037611158 +379 704 -.46848702506712314 +398 704 1.1197467113601292 +431 704 -1.2222597294038025 +440 704 .2938887823797159 +444 704 -.506900323590592 +472 704 -.7866159265705749 +478 704 1.486741133898086 +481 704 -1.623557040291469 +490 704 -1.7686811270154374 +509 704 -.6709405142106131 +520 704 1.2094228540803207 +525 704 1.0418439874698793 +540 704 1.6538466116539863 +542 704 -.011803714589382877 +560 704 1.363672984786371 +562 704 .7690539342038518 +567 704 -.8077089800280639 +588 704 -.9388548720299569 +599 704 -.05133126801177611 +603 704 -1.9153872301565174 +614 704 -.5455576201327786 +640 704 -.9702860924502378 +641 704 -.9621462680140238 +642 704 .734951894348728 +645 704 -.3493395761451383 +648 704 -.3605110104687449 +656 704 2.342654113764628 +657 704 -1.38184983852406 +667 704 -.8572474143852986 +686 704 -.7302467322752922 +706 704 .6839192523282942 +708 704 .628082098565681 +725 704 .012386090654856963 +729 704 -.49672562941964576 +734 704 -1.1519112165639827 +739 704 .37821821278896484 +754 704 -.0658030461157602 +755 704 -.11254791252138296 +759 704 -.22836881191531844 +772 704 1.1891532519327213 +801 704 .7894266196753733 +820 704 .20035545803914212 +822 704 .17089262433097457 +823 704 -1.7106796942720035 +824 704 .4568108855629299 +837 704 .05684546751983752 +843 704 .49100638513289446 +866 704 .7275577812193338 +870 704 .3703050822435021 +871 704 1.596148230347477 +881 704 1.03547000791454 +882 704 1.2969974772725372 +905 704 .4826676966590773 +912 704 -.694282908032512 +945 704 -.9822040723009697 +963 704 -.8587495723000301 +964 704 .0679313797689509 +979 704 .863112001408278 +1 705 -.7427873999426415 +12 705 .053711044272013266 +25 705 1.0369742914338145 +30 705 .44205744281872855 +40 705 .5582305381924345 +54 705 -.24369882649388186 +56 705 -1.0081797393392353 +60 705 .06790042612853048 +61 705 -1.1166049642480134 +68 705 1.0657074440828658 +71 705 .27935729994128505 +78 705 1.1203642757961485 +80 705 1.3313961426659962 +87 705 .2841424886178606 +99 705 -1.0854682683518155 +106 705 -.8812926983996496 +113 705 1.181204110163169 +125 705 .38540519495328174 +129 705 -.9440726024111998 +138 705 -.5477708186758172 +174 705 .5164356584504827 +201 705 .3535390796016221 +203 705 -.0997901606040025 +205 705 -.3103363785104968 +219 705 -.6883491168664544 +227 705 1.4699019703762823 +243 705 -.8366613402061569 +249 705 .732471216866537 +282 705 .14380706991226436 +298 705 .9532442172400268 +305 705 -.16423388353561497 +316 705 -.2773981223758465 +321 705 .061391563698446526 +344 705 -.6041219994002903 +358 705 -.2891396592428061 +362 705 -.5892461129884079 +365 705 -.14899971555966485 +373 705 -.9433056119017343 +380 705 1.2764710640886108 +390 705 .9960588696574281 +414 705 .3681699469232874 +457 705 .5370318619314776 +471 705 .30349339015650706 +473 705 .22566656347094372 +475 705 .15043751897780983 +481 705 .1667267498784841 +493 705 -1.24161343818372 +503 705 -.6237219704493926 +504 705 -.41403478849039 +519 705 .8285967577310369 +520 705 .16699165380244851 +529 705 .4806815053880814 +534 705 -.9889911269383405 +556 705 -.8874659492355338 +558 705 -.007170032003330301 +579 705 -.8508923019563723 +601 705 .9111386470053133 +622 705 -.9442457180708911 +635 705 1.4982437281793182 +638 705 -.9286163004357079 +642 705 .49942361262660273 +647 705 -.12064720487663474 +653 705 .14234354284970305 +674 705 .3710186471756484 +689 705 -.6409196716686583 +701 705 .29832495275311444 +711 705 .24593651048605042 +745 705 .39358631820357026 +746 705 -.5111137696370767 +752 705 -.35768941222926104 +754 705 .7861568834097528 +761 705 -.1815472738116759 +768 705 -.02125686907694583 +772 705 -.27043254191042515 +778 705 -.08713380356480613 +792 705 -.8129388199534587 +800 705 .15301907927850686 +826 705 1.0008327253943343 +827 705 .9458340767575124 +835 705 .24008947090013402 +837 705 -.21207552667672955 +841 705 -1.0468366903228916 +860 705 -.2919776028676031 +862 705 -.4767978398517037 +869 705 -1.5840166754309624 +876 705 .6938339116388977 +877 705 -1.751262775592618 +892 705 .31173951114630966 +894 705 -.7306862604282344 +924 705 -1.475964460343646 +931 705 -1.1284563459821444 +934 705 .16559948646036446 +944 705 -1.537707471740424 +946 705 -.9090951345689525 +965 705 1.1993512430420692 +967 705 .43287780637817636 +971 705 .4544678784517986 +974 705 .40444433291189347 +981 705 -.17263123396535068 +987 705 -.5041320633063907 +14 706 -1.573612382127422 +21 706 -.9980106900586208 +52 706 .2775198690339906 +54 706 .8431403403825196 +61 706 -.7139574892439811 +62 706 .1642109521080061 +70 706 -.7048596143161504 +73 706 .23707743874100096 +80 706 -.8274179541788477 +90 706 -.7053457388166896 +91 706 .44611688423243556 +98 706 .6419745659087535 +112 706 -1.0128801251128996 +125 706 -.8957551816691265 +129 706 -.45533945899808564 +140 706 -.2848491414439949 +151 706 .9897637244156441 +157 706 .7534381096810929 +167 706 .973114822406503 +177 706 -.3256910037167763 +198 706 -.27665616132757487 +199 706 .19267276272112355 +206 706 -.16674198609362562 +216 706 -.34839843474291093 +223 706 .8779173041780786 +231 706 1.494719109322754 +243 706 -.41946452559831904 +258 706 .8898202639478751 +262 706 .7060240828345068 +273 706 -.3072591332407121 +288 706 .06217661942917557 +290 706 .13733915055424933 +291 706 1.4480890042816776 +295 706 .37956115948766234 +304 706 .8666770406546157 +306 706 .9862845482861288 +310 706 -.7189854716813209 +343 706 -.225120942555943 +347 706 -.4908696192778799 +366 706 .08483962261517372 +377 706 .5741149926444289 +383 706 1.3927553571698472 +418 706 1.8677544768437455 +425 706 -.1923842655792079 +428 706 -1.7574571788324875 +435 706 -.29588705351746825 +446 706 -.5487725532415222 +455 706 .45277401576409193 +471 706 -1.9418827001550947 +472 706 1.099067096555665 +540 706 -.2438435279621402 +555 706 -1.020002943278939 +579 706 -1.3596923124341185 +582 706 .043134909809553354 +584 706 .7519243166590343 +590 706 1.0949082075810594 +630 706 .7379551311600336 +639 706 -1.691763288861876 +642 706 -1.3217162468762726 +643 706 1.1399016294763884 +653 706 -.963745639540696 +655 706 -.6667011882316458 +665 706 -1.7230530940752673 +671 706 .5209564503118809 +673 706 -.7088758721051613 +677 706 -1.0075316458580732 +685 706 -.5464274584326407 +688 706 .18108676962764989 +692 706 -.4284828524328434 +696 706 -.4627893113390114 +697 706 -1.0011415378696613 +701 706 -1.6373928576251013 +705 706 .8646775883713167 +706 706 -.22547046332177667 +725 706 1.2105457381636198 +749 706 1.0941737360924506 +754 706 -.6781063258918062 +762 706 .6077145490814891 +765 706 -.9544508409677945 +766 706 .5085934455172336 +769 706 -.7989084286978638 +780 706 .1939025780691079 +781 706 1.17525803073764 +785 706 1.1282557190661096 +788 706 .5155334327438627 +802 706 -.3048238303761757 +805 706 .11408024444609957 +809 706 1.3695198088927452 +820 706 -.6528125550984004 +824 706 -.47429368671104755 +832 706 -.44047238827917296 +854 706 -1.0440495354348955 +876 706 2.078746436931581 +883 706 -.7829877290080554 +889 706 .7759836344150669 +890 706 -1.1064359072626224 +896 706 .8031047300678797 +899 706 -.055672497519518443 +907 706 .5337912507645757 +908 706 -.03711004227118175 +914 706 -.2788351126595736 +918 706 -2.272674727192041 +919 706 -.798399325415566 +930 706 -1.035237121221167 +939 706 .13365279235321625 +954 706 -.8908984846351924 +973 706 -1.613212355904288 +989 706 .9967565763279858 +993 706 .18760789781305587 +3 707 .7050847793829458 +4 707 -.5093337890013675 +7 707 -.22829609400824083 +18 707 .5865877304052023 +22 707 .17283593284618526 +27 707 -.5266072418872129 +31 707 -.1094957224640471 +36 707 .3182072903576742 +50 707 -.3505704886193187 +63 707 -.05355190598076377 +84 707 -.41852995474850563 +97 707 -1.1149966315158433 +105 707 -.06097829229292795 +111 707 -.5745959582312319 +118 707 -.3868498167187873 +122 707 .45910764500666235 +124 707 -.05032657266505136 +158 707 -1.2542927690141388 +164 707 -.7686273601040883 +170 707 -.40286591335066874 +174 707 -.3008538140009945 +183 707 -.24101490908543627 +188 707 .2570468052537598 +220 707 .47573477614383985 +238 707 .3002154135245717 +243 707 .058459609768321236 +261 707 .3180287475131652 +262 707 -.2992886079638185 +266 707 -.3001380443115277 +276 707 -.17768119659828446 +291 707 -1.5544889529023806 +300 707 .010639523965729147 +307 707 .031006559271068372 +314 707 1.1859683807513697 +336 707 -.6852594406872718 +343 707 .9874100371321219 +346 707 -.1693686295646685 +347 707 -.2556526753911663 +350 707 -.45077683234839727 +359 707 -.47569865886791407 +373 707 .2204510702688437 +388 707 .12943055000660136 +404 707 -.39348316632833447 +405 707 -.18674655747319685 +411 707 -.7259434832385703 +425 707 -.21871990685372095 +430 707 -.24107098668310678 +441 707 .27740701497108994 +453 707 .20161527795904943 +496 707 -.04527325643052188 +497 707 .48436219459033814 +504 707 -1.2973638156662752 +520 707 -.618606140159996 +526 707 -.43639425063709525 +527 707 .211466136137536 +533 707 -.24366762917962187 +541 707 .6265797835489364 +558 707 -.2316218835138777 +584 707 -.46855079681007883 +587 707 .4873930924854496 +593 707 .1114207214406561 +614 707 -.2531152870097914 +620 707 -.5858340696954394 +623 707 .4922470033850235 +627 707 .689688402305729 +630 707 -.5448145286713418 +633 707 .6440972645567076 +636 707 -.056154357945288044 +648 707 -.6204682536618612 +659 707 -1.0808767464682167 +665 707 1.041932350486736 +688 707 -.18387593879159198 +692 707 -.6202077638347233 +701 707 .24779327305973456 +710 707 .19667647513768421 +716 707 -.9742252250663013 +723 707 .08941276257235771 +769 707 .17412417870909874 +775 707 .10289723418619925 +783 707 -.09898532845043773 +811 707 .2606701292237502 +812 707 -.30266880201763124 +830 707 -.37988470406092106 +835 707 -.6514868464609024 +840 707 -.08973423253604872 +863 707 -.6558521601212759 +864 707 .12335785670339565 +866 707 -.70491257708981 +912 707 .6533596603796631 +915 707 -.2572851868570343 +944 707 -.6667609069905206 +946 707 -.761105472623648 +948 707 -.829423410323693 +953 707 1.144911891151874 +956 707 -.7614826548221296 +963 707 .94720783949029 +964 707 -.6924576699669335 +968 707 .27467557976019197 +973 707 -.522547390416455 +17 708 -2.0466552716853528 +35 708 -.1668725313957028 +42 708 -.12089907441647857 +49 708 .44607015379863996 +51 708 -.16631475004921908 +52 708 1.9288712830453871 +57 708 -1.450010573648798 +60 708 .476010264463906 +66 708 .5322776407082924 +72 708 -.3476326876462869 +87 708 -.8603554044010253 +103 708 1.1737902450486415 +118 708 1.4101603943352972 +120 708 -1.2486714538396158 +144 708 -.052870611175421245 +148 708 -.13582959694713986 +149 708 -.2480581491636164 +161 708 -.29086815253385256 +188 708 -.20950826569188336 +201 708 -.09109226457783907 +216 708 -1.088906574132633 +243 708 -.651273139530269 +249 708 -.4007701044863742 +263 708 1.1277875927528387 +277 708 -1.6094046600160021 +291 708 2.228921553058441 +297 708 .9578280703782327 +301 708 .5849471320465985 +315 708 2.1139714097538587 +317 708 .17503374878681582 +326 708 -.4384476817654812 +357 708 1.3595056050852918 +368 708 2.5760540673142183 +384 708 -.3060465606656144 +396 708 .20455721563712276 +412 708 .5214118013640394 +422 708 .03792722220913044 +426 708 -.9599149304060528 +427 708 1.3904822851395058 +432 708 -.803063884566392 +434 708 .4592579340305815 +455 708 -2.3434043428352798 +476 708 -1.6587291607869303 +477 708 -1.648514956679469 +481 708 2.238895583296851 +506 708 2.2650139463885233 +518 708 -.4681849073679252 +553 708 -.12816112163080415 +556 708 -1.3281660162086821 +560 708 .985296474906997 +575 708 -3.002752338576337 +584 708 .45176378380253623 +587 708 -.07909205030252314 +591 708 .6239887514227817 +603 708 -.4933586297372521 +616 708 -1.2136962622923355 +626 708 .4083673991466234 +648 708 .07773696112703883 +664 708 -.3834549813847966 +668 708 .002761066652840455 +671 708 -.14844140104637582 +685 708 .11548340169636546 +693 708 .021173049707409693 +705 708 -.14999283411999326 +706 708 -.969160991680937 +720 708 -.2515839524707155 +722 708 .8798512027123532 +736 708 -.374106359888732 +738 708 .05351912994548001 +741 708 -.9065704208159333 +744 708 .438173677065412 +747 708 1.1093889546240632 +754 708 1.2674559769323608 +761 708 -.715422003524946 +763 708 -.13380835929474041 +764 708 1.2062581076018641 +782 708 .03970418806243378 +791 708 -.04827463408895294 +803 708 -2.3398890857331582 +812 708 .9245489487951807 +818 708 1.313619048547492 +821 708 -.6789971354643268 +827 708 -1.6967670923901648 +828 708 -1.6024610492139957 +861 708 1.472856721062516 +876 708 -.7266860648510016 +884 708 .16494134864994386 +915 708 -.25540396186725434 +917 708 -.5890344506472789 +919 708 -.13410034965597784 +933 708 -1.0917217028756916 +941 708 .3639272402800671 +969 708 -1.6538144899406904 +985 708 1.5161320157632847 +995 708 -1.1058903310943218 +999 708 -.9898005365074305 +24 709 .5272282010585454 +28 709 -.2944720125620882 +29 709 -1.0608609182147046 +30 709 .30684053758511787 +34 709 -.2775956252367901 +47 709 -.8878215194137045 +54 709 -.11539502319675218 +60 709 -.9028169108408511 +66 709 -.22841458059524425 +80 709 .264340756585139 +88 709 1.2292502769932578 +93 709 -.9505130921332209 +96 709 -.38211807055037206 +130 709 -.5866624521799677 +144 709 1.3163686349747468 +147 709 1.701462179372974 +174 709 -1.0596491033016817 +198 709 .8475646647619934 +205 709 .6780786179408519 +206 709 -1.0631992691774788 +208 709 -.5733320630332908 +246 709 -.5072330533737135 +261 709 .19641123562787074 +266 709 -1.0324410513257458 +273 709 -1.6248821599787222 +278 709 -.5314688578574236 +292 709 -.056608249058955395 +307 709 .6014416770802429 +310 709 -.3722715555468354 +318 709 -.09820457938984167 +326 709 -.1890174307347785 +327 709 -.7044847268081343 +330 709 -.6350067970198198 +343 709 -.14457113090033613 +346 709 -.07476158676686837 +354 709 -1.1580995287975224 +356 709 -.916456535250506 +357 709 -.5372481163610234 +366 709 -.08464238131555726 +370 709 1.258806985077881 +377 709 -.28252747064974765 +397 709 .04849104850177306 +418 709 1.2999494901934752 +419 709 .05386977304104454 +463 709 .271932862463519 +466 709 -.7366073546916287 +479 709 -.27535400434808355 +487 709 .6041205303834816 +489 709 -.6641837652839055 +490 709 -.6238184890200817 +492 709 -.06453968378269886 +498 709 -.9620262709307064 +506 709 .7304825906530411 +528 709 1.7583616629224426 +529 709 .6968649670136746 +535 709 .847823685065044 +563 709 .1516910228036022 +588 709 -.41847060196889074 +603 709 -.7492357405778409 +632 709 -.11417163235008579 +634 709 -3.326498349222694 +640 709 1.204877614414361 +642 709 -1.743418248097997 +649 709 -.5366075984838437 +652 709 -1.1453137418355193 +654 709 .5268592331285741 +655 709 -.2638748137112072 +664 709 -.25005127565908986 +665 709 -.8029306547174939 +681 709 -.45062676336628965 +685 709 .0025170496619706523 +699 709 .8062590741290352 +706 709 -.33325617061554 +722 709 2.1536153110341045 +726 709 .5161333503310924 +746 709 .25709879532870583 +752 709 1.092404619486591 +758 709 -.28738737751119803 +775 709 .264095202631339 +783 709 .4683451584222863 +798 709 -.28814005664992237 +799 709 .6356496995787099 +809 709 .26880001624375016 +810 709 .09477836618212693 +812 709 -.6878152351048663 +818 709 -.07527270185701534 +819 709 -.02360617814949613 +850 709 .5848906191975667 +853 709 -.4405825240457813 +878 709 .05892105266664095 +894 709 2.0965756872829377 +896 709 .3744469482971491 +906 709 1.3738881530132356 +923 709 .07438362304986866 +943 709 -1.3849417749989181 +951 709 -1.9704093044814175 +953 709 .2506488165523012 +959 709 2.474643554826475 +968 709 .27248472792199796 +972 709 .08080593338141459 +975 709 -.04823996900020057 +981 709 -.19937118779857585 +985 709 1.0841650258244162 +10 710 .40690367012174533 +13 710 -1.5612918333911223 +16 710 -1.6423330170223878 +21 710 -.680996856074815 +29 710 1.4163891418803551 +31 710 .1165825399536527 +48 710 -2.40870560705078 +51 710 1.0201553001100367 +53 710 .9542522496187393 +58 710 -.5309548091054053 +70 710 -.6779499890207261 +72 710 1.1815592957193892 +73 710 -.4160550711358 +74 710 1.7642632420576734 +102 710 .7577009726618988 +103 710 -.8611404733676578 +106 710 -.13846088935314027 +119 710 1.7055028536440124 +123 710 -.6179709753407888 +136 710 .05072607663743498 +137 710 1.6101678662020804 +138 710 -.4438704599966229 +146 710 .329957671241592 +152 710 2.4022470799180704 +153 710 1.5711176505734894 +178 710 -1.075960365157226 +224 710 -.9069037041580136 +234 710 1.2075526919548834 +243 710 -1.27102992022906 +292 710 -2.027847950640936 +295 710 .40941780332910493 +298 710 1.3728529792947508 +301 710 .7959855770499975 +310 710 .4792580697793366 +313 710 -1.8400288609478275 +320 710 -1.7480989792035642 +341 710 -.7162986594998457 +358 710 .656661560727353 +366 710 -.15461196091512364 +367 710 -.14434176670691531 +373 710 -.34728100516652644 +402 710 -1.3752270684713803 +408 710 -1.1599459818729787 +413 710 .29096791100876296 +414 710 .8143995236970878 +419 710 -.5193685348606509 +464 710 .929209801805925 +484 710 .6958331278612024 +521 710 -1.4212740164963136 +530 710 2.120913972577625 +534 710 -.6721280697146598 +544 710 .3382059503376924 +547 710 -.6874519864396915 +552 710 -1.801691296159953 +563 710 -.21914692133275565 +570 710 -2.518703528388562 +602 710 -1.0482421042363348 +603 710 .9931886993625121 +604 710 1.481914478250211 +606 710 -.5026232055040213 +613 710 .2698429262218023 +616 710 -.19370203168869096 +617 710 2.395632057240698 +634 710 .45133964584364494 +650 710 -.7694975060493353 +659 710 -.8037248816076541 +665 710 -1.7153354214898038 +681 710 -.13999157970248538 +683 710 -.633582767078627 +690 710 2.2377531318779615 +697 710 -1.5888664686075635 +707 710 -.4951881620360842 +709 710 -1.4039489285548161 +727 710 -1.1473862695727972 +730 710 1.08551086777844 +731 710 -.05303780525440817 +736 710 .1173088159841899 +751 710 -1.7707285077061021 +757 710 .30668488430761925 +760 710 .3808618095105558 +766 710 -2.6091558052862234 +794 710 -1.9804756354794957 +803 710 .4846984325401426 +807 710 .9876657153954533 +813 710 .36133786031929116 +833 710 1.4019997104119448 +838 710 -1.371813161874464 +840 710 -.6301642873220261 +847 710 -.5233733079778599 +856 710 -.4308794741055344 +865 710 1.0862598855394048 +871 710 -1.2119071657974927 +888 710 -1.8685288252916914 +897 710 1.4924543932963485 +899 710 -.025228283329312956 +909 710 .6126456115871153 +910 710 1.1007307542324547 +931 710 -1.177302490212755 +942 710 -.12083857099693171 +944 710 -2.322671928138144 +947 710 -.9975753296729322 +968 710 2.120593972726506 +988 710 -2.4237202993653075 +989 710 -1.444227320019832 +993 710 -1.357000520882965 +1000 710 1.1940569786292823 +1 711 1.4547643093397353 +7 711 .7585610769584777 +17 711 1.3164025508226362 +45 711 -1.398133510015954 +63 711 .2732527202351259 +68 711 .002749053020596623 +77 711 .52965242436168 +88 711 -1.5677470270796834 +96 711 -.4324865511820175 +106 711 .5472901122381256 +125 711 -.13149428902660876 +132 711 .9931974209608647 +133 711 1.492373398483121 +136 711 -1.1402043980357088 +138 711 -1.982702129275144 +140 711 .8467978335749178 +161 711 .0833678789238762 +175 711 -1.4590320846051987 +189 711 .8502269891446903 +192 711 .8227083364222519 +205 711 -1.1158679610996745 +207 711 -.6411268382781915 +211 711 -.2705550678313295 +222 711 .7020987940629998 +247 711 -.8742197172194451 +252 711 .3139821893201796 +279 711 -1.2457446607283453 +291 711 -1.0113277336872597 +298 711 .33749555242682433 +300 711 -.8333101438397028 +302 711 1.7351229394643903 +306 711 -.5777101488659577 +310 711 -.8961642703398746 +317 711 -1.0412617570171696 +324 711 -1.0801878241702627 +327 711 -.1866347846698791 +345 711 -.6161165670591885 +347 711 1.0155393488839197 +350 711 -1.34204145344857 +361 711 .23404354688257822 +369 711 .0860812122509288 +380 711 .10964574910076258 +389 711 .2774300200979793 +392 711 .9111361357244291 +393 711 1.044537015798355 +396 711 .6344860090508578 +398 711 1.6546069591380488 +408 711 -.926833437998131 +415 711 -1.0583484874685458 +416 711 -.555844571647674 +432 711 .9198317269321205 +444 711 -.5238619037626953 +460 711 1.7629904139316637 +467 711 .25089103427905174 +471 711 .8171265278103803 +473 711 .29934535314983324 +478 711 .76851673303289 +493 711 .011957538889418362 +494 711 .06445053337898493 +504 711 -1.772450013987461 +517 711 -1.7279677892067058 +527 711 -.4218251236208172 +529 711 -.047330622802967987 +538 711 .36167646922973185 +543 711 -.4131898695265187 +544 711 .250568470660064 +572 711 -.8961185696685818 +585 711 .6586242773382184 +586 711 .5071039405234355 +590 711 .9378650660244618 +594 711 -.11109011897345919 +617 711 .9420911429875038 +625 711 -.3707510105582856 +633 711 .3037484911549107 +637 711 .2657137296624764 +640 711 -1.0901291582373511 +652 711 -.49764313612619826 +661 711 -.03412351200342695 +664 711 1.3852985378099614 +671 711 .5642220601309174 +677 711 -.49092924273490607 +680 711 .63600448463584 +701 711 -1.0064285489628406 +735 711 .7356185550189701 +737 711 .40744521439530507 +738 711 -.40298493588233936 +739 711 .5583196300386002 +743 711 1.5639258277585812 +748 711 -.7168267742231937 +762 711 1.0803692410473515 +778 711 1.6179724784618006 +786 711 1.520216268650087 +797 711 .2561643876013977 +806 711 -.7345065039434497 +808 711 .6669378755894033 +811 711 .22004965977008284 +812 711 -.7475501919669718 +841 711 .14072331072613248 +843 711 -.014833028081919185 +857 711 -.685092749949451 +862 711 -1.295907585424113 +865 711 -.7966293596461932 +867 711 .16619682367993704 +870 711 -.23164990757760937 +884 711 .07629495128887692 +895 711 -.662775931313924 +908 711 -2.190951135490119 +919 711 .7709294699324141 +967 711 .3053270230504464 +973 711 -2.02925731537905 +986 711 -.1775760370511072 +997 711 .9081792642570831 +4 712 -.7523601403542073 +9 712 2.3141656147676906 +23 712 .6938459617343465 +30 712 -.9621763086552672 +42 712 -.8882284218128953 +45 712 -.7699331790773586 +52 712 -2.8587257775064434 +74 712 .24789326433496064 +81 712 -.02285364400860837 +85 712 .2303394389732931 +93 712 -1.1163489809086717 +104 712 -.9302867141153928 +124 712 -.5906341338865597 +127 712 .05169206731943504 +129 712 -.7158075254865316 +140 712 1.3507776276000734 +180 712 .31036150641952664 +183 712 -2.3424262902633717 +184 712 -1.110841589476369 +187 712 -.6250673560645702 +193 712 -.5725887801118604 +194 712 1.0469179533419304 +196 712 -.25824177954338623 +203 712 -.7717209938909906 +205 712 -1.9376466958136755 +207 712 -.47135817667031915 +208 712 -.37334482003816505 +216 712 .2680908794808162 +220 712 -1.19723480109911 +244 712 -1.2879423496561133 +252 712 -.2363697636534247 +256 712 -1.7022256477314528 +286 712 -.8707990414381832 +291 712 -.9954229263544925 +316 712 -1.010642616858471 +348 712 .054769176893416954 +363 712 .5651423957699839 +378 712 -2.4930125275106865 +400 712 -.23977418909937726 +405 712 1.071713740558608 +418 712 1.1857140045949368 +427 712 -.7215514762485773 +441 712 .9457422113343187 +444 712 1.0940994231753323 +489 712 -.8193452552497204 +496 712 -.04342934813523778 +514 712 -.5752853508081953 +518 712 -.4762541115818346 +523 712 .8693315204160813 +538 712 .9916837757314618 +543 712 -.7108701451103993 +555 712 -1.5455679723483522 +566 712 -.8935144890614434 +587 712 -.6560702047346223 +591 712 -1.837320342445224 +603 712 -1.883726999709893 +607 712 -.8437652696385314 +628 712 -.1265406890356904 +640 712 -.46169757549485113 +642 712 .08367285469447408 +648 712 -.7753180453495069 +650 712 1.0660079344744369 +651 712 -2.0477608162675023 +657 712 -.28665177046087575 +669 712 -.17361533938119822 +678 712 -.1013872602181734 +680 712 -.10537852310189369 +684 712 -1.1166745210087523 +697 712 -1.0166199728774428 +701 712 -2.828315102644423 +702 712 1.3128498599317036 +706 712 1.3020752445366788 +734 712 -1.27352113548899 +746 712 -.3622814917304018 +749 712 .8633142639618774 +750 712 .06283454064740188 +795 712 -2.3409705829867464 +801 712 .733741446289208 +806 712 -.7456972124474877 +816 712 -1.617154882390033 +820 712 .8085782625402337 +825 712 -1.2365269049400753 +827 712 1.895443146426197 +829 712 -1.3830221956637947 +835 712 .18157420490799525 +844 712 -1.7837790428293183 +854 712 .2160408339624677 +857 712 -.8193297783143303 +858 712 -.9405903590545999 +864 712 1.6954368444443333 +868 712 .25420224534423586 +883 712 -.3457201044749377 +904 712 -.3360819908056948 +908 712 -.38446221460057456 +913 712 .7833598819619262 +915 712 -.005136738175596976 +927 712 -.6949881426910987 +929 712 .9086247096592862 +930 712 -.5820607499197392 +967 712 1.0516505743817537 +968 712 -.5866141096063299 +992 712 .32517783854845683 +1000 712 -2.4888752065814277 +1 713 .18797473995926742 +13 713 1.0276634190455307 +15 713 -.8126522914067583 +30 713 .046308576434010616 +41 713 -.027223726272901316 +55 713 -.773890291196152 +56 713 -.5523511388499664 +76 713 .05551664607907869 +87 713 -.5055675857903152 +103 713 -.3890023160831022 +109 713 -.734755509900224 +120 713 .7135598304785571 +125 713 1.553310722667998 +129 713 1.8082227405430304 +156 713 -1.0746599135972574 +177 713 -1.2806936289441688 +184 713 .782376802152168 +189 713 -1.1610761374595784 +208 713 -.7002533754003574 +224 713 .36255657150886983 +229 713 .26377921877192695 +231 713 .5540364318617091 +251 713 .06813026553446272 +252 713 -.26112021964672594 +262 713 -.5930882760021238 +263 713 1.5103014264486583 +285 713 -.7213652289080341 +293 713 .6748489202151683 +299 713 -1.0396070325690767 +317 713 1.2456028240220045 +325 713 -1.9964377798305666 +328 713 -.09880169606095018 +341 713 .20239935698014824 +352 713 .5887284586340747 +360 713 -1.1301504230257278 +369 713 -.2442828131019465 +398 713 -1.1403609436266726 +404 713 2.0631257314114735 +410 713 -.9655690274375688 +413 713 .9543317053033824 +416 713 -.410928506820498 +423 713 .04616521452454178 +424 713 .541647175087543 +440 713 .2877403130198129 +449 713 -.7642723451264813 +452 713 -.3914989380651891 +453 713 -1.15222628407882 +456 713 -.2768518794782071 +462 713 .3605802826328136 +486 713 .5386869797787663 +488 713 .5851094291104081 +503 713 .36204171016051667 +507 713 -1.1227333339971497 +512 713 .6844698391238505 +515 713 -.9313552630816881 +526 713 .036084122238775114 +528 713 -.16294968948932234 +534 713 .01140444702450702 +541 713 -.8041804711448219 +543 713 -.050841229113043514 +555 713 .33263744592816274 +560 713 -.21211659677400815 +562 713 1.2587222646649037 +575 713 -.15622191218576073 +580 713 .445924459561207 +600 713 .6123321418566462 +605 713 -1.1816447694553172 +612 713 .6667792742543814 +622 713 1.2601809004189772 +628 713 .1362460129610804 +632 713 .3790307054654697 +646 713 -1.1028214879584703 +647 713 .6840208679788076 +660 713 -1.2639960928572829 +666 713 .9839094804815893 +675 713 .46237055236386093 +706 713 -.6232210056295323 +712 713 2.1798067085420296 +740 713 .8336200197796015 +752 713 .23279000863223825 +768 713 -.16990763115911345 +773 713 -.033810541724179466 +775 713 -.17476748257097807 +776 713 .5046546250989807 +781 713 .23192238564280873 +793 713 -1.3343108064584337 +794 713 1.1586383150794122 +795 713 1.1166267831125416 +849 713 -.13810145831968795 +866 713 1.5016253382366034 +868 713 -.30138082390406984 +882 713 -.2008870020796685 +883 713 -.7712412815345466 +892 713 -1.325856924311391 +906 713 -.7722155473981245 +912 713 -.24163320309250239 +919 713 .8380121762345089 +922 713 -.5057369366983737 +937 713 .5585745633480991 +975 713 -.31575949754414856 +988 713 2.061750723128101 +991 713 1.2184207517653107 +992 713 .18768439007642648 +995 713 1.8112498670963257 +996 713 .6626760818273777 +11 714 2.216958851313835 +16 714 -.17157448674400066 +26 714 .6130748819048546 +28 714 -.38948541663640507 +29 714 .23732809735275545 +37 714 -.3028721745725839 +42 714 .4507265919167286 +53 714 -.6556165396528022 +62 714 1.4272951802349694 +63 714 .5438943203293118 +88 714 -.06939392430060959 +90 714 .02054282790485656 +101 714 -.524386159375717 +103 714 -.49550949025564855 +129 714 -1.0402670808921293 +132 714 .05112098160099576 +138 714 -1.1282796656474385 +139 714 .09595514120781294 +148 714 .23375814862929034 +159 714 -1.4984934196852748 +172 714 -1.1033196160638128 +174 714 -.49514097404694646 +182 714 .14385470748317888 +189 714 .5280444441063549 +190 714 -1.2997178549421293 +204 714 .9093955008809432 +221 714 -.5254469080598418 +226 714 -1.1881925292941204 +233 714 -1.4733279827933048 +237 714 -.17770481663977258 +248 714 1.1093922926910555 +253 714 .7761542496729747 +273 714 -.12695286791721833 +279 714 .24144624032986842 +289 714 -1.047926769309697 +292 714 -.2554254129467899 +315 714 .04629439958846508 +324 714 -1.1443559829577188 +325 714 1.0183338081620215 +333 714 -.48138780828151034 +357 714 .20486245148745236 +358 714 2.1284624582540457 +368 714 -1.0085297648681073 +369 714 -.24295041230522108 +381 714 -.03532685987592738 +382 714 -.35059515336709995 +394 714 -.29936212003797663 +396 714 -1.802853276301276 +405 714 -.11403402877145621 +416 714 .5157374698226622 +429 714 -.9005996122292378 +449 714 1.8102771397705009 +484 714 -.3534667913985114 +526 714 -.5343411773916068 +541 714 1.6985889592183463 +550 714 1.0396912565532515 +553 714 .3017572153832765 +568 714 1.7913932320402117 +576 714 1.2356364514829414 +587 714 .757990829830582 +590 714 -.5397710155844622 +593 714 1.0972795692924224 +596 714 -1.1604383373793348 +605 714 .9510617940118878 +629 714 -.6407780695179262 +636 714 .7610330225139161 +637 714 .6402137461999078 +642 714 -1.0302626963527555 +665 714 .15101572449736658 +682 714 .5057733207195916 +684 714 .2663056513311905 +688 714 -.6557667096100809 +693 714 -.7626312059016624 +699 714 -.8926536579602832 +711 714 -1.1227002947065463 +719 714 .4159796346624448 +720 714 .1703516133143986 +740 714 -2.9173550826928802 +741 714 -.4075303191045157 +749 714 -1.1220226941564455 +755 714 .6975259064468174 +771 714 -.8319239965271161 +773 714 -.8390087616828421 +796 714 -.2971066256908528 +798 714 -1.838959654798048 +806 714 -.8151170783124505 +808 714 -2.2116465748745737 +829 714 1.6226182801980102 +833 714 .7397707585594313 +850 714 1.5164439641023368 +862 714 -1.9472319382020078 +878 714 -.7671808946968884 +899 714 1.6456599169072879 +914 714 1.4936698729855307 +919 714 -.08242711028038041 +922 714 1.3726750780754853 +931 714 -.10988922842787492 +937 714 -.13057714553113262 +939 714 .11018681865010695 +943 714 -.6456102644662904 +947 714 -1.1780888311476567 +950 714 -.31291774113697446 +954 714 -.9747285633684384 +967 714 1.9150605670401009 +982 714 -.12484671964816926 +999 714 .13661795302450522 +1 715 .1636872311248147 +9 715 2.2346367461407994 +13 715 -.4483157024704231 +14 715 2.45104672602273 +30 715 -.10101604346551063 +43 715 -.8228686332974021 +45 715 .2903722032182101 +52 715 -1.6020413377303933 +67 715 1.176080656336368 +112 715 -.5412602678989722 +118 715 -1.0741450463629487 +122 715 -.2874217543151924 +127 715 1.1302309671070572 +130 715 .6390159356225686 +150 715 .5403646067256445 +151 715 -.04179199090389614 +152 715 2.9859165779359835 +163 715 -.9025114482161015 +177 715 1.100175816859538 +193 715 -1.9956840606604873 +213 715 -.4321890867626905 +215 715 -2.1450152021574147 +221 715 -.6391663133598665 +237 715 .6523586384850062 +247 715 .1950181858452843 +258 715 -2.5449228490735583 +268 715 -2.511262464642319 +276 715 -.44175493697333224 +288 715 -.6508471714500718 +294 715 1.2171969913769147 +303 715 -.8863534878965835 +312 715 1.041927527829007 +338 715 1.184995521452227 +345 715 .8454426093230463 +348 715 .3998584360760862 +357 715 -.7379576644139023 +358 715 1.8983515889937952 +370 715 -.24652178694004798 +377 715 .5728588851326857 +386 715 1.8847064045160962 +389 715 .24430794475288192 +391 715 1.248890946769223 +393 715 2.4665195494233645 +405 715 1.5490506502445391 +414 715 1.307289197369325 +455 715 1.9807478514234882 +464 715 .26906417571458846 +466 715 .8238253821822623 +469 715 -.5394794543765296 +476 715 .11230273974102584 +488 715 -.4277694044573498 +493 715 -2.1849132704815024 +530 715 1.0391605238320438 +556 715 -.9542405904144097 +569 715 .36152965097757533 +570 715 -.8982749431668601 +572 715 -1.3401554403231435 +581 715 -.25461633266453626 +586 715 -.5818947801500078 +618 715 -2.575035292993588 +625 715 -1.0736487205785898 +630 715 -1.1380429337549887 +640 715 -.7866685705585694 +645 715 .6095960032299272 +649 715 -.268448193100335 +686 715 -.2177794347605535 +709 715 -1.1067576101689338 +712 715 -.9006911368840933 +731 715 2.0312861087984055 +741 715 .07356433438799509 +749 715 -.7393910548249572 +758 715 -.09071884091533841 +762 715 .7000828556241487 +768 715 -.43420161791984185 +772 715 1.271610838569744 +773 715 -.08719622822761688 +776 715 -1.1263444319093943 +788 715 -.8985720421116581 +790 715 1.0752669047952483 +797 715 1.6750997575846864 +800 715 .7152742177127547 +802 715 -.23673674789544386 +806 715 -1.6634024281466049 +811 715 1.4551263256592362 +825 715 -1.512848781354408 +844 715 .8238636005692878 +845 715 1.363549706206176 +848 715 -1.45668380328718 +850 715 1.2538957317650823 +851 715 -1.5717009490549367 +852 715 -.13448045429936095 +870 715 1.8294519144584165 +884 715 -.007729426306744173 +892 715 1.0736409588490963 +910 715 -1.9346002323888098 +911 715 .9060962790539222 +913 715 .32705916854652894 +944 715 -.032561702311842085 +956 715 -.7859400379474969 +958 715 .42191677128221616 +972 715 1.977304712765556 +977 715 -.39813474785698316 +983 715 .8812606388711095 +990 715 -.8882467430747876 +5 716 1.726823775396759 +24 716 .02931434322358424 +32 716 -.9431799505296807 +39 716 .6780273607393451 +44 716 -.5498563290652403 +56 716 -1.9097679473960851 +79 716 -1.0083959526398107 +88 716 -1.0151702712498856 +96 716 -1.1250325136063752 +99 716 1.2938560073823777 +104 716 -.7774401326911085 +119 716 .45801872035915625 +125 716 1.8469679717057415 +133 716 .8647572483802067 +139 716 .47044288036580545 +142 716 1.117882706671898 +152 716 -.0360724787466678 +158 716 .10195655398331402 +162 716 -1.448825342809337 +209 716 -.710885251018074 +215 716 .05401938059370588 +233 716 .82418833469809 +278 716 -.15113901578472824 +282 716 -1.0386899008207966 +306 716 -1.2634883541791282 +320 716 -.8633326722139241 +324 716 .7887327395312301 +347 716 1.3648825311073132 +348 716 -.017067542127053914 +352 716 -.534507586078663 +357 716 -.8450692538526242 +376 716 -1.1780824877014189 +385 716 -1.060130342670218 +388 716 .07232263842481818 +391 716 -1.1652462559262142 +420 716 1.3943399150999376 +430 716 -1.0424576428186563 +436 716 -.40355789636283523 +440 716 .7048854946063975 +449 716 -.7171787372323737 +454 716 -.7418546796887944 +460 716 -.37190312685132654 +480 716 .5827475286950217 +481 716 -1.4780386221648854 +495 716 1.0286891658766573 +504 716 -.8284688963685886 +505 716 1.3534756379788573 +520 716 2.2325849294115296 +532 716 -.35643536437621126 +581 716 -2.1706584394823367 +601 716 .10841081520667965 +611 716 -1.186524750715593 +615 716 -.4689027752848177 +617 716 .8937122971858229 +622 716 1.4397484486318044 +629 716 .06640141383563834 +636 716 -1.1000106267117613 +644 716 1.765859131456598 +649 716 .5352148664134584 +651 716 .5160863508343048 +663 716 -.16065451987242102 +669 716 1.0103579097393598 +698 716 1.0408584858040122 +714 716 -2.405887574982614 +715 716 -.2805872320072177 +722 716 -1.0606622854988939 +726 716 -1.9045700781501724 +737 716 .6995809218342716 +738 716 -.6889598501608496 +750 716 .38904715603289197 +762 716 .07691071310014837 +770 716 .06067964266901331 +782 716 -.6708733264768161 +784 716 -.3879453610976097 +786 716 -.6083486898336825 +802 716 .36243954576275406 +811 716 .3467721637992197 +831 716 -.7508240915687769 +838 716 -.2224203024237917 +849 716 2.0883714925128154 +858 716 .976810528622967 +875 716 .5399175512118882 +892 716 -.43757398359769806 +901 716 -.7751300997408077 +922 716 .37049573293335347 +937 716 .21755553468498826 +948 716 1.0606654144389551 +949 716 -.169481527713743 +961 716 -.27149443097640735 +983 716 2.429967136824188 +33 717 -.4344815244863389 +52 717 -1.3777016189638265 +63 717 .5362737080576736 +93 717 -.40219670587781403 +111 717 .6097621059859941 +119 717 .3462400953579732 +142 717 -.5623563221785339 +159 717 1.267500244202553 +161 717 1.2352291841850749 +170 717 .05530143874508735 +188 717 -1.4992769237200894 +204 717 .34114171284064604 +210 717 .14413396958090424 +218 717 1.3104735844130433 +232 717 -1.23825520275484 +255 717 1.1921152528780241 +261 717 1.1363628071326242 +267 717 -.1993024870810692 +276 717 .9693416746678483 +278 717 -.1399969467762585 +282 717 .3624797132760874 +292 717 .035140153171732885 +310 717 -.3919602344801455 +318 717 .38711427257967335 +326 717 1.120451825770625 +330 717 -1.0969733875444752 +353 717 .9118480380131192 +356 717 .8432082942255599 +363 717 -.10638384109033702 +365 717 -.42877742585200546 +391 717 -.6782255665910327 +404 717 1.3689014514265152 +423 717 .8414989494439222 +427 717 .9361102038415606 +473 717 1.357128297244165 +478 717 1.6980675414750996 +486 717 .13063859986400778 +495 717 2.119903405433653 +500 717 -.3037097822280874 +502 717 -.6735026879190561 +518 717 -.8856992166017149 +521 717 .2563099320970302 +527 717 -.3251460917821961 +537 717 .3521123850461139 +549 717 -2.016420547632267 +554 717 .5358207842576158 +573 717 .08070727108840836 +589 717 -.7407898105960857 +616 717 .37599663959141605 +618 717 .0989222113340515 +620 717 -.862356607234142 +624 717 .11006383764552916 +635 717 -1.5743892118411256 +679 717 -.9883472125207433 +717 717 .482412685004458 +723 717 -1.7180214850136364 +744 717 .5523531209957825 +751 717 .7935844565739028 +756 717 -.8014479984747362 +806 717 -.09067821374103383 +811 717 .5377710039277628 +812 717 -.6575634139646941 +818 717 1.6243713075079045 +825 717 -1.1252943470598702 +842 717 .6534336097045036 +845 717 -1.158454054820465 +846 717 -.08886619257976258 +851 717 -.14130176384506304 +873 717 -.9198333327779938 +881 717 -.6951660124859791 +892 717 .47777454826614424 +907 717 1.1458958066811964 +909 717 .25339194558683054 +915 717 .6999732683323775 +925 717 .06230141529818431 +945 717 -.17032771672943153 +962 717 -1.3951178632765604 +982 717 .2315756713798634 +24 718 1.0639242693128388 +76 718 -.27322240611332044 +80 718 -3.555787928736466 +87 718 1.7050018102460587 +88 718 .8949959081814193 +97 718 1.172252194957408 +103 718 -.9594750200842432 +104 718 .43448249372966286 +111 718 -1.1921244878928565 +113 718 -2.4065412102680326 +135 718 1.1504447628572723 +156 718 -1.0911343165404905 +165 718 1.144621412421988 +173 718 1.0843494515545655 +180 718 -3.1745942067106365 +182 718 -.8199866290018354 +185 718 -.34585676369716956 +196 718 -.9223598079013191 +200 718 2.1340133719708967 +203 718 .3054081525176079 +212 718 .33866422663968626 +217 718 -.40291269284827813 +225 718 .33492260286190334 +245 718 -1.796968175644494 +257 718 .023229958740427097 +261 718 1.435274798772713 +264 718 .8518534578428191 +278 718 -.30524189826987475 +284 718 -.5714110132590153 +287 718 3.711919684505767 +300 718 -.2571383744124792 +326 718 .9625547953383637 +355 718 1.1852143761347806 +358 718 -.1318605692226946 +363 718 .7936935267299388 +373 718 -2.080126710967677 +399 718 1.5926661760752006 +414 718 -1.3423666454289087 +417 718 -1.1768397990795223 +428 718 1.4373579634049862 +431 718 1.0963127686580831 +442 718 -.912478785818071 +451 718 1.4855932623358152 +459 718 .7646732049659891 +461 718 -1.2410898385021523 +466 718 1.5675215796068678 +468 718 -.5319168436501279 +487 718 -2.4784912746010543 +502 718 .2848646744326394 +531 718 1.3831140562945652 +533 718 .4277513561557304 +535 718 -3.1532833576539554 +542 718 .648358821667443 +552 718 -1.2811589661780765 +554 718 -.49900083585404936 +572 718 -.012668688166616447 +615 718 1.0390576188398326 +619 718 -.6494041024651326 +632 718 -.4367698048036972 +641 718 1.0398776781313972 +654 718 3.938543052291844 +661 718 .46587876417300117 +673 718 -3.226954703818358 +677 718 -1.733404787298863 +701 718 .9792878868784567 +702 718 -1.8192843948982302 +711 718 1.676955968845106 +717 718 .0992372532214732 +723 718 2.1942298960675855 +734 718 -2.021805592098874 +744 718 -1.1721887804659525 +770 718 .7070800209715178 +773 718 2.3921026848790627 +783 718 -.7427331050133829 +784 718 .8743156103519741 +806 718 .39833838545654654 +817 718 .5671361839665754 +827 718 -4.610511647806435 +885 718 -.409204188883291 +888 718 1.2134431085152977 +889 718 2.975490587537037 +902 718 -1.634114742004436 +940 718 -1.3030788964512083 +968 718 1.6629926852623251 +977 718 -.4676902091393734 +995 718 1.7794031797770855 +1 719 .528856470298493 +13 719 -.0867439057300741 +22 719 .9151227941899407 +27 719 -1.1126024433420476 +28 719 .7731212063620173 +36 719 -.920378243499346 +54 719 .17893127496373584 +65 719 -.09577673537652234 +68 719 .476792689889082 +69 719 .5288779913170691 +71 719 -.704519207160851 +73 719 .0021413840720914123 +76 719 .8798823572936755 +77 719 1.0094278751485433 +101 719 1.5870716810951722 +102 719 1.6493831099617937 +103 719 -1.1363174128803328 +121 719 .33241723209736995 +132 719 .33197312808779905 +138 719 .605598439479678 +140 719 1.2692210763604193 +142 719 -.06822002342684566 +163 719 -.912899583985733 +166 719 -1.014919605061215 +172 719 -1.4592110837103283 +173 719 -.6926804320201962 +182 719 .28213347976577796 +188 719 -.8978323160043211 +203 719 -.6564375232140013 +207 719 -1.0746561840139868 +217 719 -1.309793439694984 +224 719 -.1260796041582809 +227 719 1.135840877697741 +235 719 .958414714399407 +265 719 1.4011117014033931 +268 719 -.6440866437730841 +275 719 -1.443358617153066 +298 719 .2798644026406215 +312 719 -.18259493247885872 +314 719 -.01054502061483788 +316 719 -1.1169770478617522 +352 719 .010908668317763121 +366 719 -.24689913109610678 +375 719 .6828557296525902 +399 719 .15108760602692833 +403 719 -.6883168861474191 +407 719 .9462017052176337 +419 719 .8825814105047753 +429 719 -.2453937794432533 +450 719 .17467282849892563 +455 719 -.00981809468286686 +469 719 -.14785752340115627 +473 719 -1.8839147967287408 +482 719 1.8628084168078405 +487 719 .8894751791587939 +489 719 -1.6442949603507264 +496 719 .7717085653950201 +521 719 -.749235848182704 +529 719 .08764597208555283 +543 719 -.8484085383410013 +544 719 -1.2122591214777274 +546 719 .7395440446049126 +563 719 .296468235362393 +573 719 -.5920154900917962 +597 719 -1.3436646496732245 +617 719 .9132396677821206 +626 719 -.1027067956297778 +646 719 .8957544079153575 +654 719 -.6947154572989038 +667 719 .400673431864917 +668 719 -1.3968939193961396 +675 719 -1.3344256316430971 +677 719 -1.67766140882815 +688 719 .3010844400585527 +699 719 -.030544755954816163 +704 719 -.7900619645886188 +706 719 1.800180433201613 +719 719 1.1278598749662714 +720 719 -.7057557880456103 +730 719 .781239962866929 +735 719 -.5772891630915488 +736 719 -1.226574223014044 +746 719 .4065233875147676 +758 719 1.086756279904905 +759 719 .6401363409525557 +783 719 -.4850687356967735 +784 719 .05141300793712172 +786 719 -.7756074788668196 +798 719 -.7645301337106445 +818 719 -.46247414509747387 +847 719 .4094677015712839 +849 719 .4803335376965518 +859 719 1.8904347459634465 +860 719 1.0307027885364124 +866 719 -.6247582894362943 +877 719 -1.604524474457409 +898 719 2.362414789438354 +902 719 -.7419432894119701 +903 719 .7103451315595434 +911 719 .3794612160291114 +929 719 .5489849882504075 +933 719 .5708711999613608 +940 719 1.351646488668313 +951 719 .4847544326228784 +956 719 -1.2039898994646523 +975 719 .46457050280025003 +5 720 -.2789403638083875 +11 720 .038218139751707014 +13 720 .12356224142660009 +25 720 .6905728258090383 +26 720 -.35239271397070904 +27 720 1.1377307151418417 +44 720 .28298266359797225 +73 720 1.0035531297299067 +87 720 .30678209040429133 +92 720 .7471241984617621 +117 720 -1.2077081214210021 +128 720 -.2794038335458024 +129 720 .5986089921479073 +131 720 .07235290975376932 +136 720 -.7533811237009964 +145 720 -.5198875674333083 +153 720 -.5612523280278957 +161 720 1.2401089326977444 +167 720 -.18510465366075593 +168 720 -.8520941533957501 +173 720 .39140618354320167 +176 720 .7343689489133728 +185 720 -.42367473171313946 +216 720 -.8530925952687896 +224 720 -.7945708624493792 +240 720 -.1087152492699927 +245 720 -.07310524900087702 +254 720 -1.2428354460804782 +258 720 .4130858243609905 +285 720 -.9277565396537973 +289 720 -.1926358085504371 +300 720 -.3619647987199154 +308 720 1.048720625754105 +310 720 .03398625283940821 +311 720 .44257428250440806 +324 720 1.4691136282372874 +328 720 -.48101990579082116 +332 720 -.6273072265584321 +346 720 .6926305567348234 +368 720 .5862890413436579 +379 720 .29907750079341144 +383 720 .032773789387994794 +387 720 -.11901720906702848 +401 720 .05780149018048206 +403 720 -.3152370514768445 +418 720 -.3009899335696813 +436 720 .7200125293468033 +438 720 .49486795229873964 +442 720 -.4951814761314799 +445 720 .6987296003890429 +451 720 -1.5000123235417893 +462 720 .15401620901356658 +465 720 -.5198854676297822 +470 720 -.525061367492226 +476 720 -.7059044036510544 +477 720 -1.4608826230828351 +481 720 .2829214729044845 +511 720 -.5944908315020904 +547 720 1.3962335348365922 +554 720 -.43440837373542274 +560 720 -.7827316513074801 +569 720 .027104453699801682 +577 720 -.6999559836156868 +583 720 -.807525797225228 +604 720 -.27400912338490824 +613 720 -1.4401833556824593 +635 720 .373653776087842 +642 720 .07742145455020583 +666 720 .1070293810078582 +673 720 .4734878561107275 +686 720 .038787608300834955 +704 720 .7377961110322331 +712 720 -.27250043580584515 +725 720 -.8672755480023928 +735 720 -.5374775942711497 +742 720 -.1405600321674603 +751 720 -.3969526745497092 +758 720 -.4137763100479883 +759 720 -.36136758477385267 +783 720 -.6774435390031855 +787 720 .3177957396179941 +835 720 -.8178833621602134 +837 720 -.6933691771867675 +845 720 .9722644366337477 +863 720 .8916013459448913 +877 720 -1.3913693978372763 +889 720 -.8224241140248574 +907 720 -.7615749132718507 +913 720 .10662067903406305 +914 720 -.02697653323670187 +933 720 -.4517953122566653 +945 720 -.12100661734573966 +960 720 -1.0722518847790952 +967 720 -1.317915566846215 +979 720 -.4883566975675404 +995 720 -.13868950271782451 +14 721 -.7965168990281909 +19 721 -.0005894985392393276 +38 721 1.3033632140847136 +47 721 -.21261905248980928 +73 721 .07234084917378256 +89 721 1.162035627891215 +94 721 1.298234223224616 +95 721 -.6487203192463258 +98 721 .92957810798286 +101 721 .9382781738996829 +112 721 -.7571848355571067 +114 721 .2541675078395328 +115 721 -.9128562788366017 +129 721 -1.0920467004029288 +132 721 .4251296036336057 +139 721 -.9518882276222689 +143 721 -.873531202027411 +162 721 1.7925713008522866 +179 721 .6138734672528854 +186 721 -.10682009718559861 +190 721 -.7868715821144102 +191 721 .8105477431055963 +241 721 .7394659048890098 +258 721 .5249745594476387 +259 721 -1.2931334530565974 +295 721 -.07059697799014392 +308 721 -.6268099068589857 +324 721 -2.5665822344756997 +337 721 -1.3709754056358847 +362 721 1.0082980958979009 +363 721 .36764432596019253 +365 721 -.06637346791978171 +389 721 .7758779880276525 +390 721 -.8369788347523173 +392 721 -.5796533637776108 +398 721 .3330376643518902 +399 721 .5507641083302267 +401 721 .14007078334102402 +405 721 .7227299548861988 +409 721 -1.2833534963385052 +411 721 1.4737000162690077 +418 721 2.398835728219783 +419 721 .18414244866005858 +420 721 -.5794396032018196 +427 721 -.9922664250913814 +428 721 -2.0425824300445474 +437 721 .7880399627073927 +455 721 -.06663748020172602 +462 721 -.6153596435579274 +476 721 1.4012042658534605 +478 721 .04575925156229793 +487 721 -.007460031810799982 +500 721 1.0798682611429244 +506 721 -1.217234818147935 +507 721 1.2399080115579297 +518 721 -1.4095920834714244 +524 721 -.8604117085670472 +546 721 .29091886066263134 +557 721 1.5310650350522435 +560 721 -.7198096282079821 +583 721 2.001435455301934 +590 721 1.8492422822580594 +627 721 -.761858042462114 +659 721 -.4881669964299862 +662 721 .015822587085037337 +670 721 .3982082056558383 +674 721 -.4110509072714885 +687 721 -.7335454375952354 +689 721 1.6133055870576993 +721 721 .6744670105454671 +732 721 .8599282244324175 +733 721 -.5878740184664459 +756 721 -1.4356723416213615 +765 721 .4126340613942176 +768 721 .25177247994425883 +795 721 -.9671821599809906 +800 721 .3299876375085255 +804 721 .11085339022919764 +833 721 -.29046672017355224 +846 721 -1.2499701699948749 +860 721 -.005631719278914454 +865 721 -.1706731540835009 +873 721 1.5095049717650635 +885 721 -.9874227402145587 +893 721 .899489108513141 +902 721 -1.3295073847030316 +913 721 -.4662764754596778 +921 721 -.09936397226881036 +949 721 -.9257423950328638 +952 721 -1.4319064982635317 +957 721 1.5806123220952877 +963 721 -.2506725070661369 +965 721 -.7493680624048944 +977 721 -1.4805958011506188 +990 721 -.474470592043887 +9 722 1.001664110317008 +11 722 -2.537061387148143 +16 722 1.2049949433905762 +18 722 -.921831557910829 +20 722 .8777137097045714 +34 722 -.4311365140425293 +37 722 1.8548906458441021 +38 722 .317845408192023 +44 722 -.444711490487834 +57 722 .7479440199827868 +68 722 -.341917509619383 +72 722 -.8555123895138433 +77 722 .6263450006099143 +105 722 .5653356359075776 +120 722 -.3546231923542311 +124 722 -.060210055767565565 +126 722 -.5995499175556821 +132 722 .4630023941724234 +138 722 -1.078570226594956 +157 722 -.019886981965906256 +162 722 1.4564107525187848 +166 722 -.4715266990560044 +178 722 .5183770704629885 +190 722 .6735817098917809 +191 722 -.6668493121505178 +200 722 .30603671219692813 +228 722 -.815616348862168 +272 722 .12509147053080433 +273 722 .032644035728505966 +294 722 .36823504405633806 +311 722 -.37132537281211564 +321 722 .5958279069362573 +334 722 .6222027897603118 +351 722 2.143080939237781 +374 722 -2.2300994183989755 +381 722 -.8700417004770016 +387 722 .22590340380716686 +391 722 -.5146615851891457 +409 722 .8061015681740997 +417 722 -2.139242936997381 +451 722 -.83222308087713 +478 722 1.5941847777711988 +499 722 -.9745590779737366 +503 722 .23304566609326982 +508 722 -.14464277179171814 +510 722 -.40298932127369524 +515 722 -1.524968368787774 +552 722 -.43100386699798043 +565 722 -2.6129430384945898 +575 722 1.3265866117996048 +586 722 -.4690624429061942 +587 722 -.10999385044210279 +588 722 -1.0642128725170705 +597 722 .07623559156724136 +602 722 1.1232445470009522 +616 722 1.8939277041851317 +632 722 .5115139181984633 +638 722 1.397838500101927 +641 722 1.0856968720394315 +645 722 .36262351901177203 +654 722 .051226343140015604 +671 722 -.5790923847012064 +675 722 -.7804233329977892 +681 722 .33086664519022246 +684 722 -1.2547525992112545 +687 722 -.8150818337912047 +688 722 -.14967228539495203 +695 722 .045353730698717426 +699 722 .5092377299813555 +708 722 .8515229671275675 +723 722 -.32067910892448154 +732 722 -1.4876379560984063 +738 722 -.38581091352003055 +739 722 .18338974973940358 +749 722 1.416698924352839 +751 722 1.4363277613042984 +764 722 -1.8010124527831377 +772 722 2.058769049939581 +776 722 1.808793742390068 +780 722 1.4313019950193322 +801 722 .7137912503261328 +821 722 1.1421069952597689 +833 722 .02958530975052258 +837 722 -.26544313482994975 +840 722 -.35625857000382805 +893 722 .758155891461691 +904 722 .37503812895070887 +909 722 -.47251216326457474 +910 722 -.5701507829705101 +911 722 -.48940697864433025 +912 722 -2.681577059801693 +918 722 -.4667026918897441 +962 722 -.04410085345639696 +981 722 .9491914771764214 +983 722 1.7982440614113657 +988 722 -.23960079247409105 +989 722 -1.4831555498097213 +8 723 -.07520608781228813 +11 723 2.570396846667323 +19 723 .2932979535066581 +25 723 1.743124724846447 +27 723 .3375559559573106 +33 723 -.5538492676154234 +43 723 -.5891366288253083 +58 723 -.7218086290770898 +66 723 1.3093374314062451 +73 723 .08671260573321418 +83 723 .4452089575062172 +96 723 1.6251054206680438 +100 723 -.20284282038537527 +103 723 -.06829102336303015 +110 723 -.9440390429697642 +114 723 -.24357248727872866 +117 723 -1.3861310679636705 +119 723 1.9756803326217551 +120 723 -1.7850970723816366 +128 723 -1.6066032885420898 +135 723 -.49520669993622385 +138 723 -1.053351352433565 +149 723 .983426391640419 +159 723 -2.368021758421997 +165 723 .3784935245814074 +174 723 .5716919793675195 +188 723 .6965385985508045 +193 723 -1.2498605130301264 +198 723 -.13478939913494228 +199 723 -.2016528658627588 +211 723 .03950824256619844 +234 723 -2.1477057939535005 +253 723 .3502000034188385 +260 723 -1.0309709720336355 +264 723 1.7094720134391446 +269 723 -1.1619200871748945 +271 723 .36858617694630014 +291 723 -.539055221132853 +304 723 2.0664238455060935 +307 723 -1.4011806553441337 +313 723 -.6780044014990119 +330 723 .7952489075562043 +337 723 1.076337830308408 +343 723 -.037604277596091154 +345 723 .7781082243103234 +360 723 1.3803387218610632 +381 723 .9109269850224464 +395 723 .004131674670371371 +405 723 .36893095605723014 +411 723 -.758869477375171 +426 723 -1.2120335127177861 +440 723 .5794788623026412 +463 723 -.8325728957218427 +467 723 -.31868140397926165 +469 723 -.6209098308603143 +473 723 2.350382332500981 +499 723 2.0543678455535757 +513 723 -.04294574095928033 +515 723 .7983136397211309 +537 723 -.9742858222672963 +540 723 .5684972334512531 +541 723 1.9839403813367908 +548 723 2.21922094470625 +549 723 -.12996068095129312 +580 723 -1.0675703572965982 +583 723 -.3394450725394202 +585 723 -1.0875681982892014 +586 723 -1.115689157960512 +589 723 .019949991889725308 +596 723 -1.4563697112661098 +626 723 .9692634148517326 +638 723 -2.092297161434669 +650 723 -1.388162852038433 +663 723 -.8020837952530232 +674 723 -.5284604003230411 +680 723 .44531815493414134 +687 723 .19117524218562834 +689 723 -.6740983684089806 +696 723 .4871428422007901 +711 723 -1.2656958350425045 +717 723 -1.844593758484599 +722 723 -1.222189201152203 +723 723 -.9439140239390832 +728 723 -.5180993083043623 +749 723 -.5193081331842402 +774 723 -.7347021133658418 +775 723 -.3571764593011716 +785 723 -.8603929713769802 +795 723 -.1690432114421667 +804 723 .3105785666377828 +812 723 1.4191036783348545 +816 723 .8690875131499808 +836 723 .8762084003898344 +841 723 .6462704389643886 +847 723 2.440655759416053 +850 723 1.1324103984571412 +851 723 -1.2989774865437014 +864 723 1.2184667047514053 +866 723 -1.6139465016260541 +875 723 .9261522544376299 +881 723 1.4438350940817184 +888 723 -1.7319649703201794 +908 723 -1.0928244478692763 +923 723 -1.762618236024771 +924 723 -.4760250103222107 +939 723 .030018297234886526 +951 723 1.455818581522148 +957 723 -.06770560168075619 +970 723 -.6046091496876733 +977 723 -.47286038017202964 +979 723 .6596985364205675 +986 723 2.3107605121518278 +994 723 .4577216377009078 +20 724 -.01782211309022863 +37 724 -.16449232480281606 +39 724 -.30515223076851755 +41 724 -1.1567525361990143 +54 724 .44511467195098586 +57 724 -.023378339349391205 +63 724 -1.2308214666243333 +66 724 .38242385569683596 +68 724 .708383070959071 +70 724 .2673252363267995 +74 724 1.1337505467430395 +78 724 -1.485236363255142 +115 724 1.085788054518494 +116 724 -.3075563657292806 +117 724 -1.678818409318393 +121 724 1.2507253562510345 +126 724 2.172050340648668 +132 724 -.9482071136653405 +135 724 -.08445878003088327 +140 724 .22995912738469554 +141 724 -.5596050306680598 +143 724 1.9507668839290337 +164 724 -.41596479545408316 +166 724 .15824190579186165 +170 724 .18674082592362795 +184 724 .3137958584064661 +194 724 -1.730310604569211 +198 724 -2.0063953588837085 +211 724 .1576058688698094 +215 724 -.9377770033988286 +221 724 -.33899829347770816 +223 724 .8684489820252774 +236 724 .4751738661568355 +254 724 -1.4768295765798471 +269 724 -.7449581104843775 +275 724 -.8467730948024843 +295 724 .12877058592181667 +335 724 1.282414994350837 +336 724 -.40898200801800466 +340 724 .12885427560925172 +347 724 -.9303803896684443 +357 724 1.020276555571968 +371 724 1.9952583495415048 +372 724 -.9201768515668272 +373 724 -.41488341117702804 +389 724 .1952057257309272 +450 724 -.6888141609749523 +456 724 1.4124510730406554 +466 724 1.2324608921245075 +473 724 -1.7642427699386056 +476 724 -.3411289812883398 +479 724 1.6254137118200656 +482 724 .8127226719619925 +494 724 -.8553804945194041 +506 724 1.5537627744964255 +509 724 1.3429669813592235 +516 724 .1550973860844198 +540 724 -1.3087979052046455 +549 724 .3630809967378256 +559 724 -.98550145470275 +570 724 -1.4102185910081424 +581 724 1.0093101310141812 +594 724 -1.4749123935754307 +609 724 .15938685492431087 +622 724 -.6664643881297874 +647 724 -.5879395226748915 +649 724 .7507374954836981 +651 724 .27459175228099175 +679 724 -.8446206459420744 +686 724 -.3418913735065628 +694 724 -1.9539028461026864 +706 724 .06591901601999224 +733 724 -1.4989463942015981 +741 724 -.9894683805593563 +744 724 .3460361149221727 +758 724 -.6795852518507383 +759 724 .0913883074213831 +765 724 -.32410840763065213 +767 724 1.3021787620814416 +770 724 1.7999818445409808 +771 724 -.3499141425073373 +774 724 -.19641602758206814 +809 724 -.2015926745263566 +810 724 -.13101818394919656 +817 724 -1.0656738283305442 +821 724 -.06941516802559579 +824 724 -1.1125871701669918 +830 724 -1.7974277468492126 +832 724 -.4018600587011796 +841 724 1.4253624560979936 +853 724 -1.0990205349466686 +855 724 -.35161755140724366 +864 724 -.8518916226519677 +872 724 .48849031223216277 +877 724 -1.3658501645118322 +891 724 2.234947331486934 +893 724 1.142177252216704 +897 724 -1.4274569367461754 +900 724 .4084766387255296 +906 724 -1.3576751810724317 +910 724 .11361828138770805 +916 724 -.10965033230921804 +917 724 .5406549117687436 +928 724 -.198336310818212 +931 724 .7572725123262969 +944 724 -.9125187066194604 +951 724 -.1362163080184251 +953 724 .326243915314739 +969 724 -.094392299964618 +983 724 -.6878822881180708 +989 724 -.565692485488118 +996 724 .38292859444923716 +15 725 .445278619100173 +16 725 -.4436286507274013 +38 725 -.32526303082262975 +52 725 .3664179817522788 +60 725 1.045345247986813 +74 725 1.0901052690862316 +78 725 -.5185671014659499 +83 725 -.10239171857502484 +84 725 .457157026512809 +87 725 .17356312046104552 +106 725 1.0336162738404207 +116 725 1.0803367558687142 +127 725 .40009420282507463 +130 725 .747878346318054 +133 725 .347766234463056 +137 725 1.4973258021996374 +139 725 .6917960654853399 +143 725 -.10282703455794286 +149 725 -.9770245163017064 +165 725 -.08710164023399186 +168 725 .04297985389831146 +173 725 -.25102741060454203 +214 725 .2178085609359165 +220 725 .09966551985199586 +228 725 .6784206327333369 +231 725 .45695596521000387 +236 725 .03443081528545101 +237 725 .22584044670572556 +244 725 -.5459678136969284 +247 725 -.766596642804781 +257 725 .5186018648675901 +261 725 .1508700680061529 +263 725 .001105291110800502 +281 725 .7873874890159641 +319 725 -.19432284803984862 +334 725 -.5260532943330207 +339 725 .8297525766379958 +340 725 -.37661174845498924 +365 725 .06507437682779424 +377 725 -.7208879068231135 +379 725 .32204072831599617 +392 725 -.34749684941917464 +401 725 -.8736802108968255 +425 725 -.743692144573351 +439 725 1.2620816300846471 +482 725 .19664097452558893 +509 725 .02223818094863382 +514 725 -.6654717335154913 +529 725 .30421172379161543 +539 725 -.2981535903041411 +550 725 -1.4892232657237472 +551 725 -.32313651867860343 +552 725 .3911685431534272 +565 725 -.35037721989700965 +569 725 -.7116216356144753 +594 725 .15049413996900454 +597 725 -.06694064747781256 +618 725 .23080690335741885 +620 725 -.07029227323322172 +627 725 -.219513695102646 +636 725 -.6342543587409812 +637 725 -1.1954393440266287 +646 725 -.5934771871715551 +650 725 .029909049658118247 +655 725 -.2699367881939648 +656 725 .6748974836506104 +659 725 -.876443194854224 +676 725 .47332767163227546 +703 725 .766141598619758 +710 725 .21850781601912325 +726 725 -.007163049553127977 +756 725 .29128640911193737 +760 725 -.07019513643872255 +761 725 -.6287662429821197 +774 725 .982375468162844 +787 725 .08033494720074402 +794 725 .7337461684401556 +797 725 .13247737497091477 +814 725 .6585788220677983 +817 725 .13111291960223553 +818 725 -.09873281096876843 +824 725 .93369374308315 +883 725 -.3522230820805586 +885 725 .10858002459175445 +891 725 .8310291981906055 +892 725 -.13665169161833202 +893 725 .4311643351646593 +911 725 .37934320730560145 +922 725 .008475405270058786 +933 725 .2092318883856613 +941 725 .8531619007511859 +944 725 -.37043162081610775 +946 725 .5766542513937657 +947 725 .27588003109905074 +957 725 .2212718588450582 +973 725 .19893943148489324 +974 725 -.11636976677335337 +980 725 -.39322933969916685 +986 725 -.3721438085062237 +13 726 -1.7354139585541248 +14 726 .028831046095026513 +20 726 -.32102869335781703 +31 726 -.28824303395152184 +34 726 -1.1919799187759288 +38 726 -1.3238748048001032 +43 726 -2.7278128906168044 +48 726 -3.965596420687579 +54 726 -.8260509120145278 +62 726 1.3449201980912664 +65 726 .45599577356077237 +67 726 -.7196430448468565 +94 726 -1.8807003741069734 +97 726 .7912736298586809 +110 726 -2.6234899031101278 +115 726 -.39943260502264777 +119 726 1.1183154893043847 +135 726 -1.0328904523917584 +141 726 -1.3918185408329233 +166 726 .412670450617064 +173 726 .6837312716425249 +178 726 -1.1019599737937302 +179 726 1.4697804643267043 +189 726 .47268234425469213 +209 726 -1.089327812336591 +212 726 -.407308966750498 +229 726 2.3262211649496156 +230 726 .7364746229253109 +235 726 .9322572270044162 +237 726 -1.6169390973055666 +242 726 .5960294991422861 +243 726 -.2467018594690052 +252 726 -.5478852070074537 +256 726 2.805254260458268 +261 726 -2.6014198576541094 +263 726 .4532921410131462 +280 726 .1674712416017856 +320 726 -.5272885364972778 +327 726 .1474722344530094 +334 726 .8628796652934764 +340 726 1.1066275406958426 +360 726 2.873585001733046 +386 726 1.910777322674858 +404 726 -1.7853420139426497 +431 726 1.130470281187995 +447 726 -1.035450452171458 +450 726 .5854847859200173 +454 726 1.5663627924105796 +460 726 -.11019729398920747 +464 726 2.5438790649400995 +465 726 -1.6274138198540786 +466 726 -.8421354087041363 +467 726 .31654075319508385 +478 726 -1.0035440129958428 +505 726 -1.4149638949545356 +524 726 2.004356949070176 +529 726 -.30180563082242484 +541 726 1.7921825891959469 +556 726 -.7214180429340152 +567 726 .8239412470851858 +582 726 -.5740155239540986 +602 726 -2.2811395112840644 +624 726 -1.8236693791082292 +635 726 .8191439535211454 +643 726 -.4756019631613018 +644 726 -1.5168370171958505 +645 726 -.19719705770098955 +646 726 -.6585374091812253 +650 726 -.885145364410368 +655 726 -.6364637643138795 +663 726 -2.0170032331540466 +673 726 -.9515634533840117 +674 726 .13805293541110578 +693 726 -.33978546125156395 +719 726 .6658307193984029 +728 726 2.3023750380373658 +740 726 -2.921810152968726 +770 726 3.155525177036403 +780 726 -1.4915441001807546 +805 726 -1.7896776647168506 +806 726 .8873227382551012 +837 726 .7518557100572429 +844 726 1.4014913686504853 +860 726 -.7461699810996253 +892 726 -1.4231373520514643 +893 726 .1612430932653716 +901 726 -.0773501902140879 +906 726 -.002402937756250183 +941 726 -1.636470379163922 +956 726 .6993354730800483 +957 726 -.38882819715340927 +961 726 .3149296688362217 +992 726 -1.4895916253476529 +996 726 -1.2901839135283175 +3 727 1.012601524433139 +9 727 -2.873438411122184 +10 727 -2.44238368061877 +16 727 -.6530843632544844 +43 727 -.12475442821471198 +74 727 -.6337659413999466 +75 727 1.2616095478422427 +95 727 -2.269562200844989 +107 727 -.5992523992848487 +120 727 -2.21452845865196 +136 727 .9592146799828737 +149 727 -.6975129258186492 +152 727 -2.8379534360323935 +154 727 -.29401880005294595 +156 727 -1.1178115823648052 +162 727 .712610304244506 +167 727 -1.4852442907477834 +172 727 -.44583601425446373 +178 727 -1.878196990883599 +180 727 .5633088839013083 +210 727 .1990841392883061 +213 727 .7188989343793561 +220 727 -.44271630609326584 +241 727 -.8271620222594429 +251 727 -.03952304054603642 +335 727 .8247756998434452 +340 727 -.5360041590862991 +344 727 1.629086835673413 +372 727 -.8039269453270427 +374 727 -.4414596762176976 +385 727 -.7272379066017871 +388 727 .7403370873219733 +397 727 -.9846390499421749 +449 727 -1.933127538996786 +452 727 -.5266799305899046 +453 727 -1.6066329135472426 +456 727 -1.2167909804692665 +460 727 .9116387811284867 +461 727 .03892376713186772 +472 727 .3121944391616553 +495 727 1.802050564413272 +539 727 -.7007131443428741 +540 727 2.043664824981681 +548 727 .5070371784838674 +564 727 .733744332707543 +569 727 -1.8915933279527248 +579 727 .26246580356040733 +586 727 .12898636630951288 +599 727 1.2073695945815295 +614 727 -.2934813597350622 +630 727 .4785006657295433 +632 727 -1.2812103184919994 +639 727 -.06901874259006785 +643 727 -2.2144788768416093 +649 727 -.6012965235123613 +667 727 2.142822084352637 +672 727 -.2562346265793746 +674 727 1.777124391942879 +680 727 -.7608772608022186 +698 727 1.2152765237989902 +703 727 1.4916142827851249 +707 727 .20919185392316647 +713 727 .867857124465834 +717 727 .6466763722715632 +746 727 .22350360035416014 +751 727 .9368455069983135 +753 727 1.774577449779709 +795 727 -.8510976108613624 +803 727 -1.0788054565637986 +817 727 -1.2234194042466708 +826 727 .8730020363504535 +845 727 -.24900200725291918 +852 727 -1.8678469945158755 +859 727 1.5532501519091944 +863 727 .4893732592070821 +865 727 -.26791126215279326 +867 727 -1.8503501027673765 +873 727 -.5841302271218461 +885 727 -1.652764589517148 +891 727 .6974092169688864 +904 727 1.568357669717963 +921 727 -2.214415916921094 +922 727 .5967655932626604 +943 727 1.333721651264857 +954 727 1.7448872934062774 +989 727 -1.0720632552021245 +13 728 -.959478718921853 +33 728 -.46707557978770564 +42 728 .4700748758227197 +51 728 .22878967735689978 +62 728 -.8844537055206644 +81 728 .765993680012738 +82 728 -.5794129473353726 +94 728 -1.4778666445616881 +100 728 -.3287792170211443 +112 728 -.1751001234622913 +119 728 2.0425104278827804 +121 728 -.37983231582380506 +127 728 .3516373020615388 +158 728 -.7982555721136311 +167 728 1.1418408908702429 +169 728 -1.0633892597221224 +203 728 .3191323111609521 +204 728 1.3005028369198095 +211 728 -1.4933168820556064 +229 728 -.7567401022107242 +240 728 -.07625674895101867 +254 728 .5151690730214948 +263 728 -.6713914113094002 +268 728 -.25020006137742934 +290 728 -.5006501377481603 +293 728 -.7773850371387506 +301 728 .02603260770421266 +303 728 .043854935210585845 +308 728 -.7118926534049073 +310 728 -.19926840372089621 +315 728 1.1243626326111766 +317 728 -.6697893247162461 +364 728 .6884026409076336 +403 728 .7836552193419712 +404 728 -1.8955199082311602 +410 728 .002636372365846393 +412 728 .6776593619222261 +416 728 .8335766355308863 +418 728 .09357072897583671 +422 728 1.868958474762955 +439 728 1.429067135168613 +445 728 1.227102475729255 +450 728 -1.26329971985252 +451 728 1.2484897527733017 +480 728 .21203716274227988 +482 728 -1.441648918561376 +487 728 -1.9754506253834836 +489 728 .15556127060167965 +492 728 -3.5454401680083865 +499 728 .9464156473870138 +514 728 -1.0849463348235893 +518 728 -1.415956195952319 +521 728 -1.2349461464752678 +536 728 .6161748979449292 +538 728 -2.3842284159056355 +545 728 -1.5872534536000897 +547 728 .16632229259741296 +552 728 -2.283038768902918 +570 728 -2.157478678374292 +573 728 -2.0374018279243415 +604 728 1.0856309402341346 +623 728 .8848201894029124 +624 728 -1.442420208353512 +629 728 1.1680633521794785 +632 728 -1.547745481610995 +633 728 1.0498963599403934 +637 728 -1.158052499185857 +661 728 -.37303047294248093 +682 728 -.06875188854805726 +685 728 -1.7163785514301182 +707 728 -.9803743176934298 +712 728 -1.7604969744673746 +716 728 -1.736736465837088 +724 728 -.4097947316992231 +731 728 -1.3715840491375564 +733 728 -1.8962201116071644 +743 728 -1.1053023393850963 +749 728 .9202045868344042 +752 728 -.10429694401783882 +758 728 -1.938137471780865 +776 728 -.05446844094223893 +778 728 -.09110065562779485 +780 728 -.4338016591748006 +788 728 .9981873644192627 +790 728 -.05704800419165744 +796 728 -.8012388108499078 +801 728 -2.361056171918396 +812 728 1.9989228309921112 +815 728 -.28372690802960515 +817 728 -1.7326503862827576 +825 728 1.736645375859486 +831 728 -.4174291154268819 +852 728 -2.0014033634670763 +876 728 -.32576747373114434 +880 728 .8148641475697475 +884 728 -.9199414987997915 +885 728 -1.9975069347625434 +927 728 1.4554418885795732 +933 728 -2.0623270742123894 +937 728 -.5780644204747472 +951 728 .09857881479748232 +952 728 -.5017706473625915 +953 728 .3103720438903954 +966 728 -.06587034339035075 +971 728 1.6084216206730433 +975 728 -.019903018489688735 +5 729 -.019764815605897712 +11 729 1.3032385336945882 +13 729 .09837910621324117 +20 729 -.6297964596119291 +27 729 .1640800592356192 +39 729 .059919552595589065 +64 729 1.7804864244887424 +69 729 .2274149584876059 +70 729 .11947763430429524 +72 729 1.77623970070068 +75 729 .1134575366058897 +86 729 -.8305650922915909 +94 729 -.6401734478787922 +95 729 -.466017310628498 +98 729 -.01973584822465894 +103 729 -.16728347814943514 +109 729 .709585899543144 +116 729 -.29696036949012833 +124 729 .6982775629400291 +141 729 .1263296781505745 +149 729 -.6880521855685962 +163 729 .45869850246093924 +168 729 -.6574828077873797 +204 729 1.7008797771118127 +205 729 -.4816081726861413 +223 729 -.9630234995233625 +257 729 -.3534098893718135 +268 729 -.6428784539463619 +305 729 1.012375837730229 +312 729 .9788900346881065 +335 729 -.3268307751233516 +341 729 -.8781292315657778 +358 729 .3061626309135731 +362 729 -1.003708210188824 +385 729 -.5582801005239318 +426 729 -.46843278458813514 +451 729 -1.0590241514738914 +514 729 .1970461804227138 +524 729 -.3140087291942942 +525 729 -1.6033617434820067 +533 729 .06603614980062739 +540 729 .6184665219964003 +544 729 .47067474451099595 +556 729 .9036348507058434 +557 729 -.2123306600579381 +584 729 -.1622270470217321 +590 729 .05834399610782587 +595 729 .05420667798032184 +610 729 .17277783675241137 +624 729 1.7399287460383046 +633 729 -.2595724917398485 +664 729 .5209569404571764 +670 729 -.8503898964209787 +686 729 -.7491959050181162 +718 729 .08913624346351778 +733 729 .30060572765154464 +737 729 .05117392745450919 +742 729 1.1734790658732797 +747 729 .056226262953678746 +752 729 -.05376271650263763 +757 729 -.22134894903201194 +767 729 .6861157863966036 +770 729 -.15711265715482703 +793 729 -.29281633853451894 +804 729 .5976968525186868 +808 729 -.4936077268773137 +819 729 -.3398147988053547 +821 729 -.6752371056416463 +836 729 .3574208748714087 +849 729 .15914553325885206 +862 729 1.1714780173637476 +863 729 .5172258522366658 +873 729 -1.8048449075399766 +878 729 .5465427393804841 +883 729 .0414394935954447 +886 729 -.9303596908187726 +890 729 -.007085307906286302 +916 729 -.5751977075495454 +920 729 -.8771101236867725 +924 729 1.2121944214899465 +931 729 .7195480435365039 +940 729 -.8305373496590831 +952 729 .03838821561600202 +970 729 -1.129589630367689 +972 729 .2779398638242114 +982 729 .9530347837219791 +984 729 1.760603864014123 +9 730 -.25476651316245374 +26 730 -.07639982846742756 +28 730 -1.031025954522952 +42 730 -.34658087152491246 +57 730 -1.5929478617696309 +69 730 -.17565639653747464 +75 730 .11978945762318033 +89 730 .528354111620244 +91 730 -.15877863727437286 +95 730 -1.0697200105386202 +111 730 -.6796971759664843 +117 730 -.44455831136267876 +129 730 -.5253769376156424 +137 730 -.2099953164458913 +155 730 .5351489403383871 +157 730 1.4639441368184603 +189 730 .1992773291623023 +202 730 .3889651038908027 +215 730 .6608854247584228 +216 730 -1.2991272987093456 +234 730 -1.194456463428664 +250 730 -.556483799528045 +252 730 -.16414883900384683 +263 730 -.45713459579538374 +273 730 -.434646556615624 +282 730 -.0469896309010581 +288 730 .1208224757680165 +291 730 1.894876865499097 +292 730 -.5314108136956698 +305 730 .232475261098671 +317 730 -.9506311142209809 +321 730 -1.1453523087245552 +358 730 -1.3485535809389448 +371 730 .6061100105289963 +373 730 .1202033945878829 +378 730 1.8243541688596807 +379 730 1.470457843326289 +399 730 .4206477761051297 +407 730 -.21566243330781026 +413 730 .2462291904754449 +422 730 -.5168299638426674 +423 730 .2838679089191522 +431 730 .27838708154709113 +450 730 -.8098027409333151 +453 730 .08285095191977009 +460 730 .9825248764486652 +494 730 -.912341802808306 +503 730 -.7204652102693412 +508 730 1.0788474130228387 +528 730 .5821981535928498 +535 730 -.43564652421604694 +537 730 1.0993251135660664 +553 730 -.508561623851387 +563 730 .42318212295408036 +565 730 .22889103383385542 +575 730 -2.486035722561196 +600 730 -.138394324250265 +601 730 .8088835492542672 +602 730 -.20464747447655024 +603 730 .44548886716454444 +624 730 .2836556570889521 +638 730 .5067757525788323 +647 730 -1.1427747218283848 +657 730 .977814472128752 +665 730 -1.6931432656208127 +673 730 -.6395833207611434 +696 730 -.1308444243266764 +699 730 .6710918654570148 +713 730 .32280206327099586 +726 730 1.6458535439555495 +733 730 -1.4956224747861757 +750 730 -.1625407424248731 +765 730 -.7349648484512896 +766 730 -1.1720073678017353 +767 730 .40954266536486106 +775 730 .29165556894072425 +789 730 .5958928338906126 +790 730 .16688609785829786 +807 730 1.123795309279972 +816 730 .1296899935931565 +824 730 .392727478101507 +881 730 -.3581004931802351 +888 730 -1.1923380657178329 +891 730 .9857158547627353 +898 730 .015444331823818602 +899 730 -1.1803648716934012 +919 730 -.16160192473977295 +923 730 .41966510775535654 +924 730 .24699941445976387 +927 730 .4733230619515172 +936 730 1.0976567742332048 +944 730 .37625382347810465 +958 730 -1.1405130918028437 +960 730 -.24562355346676074 +973 730 -.18677635944992116 +974 730 .515427872136082 +982 730 .15323179269713005 +984 730 .2785279048622543 +990 730 .376543176594946 +1 731 .5902430851562648 +8 731 -1.1290420439427784 +14 731 .2723872179254375 +15 731 -.5012399781476488 +30 731 -.5719325706119971 +34 731 -.19857312265052546 +56 731 -.45592284284410506 +68 731 .10467664727801443 +76 731 .5134420699349286 +100 731 .4379817605829093 +108 731 -.5369048560232386 +109 731 .5798434677639805 +112 731 -.6079553442929716 +129 731 -.7985708206579338 +155 731 -.2954621722123162 +166 731 -.2256168067538371 +168 731 -.5813710583309027 +221 731 -1.311617044862793 +230 731 -.00456379241148841 +235 731 .21304815930020926 +236 731 -.46619264707640007 +238 731 .6120444923634525 +242 731 .35764231552184766 +243 731 -.11078681928267706 +254 731 1.0848943817070273 +259 731 -1.0156150448866728 +278 731 -.04533527866632841 +287 731 .1933810167204072 +289 731 .4441946310377269 +310 731 -.2991982039246462 +312 731 .016556343264571338 +330 731 -1.1208472999953256 +335 731 -.018573564073814414 +338 731 .511293699887978 +343 731 .7659981063361349 +369 731 -.2585764589292071 +386 731 .6621834990159892 +404 731 -.8115158416473051 +417 731 -.30825859136383293 +427 731 -.46684196130053635 +435 731 -1.1258441774410681 +437 731 .5728523126424439 +442 731 1.1136632338118395 +445 731 .6537440911780579 +446 731 -1.9417131006554338 +464 731 .38322596621386196 +470 731 .520636946554808 +471 731 .7591788402984758 +473 731 .22969385823585328 +477 731 1.307008641306131 +483 731 .294134320727499 +485 731 .8236237576623068 +507 731 .4596048279037788 +546 731 .49349709685415055 +565 731 -.7857477967576695 +591 731 -1.0265498607795183 +598 731 .5736463387183293 +601 731 .15182787049591617 +614 731 -.6702979203729157 +638 731 .14307309117835068 +640 731 -.7851058599127135 +646 731 .013239769305015303 +647 731 .6778606415639756 +650 731 -.43441076526831235 +667 731 .6739603569644605 +672 731 .21304199966984955 +673 731 .7127684659965738 +676 731 -.39912106660213104 +677 731 -.1502506424736143 +689 731 .2879062138203059 +691 731 .5181427417246954 +710 731 .20119894865495572 +713 731 -.8185737456800241 +727 731 .9682519749260188 +732 731 .3331451252092329 +740 731 -.9655493945407839 +749 731 .5016990406974698 +771 731 -.3312847532817047 +776 731 1.1705242015782853 +780 731 .8149865679885825 +786 731 .8640213301037708 +793 731 -.6065597458002 +799 731 .885623928475602 +804 731 .513920874261876 +807 731 -.49102645899867925 +818 731 .5941209456903898 +825 731 .5875363011536346 +827 731 1.1138014327033476 +833 731 .47233917541701465 +836 731 .6323302507978479 +859 731 -.03285243924449985 +862 731 -1.2026973286630955 +868 731 -.6470398288928821 +869 731 -.38238982663267207 +873 731 .351385543550757 +878 731 -1.110219409278326 +885 731 -1.3802164888059067 +895 731 -1.0709025234528213 +899 731 .34412195948524377 +911 731 -.13859053247396846 +913 731 .927406049097872 +921 731 -1.3282095934344025 +924 731 .9818839541059943 +932 731 .4496763135233929 +933 731 -.5599473259451364 +961 731 .45667479148347334 +965 731 1.4990982557615327 +976 731 -.25948720189803476 +16 732 .7196234908146406 +30 732 1.2103797016133182 +46 732 -1.0235990923545994 +51 732 -.1299010240908424 +54 732 1.7720241368792262 +55 732 .7880338165608696 +58 732 1.5718600404230763 +64 732 -.7709856641496864 +67 732 -.9759631620051988 +83 732 .11992410398248213 +98 732 .4553124792566942 +104 732 -1.4850056153745903 +120 732 2.4700029969701633 +132 732 -.00503147742995011 +137 732 .5121708642648151 +139 732 -.35579167218678287 +168 732 .8465258277881209 +170 732 -1.130944870246324 +180 732 -.5704930904257459 +184 732 2.5427342479697432 +190 732 1.625195336506087 +207 732 .6029561881815974 +225 732 -.13691249685492862 +251 732 -.9387526238880067 +255 732 -.46307717045049757 +257 732 -1.6195663165385146 +260 732 .9814660820659895 +293 732 .7977887066133295 +305 732 -.12183211949434103 +312 732 -1.7856572573245932 +328 732 .3204383408021483 +335 732 -.0404055130668652 +362 732 2.070574818146598 +384 732 .9657190770509442 +391 732 -2.127084213119494 +407 732 .3698579866192529 +425 732 -1.483878580717046 +429 732 -.37228608711376665 +437 732 .5620842301099924 +443 732 .32006578228784427 +447 732 -.3684279016243756 +453 732 .1993670453683132 +455 732 -.7663691660039378 +458 732 -.04506179938576739 +464 732 .42031103633104716 +466 732 .8116921749843282 +515 732 .6290546900287926 +516 732 -2.3841481329763936 +517 732 1.1734214654682666 +522 732 -.4597285911083838 +526 732 -1.9439331544220178 +527 732 .7701337917679544 +529 732 .11159526737662495 +532 732 1.1909973922401567 +538 732 .6348202085468622 +539 732 1.0489137380922726 +550 732 .29590939216954054 +560 732 .02203540053828465 +566 732 1.0916170558848166 +577 732 .8850261785973332 +582 732 .8872749835911702 +588 732 .8136254576988448 +591 732 1.5861085280158733 +618 732 2.522314569369715 +621 732 .545813808764062 +646 732 -1.9697607513745792 +651 732 1.57791089089518 +676 732 .02423956449165432 +690 732 1.660223755823984 +699 732 .47567820644715814 +700 732 2.0266849104783353 +714 732 -2.1037184137326195 +716 732 -1.9343996077042067 +717 732 1.3655153713137045 +718 732 -.7572519710490457 +741 732 -.39725428151690767 +745 732 .7735814060836135 +748 732 2.159633136133809 +769 732 1.5636530471468184 +788 732 -.29514637896016477 +838 732 .593503133938242 +844 732 -1.4580508339629503 +848 732 1.6124614347285617 +864 732 -2.218650277008788 +893 732 .38220118740611037 +895 732 -.8397950934461823 +909 732 -1.6052123637853752 +918 732 .33322490841717545 +922 732 .4264129375692205 +928 732 -.7602231454403637 +932 732 -3.0717902818774903 +940 732 .2170093778939698 +946 732 1.592174705468 +949 732 -1.7841805349901951 +961 732 -.2935825330324258 +969 732 -.9841882022811625 +979 732 -.44266773511234225 +982 732 -.1418903128354462 +994 732 1.503821473922183 +8 733 1.9015155343753738 +10 733 -1.5480303153221873 +75 733 .966675879133754 +79 733 -.39609575607204517 +119 733 -.050088954348541104 +121 733 -.16707920131611576 +134 733 -1.126374283448063 +147 733 .7182249562562145 +153 733 -.9378399068705346 +167 733 -1.253395428111982 +195 733 .16490673561224045 +204 733 -.22493158008460512 +230 733 -.23120277077612936 +254 733 -.5140312514460067 +260 733 -.38575122191056754 +261 733 -.9332672549034161 +277 733 -.20499034552240197 +281 733 .6966722955530402 +291 733 .026375339701040158 +302 733 -.7122800141501512 +306 733 .5065520902531371 +311 733 .7969073384858986 +314 733 .16018455613670815 +320 733 .22217448529961997 +327 733 -1.0893346623354916 +328 733 .5551228506465816 +348 733 -.9234013368594615 +356 733 -1.3842222507910924 +360 733 .4117311384983555 +372 733 -.8305394023274175 +378 733 -.9297286189661836 +392 733 .12326451937692796 +407 733 -.9010010689317345 +416 733 -.7712705362280612 +424 733 .9843813873524027 +448 733 -.6351739174642282 +488 733 .916439132546836 +501 733 .7111360892801689 +548 733 -1.653815543391879 +558 733 -.17978376084109132 +564 733 .5410330904724524 +574 733 -.09156322064095701 +577 733 .5552754758772868 +578 733 -.4667546313988091 +590 733 -.3672146931436022 +599 733 .6003716919808948 +612 733 -.2203715360350085 +626 733 -.5145143216359047 +628 733 1.18141253508476 +634 733 -.8592963282402758 +639 733 .17471548715980242 +673 733 .8415888660609533 +678 733 .1842832377269774 +684 733 1.2568040203325734 +693 733 .5727235378103216 +700 733 1.0883875930394762 +708 733 -.867982659418175 +739 733 -1.1403240191312376 +746 733 .09410227436189227 +758 733 -.1515475485737328 +760 733 -.037292722279981344 +771 733 1.0502128560806656 +801 733 .9931539714787918 +823 733 .3241530808104948 +830 733 1.901406812821125 +837 733 .5673570903725401 +841 733 -1.4398469988615052 +842 733 -.5949246413606414 +845 733 -.8583889314917175 +859 733 -1.6102835820203585 +868 733 .194084202864705 +869 733 -.9139269268169279 +874 733 -.39065817525743507 +899 733 .9457376602506993 +902 733 .19778013513442066 +911 733 -1.1447712054464354 +913 733 .38714283788370873 +917 733 -.6460437641473926 +921 733 .6571192894548727 +934 733 .9359431219595336 +935 733 1.444538173340641 +941 733 .8045313066019292 +948 733 1.2918625922986215 +963 733 -.6840603090515529 +988 733 3.2095239760023575 +995 733 2.1300434635831516 +6 734 .8291863007996908 +11 734 -.248494135670137 +22 734 -.6203699480960935 +27 734 -1.341754689332424 +60 734 -.7045801853390096 +94 734 .3723667062912461 +106 734 .09554413620073078 +120 734 -.5091689160600366 +127 734 .6359907712305921 +128 734 -.14858561574391113 +137 734 -.12565873788318155 +149 734 1.9261958175914131 +157 734 .6490466674817733 +158 734 -.4431287056367554 +167 734 -.18846106058862638 +168 734 .23175111428560485 +178 734 .06879549199659679 +185 734 .5956596269341619 +192 734 .621659925350106 +203 734 -.18401939270398004 +211 734 -.6596658134922744 +222 734 .5104026994207135 +242 734 -.37480931714876636 +255 734 .3198572516574718 +263 734 .9412379833213508 +293 734 -.51630270802015 +320 734 .3210754178430578 +340 734 .03656777581547114 +348 734 -.7911313226987406 +350 734 -.6295947082439092 +375 734 .10316646048551151 +389 734 .20259596016779452 +391 734 .1754815861535409 +407 734 -.34272535890002526 +411 734 .9132676010235925 +422 734 .07771402088152113 +423 734 -.7830804231807857 +431 734 -.5691669786875773 +432 734 -.9552350288634478 +441 734 -.6274200584149447 +449 734 1.2936714364617106 +467 734 .79687091488441 +470 734 .21475176953768427 +479 734 .06268048103387988 +481 734 .044221803116904115 +526 734 .7761543421313636 +530 734 -.7433796136096239 +550 734 .7958016109911115 +552 734 -.8320272229590534 +558 734 -.5129981019298768 +569 734 .006757039971831534 +575 734 .09852413223989649 +576 734 -.280185798540141 +577 734 .2950606381442794 +578 734 .6927288406413143 +589 734 .2538380174923234 +591 734 -.9162614754729449 +594 734 .050762087183481394 +601 734 .23908116498090748 +604 734 .3931386642856747 +617 734 .2228089927146545 +624 734 -2.034976426686744 +647 734 .8448809914409364 +652 734 -.4925692853266216 +657 734 -1.6748254564803413 +681 734 -.17040729511212038 +689 734 -.21652038871457494 +694 734 .2583312540727142 +703 734 -.4131698988023683 +715 734 -.949438507955775 +724 734 .17755748049355835 +729 734 -.2947240582409625 +741 734 -.10452254851231746 +746 734 -.5499074196015099 +747 734 .2025703485736393 +758 734 -.06953158855855827 +772 734 1.0756152331675468 +776 734 1.333389301823921 +788 734 1.7256866813402667 +790 734 .8018551705718989 +806 734 .2744583085546701 +813 734 -.002757447905740229 +832 734 -.013043466928328723 +836 734 .5029031161283825 +844 734 -.34145609162719404 +849 734 -.2723995611928048 +853 734 -.1293295094205535 +859 734 -.12834872666113206 +860 734 -.26815159061888877 +875 734 .4431227724060476 +877 734 1.7030681411787698 +891 734 -1.0746119562703134 +907 734 2.035032197530327 +915 734 .6391905750430674 +926 734 -.9970452512630101 +932 734 .054735036860645285 +967 734 1.7338363991301242 +974 734 -.5798270041093534 +29 735 .8059376482247762 +34 735 -.6940351731857634 +68 735 .25132894045028015 +70 735 -.586195151413595 +82 735 -.66375252603018 +85 735 1.277220122827404 +87 735 .5298977458215142 +91 735 .3104516236184617 +93 735 .427368474636671 +97 735 -.14381301921483258 +98 735 .10877026505053171 +99 735 -.9645157979568357 +101 735 -1.6454585960616788 +127 735 1.6992300856334526 +137 735 -.9229508245971785 +144 735 -.242637632835505 +151 735 .4148777706808873 +163 735 .05801854830888944 +196 735 .497539803524994 +204 735 -.12583949866152472 +240 735 -1.8586705996182205 +261 735 .49039718492535755 +271 735 -.8384302527810887 +291 735 -.7405300204727197 +304 735 1.2958594545681796 +307 735 .5412652861881359 +311 735 .21779812322202444 +314 735 .37854525543463047 +323 735 -.2707857225101324 +331 735 -.05137708631322568 +332 735 .487313131636355 +355 735 -1.4674686466834088 +357 735 .6483701684006056 +362 735 .7777184147042799 +381 735 .6233362020888495 +395 735 -.39459223105940566 +398 735 .43632464121059344 +400 735 -.49904797384649835 +420 735 .1311109430272145 +421 735 -.8885243460646133 +426 735 .15557886719753444 +431 735 .2642485139394208 +435 735 -.0002703448713246709 +436 735 .010598909967808445 +476 735 -1.0534674641170843 +478 735 .06422378624231048 +487 735 .29554958675164145 +497 735 -.1919064871175568 +530 735 .9579475535908123 +551 735 -.3894482995155326 +574 735 -.571704402708757 +576 735 1.3951681175801074 +613 735 1.0924433698054605 +624 735 -.26736349284837707 +637 735 -1.5115869667752828 +643 735 .29055379230415107 +647 735 .31388180623655193 +654 735 .47792739362585446 +666 735 -.1937353301707743 +677 735 .4862754213873918 +678 735 -.9598674328595779 +688 735 -1.511214094379512 +712 735 -.9499341797269311 +726 735 -.7639359869930394 +731 735 -.05054237142255989 +732 735 -.2189612895489874 +746 735 -.3276339017278411 +752 735 .2714641239872627 +753 735 -.2724214503368154 +760 735 .18936141422319552 +764 735 -.03144847088476869 +787 735 -.323666858089087 +800 735 1.030035319207922 +808 735 -.47870693549105026 +811 735 .2684508133226358 +814 735 -.12842640846154468 +817 735 -.4387052174018887 +831 735 -.9147337792289907 +832 735 -.3800713835527541 +835 735 .8116730373341694 +852 735 -.03651052968247477 +854 735 .5752350966599565 +865 735 .12208330681875937 +871 735 .7678053887608391 +881 735 .6958710766341368 +883 735 1.0838059752808085 +894 735 -.3222875449434529 +898 735 -.037338754415670944 +899 735 -.3842287942539519 +925 735 1.103833538918613 +930 735 .4187895033524734 +941 735 -.5759135075325987 +946 735 .1956056734163328 +954 735 .7169615161541751 +960 735 .5004598117782235 +981 735 -.34346708625298966 +8 736 -1.018203447095266 +14 736 -.8620859816854646 +19 736 .5744072062989286 +25 736 .016497201472406645 +35 736 -.5433363385626822 +37 736 -1.9514486206757176 +42 736 -1.0980436489960381 +45 736 .2777431126071859 +49 736 1.4615643081420482 +57 736 -.8208852279594123 +63 736 .17962035810801116 +75 736 .06018406131271002 +78 736 -1.1630239924713606 +79 736 .14772778869727438 +89 736 .31253696822712784 +94 736 -.3902403507984666 +106 736 .02372340495772161 +108 736 1.095777177465886 +109 736 -.3292964810134875 +122 736 -1.4265854751418925 +133 736 -.9545720340661614 +148 736 -1.0542504658808332 +153 736 -.31033445990489006 +155 736 -.14788378988078626 +168 736 -1.5889835444995075 +170 736 .009590332261349005 +174 736 .4651397997591813 +176 736 .05264727587032561 +198 736 1.5419464284285833 +199 736 -1.006362715849802 +206 736 -.6177029616625601 +216 736 -.8486757691549596 +226 736 1.3506448724931448 +245 736 .1492138827795973 +255 736 .7998856071438458 +257 736 -.5595478283209496 +258 736 -.05073612973396699 +284 736 .018039650341187104 +285 736 1.2654609115731164 +286 736 -1.8156220670656251 +303 736 1.5353203427444222 +315 736 .5592135247791182 +357 736 1.7686307527865932 +360 736 .24115924703425023 +364 736 .6869458337552045 +369 736 -.45311955802786424 +373 736 -.4388718001509847 +375 736 .850657963877432 +381 736 1.2769781147513448 +390 736 -.34489489489921027 +401 736 1.906608023634335 +406 736 .19530222660732954 +415 736 -.736771533159498 +422 736 -.3393394416408053 +428 736 1.6783334593574406 +432 736 -.5222079067687294 +440 736 -1.8816219447146698 +442 736 .5162158888266243 +444 736 -.15698911803813134 +448 736 .4524291497490852 +452 736 1.2079948764004342 +464 736 -2.4377226029522467 +490 736 -1.1334833946970875 +493 736 -.056844598159469295 +495 736 .9152027397004616 +505 736 1.0628606000390377 +507 736 .08396337957093872 +512 736 -1.0635765569148181 +515 736 1.1353074738243971 +530 736 -.7793263732584714 +539 736 -1.0087165524551576 +543 736 1.1461552753898754 +544 736 .26424286184956297 +548 736 .964327821838235 +551 736 -2.613094218448817 +554 736 2.286730476952797 +563 736 -.23582323587326995 +564 736 -1.8670354851355075 +567 736 -.7911689331024623 +583 736 .4670159097983855 +584 736 .5719080005342859 +597 736 .6019583316238403 +619 736 -.941874434289419 +621 736 .15417101231246805 +633 736 -.43081298667116186 +638 736 -1.0127325293302352 +668 736 .18805937198056147 +678 736 -.25871017933387774 +697 736 -.3471228106481194 +702 736 -.3109282727158196 +709 736 1.8333808197440526 +728 736 -1.0839497730414143 +729 736 .5109567121817528 +740 736 .3440088371642134 +742 736 -.8727593111865907 +743 736 .6035406564208792 +747 736 .04991452611433289 +749 736 .9147323444025516 +754 736 .06365963588257885 +755 736 -.8659165272365074 +783 736 .17494568847162786 +786 736 2.5361883000093415 +787 736 -1.2588748559838814 +799 736 1.7932833059396658 +816 736 -1.1676756782689997 +827 736 -.1129005525274313 +829 736 -.5110424279758712 +844 736 .9100529275080543 +845 736 -.4524141713081775 +860 736 -.4567258956920295 +866 736 -.6145884647340063 +871 736 2.501600544883793 +872 736 1.1148139397162284 +882 736 1.3279842517820268 +883 736 -.33107669351541247 +888 736 -.6686734946154607 +901 736 .382335887068802 +917 736 .222101224601441 +936 736 -.7158613182017713 +939 736 -.8302418572028994 +944 736 1.0833732316603308 +976 736 3.041929495210515 +985 736 -.23040045828305408 +986 736 1.9083272744446738 +990 736 -1.4533433751107168 +991 736 -1.3274745801592658 +1000 736 .4898382748926563 +15 737 1.4387324128705343 +16 737 -.3373703030060921 +33 737 -1.8489530990198955 +35 737 -.8751936924088031 +51 737 .5633995501573373 +67 737 -.5808224458429915 +69 737 -.01654492441855475 +79 737 -.10747193768875324 +80 737 .9499008866102001 +81 737 -1.1175732503461986 +84 737 1.1437723821286556 +89 737 -.34460488761021335 +96 737 1.4565214128342499 +103 737 -.28432009484419074 +107 737 1.4664415799930837 +111 737 .8589734626596576 +154 737 .14793114232723803 +156 737 -.39276248307134837 +163 737 -.053595541041860845 +164 737 -.2867124433718432 +182 737 .6803163875469282 +183 737 .0742760224341642 +194 737 -.5453001775093158 +196 737 1.3969181231254182 +198 737 1.7928989306142313 +201 737 1.071919359497085 +202 737 1.1373346369245099 +204 737 .5701946549154904 +213 737 .7899401181271226 +225 737 1.871653784933792 +241 737 .3212318196738496 +242 737 -.3899989588482583 +244 737 1.3155418695430694 +258 737 .3879275634501982 +259 737 -.6180554449804625 +261 737 .1629292746444852 +265 737 1.608606423014912 +271 737 -.7593334326385706 +275 737 -.9525945036305442 +278 737 -.7262986739337154 +296 737 .18972109655886388 +302 737 -.01867341032109099 +313 737 -.7299481247969055 +317 737 .4925706249313682 +319 737 .78947230358664 +330 737 -.33293453761723923 +331 737 -.5105279306308746 +332 737 .1240315559633762 +343 737 -.4387193894975163 +351 737 .2256381451650652 +363 737 1.411239042639578 +372 737 -.11280257702254226 +384 737 -1.57955343602891 +387 737 -.12968028544372973 +413 737 -.701440524813929 +420 737 1.272069591037583 +446 737 -.336328231409982 +455 737 -2.03782584719992 +466 737 .10182027512085308 +474 737 -.5349288522174354 +480 737 .7948007181527347 +483 737 -.1674929312012497 +492 737 -3.3247572689949085 +506 737 .2677408588954583 +512 737 -1.0012228721429168 +517 737 -.6305241711251508 +526 737 -.8750881427978447 +527 737 -.7893174741134173 +536 737 -1.599501218623936 +541 737 .13163384554051405 +550 737 -.5787872336146451 +576 737 1.5112214778518187 +580 737 1.5003597796652408 +630 737 1.6058108618100837 +632 737 -.2902269534733089 +646 737 -1.0948916382667473 +669 737 -1.285449489899302 +674 737 -1.5055427131032968 +713 737 -1.7132072370284552 +726 737 -.8179373655805033 +746 737 -.34031337229726283 +757 737 -.2359693328754043 +759 737 -.8706202926384023 +772 737 .11376632348146606 +777 737 .9738194082824447 +783 737 .289241669702712 +804 737 -.36626667481982544 +809 737 .9204422645859287 +815 737 -1.375740157858287 +818 737 1.4784997669865632 +831 737 -1.949010688782176 +843 737 .6228864019793554 +854 737 1.026644409486805 +864 737 .41236666426275526 +865 737 -.7357066636273033 +872 737 -.6038316765012914 +888 737 -1.0771012704746408 +897 737 -.25778789293269594 +905 737 -1.2030265623422196 +916 737 -.08234640718719222 +921 737 1.0487360568068327 +931 737 -.11919849874061114 +932 737 1.3179602362386569 +946 737 .5848239420492488 +947 737 -1.374858685394919 +963 737 -.1192817727798015 +965 737 .9982186825937984 +973 737 -.17517587135895582 +985 737 -1.1708497828970854 +993 737 -.6183380630221063 +2 738 1.3969761398277467 +5 738 1.174477832587099 +13 738 -.4130270798166529 +14 738 -.8927785160118029 +48 738 -1.3729475619504192 +50 738 .008313715765796537 +57 738 .40519956692593995 +73 738 -.7944778381054085 +84 738 -.2174055594712184 +85 738 1.6840447224295905 +96 738 -2.470385005180064 +107 738 -.0312529199517803 +117 738 -1.2963325944542714 +136 738 -1.4983954083378608 +158 738 .4946983389219719 +162 738 -1.5939075022185951 +167 738 -1.836610622956759 +180 738 -.8905050933849371 +183 738 1.9496327629003947 +185 738 -.5811274324932874 +219 738 -.8417635750391564 +254 738 -.6877301140836264 +258 738 1.0313607698564562 +262 738 -.030866952315360983 +266 738 -.8550176915563656 +267 738 -.40069136388411136 +273 738 -.6479627320242041 +276 738 1.287217853186846 +291 738 -.6244164603675374 +307 738 1.1342290331797076 +308 738 .9374156191399681 +313 738 .6160253221450505 +317 738 1.5391309239330433 +321 738 -.016313071421674458 +322 738 -.6262731266710355 +329 738 -.30041739270690127 +331 738 1.0002955724696232 +347 738 .5995204949487118 +361 738 1.252501244721416 +362 738 2.000308209027296 +366 738 1.4433689396607576 +370 738 .3648796800927948 +372 738 .0725623973852669 +387 738 -.07962394783110062 +405 738 -1.8247729856788217 +421 738 -.8284074463575622 +442 738 -1.0248804590596912 +478 738 1.4945408052432843 +480 738 .707886458107886 +483 738 1.2555638133388125 +484 738 1.0591842562462919 +507 738 .2097035975616252 +513 738 -.5623394779884547 +515 738 -.4456486176718891 +520 738 1.9679328851626676 +524 738 .14043799187524877 +527 738 .214999184830107 +528 738 .2819575515079053 +530 738 .48947916256090446 +534 738 .6581537690692533 +535 738 .5866275964995836 +536 738 -1.6363422744852676 +537 738 .975881131860438 +541 738 -.44945538937707386 +543 738 -.5375752742994822 +568 738 -1.7957511094192575 +570 738 .7767751497978478 +571 738 -.7273359401188072 +572 738 .6713673368529454 +575 738 2.4814403254628368 +587 738 -.2824035363785179 +610 738 -1.0393809404354348 +613 738 -.8094157663589762 +643 738 -.16268821611497863 +656 738 .6964914543000483 +663 738 .07882780573165232 +678 738 -.9124745127939066 +690 738 .5656608033090865 +700 738 1.471457496443062 +712 738 2.4387430657403617 +718 738 -.24109272743213067 +722 738 -.21294438353406706 +723 738 2.7466817561611445 +732 738 1.0932925397148472 +733 738 1.125867653647671 +735 738 .7031472044669156 +762 738 -.3696821763678132 +765 738 -.21085249120756916 +782 738 -.876051698487362 +792 738 -1.0226576937073035 +805 738 -.7071354453224294 +827 738 -1.5263924887990108 +849 738 .7541978611129883 +852 738 -1.0586273529746426 +870 738 -1.5392082704257126 +900 738 -.9907778908668722 +903 738 1.1244302846808727 +915 738 -.24326005771175177 +917 738 -.005962893556929708 +918 738 .46970151920970826 +940 738 .9835409769319159 +949 738 -.5620730401483505 +961 738 -.47027571131753176 +967 738 .3541144242087307 +971 738 .06266034123793418 +987 738 -.3350784515146239 +988 738 .8290477176250954 +990 738 1.0045387742376197 +991 738 1.6056872076673872 +997 738 -.5173895025133027 +999 738 .0926942818024168 +2 739 2.9199562134114254 +35 739 -.1822711300111344 +46 739 -1.28773759518404 +50 739 1.3416680508810932 +51 739 -.9016136125767016 +60 739 -.9033014438998646 +62 739 -.14466412076013466 +66 739 -1.4259736459772983 +67 739 -.21535917520957798 +68 739 -.6505512322675816 +71 739 1.0552763303351373 +78 739 .1689157411596179 +90 739 -.43734565092986344 +93 739 -.7740573685253799 +111 739 .0835210729943737 +128 739 1.529292487460496 +130 739 -1.2787762671043807 +132 739 .1581502310350561 +159 739 -1.2188437682770599 +164 739 1.129932403342204 +169 739 .7665119732815358 +175 739 .6468433839360915 +193 739 2.2177828581119763 +205 739 2.7383412790630506 +211 739 -.6810983080398598 +213 739 .5129026143072117 +221 739 2.0654076226892815 +226 739 2.097762412884868 +233 739 .29140234979266333 +237 739 -.011650493404342196 +244 739 -.0061351103684539054 +251 739 -.09155745871289966 +262 739 1.804111506877559 +265 739 -.59202417157388 +267 739 -.026646662875103547 +278 739 .05867378582676472 +289 739 .8131507914252942 +290 739 -.42354627957139446 +358 739 -1.6349148083840344 +363 739 -2.9097442578306896 +413 739 -.08142821498332228 +425 739 .7601705147660641 +438 739 -.16915604836574782 +458 739 -.18647954994898855 +472 739 -.023766520182196146 +505 739 .15577892161185794 +515 739 1.1855094398267574 +532 739 .8770672631905474 +537 739 .5575040725314626 +546 739 -1.1829404370039367 +560 739 1.6209873705042257 +579 739 -.6827251904007532 +582 739 -.5920490957335505 +583 739 -.869477729467314 +588 739 .6921250146382897 +607 739 .9901347461588742 +608 739 -.8388793234675163 +610 739 -1.671313251997253 +611 739 .8448921351457066 +613 739 -.17387957189276418 +614 739 .7459107569253176 +619 739 .06496836899654884 +632 739 -1.0870466549792428 +643 739 -.9538036196320184 +651 739 2.471684200515576 +661 739 2.331412421326306 +689 739 -.9071953002730451 +705 739 1.1972312709721487 +706 739 -1.017853370051299 +715 739 -.20351767140229712 +718 739 .48295800571031255 +726 739 .758509504924017 +728 739 -.33183480029997237 +735 739 -.37362209680768327 +742 739 -3.3272069062819263 +747 739 -.9762688254632759 +750 739 -1.9397256987664926 +770 739 -2.1726407492598008 +783 739 -.14933595585162182 +791 739 1.0032528906108975 +844 739 .287959322172204 +860 739 -1.8703641068342463 +865 739 -.46054659392667396 +882 739 1.1552114594534846 +895 739 .6852776357011894 +900 739 -1.0843557605700536 +904 739 -.6664102683810402 +905 739 -1.2805839162293586 +907 739 -1.4378390285737892 +949 739 .4937798989003357 +963 739 -2.5376618580248635 +970 739 -.03967352829642477 +973 739 1.8565424984271104 +977 739 .3015585045753731 +2 740 1.0178137072894704 +6 740 -.18964011075226156 +16 740 -.7793635150550852 +21 740 -1.3717960152318704 +34 740 .2982118350367826 +39 740 .6427490371850939 +40 740 -.3334688251836521 +44 740 .178724491906581 +46 740 -1.9155275593095946 +55 740 .773211132110638 +79 740 1.3459550718928361 +84 740 -.9725816044207269 +91 740 1.3814680564460178 +100 740 .30005426694751425 +110 740 -.16445806471273833 +116 740 .6156625455356953 +130 740 -.4811062627838072 +151 740 -1.0212889793075197 +165 740 .5169642586218833 +167 740 .48090599280770013 +168 740 .5067489259261139 +174 740 .2647210728830268 +197 740 .8219743399542424 +200 740 1.6652062182799308 +204 740 -.3875807442547846 +211 740 -.29468888075687094 +239 740 -.11313759762754311 +244 740 -.9394036524059755 +246 740 -.949395450428903 +260 740 2.348831806910855 +266 740 -.45472634807520795 +268 740 .19397254264545294 +274 740 1.8085709078628716 +296 740 -.1500032087189998 +297 740 -1.4719465071050584 +300 740 -.09057818806553075 +313 740 1.3238936060626438 +317 740 -.2859719001760375 +350 740 .8622662837259254 +367 740 -.08230902093615482 +370 740 1.5817187737769698 +374 740 .3334258604145176 +378 740 .6594593761931586 +384 740 .8225965330887277 +394 740 2.4027852833441923 +408 740 -.19237204082735035 +411 740 1.1887402982449076 +413 740 .4144345764818387 +415 740 .53841646409444 +422 740 .11039503700913916 +433 740 -.14864647497613773 +441 740 -2.7161791742266064 +467 740 -.30242747143252513 +470 740 .23657475277563925 +474 740 -.39219806909071125 +478 740 .08024700781972964 +479 740 -.03532371274145679 +493 740 -.1960734684251899 +499 740 -1.1044763661667578 +505 740 1.1429301537015422 +518 740 -.3450321019446241 +521 740 -1.5095811107644257 +538 740 -.9592857227902579 +540 740 -.9561115246146936 +542 740 .6335836967521781 +553 740 .780949267414243 +555 740 -.47872180531257696 +556 740 .3750651203903313 +558 740 -.3316342741479344 +561 740 -.8369514995636178 +581 740 .685257500462549 +582 740 .12267237178045068 +607 740 -.1112908153157835 +608 740 -.49943111878062957 +623 740 .18027063945663274 +635 740 .2773302438927885 +637 740 -.712918712428098 +639 740 -1.1622441232312581 +644 740 2.0954969397344567 +646 740 -.943515809031297 +653 740 -1.5607786313669132 +656 740 -.11773919652760947 +659 740 -.20090583215014832 +678 740 .021567527540361998 +688 740 1.3421625209681696 +703 740 .21901312434716413 +726 740 1.0288190209984336 +734 740 .6424288946392224 +744 740 -.07557523645137926 +745 740 .8098827583054637 +753 740 -.6572361981900474 +754 740 -.1242767340588339 +765 740 .05356749395841781 +768 740 -.5310889498741647 +775 740 .3244270324052384 +796 740 -1.0979782917998155 +801 740 -.5593233597770306 +804 740 -.17874214100302133 +809 740 1.0084757317956854 +814 740 1.9947338971863324 +816 740 .11717511405231237 +830 740 .30449657369439453 +834 740 .502726786294027 +838 740 -.9039342923939072 +850 740 -1.0071169724684297 +853 740 -.3833212258214357 +869 740 .5964085181998104 +874 740 -.190705926596247 +881 740 -.8181477222735553 +885 740 1.5139369748373177 +902 740 -.5572255034133273 +905 740 1.0163655506052178 +923 740 .4100821683164221 +931 740 1.2826556822851363 +934 740 1.1264081983293248 +944 740 -.4230739828924784 +945 740 1.9496039778258334 +952 740 -2.2347283402958418 +953 740 -.9596993658716627 +954 740 .4406055483350768 +957 740 1.00334068833769 +964 740 .3171991715597749 +975 740 -.382446772266704 +990 740 .04412773034077516 +997 740 .3464988322308895 +999 740 1.545265569491864 +2 741 -1.7926767791617206 +10 741 -.6795200611143144 +11 741 -.956085236049318 +27 741 -.13748819566351478 +31 741 -1.0934442964454887 +40 741 1.1557871050786745 +43 741 2.369783457521989 +52 741 1.5877355536895914 +55 741 -1.0532035847336558 +56 741 .9222297300371509 +64 741 1.0385598998676233 +73 741 1.1481874640026066 +77 741 .21630817644316636 +87 741 -.20640598506027752 +92 741 1.5997170208231069 +94 741 -.7267726669944141 +110 741 -.6335808597574489 +125 741 -.276621419946824 +134 741 .48720911077997264 +150 741 .5498238067483143 +158 741 .9058196815624491 +171 741 -2.0643131803270167 +177 741 -.8671959070062177 +182 741 .8311667005438336 +189 741 -1.3765292143232193 +227 741 -3.9424329722789855 +233 741 .9287182213006586 +241 741 -.5139286813153302 +244 741 1.0953149723261049 +256 741 -1.653058588726715 +272 741 2.44484877914371 +285 741 .5369963656677056 +289 741 .9419745949859863 +290 741 .6662131672134461 +308 741 .9248573634846445 +317 741 .04989153912039471 +331 741 -1.0715094497295357 +332 741 -.8650593015493524 +333 741 -2.1214605866445795 +335 741 -.44190094195990215 +339 741 -1.3567279528558798 +343 741 -1.2016844998163618 +350 741 .7107867040685232 +354 741 -.5756046971202826 +356 741 1.3688714226767413 +357 741 2.242831525744357 +358 741 -1.3361759663897372 +364 741 -.13676257404751793 +388 741 -.39535830227468194 +398 741 -.3656213729381955 +399 741 1.6730659336823397 +407 741 -.5482235347853458 +408 741 .005444360983373378 +411 741 -.8450962559284777 +418 741 -.9785602364638967 +427 741 1.8031429903217708 +435 741 -.023142255064378184 +442 741 -.2540796650389759 +452 741 .6434491022152142 +459 741 .5983442662453142 +479 741 -.2637660722792723 +489 741 .5167190467988083 +493 741 -.9209973095434251 +501 741 -1.6423049856947953 +510 741 1.0277862311839052 +518 741 .9509808025047537 +528 741 -.6817506740259445 +537 741 1.2373891661901066 +541 741 -.6265950507078045 +544 741 1.9317075995556419 +549 741 -.6225018825530737 +555 741 .864955454148772 +570 741 -1.5109527006777337 +574 741 -.9708560148782741 +598 741 .1806377346601701 +599 741 -.03680071266980893 +601 741 -.6099101054307898 +608 741 -1.343291922758371 +618 741 -1.0307356843455748 +636 741 .5686508239905486 +641 741 -.883707658818124 +649 741 -.5258686556435331 +660 741 -.4025650603792469 +675 741 -1.194757386769282 +686 741 .2732545962565166 +706 741 -.35121498113512983 +724 741 .0034206500003896856 +746 741 -.004122497433261756 +754 741 .01610736687816189 +755 741 -1.731019204023955 +771 741 .5128596791096877 +774 741 .3537049605016039 +787 741 -.3958326487029117 +795 741 2.4405745909407557 +806 741 -.48200442374270436 +814 741 -.7008183376678145 +819 741 -.7870410702201075 +821 741 -.058346831535224505 +837 741 1.4430179490633055 +870 741 -.048107949786910575 +873 741 -1.51557133188379 +896 741 -1.8984289944972363 +898 741 .7591608403200484 +901 741 -.2323386474465089 +912 741 -1.52599612108303 +935 741 -.18807605368150523 +955 741 .36756046992922115 +963 741 .1465273463832914 +967 741 -3.0042951025957154 +973 741 1.786850535443664 +983 741 -1.3702556892622937 +1000 741 1.271456139947469 +4 742 -.3695221062927331 +6 742 1.2631948468422762 +9 742 2.0827513444507053 +39 742 -.7068764466513882 +100 742 -.36359100947567125 +110 742 .3756892859976917 +115 742 -2.4511176854232715 +120 742 .517763593519245 +122 742 -.08616325297821326 +139 742 -1.445248154865929 +144 742 1.0371293071399816 +145 742 .7447076557877422 +154 742 .23205250385797632 +157 742 -.26154058512959777 +164 742 1.1903334370527032 +204 742 -.8400352793638222 +207 742 -.33653507438092156 +214 742 -.4988701819121223 +221 742 1.331453937728831 +230 742 .9874515459298403 +238 742 1.040862793654599 +245 742 -.14522379304787214 +248 742 .11939780946555456 +251 742 .05112824353216816 +257 742 .6224968601536625 +267 742 -.20941908836263287 +276 742 -2.0789105496149523 +278 742 .7437304891604979 +279 742 1.1619851300827413 +296 742 1.040231153176401 +299 742 .8650710853779019 +301 742 -1.5662838001538026 +306 742 -.478494253525548 +316 742 .8240841744353158 +318 742 -.7093857020199218 +337 742 .5427350732007782 +341 742 .9499277753757692 +343 742 1.0222534280086362 +353 742 .5515818022556327 +373 742 -1.0348076484901267 +400 742 -.11272990752376844 +428 742 -.26251397500921597 +441 742 -.7883963436671454 +464 742 .05589090426591329 +468 742 -.9525439876624309 +472 742 .3579426841416618 +486 742 -.23265031238965683 +491 742 .7087981986079103 +497 742 .002698397705656247 +502 742 .016212164940181115 +514 742 .101001902736062 +521 742 1.0631282975974192 +525 742 1.7355334200978703 +526 742 .9779427292103607 +540 742 .08276432717504534 +553 742 .08195827482685866 +554 742 1.0277391725528418 +556 742 -1.8102971288185117 +578 742 .455687547768124 +588 742 -.9491598967101458 +595 742 -.6387569912457398 +614 742 .23738958061220666 +649 742 -.009243965687822847 +661 742 2.2577726990855274 +681 742 .429331324535044 +693 742 -.27203868047783103 +695 742 -1.069580644486985 +697 742 -.5112096220779119 +704 742 -1.243466269133471 +723 742 .3611261520027016 +762 742 -.2622417439049185 +778 742 .31642171941888647 +779 742 .14662310881939306 +787 742 .24484430129616874 +792 742 .09296053580969668 +794 742 .2866268806606517 +845 742 .010485004313173688 +851 742 .3110079133972886 +893 742 -.7414472013428496 +902 742 -.35317760893090533 +907 742 .559002853010806 +920 742 .45472932236801006 +925 742 -.9014295346446829 +962 742 1.6829524776741531 +964 742 -.05617673059238245 +968 742 -1.637646730177244 +969 742 -1.3823283289778692 +977 742 -.36419098812652234 +982 742 -.15812728242710977 +983 742 -.6486319909034087 +998 742 .37457044472254275 +6 743 -.7513165991828759 +17 743 .1277323278430143 +18 743 1.4004850800923192 +56 743 -.5188023300925735 +68 743 .6545838533845898 +69 743 -.08740017590236224 +73 743 .5934799426902629 +78 743 .09346306749671351 +93 743 .6786057259608091 +99 743 -1.0572210141042806 +100 743 .1855223492377207 +101 743 -.7976478313305666 +115 743 .5060816631100078 +120 743 .4563599511412116 +125 743 .7040049996051557 +152 743 .5984227132518873 +170 743 -.17740254633852715 +175 743 -.22375249841933137 +176 743 .709808661783812 +198 743 -.2556058403725806 +199 743 -.051864854084605366 +205 743 .28446912209190744 +209 743 .8267739152214437 +224 743 -.8066834146681557 +232 743 .490074709017024 +257 743 -.254099423496898 +265 743 1.9086007334227537 +283 743 .8070635094390919 +286 743 -.36868619402478764 +288 743 -.4028224040776792 +296 743 .44444924786773454 +298 743 .3629989055987546 +303 743 .49786268127357725 +306 743 -.842569117363444 +320 743 -1.004309191672606 +321 743 -.45560103093701404 +329 743 .33148631399439066 +334 743 .7730824246812973 +339 743 -.5404232033335483 +360 743 .8966691148325938 +373 743 -1.472169137726917 +384 743 -.803397172861294 +392 743 -.45555882768575173 +403 743 -.7644747143627283 +406 743 -.22044396954806375 +420 743 .022569418095939122 +423 743 .6821263697997696 +437 743 .7144360616315888 +438 743 .05964846197443176 +452 743 .892695630412835 +474 743 .39322373754773626 +495 743 -.07949313574771939 +515 743 1.1416376449169496 +526 743 -.6896945297000017 +532 743 -1.0776379919163703 +535 743 .45824293112439796 +540 743 .011433063681778044 +572 743 -.7123107421607571 +573 743 -.034427330566150056 +578 743 -.787706411171647 +587 743 -.8320772812808097 +589 743 -.34644630052504244 +594 743 -.17299061474813393 +597 743 -.6440772015125429 +598 743 .7820407753317093 +611 743 -1.057172287485241 +616 743 .2673546712721311 +619 743 .2978202509852534 +634 743 1.2413261814495413 +635 743 1.0838406305394543 +644 743 -.8493385835341966 +646 743 -.5731082389295998 +648 743 -.5958557313153594 +653 743 1.0777659354934008 +662 743 -1.5868899742630374 +663 743 .29473580633884905 +678 743 -.07367258573156019 +700 743 .3602799946614907 +703 743 -.12022171211432647 +704 743 .394525148330327 +723 743 -2.023541707961153 +725 743 -.8349485708479397 +731 743 .22040217006874455 +737 743 .5249549795525028 +757 743 -.4232972239300082 +759 743 -.3802131150587476 +771 743 -.06614195369308198 +812 743 1.121925089137442 +824 743 .06191193332783115 +825 743 -.22562543760755824 +848 743 .6432929035197237 +859 743 -.3875913921507288 +863 743 .3882171613176091 +893 743 .9762256892475241 +900 743 -.32121937893688823 +905 743 .5533165226508862 +911 743 1.4997001720012457 +921 743 .02457921675972502 +932 743 1.3181448442254693 +935 743 -.15260499757048954 +937 743 -.29637676617724207 +943 743 .2819975780888806 +946 743 .9190182640567484 +950 743 .5926280412020997 +967 743 -1.2698422748206306 +970 743 -.9944801567365941 +978 743 .11509963329970044 +982 743 .501344105454977 +986 743 .4617610987751934 +987 743 .8786627250217214 +19 744 -.7531719848516196 +20 744 -.01485555574802018 +43 744 .6118412081422011 +62 744 -.06748627879631462 +72 744 -1.0254024021759331 +88 744 .43592879274024404 +106 744 -.7763287139950459 +122 744 .19878500692477205 +128 744 .5204147941988296 +132 744 .006211265078948945 +141 744 -.013430003226774803 +145 744 .3843853689233325 +154 744 .02934365812908292 +156 744 .08370147344621638 +161 744 -.41158292004820174 +165 744 -.3058944867069373 +184 744 -.2878427806619912 +186 744 .43121478420929116 +190 744 -.2940802357625468 +191 744 -.22650754909609408 +193 744 -.11697809457250055 +196 744 -1.0453518633260093 +207 744 .28502310849344314 +210 744 -.5286923620160225 +214 744 -.11344738305263966 +217 744 .2982716423409931 +223 744 .3063112054934429 +240 744 .7616185590842068 +256 744 -.3475654393549299 +258 744 .1530278587430497 +262 744 .6787273740220829 +263 744 .6414387768467256 +269 744 .2862126248731962 +280 744 -.8247095329287026 +299 744 .6451937737792921 +303 744 -.5251744648086099 +342 744 .5875050158892031 +354 744 -.421107718332693 +367 744 .11727430810943645 +399 744 .33036625362553923 +413 744 -1.1735005453702962 +418 744 .8509988780192803 +440 744 -1.2341251378051863 +449 744 -1.0861696413811197 +459 744 .24014775131654742 +466 744 .7464310787317325 +473 744 .426573956345464 +476 744 .803773340844972 +478 744 .4726803354259377 +480 744 -.37254172555249826 +487 744 -.31779687839573356 +496 744 .2203683739611504 +508 744 -.3334558446196401 +518 744 -1.2924085265149032 +521 744 .7318756252487212 +526 744 -.34465680012269345 +536 744 .9048643673991703 +548 744 -.261171309850028 +549 744 .3438042742914813 +550 744 .8923725103019284 +599 744 -.09450103739099296 +609 744 -.5479207434265144 +615 744 .603128148234686 +618 744 .4333334476127305 +630 744 1.3222001316962733 +656 744 .6452963912503686 +662 744 1.1655232518959824 +684 744 -.739996230434794 +687 744 -.6619601572129556 +693 744 .13580132429931438 +701 744 -.5825508653404119 +737 744 -.34295850979298 +745 744 1.0984903157252868 +747 744 .2674885426464929 +759 744 .30192668402003414 +770 744 .04966894921677347 +772 744 1.2096249553358194 +775 744 -.46856578535233717 +776 744 1.3666003605878347 +781 744 .4734738577992623 +812 744 -.5513282175185193 +820 744 .4935932878696487 +823 744 -1.3437442250403522 +835 744 .9628791897729132 +842 744 .5955488160148156 +869 744 .3773890675855048 +877 744 -.6440492640374615 +887 744 -.1604634002557618 +900 744 .13993628275885972 +910 744 -.2710561832103121 +920 744 .3384022052415898 +929 744 .1468317285887448 +934 744 .1432881028525427 +939 744 -.44308131747821294 +966 744 .1287780326226828 +974 744 .2649389446717061 +975 744 .33139218551824673 +996 744 .9134099186443325 +1 745 -.44884476649157656 +9 745 1.090606715539404 +20 745 .6482225985341511 +32 745 .2116947332669489 +38 745 -.3926724979385886 +49 745 -.7988694484410519 +52 745 -.9957255864592971 +59 745 -.5495319740406341 +61 745 -.1304814028417437 +63 745 .48352423724932136 +64 745 1.1429016776970662 +74 745 .009590959285741454 +85 745 -.5813474854184445 +93 745 -.32807316962568267 +94 745 .230759751360843 +95 745 1.0096316785406316 +112 745 -.8115635235587911 +130 745 -.18728098001232385 +131 745 -.5241350755381868 +133 745 .5314984109307471 +147 745 -.6759467773403977 +152 745 1.59726098488359 +158 745 -.8825969619793852 +176 745 -.11118826158217368 +207 745 .8631181420006835 +236 745 -.2737402244241213 +244 745 -.2359515439264552 +251 745 .06221977334844642 +267 745 .04548478493724506 +268 745 -.383894416092865 +290 745 -.032816578103246896 +291 745 -1.3603880249095779 +312 745 .3750563887278332 +325 745 -.2745405307806749 +327 745 .03419026653481523 +330 745 .24089499700814584 +334 745 .19101905563069557 +337 745 .27858382636225615 +338 745 .7041250859882545 +369 745 .1691002497745999 +376 745 -.2993879261470659 +390 745 -.04454933655366773 +400 745 .16416388890175662 +418 745 -.15150214196277417 +428 745 -.06667252442850032 +432 745 -.0246094768123208 +457 745 .23493573480678034 +462 745 -.1316973914333477 +478 745 -.4486039080547124 +486 745 -.2231447193623678 +496 745 -.5406021275610995 +518 745 .6562969056789675 +519 745 -.1996189532861858 +558 745 .6414355272374016 +559 745 -.06678651196124408 +562 745 -.803924547034858 +585 745 .2644026448060805 +595 745 .38341861772762026 +599 745 .7398555036461197 +604 745 -.07568632753859572 +617 745 -.03852935096434632 +620 745 -.1706051978776249 +631 745 -.1025051087758205 +645 745 .8053955844818937 +654 745 -1.8115410781035755 +660 745 -.3246831154118286 +671 745 .8199670312294787 +690 745 .21952818631902882 +693 745 .045916270328442164 +696 745 -.43875689516026334 +698 745 -.02326723019418027 +716 745 -.03280549717407455 +738 745 -.10987853071111968 +755 745 1.2712930650874772 +771 745 .15764176624009243 +778 745 .61979613180075 +784 745 .5782637992803602 +798 745 -.19875501888253055 +807 745 -.8288651178421456 +810 745 -.25275213764462545 +811 745 .1476878634615888 +815 745 .33260953531285264 +823 745 .1863861151511354 +832 745 -.04783138262802551 +835 745 -.07806824471097897 +839 745 -.5173316553078184 +842 745 -.051035090631124144 +846 745 .6093541583670178 +878 745 -.3007336270717789 +919 745 .6063559904334193 +925 745 -.3019798784783294 +935 745 .3518121249075401 +974 745 -.22653570661353606 +977 745 -.16327219944186114 +986 745 -.7816795479485164 +23 746 .43277851044313204 +25 746 -2.138366206995022 +33 746 1.0009055492873504 +37 746 2.0697741250030397 +49 746 -2.91523913879097 +59 746 1.8906121456480476 +88 746 .30957355135269565 +108 746 .16247222745229095 +113 746 -.1260940912706051 +122 746 1.6832723017963458 +139 746 -.8356013677521614 +140 746 -.9261373787500391 +141 746 -.635155766996502 +146 746 1.3091418573545066 +172 746 .889901660378512 +176 746 -.39219750267834685 +193 746 .3644253402186829 +196 746 .1075440024097593 +201 746 .42875640002044657 +207 746 .9094959232683584 +210 746 .840343901510191 +225 746 -1.8299374658943839 +227 746 2.8483971063476465 +246 746 -.038428870160421506 +251 746 .5752719351462309 +260 746 -.6370189600634878 +271 746 .12532876088069111 +277 746 -2.9317040825482743 +280 746 .6441355312279883 +281 746 -.20891328227631153 +302 746 1.3733299175347276 +304 746 -1.7784707811582467 +321 746 .691495672261872 +344 746 -1.2576793005745737 +358 746 -1.3632815290104197 +365 746 .13862158768768734 +367 746 .6009829293107061 +381 746 -1.3016308208993115 +392 746 -.15409904867161484 +408 746 -.3851455069370106 +419 746 -1.881970942779075 +437 746 .29487935386611724 +444 746 .19876018426698733 +453 746 1.4043070519180127 +462 746 -1.285779306789672 +463 746 -.1468909276905042 +478 746 1.363569954594392 +486 746 .6541505524254744 +493 746 1.1257531435113326 +501 746 1.2701820918010251 +509 746 .6821019557841104 +550 746 -.3174259952305367 +562 746 .07937779170701513 +566 746 -1.097596053769004 +572 746 1.650318026307158 +588 746 -1.3486671030540656 +590 746 -.03785871890248782 +599 746 -1.3704467142940748 +619 746 1.252957318065187 +635 746 .2670088771248597 +637 746 .3105837427741558 +648 746 .6969445892783521 +649 746 -.18214135492915587 +657 746 -1.7231517540708168 +663 746 -.5033428092207813 +664 746 .6022284801803888 +687 746 -.40577822150460574 +696 746 -2.4212877979382026 +697 746 -.3932080069117661 +701 746 -1.9225083072115006 +715 746 -2.81918323348952 +742 746 -.6415090019369396 +748 746 1.650013063523179 +756 746 3.1420331495050746 +760 746 -1.1283070391474126 +772 746 .15559877129653363 +777 746 -1.168136858735609 +783 746 .6683367527649781 +785 746 .854122891681738 +786 746 -.40331328581882686 +787 746 .8581424074017532 +788 746 1.2342296383431082 +797 746 .19344019484735653 +828 746 -2.9174034454308235 +838 746 -.30433740124715636 +842 746 .9055398992566044 +868 746 2.025393380176437 +883 746 -1.0450955725110704 +892 746 -.6307000975117044 +911 746 -.3141952643951089 +933 746 1.2805884411565152 +936 746 .8385114564551899 +943 746 -1.8506296101017525 +974 746 -2.2151875448565113 +979 746 .7093093543807908 +980 746 -.19631770858209316 +6 747 -1.2625248901269337 +12 747 .6287248166111548 +25 747 -1.822245509781407 +28 747 -.88295697206673 +33 747 -.9044170090968309 +40 747 -1.2171951887668135 +41 747 1.0560900465903418 +47 747 .02840230095043665 +50 747 -.5164854546942191 +63 747 .3763217454393782 +72 747 -.8709025468332469 +75 747 -.9775676820534663 +81 747 1.1541182329524295 +94 747 -1.3554283941067136 +108 747 -1.0310426512986712 +109 747 .9470439597343406 +122 747 .8814759982635839 +135 747 -.20119281480345272 +138 747 -2.350547565655297 +143 747 -.16824275266821412 +154 747 .015473771784125942 +169 747 .3492919473019263 +170 747 .21636131673716483 +171 747 .0846010910078425 +173 747 1.1528919831955318 +181 747 -1.3803620910157586 +183 747 .9649781803061568 +186 747 -.7579107043761107 +187 747 1.400731407754234 +223 747 -.6880567304418114 +237 747 -.09920044412568646 +260 747 -1.4641751422409595 +274 747 -.0679979510277447 +281 747 -.19378125431583063 +288 747 1.2730563148786598 +295 747 -.7254318256295745 +298 747 -.003514528340781975 +300 747 .1576550406869615 +309 747 -.48673213201245974 +323 747 1.0308028689477975 +354 747 .4282564110578928 +358 747 -.8473825063438108 +361 747 .49488081120845373 +369 747 -.8189222046598681 +370 747 -1.036778086949305 +378 747 .03812817208128601 +392 747 1.7432974498563991 +394 747 -.4545964173218703 +396 747 -.3595614877774912 +398 747 .8438786604118295 +403 747 .36044055747485426 +412 747 .005668004626950423 +421 747 -.9833983369350491 +426 747 -.5337841564516886 +438 747 -.039005058508967294 +439 747 2.766442356034059 +447 747 .4188649797784732 +454 747 .5239724429044905 +467 747 -.2243710783083191 +481 747 -.5581149845502579 +482 747 -.7597931307166622 +486 747 1.9559465435520251 +487 747 .988195510992911 +489 747 1.09028697576213 +516 747 -.4853164681390271 +535 747 .1720352455726182 +538 747 -.09328837231915853 +545 747 -.8979724908138862 +546 747 .09388016192760706 +548 747 -.9782482478351666 +577 747 .3362436339363324 +580 747 .11398787982664887 +581 747 -1.5881456872551702 +582 747 .3776239296496816 +586 747 .38984256480053137 +593 747 -.44249805784471086 +598 747 .6721541219303488 +602 747 -.07022266496754026 +603 747 -1.1006488092501767 +623 747 .06470839551712543 +635 747 -1.8964477610618298 +639 747 .1396324443589163 +644 747 -.22104324498839786 +660 747 -.12642966125503374 +693 747 .13558528513587323 +697 747 .1044736608837782 +701 747 .2838956582953156 +708 747 -.647011319429325 +741 747 .5253354142774556 +750 747 .8318550096201784 +754 747 .35865718372499655 +759 747 -.5696332491111336 +764 747 .47317435682111986 +778 747 1.5980417052874074 +783 747 1.0808038046104422 +784 747 1.019296700270834 +786 747 1.4262936232789423 +794 747 -1.714560256838652 +800 747 .043783103990183855 +809 747 .19341915494402448 +812 747 -1.4395064768882353 +814 747 -.33855789212576826 +819 747 .6916034677522717 +830 747 .8317235199685669 +840 747 .8302221054450813 +841 747 .04583325520185136 +845 747 -2.1087453319065204 +846 747 .4719215091126451 +851 747 .8494262556023203 +881 747 -.6956496084707094 +885 747 -1.0245685368476496 +887 747 -.6816802269080828 +892 747 -.8619757808487425 +896 747 .15552841712898485 +898 747 -1.6850296293251419 +905 747 -1.6836842109925911 +910 747 .02782185454273378 +930 747 .24357496718452543 +975 747 .1113102923837258 +991 747 .5075629940291674 +993 747 -1.5027678032614578 +1 748 .7486602644008583 +16 748 1.1549254697128706 +21 748 .5221349659381556 +25 748 -2.6945402640895426 +40 748 -1.0347649351520305 +75 748 -1.1267008022232452 +91 748 -1.0957439485540932 +121 748 -1.062555249331686 +135 748 -.08777972834542432 +149 748 2.217101325579011 +174 748 -.945855626852727 +175 748 -1.5366542163921195 +209 748 -1.4178535719004868 +216 748 .9216763818999409 +280 748 -.3523684994815229 +289 748 .3021084950001835 +344 748 -1.7652239868202315 +348 748 -.9520948636718229 +364 748 1.3841323741320366 +387 748 .9342999218774256 +389 748 .0617314212879906 +392 748 1.7558370084959918 +393 748 .3996600329621334 +404 748 .7123644474564235 +406 748 .8310163438350071 +407 748 -.017485933862001046 +409 748 2.046253973451421 +421 748 -1.6429333312414578 +445 748 .6844109317096432 +454 748 1.0710837115780947 +477 748 2.6572685874222497 +493 748 2.4975838874304017 +500 748 .06953406754654268 +502 748 .30457387625069066 +513 748 1.9250946539367277 +518 748 -1.011243078007638 +523 748 1.0375005276632687 +525 748 .9281991513198926 +527 748 -.66645123846097 +540 748 .2753538544780953 +545 748 .8191285357105023 +551 748 .12704761541715967 +563 748 -1.2857458125703505 +564 748 .23314666408092038 +566 748 -1.0567500007977908 +574 748 .05469426939652697 +578 748 .8243506408750891 +585 748 -.6145136309734516 +599 748 .734988612590604 +654 748 .8231675313859921 +663 748 .045689378424455154 +672 748 -.5975780586389503 +673 748 -.5940686783484065 +674 748 .5987469563770152 +688 748 -1.2462161619664087 +689 748 -.04493331198654696 +722 748 1.5945570921723295 +735 748 1.076130492298462 +744 748 -1.3072326365146407 +756 748 -.574317570404397 +757 748 -.3349962940819533 +761 748 -.4187938432004793 +785 748 .15235628666238601 +793 748 1.0903236118582353 +799 748 2.5740793751915607 +820 748 -.285902223618127 +826 748 -1.2059284073061762 +833 748 .8082610074281957 +858 748 .08003522497681269 +861 748 -1.5676155590938299 +863 748 -1.3785736011558039 +869 748 -.527704394390521 +872 748 -1.1507784286889076 +876 748 .34256879758012315 +880 748 .7217862263956083 +887 748 -1.307861920938904 +890 748 -.5723619162229673 +901 748 -.6329101707177528 +956 748 -.7217131263537068 +980 748 1.190460011931704 +982 748 -.6722568974144792 +987 748 -.4718200186942318 +988 748 -.38612680738614086 +991 748 -1.0574203420242287 +994 748 -.5654348163848131 +998 748 .056600119290697345 +27 749 1.7090306841421952 +28 749 1.0477957297303755 +30 749 1.3361913391088214 +50 749 .34395148458794234 +65 749 .32392598255611255 +75 749 .8968930145371762 +82 749 .6353425593603672 +85 749 -.09305738024398534 +109 749 -.08481787330955996 +127 749 -.4697598463871437 +142 749 .5093058462626384 +149 749 -.710639812671465 +157 749 1.5209395313838248 +160 749 1.5332900237417184 +162 749 -.038197135444831484 +165 749 -.373913405345321 +167 749 .4713305885145429 +180 749 .7899529401879444 +194 749 -1.3433997489845229 +205 749 1.4106439302442104 +221 749 .4522145065227622 +229 749 -.8496769037243143 +249 749 .005796127063415597 +251 749 -1.0025070721289544 +254 749 -1.3288346990763222 +255 749 -.9699678635339277 +264 749 -.3245847118139866 +272 749 .5416090407347772 +273 749 -1.192313624654188 +302 749 -1.2067311900943445 +310 749 .28839260437136305 +311 749 .2321093115527227 +339 749 .29572069017010516 +360 749 1.7970667133823162 +374 749 2.203074277606474 +375 749 -1.215727159862826 +384 749 .47864306781515076 +389 749 -.008566638916393194 +414 749 .2927945245288639 +416 749 .17892372362447984 +431 749 .23488322142017673 +435 749 1.2727409563974257 +444 749 -.7031018560788482 +464 749 -.08213227947804394 +474 749 .7595616550775144 +479 749 .4035650343226762 +484 749 1.5277574070948325 +494 749 -1.4455102621413063 +507 749 .4931818846881641 +510 749 -1.4346517380809218 +511 749 -1.2859500475458523 +519 749 1.5065640343183415 +526 749 .6486687487294053 +529 749 .4169707132058963 +535 749 1.037971101586201 +536 749 -.23419157859951448 +544 749 .5553298572737017 +563 749 .22766453592268715 +584 749 .33980950199573035 +591 749 1.0038960972634376 +605 749 -.9128277207120987 +606 749 .7493620646892696 +612 749 .2566397328918034 +621 749 -.7990488196344785 +623 749 -.04672170518978841 +632 749 -.35076503945642934 +636 749 .05769576286678844 +640 749 .7525783630947818 +644 749 .10522896748907698 +650 749 .883562008127695 +652 749 .35131006922165886 +684 749 -.21688146195728694 +688 749 .19682041825740787 +691 749 .25968726364169237 +692 749 -1.172178890800992 +697 749 .05697490439581192 +718 749 1.9475637975288822 +725 749 -.2767870879306392 +729 749 .0667193994731154 +730 749 -.38918090894479807 +732 749 -1.152938318381681 +737 749 1.0110998873080577 +749 749 -.303232096007539 +759 749 .62715591869799 +763 749 .7508105106393796 +768 749 .08358701840417336 +771 749 -.9344194773485942 +773 749 -.5830663698499515 +793 749 .07326744736655988 +801 749 -.5301261432722897 +803 749 -.8630900067759997 +824 749 -.5993974116737499 +835 749 -1.2319594611701525 +837 749 -.2627143438318135 +844 749 .05102784966727718 +852 749 .3569256505823573 +876 749 .7301538256275166 +889 749 .8339333424895266 +900 749 -.14583809437979717 +909 749 .32260616060247516 +917 749 -.0805241339030682 +926 749 -.020635421994374674 +928 749 -.24101495662422817 +931 749 .4176489806666813 +942 749 -.13173206140899865 +943 749 -.602491007267316 +947 749 .5540451563391622 +952 749 -.6437024695836452 +954 749 1.028530500774447 +964 749 -.4042231178747082 +965 749 -.612596880264351 +975 749 -.541062535573849 +984 749 -.8768187810239889 +9 750 .2905952043174862 +25 750 -.5357752337235938 +45 750 .28420406335485876 +54 750 -.2407360261714474 +68 750 -.5266066558996879 +80 750 .20396770407692014 +83 750 .9219447186465544 +94 750 -.7754869842982146 +103 750 .5872872261450188 +130 750 -.07800296567467072 +133 750 .2625807134434435 +144 750 .6307353160670833 +146 750 -.41846905933707607 +172 750 .5994652848098907 +192 750 .9188666569009855 +194 750 -.7947583051776841 +196 750 .7542366435827247 +204 750 -1.865136652120568 +226 750 -.17376830701043194 +227 750 -.43490390118597716 +231 750 -.015409136264713172 +234 750 .32376016639623006 +245 750 -1.6649239009206742 +252 750 2.088809886079518 +259 750 -.11964008098619106 +284 750 -.521191322017682 +301 750 .18519766307410546 +303 750 .08891289762068544 +327 750 -.30134646808312726 +330 750 -1.093647445273084 +332 750 1.241940253060918 +333 750 .6690847080051319 +336 750 -.27028780799921726 +358 750 -1.679757905695819 +359 750 2.2558122243191256 +367 750 .7292415603146145 +370 750 .07105622700732782 +373 750 -2.494364100088202 +375 750 .4286348736746872 +393 750 -.13984769064559494 +398 750 -.2119245125636837 +400 750 -.5890780486758969 +401 750 -.39112649758750656 +407 750 .4292062016235072 +411 750 .11164239104784279 +428 750 .7333537812485276 +443 750 .1426590966119067 +457 750 -.23389213505253761 +462 750 .3943430150732059 +476 750 -.40933534479548195 +486 750 -1.1743003391673206 +494 750 -1.2383600798876326 +536 750 -2.253782149721392 +558 750 -.419356548901471 +577 750 1.4326113540757022 +584 750 .4444421709758981 +588 750 -.1843136402076151 +597 750 .3284240973044975 +607 750 1.1097831837015149 +609 750 -1.0532560307569856 +634 750 -1.2451299393527706 +636 750 -.9935991307719206 +637 750 -1.6868629862215438 +639 750 -1.4078498476653802 +640 750 .775875303623355 +645 750 -.17727057228006118 +649 750 .1539894809147598 +654 750 1.0459850459592859 +661 750 2.449287294470539 +666 750 -.4780917712983774 +667 750 -1.8365059289497812 +677 750 .3676674448126948 +684 750 -.8892659810334632 +686 750 .3980084410921605 +688 750 -1.589127583466672 +700 750 .43796489622343365 +704 750 .20209965366201155 +707 750 -.41155178402989 +708 750 .9751350330272726 +717 750 1.1769961341909783 +720 750 -.698974584192293 +729 750 -.4271463792574442 +735 750 -.4257394362317759 +749 750 1.8898377326291622 +752 750 .34388034572566084 +757 750 -1.0668043331585313 +772 750 .19709606679166106 +777 750 .6882241169005103 +779 750 .3166165573832087 +788 750 .25408889769332854 +791 750 1.188988723706666 +809 750 2.041241008732433 +813 750 -.22049396797651988 +850 750 -1.5508543500163237 +853 750 .9624764688134364 +857 750 2.0242711828221296 +865 750 .9556221257009297 +870 750 -2.4049595776004606 +886 750 .6337162310776507 +894 750 1.0091495925009186 +908 750 -1.3702087077805465 +910 750 1.2740168909416865 +921 750 1.815283106884657 +926 750 -2.314023488537572 +929 750 .41671309663557987 +930 750 .08440205901019564 +961 750 -.23997985361830443 +975 750 1.3394267095109518 +983 750 1.0431739544594525 +989 750 .7052458918899055 +990 750 .14427401913252438 +993 750 1.1575541011558959 +999 750 -.5996690910804962 +22 751 -.8570059384064416 +26 751 -.5667843136709053 +34 751 .5154483084892789 +45 751 .7464149461371016 +84 751 .02433622984839577 +94 751 -1.6191279753928587 +98 751 .30721150437543404 +110 751 -1.9720166129732988 +118 751 -.8120709962876276 +145 751 1.2025161466592809 +153 751 .05107447775477972 +176 751 .28488463101523326 +200 751 .07057803849212149 +202 751 .6096171790317907 +225 751 1.6930778046581418 +233 751 -.20970827963798194 +249 751 .11690636880667833 +268 751 -1.8002745671943174 +289 751 -.3622374957219471 +290 751 .5583799698120548 +299 751 -.8795827206879658 +313 751 -.015384555225094299 +319 751 .3368915463074894 +321 751 -.8324225709428111 +329 751 -.5677594388488649 +356 751 -.9408445358403612 +365 751 .7665843259644839 +373 751 .9536587393122905 +375 751 -.9840874047250892 +385 751 -.051474304573688845 +389 751 -.1016611773008856 +400 751 -.6310911892386086 +407 751 .6711126808344361 +417 751 1.9979298416456057 +442 751 -.8836982808364494 +443 751 -.45051202467970247 +451 751 .6443278014064373 +452 751 .17264124481407483 +455 751 -.8263631082540335 +456 751 .7046014676312702 +484 751 .5465713934305859 +492 751 -2.0718987197498806 +531 751 1.6834177057225512 +538 751 .13531939224921113 +556 751 1.1163236171176285 +576 751 1.454937498815398 +585 751 -.12832075047310643 +586 751 1.1160994948555085 +588 751 1.0438488191069228 +602 751 -.5117322631700905 +617 751 1.1388566238488496 +621 751 .7778040782304683 +622 751 .3977858370733785 +652 751 .0049149222146195465 +659 751 .8580390533904545 +662 751 -1.2588727636024313 +666 751 .581537380621888 +675 751 -.8448775551009046 +676 751 -1.6675976041219784 +680 751 1.445460312973232 +695 751 .10980085328509254 +698 751 -.23041184550813137 +704 751 .21898260999007213 +705 751 -1.2234133875035431 +708 751 .4769779217474895 +745 751 .6859733446748822 +757 751 .8247173895911132 +772 751 .37277260119958344 +781 751 -.18579072401194552 +782 751 .3363640666489131 +803 751 -1.6486041383819199 +828 751 1.1628083585662936 +832 751 -.23616447764984205 +833 751 -.03273571792314736 +838 751 .051720506202401324 +849 751 1.520956226540333 +854 751 .49856884236239984 +860 751 -.05144021787920078 +861 751 2.1655136505279313 +862 751 .9263693136985356 +889 751 -.0030779397950167903 +897 751 .6058179259224191 +900 751 -1.2766291890160582 +901 751 -1.0581515752399746 +911 751 .10578861776976435 +944 751 .04705209060190521 +950 751 -.020182717317902915 +955 751 -.2627856080193904 +960 751 .31554862425934915 +970 751 -.8897569694574258 +992 751 -1.249023898990414 +13 752 -.0839294430021649 +35 752 -.2594607769876592 +54 752 2.3142883663939635 +88 752 .6167567525145344 +100 752 -1.471185108502092 +116 752 1.3916028177078312 +125 752 .6074885017109224 +134 752 .4564412289775177 +137 752 -1.010390338148103 +138 752 2.87202017722891 +146 752 .8251072206834433 +147 752 1.8084981451590318 +156 752 -.7721089434537168 +165 752 1.0469227432062664 +167 752 .8958021445038424 +168 752 1.3945335494253452 +175 752 -.6050782455375429 +191 752 -.33402322781496246 +221 752 -2.3889105808987883 +226 752 -1.3048760069077385 +230 752 -.6369990247123406 +235 752 -.2568582738034307 +272 752 -.846522864964779 +279 752 1.3008146659293152 +330 752 1.6279123550905297 +341 752 1.012047071554103 +352 752 1.6587054774322845 +365 752 .22953046518985046 +383 752 -1.1365240868089337 +384 752 .2834524729547195 +385 752 -1.3365562768346688 +395 752 .22471398036852722 +403 752 1.1602075279726412 +419 752 -.26166393231263513 +444 752 .886283941134363 +455 752 -.0038108204568542414 +459 752 .39769531519617235 +467 752 -.33321683143075753 +485 752 .9470530697669344 +486 752 .7477603643207495 +490 752 1.3864605712898581 +506 752 .6140540525387802 +514 752 1.4457794013944838 +525 752 .008691807912683355 +540 752 -2.057005870106177 +541 752 1.3042060685528936 +567 752 1.5325847322441586 +573 752 .4749860317400107 +587 752 1.6745575208536372 +601 752 .3049719539673594 +627 752 .8823618834454274 +630 752 -1.2074524596808758 +636 752 -.8907884027491464 +638 752 .044121669813974265 +640 752 1.3485980148309948 +673 752 -1.30991266294849 +674 752 .5751718400122688 +689 752 .9305645463709842 +692 752 -.6633261190265577 +718 752 -.2575264993711476 +728 752 4.422250121333761 +739 752 -1.1833099196051704 +741 752 -3.1412665049253174 +745 752 .02056453636991179 +757 752 1.8645793133530995 +758 752 1.4565014886171164 +759 752 -.14484096988843204 +774 752 -.532543722376054 +785 752 -.3710594275771833 +792 752 1.0498766395812897 +803 752 -2.1800030170216265 +809 752 1.3039841427568835 +812 752 .29584612676578387 +846 752 1.4822407996609162 +849 752 -.9936352745393666 +853 752 -1.9103292978624722 +865 752 1.8245003706932663 +870 752 -.21852216515704564 +872 752 .48362344881637437 +874 752 -2.144364282071979 +881 752 -1.2025723242079303 +892 752 -1.1389859569595995 +896 752 -2.1065328829885828 +900 752 .7748754316145768 +906 752 -2.092515209934461 +910 752 -1.6169597916683345 +918 752 .4964705605732808 +932 752 -3.1176135762872303 +959 752 -1.8845098823998327 +971 752 1.2985796933708322 +974 752 -.617816977343958 +994 752 -1.1417234917394357 +997 752 -.7325210521386541 +7 753 -.03998111084040755 +9 753 -.8587288207928562 +14 753 .4748042779781343 +20 753 .43896504736079667 +25 753 1.6572717481279986 +26 753 .8570589677086629 +30 753 .5687521341364121 +63 753 -1.6900103605446986 +70 753 -.9911192049899864 +71 753 1.817926142352891 +74 753 -.04857548524547013 +76 753 -.8557479904920428 +110 753 .5638651342413773 +116 753 1.2435581587150228 +117 753 2.46121261954414 +121 753 .7802566243914122 +130 753 .2779221947760887 +142 753 1.2474550978624623 +148 753 -.02286874042086355 +172 753 .23773862593060668 +176 753 -.3237331771965816 +187 753 -.37562214179567494 +188 753 .12871181072362062 +192 753 .4574424212027298 +208 753 -.33807504538382166 +215 753 1.2264592106548389 +220 753 2.937872837758245 +232 753 .7474809044910155 +235 753 -.01694651882728833 +250 753 .10066758551848816 +263 753 -.25455614538610016 +272 753 .5639449768586907 +275 753 .20602557634460494 +284 753 -.11343128628955297 +287 753 .9546265296334232 +290 753 -.6285024201631352 +301 753 -.39295508583905686 +319 753 .9306072603976826 +320 753 -.38173362088574514 +321 753 -.44708176209354156 +338 753 -1.9593722312427984 +341 753 .18529445952220328 +358 753 -.12628322260596375 +359 753 1.2679165802803118 +381 753 1.8160869032581934 +384 753 1.0056194173553261 +390 753 1.1514782467062594 +436 753 2.5114546764019283 +439 753 -1.671010845545458 +486 753 -.21869155826016498 +487 753 -3.0197058300222723 +500 753 -1.2549759223266677 +504 753 2.24506390557389 +516 753 1.5517270373902468 +520 753 -.43197024533484196 +535 753 -.3786075260062592 +537 753 -.8412039075005894 +547 753 .6559277954760181 +551 753 .737606052779858 +599 753 -.6412667677223866 +608 753 .36703862327954573 +609 753 -2.1025545822702454 +612 753 -.8870544108322167 +629 753 .47630926484018693 +634 753 1.7983275885790568 +636 753 2.0746491824754734 +641 753 -.1841331417161887 +643 753 .035599957557873374 +673 753 -1.9233957684786454 +690 753 1.1928153976596287 +697 753 .8764699795585311 +700 753 -.09204221081009994 +701 753 2.102805677165383 +704 753 -.5853205821562723 +716 753 .19342198706016137 +720 753 .021528431462685346 +722 753 -.7264486792741667 +739 753 -.8330735475080265 +747 753 .036131156708470474 +748 753 -.6006917504478541 +749 753 -.3732477178303689 +764 753 -.42569770790275774 +765 753 .08693882344287607 +781 753 .7575545844797759 +792 753 .4821618148495639 +812 753 1.5938207710120782 +824 753 -1.392715748756908 +834 753 -.09037481144681514 +848 753 2.370853768796452 +850 753 -.5482254880975919 +855 753 -1.3657209702884976 +856 753 -.04684380047339369 +877 753 -2.1174781989590286 +892 753 .05627959361781704 +897 753 -1.9624027312143717 +902 753 1.2477898840934205 +923 753 .907652570768725 +946 753 -.26030339711822387 +955 753 1.5105655031287553 +983 753 -1.6978016488243297 +995 753 1.2105618109794498 +7 754 -1.216586574383756 +33 754 -.5999101524524295 +48 754 -1.4162000815945417 +54 754 .22176791852211072 +65 754 -1.6761409151634015 +79 754 1.284291426688423 +84 754 -.43960724246631966 +89 754 -.520490596330369 +101 754 -.46263439815468343 +102 754 -.9012236250134474 +119 754 1.2149275222403535 +137 754 -.7956706975735558 +145 754 -.7113572225363882 +147 754 -1.0006222636495772 +157 754 .24737281480365358 +159 754 .19863010893658756 +189 754 -.6731316028371733 +193 754 -.2367529158386545 +239 754 1.8354035477079171 +245 754 1.5160133360271768 +251 754 .01966350962156438 +259 754 .4825039128788722 +260 754 -.4078557829489874 +271 754 .580553024015957 +288 754 -.04877052640168047 +292 754 1.3106693834195418 +301 754 .09933508527271093 +305 754 .5760575239263692 +306 754 .5376702093161976 +310 754 .031692522048126746 +311 754 -.809375158660099 +318 754 -.8362298120593157 +323 754 -.6035975560081245 +324 754 .9869359813011606 +332 754 -1.1112674602286692 +348 754 .11206634184126563 +351 754 -.046568827187205564 +356 754 -.2900763089646138 +360 754 -.13407373691907978 +362 754 -.08202778633406364 +363 754 .6419579647857562 +388 754 -.2367462052807065 +394 754 .9665526883769295 +416 754 1.0633934783013006 +420 754 .8025374000444818 +444 754 -.2640536866694619 +454 754 -.3701688179471013 +457 754 .13599270580987285 +463 754 -.38684440635272904 +476 754 .25340273111385725 +482 754 .07711102460412723 +517 754 .13940377119310127 +519 754 .2363386357794798 +525 754 -.9434491519876188 +544 754 -1.3883046886939665 +561 754 .6034215600368498 +562 754 -.6426032147803229 +572 754 .0325135213151127 +581 754 .17712249821958093 +598 754 .3822333158487102 +619 754 -.5147889098460243 +628 754 .12529399515087294 +631 754 -.6883723452003744 +647 754 .03401269921363712 +654 754 -.6246636847763766 +680 754 .17841882844729007 +690 754 .5936834090609108 +695 754 .17007706812048656 +701 754 1.0978291756338296 +705 754 -.3101648311577936 +710 754 .17301675543469636 +715 754 1.0332092496692662 +730 754 -1.5154007358155177 +764 754 1.1999397487358907 +767 754 .11857752736430616 +774 754 -.5963155378477979 +788 754 -.06722688080476502 +801 754 -.23668755622351845 +807 754 -.39352979224215745 +818 754 .9077907436303508 +848 754 -.06454569140262412 +853 754 -1.081350184314767 +861 754 .30595831455871153 +876 754 -1.431409210079562 +877 754 .9694464850011407 +892 754 -.553742080668366 +901 754 -1.4020405442986221 +911 754 -.7518500863951807 +925 754 .4484289173119623 +941 754 -1.3052391073872687 +951 754 .9057783904074159 +980 754 .05737179798963654 +992 754 -.17943717749175908 +6 755 -.7326463210348324 +9 755 .24518415372852448 +11 755 -2.0387081376418283 +21 755 1.105332289025928 +25 755 -.7801243657523345 +29 755 -.18683563102858447 +45 755 .21950973753244285 +47 755 -.10577806330439903 +54 755 1.8500836822183118 +58 755 .9056890186710261 +61 755 .5423081534381123 +68 755 -.6620257317326246 +95 755 .558716090501915 +104 755 -1.2442210363243533 +109 755 -1.8243630741873509 +116 755 -.2574630206199261 +125 755 -.2940256579076606 +127 755 -.755532432473832 +140 755 1.5093687885702929 +153 755 -.6088945294805768 +158 755 .1981730986616598 +163 755 .43557935240163237 +170 755 -1.6384292519888244 +171 755 1.6922630662579625 +175 755 .4759086653957185 +203 755 -.32696753274736373 +221 755 -1.1563983546032968 +223 755 .5912167768306681 +232 755 -.255567992650561 +239 755 -.8003448330594151 +243 755 .7376616122036803 +250 755 .10805322166281212 +263 755 1.2930494082956288 +268 755 1.341732650427178 +279 755 .42491382650950105 +284 755 .39871578268738045 +288 755 -.34278460501964697 +305 755 -.7237198794705083 +328 755 1.4289537777661585 +329 755 -.185401903821643 +341 755 .10325908321070708 +350 755 .04906227143455953 +352 755 -.6093398957914263 +375 755 2.1840627021194456 +386 755 -.9004957238710273 +423 755 -.4145445587862459 +434 755 -1.7635668991929383 +436 755 -.6966871834230808 +450 755 .9742842654521524 +455 755 -.2288780851949192 +466 755 -.200577964455185 +468 755 .32762724439376306 +485 755 .8246386694573822 +491 755 -.24714405535325742 +500 755 -.09161876153870155 +502 755 .8134209410578391 +518 755 -.6794218998256503 +521 755 .6685918850044955 +526 755 .13005057477411947 +535 755 -.21364399106153675 +540 755 -.5446573242520435 +572 755 -.46921207189702974 +574 755 .24646870694594097 +579 755 .2686245379052995 +599 755 .38513107145912073 +621 755 .056866212134731 +637 755 1.1946783330539796 +651 755 .410117657938237 +655 755 .033985213767566164 +663 755 .8605884710728678 +667 755 .2028056187383933 +673 755 .4344436411218313 +692 755 -.8904282016570422 +697 755 .3522573762943356 +721 755 -.8266037617484605 +729 755 -.6575681676511701 +733 755 .9218278211393666 +735 755 -1.0229428152291393 +754 755 -1.0427814468919485 +758 755 2.5712821864437485 +791 755 -.40453610540786344 +802 755 .6779956902517683 +808 755 2.1341683699297276 +812 755 -1.839817661718274 +850 755 -1.0147482790478424 +869 755 1.6043407155142368 +881 755 -1.1878493094906217 +899 755 -.23333569185017802 +911 755 -1.3101121468108838 +928 755 -.8731555306691253 +948 755 .6643941536242502 +980 755 .7372291589690971 +985 755 -1.3937757653397957 +995 755 1.4241096054465687 +34 756 .6856053997755476 +40 756 -.09376312649347127 +58 756 -.06936053326565159 +71 756 -3.045850972910762 +77 756 -.009476593505015868 +78 756 .5273779759222904 +79 756 -2.8412452642035197 +81 756 1.8483073530218141 +104 756 .7373461090764997 +112 756 -.05939341664965277 +114 756 .2463129977556802 +115 756 2.8707410055940366 +143 756 3.466224101137675 +147 756 -3.0285364938397628 +152 756 .853225072061098 +157 756 2.7168340418321884 +163 756 .4331847816969899 +168 756 .6962738762648393 +194 756 .43330832758456667 +200 756 -1.918231781986372 +208 756 -1.0044296838107971 +211 756 .7294388157554033 +216 756 .359395437166802 +234 756 2.491532483011962 +244 756 -1.236658485103516 +257 756 .9731370158782889 +258 756 -1.9707331056612687 +271 756 1.8273393825043618 +284 756 1.1633759776030943 +292 756 .4777964728732664 +293 756 -1.2408984503377165 +297 756 2.907439562979262 +298 756 -1.324467212656292 +311 756 .34138702976695356 +341 756 .028040503687420663 +347 756 .6223206639240437 +352 756 2.107488579254541 +370 756 -.9876517940345104 +388 756 -.561847798133361 +398 756 1.1189254069364496 +413 756 4.101411524229192 +441 756 1.1853598979695326 +463 756 -.4775040894748699 +466 756 -1.0161303991022632 +479 756 1.632906497416155 +489 756 .046686773440063695 +500 756 -.1659497019254661 +511 756 .4003362992369718 +517 756 -1.0242082223276954 +569 756 -.012083277616319776 +583 756 -1.9668926840829613 +617 756 1.040492503397691 +621 756 1.1773940449213558 +638 756 -.4735442857893419 +648 756 -3.0180454086066364 +686 756 -1.4129972103726038 +689 756 -3.2915812378765894 +697 756 1.3869288753157856 +704 756 .20190153177386494 +715 756 -.20312931750907978 +718 756 1.5189854166017804 +733 756 -.454762856849017 +735 756 2.1704882382909236 +759 756 -1.3883908639948421 +761 756 -1.0519837587349978 +775 756 .8387915536741822 +790 756 1.8672342292692388 +796 756 .8586441850414245 +808 756 -1.6020896799923419 +810 756 -4.471975566262286 +816 756 3.6110061505669155 +820 756 .7434830949424802 +822 756 -1.227503399937527 +832 756 1.6499928386376375 +857 756 -.3228961578441835 +858 756 1.7293907370670814 +881 756 1.7638488404991874 +911 756 .19142869622546063 +915 756 -.43830318094070697 +920 756 -1.4216996883913018 +928 756 -.6690297724288199 +937 756 -1.1805206323201176 +943 756 3.2216110563969504 +987 756 -2.53503027372234 +989 756 -3.068675295545179 +990 756 1.5717678746475068 +994 756 1.080317171691687 +998 756 1.9675768816959514 +5 757 -.21803833025353364 +9 757 .2912425475793898 +31 757 -.11546885760234572 +34 757 .022605755817298026 +36 757 -.052465488318340234 +42 757 -.26800546950629306 +77 757 .5052921347638125 +78 757 -.7119159053112399 +80 757 .06555790333248698 +89 757 .059871229641536516 +95 757 -.3611712892297668 +98 757 -.2389775614415707 +133 757 .3698469985614796 +141 757 .6219098465761407 +170 757 -.3500275476971545 +172 757 .28672177902400164 +176 757 .3280404569611538 +178 757 .11306756087981121 +181 757 .8011801275552812 +182 757 -.10156130073057244 +197 757 .13431379049177974 +200 757 .3152853097299694 +215 757 .02405207379230835 +218 757 .1720944390478058 +223 757 .08677860948537772 +235 757 -.3016020073950859 +243 757 -.05168187984310477 +244 757 .20014954023245646 +248 757 -.11492731009682461 +252 757 .5285976484581048 +273 757 .2594812429229083 +279 757 .6338723666152795 +298 757 -.2023651884802046 +299 757 -.012912460616464274 +302 757 -.4915636265091899 +311 757 -.08457121082162969 +333 757 .159675916877351 +335 757 -.07402459949658975 +343 757 .20052861180253093 +345 757 .04789028031871699 +348 757 .3595165290002371 +380 757 -.5345136648631696 +381 757 -.040063130048663555 +408 757 .41143414190560934 +409 757 .44735051900313233 +415 757 -.3750436983628552 +424 757 -.5901347020410016 +427 757 .9846628450458915 +436 757 .0829879250126769 +441 757 .9342963545209815 +445 757 .14648603180337474 +470 757 .3537869346440186 +496 757 .2952427420586863 +509 757 -.1848960567039175 +510 757 -.13180240083717287 +513 757 .6782327942437896 +527 757 -.8469068126908047 +531 757 .10428589357892606 +535 757 .29331201438189936 +543 757 -.46565603372675435 +545 757 .6371714619667838 +547 757 .9594277302664034 +549 757 -.2677530849506391 +554 757 .1921703222783215 +555 757 -.15886314564896997 +562 757 .15382660846862167 +568 757 -1.153605249952943 +569 757 -.33716346358575033 +571 757 -.3681973866128717 +584 757 .2151920190067362 +590 757 .1917257840673049 +595 757 .3048265728567413 +620 757 -.10866020194492282 +624 757 .0453310133358506 +629 757 .227425903983292 +630 757 -.026457792827974076 +637 757 -.6021363653730812 +651 757 .19038586333610127 +667 757 -.08786261051667568 +674 757 -.3599237721147803 +676 757 .43335460672632864 +680 757 -.6263313321018628 +682 757 -.1863741050346962 +685 757 .493004488060682 +690 757 -.963392166335717 +712 757 .3730316239535548 +743 757 .528514695981491 +766 757 .00039533720384897497 +771 757 .5706652089530334 +774 757 .6751332065350273 +814 757 -.12178149983978367 +817 757 .24246096266308753 +818 757 -.0740318011667698 +819 757 .5490644306478336 +821 757 .7542743725376755 +824 757 .5282222176804773 +833 757 -.17065841603417728 +842 757 -.4230027655747506 +860 757 .3430121771201122 +880 757 -.6208396376901464 +883 757 .05785986115576934 +884 757 -.47151108320951285 +898 757 1.062574310329026 +903 757 -.8573718410142458 +904 757 -.012502529725552991 +915 757 -.30515826891382425 +924 757 -.5536712461054608 +938 757 -.19987539287497988 +956 757 -.4049339698467376 +971 757 .42301720870433757 +973 757 -.09856471139871699 +976 757 -.7457083649274687 +981 757 .082756396782626 +984 757 -.16106365451559487 +986 757 -.8172577303066846 +988 757 .14286128700707693 +1000 757 -.6968008436474641 +4 758 -.2909467936876523 +11 758 2.1742251076459604 +16 758 .4426496405247922 +26 758 1.5519514797670548 +27 758 -.16403971762886463 +38 758 -.775703649312262 +43 758 -.9397959060644562 +44 758 -.4998681419321599 +47 758 .8841336838906003 +57 758 .5521049639117156 +69 758 .24572341615342636 +71 758 .8639118244813156 +76 758 .5967003331229546 +83 758 1.579139891009171 +93 758 -1.900061619969174 +99 758 1.453492012317982 +101 758 1.0197321286468692 +105 758 1.4852532612282323 +116 758 -.40525474587981886 +120 758 -1.7137636856699703 +134 758 -.1766358559434162 +136 758 2.114775955072984 +146 758 -.8580346739659213 +152 758 .012539032709325708 +153 758 -.4693519235040845 +154 758 -.8810510132125497 +159 758 -2.5518300869801624 +163 758 .4697806818232276 +178 758 -.6232800932829511 +195 758 .42687547517954966 +198 758 -.33686854369459074 +206 758 1.7292090034743808 +216 758 .985600804318651 +220 758 -.29139719586852475 +225 758 -2.6097508631369304 +229 758 .5589465376185871 +232 758 -.29242794859428006 +235 758 .3557157531353922 +258 758 -.17031483455527247 +285 758 -.28937007132565884 +288 758 2.2315838255494516 +295 758 -.08580606629529332 +339 758 .27298994346333966 +348 758 -.9284039569833175 +378 758 -1.027525728457902 +379 758 -1.5748687380583286 +380 758 1.1055316404901057 +415 758 .053103621561960024 +416 758 -.647779238286978 +424 758 .9897083958631484 +429 758 .40060711007796534 +488 758 -1.7198513494690162 +495 758 1.032953746203616 +506 758 -.8702514508647329 +512 758 -1.1531464664463182 +514 758 -1.7164023151353263 +528 758 .8367254779395321 +529 758 .36834046515874236 +541 758 -.22675896043384797 +542 758 .2568814169386744 +545 758 -.45430681966483666 +547 758 -1.2022079995948352 +571 758 1.9689025886740763 +574 758 .429150869835175 +608 758 .834357512836299 +633 758 1.9461114230545848 +659 758 -1.0624261544460787 +668 758 -.9452800675316042 +681 758 -2.333287169007945 +685 758 -.8233232852488599 +730 758 1.0773192235012516 +735 758 1.0370472074553116 +739 758 .65227076361374 +746 758 -1.0547231572645552 +755 758 2.9049061382793746 +761 758 .10522910769945282 +779 758 .870318690409217 +785 758 -.1856066059027574 +802 758 2.5082545123562556 +807 758 -.3315690228733878 +823 758 -.8961803402815443 +825 758 1.9886842208378825 +827 758 .1683874888360519 +832 758 .4796997485243476 +845 758 -1.6324390524646062 +847 758 .3908333890339692 +851 758 -.19035484303941563 +862 758 -.5912711012768406 +863 758 -.7300325357773086 +868 758 .07465740689084832 +873 758 -.6251339557597848 +876 758 .8713865728804294 +883 758 -.6232954399780392 +893 758 -.6245540002981678 +896 758 1.8558011102626006 +897 758 1.3804051402075201 +899 758 2.7760663354218047 +903 758 .8893000660805662 +910 758 .09267328206156239 +911 758 -.346746664998535 +913 758 .9874973014825957 +919 758 .07442466248417205 +929 758 -1.1394348208305913 +939 758 -1.02392054771703 +947 758 1.738689968732024 +949 758 .8343168957151703 +953 758 .232014283962197 +964 758 -.7778846053430675 +971 758 -1.831946857898092 +976 758 .8545019390752622 +999 758 -.8458990292408446 +24 759 -1.5721515753679232 +27 759 .41394628867525773 +45 759 -.026291682462361576 +64 759 -.3205489009797215 +73 759 .797031196087997 +93 759 .5044199262838018 +98 759 -.9161630907852208 +112 759 .8546774147579517 +133 759 -1.2614601306017486 +142 759 -.5325813240473292 +148 759 -2.417377321986177 +151 759 .5038027550858444 +169 759 .6620422554403893 +207 759 -.04238647787542896 +235 759 -1.0502574064021941 +245 759 .4557104064791459 +247 759 -.07439998269798087 +248 759 -.7337446110246664 +251 759 1.2402622539825836 +255 759 .39625013301267037 +258 759 .9518827823667564 +259 759 -1.1587460411612098 +264 759 1.9987608803913273 +282 759 1.978309824586931 +287 759 1.9722521939766713 +292 759 -2.5038585596179037 +303 759 1.366618476723191 +306 759 .4411333974875551 +315 759 .007466191315435362 +326 759 -1.0386133753931837 +373 759 .10628828819921342 +396 759 .30958842465738584 +398 759 .5878413303109546 +401 759 1.2375935018270299 +403 759 .7686255275251107 +419 759 -.5355572591326659 +428 759 1.3797853167046423 +431 759 .3760048157636031 +435 759 -.08715235806324181 +442 759 .1142622455217661 +444 759 -1.4600227673717 +446 759 -1.5005266836714166 +448 759 1.150831726687818 +451 759 .8129145040138976 +452 759 1.5508113747908387 +456 759 .23603613566637177 +464 759 -2.8136239065475803 +465 759 -.6285493054942193 +466 759 .861213737294264 +495 759 .7417389725735974 +505 759 .8656599972075887 +517 759 -.3769578001682392 +521 759 1.0537284429429141 +523 759 -.507896912494621 +528 759 .6875957236394225 +529 759 .4872409316173391 +536 759 .39755825390295507 +554 759 2.1222485472914228 +556 759 .9872625740943874 +561 759 .8570486350094689 +562 759 .3879041360882749 +581 759 -.18554360333322828 +583 759 .61449504172601 +585 759 -.39393658689913547 +605 759 1.4055222877413103 +615 759 -.3989723537980887 +626 759 .9274656065360538 +628 759 -.3403513195725227 +663 759 .8304143260290582 +687 759 -.29040853908258574 +691 759 1.1388517802478373 +693 759 -1.596056845639141 +705 759 -2.4279430082671345 +710 759 -.8899328002845308 +718 759 -.5321867183326016 +726 759 1.0109116550597992 +736 759 2.1635237457860885 +749 759 1.4444741268604573 +753 759 .9292761639580358 +772 759 -.016233534682015813 +778 759 .7995090377239243 +782 759 .157986260013313 +797 759 -.39749268280558947 +815 759 1.5209323881085937 +820 759 -.9223149743469262 +821 759 -.5964619938355193 +836 759 .6691777040239326 +840 759 -1.8121086845553611 +848 759 1.9158746510132534 +888 759 -.30562486272076866 +899 759 2.183017992474636 +907 759 -.4420651582430094 +919 759 -.2673719485769596 +920 759 -3.0631018702929143 +921 759 -.7070029210623615 +922 759 .9562082239450986 +927 759 -.33168624751209913 +934 759 -2.9180798193113144 +948 759 .4759159664759537 +952 759 .7976514100281195 +957 759 .4364119147160719 +958 759 -1.2858727381875783 +970 759 .9804280656486196 +983 759 -.8637425038154729 +989 759 2.3711447443602025 +992 759 -.8709349228670307 +994 759 1.6134332140683676 +995 759 -.8101926296742724 +1 760 -.39394609629113564 +6 760 -.03717590347718709 +30 760 1.2872656870208086 +40 760 -.23727131864554588 +45 760 -.7173630682150219 +47 760 -.055156743436526726 +72 760 .28651132092380927 +76 760 .047758161126696445 +78 760 -.3408709965437958 +92 760 -.3212910795219756 +103 760 1.0470678528535804 +127 760 1.2689968346749492 +132 760 .5427545471692443 +136 760 .046454067408433594 +149 760 -.38603161890637694 +160 760 .5029361566265448 +162 760 -.6398115218874799 +169 760 -.08036643595683732 +174 760 1.1172438222437502 +184 760 .7481556216813607 +192 760 .6572919127364363 +193 760 .4985824407793916 +227 760 -.7314276987486114 +237 760 -.2671939552624639 +243 760 -.14986908953381367 +247 760 .2073350367213333 +265 760 1.2239617466526227 +283 760 .6957692078145786 +297 760 .6621278076138163 +315 760 1.1367145520423043 +324 760 1.2721869469453004 +333 760 -.5435513548494901 +342 760 -.2978186998477482 +356 760 -.5256301148685524 +363 760 .14557203880198655 +365 760 1.1140659830138697 +376 760 .8971934965132997 +377 760 -.4267925036120201 +396 760 .377093406734505 +410 760 -1.0204139102965677 +419 760 .7131747021519124 +427 760 -.12557347259366558 +429 760 1.0581284089386063 +431 760 .12435480069774833 +433 760 -.35512673872219325 +441 760 -1.2208148144760427 +466 760 -.5290269757683543 +467 760 -.2566526410173172 +471 760 1.19706261568396 +474 760 .4065922913376726 +503 760 -.38759951978439866 +536 760 -1.6508613289013683 +542 760 -.12776813950399774 +544 760 1.8565236597754857 +555 760 .6027376979118431 +562 760 -.475220356537118 +572 760 1.1920419006604082 +577 760 -1.4291975446048522 +584 760 -.12728048293522864 +585 760 -.8915395431149122 +588 760 .10774352561309786 +608 760 .9173275614472838 +618 760 .505318950232938 +639 760 -.9381754940039411 +648 760 .6986695526275046 +662 760 -1.418560431118301 +663 760 -1.182719943480488 +676 760 -.14249794179998226 +691 760 .775503452962086 +720 760 .11525653603029866 +721 760 .4494005172431474 +727 760 -.4005481248149403 +731 760 -.5853405494870106 +760 760 -.2659732583034084 +765 760 -1.8213960697461362 +767 760 -.5967675960585774 +787 760 1.203249797939472 +798 760 .6068409832871337 +804 760 -.8334594364418704 +808 760 -1.4426265386718775 +828 760 -1.142505586494354 +831 760 .5425092220133423 +838 760 -.10628543010287181 +845 760 .7344825697185793 +859 760 .05637821059904341 +873 760 .11752375848314087 +882 760 -.7950113430454494 +884 760 .453553604398874 +894 760 .37286149794663104 +897 760 -.51967133020218 +898 760 1.0877177871557628 +914 760 .7788868231454859 +919 760 -1.483710213663017 +923 760 .6868942906498016 +932 760 -.021806682127887292 +954 760 1.1974211820357314 +970 760 -1.6531159652729852 +974 760 -.3994437255954899 +977 760 1.4726383461013408 +985 760 1.66750539834084 +986 760 -.3891220163530954 +991 760 1.022895042170772 +996 760 -.7327576990420435 +30 761 -1.9130598341792733 +34 761 -.053882685673882824 +55 761 -.1877862800067354 +59 761 .2665137945049867 +66 761 .023047190978749618 +83 761 -.6644160770977561 +88 761 -2.4274942559536754 +94 761 -1.29085706535896 +96 761 .6999990974141597 +104 761 1.242234754319094 +111 761 .42700732320380047 +113 761 -.7456328215657844 +135 761 -.5948739132445516 +143 761 -.893358873945358 +146 761 -.7186736292305296 +156 761 -.6259361000590329 +162 761 1.9083099416359701 +184 761 -.6537275546925373 +188 761 -1.3957962640109087 +191 761 .18045493182789807 +199 761 -.3569853582370924 +203 761 1.3959488246004546 +211 761 .6295778398905886 +213 761 .6655036741433097 +216 761 .16385553896554803 +219 761 -.8230794197546546 +220 761 -.7014985628021806 +226 761 1.4871506565858874 +240 761 .8203612728302299 +241 761 -.25566139168322033 +248 761 1.2257458669455574 +252 761 -.3561054089011688 +257 761 -.404373547723627 +275 761 -1.3062252909679009 +278 761 -.039459596567933644 +308 761 -.8850056796255656 +322 761 -.2909462028807742 +337 761 -.5727777971008251 +339 761 -1.13338378770213 +346 761 .3146106868074793 +348 761 .4907682288003967 +355 761 .4903438637061196 +361 761 .5934523771572711 +367 761 .19528027751371455 +371 761 -1.9704707899390113 +377 761 -.14130580041870197 +379 761 -.931929584943771 +382 761 1.1495257391764855 +409 761 3.753675219269652 +410 761 .5178267497648913 +411 761 -2.1941219431737857 +416 761 -.3485732471935663 +422 761 .375049841447031 +446 761 -1.0783926405938662 +460 761 1.6839582109046196 +486 761 .2667731926320538 +493 761 .2722072701992226 +496 761 .2966439560947206 +498 761 .406166351291365 +518 761 -1.1340660040938713 +524 761 .17104637966031372 +526 761 -.5074375506072691 +532 761 -.49952931957930874 +552 761 -.3815615730648269 +556 761 .5068203850070316 +557 761 -.8326192184765147 +559 761 1.8049836136143433 +563 761 -.6991050892506621 +573 761 .2584268695606375 +583 761 .45659938272111666 +593 761 -.7539731758992798 +612 761 -.028756308707654055 +615 761 -.5809378996542011 +633 761 .41201926835410896 +635 761 -1.2817248680950206 +644 761 -1.7828264589258906 +652 761 -.3389138564801988 +662 761 .3361517035851791 +663 761 .6083350904236977 +683 761 .5755319111217039 +690 761 -1.860669013315706 +692 761 .965246114190378 +699 761 .12253583327664894 +704 761 1.9236220781604754 +710 761 -.37446831364098854 +713 761 -.40550356658826886 +719 761 .2894947829415533 +723 761 -1.4601676027221024 +729 761 -.16329315113713516 +740 761 -.3854073359644143 +747 761 .4089347374889954 +753 761 1.1312693520741433 +765 761 1.2821676541288127 +772 761 1.5419848180173534 +776 761 1.2670137194448 +781 761 .6035474572727133 +792 761 -.6212354613871371 +796 761 2.2874388312591143 +804 761 .19338169270109765 +809 761 -.2560431539069301 +813 761 -.8440596507491532 +818 761 1.4274778388729104 +819 761 .2946862529062037 +831 761 -.9391318172813067 +834 761 -.36182151070215696 +838 761 -.5985404446798614 +862 761 -.40525546372667925 +867 761 .017779267636733778 +877 761 -.263804496071899 +879 761 .33132224314361236 +880 761 .02676415493781098 +897 761 -.3078222102523519 +904 761 .490777104071609 +914 761 -.16728633711103444 +928 761 .3842933381310624 +931 761 -.9740892901514357 +932 761 2.362581316142586 +936 761 -2.050116910909318 +937 761 .6738891563988365 +940 761 .11890137899101805 +943 761 .7638768884589812 +947 761 -.27575451928519146 +953 761 .7382880607615355 +955 761 .34836717588655014 +962 761 -1.7138642018651724 +984 761 .45388278969496476 +1000 761 .1872815659337628 +7 762 1.1806891600997833 +9 762 -.6199550226486401 +13 762 .16536902919838858 +21 762 -1.0204109363839313 +25 762 .5577379075158658 +35 762 -.8116523307900462 +41 762 1.5171793396628894 +46 762 -1.5925106548280075 +49 762 1.2165028664301003 +51 762 -.30388001522451563 +80 762 -1.3143349872644707 +83 762 1.8295893805511483 +87 762 .45406422260701546 +88 762 .526032541419568 +106 762 .14923758357184766 +120 762 -1.813641110225469 +122 762 -.39790201587367985 +135 762 .5423789903248033 +157 762 .006034992238839807 +178 762 -.7890598232210847 +184 762 -.11920419676859391 +192 762 .5798214021371657 +193 762 -.5976221087516342 +195 762 .922651847399092 +201 762 .5484951925404521 +214 762 1.5051339418024166 +216 762 -.8531914058284862 +221 762 1.4243598721865787 +255 762 .05180650383598599 +268 762 .7705134300565155 +286 762 -1.5622674738024547 +288 762 .7401225940688362 +291 762 .401787692708939 +300 762 -.4652548373338445 +305 762 -.12557051092660887 +312 762 .1277017988358081 +319 762 1.8982779101219576 +324 762 -.17634182154776107 +333 762 -.6427157195785402 +340 762 .8979551456090218 +350 762 .6287586575269934 +351 762 -.07944154351318904 +368 762 -1.0158479761121952 +384 762 .7141665525637068 +394 762 .5777994674324148 +426 762 -1.609163498835468 +432 762 -.3337185072690968 +448 762 .9437654666639584 +481 762 -.04638990901640247 +497 762 -.18544497247342784 +502 762 -.60994095116739 +509 762 -.9938434116315401 +511 762 -.8320425317871176 +516 762 1.1947044362227823 +519 762 .16088478581443277 +520 762 .20248200372753114 +522 762 .29646932573132745 +537 762 -.029450932260432536 +540 762 .7429664014217136 +544 762 -.26201867275045015 +556 762 .7545441657160629 +562 762 .5131940214367878 +572 762 -.49046160881954126 +575 762 .08814483337280178 +585 762 -.5336380722838937 +588 762 1.5383177852524506 +590 762 .8502389312160361 +595 762 -.6813070802958221 +601 762 .5711541183640642 +617 762 .1312577638646795 +668 762 -.06531952553118134 +677 762 -.6633225217121079 +682 762 -1.4775488913463484 +688 762 -1.261021900129915 +693 762 .09841339666901151 +694 762 .14068987194903881 +699 762 1.1226393642926609 +700 762 -1.196821224223863 +708 762 -.5756123433786539 +709 762 1.5303952404830812 +737 762 .40427856776169746 +750 762 .7489020892804459 +755 762 .11211413033219572 +756 762 -2.0400832026514366 +757 762 -.3465499809387834 +768 762 .49832206765066944 +775 762 -.32856074491534454 +776 762 .8437760608372689 +793 762 .4242523563795153 +801 762 -1.294050007675929 +803 762 -.31755341930401365 +824 762 .3323004353122107 +849 762 .20482733131371825 +860 762 -.16696940524268 +869 762 -1.3417009079226394 +884 762 -.4723813891198543 +889 762 .15388809398287423 +890 762 -1.3826205353341645 +894 762 -1.5550757223002332 +910 762 .1352694481299324 +951 762 .33130476300434003 +957 762 1.1636485961420997 +961 762 -.4417983440619085 +970 762 -.3732529439104296 +976 762 2.11787036504424 +978 762 .5181745164401259 +983 762 -.9636955703486934 +987 762 1.0298913073311124 +990 762 -1.0961958230551234 +995 762 .7122047946556855 +998 762 -1.032064485428728 +8 763 -1.1502960062939427 +22 763 .8533120619596455 +26 763 -1.6828033573518524 +34 763 -.6499848999683444 +37 763 -1.3143225507654042 +47 763 -.980607827905293 +55 763 .369472230040752 +76 763 -.6537915621169913 +85 763 .7925951575303362 +93 763 1.204749109948018 +94 763 -.5543962559594018 +98 763 -.08826654550472579 +116 763 1.843590172386616 +119 763 -.30809761985986744 +125 763 1.0069270023329133 +136 763 .5888837248616384 +137 763 -1.994741458004754 +144 763 -.8717929647269769 +148 763 -.7528073031609451 +149 763 -1.9449081415547969 +153 763 -.033341036450266995 +169 763 .11141514404520415 +176 763 -.006604546805227887 +179 763 -.5085779979025662 +180 763 -1.335202252591719 +191 763 1.0095120073277994 +199 763 .20192716632099744 +245 763 -1.5475885089119832 +252 763 1.8585445545104264 +265 763 -.10909592992979927 +272 763 1.1582300989533323 +274 763 .9350992947939382 +283 763 .26266642435662685 +290 763 .425016775538409 +300 763 .017686914499431106 +310 763 -.3400647717048079 +312 763 -.7504307857445776 +315 763 1.2920397848843308 +334 763 -.47912178925154447 +335 763 -.2008852620769069 +349 763 2.8232861995984213 +356 763 .008027585900994623 +359 763 1.6249191148282922 +360 763 1.2846819010597597 +389 763 -.06865739390325629 +392 763 -.3365291590333756 +398 763 -.6843884000854461 +400 763 -.12333100052336876 +406 763 -.9518529462148548 +417 763 .1878893084943128 +422 763 .9439858851258651 +425 763 -.785438500882818 +428 763 1.1849655806154162 +446 763 1.1766578051082215 +455 763 -2.8816483117890845 +469 763 .8399918231737663 +516 763 .21065300366367334 +522 763 .26199036645389356 +527 763 -2.547972381351218 +529 763 -.2880107637848752 +530 763 -.7069602570114971 +541 763 -.5072027498207428 +559 763 .28641357787636385 +562 763 .6555481009700422 +563 763 .7812137625473344 +571 763 -.23580699718886072 +578 763 .00276768972355115 +584 763 .5681117932141593 +585 763 .7185916894269958 +593 763 -1.2146440351801477 +594 763 .12847037906236683 +615 763 -.3407425847649663 +616 763 .34941931626789485 +619 763 -.011020101443200297 +641 763 -.5192393400793284 +664 763 -1.561418562041913 +673 763 -2.4517281618861264 +688 763 -1.0981800719445485 +706 763 -.15559349421517854 +722 763 -1.07557623396584 +729 763 .2644107695194119 +730 763 -.25777018498276605 +739 763 .11970693991878881 +754 763 .9541004010729108 +768 763 .5107061110365236 +772 763 -.9200692203605009 +798 763 .7142549379252335 +801 763 -.6365498468113822 +812 763 .6471903233805034 +821 763 .22939333706607487 +838 763 -.7455258352372671 +851 763 .9769919467982302 +857 763 .8174784121970937 +884 763 -1.074063070997477 +926 763 -.09181624321181928 +945 763 1.0060883654919552 +951 763 -.27346668298024307 +955 763 .8798333543176464 +959 763 -1.0475155892953913 +963 763 -1.0602532219493126 +966 763 1.2622770408625317 +971 763 1.7570892528656614 +977 763 .31551894528202573 +983 763 -1.0382779691542727 +1000 763 .5141296523387183 +6 764 .835697534683161 +18 764 .722547223749441 +27 764 1.0887571568101682 +29 764 -.8259883598899009 +61 764 -.7904067583253905 +72 764 -.23437445070971985 +78 764 1.3397893435848287 +84 764 .5532457597047925 +88 764 .8282007227830326 +93 764 -.14256287963277647 +103 764 2.05251946744776 +111 764 -.18306137752762047 +116 764 .26789821629827154 +117 764 -.16047560092541638 +124 764 -.20917718081988163 +129 764 -2.4621747006085504 +134 764 .10813267864019213 +136 764 -.6915965077668325 +181 764 -1.2080409668878687 +196 764 -.021823584745631754 +205 764 .30659019006358684 +209 764 -.08956149165382438 +213 764 .14600183574700246 +239 764 -.0552020053491188 +252 764 -.3719387052941766 +260 764 -.3547735518935419 +262 764 1.1145193134814564 +268 764 .12036331172437498 +270 764 2.5477248079259343 +275 764 1.4507612323554415 +277 764 -.00876830815485916 +296 764 -.1606375554521112 +301 764 1.7849338755821489 +305 764 .7545171852316603 +309 764 -1.0957701504604105 +311 764 .8387818360382808 +333 764 -1.277093681831243 +367 764 -1.0348183941534437 +370 764 .7647069943541486 +374 764 .5050760589082307 +375 764 -1.0231572157119677 +377 764 -.6351197163039173 +384 764 .8868234953508731 +385 764 .8826195691478811 +409 764 -.5893601890848867 +444 764 -.6614256816594104 +445 764 -.49690536482592684 +460 764 -.005344412916001469 +474 764 .5639631413950013 +519 764 .2438744717606486 +523 764 -1.4554316300292456 +526 764 -.4082574112113693 +537 764 -.18540065813248638 +570 764 -.5120921250678501 +586 764 .6456672696750596 +589 764 .8092828739386856 +595 764 -2.0051777724476447 +600 764 .4260327616632021 +604 764 1.1348360958739705 +629 764 .38439304070352875 +634 764 -1.039989409591884 +642 764 -.6189880654215466 +649 764 -.739825808875379 +653 764 -.5147551809724908 +660 764 -.31714963683123104 +661 764 .08074729303905695 +668 764 -.5587862290317054 +669 764 -.21219247171813926 +672 764 -.07194887928199137 +684 764 .2501944829923097 +688 764 .3366986987958028 +689 764 -.5792440941050034 +695 764 .6853859635912878 +701 764 .7488902474332227 +703 764 -.8961155685834249 +709 764 .2454282605685464 +725 764 -.194315578707818 +734 764 .8877115643741366 +745 764 2.339254267778584 +747 764 .28217435308799926 +772 764 -.2746695046364946 +776 764 -.2377389748825769 +786 764 -.3821769618740777 +799 764 .5135547726833893 +830 764 1.1771456154184083 +836 764 1.2245238329856174 +846 764 .16857990882270582 +852 764 -.5526726971624263 +868 764 -.330980026699046 +887 764 -1.2473687528850748 +891 764 -.8305943202286837 +896 764 .6964821382684652 +909 764 -.7466737291605027 +916 764 -.6030213246127157 +918 764 .07025279680807502 +928 764 .38015810727034327 +958 764 .07478331560369293 +959 764 1.3285699267392492 +960 764 1.322481863990746 +963 764 -1.9710636279709952 +977 764 -.14442115038362932 +983 764 -.5865259681202963 +992 764 -1.6740255560859947 +21 765 -1.0173062682579816 +22 765 -.07311513806189043 +23 765 1.535334067661533 +39 765 1.7288945442575598 +51 765 1.1492270340147266 +62 765 -1.475923000891042 +77 765 2.452084686939296 +80 765 2.713140502089116 +82 765 .6776884602304943 +129 765 -2.199149721181568 +142 765 -.3030815373245763 +151 765 -1.4439444200387677 +156 765 .3219172037103536 +165 765 -.3644537816893877 +178 765 .29214427735722276 +217 765 -1.3365342692829478 +233 765 -1.3562660449203687 +238 765 -.8313493801547961 +255 765 -.3810804583153983 +256 765 -2.0622169311268257 +263 765 .7846346792741912 +264 765 -.31619814146866027 +270 765 1.1049516090230513 +276 765 2.272156323696207 +281 765 2.4445602683971983 +300 765 -1.0615882079830017 +305 765 .12813920224937211 +311 765 2.3766428626174494 +324 765 -1.0471471039488154 +335 765 -.4341687186659584 +361 765 .6055271577809875 +376 765 -.6877540160343248 +378 765 .3400010209091312 +391 765 1.4174238317268897 +394 765 .06677570125642082 +400 765 -1.1505363847624088 +422 765 1.336219576782619 +427 765 -2.0323087525944126 +430 765 -.42757283185301304 +437 765 .99963340124055 +444 765 .07780393093741217 +447 765 -1.44604531329262 +450 765 .7924938356009318 +456 765 .03312603981093479 +466 765 .5221084012184148 +469 765 .5847060700997059 +489 765 -2.6020588023326714 +491 765 -.5540244066126302 +492 765 -.60934450069539 +494 765 .3374759126956811 +495 765 .7823346272331065 +503 765 -1.8868904170457994 +504 765 -.702476213955571 +514 765 -.10444106622970593 +535 765 1.6186345765543617 +537 765 2.1379488024769726 +547 765 .4001167643917344 +554 765 -1.6983370794238082 +563 765 .705811987368493 +574 765 -1.343675644132304 +579 765 -1.4301712082322966 +580 765 .9422416442023991 +587 765 -3.299306281881659 +611 765 .7807461559430855 +613 765 -.6428975256012939 +615 765 -1.6463901327974408 +633 765 -.0614075567869371 +636 765 -1.469156177293978 +642 765 -.21406849837565048 +647 765 -.856040105807028 +653 765 -1.3901946549129736 +654 765 -.433963112125356 +655 765 .9591566485289457 +660 765 .6494557071665427 +674 765 -.9626804967530521 +676 765 1.205536401093058 +680 765 1.3799940590683875 +684 765 -1.032605930931049 +702 765 .2408091418446837 +724 765 1.4651177285380281 +738 765 -1.5304438657405048 +746 765 .5136357163144741 +748 765 .9380179622522121 +756 765 .4053274457119709 +784 765 -1.115203989831331 +812 765 .14067448561630663 +821 765 1.0864262640481424 +823 765 -.12214806400310384 +870 765 -.8255147627009033 +889 765 -1.843708248617197 +891 765 -.10249779876190634 +903 765 1.5380561398653516 +924 765 1.95775735822997 +940 765 1.4839117097002021 +943 765 .09225861602177782 +947 765 .025323130446371522 +956 765 -1.0644477743168337 +964 765 -.22873138155932315 +965 765 -.4574122943837683 +970 765 -1.2469765388576861 +985 765 -2.0167112381576624 +986 765 -.2215057683409451 +990 765 2.4842638604160676 +991 765 1.4165653252505013 +1000 765 -1.8067629320723027 +4 766 .3801575668336049 +15 766 1.612131695890119 +20 766 -1.1991584067668288 +21 766 -1.411052919449998 +27 766 2.805884321937348 +28 766 .1809546656760873 +30 766 .6500757817351391 +34 766 -.18514847489347439 +66 766 -1.3886255061696482 +68 766 -.34464919353204293 +71 766 .7782590067588504 +77 766 1.3872116847310874 +80 766 -.11114544707704618 +88 766 1.6490124395504582 +92 766 1.2164068329077122 +120 766 1.4226809082752583 +129 766 -.06630225183094834 +133 766 -1.4249379883334956 +134 766 -.8033162204483635 +180 766 .23079970885167947 +182 766 -.23097947067973337 +187 766 1.2428146834868046 +191 766 .42437295008229914 +192 766 -.21820515089407397 +199 766 .3664764980765662 +200 766 1.354365890382539 +206 766 .3678446883099931 +208 766 .32474126443387547 +214 766 .4407039503975435 +221 766 1.639542943699028 +242 766 -.761510312391857 +262 766 .7392433921977468 +276 766 1.3272270207030654 +293 766 .0816150393423356 +329 766 -.14380973805987912 +330 766 .07805106206896345 +344 766 1.300257662875323 +347 766 .6820908288722833 +360 766 2.4251971867789712 +369 766 -.03952748557482488 +373 766 -1.4520008304655718 +375 766 -.2638958197583131 +378 766 1.0135872822981473 +384 766 1.4334851002973523 +385 766 1.0298176686735776 +393 766 -1.4692604395637556 +401 766 -1.0502493360393979 +413 766 .33202711782439664 +422 766 .6891278077026206 +423 766 -.5076511510451811 +426 766 -1.1070274790732586 +440 766 1.2312992938107472 +443 766 1.8686072831826217 +445 766 -.3209171832853596 +447 766 .14866509334578787 +449 766 -1.1689160177327225 +451 766 -.9074945899338809 +463 766 -1.3765269082845806 +470 766 .5169484508752075 +476 766 -.3110855748625468 +479 766 -.9394435426065064 +481 766 .38202594465522166 +500 766 1.006438949470149 +506 766 .8867502283922598 +508 766 -.27320088914628243 +509 766 -.8992676709036567 +529 766 .6457528608409383 +546 766 -.7657252286679066 +553 766 .958930762657473 +557 766 1.1129493387515415 +563 766 .9483390497485624 +569 766 -.3295654696735141 +571 766 -.7347419080646775 +582 766 -.32109023840911466 +603 766 .9598088126413226 +612 766 -1.529099693300474 +616 766 -.5493053704324085 +631 766 -.35690837960243527 +638 766 1.291530732343195 +645 766 -1.4307203742674965 +658 766 1.6505053634430444 +662 766 .4187260147433891 +672 766 .7252901850673662 +699 766 1.0025254612273793 +706 766 .2803006579384192 +714 766 .31732662607408113 +718 766 1.1882879487181315 +746 766 .5166706750883409 +787 766 -.43212985412391125 +808 766 .8277554295810804 +811 766 -.276951722195843 +825 766 1.1597319041537035 +835 766 .0529577222455071 +850 766 -1.0839886105081273 +856 766 -1.210105051059732 +868 766 .40188997088626033 +890 766 -.8379734281445467 +896 766 .8483163715940134 +907 766 -1.7326044922040076 +921 766 1.9707433818495972 +924 766 -.6170035015449276 +929 766 -2.010829473229217 +933 766 -.5881142708974987 +941 766 2.310934754791748 +981 766 .2858665945303369 +987 766 .4346624947664264 +991 766 1.6643292991931269 +994 766 .4055035781196986 +995 766 .8905770716440858 +999 766 .5980640664333541 +1 767 -.2959684926521837 +5 767 1.2855213755104478 +15 767 -1.9768994308898358 +20 767 .16786045837714536 +26 767 .9435343169569796 +33 767 -.29160327410683634 +38 767 .3895884595495704 +39 767 -.03437194742708996 +52 767 -2.20245158534014 +55 767 .4286515096185925 +57 767 1.7901999035883227 +65 767 1.4323796810705247 +98 767 .08845307889827658 +106 767 -2.0266785098316764 +109 767 .27106970274059644 +110 767 .7022234356345608 +113 767 .4396478000555468 +116 767 -2.305538535887505 +133 767 .595856699053329 +145 767 .026735658340145418 +155 767 -.18989052867626863 +164 767 -.4174081436864251 +165 767 .3446266990772411 +174 767 -.7079649383744152 +183 767 -.1181340391290995 +193 767 .09479448717831344 +195 767 -1.2157753157636075 +199 767 .8115685724845496 +202 767 -1.3075190141260002 +230 767 1.4576200208518835 +240 767 .09802892650071832 +242 767 1.7886262173155296 +247 767 .8256532065042345 +268 767 -.0037566321080117204 +280 767 -.7552434780129302 +287 767 -.0580773197750441 +296 767 1.263372472436769 +315 767 -1.20476419811909 +326 767 -.06647328238621647 +339 767 2.6709883017024287 +342 767 .5510144245787957 +343 767 .5103256009092705 +350 767 -1.1703098066536026 +358 767 3.0782939418694277 +371 767 .07755358409537184 +391 767 -1.83108356410889 +398 767 -.11605245704583969 +407 767 .8615059455011367 +408 767 -.7312902807107416 +413 767 1.2899180790002427 +443 767 -1.4626750851441344 +445 767 -1.3942901735656903 +448 767 -.18989665938608682 +452 767 -.7073724458952513 +475 767 -.31037164286521157 +482 767 -.6631829873314528 +489 767 -.42314405416788126 +503 767 .3696254236823842 +514 767 .01612458920191495 +519 767 1.1681805657518725 +545 767 -.560054084942837 +558 767 1.2437105499769567 +560 767 -1.1209339595272174 +565 767 -.15241848598367722 +571 767 1.0129867014665126 +576 767 -.7536673233088549 +596 767 .304851801268876 +603 767 1.1350884898436515 +614 767 -.13311338163762482 +616 767 1.1217523099975242 +625 767 -1.3940070532330726 +626 767 -.5537366294287461 +632 767 1.463465184630366 +640 767 -.9656166822112171 +645 767 -.47489474782135166 +664 767 .14696439184619164 +670 767 -1.6527887268242962 +675 767 .8351697626396297 +679 767 -.9416154733827995 +693 767 .7683617284466354 +694 767 -.4441278751888507 +699 767 -1.4920856586637834 +714 767 -1.0270125580001488 +716 767 -2.1330069104574276 +723 767 -.44382701264762336 +730 767 -.273020052587548 +756 767 3.643397338896898 +777 767 -1.2337252967230297 +778 767 -.08335433348529445 +781 767 -2.3402728679547953 +786 767 -.6779150700439547 +801 767 .540207698704396 +806 767 .145106929276772 +816 767 1.1585442841143663 +825 767 2.323744876443194 +845 767 .2700251497622288 +859 767 -1.055642781173741 +863 767 -1.0464850256431228 +879 767 1.9978761295165826 +880 767 .7366293834519401 +881 767 1.3004345288735228 +892 767 .022233671122518367 +894 767 .5009078725868865 +905 767 -.24309095208152612 +928 767 -.7974438643166811 +929 767 2.3977832219844366 +966 767 -1.1094164340300443 +971 767 -1.5076014012420704 +973 767 .5353238664507756 +3 768 .4180838675600285 +43 768 .644441616894191 +52 768 -.11136225000913906 +53 768 -.6848959897810675 +57 768 .07404271418658363 +66 768 -.3876201720470955 +95 768 .6545770393148433 +102 768 .6943329287913542 +114 768 -.9477447903438231 +129 768 -3.1681857082196236 +135 768 .5630566001478509 +144 768 1.9963483769229426 +177 768 .6788420728436952 +189 768 .8580405177835517 +192 768 1.7049250904228834 +194 768 1.713256465266418 +196 768 -.16575446036138144 +209 768 .2747073513642766 +229 768 -.04961538065990401 +239 768 -.01787136040404108 +243 768 -.6561666322625821 +250 768 1.7714814819747573 +264 768 -.39413441356874135 +266 768 .6574708395700486 +274 768 -1.2947091869422365 +287 768 -.7332372802164504 +288 768 .07459174821319697 +306 768 -.108871288841287 +323 768 1.4835444732978216 +325 768 1.6968472716308451 +336 768 .8409522077634819 +353 768 .3658547906636988 +359 768 -.8286845766444847 +363 768 1.1626207556695733 +375 768 -.23965491295377417 +400 768 -.42483149159456673 +410 768 1.2450691698837453 +421 768 -2.4832474999161382 +423 768 -1.3757527382837795 +432 768 -.19854417651638917 +442 768 -.3393457159440704 +467 768 1.4109546212490236 +471 768 -.8338836183551745 +474 768 1.92633481982334 +489 768 -1.3043840123420747 +507 768 1.7421341231493408 +533 768 .28538740139236674 +534 768 -.5130609215105847 +538 768 -.4339531078713054 +542 768 -.18837559336764997 +552 768 -1.9150998617877848 +559 768 1.095738266243992 +569 768 -1.5101705742501168 +577 768 2.026120252736209 +586 768 .8405093348235115 +598 768 -.18536656923533784 +600 768 -.28420860940743026 +606 768 1.1431592878494001 +608 768 2.0856614387539154 +617 768 2.250891745241269 +620 768 -.8590282681080204 +624 768 -1.2392748871161392 +636 768 -.5644978096650533 +663 768 .828397382668884 +677 768 .7788412395946911 +679 768 .8739258232272356 +680 768 1.3609306894108453 +689 768 .016899056949018693 +710 768 .32084208076715426 +712 768 -.6421501764845461 +719 768 .6138648184841361 +727 768 -.8762009608951359 +739 768 1.1906577492944759 +740 768 .21150532216657386 +742 768 .49938671964419507 +744 768 -1.6994099769219158 +754 768 -.500338690635596 +758 768 -.16738932169025358 +762 768 -.015042573907649376 +786 768 .2112164704167455 +792 768 -1.9083009944823197 +807 768 -.7202608810056972 +827 768 -.32924168497404127 +828 768 -.41285927131786454 +845 768 -1.6806533627108682 +867 768 1.2424194831987823 +877 768 .2785107011367327 +885 768 -.9984747734553042 +889 768 .4339707076760567 +894 768 .4135401212142308 +911 768 .11579842283129932 +916 768 .3130867423505575 +944 768 -.39349205556733635 +959 768 1.9163023002240953 +962 768 .003640844439917079 +974 768 -.6090315890161742 +975 768 .607087988783584 +998 768 1.5504344555668381 +8 769 .26167471672089315 +17 769 -2.1701213664606764 +19 769 .09419823791429249 +21 769 -.07448520700211217 +24 769 2.5628144083614592 +28 769 .28404665894663156 +36 769 -.7042636930521424 +39 769 -.7561178869944041 +74 769 -.4262365692979144 +80 769 .17009143604317098 +88 769 .26508109965664395 +95 769 .38432854189896826 +96 769 -.13381653137050492 +103 769 1.093814151837789 +174 769 -.2727867614371637 +175 769 1.7465080041104566 +203 769 .22709557582211135 +227 769 -.5548197978214969 +242 769 -1.9532770699319304 +251 769 -1.3168180479701492 +253 769 -.38054439111639676 +262 769 -1.8608666485157979 +265 769 -.827269009680023 +269 769 -.7942733313222525 +276 769 1.6542156733147848 +324 769 1.1786075635792495 +327 769 -.1320861306126278 +337 769 -1.0747368979486902 +353 769 -1.465592521908066 +367 769 .5915580209247201 +375 769 1.08526437533427 +381 769 -.3817574754383104 +382 769 -.19438695873526834 +387 769 .08541760947186841 +395 769 .8348913222883478 +418 769 -.2581449936217741 +421 769 .5557724894406761 +433 769 -1.1236586478883253 +447 769 -.04783758882343253 +452 769 -.5389995957733286 +457 769 -1.407443446587183 +459 769 1.0827699162732851 +464 769 -.7982800036845277 +467 769 -.4973471174843571 +468 769 .5362039433674718 +480 769 -.16549468960141656 +492 769 1.3766961595081049 +494 769 .8059206694458733 +497 769 -1.407833574628346 +503 769 -.17229294754507463 +510 769 .6716384306248162 +532 769 .614368963608357 +534 769 .8519632434547697 +540 769 -1.7252823134830746 +546 769 -.6197463845387644 +557 769 -.8316284090843876 +558 769 .7879845478916354 +636 769 -1.0445494524571899 +654 769 .4286386301392626 +698 769 .8566926127617823 +699 769 .9620747091227653 +715 769 -.21105235712480017 +728 769 1.8543347901642828 +739 769 -.4768824952768373 +744 769 -.8562332834701819 +754 769 -1.2682264792469362 +761 769 .5472532333562663 +770 769 -1.777056979766074 +797 769 -.076529653201592 +811 769 -.8253385195077216 +812 769 .2522069991268998 +820 769 -1.0986116716636813 +827 769 -1.3692105343114414 +831 769 -.23454410392969166 +842 769 -.15235107733383696 +847 769 -.749609478202513 +857 769 -1.4709664495648704 +875 769 -.49981473806954263 +879 769 -1.596308280043313 +886 769 -.5952024496020966 +897 769 -1.466199737210817 +938 769 -.3945729217900453 +961 769 -.4651077533588416 +971 769 .497883699560406 +991 769 .18802691515704067 +992 769 1.2231137110839447 +1 770 -.18464815206480192 +2 770 1.1654899198201336 +5 770 .6348247670591307 +15 770 -2.5349627448034457 +16 770 .26690248811858197 +43 770 -2.4306306401112883 +48 770 -1.2790433202208078 +56 770 -1.6592364616329334 +78 770 1.0625595543410238 +84 770 .6128993689015126 +93 770 -2.2931247719190346 +98 770 .43012326801938816 +103 770 -1.1257437147043898 +130 770 .8253617021790688 +134 770 -.8375229655432208 +139 770 -.03927160102577293 +144 770 1.0268313164761877 +152 770 -1.2140407480785511 +154 770 -.036648825413349184 +159 770 1.213475158135563 +180 770 -.270143266385023 +181 770 .45750353008641187 +197 770 1.5573789161150104 +199 770 .25028059027883387 +215 770 1.0551064099745098 +221 770 -2.7736333561272395 +239 770 -2.294875663249815 +253 770 -.22164212822860657 +264 770 -3.174210103508928 +271 770 .9125095167959832 +325 770 -.3505278632887345 +338 770 .836753377286115 +342 770 .21513258389203044 +346 770 .0381161354306164 +348 770 -1.597788293493688 +352 770 .8770755304120221 +374 770 -1.1821834343278994 +390 770 .9008082970105449 +393 770 -1.2316172353674326 +405 770 -1.1379042167071924 +493 770 1.7546383317864123 +503 770 1.0556301616754062 +508 770 -.6951632760819363 +509 770 .6349912149902973 +519 770 .06143850323691535 +530 770 -.1000191897640079 +539 770 .4239382012748688 +556 770 -.08951897262225114 +569 770 -1.0858259668331693 +580 770 .15528489290828532 +583 770 -.4379163976112548 +598 770 -.6849243227346352 +606 770 -1.2078004604544827 +616 770 -.17108488297781244 +618 770 1.162715312672638 +620 770 -1.5664250480656878 +640 770 -.4901772778819523 +649 770 .11554113539875238 +650 770 .9604758228413188 +651 770 .3375746532587946 +656 770 -.5741043390751007 +659 770 -1.6127226701085835 +662 770 1.064550435667853 +665 770 1.9235398668312478 +666 770 -.5877532420566054 +668 770 -.29478150948048654 +680 770 -.8038698223005306 +686 770 .3550048253895119 +694 770 1.4458545138751815 +699 770 .6289697495252655 +703 770 .7348262313786593 +711 770 -.3661518349041492 +715 770 -2.2995558910769365 +722 770 1.5897317954017325 +733 770 1.1032814109995512 +760 770 -.018958473656127482 +791 770 -1.7340171863028229 +814 770 -.2159200992327155 +841 770 -.43656345017252807 +844 770 -1.5966391971505662 +862 770 -.5146723831015784 +867 770 -.5502444754804123 +868 770 .8534606876862453 +881 770 -.9055394911883389 +922 770 -.6371472069530374 +940 770 1.7510045652710438 +943 770 -.0931915060418263 +948 770 .7295299385028614 +950 770 -.23696915696108356 +953 770 1.4623896298077448 +954 770 .3977133322315855 +973 770 -1.2404895542523642 +991 770 .2371241135375312 +4 771 .6365318569285144 +17 771 .4399985206186879 +30 771 .6136373495593583 +55 771 -.542623023187898 +59 771 .013628252788814042 +66 771 -.5954601885467421 +77 771 .4305457966327026 +79 771 .20664771181429056 +107 771 .00523294152401009 +112 771 .08659497179880954 +116 771 -.5802281811357004 +132 771 -.5727006858619695 +141 771 .608054092259235 +143 771 -.6406699047015374 +144 771 -.32972336573197103 +154 771 .294478588360416 +169 771 .5327085980773951 +178 771 .5528566652587804 +192 771 -1.0400684793118378 +193 771 1.0727982148389832 +197 771 -.41142643093542663 +200 771 -.2848737424583061 +205 771 -.0807334221989422 +224 771 .5326326422167816 +231 771 -1.4086511261094123 +243 771 .6555777635489215 +264 771 -.03956058640065674 +286 771 1.182263621611407 +288 771 .17202458622906236 +294 771 .4071856915877941 +302 771 -.15797677871165405 +312 771 1.088210595515284 +316 771 .367110403304856 +318 771 2.7198333738258738 +341 771 -.012190336849488448 +347 771 .03465899377172095 +350 771 -.2970770666120035 +373 771 .6461597441779218 +384 771 .6494533390996778 +403 771 -.8679373133928303 +408 771 -.3146670424483337 +409 771 -.01768135394779327 +410 771 -.6764693163982223 +413 771 1.085679214530243 +432 771 .2769783440438397 +442 771 -.2541455194105052 +453 771 .1896116045340888 +463 771 -.10965895350751319 +465 771 .4600367997323373 +467 771 .027164316424853466 +472 771 -.24563799814356818 +473 771 .598220475826373 +478 771 .26079511026277297 +479 771 .419238377671859 +482 771 -.5981781797282228 +487 771 .7262798808322681 +510 771 -.1130380351113357 +527 771 .9792840844592926 +528 771 -.4898667705424246 +547 771 -.33920374247524737 +585 771 .5822642756721961 +591 771 .5198226819181865 +595 771 -1.319710180047937 +619 771 -.6111268911025383 +622 771 1.0999191486144262 +623 771 -.08143134383808232 +626 771 -.5436074937867162 +636 771 .43339050990629024 +647 771 .4016105416642082 +652 771 .2739526611125172 +671 771 -.08017619338119697 +675 771 1.430662868062962 +678 771 .7411656122136399 +683 771 .3476183132652779 +684 771 .8366534149483736 +689 771 .4465901119585346 +690 771 .15565439079722898 +709 771 .09586258492569166 +718 771 -1.1521766439869061 +729 771 -.2435892480882947 +730 771 -.570435855699699 +738 771 -.3209001376172841 +763 771 -.24362015737592252 +768 771 -.5610978757400892 +773 771 -.5093837796767668 +795 771 .25455840375864736 +806 771 .8121921097462699 +809 771 -1.2366628347778534 +810 771 .3453934394552813 +845 771 .16297874022863765 +849 771 -.6197748952483841 +851 771 -1.2022836648942705 +866 771 .13540547824427043 +872 771 -.08035666213467199 +894 771 1.2134647570515382 +907 771 -.7887806578445757 +915 771 -.08048061815454167 +943 771 1.0784516744130292 +963 771 .7461725821517945 +965 771 -.04605659518951824 +966 771 .016327498388565037 +972 771 .10941199972290372 +974 771 -.41022388663073117 +975 771 .1504875420728447 +990 771 .3288188235609466 +14 772 -.14076894828666944 +30 772 .5331882215909559 +31 772 .5301428233298671 +61 772 .8586598229072694 +68 772 -.5338724573361195 +70 772 .04510785787992445 +87 772 -.2402232216226954 +101 772 -.7525950061257305 +105 772 -.2978729803439639 +122 772 .22173101132757644 +123 772 .22753084561379008 +134 772 .4388395379133476 +136 772 -1.1184202497201863 +162 772 .03234963370411464 +168 772 .06370829075174182 +172 772 -.3381946075589062 +184 772 .6586009546729082 +188 772 .6759882589234288 +189 772 -.4825262761204842 +208 772 -.029437852108772783 +211 772 -.14602149909935094 +213 772 .08122456781696077 +229 772 .451678089326501 +231 772 .2006868846182372 +237 772 -.21807459414256553 +248 772 -.2285521738633959 +264 772 .6639529750258903 +268 772 -.5372001799264925 +275 772 .35137316428049137 +276 772 -.3878016441018173 +287 772 .027047928168875697 +288 772 -.8865557695003309 +300 772 -.025645922815244995 +309 772 -.06137410817361198 +329 772 -.496344146805767 +344 772 -.13281830167950148 +346 772 .20148061637615036 +347 772 -.5525177574459491 +366 772 .5512758584141253 +380 772 -.7192949618945382 +428 772 -.5615457830080464 +433 772 .26792119388593205 +438 772 .19824140240921126 +454 772 .3874358035535585 +479 772 .20621856537155706 +485 772 .22941326538641757 +489 772 -.009201808120963273 +501 772 .10464507933233683 +527 772 .005911811184426019 +541 772 -.02918683829752257 +546 772 -.20752899240486553 +555 772 .29479389569036873 +556 772 .3727047915796473 +562 772 .11807922812633286 +563 772 -.036611344078906545 +569 772 .5470234539622528 +575 772 .885790116747396 +588 772 -.2499221965563452 +593 772 -.038543502122077605 +608 772 -.36352598738870034 +613 772 .029581969935834285 +614 772 -.05944315283312333 +616 772 .7734573663659491 +624 772 .013884851479010255 +630 772 .31729690149428025 +632 772 .5957256034004316 +636 772 -.8093109548651146 +637 772 -.12357331876489798 +641 772 -.034126076183246534 +654 772 .32703810793751037 +668 772 .19616246869896417 +669 772 -.38392994048811446 +703 772 -.1629460697634848 +710 772 .6973259198666125 +712 772 1.1770199844158524 +714 772 -.19365430670329753 +715 772 -.01823906635902009 +720 772 .1645363626379173 +730 772 -.1909496732066731 +739 772 .5074644694931043 +758 772 1.124284267225033 +761 772 .2440639980494788 +765 772 -.7311617737350079 +785 772 .5068869502625533 +789 772 .6233134134173731 +793 772 -.03258428745766065 +809 772 .7750740765043045 +812 772 -.402485647410649 +823 772 -1.1041698442232548 +824 772 -.19945030685825493 +840 772 .38826158907843544 +862 772 -.515031368475623 +877 772 .9651698580372114 +883 772 .4941849160112409 +889 772 .291621050966013 +892 772 .10982726166887752 +902 772 -1.6303312050220637 +910 772 -.3892626607514557 +915 772 .6520475347021286 +916 772 .018887188900796457 +927 772 .3285337310774144 +953 772 .18399276107086218 +961 772 -.06586358782479669 +965 772 -.25982336894215774 +990 772 .0059311841021725265 +1000 772 -1.1963689311442316 +5 773 .2867037260659084 +12 773 1.106428619860009 +28 773 -.7250413244991472 +44 773 -1.6030310545796513 +48 773 1.4155524294231494 +61 773 1.6029451450192274 +78 773 -.3136743888700863 +92 773 .09249597282432256 +112 773 1.1129713647884283 +114 773 -.11109845105133095 +129 773 -.648101926204856 +130 773 -.5380070364723819 +138 773 .46286397110616473 +159 773 1.4018667006148937 +171 773 -1.9258472349833553 +190 773 2.5064591028363377 +216 773 -.20717975395624863 +219 773 -1.168967453497985 +225 773 .29958186819743327 +251 773 -1.2108745947695931 +264 773 -.28670495268081875 +266 773 .345795485655895 +268 773 .4288543176977046 +276 773 1.5060730584578208 +277 773 -1.5776963137173088 +279 773 -.03934748320176698 +288 773 -.15668875815536476 +289 773 1.4647162281777444 +291 773 1.0191568135012319 +307 773 1.6560764619768444 +316 773 1.8160859833988048 +331 773 .312813045383718 +336 773 .2098784209061132 +342 773 -.5308565174050687 +346 773 .025498390966835656 +371 773 -1.3949526368402376 +373 773 -.5817115122636829 +383 773 .9987434381049459 +384 773 -.04006653215204799 +418 773 -.547704355248892 +429 773 1.9135496435688981 +435 773 1.8065863358343508 +436 773 1.233075752277886 +438 773 .9160648680393111 +441 773 .9980027072161064 +453 773 .08879948504953941 +458 773 -.7705334423581606 +477 773 -1.0480040749975559 +479 773 -.3660233322807306 +481 773 .06067974189338253 +512 773 -.5411198922323721 +551 773 -.08992407550836348 +553 773 -.2397377652485359 +560 773 .14562358997057778 +561 773 -1.482646342542507 +565 773 .7725571523387169 +598 773 .23160124734972287 +625 773 2.426372950303787 +627 773 -.8702647393396725 +628 773 -.6859982631092254 +636 773 -.9157891252871702 +643 773 -.826073001160131 +650 773 -.766907139519076 +665 773 -1.2538908622082099 +668 773 .04410049211066341 +674 773 -1.2786720056930165 +679 773 -1.7044671035781078 +691 773 1.3636041069206404 +695 773 .1268240680106326 +697 773 -.6189320885280253 +744 773 .6588668550489918 +751 773 -1.1700085312049386 +753 773 -1.033224601617154 +762 773 .39523806330692307 +783 773 -.010526478671722378 +789 773 .26612363171529935 +824 773 1.010834746452726 +844 773 -1.5233107600030233 +854 773 .5773814025666691 +858 773 -.47737898695783 +863 773 .32821156524645295 +916 773 .2877892979264471 +918 773 -.3638149465036898 +928 773 -.6365849903149516 +946 773 .4804699450180624 +961 773 -1.0004993961203523 +979 773 .0545467036010784 +992 773 -.04291078367109992 +1000 773 .42991434727461353 +11 774 .9669883938307934 +14 774 .306786343444928 +23 774 -.48629996185110336 +26 774 .5708598769389557 +49 774 .13607145514708405 +76 774 .313510162318958 +80 774 -.4973316574554715 +104 774 .720121957985789 +134 774 .05799540782224564 +149 774 1.7473641652780114 +154 774 -1.3391687122069644 +165 774 .37323956051508017 +167 774 1.0414273322506897 +174 774 -.9480551618421644 +179 774 .6967706981616356 +191 774 -.7963205998574158 +198 774 -1.7988485485840557 +203 774 .0517017160383079 +206 774 .8027758441224813 +218 774 -.43551893720093937 +222 774 .9727746716577013 +227 774 2.771111116968101 +241 774 -.999781971880299 +253 774 .48303981601006435 +254 774 1.7701253064084024 +269 774 .3959999495858844 +271 774 -.4825440573824716 +282 774 -.15645970855669183 +305 774 -.4727943037383298 +312 774 .1658981035462191 +325 774 -.10963160842015235 +329 774 2.0118404746293628 +332 774 -.18705926094678516 +340 774 .16692640443158124 +350 774 .36220966955739087 +361 774 -.6671171965703808 +371 774 .27839084119103014 +389 774 -.09735890738901956 +422 774 .5626475984893006 +429 774 .16396443697613128 +432 774 -.4592216994951748 +466 774 -.4465343390835496 +471 774 .3396673465291602 +479 774 -.03974425400962495 +486 774 .3965334461184028 +504 774 -.5995497725138912 +512 774 .9264838204697612 +536 774 .4068910912229883 +589 774 .8654368822384774 +594 774 -.12477890033110373 +601 774 .1583193720247229 +604 774 .01401644130241976 +624 774 -1.9818855474012524 +625 774 -1.6455047848019095 +638 774 -2.5900143072050263 +639 774 .3845993753199529 +641 774 -.019748734078214772 +642 774 -.04644214946204708 +648 774 .36249575096994524 +650 774 .6913275652761373 +661 774 -.1813068837131117 +701 774 .5428481396760094 +706 774 -.7150293038313452 +709 774 .04448171130231572 +726 774 -.3960308506276219 +735 774 .6802665735288076 +747 774 -.07239566260842048 +766 774 .5219544577051624 +775 774 .13783444243566606 +790 774 -.10946149183652136 +805 774 -.08986809795031414 +817 774 -.4600676584037381 +818 774 -.9570494699170988 +824 774 -1.4544217506284571 +832 774 -.7785456586301341 +850 774 .6967090004045033 +852 774 .022281966735391855 +888 774 -.29057987296328136 +893 774 -.1806764049384654 +900 774 1.0891218442581645 +904 774 .4214337140473179 +905 774 -.13625551384890697 +912 774 -.20158509069266442 +913 774 .48333518286283916 +917 774 -1.563062724786313 +941 774 -1.522804851751537 +947 774 .3690143829147368 +960 774 .4948704626687488 +970 774 .22644929453721846 +971 774 .5941051407298774 +977 774 .2508074735909038 +981 774 -.7645067693573852 +990 774 -.5287309524720094 +4 775 .29390001911550256 +28 775 .8384906659488237 +40 775 .025528421116754407 +84 775 -.8319186902245936 +94 775 -.5307611168897624 +104 775 -1.0074476050348935 +107 775 1.5172143402943121 +116 775 -2.5178911967681796 +124 775 -.3566936412454613 +139 775 -.2216901277821281 +154 775 -1.2407038861504507 +161 775 .786583385806818 +163 775 1.6118391116148085 +167 775 .3280630359979997 +173 775 .3958830971734078 +197 775 -1.139798789562765 +226 775 -.21531348275695888 +267 775 .8185199277837576 +303 775 -1.4525108645035052 +304 775 .20899768676507272 +321 775 2.2888042909325956 +354 775 2.1950210851459557 +360 775 -.4217925697826774 +380 775 -.17068176785855368 +381 775 .34280142737122193 +391 775 -1.7161711851833297 +397 775 .21715692909315276 +398 775 -.005132391177114559 +410 775 -.7736962312526329 +420 775 1.102644947829256 +424 775 -1.26579890230281 +432 775 .032974046792421885 +442 775 1.6312101429534362 +449 775 -.04090644059211698 +458 775 .7734819072780799 +476 775 .49736832417676025 +488 775 .4924155754378107 +489 775 .5317051601217523 +526 775 -.866122045508651 +542 775 -.7755518985485049 +547 775 -1.804815706596287 +556 775 1.5719358149605187 +565 775 .8151277532036619 +570 775 .97729279708076 +573 775 .4280513848918335 +577 775 .12057277060778025 +590 775 -.49112654304074677 +592 775 -2.714840897820981 +595 775 -1.268560489181161 +596 775 -.17595103753394692 +604 775 .8169330323323188 +613 775 1.774429038552219 +641 775 1.0990318186661303 +642 775 1.305828997183053 +644 775 .7675441704502208 +652 775 .8913805619476401 +655 775 .7903873259885716 +663 775 -1.653490355912237 +676 775 -1.1322567603160376 +692 775 .6016736636876538 +700 775 1.5019754872733488 +708 775 -.10978762762075073 +714 775 -1.3635034763191525 +727 775 1.8573527109467614 +762 775 -.37437060056775606 +767 775 -.8340930948980323 +773 775 -.028719018038872307 +775 775 -1.1295495901321415 +776 775 -1.4975741522977748 +791 775 -1.10024501322111 +794 775 -1.2560472823546098 +821 775 -.22021516478353 +835 775 .9091404137761684 +855 775 3.1734309759902075 +864 775 -.7216777771660453 +880 775 .7304780104319256 +895 775 -1.108108159069679 +902 775 .030581506251088547 +912 775 1.6495189554016096 +933 775 .3406400165729773 +937 775 .05590924547772766 +943 775 1.5811945332783972 +964 775 1.6309110248847796 +967 775 2.5961379191819423 +994 775 2.2167104048417476 +4 776 .47054657559648483 +27 776 -.140505011968186 +35 776 1.1301220982518718 +60 776 -.5137743880015986 +96 776 .8084341086735619 +101 776 2.1733248734870223 +121 776 .6405099209244907 +148 776 .06401917334986089 +166 776 -.6771115252085237 +188 776 -.2868005547843126 +189 776 -.07967921591769236 +198 776 -1.265406293237667 +199 776 -.7029218811053194 +205 776 -.4177819524578801 +214 776 .5668232478417142 +219 776 1.0850730116482625 +229 776 .23636916622735127 +232 776 .9016893971030675 +247 776 -.47733244119009277 +249 776 .43036685717736234 +252 776 -1.3639521770760217 +274 776 -.3714472486092737 +284 776 .8727173315730935 +288 776 1.0780376964670357 +297 776 -.8496678032353511 +298 776 .19682633681390047 +304 776 .15150748555520144 +311 776 -.8085918776616439 +320 776 .8916582208600101 +323 776 .6746024964824503 +325 776 -.21118960684207694 +329 776 -.6695721968445315 +333 776 -.4102411826381546 +368 776 -.45503646082308685 +371 776 .5962720648082463 +372 776 -.45027655763286945 +379 776 .5500832424875808 +382 776 -1.0167445990375368 +385 776 .4761221714691276 +387 776 -.16917507034220364 +391 776 .5206362699115481 +393 776 -.36078657635437533 +401 776 .8637393498659761 +414 776 -.35278040278306366 +415 776 -.04283550629013491 +424 776 .8425007788255365 +428 776 -.768328658598626 +432 776 -.5999031072351234 +438 776 -.20940161059957924 +444 776 -.7104208465478173 +450 776 .9146959842870053 +460 776 -1.0326779288246235 +464 776 -.26826354804762625 +479 776 -.19739803984642856 +485 776 -.8951524341999137 +490 776 1.12139125199118 +508 776 .3645449635113147 +510 776 -.7586100901607288 +522 776 .2513650057551996 +537 776 -.45352812390308284 +538 776 -1.3893711097034023 +544 776 -.4515877437893885 +553 776 .7335344967861646 +563 776 .04003606415168871 +574 776 .26162908271654817 +576 776 -.791556440235042 +589 776 .5974750483920275 +590 776 -.12740237244583819 +601 776 -.9969955091265359 +603 776 1.1894024479448777 +644 776 -.04450683572261034 +649 776 -.10913501120685165 +660 776 -.12967484726660508 +672 776 .6378604440337576 +679 776 1.3639960878333426 +695 776 -.08416944407847567 +696 776 -1.2623170173651013 +720 776 .16998168243680079 +725 776 1.6325148808532912 +735 776 -.08942595231155596 +745 776 .013585989806793763 +751 776 .5570190299203498 +761 776 .6319338474864185 +764 776 -.3009518631207959 +765 776 -.4042762425049611 +767 776 -.06881073172057356 +778 776 .12422121948893083 +815 776 1.9411907004727007 +829 776 -.3680962658804812 +836 776 .06427580719969124 +842 776 .0720057009911962 +873 776 -.8274328145456563 +893 776 -1.422856978553823 +894 776 .08455287799615815 +906 776 .2952859161538947 +943 776 -.1369181140360891 +957 776 .059082733665843684 +978 776 .5648505059901754 +12 777 -.23654349037548555 +13 777 .25800706459785056 +14 777 -.5001471534306747 +21 777 -1.0288333308111368 +109 777 -.39447726877211897 +114 777 -.3080698572103179 +118 777 -.7834005487652065 +131 777 .8826221963467318 +133 777 -1.3071493917128283 +138 777 1.5130154213725955 +139 777 1.2226339944756879 +154 777 -.3261327705587565 +182 777 .5454169043681115 +188 777 .48053902098769524 +197 777 .133144009257877 +201 777 -.3995366561945867 +229 777 -.21055749360073442 +241 777 1.5238244074624696 +262 777 -1.5509175714834222 +279 777 -1.231314425565531 +284 777 -.9986002382608523 +287 777 .011463527929326006 +296 777 -.6975202166342478 +309 777 .33061165607522924 +310 777 .2052911615181172 +319 777 -.195961707554468 +360 777 .10591635232316712 +364 777 -1.1485591459170121 +375 777 -.20168900334060552 +385 777 -.9726578825474902 +386 777 -.5116628947460887 +407 777 -.39978782053453443 +472 777 .521795415305298 +474 777 -.705786790018624 +484 777 .11441620603766998 +502 777 .34242437561261263 +536 777 1.1623753265059786 +539 777 .6696750940864469 +556 777 .8836116344046409 +569 777 .043062942076714184 +576 777 -.32885398280730926 +582 777 .009211341342672957 +583 777 -1.3217224266599052 +594 777 .06154565063102835 +601 777 -.5787480770447556 +607 777 -.8422412967324454 +610 777 -.27918948944114796 +629 777 -1.6618106787229052 +647 777 -.9283629322222756 +650 777 -.205883787144 +651 777 1.283480341811667 +658 777 1.0606820760451372 +693 777 .24235867249561133 +704 777 -.05274494551785808 +715 777 .7505981020099228 +721 777 .27806874494536316 +750 777 -.7788182622781793 +761 777 .2896374523283806 +771 777 -.3092043850016628 +775 777 -.23423013746769158 +790 777 .06661618058454638 +799 777 -1.7365538106122196 +802 777 .3309802453602401 +806 777 -.4522267097513728 +811 777 1.0004779411297096 +818 777 .37155285732026566 +829 777 -.5336767610246431 +831 777 -.5604931538823656 +834 777 .1612615302290569 +851 777 .04081232686871536 +869 777 .2529966047758651 +874 777 -.1914096392374465 +875 777 -.17837048288893315 +882 777 -.7292104933793858 +883 777 -.07523788912056004 +886 777 -.5691580369646538 +901 777 -.22454839992400158 +904 777 .1821104185223304 +908 777 1.6195210416564736 +912 777 2.3565860723396495 +939 777 .6884527018652261 +948 777 -.37256356054793394 +970 777 -.9600653080832341 +971 777 -1.0326482000134807 +974 777 -.8280801608893447 +976 777 .0371405982750361 +993 777 -1.0385601984917685 +998 777 -.38830895168960206 +1000 777 .03625455008910518 +19 778 .05072250306725383 +37 778 -.5815194719338846 +38 778 .8656875653534419 +47 778 1.3087248433538554 +64 778 1.057849526233784 +90 778 -1.188959193356467 +93 778 .1978525607846598 +95 778 -.7152484768804268 +105 778 -.09660023960601767 +114 778 .005885466434671617 +126 778 -1.483048517963872 +138 778 -.6027730885800758 +142 778 .7694596918925389 +163 778 .38546730519615896 +164 778 -1.2962627466401309 +169 778 -1.2752286777763477 +170 778 -.05717979825262559 +177 778 -1.293761763439003 +190 778 -1.2783453737040982 +192 778 -.6879548658828293 +194 778 .36512346811869 +195 778 -.4567937875311595 +199 778 -.46237832024132536 +204 778 1.2247717424997655 +220 778 -.3039209442902693 +221 778 .20611012379195706 +223 778 -.9300210431373314 +236 778 .2534447272723453 +250 778 -.7583570585468 +289 778 -.45187101737057467 +311 778 -1.096600722505537 +313 778 .655283552681517 +322 778 -1.4278838475906062 +323 778 -.7209148429551029 +332 778 -.5928953515966612 +334 778 .8973360449293556 +335 778 .4309047091182774 +351 778 .8317000848673618 +354 778 2.5272017068686794 +365 778 -1.2728469533480984 +380 778 .2918505972653158 +384 778 .8133282026162599 +389 778 -.5842379833124336 +390 778 .3408050645542632 +392 778 .8660034089639469 +396 778 -.026676902493715043 +398 778 -.00030487012375508826 +420 778 .116966264489209 +425 778 1.6500030614028713 +441 778 .6298734830211916 +454 778 -.6215583237007081 +456 778 -.7548311907845904 +475 778 -.04599269916802394 +503 778 -.5900153582672343 +519 778 .3634809050531043 +520 778 -.3974890688232915 +548 778 1.3044833760917591 +549 778 -.4641402096964824 +574 778 .3842003482844956 +598 778 .6604976514867005 +604 778 -.14873680376662507 +613 778 -.19252346887305968 +625 778 -.5476617078465206 +659 778 -.2616552938962898 +668 778 .9189271631780519 +685 778 -.12080788062080836 +686 778 -.6787244298965796 +704 778 .17845123037655028 +721 778 -.2309700966050433 +725 778 1.4657239231179144 +735 778 -.04308480563324979 +738 778 .7235117834558261 +739 778 .09365783135216509 +751 778 1.0949201275048592 +753 778 1.3791233557362896 +766 778 1.2129316289017251 +779 778 1.3185366544102697 +782 778 -.7424966473454006 +789 778 -.8274923564480474 +799 778 -.996784271181868 +833 778 .3520627031362072 +835 778 .03296048466066362 +860 778 .8828371771312798 +862 778 .4581387479572486 +883 778 -.3020658899449563 +884 778 .062259940721570706 +921 778 -1.965784262228789 +947 778 .03034754461013113 +954 778 -1.0560248199171176 +963 778 1.5294663104791446 +975 778 -.8833597816727352 +977 778 -.5946504795171055 +978 778 .4860228279542983 +979 778 -.2620608226436404 +986 778 .6709800791753147 +988 778 .9465285640907305 +995 778 2.062242605014322 +20 779 -.829297825160299 +33 779 -.5472940884909208 +44 779 1.1479785907716606 +51 779 -1.6106614850955387 +53 779 -1.1064352429257889 +55 779 .3083081521775305 +71 779 .5056865569680359 +81 779 2.040702343883696 +91 779 -.7657447260422192 +92 779 -1.165131171078305 +112 779 -.4937503034064776 +122 779 1.7599490887047096 +137 779 2.295848830256171 +156 779 -.15501299314721576 +159 779 .348168508764377 +180 779 -.3717787232692191 +201 779 1.114767919539988 +203 779 -.30664522701799113 +208 779 -.6425049366936282 +219 779 -.9188212630426924 +222 779 .4030332136457072 +236 779 -.6174931395703946 +237 779 -.660874742217433 +247 779 -.04967198481236533 +255 779 .0029654819118492266 +259 779 -.4785742124608966 +261 779 -.6561520295261537 +268 779 2.146673040633553 +278 779 -.3396717930279176 +297 779 .48737534835813495 +301 779 -.574593957640629 +308 779 .5886163411531226 +316 779 -1.8622967520413822 +319 779 -.13463637648874396 +328 779 .7845212205154497 +360 779 -1.7929501584531908 +369 779 -.9935812565891179 +386 779 -.9811212012992946 +388 779 .42158647361916946 +390 779 1.8584612049463112 +393 779 -1.9078414074752326 +411 779 -.1522222142370242 +415 779 .6431645423738732 +420 779 1.3085341952069924 +425 779 .9393604440065368 +429 779 .4238686681230156 +433 779 -.09047127305458866 +438 779 -.1487882868792336 +441 779 -1.312190006735581 +453 779 -.7952515301047248 +464 779 3.152277995628189 +467 779 .754950920627789 +470 779 1.043247362791259 +472 779 .5786660088296709 +473 779 .10999130211530114 +483 779 1.262531611663531 +503 779 1.758869751521383 +525 779 -.42026792670754354 +528 779 .30056742839779593 +532 779 1.3360417970918428 +551 779 1.690608469426643 +582 779 .40882773940357914 +583 779 -.5643338751324974 +601 779 .7963632453341253 +602 779 -.7039340414846473 +611 779 -.44125300530761585 +619 779 -.07009324907253103 +676 779 1.2986683413083997 +688 779 .40309892398408914 +694 779 1.5382839978587908 +707 779 -.13213800895525263 +722 779 1.0285453628570194 +731 779 -.9007334553927878 +739 779 -.5349835334943289 +741 779 .3553102130038465 +752 779 .541223648758239 +753 779 .6038334294796036 +754 779 .28301568336674904 +765 779 -.3896540264621803 +776 779 1.465546310166101 +807 779 .539330713365589 +810 779 -2.751535954439275 +812 779 -1.827461754535916 +821 779 -.8057008102125042 +844 779 -1.049438151492118 +852 779 -1.9606146847212353 +858 779 1.0284131049876817 +893 779 .11963353222951459 +895 779 -2.8857399234679066 +902 779 -.6798453511148942 +913 779 1.7265193037306583 +937 779 .6475818564927265 +941 779 -.3292427482122293 +947 779 -.6816928471501702 +957 779 -1.7269568455596724 +989 779 -1.3109491691291804 +990 779 1.1070940552011903 +41 780 -.7436914064512602 +44 780 -1.3951000501585678 +68 780 .39849102507625767 +118 780 .29955478500800353 +135 780 -1.2821418086682344 +140 780 -1.0000489840189764 +144 780 .6131081131638573 +152 780 1.5125357276289737 +173 780 -.019055178890582447 +174 780 .8618384042667854 +177 780 2.4138820442097066 +181 780 -1.0717391855577385 +186 780 1.7340846883292456 +198 780 -.2619356587064049 +200 780 -.23797095237787874 +202 780 .4029365756804451 +212 780 -2.039541721790325 +235 780 .13515602707259677 +236 780 -1.5934385831313596 +256 780 .5218597663728635 +259 780 .576119233842272 +265 780 1.2636434710802296 +284 780 -.5905336558483086 +303 780 -.6528760425660947 +333 780 -.6978866124589624 +347 780 1.4675606150613032 +356 780 -.514425232407292 +364 780 -.0881452837160465 +365 780 -.36180493976910927 +370 780 -1.0982552333845481 +377 780 -1.32359952470927 +410 780 -1.189900095182365 +420 780 .8246519621429899 +427 780 -.029493058193868306 +435 780 1.1797575091662562 +444 780 .8276466031097522 +478 780 1.8640363246454585 +481 780 -1.3805829705190018 +503 780 .039334100475263784 +520 780 2.0913495583514816 +533 780 .7184270670147589 +545 780 -.612136735814277 +558 780 .9971962262962183 +566 780 .6489976553059307 +576 780 .8333414609329388 +583 780 1.5759200367152826 +596 780 -.6554973067896462 +598 780 2.0485508431320842 +612 780 -2.66496449385245 +622 780 .681919186944971 +631 780 -.664334404697104 +644 780 -1.4324215032688397 +648 780 1.0040903432837542 +670 780 -1.1510008463106391 +679 780 -1.4481937082497793 +690 780 .7182927754798862 +691 780 1.2984446189055092 +693 780 -.27969777255660977 +696 780 -.6132718687608019 +700 780 2.2765288756169406 +730 780 1.2703188858563488 +736 780 .28362956118779226 +738 780 .15840760522995806 +744 780 .5749626449418522 +785 780 1.562984788045838 +788 780 1.3468893312221664 +795 780 -1.0650494770723717 +822 780 -.2746088663307938 +826 780 -.35237481501356127 +835 780 .9779321475838721 +857 780 2.4293526347609253 +864 780 -.5962871102539085 +873 780 -.870521874042333 +897 780 2.1166062688309557 +901 780 -.23316280680934445 +912 780 -.8184157606783236 +918 780 2.038673033951751 +921 780 1.3196903524571337 +929 780 2.6806070441293754 +946 780 -.6920103516902736 +959 780 -.6451883695541911 +978 780 1.5483039423542304 +993 780 .7795212728595365 +998 780 -.2703947512846279 +13 781 -.011681319848613037 +31 781 .7994859022667781 +47 781 -.6872113736346348 +55 781 1.4174098547721392 +62 781 -.8647019408368963 +75 781 -2.7907235467545406 +79 781 -.5003314390893738 +80 781 -1.3867753771139268 +86 781 -.06215782539211016 +89 781 .7644319104587681 +99 781 2.0350740406379417 +101 781 -1.3819863112695019 +118 781 -1.460559325640585 +121 781 -1.2675545701691806 +129 781 -.2485340601019968 +138 781 -2.482939109745598 +139 781 -1.212227431565481 +165 781 -.00036841218525991704 +192 781 .7937954869961255 +210 781 -1.038866177349242 +223 781 -.3051580171118544 +258 781 .2271079714216303 +265 781 .5904494056417544 +283 781 -.589862201901235 +285 781 -.09256962055722656 +299 781 1.3157444580223712 +309 781 -1.0709919490606132 +320 781 1.0535892311496942 +322 781 -.8522567572859328 +324 781 -2.3485442923388895 +330 781 -2.51363929083809 +359 781 -.9837180382346679 +380 781 -.5190462143674134 +426 781 .5341911625318424 +428 781 -.20381223101934948 +443 781 -.06169938362938149 +445 781 1.3851377270699319 +459 781 .9280138157695484 +467 781 .0829081114418698 +469 781 -.7800215780333333 +478 781 1.6877926153724152 +499 781 -.4922181128293115 +512 781 -1.8164220199883279 +517 781 -1.3355434326344446 +534 781 .09032106387738092 +537 781 -.9529256158381652 +546 781 -.008655377244261145 +579 781 .2910542224557861 +592 781 .56181860682001 +594 781 1.0450870654749833 +598 781 .6548203807524751 +621 781 2.469981086521638 +632 781 .36062546422927366 +635 781 -1.9674101044443073 +645 781 -1.900455579568984 +658 781 .6927207616319533 +669 781 .1962309231178301 +675 781 -2.101453902584554 +677 781 -.9633136390555463 +679 781 .1929561019060021 +680 781 .3574309049708069 +686 781 -.28251103701407393 +687 781 -.49005066495197747 +730 781 1.9672628905933904 +753 781 .6063503576041435 +774 781 .7458656177900455 +796 781 1.6533739963989305 +824 781 .23037828263288607 +832 781 .0026549570227212826 +838 781 -.73611509690466 +850 781 -.38402107039793604 +856 781 -.43575374186165305 +868 781 .43672011466043453 +880 781 .8747862158920381 +881 781 -.5509913237909828 +883 781 .9128728934493958 +895 781 -.4930396273849506 +900 781 -.5980057068561567 +903 781 1.6705558745749052 +915 781 .1559532878699253 +918 781 -1.1970759617173696 +926 781 -2.387279658165324 +931 781 -1.1785646390163715 +963 781 .19201685013601116 +982 781 -.1472109987614952 +984 781 .05771776937461325 +987 781 -.6991132060005294 +4 782 -.10828859060732735 +8 782 .36509390193188085 +26 782 1.5903503588614072 +27 782 -.04806391443547253 +31 782 1.0534497461148347 +33 782 1.4302937500720172 +44 782 -.8420416345864462 +52 782 .5055294063102413 +61 782 -1.232970583814081 +64 782 -.41087910206415096 +71 782 .6906664209770642 +73 782 .353843634784456 +78 782 .27027025573824826 +83 782 1.0553614323570892 +103 782 1.6502856742164742 +106 782 -1.1284004876142637 +109 782 -.593039522042751 +113 782 1.175746509722417 +117 782 .08380795681451775 +142 782 .25466155731783846 +143 782 .2505539966028628 +145 782 1.0653109718521332 +151 782 -.600029415537503 +169 782 .6232144549512809 +177 782 .2695688390947647 +178 782 .2133331979165376 +279 782 .027767153386245132 +280 782 -.14455510464062624 +322 782 .5505896418147558 +328 782 .4339365863346298 +332 782 -.4657980529295014 +341 782 .27851520665807883 +368 782 -1.174704866188501 +373 782 -2.291230083832551 +377 782 .21545005016254884 +379 782 -.17533061048895351 +393 782 -.032144631722895625 +399 782 .23611833574819846 +474 782 .8516905422159944 +492 782 .7418496270339544 +494 782 .2621071736685049 +499 782 .8445984350424405 +503 782 -1.5973974316782635 +517 782 .1953116946514006 +519 782 -.3458074722307901 +525 782 .6281836411370897 +527 782 .7968314413609271 +536 782 1.472416722123497 +537 782 -.43546854895683057 +539 782 -1.38535160136844 +547 782 -.32495960077354213 +551 782 -.8616211931432389 +562 782 -1.2972468914302528 +581 782 .5183345937085997 +587 782 -1.487482192332974 +588 782 -.08021145206800248 +617 782 .40058622751582024 +637 782 -1.2013110510844387 +656 782 .9135330376339958 +676 782 -.01897125419291785 +695 782 -.8551081704242406 +706 782 1.1611582900131847 +712 782 -1.4871977209407234 +727 782 -1.2813652508993256 +730 782 .04333084571505924 +735 782 -.340755090279671 +739 782 .8498103852035466 +750 782 -.6317620882795016 +774 782 -.3014789845073729 +782 782 1.552289316614812 +783 782 -1.3324793923850065 +786 782 -1.1202737118035715 +795 782 -.7121623780374813 +809 782 -.18569181850183664 +837 782 -1.472135331722093 +851 782 1.2237998622524278 +855 782 .5734501365907847 +879 782 .835925771209143 +885 782 -.023246259292898447 +894 782 1.7779402635541266 +909 782 -1.2652243276439712 +918 782 -.4580951742849448 +926 782 -.5361842492238684 +957 782 1.7607495363124959 +994 782 -.7038332908826003 +1000 782 -.8117754912194314 +15 783 -.3545172660647717 +20 783 -1.382122302208812 +26 783 .22449942629018976 +31 783 1.0507486849468166 +70 783 -.4567971214802993 +105 783 -.49394560756637595 +112 783 .20839227948163852 +115 783 .4815131207010985 +132 783 1.038906709013045 +134 783 .4554887083644206 +136 783 -1.3098727782032165 +139 783 -.20779029091244 +142 783 -.4437218772226188 +146 783 .8261137628725306 +159 783 1.1736633577027142 +162 783 -.7524446955511048 +163 783 .15741527298312818 +200 783 .3389444824264308 +214 783 .2369803555651311 +250 783 -.4314050636128025 +261 783 .10206874196845636 +271 783 1.3601266211358303 +277 783 -.7544150966890568 +287 783 -.14510927796040785 +291 783 .12712307176033533 +296 783 -.06247589112949972 +297 783 .6277667812396841 +301 783 1.0135000636127478 +308 783 1.3241838700240103 +317 783 .3726424837682899 +328 783 -.11509226558368611 +335 783 .6077236285212048 +344 783 .24162118866808338 +347 783 -.7204268232519163 +356 783 -1.8746368449156992 +375 783 -.18497171513720112 +408 783 .21530840990910702 +446 783 -.5333842862792264 +456 783 .18639332468500203 +504 783 -.5576234529169616 +506 783 -.04273623909964347 +507 783 -.7738435712827971 +508 783 -.01998685027783434 +510 783 1.1077713307020156 +512 783 .8622173111126982 +536 783 .3202694747661843 +539 783 .8430955668431294 +548 783 -.06672236386097613 +557 783 -1.6947770345785726 +559 783 .4570576029597146 +560 783 .8251795788326393 +563 783 .12885529357309788 +567 783 1.2115685867345094 +572 783 .9698099793111737 +589 783 .04570750937163477 +593 783 -.2516668705202856 +612 783 1.7613196668088398 +617 783 1.4440289476726136 +619 783 .1671804320305552 +629 783 -1.5481143218643354 +631 783 .45054899450226327 +646 783 -.5061808453715815 +655 783 -.4323143303590199 +660 783 .161867022265979 +661 783 -2.0922715785798083 +675 783 -.13435094406400755 +686 783 .31521472847684184 +727 783 -.012813391085615494 +735 783 .46689474540001635 +743 783 -.9364314052120571 +745 783 1.0131962631725508 +748 783 -.3728578356020471 +753 783 -.10589628446756497 +781 783 -.5263898814546343 +797 783 -.7058383915548362 +804 783 -.4934209735008595 +808 783 .5640203604780925 +828 783 -1.1280103379096766 +836 783 .7389804987653805 +864 783 -.3285738492061617 +868 783 .6626008562041433 +874 783 -1.35192618081828 +877 783 .8079191751379718 +904 783 -.1668828815541304 +917 783 -.29315001248242434 +924 783 1.850786407490283 +940 783 .5985927568282144 +959 783 -.10525401182839111 +974 783 -1.3771893639496204 +980 783 .9253964165999655 +1 784 -.4599214308669018 +17 784 .5210564937702442 +23 784 -.5700194742203927 +24 784 -.2101065531678714 +25 784 -.4215973823485921 +60 784 -1.1092021582061327 +64 784 .2622450158956892 +68 784 -.38283354211735177 +75 784 .625839706497272 +78 784 .5916441188934081 +123 784 .14862811986830052 +124 784 -.04423030127261937 +125 784 1.0105368372789796 +128 784 1.6343994412678478 +142 784 .19874128161071175 +150 784 -.45833277838190767 +158 784 -.6309057269321527 +161 784 -.3354082008393329 +167 784 .47347547673086304 +185 784 .7132453703109396 +188 784 .3366239121136641 +190 784 .9479759818338945 +193 784 1.171483558386587 +200 784 -.4665943029489908 +217 784 1.1189653248604083 +229 784 .9152934518447022 +239 784 -2.6162845989646315 +252 784 -1.0705180580463043 +254 784 -.5785362110236004 +256 784 1.784778183329149 +263 784 .7122010442724827 +264 784 -.7049422457031966 +270 784 .08793685489554681 +277 784 .26770308116860314 +278 784 -.33151340102058685 +287 784 .6221938412522533 +299 784 .04053280460384118 +312 784 -.4955932785268437 +326 784 .9244286265257577 +336 784 -.6898755324807921 +358 784 .34752676996955256 +374 784 -.388744861938842 +380 784 .06816779102207515 +383 784 -.10221938890067495 +387 784 -.02401587803535707 +395 784 -.2724388698874903 +396 784 -.7997142172715266 +414 784 -1.2335784142549613 +420 784 -.1908080270917196 +422 784 -.8222328199653864 +423 784 -.6425608849230666 +450 784 .6949737655979176 +465 784 -.928043953506502 +471 784 .13643813447338043 +491 784 -.7206037372367025 +519 784 .601251333071587 +558 784 -.7481724300237151 +564 784 .2870397682059156 +573 784 -.18113604781404713 +578 784 .06846772658108474 +582 784 -.30152624229015806 +605 784 -.7072683936536336 +608 784 -.6860516152080531 +629 784 -.5895813323992259 +632 784 -.5776808824694039 +640 784 -.16203661091175153 +641 784 .06428300862388442 +646 784 -.48088441809372484 +647 784 .22966679753285563 +657 784 -.7064065439496404 +662 784 1.6380909170573383 +676 784 .5655932716070892 +678 784 -.3340876127646597 +685 784 -.02656758504863868 +698 784 -.41396541601222486 +699 784 .6738199506253763 +716 784 .7687553335711497 +740 784 -.9902699978310917 +743 784 1.0192240226952196 +750 784 .03272905877251531 +765 784 -.5942062292100279 +771 784 .08859327458051755 +781 784 .34218792045110336 +784 784 .8996394831596117 +813 784 -1.5016452267490492 +816 784 -.7160575474763695 +822 784 .8742268177795062 +830 784 1.1474105945044137 +850 784 -.11664706190340746 +854 784 .09674818961094975 +865 784 -.3928602035188876 +869 784 -1.0127463906084366 +872 784 -.2759323224739391 +884 784 .49482969542804717 +901 784 1.0846647107936633 +902 784 .1994016588688206 +912 784 .3312112944906427 +915 784 .5992214811663948 +919 784 .2867800891112955 +929 784 -1.2699655033182315 +971 784 -1.0597998788585599 +974 784 -.7851119741256104 +983 784 -1.0734539013429223 +986 784 .3753252607130437 +1 785 -.8278862703392498 +13 785 .09416394442824602 +14 785 .2593372347596275 +37 785 -.7722691326688544 +38 785 -.026905541094677174 +42 785 -.4716620744108499 +49 785 .07517349318759854 +56 785 -.39191292109916587 +64 785 2.240139454022167 +65 785 .22404671569064316 +70 785 .12065606379051493 +79 785 -1.105705359546864 +82 785 .8928993814077292 +89 785 -.09554803746559125 +101 785 .5864428166495603 +109 785 .5422865982657639 +127 785 -1.1201984113560142 +130 785 .8294533430755963 +131 785 .5266521798116278 +135 785 -1.0285150082020185 +141 785 -.3462129167402947 +152 785 .7566224437299258 +174 785 -.18119380616582514 +180 785 .9570489904035295 +183 785 .44625259106316223 +191 785 -.13219287203407953 +193 785 -.6308792742074202 +199 785 -.6095973080322143 +208 785 -.09762925661187535 +238 785 -.15486135469709428 +248 785 1.218622692791035 +256 785 1.400694008142539 +263 785 -1.540944126071729 +266 785 1.2132122513358832 +281 785 -.4627571246933111 +300 785 .34860442816655923 +313 785 -.26084801410698016 +316 785 -.7271927857713861 +329 785 .20828645353817934 +356 785 .0396180057936214 +368 785 -.9292848254299265 +370 785 -.492510265241876 +404 785 .4637517351855483 +427 785 -.3443112336513381 +434 785 1.0494149011784892 +438 785 -.48199611958836786 +447 785 .32386031955649286 +452 785 .09187254143160649 +464 785 .492994279495332 +473 785 2.352386513216194 +513 785 -.8096918904159918 +532 785 -.04940513205143887 +533 785 -.17020539953989902 +537 785 -.9275555194512164 +575 785 -2.2164630753919763 +586 785 -.5413909174620154 +589 785 .3312421408992005 +618 785 -1.7238956491108253 +621 785 -.38373081052159447 +636 785 1.8603336057812638 +639 785 1.1270891699294798 +651 785 -.4807574572611273 +660 785 -1.0323091833364442 +661 785 -1.1617592101906835 +662 785 .011640099145206861 +678 785 .8295276496896606 +681 785 -1.8212896011766084 +695 785 .014636451273982998 +722 785 -.8792009697417594 +730 785 -.7197464874023393 +733 785 .015563021627458734 +736 785 .7180983360471271 +773 785 .7992727682573202 +777 785 -.32031994937907154 +783 785 -.34495510691702275 +784 785 .7242618279759553 +794 785 -.19831685749761196 +803 785 .11877308449393587 +813 785 -.7803427930897724 +815 785 1.2032215314020875 +837 785 -1.2855547010630985 +845 785 .23253809613326082 +851 785 -2.312817238875569 +858 785 .6196470436121195 +869 785 -1.9287425944276715 +882 785 .6731737016319331 +897 785 -.898668373164132 +918 785 1.2399273645967275 +935 785 .6754059534647863 +954 785 -.7296870342781314 +970 785 -.7110443483534649 +980 785 -1.4653489511461621 +986 785 .9216153056540433 +8 786 .5198378074774078 +16 786 -.3558735268815196 +25 786 1.124846615797038 +30 786 -.33081542565421784 +34 786 .5116079746984431 +46 786 .6479344490556873 +63 786 .19137671289274713 +64 786 4.02382584947191 +75 786 -.23235505213747845 +82 786 -1.4381781511081853 +97 786 3.253744831398023 +104 786 -.1860902750508495 +108 786 -.6716474175009856 +112 786 1.2602320793113795 +120 786 -1.5814187589964896 +144 786 -.664837019569716 +156 786 .3901193465339482 +167 786 3.4481025714999505 +168 786 .1609499627488516 +174 786 .17998720860091155 +186 786 1.942473396427932 +206 786 -1.1877822464683472 +224 786 .8183824026478727 +238 786 -.13962557988473132 +251 786 1.0261074726438073 +258 786 -1.031627883479013 +260 786 .3152708905797281 +276 786 -2.001128684155685 +279 786 -.509799510026221 +290 786 1.3660513009155781 +298 786 -.356151475983343 +308 786 1.687290491670048 +315 786 .3042901797221012 +318 786 -3.6392089605667564 +322 786 .6398419039971841 +325 786 -.05263026502596232 +326 786 1.4890624804345853 +343 786 -1.3029697744402955 +346 786 -.137825738653693 +356 786 -.07921717585810469 +368 786 -.8707521000925124 +389 786 -1.2652838418254209 +398 786 -.045610723157096855 +416 786 .43856086774258146 +421 786 -.12244666193875987 +425 786 1.7506652328346284 +427 786 .7919107267719059 +430 786 -.9341793580117383 +439 786 -2.557799403816177 +445 786 1.6171523276257156 +453 786 -.3285917431609607 +455 786 1.8110709766844055 +469 786 .7049986997133534 +474 786 -1.4005017736454535 +480 786 -.932138230867398 +491 786 -.2115762091589415 +501 786 -1.204640843592347 +511 786 -.6402133671105962 +512 786 -.2691128071461711 +516 786 1.5918931664506257 +546 786 -.9849590451249358 +547 786 -.8503787645147874 +576 786 1.6911421595323384 +580 786 -1.2108345687392208 +594 786 -.6780597475502802 +602 786 -.974179293294838 +607 786 -.892080952184445 +613 786 .2107395001474433 +614 786 -.4637239756344171 +617 786 -.6193291708597384 +620 786 1.4313589367815827 +622 786 -.559036838076777 +626 786 -.17158711683155792 +638 786 -1.3075789633722936 +642 786 -.9351013585218118 +644 786 -.6019484030413678 +659 786 3.9539553247725716 +662 786 -.1885322178493264 +669 786 -1.5438468975487913 +673 786 -1.544188861081239 +687 786 .49203089866810495 +695 786 -.25725760397595315 +697 786 .5184981673518213 +737 786 -1.4802756194754048 +741 786 -2.086187230429693 +756 786 -3.2497731186431285 +770 786 .7892955873434578 +811 786 1.8181236234007734 +841 786 2.0341356428758997 +843 786 -.5540300614504552 +846 786 .37315645254295415 +849 786 -1.4490651067595044 +854 786 -.6115008440690372 +859 786 -.1034877781568522 +861 786 1.7410141813664892 +887 786 -.5876521025656641 +897 786 -.5270806217140768 +922 786 2.4619729378967192 +935 786 1.1623682550660563 +936 786 -.4744907659443213 +943 786 1.0736717477136761 +948 786 -.8728831493965098 +949 786 -.9721395144460271 +960 786 .3105487386496 +975 786 .0062966742340043284 +981 786 -1.4795032129125822 +10 787 .8254849638119451 +32 787 2.162210678247878 +33 787 .6705229440505314 +41 787 .6039783561529125 +64 787 1.6001959318830452 +67 787 1.9728430845014144 +72 787 .1550688092965232 +83 787 -.8260683583966213 +101 787 2.6957480264850746 +113 787 1.1265263105831218 +118 787 1.154651388542857 +128 787 -.4509397653686441 +134 787 -.462917443649385 +173 787 -.6679646324967677 +180 787 1.5932586929005292 +202 787 1.61355731957055 +211 787 -.11168969949188379 +214 787 .13201579788956858 +215 787 .5115399964440799 +228 787 .4478982904539231 +245 787 .013379691287622814 +255 787 -.3516344273412023 +266 787 -1.1089019713287043 +280 787 .1887365978321012 +283 787 -.910166838394072 +284 787 .9481639958571038 +287 787 -2.835973723668613 +297 787 .8990115118319056 +300 787 .6475159191905542 +309 787 .8699607004823031 +316 787 .9317519858808417 +330 787 1.0839444101740756 +332 787 -.5521352036704498 +344 787 .23228736378111556 +346 787 .1216477292714363 +353 787 -.11222880050292336 +367 787 -.6816714875646456 +376 787 -.44441558405357084 +392 787 -1.8689691477189143 +394 787 -.46288173564972823 +398 787 .246385778280034 +405 787 -.08369320006521908 +406 787 1.2460649985774643 +408 787 -1.4913385686897662 +415 787 .017719405064064782 +432 787 -1.2476551750660667 +442 787 .5535918691243301 +454 787 .4235933101650948 +455 787 1.5431711175095955 +470 787 .15861979946238425 +474 787 .8315282983004985 +475 787 -.28570995232676333 +481 787 .3008306267787988 +500 787 -.13700785421722897 +515 787 -.57848236564149 +529 787 .6076029822374855 +539 787 -1.3357331387938778 +582 787 .03782374063515749 +597 787 -.8797373264976951 +599 787 -2.118080187958557 +600 787 .06723646330625059 +615 787 -.6089670177009379 +617 787 -.9119548064203467 +618 787 -.14651701693071073 +627 787 -.9068913264454788 +633 787 .2995947646028262 +647 787 -.35754997291655266 +655 787 1.3526337255058662 +662 787 -.8711995966736253 +678 787 .8653783636390763 +680 787 -.08919043676286909 +696 787 -3.2871918814327374 +706 787 -.3181063076603391 +707 787 .04994815288792205 +717 787 -1.6705177122857826 +740 787 .5581757288118773 +745 787 -.7506617312098413 +751 787 .0671042910431332 +752 787 -.044564128518392115 +778 787 .7904738307142906 +785 787 -.3934187342658319 +791 787 -.7092718811830877 +806 787 -.3026760510827426 +812 787 -.4766043629447788 +818 787 .006003117629942267 +820 787 -.9026622631896491 +827 787 1.3330225044466952 +835 787 -.8464040133384717 +847 787 1.1356836267953836 +848 787 -3.1330375197273517 +854 787 -.6387962969040283 +858 787 -.055459667088469944 +859 787 1.1513079735834615 +866 787 1.9948905619129742 +888 787 -1.0026847617838142 +901 787 1.2496191354984916 +908 787 -.29556468759728755 +913 787 .935313281204288 +916 787 .7248922546842327 +921 787 .4657423388509185 +923 787 .5588586758828586 +959 787 2.66754991382289 +964 787 1.1794896210088188 +967 787 .5581433004495961 +975 787 -.7623987474770443 +980 787 .312519662907501 +8 788 -1.855944021535579 +11 788 -1.7372453369726881 +14 788 -.535383892738686 +17 788 -.4805407980506389 +29 788 .27391097777680723 +38 788 -1.0855848561253079 +40 788 .9044716174512416 +44 788 -1.2347013238491704 +46 788 -1.6525695004986705 +48 788 3.3989432821298737 +73 788 .4675289896628688 +81 788 -.37760171270450976 +95 788 -.8612157924774276 +105 788 .02372061387950771 +122 788 -.3341227010459508 +132 788 .6231776858869086 +143 788 .28510540716820343 +145 788 -.10445111303217373 +149 788 -.1089735901123487 +154 788 2.6692885262535664 +155 788 -.7068387495778665 +180 788 .9464521020447239 +184 788 -.07952794519648326 +207 788 -1.8930448267159676 +211 788 -.12512883933851765 +223 788 .5325829897641912 +226 788 2.2370059696478597 +233 788 -.9232910603064413 +234 788 -.8699810144172218 +239 788 -2.0620266204488154 +241 788 -1.3165586122653352 +251 788 -.03649810575749225 +253 788 .27700023160560455 +261 788 .6808227551808841 +267 788 .7138358669726776 +300 788 -.050484474262141955 +303 788 2.47389342079633 +315 788 -.5781297965554785 +321 788 -.6240731230730769 +323 788 1.1607676051879798 +325 788 1.3535903638525812 +341 788 .9747907628989696 +344 788 .5144643357880629 +349 788 1.6748006319783058 +351 788 -.3274259667065401 +353 788 -.028526760697802387 +357 788 -.20947247298155414 +374 788 1.3692035817292032 +377 788 -.3146634356758522 +384 788 -.47142953383268094 +389 788 .7804499589741897 +390 788 -.6337229137084361 +402 788 2.4478632338094135 +413 788 1.5715527244952046 +443 788 .1370923462101235 +455 788 -1.4115374831761291 +469 788 .5327406657828987 +476 788 -.3499099641414531 +480 788 1.0443815477716287 +486 788 -.4600624594011463 +497 788 .26352745857061527 +513 788 -.3050782716881887 +518 788 .29334257197581226 +530 788 .3594108520274987 +550 788 -.8613370501075819 +575 788 .12030503438495399 +583 788 .7140877515715787 +591 788 -.06257542823218215 +602 788 1.495333420672263 +623 788 -.9040747252987594 +625 788 2.6153275520418706 +626 788 .913990342101967 +633 788 .10205616020394175 +652 788 -1.5042442983147803 +655 788 .1733422998697538 +663 788 1.3038614033918485 +666 788 -.3092632309630249 +693 788 -.7309770448628804 +703 788 -.017870525471736093 +712 788 -.6815627448572859 +742 788 -2.2284993274896583 +757 788 -1.8714778744175466 +771 788 -.9462249111218747 +774 788 .2626921794472564 +837 788 .60436968033624 +839 788 -.18101281515592102 +840 788 .2971645499491632 +853 788 1.247517502708016 +857 788 -.5441343011435112 +861 788 -1.546929961911654 +890 788 -1.9485011904883376 +897 788 -.9916066048824285 +905 788 1.3036065593205957 +911 788 1.965912564190986 +917 788 1.0192236112147455 +931 788 .21671700754586187 +938 788 -.8127684490935585 +945 788 .1479487064827247 +962 788 .23175638920723726 +974 788 -.8955288048161376 +976 788 -1.0941761439178326 +986 788 1.2299376574199812 +3 789 -.3513986419901682 +19 789 -.14763097360415456 +26 789 -.9901775412611667 +37 789 -.3736525597479958 +71 789 .8865092202474105 +77 789 -2.618761860062825 +125 789 -1.6728571980378544 +135 789 .2358733189442883 +137 789 -.20424943773657156 +144 789 -.06883113642594914 +171 789 .42643200823431104 +172 789 .4148350438576043 +174 789 -1.1356104809779963 +183 789 -1.3004822368032118 +207 789 -.13410425166750362 +212 789 .1771245043040924 +228 789 -.42558365022950906 +258 789 -1.395405141413657 +268 789 .7233564340597906 +269 789 -1.6775163342916122 +288 789 1.125131342196604 +290 789 .013705719126693952 +321 789 .10580163659461697 +337 789 .2737975903815746 +348 789 -.14942589281105703 +363 789 .38191736230418316 +376 789 -.939026552100041 +379 789 -1.6345212646636018 +380 789 -.0033649082225999105 +384 789 -.3904069790652472 +396 789 -.2988222061580261 +416 789 -.09529733860285437 +421 789 .9908228750793134 +445 789 1.2073283379560862 +450 789 .63415431771917 +454 789 -.29635388513329636 +468 789 .7462317042594776 +469 789 -.45621537781500004 +480 789 -.9071985679975714 +495 789 1.7311493487140455 +499 789 .16210256364279518 +510 789 -.5654454383635351 +514 789 -.9730893288074336 +531 789 -1.117314333054511 +534 789 -1.661581031841061 +542 789 .7661413506966662 +552 789 -1.138678090607994 +556 789 -1.1317357734560867 +560 789 -.7921051621563305 +567 789 -1.206722732343618 +577 789 .16949992335497402 +593 789 -1.0185000859935485 +595 789 .14090105778140977 +615 789 -.35422146623960044 +621 789 .3698954831437218 +630 789 -.19832186866039342 +651 789 .051332278398029035 +657 789 -.10238719117013498 +660 789 1.6386944702125936 +667 789 2.502767733687916 +684 789 -1.0219633205029939 +698 789 .2549759891937997 +708 789 -.4177848092174496 +709 789 1.2912266653557911 +710 789 -1.53425932304158 +719 789 -1.1529157099648943 +733 789 -.9714294450483254 +736 789 -1.246990800230089 +743 789 .6554817548863803 +757 789 -.6966073987360218 +759 789 .387047186466615 +765 789 .9360287969133118 +767 789 -.995195545144615 +775 789 -.8379040478500372 +779 789 3.064091282961497 +783 789 1.4583327395308294 +788 789 .2731253022792144 +792 789 1.017314461864785 +801 789 -.004582220574972672 +803 789 1.2224539095702678 +809 789 -.24020879239708018 +831 789 1.3363813627051069 +845 789 -1.2645730021681099 +850 789 .8635979391587878 +854 789 .6438917353909653 +863 789 -1.4143101380685377 +865 789 -.3250415577411733 +867 789 -.7275347224791842 +870 789 .2480047470064075 +872 789 .7238218945612336 +899 789 -.10327310037539884 +904 789 1.6477667833371452 +909 789 1.234918435955114 +918 789 -1.5306346054056579 +920 789 -.2847838038097087 +925 789 -.5203351204116441 +960 789 .7446716773341608 +970 789 1.4414130194482393 +973 789 -.21902128717763758 +981 789 -.5398505520134037 +992 789 1.7675078458989295 +1 790 -.34828239806942163 +5 790 -1.0667332171072545 +6 790 -.35338929338547365 +7 790 -.1580932508348871 +9 790 -1.0886796622448471 +13 790 .884111682626074 +23 790 -.25869765327204286 +24 790 1.1949150671103999 +25 790 -.8934910300400452 +31 790 .15455727770353372 +39 790 -.937680981771801 +40 790 .2982483087905018 +42 790 -.6813746550161711 +57 790 -.13961320662786997 +64 790 -.3055405959268283 +74 790 .4776162342822364 +79 790 -.9327891113714049 +93 790 -1.1896964290965295 +94 790 .9281356865140575 +98 790 .41145643907126894 +118 790 1.2566437771121923 +122 790 .5117270318409259 +134 790 -.663040541863025 +135 790 .029291585305338937 +143 790 -.10734626725341062 +144 790 -.3451275075179509 +148 790 1.2528619667403387 +158 790 -.39198033110070074 +161 790 1.0641564675548674 +164 790 .3609029268701078 +171 790 -.16744786492571212 +176 790 .7555741856572771 +190 790 .14228990821702597 +200 790 .3087078810286493 +206 790 -.757295196038779 +209 790 -.18247474676581238 +213 790 -.6642212830944036 +228 790 -.6031654573669856 +233 790 .7371252345054988 +245 790 -.9733098155536603 +248 790 .24934114067050345 +249 790 -.9161220990677731 +255 790 .8323991703059895 +263 790 .1700523123180465 +270 790 -1.435863654071022 +291 790 .8328588598986313 +296 790 -.9359161839815737 +324 790 .9619920904927913 +333 790 1.0122238225226416 +338 790 .4661022463159107 +346 790 1.210749621924183 +355 790 .16315369473977032 +356 790 .5817644713007502 +362 790 -.8510820466157629 +363 790 -1.7615911727662037 +366 790 -.7783894332794965 +369 790 .5811677018114547 +371 790 .8203577191108324 +407 790 -1.1976994612412049 +410 790 .4404240940123153 +414 790 .4364335026028842 +426 790 .620781573053333 +428 790 -.7452170715544086 +431 790 -.6729594692136645 +435 790 .8610191824869822 +439 790 .33514507060484966 +472 790 .7760325065546413 +474 790 -.27653756938774887 +488 790 .6663879167869923 +489 790 -.5872680476353959 +503 790 -1.3222574087620294 +507 790 -.15619676554370973 +520 790 .8268046378070307 +526 790 1.2635107201879034 +529 790 .4248522050480906 +531 790 -1.016243744955931 +532 790 .22828112256714717 +559 790 -1.2291431165667035 +584 790 .47204768338844116 +588 790 -.6565111790923844 +616 790 .23728778917672413 +618 790 -.930509536457238 +648 790 -.31443541697843524 +651 790 1.1365173759513225 +656 790 -.9702756782740363 +657 790 -.4158973734950427 +690 790 -1.3738307798929268 +701 790 -1.2661822639808367 +703 790 1.1609460267756118 +707 790 .5668240186475038 +725 790 .20805524437933487 +727 790 -.02608548776439816 +761 790 .39849298688768614 +771 790 -.2686182406395624 +786 790 -.4035650847491705 +800 790 -.6760018978156327 +830 790 -.5869766717009406 +843 790 .1631142513102882 +844 790 -1.0792566685108242 +862 790 .6447939462021804 +884 790 .16471306986298673 +892 790 .25316400009613527 +897 790 -1.4234161818888418 +924 790 .5429086793214907 +929 790 -.14924480135592108 +952 790 -.33458953135752645 +967 790 .27898566812090436 +968 790 -.4901034060209698 +970 790 -.15186799819618246 +979 790 -.7521229896913009 +980 790 -.9440300740364372 +981 790 1.0320430871417503 +982 790 -.03871073424344067 +6 791 .4218321533849817 +26 791 .3481956584677871 +29 791 -.23879421951427587 +49 791 .9442087642196034 +68 791 .01852843636037102 +71 791 .5047086102558467 +75 791 1.3111104301127043 +76 791 .1826046815787269 +95 791 1.9096901957833707 +100 791 -1.111231723192339 +109 791 .8754387193563302 +131 791 .4787011494980583 +136 791 1.6895505724725846 +146 791 .29378350371056294 +161 791 .06123648304122992 +168 791 2.6693386078928203 +170 791 .3108039990438744 +177 791 .2561965687478858 +233 791 -.21561281357312195 +242 791 .23595854988652662 +251 791 .13881348757011813 +259 791 .9226655380554465 +275 791 1.6498643051001458 +279 791 1.4460844845153822 +280 791 -.8764026340782625 +283 791 .3032171278635922 +301 791 .3756173248600916 +305 791 -.19202764731229208 +323 791 -.06804061634455233 +329 791 .7076787442196275 +333 791 -.5485651814432542 +344 791 -.4403982302062566 +357 791 -.08742725155881939 +368 791 .6348270660726366 +370 791 .08035739942539505 +377 791 .21285462909631286 +386 791 1.262028105399414 +398 791 -.48224744651273377 +404 791 -.5303509745447333 +413 791 -1.3156071735759594 +423 791 -.5649767852756123 +426 791 -.40384180825428223 +450 791 .6821647009712031 +455 791 1.03104309184478 +466 791 -1.3179968026853095 +482 791 -.955116956303063 +493 791 .8457645736103527 +525 791 .4452707645283346 +533 791 .34892579769061777 +536 791 -.6394276403657047 +537 791 -1.0784971475381608 +557 791 -1.0554318656259385 +569 791 1.7704957064598599 +571 791 -.40353878919831254 +573 791 .6266377684554418 +586 791 .11772542385701665 +595 791 -.9550893094211892 +613 791 .20530807486718877 +637 791 .42090525419858593 +638 791 -2.311511191995696 +650 791 .11761420336621282 +651 791 -1.3834780674155183 +659 791 .6233490180555752 +661 791 -2.036071315128894 +662 791 .3626162573770494 +678 791 .7099166815177617 +689 791 -.2428164821976205 +696 791 -1.4677490721254347 +699 791 -1.1660123228755006 +705 791 .8727743869192858 +737 791 -.9607800334232095 +750 791 .39344975150664696 +755 791 -.01407877142420393 +766 791 .7247907307879903 +771 791 .7897447749549136 +777 791 -1.1488216980142896 +784 791 -.44659739201202286 +816 791 .8103282345445539 +820 791 .7298966179518818 +824 791 -1.7187626519412076 +828 791 -1.2954978775719475 +835 791 -.321141039611718 +839 791 .3159374252050273 +850 791 -.09671024418376899 +857 791 .5534750434588406 +868 791 1.3622801096296933 +869 791 -2.5825647311167867 +879 791 -.7548426378014648 +880 791 .6182800723635925 +884 791 .7482736148875824 +888 791 .2617369065403621 +901 791 -.7146370079644367 +922 791 .7883203690559895 +928 791 1.9264519772007664 +932 791 -1.9596135589655992 +935 791 2.3364113774565958 +936 791 -1.262515842291518 +943 791 .11986457398020332 +951 791 -.9862278453262827 +953 791 .8491385375349524 +955 791 -.9672394210333831 +956 791 .5683130658252218 +995 791 .53214371519961 +10 792 .04159104914278787 +20 792 .10069227518792714 +32 792 .05252361665792088 +33 792 -1.2107194523566303 +37 792 -1.1153207499505031 +39 792 .1000268021247285 +55 792 -.7613788704767033 +57 792 .043201676624227914 +93 792 1.5138900431268458 +97 792 1.7719810248797307 +102 792 -.17267551647749232 +110 792 -2.373513181326091 +120 792 2.3311971820793307 +140 792 -1.720019662024042 +160 792 -1.3324909183908982 +179 792 .2929636960842388 +201 792 .13814494775655767 +208 792 .8502117519289262 +213 792 -.06977079388591567 +224 792 -.9450168507691097 +240 792 -2.9367921323056008 +242 792 -1.1937343874738484 +275 792 -.14840735593660262 +280 792 .20308790541112737 +290 792 .2260051707153025 +291 792 1.1802117970519634 +296 792 .4668274013211089 +299 792 -.35882632341760434 +300 792 -.053920338187837986 +313 792 .09646299794984758 +316 792 2.282133359157235 +343 792 -.9614203681832099 +352 792 -.7945620699014444 +355 792 -1.5732036874011506 +356 792 -.3415050271169577 +358 792 .1744832991748939 +365 792 1.3215880683585142 +371 792 -.41633875862378017 +380 792 -.45328796619241857 +389 792 .1626520065531173 +409 792 -1.24301849201698 +421 792 -1.3513400114692116 +423 792 -.7348020325075494 +430 792 -1.4437289634346695 +432 792 -.4501242194944124 +438 792 .3170314263346763 +447 792 .2841745734926568 +454 792 -.02598083366802475 +455 792 -1.1010095938119204 +477 792 -2.030468049000122 +481 792 .67607577996561 +485 792 -.11645565815865135 +502 792 -.17873909076424005 +520 792 .8125938717261793 +531 792 .6289210385986991 +534 792 .9567066102430197 +554 792 -.009197926355190733 +556 792 -.32282258722661317 +564 792 -2.9031320840325487 +577 792 -.711845343557879 +585 792 .1948313205172759 +586 792 .9656090685805343 +587 792 -.7202722036043784 +588 792 .22950284189063097 +615 792 .02349053661259695 +622 792 .30610083086621676 +626 792 -2.05705954356887 +628 792 -.9309025684570195 +665 792 -1.7604199151081787 +669 792 -.5491302841093786 +671 792 -.054732297236505745 +674 792 -2.302624195477642 +678 792 -.06770797123577638 +687 792 1.2328222119368235 +690 792 .8048251180085011 +705 792 .1731608582061589 +716 792 -.422216342243684 +722 792 -.10205608699692269 +729 792 -.1865140365895197 +734 792 1.7358195069896762 +748 792 .562495887411185 +765 792 -1.8202152139845256 +799 792 .517140194034226 +805 792 -.15136463926905175 +820 792 -.8628663578100491 +823 792 .544606551628229 +848 792 .33499367660872353 +857 792 1.3186747528164668 +868 792 .6372873815563667 +871 792 .8476654497631506 +873 792 -.43237621230269546 +875 792 .489420876607714 +886 792 -1.1357117918500481 +897 792 -.09527245475512439 +913 792 -1.1487852744429334 +914 792 -1.4840518955510298 +921 792 3.6603565187433076 +930 792 .24616318259467887 +940 792 -.7222166559315355 +943 792 .5399366733501237 +958 792 -.37928428975867207 +960 792 -.7641311912774553 +962 792 -.17847016613694824 +965 792 .12982716609676231 +974 792 .9812516660836469 +982 792 .29259505333162555 +999 792 .8781084362883542 +11 793 -.793296829576175 +21 793 .3674401491088086 +29 793 .036050587496227714 +32 793 -.857135198246372 +50 793 .48666487982448514 +60 793 -.1835910424371998 +67 793 -.9087248305691322 +68 793 -.87644565561255 +70 793 -.3430601463251975 +71 793 .5087859277373742 +87 793 1.082695550290204 +90 793 .11094819729583476 +96 793 -.014956757672090815 +112 793 1.7152379982498538 +114 793 -1.023744271280215 +156 793 -1.0009458793204564 +164 793 -.7755706603458045 +187 793 2.7651763695912472 +209 793 -.16885722365143224 +217 793 1.096260944035212 +222 793 .34029995666144414 +232 793 -.5338627505312229 +245 793 -.2558514019325337 +252 793 .401997015766405 +258 793 .6561310764867708 +260 793 -.884718056303571 +267 793 -1.6300257390533766 +283 793 .07437077001453615 +297 793 -.2946983236541945 +316 793 .03692789587511 +321 793 -.1072298736707315 +333 793 -.6653745640111979 +334 793 .33854475927207855 +343 793 -1.7197763734248048 +354 793 .522193068569217 +371 793 -.9395898920711279 +385 793 -1.1129546080065977 +399 793 .08576345216357162 +404 793 .8049477709879231 +425 793 .11606228658536258 +443 793 -.521228371673594 +449 793 -1.5776044183319793 +450 793 -.9134157910951962 +464 793 .1825759303749024 +468 793 -.41969919412387896 +470 793 .8118594531405643 +472 793 .07314677144256572 +473 793 .8136587390162893 +486 793 -.192863656958593 +491 793 -1.1488735732338704 +518 793 -.7094198298888906 +537 793 -.47010984535576095 +560 793 .03079637978533445 +567 793 .21418700923073372 +579 793 1.3263822576508921 +582 793 .11068413364068648 +583 793 .11531665531075289 +585 793 .7531161382360146 +588 793 .7320538256376088 +596 793 -.3658413703603379 +598 793 1.5941410838473782 +613 793 .4876363440921865 +628 793 -.5625981297889977 +651 793 .6327757066608679 +659 793 -.9817639696714295 +662 793 1.6017843517967796 +678 793 -1.031763935844633 +685 793 .07943899819529629 +700 793 1.005026696545709 +711 793 .62243718920331 +712 793 .20851922833267156 +729 793 -.4398485452700778 +733 793 .5806416322283128 +734 793 -1.4410493086896587 +742 793 .005623576621130926 +745 793 .9936787823986661 +754 793 .9942630569188098 +760 793 1.6552845252881483 +761 793 -.4197149628761386 +763 793 -.8347806852871356 +768 793 -.04742373458716945 +770 793 .3452981363663038 +771 793 1.4963180701488086 +791 793 .11555848907659895 +803 793 -.34090349312298185 +810 793 -.044178732271837315 +815 793 -.04634205294004659 +829 793 .9541648287777655 +852 793 -.8236292002427598 +853 793 .11057439633364245 +857 793 .027316103648418397 +865 793 -.2476539772310307 +876 793 .6067501771598961 +908 793 -.27914471385873496 +912 793 -.29565286991918466 +922 793 1.1536825562327275 +932 793 -.9254421109371636 +933 793 .17715339613685094 +944 793 .27810887444825627 +948 793 1.213247180165005 +987 793 2.4027806111825507 +992 793 -.29739204394901353 +1000 793 .6653131070287555 +7 794 .08715095170952007 +9 794 .0716938505492029 +18 794 .7426776107757064 +20 794 .8474000934713981 +26 794 .0054091267300274345 +27 794 -2.091783658821985 +31 794 -.8549852853790503 +42 794 -1.037939039251292 +66 794 .3264983888714108 +77 794 -.4444566693856254 +84 794 -.09965125245118123 +90 794 -.48586192218386487 +91 794 -1.1316389840182466 +92 794 -.2255834053078069 +95 794 -.7335592835798408 +96 794 .5043427612296193 +100 794 .27770169762685193 +113 794 -.3087022093819915 +116 794 -.675574586226519 +117 794 -.06548474010837821 +148 794 1.3209187540008385 +150 794 .21985361885274485 +162 794 -1.1671159418053483 +164 794 -.14345162269409284 +171 794 -.09506582277992293 +197 794 -1.3482519584302803 +202 794 -.2939394822404806 +235 794 -1.1605438737489862 +241 794 .7738576842482406 +249 794 .338025751515815 +263 794 -1.8403635208875795 +267 794 .40046694490498536 +281 794 -.9801704335782531 +293 794 1.3978002304837667 +294 794 .6486671907258055 +302 794 .5904107215702356 +304 794 -.33881218400168833 +307 794 -1.3735593203923686 +328 794 .8365873968354366 +333 794 -1.0876805679175998 +338 794 1.9327546855885376 +340 794 -1.906033232437146 +341 794 -.44357139613448116 +356 794 .7282448862460574 +362 794 -.355214844543545 +364 794 .2448051589915032 +365 794 -1.75038551241217 +373 794 .4665531532742094 +392 794 1.3743685951292355 +398 794 .22619352545309257 +406 794 .8292463030960432 +415 794 -.4591170527389797 +437 794 -.262688750323755 +439 794 -.17099713997146782 +443 794 -1.8649177684097842 +447 794 .6808553663216808 +463 794 .15007251143578923 +472 794 -.7884467774241065 +480 794 -1.0777283813662806 +493 794 -.8192628800917624 +497 794 .694479708413453 +503 794 .0615802618692656 +507 794 -1.2273557612694104 +517 794 -.9130211931272637 +518 794 .5618040381932063 +525 794 -.5354638010552725 +530 794 .826936002392191 +545 794 -.0921991560189124 +546 794 .06726976699687817 +581 794 -.41856600661794724 +583 794 -.5993557093330586 +588 794 -.1667890219235631 +591 794 -.7414607931014927 +612 794 .3539349065156688 +617 794 -1.1328802109658556 +634 794 1.981214005723819 +643 794 -.7407634828876428 +648 794 -1.6038366555756824 +656 794 -1.219507116480835 +665 794 2.742674579472348 +668 794 1.1288053188573688 +688 794 .4117400331268876 +702 794 1.5732264314554665 +709 794 .43778882914544603 +711 794 -1.6738150202440818 +720 794 .28831616534308435 +732 794 -.21193904807471795 +739 794 -.22841194014190086 +741 794 -.09736038735009817 +746 794 -.2079600539174956 +757 794 -.2536698890218514 +759 794 -.9243859881217068 +776 794 -.9190414698220795 +781 794 -1.3530800534109664 +783 794 .12603831656447803 +784 794 1.1369578500953264 +793 794 -.6779247691998413 +795 794 -.9527835005305487 +801 794 .7727275822657095 +803 794 .32842160334757003 +811 794 1.2338777919919326 +823 794 1.0614999207944216 +836 794 .38835949909875955 +853 794 .6076503159150096 +887 794 1.7787491159684141 +925 794 -.5551542534255107 +937 794 -.06369050768649376 +952 794 1.3060661158449536 +960 794 -.20586957309140594 +964 794 .28211000294077393 +971 794 -1.8392994251692225 +988 794 .6597720079095628 +6 795 -.026360797644775585 +26 795 .6962920317822251 +44 795 -.002233306500556975 +53 795 1.4059825392428025 +55 795 .3665435810791202 +70 795 .05677902450954912 +75 795 .6767529498195275 +86 795 -1.0121227184105965 +94 795 1.2837164256426665 +95 795 -.5234807723430267 +96 795 -.2790823820821227 +102 795 -.3185099660383236 +103 795 -.5894015558637996 +106 795 -.38744043535408035 +110 795 1.4172806742078992 +125 795 -1.082626570217802 +151 795 .3339125259292113 +155 795 -.41144797631165086 +163 795 -1.0022611634610763 +179 795 -.08612697394386644 +180 795 .3083761150431876 +185 795 -.31401696660484213 +186 795 -.19240221554869985 +188 795 -1.5233591775459858 +194 795 -1.2584982244326985 +214 795 .9674419699340724 +215 795 -.7673094948074424 +228 795 -.7622817903120527 +232 795 -.8573765615910319 +235 795 -.0770122641346356 +243 795 -.6632363843604236 +254 795 -.18319299141004913 +256 795 -.6955411605079255 +278 795 .6335557149490637 +289 795 -.73217631762305 +300 795 -.26950728741101687 +363 795 .5679105508210298 +370 795 .2917665998580808 +373 795 -1.5825525783129926 +381 795 -.5159675411370501 +386 795 .4213021034258778 +398 795 .40627427353850876 +401 795 1.8773574305156742 +410 795 .8336679357180977 +428 795 -.6328520809285167 +433 795 -.3462039051106763 +440 795 -1.073284669814954 +455 795 .7187731613777527 +457 795 -1.1118648043286765 +462 795 -.9934241300412536 +486 795 .00473783570400739 +519 795 -.24787613782357606 +539 795 -.6938663542217629 +548 795 1.5838509141968204 +551 795 -1.7114524805772278 +606 795 .05147529337469356 +607 795 .5206575863267606 +618 795 -2.446848084417583 +630 795 -.6974668749791154 +650 795 .6932562201601187 +685 795 -.26305099431466106 +693 795 .6678032973463769 +709 795 .30071326846867896 +711 795 -.1333241635653039 +712 795 -.7046605135817483 +714 795 1.9870406530045526 +743 795 -.9702336854008179 +746 795 .25657389677388903 +749 795 .4238454524773252 +767 795 1.2010347559261736 +768 795 -.47879165216999836 +769 795 -1.013194363691038 +782 795 .7400937498984403 +794 795 .24054909665092533 +812 795 1.1013344689520383 +832 795 .7933035595043438 +837 795 -1.6816226251774768 +849 795 -.40692540282738154 +853 795 .20511055224123353 +864 795 .8111475333033298 +877 795 -1.462099785258509 +896 795 .4044540666755571 +928 795 -.1318353239395889 +955 795 1.4016843830078587 +967 795 -.21334383621844058 +976 795 1.238442356844004 +978 795 -.6914549701823199 +986 795 1.315868872724166 +989 795 -.7670903870699083 +990 795 -1.0220997514759484 +17 796 .6464313270820942 +35 796 .4007709391271784 +46 796 .09001928942027425 +64 796 .3044944046440937 +74 796 -.304216439827103 +118 796 -.3014430425990394 +121 796 -.4845962920248418 +140 796 1.0201933364758458 +144 796 -.4143591244281949 +157 796 .8956146913898947 +167 796 -.569631504468871 +170 796 .33306232179471046 +196 796 .19241325439682455 +205 796 -.6125096824468387 +215 796 -.5652337681254177 +226 796 -.007975081875305545 +237 796 1.0475691980866824 +240 796 .49081026226456864 +259 796 -.5474676849019217 +261 796 .8054554442665376 +270 796 -.7051114889399386 +277 796 -.6435907614248809 +278 796 -.39657926721927905 +281 796 -.140893027769407 +287 796 -.28517064973775363 +290 796 .03614652079474251 +299 796 -.38103085476116266 +305 796 .39015126694510444 +311 796 .40221995501425317 +336 796 -.33715327071428697 +349 796 .6275850304099163 +355 796 .13823838764807939 +362 796 .1117780378213332 +378 796 -.1071963603085965 +399 796 -.20804105975825615 +412 796 .6884792031493191 +414 796 .09310119768208858 +434 796 -.46248311940613 +437 796 .23554128117631767 +445 796 .418658628870627 +454 796 -.5081915070910726 +470 796 -.13350324024912724 +471 796 .8582325756410993 +495 796 .4775570612243526 +517 796 -.6006318501021781 +519 796 -.7975585189333692 +522 796 .3242628645870831 +525 796 -.9410949060139159 +529 796 -.1917580401650678 +530 796 .706121209213304 +551 796 -.8055547609804687 +555 796 -.6489270387411457 +560 796 -.6259492134421013 +561 796 -.1339133951579501 +577 796 .24502999575549575 +612 796 1.189208141760946 +613 796 -.9334263602691178 +617 796 .6694488301070805 +618 796 .03512909374527839 +642 796 -.533143554126826 +652 796 .06658250015112996 +659 796 -.34022035880798496 +667 796 1.4913852212120178 +668 796 -.3858152422219273 +669 796 -.5319043998838593 +682 796 -.3130760437933239 +685 796 .8864763770134757 +721 796 -.039834804836137286 +724 796 .3612682505763917 +727 796 .7189193439137411 +743 796 .688208987490331 +747 796 .7310232214297225 +776 796 .24867553418203425 +785 796 -.6084908320163199 +788 796 -.2893306829902589 +798 796 -.47406741032463817 +823 796 .005039907740237874 +841 796 .3288630544170138 +853 796 -.5058409011084639 +876 796 -.6780867794850407 +877 796 -.052359928500507746 +890 796 -.15879408085000885 +903 796 .8496896021716056 +911 796 -.4535868191886553 +936 796 -.3226457575034032 +939 796 .08134385162403596 +944 796 .058812661924831505 +977 796 -.2532003271915785 +980 796 -1.043237179712996 +982 796 -.24167598155756365 +27 797 2.4625581392614686 +35 797 -1.6744115252379872 +42 797 .593992326429556 +54 797 -.3061819855572853 +61 797 .6418075111668707 +64 797 .1492735417136735 +71 797 .1878462100639775 +74 797 -1.7371336181675732 +79 797 .7281673872366555 +101 797 -3.320305498211913 +105 797 .31841755812499806 +109 797 .6006716010399834 +110 797 -1.1285811046932859 +111 797 .8007603085067017 +134 797 -.2629080590940802 +139 797 .2765260768725216 +149 797 -.8356603136078261 +151 797 .7075880999924942 +170 797 -.512206831430795 +175 797 -1.9073917152552964 +176 797 -.6563345771119891 +210 797 -.0036203407910384983 +223 797 -.1589452586390611 +225 797 1.8655806466495841 +227 797 -2.217791340629401 +246 797 -.8508630431824697 +260 797 -.3668628026075768 +261 797 -.9643027803901367 +264 797 -.2651804146662732 +273 797 .38492049652945093 +275 797 1.4158346652978258 +283 797 .4764932369996737 +284 797 -1.6893876196983246 +317 797 2.2725161006019037 +325 797 .13038788292091355 +332 797 -.7928105347179655 +337 797 -.30632142072852775 +343 797 -1.4242883955274905 +345 797 .2894139595537603 +349 797 2.954320000815075 +353 797 .06471374117898769 +372 797 -1.3296389162075253 +374 797 .09379343049821093 +392 797 1.4627863673022183 +436 797 1.2084795825018848 +445 797 .34906082296279384 +446 797 .8082231094425534 +456 797 .8148050759225037 +463 797 .23156740220607552 +468 797 .04077029491255547 +473 797 -.7612473009248646 +479 797 -1.2746140704518032 +497 797 -1.7615985663654787 +522 797 .20368494853002514 +527 797 -.9360387271360674 +547 797 .221494196187751 +556 797 .3932321276240858 +562 797 1.240840080038513 +568 797 .0856105009758209 +601 797 1.3788282388274373 +602 797 -1.7568162846143058 +607 797 .5710882811208434 +608 797 .2508913354721911 +627 797 1.404225110162609 +629 797 -1.1314588574341689 +630 797 .6678215005283261 +637 797 .24590092906173594 +646 797 -2.444689314335575 +651 797 1.4885528689665932 +658 797 .6588304797842888 +694 797 .6760868412705535 +695 797 .43163901542035255 +698 797 -.8100015160524924 +727 797 .1257866745854707 +746 797 .20331533551341419 +748 797 -.8182443592777912 +754 797 1.3427668445206415 +758 797 .46006676088378806 +769 797 .20548984555802463 +806 797 1.2246417681473634 +814 797 -.8711339120844452 +836 797 .031785640793686246 +838 797 2.3001293449754785 +839 797 .9445046146179205 +861 797 2.5896348706372994 +864 797 -1.0336257838520044 +866 797 -.3549959094832146 +874 797 -3.423454024942616 +890 797 .20207415495846828 +901 797 -.7242379429467666 +906 797 -.45114883601256095 +907 797 -1.48760973329274 +947 797 -1.8518549864296368 +949 797 .6270445469837866 +955 797 -.12989998100728928 +6 798 .10302534531960958 +12 798 .5535147309253385 +43 798 1.0515472489303321 +50 798 -.18809172580342268 +72 798 .7799011974898808 +81 798 -.18489021846652454 +82 798 .39542848746929316 +88 798 .7633170802779216 +91 798 .37567225197641807 +101 798 -.3099486469838836 +104 798 -.03357240022130904 +119 798 .2587927880731615 +123 798 -.02519042717153175 +135 798 .06644462053563024 +136 798 -.46222658827156043 +149 798 -.919749825557497 +155 798 -.2618895346761071 +158 798 .80977632215397 +161 798 -.40364096374051406 +169 798 .6964396091318527 +171 798 -1.5701951858211909 +189 798 -.15354506032877416 +192 798 -.11745838273974478 +198 798 .22702533422818674 +203 798 -.20921649089819327 +205 798 .7767400621208636 +206 798 .11032589860453716 +215 798 .29457612975363945 +218 798 -.4314404392823593 +230 798 -.21128087774674723 +269 798 .9303742673624875 +278 798 .27749447429532365 +280 798 .939353209544979 +281 798 1.4833328016382887 +291 798 .6965368166245769 +325 798 .8176807830003499 +343 798 -.4174229890745323 +345 798 -.24990609427085297 +356 798 -.05990128694180604 +360 798 .9911036139588691 +363 798 -.5381718658528956 +382 798 -.11291060749399191 +388 798 .07771502598465396 +393 798 -.07277974717145998 +395 798 -.16547388809633976 +405 798 .19308829164981517 +420 798 -1.106983962124361 +435 798 .8741975162221817 +438 798 .039051545816482076 +443 798 .421170030701056 +453 798 .4688412281772125 +458 798 -1.0138787643935983 +463 798 -.6261751460315539 +470 798 .10204290584365425 +496 798 .05179177890409725 +501 798 .12105720930458597 +552 798 .12057580849546232 +554 798 -.07761111844691237 +567 798 -.3224027402020401 +575 798 .7756341260916761 +578 798 -.4467818580415562 +599 798 -.9185227584969192 +600 798 1.0209128484495926 +607 798 .49827431018650153 +610 798 -1.0200810644646126 +626 798 -.30517737954609314 +640 798 .14760165552162677 +654 798 .28528262682097405 +658 798 .4334206287767901 +664 798 .16324636072889495 +675 798 .7798798815919845 +680 798 .22711108032800847 +694 798 -.4931246295815761 +702 798 -.27141874131775134 +703 798 -.03654554866675705 +709 798 .38070554651121474 +719 798 .31399754468981766 +722 798 -.005358814043880278 +731 798 -.45844109966605784 +736 798 .28466308320775124 +740 798 .7180981769679091 +758 798 -.9528150098179688 +759 798 .1963450846949277 +776 798 -.890878963056108 +786 798 -.7657640350667788 +792 798 -.39270691303565397 +794 798 .3806381703991749 +797 798 .5660091212945508 +806 798 .04778054143071937 +808 798 -.48516685128150133 +817 798 .816853685295483 +831 798 -.5926470682826198 +841 798 -.9687330360022909 +852 798 .29290625054455677 +853 798 .04802364584639303 +876 798 .3966089980320434 +917 798 .31935198921122626 +919 798 -1.0319698797532872 +935 798 -.20951169574956852 +939 798 .05378207732946387 +947 798 .7899406050672543 +962 798 .42986671291440337 +978 798 .04035476834780463 +981 798 .457513176792546 +984 798 .5412006780675611 +2 799 -1.2326686799797277 +12 799 -.5035897124926773 +19 799 .6272443882045721 +26 799 -.9546584130345971 +28 799 -.33134786895349244 +34 799 .4231896905309761 +48 799 .897989449270501 +60 799 .7944203028093333 +67 799 .4082998929012032 +72 799 .47832311619342455 +83 799 -.6905919178931482 +102 799 -.5963550289730667 +112 799 .5957121181521953 +121 799 .4130333097619214 +124 799 -.4594918854978453 +131 799 -.4226758760013963 +136 799 -.0796106957926685 +154 799 -.29130140214922157 +163 799 -.4620784187540275 +166 799 .28024181832827266 +184 799 -.9788929488334689 +187 799 -.33137367778851645 +195 799 -.6234719290313837 +205 799 -.08800152422033591 +209 799 .27582229612329223 +233 799 .9160697998715923 +251 799 -.4745985110925665 +264 799 .33480859214484904 +268 799 -1.4339831871741375 +274 799 .5045366103492039 +276 799 .5419545184022357 +282 799 -.08719142679937444 +284 799 .19042252475965088 +289 799 .05787961086032841 +298 799 -.7428772960921335 +299 799 -.7530622910703998 +308 799 .22092533561765476 +325 799 -.4982541009022955 +339 799 -.18473639941380732 +353 799 -.17046798863009563 +362 799 -.14539237083496268 +374 799 .682445128610714 +387 799 .5494651259654048 +391 799 .9074618422539069 +400 799 -.12957507623802714 +401 799 .9557082205060348 +417 799 -.8918855621822597 +431 799 -.012076211150466296 +437 799 -.4331127031825716 +443 799 -.9286378160778274 +446 799 .4366698522780551 +456 799 -.7788979539728268 +458 799 -.051906932034620074 +460 799 .6932064269044156 +471 799 -.0830089743382518 +476 799 -.38227007501845367 +481 799 .7876031698630854 +507 799 -.5907069994839158 +518 799 .12323109519739833 +545 799 .5500740835808898 +555 799 .8168571111707825 +561 799 -1.0136066488689934 +565 799 -.7003936894173625 +572 799 -.6359743952640519 +573 799 1.1151395592886901 +577 799 -.5214973736850035 +580 799 .6305372823031146 +582 799 .009610778440185885 +583 799 -.44499477393286946 +597 799 .06055287689860728 +600 799 -.6223715760417506 +614 799 -.620238231943602 +632 799 -.04038315883880583 +634 799 .7473796681205125 +635 799 .16157378299139297 +636 799 .08528560636256122 +637 799 -.580628859065434 +639 799 .4074745072253903 +641 799 .21677727271496222 +650 799 .05040821167169206 +669 799 -.908178883492483 +696 799 .49154468341294455 +698 799 -.06511783437847982 +699 799 .1434443328146196 +700 799 -.6437334531865736 +709 799 .19283653699033854 +711 799 -.33703272218154484 +715 799 .4037229160472149 +718 799 -.0874884279027315 +720 799 .03856156486155287 +723 799 -.3989448392915338 +754 799 -.3320641397296414 +755 799 -.3238762882243253 +760 799 -.0017145070624302247 +768 799 -.1952579295845434 +779 799 1.0528121135082136 +781 799 -.22780886110726895 +783 799 .47328773222857684 +786 799 .33934488901515897 +792 799 1.161419502470131 +800 799 .3574786432443718 +805 799 1.4852592582942825 +812 799 .34158670139920705 +820 799 -.24631910063316143 +824 799 .5096480831101282 +826 799 -.40954172129142735 +831 799 -.4186557169974998 +832 799 .8167695573261017 +840 799 1.0024849523596115 +842 799 .012144819092073295 +844 799 1.0392914437884697 +855 799 -.6381209174153076 +863 799 .07270940511754814 +871 799 .21170644492043336 +897 799 -1.6675806580131791 +902 799 .4783905406193324 +909 799 .6191217448487314 +910 799 -1.195182169257351 +922 799 .34710023171941523 +924 799 -.30591771198616025 +927 799 -.8915568497898695 +928 799 .09749863792555655 +944 799 .8602772537141948 +948 799 -.11941900392398647 +957 799 -.04576332159614163 +966 799 -.09438782298387915 +972 799 .23608564471393365 +974 799 .6247230598176431 +975 799 -.008564591161826562 +979 799 -.16174558618346846 +982 799 -.42151902678659403 +987 799 .669202134250846 +992 799 .8819729201973705 +2 800 -1.6744808527388317 +6 800 -.27026052371752535 +18 800 1.1538287509256944 +20 800 .42515371734887986 +39 800 .010288309104923746 +41 800 -.3979909512482767 +44 800 -.1755340904967797 +46 800 .9102051482175101 +53 800 .09457585587740214 +66 800 .1584926598456979 +70 800 .49796287385956606 +77 800 .3805996355424854 +99 800 .03345777719787507 +101 800 -1.416888176238297 +104 800 -.38062477022252117 +108 800 -.08478454951816568 +115 800 .5020736404124027 +152 800 1.4619189091123357 +156 800 -.004370748323298479 +172 800 -.17236883515371992 +180 800 .22231502708871198 +192 800 -.14404907186539564 +198 800 -.27133219043420825 +205 800 -1.0868207375781893 +211 800 .5962382525387586 +221 800 .5116425551935537 +230 800 .9355194141801505 +245 800 1.9497183820760258 +248 800 .29474219128388457 +260 800 -.382825471578064 +261 800 .48084920178608254 +262 800 -.37456298698898527 +268 800 -1.0541377812832804 +286 800 -1.068076798581897 +298 800 -1.2020088684790753 +301 800 .12818387058565 +341 800 -.7576377939557621 +345 800 1.424189289173651 +370 800 -.7673080968902796 +378 800 .012499632245858011 +405 800 .9556833271806782 +421 800 .9672640285597636 +436 800 -.43575263086350274 +451 800 .042437730858146526 +466 800 .9500241379944836 +481 800 -1.1819326413155604 +495 800 -.11262740306095141 +514 800 -.17396781136355433 +515 800 -.0951893219775018 +526 800 -1.0296320779647994 +542 800 -.10566754953321782 +546 800 -.20195068046494274 +552 800 .31235544332575593 +560 800 -.9396495515773193 +571 800 1.8593147230068952 +583 800 .5544056137065889 +592 800 .0512527252813021 +594 800 .8600056662215182 +597 800 -.49711335220459857 +604 800 .3954645990810422 +606 800 -.7124964186154653 +618 800 -1.5495049531013838 +623 800 .6986570415629048 +635 800 -.5582752283383734 +669 800 .24620489690127256 +670 800 -1.458209929436435 +679 800 -.10649864263300841 +693 800 .11078685314610588 +708 800 .09967309841240482 +723 800 -2.0129793569824326 +725 800 .45936166543562507 +730 800 -.15347008478553925 +732 800 .5784027273070531 +739 800 .469932412203239 +750 800 1.659875520915487 +751 800 -.17640473017931182 +753 800 .7461769638691079 +764 800 .0398828517492541 +774 800 .6293718328139242 +781 800 -.7129719453742788 +818 800 .15582375906946638 +822 800 -.9566440979190534 +824 800 -.0760744711068372 +829 800 .5264625281553538 +831 800 -1.6420581400420011 +868 800 -1.1502417138524013 +871 800 1.0771607953552045 +881 800 .7258876396934925 +885 800 -.5625970664992878 +892 800 .8186206276451444 +899 800 .6751301503983047 +914 800 -.2655285118150136 +917 800 .6580873440177792 +920 800 -.6682665278984514 +927 800 -.9400101763235785 +952 800 .8648881132878778 +958 800 -.11533236297190484 +979 800 -.6624896695095341 +997 800 .09953029791233732 +13 801 -.011868162543034957 +15 801 -.2443106613753085 +38 801 -.7479814851825839 +52 801 .2517880611600836 +69 801 -.11560192229368794 +74 801 -2.834177330994086 +76 801 -.8389391719292894 +104 801 1.1121542661351773 +109 801 .46799969421565135 +112 801 -.8468668907033747 +117 801 -.7365405731581861 +135 801 .33308157850815 +143 801 1.2669119743755126 +146 801 1.1586787160537415 +181 801 -.8212075880485779 +201 801 .42428988258847816 +208 801 -.472978283256119 +214 801 1.7816639723657934 +223 801 .30151975886092286 +228 801 .528966523867071 +241 801 -1.2511948302649665 +254 801 .8238442448862546 +266 801 -.4173388479956367 +268 801 -.23294805661453669 +294 801 -.5581947786359422 +303 801 .9135215465428675 +306 801 1.7574425580395263 +312 801 -.8015958319379823 +317 801 -1.188929923223849 +339 801 -2.649953474504437 +360 801 -1.0763639728370056 +367 801 -.08480892141238344 +390 801 1.1115544730520153 +394 801 -.8703850723005216 +398 801 1.392167770025854 +411 801 .6814907879948806 +461 801 -1.6032480985535618 +470 801 -1.679977306877265 +479 801 -.1985309049402568 +487 801 -.8325261229837119 +500 801 -.7951086516344251 +501 801 -.255564428823444 +552 801 -1.6999398111066635 +559 801 1.8289431279268684 +562 801 -.31857304253152247 +563 801 -.6249472949900465 +566 801 -.6434135000677884 +578 801 1.0893262553559064 +583 801 .05862364691352469 +587 801 .7225667622549371 +599 801 -.8237456288517477 +600 801 -1.8002988040441728 +605 801 1.0281066815312734 +631 801 1.6690797602918237 +646 801 -.021479279996575507 +653 801 1.2186145493449814 +654 801 1.87529295664207 +655 801 .05885340571308356 +667 801 1.6840704126717434 +682 801 .09024773324001735 +694 801 -.7494773915117663 +703 801 -.5846450555613474 +707 801 -.4025928349443444 +712 801 .47530307401868044 +715 801 -1.105501745492204 +727 801 .07435759355745224 +728 801 -.8807639014739075 +742 801 .04964186102556985 +759 801 .44147720318390316 +760 801 .9072851734510323 +786 801 1.192145711676527 +788 801 1.4871358688200769 +791 801 -.158085129609569 +792 801 .3283300731013266 +810 801 -1.1090653106457775 +815 801 -.8351314940153601 +823 801 -1.0305807123052104 +825 801 -.6548570735905976 +830 801 -1.0564946501901695 +865 801 .3128696884943684 +868 801 1.0979856669210908 +882 801 1.7234555359980768 +883 801 -1.8498167495567437 +886 801 .9727497906201021 +887 801 -1.1858948248040282 +904 801 .7888601891831667 +921 801 -1.814391425043941 +937 801 .0767589981614141 +955 801 -.21169371560283862 +960 801 1.7955090690014692 +972 801 -.21712005056221623 +984 801 -1.0845498465364025 +986 801 1.3365409498100158 +990 801 -.2004352823492894 +993 801 -.7568307223388018 +2 802 -1.0613233419239367 +12 802 .21845896346125476 +28 802 -1.0691602751715155 +29 802 .6852144370736793 +30 802 -.9532405111468257 +35 802 .7726806635316689 +50 802 -.03425587528552437 +52 802 -3.071033216067717 +55 802 -.6491650481555282 +84 802 -2.035616102508016 +105 802 1.263041799806747 +122 802 .2947380141653865 +123 802 1.0607507762642117 +125 802 -3.0883707278306853 +138 802 -1.9782253008111808 +155 802 -.3059196598272709 +164 802 1.3621025863158736 +166 802 .00285526971602508 +170 802 .39915011250030813 +182 802 -.9097869946023405 +199 802 -.891787643407272 +232 802 -.5382440430718083 +235 802 .07067897063035658 +246 802 .837364717937246 +248 802 .17178215962321047 +276 802 -1.9360672448612248 +286 802 -.5212011415738993 +288 802 .6070024315994439 +293 802 .6022003062832805 +309 802 .13838349884062162 +310 802 -1.6124732227020515 +311 802 -.6871777791315438 +318 802 1.091124666938936 +323 802 .4266605989861337 +328 802 .12086494149301817 +333 802 .9095201254054386 +336 802 1.9684409973362724 +355 802 -.2895411121726967 +371 802 -1.6298046807686732 +391 802 .5965999120024892 +403 802 -.4643663433037494 +405 802 1.1816740539987733 +406 802 .12152017127971164 +413 802 .14600884937026015 +424 802 -.2398979313154613 +438 802 .13935342794730232 +442 802 1.4062985353965687 +444 802 2.002009535068548 +445 802 .44041791066021374 +451 802 -.27368926391820264 +456 802 -2.340083240670951 +472 802 -.9314212781161495 +475 802 -.9063901743621078 +479 802 1.1687111758811044 +480 802 .058256889684473734 +483 802 -.1272119627453135 +488 802 -.5328422921029964 +494 802 3.259971177071319 +512 802 -1.0116030390658535 +534 802 -.9619845720496715 +544 802 -1.692011749301167 +552 802 .021174729732244373 +581 802 -.7516742067624196 +605 802 2.0738516358592034 +620 802 -.7243802963526464 +623 802 -1.4254098001930502 +632 802 .7124734721880899 +635 802 -.855853607835252 +651 802 -3.0948443222330053 +654 802 -1.0077608102840698 +657 802 -1.2980733253373613 +666 802 -1.1293565190437942 +695 802 .44927561453351367 +710 802 -1.1397433305075069 +723 802 -.03490078270377986 +724 802 .5619525344209596 +746 802 -.3783145160520229 +750 802 -.5725571373580945 +758 802 1.6307443304370839 +765 802 .01787963961784239 +769 802 -.4216841030071627 +774 802 .09401524447523936 +781 802 -.6189729279125733 +800 802 .6978168193346603 +803 802 3.1374881723345007 +820 802 .7930889514172899 +821 802 1.0636116989044178 +830 802 -.46178059106463126 +855 802 1.0821959310003555 +874 802 2.74974540917634 +879 802 .3805524480100039 +893 802 .47960806932621125 +895 802 -.43626191935618885 +900 802 1.0382599929109815 +906 802 1.9291306236261885 +915 802 .7297697536411123 +929 802 1.9360298088864039 +940 802 1.1388653057827058 +976 802 -.3287895924884096 +995 802 -1.4041615863755865 +996 802 .04233913062434072 +1 803 .34571644501174376 +17 803 .03958733853510879 +31 803 -2.0101127772730045 +32 803 1.057616360100344 +40 803 1.4580373757424292 +49 803 1.7565440236517433 +51 803 .9233005021233021 +65 803 .4416384483405656 +76 803 -1.1777237573026453 +79 803 -1.8932105166425615 +82 803 -1.1551188124300826 +83 803 .1530629866206878 +100 803 -.4216354056339692 +107 803 .6999576293201129 +119 803 1.1721041798065057 +124 803 -.3067297859995228 +211 803 .7707737313648123 +215 803 .9037547199551708 +228 803 .5785215644876297 +234 803 -1.0868482312119012 +238 803 1.455654582021973 +257 803 -.031586102843416175 +258 803 -.6768127175864551 +275 803 -1.4149911303380005 +288 803 .1022125420573694 +296 803 -.0737300815801035 +316 803 .2795832947775798 +323 803 -1.6188063708165814 +333 803 -.9160949247440431 +338 803 .5168549036451454 +344 803 -.5797356114997668 +347 803 .40394239510283525 +354 803 .3380835161848721 +372 803 -1.4662802185198436 +385 803 -.2429821437680574 +386 803 .8500853309497012 +390 803 -.17805089933422388 +398 803 .3215625964055701 +416 803 1.0950500247486028 +431 803 .4491094101438048 +440 803 -1.481282856698301 +446 803 1.320777629411492 +486 803 -.49802762526103384 +509 803 .13379392269722223 +512 803 .4381598521461465 +513 803 1.7749389976660994 +527 803 -1.4079491676505804 +531 803 .8683843099817986 +537 803 -.7502947998109798 +542 803 .6168566297375195 +543 803 .6839551438543554 +544 803 .02288036601918335 +546 803 -1.0106142215894827 +549 803 -.32568703765586343 +555 803 1.0246821171812424 +556 803 -1.0473822034762537 +565 803 -.5620211289974648 +592 803 .9373472311609417 +609 803 -1.2285615928939466 +629 803 .5452010710476596 +643 803 -.4542237241968534 +663 803 .07869179688208566 +664 803 .2769794145951047 +669 803 -.09110275981742098 +680 803 -1.0222522854168141 +686 803 -.7056954086977678 +704 803 .875757868768075 +706 803 .2839018654517275 +717 803 .13186251405727847 +719 803 -.12031544497290139 +725 803 -.9092387943605345 +738 803 .03406924325132235 +741 803 -.9314448299668064 +758 803 -.28587676773344206 +766 803 -.26250758590085277 +808 803 -.17007861383683553 +819 803 .017664852436415183 +820 803 .43427129858973984 +842 803 -.6406439052337941 +850 803 -.49097133880024574 +851 803 -1.8575336180850073 +857 803 .9509029264107518 +885 803 -1.022000651828331 +903 803 -.3962940247601783 +914 803 -.5637603143701525 +960 803 -.2270539304785956 +970 803 .48452693825317117 +979 803 -.11473181196913576 +986 803 .07010314802586932 +993 803 .5468767032434116 +994 803 .29145993384066504 +1 804 -.07192715168715738 +7 804 -.1684104162541014 +14 804 .8794621846881265 +15 804 -.08995030438367312 +62 804 .5851912881827227 +72 804 .9825976134629936 +80 804 1.7456203033788518 +86 804 .7025713061404838 +90 804 .283940484063156 +94 804 1.1477410148653409 +100 804 -.868753161075876 +134 804 .3132830303299922 +136 804 -1.4203259148841134 +155 804 .7044581841955925 +159 804 -.9955099725526387 +177 804 .1391438309361667 +179 804 .535260478239981 +213 804 -.47681377546896553 +234 804 -.8041551132114125 +241 804 .04922556830557902 +250 804 -.5541777362554962 +252 804 -1.2156827149704832 +260 804 .5706162775304788 +275 804 -2.052496601809668 +281 804 -1.357306319595107 +284 804 .9009177689572215 +300 804 .39181079232687965 +306 804 -.16018663019023857 +308 804 1.1077148927145186 +314 804 -1.5873711587688377 +323 804 1.2588421090533868 +326 804 .2131565990811899 +343 804 1.3320513242116174 +346 804 .9914746847056352 +357 804 -.9768764468495883 +405 804 .6955555921911559 +409 804 -1.2263408694936793 +423 804 .39147456263631286 +439 804 -.9295524643676042 +459 804 .15423657484396827 +478 804 -1.5512824662911462 +480 804 .019818480951995898 +488 804 .15239504021086991 +489 804 -.8231670740257887 +493 804 -.3581902138544575 +495 804 -.8933814907817919 +504 804 .34717376142704937 +516 804 1.524315583730154 +524 804 -1.2079438305687185 +526 804 2.3521151859938474 +528 804 .07326007834716422 +529 804 .10775473527215718 +538 804 -.9648259515219866 +547 804 .37512528719624183 +550 804 -1.0932374997586782 +560 804 -.173493461328384 +572 804 .12083714288385378 +583 804 -.7730473665211327 +586 804 -.006188906305435823 +589 804 -1.0949010914228565 +609 804 2.4731054648832664 +610 804 1.2384596507185857 +621 804 -.9697786846230814 +638 804 .8651105200572147 +639 804 -.32777999549431525 +661 804 -.07909406589854928 +668 804 -1.2810292737829096 +674 804 -.541192343074872 +677 804 .024150248351962583 +681 804 .13147401388904972 +687 804 .21275015501308703 +688 804 .9250421783381252 +692 804 .7083264133035019 +708 804 .48628690713901623 +733 804 -.38324968992787256 +743 804 1.0146188038504764 +747 804 .27008185737760204 +756 804 -.4916771321731974 +776 804 -.6495246273211912 +780 804 .5904448108910603 +806 804 -1.0412413526533402 +810 804 -.359775764739962 +818 804 .9620201976421258 +820 804 -.9499461520810638 +843 804 -1.014993332653499 +846 804 -.858387692739329 +847 804 1.4658214591759864 +857 804 -1.3291393459037661 +866 804 1.3238396351053852 +871 804 -.1531266104141168 +873 804 .8548555900080816 +876 804 -.9512728523081997 +886 804 .4160878236240658 +890 804 -.15694148475212613 +900 804 .6438335797781715 +903 804 -.7936570407144824 +913 804 .41584083485041456 +919 804 .875530120048107 +923 804 .49012004709142126 +929 804 -.32023104763560645 +947 804 -.8906000016372848 +952 804 .7910706323167838 +954 804 .5983896928399095 +956 804 .09640607052135491 +966 804 .06475553387767956 +975 804 -.6378165602403796 +977 804 .32814976075236035 +983 804 -1.063003422030472 +986 804 .30245632784625825 +1000 804 -.5916879427933227 +5 805 .812294462180574 +8 805 .6886580154897776 +15 805 .84208351624878 +17 805 -.5218460041694759 +25 805 2.447235574189563 +34 805 1.4392960818383207 +54 805 .9609720602875603 +58 805 -.8122034064722626 +85 805 .18794637280961335 +96 805 .08785957635178897 +97 805 -.4971463754232103 +116 805 .050081211027316955 +129 805 1.0336129168886954 +141 805 .16240202439788542 +142 805 .7181088953610744 +185 805 -.5976468831880051 +211 805 -.10973623206939373 +219 805 -.17905523351591132 +224 805 -.057654717584846235 +226 805 .06606255782015634 +229 805 -.21338222355037464 +232 805 -.15154203997535248 +245 805 1.1467121031749907 +295 805 -.8555723048846894 +319 805 -.7070932818487294 +337 805 -.5949899005324656 +349 805 1.0560811988849355 +365 805 -.36990678517856895 +370 805 .671579197440643 +375 805 -.2436971253686951 +377 805 -1.2182845070605322 +388 805 .1710095237133198 +396 805 1.0868631745188562 +398 805 -1.1378942397353586 +399 805 .8027447636950713 +404 805 -.9376831354987596 +408 805 .11052320320063963 +413 805 .327053600485407 +427 805 -.11851702814271448 +430 805 -.6917458761481916 +433 805 -.8625826666889098 +437 805 -.056732247991099855 +443 805 -.8145323106618433 +445 805 .0006255629837769519 +454 805 -1.1147468378601442 +466 805 .8924146000369093 +475 805 .45623232960005344 +509 805 -.32925911389499424 +523 805 -.036321614069064714 +524 805 .17666416094975174 +531 805 1.8485713165596984 +543 805 .0563567468678568 +545 805 -1.2942838889269064 +549 805 .06791157344728527 +565 805 1.2825156492384555 +569 805 1.0806829305544468 +570 805 -1.0456566545458266 +571 805 -.16161954672008266 +582 805 .385959555903482 +590 805 -.860378020645923 +628 805 -.10183382400982209 +631 805 -.8750936731662423 +645 805 -.4007438620682917 +675 805 -.20394909471138484 +686 805 -.5289839192053238 +691 805 .32328287066361755 +696 805 .5737357727199724 +698 805 -.3001173885556708 +714 805 -1.2685568977608017 +745 805 -.15262970727792935 +761 805 -.4163044091011368 +764 805 .48177949237745943 +776 805 -1.2302278798534239 +795 805 1.9027718680085934 +800 805 .8080927193825527 +804 805 .5589100539592786 +806 805 .5772394757589588 +807 805 -.5199048987681438 +834 805 .6448159047557678 +837 805 .7052132131230557 +840 805 .3286781179806849 +854 805 .004023989201952877 +872 805 -.015886557278872532 +878 805 .4732584169656122 +889 805 -.044741453604132286 +890 805 .8219518351964998 +904 805 .09371850230861184 +906 805 -2.240242322433397 +909 805 -.6898645939218023 +913 805 -1.1579586790531784 +914 805 -1.3013216613976342 +922 805 .7629024222670433 +931 805 .48371059461404636 +933 805 -.10830070757413003 +938 805 -1.2758527122411738 +974 805 .984312843959791 +990 805 -.26276414769248524 +1 806 -.41830520877063215 +41 806 3.2301066515760066 +42 806 1.2029310843561587 +71 806 1.3019985609826452 +75 806 -1.2276758871625981 +92 806 1.0285983477358103 +98 806 .25463466807572116 +108 806 -2.553404843724353 +109 806 .37923721758958906 +124 806 .5238259056471551 +131 806 1.3837440561571706 +152 806 1.0790074891264325 +158 806 -.330147776717111 +169 806 -1.22445738311233 +190 806 -1.005041032003811 +195 806 .4780438519148525 +218 806 -.492897054494239 +219 806 .14474574532859427 +228 806 .5761710910993889 +231 806 1.1901375570671846 +232 806 -1.7986858236661956 +248 806 .7479711354478392 +259 806 -.7332187352330037 +260 806 -1.135972218582876 +264 806 .9454162275930553 +268 806 .0175771850570162 +275 806 3.3514721584324807 +283 806 .17683426866193494 +323 806 -.696854657888565 +337 806 -.29054723998402343 +340 806 2.065477057514963 +353 806 -.22316620400767706 +358 806 2.36529733669725 +372 806 -1.206112746055352 +377 806 .7787476879835241 +378 806 1.5250947697183976 +406 806 -.16478600489198275 +426 806 -.8314796860553726 +452 806 .3970989977170268 +459 806 .3576927175026348 +478 806 -.37274434494767333 +480 806 -.23792870939830557 +486 806 2.4408720508476773 +493 806 .651745206042793 +496 806 .28639268396613704 +523 806 .22055290571042205 +530 806 -.9817514685777137 +544 806 -1.8311806392997474 +545 806 -1.4849375460230483 +547 806 -1.6025716216471204 +559 806 1.6161898303436402 +574 806 1.6674502102074786 +589 806 .3197272908855074 +590 806 -.19463407344152678 +597 806 1.0780127716522854 +598 806 1.2879944494274678 +604 806 .7694044852045325 +611 806 -.34309587993002566 +613 806 .7932479430089894 +615 806 2.555713094362487 +624 806 -1.061147709785744 +637 806 2.1837504335360496 +640 806 .3645345889480324 +649 806 -.04717545073404594 +654 806 1.4072487314226703 +684 806 .557198119384439 +696 806 1.5736345746227687 +704 806 -1.5388628928200316 +712 806 1.5774921575344567 +718 806 -.26236652520317005 +719 806 .10078368629845208 +725 806 1.0382649219375715 +728 806 2.373097175341146 +730 806 -.553299042516256 +743 806 -2.004524933558089 +747 806 1.5522436422030097 +749 806 -.37962948633739546 +765 806 .09735793996096573 +770 806 2.2110215286635286 +792 806 -.21394807245561775 +798 806 -1.2424067442420308 +799 806 -.5016898479770578 +816 806 2.0998728353720097 +818 806 .556816720784065 +826 806 1.3301241571701907 +834 806 -.674840813020331 +841 806 2.7042432660956393 +846 806 1.4569750561658765 +853 806 -2.322609536806799 +862 806 -.9779794425338865 +870 806 -.6945507411729255 +880 806 1.6196692029171278 +897 806 2.2524376091016385 +898 806 -3.4773633050549186 +902 806 -1.6589524276578282 +904 806 .06705933462087792 +931 806 .517853011958865 +946 806 -.6196871253814551 +949 806 -.9930132282433833 +950 806 .9920414031199531 +954 806 -1.7428458332325885 +958 806 -1.46091212452926 +970 806 -.6797050763926145 +988 806 .10836171524485597 +994 806 -.4138166898169726 +1 807 -1.6420035602096903 +29 807 -.0815798912409394 +41 807 2.8659413317781026 +52 807 1.2983655652998467 +70 807 -.8180992515435752 +78 807 .8613871559213901 +89 807 .16821787904548935 +92 807 .8183486819957686 +123 807 1.3630534577923212 +146 807 -.02920112599620797 +147 807 -3.0457072453710343 +151 807 .4840928289694383 +164 807 -2.0901949857043745 +165 807 -.40129835353358195 +166 807 -.9733734632183788 +168 807 -.1034387379906045 +190 807 -4.018063381047141 +203 807 -1.6462432043537276 +213 807 .4768741845900118 +225 807 -1.0292770041816837 +238 807 -.4466537518050079 +247 807 1.9566543444480566 +249 807 -.3344709318605891 +251 807 .9609694528840621 +265 807 .6924856918485703 +279 807 -1.1636562297781834 +282 807 -.4527091397947426 +288 807 .6375616349679546 +296 807 .4556954766950835 +300 807 -1.1350647066268547 +303 807 -2.2018140141673634 +304 807 2.9335236786029895 +338 807 -1.5547027504557844 +351 807 .5060513047322706 +360 807 3.0236024740134746 +366 807 .2899977905934478 +370 807 .4905129518674575 +371 807 1.7651909125753944 +386 807 1.9398274933513218 +390 807 2.1225380434956493 +404 807 -2.06998791608159 +424 807 .6742728071604212 +446 807 .045013850989130695 +454 807 .2497746657699454 +455 807 3.362494524580377 +464 807 .9989763249058683 +510 807 -1.0191578020895644 +522 807 .3126401307266228 +523 807 -1.3214096670688265 +527 807 1.9135789270239305 +528 807 1.6937289607969086 +544 807 -3.24423323043364 +549 807 .3333933444315553 +622 807 -2.753735899513171 +633 807 .7251254131372379 +636 807 2.744691735742915 +639 807 -.11120997355832055 +645 807 -2.555858198593458 +649 807 -1.131384256174996 +650 807 -.3806663798169802 +675 807 -1.1638911210259213 +685 807 -2.313991539662663 +697 807 -.2264071432972729 +698 807 -.7455470174137024 +705 807 -2.0114747612451405 +717 807 -1.7375457577541342 +725 807 3.8376998516086545 +741 807 .9634957875083829 +762 807 -.6046702488070941 +787 807 1.2746420490047699 +812 807 2.596105766968328 +821 807 -1.865284606060151 +833 807 .8206059450205428 +843 807 -2.7337560988710856 +858 807 -.03581454603004816 +860 807 .3880775958875651 +878 807 .46645118017311055 +885 807 -1.319403099434274 +894 807 -2.106793489696659 +911 807 -.13000436325063006 +915 807 .21645963831038534 +918 807 -.14582173536670287 +922 807 .6218175894792582 +926 807 1.7087383171541368 +928 807 1.2121532306756477 +956 807 1.0111597535554742 +959 807 -2.212526738542803 +979 807 -.13050058517733765 +6 808 -1.8038460550198177 +14 808 .45984777778786934 +49 808 -.12513237885965622 +60 808 .4200966270099799 +68 808 .02434201898939148 +70 808 -.30581777727592796 +103 808 -1.6277929803292928 +108 808 -.9581968748446862 +109 808 -.49438224232004296 +110 808 2.4916705575359677 +147 808 .32291323439486164 +152 808 -.9702902989028186 +155 808 -1.4042017260331927 +165 808 -1.269649145515704 +219 808 -.5168944206142312 +237 808 -1.6312507368507836 +239 808 -2.606103181822354 +249 808 .6310817566973004 +253 808 -.397907666265928 +273 808 -.36887589226731643 +279 808 -.29077354431600855 +290 808 -1.0759605838622417 +292 808 .6365664848153753 +295 808 .7485253689534033 +310 808 .028940353481124483 +317 808 -.2148760286102243 +347 808 1.0232468829958372 +351 808 2.456269627542966 +353 808 1.6366454135393858 +372 808 -1.035247906955874 +397 808 -1.36778555341007 +409 808 2.230727607318517 +414 808 -.9969486828888873 +424 808 -.7054817691232022 +433 808 -.7510584740388064 +465 808 -.756321538209368 +486 808 1.332965206991344 +493 808 -.3596298757775211 +512 808 .6576102426676926 +524 808 .2760440797048923 +529 808 -.5338681014845246 +534 808 -2.3574935001237174 +541 808 -1.0925679214336375 +553 808 -.5826919567482782 +555 808 -.32883453272439805 +580 808 1.151534588378206 +584 808 .658590524220277 +586 808 -.47925071456393586 +598 808 -.057091450192820595 +609 808 .10757387146791593 +618 808 -.5750924950939542 +639 808 .17172270304993575 +641 808 -.6346994825257177 +643 808 -1.338698657908679 +670 808 -1.1696386251874664 +680 808 -1.4515390635586585 +685 808 -.1392775915546032 +699 808 .7239749899048459 +701 808 .4821985347458375 +702 808 -.044727219934935 +750 808 1.8083769414481494 +752 808 -.7084012720222862 +765 808 1.332903105078759 +774 808 .6320774120989097 +796 808 .4888458269232751 +802 808 .7078632313972749 +816 808 1.067116687295705 +819 808 1.2571858790967356 +832 808 .9911444292076379 +839 808 -1.1485973391903235 +857 808 .4705211807772733 +861 808 -.19210290000555552 +881 808 -.4134159733506787 +887 808 .32532253764397434 +894 808 -3.9782816558970833 +916 808 .6455608300843145 +918 808 -.2185247697190691 +919 808 1.0118350613277103 +921 808 -2.6930077092055447 +929 808 -.816054873464536 +937 808 .9517940278217765 +946 808 -2.276238166674839 +947 808 .9871013436523841 +956 808 -.45319595300091 +982 808 .2232624811373419 +988 808 .5916586792671857 +3 809 .12085675359322058 +28 809 -.3873245590257826 +30 809 .07760971256587397 +36 809 -1.0700064338337314 +45 809 -.7142841946542241 +47 809 -.00684003170718514 +81 809 -.3429254847940979 +130 809 -.7402245556603545 +131 809 .45320046590157786 +133 809 .011857911392657933 +141 809 .9001626159634721 +146 809 -1.292437568304015 +150 809 .2153883041327881 +159 809 .9499051925198403 +186 809 .8915849824371105 +190 809 1.4757896936018555 +199 809 .6205295757212858 +205 809 1.7291925949945721 +250 809 -.44261861787558965 +280 809 1.2486866929389642 +300 809 .2603849022452506 +321 809 -.26757061651233105 +325 809 .4052516162471488 +329 809 -.6474076485396012 +330 809 .534146659727553 +332 809 -.791198884367768 +341 809 -.22649630737968116 +344 809 1.6130507184597314 +360 809 -.12332582440133784 +370 809 -.06708528765087697 +371 809 -.6159483612285445 +391 809 -.04536223493011124 +410 809 -1.250926144675623 +414 809 -.3024352525678634 +429 809 1.0016325003442892 +440 809 1.0914076600593245 +446 809 .5342554035961333 +452 809 .4898608642803057 +464 809 -1.4496974237227591 +477 809 -1.3896069845197607 +486 809 -.642929700513273 +503 809 -.6073326792505849 +513 809 -.12206474407436183 +520 809 1.709745084619127 +535 809 1.2574512071377233 +547 809 .7664583866206789 +548 809 -.007973690658564871 +559 809 .21587467458071274 +566 809 .22179342910919825 +590 809 -.3381582945916678 +593 809 -.4250841836171082 +617 809 -.513184459950667 +619 809 -.011286424196714953 +621 809 -.059947948376295496 +649 809 .17014175898147554 +686 809 -.31458053055506097 +695 809 .4141810118852318 +734 809 .34096319275176534 +742 809 -1.216103998679272 +756 809 -.47045188707108787 +759 809 -.6566561380713708 +782 809 -.1828865080776375 +785 809 -.679660628668054 +815 809 .05240632442955248 +826 809 .7752850582943511 +830 809 .8472058465925087 +831 809 -.8887666580508526 +836 809 -.36371643095497225 +837 809 1.492947548386957 +841 809 .04381685437027717 +845 809 -.24724729055834493 +854 809 .47469677245160224 +857 809 -.6067259714498281 +884 809 .21483455244307326 +895 809 .17186787639104548 +896 809 -1.1729821668005305 +916 809 -.1990855771326756 +924 809 1.2751095358021391 +929 809 -.6559975496329993 +937 809 -.24442696625736451 +946 809 .7299268159650845 +951 809 -.2276774190172589 +956 809 .325343410024592 +957 809 -1.0538215526872323 +961 809 -.84590972288384 +972 809 -.8577325859815084 +6 810 .9004415938920454 +7 810 -.06592244523563769 +11 810 -.014171440734535239 +12 810 .23792948624447266 +75 810 .9919037622103738 +77 810 -1.1550901969359548 +95 810 -.16610426028780728 +102 810 -.8968337869849278 +103 810 .9074099581399895 +114 810 .8687303795330941 +123 810 .17593103417100892 +130 810 -.6482919231342794 +141 810 .6343158940333062 +149 810 .3669819803049284 +160 810 .7048784254928999 +183 810 -.5769456328679577 +208 810 -.27691192708224394 +213 810 .3887629364033194 +217 810 -.2493386394042922 +224 810 .07172071004126247 +250 810 -.26873355219916667 +261 810 -.8725170198205644 +272 810 1.3370256411609978 +285 810 .07548060381349267 +314 810 -.6484125178420848 +327 810 -.1284510572840935 +332 810 -.7892054528608577 +341 810 .41255982253248313 +353 810 .4301030230763295 +355 810 .5826265105145243 +357 810 .20154535967600812 +365 810 .22772165863162086 +376 810 -.6626175779797625 +386 810 -.45143433627387863 +395 810 .44849148849069764 +398 810 -.14254639974077318 +402 810 .5261355609481148 +418 810 -.23355334253675059 +428 810 .21041438792272388 +438 810 .309851298673543 +452 810 -.13353292755202595 +468 810 -.31128160950296074 +469 810 -.01048004785633011 +476 810 -.3196258946463473 +483 810 -.39408990225545043 +487 810 -.4867599941259929 +488 810 .8323166684510915 +512 810 .2674696310685424 +526 810 .5830471118026344 +541 810 -.10402397705529669 +542 810 .4292192015330109 +546 810 -.1983181357206527 +550 810 -.08349091316834775 +561 810 -1.126581323600225 +567 810 -.615037999134104 +569 810 .47118093052504767 +579 810 -.16695356583286627 +609 810 .20720933208892997 +610 810 .0009630326050410198 +619 810 -.16940322852623854 +634 810 -.3680339842438363 +652 810 -.055013364634666925 +667 810 .03912815702467168 +672 810 -.3115975628912638 +677 810 .3873388550473754 +685 810 .25947037814692836 +687 810 -.28258398437611626 +689 810 -.24482872582363477 +694 810 .32844460640854706 +709 810 1.0324547065470018 +714 810 .1930255795600943 +726 810 .31149567894330055 +730 810 -.3713761699820973 +734 810 .46595607861371025 +749 810 -.6072494717326649 +751 810 .6022230427683104 +761 810 .23969772142140244 +777 810 .5163720291173923 +778 810 -.41447054075738227 +797 810 .6801356631221822 +800 810 -.41393602606602803 +805 810 .44846825660284395 +826 810 -.12283429452395178 +828 810 .2229834544383521 +838 810 .09519548713337722 +841 810 -.7014824766892308 +849 810 -.8782241568726767 +859 810 .2221916294357804 +865 810 -.48520571664794293 +866 810 .4616463722046328 +874 810 .39941081084733876 +879 810 -.9012135827703993 +882 810 .0344711212640763 +897 810 -1.3396657714301559 +905 810 .06171269664385807 +908 810 .5854846710246981 +927 810 -.7329207573287951 +929 810 .15751532730608103 +943 810 .5377888264850355 +955 810 .0504376618175144 +989 810 .47092652947040603 +992 810 .6621949947161466 +993 810 .34044149213460806 +998 810 -.21268458757755732 +3 811 .5327822008969346 +17 811 .49552902545279354 +28 811 .17190796548027515 +31 811 1.676575152585613 +33 811 -1.530180471665065 +50 811 -1.4067981000402148 +54 811 -.1159224416597903 +57 811 -1.024825047090744 +59 811 1.8382348615834958 +72 811 .27972827853951243 +76 811 .8283501519266309 +82 811 -.2722526330807358 +84 811 -.981321524776601 +86 811 1.0791557852913851 +90 811 .2752146462805262 +98 811 .5665288703132317 +102 811 1.8798493656744455 +103 811 -.21153649520645987 +110 811 -1.6216237780140221 +113 811 -.004405457066947928 +120 811 -.025036368305114354 +122 811 .19275533582221502 +126 811 -.14695763634235814 +129 811 -1.6268510768116193 +153 811 -.5935311723051102 +175 811 -.28242555631276234 +185 811 -.9150810458196729 +189 811 -1.0363568149924332 +196 811 -.07363168177596544 +199 811 1.2932931916440504 +201 811 1.0445129527057737 +212 811 .08935751340875764 +220 811 -1.4693292151886115 +223 811 .9527391414775362 +227 811 -1.7862766183399117 +230 811 -.5856035870957471 +239 811 1.6367318461397415 +243 811 -.1598560079122294 +257 811 -1.4439467082357125 +267 811 .790193937183469 +292 811 -.4220068212428376 +299 811 -.034715431422652016 +300 811 -.9055926721905699 +324 811 -1.4041294509174178 +337 811 -1.2344261821077467 +338 811 .19585660376645955 +340 811 .9440251569312014 +392 811 .634617829596414 +393 811 -.19994104065644733 +395 811 -.5436901948564727 +401 811 -1.353111619205953 +404 811 -1.1523578237106467 +407 811 .6277562552162087 +429 811 -1.347038378599922 +458 811 -.09075847016846766 +463 811 .648928035520647 +469 811 .3048604620935055 +518 811 -.5698377139079147 +520 811 .6915560680806223 +526 811 -.39837098923132397 +531 811 .7686344056471728 +533 811 .2740815106896163 +540 811 -.7228597832464526 +573 811 -.9195898248279222 +584 811 -.7955502135925661 +587 811 -1.1624629425302702 +588 811 .2492082276517547 +632 811 .9434367358720508 +655 811 -.007506364545290252 +682 811 -.3508570379215388 +701 811 -.4010482700169171 +705 811 -.4204727037230014 +706 811 .20298329383620725 +707 811 -.8271396952884464 +713 811 -1.450410754758909 +751 811 -.8638033122186558 +753 811 .23542686694044593 +760 811 .3628843795544775 +788 811 .14399836936845126 +795 811 .7182872029487242 +810 811 .3066082157087592 +823 811 -1.2562569480765415 +826 811 -.8276860833958711 +828 811 1.4960016746182252 +847 811 -1.4124783729141375 +851 811 1.4129629694953716 +853 811 -.3721639478905163 +859 811 .04849975603657539 +870 811 -.5461141813072052 +880 811 .274289971473353 +881 811 .09972748241256826 +891 811 -.8392258236103103 +896 811 .9838330034703509 +910 811 .8838123407273955 +916 811 -.5174207990190378 +917 811 .7471612179933573 +919 811 -.6646139927977979 +933 811 -1.5198926215319748 +934 811 -.8280625549245076 +939 811 .02279202967167844 +958 811 -.5765446326938702 +964 811 .604004632144217 +974 811 -.42100591405526205 +982 811 -.4300563250559658 +987 811 -.2622722248885534 +7 812 -.18798888531863184 +20 812 .7910509801868287 +26 812 -.35456002746868287 +28 812 1.2385069955945862 +36 812 .8169048215486268 +60 812 -.45426379030822517 +66 812 1.1212372576746605 +70 812 -.48292854119048545 +75 812 .381075051688544 +89 812 .33659852565344817 +120 812 .6047898863730798 +123 812 -.5066678514260048 +143 812 -1.0623282048676816 +154 812 -1.52676684665685 +160 812 .15924302990490638 +171 812 .19231036398651613 +173 812 .34764186521310175 +179 812 .6275178615299167 +186 812 -1.0343118047037045 +187 812 1.3756092559543447 +188 812 .25364850513025616 +198 812 -2.489968599134525 +201 812 2.7224970334561616 +203 812 .3716808554462887 +205 812 -.7477973106302374 +243 812 -.4542218574521963 +254 812 2.7162137552403403 +258 812 -.8435466224501064 +267 812 -1.9837894599700194 +280 812 .17240966261118046 +284 812 1.827358264508924 +321 812 .10686441868159596 +333 812 1.625425509199831 +334 812 2.539006803349018 +341 812 -.37849056564186173 +347 812 .4228431185987103 +359 812 .5189766187924937 +362 812 .6079202823055646 +367 812 1.5717952065336278 +373 812 -.565461753760634 +378 812 -.803240762427393 +380 812 1.4725745046357115 +381 812 .09744531183645158 +391 812 -1.187223301484626 +394 812 -1.3189464509039357 +430 812 -.7951443563978332 +433 812 1.1624605866000846 +434 812 -.0271466417557239 +435 812 .15630797051383985 +439 812 1.9784436841597433 +451 812 3.1436551161165447 +453 812 1.4936707144667891 +463 812 -.04292767063170934 +466 812 -1.3643980168607446 +481 812 .5016346492383685 +496 812 .740192714267082 +500 812 -.24126919971790456 +517 812 -.7356935280280161 +526 812 -1.2506379906159626 +531 812 .7650514630967519 +532 812 .0027057213833028594 +535 812 .049795844138302736 +550 812 -.017375475369749017 +568 812 .18136405046199428 +575 812 .46690163830454023 +585 812 .5981965407702852 +590 812 -.8387697157631709 +625 812 -1.0531449949305407 +629 812 1.076861183864667 +638 812 -1.9206983522601195 +643 812 -.1620929341639244 +646 812 -.4912937349986075 +676 812 -.5664730739023284 +706 812 .544642266756123 +709 812 -.8070896701151246 +713 812 .9934735169126567 +719 812 .17497556721729968 +734 812 -.9937445893523944 +736 812 -.9912690272471776 +758 812 -.15872380167423422 +768 812 -.5218648318841875 +772 812 1.3531083473058423 +801 812 -.7150713735439016 +806 812 .4132450659874995 +816 812 2.3983296908725964 +838 812 1.148215084705853 +842 812 .33633056610021744 +847 812 .8235833851778102 +877 812 -3.0958913153808725 +895 812 -1.7785255030046914 +902 812 -.7594176287547291 +920 812 -.7527600818086042 +951 812 -.7744843199168496 +965 812 1.865258048011358 +966 812 -1.015863924432001 +977 812 1.50743578987677 +985 812 .007179042080115328 +993 812 -.07940073364970071 +9 813 -1.4314276364633076 +18 813 .6949287223940215 +23 813 -.6358107475056543 +30 813 -.07401471916610275 +43 813 .13048430659635024 +53 813 .05335805509776001 +58 813 -1.2543808284016442 +61 813 .969738890836262 +81 813 .07950483355311094 +97 813 .986252753588515 +117 813 1.508730838604169 +118 813 .9573281032124346 +128 813 .353679194405731 +145 813 -.8796175457452775 +148 813 -.1616874614043125 +157 813 -.5316442399956733 +169 813 -.2964495023536221 +171 813 -2.648212421506515 +189 813 -.06867722838935285 +203 813 1.712803545833082 +209 813 .014884071427715681 +217 813 .06340449692133557 +227 813 -2.4042467601974167 +234 813 -.6112935758088545 +235 813 -.6971514444338024 +239 813 -1.6981255937385629 +243 813 .025115099049126156 +249 813 1.376606887690609 +254 813 -.4484996469425877 +255 813 -.6332374240439336 +256 813 .38147839368334857 +279 813 .3417596257904651 +291 813 .2887263982661961 +296 813 -1.168799812950166 +300 813 .46865420864088453 +303 813 1.5665455373048693 +310 813 .4202925140874343 +318 813 1.3847258289781241 +333 813 -1.266405147485524 +341 813 .23315631957130203 +353 813 .6821338046486495 +357 813 .7429096196806013 +368 813 -.45642436977157624 +372 813 -1.0071182812147454 +384 813 .26340245251094174 +385 813 -.19196594254726737 +386 813 -.8366534333378595 +395 813 -.9320894754089905 +404 813 1.373818907622329 +428 813 2.1134988948661966 +439 813 .416683052264708 +450 813 -.3436569069834716 +453 813 -.4070546551219374 +458 813 .1633109991697468 +466 813 -.5331096947324558 +474 813 -.3729493846149252 +478 813 .9444443640973453 +491 813 .6436691704909648 +508 813 -.41324393539176046 +513 813 .7922653777784027 +516 813 .3078368072210321 +518 813 .9000085815557054 +526 813 -.05008521087209161 +528 813 -.8307048628232336 +552 813 .48199790700971534 +565 813 -.2333410239886749 +584 813 .17881208282004601 +587 813 -.08379531178055467 +590 813 -.6625844211086914 +600 813 1.2395138464383657 +608 813 -.3840044119221564 +613 813 -1.0536394289168682 +630 813 -.42991114328029023 +631 813 -1.2336726953355999 +639 813 .23420582762572761 +644 813 -.6655795787198635 +662 813 -.5094767421647032 +667 813 .23428667380480686 +676 813 -.20438596171147538 +700 813 .08474034018726201 +711 813 .04176484690117287 +713 813 .006308538951917492 +716 813 -.8397958642237849 +718 813 .4088699406254179 +735 813 -.45842527633562014 +736 813 -.34920664694382336 +750 813 .5520960896159853 +774 813 .982895513841332 +780 813 -1.0754829784924957 +784 813 -1.0715698387804247 +792 813 -.19031398004013705 +800 813 .7439153171088074 +803 813 -1.2038722907899262 +815 813 -.09431637614456019 +821 813 -.11517819795046239 +826 813 .7772419397745967 +828 813 -.29780988028748 +857 813 .07319326897718835 +871 813 -.2481244134073101 +888 813 -1.2005654134615242 +898 813 .31094269597490354 +900 813 -.18107864068277107 +910 813 .20448760179480052 +919 813 .6198898924950172 +921 813 .5580479908897592 +939 813 .1651722693844033 +943 813 1.9054246491184035 +955 813 .5646218942104952 +960 813 -.5622623154217393 +964 813 .22113716458663596 +970 813 -.6249188343005803 +977 813 1.1027153190432932 +985 813 .15162744347975782 +986 813 -.544918744003386 +17 814 .45563201383324387 +20 814 1.4543240381254101 +28 814 .010781818226801743 +35 814 .341316240841714 +43 814 -1.7400563156474431 +45 814 -.5428563362653979 +48 814 -.03790967179693423 +55 814 -.12325171313195711 +60 814 .10013593358226085 +65 814 .8410429824035801 +78 814 .007415423079284285 +93 814 -.937768060364264 +113 814 .3615009384796722 +128 814 1.393435317679704 +129 814 1.1593877930989898 +142 814 .7893065643030495 +145 814 -1.7594230617689548 +149 814 2.1764212244708996 +175 814 .2894664970412847 +186 814 -.8678448883756049 +193 814 -1.6598622814198567 +197 814 -.9811611038690443 +199 814 -1.2984074197179947 +214 814 .08326916360001752 +237 814 -1.2919958361077455 +242 814 1.71110720283632 +253 814 -.6211167277334402 +258 814 -1.195066063894277 +260 814 -1.6890383199131032 +284 814 2.3351396890562044 +285 814 .9207933166854747 +311 814 -1.9581617758130847 +320 814 -.1518276992945789 +347 814 -.3122032686240534 +354 814 1.4795009011815894 +358 814 .21127514810859732 +377 814 1.7692045701386532 +389 814 -.11012137112188089 +402 814 -.7084274458176215 +405 814 .31689046296954265 +421 814 .8038034478817805 +446 814 1.4437819666641993 +455 814 .7480469334161517 +457 814 .36935023534558337 +466 814 -.811003733339728 +476 814 -.6961115592000016 +485 814 -.7641669098974165 +489 814 .46486450625264497 +493 814 -.8780549547571425 +494 814 -.991336425021855 +500 814 -2.2247916134993906 +513 814 1.4833399452955942 +522 814 -.5275064180203106 +528 814 -.8009261236360313 +539 814 -1.43682411398949 +542 814 1.0715698434399863 +548 814 -.23333270965047298 +570 814 1.3215086304642596 +571 814 -.2007987014194274 +583 814 -.14352400402540355 +587 814 1.3485399596620362 +589 814 .34886714391502566 +590 814 -.5740698003522805 +600 814 -.48369451006847697 +604 814 -.6721604878193872 +607 814 1.1260134911084552 +636 814 1.6502252620326272 +649 814 .23716715075146888 +671 814 -.5891719049617452 +690 814 -.7582000491113847 +707 814 .8762960265074886 +725 814 .4372159975558974 +742 814 .05668161731754577 +752 814 -1.774265603301102 +760 814 -1.2349144276055637 +767 814 -2.2102942785813067 +778 814 -.1986284804989339 +789 814 -.7376389544698783 +790 814 .21646122081461247 +798 814 .7184556210758782 +800 814 .0918893790436846 +819 814 2.5376032512469697 +833 814 .8152550111621818 +837 814 .0022474659056774884 +844 814 1.278531464208628 +858 814 .48728207811657587 +869 814 -1.5337524741310817 +876 814 -.5950363683480373 +885 814 -.48673946327011447 +887 814 1.398137642870069 +895 814 .5280770235756547 +901 814 .2633588603536125 +903 814 -1.3430330654255092 +906 814 .679938352390601 +914 814 .6565458037660352 +922 814 -.4848635827197176 +949 814 1.2143650044555632 +959 814 -.1171013274091924 +964 814 -.29863944550759736 +968 814 -1.385551712844718 +987 814 -.22041218853372144 +993 814 .6871060100910109 +995 814 1.3760251299065303 +11 815 -.22929854100101593 +14 815 .05233064310621664 +17 815 .8343068325545846 +21 815 .24558036578621703 +26 815 .13053132987805244 +30 815 -.8328279360423491 +38 815 -.35031042697126424 +64 815 -1.150494902959284 +73 815 .9625582592792313 +76 815 -.3610125176708838 +77 815 -.8212884073680287 +106 815 -.26271226453610946 +107 815 -.25290702095623097 +131 815 -.5507976843452413 +158 815 -.4247780664369184 +178 815 -1.4269330885142306 +181 815 -.4691980208068579 +185 815 .3271944933801722 +187 815 1.185552564998185 +192 815 .5017241967477329 +199 815 -.965753439815829 +224 815 -1.0460394951216476 +240 815 -.027801944376451573 +250 815 1.1348565635826637 +261 815 -.4014276002524269 +266 815 1.6649367465608953 +321 815 -.36089663620977946 +322 815 1.440442057132353 +336 815 1.1600186908755872 +340 815 -.4141741561174823 +343 815 .5605947562432316 +349 815 -.1022913749584372 +357 815 -.24435598270383493 +365 815 .3610763935804893 +377 815 .7837730420176577 +396 815 .9887938531115406 +402 815 .8219271143540172 +410 815 .587155927312177 +423 815 -.4396997166989267 +433 815 .44991538926448094 +449 815 -.9641682681265308 +463 815 .18039158914557707 +473 815 1.4216654474373973 +485 815 -1.058994128485271 +493 815 -.9998377985409073 +498 815 .09396760075531571 +506 815 .2843331412799338 +514 815 -1.2911981325569917 +520 815 .2775965362692 +541 815 -.8888370518790935 +547 815 .39984448926633315 +551 815 -1.4895255542521322 +560 815 .09196775991650456 +576 815 .041657829236825594 +596 815 -.5176187616170674 +597 815 -.19346018536504092 +598 815 -.07975581021359049 +606 815 .33629506348423854 +613 815 .7592442249891104 +616 815 -.821391282411782 +619 815 .19110114143318563 +623 815 -1.0426895558328149 +636 815 .9794248503860556 +641 815 -.5570003751881858 +643 815 -.5701707645109525 +655 815 -.37562423800067435 +670 815 -1.3079800400768002 +676 815 -.10406495258273016 +688 815 -1.681356017331648 +718 815 .8274395323492231 +733 815 -.17161659995046566 +783 815 -.04286641522325513 +784 815 -.22441592328979657 +793 815 1.6417340694819917 +795 815 -1.2038316384671213 +807 815 .240232659759234 +811 815 -.4093953813579608 +835 815 .5527581378056852 +844 815 -.7315503595947427 +856 815 -.8822033585810847 +864 815 1.0917360269265035 +865 815 -.3352969322892285 +877 815 -1.0150122568887394 +882 815 1.1733468676511196 +889 815 -.38450676754314184 +890 815 -.3113271454798675 +896 815 .8782698465435321 +914 815 .023061521710928873 +923 815 .16836605201595786 +927 815 .9365106526186034 +930 815 -1.0512411520268896 +943 815 -.8785158198096136 +952 815 1.2207881904813644 +964 815 -.5779561161542266 +999 815 -.9417550372174702 +16 816 -.16829173942072484 +18 816 -1.2098558011687293 +31 816 -.3143164965037981 +49 816 -.8841917339479994 +50 816 .3547088223978635 +66 816 -.8546730872213576 +95 816 -1.1676209119442607 +107 816 -.517579771589439 +116 816 .05772028133405897 +129 816 -.8130334699583249 +155 816 -.9913640611704579 +156 816 .3522034864681906 +181 816 -.49405707297855783 +185 816 .15207192714937467 +186 816 .10731375783858231 +191 816 .9259760372766352 +209 816 .18255818810974062 +214 816 .5852901984956499 +225 816 -1.4647828190108179 +229 816 -.5736512251129714 +231 816 -.2777506821748041 +232 816 .3393042861780257 +236 816 .14372122770297377 +238 816 .7028471777341714 +253 816 .24538418279964472 +256 816 -.8226261802954457 +266 816 1.2216410595340637 +272 816 1.4345020895513374 +280 816 .07744855019102459 +321 816 -.08844934787520965 +324 816 -.49276933962498953 +329 816 .8852925591909323 +350 816 .5989965298459842 +351 816 1.531155801548281 +360 816 -.42518072056297174 +363 816 -.27213397954008267 +366 816 -1.2640098288953097 +368 816 -1.373156317158139 +369 816 -.38120246073074815 +372 816 .5241916953372413 +373 816 -1.2754733983695399 +375 816 .2962392533384932 +392 816 -.9757217435693902 +394 816 -1.1598163041401657 +396 816 .2654760857475291 +398 816 .5450760591077353 +401 816 1.2938693782997825 +420 816 -.608389319532975 +425 816 .7337734490073993 +446 816 -.4171152031316383 +452 816 .534076948882412 +468 816 -.02333927046043785 +471 816 -.641887785960878 +497 816 .7517043683537733 +501 816 .0558498290604926 +508 816 .4454799924756183 +519 816 -1.4708501731604695 +534 816 -.8505585740400962 +538 816 -.44162875708634836 +560 816 .11700401029343446 +565 816 -.36833424281005006 +588 816 -.19235797453088577 +591 816 -.6289493371127055 +607 816 .5770795060432391 +614 816 -.7288922962274383 +620 816 -1.1620613066996217 +639 816 -.6607107270445411 +645 816 -.06570176856091159 +660 816 1.19045645262065 +664 816 .8081495132264053 +670 816 -.9559800795831638 +687 816 -.6188400749615548 +690 816 -.9516882947748153 +700 816 -1.1352822147609287 +725 816 .7204880757603287 +729 816 .2253342352836933 +745 816 .1451234170494227 +766 816 -.16603117653410973 +769 816 .13179180898268886 +770 816 -1.2425649791528741 +771 816 -.22696015970948658 +794 816 -.2111489338129322 +797 816 .9253151302054784 +828 816 .18831605869130383 +838 816 -1.2772000213355175 +858 816 -1.16340981217415 +861 816 -1.077472648299182 +865 816 -.7994439166208025 +874 816 1.4134443185509313 +877 816 .08979413383150445 +881 816 .016284341317577417 +890 816 -.9120453666475112 +902 816 1.0741063230343735 +910 816 .3029641478288607 +930 816 -1.4079869064593626 +952 816 1.2182881133890255 +972 816 -.5170818170812526 +973 816 .529187675337568 +974 816 .5312237059558553 +978 816 .18977656760261458 +979 816 -.16377471796792592 +982 816 .90494401997344 +985 816 -.05949900524190206 +991 816 -.8307257841853233 +3 817 .03847136736185321 +16 817 -.1483062131264295 +38 817 -.22958750633681246 +44 817 .34872255691902065 +48 817 -.3217838434138014 +54 817 -.8625453477737194 +67 817 -.538505054056126 +74 817 -.4372528938702943 +84 817 .5960379088463779 +93 817 -.5362031508274294 +94 817 -.32757339539954294 +95 817 -.19778682580849782 +123 817 .7169735676522458 +128 817 -.27603696624791035 +132 817 .7160499398396922 +135 817 .27198815715692365 +138 817 -.7834435998336581 +156 817 .2027617431917074 +164 817 .15211686030016933 +169 817 .07671783994189982 +188 817 -.24759263685556435 +193 817 -.2122214524650621 +211 817 -.7366276006488579 +217 817 -.9918841624713116 +220 817 .2592009512914902 +232 817 .4601096652322959 +244 817 .5697292285863882 +272 817 .12018243350055548 +280 817 .3167348326517684 +286 817 -.20310300366945486 +292 817 -.3827559924323478 +295 817 .30494991921681613 +296 817 .06113916497971714 +347 817 .05603657000086107 +364 817 .4024851697232248 +374 817 .5039660088929938 +376 817 .5377199896902232 +404 817 -.21407722418615233 +405 817 -.5453421104489243 +411 817 .3626871285455332 +415 817 -.02414897088743581 +423 817 -.3813112247930109 +431 817 -.45509470865642954 +434 817 -.24948753067186175 +448 817 .2203896318895361 +455 817 -.8104207554844107 +459 817 -.027571135769981478 +465 817 -.1462102287863184 +484 817 -.03054293846852555 +486 817 .7447010466047179 +492 817 -1.1718606930937048 +522 817 -.3246240155255337 +528 817 .32942744076109337 +535 817 .06595411941613 +538 817 -.18169538221073908 +550 817 .2583669105609305 +574 817 -.39873156017047257 +576 817 .5841562920928541 +580 817 .1619290859133165 +589 817 .1392896244705597 +596 817 -.16853078679035258 +633 817 .2564246442985675 +637 817 -.215260470867957 +652 817 -.6135394601348786 +659 817 .2887301130401972 +669 817 -.5368530342081352 +681 817 .4915851854560388 +704 817 .02461945638259158 +716 817 .19847659536236323 +721 817 .2738102618196244 +729 817 .07169880765694686 +751 817 -.17376441783700042 +754 817 .0988040527947547 +755 817 -.8638449727616956 +783 817 .40561158186425184 +795 817 -.28674775668052654 +803 817 .5683201393108996 +810 817 .24272969550663928 +811 817 -.7204081234739595 +812 817 -.4001277118502149 +815 817 -.36862236882424104 +816 817 -.056647762577779176 +823 817 -.9673389429151246 +862 817 -.6850799196319158 +870 817 -.33047074675641414 +873 817 .884362119001284 +882 817 .7832778511484437 +885 817 -.7133778760927009 +896 817 .10352038498284731 +906 817 1.1575020255505883 +911 817 .5907546263302532 +914 817 .36773934914773443 +918 817 -.6030510216657725 +920 817 -.8771593879023416 +921 817 -.15738350228180356 +928 817 .2704519351238024 +942 817 .2315586536634684 +944 817 .17884028472360247 +956 817 -.057140822830957415 +959 817 .3693696023451174 +975 817 .32271939717835985 +980 817 .29160844585759427 +989 817 .2104775184212303 +996 817 .3410771815419691 +8 818 -.21509852767319534 +17 818 1.1636085685203212 +22 818 1.409102178005424 +24 818 .5578642929967821 +25 818 -.20352927888367006 +40 818 .44500703489092014 +66 818 -.40745333259319094 +77 818 .2655207310823199 +89 818 .4181565024139384 +95 818 -1.355401617427053 +108 818 -.35693886676577524 +116 818 1.0100987652854798 +117 818 .7540570323697078 +123 818 -.40038443892531944 +131 818 .03892770793260608 +132 818 -.03897585115515796 +134 818 -.4445990798999838 +136 818 1.0919060209419307 +141 818 .15182110716527208 +155 818 -.9775206114928058 +157 818 .2026714000323581 +166 818 -1.3188712757959067 +173 818 .298308021757085 +181 818 .021130558820273038 +183 818 1.1795166779905466 +193 818 -.5300876758081602 +213 818 .46460614233053726 +215 818 1.041236409939033 +218 818 -.39876325173860483 +227 818 -.9052717280167419 +238 818 -.5052677181483758 +240 818 1.6261114592732104 +242 818 .33900057521805205 +251 818 .17916718040318502 +260 818 -.12747245084096687 +261 818 .044139437570216565 +264 818 -1.3183738127114413 +270 818 -1.3925209276965382 +286 818 -.4025516939061428 +299 818 -.0011903028537564656 +300 818 .296932447371899 +316 818 -.7431792917754685 +326 818 -.3667414175444893 +338 818 .26002061248222696 +356 818 .23949448995411837 +404 818 1.603906902519904 +408 818 .08720017234739014 +420 818 .7142817723935837 +427 818 .41313026416058357 +428 818 .7263847986366521 +435 818 1.714189543831446 +436 818 .17915621875472026 +443 818 -.15599093823865834 +448 818 -.40608222718114173 +453 818 -.9269382721660635 +475 818 .21320567845972205 +485 818 -.20994046147582954 +504 818 -.24650259600807822 +518 818 -.6224853525053637 +524 818 -.05568731357847764 +532 818 .5139863166114244 +534 818 -.7844651769933324 +569 818 -1.1302906724037796 +582 818 -.1229330833993245 +591 818 .628762839663894 +615 818 -1.1347042388578554 +623 818 .0775221462393948 +644 818 .2421387420865574 +646 818 -.9334530602576241 +670 818 -.8265380234060523 +673 818 .7144002852929157 +716 818 -.6533824516777748 +724 818 .2925044141537396 +730 818 .45124513023659296 +736 818 -.41981396044600866 +743 818 1.4157401511419276 +775 818 -.10699108489285947 +780 818 -.6048714012370833 +786 818 .5483677742822322 +817 818 -.36609568519560903 +845 818 -.6259244293636403 +851 818 -.3516541892687246 +856 818 .512413875943671 +860 818 .4613356112314706 +884 818 -.5085344562013018 +889 818 -.5736091227947402 +891 818 -.16935643412106302 +896 818 -.09520536127014469 +918 818 -.38290416675197275 +927 818 .11405433693347145 +934 818 -.048272468333598606 +947 818 .8326813638421612 +970 818 -.6305954537890596 +975 818 -.3262507993552911 +978 818 .5135976089860835 +990 818 -.3906798613900279 +7 819 -.9660231053453767 +18 819 1.1601612247194084 +23 819 -.8698545445885179 +24 819 -1.3687403686027901 +30 819 .639174181838795 +53 819 -.09870856334528787 +56 819 -.5544443719287467 +57 819 1.6312739230651954 +78 819 1.445849990615435 +82 819 1.9658219450461212 +90 819 .4862945019515526 +113 819 .4445435969142516 +116 819 -.41603258384998915 +185 819 1.0011629965581759 +192 819 .19130689171213117 +199 819 .100273192086411 +210 819 2.786734336478741 +215 819 -.06485733205325528 +219 819 -.4685775723090172 +229 819 2.245582635019984 +240 819 .9594586090437561 +244 819 -.9151425274982221 +273 819 -1.1631895923515572 +291 819 -.6542276859610694 +315 819 1.1542826190510413 +328 819 1.217121662574398 +337 819 1.5466719732980267 +338 819 -.2135890554504703 +342 819 1.372107943694406 +373 819 2.3711258926846757 +381 819 -1.038485979568835 +388 819 -2.7691650808278756 +397 819 -.1001336177410217 +403 819 .32712647396415223 +424 819 -1.0119606348448626 +439 819 -.405058609020849 +444 819 .4124173061870685 +478 819 -1.0958007372621525 +500 819 -.9624381304423546 +506 819 1.8555232673270632 +514 819 1.1642062601413272 +523 819 -1.8917581628428464 +536 819 1.0346267891574354 +539 819 -.4292382299215098 +542 819 -.28931199722437617 +544 819 -1.1590981254424044 +550 819 .6499702266392541 +553 819 1.6987309901742413 +555 819 .4230141360551327 +559 819 .4609878905082601 +568 819 2.442956364024301 +577 819 -1.092627138210231 +585 819 -2.25345698200558 +589 819 1.0863927846103985 +592 819 -2.4830241563574327 +597 819 -.7766262442627894 +608 819 .9174422005042642 +624 819 -1.7324972862562504 +635 819 .6085443856000408 +646 819 2.036950130231736 +662 819 .026880415733218574 +685 819 -.9937486217355626 +689 819 -1.2471553099997452 +692 819 -1.246161869646946 +701 819 -.3424292402696946 +711 819 -1.9942436911810546 +712 819 1.3580423541296929 +713 819 3.0574321976309737 +715 819 -1.4306089450215211 +731 819 .467253804133628 +740 819 -1.711061435552026 +743 819 -.8323454495873914 +744 819 .7126473101642394 +755 819 2.1971759446964154 +790 819 -.9019457597629456 +800 819 -1.6463113836905334 +802 819 .8532924649053364 +804 819 -.4835802985025285 +807 819 .06995096549554261 +822 819 -1.095850551647752 +830 819 .2754223359073982 +835 819 -1.7734987768550767 +838 819 2.7020896693292116 +840 819 .32034213939444034 +841 819 -1.3873745940399882 +845 819 -.43607677872131057 +851 819 -1.6600125371773455 +852 819 .10582137897069338 +858 819 1.8435313661993393 +859 819 -.024550077847456137 +861 819 -1.2133572383563753 +891 819 .564499598840936 +900 819 1.5354809483718417 +904 819 .7042701160565334 +911 819 -1.352361988534444 +913 819 1.451380299067246 +916 819 .375846901553882 +931 819 -.26273631149036314 +942 819 -.7114528042377688 +962 819 3.290351527318408 +972 819 1.6482857350608306 +991 819 .30759753946775525 +994 819 -1.8371752128462473 +9 820 -.3465971342531053 +14 820 2.4393271534863183 +24 820 -.5007295772918217 +28 820 1.4898337563772368 +37 820 .1901396048660477 +54 820 -1.298018860194846 +66 820 -.3327316793030022 +67 820 .10238518071401831 +75 820 1.5161458463473274 +81 820 .039683856791220024 +97 820 -.44772879937836724 +112 820 .31327527501697955 +140 820 -.7861118452537532 +144 820 -.18581194698960152 +151 820 -1.124103096334901 +163 820 .6039920827421132 +168 820 3.0475527075157127 +184 820 .35793206088001783 +185 820 -.19543739321601233 +189 820 .6811697843194902 +200 820 .0838237945096933 +221 820 -.4583346608198111 +232 820 1.5251644253599819 +243 820 -.5110804204313382 +246 820 .40079971997050323 +259 820 1.497830225248228 +260 820 -.10198190423030797 +263 820 -1.2655768004892036 +266 820 -.7320080096901842 +280 820 1.1674925748790326 +292 820 -1.4404321856264866 +303 820 -.850604869760667 +307 820 1.5780451084897118 +323 820 .4581783930779241 +324 820 1.8508815707418858 +353 820 -.7445152963578704 +354 820 -.0529071869070933 +370 820 -.04561289208658035 +386 820 .9947386926351431 +392 820 -.5476062595376187 +399 820 -1.1121339801370704 +405 820 -.153623286895625 +414 820 1.528071531762075 +415 820 1.399659557926008 +428 820 1.3513120328907076 +443 820 -1.7738909463716173 +467 820 -.3390680700790152 +470 820 -.08563475090216913 +473 820 -.3928087305067031 +476 820 -1.4602334957241958 +486 820 -2.105655764531722 +500 820 .5151739328752352 +513 820 .2550628621501679 +518 820 1.3893773132622311 +551 820 2.5342001307120494 +578 820 -.9817891408184164 +588 820 -.2101432218612917 +598 820 .8386226809437074 +608 820 1.6471167453346192 +611 820 -1.2813963721777835 +616 820 .7645505610889508 +619 820 -.4742505618867256 +624 820 .13938547271161655 +626 820 -1.0269550361790198 +639 820 .5087011283977608 +640 820 -.4688055280080336 +655 820 1.2461305834276875 +676 820 -1.6472352298881676 +686 820 -1.0453952243626674 +704 820 -.11388506202989937 +722 820 -.58326858294663 +747 820 -.9100854737102734 +749 820 -1.2218166847242555 +772 820 -.9920907344686668 +792 820 -.6123398722409827 +797 820 -.08046443641483501 +841 820 .23732268586339278 +852 820 -.2552740143512228 +870 820 1.1506767012663 +884 820 -.3487201332125852 +889 820 .37962153216802874 +893 820 .9459879017845558 +907 820 -1.0220880471608622 +923 820 .2782688614431706 +924 820 -.1372102859955298 +977 820 1.715291027876391 +985 820 .43232677045342516 +995 820 -.5890005454406608 +997 820 -1.3677658714069116 +5 821 -.05329761012283408 +10 821 .806734020803228 +40 821 1.0585111369420936 +41 821 -2.8350603643430095 +87 821 .5361785874129219 +93 821 .45107609537954607 +116 821 -.48008315878855584 +153 821 -.3179758107877903 +189 821 -.48595051433288006 +194 821 -.3735254964901124 +196 821 .01936279222146632 +222 821 -.5550900739215816 +224 821 .5974114016297888 +238 821 .27737888194695837 +240 821 -1.7867914899405533 +250 821 .2836219882073447 +283 821 .7937024555538494 +289 821 1.5268325604850181 +290 821 -.008203884592150143 +291 821 .04752321961092611 +305 821 -.296825726771319 +313 821 -.33415500826772077 +333 821 .33666964668125565 +338 821 .9761528221770254 +352 821 -.6950996643834912 +359 821 2.309689702854445 +361 821 .024512547908276672 +371 821 -.8186681337896189 +380 821 -1.1717254747906405 +392 821 -.07096210351328289 +399 821 1.2893146428105897 +401 821 -.8302840461195523 +403 821 -1.6627371208821788 +420 821 .5669939510992231 +422 821 -.36400088614837955 +452 821 -.013415847795902477 +453 821 .12616544075205494 +463 821 1.1889253293065978 +470 821 1.2600335258673765 +475 821 -.37882790732289956 +483 821 -.19210567892943878 +492 821 1.4719590395456241 +508 821 -.1993937265784925 +523 821 .4549883520370514 +525 821 1.4015875759016168 +529 821 .45669584486421877 +553 821 -.957430048320895 +586 821 .9361020162459142 +587 821 -.866966335327086 +597 821 -.3658300314427408 +610 821 -1.5611043047739295 +620 821 .831095375295902 +626 821 -.7912204837950989 +642 821 1.4770260038019742 +648 821 1.1506365304324166 +650 821 .7036901799613076 +665 821 1.599096471713959 +673 821 -.0676585678932313 +686 821 1.0827750567323793 +697 821 .2847454074247543 +700 821 .5991737494911924 +707 821 1.259132611881039 +715 821 -.022442068078941335 +729 821 -.1044598345748031 +748 821 .15401619639134143 +750 821 -1.100876571833708 +772 821 -.11322684667664548 +776 821 -.6092358740348306 +782 821 .5393365098388628 +783 821 .185756894208518 +787 821 -.40125078927374935 +790 821 -.3489093820737184 +800 821 .8626512744815759 +810 821 1.3513537550546917 +815 821 -.5765981377641878 +819 821 .6066068009437237 +840 821 .38097166269650207 +843 821 .8176307621981987 +855 821 .463552576058353 +859 821 -.14381221407962475 +861 821 -.4121226786855268 +875 821 .268005778519861 +882 821 -1.9226424031328677 +884 821 -.48197227455764313 +889 821 -.7857396801897338 +894 821 1.8163775055438105 +900 821 .4891832646447815 +918 821 1.1696116438466118 +930 821 .6313589064227152 +950 821 -1.0060455204032335 +951 821 .6054441621247137 +970 821 1.1871340888994666 +986 821 -2.1262383487202787 +991 821 .5294591926903234 +992 821 .7718783395532224 +999 821 -.01864759564104096 +4 822 -.48534350977155005 +5 822 -.7366444842081054 +6 822 1.2084790146463822 +10 822 1.5777461177237542 +14 822 .05451230494313694 +24 822 -.521452209564008 +41 822 2.5402592346128996 +50 822 .30982945283666774 +52 822 .7439287410927972 +58 822 -.16008967923249254 +75 822 .447624156401271 +84 822 .6540747102277726 +87 822 -.15446548605497662 +94 822 1.1169257296735586 +100 822 -.9621550302108293 +110 822 .38729899291464476 +144 822 .9515951151628944 +163 822 -.9131959509259193 +165 822 -.5056324431580765 +195 822 .6583940661158629 +210 822 .2255499285384471 +222 822 .4938455182767359 +252 822 -.4446663489634156 +268 822 -.2823525489810448 +273 822 .25762463275380243 +288 822 .7579469440439456 +296 822 .1452625626143199 +301 822 -1.8115152670239403 +306 822 1.1985029518590429 +330 822 .2333358207242456 +334 822 .6064329101824647 +336 822 .14905751411520385 +353 822 .6113813369044842 +367 822 -.09054889591430143 +371 822 .6496554686697733 +379 822 .04467464290039476 +386 822 1.093555989545615 +387 822 .8711657645851528 +396 822 -1.543550379008497 +412 822 -.016306688381880322 +435 822 -1.4764086232824258 +436 822 .08841334445574686 +439 822 -1.4986906106333993 +443 822 1.0581716863132464 +450 822 .07343378332246076 +451 822 1.6288388319991012 +481 822 1.2128308402677845 +514 822 .3831760035943893 +523 822 -.023741011707856738 +524 822 1.2312975962247108 +545 822 1.115195705137685 +553 822 -.04859316312611815 +557 822 .12384588486950593 +558 822 -.8381912947385521 +565 822 -.3528414359097498 +596 822 -.8704476212850945 +598 822 -.4363579830197416 +609 822 .38193882050210276 +620 822 -1.0626273237027704 +635 822 .10727290720475091 +650 822 .25535499596731925 +677 822 .4803776119026625 +690 822 .14965836181314127 +707 822 -.20858827129934285 +741 822 -.5980612643052572 +744 822 -.661444646436253 +749 822 -.6352366889831956 +762 822 -.6929805365463787 +775 822 -.01503335030592262 +786 822 .9177994789487696 +788 822 1.2762345201246246 +789 822 -.044833725960957596 +800 822 -.5167746776435442 +808 822 -1.261468068384057 +812 822 .04304556441838913 +834 822 -.33100668205426165 +840 822 -.609112804800348 +848 822 .979900775618419 +849 822 -1.1800796639059863 +859 822 .358360809565207 +866 822 -.3475891482956766 +868 822 1.7698400250161783 +869 822 -.7461102546425826 +870 822 .9600968256565409 +879 822 -.6860344948514834 +881 822 .2955520074691232 +883 822 -.9069161019692146 +902 822 -.008027832643867569 +904 822 .4139424144763044 +907 822 .9528644614806127 +939 822 .29777144101327857 +948 822 -.9193281339824682 +967 822 1.104899755720269 +971 822 .7572491848956127 +977 822 -.22377473638451548 +997 822 .3275689905050989 +3 823 .31015069027435654 +10 823 2.4434279469083684 +12 823 -1.0091463556316225 +17 823 .8387224757052226 +43 823 -3.248214455068384 +51 823 -.11563434580553049 +59 823 .18710572100167816 +63 823 .7323326418240829 +65 823 .7371388696080612 +77 823 -.22302500893927246 +96 823 -1.6305616561924619 +112 823 -.5193663704561337 +124 823 -.598678146692547 +134 823 -.14183041390815498 +150 823 .12286743075523845 +153 823 1.3138274351856665 +154 823 -1.6043798830976956 +169 823 -1.360644073764757 +180 823 -.632677818219363 +182 823 .47102166677103013 +222 823 .42713303378791445 +226 823 -1.6423612452663874 +240 823 .7745399992788148 +246 823 -.28707306565998236 +249 823 .15678131796879777 +262 823 -.8831879994018926 +263 823 -.5463958679656858 +281 823 -1.609472987536364 +316 823 -1.7457419592921462 +318 823 1.8826739168311344 +361 823 -2.210318567671025 +363 823 .8573254004350128 +368 823 -.3385080107362244 +375 823 .39790136628982586 +377 823 .24811808017659565 +383 823 -1.8196418665026222 +396 823 -1.7420096450631444 +397 823 -.343156601553596 +399 823 -.47023925243542214 +402 823 -2.034776130096121 +407 823 .057226024045048465 +415 823 .9110041491701802 +424 823 -2.455931232988503 +441 823 .8906881522855004 +456 823 -.38434354546443467 +465 823 1.2249100539417255 +467 823 1.0135435581998724 +472 823 .5895142845754601 +476 823 1.519358134046171 +486 823 -.3263740234782745 +488 823 -.7079797956948224 +491 823 .44358562676246344 +499 823 -.420999021652222 +509 823 .4127086978036017 +532 823 .17696469130395096 +533 823 .30034434819655353 +535 823 .023595557664839423 +539 823 1.8146049437011027 +544 823 -1.5938412104116062 +550 823 -.43345417714803575 +554 823 -.6206053837226967 +564 823 2.461923145744879 +571 823 .587352692015551 +575 823 .142856472070286 +580 823 .05368543379158022 +585 823 .8667806037766149 +586 823 .21839047383202134 +610 823 2.120842738252367 +618 823 -.8178407078257157 +630 823 -1.6992730302380858 +637 823 1.3687812335868466 +643 823 .40840144758336505 +648 823 .23780311574285334 +652 823 1.2796973586548506 +657 823 -.959367513326353 +659 823 -1.5302250189587825 +674 823 1.5885231610219899 +683 823 -.35880203427170904 +713 823 -.16859513414170121 +721 823 -2.7627389584819078 +731 823 2.0769669915489186 +741 823 -1.0545315378470799 +742 823 2.9358109108412975 +747 823 -.8089983955966692 +767 823 -1.0909452956510857 +770 823 2.4196828371463797 +772 823 1.773077102057131 +789 823 -.9879052060789123 +798 823 .20314885133610533 +807 823 -1.0453857360770402 +821 823 .12814044467370495 +832 823 -1.176762604740962 +839 823 -.5903348421528064 +852 823 -.3810177687876365 +861 823 -.6648525483424069 +874 823 .7533740763376693 +877 823 -.22294484297993855 +914 823 1.2359814405514684 +930 823 .28880147369477005 +933 823 2.1645859021179272 +945 823 .41578916933980103 +960 823 .04029361754539437 +961 823 .39072056384267734 +967 823 3.8485731145259443 +974 823 -.4427693453432433 +987 823 .21080848740087896 +996 823 -1.2775281956983702 +1 824 -.12615368432571145 +3 824 1.918967596595878 +4 824 -.7656460039149333 +5 824 1.8311241968117047 +18 824 2.0710052298609285 +22 824 -1.7460592061506512 +40 824 -.5450697321420263 +54 824 1.4044858374431817 +65 824 .7953801152390444 +93 824 -.3903920795049918 +94 824 .25522951881207945 +103 824 -3.25439192893384 +122 824 .704958852232471 +124 824 .3420519164205117 +133 824 .7268725558348897 +134 824 -.15922250896714718 +136 824 -.7481356928892656 +146 824 .14229694148775154 +150 824 .3360570746273375 +152 824 2.8428160373200857 +177 824 -.0226878407934743 +183 824 .008294491285055786 +187 824 .14675045090961225 +189 824 -.5569161825751912 +195 824 -1.486258399431486 +202 824 -.9055754848692532 +206 824 2.5171089559880784 +215 824 -2.097005083683537 +220 824 -1.5963465342904017 +234 824 2.286218298382082 +246 824 .9703812948850059 +253 824 .8275284229973745 +254 824 1.5943071609785842 +262 824 .49756399997723333 +273 824 .410168899290294 +277 824 .034249655530742426 +291 824 -3.7962078962311034 +295 824 .264439966407803 +302 824 3.1143836023748785 +303 824 -2.08789573460151 +326 824 .7240684299512988 +333 824 1.0255151182083857 +345 824 1.5394014391969864 +347 824 .01574360288458762 +352 824 -2.1555828331108504 +358 824 2.9459857315475166 +360 824 -1.4353155862632996 +379 824 -2.567460990450844 +382 824 .8761298157400278 +392 824 2.71931185829976 +404 824 -.728259094795611 +406 824 .017406200074592065 +413 824 .10848206581508896 +419 824 -1.208590097974234 +424 824 -.5145654837981164 +443 824 -.6490110116667571 +446 824 -2.6008495015318536 +459 824 -.002675358679827544 +464 824 2.2527011885350325 +477 824 2.9461157433109655 +487 824 1.884081845476666 +502 824 1.5048228836983932 +508 824 -.7976444115664614 +509 824 -1.104196520156758 +522 824 -.40056397772216407 +534 824 .5686424229724916 +538 824 2.3585385349010166 +548 824 -.9619010546570259 +565 824 -.3998332347271605 +573 824 -1.3739515254119057 +599 824 2.633776850824403 +603 824 .6082063183044957 +614 824 -1.329342584670773 +621 824 1.391810448990302 +633 824 .3919608548503468 +637 824 3.0008365782287845 +644 824 1.6647573665490814 +645 824 -1.1867833342816114 +657 824 -.2964841084840247 +680 824 1.4078458071294624 +684 824 .5586862013454197 +703 824 .3621027787850417 +706 824 .3778328881009087 +710 824 .22010415675158934 +713 824 -1.4997141794487445 +726 824 -1.628653310247901 +739 824 1.0827359238942893 +740 824 -2.372955950360114 +755 824 1.7865807350136003 +761 824 .7796489177234015 +764 824 -.391676723154148 +791 824 -.510889766930614 +792 824 -.7591658179955577 +829 824 .8531509699659132 +858 824 1.291056294930263 +860 824 2.071081289824678 +890 824 .9826375925145393 +907 824 .7148096961276398 +923 824 -1.9578910517352637 +928 824 -.8578135578196792 +937 824 .6954727364069496 +941 824 -1.5948432605757312 +946 824 -.35822257768507837 +948 824 -.6865640954203368 +950 824 -.9336915185671194 +951 824 .565278864598347 +962 824 -.24604559595063857 +983 824 2.9055883988576743 +989 824 -1.9223719493218858 +992 824 -1.5444609221332068 +1 825 1.9323002791744357 +3 825 .2690139635852755 +4 825 -.3290543572670923 +14 825 -1.143700361421312 +19 825 2.1591917831342924 +34 825 1.8012405056908063 +51 825 -.18559058833632883 +79 825 .9744273291939558 +98 825 -1.082170340717752 +131 825 -1.1255512309706257 +132 825 -.4941558456918401 +144 825 -.9827190855547879 +148 825 -.6822858297648181 +149 825 1.1472585997473548 +151 825 -.8082435305499378 +153 825 -2.286574918596488 +161 825 -.17669769262827917 +176 825 .4819258683059857 +193 825 .7590314647122405 +215 825 -2.07888362291815 +249 825 -2.1026348294481076 +251 825 1.7992605650045144 +253 825 1.486512159060916 +262 825 1.586160478434404 +272 825 .3685035626374702 +273 825 .5753355274407965 +288 825 .763002645451305 +291 825 -1.5375148247848196 +302 825 2.648966737726608 +313 825 -.8311827073645106 +317 825 -1.4842701065604818 +334 825 1.083110095111596 +350 825 -2.267582689880063 +372 825 2.7288271115340934 +377 825 -1.4528669026388623 +400 825 -1.2538361279889971 +403 825 -.9275399498744956 +406 825 1.0779970075558751 +413 825 1.0203153166091932 +429 825 -1.372102273766127 +434 825 -.9226569798645878 +440 825 -3.8998141759077405 +453 825 -3.5494781673451423 +455 825 1.212395469218969 +460 825 1.987070458245063 +479 825 -.16750786080979918 +484 825 -2.4113964859093424 +499 825 1.5497445635666791 +500 825 .4097944897178418 +515 825 .2543950389836687 +520 825 .3245234193335082 +546 825 -.02818081242541265 +559 825 -.8033636604397401 +562 825 2.0027826611617803 +564 825 1.0379494021627027 +571 825 3.1774718657138594 +572 825 -2.6453886450301454 +578 825 .9406564475867907 +583 825 1.4084984369481 +608 825 -1.6520507077792668 +621 825 2.1874226259797758 +639 825 2.1859226182711753 +646 825 1.3441520126371815 +672 825 -1.4510401622442979 +675 825 -3.5150243420914107 +681 825 -.19875174348523242 +689 825 1.6610210556370553 +699 825 -.0008241673703224955 +701 825 -1.7063476351023168 +706 825 .6498871395449303 +736 825 -.49810525870076144 +774 825 1.3621386547090548 +787 825 -3.35057955337393 +793 825 .7159351047881651 +844 825 -2.4847115569229445 +848 825 -2.0840709989793558 +875 825 .27696998014557506 +892 825 1.2397368177177626 +900 825 -.48399196674854383 +901 825 -1.0973845126786705 +912 825 .6733942386709229 +918 825 -1.02968229570856 +921 825 -2.4731257612751154 +932 825 .9882820365607101 +937 825 -.7269310783590894 +940 825 -.2145477306174163 +941 825 -1.3875596264484806 +960 825 2.0085400400568822 +979 825 -.37850034389053755 +981 825 1.8448118325185656 +2 826 .4100938557181431 +16 826 .9318715667088163 +27 826 1.7405831116484927 +63 826 -.048755092799516106 +67 826 -.8143544172659101 +85 826 1.080687945026534 +88 826 .22900010292494427 +91 826 -.25975937990395914 +100 826 -.3465817677053844 +105 826 -.06146392141313731 +106 826 1.173593087148288 +118 826 .22811009903301582 +124 826 -.23074713044373762 +129 826 1.35402877472497 +132 826 .24320246247233973 +134 826 1.318897199030901 +151 826 1.5061430665046096 +168 826 -1.9031924461953238 +188 826 -.7549541165169195 +198 826 1.6973206994087353 +202 826 .34071101560935746 +209 826 .7785739878855413 +223 826 1.0899079506991196 +257 826 -.06112324128933609 +262 826 -.24595015785931418 +277 826 -.30434080730294216 +283 826 -.34517934744945544 +289 826 -.9974500787172402 +299 826 -.583149529406248 +306 826 1.9766559186728636 +311 826 .5322488288712806 +316 826 .2684162353750163 +317 826 -.2919642065762428 +320 826 1.1039799337941374 +334 826 -.4804584615546302 +347 826 -.25017520162302276 +367 826 .2164304244430969 +370 826 .2342322680078081 +382 826 .39131175196537676 +383 826 .4913282468045136 +390 826 -.1795826161310814 +394 826 .08594510910746701 +396 826 -1.224641279971005 +422 826 -.6040709997587314 +432 826 -1.0327298716498992 +437 826 -.09318611854749918 +445 826 1.6502272367434279 +494 826 .5122940610232034 +496 826 .06991814720243356 +497 826 -2.1787300396548246 +500 826 -.5041461260824412 +503 826 1.0352695956172517 +506 826 -1.3507322720914825 +510 826 1.5291744436267647 +513 826 1.4869858108266505 +519 826 -.5606249158953627 +522 826 1.1336191853603892 +529 826 -.6316908929556927 +535 826 -1.899568765718262 +559 826 .07021045947482075 +571 826 -.5075415047379529 +579 826 .2783128765312383 +580 826 -.0286027024214896 +587 826 1.049475098634314 +616 826 -.05841275994829248 +621 826 -.2743238739825572 +631 826 .4948537686329966 +632 826 -.275760466713564 +647 826 -.22371778859990193 +649 826 -.2656054604246891 +672 826 -1.4693125069920492 +682 826 -.2993707259681485 +694 826 1.7097385817696857 +697 826 .38947884453765513 +701 826 -.6049759223178064 +705 826 .22995408482319601 +713 826 .16190654785734612 +717 826 -.8564960112093881 +718 826 -.13414975871811236 +721 826 1.0769607941217927 +734 826 -.04964769739218197 +736 826 .7067065543969905 +748 826 -1.6349193018515693 +749 826 .32675171655816904 +759 826 .3933133942445553 +762 826 .5459218922297955 +768 826 -.183809742297447 +770 826 -1.3792759384836084 +890 826 -1.7741018807226157 +891 826 -1.0030483515211464 +899 826 -.8764482623540258 +902 826 -1.2763889908252803 +912 826 1.1250278167451289 +913 826 -1.0028991603988526 +914 826 -1.5109353978556497 +915 826 1.0599110133163736 +920 826 .009075354922227358 +924 826 .36654892524688987 +925 826 .17061144129467024 +930 826 .714335969228918 +934 826 .3250891624034248 +969 826 -1.6071149367376787 +981 826 -.8592518423357601 +983 826 -2.132928442915487 +999 826 2.263249293990863 +29 827 -1.0017535367406964 +63 827 .9513949568197985 +70 827 -.07165144961950765 +89 827 -.2284481196962072 +90 827 1.1666095219149093 +93 827 -.8649279469618959 +94 827 -1.4513072964928966 +96 827 -.5302503878337883 +97 827 -.8247925296746379 +105 827 .4824870500604266 +125 827 1.3466793857051158 +150 827 .48263415504203966 +152 827 .02454872372489178 +156 827 .174579179098514 +170 827 .5025742952318976 +181 827 -.2369350871530446 +202 827 1.447630304078498 +211 827 -1.5694341325899217 +214 827 -.7168744870449107 +240 827 -1.9076051837749397 +248 827 -1.9227317336038028 +260 827 .04308053940600882 +271 827 .9483521069472315 +281 827 1.768240880637693 +297 827 1.4541845881475417 +299 827 .07450772642366708 +308 827 1.337557308363576 +319 827 -.38222477296517277 +324 827 -.9750553293834346 +364 827 -.5876733070508282 +370 827 .2712293077472875 +372 827 1.2367659896342562 +405 827 -1.3345579045117195 +408 827 -.5887460707562033 +411 827 .5367018911542382 +420 827 .5374956726063751 +425 827 -1.1678510093438015 +436 827 -.44876583399644165 +437 827 .09326939944548789 +456 827 .25391816563419023 +462 827 1.0365339305389416 +478 827 .6510471721260802 +495 827 .12934665317134933 +503 827 1.0833679814964414 +526 827 -.4599637487766182 +549 827 -.07011267955790994 +553 827 1.084711890932601 +561 827 .3637903664625887 +570 827 -.43954993426433625 +572 827 .7283794825152794 +585 827 -1.1704144564411565 +592 827 -1.9680008298747564 +603 827 -.7104246856346659 +610 827 -.395312342743661 +612 827 -.09792200469477319 +621 827 .11228422245950631 +634 827 -1.4968845949508025 +648 827 1.1217562338476958 +652 827 -.5855289851101372 +653 827 -.6058295814912509 +654 827 -.5120750084063204 +657 827 -1.3418657731752182 +660 827 -.56735312797165 +664 827 .6290480225571693 +670 827 1.3199853307553195 +683 827 .11873636374480365 +687 827 .8724826202108314 +689 827 .22837810150243965 +700 827 1.3222283516128006 +701 827 -.15956128789274632 +711 827 .7367227559660043 +718 827 -1.1677603939767245 +720 827 .5063093816777785 +721 827 -.7215147735625745 +734 827 .3691927864065127 +735 827 1.512737591167292 +747 827 -.18100043451150005 +755 827 -1.1800904140076203 +756 827 1.2028741284333286 +764 827 1.180880500704269 +778 827 .9416619639424639 +784 827 -.7823938019246872 +815 827 -.7563384774890206 +817 827 .5981364368889328 +828 827 -.1777836074286998 +839 827 .5392012643799611 +846 827 .3054770736641181 +856 827 .06459271105300508 +857 827 -.7136191826696634 +862 827 .3370282583758129 +881 827 .27415412868314554 +886 827 .7539034059051606 +888 827 1.5167269771002332 +901 827 -.08946933408961143 +911 827 -1.1553166145481188 +919 827 -1.1826573335034976 +932 827 -2.019276088144536 +968 827 .9724541881084025 +983 827 1.3414478492742383 +986 827 -1.195783340110936 +989 827 .3460128557238984 +990 827 2.411538534146143 +995 827 -.6175273162751377 +999 827 -.5025225668232731 +5 828 -.6827691141247072 +17 828 -1.719254287664802 +25 828 .029208922545916685 +29 828 -.5905711121378512 +44 828 -.19624219013503436 +54 828 -.6325243488102861 +79 828 .960808462678771 +87 828 -.1086711427281319 +90 828 -.04192498444470677 +92 828 1.2678683952212957 +98 828 -.197353203540867 +104 828 .21725023177763048 +118 828 .4753400364717867 +121 828 .9062484811543308 +140 828 -.7535513289914657 +141 828 1.0354521599726687 +152 828 -.2658518378851022 +166 828 1.3689697376363728 +167 828 .7385001328224461 +169 828 .2689280113829431 +178 828 -.4507039644052175 +190 828 -.9494991103709657 +204 828 -.7143118497340121 +214 828 -.2761859700150028 +229 828 -.8830388470312425 +231 828 .6323054015465546 +263 828 .3914098520584087 +264 828 1.9703215476901477 +271 828 -1.6562520989966287 +279 828 .15651883954399073 +288 828 -.8182499008535891 +298 828 1.3888756988399051 +316 828 1.557240274624472 +320 828 -.14804385012435334 +347 828 -.04129161436761854 +382 828 -.21952089146787557 +387 828 -.22365196954536753 +388 828 .34422816362640934 +404 828 -1.2065156545211235 +419 828 .8017020816140279 +426 828 -.6963757181362538 +437 828 .2964894098858937 +450 828 -2.385756574783319 +456 828 .9602398742371728 +458 828 -.6901535718931447 +463 828 .3038931440907744 +466 828 1.171446404834674 +471 828 -2.2245960363280677 +473 828 -.5488824937012933 +474 828 -1.0160997029218914 +496 828 1.2651516316525808 +497 828 -.9157324693092175 +498 828 .7157664351466911 +503 828 -.5351019902491281 +504 828 1.7330141808813289 +548 828 .6514926306199699 +588 828 .5517006001633029 +592 828 1.5659983750863378 +597 828 -.26303667612476705 +603 828 -.2844874666608943 +614 828 1.153266775936873 +623 828 -.011843015848752577 +626 828 -1.3247452481459785 +627 828 -1.3218264775556077 +662 828 -.3175092660081551 +671 828 -.07622679046410741 +681 828 1.8931501733905558 +691 828 .6021436184560429 +695 828 -1.1769800124665715 +698 828 -1.0413121728885244 +700 828 -.34003245253206177 +707 828 -.5277725621487452 +709 828 .44319666527432844 +746 828 .3365056110628084 +750 828 -.846734984780175 +756 828 -2.554185120395954 +760 828 .08387776782035794 +769 828 -.35220601720215283 +770 828 .2097602251704899 +786 828 -.35532629458239207 +792 828 .3314489246923053 +793 828 .7370972181858115 +815 828 .46244736347881843 +820 828 -.9945277322460728 +823 828 .03143439470001819 +828 828 1.619576451842982 +844 828 .8931777716947306 +875 828 -.5417138770649765 +879 828 -.8132801297957132 +887 828 -.8128188105534965 +901 828 .38756951971190556 +902 828 -.4027150884292067 +922 828 .5338039023664488 +923 828 .3616724314679176 +927 828 1.8245125129571031 +953 828 -1.3365903987602537 +976 828 1.427333555696253 +1 829 .9773024876766209 +17 829 -.8486259285480291 +23 829 .4196178179750448 +37 829 -1.2155674397920702 +40 829 2.2120804233238864 +41 829 -.056504696537148645 +66 829 .09808086728609203 +68 829 .8823831673533237 +69 829 -.3369064185654329 +112 829 1.5482668737448062 +117 829 -2.1001938822059296 +126 829 -.45848135590796363 +131 829 -.9609282918207138 +135 829 -1.6633488816676116 +152 829 1.8058468510002557 +180 829 .5688359643750697 +181 829 -.9967964650432707 +203 829 2.0097027866206654 +220 829 3.2289840196019486 +230 829 1.042096728089156 +241 829 .39714110482478826 +250 829 .506477419466748 +251 829 -2.072191913363544 +258 829 -.3694451149567814 +264 829 1.9005526754538795 +270 829 -.961232083628372 +280 829 1.9087744691831172 +302 829 .18904698804461326 +342 829 -1.2235295871208263 +346 829 -1.1036630395114375 +361 829 -.08155495407029964 +364 829 1.2135416765047504 +367 829 .5977695595599734 +374 829 2.394707740302952 +379 829 .653763842974561 +400 829 .30469700138147743 +422 829 1.3161277145502228 +444 829 -1.0727513012347543 +451 829 .935565950591318 +455 829 -2.5038180146841618 +477 829 -2.8184967822989786 +505 829 3.825606754651883 +521 829 -3.19615204248893 +528 829 -1.8389764792713434 +549 829 -.5877898316820845 +567 829 -.6668404927060164 +569 829 1.672559857011079 +594 829 -.12942419371062516 +598 829 1.6475731422895723 +604 829 -.41780873355298265 +623 829 2.2493115779375628 +633 829 -.1855117384147581 +652 829 1.404777971965687 +653 829 3.109748123687232 +658 829 -1.7219493661187617 +677 829 1.1440256229876848 +683 829 1.147240866494772 +695 829 -.7148410696010883 +698 829 -2.3162702841615705 +707 829 1.2953464453287526 +712 829 -2.2874069346403587 +715 829 1.2506590040793306 +717 829 1.9084470264992575 +721 829 .209171090867588 +733 829 -2.2870687838756876 +740 829 -1.2016425550473693 +743 829 -1.3568854588556958 +754 829 2.433830864203087 +760 829 1.2681587086944657 +763 829 -.9660342093339224 +765 829 1.5098114825806308 +778 829 -2.6749381542394937 +794 829 -.0020211258818502095 +851 829 -3.1894070390256988 +875 829 1.0931504623303216 +893 829 2.1378065584970924 +910 829 -.9605877074287952 +915 829 -.7994774756772054 +917 829 -.15296294155626766 +926 829 1.308361708155717 +931 829 -1.5109741144182856 +938 829 -.5913661900820723 +944 829 -1.1946893695646545 +947 829 -1.684896359012032 +955 829 1.376179813870537 +960 829 -.9776995530636403 +966 829 -.8133028215939783 +971 829 2.2864899603363424 +982 829 .11749865267924259 +986 829 .17606827420632143 +987 829 3.3646991125743204 +995 829 -1.0987009288623295 +996 829 -1.1412717712690994 +7 830 .5174378163577761 +9 830 1.468073329939964 +16 830 .5146916919784584 +22 830 1.250777221254857 +23 830 -.7957363752310429 +36 830 1.9382858873436843 +44 830 -.6408699021852553 +55 830 .3051547463469375 +59 830 -2.5755963666303834 +62 830 .3307237029897554 +74 830 -1.2874188683573224 +87 830 1.2469245069663029 +105 830 .7625520397266965 +117 830 1.5058162844938614 +132 830 -.3700240866620973 +134 830 .5117059919136491 +137 830 -1.4941000503767508 +152 830 .44275036383738336 +180 830 -.7707626969098673 +188 830 -1.8564127271119044 +197 830 .03945755928155162 +203 830 .9141452026857988 +206 830 .3146371425550427 +213 830 .9809957750071461 +220 830 .6618381183602013 +242 830 .21944768925746827 +244 830 2.4806114463093567 +250 830 1.3533818823080563 +253 830 1.0207851297422221 +292 830 .1313714335460382 +298 830 -.2901970812897837 +300 830 .41831341557483986 +304 830 .775234710304212 +308 830 -1.8991068497012362 +310 830 -.5191499521665071 +312 830 .8616004723099776 +353 830 1.9008945002552171 +367 830 .3135899602499458 +384 830 -.20378549666686335 +387 830 .6722493511583925 +392 830 .16009768983418587 +398 830 .6093406513828018 +412 830 -.5531276171926824 +421 830 .10705996912379931 +424 830 -.3459360447941026 +442 830 1.064944009214901 +451 830 1.2618253563117352 +455 830 -.25377443091073826 +458 830 1.4393485448798822 +463 830 .34096621024746837 +471 830 -.9428200495235549 +488 830 -.29394584486848674 +499 830 1.3080846732981855 +501 830 1.8166880428128964 +534 830 -.914244643871664 +536 830 .5652267863244316 +549 830 .3114898529185142 +555 830 .6650940601517873 +600 830 -1.8290951573248666 +607 830 .5099082950779913 +627 830 -.03952054148492107 +642 830 1.0649374526249464 +670 830 -1.0368646535458443 +686 830 -.17835271014071313 +702 830 -.12732911853922216 +716 830 .45324199118096936 +747 830 .20392200889168297 +759 830 .10430626451243877 +760 830 .1172431680674115 +770 830 .22732975118874843 +792 830 -.07010834330590593 +813 830 -.9610853437366728 +814 830 -1.216001126824896 +821 830 -.07406931852816516 +831 830 .6088516103212706 +836 830 -.5310450918227162 +849 830 -.31318510915722564 +850 830 .07336526860809497 +864 830 1.922363315850636 +887 830 .3091097370693455 +906 830 .40211532572705866 +926 830 -.13657657885248137 +932 830 1.6590766407633888 +935 830 -1.6542437681862354 +937 830 1.3421731778613621 +948 830 .13641736844580749 +951 830 1.0284807798542663 +954 830 -1.4778412064404252 +962 830 .762538773862892 +986 830 .29406004965827104 +13 831 .8513579026083319 +28 831 -.9057008140649208 +31 831 .9632684841887864 +33 831 -.19594900074716007 +47 831 .5422211081260908 +56 831 .8803934616410384 +65 831 -1.2180518198749466 +68 831 -.6650900337735735 +81 831 -.39764856496845646 +85 831 .030447989041672778 +114 831 1.2513834537720365 +122 831 .1187719854789589 +123 831 .5864044088516366 +146 831 .08500547137476162 +148 831 -.14726205471968296 +154 831 1.5129500154669684 +194 831 .9067153115871633 +209 831 .07796786445291799 +215 831 .27537863100595694 +216 831 -1.6656950454412258 +218 831 1.2601078154658416 +219 831 .9505870077538603 +230 831 -1.440705499556449 +234 831 -.22985858150576904 +252 831 -.6904949272449493 +255 831 .5375380056958027 +258 831 .9228736011050919 +283 831 -.5090374534771618 +292 831 .6385941804930785 +300 831 .6081492834328911 +307 831 -.3331340731335314 +313 831 .7602126934416328 +314 831 -1.3640622923937857 +320 831 1.0751432219119492 +331 831 -.3678473819768037 +337 831 .18604275397622735 +347 831 -.3238755384731081 +348 831 1.7080983388275586 +359 831 -1.261947042716569 +368 831 2.1816575387173045 +378 831 .313964572068505 +404 831 1.5074418877952176 +408 831 -1.3301546076311304 +423 831 .027413624625074573 +431 831 -1.209166598948718 +434 831 -.5921036968878224 +435 831 .34861435566011745 +442 831 -.557079104208608 +444 831 -.42503589326083746 +458 831 -.5120914949529184 +469 831 1.3619171212418826 +473 831 .010046667046735904 +479 831 -.5131000489328212 +482 831 .8550069117382099 +486 831 1.1387539754422344 +520 831 .9865515692063617 +548 831 -.007985921665058016 +573 831 .08374284339097646 +590 831 .8322670035961965 +595 831 -1.4983155536056467 +605 831 .6827397187045826 +609 831 1.8794221342148463 +611 831 .6551889207133929 +658 831 1.1828574580067148 +696 831 .44395777754558935 +698 831 1.3736104724318965 +702 831 .8434586497933281 +710 831 .4150472636043234 +720 831 .5507162369201417 +726 831 1.5071472752705377 +740 831 .8825685392115814 +756 831 -1.3788107842571788 +760 831 -.05372950545884196 +765 831 -1.0508374719088707 +776 831 .5521237000386837 +777 831 -.06191517304333215 +794 831 1.062626038027385 +799 831 -.18852677304909773 +801 831 -.10424101951127482 +806 831 -.1067305979112874 +816 831 -1.3467540438014982 +820 831 -2.0167914364526167 +830 831 -.06528969242967037 +843 831 .2069978671726849 +848 831 -1.5661173294044548 +859 831 1.476644137845666 +863 831 1.101062195684453 +867 831 -2.131147591833553 +868 831 -1.8046505273883209 +900 831 -.8362568370755316 +907 831 .3913284584981484 +914 831 -.6126376095409385 +920 831 .04883366358298444 +921 831 .9090844979516799 +938 831 -.7133783169756333 +939 831 .31769531067475465 +943 831 1.0195500388889636 +951 831 -.712837926952231 +971 831 -1.1310548182177254 +975 831 -.8279134657720958 +978 831 -.7383613686278463 +986 831 1.7402789811321326 +989 831 1.6850293102854423 +8 832 -1.1557943046260581 +27 832 1.5896774463363186 +39 832 .883757666879009 +55 832 -.30794510538675735 +62 832 -.6867510521143375 +69 832 -.4071511576869855 +77 832 .4540995120705449 +87 832 -1.764332099465844 +116 832 .4208922004599742 +120 832 -.9336587846407358 +127 832 .5916973891964263 +130 832 .24624640613456897 +138 832 1.326272340103334 +155 832 1.168434675322756 +175 832 .48512735018292763 +178 832 .12069644198872484 +181 832 .03860084120410237 +196 832 3.079139698929466 +199 832 .21280455385859487 +201 832 -.8712743682734119 +202 832 .7034834786443691 +209 832 1.8013885226521007 +233 832 -1.5993094712528362 +258 832 1.1663935921600714 +270 832 1.301517533853402 +276 832 .34197394268129355 +288 832 -.3111989090226195 +294 832 -.11858815173299742 +298 832 1.960088681189144 +327 832 .38764607603179135 +331 832 -.5571405559561323 +350 832 -.012536966762668042 +362 832 -.8075618255209518 +363 832 .12147723188758294 +364 832 -.6030465508137851 +411 832 1.3940843487215175 +420 832 -1.437561820341572 +429 832 -1.1828709609936987 +435 832 -.4274273791992492 +438 832 .21262455756791188 +447 832 1.4130918938300692 +449 832 1.780999710242764 +466 832 1.1437986952153565 +483 832 -1.0521591207966874 +486 832 .005184622242447673 +487 832 -.7394147879537026 +489 832 -.8112127904386499 +504 832 2.270521562528176 +512 832 -.3407187616050099 +534 832 1.2886670484981635 +537 832 1.683770611527372 +550 832 .5339157355398945 +555 832 -.03213278400255172 +570 832 -2.2739708510896857 +598 832 -.3439101365854761 +608 832 .06149056962974686 +635 832 1.714841803880134 +636 832 .27535188802432115 +668 832 -1.0222588185446704 +678 832 -.5106630285252152 +693 832 -1.093303922645734 +698 832 -.23213206441357975 +700 832 -.5892449741347598 +732 832 1.8451916284876324 +741 832 .37082407573571685 +745 832 1.3636996042773504 +746 832 .1035451779808994 +752 832 .6053729787534127 +755 832 -1.2124792585557147 +762 832 .8569668965313535 +776 832 -.45893053752852564 +791 832 1.543823796063739 +793 832 .9510675117801165 +803 832 -1.564501246309349 +804 832 -.8081297614010453 +808 832 -.6596913149571225 +809 832 .4388991578818413 +812 832 1.9735161492957594 +820 832 -1.8745683220633307 +823 832 .992781612194157 +832 832 .807253034811596 +839 832 .6612752923431924 +844 832 -.019281597405055948 +850 832 .16230834301421343 +854 832 -1.405977776712009 +862 832 .4054492808095804 +865 832 -.3640807108538784 +880 832 -1.1049781438642157 +889 832 -.76144591281386 +895 832 1.5035459521487264 +912 832 1.546147892687113 +922 832 .8801067846185564 +934 832 -1.2287289411657565 +935 832 -.2505256910205498 +941 832 1.8992586822506283 +944 832 .43605973969132134 +948 832 -.29752984858259046 +949 832 .7121945629329216 +989 832 1.9323627804810306 +995 832 -2.677780636071715 +998 832 2.1820489908817424 +7 833 .40291034355836136 +50 833 -1.4062787611823915 +53 833 .4701898531580823 +58 833 -.2979685525646818 +60 833 1.2704479828936395 +72 833 2.3071814225236262 +75 833 .2939460032328941 +106 833 -.634861157357673 +112 833 .6070972171021791 +120 833 1.0696828551433102 +140 833 .3925563849013722 +159 833 .35491691903003053 +179 833 -1.1632610760715285 +181 833 -.12164341816981403 +191 833 -.8538113609398639 +202 833 -.6709393236107998 +210 833 .4309953677283098 +215 833 -.726087206152899 +231 833 -.5471020191958935 +236 833 .08432096663349516 +262 833 -.7801688005910816 +263 833 -2.194770017941373 +276 833 2.527929208631702 +282 833 -.8766817487063591 +285 833 -1.2026017215918077 +295 833 -1.7245831643906846 +300 833 -.25505601223158325 +304 833 -.6608130363684936 +307 833 .3011145028442041 +309 833 -.23698819836305715 +312 833 1.3296038776663879 +315 833 -1.866777492867069 +322 833 -.37213018000707854 +323 833 .5660278931981151 +329 833 -1.9203939267121397 +330 833 .5277701268954541 +345 833 1.05443257738994 +349 833 .34282196701441264 +357 833 .009505791371791306 +360 833 -.4920472436414015 +369 833 .23528846912161347 +386 833 -.7258996559928923 +397 833 .5352246338943405 +415 833 -.17887886242412132 +435 833 1.1813252032913244 +449 833 -.7066665341296531 +458 833 -1.359122909567862 +489 833 -.5977662130034289 +505 833 2.143747646978865 +510 833 .22969206313345145 +522 833 -.07149242994904889 +528 833 -.6210221600398148 +531 833 .9622820543455076 +532 833 -.9968687104614032 +535 833 1.0489364840547055 +567 833 -.7947830277672329 +578 833 -1.1230062274784958 +579 833 .20257681745151132 +590 833 -.2963444930688398 +601 833 -.9140422335099315 +615 833 -1.4106073102731789 +617 833 .1725143939409086 +621 833 .7507239666633151 +627 833 -.8017595615369326 +633 833 -.4511919017723536 +637 833 -.9536929052307856 +639 833 1.1962425545642952 +646 833 .4450293950743194 +649 833 .4958844834575745 +650 833 -.775709404211956 +668 833 .4745187969701859 +675 833 .03507724387099027 +700 833 1.2220604996818867 +708 833 .05965853946294192 +718 833 -.28267614721366463 +723 833 -2.811447619230584 +747 833 -.8091128549090668 +750 833 .6177640220714488 +751 833 -.8494502951519733 +753 833 .6392240638215201 +770 833 .17110521016737246 +771 833 .4858733104849406 +799 833 -1.5885543632195307 +812 833 1.0954615887705534 +816 833 .9231636054110339 +823 833 2.2878744067609746 +831 833 -1.6414266368643478 +834 833 .4919582977261729 +850 833 -.41206165997484884 +855 833 1.4273900792546854 +856 833 .05408034395895428 +863 833 .2975137402237581 +875 833 .6436061854164997 +876 833 -1.3558132905764153 +883 833 1.1272469294628202 +884 833 -.06655760006454861 +887 833 .9418042231413385 +898 833 1.13291167445203 +908 833 1.568849387440809 +919 833 .35526493762703193 +920 833 .26056888428533853 +933 833 .09936882564932512 +937 833 -1.409913372583177 +939 833 -.40552485610064626 +956 833 -.5456274562568704 +958 833 1.3810431305369344 +964 833 .828222890306122 +979 833 -1.2708113013516806 +983 833 1.9698452354383498 +994 833 2.158213208445275 +996 833 -.7956724264660029 +6 834 -.3692964031402006 +13 834 .03308672967721919 +42 834 .09567802167367459 +52 834 -1.1136469173156636 +57 834 -.8681655905632023 +79 834 .7761016891882613 +87 834 -.9392267081086851 +90 834 -.1896513040763957 +94 834 1.0369719083295041 +104 834 -.8069763979909136 +131 834 .23178595873862917 +138 834 -1.2591682048938773 +141 834 -1.5914152615829098 +155 834 .792351758393058 +175 834 -2.567777829246281 +181 834 -.8866661503548717 +194 834 2.0820870220215317 +203 834 -1.175105100149316 +225 834 -.36178022780981584 +241 834 1.2033947614853788 +265 834 -.624933049031994 +266 834 -1.2555156032781818 +269 834 .005028065152912042 +273 834 -1.5609528725580233 +276 834 -.49102335264041613 +277 834 -1.628876202015609 +280 834 -.33229719186642986 +296 834 -.3575825173829229 +302 834 .9832061097248125 +327 834 -.09621811920132747 +331 834 .4668537991857534 +332 834 .8153763402313519 +370 834 -.17330342562949902 +384 834 .39995206853166343 +411 834 .7191734499098555 +433 834 -.2620413099151051 +446 834 -1.6729553530310666 +450 834 2.1007528211951847 +458 834 1.7737105782014295 +464 834 2.682009364919302 +489 834 .5614686445585663 +495 834 .5769888848798703 +497 834 -.1580803228707601 +506 834 -.2841353375510567 +542 834 -1.698310591141991 +550 834 .14536212602536924 +551 834 -.14348673642026852 +559 834 1.211107600865211 +565 834 -1.2349240864741373 +569 834 -.5568352489155826 +580 834 -.7005413826790845 +586 834 -.5520831958117367 +589 834 -.6957131832263967 +600 834 -.587428729691869 +601 834 .7440923444855846 +602 834 -.5831210642189687 +604 834 .8688192320879929 +612 834 3.4061599474219912 +619 834 .5172732789845403 +629 834 -1.303752668120556 +641 834 .6760656147543311 +643 834 -.3604370528181179 +644 834 1.7334458059813733 +651 834 -.715744733444162 +668 834 -1.0173843594676835 +687 834 -.012318589568885707 +689 834 -.8955579233556344 +697 834 -.29000993053369195 +699 834 1.212572887833078 +710 834 1.1552258819644081 +717 834 -1.3020399689665623 +754 834 -.37608095032009514 +762 834 -.48582978627299844 +771 834 -2.163384040758394 +776 834 2.0897532398401477 +786 834 -.4854395256391212 +787 834 .3309586937117242 +788 834 1.4493553744733658 +791 834 -.2784182989622531 +821 834 -.8936642738839253 +830 834 -.7272328564546291 +851 834 1.038637007370414 +855 834 .5605450337278081 +856 834 .9629040656538289 +884 834 1.8001973148802783 +888 834 .2788230901837872 +902 834 -1.083660880079898 +923 834 -.5064586387169931 +925 834 1.2461440470398975 +926 834 -.8431122144466698 +927 834 -1.6051613452457383 +953 834 2.9393578133156497 +959 834 .22286394206826307 +964 834 -.8813657268479043 +975 834 -.6340220444197393 +996 834 .6102745509158956 +6 835 -.6737453628950876 +8 835 .6826909215090149 +20 835 .29562994651638136 +26 835 .4686801675727752 +32 835 -.6683688328004588 +51 835 -.0540807151241956 +69 835 -.6296122452088336 +70 835 .022465595300808137 +78 835 -.5299003147411451 +81 835 .5954315489511451 +82 835 .003268548483107543 +92 835 .6678618604429872 +97 835 -.4559007195006942 +106 835 -.8841487637685854 +134 835 .20414528107527713 +136 835 1.374511205873871 +192 835 -.8562703626031078 +211 835 1.2351175534883923 +214 835 .36888339667191744 +215 835 -.1629087258103859 +229 835 -.17739969576004194 +236 835 .5180302520628348 +270 835 -2.0962448797866435 +271 835 -.13306112969982536 +280 835 -.29963531207547967 +282 835 -.21384311636401335 +300 835 .04188845866084194 +303 835 -.4659558813344174 +307 835 -1.1554873321679808 +313 835 .9105795609819047 +321 835 .2533092880228415 +323 835 -1.5654150857124223 +324 835 .9328432141437721 +360 835 .7760500863042564 +386 835 .2064053214042495 +410 835 .028621203784072485 +411 835 -1.0489530157779159 +417 835 -.4915962822633597 +423 835 .43946181797026884 +426 835 -.2602960429982873 +429 835 -.054137681201851556 +430 835 1.9394189334921046 +436 835 .29226999804840176 +444 835 -.49079779978378457 +447 835 1.0375660828499436 +478 835 .5291272078880647 +481 835 .16981030656226892 +487 835 -1.7430728104042326 +489 835 .7296394874944577 +492 835 .8371160016231283 +504 835 .22492749177359406 +518 835 -.3576261976745079 +522 835 -.03705550074939816 +535 835 -1.3360097027631448 +544 835 -1.192478374243325 +555 835 .15365117291382238 +558 835 .30206735764642845 +581 835 1.4964193270695376 +587 835 .8316963464581253 +588 835 .6956596192299078 +605 835 -.906180449912962 +619 835 .037939891626557795 +623 835 -.5052257940208813 +626 835 -.2586467170863099 +627 835 .14997680468997526 +629 835 -.442599213012871 +658 835 .20192213258021469 +678 835 .6159869480986656 +699 835 .2483328916191247 +725 835 1.4963862683828475 +732 835 -.560506375184579 +740 835 -.4036464196726623 +742 835 -.0839589345236095 +773 835 2.334834619597155 +782 835 -.06400673460519786 +795 835 -.8391040510019867 +804 835 .6270593119536514 +808 835 1.0766523082165989 +826 835 .18593513660686295 +834 835 -.014710797796465502 +838 835 -.4839368385219772 +877 835 -1.6082426809483206 +901 835 .1455441225175036 +908 835 1.8703619839994743 +919 835 .8425570876456617 +932 835 .3578088798626055 +941 835 .1579638187062372 +965 835 -.7547968110572154 +966 835 .638615185934648 +982 835 .5065902409225448 +983 835 -.20229047238463344 +984 835 1.214005090943716 +990 835 -2.348914215346916 +999 835 1.1360231524971192 +10 836 -.8493371708058748 +21 836 .5499375708176318 +47 836 1.5107818199875243 +66 836 -1.7782522530616047 +73 836 .3100815270440813 +74 836 1.3293775952688531 +91 836 .091690005639195 +100 836 .09420465381192121 +106 836 -.26938007548340026 +109 836 -1.5140201926042858 +122 836 .34113814546908006 +133 836 .20643751326189475 +144 836 .3660470617133485 +154 836 1.1712729817530263 +158 836 .12907380363408935 +161 836 .40626910970374014 +165 836 -1.394691423818134 +168 836 -.29272969247378716 +213 836 -.7673710842626911 +232 836 1.1958862140479767 +236 836 .5613372643682433 +253 836 -.23096769240340517 +258 836 .5330934757958444 +260 836 .8422468290781753 +263 836 .7961308735101584 +264 836 -1.4959610775132832 +274 836 1.4889475589847214 +280 836 -.183777668521099 +306 836 -1.3437579682378804 +310 836 -.10743845422977143 +316 836 -.024054920766510918 +325 836 -1.0640970030592027 +326 836 -.38445592457668953 +330 836 -.8550669511011899 +346 836 .46577017659797604 +365 836 -1.2622292748009232 +414 836 .32609431441347525 +419 836 .03220404637182589 +421 836 .7431097528389243 +437 836 .21239983929025208 +446 836 .7821378873781429 +461 836 -1.5282226298285384 +474 836 -.10451143064419847 +484 836 .9901933688670252 +488 836 .9218548197374175 +496 836 -.6610302106725823 +498 836 -.9666770008474436 +501 836 -.14203967526223316 +526 836 1.3667479141238488 +547 836 .5161320749929696 +549 836 .12785269211855235 +559 836 -1.4344096182823316 +566 836 -.37288214797338043 +582 836 .1114344526434955 +585 836 1.2783384863682317 +593 836 -.5357565272856438 +607 836 .5115354208059884 +610 836 -.8601220228765161 +621 836 -.5059589815578628 +622 836 -.1455549344835856 +636 836 -.2939607882202229 +638 836 1.2482004983643988 +646 836 1.031011884968352 +655 836 .9924470396403335 +670 836 -1.1057935259876834 +672 836 2.018952556559874 +674 836 .6853069163186897 +675 836 1.577404748815218 +679 836 .10292445124156888 +682 836 -.36675355449819946 +686 836 1.4845063836513348 +688 836 .9961183641620714 +689 836 .30298433169381506 +694 836 .8256759738015816 +695 836 -.5875910482611548 +754 836 -1.1311270141961078 +765 836 .6004357633142057 +788 836 -1.4725084477860682 +794 836 1.318091377373764 +796 836 .019906390499508708 +804 836 .03886899332454173 +819 836 1.6157079977033473 +848 836 -2.1076901862104642 +849 836 -1.2569198764625131 +850 836 -.14680961414199395 +854 836 -1.1003925938620662 +866 836 1.3583173139414697 +933 836 2.3345709259560623 +936 836 1.3404819142724458 +942 836 -1.4165051885816384 +961 836 -.013574599496641117 +974 836 -1.5347033908669747 +986 836 -1.0198997219886425 +19 837 .6918716013231039 +31 837 -.11119075114606862 +47 837 .6534213899342558 +49 837 -.7129073423274475 +52 837 -.3412599028477984 +56 837 -.25373702669684695 +62 837 -.3099415974523584 +75 837 -.2042041183154379 +82 837 .6050747973015463 +84 837 -.6934327806837043 +108 837 .7609270846727951 +113 837 2.1374222649505086 +117 837 -.29114955037779855 +140 837 -.44150834536870376 +144 837 .2485522563756133 +162 837 1.355611291732431 +182 837 .21919100720707857 +194 837 -.6155803835093604 +211 837 -.8719320726310625 +222 837 .48329418461190266 +232 837 1.0930388670248758 +238 837 1.262627725036136 +248 837 -.24781198147790257 +255 837 -.43884568772954535 +272 837 -.356570621119926 +280 837 .3919643928535011 +284 837 .749145770763439 +288 837 -.37054205755864744 +290 837 -.40717132453360294 +302 837 2.2128884085876965 +310 837 -.370230190600631 +323 837 .22347102145414574 +333 837 -.17245251681555873 +343 837 1.7654948230430743 +354 837 -1.0565458478244356 +357 837 -.9980860485416181 +367 837 -.1800187135730161 +374 837 .830030418442489 +378 837 -.10529926189807978 +387 837 -.3312026028956598 +396 837 .9159889548717195 +397 837 -.4967168537977209 +403 837 -1.2833050282660283 +404 837 -1.3795673714778052 +409 837 -.6257388045285058 +420 837 -.055228490874252495 +432 837 1.1170400057944097 +440 837 -.5191294921210482 +442 837 .5004634714119657 +457 837 1.1388535989888706 +459 837 -.3385174526690574 +470 837 .06145334115207506 +473 837 .22265366308579937 +475 837 .06787613889048728 +479 837 .7063234174025774 +480 837 .641272249400143 +486 837 -1.4851804447912982 +507 837 .8877095170824417 +524 837 -.661010503515204 +568 837 .769391138060982 +591 837 -.7022309005131969 +598 837 .21951820339550218 +599 837 .47641109376096813 +639 837 .21159197100055366 +642 837 1.40072722639904 +651 837 -1.8847802815596706 +652 837 .289113685070741 +661 837 1.0189128596095285 +668 837 -.926691466880182 +680 837 .9052088349372757 +686 837 -.4918560176605275 +689 837 -.030347332201936028 +715 837 .21186232379564132 +731 837 1.3362386112940756 +744 837 .3483636558867343 +753 837 -.38719201141509574 +760 837 -1.1645487878953742 +770 837 1.550537614472122 +788 837 -.18179249125816155 +794 837 -.508809514414167 +799 837 1.1780216511622281 +828 837 .8304170642907652 +834 837 .49427933706005556 +835 837 .2979493356853235 +836 837 .3187700111780792 +852 837 .9079387553180317 +887 837 -.6366192182705188 +902 837 .7297629883014208 +905 837 1.4509746878118592 +908 837 -.7106866660471954 +913 837 .6241873351653546 +920 837 -.833312290172546 +931 837 -1.8168740043536182 +933 837 .38423288621974533 +970 837 -.08792374506691111 +989 837 -1.122544401026328 +11 838 .9055983649603365 +20 838 -.6264635341297842 +32 838 -.2915257230135631 +46 838 .2643184403332967 +51 838 .12199771522077131 +60 838 -.6712567108739829 +65 838 .4230673400989632 +74 838 1.0263265635138468 +76 838 .550444495411655 +82 838 .8601683864781351 +89 838 -.1701950925661013 +93 838 -.1870465915483407 +99 838 .6129570664989724 +100 838 1.0854156241760289 +117 838 -1.3520367953586314 +122 838 -.5432644419757628 +152 838 .9662946668331416 +156 838 .5125026973499507 +180 838 .9187453818432034 +182 838 .28560910725298005 +199 838 .6190433510880087 +247 838 .5667311613607361 +260 838 -.6452426951884466 +268 838 -.18973103959142779 +281 838 1.7813490420517695 +284 838 -.7615880666181556 +287 838 -.08105421884346217 +292 838 -1.3154764281569538 +319 838 .6804673346147561 +328 838 -.5425172833632631 +370 838 -.4184033354396334 +386 838 .4405924081845283 +396 838 -.16200460393593002 +403 838 -.7072320800697514 +405 838 .35767092773196907 +413 838 1.0851185268196795 +415 838 -.275336107761318 +423 838 .33955785481020057 +425 838 -.03704774249581755 +435 838 -.28883601114179397 +436 838 -.8239234004006416 +472 838 -.971766962449546 +484 838 .42394461777477693 +487 838 1.2387113595357104 +503 838 .08496123744217836 +522 838 .11974378719585962 +534 838 .6736459622517261 +538 838 .10012274989758027 +539 838 .5204001548070373 +566 838 .42475319022117874 +581 838 -2.7016653488980826 +604 838 1.5713519359410575 +605 838 1.232522785849212 +623 838 .6382779456940938 +633 838 -.3809731389083095 +643 838 -.5181382170654847 +646 838 .3433348899803833 +651 838 -1.7269135281667838 +654 838 -.9130869862378386 +655 838 -.34885521515733364 +687 838 -.012541543244423137 +689 838 -.1561774406599738 +691 838 .6800913925316807 +703 838 -.19602280795608237 +738 838 .02241538442330828 +756 838 .6192361159398407 +767 838 -.06947882449275253 +774 838 .008189463330115374 +776 838 -.270909841028755 +779 838 -1.9555562546608294 +795 838 -.07486355446509121 +799 838 .2577999719352046 +831 838 -.9603229417549063 +842 838 -.5122103925232377 +846 838 .16703219150997262 +851 838 .07518834171260409 +854 838 .10017544159883278 +862 838 .24065816916320232 +864 838 -.27420003882169236 +866 838 -.519095380882244 +882 838 -.3708425966815639 +892 838 -.44336427710434556 +893 838 .2545477234792755 +897 838 1.9005180260215304 +912 838 2.133949361430855 +917 838 .10661731728963736 +928 838 -.6569277408609331 +931 838 .23479275671649125 +970 838 -.142502184351396 +975 838 .32089066744534717 +982 838 .4745860118307601 +989 838 .2557599985879048 +5 839 .12735205160233715 +18 839 1.4120214647337466 +28 839 1.1116089811636338 +32 839 -1.8438372252454085 +33 839 -.21209083222706937 +69 839 -2.4101326760446193 +70 839 -.22262953031239985 +87 839 -.15388229625777536 +91 839 1.7304991282587672 +98 839 -.4491421550043927 +99 839 .024967503371578242 +100 839 .38270851456898813 +101 839 -1.4504142113624272 +109 839 -.42941046263936855 +117 839 -1.336643025845756 +122 839 .23722485282265762 +125 839 -.9210969909979264 +148 839 .12284831590841343 +176 839 -.6167387636056513 +190 839 -.5833719739118752 +226 839 -2.3772823486555885 +243 839 -.1584563398697913 +260 839 .20714115104454364 +261 839 .352071543073992 +269 839 1.1158213661790817 +285 839 .6608811746616832 +302 839 .505559267786769 +312 839 -1.0029847796756468 +325 839 -1.3974666279189387 +341 839 -.6884133805139386 +342 839 .6527298159367243 +343 839 -.6106501850478538 +393 839 -1.548943606767197 +406 839 -.681646558970328 +419 839 -.019374357123938826 +420 839 -1.3370942706037348 +421 839 -.40662145478419875 +422 839 .45596326437838214 +438 839 -1.2282260381079093 +439 839 -1.3529705369301077 +440 839 .5578176805029298 +448 839 .9845071312433551 +456 839 .9166924716011665 +459 839 -.1476902642336762 +476 839 1.5042062322639864 +478 839 -.8749120857601316 +484 839 3.079531108306751 +501 839 1.464002544603268 +504 839 -.3822085622850021 +505 839 -.6774782998732356 +532 839 .9295617938111046 +533 839 1.1097306162699494 +543 839 .7639272744659108 +556 839 .6314943818521661 +568 839 1.792197577157019 +598 839 .6523897572947701 +613 839 2.177790569236105 +615 839 2.2326695472372893 +631 839 .1392590299489841 +640 839 .8078243663133651 +644 839 1.362410756058227 +646 839 -.45141230507834545 +650 839 .16985080075442205 +653 839 -1.6683288736741915 +659 839 .3938589904073041 +669 839 .7652441734339424 +681 839 -1.3947946300838499 +687 839 -1.0541067111433455 +688 839 .47715682454608993 +702 839 -.8561338983705317 +709 839 -.797616876045232 +732 839 2.3237326670602725 +750 839 -.5448823361163421 +764 839 -.23718211897741512 +765 839 -.038325062640603175 +769 839 1.678130458696278 +785 839 1.4698387059209972 +786 839 -1.529625165721863 +829 839 1.272237376258716 +835 839 1.2484946182017571 +841 839 .7389956773932858 +853 839 -.1705260296735328 +857 839 .9979105632117973 +865 839 1.0808137683535564 +919 839 -1.3225365589873168 +926 839 -.3223336505957819 +943 839 -1.3749299338031429 +944 839 .27317905151539884 +950 839 -.41685423891524337 +959 839 -.9423493484399261 +963 839 .07699263323680056 +966 839 .06299387227538544 +968 839 -.28360024974885706 +974 839 -.39008035390863005 +991 839 .024609361329008726 +5 840 .1479868436088043 +22 840 -.003856309035493416 +24 840 -.00846646298233461 +38 840 .5132324571276248 +49 840 .3999810668570671 +53 840 .24567128753638184 +70 840 .5378645820513521 +77 840 .9171534923929027 +79 840 1.0424095927266905 +80 840 .7446217360131457 +86 840 1.6670864525171722 +98 840 -.3921961791104635 +108 840 1.1791691249518352 +109 840 -.03692153634949183 +119 840 -1.2814986749875228 +123 840 .25673029381788326 +150 840 .5096080181062911 +169 840 1.2655895786786433 +178 840 1.3624452093410713 +183 840 -1.1071738234553352 +186 840 .08809962253435577 +206 840 -1.0113064756748966 +208 840 .6042303442154384 +214 840 -.8023320950818732 +217 840 -1.3658740409722894 +221 840 .726049150563474 +251 840 -.2909797575044487 +254 840 .23617153087042708 +263 840 -.20227034570162875 +273 840 .44233060842144967 +281 840 .3979970157932933 +293 840 -.06830092293766961 +299 840 .11418453576253282 +305 840 -.08577108640209095 +322 840 .8108517066729013 +335 840 -.7631560151390752 +337 840 -.8082504867887871 +368 840 -.6906001760749059 +374 840 -.2001007491205416 +383 840 1.2141918111484702 +385 840 .33594855492787007 +388 840 -.18702465654692677 +397 840 -.12593634707729154 +405 840 .7931663393009454 +411 840 .09412205941520813 +414 840 .45602971818644455 +441 840 .8450238029208096 +448 840 .6079279647540912 +450 840 -1.4037446232256408 +471 840 -.8067314565898103 +474 840 -1.3540364161392486 +476 840 -.2973818487482532 +480 840 .6977725335288855 +481 840 -.427398188952455 +486 840 -.9973025159664681 +516 840 .3273681118530143 +518 840 .15887833243457739 +521 840 -.34337858830353885 +522 840 .6680880652485119 +529 840 .13532521103987868 +549 840 -.6969705292693913 +562 840 .44334110415791705 +569 840 .05453036909276343 +582 840 .7548212574226079 +584 840 .014855256650193507 +586 840 .07927732655029357 +601 840 -.7115556692650878 +628 840 -1.2673718761850103 +631 840 .2671842530037061 +642 840 .3349803467179202 +647 840 .0964431623405633 +648 840 .7425542917916529 +657 840 -.606708885763431 +664 840 1.4575184087868875 +667 840 -.6581955267333693 +680 840 .014256680027262499 +684 840 -.9038693979361735 +687 840 .2972193641793463 +695 840 -.18879285787480454 +697 840 -.9930332446049658 +698 840 .541406990226871 +717 840 .7465847900995555 +725 840 -1.058524595407285 +732 840 .6455511236612163 +736 840 -.5563967101191801 +746 840 -.10384152164002396 +749 840 .6623614712127789 +750 840 -1.1657342003735531 +760 840 -.7431938000923408 +766 840 -.17802982260500289 +780 840 .6990531163108975 +782 840 .7059078552393729 +810 840 1.5552454443827022 +819 840 -.10104974563348286 +820 840 -.8784015337226581 +831 840 -1.162030127193654 +866 840 .04694079523635719 +878 840 -.4678576545400732 +880 840 -1.0108331110572295 +917 840 .7947725947392393 +925 840 -.6211948826867769 +936 840 .6612715760480689 +945 840 -.5557201258923129 +948 840 .5597733051138565 +960 840 -.2971684793878217 +981 840 .5511648771597177 +987 840 .16631850902633677 +994 840 .37644762537604537 +996 840 .5077435688131867 +1 841 .21320480109626846 +4 841 .03237316296664178 +37 841 -.2243494257549157 +42 841 .33904417289756417 +45 841 .5197184401223263 +46 841 1.156302946264164 +53 841 -.8982843151377973 +74 841 -2.3669784869660226 +76 841 -.4835977850059434 +84 841 1.4585309903247645 +85 841 1.8430060067581164 +100 841 -.9873801633783947 +105 841 -.36539389454884486 +106 841 .9337080104850027 +122 841 .7555215734688698 +134 841 .5294676655251943 +146 841 .21801425706259317 +147 841 -1.0617110308666429 +150 841 -.3491183914225307 +156 841 .2776112561893876 +165 841 -.14978339115174827 +181 841 -2.054160924686821 +209 841 -2.2331328031836133 +213 841 .569916061454548 +224 841 .3074474587396762 +231 841 .9150541817748663 +252 841 -.5999141169555486 +278 841 -1.0399130630591902 +285 841 -.6644078980178167 +291 841 -.43389243061108296 +302 841 1.6162086006898095 +342 841 -1.5023968690008296 +370 841 -.2751715475659471 +377 841 1.1376417152732134 +406 841 .9331036039497865 +421 841 -.5775208676456804 +432 841 -1.0764798958919135 +439 841 .9208607507199459 +454 841 .5750828766395075 +455 841 .22085580373476216 +465 841 -1.7061375453299483 +481 841 .3279411475598555 +488 841 -2.2802398048156656 +516 841 .6305809344233709 +526 841 -.6112398704907127 +561 841 1.7784704781939589 +567 841 -.14794703572930537 +568 841 1.65556018630943 +572 841 1.548544351366421 +582 841 -.48666164534844997 +594 841 -1.426664504925398 +596 841 -1.397986488377119 +598 841 .35378399327626525 +599 841 .7085107529782803 +601 841 1.6352023145685242 +607 841 .015841125411143284 +610 841 2.911598050659233 +626 841 1.4856065314163331 +644 841 -1.4772387449667912 +649 841 -1.3561963247571949 +667 841 1.3352832631054774 +674 841 .4564062584071229 +697 841 .06794891636316289 +733 841 -1.0396147235281787 +762 841 -1.2042703748507146 +764 841 1.9419676365276457 +766 841 -.8524149778610193 +774 841 -.8830978279405863 +780 841 -.46333318094280695 +800 841 -.6017101173743292 +806 841 -.9438370125274347 +808 841 -2.128569928286064 +816 841 2.0065808689542686 +820 841 -.34489244417033804 +826 841 1.407590807575197 +831 841 .21101365872176414 +850 841 1.650683430607495 +852 841 -2.692189554829047 +863 841 1.1414313619386105 +890 841 .23297115393933227 +910 841 -.7511329779062752 +913 841 1.1473810189122826 +919 841 -.28495921974786065 +921 841 -1.3269299703713433 +925 841 2.343878345906804 +934 841 -1.6611520100771107 +943 841 -.33945803444536415 +960 841 2.432088386837249 +961 841 .7703865320296439 +963 841 -.9949299465070627 +983 841 -1.098592154422064 +984 841 -1.0376804317328336 +986 841 1.328061830708708 +995 841 -.8025995037457156 +999 841 -1.135092815103259 +18 842 -3.0335975335008496 +26 842 -.4118672915504355 +32 842 .9956659225586222 +37 842 -.5523879432250437 +40 842 -.07458049541672027 +43 842 .7670974041923901 +49 842 -.45599571773972664 +59 842 -1.8316094580282127 +61 842 .4765705180209829 +70 842 -.09896966300104457 +77 842 -1.8720963993869815 +85 842 -.14859606572488396 +90 842 -.5981202807538116 +98 842 -.2824879268221425 +111 842 -.4470864650521997 +117 842 1.3909062642910315 +125 842 -1.4720156196137686 +163 842 -1.2339709793759213 +170 842 -.3484124733941158 +174 842 -.5869154738971576 +175 842 .33672183690796725 +184 842 -1.1968132583481164 +188 842 -2.0098814900774493 +191 842 1.5425642150687204 +201 842 -1.0258577510071318 +219 842 1.1495234937698962 +224 842 .043392126735568304 +234 842 -1.4689451916095013 +235 842 -.5225771411224971 +244 842 1.4158403140787557 +248 842 1.4725629334140575 +264 842 -.02229001691780709 +266 842 -.35210659724577326 +279 842 .15372025804795417 +280 842 -.6956413690270996 +281 842 -1.7963948609350893 +294 842 -1.0571317367303976 +320 842 .5751428622970668 +321 842 -1.0937167395305025 +326 842 .6523269822150736 +328 842 -.022160643405417627 +331 842 -.6082391235888397 +332 842 .25044133747389186 +333 842 .5797539885822273 +343 842 .2686737981936154 +360 842 -.07302579917390031 +362 842 -.33311817499718066 +366 842 .12006592911454891 +373 842 -.44721220135790135 +377 842 1.3460297822781777 +394 842 -.840171354312841 +403 842 1.181222346775899 +410 842 .8789725802535598 +415 842 -.5806507779346219 +416 842 -.08653602927053095 +418 842 .046900841796758325 +421 842 -.00578635539879714 +426 842 -.2875113526799413 +430 842 1.5017755533698218 +432 842 -.9201437762929189 +438 842 -.3641259360701074 +445 842 .9886364164358972 +454 842 .4735178291539214 +459 842 -.45364306387515396 +463 842 .4081985724813158 +464 842 -.020750062309687983 +475 842 -.33877900233500224 +480 842 -.39970042485319424 +484 842 -.5049717932355079 +486 842 1.2471201985639615 +487 842 -1.3438325561618487 +519 842 -1.2107753952431306 +529 842 -.22795253401490823 +554 842 1.2416975891700672 +558 842 -.9574188062779521 +578 842 1.1910290741110987 +582 842 -.38157290924024473 +609 842 .17329298892826706 +610 842 .40298711875587373 +629 842 -.12781585437461834 +654 842 1.4747109036976538 +669 842 -.9439851029124573 +680 842 -1.6988471724004446 +703 842 -.4491711651550364 +704 842 -.22948828162123086 +705 842 .10241624080850414 +712 842 .9404649702500543 +716 842 1.674276250375323 +726 842 1.502065333426689 +728 842 .14310405896306727 +751 842 .8920904175539293 +752 842 -.9811926908118963 +776 842 .8981704797072996 +789 842 .7454843026777875 +792 842 .8293954694381146 +807 842 .4870745167784165 +809 842 .46959638914386304 +810 842 .6586289807328478 +816 842 -1.174442373020462 +827 842 -1.4631843371581257 +832 842 .9199103839637274 +838 842 .08770072160382655 +858 842 -1.1649469638047483 +870 842 .10301078055449492 +871 842 .4728342223519123 +878 842 -.5546876572134997 +903 842 -2.0592787781040878 +906 842 .9140273807875516 +927 842 -.6500225168962197 +930 842 -.7801199551494894 +942 842 .27359226830615513 +950 842 .3373495428155068 +962 842 .27678448652042764 +974 842 -.10212044543199511 +977 842 -.500638040790622 +994 842 -1.746664132262132 +995 842 -.452234061371804 +15 843 -.44525885762021494 +24 843 .6099145480858253 +45 843 -1.0939853687511003 +48 843 1.7693897172213218 +49 843 -1.481248346785491 +54 843 -.10169937903888016 +57 843 .26711969228104493 +58 843 -.8009263493906147 +63 843 -.8753906441794387 +64 843 -1.2925105801260879 +87 843 1.044572067285048 +89 843 1.2138120564187216 +93 843 -.8226395826777425 +137 843 .9928776070914558 +164 843 -.18125858700239672 +172 843 -.6356932824211703 +185 843 -.4278218318338363 +188 843 -2.21022554088883 +197 843 -1.0112279614866175 +212 843 -.3146810851046551 +216 843 .2934362153439186 +219 843 .3177376133478776 +223 843 -.047809081218575286 +228 843 -.3805840305145427 +241 843 -.5837227419488802 +242 843 .49685440563672206 +268 843 .6446416129323753 +273 843 -.7156799173057184 +280 843 .5956918004738813 +301 843 -1.9403673589148929 +307 843 .6864438460690655 +315 843 -.3182467684630884 +337 843 -.01414073099576428 +340 843 -.28536323798234564 +345 843 -.5211213508871272 +354 843 -1.4250608157713973 +360 843 -.9455350836954631 +362 843 -.5939827557399476 +364 843 -.00866153607957823 +376 843 -.36335253324961486 +389 843 .9672969819249068 +402 843 .10094098129850032 +404 843 .3428577270657218 +421 843 .8333802742321447 +426 843 1.4309704540574126 +434 843 -.780081588023741 +453 843 .5904534452507915 +486 843 -1.0177666694589125 +489 843 -1.047353929042785 +508 843 .24969638803708621 +520 843 -.3975045621323344 +521 843 -.35532312323244286 +522 843 -.8982620372645229 +527 843 -1.1448788098134879 +539 843 -.5186845575075512 +542 843 1.144579732762494 +557 843 1.4396230881827001 +558 843 .08878752450530898 +570 843 -.12387106410816312 +589 843 -.7576671310978172 +591 843 -.2820636350345544 +597 843 -.9930959828660461 +601 843 .24258200755811518 +604 843 -.2243679977426699 +610 843 .0780319438930487 +614 843 .448154749028297 +622 843 -.848825780821611 +626 843 .41444153468113054 +635 843 .7310111616114477 +643 843 .0685874147332398 +651 843 .45243217315025724 +656 843 .05178352318011693 +666 843 -2.0310496289462776 +670 843 -1.3157994279901941 +697 843 -.4257295029840158 +703 843 .2963524518528187 +706 843 1.6663993234514376 +722 843 .3373499613831674 +728 843 -1.364479984274931 +735 843 -.8146765410134533 +746 843 .10736591392490384 +751 843 .27782152392580867 +757 843 -1.1389752986027548 +780 843 .5148722906299891 +798 843 .09374288882370568 +805 843 .3201671622758292 +809 843 -.9255972445231216 +827 843 1.5688052031734843 +831 843 1.040873333913046 +848 843 -.9191980397785964 +850 843 .16202882261665855 +861 843 -.9415310028060921 +872 843 .21313615008453793 +877 843 -2.0472713267296627 +879 843 .1039126930037031 +886 843 .4485846651183703 +891 843 .7275951040754269 +893 843 .7756601893354769 +900 843 .7266200958992095 +903 843 -.5986678705444397 +908 843 .5886639259325396 +915 843 -1.7310271753358581 +918 843 .03576080386978914 +924 843 -1.8875960971020607 +926 843 -.8794468281069896 +931 843 -1.217669403800128 +939 843 -.03760791632666936 +946 843 -.2761874438438396 +954 843 1.3660762948405687 +961 843 .6883428881152774 +973 843 -.349962872349957 +974 843 .06481379821477648 +990 843 -.4091801585808431 +13 844 -.33846298396507934 +23 844 -1.4028457316580614 +37 844 -.692811601086258 +40 844 -.3550587067989259 +50 844 .6092697038079358 +81 844 -.9924615878432868 +88 844 -.5850834925061066 +106 844 .6181793519326236 +118 844 .7461833478794454 +129 844 -.012269284130565092 +141 844 .31365756963876834 +167 844 .3083163486759718 +172 844 -.13261084166855913 +180 844 .15217999755615108 +183 844 -.6522879901285366 +195 844 -.2136867279884344 +202 844 1.1068183789480939 +226 844 1.041585934671924 +231 844 -.6403647433885311 +233 844 .3994225393163058 +238 844 .5269067031844552 +240 844 -.6740865829922633 +247 844 .001409756213100924 +267 844 -.7090724199177411 +280 844 -.05602016275846926 +304 844 -1.0180009955738658 +305 844 .24544602155205225 +331 844 .02887833789797524 +348 844 -.02046105559760589 +357 844 .4916743842599495 +366 844 -.14908885022419832 +369 844 -.6746087198898159 +377 844 -.30760446062889835 +382 844 -.6901446888603621 +393 844 .4400967534045895 +402 844 .26438158561335856 +430 844 -.7061790031656503 +433 844 -.050441198898658855 +460 844 -.3047765190254173 +472 844 -.7326572856983562 +484 844 -.4141744987165092 +496 844 -.3844553074658925 +504 844 1.1794078090623212 +514 844 .8203908806716479 +520 844 -.5602283950994519 +526 844 .30357696782261784 +538 844 .16801114712211024 +542 844 -.1883074286955777 +544 844 .9291081249310661 +548 844 .29586482947880555 +552 844 .5485954160456484 +564 844 -.5348469863591873 +576 844 .10459785580279596 +577 844 -1.2978692834786658 +585 844 -.7924627771166384 +587 844 .4812601657496486 +591 844 .22977437854942367 +600 844 .046113712499154746 +605 844 -.6648400429036796 +606 844 -.28282873656410745 +611 844 -.23213250865583912 +619 844 -.6504086480632545 +622 844 .906877564861005 +627 844 -.5771903157402515 +637 844 -.6212495288496988 +653 844 .24477326002824823 +663 844 -.9945780489002486 +671 844 .11295979896789693 +678 844 .7061031319339832 +682 844 .6706779717328462 +689 844 .04864873797862597 +691 844 .3576130571622359 +692 844 .974404490201886 +696 844 -1.0100169597013056 +701 844 .5250530102076032 +723 844 -.11617492557048247 +728 844 1.208063615613879 +736 844 .028714110362749158 +737 844 .007484462315133361 +746 844 .07464431170317119 +750 844 -.07485988475634238 +778 844 -.4055440993701642 +813 844 .4687491294437661 +830 844 .3648202899566557 +833 844 -.1100328268424024 +862 844 .7318115255826823 +909 844 1.126019830261337 +911 844 .3472543223085429 +924 844 .1307383782875436 +943 844 1.281960124739109 +946 844 -.4074446412298519 +960 844 -.04177103746010703 +965 844 .359890383772132 +980 844 1.0012006678668968 +982 844 .0641738331836507 +985 844 1.2159755275845672 +993 844 -.0073739590204624506 +997 844 -.9185596546656692 +7 845 -1.1686577414431423 +13 845 .9165556043019157 +17 845 .02402132839584937 +34 845 1.4948651398952626 +44 845 -.8888008249562369 +46 845 -.2262812071048638 +52 845 -.47541251179495714 +57 845 -.08580574940745825 +69 845 .7065666986203714 +73 845 .45308657888299864 +82 845 -.21443369396388398 +91 845 .06452465373022698 +96 845 -.26821275864062705 +104 845 -.6981523305776738 +107 845 -.9600790552881038 +114 845 .7240088710061184 +119 845 -.42600360103284296 +130 845 -1.512176411085542 +148 845 .9933604232133906 +149 845 -1.505813292509168 +157 845 -.9314514430341219 +167 845 -1.1063867145677768 +188 845 -1.077474161730487 +195 845 -.5563040687246308 +204 845 -.2419673780328065 +219 845 .7361531982134674 +223 845 .22917710993251877 +248 845 -.09552463151896845 +257 845 -.32472040700670807 +258 845 .18288369488540862 +259 845 .5184748426053544 +262 845 -1.2467192533280618 +272 845 1.5129835993401397 +277 845 .22651521816483494 +284 845 -.14864833729868632 +308 845 .9145610899036426 +328 845 -.043665276986603024 +338 845 .9252331991219405 +340 845 -1.097979967790669 +359 845 .8501316111599582 +361 845 -.164459664785621 +374 845 -1.0752783524513372 +392 845 .372653344267908 +396 845 1.2731644875765122 +397 845 .3980816789345276 +398 845 -1.1656448111881987 +438 845 .8133377980809661 +467 845 -.5699963640590208 +511 845 -.2673019397886914 +512 845 -.0054321537073615915 +522 845 .29705026693359926 +528 845 -.5693309109754685 +530 845 .1374374604198606 +547 845 1.4802831650646022 +557 845 -.470402254858782 +576 845 -1.9710107975287596 +578 845 -.08007802116528512 +585 845 1.2345672883000045 +597 845 .5772241915597609 +598 845 -.4191175936643398 +604 845 -1.406983294490402 +605 845 -1.094138938520002 +620 845 1.4372383397154067 +626 845 -.6148554726218708 +645 845 .8694239493854659 +646 845 -.17025985926103948 +649 845 1.364597664864509 +653 845 -.7269737860233063 +664 845 .5619734924340809 +685 845 2.2719730608571918 +687 845 -.20581337720615464 +689 845 .43888176603809137 +697 845 1.5611170658731561 +708 845 -.40360993758923447 +711 845 -.11862796079960877 +712 845 1.0424916575414396 +718 845 .24797269057907603 +723 845 -.3759251584887471 +730 845 -.908374541598523 +738 845 -.545656156876779 +747 845 -1.3786527902564147 +748 845 -.6046919100479118 +760 845 -.48957773735199084 +763 845 .035570386337674426 +769 845 .21562765498983455 +790 845 -.24911471742408617 +802 845 -.043504609824239926 +803 845 -1.5891024428908482 +815 845 -.3909784477478908 +819 845 .7465224619687177 +840 845 1.2035068085012104 +854 845 -.03251499108473144 +884 845 .015844743250492038 +900 845 .04833292568735123 +906 845 -1.3547724526147082 +914 845 -1.239392338909315 +917 845 1.176301480654491 +941 845 .9293753482172623 +963 845 .770571513671241 +973 845 1.0803882191757743 +981 845 .9624127377515529 +986 845 -1.029632132029874 +1 846 -.19740845335301502 +3 846 -.5692750481019226 +7 846 .35558449224242344 +11 846 -.24958238603927607 +25 846 .4676142678772818 +35 846 .8343558046951769 +38 846 .18021964176600933 +40 846 .5811063231116986 +63 846 -.03855295247558976 +74 846 .956117149531659 +78 846 -.344533121850662 +80 846 1.1426292038499464 +100 846 .17523246833712353 +103 846 .09190531338428488 +112 846 -.4266411646933684 +114 846 .09641855481068429 +149 846 -.46336300665887287 +151 846 -.8567562989679427 +155 846 -.1346897079055503 +163 846 -.10144335362126669 +169 846 .18619084497937413 +199 846 -.14363981233821513 +206 846 .15263948999921495 +213 846 -.4011378602377112 +225 846 -.09797242001542616 +245 846 .37572048039324035 +263 846 -.6393374555905106 +269 846 -.5001914401738726 +270 846 -.32229247710718006 +282 846 -.10487267258197111 +314 846 -.6074736201191944 +324 846 .3730546871293439 +333 846 .41296330590886265 +338 846 -.15424056422836807 +363 846 -.4679187734082247 +367 846 -.2749901972218641 +378 846 -.4713288889096027 +382 846 -.16855270126341734 +402 846 .15932681289209374 +417 846 .2617583266677351 +428 846 -.7636073439571727 +446 846 .474959101464119 +462 846 -.6805234037653513 +496 846 -.42230280510490326 +500 846 -.19162964996092963 +506 846 .2329924450476945 +508 846 .7814253251380333 +511 846 .32087610022936686 +533 846 .025523800915656043 +537 846 .336316054740428 +542 846 .2346979852885838 +552 846 .5328849917115249 +565 846 -.41147036860072733 +571 846 -.493363731708386 +577 846 .2726933151745882 +585 846 .6353698731289683 +592 846 .33174761059908753 +606 846 .1028284079431479 +620 846 .7024286950721662 +624 846 1.0451541382559193 +627 846 -.838680808954734 +628 846 .49065808814248824 +630 846 -.6118238992324337 +647 846 -.7920895129725132 +653 846 -.867686816008272 +654 846 -.9964046777046237 +662 846 -1.2721754368822609 +666 846 -.7684210500164795 +669 846 -.20682473796170886 +696 846 -.23018398356456443 +698 846 .703580084758575 +701 846 -.30219773526314303 +711 846 -.12430565288001849 +718 846 .37898904107233694 +742 846 .29848573223903097 +747 846 -.26787839499455773 +757 846 -.09520521370724755 +790 846 -.6297193371699839 +793 846 -.5297812542125823 +794 846 .828276146051838 +806 846 -.5092858713212611 +808 846 .0479460000692155 +817 846 .06461367536671543 +842 846 .08996985984427942 +844 846 -.39425637584342865 +849 846 -.19387696498381332 +858 846 -.13539943503927168 +871 846 -.771619121073574 +879 846 .3425771925750068 +885 846 .20557058823019986 +888 846 -.2521284438210976 +890 846 .21862776692297842 +918 846 .29967862358172825 +922 846 -.886290866892887 +924 846 .21838154998173268 +935 846 -.5363020273998196 +938 846 .10200640510969411 +941 846 .9962889895101018 +942 846 -.7199365300099843 +955 846 .17645528805619312 +982 846 .20920030577990278 +11 847 1.1459284330552693 +15 847 1.217251427048876 +24 847 2.2676155462377308 +27 847 3.0173303213722913 +41 847 1.2691365863836335 +61 847 -.41576129845028087 +69 847 -1.1860689559357678 +73 847 .516408415929867 +78 847 -1.230841421146829 +85 847 1.4334202533728229 +111 847 -1.0296270370752525 +124 847 .3878279631862249 +128 847 -.9532424116763857 +155 847 .6785720953233648 +170 847 -.22642300129517318 +184 847 .45615878394598575 +188 847 .2748016622034396 +203 847 .005821621366530652 +213 847 .36553133650166125 +216 847 -.8064702949301448 +217 847 -2.043480756252504 +240 847 -.44801596353784956 +247 847 .8326144939992384 +256 847 1.0765231485186133 +265 847 .6388157254764031 +287 847 -.9805736979519705 +288 847 -.6048236250105077 +289 847 -2.358959603859695 +299 847 -1.1609906498534137 +301 847 .5686254372109698 +307 847 .35528574572024685 +312 847 -1.180320567134299 +317 847 -.5182515650259136 +318 847 -3.3371434916266027 +325 847 1.3512326134056138 +334 847 .2277480370686672 +344 847 1.2965202781360319 +354 847 .4933967070094466 +362 847 -.5927916715997323 +369 847 .677598821395698 +370 847 1.3094981190236932 +380 847 1.0524883215741787 +393 847 -.015090497434670919 +405 847 -1.146410716260318 +406 847 -.9431129914795873 +428 847 -.6822421126455649 +433 847 -.30537678451279626 +436 847 1.3695135791853714 +445 847 .8575243166072135 +446 847 1.5245251969862421 +471 847 -.7678453593206107 +478 847 -1.373546400720889 +481 847 2.440915564386157 +490 847 -.09624153723228498 +492 847 -1.7302974015889467 +498 847 -.7173158203334536 +500 847 .36153071234295076 +501 847 .6876784470641953 +507 847 .3507575162430255 +514 847 .6036137907625269 +532 847 .2063514839479697 +535 847 -.6467500297949749 +537 847 .9587343042063927 +541 847 .48063195892674715 +566 847 .6052051856534141 +567 847 .448948912834625 +596 847 -.6849098660359989 +619 847 1.4714405174628882 +620 847 -.041865014381818416 +621 847 -.49824991798429713 +650 847 .07517927698968395 +651 847 2.05387746674171 +662 847 -.6695135245460999 +665 847 -2.9996880904224956 +666 847 -.054527672189915895 +674 847 -.16799778512261426 +678 847 -.34710862860090463 +684 847 -.685274998941476 +685 847 -1.2238248558855818 +689 847 -.48069961097222813 +695 847 -1.0698588695578746 +705 847 -.48169128610925993 +709 847 .08039771467785461 +714 847 2.3760432870629167 +718 847 1.7119918448877725 +727 847 -1.6387111035863497 +734 847 1.8960774484782768 +740 847 .23269681014486898 +749 847 -.23697912704008267 +756 847 -2.0260485738534197 +761 847 -.3105312193124333 +780 847 -.4397124185553053 +787 847 1.7946368117382245 +813 847 .2200574987297206 +818 847 -.14300858783938908 +837 847 .3360053980320352 +858 847 -1.0194716841921643 +863 847 2.1154077160304583 +873 847 1.0424777928246762 +876 847 .09970093315966333 +881 847 -.4491003020235623 +895 847 .3640706508713216 +897 847 -.5680729810270496 +919 847 -1.4018747825992677 +929 847 -2.4956040253143796 +938 847 .4628016856343256 +952 847 -1.2671181571060968 +954 847 -.11475799401868028 +970 847 -1.7670506691780308 +972 847 .8434390907458322 +986 847 1.8404055818288934 +993 847 -.8639247442832061 +997 847 -.5085523511500569 +1000 847 1.2625339203213612 +1 848 .1107930901594346 +3 848 1.2655570929711442 +29 848 .6561861420619459 +45 848 -.7562530609938556 +62 848 -1.268743195743109 +83 848 1.2287083903663 +87 848 .9471610457598488 +100 848 .7054273794301902 +108 848 .9714525232245049 +143 848 -2.541962130540633 +155 848 -1.8882648239334703 +156 848 -1.0407941395283196 +165 848 -.22050002683277425 +168 848 -.9376651469122276 +177 848 .6351640712136335 +193 848 -.3120056352023862 +198 848 .12591505828434804 +221 848 .5848943045956436 +231 848 -.21918432787333006 +247 848 -1.0481240174217088 +248 848 -.32860763427965084 +250 848 .4354966088580084 +254 848 .7288680196715431 +283 848 -.6772736432774985 +304 848 -.7835568712930121 +333 848 .4344587725263655 +341 848 -.25375301917615894 +342 848 .7188679232724431 +345 848 .08538492792584985 +367 848 .4909931032954472 +368 848 -.34639862454385606 +374 848 -.8042019194220229 +383 848 .12519543382438492 +398 848 -.39889933778697023 +408 848 1.5918574278928952 +412 848 -1.0776507432767461 +421 848 -.3741419766030525 +447 848 -.010191865886032339 +452 848 1.465432138833217 +454 848 -.28114951646452535 +465 848 .4379582623450695 +472 848 .8487817552606421 +484 848 -.33506332661216776 +494 848 -.8082433463205018 +509 848 -1.4936038686260746 +518 848 -.6306438519311708 +525 848 .9485229416525335 +526 848 -.46709640152007476 +527 848 -2.0658364910512987 +559 848 .143602829263963 +568 848 -1.5788958049605306 +577 848 1.50959425053445 +579 848 .3776339044941243 +601 848 .006237471949416706 +619 848 -.05073678116292098 +627 848 .8665694613412587 +668 848 .6555630626431885 +669 848 1.2036045971813 +678 848 -.13403148720775435 +681 848 1.0930332408123615 +685 848 .8921763977262845 +701 848 -.3516844055126003 +726 848 .5526754742859036 +762 848 .11226741149318477 +765 848 1.5922572115300886 +766 848 .7828041544360506 +767 848 -.3411307916079673 +801 848 .9756994833637218 +811 848 -1.2447909897419298 +818 848 -1.2544874806593769 +820 848 .3516738315867562 +824 848 .5808026246995103 +828 848 -.4524108616072483 +833 848 -.09813175709448381 +836 848 -1.0021389622095531 +848 848 .734720181316722 +850 848 -1.4731547869814225 +854 848 .3575772034092698 +859 848 -.9956285920687479 +877 848 -1.5236553857845854 +886 848 .4350520501126202 +897 848 -.634705070320418 +938 848 -1.6460152533509944 +949 848 -.6940951133364358 +950 848 .5124190651783013 +955 848 1.238757352893983 +958 848 -.04647289929124904 +966 848 1.34086887335722 +979 848 -.512413234493254 +980 848 -.08821032322940821 +983 848 .6649925536113706 +7 849 .4004902754721132 +12 849 .3095751536823371 +28 849 -.40491925186284916 +31 849 .010796548098029352 +32 849 .2581470273231689 +36 849 .07355808873477057 +39 849 .2579455211929958 +44 849 .17165044580706798 +46 849 -1.0312822863876778 +54 849 -.4442084132678256 +64 849 -.7923607360133833 +88 849 .9435155179071163 +90 849 .043358300779192935 +100 849 -.41261328390091223 +110 849 -.04026577959622077 +111 849 -.6701891058557994 +121 849 .8527655451160217 +165 849 -.32853319575319806 +183 849 -.8621862393827464 +198 849 -.8752002954506984 +202 849 -.15866567802515463 +203 849 -.19188965568145153 +224 849 -1.0048369119083511 +228 849 -.5252053414268059 +229 849 -.5668158390312702 +236 849 .4547261484276771 +237 849 -.5762800897478977 +260 849 .6487146682015315 +262 849 .42872180288641804 +269 849 .6812583790067692 +282 849 .6069328663413686 +291 849 1.3070927327383912 +297 849 -1.2502323808034088 +303 849 -.17746417301489445 +304 849 .35557400856463334 +323 849 -.05723215120624345 +325 849 1.024796871129349 +342 849 .4617298733670607 +346 849 -.9083167663248342 +353 849 -.08125336446905201 +359 849 .25397177364802775 +360 849 1.1901890682721599 +376 849 .497437949429214 +379 849 .1158554853199098 +391 849 1.2433819042240484 +403 849 .5177850648131109 +420 849 -1.3373075970264947 +446 849 .45116064591691263 +452 849 .6053946238338622 +483 849 -1.3710558700897353 +484 849 1.2393941472832901 +493 849 .0038287552814991258 +502 849 .3036823045658378 +508 849 .20409450219832895 +509 849 .15720416449162752 +523 849 .04313081929992561 +524 849 .26778048402720345 +533 849 .0406572500865578 +536 849 .34309266875448696 +543 849 -.2599156230946676 +545 849 .8278799280364679 +553 849 -.1270164662983171 +558 849 -.7189867305976191 +559 849 .01752535695226816 +567 849 .2935873460756529 +575 849 -.032189998565156475 +579 849 -.8899961078024113 +596 849 -.2195359486520064 +601 849 .9126612394945292 +617 849 -.1854193210579446 +624 849 -.9121936545431786 +631 849 1.5134109268419729 +636 849 -.014228997529069434 +649 849 -.5354877690824551 +650 849 .6656099131860417 +656 849 .3827516698656138 +663 849 .6594458574873141 +670 849 .6741302794444277 +688 849 -.8007150004242207 +709 849 .22028503760741447 +722 849 1.0175392556034177 +724 849 .794128019598104 +725 849 .18754868433140154 +731 849 -.8306579574008575 +735 849 -.6143247720832504 +757 849 .07230420217397579 +758 849 -.5920768080146558 +768 849 .18227523506844218 +775 849 .329822780475404 +790 849 -.7000223109462536 +822 849 -.11402051783317116 +841 849 -.16228918453783125 +866 849 .27744831614250437 +867 849 .4926718911882885 +868 849 1.8402313777574548 +870 849 -.15136619091775516 +883 849 -.5686924626268057 +889 849 1.0424489222878173 +894 849 .158043548770915 +902 849 -.037084854116052474 +914 849 .3008975416798243 +920 849 -.2702041194240289 +949 849 .38282952620169525 +959 849 .5728517804052264 +961 849 .4723542127632468 +963 849 -.9147760428687904 +988 849 -1.159538853795915 +993 849 .5614351086025487 +5 850 1.2896224939922947 +16 850 -.6139278685028405 +30 850 1.1533358575955528 +41 850 -.5101404782609353 +51 850 .4963456291913647 +64 850 .8545673458751505 +66 850 -.29827694905797314 +128 850 -.6057452741085861 +155 850 .6039894305293705 +162 850 -2.2821274534351055 +163 850 1.3849401370463188 +170 850 1.290451609508333 +184 850 2.8734970128894726 +193 850 2.8296863308822218 +196 850 -.8728701836370832 +205 850 .14079437347026547 +214 850 -.7036441116188696 +221 850 .12661304564200332 +230 850 .09757343683691011 +232 850 1.8316921602087586 +237 850 1.356665261188211 +243 850 .38752530642472627 +257 850 -1.1397887524611479 +268 850 .3878040872314848 +271 850 .94576143513872 +282 850 -.23829149339377106 +286 850 2.6954103555487903 +292 850 -1.6938605970817637 +300 850 -.8878713063545007 +310 850 1.359574748468246 +322 850 .4225309366787515 +349 850 -.15780896858424528 +361 850 -.0594956550720369 +387 850 -1.1279860251358553 +392 850 -.11720160495768847 +419 850 .7903687167359627 +422 850 1.0069473855636721 +425 850 -1.4966906869493695 +433 850 .36056229979446497 +479 850 -1.0312101985725834 +490 850 .34209126709285215 +504 850 -.2548533228243245 +538 850 -.5439904381037186 +539 850 .40324861681040153 +553 850 2.026055653947156 +561 850 .39631459094698845 +564 850 -1.5865029178607961 +583 850 .01838092602965949 +604 850 1.8110610059536663 +652 850 -.09755431644124783 +668 850 -.9561018210031816 +689 850 -.41552780162774117 +696 850 -.9803286654361072 +699 850 -1.209860497887807 +725 850 -.15727396497896648 +727 850 -.037504856640765256 +755 850 .3595140502518692 +798 850 -.7743725403621107 +816 850 1.0136558108942093 +840 850 -.7470662111477725 +850 850 .10613593413715913 +856 850 -.49359177471232046 +863 850 1.0079250819689416 +881 850 1.7339862915487745 +883 850 1.6105121900703616 +898 850 -.5890672781775831 +911 850 -.7733977400370182 +918 850 2.006303219133995 +922 850 .023079065290962812 +925 850 .4829066680677282 +927 850 1.8301364547911485 +931 850 .49387406712896986 +961 850 -.045795671890249884 +972 850 .7661352746401514 +976 850 -1.6636117576186586 +13 851 -.09224957547394058 +27 851 3.0100576278369813 +29 851 -.8779100237423069 +41 851 .3049082661469923 +46 851 -.7426180407246061 +63 851 -1.3105084316367008 +101 851 .06884455097978678 +107 851 -.9350628217067788 +112 851 .5588758901822237 +114 851 -1.049030861173935 +153 851 -.09449170953064917 +159 851 .2918560667436037 +166 851 -1.3158769557855814 +198 851 -.1896673260781883 +203 851 .10221840948450614 +204 851 .43658471937962817 +206 851 .12207798904000772 +218 851 -1.204835433216796 +222 851 .3219131454217771 +247 851 .31280285815403486 +251 851 -.10987343223986704 +252 851 .6806071526838531 +259 851 .43355581164970425 +273 851 -.8628766673485447 +281 851 .6068402838364637 +290 851 -.3863190053159349 +297 851 -.44453370930569236 +303 851 .0008341120145519965 +307 851 .8526899005203735 +315 851 .7597776750503872 +325 851 -.22863998049657971 +333 851 .8936678032196625 +347 851 .5835637380904246 +393 851 -1.5711657433412693 +409 851 -.9101107935811551 +414 851 -.2733958114642669 +428 851 -.42158038786092683 +433 851 -1.1076767746320022 +445 851 -.33249178466875773 +462 851 -.41776562263328176 +463 851 -1.264868481265821 +469 851 .925375282878048 +480 851 .1381712213222339 +507 851 .29594970453334274 +523 851 -.36570358644370576 +524 851 .6526222436359754 +537 851 1.530429203220516 +538 851 -1.4339206671037192 +540 851 -.32901155439179847 +550 851 -.18964694272255056 +562 851 .5242197075726958 +574 851 -.4365403342389715 +575 851 -.8050457779432048 +587 851 -.09294963992434362 +595 851 .6706829811277932 +618 851 1.1109141656915051 +619 851 1.3378446055282902 +625 851 1.3842847506483709 +641 851 -.35033023055814044 +647 851 -.273163119121583 +653 851 .6375176147625393 +656 851 -1.017188089041762 +667 851 .38479709878603646 +677 851 -1.0194959919621498 +679 851 -1.5310356212257576 +701 851 1.0466047832882537 +703 851 .5022172186522096 +706 851 -.5359603360967715 +724 851 .3805194700916332 +747 851 .7206396452332084 +754 851 1.0340179224784252 +769 851 -.7367212896254478 +776 851 .21909484039035493 +796 851 -.9098137577819403 +797 851 .02228889223631436 +801 851 -1.7636715006562154 +802 851 -.032998092005703375 +808 851 .7392448189036048 +820 851 -.6402164359339508 +825 851 1.9016975963979406 +864 851 -1.4296355842201594 +865 851 1.4823962387856349 +874 851 -2.298171643379478 +879 851 -.02634502611886866 +882 851 -.032500498647924383 +886 851 .9541559905771098 +910 851 .7908859789345537 +914 851 -.07717527462224319 +923 851 1.3009549632581587 +930 851 .7707298651410629 +940 851 .4151893021041328 +944 851 -1.0979243017896685 +974 851 -.691990415018124 +989 851 -.4039853851517943 +993 851 -1.4588001032954787 +999 851 -.8669592686173018 +1 852 .4030019172074513 +6 852 -.7149162276479923 +9 852 -.5585103431738924 +14 852 .18908045869446 +17 852 .9840911471960838 +22 852 1.6121564156772503 +26 852 -.10777475283662423 +45 852 -1.7038011001661897 +47 852 1.8629687492466351 +48 852 2.754147335527065 +50 852 -.19148375594391995 +68 852 .2417731666218369 +81 852 .5857736587587759 +84 852 -.5259619053526658 +85 852 -1.5165207300099652 +91 852 -.1933856772276434 +97 852 -1.5547536083129754 +139 852 .25426348090764184 +145 852 -.7505252180957735 +146 852 -.3562611435991764 +160 852 .08858547069596258 +165 852 -.6366603519388934 +183 852 .632981092603368 +209 852 1.0942068672888863 +214 852 .5142686683701759 +218 852 -.8561993252779945 +222 852 -.23103299946033545 +224 852 -.9492333441594591 +227 852 -.7615433367817108 +233 852 1.0911681776542743 +239 852 -1.7083323957303105 +267 852 .5808309172220213 +268 852 .7637447279832178 +275 852 -1.458942982703831 +278 852 .8943457871358389 +288 852 -.2352666431963002 +296 852 -.3297291775709418 +301 852 -.8084026421703615 +307 852 .09334823912099935 +310 852 -.4374796064568689 +333 852 .6061947964619712 +336 852 .38907895177818635 +341 852 -.18003258798112978 +348 852 .7999264635909076 +361 852 -.2482499706857214 +375 852 1.263217403140029 +393 852 -.030833236694952998 +423 852 .4042503294925006 +434 852 -.9966177039761703 +436 852 .2427641141248995 +441 852 1.0493521360535627 +451 852 -2.279209583761946 +460 852 -.18768126849486308 +461 852 -1.2202122549122962 +463 852 -.18488210417628093 +464 852 -1.7339416610775267 +468 852 .496988409563731 +478 852 1.2843954674600762 +500 852 -.01761836782878816 +518 852 -.3795614199799296 +527 852 -1.0096550873734484 +532 852 .33498024932070397 +546 852 .12476513815777447 +559 852 -1.1157109560042116 +566 852 -.07153676950777864 +584 852 .7979081668759958 +587 852 -.926952262335905 +588 852 .22999102935470775 +595 852 .6483609297286473 +598 852 -.8154089474022506 +603 852 -.3555239422688928 +612 852 -.8123241534889551 +616 852 .37364949095094524 +619 852 1.0454363575193701 +635 852 -.05039949386732548 +646 852 -.2806986681667488 +661 852 1.579170551083052 +710 852 -.6436980447419636 +720 852 -.4291393983014905 +746 852 .23005566599573543 +792 852 .5942715537508843 +794 852 .6889356972207602 +800 852 -.028853921000291355 +829 852 -1.567010335400682 +839 852 -.21491405598840302 +845 852 .34270840128811203 +849 852 -.10966929447444887 +868 852 -.6069243599054269 +872 852 .6453784678977541 +876 852 -.11135815466562288 +883 852 -.5417503796639657 +889 852 -1.2901871712056556 +894 852 .5276193931764765 +902 852 1.1623307273576369 +906 852 -.4902874808742013 +913 852 -.0576315199388146 +921 852 -.5543973432716143 +933 852 .8599525257110416 +939 852 -.218611797631776 +947 852 1.5218582017008633 +978 852 -.757088536913245 +981 852 .8156556150362131 +998 852 -.250073435094572 +8 853 -.12461504727712056 +12 853 -.30251361568445606 +20 853 .6340891287692139 +40 853 .0943524676626889 +42 853 .3209214336907389 +43 853 -.589403419924266 +50 853 .1488889011140928 +70 853 .7917054965977943 +86 853 1.0598440543163203 +93 853 .45848243742646416 +100 853 -.49066638821404157 +102 853 -.15076700030795812 +116 853 -.2398693505465368 +123 853 -.5056149851050404 +131 853 -.4743689874685577 +141 853 -.28809298649722215 +153 853 .08152870655500719 +171 853 1.0900377425910874 +189 853 -.6699903909703304 +196 853 -.08993047679514773 +219 853 -.12521825630737624 +223 853 .5522053503218434 +225 853 1.113104081817546 +235 853 -.22076989130418634 +236 853 -.5056018855401421 +239 853 1.526986597782031 +240 853 -.726307482172505 +241 853 .7645189797299805 +251 853 -.5679493435471373 +262 853 -.7870242452777548 +274 853 .07314272787766654 +286 853 .3768234416142825 +291 853 -.1466495406450994 +298 853 -.8281079984981861 +299 853 -.5244471572530348 +328 853 -.2536709101375605 +336 853 .17629081511563333 +338 853 .9351010209848849 +354 853 -.4551982113257891 +368 853 .41290539318959074 +389 853 .28443128134388235 +403 853 -.6088038111152445 +407 853 -1.068992149183408 +412 853 -.050841614841408686 +415 853 -.10021482789858406 +447 853 -.3447678555531231 +461 853 .4326563624006931 +474 853 -.7356339398028551 +483 853 -.20385867206635422 +487 853 .9458649955121731 +488 853 .5221975339029663 +493 853 .26707118550915676 +501 853 -.7817404199255816 +503 853 .9444828480616181 +509 853 .5075921121185085 +514 853 1.152907148296496 +521 853 -.22419040852181582 +530 853 -.004483702444313176 +547 853 .10677173020070727 +571 853 -.6393241699752109 +575 853 -.8364792843958341 +608 853 -.47260783579301824 +614 853 -.34346732061893137 +625 853 -.2407598490469061 +648 853 .5944114968647207 +658 853 -.7665561251947095 +661 853 -.9859790694018632 +663 853 -.6507111563903012 +672 853 -.3981615989196241 +707 853 1.2405232885180262 +709 853 -.7931475980347036 +727 853 1.0043338017468963 +732 853 .13978514483003623 +735 853 .17831626212943225 +747 853 -.6338780763316947 +757 853 .3648279916114445 +758 853 .3904483538405955 +781 853 -1.0207352078358625 +782 853 -.18369432876502292 +792 853 .2288633849415693 +796 853 .7340079770344146 +819 853 .1425509375455476 +820 853 .11719484206547039 +827 853 .7352674481335847 +829 853 -.00032607862716230174 +834 853 -.026956056653940796 +837 853 .39543687619711787 +840 853 .921097627453207 +848 853 -1.1911605575780502 +854 853 .42669187823408244 +862 853 -.1830605502075422 +869 853 .8019586278650653 +870 853 .7757692236710503 +904 853 .2375376415205053 +918 853 .9323272821367983 +920 853 .8115786435031827 +948 853 .25799409160062037 +957 853 -.8322796458258723 +959 853 -.3356851646218342 +962 853 -.16643686298097612 +970 853 .1959428982147693 +972 853 .9474735165930634 +983 853 .0955860372314936 +3 854 .03626988282705342 +12 854 -2.886652879255069 +16 854 -.24536207459651424 +20 854 -.2587655288240064 +34 854 1.5293486948107617 +48 854 -1.276405122093128 +76 854 .4327693514018418 +104 854 -1.5558332373062034 +132 854 -.49063094895127185 +134 854 .3899347553243325 +135 854 -.7205064922361217 +187 854 1.0757952629554726 +196 854 -.17895762054019065 +230 854 1.1314701637786329 +246 854 -.22581289742308103 +253 854 -.22274500718459153 +278 854 -.5021428365128342 +280 854 .7088400279746327 +283 854 1.7066743768134183 +295 854 -1.310713614833595 +303 854 -.6190465798157191 +305 854 1.1304122712077889 +336 854 .07610581584436378 +343 854 1.449713874339386 +345 854 .7346165139612904 +374 854 -1.9783244058558358 +393 854 1.696070965980797 +426 854 1.8252821845175833 +427 854 -1.5110569872449358 +455 854 1.3515981179293115 +466 854 .5879996623935015 +496 854 -.22982207680183256 +539 854 2.5824848908741393 +542 854 -1.5462994796769074 +554 854 -1.0798889522863007 +560 854 -1.6178588566452476 +563 854 .4910275318680114 +578 854 -.5452626113869803 +589 854 -1.7572525443636318 +608 854 .47578637164542636 +613 854 -1.2760490486860363 +620 854 .33081768263545897 +661 854 -4.177535370662091 +666 854 -1.90847932902154 +674 854 .14414268580579087 +685 854 1.4820601097364778 +688 854 1.823270940898859 +703 854 1.9602407359922631 +784 854 .2503163744643631 +785 854 -1.1275491751786453 +799 854 -.12941670061772223 +808 854 .26521564599691516 +829 854 .131509352286879 +849 854 1.9819141696355551 +858 854 1.2249248337171332 +861 854 -.8684575726140712 +865 854 -.3711500877242345 +882 854 -2.5119220256624923 +901 854 -3.0186006168294477 +907 854 .8541953548905729 +912 854 2.7130498956687474 +924 854 3.208500959346903 +936 854 -1.8624757307679487 +942 854 -.7781891921327957 +954 854 1.5901511304300764 +958 854 .32859092898939657 +964 854 -.47371077456077026 +972 854 1.753353446759375 +976 854 -.625967154806393 +978 854 .09731730612951407 +999 854 -1.9954251689988434 +14 855 -1.0612919867023438 +18 855 -3.4164128709474606 +19 855 -.9912791224727109 +22 855 -.8710257961555343 +24 855 2.4206535110965164 +26 855 -.05889241271332703 +38 855 .1898309216803494 +67 855 -1.4009012070091669 +89 855 .19342257274443986 +103 855 1.734914098119577 +105 855 -1.2745013656163542 +111 855 -.18509680949085924 +136 855 -.6695971300732597 +188 855 -.358284049956692 +200 855 1.5929105486754496 +201 855 -.3591533600811296 +205 855 1.1228803851435603 +206 855 -1.706620454054481 +232 855 -.846788262283811 +237 855 -.08350570554252525 +246 855 -2.796116717601562 +254 855 -1.2102553097998678 +255 855 -.1090387444937763 +266 855 -1.5670913307060432 +268 855 -.18278948042158166 +297 855 -.010922469034907803 +305 855 -.34814135394481893 +307 855 -.8734548525156798 +308 855 1.7363544829975306 +315 855 .4733946252740353 +319 855 .21495028069808278 +334 855 -.9140228964935996 +356 855 -.8321634824343404 +357 855 1.1983710871239566 +377 855 .8450029833380268 +400 855 .2131986141118609 +417 855 -.7237859330609763 +419 855 -.0745918921322772 +425 855 .7594239220587801 +438 855 -.3230675500916176 +439 855 -1.8761952052320638 +444 855 .27900554931610116 +473 855 -2.4536712366088342 +483 855 -.04804185916673266 +484 855 .8657804653265291 +488 855 -.0661755302913001 +511 855 -1.812085043982073 +531 855 -.7596452446190773 +541 855 .21473227749676485 +549 855 2.528451445246585 +561 855 -.40025375580506256 +582 855 .07148925373151722 +588 855 .2660681194908368 +591 855 .005609291467692547 +600 855 -1.6248820496391663 +601 855 .9909794102354881 +609 855 .42141163039307217 +616 855 -.6240625882427144 +640 855 1.8209451236227143 +648 855 1.1210171420108033 +677 855 -1.6798059023454106 +686 855 1.304786416551246 +690 855 .19306157688034134 +703 855 -.23463814872039057 +712 855 3.2578425382729175 +718 855 1.1496526028254437 +722 855 .8363474137357577 +723 855 3.551358954569043 +728 855 1.9611984748207056 +747 855 .8802099485469937 +754 855 -.2771129167062431 +825 855 -.3926494160425326 +843 855 -1.6053288353200408 +858 855 -.8828697163384039 +865 855 1.022035633158843 +867 855 -1.222940392021518 +875 855 -1.0469368532708203 +899 855 -1.168449874724253 +906 855 .12271864335772453 +908 855 .12534448180516927 +920 855 .9576342915706891 +931 855 1.859122569966182 +933 855 -.5700778231966626 +942 855 1.3834767704208586 +945 855 .9039728027686628 +965 855 -2.342602301176284 +977 855 .007589468448822356 +994 855 -2.0311950665510743 +8 856 .12146468819470699 +42 856 -1.4636016210545457 +77 856 -1.859302365373943 +83 856 .3053136224679075 +91 856 -.8241502655105204 +92 856 .8029612089650731 +95 856 -1.1154321928722277 +111 856 .41151969700620056 +118 856 -.523037548554404 +129 856 -.44207025090190033 +136 856 1.5026394967131043 +163 856 -.15776003364123453 +165 856 -.21476720722662102 +168 856 -1.2924454183890752 +169 856 .39916313707517986 +172 856 .6619198909987765 +186 856 .661133771502002 +188 856 -1.1089975219507584 +192 856 -.5529849978931958 +203 856 .7187018696297363 +211 856 1.2432584304314391 +214 856 -.25464346524254516 +226 856 2.2844774551198768 +235 856 -1.7870207831869787 +241 856 -1.2098383624124345 +249 856 1.1338476952097063 +256 856 -.6046985070045866 +277 856 1.7713691140276837 +279 856 .03390450346033837 +288 856 1.6416535099214737 +290 856 .7000612969257292 +323 856 -.20611868347455609 +324 856 .124094892806027 +343 856 -1.1053614843841653 +353 856 1.9192742381772843 +357 856 .8352060823230798 +358 856 -.0971963324625203 +365 856 .2976848580402154 +380 856 -.3894102126204269 +392 856 -.25795085602359363 +406 856 1.4966088724632154 +412 856 -.9316738842210945 +418 856 -.6561985897464259 +426 856 -1.286322133521574 +427 856 1.8896691091963222 +431 856 -.5837712267700174 +432 856 -1.1161344764850594 +448 856 .008428703766763579 +452 856 .29820622634060134 +472 856 -2.1767961368191564 +486 856 1.111476670432118 +496 856 -.2695537227853386 +513 856 1.05912836312596 +524 856 .39795707301738437 +526 856 .5745719117763652 +535 856 -.19190599346676912 +577 856 .3924591891862359 +597 856 1.06502842353821 +603 856 -1.2195123957030585 +681 856 .42804838442626325 +689 856 .18505879664067956 +694 856 .9826159930281754 +697 856 .42111170581515084 +704 856 1.329821319431996 +756 856 -1.9591934634054569 +764 856 .9792114954897403 +767 856 -1.2915099413460913 +780 856 .5132084984928392 +800 856 .5792646310742257 +813 856 .4779448428221028 +818 856 1.3402404125539373 +819 856 1.7180374106803358 +830 856 .4413505169796129 +858 856 -.058384788395358905 +861 856 -1.1162398650054761 +865 856 -2.1229653074763997 +879 856 -1.2762188009644349 +899 856 1.39931304547447 +900 856 .43030041268325236 +934 856 -1.3020844053920302 +938 856 -.45368354636870895 +940 856 -1.076089269460816 +941 856 -1.6425237958516772 +944 856 1.5952645471402283 +946 856 -.5695128186541789 +947 856 .29715454635642835 +965 856 .168526875504571 +969 856 -.565932013830077 +989 856 1.3155404329357938 +994 856 .9005624576958304 +1 857 -.8498706477399313 +4 857 .4021518931499356 +35 857 -.2881581621889819 +37 857 -.16316820705173435 +87 857 -.4946085584776587 +90 857 -.37157526152243764 +106 857 -.55704828970329 +118 857 -.01949064353717462 +136 857 2.1646163207543996 +147 857 -.1559858985334356 +150 857 -.7050580089288428 +174 857 -.6716494672263332 +176 857 -.6774274018189304 +186 857 .0599162401485515 +188 857 -.17938462045064252 +201 857 -.847338497961586 +203 857 .17593326560426747 +209 857 -1.4123483706215842 +211 857 -.003160351926462357 +227 857 .9663492498357293 +247 857 -.6332895299576254 +255 857 .47838048285544876 +281 857 .1003746297144491 +288 857 1.5308189738655344 +305 857 -.08515431755773917 +306 857 .17197696811909643 +308 857 -.1068807256048924 +309 857 -.354104031634021 +323 857 .9590591463702964 +333 857 -.948676939735889 +342 857 .27529133864091787 +346 857 -.3565997900144253 +365 857 -1.1027733119032423 +376 857 -.03017599553928807 +385 857 -.35556249775253457 +417 857 -.03121676483392888 +431 857 -.3587642810652582 +435 857 1.1162225354932018 +439 857 .38910020939366 +440 857 .03540875382878643 +458 857 .3965590958699691 +460 857 -1.1215751163801335 +461 857 1.0173659059805464 +476 857 -.2111960161158789 +489 857 .6236806633412726 +504 857 -.07602454508377741 +548 857 -1.2039377917184666 +550 857 .6844538218961423 +551 857 .9171696394911626 +562 857 -.003720414638343411 +564 857 .3477588157774888 +571 857 .29298563813285255 +573 857 .023322072567272117 +583 857 -.1024277385556867 +588 857 -.3413326029408711 +608 857 -.0485226138595547 +615 857 .022974872628236304 +625 857 -1.2662918790179012 +630 857 -.8067623677335032 +632 857 -.6181462605479132 +637 857 1.5153463836553802 +667 857 -.6170383059769693 +671 857 -.4127420551663613 +690 857 -.5537365716054511 +693 857 .09067564987711257 +694 857 1.0579852327264767 +696 857 -.8941476568366994 +743 857 .9204550411042667 +746 857 -.6906350754618588 +771 857 .5820517196769133 +772 857 -.6002851023693726 +780 857 -1.3301158027579798 +789 857 -.5607074753744297 +793 857 1.80071240758044 +796 857 -1.4525142720320292 +803 857 1.1093019887873632 +806 857 .7947178760347862 +815 857 2.1867650938025665 +838 857 .9524269298343082 +869 857 -1.2210693953415126 +876 857 1.208704373423339 +902 857 .6889529402895144 +914 857 -.5460301112106949 +925 857 -1.1319432286714866 +954 857 -.22845184987252415 +955 857 .1750202929647609 +962 857 2.0002564754780425 +975 857 -.6832196214263848 +980 857 -.26836070971989334 +992 857 -.2548349126412721 +7 858 1.2375759061079896 +22 858 -.20612766523155546 +25 858 2.098033835046814 +27 858 .13617009628228924 +35 858 -.007794418625476127 +47 858 1.243748940450115 +60 858 -.21727396348596587 +61 858 -1.9400093504561504 +83 858 .8944660836059679 +105 858 -.008067782653041589 +107 858 .07495293716975512 +118 858 -1.6576359260090445 +121 858 -.6723993983085201 +122 858 -.22237678539711683 +127 858 -.9043613523924192 +128 858 .8098175697195703 +131 858 .5955071094738151 +143 858 -.3060849964474122 +160 858 -.9069447222558707 +163 858 .6839552959485491 +173 858 .04847012366388153 +178 858 .32928971439818044 +190 858 -.4247318619637545 +205 858 -.8648099749739439 +229 858 -.20409673075074847 +230 858 .69416899944036 +245 858 .7415252881352279 +260 858 -.0968596018909281 +264 858 .16976234075892035 +271 858 1.2851888843439856 +303 858 -.5420859347778235 +307 858 -.8898984566748932 +308 858 -.34079499618050757 +317 858 -.8582337388783319 +332 858 -.16541421001769857 +341 858 -1.2568812614923806 +350 858 .17796619768864946 +369 858 .28511178025222494 +370 858 -.4583946595622117 +377 858 .2703617372005006 +379 858 -1.148878055492109 +385 858 -.7501803849616453 +388 858 1.0856112679007508 +391 858 -1.201573265206265 +392 858 .2996099875004736 +395 858 .8753247624927945 +409 858 .5833823809013948 +417 858 .6791762417214408 +424 858 .8755627144853086 +428 858 -.3227435463820047 +453 858 -.4457784064589189 +462 858 .17384763286105548 +466 858 1.310734291456186 +474 858 .8397058513961668 +478 858 1.0385084322204803 +481 858 -1.194702242745139 +482 858 -1.0012111405296207 +484 858 .06354840550463664 +499 858 1.0087922052436558 +506 858 -1.2658223497251215 +534 858 .6158981331374492 +537 858 -.6705672933038876 +545 858 -.8938644461620372 +551 858 -.16582318390581197 +552 858 -.2710072189140661 +557 858 .9442253208466544 +578 858 -.5610185199882088 +588 858 .46348449004714376 +603 858 1.4201965245859691 +617 858 .8383459550017194 +625 858 -.2705804378930984 +639 858 .9198480436085237 +642 858 .8789898676753878 +655 858 -.35419876193443794 +656 858 -.17971039088588528 +663 858 -.10215833167329152 +681 858 -1.6604144307803983 +688 858 .5161356604395776 +696 858 1.5407050331091334 +704 858 -.13522792466630812 +714 858 .34023277518242945 +738 858 .47504948720416396 +751 858 .2663698805861642 +755 858 2.196710176230849 +775 858 -.6070801328476523 +778 858 -.06140281466468328 +789 858 -1.3533695105290178 +793 858 -.6097030105779457 +805 858 -.13124933822563556 +809 858 -.17525708020814923 +810 858 -.06091772423447776 +819 858 .4224887628621629 +824 858 -.03462581487876736 +871 858 -.4695654906565821 +896 858 1.7539391636920336 +900 858 -.13631640875874945 +918 858 -.003751429675488374 +924 858 -.2673866826026562 +934 858 -.6480377014263585 +939 858 -.5202911579758432 +951 858 .5731619688050646 +954 858 -.14135346533477205 +955 858 1.867632023860209 +958 858 .6976199551571315 +966 858 .0249532941766734 +980 858 -1.2990583705174918 +5 859 .09967092370107802 +12 859 .35230209902710247 +21 859 -.6464707189161361 +24 859 .48544062484219247 +35 859 -.03232608280395721 +37 859 -.15078597116900816 +45 859 .29207230753351154 +47 859 -.595905775957203 +81 859 .3172680804853352 +82 859 -.05027972282383783 +94 859 -.2373876243317295 +101 859 -.5805628200404981 +107 859 -.6956345088062661 +122 859 .2716259246557466 +128 859 .7134593598448946 +136 859 .24631453458139546 +144 859 .06486947912210828 +149 859 -.9243517394322813 +153 859 -.036597741394176694 +173 859 .06879124987576571 +175 859 -.5112760812762004 +183 859 1.124769868715588 +196 859 -.3384518733023293 +197 859 .7172718498016563 +219 859 -.033374772050626667 +226 859 -.018616225351526003 +235 859 .0625824530514302 +256 859 .9613848929317119 +259 859 .5205692529843463 +264 859 .016098113833278728 +266 859 -.12397821681082061 +289 859 -.786480521444533 +309 859 .04641186778019314 +319 859 .11563390861388571 +324 859 .5302230554115935 +363 859 -.6063333861178053 +364 859 -.18418887544287602 +381 859 .26252922140248913 +382 859 -.5230040468094075 +393 859 -.8743924165871215 +394 859 1.2760511407162045 +407 859 -.6246294941650745 +409 859 -.39122256380608283 +410 859 -.8895589452325686 +412 859 -.2468384921747945 +452 859 .23977380486273284 +462 859 -.32792131697716953 +467 859 -.2278979661953498 +468 859 -.21116165793906563 +492 859 .4455021429187328 +515 859 -.02241769108400843 +546 859 -.15394128685706468 +547 859 -.2722195451791119 +548 859 .170039608424191 +577 859 -.71470014531797 +585 859 -1.513146651031536 +614 859 .2493481247064989 +620 859 .6630358382435444 +625 859 .005970476459679908 +626 859 -.6564026327711678 +630 859 -.32586200488172334 +633 859 -.23552729402086672 +637 859 .3589574341339128 +641 859 -.03718775309693935 +646 859 -.7999312280998896 +654 859 .21567229952471245 +659 859 .5352280036638795 +662 859 .13420898951124602 +670 859 .8373772919014385 +673 859 .07917568480910214 +676 859 .17106736349230314 +689 859 -.5590467358266862 +703 859 .2397283698915897 +719 859 -.11761593254833005 +727 859 -.42315025807948065 +735 859 .3166924633712438 +742 859 -.7191391896609785 +748 859 .009488197340141974 +752 859 .1478906003537271 +810 859 -1.0707012692366722 +811 859 .23995311811458833 +820 859 -.4527473450853816 +822 859 .25641579297486905 +838 859 1.324175057643683 +847 859 -.9144163285495269 +863 859 .45565753172542334 +866 859 .31924045942147555 +873 859 -.08604714797598415 +875 859 .4012333489590128 +877 859 .11079960958657797 +879 859 -.35870314078264326 +895 859 -.6260267121157549 +905 859 -1.4085957240065476 +906 859 -.8896461216861873 +908 859 .4687057820699419 +919 859 -.6477145721553366 +930 859 .03411872063802415 +950 859 .5091390550786559 +955 859 .19169255289620454 +966 859 .2636838764009555 +974 859 -.5523955239159374 +976 859 -.32882054821836415 +979 859 .09250517563220242 +980 859 .36612914075292413 +982 859 -.0007985028344288537 +996 859 .13430863479952895 +997 859 -.6746617977462185 +5 860 -.8152884525315092 +8 860 1.0998413240305003 +18 860 2.327010993140905 +46 860 1.317165994156224 +51 860 .8415194928694312 +65 860 .5925935416243013 +68 860 1.4153279976819348 +71 860 .3710566486783462 +91 860 .8999423640873127 +113 860 1.9169800973489346 +168 860 2.095146648168134 +172 860 .8325553660593065 +202 860 -.6047682804541845 +216 860 1.0785522888098673 +219 860 -.26180973034186866 +224 860 .5382374565531233 +228 860 -.049298498461414236 +238 860 .5678640526529232 +246 860 .762998684081641 +249 860 1.6592879612552636 +262 860 .34865344696091316 +265 860 .038216861451043554 +269 860 .04193885816758744 +271 860 -1.2757099266969123 +284 860 .8978073705287728 +287 860 -.36191925896435423 +290 860 -.7423718249364968 +295 860 1.2055254674670142 +318 860 1.3364872620855455 +328 860 1.2600231353234146 +339 860 1.2408625179401058 +341 860 .3288752563297394 +343 860 1.1338919997210863 +358 860 1.236705838638978 +368 860 -1.9661997057766645 +370 860 -.15877093133873593 +379 860 .13011315547687044 +382 860 -1.1312680273804834 +415 860 1.1826920128256093 +422 860 -.2001178486162891 +424 860 -.9385852113615171 +428 860 .8435342777000058 +461 860 -.6624115384284762 +467 860 .414221940027321 +491 860 .6937782830470839 +492 860 1.7749837420503887 +494 860 -.4015925564474078 +506 860 .46135029063386984 +508 860 -.6396932354749555 +523 860 -1.3110919325958796 +558 860 1.3253460707007463 +563 860 -.5727815452446192 +568 860 2.3651839307824227 +576 860 -.3226967120762576 +579 860 -.025043255911067333 +583 860 .7368773901125543 +587 860 .2648796030778294 +593 860 1.2463397904040672 +622 860 -.04931835461043449 +637 860 -.8109056611665303 +652 860 1.0556760733611081 +675 860 2.2417246682211145 +679 860 .3896958132450933 +686 860 -.9967481987143872 +696 860 -2.065418716802924 +699 860 -1.9327722881643064 +711 860 -1.006127061083895 +719 860 -.5962184577797414 +726 860 -.5065058094013937 +729 860 -.021520651204743176 +748 860 1.1711102996333917 +749 860 -.7161437574051328 +760 860 -1.799702038521494 +762 860 -1.0188425830767374 +776 860 -2.2454978091334277 +793 860 1.5044029977984386 +796 860 -1.4878552646621421 +804 860 .7753402989657628 +810 860 .36071268693467434 +813 860 .35660655529424895 +817 860 -.17767544956634704 +819 860 1.4041033355245718 +823 860 1.7608959460364488 +828 860 -.10688701236691135 +830 860 .22440574372869185 +837 860 -.32620978440654647 +840 860 -1.370243826552717 +850 860 .551452471102388 +852 860 .8209227808126562 +855 860 .7777165247352859 +856 860 .44022924523315915 +891 860 .7787781112619926 +897 860 -.6024941334709025 +907 860 -.41068795394917 +934 860 .581866523721773 +959 860 -.10311024141047637 +972 860 1.122771684901233 +973 860 2.0184232316777524 +994 860 -.19549999605185847 +995 860 .4846408982106274 +23 861 -1.1061323845171085 +44 861 -.6930601763498452 +50 861 1.136257291694491 +57 861 .320950288392807 +62 861 -.3576603978875556 +67 861 -.2417975411547968 +68 861 -1.4689163499036852 +89 861 -.6304073355233322 +96 861 -1.1519256468687564 +105 861 .3865716887399773 +106 861 .49313260952102556 +129 861 2.891101037452971 +130 861 -1.6589392627654287 +135 861 .2664123359907546 +138 861 .8247506776128911 +142 861 -.09060574513013925 +145 861 -.4773212987561227 +158 861 -.04465650329659744 +174 861 -1.1340515890082667 +183 861 1.926087319197504 +218 861 -.7853704852851917 +247 861 -.9007815927982616 +248 861 .1935084847769399 +273 861 1.3431873682043534 +278 861 -.04184322938351007 +290 861 .17834863602269257 +292 861 2.67787773936558 +296 861 -1.3049867504085024 +297 861 .29641081021118815 +335 861 .24876536949724098 +337 861 -.6428207557221882 +351 861 -.9409287771716248 +357 861 .15281184614448928 +367 861 .8454660935880673 +379 861 -.6198663847855744 +382 861 -.08733576919134069 +384 861 1.2104141538997164 +385 861 -1.8833550943916697 +386 861 -2.1305141766132643 +397 861 .2595316179854912 +403 861 1.445100865945121 +406 861 -.7861978701983996 +412 861 -.8767815237984435 +416 861 -.48063031847437965 +455 861 -1.226039936546257 +461 861 .7628693414030114 +462 861 .1306570915264473 +477 861 1.647664650937773 +485 861 .7709117755014752 +507 861 -.6148221193158794 +508 861 -.693512980212898 +518 861 -.4703305988668864 +519 861 .7562167148024823 +534 861 .34516266479087404 +535 861 -.6163802466566798 +537 861 .8177501259853522 +541 861 -1.1104448717721354 +556 861 .8940635886772448 +582 861 .4730696811637431 +583 861 -.9707393565528374 +612 861 -.12376214547789574 +614 861 -.817208943692294 +615 861 .5819604021902848 +622 861 .6471118460082775 +626 861 -.7586659445555539 +633 861 .10946064158968807 +640 861 .6413675136892328 +643 861 -.004332031694042615 +650 861 1.0316759761172656 +672 861 .6614254559971942 +686 861 1.1746615629010069 +692 861 -.975691112492033 +700 861 -.057686175671184205 +757 861 -.5831458388092422 +770 861 -2.465528711710849 +794 861 1.4879888852684124 +796 861 -.16516892289403073 +802 861 1.0668195356882422 +810 861 -.14773368912226933 +816 861 -1.309259095863598 +829 861 -1.850651185081381 +848 861 .0936410081120615 +856 861 .947765004107435 +879 861 -1.30692915339675 +885 861 1.4909501760089567 +900 861 -.027492036295213684 +935 861 -.1282167255353842 +954 861 -.6159765407148314 +955 861 1.601170595974774 +979 861 -.5181243652909218 +990 861 -1.3226824172707288 +2 862 .3002532093551815 +3 862 .0002484673850212801 +21 862 1.2784902630365467 +25 862 .4266260534039962 +43 862 -.30356402037459407 +82 862 .633529928652478 +85 862 -.30793549020245214 +90 862 -.2639178335547407 +91 862 -.09068712398763783 +95 862 .09242479515859253 +96 862 .4633978684679707 +118 862 -.8699352774500945 +131 862 -.4777648816881463 +136 862 1.2603436662965117 +149 862 1.951627930009144 +153 862 1.203451617947605 +156 862 .5952303740291575 +164 862 .20147225510283506 +221 862 -.04816971682171525 +228 862 -.7921993663857776 +240 862 .724925339419798 +247 862 .23249479829786157 +253 862 1.1954704719120204 +254 862 2.2696971472631207 +262 862 1.0296125219385568 +271 862 .10923169203642755 +276 862 -2.4793015082521097 +281 862 -1.066525628746154 +290 862 .013584099847926079 +298 862 -.9328162464485639 +321 862 -.23875940719462382 +342 862 .6797785180656806 +347 862 -.7923122827961677 +348 862 -.7669214957950006 +354 862 .11639253513040401 +368 862 -2.012973515544499 +375 862 .9479383102396631 +383 862 -.8682598199194638 +402 862 .04201242396828958 +421 862 -.25718428706416196 +425 862 .36683652580163884 +435 862 -2.0271119952361665 +449 862 -.21673150635839006 +459 862 -1.046555403276589 +476 862 .5566701107900258 +477 862 1.9768903654064918 +480 862 -.20581714736862783 +483 862 -.43743779822721507 +488 862 -.5546276460152821 +493 862 .3038592068410262 +508 862 -.642443956485918 +513 862 .9793407688412409 +517 862 -.9518306752640253 +519 862 -.9125336507145129 +523 862 .6880445839256737 +545 862 1.4501194722802915 +547 862 -.8209596787926994 +548 862 -.15330856285266203 +562 862 -.874054330704706 +594 862 .46208617639683885 +595 862 -.6543653481690056 +600 862 -1.9908615902382047 +604 862 .3196587646290039 +607 862 -1.0873455365141589 +608 862 .045072045323326176 +612 862 .027744025575882236 +616 862 .31595977391438446 +632 862 .012420823588210755 +641 862 .4696185008858102 +663 862 .06036843352898377 +664 862 -.227187718201999 +671 862 .43147708195274087 +699 862 -.8748753338787609 +704 862 -.8208461437953957 +739 862 .7851176949323831 +748 862 .5765859680510783 +756 862 .03415988517004351 +768 862 -.6331346345805583 +777 862 .474307201729411 +786 862 1.7525378378471859 +787 862 -.43048837374332105 +793 862 1.2744549821433537 +798 862 -.8660054113573423 +803 862 2.5475615343135978 +809 862 .4717543207707063 +811 862 -.697475152474391 +835 862 1.3730623027580837 +837 862 .03585786163157764 +838 862 .5982472262310196 +842 862 .05659660034143733 +860 862 .7684501632693681 +865 862 -.2609728455325204 +941 862 -1.9056679864924775 +951 862 1.0990736820967284 +952 862 1.661784455069463 +960 862 .8158995115500385 +961 862 .02633216976189783 +999 862 .8278690055860353 +7 863 -.4756426328609959 +10 863 -1.47165190039543 +26 863 -.04432355771896651 +28 863 -.34960628577325736 +32 863 -.7695075675447711 +34 863 .034960439623332784 +37 863 -1.728203853769993 +44 863 -.07184229524048857 +45 863 1.0707376061381113 +74 863 -.9078598269469982 +80 863 -1.21444469936595 +92 863 2.4973019360995625 +102 863 -.23814360573708315 +106 863 .6038049343182426 +111 863 -.3764856037445451 +124 863 .8918996797078509 +136 863 .8203245747502425 +157 863 -1.0299337805038253 +167 863 1.454958292230962 +169 863 -.26262285985838935 +170 863 -1.0742886147723107 +175 863 -.22397437522044006 +195 863 .6703472681999191 +196 863 -.033194635660131866 +198 863 .4193140764319072 +201 863 -.24696526477474776 +219 863 1.1221868459006843 +220 863 -.04014936517582125 +226 863 -.04956356255282651 +266 863 .9534779417245574 +291 863 1.2542568641854122 +320 863 .39713438107577326 +324 863 1.2566130590983107 +337 863 -.056957337856083035 +339 863 -1.4393263677061898 +340 863 .4594530854464979 +345 863 .3306403100175064 +349 863 1.8097190707061113 +352 863 1.1292064348006334 +357 863 2.60798954690175 +365 863 .19606096305760107 +384 863 .5535826256899905 +390 863 .0774411357825662 +419 863 .006658820689172756 +429 863 -.7425181049788603 +444 863 -.6166191454049513 +454 863 -.36315484410125304 +458 863 .7516556535985432 +488 863 1.0644274901299622 +489 863 1.2399179510357314 +492 863 -.6713368884008886 +499 863 .36858338929476253 +518 863 -.48872332614576025 +527 863 -1.1381750719975696 +532 863 1.3717949448288216 +544 863 -.09475539789074552 +547 863 .7729989801648305 +557 863 .026501354460997578 +573 863 -.29416514527971893 +590 863 .14888680673453625 +596 863 -.4326424410928937 +605 863 -1.5785629022925356 +608 863 -.9277691978798671 +621 863 -.46290266218921244 +637 863 .008497134559605502 +642 863 .08327496202402133 +653 863 .6585725855174355 +659 863 1.1060931034096155 +674 863 -.4791200720349898 +680 863 -.6856653552935297 +684 863 -.06517682422479226 +685 863 -.6124810621454974 +705 863 -.5566142839455591 +726 863 1.4596844655198522 +735 863 -.9596317023104145 +752 863 -.36808796726880677 +767 863 .45501778293993017 +782 863 -.12358841884068006 +785 863 -.49923071796685736 +808 863 .878146181039138 +812 863 1.5457621143241438 +815 863 1.1192090004577335 +816 863 .40213688806478376 +823 863 .4586386082772945 +830 863 .27292164442365496 +854 863 -.6963144858988294 +855 863 -.7379140429912364 +872 863 1.1603385625145992 +882 863 .8420213944203832 +888 863 .38607020022175426 +891 863 .22382458423979834 +897 863 -.9508496997204022 +902 863 .10006952376005752 +946 863 1.0461219243649753 +947 863 .06868591334024597 +961 863 -.5621246867326345 +962 863 -.8345407907056646 +986 863 1.4430308822102362 +987 863 3.0237484729227893 +997 863 -.8869759362467361 +2 864 -.26707749023160166 +6 864 -.052837261054005866 +7 864 -.996209486751858 +29 864 -.7596505293335871 +32 864 .058950388985240076 +63 864 -.7358432153157859 +82 864 -.243745474578161 +83 864 -.5887704503406186 +99 864 -1.3977807641939257 +101 864 .3070112908804682 +110 864 -.4195371636854784 +117 864 1.4198760216676902 +127 864 -.4984451747173507 +130 864 -1.3960784024148754 +136 864 -1.4802923563086734 +186 864 -.57942988241332 +189 864 -.5996571032898775 +195 864 -.02152667737660735 +197 864 -.2241100187163272 +209 864 1.7055652102084005 +251 864 -2.152627421564024 +282 864 -.48260695077714716 +286 864 .669056402169104 +287 864 -1.1115720828977877 +289 864 .915614019441003 +296 864 -.9798058525981531 +304 864 -2.105463949775389 +305 864 .10040948908717962 +315 864 -.09729298761976789 +331 864 .24281722642847925 +335 864 -.18500234794366363 +337 864 -.36713509174733183 +342 864 .040368126794447096 +348 864 .962913002207075 +355 864 -.818727807926493 +363 864 -2.474291254562525 +373 864 -.7315381797590201 +380 864 -.8893044491221419 +407 864 -1.9746101567418781 +414 864 .5362409921965494 +439 864 -.68734466357984 +452 864 -.21321829935190606 +469 864 1.082420096087968 +473 864 -1.184271172882246 +487 864 .12102127213839683 +514 864 .9651599916686862 +525 864 .33654454724022 +542 864 .6130163000255535 +555 864 -.24788873813750167 +581 864 1.1594414413938343 +606 864 .5778886682942548 +623 864 -.013845615487431975 +627 864 -1.3673961335099818 +631 864 -.7339659807968395 +641 864 -.6295422133347501 +642 864 .9261446441079715 +657 864 -.37774084086684007 +686 864 1.3743785569371296 +689 864 .3779651719155878 +692 864 -.5697668222558054 +699 864 .16956117115184943 +703 864 .9836290575660027 +724 864 .7311360292749355 +733 864 .3086043645254282 +736 864 -.9023109180744013 +755 864 -1.1251848440430003 +762 864 .6742968433451574 +797 864 .5365501033879752 +799 864 -1.2208836100846727 +806 864 .2159074607888531 +816 864 -.9145749599718774 +818 864 -.2375970687033497 +824 864 .9755043681362352 +833 864 -.9630658410100749 +859 864 .7373711624909554 +871 864 -1.1765096189477435 +884 864 .1448082997081398 +911 864 .4211633282220618 +927 864 1.4262565083337597 +938 864 -1.346127634618716 +956 864 .15189800910742218 +958 864 1.0929178402784463 +959 864 .9501667361859766 +991 864 1.4051764519332863 +995 864 -.21169528118154943 +4 865 -.4706618414577109 +7 865 1.6262361192104025 +21 865 1.4132336734173776 +46 865 .4396517372153608 +47 865 .5313884348008017 +56 865 -1.7363021588163396 +81 865 .16063197213017477 +95 865 -1.5694525361342466 +103 865 -1.7436604017962472 +129 865 -.3049835771820816 +131 865 -1.2794541235083556 +132 865 -.3992286099548934 +149 865 1.0223618997391957 +173 865 .20690426103759937 +183 865 -.8445978338020228 +195 865 -.1358623398145964 +199 865 -.23922344229242753 +203 865 .6120428629945077 +204 865 -.39931513508963373 +217 865 1.0372333032945908 +229 865 -.4517845634094052 +233 865 .7575947382624597 +244 865 .7979516683415424 +256 865 -.5641866985819012 +267 865 -1.2798403614409313 +274 865 -.7190516337308174 +285 865 .7882152699196765 +292 865 -2.020728346317684 +310 865 -.015617389438690288 +319 865 .5329688087448508 +366 865 -.1148615940909943 +369 865 .36680729428735104 +370 865 -1.7939440622977583 +373 865 -2.296254872826214 +389 865 .7192909062330864 +398 865 1.0920332576678742 +400 865 .11009902228793264 +402 865 -.03876158002375869 +403 865 -.9495178976210892 +409 865 2.1303504868063783 +414 865 -.07077707938532354 +452 865 1.241444702961433 +456 865 -.22965013021205394 +457 865 .9015361035800983 +462 865 2.2156774483900383 +470 865 .788544549488917 +474 865 1.24294937738783 +476 865 -1.0857261314444644 +480 865 .5581085626631371 +514 865 -2.1698183466292558 +518 865 -1.0090228480722006 +522 865 -1.2971357936620718 +523 865 .7141737704521748 +524 865 -.5462474292124203 +527 865 -.8563018081969828 +537 865 -1.636703646578269 +554 865 1.1187908284649848 +556 865 .7714039438675322 +568 865 -1.1546954697420604 +569 865 -1.3511721176024196 +580 865 1.0877130656078542 +588 865 -.057062947763503666 +592 865 .629911654561292 +597 865 -.11947875400265452 +606 865 -.775922324241577 +620 865 -1.5013543990259464 +640 865 -1.5333518867236333 +644 865 -2.3066951781426166 +653 865 2.2536556278058164 +668 865 -.31205522575093536 +672 865 .2723261643449438 +693 865 -.13681024058228264 +702 865 -.07095626097993044 +706 865 2.0302667719860943 +732 865 -1.6765492384457161 +739 865 .3369365200003457 +746 865 -.9249641587614058 +761 865 -.8262961025337476 +806 865 .16778703856963922 +809 865 .3720764383974321 +810 865 1.5574209599914322 +842 865 -.319715739476565 +852 865 .2727643593663208 +877 865 -1.6516478248172088 +885 865 -1.7260924509558018 +890 865 .2314094864357413 +904 865 -.29740706533566463 +912 865 -1.8842714587025111 +920 865 -1.4065939567171581 +921 865 -1.6825899209104436 +927 865 1.0526168274158387 +939 865 -.9540601872521491 +946 865 -.46283220627631444 +949 865 -.7212276100805206 +955 865 .3709812096029919 +977 865 -.5807553889114708 +980 865 -.4374830692295523 +992 865 -.2228370006731633 +993 865 .9743265670306147 +4 866 1.7053017188691055 +9 866 -1.4807001379652134 +42 866 -1.3301939020119344 +45 866 -3.352447614738758 +47 866 2.7072789613762533 +65 866 1.6307934779458344 +74 866 1.9431345014731385 +82 866 2.0709810676286837 +108 866 2.1909523635146138 +111 866 -.2410205600014732 +117 866 2.59339144317007 +124 866 -.04906725559465921 +148 866 -2.3204328458465455 +153 866 -2.2791564954361463 +156 866 .32224087406662494 +171 866 -2.725887244514372 +175 866 .9552402145228017 +178 866 -.9669893752609923 +185 866 .5488375286953302 +215 866 1.4782213642204656 +237 866 1.7609563307172185 +238 866 -.6800032159024245 +242 866 1.8821601338085752 +264 866 -1.1295996284669931 +267 866 2.2143995302677215 +269 866 .6775755569586639 +285 866 -.14200086824051888 +288 866 1.8092619212197332 +322 866 1.1212878264488348 +335 866 -1.8889494797524444 +343 866 .09196359465993198 +346 866 .2676168851469143 +349 866 .6983366871630537 +359 866 -1.1660575771907555 +374 866 .5980018480427444 +375 866 -.8827197688525379 +392 866 -2.011489135580916 +419 866 .8002931956873237 +422 866 -.5482481016026542 +426 866 -.34383874740245546 +434 866 1.0446700031813054 +437 866 -.3541792720984782 +438 866 .9867594447761153 +448 866 -1.001812207459738 +453 866 .33746339349156784 +454 866 -.4848508850306719 +457 866 2.1998739172367494 +459 866 -1.5308718043514582 +463 866 .08135696050782575 +470 866 1.4014813747007007 +482 866 -.22899659394398275 +486 866 -.4719317129852847 +491 866 -.004993447359123127 +496 866 -.7012655741455113 +501 866 -1.6824672133672085 +510 866 .6946181668197813 +544 866 3.399849376986038 +555 866 -1.614904772364263 +557 866 .12087681954979378 +564 866 -.9299338402722955 +566 866 -.774702030550393 +571 866 -.36831433733369434 +577 866 .7148493582077713 +583 866 -.33420991853964815 +593 866 1.2737113762890946 +594 866 -.20457020301610926 +600 866 1.9752209225309874 +611 866 -.4847174739742036 +612 866 -.4989751544923167 +620 866 -.40139731084091923 +625 866 .17782867633294058 +638 866 -.40965869983928893 +645 866 .19718581234930044 +649 866 -1.0190345191985204 +673 866 2.946729650570427 +678 866 -.1193271052151269 +701 866 -.054451584658461255 +706 866 1.1265453215506023 +707 866 -1.4920488690312677 +708 866 .018989368848297057 +712 866 -3.6252303333835854 +739 866 -.5351845980178411 +743 866 3.517882921840497 +745 866 -1.092140715184086 +754 866 -.322015053729221 +755 866 1.1822447029499046 +767 866 -.3476654183850134 +803 866 .3850218772801096 +817 866 .8443963366098111 +826 866 .21314219516629923 +839 866 -.8715562147776709 +842 866 -.44517304551255743 +861 866 -1.09514419677451 +900 866 -1.3506636810410206 +915 866 -.759540849984103 +930 866 -1.8462093543598568 +936 866 .2422295505292356 +956 866 .8827358794373527 +967 866 -.8074691633615723 +969 866 .056649637902316 +1000 866 1.319272944203246 +3 867 .049036900434236405 +6 867 -.06203254383877148 +8 867 -1.384090560249402 +10 867 .9084222206315621 +11 867 .12181042580704708 +16 867 -.10949862426692719 +17 867 .30788120092358573 +19 867 .7627332065819332 +36 867 -.9079894343561628 +47 867 -.3616379072705922 +51 867 .5215100283506735 +56 867 -.07606676050439418 +57 867 -.504547411655284 +60 867 .3223916384966989 +79 867 -.3212805809964864 +91 867 -.7227904645517715 +93 867 -.34192768212829994 +100 867 .17467472239203197 +109 867 1.7843334683238625 +122 867 .0235818157562654 +152 867 .9940958079262222 +153 867 .29572038509321485 +169 867 .6360826690733792 +187 867 1.375413160538638 +208 867 .6309075055689526 +231 867 -.424382043929375 +233 867 -1.19121789855361 +244 867 -.20209185564172685 +247 867 -.030214037266260096 +254 867 .41370865465325624 +269 867 -.08872911423840368 +284 867 -.26864050236223264 +295 867 -.13029536405225572 +307 867 .5950339365275047 +314 867 .3042366517411619 +320 867 -.6398421437640215 +323 867 .7547265924679701 +330 867 -.6080886728388739 +333 867 -.4256077853120987 +352 867 -.34215404656803855 +360 867 -.8316167912496992 +373 867 .5966620662794073 +409 867 .6371155609102638 +421 867 -.6609730934160253 +433 867 -.279816117472362 +437 867 .4765041711205155 +455 867 -.3706106475371885 +460 867 1.3126168870334425 +463 867 1.0067814936777397 +494 867 .017185843805531537 +496 867 .912120623379728 +501 867 -.3917425196902161 +516 867 -.08510725948028745 +525 867 -.6567022421736953 +535 867 .6790105104638973 +553 867 -.15193794346517786 +558 867 -.0016068534868103335 +580 867 .4091839041225316 +591 867 -.5999229247777322 +603 867 -.8546351607482923 +614 867 .05196052106547569 +638 867 .277479965130506 +662 867 -.993640427091699 +663 867 -.1468333388235945 +666 867 -.3618028486407576 +680 867 1.4182800753142792 +702 867 -.5955406962479531 +703 867 -.4489938968690015 +724 867 .0968619738118358 +727 867 .8283181830538968 +746 867 -.34469030657827093 +760 867 .16576807070277708 +770 867 1.2343901894625564 +788 867 .8750385661374405 +797 867 -.219723838763353 +811 867 .8948289961116732 +819 867 -1.2371754820345782 +821 867 -.304894091525925 +822 867 -.005718644206475776 +832 867 .38455404718265906 +837 867 -.3103043028498843 +865 867 -.33096547342661914 +866 867 -.4892794697457431 +871 867 1.0933828442996743 +873 867 .0646057796981015 +876 867 -1.1292271885781884 +886 867 .3643741751282008 +914 867 1.1098150273706757 +930 867 .5456503696713498 +946 867 -.15479470960283837 +949 867 1.2857589067429995 +964 867 -.3545977795093965 +965 867 1.822466989968543 +998 867 1.7492374641420816 +8 868 -.7963788943726409 +14 868 .12568577522838614 +20 868 .9259078438362374 +33 868 1.118880490358512 +41 868 -.16127044052650039 +46 868 .1363292046564763 +55 868 -.06547422328953592 +60 868 .3988445320523984 +65 868 .9203161017468273 +88 868 -.5307162304848437 +92 868 -1.6733045147085839 +96 868 .6976700375085411 +116 868 -.03921410335245157 +123 868 .2939712401137555 +125 868 -.540457020877488 +138 868 -1.119703653542785 +146 868 .5426660912618427 +148 868 -.6907116262157004 +158 868 -.7186279152984791 +166 868 -.8692775122409538 +200 868 -.588591679281936 +219 868 -.555230246492513 +229 868 .04892689312681685 +243 868 .16559201067804397 +254 868 1.0359379303285137 +256 868 -.6231358003152125 +257 868 1.0358290958440985 +260 868 -.9168377459561589 +265 868 -.5527147284307601 +323 868 .9026574924828251 +324 868 -.6641018608668071 +340 868 -.4348992775111361 +350 868 .1728697194493246 +360 868 -.9855152152267341 +363 868 .006977931493398176 +364 868 .48002481880269965 +365 868 .3754620665921957 +383 868 .2980998511331485 +385 868 .6484724603189598 +392 868 -.43287610248672564 +413 868 -.052802453732262486 +419 868 -.5499697829240505 +422 868 .39841390890177997 +433 868 .41443647635483083 +439 868 .22571343132330587 +445 868 -.7410879224610294 +454 868 .2872593552068588 +457 868 .337859078169444 +458 868 -.2410138805937395 +468 868 -.027154440803343227 +480 868 .6091950587784567 +481 868 .06242415306849817 +485 868 -.2424231331789539 +497 868 .3387469769917589 +498 868 -.33802983910657136 +512 868 .1688098951123804 +517 868 -.4411884415386792 +528 868 -.11014635054532038 +553 868 -.14099229147500164 +562 868 -.18628006120116766 +580 868 -.29629274709811404 +581 868 .38741755307021425 +586 868 .04947992284403703 +589 868 -.03157132967590681 +609 868 .4806014508959237 +616 868 -.08544546501844515 +627 868 -.18690730666353492 +631 868 .11145718062209158 +638 868 -.6514154577906297 +642 868 .574979462364619 +666 868 -.7472602191856229 +673 868 .13481390834414966 +679 868 -.2535653424251866 +680 868 -.5746241569314289 +688 868 -.8576175853225994 +689 868 -.4973339331044137 +708 868 .7127764495545248 +713 868 1.3939889794424334 +714 868 .39819834037320284 +723 868 -.6961930429638882 +732 868 -2.188424376061507 +739 868 -.45820067817905274 +746 868 -.48909460301210733 +748 868 1.0192682712829004 +755 868 -.2863707053068601 +770 868 -.6935893962475935 +776 868 .2655438532685347 +782 868 -.00456428067111584 +791 868 -.7847092531408109 +805 868 -.6122590119881471 +849 868 .014919459887787062 +859 868 .08715162991536574 +873 868 .4005749870573368 +878 868 -.2695658020392161 +879 868 -.7764837674786852 +885 868 -.5742915002832839 +901 868 .8541265296129847 +903 868 -.8685627035384818 +906 868 1.601089557661293 +907 868 1.9771742597132638 +908 868 -.5001053196458464 +911 868 .7533432342340003 +912 868 -2.522067752203625 +914 868 .6495610109000072 +928 868 .12672487819073774 +936 868 -.29317610831177376 +938 868 .2777253376039305 +972 868 -.2527931656496973 +987 868 -1.5926004280248522 +988 868 .2104154269186853 +5 869 -.2391839092091329 +34 869 1.0763116152045262 +37 869 -.7382712667766771 +45 869 .3495618524291691 +57 869 .8793173413555313 +73 869 -.28233481438023994 +82 869 1.3648932524486237 +98 869 -.6641392510868365 +108 869 1.0565255605054826 +114 869 -1.0699950455465619 +116 869 -1.1612794017199244 +139 869 -.5336882902850222 +142 869 .9613925437875517 +145 869 .5925731919204764 +164 869 .39265030388938466 +168 869 .7499093906216825 +181 869 -.5289803273273137 +201 869 -1.3538519441880967 +207 869 .8409840467180579 +210 869 .7034172976703079 +250 869 -.5769991038263749 +254 869 -.1638957972502399 +278 869 .5119900665599939 +294 869 -1.2872304523945053 +295 869 .022314273546077637 +298 869 -1.0428376714756542 +299 869 .2613069689221358 +306 869 -.7145366539596072 +326 869 -.048777552034423424 +327 869 -.17117479998267737 +337 869 1.2237496913796555 +360 869 1.6225273414111725 +361 869 -1.9652433056646084 +364 869 -.303965331282966 +366 869 -.09751470144816271 +377 869 .25912349711646504 +387 869 -.4844128279770895 +421 869 .5615374699262571 +432 869 -.5416733606903477 +441 869 -.48419886927801675 +443 869 .7137195845250799 +448 869 -.2575844658344049 +452 869 -.1257293145205849 +471 869 -.34891558511393994 +473 869 1.97910739167404 +486 869 -.41800105452725383 +487 869 -.7001497211070433 +492 869 2.4656051754540638 +495 869 -1.8725174297733593 +496 869 -1.2111929927853966 +507 869 -.6828315022894484 +526 869 -.1813809697626592 +533 869 .514653770367949 +542 869 .4476217252625436 +546 869 .41056884191421994 +549 869 -.5643067594408931 +559 869 -1.6350440051575985 +568 869 2.3549720717223246 +578 869 -.26642751982849455 +580 869 -1.7651805989529121 +594 869 .6611932221063078 +605 869 -.7377207252736485 +608 869 -.6420331911053122 +616 869 -.7823275588467566 +623 869 -.4677535308481909 +624 869 1.369013269763562 +629 869 -.5421046511068515 +632 869 .1857486957037989 +635 869 .31731728397036096 +653 869 -1.7272538699584852 +667 869 -.746579008378052 +669 869 1.346576149860934 +685 869 -.4208647711847396 +690 869 1.5669759748190417 +693 869 -.04041544632981975 +696 869 -.27661970927421203 +721 869 -1.1380992668709071 +726 869 -.13980606222461733 +728 869 -.1458855921269446 +742 869 1.1563833868782365 +765 869 .7448549885891781 +771 869 1.5033803799446044 +772 869 -.35978119912173195 +780 869 -.004767703669549463 +787 869 -.42245826081288446 +788 869 -.39031112947027624 +794 869 .07512967040827212 +801 869 1.2364295030449381 +806 869 .16801368035042968 +815 869 2.1122953192539793 +817 869 .7455331665709444 +839 869 -.015508165662354516 +845 869 .6454619210817634 +848 869 -.2591017610364018 +852 869 .21948554196122977 +862 869 .5619981581176612 +863 869 -.0418922108699543 +866 869 -.47270293125885104 +878 869 1.5822590508551269 +884 869 .15546189744401667 +889 869 -.2334984260621352 +890 869 .8254751640341533 +892 869 -.26419910895424187 +898 869 -1.2954231713320317 +917 869 -.21803943839286954 +923 869 -1.6299843955350688 +930 869 -1.1723812139627814 +941 869 .42990788738762586 +961 869 -.35482141830716163 +975 869 -.7274272950157914 +982 869 .8183415761322265 +985 869 1.3059130032228947 +995 869 .9632425718400554 +997 869 .30546630219156046 +9 870 2.367459360884836 +10 870 .31589293708176236 +26 870 .4101112281471355 +28 870 -1.7730742074747854 +39 870 .5870121379989126 +44 870 -.7443879664959647 +52 870 .2689648024185464 +59 870 -2.2073783431815572 +81 870 -1.4656898768043465 +110 870 .22369180336963718 +127 870 -.9218675034791999 +135 870 .37636678286836645 +137 870 -1.8205015933387207 +193 870 -.30407889289655354 +201 870 -.34966140271744733 +206 870 .5233249876236885 +228 870 -.38927421545142843 +234 870 -2.429618269743902 +240 870 -.15126304475627822 +243 870 -.8126942069244818 +250 870 1.5323403542865055 +251 870 .8432898847479934 +254 870 1.474092104373462 +259 870 -.7194790502733115 +262 870 1.7413311093678165 +270 870 1.1358728073900968 +282 870 2.195640003453203 +284 870 .18272735929264472 +312 870 2.0783057445867232 +322 870 1.000939917796784 +328 870 -.08910496789751765 +329 870 .9741888461135029 +338 870 -.5322005823427334 +339 870 -.9809786576772445 +340 870 .14613783892837562 +341 870 -.7735486184097305 +390 870 -.048041504560191406 +401 870 1.3639330419326596 +409 870 .6230654047747943 +414 870 -.717080482436471 +415 870 -.7401258155138637 +420 870 -1.201655884223628 +422 870 .5359140905228835 +439 870 -.7791026153633439 +473 870 1.9714296778039 +481 870 -1.00651757617457 +486 870 .05018891264056563 +491 870 -.47409388088751236 +494 870 .8240038865293924 +548 870 .29397488317396503 +549 870 -.2273263139786823 +556 870 .0789893718876861 +559 870 -.39785998976735054 +568 870 1.2742033777712187 +587 870 -.08891347769321813 +593 870 .08904634929493724 +611 870 .5514493891306366 +634 870 -.07165731833280164 +647 870 -.49650254204688576 +656 870 1.4373312661190398 +662 870 .5287432966904438 +672 870 -.9479729461214024 +673 870 -.7478946777450902 +674 870 -.8977119683547935 +690 870 .17258951556136892 +705 870 -1.5039028746484058 +724 870 -.4044159741022769 +728 870 -1.114159168883513 +759 870 .13081461417029572 +764 870 -.4450968849785818 +783 870 -.4010672049756139 +789 870 -.6871648947971816 +796 870 .08994571846793155 +801 870 .8237789842084406 +808 870 -.98605723029964 +812 870 .056170984296914 +822 870 -.1926066151832136 +825 870 -.802527307077695 +832 870 .4788754018021768 +847 870 1.8031453239413573 +852 870 1.015188794218778 +856 870 -1.273057709920229 +872 870 .6779114860370034 +894 870 -.4909595041680604 +906 870 .5234910704116947 +908 870 -.8655131653119572 +927 870 -.3028158380357426 +929 870 .5043404328783959 +932 870 1.2733396271936759 +938 870 -.1399766911368038 +956 870 .6667652587483252 +962 870 -.04162707044665137 +967 870 -1.2343269660186218 +973 870 .8999017172125288 +981 870 .048620701478788 +998 870 -.6298021930631699 +8 871 .33844598510720697 +30 871 -.2577819516945276 +37 871 -1.3637082112328005 +47 871 1.2035611640562907 +63 871 -.7717992314687017 +68 871 .08807824342831319 +84 871 1.0912714927260159 +100 871 .4295754136783698 +108 871 1.1074894600112242 +110 871 1.7125654279833338 +117 871 2.3856623614979533 +131 871 .6554818479566362 +133 871 -.8985372565878555 +144 871 -.6521627468617648 +164 871 -.09799148815226183 +183 871 1.439961072393987 +190 871 -.2559812542010663 +192 871 -.4688956782884225 +196 871 .33221303041251027 +198 871 -.6463086017246785 +225 871 -1.3798961351448602 +228 871 -.10894898199918451 +235 871 -.21470060874774427 +236 871 .6796637694565475 +249 871 1.6187948257161717 +254 871 -.17027672224468887 +256 871 -.12178544778133685 +263 871 -.19112360715053783 +264 871 .38406873516954176 +267 871 -.07930057905100511 +276 871 .6338362950754899 +297 871 -2.4795608637224427 +299 871 .21836348158959507 +300 871 .2338328989264403 +323 871 -.9325336969204187 +332 871 -.9091495448390152 +336 871 .12616919110041896 +352 871 1.1016950263844767 +361 871 .5004230787335431 +371 871 -.03430362847247567 +376 871 .5478263424293737 +387 871 -.36420376175666824 +411 871 -.17240012203194405 +412 871 -.9827344859284396 +419 871 -.7148159458402306 +429 871 .6065216004990525 +432 871 .3567837714477796 +436 871 1.668072361110648 +438 871 -.7720899048834802 +440 871 -.8808051165359396 +481 871 .7379980467130217 +485 871 -1.2403727571299075 +489 871 .24535378718284412 +493 871 -.9287414012948695 +496 871 -.4553316951739759 +512 871 -.018087635973151824 +528 871 .8936927086460579 +545 871 -.13919423143728343 +547 871 .855229058176161 +549 871 1.3014960848740609 +580 871 -.16468683548974553 +589 871 .4801641559170369 +593 871 -.633170299012959 +610 871 -1.564719990361703 +620 871 -.051101952161541835 +622 871 -1.2869947328011704 +624 871 .5001558378004844 +634 871 .5756041520386338 +639 871 -.9048596893984954 +654 871 1.3759703500558689 +663 871 .6410100433835177 +683 871 .49046215772559354 +685 871 .24171203678601616 +697 871 .2865552611968874 +703 871 -.508327256920648 +704 871 .5136283724529552 +706 871 .2726809244549947 +726 871 1.6742269504827612 +735 871 -1.4876635755963687 +745 871 1.0081752001603685 +753 871 .26336085697532796 +756 871 -.4189571606410212 +758 871 -.6324550527810011 +769 871 1.1290461553708722 +787 871 -.2862013780784338 +790 871 -1.165590954192137 +798 871 .9895582435801493 +809 871 .11179550662237037 +818 871 -1.5137287147262481 +829 871 -.5454110590974998 +837 871 .5840758442466839 +858 871 -1.366463156384307 +860 871 -.3032654073271798 +862 871 1.5629223467359767 +869 871 -.09706410991177868 +882 871 1.4847137634376653 +912 871 -2.5939394041533896 +914 871 -1.8830488787157353 +916 871 -.22755222508099954 +931 871 -.7698411495942491 +937 871 -.13577452251017627 +952 871 .1122292604019249 +958 871 .20797366937796297 +971 871 -.11576388971964605 +977 871 -.4518836098056612 +993 871 .27731807974115497 +6 872 1.1523472051039643 +15 872 1.0362690743768468 +24 872 -1.4818344330198046 +30 872 -.33518731715619327 +31 872 .06162555655590943 +40 872 1.839071421883424 +41 872 -.6575528799827564 +66 872 -1.848418895623342 +72 872 .8784315945111529 +76 872 -.2174316931855365 +84 872 -.14737143502008598 +88 872 .23575822304485886 +103 872 1.2966565994221322 +109 872 .47901881856429196 +118 872 -.5293350865948165 +121 872 1.2659401829705348 +176 872 .33366454023171954 +184 872 -1.1742829501748493 +203 872 .0486523366170966 +213 872 -.1662173315160813 +238 872 .7939132945019721 +240 872 -1.3379391062115111 +247 872 -.9413122656487876 +248 872 -.943372747417409 +280 872 .3031690986355148 +282 872 1.9198249782568224 +289 872 1.3013759954054556 +297 872 -1.8044928428946214 +306 872 -1.5481960844832292 +319 872 1.146727894915589 +341 872 .24976251934570065 +353 872 1.188062635393794 +369 872 -.4847307343787098 +380 872 .9310136914332788 +382 872 .023103593028554192 +383 872 .7845658596051691 +414 872 .03172360365937074 +426 872 .44769749729239894 +428 872 .13668543014094733 +430 872 -.751484625579935 +457 872 .5470357690428099 +476 872 -1.0649251682006955 +481 872 -.8066188275495477 +490 872 -.3388263297610918 +513 872 -.6747775173769336 +523 872 -.8980199225175454 +535 872 .675222714201769 +536 872 .2333223675646534 +571 872 .7917689621364873 +586 872 .20760974495415394 +601 872 -.5282323566639777 +624 872 -.24089872050279434 +625 872 .5941831967915262 +631 872 .33959855043209286 +632 872 -.7165204561987599 +633 872 .6273714657063885 +658 872 -1.0639838241548312 +660 872 1.000328610759354 +667 872 -2.0427774428384504 +707 872 -1.5689436699230321 +716 872 1.2892372327095145 +727 872 -.3748145966171681 +740 872 .6286512149429859 +755 872 -.07243882559595975 +758 872 -1.4221357020948162 +766 872 -1.5954442226106613 +777 872 1.531296583973968 +796 872 .026710440367172017 +799 872 1.2543003564755821 +816 872 -1.2923638069774508 +819 872 .7140297262036407 +820 872 .0028179143994386674 +825 872 -1.2607263290100768 +850 872 .5286867165360802 +853 872 1.940338271315209 +855 872 -.28954617435693797 +863 872 .24568860923817512 +868 872 .319937702239142 +872 872 .5118274423701785 +888 872 -.9994578086586403 +897 872 -.22518521843574446 +903 872 -.15537203628201846 +919 872 -.6812919933033108 +932 872 2.4612058380634716 +936 872 -.04047369132472889 +942 872 -.7021900991001608 +959 872 .9958208227859799 +977 872 -.6085767948593352 +990 872 .2149829074533177 +993 872 1.4085383564875968 +995 872 -1.4636345242889501 +15 873 .6960234075204345 +17 873 -1.9937265870682355 +34 873 .33755410118215423 +42 873 1.1295611365756095 +55 873 -.41316625878634716 +60 873 -.17633363522082693 +73 873 .02778575465971131 +83 873 .5723799156848582 +89 873 -2.364404579433261 +90 873 -.061331238994940536 +94 873 .1532000335426824 +100 873 -.5852663941515227 +105 873 -.6631402586588507 +118 873 .35127458899164654 +119 873 .7912106596335657 +124 873 .5536739101495053 +127 873 -1.2612455030223906 +143 873 .006792319494453095 +159 873 -.2849412585499068 +177 873 .19955657570021873 +179 873 -.12244938816317558 +185 873 .39714751560243927 +193 873 -.1680749107670743 +205 873 1.1290335290565436 +206 873 -.16194908021796708 +208 873 .05387856510037843 +214 873 -1.2776907209845794 +219 873 .3783945207520506 +220 873 1.5140031119143051 +223 873 -.070747904305443 +248 873 -.5633487678691023 +251 873 -1.8796240290423667 +305 873 -.28794044195128987 +308 873 -.4117735711107914 +319 873 -.2315980179175018 +337 873 .3938797389517728 +343 873 -.21564565091500087 +360 873 3.4607576010535803 +369 873 .11960427269225148 +372 873 -1.1326768155615723 +379 873 1.3023165906244556 +381 873 1.3485689977320576 +394 873 .6782010774426388 +401 873 .7217012819106304 +415 873 1.0569357881007715 +416 873 .7744352027222373 +424 873 -.08560916565660197 +426 873 -.5825888656813938 +452 873 1.7947616084369835 +463 873 -1.2004597864686204 +464 873 -.5874546917654623 +478 873 -1.6897076135242872 +479 873 -.10609523404860072 +497 873 -.2150490180499274 +504 873 2.124488797717125 +508 873 -.5895574825331112 +517 873 1.3632567638255233 +535 873 .32200040424273724 +536 873 -.5094807062521436 +553 873 .1351863568368598 +554 873 .2615913803241958 +555 873 1.5546836467057041 +559 873 -1.3555982497260395 +561 873 -.25043251541077194 +584 873 -.029959767751930454 +586 873 -.16993825114922434 +603 873 1.3630475997217657 +606 873 .6796339932897439 +611 873 .6262655609179334 +628 873 -.023719833969591667 +641 873 -.23707595181240815 +668 873 1.3379497898148296 +677 873 .7660167576240389 +681 873 1.2075553853593866 +692 873 -.5761721341914592 +694 873 -.6929101447932008 +695 873 -1.1763926087649623 +728 873 2.9306629177064507 +743 873 -2.0510157503394666 +744 873 .31446526846251865 +769 873 .9330537641306554 +772 873 -2.1313575045861084 +780 873 -.43743202508215073 +787 873 .5248496441188144 +789 873 -1.2673875062847357 +791 873 .9517412948772818 +800 873 -.3053989936754401 +817 873 .7535987165695379 +824 873 -1.5945770137292046 +826 873 1.4134577843104832 +827 873 -.4454157416487453 +831 873 -.42490758777409227 +834 873 .32469705641318725 +835 873 .4639517694506046 +839 873 .755969122830269 +848 873 .19764222932102102 +854 873 -1.0624644510566628 +860 873 -.6073751285448764 +863 873 .6833798131700205 +880 873 -.9028734640494831 +886 873 -1.6564501080568421 +888 873 .36932867058116114 +908 873 1.446930562139529 +917 873 -.3462820924594178 +922 873 -.23657667842383245 +941 873 -.03857106787585418 +946 873 .7729421965495379 +951 873 -.6609456240409471 +952 873 1.0966019569553378 +969 873 -2.6254322389184646 +986 873 .3132571986513994 +992 873 .8190007770226378 +994 873 -.017906686825538726 +28 874 .18842224770875857 +32 874 -1.0030538042869237 +42 874 -.24522707789629047 +47 874 -.1025278892293307 +53 874 .13968081465988563 +58 874 .6685977687651823 +68 874 -.5965954897556452 +71 874 -.363817864258025 +74 874 -.20031702118581982 +95 874 -.09245550277705852 +109 874 -.2517552223678008 +124 874 .004234044730569916 +143 874 -.225640719479355 +146 874 .11829700365844271 +157 874 .09717030202106036 +159 874 1.471958144609323 +168 874 -1.4983191102061286 +171 874 1.8704749600135644 +180 874 -.4916783767974866 +190 874 -.25430145931466247 +194 874 1.865322895734828 +251 874 .5261444095383565 +260 874 .2175654193800542 +276 874 .6585672888223654 +280 874 -.5016265923318495 +283 874 .46041648057220746 +288 874 -.47023175899091885 +300 874 -.37403394343088303 +307 874 -.5675114005576251 +317 874 -.28442051440506 +340 874 .1182086299136984 +345 874 .5463923073184677 +353 874 -.8039500146283105 +363 874 .2357348862966192 +370 874 -.17442631728452895 +376 874 -.5863473433815738 +377 874 -.580362643254534 +385 874 -1.1627234511261433 +393 874 -.5088041756704175 +411 874 -.5450293680626843 +422 874 -.2921732341296261 +430 874 -.11260225381462663 +446 874 -1.0323730801465587 +454 874 -.2246851329112592 +486 874 .39226214912310775 +500 874 .466680565926262 +502 874 .8994041104683692 +504 874 -.9806326528906331 +506 874 -1.537928303411376 +513 874 -.8953171668913761 +516 874 -1.615207139782672 +527 874 .5891870885894742 +532 874 .9418031817338675 +536 874 .782784351934823 +537 874 .5673370713819361 +561 874 .2683703573110483 +562 874 .9215420122060181 +564 874 1.0845311878156834 +572 874 -.8642615479783159 +578 874 .044970030772371536 +591 874 -.23625888616419474 +596 874 .24161570934395277 +620 874 .7501517338781347 +628 874 -.16085111282247896 +629 874 -1.4457625906773275 +639 874 1.1686661489787684 +640 874 -.14369761146222193 +647 874 -.17553830480371524 +650 874 -.3986161298777159 +651 874 -.1868216325474372 +692 874 .33938301636636947 +720 874 .44113780601505903 +727 874 .8043177525659081 +744 874 -.8210953920022319 +748 874 -.42621148698778905 +755 874 .8233612166106029 +759 874 -.3571753812330193 +777 874 -.7731142914791247 +798 874 -.41630293917156025 +807 874 -.23608760284712976 +815 874 -1.8135719307877454 +858 874 .3593842120352818 +879 874 1.1441668893585994 +898 874 -.1608400372947932 +911 874 -1.616292222568164 +916 874 -.3430253543810691 +918 874 -.08375075902006193 +925 874 .24471541344301395 +936 874 -.3790173580266791 +939 874 .12888066100820988 +946 874 1.0938754979517962 +981 874 .28657170264167775 +985 874 -1.309336456487445 +989 874 -.6521178032385574 +993 874 -.6627272225655823 +994 874 .6239513804076535 +997 874 .42882419758362816 +999 874 .7941742374850597 +10 875 -.6770059610569622 +12 875 1.0333077295333295 +22 875 -.5714570764425325 +28 875 .24230377036101428 +30 875 -.02203475403182291 +34 875 -.08572531378281983 +43 875 -.363086909892949 +45 875 -1.5723055952552392 +51 875 -.49966825136894993 +57 875 -.8825528376986577 +111 875 -.2539747504390244 +124 875 -.22066368429283045 +125 875 .4290436266144591 +133 875 1.03100764381469 +147 875 1.427632962305624 +152 875 -1.3174945594847838 +166 875 -3.0536168831944113 +174 875 -.49247363819454976 +177 875 -.7274607211790889 +187 875 -1.800574144249916 +195 875 .47487832707306465 +216 875 -.333168951293909 +229 875 -1.1066880869385216 +247 875 -.9389292501637388 +261 875 -.10480225308654287 +266 875 -1.5135612166812646 +273 875 -2.520916363213396 +289 875 -.06617434009170373 +300 875 -.0786321346846145 +307 875 .9829460640255361 +319 875 .2574224961429586 +330 875 -.9105562804147053 +348 875 .33264371185111385 +363 875 -.18249308051871482 +368 875 2.7425516479982637 +370 875 .7007782004921 +383 875 1.197658887228536 +386 875 -2.03771116558019 +399 875 -1.4253835247986717 +424 875 1.0918819613007273 +427 875 -1.141168706650678 +434 875 -.8873721727458985 +435 875 .12322034134244503 +438 875 .7616698501104759 +450 875 2.7047271891288647 +452 875 -2.1080921233549095 +468 875 1.410053212245442 +483 875 -.10537654578877328 +490 875 -.367912059548578 +497 875 .8957034652381095 +505 875 -1.9901896927775589 +521 875 .1602243052873416 +525 875 -.06140085084700145 +529 875 .6731895729042101 +535 875 .8475270967407734 +560 875 .7204294145347347 +574 875 -.3242154393937906 +577 875 .5453370818430034 +578 875 .10351591414603141 +581 875 -.7549669965508002 +588 875 -.5435870161468461 +602 875 .20552905088491746 +603 875 -.4155830842092676 +605 875 1.0160694903837129 +606 875 .5510342400084081 +610 875 1.1092915403096388 +618 875 1.369631906127867 +622 875 .4057508947417749 +635 875 .22239882302417635 +647 875 -.7282106853703951 +670 875 1.3424200885884483 +688 875 1.5871044056348165 +691 875 -.19390192380693894 +703 875 .5874175465390742 +723 875 1.418537181396166 +724 875 1.1661682559734912 +730 875 .8434091687844045 +732 875 .01875785256989454 +749 875 -.44249146205063145 +758 875 -1.449884378988115 +760 875 -.6663437408437424 +762 875 .48303813791903627 +764 875 .07175136947976049 +772 875 .08686850970948833 +796 875 .12881261276068573 +823 875 -.9098869551992017 +831 875 1.5736964035276253 +836 875 -.31416115747073386 +844 875 -2.1225326720424413 +846 875 -.36841215300735464 +851 875 2.0205049211255646 +899 875 -.7867616572321898 +901 875 1.0249080054925392 +909 875 .4833884448621039 +913 875 1.0390786708748023 +932 875 -.009982259239938937 +939 875 .23189787796501254 +953 875 1.260704212579407 +955 875 -1.4761222506739125 +957 875 -.48976712038349307 +959 875 2.4381165761747097 +969 875 .11974796447417102 +971 875 -.4643707358339536 +983 875 -.7153292682829343 +2 876 1.5712006067189053 +24 876 -.3002914438578539 +28 876 -2.1861006502654514 +30 876 -1.3289094976215936 +31 876 .010532180409289646 +36 876 1.7193849045821987 +37 876 -1.2037708158639358 +46 876 -2.0077916627418637 +47 876 -.27156863143255583 +48 876 2.4651051757062508 +74 876 -.5427792003020006 +94 876 .45937595420351063 +95 876 -1.742085607832512 +135 876 1.2778137683298822 +139 876 -1.52758716122749 +143 876 -1.785903247173329 +152 876 -1.5763314669457602 +157 876 -1.5050339077888455 +162 876 1.5245646052918638 +175 876 1.3711688611822472 +180 876 -.6519024799116135 +184 876 -.7380583562802276 +189 876 -.8727998659381413 +190 876 .766392550892195 +194 876 -.492808347981771 +220 876 -1.1692533840923778 +221 876 2.838885790965639 +226 876 1.2670235846553555 +228 876 -.7868739087493154 +232 876 .08587164492504556 +239 876 -2.673214486194183 +259 876 -.6549094400763982 +262 876 2.2445292278620563 +270 876 .6526063669166963 +274 876 -.8462937043153869 +292 876 -.9498471962340967 +303 876 .8125957556145621 +341 876 -.20493195300234013 +343 876 -1.375558081135861 +351 876 .108169122650318 +352 876 -.8640773232216622 +368 876 -1.517821495432037 +370 876 .10432236355189899 +373 876 -1.625163359558566 +377 876 .08324737947864083 +388 876 .33452895339181693 +390 876 .05128864682406542 +393 876 -.8471502129864471 +402 876 2.142941323091447 +404 876 .8895160693472305 +417 876 -.5035419319868546 +420 876 -1.632622849719818 +435 876 -.06498315654096944 +439 876 -1.214296645230716 +444 876 .46082373320769554 +458 876 -.015895596696288844 +465 876 .4661988228644107 +473 876 1.008459214020778 +482 876 -.3288387493443792 +486 876 .5085857258967189 +487 876 -1.85053002059776 +501 876 1.2313883440839777 +522 876 .18202261778334333 +533 876 .0699028442392773 +571 876 .5682142947273433 +572 876 -.06095643497984689 +575 876 2.206123131968849 +589 876 .7875282887697236 +597 876 .7698807095498948 +601 876 -.8985718612720824 +617 876 -1.1977720242156153 +618 876 .2703490073969547 +622 876 -.9684974583625132 +624 876 -.10844940061778727 +630 876 1.6060134002910487 +631 876 -.013280635210424191 +642 876 1.117702939247578 +644 876 -1.5935131787553947 +659 876 .938885096457819 +669 876 -.03480830799678705 +680 876 -1.533264557050805 +682 876 -1.471338026784924 +685 876 -.27181488347482863 +707 876 -1.5368729538630395 +712 876 -.7736577901910493 +715 876 .3192714559708196 +721 876 1.3560439449919122 +727 876 -.9184845538649259 +728 876 -1.052145622421526 +732 876 -.38396202798172274 +740 876 1.6914681870655837 +742 876 -2.6568067199759398 +775 876 -.7745203488938502 +787 876 -1.6212658267329811 +789 876 .049847957032674785 +794 876 .007492761246582807 +797 876 -.45861143067288196 +808 876 .8508626191265756 +827 876 -1.5945767222338034 +845 876 -1.163540364898057 +852 876 2.0917737710945614 +858 876 -1.8102989695675233 +859 876 -.5486088571320493 +862 876 .09289102175066372 +872 876 1.76322731706266 +873 876 .007591244435443491 +877 876 1.3916904767674574 +891 876 -1.369030099858444 +901 876 2.47842434110462 +907 876 -.037471484931482564 +911 876 .6779745885040481 +914 876 -2.280179317236417 +922 876 -1.5672512602790731 +926 876 -.013012868355621751 +927 876 .12643415569079836 +929 876 -.8553828974769084 +931 876 -.2151361450644437 +941 876 1.2315568674302024 +944 876 1.4248094358253098 +957 876 .8347156890542134 +984 876 .3948167427066423 +996 876 .7241765638938252 +3 877 -.5950277431799488 +19 877 -1.5120971550098925 +21 877 -.034195490810889476 +82 877 .9468635231811319 +116 877 -.5507105545184549 +117 877 1.4597319056043552 +124 877 -.24471679411688882 +125 877 -.7259162631099141 +126 877 2.1254618239517824 +137 877 -.6704170287538731 +143 877 -1.076056624853886 +147 877 1.9005480104941577 +150 877 -.3286795993417193 +169 877 .5610427835144627 +173 877 -1.374637526606095 +175 877 .6537195053524437 +178 877 -.3270817650639661 +181 877 1.0175675363144705 +202 877 .34956002131373876 +208 877 -.6164548704347953 +209 877 1.456582048105022 +216 877 .810389096505256 +225 877 -2.0455571532133217 +232 877 1.5750760169049796 +235 877 1.5787642287184875 +239 877 .3364007886489933 +257 877 .7145763392386077 +269 877 2.3765554537990843 +271 877 -.8527360342438507 +272 877 -.324100438303661 +274 877 -1.1739020061312768 +287 877 -.8730605396835275 +296 877 1.083572686087868 +315 877 .47680097615342487 +316 877 .5033034166645127 +331 877 .8296693011335696 +334 877 -.33072335411200005 +360 877 .8091996969910062 +368 877 .4416533802632866 +371 877 -.053184376996509596 +397 877 -.21985608340433024 +411 877 2.0970844784638643 +415 877 .2958919844731508 +422 877 1.3903076416791207 +451 877 1.0798802586402863 +452 877 .639950508097847 +463 877 .45496647020404735 +471 877 -.7120949155061255 +472 877 .7360149146210514 +476 877 1.341311137045417 +483 877 -1.8126540207308022 +516 877 .023665839140786238 +532 877 .08128342772963357 +581 877 .0941543857717077 +589 877 .7956585867828615 +597 877 -.5501555346619766 +603 877 -1.327962347092042 +604 877 .16530557502697407 +610 877 -.3832439090675079 +617 877 .8801621128630918 +619 877 -.1253732693856226 +625 877 -.052702884553473606 +627 877 -.10646678127507057 +634 877 -2.8387871973953067 +636 877 -.6638947986847811 +638 877 .04412556991841267 +640 877 1.5772498447778558 +641 877 -.5938021814943133 +652 877 -.8051337250367433 +664 877 -.2532737987317504 +684 877 -.9357602576710167 +724 877 .547447144812854 +737 877 -.20074945476304495 +739 877 -.04797699566256132 +755 877 -1.3010266640631392 +762 877 -.3771496973271631 +773 877 -2.5350912732162176 +788 877 1.2408229036408047 +792 877 -1.3002890614349334 +795 877 -.7333587796853848 +803 877 1.6825654373663952 +815 877 1.2248269487310006 +820 877 .10494312054164795 +840 877 -1.1668119716693588 +867 877 1.035604159262985 +879 877 -.6171472365256409 +883 877 .134681770648491 +908 877 -.9704026660612087 +910 877 1.297533913450866 +911 877 -.04089786653273064 +913 877 .5077693479940585 +915 877 -.6041393512036148 +917 877 -.951265806930402 +924 877 -1.1343439259613919 +931 877 -.9829213707576108 +935 877 -.6184824769523217 +949 877 -.17902191762900038 +968 877 -.6877839921111173 +975 877 .3270945872867432 +995 877 -.6211360311851506 +13 878 1.5174941522292644 +17 878 .7330122187254764 +21 878 -.9714059797341097 +31 878 -.5899924941780468 +34 878 -.16620186961252567 +57 878 -.7416199857333083 +72 878 -.8338227448796218 +95 878 -1.8020817522731993 +112 878 -.0055103381552529945 +117 878 4.223501374246036 +121 878 .5362032064611323 +129 878 -.2879391809136717 +131 878 .4189887889404226 +142 878 -.32731746166944076 +144 878 -.3578243998590786 +168 878 -1.1717888654257813 +174 878 .27565650175064565 +180 878 .41417866652345836 +182 878 -2.12796140292792 +185 878 .7078987989506483 +200 878 -.0543069079852187 +203 878 .7647174506881538 +206 878 -1.135694410239356 +207 878 .12951773160972455 +227 878 -1.57865800408198 +256 878 -.10956771056244233 +262 878 2.376760304774661 +266 878 1.7838294111315227 +267 878 .15008723475229788 +288 878 1.5467743179840743 +289 878 2.004295568737118 +301 878 -.8250680202027476 +311 878 .34964293156628745 +313 878 .6897726360115153 +320 878 1.1717765051636029 +321 878 -.4143797353897581 +324 878 .24309530463338788 +328 878 -.5096535430940005 +339 878 .5651951766726464 +350 878 1.4226882899146613 +353 878 2.0030997401672224 +357 878 .20055789778090483 +367 878 -.6315217848387046 +373 878 -1.1765577549926636 +374 878 .4385933814844044 +376 878 -.9203183044518576 +378 878 -.4328800960612527 +380 878 -.18645992222440919 +387 878 -.519643930287656 +396 878 1.2275485952177816 +424 878 2.548604206253401 +425 878 .988183512362856 +437 878 .42625166979545714 +494 878 -.7411439096264947 +499 878 .08744616300986822 +501 878 .03396174021708166 +512 878 -.41728820347175083 +516 878 2.0905682930867524 +523 878 -.37619586307202924 +541 878 -3.2294204578614853 +543 878 -.8962335473498342 +563 878 -.009702329230018514 +576 878 -1.1140194314371035 +580 878 -.1617540357688242 +591 878 1.0355087425607203 +592 878 1.5795133589530426 +593 878 -.9108098415364619 +595 878 -2.6351966820587647 +605 878 .02357001095043325 +614 878 -.000621266025301305 +626 878 .7997253302802516 +629 878 1.8360351541790465 +636 878 -.09183771389533947 +644 878 -1.1533466532131658 +645 878 -.3597848562898037 +647 878 -.6235075367779196 +653 878 .6645649721681555 +658 878 1.322956141432657 +661 878 4.363368250067741 +667 878 -1.4026820606641837 +677 878 .5758026153685676 +688 878 -.21301796167966974 +708 878 -.351641154858081 +761 878 -.5846090323072866 +774 878 .2681096128953544 +777 878 1.312574616340837 +803 878 .14326732456087585 +808 878 1.164789789427958 +814 878 .1386639688577616 +815 878 1.1812861503953158 +820 878 -1.8693855529743075 +829 878 -2.013804679598049 +841 878 -2.7512415797737844 +862 878 1.6613802180439965 +866 878 2.7242809713105944 +870 878 -1.3683281725592102 +871 878 -.11286604430838573 +889 878 -1.4825356649799182 +894 878 .3824514437816148 +896 878 -.021255502807846716 +900 878 -.9190810795758905 +931 878 -.2500398811783786 +939 878 -.6657423468691126 +945 878 2.4543167990070685 +946 878 -.8900287977303503 +955 878 .19841300432943454 +957 878 .4516902418293408 +3 879 -.45659514171993126 +6 879 .2342395212118661 +23 879 -1.405575507078038 +30 879 .0313804978970007 +39 879 -.29712863172691 +42 879 -1.139418419813449 +53 879 -.15192987787033596 +57 879 -2.027191015595249 +62 879 -.8986698419930921 +72 879 -.2698547735150289 +85 879 1.087885471070381 +89 879 -.1923538407568759 +111 879 1.938638800927992 +118 879 1.3139628360271844 +121 879 .8304134498324564 +135 879 1.0922273001046519 +137 879 -1.1627707468499944 +140 879 .5444120776548245 +151 879 -.009113202316121713 +161 879 .6819117504160706 +170 879 -.06471126964370315 +181 879 1.3938258110552253 +183 879 1.7374200496154082 +191 879 1.6006959968377654 +192 879 -1.334660407967784 +205 879 2.5217577186924838 +212 879 -.5506609199834125 +214 879 .2238386732655639 +225 879 1.576074947018642 +227 879 -3.6201848561413894 +228 879 -.5938743953711825 +235 879 -1.293893780659757 +240 879 .1786125408584513 +242 879 -2.4481806871463476 +243 879 .1896837513294146 +248 879 -.4152794096207012 +256 879 -.7688751897543448 +270 879 -1.4566797293706815 +278 879 -1.4868032122512458 +282 879 -.09449356609809192 +302 879 -4.419414394795662 +320 879 .03928161438646956 +326 879 3.4379589307337017 +327 879 .3223887168674062 +345 879 -.8294190487706086 +349 879 3.8877246650779185 +357 879 2.3096397548755947 +371 879 .30388648770422055 +379 879 1.7637205623773098 +381 879 .25404811441950503 +390 879 -1.4019254397669896 +394 879 .22876994601704775 +395 879 .2956370384139945 +397 879 .535809692000337 +403 879 .3283865969660815 +465 879 -.6807420531036452 +466 879 -.3041300912770273 +468 879 1.1625302839493634 +470 879 -.680596928285779 +484 879 -1.113408457946844 +495 879 .9967439420083453 +500 879 -.16172825857753176 +502 879 -.8849857542857071 +506 879 -.09538875885915994 +510 879 2.0708703363149255 +521 879 -1.5962737151492725 +529 879 -.5149799956972302 +532 879 .9486216621386399 +535 879 -.42337436381955124 +537 879 2.5900105624878016 +541 879 -1.5430937450112263 +552 879 2.1200921939283934 +570 879 -.01306469043549352 +577 879 .09988879656887956 +582 879 .5669453526823363 +590 879 .7269214069077421 +600 879 -.06495777905532119 +604 879 -1.782057172301554 +615 879 .13272769701489961 +616 879 .23779979806336993 +629 879 -1.0988253777425414 +632 879 -.0713047287489721 +639 879 -1.0415772554174327 +642 879 -1.0123700185757927 +664 879 -.1954279539231797 +678 879 .5885813875229808 +686 879 1.7223530137832785 +687 879 .8175602411275683 +692 879 1.3543076001985688 +709 879 .6499404832390353 +723 879 1.0283838291517462 +732 879 1.2332660448733728 +750 879 -2.7047834333721155 +756 879 -3.5123737109705693 +797 879 -.6452380433669096 +825 879 -2.7003064526517195 +830 879 -.20931537543318085 +844 879 .5887718447515053 +847 879 -1.0087540691918824 +851 879 1.7359720166336579 +869 879 2.909085698630883 +892 879 -.6886079750858776 +898 879 .562203325748788 +902 879 -.008242101378899046 +926 879 1.1713396984003055 +938 879 -1.5277214091051603 +939 879 .6773411855493048 +962 879 -1.4740063932993421 +974 879 -.12553768226092316 +979 879 .1742184311699237 +993 879 -.23489090738428706 +5 880 -1.0418328850648857 +10 880 -.34867914557573154 +13 880 -.826600321086775 +14 880 -.4370631954774362 +26 880 2.2194880287742698 +28 880 1.5561989312095428 +38 880 -1.9188790874202422 +43 880 -2.1344411288749794 +46 880 -.5356071060337516 +50 880 -.49134740742100086 +53 880 -.19344927240383733 +58 880 2.4825383098954337 +64 880 1.8635188300233545 +70 880 -.506267615715032 +75 880 -.5309543840092845 +103 880 1.6742336149509782 +110 880 -2.6847787474562512 +123 880 -.05166480319844477 +128 880 .5454784616618233 +143 880 2.307680078275941 +171 880 1.4150767164359963 +179 880 1.4182978827605832 +184 880 1.4187526333074008 +185 880 .36056825334327103 +193 880 1.8294425936545609 +212 880 1.225577942171156 +215 880 .1454727877635688 +238 880 -.8498758263506462 +245 880 -.28022480056379695 +246 880 -1.984294535621576 +247 880 .553606877769667 +250 880 -1.2639493932559922 +255 880 -1.1937534534851841 +256 880 1.2822445112132297 +265 880 .06906448659690229 +311 880 .847728560484634 +326 880 -1.0915739473506416 +327 880 -.7691679293233139 +341 880 .7051021272117336 +345 880 -1.642999423098797 +359 880 -.638650849233243 +361 880 -1.0946343364150963 +377 880 .30095388093435593 +396 880 -1.4746670233823134 +407 880 -.882737189646972 +411 880 2.4319978522680885 +433 880 .30003835960782727 +448 880 -.514506246092 +450 880 2.710655902090738 +462 880 -2.49273124532013 +464 880 2.1734167902723254 +472 880 1.2252363214384645 +495 880 -2.1803739143521845 +511 880 -.5970526697006869 +530 880 -.8072445804676776 +552 880 -.5775918159241731 +561 880 -.3461128026267136 +571 880 -1.706468139861106 +583 880 -1.3612602312385156 +585 880 -3.616731215740802 +589 880 .23758409951844695 +600 880 .30645535467614277 +606 880 .6899539677948617 +621 880 -1.687510227998167 +631 880 .23581139508629237 +633 880 .28980183278999505 +634 880 -2.188260118889219 +640 880 1.163143530841047 +650 880 .8228418762791064 +664 880 -1.0602027516378603 +667 880 -.4751283206677026 +668 880 -.9744658420270178 +678 880 -.04927110737215831 +682 880 1.4238885069362528 +727 880 -.8993535180339521 +735 880 .9359132669895505 +757 880 1.3687806605286277 +777 880 -1.774532501023573 +787 880 1.5416734301428767 +792 880 .21495605685946428 +793 880 .6729188724885076 +806 880 .07539860663836848 +807 880 .5565845233821041 +831 880 1.8668995787193483 +842 880 .8408302644638056 +873 880 1.2622833244432625 +881 880 .39232456334943416 +887 880 -.4001106363947876 +889 880 .7407928448460299 +900 880 -.16933261095271082 +902 880 -.47896083238926634 +910 880 1.3861967227070962 +915 880 -.3926005699150885 +922 880 -1.3174966324121444 +930 880 -1.0897934664035658 +935 880 1.6060390634370112 +940 880 .6236573785369866 +947 880 -.8354473151285764 +950 880 .14668967466061517 +953 880 1.5215611871118895 +970 880 -1.7497134327752244 +979 880 .7679750712258202 +981 880 -.7065325864765378 +985 880 2.533567791628261 +988 880 .22004723730194206 +989 880 -.3969406919629425 +996 880 -.32927831642473326 +8 881 -.4789892770550758 +47 881 2.1567389792597136 +59 881 -1.0564053750871834 +65 881 1.578705268086016 +95 881 -.5364828139857383 +98 881 .6165286783152945 +105 881 -.10890039206981858 +112 881 -1.6750062259046816 +113 881 .5201949214478976 +116 881 -.3852991796162205 +126 881 .5181856785157869 +129 881 .14432259197855327 +148 881 .22378464538085235 +156 881 -.15275036161095046 +159 881 -1.6351307717293482 +160 881 1.1686774715799253 +172 881 .681151394546712 +175 881 .4727139740505328 +179 881 -.5507752430359991 +183 881 -.6249084106482616 +188 881 -2.271107571424258 +206 881 .9291083805458504 +213 881 -.4349468708686235 +214 881 .3065168512314716 +217 881 .6615310144095466 +236 881 .6771834344302307 +244 881 .10341048267014302 +268 881 1.4907322296767642 +279 881 .6842511227829307 +287 881 -.221822040671402 +315 881 -.07812488932842127 +322 881 .4070347866643818 +329 881 .8111947828316581 +339 881 2.3152914409079477 +352 881 .9607986192565254 +359 881 -.3466980945400849 +367 881 .13477240297000873 +371 881 .1736468881628467 +397 881 -.423927261093037 +422 881 .3887940343743962 +467 881 .38241531334600287 +480 881 -.10356758852273876 +482 881 .7178207571060454 +483 881 -.5547411169680768 +485 881 -1.375158830614562 +505 881 -.8379848022723052 +526 881 .5499917179165811 +531 881 -1.0442793279619205 +536 881 .9215751813353446 +547 881 .8032144442641562 +558 881 -.08155516656365364 +576 881 -.6496985684726312 +587 881 -.7148634354641676 +598 881 -.840874097252871 +628 881 .910468971434668 +665 881 -.3205660787083314 +666 881 -1.5850819106645413 +669 881 .4808117848378433 +674 881 1.3406320502180737 +683 881 -.2279751095094624 +685 881 .24192411004722386 +691 881 .248862784216402 +696 881 -.7837122437978925 +701 881 -.9879796705929499 +703 881 .11106925949233212 +715 881 -.5172762235372922 +720 881 -1.1662991538332725 +729 881 .2764311076646224 +740 881 1.1136660495008015 +744 881 1.4007786010142675 +746 881 -.19468552563286418 +758 881 -.7351230924156267 +763 881 1.490122481347093 +765 881 1.3713387368850776 +786 881 .3124237355495409 +792 881 .2462679007217974 +794 881 .43264347025088334 +797 881 1.6638588581471643 +798 881 .4594326168333868 +809 881 -.9416919814729849 +822 881 -1.3853979840847712 +845 881 .08908271666016551 +859 881 .905308993817433 +860 881 .26357542767907216 +866 881 .00434844356577016 +886 881 .6397426042503379 +895 881 2.1804393126908574 +897 881 -.9829298186357498 +898 881 .3773001368505545 +907 881 1.3986654412918558 +916 881 .6258501512147162 +918 881 -.2945974157130229 +931 881 -1.820445450767504 +939 881 -.24204744519432905 +941 881 1.582933553081429 +946 881 -.6980173392982607 +951 881 .07991168537694811 +957 881 2.8937179723974897 +959 881 .13274839285244233 +965 881 -.32412426304298064 +985 881 -.6273994502053614 +992 881 1.3981513901364564 +994 881 -1.0284612593983027 +998 881 -.02621455955920239 +3 882 .6423996368302516 +15 882 -.5409981398277457 +35 882 -.7263052478599318 +42 882 -1.5756721238666027 +48 882 -.007628036223632766 +52 882 -1.7751481353645067 +64 882 -1.6314553487477113 +104 882 .333881221665511 +106 882 -.7534883941538444 +137 882 -1.1421917265692152 +142 882 -.8243973108775227 +143 882 -1.4335082885861659 +147 882 .3493992309124595 +152 882 -.12006901987920233 +153 882 -.6875449177091938 +163 882 -.13881068561134494 +179 882 -.6234861347383925 +180 882 -1.0471335991135027 +183 882 -.22911914106064307 +190 882 .3245151631881509 +206 882 .17949380443596977 +210 882 -.7304686858487865 +214 882 .22357592669156673 +232 882 -1.9769953259539925 +238 882 .742052611207962 +258 882 -1.0931069772410273 +262 882 1.2549956748765403 +269 882 -1.16091970828363 +277 882 .746912804552397 +281 882 -1.1606610789102805 +294 882 -1.6144620877967497 +303 882 1.1235923735985904 +305 882 -.352144009348224 +319 882 .23697818243001023 +342 882 -.26239194184575637 +343 882 -.4462712050559719 +345 882 .5253829804050774 +349 882 -.12698716302619825 +352 882 .21927660529206877 +364 882 .5841363065482282 +388 882 1.0999750743811862 +420 882 1.575343073729651 +435 882 -1.0185380124120853 +451 882 .37833887177793674 +455 882 -.19979172480842508 +462 882 1.265411594492819 +481 882 -.6877277684148946 +482 882 -.24593149658411254 +489 882 1.4405374955912174 +493 882 .7197598713479194 +495 882 2.0214758743723302 +504 882 -1.0044814856313673 +516 882 -.4249256685034204 +519 882 -2.100338334494806 +526 882 -.24784757546829947 +527 882 -.9388431345261666 +529 882 -.3071075084521721 +531 882 -.043016033388673734 +546 882 -.34902942915989477 +548 882 .2657926322941894 +564 882 .6819662943685495 +574 882 .4114697302997666 +580 882 -.11305366589234629 +591 882 -1.5135752849198774 +594 882 1.1147679400892716 +614 882 -2.134909882567826 +627 882 .29191229487581355 +634 882 .7107804737718133 +677 882 -.43667948252198907 +692 882 .7104331739558721 +711 882 -.20984539609438305 +720 882 -.4990547216179425 +721 882 .029061629159034902 +748 882 -.17244386794176403 +751 882 1.1868716051429138 +754 882 -.4251234388288276 +766 882 1.6849662368610134 +777 882 .6938385695968468 +778 882 1.125509130630529 +781 882 .759230775264364 +782 882 -.6927035753353383 +800 882 1.4269813141655525 +804 882 .6919126568727634 +831 882 -.6423821837305176 +841 882 .05291782718197466 +843 882 .8295590379531987 +857 882 -1.1848446476671086 +874 882 .9157091910853412 +875 882 .26221130960857264 +888 882 -.20626642573066234 +901 882 -.5968801442656391 +904 882 .5254336300601095 +905 882 1.1228013919577802 +911 882 .23339774771762065 +916 882 .1976950148786268 +925 882 -.672318812523673 +931 882 -.5882622151763847 +947 882 .9872785741720149 +959 882 -.10392409878399732 +963 882 .8894659884287341 +989 882 .18827188644243775 +991 882 -1.4839709979864768 +4 883 -.34118574816099917 +6 883 -.017493069200919795 +9 883 .5968877448160425 +16 883 .9876565387322332 +20 883 -.08926996687753523 +21 883 .13081439329046085 +34 883 .25342572750699305 +37 883 .701289810146004 +41 883 -.9094060793388481 +47 883 -1.109245015011321 +61 883 1.870664950210403 +62 883 .1380604329185025 +67 883 -.3001315522875914 +107 883 .5958412864301432 +109 883 .025142445695666676 +131 883 -.31796820706195905 +146 883 .14604106415094567 +149 883 -.25329895099635236 +172 883 -.0006556467645682899 +181 883 .3103789870033267 +194 883 .9130393841391454 +202 883 .916047444641336 +204 883 -1.3473438056042926 +210 883 -.16869460070799935 +214 883 -.5966697357103412 +217 883 -1.292324676978701 +235 883 -.3384783179094447 +240 883 -.6975181105712759 +242 883 -1.4835059849902388 +255 883 .5127367689369238 +261 883 1.640613457610358 +269 883 -.09079133908018092 +294 883 .0477438580613444 +303 883 .520599369726258 +308 883 .1637651702428066 +316 883 .07462154203355792 +317 883 .5277154900397552 +320 883 .11774225684970051 +333 883 .17650524696736164 +363 883 .161000035824528 +365 883 .5830230127801633 +373 883 .6332073858753481 +379 883 -.2797365505447974 +383 883 .8105465329529293 +384 883 -.779703792069098 +396 883 -.5693117308475647 +411 883 .14839491301677052 +412 883 .6235394633732726 +416 883 -.7942365982343459 +425 883 -.29455551594484025 +432 883 .1283512852536513 +473 883 -1.4556970550763597 +481 883 -.43424584564017 +487 883 1.564365323500145 +498 883 .2474132929115727 +504 883 -.6767445612450395 +538 883 1.5025069795600412 +558 883 -.024455145213272637 +590 883 .7463813908296735 +593 883 -.5953747377450189 +595 883 -.14948280460193283 +613 883 -.393853873322115 +619 883 -.39194867494849006 +645 883 .47420932920562703 +680 883 .07036354137374619 +682 883 -.028562835328464126 +705 883 .30066368060312076 +719 883 .42771567009289035 +730 883 .13670894061625255 +739 883 .4221881735412 +742 883 .19474317752427084 +747 883 .0001737424104408386 +752 883 .6474192170291779 +767 883 .5756755096987973 +778 883 .7607146452800813 +791 883 .1445874974319883 +810 883 .22684034337358713 +833 883 -.5667205842576974 +855 883 -.028330197414065582 +866 883 .253285877081518 +887 883 -.5690307266493955 +895 883 -.9465219737626513 +916 883 .17575046827383545 +922 883 .2586398536864504 +925 883 .4649185618401645 +930 883 1.0456646855218845 +938 883 .18013159669687062 +940 883 .7722827929592025 +972 883 -.20916006597570153 +995 883 -.9999076476069526 +997 883 .535836440954202 +1000 883 -1.4990070213904911 +1 884 .09627047311705593 +13 884 .17362367312538993 +31 884 -.08954780495345308 +40 884 1.5776627330535316 +46 884 -.3998586737084723 +78 884 .1429425278538948 +84 884 .0459211381920554 +100 884 1.2507625285810038 +150 884 .4529604394621376 +153 884 -.6145497080158978 +154 884 .7179698701116086 +165 884 .35188911362126324 +182 884 .3365475073727622 +188 884 -.6201971072662195 +203 884 .07283985166425563 +206 884 .8694275351719476 +209 884 1.1726110444170386 +241 884 -.24998862673159045 +246 884 1.6533271353241683 +267 884 .7762923550344423 +270 884 -.24752873944258127 +271 884 -.7936991989627362 +274 884 .775988894368 +282 884 1.3944910824340424 +293 884 .6554473542726332 +304 884 1.2113331856731964 +328 884 -.05675038508214228 +345 884 .5933953332339396 +348 884 1.3771890553145112 +366 884 -1.7453878541597017 +367 884 -1.1714043652762334 +379 884 .23551019708054102 +382 884 -.09488978444995866 +389 884 .19485504638609177 +390 884 -.7714806445096912 +407 884 .6694791996299365 +412 884 -.6117672630456323 +413 884 .3239163447410964 +427 884 -.18041436769579308 +435 884 .28434918330147957 +449 884 -1.2192760187958536 +453 884 -.45552925784937043 +474 884 -.027894402729863363 +475 884 -.026202321636013062 +477 884 -1.0456890450212009 +480 884 -.45336310334230434 +482 884 -.7785380714502164 +489 884 -.40149136931772206 +509 884 -1.1963391961235867 +512 884 -1.749768719306772 +521 884 -.002844890243995174 +522 884 .21969890444079843 +526 884 -.14422168604092184 +531 884 -.16449180505192254 +537 884 -.5019255104450323 +551 884 -1.3968506683169208 +557 884 1.971344636429949 +565 884 1.0126206891640643 +566 884 .8049787403842195 +567 884 -.4868015932591523 +571 884 .9779735708798807 +595 884 -.8814286632588078 +597 884 -.8060903722310485 +606 884 .6446832223268666 +616 884 -.21395993323508347 +627 884 -1.2421772659346488 +638 884 -.4737830080778061 +641 884 .6020300583186867 +663 884 .8071253389764889 +665 884 -.5364368823640541 +674 884 -.8620205856919004 +681 884 1.0435506213305443 +685 884 .6321788473787867 +702 884 .7188251742060231 +727 884 -.1425115112733426 +745 884 .5854284398568436 +752 884 -.623218438090961 +758 884 -.38005820586724204 +765 884 1.1414739595154129 +770 884 -.6738489008312819 +801 884 1.3744898018177205 +817 884 1.118675709677727 +819 884 .7447026057973776 +820 884 -.09583903450550779 +831 884 -1.2678463384688925 +861 884 -.04313101621034254 +905 884 2.3873223236337124 +908 884 .7082581897374629 +909 884 -1.0999433448524418 +916 884 .05143063567551978 +941 884 .5401546014995701 +955 884 .7984815814737828 +984 884 2.0433865547085763 +985 884 -.7440459456712507 +989 884 1.1724884105288516 +996 884 -.47021883976932927 +17 885 .259886816181468 +36 885 -1.3026212594488815 +42 885 -1.124561881514028 +48 885 .9738712967433506 +61 885 2.1453255425066784 +80 885 .040691153457334005 +113 885 -.7717434196728834 +115 885 .019898612638380733 +138 885 -.7208832713269044 +159 885 1.664737368485126 +160 885 .5613890308099795 +166 885 -1.818717081568743 +167 885 -2.2556409062959246 +169 885 1.1518205319941766 +204 885 -.985298417990495 +208 885 .15247103185721364 +213 885 -.01658968010378943 +225 885 .3989335081099451 +238 885 .2119369542694653 +260 885 .7402687762683128 +270 885 -.2980478940979031 +281 885 .1947468163893878 +314 885 -.2647857891355505 +325 885 .7227043080298244 +329 885 -.039287087679442056 +351 885 .08783252728196181 +366 885 -.20650092413438742 +367 885 .16198927628454887 +369 885 -.19422835800922486 +370 885 -.43575194006181983 +375 885 .7697321620228295 +387 885 -.023193947415262567 +388 885 .543802658298795 +394 885 -1.5918664843850063 +400 885 -1.1044836642566245 +423 885 -.0686967505010641 +425 885 -.5628110266599744 +431 885 -1.9782419134325215 +443 885 -.7788483824235288 +469 885 .42289523498696646 +488 885 -.762355114308114 +493 885 1.2363541652132046 +503 885 -.06121125100254356 +517 885 -.87805133571123 +524 885 -.6357363584352514 +528 885 .09935644642966254 +531 885 -1.0028225078615574 +532 885 .0017706560347269251 +535 885 .38484721707542724 +539 885 .657051659442854 +546 885 -.2193630665879913 +553 885 -.913943741731445 +555 885 -1.2063151727327521 +559 885 .6149027723294334 +563 885 -.20732109582633537 +565 885 -1.3356024113023357 +602 885 .5716422429037189 +616 885 .952985365150095 +625 885 1.087892463657741 +626 885 .915008589479149 +630 885 1.2568509873192033 +682 885 -.4681231588880505 +698 885 1.6642975008359355 +701 885 -1.8063306681083027 +704 885 1.397758400450706 +706 885 .9441933094358325 +707 885 -.18928643331356 +717 885 .7103779575990241 +732 885 -.2572967166598165 +747 885 .4210328657828011 +767 885 .657229868358849 +804 885 -.8125180492767152 +815 885 -2.4018828732365662 +821 885 .3120160797265899 +826 885 -1.4175857459155874 +847 885 -.9415888960987493 +854 885 1.3365526126293066 +881 885 -1.7098366693696807 +908 885 -1.7635726556208235 +920 885 -.7639031598755122 +941 885 .3472469329068438 +949 885 2.130880087405883 +950 885 -.5362631308145466 +951 885 .2246416615942543 +956 885 -.9067056605197887 +985 885 -2.0087496085105725 +992 885 .09871394993047086 +1000 885 -.7848459424508709 +3 886 -.033918697187843794 +11 886 2.078272715726657 +21 886 -1.2831350966738297 +35 886 .6001990645867431 +39 886 .1713142950864405 +41 886 1.1882524631295364 +61 886 -1.261605834884166 +63 886 .491294473807807 +66 886 .396050750791308 +68 886 -.547155427012456 +85 886 -.8081660278228924 +121 886 .03552804816561718 +126 886 .5916047572782323 +129 886 -.06634742674748997 +145 886 .6163658094026842 +146 886 -.3147078379619256 +161 886 -.7382224361190213 +167 886 2.1026328578283273 +175 886 .5002137537088328 +179 886 .2017102538862867 +183 886 1.7782254096734933 +187 886 -2.6750625557004564 +188 886 .041453706392314715 +189 886 -1.5342319762974328 +190 886 -1.2939003337890806 +196 886 -.18383884450747645 +208 886 .14266379728136516 +215 886 -.15688862969131917 +216 886 -.966867879001564 +235 886 -.4107056547900026 +240 886 1.1287843954020131 +241 886 .1459266295031023 +272 886 .5717673018579631 +302 886 -1.729547103748593 +310 886 -.04544458932636336 +314 886 -.6877503528665114 +324 886 -.1699586372630516 +331 886 -.5906399597292029 +339 886 .14992596234287053 +340 886 .32292858430958893 +346 886 .3151275892820823 +354 886 1.7043447752505971 +355 886 .7682593722827699 +368 886 1.0803568156185046 +369 886 -.5044949531244847 +382 886 -.8946097915460053 +398 886 -.5685932488886171 +413 886 .40587345672045505 +420 886 -1.5016907598277525 +433 886 .22604044496297315 +438 886 -.39914538224239526 +443 886 1.8424889161193163 +445 886 .22492496250012967 +459 886 -.1083265553932593 +466 886 .6874060458141059 +467 886 .20482254770434902 +513 886 -1.0210036175032686 +522 886 1.20716594774025 +549 886 .7410473949699055 +551 886 -.8037110887836308 +554 886 -.7746570494784577 +557 886 -.6119333233632627 +558 886 -.5114977588703586 +566 886 .8024705218260244 +570 886 1.330384261947413 +576 886 -.27340680125004085 +577 886 .2460481027526374 +583 886 -1.127015820926356 +587 886 .4481279743891606 +593 886 -.6971438954445749 +595 886 -2.30404575145808 +607 886 -1.0683929994449528 +622 886 -.527899426480298 +635 886 .007284356931786973 +667 886 -.15886257932006453 +675 886 -.16619883013607412 +677 886 -1.0665967601619708 +689 886 .22245933389751474 +699 886 1.22133626756633 +701 886 .31265889600477426 +702 886 -.11328314899503489 +712 886 .6576014162533222 +722 886 -.34561609756840694 +728 886 -.053336630136212315 +745 886 1.0364280949472295 +757 886 1.0089156251710292 +766 886 .917123181094031 +772 886 -1.0419797470424608 +775 886 -.697183403808787 +777 886 -.18870156063863958 +781 886 .016753899404954642 +789 886 .41900559013169053 +795 886 1.1315935573579057 +797 886 .5854462738518541 +798 886 .7183468174285143 +800 886 -1.6555228866661944 +802 886 .4546095003729564 +803 886 -1.1082025314783563 +809 886 .25082556768739267 +811 886 .2077852121608731 +825 886 .2441304385900826 +829 886 -1.0513548671569533 +862 886 .6975991721568422 +865 886 -.16554476531790246 +948 886 -.219950583929037 +959 886 .45439139963502273 +963 886 -.7953265514664115 +994 886 .19644842825048642 +997 886 .335823717277082 +4 887 -.34311202105859656 +17 887 .8523742950583533 +46 887 .7448117551934312 +53 887 -.14236851136398254 +57 887 -.11661677518775895 +61 887 -1.207402981208938 +69 887 -.8604265854400108 +78 887 1.1423183315131407 +87 887 .6827186720957433 +96 887 -1.1430069096209938 +111 887 -.7379255359936203 +120 887 -1.4111697797185427 +124 887 -.02725359710201751 +128 887 -.8386090617541075 +147 887 -1.865504018553278 +173 887 1.6084824981973236 +182 887 .5510726040644512 +183 887 .5467985849437705 +187 887 .11143755578775053 +190 887 -1.2834303928288486 +214 887 .7006053715511678 +215 887 -.822051999697262 +217 887 .7902832509668863 +218 887 .8440868300887305 +225 887 1.301321942541947 +256 887 2.2007099070602676 +277 887 -.7299222898058263 +281 887 -.09669177308572928 +284 887 -.20994966410319396 +287 887 -.14570388665693287 +290 887 .18551795316365505 +291 887 -2.395847919650726 +306 887 .7471408586026219 +309 887 -2.163671587156078 +310 887 .3596119578637913 +339 887 -1.3611656703659403 +365 887 -.09490283752920942 +367 887 -.08107419865414592 +378 887 1.1062196288120942 +379 887 -.6113480575792405 +385 887 -.6509161364869772 +414 887 .21147000057111848 +436 887 -1.2065895972742005 +450 887 .14655463412781694 +469 887 -.4497364878053318 +476 887 .02980127357871759 +481 887 -1.0264792192069183 +484 887 -.7120449725317426 +488 887 -2.2181426766393035 +498 887 .4812293337363931 +499 887 -.06685785905212177 +507 887 -.5666758079661107 +512 887 -.3280220748289696 +528 887 -.17552888987841594 +543 887 1.0217920690985076 +546 887 .9165566415022974 +551 887 .46073939060159985 +553 887 .10651418162539605 +571 887 1.7645313947590855 +575 887 -1.6042671037419924 +590 887 -.4809556891623994 +592 887 -1.9634425838450515 +601 887 .8206774562184321 +604 887 1.191905442134604 +611 887 -1.809786480224972 +616 887 -.5122886332937124 +621 887 1.1802498434040782 +626 887 .956203332653748 +634 887 1.6464277040261641 +648 887 -1.5751382568007113 +649 887 -.769366001547846 +667 887 1.8914099979407326 +680 887 1.734959725338576 +695 887 .8088577828793423 +697 887 -.4081443322349321 +699 887 -.4560726167189762 +704 887 -.9674508365396596 +706 887 -.7526397024195907 +719 887 1.0310567164571087 +721 887 -1.1411665525537589 +743 887 -.9659051669080102 +755 887 .733954582493189 +762 887 -.569832042168428 +773 887 .28812125783418685 +775 887 .3589558216169774 +782 887 -.6785393632494865 +783 887 -.2820290014104055 +787 887 .6747224968642471 +789 887 -.39648144453648915 +802 887 .47829327734589955 +806 887 -.9269361939526197 +813 887 -.17057520204293 +842 887 .7985861095804834 +855 887 .6175801164248008 +869 887 -3.209830139291343 +893 887 1.873906395500643 +909 887 .3662021922740723 +921 887 -1.6619289649925229 +922 887 2.2285523902841846 +937 887 -.38447485501273093 +940 887 -.7300196706978165 +943 887 .591172244015914 +973 887 -.8599298083942808 +981 887 -.44124605580802123 +996 887 .15674336774423245 +1 888 -2.0869497415992564 +16 888 .3687368864001562 +36 888 1.7063514763204113 +43 888 -1.0169168882421113 +59 888 -1.302592204187244 +77 888 -1.1361677041862472 +81 888 .10337282477424486 +83 888 .061332675839889855 +94 888 1.9007488980650353 +95 888 2.663914091629755 +101 888 1.9883534725523875 +102 888 -.031248339452228213 +114 888 -.7756554502120708 +126 888 1.7850077594013938 +147 888 .502277767785819 +168 888 1.773097974498023 +174 888 -2.1565723001237243 +185 888 .40801390632836115 +187 888 -3.073446350519671 +188 888 .7181508310104789 +197 888 .19859399362798755 +221 888 .5037153084075483 +224 888 1.4263121798154534 +236 888 .22642565957676755 +237 888 -.7766732368071958 +242 888 .13728938378883787 +243 888 .7665169019893696 +245 888 .9321797252747497 +260 888 .04035052729403643 +264 888 -.02762183598080816 +285 888 .6388177504288618 +290 888 -.47035216367076804 +334 888 -1.1867936810703381 +336 888 .2740736467837527 +338 888 -.23294565933216296 +341 888 .9993354637133868 +345 888 .11367584151720372 +359 888 1.0561790390501686 +370 888 .8716931084483948 +374 888 .14992898578517944 +375 888 .5559919144296531 +380 888 -.09686343118924386 +385 888 -.23687782936340854 +387 888 -.06156871009477518 +402 888 -.581979364873694 +405 888 .621988655646321 +413 888 -.3136611387940975 +417 888 -1.5138763653181844 +421 888 .7413283446188264 +434 888 -.37087939464378655 +449 888 -.35939098217384313 +454 888 .5851649238276887 +461 888 -1.1849747281419265 +474 888 -.13119030183856553 +483 888 -.6211885872439562 +484 888 2.001188448448264 +488 888 1.7700756983576078 +496 888 -1.1334197122536052 +498 888 .03743681110443879 +505 888 -1.6921495838434881 +518 888 1.5417495112279591 +524 888 -.932670875873326 +538 888 .4913876849823138 +539 888 -.4378616733300919 +548 888 -.9513143815372952 +572 888 .6996020402551735 +580 888 -1.5095145481762071 +586 888 -.4005649205845464 +588 888 -1.6424093003411797 +595 888 -1.3877745225204579 +597 888 -1.277173561945086 +607 888 -.9883100728480834 +625 888 -.2774071831927226 +627 888 -.5152265130186688 +645 888 .6832183371482735 +647 888 .20801966853372209 +652 888 .9291939381138465 +655 888 1.2388693010039473 +669 888 1.5373867147655358 +671 888 .4966667332377699 +682 888 1.147322563067109 +688 888 .8101836819885858 +690 888 1.3247571420570337 +694 888 .7471067047761049 +723 888 .7571491993025664 +757 888 1.0327471743598584 +767 888 .2278352051154247 +775 888 -.1578195580747092 +781 888 -1.4966270134783168 +784 888 .6972970272864412 +785 888 1.2543847514043425 +787 888 .5918300164955037 +804 888 .8532064026799084 +812 888 -.560250805929287 +818 888 -2.296207567168445 +823 888 .6735871131156024 +828 888 .20598123476188626 +848 888 -1.6273044723616672 +856 888 .4372120556854913 +894 888 2.204779686225805 +895 888 .37343307672390347 +904 888 .11930321282206642 +914 888 .3919038087386435 +923 888 .1602914032700769 +939 888 -.5525888055199828 +963 888 .5482233976101906 +15 889 -1.4904327624218279 +35 889 .1539444534565702 +37 889 .02879296186964586 +55 889 .0665794889781186 +61 889 -.1135458609956485 +82 889 -.1910663306564459 +112 889 -.9020230231301474 +117 889 .22583595037394044 +125 889 -.6494525212883592 +126 889 -.6716212018685772 +132 889 -.05736049905081046 +153 889 1.1260122045535665 +162 889 1.2817371482586921 +168 889 .030804636172541804 +181 889 -.19809259026159537 +190 889 -1.5661058092461253 +195 889 .590923551518587 +212 889 .41325263642032656 +217 889 -.029179520200736123 +223 889 -.32057126648085676 +265 889 -1.080670894489133 +269 889 -.8667614993240471 +301 889 -2.001656341943953 +314 889 .758931776139197 +320 889 -.9276231790983142 +332 889 .45917287472499724 +337 889 .522589407212837 +355 889 1.5485921461987495 +368 889 .2596312588355553 +378 889 -.5790082738670669 +403 889 .3747260244767551 +454 889 -.09452396931538642 +455 889 .18180660174318422 +461 889 -1.413162028446093 +471 889 1.365956492604807 +475 889 .24297638990906137 +476 889 -.007045864445695688 +478 889 -.683756449192105 +491 889 1.1852817039881527 +507 889 -.2044724155636001 +525 889 -.5459283967504459 +528 889 -.6747127507076907 +538 889 -.7262175716202214 +540 889 1.0885856632847255 +541 889 .5586571552922048 +550 889 -.7069033856494228 +557 889 .08853985424732298 +569 889 -.02489019602709233 +570 889 .46380009442077474 +581 889 1.1478360021963978 +582 889 -.6797173463702171 +585 889 .38831811024987073 +587 889 .8013935023063188 +594 889 -1.0126261034895747 +599 889 .46040701704766707 +611 889 -.835632621139432 +622 889 -.37223788034823235 +631 889 .5714183713893166 +635 889 -.1173041755431671 +641 889 -.05572506445024833 +643 889 -.13568713250813488 +655 889 1.0399972765029084 +667 889 1.3451964320235745 +677 889 .03214513124410827 +694 889 -.9818838530177323 +711 889 -.6055458413838444 +727 889 -.2848415419564535 +770 889 .9263436383645381 +795 889 -1.6207088112581187 +800 889 .234986267335288 +853 889 -.4089528810143035 +872 889 -.31712622046164396 +876 889 -1.1038650940029846 +888 889 -1.8265296531995219 +889 889 1.172828602568494 +890 889 .6693286097549082 +907 889 1.4901691174752159 +918 889 .3295062853935481 +921 889 -2.0796026695119556 +925 889 .8497648098309365 +935 889 -.4661318924692965 +951 889 .8891543711391418 +952 889 1.0560366638455188 +974 889 .6327419627156773 +7 890 -.09419500675966232 +13 890 -.16090298077968868 +21 890 .8548428831551755 +39 890 .07300387562757102 +41 890 .10091277240210389 +42 890 -.0808916072264973 +57 890 -.11964744623426266 +69 890 -.3303709194349113 +77 890 .20943221087422306 +89 890 -.254586585035631 +95 890 -.7614947716390092 +105 890 .4869713221504481 +109 890 .20197547496875645 +136 890 .31190265791112926 +138 890 -.2197427954468575 +149 890 .6954865114388604 +165 890 1.1427877588103568 +179 890 -.3135269518054477 +193 890 -.7341665533430599 +200 890 -.10926034490544784 +210 890 -.9707190488763893 +225 890 .7477253982360211 +228 890 -.004557110779562015 +235 890 -.8158029158138412 +259 890 -.41669258164562467 +266 890 .3985502396400997 +320 890 .08014758924692873 +321 890 -.7253890437712375 +326 890 .812712856138603 +330 890 -.38009403754357063 +338 890 .6164531449378524 +341 890 .12390115857107226 +342 890 -.40521207899314265 +351 890 .8149402466624948 +372 890 .4001768483290999 +387 890 .07260003076477482 +395 890 -.24903649400329325 +396 890 -.007107714639699558 +407 890 .1826148115060026 +411 890 -.6923892605278447 +420 890 .7214901477382639 +435 890 -.9305657613908563 +441 890 1.9070806185553089 +469 890 -.44362781325115574 +482 890 -.125225425142305 +509 890 -.39942778736118556 +512 890 -.7663957419899617 +524 890 .4297183339325751 +531 890 .5967873413656515 +538 890 1.004270683346853 +548 890 .15581453984161864 +562 890 .23797733735905596 +567 890 .0751818972744545 +571 890 .7697045342206068 +576 890 .1870360058470178 +579 890 1.0069267318640445 +584 890 -.29637214487463537 +585 890 1.2767335664062325 +599 890 .5086725644561177 +618 890 .04931692437677593 +633 890 -.6162609746246691 +634 890 .5727049437471968 +642 890 .7953666360421205 +645 890 .535710604133512 +676 890 -.9069461281807725 +684 890 -.6904872837088332 +692 890 .8700276931653557 +707 890 -.1054619053656962 +709 890 -.07330313313956255 +715 890 .6640582561879089 +735 890 -.09478475876977113 +748 890 -.0017979552334944499 +760 890 -.30286897124304646 +764 890 .5453195890800467 +779 890 .12294804490926738 +798 890 -.6832861824574596 +806 890 .47363010017665874 +809 890 .6410564510855201 +825 890 -1.3501368301925416 +837 890 1.528029208778702 +838 890 -.3251366412134614 +848 890 .05430382825038665 +874 890 .09257476489111843 +875 890 .5925416047425863 +889 890 .09182502542105954 +896 890 -.465675496868648 +907 890 -.3947011756967567 +909 890 -.03304306983346546 +932 890 .40581649420480015 +933 890 .07659767667378797 +958 890 -.7716334549033027 +968 890 -.8735129811946543 +973 890 .39016481526044483 +980 890 1.0290697713201866 +991 890 -.6340769282747604 +994 890 .4738658167376184 +997 890 -.07787022672804242 +1 891 .23743425629438863 +30 891 -1.0281776478526778 +37 891 -1.0195761222765118 +42 891 .3027499991170647 +51 891 -.1644080630766792 +55 891 .16773043159695722 +90 891 .12074217636844282 +96 891 .799019119115836 +97 891 1.0454234307410528 +112 891 .693527304227176 +133 891 -.2628005995337747 +139 891 1.0236068118689994 +150 891 .18578568738325227 +162 891 .8280394700624427 +164 891 -1.1294864955848067 +168 891 -.05421566929586956 +178 891 -.05387267653214353 +196 891 .9732927598001059 +199 891 -.13488261517912817 +209 891 -.8236004197139847 +228 891 .4849349267180629 +231 891 .6499860010780819 +243 891 -.6945984607838224 +250 891 -.0158650862614019 +264 891 1.0844815485147035 +266 891 .0035576315915541445 +269 891 -.9089051844694407 +289 891 -1.4661640876104 +300 891 -.4209885710293574 +301 891 .12887593717210116 +320 891 -.2018103332709974 +380 891 .9336005464265119 +381 891 .2778420255498263 +384 891 -.7385565415423925 +393 891 1.2050015638534777 +418 891 -.5705169861818544 +420 891 .6283621512032267 +427 891 .4291700404708563 +456 891 .07868044187867568 +471 891 .13352888362842974 +476 891 -1.558298144971364 +491 891 .3408209352870579 +492 891 -1.8932173530193888 +500 891 -.4292110088012975 +512 891 .17337885341744508 +519 891 .05116901022650336 +550 891 .4840364550053068 +553 891 -.31408531539064066 +556 891 -.4700124194330011 +563 891 .040709700642367674 +576 891 2.1260800656828613 +590 891 -.22225792382315518 +602 891 -1.092121119936914 +606 891 -.3029875673415851 +619 891 -.22877757281976388 +642 891 -.8504520671018623 +658 891 -.5671489282959087 +671 891 .32297585960544994 +675 891 -1.7736543343765478 +678 891 -.15527937952484294 +694 891 -1.3309466174046256 +714 891 1.285232377765964 +719 891 .6715746504357327 +734 891 .3872876644152715 +738 891 .5033474982297639 +746 891 -.31218381803399586 +772 891 .08590113407526481 +779 891 .47014473840605203 +782 891 -.1953678295272785 +791 891 .06543749858586043 +797 891 .5452145459258424 +809 891 .6242951237567574 +810 891 -1.1870158894376759 +831 891 -.7073605753190132 +832 891 .9771083109163714 +860 891 -.04865204110412158 +884 891 .13065773644377388 +887 891 -.6478268432165575 +902 891 .6750124360702932 +909 891 .6636703918744138 +913 891 .21540025444637576 +914 891 .6460435995107426 +916 891 -.4156987981861011 +929 891 -.7479877768255796 +937 891 -.4097563158786208 +939 891 .5442339443403057 +945 891 -2.101409892680436 +949 891 .9311925142428024 +958 891 -1.7121162087095891 +963 891 .16710599935728837 +966 891 -1.1246841616935097 +984 891 .03535177753765131 +7 892 -.1573083442835059 +16 892 .9823385452339584 +17 892 -1.1256556650604423 +35 892 -.2311729073467437 +37 892 -1.2525691551279357 +42 892 .6398638825882242 +48 892 .40866380192406676 +58 892 .04462699444024207 +69 892 -1.3543130181895422 +72 892 -1.1421885705185382 +74 892 -.14781857361382433 +75 892 .1072029144616113 +78 892 -.17371461338729643 +82 892 -.08263670936049648 +91 892 1.3624922559802854 +99 892 -1.9343126265779997 +104 892 .038721046623990854 +113 892 1.4047886519299622 +125 892 -1.2694708024662815 +130 892 -2.8669903331872275 +147 892 1.0106605222186593 +156 892 .38327799437445065 +168 892 .866679818240709 +169 892 .40965141459413307 +189 892 -1.394415276114736 +191 892 -.5523218834400585 +194 892 -.6210513874455759 +197 892 .8042911060081802 +200 892 .8283559665873045 +215 892 -.31535156662706354 +217 892 -.1922605080434328 +224 892 .12073769072506757 +234 892 -2.3067806417774444 +246 892 -.16547502471459566 +269 892 .5260352352600239 +277 892 1.8533681585074393 +284 892 -.9090200376516415 +295 892 1.0809599148438453 +298 892 .12673915697717456 +303 892 -1.1991509784717889 +312 892 .41022193390004724 +322 892 1.753392925186266 +323 892 -.7421560028727272 +329 892 .46274135038446124 +334 892 -1.426106745616035 +352 892 -1.3249028883203695 +356 892 -.25946713175612685 +362 892 .6796528525879842 +364 892 .20873050053326847 +370 892 .6709419518715122 +394 892 -1.1285154133269173 +403 892 .5470892646384407 +407 892 -.9456104806714762 +433 892 2.0703641195020097 +441 892 -.7706097789479152 +453 892 .3158190692284787 +472 892 -.08290566808523513 +480 892 -.021230337503354596 +498 892 .5085371177884277 +517 892 1.2740163192969312 +521 892 .9644689321957794 +524 892 .7850121041305694 +531 892 -.13397494980763194 +532 892 .4089999673339353 +552 892 .4092367935440163 +555 892 .8051915775407597 +565 892 1.8621125594957617 +584 892 .451076318492418 +592 892 .2872354136066644 +603 892 .08424733452891127 +606 892 1.2844961616496056 +609 892 -1.9941149402730731 +628 892 -1.1208659344257115 +643 892 1.596122244570728 +649 892 .7866754400953893 +666 892 1.025699025533771 +673 892 -1.8442292473809583 +684 892 -.34264053198669203 +687 892 -.5920962838733829 +732 892 .2696369077577525 +736 892 1.1437051503278755 +750 892 -1.3349695741814391 +771 892 2.4365410194751864 +772 892 -.5785138717555758 +774 892 -1.155744625803832 +799 892 .3702636489189453 +800 892 .011726357379914565 +801 892 1.8847848679654362 +829 892 .2552500271650703 +842 892 -1.2339325247497754 +844 892 1.7931550217604215 +847 892 .6017702521268398 +850 892 -.9632265713322872 +853 892 1.364736413242301 +879 892 -1.173672805688086 +888 892 1.7079100803209877 +890 892 -.3123833787225845 +896 892 -.5553023368357292 +900 892 .3973315004283182 +918 892 -.40463255462670655 +919 892 -.6531036593955933 +922 892 -.9438730138914261 +947 892 1.400851557924155 +954 892 -1.9327890872039861 +963 892 -.9074875958856908 +965 892 -1.0214786253210977 +995 892 -.4938858954963777 +999 892 2.8464068681935757 +40 893 1.540522460886903 +59 893 -1.469179116536801 +62 893 -.9151198364393005 +89 893 -1.29137772974356 +128 893 .6753678649625552 +131 893 -.7435659952955974 +139 893 .4389034909634499 +144 893 -1.6848743172593723 +193 893 -1.6564523835562754 +196 893 -2.172380604601146 +197 893 -.7405465580907779 +208 893 .553801534057222 +227 893 -.25751335887525734 +231 893 -.9404576044734358 +250 893 -.8015581930988908 +254 893 .411220951885561 +285 893 -.7338673830492215 +315 893 -.33422951295836617 +324 893 2.2927947959377315 +387 893 -.12862137220659486 +391 893 -1.6379714317451128 +407 893 .7485100676122273 +422 893 -.7166735753309241 +423 893 1.2326251143732807 +430 893 .9068102462358066 +444 893 -.26485554261452077 +464 893 -.3278193036730418 +466 893 1.5226652555393838 +484 893 -1.6348619769031045 +528 893 -1.7171652108250806 +549 893 -1.4992689981894434 +554 893 .25573116409128827 +557 893 .7623361203862893 +558 893 1.2809376090367772 +586 893 -.1518886134771235 +606 893 -1.710107070610473 +613 893 .4494501071430913 +616 893 .43468150166249026 +619 893 -.7453559889364012 +625 893 .741945678952671 +626 893 -.5666301385636805 +633 893 -.13602661905740984 +635 893 -.9301332118730062 +637 893 .5131325698417317 +643 893 -.022407650396650172 +647 893 .2760562899611475 +658 893 -.1720681931861663 +673 893 -.013617252506202479 +675 893 -1.5207860698932278 +699 893 -.8096228214170226 +724 893 -.9697240797122854 +725 893 1.222145913154126 +739 893 -.3419301074629653 +741 893 -.8080908632250261 +763 893 -.3720556033638392 +768 893 -1.1699976443420739 +780 893 .5044364011476754 +796 893 .3339598512079099 +801 893 .3965972691074798 +802 893 1.9412012265670284 +804 893 1.3111561179498774 +813 893 -.5545884935970715 +818 893 -.4682981096173432 +830 893 -.7179198589139542 +834 893 -.36782278136221125 +844 893 1.197725274535761 +852 893 -.47054813876529444 +857 893 .1953471334765987 +861 893 1.442065474272003 +867 893 -.3030846613500465 +874 893 .9686986416015728 +879 893 1.4477137370685795 +888 893 -.4256751585185166 +893 893 -.5290342578815674 +897 893 -1.8659427345421566 +917 893 .5116882939155392 +930 893 1.1893739496976166 +934 893 -.4392205188262712 +935 893 -.4301595523611614 +938 893 -.719118895087545 +939 893 -.19319954499585112 +958 893 .9871312113881123 +970 893 .016582048546804257 +972 893 -.4823423082798722 +982 893 .5261475222987707 +983 893 1.1888231891210046 +994 893 1.517068018411305 +4 894 -.7189929449666003 +6 894 -.5228696836709759 +26 894 -.4163729090539843 +52 894 -.5806681521819259 +64 894 -1.1457232338151448 +75 894 -.0783584397576851 +80 894 -3.837223747470084 +85 894 -1.228742727264812 +92 894 1.5484884902578462 +93 894 .7376139609142193 +95 894 -2.4913536226436754 +98 894 -.9110982470932474 +115 894 -.014208813604522336 +146 894 -1.5430329148891555 +148 894 .4005128247405306 +151 894 1.8448776211643523 +160 894 -.455722907158312 +165 894 -.185839991154256 +174 894 -.9250129219564263 +183 894 2.4664228137974598 +188 894 -1.9089690796844205 +189 894 -1.1550093316255476 +190 894 -.5795997556073169 +202 894 -.31390991603359486 +210 894 -.4460032786906194 +231 894 1.1503369299002533 +234 894 -.25906603949491636 +242 894 -.4978248884092675 +249 894 .8014987885151008 +253 894 -.2596761863981576 +264 894 .16390930253136907 +275 894 1.4639950323371422 +279 894 -1.6715117430626059 +294 894 -2.197458762741849 +315 894 .3947871134341183 +318 894 -2.449354995871164 +319 894 .9161253323575349 +327 894 1.0795235414969555 +341 894 -1.6236911947630077 +361 894 1.4165867257845988 +373 894 -.08789553055269918 +376 894 .2531967445492004 +381 894 1.24146110043429 +436 894 .07017400353643646 +442 894 .36630086369910825 +453 894 -2.7930710233538645 +456 894 -.8431235805931889 +459 894 -.19197081692344692 +472 894 -.3333005194172157 +473 894 1.731366210190018 +476 894 -.2797979422564614 +478 894 1.3849342369733895 +485 894 -.01977529409141561 +492 894 -.9310695382230998 +495 894 1.8097345820332997 +511 894 -.6772000736880072 +552 894 -.3868486330319073 +566 894 .7462801319612031 +574 894 .8645966480078042 +599 894 1.0006297110814804 +607 894 -.4505265325681991 +611 894 -.37604152840693894 +621 894 .2533534747155278 +647 894 -.2167115972108216 +662 894 2.9702220462358766 +719 894 -1.6677655217111005 +721 894 .7430442718418322 +746 894 -.15909525078306808 +750 894 .38456267771373354 +760 894 2.3030203746485864 +772 894 .5094590153184558 +775 894 -1.2930039626469745 +781 894 1.1705942952300654 +784 894 2.01251265287891 +786 894 1.5672148402927357 +816 894 -.4264108981898513 +829 894 -.5649941656025605 +830 894 .16972470754983457 +832 894 .8506112924064112 +838 894 1.6816882798934 +849 894 -.7175567654489614 +850 894 -.3732610088537719 +868 894 .25421482050868477 +871 894 .879540786547424 +911 894 -1.042726655250859 +916 894 -1.0231515783372689 +921 894 -1.5821285195311159 +923 894 -.40277991205302677 +924 894 -.8921103612357372 +938 894 -.666622151164209 +952 894 -1.3171491288687094 +960 894 1.180061887060315 +17 895 -.06942020079871128 +18 895 -1.2466164583266952 +23 895 -.31189673281755864 +27 895 -1.3299744506926112 +30 895 -.8542181826798535 +31 895 -.016777442765490355 +35 895 -.35030095695525093 +40 895 -.27499355884034243 +47 895 .0005078030866464784 +48 895 -.2850180175375278 +52 895 -.3871416905392622 +62 895 -.07493240565869319 +72 895 .03854524022263327 +74 895 -1.590606000567987 +82 895 -.7785182849000422 +88 895 -1.8529466719285745 +135 895 -.2129988736039623 +143 895 .5870192375373757 +154 895 -.006363495710386247 +157 895 .3535716916526478 +183 895 -1.027115511949955 +208 895 .00357928393862348 +212 895 -.577760253580691 +230 895 -.5917415412332376 +285 895 -.309726901789423 +287 895 -.29999595419753716 +292 895 .12934472306446215 +294 895 .6278911613687086 +335 895 .0070409797658087785 +336 895 .28454885029974586 +340 895 -1.065157132232723 +360 895 -2.4500692422484076 +363 895 .3528848294509126 +371 895 -1.2108436602462527 +378 895 .42010419062282467 +380 895 -.35939532503720983 +394 895 -1.3772668421439194 +399 895 -.1267631704227233 +434 895 .27257922907914023 +455 895 -.9060117923806116 +459 895 .2749670735500582 +463 895 1.7831834960843054 +508 895 .2960775752310318 +515 895 -.8918946626091651 +523 895 .704443470588519 +533 895 -.5550311962331635 +556 895 -.06892843449037675 +570 895 -.2102719056380823 +572 895 .2764903818446347 +574 895 -.3061529485325272 +582 895 .7156576163329453 +590 895 .027186377864546488 +598 895 -.0060545445127705155 +618 895 .4627184127254188 +619 895 -.2789484418773665 +632 895 .09546694924070243 +635 895 -.35448124924566565 +651 895 -.8714500668612825 +653 895 .8620162422931918 +656 895 -.26111884651054734 +657 895 -.937798333503762 +678 895 .15221657669845748 +691 895 .46041630782110077 +713 895 .27545230892030814 +724 895 .423541703352292 +726 895 -.7944208468072562 +756 895 -1.1430864043843576 +765 895 -.8493540542723744 +771 895 -.5510424388777904 +775 895 -.03320597537048334 +779 895 .34058516586437915 +788 895 .38373763432306196 +816 895 -.25279142665180465 +841 895 .6869171675028662 +881 895 -.48177872647050557 +896 895 -1.584330531865321 +897 895 -.7576949115909515 +902 895 .2838447945256038 +912 895 -.5728344488391085 +913 895 .6539367257493753 +914 895 .16670151171552713 +918 895 .04494392946323327 +956 895 -.2921099663815967 +957 895 -1.3212490719918906 +965 895 .7188222513506085 +967 895 .08775741305632032 +978 895 .12150927302566157 +995 895 -.9364142217273611 +14 896 -1.7504405712016795 +17 896 .7162117030717885 +20 896 -.385760610909673 +25 896 -.23288030662117454 +27 896 -.10637716131657557 +31 896 .6197734527446872 +36 896 .5939996566370545 +44 896 .5378475892730337 +51 896 -1.0216620610213683 +70 896 -.1687966557774738 +71 896 .6341775072545525 +86 896 -.8916930799592616 +111 896 .5198626138287774 +114 896 .3270536449562722 +115 896 -1.043673762282176 +135 896 .9896699792059388 +164 896 -.37420915966182977 +165 896 .5597820011275133 +167 896 .6726307802783852 +170 896 -.41154508210032203 +189 896 -1.777309688293098 +190 896 .3767130634795184 +198 896 1.835115562794114 +233 896 .7673390986417208 +246 896 .627913802911377 +256 896 -.3637946966554685 +274 896 -1.0274819462355256 +279 896 -1.2103714009112492 +298 896 -.665096417668902 +304 896 2.2550504515443186 +331 896 -.8113516395943652 +339 896 -1.4834181758388834 +357 896 1.4561532588506316 +377 896 -.4621183637075499 +394 896 -.9080305920946626 +408 896 1.1218933001786202 +415 896 -1.0239384510254832 +422 896 .08384102352100814 +423 896 -.5111380484373181 +427 896 .5989493171426059 +451 896 .579761668123435 +452 896 -.0026960195579520674 +457 896 -.2613628152538657 +473 896 .9149555041839603 +478 896 -.058877389696652 +500 896 -.023892894675526466 +512 896 -1.532629391432913 +514 896 -.23160655108223294 +521 896 1.1461441860025834 +529 896 .03401028320667654 +547 896 -.3357426798155565 +554 896 .12509257710016228 +555 896 .33763484769156116 +562 896 .5405089938367073 +566 896 1.0079830934412104 +577 896 1.0782345770071173 +585 896 -.46060222899445497 +595 896 -2.279184500073081 +600 896 -1.4756609846027804 +608 896 -1.0142033823554975 +615 896 1.6181353562295813 +618 896 1.0937687254618806 +622 896 -.11463970575836022 +638 896 .2168272703862505 +640 896 .16996666594090915 +648 896 .12043838316939186 +667 896 -.02404981039207809 +704 896 .6839145018260921 +711 896 .20100341388195644 +716 896 .34801075680883464 +741 896 -.4755721058808252 +744 896 -1.8193198924938323 +774 896 -.33228907978182876 +778 896 1.0739178791275639 +781 896 .6751316356157699 +802 896 .73752412660878 +809 896 1.6503330917570624 +816 896 -1.2249390797489732 +819 896 -.20705062682012215 +827 896 -1.8779933749949718 +836 896 .6742268332453032 +840 896 -.6392573118672834 +845 896 -.7490281617679628 +846 896 .3808272320925983 +853 896 .898779997838315 +855 896 .41711510934358265 +862 896 -.3321004007980289 +888 896 1.3406236267012823 +891 896 -1.7476960403872248 +897 896 1.1590462959372736 +907 896 -.9136926726848548 +932 896 -.8495881112661251 +938 896 -.2675458464438697 +942 896 1.3723394207486026 +983 896 -.293138537544027 +992 896 -.6522545743091825 +999 896 2.733110099954319 +15 897 -.3126166528655461 +20 897 -1.342296135451357 +21 897 -.5772766542291876 +28 897 .033325556690977275 +30 897 -.4887089768087831 +76 897 .48997389871341657 +83 897 1.0436638865381456 +89 897 -.8293211043119646 +116 897 1.8838054399148443 +119 897 -.3623187945831951 +120 897 .8354212040845673 +128 897 2.5346783579406784 +132 897 .8825925813440472 +137 897 .4262070881102012 +141 897 .5573156660940044 +143 897 -1.3020801574827787 +144 897 .40074963258259794 +165 897 -.02641567810549334 +170 897 -1.5840208462236578 +183 897 2.585758925498573 +204 897 -1.1527547539341876 +210 897 -.3616551339917259 +211 897 -.6399191575817818 +220 897 -.5124396455502256 +223 897 -.5048230622136269 +235 897 -.04357637684200073 +243 897 .2989337772570414 +254 897 -.03184180834275111 +256 897 2.2575920373805265 +270 897 -.22397707797133887 +278 897 -.31062521688577605 +279 897 -1.0090217147959286 +293 897 .9545071867405779 +298 897 .15175990449310733 +306 897 1.7050046680699436 +313 897 1.315167610856741 +322 897 .5416128817420197 +335 897 -.39041817282835234 +339 897 -.29959706079365145 +345 897 -.16164432293707776 +349 897 2.614867137303084 +355 897 .2015886978317816 +358 897 -.4528006441828357 +364 897 -.917108774138881 +372 897 -.9296205547463491 +394 897 .6680719465417175 +401 897 -1.7958797918839442 +410 897 -1.0063971203781863 +412 897 -.4377256741318889 +427 897 .3848353149020572 +428 897 1.053012431020169 +432 897 .10398428673458293 +433 897 -.00796095141425518 +436 897 .8018560609993017 +469 897 .39265125690623626 +470 897 .749269823005746 +496 897 .07379019366392094 +498 897 -1.5449891882416709 +515 897 .0140698069088208 +522 897 -.9983354941992963 +532 897 2.120217657469385 +540 897 -.3303989720760196 +548 897 -.6945223570672224 +565 897 .3590341992187912 +572 897 1.0673609094704266 +590 897 .07246262798329327 +602 897 -.7415000024344849 +604 897 -.30519926556037374 +612 897 -.037149274765494136 +614 897 .3828477697976519 +633 897 .8301558738987006 +634 897 -.4957904716949755 +654 897 1.757421119068999 +660 897 -.466132657797967 +679 897 -.5566639324463183 +692 897 -.6676992227174684 +730 897 .18641835302322207 +737 897 .5145622513661334 +744 897 .1580652115401483 +745 897 1.4086477745090762 +748 897 1.4586229652924267 +758 897 .705565408207004 +764 897 -.527858969817763 +769 897 1.4144098804088772 +794 897 -.6744856568547948 +800 897 -.19389374685111635 +805 897 -.7333722385135427 +811 897 -.7733437564595518 +813 897 -2.550157334860115 +816 897 .6901549847840767 +818 897 -.2728064955540498 +822 897 1.6004939011012274 +829 897 .6364076618264918 +857 897 .005331382683041744 +864 897 -.8265603722006704 +869 897 -1.899334291425844 +876 897 1.7066313658308039 +893 897 -.8377823961786802 +904 897 .3994500330707427 +912 897 .07845791135088545 +915 897 -.2857077493981753 +926 897 -.8766766343043405 +939 897 .04811037529403796 +945 897 2.1001178040036828 +957 897 -.2910457304753327 +967 897 .010038437432202493 +968 897 1.3218739397704835 +970 897 -.07215624933249166 +971 897 .1869489378463487 +978 897 .4710662719226768 +991 897 1.0141252512750973 +1000 897 .9756741701174058 +12 898 -.03289592516008344 +22 898 -.237932968139682 +27 898 3.238395575377001 +32 898 -1.7364233041334565 +64 898 -1.7056782650025286 +68 898 -1.4661850059577104 +71 898 1.3361258066804553 +72 898 -1.1923359097079556 +93 898 .5271018656695661 +117 898 -.9645540946540601 +124 898 1.362977983327319 +144 898 -.2609148064578674 +146 898 -.9502819077474118 +150 898 -.09056678220321455 +155 898 -.2917937599535006 +163 898 .6006607316111336 +185 898 -.4262938388127189 +209 898 1.2687499008765273 +222 898 .9326663513631593 +225 898 .04897786687325306 +258 898 1.3034007830845298 +260 898 1.1211145632282078 +278 898 -.5304759065325164 +285 898 -.28785985711660733 +292 898 1.2702140680959664 +294 898 -.4078369364041173 +309 898 .7720432682728245 +329 898 -.12504411357897693 +330 898 -.6042957265531859 +337 898 -1.034482546197498 +396 898 .21157380772923595 +405 898 -1.0718574070870224 +411 898 -.307362731463947 +416 898 -.1259790319798238 +434 898 -.6463519872143965 +441 898 -1.0452569315181506 +451 898 -.15995279795920617 +454 898 .23392732937570795 +464 898 .27098254554053963 +511 898 -1.7092190943471468 +524 898 .8935396249424553 +537 898 .7675311466351807 +544 898 -.3044229723888098 +555 898 -.08983517502428699 +557 898 -.19137896820589562 +562 898 .8242701383923675 +569 898 -.44143958233247343 +571 898 -.2883495430892927 +595 898 -.40324286308471635 +618 898 1.418374291452338 +628 898 -.8519547983042032 +629 898 -.8121634210572957 +638 898 1.7035912080273303 +649 898 .36866361683453724 +651 898 3.2329797650022076 +652 898 -.11540721366058784 +680 898 -.36823849186559743 +681 898 -.7761824138942823 +691 898 -.5796252992196526 +692 898 -1.1315554418151483 +718 898 .919939822006888 +745 898 1.1852346688977415 +747 898 .534141967890465 +748 898 -.4064660862164809 +754 898 .6911520216961127 +755 898 -.31349454476310495 +764 898 -.5916036047395403 +768 898 -.40261350756469877 +771 898 -.06401387794226748 +778 898 -.8805176561622307 +782 898 -.2884389959743374 +804 898 -.4767125548529203 +814 898 1.0580406430536973 +819 898 -1.2176208889098714 +826 898 1.2205030875146625 +837 898 .34236830473807445 +849 898 .03632794853600222 +858 898 -.5547013260916709 +872 898 .18275791916909884 +875 898 -.7481342008435509 +876 898 1.008645901351829 +879 898 .012735585175483122 +884 898 .24333462196410682 +892 898 .4784677783178517 +905 898 -.040747132709787415 +912 898 1.034841659439317 +915 898 -.5398180828302119 +921 898 1.1391467708098961 +923 898 .9556988997787171 +924 898 .10887689648453526 +928 898 .38421572431757656 +951 898 -1.291909263636607 +959 898 -1.1326645339301689 +963 898 -.8245264140605278 +966 898 1.3223852405051972 +971 898 .6821750225818762 +990 898 -.8979134479341696 +5 899 1.4278508338753593 +8 899 -2.2848806241826796 +14 899 .6457665489024299 +17 899 .4549019707432296 +20 899 -.3726466403205423 +22 899 .7977568078505466 +37 899 1.1858742736628152 +42 899 .6645729782450425 +44 899 1.45769459128396 +45 899 1.0667210814231027 +51 899 .09149377436743686 +54 899 -.3999924903469569 +58 899 -1.7013661083471092 +65 899 1.3445256055530936 +77 899 2.149492503005776 +95 899 -1.3917666476365136 +98 899 .9327422944015565 +109 899 -.993736323107077 +125 899 .43529576510061846 +139 899 -.24183886208524 +155 899 -.48901900009116095 +169 899 -.398416194255605 +209 899 .6632606073522388 +212 899 -.29422028949536777 +218 899 -1.1729608339304234 +219 899 -.8320004158578688 +223 899 .2752990014451474 +224 899 -.4195645821433244 +226 899 -2.1600638519919584 +230 899 -1.1024210976094855 +239 899 2.4176581248431606 +257 899 -.5744481873560808 +263 899 .18300839226927923 +268 899 -.20884106528990387 +278 899 -.13410308520398917 +279 899 -.43310141141349656 +329 899 2.1599558006698563 +350 899 -.945022610334027 +355 899 -.8977205656782791 +368 899 -.625797117983185 +371 899 -.6065698456711607 +374 899 -1.1914200251842633 +397 899 -.6182217938151661 +412 899 1.4420985618749318 +430 899 -.28168619206436996 +443 899 -.6407225230235798 +453 899 -.04946688359164423 +454 899 .11932782516251314 +460 899 1.9259602685712904 +470 899 -.31948304682252904 +474 899 .5145713205856335 +481 899 .1333110865245758 +483 899 .7536917771729579 +484 899 -.2630740460965276 +534 899 .32982247637937506 +538 899 1.229924745654353 +539 899 1.4387324841384694 +542 899 -.3671380322276671 +544 899 -1.0796537791600906 +573 899 -1.6655240069641277 +577 899 .20976997857397028 +582 899 .411851564016955 +597 899 .4099021085716671 +616 899 1.9119959881028443 +618 899 .9110124867203016 +639 899 -.1347721365411108 +649 899 -.38251351383470067 +662 899 -.2417333564172952 +704 899 -.16070282093421434 +710 899 1.5451839778083372 +722 899 -1.5129265698091061 +738 899 .12439209513355771 +752 899 .7876303109869461 +760 899 2.311372650587418 +764 899 -.5421262569357344 +769 899 -.0973556473187307 +770 899 2.181816929741303 +783 899 -.43645676520124926 +797 899 -1.8059142528041443 +799 899 .07260319483703284 +806 899 -.222107756574756 +814 899 .5627214643688025 +816 899 2.4213976908150614 +823 899 -1.322683207503398 +852 899 -1.2942517492887222 +868 899 .850807407258667 +890 899 .7097770136350411 +908 899 -1.8157726970502637 +920 899 -1.3076553237337587 +921 899 -.39226587083738973 +927 899 1.9089712093334545 +928 899 .6587454363542123 +950 899 .446761669863251 +956 899 -1.6484959340950622 +957 899 2.023372932795792 +958 899 -3.291245819269124 +962 899 -2.9626503320102775 +965 899 .9576228284652551 +968 899 2.152624885350625 +970 899 -.2172042502001333 +978 899 -.04346865713440584 +981 899 -.5771914815052084 +983 899 2.0508047597414985 +996 899 1.243158532412493 +4 900 .3490507832842962 +6 900 -.40892703471791425 +9 900 -2.099720574311701 +28 900 1.0204334368267027 +31 900 .672710987751154 +38 900 -.5190703065097663 +62 900 -.08950732206263137 +68 900 .06579409235748847 +69 900 .22873305922110404 +82 900 1.5312331377959092 +83 900 .9326347223850204 +86 900 -1.7997083959741174 +94 900 1.4882150588322054 +104 900 -1.369687777946286 +120 900 .5736723406792382 +129 900 -.15087888771401214 +161 900 -.11997924106973093 +174 900 -.6545529170111651 +176 900 .08696267476698807 +182 900 -.7171234936953867 +192 900 -1.083594163885194 +196 900 -.10723752459702589 +218 900 -.9215374230350659 +226 900 -.6539750517393269 +228 900 -.5305518326483298 +231 900 2.0176798178330517 +238 900 -1.9405992878894414 +253 900 -1.0387872023774822 +263 900 1.27822942479989 +311 900 .92103619828812 +322 900 -1.3719833061223023 +323 900 .8879208134182811 +330 900 -.28881244503802084 +337 900 .14032600827905847 +348 900 -.10375287850059463 +352 900 -.4215734370232419 +359 900 -1.5273502615348757 +362 900 -.754326863722449 +370 900 1.2178184873987428 +379 900 -.13651431016325205 +386 900 -2.2236816000669575 +388 900 -.06366780674275668 +400 900 .8445540051550091 +416 900 -.21544069131135532 +427 900 -1.9083466908693865 +429 900 -1.108480050687724 +434 900 -1.1890528010644525 +437 900 -.08970039525571939 +471 900 .01592019914534143 +475 900 -1.3076914231734895 +476 900 2.0048201372405705 +484 900 1.2672908799264562 +488 900 .5087495263291955 +493 900 -.05724123877126597 +521 900 .08433001963074037 +529 900 .8454771711204272 +534 900 .4051623264908404 +539 900 -.9545550294481029 +544 900 -.6887776514344718 +559 900 -1.665957451896833 +562 900 .010678833895400442 +565 900 -.3254391478497368 +591 900 1.0210681127604522 +597 900 -.22160734105492244 +606 900 .6044089132045476 +611 900 1.0181727110452148 +625 900 1.1831399521527883 +628 900 1.024916220849297 +629 900 -.411701498011388 +648 900 -.035017433631088585 +649 900 .2393797821400766 +672 900 1.768596508628037 +677 900 -1.3370696228024084 +685 900 1.3219765931380576 +692 900 -1.779908995178804 +709 900 .31912533785339275 +723 900 .9363955778207922 +728 900 -1.598945007436807 +744 900 .5269973626832678 +752 900 .8297481806599724 +753 900 .3346309598035264 +754 900 -.6481744053144648 +756 900 1.6261367388994508 +772 900 -.9602564051288751 +789 900 .34007918344811927 +792 900 .7111672897576444 +800 900 -2.4427523938760265 +808 900 1.1467392809106471 +810 900 -.7254114477757087 +822 900 .03890538877949594 +835 900 -1.211287906276438 +841 900 -1.7380556042903252 +843 900 -.6872155247206095 +847 900 -2.111966337606959 +865 900 .8805072900263695 +866 900 2.277494079983302 +867 900 -1.758082745393489 +897 900 .17400398915326531 +906 900 -.8325891727191514 +909 900 -.8727429137399684 +911 900 -1.4081798049017078 +916 900 -.4908082821635906 +917 900 .8890980048882072 +936 900 2.2352284372655715 +943 900 -.5907965718514654 +956 900 .12831784374813812 +960 900 -1.1703690563511209 +985 900 1.0528852732420058 +994 900 -.3819584369388155 +995 900 1.8137075044766933 +8 901 -.07060384460954076 +32 901 -.7472805586504381 +43 901 .06078678311056945 +49 901 -1.3219535077203293 +71 901 .788650014882685 +104 901 -.8922068869983644 +109 901 -1.8101710987943762 +123 901 .21261100612695077 +136 901 -.14058408760281607 +140 901 1.3301796741542842 +141 901 -.25816810756356223 +149 901 -.2127247653947141 +150 901 -.6313767441125528 +157 901 .6436070940298722 +159 901 .08533635472557367 +162 901 .6540743758593828 +166 901 -.5942225599060106 +169 901 -.8549499192573492 +174 901 -.3370408874562325 +179 901 -.13866090740669973 +188 901 -1.7698238771827106 +204 901 -.7101066001885704 +213 901 -.24008182266303402 +216 901 .5184492988644805 +232 901 -.5625535302988945 +235 901 .6674329282146382 +256 901 -.805303273903118 +261 901 1.7347371403173222 +275 901 -.44445889060588906 +301 901 -1.7937398005634095 +309 901 1.1376078950867443 +326 901 -.7312529236848665 +338 901 -.34172643231805844 +340 901 .4290307471877912 +341 901 -.0026873234643121635 +351 901 1.0558287332172538 +369 901 1.7152217074710792 +371 901 .9355027861218417 +388 901 .4393211639009478 +398 901 .1258909915249866 +401 901 -.23168743333910619 +417 901 -1.228711190685692 +418 901 .8861103901324539 +429 901 -.33970509142916455 +432 901 .6729484449859229 +446 901 .404325643993244 +477 901 1.3912360147719816 +483 901 .5449657697276137 +486 901 -.45855959777691924 +491 901 .05043688845441402 +494 901 .4330459690974518 +504 901 -1.4040083079061283 +516 901 -.7173490009426003 +521 901 .39413689576109606 +534 901 -.24631873274715507 +537 901 -.41092883852895473 +538 901 .22893714817297003 +543 901 -.2732007525622854 +547 901 .201781542871716 +548 901 -.09684257942609086 +562 901 -.783417259650685 +570 901 .7289073328470634 +574 901 -.24555822025294918 +584 901 .2558242800698052 +588 901 -.17721604073092956 +593 901 -.4958920527541515 +607 901 -.3876135135145857 +644 901 .7202453517834515 +651 901 .7501732706274533 +656 901 -.5352576637965235 +662 901 .06791793511257743 +673 901 .2738743858197021 +718 901 1.4816864100419505 +736 901 -.32165613196887854 +757 901 -.5749085099103757 +760 901 -.16970565972183008 +775 901 -.09861981949542803 +778 901 -.23695007598829188 +799 901 -1.3333474975934643 +812 901 -.1050931789626821 +822 901 -.9454724628356471 +838 901 -.9574201091013531 +843 901 -1.167084889341388 +857 901 .4019622810485886 +871 901 -1.6015990460569007 +877 901 -1.9694552054968988 +878 901 -.20479371208416902 +903 901 -.6832794704068128 +915 901 -.8556120088912231 +928 901 -.6673871406484083 +929 901 .07089269493296493 +940 901 .5110116282663881 +941 901 1.0238778701745024 +942 901 -.6055141465453111 +951 901 .2287841074541893 +967 901 .3366044202598676 +968 901 .09151412819932919 +975 901 -.45911338717640404 +978 901 -.7633344399339952 +980 901 -1.2386161002547282 +987 901 -1.6859770986354194 +1000 901 -1.106840444118932 +3 902 1.2992179852757377 +13 902 -.20087453650357953 +21 902 -.8318837918918568 +25 902 -.6935355396932644 +29 902 -1.1625092324466444 +33 902 -1.8706464786931893 +37 902 .8983542908797195 +42 902 .2066718084608592 +51 902 -.3102311444912078 +89 902 .4311995889136176 +93 902 .27190921983810606 +99 902 2.628518342536055 +101 902 -.7053239883704687 +104 902 -.7574223629502094 +112 902 .580868213846723 +126 902 -.46636867972289137 +134 902 .19633526574838533 +140 902 1.4781241856890912 +146 902 .6609599442685342 +168 902 -1.1892135047256809 +170 902 -.3062031707000407 +176 902 .10522659006514105 +181 902 -.1971636036972388 +200 902 .3575508317014807 +213 902 -.09858926267223965 +219 902 .2822145161484404 +233 902 -.8226263122898471 +249 902 -1.9302177035376655 +312 902 -2.71084180888453 +316 902 -1.38522741035176 +319 902 .09514270081810135 +328 902 -.48839401049841663 +333 902 1.260363890113851 +335 902 1.2492970715960512 +346 902 .49624574482754075 +355 902 .08384472384768021 +358 902 .14255355506651363 +375 902 -.6336125826136914 +380 902 -.29823122661444246 +387 902 .17205190493016564 +393 902 -.4132619263872389 +397 902 -.24389491868446023 +406 902 -.32079493912661244 +419 902 -.08841309897777158 +439 902 1.432505637426296 +446 902 -.08076839748994617 +451 902 -.8358306825618996 +454 902 -.09457561062248963 +462 902 .08923632641309308 +469 902 .8382292204738773 +477 902 -.2772159218129808 +506 902 .1972544146675002 +520 902 -1.0857410949916588 +522 902 .29413965885154253 +525 902 -2.222076008130805 +529 902 -.7606589004508097 +542 902 -1.5262990769026543 +549 902 .38199669382382806 +553 902 -.2689732730072156 +589 902 -1.3221822352589796 +619 902 1.1085752257779584 +621 902 1.0726313235756588 +648 902 -.7856429889003899 +649 902 -.3645857560094941 +657 902 1.0550598534849376 +672 902 -.6458555787191156 +677 902 -2.0232061692826036 +683 902 -.23082695490855332 +700 902 -.3630708779529818 +720 902 .38151822627565685 +740 902 -.7758396507613659 +787 902 .6598388662567042 +790 902 1.1636028305806951 +795 902 1.0520836698974272 +806 902 -.625681431013013 +827 902 -1.5433826660205836 +829 902 -.22246457075446574 +839 902 .1610372678908025 +852 902 -2.391290039491831 +865 902 .5575319824225625 +867 902 -.7660726878249513 +871 902 -1.5166920962766688 +873 902 1.1487290706226634 +877 902 -1.3666294421709135 +891 902 -.0433023812289355 +897 902 .7600327712033073 +923 902 .328173774458292 +949 902 1.1491434572142218 +950 902 1.1856137966562992 +957 902 -.29323491436274257 +959 902 -1.4321816981812914 +973 902 -2.353802828098656 +987 902 -1.265598203370845 +993 902 -1.8151764732873927 +1 903 -.8022092549112767 +9 903 -.07884047454439108 +15 903 -.9314127713625086 +22 903 -.1215475554323747 +30 903 -1.3691327725145601 +38 903 -1.6536480948578323 +40 903 -1.3157905866426274 +69 903 .42138568534530596 +76 903 -.9613595429124588 +86 903 -2.0082355861782344 +94 903 .8058411442798736 +104 903 1.6232600984758359 +115 903 -2.125239285364215 +119 903 -1.5982133723320062 +141 903 .5638995866221679 +145 903 -1.086922680543242 +166 903 -1.5261538490883422 +169 903 -.7923169756455386 +175 903 -.7146547432509645 +182 903 -1.5661311823351796 +185 903 1.3910809389355834 +204 903 -.15556427321642938 +224 903 .11978950666842678 +234 903 -1.7242578169355907 +254 903 .3511210180146564 +257 903 1.8717362654719827 +262 903 .503629858012943 +278 903 .026742828973852474 +279 903 -.1305062966010037 +284 903 1.3473288229990423 +285 903 .5683873922382148 +291 903 1.691724953269254 +307 903 -.5105384814632994 +325 903 -.060166327872566525 +340 903 -.15509385340912685 +346 903 -.5255510491506615 +356 903 -.03316359816663772 +359 903 -1.2009988714157442 +377 903 1.5006244784051763 +432 903 -1.5339478597239515 +439 903 -.7781059307697398 +453 903 -.4910866476244116 +454 903 1.0915637094766875 +455 903 .49325083573116346 +479 903 -.6972539078938985 +481 903 1.2540183334356978 +483 903 -.6043055730438697 +485 903 -.1638286547140707 +510 903 .1034228792730936 +516 903 1.5775930108038954 +522 903 .3807612493051332 +529 903 -.10058577307281305 +562 903 -.6209608488372719 +580 903 -1.3366628353051344 +585 903 -2.444040790135296 +600 903 -1.6393123657454276 +611 903 .8809214647786376 +615 903 .39756465325865553 +628 903 .18495849275598278 +642 903 -1.1649702983363255 +646 903 .384834698765037 +650 903 .6018537362636445 +654 903 1.2366980212772882 +660 903 .5791575940323649 +666 903 .6545076166984268 +670 903 .8956853528804269 +693 903 -.16943702169405023 +702 903 -.09302019999920096 +706 903 -1.5207158513467025 +707 903 -.12051982440782254 +717 903 -2.820946195627578 +721 903 .6032156026296726 +735 903 .09699962119044889 +737 903 .12868475173659794 +744 903 -.42168726405582957 +755 903 1.0890126313439719 +762 903 -.9204548225714255 +779 903 2.141228686773302 +791 903 -.3716872358512483 +821 903 -.8396568543512437 +833 903 .12942608215343077 +840 903 .3042424413665716 +855 903 -1.112253033079375 +864 903 1.2015063685957557 +875 903 .10035917931297528 +877 903 1.1327193676816996 +879 903 -1.7034245725899764 +882 903 1.7870175909518038 +901 903 1.2878633639514856 +914 903 .3700181579732795 +931 903 .4537883727690847 +935 903 -.008139211768160431 +952 903 .19295973812356257 +953 903 -.1842287730669387 +964 903 -.38389677920691706 +1 904 1.1745451371887765 +13 904 -.44573382750614543 +20 904 -.4489482649124164 +21 904 -.12296529410003285 +38 904 -.6728317266868291 +45 904 -1.6386355425584072 +46 904 .6815594843163352 +64 904 -.000283308210060184 +68 904 .8381207960595645 +76 904 .403160359642969 +80 904 1.1307580377446125 +96 904 -.5821664265650099 +98 904 .9300041335403064 +99 904 1.3958137655714322 +120 904 -.766617189232017 +132 904 .26704490313356144 +133 904 1.2213365266213085 +150 904 -.2682020707492512 +157 904 1.2878834330823887 +174 904 1.856992899764569 +175 904 -1.8914028882985687 +178 904 -.4597567316178425 +185 904 -.8385744391738574 +199 904 .7711247956996068 +206 904 .6019357690589626 +208 904 .3401056791201146 +216 904 -.05095799447745328 +235 904 .39744527416453146 +245 904 .2954568476137817 +250 904 -.3696634837132006 +254 904 -.45577405284706285 +255 904 -1.2096759988744252 +257 904 .02154620804811813 +259 904 -.4859539101436577 +271 904 .8952772040765166 +279 904 -.946202173647464 +293 904 -.298480005729959 +311 904 .9081719745681468 +314 904 .7281761846056083 +315 904 -.29018849327901886 +316 904 -1.1962884541911456 +321 904 .3969584225146695 +324 904 .70372779010341 +330 904 -.16407923894375676 +381 904 -.9369953461257563 +395 904 -1.5929219673853505 +411 904 -1.6550036402680601 +433 904 -1.82648495157996 +448 904 -.11415177423946696 +486 904 -.4010893237687221 +488 904 -1.4110951212588017 +506 904 1.4058685105953654 +518 904 -.8132588932396436 +523 904 -.0633234048931918 +527 904 -.13863495341365697 +536 904 -.9795324113825087 +548 904 .41812310466084435 +562 904 1.3676722702798711 +570 904 -1.2786774940742338 +572 904 -.8861985979715249 +577 904 -.6232277597221348 +581 904 -2.071990916949869 +583 904 -.11847325836533903 +588 904 .7347737098302194 +599 904 1.6980003693378178 +601 904 1.2680678490133153 +605 904 1.154143935688183 +606 904 -1.1795249709107267 +620 904 -1.0309007176439229 +648 904 -1.662557554698349 +655 904 .5200336753596633 +661 904 -1.4713268254687544 +668 904 -.6651670452386336 +678 904 -.33762981332756853 +679 904 -3.2373397507171937 +683 904 .1510924783284891 +690 904 -.3554809899915356 +692 904 .32814625895731764 +693 904 .23527386270348064 +724 904 .2258590309702289 +734 904 -.15469901056139243 +741 904 .9235288944286937 +742 904 1.8521021862671212 +753 904 .9934275030420616 +765 904 1.3087033954567817 +766 904 -1.6576224092469438 +778 904 -.054600486255717604 +784 904 -.6872548292742798 +812 904 .6918422900607868 +815 904 -2.7901901083975456 +826 904 .34133720182440597 +838 904 -1.4386169627876604 +840 904 .8900127172892895 +908 904 -1.1876696176924637 +921 904 -.8972533847374489 +934 904 -1.303239434720318 +937 904 -.46830102717954925 +939 904 .40441705972777897 +953 904 1.7264132133272336 +963 904 .8261934044383408 +967 904 .18830772949339447 +976 904 -1.2222385925588897 +981 904 .42190636786638996 +983 904 1.7280660942723907 +985 904 -1.5330362247618314 +996 904 -.4206638151048448 +20 905 -1.1237855173214908 +22 905 .5230372216736974 +27 905 2.2665218514908174 +35 905 -1.1612139033793736 +37 905 -1.2209084966511397 +40 905 -.25790991273825314 +45 905 -.7380891383156727 +54 905 -2.147305155232051 +59 905 .45380085257055425 +74 905 -2.101083487605766 +85 905 2.0417344444289633 +110 905 -1.4676612521104304 +119 905 -.42889539762879697 +135 905 .9110789447831983 +163 905 -.9078494906807388 +180 905 -.8758277956102622 +187 905 1.8458016775199544 +208 905 1.2849613089437721 +212 905 -.5951202237922051 +214 905 1.338448821077871 +222 905 .27791356147147844 +239 905 -1.6010675297516457 +252 905 .29721021030290795 +253 905 -.2312223427903919 +259 905 -1.7084842172347974 +286 905 -1.3739706314735125 +305 905 .004317244584350179 +311 905 1.0238150915804358 +312 905 -.30921692017866964 +316 905 1.0469189591495172 +330 905 -.8398740033188039 +349 905 4.171817199746444 +383 905 .782765036622019 +384 905 .03463887254717621 +393 905 .46545772855459766 +394 905 -1.1010647516756205 +398 905 .4270560198337947 +407 905 .10275751913230247 +415 905 -.825194228280543 +435 905 .6306055094635651 +436 905 1.0548805281795652 +437 905 .1972372923394324 +440 905 .9585827724257943 +450 905 -2.244122594104065 +482 905 -.7950220542304028 +487 905 -.4236073289445623 +501 905 -.9760139423262433 +503 905 .15109546027689152 +525 905 -1.3810717428538308 +534 905 .441700756170169 +562 905 1.7318503419895748 +572 905 .03167588670579269 +574 905 -.5199133489629773 +600 905 .25737824864153036 +601 905 1.5242910006175339 +626 905 .9640393149665115 +643 905 -1.1814196665081764 +652 905 -1.4280848486637794 +656 905 -.04831080935595259 +658 905 .5954461947696679 +668 905 -.24004187868976318 +678 905 -1.7686905965426207 +680 905 -.6253518269661369 +692 905 1.9157965411404143 +699 905 1.5340151014919443 +730 905 .3308831129237888 +733 905 -.8264591857242863 +740 905 .23573894856143832 +752 905 .4382517274815245 +770 905 -1.561588984596043 +808 905 .49637898694955507 +822 905 2.063589001848136 +825 905 -.8686816279827271 +828 905 -.30695142698632527 +833 905 .9925806647085409 +837 905 1.8595433093239968 +842 905 .43427289733694796 +845 905 -.9337345248084985 +859 905 -.10257772707569948 +877 905 .234539405236529 +902 905 .539522352515037 +916 905 -.3671215760409669 +918 905 -2.6898808954260445 +931 905 .9894370472143407 +932 905 1.7263015309079215 +933 905 -3.0935339837673284 +939 905 .44686017242996995 +947 905 -.45578016448040015 +950 905 .5062436537187815 +962 905 -2.277884349858732 +963 905 -1.8807418866292547 +976 905 1.7971300854796353 +13 906 -.5877745389682663 +31 906 .11185524800698031 +37 906 .1186045047414018 +51 906 -.045913047746342514 +70 906 .2228533241303438 +107 906 .5113020409518356 +111 906 -1.0010329731676464 +115 906 .916024979878359 +117 906 -.6942684812211666 +119 906 2.3220611543848815 +120 906 1.684392827472564 +135 906 -.662048396190059 +143 906 -.40787747906863764 +173 906 -.2405077713864302 +177 906 -.1311287438743563 +187 906 -1.5062314599360211 +188 906 1.6034033708383983 +206 906 1.952221457240072 +217 906 2.5606600980847096 +219 906 .5451843294330346 +236 906 .34520085054092575 +237 906 .3398685762931535 +244 906 -.1425964878938627 +261 906 -.24867077102039536 +271 906 .4133041663198953 +276 906 -1.0641268087995246 +279 906 .9125699195750387 +306 906 -.8529740644334515 +314 906 .8955294100064607 +322 906 -1.0316925864401523 +332 906 -1.1789429928563038 +333 906 .5492239734312959 +338 906 -.44782083119409344 +339 906 1.5375558965579486 +350 906 .07964891882981483 +352 906 -1.1399489916688044 +358 906 2.8810703666050053 +361 906 -1.7135761661149598 +368 906 -1.5755284763356712 +373 906 .14807569495332118 +423 906 .200595763970218 +424 906 -.1457604096933609 +439 906 -.7964440147599825 +448 906 -.02112708321294819 +451 906 .8751804185509978 +461 906 -.30826168084372274 +463 906 -1.9062475159563443 +464 906 1.511069066483036 +473 906 1.0057872148197107 +476 906 1.0966594096317996 +491 906 -.6667879884767066 +499 906 .7179617937928642 +508 906 -.34853405207067867 +518 906 .6364700806239744 +526 906 -.8904439527253153 +535 906 -.582005125124246 +536 906 1.8936493099408942 +548 906 .8900225294249677 +562 906 -1.377722320153115 +564 906 .6272758234274255 +571 906 .8347726592334326 +574 906 1.1057025143348442 +581 906 -.48472526252877035 +594 906 .21437057608276205 +597 906 -1.1169507915753552 +599 906 .9071604729872631 +600 906 -.09025564645799979 +603 906 2.210912789169331 +609 906 -1.6996561590454458 +627 906 .5073875603090741 +634 906 2.8137926824576103 +649 906 .9235157741051778 +650 906 .657890048222247 +657 906 .6061986187133926 +666 906 -.6325573510532438 +670 906 -.696078050534091 +683 906 -.3840144277858693 +689 906 .4991084860442373 +690 906 2.7142337580257054 +696 906 -.13023276502490325 +710 906 .09879818399859304 +717 906 .28129691279975866 +719 906 -.678525912323558 +726 906 -.36144483824523466 +751 906 -.01190769071341232 +776 906 -1.1681872602718109 +802 906 1.6479474857986416 +811 906 .6175073677151026 +816 906 .3687164032178022 +825 906 2.171169342184488 +838 906 .9861269193205932 +840 906 -1.3636303894393058 +846 906 1.2346482813014257 +852 906 -.22519047728347727 +862 906 -.07626130411276566 +890 906 1.7914647340843128 +891 906 .1349609259791443 +906 906 -2.1624694498360815 +917 906 -.25385498506261844 +932 906 -2.0129121370273673 +938 906 .7598970624050146 +943 906 -.6756212214390185 +945 906 .30972165373241306 +946 906 .501592184400952 +963 906 1.4722352927444362 +976 906 .833451654675222 +991 906 .31255511946889863 +33 907 1.534384358766749 +42 907 .011395630354875397 +68 907 1.5399339598753408 +88 907 1.3999309900319723 +89 907 .9628660354637767 +101 907 2.505214336765009 +102 907 .31546388706545897 +112 907 -2.054631560606913 +138 907 -1.7832513928101925 +141 907 -1.1101305857291115 +151 907 -.8297647569826148 +161 907 -1.167517402670781 +187 907 -1.8982158419163466 +189 907 .8159506037735303 +242 907 1.919025201972527 +243 907 .34763562265899695 +268 907 1.771322949354724 +296 907 .456934459348771 +298 907 -.09769379754381685 +313 907 -.9025365903655759 +314 907 .4256329393052334 +327 907 -.6652273702480682 +338 907 -1.161313897551442 +345 907 -.27184132611282197 +367 907 -1.0554248472595644 +381 907 -.6845447719465249 +402 907 -1.0113048439353387 +403 907 .49830348665455193 +407 907 1.057465356857654 +411 907 1.0622411649241514 +433 907 1.2475895968353292 +435 907 .04197358063101175 +449 907 -.22099857511082682 +451 907 .010182263750269205 +456 907 .21667787398100607 +458 907 -.7406103579095248 +463 907 -1.4325626812164738 +491 907 -.20015030261357608 +492 907 1.6778218244711467 +493 907 -1.2855838847421388 +522 907 -1.2981080061851773 +524 907 -.8531661698153327 +526 907 .21421402923591906 +545 907 .2087721675851213 +550 907 .6155620012870106 +554 907 .07135387193487376 +573 907 -1.3666495625022692 +574 907 .4212998077555894 +609 907 .58841091716351 +614 907 -.18345381341396502 +623 907 -.9523513146781342 +639 907 .3954424333786088 +658 907 -.0386497989971903 +691 907 -.33006257936613476 +706 907 .3902389788824274 +721 907 -1.4539656448427967 +722 907 .5958206947139915 +726 907 .7291919110893578 +729 907 -.04242523099832089 +735 907 1.1957005924172908 +736 907 -.399507064864457 +738 907 .3453783206740939 +741 907 2.357209875626765 +744 907 .7394161529521978 +752 907 -.20219595273884194 +767 907 -.5104652463246779 +790 907 -1.3068579033469143 +791 907 -.26852244461694913 +827 907 1.6244515101642094 +830 907 .10047751030660551 +832 907 -.5424595525630425 +833 907 .7444068060678353 +835 907 .02091213564188457 +866 907 .28212622004219545 +876 907 .99798218998963 +882 907 .5814443963806263 +887 907 .07295524565197077 +888 907 -.07154033491097692 +891 907 -.7335946200532162 +896 907 2.6578597483211444 +922 907 -1.6184502327375143 +925 907 -1.0895439072903752 +933 907 .3319821649073764 +934 907 .3067175394042227 +945 907 -.2066985523630457 +946 907 -1.125437981909323 +949 907 .1817035180816082 +5 908 -.05635573708708971 +11 908 .07553022790103907 +42 908 1.31552718498934 +74 908 -.17098729173206598 +107 908 .5090318717776076 +129 908 2.459590010649069 +145 908 -.31493611111839154 +162 908 -.23134883401538117 +163 908 .07954147311087284 +164 908 -1.194800418531066 +175 908 -.756939301824332 +180 908 -.7304150768941701 +221 908 -1.4911748041816362 +228 908 -.5609784231373037 +238 908 .8498725170730443 +283 908 1.0012288942673706 +291 908 -.7759690358093668 +301 908 -.7927457325230194 +312 908 -1.5038113268918614 +316 908 -.727450899078628 +339 908 .24363071166448597 +351 908 .4562935827420825 +364 908 .9554999302015541 +374 908 .7882759876102441 +375 908 -.7377166345174767 +396 908 -.307590017740626 +404 908 -.7446296346891593 +419 908 -.3227340951532995 +426 908 .36101636027267114 +429 908 .31297448228179303 +431 908 1.4242054518958176 +438 908 -.1600503023685444 +441 908 -.11285927543394741 +472 908 1.3488378477535319 +490 908 .988609468958474 +492 908 .8729502760278005 +496 908 .13134273155555573 +504 908 .12128966260942965 +519 908 2.3293719101693555 +523 908 .6386860877653006 +570 908 .31713960870736113 +582 908 -.2447968380565451 +584 908 -.7053592998102418 +593 908 .19260439749357994 +595 908 1.6792134861450574 +600 908 -.1849729987308348 +609 908 -1.5432660809606016 +611 908 -.1584010669854766 +630 908 -1.668440098981726 +637 908 -.6324418110793418 +652 908 1.2427356495217583 +660 908 -.6232428899642892 +666 908 -1.4330403290217675 +667 908 .7647324263886691 +671 908 -.726905789984273 +684 908 .571687849852207 +701 908 1.1625084732208224 +713 908 .1656179697330599 +714 908 .7652116767795033 +717 908 1.0211568252807908 +736 908 .37220249501942665 +742 908 .24905927409713924 +755 908 -.17460763985015498 +756 908 .8500204403866684 +761 908 .4641454515328857 +770 908 2.142060765462731 +781 908 -1.2750946564963954 +783 908 -.012459184806020276 +791 908 -.37553056275270963 +802 908 -.01078496880194485 +823 908 .8877316872769124 +828 908 -1.054995180404265 +831 908 .6118465821798708 +832 908 -.93741697065965 +835 908 -1.2505525023032948 +844 908 2.2547851701503205 +856 908 .9457382064338805 +873 908 .21594387509934337 +886 908 -.23559623687531622 +887 908 .7274994706279431 +888 908 -.517334169270157 +936 908 -.13070446538609265 +953 908 .45043295109435944 +965 908 .267908292150847 +971 908 1.3670654621416458 +978 908 -.5164165006075179 +997 908 -.6090970719464006 +13 909 .3826766572693208 +16 909 -.24839073269817294 +20 909 -.889100429257443 +38 909 -1.1918270916070794 +92 909 -.36166682990858257 +93 909 -1.434424854852522 +97 909 -.37431310803559764 +144 909 1.5083496742734466 +152 909 -1.394839474666729 +180 909 -.5813089387495917 +202 909 1.7718789674829012 +208 909 -.6780456487089929 +212 909 -.30152134259002766 +215 909 -.22387959299610866 +227 909 .29961599774977815 +247 909 -.6988235084840272 +257 909 1.0137127551755505 +280 909 -.6592867525688817 +288 909 .02131743176311475 +299 909 1.0179925957653484 +306 909 1.6004958671499865 +307 909 .5403941576658517 +311 909 1.7501233643706362 +322 909 -1.3020964456649702 +331 909 .33957415584448797 +333 909 1.2313844488761059 +338 909 .1397156406163856 +346 909 .811890983764028 +349 909 1.0253522817952432 +350 909 -1.3669681022905975 +360 909 -2.6592509582681187 +367 909 -.731294806494388 +385 909 1.2375828279363914 +392 909 -.20227521352852001 +406 909 .17266416826305309 +408 909 -1.5686317532756513 +411 909 3.3674901040797662 +420 909 -.21079286018476723 +433 909 .03312078313402808 +446 909 -2.955513323986496 +447 909 -.4633792296905244 +457 909 -.6689091394892688 +467 909 1.7054935225102548 +473 909 -2.5400012599680175 +488 909 -1.8072347944179725 +492 909 -.7316504453771425 +503 909 1.4234761715635134 +508 909 1.6294978035602137 +520 909 -.9201650490020802 +521 909 .5535528619953936 +542 909 -1.4027862242489553 +566 909 -.6186809410104752 +573 909 -1.0255819130170853 +578 909 1.1088746053002678 +609 909 3.760673922799091 +615 909 1.178151244141178 +617 909 1.4909713034708658 +618 909 2.94572599597127 +627 909 .11777505774009334 +633 909 -.7358183190566617 +636 909 -2.5046332769259685 +644 909 .9373806001679802 +646 909 1.625483707602487 +653 909 -1.581712713900339 +669 909 -1.9646989571016151 +674 909 -.4110085278374639 +699 909 1.9938332568341135 +712 909 1.9461487381914555 +714 909 .47652329001395266 +721 909 .578548637043829 +731 909 -1.5789486196194662 +733 909 .3653737746749268 +736 909 -1.7177051226958069 +737 909 -.3838193682505957 +763 909 .5552854532495188 +766 909 .056544694566553894 +789 909 3.609500716635459 +793 909 .7977462562917602 +795 909 .7062803434449498 +803 909 .6041627877269755 +821 909 .12455495285031262 +823 909 -3.4959388630701556 +831 909 .957627060700966 +833 909 -.3950558588763158 +861 909 -3.710474598427156 +863 909 .5709615186569895 +865 909 -.4084848544518041 +869 909 3.5543308311875585 +878 909 -1.6708223471375299 +879 909 -.4017326511036141 +888 909 .671122403840852 +889 909 -1.156541635056344 +894 909 1.50019669998978 +895 909 -1.67974019311326 +902 909 -1.6657901938028252 +909 909 -.1913357282685042 +914 909 1.509062633696194 +922 909 -1.0157044658167864 +926 909 -1.4526496260248827 +927 909 .7266588798721684 +928 909 -1.6622031412379403 +929 909 -3.0791591388652177 +950 909 -1.657445895160238 +953 909 1.8631177718234866 +962 909 -1.3310274681878445 +968 909 1.5942045328825196 +982 909 -.9655399383663006 +993 909 -.6283113304559672 +999 909 -.02223362323774522 +11 910 .6036249338046957 +14 910 .6591812170569259 +27 910 -.5805798638554368 +38 910 .43506068145089904 +50 910 -.7401948394821349 +52 910 -.4033024677788061 +58 910 -.2882268200060313 +84 910 -.4880090312658643 +86 910 .026177100571879254 +89 910 -.5827043572160169 +94 910 .17352266663766014 +96 910 -.2828306753919202 +127 910 .8558237788466153 +131 910 -.1601705028481341 +136 910 -.20525434533283637 +149 910 .3223325708860896 +151 910 -.10862487940787979 +161 910 .6851841512779046 +168 910 .4330634997301504 +176 910 .02605059911876527 +187 910 -.9532515531115465 +190 910 -.3412512119059994 +206 910 .36138550922402884 +210 910 .8614346373907602 +228 910 -.2294705584589816 +236 910 -.36899838574925264 +246 910 -.4617502272980305 +247 910 .8293893577734274 +249 910 -.3347464504781229 +255 910 -.34400046465077 +269 910 -.7764085523623961 +277 910 .6170560781107878 +288 910 -.4368695372773397 +294 910 .14909744239591133 +303 910 -1.0889211620772468 +305 910 .22841525797231746 +310 910 .26201526692291655 +323 910 -.32895615875893647 +332 910 -.4213109315731482 +351 910 .31023719329692734 +352 910 -.11335652585063227 +354 910 1.198174924078837 +360 910 .18082726753482653 +376 910 .10458817671800333 +400 910 .5185925943104785 +409 910 .3113292059117702 +412 910 .16657627749905535 +424 910 -.9392069176301069 +430 910 -.9119757107897202 +437 910 -.2563907583199121 +439 910 -.42743712582761595 +455 910 1.3003324984818523 +459 910 .1585027274910985 +464 910 1.08429301732413 +479 910 .25423225466067984 +482 910 -.38330701690022906 +485 910 .3215507498338003 +516 910 -1.2960984571415806 +528 910 -.7402305431144831 +538 910 .3406254558196532 +553 910 .16028908716170898 +557 910 -.7518724518661071 +564 910 .36872393442580115 +573 910 .17260121937058945 +586 910 .1862270541234188 +594 910 .11132981751014909 +595 910 .33426648617909266 +623 910 .7559241073484516 +631 910 -.131965987916286 +646 910 .11262330045874513 +659 910 .4088394728647095 +660 910 -.7693214503070904 +674 910 .044653098826136155 +689 910 .2841492033737269 +692 910 .28088441862507935 +694 910 -.4187254214484948 +695 910 .1463414130748571 +730 910 -.8030849219271791 +732 910 1.0679473698603463 +735 910 .6875201978607104 +763 910 -1.1512340859749177 +765 910 .2575763414932521 +778 910 .3181790647489376 +801 910 -.030408648774277555 +805 910 .3738629200503493 +818 910 .48385993501596797 +836 910 .9315484821852138 +851 910 -1.2067325654544439 +855 910 .9449765339021263 +861 910 .17390727512208595 +880 910 .34808425206155913 +910 910 -1.2002383587189442 +917 910 -.48893048889618895 +918 910 1.2953305869982534 +919 910 .4027172470769165 +923 910 -.6376503139212579 +933 910 .06114918180391692 +938 910 .7718676324892628 +952 910 .31758178862363345 +960 910 .15542923080087312 +962 910 -.3087832477623766 +976 910 .4595830983024483 +992 910 -.6485103169586521 +998 910 -.3636262222955689 +22 911 -.11210203481160466 +50 911 -.8473026781724843 +55 911 .12863780773663203 +57 911 .14001915399427423 +65 911 .5635540099312815 +71 911 -1.0444701058353498 +80 911 1.6272399000150974 +90 911 .4661431651491783 +93 911 .2273169292733042 +101 911 -1.1500757108365443 +105 911 .10535301680740085 +108 911 .7238414851151957 +119 911 1.142689182112164 +134 911 -.45551169008719133 +147 911 -1.7138260851695355 +149 911 -.3342201779779276 +152 911 1.4102385937780504 +159 911 -.5342394517349147 +166 911 .34167841118263975 +178 911 .8034375907242967 +184 911 .516484746407497 +186 911 .845361528747641 +188 911 .8479030020166228 +194 911 .6221712072678603 +214 911 -.42099256626671633 +215 911 -.8009126724639543 +228 911 -.04414283036604248 +238 911 -.3229140742973936 +245 911 1.4466120822985238 +281 911 1.5517159190421075 +309 911 -.7764464879427848 +314 911 -.14442757044427348 +316 911 .030684272789009707 +319 911 -.009753228882310339 +338 911 -.3984691621291656 +339 911 .7680216646072913 +344 911 .27945408954419704 +359 911 -.10031477619049295 +373 911 -.6347037270614875 +388 911 .16139663171249535 +393 911 1.0671669684950789 +399 911 -.5289784000065132 +402 911 -.2641497486610064 +410 911 -.17741027356000658 +416 911 .5798285422797782 +420 911 -.289264773351128 +427 911 -1.2594458262377997 +431 911 .2737792397152039 +459 911 .31058483006201437 +460 911 .05815659504035098 +468 911 -.3376223961558886 +475 911 -.26145642119568807 +485 911 -.08182905497491344 +489 911 -1.168091504169751 +496 911 .2359960828734187 +517 911 -.07106303069539746 +518 911 .5520313571100155 +519 911 -.04490809530322909 +520 911 1.0249687339839197 +528 911 -.12770861925632115 +534 911 .18015878733479007 +538 911 .24631269088861937 +551 911 .284936886875408 +552 911 .46237577112332406 +554 911 .13998101205159186 +557 911 .9348101769897565 +559 911 -.5992018165146604 +568 911 .4725459490955021 +584 911 -.7104373030677343 +591 911 .12335044911259893 +593 911 .632883681720421 +597 911 -.9911398115690487 +604 911 .9255012482823782 +627 911 -1.1903908634644909 +649 911 -.06325508091314429 +650 911 -.44562521240002373 +653 911 -.26207031571435335 +654 911 -1.5325385221422314 +668 911 -.526606091757049 +676 911 -.684842096334367 +719 911 .509458790219466 +749 911 .5515277213274683 +750 911 .806971903223417 +761 911 -.6430764892227809 +766 911 -1.0681058699583394 +775 911 .11805721425368135 +777 911 .38203425221449766 +780 911 .10235064287502611 +810 911 .8627074831790036 +815 911 -.4125999909335345 +816 911 .09988979572162782 +852 911 .12029451406018737 +868 911 -1.6249539420133623 +889 911 -1.1133653569675648 +891 911 .40402444303377494 +899 911 .2643183848285076 +904 911 -.7489239671253342 +905 911 .7688652410960554 +929 911 1.2182483408583944 +940 911 -.17212687714553868 +942 911 -.4807667069746511 +954 911 1.2916615221318528 +976 911 -.33164965574083644 +981 911 .6777833241250288 +1000 911 -.41313471695557485 +29 912 -.26856468530805266 +32 912 .18086722059154636 +40 912 -.05633168718280955 +48 912 1.9080329023946283 +68 912 -.40121060830286703 +81 912 .11368607103607961 +82 912 -.27911941906615545 +89 912 .5820856998706745 +90 912 .13426190752491451 +93 912 -.2675341518588057 +99 912 .48329275134792027 +127 912 -.7511464863098946 +134 912 -.0013798236185523782 +135 912 .047792825064252906 +139 912 -.07041912266084514 +146 912 .5276736525384204 +150 912 -.477033224842378 +168 912 -1.3173137191338924 +176 912 .5676469815894729 +186 912 -1.4371662904273457 +244 912 -.7996697754691827 +245 912 -1.3511722222469964 +261 912 1.178022986064448 +275 912 -.9142800605876995 +277 912 -.45150446734441285 +283 912 -.2982233656716823 +289 912 1.301586090745743 +319 912 -1.9924117026338797 +320 912 -.09751627182503869 +323 912 -.024886891762386523 +344 912 -.7176513099044695 +346 912 1.5119868938403918 +348 912 .12118702645898602 +366 912 .16632864820604293 +373 912 -.05317855581823083 +385 912 -1.3365449108535736 +407 912 -2.168369291562659 +434 912 -1.2925285287657569 +442 912 .2823333612663831 +448 912 -.6802170747033984 +453 912 -1.2827381204732986 +461 912 .780805508254536 +464 912 -.018839107926879574 +466 912 -.9582909624657876 +467 912 -.08313125995275475 +474 912 -1.8191297503191863 +475 912 -.4662601032065789 +493 912 1.7820800149950242 +503 912 .10953859892342761 +510 912 .3118287949096803 +521 912 .4667503256672017 +523 912 .9989707472364902 +527 912 -.8065627165920342 +532 912 .4576682996909424 +539 912 .9614909655265691 +546 912 -.252611685024922 +561 912 -1.8207104584707583 +596 912 .9532183640930693 +609 912 -.5497463737066044 +612 912 -.0845772619851681 +623 912 -.7131011042037455 +643 912 .2507557528629204 +652 912 -.09725664647572643 +661 912 .6949929275825611 +668 912 .6701390787604552 +674 912 .2663397116293393 +681 912 .8046069673986758 +691 912 -.9363948224021321 +701 912 -1.8727629677729059 +703 912 1.0204374978462105 +714 912 -1.8144447907918582 +733 912 .7802176447576356 +753 912 -.2747040248269479 +767 912 .635476860695667 +778 912 -.8804718752456426 +790 912 .4292610743102723 +796 912 1.2676984635529722 +805 912 .9897325538019889 +810 912 .21484437538374737 +815 912 -.4226432416542687 +822 912 .6621526373412403 +830 912 -.30008198422735755 +853 912 .9275456215066507 +861 912 -1.302565160901311 +876 912 .04919161374104651 +894 912 1.451594905645128 +903 912 -2.064952375342352 +904 912 .47817220711831726 +905 912 -1.1096739124677901 +920 912 2.3682541426921397 +926 912 -.17288822843668208 +931 912 .226134868753835 +933 912 2.297116340420971 +943 912 1.2665527311454223 +945 912 1.6345144265915117 +953 912 -.7432003804958945 +954 912 -.13904597574464223 +962 912 .6919266608709966 +978 912 -1.0216264016822205 +984 912 .2908384319104874 +11 913 .19805548558603142 +12 913 .11059855828327775 +16 913 -.9919660794510468 +18 913 .6872826928405946 +25 913 .46432210675983465 +34 913 -.6268313465952712 +41 913 -.6045088774588989 +58 913 .042137590883802645 +89 913 .5506033772029141 +96 913 -.6655305640911614 +107 913 -.28029197190044725 +117 913 1.6828124578593544 +120 913 .9324622135095948 +123 913 .14625834368256085 +134 913 -.6375202453167956 +135 913 -.1773413862491869 +151 913 -.016602176680746927 +160 913 1.0946032076347159 +166 913 -1.3767824676979967 +181 913 .518578788871016 +188 913 -.7143186616693374 +212 913 -.2268524936749946 +217 913 .5822495705393864 +231 913 -.4411788766196987 +232 913 1.464969078070449 +235 913 1.0871221236710062 +236 913 .48194266960208 +246 913 .5368455579342318 +255 913 .0860663983858195 +257 913 1.2277378505036616 +259 913 .5533451849101071 +273 913 -.8585946588240226 +285 913 .4243499829962484 +296 913 .5107980037036934 +314 913 -.553162973874706 +322 913 .14249006374197565 +337 913 .677755805934807 +339 913 1.2094168588576766 +340 913 .17280875477058782 +358 913 -.9488788286609864 +378 913 -1.0964992351402136 +383 913 .13446041272492903 +411 913 1.0892208661150307 +426 913 .8997753984048726 +431 913 .49076281423261015 +441 913 -.5042039807786086 +455 913 .7103324164186556 +464 913 .02732077842793272 +467 913 .6196177017030939 +482 913 .6039447679384279 +483 913 -1.1061109761281207 +497 913 1.7151705986617498 +510 913 -1.947907043530609 +531 913 -.6954904471113074 +535 913 .33871027621517175 +550 913 -.27960062561773863 +569 913 -.8515424604133326 +583 913 1.239612073938194 +585 913 .8133960397632282 +595 913 .9314666986961934 +603 913 .06571058380472555 +606 913 .29790224581170366 +620 913 -.5083798632207704 +622 913 -.8313685194601576 +623 913 -.7650654541611706 +628 913 .9194625377722715 +632 913 -.5867505712789784 +639 913 -.6173903011776879 +654 913 -1.0694567218255218 +684 913 -.196056611401504 +688 913 -.7134601742192983 +695 913 -.6623183867228926 +700 913 -.09635084120146692 +701 913 -.6056654360691917 +735 913 -.25100845915165426 +741 913 1.4336150437880957 +768 913 -.510276415442157 +774 913 -.08552554814930584 +780 913 .01331953803292743 +783 913 -.41946910464748216 +788 913 -.38865970528293714 +798 913 .06371185194980412 +799 913 -.5204582030592518 +802 913 .05555290427445431 +806 913 -.5390290986585458 +816 913 -.2958722249742512 +820 913 .5925176207671797 +825 913 .34404506563909565 +830 913 -.07596504476430652 +840 913 -1.2199158438382296 +854 913 -.9746582003514306 +865 913 .794913870489161 +866 913 -.04368815544061258 +869 913 .09330771342729863 +876 913 .9202372289819799 +902 913 .8278941389607901 +906 913 .19857138166730556 +920 913 .44091441744599164 +931 913 -1.3048695464950288 +933 913 .871055776470143 +934 913 .9726099350584055 +955 913 -.2624140482919553 +959 913 .4538081056802321 +966 913 1.1858341666037486 +994 913 -1.1322179211412122 +15 914 -1.2595053852197786 +24 914 -.029690369276814982 +56 914 .5545274046736023 +71 914 -.5109998591106395 +79 914 -1.6330313655154634 +108 914 -1.6216708669168314 +123 914 -.36151871262515517 +124 914 .1780409760123628 +136 914 .7857433006089211 +144 914 -1.1602568553024428 +146 914 .22523207339570428 +149 914 .4184322830863088 +170 914 -.3885633364673158 +178 914 1.0936556052668545 +188 914 -1.4718044704097815 +193 914 -2.4633041917638234 +198 914 -.4996446048293556 +211 914 1.9669724532591415 +217 914 .6138390808856623 +236 914 .28438800558716737 +258 914 -2.1430831641941657 +260 914 -.3652531567317333 +265 914 -.9624433819250906 +293 914 1.3683798287594757 +297 914 .6475935399078304 +306 914 -.8566347040360576 +310 914 -.6215473918765552 +319 914 -.07688268974672535 +321 914 .7178613826398317 +337 914 -.3276612280241268 +342 914 -.3560657810410677 +350 914 -.2894172783835324 +356 914 1.2029979707999057 +358 914 1.039451129508431 +359 914 -1.8884035137297952 +402 914 -1.455096933660926 +409 914 2.328159383190644 +423 914 1.743814572225124 +425 914 .9143595993626301 +427 914 .21828407590646637 +437 914 .6054159608621532 +440 914 -1.8273376244245971 +447 914 1.6663841262852706 +456 914 -1.8324664373402357 +477 914 .9630000248530619 +493 914 -1.6439371873629813 +508 914 .7898913311906407 +540 914 .9288580941934195 +563 914 .3878359916608155 +568 914 -2.248825332954421 +588 914 .5349758250502338 +589 914 -1.4080647087790188 +606 914 -1.88664534596048 +624 914 -.6223342446471876 +631 914 .8822176398804653 +638 914 -.05350027299515788 +670 914 -1.6838288590377959 +671 914 -.7393395098538024 +674 914 1.5463732408232072 +677 914 -1.314046386972305 +688 914 .02918067417565587 +694 914 -.30774147374360317 +707 914 .5580546511396822 +715 914 .6369180647061813 +716 914 -2.1356893718456345 +740 914 -2.325305401481117 +748 914 -2.850172966004875 +761 914 .0013779211768207983 +766 914 1.0745156487217837 +770 914 1.0215377951449585 +784 914 1.338616889817092 +791 914 -1.813235400992577 +799 914 -.31121368129732263 +813 914 -.7913109227100219 +816 914 1.2573094026035228 +828 914 .2363704669384424 +881 914 -.041980906921368605 +886 914 -.5354472329553092 +899 914 -.17727530159429633 +906 914 -.4772110578571327 +909 914 .5060850454135564 +913 914 .9447774493210876 +918 914 .09426954892007364 +936 914 -2.169294858531885 +961 914 1.112039905510717 +962 914 -1.4020194497640455 +978 914 -.21671769096122467 +991 914 -1.1881062847315593 +996 914 .4846983644284239 +21 915 .8821985118519623 +35 915 -.454595020214862 +46 915 -.2015141493826121 +77 915 .34692238786706464 +88 915 .014647427042598096 +90 915 -.49056458826105537 +100 915 .6761308467776577 +128 915 -.24040744542248557 +138 915 -.16024419180523372 +140 915 1.5571149967239213 +155 915 -.4999321796188365 +157 915 -.7912331535751613 +164 915 -.890721706692252 +173 915 .14183863518299095 +189 915 .2643948893831912 +190 915 -.8861028810418753 +209 915 .7929609659722592 +210 915 -.5684392083086305 +218 915 -.5041388657514289 +236 915 -.0346765635372748 +249 915 -.2521832949328723 +262 915 -.170894464046707 +263 915 -.628237380562985 +282 915 .642936014959893 +286 915 -1.4268007634043844 +290 915 .629514223726433 +302 915 .8822606584714673 +316 915 -.5436328464665333 +353 915 .4428015802402384 +355 915 .3691327923647393 +356 915 .5636313094283789 +374 915 -.8899380677738458 +395 915 1.4986897649000557 +396 915 .005422563435880129 +412 915 .33769666275667504 +413 915 -1.956823078687608 +420 915 .3313088157413415 +422 915 .2896270306428337 +442 915 .10580234524273006 +445 915 1.3036305365597187 +476 915 .4910238942756008 +482 915 -.1327279557210893 +487 915 -.5613278342228534 +488 915 -.04985872672500835 +494 915 .5154740764114003 +534 915 .5369271195413915 +569 915 -.35312111409513525 +571 915 1.3070124141941473 +584 915 -.25234432804114393 +597 915 -.08334806470816006 +601 915 -.6731655882984028 +614 915 -.30591281428815426 +627 915 -.16997110667162574 +647 915 .12915355544326307 +661 915 .17939657456839553 +685 915 -1.2448089807459517 +688 915 -.8697934046066653 +692 915 -.5022490858293858 +700 915 -.3584221574169228 +702 915 -.021485401702099574 +709 915 -.15098879833554943 +714 915 .06032954896246292 +729 915 .4811030784049927 +731 915 .554869748381797 +748 915 -.2976254468728205 +750 915 .6449775988787725 +760 915 .6703358211668163 +770 915 1.052346724285731 +773 915 1.219873941922402 +781 915 -.015061308005231089 +789 915 -.998383594453278 +791 915 .40819379722277543 +805 915 1.5307575456214575 +818 915 -.4820173442768812 +833 915 .03491630242932568 +839 915 -.08234026916945324 +845 915 .3982589096597822 +868 915 .6106958946913909 +871 915 .6200454702273119 +873 915 -.2777526825043485 +874 915 .9590252214522117 +876 915 -.1891264113065744 +885 915 -.4883658052038613 +889 915 .8401135329091388 +912 915 .23642060249450453 +915 915 .3506306538825462 +922 915 .19757900068572243 +958 915 -.6418817511548223 +978 915 -.679178326238163 +984 915 .351239056944008 +997 915 .9126096557921382 +1 916 -.3539912185837498 +10 916 .6178748577929501 +15 916 -.24358099236138503 +21 916 .7545469354115403 +23 916 .43135663989634737 +39 916 .027149253426718672 +71 916 -.5338753589278161 +73 916 .11780094862115144 +77 916 .6097282378419516 +99 916 -.07443062267763331 +136 916 -1.814017031613358 +142 916 .4750836060193072 +146 916 1.1898065226895616 +169 916 .03636433884739738 +170 916 -.16945481784168312 +175 916 1.1814034103300783 +181 916 1.3619359098504233 +188 916 -.08455390443962418 +212 916 .09283276549840308 +229 916 -.7807603759046546 +262 916 -1.0323664479515762 +268 916 -.15798692955866483 +296 916 1.0045577562455272 +303 916 -1.0402810070993076 +304 916 -1.261847285434183 +309 916 .971992510835904 +320 916 -.8695037178261827 +321 916 1.2588257083010035 +342 916 1.1118614020294595 +343 916 1.1546514019871612 +374 916 -.4211187438556418 +376 916 -1.0813178425998267 +392 916 -.5520398649303615 +400 916 -.11782957290558793 +421 916 1.071772265357662 +436 916 -.4923333098848831 +453 916 1.1044652307388747 +454 916 -.5554616785736655 +466 916 .8606390842759267 +483 916 .007213605810443086 +485 916 -.1806488228933833 +487 916 .5463026401750294 +494 916 .473836429169079 +512 916 .26508797005643087 +534 916 -.43253763454396443 +550 916 -1.3757180801201416 +557 916 1.0686556305830408 +560 916 -1.6752583685230578 +578 916 -.4124765353177413 +584 916 -.6122615586020449 +587 916 -1.3301122668877228 +602 916 .6973892286896937 +609 916 .2316583193561328 +612 916 -.035868728489022506 +695 916 -.3870676715521598 +698 916 1.128124869374482 +699 916 -.669953390114648 +704 916 -.7472819681260386 +716 916 -.24829454943653037 +737 916 .048219106002654714 +750 916 -.6222866428284596 +754 916 -.8101210050280727 +755 916 .3055261050696962 +756 916 1.5938608328067936 +763 916 .354272629274776 +771 916 .05844237588433322 +772 916 .29494171343833253 +775 916 .40796835154944056 +823 916 .940251720917016 +831 916 .3572944668356841 +868 916 -.14154056994047026 +872 916 .0018339504474234603 +875 916 -.8170901978237624 +883 916 .7744348083633016 +904 916 -.36093454828186455 +905 916 1.3940551559957663 +923 916 .07066601449655899 +926 916 -.7879432977003229 +969 916 1.5685370075313958 +971 916 -.22842588970996586 +979 916 -1.1481750656821452 +984 916 -.022201449357748093 +991 916 .3624197682333146 +2 917 -1.2868908240555603 +3 917 .615664823133147 +5 917 .054408602843400516 +8 917 -1.4528303052172404 +13 917 -.2618599356243126 +24 917 1.3041316251233612 +41 917 -2.168353327558873 +51 917 .9632960538436002 +54 917 .2453283367053066 +60 917 1.488711986885433 +73 917 .9310943501012621 +75 917 .7280671136854722 +76 917 -.11730312389675097 +83 917 -.7758596112175865 +91 917 -.08347427777650468 +92 917 -.12531487528157226 +93 917 .8773044305736358 +103 917 -1.4262541278208147 +115 917 .7806281394828686 +119 917 .38110947738459544 +124 917 .5469042590480921 +126 917 .5590900162143355 +127 917 .6946214682309483 +135 917 -.045500609708131655 +138 917 1.6871934317818567 +152 917 .5931030347871766 +156 917 -.8544640409650885 +161 917 1.5136062807707167 +174 917 1.328810773168677 +183 917 -.18708445190438572 +188 917 -.3714850136116222 +199 917 .2690027545754834 +206 917 .17956061063903322 +217 917 -.6521454079314785 +220 917 .5403260983416819 +237 917 -.5886586939234807 +238 917 .43855747910672777 +262 917 -1.1597904378130144 +280 917 .578035926334378 +285 917 -.46698211239052717 +290 917 .24670611448104166 +317 917 .05016639340323745 +327 917 .5559206199709156 +330 917 -.35581477053718935 +331 917 -.19341846585164274 +332 917 .5459549522570322 +340 917 -.04038735780976606 +347 917 .22382715207820408 +361 917 .19356196370495551 +364 917 .2618940789328198 +374 917 .18138354142614696 +375 917 .02448694982725974 +377 917 .09152516237650932 +379 917 -1.0174764051959226 +389 917 .5991839162059058 +405 917 .12852678756559935 +413 917 -.49057934547091264 +414 917 .8864897985546785 +419 917 .777975285284212 +431 917 .5448037961206322 +455 917 -1.3979913734694145 +457 917 -.8701573453917045 +459 917 1.4057462828907792 +461 917 -1.099488969232695 +467 917 -.47244069762249574 +476 917 -.17984245429111653 +477 917 -.02281613597386943 +480 917 .21142805732110073 +483 917 .15661999113371342 +489 917 -.41933210670997884 +495 917 .2848385604416487 +507 917 .5949255084257214 +516 917 -1.0588238331661024 +521 917 -1.6035634995057915 +524 917 -.45028276649332644 +538 917 .6663713993857141 +555 917 .4297083629923324 +558 917 .4190532647388532 +565 917 -1.0858676727729817 +567 917 .05631638017871225 +568 917 -2.010792474539039 +569 917 .19934404878521078 +579 917 .4411438082005481 +587 917 -.5985498191222838 +590 917 -.002287106266722544 +592 917 1.8692756327935023 +610 917 -.9853186904138619 +623 917 .5640152043292218 +650 917 .2714336906360616 +665 917 -.4237318201715313 +669 917 -.6830438956055249 +678 917 .9261716052629727 +699 917 -.29974328939563677 +714 917 .22605082630259407 +728 917 1.019647279660056 +738 917 -.5906525907605487 +754 917 .21510715401196168 +761 917 -.09374938294862702 +777 917 .06246522909225513 +778 917 -1.6338716754475335 +782 917 .6454047771708258 +791 917 -.12276473159834383 +796 917 1.2465942445398335 +802 917 -1.0737829413328144 +803 917 -.9488316408915419 +815 917 -1.9984979416842414 +818 917 -.30678839556855164 +822 917 -.4607468305137149 +826 917 .20954480136415643 +830 917 -1.2698875941726215 +835 917 -.5635969571432379 +843 917 -.29414218974885414 +850 917 -.7524931960092169 +871 917 -1.0994705847904591 +873 917 .45964207696809684 +874 917 -.4611354891221614 +880 917 -.8966149718340156 +884 917 -.7392390305575893 +905 917 .7021993143744065 +909 917 .20676368340673348 +910 917 -.4033838878610824 +940 917 .7744728505744102 +957 917 1.410279946177179 +963 917 1.1565358679824378 +966 917 .45080311245925675 +984 917 -.08083257170976296 +1 918 .45228050894115 +14 918 .25819733343037393 +22 918 -1.5230515012263457 +23 918 -.860139866122527 +32 918 -.4409256902144924 +34 918 1.8354764169053832 +46 918 .617357888771429 +58 918 .08097810563865689 +81 918 -1.0763940452452527 +101 918 -2.381937865016745 +104 918 -1.2077887833583716 +108 918 .4732483013118599 +125 918 .43904526600228044 +137 918 -.45760322128006353 +143 918 .6976764352612785 +145 918 1.4097024117381836 +147 918 .4904586449962314 +154 918 .9840780788954328 +169 918 1.0525497634939585 +186 918 -.023497014405111954 +218 918 .559105942080757 +246 918 -1.5511902832259996 +249 918 -.36204740361723736 +253 918 -.432372144264537 +255 918 -.4644429504586518 +273 918 -.20748886062026675 +278 918 -1.5820091851467144 +293 918 -.7976420780297969 +302 918 -3.1418898471414893 +305 918 .06538667194265954 +307 918 .6232126626970999 +336 918 -.22844864382237082 +339 918 .43060687561063576 +342 918 -.4524544847403782 +344 918 1.5444194348815055 +353 918 -1.9704048539433823 +368 918 2.105085239329441 +381 918 -.41496380893388307 +386 918 -.25249125303406117 +387 918 -.5942445176315793 +389 918 .32026677183722824 +393 918 -.3913186770461802 +400 918 -1.3239314448735677 +401 918 -1.6773363246284512 +403 918 -1.2121527701906005 +410 918 -1.4882141934903925 +414 918 1.309400727457795 +415 918 .11133392891725676 +417 918 1.0671124225080166 +421 918 .10998425949723321 +422 918 -.7038858095648421 +429 918 -.7015142119600541 +460 918 -.9218805581802342 +461 918 1.9555591904482734 +483 918 .2045249730551661 +503 918 .460324194340071 +508 918 .4631198857763298 +513 918 -.2910463403171448 +520 918 .9343812375523212 +522 918 1.1456094546793323 +539 918 1.446930187501883 +564 918 -.10301084296965354 +573 918 1.6474690801414542 +578 918 -.35075778566625126 +584 918 -.6784773610024389 +601 918 -.3908365228714064 +612 918 -1.270602000311865 +617 918 -.11872581051450137 +635 918 .5126675311689016 +675 918 .7316654434028019 +677 918 -.23826747804951298 +678 918 .9535991821297031 +684 918 .5342785499832488 +686 918 .5902845652087798 +690 918 .32162355915011803 +701 918 .02038369342525498 +702 918 .9193753937025033 +738 918 -.8608940665924089 +744 918 -.5768418448842575 +748 918 -.38997091551782065 +759 918 -.31209267337658075 +768 918 -.015399925514249735 +787 918 -.11513958344461567 +789 918 1.3008020619374558 +806 918 .7626813391101109 +822 918 .6390374811837243 +828 918 1.364815460817553 +832 918 -.9429288745078118 +833 918 -1.5402607584644081 +841 918 1.1521584484216263 +857 918 -1.3025007246114264 +864 918 -2.485695444348272 +873 918 .6056039026565506 +879 918 -.6663948734729878 +884 918 1.2640265088969789 +932 918 -2.9234232975406287 +955 918 -1.3359570800088902 +962 918 -.21962477678542816 +964 918 2.2469244444375334 +976 918 -1.6823381543512612 +993 918 .15981042520966007 +1 919 .306972375439466 +5 919 .041638710009457375 +22 919 .7749806011265509 +30 919 -.6752432544397164 +36 919 -.253967674094778 +43 919 .7011555827331702 +45 919 -.9962908713058749 +48 919 1.1958905709819407 +49 919 1.0484139832341284 +71 919 -.024362572620526143 +95 919 -1.1438935778341175 +111 919 .39751643498416583 +113 919 -.05896495649363881 +166 919 -.046920313975722626 +183 919 .6499118210678492 +189 919 -1.02441378375405 +197 919 -.21502435465959022 +200 919 -.021754118450220322 +203 919 .9361377205877753 +207 919 .4402692535813021 +251 919 -.5870393255625533 +261 919 -.6844131127282185 +274 919 .7274914216625572 +289 919 .8671999593003619 +295 919 -.7431139149759383 +310 919 .2909258931254575 +313 919 .6339786724725399 +320 919 -.052534538748234216 +352 919 .5076699833111813 +359 919 .6715832876273382 +367 919 -.15702043087147755 +370 919 -.34657303419823265 +410 919 -.9282717115802424 +440 919 -.1173902207623743 +448 919 -.3790596961638867 +456 919 .23247608265887598 +460 919 -.17402574917534822 +465 919 -.7629311647912108 +472 919 -.6461923546049455 +478 919 .9765261958614115 +481 919 .29574577649411166 +484 919 -.8881379552645786 +489 919 .6676827247088817 +493 919 .15302680239345587 +499 919 .8152458465800667 +508 919 -.30423413752321704 +523 919 -.3559626925426279 +534 919 -.2388562856219961 +549 919 .13230337210510973 +551 919 -.472173512617627 +559 919 -.02816940457529228 +567 919 -.9309938881710271 +578 919 -.1159052475236795 +581 919 .3991173514281797 +583 919 -.8126079170064954 +584 919 .7304686745223138 +610 919 -.8564502304504366 +623 919 -.15840513005969153 +634 919 -.24791792732449863 +639 919 -.22808785391560907 +640 919 -.30562903593831225 +666 919 .9355100459360095 +733 919 .3854941021031708 +740 919 .755570128881733 +746 919 .06378609076775715 +753 919 -.0019444069745289394 +760 919 -.22283650631980312 +777 919 .5738548750031015 +778 919 -1.2684636001808807 +788 919 -.547371403482617 +792 919 -.19797180745801765 +801 919 .6307645565252578 +808 919 .5719013639427958 +810 919 -.5436092476454782 +824 919 1.0859210165197282 +830 919 .8323316014555 +839 919 .1717051847184973 +866 919 .7980519045191923 +879 919 -1.0009359981138548 +884 919 -.39631313426853076 +895 919 .9055516768765935 +916 919 .04911996321786801 +928 919 -.004556923277719338 +934 919 -.3457924732483869 +936 919 .40056914412378375 +940 919 -.2402071026076888 +956 919 .36844892536170615 +959 919 .7848058408830332 +983 919 -.5454108754692243 +985 919 .48285565474880376 +989 919 .9890919465560689 +1000 919 1.0830059731879313 +10 920 .5817735938115196 +14 920 .5210913586688364 +24 920 -.5426744746941056 +38 920 -.17849939290778305 +48 920 -1.7980426130587994 +50 920 .06936813772522185 +52 920 -1.5679526057740543 +56 920 -1.1642643492568785 +82 920 -.8479801708798055 +83 920 -.6745437187360418 +92 920 -1.063693069600544 +98 920 -.39345254672425756 +103 920 -2.745675160717717 +126 920 -2.1632769626710724 +165 920 .18246434359205205 +167 920 -1.755138360283225 +180 920 -.6518919885775287 +191 920 -.8814343240682769 +192 920 .08107715552626132 +195 920 -.5842340883221256 +199 920 .4137456289900842 +207 920 1.4585875608427565 +212 920 .18862424376023912 +217 920 .8996601958795107 +219 920 -1.0005062879222624 +227 920 -1.16617143841336 +228 920 1.3482472943667148 +232 920 -.9261630064384427 +243 920 .530617929028435 +244 920 .4596395414046695 +256 920 1.475661696131633 +257 920 -.5352952787945596 +265 920 -.6970485689928113 +271 920 .3719184951310973 +291 920 -2.215104365283717 +298 920 -1.307280884748046 +300 920 .04425577812672589 +301 920 -.25770390186898584 +310 920 .6134408501519701 +334 920 .8758029346436257 +346 920 .32085785379383797 +351 920 1.433205309879341 +355 920 .7363988550949864 +356 920 -.3600593525620561 +368 920 -.13240245230575526 +376 920 -.3551045405593982 +381 920 .0915487046514426 +387 920 .23990784813381721 +389 920 .06236728507455324 +409 920 3.1137985118777496 +418 920 -1.838505150868882 +420 920 2.5971079609527368 +423 920 .6066943163752966 +431 920 -.4898876593982723 +442 920 1.3570016955813158 +447 920 .5012855908913151 +448 920 .00047539174243232257 +450 920 .34645403025825167 +454 920 -.4497944642823473 +457 920 1.1387579293606707 +467 920 -.46912104765675533 +468 920 .5819611329937331 +469 920 -.679258811146288 +470 920 .511571917447661 +483 920 1.221758067222137 +498 920 .1348187516327086 +506 920 -.46259700694963646 +511 920 .35522164739718254 +522 920 -.3844151150463044 +528 920 -1.7008463747709337 +543 920 .1508632375806763 +547 920 .5101521581169749 +548 920 .03580530350762105 +551 920 .9318591081959883 +552 920 -.20884766076512962 +571 920 1.3419848618695271 +586 920 .46721637889445855 +588 920 .12240878408011144 +590 920 -.015857278480650383 +607 920 .3332322221823541 +625 920 -.7669743269639138 +629 920 -.4064751601259125 +634 920 1.1414779741817322 +640 920 -1.3242278583635965 +642 920 -.03789776677141368 +665 920 1.358623234328221 +676 920 -.5107372337555762 +682 920 .23139750454636548 +698 920 -.16806863107507392 +703 920 .6545998533114497 +709 920 -.5978536637087142 +742 920 1.5856963945122566 +772 920 1.1641623619770325 +776 920 .6809441209824479 +799 920 .22581303043221418 +803 920 -.14194495619741676 +810 920 -1.4338565917357657 +824 920 .6345785230037545 +845 920 -.7903524905026632 +848 920 .9678292312901193 +857 920 -.3403570367438067 +879 920 .4854934897595677 +898 920 -.16692161929774846 +900 920 -.0020433476932773323 +905 920 -1.8554966219522908 +910 920 -1.3988170012590257 +917 920 -.5354020058332299 +921 920 -1.2726200317458805 +948 920 .8464034778705014 +957 920 -.7210135277661383 +961 920 -.24383943687451234 +982 920 -.33229422373173045 +985 920 -1.237525152078417 +988 920 .018675964844794057 +1000 920 .7250778486745503 +3 921 .2612368087526711 +7 921 -2.9695052116443597 +13 921 -.968631851520461 +20 921 .3326727723391509 +24 921 -.2923479065042986 +25 921 -.9380267665965661 +26 921 -2.32895978481921 +37 921 1.8761527928217423 +44 921 1.6380679521804065 +54 921 -.5481626041732902 +58 921 -1.1396989772915282 +67 921 -.7669010956594167 +81 921 -.3357098076309021 +89 921 -1.0399086393007926 +101 921 -2.9423602194638447 +107 921 2.4107975996625495 +119 921 -1.0426851927959073 +123 921 -1.5507991853151086 +146 921 1.1313679524378741 +147 921 1.3541838118962577 +174 921 -.6684905644554057 +178 921 1.3322190802743212 +191 921 -1.7781881215669357 +200 921 .3596313848427956 +209 921 .04485944180780471 +237 921 -2.1984486031621087 +253 921 .8146671250384886 +271 921 -.37060382303587763 +273 921 -.078847858088788 +281 921 -.6208526881925333 +284 921 -1.512231871003085 +290 921 .16782164456591772 +293 921 -.32479306394233143 +298 921 -1.2098134963576608 +303 921 -1.2847855333864817 +345 921 .9769822948917499 +380 921 -1.38316706831689 +385 921 -.8299224733964432 +386 921 1.1690331953608513 +391 921 -.14520107259871323 +393 921 .7223906817429189 +399 921 -.8660228401751942 +413 921 -1.2277662460043124 +440 921 .7334942804896813 +449 921 1.753449606697782 +452 921 -.3597031036603542 +461 921 1.8909300573520484 +469 921 -.5690116358961499 +471 921 1.4771636304927271 +475 921 .49707337758381653 +476 921 .7239889026054399 +491 921 .17230619181009915 +494 921 .7112279492208187 +495 921 .4277859093505031 +497 921 -2.17320883908055 +501 921 1.0320636890893153 +508 921 -.9983420436686113 +516 921 -3.474882070761665 +518 921 -.6291216240917428 +524 921 .012226984356457457 +542 921 -1.5417030481926954 +544 921 .4753644326631715 +554 921 -1.6126792467252213 +555 921 1.1112485853119087 +569 921 1.1488992573627042 +581 921 -1.6215182630189664 +594 921 .8796790175842175 +603 921 -1.3059100797342778 +609 921 -1.038029365956433 +618 921 2.010441314005277 +620 921 .3675506196164424 +631 921 .5286682545700945 +647 921 2.3554479544887634 +649 921 1.1382236109083195 +662 921 -.6716345451407328 +663 921 -.09369586147922104 +675 921 -.26876552274002546 +676 921 -.47273975275096364 +682 921 2.3370250786835918 +700 921 1.8188987918633306 +720 921 .10145690066212135 +730 921 .17404328681958897 +731 921 .994538253626987 +732 921 .6651518798261722 +742 921 1.4466776168702036 +745 921 -.38297176215694223 +749 921 -.7474378151876029 +751 921 -.9142071321200913 +763 921 -2.586082197170479 +774 921 .5167657252696595 +775 921 .9437568579434832 +776 921 1.4130034363453512 +782 921 -.3646508653068433 +785 921 .760350129848858 +809 921 1.2552715498985296 +810 921 -.11226168095513177 +813 921 .6550574755363846 +842 921 -.93163412682793 +847 921 -.44700942796313914 +857 921 -.13011715739549443 +872 921 -1.282402679483975 +883 921 1.8314256055975748 +903 921 .8374506255291706 +904 921 -.3071400127413455 +912 921 1.602055904147972 +919 921 -.2504831013722285 +935 921 2.2059079031798685 +937 921 2.3002104846890044 +938 921 .9482576863037186 +945 921 -.40188515067707475 +965 921 1.158108267351664 +983 921 1.9032143080295907 +6 922 .2070205806873074 +37 922 -.18406829513416484 +38 922 .9494097377772603 +45 922 -.7804224828378146 +52 922 .5868968126404155 +69 922 -.006742461493034785 +86 922 1.1490221808961962 +87 922 -.06717907780922033 +95 922 .40421308936624095 +101 922 -.39339793360000114 +105 922 -.30837760623893934 +130 922 -.8969512475760378 +148 922 -.5716694634574215 +153 922 -.4222446394763098 +154 922 1.3284837429335012 +157 922 -2.134945274115313 +177 922 -.6676474713212129 +192 922 -.9203226427359974 +200 922 .491747952184573 +204 922 .45767278022835034 +206 922 1.3806189124044692 +217 922 1.8031375948081858 +221 922 2.6205449419727334 +224 922 -.9197184941826502 +236 922 .7185875063679825 +241 922 1.3258755147050034 +256 922 -2.2134621098305844 +274 922 1.634321586310416 +277 922 1.6947321575986962 +284 922 -.9397602706831413 +300 922 -.6867979253072779 +306 922 -2.024771999174786 +322 922 .9423708395203678 +341 922 -.24025663543593467 +362 922 -.25452378252532265 +376 922 -.41015873414858645 +378 922 -.2375873807709267 +390 922 -.8793513165427967 +394 922 1.0824956039907045 +403 922 -1.3490547115340845 +408 922 -1.075590277931808 +409 922 -1.9522757415377718 +412 922 -.4004371042544739 +417 922 1.714834333190036 +426 922 .2948982155579821 +429 922 -.36879527612938473 +433 922 .1556122492348468 +434 922 .1204829157029242 +447 922 -.9269863019388223 +450 922 -1.0274132594916265 +456 922 .9534015326200969 +458 922 -2.990290624116261 +470 922 1.207100017280612 +488 922 2.4122632645523785 +493 922 -2.0005103182753667 +498 922 .6116789577591588 +499 922 1.4601528877605756 +507 922 .6322690115703076 +508 922 .19274515219482197 +516 922 .19617305686460745 +523 922 -1.521582390127829 +528 922 .7207687647788285 +535 922 1.2227680495139632 +548 922 .042810633990879664 +550 922 -.45296305779143553 +560 922 -.9444421106730597 +561 922 -1.4177252684990789 +574 922 -.3504684492940678 +583 922 .7428280657453367 +615 922 -1.5437664579248238 +636 922 1.4454910635413192 +658 922 .4741881750164172 +659 922 -1.0110851624430484 +664 922 .9627472057598402 +681 922 1.091910591862647 +699 922 -1.2540962273545344 +703 922 .35292251658193347 +704 922 .09080213891574487 +706 922 1.457208743825328 +711 922 .2010056675231311 +720 922 .657760230372776 +755 922 .8940236190833746 +762 922 .6854860946190688 +790 922 -2.40146859662096 +797 922 1.1467521940530254 +820 922 .3267728306493626 +822 922 -1.3708512363013863 +826 922 -.1730957598030335 +837 922 -1.3898054376518223 +855 922 1.924903940810811 +859 922 -.03888376868601448 +896 922 1.5657373691350924 +906 922 -2.2559094987119965 +914 922 -.6780263210578508 +933 922 .74090429308182 +943 922 .7613392949984118 +950 922 -.43633768320430355 +959 922 .23860214616311726 +960 922 -2.284092754565779 +969 922 -.5484999602427083 +976 922 -.6886399178018268 +979 922 -1.5850550365264109 +980 922 -.015011274468930351 +981 922 1.2796984000736629 +18 923 1.083446836144494 +36 923 -1.3158637227478287 +43 923 1.8052347694576576 +51 923 .988100396299523 +73 923 .0520363742770095 +78 923 -.08637867891630718 +140 923 .5311835139408319 +147 923 .009302173360431959 +149 923 -.6128280616059396 +157 923 -.6909704714980724 +158 923 .9865414841680887 +194 923 1.1582271096317818 +195 923 -.8317743705124274 +201 923 .10306284590936533 +215 923 -.4344930197655374 +216 923 -.5326833925921115 +244 923 -1.6099321378818687 +259 923 -.5120957885680175 +267 923 -.017191873408148817 +268 923 -.32967559873652796 +283 923 .405802860095721 +290 923 .12984197883387816 +331 923 .3044117174437977 +353 923 -.46003617982575085 +362 923 .5210869073002786 +372 923 1.506484233334764 +385 923 -.10345132147566696 +397 923 -.44189978307737143 +400 923 -.981362858735478 +411 923 -.47309179250051514 +414 923 .7197537170940054 +416 923 -.40032067418219097 +436 923 -.7665470338073075 +456 923 -1.2051682521957654 +475 923 -.5730584121168251 +479 923 .5477357365991798 +486 923 -1.618816017733821 +492 923 -.30617130468910925 +507 923 .5212711498375542 +508 923 .37744895649890553 +513 923 -1.0933035019730364 +524 923 -1.6211771450848174 +529 923 .46681018216404735 +539 923 .9559227119143867 +552 923 1.1333369233545416 +578 923 -.5131494022089106 +587 923 -1.5994570842920357 +591 923 .07552903398844843 +593 923 -.692467657255712 +602 923 1.477830405180542 +607 923 .2572740349771847 +614 923 -.09470064167749685 +617 923 .15304561940648626 +631 923 .07050985696492981 +651 923 .11116752647669569 +659 923 -1.0011044493644004 +662 923 -.9802038451280181 +676 923 .41082816151009494 +704 923 1.1940999252945783 +717 923 1.6707652785049465 +719 923 .4749691762155274 +726 923 -1.3318795530690435 +733 923 .5958392112495188 +739 923 .5097945752681932 +740 923 1.4730338737622386 +757 923 -1.5524177257023053 +773 923 .49066789355788665 +774 923 1.2973292797081366 +794 923 -.009930859173287815 +823 923 -.10995194812979381 +867 923 .026557613819429088 +868 923 -1.7160172024338822 +887 923 .006992577062644646 +893 923 .8531745729380589 +901 923 -.3444659294553034 +911 923 .4617931596892418 +916 923 .4855087505621049 +941 923 .3102030667885236 +942 923 -.5124732324033148 +947 923 -.021158669766988644 +959 923 .7291167454991352 +966 923 -.0066548217042559366 +998 923 .6541473673351531 +7 924 -.7220164012742917 +15 924 .6516692915410596 +25 924 -.2986360671215864 +42 924 .6520588197714322 +53 924 -.030121675554170575 +54 924 -1.1464028916002371 +71 924 -1.7331545407080402 +72 924 .38798479251886275 +85 924 3.2747445512553384 +89 924 -.05610199800965421 +92 924 -.05962060723488624 +106 924 1.0317957923725436 +114 924 -.4931863374074643 +119 924 .00268502265128933 +123 924 -.984795560066264 +169 924 .545355734608924 +172 924 -1.6593303427459134 +178 924 .9449896445998497 +219 924 -1.4495993283514232 +221 924 -1.6613180513889065 +259 924 -.6845287037296277 +263 924 .24825306425693064 +265 924 2.210590175325435 +272 924 -1.4319775507263994 +274 924 1.158850464275357 +280 924 1.1082424305696317 +301 924 2.272940459826821 +317 924 .6654282402966506 +327 924 -.3172568087089853 +330 924 -.051373665965063695 +336 924 -.604577286544142 +339 924 -1.396528513818038 +348 924 .18112037310832146 +361 924 .8523970505547109 +373 924 1.3655315728523234 +374 924 -.7895896318161977 +376 924 .7141027422973261 +388 924 .9248986196808843 +396 924 -.23431002710963722 +411 924 -.33130820800402005 +415 924 .09649469819029793 +466 924 -.6051188911890001 +481 924 -.6921554496347969 +507 924 .2543334299678647 +508 924 .4470616649799369 +511 924 .4145657820523164 +514 924 .7803077824194996 +515 924 .4091494643733887 +520 924 -.23287768787905486 +525 924 -1.2239725235128212 +529 924 -.4313283758365296 +545 924 -1.3673401128785252 +547 924 -.33099235806371397 +557 924 -1.7055465518601984 +565 924 .3092714505150017 +569 924 .43300410030650194 +606 924 -.09917197262562598 +620 924 .1877008499345544 +624 924 .3597862366767153 +633 924 -.6811410168956533 +649 924 -.525326714610225 +651 924 -.44750903902082406 +657 924 -.16087305688361364 +669 924 -.8536249973039685 +670 924 1.5085952406492285 +673 924 .700426105376997 +678 924 -.9812669420070398 +691 924 .6746166707197198 +699 924 -.1712148136843354 +712 924 .7059885986273755 +714 924 -.691772924838872 +717 924 .6737881372880707 +725 924 -1.8999442896732692 +732 924 1.6254118983503156 +742 924 1.1043239295281864 +751 924 -1.5834024358317382 +755 924 -1.5354265911389915 +760 924 .8379754234266037 +761 924 -.8649699939899009 +767 924 .630288481690605 +769 924 -.9742905579566215 +777 924 -.7048341806585542 +783 924 .3449867973300993 +787 924 .3533058519151713 +810 924 -.9874423977230858 +816 924 1.914901595509375 +818 924 1.3764459630765917 +819 924 -2.1995526530733436 +821 924 -.19491133974007613 +824 924 .11214936676115683 +835 924 -.41980329710655906 +838 924 .2535249515318979 +860 924 .058209589004863976 +866 924 .07806327973361588 +883 924 .24274609591835428 +895 924 -1.5061818390389425 +897 924 1.583988604420928 +901 924 -1.1816825485168143 +906 924 .4498490519317758 +931 924 .8249359187457004 +942 924 .9002549076859889 +944 924 -.28481144754953314 +965 924 .8316625958704582 +973 924 -1.8972512859374162 +990 924 1.7100485595812418 +14 925 .27537009012286107 +22 925 .2594625805542383 +51 925 .031673811924536076 +54 925 -.7866811510656736 +65 925 .6552237469921098 +70 925 -.3347444470784331 +74 925 -.46573272361789153 +93 925 -.2161758551515568 +102 925 -1.0223003127853763 +105 925 .40045514005305444 +111 925 -.050778989229618016 +113 925 .280895794379699 +147 925 -.6326787516521177 +161 925 -.048889748401061 +176 925 -.3322857084628708 +182 925 .1511595742876396 +185 925 .31878645759521174 +199 925 -.046780426174059406 +201 925 .3110191287659021 +208 925 .10273004996016669 +219 925 -.8364570938864898 +220 925 1.3566363464923614 +236 925 -.7140396898827817 +244 925 1.1247787721383389 +245 925 .8318515008582409 +254 925 .21845289006446073 +256 925 1.177866751516114 +266 925 .39640181109763684 +296 925 -.3879224112199135 +308 925 -.20946013867724822 +336 925 -.11792414377284183 +344 925 -.058410990708998814 +347 925 .2625391761383905 +353 925 .569099821816336 +354 925 .9627242823855177 +372 925 -1.059341629317061 +381 925 .9180711928034028 +393 925 .2298740732028063 +399 925 -.5544598847083952 +408 925 .6676595034729262 +424 925 -.7616926206901864 +427 925 1.1050868115287906 +434 925 1.2677708158521865 +436 925 .7298692829346889 +454 925 -.08274434016681134 +465 925 -.6332835818978839 +479 925 -.4231171918655041 +487 925 .0480852537314707 +509 925 .2279133205987327 +517 925 .186861680170536 +523 925 -.4004202627531785 +549 925 .3867812094012285 +558 925 .2739077956995601 +582 925 -.18302897795652678 +584 925 -.07089003606748687 +592 925 -.8165161834222872 +598 925 .598705770396942 +615 925 .20864746800532913 +618 925 -.16583010664010361 +628 925 .3274905368398161 +650 925 -.5005288432117111 +660 925 -.9211125859996587 +677 925 1.4717339102753235 +688 925 -.9463263280228478 +696 925 -.5220509578823872 +707 925 .4297635120155717 +715 925 -.06258855804828573 +716 925 -.5727876434852469 +746 925 -.29779313258934476 +762 925 -.9845154949217059 +779 925 .14692041659433225 +782 925 -.5153924477317154 +825 925 .2813169781606885 +854 925 .6732015481931247 +865 925 -.25589176889984555 +872 925 -.5303880046641335 +878 925 .2184914078873429 +879 925 -.4953055620749147 +884 925 -.33456973828216474 +890 925 .6916920100078945 +898 925 -.5413110167729389 +899 925 .44133250931320556 +900 925 .0950957403652509 +917 925 -1.1457810289903527 +930 925 -.11310655030117206 +947 925 -.0026521362988437824 +948 925 .5162747950579711 +992 925 -.024816103941509765 +995 925 .18368164051011623 +999 925 -.6016076008590769 +33 926 -.20393532937150555 +41 926 .45219594785915745 +44 926 .6244242245941453 +65 926 -.00933100303992956 +69 926 1.0735922254864543 +77 926 -1.5964885462640055 +78 926 -.83965482376797 +79 926 -.6045382289006154 +85 926 .768568959957283 +94 926 -.0980546926878648 +117 926 .5825191395295425 +125 926 -.16089521449434968 +128 926 -.697714883706502 +150 926 -.5241253247580825 +160 926 .7407561627786683 +167 926 -.14328244034354504 +169 926 -.9174717400506636 +181 926 .14727948757436768 +182 926 -.009872373869882656 +198 926 -.5504851877938655 +213 926 -.3133350686282798 +219 926 -.8015058010817886 +224 926 .9537560878977395 +226 926 .4040406628719161 +228 926 .23782870473555873 +242 926 .7464540005378573 +246 926 -.920255357864316 +247 926 -.7279723638718588 +257 926 .7885244991256483 +258 926 -1.3916304760502045 +271 926 -.23865983167940458 +282 926 -.7903439252374048 +285 926 -.27619151046324264 +288 926 .11057199631851339 +300 926 .4972779467445352 +308 926 -.281405512369467 +311 926 -.5275509780659909 +328 926 -.4216138974432736 +331 926 .2050286814605518 +354 926 -.04790053198686137 +366 926 .3605087346945832 +374 926 .915676431389296 +391 926 1.145454720634567 +393 926 1.1839820756906936 +394 926 -.9567481460264956 +402 926 -.48159946951875254 +404 926 .34898750358082165 +415 926 .29277186274490563 +424 926 -2.0770117838882323 +429 926 1.2586670378005842 +439 926 -.2563416544301712 +449 926 1.5418601323932748 +462 926 -.2493324005017672 +469 926 -.602122334735893 +485 926 .0928136519804731 +514 926 .7384884721330258 +517 926 -.28744195622298574 +533 926 -.7267912849198062 +553 926 -.6684773070440067 +572 926 .8065074951015341 +579 926 .31273898507786024 +581 926 .3436483135050333 +590 926 -.715036466602682 +599 926 .44311170077475165 +603 926 -.9904069754578844 +612 926 1.1532419498185733 +628 926 .33448841579286687 +641 926 -1.3450501745742294 +663 926 -1.1094889040871392 +677 926 .893312380090934 +678 926 1.4191821113361054 +689 926 -.7399857345275854 +695 926 .07039428969218921 +696 926 -1.0753746607325683 +702 926 .11042142175737046 +705 926 .03180103069698158 +708 926 .0069443482153048325 +739 926 -.9552538094859687 +741 926 -.729334177422973 +742 926 .3971569554865424 +745 926 -1.7232541946672444 +761 926 -.03427747487076156 +785 926 -.9262852436672543 +787 926 1.342826878356406 +791 926 -1.4047096323794959 +800 926 .20595254038600164 +801 926 -.358988824542679 +806 926 -.6723472739024089 +814 926 -1.028895468382703 +816 926 .5933271492266637 +822 926 -.14732610628813592 +823 926 .35633788770660013 +842 926 .070659242712237 +844 926 .5509126880691508 +875 926 .3832314773570573 +877 926 .20558874100262728 +893 926 .9393417758533419 +894 926 -1.7456496433539268 +897 926 -1.1596238851436027 +901 926 -1.254162831262934 +948 926 -.20099085000099126 +958 926 -.12396045117638997 +982 926 -.7649631111118499 +995 926 -.58066596658542 +996 926 -1.1057861756714311 +1 927 .3969611131653116 +33 927 -.7341479387955716 +49 927 -.22378166739030245 +54 927 -.7628365618521695 +61 927 -.020571680756606675 +68 927 .9675185248748952 +69 927 1.017066656360574 +83 927 -.7435913169825158 +84 927 .16590348622129605 +123 927 -1.0154187971238464 +125 927 1.3487444355557885 +127 927 1.1777862963777534 +136 927 -.4155386891556039 +139 927 1.611064643558487 +143 927 1.2442197077739605 +144 927 -.7092383587740045 +155 927 .18174435019321822 +158 927 -.48439522574155686 +160 927 -.35285959685970214 +181 927 -.5405344974798433 +185 927 -.23742214521898225 +191 927 .27168796543779544 +195 927 -.23586712067819432 +211 927 .40479455353689353 +220 927 .13140244375964716 +227 927 -1.8365211816093274 +252 927 -.8019754203494373 +253 927 -.8881549898038147 +271 927 .3089793325132839 +295 927 -1.2617855767583162 +308 927 .8237260969253632 +314 927 -.12931447817823566 +317 927 -.1588652527506677 +326 927 -1.019481135034604 +327 927 -.4861457860362246 +328 927 -.7260096942846894 +342 927 -.6261663759708009 +352 927 .30988891253942086 +358 927 -.09353685166118683 +374 927 -.16815768006061632 +388 927 -.20941869119036735 +394 927 1.2807673377302133 +396 927 1.4864537220086809 +404 927 .21670107530088956 +417 927 1.41740876842674 +418 927 -.34107949109088137 +421 927 .9811850966410399 +424 927 -.5108084030379262 +426 927 .08709549957338926 +427 927 -.2504941497715391 +433 927 -1.5898814430198747 +440 927 1.179006956180579 +441 927 .7581010974416139 +456 927 -.03401925907603398 +459 927 .4864329162165707 +461 927 1.048551287129082 +468 927 .37115305097478757 +486 927 -.35302684045487365 +499 927 .6236561078155342 +504 927 .724475406139659 +507 927 -.006389840898800847 +510 927 .21839480502028377 +514 927 .14225807679091768 +530 927 1.5313853073853392 +540 927 .5675654708967697 +566 927 -.7251197858912617 +572 927 -.6225325761700956 +578 927 -.692030290699981 +624 927 1.1424153834500326 +626 927 .7297721173820102 +643 927 -1.4608103682248124 +649 927 -.2838965323816315 +658 927 .03366449006686836 +663 927 -.7541612947044685 +668 927 -.030854712002441727 +670 927 -.5225214214320109 +684 927 .7130654380996614 +688 927 .6453726407949505 +704 927 .6962053357377722 +709 927 -.09113129642431875 +716 927 -1.0574788102570007 +736 927 -.14375692303499865 +740 927 -.9464557258188946 +742 927 1.0641950898010828 +749 927 -.546733992959471 +757 927 -.22296771231386955 +758 927 -1.4869848252479538 +763 927 .1553595044042877 +784 927 -.7270242191576143 +790 927 .33675071998591277 +800 927 -.036050736640068165 +809 927 -1.4900897364390917 +811 927 1.496704221626242 +822 927 -.41792683632248123 +848 927 -.4792381619825331 +869 927 -.80584156197963 +891 927 1.2810055637351987 +907 927 .10384111400080386 +908 927 .431054580984524 +911 927 .4181570439839968 +916 927 -.13738394889609906 +922 927 .7160503086413069 +924 927 1.6358160566106053 +927 927 .1467898713011662 +933 927 -.749172763656332 +934 927 -.6900705447178741 +940 927 .0896891539071697 +959 927 -.35601294682534823 +966 927 -.2906290504998449 +985 927 -.08499215946771926 +990 927 .795822810574581 +3 928 2.2247290745593826 +14 928 .6343467673109312 +19 928 -2.1818179981472956 +27 928 2.1999698034145183 +29 928 -.26540546238109275 +41 928 .4543725917470254 +45 928 2.1906188539010176 +58 928 -.35168670517689243 +61 928 -1.0141989974020418 +63 928 -.5978656902605722 +71 928 1.0407369149555825 +95 928 .9835370000727985 +96 928 -2.287438741282525 +101 928 -2.2463327312069303 +104 928 -.22349148250881162 +107 928 1.3868834596214141 +140 928 .45143882747357167 +143 928 -.2793235413695212 +148 928 .19252603648575006 +151 928 1.0357894158387526 +158 928 -.4810224852282241 +228 928 .14945788283094597 +229 928 1.0996697116837342 +243 928 -1.412585041788578 +250 928 .4606132103019083 +256 928 1.7583347445087063 +261 928 .6066012568051038 +268 928 -.25230079848501474 +274 928 -.9530080443156328 +278 928 -.46944388793250136 +280 928 -.16179814526834846 +284 928 -1.432075954041108 +288 928 -1.7300192153148906 +293 928 -.05836452661421007 +298 928 .09246394197456075 +308 928 -1.5319471395018203 +311 928 .1926130128392632 +317 928 1.6207998386225884 +345 928 1.3971747158177419 +363 928 2.3760030810509827 +369 928 1.1208194882094908 +383 928 -1.3876746259551223 +409 928 -1.6952928962763383 +414 928 .9005628527157573 +418 928 -.2633948559030977 +426 928 .589203193283757 +433 928 .9664188271021916 +440 928 2.097227486547404 +447 928 -.41717994140065384 +466 928 1.0399058752920898 +473 928 -1.373503217401985 +474 928 1.0619935026647458 +485 928 .9556388107955379 +502 928 1.7021007447632 +535 928 -.8942446547718256 +537 928 -.9442993355973548 +542 928 -.16830107927844606 +545 928 -.8544343157301504 +570 928 -1.3818340768020567 +583 928 .666110445148358 +586 928 .5990982374834346 +590 928 -1.0852760680787634 +592 928 -.7074716753917988 +595 928 1.7191881972539131 +599 928 1.2623947851098207 +610 928 -.5594731882361702 +627 928 1.2675940665120795 +644 928 .48666574687415887 +659 928 -.9522359847056858 +667 928 -.855424947859228 +679 928 -.7864707849983265 +680 928 .8256967626931685 +702 928 -2.0668403531019788 +717 928 1.2122967026201004 +722 928 -1.3643207612199086 +760 928 2.3175477341843833 +769 928 .5209974556351694 +784 928 -1.0189554696418852 +797 928 -1.6855097369893917 +831 928 -.22026066264752753 +832 928 -2.1944587721924567 +844 928 1.0910613995781484 +852 928 -1.3835079618488004 +858 928 1.2119375595093167 +874 928 -1.7431629237867776 +881 928 .9068505202523058 +886 928 -.107792119314078 +917 928 -.6378931371525957 +922 928 1.3353173318409723 +927 928 1.4831059858588138 +967 928 .9009659098139249 +970 928 -1.349977062906917 +983 928 1.3093807889694282 +991 928 -.07996367403957466 +994 928 -1.000075784230012 +3 929 .16322076888913256 +10 929 .02504633683156217 +18 929 -2.1222404684404217 +53 929 -.12405803242865562 +56 929 1.3871294433341697 +79 929 .5355545161311468 +97 929 1.2827903038080322 +108 929 -1.4552349697082776 +129 929 .765970850200762 +149 929 -.47078004173814203 +169 929 -1.0950844973539495 +175 929 -1.1928991222011103 +185 929 .26279568038908574 +200 929 .223525714999216 +210 929 .41220475617974417 +220 929 .780615714370396 +227 929 -.6222122055842075 +258 929 -.5267803746907109 +259 929 -.17538739288895802 +276 929 .20207830182856604 +278 929 -1.09894256837189 +288 929 .14772894758338084 +302 929 -.9909927994411825 +325 929 .45573395746492074 +333 929 -.19189697607814735 +346 929 -.08596645653921317 +348 929 .5996094763301543 +367 929 -.30629563363739715 +373 929 1.258103115052295 +374 929 1.9504680260460674 +377 929 1.0829188247885309 +388 929 .5362947126137203 +389 929 -.9458511537660024 +395 929 .4522082410982764 +404 929 -.3507874977070038 +411 929 -.08907929388338293 +414 929 -.5663332004150707 +429 929 -.7352058852111009 +431 929 1.0328250636933827 +433 929 -.4494822846035734 +442 929 .016959172016598682 +445 929 1.2021691046565208 +447 929 1.663174696615428 +503 929 .3741781125548449 +526 929 -.35783265839861195 +533 929 -.43683774988249463 +538 929 -2.034591978338693 +539 929 -.5654144347849913 +544 929 -.8653997753131709 +564 929 -.8614553445594915 +590 929 -.40123407975434205 +614 929 .14314517098061463 +623 929 .7801136633097849 +638 929 -.21115896010300167 +647 929 -.7989713168405375 +654 929 1.3623088236322407 +662 929 -.4516670048242144 +667 929 1.0497132653132395 +668 929 .5464343201166276 +675 929 -1.4724943674611397 +688 929 -.11390768373078165 +691 929 -.25107310265797617 +697 929 .965302740706732 +700 929 -.782325426291215 +710 929 .42298379691931365 +713 929 -.12435010482912723 +750 929 .730063089294295 +754 929 1.094931739195988 +777 929 -.15168207927700111 +800 929 -1.0665835411287052 +804 929 -.7357470605669126 +806 929 -1.1676111639694742 +816 929 1.2690007421166993 +828 929 -.7880213484729335 +833 929 .310363679686413 +858 929 -.006097594987596287 +875 929 -.07653598004531878 +876 929 -1.0570281208942887 +882 929 .5106188706114115 +889 929 .725233434081578 +909 929 .5777635137788397 +913 929 -.4920008834090984 +914 929 .30277474229864276 +921 929 -.22855152704555629 +30 930 -.5749398576676481 +33 930 1.0457734346711869 +62 930 -.8886018425338771 +67 930 -.05128409606055333 +73 930 1.0557300179470743 +82 930 -.0430570731833988 +90 930 -.5574709126524011 +93 930 -.3258010250391278 +103 930 -.5839523293567038 +106 930 -.3215316030908748 +120 930 .43676164789717564 +132 930 -.6239483282045326 +154 930 .13918614836349896 +163 930 .6341735120082805 +164 930 -.12053688137388352 +167 930 -.9578420996522097 +180 930 .1040193396980522 +196 930 -.9160921164720284 +208 930 .5416216052374815 +213 930 .610391165584992 +220 930 -.5954058041160354 +224 930 -.4580826831348903 +229 930 -.17983189897802876 +231 930 -.4758442641404889 +239 930 -2.289258908803196 +241 930 -.9050000605949996 +243 930 .21191642895102766 +272 930 .6767366283791512 +292 930 -.08900097673440041 +306 930 -.8150045041166694 +310 930 .18762303131927263 +314 930 .8572831759662758 +329 930 .7400905893975855 +334 930 .13272293295744989 +342 930 .4163262703889916 +343 930 -.8776560757967411 +367 930 .15917360595619365 +377 930 -.20048437111852996 +383 930 -.10624736993302603 +389 930 .48674238387827823 +395 930 .543452290434039 +400 930 .4127257991141353 +401 930 -.7811718826057433 +405 930 .39556282107264 +410 930 -.047648586934889686 +421 930 .16663170842711977 +437 930 .3322310713757767 +440 930 -1.548555945810316 +442 930 -.15780196590278533 +445 930 -.16025891241086493 +451 930 -.601030950969071 +455 930 -1.0295936301495863 +459 930 -.79894824886245 +466 930 .21642769785787108 +468 930 -.21110640625333799 +482 930 -.6003029529453277 +485 930 -.3175543972669399 +492 930 .27481643190481747 +500 930 -.580168170989036 +515 930 .11404225809178356 +529 930 .4947929686126638 +536 930 -.6032568518182095 +544 930 .5778242905337205 +554 930 .2260671064463436 +568 930 -.736945599792846 +609 930 -1.5128051268359612 +613 930 .502429441445383 +628 930 .07539875679959951 +640 930 -.5438899459784534 +647 930 .24205975380514616 +650 930 .28512326445321445 +654 930 .3145163234724882 +669 930 1.2449912153777623 +686 930 .10652813854823628 +690 930 -.9127708849776779 +720 930 -.28442704873706637 +734 930 -1.26914297232578 +741 930 .413030607463576 +761 930 -.03700265554467926 +798 930 .6995396024281404 +805 930 -.0412490487781924 +818 930 -.7737945857653225 +855 930 .13998979549729146 +860 930 .4316411476783705 +878 930 1.3628534289925658 +880 930 -.33879662384223685 +895 930 1.0854926800394558 +922 930 -.6387402221156409 +936 930 -.05433418280186364 +942 930 -.8868900015955634 +985 930 -.646549090570154 +995 930 1.4726144013136508 +5 931 .013124140917946652 +8 931 -.8499221650500587 +22 931 -.011165331680322799 +23 931 1.198892954563054 +24 931 .25939943185272474 +27 931 .5571929954411463 +34 931 .30900019129783474 +35 931 .512871977678068 +45 931 -1.9851980618187701 +49 931 -1.4973443653878562 +56 931 -.24667233689938442 +65 931 .16852817181034413 +90 931 .03605476823396184 +94 931 -1.13361668876332 +95 931 -.09008402311834711 +110 931 -2.1194959171826553 +111 931 -.5493975857277336 +112 931 -.5855174625919058 +113 931 -.5388909550465335 +131 931 .2576735678820264 +135 931 .03114456495589253 +139 931 1.6503541792994958 +141 931 -.675078340382172 +144 931 -.10086605353815509 +158 931 .4110279050625347 +210 931 .23547215547433414 +222 931 -.8385206713008662 +236 931 .6634546707942349 +237 931 1.7839789303054532 +240 931 -.7602264997213187 +264 931 -.3261322895185416 +282 931 -.13741176389275023 +283 931 -.18922569728255295 +289 931 .31563480070749855 +297 931 .9364859404539045 +300 931 -.39105475948059293 +307 931 .45117437914884573 +344 931 1.5234361117598447 +348 931 1.1177918208112447 +350 931 -.8686101611758458 +352 931 -.45355665188086364 +367 931 -1.110012723154019 +372 931 1.0044107676595924 +374 931 .323503753599254 +378 931 .8599891707546349 +390 931 .6993982742194426 +391 931 1.0003750036665127 +423 931 .7140890928835733 +429 931 .15169688341794887 +434 931 .5035658599124685 +439 931 1.916607954476321 +443 931 .3224159099644883 +463 931 .05606625690009347 +501 931 -2.0661010517736416 +513 931 -1.6145053710033923 +520 931 .4079196084092148 +528 931 1.284464958204505 +557 931 -1.0567018836568915 +558 931 -.3740461234005656 +567 931 -1.078716704234421 +570 931 -.3787456777330752 +571 931 .24688549483738653 +577 931 -.15163104575780806 +604 931 1.1633013937546923 +611 931 -.8208431793060369 +618 931 .7221468650939166 +624 931 .7505724681664496 +658 931 .08717198221555592 +670 931 .5530759066498895 +675 931 .22746051266135375 +691 931 1.1612446412158002 +697 931 -.6237838070618542 +706 931 .20354971758341633 +720 931 -.14082768076921592 +740 931 -1.0482629851862346 +774 931 -.03376887283574129 +779 931 -.8512391376370535 +781 931 .09804640465950959 +785 931 -.915128492892901 +801 931 -.8173880054848978 +805 931 -1.4733738926437752 +810 931 -1.2612067588736193 +816 931 .6505855725795565 +817 931 -.4095087667729339 +826 931 .3785509677176414 +828 931 -.44735286802656504 +853 931 -.9815806874582658 +860 931 -.616158311750167 +874 931 -.047291054929044535 +898 931 .14156034501822506 +911 931 .9104404825985344 +927 931 .7467402009893287 +930 931 -.2907807228643473 +935 931 .8127316941083357 +954 931 1.37289943736805 +971 931 -.8923444583464657 +997 931 -.0047633899095858995 +1000 931 .6900326709864778 +3 932 1.5122228250080398 +5 932 .2727143752977574 +38 932 -1.1815830723232028 +61 932 -.6936604636662475 +63 932 -.20602204672577362 +65 932 2.7597642126325734 +66 932 -.3471586634720859 +75 932 .011790625657249004 +78 932 1.6825712855862507 +83 932 .14372010847421912 +85 932 -.32484778361811656 +108 932 -.22204837144376105 +129 932 .7808926238670659 +135 932 -.4452669262087032 +157 932 -.17182737979439694 +194 932 .6535130086047084 +204 932 -1.0204213689020734 +207 932 1.6611611290518429 +217 932 1.8699685250643001 +224 932 -.571733894462902 +230 932 -.4422849955491739 +246 932 -.10841544634742098 +248 932 -1.2645917729473921 +251 932 -1.487988679900362 +262 932 .3152896936254693 +289 932 -.5333680825521661 +293 932 .566383155415581 +323 932 .5473759979551386 +333 932 1.5057906302078807 +338 932 -1.273010041151096 +347 932 .7874347660697778 +357 932 -1.3786024846898532 +358 932 .4330444852853477 +386 932 -1.4063982984662127 +390 932 .9425846599965702 +406 932 -1.1133273869004867 +410 932 -.7379416239165656 +425 932 -2.1577690246078376 +432 932 .8248397064361744 +452 932 .7894496390731379 +465 932 -.6476504104578513 +472 932 2.011209648156463 +475 932 .18981659399478074 +480 932 .7190775066437576 +507 932 .946453389329462 +512 932 .8047841255362094 +515 932 -.6685933218057452 +520 932 2.5766147614846595 +532 932 .9348233798829734 +541 932 -.5165817853334982 +544 932 .960144375260363 +571 932 -1.3262724296052335 +573 932 -.7317079302268111 +578 932 -1.128209427049534 +579 932 -.5185243656956805 +581 932 -.8224048814261875 +583 932 .06688168001862801 +613 932 -.047275014527292714 +634 932 -.49093675209794585 +640 932 .7145539597713363 +646 932 -1.363498052193496 +649 932 1.6410982588230056 +655 932 -.6335525163760829 +672 932 2.7020970351539195 +674 932 1.1403559656976576 +679 932 -1.837943741472108 +681 932 .18863105917036632 +702 932 .010594081620510142 +709 932 -1.0260336398551466 +714 932 -1.4132196052690307 +733 932 1.7375759125206216 +734 932 .10780348191090061 +754 932 .8967279519658976 +757 932 -.21349818984688973 +768 932 -.4091756849228109 +771 932 .6399208816369333 +802 932 .6539682034032986 +803 932 -.6074765885406465 +807 932 .5832147226745558 +818 932 -1.8404449168202077 +827 932 -.5751432636887684 +832 932 -2.5496971994360473 +835 932 -1.3088546916468804 +877 932 -2.217100385159219 +884 932 -.056429479695619206 +891 932 -.37726554574699833 +909 932 -.6508675239261629 +910 932 1.9343134461765858 +930 932 .3490411832680533 +937 932 .8491291357518929 +939 932 .11378808302115839 +956 932 -.41444832723445957 +959 932 .1561354737937245 +961 932 .005005916871530652 +963 932 -.8764699989496103 +975 932 -.04064468817443857 +983 932 1.4121045515937807 +987 932 -.46761756504642016 +992 932 -.4854409787140353 +993 932 -.134868430835503 +997 932 -.8606314604706278 +999 932 -.9927156057079584 +14 933 .11548232560598128 +15 933 -.7191442532760933 +29 933 1.0320464186324076 +35 933 .5534692217635836 +37 933 -.8314194916563559 +38 933 -3.253482908768506 +44 933 -1.2493948869406801 +48 933 -.61678060482709 +54 933 -2.307495178822013 +55 933 -1.2553852058978234 +57 933 .03740164124972664 +71 933 -.31446524912070334 +72 933 .1441194200253028 +82 933 1.0113627414470714 +83 933 -.2481788538835042 +84 933 1.8464206872787892 +92 933 -1.1721089000423166 +94 933 -1.972700378650686 +121 933 .9756710917394257 +129 933 -2.253173326569829 +139 933 .21575826858747182 +140 933 -3.012307667727676 +165 933 -.993312863537097 +188 933 .5916160617153883 +196 933 1.1655652195641242 +197 933 -1.3721376760132735 +223 933 -1.1780938745054643 +236 933 -.9914312453399248 +246 933 -.09702392104073715 +254 933 -.5980762789359304 +260 933 -1.736998643775394 +275 933 -.8207383390965967 +281 933 -.6991119605994045 +282 933 .11135000162510145 +283 933 -.9458308547480893 +284 933 .7293691375997173 +296 933 -1.5328382700851566 +304 933 -1.4927780931225239 +312 933 1.6180217552709024 +314 933 -1.5876704516105453 +315 933 2.3783566238500184 +320 933 -.36442719356858055 +335 933 -1.0193923509930323 +340 933 -1.2424843302377118 +341 933 .8267417206362662 +346 933 -.9387681844062619 +356 933 .3954475826621461 +381 933 .5761646110269604 +382 933 -1.7539172361550894 +391 933 1.6433424374421797 +398 933 .0484504276637203 +405 933 -.4071095199296906 +422 933 -.7731248256226217 +437 933 -1.2406623675239075 +440 933 1.5807597478643454 +451 933 1.3033352206665623 +453 933 1.1103075686893265 +462 933 -.39073890959232266 +486 933 .6943501211593857 +488 933 .6310428980004197 +489 933 -.0794903444630557 +495 933 -1.8381500144283558 +499 933 1.4229206364944171 +510 933 -.5916802070212852 +515 933 -.6040004069878686 +519 933 .21309464569196884 +523 933 -2.5579015115988635 +529 933 .34375659739390924 +530 933 -.948133676080143 +535 933 2.7912328100055115 +543 933 -1.0935565324773413 +546 933 .13382736804627346 +566 933 -.9619748196349595 +571 933 -.9673250155118626 +579 933 -.7677200690796211 +603 933 -.984453412203606 +606 933 .2756143555777556 +632 933 -1.4156445390880945 +654 933 -1.0499000785677994 +670 933 .2907683064004377 +673 933 .30533631862412697 +676 933 .628795790945827 +682 933 1.36719687040284 +686 933 -.6415692310044221 +697 933 1.050678382521173 +709 933 1.7245082959807654 +720 933 -.4556843435396406 +731 933 -.13904957379932914 +737 933 .7448351712557826 +741 933 .6670555013561712 +744 933 1.176750148929066 +745 933 .38316986908169653 +760 933 -2.209405665355598 +770 933 -.6105836461714994 +772 933 -2.376480711820642 +779 933 .5195131684882645 +785 933 -.8563845382469433 +801 933 1.4227629734054827 +808 933 -3.852284658066708 +809 933 -1.642939545584206 +824 933 .13167619857596366 +853 933 -.08615067392460361 +854 933 -.28790675411152616 +862 933 .3026376726714066 +868 933 .5047481203389317 +883 933 -1.6933023510686467 +885 933 .2792827502091759 +889 933 -.1518219104026323 +918 933 1.6513119328713872 +922 933 -.37889095254011296 +936 933 -.8819371117640358 +939 933 -.08831220827157471 +946 933 -2.109352081640788 +968 933 -1.6709288277667935 +969 933 -1.5160563469745008 +972 933 .5778004753143988 +983 933 -1.5532125691715635 +984 933 -.9805194679504603 +997 933 -1.5556752016398732 +4 934 -.11238214128459244 +8 934 .3719011650811772 +11 934 -2.63989318828044 +12 934 .06780761041358072 +31 934 .5399557340536676 +38 934 .4078606912693992 +44 934 -.6109306700411703 +73 934 -.16992076780197912 +97 934 -.6452499353086738 +103 934 -2.0637800595265476 +134 934 -.19262393487306279 +140 934 2.3012932008014735 +151 934 -.8336683495127849 +160 934 -.2545339757283904 +165 934 -.1890459356060917 +167 934 -2.3819362885391895 +184 934 -.3145175720995852 +196 934 -1.7297182277783723 +197 934 .3370983427504625 +205 934 -.7012382744657001 +222 934 -.33378513431260437 +243 934 1.2917520203478632 +283 934 .21466157778832043 +305 934 -.18695338605723413 +310 934 -.026225973349196727 +317 934 .7401042846077772 +352 934 -.7924126322039573 +369 934 .494066319183033 +374 934 -3.0555610580147943 +394 934 -1.1585173603557792 +410 934 .1388304304235354 +450 934 .5841530301551106 +477 934 2.338340368736425 +489 934 -.012695228168296678 +501 934 -1.068896035690705 +512 934 -.6787165715721521 +516 934 -2.2583360985838588 +525 934 1.1498701229920985 +526 934 .5668212624044753 +534 934 -.31522402416691714 +537 934 -.01819498869521327 +544 934 -.04495379175139316 +554 934 -.8824810857964309 +560 934 -1.7503552515577077 +587 934 .006889725156792814 +596 934 .7366806300844935 +611 934 -.041209553754276124 +623 934 -.4601804538417097 +641 934 .5057516258175977 +662 934 .1320637951827936 +664 934 1.4427536288397822 +667 934 1.2521121579082446 +677 934 -.4324392860395001 +705 934 1.45700839643085 +707 934 1.2711397001568179 +722 934 .07307121871558854 +725 934 -.0955538047802439 +734 934 -1.1389934485006286 +737 934 .11028841819594253 +747 934 -1.5351965386384114 +758 934 2.38265908043057 +760 934 -.8281344627738704 +770 934 -1.0164080542188756 +783 934 .41221090410250544 +797 934 -1.0740016736387412 +800 934 1.0830268118041089 +842 934 -.032227370287248674 +845 934 -.9672577673017011 +877 934 1.2329518744342023 +882 934 -1.6394355426247922 +883 934 .8326811362957945 +884 934 -.08441536890445406 +901 934 -.8906323030959249 +905 934 -.7043067412558993 +917 934 .8457048385427142 +919 934 1.8934681419693002 +925 934 -.8488496314212854 +948 934 1.0050687341786049 +958 934 1.485556272166184 +959 934 .4408812094621134 +974 934 -.8503119404147937 +977 934 -.37259168938783976 +981 934 1.466422500617045 +983 934 1.6313649068396898 +986 934 -2.617156134642159 +995 934 .6494376758667489 +10 935 2.497456831712614 +56 935 .0851319456458734 +71 935 -.661184477844942 +76 935 .1281897225051535 +77 935 -.1762411296176769 +81 935 -1.3251399730995048 +93 935 -.12293167555027933 +98 935 -.906303001345784 +116 935 -1.935076159219564 +140 935 .4342399863972662 +151 935 .18870933861524877 +168 935 -.3147355413727483 +169 935 .8563972698694882 +184 935 -.31958989181233627 +189 935 -.39243306635253444 +190 935 1.691484657557941 +191 935 -1.3670065286821471 +192 935 .2062683131474396 +197 935 -.3692306383199607 +200 935 -1.1706876734661171 +205 935 -1.9375298281385864 +218 935 1.3017719451718017 +242 935 .2694650071758963 +255 935 1.0753121492351982 +260 935 -1.4747491308077005 +262 935 1.0301267749663765 +271 935 .10721897062546853 +277 935 .26231510236243943 +289 935 1.529129304014565 +299 935 1.366936278054352 +329 935 1.3088250501850454 +330 935 -.8182404731264064 +362 935 .8277470787356579 +409 935 1.6466892364716823 +410 935 .3366894553599368 +426 935 1.1451519347112404 +437 935 -.28627710397680195 +443 935 -1.7922309352628023 +448 935 .41577711168016884 +459 935 -.297910650454479 +461 935 .8202898805653135 +476 935 .3169039422950933 +479 935 .43136376707430263 +484 935 -.5285338157875275 +508 935 -.8387689047742144 +520 935 -.3907890436012187 +539 935 1.5911370800203513 +574 935 .5714237084092044 +576 935 -1.0745095984178294 +606 935 -.6134192979793027 +640 935 -.6910127378488958 +659 935 -.08789021817213019 +662 935 .4057282951146753 +674 935 -.4506297959313478 +692 935 1.3120405654093426 +699 935 -1.435251388169481 +713 935 -.8090880890983836 +714 935 -1.3465732678002675 +715 935 .44591851251882675 +719 935 -.061533585865979866 +732 935 -.1649382378469884 +747 935 -.5660295524913109 +753 935 -.11581337618773047 +776 935 .6925320327833542 +783 935 1.0164261424152339 +799 935 1.9331040978889982 +800 935 1.728306868949047 +817 935 -.06817349365772202 +824 935 .04962137508555104 +826 935 -2.499583898464197 +850 935 .16655560449365087 +857 935 -.2763738360522983 +873 935 .10825178486444738 +894 935 -.3995687256834845 +895 935 -.5899495296903429 +929 935 2.9657424105760652 +939 935 -1.3766030885658207 +940 935 .10014928622490979 +945 935 -.9787138919276162 +971 935 -.33552730019038135 +2 936 -.7635148972961319 +4 936 .09240827359918515 +9 936 -.5909803089504531 +11 936 .11842717519137148 +15 936 .5418379337357562 +29 936 -.1819257166194675 +36 936 -1.0022105371495416 +37 936 -.0987142622798445 +47 936 -.48030753059781334 +56 936 -.052619547209028374 +59 936 .18006690904415323 +66 936 .42381238332262694 +76 936 .15325839301449123 +101 936 -2.7876531690457766 +125 936 .9501909616615707 +127 936 1.4243515408459138 +133 936 -1.0305847955159593 +143 936 -.041676360789347916 +164 936 -.698183243017104 +167 936 -.19800815720379697 +187 936 2.1135426015755194 +197 936 .040250513658365045 +199 936 .7265279582822466 +214 936 -.5542801260802316 +218 936 -.7766698248655891 +220 936 .3035541088494467 +225 936 1.4323873882629474 +226 936 -.7647893538864676 +229 936 -.2147798310088228 +236 936 -.18231428875492223 +268 936 -1.2378300695752664 +271 936 -.31327936904286574 +278 936 -.4779758985310302 +281 936 1.2024120065807997 +284 936 -1.3622274459705492 +306 936 -.34505514448650765 +327 936 .639728321227961 +329 936 -.4630952102425435 +342 936 -.3898659242566948 +346 936 -.01716876741314568 +359 936 1.1002174884118587 +371 936 -.0003110962421147348 +390 936 -.7167757137137103 +391 936 -.7226454432514084 +394 936 1.0103832102165557 +408 936 .04703846677154842 +409 936 .28309371024828156 +416 936 .9764766597837711 +433 936 -.2930594050282031 +434 936 .7568041235592875 +446 936 .5847008897968695 +455 936 -.4924617666037379 +472 936 .1126100927084231 +475 936 .21597470207946146 +484 936 .5434803557030571 +486 936 -1.5402935008899763 +487 936 .33310004287543804 +508 936 -.1222901240777457 +515 936 .4721841180607922 +524 936 .3004803617978412 +525 936 -.9516819163874911 +529 936 -.4911124167669899 +532 936 -.3878324617614618 +537 936 .1958285008640088 +554 936 -.8325332602188803 +569 936 .8198483268598411 +583 936 -.3894925919480417 +586 936 .7467775227929161 +596 936 -.5233103509399184 +605 936 -.5219873717940751 +612 936 -1.2227500300401144 +628 936 -.05733351368055759 +632 936 .7759905069324101 +685 936 .009569169575470632 +686 936 -1.130533688807448 +688 936 -.1562106628525401 +694 936 -.9389094190103437 +701 936 1.9482300779192507 +703 936 .16410260695344991 +705 936 -.9807953154926813 +723 936 -.5104717003401361 +730 936 -.8158443163437226 +738 936 -.11993056502852124 +756 936 .37434778549211273 +763 936 -.39037831341288354 +771 936 .8067819183457392 +774 936 .4815342566266879 +776 936 -1.0106102192635518 +777 936 .03794135264635008 +785 936 -.08326114458316537 +787 936 -.2672539888094895 +802 936 .21441105525142543 +808 936 .026682671600131137 +812 936 1.117799027751202 +828 936 .7517946483386804 +854 936 .21999533761339246 +860 936 .6079711565449816 +870 936 -.8074333461281668 +889 936 .225225492635066 +895 936 .2983556888668142 +906 936 -1.8296645690063302 +907 936 -2.526690230919924 +913 936 -.5950199680536256 +924 936 .6152411117975948 +925 936 1.12074458678798 +940 936 -.6416203115153355 +1 937 .6870657785338413 +7 937 .5401113880789166 +21 937 .48114811017411657 +22 937 1.4169455499729111 +25 937 .9361698650288713 +26 937 -.4342054346396381 +29 937 1.3370398658877052 +32 937 -.3809711836851108 +38 937 .06465222498355497 +44 937 .14989211103340072 +62 937 -1.1012329344932588 +78 937 .7239260778563565 +87 937 1.698946920722117 +96 937 -1.3851992489776013 +102 937 1.0107662426857418 +106 937 -.2744999451994536 +116 937 -.7719574890926507 +129 937 1.0173805171777457 +142 937 .9569793258953955 +143 937 -.38435490886474566 +146 937 -.2865638871161779 +153 937 -.04118775545166159 +154 937 -.7606509711193569 +162 937 1.0817379801427884 +165 937 -.24827068613073738 +174 937 1.2459055818990572 +178 937 -.5769064744386421 +185 937 -.9761193483770243 +208 937 .08820420431642301 +220 937 .13240769725077114 +252 937 .59920884993201 +270 937 -1.2984323263781656 +271 937 .6754692952742053 +291 937 -2.034952872784 +297 937 -.6664669958044401 +335 937 .4255342601980878 +346 937 -.2502160644402222 +349 937 .9283759674246586 +350 937 -.5276712577541895 +352 937 1.5845300595641227 +356 937 .33593589897353154 +359 937 -.8675817145462384 +364 937 -.09896096012442636 +395 937 -.2610300458963948 +397 937 -.7096622233710721 +398 937 1.0800313088042632 +402 937 -.9236534955188462 +412 937 .3885526363193196 +413 937 .3356969200339916 +414 937 .12264650856686962 +433 937 -1.0992759651452397 +454 937 -.596480594542724 +466 937 .32428145618382304 +468 937 .7392317748894298 +471 937 1.049293029798642 +476 937 -.379883052266004 +477 937 1.0826298095672942 +479 937 .34252081675875995 +487 937 .38457461072895416 +496 937 .4766015474442167 +500 937 .12648428125233516 +505 937 .4612860266779369 +506 937 .3442420223520918 +534 937 -.8585438585276682 +538 937 .25309071874747935 +552 937 -1.1362049165223322 +570 937 -.41698542259547833 +582 937 -.08252435070694188 +588 937 .43941264047469936 +643 937 -.8394933818375997 +656 937 -.06907749305127571 +663 937 .4245694451098714 +665 937 -.050349288511306295 +675 937 -1.3093641313411315 +679 937 -2.155359629334292 +682 937 -.3659613908324227 +690 937 .1066982091864377 +698 937 .5475037582285978 +703 937 .346020902956321 +718 937 1.125448680236472 +723 937 -1.3453089667053626 +734 937 -1.206492670719483 +758 937 .003322913433565805 +762 937 .05636896046761096 +769 937 .08147754371646462 +774 937 1.0077889584369808 +779 937 -.206593329091173 +799 937 -.3700231426525544 +801 937 -1.3573859493175782 +809 937 .08313710852688512 +813 937 -1.1723485985156488 +823 937 .35569639354306726 +828 937 -1.015114290432027 +831 937 -.28893122645165736 +844 937 -1.385715211938459 +853 937 -.6832981036303751 +854 937 1.0213748316017515 +860 937 1.3182657226037167 +869 937 -2.2438256831792636 +870 937 -.42466734035177317 +891 937 -.12472223884979737 +903 937 2.097464141508827 +910 937 -.3283580884453714 +912 937 -.033514257395044225 +931 937 -1.0624875868375527 +939 937 .3914906161905189 +942 937 -.7958946643888246 +955 937 1.1307326788488403 +975 937 .134603579023779 +985 937 -1.5510138193361516 +996 937 -.27542353309378853 +1000 937 .4776032133556206 +18 938 -.17914295260467364 +35 938 1.0625627726367464 +44 938 1.363486694649419 +63 938 -1.4852569405993334 +65 938 -.22608836198071847 +71 938 1.2819431320659338 +84 938 -.3117853194736654 +85 938 1.3715801568180637 +105 938 -1.1003477444883205 +115 938 -.864764411052035 +130 938 -.071173696860654 +132 938 2.02994031744302 +180 938 -.4877538477266714 +199 938 .5567797924455762 +202 938 -.10603779443437786 +213 938 -1.5456191446347534 +214 938 -.0024806543721234697 +215 938 .3858775122941972 +221 938 -2.309552757643532 +222 938 1.649065992343196 +224 938 -.0030750025456495397 +235 938 1.960494823317752 +237 938 -2.8771583070694033 +240 938 -1.0090465872672838 +244 938 .515855465061055 +256 938 .985503963353137 +262 938 -1.0591236924691858 +263 938 3.0857574244014647 +282 938 -1.114522878285874 +293 938 -1.8415035291865984 +303 938 -2.0106052329539073 +312 938 -2.288674221692887 +329 938 .8331671896815471 +335 938 1.3919484873014132 +343 938 2.373278660722003 +365 938 1.7191995749773545 +367 938 1.456336936591049 +377 938 1.0206124388847797 +383 938 -.14320311764714105 +410 938 .457523997188667 +441 938 -4.101057253379942 +443 938 1.3193310890503245 +453 938 3.0273959296461976 +457 938 -.7460682844054694 +460 938 -1.4825999746315837 +464 938 3.593406114967462 +485 938 .4798997606321464 +489 938 -1.0579509650728722 +493 938 1.2766805677179764 +501 938 2.388408475730204 +509 938 1.910721402332818 +515 938 -1.6762145643230195 +542 938 .24478140842879073 +546 938 .5528356836481878 +556 938 -2.806306270229632 +558 938 -1.059236946617734 +568 938 1.022864865717738 +583 938 -.1834140410077547 +601 938 2.0728668330397277 +622 938 -.36432058184332333 +632 938 -.022710295553252824 +636 938 -1.0940543219166272 +655 938 1.2287737086909125 +656 938 -.54052425349067 +664 938 -1.1661432695518448 +670 938 2.220594286109233 +687 938 .4451293580514617 +691 938 -1.1626746735880669 +700 938 .30796601878085794 +702 938 -.9692925147281529 +707 938 1.1446080893490225 +721 938 -.42401958253482647 +750 938 -1.563511454696868 +751 938 .24036672130924336 +777 938 -1.7078222039438828 +813 938 -1.0870616818881578 +822 938 -.26745645768070636 +855 938 -1.219310020770355 +856 938 .17590406067469538 +869 938 -1.006975796980234 +915 938 -1.9186430612289584 +921 938 1.682778399576567 +927 938 1.266409509217983 +947 938 -.19027972167749163 +957 938 1.0665779489053915 +981 938 -1.8457524403197303 +983 938 -1.3488817171861887 +2 939 -.022124437501666552 +6 939 -.8835857208902702 +16 939 -.4709520480601254 +20 939 -.12907964174475745 +28 939 .08214718199530821 +32 939 .44403874114039277 +58 939 .7130757259176554 +87 939 .3263947289200948 +93 939 -1.8983952345544843 +96 939 -1.0891989670295876 +100 939 -.17535145011329126 +108 939 -.7524473906687043 +115 939 .362936159530576 +118 939 -.1018639464539389 +123 939 -.163362808356367 +129 939 -.23914559232785051 +134 939 -.7678874497183331 +140 939 -.11686696396868489 +150 939 -1.3194667993800666 +177 939 .8038875980075135 +181 939 -.48773477951366584 +198 939 -.8735126578983455 +221 939 -.8780065446956523 +234 939 1.1658758662859012 +235 939 1.1076890087910038 +237 939 -.5333774506064378 +241 939 -.5349045848358567 +242 939 .7710020903643634 +245 939 -.5014582160546235 +271 939 1.0735001176694117 +276 939 .2571500977860597 +281 939 -.25601431225474713 +297 939 -.9722464366769307 +300 939 -.5017218635311164 +306 939 -.20714515437633862 +308 939 -.4660638137294965 +316 939 -1.4902972243872248 +318 939 -.4561244823375592 +324 939 -.6743755481386752 +330 939 -.741268800596831 +332 939 1.3211553139741345 +345 939 -.5292074456528078 +348 939 -.7608968885302851 +356 939 .1931710458748246 +378 939 -.5133330838200998 +383 939 -.25433956454229245 +395 939 -.38331853669908167 +421 939 -.0748919358285422 +422 939 .5839136497889867 +423 939 .1491374828972434 +431 939 -.11434161970071566 +434 939 -.30353580698569965 +439 939 2.027269654901737 +445 939 -.41681731018662305 +457 939 .08267952872464646 +459 939 -.08081708674169424 +472 939 .5567759423707495 +477 939 .7319968623172528 +491 939 .13935215769790243 +499 939 -.44377867109435065 +509 939 .4664906330324218 +510 939 -.4273082027570754 +512 939 .19041414063914514 +534 939 -1.5990617066209165 +546 939 .8935203915713376 +548 939 -.6350625658022342 +549 939 -.3964002586484586 +570 939 .27983591184088613 +594 939 -.6634509637488049 +595 939 1.6620348233912416 +596 939 .07388491745306741 +609 939 1.08052057827244 +618 939 -.055234425488483035 +631 939 .9508103440058301 +633 939 1.5568799352872005 +638 939 .07410184434883971 +649 939 -.7249803558797883 +670 939 -.4062926564352199 +672 939 .8243943700409119 +687 939 -.053362578464631286 +689 939 -1.6517761078707216 +693 939 .6150870086608214 +695 939 .521776338420315 +698 939 .5940157375400187 +722 939 .6012862658052296 +732 939 -1.4181958632488272 +733 939 .22787485010881012 +741 939 1.603530152181886 +752 939 .38966452743857494 +765 939 .5151877150631701 +773 939 .02339927145302371 +774 939 .1246899692743868 +784 939 .5235630087187437 +788 939 .6043866890014569 +805 939 -1.1839416285257849 +810 939 -.9626151045465252 +823 939 -.07638064024687219 +903 939 1.0620681141631554 +918 939 .4014677377075507 +926 939 -1.0642033141761214 +927 939 .3904357152365753 +945 939 -.3917092827470141 +960 939 1.0364952339420366 +985 939 -.4223210782655301 +991 939 .05234967954358033 +992 939 -.17352942654472134 +47 940 .781317460222788 +61 940 .193583235986921 +80 940 .22548704053408514 +121 940 .010560798317796558 +128 940 -.06289749083678034 +132 940 -.249652030053916 +133 940 .06704110739382639 +147 940 -.963989753550374 +154 940 1.5318692800916827 +169 940 2.0369229912999454 +172 940 .42006823320701964 +179 940 -.46093435621129697 +181 940 -.39005027431458195 +190 940 1.8970887411820587 +195 940 -1.2220578036153202 +208 940 1.053291473423573 +215 940 -.07638207067800927 +227 940 -3.1463026959315634 +245 940 .15280913855390188 +248 940 -1.965985369492989 +264 940 -.04978390527854026 +267 940 1.8113283769578528 +314 940 -1.0196303384632814 +319 940 -.1769837309814289 +330 940 .5094438422166249 +360 940 -1.309488034099083 +386 940 -1.5414395306381248 +414 940 -.5598378631553155 +420 940 -.10832055951404819 +421 940 -.14491143710623727 +429 940 -.17753711908987171 +436 940 -.1951925115194456 +438 940 .8030891168653476 +440 940 .6458399806715008 +447 940 .29962174856115187 +453 940 -1.133978756513732 +467 940 -.19606537791823464 +485 940 .4208939424813281 +488 940 1.1646340762073504 +493 940 .2792657035513588 +498 940 .1276719002816511 +500 940 1.197473577893348 +501 940 -2.8178620048110474 +506 940 -.7341920828216073 +560 940 .40139991164253325 +564 940 -.14349272929801518 +572 940 -.47137220220292475 +580 940 -.810487536534328 +582 940 .4967586077323047 +587 940 -.8894438249356493 +599 940 .2894049907969289 +609 940 .9671718445646644 +616 940 -.6142675172500738 +623 940 .34568773837303135 +631 940 -2.097353366870852 +639 940 .5896859506160137 +660 940 -1.2157248783163628 +668 940 -.21241293716327747 +671 940 .5463553209544175 +691 940 .7947266064722543 +692 940 1.6957453616750753 +717 940 -.6882437510407234 +726 940 -1.030261352080703 +762 940 .6634415430743058 +769 940 1.183540662021561 +773 940 .1848980519636838 +781 940 .0415963255735147 +786 940 .5650109171971518 +801 940 1.202610339662379 +802 940 .23346438469811515 +805 940 -1.3960235242033168 +808 940 -.32684192710014215 +809 940 -1.7198899165941872 +822 940 .7150478052208507 +825 940 -.4616026494032879 +826 940 -.9293463219627902 +866 940 1.599332900810098 +875 940 .9477474448729218 +905 940 -1.332328231495422 +907 940 -.09999575754532639 +915 940 1.4254208386303573 +927 940 .07486531014851211 +930 940 -.24618376721531124 +938 940 -1.6301391615151626 +946 940 1.4269702245073195 +3 941 -3.286044449173777 +16 941 -1.7053562400339346 +35 941 2.276776642597904 +40 941 .5384046101288953 +53 941 1.3081999998440688 +70 941 1.0619093047459396 +74 941 1.501254074815724 +97 941 -.1439853706726133 +104 941 -1.0506473071078473 +132 941 -.3389288122419405 +144 941 .01799939902463782 +183 941 -1.9400826643073228 +188 941 .8631846390313495 +193 941 .5203780655424391 +204 941 .5326791256179243 +208 941 -1.2996638058965186 +209 941 1.8424189655428147 +212 941 -.889709913888327 +214 941 -1.0163096848579785 +216 941 -.9736024401863441 +217 941 -1.2875105822729016 +237 941 1.1546528754394554 +239 941 2.2173709944678888 +245 941 .7072874659397006 +247 941 .10719690500009828 +258 941 -.3183768172387792 +281 941 -.07992528541545567 +289 941 .27203991720688386 +322 941 .9239713059451848 +329 941 -3.1135599054517495 +330 941 1.3731667967590688 +332 941 -1.3106710461185678 +337 941 .3152293433314593 +341 941 2.56040270462479 +355 941 -1.0206660215073913 +358 941 .027923549640094764 +378 941 .013084979335945796 +385 941 1.070623859773617 +389 941 .5706740254761412 +390 941 -1.704422638579828 +391 941 3.224569354123638 +420 941 -1.738384599390219 +427 941 -.5375349099477761 +433 941 -.3294111130365864 +435 941 -1.4410660779225946 +439 941 -2.656694544754135 +445 941 -.8751435243356064 +450 941 .1415617734562526 +468 941 -.3456158657827387 +474 941 -.7772180466054343 +476 941 .1952358173558424 +489 941 -1.8265770904624516 +498 941 .7713819294905839 +505 941 -.15588484037663947 +512 941 1.2143163433068864 +543 941 -1.219565921140629 +548 941 .020866332531669307 +555 941 .1514711003777161 +560 941 -.3151230409889817 +564 941 .7935827936671898 +583 941 -.667899003363338 +588 941 -1.0185603775498997 +598 941 -1.5759427274792202 +602 941 .19424694465263284 +614 941 1.122238643068914 +630 941 -3.0268181643923597 +638 941 .7105858272759114 +639 941 -.46787599102821303 +650 941 1.290886204527201 +658 941 -1.0554794767775368 +661 941 .07301542540061573 +662 941 -2.7364794476629086 +670 941 .5427951403982546 +672 941 .7949231785269735 +680 941 .6431666629024692 +690 941 .3734424439281232 +691 941 -.21780454001421307 +697 941 .1002614878288736 +712 941 -.04265482410857008 +720 941 .710596481553296 +723 941 -.378781333075751 +727 941 .0026239084356648734 +736 941 -.975448072352455 +756 941 .334164648804212 +761 941 .8727299103043972 +762 941 .6363500671138522 +763 941 .2902751511374446 +764 941 .34657772589315705 +765 941 -1.8535296122437972 +767 941 1.9965946767813685 +784 941 -1.5387626526183944 +816 941 -1.3719551984887388 +817 941 .6926389788996328 +819 941 -.6772652265285892 +827 941 1.4035107695861226 +838 941 -1.3431024608335114 +852 941 2.4369824452817666 +853 941 .5707604564734866 +854 941 -1.9988598641114295 +860 941 -1.1479538239690295 +874 941 1.507934144945518 +904 941 -.622769429618738 +908 941 1.545951326604969 +918 941 .8928131554923826 +923 941 .5108736327124905 +945 941 -.6392540899512544 +959 941 .8812785557964737 +965 941 -.47537859952255024 +967 941 -1.47901762746339 +983 941 -1.2179759554550316 +986 941 .4261153855463722 +1000 941 -1.1782196590880574 +20 942 .3848189579443002 +25 942 -2.552107377088679 +34 942 -.5664623537136485 +50 942 .933340730555128 +55 942 -1.179956991840081 +63 942 -1.289045668685789 +75 942 .6267604612542954 +94 942 .6189397526424865 +111 942 .570129328806646 +125 942 -.3932928298131987 +134 942 .13272733929045533 +141 942 .8370225566652059 +150 942 -.7300852694700071 +160 942 1.9126461443452492 +176 942 -.034154922279106506 +187 942 -1.246870884121746 +209 942 .9542093519351816 +246 942 -.8894328049965018 +251 942 .20830644427709952 +278 942 -.07012896317153794 +287 942 -1.6788493340934854 +288 942 .20761703062366832 +297 942 .8358592642372054 +302 942 -1.2303519256099336 +351 942 -.11549561692362537 +377 942 .47275536160893794 +379 942 1.507176285007916 +392 942 -1.7178508027358579 +397 942 -.14395220750494994 +398 942 -.06517084646255064 +408 942 -.5376751282329495 +413 942 .4906713475313508 +415 942 -.3688922029189765 +417 942 -.41728042684799727 +420 942 -.5996090036725387 +433 942 -.5854530233988396 +462 942 -1.2226930191880685 +467 942 .06909966629386144 +468 942 .5887014278891374 +479 942 .7028999486933589 +512 942 1.3595644601632404 +517 942 -.16551707190910944 +524 942 -.07720926071465624 +545 942 .9486723307831254 +548 942 -.49359267641132476 +551 942 -2.0247168128094977 +576 942 -.5012100764904928 +586 942 -.2889325033481547 +587 942 -.8069496803537975 +599 942 -2.4135432188051285 +604 942 -.5947842061487815 +617 942 -1.4263246416692552 +623 942 -.3410418632770195 +624 942 -.596798043454839 +630 942 -1.3389054812547774 +633 942 -.08013185878944999 +641 942 -1.1912262303339138 +643 942 -.4191156395282015 +648 942 .4948341288778565 +668 942 -.7663622286385614 +676 942 1.0212248875293435 +684 942 -1.0338522511614936 +697 942 .1842384114684669 +699 942 .5267581290686738 +701 942 -1.3270683681684519 +720 942 -.4704008385107611 +730 942 .30445581272930655 +743 942 .8078959962904114 +750 942 -1.3512590087020315 +752 942 -.06932918484042033 +755 942 -1.2246885202078024 +767 942 .05622251574278622 +780 942 -.2301479234867896 +784 942 -.8047852616959044 +787 942 .9083994562263799 +792 942 .5448622566171041 +793 942 1.6077362682518754 +812 942 .10913405287596793 +817 942 -.15109750006290767 +818 942 .5400120225287026 +823 942 .4352597443033379 +829 942 -1.2841156712882367 +835 942 -.8306685876808084 +847 942 .8990414369965632 +849 942 -.03916056751548344 +852 942 1.0901034811083143 +867 942 -.4636475297699803 +874 942 -.604826635306404 +913 942 .8329596659254148 +915 942 -.4695501251559735 +916 942 .785486720644125 +918 942 -1.2304660295471752 +919 942 .3418465678071345 +922 942 -.5373827611223113 +923 942 1.6306891509647676 +932 942 1.6037113601325852 +940 942 .935023889225709 +942 942 -.13790749409661873 +961 942 .1725429704601881 +969 942 -.9069968887958026 +974 942 -.7367321635018652 +990 942 1.1839874080617183 +994 942 -1.1322151380903527 +997 942 -.12978380488477445 +998 942 1.8085824259286927 +3 943 -.1609964107780797 +28 943 -1.4374799860853773 +34 943 -.7335648958145595 +44 943 .37819030838802037 +56 943 .38519853454691527 +60 943 -1.0748329349418035 +66 943 .7689512789943027 +71 943 .5264293943918064 +84 943 1.1713749268769063 +85 943 -.8455195313456387 +94 943 .11999530617081697 +112 943 -.4318465515964429 +113 943 -1.4108335379966739 +133 943 -.1213598539705441 +148 943 -.3789191178071273 +150 943 -.9148154814171099 +156 943 .4406581957266031 +157 943 .6971539491046984 +161 943 -1.6972944302991753 +162 943 .9937633628768965 +167 943 2.0248085819098307 +174 943 -.53064189034913 +183 943 .14104347918136476 +192 943 .8098447743967283 +207 943 -.25023476192357336 +219 943 .9035390721148927 +255 943 -.07670830768603923 +263 943 -.376765195975832 +276 943 -1.9530436336068282 +278 943 -.24770299661454087 +280 943 -.1750976691735201 +287 943 .44983127487397284 +288 943 1.4617460337692243 +291 943 .29568644027334273 +294 943 -2.0043060621599307 +312 943 .38043705772706776 +317 943 -1.2787110257117713 +346 943 -.7559155165354765 +355 943 1.4527852898785645 +366 943 .3501117543189704 +368 943 -.8107437795210508 +380 943 1.1822745859956005 +392 943 -.2948424223505697 +401 943 1.6367256360516462 +408 943 -.1508554262979586 +412 943 -.19434918110516908 +420 943 -.35832170063681695 +431 943 .5868229951731512 +435 943 -.9351841470698656 +454 943 .46327181577507826 +460 943 .9645953514489463 +461 943 -.6397302631649093 +466 943 -.03968900936143584 +469 943 -.08940986740387839 +473 943 2.225711745625647 +489 943 1.1043578851210194 +512 943 -.26406263637269406 +514 943 -.4225388137441326 +518 943 -.02352917795802277 +519 943 -.7614025680051122 +559 943 .6704320360599313 +582 943 -1.1566863457821062 +591 943 -.7362969464212865 +596 943 -.675678196140239 +602 943 .13747354354318703 +616 943 -2.3183393934330976 +619 943 .18497035143377766 +621 943 -.24191879684069895 +622 943 -.9458834976040309 +624 943 -.9935847417355831 +638 943 -1.456654142621819 +644 943 -1.391058390069386 +680 943 -.0817145756538056 +683 943 -.5755260971412188 +712 943 -1.2687790338555585 +714 943 1.2341575012408663 +719 943 -.5822728352844896 +721 943 .23133661575309108 +745 943 1.024972071371666 +760 943 .4294550573966536 +765 943 -.07915456057380624 +773 943 .9728734768790087 +792 943 .26523044985181354 +800 943 -.659657390885407 +802 943 .9591102521229008 +804 943 -.09731613860967418 +809 943 .09425237478704479 +814 943 -1.0487241273776184 +821 943 -1.1973072825927975 +822 943 -.0633497739149504 +834 943 -.8245287151533873 +835 943 1.1564571794853062 +843 943 -.6578896992057438 +849 943 -.9263263753677001 +850 943 1.5946208339159917 +854 943 -.5145822258146089 +857 943 -.2401597360027073 +859 943 .3147263742241828 +880 943 1.3507737568407268 +881 943 .20643220533713405 +901 943 .6923039133036704 +910 943 -.6873558058696928 +913 943 -.2452214121422161 +920 943 -1.946442555692207 +934 943 -1.1737004894432463 +940 943 -1.656797474340939 +946 943 -.8962516680370868 +949 943 .9218301911015224 +967 943 .8460130413215268 +971 943 -.7091179567604728 +976 943 2.546772481763431 +979 943 .76361427176268 +9 944 -.6071337856292749 +26 944 -.721218270675788 +42 944 .7572838540092465 +59 944 .38855717912524895 +77 944 1.6131009675849952 +82 944 -1.4776764983964574 +104 944 .04631216870088082 +108 944 -.5764238454874745 +113 944 .4142963270418812 +115 944 1.162450079422626 +123 944 -.7829929061808457 +129 944 .5597904982991936 +136 944 -.07056028460432556 +138 944 1.9135394230257436 +141 944 .04101716363501243 +153 944 .8465830136154056 +171 944 -1.381164372241974 +180 944 -.3265852298521799 +191 944 .322869880302153 +197 944 .2757728945315153 +224 944 -.4583227154642767 +237 944 .2013022516071069 +258 944 .6414987186883452 +265 944 1.0583223298003532 +271 944 -1.2482018502300887 +315 944 .5036804990291234 +330 944 1.0581337921936496 +343 944 -.7511746660767563 +347 944 .26258709910246764 +377 944 -.5535295462850086 +378 944 2.130806329982523 +381 944 .6588193192120084 +397 944 1.1318162037525672 +398 944 -.513508785191678 +412 944 .18819399838439552 +414 944 .48685266048072784 +421 944 .1846173698160855 +427 944 .2925794273016781 +429 944 .38859803926364234 +436 944 1.1387046029840773 +439 944 -.19353308648107007 +441 944 .43455967402289264 +478 944 -.3722513822934802 +482 944 -.8284170868907026 +484 944 .684846412082355 +492 944 -1.0303738993175917 +498 944 .7437622587900811 +505 944 2.2024546061949195 +509 944 -.019641044225824092 +510 944 -.33219409608944717 +523 944 .11564489041411657 +529 944 -.48728977279612645 +560 944 .0799050913753751 +563 944 .5986630735879837 +583 944 -.7219683190900584 +594 944 .06999060431933515 +617 944 .36205395895307196 +619 944 -.34945582075136217 +620 944 .9210642065777559 +638 944 .1256614017149127 +648 944 .5203997398643887 +649 944 .5104296543468791 +654 944 .10407165050264097 +667 944 -.7727119193629498 +668 944 1.2465079134085908 +673 944 -1.2453869004968914 +680 944 .3006223598012326 +697 944 -.11627443790873657 +718 944 -.5821735726357323 +725 944 -1.1306519184541532 +729 944 .2994233121458035 +736 944 1.3562049117272919 +737 944 -.1209752079349162 +740 944 .046547747513745505 +744 944 .5804780717325992 +756 944 -.8401415273575126 +775 944 .5061901633164697 +788 944 -.7007506267782698 +808 944 .12948551027717847 +821 944 .2121709149203369 +825 944 .546451509846049 +831 944 -1.4877898070148279 +849 944 1.0195871398437955 +855 944 -.44218551573556747 +863 944 .34137202015995377 +864 944 -1.190958268568645 +870 944 -.8899283626526846 +881 944 .3096135055748025 +893 944 .33661273700631733 +894 944 .57701138031899 +906 944 -1.6079390760475725 +907 944 -2.581867334744107 +923 944 .10867477756974564 +932 944 -.8974561175391613 +937 944 -.27889871477178485 +947 944 -1.2144973736309037 +951 944 -.01352263464798134 +955 944 .7062593473764812 +963 944 .14006574670180516 +964 944 .46736448950175996 +967 944 -1.1533243461618257 +976 944 .41927392040826816 +985 944 .08256008148646635 +991 944 .6756984381903541 +993 944 -.36453262293460875 +11 945 -.48896545109284817 +16 945 .7488272883167544 +18 945 .46524129898796895 +46 945 -.06160882511244127 +61 945 -.05401115239705509 +63 945 .17683491684645675 +102 945 1.3985958078999672 +104 945 -.6481858007413742 +106 945 -.29473942365752087 +108 945 .6914710611257795 +110 945 1.2197905961825675 +113 945 -.9147258987517347 +122 945 .02822084573437762 +127 945 -1.5669258980389755 +129 945 1.634813910061223 +131 945 .30106156015941765 +133 945 .21293428861049024 +159 945 .7061012025903644 +163 945 .9423543830640905 +170 945 .029389011902608342 +182 945 -.04064922476646554 +187 945 -.035392389058775106 +209 945 -.8805264671907846 +222 945 -1.8726678611575278 +254 945 -1.2264365810845836 +255 945 1.2074922809351343 +259 945 .6738127707724602 +270 945 -2.0719130346101786 +281 945 -.38265754015023484 +294 945 .7921973111782564 +310 945 .643505337013974 +320 945 .687102648215677 +331 945 .15557035643609995 +350 945 .5809177642345991 +351 945 -.43797651886567324 +354 945 .7581273434686373 +356 945 -.5169527451734514 +365 945 -2.120437801505342 +379 945 -.017872402161998573 +388 945 -.9009442503285866 +401 945 -2.132003212646378 +410 945 -.34481519200711375 +420 945 .1702406713803139 +426 945 -.11567639775101118 +449 945 -2.0519443028579887 +466 945 -.1881445450167806 +468 945 .17944024565632835 +471 945 .9995056344129309 +472 945 .2865445867317013 +492 945 2.987333330451497 +495 945 .0534377186804746 +501 945 -2.1610263875674476 +522 945 .2128836288228108 +556 945 1.0061549953023536 +587 945 .4014959439551651 +588 945 .0064163796504472445 +610 945 -.40890842802165095 +620 945 .9864282347428224 +626 945 .03293945902937484 +633 945 -.016229279402788798 +645 945 .4758026218167762 +655 945 .04820678202897745 +664 945 .4402335660766552 +665 945 2.5163621705318833 +705 945 1.1766292040675983 +709 945 .7804431093416845 +722 945 -.498799463558654 +734 945 -.8447043305891063 +757 945 -.7584846676963111 +763 945 -.044721796123736814 +775 945 -.8565107180024304 +794 945 1.494761793985472 +795 945 .22868055214699348 +811 945 -.13796405811859816 +826 945 -.018116754669154786 +827 945 .6898313641576606 +833 945 -.4851436662389467 +840 945 .88032903354395 +845 945 -.23315633177627856 +862 945 1.7858102763757704 +867 945 -2.1428290287155134 +874 945 .621017530357959 +892 945 -.6268724864102615 +893 945 -1.673047338418325 +894 945 1.0866439972277384 +896 945 -.49470517599878716 +902 945 .8866596946071175 +907 945 -.3562591353621128 +914 945 -.9194087842907616 +918 945 .30934215052658576 +921 945 -.35834838133977814 +925 945 -1.7647629021048228 +928 945 -1.3981852030916158 +932 945 -.8989494671564938 +945 945 2.234566285360203 +948 945 1.2406970850489951 +949 945 -.5006831780103358 +957 945 -1.5862181105345534 +960 945 -1.319879853866805 +981 945 1.3998402478152312 +987 945 -.6043136998111747 +4 946 .26196611072238146 +10 946 .009043720341357836 +83 946 .6954087344154631 +95 946 -1.304516229166497 +96 946 1.825066302338364 +102 946 -1.45718630468554 +135 946 .09645927327753494 +149 946 .349550470970269 +168 946 .12774185478609035 +179 946 .08145396084132589 +190 946 -.08213540537285902 +213 946 .8911995837576079 +215 946 1.2877237688812966 +217 946 -1.2155314883470234 +227 946 -1.7290147612608047 +243 946 -1.0680049334680977 +246 946 .8689882963149431 +252 946 .08441649329978171 +264 946 .9407642931111481 +269 946 .1953458795579064 +275 946 -1.0737148348784114 +278 946 .39316553233177337 +285 946 1.4547081748317638 +297 946 -.8605246055696687 +325 946 1.7023104080441955 +329 946 1.2889574442069511 +333 946 -1.2867094393923677 +337 946 .5368602719631395 +372 946 .09159526533066481 +397 946 .11523229901574156 +405 946 -.10084679573835195 +426 946 -.7535355866207578 +430 946 -.19589588877048503 +432 946 -.1811401485458267 +436 946 1.1224376706826353 +440 946 .15503152742313392 +446 946 .13825353224281633 +447 946 1.1571400307575366 +466 946 .045636619268494126 +469 946 -.31171541338025727 +478 946 -.3946261516358777 +487 946 -.9373519887724171 +503 946 -.4338517959417112 +506 946 .5829563103327223 +508 946 -.1656004600049495 +511 946 -.3055793542774079 +532 946 -.8721063101933725 +533 946 -.38399756320712763 +542 946 .5241651265590073 +547 946 .6877459694969396 +552 946 -.5260086767964975 +556 946 -.7032326050502649 +564 946 -2.4984459767153573 +567 946 -.4957046987676988 +577 946 -.494544720530393 +583 946 .23125512664857847 +599 946 -.785770680119403 +610 946 -.5717399135524657 +614 946 .33647776051602596 +619 946 -.14618721306518714 +622 946 -.47835452955357094 +639 946 -1.1391231370703376 +643 946 -.398728586137383 +644 946 -2.6915420498899976 +650 946 -.8123374784587705 +658 946 -.3787963760924783 +671 946 -.6028335442315679 +680 946 -.4577716627870524 +745 946 1.3569063664415475 +769 946 .015876519336553763 +786 946 1.1250209759301957 +787 946 -.048194396621472964 +790 946 .23140193495105432 +793 946 1.6452724116493775 +803 946 -.01592380752034584 +832 946 .5313745461856415 +846 946 -.92947832901909 +849 946 .9753640885828023 +851 946 .32741825056351714 +852 946 .410781284221161 +876 946 -.12012963017942713 +883 946 -.6105730938082681 +887 946 -.8806578657234594 +888 946 -1.3244152581334927 +889 946 .18313898051921865 +912 946 -1.4108481631940903 +917 946 -.27898721640530694 +921 946 .6690695711034141 +928 946 1.0217788693381733 +932 946 1.7012587138302158 +944 946 .32828909685534013 +977 946 .23267832520709192 +992 946 .5699196416074491 +1000 946 .9545485166567889 +1 947 -.13431985096867718 +21 947 .06744273098169004 +26 947 .46507147430367296 +27 947 -.8850156274044878 +51 947 .05783405636576858 +52 947 -.3095364657072096 +53 947 -.4403671775092136 +54 947 -.2602490797023687 +72 947 -.04660827417425076 +77 947 -.09803830091473317 +79 947 -1.489011959818444 +94 947 -1.2548111706391367 +95 947 .38076987087476327 +97 947 -.7565562896386877 +110 947 -.21358905176604012 +117 947 1.1958275142845212 +120 947 .6355362256114493 +131 947 .0076373080579960895 +132 947 .5349587414952577 +136 947 .7966566887047696 +143 947 -.5498570804326861 +176 947 -.08769687233400703 +185 947 -.05201217619853387 +192 947 .14151045211258106 +197 947 .08323263279314072 +217 947 1.4976546635112484 +242 947 .9640565926553009 +246 947 1.030413106627153 +261 947 -.3948306916958104 +262 947 .9769790361840375 +269 947 .7987031551135354 +272 947 -.7165393223797059 +287 947 -.20072132909675924 +301 947 -.40100573886590873 +304 947 -.5491778326065863 +310 947 .4873909758790981 +334 947 .7282445799561624 +337 947 .4949654651741262 +341 947 -.6314634603368314 +342 947 .07473843899130747 +346 947 .029074458176659074 +347 947 .6949943667263694 +352 947 -.3176692270087974 +359 947 -.342752848051217 +367 947 -.14508771298843093 +375 947 -.030387226671989093 +381 947 -.1682866000179963 +389 947 .01942299500008422 +407 947 .42961059836174464 +416 947 -.49838768539369677 +435 947 .6194263453101156 +453 947 .10913722021040966 +463 947 -.08941670878081599 +470 947 1.1156181846739834 +477 947 .6358029136050821 +479 947 -.06672350755867562 +493 947 -.1615184465842004 +500 947 .1191892230609834 +523 947 -.7288797160486198 +526 947 .019257640616863636 +528 947 -.1534775293775186 +529 947 .0771870987762941 +540 947 .9293970063025779 +553 947 .6301640183019336 +554 947 .2845947291511583 +556 947 .3801210544985618 +562 947 .32253835061675173 +569 947 -.7371150935744807 +572 947 .5983768121883553 +584 947 .23675658950909823 +585 947 .041292934215582264 +587 947 -.02966597703921902 +596 947 .28443230568608163 +597 947 .3106697729160912 +618 947 .5272371185426976 +619 947 -.18109091633357827 +631 947 -.7136674328896807 +636 947 .029741897310489 +640 947 -.6084887690754127 +643 947 -1.1661082406101404 +664 947 .6018422564161768 +692 947 -.3016832929910319 +694 947 .07533692396523915 +708 947 -.2786070585073862 +725 947 .030487106756700886 +755 947 .7294003882188808 +757 947 -.7568170124297139 +759 947 -.4209069268485949 +766 947 -.4633634550833116 +782 947 -.3268529438776383 +797 947 -.18270768210291316 +801 947 .6402279792210201 +807 947 -.377230578123505 +825 947 .9558906441519316 +828 947 -.9974024402826999 +832 947 -.4187262601626581 +835 947 -.18118287819232554 +848 947 .0921291998641513 +853 947 .11617038149947173 +857 947 .3171916354764093 +862 947 .0635516131808337 +881 947 .8197012952936675 +887 947 -.039404018223429635 +898 947 -.5268985011607129 +899 947 1.071624162880733 +904 947 .09243414385284515 +907 947 .9326867209434752 +909 947 .27371249423738536 +922 947 -.3503775820296687 +929 947 -.0017024905062092144 +936 947 -.9531861899292569 +943 947 .07625230654339776 +946 947 -.9887347837666486 +953 947 .22946511418361354 +956 947 .04633824689032373 +960 947 .8596354612755512 +984 947 -.03517195995682543 +1 948 1.293580227469827 +18 948 .7847827203202907 +29 948 -.6088716384102084 +49 948 2.415214717183859 +51 948 .7076717717357112 +58 948 -1.5090050723244481 +68 948 .2701576214826533 +71 948 -1.7836900496229635 +77 948 1.349171535250822 +98 948 -.1907164552867164 +99 948 .8149565099225913 +104 948 -.13794099538758614 +105 948 -.9036852265819847 +106 948 .22411151403536556 +112 948 2.076031627620084 +118 948 -.980815415016621 +124 948 -.07168613471670723 +131 948 -.12104540684447257 +132 948 -1.7511455362167918 +136 948 -.5813743036815926 +138 948 1.1552061611401456 +144 948 -2.043106111469597 +152 948 .09062317861248154 +160 948 -2.6575523514892923 +161 948 2.0735662963486305 +174 948 1.6709336078033195 +200 948 -.04816891733523854 +204 948 2.3036779711864313 +210 948 .4881518059547053 +226 948 .40587512232064277 +227 948 -3.6352440833293445 +233 948 1.0356662850111285 +236 948 -.2737982234802474 +239 948 1.3854243361847893 +245 948 2.058610929403434 +273 948 .7606770545332188 +291 948 -1.0113314431422895 +293 948 .2734140818958135 +302 948 -1.5088069704937253 +318 948 -.5505552985021587 +334 948 .09520167196899984 +335 948 .7409355632478881 +338 948 1.538504176778828 +347 948 .3937765323577989 +350 948 -.5461337874543443 +351 948 -.26304391586759146 +356 948 -.06412570573530685 +371 948 .08890141564045903 +384 948 -.5481938561667442 +412 948 .24619050016289037 +413 948 1.5311608027229584 +428 948 1.3876934067864126 +432 948 .6646083670605948 +440 948 .8001838100475125 +441 948 2.400757637299243 +442 948 .616591384062486 +444 948 -1.5105467441906841 +458 948 .9364675430880541 +463 948 -.372650344844804 +468 948 .18698672489205687 +472 948 -1.0340088075297078 +493 948 -2.08678954712506 +511 948 -.4905783058273182 +520 948 -.5682556273209516 +532 948 -.46448717245729276 +536 948 -.04059671700948814 +553 948 -.9459155426845716 +559 948 -.3696996150709522 +560 948 -1.018710082489597 +579 948 1.6327833526369018 +592 948 -.5408212248233567 +597 948 .18389314552939995 +603 948 1.6073793030917263 +610 948 -.06681161685771823 +619 948 -.3660303766232683 +621 948 .7158191254734777 +632 948 .35941217151580507 +640 948 -1.289517651923846 +643 948 -.9670080670558585 +646 948 -.9854341834326673 +648 948 -1.7899316586089034 +650 948 -1.7910996335598175 +651 948 .016580668315290203 +675 948 -2.4565570256899187 +690 948 -.2616124083478863 +692 948 .5253149267184611 +694 948 -.447299934217211 +720 948 .951711103438834 +739 948 .05237324440441497 +756 948 -1.3885007524646404 +770 948 .9618988030703357 +775 948 -.33702671641602877 +776 948 -1.5899454685703225 +781 948 -1.25371248951589 +798 948 .28702598083226943 +813 948 .728064919876596 +815 948 -1.4657891584014673 +820 948 -.16644652063813864 +821 948 -.8096684288843325 +822 948 -.29563202972736 +827 948 1.0850572946361194 +858 948 1.1956668882392418 +871 948 -.02778861902511884 +877 948 -.6682809245928876 +878 948 -.7214988832139383 +880 948 -.5064181973332635 +882 948 -1.5065226965030412 +884 948 .34592364448390717 +886 948 -1.7520739715919809 +887 948 .9842242887280724 +898 948 -.3701923700915516 +913 948 -.545641465769023 +915 948 .7774307526985331 +922 948 2.5341324289512293 +935 948 1.7093049703325522 +953 948 1.265882224040117 +954 948 .141518418404864 +963 948 2.191248046131678 +968 948 1.2808156286030445 +970 948 -1.261258579743373 +975 948 .09108867353448469 +980 948 -1.0775933001243807 +982 948 .29393627648893367 +984 948 2.12152096692714 +986 948 .46801108175808614 +990 948 -1.1278175862197415 +991 948 .5464425639942261 +9 949 -.5679774694641064 +14 949 .09685998089873993 +18 949 -.4710948304438142 +23 949 .7240657283233153 +46 949 -.685552786140976 +50 949 -.5872409809808575 +56 949 -.31389796539189624 +68 949 .44983610053146095 +89 949 1.1580562116991988 +102 949 .5412168633593758 +125 949 .16274597898362425 +128 949 1.0923687206755504 +135 949 .19276201386217595 +137 949 1.8686919143282543 +145 949 -1.1705389043062258 +157 949 1.590213344431783 +163 949 -.3467399491832263 +172 949 -.39295694199720893 +174 949 -.25512090243829855 +176 949 -.0230160664734953 +177 949 .02238649792030703 +205 949 -.44110869264855845 +220 949 -.1422522761473637 +225 949 -.8094663350011252 +226 949 -.7945454102921143 +232 949 .18850186169793498 +242 949 .7907543586779845 +261 949 -.012165865647227998 +279 949 -.3846258997849993 +283 949 -.10817664763790599 +288 949 .4127546732527374 +291 949 -.07919609954712226 +293 949 -.08749053248708402 +304 949 -.3420765754444185 +305 949 .250852941949342 +318 949 .14630013091427663 +324 949 -.21227785313568248 +333 949 1.190531128866725 +334 949 .8039663505985359 +344 949 .19777683929870843 +346 949 -.019314242456255515 +357 949 -.984596596724065 +360 949 -.6642806656913229 +361 949 -1.6362149059426543 +376 949 .1264368033069198 +402 949 -.38453636849547046 +426 949 .629774347109929 +432 949 .3274999586033328 +455 949 .5404792897369404 +458 949 -.8137112805718759 +488 949 -.8062814191957084 +510 949 -.4137711842056354 +533 949 -.3207012521299928 +566 949 -.6776929845880454 +571 949 -.7212451417553354 +572 949 -.15563048147532405 +578 949 .1287435619697867 +589 949 -.647667350863048 +619 949 1.2316854189784714 +629 949 .133418330546602 +644 949 .8457424609032106 +645 949 -.04708497469334795 +667 949 .6573597061627424 +668 949 -1.0439093190401336 +678 949 .32895513245900243 +682 949 -.17470531556433005 +686 949 .3445513990248972 +691 949 -.5365463152528509 +693 949 .8525215871807146 +705 949 .38981476954573957 +716 949 .5014823760128541 +717 949 .07778468031995688 +719 949 -.14953450672872665 +726 949 1.537986045453494 +751 949 .6384386074346037 +765 949 .5725078488025696 +774 949 .15039131018222412 +783 949 -.31958640665893456 +794 949 -.15770257897025897 +803 949 .15375035953729244 +809 949 -1.1659619538597963 +849 949 -.45848965976765127 +859 949 1.5429978565229525 +865 949 .4414240777997205 +877 949 -1.4023203240353563 +882 949 .1458845802673487 +885 949 -.5389378215928462 +905 949 1.3458313456478488 +910 949 .43537054012778653 +918 949 -.029770316910421125 +923 949 .11165408967220085 +927 949 -.5103194209879632 +937 949 -.5892165367478049 +964 949 -.8597190879045206 +969 949 1.0701090325570923 +982 949 -.10445444310564267 +987 949 -2.6572079218615605 +993 949 -.20305300845185026 +998 949 .5919350359568094 +5 950 -.6021403842561699 +18 950 -.65881763592005 +31 950 -.7993178120297959 +35 950 -.2162724133724837 +41 950 .7734666478676366 +42 950 .4797821439549003 +51 950 -.15721334241450569 +62 950 .06600178961079471 +72 950 -.4691209955851606 +101 950 .9366305408880378 +112 950 -.09976701960226281 +116 950 1.33166949750712 +133 950 -.11019366117854729 +140 950 -.5089553901690875 +141 950 .26694251060619834 +151 950 .7670839673091213 +157 950 .7969210557483472 +164 950 -.25843708599903453 +165 950 .1106055072056153 +171 950 -1.3394673960625516 +172 950 .23593680615556478 +184 950 -.2684520218685481 +186 950 -.12815681300913057 +187 950 -.009093625357606439 +193 950 -.5776783647448885 +220 950 1.4700306309389382 +222 950 .3658951760370311 +240 950 .42473338696526947 +254 950 -.1061838075067928 +255 950 -.7924028814381987 +287 950 -.05335258408798593 +306 950 1.0591328828301994 +316 950 .24344252519662535 +318 950 -.6360912720727453 +326 950 -.6646798709104385 +330 950 .538292467260495 +359 950 .5464798607809102 +366 950 -.3989708587103447 +374 950 1.7590340168701213 +384 950 .6949575079747434 +389 950 -.018499145017005725 +405 950 -.8848496380355969 +412 950 -.5517552630946493 +444 950 -.2554328756588523 +452 950 1.1791282490511386 +453 950 .7103914908233218 +461 950 -.7522605920647404 +465 950 -.894369076051256 +469 950 .26750918806510016 +478 950 .050999191136041164 +479 950 -.33575433597597754 +499 950 -.3550636090733662 +508 950 -.43433448823247967 +517 950 .3609153302058818 +528 950 .7407713691720246 +549 950 1.572734862571986 +560 950 .40480176038478255 +563 950 -.06806417497133829 +566 950 .28503820593913304 +587 950 .37148132400487355 +593 950 .19254670271800955 +623 950 -.12806351220917345 +624 950 -.520354712741304 +630 950 -.6409100801243444 +642 950 -.16228005555092406 +651 950 1.6836268340471463 +658 950 .447723821015223 +672 950 .092802999403865 +675 950 .56626835189047 +690 950 -.008945869841379434 +711 950 .12280922769739243 +717 950 -.36174046351139116 +718 950 1.4612987668777935 +725 950 -.3549387682341493 +731 950 -.9332128060872367 +732 950 -1.0915812561220122 +734 950 .6830548809613565 +739 950 -.939465961994682 +749 950 -.2592563669827683 +755 950 -.3974998828490715 +760 950 .5948987551429042 +767 950 -.7665914903176486 +775 950 .5491600778611337 +776 950 -.3274802407196037 +779 950 1.0346504725540957 +783 950 -.05240952048501415 +788 950 -.025906830039753914 +789 950 -.5838029653334663 +811 950 -.29934859069151876 +814 950 -.14276496631061453 +820 950 -.1915909815199879 +825 950 .5548819436022161 +828 950 -1.494098683318148 +831 950 .9033187761516083 +833 950 .08563424248524423 +835 950 -.450696049493996 +840 950 .2437426236159283 +856 950 -.05308382084852753 +860 950 -.5880625029320495 +863 950 1.090192709690943 +864 950 -.10329939544522568 +868 950 1.3554101826216152 +880 950 -.0640872610594596 +886 950 .5668626772432118 +887 950 .157738605433017 +906 950 -.10205742767476214 +949 950 .7041110513002393 +954 950 .020164416854878825 +955 950 .5057898605013191 +966 950 1.0476067471422954 +972 950 -.02189157651597659 +976 950 -.04740948591562084 +987 950 .2798162443080864 +998 950 -.032413343091691776 +999 950 -.3263258394623586 +12 951 .1793333675958651 +20 951 .9980852949351207 +26 951 -.6719962077021302 +43 951 -2.0160538671478108 +58 951 -.29897032871344725 +65 951 3.4305807408851696 +68 951 1.342598110079945 +83 951 -1.4928703026517927 +88 951 -1.8666763451243704 +90 951 1.8877359347108729 +93 951 -1.835088929362577 +98 951 -.21533368078900691 +113 951 1.7072700590176788 +121 951 .4284995381525396 +127 951 2.070609695016982 +131 951 -1.2590118141814735 +148 951 .26764316174694597 +155 951 -.2303948264660331 +156 951 -1.0217738017819156 +160 951 .4677914473528545 +168 951 2.326684063269139 +194 951 -.5774872042378413 +200 951 -.6675673309872003 +203 951 1.6311247160963065 +225 951 1.76321709799976 +227 951 -.4459065550709987 +250 951 -.40069720144186416 +254 951 -.26260583629591994 +258 951 .28070685383414296 +261 951 -1.1237065212199964 +264 951 -2.3881974389544234 +275 951 -1.7694070969492195 +284 951 1.082669405087204 +285 951 .0954378000620952 +296 951 -.7461045483781454 +299 951 -.6608713656163345 +301 951 .47155673843196444 +322 951 .9868824760305174 +372 951 -1.2967630856673527 +382 951 -.1080536202323574 +386 951 -1.6887012213596273 +395 951 -2.73901908177623 +399 951 -1.4999776560722267 +412 951 -1.5885368050768405 +414 951 .7577776494436136 +420 951 1.1692625415292286 +433 951 -1.9164670792782623 +442 951 .7009617897773242 +460 951 -1.4963605415859567 +465 951 -.06920775029876675 +473 951 -.6023995556768549 +502 951 -1.373303268837959 +507 951 .2563017324617322 +508 951 -.9487303243657433 +511 951 .22549422112498227 +514 951 -.32520880632847543 +526 951 .13236665654586613 +530 951 1.8050078708389015 +532 951 -1.4331336472451868 +536 951 -2.983474207083542 +552 951 .6279468754457803 +564 951 .511748505884258 +571 951 -1.4239527426872247 +572 951 .31520839820451874 +580 951 1.8855389536392042 +592 951 -1.3132835071033286 +606 951 -1.9008350701294954 +616 951 .8343077003869318 +626 951 -.09261252455619612 +628 951 1.8382322764487031 +639 951 1.3054140263439915 +640 951 -1.2197317068577984 +681 951 2.02513230748971 +683 951 .8474854672551507 +692 951 -1.059677903724667 +703 951 1.5288365331508096 +706 951 1.8649127041527316 +717 951 1.705141849115662 +723 951 -2.062922380002475 +725 951 -2.501527007896548 +737 951 1.615538812369477 +748 951 .6681164051820923 +750 951 .7927420871840631 +751 951 -.488297810540861 +755 951 -.9519514388122017 +759 951 -.8230770918077575 +767 951 -1.7447961839537525 +774 951 1.1899193639818866 +789 951 -.3969138132710877 +791 951 -2.2499767544328857 +799 951 -.7954347639813357 +801 951 1.084601466007543 +814 951 -.5708615246225563 +829 951 .8512983321256128 +844 951 -.796025139926031 +856 951 1.496465416032153 +859 951 -1.3781415920767053 +867 951 .47527346355876365 +872 951 -1.613294826989717 +890 951 1.8609044279211457 +895 951 .4384778782174853 +907 951 .332479859070263 +914 951 .7949932996255745 +917 951 -1.1292877184055614 +921 951 .5620130357527025 +939 951 .014120767896022549 +948 951 1.38641162340703 +958 951 1.3886268685841114 +960 951 -1.1529411397527995 +962 951 1.7040320256259032 +963 951 1.085594753987695 +969 951 1.280940374155976 +972 951 .47289609472535105 +973 951 1.4509270822384521 +975 951 -.09425486324703021 +997 951 -2.009566907882416 +1000 951 1.6888493638678526 +8 952 .2886018922422182 +11 952 2.2756522532235444 +18 952 -.2167648619409009 +28 952 1.3494604527925753 +54 952 .945288749971421 +58 952 .5429026950971952 +65 952 -.7221890622326803 +69 952 -1.0789670208002708 +80 952 .4955386749413377 +91 952 -.17256845787926253 +94 952 1.3504648179621823 +95 952 .924554541299115 +108 952 -1.9320804772921467 +112 952 -.8301731311728775 +135 952 -.060261809499806224 +151 952 .289305712272026 +171 952 .04499540314415637 +175 952 -1.5034887331251343 +179 952 .6350485597877293 +198 952 -2.3204610216726924 +201 952 .31415340985173346 +206 952 1.0850647392846875 +230 952 .5999450962932075 +232 952 -.9735772592341877 +258 952 -1.0279149638671536 +267 952 1.217980165671635 +302 952 .5564398341954964 +303 952 -1.7181149001139426 +307 952 -.44355670764293365 +318 952 -2.2986777291234692 +326 952 -1.5164976263791687 +336 952 -1.2406555229004754 +340 952 .9905198701247551 +356 952 -.39939900011349416 +368 952 .8478832485990402 +369 952 1.703773620909209 +393 952 -.33777710721375537 +397 952 .202025348431226 +410 952 .5235306224554783 +417 952 .04868075893248855 +420 952 -.47078266196306484 +425 952 -.3331832719600791 +428 952 -1.2093915662043189 +439 952 .43472778292744496 +443 952 .914981741146911 +447 952 -.027725658986712545 +449 952 .4608120480477409 +451 952 -.33547116374798924 +456 952 .11575172634326451 +467 952 .7057113187201075 +471 952 .5525533879526379 +475 952 -.7713584642335125 +479 952 .6804804446073814 +484 952 .37934874434191146 +523 952 -.11797097553706351 +529 952 -.41918309386869845 +541 952 1.8815853822175035 +562 952 -1.2908488074706885 +595 952 2.469741847232091 +600 952 .1539423307093548 +603 952 2.3965896152504937 +608 952 .7165921532048733 +635 952 -.1594038683951191 +638 952 .4325859126403865 +651 952 .20506661568167375 +656 952 -2.166802522856128 +669 952 -.5458095269534324 +674 952 1.0103380732987575 +676 952 -.7825315479993525 +680 952 1.0565654969851568 +681 952 -2.4317784949230843 +696 952 .5697649608005131 +699 952 .38237489725124607 +700 952 .08018625366488447 +712 952 .3925529091909455 +715 952 .04922215924787561 +716 952 -.9417272207760935 +717 952 .5516895290495029 +723 952 .5808665942528485 +730 952 -.7122758131257377 +731 952 -.08970813982215539 +742 952 1.3695632045463428 +771 952 -1.6540083353980508 +776 952 -.4388355685120182 +781 952 -1.5707521490719165 +813 952 -.10122782933112133 +822 952 -1.3037542097032504 +847 952 .8749038817269456 +848 952 1.0711897197371985 +853 952 -1.553303474586405 +858 952 .16776365414113636 +872 952 -.14273405758498775 +875 952 -.8198239134572939 +876 952 -.6560569090521264 +884 952 .5222177873344014 +890 952 1.2458122928435778 +891 952 .8972133547567451 +892 952 1.3895856312295756 +900 952 .6611374346914904 +904 952 .8382801863730015 +905 952 1.6801089854809372 +907 952 .17635334586564066 +927 952 -1.2005978099976222 +928 952 .04346679948321955 +929 952 -1.033322596613632 +932 952 -.1238196687886266 +934 952 .49099000665717213 +946 952 .26411173038585084 +953 952 1.4925552505660453 +964 952 -1.2911929320893267 +973 952 -.8043444446416743 +975 952 -.7278076983483139 +976 952 .7832480127091906 +978 952 -.21650167334937492 +983 952 -.4539772263736113 +993 952 -1.0477713022939414 +1 953 .17032744278325324 +5 953 -.012367784432111652 +43 953 -.7810231492340236 +50 953 -.47581360446812815 +60 953 -.08310687169317942 +63 953 -.5318330827530616 +98 953 -.7252617049710268 +100 953 -1.0831747186831726 +102 953 -1.5573907387781083 +107 953 -.8848746303294434 +114 953 2.169320973722113 +129 953 1.8069636206016273 +132 953 -.5771527121201752 +145 953 -1.8627606538640336 +148 953 2.030608203306643 +155 953 1.4004609282174088 +158 953 -.7113188931166867 +164 953 -.22366259063804408 +171 953 .894449919788089 +172 953 -.37703250438757835 +182 953 .17042887628447317 +198 953 1.1568193436515848 +200 953 .12811133132092575 +212 953 1.3212300036313025 +220 953 -1.0624054778661645 +243 953 1.2445801418167295 +245 953 -.5671936289940547 +253 953 -.6861534210255679 +288 953 .663986302547293 +294 953 .452679494259914 +296 953 -1.6922939700836208 +311 953 -.252679900179969 +324 953 1.8413258352584638 +325 953 -1.5931990315800413 +337 953 .7417360454408414 +341 953 .7699533851207421 +344 953 1.3472753256398629 +352 953 1.2446121210419623 +354 953 1.3473216597687063 +366 953 .7664727617819872 +369 953 .13544983977299097 +391 953 .5631299933649853 +417 953 -.5133518358587138 +423 953 .44643270171038946 +425 953 2.6441043718370794 +430 953 1.5866263600333457 +442 953 .8407924334653767 +444 953 -.1739578685708389 +445 953 .7091200214154779 +449 953 .43888044933570614 +463 953 .2582811999626092 +476 953 -.03129718248007943 +487 953 -.6960627061566337 +501 953 -2.8902513416294986 +514 953 1.2994205540435513 +533 953 -.7375342063807225 +547 953 .8431699126896528 +548 953 1.515391905572198 +584 953 .2488445130233752 +587 953 1.5513825289391716 +590 953 .12830350920196693 +604 953 -1.3894781210134632 +609 953 .48275777876798454 +610 953 1.1869202837012043 +616 953 -1.0972175926914214 +618 953 -1.0379834907540721 +619 953 .32721302103145145 +645 953 1.3368137852876083 +654 953 1.101925773712575 +659 953 1.7844133389479955 +661 953 -1.8399250654812112 +675 953 -1.277065327100455 +691 953 -.7217517774162511 +712 953 1.6219648781878266 +719 953 -.6406445179459799 +730 953 -1.5090362487440494 +736 953 -.03334441158450659 +739 953 -.5439226621744861 +744 953 .009223608701701858 +745 953 -1.5108670428066104 +759 953 .013817610552114359 +765 953 -.12746950113512928 +767 953 .3253942200961942 +768 953 -.3013115682293432 +782 953 -.7199972643362129 +783 953 1.1640678207348674 +786 953 .1325383157821875 +804 953 -.2881761273902397 +807 953 .8897965717544203 +834 953 -.4278522752905059 +842 953 .6870864210525288 +844 953 1.9143158704634222 +858 953 .6125191332031793 +869 953 .7357687936411271 +874 953 -1.159665168958497 +884 953 .869148706314418 +885 953 .5237538294562638 +893 953 -1.3344493885968296 +906 953 .5196913601656368 +921 953 -.24612391826970667 +934 953 .06796675262237073 +936 953 -.7615407630342031 +943 953 2.04581999672317 +947 953 -1.9875728633323781 +950 953 1.2160667500422577 +952 953 -.34577384532770195 +959 953 -.17516529664214545 +965 953 -1.0302069312821296 +968 953 .10292913416177311 +978 953 -.9160530740459657 +983 953 -2.473660983073056 +995 953 .35706385512137956 +3 954 -.29789408535266715 +4 954 1.0621661980754296 +10 954 -.3641652238573486 +13 954 .37058624900790027 +14 954 -.8148078300359056 +19 954 -.3961923532298964 +25 954 -1.4136952532234632 +35 954 -.7896902186082945 +36 954 .5995045009825284 +37 954 -.7884941477071971 +38 954 -.5520167692684333 +49 954 1.7112437275462464 +54 954 -.09096232907915308 +57 954 .47885699858931846 +71 954 .5075970825797478 +84 954 1.564892131749386 +86 954 1.2524928750004747 +97 954 3.149001547218753 +113 954 1.0786061387584858 +115 954 -1.356115798240444 +126 954 .47515856959262825 +132 954 .1797030419293755 +134 954 -.5502017000310858 +136 954 1.2007947992591474 +151 954 -.29287576198816273 +152 954 -1.8868396353709138 +172 954 1.8906010118239516 +179 954 -.38180322947317885 +183 954 -.14251422946530556 +188 954 .4659067532808672 +203 954 1.1459128601404154 +205 954 1.871355776795902 +221 954 .47533255674598107 +222 954 -.2789652654386388 +238 954 .15219281793019185 +241 954 -1.4612164412298887 +250 954 .5278897028230585 +263 954 1.1484409038094845 +285 954 2.0071047265762325 +306 954 -.0965195610762162 +310 954 .4725750677013618 +313 954 .7594055278071874 +349 954 1.0263254662430359 +352 954 -.48927162798723767 +354 954 -1.0478813867785597 +355 954 -.45089840737112796 +366 954 -.31389584444075813 +369 954 -1.0888738424231463 +372 954 -.13039105714013977 +373 954 .8291995992606952 +382 954 -.5270561796479432 +403 954 -.13404901168509858 +414 954 -.6348617511921277 +453 954 -.46802303290360214 +470 954 1.0043048113904651 +472 954 -.5486162535862489 +485 954 .6754702848497303 +486 954 -.7242675912088423 +508 954 -1.4665802934977241 +530 954 -1.1788907590649018 +534 954 -.36636460475909327 +571 954 -1.0300065331059187 +582 954 .32711885906996596 +594 954 1.2310834043076169 +619 954 -.9202132541283952 +620 954 .09194098350117019 +629 954 .39879760620059185 +642 954 .9261796947158369 +647 954 1.3802934885818865 +654 954 .3376805378164857 +661 954 1.9136886688499044 +666 954 1.067149719280305 +670 954 .04405164526530024 +674 954 -.7968303325633792 +693 954 -.555578140720373 +701 954 -.2359493650484684 +702 954 .782716104791203 +710 954 -.42647493074227505 +715 954 -.21375748906838138 +719 954 -.8951128565637501 +724 954 .02359665528750038 +735 954 -.5784528668152686 +741 954 -1.2754409705246943 +773 954 -1.1271968358693623 +776 954 .022428096541030416 +778 954 -1.0884427200929014 +794 954 1.6889635663750462 +809 954 .23049024942644353 +835 954 .16427846023286496 +839 954 1.3409909789647456 +840 954 .17650111063636859 +843 954 1.5248385583002042 +852 954 1.4042762960711435 +880 954 -.8470262695115738 +893 954 -1.7621902294509848 +899 954 -.20387112365098084 +952 954 1.4137103428532063 +957 954 -1.2978794389696766 +974 954 .21935677354472752 +978 954 -.17762685705140674 +979 954 .37732552502530614 +993 954 .7644461850699216 +998 954 -.8898579606452626 +7 955 -2.236541263376002 +14 955 1.4533781749215373 +27 955 .9580381538521047 +33 955 -.4146229374303383 +34 955 -.9139527266196038 +38 955 .24348542417755092 +39 955 -.7360737721555934 +40 955 .5622506093887454 +49 955 2.0671041653000577 +77 955 -.19042609616578976 +83 955 -.7786096955923998 +89 955 -.8874253591093945 +92 955 .13642208342518813 +96 955 .2828285052053271 +100 955 -1.4539714705511813 +109 955 -1.4195725878087582 +110 955 1.8562415459521369 +131 955 -.8028937325242739 +156 955 -1.474094261143607 +162 955 .7754113873771851 +181 955 1.1131437234283452 +188 955 -1.2786447090803272 +196 955 1.6654512081416555 +199 955 -.6704711534310007 +203 955 2.3575645180966514 +205 955 1.7049911412610073 +209 955 1.1920525225712755 +222 955 .5355897996801411 +237 955 -1.6346908278474241 +240 955 .554921149990312 +242 955 -1.0429656999553203 +250 955 -.4042131801564895 +260 955 .646628981169332 +264 955 -.19917354795195907 +272 955 1.4716492460810153 +276 955 1.8307028968258758 +306 955 1.0017057351631136 +343 955 .18938787131377635 +344 955 .5095701047746628 +350 955 1.4357439027052539 +361 955 1.058554716893515 +369 955 1.6243172109285757 +385 955 -.6392276761992337 +420 955 1.0939225376312542 +425 955 .11193556351944361 +429 955 1.4008437539074747 +432 955 .060305095572966746 +433 955 -1.3996591543197443 +436 955 1.8360227697394849 +458 955 .5891966784523622 +461 955 -.6577407296252038 +488 955 .4298521542248947 +499 955 -.42109455920969796 +505 955 1.8640903809559686 +510 955 -.9502414932629826 +549 955 .9965902177171289 +564 955 -.37984823581239124 +565 955 -1.045600506283797 +567 955 -.20635083391585282 +579 955 1.4151300443101467 +625 955 2.2927976167399713 +646 955 -1.5009735739730745 +672 955 -1.4575614350759 +684 955 -.40380594919500673 +692 955 -.24198423965326052 +694 955 .007593511387017124 +696 955 .39661856854269784 +709 955 .538653643890744 +711 955 .3877695592985946 +714 955 -.0736878984241724 +716 955 -1.0224887718475957 +749 955 -.6288004769772332 +764 955 .25557079162902 +783 955 1.1039464657783462 +784 955 -1.103011077461899 +788 955 -1.0461586597039614 +802 955 -1.47505652581487 +813 955 -.7961969505216282 +816 955 .8479911836596881 +835 955 -1.141630546109242 +839 955 .4781428241818827 +849 955 1.7341119154930813 +853 955 -.4604634958500914 +854 955 .6497179694544313 +860 955 -.010026054024815365 +882 955 .03983325195333767 +893 955 .09983274612004946 +894 955 -1.2541214699782488 +895 955 .8690210195800538 +906 955 -.2577825479598829 +907 955 -.9794690791013416 +916 955 .35125019724070017 +924 955 -1.7369177868932066 +943 955 .9232289159698398 +952 955 .5249786070752549 +954 955 -.2929079556076338 +957 955 .9473757741331944 +959 955 -1.8374285760279887 +963 955 -.06295632702858935 +991 955 -.9824077522990221 +992 955 1.9997666175461304 +5 956 -1.857098328295597 +9 956 .25486883962850393 +11 956 -1.7192175581463407 +18 956 -1.49162582897092 +20 956 1.2688033607854237 +31 956 -.5936978778534139 +45 956 -.32225560113334484 +50 956 1.9978341645967983 +68 956 -.3118790289583676 +69 956 .926894402743576 +80 956 1.314721661958052 +84 956 1.1139560134070121 +93 956 .41727209807329213 +98 956 -.8434077959466971 +132 956 -.5123825081406936 +134 956 .20255418530512612 +152 956 -2.5925269746326283 +154 956 1.1960421681671087 +157 956 -.4305032021647921 +159 956 -.5933404989641773 +163 956 -1.1599052785767914 +175 956 2.918396832414424 +176 956 .12629741080040127 +188 956 -1.0096148480048919 +197 956 -1.2146251747125085 +208 956 -.6064786317417852 +224 956 -1.1194712074359026 +233 956 .348410276668038 +254 956 -.8025411284585182 +265 956 -.884716723928276 +321 956 -.8560453846195079 +358 956 -2.52421357159143 +360 956 .4410945094632583 +361 956 1.3241817338374622 +368 956 .6614556929280309 +375 956 .2426548959344252 +380 956 -.398406321887183 +384 956 -.3850812011601418 +390 956 -1.160886485071198 +395 956 -.09273643594645274 +400 956 -1.7671298247505505 +415 956 -.5001785624274877 +418 956 -.45459941897362155 +436 956 2.2920659807506905 +439 956 -2.998549546081802 +442 956 -.7886850557620584 +480 956 .3373545704500926 +496 956 -.029506157894383912 +497 956 -1.5513478097383766 +513 956 2.3250336945475674 +520 956 -.22330581532173624 +524 956 .31484232228481995 +528 956 -.375723810709316 +551 956 -1.8101965990891515 +562 956 -.7022578351834446 +566 956 -.1800985086738508 +600 956 -.5471828840371018 +609 956 .27321046711191993 +611 956 1.5498282592542747 +619 956 .608132944769255 +642 956 .8185509576226782 +643 956 .30145625511037283 +644 956 -1.5346157627836152 +666 956 .5007515830062459 +679 956 .9417003663452412 +701 956 -1.4217042662191628 +709 956 1.6448377481512246 +722 956 1.8540232886789798 +731 956 -.5280804478370191 +754 956 -.4066143348746817 +757 956 -.3862916684121932 +775 956 -.014048261512523585 +778 956 -1.6789660334854248 +782 956 1.2729221275182907 +785 956 -.6745072631344573 +795 956 2.9244308048958034 +799 956 1.6759695268338881 +807 956 .18078812036375924 +823 956 1.2143098759376778 +831 956 .027757137147325778 +844 956 1.543148419783486 +851 956 .5454981622271222 +853 956 1.2579570452561704 +863 956 1.770406467381957 +864 956 -.1659170563422377 +871 956 .9034869682806087 +907 956 -.5526453852435813 +912 956 -3.7922442439281876 +923 956 1.9636264634061236 +928 956 .43339283518461885 +946 956 -.02124295554723507 +969 956 -3.375395251421831 +971 956 1.3973133972548306 +987 956 1.2712736782752991 +999 956 .5567027945150539 +2 957 -.741462957676514 +4 957 -.5287539208107911 +9 957 2.309557206833361 +16 957 .17115265502549015 +29 957 1.2161649140810045 +30 957 .6714896526013364 +32 957 -.42717814074068317 +57 957 .35791162106962576 +58 957 -.977497412246737 +70 957 .3990279205717123 +82 957 .9445916772876017 +87 957 .8018230901813694 +92 957 -1.1546035222526665 +96 957 -.33003288850765916 +101 957 .9026457391959573 +102 957 1.2582679560484684 +116 957 -2.141023565160975 +126 957 .7427730186785135 +132 957 .00913640320647223 +151 957 -.2020967794988786 +152 957 2.0909399193845184 +156 957 .8504668565657812 +163 957 -.5388570752755123 +185 957 -1.020271416732245 +188 957 -.7842425172404321 +202 957 -1.3028002075974423 +203 957 -.7089172850996913 +212 957 -1.5352356400376508 +217 957 -.30768298287454376 +256 957 -2.7161551971230904 +265 957 2.129727034572843 +267 957 .10633611886154241 +270 957 .4846014484244135 +278 957 1.2481302518621813 +302 957 1.8022582985777627 +306 957 -2.718850241775644 +332 957 1.9699541418261377 +350 957 -.414834589530651 +373 957 -3.2265747717434468 +398 957 .5226416324166161 +445 957 .0371723737712131 +462 957 -.23610740934424068 +472 957 .22956259743712304 +489 957 -2.083711685281846 +497 957 1.115319596741695 +506 957 -.09115887044224358 +540 957 .14146889011090796 +541 957 -.8170480489132733 +544 957 .03871437896061671 +565 957 -.2746545294259086 +576 957 -.6452016720470534 +580 957 .21756717940603015 +608 957 1.0761771265742586 +618 957 -.8365911091562843 +633 957 .4252846149147792 +637 957 -1.5960179667396313 +638 957 1.1618788686778463 +641 957 .6179557477541106 +646 957 1.01421205931858 +662 957 -1.2760529652743258 +663 957 1.646131536731413 +678 957 -.4686412671309532 +685 957 .08776979640748772 +686 957 .5269658644610719 +689 957 1.5228409982944433 +694 957 -1.5237565881951292 +696 957 -.6561989823950966 +698 957 .7540677226789919 +702 957 .42548772077672564 +705 957 -.17364814796270853 +740 957 1.788524592732673 +744 957 -.5263593148723604 +751 957 -.7582004685277729 +753 957 -.6804712340281018 +767 957 1.064960314060982 +773 957 -.01640667671257874 +780 957 1.10927215679621 +787 957 -.6375941094115971 +806 957 -.26053950314616753 +839 957 -.7978999545262451 +850 957 -.09620356252097609 +853 957 2.21956494774128 +854 957 -.41467887765188405 +865 957 .08001891207016454 +872 957 .15741404720778118 +883 957 1.0940644182400656 +885 957 -.8081342851770645 +888 957 .08981433726499667 +912 957 -1.4342544260858583 +914 957 .6999482238639381 +919 957 -.705625980536024 +925 957 -.7079441646538298 +936 957 .9418979203432852 +937 957 -.1758265889157682 +951 957 .4641566288723105 +972 957 .3718220610650845 +990 957 -.05233305877904887 +1000 957 -2.081621061657079 +11 958 .25663976628714047 +14 958 1.1126214625406436 +23 958 1.379771422929995 +34 958 -.6666014869020906 +57 958 .3257312393392938 +59 958 1.8277305856449308 +62 958 .15486732633029754 +73 958 -.6391108904201883 +84 958 -1.1202383475849693 +110 958 -.1047049023247075 +120 958 .13698666521623887 +130 958 .9279467947092296 +137 958 .362075746128088 +140 958 1.2660943626225512 +150 958 .06920300696955828 +152 958 1.3893904164743904 +164 958 -1.3564831847468255 +169 958 -.8208748241472446 +184 958 .8828086423856225 +185 958 -.5487581240109792 +187 958 .35571325434558454 +193 958 -.5588734394047137 +202 958 -.38484208975099 +210 958 1.0423191681487005 +217 958 -.5386904182764649 +234 958 2.113653687321865 +240 958 -.659460984766258 +247 958 .9389424817272003 +271 958 .5873288871555951 +292 958 1.2526768605198433 +302 958 .1083055666516892 +304 958 -.3423179516738897 +310 958 -.0901455270542676 +324 958 -.04791986334422796 +329 958 -.10318248196304662 +341 958 .3697218843898021 +346 958 -.009313758842665353 +354 958 -.17192625434972134 +357 958 -.540208647246884 +371 958 .9133810456253733 +385 958 -.21760158414575492 +396 958 -.537036579440643 +399 958 -1.1408072312927313 +408 958 -.637241613227494 +411 958 -.5672350205791592 +425 958 -1.3305787550142083 +427 958 -.6366582189740512 +432 958 .4502970052682369 +479 958 1.0775607422297093 +484 958 .07687069115296745 +494 958 -.3202888025945416 +496 958 .47351866237736645 +517 958 -.18970094566496754 +518 958 -1.0718117561568983 +524 958 .15081386237756156 +528 958 -.3576378826771357 +529 958 -.8448930745370447 +531 958 1.7154364028597087 +548 958 .5125051035124594 +554 958 -1.3129771777716153 +560 958 -.24415266618585432 +563 958 -.10188408490129822 +579 958 .31292406436409065 +595 958 2.972415574284134 +605 958 -.04863827700688449 +617 958 1.6536688871909133 +646 958 -.1388237419345903 +655 958 1.1194811644074063 +669 958 -.6233922660719818 +677 958 -.9631769397528479 +686 958 -.25127554641375266 +687 958 .8358974152980923 +692 958 -.20774738349349675 +714 958 .28224573707947065 +715 958 -.9249942464641873 +718 958 .29066853669311826 +746 958 .4196950397032722 +753 958 .07053709676459052 +758 958 .6687299955494529 +761 958 .049274716820856865 +763 958 -.9512298270005177 +767 958 .33364368010531287 +781 958 -1.4586484875094732 +785 958 -.029193813208276784 +786 958 -1.6223758649949336 +798 958 -.7203712094688528 +827 958 -.3660273951695738 +848 958 .575191328099409 +851 958 -.18923347601610743 +861 958 .578661734357012 +886 958 .4116755234483102 +895 958 -1.3295776340054788 +907 958 .23518281981538186 +909 958 .4691788803411802 +910 958 -.6338753705675858 +937 958 .31735992325373197 +961 958 1.2880372328797447 +963 958 .455423976232497 +989 958 -1.5335032600558014 +994 958 -1.0773738382434659 +996 958 .6090827664147657 +8 959 1.9077882909824426 +29 959 -.733315341676344 +32 959 -.9721587097046027 +51 959 1.3690795442220836 +53 959 1.9983518452253834 +57 959 .4690939409576279 +61 959 -.06690069018336081 +69 959 .9558203911765579 +73 959 -.16914630219453297 +87 959 .19122775731667194 +108 959 .43579002998216176 +115 959 2.6679338709915412 +116 959 -1.320618350166066 +123 959 -1.819915620527074 +128 959 -.10357912555070084 +132 959 -.7946813509884102 +136 959 -2.8837870816568696 +163 959 .2922601075648024 +182 959 1.6166857106489045 +194 959 .711709570987191 +199 959 .18876244721790159 +203 959 -.8275171259032095 +211 959 1.6817623846416745 +225 959 .5255287471188999 +228 959 -2.062465242869788 +232 959 .07407658044499815 +241 959 2.5816989696873387 +244 959 -2.9056104460412113 +247 959 .12219358987409398 +256 959 -2.170996807670053 +261 959 1.2595563620866856 +265 959 .741060717676799 +281 959 -.1608372238967263 +283 959 1.6325150826435242 +284 959 .21301804631214388 +285 959 -2.193164379925643 +289 959 .30188935239706327 +314 959 -.928218743580891 +315 959 -2.597780195578507 +319 959 -2.084284736632379 +336 959 .3337472495983956 +339 959 4.5645308690595385 +355 959 .1793508811071305 +362 959 -.5625388965761975 +376 959 -1.7356282902814066 +393 959 -.12679912747047792 +404 959 -.21221637311974026 +406 959 -.40005567413066034 +430 959 .5183623534690371 +433 959 -1.6859410252110423 +437 959 -.33544849603292004 +466 959 1.3575576350894376 +481 959 -.6346136777234844 +482 959 1.9144923362220803 +502 959 .892256126019584 +505 959 .5124031144294857 +516 959 -.9876233404523606 +517 959 .36158974633030155 +526 959 1.1846038151089733 +533 959 .5934563600363252 +534 959 .5282867574150808 +545 959 .3176574904632196 +584 959 -.9984813438960998 +597 959 -2.1865251237040977 +615 959 -.8647707535024245 +626 959 -.5173828693397564 +636 959 .5315514039196707 +655 959 3.0892133124430003 +659 959 -1.261588978371755 +660 959 -1.3222894815907538 +662 959 -2.632381042379668 +663 959 -1.2312480259470586 +671 959 .6617984731990806 +711 959 -1.0033045160463085 +737 959 -.36448061499780404 +750 959 -.922141398779547 +753 959 .03704303065989528 +755 959 2.8057015915300685 +764 959 -.8231446857260132 +799 959 -2.5493570644337047 +856 959 -.026821592314599765 +880 959 -.9042755860216564 +881 959 .3728662661547858 +934 959 2.102386140554118 +950 959 .7725472598437646 +953 959 .13190359295881945 +970 959 -1.097799407925602 +2 960 -.3464274106942805 +6 960 .0074679628334299725 +22 960 .673935158590686 +32 960 .05500319721443545 +45 960 -.6042568069710541 +49 960 .08560843624643134 +83 960 -.48533034036034683 +94 960 -.32834189490629845 +102 960 1.4193507187692294 +120 960 2.129320197239083 +134 960 -.682528412463895 +151 960 -1.3416784742752095 +182 960 .6910317747306421 +183 960 -.9342739155926488 +186 960 .06422590643173855 +192 960 -.7546790047566903 +196 960 .2342506982432656 +206 960 -.19814767108467202 +221 960 .5123955648539087 +230 960 .17646425138137933 +238 960 .027411578307733546 +248 960 -1.5381611563741082 +251 960 -2.107070876467098 +257 960 -.8227212690073452 +262 960 .04894477114022286 +274 960 1.5103766261613671 +285 960 .6966157898382496 +287 960 -.29457272326740436 +298 960 -.015034932419642516 +300 960 -.0698706591771506 +329 960 -.5978260253626955 +330 960 -.2833749496146725 +336 960 1.2431312186442467 +337 960 -.975871939971118 +339 960 1.509821928224711 +340 960 -.858249749432092 +353 960 -.21012473655701558 +356 960 .8278024105810373 +394 960 -1.322597628381187 +397 960 .12489752983751086 +402 960 .6647832332362241 +406 960 -.3185305038655517 +407 960 -.3929150661431274 +422 960 .3024323863557515 +424 960 -.48549204270111407 +434 960 -.509533715841049 +435 960 .13529158426928375 +436 960 .13698175510002591 +450 960 -.4238454956926076 +455 960 -.8298297442483175 +466 960 .2785035623841082 +470 960 1.396140835971055 +471 960 -.36530045099546704 +506 960 .2484254779109913 +510 960 -.25820801777482255 +514 960 -.1991242087372357 +541 960 -1.171432619783375 +552 960 1.3640418597661508 +569 960 -.08416615867590971 +591 960 .20870693862505593 +594 960 .6172486350276927 +598 960 -.07516049583161649 +602 960 1.006365709720652 +607 960 .623334033872131 +609 960 -.4232961037847195 +611 960 .4309810267983054 +613 960 .5085221445996423 +621 960 .37823029643628 +624 960 1.1438029483060366 +630 960 -.22890536002383366 +634 960 -.0260825696562864 +657 960 -.46251225326269324 +659 960 -.9585221242586601 +662 960 -1.0590319424729935 +664 960 1.603845390183821 +667 960 -1.1891572246622268 +677 960 .21068166490415954 +684 960 -.5313139903015044 +696 960 -.7746101882836199 +705 960 .8173265310604125 +717 960 1.95123547646446 +731 960 .842177637555317 +732 960 -.7210662700683037 +734 960 -.028990239162568376 +740 960 2.758173879404232 +743 960 .5632204826425353 +753 960 -.9909002327905335 +773 960 -.6542007836271276 +799 960 -.16047239353211964 +823 960 .4666613806455403 +845 960 .11604332890496012 +865 960 -.34338073549238673 +879 960 -.12634574975625282 +886 960 -.5842197679822568 +902 960 -.10724507900089633 +903 960 -.499439645912345 +909 960 -.30742789325902253 +914 960 -.6863898465042332 +917 960 .7977997023917042 +921 960 1.4792068074080449 +941 960 .006211008854431324 +978 960 -.6171184068197033 +981 960 .9713407234957213 +993 960 1.622328454597912 +1000 960 -1.194717731438744 +3 961 .3258440287235605 +4 961 -.10612468775470052 +20 961 -.812647359312014 +21 961 -1.0436265662816104 +34 961 -.6696805130168565 +46 961 -1.4727304771218348 +87 961 -.6134044241756887 +90 961 -1.0763079857801159 +108 961 -.32554056279481214 +118 961 -.5224368459219303 +128 961 .05930492700137342 +159 961 -1.7101332940049812 +163 961 -.5321106198067539 +168 961 -.47484880127232576 +171 961 -.9373241841875409 +187 961 -1.5173973546821728 +197 961 .26271494632356 +200 961 .46584368094682593 +201 961 -.4125442251177468 +207 961 -1.14093274157359 +218 961 -.6759066948250951 +240 961 1.2170776155036342 +249 961 -.011664743595519018 +253 961 .07394969569387544 +254 961 -.3078681920132425 +258 961 .37448228668182576 +259 961 -.10536124722609846 +263 961 .42019189259136663 +268 961 .3619780348708232 +274 961 -.6701034017229038 +301 961 -.5460113319256101 +302 961 -.6319099916523646 +312 961 -.30830420315014667 +313 961 .5585764508696175 +317 961 -1.3079806023096985 +318 961 -2.593953965339576 +325 961 -.1686383289097662 +328 961 .05513878233314731 +329 961 .23089652231741234 +332 961 -1.3381646851848057 +340 961 .9921935676696907 +350 961 1.0337331952408384 +372 961 -.08992229779582804 +384 961 .7241644715911211 +385 961 .7460473150567295 +389 961 -.46683385467287 +397 961 .3666583394593217 +417 961 .03426917569180593 +421 961 -.44883746474158 +425 961 .6966349877779675 +429 961 -1.3503361602695858 +438 961 -.9302928552572394 +441 961 -1.3597544537678805 +448 961 .6381883430687345 +453 961 -.1222138692691847 +457 961 -1.289934900223232 +464 961 -.4540268804619907 +478 961 -.6601505246818424 +481 961 .8384146569652182 +483 961 -.13785430238621016 +494 961 -.5106355045501143 +500 961 -.30765935359514845 +528 961 1.4907410045107499 +537 961 .08423035048143526 +546 961 -.09886228053095389 +555 961 .029051921741464735 +562 961 -.7448438033802093 +576 961 1.217980906199562 +579 961 -.5075371022108985 +594 961 -1.0634225002543265 +601 961 .4229952339405309 +610 961 -.07678331167303065 +616 961 -1.5617761075581245 +628 961 -.3520335705212412 +642 961 -.4001447138454564 +654 961 1.7246045343299894 +660 961 .9581004985009184 +667 961 -.5996195762414447 +703 961 -.8286095507632377 +709 961 1.214173589817516 +756 961 -1.7179612640231385 +768 961 -.09195585445424911 +777 961 .33676264573631015 +778 961 .5412699349941441 +782 961 .30208455251186606 +786 961 -.18306596754855478 +789 961 -.1007001935907572 +798 961 -.07678264546295836 +818 961 -.264446552809934 +820 961 -.7488198837395584 +836 961 -.24350635260297332 +850 961 .3297391568059954 +852 961 -.161897523071835 +860 961 -.58747438075189 +866 961 .3260712454977946 +883 961 -.9491741034213707 +900 961 -.060302722572556325 +902 961 .05566614744757242 +916 961 -.47720270080148386 +931 961 .5597358154953521 +949 961 -.16435875423571195 +950 961 .9340948233409072 +959 961 -.04117772250836899 +960 961 .08413843924524733 +961 961 -.03169965536040867 +992 961 .2762751709256537 +997 961 .3635020053548207 +6 962 1.5676598308255756 +14 962 -1.3014284668968132 +52 962 1.1051341413291347 +53 962 -1.4089795392799782 +56 962 -.7908407143905664 +61 962 -.7686611463979564 +79 962 .13495168256578283 +106 962 -1.0710339907516881 +127 962 -.720353748206504 +150 962 -.5295861519620777 +151 962 -.048821199902085305 +152 962 .055767526189746175 +177 962 -.5766923580067534 +181 962 -.9606357252558946 +182 962 -1.0967101943988526 +197 962 -.29636143348050226 +199 962 -.7722051137203597 +227 962 .9652739796571784 +241 962 -1.787025503798039 +255 962 .6771017938867463 +279 962 .2884590855184025 +281 962 .562381585530356 +294 962 -2.0755599993890863 +299 962 2.158246640680416 +311 962 -.42973956923120626 +312 962 2.173779844970991 +334 962 .0017394190601540543 +338 962 -.8034906774365534 +348 962 -.3126466694072715 +351 962 .26556198096061906 +373 962 .6276859318596645 +388 962 -.5797781088877775 +393 962 -.28415842284260895 +397 962 -.11462938360880545 +411 962 1.1065325286614536 +418 962 .9506465946165461 +420 962 -1.3230245506052436 +427 962 -.046010284292450056 +428 962 .4042062813443133 +470 962 .5772382356855065 +481 962 -.7581197016413099 +490 962 -.612931853668615 +493 962 .8700652846717863 +499 962 1.3580983931826 +520 962 .9488314071575894 +531 962 -1.8093867816045195 +536 962 .09886784315554661 +543 962 -.3742635066596353 +548 962 -1.7555650849951987 +559 962 .030750438918552142 +561 962 .3874492829691149 +592 962 -1.3257075199832542 +629 962 1.425427397590565 +654 962 -.10924856381034886 +656 962 2.133314928825243 +658 962 -.16808638262095738 +679 962 1.6927270786001247 +719 962 -.5763607642243226 +725 962 .5620913359811421 +747 962 -.37414710564716785 +779 962 .2962139016308582 +782 962 .17131605924551274 +789 962 -.06088603456215552 +792 962 -1.5556486507957092 +795 962 -.8544857832913473 +812 962 -1.0591508745778022 +814 962 -1.0659515034724811 +822 962 -.007446695951045706 +841 962 -2.504254823410128 +849 962 -1.560081946510198 +850 962 .6924380022002958 +854 962 -.3277094785340776 +855 962 .41172524533270005 +858 962 -.4072758560445576 +863 962 -.09224605695648405 +885 962 -.07832573784896461 +888 962 .1255971892751874 +891 962 -1.1825351453001247 +900 962 .11498075660035752 +908 962 -.7455667809206443 +912 962 -1.0780282608482057 +914 962 -.5045107696498332 +931 962 -1.061558496460145 +941 962 .199132794421902 +949 962 .18372849361224855 +953 962 -1.1477732874823647 +956 962 1.007068256564466 +966 962 -.23304835798449247 +972 962 -.505411720854283 +998 962 -.08952948847728935 +20 963 .30838254795911024 +31 963 -.24123080167410188 +32 963 1.3014218601756462 +38 963 -.8443037126579133 +45 963 -1.1148634225217084 +66 963 -.11160518423234546 +113 963 .35350327186537733 +125 963 -.2714917567304822 +149 963 .8135632606050578 +151 963 .22327908906789554 +161 963 -.2637227392656727 +171 963 -.8887709965614867 +175 963 .15093014883205405 +189 963 .4369499276077307 +193 963 -.546892292331328 +199 963 -.3792304098801389 +208 963 -.2539221625332534 +217 963 -.875213800296751 +234 963 -.9984879289772961 +272 963 .8619989750902113 +273 963 -1.0521130828473386 +274 963 .2745965549344533 +281 963 -.35283482987656145 +283 963 -.46562634623877047 +285 963 -.4012206187028211 +294 963 .5985133020949264 +305 963 .47841741526969944 +325 963 1.256267871492798 +333 963 -.8715781029376768 +339 963 -.7730506092367871 +345 963 -.6910117207658115 +359 963 -.9799734351700455 +368 963 .05273027938376039 +377 963 .23815102787288195 +384 963 -.3800532786242078 +397 963 -.41378855152784677 +419 963 .5389711936764578 +423 963 .6116786034108173 +426 963 .18049535412227985 +429 963 .5418152298500953 +438 963 .43657410499955257 +440 963 .049828996198233125 +456 963 -.543144458598712 +458 963 -.26412281678852795 +472 963 -.8797472746042094 +476 963 -.916051134487548 +509 963 .616274951515157 +515 963 .505931548822808 +516 963 1.5626603348659491 +534 963 -.8876778571115302 +559 963 .15601950686310237 +566 963 -.7476069689341791 +577 963 -.6328340514735934 +585 963 -.3345994856112086 +588 963 .09363664308647679 +592 963 -.1522864735081245 +599 963 -.3268933132053291 +605 963 .9512392904512855 +610 963 1.1622556376246334 +617 963 -.4704993473388298 +620 963 -.8607406884918346 +622 963 -.10839795803620177 +628 963 .6228928228409946 +665 963 -.11074531267348413 +671 963 .5909745121088587 +673 963 .6322777711476105 +677 963 .518062588914752 +685 963 .5520036765102979 +700 963 -.9812398198202602 +728 963 -2.0692765667712574 +744 963 .28200235339526714 +759 963 .094658283758979 +761 963 -.5464312766479853 +766 963 -1.2961357924390127 +781 963 .047778325142634734 +785 963 -.849948297664997 +799 963 1.226773418001114 +800 963 -.30544581391248127 +808 963 -.921662973204546 +816 963 -.11915351427686194 +819 963 -.2731124986030721 +824 963 .8536491570391224 +831 963 .07311881855723945 +832 963 1.508561620958989 +848 963 -1.191352142213037 +861 963 -.5937235273203254 +862 963 -.4050022344693954 +863 963 1.1191008903495465 +865 963 -.7293633469746977 +869 963 .5516389248493825 +880 963 -.16369053450177432 +883 963 -1.304823200720525 +884 963 .05225890142338978 +889 963 -1.062712514632482 +894 963 -1.2363904283603904 +902 963 1.4188911880923265 +907 963 1.493759888488298 +914 963 1.0209752100201166 +927 963 .3121803900852041 +929 963 -.6250711857521732 +942 963 -.8095570453890718 +949 963 2.1595588843420623 +950 963 .039489811436369524 +953 963 .3074695589239281 +962 963 -.31795403054587057 +967 963 -.46592578696200515 +974 963 .04795302969003798 +980 963 -1.0507904323702844 +2 964 -.577138831682187 +12 964 -.6645124396800745 +13 964 .3915481200819022 +56 964 1.3627822185611314 +70 964 -.06698370091043149 +79 964 .24141525626067595 +82 964 .9176001835230265 +89 964 .6261868192547632 +100 964 -.3429423007976385 +120 964 -1.1754990084558017 +123 964 .7654865940282429 +147 964 .20518064128058908 +165 964 -.8526194263113744 +167 964 1.64109784935999 +177 964 -1.0254553008986356 +178 964 .12873448783970382 +179 964 .12607224219432056 +183 964 .5934293180701582 +199 964 -.388197277051768 +212 964 1.8141764690670255 +260 964 1.2377095302447598 +263 964 -.34878656419836623 +265 964 -.4844817012751016 +268 964 .14396146256907105 +274 964 .5207479796336716 +275 964 -.0066625916658256115 +287 964 -.7849527336968464 +336 964 -.2614865478057299 +345 964 -.7262655010351586 +350 964 1.0053720021713004 +354 964 .9128666290641896 +364 964 -.3436929593849603 +367 964 -.5396760801249708 +377 964 1.1544046750683792 +390 964 .3544257198020109 +419 964 .1514684847767835 +422 964 -.9545978826702826 +430 964 2.0160962524228636 +431 964 1.1752739519636797 +434 964 -.7660694384929079 +458 964 -1.0441737407904121 +461 964 -2.2616909338948292 +465 964 .39963235298906075 +472 964 1.1626883790057914 +480 964 -1.076968332607851 +486 964 .53053856950638 +489 964 -.13385655477668096 +503 964 -1.0492096871965793 +507 964 -.2462445478464926 +510 964 -.5793259370217462 +513 964 -.7804306312687392 +520 964 -.8280468405283335 +536 964 2.9831885730689374 +539 964 -.6246186097693308 +548 964 .9346910231726416 +552 964 -.035606968694809615 +559 964 -1.4497103699542808 +565 964 -.8327261873978157 +567 964 -.19849793570904145 +571 964 -.6820046150582731 +591 964 -.481543190250261 +594 964 -1.3001148033428342 +611 964 .39869139415675925 +618 964 -1.5245771971305573 +632 964 -.35632830575688773 +667 964 .39581322260038077 +679 964 1.235854358271713 +686 964 .5856106440444832 +699 964 1.0225825159648103 +704 964 -1.1378924780590238 +768 964 -.9075654345891395 +773 964 1.268763177928599 +784 964 1.0484055842794118 +790 964 -.7293624623759228 +804 964 .11531855032694427 +836 964 -.3684944145362244 +841 964 -.55149937467934 +847 964 .887587445387095 +859 964 2.324525020791034 +860 964 .2885072986525788 +889 964 .1802986648735726 +928 964 -.684937289987836 +929 964 -1.4550969671165817 +940 964 .04431845466073013 +954 964 -.5603141112377641 +956 964 .0938194363820988 +959 964 -.38816849007778725 +964 964 -.7303643054657392 +971 964 -.550713991170276 +974 964 -1.0475645618562566 +975 964 -1.0999272176970734 +993 964 -.23628487471791862 +6 965 1.2646821545000877 +8 965 .6431629322575759 +13 965 -.7543394468447735 +20 965 1.0224400226204773 +55 965 -1.5732001276244327 +56 965 -.7961244151944163 +66 965 -.11258715897019307 +69 965 1.2723176073687854 +73 965 -1.2899790435717469 +75 965 1.4095658822379538 +76 965 -.24767484895833547 +106 965 -.39800261145792254 +107 965 1.1813136115011267 +108 965 .9388040471192308 +134 965 -.7228123036569216 +153 965 -.25112697429073955 +159 965 -.6278414371522103 +160 965 -.5826200491359711 +162 965 -1.5986331348384621 +168 965 2.181131818314324 +176 965 .037745160600947125 +180 965 1.933906025300162 +198 965 .3117701359509231 +200 965 -1.8011980444597027 +216 965 .5211919874543594 +223 965 -1.0331018737024948 +237 965 .0005358269128835982 +243 965 .8485912737267768 +249 965 1.5330477869793178 +256 965 -.1096734775857282 +270 965 1.307561725346677 +275 965 -.6148567433057625 +289 965 1.0610701066960782 +311 965 .24844154060464707 +336 965 1.5780666910902716 +343 965 .1847242169292445 +350 965 -.786296409150628 +352 965 -1.3919271450595758 +369 965 -1.0706611124275698 +394 965 -.661822705594402 +412 965 -1.3246049845134698 +415 965 .8751956112423602 +417 965 .7225572641558404 +428 965 1.5727251572425889 +461 965 2.4733066734044438 +472 965 -1.7022211317322151 +474 965 .4506922730720174 +475 965 .8328721860594649 +476 965 -1.7448542570306722 +493 965 -1.0088983220712548 +497 965 .7564493807443289 +499 965 2.0414311720616296 +504 965 1.3003674114425372 +507 965 -.8779515771869875 +510 965 -.02448431016176663 +512 965 -.36037278326774497 +517 965 .6102981842478503 +519 965 .12561343140406467 +532 965 -2.2036037596925517 +554 965 1.3672768500923165 +574 965 -.05339650789021111 +583 965 -1.1804184836308969 +622 965 2.0019001016935647 +642 965 1.637725515012846 +682 965 .7208724658398499 +683 965 .6251382146825397 +697 965 1.0815221583990002 +703 965 .4752541940470818 +704 965 .6031298419792442 +718 965 -1.8121464759982062 +725 965 -1.8404624033079213 +726 965 -2.677624522785255 +730 965 -.4314192950678363 +733 965 .9716420675673126 +740 965 -1.3849776931367295 +756 965 1.8092482775296614 +779 965 -1.6172510697739357 +790 965 .5056392369419195 +793 965 1.588332889560896 +805 965 -1.4306238413913805 +818 965 .9989059506585286 +819 965 1.0235992291005553 +821 965 -.30953791943692743 +836 965 1.051999436739183 +846 965 .14541001653267965 +854 965 .8155943287735524 +861 965 .7901038096938333 +871 965 1.487940800345406 +881 965 2.5185047774043072 +883 965 .7515514668640735 +892 965 -2.0662945423177845 +931 965 -.34831072675686026 +932 965 .4299398359422119 +943 965 2.552056370239017 +950 965 -1.3284075058747358 +952 965 3.382095124652124 +958 965 1.8547711809563363 +964 965 2.343946311317788 +969 965 1.3017560405065158 +999 965 -1.372517990874556 +17 966 -1.9209626447524868 +36 966 -.5686889338962245 +41 966 .19875790483053135 +67 966 -1.3921109460937935 +69 966 -1.3113540328080175 +83 966 -1.1203607041205648 +84 966 -.12274104784406867 +96 966 -.15999843630715732 +103 966 .9581103935576409 +105 966 -.3802538362654333 +109 966 .1250523639911481 +111 966 1.5538227080069984 +120 966 .6734839920542214 +137 966 -2.1401261210360802 +152 966 -.3360102376172582 +169 966 .7323207812966332 +175 966 .12411650758326409 +177 966 .21975590607897738 +190 966 .6313782389926602 +235 966 -.12076893199578766 +236 966 -.3430176191151149 +246 966 -1.085817781768756 +259 966 -.3513774028270107 +267 966 -1.25043089185537 +273 966 .05883154506155493 +301 966 1.7482087943765858 +302 966 -1.6162457641223176 +303 966 -.37381623917141477 +309 966 .070183433872507 +310 966 -.22557164735161903 +327 966 .489662967318254 +329 966 -.3343530697966062 +336 966 -.6892256998216959 +337 966 -1.3773054611789397 +348 966 .12053088737876239 +349 966 .7951000886477291 +356 966 -1.2033551156762199 +360 966 .288097701725921 +367 966 .7904750050008111 +389 966 -.01327152493445237 +395 966 -.8111613116184847 +419 966 .8409526381297495 +420 966 .39069404641702465 +421 966 -1.4981088331147001 +429 966 -1.25448207318271 +450 966 -1.1394674121901691 +470 966 -.24774364473048777 +483 966 -.5312906569396612 +500 966 .800366324284496 +512 966 .5222583792848758 +517 966 1.0356372820939466 +527 966 -.08432149982482424 +528 966 .09998867895434883 +544 966 .1942198141610472 +545 966 .3030926790886565 +546 966 -.6616821595860897 +548 966 -.4734050567387514 +564 966 -.8017059842909188 +565 966 .8687767774805093 +583 966 -.4391722974301379 +589 966 -.049341392815930585 +591 966 -.13172573006746896 +592 966 .19534940804951423 +611 966 1.345532970194047 +612 966 -.7436497944191394 +625 966 -.08261719068965498 +630 966 .67438045977704 +638 966 1.4741948058341046 +648 966 1.7941827368533945 +660 966 .3555562734020337 +678 966 -.8586833409891491 +686 966 .6358177934045361 +701 966 -.8323091381516532 +717 966 -.2142463891778118 +738 966 .0688301801551623 +772 966 .42645390359553575 +775 966 .4596352653890669 +780 966 .13414095047610902 +783 966 .8014104041999158 +787 966 -.4443964052382345 +794 966 .33892984162263007 +801 966 -.1300356216542683 +803 966 -.9120720494317269 +810 966 .6369143702489432 +819 966 -1.6538697161725808 +829 966 .30087565620146683 +831 966 -.4143653158917048 +836 966 .33008670518292893 +846 966 -.044462102646645574 +851 966 1.7876564551576362 +858 966 .5979695835719264 +869 966 1.0133168938801667 +908 966 -1.9286177684455401 +922 966 .7483296947061033 +929 966 -.18405171553940014 +931 966 .9245798117126423 +935 966 .7528008415928092 +943 966 -.41166223588875506 +986 966 -.6418498679550857 +987 966 1.299925087538259 +992 966 -.22940881222353762 +6 967 -.3620029339184969 +18 967 1.2483164054874873 +19 967 .9087738145335903 +23 967 .9359344699225052 +32 967 .6476108711794775 +37 967 1.0878184708812877 +40 967 -.2165306587732856 +53 967 -.2007535621581973 +59 967 1.2462460655419354 +65 967 1.4134281572634162 +86 967 .9158520763257435 +89 967 .8863940497079338 +94 967 -1.368887495698052 +115 967 .6318157835302887 +119 967 .7130416184799961 +138 967 -1.7479999299906397 +139 967 .7133779723498762 +143 967 .05148322719578705 +148 967 -.20741183930577062 +163 967 .7809457187178963 +180 967 1.0696330779246326 +195 967 -.747805888911069 +211 967 -.015172568148709223 +212 967 .6024916914931715 +229 967 .47786830375437606 +261 967 -.4864950470869321 +263 967 -.9530795234598202 +276 967 -.38004407062139683 +299 967 .6523196284908757 +308 967 -.185125491999167 +316 967 -1.28270161229092 +325 967 .42932823587171304 +340 967 -.7320104616112737 +351 967 .8868475181483144 +363 967 .7096301370231902 +366 967 .5549413076846603 +369 967 -.767913583266547 +370 967 -.9979511139996138 +376 967 -.09130221907532018 +378 967 -.7915764975620173 +384 967 .11272165405637713 +403 967 -.983866218445723 +414 967 -.11089536050694888 +419 967 -.5633194327171994 +424 967 -1.0386099155932667 +427 967 -.305221766259027 +445 967 -.7864154237563883 +449 967 .22229776259533904 +452 967 -1.049555230608298 +467 967 .19718602107030775 +469 967 -.8169728374887294 +478 967 1.0820592036617205 +506 967 .03601999325204408 +512 967 -.9736897987506602 +515 967 -.9829807860094969 +536 967 -.31538516699539093 +540 967 .8781776498303133 +542 967 -.7394319602337391 +548 967 -.9492694194184025 +562 967 .9719315009499684 +582 967 .4545669272330993 +583 967 -.009410236439054143 +586 967 1.0680073564557602 +590 967 -.1443137497104333 +594 967 .8660269816008188 +596 967 -.00594922466044058 +597 967 .344241358645537 +620 967 -.9108855587425948 +621 967 .8148070563699841 +624 967 -.3964565258713503 +632 967 .15423317569692585 +633 967 .4910348190760828 +636 967 -.2793380666746703 +640 967 -1.465278594747951 +647 967 .6997851119949 +663 967 -1.2246858579071844 +669 967 1.0393777596116012 +676 967 .1877278362230757 +695 967 1.238261228835199 +703 967 .7243336975265559 +707 967 .15852433053985432 +712 967 -.9441415952230157 +718 967 -.29678577192232247 +722 967 .11822540824143858 +738 967 -.3336548173407624 +740 967 -1.832069867892459 +746 967 -.5274872831876477 +748 967 .9928012190300559 +759 967 -.7333768011355974 +761 967 -.6726499208539461 +762 967 -.4533712427029244 +763 967 -.6511028427618306 +769 967 .4099853025419055 +781 967 -.9840614626839782 +823 967 -.05612411746480041 +828 967 -.5272424857699312 +830 967 .21849792220845624 +841 967 -.7964669831372391 +843 967 1.217721412117434 +845 967 -1.2248063084112044 +849 967 1.5175380631473665 +858 967 .8984129837833496 +872 967 -1.6684565457485547 +884 967 .33363163255735157 +917 967 -.8227636394032032 +945 967 -.8271443206176832 +947 967 -.7269903188604497 +965 967 1.5057506797065645 +978 967 1.424185383275193 +985 967 -.5616082467555014 +996 967 -1.438818970176586 +14 968 .2521047067397629 +33 968 -.4576905930168994 +46 968 -.4117138736431712 +52 968 -.7266459222829933 +64 968 -1.1143673163391539 +65 968 -.14160864070333248 +88 968 -.19818619985590905 +94 968 .7739010071881893 +106 968 .8846136061051323 +111 968 -.044676332089837484 +123 968 -.0004517774283132603 +124 968 -.27089708867849305 +135 968 .5626279584169017 +181 968 .41025152401406045 +185 968 -.318058201920331 +190 968 -.6849542141315086 +197 968 1.7396884434225321 +212 968 .03074581649939842 +221 968 -1.9176274995497176 +228 968 -.13246261165133388 +236 968 -.26368840075952277 +243 968 -.27889095424711663 +246 968 -1.0437288508855405 +253 968 .13438477348561612 +259 968 -.6363812751488545 +264 968 -.39293516781602505 +270 968 -.7423273577862219 +288 968 -.8631323046044207 +289 968 -1.471543631716037 +293 968 .05371665892653146 +304 968 -.0942424885385218 +333 968 1.4990865419450061 +346 968 -.11814935836912104 +348 968 -.415304493577092 +350 968 -.0858202593956374 +360 968 -.42955178676643635 +361 968 1.133544861192072 +362 968 1.1744270555994558 +368 968 1.5295568366985794 +371 968 .8768750645805836 +388 968 .6938488747388827 +399 968 -.08247194504431403 +400 968 .5147686126230008 +413 968 -.9769056983813864 +414 968 .251508981426773 +423 968 .07052457324717103 +432 968 .22365854103521246 +438 968 -.12227813030330584 +447 968 .2549410839948443 +455 968 -1.3966337273695553 +460 968 .9345751537816032 +471 968 .05190908139327364 +476 968 .5731780017173977 +478 968 .021171018862432153 +497 968 -.9840153414120141 +498 968 -.4029820378888832 +504 968 -.7355008776750586 +507 968 .19456005913055685 +521 968 -.9462362498171257 +524 968 .38428811258244927 +538 968 .14455274244121127 +540 968 -.6806929907918009 +543 968 .22498099059334034 +555 968 .044517954851894984 +557 968 -.49160527099233 +563 968 .057089079546231845 +571 968 -.4926072897387992 +574 968 -.09052567080752474 +577 968 -.3549605717442761 +588 968 -.004815299958752503 +592 968 1.0200880901318687 +598 968 -.9707838639601822 +615 968 .8076058583691523 +618 968 .9969083223239757 +621 968 .6195711403433344 +625 968 .5366003425101437 +626 968 -.3679516697158219 +630 968 .6316220998625349 +638 968 1.398632757585631 +640 968 .43449695607952227 +659 968 -.29725884981069717 +673 968 -.8879967119208676 +692 968 -.3932537728951678 +709 968 -.8142774384033713 +713 968 -.12390194625225569 +719 968 .27957285354582173 +759 968 .013627678859028642 +770 968 .6632323173346855 +780 968 .17950697024078277 +795 968 -.05633006439657977 +797 968 -.5245015298417857 +798 968 -.1814510618863161 +801 968 -1.4599474821702227 +805 968 .7214711894567299 +824 968 -.238918284639892 +855 968 -.9307613470932319 +858 968 -.19497647148321873 +865 968 1.0831913006676372 +866 968 -.165182413889619 +874 968 -1.704130506185046 +876 968 .12507319491169883 +878 968 -1.2540557911695989 +888 968 .01651217935768387 +893 968 1.2303848073279768 +897 968 .44172503752987596 +898 968 .14712230450083638 +903 968 .2974995116745826 +906 968 -.24763157533395658 +909 968 .21895727933032424 +911 968 -.5762928628802808 +912 968 .9240029235657004 +925 968 1.173522911504348 +931 968 .2080979330027038 +941 968 -.44910318006420424 +948 968 -.4191128309555956 +966 968 -.0890845754051186 +968 968 1.3575907456404925 +971 968 1.4296066258903648 +981 968 -.806171948031516 +982 968 -.9203086440621141 +19 969 .5517364106195574 +43 969 -2.3730911281282596 +93 969 -.1516561517148057 +98 969 -.16394163150850408 +109 969 2.5827141582053343 +136 969 1.963247677524661 +158 969 -1.8765527290456416 +169 969 -.9348369447705096 +171 969 -1.0366130138779366 +187 969 -.22419242925507613 +193 969 -1.1073980422769751 +195 969 -.09962352941939005 +202 969 1.0252089861368787 +209 969 -2.4623989825115244 +238 969 .9571652670919977 +246 969 .4004426313423601 +288 969 .8841876871194886 +295 969 .3320670847420049 +297 969 .42668747624925996 +312 969 .9849251771777484 +313 969 -1.2123256559849485 +314 969 .3015559181433064 +330 969 1.8341090774958537 +337 969 1.7264339541797322 +340 969 -.8289522220373253 +341 969 -.5211203230391562 +342 969 -.9012396447063944 +347 969 -.22702570633791097 +357 969 .16734694890323748 +376 969 2.228305167452825 +377 969 .8342168314469229 +391 969 .20058718246313467 +406 969 1.6878934806297383 +407 969 1.0698913067725384 +416 969 .6624147958055262 +418 969 -1.1077684996709083 +429 969 1.1077396327535953 +437 969 -.5001302711623324 +444 969 -1.457868574158813 +460 969 .5509468096386486 +462 969 .6753858561709678 +467 969 -.0468202955770294 +482 969 -1.1807476199066085 +484 969 -1.3076346517805844 +485 969 -.21679564524818007 +489 969 .5286242495206551 +496 969 .06669694089694594 +504 969 .7157043576234544 +506 969 .835011147549519 +513 969 .21198817018686975 +517 969 -.12195253053241212 +526 969 -.6420255026074442 +546 969 .256809070565892 +551 969 .8153168268859677 +562 969 -.8371493211632387 +563 969 -.7355016552790483 +585 969 -1.220060567930197 +598 969 1.4374348469999974 +599 969 1.8592353633269318 +600 969 .7176087623881702 +612 969 .6130621692492985 +635 969 1.1571237050828618 +643 969 -1.476398984308065 +657 969 .05377951441370844 +658 969 -1.2581932201348833 +665 969 .4436847518544802 +667 969 .4574160946191572 +671 969 .5906293217500912 +688 969 -1.2343973312657908 +690 969 .6221363306881763 +691 969 1.0657641232154496 +696 969 -.62994575170602 +706 969 -.8185746008556676 +709 969 .263791503327614 +715 969 .4542024621015568 +724 969 -1.1082749505051512 +725 969 -.4785221121877654 +750 969 2.992120933125507 +760 969 -.10516247637258289 +763 969 -.8635696844771221 +772 969 -.34176830277355474 +793 969 1.0299072601479946 +795 969 -.31755219604406343 +797 969 .6077360669262932 +808 969 -3.204082532477678 +817 969 -1.977383933543739 +832 969 .6473448501358539 +833 969 1.4885141261168413 +843 969 .11718404732264892 +849 969 1.4784095840900606 +854 969 .39872165678828275 +867 969 1.4000746705582083 +871 969 .6812814645986409 +904 969 .6843001364863098 +905 969 -1.1108088108432808 +913 969 .9637691645270092 +933 969 -1.049695711903853 +936 969 -2.3346735004620567 +963 969 .5456382976740732 +969 969 1.541673035055846 +983 969 .1719307158943526 +991 969 -.014518043669175112 +996 969 -1.9869664099776465 +33 970 .0870617715331568 +35 970 .14393160419523376 +46 970 .7330499415392556 +47 970 -.6602376730358777 +62 970 .8755417265666942 +66 970 .5720263620374543 +92 970 -1.8621310830596551 +102 970 -.15229223728493543 +106 970 .8647117965282859 +117 970 1.0066887162236722 +120 970 .6861173820834995 +128 970 1.3417449449808274 +134 970 -.28057819368491904 +143 970 -.6804258973791987 +150 970 -1.0281138435459871 +166 970 -.631294642076455 +172 970 1.1443621295555113 +173 970 -.6169961371894572 +177 970 1.4007084210556606 +192 970 -.3088453239100438 +195 970 -.20783074434693147 +201 970 .7990302850952107 +218 970 .7529128635551157 +228 970 -.2568477624033575 +231 970 -.5265559919799335 +233 970 .5463619930997419 +235 970 .42666460497718883 +243 970 1.0310241734855168 +247 970 -.7620793134462732 +257 970 .8640564546173544 +269 970 -.0038900626231195903 +275 970 -.17238682511028056 +276 970 .19135070893899725 +291 970 -.10151794525190444 +296 970 -.03495892420634479 +311 970 .5888739017591423 +325 970 -1.2237057459686016 +326 970 2.203674558181767 +353 970 -.4731979478298157 +366 970 1.6325476195130793 +373 970 .6603756322285685 +375 970 1.187123175826984 +376 970 -2.680384573331926 +382 970 .49724655481357366 +412 970 -.0460863208038922 +413 970 -.13006350892792617 +416 970 -.6509767092287947 +428 970 -.5124138184888469 +439 970 -.32028578866314494 +450 970 2.5060503831786343 +457 970 -.5290145903963209 +467 970 .5166104602833503 +470 970 1.3387827250472693 +486 970 .43276684472863963 +504 970 -1.6728873860378042 +526 970 1.1658927922019457 +534 970 -1.4655157103703282 +557 970 -1.3165058986644935 +560 970 -.4540016265380431 +564 970 2.9868632673010906 +567 970 .533032688074149 +568 970 -2.344144012395605 +583 970 -.2569083179472322 +604 970 -1.3042821467013843 +606 970 -.8871082700747123 +629 970 -.7355347682225961 +638 970 .5105388021284755 +639 970 .3782188670119486 +642 970 -1.723889476660799 +649 970 .8152072063125848 +653 970 -.28402397817059144 +664 970 .3552948972400301 +669 970 .5302518818883779 +674 970 1.1487875625471173 +695 970 .2785871966300861 +698 970 1.1220315840166333 +710 970 .07237271058305345 +731 970 .07018562043552447 +739 970 -1.0468569698084427 +740 970 1.5155501133568416 +750 970 -1.2626015528939476 +753 970 -1.0197165932484598 +761 970 .5553784044768796 +774 970 .13052202591383405 +775 970 .3715325007826744 +784 970 .806563161906385 +790 970 .45857697964347005 +810 970 -.7311585339989148 +811 970 -1.7658054510172283 +813 970 -1.5816256311152814 +814 970 -.058234362696435726 +819 970 1.3096433284160125 +826 970 -.5155910620609438 +830 970 -.216940626068783 +832 970 -.5716588250262862 +836 970 -.445056274271362 +843 970 .4978212395522804 +856 970 1.2903943043108617 +878 970 -1.7644276735567075 +882 970 -.7102649502827244 +900 970 1.0699964785267146 +927 970 -.24505936687222965 +943 970 -.24143193906138935 +954 970 -.2807310183767699 +965 970 -.2602883636490887 +15 971 -1.0211167473798297 +32 971 -1.2683520310300367 +42 971 .17762793731675783 +44 971 -.4933851630740033 +54 971 1.8570571969822876 +56 971 -1.600243040353811 +63 971 -.4619393123041419 +71 971 -.3702359158471565 +74 971 1.1783518564394286 +87 971 .16169357959884523 +107 971 -.6603548293793946 +118 971 -.009466142130706706 +124 971 .7368763602494374 +127 971 -.05820771680953943 +137 971 2.541524416287894 +139 971 1.391839110900328 +148 971 1.0023284452477514 +154 971 -.7540838195665125 +159 971 .17877943600715612 +172 971 .8906505333448352 +218 971 -1.1928941488131772 +219 971 -.3585192384248415 +234 971 2.204536476382141 +239 971 -1.8197375484549343 +247 971 .4861863316481572 +252 971 -.6455315091063895 +261 971 -1.3630359014441378 +276 971 2.408447869041497 +293 971 .5885367233049479 +300 971 .5066025253261346 +310 971 1.7911114257425673 +320 971 -.9419804180549594 +323 971 .33811868956132024 +328 971 .913906411923667 +337 971 .6494158713946961 +343 971 -.8884751767531778 +348 971 -.6858889477729141 +355 971 .9945176009803824 +360 971 .7855662219957901 +363 971 -1.2870666746581076 +369 971 .26408984717596207 +374 971 -.6805211272979199 +385 971 -1.3177360658921347 +401 971 -2.261467389752863 +404 971 .8474043498195555 +406 971 .19550693031941938 +416 971 .7240320088782536 +428 971 .5997486841270456 +455 971 -.24941765096978424 +457 971 .34088720665135264 +460 971 -1.335501770332721 +484 971 .08085455402465727 +494 971 -1.3495117489126494 +526 971 -.9509860511281899 +527 971 .9051488982979827 +529 971 -.2742692785313635 +539 971 .1008649599273887 +545 971 -1.820519025923454 +565 971 .3755440024333354 +581 971 -.8223244197693864 +605 971 -1.8203214555610703 +612 971 .5944277544819236 +620 971 1.1180102496765534 +624 971 1.9098608621382007 +631 971 -2.0468634686560896 +636 971 .33805840880877414 +650 971 -.10814522984253662 +674 971 .9683332744910635 +680 971 .5143036094643737 +688 971 1.646090218818161 +693 971 1.398656436712762 +696 971 .6383696127763089 +697 971 1.8050260504694933 +739 971 -1.360317014264654 +746 971 .5908186713201737 +756 971 2.816716951274494 +759 971 -.8540728920169138 +768 971 -.579930440178522 +779 971 -.48368880840055206 +782 971 -.8984727406021233 +784 971 -.26035898402879254 +789 971 -1.2294213296846703 +796 971 -1.6508278248589603 +806 971 .44289625903331964 +807 971 .6980818621072192 +809 971 -1.1490623795499637 +816 971 1.5377544593405272 +821 971 -.3966251900309314 +822 971 -.39014298456977614 +825 971 2.156944843101753 +827 971 .42292118344286234 +830 971 .24940047587205874 +834 971 -.16610404498374115 +836 971 .09419664977450354 +864 971 -3.137846527939139 +867 971 -1.3534409626272972 +870 971 .7003216756457515 +887 971 1.3548254206482746 +890 971 1.1506522400030077 +906 971 -2.340082780180654 +910 971 .7940400312231777 +913 971 .34066114789819535 +924 971 1.6967004860369082 +925 971 -.03224318917536953 +986 971 -.8791825081362368 +6 972 1.6379479969552444 +13 972 .5123076084872304 +16 972 -.06838067817266713 +35 972 1.2056952773054688 +38 972 -.5002819525698907 +69 972 1.3638588457561307 +74 972 -1.6776433925800915 +96 972 .9292069497136228 +131 972 -1.8389262950508969 +183 972 -3.8391047994124636 +189 972 .584778584274509 +198 972 .23036558636090554 +206 972 -3.252673975956852 +211 972 1.7510922120913133 +237 972 -1.2510634617514798 +239 972 2.9033974334673593 +248 972 1.740222612726649 +253 972 1.4179995602958606 +254 972 .6106366531640732 +274 972 .6476026549469089 +308 972 -.12947565473998746 +318 972 .56443668311484 +323 972 -.5557656778110434 +329 972 -1.396624163488922 +335 972 .979120085401388 +342 972 .044500837096493294 +354 972 -3.129410169756098 +355 972 .14348345930060996 +361 972 -.32316700810003335 +367 972 .9330735726371197 +368 972 1.5321390498788592 +371 972 -.023160618435114327 +381 972 -1.3928551166896759 +402 972 1.3126718715211112 +409 972 -.7840688108343772 +410 972 1.3539568597897378 +421 972 1.208450846493827 +429 972 .2128272116858778 +445 972 .9510159882103622 +450 972 -.07780931293563477 +456 972 -1.7509922403739138 +457 972 -.3735209271412539 +461 972 -1.6289997371529226 +471 972 .9839404463599545 +473 972 -3.5049466072397975 +479 972 2.8592121401561625 +489 972 -.5742912605218145 +491 972 2.9231026719501543 +496 972 .13343862563880196 +500 972 -1.3602745403271448 +516 972 .6910148571745529 +527 972 -.7535497306271566 +538 972 1.255812492925309 +543 972 -.8570167327014115 +560 972 -.911386609362198 +564 972 2.1280389585324455 +584 972 -.3893355446809291 +589 972 -1.7167854859366776 +600 972 -2.216824791815023 +630 972 -2.1584543347653975 +641 972 -.7417752621063233 +642 972 -.40325716562149505 +643 972 .9889027508690114 +658 972 -2.3429494833650937 +697 972 .7041465464563664 +700 972 -1.645630601376019 +710 972 -.9614970265309455 +733 972 -1.5529054017671706 +743 972 .15427648026232477 +748 972 -4.151614481308827 +756 972 -2.062010885133251 +764 972 .3313301815173382 +768 972 .39780394818075904 +779 972 .19086092205844557 +787 972 1.260652293786198 +807 972 .5953546127060904 +811 972 -1.0797646921799742 +814 972 -.5529206852016058 +833 972 -.6156434751179145 +849 972 .0035635288708631262 +856 972 -.06636948232746818 +874 972 .5822008413841783 +879 972 -1.9183604779912116 +884 972 -.20617212573268234 +888 972 -1.447577606633689 +900 972 1.880147347872235 +903 972 -2.611357002592952 +905 972 -.9253683596204301 +910 972 -1.6688669730994237 +918 972 -.22865694239834583 +920 972 .9883988006104288 +930 972 .3949403205073854 +946 972 -.391235412179267 +960 972 -1.3286377793592676 +981 972 -.7267682729099568 +993 972 2.257861787123809 +995 972 -2.9015382574526094 +998 972 1.5172225641457253 +4 973 -.3852088934329899 +20 973 -.15597040383187993 +35 973 -.06750233940967207 +45 973 -.8498256378729568 +51 973 .5665129033819457 +53 973 1.9109465041426585 +56 973 .26430396101752496 +80 973 1.6676274037529562 +82 973 -1.526621008291853 +83 973 -3.0497195521886535 +87 973 .8205249224401905 +88 973 -1.860933613781362 +100 973 -1.812352666709609 +108 973 -2.4965683759254462 +123 973 -1.6248403355653422 +132 973 1.0584375041946514 +138 973 1.397342143787067 +141 973 -2.093136480220959 +146 973 1.8477829766613518 +148 973 1.6869718298726566 +159 973 2.174081085720857 +162 973 .43782813298723416 +168 973 .6679682542065883 +171 973 .8656139765694462 +187 973 1.4095627725421647 +191 973 1.1361822011908953 +192 973 1.107287667000133 +217 973 -1.9523190200856329 +222 973 .954782827374922 +224 973 .8211947005855307 +241 973 1.4508873894596304 +247 973 .11357970930794112 +262 973 -2.4206706195922596 +297 973 2.998934930401232 +300 973 -.5554033242620803 +321 973 .4023466093629943 +330 973 .4916727064594947 +334 973 -.43631612841198086 +343 973 1.9816636896630997 +368 973 3.429501731859397 +428 973 -.24363008437484465 +438 973 1.686534134812295 +450 973 1.190773487257241 +460 973 1.7194707880662572 +479 973 2.148889606228433 +492 973 -1.464772004964473 +500 973 .3391410414285857 +501 973 -1.6745088433067867 +515 973 -1.4759207640467362 +526 973 -.20384057728407573 +528 973 -1.096693561897783 +542 973 -1.5605978834672927 +548 973 .5040643741459253 +559 973 2.1524889208367677 +564 973 .37548937457003667 +572 973 -.03050424088606421 +575 973 -3.39466115385301 +601 973 2.4391926352128395 +624 973 -1.2955326257725712 +643 973 -.7986327925688371 +651 973 -.055431262573519186 +660 973 -.7735560622601597 +676 973 -.4543775430905383 +702 973 -.4563887111736768 +707 973 1.7736376364126227 +711 973 .6115196263043134 +736 973 -1.8049411213967321 +757 973 .37200495464010974 +787 973 2.4749384326657013 +790 973 1.5258809231707946 +792 973 .4287199767593817 +794 973 .24712730180281095 +809 973 -.3624148855351096 +816 973 3.0175421562903004 +828 973 -1.4745776463182612 +843 973 -.10891705724024364 +849 973 3.53079875816336 +853 973 -2.981198120904618 +855 973 -1.6604090613386615 +856 973 .9359781271913881 +859 973 1.4039364199994648 +860 973 .5152209380940393 +862 973 -.973600321606218 +864 973 -.7440083330883904 +872 973 -1.8119995124242885 +888 973 -1.8284331949263064 +904 973 .896806141608621 +905 973 -3.1544398986788034 +908 973 -1.9420956719971303 +920 973 -.9495345333298741 +930 973 2.228878435443916 +946 973 -.1319944008133977 +954 973 2.0369014348096806 +962 973 -2.797853957421638 +967 973 1.6396528173162954 +974 973 -.14665011584322823 +976 973 -2.24478668092562 +978 973 -.2487804001886946 +990 973 1.6577544454319249 +9 974 -1.2431737752055345 +10 974 -.6439132177591196 +18 974 -1.6305602499147713 +28 974 -.21708190907307046 +40 974 -.8499803006673491 +60 974 -.3185135918273172 +62 974 -.04715683320484357 +67 974 .3852289468744523 +69 974 .7645547421538599 +85 974 -.12800595996432645 +100 974 -.7700118960171091 +106 974 1.0984988848763457 +136 974 .6903423253581 +139 974 .823934051771446 +160 974 1.8762109234554898 +161 974 -.2485572596306519 +187 974 -.9937940339048901 +190 974 -.3299629741197234 +215 974 1.1205556621367 +247 974 -.8392328593110074 +251 974 .8919026288371364 +252 974 -.40928819922219484 +254 974 -.5097669705504257 +259 974 -.14830388314060303 +266 974 -.6747887050462296 +285 974 -.4715177502161425 +291 974 .9917518850709907 +296 974 -1.1166530629296043 +300 974 .40778685615560345 +304 974 -.4494371870629779 +314 974 -.28695338952967925 +323 974 .6190767714510145 +334 974 .15112766523505977 +349 974 1.3691778053577546 +362 974 -1.2149276622876972 +371 974 .807060775172228 +384 974 .7940541012882397 +427 974 .16549951082648298 +437 974 -.0767046241523022 +459 974 -.23565673618440758 +461 974 -.3306444968501937 +462 974 -.789641646740164 +466 974 -.9215550387417929 +470 974 -.22276377593102506 +473 974 -.7410401610298769 +479 974 .09829787715072524 +488 974 -.9126404911605878 +493 974 .3585538563265806 +500 974 -.3470166348384975 +512 974 1.1725734718865304 +517 974 -.03340630014849459 +523 974 -.19364865910021062 +531 974 -1.0984080501983198 +553 974 .3772264486087794 +554 974 .052521427756477404 +562 974 -.11187318880521954 +590 974 .08490164512077597 +595 974 .356108213045735 +624 974 -.9454562224487038 +655 974 .008980093898621935 +669 974 -.28315781384238187 +687 974 .21953488393896117 +695 974 .2553720645357617 +701 974 -.5821008868833544 +702 974 -.13655692308995165 +710 974 .09357857429686904 +715 974 -1.1732875070472712 +719 974 .11533196547401697 +725 974 -.6003131467989972 +727 974 -.3354691286479397 +738 974 -.04338216987974666 +773 974 -.18966621156129146 +800 974 -1.1330187634708926 +825 974 .010452999136156407 +829 974 -.4245889728246968 +838 974 .25904627323519247 +866 974 1.489557736001039 +869 974 -.5270399147677486 +870 974 .40212755736558703 +882 974 .6930240727704918 +899 974 -.6153723846299537 +905 974 -.26223007357848477 +908 974 -.27950243711375533 +926 974 -.05406178212423628 +935 974 .22496182600736567 +940 974 .4203106036700541 +948 974 .10390873296169095 +951 974 -.6831590494565579 +954 974 .37191114757817234 +984 974 -.843198626864844 +1 975 -.9644410743171055 +4 975 .33529095670825476 +12 975 .36844410088440094 +15 975 .7609529562983066 +24 975 .7714743020617042 +33 975 1.2681738683055421 +48 975 1.8680891877348211 +69 975 -1.2699999106576936 +89 975 -1.5188779511997001 +115 975 -1.224396921989527 +119 975 .32792940845923635 +132 975 -1.1933776378526553 +135 975 .007527487947666223 +148 975 .5342349334512014 +153 975 1.2224084763434668 +154 975 -.570890406785475 +169 975 -1.0954663083861278 +184 975 -1.4406683087406327 +201 975 -1.4033735234615206 +210 975 -.9069263201899603 +225 975 .2504428693235974 +233 975 1.025945490068521 +239 975 -.02269640940926508 +247 975 .5597794720539151 +252 975 .06110817648669309 +266 975 .4276756987976137 +271 975 -2.5993627880732397 +279 975 1.2643592406076734 +290 975 .022025775169217485 +293 975 -.12546515215204568 +307 975 -.7395166012889338 +309 975 .6965239348225462 +319 975 .3123251645285302 +326 975 .027135908404253548 +333 975 -.17411850736595674 +334 975 -1.1135470015004532 +345 975 .2861237588230815 +358 975 -.20255531158765006 +360 975 3.18577361912937 +413 975 -2.1196144657211926 +414 975 -.17787160177040576 +419 975 .6507740425762355 +421 975 .3573384428831628 +431 975 1.312079253609386 +446 975 2.358450829806382 +454 975 -.2618663252239051 +457 975 -.8239799695261167 +461 975 -1.8973604326005673 +479 975 -.35100297027994887 +495 975 -1.682376333904685 +498 975 .42468811182708427 +503 975 -1.0819641985115553 +519 975 1.5917949485350669 +520 975 -.46303613771824487 +532 975 .060995849447430334 +542 975 1.335991438130722 +545 975 .8066741465045363 +561 975 -.5955902951775949 +563 975 .2603008236083628 +575 975 -.8094185911574009 +588 975 .22872870593021544 +592 975 1.0893374970607512 +597 975 -.45869186656531413 +602 975 -.35721131527535005 +619 975 -.16110842933461145 +628 975 -.21046211969030815 +630 975 -1.1717240947188352 +636 975 1.600060920593969 +642 975 .9550854317908758 +651 975 1.4235960362713238 +675 975 .624483728398201 +682 975 .37062990611391655 +684 975 -.06721980563616961 +701 975 1.0720285804269232 +703 975 -.7500638045480177 +704 975 -.41006226043224864 +716 975 1.037588773119723 +731 975 -.09893612067166532 +740 975 .8874306343191548 +819 975 -.06124280021844161 +846 975 -.3624837231875803 +849 975 -1.5300472846262398 +855 975 -1.0010268180859319 +864 975 .09146978260588823 +866 975 -.6353698914175275 +884 975 -.7613603843054926 +885 975 1.1236853422485469 +913 975 -1.4454865425760206 +914 975 -1.2374987707146239 +919 975 -.5263552125788331 +922 975 -.369588066332163 +923 975 .7754375941661383 +937 975 .07737903291799911 +947 975 1.3683294163137716 +948 975 -.19033193248332783 +953 975 -2.2658136540640084 +962 975 1.4142221317606816 +978 975 -.8437290235744542 +983 975 -1.9292023734342427 +995 975 -.01055514682901773 +5 976 .20131482433998488 +8 976 .6634574890962808 +11 976 .3814873600712358 +15 976 -.8628953427598857 +26 976 .24661621946081366 +37 976 .9325830766275368 +44 976 .8654662088057632 +61 976 -.5113669899165931 +70 976 -.39299365233130323 +73 976 -.8046881444469811 +80 976 -1.810907897671486 +84 976 .4061074996751858 +86 976 -.8851101602411644 +139 976 -.7406079967794631 +142 976 .005589349240168018 +144 976 1.0522407985585838 +146 976 .2750053676216242 +171 976 1.9478126806715772 +183 976 .39547768745284384 +190 976 .9224326486168825 +197 976 2.057794861907923 +206 976 .08882852574705286 +222 976 .8421836909958971 +228 976 .6104601628768973 +231 976 .5772927226345548 +237 976 -.8427677148886479 +251 976 1.8000748101993378 +252 976 -.06544931326861571 +261 976 .27597784939015507 +267 976 .09078564307220927 +271 976 1.1595512443234284 +277 976 -1.1550647293981653 +283 976 -.8326857230621941 +318 976 .03128172331710106 +325 976 -.6322128369099773 +328 976 .4004567139491191 +335 976 -.1758511790558974 +358 976 -.3161998847738593 +373 976 .9635968392485409 +393 976 -1.6539098493701516 +407 976 -.44026361440923173 +410 976 .3005694720584011 +422 976 .2303369356733892 +435 976 .12413926752858834 +440 976 .12687770660414935 +454 976 1.5252406397735254 +477 976 1.9171059921574298 +482 976 -.3274895596281232 +489 976 .6297075322637595 +512 976 .06614525733256198 +532 976 1.2661988871303962 +536 976 .044816768645217483 +539 976 .17568814539327507 +547 976 -1.066984743691308 +549 976 .8651296466082263 +573 976 -.9624626162923103 +575 976 1.1560692423506647 +576 976 -.2129846444550601 +577 976 .8361701633997008 +606 976 .17656090620776443 +610 976 .918295953036879 +616 976 -.2643158922910444 +618 976 2.037880138144123 +620 976 -.6400641240868631 +621 976 -.28593335497255906 +624 976 -1.0176787617790202 +626 976 .29357440241799604 +628 976 -.3361437081531303 +642 976 -1.3540096777637636 +663 976 .1836581151296979 +689 976 -.422127127662856 +694 976 1.7277993503283104 +700 976 -.22779212125065218 +709 976 -.20375023036783213 +711 976 -.03451639990624525 +712 976 1.5461138525439688 +727 976 -.25434497862393657 +732 976 .3947127046481598 +733 976 .9766009062513078 +737 976 -.3071501886300004 +740 976 -.06662472799196234 +747 976 .37860912723542106 +754 976 -.11743160412479015 +756 976 .6379072915406119 +758 976 .6347991245396414 +760 976 .8377498547271086 +769 976 .09887685668537033 +775 976 -.24936070679293743 +788 976 1.5407193087006652 +799 976 -.2286059463413299 +819 976 1.1272170012462654 +825 976 1.3596443526365611 +830 976 1.0816153370825556 +837 976 .05023750935686522 +840 976 -.1039820934090639 +846 976 .8092764012873119 +852 976 -.5264509584752499 +872 976 -.2566680564889917 +874 976 -.5659390276012163 +878 976 .35821666975225425 +883 976 -.5242742447205012 +913 976 .4200327885756188 +916 976 -.18104932904149335 +920 976 .4332724413972892 +921 976 -.147828071107937 +922 976 -.5256449040843706 +928 976 .2625297069134936 +940 976 .37440894283321235 +949 976 .5615166555940079 +961 976 -.48820588249114105 +977 976 -.37253941123161144 +983 976 -.1683972174761053 +984 976 -1.2547999727867487 +999 976 .1477338354327272 +7 977 .04144805728108572 +17 977 -.24467089172763556 +19 977 -.8832470965664744 +50 977 .2983826663000443 +53 977 .6136266298497738 +82 977 -.3994723658926409 +88 977 -.39156280695918355 +92 977 -1.4259508745312146 +94 977 -1.239153350555113 +102 977 1.3371424223375568 +126 977 .3531538279771297 +127 977 1.8179294452835104 +136 977 .7372227359234935 +143 977 -.14970739257806046 +145 977 .5011278159731575 +150 977 -.953520750291958 +163 977 .107431167391504 +164 977 -1.6814443257084004 +170 977 -1.2972939355956146 +205 977 1.3642754677391675 +218 977 -1.3070999711137488 +232 977 .943614844405516 +257 977 1.260127160175876 +275 977 .2100172967445193 +279 977 -.5853971715375057 +282 977 -.726402127397791 +299 977 .047457340620928684 +314 977 1.0748058112518648 +316 977 -1.1853994328955277 +318 977 -.6452155128736737 +332 977 1.2364999647200055 +333 977 1.32338679046855 +350 977 -.19541828564922714 +386 977 -.6553727531695043 +387 977 -.17176175208318153 +388 977 1.3268037045421395 +397 977 -.7044017676361182 +406 977 -1.2157991406906408 +411 977 -.8418946328379476 +416 977 -.5116071459055714 +455 977 -2.61854086886482 +471 977 .7635986704519704 +487 977 .4721455757633967 +492 977 -2.4038966042788568 +508 977 -.8789726972481997 +520 977 .5651160717278966 +554 977 -1.1203199317364552 +555 977 -.7199992967204194 +569 977 -.942141652995533 +575 977 1.2854203131415887 +579 977 .016952905336161422 +586 977 1.3222257671016495 +615 977 -.7022975596974799 +620 977 -1.412522356311925 +638 977 1.2873061245810002 +649 977 -.32941965759751163 +655 977 -.7713149435159783 +681 977 .635116035477546 +684 977 -.09685756062848605 +710 977 1.3812311994670068 +716 977 -2.07870982230721 +718 977 1.7745710076027326 +720 977 -.7982841843249219 +721 977 .27956974682754343 +740 977 .09151060028024327 +744 977 .8052480556452247 +762 977 -.6145090563801566 +781 977 .9980691286368134 +783 977 -.15812070055097976 +791 977 .34249467505664727 +803 977 -.3424750092945111 +825 977 2.0425053471473174 +840 977 .25740618338801646 +848 977 2.3112954874662415 +871 977 -1.935882085714565 +874 977 -2.33965192242545 +883 977 -.0743140808120052 +885 977 -.9498116397675211 +895 977 -.5621857219397395 +906 977 -.11133602604265522 +907 977 .5316773912888405 +911 977 -.11675660974926483 +913 977 2.34315916947991 +924 977 -.010362029026824864 +929 977 -1.646391572792947 +943 977 -1.0919726146590516 +966 977 .642797655174167 +978 977 .7591542391560556 +998 977 1.3409694143418849 +1 978 .4757949610230907 +8 978 -.6064541147915097 +12 978 -1.6239514071219794 +18 978 -.11425187015780265 +24 978 -.29094200953716187 +26 978 -.13214506751996974 +29 978 -.05648609487000675 +53 978 -.38850383948313105 +54 978 -1.373323310617532 +63 978 -.30460441036817665 +64 978 3.0413093610877198 +69 978 -1.7695430945829271 +70 978 -.42934516712157056 +82 978 -1.2485405071272129 +86 978 -.2847321108035388 +91 978 .07845808963460263 +103 978 -.4380065991533556 +106 978 .1157919607921395 +116 978 -.899172640363517 +122 978 -.5038371755401163 +131 978 .11130267922633894 +134 978 1.0641151136741984 +147 978 -1.9012614877114098 +166 978 .7459875952622 +167 978 1.8114805685708812 +180 978 -.29707230039836946 +181 978 -1.436621714934091 +223 978 .2492993996653139 +228 978 .30553203063166234 +241 978 .8566347920490314 +256 978 .9040457566741616 +272 978 -1.4629216141330779 +273 978 .24617280657707308 +279 978 .23910759764731732 +288 978 -.7167103470943887 +290 978 .6949429035830198 +302 978 .8176161536897515 +306 978 .7768473743483904 +319 978 .8687883251089286 +329 978 .1687891688374001 +330 978 .8859954078465033 +340 978 .16726421478871567 +344 978 .9701639716769754 +364 978 1.6168603046304535 +374 978 1.2504553571762347 +375 978 -1.5408588663016372 +376 978 2.0940866261427376 +381 978 .2665642021187392 +386 978 2.5706646753629436 +403 978 -.2529724691929969 +412 978 .6463344271287936 +427 978 .3339184581438537 +430 978 -1.5686896145374825 +436 978 .07644786806418588 +437 978 -.4041173520780238 +446 978 -.2040484201558296 +449 978 2.0216445304920367 +456 978 .45952704967803015 +464 978 .4803368360883037 +467 978 -.4043297352982901 +468 978 -.4102086638477045 +471 978 .2100378368634768 +479 978 -.34748333943659276 +483 978 -.37095591410683126 +492 978 -1.8634255167353 +499 978 .7936546944318299 +506 978 -.3907863970450563 +509 978 .8660770837172723 +510 978 .17147376776064993 +517 978 -.20502192391413793 +536 978 .6237959345504958 +538 978 -.867965924220511 +541 978 2.3093744321747622 +559 978 .7629537524635391 +573 978 -.17004958871575676 +588 978 .6438482021343345 +594 978 -.7131917880783378 +597 978 -.48686382422575186 +602 978 -1.3789790029701123 +609 978 .4792268941572791 +611 978 -1.2292513655774837 +629 978 -.64607618888176 +634 978 2.290818566126771 +636 978 .6517599376690345 +650 978 -1.53699359064491 +662 978 -1.297492477256402 +675 978 -1.8676681026699844 +677 978 .20042407520978153 +679 978 .09340206953505269 +701 978 2.0522936456234855 +712 978 -.8952703044969152 +715 978 1.1922768834548552 +725 978 -.7003676531519727 +752 978 .003774320292402048 +783 978 .17666075719096244 +798 978 -1.1903620182007946 +804 978 -.10149271753859004 +819 978 -2.5312978008867066 +835 978 .6110102479423675 +837 978 -.25016546402656425 +844 978 1.9142712996231455 +874 978 -.6939010589482486 +881 978 1.4684466928748974 +902 978 -.07311563975662863 +915 978 1.2751593091269104 +923 978 -1.2423975613630762 +965 978 1.5030806782565127 +973 978 -.0439495466810133 +979 978 .31468235257695687 +1000 978 1.0799837946086748 +13 979 -.7560797263011805 +18 979 -.022031236600625656 +23 979 -.4873480036535774 +39 979 .12432261854348525 +51 979 -.642052259605183 +56 979 .23353609954744656 +66 979 .5282746532768023 +69 979 -2.518037396577582 +70 979 -1.3331521701994196 +74 979 -.17523540514727717 +106 979 -.4495920208323275 +113 979 -.28357570031408197 +115 979 -.15537214352459922 +135 979 .07702882749906967 +155 979 -.23477110415158614 +186 979 1.4842530948016188 +213 979 .6987405330613501 +223 979 -.44228889328282484 +225 979 -.26070068954929426 +232 979 -.22318362004204412 +246 979 -.7749469272923645 +250 979 .4381791968528628 +260 979 .08030934601965607 +271 979 -.8872411166307459 +297 979 -2.576407746495261 +303 979 -1.8972880213449648 +306 979 1.3981285499582095 +311 979 -.7192029305080407 +316 979 .3126711875617612 +326 979 -.8129975901130344 +353 979 .21663160601183967 +381 979 1.3995940657912442 +385 979 .5801088474724031 +389 979 -.6105565361347838 +396 979 -1.0604302452940022 +398 979 -.23652689499981427 +423 979 -.8199530586188148 +441 979 -1.378614062592124 +457 979 -.9558453316832584 +471 979 -1.6773233585115417 +473 979 .04017643589819675 +484 979 1.9286563945109294 +490 979 .40263731387979645 +493 979 -.2131155359427394 +510 979 -1.9659426069956811 +511 979 -2.292193136179972 +512 979 1.26388301826397 +516 979 -.11377120636736507 +529 979 -.01733421759550094 +545 979 -.3551244875567536 +567 979 1.4039296118167046 +581 979 1.5166349454104495 +584 979 .3803591229776423 +606 979 .3583589662793405 +609 979 -2.282125647618056 +645 979 -.9854855451358429 +653 979 .22662745489628056 +665 979 -2.0130860463183824 +669 979 .526679253606402 +674 979 .6039852148017367 +690 979 2.2973574787520543 +694 979 -.4412616571048734 +701 979 1.6571095301456042 +710 979 .5369587748740972 +715 979 .27028343215146877 +739 979 -.0294875466243155 +781 979 .4781096906116724 +787 979 .5045952004485881 +788 979 .7508966404461778 +795 979 -.017657895033136042 +796 979 -2.5944469120669003 +797 979 -.8660997276323535 +802 979 .6270320710464149 +815 979 1.5815987205634792 +817 979 .4602377648074736 +819 979 -.9906236527430399 +822 979 -.07571290108030486 +824 979 -2.030725008647841 +826 979 2.1948166897876353 +836 979 .5011609747261486 +847 979 -.2171732299148204 +852 979 -.2586994158415763 +885 979 .6623329825027826 +916 979 -.7285817521440423 +928 979 2.131141940698841 +934 979 .5372012849206972 +946 979 -.4588311448896006 +948 979 -.8411290070651373 +962 979 .5890076521142116 +963 979 -.8373844231425414 +964 979 -.23353791275614302 +981 979 -1.4151422804102194 +986 979 .761238407475926 +997 979 -.8687472852893584 +1 980 1.3226242297546293 +9 980 .006483635476057653 +17 980 -1.0896296026010006 +21 980 -.5292824456466405 +26 980 -1.0643939305904269 +48 980 1.669378556027262 +52 980 -.3281341200187437 +56 980 1.677241244570664 +87 980 -.7800060382293472 +90 980 .37997980827895944 +100 980 .34639282119740444 +103 980 .5800424546760254 +110 980 -.8919822900012968 +117 980 -2.612956096956074 +119 980 -.5933062521903723 +123 980 .04224939502049273 +132 980 -.48256356964816377 +159 980 1.9626713846895811 +165 980 .9029693713949523 +177 980 -.7329274631256214 +178 980 1.6397910963037734 +181 980 1.1299653812383033 +190 980 -.41819847856137804 +191 980 .7584036679029597 +208 980 .5461156244198535 +210 980 -.7333925096576334 +212 980 -.08992777644957234 +215 980 -.6869902893057407 +220 980 -1.7215630343002182 +224 980 -.3285508889279595 +247 980 .2676225656515008 +256 980 -1.6427018877113144 +257 980 -1.085783803349314 +258 980 .5767165948322002 +260 980 2.4311853806016956 +284 980 -1.9957669842899746 +287 980 -.05897081640040398 +300 980 -.1240551249365002 +328 980 -1.5371651535725663 +365 980 .6844113102682042 +372 980 1.3785880829732537 +376 980 -.9351496205474886 +389 980 .37846983656640737 +395 980 .3269433167929949 +398 980 -.5588998596908038 +399 980 1.2971001506370206 +400 980 -1.00105784173246 +415 980 -.9909827687100762 +419 980 2.1181091874731206 +429 980 -1.28202966083076 +437 980 .3221916603035617 +438 980 .525799337993771 +453 980 -.5028281770127112 +462 980 .11757697378439641 +464 980 -1.6275038635159673 +470 980 -.12140694069789287 +473 980 -1.3457363160226745 +479 980 .28411577625148754 +488 980 .8602358935892049 +497 980 -1.0454762857514208 +499 980 -.9600732453299334 +520 980 .37951253593683115 +530 980 .49298953267167883 +543 980 .2865107132140635 +555 980 .0497785839405081 +557 980 -.7596179768474226 +563 980 1.0978790563344183 +570 980 -1.0910296585346873 +576 980 -.20062749465324387 +579 980 .12941808408914027 +623 980 .9528388687957297 +662 980 -.9349168231536049 +681 980 1.0120463476730537 +689 980 1.8472502383122904 +698 980 1.1233065860913725 +712 980 1.1190704435731729 +714 980 -.5919291793826733 +720 980 .6937890270170585 +741 980 -.6458606630919724 +744 980 -1.3508577470455305 +755 980 -1.7613704891237643 +765 980 -.04379972002021084 +770 980 -.8230866456082371 +785 980 -.005710942790029878 +789 980 1.2329162438008954 +791 980 .8866565262384898 +813 980 1.7099115061890766 +816 980 -.22957439619100545 +823 980 -.30803868051757893 +833 980 -.9010207923182152 +841 980 1.557074414139053 +845 980 .8904378024452585 +858 980 -.474056816561115 +864 980 -.5726346088124703 +873 980 .8821579060360089 +878 980 -.5014685442804085 +880 980 -1.3063144927909958 +881 980 -1.1945102052965577 +882 980 -1.387377188408493 +890 980 -.7736827383782301 +894 980 2.648748031368351 +900 980 -.7943673833250254 +918 980 -1.1628699900241937 +925 980 .08408724849377669 +929 980 -.5462282901626867 +937 980 -.741680315154572 +940 980 .7380648571237021 +944 980 1.571869091418153 +945 980 -.12210902905562497 +962 980 -2.195411846436519 +967 980 -2.551348732433979 +971 980 .6550150454324275 +985 980 -1.4770550250304495 +990 980 .16716513302640937 +993 980 .00923391082221997 +999 980 1.3090597297822095 +27 981 1.1025822323619745 +35 981 .4031666965321312 +47 981 -.6561117283112123 +61 981 -1.1747411962556955 +68 981 .22654999213145086 +74 981 .017908667510876077 +79 981 1.4655634891364089 +85 981 -.1094919940380566 +115 981 .2106998124069724 +117 981 -.2439460474925268 +125 981 -.21837570006573284 +128 981 -.620511206301464 +154 981 -.40173087240981786 +166 981 1.16811774290736 +170 981 .4887051918653046 +173 981 .021693651924462223 +196 981 -.5394621604674087 +213 981 .04808949467340652 +219 981 .5531036056752427 +231 981 .1021905943917821 +257 981 -.3859978149986686 +268 981 -.7417916048459742 +273 981 .5149382990779134 +277 981 1.4224387290876386 +285 981 .3374480308457385 +295 981 .10053115807097529 +307 981 -.6919311418943458 +310 981 .5340836703443863 +349 981 -.971433639664399 +353 981 -.7849434798598165 +394 981 1.496173998667809 +396 981 -.9225497489986831 +414 981 .4898576714072393 +416 981 .5296989929160466 +425 981 .3492726695368443 +428 981 -.6911963853622218 +450 981 -.8722084967296335 +465 981 -.6185130674015966 +468 981 -1.2733489039534756 +480 981 -.747011517510247 +482 981 -.6109227339916817 +496 981 -.39996371654994345 +504 981 1.1442962434026207 +510 981 -.45237360569326995 +513 981 -.34895175104396636 +544 981 -.4838944316916621 +560 981 .8613567610703213 +561 981 .3354679669106392 +565 981 1.7012498727692937 +572 981 .46103579895884106 +583 981 -.8070946821782149 +588 981 .24297906160672025 +592 981 -1.1852681895565935 +607 981 -.7780424918972563 +608 981 .16569989545139788 +626 981 -.9246557411177672 +630 981 -.5334358517399951 +635 981 .7495775110336675 +643 981 .7857625607925482 +660 981 -.6196383263786943 +662 981 -.2526588085598537 +680 981 .583503083326267 +691 981 -.45578564916026965 +695 981 -.21307523851314747 +699 981 -.41462454699588447 +700 981 .6896171800966376 +717 981 -.8730497702212092 +723 981 .9231184042730013 +738 981 .3621052833747263 +742 981 -.07016231164884301 +761 981 .5176935833514582 +801 981 -.035448616133975784 +805 981 .28824805498157946 +848 981 .5291415263358747 +857 981 .4643597540054494 +872 981 .43155318207895327 +877 981 .6613799641156491 +898 981 -.8303458880797026 +911 981 -.5395871944737574 +912 981 1.9676520296947335 +915 981 .4194411255516615 +916 981 -.7032912293408407 +917 981 -.4035882054169796 +919 981 -.8687959076582132 +936 981 .2350992026444325 +939 981 .476715990293077 +941 981 .13186260487339468 +943 981 .004498084960453133 +969 981 -1.3131727867930383 +996 981 .008570171234434161 +9 982 -.04234705705447024 +11 982 .6118331727779933 +25 982 .716594168092029 +27 982 -1.6865847130191323 +34 982 .25242427089800334 +45 982 .5073914098671874 +46 982 2.403624024988519 +47 982 1.0080811066687063 +59 982 -1.8574984359310778 +71 982 .07615526267387189 +77 982 -2.1093344562375447 +89 982 .18626803673470393 +97 982 1.8770262626297711 +99 982 .6692355581136374 +112 982 .6590977280838132 +127 982 -1.2021202169126322 +158 982 -2.5682713741435403 +166 982 .4414286614343799 +178 982 .03805628621159152 +185 982 .6318865562037778 +189 982 -.29905959485362216 +202 982 -.08669768087840887 +238 982 .47587680665377224 +246 982 -.6786050708033127 +260 982 -1.6161949644587938 +262 982 -1.4303095933861427 +273 982 1.536509383762357 +284 982 1.46438675160488 +335 982 1.1011114784654648 +338 982 1.965815091191347 +357 982 .21317043206192302 +362 982 -.7845308345440443 +375 982 .2966473597264572 +422 982 -1.8365506727089715 +425 982 2.449752114009993 +430 982 .9128345742479665 +447 982 1.2410150803125395 +470 982 -.8767399620502938 +483 982 .9244592444446297 +494 982 .05227218906903337 +497 982 -.1938710746852844 +498 982 .6660366535176262 +502 982 -1.8407249231427518 +515 982 -2.289408160406333 +523 982 .8385186275196603 +527 982 -.1473533543251682 +533 982 -.754329247694857 +536 982 1.281547855524647 +547 982 .6796560058433831 +550 982 -.8063325512464665 +563 982 -.6889518093098655 +574 982 .2517913292808631 +579 982 1.8553692431000632 +592 982 -.10541522699953902 +593 982 -.5564106444203387 +605 982 -.6424707061774612 +609 982 -1.2223109042307483 +613 982 -.4192770341574237 +623 982 -.18609441394056594 +658 982 -1.15012158700277 +660 982 -.8395609860345805 +664 982 .15417726442516372 +671 982 -.7284609110027902 +689 982 -.861781662160692 +723 982 -1.8435067744883642 +728 982 -.2306759381270238 +762 982 -.8365768499627877 +787 982 .6077192165524321 +800 982 .7792996073421097 +806 982 -.6737048646974584 +809 982 -1.1298490976220277 +813 982 -1.2824052111233812 +817 982 -1.962776365172218 +839 982 -.6068436826832435 +862 982 -.08724311271466079 +898 982 -.5005942818686187 +900 982 1.1939080110199973 +901 982 -1.813560254430065 +906 982 -.06014586342056804 +911 982 -.45828483000727827 +929 982 1.6910935017427668 +931 982 -.30133971790400665 +943 982 1.2670669865733166 +946 982 -.4222640094735548 +955 982 1.9935261876918113 +959 982 -1.77370676741808 +960 982 .0923274099969692 +992 982 .628103285086674 +8 983 1.7228674255368222 +21 983 -.8251165678105893 +33 983 -.09405686912049174 +36 983 .8451270269587319 +42 983 -.7692517237121939 +64 983 .6550411747263537 +101 983 -.8161433329673101 +112 983 .7012345241457036 +117 983 .4795788306642532 +135 983 -.5094371884579785 +147 983 -1.0872747066571293 +155 983 -.6271360305005962 +168 983 -.3356206723153603 +176 983 -.6702619181464289 +177 983 -2.5095600944090237 +181 983 -1.7095389264611685 +191 983 -.6749828617447552 +202 983 -.42727918990412117 +221 983 .5150037659161192 +234 983 .6380724370636881 +252 983 -1.0756997560871082 +261 983 -1.4888485939408984 +262 983 .2515965283607251 +264 983 -.25233499454087477 +268 983 1.43294178375305 +284 983 .44765496997271775 +293 983 1.2951906153585493 +300 983 .45884095031642463 +307 983 -1.2947802082258746 +327 983 .10492053651485495 +329 983 .42065035721053856 +335 983 -.1506234406000181 +336 983 -1.0768890088285659 +343 983 -1.3320174035536787 +346 983 -.3587122027039993 +361 983 -.7383010485831789 +383 983 -1.0862469060890627 +428 983 1.207022514479015 +444 983 -2.002082077911241 +452 983 .23102100848073465 +455 983 .35022906203743637 +460 983 .04979000043536515 +472 983 -.019540912246349365 +482 983 -2.0728033468468094 +490 983 .594498128397702 +492 983 .2661460296275237 +498 983 -.6741190893185591 +508 983 -.2875238727960702 +521 983 .9614021371402897 +523 983 -.7690041362238538 +527 983 .3122832428170303 +541 983 .7892766202090523 +546 983 -.10824175530195401 +556 983 1.217318801910588 +559 983 .3166732067584187 +564 983 .14379180863143154 +583 983 -.9834643222884534 +588 983 1.0930748556565142 +597 983 1.1284469292450865 +611 983 -1.2556748069500623 +612 983 1.331963758330278 +622 983 -.2882356705034393 +627 983 2.3199900330018868 +629 983 -.7294026338315385 +633 983 .8138185562520318 +642 983 .222180859538189 +645 983 -1.3704473311136256 +647 983 -.2066404507037626 +674 983 1.3107785785941257 +699 983 .7597054255249089 +726 983 1.7512766689033379 +729 983 -.21533539854174727 +734 983 -1.4530665601415202 +743 983 .8583527638345964 +749 983 -.4164081263750615 +750 983 1.291658336629484 +762 983 -.997537104601331 +780 983 -.836695078955202 +796 983 -1.5919786443998387 +801 983 -.5776859267064649 +806 983 .43226101873071254 +807 983 -.0770847475433633 +823 983 .6072194237440991 +828 983 -1.4367049730263355 +837 983 -.7831785568507317 +846 983 1.1739990174796664 +847 983 -.7545873561655799 +851 983 -1.2102577964179484 +859 983 -1.0731680291696946 +868 983 -.9560021307259916 +871 983 -.2627160879585 +900 983 -.590055493843542 +902 983 .891714489259005 +903 983 .5616073361007257 +913 983 -.2840132308125767 +915 983 .35875006979905233 +916 983 -.8698417667085018 +918 983 -.08544844308115025 +920 983 -.8164477881702449 +927 983 -2.254333932081352 +932 983 -.16381885481311687 +942 983 -.8954449343586622 +962 983 .5496425215264266 +973 983 1.7644628480037925 +986 983 1.048985325258623 +997 983 -.816940561068502 +9 984 -2.041433885360236 +10 984 -.7093310040948901 +23 984 1.2964437641609607 +34 984 2.1722927522241093 +37 984 -.10637391054267983 +39 984 -.11527908917466143 +58 984 1.264866417633314 +81 984 .10073165664101948 +82 984 .2693408950079199 +94 984 -1.680020119000657 +117 984 -2.2252856848096054 +119 984 2.677095890276617 +124 984 -.2919150145732415 +135 984 -1.52568183804878 +145 984 -.6039844922488838 +151 984 -2.444392464189187 +180 984 1.401809092867224 +202 984 .4114045965415266 +210 984 1.9328892294319753 +212 984 2.5325635412522995 +224 984 1.3502606266328903 +229 984 .3353337925165326 +233 984 -.3608942255343654 +242 984 2.84629546865843 +267 984 1.6294988678551985 +276 984 .9086267329948613 +282 984 -2.139115891810876 +284 984 -.7690068519657471 +288 984 .9205261530372786 +294 984 1.3670648410163349 +314 984 .5950353846759249 +325 984 -.18488720191603858 +330 984 1.8074295597917978 +342 984 -1.2957772620919363 +345 984 1.0133131343195756 +346 984 1.0701516346350037 +351 984 -.901675521310783 +358 984 2.5010906688167096 +360 984 -.8267750489018816 +405 984 .1929904531530344 +411 984 -1.5439052567748062 +435 984 .8229386900466361 +442 984 .9409561118335542 +449 984 .9523882981846032 +459 984 .23871052545508417 +460 984 .2824468978671084 +462 984 1.588309942890796 +466 984 -.3486998514859612 +469 984 .22840126788498474 +479 984 -.13274512234506192 +480 984 -.4730465809983695 +489 984 .6143322744633745 +490 984 1.3170553457893228 +496 984 -.8990780924428206 +499 984 .873095348285775 +504 984 .4423825462823113 +507 984 -1.2497094464354088 +509 984 .8120365037081158 +510 984 1.6790959152540506 +522 984 .5222899995756173 +523 984 -1.3330619778411101 +525 984 -2.442362023365451 +541 984 1.5587807474396493 +560 984 .29755292073958517 +561 984 .12718588076633816 +572 984 -.5688901381171236 +584 984 -1.4822690065222281 +598 984 2.078647283464549 +601 984 -.6517379476604157 +606 984 -1.5904847656311614 +611 984 -2.566321677821949 +613 984 -.9515852036398269 +616 984 -.7709608776869058 +623 984 1.828415410346222 +624 984 1.9906160391086676 +656 984 -1.5711902098216304 +675 984 .2826347526412246 +697 984 .985158436993897 +700 984 1.5777695064696537 +711 984 -1.8650327781446279 +719 984 .6000491185608277 +732 984 1.9133058289439429 +744 984 1.7773432567107421 +754 984 .1498151279179696 +774 984 .3714211507764172 +776 984 -1.6649743873153153 +778 984 .4165667652059449 +786 984 -.680830056677569 +810 984 -2.715348188498685 +813 984 -.024655059225952417 +824 984 .7602539704276572 +827 984 2.014422074423621 +835 984 -.8654068985016367 +846 984 1.049828199622946 +881 984 1.418860138522636 +886 984 -.5445704120606888 +889 984 -1.8948356922629508 +892 984 -1.3016378336121037 +898 984 -.5576320865110752 +914 984 .5825903009388549 +921 984 -.8528197345566992 +926 984 1.9453196555611825 +939 984 .10402123261725713 +952 984 -.1336506458915652 +954 984 .7657379104891088 +968 984 .95226515546481 +969 984 2.344580283396646 +970 984 -1.5546690913885526 +5 985 .4305526175716812 +21 985 -.30060966385135224 +24 985 .16066834691759962 +35 985 -.14084757434099535 +48 985 -.44087301064626383 +83 985 -.7831382699050004 +99 985 1.4622127201041815 +104 985 -.35287259065214877 +118 985 1.159901421689583 +130 985 .13971484104985216 +132 985 1.9803134098902695 +135 985 .22553228546814746 +144 985 .9340925701788566 +151 985 -.7693835299121141 +154 985 1.5903176316831356 +193 985 1.8106043926074495 +208 985 -.4044955665779568 +209 985 .01497475832861471 +214 985 -.5495994275148928 +217 985 -.40933534556396023 +222 985 .683236133011973 +239 985 -.88680943151242 +256 985 .17571559385453478 +267 985 -.016958184472173992 +277 985 -3.1960425571842994 +283 985 .08805993539837734 +307 985 2.06710681608355 +317 985 .8377903152970715 +331 985 1.335301594065432 +354 985 -2.163497409240335 +359 985 .8619034248505033 +377 985 -1.5146209102807646 +379 985 -.4984805235913845 +383 985 1.127043924352562 +392 985 .8388021640398062 +411 985 .7680339151282931 +436 985 -.8329707805048254 +448 985 .29985627701194717 +451 985 -.32112930269161355 +486 985 -.25237185189159317 +494 985 .4561604935302726 +503 985 .3299325700879149 +505 985 -1.192801531191819 +518 985 -.43346716331170454 +526 985 .435793820010511 +535 985 1.6659518312083987 +536 985 -1.973532693449815 +552 985 .05453952817140918 +553 985 .7301648746352111 +559 985 .9071687388660687 +565 985 -.4642527053072902 +567 985 .3516686937153829 +585 985 -.25990397154702927 +597 985 .7830647413264312 +606 985 .06368917355507332 +618 985 2.8854773322398453 +631 985 .10897799501808755 +632 985 .9470786362343327 +634 985 -3.116039230114389 +637 985 -.09439276741113369 +639 985 -.26121337791811206 +641 985 -1.0604521734692167 +646 985 -.14353846240773768 +660 985 .05020534449666424 +669 985 .5608257996387205 +672 985 2.0668585032809803 +676 985 1.8328093190057897 +684 985 -.13795616650278258 +695 985 .9254580993610397 +699 985 .5437489979724341 +718 985 -.02019034471939196 +751 985 -.2765921255732071 +753 985 -1.1817312509366498 +760 985 -.3403520554682005 +763 985 -.13160099800200692 +766 985 -.4880995160635227 +779 985 -1.675690067691198 +786 985 -.713916162521952 +792 985 -1.6099197315734004 +793 985 -.9121171304064042 +795 985 .11735443576367946 +797 985 -1.1192448249358413 +803 985 .15624530025565098 +806 985 1.2716155471035813 +812 985 -1.79561552007804 +816 985 .05194385162513805 +855 985 .14999032996218767 +872 985 -1.2069726596061525 +877 985 .049216574637367394 +885 985 .41309931894527424 +887 985 -1.0096143738502563 +894 985 1.5876915401825709 +922 985 -.9159403433627595 +924 985 2.0784144049305153 +931 985 .1506231033985366 +933 985 .3617241103870482 +934 985 1.120651979295161 +939 985 -.2444629397993963 +943 985 -.0842079665998333 +954 985 1.7454341699881688 +980 985 .8340859096699531 +992 985 -.8362138854607161 +999 985 -1.710064148806585 +1000 985 -1.1411346885616307 +1 986 -1.7940838700973085 +9 986 .47803507403459966 +10 986 -.3212956044348694 +12 986 1.6963657246006059 +13 986 -.4823840266872651 +17 986 -2.0074172517672655 +24 986 -.0037867596242807285 +45 986 .5275948420815292 +60 986 -1.2952040036423589 +62 986 1.119114608671173 +63 986 -.2108590850417104 +86 986 -1.1079070858326525 +87 986 -2.2388393209307185 +88 986 2.5945391813281606 +99 986 -2.3246741179272643 +104 986 -.22212812114339978 +106 986 -.4764564670524397 +113 986 1.3434009104423414 +122 986 -.11149430788452323 +123 986 1.4491292901861226 +127 986 -2.655624163071165 +128 986 -.17580599561358218 +149 986 -.08014465073618526 +156 986 .9743158755379804 +170 986 .7154263615787324 +184 986 .07578870748054664 +185 986 .6903863757529901 +211 986 -.6066575986796311 +219 986 .9869620329680495 +225 986 -2.336823873007269 +235 986 .8134524796314514 +270 986 2.134446205300204 +273 986 -.3317937042868341 +280 986 -.978910731223014 +281 986 .37494794044618185 +288 986 .23939554827723636 +296 986 .08097547987873727 +297 986 -1.7794082385893277 +310 986 -.046669474497634644 +346 986 -1.2493508357737306 +349 986 -1.5014011642109582 +362 986 -1.2109714999019865 +364 986 -.4286389317074898 +365 986 .052161507246495105 +395 986 .7734303636778658 +396 986 -.9500186935551004 +404 986 -.5560172088531895 +406 986 -.5433569624888088 +408 986 .04014406276156029 +411 986 2.9669322913101306 +414 986 .006696584022503442 +464 986 -.18802115061195446 +479 986 -.29162335895489466 +488 986 1.422793756947475 +491 986 .014058940621820087 +500 986 .09817946024269594 +515 986 1.1305253271668692 +517 986 1.734828173872578 +518 986 1.3785466398130002 +527 986 .794174314214887 +542 986 .8510476128568698 +549 986 2.0372335871015914 +550 986 2.48884216267494 +569 986 .9225821192117586 +572 986 1.3741654147655002 +578 986 .22558101955424667 +586 986 -.4999814019776904 +595 986 -2.240825455046694 +596 986 1.027829115464001 +597 986 -1.136164340970575 +600 986 -.5725211529393207 +602 986 -.07664609449442966 +611 986 2.3004162048208032 +612 986 -.021986815200289583 +618 986 -.05285169449319076 +624 986 .5877469489422575 +645 986 -.22128403246864498 +664 986 -1.1368716473399427 +667 986 -2.5992685478348854 +672 986 .8460791034251623 +673 986 -.5279004465630932 +706 986 -.8486207755700506 +709 986 1.1876652599291744 +735 986 -.6066823767484756 +742 986 -2.572302024180982 +743 986 -1.4673027361754696 +770 986 -.6474052526509009 +803 986 .4454442862635676 +816 986 -1.4898624935512497 +834 986 .16832644589707074 +835 986 .3093389012332538 +844 986 1.5339872791497338 +848 986 -.8029094659612748 +861 986 .12458351543242983 +872 986 1.5329555889480537 +906 986 -.1564982193571953 +911 986 .3708811486509002 +912 986 -.18375594141696477 +914 986 -.17360838013354346 +925 986 -1.4591599493685095 +930 986 -2.141703301680397 +944 986 -.14311088070158762 +950 986 -.6687551588299339 +955 986 -1.2003221485882614 +959 986 1.5953481876716862 +986 986 1.7148765375579704 +989 986 1.314902674436773 +990 986 1.1005537071531337 +992 986 .45278577676690357 +998 986 .9540050290956222 +9 987 .9233947690655445 +10 987 .28678177314461234 +18 987 -2.4560836543763402 +27 987 .1936143107682152 +33 987 .4233986970847054 +43 987 .6068232343669535 +48 987 .36776478560733583 +75 987 -1.0191227190191265 +77 987 -.9281271391278001 +98 987 .3343106070593336 +103 987 .5449917931518188 +107 987 -.3564481649142841 +114 987 1.057956275092517 +118 987 -.12969576497257146 +136 987 -.9023733836921556 +141 987 .05503661099762007 +145 987 -.003008181093912765 +146 987 1.1308712704637884 +149 987 .09070533612147777 +154 987 .2792867719290917 +157 987 1.006771908520343 +158 987 .46919345811320967 +161 987 -1.1400305293375144 +164 987 -.26405717042250754 +168 987 -1.511283062632397 +170 987 -.12057193474482288 +193 987 .14533626014804962 +194 987 .10800802860735939 +195 987 .03137213704429734 +199 987 -.18450068500444866 +206 987 -.4775249548987729 +215 987 -.429252035139932 +216 987 -.4865301068555539 +238 987 .05480614304395137 +253 987 .8888571645705099 +272 987 .4818325372634187 +289 987 -.41450954516839683 +295 987 .3881666876319678 +304 987 .6523365087673627 +305 987 .1132130885601027 +319 987 .1862023621158732 +324 987 -1.4492149108891392 +340 987 .48008727376713256 +348 987 .6411751369623584 +359 987 -1.258281530760714 +364 987 .31380988214679556 +370 987 .20768492383640672 +393 987 -.16619810355908443 +407 987 -.2865080713508611 +415 987 -.8990678000198148 +435 987 -1.2869606183488342 +440 987 -.6804856563937917 +443 987 .8636894554762666 +471 987 -.624498318937932 +472 987 .11199684969309148 +473 987 -.8873457279606372 +486 987 1.211784645299652 +500 987 -.1130993105291213 +505 987 -.9017722420620662 +515 987 .26107538992942914 +539 987 .002727461544345609 +557 987 -.24929325929951332 +562 987 -.19969685538015353 +588 987 -.043324868177570794 +598 987 -1.0607820994409045 +612 987 1.0534260605885908 +618 987 .39352006390298017 +625 987 -.42934971768237334 +629 987 -.5831328490884589 +630 987 .7181873811832885 +632 987 -.1340385637853167 +648 987 .03405866753589663 +693 987 -.16607486100844998 +712 987 1.2337645871064384 +720 987 .07545110882920748 +721 987 .5202902397655793 +729 987 .1732400866018497 +744 987 -1.5781020289871375 +745 987 .8530948934335967 +759 987 .5095064302597446 +761 987 .39524030910655644 +769 987 -1.1173012305477776 +772 987 .6793761923434655 +792 987 .8847058865180516 +794 987 -.31411228318471823 +827 987 -1.60630909060321 +871 987 .22459375240877308 +873 987 1.235298118708931 +875 987 -.7885744638805942 +884 987 .46952022857772663 +885 987 -.48051703045300653 +893 987 .15710299205524844 +911 987 -.1499113940091728 +932 987 .22764950401145773 +937 987 -.01137689611755531 +943 987 -1.1711278382293777 +944 987 .9056532353575463 +949 987 .14723197218173004 +977 987 -.5814872197831893 +979 987 .2747648200836281 +996 987 1.2060258624474565 +16 988 1.1115993943773808 +26 988 -.8943454098572937 +31 988 -.3943715347759027 +43 988 .3405151901509388 +49 988 3.4206026698997345 +56 988 -.5205154841443392 +69 988 -1.3352999130746455 +82 988 -1.8627409363630072 +87 988 .8170140404092185 +91 988 -.3288663099845571 +92 988 1.8708769397731067 +99 988 1.3315831843676071 +104 988 .0906042022416951 +123 988 -.501354493093485 +146 988 -2.505404887939973 +160 988 -2.415694319582982 +191 988 -.4749873892004289 +208 988 1.784118064691092 +218 988 -.5323630066787468 +224 988 -.3226874666772533 +226 988 .13972646911732384 +239 988 -.4571846781091229 +244 988 .7905615606622685 +246 988 .5673771692766152 +252 988 1.0028683774523184 +255 988 -.4383469917037436 +259 988 -.6923825732980944 +269 988 .1606803666396776 +270 988 -.9916882797785537 +280 988 .8039567323727218 +281 988 1.1394212819053435 +288 988 .03739812866424319 +297 988 .2793343779003563 +321 988 -1.376665261421794 +348 988 .6660759286675354 +359 988 -.12442174328919486 +360 988 .2516910038233683 +364 988 -.6386940663300271 +368 988 -.8025014439253708 +376 988 1.123690684551864 +383 988 -.8254927654380447 +385 988 -1.1262104503561206 +399 988 .11887113526030635 +405 988 -.60291815894298 +406 988 .09907801876165158 +424 988 .5899344654390163 +432 988 .46695030513278313 +439 988 1.3796525729037166 +441 988 1.5846867263781887 +443 988 .3353747981994773 +444 988 -1.3164544340642352 +454 988 -.5341734575992827 +468 988 .2663313079027122 +478 988 1.6278850134059912 +487 988 -.0312849630990152 +494 988 -.8471183274735532 +498 988 .3786949643174194 +500 988 .8396452721301324 +507 988 -.040718542870048356 +511 988 -.33788581288126474 +514 988 -.8009993646660737 +523 988 1.0872070786895585 +535 988 -1.0508233879111815 +545 988 -2.501148601153693 +562 988 1.8888950069431507 +576 988 1.6356183849536954 +581 988 -1.7206693425333142 +584 988 -.28404860209659616 +585 988 -.37512163045530555 +595 988 -.5547638476522508 +598 988 2.0841504271200972 +603 988 .867311461526536 +606 988 -.5817036965905475 +624 988 .7354960406180953 +635 988 -1.9847702230571 +649 988 .08242788207226454 +653 988 2.1301687782770444 +659 988 .34503114649882516 +668 988 1.5719539046711677 +677 988 -.7072108267213694 +678 988 -1.5194953703617793 +682 988 -1.140906383222457 +687 988 .7547010529287299 +702 988 -1.1173670049835376 +714 988 -1.7471459098059696 +715 988 .8163880484088684 +734 988 -1.3133599224334183 +738 988 .9681185685958262 +739 988 .7210545350926452 +748 988 .27512308029744537 +749 988 1.009984179419116 +751 988 -.440172949538547 +763 988 -.6413124285582883 +764 988 .8023391260336974 +779 988 .7531890712229005 +786 988 .12276632776134441 +810 988 -.6176005058940219 +820 988 -.585549011735489 +822 988 1.351667916718673 +823 988 -.3681750554923088 +832 988 .08169680912315412 +836 988 .9347557071316739 +840 988 .2665360668868145 +854 988 .9961777110752785 +874 988 -1.973942092289961 +941 988 -1.4310799636665559 +948 988 .3344963645800919 +951 988 .6715472548804711 +966 988 -.8200613611467718 +968 988 2.241492045067796 +980 988 .0007006367421398341 +986 988 .27151267562910486 +993 988 -2.006637328905087 +998 988 -1.3343757920288464 +999 988 1.1909463196752774 +8 989 -.16012770089271613 +9 989 -2.257776633075236 +15 989 .12703174455507066 +20 989 -.4013373380317599 +33 989 -.21944804415210029 +42 989 .24671180151833433 +55 989 -.43717639306793027 +64 989 1.6603211478570432 +66 989 .6786680945009078 +73 989 .9432804212589225 +82 989 -1.4637773157649063 +84 989 2.3919458352240857 +91 989 .35719228850794177 +97 989 3.1509747977296363 +118 989 1.4983680137331457 +127 989 -2.4960173642662333 +141 989 1.263410899346192 +172 989 -.4776323353509687 +178 989 -2.605215588124793 +182 989 -.12315535513860457 +196 989 1.8100991517602536 +205 989 2.3041658063119685 +206 989 -2.1483277731557573 +215 989 2.161955730148533 +221 989 .3645980525401907 +231 989 1.8580646741081002 +241 989 -2.4203671964997873 +242 989 -1.0927345529972763 +260 989 .6619179150859406 +266 989 -.7594555866392615 +274 989 -.08232294961100478 +303 989 .6773402771291267 +304 989 -.6136360453146721 +319 989 .5362717963674971 +355 989 1.7700835570270728 +359 989 .9639718380949948 +381 989 1.1782282953743233 +403 989 1.6102630367132937 +404 989 .7609910971408576 +418 989 -1.3699147252124448 +434 989 .9381592289572733 +436 989 2.723979475387131 +448 989 -.848058984338798 +449 989 .618043187558586 +455 989 -1.3273923501435125 +457 989 -.48787681084541196 +461 989 -.7597045366659836 +465 989 -2.4148560817995786 +480 989 -.45519219979251563 +486 989 1.7874245429894842 +493 989 .31695520241940717 +509 989 1.6763996973824318 +513 989 2.697911272409339 +536 989 -.6498788195053102 +542 989 .32123563513831754 +547 989 1.1559321064250838 +553 989 .3341554319694624 +575 989 -3.242891090522618 +586 989 -1.2327990709884207 +593 989 .20300920212939924 +602 989 -1.759613594043981 +603 989 1.1822586651304277 +608 989 -.6193079219654014 +628 989 -.052964572767069215 +629 989 -.8368065410044223 +637 989 -.7128845356963427 +639 989 -1.727787646426631 +680 989 -1.8625969160232718 +705 989 .41459401646915267 +708 989 -1.611161635391244 +731 989 -1.9442692575091054 +733 989 -1.1503794490611252 +734 989 2.1584262714123437 +736 989 .8967904979447164 +747 989 .4976106079139073 +754 989 1.8073759812691648 +780 989 -1.3258943197127606 +788 989 .19172747411732383 +791 989 .38634156062445607 +813 989 -1.476299617257404 +832 989 .5778282151933734 +844 989 3.034810542921009 +847 989 .3760810804514977 +852 989 -.41334685078635713 +854 989 -.6182283094679834 +874 989 -2.885071391741739 +892 989 -1.2322116948191466 +894 989 -.7971376918847137 +898 989 -1.511089506333968 +900 989 .22408055779059857 +910 989 -.5278484988742659 +916 989 -.28114428696109806 +929 989 -2.469457158782321 +933 989 -.4048685900714438 +935 989 .7515778113607693 +940 989 -.39921065869214234 +960 989 -.7764759144077611 +983 989 -3.976447637124798 +993 989 -.8616455236740328 +1000 989 2.87770526357053 +1 990 -1.1048293010734451 +13 990 -.1475969737448516 +19 990 -.581608639563318 +21 990 -.7123352429214196 +46 990 -1.1669087294537281 +59 990 -2.432910243400053 +77 990 -1.1016650973064017 +78 990 .0714836749771669 +95 990 .49090959884271834 +109 990 -.32888902563000183 +110 990 -.6650137506993562 +122 990 -.5240023702876848 +135 990 .7412483431276031 +145 990 1.4248992302971486 +146 990 .07101779802974369 +157 990 -1.4370795225687691 +159 990 -1.9127895422298633 +168 990 -.21839174610607448 +176 990 -.5243910945772137 +205 990 -1.17897397952546 +234 990 -1.7867884068497581 +237 990 1.4473968178074492 +246 990 -.03656272380473674 +266 990 1.0164661847075795 +267 990 1.6587716813957887 +278 990 -.20195509126752098 +280 990 -2.1493604196507805 +284 990 -.829884545826372 +291 990 .8492125320095399 +311 990 -1.060951451618582 +326 990 .40069609281957314 +337 990 .4892919503211743 +358 990 1.0806147317772101 +374 990 .11083066015093497 +375 990 .7148556852968175 +393 990 -.48941274528298506 +395 990 1.9443813711121374 +412 990 .36212073131281286 +428 990 -1.5668945122635813 +445 990 -.023190734252327067 +479 990 -.8540779773373517 +485 990 -.6422053820062095 +490 990 .3849104245047777 +502 990 .37802169895246834 +506 990 -2.1409631164121534 +509 990 -.698230716655687 +517 990 .7864100220060875 +532 990 .5789935630469727 +539 990 -.8377261351426073 +552 990 .3749830176062657 +553 990 .32148778584403037 +556 990 .2623125610795022 +570 990 .2132582423165549 +571 990 .7390956977335346 +572 990 -.3820908873940249 +577 990 1.0177734485722447 +598 990 .18454955922411082 +606 990 1.4704851464413435 +611 990 1.4692722751032183 +621 990 -.8979468849242057 +623 990 -.8672606409304512 +626 990 -.5888613760641757 +631 990 .09565054805131662 +639 990 -.013033747643630592 +681 990 -1.2668159169584035 +689 990 1.6862893758894684 +706 990 -1.158457571845021 +725 990 2.998908270644559 +728 990 .6502650588427807 +729 990 .36309049337477434 +757 990 1.3051306864889234 +765 990 -.15417682035467145 +767 990 1.2848631720075274 +775 990 -.7493793079484249 +778 990 1.053619966699554 +795 990 -.2200895753170819 +797 990 .8127441190617748 +805 990 .7567370246730267 +806 990 -.27298930281986783 +812 990 .8267042235178729 +830 990 .07725360637174446 +844 990 1.3588634246274744 +857 990 .1329493188285713 +860 990 -.5334583593117782 +865 990 -.2857747787396576 +869 990 1.9429503749785813 +873 990 -.6837603635642084 +907 990 -1.0286629987550202 +911 990 -.23407193771618884 +916 990 -.8472173327751817 +922 990 -1.4634272552841228 +923 990 -1.7643450637716662 +953 990 -1.1659814487810785 +967 990 -.4932148446779948 +985 990 .9079327749995648 +994 990 -.4313423202355639 +997 990 1.23678043468656 +998 990 -.8151771593043504 +4 991 -.08361311241562262 +5 991 -.6617466941233211 +18 991 .2956557970043896 +31 991 -.3657299699677682 +42 991 1.0949456372681092 +48 991 .3890667382158822 +51 991 .32519799124013143 +53 991 .8848340042161302 +59 991 .4379235219932463 +70 991 .03746970472172859 +73 991 -.2256840254937685 +81 991 .49142056858171757 +82 991 -.2655534489302225 +104 991 1.0562060216836062 +107 991 .008287434679053242 +108 991 .06088242312306566 +114 991 -.18863934750623335 +152 991 -.059320586511535434 +172 991 -.4821497592881184 +181 991 1.4049171900806345 +191 991 .5902239841895871 +198 991 -1.3830936301908872 +200 991 .8426437976493488 +201 991 .2516676785284133 +202 991 .1288059326413942 +205 991 .7695852712290011 +229 991 -.23222968355689472 +235 991 .965246924333842 +247 991 -.12877070053299522 +249 991 .1828852105688612 +252 991 .28798780638383875 +254 991 .19660720075959084 +273 991 -.7017966800937661 +277 991 -.8383650659893729 +293 991 -1.1495554247291448 +304 991 -1.5576246826495477 +305 991 -.8353939548351548 +313 991 -.1848666766112392 +320 991 -1.839616387490161 +326 991 -.21833102976713153 +333 991 .7197940393943573 +346 991 -.28298877779224485 +356 991 .21089547111560003 +358 991 -.21372812119995682 +362 991 -.1275842161089437 +368 991 1.3051874781603312 +379 991 .34837720059038274 +380 991 .29570412074462954 +399 991 -.25052328035757515 +402 991 -.1685691499128832 +411 991 .39374394604817053 +422 991 .42273312496575144 +430 991 -.007005652497174358 +434 991 .0783214478342939 +440 991 .5392240515403582 +450 991 1.0441314886981565 +451 991 .4457151688651525 +464 991 1.2002360392149238 +465 991 -.2968120620179801 +475 991 .1991159962513825 +477 991 -.11346006906490247 +481 991 1.8671378476206744 +484 991 .9484179829188475 +497 991 -.4278136645296338 +514 991 .6753125525178926 +516 991 -.010040786110433693 +517 991 .3723250728608707 +518 991 .46446222566817136 +525 991 .7091276863427957 +536 991 -1.422711174768092 +576 991 .41085121738472513 +614 991 .9034282912189642 +629 991 .46970358659252914 +635 991 1.1200474481437295 +637 991 -1.8493542780661552 +657 991 -.903402322851615 +660 991 -.321773582037887 +671 991 -.034936846207012595 +693 991 .6205373741103181 +704 991 -.7132278771919551 +708 991 .18336340695673475 +714 991 .5726309853772232 +727 991 -1.024332085508097 +731 991 -.21560528015788227 +757 991 .03334105907478005 +764 991 -.1490124746937149 +789 991 .20172061849294315 +790 991 -.6542662624356012 +795 991 .47141474236598574 +801 991 -.24184351141526872 +819 991 -.3883803636837296 +827 991 .16099936790423106 +832 991 -.4911948941895048 +833 991 -.204903176022182 +837 991 1.1916159795697276 +867 991 .448905288987876 +880 991 -.7421790710880842 +881 991 .0013501725965229805 +888 991 -.4951860388124521 +902 991 .05741938061243123 +930 991 -.023063130486457827 +932 991 .15052125189276888 +937 991 .965166820926884 +951 991 -.9795381830407315 +971 991 1.6566135041376 +985 991 .6824724173217039 +986 991 -1.4400136317137922 +4 992 -.22159472155312374 +11 992 -.6374648579638281 +18 992 .5473090618369518 +24 992 .2512354325772669 +46 992 -1.2029276689243185 +48 992 .8719204126281903 +58 992 1.7188906433366176 +82 992 .9563967690804815 +92 992 -.7090088778009696 +115 992 .863012249269278 +120 992 1.7392448088256562 +121 992 -.10043552170179762 +132 992 1.0180620204700948 +192 992 -.6436303533884767 +211 992 -.2355080275027942 +213 992 -.8458734231621704 +218 992 -1.3748841735069934 +219 992 .20707317323154614 +233 992 .5107671738609001 +273 992 -.42426657545879326 +276 992 .7893002615338919 +302 992 -.3892724283549912 +312 992 -.8152753031320877 +314 992 .15988932070932194 +316 992 -.5015199793721742 +320 992 .009879817792522283 +328 992 1.1698451320042866 +329 992 -.09047087891423644 +332 992 .635253057249735 +335 992 .3931778960204487 +338 992 -.8829791674175713 +342 992 1.240998201451668 +359 992 .5117077977501029 +360 992 .01033041554612607 +370 992 .3356823935477571 +381 992 -.4711444476580488 +386 992 -1.2280932820895214 +418 992 .6338529715103813 +422 992 .3757006114123116 +426 992 .5464338538506267 +445 992 -1.2799226551391427 +453 992 .6161752072527407 +458 992 -.8905879803931273 +461 992 -.4178574255131599 +474 992 .2145336881337262 +495 992 .6315306124409802 +506 992 .5541240118905933 +529 992 .7140184452459967 +540 992 -.14745367667751588 +549 992 1.148112969683432 +553 992 .5191312577449892 +560 992 -.4840920760123254 +570 992 1.50458965157555 +588 992 -.6610920975192823 +589 992 .4159088042724516 +595 992 -.4218981204867852 +617 992 .4625354813494129 +619 992 .49787790709320123 +625 992 .9380953848373648 +645 992 -.11021770565681906 +662 992 1.0377505266440525 +674 992 1.1828064318944178 +678 992 .07675041715454045 +686 992 .6865381267071584 +690 992 .2230900430975688 +696 992 -.7998535139873204 +714 992 -.4981136022839263 +733 992 1.0772699180854155 +737 992 .24381055378454783 +745 992 -.07294522789934503 +748 992 1.585768945304313 +773 992 -.49114575506556457 +776 992 .5213697449988463 +793 992 -.6979155207165688 +794 992 .5239503785214856 +800 992 -.6348931607394348 +813 992 -1.3942778393339565 +814 992 1.096117767925367 +818 992 -1.8341828042304456 +841 992 -.9557636802368457 +853 992 .3062476687686816 +862 992 .054544898518017824 +863 992 .026308192677850298 +864 992 -.47548817308300245 +879 992 -.3380904857121358 +880 992 .37760975014373066 +883 992 -.12143640087907792 +886 992 1.1633169249425006 +891 992 -.6624686539348315 +904 992 -.2572403586459714 +906 992 -.8761171710004967 +911 992 -1.063704990907503 +918 992 .26084429465463527 +937 992 .7794162896248429 +951 992 -1.8050669501793157 +952 992 -1.0425203234457137 +953 992 -.47991589617614827 +968 992 -.10679629158278584 +969 992 -1.0368577748216354 +983 992 .2893334291273192 +987 992 -1.581792057654009 +2 993 .8247545590609451 +7 993 -.15979209598568478 +15 993 .4465121056912157 +28 993 1.9157375544000994 +40 993 .27942837491201233 +49 993 -.6222849327018244 +52 993 -.21259532314912535 +59 993 -.7734249752446575 +73 993 -.5646606436894172 +92 993 .8347531626296978 +125 993 -1.2836726885501715 +149 993 -1.2270582117983924 +151 993 -1.1033956531623315 +160 993 -1.0215063319886029 +174 993 -.7506242778360135 +182 993 1.324108606261478 +183 993 .15961750525805693 +212 993 .7500616269828714 +220 993 .37481300218039426 +243 993 -.36096522471904186 +251 993 -1.6149536800450104 +252 993 1.0887930097606704 +266 993 -.36875905941576964 +271 993 .06321296133717297 +272 993 -1.3887045081410043 +303 993 -3.064999215919031 +310 993 .251331700257747 +311 993 -.31488668958694893 +313 993 .4251486696336062 +333 993 1.2799963587232852 +343 993 .43414088128625183 +358 993 1.8369617410343524 +359 993 .6419878141489663 +378 993 -.5459104855930664 +386 993 1.5328366238086468 +395 993 1.3053915577653672 +401 993 -.9092379297782579 +410 993 -.015310165126989392 +418 993 1.5347458948078487 +425 993 -1.186873552491983 +431 993 1.7398719453909472 +442 993 -1.6660944747513378 +445 993 -.8499635522257879 +471 993 -.9862811057824186 +481 993 -.31947491441471176 +488 993 1.3865411216482577 +499 993 -.06923415922506973 +506 993 -.6007368589938364 +517 993 1.586065887869318 +528 993 .9057440261177621 +530 993 .008200322458017023 +552 993 .525766427735624 +553 993 .6774180523274621 +561 993 .5345090906581305 +565 993 1.4268228226360118 +605 993 -.9269251927034549 +611 993 1.226205507151123 +613 993 2.066894969328868 +614 993 1.1369466559182946 +631 993 .37238770716196207 +637 993 -.734785048068914 +645 993 -1.1497254904859424 +650 993 1.113509846216263 +668 993 .24159779585589872 +673 993 -.034132539437945364 +679 993 1.9747551192961539 +681 993 -.8198056752602955 +698 993 .09434807584416173 +708 993 .19871128374689342 +711 993 -.11240888222710452 +736 993 1.2742624339527198 +741 993 -.0833027118205331 +751 993 -.7107227682121747 +768 993 -1.431256874422601 +776 993 -1.1658847056552342 +777 993 -.34034783845401967 +784 993 -.05614790151680177 +786 993 -2.523325436658934 +804 993 .9734080161303933 +805 993 .532607529669092 +835 993 .4630036052013673 +843 993 -1.228289868907641 +844 993 1.0556417597848904 +848 993 -.3958637254282676 +854 993 -1.7451073708790135 +862 993 -.24600809002216814 +866 993 -.9200109660506088 +875 993 -.3937299615124335 +905 993 1.7546864988566622 +913 993 -1.8946288389715829 +925 993 -.7610202870313607 +931 993 .17401970025705285 +933 993 .7119808799429427 +947 993 .3376817245173604 +963 993 .7802885207813209 +966 993 .9107272224877401 +997 993 .7061278380992505 +1000 993 -1.4210472885483048 +3 994 -1.016382695124853 +13 994 .22458826193144818 +21 994 .03858920966681917 +28 994 -.00887384942977823 +31 994 -.0073326663562899505 +38 994 .06684200244654755 +39 994 -.4294994230482446 +40 994 .2887913185287428 +41 994 -1.6422483863251536 +49 994 -.02571339112532467 +57 994 -.4706068933177463 +102 994 .18964523226266977 +113 994 1.0619701194862043 +117 994 .9135306457717223 +131 994 -.25052969944535464 +143 994 .2530291615321504 +148 994 .5537910611135152 +149 994 -.9953859641573013 +153 994 -.2034216170111506 +157 994 .36692074629033744 +163 994 -.9011036067102208 +172 994 -.6150405103346778 +181 994 2.226988798680111 +183 994 -.4381457883017808 +200 994 1.6065149029548038 +201 994 -.8717944137783264 +204 994 -.614090739212771 +249 994 -.46517377012040684 +255 994 .20666307202496223 +256 994 -1.5804680427753077 +259 994 .4820017071265938 +270 994 -.5388943831247771 +280 994 .33284204286581665 +281 994 -.26752923046326466 +296 994 -.29598896127340946 +315 994 .4580410298854476 +327 994 .013424979701760764 +337 994 -.6783731318015255 +345 994 -.9609169543651815 +348 994 .9351118274113096 +363 994 -1.1449383132955517 +366 994 -1.1651450187123276 +367 994 .5436435791084553 +371 994 .732964067699712 +379 994 .816976326174058 +407 994 -1.512378070772321 +441 994 -.8228294902070757 +451 994 -1.4854397640216008 +459 994 .8251500228937466 +460 994 -.41287654202408325 +465 994 .24361413640246113 +467 994 -.4598885624982229 +472 994 .5330659527871546 +481 994 1.5837138014445489 +482 994 1.6466975728387796 +492 994 .5492922148199614 +509 994 .3586760574663331 +513 994 1.1097774947982004 +532 994 -.33424517609279203 +533 994 .09327902174626636 +538 994 .13976809576283156 +544 994 .6401789764999286 +553 994 -.882329962635162 +581 994 1.9259355338623116 +584 994 .4118630314136271 +599 994 -1.8593757231546204 +629 994 .2628974768201836 +642 994 -.0475152025494299 +650 994 .8606576663610632 +678 994 1.0188834066963681 +686 994 1.306426697471416 +687 994 .6661619729831165 +699 994 .3737996112778784 +719 994 .322256800870234 +721 994 1.3968327833384735 +726 994 .040053538001228906 +736 994 -.6649428275069125 +772 994 -1.3395003674396184 +775 994 .5629213194448228 +805 994 .945186305814974 +834 994 .649088356544036 +838 994 -1.2961335451940525 +849 994 -.21574754500407115 +858 994 -.7691832125812402 +860 994 -.7419130613398673 +864 994 -.5020005665852463 +872 994 1.0841904512344525 +873 994 1.1146006611667785 +877 994 -.03201893703181974 +879 994 -1.574387357528373 +904 994 .2067099868591945 +920 994 1.3586429195756204 +930 994 .3687684118149429 +938 994 -.2070918785193484 +946 994 .7797365399357014 +951 994 -.4446772760667713 +957 994 .5318243111146492 +960 994 -2.035870138307804 +965 994 -1.4015010546062674 +977 994 .7014011216330494 +978 994 -1.740325511902771 +993 994 .905876761940166 +5 995 .6920648410814991 +8 995 .0370335579603767 +9 995 -.543349006988704 +15 995 .10993362228628463 +20 995 .25136953058109623 +21 995 .23014449555604358 +52 995 .0354785187522781 +53 995 -.21810032762909082 +54 995 -.1919242539381874 +65 995 .5455495644753073 +96 995 .8264874486210602 +103 995 -.46184122911252945 +105 995 .2897160490608445 +111 995 .529723580418777 +138 995 .15681949769316555 +140 995 .26448992167421953 +157 995 -1.2437607489166946 +162 995 -.6184614253082563 +186 995 1.138140220326162 +201 995 -.32303969315168085 +229 995 -.4393843585813337 +245 995 .4909185737491886 +250 995 -.03938797646962014 +260 995 -.09574504179819417 +261 995 -.05969016828389082 +262 995 -.2681207457485635 +272 995 .5704508932439053 +273 995 .9006983073088155 +282 995 -.12921992777459462 +286 995 -.315776119172857 +317 995 .5991230165605635 +358 995 .1026165632336922 +369 995 .1485466322280186 +376 995 -.4312496523845926 +383 995 -.32787472842859555 +389 995 .12695019848675598 +404 995 .7184105090210041 +406 995 .47996434141139876 +409 995 1.748855360221691 +420 995 .7872942398079322 +442 995 .1277935936567574 +447 995 .9667686887252993 +454 995 -1.0277375267146258 +460 995 .1260678059539785 +462 995 1.2797418030210979 +465 995 -.08914918010291512 +471 995 -.09293796232064924 +475 995 .39729048747700924 +493 995 -.3540656948363712 +507 995 -.3234279931428323 +509 995 -.2957144869172624 +547 995 1.0107442330221867 +548 995 .7534493905031414 +564 995 -.5421007043714207 +577 995 -.1691882380373518 +609 995 -.6791769346145086 +620 995 .16974393355792078 +621 995 .20337906137394968 +640 995 -.7771525620884199 +641 995 -.24211844859931866 +653 995 .6997326145294243 +654 995 .19959137098919005 +664 995 .6886139850969638 +665 995 .41841963246396435 +673 995 .20656534475542093 +693 995 .07780144336317886 +721 995 .28344326892416044 +726 995 -.48655608439587217 +732 995 .013551146011825721 +734 995 -.25998637835935395 +758 995 .23429096594394275 +799 995 -.29956400940023653 +817 995 .16927446652533648 +829 995 -.3026708197877829 +842 995 -.5286013789060449 +844 995 .2274904702516817 +846 995 -.1557705021573467 +847 995 -.8431208449613827 +860 995 .13201137596495705 +881 995 .08185157412499777 +903 995 .14579508118522724 +916 995 .05256243349932177 +927 995 -.22909350393578148 +931 995 -.18189810283205993 +935 995 .30596995771360963 +940 995 -.33698541155848527 +943 995 1.43106145575587 +952 995 .7367437039018367 +969 995 .20696495272609666 +987 995 1.135772282152906 +30 996 -.12058449445790423 +31 996 .8320910083565788 +56 996 .7930541135463441 +60 996 1.657356751861191 +81 996 -.3921629139765027 +86 996 2.5885237944422106 +96 996 -.026507169367036815 +98 996 .46167741864340794 +103 996 -2.449282138109409 +111 996 1.3151896276163133 +126 996 -1.3741275085245008 +145 996 -1.464556459345041 +150 996 .269401916180355 +156 996 -.04281539269529569 +166 996 -1.0019009354250212 +184 996 .23468701165532097 +186 996 -1.221884340632145 +203 996 .31080335532237174 +227 996 -1.14262579009701 +248 996 .5677226726178547 +251 996 -.17478945864573683 +252 996 .35704135174659624 +264 996 -.5057468720753635 +279 996 .3415155481178288 +289 996 .7938073145453884 +297 996 2.4579286269327745 +300 996 -.7786121379365497 +329 996 -.5695923501084308 +340 996 -1.0269763347267096 +342 996 -.672211599177794 +345 996 .26439300050000497 +355 996 -.7725733857561421 +373 996 -.47178670930542166 +383 996 -.2319728097590785 +390 996 -1.6388905233159727 +394 996 -1.6287265010736607 +395 996 -.7178848452479061 +422 996 .1938905281792205 +424 996 -2.5256309336477947 +429 996 .9116567141229807 +435 996 -1.8376168540542446 +467 996 .4386545428901281 +470 996 .1316622297235806 +475 996 -.7164238777859174 +491 996 .9290662278167993 +506 996 -.1428927268166655 +524 996 -1.3497758082252524 +530 996 1.967022884951258 +532 996 -1.6603417585744227 +540 996 .10217276664274935 +546 996 .8070241622223921 +558 996 .9984064654872941 +586 996 .7443806160409918 +596 996 -.6466262423824852 +598 996 -.395711510051321 +601 996 .01465819706410438 +603 996 -1.9383092922170184 +616 996 2.220752802000534 +623 996 1.0192535973894654 +629 996 .07659103547411061 +630 996 .26177111232716715 +633 996 -.8234688909111615 +635 996 -.24847245785794117 +667 996 1.9836473016483345 +668 996 -.5012776300208719 +683 996 .15542277720928796 +689 996 .5391386767251614 +693 996 -.10882611578505194 +711 996 .7268215261828834 +734 996 .11002611828106007 +735 996 .33284222332057645 +740 996 .42748418706330393 +745 996 -2.6638279481087586 +749 996 .1827694142018504 +755 996 -1.5193134236839556 +757 996 -.9136330909783736 +766 996 -.446313679158308 +769 996 -1.9022934143635912 +774 996 1.3078643885865484 +780 996 1.8507235608355117 +785 996 -.21007767875506644 +789 996 1.448988679726815 +798 996 -1.2713895255448482 +806 996 -1.1404697413636242 +807 996 .24863091507600849 +813 996 1.2541057464291687 +817 996 -2.255902498595139 +851 996 .0857929993946995 +876 996 -2.239676125588837 +877 996 .3466908263608645 +885 996 -1.6533136760387095 +886 996 -.1292984193867525 +887 996 -.02946538727791667 +894 996 -.8670540477678403 +915 996 .31244536312680926 +937 996 .22125762118953046 +952 996 .8406235873872556 +966 996 -1.5847899952168045 +992 996 -.1688282267073539 +999 996 -1.8839949418486417 +10 997 -1.6382258940320449 +15 997 -1.1574853046458236 +23 997 .5783166635257981 +28 997 -1.1343045794202535 +29 997 .5761264466413222 +33 997 -.6107742128600206 +38 997 -1.2071617926101095 +42 997 -1.193217619210965 +45 997 -1.3459570274069932 +66 997 .7120444707187019 +75 997 .4544423295352631 +83 997 .7115072721255978 +92 997 -.2354570218337423 +93 997 -1.886693985724556 +94 997 -1.7100761526571597 +96 997 .2285861190518436 +102 997 -.8821083865390794 +113 997 -2.7111212784020355 +129 997 .3759709290543307 +131 997 .16009614371490088 +147 997 -.07455924304621417 +149 997 .8523998198207776 +166 997 -1.7740180822634084 +185 997 .6645605986543744 +189 997 -.512058934311151 +198 997 1.877446591414206 +201 997 .14966749153308864 +214 997 1.5487753040831203 +244 997 -.1531117650631659 +249 997 1.0215127725398288 +252 997 -1.57343270027596 +264 997 -1.88144503136555 +268 997 1.9290940003242611 +278 997 -.12498249369505082 +286 997 .20107872595589713 +290 997 -.4415479467601824 +307 997 -.227302451594959 +312 997 -.5939172097523537 +318 997 .1975828441877374 +320 997 .7976403277062182 +333 997 -1.4923620885750186 +344 997 .8847365898656852 +350 997 -.21033103473548784 +367 997 -.6809348101623353 +370 997 -1.2508278463175921 +380 997 .4370629396799709 +387 997 .332780068300669 +405 997 -.7516062770989763 +416 997 -1.0515467839440873 +427 997 .8155475950410821 +429 997 1.4571135928663266 +441 997 .37245435477268785 +462 997 1.8230782802326226 +464 997 .4658652103101443 +467 997 -.7697657860594322 +468 997 .6051212669223135 +473 997 2.153306361689897 +480 997 .13453979219992232 +494 997 -.7163655195545406 +495 997 1.371174430809519 +500 997 -.1965125255213862 +503 997 .22301311007518285 +506 997 .057942418781601404 +508 997 -.6376813163483319 +524 997 .9012175546934114 +536 997 -.3200524898117259 +540 997 1.4157541255027022 +548 997 -.3379499076006667 +559 997 1.7908125351209878 +562 997 1.7657658150907638 +566 997 -.8722076693150645 +571 997 .6590616160211067 +580 997 -.26377141808275184 +583 997 -1.1770814842188941 +602 997 .16528607603695156 +606 997 -1.1879990230376263 +613 997 -1.1266772544410788 +616 997 -2.285244968802623 +623 997 .012654104926451554 +641 997 -.6205051418625979 +645 997 -.22042391423680646 +646 997 -1.3259083715585838 +650 997 -1.2408821829506094 +655 997 -1.4988447288070152 +669 997 .9959474665930315 +693 997 .18046816680950192 +699 997 1.3779065649376652 +701 997 1.0773762270679845 +711 997 -1.0949409281909563 +713 997 .900844358013634 +723 997 -.46820860837199074 +733 997 1.282593822511242 +734 997 -1.1848178748692113 +745 997 -.39934047497953207 +746 997 -.6455713681214746 +748 997 .8623141446639495 +756 997 .42843991943244775 +794 997 -1.3654766450908182 +815 997 .19239817844308768 +817 997 -.04348037908230222 +824 997 1.4766358591705488 +830 997 1.2771299848387268 +834 997 -1.3357940147579002 +845 997 -2.0743952590260344 +855 997 -.6074998094829361 +873 997 -.7022408506122714 +879 997 -.1661164153014873 +901 997 .6150658843490249 +905 997 -1.3705640147831009 +910 997 .03412057507260602 +912 997 -.06589091702368899 +917 997 -.992260642310578 +924 997 1.426263757491196 +925 997 .3885084490412533 +952 997 -.49220463503030903 +964 997 -.5374878533341614 +965 997 .10078299289431944 +982 997 .9174626003964867 +993 997 -2.0950848104471484 +33 998 -.8489175991733867 +51 998 -.7646387299927061 +64 998 -.5525098805251751 +66 998 .11039161932484512 +77 998 .4579153923331278 +78 998 1.9431736526124046 +80 998 -.5913215203868172 +98 998 -.3998432668305414 +104 998 -.9837185756359463 +119 998 -.8794876786517475 +129 998 -2.6120856437075988 +153 998 -1.2044224303984201 +155 998 .7580799176809642 +165 998 -.6072419343471197 +170 998 1.0539927437662264 +172 998 1.11936758900207 +179 998 .6163569599937503 +189 998 -1.736438812756289 +200 998 -1.835230762382376 +202 998 1.8996478333546083 +238 998 -.5750565862725432 +241 998 1.195798347538099 +244 998 -2.330988022469915 +246 998 1.0607047802737208 +267 998 .9337763194140055 +274 998 -.7871954409879044 +275 998 1.4413788400354308 +277 998 -.9982571912321685 +283 998 -.544361752508396 +300 998 -.18803171950870667 +312 998 .2817552262263378 +313 998 -.5780132386389213 +314 998 .19181984851682699 +330 998 -.12240419349554077 +334 998 .107123611668511 +338 998 .9126285320092273 +351 998 -.6913571042745952 +362 998 .7544418016004595 +395 998 -1.3056265395280096 +403 998 -.8421867786456528 +404 998 -.006394371922704242 +407 998 -.1774031239245158 +414 998 -.14605130779688374 +426 998 .23850783357096506 +427 998 -1.0158693789232607 +436 998 -1.657371672452234 +445 998 -.8781086903388028 +470 998 1.2911607285008755 +484 998 .5383298811200553 +499 998 -.3706203488933232 +510 998 2.345274244942346 +518 998 .5552579667434048 +543 998 -.7284477927662132 +558 998 .056885978312805036 +585 998 -1.2197091610459116 +597 998 .5195703547986812 +613 998 1.1984626743154598 +631 998 -.6773614523856144 +638 998 -.11158825716462017 +655 998 -.3566709794445756 +664 998 1.172197656848668 +674 998 -.8600920829900617 +729 998 -.7253873465244207 +730 998 .5433287999280458 +739 998 1.0301119470923585 +751 998 -.17448763631122893 +757 998 .09571665355693348 +759 998 -.3241555495834263 +774 998 -.22870710090521007 +780 998 .07728223953421336 +786 998 1.0486948958766038 +788 998 1.6599763777786944 +791 998 .2829322337932055 +794 998 -1.4689564946816394 +804 998 .6805625037078363 +808 998 -1.022192861374713 +809 998 -.3080690750296175 +811 998 -1.0326033308300047 +814 998 -.32601140072897417 +833 998 .12606946953211826 +844 998 -1.8926807186548944 +847 998 -.6856285477267803 +859 998 -.8250401064719083 +889 998 -1.456469231180758 +915 998 1.5379773497401426 +916 998 -.00556760015497873 +927 998 -.1778565846042786 +935 998 1.5171209659072247 +936 998 -.996446900795374 +944 998 .7416703741848982 +955 998 -1.9134219222855808 +960 998 2.3907070098454963 +967 998 .8727259571859239 +979 998 .6375392591864633 +980 998 1.524282056433029 +995 998 -.9836038583202671 +11 999 -.12090603879375335 +13 999 .5241878296045349 +37 999 -.34489546613969146 +63 999 1.9035631643957824 +70 999 -.5640833695278413 +71 999 -.05705465359174683 +80 999 -1.682558238135425 +96 999 2.0178780632400772 +105 999 2.4099328536411178 +108 999 .9925509571859734 +131 999 .4594477262828381 +132 999 .3700069000742044 +154 999 1.0251039997914657 +162 999 .19781980547261652 +170 999 .44270900133978086 +191 999 -1.6446397753103643 +192 999 -.24492965545157275 +197 999 .617593247498331 +200 999 -1.6841130601593668 +205 999 -.013038677714213888 +220 999 -2.3319535809033223 +272 999 .08053823102203125 +285 999 1.1956289326447238 +293 999 .6650582374944904 +306 999 -.18328618383874823 +314 999 .6931809065326162 +346 999 .09157237319076922 +349 999 1.1560857711783943 +350 999 -1.082664069194733 +355 999 -1.0465353432102675 +359 999 -.4878735329899414 +362 999 .34944288839381005 +386 999 -.5337547071565975 +391 999 -1.4500039404914833 +400 999 -1.1054492561610882 +404 999 1.1793705336704081 +405 999 -.04528003203997537 +406 999 1.3514684935112533 +408 999 .6553895417037958 +409 999 3.3993123684220032 +411 999 -.45213414927483514 +413 999 -.062184401661818975 +437 999 .012520329957937615 +440 999 -.43281877991076356 +458 999 1.6844820877880422 +461 999 2.851729080882987 +466 999 -1.2681221292720979 +471 999 -1.2327067277521597 +480 999 .5481941806706387 +496 999 .2779625640159176 +497 999 -.8492343730109868 +521 999 1.048305054032314 +525 999 .6826291257653526 +532 999 .19224170631786652 +549 999 -.34659396285310234 +550 999 .906829861277113 +560 999 .91484805792619 +564 999 -1.4769379299405032 +597 999 1.5307280840496043 +604 999 1.0532181244428565 +628 999 -.532763555638355 +631 999 -1.2214991923449616 +656 999 2.5511578526432896 +669 999 .6963511543668591 +674 999 -.9028115015229966 +689 999 -.08410518156626343 +692 999 2.0472331432329747 +697 999 -1.0233187870678875 +699 999 .16608394590667028 +711 999 .3316682707750077 +736 999 .47732619300886964 +738 999 .5538668410130152 +763 999 .19635373543314455 +826 999 -1.8681418830336742 +829 999 -.0891372572499716 +853 999 1.1401688401154095 +882 999 1.1560603727958052 +905 999 -.6785095619264785 +906 999 1.2037631984336885 +970 999 1.7035234931097565 +974 999 .4909051988410007 +982 999 1.3699332995443543 +983 999 1.0596200657865138 +991 999 .8268244228676891 +993 999 -.672820826644255 +994 999 2.4047022548730297 +997 999 .049236687317485636 +7 1000 .582347001843086 +33 1000 .17369596151516525 +50 1000 -1.5869003748608042 +72 1000 1.5787445879572282 +83 1000 -.6790814223064674 +85 1000 1.0243360720652375 +86 1000 -.21421986595306358 +94 1000 1.1690069125239513 +99 1000 -.2869692877753785 +131 1000 .39046216586784416 +150 1000 .7749593221905432 +159 1000 -2.531743587711323 +179 1000 1.0603080807370917 +183 1000 -1.667105382500385 +198 1000 -1.0959316500897438 +202 1000 -.33088453339266893 +208 1000 -.5838662511895037 +220 1000 .5491325513421652 +235 1000 .8113478922642777 +242 1000 .6327580091277775 +264 1000 1.4568456090656337 +269 1000 -1.043493408147711 +279 1000 .10193664765720922 +291 1000 .7582576866816213 +295 1000 .07662440649445418 +303 1000 -1.132210147518989 +306 1000 -.11716349957203268 +326 1000 -1.498075345651936 +353 1000 -1.7403215455037637 +360 1000 .865338846892793 +377 1000 .25737749244861635 +379 1000 1.1532703482541116 +388 1000 -.39530795166478355 +392 1000 -1.9086681914245989 +403 1000 -.7445422763596912 +407 1000 .4565039139947302 +410 1000 1.0901435834862219 +411 1000 1.9263854373218507 +425 1000 -.08530685681570718 +428 1000 -2.3699126465524225 +432 1000 -.8436211814561195 +463 1000 -.6202798563906889 +483 1000 -1.2779196490085798 +487 1000 .09313684249990276 +498 1000 .7115016700213506 +514 1000 2.022727718263377 +516 1000 1.578507393903899 +524 1000 -.5928884611410038 +527 1000 2.2620975241888805 +539 1000 .04040712527979781 +545 1000 .20832506570180565 +550 1000 .6698292830241679 +553 1000 .009056904493356022 +554 1000 .2679837359342377 +557 1000 .10370963751473271 +559 1000 -1.4543560527243737 +566 1000 -.09969752293480022 +585 1000 -1.08509851808185 +586 1000 -.28760626583510995 +589 1000 -.7422434945624157 +590 1000 -.17709283061047865 +594 1000 -2.1293442464960464 +598 1000 -.8142321515970362 +599 1000 -2.225827731550893 +604 1000 1.241186429259729 +608 1000 .6085215353680972 +635 1000 1.6699786477437735 +653 1000 -2.546146210663726 +686 1000 .33614628730125495 +707 1000 -.8088985421338388 +742 1000 .8531433165535185 +750 1000 -.014101445413320219 +761 1000 .5013244193923687 +808 1000 -2.0130350073205783 +829 1000 -.09996079615444312 +838 1000 -.9110888492562805 +845 1000 1.5048143051187957 +865 1000 .04682725106125722 +872 1000 .6120954670937145 +882 1000 -1.0871728619517553 +884 1000 1.0092474331684114 +891 1000 1.0251415392206649 +907 1000 .48680613796198413 +935 1000 -.78526917700304 +960 1000 -.7231032874289289 +969 1000 1.0558624950000706 +973 1000 -.724688852683874 +983 1000 -.8139875434093897 +988 1000 -2.7078055971346435 diff --git a/examples/dfc/maskUV.cpp b/examples/dfc/maskUV.cpp new file mode 100644 index 0000000000000..901ee25492a6e --- /dev/null +++ b/examples/dfc/maskUV.cpp @@ -0,0 +1,35 @@ +#include +using namespace Rcpp; + +// Given matrix factors U and V, and a list of entries (is,js) returns +// a list of entries in maskUV so that maskUV(k) = UV'(is,js) +// requires maskUV to be pre-allocated in the R code that calls this +// +// U is an m-by-r matrix +// V is an n-by-r matrix + +// [[Rcpp::export]] +NumericVector maskUV(NumericMatrix U, NumericMatrix V, IntegerVector is, IntegerVector js) +{ + // Get the length of the entries list and the rank of UV' + int l = is.size(); + int r = U.ncol(); + + // Initialize the output vector to all zeros + NumericVector maskUV(l,0.0); + + // Loop over non-zero entries and compute output vector + int i = is(1)-1; + int j = js(1)-1; + for(int n = 0; n < l; n++) + { + i = is(n)-1; // subtract 1 since R arrays start at 1 + j = js(n)-1; + maskUV(n) = 0; + for(int k = 0; k < r; k++) + { + maskUV(n) += U(i,k)*V(j,k); + } + } + return maskUV; +} From c7899c19f69a8fb29d37a1ebda778a31c215d984 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Thu, 2 Jan 2014 17:28:26 +0800 Subject: [PATCH 086/687] Add lapplyPartitionsWithIndex, with a test and an alias function. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 49 ++++++++++++++++++++++++++++++-- pkg/R/context.R | 9 +++--- pkg/inst/tests/test_rdd.R | 8 +++++- pkg/inst/worker/worker.R | 7 +++-- src/main/scala/sparkr/RRDD.scala | 11 +++++-- 6 files changed, 73 insertions(+), 12 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 61fd69cea0196..ac79bf6b5e2e5 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -11,6 +11,7 @@ exportMethods( "length", "lapply", "lapplyPartition", + "lapplyPartitionsWithIndex", "map", "partitionBy", "reduce", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c357a7765e0a9..9d3d0df923273 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -244,12 +244,41 @@ setGeneric("lapplyPartition", function(X, FUN) { #' @rdname lapplyPartition #' @aliases lapplyPartition,RDD,function-method setMethod("lapplyPartition", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + lapplyPartitionsWithIndex(X, function(s, part) { FUN(part) }) + }) + + +#' Return a new RDD by applying a function to each partition of this RDD, while +#' tracking the index of the original partition. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on each partition; takes the partition +#' index and a list of elements in the particular partition. +#' @return a new RDD created by the transformation. +#' @rdname lapplyPartitionsWithIndex +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 5L) +#' prod <- lapplyPartitionsWithIndex(rdd, function(split, part) { +#' split * Reduce("+", part) }) +#' collect(prod, flatten = FALSE) # 0, 7, 22, 45, 76 +#'} +setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { + standardGeneric("lapplyPartitionsWithIndex") }) + +#' @rdname lapplyPartitionsWithIndex +#' @aliases lapplyPartitionsWithIndex,RDD,function-method +setMethod("lapplyPartitionsWithIndex", signature(X = "RDD", FUN = "function"), function(X, FUN) { # TODO: This is to handle anonymous functions. Find out a # better way to do this. - computeFunc <- function(part) { - FUN(part) + computeFunc <- function(split, part) { + FUN(split, part) } serializedFunc <- serialize("computeFunc", connection = NULL, ascii = TRUE) @@ -272,6 +301,21 @@ setMethod("lapplyPartition", RDD(jrdd, TRUE) }) + +#' @rdname lapplyPartitionsWithIndex +#' @export +setGeneric("mapPartitionsWithIndex", function(X, FUN) { + standardGeneric("mapPartitionsWithIndex") }) + +#' @rdname lapplyPartitionsWithIndex +#' @aliases mapPartitionsWithIndex,RDD,function-method +setMethod("mapPartitionsWithIndex", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + lapplyPartitionsWithIndex(X, FUN) + }) + + #' Reduce across elements of an RDD. #' #' This function reduces the elements of this RDD using the @@ -380,6 +424,7 @@ setMethod("sample", signature(rdd = "RDD", withReplacement = "logical", fraction = "numeric", seed = "integer"), function(rdd, withReplacement, fraction, seed) { + jrdd <- .jcall(rdd@jrdd, "Lorg/apache/spark/api/java/JavaRDD;", "sample", diff --git a/pkg/R/context.R b/pkg/R/context.R index 193ed10c49e91..a487d36005758 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -69,7 +69,8 @@ parallelize <- function(sc, coll, numSlices = 1) { # 2-tuples of raws serializedSlices <- lapply(slices, serialize, connection = NULL) - javaSerializedSlices <- .jarray(lapply(serializedSlices, .jarray), contents.class = "[B") + javaSerializedSlices <- .jarray(lapply(serializedSlices, .jarray), + contents.class = "[B") jrddType = "Lorg/apache/spark/api/java/JavaRDD;" @@ -103,10 +104,10 @@ parallelize <- function(sc, coll, numSlices = 1) { #' # Include the matrix library we will be using #' includePackage(Matrix) #' -#' generateSparse <- function(x) { -#' sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) +#' generateSparse <- function(x) { +#' sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) #' } -#' +#' #' rdd <- lapplyPartition(parallelize(sc, 1:2, 2L), generateSparse) #' collect(rdd) #'} diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index f2633bcfb5f91..5b42ca0c8debd 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -38,5 +38,11 @@ test_that("lapply with dependency", { multiples <- lapply(rdd, function(x) { fa * x }) actual <- collect(multiples) - expect_equal(actual, as.list(nums * 5)) + expect_equal(actual, as.list(nums * 5)) +}) + +test_that("lapplyPartitionsWithIndex on RDD", { + func <- function(splitIndex, part) { list(splitIndex, Reduce("+", part)) } + actual <- collect(lapplyPartitionsWithIndex(rdd, func), flatten = FALSE) + expect_equal(actual, list(list(0, 15), list(1, 40))) }) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index a01311ffd789e..cfcf5276e4552 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -22,7 +22,10 @@ rLibDir <- readLines(inputCon, n = 1) suppressPackageStartupMessages(library(SparkR)) -# First read the function; if used for pairwise RRDD, this is the hash function. +# read the index of the current partition inside the RDD +splitIndex <- readInt(inputCon) + +# read the function; if used for pairwise RRDD, this is the hash function. execLen <- readInt(inputCon) execFunctionName <- unserialize(readRawLen(inputCon, execLen)) @@ -69,7 +72,7 @@ if (isEmpty != 0) { } else { data <- readLines(inputCon) } - output <- do.call(execFunctionName, list(data)) + output <- do.call(execFunctionName, list(splitIndex, data)) writeRaw(outputCon, output) } else { if (isSerialized) { diff --git a/src/main/scala/sparkr/RRDD.scala b/src/main/scala/sparkr/RRDD.scala index 69cdaf031e01c..871659619a779 100644 --- a/src/main/scala/sparkr/RRDD.scala +++ b/src/main/scala/sparkr/RRDD.scala @@ -35,7 +35,8 @@ private class PairwiseRRDD[T: ClassTag]( RRDD.startStdinThread(rLibDir, proc, hashFunc, dataSerialized, functionDependencies, packageNames, - firstParent[T].iterator(split, context), numPartitions) + firstParent[T].iterator(split, context), numPartitions, + split.index) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) @@ -105,7 +106,8 @@ class RRDD[T: ClassTag]( // Write -1 in numPartitions to indicate this is a normal RDD RRDD.startStdinThread(rLibDir, proc, func, dataSerialized, functionDependencies, packageNames, - firstParent[T].iterator(split, context), numPartitions = -1) + firstParent[T].iterator(split, context), + numPartitions = -1, split.index) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) @@ -195,7 +197,8 @@ object RRDD { functionDependencies: Array[Byte], packageNames: Array[Byte], iter: Iterator[T], - numPartitions: Int) { + numPartitions: Int, + splitIndex: Int) { val tempDir = System.getProperty("spark.local.dir", System.getProperty("java.io.tmpdir")).split(',')(0) @@ -215,6 +218,8 @@ object RRDD { printOut.println(tempFileName) printOut.println(rLibDir) + dataOut.writeInt(splitIndex) + dataOut.writeInt(func.length) dataOut.write(func, 0, func.length) From d3a4987ccf9b9e559afc98e397afc85c1a05d14b Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Thu, 2 Jan 2014 19:23:10 +0800 Subject: [PATCH 087/687] Add a test for lapplyPartitionsWithIndex on pairwise RDD. --- pkg/inst/tests/test_rdd.R | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 5b42ca0c8debd..76b170182dfc9 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -41,8 +41,18 @@ test_that("lapply with dependency", { expect_equal(actual, as.list(nums * 5)) }) -test_that("lapplyPartitionsWithIndex on RDD", { +test_that("lapplyPartitionsWithIndex on RDDs", { func <- function(splitIndex, part) { list(splitIndex, Reduce("+", part)) } actual <- collect(lapplyPartitionsWithIndex(rdd, func), flatten = FALSE) expect_equal(actual, list(list(0, 15), list(1, 40))) + + pairsRDD <- parallelize(sc, list(list(1, 2), list(3, 4), list(4, 8)), 1L) + partitionByParity <- function(key) { if (key %% 2 == 1) 0 else 1 } + mkTup <- function(splitIndex, part) { list(splitIndex, part) } + actual <- collect(lapplyPartitionsWithIndex( + partitionBy(pairsRDD, 2L, partitionByParity), + mkTup), + FALSE) + expect_equal(actual, list(list(0, list(list(1, 2), list(3, 4))), + list(1, list(list(4, 8))))) }) From 6885581a83333a6540fb3d3e40a994b2e683cec2 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 3 Jan 2014 19:24:50 +0800 Subject: [PATCH 088/687] Implement element-level sampleRDD() and takeSample() with tests. --- pkg/NAMESPACE | 2 +- pkg/R/RDD.R | 116 ++++++++++++++++++++++++++++++-------- pkg/inst/tests/test_rdd.R | 47 +++++++++++++++ 3 files changed, 139 insertions(+), 26 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index ac79bf6b5e2e5..bd88da2ce43f6 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -16,7 +16,7 @@ exportMethods( "partitionBy", "reduce", "reduceByKey", - "sample", + "sampleRDD", "take", "takeSample" ) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 9d3d0df923273..6b66989047ae0 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -399,39 +399,70 @@ setMethod("take", #' Return an RDD that is a sampled subset of the given RDD. #' +#' The same as `sample()' in Spark. (We rename it due to signature +#' inconsistencies with the `sample()' function in R's base package.) +#' #' @param rdd The RDD to sample elements from #' @param withReplacement Sampling with replacement or not #' @param fraction The (rough) sample target fraction #' @param seed Randomness seed value -#' @rdname sample +#' @rdname sampleRDD #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 10L) # ensure each num is in its own split -#' collect(sample(rdd, FALSE, 0.5, 1618L)) # approximately 5 elements sampled +#' rdd <- parallelize(sc, 1:10) # ensure each num is in its own split +#' collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) # ~5 distinct elements +#' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates #'} -setGeneric("sample", - # TODO: `sample` shadows the same-name func in R base; should we - # rename this to `sampleRDD`? +setGeneric("sampleRDD", function(rdd, withReplacement, fraction, seed) { - standardGeneric("sample") + standardGeneric("sampleRDD") }) -#' @rdname sample -#' @aliases sample,RDD -setMethod("sample", +#' @rdname sampleRDD +#' @aliases sampleRDD,RDD +setMethod("sampleRDD", signature(rdd = "RDD", withReplacement = "logical", fraction = "numeric", seed = "integer"), function(rdd, withReplacement, fraction, seed) { - jrdd <- .jcall(rdd@jrdd, - "Lorg/apache/spark/api/java/JavaRDD;", - "sample", - withReplacement, - fraction, - as.integer(seed)) - RDD(jrdd) + # The sampler: takes a partition and returns its sampled version. + samplingFunc <- function(split, part) { + set.seed(seed) + res <- vector("list", length(part)) + len <- 0 + + # Discards some random values to ensure each partition has a + # different random seed. + runif(split) + + for (elem in part) { + if (withReplacement) { + count <- rpois(1, fraction) + if (count > 0) { + res[(len + 1):(len + count)] <- rep(list(elem), count) + len <- len + count + } + } else { + if (runif(1) < fraction) { + len <- len + 1 + res[[len]] <- elem + } + } + } + + # TODO(zongheng): look into the performance of the current + # implementation. Look into some iterator package? Note that + # Scala avoids many calls to creating an empty list and PySpark + # similarly achieves this using `yield'. + if (len > 0) + res[1:len] + else + list() + } + + lapplyPartitionsWithIndex(rdd, samplingFunc) }) @@ -446,9 +477,11 @@ setMethod("sample", #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 10L) # ensure each num is in its own split -#' # exactly 5 elements sampled (may not be distinct) +#' rdd <- parallelize(sc, 1:100) +#' # exactly 5 elements sampled, which may not be distinct #' takeSample(rdd, TRUE, 5L, 1618L) +#' # exactly 5 distinct elements sampled +#' takeSample(rdd, FALSE, 5L, 16181618L) #'} setGeneric("takeSample", function(rdd, withReplacement, num, seed) { @@ -459,12 +492,45 @@ setGeneric("takeSample", setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", num = "integer", seed = "integer"), function(rdd, withReplacement, num, seed) { - underlying <- rdd@jrdd$rdd() - arrs <- underlying$takeSample(withReplacement, num, seed) - if (rdd@serialized) - deserializeByteArrays(arrs) - else - arrs + # This function is ported from RDD.scala. + fraction <- 0.0 + total <- 0 + multiplier <- 3.0 + initialCount <- count(rdd) + maxSelected <- 0 + MAXINT <- .Machine$integer.max + + if (num < 0) + stop(paste("Negative number of elements requested")) + + if (initialCount > MAXINT - 1) { + maxSelected <- MAXINT - 1 + } else { + maxSelected <- initialCount + } + + if (num > initialCount && !withReplacement) { + total <- maxSelected + fraction <- multiplier * (maxSelected + 1) / initialCount + } else { + total <- num + fraction <- multiplier * (num + 1) / initialCount + } + + set.seed(seed) + samples <- collect(sampleRDD(rdd, withReplacement, fraction, + as.integer(ceiling(runif(1, + -MAXINT, + MAXINT))))) + # If the first sample didn't turn out large enough, keep trying to + # take samples; this shouldn't happen often because we use a big + # multiplier for thei initial size + while (length(samples) < total) + samples <- collect(sampleRDD(rdd, withReplacement, fraction, + as.integer(ceiling(runif(1, + -MAXINT, + MAXINT))))) + sample(samples)[1:total] }) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 76b170182dfc9..d58c93a156329 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -56,3 +56,50 @@ test_that("lapplyPartitionsWithIndex on RDDs", { expect_equal(actual, list(list(0, list(list(1, 2), list(3, 4))), list(1, list(list(4, 8))))) }) + +test_that("sampleRDD() on RDDs", { + expect_equal(collect(sampleRDD(rdd, FALSE, 1.0, 2014L)), nums) + expect_equal(collect(sampleRDD(rdd, TRUE, 1.0, 20140103L)), nums) +}) + +test_that("takeSample() on RDDs", { + # ported from RDDSuite.scala, modified seeds + data <- parallelize(sc, 1:100, 2L) + for (seed in 4:5) { + s <- takeSample(data, FALSE, 20L, seed) + expect_equal(length(s), 20L) + expect_equal(length(unique(s)), 20L) + for (elem in s) { + expect_true(elem >= 1 && elem <= 100) + } + } + for (seed in 4:5) { + s <- takeSample(data, FALSE, 200L, seed) + expect_equal(length(s), 100L) + expect_equal(length(unique(s)), 100L) + for (elem in s) { + expect_true(elem >= 1 && elem <= 100) + } + } + for (seed in 4:5) { + s <- takeSample(data, TRUE, 20L, seed) + expect_equal(length(s), 20L) + for (elem in s) { + expect_true(elem >= 1 && elem <= 100) + } + } + for (seed in 4:5) { + s <- takeSample(data, TRUE, 100L, seed) + expect_equal(length(s), 100L) + # Chance of getting all distinct elements is astronomically low, so test we + # got < 100 + expect_true(length(unique(s)) < 100L) + } + for (seed in 4:5) { + s <- takeSample(data, TRUE, 200L, seed) + expect_equal(length(s), 200L) + # Chance of getting all distinct elements is still quite low, so test we + # got < 100 + expect_true(length(unique(s)) < 100L) + } +}) From c6a9dfcec47bd9e80fae6dd5a5c1461dc05a87eb Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sun, 29 Dec 2013 21:39:10 +0800 Subject: [PATCH 089/687] Initial port of the kmeans example. There is a performance concern, as this implementation currently is four times as slow as PySpark's port. (Roughly tested on Spark's kmeans_data.txt, with K = 3, convergeDist = 0.001, master = local[2].) --- examples/kmeans.R | 71 +++++++++++++++++++++++++++++++++++++++++++++++ pkg/R/RDD.R | 2 ++ 2 files changed, 73 insertions(+) create mode 100644 examples/kmeans.R diff --git a/examples/kmeans.R b/examples/kmeans.R new file mode 100644 index 0000000000000..65c57932a216f --- /dev/null +++ b/examples/kmeans.R @@ -0,0 +1,71 @@ +require(SparkR) + +# Logistic regression in Spark. +# Note: unlike the example in Scala, a point here is represented as a vector of +# doubles. + +parseVector <- function(line) { + nums = strsplit(line, " ")[[1]] + sapply(nums, as.double) +} + +closestPoint <- function(p, centers) { + bestIndex <- 0 + closest <- .Machine[["double.xmax"]] + for (i in 1:length(centers)) { + tempDist <- sum((p - centers[[i]]) ** 2) + if (tempDist < closest) { + closest <- tempDist + bestIndex <- i + } + } + bestIndex +} + +# Main program + +args <- commandArgs(trailing = TRUE) + +if (length(args) != 4) { + print("Usage: kmeans ") + q("no") +} + +sc <- sparkR.init(args[[1]], "RKMeans") +K <- as.integer(args[[3]]) +convergeDist <- as.double(args[[4]]) + +lines <- textFile(sc, args[[2]]) +points <- cache(lapply(lines, parseVector)) +# kPoints <- take(points, K) +kPoints <- takeSample(points, FALSE, K, 16189L) +tempDist <- 1.0 + +while (tempDist > convergeDist) { + closest <- lapply(points, + function(p) { list(closestPoint(p, kPoints), list(p, 1)) }) + + pointStats <- reduceByKey(closest, + function(p1, p2) { + list(p1[[1]] + p2[[1]], p1[[2]] + p2[[2]]) + }, + 2L) + + newPoints <- collect(lapply(pointStats, + function(tup) { + list(tup[[1]], tup[[2]][[1]] / tup[[2]][[2]]) + })) + + tempDist <- sum(sapply(newPoints, + function(tup) { + sum((kPoints[[tup[[1]]]] - tup[[2]]) ** 2) + })) + + for (tup in newPoints) + kPoints[[tup[[1]]]] <- tup[[2]] + + cat("Finished iteration (delta = ", tempDist, ")\n") +} + +cat("Final centers:\n") +writeLines(unlist(lapply(kPoints, paste, collapse = " "))) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 6b66989047ae0..0eca802cdc007 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -530,6 +530,8 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", as.integer(ceiling(runif(1, -MAXINT, MAXINT))))) + + # TODO(zongheng): investigate if this call is an in-place shuffle? sample(samples)[1:total] }) From 43c05ce0017cbb3aeef9a9c826ce009d43b76d9f Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 4 Jan 2014 16:10:14 +0800 Subject: [PATCH 090/687] Fix a flaky/incorrect test for sampleRDD(). --- pkg/inst/tests/test_rdd.R | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index d58c93a156329..eabf40370b068 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -58,8 +58,7 @@ test_that("lapplyPartitionsWithIndex on RDDs", { }) test_that("sampleRDD() on RDDs", { - expect_equal(collect(sampleRDD(rdd, FALSE, 1.0, 2014L)), nums) - expect_equal(collect(sampleRDD(rdd, TRUE, 1.0, 20140103L)), nums) + expect_equal(unlist(collect(sampleRDD(rdd, FALSE, 1.0, 2014L))), nums) }) test_that("takeSample() on RDDs", { From 6b638e768a39ff2a53d569be233c1d6822f245b2 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 8 Jan 2014 11:33:28 -0800 Subject: [PATCH 091/687] Add the assembly jar to SparkContext --- pkg/R/sparkR.R | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index b48f5b426b0be..63ebed3b5cea9 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -6,6 +6,7 @@ sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") .sparkREnv[["libname"]] <- libname + .sparkREnv[["assemblyJarPath"]] <- assemblyJarPath .jinit(classpath=assemblyJarPath) } @@ -38,5 +39,10 @@ sparkR.init <- function( envir=.sparkREnv ) - get(".sparkRjsc", envir=.sparkREnv) + sc <- get(".sparkRjsc", envir=.sparkREnv) + + # Add the sparkR jar to the SparkContext + sc$addJar(.sparkREnv[["assemblyJarPath"]]) + + sc } From e42d435496bf749a44609b34008ade633b7143f9 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 10 Jan 2014 18:51:11 -0800 Subject: [PATCH 092/687] Add support for broadcast variables --- pkg/NAMESPACE | 6 ++++-- pkg/R/RDD.R | 12 +++++++++++ pkg/R/broadcast.R | 34 ++++++++++++++++++++++++++++++++ pkg/R/context.R | 16 +++++++++++++++ pkg/R/utils.R | 7 +++++++ pkg/inst/tests/test_broadcast.R | 31 +++++++++++++++++++++++++++++ pkg/inst/worker/worker.R | 10 ++++++++++ src/main/scala/sparkr/RRDD.scala | 25 +++++++++++++++++++---- 8 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 pkg/R/broadcast.R create mode 100644 pkg/inst/tests/test_broadcast.R diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index bd88da2ce43f6..31de74b58442b 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -1,5 +1,6 @@ #exportPattern("^[[:alpha:]]+") exportClasses("RDD") +exportClasses("Broadcast") exportMethods( "cache", "collect", @@ -18,9 +19,10 @@ exportMethods( "reduceByKey", "sampleRDD", "take", - "takeSample" + "takeSample", + "value" ) # S3 methods exported -export("textFile", "parallelize", "hashCode", "includePackage") +export("textFile", "parallelize", "hashCode", "includePackage", "broadcast", "setBroadcastValue") export("sparkR.init") diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 0eca802cdc007..4d748842ae7a1 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -286,6 +286,11 @@ setMethod("lapplyPartitionsWithIndex", packageNamesArr <- .jarray(serialize(.sparkREnv[[".packages"]], connection = NULL, ascii = TRUE)) + refs <- lapply(ls(.broadcastNames), function(name) { + get(name, .broadcastNames) }) + broadcastArr <- .jarray(refs, + "org/apache/spark/broadcast/Broadcast") + depsBin <- getDependencies(computeFunc) depsBinArr <- .jarray(depsBin) @@ -296,6 +301,7 @@ setMethod("lapplyPartitionsWithIndex", depsBinArr, packageNamesArr, as.character(.sparkREnv[["libname"]]), + broadcastArr, X@jrdd$classTag()) jrdd <- rddRef$asJavaRDD() RDD(jrdd, TRUE) @@ -588,6 +594,11 @@ setMethod("partitionBy", packageNamesArr <- .jarray(serialize(.sparkREnv[[".packages"]], connection = NULL, ascii = TRUE)) + refs <- lapply(ls(.broadcastNames), function(name) { + get(name, .broadcastNames) }) + broadcastArr <- .jarray(refs, + "org/apache/spark/broadcast/Broadcast") + # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is @@ -600,6 +611,7 @@ setMethod("partitionBy", depsBinArr, packageNamesArr, as.character(.sparkREnv[["libname"]]), + broadcastArr, rdd@jrdd$classTag()) # Create a corresponding partitioner. diff --git a/pkg/R/broadcast.R b/pkg/R/broadcast.R new file mode 100644 index 0000000000000..5fd129cb78a27 --- /dev/null +++ b/pkg/R/broadcast.R @@ -0,0 +1,34 @@ +# S4 class representing Broadcast variables + +# Hidden environment that holds values for broadcast variables +# This will not be serialized / shipped by default +.broadcastNames <- new.env() +.broadcastValues <- new.env() +.broadcastIdToName <- new.env() + +setClass("Broadcast", slots = list(id = "character")) + +Broadcast <- function(id, value, jBroadcastRef, objName) { + .broadcastValues[[id]] <- value + .broadcastNames[[as.character(objName)]] <- jBroadcastRef + .broadcastIdToName[[id]] <- as.character(objName) + new("Broadcast", id = id) +} + +setGeneric("value", function(bcast) { standardGeneric("value") }) + +setMethod("value", + signature(bcast = "Broadcast"), + function(bcast) { + if (exists(bcast@id, envir=.broadcastValues)) { + get(bcast@id, envir=.broadcastValues) + } else { + NULL + } + }) + +# Package local function to set values on the worker side +setBroadcastValue <- function(bcastId, value) { + bcastIdStr <- as.character(bcastId) + .broadcastValues[[bcastIdStr]] <- value +} diff --git a/pkg/R/context.R b/pkg/R/context.R index a487d36005758..d639afe18e17c 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -121,3 +121,19 @@ includePackage <- function(sc, pkg) { packages <- c(packages, pkg) .sparkREnv[[".packages"]] <- packages } + +broadcast <- function(sc, object) { + objName <- as.character(substitute(object)) + serializedObj <- serialize(object, connection = NULL, ascii = TRUE) + serializedObjArr <- .jcast(.jarray(serializedObj), + new.class="java/lang/Object") + jBroadcast <- .jcall(sc, "Lorg/apache/spark/broadcast/Broadcast;", + "broadcast", serializedObjArr) + + # TODO(shivaram): Broadcast id is private to spark right now. + # Use a hack to get it out of toString + #id <- as.character(.jsimplify(.jcall(jBroadcast, "J", "id"))) + idStr <- as.character(.jsimplify(.jcall(jBroadcast, "Ljava/lang/String;", "toString"))) + id <- sub(")", "", strsplit(idStr, split="(", fixed=TRUE)[[1]][2]) + Broadcast(id, object, jBroadcast, objName) +} diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 9eed06c835f4f..e3cfe11d7fcda 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -113,6 +113,13 @@ getDependencies <- function(name) { } filteredVars <- Filter(function(x) { !isRDD(x, closureEnv) }, varsToSave) + # TODO: A better way to exclude variables that have been broadcast + # would be to actually list all the variables used in every function using + # `all.vars` and then walking through functions etc. + filteredVars <- Filter( + function(x) { !exists(x, .broadcastNames, inherits=FALSE) }, + filteredVars) + #cat("Saving ", filteredVars, "\n", file=stderr()) fileName <- tempfile(pattern="spark-utils", fileext=".deps") diff --git a/pkg/inst/tests/test_broadcast.R b/pkg/inst/tests/test_broadcast.R new file mode 100644 index 0000000000000..871a10566dff4 --- /dev/null +++ b/pkg/inst/tests/test_broadcast.R @@ -0,0 +1,31 @@ +context("broadcast variables") + +# JavaSparkContext handle +sc <- sparkR.init() + +# Partitioned data +nums <- 1:2 +rrdd <- parallelize(sc, nums, 2L) + +test_that("using broadcast variable", { + randomMat <- matrix(nrow=100, ncol=10, data=rnorm(1000)) + randomMatBr <- broadcast(sc, randomMat) + + useBroadcast <- function(x) { + sum(value(randomMatBr) * x) + } + actual <- collect(lapply(rrdd, useBroadcast)) + expected <- list(sum(randomMat) * 1, sum(randomMat) * 2) + expect_equal(actual, expected) +}) + +test_that("without using broadcast variable", { + randomMat <- matrix(nrow=100, ncol=10, data=rnorm(1000)) + + useBroadcast <- function(x) { + sum(randomMat * x) + } + actual <- collect(lapply(rrdd, useBroadcast)) + expected <- list(sum(randomMat) * 1, sum(randomMat) * 2) + expect_equal(actual, expected) +}) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index cfcf5276e4552..60516045ce665 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -57,6 +57,16 @@ for (pkg in packageNames) { suppressPackageStartupMessages(require(as.character(pkg), character.only=TRUE)) } +# Read and set broadcast variables +numBroadcastVars <- readInt(inputCon) +if (numBroadcastVars > 0) { + for (bcast in seq(1:numBroadcastVars)) { + bcastId <- readInt(inputCon) + value <- unserialize(readRaw(inputCon)) + setBroadcastValue(bcastId, value) + } +} + # If -1: read as normal RDD; if >= 0, treat as pairwise RDD and treat the int # as number of partitions to create. numPartitions <- readInt(inputCon) diff --git a/src/main/scala/sparkr/RRDD.scala b/src/main/scala/sparkr/RRDD.scala index 871659619a779..02858d73bfd70 100644 --- a/src/main/scala/sparkr/RRDD.scala +++ b/src/main/scala/sparkr/RRDD.scala @@ -8,6 +8,7 @@ import scala.reflect.ClassTag import org.apache.spark.{SparkEnv, Partition, Logging, SparkException, TaskContext} import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} +import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD /** @@ -21,7 +22,8 @@ private class PairwiseRRDD[T: ClassTag]( dataSerialized: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], - rLibDir: String) + rLibDir: String, + broadcastVars: Array[Broadcast[Object]]) extends RDD[(Int, Array[Byte])](parent) { override def getPartitions = parent.partitions @@ -34,7 +36,7 @@ private class PairwiseRRDD[T: ClassTag]( RRDD.startStderrThread(proc) RRDD.startStdinThread(rLibDir, proc, hashFunc, dataSerialized, - functionDependencies, packageNames, + functionDependencies, packageNames, broadcastVars, firstParent[T].iterator(split, context), numPartitions, split.index) @@ -90,7 +92,8 @@ class RRDD[T: ClassTag]( dataSerialized: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], - rLibDir: String) + rLibDir: String, + broadcastVars: Array[Broadcast[Object]]) extends RDD[Array[Byte]](parent) with Logging { override def getPartitions = parent.partitions @@ -105,7 +108,7 @@ class RRDD[T: ClassTag]( // Write -1 in numPartitions to indicate this is a normal RDD RRDD.startStdinThread(rLibDir, proc, func, dataSerialized, - functionDependencies, packageNames, + functionDependencies, packageNames, broadcastVars, firstParent[T].iterator(split, context), numPartitions = -1, split.index) @@ -196,6 +199,7 @@ object RRDD { dataSerialized: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], + broadcastVars: Array[Broadcast[Object]], iter: Iterator[T], numPartitions: Int, splitIndex: Int) { @@ -231,6 +235,19 @@ object RRDD { dataOut.writeInt(packageNames.length) dataOut.write(packageNames, 0, packageNames.length) + dataOut.writeInt(broadcastVars.length) + broadcastVars.foreach { broadcast => + // TODO(shivaram): Read a Long in R to avoid this cast + // FIXME: id is private to spark right now, use toString as a hack + // dataOut.writeInt(broadcast.id.toInt) + val broadcastId = broadcast.toString.split('(')(1).dropRight(1).toInt + dataOut.writeInt(broadcastId) + // TODO: Pass a byte array from R to avoid this cast ? + val broadcastByteArr = broadcast.value.asInstanceOf[Array[Byte]] + dataOut.writeInt(broadcastByteArr.length) + dataOut.write(broadcastByteArr, 0, broadcastByteArr.length) + } + dataOut.writeInt(numPartitions) if (!iter.hasNext) { From e4dd976b1908dd1acb6fcaf70344a83a5a7647d5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 10 Jan 2014 18:51:36 -0800 Subject: [PATCH 093/687] Update TODO.md --- TODO.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/TODO.md b/TODO.md index 7a9075cc7bfaa..8bca92b2e939b 100644 --- a/TODO.md +++ b/TODO.md @@ -1,16 +1,11 @@ ## Things to do for SparkR, roughly in order of importance ## Unit tests still TODO - -1. textFile + collect -- use README.md, or some test file (check if minSplits -works correctly) -2. utils.R - Check if dependencies are serialized correctly -3. convertJListToRList +1. utils.R - Check if dependencies are serialized correctly ## Functions to support 1. Similar to `stats.py` in Python, add support for mean, median, stdev etc. -2. Broadcast variables. -3. Consider if we need to extend `addPackage` so that any given R file can be sourced in the worker before functions are run. +2. Extend `addPackage` so that any given R file can be sourced in the worker before functions are run. ## Performance improvements 1. Write hash functions in C and use .Call to call into them From ca63844de06eac3f5a3fa44d64beb17d390735ba Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 10 Jan 2014 19:18:46 -0800 Subject: [PATCH 094/687] Add broadcast documentation Also generate documentation for sample, takeSample etc. --- pkg/R/broadcast.R | 34 ++++++++++++++++++++- pkg/R/context.R | 24 +++++++++++++++ pkg/man/broadcast-class.Rd | 26 ++++++++++++++++ pkg/man/broadcast-internal.Rd | 20 +++++++++++++ pkg/man/broadcast.Rd | 45 ++++++++++++++++++++++++++++ pkg/man/lapplyPartitionsWithIndex.Rd | 42 ++++++++++++++++++++++++++ pkg/man/sampleRDD.Rd | 35 ++++++++++++++++++++++ pkg/man/takeSample.Rd | 36 ++++++++++++++++++++++ 8 files changed, 261 insertions(+), 1 deletion(-) create mode 100644 pkg/man/broadcast-class.Rd create mode 100644 pkg/man/broadcast-internal.Rd create mode 100644 pkg/man/broadcast.Rd create mode 100644 pkg/man/lapplyPartitionsWithIndex.Rd create mode 100644 pkg/man/sampleRDD.Rd create mode 100644 pkg/man/takeSample.Rd diff --git a/pkg/R/broadcast.R b/pkg/R/broadcast.R index 5fd129cb78a27..051fe676dd02f 100644 --- a/pkg/R/broadcast.R +++ b/pkg/R/broadcast.R @@ -6,8 +6,21 @@ .broadcastValues <- new.env() .broadcastIdToName <- new.env() +#' @title S4 class that represents a Broadcast variable +#' @description Broadcast variables can be created using the broadcast +#' function from a \code{SparkContext}. +#' @rdname broadcast-class +#' @seealso broadcast +#' +#' @param id Id of the backing Spark broadcast variable +#' @export setClass("Broadcast", slots = list(id = "character")) +#' @rdname broadcast-class +#' @param value Value of the broadcast variable +#' @param jBroadcastRef reference to the backing Java broadcast object +#' @param objName name of broadcasted object +#' @export Broadcast <- function(id, value, jBroadcastRef, objName) { .broadcastValues[[id]] <- value .broadcastNames[[as.character(objName)]] <- jBroadcastRef @@ -15,8 +28,17 @@ Broadcast <- function(id, value, jBroadcastRef, objName) { new("Broadcast", id = id) } +#' @description +#' \code{value} can be used to get the value of a broadcast variable inside +#' a distributed function. +#' +#' @param bcast The broadcast variable to get +#' @rdname broadcast +#' @export setGeneric("value", function(bcast) { standardGeneric("value") }) +#' @rdname broadcast +#' @aliases value,Broadcast-method setMethod("value", signature(bcast = "Broadcast"), function(bcast) { @@ -27,7 +49,17 @@ setMethod("value", } }) -# Package local function to set values on the worker side +#' Internal function to set values of a broadcast variable. +#' +#' This function is used internally by Spark to set the value of a broadcast +#' variable on workers. Not intended for use outside the package. +#' +#' @rdname broadcast-internal +#' @seealso broadcast, value + +#' @param bcastId The id of broadcast variable to set +#' @param value The value to be set +#' @export setBroadcastValue <- function(bcastId, value) { bcastIdStr <- as.character(bcastId) .broadcastValues[[bcastIdStr]] <- value diff --git a/pkg/R/context.R b/pkg/R/context.R index d639afe18e17c..cf0ca63bce53f 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -122,6 +122,30 @@ includePackage <- function(sc, pkg) { .sparkREnv[[".packages"]] <- packages } +#' @title Broadcast a variable to all workers +#' +#' @description +#' Broadcast a read-only variable to the cluster, returning a \code{Broadcast} +#' object for reading it in distributed functions. +#' +#' @param sc Spark Context to use +#' @param object Object to be broadcast +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:2, 2L) +#' +#' # Large Matrix object that we want to broadcast +#' randomMat <- matrix(nrow=100, ncol=10, data=rnorm(1000)) +#' randomMatBr <- broadcast(sc, randomMat) +#' +#' # Use the broadcast variable inside the function +#' useBroadcast <- function(x) { +#' sum(value(randomMatBr) * x) +#' } +#' sumRDD <- lapply(rdd, useBroadcast) +#'} broadcast <- function(sc, object) { objName <- as.character(substitute(object)) serializedObj <- serialize(object, connection = NULL, ascii = TRUE) diff --git a/pkg/man/broadcast-class.Rd b/pkg/man/broadcast-class.Rd new file mode 100644 index 0000000000000..467e3aa7d6932 --- /dev/null +++ b/pkg/man/broadcast-class.Rd @@ -0,0 +1,26 @@ +\docType{class} +\name{Broadcast-class} +\alias{Broadcast} +\alias{Broadcast-class} +\title{S4 class that represents a Broadcast variable} +\usage{ +Broadcast(id, value, jBroadcastRef, objName) +} +\arguments{ + \item{id}{Id of the backing Spark broadcast variable} + + \item{value}{Value of the broadcast variable} + + \item{jBroadcastRef}{reference to the backing Java + broadcast object} + + \item{objName}{name of broadcasted object} +} +\description{ +Broadcast variables can be created using the broadcast +function from a \code{SparkContext}. +} +\seealso{ +broadcast +} + diff --git a/pkg/man/broadcast-internal.Rd b/pkg/man/broadcast-internal.Rd new file mode 100644 index 0000000000000..1225bc9b6b6bd --- /dev/null +++ b/pkg/man/broadcast-internal.Rd @@ -0,0 +1,20 @@ +\name{setBroadcastValue} +\alias{setBroadcastValue} +\title{Internal function to set values of a broadcast variable.} +\usage{ +setBroadcastValue(bcastId, value) +} +\arguments{ + \item{bcastId}{The id of broadcast variable to set} + + \item{value}{The value to be set} +} +\description{ +This function is used internally by Spark to set the value +of a broadcast variable on workers. Not intended for use +outside the package. +} +\seealso{ +broadcast, value +} + diff --git a/pkg/man/broadcast.Rd b/pkg/man/broadcast.Rd new file mode 100644 index 0000000000000..7838683e18ea4 --- /dev/null +++ b/pkg/man/broadcast.Rd @@ -0,0 +1,45 @@ +\docType{methods} +\name{value} +\alias{broadcast} +\alias{value} +\alias{value,Broadcast-method} +\title{Broadcast a variable to all workers} +\usage{ +value(bcast) + +\S4method{value}{Broadcast}(bcast) + +broadcast(sc, object) +} +\arguments{ + \item{bcast}{The broadcast variable to get} + + \item{sc}{Spark Context to use} + + \item{object}{Object to be broadcast} +} +\description{ +\code{value} can be used to get the value of a broadcast +variable inside a distributed function. + +Broadcast a read-only variable to the cluster, returning a +\code{Broadcast} object for reading it in distributed +functions. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:2, 2L) + +# Large Matrix object that we want to broadcast +randomMat <- matrix(nrow=100, ncol=10, data=rnorm(1000)) +randomMatBr <- broadcast(sc, randomMat) + +# Use the broadcast variable inside the function +useBroadcast <- function(x) { + sum(value(randomMatBr) * x) +} +sumRDD <- lapply(rdd, useBroadcast) +} +} + diff --git a/pkg/man/lapplyPartitionsWithIndex.Rd b/pkg/man/lapplyPartitionsWithIndex.Rd new file mode 100644 index 0000000000000..26edd5ad88506 --- /dev/null +++ b/pkg/man/lapplyPartitionsWithIndex.Rd @@ -0,0 +1,42 @@ +\docType{methods} +\name{lapplyPartitionsWithIndex} +\alias{lapplyPartitionsWithIndex} +\alias{lapplyPartitionsWithIndex,RDD,function-method} +\alias{mapPartitionsWithIndex} +\alias{mapPartitionsWithIndex,RDD,function-method} +\title{Return a new RDD by applying a function to each partition of this RDD, while +tracking the index of the original partition.} +\usage{ +lapplyPartitionsWithIndex(X, FUN) + +\S4method{lapplyPartitionsWithIndex}{RDD,function}(X, FUN) + +mapPartitionsWithIndex(X, FUN) + +\S4method{mapPartitionsWithIndex}{RDD,function}(X, FUN) +} +\arguments{ + \item{X}{The RDD to apply the transformation.} + + \item{FUN}{the transformation to apply on each partition; + takes the partition index and a list of elements in the + particular partition.} +} +\value{ +a new RDD created by the transformation. +} +\description{ +Return a new RDD by applying a function to each partition +of this RDD, while tracking the index of the original +partition. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10, 5L) +prod <- lapplyPartitionsWithIndex(rdd, function(split, part) { + split * Reduce("+", part) }) +collect(prod, flatten = FALSE) # 0, 7, 22, 45, 76 +} +} + diff --git a/pkg/man/sampleRDD.Rd b/pkg/man/sampleRDD.Rd new file mode 100644 index 0000000000000..5d057fd1ad59b --- /dev/null +++ b/pkg/man/sampleRDD.Rd @@ -0,0 +1,35 @@ +\docType{methods} +\name{sampleRDD} +\alias{sampleRDD} +\alias{sampleRDD,RDD} +\alias{sampleRDD,RDD,logical,numeric,integer-method} +\title{Return an RDD that is a sampled subset of the given RDD.} +\usage{ +sampleRDD(rdd, withReplacement, fraction, seed) + +\S4method{sampleRDD}{RDD,logical,numeric,integer}(rdd, withReplacement, + fraction, seed) +} +\arguments{ + \item{rdd}{The RDD to sample elements from} + + \item{withReplacement}{Sampling with replacement or not} + + \item{fraction}{The (rough) sample target fraction} + + \item{seed}{Randomness seed value} +} +\description{ +The same as `sample()' in Spark. (We rename it due to +signature inconsistencies with the `sample()' function in +R's base package.) +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) # ensure each num is in its own split +collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) # ~5 distinct elements +collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates +} +} + diff --git a/pkg/man/takeSample.Rd b/pkg/man/takeSample.Rd new file mode 100644 index 0000000000000..52711c0472709 --- /dev/null +++ b/pkg/man/takeSample.Rd @@ -0,0 +1,36 @@ +\docType{methods} +\name{takeSample} +\alias{takeSample} +\alias{takeSample,RDD} +\alias{takeSample,RDD,logical,integer,integer-method} +\title{Return a list of the elements that are a sampled subset of the given RDD.} +\usage{ +takeSample(rdd, withReplacement, num, seed) + +\S4method{takeSample}{RDD,logical,integer,integer}(rdd, withReplacement, num, + seed) +} +\arguments{ + \item{rdd}{The RDD to sample elements from} + + \item{withReplacement}{Sampling with replacement or not} + + \item{num}{Number of elements to return} + + \item{seed}{Randomness seed value} +} +\description{ +Return a list of the elements that are a sampled subset of +the given RDD. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:100) +# exactly 5 elements sampled, which may not be distinct +takeSample(rdd, TRUE, 5L, 1618L) +# exactly 5 distinct elements sampled +takeSample(rdd, FALSE, 5L, 16181618L) +} +} + From 27a4a4b17a0d6154b812949d58a9f88990c640dd Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 10 Jan 2014 19:24:20 -0800 Subject: [PATCH 095/687] Add notes on how to compile roxygen2 docs --- DOCUMENTATION.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 DOCUMENTATION.md diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md new file mode 100644 index 0000000000000..931d01549b265 --- /dev/null +++ b/DOCUMENTATION.md @@ -0,0 +1,12 @@ +# SparkR Documentation + +SparkR documentation is generated using in-source comments annotated using using +`roxygen2`. After making changes to the documentation, to generate man pages, +you can run the following from an R console in the SparkR home directory + + library(devtools) + devtools::document(pkg="./pkg", roclets=c("rd")) + +You can verify if your changes are good by running + + R CMD check pkg/ From c691464e40783e887726b1414db2ab0a353aff2f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 13 Jan 2014 13:16:15 -0800 Subject: [PATCH 096/687] Add Apache 2.0 License file --- LICENSE | 398 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 398 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000..1c166d1333614 --- /dev/null +++ b/LICENSE @@ -0,0 +1,398 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +======================================================================= +Apache Spark Subcomponents: + +The Apache Spark project contains subcomponents with separate copyright +notices and license terms. Your use of the source code for the these +subcomponents is subject to the terms and conditions of the following +licenses. + + +======================================================================= +For the Boto EC2 library (ec2/third_party/boto*.zip): +======================================================================= + +Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, dis- +tribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the fol- +lowing conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + + +======================================================================== +For CloudPickle (pyspark/cloudpickle.py): +======================================================================== + +Copyright (c) 2012, Regents of the University of California. +Copyright (c) 2009 `PiCloud, Inc. `_. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the University of California, Berkeley nor the + names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +======================================================================== +For Py4J (python/lib/py4j0.7.egg and files in assembly/lib/net/sf/py4j): +======================================================================== + +Copyright (c) 2009-2011, Barthelemy Dagenais All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +- The name of the author may not be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +======================================================================== +For DPark join code (python/pyspark/join.py): +======================================================================== + +Copyright (c) 2011, Douban Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the name of the Douban Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +======================================================================== +For sorttable (core/src/main/resources/org/apache/spark/ui/static/sorttable.js): +======================================================================== + +Copyright (c) 1997-2007 Stuart Langridge + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +======================================================================== +For Scala Interpreter classes (all .scala files in repl/src/main/scala +except for Main.Scala, SparkHelper.scala and ExecutorClassLoader.scala): +======================================================================== + +Copyright (c) 2002-2013 EPFL +Copyright (c) 2011-2013 Typesafe, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +- Neither the name of the EPFL nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. From b25afed0143643ec649aee363a568f0ae1359d8b Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 13 Jan 2014 14:10:15 -0800 Subject: [PATCH 097/687] Change package name to edu.berkeley.cs.amplab --- Makefile | 10 +++------- build.sbt | 4 ++-- pkg/R/RDD.R | 4 ++-- pkg/R/context.R | 2 +- pkg/R/sparkR.R | 2 +- .../{ => edu/berkeley/cs/amplab}/sparkr/RRDD.scala | 2 +- 6 files changed, 10 insertions(+), 14 deletions(-) rename src/main/scala/{ => edu/berkeley/cs/amplab}/sparkr/RRDD.scala (99%) diff --git a/Makefile b/Makefile index 239418f2a364a..d2cc304156988 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,10 @@ LIB_DIR := $(shell pwd)/lib/ SCALA_VERSION := 2.10 -JAR_NAME := SparkR-assembly-0.1.jar +JAR_NAME := sparkr-assembly-0.1.jar -all: sparkR +all: sparkr -SparkR: pkg/R/* target/scala-$(SCALA_VERSION)/*.jar +sparkr: pkg/R/* target/scala-$(SCALA_VERSION)/*.jar cp target/scala-$(SCALA_VERSION)/$(JAR_NAME) pkg/inst/ mkdir -p $(LIB_DIR) R CMD INSTALL --library=$(LIB_DIR) pkg/ - -sparkR: SparkR - -sparkr: SparkR diff --git a/build.sbt b/build.sbt index de03c6757d1ad..44c4454a46fb9 100644 --- a/build.sbt +++ b/build.sbt @@ -6,11 +6,11 @@ import AssemblyKeys._ assemblySettings -name := "SparkR" +name := "sparkr" version := "0.1" -organization := "sparkr" +organization := "edu.berkeley.cs.amplab" scalaVersion := "2.10.3" diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 4d748842ae7a1..1128837af2798 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -294,7 +294,7 @@ setMethod("lapplyPartitionsWithIndex", depsBin <- getDependencies(computeFunc) depsBinArr <- .jarray(depsBin) - rddRef <- new(J("sparkr.RRDD"), + rddRef <- new(J("edu.berkeley.cs.amplab.sparkr.RRDD"), X@jrdd$rdd(), serializedFuncArr, X@serialized, @@ -603,7 +603,7 @@ setMethod("partitionBy", # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). - pairwiseRRDD <- new(J("sparkr.PairwiseRRDD"), + pairwiseRRDD <- new(J("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD"), rdd@jrdd$rdd(), as.integer(numPartitions), serializedHashFuncBytes, diff --git a/pkg/R/context.R b/pkg/R/context.R index cf0ca63bce53f..db14db5a4c720 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -74,7 +74,7 @@ parallelize <- function(sc, coll, numSlices = 1) { jrddType = "Lorg/apache/spark/api/java/JavaRDD;" - jrdd <- .jcall("sparkr/RRDD", + jrdd <- .jcall("edu/berkeley/cs/amplab/sparkr/RRDD", jrddType, "createRDDFromArray", sc, diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 63ebed3b5cea9..93db0420105f0 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -1,6 +1,6 @@ .sparkREnv <- new.env() -assemblyJarName <- "SparkR-assembly-0.1.jar" +assemblyJarName <- "sparkr-assembly-0.1.jar" sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") diff --git a/src/main/scala/sparkr/RRDD.scala b/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala similarity index 99% rename from src/main/scala/sparkr/RRDD.scala rename to src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 02858d73bfd70..01b4cb46ffcf1 100644 --- a/src/main/scala/sparkr/RRDD.scala +++ b/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -1,4 +1,4 @@ -package sparkr +package edu.berkeley.cs.amplab.sparkr import java.io._ From 34c4dcedf4bfda167bf26c3e5eb5ce25f3434f34 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 13 Jan 2014 19:52:32 -0800 Subject: [PATCH 098/687] Move src into pkg and update Makefile This enables the package to be installed using install_github using devtools and automates the build procedure. --- Makefile | 10 ---- pkg/src/Makefile | 21 ++++++++ build.sbt => pkg/src/build.sbt | 0 {project => pkg/src/project}/build.properties | 0 {project => pkg/src/project}/plugins.sbt | 0 pkg/src/sbt/sbt | 50 ++++++++++++++++++ .../src/src}/main/resources/log4j.properties | 0 .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 0 sbt/sbt | 22 -------- sbt/sbt-launch-0.11.3-2.jar | Bin 1096763 -> 0 bytes 10 files changed, 71 insertions(+), 32 deletions(-) delete mode 100644 Makefile create mode 100644 pkg/src/Makefile rename build.sbt => pkg/src/build.sbt (100%) rename {project => pkg/src/project}/build.properties (100%) rename {project => pkg/src/project}/plugins.sbt (100%) create mode 100755 pkg/src/sbt/sbt rename {src => pkg/src/src}/main/resources/log4j.properties (100%) rename {src => pkg/src/src}/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala (100%) delete mode 100755 sbt/sbt delete mode 100644 sbt/sbt-launch-0.11.3-2.jar diff --git a/Makefile b/Makefile deleted file mode 100644 index d2cc304156988..0000000000000 --- a/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -LIB_DIR := $(shell pwd)/lib/ -SCALA_VERSION := 2.10 -JAR_NAME := sparkr-assembly-0.1.jar - -all: sparkr - -sparkr: pkg/R/* target/scala-$(SCALA_VERSION)/*.jar - cp target/scala-$(SCALA_VERSION)/$(JAR_NAME) pkg/inst/ - mkdir -p $(LIB_DIR) - R CMD INSTALL --library=$(LIB_DIR) pkg/ diff --git a/pkg/src/Makefile b/pkg/src/Makefile new file mode 100644 index 0000000000000..65b1b464f61bf --- /dev/null +++ b/pkg/src/Makefile @@ -0,0 +1,21 @@ +SCALA_VERSION := 2.10 +JAR_NAME := sparkr-assembly-0.1.jar +TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) +SCALA_SOURCE_DIR := src/main/scala/edu/berkeley/cs/amplab/sparkr + +SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) + +all: $(TARGET_NAME) + +$(TARGET_NAME): $(SCALA_FILES) + ./sbt/sbt assembly + cp $(TARGET_NAME) ../inst/ + +clean: + ./sbt/sbt clean + rm -rf target + rm -rf project/target + rm -rf project/project + rm sbt/sbt-launch-*.jar + +.PHONY: all clean diff --git a/build.sbt b/pkg/src/build.sbt similarity index 100% rename from build.sbt rename to pkg/src/build.sbt diff --git a/project/build.properties b/pkg/src/project/build.properties similarity index 100% rename from project/build.properties rename to pkg/src/project/build.properties diff --git a/project/plugins.sbt b/pkg/src/project/plugins.sbt similarity index 100% rename from project/plugins.sbt rename to pkg/src/project/plugins.sbt diff --git a/pkg/src/sbt/sbt b/pkg/src/sbt/sbt new file mode 100755 index 0000000000000..62ead8a69dbf6 --- /dev/null +++ b/pkg/src/sbt/sbt @@ -0,0 +1,50 @@ +#!/bin/bash + +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# This script launches sbt for this project. If present it uses the system +# version of sbt. If there is no system version of sbt it attempts to download +# sbt locally. +SBT_VERSION=`awk -F "=" '/sbt\\.version/ {print $2}' ./project/build.properties` +URL1=http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/${SBT_VERSION}/sbt-launch.jar +URL2=http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/${SBT_VERSION}/sbt-launch.jar +JAR=sbt/sbt-launch-${SBT_VERSION}.jar + +# Download sbt launch jar if it hasn't been downloaded yet +if [ ! -f ${JAR} ]; then + # Download + printf "Attempting to fetch sbt\n" + if hash curl 2>/dev/null; then + curl --progress-bar ${URL1} > ${JAR} || curl --progress-bar ${URL2} > ${JAR} + elif hash wget 2>/dev/null; then + wget --progress=bar ${URL1} -O ${JAR} || wget --progress=bar ${URL2} -O ${JAR} + else + printf "You do not have curl or wget installed, please install sbt manually from http://www.scala-sbt.org/\n" + exit -1 + fi +fi +if [ ! -f ${JAR} ]; then + # We failed to download + printf "Our attempt to download sbt locally to ${JAR} failed. Please install sbt manually from http://www.scala-sbt.org/\n" + exit -1 +fi +printf "Launching sbt from ${JAR}\n" +java \ + -Xmx1200m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=256m \ + -jar ${JAR} \ + "$@" diff --git a/src/main/resources/log4j.properties b/pkg/src/src/main/resources/log4j.properties similarity index 100% rename from src/main/resources/log4j.properties rename to pkg/src/src/main/resources/log4j.properties diff --git a/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala similarity index 100% rename from src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala rename to pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala diff --git a/sbt/sbt b/sbt/sbt deleted file mode 100755 index d3139881348b2..0000000000000 --- a/sbt/sbt +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -export PROJECT_HOME=$(cd "$(dirname $0)/.." 2>&1 >/dev/null ; pwd) - -java -Xmx4000m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=256m $SBT_OPTS -jar "$PROJECT_HOME"/sbt/sbt-launch-*.jar "$@" diff --git a/sbt/sbt-launch-0.11.3-2.jar b/sbt/sbt-launch-0.11.3-2.jar deleted file mode 100644 index 23e5c3f31149bbf2bddbf1ae8d1fd02aba7910ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1096763 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

`&E36 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%0DdqA{zQ&boLy&i5?@O2yy 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

?0yiJHX3f>NR%-yqM9SCIn|` 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%0D} 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 x>S5%rTOWMIjz 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 z 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

-7{YiV&Eno-2qaL1gf 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 Qo^joCIeZs^2<7nq0M|&~&j0`b From ff96d5c298309b5e729d812ed380d9d73436c1f5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 13 Jan 2014 20:04:59 -0800 Subject: [PATCH 099/687] Pass in SPARK_HOME and jar file path --- pkg/R/sparkR.R | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 93db0420105f0..d0d9b06439261 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -35,14 +35,11 @@ sparkR.init <- function( # TODO: support other constructors assign( ".sparkRjsc", - .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName), + .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName, + as.character(sparkHome), + as.character(.sparkREnv[["assemblyJarPath"]])), envir=.sparkREnv ) - sc <- get(".sparkRjsc", envir=.sparkREnv) - - # Add the sparkR jar to the SparkContext - sc$addJar(.sparkREnv[["assemblyJarPath"]]) - - sc + get(".sparkRjsc", envir=.sparkREnv) } From 0fd65718f7b23eed9a7117d9d78f4489d396f3a0 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 13 Jan 2014 20:07:42 -0800 Subject: [PATCH 100/687] Normalize SPARK_HOME before passing it --- pkg/R/sparkR.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index d0d9b06439261..06e64bed4d5a6 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -32,11 +32,13 @@ sparkR.init <- function( return(get(".sparkRjsc", envir=.sparkREnv)) } + sparkHomeNormalized <- normalizePath(sparkHome) + # TODO: support other constructors assign( ".sparkRjsc", .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName, - as.character(sparkHome), + as.character(sparkHomeNormalized), as.character(.sparkREnv[["assemblyJarPath"]])), envir=.sparkREnv ) From 28346caa0bf2e01282ec856c9980f575c9b02ca5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 13 Jan 2014 20:16:40 -0800 Subject: [PATCH 101/687] Only normalize if SPARK_HOME is not empty --- pkg/R/sparkR.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 06e64bed4d5a6..d4e06762896a4 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -32,13 +32,15 @@ sparkR.init <- function( return(get(".sparkRjsc", envir=.sparkREnv)) } - sparkHomeNormalized <- normalizePath(sparkHome) + if (nchar(sparkHome) != 0) { + sparkHome <- normalizePath(sparkHome) + } # TODO: support other constructors assign( ".sparkRjsc", .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName, - as.character(sparkHomeNormalized), + as.character(sparkHome), as.character(.sparkREnv[["assemblyJarPath"]])), envir=.sparkREnv ) From 6cb00d1540dd2baa60f41b64a0b971fa78bab88b Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 13 Jan 2014 20:42:19 -0800 Subject: [PATCH 102/687] Update README and add helper script install-dev.sh --- .gitignore | 1 + README.md | 19 ++++++++++++++----- install-dev.sh | 11 +++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) create mode 100755 install-dev.sh diff --git a/.gitignore b/.gitignore index f91d166aeb2f7..5736c5de8ec78 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ target/ lib/ +work/ # vim tmps .*.swp diff --git a/README.md b/README.md index 2026e09d2983d..c908b824ac117 100644 --- a/README.md +++ b/README.md @@ -16,20 +16,29 @@ you can run the following command in R: install.packages("rJava") -To run SparkR, first build the scala package using +To develop SparkR, you can build the scala package and the R package using - sbt/sbt assembly + ./install-dev.sh -Following that compile the R package by running +If you wish to try out the package directly from github, you can use `install_git` from `devtools` - make + library(devtools) + install_git("https://github.com/amplab/SparkR-pkg.git", + branch="install-github", subdir="pkg") ## Running sparkR -Once you have built SparkR, you can start using it by launching the SparkR +If you have cloned and built SparkR, you can start using it by launching the SparkR shell with ./sparkR +If you have installed it directly from github, you can include the SparkR +package and then initialize a SparkContext. For example to run with a local +Spark master you can launch R and then run + + library(SparkR) + sc <- sparkR.init(master="local") + SparkR also comes with several sample programs in the `examples` directory. To run one of them, use `./sparkR `. For example: diff --git a/install-dev.sh b/install-dev.sh new file mode 100755 index 0000000000000..937ce0550cf4c --- /dev/null +++ b/install-dev.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# Install development version of SparkR + +FWDIR="$(cd `dirname $0`; pwd)" +LIB_DIR="$FWDIR/lib" + +mkdir -p $LIB_DIR + +# Install R +R CMD INSTALL --library=$LIB_DIR pkg/ From 77450a1eaa941c989efb29fc1b5ebae25da0023d Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 14 Jan 2014 13:59:17 -0800 Subject: [PATCH 103/687] Remove dependency on Spark Logging --- src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 01b4cb46ffcf1..1f9815fae3d1d 100644 --- a/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -6,7 +6,7 @@ import scala.collection.JavaConversions._ import scala.io.Source import scala.reflect.ClassTag -import org.apache.spark.{SparkEnv, Partition, Logging, SparkException, TaskContext} +import org.apache.spark.{SparkEnv, Partition, SparkException, TaskContext} import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD @@ -94,7 +94,7 @@ class RRDD[T: ClassTag]( packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Broadcast[Object]]) - extends RDD[Array[Byte]](parent) with Logging { + extends RDD[Array[Byte]](parent) { override def getPartitions = parent.partitions From 5c88fbd70f288e0876896b2e869a8ebad71d80f6 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 14 Jan 2014 14:08:54 -0800 Subject: [PATCH 104/687] Add helper script to run tests --- run-tests.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100755 run-tests.sh diff --git a/run-tests.sh b/run-tests.sh new file mode 100755 index 0000000000000..6041b0d8711fa --- /dev/null +++ b/run-tests.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +FWDIR="$(cd `dirname $0`; pwd)" + +$FWDIR/sparkR pkg/inst/tests/run-all.R From ec8210e6ede0502ee46740d010067bf5a06ef370 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 14 Jan 2014 14:33:37 -0800 Subject: [PATCH 105/687] Remove broadcastId hack as it is public in Spark --- pkg/R/context.R | 6 +----- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index db14db5a4c720..cd520dcc05f0d 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -154,10 +154,6 @@ broadcast <- function(sc, object) { jBroadcast <- .jcall(sc, "Lorg/apache/spark/broadcast/Broadcast;", "broadcast", serializedObjArr) - # TODO(shivaram): Broadcast id is private to spark right now. - # Use a hack to get it out of toString - #id <- as.character(.jsimplify(.jcall(jBroadcast, "J", "id"))) - idStr <- as.character(.jsimplify(.jcall(jBroadcast, "Ljava/lang/String;", "toString"))) - id <- sub(")", "", strsplit(idStr, split="(", fixed=TRUE)[[1]][2]) + id <- as.character(.jsimplify(.jcall(jBroadcast, "J", "id"))) Broadcast(id, object, jBroadcast, objName) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 1f9815fae3d1d..f113a60efb38c 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -101,7 +101,6 @@ class RRDD[T: ClassTag]( override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { val pb = RRDD.rWorkerProcessBuilder(rLibDir) - val proc = pb.start() RRDD.startStderrThread(proc) @@ -238,10 +237,7 @@ object RRDD { dataOut.writeInt(broadcastVars.length) broadcastVars.foreach { broadcast => // TODO(shivaram): Read a Long in R to avoid this cast - // FIXME: id is private to spark right now, use toString as a hack - // dataOut.writeInt(broadcast.id.toInt) - val broadcastId = broadcast.toString.split('(')(1).dropRight(1).toInt - dataOut.writeInt(broadcastId) + dataOut.writeInt(broadcast.id.toInt) // TODO: Pass a byte array from R to avoid this cast ? val broadcastByteArr = broadcast.value.asInstanceOf[Array[Byte]] dataOut.writeInt(broadcastByteArr.length) From 5eb21311d1c49c320b88c700415d2c48b9b20c54 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 14 Jan 2014 14:37:03 -0800 Subject: [PATCH 106/687] Update repo path in README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c908b824ac117..0b47eda22073a 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ To develop SparkR, you can build the scala package and the R package using If you wish to try out the package directly from github, you can use `install_git` from `devtools` library(devtools) - install_git("https://github.com/amplab/SparkR-pkg.git", - branch="install-github", subdir="pkg") + install_git("https://github.com/amplab-extras/SparkR-pkg.git", + subdir="pkg") ## Running sparkR If you have cloned and built SparkR, you can start using it by launching the SparkR @@ -46,4 +46,4 @@ To run one of them, use `./sparkR `. For example: You can also run the unit-tests for SparkR by running - ./sparkR pkg/inst/tests/run-all.R + ./run-tests.sh From 4450189d0dbbbbe514b129fa78c20574e8d86396 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 14 Jan 2014 23:45:45 -0800 Subject: [PATCH 107/687] Add Spark 0.9 dependency from Apache Staging Also clean up assembly jar from inst on make clean --- pkg/src/Makefile | 1 + pkg/src/build.sbt | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 65b1b464f61bf..37724497166ee 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -17,5 +17,6 @@ clean: rm -rf project/target rm -rf project/project rm sbt/sbt-launch-*.jar + rm ../inst/$(JAR_NAME) .PHONY: all clean diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 44c4454a46fb9..c0c5d943b6fcb 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -17,7 +17,7 @@ scalaVersion := "2.10.3" libraryDependencies ++= Seq( "org.slf4j" % "slf4j-api" % "1.7.2", "org.slf4j" % "slf4j-log4j12" % "1.7.2", - "org.apache.spark" % "spark-core_2.10" % "0.9.0-incubating-SNAPSHOT" + "org.apache.spark" % "spark-core_2.10" % "0.9.0-incubating" ) { @@ -30,7 +30,8 @@ libraryDependencies ++= Seq( resolvers ++= Seq( "Typesafe" at "http://repo.typesafe.com/typesafe/releases", "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", - "Spray" at "http://repo.spray.cc" + "Spray" at "http://repo.spray.cc", + "Apache Staging" at "https://repository.apache.org/content/repositories/staging/" ) mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => From e60e18a7bcda72f0bffdedf9c3f4d0f9f276bdf2 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 14 Jan 2014 23:50:44 -0800 Subject: [PATCH 108/687] Update README to remove Spark installation notes --- README.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 0b47eda22073a..b645fafa906de 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,17 @@ SparkR is an R package that provides a light-weight frontend to use Spark from R. -## Building +## Installing SparkR -### Installing Spark -SparkR requires Scala 2.10 and Spark version >= 0.9.0. As Spark 0.9.0 has not -been released yet, you will need to clone the Spark master branch and -run `sbt/sbt publish-local` to publish 0.9.0-SNAPSHOT. - -### Building SparkR -SparkR requires the R package `rJava` to be installed. To install `rJava`, +### Requirements +SparkR requires Scala 2.10 and Spark version >= 0.9.0. SparkR also +requires the R package `rJava` to be installed. To install `rJava`, you can run the following command in R: install.packages("rJava") + +### Package installation To develop SparkR, you can build the scala package and the R package using ./install-dev.sh @@ -39,7 +37,7 @@ Spark master you can launch R and then run library(SparkR) sc <- sparkR.init(master="local") -SparkR also comes with several sample programs in the `examples` directory. +SparkR comes with several sample programs in the `examples` directory. To run one of them, use `./sparkR `. For example: ./sparkR examples/pi.R local[2] From 1877b7c9266cdb01410aeac740b84fec101d1d0b Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 15 Jan 2014 11:53:35 -0800 Subject: [PATCH 109/687] Unset R_TESTS to make tests work with R CMD check Also silence Akka remoting logs and update Makefile to build on log4j changes --- pkg/src/Makefile | 4 +++- pkg/src/src/main/resources/log4j.properties | 3 +++ .../main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 8 +++++++- pkg/{inst => }/tests/run-all.R | 0 4 files changed, 13 insertions(+), 2 deletions(-) rename pkg/{inst => }/tests/run-all.R (100%) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 37724497166ee..53ad2b5dc73af 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -2,12 +2,14 @@ SCALA_VERSION := 2.10 JAR_NAME := sparkr-assembly-0.1.jar TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) SCALA_SOURCE_DIR := src/main/scala/edu/berkeley/cs/amplab/sparkr +RESOURCE_DIR := src/main/resources SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) +RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) all: $(TARGET_NAME) -$(TARGET_NAME): $(SCALA_FILES) +$(TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) ./sbt/sbt assembly cp $(TARGET_NAME) ../inst/ diff --git a/pkg/src/src/main/resources/log4j.properties b/pkg/src/src/main/resources/log4j.properties index 3fcfdff9eb4ab..605b3b8ff0db5 100644 --- a/pkg/src/src/main/resources/log4j.properties +++ b/pkg/src/src/main/resources/log4j.properties @@ -7,5 +7,8 @@ log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: # Change this to set Spark log level log4j.logger.org.apache.spark=WARN +# Silence akka remoting +log4j.logger.Remoting=WARN + # Ignore messages below warning level from Jetty, because it's a bit verbose log4j.logger.org.eclipse.jetty=WARN diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index f113a60efb38c..798d28800721d 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -171,7 +171,13 @@ object RRDD { val rCommand = "Rscript" val rOptions = "--vanilla" val rExecScript = rLibDir + "/SparkR/worker/worker.R" - new ProcessBuilder(List(rCommand, rOptions, rExecScript)) + val pb = new ProcessBuilder(List(rCommand, rOptions, rExecScript)) + // Unset the R_TESTS environment variable for workers. + // This is set by R CMD check as startup.Rs + // (http://svn.r-project.org/R/trunk/src/library/tools/R/testing.R) + // and confuses worker script which tries to load a non-existent file + pb.environment().put("R_TESTS", ""); + pb } /** diff --git a/pkg/inst/tests/run-all.R b/pkg/tests/run-all.R similarity index 100% rename from pkg/inst/tests/run-all.R rename to pkg/tests/run-all.R From cd750d3f3084c43a641aa665a70eba2b2f231100 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 15 Jan 2014 12:02:44 -0800 Subject: [PATCH 110/687] Update run-tests to use new path --- run-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run-tests.sh b/run-tests.sh index 6041b0d8711fa..350ca3611223d 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -2,4 +2,4 @@ FWDIR="$(cd `dirname $0`; pwd)" -$FWDIR/sparkR pkg/inst/tests/run-all.R +$FWDIR/sparkR pkg/tests/run-all.R From f34f4bf45a51d2108784bda12790829a11208c80 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 15 Jan 2014 14:32:04 -0800 Subject: [PATCH 111/687] Check tests for failures and output error msg --- run-tests.sh | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/run-tests.sh b/run-tests.sh index 350ca3611223d..cea32d24cafc6 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -2,4 +2,19 @@ FWDIR="$(cd `dirname $0`; pwd)" -$FWDIR/sparkR pkg/tests/run-all.R +FAILED=0 +rm -f unit-tests.log + +$FWDIR/sparkR pkg/tests/run-all.R 2>&1 | tee -a unit-tests.log +FAILED=$((PIPESTATUS[0]||$FAILED)) + +if [[ $FAILED != 0 ]]; then + echo -en "\033[31m" # Red + echo "Had test failures; see logs." + echo -en "\033[0m" # No color + exit -1 +else + echo -en "\033[32m" # Green + echo "Tests passed." + echo -en "\033[0m" # No color +fi From 91792deba2227ed09d0495aa2f491d24cc4c407c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 16 Jan 2014 21:30:00 -0800 Subject: [PATCH 112/687] Update Spark requirements --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b645fafa906de..cca0f80de6943 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,12 @@ R. ## Installing SparkR ### Requirements -SparkR requires Scala 2.10 and Spark version >= 0.9.0. SparkR also -requires the R package `rJava` to be installed. To install `rJava`, +SparkR requires Scala 2.10 and Spark version >= 0.9.0. Note that as +Spark 0.9.0 has not yet been released the current build uses the latest release +candidate from the Apache staging repositories. You can also build SparkR against a +different Spark version (>= 0.9) by modifying `pkg/src/build.sbt`. + +SparkR also requires the R package `rJava` to be installed. To install `rJava`, you can run the following command in R: install.packages("rJava") From 8899db44cc30411e0ca2896e1b415c02022b908e Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 18 Jan 2014 18:09:00 -0800 Subject: [PATCH 113/687] Update TODO.md --- TODO.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index 8bca92b2e939b..a4c2028233664 100644 --- a/TODO.md +++ b/TODO.md @@ -1,22 +1,27 @@ -## Things to do for SparkR, roughly in order of importance +## Things to do for SparkR -## Unit tests still TODO +## Unit tests 1. utils.R - Check if dependencies are serialized correctly ## Functions to support 1. Similar to `stats.py` in Python, add support for mean, median, stdev etc. 2. Extend `addPackage` so that any given R file can be sourced in the worker before functions are run. +3. Add a `lookup` method to get an element of a pair RDD object by key. +4. `hashCode` support for arbitrary R objects. +5. Support for other storage types like storing RDDs on disk. +6. Extend input formats to support `sequenceFile`. ## Performance improvements -1. Write hash functions in C and use .Call to call into them +1. Write hash functions in C and use .Call to call into them. 2. Use long-running R worker daemons to avoid forking a process each time. 3. Memoizations of frequently queried vals in RDD, such as numPartitions, count etc. 4. Pipelined RRDD to execute multiple functions with one call. +5. Profile serialization overhead and see if there is anything better we can do. ## Feature wishlist 1. Integration with ML Lib to run ML algorithms from R. 2. RRDDs are distributed lists. Extend them to create a distributed data frame. -3. Profile serialization overhead and see if there is anything better we can do. -4. Reduce code duplication between SparkR and PySpark +3. Support accumulators in R. +4. Reduce code duplication between SparkR and PySpark. 5. Add more machine learning examples and some performance benchmarks. From 24978eb8639003d7da3f28d2acd5e367b2100621 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 20 Jan 2014 18:07:09 -0800 Subject: [PATCH 114/687] Update README to use install_github --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cca0f80de6943..33daeaaa41f1b 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,10 @@ To develop SparkR, you can build the scala package and the R package using ./install-dev.sh -If you wish to try out the package directly from github, you can use `install_git` from `devtools` +If you wish to try out the package directly from github, you can use `install_github` from `devtools` library(devtools) - install_git("https://github.com/amplab-extras/SparkR-pkg.git", - subdir="pkg") + install_github("amplab-extras/SparkR-pkg", subdir="pkg") ## Running sparkR If you have cloned and built SparkR, you can start using it by launching the SparkR From 4fcef2219af542b408b32a666e016bbba4e71f31 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 22 Jan 2014 18:28:50 -0800 Subject: [PATCH 115/687] Use one style ($) for accessing names in environments. --- examples/kmeans.R | 2 +- pkg/R/RDD.R | 8 ++++---- pkg/R/context.R | 12 ++++++------ pkg/R/sparkR.R | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/examples/kmeans.R b/examples/kmeans.R index 65c57932a216f..843eca3014db6 100644 --- a/examples/kmeans.R +++ b/examples/kmeans.R @@ -11,7 +11,7 @@ parseVector <- function(line) { closestPoint <- function(p, centers) { bestIndex <- 0 - closest <- .Machine[["double.xmax"]] + closest <- .Machine$double.xmax for (i in 1:length(centers)) { tempDist <- sum((p - centers[[i]]) ** 2) if (tempDist < closest) { diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 1128837af2798..e489ef8136507 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -283,7 +283,7 @@ setMethod("lapplyPartitionsWithIndex", serializedFunc <- serialize("computeFunc", connection = NULL, ascii = TRUE) serializedFuncArr <- .jarray(serializedFunc) - packageNamesArr <- .jarray(serialize(.sparkREnv[[".packages"]], + packageNamesArr <- .jarray(serialize(.sparkREnv$.packages, connection = NULL, ascii = TRUE)) refs <- lapply(ls(.broadcastNames), function(name) { @@ -300,7 +300,7 @@ setMethod("lapplyPartitionsWithIndex", X@serialized, depsBinArr, packageNamesArr, - as.character(.sparkREnv[["libname"]]), + as.character(.sparkREnv$libname), broadcastArr, X@jrdd$classTag()) jrdd <- rddRef$asJavaRDD() @@ -591,7 +591,7 @@ setMethod("partitionBy", ascii = TRUE) serializedHashFuncBytes <- .jarray(serializedHashFunc) - packageNamesArr <- .jarray(serialize(.sparkREnv[[".packages"]], + packageNamesArr <- .jarray(serialize(.sparkREnv$.packages, connection = NULL, ascii = TRUE)) refs <- lapply(ls(.broadcastNames), function(name) { @@ -610,7 +610,7 @@ setMethod("partitionBy", rdd@serialized, depsBinArr, packageNamesArr, - as.character(.sparkREnv[["libname"]]), + as.character(.sparkREnv$libname), broadcastArr, rdd@jrdd$classTag()) diff --git a/pkg/R/context.R b/pkg/R/context.R index cd520dcc05f0d..611013fcc30b8 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -114,21 +114,21 @@ parallelize <- function(sc, coll, numSlices = 1) { includePackage <- function(sc, pkg) { pkg <- as.character(substitute(pkg)) if (exists(".packages", .sparkREnv)) { - packages <- .sparkREnv[[".packages"]] + packages <- .sparkREnv$.packages } else { packages <- list() } packages <- c(packages, pkg) - .sparkREnv[[".packages"]] <- packages + .sparkREnv$.packages <- packages } -#' @title Broadcast a variable to all workers -#' +#' @title Broadcast a variable to all workers +#' #' @description #' Broadcast a read-only variable to the cluster, returning a \code{Broadcast} #' object for reading it in distributed functions. #' -#' @param sc Spark Context to use +#' @param sc Spark Context to use #' @param object Object to be broadcast #' @export #' @examples @@ -139,7 +139,7 @@ includePackage <- function(sc, pkg) { #' # Large Matrix object that we want to broadcast #' randomMat <- matrix(nrow=100, ncol=10, data=rnorm(1000)) #' randomMatBr <- broadcast(sc, randomMat) -#' +#' #' # Use the broadcast variable inside the function #' useBroadcast <- function(x) { #' sum(value(randomMatBr) * x) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index d4e06762896a4..02406c1390031 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -5,8 +5,8 @@ assemblyJarName <- "sparkr-assembly-0.1.jar" sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") - .sparkREnv[["libname"]] <- libname - .sparkREnv[["assemblyJarPath"]] <- assemblyJarPath + .sparkREnv$libname <- libname + .sparkREnv$assemblyJarPath <- assemblyJarPath .jinit(classpath=assemblyJarPath) } @@ -41,7 +41,7 @@ sparkR.init <- function( ".sparkRjsc", .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName, as.character(sparkHome), - as.character(.sparkREnv[["assemblyJarPath"]])), + as.character(.sparkREnv$assemblyJarPath)), envir=.sparkREnv ) From cc5f5c040f3f1c78506f32cb754e41cf0c8cd379 Mon Sep 17 00:00:00 2001 From: Josh Rosen Date: Thu, 16 Jan 2014 20:05:57 -0800 Subject: [PATCH 116/687] Add Travis CI integration (using craigcitro/r-travis) --- .travis.yml | 20 ++++++++++++++++++++ README.md | 2 ++ 2 files changed, 22 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000000..9018eb160a3dc --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +# Based on https://github.com/craigcitro/r-travis + +language: java + +before_install: + - cd pkg + - curl -OL http://raw.github.com/craigcitro/r-travis/master/scripts/travis-tool.sh + - chmod 755 ./travis-tool.sh + - ./travis-tool.sh bootstrap +install: + - sudo R CMD javareconf + - ./travis-tool.sh install_deps + - ./travis-tool.sh install_r_binary Matrix + - cd .. + - ./install-dev.sh +script: + - ./run-tests.sh + +on_failure: + - ./travis-tool.sh dump_logs diff --git a/README.md b/README.md index 33daeaaa41f1b..26b7832f84039 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # R on Spark +[![Build Status](https://travis-ci.org/amplab-extras/SparkR-pkg.png?branch=master)](https://travis-ci.org/amplab-extras/SparkR-pkg) + SparkR is an R package that provides a light-weight frontend to use Spark from R. From 08c29478da499b058e4378d1e864a6f197120d37 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 23 Jan 2014 10:57:35 -0800 Subject: [PATCH 117/687] Move dev install directory to front of libPaths --- sparkR | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sparkR b/sparkR index 2ee5abdcd6299..01ed365fd4b15 100755 --- a/sparkR +++ b/sparkR @@ -13,7 +13,7 @@ if [ $# -gt 0 ]; then cat > /tmp/sparkR.profile << EOF .First <- function() { projecHome <- Sys.getenv("PROJECT_HOME") - .libPaths(c( .libPaths(), paste(projecHome,"/lib", sep=""))) + .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) Sys.setenv(NOAWT=1) } EOF @@ -26,7 +26,7 @@ cat > /tmp/sparkR.profile << EOF .First <- function() { projecHome <- Sys.getenv("PROJECT_HOME") Sys.setenv(NOAWT=1) - .libPaths(c( .libPaths(), paste(projecHome,"/lib", sep=""))) + .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) require(SparkR) sc <- sparkR.init(Sys.getenv("MASTER", unset = "local")) assign("sc", sc, envir=.GlobalEnv) From 4a9ca31307a6139f8144a3f710eee04608dbf0a5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 26 Jan 2014 14:16:28 -0800 Subject: [PATCH 118/687] Use smaller broadcast and plyr instead of Matrix Matrix package takes around 2s to load and slows down unit tests. --- pkg/inst/tests/test_broadcast.R | 4 +-- pkg/inst/tests/test_includePackage.R | 41 ++++++++++++++++------------ 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/pkg/inst/tests/test_broadcast.R b/pkg/inst/tests/test_broadcast.R index 871a10566dff4..f903f7e59664e 100644 --- a/pkg/inst/tests/test_broadcast.R +++ b/pkg/inst/tests/test_broadcast.R @@ -8,7 +8,7 @@ nums <- 1:2 rrdd <- parallelize(sc, nums, 2L) test_that("using broadcast variable", { - randomMat <- matrix(nrow=100, ncol=10, data=rnorm(1000)) + randomMat <- matrix(nrow=10, ncol=10, data=rnorm(100)) randomMatBr <- broadcast(sc, randomMat) useBroadcast <- function(x) { @@ -20,7 +20,7 @@ test_that("using broadcast variable", { }) test_that("without using broadcast variable", { - randomMat <- matrix(nrow=100, ncol=10, data=rnorm(1000)) + randomMat <- matrix(nrow=10, ncol=10, data=rnorm(100)) useBroadcast <- function(x) { sum(randomMat * x) diff --git a/pkg/inst/tests/test_includePackage.R b/pkg/inst/tests/test_includePackage.R index 35125f94b9cbf..b09c0971d49c9 100644 --- a/pkg/inst/tests/test_includePackage.R +++ b/pkg/inst/tests/test_includePackage.R @@ -4,32 +4,37 @@ context("include R packages") sc <- sparkR.init() # Partitioned data -nums <- 1:3 -rdd <- parallelize(sc, nums, 3L) +nums <- 1:2 +rdd <- parallelize(sc, nums, 2L) test_that("include inside function", { - # Only run the test if Matrix is installed. - if ("Matrix" %in% rownames(installed.packages())) { - suppressPackageStartupMessages(library(Matrix)) - generateSparse <- function(x) { - suppressPackageStartupMessages(library(Matrix)) - sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) + # Only run the test if plyr is installed. + if ("plyr" %in% rownames(installed.packages())) { + suppressPackageStartupMessages(library(plyr)) + generateData <- function(x) { + suppressPackageStartupMessages(library(plyr)) + attach(airquality) + result <- transform(Ozone, logOzone = log(Ozone)) + result } - sparseMat <- lapplyPartition(rdd, generateSparse) - actual <- collect(sparseMat) + data <- lapplyPartition(rdd, generateData) + actual <- collect(data) } }) test_that("use include package", { - # Only run the test if Matrix is installed. - if ("Matrix" %in% rownames(installed.packages())) { - suppressPackageStartupMessages(library(Matrix)) - generateSparse <- function(x) { - sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) + # Only run the test if plyr is installed. + if ("plyr" %in% rownames(installed.packages())) { + suppressPackageStartupMessages(library(plyr)) + generateData <- function(x) { + attach(airquality) + result <- transform(Ozone, logOzone = log(Ozone)) + result } - includePackage(sc, Matrix) - sparseMat <- lapplyPartition(rdd, generateSparse) - actual <- collect(sparseMat) + + includePackage(sc, plyr) + data <- lapplyPartition(rdd, generateData) + actual <- collect(data) } }) From e0557a81ed05faa4aab1bf1883aaaf0a15a2b460 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 26 Jan 2014 14:18:49 -0800 Subject: [PATCH 119/687] Update travis to install plyr --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9018eb160a3dc..fe54268f0faef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ before_install: install: - sudo R CMD javareconf - ./travis-tool.sh install_deps - - ./travis-tool.sh install_r_binary Matrix + - ./travis-tool.sh install_r_binary plyr - cd .. - ./install-dev.sh script: From 4cb209ca96680bf1e5bcbd5469b6bbb2e769cb8a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 27 Jan 2014 16:34:40 -0800 Subject: [PATCH 120/687] Search rLibDir in worker before libPaths This ensures we pick up the SparkR intended and not an older version installed on the same machine --- pkg/inst/worker/worker.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 60516045ce665..5a2f5a9112c7a 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -18,7 +18,7 @@ outputCon <- file(outputFileName, open="wb") # TODO: Figure out if we can avoid this by not loading any objects that require # SparkR namespace rLibDir <- readLines(inputCon, n = 1) -.libPaths(c(.libPaths(), rLibDir)) +.libPaths(c(rLibDir, .libPaths())) suppressPackageStartupMessages(library(SparkR)) From bfb8e26799517723665ac696ecddcea84aa1a30f Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sun, 19 Jan 2014 21:08:27 +0800 Subject: [PATCH 121/687] Add isCached field (inside an env) and unpersist(). --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 31de74b58442b..38264910bcd6b 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -20,6 +20,7 @@ exportMethods( "sampleRDD", "take", "takeSample", + "unpersist", "value" ) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e489ef8136507..4a4b0aad99c3c 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -11,7 +11,23 @@ #' @param jrdd Java object reference to the backing JavaRDD #' @param serialized TRUE if the JavaRDD contains serialized R objects #' @export -setClass("RDD", slots = list(jrdd = "jobjRef", serialized = "logical")) +setClass("RDD", + slots = list(env = "environment", + jrdd = "jobjRef", + serialized = "logical")) + +setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached) { + # We use an environment to store mutable states inside an RDD object (currently only + # `isCached'). Note that R's call-by-value semantics makes modifying slots + # inside an object (passed as an argument into a function, such as + # cache()) difficult. + .Object@env <- new.env() + .Object@env$isCached <- isCached + + .Object@jrdd <- jrdd + .Object@serialized <- serialized + .Object +}) setValidity("RDD", function(object) { @@ -26,8 +42,8 @@ setValidity("RDD", #' @rdname RDD #' @export -RDD <- function(jrdd, serialized = TRUE) { - new("RDD", jrdd = jrdd, serialized = serialized) +RDD <- function(jrdd, serialized = TRUE, isCached = FALSE) { + new("RDD", jrdd, serialized, isCached) } #' Persist an RDD @@ -51,6 +67,34 @@ setMethod("cache", signature(rdd = "RDD"), function(rdd) { .jcall(rdd@jrdd, "Lorg/apache/spark/api/java/JavaRDD;", "cache") + rdd@env$isCached <- TRUE + rdd + }) + + +#' Unpersist an RDD +#' +#' Mark the RDD as non-persistent, and remove all blocks for it from memory and disk. +#' +#' @param rdd The RDD to unpersist +#' @rdname unpersist-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' cache(rdd) # rdd@env$isCached == TRUE +#' unpersist(rdd) # rdd@env$isCached == FALSE +#'} +setGeneric("unpersist", function(rdd) { standardGeneric("unpersist") }) + +#' @rdname unpersist-methods +#' @aliases unpersist,RDD-method +setMethod("unpersist", + signature(rdd = "RDD"), + function(rdd) { + .jcall(rdd@jrdd, "Lorg/apache/spark/api/java/JavaRDD;", "unpersist") + rdd@env$isCached <- FALSE rdd }) From dac07953ce674b44621165d695949da123924c53 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sun, 19 Jan 2014 21:49:38 +0800 Subject: [PATCH 122/687] Minor inline comment style fix. --- pkg/R/RDD.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 4a4b0aad99c3c..5e1767bfe9304 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -17,10 +17,10 @@ setClass("RDD", serialized = "logical")) setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached) { - # We use an environment to store mutable states inside an RDD object (currently only - # `isCached'). Note that R's call-by-value semantics makes modifying slots - # inside an object (passed as an argument into a function, such as - # cache()) difficult. + # We use an environment to store mutable states inside an RDD object (currently + # only `isCached'). Note that R's call-by-value semantics makes modifying slots + # inside an object (passed as an argument into a function, such as cache()) + # difficult. .Object@env <- new.env() .Object@env$isCached <- isCached From a4c431edc65ef58a1df63dd1efe157448ec9b40e Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sun, 19 Jan 2014 22:08:05 +0800 Subject: [PATCH 123/687] Add `isCheckpointed` field and checkpoint(). --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 39 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 38264910bcd6b..b1d1a57543fa3 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -3,6 +3,7 @@ exportClasses("RDD") exportClasses("Broadcast") exportMethods( "cache", + "checkpoint", "collect", "collectPartition", "combineByKey", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 5e1767bfe9304..a2992857385c7 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -8,6 +8,7 @@ #' @rdname RDD #' @seealso parallelize, textFile #' +#' @param env An R environment that stores bookkeeping states of the RDD #' @param jrdd Java object reference to the backing JavaRDD #' @param serialized TRUE if the JavaRDD contains serialized R objects #' @export @@ -16,13 +17,14 @@ setClass("RDD", jrdd = "jobjRef", serialized = "logical")) -setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached) { +setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached, isCheckpointed) { # We use an environment to store mutable states inside an RDD object (currently # only `isCached'). Note that R's call-by-value semantics makes modifying slots # inside an object (passed as an argument into a function, such as cache()) # difficult. .Object@env <- new.env() .Object@env$isCached <- isCached + .Object@env$isCheckpointed <- isCheckpointed .Object@jrdd <- jrdd .Object@serialized <- serialized @@ -42,8 +44,8 @@ setValidity("RDD", #' @rdname RDD #' @export -RDD <- function(jrdd, serialized = TRUE, isCached = FALSE) { - new("RDD", jrdd, serialized, isCached) +RDD <- function(jrdd, serialized = TRUE, isCached = FALSE, isCheckpointed = FALSE) { + new("RDD", jrdd, serialized, isCached, isCheckpointed) } #' Persist an RDD @@ -99,6 +101,37 @@ setMethod("unpersist", }) +#' Checkpoint an RDD +#' +#' Mark this RDD for checkpointing. It will be saved to a file inside the +#' checkpoint directory set with SparkContext.setCheckpointDir() and all +#' references to its parent RDDs will be removed. This function must be called +#' before any job has been executed on this RDD. It is strongly recommended that +#' this RDD is persisted in memory, otherwise saving it on a file will require +#' recomputation. +#' +#' @param rdd The RDD to checkpoint +#' @rdname checkpoint-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' checkpoint(rdd) +#'} +setGeneric("checkpoint", function(rdd) { standardGeneric("checkpoint") }) + +#' @rdname checkpoint-methods +#' @aliases checkpoint,RDD-method +setMethod("checkpoint", + signature(rdd = "RDD"), + function(rdd) { + .jcall(rdd@jrdd$rdd(), "V", "checkpoint") + rdd@env$isCheckpointed <- TRUE + rdd + }) + + #' Collect elements of an RDD #' #' @description From 0b9e8bba22ef89ca8ccda3d4ffe894c190d1b0a7 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 17 Jan 2014 12:56:02 +0800 Subject: [PATCH 124/687] First cut at PipelinedRDD. - Add constructor & getJRDD logic - Use PipelinedRDD in lapply and lapplyPartitionsWithIndex --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 178 ++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 131 insertions(+), 48 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index b1d1a57543fa3..1f6310badc2b8 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -1,5 +1,6 @@ #exportPattern("^[[:alpha:]]+") exportClasses("RDD") +exportClasses("PipelinedRDD") exportClasses("Broadcast") exportMethods( "cache", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index a2992857385c7..410c89953f80c 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -17,7 +17,15 @@ setClass("RDD", jrdd = "jobjRef", serialized = "logical")) -setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached, isCheckpointed) { +setClass("PipelinedRDD", + slots = list(prev = "RDD", + func = "function", + prev_jrdd = "jobjRef"), + contains = "RDD") + + +setMethod("initialize", "RDD", function(.Object, jrdd, serialized, + isCached, isCheckpointed) { # We use an environment to store mutable states inside an RDD object (currently # only `isCached'). Note that R's call-by-value semantics makes modifying slots # inside an object (passed as an argument into a function, such as cache()) @@ -31,9 +39,101 @@ setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached, isC .Object }) +setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) { + .Object@env <- new.env() + .Object@env$isCached <- FALSE + .Object@env$isCheckpointed <- FALSE + .Object@env$jrdd_val <- jrdd_val + .Object@env$serialized <- if (class(prev) == "RDD") prev@serialized + else prev@env$serialized + .Object@prev <- prev + + isPipelinable <- function(rdd) { + e <- rdd@env + !(e$isCached || e$isCheckpointed) + } + + if (class(prev) != "PipelinedRDD" || !isPipelinable(prev)) { + # This transformation is the first in its stage: + .Object@func <- func + .Object@prev_jrdd <- getJRDD(prev) + } else { + pipelinedFunc <- function(split, iterator) { + func(split, prev@func(split, iterator)) + } + .Object@func <- pipelinedFunc + .Object@prev_jrdd <- prev@prev_jrdd # maintain the pipeline + } + + .Object +}) + + +#' @rdname RDD +#' @export +RDD <- function(jrdd, serialized = TRUE, isCached = FALSE, + isCheckpointed = FALSE) { + new("RDD", jrdd, serialized, isCached, isCheckpointed) +} + +#' @rdname PipelinedRDD +#' @export +PipelinedRDD <- function(prev, func) { + new("PipelinedRDD", prev, func, NULL) +} + + +# The jrdd accessor function. +setGeneric("getJRDD", function(rdd) { standardGeneric("getJRDD") }) +setMethod("getJRDD", signature(rdd = "RDD"), function(rdd) rdd@jrdd ) +setMethod("getJRDD", signature(rdd = "PipelinedRDD"), + function(rdd) { + if (!is.null(rdd@env$jrdd_val)) { + return(rdd@env$jrdd_val) + } + + # TODO: This is to handle anonymous functions. Find out a + # better way to do this. + computeFunc <- function(split, part) { + rdd@func(split, part) + } + serializedFunc <- serialize("computeFunc", connection = NULL, + ascii = TRUE) + serializedFuncArr <- .jarray(serializedFunc) + + packageNamesArr <- .jarray(serialize(.sparkREnv[[".packages"]], + connection = NULL, + ascii = TRUE)) + + refs <- lapply(ls(.broadcastNames), + function(name) { get(name, .broadcastNames) }) + broadcastArr <- .jarray(refs, + "org/apache/spark/broadcast/Broadcast") + + depsBin <- getDependencies(computeFunc) + depsBinArr <- .jarray(depsBin) + + prev_jrdd <- rdd@prev_jrdd + + rddRef <- new(J("edu.berkeley.cs.amplab.sparkr.RRDD"), + prev_jrdd$rdd(), + serializedFuncArr, + rdd@env$serialized, + depsBinArr, + packageNamesArr, + as.character(.sparkREnv[["libname"]]), + broadcastArr, + prev_jrdd$classTag()) + rdd@env$serialized <- TRUE + rdd@env$jrdd_val <- rddRef$asJavaRDD() + rdd@env$jrdd_val + }) + + setValidity("RDD", function(object) { - cls <- object@jrdd$getClass() + jrdd <- getJRDD(object) + cls <- jrdd$getClass() className <- cls$getName() if (grep("spark.api.java.*RDD*", className) == 1) { TRUE @@ -42,11 +142,9 @@ setValidity("RDD", } }) -#' @rdname RDD -#' @export -RDD <- function(jrdd, serialized = TRUE, isCached = FALSE, isCheckpointed = FALSE) { - new("RDD", jrdd, serialized, isCached, isCheckpointed) -} + +############ Actions and Transformations ############ + #' Persist an RDD #' @@ -68,7 +166,7 @@ setGeneric("cache", function(rdd) { standardGeneric("cache") }) setMethod("cache", signature(rdd = "RDD"), function(rdd) { - .jcall(rdd@jrdd, "Lorg/apache/spark/api/java/JavaRDD;", "cache") + .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", "cache") rdd@env$isCached <- TRUE rdd }) @@ -76,7 +174,8 @@ setMethod("cache", #' Unpersist an RDD #' -#' Mark the RDD as non-persistent, and remove all blocks for it from memory and disk. +#' Mark the RDD as non-persistent, and remove all blocks for it from memory and +#' disk. #' #' @param rdd The RDD to unpersist #' @rdname unpersist-methods @@ -95,7 +194,8 @@ setGeneric("unpersist", function(rdd) { standardGeneric("unpersist") }) setMethod("unpersist", signature(rdd = "RDD"), function(rdd) { - .jcall(rdd@jrdd, "Lorg/apache/spark/api/java/JavaRDD;", "unpersist") + .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", + "unpersist") rdd@env$isCached <- FALSE rdd }) @@ -126,7 +226,8 @@ setGeneric("checkpoint", function(rdd) { standardGeneric("checkpoint") }) setMethod("checkpoint", signature(rdd = "RDD"), function(rdd) { - .jcall(rdd@jrdd$rdd(), "V", "checkpoint") + jrdd <- getJRDD(rdd) + .jcall(jrdd$rdd(), "V", "checkpoint") rdd@env$isCheckpointed <- TRUE rdd }) @@ -158,7 +259,7 @@ setMethod("collect", signature(rdd = "RDD"), function(rdd, flatten = TRUE) { # Assumes a pairwise RDD is backed by a JavaPairRDD. - collected <- .jcall(rdd@jrdd, "Ljava/util/List;", "collect") + collected <- .jcall(getJRDD(rdd), "Ljava/util/List;", "collect") convertJListToRList(collected, flatten) }) @@ -178,7 +279,7 @@ setGeneric("collectPartition", setMethod("collectPartition", signature(rdd = "RDD", partitionId = "integer"), function(rdd, partitionId) { - jPartitionsList <- .jcall(rdd@jrdd, + jPartitionsList <- .jcall(getJRDD(rdd), "[Ljava/util/List;", "collectPartitions", .jarray(as.integer(partitionId))) @@ -246,11 +347,17 @@ setMethod("length", setMethod("lapply", signature(X = "RDD", FUN = "function"), function(X, FUN) { - partitionFunc <- function(part) { - lapply(part, FUN) + # TODO: An iterator here is really a list; problematic? + func <- function(split, iterator) { + lapply(iterator, FUN) } + PipelinedRDD(X, func) - lapplyPartition(X, partitionFunc) + # partitionFunc <- function(part) { + # lapply(part, FUN) + # } + + # lapplyPartition(X, partitionFunc) }) #' @rdname lapply @@ -352,36 +459,10 @@ setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { setMethod("lapplyPartitionsWithIndex", signature(X = "RDD", FUN = "function"), function(X, FUN) { - # TODO: This is to handle anonymous functions. Find out a - # better way to do this. - computeFunc <- function(split, part) { + closureCapturingFunc <- function(split, part) { FUN(split, part) } - serializedFunc <- serialize("computeFunc", - connection = NULL, ascii = TRUE) - serializedFuncArr <- .jarray(serializedFunc) - packageNamesArr <- .jarray(serialize(.sparkREnv$.packages, - connection = NULL, - ascii = TRUE)) - refs <- lapply(ls(.broadcastNames), function(name) { - get(name, .broadcastNames) }) - broadcastArr <- .jarray(refs, - "org/apache/spark/broadcast/Broadcast") - - - depsBin <- getDependencies(computeFunc) - depsBinArr <- .jarray(depsBin) - rddRef <- new(J("edu.berkeley.cs.amplab.sparkr.RRDD"), - X@jrdd$rdd(), - serializedFuncArr, - X@serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv$libname), - broadcastArr, - X@jrdd$classTag()) - jrdd <- rddRef$asJavaRDD() - RDD(jrdd, TRUE) + PipelinedRDD(X, closureCapturingFunc) }) @@ -456,7 +537,7 @@ setMethod("take", function(rdd, num) { resList <- list() index <- -1 - partitions <- .jcall(rdd@jrdd, "Ljava/util/List;", "splits") + partitions <- .jcall(getJRDD(rdd), "Ljava/util/List;", "splits") numPartitions <- .jcall(partitions, "I", "size") # TODO(shivaram): Collect more than one partition based on size # estimates similar to the scala version of `take`. @@ -467,7 +548,7 @@ setMethod("take", break # a JList of byte arrays - partitionArr <- .jcall(rdd@jrdd, + partitionArr <- .jcall(getJRDD(rdd), "[Ljava/util/List;", "collectPartitions", .jarray(as.integer(index))) @@ -675,13 +756,14 @@ setMethod("partitionBy", get(name, .broadcastNames) }) broadcastArr <- .jarray(refs, "org/apache/spark/broadcast/Broadcast") + jrdd <- getJRDD(rdd) # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). pairwiseRRDD <- new(J("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD"), - rdd@jrdd$rdd(), + jrdd$rdd(), as.integer(numPartitions), serializedHashFuncBytes, rdd@serialized, @@ -689,7 +771,7 @@ setMethod("partitionBy", packageNamesArr, as.character(.sparkREnv$libname), broadcastArr, - rdd@jrdd$classTag()) + jrdd$classTag()) # Create a corresponding partitioner. rPartitioner <- new(J("org.apache.spark.HashPartitioner"), From 5650ad74c01d7f7d9c693474e695c77b7dbcb596 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 28 Jan 2014 22:59:08 -0800 Subject: [PATCH 125/687] Put serialized field inside env for both RDD and PipelinedRDD. --- pkg/R/RDD.R | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 410c89953f80c..d4bb36ea874c7 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -14,8 +14,7 @@ #' @export setClass("RDD", slots = list(env = "environment", - jrdd = "jobjRef", - serialized = "logical")) + jrdd = "jobjRef")) setClass("PipelinedRDD", slots = list(prev = "RDD", @@ -33,9 +32,9 @@ setMethod("initialize", "RDD", function(.Object, jrdd, serialized, .Object@env <- new.env() .Object@env$isCached <- isCached .Object@env$isCheckpointed <- isCheckpointed + .Object@env$serialized <- serialized .Object@jrdd <- jrdd - .Object@serialized <- serialized .Object }) @@ -44,8 +43,7 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@env$isCached <- FALSE .Object@env$isCheckpointed <- FALSE .Object@env$jrdd_val <- jrdd_val - .Object@env$serialized <- if (class(prev) == "RDD") prev@serialized - else prev@env$serialized + .Object@env$serialized <- prev@env$serialized .Object@prev <- prev isPipelinable <- function(rdd) { @@ -347,17 +345,10 @@ setMethod("length", setMethod("lapply", signature(X = "RDD", FUN = "function"), function(X, FUN) { - # TODO: An iterator here is really a list; problematic? func <- function(split, iterator) { lapply(iterator, FUN) } PipelinedRDD(X, func) - - # partitionFunc <- function(part) { - # lapply(part, FUN) - # } - - # lapplyPartition(X, partitionFunc) }) #' @rdname lapply @@ -766,7 +757,7 @@ setMethod("partitionBy", jrdd$rdd(), as.integer(numPartitions), serializedHashFuncBytes, - rdd@serialized, + rdd@env$serialized, depsBinArr, packageNamesArr, as.character(.sparkREnv$libname), From 334eace3ad79038b046d49a6eb1a584774a349cf Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 29 Jan 2014 00:35:58 -0800 Subject: [PATCH 126/687] Add a multi-transformation test to benchmark on pipelining. --- pkg/inst/tests/test_rdd.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index eabf40370b068..a56d0b236ee8d 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -24,6 +24,17 @@ test_that("lapplyPartition on RDD", { expect_equal(actual, list(15, 40)) }) +test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { + rdd2 <- rdd + for (i in 1:12) + rdd2 <- lapplyPartitionsWithIndex( + rdd2, function(split, part) { + part <- as.list(unlist(part) * split + i) + }) + rdd2 <- lapply(rdd2, function(x) x + x) + collect(rdd2) +}) + test_that("reduce on RDD", { sum <- reduce(rdd, "+") expect_equal(sum, 55) From e2714b878c91d672a30b8ecc29c430ae577025b2 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 3 Feb 2014 01:51:59 -0800 Subject: [PATCH 127/687] Remove Apache Staging repo and update README --- README.md | 5 +++++ pkg/src/build.sbt | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 26b7832f84039..b30476fc8f954 100644 --- a/README.md +++ b/README.md @@ -50,3 +50,8 @@ To run one of them, use `./sparkR `. For example: You can also run the unit-tests for SparkR by running ./run-tests.sh + +## Running on EC2 + +Instructions for running SparkR on EC2 can be found in the +[SparkR wiki](https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-on-EC2). diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index c0c5d943b6fcb..13af25bb19234 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -31,7 +31,6 @@ resolvers ++= Seq( "Typesafe" at "http://repo.typesafe.com/typesafe/releases", "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", "Spray" at "http://repo.spray.cc", - "Apache Staging" at "https://repository.apache.org/content/repositories/staging/" ) mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => From d4468a964d91eab37a304ce9cddb28deac1d9cc2 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 3 Feb 2014 09:27:40 -0800 Subject: [PATCH 128/687] Remove trailing comma --- pkg/src/build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 13af25bb19234..fa7c67958a031 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -30,7 +30,7 @@ libraryDependencies ++= Seq( resolvers ++= Seq( "Typesafe" at "http://repo.typesafe.com/typesafe/releases", "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", - "Spray" at "http://repo.spray.cc", + "Spray" at "http://repo.spray.cc" ) mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => From f8bc8a927a1b34d649d1abfffb3a6f23d0b5da1d Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 5 Feb 2014 00:17:07 -0800 Subject: [PATCH 129/687] Minor edits per Shivaram's comments. --- pkg/R/RDD.R | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index d4bb36ea874c7..b5767c7e5a327 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -25,10 +25,11 @@ setClass("PipelinedRDD", setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached, isCheckpointed) { - # We use an environment to store mutable states inside an RDD object (currently - # only `isCached'). Note that R's call-by-value semantics makes modifying slots - # inside an object (passed as an argument into a function, such as cache()) - # difficult. + # We use an environment to store mutable states inside an RDD object. + # Note that R's call-by-value semantics makes modifying slots inside an + # object (passed as an argument into a function, such as cache()) difficult: + # i.e. one needs to make a copy of the RDD object and sets the new slot value + # there. .Object@env <- new.env() .Object@env$isCached <- isCached .Object@env$isCheckpointed <- isCheckpointed @@ -122,7 +123,6 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), as.character(.sparkREnv[["libname"]]), broadcastArr, prev_jrdd$classTag()) - rdd@env$serialized <- TRUE rdd@env$jrdd_val <- rddRef$asJavaRDD() rdd@env$jrdd_val }) @@ -528,7 +528,8 @@ setMethod("take", function(rdd, num) { resList <- list() index <- -1 - partitions <- .jcall(getJRDD(rdd), "Ljava/util/List;", "splits") + jrdd <- getJRDD(rdd) + partitions <- .jcall(jrdd, "Ljava/util/List;", "splits") numPartitions <- .jcall(partitions, "I", "size") # TODO(shivaram): Collect more than one partition based on size # estimates similar to the scala version of `take`. @@ -539,7 +540,7 @@ setMethod("take", break # a JList of byte arrays - partitionArr <- .jcall(getJRDD(rdd), + partitionArr <- .jcall(jrdd, "[Ljava/util/List;", "collectPartitions", .jarray(as.integer(index))) From d9cb95c807cc0a4b74bbf5119aa2f545126ee3ef Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Mon, 20 Jan 2014 22:36:50 -0800 Subject: [PATCH 130/687] Add setCheckpointDir() to context.R; comment fix. Conflicts: pkg/R/RDD.R --- pkg/NAMESPACE | 10 +++++++++- pkg/R/RDD.R | 11 ++++++----- pkg/R/context.R | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 1f6310badc2b8..910be3095f2a3 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -27,5 +27,13 @@ exportMethods( ) # S3 methods exported -export("textFile", "parallelize", "hashCode", "includePackage", "broadcast", "setBroadcastValue") +export( + "textFile", + "parallelize", + "hashCode", + "includePackage", + "broadcast", + "setBroadcastValue", + "setCheckpointDir" + ) export("sparkR.init") diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index b5767c7e5a327..b7cca4be65bb1 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -30,6 +30,7 @@ setMethod("initialize", "RDD", function(.Object, jrdd, serialized, # object (passed as an argument into a function, such as cache()) difficult: # i.e. one needs to make a copy of the RDD object and sets the new slot value # there. + .Object@env <- new.env() .Object@env$isCached <- isCached .Object@env$isCheckpointed <- isCheckpointed @@ -202,11 +203,10 @@ setMethod("unpersist", #' Checkpoint an RDD #' #' Mark this RDD for checkpointing. It will be saved to a file inside the -#' checkpoint directory set with SparkContext.setCheckpointDir() and all -#' references to its parent RDDs will be removed. This function must be called -#' before any job has been executed on this RDD. It is strongly recommended that -#' this RDD is persisted in memory, otherwise saving it on a file will require -#' recomputation. +#' checkpoint directory set with setCheckpointDir() and all references to its +#' parent RDDs will be removed. This function must be called before any job has +#' been executed on this RDD. It is strongly recommended that this RDD is +#' persisted in memory, otherwise saving it on a file will require recomputation. #' #' @param rdd The RDD to checkpoint #' @rdname checkpoint-methods @@ -214,6 +214,7 @@ setMethod("unpersist", #' @examples #'\dontrun{ #' sc <- sparkR.init() +#' setCheckpointDir(sc, "checkpoints") #' rdd <- parallelize(sc, 1:10, 2L) #' checkpoint(rdd) #'} diff --git a/pkg/R/context.R b/pkg/R/context.R index 611013fcc30b8..6a1379492d304 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -157,3 +157,23 @@ broadcast <- function(sc, object) { id <- as.character(.jsimplify(.jcall(jBroadcast, "J", "id"))) Broadcast(id, object, jBroadcast, objName) } + +#' @title Set the checkpoint directory +#' +#' Set the directory under which RDDs are going to be checkpointed. The +#' directory must be a HDFS path if running on a cluster. +#' +#' @param sc Spark Context to use +#' @param dirName Directory path +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' setCheckpointDir(sc, "checkpoints") +#' rdd <- parallelize(sc, 1:2, 2L) +#' checkpoint(rdd) +#'} +setCheckpointDir <- function(sc, dirName) { + ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") + .jcall(ssc, "V", "setCheckpointDir", dirName) +} From d484c2acc13620c9beb8eddf5551979ecdaf181f Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 5 Feb 2014 21:22:30 -0800 Subject: [PATCH 131/687] Add tests for actions on PipelinedRDD. --- pkg/inst/tests/test_rdd.R | 32 ++++++++++++++++++++++++++++++++ pkg/inst/tests/test_textFile.R | 14 ++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index a56d0b236ee8d..868424b4c9ed5 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -35,6 +35,38 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { collect(rdd2) }) +test_that("PipelinedRDD support actions: cache(), unpersist(), checkpoint()", { + # RDD + rdd2 <- rdd + # PipelinedRDD + rdd2 <- lapplyPartitionsWithIndex( + rdd2, + function(split, part) { + part <- as.list(unlist(part) * split) + }) + + cache(rdd2) + expect_true(rdd2@env$isCached) + rdd2 <- lapply(rdd2, function(x) x) + expect_false(rdd2@env$isCached) + + unpersist(rdd2) + expect_false(rdd2@env$isCached) + + setCheckpointDir(sc, "checkpoints") + checkpoint(rdd2) + expect_true(rdd2@env$isCheckpointed) + + rdd2 <- lapply(rdd2, function(x) x) + expect_false(rdd2@env$isCached) + expect_false(rdd2@env$isCheckpointed) + + # make sure the data is collectable + collect(rdd2) + + unlink("checkpoints") +}) + test_that("reduce on RDD", { sum <- reduce(rdd, "+") expect_equal(sum, 55) diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 409caa9a8b544..6a353243d04c2 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -26,3 +26,17 @@ test_that("textFile() followed by a collect() returns the same content", { unlink(fileName) }) + +test_that("several transformations on RDD created by textFile()", { + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + rdd <- textFile(sc, fileName) # RDD + for (i in 1:10) + # PipelinedRDD initially created from RDD + rdd <- lapply(rdd, function(x) paste(x, x)) + collect(rdd) + + unlink(fileName) +}) + From 1398d9fcd69593628bf3229ad6429525058dcf86 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 14 Feb 2014 17:23:16 -0800 Subject: [PATCH 132/687] Add linear_solver_mnist to examples/. --- examples/linear_solver_mnist.R | 96 ++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 examples/linear_solver_mnist.R diff --git a/examples/linear_solver_mnist.R b/examples/linear_solver_mnist.R new file mode 100644 index 0000000000000..2b77aad99ea05 --- /dev/null +++ b/examples/linear_solver_mnist.R @@ -0,0 +1,96 @@ +# Instructions: https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-Example:-Digit-Recognition-on-EC2 + +library(SparkR, lib.loc="./lib") +library(Matrix) + +args <- commandArgs(trailing = TRUE) +if (length(args) < 1) { + print("Usage: linear_solver []") + q("no") +} + +# Spark master url +master <- args[[1]] +# number of random features; default to 1100 +D <- ifelse(length(args) > 1, as.integer(args[[2]]), 1100) +# number of partitions for training dataset +trainParts <- 12 +# dimension of digits +d <- 784 +# number of test examples +NTrain <- 60000 +# number of training examples +NTest <- 10000 +# scale of features +gamma <- 4e-4 + +sc <- sparkR.init(master, "SparkR-LinearSolver") + +# You can also use HDFS path to speed things up: +# hdfs:///train-mnist-dense-with-labels.data +file <- textFile(sc, "/data/train-mnist-dense-with-labels.data", trainParts) + +W <- gamma * matrix(nrow=D, ncol=d, data=rnorm(D*d)) +b <- 2 * pi * matrix(nrow=D, ncol=1, data=runif(D)) +broadcastW <- broadcast(sc, W) +broadcastB <- broadcast(sc, b) + +includePackage(sc, Matrix) +numericLines <- lapplyPartitionsWithIndex(file, + function(split, part) { + matList <- sapply(part, function(line) { + as.numeric(strsplit(line, ",", fixed=TRUE)[[1]]) + }, simplify=FALSE) + mat <- Matrix(ncol=d+1, data=unlist(matList, F, F), + sparse=T, byrow=T) + mat + }) + +featureLabels <- cache(lapplyPartition( + numericLines, + function(part) { + label <- part[,1] + mat <- part[,-1] + ones <- rep(1, nrow(mat)) + features <- cos( + mat %*% t(value(broadcastW)) + (matrix(ncol=1, data=ones) %*% t(value(broadcastB)))) + onesMat <- Matrix(ones) + featuresPlus <- cBind(features, onesMat) + labels <- matrix(nrow=nrow(mat), ncol=10, data=-1) + for (i in 1:nrow(mat)) { + labels[i, label[i]] <- 1 + } + list(label=labels, features=featuresPlus) + })) + +FTF <- Reduce("+", collect(lapplyPartition(featureLabels, + function(part) { + t(part$features) %*% part$features + }), flatten=F)) + +FTY <- Reduce("+", collect(lapplyPartition(featureLabels, + function(part) { + t(part$features) %*% part$label + }), flatten=F)) + +# solve for the coefficient matrix +C <- solve(FTF, FTY) + +test <- Matrix(as.matrix(read.csv("/data/test-mnist-dense-with-labels.data", + header=F), sparse=T)) +testData <- test[,-1] +testLabels <- matrix(ncol=1, test[,1]) + +err <- 0 + +# contstruct the feature maps for all examples from this digit +featuresTest <- cos(testData %*% t(value(broadcastW)) + + (matrix(ncol=1, data=rep(1, NTest)) %*% t(value(broadcastB)))) +featuresTest <- cBind(featuresTest, Matrix(rep(1, NTest))) + +# extract the one vs. all assignment +results <- featuresTest %*% C +labelsGot <- apply(results, 1, which.max) +err <- sum(testLabels != labelsGot) / nrow(testLabels) + +cat("\nFinished running. The error rate is: ", err, ".\n") From ed4559acac25995aa299b54ef32ff383f67ba1fc Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 15 Feb 2014 16:11:14 -0800 Subject: [PATCH 133/687] Add support for passing Spark environment vars This change creates a new `createSparkContext` method in RRDD as we can't pass Map through rJava. Also use SPARK_MEM in local mode to increase heap size and update the README with some examples. --- README.md | 15 +++++++++ pkg/R/sparkR.R | 31 ++++++++++++++----- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 20 +++++++++++- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b30476fc8f954..846596a608d6c 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,21 @@ Spark master you can launch R and then run library(SparkR) sc <- sparkR.init(master="local") +To increase the memory used by the driver you can export the SPARK\_MEM +environment variable. For example to use 1g, you can run + + SPARK_MEM=1g ./sparkR + +In a cluster settting to set the amount of memory used by the executors you can +pass the variable `spark.executor.memory` to the SparkContext constructor. + + library(SparkR) + sc <- sparkR.init(master="spark://:7077", + sparkEnvir=list(spark.executor.memory="1g")) + + +## Examples, Unit tests + SparkR comes with several sample programs in the `examples` directory. To run one of them, use `./sparkR `. For example: diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 02406c1390031..7d79c0880f372 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -5,9 +5,11 @@ assemblyJarName <- "sparkr-assembly-0.1.jar" sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") + + sparkMem <- Sys.getenv("SPARK_MEM", "512m") .sparkREnv$libname <- libname .sparkREnv$assemblyJarPath <- assemblyJarPath - .jinit(classpath=assemblyJarPath) + .jinit(classpath=assemblyJarPath, parameters=paste("-Xmx", sparkMem, sep="")) } #' Initialize a new Spark Context. @@ -17,16 +19,20 @@ sparkR.onLoad <- function(libname, pkgname) { #' @param master The Spark master URL. #' @param appName Application name to register with cluster manager #' @param sparkHome Spark Home directory +#' @param sparkEnvir Named list of environment variables to set on worker nodes. #' @export #' @examples #'\dontrun{ -#' sparkR.init("local[2]", "SparkR", "/home/spark") +#' sc <- sparkR.init("local[2]", "SparkR", "/home/spark") +#' sc <- sparkR.init("local[2]", "SparkR", "/home/spark", +#' list(spark.executor.memory="1g")) #'} sparkR.init <- function( master = "local", appName = "SparkR", - sparkHome = Sys.getenv("SPARK_HOME")) { + sparkHome = Sys.getenv("SPARK_HOME"), + sparkEnvir = list() ) { if (exists(".sparkRjsc", envir=.sparkREnv)) { return(get(".sparkRjsc", envir=.sparkREnv)) @@ -36,13 +42,22 @@ sparkR.init <- function( sparkHome <- normalizePath(sparkHome) } - # TODO: support other constructors + hm <- .jnew("java/util/HashMap") + for ( varname in names(sparkEnvir)) { + .jrcall(hm, "put", varname, sparkEnvir[[varname]]) + } + assign( ".sparkRjsc", - .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName, - as.character(sparkHome), - as.character(.sparkREnv$assemblyJarPath)), - envir=.sparkREnv + J("edu.berkeley.cs.amplab.sparkr.RRDD", + "createSparkContext", + master, + appName, + as.character(sparkHome), + .jarray(as.character(.sparkREnv$assemblyJarPath), + "java/lang/String"), + hm), + envir=.sparkREnv ) get(".sparkRjsc", envir=.sparkREnv) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 798d28800721d..2fb131563d894 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -1,12 +1,13 @@ package edu.berkeley.cs.amplab.sparkr import java.io._ +import java.util.{Map => JMap} import scala.collection.JavaConversions._ import scala.io.Source import scala.reflect.ClassTag -import org.apache.spark.{SparkEnv, Partition, SparkException, TaskContext} +import org.apache.spark.{SparkEnv, Partition, SparkException, TaskContext, SparkConf} import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD @@ -156,6 +157,23 @@ class RRDD[T: ClassTag]( object RRDD { + def createSparkContext( + master: String, + appName: String, + sparkHome: String, + jars: Array[String], + vars: JMap[Object, Object]): JavaSparkContext = { + + val sparkConf = new SparkConf().setMaster(master) + .setAppName(appName) + .setSparkHome(sparkHome) + .setJars(jars) + for ( (name, value) <- vars) { + sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) + } + new JavaSparkContext(sparkConf) + } + /** * Create an RRDD given a sequence of byte arrays. Used to create RRDD when `parallelize` is * called from R. From e4624482e94a1c8f18d5ea745035787a3efa025d Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 15 Feb 2014 22:30:35 -0800 Subject: [PATCH 134/687] Use `$` for calling `put` instead of .jrcall --- pkg/R/sparkR.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 7d79c0880f372..8b0a58719d692 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -44,7 +44,7 @@ sparkR.init <- function( hm <- .jnew("java/util/HashMap") for ( varname in names(sparkEnvir)) { - .jrcall(hm, "put", varname, sparkEnvir[[varname]]) + hm$put(varname, sparkEnvir[[varname]]) } assign( From 0a1fc1351308a8c655ce1674babfc98e73184038 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 18 Feb 2014 03:05:09 +0000 Subject: [PATCH 135/687] Fixes for using SparkR with Hadoop2. 1. Exclude ASM, Netty from Hadoop similar to Spark. 2. Concat services files to ensure HDFS filesystems work. 3. Update README with an example --- README.md | 8 ++++++++ pkg/src/build.sbt | 23 +++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 846596a608d6c..ddc217b55e74d 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,14 @@ If you wish to try out the package directly from github, you can use `install_gi library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") +SparkR by default links to Hadoop 1.0.4. To use SparkR with other Hadoop +versions, you will need to rebuild SparkR with the same version that [Spark is +linked +to](http://spark.incubator.apache.org/docs/latest/index.html#a-note-about-hadoop-versions). +For example to use SparkR with a CDH 4.2.0 MR1 cluster, you can run + + SPARK_HADOOP_VERSION=2.0.0-mr1-cdh4.2.0 ./install-dev.sh + ## Running sparkR If you have cloned and built SparkR, you can start using it by launching the SparkR shell with diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index fa7c67958a031..e1d876e14884d 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -21,27 +21,34 @@ libraryDependencies ++= Seq( ) { + val excludeCglib = ExclusionRule(organization = "org.sonatype.sisu.inject") + val excludeJackson = ExclusionRule(organization = "org.codehaus.jackson") + val excludeNetty = ExclusionRule(organization = "org.jboss.netty") + val excludeAsm = ExclusionRule(organization = "asm") + val excludeSnappy = ExclusionRule(organization = "org.xerial.snappy") val defaultHadoopVersion = "1.0.4" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) - libraryDependencies += "org.apache.hadoop" % "hadoop-client" % hadoopVersion + libraryDependencies += "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) } resolvers ++= Seq( "Typesafe" at "http://repo.typesafe.com/typesafe/releases", "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", + "Cloudera Repository" at "https://repository.cloudera.com/artifactory/cloudera-repos/", "Spray" at "http://repo.spray.cc" ) mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => { - case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first - case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first - case "application.conf" => MergeStrategy.concat - case "reference.conf" => MergeStrategy.concat - case "log4j.properties" => MergeStrategy.first - case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard - case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard + case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first + case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first + case "application.conf" => MergeStrategy.concat + case "reference.conf" => MergeStrategy.concat + case "log4j.properties" => MergeStrategy.first + case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard + case m if m.toLowerCase.matches("meta-inf/services.*$") => MergeStrategy.concat + case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard case _ => MergeStrategy.first } } From a06fb34be3c175e84c546a9938db076c783a916a Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 18 Feb 2014 00:48:24 -0800 Subject: [PATCH 136/687] Remove outdated comment. --- pkg/R/RDD.R | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index b7cca4be65bb1..76c085723cee3 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -10,7 +10,6 @@ #' #' @param env An R environment that stores bookkeeping states of the RDD #' @param jrdd Java object reference to the backing JavaRDD -#' @param serialized TRUE if the JavaRDD contains serialized R objects #' @export setClass("RDD", slots = list(env = "environment", From 1ac394076c20d5a6f8424a10896c406bd561af03 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 18 Feb 2014 10:20:31 -0800 Subject: [PATCH 137/687] Review feedback. --- pkg/R/RDD.R | 2 ++ pkg/R/context.R | 4 ++-- pkg/R/sparkR.R | 6 +++++- pkg/inst/tests/test_textFile.R | 3 ++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 76c085723cee3..31151c6086883 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -30,6 +30,8 @@ setMethod("initialize", "RDD", function(.Object, jrdd, serialized, # i.e. one needs to make a copy of the RDD object and sets the new slot value # there. + # The slots are inheritable from superclass. Here, both `env' and `jrdd' are + # inherited from RDD, but only the former is used. .Object@env <- new.env() .Object@env$isCached <- isCached .Object@env$isCheckpointed <- isCheckpointed diff --git a/pkg/R/context.R b/pkg/R/context.R index 6a1379492d304..87a4163284d7d 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -169,11 +169,11 @@ broadcast <- function(sc, object) { #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' setCheckpointDir(sc, "checkpoints") +#' setCheckpointDir(sc, "~/checkpoints") #' rdd <- parallelize(sc, 1:2, 2L) #' checkpoint(rdd) #'} setCheckpointDir <- function(sc, dirName) { ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") - .jcall(ssc, "V", "setCheckpointDir", dirName) + .jcall(ssc, "V", "setCheckpointDir", suppressWarnings(normalizePath(dirName))) } diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 02406c1390031..884929657deaf 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -36,7 +36,11 @@ sparkR.init <- function( sparkHome <- normalizePath(sparkHome) } - # TODO: support other constructors + hm <- .jnew("java/util/HashMap") + for (varname in names(sparkEnvir)) { + hm$put(varname, sparkEnvir[[varname]]) + } + assign( ".sparkRjsc", .jnew("org/apache/spark/api/java/JavaSparkContext", master, appName, diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 6a353243d04c2..774b8c53e6ca5 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -32,9 +32,10 @@ test_that("several transformations on RDD created by textFile()", { writeLines(mockFile, fileName) rdd <- textFile(sc, fileName) # RDD - for (i in 1:10) + for (i in 1:10) { # PipelinedRDD initially created from RDD rdd <- lapply(rdd, function(x) paste(x, x)) + } collect(rdd) unlink(fileName) From b00cea5631af2d8183e17ca1ba0b99667eed28bc Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 18 Feb 2014 19:53:57 -0800 Subject: [PATCH 138/687] Add support for a Maven build --- README.md | 7 ++ pkg/src/Makefile | 28 ++++- pkg/src/pom.xml | 307 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 337 insertions(+), 5 deletions(-) create mode 100644 pkg/src/pom.xml diff --git a/README.md b/README.md index ddc217b55e74d..07b4b5280a1c7 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,13 @@ For example to use SparkR with a CDH 4.2.0 MR1 cluster, you can run SPARK_HADOOP_VERSION=2.0.0-mr1-cdh4.2.0 ./install-dev.sh +By default, SparkR uses [sbt](http://www.scala-sbt.org) to build an assembly +jar. If you wish to use [maven](http://maven.apache.org/) instead, you can set +the environment variable `USE_MAVEN=1`. For example + + USE_MAVEN=1 ./install-dev.sh + + ## Running sparkR If you have cloned and built SparkR, you can start using it by launching the SparkR shell with diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 53ad2b5dc73af..0c21eab51dfbf 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -1,24 +1,42 @@ SCALA_VERSION := 2.10 JAR_NAME := sparkr-assembly-0.1.jar -TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) +SBT_TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) + +MAVEN_JAR_NAME := sparkr-0.1-assembly.jar +MAVEN_TARGET_NAME := target/$(MAVEN_JAR_NAME) + SCALA_SOURCE_DIR := src/main/scala/edu/berkeley/cs/amplab/sparkr RESOURCE_DIR := src/main/resources SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) +SPARK_HADOOP_VERSION ?= 1.0.4 + +ifdef USE_MAVEN + TARGET_NAME := $(MAVEN_TARGET_NAME) + BUILD_TOOL := mvn +else + TARGET_NAME := $(SBT_TARGET_NAME) + BUILD_TOOL := sbt/sbt +endif + all: $(TARGET_NAME) -$(TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) +$(SBT_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) ./sbt/sbt assembly - cp $(TARGET_NAME) ../inst/ + cp $(SBT_TARGET_NAME) ../inst/ + +$(MAVEN_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) + mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -DskipTests clean package shade:shade + cp $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) clean: - ./sbt/sbt clean + $(BUILD_TOOL) clean rm -rf target rm -rf project/target rm -rf project/project - rm sbt/sbt-launch-*.jar + -rm sbt/sbt-launch-*.jar rm ../inst/$(JAR_NAME) .PHONY: all clean diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml new file mode 100644 index 0000000000000..ce55f934402cf --- /dev/null +++ b/pkg/src/pom.xml @@ -0,0 +1,307 @@ + + edu.berkeley.cs.amplab + sparkr + 4.0.0 + sparkr + jar + 0.1 + + + Spray.cc repository + http://repo.spray.cc + + + Akka repository + http://repo.akka.io/releases + + + scala + Scala Tools + http://scala-tools.org/repo-releases/ + + true + + + false + + + + + + org.apache.spark + spark-core_2.10 + 0.9.0-incubating + + + org.apache.hadoop + hadoop-client + ${hadoop.version} + + + asm + asm + + + org.jboss.netty + netty + + + org.codehaus.jackson + * + + + org.sonatype.sisu.inject + * + + + + + org.slf4j + slf4j-log4j12 + 1.7.2 + + + org.slf4j + slf4j-api + 1.7.2 + + + org.scala-lang + scala-library + 2.10.3 + + + + + UTF-8 + UTF-8 + + 1.6 + 2.10.3 + 2.10 + + 1.0.4 + + 64m + 512m + + + + target/scala-${scala.binary.version}/classes + + + + + org.apache.maven.plugins + maven-enforcer-plugin + 1.1.1 + + + enforce-versions + + enforce + + + + + 3.0.0 + + + ${java.version} + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.7 + + + + net.alchim31.maven + scala-maven-plugin + 3.1.5 + + + scala-compile-first + process-resources + + compile + + + + scala-test-compile-first + process-test-resources + + testCompile + + + + attach-scaladocs + verify + + doc-jar + + + + + ${scala.version} + incremental + true + + -unchecked + -deprecation + + + -Xms64m + -Xms1024m + -Xmx1024m + -XX:PermSize=${PermGen} + -XX:MaxPermSize=${MaxPermGen} + + + -source + ${java.version} + -target + ${java.version} + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.5.1 + + ${java.version} + ${java.version} + UTF-8 + 1024m + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + + org.apache.maven.plugins + maven-shade-plugin + 2.0 + + true + assembly + + + *:* + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + META-INF/services/org.apache.hadoop.fs.FileSystem + + + reference.conf + + + + + + + + package + + shade + + + + + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + org.codehaus.mojo + build-helper-maven-plugin + + + add-scala-sources + generate-sources + + add-source + + + + src/main/scala + + + + + add-scala-test-sources + generate-test-sources + + add-test-source + + + + src/test/scala + + + + + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-source-plugin + + + + + + + + scala + Scala Tools + http://scala-tools.org/repo-releases/ + + true + + + false + + + + + From 7014f8347a217aef7ad065f24b11a1fd37b9751d Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 18 Feb 2014 19:57:08 -0800 Subject: [PATCH 139/687] Remove unused transformers in maven's pom.xml --- pkg/src/pom.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index ce55f934402cf..f868f0544b30f 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -220,14 +220,6 @@ reference.conf - - From 90f9fda0ac7ecf53f5701ca19cdcbe889325e2c6 Mon Sep 17 00:00:00 2001 From: Ryan Hafen Date: Wed, 19 Feb 2014 23:47:33 -0800 Subject: [PATCH 140/687] Fix isRdd() to properly check for class The old approach, class(obj) == "RDD" returns a vector as long as class attribute of obj. For example: > obj <- structure(list(), class = c("classA", "classB")) > class(obj) == "RDD" [1] FALSE FALSE This causes getDependencies to fail. Changed to: inherits(obj, "RDD") --- pkg/R/utils.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index e3cfe11d7fcda..6ab59b710c73b 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -65,7 +65,7 @@ deserializeByteArrays <- function(byteArrs) { # Returns TRUE if `name` refers to an RDD in the given environment `env` isRDD <- function(name, env) { obj <- get(name, envir=env) - class(obj) == "RDD" + inherits(obj, "RDD") } # Returns TRUE if `name` is a function in the SparkR package. From 7c093e68e5ead222684c34333c53a280c776de2f Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Thu, 20 Feb 2014 22:58:34 -0500 Subject: [PATCH 141/687] Use inherits() to test an object's class. --- pkg/R/RDD.R | 2 +- pkg/R/utils.R | 13 +++++-------- pkg/inst/tests/test_parallelize_collect.R | 4 ++-- pkg/inst/tests/test_textFile.R | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 31151c6086883..01fa671c70532 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -54,7 +54,7 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) !(e$isCached || e$isCheckpointed) } - if (class(prev) != "PipelinedRDD" || !isPipelinable(prev)) { + if (!inherits(prev, "PipelinedRDD") || !isPipelinable(prev)) { # This transformation is the first in its stage: .Object@func <- func .Object@prev_jrdd <- getJRDD(prev) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 6ab59b710c73b..6013dccf6371d 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -15,13 +15,13 @@ convertJListToRList <- function(jList, flatten) { # Assume it is either an R object or a Java obj ref. obj <- .jsimplify(jElem) - if (class(obj) == "jobjRef" && .jinstanceof(obj, "[B")) { + if (inherits(obj, "jobjRef") && .jinstanceof(obj, "[B")) { # RDD[Array[Byte]]. rRaw <- .jevalArray(.jcastToArray(jElem)) res <- unserialize(rRaw) - } else if (class(obj) == "jobjRef" && + } else if (inherits(obj, "jobjRef") && .jinstanceof(obj, "scala.Tuple2")) { # JavaPairRDD[Array[Byte], Array[Byte]]. @@ -30,7 +30,7 @@ convertJListToRList <- function(jList, flatten) { res <- list(unserialize(.jevalArray(keyBytes)), unserialize(.jevalArray(valBytes))) - } else if (class(obj) == "jobjRef" && !.jinstanceof(obj, "[B")) { + } else if (inherits(obj, "jobjRef") && !.jinstanceof(obj, "[B")) { stop(paste("utils.R: convertJListToRList only supports", "RDD[Array[Byte]] and", "JavaPairRDD[Array[Byte], Array[Byte]] for now")) @@ -38,8 +38,9 @@ convertJListToRList <- function(jList, flatten) { # jElem is of a primitive Java type, is simplified to R's # corresponding type. - if (class(obj) != "jobjRef") + if (!inherits(obj, "jobjRef")) { res <- list(obj) + } res }) @@ -99,8 +100,6 @@ getDependencies <- function(name) { currentEnv <- closureEnv while (TRUE) { - #print(currentEnv) - # Don't serialize namespaces if (!isNamespace(currentEnv)) { varsToSave <- c(varsToSave, ls(currentEnv)) @@ -120,8 +119,6 @@ getDependencies <- function(name) { function(x) { !exists(x, .broadcastNames, inherits=FALSE) }, filteredVars) - #cat("Saving ", filteredVars, "\n", file=stderr()) - fileName <- tempfile(pattern="spark-utils", fileext=".deps") save(list=filteredVars, file=fileName, envir=closureEnv) fileSize <- file.info(fileName)$size diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index 4b0c2461a114f..841248fc84275 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -40,9 +40,9 @@ test_that("parallelize() on simple vectors and lists returns an RDD", { strListRDD2) for (rdd in rdds) { - expect_that(class(rdd), is_equivalent_to("RDD")) + expect_true(inherits(rdd, "RDD")) expect_true(.hasSlot(rdd, "jrdd") - && class(rdd@jrdd) == "jobjRef" + && inherits(rdd@jrdd, "jobjRef") && .jinstanceof(rdd@jrdd, "org/apache/spark/api/java/JavaRDD")) } }) diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 774b8c53e6ca5..f6a1d2a1cc90f 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -10,7 +10,7 @@ test_that("textFile() on a local file returns an RDD", { writeLines(mockFile, fileName) rdd <- textFile(sc, fileName) - expect_that(class(rdd), is_equivalent_to("RDD")) + expect_true(inherits(rdd, "RDD")) expect_true(count(rdd) > 0) expect_true(count(rdd) == 2) From aacd72657106107b7749b91044f9049409c05cb5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 20 Feb 2014 22:29:05 -0800 Subject: [PATCH 142/687] Update README with maven proxy instructions --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 07b4b5280a1c7..4df395627a4bd 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,9 @@ jar. If you wish to use [maven](http://maven.apache.org/) instead, you can set the environment variable `USE_MAVEN=1`. For example USE_MAVEN=1 ./install-dev.sh + +If you are building SparkR from behind a proxy, you can [setup maven](https://maven.apache.org/guides/mini/guide-proxies.html) to use the right proxy +server. ## Running sparkR From 7b9348c8556fedbba4929cbb1484a5476e1f5de7 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 26 Feb 2014 19:12:39 -0800 Subject: [PATCH 143/687] Add tests for partition with string keys Add two tests one with a string array and one from a textFile to test both codepaths --- pkg/inst/tests/test_shuffle.R | 23 +++++++++++++++++++---- pkg/inst/tests/test_textFile.R | 16 ++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/pkg/inst/tests/test_shuffle.R b/pkg/inst/tests/test_shuffle.R index 6d1ea81b1a149..7bd413c3f9b9d 100644 --- a/pkg/inst/tests/test_shuffle.R +++ b/pkg/inst/tests/test_shuffle.R @@ -14,10 +14,8 @@ numPairs <- list(list(1L, 100), list(2L, 200), list(4L, -1), list(3L, 1), list(3L, 0)) numPairsRdd <- parallelize(sc, numPairs, length(numPairs)) -strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge, ", - "other times it helps me control the chaos.", - "Dexter Morgan: Harry and Dorris Morgan did a wonderful job ", - "raising me. But they're both dead now. I didn't kill them. Honest.") +strList <- list("Dexter Morgan: Blood. Sometimes it sets my teeth on edge and ", + "Dexter Morgan: Harry and Dorris Morgan did a wonderful job ") strListRDD <- parallelize(sc, strList, 4) test_that("groupByKey for integers", { @@ -104,3 +102,20 @@ test_that("partitionBy works with dependencies", { expect_equal(actual_first, expected_first) expect_equal(actual_second, expected_second) }) + +test_that("test partitionBy with string keys", { + words <- flatMap(strListRDD, function(line) { strsplit(line, " ")[[1]] }) + wordCount <- lapply(words, function(word) { list(word, 1L) }) + + resultRDD <- partitionBy(wordCount, 2L) + expected_first <- list(list("Dexter", 1), list("Dexter", 1)) + expected_second <- list(list("and", 1), list("and", 1)) + + actual_first <- Filter(function(item) { item[[1]] == "Dexter" }, + collectPartition(resultRDD, 0L)) + actual_second <- Filter(function(item) { item[[1]] == "and" }, + collectPartition(resultRDD, 1L)) + + expect_equal(actual_first, expected_first) + expect_equal(actual_second, expected_second) +}) diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 409caa9a8b544..b5a575452bfbc 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -26,3 +26,19 @@ test_that("textFile() followed by a collect() returns the same content", { unlink(fileName) }) + +test_that("textFile() word count works as expected", { + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + rdd <- textFile(sc, fileName) + + words <- flatMap(rdd, function(line) { strsplit(line, " ")[[1]] }) + wordCount <- lapply(words, function(word) { list(word, 1L) }) + + counts <- reduceByKey(wordCount, "+", 2L) + output <- collect(counts) + expected <- list(list("pretty.", 1), list("is", 2), list("awesome.", 1), + list("Spark", 2)) + expect_equal(output, expected) +}) From 21fa2d8551c6d03957492ce79b49ec7856ce074a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 26 Feb 2014 19:46:00 -0800 Subject: [PATCH 144/687] Fix bug where serialized was not changed for RRRD Reason: When an RRDD is created in getJRDD we have converted any possibly unserialized RDD to a serialized RDD. --- pkg/R/RDD.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 01fa671c70532..95c0b30bb2a5b 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -125,6 +125,8 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), as.character(.sparkREnv[["libname"]]), broadcastArr, prev_jrdd$classTag()) + # The RDD is serialized after we create a RRDD + rdd@env$serialized <- TRUE rdd@env$jrdd_val <- rddRef$asJavaRDD() rdd@env$jrdd_val }) From 8b7aeb39ed1fbf7138a8a558b62b7756c8dbd418 Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Mon, 7 Apr 2014 11:25:12 -0700 Subject: [PATCH 145/687] 22x speed improvement, 3X mem impovement data = apply(matrix(as.character(1:90000), ncol= 300), 1, paste, collapse = " ") system.time(readPartition(data)) system.time(readPartition.old(data)) --- examples/logistic_regression.R | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index f5b4df09e8420..30a8fefe0dff4 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -13,10 +13,8 @@ iterations <- as.integer(args[[3]]) D <- 10 readPartition <- function(part) { - m <- t(sapply(part, function(line) { - as.numeric(strsplit(line, " ")[[1]]) - })) -} + con = textConnection(part, "r") + list(as.matrix(read.table(con)))} # Read data points and convert each partition to a matrix points <- cache(lapplyPartition(textFile(sc, args[[2]]), readPartition)) @@ -27,6 +25,7 @@ cat("Initial w: ", w, "\n") # Compute logistic regression gradient for a matrix of data points gradient <- function(partition) { + partition = partition[[1]] Y <- partition[, 1] # point labels (first column of input file) X <- partition[, -1] # point coordinates From b15d7db3416f63ef38f6858217603c9d86c336e7 Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Mon, 7 Apr 2014 15:10:15 -0700 Subject: [PATCH 146/687] faster parsing --- examples/kmeans.R | 8 +++++++- examples/logistic_regression.R | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/examples/kmeans.R b/examples/kmeans.R index 843eca3014db6..6f690c4ffeda8 100644 --- a/examples/kmeans.R +++ b/examples/kmeans.R @@ -9,6 +9,12 @@ parseVector <- function(line) { sapply(nums, as.double) } +parseVectors <- function(lines) { + lines = strsplit(as.character(lines) , " ", fixed = TRUE) + split(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]])), 1:length(lines)) +} + + closestPoint <- function(p, centers) { bestIndex <- 0 closest <- .Machine$double.xmax @@ -36,7 +42,7 @@ K <- as.integer(args[[3]]) convergeDist <- as.double(args[[4]]) lines <- textFile(sc, args[[2]]) -points <- cache(lapply(lines, parseVector)) +points <- cache(lapplyPartition(lines, parseVectors)) # kPoints <- take(points, K) kPoints <- takeSample(points, FALSE, K, 16189L) tempDist <- 1.0 diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index 30a8fefe0dff4..05a29aec689d7 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -12,9 +12,9 @@ sc <- sparkR.init(args[[1]], "LogisticRegressionR") iterations <- as.integer(args[[3]]) D <- 10 -readPartition <- function(part) { - con = textConnection(part, "r") - list(as.matrix(read.table(con)))} +readPartition <- function(part){ + part = strsplit(part, " ", fixed = T) + list(matrix(as.numeric(unlist(part)), ncol = length(part[[1]])))} # Read data points and convert each partition to a matrix points <- cache(lapplyPartition(textFile(sc, args[[2]]), readPartition)) From 46b23df0b84f23600b822e22e16973ff6591e6cd Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Tue, 8 Apr 2014 15:34:32 -0700 Subject: [PATCH 147/687] replace require with library require is used only when there is a way to recover from a failure to load a package. Since these examples would all fail if any of the missing libraries were required, using require only delays the error and makes it less clear. --- examples/dfc/DFC.R | 16 ++++++++-------- examples/logistic_regression.R | 2 +- examples/pi.R | 2 +- examples/wordcount.R | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/examples/dfc/DFC.R b/examples/dfc/DFC.R index 65e5677f04db9..cd972804408a2 100644 --- a/examples/dfc/DFC.R +++ b/examples/dfc/DFC.R @@ -1,9 +1,9 @@ # Import required matrix and C interface packages -require(SparkR) -require(MASS) -require('Matrix') -require(Rcpp) -require(svd) +library(SparkR) +library(MASS) +library('Matrix') +library(Rcpp) +library(svd) # Get the command line arguments args <- commandArgs(trailing = TRUE) @@ -133,9 +133,9 @@ apgBase <- function(mat,maxiter) { tbase <- proc.time() # Timing code # load required packages - require('Matrix') - require(Rcpp) - require(svd) + library('Matrix') + library(Rcpp) + library(svd) # Load and compile the fast C++ code sourceCpp('maskUV.cpp') diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index 05a29aec689d7..8fcfcb0d10231 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -1,4 +1,4 @@ -require(SparkR) +library(SparkR) args <- commandArgs(trailing = TRUE) diff --git a/examples/pi.R b/examples/pi.R index a215c74cd9cd3..13ef83c07159b 100644 --- a/examples/pi.R +++ b/examples/pi.R @@ -1,4 +1,4 @@ -require(SparkR) +library(SparkR) args <- commandArgs(trailing = TRUE) diff --git a/examples/wordcount.R b/examples/wordcount.R index cf2f8e779f441..e75c85cabe9ec 100644 --- a/examples/wordcount.R +++ b/examples/wordcount.R @@ -1,4 +1,4 @@ -require(SparkR) +library(SparkR) args <- commandArgs(trailing = TRUE) From 1f7ffb0a1389d6a4f4bbce2a6364773fcfeacc8c Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Tue, 8 Apr 2014 15:35:03 -0700 Subject: [PATCH 148/687] implemented using matrices and vectorized calls wherever possible --- examples/kmeans.R | 93 ++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 49 deletions(-) diff --git a/examples/kmeans.R b/examples/kmeans.R index 6f690c4ffeda8..0cb179d1adf55 100644 --- a/examples/kmeans.R +++ b/examples/kmeans.R @@ -1,40 +1,32 @@ -require(SparkR) +library(SparkR) # Logistic regression in Spark. # Note: unlike the example in Scala, a point here is represented as a vector of # doubles. -parseVector <- function(line) { - nums = strsplit(line, " ")[[1]] - sapply(nums, as.double) -} - parseVectors <- function(lines) { - lines = strsplit(as.character(lines) , " ", fixed = TRUE) - split(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]])), 1:length(lines)) -} - - -closestPoint <- function(p, centers) { - bestIndex <- 0 - closest <- .Machine$double.xmax - for (i in 1:length(centers)) { - tempDist <- sum((p - centers[[i]]) ** 2) - if (tempDist < closest) { - closest <- tempDist - bestIndex <- i - } - } - bestIndex + lines <- strsplit(as.character(lines) , " ", fixed = TRUE) + list(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]]))) } +dist.fun <- + function(P, C) { + apply( + C, + 1, + function(x) + colSums((t(P) - x)^2))} + +closestPoint <- + function(P, C) + max.col(-dist.fun(P, C)) # Main program -args <- commandArgs(trailing = TRUE) +args <- commandArgs(trailing = TRUE) if (length(args) != 4) { - print("Usage: kmeans ") - q("no") + print("Usage: kmeans ") + q("no") } sc <- sparkR.init(args[[1]], "RKMeans") @@ -44,33 +36,36 @@ convergeDist <- as.double(args[[4]]) lines <- textFile(sc, args[[2]]) points <- cache(lapplyPartition(lines, parseVectors)) # kPoints <- take(points, K) -kPoints <- takeSample(points, FALSE, K, 16189L) +kPoints <- do.call(rbind, takeSample(points, FALSE, K, 16189L)) tempDist <- 1.0 while (tempDist > convergeDist) { - closest <- lapply(points, - function(p) { list(closestPoint(p, kPoints), list(p, 1)) }) - - pointStats <- reduceByKey(closest, - function(p1, p2) { - list(p1[[1]] + p2[[1]], p1[[2]] + p2[[2]]) - }, - 2L) - - newPoints <- collect(lapply(pointStats, - function(tup) { - list(tup[[1]], tup[[2]][[1]] / tup[[2]][[2]]) - })) - - tempDist <- sum(sapply(newPoints, - function(tup) { - sum((kPoints[[tup[[1]]]] - tup[[2]]) ** 2) - })) - - for (tup in newPoints) - kPoints[[tup[[1]]]] <- tup[[2]] - - cat("Finished iteration (delta = ", tempDist, ")\n") + closest <- lapplyPartition( + lapply(points, + function(p) { + cp <- closestPoint(p, kPoints); + mapply(list, unique(cp), split.data.frame(cbind(1, p), cp), SIMPLIFY=FALSE)}), + function(x) do.call(c, x)) + + pointStats <- reduceByKey(closest, + function(p1, p2) { + t(colSums(rbind(p1, p2))) + }, + 2L) + + newPoints <- do.call( + rbind, + collect(lapply(pointStats, + function(tup) { + point.sum <- tup[[2]][, -1] + point.count <- tup[[2]][, 1] + point.sum/point.count + }))) + + D <- dist.fun(kPoints, newPoints) + tempDist <- sum(D[cbind(1:3, max.col(-D))]) + kPoints <- newPoints + cat("Finished iteration (delta = ", tempDist, ")\n") } cat("Final centers:\n") From f137a573985e3e8c9dbdd78028e36af0d9811734 Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Tue, 8 Apr 2014 15:35:24 -0700 Subject: [PATCH 149/687] for rstudio users --- .gitignore | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 5736c5de8ec78..8b438f387a5e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,14 @@ *.class - # Package Files # *.jar *.war *.ear - .RData .Rhistory - target/ lib/ work/ - # vim tmps .*.swp +.Rproj.user +SparkR-pkg.Rproj From 91aa527829c71c775ba7a91f9ac7ad023bff5e0d Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Tue, 8 Apr 2014 16:10:25 -0700 Subject: [PATCH 150/687] vectorized version, 36s 10 slices 10^6 per slice. The older version takes 30 sec on 1/10th of data. --- examples/pi.R | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/examples/pi.R b/examples/pi.R index 13ef83c07159b..c62263cae5f12 100644 --- a/examples/pi.R +++ b/examples/pi.R @@ -19,7 +19,16 @@ piFunc <- function(elem) { val } + +piFuncVec <- function(elems) { + message(length(elems)) + rands1 <- runif(n = length(elems), min = -1, max = 1) + rands2 <- runif(n = length(elems), min = -1, max = 1) + val <- ifelse((rands1^2 + rands2^2) < 1, 1.0, 0.0) + sum(val) +} + rdd <- parallelize(sc, 1:n, slices) -count <- reduce(lapply(rdd, piFunc), sum) +count <- reduce(lapplyPartition(rdd, piFuncVec), sum) cat("Pi is roughly", 4.0 * count / n, "\n") cat("Num elements in RDD ", count(rdd), "\n") From 84370613e5f714cc9caede518fa6916eea593130 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 11 Apr 2014 10:21:53 -0700 Subject: [PATCH 151/687] Exclude protobuf from Spark dependency in Maven This avoids pulling in multiple versions of protobuf from Mesos and Hadoop. --- pkg/src/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index f868f0544b30f..c795259eaf6e6 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -31,6 +31,12 @@ org.apache.spark spark-core_2.10 0.9.0-incubating + + + com.google.protobuf + protobuf-java + + org.apache.hadoop From 139bdeeeecea87694733cee1228c71dcc816bf93 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 12 Apr 2014 14:16:52 -0700 Subject: [PATCH 152/687] Cache sbt, maven, ivy dependencies --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index fe54268f0faef..6b484e8d884ee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,5 +16,11 @@ install: script: - ./run-tests.sh +cache: + directories: + - $HOME/.m2 + - $HOME/.ivy2 + - $HOME/.sbt + on_failure: - ./travis-tool.sh dump_logs From 3eb5ad39cf38d80886cb3faa1973572165b01db3 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 12 Apr 2014 14:20:35 -0700 Subject: [PATCH 153/687] on_failure -> after_failure in travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6b484e8d884ee..5a8a5befbcf2c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,5 +22,5 @@ cache: - $HOME/.ivy2 - $HOME/.sbt -on_failure: +after_failure: - ./travis-tool.sh dump_logs From 948738af15695bb9db22b0a4932398cb09e585f3 Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Mon, 14 Apr 2014 21:52:53 -0700 Subject: [PATCH 154/687] converted tabs to spaces per project request --- examples/kmeans.R | 74 +++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/examples/kmeans.R b/examples/kmeans.R index 0cb179d1adf55..992eeb9be77dd 100644 --- a/examples/kmeans.R +++ b/examples/kmeans.R @@ -5,28 +5,28 @@ library(SparkR) # doubles. parseVectors <- function(lines) { - lines <- strsplit(as.character(lines) , " ", fixed = TRUE) - list(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]]))) + lines <- strsplit(as.character(lines) , " ", fixed = TRUE) + list(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]]))) } dist.fun <- - function(P, C) { - apply( - C, - 1, - function(x) - colSums((t(P) - x)^2))} + function(P, C) { + apply( + C, + 1, + function(x) + colSums((t(P) - x)^2))} closestPoint <- - function(P, C) - max.col(-dist.fun(P, C)) + function(P, C) + max.col(-dist.fun(P, C)) # Main program args <- commandArgs(trailing = TRUE) if (length(args) != 4) { - print("Usage: kmeans ") - q("no") + print("Usage: kmeans ") + q("no") } sc <- sparkR.init(args[[1]], "RKMeans") @@ -40,32 +40,32 @@ kPoints <- do.call(rbind, takeSample(points, FALSE, K, 16189L)) tempDist <- 1.0 while (tempDist > convergeDist) { - closest <- lapplyPartition( - lapply(points, - function(p) { - cp <- closestPoint(p, kPoints); - mapply(list, unique(cp), split.data.frame(cbind(1, p), cp), SIMPLIFY=FALSE)}), - function(x) do.call(c, x)) - - pointStats <- reduceByKey(closest, - function(p1, p2) { - t(colSums(rbind(p1, p2))) - }, - 2L) - - newPoints <- do.call( - rbind, - collect(lapply(pointStats, - function(tup) { - point.sum <- tup[[2]][, -1] - point.count <- tup[[2]][, 1] - point.sum/point.count - }))) - - D <- dist.fun(kPoints, newPoints) - tempDist <- sum(D[cbind(1:3, max.col(-D))]) + closest <- lapplyPartition( + lapply(points, + function(p) { + cp <- closestPoint(p, kPoints); + mapply(list, unique(cp), split.data.frame(cbind(1, p), cp), SIMPLIFY=FALSE)}), + function(x) do.call(c, x)) + + pointStats <- reduceByKey(closest, + function(p1, p2) { + t(colSums(rbind(p1, p2))) + }, + 2L) + + newPoints <- do.call( + rbind, + collect(lapply(pointStats, + function(tup) { + point.sum <- tup[[2]][, -1] + point.count <- tup[[2]][, 1] + point.sum/point.count + }))) + + D <- dist.fun(kPoints, newPoints) + tempDist <- sum(D[cbind(1:3, max.col(-D))]) kPoints <- newPoints - cat("Finished iteration (delta = ", tempDist, ")\n") + cat("Finished iteration (delta = ", tempDist, ")\n") } cat("Final centers:\n") From 9dbd5313996ea9b8caf06bf45211ea0f06e9ea13 Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Tue, 15 Apr 2014 12:19:37 -0700 Subject: [PATCH 155/687] more formatting per committer request --- examples/kmeans.R | 85 ++++++++++++++++++---------------- examples/logistic_regression.R | 3 +- examples/pi.R | 10 ++-- 3 files changed, 51 insertions(+), 47 deletions(-) diff --git a/examples/kmeans.R b/examples/kmeans.R index 992eeb9be77dd..9fecab3c43e23 100644 --- a/examples/kmeans.R +++ b/examples/kmeans.R @@ -4,29 +4,30 @@ library(SparkR) # Note: unlike the example in Scala, a point here is represented as a vector of # doubles. -parseVectors <- function(lines) { - lines <- strsplit(as.character(lines) , " ", fixed = TRUE) - list(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]]))) +parseVectors <- function(lines) { + lines <- strsplit(as.character(lines) , " ", fixed = TRUE) + list(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]]))) } -dist.fun <- - function(P, C) { - apply( - C, - 1, - function(x) - colSums((t(P) - x)^2))} +dist.fun <- function(P, C) { + apply( + C, + 1, + function(x) { + colSums((t(P) - x)^2)) + } +} -closestPoint <- - function(P, C) - max.col(-dist.fun(P, C)) +closestPoint <- function(P, C) { + max.col(-dist.fun(P, C)) +} # Main program args <- commandArgs(trailing = TRUE) if (length(args) != 4) { - print("Usage: kmeans ") - q("no") + print("Usage: kmeans ") + q("no") } sc <- sparkR.init(args[[1]], "RKMeans") @@ -40,32 +41,34 @@ kPoints <- do.call(rbind, takeSample(points, FALSE, K, 16189L)) tempDist <- 1.0 while (tempDist > convergeDist) { - closest <- lapplyPartition( - lapply(points, - function(p) { - cp <- closestPoint(p, kPoints); - mapply(list, unique(cp), split.data.frame(cbind(1, p), cp), SIMPLIFY=FALSE)}), - function(x) do.call(c, x)) - - pointStats <- reduceByKey(closest, - function(p1, p2) { - t(colSums(rbind(p1, p2))) - }, - 2L) - - newPoints <- do.call( - rbind, - collect(lapply(pointStats, - function(tup) { - point.sum <- tup[[2]][, -1] - point.count <- tup[[2]][, 1] - point.sum/point.count - }))) - - D <- dist.fun(kPoints, newPoints) - tempDist <- sum(D[cbind(1:3, max.col(-D))]) - kPoints <- newPoints - cat("Finished iteration (delta = ", tempDist, ")\n") + closest <- lapplyPartition( + lapply(points, + function(p) { + cp <- closestPoint(p, kPoints); + mapply(list, unique(cp), split.data.frame(cbind(1, p), cp), SIMPLIFY=FALSE) + }), + function(x) {do.call(c, x) + }) + + pointStats <- reduceByKey(closest, + function(p1, p2) { + t(colSums(rbind(p1, p2))) + }, + 2L) + + newPoints <- do.call( + rbind, + collect(lapply(pointStats, + function(tup) { + point.sum <- tup[[2]][, -1] + point.count <- tup[[2]][, 1] + point.sum/point.count + }))) + + D <- dist.fun(kPoints, newPoints) + tempDist <- sum(D[cbind(1:3, max.col(-D))]) + kPoints <- newPoints + cat("Finished iteration (delta = ", tempDist, ")\n") } cat("Final centers:\n") diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index 8fcfcb0d10231..941e34e1efa30 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -14,7 +14,8 @@ D <- 10 readPartition <- function(part){ part = strsplit(part, " ", fixed = T) - list(matrix(as.numeric(unlist(part)), ncol = length(part[[1]])))} + list(matrix(as.numeric(unlist(part)), ncol = length(part[[1]]))) +} # Read data points and convert each partition to a matrix points <- cache(lapplyPartition(textFile(sc, args[[2]]), readPartition)) diff --git a/examples/pi.R b/examples/pi.R index c62263cae5f12..0c3fa8fa62f3e 100644 --- a/examples/pi.R +++ b/examples/pi.R @@ -21,11 +21,11 @@ piFunc <- function(elem) { piFuncVec <- function(elems) { - message(length(elems)) - rands1 <- runif(n = length(elems), min = -1, max = 1) - rands2 <- runif(n = length(elems), min = -1, max = 1) - val <- ifelse((rands1^2 + rands2^2) < 1, 1.0, 0.0) - sum(val) + message(length(elems)) + rands1 <- runif(n = length(elems), min = -1, max = 1) + rands2 <- runif(n = length(elems), min = -1, max = 1) + val <- ifelse((rands1^2 + rands2^2) < 1, 1.0, 0.0) + sum(val) } rdd <- parallelize(sc, 1:n, slices) From 059ae410399871a49b8d4ce91f5379bd7fd6ea50 Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Tue, 15 Apr 2014 12:22:11 -0700 Subject: [PATCH 156/687] and more formatting --- examples/kmeans.R | 82 +++++++++++++++++----------------- examples/logistic_regression.R | 4 +- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/examples/kmeans.R b/examples/kmeans.R index 9fecab3c43e23..1a5c622910598 100644 --- a/examples/kmeans.R +++ b/examples/kmeans.R @@ -4,30 +4,30 @@ library(SparkR) # Note: unlike the example in Scala, a point here is represented as a vector of # doubles. -parseVectors <- function(lines) { - lines <- strsplit(as.character(lines) , " ", fixed = TRUE) - list(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]]))) +parseVectors <- function(lines) { + lines <- strsplit(as.character(lines) , " ", fixed = TRUE) + list(matrix(as.numeric(unlist(lines)), ncol = length(lines[[1]]))) } dist.fun <- function(P, C) { - apply( - C, - 1, - function(x) { - colSums((t(P) - x)^2)) - } + apply( + C, + 1, + function(x) { + colSums((t(P) - x)^2)) + } } -closestPoint <- function(P, C) { - max.col(-dist.fun(P, C)) +closestPoint <- function(P, C) { + max.col(-dist.fun(P, C)) } # Main program args <- commandArgs(trailing = TRUE) if (length(args) != 4) { - print("Usage: kmeans ") - q("no") + print("Usage: kmeans ") + q("no") } sc <- sparkR.init(args[[1]], "RKMeans") @@ -41,34 +41,34 @@ kPoints <- do.call(rbind, takeSample(points, FALSE, K, 16189L)) tempDist <- 1.0 while (tempDist > convergeDist) { - closest <- lapplyPartition( - lapply(points, - function(p) { - cp <- closestPoint(p, kPoints); - mapply(list, unique(cp), split.data.frame(cbind(1, p), cp), SIMPLIFY=FALSE) - }), - function(x) {do.call(c, x) - }) - - pointStats <- reduceByKey(closest, - function(p1, p2) { - t(colSums(rbind(p1, p2))) - }, - 2L) - - newPoints <- do.call( - rbind, - collect(lapply(pointStats, - function(tup) { - point.sum <- tup[[2]][, -1] - point.count <- tup[[2]][, 1] - point.sum/point.count - }))) - - D <- dist.fun(kPoints, newPoints) - tempDist <- sum(D[cbind(1:3, max.col(-D))]) - kPoints <- newPoints - cat("Finished iteration (delta = ", tempDist, ")\n") + closest <- lapplyPartition( + lapply(points, + function(p) { + cp <- closestPoint(p, kPoints); + mapply(list, unique(cp), split.data.frame(cbind(1, p), cp), SIMPLIFY=FALSE) + }), + function(x) {do.call(c, x) + }) + + pointStats <- reduceByKey(closest, + function(p1, p2) { + t(colSums(rbind(p1, p2))) + }, + 2L) + + newPoints <- do.call( + rbind, + collect(lapply(pointStats, + function(tup) { + point.sum <- tup[[2]][, -1] + point.count <- tup[[2]][, 1] + point.sum/point.count + }))) + + D <- dist.fun(kPoints, newPoints) + tempDist <- sum(D[cbind(1:3, max.col(-D))]) + kPoints <- newPoints + cat("Finished iteration (delta = ", tempDist, ")\n") } cat("Final centers:\n") diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index 941e34e1efa30..8442f8f6c5f8e 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -13,8 +13,8 @@ iterations <- as.integer(args[[3]]) D <- 10 readPartition <- function(part){ - part = strsplit(part, " ", fixed = T) - list(matrix(as.numeric(unlist(part)), ncol = length(part[[1]]))) + part = strsplit(part, " ", fixed = T) + list(matrix(as.numeric(unlist(part)), ncol = length(part[[1]]))) } # Read data points and convert each partition to a matrix From 8f433e53c97201bfb49e2155cea48eb0f9228c7c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 23 Apr 2014 00:34:34 -0700 Subject: [PATCH 157/687] Move up Hadoop in pom.xml and add back protobufs As Hadoop 1.0.4 doesn't use protobufs, we can't exclude protobufs from Spark always. This change tries to order the dependencies so that the shader first picks up Hadoop's protobufs over Mesos. --- pkg/src/pom.xml | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index c795259eaf6e6..160e190b21dc1 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -27,17 +27,8 @@ - - org.apache.spark - spark-core_2.10 - 0.9.0-incubating - - - com.google.protobuf - protobuf-java - - - + org.apache.hadoop hadoop-client @@ -61,6 +52,11 @@ + + org.apache.spark + spark-core_2.10 + 0.9.0-incubating + org.slf4j slf4j-log4j12 From f323e97151f449992e1c88914cabce6f7c8615d5 Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Thu, 15 May 2014 19:05:57 -0700 Subject: [PATCH 158/687] tentative fix for amplab-extras/SparkR-pkg#53 --- pkg/inst/worker/worker.R | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 5a2f5a9112c7a..8046f4fd3b608 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -39,16 +39,22 @@ sink(stderr()) # read function dependencies depsLen <- readInt(inputCon) if (depsLen > 0) { - execFunctionDeps <- readRawLen(inputCon, depsLen) - - # load the dependencies into current environment - depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") - depsFile <- file(depsFileName, open="wb") - writeBin(execFunctionDeps, depsFile, endian="big") - close(depsFile) - - load(depsFileName) - unlink(depsFileName) + execFunctionDeps <- readRawLen(inputCon, depsLen) +} +# Include packages as required +packageNames <- unserialize(readRaw(inputCon)) +for (pkg in packageNames) { + suppressPackageStartupMessages(require(as.character(pkg), character.only=TRUE)) +} +if (depsLen > 0) { + # load the dependencies into current environment + depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") + depsFile <- file(depsFileName, open="wb") + writeBin(execFunctionDeps, depsFile, endian="big") + close(depsFile) + + load(depsFileName) + unlink(depsFileName) } # Include packages as required From b3c318d357b74cc51442b213f3604afb1e6a264e Mon Sep 17 00:00:00 2001 From: Antonio Piccolboni Date: Fri, 16 May 2014 11:53:13 -0700 Subject: [PATCH 159/687] delayed loading to have all namespaces available. --- pkg/inst/worker/worker.R | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 5a2f5a9112c7a..0370f84c095bc 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -46,9 +46,6 @@ if (depsLen > 0) { depsFile <- file(depsFileName, open="wb") writeBin(execFunctionDeps, depsFile, endian="big") close(depsFile) - - load(depsFileName) - unlink(depsFileName) } # Include packages as required @@ -57,6 +54,11 @@ for (pkg in packageNames) { suppressPackageStartupMessages(require(as.character(pkg), character.only=TRUE)) } +if (depsLen > 0) { + load(depsFileName) + unlink(depsFileName) +} + # Read and set broadcast variables numBroadcastVars <- readInt(inputCon) if (numBroadcastVars > 0) { From b8204c519d12cdc068003aa08a9aff111a2f968d Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Thu, 19 Jun 2014 17:58:12 -0700 Subject: [PATCH 160/687] Minor: update a URL in README. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4df395627a4bd..6d4d0ee0fa0e1 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ If you wish to try out the package directly from github, you can use `install_gi SparkR by default links to Hadoop 1.0.4. To use SparkR with other Hadoop versions, you will need to rebuild SparkR with the same version that [Spark is linked -to](http://spark.incubator.apache.org/docs/latest/index.html#a-note-about-hadoop-versions). +to](http://spark.apache.org/docs/latest/index.html#a-note-about-hadoop-versions). For example to use SparkR with a CDH 4.2.0 MR1 cluster, you can run SPARK_HADOOP_VERSION=2.0.0-mr1-cdh4.2.0 ./install-dev.sh From fc1a71a9e1200e430fd595b40a54cf70886272a1 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Tue, 1 Jul 2014 20:49:48 -0700 Subject: [PATCH 161/687] Fix that collect(parallelize(sc,1:72,15)) drops elements. --- pkg/R/context.R | 2 +- pkg/inst/tests/test_parallelize_collect.R | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index 87a4163284d7d..9f7ff8917566d 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -62,7 +62,7 @@ parallelize <- function(sc, coll, numSlices = 1) { if (numSlices > length(coll)) numSlices <- length(coll) - sliceLen <- length(coll) %/% numSlices + sliceLen <- ceiling(length(coll) / numSlices) slices <- split(coll, rep(1:(numSlices + 1), each = sliceLen)[1:length(coll)]) # Serialize each slice: obtain a list of raws, or a list of lists (slices) of diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index 841248fc84275..a37465a36ef68 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -67,6 +67,17 @@ test_that("collect(), following a parallelize(), gives back the original collect expect_equal(collect(strListRDD2), as.list(strList)) }) +test_that("regression: collect() following a parallelize() does not drop elements", { + lapply(1:72, + function(collLen) { + lapply(1:15, function(numPart) { + expected <- runif(collLen) + actual <- collect(parallelize(jsc, expected, numPart)) + expect_equal(actual, as.list(expected)) + }) + }) +}) + test_that("parallelize() and collect() work for lists of pairs (pairwise data)", { # use the pairwise logical to indicate pairwise data numPairsRDDD1 <- parallelize(jsc, numPairs, 1) From a5f573f38f787e56556f9c16262a611f7a6f798f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 14 Jul 2014 22:35:10 -0700 Subject: [PATCH 162/687] Use a better list append in shuffles This is helpful in scenarios where we have a large number of values in a bucket --- pkg/inst/worker/serialize.R | 14 ++++++++++++++ pkg/inst/worker/worker.R | 16 +++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index 50f2692e51f3c..faf930117e482 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -68,3 +68,17 @@ writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { } } } + +# Add an item to an accumulator. The accumulator should have +# three fields: size, counter and data +# +# This function amortizes the allocation cost by doubling +# the size of the list every time it fills up. +addItemToAccumulator <- function(acc, item) { + if(acc$counter == acc$size ) { + acc$size <- acc$size * 2 + length(acc$data) <- acc$size + } + acc$counter <- acc$counter + 1 + acc$data[[acc$counter]] <- item +} diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 5a2f5a9112c7a..0c0e5247b7bdd 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -100,8 +100,16 @@ if (isEmpty != 0) { hashVal <- do.call(execFunctionName, list(tuple[[1]])) bucket <- as.character(hashVal %% numPartitions) acc <- res[[bucket]] - # TODO?: http://stackoverflow.com/questions/2436688/append-an-object-to-a-list-in-r-in-amortized-constant-time - acc[[length(acc) + 1]] <- tuple + # Create a new accumulator + if (is.null(acc)) { + acc <- new.env() + acc$counter <- 0 + acc$data <- list(NULL) + acc$size <- 1 + } + # Fast append to list from + # http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r + addItemToAccumulator(acc, tuple) res[[bucket]] <- acc } invisible(lapply(data, hashTupleToEnvir)) @@ -110,7 +118,9 @@ if (isEmpty != 0) { for (name in ls(res)) { writeInt(outputCon, 2L) writeInt(outputCon, as.integer(name)) - writeRaw(outputCon, res[[name]]) + # Truncate the accumulator list to the number of elements we have + length(res[[name]]$data) <- res[[name]]$counter + writeRaw(outputCon, res[[name]]$data) } } } From 81251e2ca7c7397682a55f350bcc588c76a01880 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 15 Jul 2014 11:49:52 -0700 Subject: [PATCH 163/687] Address code review comments --- pkg/inst/worker/serialize.R | 7 ++++--- pkg/inst/worker/worker.R | 2 -- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index faf930117e482..69333429d13cf 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -69,13 +69,14 @@ writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { } } -# Add an item to an accumulator. The accumulator should have -# three fields: size, counter and data +# Fast append to list by using an accumulator. +# http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r # +# The accumulator should has three fields size, counter and data. # This function amortizes the allocation cost by doubling # the size of the list every time it fills up. addItemToAccumulator <- function(acc, item) { - if(acc$counter == acc$size ) { + if(acc$counter == acc$size) { acc$size <- acc$size * 2 length(acc$data) <- acc$size } diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 0c0e5247b7bdd..f5a8af310a4aa 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -107,8 +107,6 @@ if (isEmpty != 0) { acc$data <- list(NULL) acc$size <- 1 } - # Fast append to list from - # http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r addItemToAccumulator(acc, tuple) res[[bucket]] <- acc } From 2206164e5b16cb3aa20cf353867303a519744839 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 15 Jul 2014 19:15:35 -0700 Subject: [PATCH 164/687] Delete temporary files after they are read This change deletes temporary files used for communication between Rscript and the JVM once they have been completely read. --- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 2fb131563d894..84c6e37db4827 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -36,7 +36,7 @@ private class PairwiseRRDD[T: ClassTag]( RRDD.startStderrThread(proc) - RRDD.startStdinThread(rLibDir, proc, hashFunc, dataSerialized, + val tempFile = RRDD.startStdinThread(rLibDir, proc, hashFunc, dataSerialized, functionDependencies, packageNames, broadcastVars, firstParent[T].iterator(split, context), numPartitions, split.index) @@ -77,7 +77,15 @@ private class PairwiseRRDD[T: ClassTag]( } var _nextObj = read() - def hasNext = !(_nextObj._1 == 0 && _nextObj._2.length == 0) + def hasNext = { + val hasMore = !(_nextObj._1 == 0 && _nextObj._2.length == 0) + if (!hasMore) { + // Delete the temporary file we created as we are done reading it ? + dataStream.close() + tempFile.delete() + } + hasMore + } } } @@ -107,7 +115,7 @@ class RRDD[T: ClassTag]( RRDD.startStderrThread(proc) // Write -1 in numPartitions to indicate this is a normal RDD - RRDD.startStdinThread(rLibDir, proc, func, dataSerialized, + val tempFile = RRDD.startStdinThread(rLibDir, proc, func, dataSerialized, functionDependencies, packageNames, broadcastVars, firstParent[T].iterator(split, context), numPartitions = -1, split.index) @@ -147,7 +155,15 @@ class RRDD[T: ClassTag]( } var _nextObj = read() - def hasNext = _nextObj.length != 0 + def hasNext = { + val hasMore = _nextObj.length != 0 + if (!hasMore) { + // Delete the temporary file we created as we are done reading it ? + dataStream.close() + tempFile.delete() + } + hasMore + } } } @@ -225,7 +241,7 @@ object RRDD { broadcastVars: Array[Broadcast[Object]], iter: Iterator[T], numPartitions: Int, - splitIndex: Int) { + splitIndex: Int) : File = { val tempDir = System.getProperty("spark.local.dir", System.getProperty("java.io.tmpdir")).split(',')(0) @@ -288,5 +304,7 @@ object RRDD { stream.close() } }.start() + + tempFile } } From 8eb983db018f97e383c507da1154185fcb814253 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 16 Jul 2014 10:14:01 -0700 Subject: [PATCH 165/687] Fix up comment --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 84c6e37db4827..f30c21c226038 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -80,7 +80,7 @@ private class PairwiseRRDD[T: ClassTag]( def hasNext = { val hasMore = !(_nextObj._1 == 0 && _nextObj._2.length == 0) if (!hasMore) { - // Delete the temporary file we created as we are done reading it ? + // Delete the temporary file we created as we are done reading it dataStream.close() tempFile.delete() } @@ -158,7 +158,7 @@ class RRDD[T: ClassTag]( def hasNext = { val hasMore = _nextObj.length != 0 if (!hasMore) { - // Delete the temporary file we created as we are done reading it ? + // Delete the temporary file we created as we are done reading it dataStream.close() tempFile.delete() } From 90e2083cb87a3c9d67da91d826416aeb6468e8c4 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 16 Jul 2014 11:01:25 -0700 Subject: [PATCH 166/687] Add return type to hasNext --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index f30c21c226038..d5635d8e0d0fb 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -77,7 +77,7 @@ private class PairwiseRRDD[T: ClassTag]( } var _nextObj = read() - def hasNext = { + def hasNext(): Boolean = { val hasMore = !(_nextObj._1 == 0 && _nextObj._2.length == 0) if (!hasMore) { // Delete the temporary file we created as we are done reading it @@ -155,7 +155,7 @@ class RRDD[T: ClassTag]( } var _nextObj = read() - def hasNext = { + def hasNext(): Boolean = { val hasMore = _nextObj.length != 0 if (!hasMore) { // Delete the temporary file we created as we are done reading it From 4ffe146243e7510ffecdb9d63b5e4ca687d72b3c Mon Sep 17 00:00:00 2001 From: root Date: Mon, 18 Aug 2014 11:44:07 -0700 Subject: [PATCH 167/687] Makefile: factor out SPARKR_VERSION to reduce potential copy&paste error; cp & rm called with -f in build/clean phase; .gitignore includes checkpoints and unit test log generated by run-tests.sh --- .gitignore | 2 ++ pkg/src/Makefile | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 8b438f387a5e2..067b729ba3a59 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ *.ear .RData .Rhistory +unit-tests.log +checkpoints/ target/ lib/ work/ diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 0c21eab51dfbf..d43a4767b7995 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -1,8 +1,9 @@ SCALA_VERSION := 2.10 -JAR_NAME := sparkr-assembly-0.1.jar +SPARKR_VERSION :=0.1 +JAR_NAME := sparkr-assembly-$(SPARKR_VERSION).jar SBT_TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) -MAVEN_JAR_NAME := sparkr-0.1-assembly.jar +MAVEN_JAR_NAME := sparkr-$(SPARKR_VERSION)-assembly.jar MAVEN_TARGET_NAME := target/$(MAVEN_JAR_NAME) SCALA_SOURCE_DIR := src/main/scala/edu/berkeley/cs/amplab/sparkr @@ -25,11 +26,11 @@ all: $(TARGET_NAME) $(SBT_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) ./sbt/sbt assembly - cp $(SBT_TARGET_NAME) ../inst/ + cp -f $(SBT_TARGET_NAME) ../inst/ $(MAVEN_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -DskipTests clean package shade:shade - cp $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) + cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) clean: $(BUILD_TOOL) clean @@ -37,6 +38,6 @@ clean: rm -rf project/target rm -rf project/project -rm sbt/sbt-launch-*.jar - rm ../inst/$(JAR_NAME) + rm -f ../inst/$(JAR_NAME) .PHONY: all clean From 31608a4f93682be342da5db67bad84ecf32d483f Mon Sep 17 00:00:00 2001 From: edwardt Date: Thu, 21 Aug 2014 12:22:38 -0700 Subject: [PATCH 168/687] Update Makefile (style uniformity) Add a space for style uniformiity --- pkg/src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index d43a4767b7995..998ad6d22945e 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -1,5 +1,5 @@ SCALA_VERSION := 2.10 -SPARKR_VERSION :=0.1 +SPARKR_VERSION := 0.1 JAR_NAME := sparkr-assembly-$(SPARKR_VERSION).jar SBT_TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) From 16353f5ff3c3134ab3da66ec423bf9d8f94896a5 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 22 Aug 2014 20:37:29 -0700 Subject: [PATCH 169/687] add links to devtools and install_github --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6d4d0ee0fa0e1..091f9ea216bf1 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,9 @@ To develop SparkR, you can build the scala package and the R package using ./install-dev.sh -If you wish to try out the package directly from github, you can use `install_github` from `devtools` +If you wish to try out the package directly from github, you can use `install_github` from `devtools`. Note that you can specify which branch, tag etc to install from. See links below. +[install_github](http://www.inside-r.org/packages/cran/devtools/docs/install_github) +[devtools](http://www.inside-r.org/packages/cran/devtools) library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") From ce3337d69d40f03b15f4ae7dc223199cbb0d781a Mon Sep 17 00:00:00 2001 From: edwardt Date: Fri, 22 Aug 2014 20:41:17 -0700 Subject: [PATCH 170/687] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 091f9ea216bf1..7c535df25b659 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,7 @@ To develop SparkR, you can build the scala package and the R package using ./install-dev.sh -If you wish to try out the package directly from github, you can use `install_github` from `devtools`. Note that you can specify which branch, tag etc to install from. See links below. -[install_github](http://www.inside-r.org/packages/cran/devtools/docs/install_github) -[devtools](http://www.inside-r.org/packages/cran/devtools) +If you wish to try out the package directly from github, you can use [`install_github`](http://www.inside-r.org/packages/cran/devtools/docs/install_github) from [`devtools`](http://www.inside-r.org/packages/cran/devtools). Note that you can specify which branch, tag etc to install from. library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") From 61b4a432740a551f0acf02c835918f07a5083d90 Mon Sep 17 00:00:00 2001 From: edwardt Date: Thu, 21 Aug 2014 12:22:38 -0700 Subject: [PATCH 171/687] Update Makefile (style uniformity) Add a space for style uniformiity --- pkg/src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index d43a4767b7995..998ad6d22945e 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -1,5 +1,5 @@ SCALA_VERSION := 2.10 -SPARKR_VERSION :=0.1 +SPARKR_VERSION := 0.1 JAR_NAME := sparkr-assembly-$(SPARKR_VERSION).jar SBT_TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) From 469eae39eba913f79749f0ee633be71709ec10d7 Mon Sep 17 00:00:00 2001 From: edwardt Date: Fri, 22 Aug 2014 20:41:17 -0700 Subject: [PATCH 172/687] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 091f9ea216bf1..7c535df25b659 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,7 @@ To develop SparkR, you can build the scala package and the R package using ./install-dev.sh -If you wish to try out the package directly from github, you can use `install_github` from `devtools`. Note that you can specify which branch, tag etc to install from. See links below. -[install_github](http://www.inside-r.org/packages/cran/devtools/docs/install_github) -[devtools](http://www.inside-r.org/packages/cran/devtools) +If you wish to try out the package directly from github, you can use [`install_github`](http://www.inside-r.org/packages/cran/devtools/docs/install_github) from [`devtools`](http://www.inside-r.org/packages/cran/devtools). Note that you can specify which branch, tag etc to install from. library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") From c35c9a6ba70ae0b09c52964c26ba1cb7eb30e3e7 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 1 Sep 2014 14:51:37 -0700 Subject: [PATCH 173/687] Add where to enter bugs ad feeback --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7c535df25b659..8002a22b70310 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,13 @@ SparkR is an R package that provides a light-weight frontend to use Spark from R. +## Report Issues/Feedback +Since this is incubating Spark subproject and for better tracking and collaboration across, all prior SparkR TODOs and issues to JIRA hosted at [SparkR Feedback](https://sparkr.atlassian.net/browse/SPARKR/) +Please also report new issues/feedbacks/improvement at [SparkR Feedback](https://sparkr.atlassian.net/browse/SPARKR/) +To accelerate R on Spark, we value all your inputs. +In your pull request, please cross reference the ticket item created. Likewise, if you already have a pull request ready, please reference so in your ticket item. + + ## Installing SparkR ### Requirements @@ -24,7 +31,7 @@ To develop SparkR, you can build the scala package and the R package using ./install-dev.sh -If you wish to try out the package directly from github, you can use [`install_github`](http://www.inside-r.org/packages/cran/devtools/docs/install_github) from [`devtools`](http://www.inside-r.org/packages/cran/devtools). Note that you can specify which branch, tag etc to install from. +If you wish to try out the package directly from github, you can use `install_github` from `devtools` library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") From 3007015cb50e7e345acad2072863e9599d812822 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 1 Sep 2014 14:56:28 -0700 Subject: [PATCH 174/687] don't check in gedit buffer file' --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 067b729ba3a59..02f451c0b503d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,5 +12,7 @@ lib/ work/ # vim tmps .*.swp +*.*~ +*~ .Rproj.user SparkR-pkg.Rproj From 03e6ced6fd5491ed86685958d1219502eb313786 Mon Sep 17 00:00:00 2001 From: edwardt Date: Mon, 1 Sep 2014 18:56:28 -0700 Subject: [PATCH 175/687] Update README.md rewording and remove some unnecessary sentence --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8002a22b70310..6325539c247f6 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,8 @@ SparkR is an R package that provides a light-weight frontend to use Spark from R. ## Report Issues/Feedback -Since this is incubating Spark subproject and for better tracking and collaboration across, all prior SparkR TODOs and issues to JIRA hosted at [SparkR Feedback](https://sparkr.atlassian.net/browse/SPARKR/) -Please also report new issues/feedbacks/improvement at [SparkR Feedback](https://sparkr.atlassian.net/browse/SPARKR/) -To accelerate R on Spark, we value all your inputs. -In your pull request, please cross reference the ticket item created. Likewise, if you already have a pull request ready, please reference so in your ticket item. +For better tracking and collaboration across, all prior SparkR TODOs and issues to JIRA hosted at [SparkR Feedback](https://sparkr.atlassian.net/browse/SPARKR/) + In your pull request, please cross reference the ticket item created. Likewise, if you already have a pull request ready, please reference it in your ticket item. ## Installing SparkR From e522e692f2a8a33208bd38b25f71c301ce4009c0 Mon Sep 17 00:00:00 2001 From: edwardt Date: Mon, 1 Sep 2014 18:58:16 -0700 Subject: [PATCH 176/687] Update README.md further rewording per comment feedback --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6325539c247f6..5348e6acd64b2 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ SparkR is an R package that provides a light-weight frontend to use Spark from R. ## Report Issues/Feedback -For better tracking and collaboration across, all prior SparkR TODOs and issues to JIRA hosted at [SparkR Feedback](https://sparkr.atlassian.net/browse/SPARKR/) - In your pull request, please cross reference the ticket item created. Likewise, if you already have a pull request ready, please reference it in your ticket item. +For better tracking and collaboration, issues and TODO items are reported to a dedicated [SparkR JIRA](https://sparkr.atlassian.net/browse/SPARKR/). +In your pull request, please cross reference the ticket item created. Likewise, if you already have a pull request ready, please reference it in your ticket item. ## Installing SparkR From 615d930211e8d39d494bef31e481bb9983d20a35 Mon Sep 17 00:00:00 2001 From: edwardt Date: Mon, 1 Sep 2014 18:59:26 -0700 Subject: [PATCH 177/687] Update README.md Add blank lines for better seperations --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5348e6acd64b2..0de9dd49d4ba7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ SparkR is an R package that provides a light-weight frontend to use Spark from R. ## Report Issues/Feedback + For better tracking and collaboration, issues and TODO items are reported to a dedicated [SparkR JIRA](https://sparkr.atlassian.net/browse/SPARKR/). + In your pull request, please cross reference the ticket item created. Likewise, if you already have a pull request ready, please reference it in your ticket item. From b8bbd931a2582c8363d2f17e454dcbab107009e1 Mon Sep 17 00:00:00 2001 From: edwardt Date: Tue, 2 Sep 2014 07:52:14 -0700 Subject: [PATCH 178/687] Update README.md Move feedback toend of doc --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0de9dd49d4ba7..48f9ab260156e 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,6 @@ SparkR is an R package that provides a light-weight frontend to use Spark from R. -## Report Issues/Feedback - -For better tracking and collaboration, issues and TODO items are reported to a dedicated [SparkR JIRA](https://sparkr.atlassian.net/browse/SPARKR/). - -In your pull request, please cross reference the ticket item created. Likewise, if you already have a pull request ready, please reference it in your ticket item. - ## Installing SparkR @@ -95,3 +89,9 @@ You can also run the unit-tests for SparkR by running Instructions for running SparkR on EC2 can be found in the [SparkR wiki](https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-on-EC2). + +## Report Issues/Feedback + +For better tracking and collaboration, issues and TODO items are reported to a dedicated [SparkR JIRA](https://sparkr.atlassian.net/browse/SPARKR/). + +In your pull request, please cross reference the ticket item created. Likewise, if you already have a pull request ready, please reference it in your ticket item. From 70ffbfb9b5bffb4797ab29b65824f25fc4331416 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 22 Sep 2014 13:02:06 +0800 Subject: [PATCH 179/687] Fix a bug that modifications to build.sbt won't trigger rebuilding. --- pkg/src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 998ad6d22945e..c348994fce4ec 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -24,7 +24,7 @@ endif all: $(TARGET_NAME) -$(SBT_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) +$(SBT_TARGET_NAME): build.sbt $(SCALA_FILES) $(RESOURCE_FILES) ./sbt/sbt assembly cp -f $(SBT_TARGET_NAME) ../inst/ From b40911d3fddb2d5f08e58725e6127041d38fb9ab Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 22 Sep 2014 16:08:37 +0800 Subject: [PATCH 180/687] Fix syntax error in examples/kmeans.R. --- examples/kmeans.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/kmeans.R b/examples/kmeans.R index 1a5c622910598..4679a47bbeadb 100644 --- a/examples/kmeans.R +++ b/examples/kmeans.R @@ -14,8 +14,8 @@ dist.fun <- function(P, C) { C, 1, function(x) { - colSums((t(P) - x)^2)) - } + colSums((t(P) - x)^2)} + ) } closestPoint <- function(P, C) { From f62b77ee576fe7466a9e58eef5319fa528f4d32b Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 23 Sep 2014 07:59:42 +0800 Subject: [PATCH 181/687] Adjust coding style. --- examples/kmeans.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/kmeans.R b/examples/kmeans.R index 4679a47bbeadb..6fdbc824b89cd 100644 --- a/examples/kmeans.R +++ b/examples/kmeans.R @@ -14,8 +14,9 @@ dist.fun <- function(P, C) { C, 1, function(x) { - colSums((t(P) - x)^2)} - ) + colSums((t(P) - x)^2) + } + ) } closestPoint <- function(P, C) { From 5879648575b9a4a3d32d816d584f263f04b62c0b Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 22 Sep 2014 17:18:13 +0800 Subject: [PATCH 182/687] Add mapPartitions() method to RDD for API consistency. --- pkg/R/RDD.R | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 95c0b30bb2a5b..39e544f1337b5 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -428,6 +428,18 @@ setMethod("lapplyPartition", lapplyPartitionsWithIndex(X, function(s, part) { FUN(part) }) }) +#' @rdname mapPartitions +#' @export +setGeneric("mapPartitions", function(X, FUN) { + standardGeneric("mapPartitions") }) + +#' @rdname mapPartitions +#' @aliases mapPartitions,RDD,function-method +setMethod("mapPartitions", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + lapplyPartition(X, FUN) + }) #' Return a new RDD by applying a function to each partition of this RDD, while #' tracking the index of the original partition. From 0b2da9f6870dd72cf3315b7548d854d34643eaa2 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 25 Sep 2014 10:51:27 +0800 Subject: [PATCH 183/687] Update Rd file and add a test case for mapPartitions. --- pkg/NAMESPACE | 2 ++ pkg/R/RDD.R | 10 ++++++---- pkg/inst/tests/test_rdd.R | 6 ++++++ pkg/man/lapplyPartition.Rd | 19 +++++++++++++------ 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 910be3095f2a3..7b3365ba327e5 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -16,6 +16,8 @@ exportMethods( "lapplyPartition", "lapplyPartitionsWithIndex", "map", + "mapPartitions", + "mapPartitionsWithIndex", "partitionBy", "reduce", "reduceByKey", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 39e544f1337b5..6661d32ac4e25 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -186,8 +186,8 @@ setMethod("cache", #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10, 2L) -#' cache(rdd) # rdd@env$isCached == TRUE -#' unpersist(rdd) # rdd@env$isCached == FALSE +#' cache(rdd) # rdd@@env$isCached == TRUE +#' unpersist(rdd) # rdd@@env$isCached == FALSE #'} setGeneric("unpersist", function(rdd) { standardGeneric("unpersist") }) @@ -428,12 +428,14 @@ setMethod("lapplyPartition", lapplyPartitionsWithIndex(X, function(s, part) { FUN(part) }) }) -#' @rdname mapPartitions +#' mapPartitions is the same as lapplyPartition. +#' +#' @rdname lapplyPartition #' @export setGeneric("mapPartitions", function(X, FUN) { standardGeneric("mapPartitions") }) -#' @rdname mapPartitions +#' @rdname lapplyPartition #' @aliases mapPartitions,RDD,function-method setMethod("mapPartitions", signature(X = "RDD", FUN = "function"), diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 868424b4c9ed5..ba449b2576566 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -24,6 +24,12 @@ test_that("lapplyPartition on RDD", { expect_equal(actual, list(15, 40)) }) +test_that("mapPartitions on RDD", { + sums <- mapPartitions(rdd, function(part) { sum(unlist(part)) }) + actual <- collect(sums) + expect_equal(actual, list(15, 40)) +}) + test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { rdd2 <- rdd for (i in 1:12) diff --git a/pkg/man/lapplyPartition.Rd b/pkg/man/lapplyPartition.Rd index 771eb74fee9d6..0d3b6937e96a6 100644 --- a/pkg/man/lapplyPartition.Rd +++ b/pkg/man/lapplyPartition.Rd @@ -1,25 +1,32 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{lapplyPartition} \alias{lapplyPartition} \alias{lapplyPartition,RDD,function-method} +\alias{mapPartitions} +\alias{mapPartitions,RDD,function-method} \title{Apply a function to each partition of an RDD} \usage{ lapplyPartition(X, FUN) -\S4method{lapplyPartition}{RDD,function}(X, FUN) +\S4method{lapplyPartition}{RDD,`function`}(X, FUN) + +mapPartitions(X, FUN) + +\S4method{mapPartitions}{RDD,`function`}(X, FUN) } \arguments{ - \item{X}{The RDD to apply the transformation.} +\item{X}{The RDD to apply the transformation.} - \item{FUN}{the transformation to apply on each - partition.} +\item{FUN}{the transformation to apply on each partition.} } \value{ a new RDD created by the transformation. } \description{ -Return a new RDD by applying a function to each partition -of this RDD. +Return a new RDD by applying a function to each partition of this RDD. + +mapPartitions is the same as lapplyPartition. } \examples{ \dontrun{ From 993868f29947a6425c0ef5980c7671e142d5f6fe Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 25 Sep 2014 11:37:05 +0800 Subject: [PATCH 184/687] [SPARKR-117] Update Spark dependency to 1.1.0 --- pkg/src/Makefile | 2 +- pkg/src/build.sbt | 2 +- pkg/src/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index c348994fce4ec..1dcfe71fae152 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -28,7 +28,7 @@ $(SBT_TARGET_NAME): build.sbt $(SCALA_FILES) $(RESOURCE_FILES) ./sbt/sbt assembly cp -f $(SBT_TARGET_NAME) ../inst/ -$(MAVEN_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) +$(MAVEN_TARGET_NAME): pom.xml $(SCALA_FILES) $(RESOURCE_FILES) mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -DskipTests clean package shade:shade cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index e1d876e14884d..071656e8719f8 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -17,7 +17,7 @@ scalaVersion := "2.10.3" libraryDependencies ++= Seq( "org.slf4j" % "slf4j-api" % "1.7.2", "org.slf4j" % "slf4j-log4j12" % "1.7.2", - "org.apache.spark" % "spark-core_2.10" % "0.9.0-incubating" + "org.apache.spark" % "spark-core_2.10" % "1.1.0" ) { diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index 160e190b21dc1..dd2e44aa20bf4 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -55,7 +55,7 @@ org.apache.spark spark-core_2.10 - 0.9.0-incubating + 1.1.0 org.slf4j From 21f74da124bdaf3a0b8dc8016cf9fb1292fb0b99 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 25 Sep 2014 13:20:29 -0700 Subject: [PATCH 185/687] upgrade to spark version 1.1.0 to match lastest merge list --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 961bdedc470ed..1e197e7efd920 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,7 @@ R. ## Installing SparkR ### Requirements -SparkR requires Scala 2.10 and Spark version >= 0.9.0. Note that as -Spark 0.9.0 has not yet been released the current build uses the latest release +SparkR requires Scala 2.10 and Spark version >= 1.1.0. Current build uses the latest release candidate from the Apache staging repositories. You can also build SparkR against a different Spark version (>= 0.9) by modifying `pkg/src/build.sbt`. @@ -25,9 +24,7 @@ To develop SparkR, you can build the scala package and the R package using ./install-dev.sh - If you wish to try out the package directly from github, you can use [`install_github`](http://www.inside-r.org/packages/cran/devtools/docs/install_github) from [`devtools`](http://www.inside-r.org/packages/cran/devtools). Note that you can specify which branch, tag etc to install from. -======= library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") From 5380c431e75c5fe0868eb1fa87520f91fb3df558 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 25 Sep 2014 13:21:42 -0700 Subject: [PATCH 186/687] missed one version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e197e7efd920..62bc287959cff 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ R. ### Requirements SparkR requires Scala 2.10 and Spark version >= 1.1.0. Current build uses the latest release candidate from the Apache staging repositories. You can also build SparkR against a -different Spark version (>= 0.9) by modifying `pkg/src/build.sbt`. +different Spark version (>= 1.1.0) by modifying `pkg/src/build.sbt`. SparkR also requires the R package `rJava` to be installed. To install `rJava`, you can run the following command in R: From 1ba256e9f911037e63774611638e4b685f1ac586 Mon Sep 17 00:00:00 2001 From: edwardt Date: Thu, 25 Sep 2014 22:43:38 -0700 Subject: [PATCH 187/687] Keep 0.9.0 and says uses 1.1.0 by default --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 62bc287959cff..2da2df8eea3de 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ R. ## Installing SparkR ### Requirements -SparkR requires Scala 2.10 and Spark version >= 1.1.0. Current build uses the latest release +SparkR requires Scala 2.10 and Spark version >= 0.9.0. Current build by default uses the 1.1.0 candidate from the Apache staging repositories. You can also build SparkR against a different Spark version (>= 1.1.0) by modifying `pkg/src/build.sbt`. From b26deec42c0d8d81e4dc90ed94340e7944f6701a Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Fri, 26 Sep 2014 15:38:07 +0800 Subject: [PATCH 188/687] [SPARKR-94] Add a method to get an element of a pair RDD object by key. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 32 ++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 8 ++++++++ pkg/man/lookup.Rd | 31 +++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 pkg/man/lookup.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 7b3365ba327e5..c55a60b3b00b3 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -15,6 +15,7 @@ exportMethods( "lapply", "lapplyPartition", "lapplyPartitionsWithIndex", + "lookup", "map", "mapPartitions", "mapPartitionsWithIndex", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 6661d32ac4e25..64b10789c0fda 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -291,6 +291,38 @@ setMethod("collectPartition", }) +#' Look up elements of a key in an RDD +#' +#' @description +#' \code{lookup} returns a list of values in this RDD for key key. +#' +#' @param rdd The RDD to collect +#' @param key The key to look up for +#' @return a list of values in this RDD for key key +#' @rdname lookup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) +#' rdd <- parallelize(sc, pairs) +#' lookup(rdd, 1) # list(1, 3) +#'} +setGeneric("lookup", function(rdd, key) { standardGeneric("lookup") }) + +#' @rdname lookup +#' @aliases lookup,RDD-method +setMethod("lookup", + signature(rdd = "RDD", key = "ANY"), + function(rdd, key) { + partitionFunc <- function(part) { + filtered <- part[unlist(lapply(part, function(x) identical(key, x[[1]])))] + lapply(filtered, function(x) x[[2]]) + } + valsRDD <- lapplyPartition(rdd, partitionFunc) + collect(valsRDD) + }) + #' Return the number of elements in the RDD. #' #' @param rdd The RDD to count diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index ba449b2576566..236e1081ce4f7 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -7,6 +7,9 @@ sc <- sparkR.init() nums <- 1:10 rdd <- parallelize(sc, nums, 2L) +intPairs <- list(list(1L, -1), list(2L, 100), list(2L, 1), list(1L, 200)) +intRdd <- parallelize(sc, intPairs, 2L) + test_that("count and length on RDD", { expect_equal(count(rdd), 10) expect_equal(length(rdd), 10) @@ -30,6 +33,11 @@ test_that("mapPartitions on RDD", { expect_equal(actual, list(15, 40)) }) +test_that("lookup on RDD", { + vals <- lookup(intRdd, 1L) + expect_equal(vals, list(-1, 200)) +}) + test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { rdd2 <- rdd for (i in 1:12) diff --git a/pkg/man/lookup.Rd b/pkg/man/lookup.Rd new file mode 100644 index 0000000000000..00f34b2966c90 --- /dev/null +++ b/pkg/man/lookup.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{lookup} +\alias{lookup} +\alias{lookup,RDD-method} +\title{Look up elements of a key in an RDD} +\usage{ +lookup(rdd, key) + +\S4method{lookup}{RDD}(rdd, key) +} +\arguments{ +\item{rdd}{The RDD to collect} + +\item{key}{The key to look up for} +} +\value{ +a list of values in this RDD for key key +} +\description{ +\code{lookup} returns a list of values in this RDD for key key. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +pairs <- list(c(1, 1), c(2, 2), c(1, 3)) +rdd <- parallelize(sc, pairs) +lookup(rdd, 1) # list(1, 3) +} +} + From 36776c57a21f2570690f330a3693ad01a0aa4847 Mon Sep 17 00:00:00 2001 From: edwardt Date: Fri, 26 Sep 2014 10:29:46 -0700 Subject: [PATCH 189/687] missed one 0.9.0 revert --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2da2df8eea3de..224b9e47bae2d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ R. ### Requirements SparkR requires Scala 2.10 and Spark version >= 0.9.0. Current build by default uses the 1.1.0 candidate from the Apache staging repositories. You can also build SparkR against a -different Spark version (>= 1.1.0) by modifying `pkg/src/build.sbt`. +different Spark version (>= 0.9.0) by modifying `pkg/src/build.sbt`. SparkR also requires the R package `rJava` to be installed. To install `rJava`, you can run the following command in R: From fbb56639ef9a2f2f5ef818a04ab729c350adc56a Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Sat, 27 Sep 2014 08:06:09 +0800 Subject: [PATCH 190/687] Add {} to one-line functions and add a test case for lookup where no match is found. --- pkg/R/RDD.R | 4 ++-- pkg/inst/tests/test_rdd.R | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 64b10789c0fda..30de62e84b915 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -316,8 +316,8 @@ setMethod("lookup", signature(rdd = "RDD", key = "ANY"), function(rdd, key) { partitionFunc <- function(part) { - filtered <- part[unlist(lapply(part, function(x) identical(key, x[[1]])))] - lapply(filtered, function(x) x[[2]]) + filtered <- part[unlist(lapply(part, function(x) { identical(key, x[[1]]) }))] + lapply(filtered, function(x) { x[[2]] }) } valsRDD <- lapplyPartition(rdd, partitionFunc) collect(valsRDD) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 236e1081ce4f7..8147f720b4fd5 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -36,6 +36,9 @@ test_that("mapPartitions on RDD", { test_that("lookup on RDD", { vals <- lookup(intRdd, 1L) expect_equal(vals, list(-1, 200)) + + vals <- lookup(intRdd, 3L) + expect_equal(vals, list()) }) test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { From 5ecbe3ec8a899e0268fe1c629a4bf7b8aef04587 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 26 Sep 2014 19:08:59 -0700 Subject: [PATCH 191/687] Make spark verison configurable in build script per ISSUE122 --- pkg/src/Makefile | 3 ++- pkg/src/pom.xml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 1dcfe71fae152..9debb9fa98a7a 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -13,6 +13,7 @@ SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) SPARK_HADOOP_VERSION ?= 1.0.4 +SPARK_VERSION ?= 1.1.0 ifdef USE_MAVEN TARGET_NAME := $(MAVEN_TARGET_NAME) @@ -29,7 +30,7 @@ $(SBT_TARGET_NAME): build.sbt $(SCALA_FILES) $(RESOURCE_FILES) cp -f $(SBT_TARGET_NAME) ../inst/ $(MAVEN_TARGET_NAME): pom.xml $(SCALA_FILES) $(RESOURCE_FILES) - mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -DskipTests clean package shade:shade + mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -Dspark.version=$(SPARK_VERSION) -DskipTests clean package shade:shade cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) clean: diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index dd2e44aa20bf4..15874db6bc7c2 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -55,7 +55,7 @@ org.apache.spark spark-core_2.10 - 1.1.0 + ${spark.version} org.slf4j From f3fcb1005afcb599b67da46aad291277ba0ba649 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 27 Sep 2014 21:55:40 -0700 Subject: [PATCH 192/687] fix up build.sbt also to match pom.xml --- pkg/src/Makefile | 1 + pkg/src/build.sbt | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 9debb9fa98a7a..6332fc3e00dbf 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -1,3 +1,4 @@ + SCALA_VERSION := 2.10 SPARKR_VERSION := 0.1 JAR_NAME := sparkr-assembly-$(SPARKR_VERSION).jar diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 071656e8719f8..f9c59916c6aa5 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -16,8 +16,7 @@ scalaVersion := "2.10.3" libraryDependencies ++= Seq( "org.slf4j" % "slf4j-api" % "1.7.2", - "org.slf4j" % "slf4j-log4j12" % "1.7.2", - "org.apache.spark" % "spark-core_2.10" % "1.1.0" + "org.slf4j" % "slf4j-log4j12" % "1.7.2" ) { @@ -27,9 +26,11 @@ libraryDependencies ++= Seq( val excludeAsm = ExclusionRule(organization = "asm") val excludeSnappy = ExclusionRule(organization = "org.xerial.snappy") val defaultHadoopVersion = "1.0.4" - val hadoopVersion = - scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) + val defaultSparkVersion = "1.1.0" + val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) + val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) libraryDependencies += "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) + libraryDependencies += "org.apache.spark" % "spark-core_2.10" % sparkVersion } resolvers ++= Seq( From 72a9d2708025ec7ec781e2dbc257e3db04c230ee Mon Sep 17 00:00:00 2001 From: root Date: Sat, 27 Sep 2014 22:35:24 -0700 Subject: [PATCH 193/687] reorder to keep relative ordering the same --- pkg/src/build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index f9c59916c6aa5..d3302d9f6b4f9 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -27,8 +27,8 @@ libraryDependencies ++= Seq( val excludeSnappy = ExclusionRule(organization = "org.xerial.snappy") val defaultHadoopVersion = "1.0.4" val defaultSparkVersion = "1.1.0" - val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) + val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies += "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) libraryDependencies += "org.apache.spark" % "spark-core_2.10" % sparkVersion } From 08dac06493c4439b51399efdc8c683e792f26524 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Sat, 11 Oct 2014 16:18:45 +0800 Subject: [PATCH 194/687] [SPARKR-125] Get the iterator of the parent RDD before launching a R worker process in compute() of RRDD/PairwiseRRDD --- .../main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index d5635d8e0d0fb..eaaa803dab360 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -31,6 +31,8 @@ private class PairwiseRRDD[T: ClassTag]( override def compute(split: Partition, context: TaskContext): Iterator[(Int, Array[Byte])] = { + val parentIterator = firstParent[T].iterator(split, context) + val pb = RRDD.rWorkerProcessBuilder(rLibDir) val proc = pb.start() @@ -38,7 +40,7 @@ private class PairwiseRRDD[T: ClassTag]( val tempFile = RRDD.startStdinThread(rLibDir, proc, hashFunc, dataSerialized, functionDependencies, packageNames, broadcastVars, - firstParent[T].iterator(split, context), numPartitions, + parentIterator, numPartitions, split.index) // Return an iterator that read lines from the process's stdout @@ -109,6 +111,8 @@ class RRDD[T: ClassTag]( override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { + val parentIterator = firstParent[T].iterator(split, context) + val pb = RRDD.rWorkerProcessBuilder(rLibDir) val proc = pb.start() @@ -117,8 +121,7 @@ class RRDD[T: ClassTag]( // Write -1 in numPartitions to indicate this is a normal RDD val tempFile = RRDD.startStdinThread(rLibDir, proc, func, dataSerialized, functionDependencies, packageNames, broadcastVars, - firstParent[T].iterator(split, context), - numPartitions = -1, split.index) + parentIterator, numPartitions = -1, split.index) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) From e37a9b59daad41b44da49fd46f7ab7ae9422ef19 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sun, 12 Oct 2014 23:32:21 -0400 Subject: [PATCH 195/687] Adds function distinct() and mapValues(). --- pkg/NAMESPACE | 2 ++ pkg/R/RDD.R | 56 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 14 ++++++++++ 3 files changed, 72 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index c55a60b3b00b3..0d6bc72d498dc 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -9,6 +9,7 @@ exportMethods( "collectPartition", "combineByKey", "count", + "distinct", "flatMap", "groupByKey", "length", @@ -19,6 +20,7 @@ exportMethods( "map", "mapPartitions", "mapPartitionsWithIndex", + "mapValues", "partitionBy", "reduce", "reduceByKey", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 30de62e84b915..74ff37e17accc 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -602,6 +602,33 @@ setMethod("take", resList }) +#' Removes the duplicates from RDD. +#' +#' This function returns a new RDD containing the distinct elements in the +#' given RDD. The same as `distinct()' in Spark. +#' +#' @param rdd The RDD to remove duplicates from +#' @rdname distinct +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, c(1,2,2,3,3,3)) +#' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) +#'} +setGeneric("distinct", function(rdd) { standardGeneric("distinct") }) + +#' @rdname distinct +#' @aliases distinct,RDD +setMethod("distinct", + signature(rdd = "RDD"), + function(rdd) { + identical.mapped <- lapply(rdd, function(x) list(x, NULL)) + reduced <- reduceByKey(identical.mapped, + function(x, y) x, as.integer(2)) + resRDD <- lapply(reduced, function(x) x[[1]]) + resRDD + }) #' Return an RDD that is a sampled subset of the given RDD. #' @@ -741,6 +768,35 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", sample(samples)[1:total] }) +#' Applys a function to all values of the elements, without modifying the keys. +#' +#' The same as `mapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. +#' @rdname mapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' makePairs <- lapply(rdd, function(x) list(x, x)) +#' collect(mapValues(makePairs, function(x) x * 2)) +#' Output: list(list(1,2), list(2,4), list(3,6), ...) +#'} +setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) + +#' @rdname mapValues +#' @aliases mapValues,RDD,function-method +setMethod("mapValues", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + func <- function(x) { + list(x[[1]], FUN(x[[2]])) + } + lapply(X, func) + }) ############ Shuffle Functions ############ diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 8147f720b4fd5..f9259e26163aa 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -162,3 +162,17 @@ test_that("takeSample() on RDDs", { expect_true(length(unique(s)) < 100L) } }) + +test_that("mapValues() on pairwise RDDs", { + multiples <- mapValues(intRdd, function(x) x * 2) + actual <- collect(multiples) + expect_equal(actual, lapply(intPairs, function(x) list(x[[1]], x[[2]] * 2))) +}) + +test_that("distinct() on RDDs", { + nums.rep2 <- rep(1:10, 2) + rdd.rep2 <- parallelize(sc, nums.rep2, 2L) + uniques <- distinct(rdd.rep2) + actual <- sort(unlist(collect(uniques))) + expect_equal(actual, nums) +}) From 80d303a42fccdebbfc88332befe2f7705502c41a Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sun, 12 Oct 2014 23:37:15 -0400 Subject: [PATCH 196/687] typo fixed. --- pkg/R/RDD.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 74ff37e17accc..c4959099576e6 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -768,7 +768,7 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", sample(samples)[1:total] }) -#' Applys a function to all values of the elements, without modifying the keys. +#' Applies a function to all values of the elements, without modifying the keys. #' #' The same as `mapValues()' in Spark. #' From 4accba14b511be913ee2066b9116f738f1023356 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 13 Oct 2014 11:09:35 -0400 Subject: [PATCH 197/687] Fixes style and adds an optional param 'numPartition' in distinct(). --- pkg/R/RDD.R | 29 +++++++++++++++++++---------- pkg/inst/tests/test_rdd.R | 6 ++++-- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c4959099576e6..3be60465cccb3 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -607,7 +607,8 @@ setMethod("take", #' This function returns a new RDD containing the distinct elements in the #' given RDD. The same as `distinct()' in Spark. #' -#' @param rdd The RDD to remove duplicates from +#' @param rdd The RDD to remove duplicates from. +#' @param numPartitions Number of partitions to create. #' @rdname distinct #' @export #' @examples @@ -616,17 +617,25 @@ setMethod("take", #' rdd <- parallelize(sc, c(1,2,2,3,3,3)) #' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) #'} -setGeneric("distinct", function(rdd) { standardGeneric("distinct") }) +setGeneric("distinct", + function(rdd, numPartitions) { standardGeneric("distinct") }) +setClassUnion("missingOrInteger", c("missing", "integer")) #' @rdname distinct -#' @aliases distinct,RDD +#' @aliases distinct,RDD,missingOrInteger-method setMethod("distinct", - signature(rdd = "RDD"), - function(rdd) { - identical.mapped <- lapply(rdd, function(x) list(x, NULL)) + signature(rdd = "RDD", numPartitions = "missingOrInteger"), + function(rdd, numPartitions) { + if (missing(numPartitions)) { + jrdd <- getJRDD(rdd) + partitions <- .jcall(jrdd, "Ljava/util/List;", "splits") + numPartitions <- .jcall(partitions, "I", "size") + } + identical.mapped <- lapply(rdd, function(x) { list(x, NULL) }) reduced <- reduceByKey(identical.mapped, - function(x, y) x, as.integer(2)) - resRDD <- lapply(reduced, function(x) x[[1]]) + function(x, y) { x }, + numPartitions) + resRDD <- lapply(reduced, function(x) { x[[1]] }) resRDD }) @@ -781,8 +790,8 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) -#' makePairs <- lapply(rdd, function(x) list(x, x)) -#' collect(mapValues(makePairs, function(x) x * 2)) +#' makePairs <- lapply(rdd, function(x) { list(x, x) }) +#' collect(mapValues(makePairs, function(x) { x * 2) }) #' Output: list(list(1,2), list(2,4), list(3,6), ...) #'} setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index f9259e26163aa..7e1e6377d9a96 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -164,9 +164,11 @@ test_that("takeSample() on RDDs", { }) test_that("mapValues() on pairwise RDDs", { - multiples <- mapValues(intRdd, function(x) x * 2) + multiples <- mapValues(intRdd, function(x) { x * 2 }) actual <- collect(multiples) - expect_equal(actual, lapply(intPairs, function(x) list(x[[1]], x[[2]] * 2))) + expect_equal(actual, lapply(intPairs, function(x) { + list(x[[1]], x[[2]] * 2) + })) }) test_that("distinct() on RDDs", { From 07bf971a9148cde8601eab6ce18ac3b8350b5116 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 14 Oct 2014 14:47:57 +0800 Subject: [PATCH 198/687] [SPARKR-108] Implement map-side reduction for reduceByKey(). --- pkg/R/RDD.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 30de62e84b915..f1e82516a75fb 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -921,8 +921,6 @@ setGeneric("reduceByKey", setMethod("reduceByKey", signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), function(rdd, combineFunc, numPartitions) { - # TODO: Implement map-side combine - shuffled <- partitionBy(rdd, numPartitions) reduceVals <- function(part) { vals <- new.env() keys <- new.env() @@ -943,6 +941,8 @@ setMethod("reduceByKey", }) combined } + locallyReduced <- lapplyPartition(rdd, reduceVals) + shuffled <- partitionBy(locallyReduced, numPartitions) lapplyPartition(shuffled, reduceVals) }) From 17ec42efe6c4ff7d8656a5d922efbb1a819a6b27 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Thu, 23 Oct 2014 12:07:13 -0400 Subject: [PATCH 199/687] A modification to dynamically create a sparkContext with YARN. sparkR.R modified to pass custom Jar file names and EnvironmentEnv to the sparkConf. RRDD.scala was also modified to accept the new inputs to creatSparkContext. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Usage Example: Note that in this example SparkR was built with spark 1.1.0 and hadoop 2.3.0. Follow instruction here https://github.com/amplab-extras/SparkR-pkg#package-installation Make sure to add the spark assembly jar to classpath and YARN. In this case I used spark-assembly-1.1.0-hadoop2.3.0.jar Also, very important, the hadoop conf folder needs to be added to classpath. In my case it was /etc/hadoop/conf/ ### set class paths ### .jaddClassPath("/usr/lib/spark/lib/spark-assembly-1.1.0-hadoop2.3.0.jar") .jaddClassPath("/etc/hadoop/conf/") .jaddClassPath(“other jar to pass into YARN.jar”) ### set the user system variables for hadoop ### USER="username" Sys.setenv(user.name=USER) Sys.setenv(HADOOP_USER_NAME=USER) ### set variables for the Spark context on yarn ### context="yarn-client" appName = "SparkR" sparkHome = Sys.getenv("SPARK_HOME") sparkJars=c("other jar to pass into YARN.jar") sparkEnvir=list(spark.executor.memory=“2G") sparkExecutorEnv=list(SPARK_YARN_APP_JAR=paste0(.libPaths()[1],"/SparkR/sparkr-assembly-0.1.jar"), SPARK_WORKER_INSTANCES="2", SPARK_WORKER_CORES="4", SPARK_WORKER_MEMORY="2G", SPARK_MASTER_MEMORY="2G", SPARK_YARN_APP_NAME="SparkR", SPARK_YARN_DIST_ARCHIVES="/usr/lib/spark/lib/spark-assembly-1.1.0-hadoop2.3.0.jar") ### start the Spark Context ### sc <- sparkR.init(master=context,sparkJars=sparkJars,sparkEnvir = sparkEnvir,sparkExecutorEnv=sparkExecutorEnv) --- pkg/R/sparkR.R | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 81f4e351c064d..03af21e8acf58 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -32,7 +32,9 @@ sparkR.init <- function( master = "local", appName = "SparkR", sparkHome = Sys.getenv("SPARK_HOME"), - sparkEnvir = list() ) { + sparkEnvir = list(), + sparkJars = "", + sparkExecutorEnv = list()) { if (exists(".sparkRjsc", envir=.sparkREnv)) { return(get(".sparkRjsc", envir=.sparkREnv)) @@ -46,7 +48,14 @@ sparkR.init <- function( for (varname in names(sparkEnvir)) { hm$put(varname, sparkEnvir[[varname]]) } - + + ee <- .jnew("java/util/HashMap") + for (varname in names(sparkExecutorEnv)) { + ee$put(varname, sparkExecutorEnv[[varname]]) + } + + jars=c(as.character(.sparkREnv$assemblyJarPath),as.character(sparkJars)) + assign( ".sparkRjsc", J("edu.berkeley.cs.amplab.sparkr.RRDD", @@ -54,9 +63,9 @@ sparkR.init <- function( master, appName, as.character(sparkHome), - .jarray(as.character(.sparkREnv$assemblyJarPath), - "java/lang/String"), - hm), + .jarray(jars,"java/lang/String"), + hm, + ee ), envir=.sparkREnv ) From 39eea2f128aa3d91caa0f6044cc765ec62521036 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Thu, 23 Oct 2014 12:13:09 -0400 Subject: [PATCH 200/687] Modification to dynamically create a sparkContext with YARN. Added .setExecutorEnv to the sparkConf in createSparkContext within the RRDD object. This modification was made together with sparkR.R --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index eaaa803dab360..a85aa9469fe2c 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -181,7 +181,8 @@ object RRDD { appName: String, sparkHome: String, jars: Array[String], - vars: JMap[Object, Object]): JavaSparkContext = { + vars: JMap[Object, Object], + eevars: JMap[Object, Object]): JavaSparkContext = { val sparkConf = new SparkConf().setMaster(master) .setAppName(appName) @@ -190,6 +191,9 @@ object RRDD { for ( (name, value) <- vars) { sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) } + for ( (name, value) <- eevars) { + sparkConf.setExecutorEnv(name.asInstanceOf[String], value.asInstanceOf[String]) + } new JavaSparkContext(sparkConf) } From 578f545107fbad5f901d7a7bda707e93b7823dd9 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Thu, 23 Oct 2014 13:02:55 -0400 Subject: [PATCH 201/687] a few stylistic changes --- pkg/R/sparkR.R | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 03af21e8acf58..9743d7eaa9eb4 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -44,17 +44,17 @@ sparkR.init <- function( sparkHome <- normalizePath(sparkHome) } - hm <- .jnew("java/util/HashMap") + sparkEnvirMap <- .jnew("java/util/HashMap") for (varname in names(sparkEnvir)) { hm$put(varname, sparkEnvir[[varname]]) } - ee <- .jnew("java/util/HashMap") + ExecutorEnv <- .jnew("java/util/HashMap") for (varname in names(sparkExecutorEnv)) { ee$put(varname, sparkExecutorEnv[[varname]]) } - jars=c(as.character(.sparkREnv$assemblyJarPath),as.character(sparkJars)) + jars=c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) assign( ".sparkRjsc", @@ -63,9 +63,9 @@ sparkR.init <- function( master, appName, as.character(sparkHome), - .jarray(jars,"java/lang/String"), - hm, - ee ), + .jarray(jars, "java/lang/String"), + sparkEnvirMap, + ExecutorEnv), envir=.sparkREnv ) From 9d5e3ab8738d4d760d24b7dde637d5ad41aabec5 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Thu, 23 Oct 2014 13:07:05 -0400 Subject: [PATCH 202/687] a few stylistic changes. Also change vars to sparkEnvirMap and eevars to ExecutorEnv, to match sparkR.R --- .../main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index a85aa9469fe2c..f127ea6e8e357 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -181,17 +181,17 @@ object RRDD { appName: String, sparkHome: String, jars: Array[String], - vars: JMap[Object, Object], - eevars: JMap[Object, Object]): JavaSparkContext = { + sparkEnvirMap: JMap[Object, Object], + ExecutorEnv: JMap[Object, Object]): JavaSparkContext = { val sparkConf = new SparkConf().setMaster(master) .setAppName(appName) .setSparkHome(sparkHome) .setJars(jars) - for ( (name, value) <- vars) { + for ((name, value) <- sparkEnvirMap) { sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) } - for ( (name, value) <- eevars) { + for ((name, value) <- ExecutorEnv) { sparkConf.setExecutorEnv(name.asInstanceOf[String], value.asInstanceOf[String]) } new JavaSparkContext(sparkConf) From 51bbbe46a0d2cb3249164d49706adb523df97533 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 28 Oct 2014 15:20:01 -0700 Subject: [PATCH 203/687] Changes to make SparkR work with YARN --- pkg/src/Makefile | 11 +++- pkg/src/build.sbt | 9 +++ pkg/src/pom.xml | 164 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 181 insertions(+), 3 deletions(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 6332fc3e00dbf..77385d1cd6f16 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -15,6 +15,7 @@ RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) SPARK_HADOOP_VERSION ?= 1.0.4 SPARK_VERSION ?= 1.1.0 +SPARK_YARN_VERSION ?= 2.4.0 ifdef USE_MAVEN TARGET_NAME := $(MAVEN_TARGET_NAME) @@ -24,6 +25,14 @@ else BUILD_TOOL := sbt/sbt endif +ifdef USE_YARN + MAVEN_YARN_FLAG := "-Pyarn" + SBT_YARN_FLAG := "yarn" +else + MAVEN_YARN_FLAG := "" + SBT_YARN_FLAG := "" +endif + all: $(TARGET_NAME) $(SBT_TARGET_NAME): build.sbt $(SCALA_FILES) $(RESOURCE_FILES) @@ -31,7 +40,7 @@ $(SBT_TARGET_NAME): build.sbt $(SCALA_FILES) $(RESOURCE_FILES) cp -f $(SBT_TARGET_NAME) ../inst/ $(MAVEN_TARGET_NAME): pom.xml $(SCALA_FILES) $(RESOURCE_FILES) - mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -Dspark.version=$(SPARK_VERSION) -DskipTests clean package shade:shade + mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -Dspark.version=$(SPARK_VERSION) -DskipTests $(MAVEN_YARN_FLAG) -Dyarn.version=$(SPARK_YARN_VERSION) clean package shade:shade cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) clean: diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index d3302d9f6b4f9..e664baed2294b 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -25,6 +25,15 @@ libraryDependencies ++= Seq( val excludeNetty = ExclusionRule(organization = "org.jboss.netty") val excludeAsm = ExclusionRule(organization = "asm") val excludeSnappy = ExclusionRule(organization = "org.xerial.snappy") + val sbtYarnFlag = scala.util.Properties.envOrElse("SBT_YARN_FLAG", "") + if (sbtYarnFlag == "yarn") { + val defaultYarnVersion = "2.4.0" + val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) + libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-api" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) + libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-common" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) + libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-server-web-proxy" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) + libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-client" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) + } val defaultHadoopVersion = "1.0.4" val defaultSparkVersion = "1.1.0" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index 15874db6bc7c2..fd247a741fb64 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -6,6 +6,51 @@ jar 0.1 + + central + + Maven Repository + https://repo1.maven.org/maven2 + + true + + + false + + + + apache-repo + Apache Repository + https://repository.apache.org/content/repositories/releases + + true + + + false + + + + jboss-repo + JBoss Repository + https://repository.jboss.org/nexus/content/repositories/releases + + true + + + false + + + + cloudera-repo + Cloudera Repository + https://repository.cloudera.com/artifactory/cloudera-repos + + true + + + false + + Spray.cc repository http://repo.spray.cc @@ -73,6 +118,7 @@ 2.10.3 + UTF-8 @@ -82,8 +128,6 @@ 2.10.3 2.10 - 1.0.4 - 64m 512m @@ -298,4 +342,120 @@ + + + yarn + + + org.apache.hadoop + hadoop-yarn-api + ${yarn.version} + + + javax.servlet + servlet-api + + + asm + asm + + + org.ow2.asm + asm + + + org.jboss.netty + netty + + + commons-logging + commons-logging + + + + + org.apache.hadoop + hadoop-yarn-common + ${yarn.version} + + + asm + asm + + + org.ow2.asm + asm + + + org.jboss.netty + netty + + + javax.servlet + servlet-api + + + commons-logging + commons-logging + + + + + org.apache.hadoop + hadoop-yarn-server-web-proxy + ${yarn.version} + + + asm + asm + + + org.ow2.asm + asm + + + org.jboss.netty + netty + + + javax.servlet + servlet-api + + + commons-logging + commons-logging + + + + + org.apache.hadoop + hadoop-yarn-client + ${yarn.version} + + + asm + asm + + + org.ow2.asm + asm + + + org.jboss.netty + netty + + + javax.servlet + servlet-api + + + commons-logging + commons-logging + + + + + + + From 4917607a0176267fc05ea4b5209bcde630948e4e Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 29 Oct 2014 12:26:09 +0800 Subject: [PATCH 204/687] Add maximum() and minimum() API to RDD. --- pkg/NAMESPACE | 2 ++ pkg/R/RDD.R | 56 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 10 +++++++ pkg/man/maximum.Rd | 26 ++++++++++++++++++ pkg/man/minimum.Rd | 26 ++++++++++++++++++ 5 files changed, 120 insertions(+) create mode 100644 pkg/man/maximum.Rd create mode 100644 pkg/man/minimum.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 0d6bc72d498dc..4db74234a08e6 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -21,6 +21,8 @@ exportMethods( "mapPartitions", "mapPartitionsWithIndex", "mapValues", + "maximum", + "minimum", "partitionBy", "reduce", "reduceByKey", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 433bc2d186ddb..871164e99ecd2 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -554,6 +554,62 @@ setMethod("reduce", Reduce(func, partitionList) }) +#' Get the maximum element of an RDD. +#' +#' @param rdd The RDD to get the maximum element from +#' @export +#' @rdname maximum +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' maximum(rdd) # 10 +#'} +setGeneric("maximum", function(rdd) { standardGeneric("maximum") }) + +#' @rdname maximum +#' @aliases maximum,RDD +setMethod("maximum", + signature(rdd = "RDD"), + function(rdd) { + + maxInPartition <- function(part) { + max(unlist(part, recursive=FALSE)) + } + + partitionList <- collect(lapplyPartition(rdd, maxInPartition), + flatten=FALSE) + max(unlist(partitionList, recursive=FALSE)) + }) + +#' Get the minimum element of an RDD. +#' +#' @param rdd The RDD to get the minimum element from +#' @export +#' @rdname minimum +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' minimum(rdd) # 1 +#'} +setGeneric("minimum", function(rdd) { standardGeneric("minimum") }) + +#' @rdname minimum +#' @aliases minimum,RDD +setMethod("minimum", + signature(rdd = "RDD"), + function(rdd) { + + minInPartition <- function(part) { + min(unlist(part, recursive=FALSE)) + } + + partitionList <- collect(lapplyPartition(rdd, minInPartition), + flatten=FALSE) + min(unlist(partitionList, recursive=FALSE)) + }) + #' Take elements from an RDD. #' #' This function takes the first NUM elements in the RDD and diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 7e1e6377d9a96..c32d62189dc7c 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -178,3 +178,13 @@ test_that("distinct() on RDDs", { actual <- sort(unlist(collect(uniques))) expect_equal(actual, nums) }) + +test_that("maximum() on RDDs", { + max <- maximum(rdd) + expect_equal(max, 10) +}) + +test_that("minimum() on RDDs", { + min <- minimum(rdd) + expect_equal(min, 1) +}) diff --git a/pkg/man/maximum.Rd b/pkg/man/maximum.Rd new file mode 100644 index 0000000000000..8142ead15805f --- /dev/null +++ b/pkg/man/maximum.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{maximum} +\alias{maximum} +\alias{maximum,RDD} +\alias{maximum,RDD-method} +\title{Get the maximum element of an RDD.} +\usage{ +maximum(rdd) + +\S4method{maximum}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD to get the maximum element from} +} +\description{ +Get the maximum element of an RDD. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +maximum(rdd) # 10 +} +} + diff --git a/pkg/man/minimum.Rd b/pkg/man/minimum.Rd new file mode 100644 index 0000000000000..177325ecd9b4c --- /dev/null +++ b/pkg/man/minimum.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{minimum} +\alias{minimum} +\alias{minimum,RDD} +\alias{minimum,RDD-method} +\title{Get the minimum element of an RDD.} +\usage{ +minimum(rdd) + +\S4method{minimum}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD to get the minimum element from} +} +\description{ +Get the minimum element of an RDD. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +minimum(rdd) # 1 +} +} + From af5fe77b9c77748b3ed9b8d43ab1a31cc71be8ab Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 28 Oct 2014 23:26:57 -0700 Subject: [PATCH 205/687] Fix SBT build, add dependency tree plugin --- pkg/src/build.sbt | 29 +++++++++++++++++++---------- pkg/src/project/plugins.sbt | 2 ++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index e664baed2294b..800b7ba35c3c2 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -6,6 +6,8 @@ import AssemblyKeys._ assemblySettings +net.virtualvoid.sbt.graph.Plugin.graphSettings + name := "sparkr" version := "0.1" @@ -26,20 +28,27 @@ libraryDependencies ++= Seq( val excludeAsm = ExclusionRule(organization = "asm") val excludeSnappy = ExclusionRule(organization = "org.xerial.snappy") val sbtYarnFlag = scala.util.Properties.envOrElse("SBT_YARN_FLAG", "") - if (sbtYarnFlag == "yarn") { - val defaultYarnVersion = "2.4.0" - val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) - libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-api" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) - libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-common" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) - libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-server-web-proxy" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) - libraryDependencies += "org.apache.hadoop" % "hadoop-yarn-client" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) - } val defaultHadoopVersion = "1.0.4" val defaultSparkVersion = "1.1.0" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) - libraryDependencies += "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib) - libraryDependencies += "org.apache.spark" % "spark-core_2.10" % sparkVersion + libraryDependencies ++= Seq( + "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), + "org.apache.spark" % "spark-core_2.10" % sparkVersion + ) ++ (if (sbtYarnFlag == "yarn") { + val defaultYarnVersion = "2.4.0" + val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) + Seq( + "org.apache.hadoop" % "hadoop-yarn-api" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), + "org.apache.hadoop" % "hadoop-yarn-common" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), + "org.apache.hadoop" % "hadoop-yarn-server-web-proxy" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), + "org.apache.hadoop" % "hadoop-yarn-client" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), + "org.apache.spark" % "spark-yarn_2.10" % sparkVersion + ) + } else { + None.toSeq + } + ) } resolvers ++= Seq( diff --git a/pkg/src/project/plugins.sbt b/pkg/src/project/plugins.sbt index 6d31a65f305a3..e5f9f66607e5a 100644 --- a/pkg/src/project/plugins.sbt +++ b/pkg/src/project/plugins.sbt @@ -1,3 +1,5 @@ resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1") + +addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.4") From bf0797f7e56a5adc4c85e919c92237d3c16d2e77 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 28 Oct 2014 23:27:14 -0700 Subject: [PATCH 206/687] Add dependency on spark yarn module --- pkg/src/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index fd247a741fb64..f1ff59c15b34f 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -454,6 +454,11 @@ + + org.apache.spark + spark-yarn_2.10 + ${spark.version} + From 86b04ebf5ae4c7329d3c4ca6ca33e20ec3b4d8d7 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 28 Oct 2014 23:27:33 -0700 Subject: [PATCH 207/687] Don't use quotes around yarn --- pkg/src/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 77385d1cd6f16..6f36febdcea34 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -27,10 +27,10 @@ endif ifdef USE_YARN MAVEN_YARN_FLAG := "-Pyarn" - SBT_YARN_FLAG := "yarn" + SBT_YARN_FLAG := yarn else MAVEN_YARN_FLAG := "" - SBT_YARN_FLAG := "" + SBT_YARN_FLAG := endif all: $(TARGET_NAME) From a5459c5a4e9baceddfa4d0ff2e1d461ef28c22f4 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 28 Oct 2014 23:46:39 -0700 Subject: [PATCH 208/687] Consolidate yarn flags --- pkg/src/Makefile | 2 -- pkg/src/build.sbt | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 6f36febdcea34..69797486a7b06 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -27,10 +27,8 @@ endif ifdef USE_YARN MAVEN_YARN_FLAG := "-Pyarn" - SBT_YARN_FLAG := yarn else MAVEN_YARN_FLAG := "" - SBT_YARN_FLAG := endif all: $(TARGET_NAME) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 800b7ba35c3c2..8c2196624d1dd 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -27,7 +27,7 @@ libraryDependencies ++= Seq( val excludeNetty = ExclusionRule(organization = "org.jboss.netty") val excludeAsm = ExclusionRule(organization = "asm") val excludeSnappy = ExclusionRule(organization = "org.xerial.snappy") - val sbtYarnFlag = scala.util.Properties.envOrElse("SBT_YARN_FLAG", "") + val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" val defaultSparkVersion = "1.1.0" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) @@ -35,7 +35,7 @@ libraryDependencies ++= Seq( libraryDependencies ++= Seq( "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), "org.apache.spark" % "spark-core_2.10" % sparkVersion - ) ++ (if (sbtYarnFlag == "yarn") { + ) ++ (if (sbtYarnFlag != "") { val defaultYarnVersion = "2.4.0" val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) Seq( From 4381efa2044c378ad4cb8d169ad556944906a106 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 29 Oct 2014 17:13:54 +0800 Subject: [PATCH 209/687] use reduce() to implemement max() and min(). --- pkg/R/RDD.R | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 871164e99ecd2..6e57a3d366021 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -572,14 +572,7 @@ setGeneric("maximum", function(rdd) { standardGeneric("maximum") }) setMethod("maximum", signature(rdd = "RDD"), function(rdd) { - - maxInPartition <- function(part) { - max(unlist(part, recursive=FALSE)) - } - - partitionList <- collect(lapplyPartition(rdd, maxInPartition), - flatten=FALSE) - max(unlist(partitionList, recursive=FALSE)) + reduce(rdd, max) }) #' Get the minimum element of an RDD. @@ -600,14 +593,7 @@ setGeneric("minimum", function(rdd) { standardGeneric("minimum") }) setMethod("minimum", signature(rdd = "RDD"), function(rdd) { - - minInPartition <- function(part) { - min(unlist(part, recursive=FALSE)) - } - - partitionList <- collect(lapplyPartition(rdd, minInPartition), - flatten=FALSE) - min(unlist(partitionList, recursive=FALSE)) + reduce(rdd, min) }) #' Take elements from an RDD. From 8a9b75c6aae53720cb45f8afb9920d476276f219 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Wed, 29 Oct 2014 12:55:50 -0400 Subject: [PATCH 210/687] forgot to change hm and ee inside the for loops --- pkg/R/sparkR.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 9743d7eaa9eb4..31e8bf1111bc8 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -46,12 +46,12 @@ sparkR.init <- function( sparkEnvirMap <- .jnew("java/util/HashMap") for (varname in names(sparkEnvir)) { - hm$put(varname, sparkEnvir[[varname]]) + sparkEnvirMap$put(varname, sparkEnvir[[varname]]) } ExecutorEnv <- .jnew("java/util/HashMap") for (varname in names(sparkExecutorEnv)) { - ee$put(varname, sparkExecutorEnv[[varname]]) + ExecutorEnv$put(varname, sparkExecutorEnv[[varname]]) } jars=c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) From 1d208ae28f8f64938c0a72c9624d8ae9abb9ab2e Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Wed, 29 Oct 2014 14:56:24 -0400 Subject: [PATCH 211/687] added the YARN_CONF_DIR to the classpath --- pkg/R/sparkR.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 31e8bf1111bc8..d622593c7d18c 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -7,9 +7,12 @@ sparkR.onLoad <- function(libname, pkgname) { packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") sparkMem <- Sys.getenv("SPARK_MEM", "512m") + yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") + .sparkREnv$libname <- libname .sparkREnv$assemblyJarPath <- assemblyJarPath .jinit(classpath=assemblyJarPath, parameters=paste("-Xmx", sparkMem, sep="")) + .jaddClassPath(yarn_conf_dir) } #' Initialize a new Spark Context. From 88a524e6776d18accb9747eb0e519c59b2909b8a Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Wed, 29 Oct 2014 15:37:25 -0400 Subject: [PATCH 212/687] Added LD_LIBRARY_PATH to the ExecutorEnv. This is need so that the nodes can find libjvm.so, or if the master has a different LD_LIBRARY_PATH then the nodes. Make sure to export LD_LIBRARY_PATH that includes the path to libjvm.so in the nodes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To Run: USE_YARN=1 SPARK_YARN_VERSION=2.4.0 SPARK_HADOOP_VERSION=2.4.0 ./install-dev.sh export YARN_CONF_DIR= export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/ to/ libjvm.so/ on/ nodes/" MASTER="yarn-client" ./sparkR If LD_LIBRARY_PATH not properly set you will find the following error in the yarn logs Error : .onLoad failed in loadNamespace() for 'rJava', details: call: dyn.load(file, DLLpath = DLLpath, ...) error: unable to load shared object '/usr/lib/Rlibrary/rJava/libs/rJava.so': libjvm.so: cannot open shared object file: No such file or directory Error: package ‘rJava’ could not be loaded Execution halted --- pkg/R/sparkR.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index d622593c7d18c..31f0d4e4582e2 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -53,6 +53,9 @@ sparkR.init <- function( } ExecutorEnv <- .jnew("java/util/HashMap") + if (!any(names(sparkExecutorEnv) == "LD_LIBRARY_PATH")) { + ExecutorEnv$put("LD_LIBRARY_PATH", paste0("$LD_LIBRARY_PATH:",Sys.getenv("LD_LIBRARY_PATH"))) + } for (varname in names(sparkExecutorEnv)) { ExecutorEnv$put(varname, sparkExecutorEnv[[varname]]) } From f97346e905e9f29d2bf2144e34ca856673d9afd7 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Wed, 29 Oct 2014 16:01:46 -0400 Subject: [PATCH 213/687] executorEnv to lower-case e --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index f127ea6e8e357..e9393ef7d5dbf 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -182,7 +182,7 @@ object RRDD { sparkHome: String, jars: Array[String], sparkEnvirMap: JMap[Object, Object], - ExecutorEnv: JMap[Object, Object]): JavaSparkContext = { + executorEnv: JMap[Object, Object]): JavaSparkContext = { val sparkConf = new SparkConf().setMaster(master) .setAppName(appName) @@ -191,7 +191,7 @@ object RRDD { for ((name, value) <- sparkEnvirMap) { sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) } - for ((name, value) <- ExecutorEnv) { + for ((name, value) <- executorEnv) { sparkConf.setExecutorEnv(name.asInstanceOf[String], value.asInstanceOf[String]) } new JavaSparkContext(sparkConf) From 903d18af649c0c35fbea80bf05658e4bbbef5813 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Wed, 29 Oct 2014 16:05:34 -0400 Subject: [PATCH 214/687] changed executorEnv to sparkExecutorEnvMap, will do the same in R --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index e9393ef7d5dbf..0ef3b1bb0ffad 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -182,7 +182,7 @@ object RRDD { sparkHome: String, jars: Array[String], sparkEnvirMap: JMap[Object, Object], - executorEnv: JMap[Object, Object]): JavaSparkContext = { + sparkExecutorEnvMap: JMap[Object, Object]): JavaSparkContext = { val sparkConf = new SparkConf().setMaster(master) .setAppName(appName) @@ -191,7 +191,7 @@ object RRDD { for ((name, value) <- sparkEnvirMap) { sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) } - for ((name, value) <- executorEnv) { + for ((name, value) <- sparkExecutorEnvMap) { sparkConf.setExecutorEnv(name.asInstanceOf[String], value.asInstanceOf[String]) } new JavaSparkContext(sparkConf) From 4e70cedb05fa628f04651444a18f64532a222fa5 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Wed, 29 Oct 2014 16:08:09 -0400 Subject: [PATCH 215/687] changed ExecutorEnv to sparkExecutorEnvMap, to make it consistent with sparkEnvirMap --- pkg/R/sparkR.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 31f0d4e4582e2..4b0e3a9c26331 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -52,12 +52,12 @@ sparkR.init <- function( sparkEnvirMap$put(varname, sparkEnvir[[varname]]) } - ExecutorEnv <- .jnew("java/util/HashMap") + sparkExecutorEnvMap <- .jnew("java/util/HashMap") if (!any(names(sparkExecutorEnv) == "LD_LIBRARY_PATH")) { - ExecutorEnv$put("LD_LIBRARY_PATH", paste0("$LD_LIBRARY_PATH:",Sys.getenv("LD_LIBRARY_PATH"))) + sparkExecutorEnvMap$put("LD_LIBRARY_PATH", paste0("$LD_LIBRARY_PATH:",Sys.getenv("LD_LIBRARY_PATH"))) } for (varname in names(sparkExecutorEnv)) { - ExecutorEnv$put(varname, sparkExecutorEnv[[varname]]) + sparkExecutorEnvMap$put(varname, sparkExecutorEnv[[varname]]) } jars=c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) @@ -71,7 +71,7 @@ sparkR.init <- function( as.character(sparkHome), .jarray(jars, "java/lang/String"), sparkEnvirMap, - ExecutorEnv), + sparkExecutorEnvMap), envir=.sparkREnv ) From 5951d3bff61e9bf3ba36de22991e593048cf7156 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 29 Oct 2014 14:12:15 -0700 Subject: [PATCH 216/687] Remove SBT plugin --- pkg/src/build.sbt | 2 -- pkg/src/project/plugins.sbt | 2 -- 2 files changed, 4 deletions(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 8c2196624d1dd..4ab8dd0c6314f 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -6,8 +6,6 @@ import AssemblyKeys._ assemblySettings -net.virtualvoid.sbt.graph.Plugin.graphSettings - name := "sparkr" version := "0.1" diff --git a/pkg/src/project/plugins.sbt b/pkg/src/project/plugins.sbt index e5f9f66607e5a..6d31a65f305a3 100644 --- a/pkg/src/project/plugins.sbt +++ b/pkg/src/project/plugins.sbt @@ -1,5 +1,3 @@ resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1") - -addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.7.4") From 2c0e34ff3ad279d0832951fd2fbb251bc320e287 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 29 Oct 2014 17:19:04 -0400 Subject: [PATCH 217/687] Adds function Filter(), which extracts the elements that satisfy a predicate. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 26 ++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 10 ++++++++++ pkg/man/Filter.Rd | 28 ++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 pkg/man/Filter.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 4db74234a08e6..b7abc13c9cb35 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -10,6 +10,7 @@ exportMethods( "combineByKey", "count", "distinct", + "Filter", "flatMap", "groupByKey", "length", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 6e57a3d366021..f2ff37221ef1e 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -520,6 +520,32 @@ setMethod("mapPartitionsWithIndex", lapplyPartitionsWithIndex(X, FUN) }) +#' This function returns a new RDD containing only the elements that satisfy +#' a predicate (i.e. returning TRUE in a given logical function). +#' The same as `filter()' in Spark. +#' +#' @param f A unary predicate function. +#' @param x The RDD to be filtered. +#' @rdname Filter +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' unlist(collect(Filter(function (x) { x < 3 }, rdd))) # c(1, 2) +#'} +setGeneric("Filter", function(f, x) { standardGeneric("Filter")}) + +#' @rdname Filter +#' @aliases Filter,function,RDD-method +setMethod("Filter", + signature(f = "function", x = "RDD"), + function(f, x) { + filter.func <- function(part) { + Filter(f, part) + } + lapplyPartition(x, filter.func) + }) #' Reduce across elements of an RDD. #' diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index c32d62189dc7c..97448ed4aba3b 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -33,6 +33,16 @@ test_that("mapPartitions on RDD", { expect_equal(actual, list(15, 40)) }) +test_that("Filter on RDD", { + filtered.rdd <- Filter(function(x) { x %% 2 == 0}, rdd) + actual <- collect(filtered.rdd) + expect_equal(actual, list(2, 4, 6, 8, 10)) + + filtered.rdd <- Filter(function(x) { x[[2]] < 0 }, intRdd) + actual <- collect(filtered.rdd) + expect_equal(actual, list(list(1L, -1))) +}) + test_that("lookup on RDD", { vals <- lookup(intRdd, 1L) expect_equal(vals, list(-1, 200)) diff --git a/pkg/man/Filter.Rd b/pkg/man/Filter.Rd new file mode 100644 index 0000000000000..fde07285ac9ac --- /dev/null +++ b/pkg/man/Filter.Rd @@ -0,0 +1,28 @@ +\docType{methods} +\name{Filter} +\alias{Filter} +\alias{Filter,function,RDD} +\alias{Filter,function,RDD-method} +\title{Extract the elements that satisfy a filter} +\usage{ +Filter(f, x) + +\S4method{Filter}{function,RDD}(f,rdd) +} +\arguments{ + \item{f}{A unary predicate function.} + \item{x}{The RDD to be filtered.} +} +\description{ +This function returns a new RDD containing only the elements that satisfy +a predicate (i.e. returning TRUE in a given logical function). +The same as `filter()' in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +unlist(collect(Filter(function (x) { x < 3 }, rdd))) # c(1, 2) +} +} + From 08d3631a48b0ae260e0b6623248f0258f2d51058 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 29 Oct 2014 17:23:51 -0400 Subject: [PATCH 218/687] Minor style fixes. --- pkg/R/RDD.R | 2 +- pkg/inst/tests/test_rdd.R | 2 +- pkg/man/Filter.Rd | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index f2ff37221ef1e..e9d6cbd342a1b 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -534,7 +534,7 @@ setMethod("mapPartitionsWithIndex", #' rdd <- parallelize(sc, 1:10) #' unlist(collect(Filter(function (x) { x < 3 }, rdd))) # c(1, 2) #'} -setGeneric("Filter", function(f, x) { standardGeneric("Filter")}) +setGeneric("Filter", function(f, x) { standardGeneric("Filter") }) #' @rdname Filter #' @aliases Filter,function,RDD-method diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 97448ed4aba3b..6c52a8dd931d9 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -34,7 +34,7 @@ test_that("mapPartitions on RDD", { }) test_that("Filter on RDD", { - filtered.rdd <- Filter(function(x) { x %% 2 == 0}, rdd) + filtered.rdd <- Filter(function(x) { x %% 2 == 0 }, rdd) actual <- collect(filtered.rdd) expect_equal(actual, list(2, 4, 6, 8, 10)) diff --git a/pkg/man/Filter.Rd b/pkg/man/Filter.Rd index fde07285ac9ac..b6654e357da0c 100644 --- a/pkg/man/Filter.Rd +++ b/pkg/man/Filter.Rd @@ -3,11 +3,11 @@ \alias{Filter} \alias{Filter,function,RDD} \alias{Filter,function,RDD-method} -\title{Extract the elements that satisfy a filter} +\title{Filters the elements that satisfy a predicate} \usage{ Filter(f, x) -\S4method{Filter}{function,RDD}(f,rdd) +\S4method{Filter}{function,RDD}(f,x) } \arguments{ \item{f}{A unary predicate function.} From b2740ad95c6945c31dba4cd4765319d25eb43ce9 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 29 Oct 2014 20:54:37 -0400 Subject: [PATCH 219/687] Add test for filter all elements. Add filter() as alias. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 16 ++++++++++++++-- pkg/inst/tests/test_rdd.R | 5 +++++ pkg/man/Filter.Rd | 26 ++++++++++++++++---------- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index b7abc13c9cb35..f4e95aa072e65 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -11,6 +11,7 @@ exportMethods( "count", "distinct", "Filter", + "filter", "flatMap", "groupByKey", "length", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e9d6cbd342a1b..07a18628df6b1 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -534,10 +534,10 @@ setMethod("mapPartitionsWithIndex", #' rdd <- parallelize(sc, 1:10) #' unlist(collect(Filter(function (x) { x < 3 }, rdd))) # c(1, 2) #'} -setGeneric("Filter", function(f, x) { standardGeneric("Filter") }) +#setGeneric("Filter", function(f, x) { standardGeneric("Filter") }) #' @rdname Filter -#' @aliases Filter,function,RDD-method +#' @aliases Filter,function,RDD-method filter,function,RDD-method setMethod("Filter", signature(f = "function", x = "RDD"), function(f, x) { @@ -547,6 +547,18 @@ setMethod("Filter", lapplyPartition(x, filter.func) }) +#' @rdname Filter +#' @export +setGeneric("filter", function(f, x) { standardGeneric("filter") }) + +#' @rdname Filter +#' @aliases filter,function,RDD-method +setMethod("filter", + signature(f = "function", x = "RDD"), + function(f, x) { + Filter(f, x) + }) + #' Reduce across elements of an RDD. #' #' This function reduces the elements of this RDD using the diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 6c52a8dd931d9..0c48d14e24f66 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -41,6 +41,11 @@ test_that("Filter on RDD", { filtered.rdd <- Filter(function(x) { x[[2]] < 0 }, intRdd) actual <- collect(filtered.rdd) expect_equal(actual, list(list(1L, -1))) + + # Filter out all elements. + filtered.rdd <- Filter(function(x) { x > 10 }, rdd) + actual <- collect(filtered.rdd) + expect_equal(actual, list()) }) test_that("lookup on RDD", { diff --git a/pkg/man/Filter.Rd b/pkg/man/Filter.Rd index b6654e357da0c..ab4de14ef1ad6 100644 --- a/pkg/man/Filter.Rd +++ b/pkg/man/Filter.Rd @@ -1,21 +1,27 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} -\name{Filter} -\alias{Filter} -\alias{Filter,function,RDD} +\name{Filter,function,RDD-method} \alias{Filter,function,RDD-method} -\title{Filters the elements that satisfy a predicate} +\alias{filter} +\alias{filter,function,RDD-method} +\title{This function returns a new RDD containing only the elements that satisfy +a predicate (i.e. returning TRUE in a given logical function). +The same as `filter()' in Spark.} \usage{ -Filter(f, x) +\S4method{Filter}{`function`,RDD}(f, x) -\S4method{Filter}{function,RDD}(f,x) +filter(f, x) + +\S4method{filter}{`function`,RDD}(f, x) } \arguments{ - \item{f}{A unary predicate function.} - \item{x}{The RDD to be filtered.} +\item{f}{A unary predicate function.} + +\item{x}{The RDD to be filtered.} } \description{ -This function returns a new RDD containing only the elements that satisfy -a predicate (i.e. returning TRUE in a given logical function). +This function returns a new RDD containing only the elements that satisfy +a predicate (i.e. returning TRUE in a given logical function). The same as `filter()' in Spark. } \examples{ From 488ac4749280593e46c6a74d391e35d880222ef2 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 29 Oct 2014 20:58:30 -0400 Subject: [PATCH 220/687] Add generated Rd file of previous added functions, distinct() and mapValues(). --- pkg/man/distinct.Rd | 28 ++++++++++++++++++++++++++++ pkg/man/mapValues.Rd | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 pkg/man/distinct.Rd create mode 100644 pkg/man/mapValues.Rd diff --git a/pkg/man/distinct.Rd b/pkg/man/distinct.Rd new file mode 100644 index 0000000000000..1071c7353a3be --- /dev/null +++ b/pkg/man/distinct.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{distinct} +\alias{distinct} +\alias{distinct,RDD,missingOrInteger-method} +\title{Removes the duplicates from RDD.} +\usage{ +distinct(rdd, numPartitions) + +\S4method{distinct}{RDD,missingOrInteger}(rdd, numPartitions) +} +\arguments{ +\item{rdd}{The RDD to remove duplicates from.} + +\item{numPartitions}{Number of partitions to create.} +} +\description{ +This function returns a new RDD containing the distinct elements in the +given RDD. The same as `distinct()' in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, c(1,2,2,3,3,3)) +sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) +} +} + diff --git a/pkg/man/mapValues.Rd b/pkg/man/mapValues.Rd new file mode 100644 index 0000000000000..ea676bd78098f --- /dev/null +++ b/pkg/man/mapValues.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{mapValues} +\alias{mapValues} +\alias{mapValues,RDD,function-method} +\title{Applies a function to all values of the elements, without modifying the keys.} +\usage{ +mapValues(X, FUN) + +\S4method{mapValues}{RDD,`function`}(X, FUN) +} +\arguments{ +\item{X}{The RDD to apply the transformation.} + +\item{FUN}{the transformation to apply on the value of each element.} +} +\value{ +a new RDD created by the transformation. +} +\description{ +The same as `mapValues()' in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +makePairs <- lapply(rdd, function(x) { list(x, x) }) +collect(mapValues(makePairs, function(x) { x * 2) }) +Output: list(list(1,2), list(2,4), list(3,6), ...) +} +} + From 868554d4a9bf0d8e79aaf3c4d1f136090d47ddc1 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Wed, 29 Oct 2014 23:08:54 -0400 Subject: [PATCH 221/687] Update sparkR.R --- pkg/R/sparkR.R | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 4b0e3a9c26331..12014be3a8679 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -23,6 +23,8 @@ sparkR.onLoad <- function(libname, pkgname) { #' @param appName Application name to register with cluster manager #' @param sparkHome Spark Home directory #' @param sparkEnvir Named list of environment variables to set on worker nodes. +#' @param sparkExecutorEnv Named list of environment variables to be used when launching executors. +#' @param sparkJars Character string vector of jar files to pass to the worker nodes. #' @export #' @examples #'\dontrun{ @@ -36,8 +38,8 @@ sparkR.init <- function( appName = "SparkR", sparkHome = Sys.getenv("SPARK_HOME"), sparkEnvir = list(), - sparkJars = "", - sparkExecutorEnv = list()) { + sparkExecutorEnv = list(), + sparkJars = "") { if (exists(".sparkRjsc", envir=.sparkREnv)) { return(get(".sparkRjsc", envir=.sparkREnv)) @@ -60,6 +62,7 @@ sparkR.init <- function( sparkExecutorEnvMap$put(varname, sparkExecutorEnv[[varname]]) } + .jaddClassPath(sparkJars) jars=c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) assign( From 44c93d4898d175321aa46f95684fc8d336d7693b Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Thu, 30 Oct 2014 02:10:33 -0400 Subject: [PATCH 222/687] Added example to SparkR.R --- pkg/R/sparkR.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 12014be3a8679..3b08731e59c9a 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -31,6 +31,10 @@ sparkR.onLoad <- function(libname, pkgname) { #' sc <- sparkR.init("local[2]", "SparkR", "/home/spark") #' sc <- sparkR.init("local[2]", "SparkR", "/home/spark", #' list(spark.executor.memory="1g")) +#' sc <- sparkR.init("yarn-client", "SparkR", "/home/spark", +#' list(spark.executor.memory="1g"), +#' List(LD_LIBRARY_PATH="/directory of Java VM Library Files (libjvm.so) on worker nodes/"), +#' c("jarfile1.jar","jarfile2.jar",...)) #'} sparkR.init <- function( From b084314c15ead203b077174296d28f9ca10e799c Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Thu, 30 Oct 2014 08:38:14 -0400 Subject: [PATCH 223/687] removed ... from example --- pkg/R/sparkR.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 3b08731e59c9a..fd7cd13503b71 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -34,7 +34,7 @@ sparkR.onLoad <- function(libname, pkgname) { #' sc <- sparkR.init("yarn-client", "SparkR", "/home/spark", #' list(spark.executor.memory="1g"), #' List(LD_LIBRARY_PATH="/directory of Java VM Library Files (libjvm.so) on worker nodes/"), -#' c("jarfile1.jar","jarfile2.jar",...)) +#' c("jarfile1.jar","jarfile2.jar")) #'} sparkR.init <- function( From 1681f58453a7a6af0d321383c332bbbae74897c3 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 30 Oct 2014 12:12:42 -0700 Subject: [PATCH 224/687] Use temporary files for input instead of stdin This fixes a bug for Windows where stdin would get truncated --- pkg/inst/worker/worker.R | 10 +++++++--- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 20 +++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index bafcfb6523271..731e49025455d 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -9,19 +9,23 @@ source_local <- function(fname) { source_local("serialize.R") # NOTE: We use "stdin" to get the process stdin instead of the command line -inputCon <- file("stdin", open = "rb") +inputConStdin <- file("stdin", open = "rb") -outputFileName <- readLines(inputCon, n = 1) +outputFileName <- readLines(inputConStdin, n = 1) outputCon <- file(outputFileName, open="wb") # Set libPaths to include SparkR package as loadNamespace needs this # TODO: Figure out if we can avoid this by not loading any objects that require # SparkR namespace -rLibDir <- readLines(inputCon, n = 1) +rLibDir <- readLines(inputConStdin, n = 1) .libPaths(c(rLibDir, .libPaths())) suppressPackageStartupMessages(library(SparkR)) +inFileName <- readLines(inputConStdin, n = 1) + +inputCon <- file(inFileName, open = "rb") + # read the index of the current partition inside the RDD splitIndex <- readInt(inputCon) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index eaaa803dab360..22c7a046195bb 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -249,6 +249,8 @@ object RRDD { val tempDir = System.getProperty("spark.local.dir", System.getProperty("java.io.tmpdir")).split(',')(0) val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) + val tempFileIn = File.createTempFile("rSpark", "in", new File(tempDir)) + val tempFileName = tempFile.getAbsolutePath() val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt val env = SparkEnv.get @@ -257,13 +259,19 @@ object RRDD { new Thread("stdin writer for R") { override def run() { SparkEnv.set(env) - val stream = new BufferedOutputStream(proc.getOutputStream, bufferSize) + val streamStd = new BufferedOutputStream(proc.getOutputStream, bufferSize) + val printOutStd = new PrintStream(streamStd) + printOutStd.println(tempFileName) + printOutStd.println(rLibDir) + printOutStd.println(tempFileIn.getAbsolutePath()) + printOutStd.flush() + + streamStd.close() + + val stream = new BufferedOutputStream(new FileOutputStream(tempFileIn), bufferSize) val printOut = new PrintStream(stream) val dataOut = new DataOutputStream(stream) - printOut.println(tempFileName) - printOut.println(rLibDir) - dataOut.writeInt(splitIndex) dataOut.writeInt(func.length) @@ -304,6 +312,10 @@ object RRDD { printOut.println(elem) } } + + printOut.flush() + dataOut.flush() + stream.flush() stream.close() } }.start() From 721043bf16df201791e52d1c6476f580b71e8e64 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Thu, 30 Oct 2014 12:25:20 -0700 Subject: [PATCH 225/687] Update README.md with YARN instructions. --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 224b9e47bae2d..ab2ed4e57b986 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,19 @@ You can also run the unit-tests for SparkR by running Instructions for running SparkR on EC2 can be found in the [SparkR wiki](https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-on-EC2). +## Running on YARN +Currently, SparkR supports running on YARN with the `yarn-client` mode. These steps show how to build SparkR with YARN support and run SparkR programs on a YARN cluster: + +``` +# assumes Java, R, rJava, yarn, spark etc. are installed on the whole cluster. +cd SparkR-pkg/ +USE_YARN=1 SPARK_YARN_VERSION=2.4.0 SPARK_HADOOP_VERSION=2.4.0 ./install-dev.sh +# make sure each worker node has lib/SparkR/sparkr-assembly-0.1.jar +~/spark-ec2/copy-dir ./ +YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ MASTER=yarn-client ./sparkR +YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ ./sparkR examples/pi.R yarn-client +``` + ## Report Issues/Feedback For better tracking and collaboration, issues and TODO items are reported to a dedicated [SparkR JIRA](https://sparkr.atlassian.net/browse/SPARKR/). From 4cd2d5e31d22841fbb5bd12cac5b95e4800ce38e Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Thu, 30 Oct 2014 17:02:28 -0700 Subject: [PATCH 226/687] Notes about spark-ec2. --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ab2ed4e57b986..4f027aac33f85 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ environment variable. For example to use 1g, you can run SPARK_MEM=1g ./sparkR -In a cluster settting to set the amount of memory used by the executors you can +In a cluster setting to set the amount of memory used by the executors you can pass the variable `spark.executor.memory` to the SparkContext constructor. library(SparkR) @@ -96,8 +96,15 @@ Currently, SparkR supports running on YARN with the `yarn-client` mode. These st # assumes Java, R, rJava, yarn, spark etc. are installed on the whole cluster. cd SparkR-pkg/ USE_YARN=1 SPARK_YARN_VERSION=2.4.0 SPARK_HADOOP_VERSION=2.4.0 ./install-dev.sh -# make sure each worker node has lib/SparkR/sparkr-assembly-0.1.jar -~/spark-ec2/copy-dir ./ +``` + +Before launching an application, make sure each worker node has a local copy of `lib/SparkR/sparkr-assembly-0.1.jar`. With a cluster launched with the `spark-ec2` script, do: +``` +~/spark-ec2/copy-dir ~/SparkR-pkg +``` + +Finally, when launching an application, the environment variable `YARN_CONF_DIR` needs to be set to the directory which contains the client-side configuration files for the Hadoop cluster (with a cluster launched with `spark-ec2`, this defaults to `/root/ephemeral-hdfs/conf/`): +``` YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ MASTER=yarn-client ./sparkR YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ ./sparkR examples/pi.R yarn-client ``` From 187526a4ae2f16d2d8417d06930f03cc70213da1 Mon Sep 17 00:00:00 2001 From: oscaroboto Date: Thu, 30 Oct 2014 21:06:27 -0400 Subject: [PATCH 227/687] Update sparkR.R --- pkg/R/sparkR.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index fd7cd13503b71..28c9dc9f10f92 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -33,7 +33,7 @@ sparkR.onLoad <- function(libname, pkgname) { #' list(spark.executor.memory="1g")) #' sc <- sparkR.init("yarn-client", "SparkR", "/home/spark", #' list(spark.executor.memory="1g"), -#' List(LD_LIBRARY_PATH="/directory of Java VM Library Files (libjvm.so) on worker nodes/"), +#' list(LD_LIBRARY_PATH="/directory of Java VM Library Files (libjvm.so) on worker nodes/"), #' c("jarfile1.jar","jarfile2.jar")) #'} From 5a128f4e0bd3cb6fdecf6eeba45c7a26d7229fc7 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Fri, 31 Oct 2014 10:47:53 +0800 Subject: [PATCH 228/687] Add clarification on setting Spark master when launching the SparkR shell. --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 4f027aac33f85..11afb6e512a20 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,12 @@ shell with ./sparkR +The `sparkR` script automatically creates a SparkContext with Spark by default in +local mode. To specify the Spark master of a cluster for the automatically created +SparkContext, you can run + + MASTER= ./sparkR + If you have installed it directly from github, you can include the SparkR package and then initialize a SparkContext. For example to run with a local Spark master you can launch R and then run From 536afb1f9ac83d4fc279df6e50f23b9caa6c3ed4 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 31 Oct 2014 17:46:10 -0400 Subject: [PATCH 229/687] Add new function of union(). --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 29 +++++++++++++++++++++++ pkg/inst/tests/test_binary_function.R | 16 +++++++++++++ pkg/man/unionRDD.Rd | 33 +++++++++++++++++++++++++++ 4 files changed, 79 insertions(+) create mode 100644 pkg/inst/tests/test_binary_function.R create mode 100644 pkg/man/unionRDD.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index f4e95aa072e65..9e825b6d3d4cd 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -31,6 +31,7 @@ exportMethods( "sampleRDD", "take", "takeSample", + "unionRDD", "unpersist", "value" ) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 07a18628df6b1..fc9e3f3863af0 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1182,3 +1182,32 @@ setMethod("combineByKey", combined }) +############ Binary Functions ############# + +#' Return the union RDD of two RDDs. +#' The same as union() in Spark. +#' +#' @param x An RDD. +#' @param y An RDD. +#' @return a new RDD created by performing the simple union (witout removing +#' duplicates) of two input RDDs. +#' @rdname unionRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' unionRDD(rdd, rdd) # 1, 2, 3, 1, 2, 3 +#'} +setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) + +#' @rdname unionRDD +#' @aliases unionRDD,RDD,RDD-method +setMethod("unionRDD", + signature(x = "RDD", y = "RDD"), + function(x, y) { + jrdd <- .jcall(getJRDD(x), "Lorg/apache/spark/api/java/JavaRDD;", + "union", getJRDD(y)) + union.rdd <- RDD(jrdd, x@env$serialized) + union.rdd + }) diff --git a/pkg/inst/tests/test_binary_function.R b/pkg/inst/tests/test_binary_function.R new file mode 100644 index 0000000000000..0278c46e59ba4 --- /dev/null +++ b/pkg/inst/tests/test_binary_function.R @@ -0,0 +1,16 @@ +context("binary functions") + +# JavaSparkContext handle +sc <- sparkR.init() + +# Data +nums <- 1:10 +rdd <- parallelize(sc, nums, 2L) + +intPairs <- list(list(1L, -1), list(2L, 100), list(2L, 1), list(1L, 200)) +intRdd <- parallelize(sc, intPairs, 2L) + +test_that("union on two RDDs", { + actual <- collect(unionRDD(rdd, rdd)) + expect_equal(actual, rep(nums, 2)) +}) \ No newline at end of file diff --git a/pkg/man/unionRDD.Rd b/pkg/man/unionRDD.Rd new file mode 100644 index 0000000000000..c10de0cc86228 --- /dev/null +++ b/pkg/man/unionRDD.Rd @@ -0,0 +1,33 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{unionRDD} +\alias{unionRDD} +\alias{unionRDD,RDD,RDD-method} +\title{Return the union RDD of two RDDs. +The same as union() in Spark.} +\usage{ +unionRDD(x, y) + +\S4method{unionRDD}{RDD,RDD}(x, y) +} +\arguments{ +\item{x}{An RDD.} + +\item{y}{An RDD.} +} +\value{ +a new RDD created by performing the simple union (witout removing +duplicates) of two input RDDs. +} +\description{ +Return the union RDD of two RDDs. +The same as union() in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:3) +unionRDD(rdd, rdd) # 1, 2, 3, 1, 2, 3 +} +} + From daf50407a3765fbfd9318e7652cd5175b0b4dede Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 31 Oct 2014 20:54:34 -0400 Subject: [PATCH 230/687] Add reserialize() before union if two RDDs are not both serialized. --- pkg/R/RDD.R | 43 +++++++++++++++++++++++++-- pkg/inst/tests/test_binary_function.R | 17 +++++++++-- pkg/inst/tests/test_rdd.R | 16 ++++++++++ pkg/inst/tests/test_textFile.R | 2 ++ 4 files changed, 72 insertions(+), 6 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index fc9e3f3863af0..bb224ad0d1f96 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -234,6 +234,31 @@ setMethod("checkpoint", rdd }) +#' Create a new RDD in serialized form. +#' +#' @param rdd The RDD to reserialize. +#' @rdname reserialize +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' reserialize(rdd) +#'} +setGeneric("reserialize", function(rdd) { standardGeneric("reserialize") }) + +#' @rdname reserialize +#' @aliases reserialize,RDD-method +setMethod("reserialize", + signature(rdd = "RDD"), + function(rdd) { + if (rdd@env$serialized) { + return(rdd) + } else { + ser.rdd <- lapply(rdd, function(x) { x }) + return(ser.rdd) + } + }) #' Collect elements of an RDD #' @@ -1206,8 +1231,20 @@ setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) setMethod("unionRDD", signature(x = "RDD", y = "RDD"), function(x, y) { - jrdd <- .jcall(getJRDD(x), "Lorg/apache/spark/api/java/JavaRDD;", - "union", getJRDD(y)) - union.rdd <- RDD(jrdd, x@env$serialized) + if (x@env$serialized == y@env$serialized) { + jrdd <- .jcall(getJRDD(x), "Lorg/apache/spark/api/java/JavaRDD;", + "union", getJRDD(y)) + union.rdd <- RDD(jrdd, x@env$serialized) + } else { + # One of the RDDs is not serialized, we need to serialize it first. + if (!x@env$serialized) { + x <- reserialize(x) + } else { + y <- reserialize(y) + } + jrdd <- .jcall(getJRDD(x), "Lorg/apache/spark/api/java/JavaRDD;", + "union", getJRDD(y)) + union.rdd <- RDD(jrdd, TRUE) + } union.rdd }) diff --git a/pkg/inst/tests/test_binary_function.R b/pkg/inst/tests/test_binary_function.R index 0278c46e59ba4..1628135af47e6 100644 --- a/pkg/inst/tests/test_binary_function.R +++ b/pkg/inst/tests/test_binary_function.R @@ -7,10 +7,21 @@ sc <- sparkR.init() nums <- 1:10 rdd <- parallelize(sc, nums, 2L) -intPairs <- list(list(1L, -1), list(2L, 100), list(2L, 1), list(1L, 200)) -intRdd <- parallelize(sc, intPairs, 2L) +# File content +mockFile <- c("Spark is pretty.", "Spark is awesome.") test_that("union on two RDDs", { actual <- collect(unionRDD(rdd, rdd)) - expect_equal(actual, rep(nums, 2)) + expect_equal(actual, as.list(rep(nums, 2))) + + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + text.rdd <- textFile(sc, fileName) + union.rdd <- unionRDD(rdd, text.rdd) + actual <- collect(union.rdd) + expect_equal(actual, c(as.list(nums), mockFile)) + expect_true(union.rdd@env$serialized) + + unlink(fileName) }) \ No newline at end of file diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 0c48d14e24f66..e9cb39f297e34 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -10,11 +10,27 @@ rdd <- parallelize(sc, nums, 2L) intPairs <- list(list(1L, -1), list(2L, 100), list(2L, 1), list(1L, 200)) intRdd <- parallelize(sc, intPairs, 2L) +# File content +mockFile <- c("Spark is pretty.", "Spark is awesome.") + test_that("count and length on RDD", { expect_equal(count(rdd), 10) expect_equal(length(rdd), 10) }) +test_that("reserialize on RDD", { + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + text.rdd <- textFile(sc, fileName) + expect_false(text.rdd@env$serialized) + ser.rdd <- reserialize(text.rdd) + expect_equal(collect(ser.rdd), as.list(mockFile)) + expect_true(ser.rdd@env$serialized) + + unlink(fileName) +}) + test_that("lapply on RDD", { multiples <- lapply(rdd, function(x) { 2 * x }) actual <- collect(multiples) diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 763486968d845..ce819f1c98a80 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -41,6 +41,8 @@ test_that("textFile() word count works as expected", { expected <- list(list("pretty.", 1), list("is", 2), list("awesome.", 1), list("Spark", 2)) expect_equal(output, expected) + + unlink(fileName) }) test_that("several transformations on RDD created by textFile()", { From a53952e2a416f9165c5769f10a9cab589914f15a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 2 Nov 2014 21:20:30 -0800 Subject: [PATCH 231/687] Add windows build scripts --- install-dev.bat | 9 +++++++++ pkg/R/sparkR.R | 10 +++++++--- pkg/src/Makefile.win | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 install-dev.bat create mode 100644 pkg/src/Makefile.win diff --git a/install-dev.bat b/install-dev.bat new file mode 100644 index 0000000000000..9cb43d55c90ef --- /dev/null +++ b/install-dev.bat @@ -0,0 +1,9 @@ +@echo off + +rem Install development version of SparkR +rem + +MKDIR .\lib + +R.exe CMD INSTALL pkg\ +:: R.exe CMD INSTALL --library=".\lib" pkg\ diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 28c9dc9f10f92..e1cec7a1f013c 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -4,6 +4,8 @@ assemblyJarName <- "sparkr-assembly-0.1.jar" sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") + assemblyJarPath <- gsub(" ", "\\ ", assemblyJarPath, fixed=T) + # assemblyJarPath <- shQuote(gsub(" ", "\\ ", assemblyJarPath, fixed=T)) packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") sparkMem <- Sys.getenv("SPARK_MEM", "512m") @@ -67,8 +69,10 @@ sparkR.init <- function( } .jaddClassPath(sparkJars) - jars=c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) - + jars <- c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) + + localJarPaths <- sapply(jars, function(j) { paste("file://", j, sep="") }) + assign( ".sparkRjsc", J("edu.berkeley.cs.amplab.sparkr.RRDD", @@ -76,7 +80,7 @@ sparkR.init <- function( master, appName, as.character(sparkHome), - .jarray(jars, "java/lang/String"), + .jarray(localJarPaths, "java/lang/String"), sparkEnvirMap, sparkExecutorEnvMap), envir=.sparkREnv diff --git a/pkg/src/Makefile.win b/pkg/src/Makefile.win new file mode 100644 index 0000000000000..ed841d60a91da --- /dev/null +++ b/pkg/src/Makefile.win @@ -0,0 +1,35 @@ +SCALA_VERSION := 2.10 +SPARKR_VERSION := 0.1 +JAR_NAME := sparkr-assembly-$(SPARKR_VERSION).jar +SBT_TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) + +MAVEN_JAR_NAME := sparkr-$(SPARKR_VERSION)-assembly.jar +MAVEN_TARGET_NAME := target/$(MAVEN_JAR_NAME) + +SCALA_SOURCE_DIR := src/main/scala/edu/berkeley/cs/amplab/sparkr +RESOURCE_DIR := src/main/resources + +SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) +RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) + +SPARK_VERSION ?= 1.1.0 +SPARK_HADOOP_VERSION ?= 1.0.4 +SPARK_YARN_VERSION ?= 2.4.0 + +TARGET_NAME := $(MAVEN_TARGET_NAME) + +all: $(TARGET_NAME) + +$(MAVEN_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) + mvn.bat -Dhadoop.version=$(SPARK_HADOOP_VERSION) -Dspark.version=$(SPARK_VERSION) -Dyarn.version=$(SPARK_YARN_VERSION) -DskipTests clean package shade:shade + cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) + +clean: + mvn.bat clean + rm -rf target + rm -rf project/target + rm -rf project/project + -rm sbt/sbt-launch-*.jar + rm -f ../inst/$(JAR_NAME) + +.PHONY: all clean From ddc271b0a81933c12537356bcbe0a71898e4aaef Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 2 Nov 2014 22:52:18 -0800 Subject: [PATCH 232/687] Only append file:/// to non empty jar paths --- pkg/R/sparkR.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index e1cec7a1f013c..eebe5c2b65fb8 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -71,7 +71,8 @@ sparkR.init <- function( .jaddClassPath(sparkJars) jars <- c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) - localJarPaths <- sapply(jars, function(j) { paste("file://", j, sep="") }) + nonEmptyJars <- Filter(function(x) { x != "" }, jars) + localJarPaths <- sapply(nonEmptyJars, function(j) { paste("file://", j, sep="") }) assign( ".sparkRjsc", From 49a99e7d979a98c5257acbcc3a576aeb1afc2be9 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 3 Nov 2014 10:17:02 -0800 Subject: [PATCH 233/687] Clean up some commented code --- install-dev.bat | 3 +-- pkg/R/sparkR.R | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/install-dev.bat b/install-dev.bat index 9cb43d55c90ef..7d7e79bd8bb06 100644 --- a/install-dev.bat +++ b/install-dev.bat @@ -5,5 +5,4 @@ rem MKDIR .\lib -R.exe CMD INSTALL pkg\ -:: R.exe CMD INSTALL --library=".\lib" pkg\ +R.exe CMD INSTALL --library=".\lib" pkg\ diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index eebe5c2b65fb8..5dc138317d4da 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -5,7 +5,6 @@ assemblyJarName <- "sparkr-assembly-0.1.jar" sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") assemblyJarPath <- gsub(" ", "\\ ", assemblyJarPath, fixed=T) - # assemblyJarPath <- shQuote(gsub(" ", "\\ ", assemblyJarPath, fixed=T)) packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") sparkMem <- Sys.getenv("SPARK_MEM", "512m") From 79aee73a80def2e2cb97d34e810515b16a6284fb Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 3 Nov 2014 10:47:00 -0800 Subject: [PATCH 234/687] Add notes on how to build SparkR on windows --- BUILDING.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 BUILDING.md diff --git a/BUILDING.md b/BUILDING.md new file mode 100644 index 0000000000000..c1929f94bd65e --- /dev/null +++ b/BUILDING.md @@ -0,0 +1,17 @@ +## Building SparkR on Windows + +To build SparkR on Windows, the following steps are required + +1. Install R (>= 3.1) and [Rtools](http://cran.r-project.org/bin/windows/Rtools/). Make sure to +include Rtools and R in `PATH`. +2. Install +[JDK7](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html) and set +`JAVA_HOME` in the system environment variables. +3. Install `rJava` using `install.packages(rJava)`. If rJava fails to load due to missing jvm.dll, +you will need to add the directory containing jvm.dll to `PATH`. See this [stackoverflow post](http://stackoverflow.com/a/7604469] +for more details. +4. Download and install [Maven](http://maven.apache.org/download.html). Also include the `bin` +directory in Maven in `PATH`. +5. Get SparkR source code either using [`git]`(http://git-scm.com/downloads) or by downloading a +source zip from github. +6. Open a command shell (`cmd`) in the SparkR directory and run `install-dev.bat` From 8911897f517cb36a332aba40dea53b3bbca6383c Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 3 Nov 2014 14:05:39 -0500 Subject: [PATCH 235/687] Make reserialize() private function in package. --- pkg/R/RDD.R | 26 -------------------------- pkg/R/utils.R | 14 ++++++++++++++ pkg/inst/tests/test_rdd.R | 13 ------------- pkg/inst/tests/test_utils.R | 15 +++++++++++++++ 4 files changed, 29 insertions(+), 39 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index bb224ad0d1f96..e508cc0708d39 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -234,32 +234,6 @@ setMethod("checkpoint", rdd }) -#' Create a new RDD in serialized form. -#' -#' @param rdd The RDD to reserialize. -#' @rdname reserialize -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' reserialize(rdd) -#'} -setGeneric("reserialize", function(rdd) { standardGeneric("reserialize") }) - -#' @rdname reserialize -#' @aliases reserialize,RDD-method -setMethod("reserialize", - signature(rdd = "RDD"), - function(rdd) { - if (rdd@env$serialized) { - return(rdd) - } else { - ser.rdd <- lapply(rdd, function(x) { x }) - return(ser.rdd) - } - }) - #' Collect elements of an RDD #' #' @description diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 6013dccf6371d..f5bcf21a3d7f7 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -189,3 +189,17 @@ hashCode <- function(key) { as.integer(0) } } + +# Create a new RDD in serialized form. +# Return itself if already in serialized form. +reserialize <- function(rdd) { + if (!inherits(rdd, "RDD")) { + stop("Argument 'rdd' is not an RDD type.") + } + if (rdd@env$serialized) { + return(rdd) + } else { + ser.rdd <- lapply(rdd, function(x) { x }) + return(ser.rdd) + } +} diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index e9cb39f297e34..3c36f4ffca83d 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -18,19 +18,6 @@ test_that("count and length on RDD", { expect_equal(length(rdd), 10) }) -test_that("reserialize on RDD", { - fileName <- tempfile(pattern="spark-test", fileext=".tmp") - writeLines(mockFile, fileName) - - text.rdd <- textFile(sc, fileName) - expect_false(text.rdd@env$serialized) - ser.rdd <- reserialize(text.rdd) - expect_equal(collect(ser.rdd), as.list(mockFile)) - expect_true(ser.rdd@env$serialized) - - unlink(fileName) -}) - test_that("lapply on RDD", { multiples <- lapply(rdd, function(x) { 2 * x }) actual <- collect(multiples) diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 3c86639a2489d..bd0083ef9a9a9 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -20,3 +20,18 @@ test_that("convertJListToRList() gives back (deserializes) the original JLists rList <- convertJListToRList(jList, flatten = TRUE) expect_equal(rList, strs) }) + +test_that("reserialize on RDD", { + # File content + mockFile <- c("Spark is pretty.", "Spark is awesome.") + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + text.rdd <- textFile(sc, fileName) + expect_false(text.rdd@env$serialized) + ser.rdd <- reserialize(text.rdd) + expect_equal(collect(ser.rdd), as.list(mockFile)) + expect_true(ser.rdd@env$serialized) + + unlink(fileName) +}) From 323151d5497684a0787b6cace2fdaacbc7e67214 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 3 Nov 2014 14:12:27 -0500 Subject: [PATCH 236/687] Fix yar flag in Makefile to remove build error in Maven. --- pkg/src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 69797486a7b06..1309f9bb8e442 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -28,7 +28,7 @@ endif ifdef USE_YARN MAVEN_YARN_FLAG := "-Pyarn" else - MAVEN_YARN_FLAG := "" + MAVEN_YARN_FLAG := endif all: $(TARGET_NAME) From 7f6e4ea2921e8b61e2262171feea9a91c990a02c Mon Sep 17 00:00:00 2001 From: Harihar Nahak Date: Tue, 4 Nov 2014 09:31:03 +1300 Subject: [PATCH 237/687] Update logistic_regression.R Add additional command line argument for dimension. So user can push this value as per their input data set. --- examples/logistic_regression.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/logistic_regression.R b/examples/logistic_regression.R index 8442f8f6c5f8e..c52b8315225ff 100644 --- a/examples/logistic_regression.R +++ b/examples/logistic_regression.R @@ -2,15 +2,15 @@ library(SparkR) args <- commandArgs(trailing = TRUE) -if (length(args) != 3) { - print("Usage: logistic_regression ") +if (length(args) != 4) { + print("Usage: logistic_regression ") q("no") } # Initialize Spark context sc <- sparkR.init(args[[1]], "LogisticRegressionR") iterations <- as.integer(args[[3]]) -D <- 10 +D <- as.integer(args[[4]]) readPartition <- function(part){ part = strsplit(part, " ", fixed = T) From 6bbe8232f2100156f78e1a8fe4d27a892bba3e2e Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 3 Nov 2014 17:01:09 -0500 Subject: [PATCH 238/687] minor style fix. --- pkg/inst/tests/test_binary_function.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_binary_function.R b/pkg/inst/tests/test_binary_function.R index 1628135af47e6..51d350cfb7cb5 100644 --- a/pkg/inst/tests/test_binary_function.R +++ b/pkg/inst/tests/test_binary_function.R @@ -24,4 +24,4 @@ test_that("union on two RDDs", { expect_true(union.rdd@env$serialized) unlink(fileName) -}) \ No newline at end of file +}) From f7d7d8972fb9704acb17dc1d0a9447f2be2bc2f0 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 3 Nov 2014 17:04:24 -0500 Subject: [PATCH 239/687] Remove redundant code in test. --- pkg/inst/tests/test_rdd.R | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 3c36f4ffca83d..0c48d14e24f66 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -10,9 +10,6 @@ rdd <- parallelize(sc, nums, 2L) intPairs <- list(list(1L, -1), list(2L, 100), list(2L, 1), list(1L, 200)) intRdd <- parallelize(sc, intPairs, 2L) -# File content -mockFile <- c("Spark is pretty.", "Spark is awesome.") - test_that("count and length on RDD", { expect_equal(count(rdd), 10) expect_equal(length(rdd), 10) From 60d22f29f07908dcab6f2b84ebf7d3af26d20933 Mon Sep 17 00:00:00 2001 From: Ashutosh Raina Date: Wed, 5 Nov 2014 17:30:24 +0530 Subject: [PATCH 240/687] changed sbt version --- pkg/src/project/build.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/project/build.properties b/pkg/src/project/build.properties index 5e96e9672a6ca..64abd373f7fe1 100644 --- a/pkg/src/project/build.properties +++ b/pkg/src/project/build.properties @@ -1 +1 @@ -sbt.version=0.12.4 +sbt.version=0.13.6 From 4bcf59b1b4c330b6e158aa161d1dfafb6f7c6033 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 7 Nov 2014 20:23:16 -0500 Subject: [PATCH 241/687] Adds function flatMapValues. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 33 ++++++++++++++++++++++++++++++++- pkg/inst/tests/test_rdd.R | 6 ++++++ pkg/man/flatMapValues.Rd | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 pkg/man/flatMapValues.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 9e825b6d3d4cd..21b0356681712 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -13,6 +13,7 @@ exportMethods( "Filter", "filter", "flatMap", + "flatMapValues", "groupByKey", "length", "lapply", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e508cc0708d39..e040763f35023 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -426,7 +426,8 @@ setMethod("flatMap", function(X, FUN) { partitionFunc <- function(part) { unlist( - lapply(part, FUN) + lapply(part, FUN), + recursive = F ) } lapplyPartition(X, partitionFunc) @@ -886,6 +887,36 @@ setMethod("mapValues", lapply(X, func) }) +#' Pass each value in the key-value pair RDD through a flatMap function without +#' changing the keys; this also retains the original RDD's partitioning. +#' +#' The same as 'flatMapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. +#' @rdname flatMapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) +#' collect(flatMapValues(rdd, function(x) { x })) +#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) +#'} +setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) + +#' @rdname flatMapValues +#' @aliases flatMapValues,RDD,function-method +setMethod("flatMapValues", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + flatMapFunc <- function(x) { + lapply(FUN(x[[2]]), function(v) { list(x[[1]], v) }) + } + flatMap(X, flatMapFunc) + }) + ############ Shuffle Functions ############ #' Partition an RDD by key diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 0c48d14e24f66..79f40dfa70d89 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -186,6 +186,12 @@ test_that("mapValues() on pairwise RDDs", { })) }) +test_that("flatMapValues() on pairwise RDDs", { + l <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) + actual <- collect(flatMapValues(l, function(x) { x })) + expect_equal(actual, list(list(1,1), list(1,2), list(2,3), list(2,4))) +}) + test_that("distinct() on RDDs", { nums.rep2 <- rep(1:10, 2) rdd.rep2 <- parallelize(sc, nums.rep2, 2L) diff --git a/pkg/man/flatMapValues.Rd b/pkg/man/flatMapValues.Rd new file mode 100644 index 0000000000000..03112204a9231 --- /dev/null +++ b/pkg/man/flatMapValues.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{flatMapValues} +\alias{flatMapValues} +\alias{flatMapValues,RDD,function-method} +\title{Pass each value in the key-value pair RDD through a flatMap function without +changing the keys; this also retains the original RDD's partitioning.} +\usage{ +flatMapValues(X, FUN) + +\S4method{flatMapValues}{RDD,`function`}(X, FUN) +} +\arguments{ +\item{X}{The RDD to apply the transformation.} + +\item{FUN}{the transformation to apply on the value of each element.} +} +\value{ +a new RDD created by the transformation. +} +\description{ +The same as 'flatMapValues()' in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) +collect(flatMapValues(rdd, function(x) { x })) +Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) +} +} + From a17f135ce62416329db0ed88f919cdbd1fe0b010 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sun, 9 Nov 2014 10:01:56 -0500 Subject: [PATCH 242/687] Adds tests for flatMap and flatMapValues. --- pkg/inst/tests/test_rdd.R | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 79f40dfa70d89..cf3051875cd03 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -33,6 +33,12 @@ test_that("mapPartitions on RDD", { expect_equal(actual, list(15, 40)) }) +test_that("flatMap() on RDDs", { + flat <- flatMap(intRdd, function(x) { list(x, x) }) + actual <- collect(flat) + expect_equal(actual, rep(intPairs, each=2)) +}) + test_that("Filter on RDD", { filtered.rdd <- Filter(function(x) { x %% 2 == 0 }, rdd) actual <- collect(filtered.rdd) @@ -190,6 +196,12 @@ test_that("flatMapValues() on pairwise RDDs", { l <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) actual <- collect(flatMapValues(l, function(x) { x })) expect_equal(actual, list(list(1,1), list(1,2), list(2,3), list(2,4))) + + # Generate x to x+1 for every value + actual <- collect(flatMapValues(intRdd, function(x) { x:(x + 1) })) + expect_equal(actual, + list(list(1L, -1), list(1L, 0), list(2L, 100), list(2L, 101), + list(2L, 1), list(2L, 2), list(1L, 200), list(1L, 201))) }) test_that("distinct() on RDDs", { From 18b9be1b0066c6867ccea6014589d3713613477f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 9 Nov 2014 17:40:48 -0800 Subject: [PATCH 243/687] Allow users to set where SparkR is installed This also adds a warning if somebody tries to call sparkR.init multiple times. --- pkg/R/sparkR.R | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 5dc138317d4da..e6b4a20387ed6 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -44,9 +44,11 @@ sparkR.init <- function( sparkHome = Sys.getenv("SPARK_HOME"), sparkEnvir = list(), sparkExecutorEnv = list(), - sparkJars = "") { + sparkJars = "", + sparkRLibDir = "") { if (exists(".sparkRjsc", envir=.sparkREnv)) { + cat("Re-using existing Spark Context. Please restart R to create a new Spark Context\n") return(get(".sparkRjsc", envir=.sparkREnv)) } @@ -54,6 +56,10 @@ sparkR.init <- function( sparkHome <- normalizePath(sparkHome) } + if (nchar(sparkRLibDir) != 0) { + .sparkREnv$libname <- sparkRLibDir + } + sparkEnvirMap <- .jnew("java/util/HashMap") for (varname in names(sparkEnvir)) { sparkEnvirMap$put(varname, sparkEnvir[[varname]]) From d8692e943a9989982a16ecad5c610ff962b04e08 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 10 Nov 2014 16:09:22 +0800 Subject: [PATCH 244/687] Add keys() and values() for the RDD class. --- pkg/NAMESPACE | 4 +++- pkg/R/RDD.R | 48 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 13 +++++++++++ pkg/man/keys.Rd | 26 +++++++++++++++++++++ pkg/man/values.Rd | 26 +++++++++++++++++++++ 5 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 pkg/man/keys.Rd create mode 100644 pkg/man/values.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 9e825b6d3d4cd..d5ca2939384f7 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -14,6 +14,7 @@ exportMethods( "filter", "flatMap", "groupByKey", + "keys", "length", "lapply", "lapplyPartition", @@ -33,7 +34,8 @@ exportMethods( "takeSample", "unionRDD", "unpersist", - "value" + "value", + "values" ) # S3 methods exported diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e508cc0708d39..82f9a1ace1308 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -856,6 +856,54 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", sample(samples)[1:total] }) +#' Return an RDD with the keys of each tuple. +#' +#' @param rdd The RDD from which the keys of each tuple is returned. +#' @rdname keys +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(keys(rdd)) # list(1, 3) +#'} +setGeneric("keys", function(rdd) { standardGeneric("keys") }) + +#' @rdname keys +#' @aliases keys,RDD +setMethod("keys", + signature(rdd = "RDD"), + function(rdd) { + func <- function(x) { + x[[1]] + } + lapply(rdd, func) + }) + +#' Return an RDD with the values of each tuple. +#' +#' @param rdd The RDD from which the values of each tuple is returned. +#' @rdname values +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(values(rdd)) # list(2, 4) +#'} +setGeneric("values", function(rdd) { standardGeneric("values") }) + +#' @rdname values +#' @aliases values,RDD +setMethod("values", + signature(rdd = "RDD"), + function(rdd) { + func <- function(x) { + x[[2]] + } + lapply(rdd, func) + }) + #' Applies a function to all values of the elements, without modifying the keys. #' #' The same as `mapValues()' in Spark. diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 0c48d14e24f66..420d5a6a8c080 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -203,3 +203,16 @@ test_that("minimum() on RDDs", { min <- minimum(rdd) expect_equal(min, 1) }) + +test_that("keys() on RDDs", { + keys <- keys(intRdd) + actual <- collect(keys) + expect_equal(actual, lapply(intPairs, function(x) { x[[1]] })) +}) + +test_that("values() on RDDs", { + values <- values(intRdd) + actual <- collect(values) + expect_equal(actual, lapply(intPairs, function(x) { x[[2]] })) +}) + diff --git a/pkg/man/keys.Rd b/pkg/man/keys.Rd new file mode 100644 index 0000000000000..33ceaae0aefac --- /dev/null +++ b/pkg/man/keys.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{keys} +\alias{keys} +\alias{keys,RDD} +\alias{keys,RDD-method} +\title{Return an RDD with the keys of each tuple.} +\usage{ +keys(rdd) + +\S4method{keys}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD from which the keys of each tuple is returned.} +} +\description{ +Return an RDD with the keys of each tuple. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +collect(keys(rdd)) # list(1, 3) +} +} + diff --git a/pkg/man/values.Rd b/pkg/man/values.Rd new file mode 100644 index 0000000000000..b784e54799035 --- /dev/null +++ b/pkg/man/values.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{values} +\alias{values} +\alias{values,RDD} +\alias{values,RDD-method} +\title{Return an RDD with the values of each tuple.} +\usage{ +values(rdd) + +\S4method{values}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD from which the values of each tuple is returned.} +} +\description{ +Return an RDD with the values of each tuple. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +collect(values(rdd)) # list(2, 4) +} +} + From 70586b4dcfbf6d95c60a844811161b187f66efdb Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 13 Nov 2014 15:55:57 +0800 Subject: [PATCH 245/687] Add join() to the RDD class. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 52 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 7 ++++++ pkg/man/join.Rd | 33 +++++++++++++++++++++++++ 4 files changed, 93 insertions(+) create mode 100644 pkg/man/join.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 128ca886d0048..9c42c8a0f06e4 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -15,6 +15,7 @@ exportMethods( "flatMap", "flatMapValues", "groupByKey", + "join", "keys", "length", "lapply", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 7835984d50b34..3c204467e4cc0 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1301,3 +1301,55 @@ setMethod("unionRDD", } union.rdd }) + +#' Join two RDDs +#' +#' @param rdd1 An RDD. +#' @param rdd2 An RDD. +#' @return a new RDD containing all pairs of elements with matching keys in +#' two input RDDs. +#' @rdname join +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) +#'} +setGeneric("join", function(rdd1, rdd2, numPartitions) { standardGeneric("join") }) + +#' @rdname join +#' @aliases join,RDD,RDD-method +setMethod("join", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + if (rdd1@env$serialized != rdd2@env$serialized) { + # One of the RDDs is not serialized, we need to serialize it first. + if (!rdd1@env$serialized) { + rdd1 <- reserialize(rdd1) + } else { + rdd2 <- reserialize(rdd2) + } + } + rdd1_tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2_tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + t1 <- Filter(function(x) { x[[1]] == 1L }, v) + t1 <- lapply(t1, function(x) { x[[2]] }) + t2 <- Filter(function(x) { x[[1]] == 2L }, v) + t2 <- lapply(t2, function(x) { x[[2]] }) + result <- list() + for (i in t1) { + for (j in t2) { + result[[length(result) + 1L]] <- list(i, j) + } + } + result + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1_tagged, rdd2_tagged), numPartitions), doJoin) + }) + + diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 1b99104980c4e..ba4779a219acd 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -234,3 +234,10 @@ test_that("values() on RDDs", { expect_equal(actual, lapply(intPairs, function(x) { x[[2]] })) }) +test_that("join() on pairwise RDDs", { + rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) + rdd2 <- parallelize(sc, list(list(1,2), list(1,3))) + actual <- collect(join(rdd1, rdd2, 2L)) + expect_equal(actual, list(list(1, list(1, 2)), list(1, list(1, 3)))) +}) + diff --git a/pkg/man/join.Rd b/pkg/man/join.Rd new file mode 100644 index 0000000000000..ec4bf4fd5fb2a --- /dev/null +++ b/pkg/man/join.Rd @@ -0,0 +1,33 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{join} +\alias{join} +\alias{join,RDD,RDD,integer-method} +\alias{join,RDD,RDD-method} +\title{Join two RDDs} +\usage{ +join(rdd1, rdd2, numPartitions) + +\S4method{join}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) +} +\arguments{ +\item{rdd1}{An RDD.} + +\item{rdd2}{An RDD.} +} +\value{ +a new RDD containing all pairs of elements with matching keys in + two input RDDs. +} +\description{ +Join two RDDs +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) +} +} + From 6679eefe06ac3b88d1f110c9a93a7f54494d3d49 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 13 Nov 2014 16:02:32 +0800 Subject: [PATCH 246/687] Update documentation for join(). --- pkg/R/RDD.R | 1 + pkg/man/join.Rd | 2 ++ 2 files changed, 3 insertions(+) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 3c204467e4cc0..73d7837e36d71 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1306,6 +1306,7 @@ setMethod("unionRDD", #' #' @param rdd1 An RDD. #' @param rdd2 An RDD. +#' @param numPartitions Number of partitions to create. #' @return a new RDD containing all pairs of elements with matching keys in #' two input RDDs. #' @rdname join diff --git a/pkg/man/join.Rd b/pkg/man/join.Rd index ec4bf4fd5fb2a..7bf474d08ac99 100644 --- a/pkg/man/join.Rd +++ b/pkg/man/join.Rd @@ -14,6 +14,8 @@ join(rdd1, rdd2, numPartitions) \item{rdd1}{An RDD.} \item{rdd2}{An RDD.} + +\item{numPartitions}{Number of partitions to create.} } \value{ a new RDD containing all pairs of elements with matching keys in From 48fce6743f91e436583707b7d6ef0924692bcd36 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 13 Nov 2014 13:11:48 -0500 Subject: [PATCH 247/687] Adds countByValue(). --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 29 +++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 7 +++++++ pkg/man/countByValue.Rd | 30 ++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 pkg/man/countByValue.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 128ca886d0048..dc0ccb85b9894 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -9,6 +9,7 @@ exportMethods( "collectPartition", "combineByKey", "count", + "countByValue", "distinct", "Filter", "filter", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 7835984d50b34..805e1a15e49e2 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -359,6 +359,35 @@ setMethod("length", count(x) }) +#' Return the count of each unique value in this RDD as a list of +#' (value, count) pairs. +#' +#' Same as countByValue in Spark. +#' +#' @param rdd The RDD to count +#' @return list of (value, count) pairs, where count is number of each unique +#' value in rdd. +#' @rdname countByValue +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, c(1,2,3,2,1)) +#' countByValue(rdd) # (1,2), (2,2), (3,1) +#'} +setGeneric("countByValue", function(rdd) { standardGeneric("countByValue") }) + +#' @rdname countByValue +#' @aliases countByValue,RDD-method +setMethod("countByValue", + signature(rdd = "RDD"), + function(rdd) { + jrdd <- getJRDD(rdd) + partitions <- .jcall(jrdd, "Ljava/util/List;", "splits") + numPartitions <- .jcall(partitions, "I", "size") + ones <- lapply(rdd, function(item) { list(item, 1L) }) + collect(reduceByKey(ones, `+`, numPartitions)) + }) #' Apply a function to all elements #' diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 1b99104980c4e..9a2a5a6442fc4 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -15,6 +15,13 @@ test_that("count and length on RDD", { expect_equal(length(rdd), 10) }) +test_that("count by values and keys", { + mods <- lapply(rdd, function(x) { x %% 3 }) + actual <- countByValue(mods) + expected <- list(list(0, 3L), list(1, 4L), list(2, 3L)) + expect_equal(actual, expected) +}) + test_that("lapply on RDD", { multiples <- lapply(rdd, function(x) { 2 * x }) actual <- collect(multiples) diff --git a/pkg/man/countByValue.Rd b/pkg/man/countByValue.Rd new file mode 100644 index 0000000000000..dcc4eef379af0 --- /dev/null +++ b/pkg/man/countByValue.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{countByValue} +\alias{countByValue} +\alias{countByValue,RDD-method} +\title{Return the count of each unique value in this RDD as a list of +(value, count) pairs.} +\usage{ +countByValue(rdd) + +\S4method{countByValue}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD to count} +} +\value{ +list of (value, count) pairs, where count is number of each unique +value in rdd. +} +\description{ +Same as countByValue in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, c(1,2,3,2,1)) +countByValue(rdd) # (1,2), (2,2), (3,1) +} +} + From 9c24c8bef60a2ddb12477702776ffbb3ced37d26 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 13 Nov 2014 13:38:13 -0500 Subject: [PATCH 248/687] Adds function countByKey(). --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 26 ++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 4 ++++ pkg/man/countByKey.Rd | 29 +++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 pkg/man/countByKey.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index dc0ccb85b9894..2c4da7c0cd902 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -9,6 +9,7 @@ exportMethods( "collectPartition", "combineByKey", "count", + "countByKey", "countByValue", "distinct", "Filter", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 805e1a15e49e2..c032f4c87b005 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -389,6 +389,32 @@ setMethod("countByValue", collect(reduceByKey(ones, `+`, numPartitions)) }) +#' Count the number of elements for each key, and return the result to the +#' master as lists of (key, count) pairs. +#' +#' Same as countByKey in Spark. +#' +#' @param rdd The RDD to count keys. +#' @return list of (key, count) pairs, where count is number of each key in rdd. +#' @rdname countByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list("a", 1), list("b", 1), list("a", 1))) +#' countByKey(rdd) # ("a", 2), ("b", 1) +#'} +setGeneric("countByKey", function(rdd) { standardGeneric("countByKey") }) + +#' @rdname countByKey +#' @aliases countByKey,RDD-method +setMethod("countByKey", + signature(rdd = "RDD"), + function(rdd) { + keys <- lapply(rdd, function(item) { item[[1]] }) + countByValue(keys) + }) + #' Apply a function to all elements #' #' This function creates a new RDD by applying the given transformation to all diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 9a2a5a6442fc4..2bf9db8f0b85e 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -20,6 +20,10 @@ test_that("count by values and keys", { actual <- countByValue(mods) expected <- list(list(0, 3L), list(1, 4L), list(2, 3L)) expect_equal(actual, expected) + + actual <- countByKey(intRdd) + expected <- list(list(2L, 2L), list(1L, 2L)) + expect_equal(actual, expected) }) test_that("lapply on RDD", { diff --git a/pkg/man/countByKey.Rd b/pkg/man/countByKey.Rd new file mode 100644 index 0000000000000..8188421bd55df --- /dev/null +++ b/pkg/man/countByKey.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{countByKey} +\alias{countByKey} +\alias{countByKey,RDD-method} +\title{Count the number of elements for each key, and return the result to the +master as lists of (key, count) pairs.} +\usage{ +countByKey(rdd) + +\S4method{countByKey}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD to count keys.} +} +\value{ +list of (key, count) pairs, where count is number of each key in rdd. +} +\description{ +Same as countByKey in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list("a", 1), list("b", 1), list("a", 1))) +countByKey(rdd) # ("a", 2), ("b", 1) +} +} + From e119757d9fecc43ea1a88085eb7e7bcd472ba1b1 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 13 Nov 2014 13:43:12 -0500 Subject: [PATCH 249/687] Minor fix. --- pkg/R/RDD.R | 6 +++--- pkg/man/countByKey.Rd | 4 ++-- pkg/man/countByValue.Rd | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c032f4c87b005..bd3d6375bd42f 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -373,7 +373,7 @@ setMethod("length", #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, c(1,2,3,2,1)) -#' countByValue(rdd) # (1,2), (2,2), (3,1) +#' countByValue(rdd) # (1,2L), (2,2L), (3,1L) #'} setGeneric("countByValue", function(rdd) { standardGeneric("countByValue") }) @@ -401,8 +401,8 @@ setMethod("countByValue", #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list("a", 1), list("b", 1), list("a", 1))) -#' countByKey(rdd) # ("a", 2), ("b", 1) +#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) +#' countByKey(rdd) # ("a", 2L), ("b", 1L) #'} setGeneric("countByKey", function(rdd) { standardGeneric("countByKey") }) diff --git a/pkg/man/countByKey.Rd b/pkg/man/countByKey.Rd index 8188421bd55df..875ab899f6ee6 100644 --- a/pkg/man/countByKey.Rd +++ b/pkg/man/countByKey.Rd @@ -22,8 +22,8 @@ Same as countByKey in Spark. \examples{ \dontrun{ sc <- sparkR.init() -rdd <- parallelize(sc, list(list("a", 1), list("b", 1), list("a", 1))) -countByKey(rdd) # ("a", 2), ("b", 1) +rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) +countByKey(rdd) # ("a", 2L), ("b", 1L) } } diff --git a/pkg/man/countByValue.Rd b/pkg/man/countByValue.Rd index dcc4eef379af0..52439be85980b 100644 --- a/pkg/man/countByValue.Rd +++ b/pkg/man/countByValue.Rd @@ -24,7 +24,7 @@ Same as countByValue in Spark. \dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, c(1,2,3,2,1)) -countByValue(rdd) # (1,2), (2,2), (3,1) +countByValue(rdd) # (1,2L), (2,2L), (3,1L) } } From 2326a656644fb683ddeae6b5f195fa4c8a39a3ff Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 13 Nov 2014 14:20:44 -0800 Subject: [PATCH 250/687] Use SPARK_LOCAL_DIRS to create tmp files --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 00fce5b57cf1f..9d184b53a925c 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -250,14 +250,16 @@ object RRDD { numPartitions: Int, splitIndex: Int) : File = { + val env = SparkEnv.get + val conf = env.conf val tempDir = - System.getProperty("spark.local.dir", System.getProperty("java.io.tmpdir")).split(',')(0) + Option(System.getenv("SPARK_LOCAL_DIRS")).getOrElse( + conf.get("spark.local.dir", System.getProperty("java.io.tmpdir"))).split(',')(0) val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) val tempFileIn = File.createTempFile("rSpark", "in", new File(tempDir)) val tempFileName = tempFile.getAbsolutePath() val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt - val env = SparkEnv.get // Start a thread to feed the process input from our parent's iterator new Thread("stdin writer for R") { From 1220d92cb1fe04bd14a2c8100ad3298f4eb71692 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 13 Nov 2014 22:13:48 -0500 Subject: [PATCH 251/687] Adds function numPartitions(). --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 37 ++++++++++++++++++++++++++++--------- pkg/inst/tests/test_rdd.R | 5 +++++ pkg/man/numPartitions.Rd | 28 ++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 pkg/man/numPartitions.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 2c4da7c0cd902..8043b594623a8 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -29,6 +29,7 @@ exportMethods( "mapValues", "maximum", "minimum", + "numPartitions", "partitionBy", "reduce", "reduceByKey", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index bd3d6375bd42f..36ba21ba69902 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -234,6 +234,30 @@ setMethod("checkpoint", rdd }) +#' Gets the number of partitions of an RDD +#' +#' @param rdd A RDD. +#' @return the number of partitions of rdd as an integer. +#' @rdname numPartitions +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' numParititions(rdd) # 2L +#'} +setGeneric("numPartitions", function(rdd) { standardGeneric("numPartitions") }) + +#' @rdname numPartitions +#' @aliases numPartitions,RDD-method +setMethod("numPartitions", + signature(rdd = "RDD"), + function(rdd) { + jrdd <- getJRDD(rdd) + partitions <- .jcall(jrdd, "Ljava/util/List;", "splits") + .jcall(partitions, "I", "size") + }) + #' Collect elements of an RDD #' #' @description @@ -382,11 +406,8 @@ setGeneric("countByValue", function(rdd) { standardGeneric("countByValue") }) setMethod("countByValue", signature(rdd = "RDD"), function(rdd) { - jrdd <- getJRDD(rdd) - partitions <- .jcall(jrdd, "Ljava/util/List;", "splits") - numPartitions <- .jcall(partitions, "I", "size") ones <- lapply(rdd, function(item) { list(item, 1L) }) - collect(reduceByKey(ones, `+`, numPartitions)) + collect(reduceByKey(ones, `+`, numPartitions(rdd))) }) #' Count the number of elements for each key, and return the result to the @@ -714,8 +735,8 @@ setMethod("take", resList <- list() index <- -1 jrdd <- getJRDD(rdd) - partitions <- .jcall(jrdd, "Ljava/util/List;", "splits") - numPartitions <- .jcall(partitions, "I", "size") + numPartitions <- numPartitions(rdd) + # TODO(shivaram): Collect more than one partition based on size # estimates similar to the scala version of `take`. while (TRUE) { @@ -762,9 +783,7 @@ setMethod("distinct", signature(rdd = "RDD", numPartitions = "missingOrInteger"), function(rdd, numPartitions) { if (missing(numPartitions)) { - jrdd <- getJRDD(rdd) - partitions <- .jcall(jrdd, "Ljava/util/List;", "splits") - numPartitions <- .jcall(partitions, "I", "size") + numPartitions <- SparkR::numPartitions(rdd) } identical.mapped <- lapply(rdd, function(x) { list(x, NULL) }) reduced <- reduceByKey(identical.mapped, diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 2bf9db8f0b85e..7c54ffcacdbd9 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -10,6 +10,11 @@ rdd <- parallelize(sc, nums, 2L) intPairs <- list(list(1L, -1), list(2L, 100), list(2L, 1), list(1L, 200)) intRdd <- parallelize(sc, intPairs, 2L) +test_that("get number of partitions in RDD", { + expect_equal(numPartitions(rdd), 2) + expect_equal(numPartitions(intRdd), 2) +}) + test_that("count and length on RDD", { expect_equal(count(rdd), 10) expect_equal(length(rdd), 10) diff --git a/pkg/man/numPartitions.Rd b/pkg/man/numPartitions.Rd new file mode 100644 index 0000000000000..6a5ce79228e5e --- /dev/null +++ b/pkg/man/numPartitions.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{numPartitions} +\alias{numPartitions} +\alias{numPartitions,RDD-method} +\title{Gets the number of partitions of an RDD} +\usage{ +numPartitions(rdd) + +\S4method{numPartitions}{RDD}(rdd) +} +\arguments{ +\item{rdd}{A RDD.} +} +\value{ +the number of partitions of rdd as an integer. +} +\description{ +Gets the number of partitions of an RDD +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10, 2L) +numParititions(rdd) # 2L +} +} + From ce1661fa4e8480c47d2b0c611734e821f7d31d9f Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 14 Nov 2014 19:52:27 -0800 Subject: [PATCH 252/687] Fix slow take(): deserialize only up to necessary # of elements. --- pkg/R/RDD.R | 34 ++++++++++++++++++---------------- pkg/R/utils.R | 11 +++++++---- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 36ba21ba69902..3f25f24746847 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -383,13 +383,13 @@ setMethod("length", count(x) }) -#' Return the count of each unique value in this RDD as a list of +#' Return the count of each unique value in this RDD as a list of #' (value, count) pairs. -#' +#' #' Same as countByValue in Spark. #' #' @param rdd The RDD to count -#' @return list of (value, count) pairs, where count is number of each unique +#' @return list of (value, count) pairs, where count is number of each unique #' value in rdd. #' @rdname countByValue #' @export @@ -412,7 +412,7 @@ setMethod("countByValue", #' Count the number of elements for each key, and return the result to the #' master as lists of (key, count) pairs. -#' +#' #' Same as countByKey in Spark. #' #' @param rdd The RDD to count keys. @@ -596,8 +596,8 @@ setMethod("mapPartitionsWithIndex", lapplyPartitionsWithIndex(X, FUN) }) -#' This function returns a new RDD containing only the elements that satisfy -#' a predicate (i.e. returning TRUE in a given logical function). +#' This function returns a new RDD containing only the elements that satisfy +#' a predicate (i.e. returning TRUE in a given logical function). #' The same as `filter()' in Spark. #' #' @param f A unary predicate function. @@ -736,7 +736,7 @@ setMethod("take", index <- -1 jrdd <- getJRDD(rdd) numPartitions <- numPartitions(rdd) - + # TODO(shivaram): Collect more than one partition based on size # estimates similar to the scala version of `take`. while (TRUE) { @@ -751,16 +751,18 @@ setMethod("take", "collectPartitions", .jarray(as.integer(index))) partition <- partitionArr[[1]] - elems <- convertJListToRList(partition, flatten = TRUE) + + size <- num - length(resList) + elems <- convertJListToRList(partition, flatten = TRUE, size = size) # TODO: Check if this append is O(n^2)? - resList <- append(resList, head(elems, n = num - length(resList))) + resList <- append(resList, head(elems, n = size)) } resList }) #' Removes the duplicates from RDD. #' -#' This function returns a new RDD containing the distinct elements in the +#' This function returns a new RDD containing the distinct elements in the #' given RDD. The same as `distinct()' in Spark. #' #' @param rdd The RDD to remove duplicates from. @@ -773,7 +775,7 @@ setMethod("take", #' rdd <- parallelize(sc, c(1,2,2,3,3,3)) #' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) #'} -setGeneric("distinct", +setGeneric("distinct", function(rdd, numPartitions) { standardGeneric("distinct") }) setClassUnion("missingOrInteger", c("missing", "integer")) @@ -786,8 +788,8 @@ setMethod("distinct", numPartitions <- SparkR::numPartitions(rdd) } identical.mapped <- lapply(rdd, function(x) { list(x, NULL) }) - reduced <- reduceByKey(identical.mapped, - function(x, y) { x }, + reduced <- reduceByKey(identical.mapped, + function(x, y) { x }, numPartitions) resRDD <- lapply(reduced, function(x) { x[[1]] }) resRDD @@ -1011,7 +1013,7 @@ setMethod("mapValues", #' Pass each value in the key-value pair RDD through a flatMap function without #' changing the keys; this also retains the original RDD's partitioning. -#' +#' #' The same as 'flatMapValues()' in Spark. #' #' @param X The RDD to apply the transformation. @@ -1341,7 +1343,7 @@ setMethod("combineByKey", #' #' @param x An RDD. #' @param y An RDD. -#' @return a new RDD created by performing the simple union (witout removing +#' @return a new RDD created by performing the simple union (witout removing #' duplicates) of two input RDDs. #' @rdname unionRDD #' @export @@ -1372,6 +1374,6 @@ setMethod("unionRDD", jrdd <- .jcall(getJRDD(x), "Lorg/apache/spark/api/java/JavaRDD;", "union", getJRDD(y)) union.rdd <- RDD(jrdd, TRUE) - } + } union.rdd }) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index f5bcf21a3d7f7..9b8656c0bbc07 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -1,9 +1,12 @@ # Utilities and Helpers -# Given a JList, returns an R list containing the same elements. Takes care -# of deserializations and type conversions. -convertJListToRList <- function(jList, flatten) { - size <- .jcall(jList, "I", "size") +# Given a JList, returns an R list containing the same elements, the number +# of which is optionally upper bounded by `size` (by default, return all elements). +# Takes care of deserializations and type conversions. +convertJListToRList <- function(jList, flatten, size = NULL) { + if (is.null(size)) { + size <- .jcall(jList, "I", "size") + } results <- if (size > 0) { lapply(0:(size - 1), function(index) { From bb779bf5607e95508a6c54515b572f32428a2aac Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 14 Nov 2014 23:13:21 -0500 Subject: [PATCH 253/687] Rename the filter function to filterRDD to follow the API consistency. Filter() is also kept. --- pkg/NAMESPACE | 2 +- pkg/R/RDD.R | 39 +++++++++++++---------------- pkg/inst/tests/test_rdd.R | 6 ++--- pkg/man/{Filter.Rd => filterRDD.Rd} | 18 ++++++------- 4 files changed, 31 insertions(+), 34 deletions(-) rename pkg/man/{Filter.Rd => filterRDD.Rd} (66%) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 8043b594623a8..ecb42e0d691b0 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -13,7 +13,7 @@ exportMethods( "countByValue", "distinct", "Filter", - "filter", + "filterRDD", "flatMap", "flatMapValues", "groupByKey", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 36ba21ba69902..b75cff7b4210a 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -600,39 +600,36 @@ setMethod("mapPartitionsWithIndex", #' a predicate (i.e. returning TRUE in a given logical function). #' The same as `filter()' in Spark. #' -#' @param f A unary predicate function. -#' @param x The RDD to be filtered. -#' @rdname Filter +#' @param rdd The RDD to be filtered. +#' @param filterFunc A unary predicate function. +#' @rdname filterRDD #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) -#' unlist(collect(Filter(function (x) { x < 3 }, rdd))) # c(1, 2) +#' unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) #'} -#setGeneric("Filter", function(f, x) { standardGeneric("Filter") }) - -#' @rdname Filter -#' @aliases Filter,function,RDD-method filter,function,RDD-method -setMethod("Filter", - signature(f = "function", x = "RDD"), - function(f, x) { +setGeneric("filterRDD", + function(rdd, filterFunc) { standardGeneric("filterRDD") }) + +#' @rdname filterRDD +#' @aliases filterRDD,RDD,function-method +setMethod("filterRDD", + signature(rdd = "RDD", filterFunc = "function"), + function(rdd, filterFunc) { filter.func <- function(part) { - Filter(f, part) + Filter(filterFunc, part) } - lapplyPartition(x, filter.func) + lapplyPartition(rdd, filter.func) }) -#' @rdname Filter -#' @export -setGeneric("filter", function(f, x) { standardGeneric("filter") }) - -#' @rdname Filter -#' @aliases filter,function,RDD-method -setMethod("filter", +#' @rdname filterRDD +#' @aliases Filter,function,RDD-method +setMethod("Filter", signature(f = "function", x = "RDD"), function(f, x) { - Filter(f, x) + filterRDD(x, f) }) #' Reduce across elements of an RDD. diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 7c54ffcacdbd9..48170a40bf952 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -55,8 +55,8 @@ test_that("flatMap() on RDDs", { expect_equal(actual, rep(intPairs, each=2)) }) -test_that("Filter on RDD", { - filtered.rdd <- Filter(function(x) { x %% 2 == 0 }, rdd) +test_that("filterRDD on RDD", { + filtered.rdd <- filterRDD(rdd, function(x) { x %% 2 == 0 }) actual <- collect(filtered.rdd) expect_equal(actual, list(2, 4, 6, 8, 10)) @@ -65,7 +65,7 @@ test_that("Filter on RDD", { expect_equal(actual, list(list(1L, -1))) # Filter out all elements. - filtered.rdd <- Filter(function(x) { x > 10 }, rdd) + filtered.rdd <- filterRDD(rdd, function(x) { x > 10 }) actual <- collect(filtered.rdd) expect_equal(actual, list()) }) diff --git a/pkg/man/Filter.Rd b/pkg/man/filterRDD.Rd similarity index 66% rename from pkg/man/Filter.Rd rename to pkg/man/filterRDD.Rd index ab4de14ef1ad6..5c0bf109bda34 100644 --- a/pkg/man/Filter.Rd +++ b/pkg/man/filterRDD.Rd @@ -1,23 +1,23 @@ % Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} -\name{Filter,function,RDD-method} +\name{filterRDD} \alias{Filter,function,RDD-method} -\alias{filter} -\alias{filter,function,RDD-method} +\alias{filterRDD} +\alias{filterRDD,RDD,function-method} \title{This function returns a new RDD containing only the elements that satisfy a predicate (i.e. returning TRUE in a given logical function). The same as `filter()' in Spark.} \usage{ -\S4method{Filter}{`function`,RDD}(f, x) +filterRDD(rdd, filterFunc) -filter(f, x) +\S4method{filterRDD}{RDD,`function`}(rdd, filterFunc) -\S4method{filter}{`function`,RDD}(f, x) +\S4method{Filter}{`function`,RDD}(f, x) } \arguments{ -\item{f}{A unary predicate function.} +\item{rdd}{The RDD to be filtered.} -\item{x}{The RDD to be filtered.} +\item{filterFunc}{A unary predicate function.} } \description{ This function returns a new RDD containing only the elements that satisfy @@ -28,7 +28,7 @@ The same as `filter()' in Spark. \dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10) -unlist(collect(Filter(function (x) { x < 3 }, rdd))) # c(1, 2) +unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) } } From 97d4e02cc988d7c212bbce8793670aaf3078d753 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 14 Nov 2014 20:27:25 -0800 Subject: [PATCH 254/687] Min() upper-bound size with actual size. --- pkg/R/utils.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 9b8656c0bbc07..aa9f122b446a2 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -4,9 +4,9 @@ # of which is optionally upper bounded by `size` (by default, return all elements). # Takes care of deserializations and type conversions. convertJListToRList <- function(jList, flatten, size = NULL) { - if (is.null(size)) { - size <- .jcall(jList, "I", "size") - } + arrSize <- .jcall(jList, "I", "size") + size <- min(arrSize, size) + results <- if (size > 0) { lapply(0:(size - 1), function(index) { From 7952180389b697fde158e656860df87339128910 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 14 Nov 2014 20:49:53 -0800 Subject: [PATCH 255/687] Copy, use getLocalDirs from Spark Utils.scala --- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 72 ++++++++++++++++++- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 9d184b53a925c..ccebb6281e751 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -252,9 +252,7 @@ object RRDD { val env = SparkEnv.get val conf = env.conf - val tempDir = - Option(System.getenv("SPARK_LOCAL_DIRS")).getOrElse( - conf.get("spark.local.dir", System.getProperty("java.io.tmpdir"))).split(',')(0) + val tempDir = getLocalDir(conf) val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) val tempFileIn = File.createTempFile("rSpark", "in", new File(tempDir)) @@ -328,4 +326,72 @@ object RRDD { tempFile } + + def isRunningInYarnContainer(conf: SparkConf): Boolean = { + // These environment variables are set by YARN. + // For Hadoop 0.23.X, we check for YARN_LOCAL_DIRS (we use this below in getYarnLocalDirs()) + // For Hadoop 2.X, we check for CONTAINER_ID. + System.getenv("CONTAINER_ID") != null || System.getenv("YARN_LOCAL_DIRS") != null + } + + /** + * Get the path of a temporary directory. Spark's local directories can be configured through + * multiple settings, which are used with the following precedence: + * + * - If called from inside of a YARN container, this will return a directory chosen by YARN. + * - If the SPARK_LOCAL_DIRS environment variable is set, this will return a directory from it. + * - Otherwise, if the spark.local.dir is set, this will return a directory from it. + * - Otherwise, this will return java.io.tmpdir. + * + * Some of these configuration options might be lists of multiple paths, but this method will + * always return a single directory. + */ + def getLocalDir(conf: SparkConf): String = { + getOrCreateLocalRootDirs(conf)(0) + } + + /** + * Gets or creates the directories listed in spark.local.dir or SPARK_LOCAL_DIRS, + * and returns only the directories that exist / could be created. + * + * If no directories could be created, this will return an empty list. + */ + def getOrCreateLocalRootDirs(conf: SparkConf): Array[String] = { + val confValue = if (isRunningInYarnContainer(conf)) { + // If we are in yarn mode, systems can have different disk layouts so we must set it + // to what Yarn on this system said was available. + getYarnLocalDirs(conf) + } else { + Option(System.getenv("SPARK_LOCAL_DIRS")).getOrElse( + conf.get("spark.local.dir", System.getProperty("java.io.tmpdir"))) + } + val rootDirs = confValue.split(',') + + rootDirs.flatMap { rootDir => + val localDir: File = new File(rootDir) + val foundLocalDir = localDir.exists || localDir.mkdirs() + if (!foundLocalDir) { + None + } else { + Some(rootDir) + } + } + } + + /** Get the Yarn approved local directories. */ + def getYarnLocalDirs(conf: SparkConf): String = { + // Hadoop 0.23 and 2.x have different Environment variable names for the + // local dirs, so lets check both. We assume one of the 2 is set. + // LOCAL_DIRS => 2.X, YARN_LOCAL_DIRS => 0.23.X + val localDirs = Option(System.getenv("YARN_LOCAL_DIRS")) + .getOrElse(Option(System.getenv("LOCAL_DIRS")) + .getOrElse("")) + + if (localDirs.isEmpty) { + throw new Exception("Yarn Local dirs can't be empty") + } + localDirs + } + + } From d399aeb6f179193ac217fc3df8034f8e83345365 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Fri, 14 Nov 2014 21:50:32 -0800 Subject: [PATCH 256/687] Apply size-capping on logical representation instead of physical. - This supercedes the previous commit, which is a wrong fix. - Also, modify take() test slightly to cover all cases. --- pkg/R/RDD.R | 3 ++- pkg/R/utils.R | 21 ++++++++++++++------- pkg/inst/tests/test_take.R | 5 ++++- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 3f25f24746847..7edcdfb755cb9 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -753,9 +753,10 @@ setMethod("take", partition <- partitionArr[[1]] size <- num - length(resList) + # elems is capped to have at most `size` elements elems <- convertJListToRList(partition, flatten = TRUE, size = size) # TODO: Check if this append is O(n^2)? - resList <- append(resList, head(elems, n = size)) + resList <- append(resList, elems) } resList }) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index aa9f122b446a2..932def6f49a7e 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -5,10 +5,8 @@ # Takes care of deserializations and type conversions. convertJListToRList <- function(jList, flatten, size = NULL) { arrSize <- .jcall(jList, "I", "size") - size <- min(arrSize, size) - - results <- if (size > 0) { - lapply(0:(size - 1), + results <- if (arrSize > 0) { + lapply(0:(arrSize - 1), function(index) { jElem <- .jcall(jList, "Ljava/lang/Object;", @@ -19,7 +17,7 @@ convertJListToRList <- function(jList, flatten, size = NULL) { obj <- .jsimplify(jElem) if (inherits(obj, "jobjRef") && .jinstanceof(obj, "[B")) { - # RDD[Array[Byte]]. + # RDD[Array[Byte]]. `obj` is a whole partition. rRaw <- .jevalArray(.jcastToArray(jElem)) res <- unserialize(rRaw) @@ -52,11 +50,20 @@ convertJListToRList <- function(jList, flatten, size = NULL) { } if (flatten) { - as.list(unlist(results, recursive = FALSE)) + r <- as.list(unlist(results, recursive = FALSE)) } else { - as.list(results) + r <- as.list(results) } + if (!is.null(size)) { + # Invariant: whenever `size` is passed in, it applies to the + # logical representation of the data, namely the user doesn't + # and shouldn't think about byte arrays and/or serde. Hence we + # apply the upper bound directly after the flatten semantics. + r <- head(r, n = size) + } else { + r + } } # Given a Java array of byte arrays, deserilize each, returning an R list of diff --git a/pkg/inst/tests/test_take.R b/pkg/inst/tests/test_take.R index b29ed296fb1a6..3dbe3275e6d49 100644 --- a/pkg/inst/tests/test_take.R +++ b/pkg/inst/tests/test_take.R @@ -17,8 +17,11 @@ jsc <- sparkR.init() test_that("take() gives back the original elements in correct count and order", { numVectorRDD <- parallelize(jsc, numVector, 10) + # case: number of elements to take is less than the size of the first partition expect_equal(take(numVectorRDD, 1), as.list(head(numVector, n = 1))) - expect_equal(take(numVectorRDD, 3), as.list(head(numVector, n = 3))) + # case: number of elements to take is the same as the size of the first partition + expect_equal(take(numVectorRDD, 11), as.list(head(numVector, n = 11))) + # case: number of elements to take is greater than all elements expect_equal(take(numVectorRDD, length(numVector)), as.list(numVector)) expect_equal(take(numVectorRDD, length(numVector) + 1), as.list(numVector)) From c06fc9023571d8bd7cc80d8aa2586bab91950763 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Sat, 15 Nov 2014 00:31:55 -0800 Subject: [PATCH 257/687] Fix: only optimize for unserialized dataset case. --- pkg/R/RDD.R | 5 ++++- pkg/R/utils.R | 38 ++++++++++++++++++++++--------------- pkg/src/project/plugins.sbt | 2 ++ 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 7edcdfb755cb9..0be7455b6c483 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -754,7 +754,10 @@ setMethod("take", size <- num - length(resList) # elems is capped to have at most `size` elements - elems <- convertJListToRList(partition, flatten = TRUE, size = size) + elems <- convertJListToRList(partition, + flatten = TRUE, + logicalUpperBound = size, + serialized = rdd@env$serialized) # TODO: Check if this append is O(n^2)? resList <- append(resList, elems) } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 932def6f49a7e..e4debaaf26de4 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -1,10 +1,18 @@ # Utilities and Helpers # Given a JList, returns an R list containing the same elements, the number -# of which is optionally upper bounded by `size` (by default, return all elements). -# Takes care of deserializations and type conversions. -convertJListToRList <- function(jList, flatten, size = NULL) { +# of which is optionally upper bounded by `logicalUpperBound` (by default, +# return all elements). Takes care of deserializations and type conversions. +convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serialized = TRUE) { arrSize <- .jcall(jList, "I", "size") + + # Unserialized datasets (such as an RDD directly generated by textFile()): + # each partition is not dense-packed into one Array[Byte], and `arrSize` + # here corresponds to number of logical elements. Thus we can prune here. + if (!serialized && !is.null(logicalUpperBound)) { + arrSize <- min(arrSize, logicalUpperBound) + } + results <- if (arrSize > 0) { lapply(0:(arrSize - 1), function(index) { @@ -22,6 +30,16 @@ convertJListToRList <- function(jList, flatten, size = NULL) { rRaw <- .jevalArray(.jcastToArray(jElem)) res <- unserialize(rRaw) + # For serialized datasets, `obj` (and `rRaw`) here corresponds to + # one whole partition dense-packed together. We deserialize the + # whole partition first, then cap the number of elements to be returned. + + # TODO: is it possible to distinguish element boundary so that we can + # unserialize only what we need? + if (!is.null(logicalUpperBound)) { + res <- head(res, n = logicalUpperBound) + } + } else if (inherits(obj, "jobjRef") && .jinstanceof(obj, "scala.Tuple2")) { # JavaPairRDD[Array[Byte], Array[Byte]]. @@ -50,19 +68,9 @@ convertJListToRList <- function(jList, flatten, size = NULL) { } if (flatten) { - r <- as.list(unlist(results, recursive = FALSE)) - } else { - r <- as.list(results) - } - - if (!is.null(size)) { - # Invariant: whenever `size` is passed in, it applies to the - # logical representation of the data, namely the user doesn't - # and shouldn't think about byte arrays and/or serde. Hence we - # apply the upper bound directly after the flatten semantics. - r <- head(r, n = size) + as.list(unlist(results, recursive = FALSE)) } else { - r + as.list(results) } } diff --git a/pkg/src/project/plugins.sbt b/pkg/src/project/plugins.sbt index 6d31a65f305a3..147c561511f0b 100644 --- a/pkg/src/project/plugins.sbt +++ b/pkg/src/project/plugins.sbt @@ -1,3 +1,5 @@ resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1") + +addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0") From c71228dc5712055b7916599bf7221ac4db173af2 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 17 Nov 2014 15:07:52 +0800 Subject: [PATCH 258/687] Pre-allocate list with fixed length. Add test case for join() using string key. --- pkg/R/RDD.R | 11 +++++++---- pkg/inst/tests/test_rdd.R | 5 +++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 73d7837e36d71..cdaf1ba793f68 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1333,8 +1333,8 @@ setMethod("join", rdd2 <- reserialize(rdd2) } } - rdd1_tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2_tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { t1 <- Filter(function(x) { x[[1]] == 1L }, v) @@ -1342,15 +1342,18 @@ setMethod("join", t2 <- Filter(function(x) { x[[1]] == 2L }, v) t2 <- lapply(t2, function(x) { x[[2]] }) result <- list() + length(result) <- length(t1) * length(t2) + index <- 1L for (i in t1) { for (j in t2) { - result[[length(result) + 1L]] <- list(i, j) + result[[index]] <- list(i, j) + index <- index + 1L } } result } - joined <- flatMapValues(groupByKey(unionRDD(rdd1_tagged, rdd2_tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) }) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index ba4779a219acd..6d76506ee20f0 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -239,5 +239,10 @@ test_that("join() on pairwise RDDs", { rdd2 <- parallelize(sc, list(list(1,2), list(1,3))) actual <- collect(join(rdd1, rdd2, 2L)) expect_equal(actual, list(list(1, list(1, 2)), list(1, list(1, 3)))) + + rdd1 <- parallelize(sc, list(list("a",1), list("b",4))) + rdd2 <- parallelize(sc, list(list("a",2), list("a",3))) + actual <- collect(join(rdd1, rdd2, 2L)) + expect_equal(actual, list(list("a", list(1, 2)), list("a", list(1, 3)))) }) From 63d6ac7f9c81fc6b13f1e238a66811fdb7e02581 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 19 Nov 2014 21:06:55 -0500 Subject: [PATCH 259/687] Adds function foreach() and foreachPartition(). --- pkg/NAMESPACE | 2 ++ pkg/R/RDD.R | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index b71bf29ea1d28..acfe5a072f46e 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -16,6 +16,8 @@ exportMethods( "filterRDD", "flatMap", "flatMapValues", + "foreach", + "foreachPartition", "groupByKey", "join", "keys", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 4296053486b61..4c36962df517e 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -707,6 +707,55 @@ setMethod("minimum", reduce(rdd, min) }) +#' Applies a function to all elements in an RDD, and force it evaluated. +#' +#' @param rdd The RDD to apply the function +#' @param func The function to be applied. +#' @export +#' @rdname foreach +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' foreach(rdd, print) +#'} +setGeneric("foreach", function(rdd, func) { standardGeneric("foreach") }) + +#' @rdname foreach +#' @aliases foreach,RDD,function-method +setMethod("foreach", + signature(rdd = "RDD", func="function"), + function(rdd, func) { + partition.func <- function(x) { + lapply(x, func) + NULL + } + invisible(collect(mapPartitions(rdd, partition.func))) + }) + +#' Applies a function to each partition in an RDD, and force it evaluated. +#' +#' @param rdd The RDD to apply the function +#' @param func The function to be applied to partitions. +#' @export +#' @rdname foreach +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' foreachPartition(rdd, function(part) { lapply(part, print); NULL }) +#'} +setGeneric("foreachPartition", + function(rdd, func) { standardGeneric("foreachPartition") }) + +#' @rdname foreach +#' @aliases foreachPartition,RDD,function-method +setMethod("foreachPartition", + signature(rdd = "RDD", func="function"), + function(rdd, func) { + invisible(collect(mapPartitions(rdd, func))) + }) + #' Take elements from an RDD. #' #' This function takes the first NUM elements in the RDD and From 39509c77f05ceb9354112623357525f850f11c44 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 19 Nov 2014 21:07:45 -0500 Subject: [PATCH 260/687] add Rd file for foreach and foreachPartition. --- pkg/man/foreach.Rd | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 pkg/man/foreach.Rd diff --git a/pkg/man/foreach.Rd b/pkg/man/foreach.Rd new file mode 100644 index 0000000000000..05e2ff309f60e --- /dev/null +++ b/pkg/man/foreach.Rd @@ -0,0 +1,44 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{foreach} +\alias{foreach} +\alias{foreach,RDD,function-method} +\alias{foreachPartition} +\alias{foreachPartition,RDD,function-method} +\title{Applies a function to all elements in an RDD, and force it evaluated.} +\usage{ +foreach(rdd, func) + +\S4method{foreach}{RDD,`function`}(rdd, func) + +foreachPartition(rdd, func) + +\S4method{foreachPartition}{RDD,`function`}(rdd, func) +} +\arguments{ +\item{rdd}{The RDD to apply the function} + +\item{func}{The function to be applied.} + +\item{rdd}{The RDD to apply the function} + +\item{func}{The function to be applied to partitions.} +} +\description{ +Applies a function to all elements in an RDD, and force it evaluated. + +Applies a function to each partition in an RDD, and force it evaluated. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +foreach(rdd, print) +} +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +foreachPartition(rdd, function(part) { lapply(part, print); NULL }) +} +} + From 425f0c61564f60323cd3edece7ab336724d4b400 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 20 Nov 2014 13:24:44 +0800 Subject: [PATCH 261/687] Add leftOuterJoin() and rightOuterJoin() to the RDD class. --- pkg/NAMESPACE | 2 + pkg/R/RDD.R | 106 +++++++++++++++++++++++++++++++++++--- pkg/inst/tests/test_rdd.R | 24 +++++++++ pkg/man/leftOuterJoin.Rd | 36 +++++++++++++ pkg/man/rightOuterJoin.Rd | 36 +++++++++++++ 5 files changed, 197 insertions(+), 7 deletions(-) create mode 100644 pkg/man/leftOuterJoin.Rd create mode 100644 pkg/man/rightOuterJoin.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index b71bf29ea1d28..e7fe930a8969d 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -23,6 +23,7 @@ exportMethods( "lapply", "lapplyPartition", "lapplyPartitionsWithIndex", + "leftOuterJoin", "lookup", "map", "mapPartitions", @@ -34,6 +35,7 @@ exportMethods( "partitionBy", "reduce", "reduceByKey", + "rightOuterJoin", "sampleRDD", "take", "takeSample", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 4296053486b61..61a09fa1904ec 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1402,14 +1402,53 @@ setGeneric("join", function(rdd1, rdd2, numPartitions) { standardGeneric("join") setMethod("join", signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), function(rdd1, rdd2, numPartitions) { - if (rdd1@env$serialized != rdd2@env$serialized) { - # One of the RDDs is not serialized, we need to serialize it first. - if (!rdd1@env$serialized) { - rdd1 <- reserialize(rdd1) - } else { - rdd2 <- reserialize(rdd2) + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + t1 <- Filter(function(x) { x[[1]] == 1L }, v) + t1 <- lapply(t1, function(x) { x[[2]] }) + t2 <- Filter(function(x) { x[[1]] == 2L }, v) + t2 <- lapply(t2, function(x) { x[[2]] }) + result <- list() + length(result) <- length(t1) * length(t2) + index <- 1L + for (i in t1) { + for (j in t2) { + result[[index]] <- list(i, j) + index <- index + 1L + } } - } + result + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' Left outer join two RDDs +#' +#' @param rdd1 An RDD. +#' @param rdd2 An RDD. +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in rdd1, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) +#' if no elements in rdd2 have key k. +#' @rdname leftOuterJoin +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' leftOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +#'} +setGeneric("leftOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("leftOuterJoin") }) + +#' @rdname leftOuterJoin +#' @aliases leftOuterJoin,RDD,RDD-method +setMethod("leftOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) @@ -1418,6 +1457,59 @@ setMethod("join", t1 <- lapply(t1, function(x) { x[[2]] }) t2 <- Filter(function(x) { x[[1]] == 2L }, v) t2 <- lapply(t2, function(x) { x[[2]] }) + if (length(t2) == 0) { + t2 <- list(NULL) + } + result <- list() + length(result) <- length(t1) * length(t2) + index <- 1L + for (i in t1) { + for (j in t2) { + result[[index]] <- list(i, j) + index <- index + 1L + } + } + result + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' Right outer join two RDDs +#' +#' @param rdd1 An RDD. +#' @param rdd2 An RDD. +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, w) in rdd2, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) +#' if no elements in rdd1 have key k. +#' @rdname rightOuterJoin +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rightOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +#'} +setGeneric("rightOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("rightOuterJoin") }) + +#' @rdname rightOuterJoin +#' @aliases rightOuterJoin,RDD,RDD-method +setMethod("rightOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + t1 <- Filter(function(x) { x[[1]] == 1L }, v) + t1 <- lapply(t1, function(x) { x[[2]] }) + if (length(t1) == 0) { + t1 <- list(NULL) + } + t2 <- Filter(function(x) { x[[1]] == 2L }, v) + t2 <- lapply(t2, function(x) { x[[2]] }) result <- list() length(result) <- length(t1) * length(t2) index <- 1L diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index f39bfe77fee5e..af079fe9fb3f1 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -262,3 +262,27 @@ test_that("join() on pairwise RDDs", { expect_equal(actual, list(list("a", list(1, 2)), list("a", list(1, 3)))) }) +test_that("leftOuterJoin() on pairwise RDDs", { + rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) + rdd2 <- parallelize(sc, list(list(1,2), list(1,3))) + actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) + expect_equal(actual, list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL)))) + + rdd1 <- parallelize(sc, list(list("a",1), list("b",4))) + rdd2 <- parallelize(sc, list(list("a",2), list("a",3))) + actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) + expect_equal(actual, list(list("b", list(4, NULL)), list("a", list(1, 2)), list("a", list(1, 3)))) +}) + +test_that("rightOuterJoin() on pairwise RDDs", { + rdd1 <- parallelize(sc, list(list(1,2), list(1,3))) + rdd2 <- parallelize(sc, list(list(1,1), list(2,4))) + actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) + expect_equal(actual, list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4)))) + + rdd1 <- parallelize(sc, list(list("a",2), list("a",3))) + rdd2 <- parallelize(sc, list(list("a",1), list("b",4))) + actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) + expect_equal(actual, list(list("b", list(NULL, 4)), list("a", list(2, 1)), list("a", list(3, 1)))) +}) + diff --git a/pkg/man/leftOuterJoin.Rd b/pkg/man/leftOuterJoin.Rd new file mode 100644 index 0000000000000..32772dd1e3c71 --- /dev/null +++ b/pkg/man/leftOuterJoin.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{leftOuterJoin} +\alias{leftOuterJoin} +\alias{leftOuterJoin,RDD,RDD,integer-method} +\alias{leftOuterJoin,RDD,RDD-method} +\title{Left outer join two RDDs} +\usage{ +leftOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{leftOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) +} +\arguments{ +\item{rdd1}{An RDD.} + +\item{rdd2}{An RDD.} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +For each element (k, v) in rdd1, the resulting RDD will either contain + all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) + if no elements in rdd2 have key k. +} +\description{ +Left outer join two RDDs +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +leftOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +} +} + diff --git a/pkg/man/rightOuterJoin.Rd b/pkg/man/rightOuterJoin.Rd new file mode 100644 index 0000000000000..1737f96192e83 --- /dev/null +++ b/pkg/man/rightOuterJoin.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{rightOuterJoin} +\alias{rightOuterJoin} +\alias{rightOuterJoin,RDD,RDD,integer-method} +\alias{rightOuterJoin,RDD,RDD-method} +\title{Right outer join two RDDs} +\usage{ +rightOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{rightOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) +} +\arguments{ +\item{rdd1}{An RDD.} + +\item{rdd2}{An RDD.} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +For each element (k, w) in rdd2, the resulting RDD will either contain + all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) + if no elements in rdd1 have key k. +} +\description{ +Right outer join two RDDs +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) +rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rightOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +} +} + From 54f712e64d8d4746d39a702d1e73aadfdd9bd015 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 24 Nov 2014 11:05:13 +0800 Subject: [PATCH 262/687] Implement string hash code in C. --- pkg/NAMESPACE | 1 + pkg/R/utils.R | 33 +-------------------------------- pkg/src/Makefile | 11 ++++++++--- pkg/src/Makefile.win | 11 ++++++++--- pkg/src/string_hash_code.c | 25 +++++++++++++++++++++++++ 5 files changed, 43 insertions(+), 38 deletions(-) create mode 100644 pkg/src/string_hash_code.c diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index b71bf29ea1d28..be79bcfefe243 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -54,3 +54,4 @@ export( "setCheckpointDir" ) export("sparkR.init") +useDynLib(SparkR, stringHashCode) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index e4debaaf26de4..8b3a46ffdcef4 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -146,27 +146,6 @@ getDependencies <- function(name) { binData } -# Helper function used to wrap a 'numeric' value to integer bounds. -# Useful for implementing C-like integer arithmetic -wrapInt <- function(value) { - if (value > .Machine$integer.max) { - value <- value - 2 * .Machine$integer.max - 2 - } else if (value < -1 * .Machine$integer.max) { - value <- 2 * .Machine$integer.max + value + 2 - } - value -} - -# Multiply `val` by 31 and add `addVal` to the result. Ensures that -# integer-overflows are handled at every step. -mult31AndAdd <- function(val, addVal) { - vec <- c(bitwShiftL(val, c(4,3,2,1,0)), addVal) - Reduce(function(a, b) { - wrapInt(as.numeric(a) + as.numeric(b)) - }, - vec) -} - #' Compute the hashCode of an object #' #' Java-style function to compute the hashCode for the given object. Returns @@ -191,17 +170,7 @@ hashCode <- function(key) { intBits <- packBits(rawToBits(rawVec), "integer") as.integer(bitwXor(intBits[2], intBits[1])) } else if (class(key) == "character") { - n <- nchar(key) - if (n == 0) { - 0L - } else { - asciiVals <- sapply(charToRaw(key), function(x) { strtoi(x, 16L) }) - hashC <- 0 - for (k in 1:length(asciiVals)) { - hashC <- mult31AndAdd(hashC, asciiVals[k]) - } - as.integer(hashC) - } + .Call("stringHashCode", key) } else { warning(paste("Could not hash object, returning 0", sep="")) as.integer(0) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 1309f9bb8e442..5e8a77cd4a79d 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -31,7 +31,7 @@ else MAVEN_YARN_FLAG := endif -all: $(TARGET_NAME) +all: $(TARGET_NAME) sharelib $(SBT_TARGET_NAME): build.sbt $(SCALA_FILES) $(RESOURCE_FILES) ./sbt/sbt assembly @@ -41,12 +41,17 @@ $(MAVEN_TARGET_NAME): pom.xml $(SCALA_FILES) $(RESOURCE_FILES) mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -Dspark.version=$(SPARK_VERSION) -DskipTests $(MAVEN_YARN_FLAG) -Dyarn.version=$(SPARK_YARN_VERSION) clean package shade:shade cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) +sharelib: string_hash_code.c + R CMD SHLIB -o SparkR.so string_hash_code.c + clean: $(BUILD_TOOL) clean rm -rf target rm -rf project/target rm -rf project/project -rm sbt/sbt-launch-*.jar - rm -f ../inst/$(JAR_NAME) - + rm -f ../inst/$(JAR_NAME) + rm -f *.o + rm -f *.so + .PHONY: all clean diff --git a/pkg/src/Makefile.win b/pkg/src/Makefile.win index ed841d60a91da..b853173f07ce7 100644 --- a/pkg/src/Makefile.win +++ b/pkg/src/Makefile.win @@ -18,18 +18,23 @@ SPARK_YARN_VERSION ?= 2.4.0 TARGET_NAME := $(MAVEN_TARGET_NAME) -all: $(TARGET_NAME) +all: $(TARGET_NAME) sharelib $(MAVEN_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) mvn.bat -Dhadoop.version=$(SPARK_HADOOP_VERSION) -Dspark.version=$(SPARK_VERSION) -Dyarn.version=$(SPARK_YARN_VERSION) -DskipTests clean package shade:shade cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) +sharelib: string_hash_code.c + R CMD SHLIB -o SparkR.so string_hash_code.c + clean: mvn.bat clean rm -rf target rm -rf project/target rm -rf project/project -rm sbt/sbt-launch-*.jar - rm -f ../inst/$(JAR_NAME) - + rm -f ../inst/$(JAR_NAME) + rm -f *.o + rm -f *.so + .PHONY: all clean diff --git a/pkg/src/string_hash_code.c b/pkg/src/string_hash_code.c new file mode 100644 index 0000000000000..6b32d65b6af83 --- /dev/null +++ b/pkg/src/string_hash_code.c @@ -0,0 +1,25 @@ +#include +#include + +SEXP stringHashCode(SEXP string) { + const char* str; + R_xlen_t len, i; + SEXP hashCodeR; + int hashCode = 0; + + if (!IS_SCALAR(string, STRSXP)) { + error("invalid input"); + } + + str = CHAR(asChar(string)); + len = XLENGTH(asChar(string)); + + for (i = 0; i < len; i++) { + hashCode = (hashCode << 5) - hashCode + *str++; + } + + hashCodeR = PROTECT(allocVector(INTSXP, 1)); + INTEGER(hashCodeR)[0] = hashCode; + UNPROTECT(1); + return hashCodeR; +} From cead7dfbbdf8e8516eba755b31b33f7fb8978e67 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 26 Nov 2014 09:50:49 -0500 Subject: [PATCH 263/687] fix review comments. --- pkg/R/RDD.R | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 4c36962df517e..43850a544bb4f 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -707,17 +707,18 @@ setMethod("minimum", reduce(rdd, min) }) -#' Applies a function to all elements in an RDD, and force it evaluated. +#' Applies a function to all elements in an RDD, and force evaluation. #' #' @param rdd The RDD to apply the function #' @param func The function to be applied. +#' @return invisible NULL. #' @export #' @rdname foreach #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) -#' foreach(rdd, print) +#' foreach(rdd, function(x) { save(x, file=...) }) #'} setGeneric("foreach", function(rdd, func) { standardGeneric("foreach") }) @@ -733,17 +734,18 @@ setMethod("foreach", invisible(collect(mapPartitions(rdd, partition.func))) }) -#' Applies a function to each partition in an RDD, and force it evaluated. +#' Applies a function to each partition in an RDD, and force evaluation. #' #' @param rdd The RDD to apply the function #' @param func The function to be applied to partitions. +#' @return invisible NULL. #' @export #' @rdname foreach #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) -#' foreachPartition(rdd, function(part) { lapply(part, print); NULL }) +#' foreachPartition(rdd, function(part) { save(part, file=...); NULL }) #'} setGeneric("foreachPartition", function(rdd, func) { standardGeneric("foreachPartition") }) From b424a1a38deb02d29bb62966597fe0493c4688e8 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 26 Nov 2014 16:29:12 -0500 Subject: [PATCH 264/687] Add function cogroup(). --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 48 ++++++++++++++++++++++++++- pkg/inst/tests/test_binary_function.R | 16 +++++++++ pkg/man/cogroup.Rd | 35 +++++++++++++++++++ pkg/man/foreach.Rd | 15 ++++++--- 5 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 pkg/man/cogroup.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index acfe5a072f46e..7b8b86c6ea124 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -5,6 +5,7 @@ exportClasses("Broadcast") exportMethods( "cache", "checkpoint", + "cogroup", "collect", "collectPartition", "combineByKey", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 43850a544bb4f..4b3e46b5eab0b 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1484,4 +1484,50 @@ setMethod("join", joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) }) - +#' For each key k in several RDDs, return a resulting RDD that +#' whose values are a list of values for the key in all RDDs. +#' +#' @param ... Several RDDs. +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with values in a list +#' in all RDDs. +#' @rdname cogroup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' cogroup(rdd1, rdd2, numPartitions = 2L) +#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) +#'} +setGeneric("cogroup", + function(..., numPartitions) { standardGeneric("cogroup") }, + signature = "...") + +#' @rdname cogroup +#' @aliases cogroup,RDD-method +setMethod("cogroup", + "RDD", + function(..., numPartitions) { + rdds <- list(...) + rddsLen <- length(rdds) + for (i in 1:rddsLen) { + rdds[[i]] <- lapply(rdds[[i]], + function(x) { list(x[[1]], list(i, x[[2]])) }) + getJRDD(rdds[[i]]) # Capture the closure. + } + union.rdd <- Reduce(unionRDD, rdds) + group.func <- function(vlist) { + res <- list() + length(res) <- rddsLen + for (i in 1:rddsLen) { + tmp <- Filter(function(x) { x[[1]] == i }, vlist) + tmp <- lapply(tmp, function(x) { x[[2]] }) + res[[i]] <- tmp + } + res + } + cogroup.rdd <- mapValues(groupByKey(union.rdd, numPartitions), + group.func) + }) diff --git a/pkg/inst/tests/test_binary_function.R b/pkg/inst/tests/test_binary_function.R index 51d350cfb7cb5..ddea243af11be 100644 --- a/pkg/inst/tests/test_binary_function.R +++ b/pkg/inst/tests/test_binary_function.R @@ -25,3 +25,19 @@ test_that("union on two RDDs", { unlink(fileName) }) + +test_that("cogroup on two RDDs", { + rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) + rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) + cogroup.rdd <- cogroup(rdd1, rdd2, numPartitions = 2L) + actual <- collect(cogroup.rdd) + expect_equal(actual, + list(list(1, list(list(1), list(2, 3))), list(2, list(list(4), list())))) + + rdd1 <- parallelize(sc, list(list("a", 1), list("a", 4))) + rdd2 <- parallelize(sc, list(list("b", 2), list("a", 3))) + cogroup.rdd <- cogroup(rdd1, rdd2, numPartitions = 2L) + actual <- collect(cogroup.rdd) + expect_equal(actual, + list(list("b", list(list(), list(2))), list("a", list(list(1, 4), list(3))))) +}) diff --git a/pkg/man/cogroup.Rd b/pkg/man/cogroup.Rd new file mode 100644 index 0000000000000..07a711eb60f2f --- /dev/null +++ b/pkg/man/cogroup.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{cogroup} +\alias{cogroup} +\alias{cogroup,RDD-method} +\title{For each key k in several RDDs, return a resulting RDD that +whose values are a list of values for the key in all RDDs.} +\usage{ +cogroup(..., numPartitions) + +\S4method{cogroup}{RDD}(..., numPartitions) +} +\arguments{ +\item{...}{Several RDDs.} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +a new RDD containing all pairs of elements with values in a list +in all RDDs. +} +\description{ +For each key k in several RDDs, return a resulting RDD that +whose values are a list of values for the key in all RDDs. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +cogroup(rdd1, rdd2, numPartitions = 2L) +# list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) +} +} + diff --git a/pkg/man/foreach.Rd b/pkg/man/foreach.Rd index 05e2ff309f60e..8e3a081005188 100644 --- a/pkg/man/foreach.Rd +++ b/pkg/man/foreach.Rd @@ -5,7 +5,7 @@ \alias{foreach,RDD,function-method} \alias{foreachPartition} \alias{foreachPartition,RDD,function-method} -\title{Applies a function to all elements in an RDD, and force it evaluated.} +\title{Applies a function to all elements in an RDD, and force evaluation.} \usage{ foreach(rdd, func) @@ -24,21 +24,26 @@ foreachPartition(rdd, func) \item{func}{The function to be applied to partitions.} } +\value{ +invisible NULL. + +invisible NULL. +} \description{ -Applies a function to all elements in an RDD, and force it evaluated. +Applies a function to all elements in an RDD, and force evaluation. -Applies a function to each partition in an RDD, and force it evaluated. +Applies a function to each partition in an RDD, and force evaluation. } \examples{ \dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10) -foreach(rdd, print) +foreach(rdd, function(x) { save(x, file=...) }) } \dontrun{ sc <- sparkR.init() rdd <- parallelize(sc, 1:10) -foreachPartition(rdd, function(part) { lapply(part, print); NULL }) +foreachPartition(rdd, function(part) { save(part, file=...); NULL }) } } From c4b77be8279a6d8c5ab63b140de1ac1540b30b4c Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 1 Dec 2014 14:50:01 +0800 Subject: [PATCH 265/687] [SPARKR-130] Add persist(storageLevel) API to RDD. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 49 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 10 +++++++- pkg/man/persist.Rd | 31 +++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 pkg/man/persist.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index b71bf29ea1d28..aa8860bf43cd7 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -32,6 +32,7 @@ exportMethods( "minimum", "numPartitions", "partitionBy", + "persist", "reduce", "reduceByKey", "sampleRDD", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 4296053486b61..5d059f6c36a16 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -173,6 +173,55 @@ setMethod("cache", rdd }) +#' Persist an RDD +#' +#' Persist this RDD with the specified storage level. +#' +#' @param rdd The RDD to persist +#' @param newLevel The new storage level to be assigned +#' @rdname persist +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' persist(rdd, "MEMORY_AND_DISK") +#'} +setGeneric("persist", function(rdd, newLevel) { standardGeneric("persist") }) + +#' @rdname persist +#' @aliases persist,RDD-method +setMethod("persist", + signature(rdd = "RDD", newLevel = "character"), + function(rdd, newLevel = c("DISK_ONLY", + "DISK_ONLY_2", + "MEMORY_AND_DISK", + "MEMORY_AND_DISK_2", + "MEMORY_AND_DISK_SER", + "MEMORY_AND_DISK_SER_2", + "MEMORY_ONLY", + "MEMORY_ONLY_2", + "MEMORY_ONLY_SER", + "MEMORY_ONLY_SER_2", + "OFF_HEAP")) { + match.arg(newLevel) + storageLevel <- switch(newLevel, + "DISK_ONLY" = J("org.apache.spark.storage.StorageLevel")$DISK_ONLY(), + "DISK_ONLY_2" = J("org.apache.spark.storage.StorageLevel")$DISK_ONLY_2(), + "MEMORY_AND_DISK" = J("org.apache.spark.storage.StorageLevel")$MEMORY_AND_DISK(), + "MEMORY_AND_DISK_2" = J("org.apache.spark.storage.StorageLevel")$MEMORY_AND_DISK_2(), + "MEMORY_AND_DISK_SER" = J("org.apache.spark.storage.StorageLevel")$MEMORY_AND_DISK_SER(), + "MEMORY_AND_DISK_SER_2" = J("org.apache.spark.storage.StorageLevel")$MEMORY_AND_DISK_SER_2(), + "MEMORY_ONLY" = J("org.apache.spark.storage.StorageLevel")$MEMORY_ONLY(), + "MEMORY_ONLY_2" = J("org.apache.spark.storage.StorageLevel")$MEMORY_ONLY_2(), + "MEMORY_ONLY_SER" = J("org.apache.spark.storage.StorageLevel")$MEMORY_ONLY_SER(), + "MEMORY_ONLY_SER_2" = J("org.apache.spark.storage.StorageLevel")$MEMORY_ONLY_SER_2(), + "OFF_HEAP" = J("org.apache.spark.storage.StorageLevel")$OFF_HEAP()) + + .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", "persist", storageLevel) + rdd@env$isCached <- TRUE + rdd + }) #' Unpersist an RDD #' diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index f39bfe77fee5e..e2007cd566b4a 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -89,7 +89,7 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { collect(rdd2) }) -test_that("PipelinedRDD support actions: cache(), unpersist(), checkpoint()", { +test_that("PipelinedRDD support actions: cache(), persist(), unpersist(), checkpoint()", { # RDD rdd2 <- rdd # PipelinedRDD @@ -107,6 +107,14 @@ test_that("PipelinedRDD support actions: cache(), unpersist(), checkpoint()", { unpersist(rdd2) expect_false(rdd2@env$isCached) + persist(rdd2, "MEMORY_AND_DISK") + expect_true(rdd2@env$isCached) + rdd2 <- lapply(rdd2, function(x) x) + expect_false(rdd2@env$isCached) + + unpersist(rdd2) + expect_false(rdd2@env$isCached) + setCheckpointDir(sc, "checkpoints") checkpoint(rdd2) expect_true(rdd2@env$isCheckpointed) diff --git a/pkg/man/persist.Rd b/pkg/man/persist.Rd new file mode 100644 index 0000000000000..29772bac56266 --- /dev/null +++ b/pkg/man/persist.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{persist} +\alias{persist} +\alias{persist,RDD,character-method} +\alias{persist,RDD-method} +\title{Persist an RDD} +\usage{ +persist(rdd, newLevel) + +\S4method{persist}{RDD,character}(rdd, newLevel = c("DISK_ONLY", + "DISK_ONLY_2", "MEMORY_AND_DISK", "MEMORY_AND_DISK_2", "MEMORY_AND_DISK_SER", + "MEMORY_AND_DISK_SER_2", "MEMORY_ONLY", "MEMORY_ONLY_2", "MEMORY_ONLY_SER", + "MEMORY_ONLY_SER_2", "OFF_HEAP")) +} +\arguments{ +\item{rdd}{The RDD to persist} + +\item{newLevel}{The new storage level to be assigned} +} +\description{ +Persist this RDD with the specified storage level. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10, 2L) +persist(rdd, "MEMORY_AND_DISK") +} +} + From 1da705e6cab6a7add80376bba0caeb3811b57738 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 1 Dec 2014 15:54:25 -0500 Subject: [PATCH 266/687] Fix the review comments. --- pkg/R/RDD.R | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 4b3e46b5eab0b..125c3bd20ca70 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1515,16 +1515,21 @@ setMethod("cogroup", for (i in 1:rddsLen) { rdds[[i]] <- lapply(rdds[[i]], function(x) { list(x[[1]], list(i, x[[2]])) }) + # TODO(hao): As issue [SparkR-142] mentions, the right value of i + # will not be captured into UDF if getJRDD is not invoked. + # It should be resolved together with that issue. getJRDD(rdds[[i]]) # Capture the closure. } union.rdd <- Reduce(unionRDD, rdds) group.func <- function(vlist) { res <- list() length(res) <- rddsLen - for (i in 1:rddsLen) { - tmp <- Filter(function(x) { x[[1]] == i }, vlist) - tmp <- lapply(tmp, function(x) { x[[2]] }) - res[[i]] <- tmp + for (i in 1:length(res)) { + res[[i]] <- list() + } + for (x in vlist) { + i <- x[[1]] + res[[i]] <- c(res[[i]], x[[2]]) } res } From 7190a2c5d0e4d2237c1233ed4657d58c83369f54 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 2 Dec 2014 09:40:47 +0800 Subject: [PATCH 267/687] Update comment to add a reference to storage levels. --- pkg/R/RDD.R | 4 +++- pkg/man/persist.Rd | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 5d059f6c36a16..ed27120cabdcd 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -175,7 +175,9 @@ setMethod("cache", #' Persist an RDD #' -#' Persist this RDD with the specified storage level. +#' Persist this RDD with the specified storage level. For details of the +#' supported storage levels, refer to +#' http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. #' #' @param rdd The RDD to persist #' @param newLevel The new storage level to be assigned diff --git a/pkg/man/persist.Rd b/pkg/man/persist.Rd index 29772bac56266..e45421f07c861 100644 --- a/pkg/man/persist.Rd +++ b/pkg/man/persist.Rd @@ -19,7 +19,9 @@ persist(rdd, newLevel) \item{newLevel}{The new storage level to be assigned} } \description{ -Persist this RDD with the specified storage level. +Persist this RDD with the specified storage level. For details of the +supported storage levels, refer to +http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. } \examples{ \dontrun{ From 5c8e46e730730d9929720fc3bd2095517b205486 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 2 Dec 2014 13:50:03 +0800 Subject: [PATCH 268/687] Fix per the review comments. --- pkg/R/RDD.R | 107 +++++++++++++++++++++++++++++--------- pkg/inst/tests/test_rdd.R | 30 +++++++++++ pkg/man/join.Rd | 9 ++-- pkg/man/leftOuterJoin.Rd | 9 ++-- pkg/man/rightOuterJoin.Rd | 9 ++-- 5 files changed, 129 insertions(+), 35 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 61a09fa1904ec..e810fe45a0975 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1381,8 +1381,13 @@ setMethod("unionRDD", #' Join two RDDs #' -#' @param rdd1 An RDD. -#' @param rdd2 An RDD. +#' This function joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). #' @param numPartitions Number of partitions to create. #' @return a new RDD containing all pairs of elements with matching keys in #' two input RDDs. @@ -1406,17 +1411,29 @@ setMethod("join", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - t1 <- Filter(function(x) { x[[1]] == 1L }, v) - t1 <- lapply(t1, function(x) { x[[2]] }) - t2 <- Filter(function(x) { x[[1]] == 2L }, v) - t2 <- lapply(t2, function(x) { x[[2]] }) + t1 <- vector("list", length(v)) + t2 <- vector("list", length(v)) + index1 <- 1 + index2 <- 1 + for (x in v) { + if (x[[1]] == 1L) { + t1[[index1]] <- x[[2]] + index1 <- index1 + 1 + } else { + t2[[index2]] <- x[[2]] + index2 <- index2 + 1 + } + } + length(t1) <- index1 - 1 + length(t2) <- index2 - 1 + result <- list() length(result) <- length(t1) * length(t2) - index <- 1L + index <- 1 for (i in t1) { for (j in t2) { result[[index]] <- list(i, j) - index <- index + 1L + index <- index + 1 } } result @@ -1427,8 +1444,13 @@ setMethod("join", #' Left outer join two RDDs #' -#' @param rdd1 An RDD. -#' @param rdd2 An RDD. +#' This function left-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). #' @param numPartitions Number of partitions to create. #' @return For each element (k, v) in rdd1, the resulting RDD will either contain #' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) @@ -1453,20 +1475,34 @@ setMethod("leftOuterJoin", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - t1 <- Filter(function(x) { x[[1]] == 1L }, v) - t1 <- lapply(t1, function(x) { x[[2]] }) - t2 <- Filter(function(x) { x[[1]] == 2L }, v) - t2 <- lapply(t2, function(x) { x[[2]] }) - if (length(t2) == 0) { + t1 <- vector("list", length(v)) + t2 <- vector("list", length(v)) + index1 <- 1 + index2 <- 1 + for (x in v) { + if (x[[1]] == 1L) { + t1[[index1]] <- x[[2]] + index1 <- index1 + 1 + } else { + t2[[index2]] <- x[[2]] + index2 <- index2 + 1 + } + } + length(t1) <- index1 - 1 + len2 <- index2 - 1 + if (len2 == 0) { t2 <- list(NULL) + } else { + length(t2) <- len2 } + result <- list() length(result) <- length(t1) * length(t2) - index <- 1L + index <- 1 for (i in t1) { for (j in t2) { result[[index]] <- list(i, j) - index <- index + 1L + index <- index + 1 } } result @@ -1477,8 +1513,13 @@ setMethod("leftOuterJoin", #' Right outer join two RDDs #' -#' @param rdd1 An RDD. -#' @param rdd2 An RDD. +#' This function right-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). #' @param numPartitions Number of partitions to create. #' @return For each element (k, w) in rdd2, the resulting RDD will either contain #' all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) @@ -1503,20 +1544,34 @@ setMethod("rightOuterJoin", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - t1 <- Filter(function(x) { x[[1]] == 1L }, v) - t1 <- lapply(t1, function(x) { x[[2]] }) - if (length(t1) == 0) { + t1 <- vector("list", length(v)) + t2 <- vector("list", length(v)) + index1 <- 1 + index2 <- 1 + for (x in v) { + if (x[[1]] == 1L) { + t1[[index1]] <- x[[2]] + index1 <- index1 + 1 + } else { + t2[[index2]] <- x[[2]] + index2 <- index2 + 1 + } + } + len1 <- index1 - 1 + if (len1 == 0) { t1 <- list(NULL) + } else { + length(t1) <- len1 } - t2 <- Filter(function(x) { x[[1]] == 2L }, v) - t2 <- lapply(t2, function(x) { x[[2]] }) + length(t2) <- index2 - 1 + result <- list() length(result) <- length(t1) * length(t2) - index <- 1L + index <- 1 for (i in t1) { for (j in t2) { result[[index]] <- list(i, j) - index <- index + 1L + index <- index + 1 } } result diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index af079fe9fb3f1..469d6c2ffc658 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -260,6 +260,16 @@ test_that("join() on pairwise RDDs", { rdd2 <- parallelize(sc, list(list("a",2), list("a",3))) actual <- collect(join(rdd1, rdd2, 2L)) expect_equal(actual, list(list("a", list(1, 2)), list("a", list(1, 3)))) + + rdd1 <- parallelize(sc, list(list(1,1), list(2,2))) + rdd2 <- parallelize(sc, list(list(3,3), list(4,4))) + actual <- collect(join(rdd1, rdd2, 2L)) + expect_equal(actual, list()) + + rdd1 <- parallelize(sc, list(list("a",1), list("b",2))) + rdd2 <- parallelize(sc, list(list("c",3), list("d",4))) + actual <- collect(join(rdd1, rdd2, 2L)) + expect_equal(actual, list()) }) test_that("leftOuterJoin() on pairwise RDDs", { @@ -272,6 +282,16 @@ test_that("leftOuterJoin() on pairwise RDDs", { rdd2 <- parallelize(sc, list(list("a",2), list("a",3))) actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) expect_equal(actual, list(list("b", list(4, NULL)), list("a", list(1, 2)), list("a", list(1, 3)))) + + rdd1 <- parallelize(sc, list(list(1,1), list(2,2))) + rdd2 <- parallelize(sc, list(list(3,3), list(4,4))) + actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) + expect_equal(actual, list(list(1, list(1, NULL)), list(2, list(2, NULL)))) + + rdd1 <- parallelize(sc, list(list("a",1), list("b",2))) + rdd2 <- parallelize(sc, list(list("c",3), list("d",4))) + actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) + expect_equal(actual, list(list("b", list(2, NULL)), list("a", list(1, NULL)))) }) test_that("rightOuterJoin() on pairwise RDDs", { @@ -284,5 +304,15 @@ test_that("rightOuterJoin() on pairwise RDDs", { rdd2 <- parallelize(sc, list(list("a",1), list("b",4))) actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) expect_equal(actual, list(list("b", list(NULL, 4)), list("a", list(2, 1)), list("a", list(3, 1)))) + + rdd1 <- parallelize(sc, list(list(1,1), list(2,2))) + rdd2 <- parallelize(sc, list(list(3,3), list(4,4))) + actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) + expect_equal(actual, list(list(3, list(NULL, 3)), list(4, list(NULL, 4)))) + + rdd1 <- parallelize(sc, list(list("a",1), list("b",2))) + rdd2 <- parallelize(sc, list(list("c",3), list("d",4))) + actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) + expect_equal(actual, list(list("d", list(NULL, 4)), list("c", list(NULL, 3)))) }) diff --git a/pkg/man/join.Rd b/pkg/man/join.Rd index 7bf474d08ac99..f406d90ec6a46 100644 --- a/pkg/man/join.Rd +++ b/pkg/man/join.Rd @@ -11,9 +11,11 @@ join(rdd1, rdd2, numPartitions) \S4method{join}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) } \arguments{ -\item{rdd1}{An RDD.} +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} -\item{rdd2}{An RDD.} +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} \item{numPartitions}{Number of partitions to create.} } @@ -22,7 +24,8 @@ a new RDD containing all pairs of elements with matching keys in two input RDDs. } \description{ -Join two RDDs +This function joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. } \examples{ \dontrun{ diff --git a/pkg/man/leftOuterJoin.Rd b/pkg/man/leftOuterJoin.Rd index 32772dd1e3c71..d04f4e6f8ea35 100644 --- a/pkg/man/leftOuterJoin.Rd +++ b/pkg/man/leftOuterJoin.Rd @@ -11,9 +11,11 @@ leftOuterJoin(rdd1, rdd2, numPartitions) \S4method{leftOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) } \arguments{ -\item{rdd1}{An RDD.} +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} -\item{rdd2}{An RDD.} +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} \item{numPartitions}{Number of partitions to create.} } @@ -23,7 +25,8 @@ For each element (k, v) in rdd1, the resulting RDD will either contain if no elements in rdd2 have key k. } \description{ -Left outer join two RDDs +This function left-outer-joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. } \examples{ \dontrun{ diff --git a/pkg/man/rightOuterJoin.Rd b/pkg/man/rightOuterJoin.Rd index 1737f96192e83..9e72859b6df17 100644 --- a/pkg/man/rightOuterJoin.Rd +++ b/pkg/man/rightOuterJoin.Rd @@ -11,9 +11,11 @@ rightOuterJoin(rdd1, rdd2, numPartitions) \S4method{rightOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) } \arguments{ -\item{rdd1}{An RDD.} +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} -\item{rdd2}{An RDD.} +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} \item{numPartitions}{Number of partitions to create.} } @@ -23,7 +25,8 @@ For each element (k, w) in rdd2, the resulting RDD will either contain if no elements in rdd1 have key k. } \description{ -Right outer join two RDDs +This function right-outer-joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. } \examples{ \dontrun{ From 492f76e5cb3d90fe25524a2ac2017380cb887add Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 3 Dec 2014 10:38:32 +0800 Subject: [PATCH 269/687] Refine code and add description. --- pkg/src/string_hash_code.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pkg/src/string_hash_code.c b/pkg/src/string_hash_code.c index 6b32d65b6af83..1d562f9550773 100644 --- a/pkg/src/string_hash_code.c +++ b/pkg/src/string_hash_code.c @@ -1,10 +1,15 @@ +/* + * A C function for R extension which implements the Java String hash algorithm. + * Refer to http://en.wikipedia.org/wiki/Java_hashCode%28%29#The_java.lang.String_hash_function + * + */ + #include #include SEXP stringHashCode(SEXP string) { const char* str; R_xlen_t len, i; - SEXP hashCodeR; int hashCode = 0; if (!IS_SCALAR(string, STRSXP)) { @@ -18,8 +23,5 @@ SEXP stringHashCode(SEXP string) { hashCode = (hashCode << 5) - hashCode + *str++; } - hashCodeR = PROTECT(allocVector(INTSXP, 1)); - INTEGER(hashCodeR)[0] = hashCode; - UNPROTECT(1); - return hashCodeR; + return ScalarInteger(hashCode); } From a40874b383c251021103b291285295b5dc4db9b5 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 3 Dec 2014 19:16:37 -0500 Subject: [PATCH 270/687] Use extendible accumulators aggregate the cogroup values. --- pkg/R/RDD.R | 22 +++++++++++++++++----- pkg/R/utils.R | 15 +++++++++++++++ pkg/inst/worker/serialize.R | 14 -------------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 125c3bd20ca70..94452b87f2f3f 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1524,14 +1524,26 @@ setMethod("cogroup", group.func <- function(vlist) { res <- list() length(res) <- rddsLen - for (i in 1:length(res)) { - res[[i]] <- list() - } for (x in vlist) { i <- x[[1]] - res[[i]] <- c(res[[i]], x[[2]]) + acc <- res[[i]] + # Create an accumulator. + if (is.null(acc)) { + acc <- new.env() + acc$counter <- 0 + acc$data <- list(NULL) + acc$size <- 1 + } + addItemToAccumulator(acc, x[[2]]) + res[[i]] <- acc } - res + lapply(res, function(acc) { + if (is.null(acc)) { + list() + } else { + acc$data + } + }) } cogroup.rdd <- mapValues(groupByKey(union.rdd, numPartitions), group.func) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index e4debaaf26de4..5b478879d9010 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -221,3 +221,18 @@ reserialize <- function(rdd) { return(ser.rdd) } } + +# Fast append to list by using an accumulator. +# http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r +# +# The accumulator should has three fields size, counter and data. +# This function amortizes the allocation cost by doubling +# the size of the list every time it fills up. +addItemToAccumulator <- function(acc, item) { + if(acc$counter == acc$size) { + acc$size <- acc$size * 2 + length(acc$data) <- acc$size + } + acc$counter <- acc$counter + 1 + acc$data[[acc$counter]] <- item +} diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index 69333429d13cf..d09c636e8f61a 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -69,17 +69,3 @@ writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { } } -# Fast append to list by using an accumulator. -# http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r -# -# The accumulator should has three fields size, counter and data. -# This function amortizes the allocation cost by doubling -# the size of the list every time it fills up. -addItemToAccumulator <- function(acc, item) { - if(acc$counter == acc$size) { - acc$size <- acc$size * 2 - length(acc$data) <- acc$size - } - acc$counter <- acc$counter + 1 - acc$data[[acc$counter]] <- item -} From dca3d058c0072e78678290755a87b12efdc00381 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Wed, 3 Dec 2014 19:41:43 -0500 Subject: [PATCH 271/687] Minor fix. --- pkg/R/RDD.R | 5 +---- pkg/R/utils.R | 15 --------------- pkg/inst/worker/serialize.R | 23 +++++++++++++++++++++++ pkg/inst/worker/worker.R | 9 +++++---- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 945f1c70c26b6..5fa6b8a12028d 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1727,10 +1727,7 @@ setMethod("cogroup", acc <- res[[i]] # Create an accumulator. if (is.null(acc)) { - acc <- new.env() - acc$counter <- 0 - acc$data <- list(NULL) - acc$size <- 1 + acc <- initAccumulator() } addItemToAccumulator(acc, x[[2]]) res[[i]] <- acc diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 5b478879d9010..e4debaaf26de4 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -221,18 +221,3 @@ reserialize <- function(rdd) { return(ser.rdd) } } - -# Fast append to list by using an accumulator. -# http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r -# -# The accumulator should has three fields size, counter and data. -# This function amortizes the allocation cost by doubling -# the size of the list every time it fills up. -addItemToAccumulator <- function(acc, item) { - if(acc$counter == acc$size) { - acc$size <- acc$size * 2 - length(acc$data) <- acc$size - } - acc$counter <- acc$counter + 1 - acc$data[[acc$counter]] <- item -} diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index d09c636e8f61a..3df4e837cb3bc 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -69,3 +69,26 @@ writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { } } +# Fast append to list by using an accumulator. +# http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r +# +# The accumulator should has three fields size, counter and data. +# This function amortizes the allocation cost by doubling +# the size of the list every time it fills up. +addItemToAccumulator <- function(acc, item) { + if(acc$counter == acc$size) { + acc$size <- acc$size * 2 + length(acc$data) <- acc$size + } + acc$counter <- acc$counter + 1 + acc$data[[acc$counter]] <- item +} + +initAccumulator <- function() { + acc <- new.env() + acc$counter <- 0 + acc$data <- list(NULL) + acc$size <- 1 + acc +} + diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 731e49025455d..06b9455beee06 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -108,10 +108,11 @@ if (isEmpty != 0) { acc <- res[[bucket]] # Create a new accumulator if (is.null(acc)) { - acc <- new.env() - acc$counter <- 0 - acc$data <- list(NULL) - acc$size <- 1 + acc <- initAccumulator() +#new.env() +# acc$counter <- 0 +# acc$data <- list(NULL) +# acc$size <- 1 } addItemToAccumulator(acc, tuple) res[[bucket]] <- acc From caad5d72de57c41db79076e1841ba24a7bf5dd7d Mon Sep 17 00:00:00 2001 From: dputler Date: Mon, 8 Dec 2014 14:36:19 -0800 Subject: [PATCH 272/687] Adding the script to install software on the Cloudera Quick Start VM. --- SparkR_prep-0.1.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100755 SparkR_prep-0.1.sh diff --git a/SparkR_prep-0.1.sh b/SparkR_prep-0.1.sh new file mode 100755 index 0000000000000..671e291ae1938 --- /dev/null +++ b/SparkR_prep-0.1.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Create and move to a new directory that can be easily cleaned up +mkdir build_SparkR +cd build_SparkR + +## Uninstall R 3.1.1 (This is a really ugly process, the RHEL/Centos R packages need work) +sudo rpm --noscripts -e --allmatches R +sudo rm --force /usr/bin/R* +sudo rm -r --force /usr/include/R +sudo rm -r --force /usr/lib64/R +sudo rm -r --force /usr/share/R +sudo rm -r --force /usr/share/doc/R-3.1.1 + +## Download, build, and install R 3.1.2 +# Install devel packages needed to build R +sudo yum install libXt-devel readline-devel pango-devel libjpeg-turbo-devel libtiff-devel +# Download and expand the R source tarball +wget http://cran.rstudio.com/src/base/R-3/R-3.1.2.tar.gz +tar xzvf R-3.1.2.tar.gz +cd R-3.1.2 +# Build R +./configure --enable-R-shlib R_RD4PDF="times,hyper" +make +sudo make install + +# Re-configure the R/Java connection +sudo -E /usr/local/bin/R CMD javareconf + +# Install additional needed R packages +sudo /usr/local/bin/Rscript -e 'install.packages(c("rJava", "Rserve"), repos = "http://cran.rstudio.com")' + +# Install Scala 2.10.4 +wget http://www.scala-lang.org/files/archive/scala-2.10.4.tgz +tar xzvf scala-2.10.4.tgz +sudo mkdir /usr/local/share/scala +sudo mv scala-2.10.4/* /usr/local/share/scala +rmdir scala-2.10.4 + +# Clean-up +#cd .. +#rm -r --force build_SparkR \ No newline at end of file From 09083d9d6c6735f76b2da5ae97b177d70b5f3c09 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 9 Dec 2014 10:20:55 +0800 Subject: [PATCH 273/687] Add keyBy() to the RDD class. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 25 +++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 7 +++++++ pkg/man/keyBy.Rd | 28 ++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 pkg/man/keyBy.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 63c05605f67bb..6b649bc90bccb 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -20,6 +20,7 @@ exportMethods( "foreachPartition", "groupByKey", "join", + "keyBy", "keys", "length", "lapply", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index b641d43a0fc8d..2237f45dafd87 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1036,6 +1036,31 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", sample(samples)[1:total] }) +#' Creates tuples of the elements in this RDD by applying a function. +#' +#' @param rdd The RDD. +#' @param func The function to be applied. +#' @rdname keyBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3)) +#' collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) +#'} +setGeneric("keyBy", function(rdd, func) { standardGeneric("keyBy") }) + +#' @rdname keyBy +#' @aliases keyBy,RDD +setMethod("keyBy", + signature(rdd = "RDD", func = "function"), + function(rdd, func) { + apply.func <- function(x) { + list(func(x), x) + } + lapply(rdd, apply.func) + }) + #' Return an RDD with the keys of each tuple. #' #' @param rdd The RDD from which the keys of each tuple is returned. diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index e6d6a63d214ad..dfd96f15981b4 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -246,6 +246,13 @@ test_that("minimum() on RDDs", { expect_equal(min, 1) }) +test_that("keyBy on RDDs", { + func <- function(x) { x*x } + keys <- keyBy(rdd, func) + actual <- collect(keys) + expect_equal(actual, lapply(nums, function(x) { list(func(x), x) })) +}) + test_that("keys() on RDDs", { keys <- keys(intRdd) actual <- collect(keys) diff --git a/pkg/man/keyBy.Rd b/pkg/man/keyBy.Rd new file mode 100644 index 0000000000000..d4fb45d4965df --- /dev/null +++ b/pkg/man/keyBy.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{keyBy} +\alias{keyBy} +\alias{keyBy,RDD} +\alias{keyBy,RDD,function-method} +\title{Creates tuples of the elements in this RDD by applying a function.} +\usage{ +keyBy(rdd, func) + +\S4method{keyBy}{RDD,`function`}(rdd, func) +} +\arguments{ +\item{rdd}{The RDD.} + +\item{func}{The function to be applied.} +} +\description{ +Creates tuples of the elements in this RDD by applying a function. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1, 2, 3)) +collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) +} +} + From 85cfeb4af52e8e9887f4cd88d4f332718c4f6f44 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 9 Dec 2014 18:40:45 +0800 Subject: [PATCH 274/687] [SPARKR-144] Implement saveAsTextFile() in the RDD class. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 66 +++++++++++--- pkg/inst/tests/test_textFile.R | 49 ++++++++++ pkg/inst/worker/serialize.R | 4 + pkg/inst/worker/worker.R | 21 +++-- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 90 +++++++++++++++++-- 6 files changed, 203 insertions(+), 28 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 63c05605f67bb..9fb34e174882a 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -40,6 +40,7 @@ exportMethods( "reduceByKey", "rightOuterJoin", "sampleRDD", + "saveAsTextFile", "take", "takeSample", "unionRDD", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index b641d43a0fc8d..1cceb0e9db47b 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -85,10 +85,10 @@ PipelinedRDD <- function(prev, func) { # The jrdd accessor function. -setGeneric("getJRDD", function(rdd) { standardGeneric("getJRDD") }) +setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) setMethod("getJRDD", signature(rdd = "RDD"), function(rdd) rdd@jrdd ) setMethod("getJRDD", signature(rdd = "PipelinedRDD"), - function(rdd) { + function(rdd, dataSerialization = TRUE) { if (!is.null(rdd@env$jrdd_val)) { return(rdd@env$jrdd_val) } @@ -116,17 +116,29 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), prev_jrdd <- rdd@prev_jrdd - rddRef <- new(J("edu.berkeley.cs.amplab.sparkr.RRDD"), - prev_jrdd$rdd(), - serializedFuncArr, - rdd@env$serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv[["libname"]]), - broadcastArr, - prev_jrdd$classTag()) - # The RDD is serialized after we create a RRDD - rdd@env$serialized <- TRUE + if (dataSerialization) { + rddRef <- new(J("edu.berkeley.cs.amplab.sparkr.RRDD"), + prev_jrdd$rdd(), + serializedFuncArr, + rdd@env$serialized, + depsBinArr, + packageNamesArr, + as.character(.sparkREnv[["libname"]]), + broadcastArr, + prev_jrdd$classTag()) + } else { + rddRef <- new(J("edu.berkeley.cs.amplab.sparkr.StringRRDD"), + prev_jrdd$rdd(), + serializedFuncArr, + rdd@env$serialized, + depsBinArr, + packageNamesArr, + as.character(.sparkREnv[["libname"]]), + broadcastArr, + prev_jrdd$classTag()) + } + # Save the serialization flag after we create a RRDD + rdd@env$serialized <- dataSerialization rdd@env$jrdd_val <- rddRef$asJavaRDD() rdd@env$jrdd_val }) @@ -1036,6 +1048,34 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", sample(samples)[1:total] }) +#' Save this RDD as a text file, using string representations of elements. +#' +#' @param rdd The RDD to save +#' @param path The directory where the splits of the text file are saved +#' @rdname saveAsTextFile +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' saveAsTextFile(rdd, "/tmp/sparkR-tmp") +#'} +setGeneric("saveAsTextFile", function(rdd, path) { standardGeneric("saveAsTextFile") }) + +#' @rdname saveAsTextFile +#' @aliases saveAsTextFile,RDD +setMethod("saveAsTextFile", + signature(rdd = "RDD", path = "character"), + function(rdd, path) { + func <- function(x) { + toString(x) + } + stringRdd <- lapply(rdd, func) + .jcall(getJRDD(stringRdd, dataSerialization = FALSE), "V", "saveAsTextFile", path) + # Return nothing + invisible(NULL) + }) + #' Return an RDD with the keys of each tuple. #' #' @param rdd The RDD from which the keys of each tuple is returned. diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index ce819f1c98a80..51d25975ae44f 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -58,3 +58,52 @@ test_that("several transformations on RDD created by textFile()", { unlink(fileName) }) + +test_that("textFile() followed by a saveAsTextFile() returns the same content", { + fileName1 <- tempfile(pattern="spark-test", fileext=".tmp") + fileName2 <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName1) + + rdd <- textFile(sc, fileName1) + saveAsTextFile(rdd, fileName2) + rdd <- textFile(sc, fileName2) + expect_equal(collect(rdd), as.list(mockFile)) + + unlink(fileName1) + unlink(fileName2) +}) + +test_that("saveAsTextFile() on a parallelized list works as expected", { + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + l <- list(1, 2, 3) + rdd <- parallelize(sc, l) + saveAsTextFile(rdd, fileName) + rdd <- textFile(sc, fileName) + expect_equal(collect(rdd), lapply(l, function(x) {toString(x)})) + + unlink(fileName) +}) + +test_that("textFile() and saveAsTextFile() word count works as expected", { + fileName1 <- tempfile(pattern="spark-test", fileext=".tmp") + fileName2 <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName1) + + rdd <- textFile(sc, fileName1) + + words <- flatMap(rdd, function(line) { strsplit(line, " ")[[1]] }) + wordCount <- lapply(words, function(word) { list(word, 1L) }) + + counts <- reduceByKey(wordCount, "+", 2L) + + saveAsTextFile(counts, fileName2) + rdd <- textFile(sc, fileName2) + + output <- collect(rdd) + expected <- list(list("awesome.", 1), list("Spark", 2), + list("pretty.", 1), list("is", 2)) + expect_equal(output, lapply(expected, function(x) {toString(x)})) + + unlink(fileName1) + unlink(fileName2) +}) diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index 69333429d13cf..a3aee5b61919d 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -46,6 +46,10 @@ writeInt <- function(con, value) { writeBin(as.integer(value), con, endian="big") } +writeStrings <- function(con, stringList) { + writeLines(unlist(stringList), con) +} + writeRaw <- function(con, batch, serialized = FALSE) { if (serialized) { outputSer <- batch diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 731e49025455d..d6253ba6eb79f 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -33,8 +33,11 @@ splitIndex <- readInt(inputCon) execLen <- readInt(inputCon) execFunctionName <- unserialize(readRawLen(inputCon, execLen)) -# read the isSerialized bit flag -isSerialized <- readInt(inputCon) +# read the isParentSerialized bit flag +isParentSerialized <- readInt(inputCon) + +# read the dataSerialization bit flag +dataSerialization <- readInt(inputCon) # Redirect stdout to stderr to prevent print statements from # interfering with outputStream @@ -82,16 +85,20 @@ isEmpty <- readInt(inputCon) if (isEmpty != 0) { if (numPartitions == -1) { - if (isSerialized) { + if (isParentSerialized) { # Now read as many characters as described in funcLen data <- readDeserialize(inputCon) } else { data <- readLines(inputCon) } output <- do.call(execFunctionName, list(splitIndex, data)) - writeRaw(outputCon, output) + if (dataSerialization) { + writeRaw(outputCon, output) + } else { + writeStrings(outputCon, output) + } } else { - if (isSerialized) { + if (isParentSerialized) { # Now read as many characters as described in funcLen data <- readDeserialize(inputCon) } else { @@ -130,7 +137,9 @@ if (isEmpty != 0) { } # End of output -writeInt(outputCon, 0L) +if (dataSerialization) { + writeInt(outputCon, 0L) +} close(outputCon) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index ccebb6281e751..cb5f168a3f922 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -20,7 +20,7 @@ private class PairwiseRRDD[T: ClassTag]( parent: RDD[T], numPartitions: Int, hashFunc: Array[Byte], - dataSerialized: Boolean, + parentSerialized: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, @@ -38,8 +38,8 @@ private class PairwiseRRDD[T: ClassTag]( RRDD.startStderrThread(proc) - val tempFile = RRDD.startStdinThread(rLibDir, proc, hashFunc, dataSerialized, - functionDependencies, packageNames, broadcastVars, + val tempFile = RRDD.startStdinThread(rLibDir, proc, hashFunc, parentSerialized, + true, functionDependencies, packageNames, broadcastVars, parentIterator, numPartitions, split.index) @@ -100,7 +100,7 @@ private class PairwiseRRDD[T: ClassTag]( class RRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], - dataSerialized: Boolean, + parentSerialized: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, @@ -119,8 +119,8 @@ class RRDD[T: ClassTag]( RRDD.startStderrThread(proc) // Write -1 in numPartitions to indicate this is a normal RDD - val tempFile = RRDD.startStdinThread(rLibDir, proc, func, dataSerialized, - functionDependencies, packageNames, broadcastVars, + val tempFile = RRDD.startStdinThread(rLibDir, proc, func, parentSerialized, + true, functionDependencies, packageNames, broadcastVars, parentIterator, numPartitions = -1, split.index) // Return an iterator that read lines from the process's stdout @@ -173,6 +173,76 @@ class RRDD[T: ClassTag]( val asJavaRDD : JavaRDD[Array[Byte]] = JavaRDD.fromRDD(this) } +/** + * An RDD that stores R objects as Array[String]. + */ +class StringRRDD[T: ClassTag]( + parent: RDD[T], + func: Array[Byte], + parentSerialized: Boolean, + functionDependencies: Array[Byte], + packageNames: Array[Byte], + rLibDir: String, + broadcastVars: Array[Broadcast[Object]]) + extends RDD[String](parent) { + + override def getPartitions = parent.partitions + + override def compute(split: Partition, context: TaskContext): Iterator[String] = { + + val parentIterator = firstParent[T].iterator(split, context) + + val pb = RRDD.rWorkerProcessBuilder(rLibDir) + val proc = pb.start() + + RRDD.startStderrThread(proc) + + // Write -1 in numPartitions to indicate this is a normal RDD + val tempFile = RRDD.startStdinThread(rLibDir, proc, func, parentSerialized, + false, functionDependencies, packageNames, broadcastVars, + parentIterator, numPartitions = -1, split.index) + + // Return an iterator that read lines from the process's stdout + val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) + val stdOutFileName = inputStream.readLine().trim() + + val dataStream = new BufferedReader( + new InputStreamReader(new FileInputStream(stdOutFileName))) + + return new Iterator[String] { + def next(): String = { + val obj = _nextObj + if (hasNext) { + _nextObj = read() + } + obj + } + + private def read(): String = { + try { + dataStream.readLine() + } catch { + case e: IOException => { + throw new SparkException("R worker exited unexpectedly (crashed)", e) + } + } + } + var _nextObj = read() + + def hasNext(): Boolean = { + val hasMore = _nextObj != null + if (!hasMore) { + // Delete the temporary file we created as we are done reading it + dataStream.close() + tempFile.delete() + } + hasMore + } + } + } + + val asJavaRDD : JavaRDD[String] = JavaRDD.fromRDD(this) +} object RRDD { @@ -242,7 +312,8 @@ object RRDD { rLibDir: String, proc: Process, func: Array[Byte], - dataSerialized: Boolean, + parentSerialized: Boolean, + dataSerialization: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], broadcastVars: Array[Broadcast[Object]], @@ -281,7 +352,8 @@ object RRDD { dataOut.writeInt(func.length) dataOut.write(func, 0, func.length) - dataOut.writeInt(if (dataSerialized) 1 else 0) + dataOut.writeInt(if (parentSerialized) 1 else 0) + dataOut.writeInt(if (dataSerialization) 1 else 0) dataOut.writeInt(functionDependencies.length) dataOut.write(functionDependencies, 0, functionDependencies.length) @@ -308,7 +380,7 @@ object RRDD { } for (elem <- iter) { - if (dataSerialized) { + if (parentSerialized) { val elemArr = elem.asInstanceOf[Array[Byte]] dataOut.writeInt(elemArr.length) dataOut.write(elemArr, 0, elemArr.length) From 47c4bb7e100dd9bc172d93c1d984fb5982330853 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 11 Dec 2014 19:16:42 -0500 Subject: [PATCH 275/687] fix reviews --- pkg/R/RDD.R | 4 ++-- pkg/R/utils.R | 23 +++++++++++++++++++++++ pkg/inst/worker/serialize.R | 23 ----------------------- pkg/inst/worker/worker.R | 8 ++------ 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 5fa6b8a12028d..9b8be0b760268 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1727,9 +1727,9 @@ setMethod("cogroup", acc <- res[[i]] # Create an accumulator. if (is.null(acc)) { - acc <- initAccumulator() + acc <- SparkR:::initAccumulator() } - addItemToAccumulator(acc, x[[2]]) + SparkR:::addItemToAccumulator(acc, x[[2]]) res[[i]] <- acc } lapply(res, function(acc) { diff --git a/pkg/R/utils.R b/pkg/R/utils.R index e4debaaf26de4..a41828b202960 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -221,3 +221,26 @@ reserialize <- function(rdd) { return(ser.rdd) } } + +# Fast append to list by using an accumulator. +# http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r +# +# The accumulator should has three fields size, counter and data. +# This function amortizes the allocation cost by doubling +# the size of the list every time it fills up. +addItemToAccumulator <- function(acc, item) { + if(acc$counter == acc$size) { + acc$size <- acc$size * 2 + length(acc$data) <- acc$size + } + acc$counter <- acc$counter + 1 + acc$data[[acc$counter]] <- item +} + +initAccumulator <- function() { + acc <- new.env() + acc$counter <- 0 + acc$data <- list(NULL) + acc$size <- 1 + acc +} diff --git a/pkg/inst/worker/serialize.R b/pkg/inst/worker/serialize.R index 3df4e837cb3bc..d09c636e8f61a 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/inst/worker/serialize.R @@ -69,26 +69,3 @@ writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { } } -# Fast append to list by using an accumulator. -# http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r -# -# The accumulator should has three fields size, counter and data. -# This function amortizes the allocation cost by doubling -# the size of the list every time it fills up. -addItemToAccumulator <- function(acc, item) { - if(acc$counter == acc$size) { - acc$size <- acc$size * 2 - length(acc$data) <- acc$size - } - acc$counter <- acc$counter + 1 - acc$data[[acc$counter]] <- item -} - -initAccumulator <- function() { - acc <- new.env() - acc$counter <- 0 - acc$data <- list(NULL) - acc$size <- 1 - acc -} - diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 06b9455beee06..72f5c40b39001 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -108,13 +108,9 @@ if (isEmpty != 0) { acc <- res[[bucket]] # Create a new accumulator if (is.null(acc)) { - acc <- initAccumulator() -#new.env() -# acc$counter <- 0 -# acc$data <- list(NULL) -# acc$size <- 1 + acc <- SparkR:::initAccumulator() } - addItemToAccumulator(acc, tuple) + SparkR:::addItemToAccumulator(acc, tuple) res[[bucket]] <- acc } invisible(lapply(data, hashTupleToEnvir)) From a7d9cdbd92c2f6750506b798fbc7f21bcc3fda09 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Fri, 12 Dec 2014 10:00:50 +0800 Subject: [PATCH 276/687] Fix build on Windows. --- pkg/src/Makefile.win | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/src/Makefile.win b/pkg/src/Makefile.win index b853173f07ce7..c2f4b367ad0ea 100644 --- a/pkg/src/Makefile.win +++ b/pkg/src/Makefile.win @@ -25,7 +25,7 @@ $(MAVEN_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) sharelib: string_hash_code.c - R CMD SHLIB -o SparkR.so string_hash_code.c + R CMD SHLIB -o SparkR.dll string_hash_code.c clean: mvn.bat clean @@ -35,6 +35,6 @@ clean: -rm sbt/sbt-launch-*.jar rm -f ../inst/$(JAR_NAME) rm -f *.o - rm -f *.so + rm -f *.dll .PHONY: all clean From 1fbdb2e23b66153dc642fbba27c2d5fd55ad5a57 Mon Sep 17 00:00:00 2001 From: dputler Date: Tue, 16 Dec 2014 15:45:45 -0800 Subject: [PATCH 277/687] Added the ability for the user to specify a text file location throught the use of tilde expansion or just the file name if it is in the working directory. --- pkg/R/context.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/R/context.R b/pkg/R/context.R index 9f7ff8917566d..d6a786843850d 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -19,6 +19,10 @@ #'} textFile <- function(sc, path, minSplits = NULL) { + # Allow the user to have a more flexible definiton of the text file path + path <- path.expand(path) + if (!(grepl("\\\\", path) | grepl("/", path))) + path <- paste(getwd(), path, sep = "/") if (is.null(minSplits)) { ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") defaultParallelism <- .jcall(ssc, "I", "defaultParallelism") From a9eb080fed79f5bbe8531ad7ee5a08174ca1a113 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 16 Dec 2014 19:38:07 -0600 Subject: [PATCH 278/687] IDE Shell Script --- Spark_IDE_Setup.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Spark_IDE_Setup.sh diff --git a/Spark_IDE_Setup.sh b/Spark_IDE_Setup.sh new file mode 100644 index 0000000000000..d198b8bcd7d27 --- /dev/null +++ b/Spark_IDE_Setup.sh @@ -0,0 +1,20 @@ + +# Download RStudio + +wget http://download1.rstudio.org/rstudio-0.98.1091-x86_64.rpm + +# Install using the rpm via yum + +sudo yum install rstudio-0.98.1091-x86_64.rpm + +{echo 'lib_path <- .libPaths()' ; echo 'lib_path <- c(lib_path,"/home/cloudera/SparkR-pkg/lib")'; echo '.libPaths(lib_path)'; } >> ~/.Rprofile + +cat <> .Rprofile +lib_path <- .libPaths() + +lib_path <- c(lib_path,"/home/cloudera/SparkR-pkg/lib") + +.libPaths(lib_path) + +rm(lib_path) +EOT \ No newline at end of file From 17f9909a04728bc76911d3ab0b39faf396cfe2d7 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 16 Dec 2014 20:28:51 -0600 Subject: [PATCH 279/687] Update Spark_IDE_Setup.sh --- Spark_IDE_Setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Spark_IDE_Setup.sh b/Spark_IDE_Setup.sh index d198b8bcd7d27..83b776cc8d150 100644 --- a/Spark_IDE_Setup.sh +++ b/Spark_IDE_Setup.sh @@ -7,7 +7,7 @@ wget http://download1.rstudio.org/rstudio-0.98.1091-x86_64.rpm sudo yum install rstudio-0.98.1091-x86_64.rpm -{echo 'lib_path <- .libPaths()' ; echo 'lib_path <- c(lib_path,"/home/cloudera/SparkR-pkg/lib")'; echo '.libPaths(lib_path)'; } >> ~/.Rprofile +# Add SparkR directory to .libPaths() in order to import SparkR into an Rstudio session cat <> .Rprofile lib_path <- .libPaths() @@ -17,4 +17,4 @@ lib_path <- c(lib_path,"/home/cloudera/SparkR-pkg/lib") .libPaths(lib_path) rm(lib_path) -EOT \ No newline at end of file +EOT From 8153e5a52fe921b2f9e9eace68b503fca42f40a2 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 17 Dec 2014 10:37:55 +0800 Subject: [PATCH 280/687] [SPARKR-146] Support read/save object files in SparkR. --- pkg/NAMESPACE | 2 ++ pkg/R/RDD.R | 29 ++++++++++++++++ pkg/R/context.R | 29 ++++++++++++++++ pkg/inst/tests/test_binaryFile.R | 57 ++++++++++++++++++++++++++++++++ pkg/man/objectFile.Rd | 29 ++++++++++++++++ pkg/man/saveAsObjectFile.Rd | 28 ++++++++++++++++ 6 files changed, 174 insertions(+) create mode 100644 pkg/inst/tests/test_binaryFile.R create mode 100644 pkg/man/objectFile.Rd create mode 100644 pkg/man/saveAsObjectFile.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index c94739d7bc9e0..80276d4b7779e 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -42,6 +42,7 @@ exportMethods( "reduceByKey", "rightOuterJoin", "sampleRDD", + "saveAsObjectFile", "take", "takeSample", "unionRDD", @@ -53,6 +54,7 @@ exportMethods( # S3 methods exported export( "textFile", + "objectFile", "parallelize", "hashCode", "includePackage", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 841603b7a1445..e286e242dc52c 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1061,6 +1061,35 @@ setMethod("keyBy", lapply(rdd, apply.func) }) +#' Save this RDD as a SequenceFile of serialized objects. +#' +#' @param rdd The RDD to save +#' @param path The directory where the file is saved +#' @rdname saveAsObjectFile +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' saveAsObjectFile(rdd, "/tmp/sparkR-tmp") +#'} +setGeneric("saveAsObjectFile", function(rdd, path) { standardGeneric("saveAsObjectFile") }) + +#' @rdname saveAsObjectFile +#' @aliases saveAsObjectFile,RDD +setMethod("saveAsObjectFile", + signature(rdd = "RDD", path = "character"), + function(rdd, path) { + # If the RDD is in string format, need to serialize it before saving it because when + # objectFile() is invoked to load the saved file, only serialized format is assumed. + if (!rdd@env$serialized) { + rdd <- reserialize(rdd) + } + .jcall(getJRDD(rdd), "V", "saveAsObjectFile", path) + # Return nothing + invisible(NULL) + }) + #' Return an RDD with the keys of each tuple. #' #' @param rdd The RDD from which the keys of each tuple is returned. diff --git a/pkg/R/context.R b/pkg/R/context.R index 9f7ff8917566d..ff5527c98fe2d 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -29,6 +29,35 @@ textFile <- function(sc, path, minSplits = NULL) { RDD(jrdd, FALSE) } +#' Load an RDD saved as a SequenceFile containing serialized objects. +#' +#' The file to be loaded should be one that was previously generated by calling +#' saveAsObjectFile() of the RDD class. +#' +#' @param sc SparkContext to use +#' @param path Path of file to read +#' @param minSplits Minimum number of splits to be created. If NULL, the default +#' value is chosen based on available parallelism. +#' @return RDD containing serialized R objects. +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- objectFile(sc, "myfile") +#'} + +objectFile <- function(sc, path, minSplits = NULL) { + if (is.null(minSplits)) { + ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") + defaultParallelism <- .jcall(ssc, "I", "defaultParallelism") + minSplits <- min(defaultParallelism, 2) + } + jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "objectFile", path, + as.integer(minSplits)) + # Assume the RDD contains serialized R objects. + RDD(jrdd, TRUE) +} + #' Create an RDD from a homogeneous list or vector. #' #' This function creates an RDD from a local homogeneous list in R. The elements diff --git a/pkg/inst/tests/test_binaryFile.R b/pkg/inst/tests/test_binaryFile.R new file mode 100644 index 0000000000000..37093bd50e36b --- /dev/null +++ b/pkg/inst/tests/test_binaryFile.R @@ -0,0 +1,57 @@ +context("functions on binary files") + +# JavaSparkContext handle +sc <- sparkR.init() + +mockFile = c("Spark is pretty.", "Spark is awesome.") + +test_that("saveAsObjectFile()/objectFile() following textFile() works", { + fileName1 <- tempfile(pattern="spark-test", fileext=".tmp") + fileName2 <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName1) + + rdd <- textFile(sc, fileName1) + saveAsObjectFile(rdd, fileName2) + rdd <- objectFile(sc, fileName2) + expect_equal(collect(rdd), as.list(mockFile)) + + unlink(fileName1) + unlink(fileName2, recursive = TRUE) +}) + +test_that("saveAsObjectFile()/objectFile() works on a parallelized list", { + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + + l <- list(1, 2, 3) + rdd <- parallelize(sc, l) + saveAsObjectFile(rdd, fileName) + rdd <- objectFile(sc, fileName) + expect_equal(collect(rdd), l) + + unlink(fileName, recursive = TRUE) +}) + +test_that("saveAsObjectFile()/objectFile() following RDD transformations works", { + fileName1 <- tempfile(pattern="spark-test", fileext=".tmp") + fileName2 <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName1) + + rdd <- textFile(sc, fileName1) + + words <- flatMap(rdd, function(line) { strsplit(line, " ")[[1]] }) + wordCount <- lapply(words, function(word) { list(word, 1L) }) + + counts <- reduceByKey(wordCount, "+", 2L) + + saveAsObjectFile(counts, fileName2) + counts <- objectFile(sc, fileName2) + + output <- collect(counts) + expected <- list(list("awesome.", 1), list("Spark", 2), list("pretty.", 1), + list("is", 2)) + expect_equal(output, expected) + + unlink(fileName1) + unlink(fileName2, recursive = TRUE) +}) + diff --git a/pkg/man/objectFile.Rd b/pkg/man/objectFile.Rd new file mode 100644 index 0000000000000..2a1d6425d90e3 --- /dev/null +++ b/pkg/man/objectFile.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{objectFile} +\alias{objectFile} +\title{Load an RDD saved as a SequenceFile containing serialized objects.} +\usage{ +objectFile(sc, path, minSplits = NULL) +} +\arguments{ +\item{sc}{SparkContext to use} + +\item{path}{Path of file to read} + +\item{minSplits}{Minimum number of splits to be created. If NULL, the default +value is chosen based on available parallelism.} +} +\value{ +RDD containing serialized R objects. +} +\description{ +The file to be loaded should be one that was previously generated by calling +saveAsObjectFile() of the RDD class. +} +\examples{ +\dontrun{ + sc <- sparkR.init() + rdd <- objectFile(sc, "myfile") +} +} + diff --git a/pkg/man/saveAsObjectFile.Rd b/pkg/man/saveAsObjectFile.Rd new file mode 100644 index 0000000000000..e75f51240c4a8 --- /dev/null +++ b/pkg/man/saveAsObjectFile.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{saveAsObjectFile} +\alias{saveAsObjectFile} +\alias{saveAsObjectFile,RDD} +\alias{saveAsObjectFile,RDD,character-method} +\title{Save this RDD as a SequenceFile of serialized objects.} +\usage{ +saveAsObjectFile(rdd, path) + +\S4method{saveAsObjectFile}{RDD,character}(rdd, path) +} +\arguments{ +\item{rdd}{The RDD to save} + +\item{path}{The directory where the file is saved} +} +\description{ +Save this RDD as a SequenceFile of serialized objects. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:3) +saveAsObjectFile(rdd, "/tmp/sparkR-tmp") +} +} + From 724e3a48f7c7ecf441a18a79616df617846c8308 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 16 Dec 2014 21:00:44 -0600 Subject: [PATCH 281/687] Update Spark_IDE_Setup.sh --- Spark_IDE_Setup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/Spark_IDE_Setup.sh b/Spark_IDE_Setup.sh index 83b776cc8d150..96b83a1e5fdf3 100644 --- a/Spark_IDE_Setup.sh +++ b/Spark_IDE_Setup.sh @@ -18,3 +18,4 @@ lib_path <- c(lib_path,"/home/cloudera/SparkR-pkg/lib") rm(lib_path) EOT + From c4a44d7b7f5ec4966d065f4ffe3602e61e60df2a Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 17 Dec 2014 12:42:11 +0800 Subject: [PATCH 282/687] Add @seealso in comments and extract some common code into a function. --- pkg/R/RDD.R | 1 + pkg/R/context.R | 16 ++++++++-------- pkg/man/objectFile.Rd | 3 +++ pkg/man/saveAsObjectFile.Rd | 3 +++ 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e286e242dc52c..659729e833f5c 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1066,6 +1066,7 @@ setMethod("keyBy", #' @param rdd The RDD to save #' @param path The directory where the file is saved #' @rdname saveAsObjectFile +#' @seealso objectFile #' @export #' @examples #'\dontrun{ diff --git a/pkg/R/context.R b/pkg/R/context.R index ff5527c98fe2d..ceb80290ad658 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -18,14 +18,18 @@ #' lines <- textFile(sc, "myfile.txt") #'} -textFile <- function(sc, path, minSplits = NULL) { +getMinSplits <- function(sc, minSplits) { if (is.null(minSplits)) { ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") defaultParallelism <- .jcall(ssc, "I", "defaultParallelism") minSplits <- min(defaultParallelism, 2) } + as.integer(minSplits) +} + +textFile <- function(sc, path, minSplits = NULL) { jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", path, - as.integer(minSplits)) + getMinSplits(sc, minSplits)) RDD(jrdd, FALSE) } @@ -39,6 +43,7 @@ textFile <- function(sc, path, minSplits = NULL) { #' @param minSplits Minimum number of splits to be created. If NULL, the default #' value is chosen based on available parallelism. #' @return RDD containing serialized R objects. +#' @seealso saveAsObjectFile #' @export #' @examples #'\dontrun{ @@ -47,13 +52,8 @@ textFile <- function(sc, path, minSplits = NULL) { #'} objectFile <- function(sc, path, minSplits = NULL) { - if (is.null(minSplits)) { - ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") - defaultParallelism <- .jcall(ssc, "I", "defaultParallelism") - minSplits <- min(defaultParallelism, 2) - } jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "objectFile", path, - as.integer(minSplits)) + getMinSplits(sc, minSplits)) # Assume the RDD contains serialized R objects. RDD(jrdd, TRUE) } diff --git a/pkg/man/objectFile.Rd b/pkg/man/objectFile.Rd index 2a1d6425d90e3..6c756d9de443a 100644 --- a/pkg/man/objectFile.Rd +++ b/pkg/man/objectFile.Rd @@ -26,4 +26,7 @@ saveAsObjectFile() of the RDD class. rdd <- objectFile(sc, "myfile") } } +\seealso{ +saveAsObjectFile +} diff --git a/pkg/man/saveAsObjectFile.Rd b/pkg/man/saveAsObjectFile.Rd index e75f51240c4a8..de86270cca58b 100644 --- a/pkg/man/saveAsObjectFile.Rd +++ b/pkg/man/saveAsObjectFile.Rd @@ -25,4 +25,7 @@ rdd <- parallelize(sc, 1:3) saveAsObjectFile(rdd, "/tmp/sparkR-tmp") } } +\seealso{ +objectFile +} From 3cf88f2455138c8a11f08eb3f2620a7f099c14c5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 16 Dec 2014 22:54:49 -0800 Subject: [PATCH 283/687] Sort lists before comparing in unit tests Since Spark doesn't guarantee that shuffle results will always be in the same order, we need to sort the results before comparing for deterministic behavior --- pkg/R/utils.R | 7 +++++ pkg/inst/tests/test_binaryFile.R | 2 +- pkg/inst/tests/test_binary_function.R | 6 ++-- pkg/inst/tests/test_rdd.R | 44 ++++++++++++++++++--------- pkg/inst/tests/test_shuffle.R | 24 +++++++-------- pkg/inst/tests/test_textFile.R | 2 +- 6 files changed, 55 insertions(+), 30 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 87f992fc5f0ca..3d3531c18ec59 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -213,3 +213,10 @@ initAccumulator <- function() { acc$size <- 1 acc } + +# Utility function to sort a list of key value pairs +# Used in unit tests +sortKeyValueList <- function(kv_list) { + keys <- sapply(kv_list, function(x) x[[1]]) + kv_list[order(keys)] +} diff --git a/pkg/inst/tests/test_binaryFile.R b/pkg/inst/tests/test_binaryFile.R index 37093bd50e36b..57f1b7b82e55d 100644 --- a/pkg/inst/tests/test_binaryFile.R +++ b/pkg/inst/tests/test_binaryFile.R @@ -49,7 +49,7 @@ test_that("saveAsObjectFile()/objectFile() following RDD transformations works", output <- collect(counts) expected <- list(list("awesome.", 1), list("Spark", 2), list("pretty.", 1), list("is", 2)) - expect_equal(output, expected) + expect_equal(sortKeyValueList(output), sortKeyValueList(expected)) unlink(fileName1) unlink(fileName2, recursive = TRUE) diff --git a/pkg/inst/tests/test_binary_function.R b/pkg/inst/tests/test_binary_function.R index ddea243af11be..6a60686abaaf0 100644 --- a/pkg/inst/tests/test_binary_function.R +++ b/pkg/inst/tests/test_binary_function.R @@ -38,6 +38,8 @@ test_that("cogroup on two RDDs", { rdd2 <- parallelize(sc, list(list("b", 2), list("a", 3))) cogroup.rdd <- cogroup(rdd1, rdd2, numPartitions = 2L) actual <- collect(cogroup.rdd) - expect_equal(actual, - list(list("b", list(list(), list(2))), list("a", list(list(1, 4), list(3))))) + + expected <- list(list("b", list(list(), list(2))), list("a", list(list(1, 4), list(3)))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(expected)) }) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index dfd96f15981b4..b1f1bb357096b 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -24,11 +24,11 @@ test_that("count by values and keys", { mods <- lapply(rdd, function(x) { x %% 3 }) actual <- countByValue(mods) expected <- list(list(0, 3L), list(1, 4L), list(2, 3L)) - expect_equal(actual, expected) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) actual <- countByKey(intRdd) expected <- list(list(2L, 2L), list(1L, 2L)) - expect_equal(actual, expected) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) test_that("lapply on RDD", { @@ -211,9 +211,10 @@ test_that("takeSample() on RDDs", { test_that("mapValues() on pairwise RDDs", { multiples <- mapValues(intRdd, function(x) { x * 2 }) actual <- collect(multiples) - expect_equal(actual, lapply(intPairs, function(x) { + expected <- lapply(intPairs, function(x) { list(x[[1]], x[[2]] * 2) - })) + }) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) test_that("flatMapValues() on pairwise RDDs", { @@ -269,12 +270,14 @@ test_that("join() on pairwise RDDs", { rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) rdd2 <- parallelize(sc, list(list(1,2), list(1,3))) actual <- collect(join(rdd1, rdd2, 2L)) - expect_equal(actual, list(list(1, list(1, 2)), list(1, list(1, 3)))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list(1, list(1, 2)), list(1, list(1, 3))))) rdd1 <- parallelize(sc, list(list("a",1), list("b",4))) rdd2 <- parallelize(sc, list(list("a",2), list("a",3))) actual <- collect(join(rdd1, rdd2, 2L)) - expect_equal(actual, list(list("a", list(1, 2)), list("a", list(1, 3)))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list("a", list(1, 2)), list("a", list(1, 3))))) rdd1 <- parallelize(sc, list(list(1,1), list(2,2))) rdd2 <- parallelize(sc, list(list(3,3), list(4,4))) @@ -291,43 +294,56 @@ test_that("leftOuterJoin() on pairwise RDDs", { rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) rdd2 <- parallelize(sc, list(list(1,2), list(1,3))) actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) - expect_equal(actual, list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL)))) + expected <- list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(expected)) rdd1 <- parallelize(sc, list(list("a",1), list("b",4))) rdd2 <- parallelize(sc, list(list("a",2), list("a",3))) actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) - expect_equal(actual, list(list("b", list(4, NULL)), list("a", list(1, 2)), list("a", list(1, 3)))) + expected <- list(list("b", list(4, NULL)), list("a", list(1, 2)), list("a", list(1, 3))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(expected)) rdd1 <- parallelize(sc, list(list(1,1), list(2,2))) rdd2 <- parallelize(sc, list(list(3,3), list(4,4))) actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) - expect_equal(actual, list(list(1, list(1, NULL)), list(2, list(2, NULL)))) + expected <- list(list(1, list(1, NULL)), list(2, list(2, NULL))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(expected)) rdd1 <- parallelize(sc, list(list("a",1), list("b",2))) rdd2 <- parallelize(sc, list(list("c",3), list("d",4))) actual <- collect(leftOuterJoin(rdd1, rdd2, 2L)) - expect_equal(actual, list(list("b", list(2, NULL)), list("a", list(1, NULL)))) + expected <- list(list("b", list(2, NULL)), list("a", list(1, NULL))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(expected)) }) test_that("rightOuterJoin() on pairwise RDDs", { rdd1 <- parallelize(sc, list(list(1,2), list(1,3))) rdd2 <- parallelize(sc, list(list(1,1), list(2,4))) actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) - expect_equal(actual, list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4)))) + expected <- list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) rdd1 <- parallelize(sc, list(list("a",2), list("a",3))) rdd2 <- parallelize(sc, list(list("a",1), list("b",4))) actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) - expect_equal(actual, list(list("b", list(NULL, 4)), list("a", list(2, 1)), list("a", list(3, 1)))) + expected <- list(list("b", list(NULL, 4)), list("a", list(2, 1)), list("a", list(3, 1))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(expected)) rdd1 <- parallelize(sc, list(list(1,1), list(2,2))) rdd2 <- parallelize(sc, list(list(3,3), list(4,4))) actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) - expect_equal(actual, list(list(3, list(NULL, 3)), list(4, list(NULL, 4)))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list(3, list(NULL, 3)), list(4, list(NULL, 4))))) rdd1 <- parallelize(sc, list(list("a",1), list("b",2))) rdd2 <- parallelize(sc, list(list("c",3), list("d",4))) actual <- collect(rightOuterJoin(rdd1, rdd2, 2L)) - expect_equal(actual, list(list("d", list(NULL, 4)), list("c", list(NULL, 3)))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list("d", list(NULL, 4)), list("c", list(NULL, 3))))) }) diff --git a/pkg/inst/tests/test_shuffle.R b/pkg/inst/tests/test_shuffle.R index 7bd413c3f9b9d..3683287fd0423 100644 --- a/pkg/inst/tests/test_shuffle.R +++ b/pkg/inst/tests/test_shuffle.R @@ -24,7 +24,7 @@ test_that("groupByKey for integers", { actual <- collect(grouped) expected <- list(list(2L, list(100, 1)), list(1L, list(-1, 200))) - expect_equal(actual, expected) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) test_that("groupByKey for doubles", { @@ -33,7 +33,7 @@ test_that("groupByKey for doubles", { actual <- collect(grouped) expected <- list(list(1.5, list(-1, 200)), list(2.5, list(100, 1))) - expect_equal(actual, expected) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) test_that("reduceByKey for ints", { @@ -42,7 +42,7 @@ test_that("reduceByKey for ints", { actual <- collect(reduced) expected <- list(list(2L, 101), list(1L, 199)) - expect_equal(actual, expected) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) test_that("reduceByKey for doubles", { @@ -50,7 +50,7 @@ test_that("reduceByKey for doubles", { actual <- collect(reduced) expected <- list(list(1.5, 199), list(2.5, 101)) - expect_equal(actual, expected) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) test_that("combineByKey for ints", { @@ -59,7 +59,7 @@ test_that("combineByKey for ints", { actual <- collect(reduced) expected <- list(list(2L, 101), list(1L, 199)) - expect_equal(actual, expected) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) test_that("combineByKey for doubles", { @@ -67,7 +67,7 @@ test_that("combineByKey for doubles", { actual <- collect(reduced) expected <- list(list(1.5, 199), list(2.5, 101)) - expect_equal(actual, expected) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) test_that("partitionBy() partitions data correctly", { @@ -81,8 +81,8 @@ test_that("partitionBy() partitions data correctly", { actual_first <- collectPartition(resultRDD, 0L) actual_second <- collectPartition(resultRDD, 1L) - expect_equal(actual_first, expected_first) - expect_equal(actual_second, expected_second) + expect_equal(sortKeyValueList(actual_first), sortKeyValueList(expected_first)) + expect_equal(sortKeyValueList(actual_second), sortKeyValueList(expected_second)) }) test_that("partitionBy works with dependencies", { @@ -99,8 +99,8 @@ test_that("partitionBy works with dependencies", { actual_first <- collectPartition(resultRDD, 0L) actual_second <- collectPartition(resultRDD, 1L) - expect_equal(actual_first, expected_first) - expect_equal(actual_second, expected_second) + expect_equal(sortKeyValueList(actual_first), sortKeyValueList(expected_first)) + expect_equal(sortKeyValueList(actual_second), sortKeyValueList(expected_second)) }) test_that("test partitionBy with string keys", { @@ -116,6 +116,6 @@ test_that("test partitionBy with string keys", { actual_second <- Filter(function(item) { item[[1]] == "and" }, collectPartition(resultRDD, 1L)) - expect_equal(actual_first, expected_first) - expect_equal(actual_second, expected_second) + expect_equal(sortKeyValueList(actual_first), sortKeyValueList(expected_first)) + expect_equal(sortKeyValueList(actual_second), sortKeyValueList(expected_second)) }) diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index ce819f1c98a80..5d871ccbc6548 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -40,7 +40,7 @@ test_that("textFile() word count works as expected", { output <- collect(counts) expected <- list(list("pretty.", 1), list("is", 2), list("awesome.", 1), list("Spark", 2)) - expect_equal(output, expected) + expect_equal(sortKeyValueList(output), sortKeyValueList(expected)) unlink(fileName) }) From 98efa5b2f15790888a2df467a38028039197cb74 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 17 Dec 2014 15:35:35 -0600 Subject: [PATCH 284/687] Added Quick Start Guide --- SparkR_Quick_Start_Guide.md | 170 ++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 SparkR_Quick_Start_Guide.md diff --git a/SparkR_Quick_Start_Guide.md b/SparkR_Quick_Start_Guide.md new file mode 100644 index 0000000000000..5f802fbc2b54f --- /dev/null +++ b/SparkR_Quick_Start_Guide.md @@ -0,0 +1,170 @@ +Quick Start +=== + +This tutorial provides a quick introduction to using SparkR. We will first introduce the API through SparkR’s interactive shell, then show how to write a standalone R application. + +To follow along with this guide, you'll need to install and configure both Spark and SparkR. If you're just starting out, we recommend [setting up a development environment] based on Cloudera's QuickStart VM. The VM approach will provide you with working versions of Hadoop, Spark, and SparkR while requiring minimal configuration. + +Interactive Analysis with the SparkR Shell +=== + +Basics +--- + +SparkR's shell provides a simple way to learn the API, as well as a powerful tool to analyze data interactively. Start the shell by running the following in the SparkR-pkg directory of your VM: + +```sh +> ./sparkR +``` + +Spark’s primary abstraction is a distributed collection of items called a Resilient Distributed Dataset (RDD). RDDs can be created from Hadoop InputFormats (such as HDFS files) or by transforming other RDDs. Let’s make a new RDD from the text of the README file in the SparkR-pkg source directory: + +```R +> textFile <- textFile(sc, "/home/cloudera/SparkR-pkg/README.md") +``` + +RDDs have [actions], which return values, and [transformations], which return pointers to new RDDs. Let’s start with a few actions: + +```R +> count(textFile) +[1] 122 + +> take(textFile, 1) +[1] "# R on Spark" +``` + +Now let’s use a transformation. We will use the filterRDD transformation to return a new RDD with a subset of the items in the file. + +```R +> linesWithSpark <- filterRDD(textFile, function(line){ grepl("Spark", line)}) +``` + +We can chain together transformations and actions: + +```R +> count(filterRDD(textFile, function(line){ grepl("Spark", line)})) # How many lines contain "Spark"? +[1] 35 +``` + +More on RDD Operations +--- + +RDD actions and transformations can be used for more complex computations. Let’s say we want to find the line with the most words: + +```R +> reduce( lapply( textFile, function(line) { length(strsplit(unlist(line), " ")[[1]])}), function(a, b) { if (a > b) { a } else { b }}) +[1] 36 +``` + +There are two functions here: `lapply` and `reduce`. The inner function (`lapply`) maps a line to an integer value, creating a new RDD. The outer function (`reduce`) is called on the new RDD to find the largest line count. In this case, the arguments to both functions are passed as anonymous functions, but we can also define R functions beforehand as pass them as arguments to the RDD functions. For example, we’ll define a max function to make this code easier to understand: + +```R +> max <- function(a, b) {if (a > b) { a } else { b }} + +> reduce(map(textFile, function(line) { length(strsplit(unlist(line), " ")[[1]])}), max) +[1] 36 +``` + +One common data flow pattern is MapReduce, as popularized by Hadoop. MapReduce flows are easily implemented in SparkR: + +```R +> words <- flatMap(textFile, + function(line) { + strsplit(line, " ")[[1]] + }) + +> wordCount <- lapply(words, function(word){ list(word, 1L) }) + +> counts <- reduceByKey(wordCount, "+", 2L) +``` +Here, we combined the flatMap, lapply and reduceByKey transformations to compute the per-word counts in the file as an RDD of (string, int) pairs. To collect the word counts in our shell, we can use the collect action: + +```R +> output <- collect(counts) + +> for (wordcount in output) { + cat(wordcount[[1]], ": ", wordcount[[2]], "\n") + } + +SparkContext. : 1 +SparkContext, : 1 +master : 3 +executors : 1 +issues : 1 +frontend : 1 +variable : 3 +[...] +``` + +Caching +--- + +Spark also supports pulling data sets into a cluster-wide in-memory cache. This is very useful when data is accessed repeatedly, such as when querying a small “hot” dataset or when running an iterative algorithm like PageRank. As a simple example, let’s mark our linesWithSpark dataset to be cached: + +```R +> cache(linesWithSpark) + +> system.time(count(linesWithSpark)) + + user system elapsed + 0.955 0.225 2.127 + +> system.time(count(linesWithSpark)) + + user system elapsed + 0.945 0.188 1.078 +``` + +It may seem silly to use Spark to explore and cache a 100-line text file. The interesting part is that these same functions can be used on very large data sets, even when they are striped across tens or hundreds of nodes. You can also do this interactively by connecting the SparkR shell to a cluster, an example of which is described in the [SparkR on EC2 wiki page]. + +Standalone Applications +=== + +Now we'll walk through the process of writing and executing a standalone in application in SparkR. As an example, we'll create a simple R script, `SimpleApp.R`: + +```R +library(SparkR) + +sc <- sparkR.init(master="local") + +logFile <- "/home/cloudera/SparkR-pkg/README.md" + +logData <- cache(textFile(sc, logFile)) + +numAs <- count(filterRDD(logData, function(s) { grepl("a", s) })) +numBs <- count(filterRDD(logData, function(s) { grepl("b", s) })) + +paste("Lines with a: ", numAs, ", Lines with b: ", numBs, sep="") +``` +This program just counts the number of lines containing ‘a’ and the number containing ‘b’ in a text file and returns the counts as a string on the command line. In this application, we use the `sparkR.init()` function to initialize a SparkContext which is then used to create RDDs. We can pass R functions to Spark where they are automatically serialized along with any variables they reference. + +To run this application, execute the following from the SparkR-pkg directory: + +```sh +> ./sparkR examples/SimpleApp.R + +[1] "Lines with a: 65, Lines with b: 32" +``` + +Where to Go from Here +=== + +Congratulations on running your first SparkR application! + +For more information on SparkR, head to the [SparkR Wiki]. + +In addition, SparkR includes several samples in the `examples` directory. To run one of them, use `./sparkR `. For example: + +```sh +./sparkR examples/pi.R local[2] +``` + +[setting up a development environment]: http://adventures.putler.org/blog/2014/12/08/Setting-Up-a-Virtual-Machine-with-SparkR/ + +[actions]: http://spark.apache.org/docs/latest/programming-guide.html#actions + +[transformations]: http://spark.apache.org/docs/latest/programming-guide.html#transformations + +[SparkR on EC2 wiki page]: https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-on-EC2 + +[SparkR Wiki]: https://github.com/amplab-extras/SparkR-pkg/wiki \ No newline at end of file From b2545a40d9521394efe0f96e13e529ff3e5de155 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 17 Dec 2014 16:16:59 -0600 Subject: [PATCH 285/687] Added IDE Setup Guide --- SparkR_IDE_Setup_Guide.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 SparkR_IDE_Setup_Guide.md diff --git a/SparkR_IDE_Setup_Guide.md b/SparkR_IDE_Setup_Guide.md new file mode 100644 index 0000000000000..b72d5cd6c85f0 --- /dev/null +++ b/SparkR_IDE_Setup_Guide.md @@ -0,0 +1,29 @@ +Setting up an IDE on the SparkR Development VM +=== + +While the SparkR shell is great for testing and interactive analysis, you may find that you'd prefer an IDE once you start to develop more complex Spark applications. While there are several possible solutions to this problem, my go-to IDE for all things R is [Rstudio] so I decided to go ahead and install Rstudio on the [SparkR Development VM]. In addition, I wanted to be able to import the SparkR library just like I would any other previously installed R package, so I had to create a `.Rprofile` and update R's default `.libpaths()` file so that it would automatically look for the SparkR-pkg directory. + +To make things easier, I've written a small [shell script] that will handle all of this for you (assuming you're working with the Development VM). To run the shell script, simply execute the following code from the VM's default command line: + +```sh +> wget https://raw.githubusercontent.com/cafreeman/SparkR-pkg/master/Spark_IDE_Setup.sh + +> sudo sh Spark_IDE_Setup.sh +``` + +This shell script will download and install Rstudio and also configure R to include SparkR in the list of importable packages by default. + +From here, you can fire up Rstudio (either type `rstudio` in the command prompt or look in Applications > Programming) and import SparkR as you would any other package: + +```R +> library(SparkR) +``` + +By importing SparkR through the IDE session, you'll be able to initialize a SparkContext and execute SparkR commands just like you would in the SparkR shell while taking full advantage of the convenience of developing in an IDE. + + +[Rstudio]: http://www.rstudio.com/ + +[shell script]: https://raw.githubusercontent.com/cafreeman/SparkR-pkg/master/Spark_IDE_Setup.sh + +[SparkR Development VM]: http://adventures.putler.org/blog/2014/12/08/Setting-Up-a-Virtual-Machine-with-SparkR/ \ No newline at end of file From b488c88446723eded8763351a13b124a8e6142db Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 17 Dec 2014 16:17:59 -0600 Subject: [PATCH 286/687] Rename Spark_IDE_Setup.sh to SparkR_IDE_Setup.sh --- Spark_IDE_Setup.sh => SparkR_IDE_Setup.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Spark_IDE_Setup.sh => SparkR_IDE_Setup.sh (100%) diff --git a/Spark_IDE_Setup.sh b/SparkR_IDE_Setup.sh similarity index 100% rename from Spark_IDE_Setup.sh rename to SparkR_IDE_Setup.sh From df58d9528617d9d53d8ef915588fee87a3f93328 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 17 Dec 2014 16:23:43 -0600 Subject: [PATCH 287/687] Update SparkR_Quick_Start_Guide.md Added attribution to the original quick start guide --- SparkR_Quick_Start_Guide.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SparkR_Quick_Start_Guide.md b/SparkR_Quick_Start_Guide.md index 5f802fbc2b54f..89b5741162883 100644 --- a/SparkR_Quick_Start_Guide.md +++ b/SparkR_Quick_Start_Guide.md @@ -5,6 +5,8 @@ This tutorial provides a quick introduction to using SparkR. We will first intro To follow along with this guide, you'll need to install and configure both Spark and SparkR. If you're just starting out, we recommend [setting up a development environment] based on Cloudera's QuickStart VM. The VM approach will provide you with working versions of Hadoop, Spark, and SparkR while requiring minimal configuration. +NOTE: This tutorial draws heavily from the original [Spark Quick Start Guide]. + Interactive Analysis with the SparkR Shell === @@ -159,6 +161,8 @@ In addition, SparkR includes several samples in the `examples` directory. To ru ./sparkR examples/pi.R local[2] ``` +[Spark Quick Start Guide]: http://spark.apache.org/docs/latest/quick-start.html + [setting up a development environment]: http://adventures.putler.org/blog/2014/12/08/Setting-Up-a-Virtual-Machine-with-SparkR/ [actions]: http://spark.apache.org/docs/latest/programming-guide.html#actions @@ -167,4 +171,4 @@ In addition, SparkR includes several samples in the `examples` directory. To ru [SparkR on EC2 wiki page]: https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-on-EC2 -[SparkR Wiki]: https://github.com/amplab-extras/SparkR-pkg/wiki \ No newline at end of file +[SparkR Wiki]: https://github.com/amplab-extras/SparkR-pkg/wiki From ca3f593f110c3e6168fbf994b66660db86db3566 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 18 Dec 2014 18:06:43 +0800 Subject: [PATCH 288/687] Refactor RRDD code. --- pkg/inst/worker/worker.R | 16 +- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 422 ++++++++---------- 2 files changed, 190 insertions(+), 248 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index d6253ba6eb79f..9756d7446e048 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -33,11 +33,11 @@ splitIndex <- readInt(inputCon) execLen <- readInt(inputCon) execFunctionName <- unserialize(readRawLen(inputCon, execLen)) -# read the isParentSerialized bit flag -isParentSerialized <- readInt(inputCon) +# read the isInputSerialized bit flag +isInputSerialized <- readInt(inputCon) -# read the dataSerialization bit flag -dataSerialization <- readInt(inputCon) +# read the isOutputSerialized bit flag +isOutputSerialized <- readInt(inputCon) # Redirect stdout to stderr to prevent print statements from # interfering with outputStream @@ -85,20 +85,20 @@ isEmpty <- readInt(inputCon) if (isEmpty != 0) { if (numPartitions == -1) { - if (isParentSerialized) { + if (isInputSerialized) { # Now read as many characters as described in funcLen data <- readDeserialize(inputCon) } else { data <- readLines(inputCon) } output <- do.call(execFunctionName, list(splitIndex, data)) - if (dataSerialization) { + if (isOutputSerialized) { writeRaw(outputCon, output) } else { writeStrings(outputCon, output) } } else { - if (isParentSerialized) { + if (isInputSerialized) { # Now read as many characters as described in funcLen data <- readDeserialize(inputCon) } else { @@ -137,7 +137,7 @@ if (isEmpty != 0) { } # End of output -if (dataSerialization) { +if (isOutputSerialized) { writeInt(outputCon, 0L) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index cb5f168a3f922..89e4b2dd0ced1 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -12,125 +12,38 @@ import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD -/** - * Form an RDD[(Array[Byte], Array[Byte])] from key-value pairs returned from R. - * This is used by SparkR's shuffle operations. - */ -private class PairwiseRRDD[T: ClassTag]( +private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], numPartitions: Int, - hashFunc: Array[Byte], - parentSerialized: Boolean, - functionDependencies: Array[Byte], - packageNames: Array[Byte], - rLibDir: String, - broadcastVars: Array[Broadcast[Object]]) - extends RDD[(Int, Array[Byte])](parent) { - - override def getPartitions = parent.partitions - - override def compute(split: Partition, context: TaskContext): Iterator[(Int, Array[Byte])] = { - - val parentIterator = firstParent[T].iterator(split, context) - - val pb = RRDD.rWorkerProcessBuilder(rLibDir) - val proc = pb.start() - - RRDD.startStderrThread(proc) - - val tempFile = RRDD.startStdinThread(rLibDir, proc, hashFunc, parentSerialized, - true, functionDependencies, packageNames, broadcastVars, - parentIterator, numPartitions, - split.index) - - // Return an iterator that read lines from the process's stdout - val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) - val stdOutFileName = inputStream.readLine().trim() - - val dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) - - return new Iterator[(Int, Array[Byte])] { - def next(): (Int, Array[Byte]) = { - val obj = _nextObj - if (hasNext) { - _nextObj = read() - } - obj - } - - private def read(): (Int, Array[Byte]) = { - try { - val length = dataStream.readInt() - - length match { - case length if length == 2 => - val hashedKey = dataStream.readInt() - val contentPairsLength = dataStream.readInt() - val contentPairs = new Array[Byte](contentPairsLength) - dataStream.read(contentPairs, 0, contentPairsLength) - (hashedKey, contentPairs) - case _ => (0, new Array[Byte](0)) // End of input - } - } catch { - case eof: EOFException => { - throw new SparkException("R worker exited unexpectedly (crashed)", eof) - } - } - } - var _nextObj = read() - - def hasNext(): Boolean = { - val hasMore = !(_nextObj._1 == 0 && _nextObj._2.length == 0) - if (!hasMore) { - // Delete the temporary file we created as we are done reading it - dataStream.close() - tempFile.delete() - } - hasMore - } - } - } - - lazy val asJavaPairRDD : JavaPairRDD[Int, Array[Byte]] = JavaPairRDD.fromRDD(this) -} - -/** - * An RDD that stores serialized R objects as Array[Byte]. - */ -class RRDD[T: ClassTag]( - parent: RDD[T], func: Array[Byte], parentSerialized: Boolean, + dataSerialized: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Broadcast[Object]]) - extends RDD[Array[Byte]](parent) { - + extends RDD[U](parent) { override def getPartitions = parent.partitions - override def compute(split: Partition, context: TaskContext): Iterator[Array[Byte]] = { + override def compute(split: Partition, context: TaskContext): Iterator[U] = { val parentIterator = firstParent[T].iterator(split, context) - val pb = RRDD.rWorkerProcessBuilder(rLibDir) + val pb = rWorkerProcessBuilder() val proc = pb.start() - RRDD.startStderrThread(proc) + startStderrThread(proc) - // Write -1 in numPartitions to indicate this is a normal RDD - val tempFile = RRDD.startStdinThread(rLibDir, proc, func, parentSerialized, - true, functionDependencies, packageNames, broadcastVars, - parentIterator, numPartitions = -1, split.index) + val tempFile = startStdinThread(proc, parentIterator, split.index) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) val stdOutFileName = inputStream.readLine().trim() - val dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) + val dataStream = openDataStream(stdOutFileName) - return new Iterator[Array[Byte]] { - def next(): Array[Byte] = { + return new Iterator[U] { + def next(): U = { val obj = _nextObj if (hasNext) { _nextObj = read() @@ -138,28 +51,10 @@ class RRDD[T: ClassTag]( obj } - private def read(): Array[Byte] = { - try { - val length = dataStream.readInt() - - length match { - case length if length > 0 => - val obj = new Array[Byte](length) - dataStream.read(obj, 0, length) - obj - case _ => - new Array[Byte](0) - } - } catch { - case eof: EOFException => { - throw new SparkException("R worker exited unexpectedly (crashed)", eof) - } - } - } var _nextObj = read() def hasNext(): Boolean = { - val hasMore = _nextObj.length != 0 + val hasMore = (_nextObj != null) if (!hasMore) { // Delete the temporary file we created as we are done reading it dataStream.close() @@ -170,115 +65,10 @@ class RRDD[T: ClassTag]( } } - val asJavaRDD : JavaRDD[Array[Byte]] = JavaRDD.fromRDD(this) -} - -/** - * An RDD that stores R objects as Array[String]. - */ -class StringRRDD[T: ClassTag]( - parent: RDD[T], - func: Array[Byte], - parentSerialized: Boolean, - functionDependencies: Array[Byte], - packageNames: Array[Byte], - rLibDir: String, - broadcastVars: Array[Broadcast[Object]]) - extends RDD[String](parent) { - - override def getPartitions = parent.partitions - - override def compute(split: Partition, context: TaskContext): Iterator[String] = { - - val parentIterator = firstParent[T].iterator(split, context) - - val pb = RRDD.rWorkerProcessBuilder(rLibDir) - val proc = pb.start() - - RRDD.startStderrThread(proc) - - // Write -1 in numPartitions to indicate this is a normal RDD - val tempFile = RRDD.startStdinThread(rLibDir, proc, func, parentSerialized, - false, functionDependencies, packageNames, broadcastVars, - parentIterator, numPartitions = -1, split.index) - - // Return an iterator that read lines from the process's stdout - val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) - val stdOutFileName = inputStream.readLine().trim() - - val dataStream = new BufferedReader( - new InputStreamReader(new FileInputStream(stdOutFileName))) - - return new Iterator[String] { - def next(): String = { - val obj = _nextObj - if (hasNext) { - _nextObj = read() - } - obj - } - - private def read(): String = { - try { - dataStream.readLine() - } catch { - case e: IOException => { - throw new SparkException("R worker exited unexpectedly (crashed)", e) - } - } - } - var _nextObj = read() - - def hasNext(): Boolean = { - val hasMore = _nextObj != null - if (!hasMore) { - // Delete the temporary file we created as we are done reading it - dataStream.close() - tempFile.delete() - } - hasMore - } - } - } - - val asJavaRDD : JavaRDD[String] = JavaRDD.fromRDD(this) -} - -object RRDD { - - def createSparkContext( - master: String, - appName: String, - sparkHome: String, - jars: Array[String], - sparkEnvirMap: JMap[Object, Object], - sparkExecutorEnvMap: JMap[Object, Object]): JavaSparkContext = { - - val sparkConf = new SparkConf().setMaster(master) - .setAppName(appName) - .setSparkHome(sparkHome) - .setJars(jars) - for ((name, value) <- sparkEnvirMap) { - sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) - } - for ((name, value) <- sparkExecutorEnvMap) { - sparkConf.setExecutorEnv(name.asInstanceOf[String], value.asInstanceOf[String]) - } - new JavaSparkContext(sparkConf) - } - - /** - * Create an RRDD given a sequence of byte arrays. Used to create RRDD when `parallelize` is - * called from R. - */ - def createRDDFromArray(jsc: JavaSparkContext, arr: Array[Array[Byte]]): JavaRDD[Array[Byte]] = { - JavaRDD.fromRDD(jsc.sc.parallelize(arr, arr.length)) - } - /** * ProcessBuilder used to launch worker R processes. */ - def rWorkerProcessBuilder(rLibDir: String) = { + private def rWorkerProcessBuilder() = { val rCommand = "Rscript" val rOptions = "--vanilla" val rExecScript = rLibDir + "/SparkR/worker/worker.R" @@ -294,7 +84,7 @@ object RRDD { /** * Start a thread to print the process's stderr to ours */ - def startStderrThread(proc: Process) { + private def startStderrThread(proc: Process) { new Thread("stderr reader for R") { override def run() { for (line <- Source.fromInputStream(proc.getErrorStream).getLines) { @@ -304,26 +94,17 @@ object RRDD { }.start() } - /** * Start a thread to write RDD data to the R process. */ - def startStdinThread[T]( - rLibDir: String, - proc: Process, - func: Array[Byte], - parentSerialized: Boolean, - dataSerialization: Boolean, - functionDependencies: Array[Byte], - packageNames: Array[Byte], - broadcastVars: Array[Broadcast[Object]], - iter: Iterator[T], - numPartitions: Int, - splitIndex: Int) : File = { + private def startStdinThread[T]( + proc: Process, + iter: Iterator[T], + splitIndex: Int) : File = { val env = SparkEnv.get val conf = env.conf - val tempDir = getLocalDir(conf) + val tempDir = RRDD.getLocalDir(conf) val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) val tempFileIn = File.createTempFile("rSpark", "in", new File(tempDir)) @@ -352,8 +133,10 @@ object RRDD { dataOut.writeInt(func.length) dataOut.write(func, 0, func.length) + // R worker process input serialization flag dataOut.writeInt(if (parentSerialized) 1 else 0) - dataOut.writeInt(if (dataSerialization) 1 else 0) + // R worker process output serialization flag + dataOut.writeInt(if (dataSerialized) 1 else 0) dataOut.writeInt(functionDependencies.length) dataOut.write(functionDependencies, 0, functionDependencies.length) @@ -399,6 +182,167 @@ object RRDD { tempFile } + protected def openDataStream(stdOutFileName: String): Closeable + protected def read(): U +} + +/** + * Form an RDD[Int, Array[Byte])] from key-value pairs returned from R. + * This is used by SparkR's shuffle operations. + */ +private class PairwiseRRDD[T: ClassTag]( + parent: RDD[T], + numPartitions: Int, + hashFunc: Array[Byte], + parentSerialized: Boolean, + functionDependencies: Array[Byte], + packageNames: Array[Byte], + rLibDir: String, + broadcastVars: Array[Broadcast[Object]]) + extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, parentSerialized, + true, functionDependencies, packageNames, rLibDir, + broadcastVars) { + + private var dataStream: DataInputStream = _ + + override protected def openDataStream(stdOutFileName: String) = { + dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) + dataStream + } + + override protected def read(): (Int, Array[Byte]) = { + try { + val length = dataStream.readInt() + + length match { + case length if length == 2 => + val hashedKey = dataStream.readInt() + val contentPairsLength = dataStream.readInt() + val contentPairs = new Array[Byte](contentPairsLength) + dataStream.read(contentPairs, 0, contentPairsLength) + (hashedKey, contentPairs) + case _ => null // End of input + } + } catch { + case eof: EOFException => { + throw new SparkException("R worker exited unexpectedly (crashed)", eof) + } + } + } + + lazy val asJavaPairRDD : JavaPairRDD[Int, Array[Byte]] = JavaPairRDD.fromRDD(this) +} + +/** + * An RDD that stores serialized R objects as Array[Byte]. + */ +private class RRDD[T: ClassTag]( + parent: RDD[T], + func: Array[Byte], + parentSerialized: Boolean, + functionDependencies: Array[Byte], + packageNames: Array[Byte], + rLibDir: String, + broadcastVars: Array[Broadcast[Object]]) + extends BaseRRDD[T, Array[Byte]](parent, -1, func, parentSerialized, + true, functionDependencies, packageNames, rLibDir, + broadcastVars) { + + private var dataStream: DataInputStream = _ + + override protected def openDataStream(stdOutFileName: String) = { + dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) + dataStream + } + + override protected def read(): Array[Byte] = { + try { + val length = dataStream.readInt() + + length match { + case length if length > 0 => + val obj = new Array[Byte](length) + dataStream.read(obj, 0, length) + obj + case _ => null + } + } catch { + case eof: EOFException => { + throw new SparkException("R worker exited unexpectedly (crashed)", eof) + } + } + } + + lazy val asJavaRDD : JavaRDD[Array[Byte]] = JavaRDD.fromRDD(this) +} + +/** + * An RDD that stores R objects as Array[String]. + */ +private class StringRRDD[T: ClassTag]( + parent: RDD[T], + func: Array[Byte], + parentSerialized: Boolean, + functionDependencies: Array[Byte], + packageNames: Array[Byte], + rLibDir: String, + broadcastVars: Array[Broadcast[Object]]) + extends BaseRRDD[T, String](parent, -1, func, parentSerialized, + false, functionDependencies, packageNames, rLibDir, + broadcastVars) { + + private var dataStream: BufferedReader = _ + + override protected def openDataStream(stdOutFileName: String) = { + dataStream = new BufferedReader( + new InputStreamReader(new FileInputStream(stdOutFileName))) + dataStream + } + + override protected def read(): String = { + try { + dataStream.readLine() + } catch { + case e: IOException => { + throw new SparkException("R worker exited unexpectedly (crashed)", e) + } + } + } + + lazy val asJavaRDD : JavaRDD[String] = JavaRDD.fromRDD(this) +} + +object RRDD { + + def createSparkContext( + master: String, + appName: String, + sparkHome: String, + jars: Array[String], + sparkEnvirMap: JMap[Object, Object], + sparkExecutorEnvMap: JMap[Object, Object]): JavaSparkContext = { + + val sparkConf = new SparkConf().setMaster(master) + .setAppName(appName) + .setSparkHome(sparkHome) + .setJars(jars) + for ((name, value) <- sparkEnvirMap) { + sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) + } + for ((name, value) <- sparkExecutorEnvMap) { + sparkConf.setExecutorEnv(name.asInstanceOf[String], value.asInstanceOf[String]) + } + new JavaSparkContext(sparkConf) + } + + /** + * Create an RRDD given a sequence of byte arrays. Used to create RRDD when `parallelize` is + * called from R. + */ + def createRDDFromArray(jsc: JavaSparkContext, arr: Array[Array[Byte]]): JavaRDD[Array[Byte]] = { + JavaRDD.fromRDD(jsc.sc.parallelize(arr, arr.length)) + } + def isRunningInYarnContainer(conf: SparkConf): Boolean = { // These environment variables are set by YARN. // For Hadoop 0.23.X, we check for YARN_LOCAL_DIRS (we use this below in getYarnLocalDirs()) @@ -464,6 +408,4 @@ object RRDD { } localDirs } - - } From 31322c647b34b880f2d54a4b2c171cd6df6eed66 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 18 Dec 2014 09:54:46 -0600 Subject: [PATCH 289/687] Update SparkR_IDE_Setup.sh Changed .Rprofile path to ~/.Rprofile to ensure that it goes to the right place instead of whatever the current working directory is. --- SparkR_IDE_Setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SparkR_IDE_Setup.sh b/SparkR_IDE_Setup.sh index 96b83a1e5fdf3..04b0b9670a7f1 100644 --- a/SparkR_IDE_Setup.sh +++ b/SparkR_IDE_Setup.sh @@ -9,7 +9,7 @@ sudo yum install rstudio-0.98.1091-x86_64.rpm # Add SparkR directory to .libPaths() in order to import SparkR into an Rstudio session -cat <> .Rprofile +cat <> ~/.Rprofile lib_path <- .libPaths() lib_path <- c(lib_path,"/home/cloudera/SparkR-pkg/lib") From 538bfdb317820661a56d2b98bf16a90a4dfddf8e Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 18 Dec 2014 09:56:13 -0600 Subject: [PATCH 290/687] Update SparkR_Quick_Start_Guide.md Corrected a few typos. --- SparkR_Quick_Start_Guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SparkR_Quick_Start_Guide.md b/SparkR_Quick_Start_Guide.md index 89b5741162883..572b1864d2d99 100644 --- a/SparkR_Quick_Start_Guide.md +++ b/SparkR_Quick_Start_Guide.md @@ -58,7 +58,7 @@ RDD actions and transformations can be used for more complex computations. Let [1] 36 ``` -There are two functions here: `lapply` and `reduce`. The inner function (`lapply`) maps a line to an integer value, creating a new RDD. The outer function (`reduce`) is called on the new RDD to find the largest line count. In this case, the arguments to both functions are passed as anonymous functions, but we can also define R functions beforehand as pass them as arguments to the RDD functions. For example, we’ll define a max function to make this code easier to understand: +There are two functions here: `lapply` and `reduce`. The inner function (`lapply`) maps a line to an integer value, creating a new RDD. The outer function (`reduce`) is called on the new RDD to find the largest line count. In this case, the arguments to both functions are passed as anonymous functions, but we can also define R functions beforehand and pass them as arguments to the RDD functions. For example, we’ll define a max function to make this code easier to understand: ```R > max <- function(a, b) {if (a > b) { a } else { b }} @@ -122,7 +122,7 @@ It may seem silly to use Spark to explore and cache a 100-line text file. The in Standalone Applications === -Now we'll walk through the process of writing and executing a standalone in application in SparkR. As an example, we'll create a simple R script, `SimpleApp.R`: +Now we'll walk through the process of writing and executing a standalone application in SparkR. As an example, we'll create a simple R script, `SimpleApp.R`: ```R library(SparkR) From bb1c17d0d5a6909accf5ef918eda5a1ac48e8d9d Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 18 Dec 2014 17:05:57 -0600 Subject: [PATCH 291/687] Update SparkR_IDE_Setup.sh --- SparkR_IDE_Setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SparkR_IDE_Setup.sh b/SparkR_IDE_Setup.sh index 04b0b9670a7f1..96b83a1e5fdf3 100644 --- a/SparkR_IDE_Setup.sh +++ b/SparkR_IDE_Setup.sh @@ -9,7 +9,7 @@ sudo yum install rstudio-0.98.1091-x86_64.rpm # Add SparkR directory to .libPaths() in order to import SparkR into an Rstudio session -cat <> ~/.Rprofile +cat <> .Rprofile lib_path <- .libPaths() lib_path <- c(lib_path,"/home/cloudera/SparkR-pkg/lib") From 57008bcca4be806fab84d5328fa156036c191e28 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 18 Dec 2014 18:45:11 -0600 Subject: [PATCH 292/687] Update SparkR_IDE_Setup.sh Added cleanup for the rstudio installer --- SparkR_IDE_Setup.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/SparkR_IDE_Setup.sh b/SparkR_IDE_Setup.sh index 96b83a1e5fdf3..930db9da3b2ff 100644 --- a/SparkR_IDE_Setup.sh +++ b/SparkR_IDE_Setup.sh @@ -1,15 +1,19 @@ +#!/bin/sh # Download RStudio - -wget http://download1.rstudio.org/rstudio-0.98.1091-x86_64.rpm +if [ ! -f /rstudio-0.98.1091-x86_64.rpm ]; then + wget http://download1.rstudio.org/rstudio-0.98.1091-x86_64.rpm +fi # Install using the rpm via yum sudo yum install rstudio-0.98.1091-x86_64.rpm +sudo rm rstudio-0.98.1091-x86_64.rpm + # Add SparkR directory to .libPaths() in order to import SparkR into an Rstudio session -cat <> .Rprofile +cat >> $HOME/.Rprofile < Date: Thu, 18 Dec 2014 18:45:50 -0600 Subject: [PATCH 293/687] Update SparkR_IDE_Setup_Guide.md Removed sudo from shell script call --- SparkR_IDE_Setup_Guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SparkR_IDE_Setup_Guide.md b/SparkR_IDE_Setup_Guide.md index b72d5cd6c85f0..15e5d03d7f4a8 100644 --- a/SparkR_IDE_Setup_Guide.md +++ b/SparkR_IDE_Setup_Guide.md @@ -8,7 +8,7 @@ To make things easier, I've written a small [shell script] that will handle all ```sh > wget https://raw.githubusercontent.com/cafreeman/SparkR-pkg/master/Spark_IDE_Setup.sh -> sudo sh Spark_IDE_Setup.sh +> sh Spark_IDE_Setup.sh ``` This shell script will download and install Rstudio and also configure R to include SparkR in the list of importable packages by default. @@ -26,4 +26,4 @@ By importing SparkR through the IDE session, you'll be able to initialize a Spar [shell script]: https://raw.githubusercontent.com/cafreeman/SparkR-pkg/master/Spark_IDE_Setup.sh -[SparkR Development VM]: http://adventures.putler.org/blog/2014/12/08/Setting-Up-a-Virtual-Machine-with-SparkR/ \ No newline at end of file +[SparkR Development VM]: http://adventures.putler.org/blog/2014/12/08/Setting-Up-a-Virtual-Machine-with-SparkR/ From bd0e3b4d385790c2c3355aea3dd19d52d333607b Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 18 Dec 2014 19:17:32 -0800 Subject: [PATCH 294/687] Fix saveAsTextFile test case --- pkg/inst/tests/test_textFile.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index cc63ef3e188e1..2e2d4b8f1a623 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -102,7 +102,8 @@ test_that("textFile() and saveAsTextFile() word count works as expected", { output <- collect(rdd) expected <- list(list("awesome.", 1), list("Spark", 2), list("pretty.", 1), list("is", 2)) - expect_equal(output, lapply(expected, function(x) {toString(x)})) + expectedStr <- lapply(expected, function(x) { toString(x) }) + expect_equal(sortKeyValueList(output), sortKeyValueList(expectedStr)) unlink(fileName1) unlink(fileName2) From 96812b656c406b39805efc49d04e531f8006dfb2 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 19 Dec 2014 21:46:53 -0800 Subject: [PATCH 295/687] Check for exceptions after void method calls --- pkg/R/RDD.R | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 5aa64f568a7e3..a91ce9045500e 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -293,6 +293,8 @@ setMethod("checkpoint", function(rdd) { jrdd <- getJRDD(rdd) .jcall(jrdd$rdd(), "V", "checkpoint") + # NOTE: rJava doesn't check for exceptions if the return type is void + .jcheck() rdd@env$isCheckpointed <- TRUE rdd }) @@ -1099,6 +1101,8 @@ setMethod("saveAsObjectFile", rdd <- reserialize(rdd) } .jcall(getJRDD(rdd), "V", "saveAsObjectFile", path) + # NOTE: rJava doesn't check for exceptions if the return type is void + .jcheck() # Return nothing invisible(NULL) }) @@ -1127,6 +1131,8 @@ setMethod("saveAsTextFile", } stringRdd <- lapply(rdd, func) .jcall(getJRDD(stringRdd, dataSerialization = FALSE), "V", "saveAsTextFile", path) + # NOTE: rJava doesn't check for exceptions if the return type is void + .jcheck() # Return nothing invisible(NULL) }) From 1c227b49395ba64135f2e8a77541647a933ed466 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 19 Dec 2014 21:48:01 -0800 Subject: [PATCH 296/687] Also add a check in context.R --- pkg/R/context.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/R/context.R b/pkg/R/context.R index ceb80290ad658..c218efb59b2a0 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -205,4 +205,6 @@ broadcast <- function(sc, object) { setCheckpointDir <- function(sc, dirName) { ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") .jcall(ssc, "V", "setCheckpointDir", suppressWarnings(normalizePath(dirName))) + # NOTE: rJava doesn't check for exceptions if the return type is void + .jcheck() } From b690d5862e064f7cc83ab56f1b576554bd0d1071 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 22 Dec 2014 14:10:16 -0800 Subject: [PATCH 297/687] Specify how to change Spark versions in README --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11afb6e512a20..e928359819e97 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ R. ## Installing SparkR ### Requirements -SparkR requires Scala 2.10 and Spark version >= 0.9.0. Current build by default uses the 1.1.0 -candidate from the Apache staging repositories. You can also build SparkR against a +SparkR requires Scala 2.10 and Spark version >= 0.9.0. Current build by default uses +Apache Spark 1.1.0. You can also build SparkR against a different Spark version (>= 0.9.0) by modifying `pkg/src/build.sbt`. SparkR also requires the R package `rJava` to be installed. To install `rJava`, @@ -29,6 +29,12 @@ If you wish to try out the package directly from github, you can use [`install_g library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") +SparkR by default uses Apache Spark 1.1.0. You can switch to a different Spark +version by setting the environment variable `SPARK_VERSION`. For example, to +use Apache Spark 1.2.0, you can run + + SPARK_VERSION=1.2.0 ./install-dev.sh + SparkR by default links to Hadoop 1.0.4. To use SparkR with other Hadoop versions, you will need to rebuild SparkR with the same version that [Spark is linked From bc6042b8a23f5558511529ed8389adb16d816e80 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 23 Dec 2014 12:19:22 -0600 Subject: [PATCH 298/687] Update build.sbt Added "org.apache.spark" % "spark-sql_2.10" % sparkVersion line to libraryDependencies. This will download the SparkSQL JAR and all its dependencies from the Maven repo and put it into the final SparkR JAR. --- pkg/src/build.sbt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 4ab8dd0c6314f..2bcfc04e67455 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -32,7 +32,8 @@ libraryDependencies ++= Seq( val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.spark" % "spark-core_2.10" % sparkVersion + "org.apache.spark" % "spark-core_2.10" % sparkVersion, + "org.apache.spark" % "spark-sql_2.10" % sparkVersion ) ++ (if (sbtYarnFlag != "") { val defaultYarnVersion = "2.4.0" val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) From 6e6cb6294b7ee229c0df3ac90df896a907738ba8 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 23 Dec 2014 15:39:14 -0600 Subject: [PATCH 299/687] Update SparkR_IDE_Setup.sh Cleaned up the code to remove a few superfluous components --- SparkR_IDE_Setup.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SparkR_IDE_Setup.sh b/SparkR_IDE_Setup.sh index 930db9da3b2ff..89200f796c1ca 100644 --- a/SparkR_IDE_Setup.sh +++ b/SparkR_IDE_Setup.sh @@ -1,15 +1,15 @@ #!/bin/sh # Download RStudio -if [ ! -f /rstudio-0.98.1091-x86_64.rpm ]; then - wget http://download1.rstudio.org/rstudio-0.98.1091-x86_64.rpm +if [ ! -f rstudio-0.98.1091-x86_64.rpm ]; then + wget http://download1.rstudio.org/rstudio-0.98.1091-x86_64.rpm fi # Install using the rpm via yum sudo yum install rstudio-0.98.1091-x86_64.rpm -sudo rm rstudio-0.98.1091-x86_64.rpm +sudo rstudio-0.98.1091-x86_64.rpm # Add SparkR directory to .libPaths() in order to import SparkR into an Rstudio session From d63b0263fd564d9d4505e32aefb675b2141b3356 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 24 Dec 2014 11:41:21 -0600 Subject: [PATCH 300/687] Delete SparkR_Quick_Start_Guide.md Removed since this has been added to the wiki --- SparkR_Quick_Start_Guide.md | 174 ------------------------------------ 1 file changed, 174 deletions(-) delete mode 100644 SparkR_Quick_Start_Guide.md diff --git a/SparkR_Quick_Start_Guide.md b/SparkR_Quick_Start_Guide.md deleted file mode 100644 index 572b1864d2d99..0000000000000 --- a/SparkR_Quick_Start_Guide.md +++ /dev/null @@ -1,174 +0,0 @@ -Quick Start -=== - -This tutorial provides a quick introduction to using SparkR. We will first introduce the API through SparkR’s interactive shell, then show how to write a standalone R application. - -To follow along with this guide, you'll need to install and configure both Spark and SparkR. If you're just starting out, we recommend [setting up a development environment] based on Cloudera's QuickStart VM. The VM approach will provide you with working versions of Hadoop, Spark, and SparkR while requiring minimal configuration. - -NOTE: This tutorial draws heavily from the original [Spark Quick Start Guide]. - -Interactive Analysis with the SparkR Shell -=== - -Basics ---- - -SparkR's shell provides a simple way to learn the API, as well as a powerful tool to analyze data interactively. Start the shell by running the following in the SparkR-pkg directory of your VM: - -```sh -> ./sparkR -``` - -Spark’s primary abstraction is a distributed collection of items called a Resilient Distributed Dataset (RDD). RDDs can be created from Hadoop InputFormats (such as HDFS files) or by transforming other RDDs. Let’s make a new RDD from the text of the README file in the SparkR-pkg source directory: - -```R -> textFile <- textFile(sc, "/home/cloudera/SparkR-pkg/README.md") -``` - -RDDs have [actions], which return values, and [transformations], which return pointers to new RDDs. Let’s start with a few actions: - -```R -> count(textFile) -[1] 122 - -> take(textFile, 1) -[1] "# R on Spark" -``` - -Now let’s use a transformation. We will use the filterRDD transformation to return a new RDD with a subset of the items in the file. - -```R -> linesWithSpark <- filterRDD(textFile, function(line){ grepl("Spark", line)}) -``` - -We can chain together transformations and actions: - -```R -> count(filterRDD(textFile, function(line){ grepl("Spark", line)})) # How many lines contain "Spark"? -[1] 35 -``` - -More on RDD Operations ---- - -RDD actions and transformations can be used for more complex computations. Let’s say we want to find the line with the most words: - -```R -> reduce( lapply( textFile, function(line) { length(strsplit(unlist(line), " ")[[1]])}), function(a, b) { if (a > b) { a } else { b }}) -[1] 36 -``` - -There are two functions here: `lapply` and `reduce`. The inner function (`lapply`) maps a line to an integer value, creating a new RDD. The outer function (`reduce`) is called on the new RDD to find the largest line count. In this case, the arguments to both functions are passed as anonymous functions, but we can also define R functions beforehand and pass them as arguments to the RDD functions. For example, we’ll define a max function to make this code easier to understand: - -```R -> max <- function(a, b) {if (a > b) { a } else { b }} - -> reduce(map(textFile, function(line) { length(strsplit(unlist(line), " ")[[1]])}), max) -[1] 36 -``` - -One common data flow pattern is MapReduce, as popularized by Hadoop. MapReduce flows are easily implemented in SparkR: - -```R -> words <- flatMap(textFile, - function(line) { - strsplit(line, " ")[[1]] - }) - -> wordCount <- lapply(words, function(word){ list(word, 1L) }) - -> counts <- reduceByKey(wordCount, "+", 2L) -``` -Here, we combined the flatMap, lapply and reduceByKey transformations to compute the per-word counts in the file as an RDD of (string, int) pairs. To collect the word counts in our shell, we can use the collect action: - -```R -> output <- collect(counts) - -> for (wordcount in output) { - cat(wordcount[[1]], ": ", wordcount[[2]], "\n") - } - -SparkContext. : 1 -SparkContext, : 1 -master : 3 -executors : 1 -issues : 1 -frontend : 1 -variable : 3 -[...] -``` - -Caching ---- - -Spark also supports pulling data sets into a cluster-wide in-memory cache. This is very useful when data is accessed repeatedly, such as when querying a small “hot” dataset or when running an iterative algorithm like PageRank. As a simple example, let’s mark our linesWithSpark dataset to be cached: - -```R -> cache(linesWithSpark) - -> system.time(count(linesWithSpark)) - - user system elapsed - 0.955 0.225 2.127 - -> system.time(count(linesWithSpark)) - - user system elapsed - 0.945 0.188 1.078 -``` - -It may seem silly to use Spark to explore and cache a 100-line text file. The interesting part is that these same functions can be used on very large data sets, even when they are striped across tens or hundreds of nodes. You can also do this interactively by connecting the SparkR shell to a cluster, an example of which is described in the [SparkR on EC2 wiki page]. - -Standalone Applications -=== - -Now we'll walk through the process of writing and executing a standalone application in SparkR. As an example, we'll create a simple R script, `SimpleApp.R`: - -```R -library(SparkR) - -sc <- sparkR.init(master="local") - -logFile <- "/home/cloudera/SparkR-pkg/README.md" - -logData <- cache(textFile(sc, logFile)) - -numAs <- count(filterRDD(logData, function(s) { grepl("a", s) })) -numBs <- count(filterRDD(logData, function(s) { grepl("b", s) })) - -paste("Lines with a: ", numAs, ", Lines with b: ", numBs, sep="") -``` -This program just counts the number of lines containing ‘a’ and the number containing ‘b’ in a text file and returns the counts as a string on the command line. In this application, we use the `sparkR.init()` function to initialize a SparkContext which is then used to create RDDs. We can pass R functions to Spark where they are automatically serialized along with any variables they reference. - -To run this application, execute the following from the SparkR-pkg directory: - -```sh -> ./sparkR examples/SimpleApp.R - -[1] "Lines with a: 65, Lines with b: 32" -``` - -Where to Go from Here -=== - -Congratulations on running your first SparkR application! - -For more information on SparkR, head to the [SparkR Wiki]. - -In addition, SparkR includes several samples in the `examples` directory. To run one of them, use `./sparkR `. For example: - -```sh -./sparkR examples/pi.R local[2] -``` - -[Spark Quick Start Guide]: http://spark.apache.org/docs/latest/quick-start.html - -[setting up a development environment]: http://adventures.putler.org/blog/2014/12/08/Setting-Up-a-Virtual-Machine-with-SparkR/ - -[actions]: http://spark.apache.org/docs/latest/programming-guide.html#actions - -[transformations]: http://spark.apache.org/docs/latest/programming-guide.html#transformations - -[SparkR on EC2 wiki page]: https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-on-EC2 - -[SparkR Wiki]: https://github.com/amplab-extras/SparkR-pkg/wiki From f73ec1661f3d60fa74efce87daccea2552d9db83 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 24 Dec 2014 11:41:48 -0600 Subject: [PATCH 301/687] Delete SparkR_IDE_Setup_Guide.md Removed since this has been added to the wiki --- SparkR_IDE_Setup_Guide.md | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 SparkR_IDE_Setup_Guide.md diff --git a/SparkR_IDE_Setup_Guide.md b/SparkR_IDE_Setup_Guide.md deleted file mode 100644 index 15e5d03d7f4a8..0000000000000 --- a/SparkR_IDE_Setup_Guide.md +++ /dev/null @@ -1,29 +0,0 @@ -Setting up an IDE on the SparkR Development VM -=== - -While the SparkR shell is great for testing and interactive analysis, you may find that you'd prefer an IDE once you start to develop more complex Spark applications. While there are several possible solutions to this problem, my go-to IDE for all things R is [Rstudio] so I decided to go ahead and install Rstudio on the [SparkR Development VM]. In addition, I wanted to be able to import the SparkR library just like I would any other previously installed R package, so I had to create a `.Rprofile` and update R's default `.libpaths()` file so that it would automatically look for the SparkR-pkg directory. - -To make things easier, I've written a small [shell script] that will handle all of this for you (assuming you're working with the Development VM). To run the shell script, simply execute the following code from the VM's default command line: - -```sh -> wget https://raw.githubusercontent.com/cafreeman/SparkR-pkg/master/Spark_IDE_Setup.sh - -> sh Spark_IDE_Setup.sh -``` - -This shell script will download and install Rstudio and also configure R to include SparkR in the list of importable packages by default. - -From here, you can fire up Rstudio (either type `rstudio` in the command prompt or look in Applications > Programming) and import SparkR as you would any other package: - -```R -> library(SparkR) -``` - -By importing SparkR through the IDE session, you'll be able to initialize a SparkContext and execute SparkR commands just like you would in the SparkR shell while taking full advantage of the convenience of developing in an IDE. - - -[Rstudio]: http://www.rstudio.com/ - -[shell script]: https://raw.githubusercontent.com/cafreeman/SparkR-pkg/master/Spark_IDE_Setup.sh - -[SparkR Development VM]: http://adventures.putler.org/blog/2014/12/08/Setting-Up-a-Virtual-Machine-with-SparkR/ From 21ed9d7a1e7dcf900ba95e2718b0299b2ca65589 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 24 Dec 2014 11:50:36 -0600 Subject: [PATCH 302/687] Update build.sbt Reverting to original state --- pkg/src/build.sbt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 2bcfc04e67455..4ab8dd0c6314f 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -32,8 +32,7 @@ libraryDependencies ++= Seq( val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.spark" % "spark-core_2.10" % sparkVersion, - "org.apache.spark" % "spark-sql_2.10" % sparkVersion + "org.apache.spark" % "spark-core_2.10" % sparkVersion ) ++ (if (sbtYarnFlag != "") { val defaultYarnVersion = "2.4.0" val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) From b50887767c00f3dfc621cc705d5af0a0ec902c28 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 24 Dec 2014 12:53:51 -0600 Subject: [PATCH 303/687] Update SparkR_IDE_Setup.sh --- SparkR_IDE_Setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SparkR_IDE_Setup.sh b/SparkR_IDE_Setup.sh index 89200f796c1ca..ff1e2f04ebbb8 100644 --- a/SparkR_IDE_Setup.sh +++ b/SparkR_IDE_Setup.sh @@ -9,7 +9,7 @@ fi sudo yum install rstudio-0.98.1091-x86_64.rpm -sudo rstudio-0.98.1091-x86_64.rpm +rm rstudio-0.98.1091-x86_64.rpm # Add SparkR directory to .libPaths() in order to import SparkR into an Rstudio session From b7de604e1351f630228b1498a70e8d7d5a6a6219 Mon Sep 17 00:00:00 2001 From: Todd Gao Date: Thu, 25 Dec 2014 10:57:08 +0800 Subject: [PATCH 304/687] optimize execFunctionDeps loading in worker.R using `rawConnection` to keep the `load` in memory; see http://stackoverflow.com/a/23597894/4134338 --- pkg/inst/worker/worker.R | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 2a5b756b8b2e3..bce25e16fefc8 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -47,12 +47,6 @@ sink(stderr()) depsLen <- readInt(inputCon) if (depsLen > 0) { execFunctionDeps <- readRawLen(inputCon, depsLen) - - # load the dependencies into current environment - depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") - depsFile <- file(depsFileName, open="wb") - writeBin(execFunctionDeps, depsFile, endian="big") - close(depsFile) } # Include packages as required @@ -62,8 +56,8 @@ for (pkg in packageNames) { } if (depsLen > 0) { - load(depsFileName) - unlink(depsFileName) + # load the dependencies into current environment + load(rawConnection(execFunctionDeps, open='rb')) } # Read and set broadcast variables From f04c6e03b8956e1e0b77cfb9bff4e05f05f48e27 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 25 Dec 2014 14:33:18 +0800 Subject: [PATCH 305/687] [SPARKR-147] Support multiple directories as input to textFile. --- pkg/R/context.R | 30 +++++++++++++++++------------- pkg/inst/tests/test_binaryFile.R | 16 ++++++++++++++++ pkg/inst/tests/test_textFile.R | 14 ++++++++++++++ pkg/man/objectFile.Rd | 2 +- pkg/man/textFile.Rd | 2 +- 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index c218efb59b2a0..1c43f6a9b3331 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -1,5 +1,14 @@ # context.R: SparkContext driven functions +getMinSplits <- function(sc, minSplits) { + if (is.null(minSplits)) { + ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") + defaultParallelism <- .jcall(ssc, "I", "defaultParallelism") + minSplits <- min(defaultParallelism, 2) + } + as.integer(minSplits) +} + #' Create an RDD from a text file. #' #' This function reads a text file from HDFS, a local file system (available on all @@ -7,7 +16,7 @@ #' RDD of strings from it. #' #' @param sc SparkContext to use -#' @param path Path of file to read +#' @param path Path of file to read. A vector of multiple paths is allowed. #' @param minSplits Minimum number of splits to be created. If NULL, the default #' value is chosen based on available parallelism. #' @return RDD where each item is of type \code{character} @@ -17,17 +26,10 @@ #' sc <- sparkR.init() #' lines <- textFile(sc, "myfile.txt") #'} - -getMinSplits <- function(sc, minSplits) { - if (is.null(minSplits)) { - ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") - defaultParallelism <- .jcall(ssc, "I", "defaultParallelism") - minSplits <- min(defaultParallelism, 2) - } - as.integer(minSplits) -} - textFile <- function(sc, path, minSplits = NULL) { + #' Convert a string vector of paths to a string containing comma separated paths + path <- paste(path, collapse=",") + jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", path, getMinSplits(sc, minSplits)) RDD(jrdd, FALSE) @@ -39,7 +41,7 @@ textFile <- function(sc, path, minSplits = NULL) { #' saveAsObjectFile() of the RDD class. #' #' @param sc SparkContext to use -#' @param path Path of file to read +#' @param path Path of file to read. A vector of multiple paths is allowed. #' @param minSplits Minimum number of splits to be created. If NULL, the default #' value is chosen based on available parallelism. #' @return RDD containing serialized R objects. @@ -50,8 +52,10 @@ textFile <- function(sc, path, minSplits = NULL) { #' sc <- sparkR.init() #' rdd <- objectFile(sc, "myfile") #'} - objectFile <- function(sc, path, minSplits = NULL) { + #' Convert a string vector of paths to a string containing comma separated paths + path <- paste(path, collapse=",") + jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "objectFile", path, getMinSplits(sc, minSplits)) # Assume the RDD contains serialized R objects. diff --git a/pkg/inst/tests/test_binaryFile.R b/pkg/inst/tests/test_binaryFile.R index 57f1b7b82e55d..71395f5a533d2 100644 --- a/pkg/inst/tests/test_binaryFile.R +++ b/pkg/inst/tests/test_binaryFile.R @@ -55,3 +55,19 @@ test_that("saveAsObjectFile()/objectFile() following RDD transformations works", unlink(fileName2, recursive = TRUE) }) +test_that("saveAsObjectFile()/objectFile() works with multiple paths", { + fileName1 <- tempfile(pattern="spark-test", fileext=".tmp") + fileName2 <- tempfile(pattern="spark-test", fileext=".tmp") + + rdd1 <- parallelize(sc, "Spark is pretty.") + saveAsObjectFile(rdd1, fileName1) + rdd2 <- parallelize(sc, "Spark is awesome.") + saveAsObjectFile(rdd2, fileName2) + + rdd <- objectFile(sc, c(fileName1, fileName2)) + expect_true(count(rdd) == 2) + + unlink(fileName1, recursive = TRUE) + unlink(fileName2, recursive = TRUE) +}) + diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 2e2d4b8f1a623..82a8f0f4c8370 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -108,3 +108,17 @@ test_that("textFile() and saveAsTextFile() word count works as expected", { unlink(fileName1) unlink(fileName2) }) + +test_that("textFile() on multiple paths", { + fileName1 <- tempfile(pattern="spark-test", fileext=".tmp") + fileName2 <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines("Spark is pretty.", fileName1) + writeLines("Spark is awesome.", fileName2) + + rdd <- textFile(sc, c(fileName1, fileName2)) + expect_true(count(rdd) == 2) + + unlink(fileName1) + unlink(fileName2) +}) + diff --git a/pkg/man/objectFile.Rd b/pkg/man/objectFile.Rd index 6c756d9de443a..0a37169e1eb2c 100644 --- a/pkg/man/objectFile.Rd +++ b/pkg/man/objectFile.Rd @@ -8,7 +8,7 @@ objectFile(sc, path, minSplits = NULL) \arguments{ \item{sc}{SparkContext to use} -\item{path}{Path of file to read} +\item{path}{Path of file to read. A vector of multiple paths is allowed.} \item{minSplits}{Minimum number of splits to be created. If NULL, the default value is chosen based on available parallelism.} diff --git a/pkg/man/textFile.Rd b/pkg/man/textFile.Rd index 95d50a3b56bb6..65bb4f80f72d1 100644 --- a/pkg/man/textFile.Rd +++ b/pkg/man/textFile.Rd @@ -7,7 +7,7 @@ textFile(sc, path, minSplits = NULL) \arguments{ \item{sc}{SparkContext to use} - \item{path}{Path of file to read} + \item{path}{Path of file to read. A vector of multiple paths is allowed.} \item{minSplits}{Minimum number of splits to be created. If NULL, the default value is chosen based on available From c5962ebeb10b36457e708c1fa1d01dabb52fe33c Mon Sep 17 00:00:00 2001 From: Todd Gao Date: Thu, 25 Dec 2014 18:40:35 +0800 Subject: [PATCH 306/687] further optimize using rawConnection update `getDependencies` --- .gitignore | 2 ++ pkg/R/utils.R | 10 ++++------ pkg/inst/worker/worker.R | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 02f451c0b503d..9fbd7717ed5a4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ *.class +*.so +*.o # Package Files # *.jar *.war diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 3d3531c18ec59..4dedd91e16cf0 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -137,12 +137,10 @@ getDependencies <- function(name) { function(x) { !exists(x, .broadcastNames, inherits=FALSE) }, filteredVars) - fileName <- tempfile(pattern="spark-utils", fileext=".deps") - save(list=filteredVars, file=fileName, envir=closureEnv) - fileSize <- file.info(fileName)$size - binData <- readBin(fileName, raw(), fileSize, endian="big") - - unlink(fileName) + rc <- rawConnection(raw(), 'wb') + save(list=filteredVars, file=rc, envir=closureEnv) + binData <- memCompress(rawConnectionValue(rc), "g") + close(rc) binData } diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index bce25e16fefc8..198957d6ec108 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -57,7 +57,7 @@ for (pkg in packageNames) { if (depsLen > 0) { # load the dependencies into current environment - load(rawConnection(execFunctionDeps, open='rb')) + load(rawConnection(memDecompress(execFunctionDeps, "g"), open='rb')) } # Read and set broadcast variables From d7b0007b03c250e1a0f60d982afa71475da4340a Mon Sep 17 00:00:00 2001 From: Todd Gao Date: Fri, 26 Dec 2014 09:15:18 +0800 Subject: [PATCH 307/687] remove memCompress --- pkg/R/utils.R | 2 +- pkg/inst/worker/worker.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 4dedd91e16cf0..0a0a5300a218c 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -139,7 +139,7 @@ getDependencies <- function(name) { rc <- rawConnection(raw(), 'wb') save(list=filteredVars, file=rc, envir=closureEnv) - binData <- memCompress(rawConnectionValue(rc), "g") + binData <- rawConnectionValue(rc) close(rc) binData } diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 198957d6ec108..bce25e16fefc8 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -57,7 +57,7 @@ for (pkg in packageNames) { if (depsLen > 0) { # load the dependencies into current environment - load(rawConnection(memDecompress(execFunctionDeps, "g"), open='rb')) + load(rawConnection(execFunctionDeps, open='rb')) } # Read and set broadcast variables From 52821da30e59c6701e5f982d0f0c702a861a4c4b Mon Sep 17 00:00:00 2001 From: Todd Gao Date: Fri, 26 Dec 2014 09:45:55 +0800 Subject: [PATCH 308/687] switch the order of packages and function deps --- pkg/inst/worker/worker.R | 9 +++------ .../main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 6 +++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index bce25e16fefc8..5c47574bfd6cf 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -43,19 +43,16 @@ isOutputSerialized <- readInt(inputCon) # interfering with outputStream sink(stderr()) -# read function dependencies -depsLen <- readInt(inputCon) -if (depsLen > 0) { - execFunctionDeps <- readRawLen(inputCon, depsLen) -} - # Include packages as required packageNames <- unserialize(readRaw(inputCon)) for (pkg in packageNames) { suppressPackageStartupMessages(require(as.character(pkg), character.only=TRUE)) } +# read function dependencies +depsLen <- readInt(inputCon) if (depsLen > 0) { + execFunctionDeps <- readRawLen(inputCon, depsLen) # load the dependencies into current environment load(rawConnection(execFunctionDeps, open='rb')) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 89e4b2dd0ced1..218c584e7fe63 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -138,12 +138,12 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( // R worker process output serialization flag dataOut.writeInt(if (dataSerialized) 1 else 0) - dataOut.writeInt(functionDependencies.length) - dataOut.write(functionDependencies, 0, functionDependencies.length) - dataOut.writeInt(packageNames.length) dataOut.write(packageNames, 0, packageNames.length) + dataOut.writeInt(functionDependencies.length) + dataOut.write(functionDependencies, 0, functionDependencies.length) + dataOut.writeInt(broadcastVars.length) broadcastVars.foreach { broadcast => // TODO(shivaram): Read a Long in R to avoid this cast From 22015c12c8dc07127b56d231a5d834d46a8c0617 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 29 Dec 2014 13:24:08 -0800 Subject: [PATCH 309/687] Add first cut of SparkR Backend --- BACKEND.md | 26 ++++ pkg/R/SparkRBackendInterface.R | 32 +++++ .../worker/serialize.R => R/deserialize.R} | 95 ++++++++------ pkg/R/serialize.R | 90 +++++++++++++ pkg/R/sparkRClient.R | 31 +++++ pkg/src/build.sbt | 1 + .../cs/amplab/sparkr/SerializeJavaR.scala | 120 ++++++++++++++++++ .../cs/amplab/sparkr/SparkRBackend.scala | 89 +++++++++++++ .../amplab/sparkr/SparkRBackendHandler.scala | 76 +++++++++++ .../sparkr/SparkRBackendInterface.scala | 23 ++++ .../sparkr/SparkRBackendInterfaceImpl.scala | 32 +++++ .../cs/amplab/sparkr/SparkRConf.scala | 14 ++ 12 files changed, 590 insertions(+), 39 deletions(-) create mode 100644 BACKEND.md create mode 100644 pkg/R/SparkRBackendInterface.R rename pkg/{inst/worker/serialize.R => R/deserialize.R} (52%) create mode 100644 pkg/R/serialize.R create mode 100644 pkg/R/sparkRClient.R create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterface.scala create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterfaceImpl.scala create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala diff --git a/BACKEND.md b/BACKEND.md new file mode 100644 index 0000000000000..51298c36a7e2b --- /dev/null +++ b/BACKEND.md @@ -0,0 +1,26 @@ +### Notes and TODOs for SparkR Backend + +- Send back the reply length as the first field in the reply. + Enforce somehow that the second field should be the error code ? +- Consider auto parsing all the arguments to RPCs on the R side + i.e. take something like list(...) and serialize each argument. +- Consider using reflection on the Java side instead of explicit handlers + +Future work +- Can we refactor the serializers to have a more visitor-like pattern ? + That will enable serializing UDFs etc. from R to Java and back. + + +### To try out the new Spark Context, run something like + +``` +./install-dev.sh +library(SparkR, lib.loc="./lib") +SparkR:::launchBackend("./pkg/src/target/scala-2.10/sparkr-assembly-0.1.jar", + "edu.berkeley.cs.amplab.sparkr.SparkRBackend", "12345") +con <- SparkR:::init("localhost", 12345) +s <- SparkR:::createSparkContext("local", "SparkRJavaExpt", "", + c("./pkg/src/target/scala-2.10/sparkr-assembly-0.1.jar")) +# You should be able to go to localhost:4041 and see a SparkRJavaExpt as the app name +``` +~ diff --git a/pkg/R/SparkRBackendInterface.R b/pkg/R/SparkRBackendInterface.R new file mode 100644 index 0000000000000..2cfbff481d4dc --- /dev/null +++ b/pkg/R/SparkRBackendInterface.R @@ -0,0 +1,32 @@ +# +# Definitions of methods implemented by SparkRBackend +# Corresponding Java definition found in SparkRBackendInterface.scala +# + +createSparkContext <- function( + master, + appName, + sparkHome, + jars, + sparkEnvirMap=list(), + sparkExecutorEnvMap=list()) { + + conn <- get(".sparkRCon", .sparkREnv) + rc <- rawConnection(raw(0), "r+") + writeString(rc, "createSparkContext") + writeString(rc, master) + writeString(rc, appName) + writeString(rc, sparkHome) + writeVector(rc, jars) + writeNamedList(rc, sparkEnvirMap) + writeNamedList(rc, sparkExecutorEnvMap) + + bytesToSend <- rawConnectionValue(rc) + writeInt(conn, length(bytesToSend)) + writeBin(bytesToSend, conn) + + returnStatus <- readInt(conn) + stopifnot(returnStatus == 0) + appId <- readString(conn) + appId +} diff --git a/pkg/inst/worker/serialize.R b/pkg/R/deserialize.R similarity index 52% rename from pkg/inst/worker/serialize.R rename to pkg/R/deserialize.R index 3f14e1cd50eb0..df0380177a667 100644 --- a/pkg/inst/worker/serialize.R +++ b/pkg/R/deserialize.R @@ -1,7 +1,61 @@ # Utility functions to serialize, deserialize etc. -readInt <- function(con) { - readBin(con, integer(), n = 1, endian="big") +readString <- function(con) { + stringLen <- readInt(con) + string <- readBin(con, raw(), stringLen, endian="big") + rawToChar(string) +} + +readInt <- function(con, num = 1) { + readBin(con, integer(), n = num, endian="big") +} + +readDouble <- function(con, num = 1) { + readBin(con, double(), n = num, endian="big") +} + +readBoolean <- function(con, num = 1) { + as.logical(readInt(con, num)) +} + +readVector <- function(con) { + len <- readInt(con) + type <- readString(con) + if (length > 0) { + if (type == "integer") { + out <- readInt(con, num=len) + } else if (type == "character") { + out <- sapply(1:len, function(x) { + readString(con) + }) + } else if (type == "logical") { + out <- readBoolean(con, num=len) + } else if (type == "double") { + out <- readDouble(con, num=len) + } else if (type == "raw") { + out <- readRawLen(con, len) + } else { + } + out + } else { + vector(mode=type) + } +} + +readNamedList <- function(con) { + len <- readInt(con) + if (len > 0) { + # TODO: This is not used ? + elemType <- readString(con) + names <- readVector(con) + vals <- readVector(con) + + out <- as.list(vals) + names(out) <- names + out + } else { + list() + } } readRaw <- function(con) { @@ -36,40 +90,3 @@ readDeserialize <- function(con) { } } -readString <- function(con) { - stringLen <- readInt(con) - string <- readBin(con, raw(), stringLen, endian="big") - rawToChar(string) -} - -writeInt <- function(con, value) { - writeBin(as.integer(value), con, endian="big") -} - -writeStrings <- function(con, stringList) { - writeLines(unlist(stringList), con) -} - -writeRaw <- function(con, batch, serialized = FALSE) { - if (serialized) { - outputSer <- batch - } else { - outputSer <- serialize(batch, ascii = FALSE, conn = NULL) - } - writeInt(con, length(outputSer)) - writeBin(outputSer, con, endian="big") -} - -# Used for writing out a hashed-by-key pairwise RDD. -writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { - writeInt(con, length(e)) - for (bucketNum in ls(e)) { - writeInt(con, bucketNum) - writeInt(con, length(e[[bucketNum]])) - for (tuple in e[[bucketNum]]) { - writeRaw(con, tuple[[1]], keyValPairsSerialized) - writeRaw(con, tuple[[2]], keyValPairsSerialized) - } - } -} - diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R new file mode 100644 index 0000000000000..81175cd070c77 --- /dev/null +++ b/pkg/R/serialize.R @@ -0,0 +1,90 @@ +# Utility functions to serialize, deserialize etc. + +writeString <- function(con, value) { + writeInt(con, as.integer(nchar(value) + 1)) + writeBin(value, con, endian="big") +} + +writeInt <- function(con, value) { + writeBin(as.integer(value), con, endian="big") +} + +writeDouble <- function(con, value) { + writeBin(value, con, endian="big") +} + +writeBoolean <- function(con, value) { + # TRUE becomes 1, FALSE becomes 0 + writeInt(con, as.integer(value)) +} + +writeRaw <- function(con, batch, serialized = FALSE) { + if (serialized) { + outputSer <- batch + } else { + outputSer <- serialize(batch, ascii = FALSE, conn = NULL) + } + writeInt(con, length(outputSer)) + writeBin(outputSer, con, endian="big") +} + +# Used to pass arrays +writeVector <- function(con, arr) { + if (!is.vector(arr) || typeof(arr) == "list") { + stop("writeVector cannot be used for non-vectors or lists") + } + writeInt(con, length(arr)) + writeString(con, typeof(arr)) + if (length(arr) > 0) { + if (typeof(arr) == "integer") { + for (a in arr) { + writeInt(con, a) + } + } else if (typeof(arr) == "character") { + for (a in arr) { + writeString(con, a) + } + } else if (typeof(arr) == "logical") { + for (a in arr) { + writeBoolean(con, a) + } + } else if (typeof(arr) == "double") { + for (a in arr) { + writeDouble(con, a) + } + } else if (typeof(arr) == "raw") { + writeBin(con, arr, endian="big") + } + } +} + +# Used to pass named lists as hash maps +# Note that all the elements of the list should be of same type +writeNamedList <- function(con, namedlist) { + len <- length(namedlist) + writeInt(con, len) + if (len > 0) { + # All elements should be of same type + elemType <- unique(sapply(namedlist, function(elem) { typeof(elem) })) + stopifnot(length(elemType) == 1) + + writeString(con, elemType) + names <- names(namedlist) + + writeVector(con, names) + writeVector(con, unlist(namedlist, use.names=F, recursive=F)) + } +} + +# Used for writing out a hashed-by-key pairwise RDD. +writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { + writeInt(con, length(e)) + for (bucketNum in ls(e)) { + writeInt(con, bucketNum) + writeInt(con, length(e[[bucketNum]])) + for (tuple in e[[bucketNum]]) { + writeRaw(con, tuple[[1]], keyValPairsSerialized) + writeRaw(con, tuple[[2]], keyValPairsSerialized) + } + } +} diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R new file mode 100644 index 0000000000000..41c6339fd4465 --- /dev/null +++ b/pkg/R/sparkRClient.R @@ -0,0 +1,31 @@ +# Client code to connect to SparkRBackend + +# Creates a SparkR client connection object +# if one doesn't already exist +init <- function(hostname, port, timeout=60) { + if (exists(".sparkRcon", envir=.sparkREnv)) { + cat("SparkRBackend client connection already exists\n") + return(get(".sparkRcon", envir=.sparkREnv)) + } + + con <- socketConnection(host=hostname, port=port, server=FALSE, + blocking=TRUE, open="wb", timeout=timeout) + + assign(".sparkRCon", con, envir=.sparkREnv) + get(".sparkRCon", envir=.sparkREnv) +} + +launchBackend <- function( + jar, + mainClass, + args, + javaHome=Sys.getenv("JAVA_HOME")) { + if (javaHome != "") { + java_bin <- paste(javaHome, "bin", "java", sep="/") + } else { + java_bin <- "java" + } + command <- paste(java_bin, "-cp", jar, mainClass, args, sep=" ") + cat("Launching java with command ", command, "\n") + invisible(system(command, intern=FALSE, ignore.stdout=F, ignore.stderr=F, wait=F)) +} diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 4ab8dd0c6314f..ba3a84ac876ab 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -15,6 +15,7 @@ organization := "edu.berkeley.cs.amplab" scalaVersion := "2.10.3" libraryDependencies ++= Seq( + "io.netty" % "netty-all" % "4.0.23.Final", "org.slf4j" % "slf4j-api" % "1.7.2", "org.slf4j" % "slf4j-log4j12" % "1.7.2" ) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala new file mode 100644 index 0000000000000..1580f37fa3996 --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -0,0 +1,120 @@ +package edu.berkeley.cs.amplab.sparkr + +import java.io.DataInputStream +import java.io.DataOutputStream + +object SerializeJavaR { + + def readInt(in: DataInputStream) = { + in.readInt() + } + + def readDouble(in: DataInputStream) = { + in.readDouble() + } + + def readString(in: DataInputStream) = { + val len = in.readInt() + val asciiBytes = new Array[Byte](len) + in.read(asciiBytes, 0, len) + new String(asciiBytes.dropRight(1).map(_.toChar)) + } + + def readBoolean(in: DataInputStream) = { + val intVal = in.readInt() + if (intVal == 0) false else true + } + + def readIntArr(in: DataInputStream) = { + val len = readInt(in) + val typeStr = readString(in) + assert(typeStr == "integer") + (0 until len).map(_ => readInt(in)).toArray + } + + def readDoubleArr(in: DataInputStream) = { + val len = readInt(in) + val typeStr = readString(in) + assert(typeStr == "double") + (0 until len).map(_ => readDouble(in)).toArray + } + + def readBooleanArr(in: DataInputStream) = { + val len = readInt(in) + val typeStr = readString(in) + assert(typeStr == "logical") + (0 until len).map(_ => readBoolean(in)).toArray + } + + def readStringArr(in: DataInputStream) = { + val len = readInt(in) + val typeStr = readString(in) + assert(typeStr == "character") + (0 until len).map(_ => readString(in)).toArray + } + + def readStringMap(in: DataInputStream) = { + val len = readInt(in) + if (len > 0) { + val typeStr = readString(in) + assert(typeStr == "character") + } + val keys = (0 until len).map(_ => readString(in)) + val values = (0 until len).map(_ => readString(in)) + keys.zip(values).toMap + } + + def writeInt(out: DataOutputStream, value: Int) { + out.writeInt(value) + } + + def writeDouble(out: DataOutputStream, value: Double) { + out.writeDouble(value) + } + + def writeBoolean(out: DataOutputStream, value: Boolean) { + val intValue = if (value) 1 else 0 + out.writeInt(intValue) + } + + // NOTE: Only works for ASCII right now + def writeString(out: DataOutputStream, value: String) { + val len = value.length + out.writeInt(len + 1) // For the \0 + out.writeBytes(value) + } + + def writeIntArr(out: DataOutputStream, value: Array[Int]) { + out.writeInt(value.length) + writeString(out, "integer") + value.foreach(v => out.writeInt(v)) + } + + def writeDoubleArr(out: DataOutputStream, value: Array[Double]) { + out.writeInt(value.length) + writeString(out, "double") + value.foreach(v => out.writeDouble(v)) + } + + def writeBooleanArr(out: DataOutputStream, value: Array[Boolean]) { + out.writeInt(value.length) + writeString(out, "logical") + value.foreach(v => writeBoolean(out, v)) + } + + def writeStringArr(out: DataOutputStream, value: Array[String]) { + out.writeInt(value.length) + writeString(out, "character") + value.foreach(v => writeString(out, v)) + } + + def writeStringMap(out: DataOutputStream, value: Map[String, String]) { + out.writeInt(value.size) + if (value.size > 0) { + writeString(out, "character") + // TODO: Make writeStringArr work on Iterable ? + writeStringArr(out, value.keys.toArray) + writeStringArr(out, value.values.toArray) + } + } +} diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala new file mode 100644 index 0000000000000..99da7e00236e7 --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -0,0 +1,89 @@ +package edu.berkeley.cs.amplab.sparkr + +import java.io._ +import java.net._ +import java.util.{Map => JMap} +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit + +import io.netty.bootstrap.ServerBootstrap +import io.netty.channel.ChannelFuture +import io.netty.channel.ChannelInitializer +import io.netty.channel.ChannelOption +import io.netty.channel.EventLoopGroup +import io.netty.channel.nio.NioEventLoopGroup +import io.netty.channel.socket.SocketChannel +import io.netty.channel.socket.nio.NioServerSocketChannel + +import io.netty.handler.codec.bytes.ByteArrayDecoder +import io.netty.handler.codec.bytes.ByteArrayEncoder +import io.netty.handler.codec.LengthFieldBasedFrameDecoder + +class SparkRBackend(portToBind: Int) { + + var channelFuture: ChannelFuture = null + var bootstrap: ServerBootstrap = null + val backendImpl = new SparkRBackendInterfaceImpl + + init(portToBind) + + def init(port: Int) { + val bossGroup = new NioEventLoopGroup(SparkRConf.numServerThreads) + val workerGroup = bossGroup + + bootstrap = new ServerBootstrap() + .group(bossGroup, workerGroup) + .channel(classOf[NioServerSocketChannel]) + + bootstrap.childHandler(new ChannelInitializer[SocketChannel]() { + def initChannel(ch: SocketChannel) = { + ch.pipeline() + .addLast("encoder", new ByteArrayEncoder()) + .addLast("frameDecoder", + // maxFrameLength = 2G + // lengthFieldOffset = 0 + // lengthFieldLength = 4 + // lengthAdjustment = 0 + // initialBytesToStrip = 4, i.e. strip out the length field itself + new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4)) + .addLast("decoder", new ByteArrayDecoder()) + .addLast("handler", new SparkRBackendHandler(backendImpl)) + } + }) + + channelFuture = bootstrap.bind(new InetSocketAddress(port)) + channelFuture.syncUninterruptibly() + println("SparkR Backend server started on port :" + port) + } + + def run() = { + channelFuture.channel.closeFuture().syncUninterruptibly() + } + + def close() = { + if (channelFuture != null) { + // close is a local operation and should finish within milliseconds; timeout just to be safe + channelFuture.channel().close().awaitUninterruptibly(10, TimeUnit.SECONDS) + channelFuture = null + } + if (bootstrap != null && bootstrap.group() != null) { + bootstrap.group().shutdownGracefully() + } + if (bootstrap != null && bootstrap.childGroup() != null) { + bootstrap.childGroup().shutdownGracefully() + } + bootstrap = null + } + +} + +object SparkRBackend { + def main(args: Array[String]) { + if (args.length < 1) { + System.err.println("Usage: SparkRBackend ") + System.exit(-1) + } + val sparkRBackend = new SparkRBackend(args(0).toInt) + sparkRBackend.run() + } +} diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala new file mode 100644 index 0000000000000..17c4a8f6ad34b --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -0,0 +1,76 @@ +package edu.berkeley.cs.amplab.sparkr + +import java.io._ + +import io.netty.channel.ChannelHandler.Sharable +import io.netty.channel.ChannelHandlerContext +import io.netty.channel.SimpleChannelInboundHandler + +import edu.berkeley.cs.amplab.sparkr.SerializeJavaR._ + +/** + * Handler for SparkRBackend + */ +class SparkRBackendHandler(backend: SparkRBackendInterface) + extends SimpleChannelInboundHandler[Array[Byte]] { + + override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { + val bis = new ByteArrayInputStream(msg) + val dis = new DataInputStream(bis) + + val bos = new ByteArrayOutputStream() + val dos = new DataOutputStream(bos) + + // Read the RPC name first and then pass on the DataInputStream to + // each handle function + val rpcName = readString(dis) + + System.err.println("Got rpcName " + rpcName) + + rpcName match { + case "createSparkContext" => handleCreateSparkContext(dis, dos) + case _ => dos.writeInt(-1) + } + + dos.flush() + val reply = bos.toByteArray + + println("Writing reply of length " + reply.length) + + ctx.write(reply) + } + + override def channelReadComplete(ctx: ChannelHandlerContext) { + ctx.flush() + } + + override def exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable) { + // Close the connection when an exception is raised. + cause.printStackTrace() + ctx.close() + } + + // Handler functions read arguments off the DataInputStream and + // call the backend. + def handleCreateSparkContext(dis: DataInputStream, dos: DataOutputStream) = { + try { + val master = readString(dis) + val appName = readString(dis) + val sparkHome = readString(dis) + val jars = readStringArr(dis) + val sparkEnvirMap = readStringMap(dis) + val sparkExecutorEnvMap = readStringMap(dis) + val appId = backend.createSparkContext(master, appName, sparkHome, jars, sparkEnvirMap, + sparkExecutorEnvMap) + + writeInt(dos, 0) + writeString(dos, appId) + } catch { + case e: Exception => { + System.err.println("handleCreateSparkContext failed with " + e) + writeInt(dos, -1) + } + } + } + +} diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterface.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterface.scala new file mode 100644 index 0000000000000..2abfcdfb26f51 --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterface.scala @@ -0,0 +1,23 @@ +package edu.berkeley.cs.amplab.sparkr + +// Definitions of methods implemented by SparkRBackend +// Corresponding definition found in SparkRBackendInterface.R +// +// NOTE: If you change any method here, you will need to change the +// corresponding one in SparkRBackendInterface.R +trait SparkRBackendInterface { + + /** + * Create a Spark Context + * + * @return String the applicationId corresponding to this SparkContext + * + */ + def createSparkContext(master: String, appName: String, sparkHome: String, + jars: Array[String], sparkEnvirMap: Map[String, String], + sparkExecutorEnvMap: Map[String, String]): String + + // def saveAsTextFile(rdd: Int, path: String): Int + + // def saveAsObjectFile(rdd: Int, path: String): Int +} diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterfaceImpl.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterfaceImpl.scala new file mode 100644 index 0000000000000..a9e8094c26021 --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterfaceImpl.scala @@ -0,0 +1,32 @@ +package edu.berkeley.cs.amplab.sparkr + +import scala.collection.mutable.HashMap +import scala.collection.JavaConversions._ + +import org.apache.spark.{SparkEnv, Partition, SparkException, TaskContext, SparkContext} +import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} +import org.apache.spark.broadcast.Broadcast +import org.apache.spark.rdd.RDD + +class SparkRBackendInterfaceImpl extends SparkRBackendInterface { + + var sc: Option[SparkContext] = None + val rddMap = new HashMap[Int, RDD[_]] + + override def createSparkContext(master: String, appName: String, sparkHome: String, + jars: Array[String], sparkEnvirMap: Map[String, String], + sparkExecutorEnvMap: Map[String, String]): String = { + + // TODO: create a version of createSparkContext that works with Map[String, String] + sc = Some(RRDD.createSparkContext(master, appName, sparkHome, jars, + sparkEnvirMap.asInstanceOf[Map[Object, Object]], + sparkExecutorEnvMap.asInstanceOf[Map[Object, Object]])) + + // TODO: can't get applicationId in Spark 1.1 ? + sc.get.hashCode.toString + } + + // + //override def createRRDD(): Int = { + //} +} diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala new file mode 100644 index 0000000000000..481e7e592502a --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala @@ -0,0 +1,14 @@ +package edu.berkeley.cs.amplab.sparkr + +object SparkRConf { + + def getSystemProperty(name: String, default: String) = { + Option(System.getProperty(name)).getOrElse(default) + } + + def getIntProperty(name: String, default: Int) = { + Integer.parseInt(getSystemProperty(name, default.toString)) + } + + val numServerThreads = getIntProperty("sparkr.backend.threads", 2) +} From 5f745c08e061f35b4a33213aea6e247496fe4a7a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 29 Dec 2014 13:49:45 -0800 Subject: [PATCH 310/687] Update notes in backend --- BACKEND.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/BACKEND.md b/BACKEND.md index 51298c36a7e2b..8277a1523e4b7 100644 --- a/BACKEND.md +++ b/BACKEND.md @@ -1,7 +1,13 @@ ### Notes and TODOs for SparkR Backend +- Add a stop backend command. This should be called when the R process exits. + The Java program doesn't stop right now ! +- Handle stderr, stdout of Java program better. We shouldn't probably put them on the shell, + but we need some way for users to look at the messages. - Send back the reply length as the first field in the reply. - Enforce somehow that the second field should be the error code ? + Enforce somehow that the second field should be the error code. Also we should add support + to capture exceptions and send them in the reply. + - Consider auto parsing all the arguments to RPCs on the R side i.e. take something like list(...) and serialize each argument. - Consider using reflection on the Java side instead of explicit handlers From 5f2268fba2ae6f1638f6338c96db2a143f76cfd5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 29 Dec 2014 17:11:22 -0800 Subject: [PATCH 311/687] Add support to stop backend --- pkg/R/SparkRBackendInterface.R | 28 +++++++++++++++++++ pkg/R/sparkRClient.R | 3 +- .../cs/amplab/sparkr/SerializeJavaR.scala | 1 + .../cs/amplab/sparkr/SparkRBackend.scala | 26 +++++++++++------ .../amplab/sparkr/SparkRBackendHandler.scala | 14 +++++----- 5 files changed, 56 insertions(+), 16 deletions(-) diff --git a/pkg/R/SparkRBackendInterface.R b/pkg/R/SparkRBackendInterface.R index 2cfbff481d4dc..bd76ac80a5d25 100644 --- a/pkg/R/SparkRBackendInterface.R +++ b/pkg/R/SparkRBackendInterface.R @@ -11,7 +11,12 @@ createSparkContext <- function( sparkEnvirMap=list(), sparkExecutorEnvMap=list()) { + if (!exists(".sparkRCon", .sparkREnv)) { + stop("No connection to backend found") + } + conn <- get(".sparkRCon", .sparkREnv) + rc <- rawConnection(raw(0), "r+") writeString(rc, "createSparkContext") writeString(rc, master) @@ -27,6 +32,29 @@ createSparkContext <- function( returnStatus <- readInt(conn) stopifnot(returnStatus == 0) + appId <- readString(conn) appId } + +stopBackend <- function() { + if (!exists(".sparkRCon", .sparkREnv)) { + stop("No connection to backend found") + } + conn <- get(".sparkRCon", .sparkREnv) + + rc <- rawConnection(raw(0), "r+") + writeString(rc, "stopBackend") + + bytesToSend <- rawConnectionValue(rc) + writeInt(conn, length(bytesToSend)) + writeBin(bytesToSend, conn) + + returnStatus <- readInt(conn) + stopifnot(returnStatus == 0) + invisible(NULL) + + # Also close the connection and remove it from our env + close(conn) + rm(".sparkRCon", envir=.sparkREnv) +} diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 41c6339fd4465..9d683034324b2 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -19,13 +19,14 @@ launchBackend <- function( jar, mainClass, args, + javaOpts="-Xms2g -Xmx2g", javaHome=Sys.getenv("JAVA_HOME")) { if (javaHome != "") { java_bin <- paste(javaHome, "bin", "java", sep="/") } else { java_bin <- "java" } - command <- paste(java_bin, "-cp", jar, mainClass, args, sep=" ") + command <- paste(java_bin, javaOpts, "-cp", jar, mainClass, args, sep=" ") cat("Launching java with command ", command, "\n") invisible(system(command, intern=FALSE, ignore.stdout=F, ignore.stderr=F, wait=F)) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 1580f37fa3996..7fc815dabbaaf 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -82,6 +82,7 @@ object SerializeJavaR { val len = value.length out.writeInt(len + 1) // For the \0 out.writeBytes(value) + out.writeByte(0) } def writeIntArr(out: DataOutputStream, value: Array[Int]) { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index 99da7e00236e7..aad710d668662 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -19,17 +19,17 @@ import io.netty.handler.codec.bytes.ByteArrayDecoder import io.netty.handler.codec.bytes.ByteArrayEncoder import io.netty.handler.codec.LengthFieldBasedFrameDecoder -class SparkRBackend(portToBind: Int) { +class SparkRBackend() { var channelFuture: ChannelFuture = null var bootstrap: ServerBootstrap = null - val backendImpl = new SparkRBackendInterfaceImpl + var bossGroup: EventLoopGroup = null - init(portToBind) - def init(port: Int) { - val bossGroup = new NioEventLoopGroup(SparkRConf.numServerThreads) + bossGroup = new NioEventLoopGroup(SparkRConf.numServerThreads) val workerGroup = bossGroup + val backendImpl = new SparkRBackendInterfaceImpl + val handler = new SparkRBackendHandler(backendImpl, this) bootstrap = new ServerBootstrap() .group(bossGroup, workerGroup) @@ -47,7 +47,7 @@ class SparkRBackend(portToBind: Int) { // initialBytesToStrip = 4, i.e. strip out the length field itself new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4)) .addLast("decoder", new ByteArrayDecoder()) - .addLast("handler", new SparkRBackendHandler(backendImpl)) + .addLast("handler", handler) } }) @@ -83,7 +83,17 @@ object SparkRBackend { System.err.println("Usage: SparkRBackend ") System.exit(-1) } - val sparkRBackend = new SparkRBackend(args(0).toInt) - sparkRBackend.run() + val sparkRBackend = new SparkRBackend() + try { + sparkRBackend.init(args(0).toInt) + sparkRBackend.run() + } catch { + case e: IOException => { + System.err.println("Server shutting down: failed with exception ", e) + sparkRBackend.close() + System.exit(0) + } + } + System.exit(0) } } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 17c4a8f6ad34b..45f15c7decd37 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -11,7 +11,7 @@ import edu.berkeley.cs.amplab.sparkr.SerializeJavaR._ /** * Handler for SparkRBackend */ -class SparkRBackendHandler(backend: SparkRBackendInterface) +class SparkRBackendHandler(backend: SparkRBackendInterface, server: SparkRBackend) extends SimpleChannelInboundHandler[Array[Byte]] { override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { @@ -25,18 +25,18 @@ class SparkRBackendHandler(backend: SparkRBackendInterface) // each handle function val rpcName = readString(dis) - System.err.println("Got rpcName " + rpcName) + System.err.println(s"Handling $rpcName") rpcName match { case "createSparkContext" => handleCreateSparkContext(dis, dos) + case "stopBackend" => { + dos.write(0) + server.close() + } case _ => dos.writeInt(-1) - } + } - dos.flush() val reply = bos.toByteArray - - println("Writing reply of length " + reply.length) - ctx.write(reply) } From 387bd5794c1b8d15249b6863117a804d7f01fa4a Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 30 Dec 2014 13:22:54 +0800 Subject: [PATCH 312/687] [SPARKR-164] Temporary files used by SparkR accumulat as time goes on. --- pkg/inst/worker/worker.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 2a5b756b8b2e3..491c5bd4ede6e 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -139,6 +139,8 @@ if (isOutputSerialized) { } close(outputCon) +close(inputCon) +unlink(inFileName) # Restore stdout sink() From 2cff2bd6d945d3450affdb94784c4d3b35dd09a4 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 7 Jan 2015 20:50:36 +0800 Subject: [PATCH 313/687] Add function to invoke Java method. --- pkg/R/SparkRBackendInterface.R | 42 ++------------------ pkg/R/deserialize.R | 59 ++++++++++++++++++---------- pkg/R/serialize.R | 72 ++++++++++++++++++++++------------ pkg/R/sparkRClient.R | 21 ++++++++++ 4 files changed, 112 insertions(+), 82 deletions(-) diff --git a/pkg/R/SparkRBackendInterface.R b/pkg/R/SparkRBackendInterface.R index bd76ac80a5d25..5802c9218490b 100644 --- a/pkg/R/SparkRBackendInterface.R +++ b/pkg/R/SparkRBackendInterface.R @@ -11,47 +11,13 @@ createSparkContext <- function( sparkEnvirMap=list(), sparkExecutorEnvMap=list()) { - if (!exists(".sparkRCon", .sparkREnv)) { - stop("No connection to backend found") - } - - conn <- get(".sparkRCon", .sparkREnv) - - rc <- rawConnection(raw(0), "r+") - writeString(rc, "createSparkContext") - writeString(rc, master) - writeString(rc, appName) - writeString(rc, sparkHome) - writeVector(rc, jars) - writeNamedList(rc, sparkEnvirMap) - writeNamedList(rc, sparkExecutorEnvMap) - - bytesToSend <- rawConnectionValue(rc) - writeInt(conn, length(bytesToSend)) - writeBin(bytesToSend, conn) - - returnStatus <- readInt(conn) - stopifnot(returnStatus == 0) - - appId <- readString(conn) - appId + # Find a way to pass hash map? + invokeJava("createSparkContext", master, appName, sparkHome, + jars, sparkEnvirMap, sparkExecutorEnvMap) } stopBackend <- function() { - if (!exists(".sparkRCon", .sparkREnv)) { - stop("No connection to backend found") - } - conn <- get(".sparkRCon", .sparkREnv) - - rc <- rawConnection(raw(0), "r+") - writeString(rc, "stopBackend") - - bytesToSend <- rawConnectionValue(rc) - writeInt(conn, length(bytesToSend)) - writeBin(bytesToSend, conn) - - returnStatus <- readInt(conn) - stopifnot(returnStatus == 0) + invokeJava("stopBackend") invisible(NULL) # Also close the connection and remove it from our env diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index df0380177a667..755f79d6c8c50 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -1,9 +1,16 @@ # Utility functions to serialize, deserialize etc. -readString <- function(con) { - stringLen <- readInt(con) - string <- readBin(con, raw(), stringLen, endian="big") - rawToChar(string) +readString <- function(con, num = 1) { + readSingleString <- function() { + stringLen <- readInt(con) + string <- readBin(con, raw(), stringLen, endian="big") + rawToChar(string) + } + if (num == 1) { + readSingleString + } else { + sapply(1:num, readSingleString) + } } readInt <- function(con, num = 1) { @@ -18,30 +25,42 @@ readBoolean <- function(con, num = 1) { as.logical(readInt(con, num)) } +readObject <- function(con, num = 1) { + # Read type first + type <- readString(con) + switch (type, + integer = readInt(con, num), + character = readString(con, num), + logical = readBoolean(con, num), + double = readDouble(con, num), + raw = readRawLen(con, num), + vector = readVector(con), + list = readList(con), + void = NULL, + stop("Unsupported type for deserialization")) +} + readVector <- function(con) { len <- readInt(con) - type <- readString(con) if (length > 0) { - if (type == "integer") { - out <- readInt(con, num=len) - } else if (type == "character") { - out <- sapply(1:len, function(x) { - readString(con) - }) - } else if (type == "logical") { - out <- readBoolean(con, num=len) - } else if (type == "double") { - out <- readDouble(con, num=len) - } else if (type == "raw") { - out <- readRawLen(con, len) - } else { - } - out + readObject(con, len) } else { vector(mode=type) } } +readList <- function(con) { + len <- readInt(con) + if (length > 0) { + l <- vector("list", len) + for (i in 1:len) { + l[[i]] <- readObject(con) + } + } else { + list() + } +} + readNamedList <- function(con) { len <- readInt(con) if (len > 0) { diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index 81175cd070c77..40af9e9e13dd8 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -1,59 +1,83 @@ # Utility functions to serialize, deserialize etc. -writeString <- function(con, value) { +writeString <- function(con, value, withType = FALSE) { + if (withType) { + writeString(con, typeof(value)) + } writeInt(con, as.integer(nchar(value) + 1)) writeBin(value, con, endian="big") } -writeInt <- function(con, value) { +writeInt <- function(con, value, withType = FALSE) { + if (withType) { + writeString(con, typeof(value)) + } writeBin(as.integer(value), con, endian="big") } -writeDouble <- function(con, value) { +writeDouble <- function(con, value, withType = FALSE) { + if (withType) { + writeString(con, typeof(value)) + } writeBin(value, con, endian="big") } -writeBoolean <- function(con, value) { +writeBoolean <- function(con, value, withType = FALSE) { + if (withType) { + writeString(con, typeof(value)) + } # TRUE becomes 1, FALSE becomes 0 writeInt(con, as.integer(value)) } -writeRaw <- function(con, batch, serialized = FALSE) { +writeRaw <- function(con, batch, serialized = FALSE, withType = FALSE) { if (serialized) { outputSer <- batch } else { outputSer <- serialize(batch, ascii = FALSE, conn = NULL) } + if (withType) { + writeString(con, typeof(outputSer)) + } writeInt(con, length(outputSer)) writeBin(outputSer, con, endian="big") } +writeObject <- function(con, object, withType = FALSE) { + switch(typeof(object), + integer = writeInt(con, object, withType), + character = writeString(con, object, withType), + logical = writeBoolean(con, object, withType), + double = writeDouble(con, object, withType), + raw = writeRaw(con, object, withType), + stop("Unsupported type for serialization")) +} + # Used to pass arrays -writeVector <- function(con, arr) { +writeVector <- function(con, arr, withType = FALSE) { if (!is.vector(arr) || typeof(arr) == "list") { stop("writeVector cannot be used for non-vectors or lists") } + if (withType) { + writeString(con, "vector") + } writeInt(con, length(arr)) writeString(con, typeof(arr)) if (length(arr) > 0) { - if (typeof(arr) == "integer") { - for (a in arr) { - writeInt(con, a) - } - } else if (typeof(arr) == "character") { - for (a in arr) { - writeString(con, a) - } - } else if (typeof(arr) == "logical") { - for (a in arr) { - writeBoolean(con, a) - } - } else if (typeof(arr) == "double") { - for (a in arr) { - writeDouble(con, a) - } - } else if (typeof(arr) == "raw") { - writeBin(con, arr, endian="big") + for (a in arr) { + writeObject(con, a) + } + } +} + +writeList <- function(con, list, withType = FALSE) { + if (withType) { + writeString(con, "list") + } + writeInt(con, length(list)) + if (length(list) > 0) { + for (a in list) { + writeObject(con, a, TRUE) } } } diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 9d683034324b2..091d6ba416e07 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -30,3 +30,24 @@ launchBackend <- function( cat("Launching java with command ", command, "\n") invisible(system(command, intern=FALSE, ignore.stdout=F, ignore.stderr=F, wait=F)) } + +invokeJava <- function(rpcName, ...) { + if (!exists(".sparkRCon", .sparkREnv)) { + stop("No connection to backend found") + } + + rc <- rawConnection(raw(0), "r+") + + writeString(rpcName) + writeList(list(...)) + + bytesToSend <- rawConnectionValue(rc) + conn <- get(".sparkRCon", .sparkREnv) + writeInt(conn, length(bytesToSend)) + writeBin(bytesToSend, conn) + + # TODO: check the status code to output error information + returnStatus <- readInt(conn) + stopifnot(returnStatus == 0) + readObject(conn) +} \ No newline at end of file From c8507d8e0f02539e5ba8588a2b679ed7c3a19e3a Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 12 Jan 2015 12:24:43 +0800 Subject: [PATCH 314/687] [SPARKR-165] IS_SCALAR is not present in R before 3.1 --- pkg/src/string_hash_code.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/src/string_hash_code.c b/pkg/src/string_hash_code.c index 1d562f9550773..831c863fcd276 100644 --- a/pkg/src/string_hash_code.c +++ b/pkg/src/string_hash_code.c @@ -7,6 +7,11 @@ #include #include +/* for compatibility with R before 3.1 */ +#ifndef IS_SCALAR +#define IS_SCALAR(x, type) (TYPEOF(x) == (type) && XLENGTH(x) == 1) +#endif + SEXP stringHashCode(SEXP string) { const char* str; R_xlen_t len, i; From 4f3870b169a18625b6e426914a269e2f4fe5a2c7 Mon Sep 17 00:00:00 2001 From: lythesia Date: Tue, 13 Jan 2015 10:22:51 +0800 Subject: [PATCH 315/687] add name,setName in RDD.R --- pkg/R/RDD.R | 50 ++++++++++++++++++++++++++++++++++++++++++++++ pkg/man/name.Rd | 27 +++++++++++++++++++++++++ pkg/man/setName.Rd | 33 ++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 pkg/man/name.Rd create mode 100644 pkg/man/setName.Rd diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index a91ce9045500e..7a5e0a604d106 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1844,3 +1844,53 @@ setMethod("cogroup", cogroup.rdd <- mapValues(groupByKey(union.rdd, numPartitions), group.func) }) + +# TODO: +# bind to env? +#' Return an RDD's name. +#' +#' @param rdd The RDD whose name is returned. +#' @rdname name +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1,2,3)) +#' name(rdd) # NULL (if not set before) +#'} +setGeneric("name", function(rdd) { standardGeneric("name") }) + +#' @rdname name +#' @aliases name,RDD +setMethod("name", + signature(rdd = "RDD"), + function(rdd) { + .jcall(getJRDD(rdd), "S", "name") + } +) + +#' Set an RDD's name. +#' +#' @param rdd The RDD whose name is returned +#' @param name The RDD name to be set. +#' @return a new RDD renamed. +#' @rdname setName +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1,2,3)) +#' setName(rdd, "myRDD") +#' name(rdd) # "myRDD" +#'} +setGeneric("setName", function(rdd, name) { standardGeneric("setName") }) + +#' @rdname setName +#' @aliases setName,RDD +setMethod("setName", + signature(rdd = "RDD", name = "character"), + function(rdd, name) { + .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", "setName", name) + rdd + } +) diff --git a/pkg/man/name.Rd b/pkg/man/name.Rd new file mode 100644 index 0000000000000..9206e02e80218 --- /dev/null +++ b/pkg/man/name.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{name} +\alias{name} +\alias{name,RDD} +\alias{name,RDD-method} +\title{Return an RDD's name.} +\usage{ +name(rdd) + +\S4method{name}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD whose name is returned.} +} +\description{ +Return an RDD's name. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1,2,3)) +name(rdd) # NULL (if not set before) +} +} + diff --git a/pkg/man/setName.Rd b/pkg/man/setName.Rd new file mode 100644 index 0000000000000..9d8ad85e640e8 --- /dev/null +++ b/pkg/man/setName.Rd @@ -0,0 +1,33 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{setName} +\alias{setName} +\alias{setName,RDD} +\alias{setName,RDD,character-method} +\title{Set an RDD's name.} +\usage{ +setName(rdd, name) + +\S4method{setName}{RDD,character}(rdd, name) +} +\arguments{ +\item{rdd}{The RDD whose name is returned} + +\item{name}{The RDD name to be set.} +} +\value{ +a new RDD renamed. +} +\description{ +Set an RDD's name. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1,2,3)) +setName(rdd, "myRDD") +name(rdd) # "myRDD" +} +} + From 5a53801c3b38b5f085d502426a60f77acec7747d Mon Sep 17 00:00:00 2001 From: lythesia Date: Wed, 14 Jan 2015 10:00:41 +0800 Subject: [PATCH 316/687] fix name,setName --- pkg/R/RDD.R | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 7a5e0a604d106..2fef1fef952e8 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1865,13 +1865,12 @@ setGeneric("name", function(rdd) { standardGeneric("name") }) setMethod("name", signature(rdd = "RDD"), function(rdd) { - .jcall(getJRDD(rdd), "S", "name") - } -) + .jcall(getJRDD(rdd), "Ljava/lang/String;", "name") + }) #' Set an RDD's name. #' -#' @param rdd The RDD whose name is returned +#' @param rdd The RDD whose name is to be set. #' @param name The RDD name to be set. #' @return a new RDD renamed. #' @rdname setName @@ -1892,5 +1891,4 @@ setMethod("setName", function(rdd, name) { .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", "setName", name) rdd - } -) + }) From 4715ed247e0cb0ef1ebe02c8622e5e5607b63100 Mon Sep 17 00:00:00 2001 From: Yi Lu Date: Wed, 14 Jan 2015 10:19:44 +0800 Subject: [PATCH 317/687] Update RDD.R detailed TODO about `name`, `setName` --- pkg/R/RDD.R | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 2fef1fef952e8..366758e6e27e8 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1845,8 +1845,7 @@ setMethod("cogroup", group.func) }) -# TODO: -# bind to env? +# TODO: Consider caching the name in the RDD's environment #' Return an RDD's name. #' #' @param rdd The RDD whose name is returned. From 7f8cd828fb5fedf7a59fd0bcb94356f19cfd68bc Mon Sep 17 00:00:00 2001 From: lythesia Date: Wed, 14 Jan 2015 13:46:10 +0800 Subject: [PATCH 318/687] update man --- pkg/man/setName.Rd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/man/setName.Rd b/pkg/man/setName.Rd index 9d8ad85e640e8..2c94055e48fa2 100644 --- a/pkg/man/setName.Rd +++ b/pkg/man/setName.Rd @@ -12,7 +12,7 @@ setName(rdd, name) \S4method{setName}{RDD,character}(rdd, name) } \arguments{ -\item{rdd}{The RDD whose name is returned} +\item{rdd}{The RDD whose name is to be set.} \item{name}{The RDD name to be set.} } From e071d3eb6193d60bdf9d9609a96bdfd1f9bdf506 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 18 Jan 2015 17:43:50 -0800 Subject: [PATCH 319/687] Change SparkRBackend to use general method calls This change uses a custom protocl + JNI to invoke any method on a given object type. Also update serializers, deserializers to make code more concise --- BACKEND.md | 13 +- pkg/R/SparkRBackendInterface.R | 26 --- pkg/R/deserialize.R | 69 +++----- pkg/R/serialize.R | 127 ++++++-------- pkg/R/sparkRBackend.R | 59 +++++++ pkg/R/sparkRClient.R | 21 --- pkg/inst/worker/worker.R | 4 +- .../cs/amplab/sparkr/SerializeJavaR.scala | 164 +++++++++++++++--- .../cs/amplab/sparkr/SparkRBackend.scala | 3 +- .../amplab/sparkr/SparkRBackendHandler.scala | 104 ++++++++--- .../sparkr/SparkRBackendInterface.scala | 23 --- .../sparkr/SparkRBackendInterfaceImpl.scala | 32 ---- 12 files changed, 367 insertions(+), 278 deletions(-) delete mode 100644 pkg/R/SparkRBackendInterface.R create mode 100644 pkg/R/sparkRBackend.R delete mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterface.scala delete mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterfaceImpl.scala diff --git a/BACKEND.md b/BACKEND.md index 8277a1523e4b7..867f3b6fd6619 100644 --- a/BACKEND.md +++ b/BACKEND.md @@ -24,9 +24,20 @@ Future work library(SparkR, lib.loc="./lib") SparkR:::launchBackend("./pkg/src/target/scala-2.10/sparkr-assembly-0.1.jar", "edu.berkeley.cs.amplab.sparkr.SparkRBackend", "12345") +Sys.sleep(5) con <- SparkR:::init("localhost", 12345) s <- SparkR:::createSparkContext("local", "SparkRJavaExpt", "", - c("./pkg/src/target/scala-2.10/sparkr-assembly-0.1.jar")) + list("./pkg/src/target/scala-2.10/sparkr-assembly-0.1.jar")) + +# TextFile, cache, count +jrdd <- SparkR:::invokeJava(FALSE, s, "textFile", "README.md", 2L) +jl <- SparkR:::invokeJava(FALSE, jrdd, "count") # Should be 128 +jrddCached <- SparkR:::invokeJava(FALSE, jrdd, "cache") +jl <- SparkR:::invokeJava(FALSE, jrdd, "count") # Should show up on WebUI now + +# Try out .jnew like call +hp <- SparkR:::invokeJava(TRUE, "org.apache.spark.HashPartitioner", "new", 2L) + # You should be able to go to localhost:4041 and see a SparkRJavaExpt as the app name ``` ~ diff --git a/pkg/R/SparkRBackendInterface.R b/pkg/R/SparkRBackendInterface.R deleted file mode 100644 index 5802c9218490b..0000000000000 --- a/pkg/R/SparkRBackendInterface.R +++ /dev/null @@ -1,26 +0,0 @@ -# -# Definitions of methods implemented by SparkRBackend -# Corresponding Java definition found in SparkRBackendInterface.scala -# - -createSparkContext <- function( - master, - appName, - sparkHome, - jars, - sparkEnvirMap=list(), - sparkExecutorEnvMap=list()) { - - # Find a way to pass hash map? - invokeJava("createSparkContext", master, appName, sparkHome, - jars, sparkEnvirMap, sparkExecutorEnvMap) -} - -stopBackend <- function() { - invokeJava("stopBackend") - invisible(NULL) - - # Also close the connection and remove it from our env - close(conn) - rm(".sparkRCon", envir=.sparkREnv) -} diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index 755f79d6c8c50..2c128c0fab7d0 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -1,82 +1,69 @@ # Utility functions to serialize, deserialize etc. -readString <- function(con, num = 1) { - readSingleString <- function() { - stringLen <- readInt(con) - string <- readBin(con, raw(), stringLen, endian="big") - rawToChar(string) - } - if (num == 1) { - readSingleString - } else { - sapply(1:num, readSingleString) - } +readString <- function(con) { + stringLen <- readInt(con) + string <- readBin(con, raw(), stringLen, endian="big") + rawToChar(string) } -readInt <- function(con, num = 1) { - readBin(con, integer(), n = num, endian="big") +readInt <- function(con) { + readBin(con, integer(), n = 1, endian="big") } -readDouble <- function(con, num = 1) { - readBin(con, double(), n = num, endian="big") +readDouble <- function(con) { + readBin(con, double(), n = 1, endian="big") } -readBoolean <- function(con, num = 1) { - as.logical(readInt(con, num)) +readBoolean <- function(con) { + as.logical(readInt(con)) } -readObject <- function(con, num = 1) { +readObject <- function(con) { # Read type first type <- readString(con) + readObjectType(con, type) +} + +readObjectType <- function(con, type) { switch (type, - integer = readInt(con, num), - character = readString(con, num), - logical = readBoolean(con, num), - double = readDouble(con, num), - raw = readRawLen(con, num), + integer = readInt(con), + character = readString(con), + logical = readBoolean(con), + double = readDouble(con), + raw = readRaw(con), vector = readVector(con), list = readList(con), void = NULL, + jobj = jobj(readString(con)), stop("Unsupported type for deserialization")) } +# TODO: We don't use readVector as it is tricky +# to assembly array of raw objects. Delete this ? readVector <- function(con) { + type <- readString(con) len <- readInt(con) if (length > 0) { - readObject(con, len) + sapply(1:len, readObjectType(con, type)) } else { vector(mode=type) } } +# We only support lists where all elements are of same type readList <- function(con) { + type <- readString(con) len <- readInt(con) if (length > 0) { l <- vector("list", len) for (i in 1:len) { - l[[i]] <- readObject(con) + l[[i]] <- readObjectType(con, type) } } else { list() } } -readNamedList <- function(con) { - len <- readInt(con) - if (len > 0) { - # TODO: This is not used ? - elemType <- readString(con) - names <- readVector(con) - vals <- readVector(con) - - out <- as.list(vals) - names(out) <- names - out - } else { - list() - } -} - readRaw <- function(con) { dataLen <- readInt(con) data <- readBin(con, raw(), as.integer(dataLen), endian="big") diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index 40af9e9e13dd8..eb32c327bb5da 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -1,114 +1,87 @@ # Utility functions to serialize, deserialize etc. -writeString <- function(con, value, withType = FALSE) { - if (withType) { - writeString(con, typeof(value)) - } +writeString <- function(con, value) { writeInt(con, as.integer(nchar(value) + 1)) writeBin(value, con, endian="big") } -writeInt <- function(con, value, withType = FALSE) { - if (withType) { - writeString(con, typeof(value)) - } +writeInt <- function(con, value) { writeBin(as.integer(value), con, endian="big") } -writeDouble <- function(con, value, withType = FALSE) { - if (withType) { - writeString(con, typeof(value)) - } +writeDouble <- function(con, value) { writeBin(value, con, endian="big") } -writeBoolean <- function(con, value, withType = FALSE) { - if (withType) { - writeString(con, typeof(value)) - } +writeBoolean <- function(con, value) { # TRUE becomes 1, FALSE becomes 0 writeInt(con, as.integer(value)) } -writeRaw <- function(con, batch, serialized = FALSE, withType = FALSE) { - if (serialized) { - outputSer <- batch - } else { - outputSer <- serialize(batch, ascii = FALSE, conn = NULL) - } - if (withType) { - writeString(con, typeof(outputSer)) - } - writeInt(con, length(outputSer)) - writeBin(outputSer, con, endian="big") +writeRawSerialize <- function(con, batch) { + outputSer <- serialize(batch, ascii = FALSE, conn = NULL) + writeRaw(con, outputSer) } -writeObject <- function(con, object, withType = FALSE) { - switch(typeof(object), - integer = writeInt(con, object, withType), - character = writeString(con, object, withType), - logical = writeBoolean(con, object, withType), - double = writeDouble(con, object, withType), - raw = writeRaw(con, object, withType), - stop("Unsupported type for serialization")) +writeRaw <- function(con, batch) { + writeInt(con, length(batch)) + writeBin(batch, con, endian="big") } -# Used to pass arrays -writeVector <- function(con, arr, withType = FALSE) { - if (!is.vector(arr) || typeof(arr) == "list") { - stop("writeVector cannot be used for non-vectors or lists") - } +writeObject <- function(con, object, withType = TRUE) { + # In R vectors have same type as objects. So check if this is a vector + # and if so just call writeVector + # TODO: Should we just throw an exception here instead ? if (withType) { - writeString(con, "vector") - } - writeInt(con, length(arr)) - writeString(con, typeof(arr)) - if (length(arr) > 0) { - for (a in arr) { - writeObject(con, a) - } + writeString(con, class(object)) } + switch(class(object), + integer = writeInt(con, object), + character = writeString(con, object), + logical = writeBoolean(con, object), + double = writeDouble(con, object), + raw = writeRaw(con, object), + list = writeList(con, object), + jobj = writeString(con, object$id), + environment = writeEnv(con, object), + stop("Unsupported type for serialization")) } -writeList <- function(con, list, withType = FALSE) { - if (withType) { - writeString(con, "list") - } - writeInt(con, length(list)) - if (length(list) > 0) { - for (a in list) { - writeObject(con, a, TRUE) +# Used to pass arrays +writeList <- function(con, arr) { + # All elements should be of same type + elemType <- unique(sapply(arr, function(elem) { class(elem) })) + stopifnot(length(elemType) <= 1) + + writeString(con, elemType) + writeInt(con, length(arr)) + + if (length(arr) > 0) { + for (a in arr) { + writeObject(con, a, FALSE) } } } -# Used to pass named lists as hash maps +# Used to pass named lists as hash maps and lists as vectors +# +# We don't support pass in heterogenous lists. # Note that all the elements of the list should be of same type -writeNamedList <- function(con, namedlist) { - len <- length(namedlist) +writeEnv <- function(con, env) { + len <- length(env) + writeInt(con, len) if (len > 0) { - # All elements should be of same type - elemType <- unique(sapply(namedlist, function(elem) { typeof(elem) })) - stopifnot(length(elemType) == 1) - - writeString(con, elemType) - names <- names(namedlist) - - writeVector(con, names) - writeVector(con, unlist(namedlist, use.names=F, recursive=F)) + writeList(con, as.list(ls(env))) + vals <- lapply(ls(env), function(x) { env[[x]] }) + writeList(con, as.list(vals)) } } -# Used for writing out a hashed-by-key pairwise RDD. -writeEnvironment <- function(con, e, keyValPairsSerialized = TRUE) { - writeInt(con, length(e)) - for (bucketNum in ls(e)) { - writeInt(con, bucketNum) - writeInt(con, length(e[[bucketNum]])) - for (tuple in e[[bucketNum]]) { - writeRaw(con, tuple[[1]], keyValPairsSerialized) - writeRaw(con, tuple[[2]], keyValPairsSerialized) +writeArgs <- function(con, args) { + if (length(args) > 0) { + for (a in args) { + writeObject(con, a) } } } diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R new file mode 100644 index 0000000000000..78500389454cc --- /dev/null +++ b/pkg/R/sparkRBackend.R @@ -0,0 +1,59 @@ +# Methods to call into SparkRBackend. +# + +createSparkContext <- function( + master, + appName, + sparkHome, + jars=list(), + sparkEnvirMap=new.env(), + sparkExecutorEnvMap=new.env()) { + + invokeJava( + isStatic=TRUE, + objId="edu.berkeley.cs.amplab.sparkr.RRDD", + methodName="createSparkContext", + master, appName, sparkHome, jars, sparkEnvirMap, sparkExecutorEnvMap) +} + +stopBackend <- function() { + invokeJava(TRUE, "SparkRHandler", "stopBackend") + + # Also close the connection and remove it from our env + conn <- get(".sparkRCon", .sparkREnv) + close(conn) + rm(".sparkRCon", envir=.sparkREnv) +} + +# if isStatic is true, objId contains className +invokeJava <- function(isStatic, objId, methodName, ...) { + if (!exists(".sparkRCon", .sparkREnv)) { + stop("No connection to backend found") + } + + rc <- rawConnection(raw(0), "r+") + + writeBoolean(rc, isStatic) + # Write object id as string if it is static + # else check if its a jobj and write its id + if (isStatic) { + writeString(rc, objId) + } else { + stopifnot(class(objId) == "jobj") + writeString(rc, objId$id) + } + writeString(rc, methodName) + + #writeString(rpcName) + writeArgs(rc, list(...)) + + bytesToSend <- rawConnectionValue(rc) + conn <- get(".sparkRCon", .sparkREnv) + writeInt(conn, length(bytesToSend)) + writeBin(bytesToSend, conn) + + # TODO: check the status code to output error information + returnStatus <- readInt(conn) + stopifnot(returnStatus == 0) + readObject(conn) +} diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 091d6ba416e07..9d683034324b2 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -30,24 +30,3 @@ launchBackend <- function( cat("Launching java with command ", command, "\n") invisible(system(command, intern=FALSE, ignore.stdout=F, ignore.stderr=F, wait=F)) } - -invokeJava <- function(rpcName, ...) { - if (!exists(".sparkRCon", .sparkREnv)) { - stop("No connection to backend found") - } - - rc <- rawConnection(raw(0), "r+") - - writeString(rpcName) - writeList(list(...)) - - bytesToSend <- rawConnectionValue(rc) - conn <- get(".sparkRCon", .sparkREnv) - writeInt(conn, length(bytesToSend)) - writeBin(bytesToSend, conn) - - # TODO: check the status code to output error information - returnStatus <- readInt(conn) - stopifnot(returnStatus == 0) - readObject(conn) -} \ No newline at end of file diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 2a5b756b8b2e3..80e3c116aed51 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -93,7 +93,7 @@ if (isEmpty != 0) { } output <- do.call(execFunctionName, list(splitIndex, data)) if (isOutputSerialized) { - writeRaw(outputCon, output) + writeRawSerialize(outputCon, output) } else { writeStrings(outputCon, output) } @@ -128,7 +128,7 @@ if (isEmpty != 0) { writeInt(outputCon, as.integer(name)) # Truncate the accumulator list to the number of elements we have length(res[[name]]$data) <- res[[name]]$counter - writeRaw(outputCon, res[[name]]$data) + writeRawSerialize(outputCon, res[[name]]$data) } } } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 7fc815dabbaaf..31806470cb103 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -1,10 +1,53 @@ package edu.berkeley.cs.amplab.sparkr +import scala.collection.mutable.HashMap +import scala.collection.JavaConversions._ + import java.io.DataInputStream import java.io.DataOutputStream object SerializeJavaR { + def readObject(dis: DataInputStream, objMap: HashMap[String, Object]): Object = { + val dataType = readString(dis) + println("reading object of type " + dataType) + readObjectType(dis, objMap, dataType) + } + + def readObjectType( + dis: DataInputStream, + objMap: HashMap[String, Object], + dataType: String): Object = { + dataType match { + case "integer" => new java.lang.Integer(readInt(dis)) + case "double" => new java.lang.Double(readDouble(dis)) + case "logical" => new java.lang.Boolean(readBoolean(dis)) + case "character" => readString(dis) + case "environment" => readMap(dis, objMap) + case "raw" => readBytes(dis) + case "list" => { + val arrType = readString(dis) + arrType match { + case "integer" => readIntArr(dis) + case "character" => readStringArr(dis) + case "double" => readDoubleArr(dis) + case "logical" => readBooleanArr(dis) + case "jobj" => readStringArr(dis).map(x => objMap(x)) + case "raw" => readBytesArr(dis) + } + } + case "jobj" => objMap(readString(dis)) + } + } + + def readBytes(in: DataInputStream) = { + val len = readInt(in) + val out = new Array[Byte](len) + val bytesRead = in.read(out, 0, len) + assert(len == bytesRead) + out + } + def readInt(in: DataInputStream) = { in.readInt() } @@ -25,43 +68,113 @@ object SerializeJavaR { if (intVal == 0) false else true } + def readBytesArr(in: DataInputStream) = { + val len = readInt(in) + (0 until len).map(_ => readBytes(in)).toArray + } + def readIntArr(in: DataInputStream) = { val len = readInt(in) - val typeStr = readString(in) - assert(typeStr == "integer") (0 until len).map(_ => readInt(in)).toArray } def readDoubleArr(in: DataInputStream) = { val len = readInt(in) - val typeStr = readString(in) - assert(typeStr == "double") (0 until len).map(_ => readDouble(in)).toArray } def readBooleanArr(in: DataInputStream) = { val len = readInt(in) - val typeStr = readString(in) - assert(typeStr == "logical") (0 until len).map(_ => readBoolean(in)).toArray } def readStringArr(in: DataInputStream) = { val len = readInt(in) - val typeStr = readString(in) - assert(typeStr == "character") (0 until len).map(_ => readString(in)).toArray } - def readStringMap(in: DataInputStream) = { + def readMap( + in: DataInputStream, + objMap: HashMap[String, Object]): java.util.Map[Object, Object] = { val len = readInt(in) if (len > 0) { val typeStr = readString(in) - assert(typeStr == "character") + val keys = (0 until len).map(_ => readObjectType(in, objMap, typeStr)) + val valuesType = readString(in) + val values = (0 until len).map(_ => readObjectType(in, objMap, typeStr)) + mapAsJavaMap(keys.zip(values).toMap) + } else { + new java.util.HashMap[Object, Object]() + } + } + + /// Methods to write out data from Java to R + + def writeObject(dos: DataOutputStream, value: Object, objMap: HashMap[String, Object]) { + value.getClass.getName match { + case "void" => { + writeString(dos, "void") + } + case "java.lang.String" => { + writeString(dos, "character") + writeString(dos, value.asInstanceOf[String]) + } + case "long" | "java.lang.Long" => { + writeString(dos, "double") + writeDouble(dos, value.asInstanceOf[Long].toDouble) + } + case "double" | "java.lang.Double" => { + writeString(dos, "double") + writeDouble(dos, value.asInstanceOf[Double]) + } + case "int" | "java.lang.Integer" => { + writeString(dos, "integer") + writeInt(dos, value.asInstanceOf[Int]) + } + case "boolean" | "java.lang.Boolean" => { + writeString(dos, "logical") + writeBoolean(dos, value.asInstanceOf[Boolean]) + } + case "[B" => { + writeString(dos, "raw") + writeBytes(dos, value.asInstanceOf[Array[Byte]]) + } + // TODO: Types not handled right now include + // byte, char, short, float + + // Handle arrays + case "[Ljava.lang.String;" => { + writeString(dos, "list") + writeStringArr(dos, value.asInstanceOf[Array[String]]) + } + case "[I" => { + writeString(dos, "list") + writeIntArr(dos, value.asInstanceOf[Array[Int]]) + } + case "[L" => { + writeString(dos, "list") + writeDoubleArr(dos, value.asInstanceOf[Array[Long]].map(_.toDouble)) + } + case "[D" => { + writeString(dos, "list") + writeDoubleArr(dos, value.asInstanceOf[Array[Double]]) + } + case "[Z" => { + writeString(dos, "list") + writeBooleanArr(dos, value.asInstanceOf[Array[Boolean]]) + } + case "[[B" => { + writeString(dos, "list") + writeBytesArr(dos, value.asInstanceOf[Array[Array[Byte]]]) + } + case _ => { + val objId = value.getClass().getName() + "@" + + Integer.toHexString(System.identityHashCode(value)) + objMap.put(objId, value) + writeString(dos, "jobj") + writeString(dos, objId) + } } - val keys = (0 until len).map(_ => readString(in)) - val values = (0 until len).map(_ => readString(in)) - keys.zip(values).toMap } def writeInt(out: DataOutputStream, value: Int) { @@ -85,37 +198,38 @@ object SerializeJavaR { out.writeByte(0) } - def writeIntArr(out: DataOutputStream, value: Array[Int]) { + def writeBytes(out: DataOutputStream, value: Array[Byte]) { out.writeInt(value.length) + out.write(value) + } + + def writeIntArr(out: DataOutputStream, value: Array[Int]) { writeString(out, "integer") + out.writeInt(value.length) value.foreach(v => out.writeInt(v)) } def writeDoubleArr(out: DataOutputStream, value: Array[Double]) { - out.writeInt(value.length) writeString(out, "double") + out.writeInt(value.length) value.foreach(v => out.writeDouble(v)) } def writeBooleanArr(out: DataOutputStream, value: Array[Boolean]) { - out.writeInt(value.length) writeString(out, "logical") + out.writeInt(value.length) value.foreach(v => writeBoolean(out, v)) } def writeStringArr(out: DataOutputStream, value: Array[String]) { - out.writeInt(value.length) writeString(out, "character") + out.writeInt(value.length) value.foreach(v => writeString(out, v)) } - def writeStringMap(out: DataOutputStream, value: Map[String, String]) { - out.writeInt(value.size) - if (value.size > 0) { - writeString(out, "character") - // TODO: Make writeStringArr work on Iterable ? - writeStringArr(out, value.keys.toArray) - writeStringArr(out, value.values.toArray) - } + def writeBytesArr(out: DataOutputStream, value: Array[Array[Byte]]) { + writeString(out, "raw") + out.writeInt(value.length) + value.foreach(v => writeBytes(out, v)) } } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index aad710d668662..907f6009a532b 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -28,8 +28,7 @@ class SparkRBackend() { def init(port: Int) { bossGroup = new NioEventLoopGroup(SparkRConf.numServerThreads) val workerGroup = bossGroup - val backendImpl = new SparkRBackendInterfaceImpl - val handler = new SparkRBackendHandler(backendImpl, this) + val handler = new SparkRBackendHandler(this) bootstrap = new ServerBootstrap() .group(bossGroup, workerGroup) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 45f15c7decd37..8532e06ced9bc 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -1,5 +1,6 @@ package edu.berkeley.cs.amplab.sparkr +import scala.collection.mutable.HashMap import java.io._ import io.netty.channel.ChannelHandler.Sharable @@ -10,9 +11,13 @@ import edu.berkeley.cs.amplab.sparkr.SerializeJavaR._ /** * Handler for SparkRBackend + * TODO: This is marked as sharable to get a handle to SparkRBackend. Is it safe to re-use + * this across connections ? */ -class SparkRBackendHandler(backend: SparkRBackendInterface, server: SparkRBackend) - extends SimpleChannelInboundHandler[Array[Byte]] { +@Sharable +class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHandler[Array[Byte]] { + + val objMap = new HashMap[String, Object] override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { val bis = new ByteArrayInputStream(msg) @@ -21,20 +26,27 @@ class SparkRBackendHandler(backend: SparkRBackendInterface, server: SparkRBacken val bos = new ByteArrayOutputStream() val dos = new DataOutputStream(bos) - // Read the RPC name first and then pass on the DataInputStream to - // each handle function - val rpcName = readString(dis) + // First bit is isStatic + val isStatic = readBoolean(dis) + val objId = readString(dis) + val methodName = readString(dis) - System.err.println(s"Handling $rpcName") + System.err.println(s"Handling $methodName on $objId") - rpcName match { - case "createSparkContext" => handleCreateSparkContext(dis, dos) - case "stopBackend" => { - dos.write(0) - server.close() + if (objId == "SparkRHandler") { + methodName match { + case "stopBackend" => { + // dos.write(0) + writeInt(dos, 0) + writeString(dos, "character") + writeString(dos, "void") + server.close() + } + case _ => dos.writeInt(-1) } - case _ => dos.writeInt(-1) - } + } else { + handleMethodCall(isStatic, objId, methodName, dis, dos) + } val reply = bos.toByteArray ctx.write(reply) @@ -50,27 +62,63 @@ class SparkRBackendHandler(backend: SparkRBackendInterface, server: SparkRBacken ctx.close() } - // Handler functions read arguments off the DataInputStream and - // call the backend. - def handleCreateSparkContext(dis: DataInputStream, dos: DataOutputStream) = { + def handleMethodCall(isStatic: Boolean, objId: String, methodName: String, + dis: DataInputStream, dos: DataOutputStream) { + + var obj: Object = null + var cls: Option[Class[_]] = None try { - val master = readString(dis) - val appName = readString(dis) - val sparkHome = readString(dis) - val jars = readStringArr(dis) - val sparkEnvirMap = readStringMap(dis) - val sparkExecutorEnvMap = readStringMap(dis) - val appId = backend.createSparkContext(master, appName, sparkHome, jars, sparkEnvirMap, - sparkExecutorEnvMap) - - writeInt(dos, 0) - writeString(dos, appId) + if (isStatic) { + cls = Some(Class.forName(objId)) + } else { + objMap.get(objId) match { + case None => throw new IllegalArgumentException("Object not found " + objId) + case Some(o) => { + cls = Some(o.getClass) + obj = o + } + } + } + + val methods = cls.get.getMethods() + // TODO: We only use first method with the same name + val selectedMethods = methods.filter(m => m.getName() == methodName) + if (selectedMethods.length > 0) { + val selectedMethod = selectedMethods.head + val argTypes = selectedMethod.getParameterTypes() + val args = parseArgs(argTypes, dis) + val ret = selectedMethod.invoke(obj, args:_*) + + // Write status bit + writeInt(dos, 0) + writeObject(dos, ret.asInstanceOf[AnyRef], objMap) + } else if (methodName == "new") { + // methodName should be "new" for constructor + // TODO: We only use the first constructor ? + val ctor = cls.get.getConstructors().head + val argTypes = ctor.getParameterTypes() + val params = parseArgs(argTypes, dis) + val obj = ctor.newInstance(params:_*) + + writeInt(dos, 0) + writeObject(dos, obj.asInstanceOf[AnyRef], objMap) + } else { + throw new IllegalArgumentException("invalid method " + methodName + " for object " + objId) + } } catch { case e: Exception => { - System.err.println("handleCreateSparkContext failed with " + e) + System.err.println(s"$methodName on $objId failed with " + e) + e.printStackTrace() writeInt(dos, -1) } } } + def parseArgs(argTypes: Array[Class[_]], dis: DataInputStream): Array[java.lang.Object] = { + // TODO: Check each parameter type to the R provided type + argTypes.map { arg => + readObject(dis, objMap) + }.toArray + } + } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterface.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterface.scala deleted file mode 100644 index 2abfcdfb26f51..0000000000000 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterface.scala +++ /dev/null @@ -1,23 +0,0 @@ -package edu.berkeley.cs.amplab.sparkr - -// Definitions of methods implemented by SparkRBackend -// Corresponding definition found in SparkRBackendInterface.R -// -// NOTE: If you change any method here, you will need to change the -// corresponding one in SparkRBackendInterface.R -trait SparkRBackendInterface { - - /** - * Create a Spark Context - * - * @return String the applicationId corresponding to this SparkContext - * - */ - def createSparkContext(master: String, appName: String, sparkHome: String, - jars: Array[String], sparkEnvirMap: Map[String, String], - sparkExecutorEnvMap: Map[String, String]): String - - // def saveAsTextFile(rdd: Int, path: String): Int - - // def saveAsObjectFile(rdd: Int, path: String): Int -} diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterfaceImpl.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterfaceImpl.scala deleted file mode 100644 index a9e8094c26021..0000000000000 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendInterfaceImpl.scala +++ /dev/null @@ -1,32 +0,0 @@ -package edu.berkeley.cs.amplab.sparkr - -import scala.collection.mutable.HashMap -import scala.collection.JavaConversions._ - -import org.apache.spark.{SparkEnv, Partition, SparkException, TaskContext, SparkContext} -import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} -import org.apache.spark.broadcast.Broadcast -import org.apache.spark.rdd.RDD - -class SparkRBackendInterfaceImpl extends SparkRBackendInterface { - - var sc: Option[SparkContext] = None - val rddMap = new HashMap[Int, RDD[_]] - - override def createSparkContext(master: String, appName: String, sparkHome: String, - jars: Array[String], sparkEnvirMap: Map[String, String], - sparkExecutorEnvMap: Map[String, String]): String = { - - // TODO: create a version of createSparkContext that works with Map[String, String] - sc = Some(RRDD.createSparkContext(master, appName, sparkHome, jars, - sparkEnvirMap.asInstanceOf[Map[Object, Object]], - sparkExecutorEnvMap.asInstanceOf[Map[Object, Object]])) - - // TODO: can't get applicationId in Spark 1.1 ? - sc.get.hashCode.toString - } - - // - //override def createRRDD(): Int = { - //} -} From 5a97ea46437f548334fcb89214cfd52f2e299eb0 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 18 Jan 2015 17:58:37 -0800 Subject: [PATCH 320/687] Add jobj S3 class that holds backend refs --- pkg/R/jobj.R | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 pkg/R/jobj.R diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R new file mode 100644 index 0000000000000..f053a2c08d504 --- /dev/null +++ b/pkg/R/jobj.R @@ -0,0 +1,7 @@ +# jobj.R +# Handler for a java object that exists on the backend. + +jobj <- function(objId) { + if (!is.character(objId)) stop("object id must be a character") + structure(list(id=objId), class = "jobj") +} From 9de49b7d04ae5d38b55ed67e4942b67ac38d0efc Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 18 Jan 2015 18:28:28 -0800 Subject: [PATCH 321/687] Add high level calls for methods, constructors Also update BACKEND.md --- BACKEND.md | 23 ++++++++++--------- pkg/R/serialize.R | 1 + pkg/R/sparkRBackend.R | 17 ++++++++++++-- .../cs/amplab/sparkr/SerializeJavaR.scala | 3 +-- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/BACKEND.md b/BACKEND.md index 867f3b6fd6619..512b2582d9e49 100644 --- a/BACKEND.md +++ b/BACKEND.md @@ -1,17 +1,11 @@ ### Notes and TODOs for SparkR Backend -- Add a stop backend command. This should be called when the R process exits. - The Java program doesn't stop right now ! - Handle stderr, stdout of Java program better. We shouldn't probably put them on the shell, but we need some way for users to look at the messages. - Send back the reply length as the first field in the reply. Enforce somehow that the second field should be the error code. Also we should add support to capture exceptions and send them in the reply. -- Consider auto parsing all the arguments to RPCs on the R side - i.e. take something like list(...) and serialize each argument. -- Consider using reflection on the Java side instead of explicit handlers - Future work - Can we refactor the serializers to have a more visitor-like pattern ? That will enable serializing UDFs etc. from R to Java and back. @@ -30,13 +24,20 @@ s <- SparkR:::createSparkContext("local", "SparkRJavaExpt", "", list("./pkg/src/target/scala-2.10/sparkr-assembly-0.1.jar")) # TextFile, cache, count -jrdd <- SparkR:::invokeJava(FALSE, s, "textFile", "README.md", 2L) -jl <- SparkR:::invokeJava(FALSE, jrdd, "count") # Should be 128 -jrddCached <- SparkR:::invokeJava(FALSE, jrdd, "cache") -jl <- SparkR:::invokeJava(FALSE, jrdd, "count") # Should show up on WebUI now +jrdd <- SparkR:::callJMethod(s, "textFile", "README.md", 2L) +jl <- SparkR:::callJMethod(jrdd, "count") # Should be 128 +jrddCached <- SparkR:::callJMethod(jrdd, "cache") +jl <- SparkR:::callJMethod(jrdd, "count") # Should show up on WebUI now # Try out .jnew like call -hp <- SparkR:::invokeJava(TRUE, "org.apache.spark.HashPartitioner", "new", 2L) +hp <- SparkR:::newJava("org.apache.spark.HashPartitioner", 2L) + +# Try out collect in steps +crs <- SparkR:::callJMethod(jrdd, "collect") +SparkR:::callJMethod(crs, "get", 2L) + +# Stop backend +SparkR:::stopBackend() # You should be able to go to localhost:4041 and see a SparkRJavaExpt as the app name ``` diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index eb32c327bb5da..ae92e3ec6e109 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -40,6 +40,7 @@ writeObject <- function(con, object, withType = TRUE) { character = writeString(con, object), logical = writeBoolean(con, object), double = writeDouble(con, object), + numeric = writeDouble(con, object), raw = writeRaw(con, object), list = writeList(con, object), jobj = writeString(con, object$id), diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index 78500389454cc..da70f17db94f3 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -25,7 +25,21 @@ stopBackend <- function() { rm(".sparkRCon", envir=.sparkREnv) } -# if isStatic is true, objId contains className +callJMethod <- function(objId, methodName, ...) { + stopifnot(class(objId) == "jobj") + invokeJava(isStatic=FALSE, objId, methodName, ...) +} + +callJStatic <- function(className, methodName, ...) { + invokeJava(isStatic=TRUE, className, methodName, ...) +} + +newJava <- function(className, ...) { + invokeJava(isStatic=TRUE, className, methodName="new", ...) +} + +# If isStatic is true, objId contains className otherwise +# it should contain a jobj returned previously by the backend invokeJava <- function(isStatic, objId, methodName, ...) { if (!exists(".sparkRCon", .sparkREnv)) { stop("No connection to backend found") @@ -39,7 +53,6 @@ invokeJava <- function(isStatic, objId, methodName, ...) { if (isStatic) { writeString(rc, objId) } else { - stopifnot(class(objId) == "jobj") writeString(rc, objId$id) } writeString(rc, methodName) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 31806470cb103..fe671de2ccb97 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -10,7 +10,6 @@ object SerializeJavaR { def readObject(dis: DataInputStream, objMap: HashMap[String, Object]): Object = { val dataType = readString(dis) - println("reading object of type " + dataType) readObjectType(dis, objMap, dataType) } @@ -20,7 +19,7 @@ object SerializeJavaR { dataType: String): Object = { dataType match { case "integer" => new java.lang.Integer(readInt(dis)) - case "double" => new java.lang.Double(readDouble(dis)) + case "numeric" | "double" => new java.lang.Double(readDouble(dis)) case "logical" => new java.lang.Boolean(readBoolean(dis)) case "character" => readString(dis) case "environment" => readMap(dis, objMap) From cd08beefd82d9a144ca12589f8fe5538b1bcfb2f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 18 Jan 2015 23:35:19 -0800 Subject: [PATCH 322/687] Update all functions to use new backend All unit tests pass. --- pkg/DESCRIPTION | 1 - pkg/NAMESPACE | 1 + pkg/R/RDD.R | 187 ++++++++---------- pkg/R/context.R | 34 +--- pkg/R/deserialize.R | 3 +- pkg/R/jobj.R | 6 - pkg/R/serialize.R | 9 + pkg/R/sparkR.R | 43 ++-- pkg/R/sparkRBackend.R | 10 +- pkg/R/utils.R | 79 +++----- pkg/inst/tests/test_parallelize_collect.R | 4 +- pkg/inst/tests/test_utils.R | 4 +- pkg/inst/worker/worker.R | 50 ++--- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 12 +- .../cs/amplab/sparkr/SerializeJavaR.scala | 172 +++++++++------- .../amplab/sparkr/SparkRBackendHandler.scala | 17 +- 16 files changed, 316 insertions(+), 316 deletions(-) diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 27b07cc054dbe..e881c4e2ad0b7 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -8,7 +8,6 @@ Maintainer: Shivaram Venkataraman Depends: R (>= 3.0), methods, - rJava Suggests: testthat Description: R frontend for Spark diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index df88bb3cffdee..aa120566967a5 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -64,4 +64,5 @@ export( "setCheckpointDir" ) export("sparkR.init") +export("jobj") useDynLib(SparkR, stringHashCode) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index a91ce9045500e..ef36548d86c75 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1,6 +1,12 @@ # RDD in R implemented in S4 OO system. -#setOldClass("jobjRef") + +# Handler for a java object that exists on the backend. +jobj <- function(objId) { + if (!is.character(objId)) stop("object id must be a character") + structure(list(id=objId), class = "jobj") +} +setOldClass("jobj") #' @title S4 class that represents an RDD #' @description RDD can be created using functions like @@ -13,12 +19,12 @@ #' @export setClass("RDD", slots = list(env = "environment", - jrdd = "jobjRef")) + jrdd = "jobj")) setClass("PipelinedRDD", slots = list(prev = "RDD", func = "function", - prev_jrdd = "jobjRef"), + prev_jrdd = "jobj"), contains = "RDD") @@ -98,48 +104,44 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), computeFunc <- function(split, part) { rdd@func(split, part) } - serializedFunc <- serialize("computeFunc", connection = NULL, + serializedFuncArr <- serialize("computeFunc", connection = NULL, ascii = TRUE) - serializedFuncArr <- .jarray(serializedFunc) - packageNamesArr <- .jarray(serialize(.sparkREnv[[".packages"]], - connection = NULL, - ascii = TRUE)) + packageNamesArr <- serialize(.sparkREnv[[".packages"]], + connection = NULL, + ascii = TRUE) - refs <- lapply(ls(.broadcastNames), - function(name) { get(name, .broadcastNames) }) - broadcastArr <- .jarray(refs, - "org/apache/spark/broadcast/Broadcast") + broadcastArr <- lapply(ls(.broadcastNames), + function(name) { get(name, .broadcastNames) }) depsBin <- getDependencies(computeFunc) - depsBinArr <- .jarray(depsBin) prev_jrdd <- rdd@prev_jrdd if (dataSerialization) { - rddRef <- new(J("edu.berkeley.cs.amplab.sparkr.RRDD"), - prev_jrdd$rdd(), - serializedFuncArr, - rdd@env$serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv[["libname"]]), - broadcastArr, - prev_jrdd$classTag()) + rddRef <- newJava("edu.berkeley.cs.amplab.sparkr.RRDD", + callJMethod(prev_jrdd, "rdd"), + serializedFuncArr, + rdd@env$serialized, + depsBin, + packageNamesArr, + as.character(.sparkREnv[["libname"]]), + broadcastArr, + callJMethod(prev_jrdd, "classTag")) } else { - rddRef <- new(J("edu.berkeley.cs.amplab.sparkr.StringRRDD"), - prev_jrdd$rdd(), - serializedFuncArr, - rdd@env$serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv[["libname"]]), - broadcastArr, - prev_jrdd$classTag()) + rddRef <- newJava("edu.berkeley.cs.amplab.sparkr.StringRRDD", + callJMethod(prev_jrdd, "rdd"), + serializedFuncArr, + rdd@env$serialized, + depsBin, + packageNamesArr, + as.character(.sparkREnv[["libname"]]), + broadcastArr, + callJMethod(prev_jrdd, "classTag")) } # Save the serialization flag after we create a RRDD rdd@env$serialized <- dataSerialization - rdd@env$jrdd_val <- rddRef$asJavaRDD() + rdd@env$jrdd_val <- callJMethod(rddRef, "asJavaRDD") # rddRef$asJavaRDD() rdd@env$jrdd_val }) @@ -147,8 +149,8 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), setValidity("RDD", function(object) { jrdd <- getJRDD(object) - cls <- jrdd$getClass() - className <- cls$getName() + cls <- callJMethod(jrdd, "getClass") + className <- callJMethod(cls, "getName") if (grep("spark.api.java.*RDD*", className) == 1) { TRUE } else { @@ -180,7 +182,7 @@ setGeneric("cache", function(rdd) { standardGeneric("cache") }) setMethod("cache", signature(rdd = "RDD"), function(rdd) { - .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", "cache") + callJMethod(getJRDD(rdd), "cache") rdd@env$isCached <- TRUE rdd }) @@ -220,19 +222,19 @@ setMethod("persist", "OFF_HEAP")) { match.arg(newLevel) storageLevel <- switch(newLevel, - "DISK_ONLY" = J("org.apache.spark.storage.StorageLevel")$DISK_ONLY(), - "DISK_ONLY_2" = J("org.apache.spark.storage.StorageLevel")$DISK_ONLY_2(), - "MEMORY_AND_DISK" = J("org.apache.spark.storage.StorageLevel")$MEMORY_AND_DISK(), - "MEMORY_AND_DISK_2" = J("org.apache.spark.storage.StorageLevel")$MEMORY_AND_DISK_2(), - "MEMORY_AND_DISK_SER" = J("org.apache.spark.storage.StorageLevel")$MEMORY_AND_DISK_SER(), - "MEMORY_AND_DISK_SER_2" = J("org.apache.spark.storage.StorageLevel")$MEMORY_AND_DISK_SER_2(), - "MEMORY_ONLY" = J("org.apache.spark.storage.StorageLevel")$MEMORY_ONLY(), - "MEMORY_ONLY_2" = J("org.apache.spark.storage.StorageLevel")$MEMORY_ONLY_2(), - "MEMORY_ONLY_SER" = J("org.apache.spark.storage.StorageLevel")$MEMORY_ONLY_SER(), - "MEMORY_ONLY_SER_2" = J("org.apache.spark.storage.StorageLevel")$MEMORY_ONLY_SER_2(), - "OFF_HEAP" = J("org.apache.spark.storage.StorageLevel")$OFF_HEAP()) + "DISK_ONLY" = callJStatic("org.apache.spark.storage.StorageLevel", "DISK_ONLY"), + "DISK_ONLY_2" = callJStatic("org.apache.spark.storage.StorageLevel", "DISK_ONLY_2"), + "MEMORY_AND_DISK" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK"), + "MEMORY_AND_DISK_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_2"), + "MEMORY_AND_DISK_SER" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_SER"), + "MEMORY_AND_DISK_SER_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_SER_2"), + "MEMORY_ONLY" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY"), + "MEMORY_ONLY_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_2"), + "MEMORY_ONLY_SER" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_SER"), + "MEMORY_ONLY_SER_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_SER_2"), + "OFF_HEAP" = callJStatic("org.apache.spark.storage.StorageLevel", "OFF_HEAP")) - .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", "persist", storageLevel) + callJMethod(getJRDD(rdd), "persist", storageLevel) rdd@env$isCached <- TRUE rdd }) @@ -259,8 +261,7 @@ setGeneric("unpersist", function(rdd) { standardGeneric("unpersist") }) setMethod("unpersist", signature(rdd = "RDD"), function(rdd) { - .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", - "unpersist") + callJMethod(getJRDD(rdd), "unpersist") rdd@env$isCached <- FALSE rdd }) @@ -292,9 +293,7 @@ setMethod("checkpoint", signature(rdd = "RDD"), function(rdd) { jrdd <- getJRDD(rdd) - .jcall(jrdd$rdd(), "V", "checkpoint") - # NOTE: rJava doesn't check for exceptions if the return type is void - .jcheck() + callJMethod(jrdd, "checkpoint") rdd@env$isCheckpointed <- TRUE rdd }) @@ -319,8 +318,8 @@ setMethod("numPartitions", signature(rdd = "RDD"), function(rdd) { jrdd <- getJRDD(rdd) - partitions <- .jcall(jrdd, "Ljava/util/List;", "splits") - .jcall(partitions, "I", "size") + partitions <- callJMethod(jrdd, "splits") + callJMethod(partitions, "size") }) #' Collect elements of an RDD @@ -349,7 +348,7 @@ setMethod("collect", signature(rdd = "RDD"), function(rdd, flatten = TRUE) { # Assumes a pairwise RDD is backed by a JavaPairRDD. - collected <- .jcall(getJRDD(rdd), "Ljava/util/List;", "collect") + collected <- callJMethod(getJRDD(rdd), "collect") convertJListToRList(collected, flatten) }) @@ -369,10 +368,9 @@ setGeneric("collectPartition", setMethod("collectPartition", signature(rdd = "RDD", partitionId = "integer"), function(rdd, partitionId) { - jPartitionsList <- .jcall(getJRDD(rdd), - "[Ljava/util/List;", - "collectPartitions", - .jarray(as.integer(partitionId))) + jPartitionsList <- callJMethod(getJRDD(rdd), + "collectPartitions", + as.list(as.integer(partitionId))) jList <- jPartitionsList[[1]] convertJListToRList(jList, flatten = TRUE) @@ -859,10 +857,7 @@ setMethod("take", break # a JList of byte arrays - partitionArr <- .jcall(jrdd, - "[Ljava/util/List;", - "collectPartitions", - .jarray(as.integer(index))) + partitionArr <- callJMethod(jrdd, "collectPartitions", as.list(as.integer(index))) partition <- partitionArr[[1]] size <- num - length(resList) @@ -1100,9 +1095,7 @@ setMethod("saveAsObjectFile", if (!rdd@env$serialized) { rdd <- reserialize(rdd) } - .jcall(getJRDD(rdd), "V", "saveAsObjectFile", path) - # NOTE: rJava doesn't check for exceptions if the return type is void - .jcheck() + callJMethod(getJRDD(rdd), "saveAsObjectFile", path) # Return nothing invisible(NULL) }) @@ -1130,9 +1123,7 @@ setMethod("saveAsTextFile", toString(x) } stringRdd <- lapply(rdd, func) - .jcall(getJRDD(stringRdd, dataSerialization = FALSE), "V", "saveAsTextFile", path) - # NOTE: rJava doesn't check for exceptions if the return type is void - .jcheck() + callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path) # Return nothing invisible(NULL) }) @@ -1286,48 +1277,44 @@ setMethod("partitionBy", # partitionFunc <- hashCode #} - depsBin <- getDependencies(partitionFunc) - depsBinArr <- .jarray(depsBin) - - serializedHashFunc <- serialize(as.character(substitute(partitionFunc)), - connection = NULL, - ascii = TRUE) - serializedHashFuncBytes <- .jarray(serializedHashFunc) + depsBinArr <- getDependencies(partitionFunc) - packageNamesArr <- .jarray(serialize(.sparkREnv$.packages, + serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), connection = NULL, - ascii = TRUE)) - refs <- lapply(ls(.broadcastNames), function(name) { - get(name, .broadcastNames) }) - broadcastArr <- .jarray(refs, - "org/apache/spark/broadcast/Broadcast") - jrdd <- getJRDD(rdd) + ascii = TRUE) + packageNamesArr <- serialize(.sparkREnv$.packages, + connection = NULL, + ascii = TRUE) + broadcastArr <- lapply(ls(.broadcastNames), function(name) { + get(name, .broadcastNames) }) + jrdd <- getJRDD(rdd) # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). - pairwiseRRDD <- new(J("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD"), - jrdd$rdd(), - as.integer(numPartitions), - serializedHashFuncBytes, - rdd@env$serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv$libname), - broadcastArr, - jrdd$classTag()) + pairwiseRRDD <- newJava("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", + callJMethod(jrdd, "rdd"), + as.integer(numPartitions), + serializedHashFuncBytes, + rdd@env$serialized, + depsBinArr, + packageNamesArr, + as.character(.sparkREnv$libname), + broadcastArr, + callJMethod(jrdd, "classTag")) # Create a corresponding partitioner. - rPartitioner <- new(J("org.apache.spark.HashPartitioner"), - as.integer(numPartitions)) + rPartitioner <- newJava("org.apache.spark.HashPartitioner", + as.integer(numPartitions)) # Call partitionBy on the obtained PairwiseRDD. - javaPairRDD <- pairwiseRRDD$asJavaPairRDD()$partitionBy(rPartitioner) + javaPairRDD <- callJMethod(pairwiseRRDD, "asJavaPairRDD") + javaPairRDD <- callJMethod(javaPairRDD, "partitionBy", rPartitioner) # Call .values() on the result to get back the final result, the # shuffled acutal content key-val pairs. - r <- javaPairRDD$values() + r <- callJMethod(javaPairRDD, "values") RDD(r, serialized=TRUE) }) @@ -1565,8 +1552,7 @@ setMethod("unionRDD", signature(x = "RDD", y = "RDD"), function(x, y) { if (x@env$serialized == y@env$serialized) { - jrdd <- .jcall(getJRDD(x), "Lorg/apache/spark/api/java/JavaRDD;", - "union", getJRDD(y)) + jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) union.rdd <- RDD(jrdd, x@env$serialized) } else { # One of the RDDs is not serialized, we need to serialize it first. @@ -1575,8 +1561,7 @@ setMethod("unionRDD", } else { y <- reserialize(y) } - jrdd <- .jcall(getJRDD(x), "Lorg/apache/spark/api/java/JavaRDD;", - "union", getJRDD(y)) + jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) union.rdd <- RDD(jrdd, TRUE) } union.rdd diff --git a/pkg/R/context.R b/pkg/R/context.R index 1c43f6a9b3331..c45c5eaab523c 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -2,8 +2,7 @@ getMinSplits <- function(sc, minSplits) { if (is.null(minSplits)) { - ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") - defaultParallelism <- .jcall(ssc, "I", "defaultParallelism") + defaultParallelism <- callJMethod(sc, "defaultParallelism") minSplits <- min(defaultParallelism, 2) } as.integer(minSplits) @@ -30,8 +29,7 @@ textFile <- function(sc, path, minSplits = NULL) { #' Convert a string vector of paths to a string containing comma separated paths path <- paste(path, collapse=",") - jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "textFile", path, - getMinSplits(sc, minSplits)) + jrdd <- callJMethod(sc, "textFile", path, getMinSplits(sc, minSplits)) RDD(jrdd, FALSE) } @@ -56,8 +54,7 @@ objectFile <- function(sc, path, minSplits = NULL) { #' Convert a string vector of paths to a string containing comma separated paths path <- paste(path, collapse=",") - jrdd <- .jcall(sc, "Lorg/apache/spark/api/java/JavaRDD;", "objectFile", path, - getMinSplits(sc, minSplits)) + jrdd <- callJMethod(sc, "objectFile", path, getMinSplits(sc, minSplits)) # Assume the RDD contains serialized R objects. RDD(jrdd, TRUE) } @@ -102,16 +99,8 @@ parallelize <- function(sc, coll, numSlices = 1) { # 2-tuples of raws serializedSlices <- lapply(slices, serialize, connection = NULL) - javaSerializedSlices <- .jarray(lapply(serializedSlices, .jarray), - contents.class = "[B") - - jrddType = "Lorg/apache/spark/api/java/JavaRDD;" - - jrdd <- .jcall("edu/berkeley/cs/amplab/sparkr/RRDD", - jrddType, - "createRDDFromArray", - sc, - javaSerializedSlices) + jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.RRDD", + "createRDDFromArray", sc, serializedSlices) RDD(jrdd, TRUE) } @@ -182,12 +171,10 @@ includePackage <- function(sc, pkg) { broadcast <- function(sc, object) { objName <- as.character(substitute(object)) serializedObj <- serialize(object, connection = NULL, ascii = TRUE) - serializedObjArr <- .jcast(.jarray(serializedObj), - new.class="java/lang/Object") - jBroadcast <- .jcall(sc, "Lorg/apache/spark/broadcast/Broadcast;", - "broadcast", serializedObjArr) - id <- as.character(.jsimplify(.jcall(jBroadcast, "J", "id"))) + jBroadcast <- callJMethod(sc, "broadcast", serializedObj) + id <- as.character(callJMethod(jBroadcast, "id")) + Broadcast(id, object, jBroadcast, objName) } @@ -207,8 +194,5 @@ broadcast <- function(sc, object) { #' checkpoint(rdd) #'} setCheckpointDir <- function(sc, dirName) { - ssc <- .jcall(sc, "Lorg/apache/spark/SparkContext;", "sc") - .jcall(ssc, "V", "setCheckpointDir", suppressWarnings(normalizePath(dirName))) - # NOTE: rJava doesn't check for exceptions if the return type is void - .jcheck() + invisible(callJMethod(sc, "setCheckpointDir", suppressWarnings(normalizePath(dirName)))) } diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index 2c128c0fab7d0..f856a9f030441 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -54,11 +54,12 @@ readVector <- function(con) { readList <- function(con) { type <- readString(con) len <- readInt(con) - if (length > 0) { + if (len > 0) { l <- vector("list", len) for (i in 1:len) { l[[i]] <- readObjectType(con, type) } + l } else { list() } diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R index f053a2c08d504..8b137891791fe 100644 --- a/pkg/R/jobj.R +++ b/pkg/R/jobj.R @@ -1,7 +1 @@ -# jobj.R -# Handler for a java object that exists on the backend. -jobj <- function(objId) { - if (!is.character(objId)) stop("object id must be a character") - structure(list(id=objId), class = "jobj") -} diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index ae92e3ec6e109..8ee015f8b95a1 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -54,6 +54,11 @@ writeList <- function(con, arr) { elemType <- unique(sapply(arr, function(elem) { class(elem) })) stopifnot(length(elemType) <= 1) + # Write empty lists as strings ? + if (length(elemType) == 0) { + elemType <- "character" + } + writeString(con, elemType) writeInt(con, length(arr)) @@ -86,3 +91,7 @@ writeArgs <- function(con, args) { } } } + +writeStrings <- function(con, stringList) { + writeLines(unlist(stringList), con) +} diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index e6b4a20387ed6..73f3c437e245f 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -7,13 +7,20 @@ sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- gsub(" ", "\\ ", assemblyJarPath, fixed=T) packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") - sparkMem <- Sys.getenv("SPARK_MEM", "512m") yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") .sparkREnv$libname <- libname .sparkREnv$assemblyJarPath <- assemblyJarPath - .jinit(classpath=assemblyJarPath, parameters=paste("-Xmx", sparkMem, sep="")) - .jaddClassPath(yarn_conf_dir) + # TODO: need to add this to backend's classpath + #.jaddClassPath(yarn_conf_dir) +} + +#' Stop this Spark context +#' Also terminates the backend this R session is connected to +sparkR.stop <- function(sparkREnv) { + sc <- get(".sparkRjsc", envir=.sparkREnv) + callJMethod(sc, "stop") + stopBackend() } #' Initialize a new Spark Context. @@ -52,6 +59,12 @@ sparkR.init <- function( return(get(".sparkRjsc", envir=.sparkREnv)) } + sparkMem <- Sys.getenv("SPARK_MEM", "512m") + launchBackend(jar=.sparkREnv$assemblyJarPath, mainClass="edu.berkeley.cs.amplab.sparkr.SparkRBackend", + args="12345", javaOpts=paste("-Xmx", sparkMem, sep="")) + Sys.sleep(2) # Wait for backend to come up + init("localhost", 12345) # Connect to it + if (nchar(sparkHome) != 0) { sparkHome <- normalizePath(sparkHome) } @@ -60,20 +73,20 @@ sparkR.init <- function( .sparkREnv$libname <- sparkRLibDir } - sparkEnvirMap <- .jnew("java/util/HashMap") + sparkEnvirMap <- new.env() for (varname in names(sparkEnvir)) { - sparkEnvirMap$put(varname, sparkEnvir[[varname]]) + sparkEnvirMap[[varname]] <- sparkEnvir[[varname]] } - sparkExecutorEnvMap <- .jnew("java/util/HashMap") + sparkExecutorEnvMap <- new.env() if (!any(names(sparkExecutorEnv) == "LD_LIBRARY_PATH")) { - sparkExecutorEnvMap$put("LD_LIBRARY_PATH", paste0("$LD_LIBRARY_PATH:",Sys.getenv("LD_LIBRARY_PATH"))) + sparkExecutorEnvMap[["LD_LIBRARY_PATH"]] <- paste0("$LD_LIBRARY_PATH:",Sys.getenv("LD_LIBRARY_PATH")) } for (varname in names(sparkExecutorEnv)) { - sparkExecutorEnvMap$put(varname, sparkExecutorEnv[[varname]]) + sparkExecutorEnvMap[[varname]] <- sparkExecutorEnv[[varname]] } - .jaddClassPath(sparkJars) + #.jaddClassPath(sparkJars) jars <- c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) nonEmptyJars <- Filter(function(x) { x != "" }, jars) @@ -81,16 +94,20 @@ sparkR.init <- function( assign( ".sparkRjsc", - J("edu.berkeley.cs.amplab.sparkr.RRDD", - "createSparkContext", + createSparkContext( master, appName, as.character(sparkHome), - .jarray(localJarPaths, "java/lang/String"), + as.list(localJarPaths), sparkEnvirMap, sparkExecutorEnvMap), envir=.sparkREnv ) - get(".sparkRjsc", envir=.sparkREnv) + sc <- get(".sparkRjsc", envir=.sparkREnv) + + # Register a finalizer to stop backend on R exit + reg.finalizer(.sparkREnv, sparkR.stop, onexit=TRUE) + + sc } diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index da70f17db94f3..bed41eabb60c9 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -57,8 +57,9 @@ invokeJava <- function(isStatic, objId, methodName, ...) { } writeString(rc, methodName) - #writeString(rpcName) - writeArgs(rc, list(...)) + args <- list(...) + writeInt(rc, length(args)) + writeArgs(rc, args) bytesToSend <- rawConnectionValue(rc) conn <- get(".sparkRCon", .sparkREnv) @@ -68,5 +69,8 @@ invokeJava <- function(isStatic, objId, methodName, ...) { # TODO: check the status code to output error information returnStatus <- readInt(conn) stopifnot(returnStatus == 0) - readObject(conn) + ret <- readObject(conn) + + close(rc) # TODO: Can we close this before ? + ret } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 3d3531c18ec59..efeb61de6b527 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -4,7 +4,7 @@ # of which is optionally upper bounded by `logicalUpperBound` (by default, # return all elements). Takes care of deserializations and type conversions. convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serialized = TRUE) { - arrSize <- .jcall(jList, "I", "size") + arrSize <- callJMethod(jList, "size") # Unserialized datasets (such as an RDD directly generated by textFile()): # each partition is not dense-packed into one Array[Byte], and `arrSize` @@ -16,51 +16,41 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serial results <- if (arrSize > 0) { lapply(0:(arrSize - 1), function(index) { - jElem <- .jcall(jList, - "Ljava/lang/Object;", - "get", - as.integer(index)) + obj <- callJMethod(jList, "get", as.integer(index)) # Assume it is either an R object or a Java obj ref. - obj <- .jsimplify(jElem) - - if (inherits(obj, "jobjRef") && .jinstanceof(obj, "[B")) { - # RDD[Array[Byte]]. `obj` is a whole partition. - - rRaw <- .jevalArray(.jcastToArray(jElem)) - res <- unserialize(rRaw) - - # For serialized datasets, `obj` (and `rRaw`) here corresponds to - # one whole partition dense-packed together. We deserialize the - # whole partition first, then cap the number of elements to be returned. - - # TODO: is it possible to distinguish element boundary so that we can - # unserialize only what we need? - if (!is.null(logicalUpperBound)) { + if (inherits(obj, "jobj")) { + if (grepl("scala.Tuple2", obj$id)) { + # JavaPairRDD[Array[Byte], Array[Byte]]. + + keyBytes = callJMethod(obj, "_1") + valBytes = callJMethod(obj, "_2") + res <- list(unserialize(keyBytes), + unserialize(valBytes)) + } else { + stop(paste("utils.R: convertJListToRList only supports", + "RDD[Array[Byte]] and", + "JavaPairRDD[Array[Byte], Array[Byte]] for now")) + } + } else { + if (inherits(obj, "raw")) { + # RDD[Array[Byte]]. `obj` is a whole partition. + res <- unserialize(obj) + # For serialized datasets, `obj` (and `rRaw`) here corresponds to + # one whole partition dense-packed together. We deserialize the + # whole partition first, then cap the number of elements to be returned. + + # TODO: is it possible to distinguish element boundary so that we can + # unserialize only what we need? + if (!is.null(logicalUpperBound)) { res <- head(res, n = logicalUpperBound) + } + } else { + # jElem is of a primitive Java type, is simplified to R's + # corresponding type. + res <- list(obj) } - - } else if (inherits(obj, "jobjRef") && - .jinstanceof(obj, "scala.Tuple2")) { - # JavaPairRDD[Array[Byte], Array[Byte]]. - - keyBytes = .jcall(obj, "Ljava/lang/Object;", "_1") - valBytes = .jcall(obj, "Ljava/lang/Object;", "_2") - res <- list(unserialize(.jevalArray(keyBytes)), - unserialize(.jevalArray(valBytes))) - - } else if (inherits(obj, "jobjRef") && !.jinstanceof(obj, "[B")) { - stop(paste("utils.R: convertJListToRList only supports", - "RDD[Array[Byte]] and", - "JavaPairRDD[Array[Byte], Array[Byte]] for now")) - } - - # jElem is of a primitive Java type, is simplified to R's - # corresponding type. - if (!inherits(obj, "jobjRef")) { - res <- list(obj) } - res }) } else { @@ -74,13 +64,6 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serial } } -# Given a Java array of byte arrays, deserilize each, returning an R list of -# the deserialized elements. -deserializeByteArrays <- function(byteArrs) { - arrs <- .jevalArray(byteArrs) - lapply(arrs, function(bs) { unlist(unserialize(.jevalArray(bs))) }) -} - # Returns TRUE if `name` refers to an RDD in the given environment `env` isRDD <- function(name, env) { obj <- get(name, envir=env) diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index a37465a36ef68..bb9371569d36f 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -42,8 +42,8 @@ test_that("parallelize() on simple vectors and lists returns an RDD", { for (rdd in rdds) { expect_true(inherits(rdd, "RDD")) expect_true(.hasSlot(rdd, "jrdd") - && inherits(rdd@jrdd, "jobjRef") - && .jinstanceof(rdd@jrdd, "org/apache/spark/api/java/JavaRDD")) + && inherits(rdd@jrdd, "jobj") + && grepl("org.apache.spark.api.java.JavaRDD", rdd@jrdd$id)) } }) diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index bd0083ef9a9a9..0a112254c7df1 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -10,13 +10,13 @@ test_that("convertJListToRList() gives back (deserializes) the original JLists # JList. nums <- as.list(1:10) rdd <- parallelize(sc, nums, 1L) - jList <- .jcall(rdd@jrdd, "Ljava/util/List;", "collect") + jList <- callJMethod(rdd@jrdd, "collect") rList <- convertJListToRList(jList, flatten = TRUE) expect_equal(rList, nums) strs <- as.list("hello", "spark") rdd <- parallelize(sc, strs, 2L) - jList <- .jcall(rdd@jrdd, "Ljava/util/List;", "collect") + jList <- callJMethod(rdd@jrdd, "collect") rList <- convertJListToRList(jList, flatten = TRUE) expect_equal(rList, strs) }) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 80e3c116aed51..2722d77bfe621 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -1,13 +1,5 @@ # Worker class -source_local <- function(fname) { - argv <- commandArgs(trailingOnly = FALSE) - base_dir <- dirname(substring(argv[grep("--file=", argv)], 8)) - source(paste(base_dir, fname, sep="/")) -} - -source_local("serialize.R") - # NOTE: We use "stdin" to get the process stdin instead of the command line inputConStdin <- file("stdin", open = "rb") @@ -27,26 +19,26 @@ inFileName <- readLines(inputConStdin, n = 1) inputCon <- file(inFileName, open = "rb") # read the index of the current partition inside the RDD -splitIndex <- readInt(inputCon) +splitIndex <- SparkR:::readInt(inputCon) # read the function; if used for pairwise RRDD, this is the hash function. -execLen <- readInt(inputCon) -execFunctionName <- unserialize(readRawLen(inputCon, execLen)) +execLen <- SparkR:::readInt(inputCon) +execFunctionName <- unserialize(SparkR:::readRawLen(inputCon, execLen)) # read the isInputSerialized bit flag -isInputSerialized <- readInt(inputCon) +isInputSerialized <- SparkR:::readInt(inputCon) # read the isOutputSerialized bit flag -isOutputSerialized <- readInt(inputCon) +isOutputSerialized <- SparkR:::readInt(inputCon) # Redirect stdout to stderr to prevent print statements from # interfering with outputStream sink(stderr()) # read function dependencies -depsLen <- readInt(inputCon) +depsLen <- SparkR:::readInt(inputCon) if (depsLen > 0) { - execFunctionDeps <- readRawLen(inputCon, depsLen) + execFunctionDeps <- SparkR:::readRawLen(inputCon, depsLen) # load the dependencies into current environment depsFileName <- tempfile(pattern="spark-exec", fileext=".deps") @@ -56,7 +48,7 @@ if (depsLen > 0) { } # Include packages as required -packageNames <- unserialize(readRaw(inputCon)) +packageNames <- unserialize(SparkR:::readRaw(inputCon)) for (pkg in packageNames) { suppressPackageStartupMessages(require(as.character(pkg), character.only=TRUE)) } @@ -67,40 +59,40 @@ if (depsLen > 0) { } # Read and set broadcast variables -numBroadcastVars <- readInt(inputCon) +numBroadcastVars <- SparkR:::readInt(inputCon) if (numBroadcastVars > 0) { for (bcast in seq(1:numBroadcastVars)) { - bcastId <- readInt(inputCon) - value <- unserialize(readRaw(inputCon)) + bcastId <- SparkR:::readInt(inputCon) + value <- unserialize(SparkR:::readRaw(inputCon)) setBroadcastValue(bcastId, value) } } # If -1: read as normal RDD; if >= 0, treat as pairwise RDD and treat the int # as number of partitions to create. -numPartitions <- readInt(inputCon) +numPartitions <- SparkR:::readInt(inputCon) -isEmpty <- readInt(inputCon) +isEmpty <- SparkR:::readInt(inputCon) if (isEmpty != 0) { if (numPartitions == -1) { if (isInputSerialized) { # Now read as many characters as described in funcLen - data <- readDeserialize(inputCon) + data <- SparkR:::readDeserialize(inputCon) } else { data <- readLines(inputCon) } output <- do.call(execFunctionName, list(splitIndex, data)) if (isOutputSerialized) { - writeRawSerialize(outputCon, output) + SparkR:::writeRawSerialize(outputCon, output) } else { - writeStrings(outputCon, output) + SparkR:::writeStrings(outputCon, output) } } else { if (isInputSerialized) { # Now read as many characters as described in funcLen - data <- readDeserialize(inputCon) + data <- SparkR:::readDeserialize(inputCon) } else { data <- readLines(inputCon) } @@ -124,18 +116,18 @@ if (isEmpty != 0) { # Step 2: write out all of the environment as key-value pairs. for (name in ls(res)) { - writeInt(outputCon, 2L) - writeInt(outputCon, as.integer(name)) + SparkR:::writeInt(outputCon, 2L) + SparkR:::writeInt(outputCon, as.integer(name)) # Truncate the accumulator list to the number of elements we have length(res[[name]]$data) <- res[[name]]$counter - writeRawSerialize(outputCon, res[[name]]$data) + SparkR:::writeRawSerialize(outputCon, res[[name]]$data) } } } # End of output if (isOutputSerialized) { - writeInt(outputCon, 0L) + SparkR:::writeInt(outputCon, 0L) } close(outputCon) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 89e4b2dd0ced1..ff9d669cf9409 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -198,10 +198,10 @@ private class PairwiseRRDD[T: ClassTag]( functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Broadcast[Object]]) + broadcastVars: Array[Object]) extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, parentSerialized, true, functionDependencies, packageNames, rLibDir, - broadcastVars) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ @@ -243,10 +243,10 @@ private class RRDD[T: ClassTag]( functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Broadcast[Object]]) + broadcastVars: Array[Object]) extends BaseRRDD[T, Array[Byte]](parent, -1, func, parentSerialized, true, functionDependencies, packageNames, rLibDir, - broadcastVars) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ @@ -286,10 +286,10 @@ private class StringRRDD[T: ClassTag]( functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Broadcast[Object]]) + broadcastVars: Array[Object]) extends BaseRRDD[T, String](parent, -1, func, parentSerialized, false, functionDependencies, packageNames, rLibDir, - broadcastVars) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: BufferedReader = _ diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index fe671de2ccb97..70fc5501c2bd3 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -24,17 +24,7 @@ object SerializeJavaR { case "character" => readString(dis) case "environment" => readMap(dis, objMap) case "raw" => readBytes(dis) - case "list" => { - val arrType = readString(dis) - arrType match { - case "integer" => readIntArr(dis) - case "character" => readStringArr(dis) - case "double" => readDoubleArr(dis) - case "logical" => readBooleanArr(dis) - case "jobj" => readStringArr(dis).map(x => objMap(x)) - case "raw" => readBytesArr(dis) - } - } + case "list" => readList(dis, objMap) case "jobj" => objMap(readString(dis)) } } @@ -59,7 +49,8 @@ object SerializeJavaR { val len = in.readInt() val asciiBytes = new Array[Byte](len) in.read(asciiBytes, 0, len) - new String(asciiBytes.dropRight(1).map(_.toChar)) + val str = new String(asciiBytes.dropRight(1).map(_.toChar)) + str } def readBoolean(in: DataInputStream) = { @@ -92,14 +83,30 @@ object SerializeJavaR { (0 until len).map(_ => readString(in)).toArray } + def readList(dis: DataInputStream, objMap: HashMap[String, Object]) = { + val arrType = readString(dis) + arrType match { + case "integer" => readIntArr(dis) + case "character" => readStringArr(dis) + case "double" => readDoubleArr(dis) + case "logical" => readBooleanArr(dis) + case "jobj" => readStringArr(dis).map(x => objMap(x)) + case "raw" => readBytesArr(dis) + case _ => throw new IllegalArgumentException(s"Invalid array type $arrType") + } + } + def readMap( in: DataInputStream, objMap: HashMap[String, Object]): java.util.Map[Object, Object] = { val len = readInt(in) if (len > 0) { val typeStr = readString(in) - val keys = (0 until len).map(_ => readObjectType(in, objMap, typeStr)) + val keysLen = readInt(in) + val keys = (0 until keysLen).map(_ => readObjectType(in, objMap, typeStr)) + val valuesType = readString(in) + val valuesLen = readInt(in) val values = (0 until len).map(_ => readObjectType(in, objMap, typeStr)) mapAsJavaMap(keys.zip(values).toMap) } else { @@ -110,68 +117,78 @@ object SerializeJavaR { /// Methods to write out data from Java to R def writeObject(dos: DataOutputStream, value: Object, objMap: HashMap[String, Object]) { - value.getClass.getName match { - case "void" => { - writeString(dos, "void") - } - case "java.lang.String" => { - writeString(dos, "character") - writeString(dos, value.asInstanceOf[String]) - } - case "long" | "java.lang.Long" => { - writeString(dos, "double") - writeDouble(dos, value.asInstanceOf[Long].toDouble) - } - case "double" | "java.lang.Double" => { - writeString(dos, "double") - writeDouble(dos, value.asInstanceOf[Double]) - } - case "int" | "java.lang.Integer" => { - writeString(dos, "integer") - writeInt(dos, value.asInstanceOf[Int]) - } - case "boolean" | "java.lang.Boolean" => { - writeString(dos, "logical") - writeBoolean(dos, value.asInstanceOf[Boolean]) - } - case "[B" => { - writeString(dos, "raw") - writeBytes(dos, value.asInstanceOf[Array[Byte]]) - } - // TODO: Types not handled right now include - // byte, char, short, float + if (value == null) { + writeString(dos, "void") + } else { + value.getClass.getName match { + case "java.lang.String" => { + writeString(dos, "character") + writeString(dos, value.asInstanceOf[String]) + } + case "long" | "java.lang.Long" => { + writeString(dos, "double") + writeDouble(dos, value.asInstanceOf[Long].toDouble) + } + case "double" | "java.lang.Double" => { + writeString(dos, "double") + writeDouble(dos, value.asInstanceOf[Double]) + } + case "int" | "java.lang.Integer" => { + writeString(dos, "integer") + writeInt(dos, value.asInstanceOf[Int]) + } + case "boolean" | "java.lang.Boolean" => { + writeString(dos, "logical") + writeBoolean(dos, value.asInstanceOf[Boolean]) + } + case "[B" => { + writeString(dos, "raw") + writeBytes(dos, value.asInstanceOf[Array[Byte]]) + } + // TODO: Types not handled right now include + // byte, char, short, float - // Handle arrays - case "[Ljava.lang.String;" => { - writeString(dos, "list") - writeStringArr(dos, value.asInstanceOf[Array[String]]) - } - case "[I" => { - writeString(dos, "list") - writeIntArr(dos, value.asInstanceOf[Array[Int]]) - } - case "[L" => { - writeString(dos, "list") - writeDoubleArr(dos, value.asInstanceOf[Array[Long]].map(_.toDouble)) - } - case "[D" => { - writeString(dos, "list") - writeDoubleArr(dos, value.asInstanceOf[Array[Double]]) - } - case "[Z" => { - writeString(dos, "list") - writeBooleanArr(dos, value.asInstanceOf[Array[Boolean]]) - } - case "[[B" => { - writeString(dos, "list") - writeBytesArr(dos, value.asInstanceOf[Array[Array[Byte]]]) - } - case _ => { - val objId = value.getClass().getName() + "@" + - Integer.toHexString(System.identityHashCode(value)) - objMap.put(objId, value) - writeString(dos, "jobj") - writeString(dos, objId) + // Handle arrays + case "[Ljava.lang.String;" => { + writeString(dos, "list") + writeStringArr(dos, value.asInstanceOf[Array[String]]) + } + case "[I" => { + writeString(dos, "list") + writeIntArr(dos, value.asInstanceOf[Array[Int]]) + } + case "[J" => { + writeString(dos, "list") + writeDoubleArr(dos, value.asInstanceOf[Array[Long]].map(_.toDouble)) + } + case "[D" => { + writeString(dos, "list") + writeDoubleArr(dos, value.asInstanceOf[Array[Double]]) + } + case "[Z" => { + writeString(dos, "list") + writeBooleanArr(dos, value.asInstanceOf[Array[Boolean]]) + } + case "[[B" => { + writeString(dos, "list") + writeBytesArr(dos, value.asInstanceOf[Array[Array[Byte]]]) + } + case _ => { + // Handle array of objects + if (value.getClass().getName().startsWith("[L")) { + val objArr = value.asInstanceOf[Array[Object]] + writeString(dos, "list") + writeString(dos, "jobj") + dos.writeInt(objArr.length) + objArr.foreach(o => writeJObj(dos, o, objMap)) + } else { + val objId = value.getClass().getName() + "@" + + Integer.toHexString(System.identityHashCode(value)) + objMap.put(objId, value) + writeString(dos, "jobj") + writeString(dos, objId) + } + } } } } @@ -202,6 +219,13 @@ object SerializeJavaR { out.write(value) } + def writeJObj(out: DataOutputStream, value: Object, objMap: HashMap[String, Object]) { + val objId = value.getClass().getName() + "@" + + Integer.toHexString(System.identityHashCode(value)) + objMap.put(objId, value) + writeString(out, objId) + } + def writeIntArr(out: DataOutputStream, value: Array[Int]) { writeString(out, "integer") out.writeInt(value.length) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 8532e06ced9bc..1120574757b1a 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -30,8 +30,9 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val isStatic = readBoolean(dis) val objId = readString(dis) val methodName = readString(dis) + val numArgs = readInt(dis) - System.err.println(s"Handling $methodName on $objId") + // System.err.println(s"Handling $methodName on $objId") if (objId == "SparkRHandler") { methodName match { @@ -45,7 +46,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa case _ => dos.writeInt(-1) } } else { - handleMethodCall(isStatic, objId, methodName, dis, dos) + handleMethodCall(isStatic, objId, methodName, numArgs, dis, dos) } val reply = bos.toByteArray @@ -63,7 +64,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa } def handleMethodCall(isStatic: Boolean, objId: String, methodName: String, - dis: DataInputStream, dos: DataOutputStream) { + numArgs: Int, dis: DataInputStream, dos: DataOutputStream) { var obj: Object = null var cls: Option[Class[_]] = None @@ -84,9 +85,12 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa // TODO: We only use first method with the same name val selectedMethods = methods.filter(m => m.getName() == methodName) if (selectedMethods.length > 0) { - val selectedMethod = selectedMethods.head + val selectedMethod = selectedMethods.filter { x => + x.getParameterTypes().length == numArgs + }.head val argTypes = selectedMethod.getParameterTypes() val args = parseArgs(argTypes, dis) + val ret = selectedMethod.invoke(obj, args:_*) // Write status bit @@ -95,7 +99,10 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa } else if (methodName == "new") { // methodName should be "new" for constructor // TODO: We only use the first constructor ? - val ctor = cls.get.getConstructors().head + val ctor = cls.get.getConstructors().filter { x => + x.getParameterTypes().length == numArgs + }.head + val argTypes = ctor.getParameterTypes() val params = parseArgs(argTypes, dis) val obj = ctor.newInstance(params:_*) From 2152727050f19a0d2c44cd93045453533c025b2f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 18 Jan 2015 23:35:41 -0800 Subject: [PATCH 323/687] Remove empty file --- pkg/R/jobj.R | 1 - 1 file changed, 1 deletion(-) delete mode 100644 pkg/R/jobj.R diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R deleted file mode 100644 index 8b137891791fe..0000000000000 --- a/pkg/R/jobj.R +++ /dev/null @@ -1 +0,0 @@ - From a1108ca0a2782b3c33d72fed9470df50794c867d Mon Sep 17 00:00:00 2001 From: lythesia Date: Mon, 19 Jan 2015 15:55:07 +0800 Subject: [PATCH 324/687] add fullOuterJoin in RDD.R --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 80 ++++++++++++++++++++++++++++++++++++++++ pkg/man/fullOuterJoin.Rd | 45 ++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 pkg/man/fullOuterJoin.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index df88bb3cffdee..c3a579a456c4f 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -19,6 +19,7 @@ exportMethods( "flatMapValues", "foreach", "foreachPartition", + "fullOuterJoin", "groupByKey", "join", "keyBy", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 366758e6e27e8..8db3dc99fda3c 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1783,6 +1783,86 @@ setMethod("rightOuterJoin", joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) }) +#' Full outer join two RDDs +#' +#' This function full-outer-joins two RDDs where every element is of the form +#' list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD +#' will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and +#' (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements +#' in rdd1/rdd2 have key k. +#' @rdname fullOuterJoin +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), +#' # list(1, list(3, 1)), +#' # list(3, list(3, NULL)), +#' # list(2, list(NULL, 4))) +#'} +setGeneric("fullOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("fullOuterJoin") }) + +#' @rdname fullOuterJoin +#' @aliases fullOuterJoin,RDD,RDD-method +setMethod("fullOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + t1 <- vector("list", length(v)) + t2 <- vector("list", length(v)) + index1 <- 1 + index2 <- 1 + for (x in v) { + if (x[[1]] == 1L) { + t1[[index1]] <- x[[2]] + index1 <- index1 + 1 + } else { + t2[[index2]] <- x[[2]] + index2 <- index2 + 1 + } + } + len1 <- index1 - 1 + len2 <- index2 - 1 + + if (len1 == 0) { + t1 <- list(NULL) + } else { + length(t1) <- len1 + } + + if (len2 == 0) { + t2 <- list(NULL) + } else { + length(t2) <- len2 + } + + result <- list() + length(result) <- length(t1) * length(t2) + index <- 1 + for(i in t1) { + for(j in t2) { + result[[index]] <- list(i, j) + index <- index + 1 + } + } + result + } + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + #' For each key k in several RDDs, return a resulting RDD that #' whose values are a list of values for the key in all RDDs. #' diff --git a/pkg/man/fullOuterJoin.Rd b/pkg/man/fullOuterJoin.Rd new file mode 100644 index 0000000000000..ebbafafbea15d --- /dev/null +++ b/pkg/man/fullOuterJoin.Rd @@ -0,0 +1,45 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{fullOuterJoin} +\alias{fullOuterJoin} +\alias{fullOuterJoin,RDD,RDD,integer-method} +\alias{fullOuterJoin,RDD,RDD-method} +\title{Full outer join two RDDs} +\usage{ +fullOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{fullOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) +} +\arguments{ +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD + will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and + (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements + in rdd1/rdd2 have key k. +} +\description{ +This function full-outer-joins two RDDs where every element is of the form +list(K, V). +The key types of the two RDDs should be the same. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) +rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), + # list(1, list(3, 1)), + # list(3, list(3, NULL)), + # list(2, list(NULL, 4))) +} +} + From 70fa4091e53cf92caa1be95235c1b1ca7607b081 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 19 Jan 2015 20:22:59 +0800 Subject: [PATCH 325/687] Add YARN Conf Dir to the class path when launching the backend. --- pkg/R/sparkR.R | 13 +++++++------ pkg/R/sparkRClient.R | 4 ++-- .../berkeley/cs/amplab/sparkr/SerializeJavaR.scala | 5 +---- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 73f3c437e245f..ac0f3051b8cc0 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -6,13 +6,9 @@ sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") assemblyJarPath <- gsub(" ", "\\ ", assemblyJarPath, fixed=T) packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") - - yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") - + .sparkREnv$libname <- libname .sparkREnv$assemblyJarPath <- assemblyJarPath - # TODO: need to add this to backend's classpath - #.jaddClassPath(yarn_conf_dir) } #' Stop this Spark context @@ -60,7 +56,12 @@ sparkR.init <- function( } sparkMem <- Sys.getenv("SPARK_MEM", "512m") - launchBackend(jar=.sparkREnv$assemblyJarPath, mainClass="edu.berkeley.cs.amplab.sparkr.SparkRBackend", + cp = .sparkREnv$assemblyJarPath + yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") + if (yarn_conf_dir != "") { + cp = paste(cp, yarn_conf_dir, sep=":") + } + launchBackend(classPath=cp, mainClass="edu.berkeley.cs.amplab.sparkr.SparkRBackend", args="12345", javaOpts=paste("-Xmx", sparkMem, sep="")) Sys.sleep(2) # Wait for backend to come up init("localhost", 12345) # Connect to it diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 9d683034324b2..55aa59c8da1a9 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -16,7 +16,7 @@ init <- function(hostname, port, timeout=60) { } launchBackend <- function( - jar, + classPath, mainClass, args, javaOpts="-Xms2g -Xmx2g", @@ -26,7 +26,7 @@ launchBackend <- function( } else { java_bin <- "java" } - command <- paste(java_bin, javaOpts, "-cp", jar, mainClass, args, sep=" ") + command <- paste(java_bin, javaOpts, "-cp", classPath, mainClass, args, sep=" ") cat("Launching java with command ", command, "\n") invisible(system(command, intern=FALSE, ignore.stdout=F, ignore.stderr=F, wait=F)) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 70fc5501c2bd3..67277ed0285c7 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -182,11 +182,8 @@ object SerializeJavaR { dos.writeInt(objArr.length) objArr.foreach(o => writeJObj(dos, o, objMap)) } else { - val objId = value.getClass().getName() + "@" + - Integer.toHexString(System.identityHashCode(value)) - objMap.put(objId, value) writeString(dos, "jobj") - writeString(dos, objId) + writeJObj(dos, value, objMap) } } } From 1255391fca698619db8a0b7757fec9c548e27a78 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 19 Jan 2015 13:14:41 -0800 Subject: [PATCH 326/687] Add a finalizer for jobj objects This enables Java objects to be garbage collected on the backend when they are no longer referenced in R. Also rename newJava to newJObject to be more consistent with callJMethod --- .gitignore | 2 + pkg/DESCRIPTION | 1 + pkg/NAMESPACE | 1 - pkg/R/RDD.R | 100 ++++++++++++------ pkg/R/deserialize.R | 2 +- pkg/R/serialize.R | 4 +- pkg/R/sparkRBackend.R | 25 ++++- .../amplab/sparkr/SparkRBackendHandler.scala | 18 +++- 8 files changed, 115 insertions(+), 38 deletions(-) diff --git a/.gitignore b/.gitignore index 02f451c0b503d..1a2f47f903967 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ work/ *~ .Rproj.user SparkR-pkg.Rproj +*.o +*.so diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index e881c4e2ad0b7..618847c951640 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -5,6 +5,7 @@ Version: 0.1 Date: 2013-09-09 Author: Shivaram Venkataraman Maintainer: Shivaram Venkataraman +Imports: methods Depends: R (>= 3.0), methods, diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index aa120566967a5..df88bb3cffdee 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -64,5 +64,4 @@ export( "setCheckpointDir" ) export("sparkR.init") -export("jobj") useDynLib(SparkR, stringHashCode) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index ef36548d86c75..66b1287cce264 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1,10 +1,44 @@ # RDD in R implemented in S4 OO system. +# Maintain a reference count of Java object references +# This allows us to GC the java object when it is safe +.validJobjs <- new.env(parent = emptyenv()) + +# List of object ids to be removed +.toRemoveJobjs <- new.env(parent = emptyenv()) + +getJobj <- function(objId) { + newObj <- jobj(objId) + if (exists(objId, .validJobjs)) { + .validJobjs[[objId]] <- .validJobjs[[objId]] + 1 + } else { + .validJobjs[[objId]] <- 1 + } + newObj +} # Handler for a java object that exists on the backend. jobj <- function(objId) { if (!is.character(objId)) stop("object id must be a character") - structure(list(id=objId), class = "jobj") + obj <- structure(new.env(parent = emptyenv()), class = "jobj") + obj$id <- objId + # Register a finalizer to remove the Java object when this reference + # is garbage collected in R + reg.finalizer(obj, cleanup.jobj) + obj +} + +cleanup.jobj <- function(e) { + objId <- e$id + .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 + + if (.validJobjs[[objId]] == 0) { + rm(list=objId, envir = .validJobjs) + # NOTE: We cannot call removeJObject here as the finalizer may be run + # in the middle of another RPC. Thus we queue up this object Id to be removed + # and then run all the removeJObject when the next RPC is called. + .toRemoveJobjs[[objId]] <- 1 + } } setOldClass("jobj") @@ -117,27 +151,29 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), depsBin <- getDependencies(computeFunc) prev_jrdd <- rdd@prev_jrdd + rddRef <- callJMethod(prev_jrdd, "rdd") + classTag <- callJMethod(prev_jrdd, "classTag") if (dataSerialization) { - rddRef <- newJava("edu.berkeley.cs.amplab.sparkr.RRDD", - callJMethod(prev_jrdd, "rdd"), - serializedFuncArr, - rdd@env$serialized, - depsBin, - packageNamesArr, - as.character(.sparkREnv[["libname"]]), - broadcastArr, - callJMethod(prev_jrdd, "classTag")) + rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", + rddRef, + serializedFuncArr, + rdd@env$serialized, + depsBin, + packageNamesArr, + as.character(.sparkREnv[["libname"]]), + broadcastArr, + classTag) } else { - rddRef <- newJava("edu.berkeley.cs.amplab.sparkr.StringRRDD", - callJMethod(prev_jrdd, "rdd"), - serializedFuncArr, - rdd@env$serialized, - depsBin, - packageNamesArr, - as.character(.sparkREnv[["libname"]]), - broadcastArr, - callJMethod(prev_jrdd, "classTag")) + rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", + rddRef, + serializedFuncArr, + rdd@env$serialized, + depsBin, + packageNamesArr, + as.character(.sparkREnv[["libname"]]), + broadcastArr, + classTag) } # Save the serialization flag after we create a RRDD rdd@env$serialized <- dataSerialization @@ -1289,24 +1325,26 @@ setMethod("partitionBy", broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) jrdd <- getJRDD(rdd) + rddRef <- callJMethod(jrdd, "rdd") + classTag <- callJMethod(jrdd, "classTag") # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). - pairwiseRRDD <- newJava("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", - callJMethod(jrdd, "rdd"), - as.integer(numPartitions), - serializedHashFuncBytes, - rdd@env$serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv$libname), - broadcastArr, - callJMethod(jrdd, "classTag")) + pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", + rddRef, + as.integer(numPartitions), + serializedHashFuncBytes, + rdd@env$serialized, + depsBinArr, + packageNamesArr, + as.character(.sparkREnv$libname), + broadcastArr, + classTag) # Create a corresponding partitioner. - rPartitioner <- newJava("org.apache.spark.HashPartitioner", - as.integer(numPartitions)) + rPartitioner <- newJObject("org.apache.spark.HashPartitioner", + as.integer(numPartitions)) # Call partitionBy on the obtained PairwiseRDD. javaPairRDD <- callJMethod(pairwiseRRDD, "asJavaPairRDD") diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index f856a9f030441..287247815adf6 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -34,7 +34,7 @@ readObjectType <- function(con, type) { vector = readVector(con), list = readList(con), void = NULL, - jobj = jobj(readString(con)), + jobj = getJobj(readString(con)), stop("Unsupported type for deserialization")) } diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index 8ee015f8b95a1..66a364b6c63cd 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -18,9 +18,9 @@ writeBoolean <- function(con, value) { writeInt(con, as.integer(value)) } -writeRawSerialize <- function(con, batch) { +writeRawSerialize <- function(outputCon, batch) { outputSer <- serialize(batch, ascii = FALSE, conn = NULL) - writeRaw(con, outputSer) + writeRaw(outputCon, outputSer) } writeRaw <- function(con, batch) { diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index bed41eabb60c9..2f572da6bf707 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -34,10 +34,18 @@ callJStatic <- function(className, methodName, ...) { invokeJava(isStatic=TRUE, className, methodName, ...) } -newJava <- function(className, ...) { +newJObject <- function(className, ...) { invokeJava(isStatic=TRUE, className, methodName="new", ...) } +removeJObject <- function(objId) { + invokeJava(isStatic=TRUE, "SparkRHandler", "rm", objId) +} + +isRemoveMethod <- function(isStatic, objId, methodName) { + isStatic == TRUE && objId == "SparkRHandler" && methodName == "rm" +} + # If isStatic is true, objId contains className otherwise # it should contain a jobj returned previously by the backend invokeJava <- function(isStatic, objId, methodName, ...) { @@ -45,6 +53,19 @@ invokeJava <- function(isStatic, objId, methodName, ...) { stop("No connection to backend found") } + # If this is already isn't a removeJObject call + if (!isRemoveMethod(isStatic, objId, methodName)) { + objsToRemove <- ls(.toRemoveJobjs) + if (length(objsToRemove) > 0) { + #cat("Clearing up objsToRemove\n") + sapply(objsToRemove, + function(e) { + removeJObject(e) + }) + rm(list=objsToRemove, envir=.toRemoveJobjs) + } + } + rc <- rawConnection(raw(0), "r+") writeBoolean(rc, isStatic) @@ -62,6 +83,7 @@ invokeJava <- function(isStatic, objId, methodName, ...) { writeArgs(rc, args) bytesToSend <- rawConnectionValue(rc) + conn <- get(".sparkRCon", .sparkREnv) writeInt(conn, length(bytesToSend)) writeBin(bytesToSend, conn) @@ -72,5 +94,6 @@ invokeJava <- function(isStatic, objId, methodName, ...) { ret <- readObject(conn) close(rc) # TODO: Can we close this before ? + ret } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 1120574757b1a..d525fb835f56d 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -32,8 +32,6 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val methodName = readString(dis) val numArgs = readInt(dis) - // System.err.println(s"Handling $methodName on $objId") - if (objId == "SparkRHandler") { methodName match { case "stopBackend" => { @@ -43,6 +41,22 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa writeString(dos, "void") server.close() } + case "rm" => { + try { + val t = readString(dis) + assert(t == "character") + val objToRemove = readString(dis) + objMap.remove(objToRemove) + writeInt(dos, 0) + writeObject(dos, null, objMap) + } catch { + case e: Exception => { + System.err.println(s"Removing $objId failed with " + e) + e.printStackTrace() + writeInt(dos, -1) + } + } + } case _ => dos.writeInt(-1) } } else { From a547dd2175f88213766552a80ab9ef81e89a9cb3 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 19 Jan 2015 13:25:42 -0800 Subject: [PATCH 327/687] Move classTag, rddRef into newJObject call This avoids them getting eagerly garbage collected --- pkg/R/RDD.R | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 66b1287cce264..209b6bf356228 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -151,29 +151,27 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), depsBin <- getDependencies(computeFunc) prev_jrdd <- rdd@prev_jrdd - rddRef <- callJMethod(prev_jrdd, "rdd") - classTag <- callJMethod(prev_jrdd, "classTag") if (dataSerialization) { rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", - rddRef, + callJMethod(prev_jrdd, "rdd"), serializedFuncArr, rdd@env$serialized, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), broadcastArr, - classTag) + callJMethod(prev_jrdd, "classTag")) } else { rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", - rddRef, + callJMethod(prev_jrdd, "rdd"), serializedFuncArr, rdd@env$serialized, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), broadcastArr, - classTag) + callJMethod(prev_jrdd, "classTag")) } # Save the serialization flag after we create a RRDD rdd@env$serialized <- dataSerialization @@ -1325,14 +1323,12 @@ setMethod("partitionBy", broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) jrdd <- getJRDD(rdd) - rddRef <- callJMethod(jrdd, "rdd") - classTag <- callJMethod(jrdd, "classTag") # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", - rddRef, + callJMethod(jrdd, "rdd"), as.integer(numPartitions), serializedHashFuncBytes, rdd@env$serialized, @@ -1340,7 +1336,7 @@ setMethod("partitionBy", packageNamesArr, as.character(.sparkREnv$libname), broadcastArr, - classTag) + callJMethod(jrdd, "classTag")) # Create a corresponding partitioner. rPartitioner <- newJObject("org.apache.spark.HashPartitioner", From cffecc5ca0fc1f3352eb08ead328c26b2f2a9c22 Mon Sep 17 00:00:00 2001 From: lythesia Date: Tue, 20 Jan 2015 10:32:03 +0800 Subject: [PATCH 328/687] add test case for fullOuterJoin --- pkg/inst/tests/test_rdd.R | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index b1f1bb357096b..76a48f647bff9 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -347,3 +347,29 @@ test_that("rightOuterJoin() on pairwise RDDs", { sortKeyValueList(list(list("d", list(NULL, 4)), list("c", list(NULL, 3))))) }) +test_that("fullOuterJoin() on pairwise RDDs", { + rdd1 <- parallelize(sc, list(list(1,2), list(1,3), list(3,3))) + rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) + actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) + expected <- list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4)), list(3, list(3, NULL))) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + rdd1 <- parallelize(sc, list(list("a",2), list("a",3), list("c", 1))) + rdd2 <- parallelize(sc, list(list("a",1), list("b",4))) + actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) + expected <- list(list("b", list(NULL, 4)), list("a", list(2, 1)), list("a", list(3, 1)), list("c", list(1, NULL))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(expected)) + + rdd1 <- parallelize(sc, list(list(1,1), list(2,2))) + rdd2 <- parallelize(sc, list(list(3,3), list(4,4))) + actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list(1, list(1, NULL)), list(2, list(2, NULL)), list(3, list(NULL, 3)), list(4, list(NULL, 4))))) + + rdd1 <- parallelize(sc, list(list("a",1), list("b",2))) + rdd2 <- parallelize(sc, list(list("c",3), list("d",4))) + actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list("a", list(1, NULL)), list("b", list(2, NULL)), list("d", list(NULL, 4)), list("c", list(NULL, 3))))) +}) From eb4f4231044502760f73963eba160e67c8ff82f8 Mon Sep 17 00:00:00 2001 From: lythesia Date: Tue, 20 Jan 2015 12:07:10 +0800 Subject: [PATCH 329/687] --amend --- pkg/inst/tests/test_rdd.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 76a48f647bff9..7c2599f51e7e5 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -349,7 +349,7 @@ test_that("rightOuterJoin() on pairwise RDDs", { test_that("fullOuterJoin() on pairwise RDDs", { rdd1 <- parallelize(sc, list(list(1,2), list(1,3), list(3,3))) - rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) + rdd2 <- parallelize(sc, list(list(1,1), list(2,4))) actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) expected <- list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4)), list(3, list(3, NULL))) expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) From 71d41f5e3c827c5b4965ef0ff250072532196428 Mon Sep 17 00:00:00 2001 From: lythesia Date: Tue, 20 Jan 2015 10:32:03 +0800 Subject: [PATCH 330/687] add test case for fullOuterJoin --- pkg/inst/tests/test_rdd.R | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index b1f1bb357096b..7c2599f51e7e5 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -347,3 +347,29 @@ test_that("rightOuterJoin() on pairwise RDDs", { sortKeyValueList(list(list("d", list(NULL, 4)), list("c", list(NULL, 3))))) }) +test_that("fullOuterJoin() on pairwise RDDs", { + rdd1 <- parallelize(sc, list(list(1,2), list(1,3), list(3,3))) + rdd2 <- parallelize(sc, list(list(1,1), list(2,4))) + actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) + expected <- list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4)), list(3, list(3, NULL))) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + rdd1 <- parallelize(sc, list(list("a",2), list("a",3), list("c", 1))) + rdd2 <- parallelize(sc, list(list("a",1), list("b",4))) + actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) + expected <- list(list("b", list(NULL, 4)), list("a", list(2, 1)), list("a", list(3, 1)), list("c", list(1, NULL))) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(expected)) + + rdd1 <- parallelize(sc, list(list(1,1), list(2,2))) + rdd2 <- parallelize(sc, list(list(3,3), list(4,4))) + actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list(1, list(1, NULL)), list(2, list(2, NULL)), list(3, list(NULL, 3)), list(4, list(NULL, 4))))) + + rdd1 <- parallelize(sc, list(list("a",1), list("b",2))) + rdd2 <- parallelize(sc, list(list("c",3), list("d",4))) + actual <- collect(fullOuterJoin(rdd1, rdd2, 2L)) + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list("a", list(1, NULL)), list("b", list(2, NULL)), list("d", list(NULL, 4)), list("c", list(NULL, 3))))) +}) From b38d04f50594134311425a8db02ee6ab3c2eb44c Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 20 Jan 2015 17:42:29 +0800 Subject: [PATCH 331/687] Use 1 char to represent types on the client -> backend direction. --- pkg/R/serialize.R | 19 ++++++- .../cs/amplab/sparkr/SerializeJavaR.scala | 52 +++++++++++-------- .../amplab/sparkr/SparkRBackendHandler.scala | 5 +- 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index 66a364b6c63cd..f9ac3a7222b07 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -28,12 +28,27 @@ writeRaw <- function(con, batch) { writeBin(batch, con, endian="big") } +writeType <- function(con, class) { + type <- switch(class, + integer = "i", + character = "c", + logical = "b", + double = "d", + numeric = "d", + raw = "r", + list = "l", + jobj = "j", + environment = "e", + stop("Unsupported type for serialization")) + writeBin(charToRaw(type), con) +} + writeObject <- function(con, object, withType = TRUE) { # In R vectors have same type as objects. So check if this is a vector # and if so just call writeVector # TODO: Should we just throw an exception here instead ? if (withType) { - writeString(con, class(object)) + writeType(con, class(object)) } switch(class(object), integer = writeInt(con, object), @@ -59,7 +74,7 @@ writeList <- function(con, arr) { elemType <- "character" } - writeString(con, elemType) + writeType(con, elemType) writeInt(con, length(arr)) if (length(arr) > 0) { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 67277ed0285c7..449980f53b9db 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -8,24 +8,29 @@ import java.io.DataOutputStream object SerializeJavaR { + def readObjectType(dis: DataInputStream) = { + dis.readByte().toChar + } + def readObject(dis: DataInputStream, objMap: HashMap[String, Object]): Object = { - val dataType = readString(dis) - readObjectType(dis, objMap, dataType) + val dataType = readObjectType(dis) + readTypedObject(dis, objMap, dataType) } - def readObjectType( + def readTypedObject( dis: DataInputStream, objMap: HashMap[String, Object], - dataType: String): Object = { + dataType: Char): Object = { dataType match { - case "integer" => new java.lang.Integer(readInt(dis)) - case "numeric" | "double" => new java.lang.Double(readDouble(dis)) - case "logical" => new java.lang.Boolean(readBoolean(dis)) - case "character" => readString(dis) - case "environment" => readMap(dis, objMap) - case "raw" => readBytes(dis) - case "list" => readList(dis, objMap) - case "jobj" => objMap(readString(dis)) + case 'i' => new java.lang.Integer(readInt(dis)) + case 'd' => new java.lang.Double(readDouble(dis)) + case 'b' => new java.lang.Boolean(readBoolean(dis)) + case 'c' => readString(dis) + case 'e' => readMap(dis, objMap) + case 'r' => readBytes(dis) + case 'l' => readList(dis, objMap) + case 'j' => objMap(readString(dis)) + case _ => throw new IllegalArgumentException(s"Invalid type $dataType") } } @@ -84,14 +89,14 @@ object SerializeJavaR { } def readList(dis: DataInputStream, objMap: HashMap[String, Object]) = { - val arrType = readString(dis) + val arrType = readObjectType(dis) arrType match { - case "integer" => readIntArr(dis) - case "character" => readStringArr(dis) - case "double" => readDoubleArr(dis) - case "logical" => readBooleanArr(dis) - case "jobj" => readStringArr(dis).map(x => objMap(x)) - case "raw" => readBytesArr(dis) + case 'i' => readIntArr(dis) + case 'c' => readStringArr(dis) + case 'd' => readDoubleArr(dis) + case 'l' => readBooleanArr(dis) + case 'j' => readStringArr(dis).map(x => objMap(x)) + case 'r' => readBytesArr(dis) case _ => throw new IllegalArgumentException(s"Invalid array type $arrType") } } @@ -101,13 +106,13 @@ object SerializeJavaR { objMap: HashMap[String, Object]): java.util.Map[Object, Object] = { val len = readInt(in) if (len > 0) { - val typeStr = readString(in) + val keysType = readObjectType(in) val keysLen = readInt(in) - val keys = (0 until keysLen).map(_ => readObjectType(in, objMap, typeStr)) + val keys = (0 until keysLen).map(_ => readTypedObject(in, objMap, keysType)) - val valuesType = readString(in) + val valuesType = readObjectType(in) val valuesLen = readInt(in) - val values = (0 until len).map(_ => readObjectType(in, objMap, typeStr)) + val values = (0 until len).map(_ => readTypedObject(in, objMap, valuesType)) mapAsJavaMap(keys.zip(values).toMap) } else { new java.util.HashMap[Object, Object]() @@ -221,6 +226,7 @@ object SerializeJavaR { Integer.toHexString(System.identityHashCode(value)) objMap.put(objId, value) writeString(out, objId) + System.err.println(s"New java object $objId") } def writeIntArr(out: DataOutputStream, value: Array[Int]) { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index d525fb835f56d..491c6672363c5 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -43,9 +43,10 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa } case "rm" => { try { - val t = readString(dis) - assert(t == "character") + val t = readObjectType(dis) + assert(t == 'c') val objToRemove = readString(dis) + System.err.println(s"Remove java object $objToRemove") objMap.remove(objToRemove) writeInt(dos, 0) writeObject(dos, null, objMap) From bace887ffb7f6d002371c3e349e90e2fbe4263da Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 20 Jan 2015 18:03:01 +0800 Subject: [PATCH 332/687] Use an integer count for the backend java object ID because Uniqueness isn't guaranteed by System.identityHashCode(). --- .../edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala | 7 ++++--- .../berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 449980f53b9db..79b8c6863652a 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -7,6 +7,8 @@ import java.io.DataInputStream import java.io.DataOutputStream object SerializeJavaR { + // We supports only one connection now, so no need to use atomic integer. + var objCounter: Int = 0 def readObjectType(dis: DataInputStream) = { dis.readByte().toChar @@ -222,11 +224,10 @@ object SerializeJavaR { } def writeJObj(out: DataOutputStream, value: Object, objMap: HashMap[String, Object]) { - val objId = value.getClass().getName() + "@" + - Integer.toHexString(System.identityHashCode(value)) + val objId = value.getClass().getName() + "@" + objCounter + objCounter = objCounter + 1 objMap.put(objId, value) writeString(out, objId) - System.err.println(s"New java object $objId") } def writeIntArr(out: DataOutputStream, value: Array[Int]) { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 491c6672363c5..fa38a9bbb621c 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -46,7 +46,6 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val t = readObjectType(dis) assert(t == 'c') val objToRemove = readString(dis) - System.err.println(s"Remove java object $objToRemove") objMap.remove(objToRemove) writeInt(dos, 0) writeObject(dos, null, objMap) From 7ad4a4dd242a9c29081f780415a8c2eade1dff9c Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 20 Jan 2015 18:47:46 +0800 Subject: [PATCH 333/687] Use 1 char to represent types on the backend->client direction. --- pkg/R/deserialize.R | 36 ++++++------ .../cs/amplab/sparkr/SerializeJavaR.scala | 56 ++++++++++++------- .../amplab/sparkr/SparkRBackendHandler.scala | 3 +- 3 files changed, 56 insertions(+), 39 deletions(-) diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index 287247815adf6..26f6d0f726247 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -18,33 +18,37 @@ readBoolean <- function(con) { as.logical(readInt(con)) } +readType <- function(con) { + rawToChar(readBin(con, "raw", n = 1L)) +} + readObject <- function(con) { # Read type first - type <- readString(con) - readObjectType(con, type) + type <- readType(con) + readTypedObject(con, type) } -readObjectType <- function(con, type) { +readTypedObject <- function(con, type) { switch (type, - integer = readInt(con), - character = readString(con), - logical = readBoolean(con), - double = readDouble(con), - raw = readRaw(con), - vector = readVector(con), - list = readList(con), - void = NULL, - jobj = getJobj(readString(con)), + "i" = readInt(con), + "c" = readString(con), + "b" = readBoolean(con), + "d" = readDouble(con), + "r" = readRaw(con), + "v" = readVector(con), + "l" = readList(con), + "n" = NULL, + "j" = getJobj(readString(con)), stop("Unsupported type for deserialization")) } # TODO: We don't use readVector as it is tricky # to assembly array of raw objects. Delete this ? readVector <- function(con) { - type <- readString(con) + type <- readType(con) len <- readInt(con) if (length > 0) { - sapply(1:len, readObjectType(con, type)) + sapply(1:len, readTypedObject(con, type)) } else { vector(mode=type) } @@ -52,12 +56,12 @@ readVector <- function(con) { # We only support lists where all elements are of same type readList <- function(con) { - type <- readString(con) + type <- readType(con) len <- readInt(con) if (len > 0) { l <- vector("list", len) for (i in 1:len) { - l[[i]] <- readObjectType(con, type) + l[[i]] <- readTypedObject(con, type) } l } else { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 79b8c6863652a..81df3f6eac655 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -123,33 +123,47 @@ object SerializeJavaR { /// Methods to write out data from Java to R + def writeType(dos: DataOutputStream, typeStr: String) { + typeStr match { + case "void" => dos.writeByte('n') + case "character" => dos.writeByte('c') + case "double" => dos.writeByte('d') + case "integer" => dos.writeByte('i') + case "logical" => dos.writeByte('b') + case "raw" => dos.writeByte('r') + case "list" => dos.writeByte('l') + case "jobj" => dos.writeByte('j') + case _ => throw new IllegalArgumentException(s"Invalid type $typeStr") + } + } + def writeObject(dos: DataOutputStream, value: Object, objMap: HashMap[String, Object]) { if (value == null) { - writeString(dos, "void") + writeType(dos, "void") } else { value.getClass.getName match { case "java.lang.String" => { - writeString(dos, "character") + writeType(dos, "character") writeString(dos, value.asInstanceOf[String]) } case "long" | "java.lang.Long" => { - writeString(dos, "double") + writeType(dos, "double") writeDouble(dos, value.asInstanceOf[Long].toDouble) } case "double" | "java.lang.Double" => { - writeString(dos, "double") + writeType(dos, "double") writeDouble(dos, value.asInstanceOf[Double]) } case "int" | "java.lang.Integer" => { - writeString(dos, "integer") + writeType(dos, "integer") writeInt(dos, value.asInstanceOf[Int]) } case "boolean" | "java.lang.Boolean" => { - writeString(dos, "logical") + writeType(dos, "logical") writeBoolean(dos, value.asInstanceOf[Boolean]) } case "[B" => { - writeString(dos, "raw") + writeType(dos, "raw") writeBytes(dos, value.asInstanceOf[Array[Byte]]) } // TODO: Types not handled right now include @@ -157,39 +171,39 @@ object SerializeJavaR { // Handle arrays case "[Ljava.lang.String;" => { - writeString(dos, "list") + writeType(dos, "list") writeStringArr(dos, value.asInstanceOf[Array[String]]) } case "[I" => { - writeString(dos, "list") + writeType(dos, "list") writeIntArr(dos, value.asInstanceOf[Array[Int]]) } case "[J" => { - writeString(dos, "list") + writeType(dos, "list") writeDoubleArr(dos, value.asInstanceOf[Array[Long]].map(_.toDouble)) } case "[D" => { - writeString(dos, "list") + writeType(dos, "list") writeDoubleArr(dos, value.asInstanceOf[Array[Double]]) } case "[Z" => { - writeString(dos, "list") + writeType(dos, "list") writeBooleanArr(dos, value.asInstanceOf[Array[Boolean]]) } case "[[B" => { - writeString(dos, "list") + writeType(dos, "list") writeBytesArr(dos, value.asInstanceOf[Array[Array[Byte]]]) } case _ => { // Handle array of objects if (value.getClass().getName().startsWith("[L")) { val objArr = value.asInstanceOf[Array[Object]] - writeString(dos, "list") - writeString(dos, "jobj") + writeType(dos, "list") + writeType(dos, "jobj") dos.writeInt(objArr.length) objArr.foreach(o => writeJObj(dos, o, objMap)) } else { - writeString(dos, "jobj") + writeType(dos, "jobj") writeJObj(dos, value, objMap) } } @@ -231,31 +245,31 @@ object SerializeJavaR { } def writeIntArr(out: DataOutputStream, value: Array[Int]) { - writeString(out, "integer") + writeType(out, "integer") out.writeInt(value.length) value.foreach(v => out.writeInt(v)) } def writeDoubleArr(out: DataOutputStream, value: Array[Double]) { - writeString(out, "double") + writeType(out, "double") out.writeInt(value.length) value.foreach(v => out.writeDouble(v)) } def writeBooleanArr(out: DataOutputStream, value: Array[Boolean]) { - writeString(out, "logical") + writeType(out, "logical") out.writeInt(value.length) value.foreach(v => writeBoolean(out, v)) } def writeStringArr(out: DataOutputStream, value: Array[String]) { - writeString(out, "character") + writeType(out, "character") out.writeInt(value.length) value.foreach(v => writeString(out, v)) } def writeBytesArr(out: DataOutputStream, value: Array[Array[Byte]]) { - writeString(out, "raw") + writeType(out, "raw") out.writeInt(value.length) value.foreach(v => writeBytes(out, v)) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index fa38a9bbb621c..4718e4e84e165 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -37,8 +37,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa case "stopBackend" => { // dos.write(0) writeInt(dos, 0) - writeString(dos, "character") - writeString(dos, "void") + writeType(dos, "void") server.close() } case "rm" => { From 74dbc5e71145c84a4c38812530ca2a5433bde29b Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 20 Jan 2015 22:21:19 +0800 Subject: [PATCH 334/687] Match method using parameter types. --- .../amplab/sparkr/SparkRBackendHandler.scala | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 4718e4e84e165..07006196f2729 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -94,15 +94,14 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa } } + val args = readArgs(numArgs, dis) + val methods = cls.get.getMethods() - // TODO: We only use first method with the same name val selectedMethods = methods.filter(m => m.getName() == methodName) if (selectedMethods.length > 0) { val selectedMethod = selectedMethods.filter { x => - x.getParameterTypes().length == numArgs + matchMethod(numArgs, args, x.getParameterTypes()) }.head - val argTypes = selectedMethod.getParameterTypes() - val args = parseArgs(argTypes, dis) val ret = selectedMethod.invoke(obj, args:_*) @@ -111,14 +110,11 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa writeObject(dos, ret.asInstanceOf[AnyRef], objMap) } else if (methodName == "new") { // methodName should be "new" for constructor - // TODO: We only use the first constructor ? val ctor = cls.get.getConstructors().filter { x => - x.getParameterTypes().length == numArgs + matchMethod(numArgs, args, x.getParameterTypes()) }.head - val argTypes = ctor.getParameterTypes() - val params = parseArgs(argTypes, dis) - val obj = ctor.newInstance(params:_*) + val obj = ctor.newInstance(args:_*) writeInt(dos, 0) writeObject(dos, obj.asInstanceOf[AnyRef], objMap) @@ -134,11 +130,35 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa } } - def parseArgs(argTypes: Array[Class[_]], dis: DataInputStream): Array[java.lang.Object] = { - // TODO: Check each parameter type to the R provided type - argTypes.map { arg => - readObject(dis, objMap) - }.toArray + def readArgs(numArgs: Int, dis: DataInputStream): Array[java.lang.Object] = { + val args = new Array[java.lang.Object](numArgs) + for (i <- 0 to numArgs - 1) { + args(i) = readObject(dis, objMap) + } + args } + def matchMethod(numArgs: Int, args: Array[java.lang.Object], parameterTypes: Array[Class[_]]): Boolean = { + if (parameterTypes.length != numArgs) { + return false + } + // Currently we do exact match. We may add type conversion later. + for (i <- 0 to numArgs - 1) { + val parameterType = parameterTypes(i) + var parameterWrapperType = parameterType + + if (parameterType.isPrimitive()) { + parameterWrapperType = parameterType match { + case java.lang.Integer.TYPE => classOf[java.lang.Integer] + case java.lang.Double.TYPE => classOf[java.lang.Double] + case java.lang.Boolean.TYPE => classOf[java.lang.Boolean] + case _ => parameterType + } + } + if(!parameterWrapperType.isInstance(args(i))) { + return false + } + } + return true + } } From 95db964dcfb0122f3686a49a47d061011a2d3f57 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 21 Jan 2015 14:46:13 -0800 Subject: [PATCH 335/687] Add comments, cleanup new R code --- pkg/R/deserialize.R | 65 +++++++++++++++++++++---------------------- pkg/R/serialize.R | 61 +++++++++++++++++++++++----------------- pkg/R/sparkR.R | 13 +++++++-- pkg/R/sparkRBackend.R | 36 ++++++++---------------- pkg/R/sparkRClient.R | 3 +- 5 files changed, 90 insertions(+), 88 deletions(-) diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index 26f6d0f726247..264368f326f1b 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -1,26 +1,16 @@ -# Utility functions to serialize, deserialize etc. +# Utility functions to deserialize objects from Java. -readString <- function(con) { - stringLen <- readInt(con) - string <- readBin(con, raw(), stringLen, endian="big") - rawToChar(string) -} - -readInt <- function(con) { - readBin(con, integer(), n = 1, endian="big") -} - -readDouble <- function(con) { - readBin(con, double(), n = 1, endian="big") -} - -readBoolean <- function(con) { - as.logical(readInt(con)) -} - -readType <- function(con) { - rawToChar(readBin(con, "raw", n = 1L)) -} +# Type mapping from Java to R +# +# void -> NULL +# Int -> integer +# String -> character +# Boolean -> logical +# Double -> numeric / double +# Array[Byte] -> raw +# +# Array[T] -> list() +# Object -> jobj readObject <- function(con) { # Read type first @@ -35,23 +25,32 @@ readTypedObject <- function(con, type) { "b" = readBoolean(con), "d" = readDouble(con), "r" = readRaw(con), - "v" = readVector(con), "l" = readList(con), "n" = NULL, "j" = getJobj(readString(con)), stop("Unsupported type for deserialization")) } -# TODO: We don't use readVector as it is tricky -# to assembly array of raw objects. Delete this ? -readVector <- function(con) { - type <- readType(con) - len <- readInt(con) - if (length > 0) { - sapply(1:len, readTypedObject(con, type)) - } else { - vector(mode=type) - } +readString <- function(con) { + stringLen <- readInt(con) + string <- readBin(con, raw(), stringLen, endian="big") + rawToChar(string) +} + +readInt <- function(con) { + readBin(con, integer(), n = 1, endian="big") +} + +readDouble <- function(con) { + readBin(con, double(), n = 1, endian="big") +} + +readBoolean <- function(con) { + as.logical(readInt(con)) +} + +readType <- function(con) { + rawToChar(readBin(con, "raw", n = 1L)) } # We only support lists where all elements are of same type diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index f9ac3a7222b07..60f3ee364f934 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -1,4 +1,36 @@ -# Utility functions to serialize, deserialize etc. +# Utility functions to serialize R objects so they can be read in Java. + +# Type mapping from R to Java +# +# integer -> Int +# character -> String +# logical -> Boolean +# double, numeric -> Double +# raw -> Array[Byte] +# +# list[T] -> Array[T], where T is one of above mentioned types +# environment -> Map[String, T], where T is a native type +# jobj -> Object, where jobj is an object created in the backend + +writeObject <- function(con, object, withType = TRUE) { + # NOTE: In R vectors have same type as objects. So we don't support + # passing in vectors as arrays and instead require arrays to be passed + # as lists. + if (withType) { + writeType(con, class(object)) + } + switch(class(object), + integer = writeInt(con, object), + character = writeString(con, object), + logical = writeBoolean(con, object), + double = writeDouble(con, object), + numeric = writeDouble(con, object), + raw = writeRaw(con, object), + list = writeList(con, object), + jobj = writeString(con, object$id), + environment = writeEnv(con, object), + stop("Unsupported type for serialization")) +} writeString <- function(con, value) { writeInt(con, as.integer(nchar(value) + 1)) @@ -43,27 +75,7 @@ writeType <- function(con, class) { writeBin(charToRaw(type), con) } -writeObject <- function(con, object, withType = TRUE) { - # In R vectors have same type as objects. So check if this is a vector - # and if so just call writeVector - # TODO: Should we just throw an exception here instead ? - if (withType) { - writeType(con, class(object)) - } - switch(class(object), - integer = writeInt(con, object), - character = writeString(con, object), - logical = writeBoolean(con, object), - double = writeDouble(con, object), - numeric = writeDouble(con, object), - raw = writeRaw(con, object), - list = writeList(con, object), - jobj = writeString(con, object$id), - environment = writeEnv(con, object), - stop("Unsupported type for serialization")) -} - -# Used to pass arrays +# Used to pass arrays where all the elements are of the same type writeList <- function(con, arr) { # All elements should be of same type elemType <- unique(sapply(arr, function(elem) { class(elem) })) @@ -84,10 +96,7 @@ writeList <- function(con, arr) { } } -# Used to pass named lists as hash maps and lists as vectors -# -# We don't support pass in heterogenous lists. -# Note that all the elements of the list should be of same type +# Used to pass in hash maps required on Java side. writeEnv <- function(con, env) { len <- length(env) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index ac0f3051b8cc0..c7bdd6f8de732 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -16,7 +16,12 @@ sparkR.onLoad <- function(libname, pkgname) { sparkR.stop <- function(sparkREnv) { sc <- get(".sparkRjsc", envir=.sparkREnv) callJMethod(sc, "stop") - stopBackend() + callJStatic("SparkRHandler", "stopBackend") + + # Also close the connection and remove it from our env + conn <- get(".sparkRCon", .sparkREnv) + close(conn) + rm(".sparkRCon", envir=.sparkREnv) } #' Initialize a new Spark Context. @@ -64,7 +69,7 @@ sparkR.init <- function( launchBackend(classPath=cp, mainClass="edu.berkeley.cs.amplab.sparkr.SparkRBackend", args="12345", javaOpts=paste("-Xmx", sparkMem, sep="")) Sys.sleep(2) # Wait for backend to come up - init("localhost", 12345) # Connect to it + connectBackend("localhost", 12345) # Connect to it if (nchar(sparkHome) != 0) { sparkHome <- normalizePath(sparkHome) @@ -95,7 +100,9 @@ sparkR.init <- function( assign( ".sparkRjsc", - createSparkContext( + callJStatic( + className="edu.berkeley.cs.amplab.sparkr.RRDD", + methodName="createSparkContext", master, appName, as.character(sparkHome), diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index 2f572da6bf707..88b6b4db776cc 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -1,43 +1,25 @@ # Methods to call into SparkRBackend. -# - -createSparkContext <- function( - master, - appName, - sparkHome, - jars=list(), - sparkEnvirMap=new.env(), - sparkExecutorEnvMap=new.env()) { - - invokeJava( - isStatic=TRUE, - objId="edu.berkeley.cs.amplab.sparkr.RRDD", - methodName="createSparkContext", - master, appName, sparkHome, jars, sparkEnvirMap, sparkExecutorEnvMap) -} - -stopBackend <- function() { - invokeJava(TRUE, "SparkRHandler", "stopBackend") - - # Also close the connection and remove it from our env - conn <- get(".sparkRCon", .sparkREnv) - close(conn) - rm(".sparkRCon", envir=.sparkREnv) -} +# Call a Java method named methodName on the object +# specified by objId. objId should be a "jobj" returned +# from the SparkRBackend. callJMethod <- function(objId, methodName, ...) { stopifnot(class(objId) == "jobj") invokeJava(isStatic=FALSE, objId, methodName, ...) } +# Call a static method on a specified className callJStatic <- function(className, methodName, ...) { invokeJava(isStatic=TRUE, className, methodName, ...) } +# Create a new object of the specified class name newJObject <- function(className, ...) { invokeJava(isStatic=TRUE, className, methodName="new", ...) } +# Remove an object from the SparkR backend. This is done +# automatically when a jobj is garbage collected. removeJObject <- function(objId) { invokeJava(isStatic=TRUE, "SparkRHandler", "rm", objId) } @@ -46,6 +28,10 @@ isRemoveMethod <- function(isStatic, objId, methodName) { isStatic == TRUE && objId == "SparkRHandler" && methodName == "rm" } +# Invoke a Java method on the SparkR backend. Users +# should typically use one of the higher level methods like +# callJMethod, callJStatic etc. instead of using this. +# # If isStatic is true, objId contains className otherwise # it should contain a jobj returned previously by the backend invokeJava <- function(isStatic, objId, methodName, ...) { diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 55aa59c8da1a9..32996fbadaec9 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -2,7 +2,7 @@ # Creates a SparkR client connection object # if one doesn't already exist -init <- function(hostname, port, timeout=60) { +connectBackend <- function(hostname, port, timeout=60) { if (exists(".sparkRcon", envir=.sparkREnv)) { cat("SparkRBackend client connection already exists\n") return(get(".sparkRcon", envir=.sparkREnv)) @@ -15,6 +15,7 @@ init <- function(hostname, port, timeout=60) { get(".sparkRCon", envir=.sparkREnv) } +# Launch the SparkR backend using a call to 'system'. launchBackend <- function( classPath, mainClass, From 0873397236cd686311a28bdd25068e256b762a57 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 21 Jan 2015 14:49:07 -0800 Subject: [PATCH 336/687] Refactor java object tracking into a new singleton. Also add comments describing each class --- .../cs/amplab/sparkr/SerializeJavaR.scala | 66 +++++++++++------ .../cs/amplab/sparkr/SparkRBackend.scala | 9 +-- .../amplab/sparkr/SparkRBackendHandler.scala | 71 +++++++++++++++---- .../cs/amplab/sparkr/SparkRConf.scala | 4 ++ 4 files changed, 108 insertions(+), 42 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 81df3f6eac655..46a654c352032 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -6,32 +6,44 @@ import scala.collection.JavaConversions._ import java.io.DataInputStream import java.io.DataOutputStream +/** + * Utility functions to serialize, deserialize objects to / from R + */ object SerializeJavaR { - // We supports only one connection now, so no need to use atomic integer. - var objCounter: Int = 0 + + // Type mapping from R to Java + // + // integer -> Int + // character -> String + // logical -> Boolean + // double, numeric -> Double + // raw -> Array[Byte] + // + // list[T] -> Array[T], where T is one of above mentioned types + // environment -> Map[String, T], where T is a native type + // jobj -> Object, where jobj is an object created in the backend def readObjectType(dis: DataInputStream) = { dis.readByte().toChar } - def readObject(dis: DataInputStream, objMap: HashMap[String, Object]): Object = { + def readObject(dis: DataInputStream): Object = { val dataType = readObjectType(dis) - readTypedObject(dis, objMap, dataType) + readTypedObject(dis, dataType) } def readTypedObject( dis: DataInputStream, - objMap: HashMap[String, Object], dataType: Char): Object = { dataType match { case 'i' => new java.lang.Integer(readInt(dis)) case 'd' => new java.lang.Double(readDouble(dis)) case 'b' => new java.lang.Boolean(readBoolean(dis)) case 'c' => readString(dis) - case 'e' => readMap(dis, objMap) + case 'e' => readMap(dis) case 'r' => readBytes(dis) - case 'l' => readList(dis, objMap) - case 'j' => objMap(readString(dis)) + case 'l' => readList(dis) + case 'j' => JavaObjectTracker.getObject(readString(dis)) case _ => throw new IllegalArgumentException(s"Invalid type $dataType") } } @@ -90,38 +102,48 @@ object SerializeJavaR { (0 until len).map(_ => readString(in)).toArray } - def readList(dis: DataInputStream, objMap: HashMap[String, Object]) = { + def readList(dis: DataInputStream) = { val arrType = readObjectType(dis) arrType match { case 'i' => readIntArr(dis) case 'c' => readStringArr(dis) case 'd' => readDoubleArr(dis) case 'l' => readBooleanArr(dis) - case 'j' => readStringArr(dis).map(x => objMap(x)) + case 'j' => readStringArr(dis).map(x => JavaObjectTracker.getObject(x)) case 'r' => readBytesArr(dis) case _ => throw new IllegalArgumentException(s"Invalid array type $arrType") } } - def readMap( - in: DataInputStream, - objMap: HashMap[String, Object]): java.util.Map[Object, Object] = { + def readMap(in: DataInputStream): java.util.Map[Object, Object] = { val len = readInt(in) if (len > 0) { val keysType = readObjectType(in) val keysLen = readInt(in) - val keys = (0 until keysLen).map(_ => readTypedObject(in, objMap, keysType)) + val keys = (0 until keysLen).map(_ => readTypedObject(in, keysType)) val valuesType = readObjectType(in) val valuesLen = readInt(in) - val values = (0 until len).map(_ => readTypedObject(in, objMap, valuesType)) + val values = (0 until len).map(_ => readTypedObject(in, valuesType)) mapAsJavaMap(keys.zip(values).toMap) } else { new java.util.HashMap[Object, Object]() } } - /// Methods to write out data from Java to R + // Methods to write out data from Java to R + // + // Type mapping from Java to R + // + // void -> NULL + // Int -> integer + // String -> character + // Boolean -> logical + // Double -> numeric / double + // Array[Byte] -> raw + // + // Array[T] -> list() + // Object -> jobj def writeType(dos: DataOutputStream, typeStr: String) { typeStr match { @@ -137,7 +159,7 @@ object SerializeJavaR { } } - def writeObject(dos: DataOutputStream, value: Object, objMap: HashMap[String, Object]) { + def writeObject(dos: DataOutputStream, value: Object) { if (value == null) { writeType(dos, "void") } else { @@ -201,10 +223,10 @@ object SerializeJavaR { writeType(dos, "list") writeType(dos, "jobj") dos.writeInt(objArr.length) - objArr.foreach(o => writeJObj(dos, o, objMap)) + objArr.foreach(o => writeJObj(dos, o)) } else { writeType(dos, "jobj") - writeJObj(dos, value, objMap) + writeJObj(dos, value) } } } @@ -237,10 +259,8 @@ object SerializeJavaR { out.write(value) } - def writeJObj(out: DataOutputStream, value: Object, objMap: HashMap[String, Object]) { - val objId = value.getClass().getName() + "@" + objCounter - objCounter = objCounter + 1 - objMap.put(objId, value) + def writeJObj(out: DataOutputStream, value: Object) { + val objId = JavaObjectTracker.put(value) writeString(out, objId) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index 907f6009a532b..69d3f942932e9 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -1,9 +1,7 @@ package edu.berkeley.cs.amplab.sparkr -import java.io._ -import java.net._ -import java.util.{Map => JMap} -import java.util.concurrent.Executors +import java.io.IOException +import java.net.InetSocketAddress import java.util.concurrent.TimeUnit import io.netty.bootstrap.ServerBootstrap @@ -19,6 +17,9 @@ import io.netty.handler.codec.bytes.ByteArrayDecoder import io.netty.handler.codec.bytes.ByteArrayEncoder import io.netty.handler.codec.LengthFieldBasedFrameDecoder +/** + * Netty-based backend server that is used to communicate between R and Java. + */ class SparkRBackend() { var channelFuture: ChannelFuture = null diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 07006196f2729..90249483e0a9b 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -1,7 +1,11 @@ package edu.berkeley.cs.amplab.sparkr import scala.collection.mutable.HashMap -import java.io._ + +import java.io.ByteArrayInputStream +import java.io.ByteArrayOutputStream +import java.io.DataInputStream +import java.io.DataOutputStream import io.netty.channel.ChannelHandler.Sharable import io.netty.channel.ChannelHandlerContext @@ -17,8 +21,6 @@ import edu.berkeley.cs.amplab.sparkr.SerializeJavaR._ @Sharable class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHandler[Array[Byte]] { - val objMap = new HashMap[String, Object] - override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { val bis = new ByteArrayInputStream(msg) val dis = new DataInputStream(bis) @@ -45,9 +47,9 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val t = readObjectType(dis) assert(t == 'c') val objToRemove = readString(dis) - objMap.remove(objToRemove) + JavaObjectTracker.remove(objToRemove) writeInt(dos, 0) - writeObject(dos, null, objMap) + writeObject(dos, null) } catch { case e: Exception => { System.err.println(s"Removing $objId failed with " + e) @@ -85,7 +87,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa if (isStatic) { cls = Some(Class.forName(objId)) } else { - objMap.get(objId) match { + JavaObjectTracker.get(objId) match { case None => throw new IllegalArgumentException("Object not found " + objId) case Some(o) => { cls = Some(o.getClass) @@ -107,7 +109,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa // Write status bit writeInt(dos, 0) - writeObject(dos, ret.asInstanceOf[AnyRef], objMap) + writeObject(dos, ret.asInstanceOf[AnyRef]) } else if (methodName == "new") { // methodName should be "new" for constructor val ctor = cls.get.getConstructors().filter { x => @@ -117,7 +119,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val obj = ctor.newInstance(args:_*) writeInt(dos, 0) - writeObject(dos, obj.asInstanceOf[AnyRef], objMap) + writeObject(dos, obj.asInstanceOf[AnyRef]) } else { throw new IllegalArgumentException("invalid method " + methodName + " for object " + objId) } @@ -130,19 +132,23 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa } } + // Read a number of arguments from the data input stream def readArgs(numArgs: Int, dis: DataInputStream): Array[java.lang.Object] = { - val args = new Array[java.lang.Object](numArgs) - for (i <- 0 to numArgs - 1) { - args(i) = readObject(dis, objMap) - } - args + (0 until numArgs).map { arg => + readObject(dis) + }.toArray } - def matchMethod(numArgs: Int, args: Array[java.lang.Object], parameterTypes: Array[Class[_]]): Boolean = { + // Checks if the arguments passed in args matches the parameter types. + // NOTE: Currently we do exact match. We may add type conversions later. + def matchMethod( + numArgs: Int, + args: Array[java.lang.Object], + parameterTypes: Array[Class[_]]): Boolean = { if (parameterTypes.length != numArgs) { return false } - // Currently we do exact match. We may add type conversion later. + for (i <- 0 to numArgs - 1) { val parameterType = parameterTypes(i) var parameterWrapperType = parameterType @@ -162,3 +168,38 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa return true } } + +/** + * Helper singleton that tracks Java objects returned to R. + * This is useful for referencing these objects in RPC calls. + */ +object JavaObjectTracker { + + // TODO: This map should be thread-safe if we want to support multiple + // connections at the same time + val objMap = new HashMap[String, Object] + + // TODO: We support only one connection now, so an integer is fine. + // Investiage using use atomic integer in the future. + var objCounter: Int = 0 + + def getObject(id: String): Object = { + objMap(id) + } + + def get(id: String): Option[Object] = { + objMap.get(id) + } + + def put(obj: Object): String = { + val objId = obj.getClass().getName() + "@" + objCounter + objCounter = objCounter + 1 + objMap.put(objId, obj) + objId + } + + def remove(id: String): Option[Object] = { + objMap.remove(id) + } + +} diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala index 481e7e592502a..9aa5e1b3164eb 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala @@ -1,5 +1,8 @@ package edu.berkeley.cs.amplab.sparkr +/** + * Configuration options for SparkRBackend server + */ object SparkRConf { def getSystemProperty(name: String, default: String) = { @@ -10,5 +13,6 @@ object SparkRConf { Integer.parseInt(getSystemProperty(name, default.toString)) } + // Number of threads to use in the Netty server val numServerThreads = getIntProperty("sparkr.backend.threads", 2) } From 8b9c4e68a3a6e9e83a2121e6f9046dfd3ffcefbf Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 21 Jan 2015 14:55:46 -0800 Subject: [PATCH 337/687] Change RDD name, setName to use new backend --- pkg/R/RDD.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 902878999c964..dfd74f4ad7da6 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1963,7 +1963,7 @@ setGeneric("name", function(rdd) { standardGeneric("name") }) setMethod("name", signature(rdd = "RDD"), function(rdd) { - .jcall(getJRDD(rdd), "Ljava/lang/String;", "name") + callJMethod(getJRDD(rdd), "name") }) #' Set an RDD's name. @@ -1987,6 +1987,6 @@ setGeneric("setName", function(rdd, name) { standardGeneric("setName") }) setMethod("setName", signature(rdd = "RDD", name = "character"), function(rdd, name) { - .jcall(getJRDD(rdd), "Lorg/apache/spark/api/java/JavaRDD;", "setName", name) + callJMethod(getJRDD(rdd), "setName", name) rdd }) From 62f380b2e246cb7cffdff21e23533d161af5d387 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 21 Jan 2015 15:13:05 -0800 Subject: [PATCH 338/687] Update worker.R to use new deserialization call --- pkg/inst/worker/worker.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 8b3c24106a581..c5457adcbc54d 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -42,7 +42,7 @@ for (pkg in packageNames) { } # read function dependencies -depsLen <- readInt(inputCon) +depsLen <- SparkR:::readInt(inputCon) if (depsLen > 0) { execFunctionDeps <- SparkR:::readRawLen(inputCon, depsLen) # load the dependencies into current environment From e7a4e0367bf52bc4aa85028ef5db4a7011caa4e7 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 21 Jan 2015 15:15:33 -0800 Subject: [PATCH 339/687] Remove unused file BACKEND.md --- BACKEND.md | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 BACKEND.md diff --git a/BACKEND.md b/BACKEND.md deleted file mode 100644 index 512b2582d9e49..0000000000000 --- a/BACKEND.md +++ /dev/null @@ -1,44 +0,0 @@ -### Notes and TODOs for SparkR Backend - -- Handle stderr, stdout of Java program better. We shouldn't probably put them on the shell, - but we need some way for users to look at the messages. -- Send back the reply length as the first field in the reply. - Enforce somehow that the second field should be the error code. Also we should add support - to capture exceptions and send them in the reply. - -Future work -- Can we refactor the serializers to have a more visitor-like pattern ? - That will enable serializing UDFs etc. from R to Java and back. - - -### To try out the new Spark Context, run something like - -``` -./install-dev.sh -library(SparkR, lib.loc="./lib") -SparkR:::launchBackend("./pkg/src/target/scala-2.10/sparkr-assembly-0.1.jar", - "edu.berkeley.cs.amplab.sparkr.SparkRBackend", "12345") -Sys.sleep(5) -con <- SparkR:::init("localhost", 12345) -s <- SparkR:::createSparkContext("local", "SparkRJavaExpt", "", - list("./pkg/src/target/scala-2.10/sparkr-assembly-0.1.jar")) - -# TextFile, cache, count -jrdd <- SparkR:::callJMethod(s, "textFile", "README.md", 2L) -jl <- SparkR:::callJMethod(jrdd, "count") # Should be 128 -jrddCached <- SparkR:::callJMethod(jrdd, "cache") -jl <- SparkR:::callJMethod(jrdd, "count") # Should show up on WebUI now - -# Try out .jnew like call -hp <- SparkR:::newJava("org.apache.spark.HashPartitioner", 2L) - -# Try out collect in steps -crs <- SparkR:::callJMethod(jrdd, "collect") -SparkR:::callJMethod(crs, "get", 2L) - -# Stop backend -SparkR:::stopBackend() - -# You should be able to go to localhost:4041 and see a SparkRJavaExpt as the app name -``` -~ From 396e7ac4a139d694fd40c0d2cc01d9cb1a5c2c94 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 21 Jan 2015 18:04:50 -0800 Subject: [PATCH 340/687] Changes to make new backend work on Windows This change uses file.path to construct the Java binary path in a OS agnostic way and uses system2 to handle quoting binary paths correctly. Tests pass on Mac OSX and a Windows EC2 instance. --- pkg/R/sparkRClient.R | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 32996fbadaec9..c5f9f1f5098d2 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -22,12 +22,18 @@ launchBackend <- function( args, javaOpts="-Xms2g -Xmx2g", javaHome=Sys.getenv("JAVA_HOME")) { + if (.Platform$OS.type == "unix") { + java_bin_name = "java" + } else { + java_bin_name = "java.exe" + } + if (javaHome != "") { - java_bin <- paste(javaHome, "bin", "java", sep="/") + java_bin <- file.path(javaHome, "bin", java_bin_name) } else { - java_bin <- "java" + java_bin <- java_bin_name } - command <- paste(java_bin, javaOpts, "-cp", classPath, mainClass, args, sep=" ") - cat("Launching java with command ", command, "\n") - invisible(system(command, intern=FALSE, ignore.stdout=F, ignore.stderr=F, wait=F)) + combinedArgs <- paste(javaOpts, "-cp", classPath, mainClass, args, sep=" ") + cat("Launching java with command ", java_bin, " ", combinedArgs, "\n") + invisible(system2(java_bin, combinedArgs, wait=F)) } From d596a2389e532f204bcfa3494ea699ec62a9884c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 22 Jan 2015 10:52:08 -0800 Subject: [PATCH 341/687] Address code review comments --- pkg/R/RDD.R | 6 ++++-- pkg/R/sparkR.R | 19 ++++++++++--------- pkg/R/sparkRBackend.R | 2 +- .../cs/amplab/sparkr/SerializeJavaR.scala | 1 + .../amplab/sparkr/SparkRBackendHandler.scala | 5 ++--- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index dfd74f4ad7da6..e6e4cc66a1f4e 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -19,7 +19,9 @@ getJobj <- function(objId) { # Handler for a java object that exists on the backend. jobj <- function(objId) { - if (!is.character(objId)) stop("object id must be a character") + if (!is.character(objId)) { + stop("object id must be a character") + } obj <- structure(new.env(parent = emptyenv()), class = "jobj") obj$id <- objId # Register a finalizer to remove the Java object when this reference @@ -33,7 +35,7 @@ cleanup.jobj <- function(e) { .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 if (.validJobjs[[objId]] == 0) { - rm(list=objId, envir = .validJobjs) + rm(list=objId, envir=.validJobjs) # NOTE: We cannot call removeJObject here as the finalizer may be run # in the middle of another RPC. Thus we queue up this object Id to be removed # and then run all the removeJObject when the next RPC is called. diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index c7bdd6f8de732..1b141ef774cc7 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -53,7 +53,8 @@ sparkR.init <- function( sparkEnvir = list(), sparkExecutorEnv = list(), sparkJars = "", - sparkRLibDir = "") { + sparkRLibDir = "", + sparkRBackendPort = 12345) { if (exists(".sparkRjsc", envir=.sparkREnv)) { cat("Re-using existing Spark Context. Please restart R to create a new Spark Context\n") @@ -61,13 +62,16 @@ sparkR.init <- function( } sparkMem <- Sys.getenv("SPARK_MEM", "512m") - cp = .sparkREnv$assemblyJarPath + jars <- c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) + + cp <- paste0(jars, collapse=":") + yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") if (yarn_conf_dir != "") { - cp = paste(cp, yarn_conf_dir, sep=":") + cp <- paste(cp, yarn_conf_dir, sep=":") } launchBackend(classPath=cp, mainClass="edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args="12345", javaOpts=paste("-Xmx", sparkMem, sep="")) + args=as.character(sparkRBackendPort), javaOpts=paste("-Xmx", sparkMem, sep="")) Sys.sleep(2) # Wait for backend to come up connectBackend("localhost", 12345) # Connect to it @@ -91,9 +95,6 @@ sparkR.init <- function( for (varname in names(sparkExecutorEnv)) { sparkExecutorEnvMap[[varname]] <- sparkExecutorEnv[[varname]] } - - #.jaddClassPath(sparkJars) - jars <- c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) nonEmptyJars <- Filter(function(x) { x != "" }, jars) localJarPaths <- sapply(nonEmptyJars, function(j) { paste("file://", j, sep="") }) @@ -101,8 +102,8 @@ sparkR.init <- function( assign( ".sparkRjsc", callJStatic( - className="edu.berkeley.cs.amplab.sparkr.RRDD", - methodName="createSparkContext", + "edu.berkeley.cs.amplab.sparkr.RRDD", + "createSparkContext", master, appName, as.character(sparkHome), diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index 88b6b4db776cc..bb44e9f2a4734 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -15,7 +15,7 @@ callJStatic <- function(className, methodName, ...) { # Create a new object of the specified class name newJObject <- function(className, ...) { - invokeJava(isStatic=TRUE, className, methodName="new", ...) + invokeJava(isStatic=TRUE, className, methodName="", ...) } # Remove an object from the SparkR backend. This is done diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 46a654c352032..7ba7fd853bfbe 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -68,6 +68,7 @@ object SerializeJavaR { val len = in.readInt() val asciiBytes = new Array[Byte](len) in.read(asciiBytes, 0, len) + assert(asciiBytes(len - 1) == 0) val str = new String(asciiBytes.dropRight(1).map(_.toChar)) str } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 90249483e0a9b..263cdb86cb8a1 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -37,7 +37,6 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa if (objId == "SparkRHandler") { methodName match { case "stopBackend" => { - // dos.write(0) writeInt(dos, 0) writeType(dos, "void") server.close() @@ -110,8 +109,8 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa // Write status bit writeInt(dos, 0) writeObject(dos, ret.asInstanceOf[AnyRef]) - } else if (methodName == "new") { - // methodName should be "new" for constructor + } else if (methodName == "") { + // methodName should be "" for constructor val ctor = cls.get.getConstructors().filter { x => matchMethod(numArgs, args, x.getParameterTypes()) }.head From be05b1621c7ddd3e07f2907d442f806057142056 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 22 Jan 2015 10:58:58 -0800 Subject: [PATCH 342/687] Check if context, connection exist before stopping --- pkg/R/sparkR.R | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 1b141ef774cc7..1358568d5a484 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -14,14 +14,18 @@ sparkR.onLoad <- function(libname, pkgname) { #' Stop this Spark context #' Also terminates the backend this R session is connected to sparkR.stop <- function(sparkREnv) { - sc <- get(".sparkRjsc", envir=.sparkREnv) - callJMethod(sc, "stop") - callJStatic("SparkRHandler", "stopBackend") + if (exists(".sparkRjsc", envir=.sparkREnv)) { + sc <- get(".sparkRjsc", envir=.sparkREnv) + callJMethod(sc, "stop") + } - # Also close the connection and remove it from our env - conn <- get(".sparkRCon", .sparkREnv) - close(conn) - rm(".sparkRCon", envir=.sparkREnv) + if (exists(".sparkRCon", envir=.sparkREnv)) { + callJStatic("SparkRHandler", "stopBackend") + # Also close the connection and remove it from our env + conn <- get(".sparkRCon", .sparkREnv) + close(conn) + rm(".sparkRCon", envir=.sparkREnv) + } } #' Initialize a new Spark Context. From c09ba05c99a01ee03545b324e2f36b2af0323dbb Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 22 Jan 2015 19:40:06 -0800 Subject: [PATCH 343/687] Change jobj id to be just an integer Add a new print.jobj that gets the class name and prints it Also add a utility function isInstanceOf --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 6 ++++++ pkg/R/sparkRBackend.R | 8 ++++++++ pkg/R/utils.R | 2 +- pkg/inst/tests/test_parallelize_collect.R | 2 +- .../berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 2 +- 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index c3a579a456c4f..4546c9fc7b91e 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -65,4 +65,5 @@ export( "setCheckpointDir" ) export("sparkR.init") +export("print.jobj") useDynLib(SparkR, stringHashCode) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e6e4cc66a1f4e..98c7adcdca899 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -30,6 +30,12 @@ jobj <- function(objId) { obj } +print.jobj <- function(jobj) { + cls <- callJMethod(jobj, "getClass") + name <- callJMethod(cls, "getName") + cat("Java ref type", name, "id", jobj$id, "\n", sep=" ") +} + cleanup.jobj <- function(e) { objId <- e$id .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index bb44e9f2a4734..391e23fe42980 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -1,5 +1,13 @@ # Methods to call into SparkRBackend. + +# Returns TRUE if object is an instance of given class +isInstanceOf <- function(jobj, className) { + stopifnot(class(jobj) == "jobj") + cls <- SparkR:::callJStatic("java.lang.Class", "forName", className) + SparkR:::callJMethod(cls, "isInstance", jobj) +} + # Call a Java method named methodName on the object # specified by objId. objId should be a "jobj" returned # from the SparkRBackend. diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 62e3e40402215..94f94e3bfb02c 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -20,7 +20,7 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serial # Assume it is either an R object or a Java obj ref. if (inherits(obj, "jobj")) { - if (grepl("scala.Tuple2", obj$id)) { + if (isInstanceOf(obj, "scala.Tuple2")) { # JavaPairRDD[Array[Byte], Array[Byte]]. keyBytes = callJMethod(obj, "_1") diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index bb9371569d36f..5ea571ffdfff9 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -43,7 +43,7 @@ test_that("parallelize() on simple vectors and lists returns an RDD", { expect_true(inherits(rdd, "RDD")) expect_true(.hasSlot(rdd, "jrdd") && inherits(rdd@jrdd, "jobj") - && grepl("org.apache.spark.api.java.JavaRDD", rdd@jrdd$id)) + && isInstanceOf(rdd@jrdd, "org.apache.spark.api.java.JavaRDD")) } }) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 263cdb86cb8a1..1c562683b5a4a 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -191,7 +191,7 @@ object JavaObjectTracker { } def put(obj: Object): String = { - val objId = obj.getClass().getName() + "@" + objCounter + val objId = objCounter.toString objCounter = objCounter + 1 objMap.put(objId, obj) objId From f00b531d32da434f5755da79547147f98baac140 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 25 Jan 2015 13:55:30 -0800 Subject: [PATCH 344/687] Address code review comments. Big changes include style fixes throughout for named arguments --- pkg/R/RDD.R | 65 +++---------------- pkg/R/broadcast.R | 4 +- pkg/R/context.R | 4 +- pkg/R/deserialize.R | 17 ++--- pkg/R/jobj.R | 51 +++++++++++++++ pkg/R/serialize.R | 20 +++--- pkg/R/sparkR.R | 34 +++++----- pkg/R/sparkRBackend.R | 28 ++++---- pkg/R/sparkRClient.R | 24 +++---- pkg/R/utils.R | 16 ++--- .../cs/amplab/sparkr/SerializeJavaR.scala | 14 ++-- .../cs/amplab/sparkr/SparkRBackend.scala | 8 +-- .../amplab/sparkr/SparkRBackendHandler.scala | 30 +++++---- 13 files changed, 162 insertions(+), 153 deletions(-) create mode 100644 pkg/R/jobj.R diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 98c7adcdca899..c1bbbddc9296c 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1,53 +1,5 @@ # RDD in R implemented in S4 OO system. -# Maintain a reference count of Java object references -# This allows us to GC the java object when it is safe -.validJobjs <- new.env(parent = emptyenv()) - -# List of object ids to be removed -.toRemoveJobjs <- new.env(parent = emptyenv()) - -getJobj <- function(objId) { - newObj <- jobj(objId) - if (exists(objId, .validJobjs)) { - .validJobjs[[objId]] <- .validJobjs[[objId]] + 1 - } else { - .validJobjs[[objId]] <- 1 - } - newObj -} - -# Handler for a java object that exists on the backend. -jobj <- function(objId) { - if (!is.character(objId)) { - stop("object id must be a character") - } - obj <- structure(new.env(parent = emptyenv()), class = "jobj") - obj$id <- objId - # Register a finalizer to remove the Java object when this reference - # is garbage collected in R - reg.finalizer(obj, cleanup.jobj) - obj -} - -print.jobj <- function(jobj) { - cls <- callJMethod(jobj, "getClass") - name <- callJMethod(cls, "getName") - cat("Java ref type", name, "id", jobj$id, "\n", sep=" ") -} - -cleanup.jobj <- function(e) { - objId <- e$id - .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 - - if (.validJobjs[[objId]] == 0) { - rm(list=objId, envir=.validJobjs) - # NOTE: We cannot call removeJObject here as the finalizer may be run - # in the middle of another RPC. Thus we queue up this object Id to be removed - # and then run all the removeJObject when the next RPC is called. - .toRemoveJobjs[[objId]] <- 1 - } -} setOldClass("jobj") #' @title S4 class that represents an RDD @@ -147,7 +99,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), rdd@func(split, part) } serializedFuncArr <- serialize("computeFunc", connection = NULL, - ascii = TRUE) + ascii = TRUE) packageNamesArr <- serialize(.sparkREnv[[".packages"]], connection = NULL, @@ -766,7 +718,7 @@ setMethod("reduce", } partitionList <- collect(lapplyPartition(rdd, reducePartition), - flatten=FALSE) + flatten = FALSE) Reduce(func, partitionList) }) @@ -830,7 +782,7 @@ setGeneric("foreach", function(rdd, func) { standardGeneric("foreach") }) #' @rdname foreach #' @aliases foreach,RDD,function-method setMethod("foreach", - signature(rdd = "RDD", func="function"), + signature(rdd = "RDD", func = "function"), function(rdd, func) { partition.func <- function(x) { lapply(x, func) @@ -858,7 +810,7 @@ setGeneric("foreachPartition", #' @rdname foreach #' @aliases foreachPartition,RDD,function-method setMethod("foreachPartition", - signature(rdd = "RDD", func="function"), + signature(rdd = "RDD", func = "function"), function(rdd, func) { invisible(collect(mapPartitions(rdd, func))) }) @@ -1137,9 +1089,8 @@ setMethod("saveAsObjectFile", if (!rdd@env$serialized) { rdd <- reserialize(rdd) } - callJMethod(getJRDD(rdd), "saveAsObjectFile", path) # Return nothing - invisible(NULL) + invisible(callJMethod(getJRDD(rdd), "saveAsObjectFile", path)) }) #' Save this RDD as a text file, using string representations of elements. @@ -1165,9 +1116,9 @@ setMethod("saveAsTextFile", toString(x) } stringRdd <- lapply(rdd, func) - callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path) # Return nothing - invisible(NULL) + invisible( + callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path)) }) #' Return an RDD with the keys of each tuple. @@ -1358,7 +1309,7 @@ setMethod("partitionBy", # shuffled acutal content key-val pairs. r <- callJMethod(javaPairRDD, "values") - RDD(r, serialized=TRUE) + RDD(r, serialized = TRUE) }) #' Group values by key diff --git a/pkg/R/broadcast.R b/pkg/R/broadcast.R index 051fe676dd02f..45881599f4f18 100644 --- a/pkg/R/broadcast.R +++ b/pkg/R/broadcast.R @@ -42,8 +42,8 @@ setGeneric("value", function(bcast) { standardGeneric("value") }) setMethod("value", signature(bcast = "Broadcast"), function(bcast) { - if (exists(bcast@id, envir=.broadcastValues)) { - get(bcast@id, envir=.broadcastValues) + if (exists(bcast@id, envir = .broadcastValues)) { + get(bcast@id, envir = .broadcastValues) } else { NULL } diff --git a/pkg/R/context.R b/pkg/R/context.R index 076eeb888ca28..9ad21cac2bd54 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -29,7 +29,7 @@ textFile <- function(sc, path, minSplits = NULL) { # Allow the user to have a more flexible definiton of the text file path path <- normalizePath(path) #' Convert a string vector of paths to a string containing comma separated paths - path <- paste(path, collapse=",") + path <- paste(path, collapse = ",") jrdd <- callJMethod(sc, "textFile", path, getMinSplits(sc, minSplits)) RDD(jrdd, FALSE) @@ -56,7 +56,7 @@ objectFile <- function(sc, path, minSplits = NULL) { # Allow the user to have a more flexible definiton of the text file path path <- normalizePath(path) #' Convert a string vector of paths to a string containing comma separated paths - path <- paste(path, collapse=",") + path <- paste(path, collapse = ",") jrdd <- callJMethod(sc, "objectFile", path, getMinSplits(sc, minSplits)) # Assume the RDD contains serialized R objects. diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index 264368f326f1b..bb35387959ab3 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -6,7 +6,8 @@ # Int -> integer # String -> character # Boolean -> logical -# Double -> numeric / double +# Double -> double +# Long -> double # Array[Byte] -> raw # # Array[T] -> list() @@ -33,16 +34,16 @@ readTypedObject <- function(con, type) { readString <- function(con) { stringLen <- readInt(con) - string <- readBin(con, raw(), stringLen, endian="big") + string <- readBin(con, raw(), stringLen, endian = "big") rawToChar(string) } readInt <- function(con) { - readBin(con, integer(), n = 1, endian="big") + readBin(con, integer(), n = 1, endian = "big") } readDouble <- function(con) { - readBin(con, double(), n = 1, endian="big") + readBin(con, double(), n = 1, endian = "big") } readBoolean <- function(con) { @@ -70,11 +71,11 @@ readList <- function(con) { readRaw <- function(con) { dataLen <- readInt(con) - data <- readBin(con, raw(), as.integer(dataLen), endian="big") + data <- readBin(con, raw(), as.integer(dataLen), endian = "big") } readRawLen <- function(con, dataLen) { - data <- readBin(con, raw(), as.integer(dataLen), endian="big") + data <- readBin(con, raw(), as.integer(dataLen), endian = "big") } readDeserialize <- function(con) { @@ -83,7 +84,7 @@ readDeserialize <- function(con) { # return firstData dataLen <- readInt(con) firstData <- unserialize( - readBin(con, raw(), as.integer(dataLen), endian="big")) + readBin(con, raw(), as.integer(dataLen), endian = "big")) # Else, read things into a list dataLen <- readInt(con) @@ -91,7 +92,7 @@ readDeserialize <- function(con) { data <- list(firstData) while (length(dataLen) > 0 && dataLen > 0) { data[[length(data) + 1L]] <- unserialize( - readBin(con, raw(), as.integer(dataLen), endian="big")) + readBin(con, raw(), as.integer(dataLen), endian = "big")) dataLen <- readInt(con) } unlist(data, recursive = FALSE) diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R new file mode 100644 index 0000000000000..f3ac4c98129fb --- /dev/null +++ b/pkg/R/jobj.R @@ -0,0 +1,51 @@ +# References to objects that exist on the JVM backend +# are maintained using the jobj. + +# Maintain a reference count of Java object references +# This allows us to GC the java object when it is safe +.validJobjs <- new.env(parent = emptyenv()) + +# List of object ids to be removed +.toRemoveJobjs <- new.env(parent = emptyenv()) + +getJobj <- function(objId) { + newObj <- jobj(objId) + if (exists(objId, .validJobjs)) { + .validJobjs[[objId]] <- .validJobjs[[objId]] + 1 + } else { + .validJobjs[[objId]] <- 1 + } + newObj +} + +# Handler for a java object that exists on the backend. +jobj <- function(objId) { + if (!is.character(objId)) { + stop("object id must be a character") + } + obj <- structure(new.env(parent = emptyenv()), class = "jobj") + obj$id <- objId + # Register a finalizer to remove the Java object when this reference + # is garbage collected in R + reg.finalizer(obj, cleanup.jobj) + obj +} + +print.jobj <- function(jobj) { + cls <- callJMethod(jobj, "getClass") + name <- callJMethod(cls, "getName") + cat("Java ref type", name, "id", jobj$id, "\n", sep = " ") +} + +cleanup.jobj <- function(jobj) { + objId <- jobj$id + .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 + + if (.validJobjs[[objId]] == 0) { + rm(list = objId, envir = .validJobjs) + # NOTE: We cannot call removeJObject here as the finalizer may be run + # in the middle of another RPC. Thus we queue up this object Id to be removed + # and then run all the removeJObject when the next RPC is called. + .toRemoveJobjs[[objId]] <- 1 + } +} diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index 60f3ee364f934..05020a5b87ea7 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -12,11 +12,11 @@ # environment -> Map[String, T], where T is a native type # jobj -> Object, where jobj is an object created in the backend -writeObject <- function(con, object, withType = TRUE) { +writeObject <- function(con, object, writeType = TRUE) { # NOTE: In R vectors have same type as objects. So we don't support # passing in vectors as arrays and instead require arrays to be passed # as lists. - if (withType) { + if (writeType) { writeType(con, class(object)) } switch(class(object), @@ -34,15 +34,15 @@ writeObject <- function(con, object, withType = TRUE) { writeString <- function(con, value) { writeInt(con, as.integer(nchar(value) + 1)) - writeBin(value, con, endian="big") + writeBin(value, con, endian = "big") } writeInt <- function(con, value) { - writeBin(as.integer(value), con, endian="big") + writeBin(as.integer(value), con, endian = "big") } writeDouble <- function(con, value) { - writeBin(value, con, endian="big") + writeBin(value, con, endian = "big") } writeBoolean <- function(con, value) { @@ -57,7 +57,7 @@ writeRawSerialize <- function(outputCon, batch) { writeRaw <- function(con, batch) { writeInt(con, length(batch)) - writeBin(batch, con, endian="big") + writeBin(batch, con, endian = "big") } writeType <- function(con, class) { @@ -81,9 +81,10 @@ writeList <- function(con, arr) { elemType <- unique(sapply(arr, function(elem) { class(elem) })) stopifnot(length(elemType) <= 1) - # Write empty lists as strings ? + # TODO: Empty lists are given type "character" right now. + # This may not work if the Java side expects array of any other type. if (length(elemType) == 0) { - elemType <- "character" + elemType <- class("somestring") } writeType(con, elemType) @@ -108,6 +109,9 @@ writeEnv <- function(con, env) { } } +# Used to serialize in a list of objects where each +# object can be of a different type. Serialization format is +# for each object writeArgs <- function(con, args) { if (length(args) > 0) { for (a in args) { diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 1358568d5a484..9d216630caaa2 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -3,8 +3,8 @@ assemblyJarName <- "sparkr-assembly-0.1.jar" sparkR.onLoad <- function(libname, pkgname) { - assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep="") - assemblyJarPath <- gsub(" ", "\\ ", assemblyJarPath, fixed=T) + assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep = "") + assemblyJarPath <- gsub(" ", "\\ ", assemblyJarPath, fixed = T) packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") .sparkREnv$libname <- libname @@ -14,17 +14,17 @@ sparkR.onLoad <- function(libname, pkgname) { #' Stop this Spark context #' Also terminates the backend this R session is connected to sparkR.stop <- function(sparkREnv) { - if (exists(".sparkRjsc", envir=.sparkREnv)) { - sc <- get(".sparkRjsc", envir=.sparkREnv) + if (exists(".sparkRjsc", envir = .sparkREnv)) { + sc <- get(".sparkRjsc", envir = .sparkREnv) callJMethod(sc, "stop") } - if (exists(".sparkRCon", envir=.sparkREnv)) { + if (exists(".sparkRCon", envir = .sparkREnv)) { callJStatic("SparkRHandler", "stopBackend") # Also close the connection and remove it from our env conn <- get(".sparkRCon", .sparkREnv) close(conn) - rm(".sparkRCon", envir=.sparkREnv) + rm(".sparkRCon", envir = .sparkREnv) } } @@ -60,22 +60,24 @@ sparkR.init <- function( sparkRLibDir = "", sparkRBackendPort = 12345) { - if (exists(".sparkRjsc", envir=.sparkREnv)) { + if (exists(".sparkRjsc", envir = .sparkREnv)) { cat("Re-using existing Spark Context. Please restart R to create a new Spark Context\n") - return(get(".sparkRjsc", envir=.sparkREnv)) + return(get(".sparkRjsc", envir = .sparkREnv)) } sparkMem <- Sys.getenv("SPARK_MEM", "512m") jars <- c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) - cp <- paste0(jars, collapse=":") + cp <- paste0(jars, collapse = ":") yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") if (yarn_conf_dir != "") { - cp <- paste(cp, yarn_conf_dir, sep=":") + cp <- paste(cp, yarn_conf_dir, sep = ":") } - launchBackend(classPath=cp, mainClass="edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args=as.character(sparkRBackendPort), javaOpts=paste("-Xmx", sparkMem, sep="")) + launchBackend(classPath = cp, + mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", + args = as.character(sparkRBackendPort), + javaOpts = paste("-Xmx", sparkMem, sep = "")) Sys.sleep(2) # Wait for backend to come up connectBackend("localhost", 12345) # Connect to it @@ -101,7 +103,7 @@ sparkR.init <- function( } nonEmptyJars <- Filter(function(x) { x != "" }, jars) - localJarPaths <- sapply(nonEmptyJars, function(j) { paste("file://", j, sep="") }) + localJarPaths <- sapply(nonEmptyJars, function(j) { paste("file://", j, sep = "") }) assign( ".sparkRjsc", @@ -114,13 +116,13 @@ sparkR.init <- function( as.list(localJarPaths), sparkEnvirMap, sparkExecutorEnvMap), - envir=.sparkREnv + envir = .sparkREnv ) - sc <- get(".sparkRjsc", envir=.sparkREnv) + sc <- get(".sparkRjsc", envir = .sparkREnv) # Register a finalizer to stop backend on R exit - reg.finalizer(.sparkREnv, sparkR.stop, onexit=TRUE) + reg.finalizer(.sparkREnv, sparkR.stop, onexit = TRUE) sc } diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index 391e23fe42980..402290df05f67 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -13,23 +13,23 @@ isInstanceOf <- function(jobj, className) { # from the SparkRBackend. callJMethod <- function(objId, methodName, ...) { stopifnot(class(objId) == "jobj") - invokeJava(isStatic=FALSE, objId, methodName, ...) + invokeJava(isStatic = FALSE, objId$id, methodName, ...) } # Call a static method on a specified className callJStatic <- function(className, methodName, ...) { - invokeJava(isStatic=TRUE, className, methodName, ...) + invokeJava(isStatic = TRUE, className, methodName, ...) } # Create a new object of the specified class name newJObject <- function(className, ...) { - invokeJava(isStatic=TRUE, className, methodName="", ...) + invokeJava(isStatic = TRUE, className, methodName = "", ...) } # Remove an object from the SparkR backend. This is done # automatically when a jobj is garbage collected. removeJObject <- function(objId) { - invokeJava(isStatic=TRUE, "SparkRHandler", "rm", objId) + invokeJava(isStatic = TRUE, "SparkRHandler", "rm", objId) } isRemoveMethod <- function(isStatic, objId, methodName) { @@ -40,36 +40,32 @@ isRemoveMethod <- function(isStatic, objId, methodName) { # should typically use one of the higher level methods like # callJMethod, callJStatic etc. instead of using this. # -# If isStatic is true, objId contains className otherwise -# it should contain a jobj returned previously by the backend +# isStatic - TRUE if the method to be called is static +# objId - String that refers to the object on which method is invoked +# Should be a jobj id for non-static methods and the classname +# for static methods +# methodName - name of method to be invoked invokeJava <- function(isStatic, objId, methodName, ...) { if (!exists(".sparkRCon", .sparkREnv)) { stop("No connection to backend found") } - # If this is already isn't a removeJObject call + # If this isn't a removeJObject call if (!isRemoveMethod(isStatic, objId, methodName)) { objsToRemove <- ls(.toRemoveJobjs) if (length(objsToRemove) > 0) { - #cat("Clearing up objsToRemove\n") sapply(objsToRemove, function(e) { removeJObject(e) }) - rm(list=objsToRemove, envir=.toRemoveJobjs) + rm(list = objsToRemove, envir = .toRemoveJobjs) } } rc <- rawConnection(raw(0), "r+") writeBoolean(rc, isStatic) - # Write object id as string if it is static - # else check if its a jobj and write its id - if (isStatic) { - writeString(rc, objId) - } else { - writeString(rc, objId$id) - } + writeString(rc, objId) writeString(rc, methodName) args <- list(...) diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index c5f9f1f5098d2..e46f151eaf371 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -2,26 +2,26 @@ # Creates a SparkR client connection object # if one doesn't already exist -connectBackend <- function(hostname, port, timeout=60) { - if (exists(".sparkRcon", envir=.sparkREnv)) { +connectBackend <- function(hostname, port, timeout = 60) { + if (exists(".sparkRcon", envir = .sparkREnv)) { cat("SparkRBackend client connection already exists\n") - return(get(".sparkRcon", envir=.sparkREnv)) + return(get(".sparkRcon", envir = .sparkREnv)) } - con <- socketConnection(host=hostname, port=port, server=FALSE, - blocking=TRUE, open="wb", timeout=timeout) + con <- socketConnection(host = hostname, port = port, server = FALSE, + blocking = TRUE, open = "wb", timeout = timeout) - assign(".sparkRCon", con, envir=.sparkREnv) - get(".sparkRCon", envir=.sparkREnv) + assign(".sparkRCon", con, envir = .sparkREnv) + con } -# Launch the SparkR backend using a call to 'system'. +# Launch the SparkR backend using a call to 'system2'. launchBackend <- function( classPath, mainClass, args, - javaOpts="-Xms2g -Xmx2g", - javaHome=Sys.getenv("JAVA_HOME")) { + javaOpts = "-Xms2g -Xmx2g", + javaHome = Sys.getenv("JAVA_HOME")) { if (.Platform$OS.type == "unix") { java_bin_name = "java" } else { @@ -33,7 +33,7 @@ launchBackend <- function( } else { java_bin <- java_bin_name } - combinedArgs <- paste(javaOpts, "-cp", classPath, mainClass, args, sep=" ") + combinedArgs <- paste(javaOpts, "-cp", classPath, mainClass, args, sep = " ") cat("Launching java with command ", java_bin, " ", combinedArgs, "\n") - invisible(system2(java_bin, combinedArgs, wait=F)) + invisible(system2(java_bin, combinedArgs, wait = F)) } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 94f94e3bfb02c..fdc50f0d6fdc8 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -46,7 +46,7 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serial res <- head(res, n = logicalUpperBound) } } else { - # jElem is of a primitive Java type, is simplified to R's + # obj is of a primitive Java type, is simplified to R's # corresponding type. res <- list(obj) } @@ -66,7 +66,7 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serial # Returns TRUE if `name` refers to an RDD in the given environment `env` isRDD <- function(name, env) { - obj <- get(name, envir=env) + obj <- get(name, envir = env) inherits(obj, "RDD") } @@ -85,10 +85,10 @@ isSparkFunction <- function(name) { fun <- name } envir <- parent.frame(2) - if (!exists(as.character(fun), mode = "function", envir=envir)) { + if (!exists(as.character(fun), mode = "function", envir = envir)) { return(FALSE) } - fun <- get(as.character(fun), mode = "function", envir=envir) + fun <- get(as.character(fun), mode = "function", envir = envir) } packageName(environment(fun)) == "SparkR" } @@ -117,11 +117,11 @@ getDependencies <- function(name) { # would be to actually list all the variables used in every function using # `all.vars` and then walking through functions etc. filteredVars <- Filter( - function(x) { !exists(x, .broadcastNames, inherits=FALSE) }, + function(x) { !exists(x, .broadcastNames, inherits = FALSE) }, filteredVars) rc <- rawConnection(raw(), 'wb') - save(list=filteredVars, file=rc, envir=closureEnv) + save(list = filteredVars, file = rc, envir = closureEnv) binData <- rawConnectionValue(rc) close(rc) binData @@ -147,13 +147,13 @@ hashCode <- function(key) { as.integer(key[[1]]) } else if (class(key) == "numeric") { # Convert the double to long and then calculate the hash code - rawVec <- writeBin(key[[1]], con=raw()) + rawVec <- writeBin(key[[1]], con = raw()) intBits <- packBits(rawToBits(rawVec), "integer") as.integer(bitwXor(intBits[2], intBits[1])) } else if (class(key) == "character") { .Call("stringHashCode", key) } else { - warning(paste("Could not hash object, returning 0", sep="")) + warning(paste("Could not hash object, returning 0", sep = "")) as.integer(0) } } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 7ba7fd853bfbe..705297bb46d16 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -1,6 +1,5 @@ package edu.berkeley.cs.amplab.sparkr -import scala.collection.mutable.HashMap import scala.collection.JavaConversions._ import java.io.DataInputStream @@ -43,7 +42,7 @@ object SerializeJavaR { case 'e' => readMap(dis) case 'r' => readBytes(dis) case 'l' => readList(dis) - case 'j' => JavaObjectTracker.getObject(readString(dis)) + case 'j' => JVMObjectTracker.getObject(readString(dis)) case _ => throw new IllegalArgumentException(s"Invalid type $dataType") } } @@ -109,8 +108,8 @@ object SerializeJavaR { case 'i' => readIntArr(dis) case 'c' => readStringArr(dis) case 'd' => readDoubleArr(dis) - case 'l' => readBooleanArr(dis) - case 'j' => readStringArr(dis).map(x => JavaObjectTracker.getObject(x)) + case 'b' => readBooleanArr(dis) + case 'j' => readStringArr(dis).map(x => JVMObjectTracker.getObject(x)) case 'r' => readBytesArr(dis) case _ => throw new IllegalArgumentException(s"Invalid array type $arrType") } @@ -140,7 +139,8 @@ object SerializeJavaR { // Int -> integer // String -> character // Boolean -> logical - // Double -> numeric / double + // Double -> double + // Long -> double // Array[Byte] -> raw // // Array[T] -> list() @@ -219,7 +219,7 @@ object SerializeJavaR { } case _ => { // Handle array of objects - if (value.getClass().getName().startsWith("[L")) { + if (value.getClass.getName.startsWith("[L")) { val objArr = value.asInstanceOf[Array[Object]] writeType(dos, "list") writeType(dos, "jobj") @@ -261,7 +261,7 @@ object SerializeJavaR { } def writeJObj(out: DataOutputStream, value: Object) { - val objId = JavaObjectTracker.put(value) + val objId = JVMObjectTracker.put(value) writeString(out, objId) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index 69d3f942932e9..9096ae1aa0509 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -7,12 +7,10 @@ import java.util.concurrent.TimeUnit import io.netty.bootstrap.ServerBootstrap import io.netty.channel.ChannelFuture import io.netty.channel.ChannelInitializer -import io.netty.channel.ChannelOption import io.netty.channel.EventLoopGroup import io.netty.channel.nio.NioEventLoopGroup import io.netty.channel.socket.SocketChannel import io.netty.channel.socket.nio.NioServerSocketChannel - import io.netty.handler.codec.bytes.ByteArrayDecoder import io.netty.handler.codec.bytes.ByteArrayEncoder import io.netty.handler.codec.LengthFieldBasedFrameDecoder @@ -20,13 +18,15 @@ import io.netty.handler.codec.LengthFieldBasedFrameDecoder /** * Netty-based backend server that is used to communicate between R and Java. */ -class SparkRBackend() { +class SparkRBackend { var channelFuture: ChannelFuture = null var bootstrap: ServerBootstrap = null var bossGroup: EventLoopGroup = null def init(port: Int) { + val socketAddr = new InetSocketAddress(port) + bossGroup = new NioEventLoopGroup(SparkRConf.numServerThreads) val workerGroup = bossGroup val handler = new SparkRBackendHandler(this) @@ -51,7 +51,7 @@ class SparkRBackend() { } }) - channelFuture = bootstrap.bind(new InetSocketAddress(port)) + channelFuture = bootstrap.bind(socketAddr) channelFuture.syncUninterruptibly() println("SparkR Backend server started on port :" + port) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 1c562683b5a4a..9ac4d65eac695 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -46,7 +46,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val t = readObjectType(dis) assert(t == 'c') val objToRemove = readString(dis) - JavaObjectTracker.remove(objToRemove) + JVMObjectTracker.remove(objToRemove) writeInt(dos, 0) writeObject(dos, null) } catch { @@ -77,16 +77,20 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa ctx.close() } - def handleMethodCall(isStatic: Boolean, objId: String, methodName: String, - numArgs: Int, dis: DataInputStream, dos: DataOutputStream) { - + def handleMethodCall( + isStatic: Boolean, + objId: String, + methodName: String, + numArgs: Int, + dis: DataInputStream, + dos: DataOutputStream) { var obj: Object = null var cls: Option[Class[_]] = None try { if (isStatic) { cls = Some(Class.forName(objId)) } else { - JavaObjectTracker.get(objId) match { + JVMObjectTracker.get(objId) match { case None => throw new IllegalArgumentException("Object not found " + objId) case Some(o) => { cls = Some(o.getClass) @@ -97,11 +101,11 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val args = readArgs(numArgs, dis) - val methods = cls.get.getMethods() + val methods = cls.get.getMethods val selectedMethods = methods.filter(m => m.getName() == methodName) if (selectedMethods.length > 0) { val selectedMethod = selectedMethods.filter { x => - matchMethod(numArgs, args, x.getParameterTypes()) + matchMethod(numArgs, args, x.getParameterTypes) }.head val ret = selectedMethod.invoke(obj, args:_*) @@ -111,8 +115,8 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa writeObject(dos, ret.asInstanceOf[AnyRef]) } else if (methodName == "") { // methodName should be "" for constructor - val ctor = cls.get.getConstructors().filter { x => - matchMethod(numArgs, args, x.getParameterTypes()) + val ctor = cls.get.getConstructors.filter { x => + matchMethod(numArgs, args, x.getParameterTypes) }.head val obj = ctor.newInstance(args:_*) @@ -160,19 +164,19 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa case _ => parameterType } } - if(!parameterWrapperType.isInstance(args(i))) { + if (!parameterWrapperType.isInstance(args(i))) { return false } } - return true + true } } /** - * Helper singleton that tracks Java objects returned to R. + * Helper singleton that tracks JVM objects returned to R. * This is useful for referencing these objects in RPC calls. */ -object JavaObjectTracker { +object JVMObjectTracker { // TODO: This map should be thread-safe if we want to support multiple // connections at the same time From 08819316ac5d677df95d3daa29a63af23cde472a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 25 Jan 2015 14:12:12 -0800 Subject: [PATCH 345/687] Some more style fixes --- pkg/R/jobj.R | 2 ++ pkg/R/serialize.R | 40 ++++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R index f3ac4c98129fb..42bfb82017dbf 100644 --- a/pkg/R/jobj.R +++ b/pkg/R/jobj.R @@ -23,6 +23,8 @@ jobj <- function(objId) { if (!is.character(objId)) { stop("object id must be a character") } + # NOTE: We need a new env for a jobj as we can only register + # finalizers for environments or external references pointers. obj <- structure(new.env(parent = emptyenv()), class = "jobj") obj$id <- objId # Register a finalizer to remove the Java object when this reference diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index 05020a5b87ea7..a64866ef6e877 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -20,16 +20,16 @@ writeObject <- function(con, object, writeType = TRUE) { writeType(con, class(object)) } switch(class(object), - integer = writeInt(con, object), - character = writeString(con, object), - logical = writeBoolean(con, object), - double = writeDouble(con, object), - numeric = writeDouble(con, object), - raw = writeRaw(con, object), - list = writeList(con, object), - jobj = writeString(con, object$id), - environment = writeEnv(con, object), - stop("Unsupported type for serialization")) + integer = writeInt(con, object), + character = writeString(con, object), + logical = writeBoolean(con, object), + double = writeDouble(con, object), + numeric = writeDouble(con, object), + raw = writeRaw(con, object), + list = writeList(con, object), + jobj = writeString(con, object$id), + environment = writeEnv(con, object), + stop("Unsupported type for serialization")) } writeString <- function(con, value) { @@ -62,16 +62,16 @@ writeRaw <- function(con, batch) { writeType <- function(con, class) { type <- switch(class, - integer = "i", - character = "c", - logical = "b", - double = "d", - numeric = "d", - raw = "r", - list = "l", - jobj = "j", - environment = "e", - stop("Unsupported type for serialization")) + integer = "i", + character = "c", + logical = "b", + double = "d", + numeric = "d", + raw = "r", + list = "l", + jobj = "j", + environment = "e", + stop("Unsupported type for serialization")) writeBin(charToRaw(type), con) } From 9fd01cc86d7f7cc827457c8242c6502a0f07eeba Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 25 Jan 2015 21:07:12 -0800 Subject: [PATCH 346/687] Remove unnecessary braces --- .../cs/amplab/sparkr/SerializeJavaR.scala | 43 +++++++------------ .../cs/amplab/sparkr/SparkRBackend.scala | 3 +- .../amplab/sparkr/SparkRBackendHandler.scala | 15 +++---- 3 files changed, 21 insertions(+), 40 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala index 705297bb46d16..7c5b4e84bd8bd 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala @@ -124,7 +124,7 @@ object SerializeJavaR { val valuesType = readObjectType(in) val valuesLen = readInt(in) - val values = (0 until len).map(_ => readTypedObject(in, valuesType)) + val values = (0 until valuesLen).map(_ => readTypedObject(in, valuesType)) mapAsJavaMap(keys.zip(values).toMap) } else { new java.util.HashMap[Object, Object]() @@ -165,61 +165,49 @@ object SerializeJavaR { writeType(dos, "void") } else { value.getClass.getName match { - case "java.lang.String" => { + case "java.lang.String" => writeType(dos, "character") writeString(dos, value.asInstanceOf[String]) - } - case "long" | "java.lang.Long" => { + case "long" | "java.lang.Long" => writeType(dos, "double") writeDouble(dos, value.asInstanceOf[Long].toDouble) - } - case "double" | "java.lang.Double" => { + case "double" | "java.lang.Double" => writeType(dos, "double") writeDouble(dos, value.asInstanceOf[Double]) - } - case "int" | "java.lang.Integer" => { + case "int" | "java.lang.Integer" => writeType(dos, "integer") writeInt(dos, value.asInstanceOf[Int]) - } - case "boolean" | "java.lang.Boolean" => { + case "boolean" | "java.lang.Boolean" => writeType(dos, "logical") writeBoolean(dos, value.asInstanceOf[Boolean]) - } - case "[B" => { + case "[B" => writeType(dos, "raw") writeBytes(dos, value.asInstanceOf[Array[Byte]]) - } // TODO: Types not handled right now include // byte, char, short, float // Handle arrays - case "[Ljava.lang.String;" => { + case "[Ljava.lang.String;" => writeType(dos, "list") writeStringArr(dos, value.asInstanceOf[Array[String]]) - } - case "[I" => { + case "[I" => writeType(dos, "list") writeIntArr(dos, value.asInstanceOf[Array[Int]]) - } - case "[J" => { + case "[J" => writeType(dos, "list") writeDoubleArr(dos, value.asInstanceOf[Array[Long]].map(_.toDouble)) - } - case "[D" => { + case "[D" => writeType(dos, "list") writeDoubleArr(dos, value.asInstanceOf[Array[Double]]) - } - case "[Z" => { + case "[Z" => writeType(dos, "list") writeBooleanArr(dos, value.asInstanceOf[Array[Boolean]]) - } - case "[[B" => { + case "[[B" => writeType(dos, "list") writeBytesArr(dos, value.asInstanceOf[Array[Array[Byte]]]) - } - case _ => { + case otherName => // Handle array of objects - if (value.getClass.getName.startsWith("[L")) { + if (otherName.startsWith("[L")) { val objArr = value.asInstanceOf[Array[Object]] writeType(dos, "list") writeType(dos, "jobj") @@ -229,7 +217,6 @@ object SerializeJavaR { writeType(dos, "jobj") writeJObj(dos, value) } - } } } } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index 9096ae1aa0509..e6c606a519c3f 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -88,11 +88,10 @@ object SparkRBackend { sparkRBackend.init(args(0).toInt) sparkRBackend.run() } catch { - case e: IOException => { + case e: IOException => System.err.println("Server shutting down: failed with exception ", e) sparkRBackend.close() System.exit(0) - } } System.exit(0) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 9ac4d65eac695..13a957980e965 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -36,12 +36,11 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa if (objId == "SparkRHandler") { methodName match { - case "stopBackend" => { + case "stopBackend" => writeInt(dos, 0) writeType(dos, "void") server.close() - } - case "rm" => { + case "rm" => try { val t = readObjectType(dis) assert(t == 'c') @@ -50,13 +49,11 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa writeInt(dos, 0) writeObject(dos, null) } catch { - case e: Exception => { + case e: Exception => System.err.println(s"Removing $objId failed with " + e) e.printStackTrace() writeInt(dos, -1) - } } - } case _ => dos.writeInt(-1) } } else { @@ -92,10 +89,9 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa } else { JVMObjectTracker.get(objId) match { case None => throw new IllegalArgumentException("Object not found " + objId) - case Some(o) => { + case Some(o) => cls = Some(o.getClass) obj = o - } } } @@ -127,11 +123,10 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa throw new IllegalArgumentException("invalid method " + methodName + " for object " + objId) } } catch { - case e: Exception => { + case e: Exception => System.err.println(s"$methodName on $objId failed with " + e) e.printStackTrace() writeInt(dos, -1) - } } } From d112cf031ab3fcf566b0830ee2ff8cb0f2c41113 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 25 Jan 2015 21:13:48 -0800 Subject: [PATCH 347/687] Style fixes --- .../edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 13a957980e965..2a01ab408b218 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -98,7 +98,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val args = readArgs(numArgs, dis) val methods = cls.get.getMethods - val selectedMethods = methods.filter(m => m.getName() == methodName) + val selectedMethods = methods.filter(m => m.getName == methodName) if (selectedMethods.length > 0) { val selectedMethod = selectedMethods.filter { x => matchMethod(numArgs, args, x.getParameterTypes) @@ -151,7 +151,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val parameterType = parameterTypes(i) var parameterWrapperType = parameterType - if (parameterType.isPrimitive()) { + if (parameterType.isPrimitive) { parameterWrapperType = parameterType match { case java.lang.Integer.TYPE => classOf[java.lang.Integer] case java.lang.Double.TYPE => classOf[java.lang.Double] From 2fcb05177428ade2bdd99ac597a9a46dc6fa7219 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 25 Jan 2015 21:22:03 -0800 Subject: [PATCH 348/687] Rename to SerDeJVMR --- .../cs/amplab/sparkr/{SerializeJavaR.scala => SerDeJVMR.scala} | 2 +- .../edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/{SerializeJavaR.scala => SerDeJVMR.scala} (99%) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDeJVMR.scala similarity index 99% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala rename to pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDeJVMR.scala index 7c5b4e84bd8bd..42ce96756965f 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerializeJavaR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDeJVMR.scala @@ -8,7 +8,7 @@ import java.io.DataOutputStream /** * Utility functions to serialize, deserialize objects to / from R */ -object SerializeJavaR { +object SerDeJVMR { // Type mapping from R to Java // diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 2a01ab408b218..940148703a6f3 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -11,7 +11,7 @@ import io.netty.channel.ChannelHandler.Sharable import io.netty.channel.ChannelHandlerContext import io.netty.channel.SimpleChannelInboundHandler -import edu.berkeley.cs.amplab.sparkr.SerializeJavaR._ +import edu.berkeley.cs.amplab.sparkr.SerDeJVMR._ /** * Handler for SparkRBackend From 1fa722e43391ab3f5763006d903e42301f43a4c1 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 25 Jan 2015 21:36:13 -0800 Subject: [PATCH 349/687] Rename to SerDe now --- .../berkeley/cs/amplab/sparkr/{SerDeJVMR.scala => SerDe.scala} | 2 +- .../edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/{SerDeJVMR.scala => SerDe.scala} (99%) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDeJVMR.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala similarity index 99% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDeJVMR.scala rename to pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 42ce96756965f..0174be7840a46 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDeJVMR.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -8,7 +8,7 @@ import java.io.DataOutputStream /** * Utility functions to serialize, deserialize objects to / from R */ -object SerDeJVMR { +object SerDe { // Type mapping from R to Java // diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 940148703a6f3..4d1d2c0aba934 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -11,7 +11,7 @@ import io.netty.channel.ChannelHandler.Sharable import io.netty.channel.ChannelHandlerContext import io.netty.channel.SimpleChannelInboundHandler -import edu.berkeley.cs.amplab.sparkr.SerDeJVMR._ +import edu.berkeley.cs.amplab.sparkr.SerDe._ /** * Handler for SparkRBackend From 7edbe4679909feeedbdca741298a1ffb359fac66 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 27 Jan 2015 22:07:02 -0800 Subject: [PATCH 350/687] Add missing man pages --- pkg/man/checkpoint-methods.Rd | 30 ++++++++++++++++++++++++++++++ pkg/man/saveAsTextFile.Rd | 28 ++++++++++++++++++++++++++++ pkg/man/setCheckpointDir.Rd | 30 ++++++++++++++++++++++++++++++ pkg/man/unpersist-methods.Rd | 27 +++++++++++++++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 pkg/man/checkpoint-methods.Rd create mode 100644 pkg/man/saveAsTextFile.Rd create mode 100644 pkg/man/setCheckpointDir.Rd create mode 100644 pkg/man/unpersist-methods.Rd diff --git a/pkg/man/checkpoint-methods.Rd b/pkg/man/checkpoint-methods.Rd new file mode 100644 index 0000000000000..a39a0349ccf70 --- /dev/null +++ b/pkg/man/checkpoint-methods.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{checkpoint} +\alias{checkpoint} +\alias{checkpoint,RDD-method} +\title{Checkpoint an RDD} +\usage{ +checkpoint(rdd) + +\S4method{checkpoint}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD to checkpoint} +} +\description{ +Mark this RDD for checkpointing. It will be saved to a file inside the +checkpoint directory set with setCheckpointDir() and all references to its +parent RDDs will be removed. This function must be called before any job has +been executed on this RDD. It is strongly recommended that this RDD is +persisted in memory, otherwise saving it on a file will require recomputation. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +setCheckpointDir(sc, "checkpoints") +rdd <- parallelize(sc, 1:10, 2L) +checkpoint(rdd) +} +} + diff --git a/pkg/man/saveAsTextFile.Rd b/pkg/man/saveAsTextFile.Rd new file mode 100644 index 0000000000000..b0bc9cf705066 --- /dev/null +++ b/pkg/man/saveAsTextFile.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{saveAsTextFile} +\alias{saveAsTextFile} +\alias{saveAsTextFile,RDD} +\alias{saveAsTextFile,RDD,character-method} +\title{Save this RDD as a text file, using string representations of elements.} +\usage{ +saveAsTextFile(rdd, path) + +\S4method{saveAsTextFile}{RDD,character}(rdd, path) +} +\arguments{ +\item{rdd}{The RDD to save} + +\item{path}{The directory where the splits of the text file are saved} +} +\description{ +Save this RDD as a text file, using string representations of elements. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:3) +saveAsTextFile(rdd, "/tmp/sparkR-tmp") +} +} + diff --git a/pkg/man/setCheckpointDir.Rd b/pkg/man/setCheckpointDir.Rd new file mode 100644 index 0000000000000..783dcadf17e76 --- /dev/null +++ b/pkg/man/setCheckpointDir.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{setCheckpointDir} +\alias{setCheckpointDir} +\title{Set the checkpoint directory + +Set the directory under which RDDs are going to be checkpointed. The +directory must be a HDFS path if running on a cluster.} +\usage{ +setCheckpointDir(sc, dirName) +} +\arguments{ +\item{sc}{Spark Context to use} + +\item{dirName}{Directory path} +} +\description{ +Set the checkpoint directory + +Set the directory under which RDDs are going to be checkpointed. The +directory must be a HDFS path if running on a cluster. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +setCheckpointDir(sc, "~/checkpoints") +rdd <- parallelize(sc, 1:2, 2L) +checkpoint(rdd) +} +} + diff --git a/pkg/man/unpersist-methods.Rd b/pkg/man/unpersist-methods.Rd new file mode 100644 index 0000000000000..c2311b2356d8b --- /dev/null +++ b/pkg/man/unpersist-methods.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{unpersist} +\alias{unpersist} +\alias{unpersist,RDD-method} +\title{Unpersist an RDD} +\usage{ +unpersist(rdd) + +\S4method{unpersist}{RDD}(rdd) +} +\arguments{ +\item{rdd}{The RDD to unpersist} +} +\description{ +Mark the RDD as non-persistent, and remove all blocks for it from memory and +disk. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10, 2L) +cache(rdd) # rdd@env$isCached == TRUE +unpersist(rdd) # rdd@env$isCached == FALSE +} +} + From 0df0e180cd857af73949b4efc92441eecab81962 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 28 Jan 2015 13:16:37 -0800 Subject: [PATCH 351/687] Fix documentation for includePackage --- pkg/R/context.R | 2 +- pkg/man/includePackage.Rd | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index 9ad21cac2bd54..c3db1e14399e3 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -128,7 +128,7 @@ parallelize <- function(sc, coll, numSlices = 1) { #' #' sc <- sparkR.init() #' # Include the matrix library we will be using -#' includePackage(Matrix) +#' includePackage(sc, Matrix) #' #' generateSparse <- function(x) { #' sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) diff --git a/pkg/man/includePackage.Rd b/pkg/man/includePackage.Rd index 005ebcf636b2a..0bbf938763356 100644 --- a/pkg/man/includePackage.Rd +++ b/pkg/man/includePackage.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \name{includePackage} \alias{includePackage} \title{Include this specified package on all workers} @@ -5,17 +6,16 @@ includePackage(sc, pkg) } \arguments{ - \item{sc}{SparkContext to use} +\item{sc}{SparkContext to use} - \item{pkg}{Package name} +\item{pkg}{Package name} } \description{ -This function can be used to include a package on all -workers before the user's code is executed. This is useful -in scenarios where other R package functions are used in a -function passed to functions like \code{lapply}. NOTE: The -package is assumed to be installed on every node in the -Spark cluster. +This function can be used to include a package on all workers before the +user's code is executed. This is useful in scenarios where other R package +functions are used in a function passed to functions like \code{lapply}. +NOTE: The package is assumed to be installed on every node in the Spark +cluster. } \examples{ \dontrun{ @@ -23,7 +23,7 @@ Spark cluster. sc <- sparkR.init() # Include the matrix library we will be using - includePackage(Matrix) + includePackage(sc, Matrix) generateSparse <- function(x) { sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) From 12c102a00ead871eb62c94bb6f91e24336026207 Mon Sep 17 00:00:00 2001 From: Zongheng Yang Date: Wed, 28 Jan 2015 17:59:11 -0800 Subject: [PATCH 352/687] Simplify a unit test. --- pkg/inst/tests/test_parallelize_collect.R | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/pkg/inst/tests/test_parallelize_collect.R b/pkg/inst/tests/test_parallelize_collect.R index 5ea571ffdfff9..611eb7e13a0d2 100644 --- a/pkg/inst/tests/test_parallelize_collect.R +++ b/pkg/inst/tests/test_parallelize_collect.R @@ -68,14 +68,12 @@ test_that("collect(), following a parallelize(), gives back the original collect }) test_that("regression: collect() following a parallelize() does not drop elements", { - lapply(1:72, - function(collLen) { - lapply(1:15, function(numPart) { - expected <- runif(collLen) - actual <- collect(parallelize(jsc, expected, numPart)) - expect_equal(actual, as.list(expected)) - }) - }) + # 10 %/% 6 = 1, ceiling(10 / 6) = 2 + collLen <- 10 + numPart <- 6 + expected <- runif(collLen) + actual <- collect(parallelize(jsc, expected, numPart)) + expect_equal(actual, as.list(expected)) }) test_that("parallelize() and collect() work for lists of pairs (pairwise data)", { From 125ae43006f139d3a471777f32d3d903b4fb6b1b Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 28 Jan 2015 19:10:38 -0800 Subject: [PATCH 353/687] Fix SparkR backend to exit in more cases This change has two fixes 1. When the workspace is saved (from R or RStudio) the backend connection seems to be closed before the finalizer is run. In such cases we reopen the connection and stop the backend 2. With RStudio when R is restarted, there are port-conflicts which appear due to a race condition between the JVM and rsession restart. This change adds a 1 sec sleep to avoid this race. --- pkg/R/sparkR.R | 48 +++++++++++++++++++++++++++++++------------ pkg/R/sparkRBackend.R | 7 ++++--- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 9d216630caaa2..7feb45e8081c5 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -11,21 +11,42 @@ sparkR.onLoad <- function(libname, pkgname) { .sparkREnv$assemblyJarPath <- assemblyJarPath } -#' Stop this Spark context -#' Also terminates the backend this R session is connected to -sparkR.stop <- function(sparkREnv) { - if (exists(".sparkRjsc", envir = .sparkREnv)) { - sc <- get(".sparkRjsc", envir = .sparkREnv) - callJMethod(sc, "stop") +# Utility function that returns TRUE if we have an active connection to the +# backend and FALSE otherwise +connExists <- function(env) { + tryCatch({ + exists(".sparkRCon", envir = env) && isOpen(env[[".sparkRCon"]]) + }, error = function(err) { + return(FALSE) + }) +} + +# Stop the Spark context. +# Also terminates the backend this R session is connected to +sparkR.stop <- function(env) { + cat("Stopping SparkR\n") + + if (!connExists(env)) { + # When the workspace is saved in R, the connections are closed + # *before* the finalizer is run. In these cases, we reconnect + # to the backend, so we can shut it down. + connectBackend("localhost", .sparkREnv$sparkRBackendPort) } - if (exists(".sparkRCon", envir = .sparkREnv)) { - callJStatic("SparkRHandler", "stopBackend") - # Also close the connection and remove it from our env - conn <- get(".sparkRCon", .sparkREnv) - close(conn) - rm(".sparkRCon", envir = .sparkREnv) + if (exists(".sparkRjsc", envir = env)) { + sc <- get(".sparkRjsc", envir = env) + callJMethod(sc, "stop") } + + callJStatic("SparkRHandler", "stopBackend") + # Also close the connection and remove it from our env + conn <- get(".sparkRCon", env) + close(conn) + rm(".sparkRCon", envir = env) + + # Finally, sleep for 1 sec to let backend finish exiting. + # Without this we get port conflicts in RStudio when we try to 'Restart R'. + Sys.sleep(1) } #' Initialize a new Spark Context. @@ -79,7 +100,8 @@ sparkR.init <- function( args = as.character(sparkRBackendPort), javaOpts = paste("-Xmx", sparkMem, sep = "")) Sys.sleep(2) # Wait for backend to come up - connectBackend("localhost", 12345) # Connect to it + .sparkREnv$sparkRBackendPort <- sparkRBackendPort + connectBackend("localhost", sparkRBackendPort) # Connect to it if (nchar(sparkHome) != 0) { sparkHome <- normalizePath(sparkHome) diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index 402290df05f67..eb70e2c73ffbd 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -47,7 +47,7 @@ isRemoveMethod <- function(isStatic, objId, methodName) { # methodName - name of method to be invoked invokeJava <- function(isStatic, objId, methodName, ...) { if (!exists(".sparkRCon", .sparkREnv)) { - stop("No connection to backend found") + stop("No connection to backend found. Please re-run sparkR.init") } # If this isn't a removeJObject call @@ -62,6 +62,7 @@ invokeJava <- function(isStatic, objId, methodName, ...) { } } + rc <- rawConnection(raw(0), "r+") writeBoolean(rc, isStatic) @@ -78,12 +79,12 @@ invokeJava <- function(isStatic, objId, methodName, ...) { writeInt(conn, length(bytesToSend)) writeBin(bytesToSend, conn) + close(rc) # TODO: Can we close this before ? + # TODO: check the status code to output error information returnStatus <- readInt(conn) stopifnot(returnStatus == 0) ret <- readObject(conn) - close(rc) # TODO: Can we close this before ? - ret } From 97e5a1f8dea40885ad63d0ef28ec6e2fa634f400 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 29 Jan 2015 21:34:36 +0800 Subject: [PATCH 354/687] [SPARKR-183] Fix the issue that parallelize collect tests are slow. --- pkg/R/sparkRBackend.R | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index 402290df05f67..d02506f444bf1 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -72,18 +72,21 @@ invokeJava <- function(isStatic, objId, methodName, ...) { writeInt(rc, length(args)) writeArgs(rc, args) + # Construct the whole request message to send it once, + # avoiding write-write-read pattern in case of Nagle's algorithm bytesToSend <- rawConnectionValue(rc) + close(rc) + rc <- rawConnection(raw(0), "r+") + writeInt(rc, length(bytesToSend)) + writeBin(bytesToSend, rc) + bytesToSend <- rawConnectionValue(rc) + close(rc) conn <- get(".sparkRCon", .sparkREnv) - writeInt(conn, length(bytesToSend)) writeBin(bytesToSend, conn) # TODO: check the status code to output error information returnStatus <- readInt(conn) stopifnot(returnStatus == 0) - ret <- readObject(conn) - - close(rc) # TODO: Can we close this before ? - - ret + readObject(conn) } From cd2a5b36357d47396afda382d7ee76b9bfb1239e Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Fri, 30 Jan 2015 08:46:37 +0800 Subject: [PATCH 355/687] Add reference to Nagle's algorithm and clean code. --- pkg/R/sparkRBackend.R | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index d02506f444bf1..95c8269650456 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -73,17 +73,18 @@ invokeJava <- function(isStatic, objId, methodName, ...) { writeArgs(rc, args) # Construct the whole request message to send it once, - # avoiding write-write-read pattern in case of Nagle's algorithm + # avoiding write-write-read pattern in case of Nagle's algorithm. + # Refer to http://en.wikipedia.org/wiki/Nagle%27s_algorithm for the details. bytesToSend <- rawConnectionValue(rc) close(rc) rc <- rawConnection(raw(0), "r+") writeInt(rc, length(bytesToSend)) writeBin(bytesToSend, rc) - bytesToSend <- rawConnectionValue(rc) + requestMessage <- rawConnectionValue(rc) close(rc) conn <- get(".sparkRCon", .sparkREnv) - writeBin(bytesToSend, conn) + writeBin(requestMessage, conn) # TODO: check the status code to output error information returnStatus <- readInt(conn) From a3828357023682f25c1f13f7c3d61a391c656917 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 00:01:42 -0800 Subject: [PATCH 356/687] Fix serialization tracking in pipelined RDDs When creating a pipeline RDD, we need to check if the JavaRDD belonging to the parent is serialized. --- pkg/R/RDD.R | 3 +++ pkg/inst/tests/test_textFile.R | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c1bbbddc9296c..fc0b66ac1cd31 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -64,6 +64,9 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) } .Object@func <- pipelinedFunc .Object@prev_jrdd <- prev@prev_jrdd # maintain the pipeline + # NOTE: Since we are computing on prev@prev_jrdd, we need to track if + # prev_jrdd was serialized or not + .Object@env$serialized <- prev@prev@env$serialized } .Object diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 82a8f0f4c8370..64f8a31ad2183 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -122,3 +122,16 @@ test_that("textFile() on multiple paths", { unlink(fileName2) }) +test_that("Pipelined operations on RDDs created using textFile", { + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + rdd <- textFile(sc, fileName) + + lengths <- lapply(rdd, function(x) { length(x) }) + expect_equal(collect(lengths), list(1, 1)) + lengthsPipelined <- lapply(lengths, function(x) { x + 10}) + expect_equal(collect(lengthsPipelined), list(11, 11)) + unlink(fileName) +}) + From d6c13936084be22ab0fa6d0ecee52a4e92a99f14 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 00:10:21 -0800 Subject: [PATCH 357/687] Suppress warnings from normalizePath --- pkg/R/context.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index c3db1e14399e3..d77c8d04a48a8 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -27,7 +27,7 @@ getMinSplits <- function(sc, minSplits) { #'} textFile <- function(sc, path, minSplits = NULL) { # Allow the user to have a more flexible definiton of the text file path - path <- normalizePath(path) + path <- suppressWarnings(normalizePath(path)) #' Convert a string vector of paths to a string containing comma separated paths path <- paste(path, collapse = ",") @@ -54,7 +54,7 @@ textFile <- function(sc, path, minSplits = NULL) { #'} objectFile <- function(sc, path, minSplits = NULL) { # Allow the user to have a more flexible definiton of the text file path - path <- normalizePath(path) + path <- suppressWarnings(normalizePath(path)) #' Convert a string vector of paths to a string containing comma separated paths path <- paste(path, collapse = ",") From d1c6e6caab4f71238dd418c3c8ebae8132f5a7be Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 00:59:43 -0800 Subject: [PATCH 358/687] Buffer stderr from R and return it on Exception This change buffers the last 100 lines from R process and passes these lines back to the driver if we have an exception. This will help users debug why their tasks failed on the cluster --- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 75 ++++++++++++------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index ee5e6e1f95fd1..f9af24abecf6d 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -32,36 +32,42 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( val pb = rWorkerProcessBuilder() val proc = pb.start() - startStderrThread(proc) + val errThread = startStderrThread(proc) val tempFile = startStdinThread(proc, parentIterator, split.index) // Return an iterator that read lines from the process's stdout val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) - val stdOutFileName = inputStream.readLine().trim() - val dataStream = openDataStream(stdOutFileName) + try { + val stdOutFileName = inputStream.readLine().trim() + + val dataStream = openDataStream(stdOutFileName) - return new Iterator[U] { - def next(): U = { - val obj = _nextObj - if (hasNext) { - _nextObj = read() + return new Iterator[U] { + def next(): U = { + val obj = _nextObj + if (hasNext) { + _nextObj = read() + } + obj } - obj - } - var _nextObj = read() + var _nextObj = read() - def hasNext(): Boolean = { - val hasMore = (_nextObj != null) - if (!hasMore) { - // Delete the temporary file we created as we are done reading it - dataStream.close() - tempFile.delete() + def hasNext(): Boolean = { + val hasMore = (_nextObj != null) + if (!hasMore) { + // Delete the temporary file we created as we are done reading it + dataStream.close() + tempFile.delete() + } + hasMore } - hasMore } + } catch { + case e: Exception => + throw new SparkException("R computation failed with\n " + errThread.getLines()) } } @@ -84,14 +90,10 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( /** * Start a thread to print the process's stderr to ours */ - private def startStderrThread(proc: Process) { - new Thread("stderr reader for R") { - override def run() { - for (line <- Source.fromInputStream(proc.getErrorStream).getLines) { - System.err.println(line) - } - } - }.start() + private def startStderrThread(proc: Process): BufferedStreamThread = { + val errThread = new BufferedStreamThread(proc.getErrorStream, "stderr reader for R") + errThread.start() + errThread } /** @@ -312,6 +314,27 @@ private class StringRRDD[T: ClassTag]( lazy val asJavaRDD : JavaRDD[String] = JavaRDD.fromRDD(this) } +private class BufferedStreamThread(in: InputStream, name: String) extends Thread(name) { + val ERR_BUFFER_SIZE = 100 + val lines = new Array[String](ERR_BUFFER_SIZE) + var lineIdx = 0 + override def run() { + for (line <- Source.fromInputStream(in).getLines) { + lines(lineIdx) = line + lineIdx = (lineIdx + 1) % ERR_BUFFER_SIZE + System.err.println(line) + } + } + + def getLines(): String = { + (0 until ERR_BUFFER_SIZE).filter { x => + lines((x + lineIdx) % ERR_BUFFER_SIZE) != null + }.map { x => + lines((x + lineIdx) % ERR_BUFFER_SIZE) + }.mkString("\n") + } +} + object RRDD { def createSparkContext( From 8f81c453dfb1db26ea2aa64262a3f928a3107e3c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 10:57:20 -0800 Subject: [PATCH 359/687] Remove roxygen export for PipelinedRDD --- pkg/R/RDD.R | 2 -- pkg/man/fullOuterJoin.Rd | 3 +-- pkg/man/name.Rd | 3 +-- pkg/man/setName.Rd | 3 +-- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c1bbbddc9296c..2a6dc0ffa8898 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -77,8 +77,6 @@ RDD <- function(jrdd, serialized = TRUE, isCached = FALSE, new("RDD", jrdd, serialized, isCached, isCheckpointed) } -#' @rdname PipelinedRDD -#' @export PipelinedRDD <- function(prev, func) { new("PipelinedRDD", prev, func, NULL) } diff --git a/pkg/man/fullOuterJoin.Rd b/pkg/man/fullOuterJoin.Rd index ebbafafbea15d..eef2391e323fe 100644 --- a/pkg/man/fullOuterJoin.Rd +++ b/pkg/man/fullOuterJoin.Rd @@ -1,5 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{fullOuterJoin} \alias{fullOuterJoin} diff --git a/pkg/man/name.Rd b/pkg/man/name.Rd index 9206e02e80218..f1334393e6c93 100644 --- a/pkg/man/name.Rd +++ b/pkg/man/name.Rd @@ -1,5 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{name} \alias{name} diff --git a/pkg/man/setName.Rd b/pkg/man/setName.Rd index 2c94055e48fa2..e0bef3a5e435b 100644 --- a/pkg/man/setName.Rd +++ b/pkg/man/setName.Rd @@ -1,5 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{setName} \alias{setName} From 7dd1797859555b27e0aa7c57582f3e9bc249c4c6 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 11:03:43 -0800 Subject: [PATCH 360/687] Address code review comments --- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index f9af24abecf6d..89eb10b23a293 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -41,7 +41,6 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( try { val stdOutFileName = inputStream.readLine().trim() - val dataStream = openDataStream(stdOutFileName) return new Iterator[U] { @@ -91,7 +90,9 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( * Start a thread to print the process's stderr to ours */ private def startStderrThread(proc: Process): BufferedStreamThread = { - val errThread = new BufferedStreamThread(proc.getErrorStream, "stderr reader for R") + val ERR_BUFFER_SIZE = 100 + val errThread = new BufferedStreamThread(proc.getErrorStream, "stderr reader for R", + ERR_BUFFER_SIZE) errThread.start() errThread } @@ -314,23 +315,25 @@ private class StringRRDD[T: ClassTag]( lazy val asJavaRDD : JavaRDD[String] = JavaRDD.fromRDD(this) } -private class BufferedStreamThread(in: InputStream, name: String) extends Thread(name) { - val ERR_BUFFER_SIZE = 100 - val lines = new Array[String](ERR_BUFFER_SIZE) +private class BufferedStreamThread( + in: InputStream, + name: String, + errBufferSize: Int) extends Thread(name) { + val lines = new Array[String](errBufferSize) var lineIdx = 0 override def run() { for (line <- Source.fromInputStream(in).getLines) { lines(lineIdx) = line - lineIdx = (lineIdx + 1) % ERR_BUFFER_SIZE + lineIdx = (lineIdx + 1) % errBufferSize System.err.println(line) } } def getLines(): String = { - (0 until ERR_BUFFER_SIZE).filter { x => - lines((x + lineIdx) % ERR_BUFFER_SIZE) != null + (0 until errBufferSize).filter { x => + lines((x + lineIdx) % errBufferSize) != null }.map { x => - lines((x + lineIdx) % ERR_BUFFER_SIZE) + lines((x + lineIdx) % errBufferSize) }.mkString("\n") } } From e157bf6c71c9f4016cfd09322e3db33b4ecc1d72 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 11:19:02 -0800 Subject: [PATCH 361/687] Use prev_serialized to track if JRDD is serialized This changes introduces a new variable in PipelineRDD environment to track if the prev_jrdd is serialized or not. --- pkg/R/RDD.R | 15 ++++++++++----- pkg/inst/tests/test_textFile.R | 8 ++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index fc0b66ac1cd31..8eee9bc705828 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -46,7 +46,10 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@env$isCached <- FALSE .Object@env$isCheckpointed <- FALSE .Object@env$jrdd_val <- jrdd_val + # This tracks if jrdd_val is serialized .Object@env$serialized <- prev@env$serialized + + # NOTE: We use prev_serialized to track if prev_jrdd is serialized .Object@prev <- prev isPipelinable <- function(rdd) { @@ -58,15 +61,17 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) # This transformation is the first in its stage: .Object@func <- func .Object@prev_jrdd <- getJRDD(prev) + # Since this is the first step in the pipeline, the prev_serialized + # is same as serialized here. + .Object@env$prev_serialized <- .Object@env$serialized } else { pipelinedFunc <- function(split, iterator) { func(split, prev@func(split, iterator)) } .Object@func <- pipelinedFunc .Object@prev_jrdd <- prev@prev_jrdd # maintain the pipeline - # NOTE: Since we are computing on prev@prev_jrdd, we need to track if - # prev_jrdd was serialized or not - .Object@env$serialized <- prev@prev@env$serialized + # Get if the prev_jrdd was serialized from the parent RDD + .Object@env$prev_serialized <- prev@env$prev_serialized } .Object @@ -119,7 +124,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, - rdd@env$serialized, + rdd@env$prev_serialized, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), @@ -129,7 +134,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, - rdd@env$serialized, + rdd@env$prev_serialized, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 64f8a31ad2183..79957297e88de 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -130,8 +130,16 @@ test_that("Pipelined operations on RDDs created using textFile", { lengths <- lapply(rdd, function(x) { length(x) }) expect_equal(collect(lengths), list(1, 1)) + lengthsPipelined <- lapply(lengths, function(x) { x + 10}) expect_equal(collect(lengthsPipelined), list(11, 11)) + + lengths30 <- lapply(lengthsPipelined, function(x) { x + 20 }) + expect_equal(collect(lengths30), list(31, 31)) + + lengths20 <- lapply(lengths, function(x) { x + 20 }) + expect_equal(collect(lengths20), list(21, 21)) + unlink(fileName) }) From 32394dea1f0f76c1a4f274d249f22361a583c197 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 14:08:22 -0800 Subject: [PATCH 362/687] Regenerate Rd files for SparkR This fixes a number of issues in SparkR man pages. The main changes are 1. Don't export or generate docs for PipelineRDD 2. Fix variable names for Filter, count to match base methods 3. Document missing arguments for sparkR.init, print.jobj etc. With this change R CMD check --as-cran does not give any warnings --- pkg/NAMESPACE | 2 +- pkg/R/RDD.R | 46 ++++++++++++++++------------ pkg/R/jobj.R | 13 ++++++-- pkg/R/serialize.R | 2 +- pkg/R/sparkR.R | 4 ++- pkg/R/sparkRBackend.R | 4 +-- pkg/man/RDD.Rd | 23 ++++++++++---- pkg/man/broadcast-class.Rd | 12 ++++---- pkg/man/broadcast-internal.Rd | 10 +++--- pkg/man/broadcast.Rd | 16 +++++----- pkg/man/cache-methods.Rd | 6 ++-- pkg/man/collect-methods.Rd | 17 +++++----- pkg/man/combineByKey.Rd | 41 ++++++++++++------------- pkg/man/count.Rd | 10 +++--- pkg/man/filterRDD.Rd | 9 +++--- pkg/man/flatMap.Rd | 12 ++++---- pkg/man/foreach.Rd | 6 ---- pkg/man/groupByKey.Rd | 12 ++++---- pkg/man/hashCode.Rd | 10 +++--- pkg/man/lapply.Rd | 14 +++++---- pkg/man/lapplyPartitionsWithIndex.Rd | 17 +++++----- pkg/man/parallelize.Rd | 15 +++++---- pkg/man/partitionBy.Rd | 20 ++++++------ pkg/man/print.jobj.Rd | 17 ++++++++++ pkg/man/reduce.Rd | 7 +++-- pkg/man/reduceByKey.Rd | 19 ++++++------ pkg/man/sampleRDD.Rd | 14 ++++----- pkg/man/sparkR.init.Rd | 30 ++++++++++++++---- pkg/man/take.Rd | 5 +-- pkg/man/takeSample.Rd | 12 ++++---- pkg/man/textFile.Rd | 16 +++++----- 31 files changed, 246 insertions(+), 195 deletions(-) create mode 100644 pkg/man/print.jobj.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 4546c9fc7b91e..6977dd2d43330 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -1,6 +1,5 @@ #exportPattern("^[[:alpha:]]+") exportClasses("RDD") -exportClasses("PipelinedRDD") exportClasses("Broadcast") exportMethods( "cache", @@ -67,3 +66,4 @@ export( export("sparkR.init") export("print.jobj") useDynLib(SparkR, stringHashCode) +importFrom(methods, setGeneric, setMethod, setOldClass) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 2a6dc0ffa8898..3744ca6a0d94a 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -8,8 +8,8 @@ setOldClass("jobj") #' @rdname RDD #' @seealso parallelize, textFile #' -#' @param env An R environment that stores bookkeeping states of the RDD -#' @param jrdd Java object reference to the backing JavaRDD +#' @slot env An R environment that stores bookkeeping states of the RDD +#' @slot jrdd Java object reference to the backing JavaRDD #' @export setClass("RDD", slots = list(env = "environment", @@ -72,6 +72,11 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) #' @rdname RDD #' @export +#' +#' @param jrdd Java object reference to the backing JavaRDD +#' @param serialized TRUE if the RDD stores data serialized in R +#' @param isCached TRUE if the RDD is cached +#' @param isCheckpointed TRUE if the RDD has been checkpointed RDD <- function(jrdd, serialized = TRUE, isCached = FALSE, isCheckpointed = FALSE) { new("RDD", jrdd, serialized, isCached, isCheckpointed) @@ -403,7 +408,7 @@ setMethod("lookup", #' Return the number of elements in the RDD. #' -#' @param rdd The RDD to count +#' @param x The RDD to count #' @return number of elements in the RDD. #' @rdname count #' @export @@ -414,17 +419,17 @@ setMethod("lookup", #' count(rdd) # 10 #' length(rdd) # Same as count #'} -setGeneric("count", function(rdd) { standardGeneric("count") }) +setGeneric("count", function(x) { standardGeneric("count") }) #' @rdname count #' @aliases count,RDD-method setMethod("count", - signature(rdd = "RDD"), - function(rdd) { + signature(x = "RDD"), + function(x) { countPartition <- function(part) { as.integer(length(part)) } - valsRDD <- lapplyPartition(rdd, countPartition) + valsRDD <- lapplyPartition(x, countPartition) vals <- collect(valsRDD) sum(as.integer(vals)) }) @@ -500,6 +505,7 @@ setMethod("countByKey", #' @param FUN the transformation to apply on each element #' @return a new RDD created by the transformation. #' @rdname lapply +#' @aliases lapply #' @export #' @examples #'\dontrun{ @@ -655,8 +661,8 @@ setMethod("mapPartitionsWithIndex", #' a predicate (i.e. returning TRUE in a given logical function). #' The same as `filter()' in Spark. #' -#' @param rdd The RDD to be filtered. -#' @param filterFunc A unary predicate function. +#' @param x The RDD to be filtered. +#' @param f A unary predicate function. #' @rdname filterRDD #' @export #' @examples @@ -666,21 +672,22 @@ setMethod("mapPartitionsWithIndex", #' unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) #'} setGeneric("filterRDD", - function(rdd, filterFunc) { standardGeneric("filterRDD") }) + function(x, f) { standardGeneric("filterRDD") }) #' @rdname filterRDD #' @aliases filterRDD,RDD,function-method setMethod("filterRDD", - signature(rdd = "RDD", filterFunc = "function"), - function(rdd, filterFunc) { + signature(x = "RDD", f = "function"), + function(x, f) { filter.func <- function(part) { - Filter(filterFunc, part) + Filter(f, part) } - lapplyPartition(rdd, filter.func) + lapplyPartition(x, filter.func) }) #' @rdname filterRDD -#' @aliases Filter,function,RDD-method +#' @export +#' @aliases Filter setMethod("Filter", signature(f = "function", x = "RDD"), function(f, x) { @@ -791,9 +798,6 @@ setMethod("foreach", #' Applies a function to each partition in an RDD, and force evaluation. #' -#' @param rdd The RDD to apply the function -#' @param func The function to be applied to partitions. -#' @return invisible NULL. #' @export #' @rdname foreach #' @examples @@ -1641,7 +1645,8 @@ setMethod("join", #' sc <- sparkR.init() #' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) #' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' leftOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +#' leftOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) #'} setGeneric("leftOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("leftOuterJoin") }) @@ -1710,7 +1715,8 @@ setMethod("leftOuterJoin", #' sc <- sparkR.init() #' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) #' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rightOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +#' rightOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) #'} setGeneric("rightOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("rightOuterJoin") }) diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R index 42bfb82017dbf..de459110c426c 100644 --- a/pkg/R/jobj.R +++ b/pkg/R/jobj.R @@ -33,10 +33,17 @@ jobj <- function(objId) { obj } -print.jobj <- function(jobj) { - cls <- callJMethod(jobj, "getClass") +#' Print a JVM object reference. +#' +#' This function prints the type and id for an object stored +#' in the SparkR JVM backend. +#' +#' @param x The JVM object reference +#' @param ... further arguments passed to or from other methods +print.jobj <- function(x, ...) { + cls <- callJMethod(x, "getClass") name <- callJMethod(cls, "getName") - cat("Java ref type", name, "id", jobj$id, "\n", sep = " ") + cat("Java ref type", name, "id", x$id, "\n", sep = " ") } cleanup.jobj <- function(jobj) { diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index a64866ef6e877..924d8e8e1e20b 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -51,7 +51,7 @@ writeBoolean <- function(con, value) { } writeRawSerialize <- function(outputCon, batch) { - outputSer <- serialize(batch, ascii = FALSE, conn = NULL) + outputSer <- serialize(batch, ascii = FALSE, connection = NULL) writeRaw(outputCon, outputSer) } diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 7feb45e8081c5..ea9129d3bd40f 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -59,6 +59,8 @@ sparkR.stop <- function(env) { #' @param sparkEnvir Named list of environment variables to set on worker nodes. #' @param sparkExecutorEnv Named list of environment variables to be used when launching executors. #' @param sparkJars Character string vector of jar files to pass to the worker nodes. +#' @param sparkRLibDir The path where R is installed on the worker nodes. +#' @param sparkRBackendPort The port to use for SparkR JVM Backend. #' @export #' @examples #'\dontrun{ @@ -67,7 +69,7 @@ sparkR.stop <- function(env) { #' list(spark.executor.memory="1g")) #' sc <- sparkR.init("yarn-client", "SparkR", "/home/spark", #' list(spark.executor.memory="1g"), -#' list(LD_LIBRARY_PATH="/directory of Java VM Library Files (libjvm.so) on worker nodes/"), +#' list(LD_LIBRARY_PATH="/directory of JVM libraries (libjvm.so) on workers/"), #' c("jarfile1.jar","jarfile2.jar")) #'} diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index ff48d6b6da1a3..e4e9eda14bdc7 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -4,8 +4,8 @@ # Returns TRUE if object is an instance of given class isInstanceOf <- function(jobj, className) { stopifnot(class(jobj) == "jobj") - cls <- SparkR:::callJStatic("java.lang.Class", "forName", className) - SparkR:::callJMethod(cls, "isInstance", jobj) + cls <- callJStatic("java.lang.Class", "forName", className) + callJMethod(cls, "isInstance", jobj) } # Call a Java method named methodName on the object diff --git a/pkg/man/RDD.Rd b/pkg/man/RDD.Rd index c3abc9f0b5640..53d31950c08e0 100644 --- a/pkg/man/RDD.Rd +++ b/pkg/man/RDD.Rd @@ -1,21 +1,32 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{class} \name{RDD-class} \alias{RDD} \alias{RDD-class} \title{S4 class that represents an RDD} \usage{ -RDD(jrdd, serialized = TRUE) +RDD(jrdd, serialized = TRUE, isCached = FALSE, isCheckpointed = FALSE) } \arguments{ - \item{jrdd}{Java object reference to the backing JavaRDD} +\item{jrdd}{Java object reference to the backing JavaRDD} - \item{serialized}{TRUE if the JavaRDD contains serialized - R objects} +\item{serialized}{TRUE if the RDD stores data serialized in R} + +\item{isCached}{TRUE if the RDD is cached} + +\item{isCheckpointed}{TRUE if the RDD has been checkpointed} } \description{ -RDD can be created using functions like \code{parallelize}, -\code{textFile} etc. +RDD can be created using functions like + \code{parallelize}, \code{textFile} etc. } +\section{Slots}{ + +\describe{ +\item{\code{env}}{An R environment that stores bookkeeping states of the RDD} + +\item{\code{jrdd}}{Java object reference to the backing JavaRDD} +}} \seealso{ parallelize, textFile } diff --git a/pkg/man/broadcast-class.Rd b/pkg/man/broadcast-class.Rd index 467e3aa7d6932..68514789d8e17 100644 --- a/pkg/man/broadcast-class.Rd +++ b/pkg/man/broadcast-class.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{class} \name{Broadcast-class} \alias{Broadcast} @@ -7,18 +8,17 @@ Broadcast(id, value, jBroadcastRef, objName) } \arguments{ - \item{id}{Id of the backing Spark broadcast variable} +\item{id}{Id of the backing Spark broadcast variable} - \item{value}{Value of the broadcast variable} +\item{value}{Value of the broadcast variable} - \item{jBroadcastRef}{reference to the backing Java - broadcast object} +\item{jBroadcastRef}{reference to the backing Java broadcast object} - \item{objName}{name of broadcasted object} +\item{objName}{name of broadcasted object} } \description{ Broadcast variables can be created using the broadcast -function from a \code{SparkContext}. + function from a \code{SparkContext}. } \seealso{ broadcast diff --git a/pkg/man/broadcast-internal.Rd b/pkg/man/broadcast-internal.Rd index 1225bc9b6b6bd..14f81e9561968 100644 --- a/pkg/man/broadcast-internal.Rd +++ b/pkg/man/broadcast-internal.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \name{setBroadcastValue} \alias{setBroadcastValue} \title{Internal function to set values of a broadcast variable.} @@ -5,14 +6,13 @@ setBroadcastValue(bcastId, value) } \arguments{ - \item{bcastId}{The id of broadcast variable to set} +\item{bcastId}{The id of broadcast variable to set} - \item{value}{The value to be set} +\item{value}{The value to be set} } \description{ -This function is used internally by Spark to set the value -of a broadcast variable on workers. Not intended for use -outside the package. +This function is used internally by Spark to set the value of a broadcast +variable on workers. Not intended for use outside the package. } \seealso{ broadcast, value diff --git a/pkg/man/broadcast.Rd b/pkg/man/broadcast.Rd index 7838683e18ea4..766592f1a1d99 100644 --- a/pkg/man/broadcast.Rd +++ b/pkg/man/broadcast.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{value} \alias{broadcast} @@ -12,19 +13,18 @@ value(bcast) broadcast(sc, object) } \arguments{ - \item{bcast}{The broadcast variable to get} +\item{bcast}{The broadcast variable to get} - \item{sc}{Spark Context to use} +\item{sc}{Spark Context to use} - \item{object}{Object to be broadcast} +\item{object}{Object to be broadcast} } \description{ -\code{value} can be used to get the value of a broadcast -variable inside a distributed function. +\code{value} can be used to get the value of a broadcast variable inside +a distributed function. -Broadcast a read-only variable to the cluster, returning a -\code{Broadcast} object for reading it in distributed -functions. +Broadcast a read-only variable to the cluster, returning a \code{Broadcast} +object for reading it in distributed functions. } \examples{ \dontrun{ diff --git a/pkg/man/cache-methods.Rd b/pkg/man/cache-methods.Rd index 4f8efc7c35eae..07acbb764791b 100644 --- a/pkg/man/cache-methods.Rd +++ b/pkg/man/cache-methods.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{cache} \alias{cache} @@ -9,11 +10,10 @@ cache(rdd) \S4method{cache}{RDD}(rdd) } \arguments{ - \item{rdd}{The RDD to cache} +\item{rdd}{The RDD to cache} } \description{ -Persist this RDD with the default storage level -(MEMORY_ONLY). +Persist this RDD with the default storage level (MEMORY_ONLY). } \examples{ \dontrun{ diff --git a/pkg/man/collect-methods.Rd b/pkg/man/collect-methods.Rd index 77bf79b80dc26..57d9f0481c839 100644 --- a/pkg/man/collect-methods.Rd +++ b/pkg/man/collect-methods.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{collect} \alias{collect} @@ -16,24 +17,22 @@ collectPartition(rdd, partitionId) \S4method{collectPartition}{RDD,integer}(rdd, partitionId) } \arguments{ - \item{rdd}{The RDD to collect} +\item{rdd}{The RDD to collect} - \item{...}{Other optional arguments to collect} +\item{...}{Other optional arguments to collect} - \item{flatten}{FALSE if the list should not flattened} +\item{flatten}{FALSE if the list should not flattened} - \item{partitionId}{the partition to collect (starts from - 0)} +\item{partitionId}{the partition to collect (starts from 0)} } \value{ a list containing elements in the RDD } \description{ -\code{collect} returns a list that contains all of the -elements in this RDD. +\code{collect} returns a list that contains all of the elements in this RDD. -\code{collectPartition} returns a list that contains all of -the elements in the specified partition of the RDD. +\code{collectPartition} returns a list that contains all of the elements +in the specified partition of the RDD. } \examples{ \dontrun{ diff --git a/pkg/man/combineByKey.Rd b/pkg/man/combineByKey.Rd index ac46b4fde7cb1..0f632370fbcd1 100644 --- a/pkg/man/combineByKey.Rd +++ b/pkg/man/combineByKey.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{combineByKey} \alias{combineByKey} @@ -10,36 +11,32 @@ combineByKey(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) mergeValue, mergeCombiners, numPartitions) } \arguments{ - \item{rdd}{The RDD to combine. Should be an RDD where - each element is list(K, V).} +\item{rdd}{The RDD to combine. Should be an RDD where each element is +list(K, V).} - \item{createCombiner}{Create a combiner (C) given a value - (V)} +\item{createCombiner}{Create a combiner (C) given a value (V)} - \item{mergeValue}{Merge the given value (V) with an - existing combiner (C)} +\item{mergeValue}{Merge the given value (V) with an existing combiner (C)} - \item{mergeCombiners}{Merge two combiners and return a - new combiner} +\item{mergeCombiners}{Merge two combiners and return a new combiner} - \item{numPartitions}{Number of partitions to create.} +\item{numPartitions}{Number of partitions to create.} } \value{ -An RDD where each element is list(K, C) where C is the -combined type +An RDD where each element is list(K, C) where C is the combined type } \description{ -Generic function to combine the elements for each key using -a custom set of aggregation functions. Turns an RDD[(K, V)] -into a result of type RDD[(K, C)], for a "combined type" C. -Note that V and C can be different -- for example, one -might group an RDD of type (Int, Int) into an RDD of type -(Int, Seq[Int]). Users provide three functions: \itemize{ -\item createCombiner, which turns a V into a C (e.g., -creates a one-element list) \item mergeValue, to merge a V -into a C (e.g., adds it to the end of a list) - \item -mergeCombiners, to combine two C's into a single one (e.g., -concatentates two lists). } +Generic function to combine the elements for each key using a custom set of +aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], +for a "combined type" C. Note that V and C can be different -- for example, one +might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). +Users provide three functions: +\itemize{ + \item createCombiner, which turns a V into a C (e.g., creates a one-element list) + \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - + \item mergeCombiners, to combine two C's into a single one (e.g., concatentates + two lists). +} } \examples{ \dontrun{ diff --git a/pkg/man/count.Rd b/pkg/man/count.Rd index 58492a523fa47..109f3a93645ab 100644 --- a/pkg/man/count.Rd +++ b/pkg/man/count.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{count} \alias{count} @@ -5,17 +6,14 @@ \alias{length,RDD-method} \title{Return the number of elements in the RDD.} \usage{ -count(rdd) +count(x) -\S4method{count}{RDD}(rdd) +\S4method{count}{RDD}(x) \S4method{length}{RDD}(x) } \arguments{ - \item{rdd}{The RDD to count} - - \item{x}{an \R object. For replacement, a vector or - factor.} +\item{x}{The RDD to count} } \value{ number of elements in the RDD. diff --git a/pkg/man/filterRDD.Rd b/pkg/man/filterRDD.Rd index 5c0bf109bda34..b0a00ffcd5a37 100644 --- a/pkg/man/filterRDD.Rd +++ b/pkg/man/filterRDD.Rd @@ -1,6 +1,7 @@ % Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{filterRDD} +\alias{Filter} \alias{Filter,function,RDD-method} \alias{filterRDD} \alias{filterRDD,RDD,function-method} @@ -8,16 +9,16 @@ a predicate (i.e. returning TRUE in a given logical function). The same as `filter()' in Spark.} \usage{ -filterRDD(rdd, filterFunc) +filterRDD(x, f) -\S4method{filterRDD}{RDD,`function`}(rdd, filterFunc) +\S4method{filterRDD}{RDD,`function`}(x, f) \S4method{Filter}{`function`,RDD}(f, x) } \arguments{ -\item{rdd}{The RDD to be filtered.} +\item{x}{The RDD to be filtered.} -\item{filterFunc}{A unary predicate function.} +\item{f}{A unary predicate function.} } \description{ This function returns a new RDD containing only the elements that satisfy diff --git a/pkg/man/flatMap.Rd b/pkg/man/flatMap.Rd index 8fb354c3b82b3..19b97e01d0789 100644 --- a/pkg/man/flatMap.Rd +++ b/pkg/man/flatMap.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{flatMap} \alias{flatMap} @@ -6,20 +7,19 @@ \usage{ flatMap(X, FUN) -\S4method{flatMap}{RDD,function}(X, FUN) +\S4method{flatMap}{RDD,`function`}(X, FUN) } \arguments{ - \item{X}{The RDD to apply the transformation.} +\item{X}{The RDD to apply the transformation.} - \item{FUN}{the transformation to apply on each element} +\item{FUN}{the transformation to apply on each element} } \value{ a new RDD created by the transformation. } \description{ -This function return a new RDD by first applying a function -to all elements of this RDD, and then flattening the -results. +This function return a new RDD by first applying a function to all +elements of this RDD, and then flattening the results. } \examples{ \dontrun{ diff --git a/pkg/man/foreach.Rd b/pkg/man/foreach.Rd index 8e3a081005188..fa875d1279102 100644 --- a/pkg/man/foreach.Rd +++ b/pkg/man/foreach.Rd @@ -19,14 +19,8 @@ foreachPartition(rdd, func) \item{rdd}{The RDD to apply the function} \item{func}{The function to be applied.} - -\item{rdd}{The RDD to apply the function} - -\item{func}{The function to be applied to partitions.} } \value{ -invisible NULL. - invisible NULL. } \description{ diff --git a/pkg/man/groupByKey.Rd b/pkg/man/groupByKey.Rd index 8eb0b284bd8ac..adaaf022c9c46 100644 --- a/pkg/man/groupByKey.Rd +++ b/pkg/man/groupByKey.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{groupByKey} \alias{groupByKey} @@ -9,18 +10,17 @@ groupByKey(rdd, numPartitions) \S4method{groupByKey}{RDD,integer}(rdd, numPartitions) } \arguments{ - \item{rdd}{The RDD to group. Should be an RDD where each - element is list(K, V).} +\item{rdd}{The RDD to group. Should be an RDD where each element is +list(K, V).} - \item{numPartitions}{Number of partitions to create.} +\item{numPartitions}{Number of partitions to create.} } \value{ An RDD where each element is list(K, list(V)) } \description{ -This function operates on RDDs where every element is of -the form list(K, V). and group values for each key in the -RDD into a single sequence. +This function operates on RDDs where every element is of the form list(K, V). +and group values for each key in the RDD into a single sequence. } \examples{ \dontrun{ diff --git a/pkg/man/hashCode.Rd b/pkg/man/hashCode.Rd index d2dcd2090bc4f..5b18f4aec4d4d 100644 --- a/pkg/man/hashCode.Rd +++ b/pkg/man/hashCode.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \name{hashCode} \alias{hashCode} \title{Compute the hashCode of an object} @@ -5,18 +6,17 @@ hashCode(key) } \arguments{ - \item{key}{the object to be hashed} +\item{key}{the object to be hashed} } \value{ the hash code as an integer } \description{ -Java-style function to compute the hashCode for the given -object. Returns an integer value. +Java-style function to compute the hashCode for the given object. Returns +an integer value. } \details{ -This only works for integer, numeric and character types -right now. +This only works for integer, numeric and character types right now. } \examples{ hashCode(1L) # 1 diff --git a/pkg/man/lapply.Rd b/pkg/man/lapply.Rd index 6a7cb107169c6..bf4f7505fc4c7 100644 --- a/pkg/man/lapply.Rd +++ b/pkg/man/lapply.Rd @@ -1,27 +1,29 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{lapply,RDD,function-method} +\alias{lapply} \alias{lapply,RDD,function-method} \alias{map} \alias{map,RDD,function-method} \title{Apply a function to all elements} \usage{ -\S4method{lapply}{RDD,function}(X, FUN) +\S4method{lapply}{RDD,`function`}(X, FUN) map(X, FUN) -\S4method{map}{RDD,function}(X, FUN) +\S4method{map}{RDD,`function`}(X, FUN) } \arguments{ - \item{X}{The RDD to apply the transformation.} +\item{X}{The RDD to apply the transformation.} - \item{FUN}{the transformation to apply on each element} +\item{FUN}{the transformation to apply on each element} } \value{ a new RDD created by the transformation. } \description{ -This function creates a new RDD by applying the given -transformation to all elements of the given RDD +This function creates a new RDD by applying the given transformation to all +elements of the given RDD } \examples{ \dontrun{ diff --git a/pkg/man/lapplyPartitionsWithIndex.Rd b/pkg/man/lapplyPartitionsWithIndex.Rd index 26edd5ad88506..3fbddf930aeba 100644 --- a/pkg/man/lapplyPartitionsWithIndex.Rd +++ b/pkg/man/lapplyPartitionsWithIndex.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{lapplyPartitionsWithIndex} \alias{lapplyPartitionsWithIndex} @@ -9,26 +10,24 @@ tracking the index of the original partition.} \usage{ lapplyPartitionsWithIndex(X, FUN) -\S4method{lapplyPartitionsWithIndex}{RDD,function}(X, FUN) +\S4method{lapplyPartitionsWithIndex}{RDD,`function`}(X, FUN) mapPartitionsWithIndex(X, FUN) -\S4method{mapPartitionsWithIndex}{RDD,function}(X, FUN) +\S4method{mapPartitionsWithIndex}{RDD,`function`}(X, FUN) } \arguments{ - \item{X}{The RDD to apply the transformation.} +\item{X}{The RDD to apply the transformation.} - \item{FUN}{the transformation to apply on each partition; - takes the partition index and a list of elements in the - particular partition.} +\item{FUN}{the transformation to apply on each partition; takes the partition +index and a list of elements in the particular partition.} } \value{ a new RDD created by the transformation. } \description{ -Return a new RDD by applying a function to each partition -of this RDD, while tracking the index of the original -partition. +Return a new RDD by applying a function to each partition of this RDD, while +tracking the index of the original partition. } \examples{ \dontrun{ diff --git a/pkg/man/parallelize.Rd b/pkg/man/parallelize.Rd index dbd2555b71058..70534c1b78a0d 100644 --- a/pkg/man/parallelize.Rd +++ b/pkg/man/parallelize.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \name{parallelize} \alias{parallelize} \title{Create an RDD from a homogeneous list or vector.} @@ -5,21 +6,19 @@ parallelize(sc, coll, numSlices = 1) } \arguments{ - \item{sc}{SparkContext to use} +\item{sc}{SparkContext to use} - \item{coll}{collection to parallelize} +\item{coll}{collection to parallelize} - \item{numSlices}{number of partitions to create in the - RDD} +\item{numSlices}{number of partitions to create in the RDD} } \value{ an RDD created from this collection } \description{ -This function creates an RDD from a local homogeneous list -in R. The elements in the list are split into -\code{numSlices} slices and distributed to nodes in the -cluster. +This function creates an RDD from a local homogeneous list in R. The elements +in the list are split into \code{numSlices} slices and distributed to nodes +in the cluster. } \examples{ \dontrun{ diff --git a/pkg/man/partitionBy.Rd b/pkg/man/partitionBy.Rd index d611ec64ddb17..1c33097c937a3 100644 --- a/pkg/man/partitionBy.Rd +++ b/pkg/man/partitionBy.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{partitionBy} \alias{partitionBy} @@ -10,24 +11,23 @@ partitionBy(rdd, numPartitions, ...) partitionFunc = hashCode) } \arguments{ - \item{rdd}{The RDD to partition. Should be an RDD where - each element is list(K, V).} +\item{rdd}{The RDD to partition. Should be an RDD where each element is +list(K, V).} - \item{numPartitions}{Number of partitions to create.} +\item{numPartitions}{Number of partitions to create.} - \item{...}{Other optional arguments to partitionBy.} +\item{...}{Other optional arguments to partitionBy.} - \item{partitionFunc}{The partition function to use. Uses - a default hashCode function if not provided} +\item{partitionFunc}{The partition function to use. Uses a default hashCode +function if not provided} } \value{ An RDD partitioned using the specified partitioner. } \description{ -This function operates on RDDs where every element is of -the form list(K, V). For each element of this RDD, the -partitioner is used to compute a hash function and the RDD -is partitioned using this hash value. +This function operates on RDDs where every element is of the form list(K, V). +For each element of this RDD, the partitioner is used to compute a hash +function and the RDD is partitioned using this hash value. } \examples{ \dontrun{ diff --git a/pkg/man/print.jobj.Rd b/pkg/man/print.jobj.Rd new file mode 100644 index 0000000000000..43d78586fc6f1 --- /dev/null +++ b/pkg/man/print.jobj.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{print.jobj} +\alias{print.jobj} +\title{Print a JVM object reference.} +\usage{ +\method{print}{jobj}(x, ...) +} +\arguments{ +\item{x}{The JVM object reference} + +\item{...}{further arguments passed to or from other methods} +} +\description{ +This function prints the type and id for an object stored +in the SparkR JVM backend. +} + diff --git a/pkg/man/reduce.Rd b/pkg/man/reduce.Rd index 3dab2da3606e6..025d518994716 100644 --- a/pkg/man/reduce.Rd +++ b/pkg/man/reduce.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{reduce} \alias{reduce} @@ -10,10 +11,10 @@ reduce(rdd, func) \S4method{reduce}{RDD}(rdd, func) } \arguments{ - \item{rdd}{The RDD to reduce} +\item{rdd}{The RDD to reduce} - \item{func}{Commutative and associative function to apply - on elements of the RDD.} +\item{func}{Commutative and associative function to apply on elements +of the RDD.} } \description{ This function reduces the elements of this RDD using the diff --git a/pkg/man/reduceByKey.Rd b/pkg/man/reduceByKey.Rd index 08246dfed098a..f4a63fd384d3a 100644 --- a/pkg/man/reduceByKey.Rd +++ b/pkg/man/reduceByKey.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{reduceByKey} \alias{reduceByKey} @@ -10,22 +11,20 @@ reduceByKey(rdd, combineFunc, numPartitions) \S4method{reduceByKey}{RDD,ANY,integer}(rdd, combineFunc, numPartitions) } \arguments{ - \item{rdd}{The RDD to reduce by key. Should be an RDD - where each element is list(K, V).} +\item{rdd}{The RDD to reduce by key. Should be an RDD where each element is +list(K, V).} - \item{combineFunc}{The associative reduce function to - use.} +\item{combineFunc}{The associative reduce function to use.} - \item{numPartitions}{Number of partitions to create.} +\item{numPartitions}{Number of partitions to create.} } \value{ -An RDD where each element is list(K, V') where V' is the -merged value +An RDD where each element is list(K, V') where V' is the merged + value } \description{ -This function operates on RDDs where every element is of -the form list(K, V). and merges the values for each key -using an associative reduce function. +This function operates on RDDs where every element is of the form list(K, V). +and merges the values for each key using an associative reduce function. } \examples{ \dontrun{ diff --git a/pkg/man/sampleRDD.Rd b/pkg/man/sampleRDD.Rd index 5d057fd1ad59b..c6b6fc831840c 100644 --- a/pkg/man/sampleRDD.Rd +++ b/pkg/man/sampleRDD.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{sampleRDD} \alias{sampleRDD} @@ -11,18 +12,17 @@ sampleRDD(rdd, withReplacement, fraction, seed) fraction, seed) } \arguments{ - \item{rdd}{The RDD to sample elements from} +\item{rdd}{The RDD to sample elements from} - \item{withReplacement}{Sampling with replacement or not} +\item{withReplacement}{Sampling with replacement or not} - \item{fraction}{The (rough) sample target fraction} +\item{fraction}{The (rough) sample target fraction} - \item{seed}{Randomness seed value} +\item{seed}{Randomness seed value} } \description{ -The same as `sample()' in Spark. (We rename it due to -signature inconsistencies with the `sample()' function in -R's base package.) +The same as `sample()' in Spark. (We rename it due to signature +inconsistencies with the `sample()' function in R's base package.) } \examples{ \dontrun{ diff --git a/pkg/man/sparkR.init.Rd b/pkg/man/sparkR.init.Rd index cbfa57ed65042..daf9066892be6 100644 --- a/pkg/man/sparkR.init.Rd +++ b/pkg/man/sparkR.init.Rd @@ -1,24 +1,42 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \name{sparkR.init} \alias{sparkR.init} \title{Initialize a new Spark Context.} \usage{ sparkR.init(master = "local", appName = "SparkR", - sparkHome = Sys.getenv("SPARK_HOME")) + sparkHome = Sys.getenv("SPARK_HOME"), sparkEnvir = list(), + sparkExecutorEnv = list(), sparkJars = "", sparkRLibDir = "", + sparkRBackendPort = 12345) } \arguments{ - \item{master}{The Spark master URL.} +\item{master}{The Spark master URL.} - \item{appName}{Application name to register with cluster - manager} +\item{appName}{Application name to register with cluster manager} - \item{sparkHome}{Spark Home directory} +\item{sparkHome}{Spark Home directory} + +\item{sparkEnvir}{Named list of environment variables to set on worker nodes.} + +\item{sparkExecutorEnv}{Named list of environment variables to be used when launching executors.} + +\item{sparkJars}{Character string vector of jar files to pass to the worker nodes.} + +\item{sparkRLibDir}{The path where R is installed on the worker nodes.} + +\item{sparkRBackendPort}{The port to use for SparkR JVM Backend.} } \description{ This function initializes a new SparkContext. } \examples{ \dontrun{ -sparkR.init("local[2]", "SparkR", "/home/spark") +sc <- sparkR.init("local[2]", "SparkR", "/home/spark") +sc <- sparkR.init("local[2]", "SparkR", "/home/spark", + list(spark.executor.memory="1g")) +sc <- sparkR.init("yarn-client", "SparkR", "/home/spark", + list(spark.executor.memory="1g"), + list(LD_LIBRARY_PATH="/directory of Java VM Library Files (libjvm.so) on worker nodes/"), + c("jarfile1.jar","jarfile2.jar")) } } diff --git a/pkg/man/take.Rd b/pkg/man/take.Rd index 4960b25a78b2e..2f1e5c88d4ea6 100644 --- a/pkg/man/take.Rd +++ b/pkg/man/take.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{take} \alias{take} @@ -9,9 +10,9 @@ take(rdd, num) \S4method{take}{RDD,numeric}(rdd, num) } \arguments{ - \item{rdd}{The RDD to take elements from} +\item{rdd}{The RDD to take elements from} - \item{num}{Number of elements to take} +\item{num}{Number of elements to take} } \description{ This function takes the first NUM elements in the RDD and diff --git a/pkg/man/takeSample.Rd b/pkg/man/takeSample.Rd index 52711c0472709..b417cc70f9a85 100644 --- a/pkg/man/takeSample.Rd +++ b/pkg/man/takeSample.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} \name{takeSample} \alias{takeSample} @@ -11,17 +12,16 @@ takeSample(rdd, withReplacement, num, seed) seed) } \arguments{ - \item{rdd}{The RDD to sample elements from} +\item{rdd}{The RDD to sample elements from} - \item{withReplacement}{Sampling with replacement or not} +\item{withReplacement}{Sampling with replacement or not} - \item{num}{Number of elements to return} +\item{num}{Number of elements to return} - \item{seed}{Randomness seed value} +\item{seed}{Randomness seed value} } \description{ -Return a list of the elements that are a sampled subset of -the given RDD. +Return a list of the elements that are a sampled subset of the given RDD. } \examples{ \dontrun{ diff --git a/pkg/man/textFile.Rd b/pkg/man/textFile.Rd index 65bb4f80f72d1..f8b07a0a98e4a 100644 --- a/pkg/man/textFile.Rd +++ b/pkg/man/textFile.Rd @@ -1,3 +1,4 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand \name{textFile} \alias{textFile} \title{Create an RDD from a text file.} @@ -5,21 +6,20 @@ textFile(sc, path, minSplits = NULL) } \arguments{ - \item{sc}{SparkContext to use} +\item{sc}{SparkContext to use} - \item{path}{Path of file to read. A vector of multiple paths is allowed.} +\item{path}{Path of file to read. A vector of multiple paths is allowed.} - \item{minSplits}{Minimum number of splits to be created. - If NULL, the default value is chosen based on available - parallelism.} +\item{minSplits}{Minimum number of splits to be created. If NULL, the default +value is chosen based on available parallelism.} } \value{ RDD where each item is of type \code{character} } \description{ -This function reads a text file from HDFS, a local file -system (available on all nodes), or any Hadoop-supported -file system URI, and creates an RDD of strings from it. +This function reads a text file from HDFS, a local file system (available on all +nodes), or any Hadoop-supported file system URI, and creates an +RDD of strings from it. } \examples{ \dontrun{ From ac5ceb11407e9f8105a330b1164c99b69761da32 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 14:56:56 -0800 Subject: [PATCH 363/687] Fix code review comments --- pkg/R/RDD.R | 1 + pkg/inst/tests/test_textFile.R | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 8eee9bc705828..0e3516ed083cf 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -50,6 +50,7 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@env$serialized <- prev@env$serialized # NOTE: We use prev_serialized to track if prev_jrdd is serialized + # prev_serialized is used during the delayed computation of JRDD in getJRDD .Object@prev <- prev isPipelinable <- function(rdd) { diff --git a/pkg/inst/tests/test_textFile.R b/pkg/inst/tests/test_textFile.R index 79957297e88de..d0c78621f4432 100644 --- a/pkg/inst/tests/test_textFile.R +++ b/pkg/inst/tests/test_textFile.R @@ -131,7 +131,7 @@ test_that("Pipelined operations on RDDs created using textFile", { lengths <- lapply(rdd, function(x) { length(x) }) expect_equal(collect(lengths), list(1, 1)) - lengthsPipelined <- lapply(lengths, function(x) { x + 10}) + lengthsPipelined <- lapply(lengths, function(x) { x + 10 }) expect_equal(collect(lengthsPipelined), list(11, 11)) lengths30 <- lapply(lengthsPipelined, function(x) { x + 20 }) From aaf8f471bfd8552c6dbc740cea63630f5b4e60dd Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 30 Jan 2015 23:53:40 -0800 Subject: [PATCH 364/687] Exclude hadoop client from Spark dependency --- pkg/src/build.sbt | 3 ++- pkg/src/pom.xml | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index ba3a84ac876ab..93b04b5a3b23b 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -26,6 +26,7 @@ libraryDependencies ++= Seq( val excludeNetty = ExclusionRule(organization = "org.jboss.netty") val excludeAsm = ExclusionRule(organization = "asm") val excludeSnappy = ExclusionRule(organization = "org.xerial.snappy") + val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" val defaultSparkVersion = "1.1.0" @@ -33,7 +34,7 @@ libraryDependencies ++= Seq( val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.spark" % "spark-core_2.10" % sparkVersion + "org.apache.spark" % "spark-core_2.10" % sparkVersion excludeAll(excludeHadoop) ) ++ (if (sbtYarnFlag != "") { val defaultYarnVersion = "2.4.0" val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index f1ff59c15b34f..cc3478e7dc300 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -101,6 +101,12 @@ org.apache.spark spark-core_2.10 ${spark.version} + + + org.apache.hadoop + hadoop-client + + org.slf4j From 73430c643aba95cbd9f8b7ce7546692893699d79 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 31 Jan 2015 00:06:50 -0800 Subject: [PATCH 365/687] Make SparkR work on paths with spaces on Windows --- pkg/R/sparkR.R | 21 ++++++++++++++++----- pkg/R/sparkRClient.R | 2 ++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 7feb45e8081c5..d0d36ad514b64 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -4,7 +4,6 @@ assemblyJarName <- "sparkr-assembly-0.1.jar" sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep = "") - assemblyJarPath <- gsub(" ", "\\ ", assemblyJarPath, fixed = T) packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") .sparkREnv$libname <- libname @@ -87,9 +86,16 @@ sparkR.init <- function( } sparkMem <- Sys.getenv("SPARK_MEM", "512m") - jars <- c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) - - cp <- paste0(jars, collapse = ":") + jars <- suppressWarnings( + normalizePath(c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)))) + + # Classpath separator is ";" on Windows + if (.Platform$OS.type == "unix") { + collapseChar <- ":" + } else { + collapseChar <- ";" + } + cp <- paste0(jars, collapse = collapseChar) yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") if (yarn_conf_dir != "") { @@ -125,7 +131,12 @@ sparkR.init <- function( } nonEmptyJars <- Filter(function(x) { x != "" }, jars) - localJarPaths <- sapply(nonEmptyJars, function(j) { paste("file://", j, sep = "") }) + # URIs don't work very well on Windows, so just use paths. + localJarPaths <- if (.Platform$OS.type == "unix") { + sapply(nonEmptyJars, function(j) { paste("file://", j, sep = "") }) + } else { + nonEmptyJars + } assign( ".sparkRjsc", diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index e46f151eaf371..955ca4348b373 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -33,6 +33,8 @@ launchBackend <- function( } else { java_bin <- java_bin_name } + # Quote the classpath to make sure it handles spaces on Windows + classPath <- shQuote(classPath) combinedArgs <- paste(javaOpts, "-cp", classPath, mainClass, args, sep = " ") cat("Launching java with command ", java_bin, " ", combinedArgs, "\n") invisible(system2(java_bin, combinedArgs, wait = F)) From 4eec9627c28374d14e5bf75679f6a642c7f4162c Mon Sep 17 00:00:00 2001 From: lythesia Date: Sat, 31 Jan 2015 22:06:47 +0800 Subject: [PATCH 366/687] refactor join functions --- pkg/R/RDD.R | 132 +++----------------------------------------------- pkg/R/utils.R | 50 +++++++++++++++++++ 2 files changed, 58 insertions(+), 124 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 8db3dc99fda3c..eca14642cb673 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -309,7 +309,7 @@ setMethod("checkpoint", #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10, 2L) -#' numParititions(rdd) # 2L +#' numPartitions(rdd) # 2L #'} setGeneric("numPartitions", function(rdd) { standardGeneric("numPartitions") }) @@ -1614,31 +1614,7 @@ setMethod("join", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - t1 <- vector("list", length(v)) - t2 <- vector("list", length(v)) - index1 <- 1 - index2 <- 1 - for (x in v) { - if (x[[1]] == 1L) { - t1[[index1]] <- x[[2]] - index1 <- index1 + 1 - } else { - t2[[index2]] <- x[[2]] - index2 <- index2 + 1 - } - } - length(t1) <- index1 - 1 - length(t2) <- index2 - 1 - - result <- list() - length(result) <- length(t1) * length(t2) - index <- 1 - for (i in t1) { - for (j in t2) { - result[[index]] <- list(i, j) - index <- index + 1 - } - } + result <- joinTaggedList(v, list(FALSE, FALSE)) result } @@ -1678,36 +1654,7 @@ setMethod("leftOuterJoin", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - t1 <- vector("list", length(v)) - t2 <- vector("list", length(v)) - index1 <- 1 - index2 <- 1 - for (x in v) { - if (x[[1]] == 1L) { - t1[[index1]] <- x[[2]] - index1 <- index1 + 1 - } else { - t2[[index2]] <- x[[2]] - index2 <- index2 + 1 - } - } - length(t1) <- index1 - 1 - len2 <- index2 - 1 - if (len2 == 0) { - t2 <- list(NULL) - } else { - length(t2) <- len2 - } - - result <- list() - length(result) <- length(t1) * length(t2) - index <- 1 - for (i in t1) { - for (j in t2) { - result[[index]] <- list(i, j) - index <- index + 1 - } - } + result <- joinTaggedList(v, list(FALSE, TRUE)) result } @@ -1747,36 +1694,7 @@ setMethod("rightOuterJoin", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - t1 <- vector("list", length(v)) - t2 <- vector("list", length(v)) - index1 <- 1 - index2 <- 1 - for (x in v) { - if (x[[1]] == 1L) { - t1[[index1]] <- x[[2]] - index1 <- index1 + 1 - } else { - t2[[index2]] <- x[[2]] - index2 <- index2 + 1 - } - } - len1 <- index1 - 1 - if (len1 == 0) { - t1 <- list(NULL) - } else { - length(t1) <- len1 - } - length(t2) <- index2 - 1 - - result <- list() - length(result) <- length(t1) * length(t2) - index <- 1 - for (i in t1) { - for (j in t2) { - result[[index]] <- list(i, j) - index <- index + 1 - } - } + result <- joinTaggedList(v, list(TRUE, FALSE)) result } @@ -1807,13 +1725,14 @@ setMethod("rightOuterJoin", #' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) #' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), #' # list(1, list(3, 1)), -#' # list(3, list(3, NULL)), #' # list(2, list(NULL, 4))) +#' # list(3, list(3, NULL)), #'} setGeneric("fullOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("fullOuterJoin") }) #' @rdname fullOuterJoin #' @aliases fullOuterJoin,RDD,RDD-method + setMethod("fullOuterJoin", signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), function(rdd1, rdd2, numPartitions) { @@ -1821,45 +1740,10 @@ setMethod("fullOuterJoin", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - t1 <- vector("list", length(v)) - t2 <- vector("list", length(v)) - index1 <- 1 - index2 <- 1 - for (x in v) { - if (x[[1]] == 1L) { - t1[[index1]] <- x[[2]] - index1 <- index1 + 1 - } else { - t2[[index2]] <- x[[2]] - index2 <- index2 + 1 - } - } - len1 <- index1 - 1 - len2 <- index2 - 1 - - if (len1 == 0) { - t1 <- list(NULL) - } else { - length(t1) <- len1 - } - - if (len2 == 0) { - t2 <- list(NULL) - } else { - length(t2) <- len2 - } - - result <- list() - length(result) <- length(t1) * length(t2) - index <- 1 - for(i in t1) { - for(j in t2) { - result[[index]] <- list(i, j) - index <- index + 1 - } - } + result <- joinTaggedList(v, list(TRUE, TRUE)) result } + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) }) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 0a0a5300a218c..c7d025d550042 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -218,3 +218,53 @@ sortKeyValueList <- function(kv_list) { keys <- sapply(kv_list, function(x) x[[1]]) kv_list[order(keys)] } + +## Utility function to generate compact R lists from grouped rdd +# Used in Join-family functions +genCompactLists <- function(tagged_list, cnull) { + len <- length(tagged_list) + num <- length(cnull) + lists <- list(vector("list", len), vector("list", len)) + index <- list(1, 1) + + for (x in tagged_list) { + tag <- x[[1]] + idx <- index[[tag]] + lists[[tag]][[idx]] <- x[[2]] + index[[tag]] <- idx + 1 + } + + len <- lapply(index, function(x) x-1) + for (i in (1:num)) { + if (cnull[[i]] && len[[i]] == 0) { + lists[[i]] <- list(NULL) + } else { + length(lists[[i]]) <- len[[i]] + } + } + + lists +} + +## Utility function to merge compact R lists +# Used in Join-family functions +mergeCompactLists <- function(left, right) { + result <- list() + length(result) <- length(left) * length(right) + index <- 1 + for (i in left) { + for (j in right) { + result[[index]] <- list(i, j) + index <- index + 1 + } + } + result +} + +## Utility function to wrapper above two operations +# Used in Join-family functions +joinTaggedList <- function(tagged_list, cnull) { + lists <- genCompactLists(tagged_list, cnull) + result <- mergeCompactLists(lists[[1]], lists[[2]]) + result +} From add97f5354ae83d4b87ff1e373a3c298cf589d55 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 31 Jan 2015 10:18:06 -0800 Subject: [PATCH 367/687] Use URL encode to create valid URIs for jars --- pkg/R/sparkR.R | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index d0d36ad514b64..0f683a6ffe7a9 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -131,12 +131,7 @@ sparkR.init <- function( } nonEmptyJars <- Filter(function(x) { x != "" }, jars) - # URIs don't work very well on Windows, so just use paths. - localJarPaths <- if (.Platform$OS.type == "unix") { - sapply(nonEmptyJars, function(j) { paste("file://", j, sep = "") }) - } else { - nonEmptyJars - } + localJarPaths <- sapply(nonEmptyJars, function(j) { utils::URLencode(paste("file://", j, sep = "")) }) assign( ".sparkRjsc", From 06d99f0f2ce19c86ddd81c6ded69f30761b47228 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 31 Jan 2015 10:35:39 -0800 Subject: [PATCH 368/687] Fix URI to have right number of slashes --- pkg/R/sparkR.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 0f683a6ffe7a9..649b2f5942785 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -90,10 +90,13 @@ sparkR.init <- function( normalizePath(c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)))) # Classpath separator is ";" on Windows + # URI needs four /// as from http://stackoverflow.com/a/18522792 if (.Platform$OS.type == "unix") { collapseChar <- ":" + uriSep <- "//" } else { collapseChar <- ";" + uriSep <- "////" } cp <- paste0(jars, collapse = collapseChar) @@ -131,7 +134,7 @@ sparkR.init <- function( } nonEmptyJars <- Filter(function(x) { x != "" }, jars) - localJarPaths <- sapply(nonEmptyJars, function(j) { utils::URLencode(paste("file://", j, sep = "")) }) + localJarPaths <- sapply(nonEmptyJars, function(j) { utils::URLencode(paste("file:", uriSep, j, sep = "")) }) assign( ".sparkRjsc", From 179aa75afb2e5993cea5a3c86d363eed31d5ae8e Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 1 Feb 2015 06:28:27 +0000 Subject: [PATCH 369/687] Bunch of fixes for longer running jobs 1. Increase the timeout for socket connection to wait for long jobs 2. Add some profiling information in worker.R 3. Put temp file writes before stdin writes in RRDD.scala --- pkg/R/sparkRClient.R | 2 +- pkg/inst/worker/worker.R | 19 +++ .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 123 ++++++++++-------- 3 files changed, 86 insertions(+), 58 deletions(-) diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index e46f151eaf371..5721f33c71c9e 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -2,7 +2,7 @@ # Creates a SparkR client connection object # if one doesn't already exist -connectBackend <- function(hostname, port, timeout = 60) { +connectBackend <- function(hostname, port, timeout = 6000) { if (exists(".sparkRcon", envir = .sparkREnv)) { cat("SparkRBackend client connection already exists\n") return(get(".sparkRcon", envir = .sparkREnv)) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index c5457adcbc54d..6d88b287b369b 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -1,5 +1,7 @@ # Worker class +begin <- proc.time()[3] + # NOTE: We use "stdin" to get the process stdin instead of the command line inputConStdin <- file("stdin", open = "rb") @@ -65,6 +67,8 @@ numPartitions <- SparkR:::readInt(inputCon) isEmpty <- SparkR:::readInt(inputCon) +metadataEnd <- proc.time()[3] + if (isEmpty != 0) { if (numPartitions == -1) { @@ -74,12 +78,15 @@ if (isEmpty != 0) { } else { data <- readLines(inputCon) } + dataReadEnd <- proc.time()[3] output <- do.call(execFunctionName, list(splitIndex, data)) + computeEnd <- proc.time()[3] if (isOutputSerialized) { SparkR:::writeRawSerialize(outputCon, output) } else { SparkR:::writeStrings(outputCon, output) } + writeEnd <- proc.time()[3] } else { if (isInputSerialized) { # Now read as many characters as described in funcLen @@ -88,6 +95,7 @@ if (isEmpty != 0) { data <- readLines(inputCon) } + dataReadEnd <- proc.time()[3] res <- new.env() # Step 1: hash the data to an environment @@ -105,6 +113,8 @@ if (isEmpty != 0) { } invisible(lapply(data, hashTupleToEnvir)) + computeEnd <- proc.time()[3] + # Step 2: write out all of the environment as key-value pairs. for (name in ls(res)) { SparkR:::writeInt(outputCon, 2L) @@ -113,6 +123,7 @@ if (isEmpty != 0) { length(res[[name]]$data) <- res[[name]]$counter SparkR:::writeRawSerialize(outputCon, res[[name]]$data) } + writeEnd <- proc.time()[3] } } @@ -128,5 +139,13 @@ unlink(inFileName) # Restore stdout sink() +end <- proc.time()[3] + +cat("stats: total ", (end-begin), "\n", file=stderr()) +cat("stats: metadata ", (metadataEnd-begin), "\n", file=stderr()) +cat("stats: input read ", (dataReadEnd-metadataEnd), "\n", file=stderr()) +cat("stats: compute ", (computeEnd-dataReadEnd), "\n", file=stderr()) +cat("stats: output write ", (writeEnd-computeEnd), "\n", file=stderr()) + # Finally print the name of the output file cat(outputFileName, "\n") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 89eb10b23a293..e39d2acf8e8a3 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -117,68 +117,77 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( // Start a thread to feed the process input from our parent's iterator new Thread("stdin writer for R") { override def run() { - SparkEnv.set(env) - val streamStd = new BufferedOutputStream(proc.getOutputStream, bufferSize) - val printOutStd = new PrintStream(streamStd) - printOutStd.println(tempFileName) - printOutStd.println(rLibDir) - printOutStd.println(tempFileIn.getAbsolutePath()) - printOutStd.flush() - - streamStd.close() - - val stream = new BufferedOutputStream(new FileOutputStream(tempFileIn), bufferSize) - val printOut = new PrintStream(stream) - val dataOut = new DataOutputStream(stream) - - dataOut.writeInt(splitIndex) - - dataOut.writeInt(func.length) - dataOut.write(func, 0, func.length) - - // R worker process input serialization flag - dataOut.writeInt(if (parentSerialized) 1 else 0) - // R worker process output serialization flag - dataOut.writeInt(if (dataSerialized) 1 else 0) - - dataOut.writeInt(packageNames.length) - dataOut.write(packageNames, 0, packageNames.length) - - dataOut.writeInt(functionDependencies.length) - dataOut.write(functionDependencies, 0, functionDependencies.length) - - dataOut.writeInt(broadcastVars.length) - broadcastVars.foreach { broadcast => - // TODO(shivaram): Read a Long in R to avoid this cast - dataOut.writeInt(broadcast.id.toInt) - // TODO: Pass a byte array from R to avoid this cast ? - val broadcastByteArr = broadcast.value.asInstanceOf[Array[Byte]] - dataOut.writeInt(broadcastByteArr.length) - dataOut.write(broadcastByteArr, 0, broadcastByteArr.length) - } - - dataOut.writeInt(numPartitions) + try { + SparkEnv.set(env) + val stream = new BufferedOutputStream(new FileOutputStream(tempFileIn), bufferSize) + val printOut = new PrintStream(stream) + val dataOut = new DataOutputStream(stream) + + dataOut.writeInt(splitIndex) + + dataOut.writeInt(func.length) + dataOut.write(func, 0, func.length) + + // R worker process input serialization flag + dataOut.writeInt(if (parentSerialized) 1 else 0) + // R worker process output serialization flag + dataOut.writeInt(if (dataSerialized) 1 else 0) + + dataOut.writeInt(packageNames.length) + dataOut.write(packageNames, 0, packageNames.length) + + dataOut.writeInt(functionDependencies.length) + dataOut.write(functionDependencies, 0, functionDependencies.length) + + dataOut.writeInt(broadcastVars.length) + broadcastVars.foreach { broadcast => + // TODO(shivaram): Read a Long in R to avoid this cast + dataOut.writeInt(broadcast.id.toInt) + // TODO: Pass a byte array from R to avoid this cast ? + val broadcastByteArr = broadcast.value.asInstanceOf[Array[Byte]] + dataOut.writeInt(broadcastByteArr.length) + dataOut.write(broadcastByteArr, 0, broadcastByteArr.length) + } - if (!iter.hasNext) { - dataOut.writeInt(0) - } else { - dataOut.writeInt(1) - } + dataOut.writeInt(numPartitions) - for (elem <- iter) { - if (parentSerialized) { - val elemArr = elem.asInstanceOf[Array[Byte]] - dataOut.writeInt(elemArr.length) - dataOut.write(elemArr, 0, elemArr.length) + if (!iter.hasNext) { + dataOut.writeInt(0) } else { - printOut.println(elem) + dataOut.writeInt(1) + } + + for (elem <- iter) { + if (parentSerialized) { + val elemArr = elem.asInstanceOf[Array[Byte]] + dataOut.writeInt(elemArr.length) + dataOut.write(elemArr, 0, elemArr.length) + } else { + printOut.println(elem) + } } - } - printOut.flush() - dataOut.flush() - stream.flush() - stream.close() + printOut.flush() + dataOut.flush() + stream.flush() + stream.close() + + // NOTE: We need to write out the temp file before writing out the + // file name to stdin. Otherwise the R process could read partial state + val streamStd = new BufferedOutputStream(proc.getOutputStream, bufferSize) + val printOutStd = new PrintStream(streamStd) + printOutStd.println(tempFileName) + printOutStd.println(rLibDir) + printOutStd.println(tempFileIn.getAbsolutePath()) + printOutStd.flush() + + streamStd.close() + } catch { + // TODO: We should propogate this error to the task thread + case e: Exception => + System.err.println("R Writer thread got an exception " + e) + e.printStackTrace() + } } }.start() From 60da1df9b3175c49322247bcf53999db1f922d91 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 1 Feb 2015 06:38:58 +0000 Subject: [PATCH 370/687] Initialize timing variables --- pkg/inst/worker/worker.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 6d88b287b369b..e339391752cbb 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -68,6 +68,9 @@ numPartitions <- SparkR:::readInt(inputCon) isEmpty <- SparkR:::readInt(inputCon) metadataEnd <- proc.time()[3] +dataReadEnd <- metadataEnd +computeEnd <- dataReadEnd +writeEnd <- computeEnd if (isEmpty != 0) { From 98794fe184c6f3ac2e6c481723d673c56d9dbcd8 Mon Sep 17 00:00:00 2001 From: hqzizania Date: Mon, 2 Feb 2015 09:19:00 +0800 Subject: [PATCH 371/687] modified: pkg/R/RDD.R --- pkg/R/RDD.R | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index fa38d69b71a33..f980a9fe2ae5c 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1244,12 +1244,12 @@ setMethod("flatMapValues", #' Partition an RDD by key #' -#' This function operates on RDDs where every element is of the form list(K, V). +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). #' For each element of this RDD, the partitioner is used to compute a hash #' function and the RDD is partitioned using this hash value. #' #' @param rdd The RDD to partition. Should be an RDD where each element is -#' list(K, V). +#' list(K, V) or c(K, V). #' @param numPartitions Number of partitions to create. #' @param ... Other optional arguments to partitionBy. #' @@ -1261,10 +1261,10 @@ setMethod("flatMapValues", #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) #' rdd <- parallelize(sc, pairs) #' parts <- partitionBy(rdd, 2L) -#' collectPartition(parts, 0L) # First partition should contain c(1,2) and c(1,3) +#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) #'} setGeneric("partitionBy", function(rdd, numPartitions, ...) { @@ -1325,11 +1325,11 @@ setMethod("partitionBy", #' Group values by key #' -#' This function operates on RDDs where every element is of the form list(K, V). +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). #' and group values for each key in the RDD into a single sequence. #' #' @param rdd The RDD to group. Should be an RDD where each element is -#' list(K, V). +#' list(K, V) or c(K, V). #' @param numPartitions Number of partitions to create. #' @return An RDD where each element is list(K, list(V)) #' @seealso reduceByKey @@ -1338,7 +1338,7 @@ setMethod("partitionBy", #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) #' rdd <- parallelize(sc, pairs) #' parts <- groupByKey(rdd, 2L) #' grouped <- collect(parts) @@ -1384,11 +1384,11 @@ setMethod("groupByKey", #' Merge values by key #' -#' This function operates on RDDs where every element is of the form list(K, V). +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). #' and merges the values for each key using an associative reduce function. #' #' @param rdd The RDD to reduce by key. Should be an RDD where each element is -#' list(K, V). +#' list(K, V) or c(K, V). #' @param combineFunc The associative reduce function to use. #' @param numPartitions Number of partitions to create. #' @return An RDD where each element is list(K, V') where V' is the merged @@ -1399,7 +1399,7 @@ setMethod("groupByKey", #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) #' rdd <- parallelize(sc, pairs) #' parts <- reduceByKey(rdd, "+", 2L) #' reduced <- collect(parts) @@ -1456,7 +1456,7 @@ setMethod("reduceByKey", #' } #' #' @param rdd The RDD to combine. Should be an RDD where each element is -#' list(K, V). +#' list(K, V) or c(K, V). #' @param createCombiner Create a combiner (C) given a value (V) #' @param mergeValue Merge the given value (V) with an existing combiner (C) #' @param mergeCombiners Merge two combiners and return a new combiner @@ -1469,7 +1469,7 @@ setMethod("reduceByKey", #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) #' rdd <- parallelize(sc, pairs) #' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) #' combined <- collect(parts) From 5b380d3f4e89a36d437a5e43d2c1e9fd2dd26ae5 Mon Sep 17 00:00:00 2001 From: hqzizania Date: Mon, 2 Feb 2015 09:42:41 +0800 Subject: [PATCH 372/687] modified: pkg/man/combineByKey.Rd modified: pkg/man/groupByKey.Rd modified: pkg/man/partitionBy.Rd modified: pkg/man/reduceByKey.Rd --- pkg/man/combineByKey.Rd | 7 ++++--- pkg/man/groupByKey.Rd | 9 +++++---- pkg/man/partitionBy.Rd | 11 ++++++----- pkg/man/reduceByKey.Rd | 9 +++++---- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/pkg/man/combineByKey.Rd b/pkg/man/combineByKey.Rd index 0f632370fbcd1..a634059241091 100644 --- a/pkg/man/combineByKey.Rd +++ b/pkg/man/combineByKey.Rd @@ -1,4 +1,5 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R \docType{methods} \name{combineByKey} \alias{combineByKey} @@ -12,7 +13,7 @@ combineByKey(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) } \arguments{ \item{rdd}{The RDD to combine. Should be an RDD where each element is -list(K, V).} +list(K, V) or c(K, V).} \item{createCombiner}{Create a combiner (C) given a value (V)} @@ -41,7 +42,7 @@ Users provide three functions: \examples{ \dontrun{ sc <- sparkR.init() -pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) rdd <- parallelize(sc, pairs) parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) combined <- collect(parts) diff --git a/pkg/man/groupByKey.Rd b/pkg/man/groupByKey.Rd index adaaf022c9c46..bfb7199735c3b 100644 --- a/pkg/man/groupByKey.Rd +++ b/pkg/man/groupByKey.Rd @@ -1,4 +1,5 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R \docType{methods} \name{groupByKey} \alias{groupByKey} @@ -11,7 +12,7 @@ groupByKey(rdd, numPartitions) } \arguments{ \item{rdd}{The RDD to group. Should be an RDD where each element is -list(K, V).} +list(K, V) or c(K, V).} \item{numPartitions}{Number of partitions to create.} } @@ -19,13 +20,13 @@ list(K, V).} An RDD where each element is list(K, list(V)) } \description{ -This function operates on RDDs where every element is of the form list(K, V). +This function operates on RDDs where every element is of the form list(K, V) or c(K, V). and group values for each key in the RDD into a single sequence. } \examples{ \dontrun{ sc <- sparkR.init() -pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) rdd <- parallelize(sc, pairs) parts <- groupByKey(rdd, 2L) grouped <- collect(parts) diff --git a/pkg/man/partitionBy.Rd b/pkg/man/partitionBy.Rd index 1c33097c937a3..5e5e1cf601416 100644 --- a/pkg/man/partitionBy.Rd +++ b/pkg/man/partitionBy.Rd @@ -1,4 +1,5 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R \docType{methods} \name{partitionBy} \alias{partitionBy} @@ -12,7 +13,7 @@ partitionBy(rdd, numPartitions, ...) } \arguments{ \item{rdd}{The RDD to partition. Should be an RDD where each element is -list(K, V).} +list(K, V) or c(K, V).} \item{numPartitions}{Number of partitions to create.} @@ -25,17 +26,17 @@ function if not provided} An RDD partitioned using the specified partitioner. } \description{ -This function operates on RDDs where every element is of the form list(K, V). +This function operates on RDDs where every element is of the form list(K, V) or c(K, V). For each element of this RDD, the partitioner is used to compute a hash function and the RDD is partitioned using this hash value. } \examples{ \dontrun{ sc <- sparkR.init() -pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) rdd <- parallelize(sc, pairs) parts <- partitionBy(rdd, 2L) -collectPartition(parts, 0L) # First partition should contain c(1,2) and c(1,3) +collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) } } diff --git a/pkg/man/reduceByKey.Rd b/pkg/man/reduceByKey.Rd index f4a63fd384d3a..0598b8589df36 100644 --- a/pkg/man/reduceByKey.Rd +++ b/pkg/man/reduceByKey.Rd @@ -1,4 +1,5 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R \docType{methods} \name{reduceByKey} \alias{reduceByKey} @@ -12,7 +13,7 @@ reduceByKey(rdd, combineFunc, numPartitions) } \arguments{ \item{rdd}{The RDD to reduce by key. Should be an RDD where each element is -list(K, V).} +list(K, V) or c(K, V).} \item{combineFunc}{The associative reduce function to use.} @@ -23,13 +24,13 @@ An RDD where each element is list(K, V') where V' is the merged value } \description{ -This function operates on RDDs where every element is of the form list(K, V). +This function operates on RDDs where every element is of the form list(K, V) or c(K, V). and merges the values for each key using an associative reduce function. } \examples{ \dontrun{ sc <- sparkR.init() -pairs <- list(c(1, 2), c(1.1, 3), c(1, 4)) +pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) rdd <- parallelize(sc, pairs) parts <- reduceByKey(rdd, "+", 2L) reduced <- collect(parts) From 1c2dbecc4b203b2eb5279dcb67ae6e3325b7ae4c Mon Sep 17 00:00:00 2001 From: lythesia Date: Mon, 2 Feb 2015 10:09:38 +0800 Subject: [PATCH 373/687] minor fix for refactoring join code --- pkg/R/RDD.R | 12 ++++-------- pkg/R/utils.R | 30 +++++++++++++++++++----------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index eca14642cb673..aa8fbaf3b75c0 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1614,8 +1614,7 @@ setMethod("join", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - result <- joinTaggedList(v, list(FALSE, FALSE)) - result + joinTaggedList(v, list(FALSE, FALSE)) } joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) @@ -1654,8 +1653,7 @@ setMethod("leftOuterJoin", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - result <- joinTaggedList(v, list(FALSE, TRUE)) - result + joinTaggedList(v, list(FALSE, TRUE)) } joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) @@ -1694,8 +1692,7 @@ setMethod("rightOuterJoin", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - result <- joinTaggedList(v, list(TRUE, FALSE)) - result + joinTaggedList(v, list(TRUE, FALSE)) } joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) @@ -1740,8 +1737,7 @@ setMethod("fullOuterJoin", rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) doJoin <- function(v) { - result <- joinTaggedList(v, list(TRUE, TRUE)) - result + joinTaggedList(v, list(TRUE, TRUE)) } joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index c7d025d550042..aae9691f8f347 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -219,11 +219,14 @@ sortKeyValueList <- function(kv_list) { kv_list[order(keys)] } -## Utility function to generate compact R lists from grouped rdd -# Used in Join-family functions +# Utility function to generate compact R lists from grouped rdd +# Used in Join-family functions +# param: +# tagged_list R list generated via groupByKey with tags(1L, 2L, ...) +# cnull Boolean list where each element determines whether the corresponding list should +# be converted to list(NULL) genCompactLists <- function(tagged_list, cnull) { len <- length(tagged_list) - num <- length(cnull) lists <- list(vector("list", len), vector("list", len)) index <- list(1, 1) @@ -234,8 +237,8 @@ genCompactLists <- function(tagged_list, cnull) { index[[tag]] <- idx + 1 } - len <- lapply(index, function(x) x-1) - for (i in (1:num)) { + len <- lapply(index, function(x) x - 1) + for (i in (1:2)) { if (cnull[[i]] && len[[i]] == 0) { lists[[i]] <- list(NULL) } else { @@ -246,8 +249,10 @@ genCompactLists <- function(tagged_list, cnull) { lists } -## Utility function to merge compact R lists -# Used in Join-family functions +# Utility function to merge compact R lists +# Used in Join-family functions +# param: +# left/right Two compact lists ready for Cartesian product mergeCompactLists <- function(left, right) { result <- list() length(result) <- length(left) * length(right) @@ -261,10 +266,13 @@ mergeCompactLists <- function(left, right) { result } -## Utility function to wrapper above two operations -# Used in Join-family functions +# Utility function to wrapper above two operations +# Used in Join-family functions +# param (same as genCompactLists): +# tagged_list R list generated via groupByKey with tags(1L, 2L, ...) +# cnull Boolean list where each element determines whether the corresponding list should +# be converted to list(NULL) joinTaggedList <- function(tagged_list, cnull) { lists <- genCompactLists(tagged_list, cnull) - result <- mergeCompactLists(lists[[1]], lists[[2]]) - result + mergeCompactLists(lists[[1]], lists[[2]]) } From f34bb88bf4ba4371eeb15d0a92658e2d947ef32f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 2 Feb 2015 10:08:43 -0800 Subject: [PATCH 374/687] Remove profiling information from this PR --- pkg/inst/worker/worker.R | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index e339391752cbb..c5457adcbc54d 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -1,7 +1,5 @@ # Worker class -begin <- proc.time()[3] - # NOTE: We use "stdin" to get the process stdin instead of the command line inputConStdin <- file("stdin", open = "rb") @@ -67,11 +65,6 @@ numPartitions <- SparkR:::readInt(inputCon) isEmpty <- SparkR:::readInt(inputCon) -metadataEnd <- proc.time()[3] -dataReadEnd <- metadataEnd -computeEnd <- dataReadEnd -writeEnd <- computeEnd - if (isEmpty != 0) { if (numPartitions == -1) { @@ -81,15 +74,12 @@ if (isEmpty != 0) { } else { data <- readLines(inputCon) } - dataReadEnd <- proc.time()[3] output <- do.call(execFunctionName, list(splitIndex, data)) - computeEnd <- proc.time()[3] if (isOutputSerialized) { SparkR:::writeRawSerialize(outputCon, output) } else { SparkR:::writeStrings(outputCon, output) } - writeEnd <- proc.time()[3] } else { if (isInputSerialized) { # Now read as many characters as described in funcLen @@ -98,7 +88,6 @@ if (isEmpty != 0) { data <- readLines(inputCon) } - dataReadEnd <- proc.time()[3] res <- new.env() # Step 1: hash the data to an environment @@ -116,8 +105,6 @@ if (isEmpty != 0) { } invisible(lapply(data, hashTupleToEnvir)) - computeEnd <- proc.time()[3] - # Step 2: write out all of the environment as key-value pairs. for (name in ls(res)) { SparkR:::writeInt(outputCon, 2L) @@ -126,7 +113,6 @@ if (isEmpty != 0) { length(res[[name]]$data) <- res[[name]]$counter SparkR:::writeRawSerialize(outputCon, res[[name]]$data) } - writeEnd <- proc.time()[3] } } @@ -142,13 +128,5 @@ unlink(inFileName) # Restore stdout sink() -end <- proc.time()[3] - -cat("stats: total ", (end-begin), "\n", file=stderr()) -cat("stats: metadata ", (metadataEnd-begin), "\n", file=stderr()) -cat("stats: input read ", (dataReadEnd-metadataEnd), "\n", file=stderr()) -cat("stats: compute ", (computeEnd-dataReadEnd), "\n", file=stderr()) -cat("stats: output write ", (writeEnd-computeEnd), "\n", file=stderr()) - # Finally print the name of the output file cat(outputFileName, "\n") From a5f4f8fb0ccb075c5794e50e33b8f3e26e410624 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 2 Feb 2015 18:15:43 -0600 Subject: [PATCH 375/687] Squashed commit of the following: Merge local SparkSQL changes. This PR builds sparkR with Spark 1.3 and includes basic SparkSQL functionality, including the new DataFrame class from 1.3. Includes: - SQLContext class and methods - DataFrame class and methods - Early unit test for jsonFile() - .Rd files for SparkSQL functions - Updated NAMESPACE for new classes/methods - Updated DESCRIPTION to add a Collate field for S4 method dispatch - Updated build.sbt to add sparkSQL library dependency and also add 1.3-SNAPSHOT as the default Spark version --- .gitignore | 1 + pkg/DESCRIPTION | 17 ++- pkg/NAMESPACE | 17 +++ pkg/R/DataFrame.R | 119 ++++++++++++++++++ pkg/R/SQLContext.R | 105 ++++++++++++++++ pkg/R/sparkR.R | 30 +++++ pkg/inst/tests/people.json | 3 + pkg/inst/tests/test_jsonFile.R | 16 +++ pkg/man/DataFrame.Rd | 22 ++++ pkg/man/cacheTable.Rd | 19 +++ pkg/man/jsonFile.Rd | 20 +++ pkg/man/parquetFile.Rd | 19 +++ pkg/man/printSchema.Rd | 14 +++ pkg/man/registerTempTable.Rd | 16 +++ pkg/man/sparkRSQL.init.Rd | 15 +++ pkg/man/sql.Rd | 19 +++ pkg/man/table.Rd | 20 +++ pkg/man/uncacheTable.Rd | 19 +++ pkg/src/build.sbt | 5 +- .../berkeley/cs/amplab/sparkr/SparkRSQL.scala | 12 ++ 20 files changed, 505 insertions(+), 3 deletions(-) create mode 100644 pkg/R/DataFrame.R create mode 100644 pkg/R/SQLContext.R create mode 100644 pkg/inst/tests/people.json create mode 100644 pkg/inst/tests/test_jsonFile.R create mode 100644 pkg/man/DataFrame.Rd create mode 100644 pkg/man/cacheTable.Rd create mode 100644 pkg/man/jsonFile.Rd create mode 100644 pkg/man/parquetFile.Rd create mode 100644 pkg/man/printSchema.Rd create mode 100644 pkg/man/registerTempTable.Rd create mode 100644 pkg/man/sparkRSQL.init.Rd create mode 100644 pkg/man/sql.Rd create mode 100644 pkg/man/table.Rd create mode 100644 pkg/man/uncacheTable.Rd create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRSQL.scala diff --git a/.gitignore b/.gitignore index 7d027d3bf143e..e8fb97b946198 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ work/ SparkR-pkg.Rproj *.o *.so +SparkR.Rcheck diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 618847c951640..888bb3e34b44c 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -5,7 +5,8 @@ Version: 0.1 Date: 2013-09-09 Author: Shivaram Venkataraman Maintainer: Shivaram Venkataraman -Imports: methods +Imports: + methods Depends: R (>= 3.0), methods, @@ -13,3 +14,17 @@ Suggests: testthat Description: R frontend for Spark License: Apache License (== 2.0) +Collate: + 'jobj.R' + 'RDD.R' + 'DataFrame.R' + 'SQLContext.R' + 'broadcast.R' + 'context.R' + 'deserialize.R' + 'serialize.R' + 'sparkR.R' + 'sparkRBackend.R' + 'sparkRClient.R' + 'utils.R' + 'zzz.R' diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 6977dd2d43330..ab5615be35ae3 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -67,3 +67,20 @@ export("sparkR.init") export("print.jobj") useDynLib(SparkR, stringHashCode) importFrom(methods, setGeneric, setMethod, setOldClass) + +# SparkRSQL + +exportClasses("DataFrame") + +exportMethods("printSchema", + "registerTempTable" + ) + +export("jsonFile", + "parquetFile", + "sql", + "table", + "cacheTable", + "uncacheTable") + +export("sparkRSQL.init") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R new file mode 100644 index 0000000000000..91a6ceb9911d9 --- /dev/null +++ b/pkg/R/DataFrame.R @@ -0,0 +1,119 @@ +# DataFrame.R - DataFrame class and methods implemented in S4 OO classes + +#' @include jobj.R RDD.R +NULL + +setOldClass("jobj") + +#' @title S4 class that represents a DataFrame +#' @description DataFrames can be created using functions like +#' \code{jsonFile}, \code{table} etc. +#' @rdname DataFrame +#' @seealso jsonFile, table +#' +#' @param env An R environment that stores bookkeeping states of the DataFrame +#' @param sdf A Java object reference to the backing Scala SchemaRDD +#' @export + +setClass("DataFrame", + slots = list(env = "environment", + sdf = "jobj")) + +setMethod("initialize", "DataFrame", function(.Object, sdf, isCached, isCheckpointed) { + .Object@env <- new.env() + .Object@env$isCached <- isCached + .Object@env$isCheckpointed <- isCheckpointed + + .Object@sdf <- sdf + .Object +}) + +#' @rdname DataFrame +#' @export + +dataFrame <- function(sdf, isCached = FALSE, isCheckpointed = FALSE) { + new("DataFrame", sdf, isCached, isCheckpointed) +} + +# The DataFrame accessor function + +setGeneric("getsdf", function(df, ...) {standardGeneric("getsdf") }) +setMethod("getsdf", signature(df = "DataFrame" ), function(df) df@sdf ) + +############################ DataFrame Methods ############################################## + +#' Print Schema of a DataFrame +#' +#' Prints out the schema in tree format +#' +#' @param df A SparkSQL DataFrame +#' +#' @rdname printSchema +#' @export + +setGeneric("printSchema", function(df) { standardGeneric("printSchema") }) + +setMethod("printSchema", + signature(df = "DataFrame"), + function(df) { + sdf <- getsdf(df) + schemaString <- callJMethod(sdf, "printSchema") + cat(schemaString) + }) + +#' Register Temporary Table +#' +#' Registers a DataFrame as a Temporary Table in the SQLContext +#' +#' @param df A SparkSQL DataFrame +#' @param tableName A character vector containing the name of the table +#' +#' @rdname registerTempTable +#' @export + +setGeneric("registerTempTable", function(df, tableName) { standardGeneric("registerTempTable") }) + +setMethod("registerTempTable", + signature(df = "DataFrame", tableName = "character"), + function(df, tableName) { + if (class(df) == "DataFrame") { + sdf <- getsdf(df) + callJMethod(sdf, "registerTempTable", tableName) + } else { + stop("You must specify a DataFrame.") + } + }) + +#' Count +#' +#' Returns the number of rows in a DataFrame +#' +#' @param df A SparkSQL DataFrame +#' +#' @rdname count +#' @export + +setMethod("count", + signature(x = "DataFrame"), + function(x) { + sdf <- getsdf(x) + callJMethod(sdf, "count") + }) + +#' Collect elements of a DataFrame +#' +#' Returns a list of Row objects from a DataFrame +#' +#' @param df A SparkSQL DataFrame +#' +#' @rdname collect-methods +#' @export + +setMethod("collect", + signature(rdd = "DataFrame"), + function(rdd){ + sdf <- getsdf(rdd) + list_obj <- callJMethod(sdf, "collect") + }) + +# TODO: Add collect partition \ No newline at end of file diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R new file mode 100644 index 0000000000000..25ac5820ce5be --- /dev/null +++ b/pkg/R/SQLContext.R @@ -0,0 +1,105 @@ +# SQLcontext.R: SQLContext-driven functions + +#' Create a DataFrame from a JSON file. +#' +#' Loads a JSON file (one object per line), returning the result as a DataFrame +#' It goes through the entire dataset once to determine the schema. +#' +#' @param sqlctx SQLContext to use +#' @param path Path of file to read. A vector of multiple paths is allowed. +#' @return DataFrame +#' @export + +jsonFile <- function(sqlctx, path) { + # Allow the user to have a more flexible definiton of the text file path + path <- normalizePath(path) + # Convert a string vector of paths to a string containing comma separated paths + path <- paste(path, collapse=",") + + sdf<- callJMethod(sqlctx, "jsonFile", path) + + dataFrame(sdf) +} + +#' Create a DataFrame from a Parquet file. +#' +#' Loads a Parquet file, returning the result as a DataFrame. +#' +#' @param sqlctx SQLContext to use +#' @param path Path of file to read. A vector of multiple paths is allowed. +#' @return DataFrame +#' @export + +parquetFile <- function(sqlctx, path) { + # Allow the user to have a more flexible definiton of the text file path + path <- normalizePath(path) + # Convert a string vector of paths to a string containing comma separated paths + path <- paste(path, collapse=",") + + sdf <- callJMethod(sqlctx, "parquetFile", path) + + dataFrame(sdf) +} + +#' SQL Query +#' +#' Executes a SQL query using Spark, returning the result as a DataFrame. +#' +#' @param sqlctx SQLContext to use +#' @param sqlQuery A character vector containing the SQL query +#' @return DataFrame +#' @export + +sql <- function(sqlctx, sqlQuery) { + + sdf <- callJMethod(sqlctx, "sql", sqlQuery) + + dataFrame(sdf) +} + +#' Create a DataFrame from a SparkSQL Table +#' +#' Returns the specified Table as a DataFrame. The Table must have already been registered +#' in the SQLContext. +#' +#' @param sqlctx SQLContext to use +#' @param sqlQuery A character vector containing the SQL query +#' @return DataFrame +#' @export + +table <- function(sqlctx, tableName) { + + sdf <- callJMethod(sqlctx, "table", tableName) + + dataFrame(sdf) +} + +#' Cache Table +#' +#' Caches the specified table in-memory. +#' +#' @param sqlctx SQLContext to use +#' @param tableName The name of the table being cached +#' @return DataFrame +#' @export + +cacheTable <- function(sqlctx, tableName) { + + callJMethod(sqlctx, "cacheTable", tableName) + +} + +#' Uncache Table +#' +#' Removes the specified table from the in-memory cache. +#' +#' @param sqlctx SQLContext to use +#' @param tableName The name of the table being uncached +#' @return DataFrame +#' @export + +uncacheTable <- function(sqlctx, tableName){ + + callJMethod(sqlctx, "uncacheTable", tableName) + +} diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index ea9129d3bd40f..c514f0c3a7abd 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -150,3 +150,33 @@ sparkR.init <- function( sc } + +#' Initialize a new Spark Context. +#' +#' This function creates a SparkContext from an existing JavaSparkContext and +#' then uses it to initialize a new SQLContext +#' +#' @param jsc The existing JavaSparkContext created with SparkR.init() +#' @export + +sparkRSQL.init <- function(jsc) { + + sparkContext = callJMethod(jsc, "sc") + + if (exists(".sparkRSQLsc", envir=.sparkREnv)) { + cat("Re-using existing SparkSQL Context. Please restart R to create a new SparkSQL Context\n") + return(get(".sparkRSQLsc", envir=.sparkREnv)) + } + + assign( + ".sparkRSQLsc", + callJStatic( + "edu.berkeley.cs.amplab.sparkr.sparkRSQL", + "createSQLContext", + sparkContext), + envir=.sparkREnv + ) + sqlctx <- get(".sparkRSQLsc", envir=.sparkREnv) + + sqlctx +} diff --git a/pkg/inst/tests/people.json b/pkg/inst/tests/people.json new file mode 100644 index 0000000000000..50a859cbd7ee8 --- /dev/null +++ b/pkg/inst/tests/people.json @@ -0,0 +1,3 @@ +{"name":"Michael"} +{"name":"Andy", "age":30} +{"name":"Justin", "age":19} diff --git a/pkg/inst/tests/test_jsonFile.R b/pkg/inst/tests/test_jsonFile.R new file mode 100644 index 0000000000000..eefb79e5cee48 --- /dev/null +++ b/pkg/inst/tests/test_jsonFile.R @@ -0,0 +1,16 @@ +library(testthat) + +context("the jsonFile() function") + +sc <- sparkR.init() + +sqlctx <- sparkRSQL.init(sc) + +jsonPath <- paste(getwd(), "/pkg/inst/tests/people.json", sep = "") + +test_that("jsonFile() on a local file returns a DataFrame", { + df <- jsonFile(sqlctx, jsonPath) + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) > 0) + expect_true(count(df) == 3) +}) diff --git a/pkg/man/DataFrame.Rd b/pkg/man/DataFrame.Rd new file mode 100644 index 0000000000000..9660e0847284e --- /dev/null +++ b/pkg/man/DataFrame.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{class} +\name{DataFrame-class} +\alias{DataFrame-class} +\alias{dataFrame} +\title{S4 class that represents a DataFrame} +\usage{ +dataFrame(sdf, isCached = FALSE, isCheckpointed = FALSE) +} +\arguments{ +\item{sdf}{A Java object reference to the backing Scala SchemaRDD} + +\item{env}{An R environment that stores bookkeeping states of the DataFrame} +} +\description{ +DataFrames can be created using functions like + \code{jsonFile}, \code{table} etc. +} +\seealso{ +jsonFile, table +} + diff --git a/pkg/man/cacheTable.Rd b/pkg/man/cacheTable.Rd new file mode 100644 index 0000000000000..8da72209d5bdd --- /dev/null +++ b/pkg/man/cacheTable.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{cacheTable} +\alias{cacheTable} +\title{Cache Table} +\usage{ +cacheTable(sqlctx, tableName) +} +\arguments{ +\item{sqlctx}{SQLContext to use} + +\item{tableName}{The name of the table being cached} +} +\value{ +DataFrame +} +\description{ +Caches the specified table in-memory. +} + diff --git a/pkg/man/jsonFile.Rd b/pkg/man/jsonFile.Rd new file mode 100644 index 0000000000000..ef06029851912 --- /dev/null +++ b/pkg/man/jsonFile.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{jsonFile} +\alias{jsonFile} +\title{Create a DataFrame from a JSON file.} +\usage{ +jsonFile(sqlctx, path) +} +\arguments{ +\item{sqlctx}{SQLContext to use} + +\item{path}{Path of file to read. A vector of multiple paths is allowed.} +} +\value{ +DataFrame +} +\description{ +Loads a JSON file (one object per line), returning the result as a DataFrame +It goes through the entire dataset once to determine the schema. +} + diff --git a/pkg/man/parquetFile.Rd b/pkg/man/parquetFile.Rd new file mode 100644 index 0000000000000..0600f0f27f45d --- /dev/null +++ b/pkg/man/parquetFile.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{parquetFile} +\alias{parquetFile} +\title{Create a DataFrame from a Parquet file.} +\usage{ +parquetFile(sqlctx, path) +} +\arguments{ +\item{sqlctx}{SQLContext to use} + +\item{path}{Path of file to read. A vector of multiple paths is allowed.} +} +\value{ +DataFrame +} +\description{ +Loads a Parquet file, returning the result as a DataFrame. +} + diff --git a/pkg/man/printSchema.Rd b/pkg/man/printSchema.Rd new file mode 100644 index 0000000000000..0bc5224cf136d --- /dev/null +++ b/pkg/man/printSchema.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{printSchema} +\alias{printSchema} +\title{Print Schema of a DataFrame} +\usage{ +printSchema(df) +} +\arguments{ +\item{df}{A SparkSQL DataFrame} +} +\description{ +Prints out the schema in tree format +} + diff --git a/pkg/man/registerTempTable.Rd b/pkg/man/registerTempTable.Rd new file mode 100644 index 0000000000000..8735c3dfa33a1 --- /dev/null +++ b/pkg/man/registerTempTable.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{registerTempTable} +\alias{registerTempTable} +\title{Register Temporary Table} +\usage{ +registerTempTable(df, tableName) +} +\arguments{ +\item{df}{A SparkSQL DataFrame} + +\item{tableName}{A character vector containing the name of the table} +} +\description{ +Registers a DataFrame as a Temporary Table in the SQLContext +} + diff --git a/pkg/man/sparkRSQL.init.Rd b/pkg/man/sparkRSQL.init.Rd new file mode 100644 index 0000000000000..574cec03bcf77 --- /dev/null +++ b/pkg/man/sparkRSQL.init.Rd @@ -0,0 +1,15 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{sparkRSQL.init} +\alias{sparkRSQL.init} +\title{Initialize a new Spark Context.} +\usage{ +sparkRSQL.init(jsc) +} +\arguments{ +\item{jsc}{The existing JavaSparkContext created with SparkR.init()} +} +\description{ +This function creates a SparkContext from an existing JavaSparkContext and +then uses it to initialize a new SQLContext +} + diff --git a/pkg/man/sql.Rd b/pkg/man/sql.Rd new file mode 100644 index 0000000000000..25b9cbba925db --- /dev/null +++ b/pkg/man/sql.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{sql} +\alias{sql} +\title{SQL Query} +\usage{ +sql(sqlctx, sqlQuery) +} +\arguments{ +\item{sqlctx}{SQLContext to use} + +\item{sqlQuery}{A character vector containing the SQL query} +} +\value{ +DataFrame +} +\description{ +Executes a SQL query using Spark, returning the result as a DataFrame. +} + diff --git a/pkg/man/table.Rd b/pkg/man/table.Rd new file mode 100644 index 0000000000000..55c0ce3c075ba --- /dev/null +++ b/pkg/man/table.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{table} +\alias{table} +\title{Create a DataFrame from a SparkSQL Table} +\usage{ +table(sqlctx, tableName) +} +\arguments{ +\item{sqlctx}{SQLContext to use} + +\item{sqlQuery}{A character vector containing the SQL query} +} +\value{ +DataFrame +} +\description{ +Returns the specified Table as a DataFrame. The Table must have already been registered +in the SQLContext. +} + diff --git a/pkg/man/uncacheTable.Rd b/pkg/man/uncacheTable.Rd new file mode 100644 index 0000000000000..8b34ff2ee213b --- /dev/null +++ b/pkg/man/uncacheTable.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{uncacheTable} +\alias{uncacheTable} +\title{Uncache Table} +\usage{ +uncacheTable(sqlctx, tableName) +} +\arguments{ +\item{sqlctx}{SQLContext to use} + +\item{tableName}{The name of the table being uncached} +} +\value{ +DataFrame +} +\description{ +Removes the specified table from the in-memory cache. +} + diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 93b04b5a3b23b..f359a91ef46b5 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -29,12 +29,13 @@ libraryDependencies ++= Seq( val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" - val defaultSparkVersion = "1.1.0" + val defaultSparkVersion = "1.3.0-SNAPSHOT" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.spark" % "spark-core_2.10" % sparkVersion excludeAll(excludeHadoop) + "org.apache.spark" % "spark-core_2.10" % sparkVersion, + "org.apache.spark" % "spark-sql_2.10" % sparkVersion ) ++ (if (sbtYarnFlag != "") { val defaultYarnVersion = "2.4.0" val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRSQL.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRSQL.scala new file mode 100644 index 0000000000000..95167ab8e859e --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRSQL.scala @@ -0,0 +1,12 @@ +package edu.berkeley.cs.amplab.sparkr + +import org.apache.spark.SparkContext +import org.apache.spark.sql.{SQLContext} +import org.apache.spark.sql.types.{StructType} + +object sparkRSQL { + + def createSQLContext(sc: SparkContext): SQLContext = { + new SQLContext(sc) + } +} \ No newline at end of file From 74b3ed62a5531eeb0d12f08d3bfc16b1b73be068 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 2 Feb 2015 22:19:53 -0600 Subject: [PATCH 376/687] Incorporate code feedback Address code comments in https://github.com/amplab-extras/SparkR-pkg/pull/152 --- pkg/NAMESPACE | 3 +- pkg/R/DataFrame.R | 58 +++++++----- pkg/R/SQLContext.R | 92 ++++++++++++------- pkg/R/sparkR.R | 10 +- .../{SparkRSQL.scala => sqlUtils.scala} | 11 +-- 5 files changed, 108 insertions(+), 66 deletions(-) rename pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/{SparkRSQL.scala => sqlUtils.scala} (61%) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index ab5615be35ae3..e4938cf3d3065 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -73,8 +73,7 @@ importFrom(methods, setGeneric, setMethod, setOldClass) exportClasses("DataFrame") exportMethods("printSchema", - "registerTempTable" - ) + "registerTempTable") export("jsonFile", "parquetFile", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 91a6ceb9911d9..67ad9386cb64c 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -19,10 +19,8 @@ setClass("DataFrame", slots = list(env = "environment", sdf = "jobj")) -setMethod("initialize", "DataFrame", function(.Object, sdf, isCached, isCheckpointed) { +setMethod("initialize", "DataFrame", function(.Object, sdf) { .Object@env <- new.env() - .Object@env$isCached <- isCached - .Object@env$isCheckpointed <- isCheckpointed .Object@sdf <- sdf .Object @@ -31,15 +29,10 @@ setMethod("initialize", "DataFrame", function(.Object, sdf, isCached, isCheckpoi #' @rdname DataFrame #' @export -dataFrame <- function(sdf, isCached = FALSE, isCheckpointed = FALSE) { - new("DataFrame", sdf, isCached, isCheckpointed) +dataFrame <- function(sdf) { + new("DataFrame", sdf) } -# The DataFrame accessor function - -setGeneric("getsdf", function(df, ...) {standardGeneric("getsdf") }) -setMethod("getsdf", signature(df = "DataFrame" ), function(df) df@sdf ) - ############################ DataFrame Methods ############################################## #' Print Schema of a DataFrame @@ -50,13 +43,21 @@ setMethod("getsdf", signature(df = "DataFrame" ), function(df) df@sdf ) #' #' @rdname printSchema #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' printSchema(df) +#'} setGeneric("printSchema", function(df) { standardGeneric("printSchema") }) setMethod("printSchema", signature(df = "DataFrame"), function(df) { - sdf <- getsdf(df) + sdf <- df@sdf schemaString <- callJMethod(sdf, "printSchema") cat(schemaString) }) @@ -70,18 +71,23 @@ setMethod("printSchema", #' #' @rdname registerTempTable #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' registerTempTable(df, "json_df") +#' new_df <- sql(sqlCtx, "SELECT * FROM json_df") +#'} setGeneric("registerTempTable", function(df, tableName) { standardGeneric("registerTempTable") }) setMethod("registerTempTable", signature(df = "DataFrame", tableName = "character"), function(df, tableName) { - if (class(df) == "DataFrame") { - sdf <- getsdf(df) - callJMethod(sdf, "registerTempTable", tableName) - } else { - stop("You must specify a DataFrame.") - } + sdf <- df@sdf + callJMethod(sdf, "registerTempTable", tableName) }) #' Count @@ -92,11 +98,19 @@ setMethod("registerTempTable", #' #' @rdname count #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' count(df) +#' } setMethod("count", signature(x = "DataFrame"), function(x) { - sdf <- getsdf(x) + sdf <- x@sdf callJMethod(sdf, "count") }) @@ -109,11 +123,11 @@ setMethod("count", #' @rdname collect-methods #' @export +# TODO: Collect() currently returns a list of Generic Row objects and is WIP. This will eventually +# be part of the process to read a DataFrame into R and create a data.frame. setMethod("collect", signature(rdd = "DataFrame"), function(rdd){ - sdf <- getsdf(rdd) - list_obj <- callJMethod(sdf, "collect") + sdf <- rdd@sdf + listObj <- callJMethod(sdf, "collect") }) - -# TODO: Add collect partition \ No newline at end of file diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 25ac5820ce5be..9e28098f71462 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -5,19 +5,24 @@ #' Loads a JSON file (one object per line), returning the result as a DataFrame #' It goes through the entire dataset once to determine the schema. #' -#' @param sqlctx SQLContext to use +#' @param sqlCtx SQLContext to use #' @param path Path of file to read. A vector of multiple paths is allowed. #' @return DataFrame #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' } -jsonFile <- function(sqlctx, path) { +jsonFile <- function(sqlCtx, path) { # Allow the user to have a more flexible definiton of the text file path path <- normalizePath(path) # Convert a string vector of paths to a string containing comma separated paths path <- paste(path, collapse=",") - - sdf<- callJMethod(sqlctx, "jsonFile", path) - + sdf <- callJMethod(sqlCtx, "jsonFile", path) dataFrame(sdf) } @@ -25,19 +30,18 @@ jsonFile <- function(sqlctx, path) { #' #' Loads a Parquet file, returning the result as a DataFrame. #' -#' @param sqlctx SQLContext to use +#' @param sqlCtx SQLContext to use #' @param path Path of file to read. A vector of multiple paths is allowed. #' @return DataFrame #' @export -parquetFile <- function(sqlctx, path) { +# TODO: Implement saveasParquetFile and write examples for both +parquetFile <- function(sqlCtx, path) { # Allow the user to have a more flexible definiton of the text file path path <- normalizePath(path) # Convert a string vector of paths to a string containing comma separated paths path <- paste(path, collapse=",") - - sdf <- callJMethod(sqlctx, "parquetFile", path) - + sdf <- callJMethod(sqlCtx, "parquetFile", path) dataFrame(sdf) } @@ -45,15 +49,22 @@ parquetFile <- function(sqlctx, path) { #' #' Executes a SQL query using Spark, returning the result as a DataFrame. #' -#' @param sqlctx SQLContext to use +#' @param sqlCtx SQLContext to use #' @param sqlQuery A character vector containing the SQL query #' @return DataFrame #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' registerTempTable(df, "table") +#' new_df <- sql(sqlCtx, "SELECT * FROM table") +#' } -sql <- function(sqlctx, sqlQuery) { - - sdf <- callJMethod(sqlctx, "sql", sqlQuery) - +sql <- function(sqlCtx, sqlQuery) { + sdf <- callJMethod(sqlCtx, "sql", sqlQuery) dataFrame(sdf) } @@ -62,15 +73,22 @@ sql <- function(sqlctx, sqlQuery) { #' Returns the specified Table as a DataFrame. The Table must have already been registered #' in the SQLContext. #' -#' @param sqlctx SQLContext to use -#' @param sqlQuery A character vector containing the SQL query +#' @param sqlCtx SQLContext to use +#' @param tableName The SparkSQL Table to convert to a DataFrame. #' @return DataFrame #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' registerTempTable(df, "table") +#' new_df <- table(sqlCtx, "table") +#' } -table <- function(sqlctx, tableName) { - - sdf <- callJMethod(sqlctx, "table", tableName) - +table <- function(sqlCtx, tableName) { + sdf <- callJMethod(sqlCtx, "table", tableName) dataFrame(sdf) } @@ -78,28 +96,40 @@ table <- function(sqlctx, tableName) { #' #' Caches the specified table in-memory. #' -#' @param sqlctx SQLContext to use +#' @param sqlCtx SQLContext to use #' @param tableName The name of the table being cached #' @return DataFrame #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' registerTempTable(df, "table") +#' cacheTable(sqlCtx, "table") +#' } -cacheTable <- function(sqlctx, tableName) { - - callJMethod(sqlctx, "cacheTable", tableName) - +cacheTable <- function(sqlCtx, tableName) { + callJMethod(sqlCtx, "cacheTable", tableName) } #' Uncache Table #' #' Removes the specified table from the in-memory cache. #' -#' @param sqlctx SQLContext to use +#' @param sqlCtx SQLContext to use #' @param tableName The name of the table being uncached #' @return DataFrame #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df <- table(sqlCtx, "table") +#' uncacheTable(sqlCtx, "table") +#' } -uncacheTable <- function(sqlctx, tableName){ - - callJMethod(sqlctx, "uncacheTable", tableName) - +uncacheTable <- function(sqlCtx, tableName) { + callJMethod(sqlCtx, "uncacheTable", tableName) } diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index c514f0c3a7abd..24d7c69a8505a 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -163,20 +163,20 @@ sparkRSQL.init <- function(jsc) { sparkContext = callJMethod(jsc, "sc") - if (exists(".sparkRSQLsc", envir=.sparkREnv)) { + if (exists(".sparkRSQLsc", envir = .sparkREnv)) { cat("Re-using existing SparkSQL Context. Please restart R to create a new SparkSQL Context\n") - return(get(".sparkRSQLsc", envir=.sparkREnv)) + return(get(".sparkRSQLsc", envir = .sparkREnv)) } assign( ".sparkRSQLsc", callJStatic( - "edu.berkeley.cs.amplab.sparkr.sparkRSQL", + "edu.berkeley.cs.amplab.sparkr.sqlUtils", "createSQLContext", sparkContext), - envir=.sparkREnv + envir = .sparkREnv ) - sqlctx <- get(".sparkRSQLsc", envir=.sparkREnv) + sqlctx <- get(".sparkRSQLsc", envir = .sparkREnv) sqlctx } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRSQL.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala similarity index 61% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRSQL.scala rename to pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala index 95167ab8e859e..bf4dad6cadd84 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRSQL.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala @@ -4,9 +4,8 @@ import org.apache.spark.SparkContext import org.apache.spark.sql.{SQLContext} import org.apache.spark.sql.types.{StructType} -object sparkRSQL { - - def createSQLContext(sc: SparkContext): SQLContext = { - new SQLContext(sc) - } -} \ No newline at end of file +object sqlUtils { + def createSQLContext(sc: SparkContext): SQLContext = { + new SQLContext(sc) + } +} From 30d73375b435ac259830fd2a5d8ea45792fc9f87 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Feb 2015 10:31:18 -0600 Subject: [PATCH 377/687] Added SparkSQL test Replaced test_jsonFile.R with test_sparkSQL.R which includes tests for multiple SparkSQL functions. --- pkg/inst/tests/test_jsonFile.R | 16 ---------------- pkg/inst/tests/test_sparkSQL.R | 30 ++++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 16 deletions(-) delete mode 100644 pkg/inst/tests/test_jsonFile.R create mode 100644 pkg/inst/tests/test_sparkSQL.R diff --git a/pkg/inst/tests/test_jsonFile.R b/pkg/inst/tests/test_jsonFile.R deleted file mode 100644 index eefb79e5cee48..0000000000000 --- a/pkg/inst/tests/test_jsonFile.R +++ /dev/null @@ -1,16 +0,0 @@ -library(testthat) - -context("the jsonFile() function") - -sc <- sparkR.init() - -sqlctx <- sparkRSQL.init(sc) - -jsonPath <- paste(getwd(), "/pkg/inst/tests/people.json", sep = "") - -test_that("jsonFile() on a local file returns a DataFrame", { - df <- jsonFile(sqlctx, jsonPath) - expect_true(inherits(df, "DataFrame")) - expect_true(count(df) > 0) - expect_true(count(df) == 3) -}) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R new file mode 100644 index 0000000000000..719b9e0587469 --- /dev/null +++ b/pkg/inst/tests/test_sparkSQL.R @@ -0,0 +1,30 @@ +library(testthat) + +context("SparkSQL functions") + +# Tests for jsonFile, registerTempTable, sql, count, table + +sc <- sparkR.init() + +sqlCtx <- sparkRSQL.init(sc) + +jsonPath <- paste(getwd(), "/pkg/inst/tests/people.json", sep = "") + +test_that("jsonFile() on a local file returns a DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 3) +}) + +test_that("registerTempTable() results in a queryable table and sql() results in a new DataFrame", { + registerTempTable(df, "table1") + newdf <- sql(sqlCtx, "SELECT * FROM table1 where Name = 'Michael'") + expect_true(inherits(newdf, "DataFrame")) + expect_true(count(newdf) == 1) +}) + +test_that("table() returns a new DataFrame", { + tabledf <- table(sqlCtx, "table1") + expect_true(inherits(tabledf, "DataFrame")) + expect_true(count(tabledf) == 3) +}) \ No newline at end of file From 51ecf418c4e78bf77f7e2e637d93e6975dbfb005 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Feb 2015 10:42:38 -0600 Subject: [PATCH 378/687] Updated Scala object Renamed object to SQLUtils --- pkg/R/sparkR.R | 2 +- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 24d7c69a8505a..c7a06f82731e4 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -171,7 +171,7 @@ sparkRSQL.init <- function(jsc) { assign( ".sparkRSQLsc", callJStatic( - "edu.berkeley.cs.amplab.sparkr.sqlUtils", + "edu.berkeley.cs.amplab.sparkr.SQLUtils", "createSQLContext", sparkContext), envir = .sparkREnv diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala index bf4dad6cadd84..67d72de8119b3 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala @@ -4,7 +4,7 @@ import org.apache.spark.SparkContext import org.apache.spark.sql.{SQLContext} import org.apache.spark.sql.types.{StructType} -object sqlUtils { +object SQLUtils { def createSQLContext(sc: SparkContext): SQLContext = { new SQLContext(sc) } From 13fbf120ecaa2245441b61e7fa73fe1161ac798d Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Feb 2015 10:52:35 -0600 Subject: [PATCH 379/687] Regenerated .Rd files Updated documentation to include examples. --- pkg/man/DataFrame.Rd | 2 +- pkg/man/collect-methods.Rd | 11 +++++++++-- pkg/man/count.Rd | 18 ++++++++++++++++-- pkg/man/jsonFile.Rd | 12 ++++++++++-- pkg/man/parquetFile.Rd | 4 ++-- pkg/man/printSchema.Rd | 9 +++++++++ pkg/man/registerTempTable.Rd | 10 ++++++++++ pkg/man/sparkR.init.Rd | 2 +- pkg/man/sql.Rd | 14 ++++++++++++-- pkg/man/table.Rd | 16 +++++++++++++--- pkg/man/uncacheTable.Rd | 12 ++++++++++-- 11 files changed, 93 insertions(+), 17 deletions(-) diff --git a/pkg/man/DataFrame.Rd b/pkg/man/DataFrame.Rd index 9660e0847284e..a699d8ea97eaf 100644 --- a/pkg/man/DataFrame.Rd +++ b/pkg/man/DataFrame.Rd @@ -5,7 +5,7 @@ \alias{dataFrame} \title{S4 class that represents a DataFrame} \usage{ -dataFrame(sdf, isCached = FALSE, isCheckpointed = FALSE) +dataFrame(sdf) } \arguments{ \item{sdf}{A Java object reference to the backing Scala SchemaRDD} diff --git a/pkg/man/collect-methods.Rd b/pkg/man/collect-methods.Rd index 57d9f0481c839..dd2c5eaae9544 100644 --- a/pkg/man/collect-methods.Rd +++ b/pkg/man/collect-methods.Rd @@ -1,13 +1,16 @@ % Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} -\name{collect} +\name{collect,DataFrame-method} \alias{collect} +\alias{collect,DataFrame-method} \alias{collect,RDD-method} \alias{collectPartition} \alias{collectPartition,RDD,integer-method} \alias{collectPartition,integer,RDD-method} -\title{Collect elements of an RDD} +\title{Collect elements of a DataFrame} \usage{ +\S4method{collect}{DataFrame}(rdd) + collect(rdd, ...) \S4method{collect}{RDD}(rdd, flatten = TRUE) @@ -24,11 +27,15 @@ collectPartition(rdd, partitionId) \item{flatten}{FALSE if the list should not flattened} \item{partitionId}{the partition to collect (starts from 0)} + +\item{df}{A SparkSQL DataFrame} } \value{ a list containing elements in the RDD } \description{ +Returns a list of Row objects from a DataFrame + \code{collect} returns a list that contains all of the elements in this RDD. \code{collectPartition} returns a list that contains all of the elements diff --git a/pkg/man/count.Rd b/pkg/man/count.Rd index 109f3a93645ab..6ac0a649dde98 100644 --- a/pkg/man/count.Rd +++ b/pkg/man/count.Rd @@ -1,11 +1,14 @@ % Generated by roxygen2 (4.0.2): do not edit by hand \docType{methods} -\name{count} +\name{count,DataFrame-method} \alias{count} +\alias{count,DataFrame-method} \alias{count,RDD-method} \alias{length,RDD-method} -\title{Return the number of elements in the RDD.} +\title{Count} \usage{ +\S4method{count}{DataFrame}(x) + count(x) \S4method{count}{RDD}(x) @@ -14,11 +17,15 @@ count(x) } \arguments{ \item{x}{The RDD to count} + +\item{df}{A SparkSQL DataFrame} } \value{ number of elements in the RDD. } \description{ +Returns the number of rows in a DataFrame + Return the number of elements in the RDD. Return the number of elements in the RDD @@ -26,6 +33,13 @@ Return the number of elements in the RDD \examples{ \dontrun{ sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +count(df) +} +\dontrun{ +sc <- sparkR.init() rdd <- parallelize(sc, 1:10) count(rdd) # 10 length(rdd) # Same as count diff --git a/pkg/man/jsonFile.Rd b/pkg/man/jsonFile.Rd index ef06029851912..e46298d8c6a47 100644 --- a/pkg/man/jsonFile.Rd +++ b/pkg/man/jsonFile.Rd @@ -3,10 +3,10 @@ \alias{jsonFile} \title{Create a DataFrame from a JSON file.} \usage{ -jsonFile(sqlctx, path) +jsonFile(sqlCtx, path) } \arguments{ -\item{sqlctx}{SQLContext to use} +\item{sqlCtx}{SQLContext to use} \item{path}{Path of file to read. A vector of multiple paths is allowed.} } @@ -17,4 +17,12 @@ DataFrame Loads a JSON file (one object per line), returning the result as a DataFrame It goes through the entire dataset once to determine the schema. } +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +} +} diff --git a/pkg/man/parquetFile.Rd b/pkg/man/parquetFile.Rd index 0600f0f27f45d..5c1d3cf15b7fb 100644 --- a/pkg/man/parquetFile.Rd +++ b/pkg/man/parquetFile.Rd @@ -3,10 +3,10 @@ \alias{parquetFile} \title{Create a DataFrame from a Parquet file.} \usage{ -parquetFile(sqlctx, path) +parquetFile(sqlCtx, path) } \arguments{ -\item{sqlctx}{SQLContext to use} +\item{sqlCtx}{SQLContext to use} \item{path}{Path of file to read. A vector of multiple paths is allowed.} } diff --git a/pkg/man/printSchema.Rd b/pkg/man/printSchema.Rd index 0bc5224cf136d..f7d89d1d45eef 100644 --- a/pkg/man/printSchema.Rd +++ b/pkg/man/printSchema.Rd @@ -11,4 +11,13 @@ printSchema(df) \description{ Prints out the schema in tree format } +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +printSchema(df) +} +} diff --git a/pkg/man/registerTempTable.Rd b/pkg/man/registerTempTable.Rd index 8735c3dfa33a1..11394db3550e3 100644 --- a/pkg/man/registerTempTable.Rd +++ b/pkg/man/registerTempTable.Rd @@ -13,4 +13,14 @@ registerTempTable(df, tableName) \description{ Registers a DataFrame as a Temporary Table in the SQLContext } +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +registerTempTable(df, "json_df") +new_df <- sql(sqlCtx, "SELECT * FROM json_df") +} +} diff --git a/pkg/man/sparkR.init.Rd b/pkg/man/sparkR.init.Rd index daf9066892be6..4ae01b0aa3172 100644 --- a/pkg/man/sparkR.init.Rd +++ b/pkg/man/sparkR.init.Rd @@ -35,7 +35,7 @@ sc <- sparkR.init("local[2]", "SparkR", "/home/spark", list(spark.executor.memory="1g")) sc <- sparkR.init("yarn-client", "SparkR", "/home/spark", list(spark.executor.memory="1g"), - list(LD_LIBRARY_PATH="/directory of Java VM Library Files (libjvm.so) on worker nodes/"), + list(LD_LIBRARY_PATH="/directory of JVM libraries (libjvm.so) on workers/"), c("jarfile1.jar","jarfile2.jar")) } } diff --git a/pkg/man/sql.Rd b/pkg/man/sql.Rd index 25b9cbba925db..68e93ba62eb07 100644 --- a/pkg/man/sql.Rd +++ b/pkg/man/sql.Rd @@ -3,10 +3,10 @@ \alias{sql} \title{SQL Query} \usage{ -sql(sqlctx, sqlQuery) +sql(sqlCtx, sqlQuery) } \arguments{ -\item{sqlctx}{SQLContext to use} +\item{sqlCtx}{SQLContext to use} \item{sqlQuery}{A character vector containing the SQL query} } @@ -16,4 +16,14 @@ DataFrame \description{ Executes a SQL query using Spark, returning the result as a DataFrame. } +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +registerTempTable(df, "table") +new_df <- sql(sqlCtx, "SELECT * FROM table") +} +} diff --git a/pkg/man/table.Rd b/pkg/man/table.Rd index 55c0ce3c075ba..70a908685bc94 100644 --- a/pkg/man/table.Rd +++ b/pkg/man/table.Rd @@ -3,12 +3,12 @@ \alias{table} \title{Create a DataFrame from a SparkSQL Table} \usage{ -table(sqlctx, tableName) +table(sqlCtx, tableName) } \arguments{ -\item{sqlctx}{SQLContext to use} +\item{sqlCtx}{SQLContext to use} -\item{sqlQuery}{A character vector containing the SQL query} +\item{tableName}{The SparkSQL Table to convert to a DataFrame.} } \value{ DataFrame @@ -17,4 +17,14 @@ DataFrame Returns the specified Table as a DataFrame. The Table must have already been registered in the SQLContext. } +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +registerTempTable(df, "table") +new_df <- table(sqlCtx, "table") +} +} diff --git a/pkg/man/uncacheTable.Rd b/pkg/man/uncacheTable.Rd index 8b34ff2ee213b..fdd487fae40c1 100644 --- a/pkg/man/uncacheTable.Rd +++ b/pkg/man/uncacheTable.Rd @@ -3,10 +3,10 @@ \alias{uncacheTable} \title{Uncache Table} \usage{ -uncacheTable(sqlctx, tableName) +uncacheTable(sqlCtx, tableName) } \arguments{ -\item{sqlctx}{SQLContext to use} +\item{sqlCtx}{SQLContext to use} \item{tableName}{The name of the table being uncached} } @@ -16,4 +16,12 @@ DataFrame \description{ Removes the specified table from the in-memory cache. } +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +df <- table(sqlCtx, "table") +uncacheTable(sqlCtx, "table") +} +} From fce245315aaaa90c4f4165d5f2ccdddca63c13ca Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Feb 2015 11:34:05 -0600 Subject: [PATCH 380/687] Updated documentation for SQLContext --- pkg/R/sparkR.R | 13 +++++++++---- pkg/man/cacheTable.Rd | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index c7a06f82731e4..b103511d4febb 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -151,13 +151,18 @@ sparkR.init <- function( sc } -#' Initialize a new Spark Context. +#' Initialize a new SQLContext. #' #' This function creates a SparkContext from an existing JavaSparkContext and #' then uses it to initialize a new SQLContext #' #' @param jsc The existing JavaSparkContext created with SparkR.init() #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#'} sparkRSQL.init <- function(jsc) { @@ -176,7 +181,7 @@ sparkRSQL.init <- function(jsc) { sparkContext), envir = .sparkREnv ) - sqlctx <- get(".sparkRSQLsc", envir = .sparkREnv) - - sqlctx + sqlCtx <- get(".sparkRSQLsc", envir = .sparkREnv) + + sqlCtx } diff --git a/pkg/man/cacheTable.Rd b/pkg/man/cacheTable.Rd index 8da72209d5bdd..6021384b3af9a 100644 --- a/pkg/man/cacheTable.Rd +++ b/pkg/man/cacheTable.Rd @@ -3,10 +3,10 @@ \alias{cacheTable} \title{Cache Table} \usage{ -cacheTable(sqlctx, tableName) +cacheTable(sqlCtx, tableName) } \arguments{ -\item{sqlctx}{SQLContext to use} +\item{sqlCtx}{SQLContext to use} \item{tableName}{The name of the table being cached} } @@ -16,4 +16,14 @@ DataFrame \description{ Caches the specified table in-memory. } +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +registerTempTable(df, "table") +cacheTable(sqlCtx, "table") +} +} From 39888ea9a4862169567782ef08e248839a72fb30 Mon Sep 17 00:00:00 2001 From: Chris Freeman Date: Tue, 3 Feb 2015 11:38:28 -0600 Subject: [PATCH 381/687] Update test_sparkSQL.R Added new line to EOF --- pkg/inst/tests/test_sparkSQL.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 719b9e0587469..79d2bbcc3babd 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -27,4 +27,4 @@ test_that("table() returns a new DataFrame", { tabledf <- table(sqlCtx, "table1") expect_true(inherits(tabledf, "DataFrame")) expect_true(count(tabledf) == 3) -}) \ No newline at end of file +}) From fae9bdd7448c26557d75bb9defdcc5869d7479ec Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Feb 2015 12:36:21 -0600 Subject: [PATCH 382/687] Renamed to SQLUtils.scala --- .../berkeley/cs/amplab/sparkr/{sqlUtils.scala => SQLUtils.scala} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/{sqlUtils.scala => SQLUtils.scala} (100%) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala similarity index 100% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/sqlUtils.scala rename to pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala From 2d04526bbbf8162dd2719dc1f28d7f82d3a7e68c Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Feb 2015 12:57:35 -0600 Subject: [PATCH 383/687] Formatting - Removed empty line from sparkR.R - Removed unused import from SQLUtils.scala --- pkg/R/sparkR.R | 1 - .../src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala | 1 - 2 files changed, 2 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index b103511d4febb..5d4560264c537 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -165,7 +165,6 @@ sparkR.init <- function( #'} sparkRSQL.init <- function(jsc) { - sparkContext = callJMethod(jsc, "sc") if (exists(".sparkRSQLsc", envir = .sparkREnv)) { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 67d72de8119b3..15e5c6637e47f 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -2,7 +2,6 @@ package edu.berkeley.cs.amplab.sparkr import org.apache.spark.SparkContext import org.apache.spark.sql.{SQLContext} -import org.apache.spark.sql.types.{StructType} object SQLUtils { def createSQLContext(sc: SparkContext): SQLContext = { From a95823edc2b384288a0fccaa033bfb103ce8a823 Mon Sep 17 00:00:00 2001 From: hqzizania Date: Wed, 4 Feb 2015 09:35:43 +0800 Subject: [PATCH 384/687] modified: pkg/R/RDD.R --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 24 ++++++++++++++++++++++++ pkg/man/collect-methods.Rd | 21 ++++++++++++++++++++- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 6977dd2d43330..44ac05043392e 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -6,6 +6,7 @@ exportMethods( "checkpoint", "cogroup", "collect", + "collectAsMap", "collectPartition", "combineByKey", "count", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 66e616f252533..c3099375fca5b 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -358,6 +358,7 @@ setMethod("collect", convertJListToRList(collected, flatten) }) + #' @rdname collect-methods #' @export #' @description @@ -382,6 +383,29 @@ setMethod("collectPartition", convertJListToRList(jList, flatten = TRUE) }) +#' @rdname collect-methods +#' @export +#' @description +#' \code{collectAsMap} returns a named list as a map that contains all of the elements +#' in a key-value pair RDD. +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2),list(3, 4)), 2L) +#' collectAsMap(rdd) # list(`1` = 2, `3` = 4) +#'} +setGeneric("collectAsMap", function(rdd) { standardGeneric("collectAsMap") }) + +#' @rdname collect-methods +#' @aliases collectAsMap,RDD-method +setMethod("collectAsMap", + signature(rdd = "RDD"), + function(rdd) { + pairList <- collect(rdd) + map <- new.env() + lapply(pairList, function(x) { assign(as.character(x[[1]]), x[[2]], envir = map) }) + as.list(map) + }) #' Look up elements of a key in an RDD #' diff --git a/pkg/man/collect-methods.Rd b/pkg/man/collect-methods.Rd index 57d9f0481c839..b11b5e9791060 100644 --- a/pkg/man/collect-methods.Rd +++ b/pkg/man/collect-methods.Rd @@ -1,8 +1,11 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R \docType{methods} \name{collect} \alias{collect} \alias{collect,RDD-method} +\alias{collectAsMap} +\alias{collectAsMap,RDD-method} \alias{collectPartition} \alias{collectPartition,RDD,integer-method} \alias{collectPartition,integer,RDD-method} @@ -15,6 +18,10 @@ collect(rdd, ...) collectPartition(rdd, partitionId) \S4method{collectPartition}{RDD,integer}(rdd, partitionId) + +collectAsMap(rdd) + +\S4method{collectAsMap}{RDD}(rdd) } \arguments{ \item{rdd}{The RDD to collect} @@ -24,15 +31,22 @@ collectPartition(rdd, partitionId) \item{flatten}{FALSE if the list should not flattened} \item{partitionId}{the partition to collect (starts from 0)} + +\item{rdd}{The RDD to collect as a map} } \value{ a list containing elements in the RDD + +a named list containing elements in the RDD } \description{ \code{collect} returns a list that contains all of the elements in this RDD. \code{collectPartition} returns a list that contains all of the elements in the specified partition of the RDD. + +\code{collectAsMap} returns a named list as a map that contains all of the elements +in this key-value pair RDD. } \examples{ \dontrun{ @@ -41,5 +55,10 @@ rdd <- parallelize(sc, 1:10, 2L) collect(rdd) # list from 1 to 10 collectPartition(rdd, 0L) # list from 1 to 5 } +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, 2),list(3, 4)), 2L) +collectAsMap(rdd) # list(`1` = 2, `3` = 4) +} } From 742a68bbb543c2f997b92d012e9ec628d3125a14 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Feb 2015 23:09:14 -0600 Subject: [PATCH 385/687] Update test_sparkRSQL.R Updated test to a use a temp file for the incoming .json --- pkg/inst/tests/test_sparkSQL.R | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 79d2bbcc3babd..9564a5a4589db 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -8,7 +8,11 @@ sc <- sparkR.init() sqlCtx <- sparkRSQL.init(sc) -jsonPath <- paste(getwd(), "/pkg/inst/tests/people.json", sep = "") +mockLines <- c("{\"Name\":\"Michael\"}", + "{\"Name\":\"Andy\", \"Age\":30}", + "{\"Name\":\"Justin\", \"Age\":19}") +jsonPath <- tempfile(pattern="sparkr-test", fileext=".tmp") +writeLines(mockLines, jsonPath) test_that("jsonFile() on a local file returns a DataFrame", { df <- jsonFile(sqlCtx, jsonPath) @@ -28,3 +32,5 @@ test_that("table() returns a new DataFrame", { expect_true(inherits(tabledf, "DataFrame")) expect_true(count(tabledf) == 3) }) + +unlink(jsonPath) From 491409142ed7dcb7ad475b513b786f2e92305911 Mon Sep 17 00:00:00 2001 From: hqzizania Date: Wed, 4 Feb 2015 13:46:15 +0800 Subject: [PATCH 386/687] modified: pkg/inst/tests/test_rdd.R --- pkg/inst/tests/test_rdd.R | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 7c2599f51e7e5..9b25948feeb5b 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -373,3 +373,22 @@ test_that("fullOuterJoin() on pairwise RDDs", { expect_equal(sortKeyValueList(actual), sortKeyValueList(list(list("a", list(1, NULL)), list("b", list(2, NULL)), list("d", list(NULL, 4)), list("c", list(NULL, 3))))) }) + +test_that("collectAsMap() on a pairwise RDD", { + rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) + vals <- collectAsMap(rdd) + expect_equal(vals, list(`1` = 2, `3` = 4)) + + rdd <- parallelize(sc, list(list("a", 1), list("b", 2))) + vals <- collectAsMap(rdd) + expect_equal(vals, list(a = 1, b = 2)) + + rdd <- parallelize(sc, list(list(1.1, 2.2), list(1.2, 2.4))) + vals <- collectAsMap(rdd) + expect_equal(vals, list(`1.1` = 2.2, `1.2` = 2.4)) + + rdd <- parallelize(sc, list(list(1, "a"), list(2, "b"))) + vals <- collectAsMap(rdd) + expect_equal(vals, list(`1` = "a", `2` = "b")) +}) + From 5d69f0ae76b83e957d5ce0221110ce3a1640ede9 Mon Sep 17 00:00:00 2001 From: hqzizania Date: Wed, 4 Feb 2015 14:01:00 +0800 Subject: [PATCH 387/687] modified: pkg/R/RDD.R --- pkg/R/RDD.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c3099375fca5b..789f36d172c91 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -391,7 +391,7 @@ setMethod("collectPartition", #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2),list(3, 4)), 2L) +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) #' collectAsMap(rdd) # list(`1` = 2, `3` = 4) #'} setGeneric("collectAsMap", function(rdd) { standardGeneric("collectAsMap") }) From 9767e8ec07bb45cab90818c050fb9f9ce2b7f565 Mon Sep 17 00:00:00 2001 From: hqzizania Date: Wed, 4 Feb 2015 14:21:50 +0800 Subject: [PATCH 388/687] modified: pkg/man/collect-methods.Rd --- pkg/man/collect-methods.Rd | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pkg/man/collect-methods.Rd b/pkg/man/collect-methods.Rd index b11b5e9791060..e9b5dcb0e3734 100644 --- a/pkg/man/collect-methods.Rd +++ b/pkg/man/collect-methods.Rd @@ -31,13 +31,9 @@ collectAsMap(rdd) \item{flatten}{FALSE if the list should not flattened} \item{partitionId}{the partition to collect (starts from 0)} - -\item{rdd}{The RDD to collect as a map} } \value{ a list containing elements in the RDD - -a named list containing elements in the RDD } \description{ \code{collect} returns a list that contains all of the elements in this RDD. @@ -46,7 +42,7 @@ a named list containing elements in the RDD in the specified partition of the RDD. \code{collectAsMap} returns a named list as a map that contains all of the elements -in this key-value pair RDD. +in a key-value pair RDD. } \examples{ \dontrun{ @@ -57,7 +53,7 @@ collectPartition(rdd, 0L) # list from 1 to 5 } \dontrun{ sc <- sparkR.init() -rdd <- parallelize(sc, list(list(1, 2),list(3, 4)), 2L) +rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) collectAsMap(rdd) # list(`1` = 2, `3` = 4) } } From d9da4519fa9efa5db769a43cb75d296a94d44a74 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 4 Feb 2015 21:46:49 +0800 Subject: [PATCH 389/687] [SPARKR-150] phase 1: implement sortBy() and sortByKey(). --- pkg/NAMESPACE | 2 + pkg/R/RDD.R | 106 ++++++++++++++++++++++++++++++++++++++ pkg/R/utils.R | 4 +- pkg/inst/tests/test_rdd.R | 14 +++++ pkg/man/sortBy.Rd | 36 +++++++++++++ pkg/man/sortByKey.Rd | 34 ++++++++++++ 6 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 pkg/man/sortBy.Rd create mode 100644 pkg/man/sortByKey.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 6977dd2d43330..ac90c36734e6d 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -44,6 +44,8 @@ exportMethods( "sampleRDD", "saveAsTextFile", "saveAsObjectFile", + "sortBy", + "sortByKey", "take", "takeSample", "unionRDD", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 66e616f252533..b788f13119cb6 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1240,6 +1240,40 @@ setMethod("flatMapValues", flatMap(X, flatMapFunc) }) +#' Sort an RDD by the given key function. +#' +#' @param rdd An RDD to be sorted. +#' @param func A function used to compute the sort key for each element. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all elements are sorted. +#' @rdname sortBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(3, 2, 1)) +#' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) +#'} +setGeneric("sortBy", function(rdd, func, ascending, numPartitions) { standardGeneric("sortBy") }) + +setClassUnion("missingOrLogical", c("missing", "logical")) +#' @rdname sortBy +#' @aliases sortBy,RDD,RDD-method +setMethod("sortBy", + signature(rdd = "RDD", func = "function", + ascending = "missingOrLogical", numPartitions = "missingOrInteger"), + function(rdd, func, ascending, numPartitions) { + if (missing(ascending)) { + ascending = TRUE + } + if (missing(numPartitions)) { + numPartitions = SparkR::numPartitions(rdd) + } + + values(sortByKey(keyBy(rdd, func), ascending, numPartitions)) + }) + ############ Shuffle Functions ############ #' Partition an RDD by key @@ -1796,6 +1830,78 @@ setMethod("cogroup", group.func) }) +#' Sort an (k, v) pair RDD by k. +#' +#' @param rdd An (k, v) pair RDD to be sorted. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all (k, v) pair elements are sorted. +#' @rdname sortByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(3, 3), list(2, 2), list(1, 1))) +#' collect(sortByKey(rdd)) # list (list(1, 1), list(2, 2), list(3, 3)) +#'} +setGeneric("sortByKey", function(rdd, ascending, numPartitions) { standardGeneric("sortByKey") }) + +#' @rdname sortByKey +#' @aliases sortByKey,RDD,RDD-method +setMethod("sortByKey", + signature(rdd = "RDD", ascending = "missingOrLogical", numPartitions = "missingOrInteger"), + function(rdd, ascending, numPartitions) { + if (missing(ascending)) { + ascending = TRUE + } + if (missing(numPartitions)) { + numPartitions = SparkR::numPartitions(rdd) + } + + rangeBounds <- list() + + if (numPartitions > 1) { + rddSize <- count(rdd) + # constant from Spark's RangePartitioner + maxSampleSize <- numPartitions * 20 + fraction <- min(maxSampleSize / max(rddSize, 1), 1.0) + + samples <- collect(keys(sampleRDD(rdd, FALSE, fraction, 1L))) + + # Note: the built-in R sort() function only atomic vectors + samples <- sort(unlist(samples, recursive = FALSE), decreasing = !ascending) + + if (length(samples) > 0) { + rangeBounds <- lapply(seq_len(numPartitions - 1), + function(i) { + j <- ceiling(length(samples) * i / numPartitions) + samples[j] + }) + } + } + + rangePartitionFunc <- function(key) { + partition <- 0 + + while (partition < length(rangeBounds) && key > rangeBounds[[partition + 1]]) { + partition <- partition + 1 + } + + if (ascending) { + partition + } else { + numPartitions - partition - 1 + } + } + + partitionFunc <- function(part) { + sortKeyValueList(part, decreasing = !ascending) + } + + newRDD <- partitionBy(rdd, numPartitions, rangePartitionFunc) + lapplyPartition(newRDD, partitionFunc) + }) + # TODO: Consider caching the name in the RDD's environment #' Return an RDD's name. #' diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 7c2a153b8b55d..8bb77463602b4 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -197,9 +197,9 @@ initAccumulator <- function() { # Utility function to sort a list of key value pairs # Used in unit tests -sortKeyValueList <- function(kv_list) { +sortKeyValueList <- function(kv_list, decreasing = FALSE) { keys <- sapply(kv_list, function(x) x[[1]]) - kv_list[order(keys)] + kv_list[order(keys, decreasing = decreasing)] } # Utility function to generate compact R lists from grouped rdd diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 7c2599f51e7e5..5f675fcd689ba 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -254,6 +254,12 @@ test_that("keyBy on RDDs", { expect_equal(actual, lapply(nums, function(x) { list(func(x), x) })) }) +test_that("sortBy() on RDDs", { + sortedRdd <- sortBy(rdd, function(x) { x }, ascending = FALSE) + actual <- collect(sortedRdd) + expect_equal(actual, as.list(sort(nums, decreasing = TRUE))) +}) + test_that("keys() on RDDs", { keys <- keys(intRdd) actual <- collect(keys) @@ -373,3 +379,11 @@ test_that("fullOuterJoin() on pairwise RDDs", { expect_equal(sortKeyValueList(actual), sortKeyValueList(list(list("a", list(1, NULL)), list("b", list(2, NULL)), list("d", list(NULL, 4)), list("c", list(NULL, 3))))) }) + +test_that("sortByKey() on pairwise RDDs", { + numPairsRdd <- map(rdd, function(x) { list (x, x) }) + sortedRdd <- sortByKey(numPairsRdd, ascending = FALSE) + actual <- collect(sortedRdd) + numPairs <- lapply(nums, function(x) { list (x, x) }) + expect_equal(actual, sortKeyValueList(numPairs, decreasing = TRUE)) +}) \ No newline at end of file diff --git a/pkg/man/sortBy.Rd b/pkg/man/sortBy.Rd new file mode 100644 index 0000000000000..d3a231c745240 --- /dev/null +++ b/pkg/man/sortBy.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{sortBy} +\alias{sortBy} +\alias{sortBy,RDD,RDD-method} +\alias{sortBy,RDD,function,missingOrLogical,missingOrInteger-method} +\title{Sort an RDD by the given key function.} +\usage{ +sortBy(rdd, func, ascending, numPartitions) + +\S4method{sortBy}{RDD,`function`,missingOrLogical,missingOrInteger}(rdd, func, + ascending, numPartitions) +} +\arguments{ +\item{rdd}{An RDD to be sorted.} + +\item{func}{A function used to compute the sort key for each element.} + +\item{ascending}{A flag to indicate whether the sorting is ascending or descending.} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +An RDD where all elements are sorted. +} +\description{ +Sort an RDD by the given key function. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(3, 2, 1)) +collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) +} +} + diff --git a/pkg/man/sortByKey.Rd b/pkg/man/sortByKey.Rd new file mode 100644 index 0000000000000..b58dd5bf22ce6 --- /dev/null +++ b/pkg/man/sortByKey.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{sortByKey} +\alias{sortByKey} +\alias{sortByKey,RDD,RDD-method} +\alias{sortByKey,RDD,missingOrLogical,missingOrInteger-method} +\title{Sort an (k, v) pair RDD by k.} +\usage{ +sortByKey(rdd, ascending, numPartitions) + +\S4method{sortByKey}{RDD,missingOrLogical,missingOrInteger}(rdd, ascending, + numPartitions) +} +\arguments{ +\item{rdd}{An (k, v) pair RDD to be sorted.} + +\item{ascending}{A flag to indicate whether the sorting is ascending or descending.} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +An RDD where all (k, v) pair elements are sorted. +} +\description{ +Sort an (k, v) pair RDD by k. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(3, 3), list(2, 2), list(1, 1))) +collect(sortByKey(rdd)) # list (list(1, 1), list(2, 2), list(3, 3)) +} +} + From ac1ef093ebb44eaa9f53f4c79bf0126a5d698ffe Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Feb 2015 08:49:58 -0600 Subject: [PATCH 390/687] Update registerTempTable test Add a separate jsonFile call to the second test since it doesn't carry over from the first. --- pkg/inst/tests/test_sparkSQL.R | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 9564a5a4589db..0ced32488b1a1 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -21,6 +21,7 @@ test_that("jsonFile() on a local file returns a DataFrame", { }) test_that("registerTempTable() results in a queryable table and sql() results in a new DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) registerTempTable(df, "table1") newdf <- sql(sqlCtx, "SELECT * FROM table1 where Name = 'Michael'") expect_true(inherits(newdf, "DataFrame")) From 6d57ec0cbe0ed9a890b7150b1cb202b37e9d7e2b Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Feb 2015 08:56:32 -0600 Subject: [PATCH 391/687] Remove json test file since we're using a temp --- pkg/inst/tests/people.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 pkg/inst/tests/people.json diff --git a/pkg/inst/tests/people.json b/pkg/inst/tests/people.json deleted file mode 100644 index 50a859cbd7ee8..0000000000000 --- a/pkg/inst/tests/people.json +++ /dev/null @@ -1,3 +0,0 @@ -{"name":"Michael"} -{"name":"Andy", "age":30} -{"name":"Justin", "age":19} From 0c53d6c4952ba6c87b2fc0837a17339062351df6 Mon Sep 17 00:00:00 2001 From: dputler Date: Wed, 4 Feb 2015 09:00:49 -0800 Subject: [PATCH 392/687] Data frames now coerced to lists, and messages issued for a data frame or matrix on how they are parallelized --- pkg/R/context.R | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index d77c8d04a48a8..3c4b5d278a06a 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -85,11 +85,14 @@ parallelize <- function(sc, coll, numSlices = 1) { # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives # TODO: support matrix, data frame, etc - if (!is.list(coll)) { - if (!is.vector(coll)) { + if ((!is.list(coll) && !is.vector(coll)) || is.data.frame(coll)) { + if (is.data.frame(coll)) + message(paste("context.R: A data frame is parallelized by columns.")) + else if (is.matrix(coll)) + message(paste("context.R: A matrix is parallelized by elements.")) + else message(paste("context.R: parallelize() currently only supports lists and vectors.", "Calling as.list() to coerce coll into a list.")) - } coll <- as.list(coll) } @@ -109,7 +112,6 @@ parallelize <- function(sc, coll, numSlices = 1) { RDD(jrdd, TRUE) } - #' Include this specified package on all workers #' #' This function can be used to include a package on all workers before the From 91b2fd6deaf1d49cdc6aeec8d1c5fb4d686c0319 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 5 Feb 2015 11:09:29 +0800 Subject: [PATCH 393/687] Add more test cases. --- pkg/inst/tests/test_rdd.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 5f675fcd689ba..4efa17a77b242 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -258,6 +258,11 @@ test_that("sortBy() on RDDs", { sortedRdd <- sortBy(rdd, function(x) { x }, ascending = FALSE) actual <- collect(sortedRdd) expect_equal(actual, as.list(sort(nums, decreasing = TRUE))) + + rdd2 <- parallelize(sc, sort(nums, decreasing = TRUE), 2L) + sortedRdd2 <- sortBy(rdd2, function(x) { x }) + actual <- collect(sortedRdd2) + expect_equal(actual, as.list(nums)) }) test_that("keys() on RDDs", { @@ -386,4 +391,10 @@ test_that("sortByKey() on pairwise RDDs", { actual <- collect(sortedRdd) numPairs <- lapply(nums, function(x) { list (x, x) }) expect_equal(actual, sortKeyValueList(numPairs, decreasing = TRUE)) + + rdd2 <- parallelize(sc, sort(nums, decreasing = TRUE), 2L) + numPairsRdd2 <- map(rdd2, function(x) { list (x, x) }) + sortedRdd2 <- sortByKey(numPairsRdd2) + actual <- collect(sortedRdd2) + expect_equal(actual, numPairs) }) \ No newline at end of file From 804355977ba387a036b9c5355156cf547e20a738 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 5 Feb 2015 12:12:47 +0800 Subject: [PATCH 394/687] Add a TODO to use binary search in the range partitioner. --- pkg/R/RDD.R | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index b788f13119cb6..74bd6bfad364c 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1883,6 +1883,7 @@ setMethod("sortByKey", rangePartitionFunc <- function(key) { partition <- 0 + // TODO: Use binary search instead of linear search, similar with Spark while (partition < length(rangeBounds) && key > rangeBounds[[partition + 1]]) { partition <- partition + 1 } From 345f1b8230943583163e88f3da758f187dfff47a Mon Sep 17 00:00:00 2001 From: dputler Date: Wed, 4 Feb 2015 22:17:23 -0800 Subject: [PATCH 395/687] [SPARKR-195] Implemented project style guidelines for if-else statements --- pkg/R/context.R | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index 3c4b5d278a06a..db765fafe463d 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -85,14 +85,17 @@ parallelize <- function(sc, coll, numSlices = 1) { # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives # TODO: support matrix, data frame, etc - if ((!is.list(coll) && !is.vector(coll)) || is.data.frame(coll)) { - if (is.data.frame(coll)) - message(paste("context.R: A data frame is parallelized by columns.")) - else if (is.matrix(coll)) - message(paste("context.R: A matrix is parallelized by elements.")) - else - message(paste("context.R: parallelize() currently only supports lists and vectors.", - "Calling as.list() to coerce coll into a list.")) + if ((!is.list(coll) && !is.vector(coll)) || is.data.frame(coll)) { + if (is.data.frame(coll)) { + message(paste("context.R: A data frame is parallelized by columns.")) + } else { + if (is.matrix(coll)) { + message(paste("context.R: A matrix is parallelized by elements.")) + } else { + message(paste("context.R: parallelize() currently only supports lists and vectors.", + "Calling as.list() to coerce coll into a list.")) + } + } coll <- as.list(coll) } From 193f5fe526eaf4af620fd625d754130a13bd06f6 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 5 Feb 2015 02:49:00 -0500 Subject: [PATCH 396/687] loop 1-12 test pass. --- pkg/R/RDD.R | 18 ++++++++++++++++- pkg/R/utils.R | 42 ++++++++++++++++++++++++++++++++++++++++ pkg/inst/worker/worker.R | 18 +++++++++++++---- 3 files changed, 73 insertions(+), 5 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 66e616f252533..6b101714f9d71 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -18,6 +18,7 @@ setClass("RDD", setClass("PipelinedRDD", slots = list(prev = "RDD", func = "function", + funcAccum = "environment", prev_jrdd = "jobj"), contains = "RDD") @@ -52,6 +53,8 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) # NOTE: We use prev_serialized to track if prev_jrdd is serialized # prev_serialized is used during the delayed computation of JRDD in getJRDD .Object@prev <- prev + + .Object@funcAccum <- initAccumulator() isPipelinable <- function(rdd) { e <- rdd@env @@ -70,10 +73,12 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) func(split, prev@func(split, iterator)) } .Object@func <- pipelinedFunc + .Object@funcAccum <- cloneAccumulator(prev@funcAccum) .Object@prev_jrdd <- prev@prev_jrdd # maintain the pipeline # Get if the prev_jrdd was serialized from the parent RDD .Object@env$prev_serialized <- prev@env$prev_serialized } + addItemToAccumulator(.Object@funcAccum, func) .Object }) @@ -121,6 +126,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), function(name) { get(name, .broadcastNames) }) depsBin <- getDependencies(computeFunc) + depsBin <- serialize(rdd@funcAccum, NULL, ascii = TRUE) prev_jrdd <- rdd@prev_jrdd @@ -526,6 +532,11 @@ setMethod("countByKey", setMethod("lapply", signature(X = "RDD", FUN = "function"), function(X, FUN) { + env.fun <- new.env(parent=.GlobalEnv) + clean.closure(FUN, env.fun) + # need to add ref variables to en.fun environment + environment(FUN) <- env.fun + func <- function(split, iterator) { lapply(iterator, FUN) } @@ -646,7 +657,12 @@ setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { setMethod("lapplyPartitionsWithIndex", signature(X = "RDD", FUN = "function"), function(X, FUN) { - closureCapturingFunc <- function(split, part) { + env.fun <- new.env(parent=.GlobalEnv) + clean.closure(FUN, env.fun) + # need to add ref variables to en.fun environment + environment(FUN) <- env.fun + + closureCapturingFunc <- function(split, part) { FUN(split, part) } PipelinedRDD(X, closureCapturingFunc) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 7c2a153b8b55d..bf4fa48ee5de4 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -195,6 +195,14 @@ initAccumulator <- function() { acc } +cloneAccumulator <- function(acc) { + newAcc <- initAccumulator() + newAcc$size <- acc$size + newAcc$data <- acc$data + newAcc$counter <- acc$counter + newAcc +} + # Utility function to sort a list of key value pairs # Used in unit tests sortKeyValueList <- function(kv_list) { @@ -259,3 +267,37 @@ joinTaggedList <- function(tagged_list, cnull) { lists <- genCompactLists(tagged_list, cnull) mergeCompactLists(lists[[1]], lists[[2]]) } + +closure.process <- function( + node, + func, + env +) { + nlen <- length(node) + if(nlen > 1) { + for(i in 1:nlen) { + closure.process(node[[i]], func, env) + } + } else if(nlen == 1) { + if(mode(node) == 'name') { + cnode <- as.character(node) + if(!cnode %in% names(as.list(args(func)))) { + func.env <- environment(func) + if(exists(cnode, envir=func.env, inherits=F)) { + assign(cnode, get(cnode, envir=func.env), envir=env) + } + } + } + } +} + +clean.closure <- function( + func, + env +) { + if(mode(func) != 'function' || mode(env) != 'environment') + stop('parameter type mismatch...') + func.body <- body(func) + + closure.process(func.body, func, env) +} diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index c5457adcbc54d..136db6960d88b 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -43,10 +43,20 @@ for (pkg in packageNames) { # read function dependencies depsLen <- SparkR:::readInt(inputCon) -if (depsLen > 0) { - execFunctionDeps <- SparkR:::readRawLen(inputCon, depsLen) - # load the dependencies into current environment - load(rawConnection(execFunctionDeps, open='rb')) +funcAccum <- unserialize(SparkR:::readRawLen(inputCon, depsLen)) +# testfilename <- "/home//ubuntu/Desktop/testfile" +# cat(typeof(funcAccum), '\n', file = testfilename) +# cat(funcAccum$size, '\n', file = testfilename, append = T) +# cat(typeof(funcAccum$data[[1]]), '\n', file = testfilename, append = T) +# cat(as.character(body(funcAccum$data[[1]])), file = testfilename, append = T) +if (funcAccum$size > 0) { + computeFunc <- function(split, part) { + res <- part + for (i in 1:funcAccum$counter) { + res <- funcAccum$data[[i]](split, res) + } + res + } } # Read and set broadcast variables From 7ca651263fcef6c1e8d2352fcc1639a7cf056512 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 5 Feb 2015 23:10:57 -0800 Subject: [PATCH 397/687] First cut of SparkRRunner --- pkg/R/sparkR.R | 15 ++-- .../cs/amplab/sparkr/SparkRRunner.scala | 81 +++++++++++++++++++ 2 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index ea9129d3bd40f..2767b8a233772 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -97,11 +97,16 @@ sparkR.init <- function( if (yarn_conf_dir != "") { cp <- paste(cp, yarn_conf_dir, sep = ":") } - launchBackend(classPath = cp, - mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args = as.character(sparkRBackendPort), - javaOpts = paste("-Xmx", sparkMem, sep = "")) - Sys.sleep(2) # Wait for backend to come up + sparkRExistingPort <- Sys.getenv("SPARKR_BACKEND_PORT", "") + if (sparkRExistingPort != "") { + sparkRBackendPort <- sparkRExistingPort + } else { + launchBackend(classPath = cp, + mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", + args = as.character(sparkRBackendPort), + javaOpts = paste("-Xmx", sparkMem, sep = "")) + Sys.sleep(2) # Wait for backend to come up + } .sparkREnv$sparkRBackendPort <- sparkRBackendPort connectBackend("localhost", sparkRBackendPort) # Connect to it diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala new file mode 100644 index 0000000000000..84dd4bd775cc2 --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala @@ -0,0 +1,81 @@ +package edu.berkeley.cs.amplab.sparkr + +import java.io._ +import java.net.URI + +import scala.collection.mutable.ArrayBuffer +import scala.collection.JavaConversions._ + +/** + * Main class used to launch SparkR applications using spark-submit. It executes R as a + * subprocess and then has it connect back to the JVM to access system properties etc. + */ +object SparkRRunner { + def main(args: Array[String]) { + val rFile = args(0) + + val otherArgs = args.slice(1, args.length) + // TODO: Can we get this from SparkConf ? + val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", "12345").toInt + val rCommand = "Rscript" + + // val formattedPythonFile = formatPath(pythonFile) + // TODO: Normalize path ? + val rFileNormalized = rFile + + // Launch a SparkR backend server for the R process to connect to; this will let it see our + // Java system properties etc. + val sparkRBackend = new SparkRBackend() + val sparkRBackendThread = new Thread() { + override def run() { + sparkRBackend.init(sparkRBackendPort) + sparkRBackend.run() + } + + def stopBackend() { + sparkRBackend.close() + } + } + + sparkRBackendThread.start() + + // Launch R + val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) + val env = builder.environment() + env.put("SPARKR_BACKEND_PORT", "" + sparkRBackendPort) + builder.redirectErrorStream(true) // Ugly but needed for stdout and stderr to synchronize + val process = builder.start() + + new RedirectThread(process.getInputStream, System.out, "redirect output").start() + + val returnCode = process.waitFor() + sparkRBackendThread.stopBackend() + System.exit(returnCode) + } + + private class RedirectThread( + in: InputStream, + out: OutputStream, + name: String, + propagateEof: Boolean = false) + extends Thread(name) { + + setDaemon(true) + override def run() { + // FIXME: We copy the stream on the level of bytes to avoid encoding problems. + try { + val buf = new Array[Byte](1024) + var len = in.read(buf) + while (len != -1) { + out.write(buf, 0, len) + out.flush() + len = in.read(buf) + } + } finally { + if (propagateEof) { + out.close() + } + } + } + } +} From b082a35e5d9aac2a0ffc033b871a0b7588be291b Mon Sep 17 00:00:00 2001 From: lythesia Date: Fri, 6 Feb 2015 16:36:34 +0800 Subject: [PATCH 398/687] add reduceByKeyLocally --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 134 ++++++++++++++++++++-------------- pkg/R/utils.R | 29 ++++++++ pkg/inst/tests/test_rdd.R | 13 ++++ pkg/man/reduceByKeyLocally.Rd | 41 +++++++++++ 5 files changed, 164 insertions(+), 54 deletions(-) create mode 100644 pkg/man/reduceByKeyLocally.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 44ac05043392e..e023cd87fcedf 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -41,6 +41,7 @@ exportMethods( "persist", "reduce", "reduceByKey", + "reduceByKeyLocally", "rightOuterJoin", "sampleRDD", "saveAsTextFile", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 789f36d172c91..fc62d92835736 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1382,26 +1382,18 @@ setMethod("groupByKey", groupVals <- function(part) { vals <- new.env() keys <- new.env() + pred <- function(item) exists(item$hash, keys) # Each item in the partition is list of (K, V) lapply(part, function(item) { - hashVal <- as.character(hashCode(item[[1]])) - if (exists(hashVal, vals)) { - acc <- vals[[hashVal]] - acc[[length(acc) + 1]] <- item[[2]] - vals[[hashVal]] <- acc - } else { - vals[[hashVal]] <- list(item[[2]]) - keys[[hashVal]] <- item[[1]] - } + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, + function(vs, v) c(vs, list(v)), + function(x) list(x)) }) # Every key in the environment contains a list # Convert that to list(K, Seq[V]) - grouped <- lapply(ls(vals), - function(name) { - list(keys[[name]], vals[[name]]) - }) - grouped + convertEnvsToList(keys, vals) } lapplyPartition(shuffled, groupVals) }) @@ -1442,28 +1434,79 @@ setMethod("reduceByKey", reduceVals <- function(part) { vals <- new.env() keys <- new.env() + pred <- function(item) exists(item$hash, keys) lapply(part, function(item) { - hashVal <- as.character(hashCode(item[[1]])) - if (exists(hashVal, vals)) { - vals[[hashVal]] <- do.call( - combineFunc, list(vals[[hashVal]], item[[2]])) - } else { - vals[[hashVal]] <- item[[2]] - keys[[hashVal]] <- item[[1]] - } + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, combineFunc, function(x) x) }) - combined <- lapply(ls(vals), - function(name) { - list(keys[[name]], vals[[name]]) - }) - combined + convertEnvsToList(keys, vals) } locallyReduced <- lapplyPartition(rdd, reduceVals) shuffled <- partitionBy(locallyReduced, numPartitions) lapplyPartition(shuffled, reduceVals) }) +#' Merge values by key locally +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function, but return the +#' results immediately to master as R list. +#' +#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @return An list where each element is list(K, V') where V' is the merged +#' value +#' @rdname reduceByKeyLocally +#' @seealso reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' reduced <- reduceByKeyLocally(rdd, "+") +#' reduced[[1]] # Should be a list(1, 6) +#'} +setGeneric("reduceByKeyLocally", + function(rdd, combineFunc) { + standardGeneric("reduceByKeyLocally") + }) + +#' @rdname reduceByKeyLocally +#' @aliases reduceByKeyLocally,RDD,integer-method +setMethod("reduceByKeyLocally", + signature(rdd = "RDD", combineFunc = "ANY"), + function(rdd, combineFunc) { + reducePart <- function(part) { + vals <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, combineFunc, function(x) x) + }) + list(list(keys, vals)) # return hash to avoid re-compute in merge + } + mergeParts <- function(accum, x) { + pred <- function(item) { + exists(item$hash, accum[[1]]) + } + lapply(ls(x[[1]]), + function(name) { + item <- list(x[[1]][[name]], x[[2]][[name]]) + item$hash <- name + updateOrCreatePair(item, accum[[1]], accum[[2]], pred, combineFunc, function(x) x) + }) + accum + } + reduced <- mapPartitions(rdd, reducePart) + merged <- reduce(reduced, mergeParts) + convertEnvsToList(merged[[1]], merged[[2]]) + }) + #' Combine values by key #' #' Generic function to combine the elements for each key using a custom set of @@ -1513,46 +1556,29 @@ setMethod("combineByKey", combineLocally <- function(part) { combiners <- new.env() keys <- new.env() + pred <- function(item) exists(item$hash, keys) lapply(part, function(item) { - k <- as.character(item[[1]]) - if (!exists(k, keys)) { - combiners[[k]] <- do.call(createCombiner, - list(item[[2]])) - keys[[k]] <- item[[1]] - } else { - combiners[[k]] <- do.call(mergeValue, - list(combiners[[k]], - item[[2]])) - } - }) - lapply(ls(keys), function(k) { - list(keys[[k]], combiners[[k]]) + item$hash <- as.character(item[[1]]) + updateOrCreatePair(item, keys, combiners, pred, mergeValue, createCombiner) }) + convertEnvsToList(keys, combiners) } locallyCombined <- lapplyPartition(rdd, combineLocally) shuffled <- partitionBy(locallyCombined, numPartitions) mergeAfterShuffle <- function(part) { combiners <- new.env() keys <- new.env() + pred <- function(item) exists(item$hash, keys) lapply(part, function(item) { - k <- as.character(item[[1]]) - if (!exists(k, combiners)) { - combiners[[k]] <- item[[2]] - keys[[k]] <- item[[1]] - } else { - combiners[[k]] <- do.call(mergeCombiners, - list(combiners[[k]], - item[[2]])) - } - }) - lapply(ls(keys), function(k) { - list(keys[[k]], combiners[[k]]) + item$hash <- as.character(item[[1]]) + updateOrCreatePair(item, keys, combiners, pred, mergeCombiners, + function(x) x) }) + convertEnvsToList(keys, combiners) } - combined <-lapplyPartition(shuffled, mergeAfterShuffle) - combined + lapplyPartition(shuffled, mergeAfterShuffle) }) ############ Binary Functions ############# diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 7c2a153b8b55d..cb5797d981ba7 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -259,3 +259,32 @@ joinTaggedList <- function(tagged_list, cnull) { lists <- genCompactLists(tagged_list, cnull) mergeCompactLists(lists[[1]], lists[[2]]) } + +# Utility function to reduce a key-value list with predicate +# Used in *ByKey functions +# param +# item key-val pair +# keys/vals env of key/value with hashes +# pred predicate function +# update_fn update or merge function for existing pair, similar with `mergeVal` @combineByKey +# create_fn create function for new pair, similar with `createCombiner` @combinebykey +updateOrCreatePair <- function(item, keys, vals, pred, update_fn, create_fn) { + # assum hashval bind to `$hash`, key/val with index 1/2 + hashVal <- item$hash + key <- item[[1]] + val <- item[[2]] + if (pred(item)) { + assign(hashVal, do.call(update_fn, list(get(hashVal, envir=vals), val)), envir=vals) + } else { + assign(hashVal, do.call(create_fn, list(val)), envir=vals) + assign(hashVal, key, envir=keys) + } +} + +# Utility function to convert key&values envs into key-val list +convertEnvsToList <- function(keys, vals) { + lapply(ls(keys), + function(name) { + list(keys[[name]], vals[[name]]) + }) +} diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 9b25948feeb5b..5d6b128cd51b1 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -229,6 +229,19 @@ test_that("flatMapValues() on pairwise RDDs", { list(2L, 1), list(2L, 2), list(1L, 200), list(1L, 201))) }) +test_that("reduceByKeyLocally() on PairwiseRDDs", { + pairs <- parallelize(sc, list(list(1, 2), list(1.1, 3), list(1, 4)), 2L) + actual <- reduceByKeyLocally(pairs, "+") + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list(1, 6), list(1.1, 3)))) + + pairs <- parallelize(sc, list(list("abc", 1.2), list(1.1, 0), list("abc", 1.3), + list("bb", 5)), 4L) + actual <- reduceByKeyLocally(pairs, "+") + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list("abc", 2.5), list(1.1, 0), list("bb", 5)))) +}) + test_that("distinct() on RDDs", { nums.rep2 <- rep(1:10, 2) rdd.rep2 <- parallelize(sc, nums.rep2, 2L) diff --git a/pkg/man/reduceByKeyLocally.Rd b/pkg/man/reduceByKeyLocally.Rd new file mode 100644 index 0000000000000..2bf671f7e300c --- /dev/null +++ b/pkg/man/reduceByKeyLocally.Rd @@ -0,0 +1,41 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{reduceByKeyLocally} +\alias{reduceByKeyLocally} +\alias{reduceByKeyLocally,RDD,integer-method} +\alias{reduceByKeyLocally,RDD-method} +\title{Merge values by key locally} +\usage{ +reduceByKeyLocally(rdd, combineFunc) + +\S4method{reduceByKeyLocally}{RDD}(rdd, combineFunc) +} +\arguments{ +\item{rdd}{The RDD to reduce by key. Should be an RDD where each element is +list(K, V) or c(K, V).} + +\item{combineFunc}{The associative reduce function to use.} +} +\value{ +An list where each element is list(K, V') where V' is the merged + value +} +\description{ +This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +and merges the values for each key using an associative reduce function, but return the +results immediately to master as R list. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +rdd <- parallelize(sc, pairs) +reduced <- reduceByKeyLocally(rdd, "+") +reduced[[1]] # Should be a list(1, 6) +} +} +\seealso{ +reduceByKey +} + From 6ad4fc36bde14e9cdbab4224cec466b9e2aaf73f Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 6 Feb 2015 14:13:14 -0500 Subject: [PATCH 399/687] add docs --- pkg/R/RDD.R | 22 ++++++++++++++++++---- pkg/inst/tests/test_rdd.R | 5 ++++- pkg/inst/worker/worker.R | 38 +++++++++++++++++++++++--------------- 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 6b101714f9d71..750e0b8eec399 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -18,7 +18,8 @@ setClass("RDD", setClass("PipelinedRDD", slots = list(prev = "RDD", func = "function", - funcAccum = "environment", + # Accumulator to store function lineage + funcAccum = "environment", prev_jrdd = "jobj"), contains = "RDD") @@ -54,6 +55,7 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) # prev_serialized is used during the delayed computation of JRDD in getJRDD .Object@prev <- prev + # We use funcAccum to store the lineage of function closures in a PipelinedRDD. .Object@funcAccum <- initAccumulator() isPipelinable <- function(rdd) { @@ -125,7 +127,9 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) - depsBin <- getDependencies(computeFunc) + # Sorry, I use "depsBin" to serialize the funcAccum for now. + # Instead of serializing the entire environment, we can serialize + # a sequence of functions (with its closure). depsBin <- serialize(rdd@funcAccum, NULL, ascii = TRUE) prev_jrdd <- rdd@prev_jrdd @@ -532,9 +536,12 @@ setMethod("countByKey", setMethod("lapply", signature(X = "RDD", FUN = "function"), function(X, FUN) { + # Creats a new the closure (environment) for the FUN to capture + # free variables. env.fun <- new.env(parent=.GlobalEnv) + # need to add free variables to env.fun environment clean.closure(FUN, env.fun) - # need to add ref variables to en.fun environment + # FUN now have new environment env.fun, with all values it needs. environment(FUN) <- env.fun func <- function(split, iterator) { @@ -1298,8 +1305,15 @@ setMethod("partitionBy", #} depsBinArr <- getDependencies(partitionFunc) + env.fun <- new.env(parent=.GlobalEnv) + clean.closure(partitionFunc, env.fun) + # need to add ref variables to en.fun environment + environment(partitionFunc) <- env.fun + funcAccum <- initAccumulator() + addItemToAccumulator(funcAccum, partitionFunc) + depsBinArr <- serialize(funcAccum, NULL, ascii = TRUE) - serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), + serializedHashFuncBytes <- serialize("computeFunc", #as.character(substitute(partitionFunc)), connection = NULL, ascii = TRUE) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 7c2599f51e7e5..bcf4cd4e1bc51 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -86,7 +86,10 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { part <- as.list(unlist(part) * split + i) }) rdd2 <- lapply(rdd2, function(x) x + x) - collect(rdd2) + actual <- collect(rdd2) + expected <- + expect_equal(actual, list(24, 24, 24, 24, 24, + 168, 170, 172, 174, 176)) }) test_that("PipelinedRDD support actions: cache(), persist(), unpersist(), checkpoint()", { diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 136db6960d88b..40fc9a8881645 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -41,22 +41,11 @@ for (pkg in packageNames) { suppressPackageStartupMessages(require(as.character(pkg), character.only=TRUE)) } -# read function dependencies +# Read the function lineage. depsLen <- SparkR:::readInt(inputCon) -funcAccum <- unserialize(SparkR:::readRawLen(inputCon, depsLen)) -# testfilename <- "/home//ubuntu/Desktop/testfile" -# cat(typeof(funcAccum), '\n', file = testfilename) -# cat(funcAccum$size, '\n', file = testfilename, append = T) -# cat(typeof(funcAccum$data[[1]]), '\n', file = testfilename, append = T) -# cat(as.character(body(funcAccum$data[[1]])), file = testfilename, append = T) -if (funcAccum$size > 0) { - computeFunc <- function(split, part) { - res <- part - for (i in 1:funcAccum$counter) { - res <- funcAccum$data[[i]](split, res) - } - res - } +if (depsLen > 0) { + # function lineage stored in an Accumulator + funcAccum <- unserialize(SparkR:::readRawLen(inputCon, depsLen)) } # Read and set broadcast variables @@ -73,6 +62,25 @@ if (numBroadcastVars > 0) { # as number of partitions to create. numPartitions <- SparkR:::readInt(inputCon) +# Build up the execFunction from the Accumulator +if (exists("funcAccum")) { + if (funcAccum$size > 0) { + if (numPartitions == -1) { + # Regular RDDs: build nested functions. + computeFunc <- function(split, part) { + res <- part + for (i in 1:funcAccum$counter) { + res <- funcAccum$data[[i]](split, res) + } + res + } + } else { + # Pairwise RDDs. + computeFunc <- funcAccum$data[[1]] + } + } +} + isEmpty <- SparkR:::readInt(inputCon) if (isEmpty != 0) { From a46516506cca8d625d983edd264330476c8774ef Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 6 Feb 2015 14:25:19 -0500 Subject: [PATCH 400/687] More docs --- pkg/R/utils.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index bf4fa48ee5de4..a16a0204720eb 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -268,6 +268,8 @@ joinTaggedList <- function(tagged_list, cnull) { mergeCompactLists(lists[[1]], lists[[2]]) } +# Recursively examine variables in functions to decide if their values should +# be included in the new function environment. closure.process <- function( node, func, @@ -281,7 +283,7 @@ closure.process <- function( } else if(nlen == 1) { if(mode(node) == 'name') { cnode <- as.character(node) - if(!cnode %in% names(as.list(args(func)))) { + if(!cnode %in% names(as.list(args(func)))) { # Not a function argument func.env <- environment(func) if(exists(cnode, envir=func.env, inherits=F)) { assign(cnode, get(cnode, envir=func.env), envir=env) @@ -291,6 +293,7 @@ closure.process <- function( } } +# Get function dependencies. clean.closure <- function( func, env From 24a7f13f272484c3b781c84adfc19c5bc17d2859 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 6 Feb 2015 14:27:54 -0500 Subject: [PATCH 401/687] More docs --- pkg/inst/tests/test_rdd.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index bcf4cd4e1bc51..0140c24cfec10 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -87,9 +87,9 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { }) rdd2 <- lapply(rdd2, function(x) x + x) actual <- collect(rdd2) - expected <- - expect_equal(actual, list(24, 24, 24, 24, 24, - 168, 170, 172, 174, 176)) + expected <- list(24, 24, 24, 24, 24, + 168, 170, 172, 174, 176) + expect_equal(actual, expected)) }) test_that("PipelinedRDD support actions: cache(), persist(), unpersist(), checkpoint()", { From fd836db89e785843be4fcd7868215770e00ffcd4 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 6 Feb 2015 14:47:41 -0500 Subject: [PATCH 402/687] fix tests. --- pkg/inst/tests/test_rdd.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 0140c24cfec10..dbebe6fa979c8 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -89,7 +89,7 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { actual <- collect(rdd2) expected <- list(24, 24, 24, 24, 24, 168, 170, 172, 174, 176) - expect_equal(actual, expected)) + expect_equal(actual, expected) }) test_that("PipelinedRDD support actions: cache(), persist(), unpersist(), checkpoint()", { From 25639cf25182a2f93e0ff7c3a76ca2844da0d29b Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 6 Feb 2015 11:55:36 -0800 Subject: [PATCH 403/687] Replace tabs with spaces --- pkg/R/context.R | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/R/context.R b/pkg/R/context.R index db765fafe463d..095ad5528ee7f 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -85,17 +85,17 @@ parallelize <- function(sc, coll, numSlices = 1) { # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives # TODO: support matrix, data frame, etc - if ((!is.list(coll) && !is.vector(coll)) || is.data.frame(coll)) { - if (is.data.frame(coll)) { - message(paste("context.R: A data frame is parallelized by columns.")) - } else { - if (is.matrix(coll)) { - message(paste("context.R: A matrix is parallelized by elements.")) - } else { - message(paste("context.R: parallelize() currently only supports lists and vectors.", - "Calling as.list() to coerce coll into a list.")) - } - } + if ((!is.list(coll) && !is.vector(coll)) || is.data.frame(coll)) { + if (is.data.frame(coll)) { + message(paste("context.R: A data frame is parallelized by columns.")) + } else { + if (is.matrix(coll)) { + message(paste("context.R: A matrix is parallelized by elements.")) + } else { + message(paste("context.R: parallelize() currently only supports lists and vectors.", + "Calling as.list() to coerce coll into a list.")) + } + } coll <- as.list(coll) } From 343b6ab95459a0b36c4cef1fe5d83734471316d0 Mon Sep 17 00:00:00 2001 From: Oscar Olmedo Date: Fri, 6 Feb 2015 18:57:37 -0800 Subject: [PATCH 404/687] Export sparkR.stop Closes #156 from oscaroboto/master --- README.md | 5 +++++ pkg/NAMESPACE | 1 + pkg/R/sparkR.R | 47 ++++++++++++++++++++++++++------------------ pkg/R/sparkRClient.R | 6 ++++-- 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index e928359819e97..795b0a1477305 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,12 @@ pass the variable `spark.executor.memory` to the SparkContext constructor. sc <- sparkR.init(master="spark://:7077", sparkEnvir=list(spark.executor.memory="1g")) +Finally, to stop the cluster run + sparkR.stop() + +sparkR.stop() can be invoked to terminate a SparkContext created previously via sparkR.init(). Then you can call sparR.init() again to create a new SparkContext that may have different configurations. + ## Examples, Unit tests SparkR comes with several sample programs in the `examples` directory. diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 44ac05043392e..c542e9034da30 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -65,6 +65,7 @@ export( "setCheckpointDir" ) export("sparkR.init") +export("sparkR.stop") export("print.jobj") useDynLib(SparkR, stringHashCode) importFrom(methods, setGeneric, setMethod, setOldClass) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index ea9129d3bd40f..2218170fef104 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -23,30 +23,39 @@ connExists <- function(env) { # Stop the Spark context. # Also terminates the backend this R session is connected to -sparkR.stop <- function(env) { - cat("Stopping SparkR\n") +sparkR.stop <- function(env = .sparkREnv) { if (!connExists(env)) { # When the workspace is saved in R, the connections are closed # *before* the finalizer is run. In these cases, we reconnect # to the backend, so we can shut it down. - connectBackend("localhost", .sparkREnv$sparkRBackendPort) - } - - if (exists(".sparkRjsc", envir = env)) { - sc <- get(".sparkRjsc", envir = env) - callJMethod(sc, "stop") + tryCatch({ + connectBackend("localhost", .sparkREnv$sparkRBackendPort) + }, error = function(err) { + cat("Error in Connection: Use sparkR.init() to restart SparkR\n") + }, warning = function(war) { + cat("No Connection Found: Use sparkR.init() to restart SparkR\n") + }) + } + + if (exists(".sparkRCon", envir = env)) { + cat("Stopping SparkR\n") + if (exists(".sparkRjsc", envir = env)) { + sc <- get(".sparkRjsc", envir = env) + callJMethod(sc, "stop") + rm(".sparkRjsc", envir = env) + } + + callJStatic("SparkRHandler", "stopBackend") + # Also close the connection and remove it from our env + conn <- get(".sparkRCon", env) + close(conn) + rm(".sparkRCon", envir = env) + # Finally, sleep for 1 sec to let backend finish exiting. + # Without this we get port conflicts in RStudio when we try to 'Restart R'. + Sys.sleep(1) } - - callJStatic("SparkRHandler", "stopBackend") - # Also close the connection and remove it from our env - conn <- get(".sparkRCon", env) - close(conn) - rm(".sparkRCon", envir = env) - - # Finally, sleep for 1 sec to let backend finish exiting. - # Without this we get port conflicts in RStudio when we try to 'Restart R'. - Sys.sleep(1) + } #' Initialize a new Spark Context. @@ -84,7 +93,7 @@ sparkR.init <- function( sparkRBackendPort = 12345) { if (exists(".sparkRjsc", envir = .sparkREnv)) { - cat("Re-using existing Spark Context. Please restart R to create a new Spark Context\n") + cat("Re-using existing Spark Context. Please stop SparkR with sparkR.stop() or restart R to create a new Spark Context\n") return(get(".sparkRjsc", envir = .sparkREnv)) } diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 5721f33c71c9e..61ddf03575325 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -4,8 +4,10 @@ # if one doesn't already exist connectBackend <- function(hostname, port, timeout = 6000) { if (exists(".sparkRcon", envir = .sparkREnv)) { - cat("SparkRBackend client connection already exists\n") - return(get(".sparkRcon", envir = .sparkREnv)) + if (isOpen(env[[".sparkRCon"]])) { + cat("SparkRBackend client connection already exists\n") + return(get(".sparkRcon", envir = .sparkREnv)) + } } con <- socketConnection(host = hostname, port = port, server = FALSE, From ba6f04443e9685d3b025a9f6511236740100a7fd Mon Sep 17 00:00:00 2001 From: lythesia Date: Sat, 7 Feb 2015 15:37:07 +0800 Subject: [PATCH 405/687] fixes for reduceByKeyLocally --- pkg/R/RDD.R | 33 ++++++++++++++++++++++----------- pkg/R/utils.R | 24 ++++++++++++------------ pkg/man/reduceByKeyLocally.Rd | 7 +++---- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index fc62d92835736..6b6fc5a1757d0 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1388,9 +1388,22 @@ setMethod("groupByKey", function(item) { item$hash <- as.character(hashCode(item[[1]])) updateOrCreatePair(item, keys, vals, pred, - function(vs, v) c(vs, list(v)), - function(x) list(x)) + function(acc, x) { + addItemToAccumulator(acc, x) + acc + }, + function(x) { + acc <- initAccumulator() + addItemToAccumulator(acc, x) + acc + }) }) + # extract out data field + vals <- eapply(vals, + function(x) { + length(x$data) <- x$counter + x$data + }) # Every key in the environment contains a list # Convert that to list(K, Seq[V]) convertEnvsToList(keys, vals) @@ -1438,7 +1451,7 @@ setMethod("reduceByKey", lapply(part, function(item) { item$hash <- as.character(hashCode(item[[1]])) - updateOrCreatePair(item, keys, vals, pred, combineFunc, function(x) x) + updateOrCreatePair(item, keys, vals, pred, combineFunc, identity) }) convertEnvsToList(keys, vals) } @@ -1451,13 +1464,12 @@ setMethod("reduceByKey", #' #' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). #' and merges the values for each key using an associative reduce function, but return the -#' results immediately to master as R list. +#' results immediately to the driver as an R list. #' #' @param rdd The RDD to reduce by key. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param combineFunc The associative reduce function to use. -#' @return An list where each element is list(K, V') where V' is the merged -#' value +#' @return A list of elements of type list(K, V') where V' is the merged value for each key #' @rdname reduceByKeyLocally #' @seealso reduceByKey #' @export @@ -1467,7 +1479,7 @@ setMethod("reduceByKey", #' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) #' rdd <- parallelize(sc, pairs) #' reduced <- reduceByKeyLocally(rdd, "+") -#' reduced[[1]] # Should be a list(1, 6) +#' reduced # list(list(1, 6), list(1.1, 3)) #'} setGeneric("reduceByKeyLocally", function(rdd, combineFunc) { @@ -1486,7 +1498,7 @@ setMethod("reduceByKeyLocally", lapply(part, function(item) { item$hash <- as.character(hashCode(item[[1]])) - updateOrCreatePair(item, keys, vals, pred, combineFunc, function(x) x) + updateOrCreatePair(item, keys, vals, pred, combineFunc, identity) }) list(list(keys, vals)) # return hash to avoid re-compute in merge } @@ -1498,7 +1510,7 @@ setMethod("reduceByKeyLocally", function(name) { item <- list(x[[1]][[name]], x[[2]][[name]]) item$hash <- name - updateOrCreatePair(item, accum[[1]], accum[[2]], pred, combineFunc, function(x) x) + updateOrCreatePair(item, accum[[1]], accum[[2]], pred, combineFunc, identity) }) accum } @@ -1573,8 +1585,7 @@ setMethod("combineByKey", lapply(part, function(item) { item$hash <- as.character(item[[1]]) - updateOrCreatePair(item, keys, combiners, pred, mergeCombiners, - function(x) x) + updateOrCreatePair(item, keys, combiners, pred, mergeCombiners, identity) }) convertEnvsToList(keys, combiners) } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index cb5797d981ba7..820866ad80fe1 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -263,20 +263,20 @@ joinTaggedList <- function(tagged_list, cnull) { # Utility function to reduce a key-value list with predicate # Used in *ByKey functions # param -# item key-val pair +# pair key-value pair # keys/vals env of key/value with hashes -# pred predicate function -# update_fn update or merge function for existing pair, similar with `mergeVal` @combineByKey -# create_fn create function for new pair, similar with `createCombiner` @combinebykey -updateOrCreatePair <- function(item, keys, vals, pred, update_fn, create_fn) { - # assum hashval bind to `$hash`, key/val with index 1/2 - hashVal <- item$hash - key <- item[[1]] - val <- item[[2]] - if (pred(item)) { - assign(hashVal, do.call(update_fn, list(get(hashVal, envir=vals), val)), envir=vals) +# updateOrCreatePred predicate function +# updateFn update or merge function for existing pair, similar with `mergeVal` @combineByKey +# createFn create function for new pair, similar with `createCombiner` @combinebykey +updateOrCreatePair <- function(pair, keys, vals, updateOrCreatePred, updateFn, createFn) { + # assume hashVal bind to `$hash`, key/val with index 1/2 + hashVal <- pair$hash + key <- pair[[1]] + val <- pair[[2]] + if (updateOrCreatePred(pair)) { + assign(hashVal, do.call(updateFn, list(get(hashVal, envir = vals), val)), envir = vals) } else { - assign(hashVal, do.call(create_fn, list(val)), envir=vals) + assign(hashVal, do.call(createFn, list(val)), envir = vals) assign(hashVal, key, envir=keys) } } diff --git a/pkg/man/reduceByKeyLocally.Rd b/pkg/man/reduceByKeyLocally.Rd index 2bf671f7e300c..f13c296065649 100644 --- a/pkg/man/reduceByKeyLocally.Rd +++ b/pkg/man/reduceByKeyLocally.Rd @@ -18,13 +18,12 @@ list(K, V) or c(K, V).} \item{combineFunc}{The associative reduce function to use.} } \value{ -An list where each element is list(K, V') where V' is the merged - value +A list of elements of type list(K, V') where V' is the merged value for each key } \description{ This function operates on RDDs where every element is of the form list(K, V) or c(K, V). and merges the values for each key using an associative reduce function, but return the -results immediately to master as R list. +results immediately to the driver as an R list. } \examples{ \dontrun{ @@ -32,7 +31,7 @@ sc <- sparkR.init() pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) rdd <- parallelize(sc, pairs) reduced <- reduceByKeyLocally(rdd, "+") -reduced[[1]] # Should be a list(1, 6) +reduced # list(list(1, 6), list(1.1, 3)) } } \seealso{ From f5038c062988b1d7fe6b6c6275b9f767dbc94689 Mon Sep 17 00:00:00 2001 From: lythesia Date: Sun, 8 Feb 2015 11:49:18 +0800 Subject: [PATCH 406/687] pull out anonymous functions in groupByKey --- pkg/R/RDD.R | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 6b6fc5a1757d0..f321f874c8abf 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1383,20 +1383,21 @@ setMethod("groupByKey", vals <- new.env() keys <- new.env() pred <- function(item) exists(item$hash, keys) + appendList <- function(acc, x) { + addItemToAccumulator(acc, x) + acc + } + makeList <- function(x) { + acc <- initAccumulator() + addItemToAccumulator(acc, x) + acc + } # Each item in the partition is list of (K, V) lapply(part, function(item) { item$hash <- as.character(hashCode(item[[1]])) updateOrCreatePair(item, keys, vals, pred, - function(acc, x) { - addItemToAccumulator(acc, x) - acc - }, - function(x) { - acc <- initAccumulator() - addItemToAccumulator(acc, x) - acc - }) + appendList, makeList) }) # extract out data field vals <- eapply(vals, From de2bfb3f05a6a33694b1d740ee1227d8d1dd5418 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 9 Feb 2015 15:42:14 +0800 Subject: [PATCH 407/687] Fix minor comments and add more test cases. --- pkg/R/RDD.R | 12 ++++++------ pkg/inst/tests/test_rdd.R | 41 ++++++++++++++++++++++++++++++++++++--- pkg/man/sortByKey.Rd | 10 +++++----- 3 files changed, 49 insertions(+), 14 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 74bd6bfad364c..ade3b59fc4388 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1830,9 +1830,9 @@ setMethod("cogroup", group.func) }) -#' Sort an (k, v) pair RDD by k. +#' Sort a (k, v) pair RDD by k. #' -#' @param rdd An (k, v) pair RDD to be sorted. +#' @param rdd A (k, v) pair RDD to be sorted. #' @param ascending A flag to indicate whether the sorting is ascending or descending. #' @param numPartitions Number of partitions to create. #' @return An RDD where all (k, v) pair elements are sorted. @@ -1841,8 +1841,8 @@ setMethod("cogroup", #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(3, 3), list(2, 2), list(1, 1))) -#' collect(sortByKey(rdd)) # list (list(1, 1), list(2, 2), list(3, 3)) +#' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) +#' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) #'} setGeneric("sortByKey", function(rdd, ascending, numPartitions) { standardGeneric("sortByKey") }) @@ -1868,7 +1868,7 @@ setMethod("sortByKey", samples <- collect(keys(sampleRDD(rdd, FALSE, fraction, 1L))) - # Note: the built-in R sort() function only atomic vectors + # Note: the built-in R sort() function only works on atomic vectors samples <- sort(unlist(samples, recursive = FALSE), decreasing = !ascending) if (length(samples) > 0) { @@ -1883,7 +1883,7 @@ setMethod("sortByKey", rangePartitionFunc <- function(key) { partition <- 0 - // TODO: Use binary search instead of linear search, similar with Spark + # TODO: Use binary search instead of linear search, similar with Spark while (partition < length(rangeBounds) && key > rangeBounds[[partition + 1]]) { partition <- partition + 1 } diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 4efa17a77b242..5331ff9ad5f76 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -255,12 +255,12 @@ test_that("keyBy on RDDs", { }) test_that("sortBy() on RDDs", { - sortedRdd <- sortBy(rdd, function(x) { x }, ascending = FALSE) + sortedRdd <- sortBy(rdd, function(x) { x * x }, ascending = FALSE) actual <- collect(sortedRdd) expect_equal(actual, as.list(sort(nums, decreasing = TRUE))) rdd2 <- parallelize(sc, sort(nums, decreasing = TRUE), 2L) - sortedRdd2 <- sortBy(rdd2, function(x) { x }) + sortedRdd2 <- sortBy(rdd2, function(x) { x * x }) actual <- collect(sortedRdd2) expect_equal(actual, as.list(nums)) }) @@ -397,4 +397,39 @@ test_that("sortByKey() on pairwise RDDs", { sortedRdd2 <- sortByKey(numPairsRdd2) actual <- collect(sortedRdd2) expect_equal(actual, numPairs) -}) \ No newline at end of file + + # sort by string keys + l <- list(list("a", 1), list("b", 2), list("1", 3), list("d", 4), list("2", 5)) + rdd3 <- parallelize(sc, l, 2L) + sortedRdd3 <- sortByKey(rdd3) + actual <- collect(sortedRdd3) + expect_equal(actual, list(list("1", 3), list("2", 5), list("a", 1), list("b", 2), list("d", 4))) + + # test on the boundary cases + + # boundary case 1: the RDD to be sorted has only 1 partition + rdd4 <- parallelize(sc, l, 1L) + sortedRdd4 <- sortByKey(rdd4) + actual <- collect(sortedRdd4) + expect_equal(actual, list(list("1", 3), list("2", 5), list("a", 1), list("b", 2), list("d", 4))) + + # boundary case 2: the sorted RDD has only 1 partition + rdd5 <- parallelize(sc, l, 2L) + sortedRdd5 <- sortByKey(rdd5, numPartitions = 1L) + actual <- collect(sortedRdd5) + expect_equal(actual, list(list("1", 3), list("2", 5), list("a", 1), list("b", 2), list("d", 4))) + + # boundary case 3: the RDD to be sorted has only 1 element + l2 <- list(list("a", 1)) + rdd6 <- parallelize(sc, l2, 2L) + sortedRdd6 <- sortByKey(rdd6) + actual <- collect(sortedRdd6) + expect_equal(actual, l2) + + # boundary case 4: the RDD to be sorted has 0 element + l3 <- list() + rdd7 <- parallelize(sc, l3, 2L) + sortedRdd7 <- sortByKey(rdd7) + actual <- collect(sortedRdd7) + expect_equal(actual, l3) +}) diff --git a/pkg/man/sortByKey.Rd b/pkg/man/sortByKey.Rd index b58dd5bf22ce6..b39aff6ca8757 100644 --- a/pkg/man/sortByKey.Rd +++ b/pkg/man/sortByKey.Rd @@ -4,7 +4,7 @@ \alias{sortByKey} \alias{sortByKey,RDD,RDD-method} \alias{sortByKey,RDD,missingOrLogical,missingOrInteger-method} -\title{Sort an (k, v) pair RDD by k.} +\title{Sort a (k, v) pair RDD by k.} \usage{ sortByKey(rdd, ascending, numPartitions) @@ -12,7 +12,7 @@ sortByKey(rdd, ascending, numPartitions) numPartitions) } \arguments{ -\item{rdd}{An (k, v) pair RDD to be sorted.} +\item{rdd}{A (k, v) pair RDD to be sorted.} \item{ascending}{A flag to indicate whether the sorting is ascending or descending.} @@ -22,13 +22,13 @@ sortByKey(rdd, ascending, numPartitions) An RDD where all (k, v) pair elements are sorted. } \description{ -Sort an (k, v) pair RDD by k. +Sort a (k, v) pair RDD by k. } \examples{ \dontrun{ sc <- sparkR.init() -rdd <- parallelize(sc, list(list(3, 3), list(2, 2), list(1, 1))) -collect(sortByKey(rdd)) # list (list(1, 1), list(2, 2), list(3, 3)) +rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) +collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) } } From 7feac3899e1db7d471bda19aa44c068d5cc86cb4 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 9 Feb 2015 18:40:28 +0800 Subject: [PATCH 408/687] Use default arguments for sortBy() and sortKeyBy(). --- pkg/R/RDD.R | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index ade3b59fc4388..4d1c85a73359a 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1255,22 +1255,18 @@ setMethod("flatMapValues", #' rdd <- parallelize(sc, list(3, 2, 1)) #' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) #'} -setGeneric("sortBy", function(rdd, func, ascending, numPartitions) { standardGeneric("sortBy") }) +setGeneric("sortBy", function(rdd, + func, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortBy") + }) -setClassUnion("missingOrLogical", c("missing", "logical")) #' @rdname sortBy #' @aliases sortBy,RDD,RDD-method setMethod("sortBy", - signature(rdd = "RDD", func = "function", - ascending = "missingOrLogical", numPartitions = "missingOrInteger"), - function(rdd, func, ascending, numPartitions) { - if (missing(ascending)) { - ascending = TRUE - } - if (missing(numPartitions)) { - numPartitions = SparkR::numPartitions(rdd) - } - + signature(rdd = "RDD", func = "function"), + function(rdd, func, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { values(sortByKey(keyBy(rdd, func), ascending, numPartitions)) }) @@ -1844,20 +1840,17 @@ setMethod("cogroup", #' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) #' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) #'} -setGeneric("sortByKey", function(rdd, ascending, numPartitions) { standardGeneric("sortByKey") }) +setGeneric("sortByKey", function(rdd, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortByKey") + }) #' @rdname sortByKey #' @aliases sortByKey,RDD,RDD-method setMethod("sortByKey", - signature(rdd = "RDD", ascending = "missingOrLogical", numPartitions = "missingOrInteger"), - function(rdd, ascending, numPartitions) { - if (missing(ascending)) { - ascending = TRUE - } - if (missing(numPartitions)) { - numPartitions = SparkR::numPartitions(rdd) - } - + signature(rdd = "RDD"), + function(rdd, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { rangeBounds <- list() if (numPartitions > 1) { From 8398f2ec8fa592fa8af0697ba625090711fde349 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 9 Feb 2015 21:15:16 -0800 Subject: [PATCH 409/687] Add sparkR-submit helper script Also adjust R file path for YARN cluster mode --- .../cs/amplab/sparkr/SparkRRunner.scala | 14 ++++- sparkR-submit | 56 +++++++++++++++++++ 2 files changed, 67 insertions(+), 3 deletions(-) create mode 100755 sparkR-submit diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala index 84dd4bd775cc2..4ccf247e0eeb1 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala @@ -6,6 +6,8 @@ import java.net.URI import scala.collection.mutable.ArrayBuffer import scala.collection.JavaConversions._ +import org.apache.hadoop.fs.Path + /** * Main class used to launch SparkR applications using spark-submit. It executes R as a * subprocess and then has it connect back to the JVM to access system properties etc. @@ -19,9 +21,15 @@ object SparkRRunner { val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", "12345").toInt val rCommand = "Rscript" - // val formattedPythonFile = formatPath(pythonFile) - // TODO: Normalize path ? - val rFileNormalized = rFile + // Check if the file path exists. + // If not, change directory to current working directory for YARN cluster mode + val rF = new File(rFile) + val rFileNormalized = if (!rF.exists()) { + new Path(rFile).getName + } else { + rFile + } + // Launch a SparkR backend server for the R process to connect to; this will let it see our // Java system properties etc. diff --git a/sparkR-submit b/sparkR-submit new file mode 100755 index 0000000000000..fbbbd78b10b61 --- /dev/null +++ b/sparkR-submit @@ -0,0 +1,56 @@ +#!/bin/bash +# To use sparkR-submit, we assume the SparkR package in yarn-cluster mode +# we assume that it has been installed to a standard location using +# R CMD INSTALL pkg/ + +FWDIR="$(cd `dirname $0`; pwd)" + +export PROJECT_HOME="$FWDIR" + +export SPARKR_JAR_FILE="$FWDIR/lib/SparkR/sparkr-assembly-0.1.jar" + +# Exit if the user hasn't set SPARK_HOME +if [ ! -f "$SPARK_HOME/bin/spark-submit" ]; then + echo "SPARK_HOME must be set to use sparkR-submit" + exit 1 +fi + +source "$SPARK_HOME/bin/utils.sh" + +function usage() { + echo "Usage: ./sparkR-submit [options]" 1>&2 + "$SPARK_HOME"/bin/spark-submit --help 2>&1 | grep -v Usage 1>&2 + exit 0 +} + +if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then + usage +fi + + +# Add SparkR to .libPaths +# If we are running an R program, only set libPaths and use Rscript + +export R_PROFILE_USER="/tmp/sparkR.profile" + +cat > /tmp/sparkR.profile << EOF + .First <- function() { + projecHome <- Sys.getenv("PROJECT_HOME") + .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) + Sys.setenv(NOAWT=1) +} +EOF + +# Build up arguments list manually to preserve quotes and backslashes. +SUBMIT_USAGE_FUNCTION=usage +gatherSparkSubmitOpts "$@" + +# If a R file is provided, directly run spark-submit. +if [[ "$1" =~ \.R$ ]]; then + primary="$1" + shift + gatherSparkSubmitOpts "$@" + exec "$FWDIR"/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files "$primary" "${SUBMISSION_OPTS[@]}" "$SPARKR_JAR_FILE" "$primary" "${APPLICATION_OPTS[@]}" +else + echo "sparkR-submit can only be used to run R programs. Please use sparkR to launch a shell" +fi From 050390b79bcdb2675523e12743c4a42ee33a7d52 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 9 Feb 2015 21:40:27 -0800 Subject: [PATCH 410/687] Fix bugs in inferring R file --- sparkR-submit | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sparkR-submit b/sparkR-submit index fbbbd78b10b61..814625f145985 100755 --- a/sparkR-submit +++ b/sparkR-submit @@ -46,11 +46,11 @@ SUBMIT_USAGE_FUNCTION=usage gatherSparkSubmitOpts "$@" # If a R file is provided, directly run spark-submit. -if [[ "$1" =~ \.R$ ]]; then - primary="$1" +if [[ "${APPLICATION_OPTS[0]}" =~ \.R$ ]]; then + primary="${APPLICATION_OPTS[0]}" shift - gatherSparkSubmitOpts "$@" - exec "$FWDIR"/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files "$primary" "${SUBMISSION_OPTS[@]}" "$SPARKR_JAR_FILE" "$primary" "${APPLICATION_OPTS[@]}" + # Set the main class to SparkRRunner and add the primary R file to --files to make sure its copied to the cluster + exec "$SPARK_HOME"/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files "$primary" "${SUBMISSION_OPTS[@]}" "$SPARKR_JAR_FILE" "$primary" "${APPLICATION_OPTS[@]:1}" else - echo "sparkR-submit can only be used to run R programs. Please use sparkR to launch a shell" + echo "sparkR-submit can only be used to run R programs. Please use sparkR to launch a shell." fi From 63e62ed5c5c94370267cf87eab4c874cbf75eb12 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Tue, 10 Feb 2015 19:09:17 +0800 Subject: [PATCH 411/687] [SPARKR-150] phase 2: implement takeOrdered() and top(). --- pkg/NAMESPACE | 2 ++ pkg/R/RDD.R | 73 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 24 +++++++++++++ pkg/man/takeOrdered.Rd | 31 +++++++++++++++++ pkg/man/top.Rd | 31 +++++++++++++++++ 5 files changed, 161 insertions(+) create mode 100644 pkg/man/takeOrdered.Rd create mode 100644 pkg/man/top.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 812e85238e9c6..b629b01ab2140 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -49,7 +49,9 @@ exportMethods( "sortBy", "sortByKey", "take", + "takeOrdered", "takeSample", + "top", "unionRDD", "unpersist", "value", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 3f6d96251365b..2e884d35af716 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1294,6 +1294,79 @@ setMethod("sortBy", values(sortByKey(keyBy(rdd, func), ascending, numPartitions)) }) +# Helper function to get first N elements from an RDD in the specified order. +# Param: +# rdd An RDD. +# num Number of elements to return. +# ascending A flag to indicate whether the sorting is ascending or descending. +# Return: +# A list of the first N elements from the RDD in the specified order. +# +takeOrderedElem <- function(rdd, num, ascending = TRUE) { + if (num <= 0L) { + return(list()) + } + + partitionFunc <- function(part) { + if (num < length(part)) { + # R limitation: order works only on primitive types! + ord <- order(unlist(part, recursive = FALSE), decreasing = !ascending) + part[ord[1:num]] + } else { + part + } + } + + newRdd <- mapPartitions(rdd, partitionFunc) + take(sortBy(newRdd, function(x) { x }, ascending = ascending), num) +} + +#' Returns the first N elements from an RDD in ascending order. +#' +#' @param rdd An RDD. +#' @param num Number of elements to return. +#' @return The first N elements from the RDD in ascending order. +#' @rdname takeOrdered +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +#' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) +#'} +setGeneric("takeOrdered", function(rdd, num) { standardGeneric("takeOrdered") }) + +#' @rdname takeOrdered +#' @aliases takeOrdered,RDD,RDD-method +setMethod("takeOrdered", + signature(rdd = "RDD", num = "integer"), + function(rdd, num) { + takeOrderedElem(rdd, num) + }) + +#' Returns the top N elements from an RDD. +#' +#' @param rdd An RDD. +#' @param num Number of elements to return. +#' @return The top N elements from the RDD. +#' @rdname top +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +#' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) +#'} +setGeneric("top", function(rdd, num) { standardGeneric("top") }) + +#' @rdname top +#' @aliases top,RDD,RDD-method +setMethod("top", + signature(rdd = "RDD", num = "integer"), + function(rdd, num) { + takeOrderedElem(rdd, num, FALSE) + }) + ############ Shuffle Functions ############ #' Partition an RDD by key diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 2f48db61020fd..fa6c112ba7a51 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -278,6 +278,30 @@ test_that("sortBy() on RDDs", { expect_equal(actual, as.list(nums)) }) +test_that("takeOrdered() on RDDs", { + l <- list(10, 1, 2, 9, 3, 4, 5, 6, 7) + rdd <- parallelize(sc, l) + actual <- takeOrdered(rdd, 6L) + expect_equal(actual, as.list(sort(unlist(l)))[1:6]) + + l <- list("e", "d", "c", "d", "a") + rdd <- parallelize(sc, l) + actual <- takeOrdered(rdd, 3L) + expect_equal(actual, as.list(sort(unlist(l)))[1:3]) +}) + +test_that("top() on RDDs", { + l <- list(10, 1, 2, 9, 3, 4, 5, 6, 7) + rdd <- parallelize(sc, l) + actual <- top(rdd, 6L) + expect_equal(actual, as.list(sort(unlist(l), decreasing = TRUE))[1:6]) + + l <- list("e", "d", "c", "d", "a") + rdd <- parallelize(sc, l) + actual <- top(rdd, 3L) + expect_equal(actual, as.list(sort(unlist(l), decreasing = TRUE))[1:3]) +}) + test_that("keys() on RDDs", { keys <- keys(intRdd) actual <- collect(keys) diff --git a/pkg/man/takeOrdered.Rd b/pkg/man/takeOrdered.Rd new file mode 100644 index 0000000000000..9ae2137abed21 --- /dev/null +++ b/pkg/man/takeOrdered.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{takeOrdered} +\alias{takeOrdered} +\alias{takeOrdered,RDD,RDD-method} +\alias{takeOrdered,RDD,integer-method} +\title{Returns the first N elements from an RDD in ascending order.} +\usage{ +takeOrdered(rdd, num) + +\S4method{takeOrdered}{RDD,integer}(rdd, num) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{num}{Number of elements to return.} +} +\value{ +The first N elements from the RDD in ascending order. +} +\description{ +Returns the first N elements from an RDD in ascending order. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) +} +} + diff --git a/pkg/man/top.Rd b/pkg/man/top.Rd new file mode 100644 index 0000000000000..627a43fd4ff71 --- /dev/null +++ b/pkg/man/top.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{top} +\alias{top} +\alias{top,RDD,RDD-method} +\alias{top,RDD,integer-method} +\title{Returns the top N elements from an RDD.} +\usage{ +top(rdd, num) + +\S4method{top}{RDD,integer}(rdd, num) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{num}{Number of elements to return.} +} +\value{ +The top N elements from the RDD. +} +\description{ +Returns the top N elements from an RDD. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) +} +} + From f4573c17ee0a895a99a12b289e86925baf99836f Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 11 Feb 2015 11:29:28 +0800 Subject: [PATCH 412/687] Use reduce() instead of sortBy().take() to get the ordered elements. --- pkg/R/RDD.R | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 2e884d35af716..3ffe017e15182 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1311,14 +1311,21 @@ takeOrderedElem <- function(rdd, num, ascending = TRUE) { if (num < length(part)) { # R limitation: order works only on primitive types! ord <- order(unlist(part, recursive = FALSE), decreasing = !ascending) - part[ord[1:num]] + list(part[ord[1:num]]) } else { - part + list(part) } } + + reduceFunc <- function(elems, part) { + newElems <- append(elems, part) + # R limitation: order works only on primitive types! + ord <- order(unlist(newElems, recursive = FALSE), decreasing = !ascending) + newElems[ord[1:num]] + } newRdd <- mapPartitions(rdd, partitionFunc) - take(sortBy(newRdd, function(x) { x }, ascending = ascending), num) + reduce(newRdd, reduceFunc) } #' Returns the first N elements from an RDD in ascending order. From 769087804897dcafeaf16075ddbcb33888b3eaa3 Mon Sep 17 00:00:00 2001 From: lythesia Date: Wed, 11 Feb 2015 13:53:14 +0800 Subject: [PATCH 413/687] separate out pair RDD functions --- pkg/R/RDD.R | 790 ------------------------------------- pkg/R/pairRDD.R | 799 ++++++++++++++++++++++++++++++++++++++ pkg/man/fullOuterJoin.Rd | 44 --- pkg/man/join-methods.Rd | 129 ++++++ pkg/man/join.Rd | 38 -- pkg/man/leftOuterJoin.Rd | 39 -- pkg/man/rightOuterJoin.Rd | 39 -- 7 files changed, 928 insertions(+), 950 deletions(-) create mode 100644 pkg/R/pairRDD.R delete mode 100644 pkg/man/fullOuterJoin.Rd create mode 100644 pkg/man/join-methods.Rd delete mode 100644 pkg/man/join.Rd delete mode 100644 pkg/man/leftOuterJoin.Rd delete mode 100644 pkg/man/rightOuterJoin.Rd diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 3f6d96251365b..434991b518e1e 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -407,38 +407,6 @@ setMethod("collectAsMap", as.list(map) }) -#' Look up elements of a key in an RDD -#' -#' @description -#' \code{lookup} returns a list of values in this RDD for key key. -#' -#' @param rdd The RDD to collect -#' @param key The key to look up for -#' @return a list of values in this RDD for key key -#' @rdname lookup -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) -#' rdd <- parallelize(sc, pairs) -#' lookup(rdd, 1) # list(1, 3) -#'} -setGeneric("lookup", function(rdd, key) { standardGeneric("lookup") }) - -#' @rdname lookup -#' @aliases lookup,RDD-method -setMethod("lookup", - signature(rdd = "RDD", key = "ANY"), - function(rdd, key) { - partitionFunc <- function(part) { - filtered <- part[unlist(lapply(part, function(x) { identical(key, x[[1]]) }))] - lapply(filtered, function(x) { x[[2]] }) - } - valsRDD <- lapplyPartition(rdd, partitionFunc) - collect(valsRDD) - }) - #' Return the number of elements in the RDD. #' #' @param x The RDD to count @@ -503,32 +471,6 @@ setMethod("countByValue", collect(reduceByKey(ones, `+`, numPartitions(rdd))) }) -#' Count the number of elements for each key, and return the result to the -#' master as lists of (key, count) pairs. -#' -#' Same as countByKey in Spark. -#' -#' @param rdd The RDD to count keys. -#' @return list of (key, count) pairs, where count is number of each key in rdd. -#' @rdname countByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) -#' countByKey(rdd) # ("a", 2L), ("b", 1L) -#'} -setGeneric("countByKey", function(rdd) { standardGeneric("countByKey") }) - -#' @rdname countByKey -#' @aliases countByKey,RDD-method -setMethod("countByKey", - signature(rdd = "RDD"), - function(rdd) { - keys <- lapply(rdd, function(item) { item[[1]] }) - countByValue(keys) - }) - #' Apply a function to all elements #' #' This function creates a new RDD by applying the given transformation to all @@ -1156,114 +1098,6 @@ setMethod("saveAsTextFile", callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path)) }) -#' Return an RDD with the keys of each tuple. -#' -#' @param rdd The RDD from which the keys of each tuple is returned. -#' @rdname keys -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -#' collect(keys(rdd)) # list(1, 3) -#'} -setGeneric("keys", function(rdd) { standardGeneric("keys") }) - -#' @rdname keys -#' @aliases keys,RDD -setMethod("keys", - signature(rdd = "RDD"), - function(rdd) { - func <- function(x) { - x[[1]] - } - lapply(rdd, func) - }) - -#' Return an RDD with the values of each tuple. -#' -#' @param rdd The RDD from which the values of each tuple is returned. -#' @rdname values -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -#' collect(values(rdd)) # list(2, 4) -#'} -setGeneric("values", function(rdd) { standardGeneric("values") }) - -#' @rdname values -#' @aliases values,RDD -setMethod("values", - signature(rdd = "RDD"), - function(rdd) { - func <- function(x) { - x[[2]] - } - lapply(rdd, func) - }) - -#' Applies a function to all values of the elements, without modifying the keys. -#' -#' The same as `mapValues()' in Spark. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on the value of each element. -#' @return a new RDD created by the transformation. -#' @rdname mapValues -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' makePairs <- lapply(rdd, function(x) { list(x, x) }) -#' collect(mapValues(makePairs, function(x) { x * 2) }) -#' Output: list(list(1,2), list(2,4), list(3,6), ...) -#'} -setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) - -#' @rdname mapValues -#' @aliases mapValues,RDD,function-method -setMethod("mapValues", - signature(X = "RDD", FUN = "function"), - function(X, FUN) { - func <- function(x) { - list(x[[1]], FUN(x[[2]])) - } - lapply(X, func) - }) - -#' Pass each value in the key-value pair RDD through a flatMap function without -#' changing the keys; this also retains the original RDD's partitioning. -#' -#' The same as 'flatMapValues()' in Spark. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on the value of each element. -#' @return a new RDD created by the transformation. -#' @rdname flatMapValues -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) -#' collect(flatMapValues(rdd, function(x) { x })) -#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) -#'} -setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) - -#' @rdname flatMapValues -#' @aliases flatMapValues,RDD,function-method -setMethod("flatMapValues", - signature(X = "RDD", FUN = "function"), - function(X, FUN) { - flatMapFunc <- function(x) { - lapply(FUN(x[[2]]), function(v) { list(x[[1]], v) }) - } - flatMap(X, flatMapFunc) - }) - #' Sort an RDD by the given key function. #' #' @param rdd An RDD to be sorted. @@ -1294,335 +1128,6 @@ setMethod("sortBy", values(sortByKey(keyBy(rdd, func), ascending, numPartitions)) }) -############ Shuffle Functions ############ - -#' Partition an RDD by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' For each element of this RDD, the partitioner is used to compute a hash -#' function and the RDD is partitioned using this hash value. -#' -#' @param rdd The RDD to partition. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @param ... Other optional arguments to partitionBy. -#' -#' @param partitionFunc The partition function to use. Uses a default hashCode -#' function if not provided -#' @return An RDD partitioned using the specified partitioner. -#' @rdname partitionBy -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- partitionBy(rdd, 2L) -#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) -#'} -setGeneric("partitionBy", - function(rdd, numPartitions, ...) { - standardGeneric("partitionBy") - }) - -#' @rdname partitionBy -#' @aliases partitionBy,RDD,integer-method -setMethod("partitionBy", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions, partitionFunc = hashCode) { - - #if (missing(partitionFunc)) { - # partitionFunc <- hashCode - #} - - depsBinArr <- getDependencies(partitionFunc) - - serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), - connection = NULL, - ascii = TRUE) - - packageNamesArr <- serialize(.sparkREnv$.packages, - connection = NULL, - ascii = TRUE) - broadcastArr <- lapply(ls(.broadcastNames), function(name) { - get(name, .broadcastNames) }) - jrdd <- getJRDD(rdd) - - # We create a PairwiseRRDD that extends RDD[(Array[Byte], - # Array[Byte])], where the key is the hashed split, the value is - # the content (key-val pairs). - pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", - callJMethod(jrdd, "rdd"), - as.integer(numPartitions), - serializedHashFuncBytes, - rdd@env$serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv$libname), - broadcastArr, - callJMethod(jrdd, "classTag")) - - # Create a corresponding partitioner. - rPartitioner <- newJObject("org.apache.spark.HashPartitioner", - as.integer(numPartitions)) - - # Call partitionBy on the obtained PairwiseRDD. - javaPairRDD <- callJMethod(pairwiseRRDD, "asJavaPairRDD") - javaPairRDD <- callJMethod(javaPairRDD, "partitionBy", rPartitioner) - - # Call .values() on the result to get back the final result, the - # shuffled acutal content key-val pairs. - r <- callJMethod(javaPairRDD, "values") - - RDD(r, serialized = TRUE) - }) - -#' Group values by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and group values for each key in the RDD into a single sequence. -#' -#' @param rdd The RDD to group. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, list(V)) -#' @seealso reduceByKey -#' @rdname groupByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- groupByKey(rdd, 2L) -#' grouped <- collect(parts) -#' grouped[[1]] # Should be a list(1, list(2, 4)) -#'} -setGeneric("groupByKey", - function(rdd, numPartitions) { - standardGeneric("groupByKey") - }) - -#' @rdname groupByKey -#' @aliases groupByKey,RDD,integer-method -setMethod("groupByKey", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions) { - shuffled <- partitionBy(rdd, numPartitions) - groupVals <- function(part) { - vals <- new.env() - keys <- new.env() - pred <- function(item) exists(item$hash, keys) - appendList <- function(acc, x) { - addItemToAccumulator(acc, x) - acc - } - makeList <- function(x) { - acc <- initAccumulator() - addItemToAccumulator(acc, x) - acc - } - # Each item in the partition is list of (K, V) - lapply(part, - function(item) { - item$hash <- as.character(hashCode(item[[1]])) - updateOrCreatePair(item, keys, vals, pred, - appendList, makeList) - }) - # extract out data field - vals <- eapply(vals, - function(x) { - length(x$data) <- x$counter - x$data - }) - # Every key in the environment contains a list - # Convert that to list(K, Seq[V]) - convertEnvsToList(keys, vals) - } - lapplyPartition(shuffled, groupVals) - }) - -#' Merge values by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and merges the values for each key using an associative reduce function. -#' -#' @param rdd The RDD to reduce by key. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param combineFunc The associative reduce function to use. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, V') where V' is the merged -#' value -#' @rdname reduceByKey -#' @seealso groupByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- reduceByKey(rdd, "+", 2L) -#' reduced <- collect(parts) -#' reduced[[1]] # Should be a list(1, 6) -#'} -setGeneric("reduceByKey", - function(rdd, combineFunc, numPartitions) { - standardGeneric("reduceByKey") - }) - -#' @rdname reduceByKey -#' @aliases reduceByKey,RDD,integer-method -setMethod("reduceByKey", - signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), - function(rdd, combineFunc, numPartitions) { - reduceVals <- function(part) { - vals <- new.env() - keys <- new.env() - pred <- function(item) exists(item$hash, keys) - lapply(part, - function(item) { - item$hash <- as.character(hashCode(item[[1]])) - updateOrCreatePair(item, keys, vals, pred, combineFunc, identity) - }) - convertEnvsToList(keys, vals) - } - locallyReduced <- lapplyPartition(rdd, reduceVals) - shuffled <- partitionBy(locallyReduced, numPartitions) - lapplyPartition(shuffled, reduceVals) - }) - -#' Merge values by key locally -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and merges the values for each key using an associative reduce function, but return the -#' results immediately to the driver as an R list. -#' -#' @param rdd The RDD to reduce by key. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param combineFunc The associative reduce function to use. -#' @return A list of elements of type list(K, V') where V' is the merged value for each key -#' @rdname reduceByKeyLocally -#' @seealso reduceByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' reduced <- reduceByKeyLocally(rdd, "+") -#' reduced # list(list(1, 6), list(1.1, 3)) -#'} -setGeneric("reduceByKeyLocally", - function(rdd, combineFunc) { - standardGeneric("reduceByKeyLocally") - }) - -#' @rdname reduceByKeyLocally -#' @aliases reduceByKeyLocally,RDD,integer-method -setMethod("reduceByKeyLocally", - signature(rdd = "RDD", combineFunc = "ANY"), - function(rdd, combineFunc) { - reducePart <- function(part) { - vals <- new.env() - keys <- new.env() - pred <- function(item) exists(item$hash, keys) - lapply(part, - function(item) { - item$hash <- as.character(hashCode(item[[1]])) - updateOrCreatePair(item, keys, vals, pred, combineFunc, identity) - }) - list(list(keys, vals)) # return hash to avoid re-compute in merge - } - mergeParts <- function(accum, x) { - pred <- function(item) { - exists(item$hash, accum[[1]]) - } - lapply(ls(x[[1]]), - function(name) { - item <- list(x[[1]][[name]], x[[2]][[name]]) - item$hash <- name - updateOrCreatePair(item, accum[[1]], accum[[2]], pred, combineFunc, identity) - }) - accum - } - reduced <- mapPartitions(rdd, reducePart) - merged <- reduce(reduced, mergeParts) - convertEnvsToList(merged[[1]], merged[[2]]) - }) - -#' Combine values by key -#' -#' Generic function to combine the elements for each key using a custom set of -#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], -#' for a "combined type" C. Note that V and C can be different -- for example, one -#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). - -#' Users provide three functions: -#' \itemize{ -#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) -#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - -#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates -#' two lists). -#' } -#' -#' @param rdd The RDD to combine. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param createCombiner Create a combiner (C) given a value (V) -#' @param mergeValue Merge the given value (V) with an existing combiner (C) -#' @param mergeCombiners Merge two combiners and return a new combiner -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, C) where C is the combined type -#' -#' @rdname combineByKey -#' @seealso groupByKey, reduceByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) -#' combined <- collect(parts) -#' combined[[1]] # Should be a list(1, 6) -#'} -setGeneric("combineByKey", - function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { - standardGeneric("combineByKey") - }) - -#' @rdname combineByKey -#' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method -setMethod("combineByKey", - signature(rdd = "RDD", createCombiner = "ANY", mergeValue = "ANY", - mergeCombiners = "ANY", numPartitions = "integer"), - function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { - combineLocally <- function(part) { - combiners <- new.env() - keys <- new.env() - pred <- function(item) exists(item$hash, keys) - lapply(part, - function(item) { - item$hash <- as.character(item[[1]]) - updateOrCreatePair(item, keys, combiners, pred, mergeValue, createCombiner) - }) - convertEnvsToList(keys, combiners) - } - locallyCombined <- lapplyPartition(rdd, combineLocally) - shuffled <- partitionBy(locallyCombined, numPartitions) - mergeAfterShuffle <- function(part) { - combiners <- new.env() - keys <- new.env() - pred <- function(item) exists(item$hash, keys) - lapply(part, - function(item) { - item$hash <- as.character(item[[1]]) - updateOrCreatePair(item, keys, combiners, pred, mergeCombiners, identity) - }) - convertEnvsToList(keys, combiners) - } - lapplyPartition(shuffled, mergeAfterShuffle) - }) - ############ Binary Functions ############# #' Return the union RDD of two RDDs. @@ -1663,301 +1168,6 @@ setMethod("unionRDD", union.rdd }) -#' Join two RDDs -#' -#' This function joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return a new RDD containing all pairs of elements with matching keys in -#' two input RDDs. -#' @rdname join -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) -#'} -setGeneric("join", function(rdd1, rdd2, numPartitions) { standardGeneric("join") }) - -#' @rdname join -#' @aliases join,RDD,RDD-method -setMethod("join", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) - - doJoin <- function(v) { - joinTaggedList(v, list(FALSE, FALSE)) - } - - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) - }) - -#' Left outer join two RDDs -#' -#' This function left-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in rdd1, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) -#' if no elements in rdd2 have key k. -#' @rdname leftOuterJoin -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' leftOuterJoin(rdd1, rdd2, 2L) -#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) -#'} -setGeneric("leftOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("leftOuterJoin") }) - -#' @rdname leftOuterJoin -#' @aliases leftOuterJoin,RDD,RDD-method -setMethod("leftOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) - - doJoin <- function(v) { - joinTaggedList(v, list(FALSE, TRUE)) - } - - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) - }) - -#' Right outer join two RDDs -#' -#' This function right-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, w) in rdd2, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) -#' if no elements in rdd1 have key k. -#' @rdname rightOuterJoin -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rightOuterJoin(rdd1, rdd2, 2L) -#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) -#'} -setGeneric("rightOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("rightOuterJoin") }) - -#' @rdname rightOuterJoin -#' @aliases rightOuterJoin,RDD,RDD-method -setMethod("rightOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) - - doJoin <- function(v) { - joinTaggedList(v, list(TRUE, FALSE)) - } - - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) - }) - -#' Full outer join two RDDs -#' -#' This function full-outer-joins two RDDs where every element is of the form -#' list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD -#' will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and -#' (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements -#' in rdd1/rdd2 have key k. -#' @rdname fullOuterJoin -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) -#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), -#' # list(1, list(3, 1)), -#' # list(2, list(NULL, 4))) -#' # list(3, list(3, NULL)), -#'} -setGeneric("fullOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("fullOuterJoin") }) - -#' @rdname fullOuterJoin -#' @aliases fullOuterJoin,RDD,RDD-method - -setMethod("fullOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) - - doJoin <- function(v) { - joinTaggedList(v, list(TRUE, TRUE)) - } - - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) - }) - -#' For each key k in several RDDs, return a resulting RDD that -#' whose values are a list of values for the key in all RDDs. -#' -#' @param ... Several RDDs. -#' @param numPartitions Number of partitions to create. -#' @return a new RDD containing all pairs of elements with values in a list -#' in all RDDs. -#' @rdname cogroup -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' cogroup(rdd1, rdd2, numPartitions = 2L) -#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) -#'} -setGeneric("cogroup", - function(..., numPartitions) { standardGeneric("cogroup") }, - signature = "...") - -#' @rdname cogroup -#' @aliases cogroup,RDD-method -setMethod("cogroup", - "RDD", - function(..., numPartitions) { - rdds <- list(...) - rddsLen <- length(rdds) - for (i in 1:rddsLen) { - rdds[[i]] <- lapply(rdds[[i]], - function(x) { list(x[[1]], list(i, x[[2]])) }) - # TODO(hao): As issue [SparkR-142] mentions, the right value of i - # will not be captured into UDF if getJRDD is not invoked. - # It should be resolved together with that issue. - getJRDD(rdds[[i]]) # Capture the closure. - } - union.rdd <- Reduce(unionRDD, rdds) - group.func <- function(vlist) { - res <- list() - length(res) <- rddsLen - for (x in vlist) { - i <- x[[1]] - acc <- res[[i]] - # Create an accumulator. - if (is.null(acc)) { - acc <- SparkR:::initAccumulator() - } - SparkR:::addItemToAccumulator(acc, x[[2]]) - res[[i]] <- acc - } - lapply(res, function(acc) { - if (is.null(acc)) { - list() - } else { - acc$data - } - }) - } - cogroup.rdd <- mapValues(groupByKey(union.rdd, numPartitions), - group.func) - }) - -#' Sort a (k, v) pair RDD by k. -#' -#' @param rdd A (k, v) pair RDD to be sorted. -#' @param ascending A flag to indicate whether the sorting is ascending or descending. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where all (k, v) pair elements are sorted. -#' @rdname sortByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) -#' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) -#'} -setGeneric("sortByKey", function(rdd, - ascending = TRUE, - numPartitions = 1L) { - standardGeneric("sortByKey") - }) - -#' @rdname sortByKey -#' @aliases sortByKey,RDD,RDD-method -setMethod("sortByKey", - signature(rdd = "RDD"), - function(rdd, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { - rangeBounds <- list() - - if (numPartitions > 1) { - rddSize <- count(rdd) - # constant from Spark's RangePartitioner - maxSampleSize <- numPartitions * 20 - fraction <- min(maxSampleSize / max(rddSize, 1), 1.0) - - samples <- collect(keys(sampleRDD(rdd, FALSE, fraction, 1L))) - - # Note: the built-in R sort() function only works on atomic vectors - samples <- sort(unlist(samples, recursive = FALSE), decreasing = !ascending) - - if (length(samples) > 0) { - rangeBounds <- lapply(seq_len(numPartitions - 1), - function(i) { - j <- ceiling(length(samples) * i / numPartitions) - samples[j] - }) - } - } - - rangePartitionFunc <- function(key) { - partition <- 0 - - # TODO: Use binary search instead of linear search, similar with Spark - while (partition < length(rangeBounds) && key > rangeBounds[[partition + 1]]) { - partition <- partition + 1 - } - - if (ascending) { - partition - } else { - numPartitions - partition - 1 - } - } - - partitionFunc <- function(part) { - sortKeyValueList(part, decreasing = !ascending) - } - - newRDD <- partitionBy(rdd, numPartitions, rangePartitionFunc) - lapplyPartition(newRDD, partitionFunc) - }) - # TODO: Consider caching the name in the RDD's environment #' Return an RDD's name. #' diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R new file mode 100644 index 0000000000000..f7497c5f8138d --- /dev/null +++ b/pkg/R/pairRDD.R @@ -0,0 +1,799 @@ +# Pair RDD in R implemented in S4 OO system. + +############ Actions and Transformations ############ + +#' Look up elements of a key in an RDD +#' +#' @description +#' \code{lookup} returns a list of values in this RDD for key key. +#' +#' @param rdd The RDD to collect +#' @param key The key to look up for +#' @return a list of values in this RDD for key key +#' @rdname lookup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) +#' rdd <- parallelize(sc, pairs) +#' lookup(rdd, 1) # list(1, 3) +#'} +setGeneric("lookup", function(rdd, key) { standardGeneric("lookup") }) + +#' @rdname lookup +#' @aliases lookup,RDD-method +setMethod("lookup", + signature(rdd = "RDD", key = "ANY"), + function(rdd, key) { + partitionFunc <- function(part) { + filtered <- part[unlist(lapply(part, function(x) { identical(key, x[[1]]) }))] + lapply(filtered, function(x) { x[[2]] }) + } + valsRDD <- lapplyPartition(rdd, partitionFunc) + collect(valsRDD) + }) + +#' Count the number of elements for each key, and return the result to the +#' master as lists of (key, count) pairs. +#' +#' Same as countByKey in Spark. +#' +#' @param rdd The RDD to count keys. +#' @return list of (key, count) pairs, where count is number of each key in rdd. +#' @rdname countByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) +#' countByKey(rdd) # ("a", 2L), ("b", 1L) +#'} +setGeneric("countByKey", function(rdd) { standardGeneric("countByKey") }) + +#' @rdname countByKey +#' @aliases countByKey,RDD-method +setMethod("countByKey", + signature(rdd = "RDD"), + function(rdd) { + keys <- lapply(rdd, function(item) { item[[1]] }) + countByValue(keys) + }) + +#' Return an RDD with the keys of each tuple. +#' +#' @param rdd The RDD from which the keys of each tuple is returned. +#' @rdname keys +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(keys(rdd)) # list(1, 3) +#'} +setGeneric("keys", function(rdd) { standardGeneric("keys") }) + +#' @rdname keys +#' @aliases keys,RDD +setMethod("keys", + signature(rdd = "RDD"), + function(rdd) { + func <- function(x) { + x[[1]] + } + lapply(rdd, func) + }) + +#' Return an RDD with the values of each tuple. +#' +#' @param rdd The RDD from which the values of each tuple is returned. +#' @rdname values +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(values(rdd)) # list(2, 4) +#'} +setGeneric("values", function(rdd) { standardGeneric("values") }) + +#' @rdname values +#' @aliases values,RDD +setMethod("values", + signature(rdd = "RDD"), + function(rdd) { + func <- function(x) { + x[[2]] + } + lapply(rdd, func) + }) + +#' Applies a function to all values of the elements, without modifying the keys. +#' +#' The same as `mapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. +#' @rdname mapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' makePairs <- lapply(rdd, function(x) { list(x, x) }) +#' collect(mapValues(makePairs, function(x) { x * 2) }) +#' Output: list(list(1,2), list(2,4), list(3,6), ...) +#'} +setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) + +#' @rdname mapValues +#' @aliases mapValues,RDD,function-method +setMethod("mapValues", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + func <- function(x) { + list(x[[1]], FUN(x[[2]])) + } + lapply(X, func) + }) + +#' Pass each value in the key-value pair RDD through a flatMap function without +#' changing the keys; this also retains the original RDD's partitioning. +#' +#' The same as 'flatMapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. +#' @rdname flatMapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) +#' collect(flatMapValues(rdd, function(x) { x })) +#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) +#'} +setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) + +#' @rdname flatMapValues +#' @aliases flatMapValues,RDD,function-method +setMethod("flatMapValues", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + flatMapFunc <- function(x) { + lapply(FUN(x[[2]]), function(v) { list(x[[1]], v) }) + } + flatMap(X, flatMapFunc) + }) + +############ Shuffle Functions ############ + +#' Partition an RDD by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' For each element of this RDD, the partitioner is used to compute a hash +#' function and the RDD is partitioned using this hash value. +#' +#' @param rdd The RDD to partition. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param numPartitions Number of partitions to create. +#' @param ... Other optional arguments to partitionBy. +#' +#' @param partitionFunc The partition function to use. Uses a default hashCode +#' function if not provided +#' @return An RDD partitioned using the specified partitioner. +#' @rdname partitionBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- partitionBy(rdd, 2L) +#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) +#'} +setGeneric("partitionBy", + function(rdd, numPartitions, ...) { + standardGeneric("partitionBy") + }) + +#' @rdname partitionBy +#' @aliases partitionBy,RDD,integer-method +setMethod("partitionBy", + signature(rdd = "RDD", numPartitions = "integer"), + function(rdd, numPartitions, partitionFunc = hashCode) { + + #if (missing(partitionFunc)) { + # partitionFunc <- hashCode + #} + + depsBinArr <- getDependencies(partitionFunc) + + serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), + connection = NULL, + ascii = TRUE) + + packageNamesArr <- serialize(.sparkREnv$.packages, + connection = NULL, + ascii = TRUE) + broadcastArr <- lapply(ls(.broadcastNames), function(name) { + get(name, .broadcastNames) }) + jrdd <- getJRDD(rdd) + + # We create a PairwiseRRDD that extends RDD[(Array[Byte], + # Array[Byte])], where the key is the hashed split, the value is + # the content (key-val pairs). + pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", + callJMethod(jrdd, "rdd"), + as.integer(numPartitions), + serializedHashFuncBytes, + rdd@env$serialized, + depsBinArr, + packageNamesArr, + as.character(.sparkREnv$libname), + broadcastArr, + callJMethod(jrdd, "classTag")) + + # Create a corresponding partitioner. + rPartitioner <- newJObject("org.apache.spark.HashPartitioner", + as.integer(numPartitions)) + + # Call partitionBy on the obtained PairwiseRDD. + javaPairRDD <- callJMethod(pairwiseRRDD, "asJavaPairRDD") + javaPairRDD <- callJMethod(javaPairRDD, "partitionBy", rPartitioner) + + # Call .values() on the result to get back the final result, the + # shuffled acutal content key-val pairs. + r <- callJMethod(javaPairRDD, "values") + + RDD(r, serialized = TRUE) + }) + +#' Group values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and group values for each key in the RDD into a single sequence. +#' +#' @param rdd The RDD to group. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, list(V)) +#' @seealso reduceByKey +#' @rdname groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- groupByKey(rdd, 2L) +#' grouped <- collect(parts) +#' grouped[[1]] # Should be a list(1, list(2, 4)) +#'} +setGeneric("groupByKey", + function(rdd, numPartitions) { + standardGeneric("groupByKey") + }) + +#' @rdname groupByKey +#' @aliases groupByKey,RDD,integer-method +setMethod("groupByKey", + signature(rdd = "RDD", numPartitions = "integer"), + function(rdd, numPartitions) { + shuffled <- partitionBy(rdd, numPartitions) + groupVals <- function(part) { + vals <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + appendList <- function(acc, x) { + addItemToAccumulator(acc, x) + acc + } + makeList <- function(x) { + acc <- initAccumulator() + addItemToAccumulator(acc, x) + acc + } + # Each item in the partition is list of (K, V) + lapply(part, + function(item) { + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, + appendList, makeList) + }) + # extract out data field + vals <- eapply(vals, + function(x) { + length(x$data) <- x$counter + x$data + }) + # Every key in the environment contains a list + # Convert that to list(K, Seq[V]) + convertEnvsToList(keys, vals) + } + lapplyPartition(shuffled, groupVals) + }) + +#' Merge values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function. +#' +#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, V') where V' is the merged +#' value +#' @rdname reduceByKey +#' @seealso groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- reduceByKey(rdd, "+", 2L) +#' reduced <- collect(parts) +#' reduced[[1]] # Should be a list(1, 6) +#'} +setGeneric("reduceByKey", + function(rdd, combineFunc, numPartitions) { + standardGeneric("reduceByKey") + }) + +#' @rdname reduceByKey +#' @aliases reduceByKey,RDD,integer-method +setMethod("reduceByKey", + signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), + function(rdd, combineFunc, numPartitions) { + reduceVals <- function(part) { + vals <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, combineFunc, identity) + }) + convertEnvsToList(keys, vals) + } + locallyReduced <- lapplyPartition(rdd, reduceVals) + shuffled <- partitionBy(locallyReduced, numPartitions) + lapplyPartition(shuffled, reduceVals) + }) + +#' Merge values by key locally +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function, but return the +#' results immediately to the driver as an R list. +#' +#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @return A list of elements of type list(K, V') where V' is the merged value for each key +#' @rdname reduceByKeyLocally +#' @seealso reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' reduced <- reduceByKeyLocally(rdd, "+") +#' reduced # list(list(1, 6), list(1.1, 3)) +#'} +setGeneric("reduceByKeyLocally", + function(rdd, combineFunc) { + standardGeneric("reduceByKeyLocally") + }) + +#' @rdname reduceByKeyLocally +#' @aliases reduceByKeyLocally,RDD,integer-method +setMethod("reduceByKeyLocally", + signature(rdd = "RDD", combineFunc = "ANY"), + function(rdd, combineFunc) { + reducePart <- function(part) { + vals <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, combineFunc, identity) + }) + list(list(keys, vals)) # return hash to avoid re-compute in merge + } + mergeParts <- function(accum, x) { + pred <- function(item) { + exists(item$hash, accum[[1]]) + } + lapply(ls(x[[1]]), + function(name) { + item <- list(x[[1]][[name]], x[[2]][[name]]) + item$hash <- name + updateOrCreatePair(item, accum[[1]], accum[[2]], pred, combineFunc, identity) + }) + accum + } + reduced <- mapPartitions(rdd, reducePart) + merged <- reduce(reduced, mergeParts) + convertEnvsToList(merged[[1]], merged[[2]]) + }) + +#' Combine values by key +#' +#' Generic function to combine the elements for each key using a custom set of +#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], +#' for a "combined type" C. Note that V and C can be different -- for example, one +#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). + +#' Users provide three functions: +#' \itemize{ +#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) +#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - +#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates +#' two lists). +#' } +#' +#' @param rdd The RDD to combine. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param createCombiner Create a combiner (C) given a value (V) +#' @param mergeValue Merge the given value (V) with an existing combiner (C) +#' @param mergeCombiners Merge two combiners and return a new combiner +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, C) where C is the combined type +#' +#' @rdname combineByKey +#' @seealso groupByKey, reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) +#' combined <- collect(parts) +#' combined[[1]] # Should be a list(1, 6) +#'} +setGeneric("combineByKey", + function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + standardGeneric("combineByKey") + }) + +#' @rdname combineByKey +#' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method +setMethod("combineByKey", + signature(rdd = "RDD", createCombiner = "ANY", mergeValue = "ANY", + mergeCombiners = "ANY", numPartitions = "integer"), + function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + combineLocally <- function(part) { + combiners <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(item[[1]]) + updateOrCreatePair(item, keys, combiners, pred, mergeValue, createCombiner) + }) + convertEnvsToList(keys, combiners) + } + locallyCombined <- lapplyPartition(rdd, combineLocally) + shuffled <- partitionBy(locallyCombined, numPartitions) + mergeAfterShuffle <- function(part) { + combiners <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(item[[1]]) + updateOrCreatePair(item, keys, combiners, pred, mergeCombiners, identity) + }) + convertEnvsToList(keys, combiners) + } + lapplyPartition(shuffled, mergeAfterShuffle) + }) + +############ Binary Functions ############# + +#' Join two RDDs +#' +#' @description +#' \code{join} This function joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with matching keys in +#' two input RDDs. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) +#'} +setGeneric("join", function(rdd1, rdd2, numPartitions) { standardGeneric("join") }) + +#' @rdname join-methods +#' @aliases join,RDD,RDD-method +setMethod("join", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + joinTaggedList(v, list(FALSE, FALSE)) + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' Left outer join two RDDs +#' +#' @description +#' \code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in rdd1, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) +#' if no elements in rdd2 have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' leftOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +#'} +setGeneric("leftOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("leftOuterJoin") }) + +#' @rdname join-methods +#' @aliases leftOuterJoin,RDD,RDD-method +setMethod("leftOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + joinTaggedList(v, list(FALSE, TRUE)) + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' Right outer join two RDDs +#' +#' @description +#' \code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, w) in rdd2, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) +#' if no elements in rdd1 have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rightOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +#'} +setGeneric("rightOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("rightOuterJoin") }) + +#' @rdname join-methods +#' @aliases rightOuterJoin,RDD,RDD-method +setMethod("rightOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + joinTaggedList(v, list(TRUE, FALSE)) + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' Full outer join two RDDs +#' +#' @description +#' \code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD +#' will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and +#' (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements +#' in rdd1/rdd2 have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), +#' # list(1, list(3, 1)), +#' # list(2, list(NULL, 4))) +#' # list(3, list(3, NULL)), +#'} +setGeneric("fullOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("fullOuterJoin") }) + +#' @rdname join-methods +#' @aliases fullOuterJoin,RDD,RDD-method + +setMethod("fullOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + joinTaggedList(v, list(TRUE, TRUE)) + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' For each key k in several RDDs, return a resulting RDD that +#' whose values are a list of values for the key in all RDDs. +#' +#' @param ... Several RDDs. +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with values in a list +#' in all RDDs. +#' @rdname cogroup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' cogroup(rdd1, rdd2, numPartitions = 2L) +#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) +#'} +setGeneric("cogroup", + function(..., numPartitions) { standardGeneric("cogroup") }, + signature = "...") + +#' @rdname cogroup +#' @aliases cogroup,RDD-method +setMethod("cogroup", + "RDD", + function(..., numPartitions) { + rdds <- list(...) + rddsLen <- length(rdds) + for (i in 1:rddsLen) { + rdds[[i]] <- lapply(rdds[[i]], + function(x) { list(x[[1]], list(i, x[[2]])) }) + # TODO(hao): As issue [SparkR-142] mentions, the right value of i + # will not be captured into UDF if getJRDD is not invoked. + # It should be resolved together with that issue. + getJRDD(rdds[[i]]) # Capture the closure. + } + union.rdd <- Reduce(unionRDD, rdds) + group.func <- function(vlist) { + res <- list() + length(res) <- rddsLen + for (x in vlist) { + i <- x[[1]] + acc <- res[[i]] + # Create an accumulator. + if (is.null(acc)) { + acc <- SparkR:::initAccumulator() + } + SparkR:::addItemToAccumulator(acc, x[[2]]) + res[[i]] <- acc + } + lapply(res, function(acc) { + if (is.null(acc)) { + list() + } else { + acc$data + } + }) + } + cogroup.rdd <- mapValues(groupByKey(union.rdd, numPartitions), + group.func) + }) + +#' Sort a (k, v) pair RDD by k. +#' +#' @param rdd A (k, v) pair RDD to be sorted. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all (k, v) pair elements are sorted. +#' @rdname sortByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) +#' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) +#'} +setGeneric("sortByKey", function(rdd, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortByKey") + }) + +#' @rdname sortByKey +#' @aliases sortByKey,RDD,RDD-method +setMethod("sortByKey", + signature(rdd = "RDD"), + function(rdd, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { + rangeBounds <- list() + + if (numPartitions > 1) { + rddSize <- count(rdd) + # constant from Spark's RangePartitioner + maxSampleSize <- numPartitions * 20 + fraction <- min(maxSampleSize / max(rddSize, 1), 1.0) + + samples <- collect(keys(sampleRDD(rdd, FALSE, fraction, 1L))) + + # Note: the built-in R sort() function only works on atomic vectors + samples <- sort(unlist(samples, recursive = FALSE), decreasing = !ascending) + + if (length(samples) > 0) { + rangeBounds <- lapply(seq_len(numPartitions - 1), + function(i) { + j <- ceiling(length(samples) * i / numPartitions) + samples[j] + }) + } + } + + rangePartitionFunc <- function(key) { + partition <- 0 + + # TODO: Use binary search instead of linear search, similar with Spark + while (partition < length(rangeBounds) && key > rangeBounds[[partition + 1]]) { + partition <- partition + 1 + } + + if (ascending) { + partition + } else { + numPartitions - partition - 1 + } + } + + partitionFunc <- function(part) { + sortKeyValueList(part, decreasing = !ascending) + } + + newRDD <- partitionBy(rdd, numPartitions, rangePartitionFunc) + lapplyPartition(newRDD, partitionFunc) + }) + diff --git a/pkg/man/fullOuterJoin.Rd b/pkg/man/fullOuterJoin.Rd deleted file mode 100644 index eef2391e323fe..0000000000000 --- a/pkg/man/fullOuterJoin.Rd +++ /dev/null @@ -1,44 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{fullOuterJoin} -\alias{fullOuterJoin} -\alias{fullOuterJoin,RDD,RDD,integer-method} -\alias{fullOuterJoin,RDD,RDD-method} -\title{Full outer join two RDDs} -\usage{ -fullOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{fullOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD - will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and - (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements - in rdd1/rdd2 have key k. -} -\description{ -This function full-outer-joins two RDDs where every element is of the form -list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) -rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), - # list(1, list(3, 1)), - # list(3, list(3, NULL)), - # list(2, list(NULL, 4))) -} -} - diff --git a/pkg/man/join-methods.Rd b/pkg/man/join-methods.Rd new file mode 100644 index 0000000000000..11229a4e61ef9 --- /dev/null +++ b/pkg/man/join-methods.Rd @@ -0,0 +1,129 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/pairRDD.R +\docType{methods} +\name{join} +\alias{fullOuterJoin} +\alias{fullOuterJoin,RDD,RDD,integer-method} +\alias{fullOuterJoin,RDD,RDD-method} +\alias{join} +\alias{join,RDD,RDD,integer-method} +\alias{join,RDD,RDD-method} +\alias{leftOuterJoin} +\alias{leftOuterJoin,RDD,RDD,integer-method} +\alias{leftOuterJoin,RDD,RDD-method} +\alias{rightOuterJoin} +\alias{rightOuterJoin,RDD,RDD,integer-method} +\alias{rightOuterJoin,RDD,RDD-method} +\title{Join two RDDs} +\usage{ +join(rdd1, rdd2, numPartitions) + +\S4method{join}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) + +leftOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{leftOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) + +rightOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{rightOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) + +fullOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{fullOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) +} +\arguments{ +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} + +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} + +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} + +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +a new RDD containing all pairs of elements with matching keys in + two input RDDs. + +For each element (k, v) in rdd1, the resulting RDD will either contain + all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) + if no elements in rdd2 have key k. + +For each element (k, w) in rdd2, the resulting RDD will either contain + all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) + if no elements in rdd1 have key k. + +For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD + will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and + (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements + in rdd1/rdd2 have key k. +} +\description{ +\code{join} This function joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. + +\code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. + +\code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. + +\code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) +} +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +leftOuterJoin(rdd1, rdd2, 2L) +# list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +} +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) +rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rightOuterJoin(rdd1, rdd2, 2L) +# list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +} +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) +rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), + # list(1, list(3, 1)), + # list(2, list(NULL, 4))) + # list(3, list(3, NULL)), +} +} + diff --git a/pkg/man/join.Rd b/pkg/man/join.Rd deleted file mode 100644 index f406d90ec6a46..0000000000000 --- a/pkg/man/join.Rd +++ /dev/null @@ -1,38 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{join} -\alias{join} -\alias{join,RDD,RDD,integer-method} -\alias{join,RDD,RDD-method} -\title{Join two RDDs} -\usage{ -join(rdd1, rdd2, numPartitions) - -\S4method{join}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -a new RDD containing all pairs of elements with matching keys in - two input RDDs. -} -\description{ -This function joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) -} -} - diff --git a/pkg/man/leftOuterJoin.Rd b/pkg/man/leftOuterJoin.Rd deleted file mode 100644 index d04f4e6f8ea35..0000000000000 --- a/pkg/man/leftOuterJoin.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{leftOuterJoin} -\alias{leftOuterJoin} -\alias{leftOuterJoin,RDD,RDD,integer-method} -\alias{leftOuterJoin,RDD,RDD-method} -\title{Left outer join two RDDs} -\usage{ -leftOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{leftOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -For each element (k, v) in rdd1, the resulting RDD will either contain - all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) - if no elements in rdd2 have key k. -} -\description{ -This function left-outer-joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -leftOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) -} -} - diff --git a/pkg/man/rightOuterJoin.Rd b/pkg/man/rightOuterJoin.Rd deleted file mode 100644 index 9e72859b6df17..0000000000000 --- a/pkg/man/rightOuterJoin.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{rightOuterJoin} -\alias{rightOuterJoin} -\alias{rightOuterJoin,RDD,RDD,integer-method} -\alias{rightOuterJoin,RDD,RDD-method} -\title{Right outer join two RDDs} -\usage{ -rightOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{rightOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -For each element (k, w) in rdd2, the resulting RDD will either contain - all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) - if no elements in rdd1 have key k. -} -\description{ -This function right-outer-joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) -rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rightOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) -} -} - From d96866486ac32da277bff4a5f234be1c413b70ee Mon Sep 17 00:00:00 2001 From: lythesia Date: Thu, 12 Feb 2015 12:21:21 +0800 Subject: [PATCH 414/687] fix comment --- pkg/R/pairRDD.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index f7497c5f8138d..eef111d309263 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -1,4 +1,4 @@ -# Pair RDD in R implemented in S4 OO system. +# Operations supported on RDDs contains pairs (i.e key, value) ############ Actions and Transformations ############ From 5f29551bf8f1171482b9dabc17ecdf9569fa35bf Mon Sep 17 00:00:00 2001 From: hqzizania Date: Thu, 12 Feb 2015 16:26:20 +0800 Subject: [PATCH 415/687] modified: pkg/R/RDD.R modified: pkg/R/context.R --- pkg/R/RDD.R | 13 +++++-------- pkg/R/context.R | 2 +- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 3f6d96251365b..d914377b620cc 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -110,12 +110,10 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), computeFunc <- function(split, part) { rdd@func(split, part) } - serializedFuncArr <- serialize("computeFunc", connection = NULL, - ascii = TRUE) + serializedFuncArr <- serialize("computeFunc", connection = NULL) packageNamesArr <- serialize(.sparkREnv[[".packages"]], - connection = NULL, - ascii = TRUE) + connection = NULL) broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) @@ -1338,12 +1336,11 @@ setMethod("partitionBy", depsBinArr <- getDependencies(partitionFunc) serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), - connection = NULL, - ascii = TRUE) + connection = NULL) packageNamesArr <- serialize(.sparkREnv$.packages, - connection = NULL, - ascii = TRUE) + connection = NULL) + broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) jrdd <- getJRDD(rdd) diff --git a/pkg/R/context.R b/pkg/R/context.R index 095ad5528ee7f..e05c1cd71da40 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -179,7 +179,7 @@ includePackage <- function(sc, pkg) { #'} broadcast <- function(sc, object) { objName <- as.character(substitute(object)) - serializedObj <- serialize(object, connection = NULL, ascii = TRUE) + serializedObj <- serialize(object, connection = NULL) jBroadcast <- callJMethod(sc, "broadcast", serializedObj) id <- as.character(callJMethod(jBroadcast, "id")) From 94066bff5f1b238a6ed5b9906ef05b3a3d76bb12 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Fri, 13 Feb 2015 20:03:30 +0800 Subject: [PATCH 416/687] [SPARKR-153] phase 1: implement fold() and aggregate(). --- pkg/NAMESPACE | 2 ++ pkg/R/RDD.R | 65 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 22 +++++++++++++ pkg/man/aggregateRDD.Rd | 40 ++++++++++++++++++++++++ pkg/man/fold.Rd | 34 ++++++++++++++++++++ 5 files changed, 163 insertions(+) create mode 100644 pkg/man/aggregateRDD.Rd create mode 100644 pkg/man/fold.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index b629b01ab2140..1fa1336674750 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -2,6 +2,7 @@ exportClasses("RDD") exportClasses("Broadcast") exportMethods( + "aggregateRDD", "cache", "checkpoint", "cogroup", @@ -17,6 +18,7 @@ exportMethods( "filterRDD", "flatMap", "flatMapValues", + "fold", "foreach", "foreachPartition", "fullOuterJoin", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 3ffe017e15182..39f054b9ba67a 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1374,6 +1374,71 @@ setMethod("top", takeOrderedElem(rdd, num, FALSE) }) +#' Fold an RDD using a given associative function and a neutral "zero value". +#' +#' Aggregate the elements of each partition, and then the results for all the +#' partitions, using a given associative function and a neutral "zero value". +#' +#' @param rdd An RDD. +#' @param zeroValue A neutral "zero value". +#' @param op An associative function for the folding operation. +#' @return The folding result. +#' @rdname fold +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) +#' fold(rdd, 0, "+") # 15 +#'} +setGeneric("fold", function(rdd, zeroValue, op) { standardGeneric("fold") }) + +#' @rdname fold +#' @aliases fold,RDD,RDD-method +setMethod("fold", + signature(rdd = "RDD", zeroValue = "ANY", op = "ANY"), + function(rdd, zeroValue, op) { + aggregateRDD(rdd, zeroValue, op, op) + }) + +#' Aggregate an RDD using the given combine functions and a neutral "zero value". +#' +#' Aggregate the elements of each partition, and then the results for all the +#' partitions, using given combine functions and a neutral "zero value". +#' +#' @param rdd An RDD. +#' @param zeroValue A neutral "zero value". +#' @param seqOp A function to aggregate the RDD elements. It may return a different +#' result type from the type of the RDD elements. +#' @param combOp A function to aggregate results of seqOp. +#' @return The aggregation result. +#' @rdname aggregateRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4)) +#' zeroValue <- list(0, 0) +#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +#' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) +#'} +setGeneric("aggregateRDD", function(rdd, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) + +#' @rdname aggregateRDD +#' @aliases aggregateRDD,RDD,RDD-method +setMethod("aggregateRDD", + signature(rdd = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), + function(rdd, zeroValue, seqOp, combOp) { + partitionFunc <- function(part) { + Reduce(seqOp, part, zeroValue) + } + + partitionList <- collect(lapplyPartition(rdd, partitionFunc), + flatten = FALSE) + Reduce(combOp, partitionList, zeroValue) + }) + ############ Shuffle Functions ############ #' Partition an RDD by key diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index fa6c112ba7a51..dff91179c6495 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -302,6 +302,28 @@ test_that("top() on RDDs", { expect_equal(actual, as.list(sort(unlist(l), decreasing = TRUE))[1:3]) }) +test_that("fold() on RDDs", { + actual <- fold(rdd, 0, "+") + expect_equal(actual, Reduce("+", nums, 0)) + + rdd <- parallelize(sc, list()) + actual <- fold(rdd, 0, "+") + expect_equal(actual, 0) +}) + +test_that("aggregate() on RDDs", { + rdd <- parallelize(sc, list(1, 2, 3, 4)) + zeroValue <- list(0, 0) + seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } + combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } + actual <- aggregateRDD(rdd, zeroValue, seqOp, combOp) + expect_equal(actual, list(10, 4)) + + rdd <- parallelize(sc, list()) + actual <- aggregateRDD(rdd, zeroValue, seqOp, combOp) + expect_equal(actual, list(0, 0)) +}) + test_that("keys() on RDDs", { keys <- keys(intRdd) actual <- collect(keys) diff --git a/pkg/man/aggregateRDD.Rd b/pkg/man/aggregateRDD.Rd new file mode 100644 index 0000000000000..b64936aa8482f --- /dev/null +++ b/pkg/man/aggregateRDD.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{aggregateRDD} +\alias{aggregateRDD} +\alias{aggregateRDD,RDD,RDD-method} +\alias{aggregateRDD,RDD-method} +\title{Aggregate an RDD using the given combine functions and a neutral "zero value".} +\usage{ +aggregateRDD(rdd, zeroValue, seqOp, combOp) + +\S4method{aggregateRDD}{RDD}(rdd, zeroValue, seqOp, combOp) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{zeroValue}{A neutral "zero value".} + +\item{seqOp}{A function to aggregate the RDD elements. It may return a different +result type from the type of the RDD elements.} + +\item{combOp}{A function to aggregate results of seqOp.} +} +\value{ +The aggregation result. +} +\description{ +Aggregate the elements of each partition, and then the results for all the +partitions, using given combine functions and a neutral "zero value". +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1, 2, 3, 4)) +zeroValue <- list(0, 0) +seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) +} +} + diff --git a/pkg/man/fold.Rd b/pkg/man/fold.Rd new file mode 100644 index 0000000000000..e0d22d23e3b79 --- /dev/null +++ b/pkg/man/fold.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{fold} +\alias{fold} +\alias{fold,RDD,RDD-method} +\alias{fold,RDD-method} +\title{Fold an RDD using a given associative function and a neutral "zero value".} +\usage{ +fold(rdd, zeroValue, op) + +\S4method{fold}{RDD}(rdd, zeroValue, op) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{zeroValue}{A neutral "zero value".} + +\item{op}{An associative function for the folding operation.} +} +\value{ +The folding result. +} +\description{ +Aggregate the elements of each partition, and then the results for all the +partitions, using a given associative function and a neutral "zero value". +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) +fold(rdd, 0, "+") # 15 +} +} + From 9d335a9caab36b029c6f802454470fdd225d4d78 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 13 Feb 2015 19:00:19 -0500 Subject: [PATCH 417/687] Makes git to ignore Eclipse meta files. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 7d027d3bf143e..f1b641883a31a 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ work/ SparkR-pkg.Rproj *.o *.so +# Eclipse Meta Files +.project +.classpath From 10ffc6d79236721f51f54055b7f3254a07e870d4 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 13 Feb 2015 21:19:05 -0800 Subject: [PATCH 418/687] Set Spark version to 1.3 using staging dependency Also fix the maven build --- pkg/src/Makefile | 2 +- pkg/src/build.sbt | 3 ++- pkg/src/pom.xml | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkg/src/Makefile b/pkg/src/Makefile index 5e8a77cd4a79d..576ea257b9ff5 100644 --- a/pkg/src/Makefile +++ b/pkg/src/Makefile @@ -14,7 +14,7 @@ SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) SPARK_HADOOP_VERSION ?= 1.0.4 -SPARK_VERSION ?= 1.1.0 +SPARK_VERSION ?= 1.3.0 SPARK_YARN_VERSION ?= 2.4.0 ifdef USE_MAVEN diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index f359a91ef46b5..1ee53463b721a 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -29,7 +29,7 @@ libraryDependencies ++= Seq( val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" - val defaultSparkVersion = "1.3.0-SNAPSHOT" + val defaultSparkVersion = "1.3.0" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( @@ -53,6 +53,7 @@ libraryDependencies ++= Seq( } resolvers ++= Seq( + "Apache Staging" at "https://repository.apache.org/content/repositories/staging/", "Typesafe" at "http://repo.typesafe.com/typesafe/releases", "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", "Cloudera Repository" at "https://repository.cloudera.com/artifactory/cloudera-repos/", diff --git a/pkg/src/pom.xml b/pkg/src/pom.xml index cc3478e7dc300..ba7e7de7b67cc 100644 --- a/pkg/src/pom.xml +++ b/pkg/src/pom.xml @@ -18,6 +18,17 @@ false + + apache-staging-repo + Apache Staging Repository + https://repository.apache.org/content/repositories/staging + + true + + + false + + apache-repo Apache Repository @@ -108,6 +119,17 @@ + + org.apache.spark + spark-sql_2.10 + ${spark.version} + + + org.apache.hadoop + hadoop-client + + + org.slf4j slf4j-log4j12 From 141723eeed1cd032931e112a3d11c7f57c9c72c9 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Sun, 15 Feb 2015 10:25:11 +0800 Subject: [PATCH 419/687] fix comments. --- pkg/R/RDD.R | 2 ++ pkg/inst/tests/test_rdd.R | 2 +- pkg/man/aggregateRDD.Rd | 3 +++ pkg/man/fold.Rd | 3 +++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 39f054b9ba67a..b23e13db31b61 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1384,6 +1384,7 @@ setMethod("top", #' @param op An associative function for the folding operation. #' @return The folding result. #' @rdname fold +#' @seealso reduce #' @export #' @examples #'\dontrun{ @@ -1413,6 +1414,7 @@ setMethod("fold", #' @param combOp A function to aggregate results of seqOp. #' @return The aggregation result. #' @rdname aggregateRDD +#' @seealso reduce #' @export #' @examples #'\dontrun{ diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index dff91179c6495..89d7890fbf685 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -311,7 +311,7 @@ test_that("fold() on RDDs", { expect_equal(actual, 0) }) -test_that("aggregate() on RDDs", { +test_that("aggregateRDD() on RDDs", { rdd <- parallelize(sc, list(1, 2, 3, 4)) zeroValue <- list(0, 0) seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } diff --git a/pkg/man/aggregateRDD.Rd b/pkg/man/aggregateRDD.Rd index b64936aa8482f..16a0fbe4cb3b3 100644 --- a/pkg/man/aggregateRDD.Rd +++ b/pkg/man/aggregateRDD.Rd @@ -37,4 +37,7 @@ combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) } } +\seealso{ +reduce +} diff --git a/pkg/man/fold.Rd b/pkg/man/fold.Rd index e0d22d23e3b79..f2253d3f34fa9 100644 --- a/pkg/man/fold.Rd +++ b/pkg/man/fold.Rd @@ -31,4 +31,7 @@ rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) fold(rdd, 0, "+") # 15 } } +\seealso{ +reduce +} From 7fcb46a83d593ae49dc2a059f841675cedb9114c Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 16 Feb 2015 10:44:20 +0800 Subject: [PATCH 420/687] Remove partitionBy() in RDD. --- pkg/R/RDD.R | 155 ++++++++++++---------------------------------------- 1 file changed, 36 insertions(+), 119 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index bb5e759c2a261..c54abae2666a2 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1275,87 +1275,51 @@ setMethod("aggregateRDD", Reduce(combOp, partitionList, zeroValue) }) -############ Shuffle Functions ############ - -#' Partition an RDD by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' For each element of this RDD, the partitioner is used to compute a hash -#' function and the RDD is partitioned using this hash value. -#' -#' @param rdd The RDD to partition. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @param ... Other optional arguments to partitionBy. +# TODO: Consider caching the name in the RDD's environment +#' Return an RDD's name. #' -#' @param partitionFunc The partition function to use. Uses a default hashCode -#' function if not provided -#' @return An RDD partitioned using the specified partitioner. -#' @rdname partitionBy +#' @param rdd The RDD whose name is returned. +#' @rdname name #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- partitionBy(rdd, 2L) -#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) +#' rdd <- parallelize(sc, list(1,2,3)) +#' name(rdd) # NULL (if not set before) #'} -setGeneric("partitionBy", - function(rdd, numPartitions, ...) { - standardGeneric("partitionBy") - }) - -#' @rdname partitionBy -#' @aliases partitionBy,RDD,integer-method -setMethod("partitionBy", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions, partitionFunc = hashCode) { - - #if (missing(partitionFunc)) { - # partitionFunc <- hashCode - #} - - depsBinArr <- getDependencies(partitionFunc) +setGeneric("name", function(rdd) { standardGeneric("name") }) - serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), - connection = NULL, - ascii = TRUE) +#' @rdname name +#' @aliases name,RDD +setMethod("name", + signature(rdd = "RDD"), + function(rdd) { + callJMethod(getJRDD(rdd), "name") + }) - packageNamesArr <- serialize(.sparkREnv$.packages, - connection = NULL, - ascii = TRUE) - broadcastArr <- lapply(ls(.broadcastNames), function(name) { - get(name, .broadcastNames) }) - jrdd <- getJRDD(rdd) +#' Set an RDD's name. +#' +#' @param rdd The RDD whose name is to be set. +#' @param name The RDD name to be set. +#' @return a new RDD renamed. +#' @rdname setName +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1,2,3)) +#' setName(rdd, "myRDD") +#' name(rdd) # "myRDD" +#'} +setGeneric("setName", function(rdd, name) { standardGeneric("setName") }) - # We create a PairwiseRRDD that extends RDD[(Array[Byte], - # Array[Byte])], where the key is the hashed split, the value is - # the content (key-val pairs). - pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", - callJMethod(jrdd, "rdd"), - as.integer(numPartitions), - serializedHashFuncBytes, - rdd@env$serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv$libname), - broadcastArr, - callJMethod(jrdd, "classTag")) - - # Create a corresponding partitioner. - rPartitioner <- newJObject("org.apache.spark.HashPartitioner", - as.integer(numPartitions)) - - # Call partitionBy on the obtained PairwiseRDD. - javaPairRDD <- callJMethod(pairwiseRRDD, "asJavaPairRDD") - javaPairRDD <- callJMethod(javaPairRDD, "partitionBy", rPartitioner) - - # Call .values() on the result to get back the final result, the - # shuffled acutal content key-val pairs. - r <- callJMethod(javaPairRDD, "values") - - RDD(r, serialized = TRUE) +#' @rdname setName +#' @aliases setName,RDD +setMethod("setName", + signature(rdd = "RDD", name = "character"), + function(rdd, name) { + callJMethod(getJRDD(rdd), "setName", name) + rdd }) ############ Binary Functions ############# @@ -1397,50 +1361,3 @@ setMethod("unionRDD", } union.rdd }) - -# TODO: Consider caching the name in the RDD's environment -#' Return an RDD's name. -#' -#' @param rdd The RDD whose name is returned. -#' @rdname name -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' name(rdd) # NULL (if not set before) -#'} -setGeneric("name", function(rdd) { standardGeneric("name") }) - -#' @rdname name -#' @aliases name,RDD -setMethod("name", - signature(rdd = "RDD"), - function(rdd) { - callJMethod(getJRDD(rdd), "name") - }) - -#' Set an RDD's name. -#' -#' @param rdd The RDD whose name is to be set. -#' @param name The RDD name to be set. -#' @return a new RDD renamed. -#' @rdname setName -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' setName(rdd, "myRDD") -#' name(rdd) # "myRDD" -#'} -setGeneric("setName", function(rdd, name) { standardGeneric("setName") }) - -#' @rdname setName -#' @aliases setName,RDD -setMethod("setName", - signature(rdd = "RDD", name = "character"), - function(rdd, name) { - callJMethod(getJRDD(rdd), "setName", name) - rdd - }) From 67fbc60af65fd1b11f8d0d6e3a47fb185b7b94e4 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 15 Feb 2015 23:44:59 -0800 Subject: [PATCH 421/687] Add support for SparkR shell to use spark-submit This ensures that SparkConf options are read in both in batch and interactive modes --- pkg/R/sparkR.R | 21 ++++++-- pkg/R/sparkRClient.R | 27 +++++++++++ .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 13 ++++- sparkR | 2 +- sparkR-submit | 48 ++++++++++++++++--- 5 files changed, 96 insertions(+), 15 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 2767b8a233772..453d41c2ff74e 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -74,7 +74,7 @@ sparkR.stop <- function(env) { #'} sparkR.init <- function( - master = "local", + master = "", appName = "SparkR", sparkHome = Sys.getenv("SPARK_HOME"), sparkEnvir = list(), @@ -101,10 +101,21 @@ sparkR.init <- function( if (sparkRExistingPort != "") { sparkRBackendPort <- sparkRExistingPort } else { - launchBackend(classPath = cp, - mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args = as.character(sparkRBackendPort), - javaOpts = paste("-Xmx", sparkMem, sep = "")) + if (Sys.getenv("SPARKR_USE_SPARK_SUBMIT", "") == "") { + launchBackend(classPath = cp, + mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", + args = as.character(sparkRBackendPort), + javaOpts = paste("-Xmx", sparkMem, sep = "")) + } else { + # TODO: We should deprecate sparkJars and ask users to add it to the + # command line (using --jars) which is picked up by SparkSubmit + launchBackendSparkSubmit( + mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", + args = as.character(sparkRBackendPort), + appJar = .sparkREnv$assemblyJarPath, + sparkHome = sparkHome, + sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "")) + } Sys.sleep(2) # Wait for backend to come up } .sparkREnv$sparkRBackendPort <- sparkRBackendPort diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 5721f33c71c9e..fb536e56fe3f3 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -37,3 +37,30 @@ launchBackend <- function( cat("Launching java with command ", java_bin, " ", combinedArgs, "\n") invisible(system2(java_bin, combinedArgs, wait = F)) } + +launchBackendSparkSubmit <- function( + mainClass, + args, + appJar, + sparkHome, + sparkSubmitOpts) { + if (.Platform$OS.type == "unix") { + spark_submit_bin_name = "spark-submit" + } else { + spark_submit_bin_name = "spark-submit.cmd" + } + + if (sparkHome != "") { + spark_submit_bin <- file.path(sparkHome, "bin", spark_submit_bin_name) + } else { + spark_submit_bin <- spark_submit_bin_name + } + + # Since this function is only used while launching R shell using spark-submit, + # the format we need to construct is + # spark-submit --class + + combinedArgs <- paste("--class", mainClass, sparkSubmitOpts, appJar, args, sep = " ") + cat("Launching java with spark-submit command ", spark_submit_bin, " ", combinedArgs, "\n") + invisible(system2(spark_submit_bin, combinedArgs, wait = F)) +} diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index e39d2acf8e8a3..74d5837fb9384 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -357,10 +357,19 @@ object RRDD { sparkEnvirMap: JMap[Object, Object], sparkExecutorEnvMap: JMap[Object, Object]): JavaSparkContext = { - val sparkConf = new SparkConf().setMaster(master) - .setAppName(appName) + val sparkConf = new SparkConf().setAppName(appName) .setSparkHome(sparkHome) .setJars(jars) + + // Override `master` if we have a user-specified value + if (master != "") { + sparkConf.setMaster(master) + } else { + // If conf has no master set it to "local" to maintain + // backwards compatibility + sparkConf.setIfMissing("spark.master", "local") + } + for ((name, value) <- sparkEnvirMap) { sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) } diff --git a/sparkR b/sparkR index 01ed365fd4b15..916523d57f846 100755 --- a/sparkR +++ b/sparkR @@ -28,7 +28,7 @@ cat > /tmp/sparkR.profile << EOF Sys.setenv(NOAWT=1) .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) require(SparkR) - sc <- sparkR.init(Sys.getenv("MASTER", unset = "local")) + sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) assign("sc", sc, envir=.GlobalEnv) cat("\n Welcome to SparkR!") cat("\n Spark context is available as sc\n") diff --git a/sparkR-submit b/sparkR-submit index 814625f145985..2c4d9bf376bd3 100755 --- a/sparkR-submit +++ b/sparkR-submit @@ -33,6 +33,26 @@ fi export R_PROFILE_USER="/tmp/sparkR.profile" +# Build up arguments list manually to preserve quotes and backslashes. +SUBMIT_USAGE_FUNCTION=usage +gatherSparkSubmitOpts "$@" + +SPARKR_SUBMIT_ARGS="" +whitespace="[[:space:]]" +for i in "${SUBMISSION_OPTS[@]}" +do + if [[ $i =~ \" ]]; then i=$(echo $i | sed 's/\"/\\\"/g'); fi + if [[ $i =~ $whitespace ]]; then i=\"$i\"; fi + SPARKR_SUBMIT_ARGS="$SPARKR_SUBMIT_ARGS $i" +done +export SPARKR_SUBMIT_ARGS +export SPARKR_USE_SPARK_SUBMIT=1 + +NUM_APPLICATION_OPTS=${#APPLICATION_OPTS[@]} + +# If a R file is provided, directly run spark-submit. +if [[ $NUM_APPLICATION_OPTS -gt 0 && "${APPLICATION_OPTS[0]}" =~ \.R$ ]]; then + cat > /tmp/sparkR.profile << EOF .First <- function() { projecHome <- Sys.getenv("PROJECT_HOME") @@ -41,16 +61,30 @@ cat > /tmp/sparkR.profile << EOF } EOF -# Build up arguments list manually to preserve quotes and backslashes. -SUBMIT_USAGE_FUNCTION=usage -gatherSparkSubmitOpts "$@" - -# If a R file is provided, directly run spark-submit. -if [[ "${APPLICATION_OPTS[0]}" =~ \.R$ ]]; then primary="${APPLICATION_OPTS[0]}" shift # Set the main class to SparkRRunner and add the primary R file to --files to make sure its copied to the cluster + echo "Running $SPARK_HOME/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files $primary ${SUBMISSION_OPTS[@]} $SPARKR_JAR_FILE $primary" "${APPLICATION_OPTS[@]:1}" exec "$SPARK_HOME"/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files "$primary" "${SUBMISSION_OPTS[@]}" "$SPARKR_JAR_FILE" "$primary" "${APPLICATION_OPTS[@]:1}" else - echo "sparkR-submit can only be used to run R programs. Please use sparkR to launch a shell." + + # If we don't have an R file to run, initialize context and run R +cat > /tmp/sparkR.profile << EOF +.First <- function() { + projecHome <- Sys.getenv("PROJECT_HOME") + Sys.setenv(NOAWT=1) + .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) + require(SparkR) + sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) + assign("sc", sc, envir=.GlobalEnv) + cat("\n Welcome to SparkR!") + cat("\n Spark context is available as sc\n") +} +EOF + + # Add SPARKR_JAR, main class etc. to SPARKR_SUBMIT_ARGS + export SPARKR_SUBMIT_ARGS + + R + fi From 0cda231ef9bcd0866a0c8f20a966bb424c880954 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Mon, 16 Feb 2015 16:51:34 +0800 Subject: [PATCH 422/687] [SPARKR-153] phase 2: implement aggregateByKey() and foldByKey(). --- pkg/NAMESPACE | 2 + pkg/R/pairRDD.R | 82 +++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_shuffle.R | 71 ++++++++++++++++++++++++++++++ pkg/man/aggregateByKey.Rd | 50 +++++++++++++++++++++ pkg/man/foldByKey.Rd | 38 ++++++++++++++++ 5 files changed, 243 insertions(+) create mode 100644 pkg/man/aggregateByKey.Rd create mode 100644 pkg/man/foldByKey.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 1fa1336674750..007d5662def28 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -2,6 +2,7 @@ exportClasses("RDD") exportClasses("Broadcast") exportMethods( + "aggregateByKey", "aggregateRDD", "cache", "checkpoint", @@ -19,6 +20,7 @@ exportMethods( "flatMap", "flatMapValues", "fold", + "foldByKey", "foreach", "foreachPartition", "fullOuterJoin", diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index eef111d309263..6f2401adfcaa0 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -497,6 +497,88 @@ setMethod("combineByKey", lapplyPartition(shuffled, mergeAfterShuffle) }) +#' Aggregate a pair RDD by each key. +#' +#' Aggregate the values of each key in an RDD, using given combine functions +#' and a neutral "zero value". This function can return a different result type, +#' U, than the type of the values in this RDD, V. Thus, we need one operation +#' for merging a V into a U and one operation for merging two U's, The former +#' operation is used for merging values within a partition, and the latter is +#' used for merging values between partitions. To avoid memory allocation, both +#' of these functions are allowed to modify and return their first argument +#' instead of creating a new U. +#' +#' @param rdd An RDD. +#' @param zeroValue A neutral "zero value". +#' @param seqOp A function to aggregate the values of each key. It may return +#' a different result type from the type of the values. +#' @param combOp A function to aggregate results of seqOp. +#' @return An RDD containing the aggregation result. +#' @rdname aggregateByKey +#' @seealso foldByKey, combineByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +#' zeroValue <- list(0, 0) +#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +#' aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) +#' # list(list(1, list(3, 2)), list(2, list(7, 2))) +#'} +setGeneric("aggregateByKey", + function(rdd, zeroValue, seqOp, combOp, numPartitions) { + standardGeneric("aggregateByKey") + }) + +#' @rdname aggregateByKey +#' @aliases aggregateByKey,RDD,ANY,ANY,ANY,integer-method +setMethod("aggregateByKey", + signature(rdd = "RDD", zeroValue = "ANY", seqOp = "ANY", + combOp = "ANY", numPartitions = "integer"), + function(rdd, zeroValue, seqOp, combOp, numPartitions) { + createCombiner <- function(v) { + do.call(seqOp, list(zeroValue, v)) + } + + combineByKey(rdd, createCombiner, seqOp, combOp, numPartitions) + }) + +#' Fold a pair RDD by each key. +#' +#' Aggregate the values of each key in an RDD, using an associative function "func" +#' and a neutral "zero value" which may be added to the result an arbitrary +#' number of times, and must not change the result (e.g., 0 for addition, or +#' 1 for multiplication.). +#' +#' @param rdd An RDD. +#' @param zeroValue A neutral "zero value". +#' @param func An associative function for folding values of each key. +#' @return An RDD containing the aggregation result. +#' @rdname foldByKey +#' @seealso aggregateByKey, combineByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +#' foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) +#'} +setGeneric("foldByKey", + function(rdd, zeroValue, func, numPartitions) { + standardGeneric("foldByKey") + }) + +#' @rdname foldByKey +#' @aliases foldByKey,RDD,ANY,ANY,integer-method +setMethod("foldByKey", + signature(rdd = "RDD", zeroValue = "ANY", + func = "ANY", numPartitions = "integer"), + function(rdd, zeroValue, func, numPartitions) { + aggregateByKey(rdd, zeroValue, func, func, numPartitions) + }) + ############ Binary Functions ############# #' Join two RDDs diff --git a/pkg/inst/tests/test_shuffle.R b/pkg/inst/tests/test_shuffle.R index 3683287fd0423..8df9b439a08cd 100644 --- a/pkg/inst/tests/test_shuffle.R +++ b/pkg/inst/tests/test_shuffle.R @@ -70,6 +70,77 @@ test_that("combineByKey for doubles", { expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) +test_that("aggregateByKey", { + # test aggregateByKey for int keys + rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) + + zeroValue <- list(0, 0) + seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } + combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } + aggregatedRDD <- aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) + + actual <- collect(aggregatedRDD) + + expected <- list(list(1, list(3, 2)), list(2, list(7, 2))) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + # test aggregateByKey for string keys + rdd <- parallelize(sc, list(list("a", 1), list("a", 2), list("b", 3), list("b", 4))) + + zeroValue <- list(0, 0) + seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } + combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } + aggregatedRDD <- aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) + + actual <- collect(aggregatedRDD) + + expected <- list(list("a", list(3, 2)), list("b", list(7, 2))) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) +}) + +test_that("foldByKey", { + # test foldByKey for int keys + folded <- foldByKey(intRdd, 0, "+", 2L) + + actual <- collect(folded) + + expected <- list(list(2L, 101), list(1L, 199)) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + # test foldByKey for double keys + folded <- foldByKey(doubleRdd, 0, "+", 2L) + + actual <- collect(folded) + + expected <- list(list(1.5, 199), list(2.5, 101)) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + # test foldByKey for string keys + stringKeyPairs <- list(list("a", -1), list("b", 100), list("b", 1), list("a", 200)) + + stringKeyRDD <- parallelize(sc, stringKeyPairs) + folded <- foldByKey(stringKeyRDD, 0, "+", 2L) + + actual <- collect(folded) + + expected <- list(list("b", 101), list("a", 199)) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + # test foldByKey for empty pair RDD + rdd <- parallelize(sc, list()) + folded <- foldByKey(rdd, 0, "+", 2L) + actual <- collect(folded) + expected <- list() + expect_equal(actual, expected) + + # test foldByKey for RDD with only 1 pair + rdd <- parallelize(sc, list(list(1, 1))) + folded <- foldByKey(rdd, 0, "+", 2L) + actual <- collect(folded) + expected <- list(list(1, 1)) + expect_equal(actual, expected) +}) + test_that("partitionBy() partitions data correctly", { # Partition by magnitude partitionByMagnitude <- function(key) { if (key >= 3) 1 else 0 } diff --git a/pkg/man/aggregateByKey.Rd b/pkg/man/aggregateByKey.Rd new file mode 100644 index 0000000000000..7bcbd5cc69d12 --- /dev/null +++ b/pkg/man/aggregateByKey.Rd @@ -0,0 +1,50 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{aggregateByKey} +\alias{aggregateByKey} +\alias{aggregateByKey,RDD,ANY,ANY,ANY,integer-method} +\title{Aggregate a pair RDD by each key.} +\usage{ +aggregateByKey(rdd, zeroValue, seqOp, combOp, numPartitions) + +\S4method{aggregateByKey}{RDD,ANY,ANY,ANY,integer}(rdd, zeroValue, seqOp, + combOp, numPartitions) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{zeroValue}{A neutral "zero value".} + +\item{seqOp}{A function to aggregate the values of each key. It may return +a different result type from the type of the values.} + +\item{combOp}{A function to aggregate results of seqOp.} +} +\value{ +An RDD containing the aggregation result. +} +\description{ +Aggregate the values of each key in an RDD, using given combine functions +and a neutral "zero value". This function can return a different result type, +U, than the type of the values in this RDD, V. Thus, we need one operation +for merging a V into a U and one operation for merging two U's, The former +operation is used for merging values within a partition, and the latter is +used for merging values between partitions. To avoid memory allocation, both +of these functions are allowed to modify and return their first argument +instead of creating a new U. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +zeroValue <- list(0, 0) +seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) + # list(list(1, list(3, 2)), list(2, list(7, 2))) +} +} +\seealso{ +foldByKey, combineByKey +} + diff --git a/pkg/man/foldByKey.Rd b/pkg/man/foldByKey.Rd new file mode 100644 index 0000000000000..a2822c51a8ff4 --- /dev/null +++ b/pkg/man/foldByKey.Rd @@ -0,0 +1,38 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{foldByKey} +\alias{foldByKey} +\alias{foldByKey,RDD,ANY,ANY,integer-method} +\title{Fold a pair RDD by each key.} +\usage{ +foldByKey(rdd, zeroValue, func, numPartitions) + +\S4method{foldByKey}{RDD,ANY,ANY,integer}(rdd, zeroValue, func, numPartitions) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{zeroValue}{A neutral "zero value".} + +\item{func}{An associative function for folding values of each key.} +} +\value{ +An RDD containing the aggregation result. +} +\description{ +Aggregate the values of each key in an RDD, using an associative function "func" +and a neutral "zero value" which may be added to the result an arbitrary +number of times, and must not change the result (e.g., 0 for addition, or +1 for multiplication.). +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) +} +} +\seealso{ +aggregateByKey, combineByKey +} + From b6fa88e41a564caaae5ec5d98797547f57e62419 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 16 Feb 2015 10:37:16 -0600 Subject: [PATCH 423/687] Updating to current master commit 22710309fcbecf3cdc1ca64370bbe6fd062f46a8 Merge: 52f94c4 7fcb46a Author: Shivaram Venkataraman Date: Sun Feb 15 19:11:18 2015 -0800 Merge pull request #167 from sun-rui/removePartionByInRDD Remove partitionBy() in RDD. commit 7fcb46a83d593ae49dc2a059f841675cedb9114c Author: Sun Rui Date: Mon Feb 16 10:44:20 2015 +0800 Remove partitionBy() in RDD. commit 52f94c4a2c3a14b4fc489d752aa85139d5b273e6 Merge: 5836650 59e2d54 Author: Shivaram Venkataraman Date: Sun Feb 15 10:59:36 2015 -0800 Merge pull request #160 from lythesia/master [SPARKR-137] Move pair RDD functions into a new file commit 59e2d54291a559907ecd62c90a842ea2600f2431 Merge: d968664 5836650 Author: lythesia Date: Sun Feb 15 11:54:23 2015 +0800 merge with upstream commit 5836650ab06d2bf42cc528969112ca9dce5584bb Merge: c91ede2 141723e Author: Zongheng Yang Date: Sat Feb 14 22:45:02 2015 -0500 Merge pull request #163 from sun-rui/SPARKR-153_1 [SPARKR-153] phase 1: implement fold() and aggregate(). commit 141723eeed1cd032931e112a3d11c7f57c9c72c9 Author: Sun Rui Date: Sun Feb 15 10:25:11 2015 +0800 fix comments. commit c91ede20017a88025e0bea502d07ecec32808400 Merge: 7972858 9d335a9 Author: Shivaram Venkataraman Date: Fri Feb 13 16:14:32 2015 -0800 Merge pull request #164 from hlin09/hlin09 Makes git to ignore Eclipse meta files. commit 9d335a9caab36b029c6f802454470fdd225d4d78 Author: hlin09 Date: Fri Feb 13 19:00:19 2015 -0500 Makes git to ignore Eclipse meta files. commit 94066bff5f1b238a6ed5b9906ef05b3a3d76bb12 Author: Sun Rui Date: Fri Feb 13 20:03:30 2015 +0800 [SPARKR-153] phase 1: implement fold() and aggregate(). commit d96866486ac32da277bff4a5f234be1c413b70ee Author: lythesia Date: Thu Feb 12 12:21:21 2015 +0800 fix comment commit 79728588a503a5700b3e93b36fb0d818c7445f70 Merge: bd6705b f4573c1 Author: Shivaram Venkataraman Date: Wed Feb 11 09:05:22 2015 -0800 Merge pull request #159 from sun-rui/SPARKR-150_2 [SPARKR-150] phase 2: implement takeOrdered() and top(). commit 769087804897dcafeaf16075ddbcb33888b3eaa3 Author: lythesia Date: Wed Feb 11 13:53:14 2015 +0800 separate out pair RDD functions commit f4573c17ee0a895a99a12b289e86925baf99836f Author: Sun Rui Date: Wed Feb 11 11:29:28 2015 +0800 Use reduce() instead of sortBy().take() to get the ordered elements. commit 63e62ed5c5c94370267cf87eab4c874cbf75eb12 Author: Sun Rui Date: Tue Feb 10 19:09:17 2015 +0800 [SPARKR-150] phase 2: implement takeOrdered() and top(). commit bd6705be897fb1dcf6b4a114a44c6677ce1636b4 Merge: 0c6e071 c7964c9 Author: Zongheng Yang Date: Mon Feb 9 19:21:31 2015 -0800 Merge pull request #154 from sun-rui/SPARKR-150 [SPARKR-150] phase 1: implement sortBy() and sortByKey(). commit c7964c99c1fec20bdd6ede79e57bb30aec3af3ba Merge: 7feac38 0c6e071 Author: Sun Rui Date: Tue Feb 10 09:41:00 2015 +0800 Merge with upstream master. commit 7feac3899e1db7d471bda19aa44c068d5cc86cb4 Author: Sun Rui Date: Mon Feb 9 18:40:28 2015 +0800 Use default arguments for sortBy() and sortKeyBy(). commit de2bfb3f05a6a33694b1d740ee1227d8d1dd5418 Author: Sun Rui Date: Mon Feb 9 15:42:14 2015 +0800 Fix minor comments and add more test cases. commit 0c6e07133ca1efd80921f54e7ae57be21068418f Merge: 343b6ab f5038c0 Author: Zongheng Yang Date: Sun Feb 8 22:59:49 2015 -0800 Merge pull request #157 from lythesia/master [SPARKR-161] Support reduceByKeyLocally() commit f5038c062988b1d7fe6b6c6275b9f767dbc94689 Author: lythesia Date: Sun Feb 8 11:49:18 2015 +0800 pull out anonymous functions in groupByKey commit ba6f04443e9685d3b025a9f6511236740100a7fd Author: lythesia Date: Sat Feb 7 15:37:07 2015 +0800 fixes for reduceByKeyLocally commit 343b6ab95459a0b36c4cef1fe5d83734471316d0 Author: Oscar Olmedo Date: Fri Feb 6 18:57:37 2015 -0800 Export sparkR.stop Closes #156 from oscaroboto/master commit 25639cf25182a2f93e0ff7c3a76ca2844da0d29b Author: Shivaram Venkataraman Date: Fri Feb 6 11:55:36 2015 -0800 Replace tabs with spaces commit bb259209ccf0bf685d54d63f048a9c6ef65c8995 Merge: 08ff30b 345f1b8 Author: Shivaram Venkataraman Date: Fri Feb 6 11:53:17 2015 -0800 Merge branch 'dputler-master' commit b082a35e5d9aac2a0ffc033b871a0b7588be291b Author: lythesia Date: Fri Feb 6 16:36:34 2015 +0800 add reduceByKeyLocally commit 345f1b8230943583163e88f3da758f187dfff47a Author: dputler Date: Wed Feb 4 22:17:23 2015 -0800 [SPARKR-195] Implemented project style guidelines for if-else statements commit 804355977ba387a036b9c5355156cf547e20a738 Author: Sun Rui Date: Thu Feb 5 12:12:47 2015 +0800 Add a TODO to use binary search in the range partitioner. commit 91b2fd6deaf1d49cdc6aeec8d1c5fb4d686c0319 Author: Sun Rui Date: Thu Feb 5 11:09:29 2015 +0800 Add more test cases. commit 0c53d6c4952ba6c87b2fc0837a17339062351df6 Author: dputler Date: Wed Feb 4 09:00:49 2015 -0800 Data frames now coerced to lists, and messages issued for a data frame or matrix on how they are parallelized commit d9da4519fa9efa5db769a43cb75d296a94d44a74 Author: Sun Rui Date: Wed Feb 4 21:46:49 2015 +0800 [SPARKR-150] phase 1: implement sortBy() and sortByKey(). commit 08ff30b14f86974ac085bd0e9ab95e536839bfc8 Merge: 554bda0 9767e8e Author: Shivaram Venkataraman Date: Tue Feb 3 22:48:57 2015 -0800 Merge pull request #153 from hqzizania/master [SPARKR-160] Support collectAsMap() commit 9767e8ec07bb45cab90818c050fb9f9ce2b7f565 Author: hqzizania Date: Wed Feb 4 14:21:50 2015 +0800 modified: pkg/man/collect-methods.Rd commit 5d69f0ae76b83e957d5ce0221110ce3a1640ede9 Author: hqzizania Date: Wed Feb 4 14:01:00 2015 +0800 modified: pkg/R/RDD.R commit 491409142ed7dcb7ad475b513b786f2e92305911 Author: hqzizania Date: Wed Feb 4 13:46:15 2015 +0800 modified: pkg/inst/tests/test_rdd.R commit a95823edc2b384288a0fccaa033bfb103ce8a823 Author: hqzizania Date: Wed Feb 4 09:35:43 2015 +0800 modified: pkg/R/RDD.R commit 554bda0656de356d5c88eb54322b2f98dc0d31d6 Merge: c662f29 f34bb88 Author: Zongheng Yang Date: Mon Feb 2 19:29:01 2015 -0800 Merge pull request #147 from shivaram/sparkr-ec2-fixes Bunch of fixes for longer running jobs commit f34bb88bf4ba4371eeb15d0a92658e2d947ef32f Author: Shivaram Venkataraman Date: Mon Feb 2 10:08:43 2015 -0800 Remove profiling information from this PR commit 60da1df9b3175c49322247bcf53999db1f922d91 Author: Shivaram Venkataraman Date: Sun Feb 1 06:38:58 2015 +0000 Initialize timing variables commit 179aa75afb2e5993cea5a3c86d363eed31d5ae8e Author: Shivaram Venkataraman Date: Sun Feb 1 06:28:27 2015 +0000 Bunch of fixes for longer running jobs 1. Increase the timeout for socket connection to wait for long jobs 2. Add some profiling information in worker.R 3. Put temp file writes before stdin writes in RRDD.scala --- .gitignore | 3 + README.md | 5 + pkg/NAMESPACE | 9 + pkg/R/RDD.R | 841 ++++-------------- pkg/R/context.R | 15 +- pkg/R/pairRDD.R | 799 +++++++++++++++++ pkg/R/sparkR.R | 47 +- pkg/R/sparkRClient.R | 8 +- pkg/R/utils.R | 33 +- pkg/inst/tests/test_rdd.R | 137 +++ pkg/man/aggregateRDD.Rd | 43 + pkg/man/collect-methods.Rd | 17 +- pkg/man/fold.Rd | 37 + pkg/man/fullOuterJoin.Rd | 44 - pkg/man/join-methods.Rd | 129 +++ pkg/man/join.Rd | 38 - pkg/man/leftOuterJoin.Rd | 39 - pkg/man/reduceByKeyLocally.Rd | 40 + pkg/man/rightOuterJoin.Rd | 39 - pkg/man/sortBy.Rd | 36 + pkg/man/sortByKey.Rd | 34 + pkg/man/takeOrdered.Rd | 31 + pkg/man/top.Rd | 31 + .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 123 +-- 24 files changed, 1670 insertions(+), 908 deletions(-) create mode 100644 pkg/R/pairRDD.R create mode 100644 pkg/man/aggregateRDD.Rd create mode 100644 pkg/man/fold.Rd delete mode 100644 pkg/man/fullOuterJoin.Rd create mode 100644 pkg/man/join-methods.Rd delete mode 100644 pkg/man/join.Rd delete mode 100644 pkg/man/leftOuterJoin.Rd create mode 100644 pkg/man/reduceByKeyLocally.Rd delete mode 100644 pkg/man/rightOuterJoin.Rd create mode 100644 pkg/man/sortBy.Rd create mode 100644 pkg/man/sortByKey.Rd create mode 100644 pkg/man/takeOrdered.Rd create mode 100644 pkg/man/top.Rd diff --git a/.gitignore b/.gitignore index e8fb97b946198..59176bdff6237 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,6 @@ SparkR-pkg.Rproj *.o *.so SparkR.Rcheck +# Eclipse Meta Files +.project +.classpath diff --git a/README.md b/README.md index e928359819e97..795b0a1477305 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,12 @@ pass the variable `spark.executor.memory` to the SparkContext constructor. sc <- sparkR.init(master="spark://:7077", sparkEnvir=list(spark.executor.memory="1g")) +Finally, to stop the cluster run + sparkR.stop() + +sparkR.stop() can be invoked to terminate a SparkContext created previously via sparkR.init(). Then you can call sparR.init() again to create a new SparkContext that may have different configurations. + ## Examples, Unit tests SparkR comes with several sample programs in the `examples` directory. diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index e4938cf3d3065..de0d3a25ce686 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -2,10 +2,12 @@ exportClasses("RDD") exportClasses("Broadcast") exportMethods( + "aggregateRDD", "cache", "checkpoint", "cogroup", "collect", + "collectAsMap", "collectPartition", "combineByKey", "count", @@ -16,6 +18,7 @@ exportMethods( "filterRDD", "flatMap", "flatMapValues", + "fold", "foreach", "foreachPartition", "fullOuterJoin", @@ -40,12 +43,17 @@ exportMethods( "persist", "reduce", "reduceByKey", + "reduceByKeyLocally", "rightOuterJoin", "sampleRDD", "saveAsTextFile", "saveAsObjectFile", + "sortBy", + "sortByKey", "take", + "takeOrdered", "takeSample", + "top", "unionRDD", "unpersist", "value", @@ -64,6 +72,7 @@ export( "setCheckpointDir" ) export("sparkR.init") +export("sparkR.stop") export("print.jobj") useDynLib(SparkR, stringHashCode) importFrom(methods, setGeneric, setMethod, setOldClass) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 66e616f252533..c54abae2666a2 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -358,6 +358,7 @@ setMethod("collect", convertJListToRList(collected, flatten) }) + #' @rdname collect-methods #' @export #' @description @@ -382,37 +383,28 @@ setMethod("collectPartition", convertJListToRList(jList, flatten = TRUE) }) - -#' Look up elements of a key in an RDD -#' -#' @description -#' \code{lookup} returns a list of values in this RDD for key key. -#' -#' @param rdd The RDD to collect -#' @param key The key to look up for -#' @return a list of values in this RDD for key key -#' @rdname lookup +#' @rdname collect-methods #' @export +#' @description +#' \code{collectAsMap} returns a named list as a map that contains all of the elements +#' in a key-value pair RDD. #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) -#' rdd <- parallelize(sc, pairs) -#' lookup(rdd, 1) # list(1, 3) +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) +#' collectAsMap(rdd) # list(`1` = 2, `3` = 4) #'} -setGeneric("lookup", function(rdd, key) { standardGeneric("lookup") }) +setGeneric("collectAsMap", function(rdd) { standardGeneric("collectAsMap") }) -#' @rdname lookup -#' @aliases lookup,RDD-method -setMethod("lookup", - signature(rdd = "RDD", key = "ANY"), - function(rdd, key) { - partitionFunc <- function(part) { - filtered <- part[unlist(lapply(part, function(x) { identical(key, x[[1]]) }))] - lapply(filtered, function(x) { x[[2]] }) - } - valsRDD <- lapplyPartition(rdd, partitionFunc) - collect(valsRDD) +#' @rdname collect-methods +#' @aliases collectAsMap,RDD-method +setMethod("collectAsMap", + signature(rdd = "RDD"), + function(rdd) { + pairList <- collect(rdd) + map <- new.env() + lapply(pairList, function(x) { assign(as.character(x[[1]]), x[[2]], envir = map) }) + as.list(map) }) #' Return the number of elements in the RDD. @@ -479,32 +471,6 @@ setMethod("countByValue", collect(reduceByKey(ones, `+`, numPartitions(rdd))) }) -#' Count the number of elements for each key, and return the result to the -#' master as lists of (key, count) pairs. -#' -#' Same as countByKey in Spark. -#' -#' @param rdd The RDD to count keys. -#' @return list of (key, count) pairs, where count is number of each key in rdd. -#' @rdname countByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) -#' countByKey(rdd) # ("a", 2L), ("b", 1L) -#'} -setGeneric("countByKey", function(rdd) { standardGeneric("countByKey") }) - -#' @rdname countByKey -#' @aliases countByKey,RDD-method -setMethod("countByKey", - signature(rdd = "RDD"), - function(rdd) { - keys <- lapply(rdd, function(item) { item[[1]] }) - countByValue(keys) - }) - #' Apply a function to all elements #' #' This function creates a new RDD by applying the given transformation to all @@ -1132,403 +1098,228 @@ setMethod("saveAsTextFile", callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path)) }) -#' Return an RDD with the keys of each tuple. +#' Sort an RDD by the given key function. #' -#' @param rdd The RDD from which the keys of each tuple is returned. -#' @rdname keys +#' @param rdd An RDD to be sorted. +#' @param func A function used to compute the sort key for each element. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all elements are sorted. +#' @rdname sortBy #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -#' collect(keys(rdd)) # list(1, 3) +#' rdd <- parallelize(sc, list(3, 2, 1)) +#' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) #'} -setGeneric("keys", function(rdd) { standardGeneric("keys") }) +setGeneric("sortBy", function(rdd, + func, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortBy") + }) -#' @rdname keys -#' @aliases keys,RDD -setMethod("keys", - signature(rdd = "RDD"), - function(rdd) { - func <- function(x) { - x[[1]] - } - lapply(rdd, func) +#' @rdname sortBy +#' @aliases sortBy,RDD,RDD-method +setMethod("sortBy", + signature(rdd = "RDD", func = "function"), + function(rdd, func, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { + values(sortByKey(keyBy(rdd, func), ascending, numPartitions)) }) -#' Return an RDD with the values of each tuple. -#' -#' @param rdd The RDD from which the values of each tuple is returned. -#' @rdname values -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -#' collect(values(rdd)) # list(2, 4) -#'} -setGeneric("values", function(rdd) { standardGeneric("values") }) +# Helper function to get first N elements from an RDD in the specified order. +# Param: +# rdd An RDD. +# num Number of elements to return. +# ascending A flag to indicate whether the sorting is ascending or descending. +# Return: +# A list of the first N elements from the RDD in the specified order. +# +takeOrderedElem <- function(rdd, num, ascending = TRUE) { + if (num <= 0L) { + return(list()) + } + + partitionFunc <- function(part) { + if (num < length(part)) { + # R limitation: order works only on primitive types! + ord <- order(unlist(part, recursive = FALSE), decreasing = !ascending) + list(part[ord[1:num]]) + } else { + list(part) + } + } -#' @rdname values -#' @aliases values,RDD -setMethod("values", - signature(rdd = "RDD"), - function(rdd) { - func <- function(x) { - x[[2]] - } - lapply(rdd, func) - }) + reduceFunc <- function(elems, part) { + newElems <- append(elems, part) + # R limitation: order works only on primitive types! + ord <- order(unlist(newElems, recursive = FALSE), decreasing = !ascending) + newElems[ord[1:num]] + } + + newRdd <- mapPartitions(rdd, partitionFunc) + reduce(newRdd, reduceFunc) +} -#' Applies a function to all values of the elements, without modifying the keys. -#' -#' The same as `mapValues()' in Spark. +#' Returns the first N elements from an RDD in ascending order. #' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on the value of each element. -#' @return a new RDD created by the transformation. -#' @rdname mapValues +#' @param rdd An RDD. +#' @param num Number of elements to return. +#' @return The first N elements from the RDD in ascending order. +#' @rdname takeOrdered #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' makePairs <- lapply(rdd, function(x) { list(x, x) }) -#' collect(mapValues(makePairs, function(x) { x * 2) }) -#' Output: list(list(1,2), list(2,4), list(3,6), ...) +#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +#' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) #'} -setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) - -#' @rdname mapValues -#' @aliases mapValues,RDD,function-method -setMethod("mapValues", - signature(X = "RDD", FUN = "function"), - function(X, FUN) { - func <- function(x) { - list(x[[1]], FUN(x[[2]])) - } - lapply(X, func) +setGeneric("takeOrdered", function(rdd, num) { standardGeneric("takeOrdered") }) + +#' @rdname takeOrdered +#' @aliases takeOrdered,RDD,RDD-method +setMethod("takeOrdered", + signature(rdd = "RDD", num = "integer"), + function(rdd, num) { + takeOrderedElem(rdd, num) }) -#' Pass each value in the key-value pair RDD through a flatMap function without -#' changing the keys; this also retains the original RDD's partitioning. +#' Returns the top N elements from an RDD. #' -#' The same as 'flatMapValues()' in Spark. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on the value of each element. -#' @return a new RDD created by the transformation. -#' @rdname flatMapValues +#' @param rdd An RDD. +#' @param num Number of elements to return. +#' @return The top N elements from the RDD. +#' @rdname top #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) -#' collect(flatMapValues(rdd, function(x) { x })) -#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) +#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +#' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) #'} -setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) - -#' @rdname flatMapValues -#' @aliases flatMapValues,RDD,function-method -setMethod("flatMapValues", - signature(X = "RDD", FUN = "function"), - function(X, FUN) { - flatMapFunc <- function(x) { - lapply(FUN(x[[2]]), function(v) { list(x[[1]], v) }) - } - flatMap(X, flatMapFunc) +setGeneric("top", function(rdd, num) { standardGeneric("top") }) + +#' @rdname top +#' @aliases top,RDD,RDD-method +setMethod("top", + signature(rdd = "RDD", num = "integer"), + function(rdd, num) { + takeOrderedElem(rdd, num, FALSE) }) -############ Shuffle Functions ############ - -#' Partition an RDD by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' For each element of this RDD, the partitioner is used to compute a hash -#' function and the RDD is partitioned using this hash value. -#' -#' @param rdd The RDD to partition. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @param ... Other optional arguments to partitionBy. -#' -#' @param partitionFunc The partition function to use. Uses a default hashCode -#' function if not provided -#' @return An RDD partitioned using the specified partitioner. -#' @rdname partitionBy +#' Fold an RDD using a given associative function and a neutral "zero value". +#' +#' Aggregate the elements of each partition, and then the results for all the +#' partitions, using a given associative function and a neutral "zero value". +#' +#' @param rdd An RDD. +#' @param zeroValue A neutral "zero value". +#' @param op An associative function for the folding operation. +#' @return The folding result. +#' @rdname fold +#' @seealso reduce #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- partitionBy(rdd, 2L) -#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) +#' fold(rdd, 0, "+") # 15 #'} -setGeneric("partitionBy", - function(rdd, numPartitions, ...) { - standardGeneric("partitionBy") - }) - -#' @rdname partitionBy -#' @aliases partitionBy,RDD,integer-method -setMethod("partitionBy", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions, partitionFunc = hashCode) { - - #if (missing(partitionFunc)) { - # partitionFunc <- hashCode - #} - - depsBinArr <- getDependencies(partitionFunc) - - serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), - connection = NULL, - ascii = TRUE) - - packageNamesArr <- serialize(.sparkREnv$.packages, - connection = NULL, - ascii = TRUE) - broadcastArr <- lapply(ls(.broadcastNames), function(name) { - get(name, .broadcastNames) }) - jrdd <- getJRDD(rdd) - - # We create a PairwiseRRDD that extends RDD[(Array[Byte], - # Array[Byte])], where the key is the hashed split, the value is - # the content (key-val pairs). - pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", - callJMethod(jrdd, "rdd"), - as.integer(numPartitions), - serializedHashFuncBytes, - rdd@env$serialized, - depsBinArr, - packageNamesArr, - as.character(.sparkREnv$libname), - broadcastArr, - callJMethod(jrdd, "classTag")) - - # Create a corresponding partitioner. - rPartitioner <- newJObject("org.apache.spark.HashPartitioner", - as.integer(numPartitions)) - - # Call partitionBy on the obtained PairwiseRDD. - javaPairRDD <- callJMethod(pairwiseRRDD, "asJavaPairRDD") - javaPairRDD <- callJMethod(javaPairRDD, "partitionBy", rPartitioner) - - # Call .values() on the result to get back the final result, the - # shuffled acutal content key-val pairs. - r <- callJMethod(javaPairRDD, "values") - - RDD(r, serialized = TRUE) +setGeneric("fold", function(rdd, zeroValue, op) { standardGeneric("fold") }) + +#' @rdname fold +#' @aliases fold,RDD,RDD-method +setMethod("fold", + signature(rdd = "RDD", zeroValue = "ANY", op = "ANY"), + function(rdd, zeroValue, op) { + aggregateRDD(rdd, zeroValue, op, op) }) -#' Group values by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and group values for each key in the RDD into a single sequence. -#' -#' @param rdd The RDD to group. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, list(V)) -#' @seealso reduceByKey -#' @rdname groupByKey +#' Aggregate an RDD using the given combine functions and a neutral "zero value". +#' +#' Aggregate the elements of each partition, and then the results for all the +#' partitions, using given combine functions and a neutral "zero value". +#' +#' @param rdd An RDD. +#' @param zeroValue A neutral "zero value". +#' @param seqOp A function to aggregate the RDD elements. It may return a different +#' result type from the type of the RDD elements. +#' @param combOp A function to aggregate results of seqOp. +#' @return The aggregation result. +#' @rdname aggregateRDD +#' @seealso reduce #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- groupByKey(rdd, 2L) -#' grouped <- collect(parts) -#' grouped[[1]] # Should be a list(1, list(2, 4)) +#' rdd <- parallelize(sc, list(1, 2, 3, 4)) +#' zeroValue <- list(0, 0) +#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +#' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) #'} -setGeneric("groupByKey", - function(rdd, numPartitions) { - standardGeneric("groupByKey") - }) +setGeneric("aggregateRDD", function(rdd, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) -#' @rdname groupByKey -#' @aliases groupByKey,RDD,integer-method -setMethod("groupByKey", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions) { - shuffled <- partitionBy(rdd, numPartitions) - groupVals <- function(part) { - vals <- new.env() - keys <- new.env() - # Each item in the partition is list of (K, V) - lapply(part, - function(item) { - hashVal <- as.character(hashCode(item[[1]])) - if (exists(hashVal, vals)) { - acc <- vals[[hashVal]] - acc[[length(acc) + 1]] <- item[[2]] - vals[[hashVal]] <- acc - } else { - vals[[hashVal]] <- list(item[[2]]) - keys[[hashVal]] <- item[[1]] - } - }) - # Every key in the environment contains a list - # Convert that to list(K, Seq[V]) - grouped <- lapply(ls(vals), - function(name) { - list(keys[[name]], vals[[name]]) - }) - grouped +#' @rdname aggregateRDD +#' @aliases aggregateRDD,RDD,RDD-method +setMethod("aggregateRDD", + signature(rdd = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), + function(rdd, zeroValue, seqOp, combOp) { + partitionFunc <- function(part) { + Reduce(seqOp, part, zeroValue) } - lapplyPartition(shuffled, groupVals) + + partitionList <- collect(lapplyPartition(rdd, partitionFunc), + flatten = FALSE) + Reduce(combOp, partitionList, zeroValue) }) -#' Merge values by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and merges the values for each key using an associative reduce function. +# TODO: Consider caching the name in the RDD's environment +#' Return an RDD's name. #' -#' @param rdd The RDD to reduce by key. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param combineFunc The associative reduce function to use. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, V') where V' is the merged -#' value -#' @rdname reduceByKey -#' @seealso groupByKey +#' @param rdd The RDD whose name is returned. +#' @rdname name #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- reduceByKey(rdd, "+", 2L) -#' reduced <- collect(parts) -#' reduced[[1]] # Should be a list(1, 6) +#' rdd <- parallelize(sc, list(1,2,3)) +#' name(rdd) # NULL (if not set before) #'} -setGeneric("reduceByKey", - function(rdd, combineFunc, numPartitions) { - standardGeneric("reduceByKey") - }) +setGeneric("name", function(rdd) { standardGeneric("name") }) -#' @rdname reduceByKey -#' @aliases reduceByKey,RDD,integer-method -setMethod("reduceByKey", - signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), - function(rdd, combineFunc, numPartitions) { - reduceVals <- function(part) { - vals <- new.env() - keys <- new.env() - lapply(part, - function(item) { - hashVal <- as.character(hashCode(item[[1]])) - if (exists(hashVal, vals)) { - vals[[hashVal]] <- do.call( - combineFunc, list(vals[[hashVal]], item[[2]])) - } else { - vals[[hashVal]] <- item[[2]] - keys[[hashVal]] <- item[[1]] - } - }) - combined <- lapply(ls(vals), - function(name) { - list(keys[[name]], vals[[name]]) - }) - combined - } - locallyReduced <- lapplyPartition(rdd, reduceVals) - shuffled <- partitionBy(locallyReduced, numPartitions) - lapplyPartition(shuffled, reduceVals) +#' @rdname name +#' @aliases name,RDD +setMethod("name", + signature(rdd = "RDD"), + function(rdd) { + callJMethod(getJRDD(rdd), "name") }) -#' Combine values by key -#' -#' Generic function to combine the elements for each key using a custom set of -#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], -#' for a "combined type" C. Note that V and C can be different -- for example, one -#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). - -#' Users provide three functions: -#' \itemize{ -#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) -#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - -#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates -#' two lists). -#' } -#' -#' @param rdd The RDD to combine. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param createCombiner Create a combiner (C) given a value (V) -#' @param mergeValue Merge the given value (V) with an existing combiner (C) -#' @param mergeCombiners Merge two combiners and return a new combiner -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, C) where C is the combined type +#' Set an RDD's name. #' -#' @rdname combineByKey -#' @seealso groupByKey, reduceByKey +#' @param rdd The RDD whose name is to be set. +#' @param name The RDD name to be set. +#' @return a new RDD renamed. +#' @rdname setName #' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) -#' combined <- collect(parts) -#' combined[[1]] # Should be a list(1, 6) +#' rdd <- parallelize(sc, list(1,2,3)) +#' setName(rdd, "myRDD") +#' name(rdd) # "myRDD" #'} -setGeneric("combineByKey", - function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { - standardGeneric("combineByKey") - }) +setGeneric("setName", function(rdd, name) { standardGeneric("setName") }) -#' @rdname combineByKey -#' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method -setMethod("combineByKey", - signature(rdd = "RDD", createCombiner = "ANY", mergeValue = "ANY", - mergeCombiners = "ANY", numPartitions = "integer"), - function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { - combineLocally <- function(part) { - combiners <- new.env() - keys <- new.env() - lapply(part, - function(item) { - k <- as.character(item[[1]]) - if (!exists(k, keys)) { - combiners[[k]] <- do.call(createCombiner, - list(item[[2]])) - keys[[k]] <- item[[1]] - } else { - combiners[[k]] <- do.call(mergeValue, - list(combiners[[k]], - item[[2]])) - } - }) - lapply(ls(keys), function(k) { - list(keys[[k]], combiners[[k]]) - }) - } - locallyCombined <- lapplyPartition(rdd, combineLocally) - shuffled <- partitionBy(locallyCombined, numPartitions) - mergeAfterShuffle <- function(part) { - combiners <- new.env() - keys <- new.env() - lapply(part, - function(item) { - k <- as.character(item[[1]]) - if (!exists(k, combiners)) { - combiners[[k]] <- item[[2]] - keys[[k]] <- item[[1]] - } else { - combiners[[k]] <- do.call(mergeCombiners, - list(combiners[[k]], - item[[2]])) - } - }) - lapply(ls(keys), function(k) { - list(keys[[k]], combiners[[k]]) - }) - } - combined <-lapplyPartition(shuffled, mergeAfterShuffle) - combined +#' @rdname setName +#' @aliases setName,RDD +setMethod("setName", + signature(rdd = "RDD", name = "character"), + function(rdd, name) { + callJMethod(getJRDD(rdd), "setName", name) + rdd }) ############ Binary Functions ############# @@ -1570,275 +1361,3 @@ setMethod("unionRDD", } union.rdd }) - -#' Join two RDDs -#' -#' This function joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return a new RDD containing all pairs of elements with matching keys in -#' two input RDDs. -#' @rdname join -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) -#'} -setGeneric("join", function(rdd1, rdd2, numPartitions) { standardGeneric("join") }) - -#' @rdname join -#' @aliases join,RDD,RDD-method -setMethod("join", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) - - doJoin <- function(v) { - joinTaggedList(v, list(FALSE, FALSE)) - } - - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) - }) - -#' Left outer join two RDDs -#' -#' This function left-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in rdd1, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) -#' if no elements in rdd2 have key k. -#' @rdname leftOuterJoin -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' leftOuterJoin(rdd1, rdd2, 2L) -#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) -#'} -setGeneric("leftOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("leftOuterJoin") }) - -#' @rdname leftOuterJoin -#' @aliases leftOuterJoin,RDD,RDD-method -setMethod("leftOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) - - doJoin <- function(v) { - joinTaggedList(v, list(FALSE, TRUE)) - } - - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) - }) - -#' Right outer join two RDDs -#' -#' This function right-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, w) in rdd2, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) -#' if no elements in rdd1 have key k. -#' @rdname rightOuterJoin -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rightOuterJoin(rdd1, rdd2, 2L) -#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) -#'} -setGeneric("rightOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("rightOuterJoin") }) - -#' @rdname rightOuterJoin -#' @aliases rightOuterJoin,RDD,RDD-method -setMethod("rightOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) - - doJoin <- function(v) { - joinTaggedList(v, list(TRUE, FALSE)) - } - - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) - }) - -#' Full outer join two RDDs -#' -#' This function full-outer-joins two RDDs where every element is of the form -#' list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD -#' will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and -#' (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements -#' in rdd1/rdd2 have key k. -#' @rdname fullOuterJoin -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) -#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), -#' # list(1, list(3, 1)), -#' # list(2, list(NULL, 4))) -#' # list(3, list(3, NULL)), -#'} -setGeneric("fullOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("fullOuterJoin") }) - -#' @rdname fullOuterJoin -#' @aliases fullOuterJoin,RDD,RDD-method - -setMethod("fullOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) - - doJoin <- function(v) { - joinTaggedList(v, list(TRUE, TRUE)) - } - - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) - }) - -#' For each key k in several RDDs, return a resulting RDD that -#' whose values are a list of values for the key in all RDDs. -#' -#' @param ... Several RDDs. -#' @param numPartitions Number of partitions to create. -#' @return a new RDD containing all pairs of elements with values in a list -#' in all RDDs. -#' @rdname cogroup -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' cogroup(rdd1, rdd2, numPartitions = 2L) -#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) -#'} -setGeneric("cogroup", - function(..., numPartitions) { standardGeneric("cogroup") }, - signature = "...") - -#' @rdname cogroup -#' @aliases cogroup,RDD-method -setMethod("cogroup", - "RDD", - function(..., numPartitions) { - rdds <- list(...) - rddsLen <- length(rdds) - for (i in 1:rddsLen) { - rdds[[i]] <- lapply(rdds[[i]], - function(x) { list(x[[1]], list(i, x[[2]])) }) - # TODO(hao): As issue [SparkR-142] mentions, the right value of i - # will not be captured into UDF if getJRDD is not invoked. - # It should be resolved together with that issue. - getJRDD(rdds[[i]]) # Capture the closure. - } - union.rdd <- Reduce(unionRDD, rdds) - group.func <- function(vlist) { - res <- list() - length(res) <- rddsLen - for (x in vlist) { - i <- x[[1]] - acc <- res[[i]] - # Create an accumulator. - if (is.null(acc)) { - acc <- SparkR:::initAccumulator() - } - SparkR:::addItemToAccumulator(acc, x[[2]]) - res[[i]] <- acc - } - lapply(res, function(acc) { - if (is.null(acc)) { - list() - } else { - acc$data - } - }) - } - cogroup.rdd <- mapValues(groupByKey(union.rdd, numPartitions), - group.func) - }) - -# TODO: Consider caching the name in the RDD's environment -#' Return an RDD's name. -#' -#' @param rdd The RDD whose name is returned. -#' @rdname name -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' name(rdd) # NULL (if not set before) -#'} -setGeneric("name", function(rdd) { standardGeneric("name") }) - -#' @rdname name -#' @aliases name,RDD -setMethod("name", - signature(rdd = "RDD"), - function(rdd) { - callJMethod(getJRDD(rdd), "name") - }) - -#' Set an RDD's name. -#' -#' @param rdd The RDD whose name is to be set. -#' @param name The RDD name to be set. -#' @return a new RDD renamed. -#' @rdname setName -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' setName(rdd, "myRDD") -#' name(rdd) # "myRDD" -#'} -setGeneric("setName", function(rdd, name) { standardGeneric("setName") }) - -#' @rdname setName -#' @aliases setName,RDD -setMethod("setName", - signature(rdd = "RDD", name = "character"), - function(rdd, name) { - callJMethod(getJRDD(rdd), "setName", name) - rdd - }) diff --git a/pkg/R/context.R b/pkg/R/context.R index d77c8d04a48a8..095ad5528ee7f 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -85,10 +85,16 @@ parallelize <- function(sc, coll, numSlices = 1) { # TODO: bound/safeguard numSlices # TODO: unit tests for if the split works for all primitives # TODO: support matrix, data frame, etc - if (!is.list(coll)) { - if (!is.vector(coll)) { - message(paste("context.R: parallelize() currently only supports lists and vectors.", - "Calling as.list() to coerce coll into a list.")) + if ((!is.list(coll) && !is.vector(coll)) || is.data.frame(coll)) { + if (is.data.frame(coll)) { + message(paste("context.R: A data frame is parallelized by columns.")) + } else { + if (is.matrix(coll)) { + message(paste("context.R: A matrix is parallelized by elements.")) + } else { + message(paste("context.R: parallelize() currently only supports lists and vectors.", + "Calling as.list() to coerce coll into a list.")) + } } coll <- as.list(coll) } @@ -109,7 +115,6 @@ parallelize <- function(sc, coll, numSlices = 1) { RDD(jrdd, TRUE) } - #' Include this specified package on all workers #' #' This function can be used to include a package on all workers before the diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R new file mode 100644 index 0000000000000..eef111d309263 --- /dev/null +++ b/pkg/R/pairRDD.R @@ -0,0 +1,799 @@ +# Operations supported on RDDs contains pairs (i.e key, value) + +############ Actions and Transformations ############ + +#' Look up elements of a key in an RDD +#' +#' @description +#' \code{lookup} returns a list of values in this RDD for key key. +#' +#' @param rdd The RDD to collect +#' @param key The key to look up for +#' @return a list of values in this RDD for key key +#' @rdname lookup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) +#' rdd <- parallelize(sc, pairs) +#' lookup(rdd, 1) # list(1, 3) +#'} +setGeneric("lookup", function(rdd, key) { standardGeneric("lookup") }) + +#' @rdname lookup +#' @aliases lookup,RDD-method +setMethod("lookup", + signature(rdd = "RDD", key = "ANY"), + function(rdd, key) { + partitionFunc <- function(part) { + filtered <- part[unlist(lapply(part, function(x) { identical(key, x[[1]]) }))] + lapply(filtered, function(x) { x[[2]] }) + } + valsRDD <- lapplyPartition(rdd, partitionFunc) + collect(valsRDD) + }) + +#' Count the number of elements for each key, and return the result to the +#' master as lists of (key, count) pairs. +#' +#' Same as countByKey in Spark. +#' +#' @param rdd The RDD to count keys. +#' @return list of (key, count) pairs, where count is number of each key in rdd. +#' @rdname countByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) +#' countByKey(rdd) # ("a", 2L), ("b", 1L) +#'} +setGeneric("countByKey", function(rdd) { standardGeneric("countByKey") }) + +#' @rdname countByKey +#' @aliases countByKey,RDD-method +setMethod("countByKey", + signature(rdd = "RDD"), + function(rdd) { + keys <- lapply(rdd, function(item) { item[[1]] }) + countByValue(keys) + }) + +#' Return an RDD with the keys of each tuple. +#' +#' @param rdd The RDD from which the keys of each tuple is returned. +#' @rdname keys +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(keys(rdd)) # list(1, 3) +#'} +setGeneric("keys", function(rdd) { standardGeneric("keys") }) + +#' @rdname keys +#' @aliases keys,RDD +setMethod("keys", + signature(rdd = "RDD"), + function(rdd) { + func <- function(x) { + x[[1]] + } + lapply(rdd, func) + }) + +#' Return an RDD with the values of each tuple. +#' +#' @param rdd The RDD from which the values of each tuple is returned. +#' @rdname values +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(values(rdd)) # list(2, 4) +#'} +setGeneric("values", function(rdd) { standardGeneric("values") }) + +#' @rdname values +#' @aliases values,RDD +setMethod("values", + signature(rdd = "RDD"), + function(rdd) { + func <- function(x) { + x[[2]] + } + lapply(rdd, func) + }) + +#' Applies a function to all values of the elements, without modifying the keys. +#' +#' The same as `mapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. +#' @rdname mapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' makePairs <- lapply(rdd, function(x) { list(x, x) }) +#' collect(mapValues(makePairs, function(x) { x * 2) }) +#' Output: list(list(1,2), list(2,4), list(3,6), ...) +#'} +setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) + +#' @rdname mapValues +#' @aliases mapValues,RDD,function-method +setMethod("mapValues", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + func <- function(x) { + list(x[[1]], FUN(x[[2]])) + } + lapply(X, func) + }) + +#' Pass each value in the key-value pair RDD through a flatMap function without +#' changing the keys; this also retains the original RDD's partitioning. +#' +#' The same as 'flatMapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. +#' @rdname flatMapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) +#' collect(flatMapValues(rdd, function(x) { x })) +#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) +#'} +setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) + +#' @rdname flatMapValues +#' @aliases flatMapValues,RDD,function-method +setMethod("flatMapValues", + signature(X = "RDD", FUN = "function"), + function(X, FUN) { + flatMapFunc <- function(x) { + lapply(FUN(x[[2]]), function(v) { list(x[[1]], v) }) + } + flatMap(X, flatMapFunc) + }) + +############ Shuffle Functions ############ + +#' Partition an RDD by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' For each element of this RDD, the partitioner is used to compute a hash +#' function and the RDD is partitioned using this hash value. +#' +#' @param rdd The RDD to partition. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param numPartitions Number of partitions to create. +#' @param ... Other optional arguments to partitionBy. +#' +#' @param partitionFunc The partition function to use. Uses a default hashCode +#' function if not provided +#' @return An RDD partitioned using the specified partitioner. +#' @rdname partitionBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- partitionBy(rdd, 2L) +#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) +#'} +setGeneric("partitionBy", + function(rdd, numPartitions, ...) { + standardGeneric("partitionBy") + }) + +#' @rdname partitionBy +#' @aliases partitionBy,RDD,integer-method +setMethod("partitionBy", + signature(rdd = "RDD", numPartitions = "integer"), + function(rdd, numPartitions, partitionFunc = hashCode) { + + #if (missing(partitionFunc)) { + # partitionFunc <- hashCode + #} + + depsBinArr <- getDependencies(partitionFunc) + + serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), + connection = NULL, + ascii = TRUE) + + packageNamesArr <- serialize(.sparkREnv$.packages, + connection = NULL, + ascii = TRUE) + broadcastArr <- lapply(ls(.broadcastNames), function(name) { + get(name, .broadcastNames) }) + jrdd <- getJRDD(rdd) + + # We create a PairwiseRRDD that extends RDD[(Array[Byte], + # Array[Byte])], where the key is the hashed split, the value is + # the content (key-val pairs). + pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", + callJMethod(jrdd, "rdd"), + as.integer(numPartitions), + serializedHashFuncBytes, + rdd@env$serialized, + depsBinArr, + packageNamesArr, + as.character(.sparkREnv$libname), + broadcastArr, + callJMethod(jrdd, "classTag")) + + # Create a corresponding partitioner. + rPartitioner <- newJObject("org.apache.spark.HashPartitioner", + as.integer(numPartitions)) + + # Call partitionBy on the obtained PairwiseRDD. + javaPairRDD <- callJMethod(pairwiseRRDD, "asJavaPairRDD") + javaPairRDD <- callJMethod(javaPairRDD, "partitionBy", rPartitioner) + + # Call .values() on the result to get back the final result, the + # shuffled acutal content key-val pairs. + r <- callJMethod(javaPairRDD, "values") + + RDD(r, serialized = TRUE) + }) + +#' Group values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and group values for each key in the RDD into a single sequence. +#' +#' @param rdd The RDD to group. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, list(V)) +#' @seealso reduceByKey +#' @rdname groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- groupByKey(rdd, 2L) +#' grouped <- collect(parts) +#' grouped[[1]] # Should be a list(1, list(2, 4)) +#'} +setGeneric("groupByKey", + function(rdd, numPartitions) { + standardGeneric("groupByKey") + }) + +#' @rdname groupByKey +#' @aliases groupByKey,RDD,integer-method +setMethod("groupByKey", + signature(rdd = "RDD", numPartitions = "integer"), + function(rdd, numPartitions) { + shuffled <- partitionBy(rdd, numPartitions) + groupVals <- function(part) { + vals <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + appendList <- function(acc, x) { + addItemToAccumulator(acc, x) + acc + } + makeList <- function(x) { + acc <- initAccumulator() + addItemToAccumulator(acc, x) + acc + } + # Each item in the partition is list of (K, V) + lapply(part, + function(item) { + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, + appendList, makeList) + }) + # extract out data field + vals <- eapply(vals, + function(x) { + length(x$data) <- x$counter + x$data + }) + # Every key in the environment contains a list + # Convert that to list(K, Seq[V]) + convertEnvsToList(keys, vals) + } + lapplyPartition(shuffled, groupVals) + }) + +#' Merge values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function. +#' +#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, V') where V' is the merged +#' value +#' @rdname reduceByKey +#' @seealso groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- reduceByKey(rdd, "+", 2L) +#' reduced <- collect(parts) +#' reduced[[1]] # Should be a list(1, 6) +#'} +setGeneric("reduceByKey", + function(rdd, combineFunc, numPartitions) { + standardGeneric("reduceByKey") + }) + +#' @rdname reduceByKey +#' @aliases reduceByKey,RDD,integer-method +setMethod("reduceByKey", + signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), + function(rdd, combineFunc, numPartitions) { + reduceVals <- function(part) { + vals <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, combineFunc, identity) + }) + convertEnvsToList(keys, vals) + } + locallyReduced <- lapplyPartition(rdd, reduceVals) + shuffled <- partitionBy(locallyReduced, numPartitions) + lapplyPartition(shuffled, reduceVals) + }) + +#' Merge values by key locally +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function, but return the +#' results immediately to the driver as an R list. +#' +#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @return A list of elements of type list(K, V') where V' is the merged value for each key +#' @rdname reduceByKeyLocally +#' @seealso reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' reduced <- reduceByKeyLocally(rdd, "+") +#' reduced # list(list(1, 6), list(1.1, 3)) +#'} +setGeneric("reduceByKeyLocally", + function(rdd, combineFunc) { + standardGeneric("reduceByKeyLocally") + }) + +#' @rdname reduceByKeyLocally +#' @aliases reduceByKeyLocally,RDD,integer-method +setMethod("reduceByKeyLocally", + signature(rdd = "RDD", combineFunc = "ANY"), + function(rdd, combineFunc) { + reducePart <- function(part) { + vals <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(hashCode(item[[1]])) + updateOrCreatePair(item, keys, vals, pred, combineFunc, identity) + }) + list(list(keys, vals)) # return hash to avoid re-compute in merge + } + mergeParts <- function(accum, x) { + pred <- function(item) { + exists(item$hash, accum[[1]]) + } + lapply(ls(x[[1]]), + function(name) { + item <- list(x[[1]][[name]], x[[2]][[name]]) + item$hash <- name + updateOrCreatePair(item, accum[[1]], accum[[2]], pred, combineFunc, identity) + }) + accum + } + reduced <- mapPartitions(rdd, reducePart) + merged <- reduce(reduced, mergeParts) + convertEnvsToList(merged[[1]], merged[[2]]) + }) + +#' Combine values by key +#' +#' Generic function to combine the elements for each key using a custom set of +#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], +#' for a "combined type" C. Note that V and C can be different -- for example, one +#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). + +#' Users provide three functions: +#' \itemize{ +#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) +#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - +#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates +#' two lists). +#' } +#' +#' @param rdd The RDD to combine. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param createCombiner Create a combiner (C) given a value (V) +#' @param mergeValue Merge the given value (V) with an existing combiner (C) +#' @param mergeCombiners Merge two combiners and return a new combiner +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, C) where C is the combined type +#' +#' @rdname combineByKey +#' @seealso groupByKey, reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) +#' combined <- collect(parts) +#' combined[[1]] # Should be a list(1, 6) +#'} +setGeneric("combineByKey", + function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + standardGeneric("combineByKey") + }) + +#' @rdname combineByKey +#' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method +setMethod("combineByKey", + signature(rdd = "RDD", createCombiner = "ANY", mergeValue = "ANY", + mergeCombiners = "ANY", numPartitions = "integer"), + function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + combineLocally <- function(part) { + combiners <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(item[[1]]) + updateOrCreatePair(item, keys, combiners, pred, mergeValue, createCombiner) + }) + convertEnvsToList(keys, combiners) + } + locallyCombined <- lapplyPartition(rdd, combineLocally) + shuffled <- partitionBy(locallyCombined, numPartitions) + mergeAfterShuffle <- function(part) { + combiners <- new.env() + keys <- new.env() + pred <- function(item) exists(item$hash, keys) + lapply(part, + function(item) { + item$hash <- as.character(item[[1]]) + updateOrCreatePair(item, keys, combiners, pred, mergeCombiners, identity) + }) + convertEnvsToList(keys, combiners) + } + lapplyPartition(shuffled, mergeAfterShuffle) + }) + +############ Binary Functions ############# + +#' Join two RDDs +#' +#' @description +#' \code{join} This function joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with matching keys in +#' two input RDDs. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) +#'} +setGeneric("join", function(rdd1, rdd2, numPartitions) { standardGeneric("join") }) + +#' @rdname join-methods +#' @aliases join,RDD,RDD-method +setMethod("join", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + joinTaggedList(v, list(FALSE, FALSE)) + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' Left outer join two RDDs +#' +#' @description +#' \code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in rdd1, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) +#' if no elements in rdd2 have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' leftOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +#'} +setGeneric("leftOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("leftOuterJoin") }) + +#' @rdname join-methods +#' @aliases leftOuterJoin,RDD,RDD-method +setMethod("leftOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + joinTaggedList(v, list(FALSE, TRUE)) + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' Right outer join two RDDs +#' +#' @description +#' \code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, w) in rdd2, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) +#' if no elements in rdd1 have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rightOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +#'} +setGeneric("rightOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("rightOuterJoin") }) + +#' @rdname join-methods +#' @aliases rightOuterJoin,RDD,RDD-method +setMethod("rightOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + joinTaggedList(v, list(TRUE, FALSE)) + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' Full outer join two RDDs +#' +#' @description +#' \code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD +#' will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and +#' (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements +#' in rdd1/rdd2 have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), +#' # list(1, list(3, 1)), +#' # list(2, list(NULL, 4))) +#' # list(3, list(3, NULL)), +#'} +setGeneric("fullOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("fullOuterJoin") }) + +#' @rdname join-methods +#' @aliases fullOuterJoin,RDD,RDD-method + +setMethod("fullOuterJoin", + signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), + function(rdd1, rdd2, numPartitions) { + rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) + rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + + doJoin <- function(v) { + joinTaggedList(v, list(TRUE, TRUE)) + } + + joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + }) + +#' For each key k in several RDDs, return a resulting RDD that +#' whose values are a list of values for the key in all RDDs. +#' +#' @param ... Several RDDs. +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with values in a list +#' in all RDDs. +#' @rdname cogroup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' cogroup(rdd1, rdd2, numPartitions = 2L) +#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) +#'} +setGeneric("cogroup", + function(..., numPartitions) { standardGeneric("cogroup") }, + signature = "...") + +#' @rdname cogroup +#' @aliases cogroup,RDD-method +setMethod("cogroup", + "RDD", + function(..., numPartitions) { + rdds <- list(...) + rddsLen <- length(rdds) + for (i in 1:rddsLen) { + rdds[[i]] <- lapply(rdds[[i]], + function(x) { list(x[[1]], list(i, x[[2]])) }) + # TODO(hao): As issue [SparkR-142] mentions, the right value of i + # will not be captured into UDF if getJRDD is not invoked. + # It should be resolved together with that issue. + getJRDD(rdds[[i]]) # Capture the closure. + } + union.rdd <- Reduce(unionRDD, rdds) + group.func <- function(vlist) { + res <- list() + length(res) <- rddsLen + for (x in vlist) { + i <- x[[1]] + acc <- res[[i]] + # Create an accumulator. + if (is.null(acc)) { + acc <- SparkR:::initAccumulator() + } + SparkR:::addItemToAccumulator(acc, x[[2]]) + res[[i]] <- acc + } + lapply(res, function(acc) { + if (is.null(acc)) { + list() + } else { + acc$data + } + }) + } + cogroup.rdd <- mapValues(groupByKey(union.rdd, numPartitions), + group.func) + }) + +#' Sort a (k, v) pair RDD by k. +#' +#' @param rdd A (k, v) pair RDD to be sorted. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all (k, v) pair elements are sorted. +#' @rdname sortByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) +#' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) +#'} +setGeneric("sortByKey", function(rdd, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortByKey") + }) + +#' @rdname sortByKey +#' @aliases sortByKey,RDD,RDD-method +setMethod("sortByKey", + signature(rdd = "RDD"), + function(rdd, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { + rangeBounds <- list() + + if (numPartitions > 1) { + rddSize <- count(rdd) + # constant from Spark's RangePartitioner + maxSampleSize <- numPartitions * 20 + fraction <- min(maxSampleSize / max(rddSize, 1), 1.0) + + samples <- collect(keys(sampleRDD(rdd, FALSE, fraction, 1L))) + + # Note: the built-in R sort() function only works on atomic vectors + samples <- sort(unlist(samples, recursive = FALSE), decreasing = !ascending) + + if (length(samples) > 0) { + rangeBounds <- lapply(seq_len(numPartitions - 1), + function(i) { + j <- ceiling(length(samples) * i / numPartitions) + samples[j] + }) + } + } + + rangePartitionFunc <- function(key) { + partition <- 0 + + # TODO: Use binary search instead of linear search, similar with Spark + while (partition < length(rangeBounds) && key > rangeBounds[[partition + 1]]) { + partition <- partition + 1 + } + + if (ascending) { + partition + } else { + numPartitions - partition - 1 + } + } + + partitionFunc <- function(part) { + sortKeyValueList(part, decreasing = !ascending) + } + + newRDD <- partitionBy(rdd, numPartitions, rangePartitionFunc) + lapplyPartition(newRDD, partitionFunc) + }) + diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 5d4560264c537..f3a5dfa9745ec 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -23,30 +23,39 @@ connExists <- function(env) { # Stop the Spark context. # Also terminates the backend this R session is connected to -sparkR.stop <- function(env) { - cat("Stopping SparkR\n") +sparkR.stop <- function(env = .sparkREnv) { if (!connExists(env)) { # When the workspace is saved in R, the connections are closed # *before* the finalizer is run. In these cases, we reconnect # to the backend, so we can shut it down. - connectBackend("localhost", .sparkREnv$sparkRBackendPort) - } - - if (exists(".sparkRjsc", envir = env)) { - sc <- get(".sparkRjsc", envir = env) - callJMethod(sc, "stop") + tryCatch({ + connectBackend("localhost", .sparkREnv$sparkRBackendPort) + }, error = function(err) { + cat("Error in Connection: Use sparkR.init() to restart SparkR\n") + }, warning = function(war) { + cat("No Connection Found: Use sparkR.init() to restart SparkR\n") + }) + } + + if (exists(".sparkRCon", envir = env)) { + cat("Stopping SparkR\n") + if (exists(".sparkRjsc", envir = env)) { + sc <- get(".sparkRjsc", envir = env) + callJMethod(sc, "stop") + rm(".sparkRjsc", envir = env) + } + + callJStatic("SparkRHandler", "stopBackend") + # Also close the connection and remove it from our env + conn <- get(".sparkRCon", env) + close(conn) + rm(".sparkRCon", envir = env) + # Finally, sleep for 1 sec to let backend finish exiting. + # Without this we get port conflicts in RStudio when we try to 'Restart R'. + Sys.sleep(1) } - - callJStatic("SparkRHandler", "stopBackend") - # Also close the connection and remove it from our env - conn <- get(".sparkRCon", env) - close(conn) - rm(".sparkRCon", envir = env) - - # Finally, sleep for 1 sec to let backend finish exiting. - # Without this we get port conflicts in RStudio when we try to 'Restart R'. - Sys.sleep(1) + } #' Initialize a new Spark Context. @@ -84,7 +93,7 @@ sparkR.init <- function( sparkRBackendPort = 12345) { if (exists(".sparkRjsc", envir = .sparkREnv)) { - cat("Re-using existing Spark Context. Please restart R to create a new Spark Context\n") + cat("Re-using existing Spark Context. Please stop SparkR with sparkR.stop() or restart R to create a new Spark Context\n") return(get(".sparkRjsc", envir = .sparkREnv)) } diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index e46f151eaf371..61ddf03575325 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -2,10 +2,12 @@ # Creates a SparkR client connection object # if one doesn't already exist -connectBackend <- function(hostname, port, timeout = 60) { +connectBackend <- function(hostname, port, timeout = 6000) { if (exists(".sparkRcon", envir = .sparkREnv)) { - cat("SparkRBackend client connection already exists\n") - return(get(".sparkRcon", envir = .sparkREnv)) + if (isOpen(env[[".sparkRCon"]])) { + cat("SparkRBackend client connection already exists\n") + return(get(".sparkRcon", envir = .sparkREnv)) + } } con <- socketConnection(host = hostname, port = port, server = FALSE, diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 7c2a153b8b55d..778ae67def047 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -197,9 +197,9 @@ initAccumulator <- function() { # Utility function to sort a list of key value pairs # Used in unit tests -sortKeyValueList <- function(kv_list) { +sortKeyValueList <- function(kv_list, decreasing = FALSE) { keys <- sapply(kv_list, function(x) x[[1]]) - kv_list[order(keys)] + kv_list[order(keys, decreasing = decreasing)] } # Utility function to generate compact R lists from grouped rdd @@ -259,3 +259,32 @@ joinTaggedList <- function(tagged_list, cnull) { lists <- genCompactLists(tagged_list, cnull) mergeCompactLists(lists[[1]], lists[[2]]) } + +# Utility function to reduce a key-value list with predicate +# Used in *ByKey functions +# param +# pair key-value pair +# keys/vals env of key/value with hashes +# updateOrCreatePred predicate function +# updateFn update or merge function for existing pair, similar with `mergeVal` @combineByKey +# createFn create function for new pair, similar with `createCombiner` @combinebykey +updateOrCreatePair <- function(pair, keys, vals, updateOrCreatePred, updateFn, createFn) { + # assume hashVal bind to `$hash`, key/val with index 1/2 + hashVal <- pair$hash + key <- pair[[1]] + val <- pair[[2]] + if (updateOrCreatePred(pair)) { + assign(hashVal, do.call(updateFn, list(get(hashVal, envir = vals), val)), envir = vals) + } else { + assign(hashVal, do.call(createFn, list(val)), envir = vals) + assign(hashVal, key, envir=keys) + } +} + +# Utility function to convert key&values envs into key-val list +convertEnvsToList <- function(keys, vals) { + lapply(ls(keys), + function(name) { + list(keys[[name]], vals[[name]]) + }) +} diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 7c2599f51e7e5..89d7890fbf685 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -229,6 +229,19 @@ test_that("flatMapValues() on pairwise RDDs", { list(2L, 1), list(2L, 2), list(1L, 200), list(1L, 201))) }) +test_that("reduceByKeyLocally() on PairwiseRDDs", { + pairs <- parallelize(sc, list(list(1, 2), list(1.1, 3), list(1, 4)), 2L) + actual <- reduceByKeyLocally(pairs, "+") + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list(1, 6), list(1.1, 3)))) + + pairs <- parallelize(sc, list(list("abc", 1.2), list(1.1, 0), list("abc", 1.3), + list("bb", 5)), 4L) + actual <- reduceByKeyLocally(pairs, "+") + expect_equal(sortKeyValueList(actual), + sortKeyValueList(list(list("abc", 2.5), list(1.1, 0), list("bb", 5)))) +}) + test_that("distinct() on RDDs", { nums.rep2 <- rep(1:10, 2) rdd.rep2 <- parallelize(sc, nums.rep2, 2L) @@ -254,6 +267,63 @@ test_that("keyBy on RDDs", { expect_equal(actual, lapply(nums, function(x) { list(func(x), x) })) }) +test_that("sortBy() on RDDs", { + sortedRdd <- sortBy(rdd, function(x) { x * x }, ascending = FALSE) + actual <- collect(sortedRdd) + expect_equal(actual, as.list(sort(nums, decreasing = TRUE))) + + rdd2 <- parallelize(sc, sort(nums, decreasing = TRUE), 2L) + sortedRdd2 <- sortBy(rdd2, function(x) { x * x }) + actual <- collect(sortedRdd2) + expect_equal(actual, as.list(nums)) +}) + +test_that("takeOrdered() on RDDs", { + l <- list(10, 1, 2, 9, 3, 4, 5, 6, 7) + rdd <- parallelize(sc, l) + actual <- takeOrdered(rdd, 6L) + expect_equal(actual, as.list(sort(unlist(l)))[1:6]) + + l <- list("e", "d", "c", "d", "a") + rdd <- parallelize(sc, l) + actual <- takeOrdered(rdd, 3L) + expect_equal(actual, as.list(sort(unlist(l)))[1:3]) +}) + +test_that("top() on RDDs", { + l <- list(10, 1, 2, 9, 3, 4, 5, 6, 7) + rdd <- parallelize(sc, l) + actual <- top(rdd, 6L) + expect_equal(actual, as.list(sort(unlist(l), decreasing = TRUE))[1:6]) + + l <- list("e", "d", "c", "d", "a") + rdd <- parallelize(sc, l) + actual <- top(rdd, 3L) + expect_equal(actual, as.list(sort(unlist(l), decreasing = TRUE))[1:3]) +}) + +test_that("fold() on RDDs", { + actual <- fold(rdd, 0, "+") + expect_equal(actual, Reduce("+", nums, 0)) + + rdd <- parallelize(sc, list()) + actual <- fold(rdd, 0, "+") + expect_equal(actual, 0) +}) + +test_that("aggregateRDD() on RDDs", { + rdd <- parallelize(sc, list(1, 2, 3, 4)) + zeroValue <- list(0, 0) + seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } + combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } + actual <- aggregateRDD(rdd, zeroValue, seqOp, combOp) + expect_equal(actual, list(10, 4)) + + rdd <- parallelize(sc, list()) + actual <- aggregateRDD(rdd, zeroValue, seqOp, combOp) + expect_equal(actual, list(0, 0)) +}) + test_that("keys() on RDDs", { keys <- keys(intRdd) actual <- collect(keys) @@ -373,3 +443,70 @@ test_that("fullOuterJoin() on pairwise RDDs", { expect_equal(sortKeyValueList(actual), sortKeyValueList(list(list("a", list(1, NULL)), list("b", list(2, NULL)), list("d", list(NULL, 4)), list("c", list(NULL, 3))))) }) + +test_that("sortByKey() on pairwise RDDs", { + numPairsRdd <- map(rdd, function(x) { list (x, x) }) + sortedRdd <- sortByKey(numPairsRdd, ascending = FALSE) + actual <- collect(sortedRdd) + numPairs <- lapply(nums, function(x) { list (x, x) }) + expect_equal(actual, sortKeyValueList(numPairs, decreasing = TRUE)) + + rdd2 <- parallelize(sc, sort(nums, decreasing = TRUE), 2L) + numPairsRdd2 <- map(rdd2, function(x) { list (x, x) }) + sortedRdd2 <- sortByKey(numPairsRdd2) + actual <- collect(sortedRdd2) + expect_equal(actual, numPairs) + + # sort by string keys + l <- list(list("a", 1), list("b", 2), list("1", 3), list("d", 4), list("2", 5)) + rdd3 <- parallelize(sc, l, 2L) + sortedRdd3 <- sortByKey(rdd3) + actual <- collect(sortedRdd3) + expect_equal(actual, list(list("1", 3), list("2", 5), list("a", 1), list("b", 2), list("d", 4))) + + # test on the boundary cases + + # boundary case 1: the RDD to be sorted has only 1 partition + rdd4 <- parallelize(sc, l, 1L) + sortedRdd4 <- sortByKey(rdd4) + actual <- collect(sortedRdd4) + expect_equal(actual, list(list("1", 3), list("2", 5), list("a", 1), list("b", 2), list("d", 4))) + + # boundary case 2: the sorted RDD has only 1 partition + rdd5 <- parallelize(sc, l, 2L) + sortedRdd5 <- sortByKey(rdd5, numPartitions = 1L) + actual <- collect(sortedRdd5) + expect_equal(actual, list(list("1", 3), list("2", 5), list("a", 1), list("b", 2), list("d", 4))) + + # boundary case 3: the RDD to be sorted has only 1 element + l2 <- list(list("a", 1)) + rdd6 <- parallelize(sc, l2, 2L) + sortedRdd6 <- sortByKey(rdd6) + actual <- collect(sortedRdd6) + expect_equal(actual, l2) + + # boundary case 4: the RDD to be sorted has 0 element + l3 <- list() + rdd7 <- parallelize(sc, l3, 2L) + sortedRdd7 <- sortByKey(rdd7) + actual <- collect(sortedRdd7) + expect_equal(actual, l3) +}) + +test_that("collectAsMap() on a pairwise RDD", { + rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) + vals <- collectAsMap(rdd) + expect_equal(vals, list(`1` = 2, `3` = 4)) + + rdd <- parallelize(sc, list(list("a", 1), list("b", 2))) + vals <- collectAsMap(rdd) + expect_equal(vals, list(a = 1, b = 2)) + + rdd <- parallelize(sc, list(list(1.1, 2.2), list(1.2, 2.4))) + vals <- collectAsMap(rdd) + expect_equal(vals, list(`1.1` = 2.2, `1.2` = 2.4)) + + rdd <- parallelize(sc, list(list(1, "a"), list(2, "b"))) + vals <- collectAsMap(rdd) + expect_equal(vals, list(`1` = "a", `2` = "b")) +}) diff --git a/pkg/man/aggregateRDD.Rd b/pkg/man/aggregateRDD.Rd new file mode 100644 index 0000000000000..16a0fbe4cb3b3 --- /dev/null +++ b/pkg/man/aggregateRDD.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{aggregateRDD} +\alias{aggregateRDD} +\alias{aggregateRDD,RDD,RDD-method} +\alias{aggregateRDD,RDD-method} +\title{Aggregate an RDD using the given combine functions and a neutral "zero value".} +\usage{ +aggregateRDD(rdd, zeroValue, seqOp, combOp) + +\S4method{aggregateRDD}{RDD}(rdd, zeroValue, seqOp, combOp) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{zeroValue}{A neutral "zero value".} + +\item{seqOp}{A function to aggregate the RDD elements. It may return a different +result type from the type of the RDD elements.} + +\item{combOp}{A function to aggregate results of seqOp.} +} +\value{ +The aggregation result. +} +\description{ +Aggregate the elements of each partition, and then the results for all the +partitions, using given combine functions and a neutral "zero value". +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1, 2, 3, 4)) +zeroValue <- list(0, 0) +seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) +} +} +\seealso{ +reduce +} + diff --git a/pkg/man/collect-methods.Rd b/pkg/man/collect-methods.Rd index dd2c5eaae9544..f64e4a3217904 100644 --- a/pkg/man/collect-methods.Rd +++ b/pkg/man/collect-methods.Rd @@ -1,9 +1,12 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R \docType{methods} \name{collect,DataFrame-method} \alias{collect} \alias{collect,DataFrame-method} \alias{collect,RDD-method} +\alias{collectAsMap} +\alias{collectAsMap,RDD-method} \alias{collectPartition} \alias{collectPartition,RDD,integer-method} \alias{collectPartition,integer,RDD-method} @@ -18,6 +21,10 @@ collect(rdd, ...) collectPartition(rdd, partitionId) \S4method{collectPartition}{RDD,integer}(rdd, partitionId) + +collectAsMap(rdd) + +\S4method{collectAsMap}{RDD}(rdd) } \arguments{ \item{rdd}{The RDD to collect} @@ -40,6 +47,9 @@ Returns a list of Row objects from a DataFrame \code{collectPartition} returns a list that contains all of the elements in the specified partition of the RDD. + +\code{collectAsMap} returns a named list as a map that contains all of the elements +in a key-value pair RDD. } \examples{ \dontrun{ @@ -48,5 +58,10 @@ rdd <- parallelize(sc, 1:10, 2L) collect(rdd) # list from 1 to 10 collectPartition(rdd, 0L) # list from 1 to 5 } +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) +collectAsMap(rdd) # list(`1` = 2, `3` = 4) +} } diff --git a/pkg/man/fold.Rd b/pkg/man/fold.Rd new file mode 100644 index 0000000000000..f2253d3f34fa9 --- /dev/null +++ b/pkg/man/fold.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{fold} +\alias{fold} +\alias{fold,RDD,RDD-method} +\alias{fold,RDD-method} +\title{Fold an RDD using a given associative function and a neutral "zero value".} +\usage{ +fold(rdd, zeroValue, op) + +\S4method{fold}{RDD}(rdd, zeroValue, op) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{zeroValue}{A neutral "zero value".} + +\item{op}{An associative function for the folding operation.} +} +\value{ +The folding result. +} +\description{ +Aggregate the elements of each partition, and then the results for all the +partitions, using a given associative function and a neutral "zero value". +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) +fold(rdd, 0, "+") # 15 +} +} +\seealso{ +reduce +} + diff --git a/pkg/man/fullOuterJoin.Rd b/pkg/man/fullOuterJoin.Rd deleted file mode 100644 index eef2391e323fe..0000000000000 --- a/pkg/man/fullOuterJoin.Rd +++ /dev/null @@ -1,44 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{fullOuterJoin} -\alias{fullOuterJoin} -\alias{fullOuterJoin,RDD,RDD,integer-method} -\alias{fullOuterJoin,RDD,RDD-method} -\title{Full outer join two RDDs} -\usage{ -fullOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{fullOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD - will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and - (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements - in rdd1/rdd2 have key k. -} -\description{ -This function full-outer-joins two RDDs where every element is of the form -list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) -rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), - # list(1, list(3, 1)), - # list(3, list(3, NULL)), - # list(2, list(NULL, 4))) -} -} - diff --git a/pkg/man/join-methods.Rd b/pkg/man/join-methods.Rd new file mode 100644 index 0000000000000..11229a4e61ef9 --- /dev/null +++ b/pkg/man/join-methods.Rd @@ -0,0 +1,129 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/pairRDD.R +\docType{methods} +\name{join} +\alias{fullOuterJoin} +\alias{fullOuterJoin,RDD,RDD,integer-method} +\alias{fullOuterJoin,RDD,RDD-method} +\alias{join} +\alias{join,RDD,RDD,integer-method} +\alias{join,RDD,RDD-method} +\alias{leftOuterJoin} +\alias{leftOuterJoin,RDD,RDD,integer-method} +\alias{leftOuterJoin,RDD,RDD-method} +\alias{rightOuterJoin} +\alias{rightOuterJoin,RDD,RDD,integer-method} +\alias{rightOuterJoin,RDD,RDD-method} +\title{Join two RDDs} +\usage{ +join(rdd1, rdd2, numPartitions) + +\S4method{join}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) + +leftOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{leftOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) + +rightOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{rightOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) + +fullOuterJoin(rdd1, rdd2, numPartitions) + +\S4method{fullOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) +} +\arguments{ +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} + +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} + +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} + +\item{rdd1}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{rdd2}{An RDD to be joined. Should be an RDD where each element is +list(K, V).} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +a new RDD containing all pairs of elements with matching keys in + two input RDDs. + +For each element (k, v) in rdd1, the resulting RDD will either contain + all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) + if no elements in rdd2 have key k. + +For each element (k, w) in rdd2, the resulting RDD will either contain + all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) + if no elements in rdd1 have key k. + +For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD + will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and + (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements + in rdd1/rdd2 have key k. +} +\description{ +\code{join} This function joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. + +\code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. + +\code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. + +\code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). +The key types of the two RDDs should be the same. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) +} +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +leftOuterJoin(rdd1, rdd2, 2L) +# list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +} +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) +rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +rightOuterJoin(rdd1, rdd2, 2L) +# list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +} +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) +rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), + # list(1, list(3, 1)), + # list(2, list(NULL, 4))) + # list(3, list(3, NULL)), +} +} + diff --git a/pkg/man/join.Rd b/pkg/man/join.Rd deleted file mode 100644 index f406d90ec6a46..0000000000000 --- a/pkg/man/join.Rd +++ /dev/null @@ -1,38 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{join} -\alias{join} -\alias{join,RDD,RDD,integer-method} -\alias{join,RDD,RDD-method} -\title{Join two RDDs} -\usage{ -join(rdd1, rdd2, numPartitions) - -\S4method{join}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -a new RDD containing all pairs of elements with matching keys in - two input RDDs. -} -\description{ -This function joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) -} -} - diff --git a/pkg/man/leftOuterJoin.Rd b/pkg/man/leftOuterJoin.Rd deleted file mode 100644 index d04f4e6f8ea35..0000000000000 --- a/pkg/man/leftOuterJoin.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{leftOuterJoin} -\alias{leftOuterJoin} -\alias{leftOuterJoin,RDD,RDD,integer-method} -\alias{leftOuterJoin,RDD,RDD-method} -\title{Left outer join two RDDs} -\usage{ -leftOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{leftOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -For each element (k, v) in rdd1, the resulting RDD will either contain - all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) - if no elements in rdd2 have key k. -} -\description{ -This function left-outer-joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -leftOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) -} -} - diff --git a/pkg/man/reduceByKeyLocally.Rd b/pkg/man/reduceByKeyLocally.Rd new file mode 100644 index 0000000000000..f13c296065649 --- /dev/null +++ b/pkg/man/reduceByKeyLocally.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{reduceByKeyLocally} +\alias{reduceByKeyLocally} +\alias{reduceByKeyLocally,RDD,integer-method} +\alias{reduceByKeyLocally,RDD-method} +\title{Merge values by key locally} +\usage{ +reduceByKeyLocally(rdd, combineFunc) + +\S4method{reduceByKeyLocally}{RDD}(rdd, combineFunc) +} +\arguments{ +\item{rdd}{The RDD to reduce by key. Should be an RDD where each element is +list(K, V) or c(K, V).} + +\item{combineFunc}{The associative reduce function to use.} +} +\value{ +A list of elements of type list(K, V') where V' is the merged value for each key +} +\description{ +This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +and merges the values for each key using an associative reduce function, but return the +results immediately to the driver as an R list. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +rdd <- parallelize(sc, pairs) +reduced <- reduceByKeyLocally(rdd, "+") +reduced # list(list(1, 6), list(1.1, 3)) +} +} +\seealso{ +reduceByKey +} + diff --git a/pkg/man/rightOuterJoin.Rd b/pkg/man/rightOuterJoin.Rd deleted file mode 100644 index 9e72859b6df17..0000000000000 --- a/pkg/man/rightOuterJoin.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{rightOuterJoin} -\alias{rightOuterJoin} -\alias{rightOuterJoin,RDD,RDD,integer-method} -\alias{rightOuterJoin,RDD,RDD-method} -\title{Right outer join two RDDs} -\usage{ -rightOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{rightOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -For each element (k, w) in rdd2, the resulting RDD will either contain - all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) - if no elements in rdd1 have key k. -} -\description{ -This function right-outer-joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) -rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rightOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) -} -} - diff --git a/pkg/man/sortBy.Rd b/pkg/man/sortBy.Rd new file mode 100644 index 0000000000000..d3a231c745240 --- /dev/null +++ b/pkg/man/sortBy.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{sortBy} +\alias{sortBy} +\alias{sortBy,RDD,RDD-method} +\alias{sortBy,RDD,function,missingOrLogical,missingOrInteger-method} +\title{Sort an RDD by the given key function.} +\usage{ +sortBy(rdd, func, ascending, numPartitions) + +\S4method{sortBy}{RDD,`function`,missingOrLogical,missingOrInteger}(rdd, func, + ascending, numPartitions) +} +\arguments{ +\item{rdd}{An RDD to be sorted.} + +\item{func}{A function used to compute the sort key for each element.} + +\item{ascending}{A flag to indicate whether the sorting is ascending or descending.} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +An RDD where all elements are sorted. +} +\description{ +Sort an RDD by the given key function. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(3, 2, 1)) +collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) +} +} + diff --git a/pkg/man/sortByKey.Rd b/pkg/man/sortByKey.Rd new file mode 100644 index 0000000000000..b39aff6ca8757 --- /dev/null +++ b/pkg/man/sortByKey.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{sortByKey} +\alias{sortByKey} +\alias{sortByKey,RDD,RDD-method} +\alias{sortByKey,RDD,missingOrLogical,missingOrInteger-method} +\title{Sort a (k, v) pair RDD by k.} +\usage{ +sortByKey(rdd, ascending, numPartitions) + +\S4method{sortByKey}{RDD,missingOrLogical,missingOrInteger}(rdd, ascending, + numPartitions) +} +\arguments{ +\item{rdd}{A (k, v) pair RDD to be sorted.} + +\item{ascending}{A flag to indicate whether the sorting is ascending or descending.} + +\item{numPartitions}{Number of partitions to create.} +} +\value{ +An RDD where all (k, v) pair elements are sorted. +} +\description{ +Sort a (k, v) pair RDD by k. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) +collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) +} +} + diff --git a/pkg/man/takeOrdered.Rd b/pkg/man/takeOrdered.Rd new file mode 100644 index 0000000000000..9ae2137abed21 --- /dev/null +++ b/pkg/man/takeOrdered.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{takeOrdered} +\alias{takeOrdered} +\alias{takeOrdered,RDD,RDD-method} +\alias{takeOrdered,RDD,integer-method} +\title{Returns the first N elements from an RDD in ascending order.} +\usage{ +takeOrdered(rdd, num) + +\S4method{takeOrdered}{RDD,integer}(rdd, num) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{num}{Number of elements to return.} +} +\value{ +The first N elements from the RDD in ascending order. +} +\description{ +Returns the first N elements from an RDD in ascending order. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) +} +} + diff --git a/pkg/man/top.Rd b/pkg/man/top.Rd new file mode 100644 index 0000000000000..627a43fd4ff71 --- /dev/null +++ b/pkg/man/top.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{top} +\alias{top} +\alias{top,RDD,RDD-method} +\alias{top,RDD,integer-method} +\title{Returns the top N elements from an RDD.} +\usage{ +top(rdd, num) + +\S4method{top}{RDD,integer}(rdd, num) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{num}{Number of elements to return.} +} +\value{ +The top N elements from the RDD. +} +\description{ +Returns the top N elements from an RDD. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) +} +} + diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 89eb10b23a293..e39d2acf8e8a3 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -117,68 +117,77 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( // Start a thread to feed the process input from our parent's iterator new Thread("stdin writer for R") { override def run() { - SparkEnv.set(env) - val streamStd = new BufferedOutputStream(proc.getOutputStream, bufferSize) - val printOutStd = new PrintStream(streamStd) - printOutStd.println(tempFileName) - printOutStd.println(rLibDir) - printOutStd.println(tempFileIn.getAbsolutePath()) - printOutStd.flush() - - streamStd.close() - - val stream = new BufferedOutputStream(new FileOutputStream(tempFileIn), bufferSize) - val printOut = new PrintStream(stream) - val dataOut = new DataOutputStream(stream) - - dataOut.writeInt(splitIndex) - - dataOut.writeInt(func.length) - dataOut.write(func, 0, func.length) - - // R worker process input serialization flag - dataOut.writeInt(if (parentSerialized) 1 else 0) - // R worker process output serialization flag - dataOut.writeInt(if (dataSerialized) 1 else 0) - - dataOut.writeInt(packageNames.length) - dataOut.write(packageNames, 0, packageNames.length) - - dataOut.writeInt(functionDependencies.length) - dataOut.write(functionDependencies, 0, functionDependencies.length) - - dataOut.writeInt(broadcastVars.length) - broadcastVars.foreach { broadcast => - // TODO(shivaram): Read a Long in R to avoid this cast - dataOut.writeInt(broadcast.id.toInt) - // TODO: Pass a byte array from R to avoid this cast ? - val broadcastByteArr = broadcast.value.asInstanceOf[Array[Byte]] - dataOut.writeInt(broadcastByteArr.length) - dataOut.write(broadcastByteArr, 0, broadcastByteArr.length) - } - - dataOut.writeInt(numPartitions) + try { + SparkEnv.set(env) + val stream = new BufferedOutputStream(new FileOutputStream(tempFileIn), bufferSize) + val printOut = new PrintStream(stream) + val dataOut = new DataOutputStream(stream) + + dataOut.writeInt(splitIndex) + + dataOut.writeInt(func.length) + dataOut.write(func, 0, func.length) + + // R worker process input serialization flag + dataOut.writeInt(if (parentSerialized) 1 else 0) + // R worker process output serialization flag + dataOut.writeInt(if (dataSerialized) 1 else 0) + + dataOut.writeInt(packageNames.length) + dataOut.write(packageNames, 0, packageNames.length) + + dataOut.writeInt(functionDependencies.length) + dataOut.write(functionDependencies, 0, functionDependencies.length) + + dataOut.writeInt(broadcastVars.length) + broadcastVars.foreach { broadcast => + // TODO(shivaram): Read a Long in R to avoid this cast + dataOut.writeInt(broadcast.id.toInt) + // TODO: Pass a byte array from R to avoid this cast ? + val broadcastByteArr = broadcast.value.asInstanceOf[Array[Byte]] + dataOut.writeInt(broadcastByteArr.length) + dataOut.write(broadcastByteArr, 0, broadcastByteArr.length) + } - if (!iter.hasNext) { - dataOut.writeInt(0) - } else { - dataOut.writeInt(1) - } + dataOut.writeInt(numPartitions) - for (elem <- iter) { - if (parentSerialized) { - val elemArr = elem.asInstanceOf[Array[Byte]] - dataOut.writeInt(elemArr.length) - dataOut.write(elemArr, 0, elemArr.length) + if (!iter.hasNext) { + dataOut.writeInt(0) } else { - printOut.println(elem) + dataOut.writeInt(1) + } + + for (elem <- iter) { + if (parentSerialized) { + val elemArr = elem.asInstanceOf[Array[Byte]] + dataOut.writeInt(elemArr.length) + dataOut.write(elemArr, 0, elemArr.length) + } else { + printOut.println(elem) + } } - } - printOut.flush() - dataOut.flush() - stream.flush() - stream.close() + printOut.flush() + dataOut.flush() + stream.flush() + stream.close() + + // NOTE: We need to write out the temp file before writing out the + // file name to stdin. Otherwise the R process could read partial state + val streamStd = new BufferedOutputStream(proc.getOutputStream, bufferSize) + val printOutStd = new PrintStream(streamStd) + printOutStd.println(tempFileName) + printOutStd.println(rLibDir) + printOutStd.println(tempFileIn.getAbsolutePath()) + printOutStd.flush() + + streamStd.close() + } catch { + // TODO: We should propogate this error to the task thread + case e: Exception => + System.err.println("R Writer thread got an exception " + e) + e.printStackTrace() + } } }.start() From 5d537f41780a0e3f3eecd8c019554b392acc4b93 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 16 Feb 2015 13:25:13 -0600 Subject: [PATCH 424/687] Add pairRDD to Description --- pkg/DESCRIPTION | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 888bb3e34b44c..e9ca14149981a 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -17,6 +17,7 @@ License: Apache License (== 2.0) Collate: 'jobj.R' 'RDD.R' + 'pairRDD.R' 'DataFrame.R' 'SQLContext.R' 'broadcast.R' From 5292be71de95b4861a8eb31f59752ef949e98d2e Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 16 Feb 2015 16:05:11 -0500 Subject: [PATCH 425/687] Adds support of pipeRDD(). --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 37 +++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 12 ++++++++++++ pkg/man/pipeRDD.Rd | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 pkg/man/pipeRDD.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 1fa1336674750..dbe05ea3f8df2 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -41,6 +41,7 @@ exportMethods( "numPartitions", "partitionBy", "persist", + "pipeRDD", "reduce", "reduceByKey", "reduceByKeyLocally", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c54abae2666a2..8af5d3608f295 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1275,6 +1275,43 @@ setMethod("aggregateRDD", Reduce(combOp, partitionList, zeroValue) }) +#' Pipes elements to a forked externel process. +#' +#' The same as 'pipe()' in Spark. +#' +#' @param rdd The RDD whose elements are piped to the forked externel process. +#' @param command The command to fork an externel process. +#' @param env A named list to set environment variables of the externel process. +#' @return A new RDD created by piping all elements to a forked externel process. +#' @rdname pipeRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' collect(pipeRDD(rdd, "more") +#' Output: c("1", "2", ..., "10") +#'} +setGeneric("pipeRDD", function(rdd, command, env = list()) { + standardGeneric("pipeRDD") +}) + +#' @rdname pipeRDD +#' @aliases pipeRDD,RDD,character-method +setMethod("pipeRDD", + signature(rdd = "RDD", command = "character"), + function(rdd, command, env = list()) { + func <- function(part) { + trim.trailing.func <- function(x) { + sub("[\r\n]*$", "", toString(x)) + } + input <- unlist(lapply(part, trim.trailing.func)) + res <- system2(command, stdout = TRUE, input = input, env = env) + lapply(res, trim.trailing.func) + } + lapplyPartition(rdd, func) + }) + # TODO: Consider caching the name in the RDD's environment #' Return an RDD's name. #' diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 89d7890fbf685..fa2a2959c6913 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -336,6 +336,18 @@ test_that("values() on RDDs", { expect_equal(actual, lapply(intPairs, function(x) { x[[2]] })) }) +test_that("pipeRDD() on RDDs", { + actual <- collect(pipeRDD(rdd, "more")) + expected <- as.list(as.character(1:10)) + expect_equal(actual, expected) + + rev.nums <- 9:0 + rev.rdd <- parallelize(sc, rev.nums, 2L) + actual <- collect(pipeRDD(rev.rdd, "sort")) + expected <- as.list(as.character(c(5:9, 0:4))) + expect_equal(actual, expected) +}) + test_that("join() on pairwise RDDs", { rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) rdd2 <- parallelize(sc, list(list(1,2), list(1,3))) diff --git a/pkg/man/pipeRDD.Rd b/pkg/man/pipeRDD.Rd new file mode 100644 index 0000000000000..e930fe0a65a84 --- /dev/null +++ b/pkg/man/pipeRDD.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{pipeRDD} +\alias{pipeRDD} +\alias{pipeRDD,RDD,character-method} +\title{Pipes elements to a forked externel process.} +\usage{ +pipeRDD(rdd, command, env = list()) + +\S4method{pipeRDD}{RDD,character}(rdd, command, env = list()) +} +\arguments{ +\item{rdd}{The RDD whose elements are piped to the forked externel process.} + +\item{command}{The command to fork an externel process.} + +\item{env}{A named list to set environment variables of the externel process.} +} +\value{ +A new RDD created by piping all elements to a forked externel process. +} +\description{ +The same as 'pipe()' in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +collect(pipeRDD(rdd, "more") +Output: c("1", "2", ..., "10") +} +} + From e004481e9b9105e3c8e594d8ba9d642fc6a412cb Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 14:12:49 -0600 Subject: [PATCH 426/687] Update UnionRDD test Changed serialization check to look for a specific string. --- pkg/inst/tests/test_binary_function.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_binary_function.R b/pkg/inst/tests/test_binary_function.R index 6a60686abaaf0..b3c1df33c68cf 100644 --- a/pkg/inst/tests/test_binary_function.R +++ b/pkg/inst/tests/test_binary_function.R @@ -21,7 +21,7 @@ test_that("union on two RDDs", { union.rdd <- unionRDD(rdd, text.rdd) actual <- collect(union.rdd) expect_equal(actual, c(as.list(nums), mockFile)) - expect_true(union.rdd@env$serialized) + expect_true(union.rdd@env$serialized == "byte") unlink(fileName) }) From 26af62b789595e3abd9ae95a4421c217bcb376e5 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 14:19:49 -0600 Subject: [PATCH 427/687] DataFrame to RRDD Updates to multiple files to allow for converting DataFrames to RRDDs. RDD now has a new slot for colNames and the serialization type is now a string rather than boolean. Worker.R and Utils.R have been updated accordingly to handle the third serialization type and the presence of colNames in some RRDDs. RRDD.scala has been updated to handle the new serialization type as well. --- pkg/R/DataFrame.R | 193 ++++++++++++++++-- pkg/R/RDD.R | 53 +++-- pkg/R/deserialize.R | 45 ++++ pkg/R/utils.R | 92 +++++---- pkg/inst/worker/worker.R | 14 +- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 57 ++++-- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 66 +++++- 7 files changed, 420 insertions(+), 100 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 67ad9386cb64c..e299cdb23a49b 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -1,6 +1,6 @@ # DataFrame.R - DataFrame class and methods implemented in S4 OO classes -#' @include jobj.R RDD.R +#' @include jobj.R RDD.R pairRDD.R NULL setOldClass("jobj") @@ -114,20 +114,189 @@ setMethod("count", callJMethod(sdf, "count") }) -#' Collect elements of a DataFrame -#' -#' Returns a list of Row objects from a DataFrame -#' -#' @param df A SparkSQL DataFrame -#' +# Collect the rows of a Spark DataFrame and return a named list for each row. + #' @rdname collect-methods #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' collected <- collect(df) +#' firstName <- collected[[1]]$name +#' } -# TODO: Collect() currently returns a list of Generic Row objects and is WIP. This will eventually -# be part of the process to read a DataFrame into R and create a data.frame. setMethod("collect", signature(rdd = "DataFrame"), - function(rdd){ - sdf <- rdd@sdf - listObj <- callJMethod(sdf, "collect") + function(rdd) { + rddIn <- toRDD(rdd) + collect(rddIn) + }) + +# Take the first NUM elements in a DataFrame and return a named list for each row. + +#' @rdname take +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' take(df, 2) +#' } + +setMethod("take", + signature(rdd = "DataFrame", num = "numeric"), + function(rdd, num) { + rddIn <- toRDD(rdd) + take(rddIn, num) + }) + +#' toRDD() +#' +#' Converts a Spark DataFrame to an RDD while preserving column names. +#' +#' @param df A Spark DataFrame +#' +#' @rdname DataFrame +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' rdd <- toRDD(df) +#' } + +setGeneric("toRDD", function(df) { standardGeneric("toRDD") }) + +setMethod("toRDD", + signature(df = "DataFrame"), + function(df) { + jrdd <- SparkR:::callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", df@sdf) + names <- SparkR:::callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) + SparkR:::RDD(jrdd, serialized = "rows", colNames = names) + }) + +############################## RDD Map Functions ################################## +# All of the following functions mirror the existing RDD map functions, # +# but allow for use with DataFrames by first converting to an RRDD before calling # +# the requested map function. # +################################################################################### + +setMethod("lapply", + signature(X = "DataFrame", FUN = "function"), + function(X, FUN) { + rdd <- toRDD(X) + lapply(rdd, FUN) + }) + +setMethod("map", + signature(X = "DataFrame", FUN = "function"), + function(X, FUN) { + lapply(X, FUN) + }) + +setMethod("flatMap", + signature(X = "DataFrame", FUN = "function"), + function(X, FUN) { + rdd <- toRDD(X) + flatMap(rdd, FUN) + }) + +setMethod("lapplyPartition", + signature(X = "DataFrame", FUN = "function"), + function(X, FUN) { + rdd <- toRDD(X) + lapplyPartition(rdd, FUN) + }) + +setMethod("mapPartitions", + signature(X = "DataFrame", FUN = "function"), + function(X, FUN) { + lapplyPartition(X, FUN) + }) + +setMethod("lapplyPartitionsWithIndex", + signature(X = "DataFrame", FUN = "function"), + function(X, FUN) { + rdd <- toRDD(X) + lapplyPartitionsWithIndex(rdd, FUN) + }) + +setMethod("mapPartitionsWithIndex", + signature(X = "DataFrame", FUN = "function"), + function(X, FUN){ + lapplyPartitionsWithIndex(X, FUN) + }) + +setMethod("foreach", + signature(rdd = "DataFrame", func = "function"), + function(rdd, func) { + rddIn <- toRDD(rdd) + foreach(rddIn, func) + }) + +setMethod("foreachPartition", + signature(rdd = "DataFrame", func = "function"), + function(rdd, func) { + rddIn <- toRDD(rdd) + foreachPartition(rddIn, func) + }) + +#' Collect to DataFrame +#' +#' Collects all the elements of a Spark DataFrame and coerces them into an R data.frame. +#' +#' @param df A Spark DataFrame +#' @return An R data.frame +#' +#' @rdname collectToDF +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' converted <- collectToDF(df) +#' is.data.frame(converted) +#' } + +setGeneric("collectToDF", function(df) { standardGeneric("collectToDF") }) + +setMethod("collectToDF", + signature(df = "DataFrame"), + function(df) { + listCols <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToColRDD", df@sdf) + cols <- lapply(seq_along(listCols), + function(colIdx) { + rddCol <- listCols[[colIdx]] + rddRaw <- callJMethod(rddCol, "collect") # Returns a list of byte arrays per partition + colPartitions <- lapply(seq_along(rddRaw), + function(partIdx) { + objRaw <- rawConnection(rddRaw[[partIdx]]) + numRows <- readInt(objRaw) + col <- readCol(objRaw, numRows) # List of deserialized values per partition + close(objRaw) + col + }) + colOut <- unlist(colPartitions, recursive = FALSE) # Flatten column list into a vector + }) + colNames <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) + names(cols) <- colNames + dfOut <- do.call(cbind.data.frame, cols) }) + +# Take a single column as Array[Byte] and deserialize it into an atomic vector +readCol <- function(rawCon, numRows) { + sapply(1:numRows, function(x) { + value <- readObject(rawCon) + # Replace NULL with NA so we can coerce to vectors + if (is.null(value)) NA else value + }) # each column is an atomic vector now +} diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c54abae2666a2..e698b5bd5ed89 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -13,7 +13,8 @@ setOldClass("jobj") #' @export setClass("RDD", slots = list(env = "environment", - jrdd = "jobj")) + jrdd = "jobj", + colNames = "list")) setClass("PipelinedRDD", slots = list(prev = "RDD", @@ -23,7 +24,7 @@ setClass("PipelinedRDD", setMethod("initialize", "RDD", function(.Object, jrdd, serialized, - isCached, isCheckpointed) { + isCached, isCheckpointed, colNames) { # We use an environment to store mutable states inside an RDD object. # Note that R's call-by-value semantics makes modifying slots inside an # object (passed as an argument into a function, such as cache()) difficult: @@ -37,6 +38,8 @@ setMethod("initialize", "RDD", function(.Object, jrdd, serialized, .Object@env$isCheckpointed <- isCheckpointed .Object@env$serialized <- serialized + .Object@colNames <- colNames + .Object@jrdd <- jrdd .Object }) @@ -48,6 +51,8 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@env$jrdd_val <- jrdd_val # This tracks if jrdd_val is serialized .Object@env$serialized <- prev@env$serialized + + .Object@colNames <- prev@colNames # NOTE: We use prev_serialized to track if prev_jrdd is serialized # prev_serialized is used during the delayed computation of JRDD in getJRDD @@ -65,6 +70,8 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) # Since this is the first step in the pipeline, the prev_serialized # is same as serialized here. .Object@env$prev_serialized <- .Object@env$serialized + + .Object@colNames <- prev@colNames } else { pipelinedFunc <- function(split, iterator) { func(split, prev@func(split, iterator)) @@ -73,12 +80,13 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@prev_jrdd <- prev@prev_jrdd # maintain the pipeline # Get if the prev_jrdd was serialized from the parent RDD .Object@env$prev_serialized <- prev@env$prev_serialized + + .Object@colNames <- prev@colNames } .Object }) - #' @rdname RDD #' @export #' @@ -86,21 +94,20 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) #' @param serialized TRUE if the RDD stores data serialized in R #' @param isCached TRUE if the RDD is cached #' @param isCheckpointed TRUE if the RDD has been checkpointed -RDD <- function(jrdd, serialized = TRUE, isCached = FALSE, - isCheckpointed = FALSE) { - new("RDD", jrdd, serialized, isCached, isCheckpointed) +RDD <- function(jrdd, serialized = "byte", isCached = FALSE, + isCheckpointed = FALSE, colNames = list()) { + new("RDD", jrdd, serialized, isCached, isCheckpointed, colNames) } PipelinedRDD <- function(prev, func) { new("PipelinedRDD", prev, func, NULL) } - # The jrdd accessor function. setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) setMethod("getJRDD", signature(rdd = "RDD"), function(rdd) rdd@jrdd ) setMethod("getJRDD", signature(rdd = "PipelinedRDD"), - function(rdd, dataSerialization = TRUE) { + function(rdd, dataSerialization = "byte") { if (!is.null(rdd@env$jrdd_val)) { return(rdd@env$jrdd_val) } @@ -124,8 +131,8 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), prev_jrdd <- rdd@prev_jrdd - if (dataSerialization) { - rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", + if (dataSerialization == "string") { + rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, rdd@env$prev_serialized, @@ -133,9 +140,10 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), packageNamesArr, as.character(.sparkREnv[["libname"]]), broadcastArr, + rdd@colNames, callJMethod(prev_jrdd, "classTag")) } else { - rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", + rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, rdd@env$prev_serialized, @@ -143,6 +151,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), packageNamesArr, as.character(.sparkREnv[["libname"]]), broadcastArr, + rdd@colNames, callJMethod(prev_jrdd, "classTag")) } # Save the serialization flag after we create a RRDD @@ -151,7 +160,6 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), rdd@env$jrdd_val }) - setValidity("RDD", function(object) { jrdd <- getJRDD(object) @@ -355,7 +363,8 @@ setMethod("collect", function(rdd, flatten = TRUE) { # Assumes a pairwise RDD is backed by a JavaPairRDD. collected <- callJMethod(getJRDD(rdd), "collect") - convertJListToRList(collected, flatten) + convertJListToRList(collected, flatten, + serialized = rdd@env$serialized, colNames = rdd@colNames) }) @@ -380,7 +389,8 @@ setMethod("collectPartition", as.list(as.integer(partitionId))) jList <- jPartitionsList[[1]] - convertJListToRList(jList, flatten = TRUE) + convertJListToRList(jList, flatten = TRUE, + serialized = rdd@env$serialized, colNames = rdd@colNames) }) #' @rdname collect-methods @@ -836,7 +846,8 @@ setMethod("take", elems <- convertJListToRList(partition, flatten = TRUE, logicalUpperBound = size, - serialized = rdd@env$serialized) + serialized = rdd@env$serialized, + colNames = rdd@colNames) # TODO: Check if this append is O(n^2)? resList <- append(resList, elems) } @@ -1063,7 +1074,7 @@ setMethod("saveAsObjectFile", function(rdd, path) { # If the RDD is in string format, need to serialize it before saving it because when # objectFile() is invoked to load the saved file, only serialized format is assumed. - if (!rdd@env$serialized) { + if (rdd@env$serialized == "string") { rdd <- reserialize(rdd) } # Return nothing @@ -1095,7 +1106,7 @@ setMethod("saveAsTextFile", stringRdd <- lapply(rdd, func) # Return nothing invisible( - callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path)) + callJMethod(getJRDD(stringRdd, dataSerialization = "string"), "saveAsTextFile", path)) }) #' Sort an RDD by the given key function. @@ -1348,16 +1359,16 @@ setMethod("unionRDD", function(x, y) { if (x@env$serialized == y@env$serialized) { jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) - union.rdd <- RDD(jrdd, x@env$serialized) + union.rdd <- RDD(jrdd, x@env$serialized, colNames = x@colNames) } else { # One of the RDDs is not serialized, we need to serialize it first. - if (!x@env$serialized) { + if (x@env$serialized == "string") { x <- reserialize(x) - } else { + } else if (y@env$serialized == "string") { y <- reserialize(y) } jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) - union.rdd <- RDD(jrdd, TRUE) + union.rdd <- RDD(jrdd, "byte") } union.rdd }) diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index bb35387959ab3..c7fed6aaa1be4 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -101,3 +101,48 @@ readDeserialize <- function(con) { } } +readDeserializeRows <- function(inputCon) { + # readDeserializeRows will deserialize a DataOutputStream composed of + # a list of lists. Since the DOS is one continuous stream and + # the number of rows varies, we put the readRow function in a while loop + # that termintates when the next row is empty. + colNames <- readList(inputCon) + + data <- list() + numCols <- readInt(inputCon) + # We write a length for each row out + while(length(numCols) > 0 && numCols > 0) { + data[[length(data) + 1L]] <- readRow(inputCon, numCols) + numCols <- readInt(inputCon) + } + dataOut <- lapply(data, assignNames, colNames) + dataOut # this is a list of named lists now +} + +readRowList <- function(obj) { + # readRowList is meant for use inside an lapply. As a result, it is + # necessary to open a standalone connection for the row and consume + # the numCols bytes inside the read function in order to correctly + # deserialize the row. + rawObj <- rawConnection(obj, "r+") + numCols <- SparkR:::readInt(rawObj) + rowOut <- SparkR:::readRow(rawObj, numCols) + close(rawObj) + rowOut +} + +readRow <- function(inputCon, numCols) { + lapply(1:numCols, function(x) { + obj <- readObject(inputCon) + if (is.null(obj)) { + NA + } else { + obj + } + }) # each row is a list now +} + +assignNames <- function(row, colNames) { + names(row) <- colNames + row +} diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 778ae67def047..849c8ce08ece4 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -3,56 +3,68 @@ # Given a JList, returns an R list containing the same elements, the number # of which is optionally upper bounded by `logicalUpperBound` (by default, # return all elements). Takes care of deserializations and type conversions. -convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serialized = TRUE) { +convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, + serialized = "byte", colNames = list()) { arrSize <- callJMethod(jList, "size") # Unserialized datasets (such as an RDD directly generated by textFile()): # each partition is not dense-packed into one Array[Byte], and `arrSize` # here corresponds to number of logical elements. Thus we can prune here. - if (!serialized && !is.null(logicalUpperBound)) { + if (serialized == "string" && !is.null(logicalUpperBound)) { arrSize <- min(arrSize, logicalUpperBound) } results <- if (arrSize > 0) { lapply(0:(arrSize - 1), - function(index) { - obj <- callJMethod(jList, "get", as.integer(index)) + function(index) { + obj <- callJMethod(jList, "get", as.integer(index)) - # Assume it is either an R object or a Java obj ref. - if (inherits(obj, "jobj")) { - if (isInstanceOf(obj, "scala.Tuple2")) { - # JavaPairRDD[Array[Byte], Array[Byte]]. + # Assume it is either an R object or a Java obj ref. + if (inherits(obj, "jobj")) { + if (isInstanceOf(obj, "scala.Tuple2")) { + # JavaPairRDD[Array[Byte], Array[Byte]]. - keyBytes = callJMethod(obj, "_1") - valBytes = callJMethod(obj, "_2") - res <- list(unserialize(keyBytes), - unserialize(valBytes)) - } else { - stop(paste("utils.R: convertJListToRList only supports", - "RDD[Array[Byte]] and", - "JavaPairRDD[Array[Byte], Array[Byte]] for now")) - } - } else { - if (inherits(obj, "raw")) { - # RDD[Array[Byte]]. `obj` is a whole partition. - res <- unserialize(obj) - # For serialized datasets, `obj` (and `rRaw`) here corresponds to - # one whole partition dense-packed together. We deserialize the - # whole partition first, then cap the number of elements to be returned. - - # TODO: is it possible to distinguish element boundary so that we can - # unserialize only what we need? - if (!is.null(logicalUpperBound)) { - res <- head(res, n = logicalUpperBound) + keyBytes = callJMethod(obj, "_1") + valBytes = callJMethod(obj, "_2") + res <- list(unserialize(keyBytes), + unserialize(valBytes)) + } else { + stop(paste("utils.R: convertJListToRList only supports", + "RDD[Array[Byte]] and", + "JavaPairRDD[Array[Byte], Array[Byte]] for now")) } - } else { - # obj is of a primitive Java type, is simplified to R's - # corresponding type. - res <- list(obj) - } - } - res - }) + } else { + if (inherits(obj, "raw")) { + if (serialized == "byte") { + # RDD[Array[Byte]]. `obj` is a whole partition. + res <- unserialize(obj) + # For serialized datasets, `obj` (and `rRaw`) here corresponds to + # one whole partition dense-packed together. We deserialize the + # whole partition first, then cap the number of elements to be returned. + } else { + res <- readRowList(obj) + # For DataFrames that have been converted to RRDDs, we call readRowList + # which will read in each row of the RRDD as a list and deserialize + # each element. + flatten <<- FALSE + # Use global assignment to change the flatten flag. This means + # we don't have to worry about the default argument in other functions + # e.g. collect + res <- assignNames(res, colNames) + } + # TODO: is it possible to distinguish element boundary so that we can + # unserialize only what we need? + if (!is.null(logicalUpperBound)) { + res <- head(res, n = logicalUpperBound) + } + } else { + # obj is of a primitive Java type, is simplified to R's + # corresponding type. + res <- list(obj) + } + } + res + }) } else { list() } @@ -164,11 +176,11 @@ reserialize <- function(rdd) { if (!inherits(rdd, "RDD")) { stop("Argument 'rdd' is not an RDD type.") } - if (rdd@env$serialized) { - return(rdd) - } else { + if (rdd@env$serialized == "string") { ser.rdd <- lapply(rdd, function(x) { x }) return(ser.rdd) + } else { + return(rdd) } } diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index c5457adcbc54d..6ded04cbfdf2d 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -26,7 +26,7 @@ execLen <- SparkR:::readInt(inputCon) execFunctionName <- unserialize(SparkR:::readRawLen(inputCon, execLen)) # read the isInputSerialized bit flag -isInputSerialized <- SparkR:::readInt(inputCon) +inputSerialization <- SparkR:::readString(inputCon) # read the isOutputSerialized bit flag isOutputSerialized <- SparkR:::readInt(inputCon) @@ -68,11 +68,13 @@ isEmpty <- SparkR:::readInt(inputCon) if (isEmpty != 0) { if (numPartitions == -1) { - if (isInputSerialized) { + if (inputSerialization == "byte") { # Now read as many characters as described in funcLen data <- SparkR:::readDeserialize(inputCon) - } else { + } else if (inputSerialization == "string") { data <- readLines(inputCon) + } else { + data <- SparkR:::readDeserializeRows(inputCon) } output <- do.call(execFunctionName, list(splitIndex, data)) if (isOutputSerialized) { @@ -81,11 +83,13 @@ if (isEmpty != 0) { SparkR:::writeStrings(outputCon, output) } } else { - if (isInputSerialized) { + if (inputSerialization == "byte") { # Now read as many characters as described in funcLen data <- SparkR:::readDeserialize(inputCon) - } else { + } else if (inputSerialization == "string") { data <- readLines(inputCon) + } else { + data <- SparkR:::readDeserializeRows(inputCon) } res <- new.env() diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index e39d2acf8e8a3..6c1f3f401d74c 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -16,12 +16,13 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], numPartitions: Int, func: Array[Byte], - parentSerialized: Boolean, + parentSerialized: String, dataSerialized: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Broadcast[Object]]) + broadcastVars: Array[Broadcast[Object]], + colNames: Array[String]) extends RDD[U](parent) { override def getPartitions = parent.partitions @@ -129,7 +130,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.write(func, 0, func.length) // R worker process input serialization flag - dataOut.writeInt(if (parentSerialized) 1 else 0) + SerDe.writeString(dataOut, parentSerialized) // R worker process output serialization flag dataOut.writeInt(if (dataSerialized) 1 else 0) @@ -157,13 +158,21 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(1) } - for (elem <- iter) { - if (parentSerialized) { - val elemArr = elem.asInstanceOf[Array[Byte]] - dataOut.writeInt(elemArr.length) - dataOut.write(elemArr, 0, elemArr.length) - } else { - printOut.println(elem) + if (parentSerialized == "rows") { + SerDe.writeStringArr(dataOut, colNames) + for (row <- iter) { + val rowArr = row.asInstanceOf[Array[Byte]] + dataOut.write(rowArr, 0, rowArr.length) + } + } else { + for (elem <- iter) { + if (parentSerialized == "byte") { + val elemArr = elem.asInstanceOf[Array[Byte]] + dataOut.writeInt(elemArr.length) + dataOut.write(elemArr, 0, elemArr.length) + } else { + printOut.println(elem) + } } } @@ -206,17 +215,19 @@ private class PairwiseRRDD[T: ClassTag]( parent: RDD[T], numPartitions: Int, hashFunc: Array[Byte], - parentSerialized: Boolean, + parentSerialized: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Object]) + broadcastVars: Array[Object], + colNames: Array[String]) extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, parentSerialized, true, functionDependencies, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), + colNames) { private var dataStream: DataInputStream = _ - + override protected def openDataStream(stdOutFileName: String) = { dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) dataStream @@ -251,17 +262,19 @@ private class PairwiseRRDD[T: ClassTag]( private class RRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], - parentSerialized: Boolean, + parentSerialized: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Object]) + broadcastVars: Array[Object], + colNames: Array[String]) extends BaseRRDD[T, Array[Byte]](parent, -1, func, parentSerialized, true, functionDependencies, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), + colNames) { private var dataStream: DataInputStream = _ - + override protected def openDataStream(stdOutFileName: String) = { dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) dataStream @@ -294,14 +307,16 @@ private class RRDD[T: ClassTag]( private class StringRRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], - parentSerialized: Boolean, + parentSerialized: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Object]) + broadcastVars: Array[Object], + colNames: Array[String]) extends BaseRRDD[T, String](parent, -1, func, parentSerialized, false, functionDependencies, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), + colNames) { private var dataStream: BufferedReader = _ diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 15e5c6637e47f..e6c14956f6b6b 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -1,10 +1,74 @@ package edu.berkeley.cs.amplab.sparkr import org.apache.spark.SparkContext -import org.apache.spark.sql.{SQLContext} +import org.apache.spark.rdd.RDD +import org.apache.spark.api.java.JavaRDD +import org.apache.spark.sql.{SQLContext, DataFrame, Row} +import org.apache.spark.sql.types.{StructType} + +import edu.berkeley.cs.amplab.sparkr.SerDe._ + +import java.io.ByteArrayOutputStream +import java.io.DataOutputStream object SQLUtils { def createSQLContext(sc: SparkContext): SQLContext = { new SQLContext(sc) } + + def getColNames(df: DataFrame): Array[String] = { + df.schema.fields.map(_.name) + } + + def dfToRowRDD(df: DataFrame): JavaRDD[Array[Byte]] = { + df.map(r => rowToRBytes(r)) + } + + def rowToRBytes(row: Row): Array[Byte] = { + val bos = new ByteArrayOutputStream() + val dos = new DataOutputStream(bos) + + SerDe.writeInt(dos, row.length) + (0 until row.length).map { idx => + val obj: Object = row(idx).asInstanceOf[Object] + SerDe.writeObject(dos, obj) + } + bos.toByteArray() + } + +// We convert the DataFrame into an array of RDDs one for each column +// Each RDD contains a serialized form of the column per partition. + def dfToColRDD(df: DataFrame): Array[RDD[Array[Byte]]] = { + val colRDDs = convertRowsToColumns(df) + val dfOut = colRDDs.map { col => + colToRBytes(col) + } + dfOut + } + + def convertRowsToColumns(df: DataFrame): Array[RDD[Any]] = { + val numCols = df.schema.fields.length + val colRDDs = (0 until numCols).map { colIdx => + df.map { row => + row(colIdx) + } + } + colRDDs.toArray + } + + def colToRBytes(col: RDD[Any]): RDD[Array[Byte]] = { + col.mapPartitions { iter => + val arr = iter.toArray // Array[Any] + val bos = new ByteArrayOutputStream() + val dos = new DataOutputStream(bos) + val numRowsInPartition = arr.length + + SerDe.writeInt(dos, numRowsInPartition) + arr.map { item => + val obj: Object = item.asInstanceOf[Object] + SerDe.writeObject(dos, obj) + } + Iterator.single(bos.toByteArray()) + } + } } From 9224989622fe5715a9d8abad5854e69be0f1130d Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 14:21:56 -0600 Subject: [PATCH 428/687] Various updates for DataFrame to RRDD Updated SparkSQL test and Namespace for new functions. Context.R includes the new serialization type. pairRDD.R has colNames added to the pairwiseRRDD constructor in partitionBy --- pkg/NAMESPACE | 6 ++-- pkg/R/context.R | 7 ++-- pkg/R/pairRDD.R | 1 + pkg/inst/tests/test_sparkSQL.R | 59 +++++++++++++++++++++++++++++++--- pkg/man/collectToDF.Rd | 27 ++++++++++++++++ 5 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 pkg/man/collectToDF.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index de0d3a25ce686..92cb3bee6f6cd 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -81,8 +81,10 @@ importFrom(methods, setGeneric, setMethod, setOldClass) exportClasses("DataFrame") -exportMethods("printSchema", - "registerTempTable") +exportMethods("collectToDF", + "printSchema", + "registerTempTable", + "toRDD") export("jsonFile", "parquetFile", diff --git a/pkg/R/context.R b/pkg/R/context.R index 095ad5528ee7f..90f338cea47f7 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -32,7 +32,8 @@ textFile <- function(sc, path, minSplits = NULL) { path <- paste(path, collapse = ",") jrdd <- callJMethod(sc, "textFile", path, getMinSplits(sc, minSplits)) - RDD(jrdd, FALSE) + # jrdd is of type JavaRDD[String] + RDD(jrdd, "string") } #' Load an RDD saved as a SequenceFile containing serialized objects. @@ -60,7 +61,7 @@ objectFile <- function(sc, path, minSplits = NULL) { jrdd <- callJMethod(sc, "objectFile", path, getMinSplits(sc, minSplits)) # Assume the RDD contains serialized R objects. - RDD(jrdd, TRUE) + RDD(jrdd, "byte") } #' Create an RDD from a homogeneous list or vector. @@ -112,7 +113,7 @@ parallelize <- function(sc, coll, numSlices = 1) { jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.RRDD", "createRDDFromArray", sc, serializedSlices) - RDD(jrdd, TRUE) + RDD(jrdd, "byte") } #' Include this specified package on all workers diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index eef111d309263..ede17e58e5127 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -234,6 +234,7 @@ setMethod("partitionBy", packageNamesArr, as.character(.sparkREnv$libname), broadcastArr, + rdd@colNames, callJMethod(jrdd, "classTag")) # Create a corresponding partitioner. diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 0ced32488b1a1..a73b24a6499bb 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -8,9 +8,9 @@ sc <- sparkR.init() sqlCtx <- sparkRSQL.init(sc) -mockLines <- c("{\"Name\":\"Michael\"}", - "{\"Name\":\"Andy\", \"Age\":30}", - "{\"Name\":\"Justin\", \"Age\":19}") +mockLines <- c("{\"name\":\"Michael\"}", + "{\"name\":\"Andy\", \"age\":30}", + "{\"name\":\"Justin\", \"age\":19}") jsonPath <- tempfile(pattern="sparkr-test", fileext=".tmp") writeLines(mockLines, jsonPath) @@ -23,7 +23,7 @@ test_that("jsonFile() on a local file returns a DataFrame", { test_that("registerTempTable() results in a queryable table and sql() results in a new DataFrame", { df <- jsonFile(sqlCtx, jsonPath) registerTempTable(df, "table1") - newdf <- sql(sqlCtx, "SELECT * FROM table1 where Name = 'Michael'") + newdf <- sql(sqlCtx, "SELECT * FROM table1 where name = 'Michael'") expect_true(inherits(newdf, "DataFrame")) expect_true(count(newdf) == 1) }) @@ -34,4 +34,55 @@ test_that("table() returns a new DataFrame", { expect_true(count(tabledf) == 3) }) +test_that("toRDD() returns an RRDD", { + df <- jsonFile(sqlCtx, jsonPath) + testRDD <- toRDD(df) + expect_true(inherits(testRDD, "RDD")) + expect_true(count(testRDD) == 3) +}) + +test_that("lapply() on a DataFrame returns an RDD with the correct columns", { + df <- jsonFile(sqlCtx, jsonPath) + testRDD <- lapply(df, function(row) { + row$newCol <- row$age + 5 + row + }) + expect_true(inherits(testRDD, "RDD")) + collected <- collect(testRDD) + expect_true(collected[[1]]$name == "Michael") + expect_true(collected[[2]]$newCol == "35") +}) + +test_that("collect() and take() on a DataFrame return the same number of rows and columns", { + df <- jsonFile(sqlCtx, jsonPath) + expect_true(length(collect(df)) == length(take(df, 10))) + expect_true(length(collect(df)[[1]]) == length(take(df, 10)[[1]])) +}) + +test_that("multiple pipeline transformations starting with a DataFrame result in an RDD with the correct values", { + df <- jsonFile(sqlCtx, jsonPath) + first <- lapply(df, function(row) { + row$age <- row$age + 5 + row + }) + second <- lapply(first, function(row) { + row$testCol <- if (row$age == 35 && !is.na(row$age)) TRUE else FALSE + row + }) + expect_true(inherits(second, "RDD")) + expect_true(count(second) == 3) + expect_true(collect(second)[[2]]$age == 35) + expect_true(collect(second)[[2]]$testCol) + expect_false(collect(second)[[3]]$testCol) +}) + +test_that("collectToDF() returns a data.frame", { + df <- jsonFile(sqlCtx, jsonPath) + rdf <- collectToDF(df) + expect_true(is.data.frame(rdf)) + expect_true(names(rdf)[1] == "age") + expect_true(nrow(rdf) == 3) + expect_true(ncol(rdf) == 2) +}) + unlink(jsonPath) diff --git a/pkg/man/collectToDF.Rd b/pkg/man/collectToDF.Rd new file mode 100644 index 0000000000000..229b5e93e82c0 --- /dev/null +++ b/pkg/man/collectToDF.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\name{collectToDF} +\alias{collectToDF} +\title{Collect to DataFrame} +\usage{ +collectToDF(df) +} +\arguments{ +\item{df}{A Spark DataFrame} +} +\value{ +An R data.frame +} +\description{ +Collects all the elements of a Spark DataFrame and coerces them into an R data.frame. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +converted <- collectToDF(df) +is.data.frame(converted) +} +} + From 77fec1a2a08c59e6fdbf33a972fea787cabdb4d6 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 17:13:19 -0600 Subject: [PATCH 429/687] Updated .Rd files Updated for new functionality, specifically the RDD refactor and DataFrame to RRDD functions --- pkg/man/DataFrame.Rd | 16 ++++++++++++++++ pkg/man/RDD.Rd | 6 ++++-- pkg/man/sparkRSQL.init.Rd | 8 +++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/pkg/man/DataFrame.Rd b/pkg/man/DataFrame.Rd index a699d8ea97eaf..7425e1f8d0864 100644 --- a/pkg/man/DataFrame.Rd +++ b/pkg/man/DataFrame.Rd @@ -3,18 +3,34 @@ \name{DataFrame-class} \alias{DataFrame-class} \alias{dataFrame} +\alias{toRDD} \title{S4 class that represents a DataFrame} \usage{ dataFrame(sdf) + +toRDD(df) } \arguments{ \item{sdf}{A Java object reference to the backing Scala SchemaRDD} +\item{df}{A Spark DataFrame} + \item{env}{An R environment that stores bookkeeping states of the DataFrame} } \description{ DataFrames can be created using functions like \code{jsonFile}, \code{table} etc. + +Converts a Spark DataFrame to an RDD while preserving column names. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +path <- "path/to/file.json" +df <- jsonFile(sqlCtx, path) +rdd <- toRDD(df) +} } \seealso{ jsonFile, table diff --git a/pkg/man/RDD.Rd b/pkg/man/RDD.Rd index 53d31950c08e0..85dbb58ea9e84 100644 --- a/pkg/man/RDD.Rd +++ b/pkg/man/RDD.Rd @@ -5,12 +5,14 @@ \alias{RDD-class} \title{S4 class that represents an RDD} \usage{ -RDD(jrdd, serialized = TRUE, isCached = FALSE, isCheckpointed = FALSE) +RDD(jrdd, serialized = "byte", isCached = FALSE, isCheckpointed = FALSE, + colNames = list()) } \arguments{ \item{jrdd}{Java object reference to the backing JavaRDD} -\item{serialized}{TRUE if the RDD stores data serialized in R} +\item{serialized}{"byte" if the RDD stores data serialized in R, "string" if the RDD stores strings, +and "rows" if the RDD stores the rows of a DataFrame} \item{isCached}{TRUE if the RDD is cached} diff --git a/pkg/man/sparkRSQL.init.Rd b/pkg/man/sparkRSQL.init.Rd index 574cec03bcf77..9e078fdda8985 100644 --- a/pkg/man/sparkRSQL.init.Rd +++ b/pkg/man/sparkRSQL.init.Rd @@ -1,7 +1,7 @@ % Generated by roxygen2 (4.0.2): do not edit by hand \name{sparkRSQL.init} \alias{sparkRSQL.init} -\title{Initialize a new Spark Context.} +\title{Initialize a new SQLContext.} \usage{ sparkRSQL.init(jsc) } @@ -12,4 +12,10 @@ sparkRSQL.init(jsc) This function creates a SparkContext from an existing JavaSparkContext and then uses it to initialize a new SQLContext } +\examples{ +\dontrun{ +sc <- sparkR.init() +sqlCtx <- sparkRSQL.init(sc) +} +} From 5ff63a2e1eadbdf6350a7621d217a19f99f76b47 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 17:13:54 -0600 Subject: [PATCH 430/687] Change test from boolean to string Updated the serialized tests to look for string values instead of checking for a boolean value --- pkg/inst/tests/test_utils.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 0a112254c7df1..9c92de9cdf4de 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -28,10 +28,10 @@ test_that("reserialize on RDD", { writeLines(mockFile, fileName) text.rdd <- textFile(sc, fileName) - expect_false(text.rdd@env$serialized) + expect_true(text.rdd@env$serialized == "string") ser.rdd <- reserialize(text.rdd) expect_equal(collect(ser.rdd), as.list(mockFile)) - expect_true(ser.rdd@env$serialized) + expect_true(ser.rdd@env$serialized == "byte") unlink(fileName) }) From d243dfbec76fdf9a41ad17eb9f7728be6839e9d7 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 17:14:16 -0600 Subject: [PATCH 431/687] Clean up code Remove SparkR::: from the code --- pkg/R/DataFrame.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index e299cdb23a49b..4a6b116a5d046 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -177,9 +177,9 @@ setGeneric("toRDD", function(df) { standardGeneric("toRDD") }) setMethod("toRDD", signature(df = "DataFrame"), function(df) { - jrdd <- SparkR:::callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", df@sdf) - names <- SparkR:::callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) - SparkR:::RDD(jrdd, serialized = "rows", colNames = names) + jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", df@sdf) + names <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) + RDD(jrdd, serialized = "rows", colNames = names) }) ############################## RDD Map Functions ################################## From 2f0c0b8c225d8f22551b6078938cb4d607d93dac Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 17:15:18 -0600 Subject: [PATCH 432/687] Add check for serialized type Added a stopifnot to check that the serialized parameter of the RDD constructor is of the right type since it has been changed from boolean to string. Also updated the roxygen documentation for the serialized parameter. --- pkg/R/RDD.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e698b5bd5ed89..2902162e0f848 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -25,6 +25,9 @@ setClass("PipelinedRDD", setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached, isCheckpointed, colNames) { + # Check that RDD constructor is using the correct version of serialized + stopifnot(class(serialized) == "character") + # We use an environment to store mutable states inside an RDD object. # Note that R's call-by-value semantics makes modifying slots inside an # object (passed as an argument into a function, such as cache()) difficult: @@ -91,7 +94,8 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) #' @export #' #' @param jrdd Java object reference to the backing JavaRDD -#' @param serialized TRUE if the RDD stores data serialized in R +#' @param serialized "byte" if the RDD stores data serialized in R, "string" if the RDD stores strings, +#' and "rows" if the RDD stores the rows of a DataFrame #' @param isCached TRUE if the RDD is cached #' @param isCheckpointed TRUE if the RDD has been checkpointed RDD <- function(jrdd, serialized = "byte", isCached = FALSE, From 5db30bf76b33c50a9296558996229d63b7ab637b Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 17:15:33 -0600 Subject: [PATCH 433/687] Changed serialized from bool to string --- pkg/R/pairRDD.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index ede17e58e5127..75967562e73c2 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -249,7 +249,7 @@ setMethod("partitionBy", # shuffled acutal content key-val pairs. r <- callJMethod(javaPairRDD, "values") - RDD(r, serialized = TRUE) + RDD(r, serialized = "byte") }) #' Group values by key From b1141f8ee3c125480f61f03055dac0ce332e7e9e Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 21:30:27 -0600 Subject: [PATCH 434/687] Fixed formatting issues. --- pkg/R/deserialize.R | 10 +-- pkg/R/utils.R | 62 +++++++++---------- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 4 +- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index c7fed6aaa1be4..9e1f429ea3d9c 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -109,12 +109,12 @@ readDeserializeRows <- function(inputCon) { colNames <- readList(inputCon) data <- list() + numCols <- readInt(inputCon) + # We write a length for each row out + while(length(numCols) > 0 && numCols > 0) { + data[[length(data) + 1L]] <- readRow(inputCon, numCols) numCols <- readInt(inputCon) - # We write a length for each row out - while(length(numCols) > 0 && numCols > 0) { - data[[length(data) + 1L]] <- readRow(inputCon, numCols) - numCols <- readInt(inputCon) - } + } dataOut <- lapply(data, assignNames, colNames) dataOut # this is a list of named lists now } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 849c8ce08ece4..91f45c29bdb79 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -10,7 +10,7 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, # Unserialized datasets (such as an RDD directly generated by textFile()): # each partition is not dense-packed into one Array[Byte], and `arrSize` # here corresponds to number of logical elements. Thus we can prune here. - if (serialized == "string" && !is.null(logicalUpperBound)) { + if (serialized == "string" && !is.null(logicalUpperBound)) { arrSize <- min(arrSize, logicalUpperBound) } @@ -20,19 +20,19 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, obj <- callJMethod(jList, "get", as.integer(index)) # Assume it is either an R object or a Java obj ref. - if (inherits(obj, "jobj")) { - if (isInstanceOf(obj, "scala.Tuple2")) { - # JavaPairRDD[Array[Byte], Array[Byte]]. + if (inherits(obj, "jobj")) { + if (isInstanceOf(obj, "scala.Tuple2")) { + # JavaPairRDD[Array[Byte], Array[Byte]]. - keyBytes = callJMethod(obj, "_1") - valBytes = callJMethod(obj, "_2") - res <- list(unserialize(keyBytes), - unserialize(valBytes)) - } else { - stop(paste("utils.R: convertJListToRList only supports", - "RDD[Array[Byte]] and", - "JavaPairRDD[Array[Byte], Array[Byte]] for now")) - } + keyBytes = callJMethod(obj, "_1") + valBytes = callJMethod(obj, "_2") + res <- list(unserialize(keyBytes), + unserialize(valBytes)) + } else { + stop(paste("utils.R: convertJListToRList only supports", + "RDD[Array[Byte]] and", + "JavaPairRDD[Array[Byte], Array[Byte]] for now")) + } } else { if (inherits(obj, "raw")) { if (serialized == "byte") { @@ -41,28 +41,28 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, # For serialized datasets, `obj` (and `rRaw`) here corresponds to # one whole partition dense-packed together. We deserialize the # whole partition first, then cap the number of elements to be returned. - } else { - res <- readRowList(obj) - # For DataFrames that have been converted to RRDDs, we call readRowList - # which will read in each row of the RRDD as a list and deserialize - # each element. - flatten <<- FALSE - # Use global assignment to change the flatten flag. This means - # we don't have to worry about the default argument in other functions - # e.g. collect - res <- assignNames(res, colNames) - } - # TODO: is it possible to distinguish element boundary so that we can - # unserialize only what we need? - if (!is.null(logicalUpperBound)) { - res <- head(res, n = logicalUpperBound) - } } else { + res <- readRowList(obj) + # For DataFrames that have been converted to RRDDs, we call readRowList + # which will read in each row of the RRDD as a list and deserialize + # each element. + flatten <<- FALSE + # Use global assignment to change the flatten flag. This means + # we don't have to worry about the default argument in other functions + # e.g. collect + res <- assignNames(res, colNames) + } + # TODO: is it possible to distinguish element boundary so that we can + # unserialize only what we need? + if (!is.null(logicalUpperBound)) { + res <- head(res, n = logicalUpperBound) + } + } else { # obj is of a primitive Java type, is simplified to R's # corresponding type. - res <- list(obj) - } + res <- list(obj) } + } res }) } else { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index e6c14956f6b6b..bbba178dfae3c 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -36,8 +36,8 @@ object SQLUtils { bos.toByteArray() } -// We convert the DataFrame into an array of RDDs one for each column -// Each RDD contains a serialized form of the column per partition. + // We convert the DataFrame into an array of RDDs one for each column + // Each RDD contains a serialized form of the column per partition. def dfToColRDD(df: DataFrame): Array[RDD[Array[Byte]]] = { val colRDDs = convertRowsToColumns(df) val dfOut = colRDDs.map { col => From 8c3b8c5e022e7f747188613bebf5c2b2faedb939 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 21:30:45 -0600 Subject: [PATCH 435/687] Add test for UnionRDD on "row" serialization --- pkg/inst/tests/test_sparkSQL.R | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index a73b24a6499bb..855678cb100ba 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -41,6 +41,16 @@ test_that("toRDD() returns an RRDD", { expect_true(count(testRDD) == 3) }) +test_that("union on two RDDs created from DataFrames returns an RRDD", { + df <- jsonFile(sqlCtx, jsonPath) + RDD1 <- toRDD(df) + RDD2 <- toRDD(df) + unioned <- unionRDD(RDD1, RDD2) + expect_true(inherits(unioned, "RDD")) + expect_true(unioned@env$serialized == "row") + expect_true(collect(unioned)[[2]]$name == "Andy") +}) + test_that("lapply() on a DataFrame returns an RDD with the correct columns", { df <- jsonFile(sqlCtx, jsonPath) testRDD <- lapply(df, function(row) { From 7f7596a2355b8bfae61acf45387c86ec29a6841c Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 17 Feb 2015 21:52:11 -0600 Subject: [PATCH 436/687] Additional handling for "row" serialization Added a reference object to SerDe.scala for the three existing serialization modes and updated RRDD.scala to refer to the reference object instead of using hard-coded strings. Also included some additional comments on the new type in RDD.R and changed the "toRDD" method in DataFrame.R to use "row" instead of "rows" --- pkg/R/DataFrame.R | 2 +- pkg/R/RDD.R | 10 +++++++--- .../scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 4 ++-- .../scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala | 6 ++++++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 4a6b116a5d046..78dc44cca4ee7 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -179,7 +179,7 @@ setMethod("toRDD", function(df) { jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", df@sdf) names <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) - RDD(jrdd, serialized = "rows", colNames = names) + RDD(jrdd, serialized = "row", colNames = names) }) ############################## RDD Map Functions ################################## diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 2902162e0f848..7b648b8a533f3 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -22,11 +22,15 @@ setClass("PipelinedRDD", prev_jrdd = "jobj"), contains = "RDD") - setMethod("initialize", "RDD", function(.Object, jrdd, serialized, isCached, isCheckpointed, colNames) { # Check that RDD constructor is using the correct version of serialized - stopifnot(class(serialized) == "character") + stopifnot(class(serialized) == "character") + stopifnot(serialized %in% c("byte", "string", "row")) + # RDD has three serialization types: + # byte: The RDD stores data serialized in R. + # string: The RDD stores data as strings. + # row: The RDD stores the serialized rows of a DataFrame. # We use an environment to store mutable states inside an RDD object. # Note that R's call-by-value semantics makes modifying slots inside an @@ -95,7 +99,7 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) #' #' @param jrdd Java object reference to the backing JavaRDD #' @param serialized "byte" if the RDD stores data serialized in R, "string" if the RDD stores strings, -#' and "rows" if the RDD stores the rows of a DataFrame +#' and "row" if the RDD stores the rows of a DataFrame #' @param isCached TRUE if the RDD is cached #' @param isCheckpointed TRUE if the RDD has been checkpointed RDD <- function(jrdd, serialized = "byte", isCached = FALSE, diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 6c1f3f401d74c..3127ed012059b 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -158,7 +158,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(1) } - if (parentSerialized == "rows") { + if (parentSerialized == SerializationFormats.ROW) { SerDe.writeStringArr(dataOut, colNames) for (row <- iter) { val rowArr = row.asInstanceOf[Array[Byte]] @@ -166,7 +166,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( } } else { for (elem <- iter) { - if (parentSerialized == "byte") { + if (parentSerialized == SerializationFormats.BYTE) { val elemArr = elem.asInstanceOf[Array[Byte]] dataOut.writeInt(elemArr.length) dataOut.write(elemArr, 0, elemArr.length) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 0174be7840a46..5e6cc0bf5e931 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -282,3 +282,9 @@ object SerDe { value.foreach(v => writeBytes(out, v)) } } + +object SerializationFormats { + val BYTE = "byte" + val STRING = "string" + val ROW = "row" +} From 1f5a6ac052a91784f4343d7ac0d40fca88ce1cc0 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Tue, 17 Feb 2015 22:57:37 -0500 Subject: [PATCH 437/687] fixed comments --- pkg/R/RDD.R | 10 +++++----- pkg/inst/tests/test_rdd.R | 5 +++++ pkg/man/pipeRDD.Rd | 10 +++++----- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 8af5d3608f295..2629db7d128c8 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1275,14 +1275,14 @@ setMethod("aggregateRDD", Reduce(combOp, partitionList, zeroValue) }) -#' Pipes elements to a forked externel process. +#' Pipes elements to a forked external process. #' #' The same as 'pipe()' in Spark. #' -#' @param rdd The RDD whose elements are piped to the forked externel process. -#' @param command The command to fork an externel process. -#' @param env A named list to set environment variables of the externel process. -#' @return A new RDD created by piping all elements to a forked externel process. +#' @param rdd The RDD whose elements are piped to the forked external process. +#' @param command The command to fork an external process. +#' @param env A named list to set environment variables of the external process. +#' @return A new RDD created by piping all elements to a forked external process. #' @rdname pipeRDD #' @export #' @examples diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index fa2a2959c6913..f0c00d71d076c 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -341,6 +341,11 @@ test_that("pipeRDD() on RDDs", { expected <- as.list(as.character(1:10)) expect_equal(actual, expected) + trailed.rdd <- parallelize(sc, c("1", "", "2\n", "3\n\r\n")) + actual <- collect(pipeRDD(trailed.rdd, "sort")) + expected <- list("", "1", "2", "3") + expect_equal(actual, expected) + rev.nums <- 9:0 rev.rdd <- parallelize(sc, rev.nums, 2L) actual <- collect(pipeRDD(rev.rdd, "sort")) diff --git a/pkg/man/pipeRDD.Rd b/pkg/man/pipeRDD.Rd index e930fe0a65a84..0964d3415ecb8 100644 --- a/pkg/man/pipeRDD.Rd +++ b/pkg/man/pipeRDD.Rd @@ -4,21 +4,21 @@ \name{pipeRDD} \alias{pipeRDD} \alias{pipeRDD,RDD,character-method} -\title{Pipes elements to a forked externel process.} +\title{Pipes elements to a forked external process.} \usage{ pipeRDD(rdd, command, env = list()) \S4method{pipeRDD}{RDD,character}(rdd, command, env = list()) } \arguments{ -\item{rdd}{The RDD whose elements are piped to the forked externel process.} +\item{rdd}{The RDD whose elements are piped to the forked external process.} -\item{command}{The command to fork an externel process.} +\item{command}{The command to fork an external process.} -\item{env}{A named list to set environment variables of the externel process.} +\item{env}{A named list to set environment variables of the external process.} } \value{ -A new RDD created by piping all elements to a forked externel process. +A new RDD created by piping all elements to a forked external process. } \description{ The same as 'pipe()' in Spark. From 86fc639a8ddb8e872b1f5cd7392ebd3f896d22c8 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Feb 2015 23:29:51 -0800 Subject: [PATCH 438/687] Move sparkR-submit into pkg/inst --- sparkR-submit => pkg/inst/sparkR-submit | 34 ++----------------------- 1 file changed, 2 insertions(+), 32 deletions(-) rename sparkR-submit => pkg/inst/sparkR-submit (65%) diff --git a/sparkR-submit b/pkg/inst/sparkR-submit similarity index 65% rename from sparkR-submit rename to pkg/inst/sparkR-submit index 2c4d9bf376bd3..a5311fd73dc92 100755 --- a/sparkR-submit +++ b/pkg/inst/sparkR-submit @@ -7,7 +7,7 @@ FWDIR="$(cd `dirname $0`; pwd)" export PROJECT_HOME="$FWDIR" -export SPARKR_JAR_FILE="$FWDIR/lib/SparkR/sparkr-assembly-0.1.jar" +export SPARKR_JAR_FILE="$FWDIR/sparkr-assembly-0.1.jar" # Exit if the user hasn't set SPARK_HOME if [ ! -f "$SPARK_HOME/bin/spark-submit" ]; then @@ -27,12 +27,6 @@ if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then usage fi - -# Add SparkR to .libPaths -# If we are running an R program, only set libPaths and use Rscript - -export R_PROFILE_USER="/tmp/sparkR.profile" - # Build up arguments list manually to preserve quotes and backslashes. SUBMIT_USAGE_FUNCTION=usage gatherSparkSubmitOpts "$@" @@ -53,14 +47,6 @@ NUM_APPLICATION_OPTS=${#APPLICATION_OPTS[@]} # If a R file is provided, directly run spark-submit. if [[ $NUM_APPLICATION_OPTS -gt 0 && "${APPLICATION_OPTS[0]}" =~ \.R$ ]]; then -cat > /tmp/sparkR.profile << EOF - .First <- function() { - projecHome <- Sys.getenv("PROJECT_HOME") - .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) - Sys.setenv(NOAWT=1) -} -EOF - primary="${APPLICATION_OPTS[0]}" shift # Set the main class to SparkRRunner and add the primary R file to --files to make sure its copied to the cluster @@ -68,23 +54,7 @@ EOF exec "$SPARK_HOME"/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files "$primary" "${SUBMISSION_OPTS[@]}" "$SPARKR_JAR_FILE" "$primary" "${APPLICATION_OPTS[@]:1}" else - # If we don't have an R file to run, initialize context and run R -cat > /tmp/sparkR.profile << EOF -.First <- function() { - projecHome <- Sys.getenv("PROJECT_HOME") - Sys.setenv(NOAWT=1) - .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) - require(SparkR) - sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) - assign("sc", sc, envir=.GlobalEnv) - cat("\n Welcome to SparkR!") - cat("\n Spark context is available as sc\n") -} -EOF - - # Add SPARKR_JAR, main class etc. to SPARKR_SUBMIT_ARGS - export SPARKR_SUBMIT_ARGS - + # If we don't have an R file to run, run R shell R fi From b063320757be39b98a4b01b73cd3a024da290250 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 18 Feb 2015 13:23:20 -0600 Subject: [PATCH 439/687] Changed 'serialized' to 'serializedMode' --- pkg/R/DataFrame.R | 2 +- pkg/R/RDD.R | 51 +++++++++++++-------------- pkg/R/pairRDD.R | 4 +-- pkg/R/utils.R | 13 ++++--- pkg/inst/tests/test_binary_function.R | 2 +- pkg/inst/tests/test_utils.R | 4 +-- 6 files changed, 39 insertions(+), 37 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 78dc44cca4ee7..041526c7df145 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -179,7 +179,7 @@ setMethod("toRDD", function(df) { jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", df@sdf) names <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) - RDD(jrdd, serialized = "row", colNames = names) + RDD(jrdd, serializedMode = "row", colNames = names) }) ############################## RDD Map Functions ################################## diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 7b648b8a533f3..7f9e81036f71e 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -10,6 +10,8 @@ setOldClass("jobj") #' #' @slot env An R environment that stores bookkeeping states of the RDD #' @slot jrdd Java object reference to the backing JavaRDD +#' @slot colNames A list of column names used when converting a DataFrame +#' to an RDD #' @export setClass("RDD", slots = list(env = "environment", @@ -22,11 +24,11 @@ setClass("PipelinedRDD", prev_jrdd = "jobj"), contains = "RDD") -setMethod("initialize", "RDD", function(.Object, jrdd, serialized, +setMethod("initialize", "RDD", function(.Object, jrdd, serializedMode, isCached, isCheckpointed, colNames) { - # Check that RDD constructor is using the correct version of serialized - stopifnot(class(serialized) == "character") - stopifnot(serialized %in% c("byte", "string", "row")) + # Check that RDD constructor is using the correct version of serializedMode + stopifnot(class(serializedMode) == "character") + stopifnot(serializedMode %in% c("byte", "string", "row")) # RDD has three serialization types: # byte: The RDD stores data serialized in R. # string: The RDD stores data as strings. @@ -43,7 +45,7 @@ setMethod("initialize", "RDD", function(.Object, jrdd, serialized, .Object@env <- new.env() .Object@env$isCached <- isCached .Object@env$isCheckpointed <- isCheckpointed - .Object@env$serialized <- serialized + .Object@env$serializedMode <- serializedMode .Object@colNames <- colNames @@ -56,8 +58,8 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@env$isCached <- FALSE .Object@env$isCheckpointed <- FALSE .Object@env$jrdd_val <- jrdd_val - # This tracks if jrdd_val is serialized - .Object@env$serialized <- prev@env$serialized + # This tracks the serialization mode for jrdd_val + .Object@env$serializedMode <- prev@env$serializedMode .Object@colNames <- prev@colNames @@ -76,7 +78,7 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@prev_jrdd <- getJRDD(prev) # Since this is the first step in the pipeline, the prev_serialized # is same as serialized here. - .Object@env$prev_serialized <- .Object@env$serialized + .Object@env$prev_serializedMode <- .Object@env$serializedMode .Object@colNames <- prev@colNames } else { @@ -85,8 +87,8 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) } .Object@func <- pipelinedFunc .Object@prev_jrdd <- prev@prev_jrdd # maintain the pipeline - # Get if the prev_jrdd was serialized from the parent RDD - .Object@env$prev_serialized <- prev@env$prev_serialized + # Get the serialization mode of the parent RDD + .Object@env$prev_serializedMode <- prev@env$prev_serializedMode .Object@colNames <- prev@colNames } @@ -102,9 +104,9 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) #' and "row" if the RDD stores the rows of a DataFrame #' @param isCached TRUE if the RDD is cached #' @param isCheckpointed TRUE if the RDD has been checkpointed -RDD <- function(jrdd, serialized = "byte", isCached = FALSE, +RDD <- function(jrdd, serializedMode = "byte", isCached = FALSE, isCheckpointed = FALSE, colNames = list()) { - new("RDD", jrdd, serialized, isCached, isCheckpointed, colNames) + new("RDD", jrdd, serializedMode, isCached, isCheckpointed, colNames) } PipelinedRDD <- function(prev, func) { @@ -143,7 +145,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, - rdd@env$prev_serialized, + rdd@env$prev_serializedMode, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), @@ -154,7 +156,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, - rdd@env$prev_serialized, + rdd@env$prev_serializedMode, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), @@ -163,7 +165,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), callJMethod(prev_jrdd, "classTag")) } # Save the serialization flag after we create a RRDD - rdd@env$serialized <- dataSerialization + rdd@env$serializedMode <- dataSerialization rdd@env$jrdd_val <- callJMethod(rddRef, "asJavaRDD") # rddRef$asJavaRDD() rdd@env$jrdd_val }) @@ -372,7 +374,7 @@ setMethod("collect", # Assumes a pairwise RDD is backed by a JavaPairRDD. collected <- callJMethod(getJRDD(rdd), "collect") convertJListToRList(collected, flatten, - serialized = rdd@env$serialized, colNames = rdd@colNames) + serializedMode = rdd@env$serializedMode, colNames = rdd@colNames) }) @@ -398,7 +400,7 @@ setMethod("collectPartition", jList <- jPartitionsList[[1]] convertJListToRList(jList, flatten = TRUE, - serialized = rdd@env$serialized, colNames = rdd@colNames) + serializedMode = rdd@env$serializedMode, colNames = rdd@colNames) }) #' @rdname collect-methods @@ -854,7 +856,7 @@ setMethod("take", elems <- convertJListToRList(partition, flatten = TRUE, logicalUpperBound = size, - serialized = rdd@env$serialized, + serializedMode = rdd@env$serializedMode, colNames = rdd@colNames) # TODO: Check if this append is O(n^2)? resList <- append(resList, elems) @@ -1082,7 +1084,7 @@ setMethod("saveAsObjectFile", function(rdd, path) { # If the RDD is in string format, need to serialize it before saving it because when # objectFile() is invoked to load the saved file, only serialized format is assumed. - if (rdd@env$serialized == "string") { + if (rdd@env$serializedMode != "byte") { rdd <- reserialize(rdd) } # Return nothing @@ -1365,16 +1367,13 @@ setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) setMethod("unionRDD", signature(x = "RDD", y = "RDD"), function(x, y) { - if (x@env$serialized == y@env$serialized) { + if (x@env$serializedMode == y@env$serializedMode) { jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) - union.rdd <- RDD(jrdd, x@env$serialized, colNames = x@colNames) + union.rdd <- RDD(jrdd, x@env$serializedMode, colNames = x@colNames) } else { # One of the RDDs is not serialized, we need to serialize it first. - if (x@env$serialized == "string") { - x <- reserialize(x) - } else if (y@env$serialized == "string") { - y <- reserialize(y) - } + if (x@env$serializedMode != "byte") x <- reserialize(x) + if (y@env$serializedMode != "byte") y <- reserialize(y) jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) union.rdd <- RDD(jrdd, "byte") } diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index 75967562e73c2..ef95f659333d0 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -229,7 +229,7 @@ setMethod("partitionBy", callJMethod(jrdd, "rdd"), as.integer(numPartitions), serializedHashFuncBytes, - rdd@env$serialized, + rdd@env$serializedMode, depsBinArr, packageNamesArr, as.character(.sparkREnv$libname), @@ -249,7 +249,7 @@ setMethod("partitionBy", # shuffled acutal content key-val pairs. r <- callJMethod(javaPairRDD, "values") - RDD(r, serialized = "byte") + RDD(r, serializedMode = "byte") }) #' Group values by key diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 91f45c29bdb79..b2da7ec322250 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -4,13 +4,13 @@ # of which is optionally upper bounded by `logicalUpperBound` (by default, # return all elements). Takes care of deserializations and type conversions. convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, - serialized = "byte", colNames = list()) { + serializedMode = "byte", colNames = list()) { arrSize <- callJMethod(jList, "size") # Unserialized datasets (such as an RDD directly generated by textFile()): # each partition is not dense-packed into one Array[Byte], and `arrSize` # here corresponds to number of logical elements. Thus we can prune here. - if (serialized == "string" && !is.null(logicalUpperBound)) { + if (serializedMode == "string" && !is.null(logicalUpperBound)) { arrSize <- min(arrSize, logicalUpperBound) } @@ -35,13 +35,13 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, } } else { if (inherits(obj, "raw")) { - if (serialized == "byte") { + if (serializedMode == "byte") { # RDD[Array[Byte]]. `obj` is a whole partition. res <- unserialize(obj) # For serialized datasets, `obj` (and `rRaw`) here corresponds to # one whole partition dense-packed together. We deserialize the # whole partition first, then cap the number of elements to be returned. - } else { + } else if (serializedMode == "row") { res <- readRowList(obj) # For DataFrames that have been converted to RRDDs, we call readRowList # which will read in each row of the RRDD as a list and deserialize @@ -176,7 +176,10 @@ reserialize <- function(rdd) { if (!inherits(rdd, "RDD")) { stop("Argument 'rdd' is not an RDD type.") } - if (rdd@env$serialized == "string") { + if (rdd@env$serializedMode != "byte") { + if (rdd@env$serializedMode == "row") { + rdd@env$serialzedMode == "byte" + } ser.rdd <- lapply(rdd, function(x) { x }) return(ser.rdd) } else { diff --git a/pkg/inst/tests/test_binary_function.R b/pkg/inst/tests/test_binary_function.R index b3c1df33c68cf..2c72dccc39b1a 100644 --- a/pkg/inst/tests/test_binary_function.R +++ b/pkg/inst/tests/test_binary_function.R @@ -21,7 +21,7 @@ test_that("union on two RDDs", { union.rdd <- unionRDD(rdd, text.rdd) actual <- collect(union.rdd) expect_equal(actual, c(as.list(nums), mockFile)) - expect_true(union.rdd@env$serialized == "byte") + expect_true(union.rdd@env$serializedMode == "byte") unlink(fileName) }) diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 9c92de9cdf4de..d8fe05c2c91d6 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -28,10 +28,10 @@ test_that("reserialize on RDD", { writeLines(mockFile, fileName) text.rdd <- textFile(sc, fileName) - expect_true(text.rdd@env$serialized == "string") + expect_true(text.rdd@env$serializedMode == "string") ser.rdd <- reserialize(text.rdd) expect_equal(collect(ser.rdd), as.list(mockFile)) - expect_true(ser.rdd@env$serialized == "byte") + expect_true(ser.rdd@env$serializedMode == "byte") unlink(fileName) }) From ce5d5abb0876acf344ce62e37a30ddc2b57e49be Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 18 Feb 2015 13:24:04 -0600 Subject: [PATCH 440/687] New tests for Union and Object File Reworked the `reserialize` function to handle row RRDDs. Updated tests accordingly. --- pkg/inst/tests/test_sparkSQL.R | 43 +++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 855678cb100ba..8e4e0098c9e74 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -47,10 +47,51 @@ test_that("union on two RDDs created from DataFrames returns an RRDD", { RDD2 <- toRDD(df) unioned <- unionRDD(RDD1, RDD2) expect_true(inherits(unioned, "RDD")) - expect_true(unioned@env$serialized == "row") + expect_true(unioned@env$serializedMode == "row") expect_true(collect(unioned)[[2]]$name == "Andy") }) +test_that("union on mixed serialization types correctly returns a byte RRDD", { + # Byte RDD + nums <- 1:10 + rdd <- parallelize(sc, nums, 2L) + + # String RDD + textLines <- c("Michael", + "Andy, 30", + "Justin, 19") + textPath <- tempfile(pattern="sparkr-textLines", fileext=".tmp") + writeLines(textLines, textPath) + textRDD <- textFile(sc, textPath) + + df <- jsonFile(sqlCtx, jsonPath) + dfRDD <- toRDD(df) + + unionByte <- unionRDD(rdd, dfRDD) + expect_true(inherits(unionByte, "RDD")) + expect_true(unionByte@env$serializedMode == "byte") + expect_true(collect(unionByte)[[1]] == 1) + expect_true(collect(unionByte)[[12]]$name == "Andy") + + unionString <- unionRDD(textRDD, dfRDD) + expect_true(inherits(unionString, "RDD")) + expect_true(unionString@env$serializedMode == "byte") + expect_true(collect(unionString)[[1]] == "Michael") + expect_true(collect(unionString)[[5]]$name == "Andy") +}) + +test_that("objectFile() works with row serialization", { + objectPath <- tempfile(pattern="spark-test", fileext=".tmp") + df <- jsonFile(sqlCtx, jsonPath) + dfRDD <- toRDD(df) + saveAsObjectFile(dfRDD, objectPath) + objectIn <- objectFile(sc, objectPath) + + expect_true(inherits(objectIn, "RDD")) + expect_true(objectIn@env$serializedMode == "byte") + expect_true(collect(objectIn)[[2]]$age == 30) +}) + test_that("lapply() on a DataFrame returns an RDD with the correct columns", { df <- jsonFile(sqlCtx, jsonPath) testRDD <- lapply(df, function(row) { From 8b84e4ef9fd1080034611bc8e2bc8a6e624322dc Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 18 Feb 2015 13:24:44 -0600 Subject: [PATCH 441/687] Make if statements more explicit Added if statement for "row" serialization --- pkg/inst/worker/worker.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 6ded04cbfdf2d..aeb8ec8f37c68 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -25,7 +25,7 @@ splitIndex <- SparkR:::readInt(inputCon) execLen <- SparkR:::readInt(inputCon) execFunctionName <- unserialize(SparkR:::readRawLen(inputCon, execLen)) -# read the isInputSerialized bit flag +# read the inputSerialization bit value inputSerialization <- SparkR:::readString(inputCon) # read the isOutputSerialized bit flag @@ -73,7 +73,7 @@ if (isEmpty != 0) { data <- SparkR:::readDeserialize(inputCon) } else if (inputSerialization == "string") { data <- readLines(inputCon) - } else { + } else if (inputSerialization == "row") { data <- SparkR:::readDeserializeRows(inputCon) } output <- do.call(execFunctionName, list(splitIndex, data)) @@ -88,7 +88,7 @@ if (isEmpty != 0) { data <- SparkR:::readDeserialize(inputCon) } else if (inputSerialization == "string") { data <- readLines(inputCon) - } else { + } else if (inputSerialization == "row") { data <- SparkR:::readDeserializeRows(inputCon) } From 7f1f0f83cef556b84e2054dbd80e26d7cb409824 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 18 Feb 2015 14:44:05 -0600 Subject: [PATCH 442/687] Move comments to fit 100 char line length --- pkg/R/DataFrame.R | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 041526c7df145..112e993df4c67 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -276,16 +276,19 @@ setMethod("collectToDF", cols <- lapply(seq_along(listCols), function(colIdx) { rddCol <- listCols[[colIdx]] - rddRaw <- callJMethod(rddCol, "collect") # Returns a list of byte arrays per partition + # Returns a list of byte arrays per partition + rddRaw <- callJMethod(rddCol, "collect") colPartitions <- lapply(seq_along(rddRaw), function(partIdx) { objRaw <- rawConnection(rddRaw[[partIdx]]) numRows <- readInt(objRaw) - col <- readCol(objRaw, numRows) # List of deserialized values per partition + # List of deserialized values per partition + col <- readCol(objRaw, numRows) close(objRaw) col }) - colOut <- unlist(colPartitions, recursive = FALSE) # Flatten column list into a vector + # Flatten column list into a vector + colOut <- unlist(colPartitions, recursive = FALSE) }) colNames <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) names(cols) <- colNames From 22a19ac516be71b585246d0ebba76f20edc31995 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Feb 2015 14:34:32 -0800 Subject: [PATCH 443/687] Use a semaphore to wait for backend to initalize Also pick a random port to avoid collisions --- .../berkeley/cs/amplab/sparkr/SparkRRunner.scala | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala index 4ccf247e0eeb1..1a4b7355b4f01 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala @@ -2,6 +2,7 @@ package edu.berkeley.cs.amplab.sparkr import java.io._ import java.net.URI +import java.util.concurrent.Semaphore import scala.collection.mutable.ArrayBuffer import scala.collection.JavaConversions._ @@ -17,8 +18,12 @@ object SparkRRunner { val rFile = args(0) val otherArgs = args.slice(1, args.length) + + // Pick a non-privileged port + val randomPort = scala.util.Random.nextInt(65536 - 1024) + 1024 + // TODO: Can we get this from SparkConf ? - val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", "12345").toInt + val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", randomPort.toString).toInt val rCommand = "Rscript" // Check if the file path exists. @@ -35,8 +40,12 @@ object SparkRRunner { // Java system properties etc. val sparkRBackend = new SparkRBackend() val sparkRBackendThread = new Thread() { + val finishedInit = new Semaphore(1) + finishedInit.acquire() + override def run() { sparkRBackend.init(sparkRBackendPort) + finishedInit.release() sparkRBackend.run() } @@ -46,6 +55,8 @@ object SparkRRunner { } sparkRBackendThread.start() + // Wait for SparkRBackend initialization to finish + sparkRBackendThread.finishedInit.acquire() // Launch R val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) From bc04cf439fe642c7ebbc7baededdacf89c4abf89 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Feb 2015 18:24:44 -0800 Subject: [PATCH 444/687] Use SPARKR_BACKEND_PORT in sparkR.R as default Change SparkRRunner to use EXISTING_SPARKR_BACKEND_PORT to differentiate between the two --- pkg/R/sparkR.R | 5 +++-- .../scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala | 7 ++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index f4a2582c22041..02ae0c6ae490a 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -90,7 +90,7 @@ sparkR.init <- function( sparkExecutorEnv = list(), sparkJars = "", sparkRLibDir = "", - sparkRBackendPort = 12345) { + sparkRBackendPort = as.integer(Sys.getenv("SPARKR_BACKEND_PORT", "12345"))) { if (exists(".sparkRjsc", envir = .sparkREnv)) { cat("Re-using existing Spark Context. Please stop SparkR with sparkR.stop() or restart R to create a new Spark Context\n") @@ -106,7 +106,8 @@ sparkR.init <- function( if (yarn_conf_dir != "") { cp <- paste(cp, yarn_conf_dir, sep = ":") } - sparkRExistingPort <- Sys.getenv("SPARKR_BACKEND_PORT", "") + + sparkRExistingPort <- Sys.getenv("EXISTING_SPARKR_BACKEND_PORT", "") if (sparkRExistingPort != "") { sparkRBackendPort <- sparkRExistingPort } else { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala index 1a4b7355b4f01..6b4e781494464 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala @@ -19,11 +19,8 @@ object SparkRRunner { val otherArgs = args.slice(1, args.length) - // Pick a non-privileged port - val randomPort = scala.util.Random.nextInt(65536 - 1024) + 1024 - // TODO: Can we get this from SparkConf ? - val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", randomPort.toString).toInt + val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", "12345").toInt val rCommand = "Rscript" // Check if the file path exists. @@ -61,7 +58,7 @@ object SparkRRunner { // Launch R val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) val env = builder.environment() - env.put("SPARKR_BACKEND_PORT", "" + sparkRBackendPort) + env.put("EXISTING_SPARKR_BACKEND_PORT", "" + sparkRBackendPort) builder.redirectErrorStream(true) // Ugly but needed for stdout and stderr to synchronize val process = builder.start() From 749e2d08831b85fe70603a985e3e28f49def51fb Mon Sep 17 00:00:00 2001 From: Hossein Date: Wed, 18 Feb 2015 22:56:25 -0800 Subject: [PATCH 445/687] Updated README --- README.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 795b0a1477305..7d0f1195a8e72 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,9 @@ R. ### Requirements SparkR requires Scala 2.10 and Spark version >= 0.9.0. Current build by default uses -Apache Spark 1.1.0. You can also build SparkR against a +Apache Spark 1.3.0. You can also build SparkR against a different Spark version (>= 0.9.0) by modifying `pkg/src/build.sbt`. -SparkR also requires the R package `rJava` to be installed. To install `rJava`, -you can run the following command in R: - - install.packages("rJava") - - ### Package installation To develop SparkR, you can build the scala package and the R package using @@ -29,7 +23,7 @@ If you wish to try out the package directly from github, you can use [`install_g library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") -SparkR by default uses Apache Spark 1.1.0. You can switch to a different Spark +SparkR by default uses Apache Spark 1.3.0. You can switch to a different Spark version by setting the environment variable `SPARK_VERSION`. For example, to use Apache Spark 1.2.0, you can run @@ -97,7 +91,7 @@ To run one of them, use `./sparkR `. For example: ./sparkR examples/pi.R local[2] -You can also run the unit-tests for SparkR by running +You can also run the unit-tests for SparkR by running. You need to install the [testthat](http://cran.r-project.org/web/packages/testthat/index.html) package first. ./run-tests.sh @@ -110,7 +104,7 @@ Instructions for running SparkR on EC2 can be found in the Currently, SparkR supports running on YARN with the `yarn-client` mode. These steps show how to build SparkR with YARN support and run SparkR programs on a YARN cluster: ``` -# assumes Java, R, rJava, yarn, spark etc. are installed on the whole cluster. +# assumes Java, R, yarn, spark etc. are installed on the whole cluster. cd SparkR-pkg/ USE_YARN=1 SPARK_YARN_VERSION=2.4.0 SPARK_HADOOP_VERSION=2.4.0 ./install-dev.sh ``` From 4cd7d3f8966102742d75cc60a9e93308b44026cf Mon Sep 17 00:00:00 2001 From: lythesia Date: Thu, 19 Feb 2015 21:51:44 +0800 Subject: [PATCH 446/687] retry backend connection --- pkg/R/sparkR.R | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 2218170fef104..7d42842dc8847 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -110,9 +110,19 @@ sparkR.init <- function( mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", args = as.character(sparkRBackendPort), javaOpts = paste("-Xmx", sparkMem, sep = "")) - Sys.sleep(2) # Wait for backend to come up + + cat("Waiting JVM bring up ...\n") + while(TRUE) { + if(!connExists(.sparkREnv)) { + Sys.sleep(1) + cat(".") + connectBackend("localhost", sparkRBackendPort) # Connect to it + } else { + cat(" ok.\n") + break + } + } .sparkREnv$sparkRBackendPort <- sparkRBackendPort - connectBackend("localhost", sparkRBackendPort) # Connect to it if (nchar(sparkHome) != 0) { sparkHome <- normalizePath(sparkHome) From ba2b72bf56a8fd964e210ea34c320e3cb7eb5436 Mon Sep 17 00:00:00 2001 From: Hossein Date: Thu, 19 Feb 2015 10:35:07 -0800 Subject: [PATCH 447/687] Spark 1.1.0 is default --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7d0f1195a8e72..6d6b097222ade 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ R. ### Requirements SparkR requires Scala 2.10 and Spark version >= 0.9.0. Current build by default uses -Apache Spark 1.3.0. You can also build SparkR against a +Apache Spark 1.1.0. You can also build SparkR against a different Spark version (>= 0.9.0) by modifying `pkg/src/build.sbt`. ### Package installation @@ -23,11 +23,11 @@ If you wish to try out the package directly from github, you can use [`install_g library(devtools) install_github("amplab-extras/SparkR-pkg", subdir="pkg") -SparkR by default uses Apache Spark 1.3.0. You can switch to a different Spark +SparkR by default uses Apache Spark 1.1.0. You can switch to a different Spark version by setting the environment variable `SPARK_VERSION`. For example, to -use Apache Spark 1.2.0, you can run +use Apache Spark 1.3.0, you can run - SPARK_VERSION=1.2.0 ./install-dev.sh + SPARK_VERSION=1.3.0 ./install-dev.sh SparkR by default links to Hadoop 1.0.4. To use SparkR with other Hadoop versions, you will need to rebuild SparkR with the same version that [Spark is @@ -91,8 +91,9 @@ To run one of them, use `./sparkR `. For example: ./sparkR examples/pi.R local[2] -You can also run the unit-tests for SparkR by running. You need to install the [testthat](http://cran.r-project.org/web/packages/testthat/index.html) package first. +You can also run the unit-tests for SparkR by running (you need to install the [testthat](http://cran.r-project.org/web/packages/testthat/index.html) package first): + R -e 'install.packages("testthat", repos="http://cran.us.r-project.org")' ./run-tests.sh ## Running on EC2 From e6ad12d93852674c63fc69a8301963a6c395eb18 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 19 Feb 2015 12:35:45 -0800 Subject: [PATCH 448/687] Update comment describing sparkR-submit --- pkg/inst/sparkR-submit | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/inst/sparkR-submit b/pkg/inst/sparkR-submit index a5311fd73dc92..d8d0873bcf245 100755 --- a/pkg/inst/sparkR-submit +++ b/pkg/inst/sparkR-submit @@ -1,7 +1,7 @@ #!/bin/bash -# To use sparkR-submit, we assume the SparkR package in yarn-cluster mode -# we assume that it has been installed to a standard location using -# R CMD INSTALL pkg/ +# This script launches SparkR through spark-submit. This accepts +# the same set of options as spark-submit and requires SPARK_HOME +# to be set. FWDIR="$(cd `dirname $0`; pwd)" From f9268d922e24b88643a74b4a4c6a03e7024525ec Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 19 Feb 2015 15:58:17 -0800 Subject: [PATCH 449/687] Fix code review comments --- pkg/R/sparkRClient.R | 12 ++++++------ .../edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala | 5 ++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 4fff9634f4674..99c7aa5c5727c 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -47,15 +47,15 @@ launchBackendSparkSubmit <- function( sparkHome, sparkSubmitOpts) { if (.Platform$OS.type == "unix") { - spark_submit_bin_name = "spark-submit" + sparkSubmitBinName = "spark-submit" } else { - spark_submit_bin_name = "spark-submit.cmd" + sparkSubmitBinName = "spark-submit.cmd" } if (sparkHome != "") { - spark_submit_bin <- file.path(sparkHome, "bin", spark_submit_bin_name) + sparkSubmitBin <- file.path(sparkHome, "bin", sparkSubmitBinName) } else { - spark_submit_bin <- spark_submit_bin_name + sparkSubmitBin <- sparkSubmitBinName } # Since this function is only used while launching R shell using spark-submit, @@ -63,6 +63,6 @@ launchBackendSparkSubmit <- function( # spark-submit --class combinedArgs <- paste("--class", mainClass, sparkSubmitOpts, appJar, args, sep = " ") - cat("Launching java with spark-submit command ", spark_submit_bin, " ", combinedArgs, "\n") - invisible(system2(spark_submit_bin, combinedArgs, wait = F)) + cat("Launching java with spark-submit command ", sparkSubmitBin, " ", combinedArgs, "\n") + invisible(system2(sparkSubmitBin, combinedArgs, wait = F)) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala index 6b4e781494464..6c4607574c4d1 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala @@ -37,8 +37,7 @@ object SparkRRunner { // Java system properties etc. val sparkRBackend = new SparkRBackend() val sparkRBackendThread = new Thread() { - val finishedInit = new Semaphore(1) - finishedInit.acquire() + val finishedInit = new Semaphore(0) override def run() { sparkRBackend.init(sparkRBackendPort) @@ -58,7 +57,7 @@ object SparkRRunner { // Launch R val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) val env = builder.environment() - env.put("EXISTING_SPARKR_BACKEND_PORT", "" + sparkRBackendPort) + env.put("EXISTING_SPARKR_BACKEND_PORT", sparkRBackendPort.toString) builder.redirectErrorStream(true) // Ugly but needed for stdout and stderr to synchronize val process = builder.start() From 88bf97f48dc0de9464f5e771d99ddaac8d86617c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 19 Feb 2015 16:45:03 -0800 Subject: [PATCH 450/687] Create SparkContext for R shell launch --- pkg/inst/sparkR-submit | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pkg/inst/sparkR-submit b/pkg/inst/sparkR-submit index d8d0873bcf245..9c451ab8e3712 100755 --- a/pkg/inst/sparkR-submit +++ b/pkg/inst/sparkR-submit @@ -54,7 +54,21 @@ if [[ $NUM_APPLICATION_OPTS -gt 0 && "${APPLICATION_OPTS[0]}" =~ \.R$ ]]; then exec "$SPARK_HOME"/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files "$primary" "${SUBMISSION_OPTS[@]}" "$SPARKR_JAR_FILE" "$primary" "${APPLICATION_OPTS[@]:1}" else + export R_PROFILE_USER="/tmp/sparkR.profile" + # If we don't have an R file to run, run R shell +cat > /tmp/sparkR.profile << EOF +.First <- function() { + projecHome <- Sys.getenv("PROJECT_HOME") + Sys.setenv(NOAWT=1) + .libPaths(c(paste(projecHome,"/..", sep=""), .libPaths())) + require(SparkR) + sc <- sparkR.init() + assign("sc", sc, envir=.GlobalEnv) + cat("\n Welcome to SparkR!") + cat("\n Spark context is available as sc\n") +} +EOF R fi From 71a73b2561d39df045e7517b675b22ac98079586 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 19 Feb 2015 19:40:58 -0800 Subject: [PATCH 451/687] Use a getter for serialization mode This change encapsulates the semantics of serialization mode for RDDs inside a getter function. For PipelinedRDDs if a backing JavaRDD is available we use that else we fall back to a default serialization mode --- pkg/R/RDD.R | 40 +++++++++++++++++++-------- pkg/R/pairRDD.R | 2 +- pkg/R/utils.R | 5 +--- pkg/inst/tests/test_binary_function.R | 2 +- pkg/inst/tests/test_sparkSQL.R | 8 +++--- pkg/inst/tests/test_utils.R | 4 +-- 6 files changed, 38 insertions(+), 23 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 7f9e81036f71e..c612abaf08a72 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -58,8 +58,10 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@env$isCached <- FALSE .Object@env$isCheckpointed <- FALSE .Object@env$jrdd_val <- jrdd_val - # This tracks the serialization mode for jrdd_val - .Object@env$serializedMode <- prev@env$serializedMode + if (!is.null(jrdd_val)) { + # This tracks the serialization mode for jrdd_val + .Object@env$serializedMode <- prev@env$serializedMode + } .Object@colNames <- prev@colNames @@ -78,7 +80,7 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@prev_jrdd <- getJRDD(prev) # Since this is the first step in the pipeline, the prev_serialized # is same as serialized here. - .Object@env$prev_serializedMode <- .Object@env$serializedMode + .Object@env$prev_serializedMode <- prev@env$serializedMode .Object@colNames <- prev@colNames } else { @@ -113,6 +115,22 @@ PipelinedRDD <- function(prev, func) { new("PipelinedRDD", prev, func, NULL) } +# Return the serialization mode for an RDD. +setGeneric("getSerializedMode", function(rdd, ...) { standardGeneric("getSerializedMode") }) +# For normal RDDs we can directly read the serializedMode +setMethod("getSerializedMode", signature(rdd = "RDD"), function(rdd) rdd@env$serializedMode ) +# For pipelined RDDs if jrdd_val is set then serializedMode should exist +# if not we return the defaultSerialization mode of "byte" as we don't know the serialization +# mode at this point of time. +setMethod("getSerializedMode", signature(rdd = "PipelinedRDD"), + function(rdd, defaultSerialization = "byte") { + if (!is.null(rdd@env$jrdd_val)) { + return(rdd@env$serializedMode) + } else { + return(defaultSerialization) + } + }) + # The jrdd accessor function. setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) setMethod("getJRDD", signature(rdd = "RDD"), function(rdd) rdd@jrdd ) @@ -374,7 +392,7 @@ setMethod("collect", # Assumes a pairwise RDD is backed by a JavaPairRDD. collected <- callJMethod(getJRDD(rdd), "collect") convertJListToRList(collected, flatten, - serializedMode = rdd@env$serializedMode, colNames = rdd@colNames) + serializedMode = getSerializedMode(rdd), colNames = rdd@colNames) }) @@ -400,7 +418,7 @@ setMethod("collectPartition", jList <- jPartitionsList[[1]] convertJListToRList(jList, flatten = TRUE, - serializedMode = rdd@env$serializedMode, colNames = rdd@colNames) + serializedMode = getSerializedMode(rdd), colNames = rdd@colNames) }) #' @rdname collect-methods @@ -856,7 +874,7 @@ setMethod("take", elems <- convertJListToRList(partition, flatten = TRUE, logicalUpperBound = size, - serializedMode = rdd@env$serializedMode, + serializedMode = getSerializedMode(rdd), colNames = rdd@colNames) # TODO: Check if this append is O(n^2)? resList <- append(resList, elems) @@ -1084,7 +1102,7 @@ setMethod("saveAsObjectFile", function(rdd, path) { # If the RDD is in string format, need to serialize it before saving it because when # objectFile() is invoked to load the saved file, only serialized format is assumed. - if (rdd@env$serializedMode != "byte") { + if (getSerializedMode(rdd) != "byte") { rdd <- reserialize(rdd) } # Return nothing @@ -1367,13 +1385,13 @@ setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) setMethod("unionRDD", signature(x = "RDD", y = "RDD"), function(x, y) { - if (x@env$serializedMode == y@env$serializedMode) { + if (getSerializedMode(x) == getSerializedMode(y)) { jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) - union.rdd <- RDD(jrdd, x@env$serializedMode, colNames = x@colNames) + union.rdd <- RDD(jrdd, getSerializedMode(x), colNames = x@colNames) } else { # One of the RDDs is not serialized, we need to serialize it first. - if (x@env$serializedMode != "byte") x <- reserialize(x) - if (y@env$serializedMode != "byte") y <- reserialize(y) + if (getSerializedMode(x) != "byte") x <- reserialize(x) + if (getSerializedMode(y) != "byte") y <- reserialize(y) jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) union.rdd <- RDD(jrdd, "byte") } diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index ef95f659333d0..2b34fe714f466 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -229,7 +229,7 @@ setMethod("partitionBy", callJMethod(jrdd, "rdd"), as.integer(numPartitions), serializedHashFuncBytes, - rdd@env$serializedMode, + getSerializedMode(rdd), depsBinArr, packageNamesArr, as.character(.sparkREnv$libname), diff --git a/pkg/R/utils.R b/pkg/R/utils.R index b2da7ec322250..d5220c7e4e64a 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -176,10 +176,7 @@ reserialize <- function(rdd) { if (!inherits(rdd, "RDD")) { stop("Argument 'rdd' is not an RDD type.") } - if (rdd@env$serializedMode != "byte") { - if (rdd@env$serializedMode == "row") { - rdd@env$serialzedMode == "byte" - } + if (getSerializedMode(rdd) != "byte") { ser.rdd <- lapply(rdd, function(x) { x }) return(ser.rdd) } else { diff --git a/pkg/inst/tests/test_binary_function.R b/pkg/inst/tests/test_binary_function.R index 2c72dccc39b1a..76a62940543da 100644 --- a/pkg/inst/tests/test_binary_function.R +++ b/pkg/inst/tests/test_binary_function.R @@ -21,7 +21,7 @@ test_that("union on two RDDs", { union.rdd <- unionRDD(rdd, text.rdd) actual <- collect(union.rdd) expect_equal(actual, c(as.list(nums), mockFile)) - expect_true(union.rdd@env$serializedMode == "byte") + expect_true(getSerializedMode(union.rdd) == "byte") unlink(fileName) }) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 8e4e0098c9e74..333cd10e42a60 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -47,7 +47,7 @@ test_that("union on two RDDs created from DataFrames returns an RRDD", { RDD2 <- toRDD(df) unioned <- unionRDD(RDD1, RDD2) expect_true(inherits(unioned, "RDD")) - expect_true(unioned@env$serializedMode == "row") + expect_true(getSerializedMode(unioned) == "row") expect_true(collect(unioned)[[2]]$name == "Andy") }) @@ -69,13 +69,13 @@ test_that("union on mixed serialization types correctly returns a byte RRDD", { unionByte <- unionRDD(rdd, dfRDD) expect_true(inherits(unionByte, "RDD")) - expect_true(unionByte@env$serializedMode == "byte") + expect_true(getSerializedMode(unionByte) == "byte") expect_true(collect(unionByte)[[1]] == 1) expect_true(collect(unionByte)[[12]]$name == "Andy") unionString <- unionRDD(textRDD, dfRDD) expect_true(inherits(unionString, "RDD")) - expect_true(unionString@env$serializedMode == "byte") + expect_true(getSerializedMode(unionString) == "byte") expect_true(collect(unionString)[[1]] == "Michael") expect_true(collect(unionString)[[5]]$name == "Andy") }) @@ -88,7 +88,7 @@ test_that("objectFile() works with row serialization", { objectIn <- objectFile(sc, objectPath) expect_true(inherits(objectIn, "RDD")) - expect_true(objectIn@env$serializedMode == "byte") + expect_true(getSerializedMode(objectIn) == "byte") expect_true(collect(objectIn)[[2]]$age == 30) }) diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index d8fe05c2c91d6..5094e9f74fb62 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -28,10 +28,10 @@ test_that("reserialize on RDD", { writeLines(mockFile, fileName) text.rdd <- textFile(sc, fileName) - expect_true(text.rdd@env$serializedMode == "string") + expect_true(getSerializedMode(text.rdd) == "string") ser.rdd <- reserialize(text.rdd) expect_equal(collect(ser.rdd), as.list(mockFile)) - expect_true(ser.rdd@env$serializedMode == "byte") + expect_true(getSerializedMode(ser.rdd) == "byte") unlink(fileName) }) From 179ab38810e42917db332c385ada9d27da42f6bb Mon Sep 17 00:00:00 2001 From: lythesia Date: Fri, 20 Feb 2015 12:02:47 +0800 Subject: [PATCH 452/687] add try counts and increase time interval --- pkg/R/sparkR.R | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 7d42842dc8847..16eb825f08a57 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -90,7 +90,8 @@ sparkR.init <- function( sparkExecutorEnv = list(), sparkJars = "", sparkRLibDir = "", - sparkRBackendPort = 12345) { + sparkRBackendPort = 12345, + sparkRRetryCount = 6) { if (exists(".sparkRjsc", envir = .sparkREnv)) { cat("Re-using existing Spark Context. Please stop SparkR with sparkR.stop() or restart R to create a new Spark Context\n") @@ -111,18 +112,28 @@ sparkR.init <- function( args = as.character(sparkRBackendPort), javaOpts = paste("-Xmx", sparkMem, sep = "")) - cat("Waiting JVM bring up ...\n") - while(TRUE) { + .sparkREnv$sparkRBackendPort <- sparkRBackendPort + cat("Waiting for JVM to come up...\n") + tries <- 0 + while(tries < sparkRRetryCount) { if(!connExists(.sparkREnv)) { - Sys.sleep(1) - cat(".") - connectBackend("localhost", sparkRBackendPort) # Connect to it + Sys.sleep(2 ^ tries) + tryCatch({ + connectBackend("localhost", .sparkREnv$sparkRBackendPort) + }, error = function(err) { + cat("Error in Connection, retrying...\n") + }, warning = function(war) { + cat("No Connection Found, retrying...\n") + }) + tries <- tries + 1 } else { - cat(" ok.\n") + cat("Connect ok.\n") break } } - .sparkREnv$sparkRBackendPort <- sparkRBackendPort + if (tries == sparkRRetryCount) { + stop(sprintf("Failed to connect JVM after %d tries.\n", sparkRRetryCount)) + } if (nchar(sparkHome) != 0) { sparkHome <- normalizePath(sparkHome) From 910e3bef359dd74ce53bf39009004f1161ddc8f8 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 20 Feb 2015 10:41:54 -0800 Subject: [PATCH 453/687] Add a timeout for initialization Also move sparkRBackend.stop into a finally block --- .../cs/amplab/sparkr/SparkRRunner.scala | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala index 6c4607574c4d1..fb356f89b2d1d 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala @@ -3,6 +3,7 @@ package edu.berkeley.cs.amplab.sparkr import java.io._ import java.net.URI import java.util.concurrent.Semaphore +import java.util.concurrent.TimeUnit import scala.collection.mutable.ArrayBuffer import scala.collection.JavaConversions._ @@ -19,6 +20,8 @@ object SparkRRunner { val otherArgs = args.slice(1, args.length) + // Time to wait for SparkR backend to initialize in seconds + val backendTimeout = sys.env.getOrElse("SPARKR_BACKEND_TIMEOUT", "120").toInt // TODO: Can we get this from SparkConf ? val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", "12345").toInt val rCommand = "Rscript" @@ -52,20 +55,26 @@ object SparkRRunner { sparkRBackendThread.start() // Wait for SparkRBackend initialization to finish - sparkRBackendThread.finishedInit.acquire() - - // Launch R - val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) - val env = builder.environment() - env.put("EXISTING_SPARKR_BACKEND_PORT", sparkRBackendPort.toString) - builder.redirectErrorStream(true) // Ugly but needed for stdout and stderr to synchronize - val process = builder.start() - - new RedirectThread(process.getInputStream, System.out, "redirect output").start() - - val returnCode = process.waitFor() - sparkRBackendThread.stopBackend() - System.exit(returnCode) + if (sparkRBackendThread.finishedInit.tryAcquire(backendTimeout, TimeUnit.SECONDS)) { + // Launch R + val returnCode = try { + val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) + val env = builder.environment() + env.put("EXISTING_SPARKR_BACKEND_PORT", sparkRBackendPort.toString) + builder.redirectErrorStream(true) // Ugly but needed for stdout and stderr to synchronize + val process = builder.start() + + new RedirectThread(process.getInputStream, System.out, "redirect output").start() + + process.waitFor() + } finally { + sparkRBackendThread.stopBackend() + } + System.exit(returnCode) + } else { + System.err.println("SparkR backend did not initialize in " + backendTimeout + " seconds") + System.exit(-1) + } } private class RedirectThread( From 57e005baf4a7c6a550eb81a169efe1651ca1effe Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sat, 21 Feb 2015 21:37:25 -0500 Subject: [PATCH 454/687] Revert "fix tests." This reverts commit fd836db89e785843be4fcd7868215770e00ffcd4. --- pkg/inst/tests/test_rdd.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index dbebe6fa979c8..0140c24cfec10 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -89,7 +89,7 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { actual <- collect(rdd2) expected <- list(24, 24, 24, 24, 24, 168, 170, 172, 174, 176) - expect_equal(actual, expected) + expect_equal(actual, expected)) }) test_that("PipelinedRDD support actions: cache(), persist(), unpersist(), checkpoint()", { From 8e4b3da2d89631a43eb42bd7c7a3e9fcbf67ec13 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sat, 21 Feb 2015 21:38:50 -0500 Subject: [PATCH 455/687] Revert "More docs" This reverts commit 24a7f13f272484c3b781c84adfc19c5bc17d2859. --- pkg/inst/tests/test_rdd.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 0140c24cfec10..bcf4cd4e1bc51 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -87,9 +87,9 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { }) rdd2 <- lapply(rdd2, function(x) x + x) actual <- collect(rdd2) - expected <- list(24, 24, 24, 24, 24, - 168, 170, 172, 174, 176) - expect_equal(actual, expected)) + expected <- + expect_equal(actual, list(24, 24, 24, 24, 24, + 168, 170, 172, 174, 176)) }) test_that("PipelinedRDD support actions: cache(), persist(), unpersist(), checkpoint()", { From f8ef0ab4be9d37cc27e3e9720417d8d19e683c53 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sat, 21 Feb 2015 21:38:57 -0500 Subject: [PATCH 456/687] Revert "More docs" This reverts commit a46516506cca8d625d983edd264330476c8774ef. --- pkg/R/utils.R | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index a16a0204720eb..bf4fa48ee5de4 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -268,8 +268,6 @@ joinTaggedList <- function(tagged_list, cnull) { mergeCompactLists(lists[[1]], lists[[2]]) } -# Recursively examine variables in functions to decide if their values should -# be included in the new function environment. closure.process <- function( node, func, @@ -283,7 +281,7 @@ closure.process <- function( } else if(nlen == 1) { if(mode(node) == 'name') { cnode <- as.character(node) - if(!cnode %in% names(as.list(args(func)))) { # Not a function argument + if(!cnode %in% names(as.list(args(func)))) { func.env <- environment(func) if(exists(cnode, envir=func.env, inherits=F)) { assign(cnode, get(cnode, envir=func.env), envir=env) @@ -293,7 +291,6 @@ closure.process <- function( } } -# Get function dependencies. clean.closure <- function( func, env From fddb9ccf6070ec89c8acf177e63579e2e8318137 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sat, 21 Feb 2015 21:39:00 -0500 Subject: [PATCH 457/687] Revert "add docs" This reverts commit 6ad4fc36bde14e9cdbab4224cec466b9e2aaf73f. --- pkg/R/RDD.R | 22 ++++------------------ pkg/inst/tests/test_rdd.R | 5 +---- pkg/inst/worker/worker.R | 38 +++++++++++++++----------------------- 3 files changed, 20 insertions(+), 45 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 750e0b8eec399..6b101714f9d71 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -18,8 +18,7 @@ setClass("RDD", setClass("PipelinedRDD", slots = list(prev = "RDD", func = "function", - # Accumulator to store function lineage - funcAccum = "environment", + funcAccum = "environment", prev_jrdd = "jobj"), contains = "RDD") @@ -55,7 +54,6 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) # prev_serialized is used during the delayed computation of JRDD in getJRDD .Object@prev <- prev - # We use funcAccum to store the lineage of function closures in a PipelinedRDD. .Object@funcAccum <- initAccumulator() isPipelinable <- function(rdd) { @@ -127,9 +125,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) - # Sorry, I use "depsBin" to serialize the funcAccum for now. - # Instead of serializing the entire environment, we can serialize - # a sequence of functions (with its closure). + depsBin <- getDependencies(computeFunc) depsBin <- serialize(rdd@funcAccum, NULL, ascii = TRUE) prev_jrdd <- rdd@prev_jrdd @@ -536,12 +532,9 @@ setMethod("countByKey", setMethod("lapply", signature(X = "RDD", FUN = "function"), function(X, FUN) { - # Creats a new the closure (environment) for the FUN to capture - # free variables. env.fun <- new.env(parent=.GlobalEnv) - # need to add free variables to env.fun environment clean.closure(FUN, env.fun) - # FUN now have new environment env.fun, with all values it needs. + # need to add ref variables to en.fun environment environment(FUN) <- env.fun func <- function(split, iterator) { @@ -1305,15 +1298,8 @@ setMethod("partitionBy", #} depsBinArr <- getDependencies(partitionFunc) - env.fun <- new.env(parent=.GlobalEnv) - clean.closure(partitionFunc, env.fun) - # need to add ref variables to en.fun environment - environment(partitionFunc) <- env.fun - funcAccum <- initAccumulator() - addItemToAccumulator(funcAccum, partitionFunc) - depsBinArr <- serialize(funcAccum, NULL, ascii = TRUE) - serializedHashFuncBytes <- serialize("computeFunc", #as.character(substitute(partitionFunc)), + serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), connection = NULL, ascii = TRUE) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index bcf4cd4e1bc51..7c2599f51e7e5 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -86,10 +86,7 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { part <- as.list(unlist(part) * split + i) }) rdd2 <- lapply(rdd2, function(x) x + x) - actual <- collect(rdd2) - expected <- - expect_equal(actual, list(24, 24, 24, 24, 24, - 168, 170, 172, 174, 176)) + collect(rdd2) }) test_that("PipelinedRDD support actions: cache(), persist(), unpersist(), checkpoint()", { diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 40fc9a8881645..136db6960d88b 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -41,11 +41,22 @@ for (pkg in packageNames) { suppressPackageStartupMessages(require(as.character(pkg), character.only=TRUE)) } -# Read the function lineage. +# read function dependencies depsLen <- SparkR:::readInt(inputCon) -if (depsLen > 0) { - # function lineage stored in an Accumulator - funcAccum <- unserialize(SparkR:::readRawLen(inputCon, depsLen)) +funcAccum <- unserialize(SparkR:::readRawLen(inputCon, depsLen)) +# testfilename <- "/home//ubuntu/Desktop/testfile" +# cat(typeof(funcAccum), '\n', file = testfilename) +# cat(funcAccum$size, '\n', file = testfilename, append = T) +# cat(typeof(funcAccum$data[[1]]), '\n', file = testfilename, append = T) +# cat(as.character(body(funcAccum$data[[1]])), file = testfilename, append = T) +if (funcAccum$size > 0) { + computeFunc <- function(split, part) { + res <- part + for (i in 1:funcAccum$counter) { + res <- funcAccum$data[[i]](split, res) + } + res + } } # Read and set broadcast variables @@ -62,25 +73,6 @@ if (numBroadcastVars > 0) { # as number of partitions to create. numPartitions <- SparkR:::readInt(inputCon) -# Build up the execFunction from the Accumulator -if (exists("funcAccum")) { - if (funcAccum$size > 0) { - if (numPartitions == -1) { - # Regular RDDs: build nested functions. - computeFunc <- function(split, part) { - res <- part - for (i in 1:funcAccum$counter) { - res <- funcAccum$data[[i]](split, res) - } - res - } - } else { - # Pairwise RDDs. - computeFunc <- funcAccum$data[[1]] - } - } -} - isEmpty <- SparkR:::readInt(inputCon) if (isEmpty != 0) { From 8be02de8416dcdccbf805d437eadfa30207f9940 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sat, 21 Feb 2015 21:39:01 -0500 Subject: [PATCH 458/687] Revert "loop 1-12 test pass." This reverts commit 193f5fe526eaf4af620fd625d754130a13bd06f6. --- pkg/R/RDD.R | 18 +---------------- pkg/R/utils.R | 42 ---------------------------------------- pkg/inst/worker/worker.R | 18 ++++------------- 3 files changed, 5 insertions(+), 73 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 6b101714f9d71..66e616f252533 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -18,7 +18,6 @@ setClass("RDD", setClass("PipelinedRDD", slots = list(prev = "RDD", func = "function", - funcAccum = "environment", prev_jrdd = "jobj"), contains = "RDD") @@ -53,8 +52,6 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) # NOTE: We use prev_serialized to track if prev_jrdd is serialized # prev_serialized is used during the delayed computation of JRDD in getJRDD .Object@prev <- prev - - .Object@funcAccum <- initAccumulator() isPipelinable <- function(rdd) { e <- rdd@env @@ -73,12 +70,10 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) func(split, prev@func(split, iterator)) } .Object@func <- pipelinedFunc - .Object@funcAccum <- cloneAccumulator(prev@funcAccum) .Object@prev_jrdd <- prev@prev_jrdd # maintain the pipeline # Get if the prev_jrdd was serialized from the parent RDD .Object@env$prev_serialized <- prev@env$prev_serialized } - addItemToAccumulator(.Object@funcAccum, func) .Object }) @@ -126,7 +121,6 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), function(name) { get(name, .broadcastNames) }) depsBin <- getDependencies(computeFunc) - depsBin <- serialize(rdd@funcAccum, NULL, ascii = TRUE) prev_jrdd <- rdd@prev_jrdd @@ -532,11 +526,6 @@ setMethod("countByKey", setMethod("lapply", signature(X = "RDD", FUN = "function"), function(X, FUN) { - env.fun <- new.env(parent=.GlobalEnv) - clean.closure(FUN, env.fun) - # need to add ref variables to en.fun environment - environment(FUN) <- env.fun - func <- function(split, iterator) { lapply(iterator, FUN) } @@ -657,12 +646,7 @@ setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { setMethod("lapplyPartitionsWithIndex", signature(X = "RDD", FUN = "function"), function(X, FUN) { - env.fun <- new.env(parent=.GlobalEnv) - clean.closure(FUN, env.fun) - # need to add ref variables to en.fun environment - environment(FUN) <- env.fun - - closureCapturingFunc <- function(split, part) { + closureCapturingFunc <- function(split, part) { FUN(split, part) } PipelinedRDD(X, closureCapturingFunc) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index bf4fa48ee5de4..7c2a153b8b55d 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -195,14 +195,6 @@ initAccumulator <- function() { acc } -cloneAccumulator <- function(acc) { - newAcc <- initAccumulator() - newAcc$size <- acc$size - newAcc$data <- acc$data - newAcc$counter <- acc$counter - newAcc -} - # Utility function to sort a list of key value pairs # Used in unit tests sortKeyValueList <- function(kv_list) { @@ -267,37 +259,3 @@ joinTaggedList <- function(tagged_list, cnull) { lists <- genCompactLists(tagged_list, cnull) mergeCompactLists(lists[[1]], lists[[2]]) } - -closure.process <- function( - node, - func, - env -) { - nlen <- length(node) - if(nlen > 1) { - for(i in 1:nlen) { - closure.process(node[[i]], func, env) - } - } else if(nlen == 1) { - if(mode(node) == 'name') { - cnode <- as.character(node) - if(!cnode %in% names(as.list(args(func)))) { - func.env <- environment(func) - if(exists(cnode, envir=func.env, inherits=F)) { - assign(cnode, get(cnode, envir=func.env), envir=env) - } - } - } - } -} - -clean.closure <- function( - func, - env -) { - if(mode(func) != 'function' || mode(env) != 'environment') - stop('parameter type mismatch...') - func.body <- body(func) - - closure.process(func.body, func, env) -} diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 136db6960d88b..c5457adcbc54d 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -43,20 +43,10 @@ for (pkg in packageNames) { # read function dependencies depsLen <- SparkR:::readInt(inputCon) -funcAccum <- unserialize(SparkR:::readRawLen(inputCon, depsLen)) -# testfilename <- "/home//ubuntu/Desktop/testfile" -# cat(typeof(funcAccum), '\n', file = testfilename) -# cat(funcAccum$size, '\n', file = testfilename, append = T) -# cat(typeof(funcAccum$data[[1]]), '\n', file = testfilename, append = T) -# cat(as.character(body(funcAccum$data[[1]])), file = testfilename, append = T) -if (funcAccum$size > 0) { - computeFunc <- function(split, part) { - res <- part - for (i in 1:funcAccum$counter) { - res <- funcAccum$data[[i]](split, res) - } - res - } +if (depsLen > 0) { + execFunctionDeps <- SparkR:::readRawLen(inputCon, depsLen) + # load the dependencies into current environment + load(rawConnection(execFunctionDeps, open='rb')) } # Read and set broadcast variables From 21d4a97c2fb4015e4b27bd7d46ade7a8cf4f7d48 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 23 Feb 2015 00:02:51 -0500 Subject: [PATCH 459/687] Adds cleanClosure to capture the function closures. --- pkg/R/utils.R | 91 +++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_utils.R | 35 ++++++++++++++ 2 files changed, 126 insertions(+) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 778ae67def047..64c43eccd4eb9 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -288,3 +288,94 @@ convertEnvsToList <- function(keys, vals) { list(keys[[name]], vals[[name]]) }) } + +# Utility function to recursively traverse the Abstract Syntax Tree (AST) of a +# user defined function (UDF), and to examine variables in the UDF to decide +# if their values should be included in the new function environment. +# param +# node The current AST node in the traversal. +# oldEnv The original function environment. +# argNames The argument names of the function. +# newEnv A new function environment to store necessary function dependencies. +processClosure <- function(node, oldEnv, argNames, newEnv) { + nodeLen <- length(node) + if (nodeLen == 0) { + return + } + if (nodeLen > 1 && typeof(node) == "language") { + # Recursive case: current AST node is an internal node, check for its children. + nodeChar <- as.character(node[[1]]) + switch(nodeChar, + "{" = { # Start of a function body. + for (i in 2:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + }, + "<-" = { # Assignment. + defVar <- node[[2]] + if (length(defVar) == 1 && typeof(defVar) == "symbol") { + # Add the defined variable name into .defVars. + assign(".defVars", + c(get(".defVars", envir = .sparkREnv), as.character(defVar)), + envir = .sparkREnv) + } + for (i in 3:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + }, + "function" = { # Function definition. + newArgs <- names(node[[2]]) + argNames <- c(argNames, newArgs) # Add parameter names. + for (i in 3:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + }, + { + for (i in 1:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + }) + } else if (nodeLen == 1 && typeof(node) == "symbol") { + # Base case: current AST node is a leaf node and a symbol. + nodeChar <- as.character(node) + if (!nodeChar %in% argNames && # Not a function parameter or function local variable. + !nodeChar %in% get(".defVars", envir = .sparkREnv)) { + func.env <- oldEnv + topEnv <- parent.env(.GlobalEnv) + # Search in function environment, and function's enclosing environments + # up to global environment. There is no need to look into package environments + # above the global or namespace environment below the global, as they are + # assumed to be loaded on workers. + while (!identical(func.env, topEnv) && !isNamespace(func.env)) { + # Set parameter 'inherits' to FALSE since we do not need to search in + # attached package environments. + if (exists(nodeChar, envir=func.env, inherits = FALSE)) { + assign(nodeChar, get(nodeChar, envir=func.env), envir = newEnv) + break + } else { + # Continue to search in enclosure. + func.env <- parent.env(func.env) + } + } + } + } +} + +# Utility function to get user defined function (UDF) dependencies (closure). +# More specifically, this function captures the values of free variables defined +# outside a UDF, and stores them in a new environment. +# param +# func A function whose closure needs to be captured. +# newEnv A new function environment to store necessary function dependencies. +cleanClosure <- function(func, newEnv) { + if (is.function(func) && is.environment(newEnv)) { + # .defVars is a character vector of variables names defined in the function. + assign(".defVars", c(), envir = .sparkREnv) + func.body <- body(func) + oldEnv <- environment(func) + argNames <- names(as.list(args(func))) + argsNames <- argNames[-length(argNames)] # Remove the ending NULL in pairlist. + # Recursively examine variables in the function body. + processClosure(func.body, oldEnv, argNames, newEnv) + } +} diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 0a112254c7df1..7317d0421d092 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -35,3 +35,38 @@ test_that("reserialize on RDD", { unlink(fileName) }) + +test_that("clean.closure on R functions", { + y <- c(1, 2, 3) + g <- function(x) { x + 1 } + f <- function(x) { g(x) + y } + env <- new.env() + cleanClosure(f, env) + expect_equal(length(ls(env)), 2) # y, g + actual <- get("y", envir = env) + expect_equal(actual, y) + actual <- get("g", envir = env) + expect_equal(actual, g) + + # Check for nested enclosures and package variables. + env2 <- new.env() + funcEnv <- new.env(parent = env2) + f <- function(x) { min(g(x) + y) } + environment(f) <- funcEnv # enclosing relationship: f -> funcEnv -> env2 -> .GlobalEnv + env <- new.env() + SparkR:::cleanClosure(f, env) + expect_equal(length(ls(env)), 2) # "min" should not be included + actual <- get("y", envir = env) + expect_equal(actual, y) + actual <- get("g", envir = env) + expect_equal(actual, g) + + # Test for function (and variable) definitions. + f <- function(x) { + g <- function(y) { y * 2 } + g(x) + } + env <- new.env() + SparkR:::cleanClosure(f, env) + expect_equal(length(ls(env)), 0) # "y" and "g" should not be included. +}) From 481ae37bd5924ae6cc90df233cd729b55225421f Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 23 Feb 2015 09:56:33 -0600 Subject: [PATCH 460/687] Updated stale comments and standardized arg names --- pkg/R/DataFrame.R | 2 +- pkg/R/RDD.R | 29 +++++++++---------- pkg/R/utils.R | 6 ++-- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 20 ++++++------- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 2 +- 5 files changed, 29 insertions(+), 30 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 112e993df4c67..cfdd80ca7d92f 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -114,7 +114,7 @@ setMethod("count", callJMethod(sdf, "count") }) -# Collect the rows of a Spark DataFrame and return a named list for each row. +# Collects a Spark DataFrame and returns a list of named lists (each of which represents a row). #' @rdname collect-methods #' @export diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c612abaf08a72..ce832c2466988 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -65,8 +65,6 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@colNames <- prev@colNames - # NOTE: We use prev_serialized to track if prev_jrdd is serialized - # prev_serialized is used during the delayed computation of JRDD in getJRDD .Object@prev <- prev isPipelinable <- function(rdd) { @@ -78,9 +76,9 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) # This transformation is the first in its stage: .Object@func <- func .Object@prev_jrdd <- getJRDD(prev) - # Since this is the first step in the pipeline, the prev_serialized - # is same as serialized here. .Object@env$prev_serializedMode <- prev@env$serializedMode + # NOTE: We use prev_serializedMode to track the serialization mode of prev_JRDD + # prev_serializedMode is used during the delayed computation of JRDD in getJRDD .Object@colNames <- prev@colNames } else { @@ -102,10 +100,11 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) #' @export #' #' @param jrdd Java object reference to the backing JavaRDD -#' @param serialized "byte" if the RDD stores data serialized in R, "string" if the RDD stores strings, -#' and "row" if the RDD stores the rows of a DataFrame +#' @param serializedMode Use "byte" if the RDD stores data serialized in R, "string" if the RDD +#' stores strings, and "row" if the RDD stores the rows of a DataFrame #' @param isCached TRUE if the RDD is cached #' @param isCheckpointed TRUE if the RDD has been checkpointed +#' @param colNames A list of column names to be used with serializedMode == "row" RDD <- function(jrdd, serializedMode = "byte", isCached = FALSE, isCheckpointed = FALSE, colNames = list()) { new("RDD", jrdd, serializedMode, isCached, isCheckpointed, colNames) @@ -121,13 +120,13 @@ setGeneric("getSerializedMode", function(rdd, ...) { standardGeneric("getSeriali setMethod("getSerializedMode", signature(rdd = "RDD"), function(rdd) rdd@env$serializedMode ) # For pipelined RDDs if jrdd_val is set then serializedMode should exist # if not we return the defaultSerialization mode of "byte" as we don't know the serialization -# mode at this point of time. +# mode at this point in time. setMethod("getSerializedMode", signature(rdd = "PipelinedRDD"), - function(rdd, defaultSerialization = "byte") { + function(rdd) { if (!is.null(rdd@env$jrdd_val)) { return(rdd@env$serializedMode) } else { - return(defaultSerialization) + return("byte") } }) @@ -135,7 +134,7 @@ setMethod("getSerializedMode", signature(rdd = "PipelinedRDD"), setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) setMethod("getJRDD", signature(rdd = "RDD"), function(rdd) rdd@jrdd ) setMethod("getJRDD", signature(rdd = "PipelinedRDD"), - function(rdd, dataSerialization = "byte") { + function(rdd, serializedMode = "byte") { if (!is.null(rdd@env$jrdd_val)) { return(rdd@env$jrdd_val) } @@ -159,7 +158,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), prev_jrdd <- rdd@prev_jrdd - if (dataSerialization == "string") { + if (serializedMode == "string") { rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, @@ -183,7 +182,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), callJMethod(prev_jrdd, "classTag")) } # Save the serialization flag after we create a RRDD - rdd@env$serializedMode <- dataSerialization + rdd@env$serializedMode <- serializedMode rdd@env$jrdd_val <- callJMethod(rddRef, "asJavaRDD") # rddRef$asJavaRDD() rdd@env$jrdd_val }) @@ -1100,8 +1099,8 @@ setGeneric("saveAsObjectFile", function(rdd, path) { standardGeneric("saveAsObje setMethod("saveAsObjectFile", signature(rdd = "RDD", path = "character"), function(rdd, path) { - # If the RDD is in string format, need to serialize it before saving it because when - # objectFile() is invoked to load the saved file, only serialized format is assumed. + # If serializedMode == "string" we need to serialize the data before saving it since + # objectFile() assumes serializedMode == "byte". if (getSerializedMode(rdd) != "byte") { rdd <- reserialize(rdd) } @@ -1134,7 +1133,7 @@ setMethod("saveAsTextFile", stringRdd <- lapply(rdd, func) # Return nothing invisible( - callJMethod(getJRDD(stringRdd, dataSerialization = "string"), "saveAsTextFile", path)) + callJMethod(getJRDD(stringRdd, serializedMode = "string"), "saveAsTextFile", path)) }) #' Sort an RDD by the given key function. diff --git a/pkg/R/utils.R b/pkg/R/utils.R index d5220c7e4e64a..95766eac01dac 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -7,7 +7,7 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, serializedMode = "byte", colNames = list()) { arrSize <- callJMethod(jList, "size") - # Unserialized datasets (such as an RDD directly generated by textFile()): + # Datasets with serializedMode == "string" (such as an RDD directly generated by textFile()): # each partition is not dense-packed into one Array[Byte], and `arrSize` # here corresponds to number of logical elements. Thus we can prune here. if (serializedMode == "string" && !is.null(logicalUpperBound)) { @@ -170,8 +170,8 @@ hashCode <- function(key) { } } -# Create a new RDD in serialized form. -# Return itself if already in serialized form. +# Create a new RDD with serializedMode == "byte". +# Return itself if already in "byte" format. reserialize <- function(rdd) { if (!inherits(rdd, "RDD")) { stop("Argument 'rdd' is not an RDD type.") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 3127ed012059b..a62ec7b33f586 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -16,7 +16,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], numPartitions: Int, func: Array[Byte], - parentSerialized: String, + parentSerializedMode: String, dataSerialized: Boolean, functionDependencies: Array[Byte], packageNames: Array[Byte], @@ -130,7 +130,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.write(func, 0, func.length) // R worker process input serialization flag - SerDe.writeString(dataOut, parentSerialized) + SerDe.writeString(dataOut, parentSerializedMode) // R worker process output serialization flag dataOut.writeInt(if (dataSerialized) 1 else 0) @@ -158,7 +158,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(1) } - if (parentSerialized == SerializationFormats.ROW) { + if (parentSerializedMode == SerializationFormats.ROW) { SerDe.writeStringArr(dataOut, colNames) for (row <- iter) { val rowArr = row.asInstanceOf[Array[Byte]] @@ -166,7 +166,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( } } else { for (elem <- iter) { - if (parentSerialized == SerializationFormats.BYTE) { + if (parentSerializedMode == SerializationFormats.BYTE) { val elemArr = elem.asInstanceOf[Array[Byte]] dataOut.writeInt(elemArr.length) dataOut.write(elemArr, 0, elemArr.length) @@ -215,13 +215,13 @@ private class PairwiseRRDD[T: ClassTag]( parent: RDD[T], numPartitions: Int, hashFunc: Array[Byte], - parentSerialized: String, + parentSerializedMode: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object], colNames: Array[String]) - extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, parentSerialized, + extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, parentSerializedMode, true, functionDependencies, packageNames, rLibDir, broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), colNames) { @@ -262,13 +262,13 @@ private class PairwiseRRDD[T: ClassTag]( private class RRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], - parentSerialized: String, + parentSerializedMode: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object], colNames: Array[String]) - extends BaseRRDD[T, Array[Byte]](parent, -1, func, parentSerialized, + extends BaseRRDD[T, Array[Byte]](parent, -1, func, parentSerializedMode, true, functionDependencies, packageNames, rLibDir, broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), colNames) { @@ -307,13 +307,13 @@ private class RRDD[T: ClassTag]( private class StringRRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], - parentSerialized: String, + parentSerializedMode: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object], colNames: Array[String]) - extends BaseRRDD[T, String](parent, -1, func, parentSerialized, + extends BaseRRDD[T, String](parent, -1, func, parentSerializedMode, false, functionDependencies, packageNames, rLibDir, broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), colNames) { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index bbba178dfae3c..7ff3821fadd09 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -24,7 +24,7 @@ object SQLUtils { df.map(r => rowToRBytes(r)) } - def rowToRBytes(row: Row): Array[Byte] = { + private[this] def rowToRBytes(row: Row): Array[Byte] = { val bos = new ByteArrayOutputStream() val dos = new DataOutputStream(bos) From acf7e1af51dd3a51aab1412497c5cd3c7a428349 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 23 Feb 2015 16:12:43 -0600 Subject: [PATCH 461/687] Rework the Scala to R DataFrame Conversion Calling `collect()` on a DataFrame now returns an R data.frame. The backend process has been reworked so that almost of all of the transformation and manipulation happens on the JVM. See `dfToCols` in `SQLUtils.scala`. In addition, collectToDF has been dropped and test_sparkRSQL.R has been updated accordingly. --- pkg/NAMESPACE | 3 +- pkg/R/DataFrame.R | 75 ++++--------------- pkg/R/deserialize.R | 9 +++ pkg/inst/tests/test_sparkSQL.R | 22 +++--- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 56 +++++++------- 5 files changed, 61 insertions(+), 104 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 92cb3bee6f6cd..5d62837745c55 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -81,8 +81,7 @@ importFrom(methods, setGeneric, setMethod, setOldClass) exportClasses("DataFrame") -exportMethods("collectToDF", - "printSchema", +exportMethods("printSchema", "registerTempTable", "toRDD") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index cfdd80ca7d92f..bd31e6155a6f3 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -114,7 +114,7 @@ setMethod("count", callJMethod(sdf, "count") }) -# Collects a Spark DataFrame and returns a list of named lists (each of which represents a row). +# Collects all the elements of a Spark DataFrame and coerces them into an R data.frame. #' @rdname collect-methods #' @export @@ -131,8 +131,19 @@ setMethod("count", setMethod("collect", signature(rdd = "DataFrame"), function(rdd) { - rddIn <- toRDD(rdd) - collect(rddIn) + # listCols is a list of raw vectors, one per column + listCols <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToCols", rdd@sdf) + cols <- lapply(listCols, function(col) { + objRaw <- rawConnection(col) + numRows <- readInt(objRaw) + col <- readCol(objRaw, numRows) + close(objRaw) + col + }) + colNames <- callJMethod(rdd@sdf, "columns") + names(cols) <- colNames + dfOut <- do.call(cbind.data.frame, cols) + dfOut }) # Take the first NUM elements in a DataFrame and return a named list for each row. @@ -178,7 +189,7 @@ setMethod("toRDD", signature(df = "DataFrame"), function(df) { jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", df@sdf) - names <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) + names <- callJMethod(df@sdf, "columns") RDD(jrdd, serializedMode = "row", colNames = names) }) @@ -247,59 +258,3 @@ setMethod("foreachPartition", rddIn <- toRDD(rdd) foreachPartition(rddIn, func) }) - -#' Collect to DataFrame -#' -#' Collects all the elements of a Spark DataFrame and coerces them into an R data.frame. -#' -#' @param df A Spark DataFrame -#' @return An R data.frame -#' -#' @rdname collectToDF -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' sqlCtx <- sparkRSQL.init(sc) -#' path <- "path/to/file.json" -#' df <- jsonFile(sqlCtx, path) -#' converted <- collectToDF(df) -#' is.data.frame(converted) -#' } - -setGeneric("collectToDF", function(df) { standardGeneric("collectToDF") }) - -setMethod("collectToDF", - signature(df = "DataFrame"), - function(df) { - listCols <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToColRDD", df@sdf) - cols <- lapply(seq_along(listCols), - function(colIdx) { - rddCol <- listCols[[colIdx]] - # Returns a list of byte arrays per partition - rddRaw <- callJMethod(rddCol, "collect") - colPartitions <- lapply(seq_along(rddRaw), - function(partIdx) { - objRaw <- rawConnection(rddRaw[[partIdx]]) - numRows <- readInt(objRaw) - # List of deserialized values per partition - col <- readCol(objRaw, numRows) - close(objRaw) - col - }) - # Flatten column list into a vector - colOut <- unlist(colPartitions, recursive = FALSE) - }) - colNames <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getColNames", df@sdf) - names(cols) <- colNames - dfOut <- do.call(cbind.data.frame, cols) - }) - -# Take a single column as Array[Byte] and deserialize it into an atomic vector -readCol <- function(rawCon, numRows) { - sapply(1:numRows, function(x) { - value <- readObject(rawCon) - # Replace NULL with NA so we can coerce to vectors - if (is.null(value)) NA else value - }) # each column is an atomic vector now -} diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index 9e1f429ea3d9c..a8b6fa1def41d 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -146,3 +146,12 @@ assignNames <- function(row, colNames) { names(row) <- colNames row } + +# Take a single column as Array[Byte] and deserialize it into an atomic vector +readCol <- function(inputCon, numRows) { + sapply(1:numRows, function(x) { + value <- readObject(inputCon) + # Replace NULL with NA so we can coerce to vectors + if (is.null(value)) NA else value + }) # each column is an atomic vector now +} diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 333cd10e42a60..420b0882eb6e3 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -104,10 +104,19 @@ test_that("lapply() on a DataFrame returns an RDD with the correct columns", { expect_true(collected[[2]]$newCol == "35") }) +test_that("collect() returns a data.frame", { + df <- jsonFile(sqlCtx, jsonPath) + rdf <- collect(df) + expect_true(is.data.frame(rdf)) + expect_true(names(rdf)[1] == "age") + expect_true(nrow(rdf) == 3) + expect_true(ncol(rdf) == 2) +}) + test_that("collect() and take() on a DataFrame return the same number of rows and columns", { df <- jsonFile(sqlCtx, jsonPath) - expect_true(length(collect(df)) == length(take(df, 10))) - expect_true(length(collect(df)[[1]]) == length(take(df, 10)[[1]])) + expect_true(nrow(collect(df)) == length(take(df, 10))) + expect_true(ncol(collect(df)) == length(take(df, 10)[[1]])) }) test_that("multiple pipeline transformations starting with a DataFrame result in an RDD with the correct values", { @@ -127,13 +136,4 @@ test_that("multiple pipeline transformations starting with a DataFrame result in expect_false(collect(second)[[3]]$testCol) }) -test_that("collectToDF() returns a data.frame", { - df <- jsonFile(sqlCtx, jsonPath) - rdf <- collectToDF(df) - expect_true(is.data.frame(rdf)) - expect_true(names(rdf)[1] == "age") - expect_true(nrow(rdf) == 3) - expect_true(ncol(rdf) == 2) -}) - unlink(jsonPath) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 7ff3821fadd09..50bff49b9b739 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -16,10 +16,6 @@ object SQLUtils { new SQLContext(sc) } - def getColNames(df: DataFrame): Array[String] = { - df.schema.fields.map(_.name) - } - def dfToRowRDD(df: DataFrame): JavaRDD[Array[Byte]] = { df.map(r => rowToRBytes(r)) } @@ -36,39 +32,37 @@ object SQLUtils { bos.toByteArray() } - // We convert the DataFrame into an array of RDDs one for each column - // Each RDD contains a serialized form of the column per partition. - def dfToColRDD(df: DataFrame): Array[RDD[Array[Byte]]] = { - val colRDDs = convertRowsToColumns(df) - val dfOut = colRDDs.map { col => + def dfToCols(df: DataFrame): Array[Array[Byte]] = { + // localDF is Array[Row] + val localDF = df.collect() + val numCols = df.columns.length + // dfCols is Array[Array[Any]] + val dfCols = convertRowsToColumns(localDF, numCols) + + dfCols.map { col => colToRBytes(col) - } - dfOut + } } - def convertRowsToColumns(df: DataFrame): Array[RDD[Any]] = { - val numCols = df.schema.fields.length - val colRDDs = (0 until numCols).map { colIdx => - df.map { row => - row(colIdx) - } - } - colRDDs.toArray + def convertRowsToColumns(localDF: Array[Row], numCols: Int): Array[Array[Any]] = { + (0 until numCols).map { colIdx => + localDF.map { row => + row(colIdx) + } + }.toArray } - def colToRBytes(col: RDD[Any]): RDD[Array[Byte]] = { - col.mapPartitions { iter => - val arr = iter.toArray // Array[Any] - val bos = new ByteArrayOutputStream() - val dos = new DataOutputStream(bos) - val numRowsInPartition = arr.length + def colToRBytes(col: Array[Any]): Array[Byte] = { + val numRows = col.length + val bos = new ByteArrayOutputStream() + val dos = new DataOutputStream(bos) + + SerDe.writeInt(dos, numRows) - SerDe.writeInt(dos, numRowsInPartition) - arr.map { item => - val obj: Object = item.asInstanceOf[Object] - SerDe.writeObject(dos, obj) - } - Iterator.single(bos.toByteArray()) + col.map { item => + val obj: Object = item.asInstanceOf[Object] + SerDe.writeObject(dos, obj) } + bos.toByteArray() } } From 231deab5a22e1adc72149132790c845365575702 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 23 Feb 2015 21:14:48 -0600 Subject: [PATCH 462/687] Change reserialize to serializeToBytes --- pkg/R/RDD.R | 6 +++--- pkg/R/utils.R | 2 +- pkg/inst/tests/test_utils.R | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index ce832c2466988..c1c3fec4563e6 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1102,7 +1102,7 @@ setMethod("saveAsObjectFile", # If serializedMode == "string" we need to serialize the data before saving it since # objectFile() assumes serializedMode == "byte". if (getSerializedMode(rdd) != "byte") { - rdd <- reserialize(rdd) + rdd <- serializeToBytes(rdd) } # Return nothing invisible(callJMethod(getJRDD(rdd), "saveAsObjectFile", path)) @@ -1389,8 +1389,8 @@ setMethod("unionRDD", union.rdd <- RDD(jrdd, getSerializedMode(x), colNames = x@colNames) } else { # One of the RDDs is not serialized, we need to serialize it first. - if (getSerializedMode(x) != "byte") x <- reserialize(x) - if (getSerializedMode(y) != "byte") y <- reserialize(y) + if (getSerializedMode(x) != "byte") x <- serializeToBytes(x) + if (getSerializedMode(y) != "byte") y <- serializeToBytes(y) jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) union.rdd <- RDD(jrdd, "byte") } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 95766eac01dac..3210e73119f78 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -172,7 +172,7 @@ hashCode <- function(key) { # Create a new RDD with serializedMode == "byte". # Return itself if already in "byte" format. -reserialize <- function(rdd) { +serializeToBytes <- function(rdd) { if (!inherits(rdd, "RDD")) { stop("Argument 'rdd' is not an RDD type.") } diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 5094e9f74fb62..27ee6e2e163aa 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -21,7 +21,7 @@ test_that("convertJListToRList() gives back (deserializes) the original JLists expect_equal(rList, strs) }) -test_that("reserialize on RDD", { +test_that("serializeToBytes on RDD", { # File content mockFile <- c("Spark is pretty.", "Spark is awesome.") fileName <- tempfile(pattern="spark-test", fileext=".tmp") @@ -29,7 +29,7 @@ test_that("reserialize on RDD", { text.rdd <- textFile(sc, fileName) expect_true(getSerializedMode(text.rdd) == "string") - ser.rdd <- reserialize(text.rdd) + ser.rdd <- serializeToBytes(text.rdd) expect_equal(collect(ser.rdd), as.list(mockFile)) expect_true(getSerializedMode(ser.rdd) == "byte") From 04c4b6593b1a39f2dfb75f917531d4e618c25d1b Mon Sep 17 00:00:00 2001 From: lythesia Date: Tue, 24 Feb 2015 23:40:31 +0800 Subject: [PATCH 463/687] add repartition/coalesce --- pkg/NAMESPACE | 2 ++ pkg/R/RDD.R | 54 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 14 ++++++++++ pkg/man/coalesce.Rd | 33 ++++++++++++++++++++++++ pkg/man/repartition.Rd | 41 +++++++++++++++++++++++++++++ 5 files changed, 144 insertions(+) create mode 100644 pkg/man/coalesce.Rd create mode 100644 pkg/man/repartition.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 1cfcc0a6da674..26511b8c0c29d 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -6,6 +6,7 @@ exportMethods( "aggregateRDD", "cache", "checkpoint", + "coalesce", "cogroup", "collect", "collectAsMap", @@ -47,6 +48,7 @@ exportMethods( "reduce", "reduceByKey", "reduceByKeyLocally", + "repartition", "rightOuterJoin", "sampleRDD", "saveAsTextFile", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 67fb28f219e27..76f09f44d1ada 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1039,6 +1039,60 @@ setMethod("keyBy", lapply(rdd, apply.func) }) +#' Return a new RDD that has exactly numPartitions partitions. +#' Can increase or decrease the level of parallelism in this RDD. Internally, +#' this uses a shuffle to redistribute data. +#' If you are decreasing the number of partitions in this RDD, consider using +#' coalesce, which can avoid performing a shuffle. +#' +#' @param rdd The RDD. +#' @param numPartitions Number of partitions to create. +#' @rdname repartition +#' @seealso coalesce +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5, 6, 7), 4L) +#' numPartitions(rdd) # 4 +#' numPartitions(repartition(rdd, 2L)) # 2 +#'} +setGeneric("repartition", function(rdd, numPartitions) { standardGeneric("repartition") }) + +#' @rdname repartition +#' @aliases repartition,RDD +setMethod("repartition", + signature(rdd = "RDD", numPartitions = "integer"), + function(rdd, numPartitions) { + jrdd <- callJMethod(getJRDD(rdd), "repartition", numPartitions) + RDD(jrdd) + }) + +#' Return a new RDD that is reduced into numPartitions partitions. +#' +#' @param rdd The RDD. +#' @param numPartitions Number of partitions to create. +#' @rdname coalesce +#' @seealso repartition +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5), 3L) +#' numPartitions(rdd) # 3 +#' numPartitions(coalesce(rdd, 1L)) # 1 +#'} +setGeneric("coalesce", function(rdd, numPartitions, ...) { standardGeneric("coalesce") }) + +#' @rdname coalesce +#' @aliases coalesce,RDD +setMethod("coalesce", + signature(rdd = "RDD", numPartitions = "integer"), + function(rdd, numPartitions, shuffle = FALSE) { + jrdd <- callJMethod(getJRDD(rdd), "coalesce", numPartitions, shuffle) + RDD(jrdd) + }) + #' Save this RDD as a SequenceFile of serialized objects. #' #' @param rdd The RDD to save diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index f0c00d71d076c..ffa749171bf16 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -267,6 +267,20 @@ test_that("keyBy on RDDs", { expect_equal(actual, lapply(nums, function(x) { list(func(x), x) })) }) +test_that("repartition/coalesce on RDDs", { + rdd <- parallelize(sc, 1:10, 3L) + expect_equal(numPartitions(rdd), 3L) + + nrdd <- repartition(rdd, 2L) + expect_equal(numPartitions(nrdd), 2L) + + nrdd2 <- repartition(rdd, 5L) + expect_equal(numPartitions(nrdd2), 5L) + + nrdd3 <- coalesce(rdd, 1L) + expect_equal(numPartitions(nrdd3), 1L) +}) + test_that("sortBy() on RDDs", { sortedRdd <- sortBy(rdd, function(x) { x * x }, ascending = FALSE) actual <- collect(sortedRdd) diff --git a/pkg/man/coalesce.Rd b/pkg/man/coalesce.Rd new file mode 100644 index 0000000000000..f308e9a853d8e --- /dev/null +++ b/pkg/man/coalesce.Rd @@ -0,0 +1,33 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{coalesce} +\alias{coalesce} +\alias{coalesce,RDD} +\alias{coalesce,RDD,integer-method} +\title{Return a new RDD that is reduced into numPartitions partitions.} +\usage{ +coalesce(rdd, numPartitions, ...) + +\S4method{coalesce}{RDD,integer}(rdd, numPartitions, shuffle = FALSE) +} +\arguments{ +\item{rdd}{The RDD.} + +\item{numPartitions}{Number of partitions to create.} +} +\description{ +Return a new RDD that is reduced into numPartitions partitions. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1, 2, 3, 4, 5), 3L) +numPartitions(rdd) # 3 +numPartitions(coalesce(rdd, 1L)) # 1 +} +} +\seealso{ +repartition +} + diff --git a/pkg/man/repartition.Rd b/pkg/man/repartition.Rd new file mode 100644 index 0000000000000..1bbf672ec8231 --- /dev/null +++ b/pkg/man/repartition.Rd @@ -0,0 +1,41 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{repartition} +\alias{repartition} +\alias{repartition,RDD} +\alias{repartition,RDD,integer-method} +\title{Return a new RDD that has exactly numPartitions partitions. +Can increase or decrease the level of parallelism in this RDD. Internally, +this uses a shuffle to redistribute data. +If you are decreasing the number of partitions in this RDD, consider using +coalesce, which can avoid performing a shuffle.} +\usage{ +repartition(rdd, numPartitions) + +\S4method{repartition}{RDD,integer}(rdd, numPartitions) +} +\arguments{ +\item{rdd}{The RDD.} + +\item{numPartitions}{Number of partitions to create.} +} +\description{ +Return a new RDD that has exactly numPartitions partitions. +Can increase or decrease the level of parallelism in this RDD. Internally, +this uses a shuffle to redistribute data. +If you are decreasing the number of partitions in this RDD, consider using +coalesce, which can avoid performing a shuffle. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(1, 2, 3, 4, 5, 6, 7), 4L) +numPartitions(rdd) # 4 +numPartitions(repartition(rdd, 2L)) # 2 +} +} +\seealso{ +coalesce +} + From 0387db26357fc4b4774589b704bd4cec72f20cce Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 24 Feb 2015 19:50:08 -0600 Subject: [PATCH 464/687] Remove colNames Removed the `colNames` slot from RRDDs and updated all related functions accordingly. `toRDD` now performs an `lapply` on the converted RRDD in order to assign the column names. --- pkg/R/RDD.R | 31 ++++--------- pkg/R/deserialize.R | 10 +---- pkg/R/pairRDD.R | 1 - pkg/R/utils.R | 3 +- pkg/inst/tests/test_sparkSQL.R | 2 +- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 44 +++++++------------ 6 files changed, 28 insertions(+), 63 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index c1c3fec4563e6..e6b7f31a14106 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -10,13 +10,11 @@ setOldClass("jobj") #' #' @slot env An R environment that stores bookkeeping states of the RDD #' @slot jrdd Java object reference to the backing JavaRDD -#' @slot colNames A list of column names used when converting a DataFrame #' to an RDD #' @export setClass("RDD", slots = list(env = "environment", - jrdd = "jobj", - colNames = "list")) + jrdd = "jobj")) setClass("PipelinedRDD", slots = list(prev = "RDD", @@ -25,7 +23,7 @@ setClass("PipelinedRDD", contains = "RDD") setMethod("initialize", "RDD", function(.Object, jrdd, serializedMode, - isCached, isCheckpointed, colNames) { + isCached, isCheckpointed) { # Check that RDD constructor is using the correct version of serializedMode stopifnot(class(serializedMode) == "character") stopifnot(serializedMode %in% c("byte", "string", "row")) @@ -47,8 +45,6 @@ setMethod("initialize", "RDD", function(.Object, jrdd, serializedMode, .Object@env$isCheckpointed <- isCheckpointed .Object@env$serializedMode <- serializedMode - .Object@colNames <- colNames - .Object@jrdd <- jrdd .Object }) @@ -59,11 +55,9 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@env$isCheckpointed <- FALSE .Object@env$jrdd_val <- jrdd_val if (!is.null(jrdd_val)) { - # This tracks the serialization mode for jrdd_val + # This tracks the serialization mode for jrdd_val .Object@env$serializedMode <- prev@env$serializedMode } - - .Object@colNames <- prev@colNames .Object@prev <- prev @@ -79,8 +73,6 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@env$prev_serializedMode <- prev@env$serializedMode # NOTE: We use prev_serializedMode to track the serialization mode of prev_JRDD # prev_serializedMode is used during the delayed computation of JRDD in getJRDD - - .Object@colNames <- prev@colNames } else { pipelinedFunc <- function(split, iterator) { func(split, prev@func(split, iterator)) @@ -90,7 +82,6 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) # Get the serialization mode of the parent RDD .Object@env$prev_serializedMode <- prev@env$prev_serializedMode - .Object@colNames <- prev@colNames } .Object @@ -104,10 +95,9 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) #' stores strings, and "row" if the RDD stores the rows of a DataFrame #' @param isCached TRUE if the RDD is cached #' @param isCheckpointed TRUE if the RDD has been checkpointed -#' @param colNames A list of column names to be used with serializedMode == "row" RDD <- function(jrdd, serializedMode = "byte", isCached = FALSE, - isCheckpointed = FALSE, colNames = list()) { - new("RDD", jrdd, serializedMode, isCached, isCheckpointed, colNames) + isCheckpointed = FALSE) { + new("RDD", jrdd, serializedMode, isCached, isCheckpointed) } PipelinedRDD <- function(prev, func) { @@ -167,7 +157,6 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), packageNamesArr, as.character(.sparkREnv[["libname"]]), broadcastArr, - rdd@colNames, callJMethod(prev_jrdd, "classTag")) } else { rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", @@ -178,7 +167,6 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), packageNamesArr, as.character(.sparkREnv[["libname"]]), broadcastArr, - rdd@colNames, callJMethod(prev_jrdd, "classTag")) } # Save the serialization flag after we create a RRDD @@ -391,7 +379,7 @@ setMethod("collect", # Assumes a pairwise RDD is backed by a JavaPairRDD. collected <- callJMethod(getJRDD(rdd), "collect") convertJListToRList(collected, flatten, - serializedMode = getSerializedMode(rdd), colNames = rdd@colNames) + serializedMode = getSerializedMode(rdd)) }) @@ -417,7 +405,7 @@ setMethod("collectPartition", jList <- jPartitionsList[[1]] convertJListToRList(jList, flatten = TRUE, - serializedMode = getSerializedMode(rdd), colNames = rdd@colNames) + serializedMode = getSerializedMode(rdd)) }) #' @rdname collect-methods @@ -873,8 +861,7 @@ setMethod("take", elems <- convertJListToRList(partition, flatten = TRUE, logicalUpperBound = size, - serializedMode = getSerializedMode(rdd), - colNames = rdd@colNames) + serializedMode = getSerializedMode(rdd)) # TODO: Check if this append is O(n^2)? resList <- append(resList, elems) } @@ -1386,7 +1373,7 @@ setMethod("unionRDD", function(x, y) { if (getSerializedMode(x) == getSerializedMode(y)) { jrdd <- callJMethod(getJRDD(x), "union", getJRDD(y)) - union.rdd <- RDD(jrdd, getSerializedMode(x), colNames = x@colNames) + union.rdd <- RDD(jrdd, getSerializedMode(x)) } else { # One of the RDDs is not serialized, we need to serialize it first. if (getSerializedMode(x) != "byte") x <- serializeToBytes(x) diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index a8b6fa1def41d..f8e4c4e630125 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -106,8 +106,6 @@ readDeserializeRows <- function(inputCon) { # a list of lists. Since the DOS is one continuous stream and # the number of rows varies, we put the readRow function in a while loop # that termintates when the next row is empty. - colNames <- readList(inputCon) - data <- list() numCols <- readInt(inputCon) # We write a length for each row out @@ -115,8 +113,7 @@ readDeserializeRows <- function(inputCon) { data[[length(data) + 1L]] <- readRow(inputCon, numCols) numCols <- readInt(inputCon) } - dataOut <- lapply(data, assignNames, colNames) - dataOut # this is a list of named lists now + data # this is a list of named lists now } readRowList <- function(obj) { @@ -142,11 +139,6 @@ readRow <- function(inputCon, numCols) { }) # each row is a list now } -assignNames <- function(row, colNames) { - names(row) <- colNames - row -} - # Take a single column as Array[Byte] and deserialize it into an atomic vector readCol <- function(inputCon, numRows) { sapply(1:numRows, function(x) { diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index 2b34fe714f466..b65d4070108c8 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -234,7 +234,6 @@ setMethod("partitionBy", packageNamesArr, as.character(.sparkREnv$libname), broadcastArr, - rdd@colNames, callJMethod(jrdd, "classTag")) # Create a corresponding partitioner. diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 3210e73119f78..4b4142a5fb1af 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -4,7 +4,7 @@ # of which is optionally upper bounded by `logicalUpperBound` (by default, # return all elements). Takes care of deserializations and type conversions. convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, - serializedMode = "byte", colNames = list()) { + serializedMode = "byte") { arrSize <- callJMethod(jList, "size") # Datasets with serializedMode == "string" (such as an RDD directly generated by textFile()): @@ -50,7 +50,6 @@ convertJListToRList <- function(jList, flatten, logicalUpperBound = NULL, # Use global assignment to change the flatten flag. This means # we don't have to worry about the default argument in other functions # e.g. collect - res <- assignNames(res, colNames) } # TODO: is it possible to distinguish element boundary so that we can # unserialize only what we need? diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 420b0882eb6e3..f5805e4cca437 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -47,7 +47,7 @@ test_that("union on two RDDs created from DataFrames returns an RRDD", { RDD2 <- toRDD(df) unioned <- unionRDD(RDD1, RDD2) expect_true(inherits(unioned, "RDD")) - expect_true(getSerializedMode(unioned) == "row") + expect_true(getSerializedMode(unioned) == "byte") expect_true(collect(unioned)[[2]]$name == "Andy") }) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index a62ec7b33f586..959613697774a 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -21,8 +21,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Broadcast[Object]], - colNames: Array[String]) + broadcastVars: Array[Broadcast[Object]]) extends RDD[U](parent) { override def getPartitions = parent.partitions @@ -158,21 +157,16 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(1) } - if (parentSerializedMode == SerializationFormats.ROW) { - SerDe.writeStringArr(dataOut, colNames) - for (row <- iter) { - val rowArr = row.asInstanceOf[Array[Byte]] - dataOut.write(rowArr, 0, rowArr.length) - } - } else { - for (elem <- iter) { - if (parentSerializedMode == SerializationFormats.BYTE) { - val elemArr = elem.asInstanceOf[Array[Byte]] - dataOut.writeInt(elemArr.length) - dataOut.write(elemArr, 0, elemArr.length) - } else { + for (elem <- iter) { + if (parentSerializedMode == SerializationFormats.BYTE) { + val elemArr = elem.asInstanceOf[Array[Byte]] + dataOut.writeInt(elemArr.length) + dataOut.write(elemArr, 0, elemArr.length) + } else if (parentSerializedMode == SerializationFormats.ROW) { + val rowArr = elem.asInstanceOf[Array[Byte]] + dataOut.write(rowArr, 0, rowArr.length) + } else if (parentSerializedMode == SerializationFormats.STRING) { printOut.println(elem) - } } } @@ -219,12 +213,10 @@ private class PairwiseRRDD[T: ClassTag]( functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Object], - colNames: Array[String]) + broadcastVars: Array[Object]) extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, parentSerializedMode, true, functionDependencies, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), - colNames) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ @@ -266,12 +258,10 @@ private class RRDD[T: ClassTag]( functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Object], - colNames: Array[String]) + broadcastVars: Array[Object]) extends BaseRRDD[T, Array[Byte]](parent, -1, func, parentSerializedMode, true, functionDependencies, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), - colNames) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ @@ -311,12 +301,10 @@ private class StringRRDD[T: ClassTag]( functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, - broadcastVars: Array[Object], - colNames: Array[String]) + broadcastVars: Array[Object]) extends BaseRRDD[T, String](parent, -1, func, parentSerializedMode, false, functionDependencies, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]]), - colNames) { + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: BufferedReader = _ From 301d8e551e9d097064d2d402d26a6597b72f22b7 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 24 Feb 2015 19:51:18 -0600 Subject: [PATCH 465/687] Remove extraneous map functions --- pkg/R/DataFrame.R | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index bd31e6155a6f3..291fb36421315 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -232,19 +232,6 @@ setMethod("mapPartitions", lapplyPartition(X, FUN) }) -setMethod("lapplyPartitionsWithIndex", - signature(X = "DataFrame", FUN = "function"), - function(X, FUN) { - rdd <- toRDD(X) - lapplyPartitionsWithIndex(rdd, FUN) - }) - -setMethod("mapPartitionsWithIndex", - signature(X = "DataFrame", FUN = "function"), - function(X, FUN){ - lapplyPartitionsWithIndex(X, FUN) - }) - setMethod("foreach", signature(rdd = "DataFrame", func = "function"), function(rdd, func) { From 0d077700a61550b7f78f873d03a51367b5d559e1 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 24 Feb 2015 19:53:45 -0600 Subject: [PATCH 466/687] Added `limit` and updated `take` The `limit` function now calls the native DataFrame `limit` and returns a new DataFrame. `take` now collects the results of `limit` and returns a `data.frame` instead of converting to an RRDD and using the RDD `take` method. --- pkg/NAMESPACE | 3 ++- pkg/R/DataFrame.R | 47 ++++++++++++++++++++++++++++------ pkg/inst/tests/test_sparkSQL.R | 11 ++++++-- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 5d62837745c55..fd7eaae7278ca 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -83,7 +83,8 @@ exportClasses("DataFrame") exportMethods("printSchema", "registerTempTable", - "toRDD") + "toRDD", + "limit") export("jsonFile", "parquetFile", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 291fb36421315..71564064caa17 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -110,11 +110,10 @@ setMethod("registerTempTable", setMethod("count", signature(x = "DataFrame"), function(x) { - sdf <- x@sdf - callJMethod(sdf, "count") + callJMethod(x@sdf, "count") }) -# Collects all the elements of a Spark DataFrame and coerces them into an R data.frame. +#' Collects all the elements of a Spark DataFrame and coerces them into an R data.frame. #' @rdname collect-methods #' @export @@ -146,7 +145,35 @@ setMethod("collect", dfOut }) -# Take the first NUM elements in a DataFrame and return a named list for each row. +#' Limit +#' +#' Limit the resulting DataFrame to the number of rows specified. +#' +#' @param df A SparkSQL DataFrame +#' @param num The number of rows to return +#' @return A new DataFrame containing the number of rows specified. +#' +#' @rdname limit +#' @export +#' @examples +#' \dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' limitedDF <- limit(df, 10) +#' } + +setGeneric("limit", function(df, num) {standardGeneric("limit") }) + +setMethod("limit", + signature(df = "DataFrame", num = "numeric"), + function(df, num) { + res <- callJMethod(df@sdf, "limit", as.integer(num)) + dataFrame(res) + }) + +# Take the first NUM elements in a DataFrame and return a the results as a data.frame #' @rdname take #' @export @@ -162,8 +189,8 @@ setMethod("collect", setMethod("take", signature(rdd = "DataFrame", num = "numeric"), function(rdd, num) { - rddIn <- toRDD(rdd) - take(rddIn, num) + limited <- limit(rdd, num) + collect(limited) }) #' toRDD() @@ -189,8 +216,12 @@ setMethod("toRDD", signature(df = "DataFrame"), function(df) { jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", df@sdf) - names <- callJMethod(df@sdf, "columns") - RDD(jrdd, serializedMode = "row", colNames = names) + colNames <- callJMethod(df@sdf, "columns") + rdd <- RDD(jrdd, serializedMode = "row") + lapply(rdd, function(row) { + names(row) <- colNames + row + }) }) ############################## RDD Map Functions ################################## diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index f5805e4cca437..f5e47ed47776e 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -113,10 +113,17 @@ test_that("collect() returns a data.frame", { expect_true(ncol(rdf) == 2) }) +test_that("limit() returns DataFrame with the correct number of rows", { + df <- jsonFile(sqlCtx, jsonPath) + dfLimited <- limit(df, 2) + expect_true(inherits(dfLimited, "DataFrame")) + expect_true(count(dfLimited) == 2) +}) + test_that("collect() and take() on a DataFrame return the same number of rows and columns", { df <- jsonFile(sqlCtx, jsonPath) - expect_true(nrow(collect(df)) == length(take(df, 10))) - expect_true(ncol(collect(df)) == length(take(df, 10)[[1]])) + expect_true(nrow(collect(df)) == nrow(take(df, 10))) + expect_true(ncol(collect(df)) == ncol(take(df, 10))) }) test_that("multiple pipeline transformations starting with a DataFrame result in an RDD with the correct values", { From 4e712e18682d5fa80039867b4a66e52d332556d2 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 25 Feb 2015 00:33:01 -0800 Subject: [PATCH 467/687] use random port in backend --- pkg/R/sparkR.R | 43 ++++++++----------- pkg/R/sparkRClient.R | 2 +- .../cs/amplab/sparkr/SparkRBackend.scala | 24 +++++++---- .../cs/amplab/sparkr/SparkRRunner.scala | 20 +++------ 4 files changed, 40 insertions(+), 49 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 8a3fca68713e9..4e89d823af876 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -88,9 +88,7 @@ sparkR.init <- function( sparkEnvir = list(), sparkExecutorEnv = list(), sparkJars = "", - sparkRLibDir = "", - sparkRBackendPort = as.integer(Sys.getenv("SPARKR_BACKEND_PORT", "12345")), - sparkRRetryCount = 6) { + sparkRLibDir = "") { if (exists(".sparkRjsc", envir = .sparkREnv)) { cat("Re-using existing Spark Context. Please stop SparkR with sparkR.stop() or restart R to create a new Spark Context\n") @@ -121,45 +119,38 @@ sparkR.init <- function( if (sparkRExistingPort != "") { sparkRBackendPort <- sparkRExistingPort } else { + # TODO: test the random port and retry, or use httpuv:::startServer + callbackPort = sample(40000, 1) + 10000 if (Sys.getenv("SPARKR_USE_SPARK_SUBMIT", "") == "") { launchBackend(classPath = cp, mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args = as.character(sparkRBackendPort), + args = as.character(callbackPort), javaOpts = paste("-Xmx", sparkMem, sep = "")) } else { # TODO: We should deprecate sparkJars and ask users to add it to the # command line (using --jars) which is picked up by SparkSubmit launchBackendSparkSubmit( mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args = as.character(sparkRBackendPort), + args = as.character(callbackPort), appJar = .sparkREnv$assemblyJarPath, sparkHome = sparkHome, sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "")) } + sock <- socketConnection(port = callbackPort, server = TRUE, open = 'rb', + blocking = TRUE, timeout = 10) + sparkRBackendPort <- readInt(sock) + if (length(sparkRBackendPort) == 0) { + stop("JVM failed to launch") + } + close(sock) } .sparkREnv$sparkRBackendPort <- sparkRBackendPort - cat("Waiting for JVM to come up...\n") - tries <- 0 - while (tries < sparkRRetryCount) { - if (!connExists(.sparkREnv)) { - Sys.sleep(2 ^ tries) - tryCatch({ - connectBackend("localhost", .sparkREnv$sparkRBackendPort) - }, error = function(err) { - cat("Error in Connection, retrying...\n") - }, warning = function(war) { - cat("No Connection Found, retrying...\n") - }) - tries <- tries + 1 - } else { - cat("Connection ok.\n") - break - } - } - if (tries == sparkRRetryCount) { - stop(sprintf("Failed to connect JVM after %d tries.\n", sparkRRetryCount)) - } + tryCatch({ + connectBackend("localhost", sparkRBackendPort) + }, error = function(err) { + stop("Failed to connect JVM\n") + }) if (nchar(sparkHome) != 0) { sparkHome <- normalizePath(sparkHome) diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 1a747031586d2..4a06bb3364b50 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -2,7 +2,7 @@ # Creates a SparkR client connection object # if one doesn't already exist -connectBackend <- function(hostname, port, timeout = 6000) { +connectBackend <- function(hostname, port, timeout = 6) { if (exists(".sparkRcon", envir = .sparkREnv)) { if (isOpen(env[[".sparkRCon"]])) { cat("SparkRBackend client connection already exists\n") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index e6c606a519c3f..111b7cf678d03 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -1,7 +1,7 @@ package edu.berkeley.cs.amplab.sparkr -import java.io.IOException -import java.net.InetSocketAddress +import java.io.{DataOutputStream, IOException} +import java.net.{InetSocketAddress, Socket} import java.util.concurrent.TimeUnit import io.netty.bootstrap.ServerBootstrap @@ -24,9 +24,7 @@ class SparkRBackend { var bootstrap: ServerBootstrap = null var bossGroup: EventLoopGroup = null - def init(port: Int) { - val socketAddr = new InetSocketAddress(port) - + def init(): Int = { bossGroup = new NioEventLoopGroup(SparkRConf.numServerThreads) val workerGroup = bossGroup val handler = new SparkRBackendHandler(this) @@ -51,9 +49,9 @@ class SparkRBackend { } }) - channelFuture = bootstrap.bind(socketAddr) + channelFuture = bootstrap.bind(new InetSocketAddress(0)) channelFuture.syncUninterruptibly() - println("SparkR Backend server started on port :" + port) + channelFuture.channel().localAddress().asInstanceOf[InetSocketAddress].getPort() } def run() = { @@ -85,13 +83,21 @@ object SparkRBackend { } val sparkRBackend = new SparkRBackend() try { - sparkRBackend.init(args(0).toInt) + // bind to random port + val boundPort = sparkRBackend.init() + val callbackPort = args(0).toInt + val callbackSocket = new Socket("localhost", callbackPort) + val dos = new DataOutputStream(callbackSocket.getOutputStream) + dos.writeInt(boundPort) + dos.close() + callbackSocket.close() + sparkRBackend.run() } catch { case e: IOException => System.err.println("Server shutting down: failed with exception ", e) sparkRBackend.close() - System.exit(0) + System.exit(1) } System.exit(0) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala index fb356f89b2d1d..1b27f78844551 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala @@ -22,8 +22,6 @@ object SparkRRunner { // Time to wait for SparkR backend to initialize in seconds val backendTimeout = sys.env.getOrElse("SPARKR_BACKEND_TIMEOUT", "120").toInt - // TODO: Can we get this from SparkConf ? - val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", "12345").toInt val rCommand = "Rscript" // Check if the file path exists. @@ -39,23 +37,19 @@ object SparkRRunner { // Launch a SparkR backend server for the R process to connect to; this will let it see our // Java system properties etc. val sparkRBackend = new SparkRBackend() - val sparkRBackendThread = new Thread() { - val finishedInit = new Semaphore(0) - + @volatile var sparkRBackendPort = 0 + val initialized = new Semaphore(0) + val sparkRBackendThread = new Thread("SparkR backend") { override def run() { - sparkRBackend.init(sparkRBackendPort) - finishedInit.release() + sparkRBackendPort = sparkRBackend.init() + initialized.release() sparkRBackend.run() } - - def stopBackend() { - sparkRBackend.close() - } } sparkRBackendThread.start() // Wait for SparkRBackend initialization to finish - if (sparkRBackendThread.finishedInit.tryAcquire(backendTimeout, TimeUnit.SECONDS)) { + if (initialized.tryAcquire(backendTimeout, TimeUnit.SECONDS)) { // Launch R val returnCode = try { val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) @@ -68,7 +62,7 @@ object SparkRRunner { process.waitFor() } finally { - sparkRBackendThread.stopBackend() + sparkRBackend.close() } System.exit(returnCode) } else { From 7651d84c2982fc5a567cdafdf1ca657733b4ca52 Mon Sep 17 00:00:00 2001 From: lythesia Date: Wed, 25 Feb 2015 21:14:21 +0800 Subject: [PATCH 468/687] fix coalesce --- pkg/R/RDD.R | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 76f09f44d1ada..9287a380ee768 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1062,10 +1062,9 @@ setGeneric("repartition", function(rdd, numPartitions) { standardGeneric("repart #' @rdname repartition #' @aliases repartition,RDD setMethod("repartition", - signature(rdd = "RDD", numPartitions = "integer"), + signature(rdd = "RDD", numPartitions = "numeric"), function(rdd, numPartitions) { - jrdd <- callJMethod(getJRDD(rdd), "repartition", numPartitions) - RDD(jrdd) + coalesce(rdd, numPartitions, TRUE) }) #' Return a new RDD that is reduced into numPartitions partitions. @@ -1087,10 +1086,28 @@ setGeneric("coalesce", function(rdd, numPartitions, ...) { standardGeneric("coal #' @rdname coalesce #' @aliases coalesce,RDD setMethod("coalesce", - signature(rdd = "RDD", numPartitions = "integer"), + signature(rdd = "RDD", numPartitions = "numeric"), function(rdd, numPartitions, shuffle = FALSE) { - jrdd <- callJMethod(getJRDD(rdd), "coalesce", numPartitions, shuffle) - RDD(jrdd) + if(as.integer(numPartitions) != numPartitions) { + warning("Number of partitions should be an integer. Coercing it to integer.") + } + numPartitionsm <- as.integer(numPartitions) + if (shuffle || numPartitions > SparkR::numPartitions(rdd)) { + func <- function(s, part) { + set.seed(s) # split as seed + lapply(part, + function(v) { + k <- as.integer(runif(1, 0, numPartitions)) + list(k, v) + }) + } + shuffled <- lapplyPartitionsWithIndex(rdd, func) + reparted <- partitionBy(shuffled, numPartitions) + values(reparted) + } else { + jrdd <- callJMethod(getJRDD(rdd), "coalesce", numPartitions, shuffle) + RDD(jrdd) + } }) #' Save this RDD as a SequenceFile of serialized objects. From 982f342a26f499c590fbb92835205f12e57f430a Mon Sep 17 00:00:00 2001 From: lythesia Date: Wed, 25 Feb 2015 21:33:28 +0800 Subject: [PATCH 469/687] fix numeric issue --- pkg/R/RDD.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 9287a380ee768..6d69f3e0cc7a0 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1091,7 +1091,7 @@ setMethod("coalesce", if(as.integer(numPartitions) != numPartitions) { warning("Number of partitions should be an integer. Coercing it to integer.") } - numPartitionsm <- as.integer(numPartitions) + numPartitions <- as.integer(numPartitions) if (shuffle || numPartitions > SparkR::numPartitions(rdd)) { func <- function(s, part) { set.seed(s) # split as seed From 94654269bfc777d500a5828f9ccc7940ab688885 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 24 Feb 2015 22:26:51 -0800 Subject: [PATCH 470/687] load and save --- pkg/NAMESPACE | 8 +- pkg/R/DataFrame.R | 118 ++++++++++++++++++ pkg/R/SQLContext.R | 61 +++++++++ pkg/R/utils.R | 10 ++ pkg/inst/tests/test_sparkSQL.R | 17 +++ .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 1 + 6 files changed, 213 insertions(+), 2 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index fd7eaae7278ca..8a9c8285dd7de 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -84,13 +84,17 @@ exportClasses("DataFrame") exportMethods("printSchema", "registerTempTable", "toRDD", - "limit") + "limit", + "saveDF", + "saveAsTable") export("jsonFile", "parquetFile", "sql", "table", "cacheTable", - "uncacheTable") + "uncacheTable", + "loadDF", + "createExternalTable") export("sparkRSQL.init") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 71564064caa17..84f34b69b62e1 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -276,3 +276,121 @@ setMethod("foreachPartition", rddIn <- toRDD(rdd) foreachPartition(rddIn, func) }) + + +#' Return the SaveMode by name +toJMode <- function(name) { + jcls <- 'org.apache.spark.sql.SaveMode' + if (name == 'append') { + callJStatic(jcls, 'Append') + } else if (name == 'overwrite') { + callJStatic(jcls, 'Overwrite') + } else if (name == 'ignore') { + callJStatic(jcls, 'Ignore') + } else if (name == 'error') { + callJStatic(jcls, 'ErrorIfExists') + } else { + stop("invalid save mode") + } +} + +#' Save the contents of the DataFrame to a data source +#' +#' The data source is specified by the `source` and a set of options (...). +#' If `source` is not specified, the default data source configured by +#' spark.sql.sources.default will be used. +#' +#' Additionally, mode is used to specify the behavior of the save operation when +#' data already exists in the data source. There are four modes: +#' append: Contents of this DataFrame are expected to be appended to existing data. +#' overwrite: Existing data is expected to be overwritten by the contents of +# this DataFrame. +#' error: An exception is expected to be thrown. +#' ignore: The save operation is expected to not save the contents of the DataFrame +# and to not change the existing data. +#' +#' @param df A SparkSQL DataFrame +#' @param path A name for the table +#' @param source A name for external data source +#' @param mode One of 'append', 'overwrite', 'error', 'ignore' +#' +#' @rdname saveAsTable +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' saveAsTable(df, "myfile") +#' } + +setGeneric("saveDF", function(df, path, source, mode, ...) { standardGeneric("saveDF") }) + +setMethod("saveDF", + signature(df = "DataFrame", path = 'character', source = 'character', + mode = 'character'), + function(df, path=NULL, source=NULL, mode="append", ...){ + if (is.null(source)) { + # TODO: read from conf + source = 'parquet' + } + mode <- toJMode(mode) + options <- varargToEnv(...) + if (!is.null(path)) { + options[['path']] = path + } + callJMethod(df@sdf, "save", source, mode, options) + }) + + +#' saveAsTable +#' +#' Save the contents of the DataFrame to a data source as a table +#' +#' The data source is specified by the `source` and a set of options (...). +#' If `source` is not specified, the default data source configured by +#' spark.sql.sources.default will be used. +#' +#' Additionally, mode is used to specify the behavior of the save operation when +#' data already exists in the data source. There are four modes: +#' append: Contents of this DataFrame are expected to be appended to existing data. +#' overwrite: Existing data is expected to be overwritten by the contents of +# this DataFrame. +#' error: An exception is expected to be thrown. +#' ignore: The save operation is expected to not save the contents of the DataFrame +# and to not change the existing data. +#' +#' @param df A SparkSQL DataFrame +#' @param tableName A name for the table +#' @param source A name for external data source +#' @param mode One of 'append', 'overwrite', 'error', 'ignore' +#' +#' @rdname saveAsTable +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' saveAsTable(df, "myfile") +#' } + +setGeneric("saveAsTable", function(df, tableName, source, mode, ...) { + standardGeneric("saveAsTable") +}) + +setMethod("saveAsTable", + signature(df = "DataFrame", tableName = 'character', source = 'character', + mode = 'character'), + function(df, tableName, source=NULL, mode="append", ...){ + if (is.null(source)) { + #' TODO: getConf('spark.sql.sources.default') + source <- 'parquet' + } + mode <- toJMode(mode) + options <- varargToEnv(...) + callJMethod(df@sdf, "saveAsTable", tableName, source, mode, options) + }) + diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 9e28098f71462..160418a290e00 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -133,3 +133,64 @@ cacheTable <- function(sqlCtx, tableName) { uncacheTable <- function(sqlCtx, tableName) { callJMethod(sqlCtx, "uncacheTable", tableName) } + + +#' Load an DataFrame +#' +#' Returns the dataset in a data source as a DataFrame +#' +#' The data source is specified by the `source` and a set of options(...). +#' If `source` is not specified, the default data source configured by +#' "spark.sql.sources.default" will be used. +#' +#' @param sqlCtx SQLContext to use +#' @param path The path of files to load +#' @param source the name of external data source +#' @return DataFrame +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df <- load(sqlCtx, "path/to/file.json", source="json") +#' } + +loadDF <- function(sqlCtx, path=NULL, source=NULL, ...) { + options <- varargsToEnv(...) + if (!is.null(path)) { + options[['path']] = path + } + sdf <- callJMethod(sqlCtx, "load", source, options) + dataFrame(sdf) +} + +#' Create an external table +#' +#' Creates an external table based on the dataset in a data source, +#' Returns the DataFrame associated with the external table. +#' +#' The data source is specified by the `source` and a set of options(...). +#' If `source` is not specified, the default data source configured by +#' "spark.sql.sources.default" will be used. +#' +#' @param sqlCtx SQLContext to use +#' @param tableName A name of the table +#' @param path The path of files to load +#' @param source the name of external data source +#' @return DataFrame +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df <- sparkRSQL.createExternalTable(sqlCtx, "myjson", path="path/to/json", source="json") +#' } + +createExternalTable <- function(sqlCtx, tableName, path=NULL, source=NULL, ...) { + options <- varargsToEnv(...) + if (!is.null(path)) { + options[['path']] = path + } + sdf <- callJMethod(sqlCtx, "createExternalTable", tableName, source, options) + dataFrame(sdf) +} diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 4b4142a5fb1af..911b82e5fe01a 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -299,3 +299,13 @@ convertEnvsToList <- function(keys, vals) { list(keys[[name]], vals[[name]]) }) } + +# Utility function to capture the varargs into environment object +varargsToEnv <- function(...) { + pairs <- as.list(substitute(list(...)))[-1L] + env <- new.env() + for (name in names(pairs)) { + env[[name]] <- pairs[[name]] + } + env +} diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index f5e47ed47776e..17d53ca1a280c 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -1,4 +1,6 @@ library(testthat) +library(devtools) +library(SparkR) context("SparkSQL functions") @@ -12,6 +14,7 @@ mockLines <- c("{\"name\":\"Michael\"}", "{\"name\":\"Andy\", \"age\":30}", "{\"name\":\"Justin\", \"age\":19}") jsonPath <- tempfile(pattern="sparkr-test", fileext=".tmp") +parquetPath <- tempfile(pattern="sparkr-test", fileext=".parquet") writeLines(mockLines, jsonPath) test_that("jsonFile() on a local file returns a DataFrame", { @@ -143,4 +146,18 @@ test_that("multiple pipeline transformations starting with a DataFrame result in expect_false(collect(second)[[3]]$testCol) }) +test_that("load() from json file", { + df <- loadDF(sqlCtx, jsonPath, "json") + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 3) +}) + +test_that("save() as parquet file", { + df <- loadDF(sqlCtx, jsonPath, "json") + saveDF(df, parquetPath, "parquet", mode="overwrite") + df2 <- loadDF(sqlCtx, parquetPath, "parquet") + expect_true(inherits(df2, "DataFrame")) + expect_true(count(df2) == 3) +}) + unlink(jsonPath) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 959613697774a..929d79c37bcc3 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -93,6 +93,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( val ERR_BUFFER_SIZE = 100 val errThread = new BufferedStreamThread(proc.getErrorStream, "stderr reader for R", ERR_BUFFER_SIZE) + errThread.setDaemon(true) errThread.start() errThread } From 7c3ddbdc5c96546dea0cd974de1091764c90f81f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 25 Feb 2015 10:10:09 -0800 Subject: [PATCH 471/687] create jmode in JVM --- pkg/R/DataFrame.R | 21 +++++-------------- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 11 +++++++++- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 84f34b69b62e1..a6e9eebf31fe2 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -280,18 +280,7 @@ setMethod("foreachPartition", #' Return the SaveMode by name toJMode <- function(name) { - jcls <- 'org.apache.spark.sql.SaveMode' - if (name == 'append') { - callJStatic(jcls, 'Append') - } else if (name == 'overwrite') { - callJStatic(jcls, 'Overwrite') - } else if (name == 'ignore') { - callJStatic(jcls, 'Ignore') - } else if (name == 'error') { - callJStatic(jcls, 'ErrorIfExists') - } else { - stop("invalid save mode") - } + } #' Save the contents of the DataFrame to a data source @@ -335,12 +324,12 @@ setMethod("saveDF", # TODO: read from conf source = 'parquet' } - mode <- toJMode(mode) + jmode <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "saveMode", mode) options <- varargToEnv(...) if (!is.null(path)) { options[['path']] = path } - callJMethod(df@sdf, "save", source, mode, options) + callJMethod(df@sdf, "save", source, jmode, options) }) @@ -389,8 +378,8 @@ setMethod("saveAsTable", #' TODO: getConf('spark.sql.sources.default') source <- 'parquet' } - mode <- toJMode(mode) + jmode <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "saveMode", mode) options <- varargToEnv(...) - callJMethod(df@sdf, "saveAsTable", tableName, source, mode, options) + callJMethod(df@sdf, "saveAsTable", tableName, source, jmode, options) }) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 50bff49b9b739..9ff0a72da1d06 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -3,7 +3,7 @@ package edu.berkeley.cs.amplab.sparkr import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.spark.api.java.JavaRDD -import org.apache.spark.sql.{SQLContext, DataFrame, Row} +import org.apache.spark.sql.{SQLContext, DataFrame, Row, SaveMode} import org.apache.spark.sql.types.{StructType} import edu.berkeley.cs.amplab.sparkr.SerDe._ @@ -65,4 +65,13 @@ object SQLUtils { } bos.toByteArray() } + + def saveMode(mode: String): SaveMode = { + mode match { + case "append" => SaveMode.Append + case "overwrite" => SaveMode.Overwrite + case "error" => SaveMode.ErrorIfExists + case "ignore" => SaveMode.Ignore + } + } } From 84e2d8c2ae05463d4431c1eab8053771b18a49b1 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 25 Feb 2015 13:07:55 -0800 Subject: [PATCH 472/687] groupBy and agg() --- pkg/R/DataFrame.R | 56 +++++++++++++++++++ pkg/R/utils.R | 10 ++++ pkg/inst/tests/test_sparkSQL.R | 17 ++++++ pkg/src/src/main/main.iml | 23 ++++++++ .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 4 ++ .../amplab/sparkr/SparkRBackendHandler.scala | 16 ++++-- 6 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 pkg/src/src/main/main.iml diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 71564064caa17..f8bf24f61d2a6 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -224,6 +224,28 @@ setMethod("toRDD", }) }) +setGeneric("groupBy", function(df, ...) { standardGeneric("groupBy") }) + +setMethod("groupBy", + signature(df = "DataFrame"), + function(df, col, ...) { + jseq <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", list(...)) + sgd <- callJMethod(df@sdf, "groupBy", col, jseq) + groupedData(sgd) + }) + + +setGeneric("agg", function (df, ...) { standardGeneric("agg") }) + +setMethod("agg", + signature(df = "DataFrame"), + function(df, ...) { + cols <- varargsToEnv(...) + sdf <- callJMethod(df@sdf, "agg", cols) + dataFrame(sdf) + }) + + ############################## RDD Map Functions ################################## # All of the following functions mirror the existing RDD map functions, # # but allow for use with DataFrames by first converting to an RRDD before calling # @@ -276,3 +298,37 @@ setMethod("foreachPartition", rddIn <- toRDD(rdd) foreachPartition(rddIn, func) }) + + +############################## GroupedData ######################################## + +setClass("GroupedData", + slots = list(env = "environment", + sgd = "jobj")) + +setMethod("initialize", "GroupedData", function(.Object, sgd) { + .Object@env <- new.env() + .Object@sgd <- sgd + .Object +}) + +groupedData <- function(sgd) { + new("GroupedData", sgd) +} + +setMethod("count", + signature(x = "GroupedData"), + function(x) { + dataFrame(callJMethod(x@sgd, "count")) + }) + +setMethod("agg", + signature(df = "GroupedData"), + function(df, ...) { + cols <- varargsToEnv(...) + sdf <- callJMethod(df@sgd, "agg", cols) + dataFrame(sdf) + }) + + + diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 4b4142a5fb1af..911b82e5fe01a 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -299,3 +299,13 @@ convertEnvsToList <- function(keys, vals) { list(keys[[name]], vals[[name]]) }) } + +# Utility function to capture the varargs into environment object +varargsToEnv <- function(...) { + pairs <- as.list(substitute(list(...)))[-1L] + env <- new.env() + for (name in names(pairs)) { + env[[name]] <- pairs[[name]] + } + env +} diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index f5e47ed47776e..81a090c8339e8 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -143,4 +143,21 @@ test_that("multiple pipeline transformations starting with a DataFrame result in expect_false(collect(second)[[3]]$testCol) }) +test_that("group by", { + df <- jsonFile(sqlCtx, jsonPath) + df1 <- agg(df, name="max", age="sum") + expect_true(1 == count(df1)) + + gd <- groupBy(df, "name") + expect_true(inherits(gd, "GroupedData")) + df2 <- count(gd) + expect_true(inherits(df2, "DataFrame")) + expect_true(3 == count(df2)) + + df3 <- agg(gd, age = "sum") + expect_true(inherits(df2, "DataFrame")) + expect_true(3 == count(df2)) +}) + + unlink(jsonPath) diff --git a/pkg/src/src/main/main.iml b/pkg/src/src/main/main.iml new file mode 100644 index 0000000000000..5e7b567d79304 --- /dev/null +++ b/pkg/src/src/main/main.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 50bff49b9b739..2cd8914042b65 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -16,6 +16,10 @@ object SQLUtils { new SQLContext(sc) } + def toSeq[T](arr: Array[T]): Seq[T] = { + arr.toSeq + } + def dfToRowRDD(df: DataFrame): JavaRDD[Array[Byte]] = { df.map(r => rowToRBytes(r)) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 4d1d2c0aba934..20db35081695d 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -1,5 +1,7 @@ package edu.berkeley.cs.amplab.sparkr +import org.apache.spark.Logging + import scala.collection.mutable.HashMap import java.io.ByteArrayInputStream @@ -19,7 +21,8 @@ import edu.berkeley.cs.amplab.sparkr.SerDe._ * this across connections ? */ @Sharable -class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHandler[Array[Byte]] { +class SparkRBackendHandler(server: SparkRBackend) + extends SimpleChannelInboundHandler[Array[Byte]] with Logging { override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { val bis = new ByteArrayInputStream(msg) @@ -100,11 +103,13 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa val methods = cls.get.getMethods val selectedMethods = methods.filter(m => m.getName == methodName) if (selectedMethods.length > 0) { - val selectedMethod = selectedMethods.filter { x => + val methods = selectedMethods.filter { x => matchMethod(numArgs, args, x.getParameterTypes) - }.head - - val ret = selectedMethod.invoke(obj, args:_*) + } + if (methods.isEmpty) { + throw new Exception(s"No matched method found for $methodName") + } + val ret = methods.head.invoke(obj, args:_*) // Write status bit writeInt(dos, 0) @@ -160,6 +165,7 @@ class SparkRBackendHandler(server: SparkRBackend) extends SimpleChannelInboundHa } } if (!parameterWrapperType.isInstance(args(i))) { + logInfo(s"type $parameterWrapperType not match with ${args(i)}") return false } } From 48c88277717eada2d0c84d22987e986a0e868325 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 25 Feb 2015 13:18:36 -0800 Subject: [PATCH 473/687] update NAMESPACE --- pkg/NAMESPACE | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index fd7eaae7278ca..e9668ab1f19ad 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -84,8 +84,14 @@ exportClasses("DataFrame") exportMethods("printSchema", "registerTempTable", "toRDD", + "groupBy", + "agg", "limit") +exportClasses("GroupedData") +exportMethods("count", "agg") + + export("jsonFile", "parquetFile", "sql", From c652b4c2f1858af5343a71ef81f63eff684e769b Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 25 Feb 2015 16:22:36 -0600 Subject: [PATCH 474/687] Update method signatures to use generic arg Replace the `rdd` argument in all of the S4 methods with `x`. This will allow us to standardize the code as other Spark components get added and we need to set up multiple dispatch on S4 methods. In any cases where `x` was used as a generic iterator, I've replaced it with `i` except in a few cases where a different letter made sense. For example, in some of the pair functions, we now use `function(k)` and `function(v)` for the key/value functions. --- pkg/R/RDD.R | 348 ++++++++++++++++++++++++------------------------ pkg/R/pairRDD.R | 232 ++++++++++++++++---------------- 2 files changed, 290 insertions(+), 290 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 67fb28f219e27..608ebe1ee2673 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -97,18 +97,18 @@ PipelinedRDD <- function(prev, func) { # The jrdd accessor function. -setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) -setMethod("getJRDD", signature(rdd = "RDD"), function(rdd) rdd@jrdd ) -setMethod("getJRDD", signature(rdd = "PipelinedRDD"), - function(rdd, dataSerialization = TRUE) { - if (!is.null(rdd@env$jrdd_val)) { - return(rdd@env$jrdd_val) +setGeneric("getJRDD", function(x, ...) { standardGeneric("getJRDD") }) +setMethod("getJRDD", signature(x = "RDD"), function(x) x@jrdd ) +setMethod("getJRDD", signature(x = "PipelinedRDD"), + function(x, dataSerialization = TRUE) { + if (!is.null(x@env$jrdd_val)) { + return(x@env$jrdd_val) } # TODO: This is to handle anonymous functions. Find out a # better way to do this. computeFunc <- function(split, part) { - rdd@func(split, part) + x@func(split, part) } serializedFuncArr <- serialize("computeFunc", connection = NULL) @@ -120,13 +120,13 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), depsBin <- getDependencies(computeFunc) - prev_jrdd <- rdd@prev_jrdd + prev_jrdd <- x@prev_jrdd if (dataSerialization) { rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, - rdd@env$prev_serialized, + x@env$prev_serialized, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), @@ -136,7 +136,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, - rdd@env$prev_serialized, + x@env$prev_serialized, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), @@ -144,9 +144,9 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), callJMethod(prev_jrdd, "classTag")) } # Save the serialization flag after we create a RRDD - rdd@env$serialized <- dataSerialization - rdd@env$jrdd_val <- callJMethod(rddRef, "asJavaRDD") # rddRef$asJavaRDD() - rdd@env$jrdd_val + x@env$serialized <- dataSerialization + x@env$jrdd_val <- callJMethod(rddRef, "asJavaRDD") # rddRef$asJavaRDD() + x@env$jrdd_val }) @@ -170,7 +170,7 @@ setValidity("RDD", #' #' Persist this RDD with the default storage level (MEMORY_ONLY). #' -#' @param rdd The RDD to cache +#' @param x The RDD to cache #' @rdname cache-methods #' @export #' @examples @@ -179,16 +179,16 @@ setValidity("RDD", #' rdd <- parallelize(sc, 1:10, 2L) #' cache(rdd) #'} -setGeneric("cache", function(rdd) { standardGeneric("cache") }) +setGeneric("cache", function(x) { standardGeneric("cache") }) #' @rdname cache-methods #' @aliases cache,RDD-method setMethod("cache", - signature(rdd = "RDD"), - function(rdd) { - callJMethod(getJRDD(rdd), "cache") - rdd@env$isCached <- TRUE - rdd + signature(x = "RDD"), + function(x) { + callJMethod(getJRDD(x), "cache") + x@env$isCached <- TRUE + x }) #' Persist an RDD @@ -197,7 +197,7 @@ setMethod("cache", #' supported storage levels, refer to #' http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. #' -#' @param rdd The RDD to persist +#' @param x The RDD to persist #' @param newLevel The new storage level to be assigned #' @rdname persist #' @export @@ -207,13 +207,13 @@ setMethod("cache", #' rdd <- parallelize(sc, 1:10, 2L) #' persist(rdd, "MEMORY_AND_DISK") #'} -setGeneric("persist", function(rdd, newLevel) { standardGeneric("persist") }) +setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) #' @rdname persist #' @aliases persist,RDD-method setMethod("persist", - signature(rdd = "RDD", newLevel = "character"), - function(rdd, newLevel = c("DISK_ONLY", + signature(x = "RDD", newLevel = "character"), + function(x, newLevel = c("DISK_ONLY", "DISK_ONLY_2", "MEMORY_AND_DISK", "MEMORY_AND_DISK_2", @@ -238,9 +238,9 @@ setMethod("persist", "MEMORY_ONLY_SER_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_SER_2"), "OFF_HEAP" = callJStatic("org.apache.spark.storage.StorageLevel", "OFF_HEAP")) - callJMethod(getJRDD(rdd), "persist", storageLevel) - rdd@env$isCached <- TRUE - rdd + callJMethod(getJRDD(x), "persist", storageLevel) + x@env$isCached <- TRUE + x }) #' Unpersist an RDD @@ -258,16 +258,16 @@ setMethod("persist", #' cache(rdd) # rdd@@env$isCached == TRUE #' unpersist(rdd) # rdd@@env$isCached == FALSE #'} -setGeneric("unpersist", function(rdd) { standardGeneric("unpersist") }) +setGeneric("unpersist", function(x) { standardGeneric("unpersist") }) #' @rdname unpersist-methods #' @aliases unpersist,RDD-method setMethod("unpersist", - signature(rdd = "RDD"), - function(rdd) { - callJMethod(getJRDD(rdd), "unpersist") - rdd@env$isCached <- FALSE - rdd + signature(x = "RDD"), + function(x) { + callJMethod(getJRDD(x, "unpersist")) + x@env$isCached <- FALSE + x }) @@ -289,22 +289,22 @@ setMethod("unpersist", #' rdd <- parallelize(sc, 1:10, 2L) #' checkpoint(rdd) #'} -setGeneric("checkpoint", function(rdd) { standardGeneric("checkpoint") }) +setGeneric("checkpoint", function(x) { standardGeneric("checkpoint") }) #' @rdname checkpoint-methods #' @aliases checkpoint,RDD-method setMethod("checkpoint", - signature(rdd = "RDD"), - function(rdd) { - jrdd <- getJRDD(rdd) + signature(x = "RDD"), + function(x) { + jrdd <- getJRDD(x) callJMethod(jrdd, "checkpoint") - rdd@env$isCheckpointed <- TRUE - rdd + x@env$isCheckpointed <- TRUE + x }) #' Gets the number of partitions of an RDD #' -#' @param rdd A RDD. +#' @param x A RDD. #' @return the number of partitions of rdd as an integer. #' @rdname numPartitions #' @export @@ -314,14 +314,14 @@ setMethod("checkpoint", #' rdd <- parallelize(sc, 1:10, 2L) #' numPartitions(rdd) # 2L #'} -setGeneric("numPartitions", function(rdd) { standardGeneric("numPartitions") }) +setGeneric("numPartitions", function(x) { standardGeneric("numPartitions") }) #' @rdname numPartitions #' @aliases numPartitions,RDD-method setMethod("numPartitions", - signature(rdd = "RDD"), - function(rdd) { - jrdd <- getJRDD(rdd) + signature(x = "RDD"), + function(x) { + jrdd <- getJRDD(x) partitions <- callJMethod(jrdd, "splits") callJMethod(partitions, "size") }) @@ -331,7 +331,7 @@ setMethod("numPartitions", #' @description #' \code{collect} returns a list that contains all of the elements in this RDD. #' -#' @param rdd The RDD to collect +#' @param x The RDD to collect #' @param ... Other optional arguments to collect #' @param flatten FALSE if the list should not flattened #' @return a list containing elements in the RDD @@ -344,15 +344,15 @@ setMethod("numPartitions", #' collect(rdd) # list from 1 to 10 #' collectPartition(rdd, 0L) # list from 1 to 5 #'} -setGeneric("collect", function(rdd, ...) { standardGeneric("collect") }) +setGeneric("collect", function(x, ...) { standardGeneric("collect") }) #' @rdname collect-methods #' @aliases collect,RDD-method setMethod("collect", - signature(rdd = "RDD"), - function(rdd, flatten = TRUE) { + signature(x = "RDD"), + function(x, flatten = TRUE) { # Assumes a pairwise RDD is backed by a JavaPairRDD. - collected <- callJMethod(getJRDD(rdd), "collect") + collected <- callJMethod(getJRDD(x), "collect") convertJListToRList(collected, flatten) }) @@ -364,16 +364,16 @@ setMethod("collect", #' in the specified partition of the RDD. #' @param partitionId the partition to collect (starts from 0) setGeneric("collectPartition", - function(rdd, partitionId) { + function(x, partitionId) { standardGeneric("collectPartition") }) #' @rdname collect-methods #' @aliases collectPartition,integer,RDD-method setMethod("collectPartition", - signature(rdd = "RDD", partitionId = "integer"), - function(rdd, partitionId) { - jPartitionsList <- callJMethod(getJRDD(rdd), + signature(x = "RDD", partitionId = "integer"), + function(x, partitionId) { + jPartitionsList <- callJMethod(getJRDD(x), "collectPartitions", as.list(as.integer(partitionId))) @@ -392,16 +392,16 @@ setMethod("collectPartition", #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) #' collectAsMap(rdd) # list(`1` = 2, `3` = 4) #'} -setGeneric("collectAsMap", function(rdd) { standardGeneric("collectAsMap") }) +setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) #' @rdname collect-methods #' @aliases collectAsMap,RDD-method setMethod("collectAsMap", - signature(rdd = "RDD"), - function(rdd) { + signature(x = "RDD"), + function(x) { pairList <- collect(rdd) map <- new.env() - lapply(pairList, function(x) { assign(as.character(x[[1]]), x[[2]], envir = map) }) + lapply(pairList, function(i) { assign(as.character(i[[1]]), i[[2]], envir = map) }) as.list(map) }) @@ -447,7 +447,7 @@ setMethod("length", #' #' Same as countByValue in Spark. #' -#' @param rdd The RDD to count +#' @param x The RDD to count #' @return list of (value, count) pairs, where count is number of each unique #' value in rdd. #' @rdname countByValue @@ -458,15 +458,15 @@ setMethod("length", #' rdd <- parallelize(sc, c(1,2,3,2,1)) #' countByValue(rdd) # (1,2L), (2,2L), (3,1L) #'} -setGeneric("countByValue", function(rdd) { standardGeneric("countByValue") }) +setGeneric("countByValue", function(x) { standardGeneric("countByValue") }) #' @rdname countByValue #' @aliases countByValue,RDD-method setMethod("countByValue", - signature(rdd = "RDD"), - function(rdd) { - ones <- lapply(rdd, function(item) { list(item, 1L) }) - collect(reduceByKey(ones, `+`, numPartitions(rdd))) + signature(x = "RDD"), + function(x) { + ones <- lapply(x, function(item) { list(item, 1L) }) + collect(reduceByKey(ones, `+`, numPartitions(x))) }) #' Apply a function to all elements @@ -683,26 +683,26 @@ setMethod("Filter", #' rdd <- parallelize(sc, 1:10) #' reduce(rdd, "+") # 55 #'} -setGeneric("reduce", function(rdd, func) { standardGeneric("reduce") }) +setGeneric("reduce", function(x, func) { standardGeneric("reduce") }) #' @rdname reduce #' @aliases reduce,RDD,ANY-method setMethod("reduce", - signature(rdd = "RDD", func = "ANY"), - function(rdd, func) { + signature(x = "RDD", func = "ANY"), + function(x, func) { reducePartition <- function(part) { Reduce(func, part) } - partitionList <- collect(lapplyPartition(rdd, reducePartition), + partitionList <- collect(lapplyPartition(x, reducePartition), flatten = FALSE) Reduce(func, partitionList) }) #' Get the maximum element of an RDD. #' -#' @param rdd The RDD to get the maximum element from +#' @param x The RDD to get the maximum element from #' @export #' @rdname maximum #' @examples @@ -711,19 +711,19 @@ setMethod("reduce", #' rdd <- parallelize(sc, 1:10) #' maximum(rdd) # 10 #'} -setGeneric("maximum", function(rdd) { standardGeneric("maximum") }) +setGeneric("maximum", function(x) { standardGeneric("maximum") }) #' @rdname maximum #' @aliases maximum,RDD setMethod("maximum", - signature(rdd = "RDD"), - function(rdd) { - reduce(rdd, max) + signature(x = "RDD"), + function(x) { + reduce(x, max) }) #' Get the minimum element of an RDD. #' -#' @param rdd The RDD to get the minimum element from +#' @param x The RDD to get the minimum element from #' @export #' @rdname minimum #' @examples @@ -732,19 +732,19 @@ setMethod("maximum", #' rdd <- parallelize(sc, 1:10) #' minimum(rdd) # 1 #'} -setGeneric("minimum", function(rdd) { standardGeneric("minimum") }) +setGeneric("minimum", function(x) { standardGeneric("minimum") }) #' @rdname minimum #' @aliases minimum,RDD setMethod("minimum", - signature(rdd = "RDD"), - function(rdd) { - reduce(rdd, min) + signature(x = "RDD"), + function(x) { + reduce(x, min) }) #' Applies a function to all elements in an RDD, and force evaluation. #' -#' @param rdd The RDD to apply the function +#' @param x The RDD to apply the function #' @param func The function to be applied. #' @return invisible NULL. #' @export @@ -755,18 +755,18 @@ setMethod("minimum", #' rdd <- parallelize(sc, 1:10) #' foreach(rdd, function(x) { save(x, file=...) }) #'} -setGeneric("foreach", function(rdd, func) { standardGeneric("foreach") }) +setGeneric("foreach", function(x, func) { standardGeneric("foreach") }) #' @rdname foreach #' @aliases foreach,RDD,function-method setMethod("foreach", - signature(rdd = "RDD", func = "function"), - function(rdd, func) { + signature(x = "RDD", func = "function"), + function(x, func) { partition.func <- function(x) { lapply(x, func) NULL } - invisible(collect(mapPartitions(rdd, partition.func))) + invisible(collect(mapPartitions(x, partition.func))) }) #' Applies a function to each partition in an RDD, and force evaluation. @@ -780,14 +780,14 @@ setMethod("foreach", #' foreachPartition(rdd, function(part) { save(part, file=...); NULL }) #'} setGeneric("foreachPartition", - function(rdd, func) { standardGeneric("foreachPartition") }) + function(x, func) { standardGeneric("foreachPartition") }) #' @rdname foreach #' @aliases foreachPartition,RDD,function-method setMethod("foreachPartition", - signature(rdd = "RDD", func = "function"), - function(rdd, func) { - invisible(collect(mapPartitions(rdd, func))) + signature(x = "RDD", func = "function"), + function(x, func) { + invisible(collect(mapPartitions(x, func))) }) #' Take elements from an RDD. @@ -795,7 +795,7 @@ setMethod("foreachPartition", #' This function takes the first NUM elements in the RDD and #' returns them in a list. #' -#' @param rdd The RDD to take elements from +#' @param x The RDD to take elements from #' @param num Number of elements to take #' @rdname take #' @export @@ -805,17 +805,17 @@ setMethod("foreachPartition", #' rdd <- parallelize(sc, 1:10) #' take(rdd, 2L) # list(1, 2) #'} -setGeneric("take", function(rdd, num) { standardGeneric("take") }) +setGeneric("take", function(x, num) { standardGeneric("take") }) #' @rdname take #' @aliases take,RDD,numeric-method setMethod("take", - signature(rdd = "RDD", num = "numeric"), - function(rdd, num) { + signature(x = "RDD", num = "numeric"), + function(x, num) { resList <- list() index <- -1 - jrdd <- getJRDD(rdd) - numPartitions <- numPartitions(rdd) + jrdd <- getJRDD(x) + numPartitions <- numPartitions(x) # TODO(shivaram): Collect more than one partition based on size # estimates similar to the scala version of `take`. @@ -834,7 +834,7 @@ setMethod("take", elems <- convertJListToRList(partition, flatten = TRUE, logicalUpperBound = size, - serialized = rdd@env$serialized) + serialized = x@env$serialized) # TODO: Check if this append is O(n^2)? resList <- append(resList, elems) } @@ -846,7 +846,7 @@ setMethod("take", #' This function returns a new RDD containing the distinct elements in the #' given RDD. The same as `distinct()' in Spark. #' -#' @param rdd The RDD to remove duplicates from. +#' @param x The RDD to remove duplicates from. #' @param numPartitions Number of partitions to create. #' @rdname distinct #' @export @@ -857,18 +857,18 @@ setMethod("take", #' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) #'} setGeneric("distinct", - function(rdd, numPartitions) { standardGeneric("distinct") }) + function(x, numPartitions) { standardGeneric("distinct") }) setClassUnion("missingOrInteger", c("missing", "integer")) #' @rdname distinct #' @aliases distinct,RDD,missingOrInteger-method setMethod("distinct", - signature(rdd = "RDD", numPartitions = "missingOrInteger"), - function(rdd, numPartitions) { + signature(x = "RDD", numPartitions = "missingOrInteger"), + function(x, numPartitions) { if (missing(numPartitions)) { - numPartitions <- SparkR::numPartitions(rdd) + numPartitions <- SparkR::numPartitions(x) } - identical.mapped <- lapply(rdd, function(x) { list(x, NULL) }) + identical.mapped <- lapply(x, function(x) { list(x, NULL) }) reduced <- reduceByKey(identical.mapped, function(x, y) { x }, numPartitions) @@ -881,7 +881,7 @@ setMethod("distinct", #' The same as `sample()' in Spark. (We rename it due to signature #' inconsistencies with the `sample()' function in R's base package.) #' -#' @param rdd The RDD to sample elements from +#' @param x The RDD to sample elements from #' @param withReplacement Sampling with replacement or not #' @param fraction The (rough) sample target fraction #' @param seed Randomness seed value @@ -895,16 +895,16 @@ setMethod("distinct", #' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates #'} setGeneric("sampleRDD", - function(rdd, withReplacement, fraction, seed) { + function(x, withReplacement, fraction, seed) { standardGeneric("sampleRDD") }) #' @rdname sampleRDD #' @aliases sampleRDD,RDD setMethod("sampleRDD", - signature(rdd = "RDD", withReplacement = "logical", + signature(x = "RDD", withReplacement = "logical", fraction = "numeric", seed = "integer"), - function(rdd, withReplacement, fraction, seed) { + function(x, withReplacement, fraction, seed) { # The sampler: takes a partition and returns its sampled version. samplingFunc <- function(split, part) { @@ -941,13 +941,13 @@ setMethod("sampleRDD", list() } - lapplyPartitionsWithIndex(rdd, samplingFunc) + lapplyPartitionsWithIndex(x, samplingFunc) }) #' Return a list of the elements that are a sampled subset of the given RDD. #' -#' @param rdd The RDD to sample elements from +#' @param x The RDD to sample elements from #' @param withReplacement Sampling with replacement or not #' @param num Number of elements to return #' @param seed Randomness seed value @@ -963,19 +963,19 @@ setMethod("sampleRDD", #' takeSample(rdd, FALSE, 5L, 16181618L) #'} setGeneric("takeSample", - function(rdd, withReplacement, num, seed) { + function(x, withReplacement, num, seed) { standardGeneric("takeSample") }) #' @rdname takeSample #' @aliases takeSample,RDD -setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", +setMethod("takeSample", signature(x = "RDD", withReplacement = "logical", num = "integer", seed = "integer"), - function(rdd, withReplacement, num, seed) { + function(x, withReplacement, num, seed) { # This function is ported from RDD.scala. fraction <- 0.0 total <- 0 multiplier <- 3.0 - initialCount <- count(rdd) + initialCount <- count(x) maxSelected <- 0 MAXINT <- .Machine$integer.max @@ -997,7 +997,7 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", } set.seed(seed) - samples <- collect(sampleRDD(rdd, withReplacement, fraction, + samples <- collect(sampleRDD(x, withReplacement, fraction, as.integer(ceiling(runif(1, -MAXINT, MAXINT))))) @@ -1005,7 +1005,7 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", # take samples; this shouldn't happen often because we use a big # multiplier for thei initial size while (length(samples) < total) - samples <- collect(sampleRDD(rdd, withReplacement, fraction, + samples <- collect(sampleRDD(x, withReplacement, fraction, as.integer(ceiling(runif(1, -MAXINT, MAXINT))))) @@ -1016,7 +1016,7 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", #' Creates tuples of the elements in this RDD by applying a function. #' -#' @param rdd The RDD. +#' @param x The RDD. #' @param func The function to be applied. #' @rdname keyBy #' @export @@ -1026,22 +1026,22 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", #' rdd <- parallelize(sc, list(1, 2, 3)) #' collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) #'} -setGeneric("keyBy", function(rdd, func) { standardGeneric("keyBy") }) +setGeneric("keyBy", function(x, func) { standardGeneric("keyBy") }) #' @rdname keyBy #' @aliases keyBy,RDD setMethod("keyBy", - signature(rdd = "RDD", func = "function"), - function(rdd, func) { + signature(x = "RDD", func = "function"), + function(x, func) { apply.func <- function(x) { list(func(x), x) } - lapply(rdd, apply.func) + lapply(x, apply.func) }) #' Save this RDD as a SequenceFile of serialized objects. #' -#' @param rdd The RDD to save +#' @param x The RDD to save #' @param path The directory where the file is saved #' @rdname saveAsObjectFile #' @seealso objectFile @@ -1052,25 +1052,25 @@ setMethod("keyBy", #' rdd <- parallelize(sc, 1:3) #' saveAsObjectFile(rdd, "/tmp/sparkR-tmp") #'} -setGeneric("saveAsObjectFile", function(rdd, path) { standardGeneric("saveAsObjectFile") }) +setGeneric("saveAsObjectFile", function(x, path) { standardGeneric("saveAsObjectFile") }) #' @rdname saveAsObjectFile #' @aliases saveAsObjectFile,RDD setMethod("saveAsObjectFile", - signature(rdd = "RDD", path = "character"), - function(rdd, path) { + signature(x = "RDD", path = "character"), + function(x, path) { # If the RDD is in string format, need to serialize it before saving it because when # objectFile() is invoked to load the saved file, only serialized format is assumed. - if (!rdd@env$serialized) { - rdd <- reserialize(rdd) + if (!x@env$serialized) { + x <- reserialize(x) } # Return nothing - invisible(callJMethod(getJRDD(rdd), "saveAsObjectFile", path)) + invisible(callJMethod(getJRDD(x), "saveAsObjectFile", path)) }) #' Save this RDD as a text file, using string representations of elements. #' -#' @param rdd The RDD to save +#' @param x The RDD to save #' @param path The directory where the splits of the text file are saved #' @rdname saveAsTextFile #' @export @@ -1080,17 +1080,17 @@ setMethod("saveAsObjectFile", #' rdd <- parallelize(sc, 1:3) #' saveAsTextFile(rdd, "/tmp/sparkR-tmp") #'} -setGeneric("saveAsTextFile", function(rdd, path) { standardGeneric("saveAsTextFile") }) +setGeneric("saveAsTextFile", function(x, path) { standardGeneric("saveAsTextFile") }) #' @rdname saveAsTextFile #' @aliases saveAsTextFile,RDD setMethod("saveAsTextFile", - signature(rdd = "RDD", path = "character"), - function(rdd, path) { - func <- function(x) { - toString(x) + signature(x = "RDD", path = "character"), + function(x, path) { + func <- function(str) { + toString(str) } - stringRdd <- lapply(rdd, func) + stringRdd <- lapply(x, func) # Return nothing invisible( callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path)) @@ -1098,7 +1098,7 @@ setMethod("saveAsTextFile", #' Sort an RDD by the given key function. #' -#' @param rdd An RDD to be sorted. +#' @param x An RDD to be sorted. #' @param func A function used to compute the sort key for each element. #' @param ascending A flag to indicate whether the sorting is ascending or descending. #' @param numPartitions Number of partitions to create. @@ -1111,7 +1111,7 @@ setMethod("saveAsTextFile", #' rdd <- parallelize(sc, list(3, 2, 1)) #' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) #'} -setGeneric("sortBy", function(rdd, +setGeneric("sortBy", function(x, func, ascending = TRUE, numPartitions = 1L) { @@ -1121,20 +1121,20 @@ setGeneric("sortBy", function(rdd, #' @rdname sortBy #' @aliases sortBy,RDD,RDD-method setMethod("sortBy", - signature(rdd = "RDD", func = "function"), - function(rdd, func, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { - values(sortByKey(keyBy(rdd, func), ascending, numPartitions)) + signature(x = "RDD", func = "function"), + function(x, func, ascending = TRUE, numPartitions = SparkR::numPartitions(x)) { + values(sortByKey(keyBy(x, func), ascending, numPartitions)) }) # Helper function to get first N elements from an RDD in the specified order. # Param: -# rdd An RDD. +# x An RDD. # num Number of elements to return. # ascending A flag to indicate whether the sorting is ascending or descending. # Return: # A list of the first N elements from the RDD in the specified order. # -takeOrderedElem <- function(rdd, num, ascending = TRUE) { +takeOrderedElem <- function(x, num, ascending = TRUE) { if (num <= 0L) { return(list()) } @@ -1156,13 +1156,13 @@ takeOrderedElem <- function(rdd, num, ascending = TRUE) { newElems[ord[1:num]] } - newRdd <- mapPartitions(rdd, partitionFunc) + newRdd <- mapPartitions(x, partitionFunc) reduce(newRdd, reduceFunc) } #' Returns the first N elements from an RDD in ascending order. #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param num Number of elements to return. #' @return The first N elements from the RDD in ascending order. #' @rdname takeOrdered @@ -1173,19 +1173,19 @@ takeOrderedElem <- function(rdd, num, ascending = TRUE) { #' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) #' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) #'} -setGeneric("takeOrdered", function(rdd, num) { standardGeneric("takeOrdered") }) +setGeneric("takeOrdered", function(x, num) { standardGeneric("takeOrdered") }) #' @rdname takeOrdered #' @aliases takeOrdered,RDD,RDD-method setMethod("takeOrdered", - signature(rdd = "RDD", num = "integer"), - function(rdd, num) { - takeOrderedElem(rdd, num) + signature(x = "RDD", num = "integer"), + function(x, num) { + takeOrderedElem(x, num) }) #' Returns the top N elements from an RDD. #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param num Number of elements to return. #' @return The top N elements from the RDD. #' @rdname top @@ -1196,14 +1196,14 @@ setMethod("takeOrdered", #' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) #' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) #'} -setGeneric("top", function(rdd, num) { standardGeneric("top") }) +setGeneric("top", function(x, num) { standardGeneric("top") }) #' @rdname top #' @aliases top,RDD,RDD-method setMethod("top", - signature(rdd = "RDD", num = "integer"), - function(rdd, num) { - takeOrderedElem(rdd, num, FALSE) + signature(x = "RDD", num = "integer"), + function(x, num) { + takeOrderedElem(x, num, FALSE) }) #' Fold an RDD using a given associative function and a neutral "zero value". @@ -1211,7 +1211,7 @@ setMethod("top", #' Aggregate the elements of each partition, and then the results for all the #' partitions, using a given associative function and a neutral "zero value". #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param zeroValue A neutral "zero value". #' @param op An associative function for the folding operation. #' @return The folding result. @@ -1224,14 +1224,14 @@ setMethod("top", #' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) #' fold(rdd, 0, "+") # 15 #'} -setGeneric("fold", function(rdd, zeroValue, op) { standardGeneric("fold") }) +setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) #' @rdname fold #' @aliases fold,RDD,RDD-method setMethod("fold", - signature(rdd = "RDD", zeroValue = "ANY", op = "ANY"), - function(rdd, zeroValue, op) { - aggregateRDD(rdd, zeroValue, op, op) + signature(x = "RDD", zeroValue = "ANY", op = "ANY"), + function(x, zeroValue, op) { + aggregateRDD(x, zeroValue, op, op) }) #' Aggregate an RDD using the given combine functions and a neutral "zero value". @@ -1239,7 +1239,7 @@ setMethod("fold", #' Aggregate the elements of each partition, and then the results for all the #' partitions, using given combine functions and a neutral "zero value". #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param zeroValue A neutral "zero value". #' @param seqOp A function to aggregate the RDD elements. It may return a different #' result type from the type of the RDD elements. @@ -1257,18 +1257,18 @@ setMethod("fold", #' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } #' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) #'} -setGeneric("aggregateRDD", function(rdd, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) +setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) #' @rdname aggregateRDD #' @aliases aggregateRDD,RDD,RDD-method setMethod("aggregateRDD", - signature(rdd = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), - function(rdd, zeroValue, seqOp, combOp) { + signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), + function(x, zeroValue, seqOp, combOp) { partitionFunc <- function(part) { Reduce(seqOp, part, zeroValue) } - partitionList <- collect(lapplyPartition(rdd, partitionFunc), + partitionList <- collect(lapplyPartition(x, partitionFunc), flatten = FALSE) Reduce(combOp, partitionList, zeroValue) }) @@ -1277,7 +1277,7 @@ setMethod("aggregateRDD", #' #' The same as 'pipe()' in Spark. #' -#' @param rdd The RDD whose elements are piped to the forked external process. +#' @param x The RDD whose elements are piped to the forked external process. #' @param command The command to fork an external process. #' @param env A named list to set environment variables of the external process. #' @return A new RDD created by piping all elements to a forked external process. @@ -1290,15 +1290,15 @@ setMethod("aggregateRDD", #' collect(pipeRDD(rdd, "more") #' Output: c("1", "2", ..., "10") #'} -setGeneric("pipeRDD", function(rdd, command, env = list()) { +setGeneric("pipeRDD", function(x, command, env = list()) { standardGeneric("pipeRDD") }) #' @rdname pipeRDD #' @aliases pipeRDD,RDD,character-method setMethod("pipeRDD", - signature(rdd = "RDD", command = "character"), - function(rdd, command, env = list()) { + signature(x = "RDD", command = "character"), + function(x, command, env = list()) { func <- function(part) { trim.trailing.func <- function(x) { sub("[\r\n]*$", "", toString(x)) @@ -1307,13 +1307,13 @@ setMethod("pipeRDD", res <- system2(command, stdout = TRUE, input = input, env = env) lapply(res, trim.trailing.func) } - lapplyPartition(rdd, func) + lapplyPartition(x, func) }) # TODO: Consider caching the name in the RDD's environment #' Return an RDD's name. #' -#' @param rdd The RDD whose name is returned. +#' @param x The RDD whose name is returned. #' @rdname name #' @export #' @examples @@ -1322,19 +1322,19 @@ setMethod("pipeRDD", #' rdd <- parallelize(sc, list(1,2,3)) #' name(rdd) # NULL (if not set before) #'} -setGeneric("name", function(rdd) { standardGeneric("name") }) +setGeneric("name", function(x) { standardGeneric("name") }) #' @rdname name #' @aliases name,RDD setMethod("name", - signature(rdd = "RDD"), - function(rdd) { - callJMethod(getJRDD(rdd), "name") + signature(x = "RDD"), + function(x) { + callJMethod(getJRDD(x), "name") }) #' Set an RDD's name. #' -#' @param rdd The RDD whose name is to be set. +#' @param x The RDD whose name is to be set. #' @param name The RDD name to be set. #' @return a new RDD renamed. #' @rdname setName @@ -1346,15 +1346,15 @@ setMethod("name", #' setName(rdd, "myRDD") #' name(rdd) # "myRDD" #'} -setGeneric("setName", function(rdd, name) { standardGeneric("setName") }) +setGeneric("setName", function(x, name) { standardGeneric("setName") }) #' @rdname setName #' @aliases setName,RDD setMethod("setName", - signature(rdd = "RDD", name = "character"), - function(rdd, name) { - callJMethod(getJRDD(rdd), "setName", name) - rdd + signature(x = "RDD", name = "character"), + function(x, name) { + callJMethod(getJRDD(x), "setName", name) + x }) ############ Binary Functions ############# diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index 0c536f4478ac3..a54c1abe01b47 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -7,7 +7,7 @@ #' @description #' \code{lookup} returns a list of values in this RDD for key key. #' -#' @param rdd The RDD to collect +#' @param x The RDD to collect #' @param key The key to look up for #' @return a list of values in this RDD for key key #' @rdname lookup @@ -19,18 +19,18 @@ #' rdd <- parallelize(sc, pairs) #' lookup(rdd, 1) # list(1, 3) #'} -setGeneric("lookup", function(rdd, key) { standardGeneric("lookup") }) +setGeneric("lookup", function(x, key) { standardGeneric("lookup") }) #' @rdname lookup #' @aliases lookup,RDD-method setMethod("lookup", - signature(rdd = "RDD", key = "ANY"), - function(rdd, key) { + signature(x = "RDD", key = "ANY"), + function(x, key) { partitionFunc <- function(part) { - filtered <- part[unlist(lapply(part, function(x) { identical(key, x[[1]]) }))] - lapply(filtered, function(x) { x[[2]] }) + filtered <- part[unlist(lapply(part, function(i) { identical(key, i[[1]]) }))] + lapply(filtered, function(i) { i[[2]] }) } - valsRDD <- lapplyPartition(rdd, partitionFunc) + valsRDD <- lapplyPartition(x, partitionFunc) collect(valsRDD) }) @@ -39,7 +39,7 @@ setMethod("lookup", #' #' Same as countByKey in Spark. #' -#' @param rdd The RDD to count keys. +#' @param x The RDD to count keys. #' @return list of (key, count) pairs, where count is number of each key in rdd. #' @rdname countByKey #' @export @@ -49,20 +49,20 @@ setMethod("lookup", #' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) #' countByKey(rdd) # ("a", 2L), ("b", 1L) #'} -setGeneric("countByKey", function(rdd) { standardGeneric("countByKey") }) +setGeneric("countByKey", function(x) { standardGeneric("countByKey") }) #' @rdname countByKey #' @aliases countByKey,RDD-method setMethod("countByKey", - signature(rdd = "RDD"), - function(rdd) { - keys <- lapply(rdd, function(item) { item[[1]] }) + signature(x = "RDD"), + function(x) { + keys <- lapply(x, function(item) { item[[1]] }) countByValue(keys) }) #' Return an RDD with the keys of each tuple. #' -#' @param rdd The RDD from which the keys of each tuple is returned. +#' @param x The RDD from which the keys of each tuple is returned. #' @rdname keys #' @export #' @examples @@ -71,22 +71,22 @@ setMethod("countByKey", #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) #' collect(keys(rdd)) # list(1, 3) #'} -setGeneric("keys", function(rdd) { standardGeneric("keys") }) +setGeneric("keys", function(x) { standardGeneric("keys") }) #' @rdname keys #' @aliases keys,RDD setMethod("keys", - signature(rdd = "RDD"), - function(rdd) { - func <- function(x) { - x[[1]] + signature(x = "RDD"), + function(x) { + func <- function(k) { + k[[1]] } - lapply(rdd, func) + lapply(x, func) }) #' Return an RDD with the values of each tuple. #' -#' @param rdd The RDD from which the values of each tuple is returned. +#' @param x The RDD from which the values of each tuple is returned. #' @rdname values #' @export #' @examples @@ -95,17 +95,17 @@ setMethod("keys", #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) #' collect(values(rdd)) # list(2, 4) #'} -setGeneric("values", function(rdd) { standardGeneric("values") }) +setGeneric("values", function(x) { standardGeneric("values") }) #' @rdname values #' @aliases values,RDD setMethod("values", - signature(rdd = "RDD"), - function(rdd) { - func <- function(x) { - x[[2]] + signature(x = "RDD"), + function(x) { + func <- function(v) { + v[[2]] } - lapply(rdd, func) + lapply(x, func) }) #' Applies a function to all values of the elements, without modifying the keys. @@ -176,7 +176,7 @@ setMethod("flatMapValues", #' For each element of this RDD, the partitioner is used to compute a hash #' function and the RDD is partitioned using this hash value. #' -#' @param rdd The RDD to partition. Should be an RDD where each element is +#' @param x The RDD to partition. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param numPartitions Number of partitions to create. #' @param ... Other optional arguments to partitionBy. @@ -195,15 +195,15 @@ setMethod("flatMapValues", #' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) #'} setGeneric("partitionBy", - function(rdd, numPartitions, ...) { + function(x, numPartitions, ...) { standardGeneric("partitionBy") }) #' @rdname partitionBy #' @aliases partitionBy,RDD,integer-method setMethod("partitionBy", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions, partitionFunc = hashCode) { + signature(x = "RDD", numPartitions = "integer"), + function(x, numPartitions, partitionFunc = hashCode) { #if (missing(partitionFunc)) { # partitionFunc <- hashCode @@ -218,7 +218,7 @@ setMethod("partitionBy", connection = NULL) broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) - jrdd <- getJRDD(rdd) + jrdd <- getJRDD(x) # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is @@ -227,7 +227,7 @@ setMethod("partitionBy", callJMethod(jrdd, "rdd"), as.integer(numPartitions), serializedHashFuncBytes, - rdd@env$serialized, + x@env$serialized, depsBinArr, packageNamesArr, as.character(.sparkREnv$libname), @@ -254,7 +254,7 @@ setMethod("partitionBy", #' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). #' and group values for each key in the RDD into a single sequence. #' -#' @param rdd The RDD to group. Should be an RDD where each element is +#' @param x The RDD to group. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param numPartitions Number of partitions to create. #' @return An RDD where each element is list(K, list(V)) @@ -271,27 +271,27 @@ setMethod("partitionBy", #' grouped[[1]] # Should be a list(1, list(2, 4)) #'} setGeneric("groupByKey", - function(rdd, numPartitions) { + function(x, numPartitions) { standardGeneric("groupByKey") }) #' @rdname groupByKey #' @aliases groupByKey,RDD,integer-method setMethod("groupByKey", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions) { - shuffled <- partitionBy(rdd, numPartitions) + signature(x = "RDD", numPartitions = "integer"), + function(x, numPartitions) { + shuffled <- partitionBy(x, numPartitions) groupVals <- function(part) { vals <- new.env() keys <- new.env() pred <- function(item) exists(item$hash, keys) - appendList <- function(acc, x) { - addItemToAccumulator(acc, x) + appendList <- function(acc, i) { + addItemToAccumulator(acc, i) acc } - makeList <- function(x) { + makeList <- function(i) { acc <- initAccumulator() - addItemToAccumulator(acc, x) + addItemToAccumulator(acc, i) acc } # Each item in the partition is list of (K, V) @@ -303,9 +303,9 @@ setMethod("groupByKey", }) # extract out data field vals <- eapply(vals, - function(x) { - length(x$data) <- x$counter - x$data + function(i) { + length(i$data) <- i$counter + i$data }) # Every key in the environment contains a list # Convert that to list(K, Seq[V]) @@ -319,7 +319,7 @@ setMethod("groupByKey", #' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). #' and merges the values for each key using an associative reduce function. #' -#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' @param x The RDD to reduce by key. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param combineFunc The associative reduce function to use. #' @param numPartitions Number of partitions to create. @@ -338,15 +338,15 @@ setMethod("groupByKey", #' reduced[[1]] # Should be a list(1, 6) #'} setGeneric("reduceByKey", - function(rdd, combineFunc, numPartitions) { + function(x, combineFunc, numPartitions) { standardGeneric("reduceByKey") }) #' @rdname reduceByKey #' @aliases reduceByKey,RDD,integer-method setMethod("reduceByKey", - signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), - function(rdd, combineFunc, numPartitions) { + signature(x = "RDD", combineFunc = "ANY", numPartitions = "integer"), + function(x, combineFunc, numPartitions) { reduceVals <- function(part) { vals <- new.env() keys <- new.env() @@ -358,7 +358,7 @@ setMethod("reduceByKey", }) convertEnvsToList(keys, vals) } - locallyReduced <- lapplyPartition(rdd, reduceVals) + locallyReduced <- lapplyPartition(x, reduceVals) shuffled <- partitionBy(locallyReduced, numPartitions) lapplyPartition(shuffled, reduceVals) }) @@ -369,7 +369,7 @@ setMethod("reduceByKey", #' and merges the values for each key using an associative reduce function, but return the #' results immediately to the driver as an R list. #' -#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' @param x The RDD to reduce by key. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param combineFunc The associative reduce function to use. #' @return A list of elements of type list(K, V') where V' is the merged value for each key @@ -385,15 +385,15 @@ setMethod("reduceByKey", #' reduced # list(list(1, 6), list(1.1, 3)) #'} setGeneric("reduceByKeyLocally", - function(rdd, combineFunc) { + function(x, combineFunc) { standardGeneric("reduceByKeyLocally") }) #' @rdname reduceByKeyLocally #' @aliases reduceByKeyLocally,RDD,integer-method setMethod("reduceByKeyLocally", - signature(rdd = "RDD", combineFunc = "ANY"), - function(rdd, combineFunc) { + signature(x = "RDD", combineFunc = "ANY"), + function(x, combineFunc) { reducePart <- function(part) { vals <- new.env() keys <- new.env() @@ -417,7 +417,7 @@ setMethod("reduceByKeyLocally", }) accum } - reduced <- mapPartitions(rdd, reducePart) + reduced <- mapPartitions(x, reducePart) merged <- reduce(reduced, mergeParts) convertEnvsToList(merged[[1]], merged[[2]]) }) @@ -437,7 +437,7 @@ setMethod("reduceByKeyLocally", #' two lists). #' } #' -#' @param rdd The RDD to combine. Should be an RDD where each element is +#' @param x The RDD to combine. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param createCombiner Create a combiner (C) given a value (V) #' @param mergeValue Merge the given value (V) with an existing combiner (C) @@ -458,16 +458,16 @@ setMethod("reduceByKeyLocally", #' combined[[1]] # Should be a list(1, 6) #'} setGeneric("combineByKey", - function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + function(x, createCombiner, mergeValue, mergeCombiners, numPartitions) { standardGeneric("combineByKey") }) #' @rdname combineByKey #' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method setMethod("combineByKey", - signature(rdd = "RDD", createCombiner = "ANY", mergeValue = "ANY", + signature(x = "RDD", createCombiner = "ANY", mergeValue = "ANY", mergeCombiners = "ANY", numPartitions = "integer"), - function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + function(x, createCombiner, mergeValue, mergeCombiners, numPartitions) { combineLocally <- function(part) { combiners <- new.env() keys <- new.env() @@ -479,7 +479,7 @@ setMethod("combineByKey", }) convertEnvsToList(keys, combiners) } - locallyCombined <- lapplyPartition(rdd, combineLocally) + locallyCombined <- lapplyPartition(x, combineLocally) shuffled <- partitionBy(locallyCombined, numPartitions) mergeAfterShuffle <- function(part) { combiners <- new.env() @@ -506,7 +506,7 @@ setMethod("combineByKey", #' of these functions are allowed to modify and return their first argument #' instead of creating a new U. #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param zeroValue A neutral "zero value". #' @param seqOp A function to aggregate the values of each key. It may return #' a different result type from the type of the values. @@ -526,21 +526,21 @@ setMethod("combineByKey", #' # list(list(1, list(3, 2)), list(2, list(7, 2))) #'} setGeneric("aggregateByKey", - function(rdd, zeroValue, seqOp, combOp, numPartitions) { + function(x, zeroValue, seqOp, combOp, numPartitions) { standardGeneric("aggregateByKey") }) #' @rdname aggregateByKey #' @aliases aggregateByKey,RDD,ANY,ANY,ANY,integer-method setMethod("aggregateByKey", - signature(rdd = "RDD", zeroValue = "ANY", seqOp = "ANY", + signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY", numPartitions = "integer"), - function(rdd, zeroValue, seqOp, combOp, numPartitions) { + function(x, zeroValue, seqOp, combOp, numPartitions) { createCombiner <- function(v) { do.call(seqOp, list(zeroValue, v)) } - combineByKey(rdd, createCombiner, seqOp, combOp, numPartitions) + combineByKey(x, createCombiner, seqOp, combOp, numPartitions) }) #' Fold a pair RDD by each key. @@ -550,7 +550,7 @@ setMethod("aggregateByKey", #' number of times, and must not change the result (e.g., 0 for addition, or #' 1 for multiplication.). #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param zeroValue A neutral "zero value". #' @param func An associative function for folding values of each key. #' @return An RDD containing the aggregation result. @@ -564,17 +564,17 @@ setMethod("aggregateByKey", #' foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) #'} setGeneric("foldByKey", - function(rdd, zeroValue, func, numPartitions) { + function(x, zeroValue, func, numPartitions) { standardGeneric("foldByKey") }) #' @rdname foldByKey #' @aliases foldByKey,RDD,ANY,ANY,integer-method setMethod("foldByKey", - signature(rdd = "RDD", zeroValue = "ANY", + signature(x = "RDD", zeroValue = "ANY", func = "ANY", numPartitions = "integer"), - function(rdd, zeroValue, func, numPartitions) { - aggregateByKey(rdd, zeroValue, func, func, numPartitions) + function(x, zeroValue, func, numPartitions) { + aggregateByKey(x, zeroValue, func, func, numPartitions) }) ############ Binary Functions ############# @@ -585,9 +585,9 @@ setMethod("foldByKey", #' \code{join} This function joins two RDDs where every element is of the form list(K, V). #' The key types of the two RDDs should be the same. #' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' @param x An RDD to be joined. Should be an RDD where each element is #' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' @param y An RDD to be joined. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. #' @return a new RDD containing all pairs of elements with matching keys in @@ -601,21 +601,21 @@ setMethod("foldByKey", #' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) #' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) #'} -setGeneric("join", function(rdd1, rdd2, numPartitions) { standardGeneric("join") }) +setGeneric("join", function(x, y, numPartitions) { standardGeneric("join") }) #' @rdname join-methods #' @aliases join,RDD,RDD-method setMethod("join", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + signature(x = "RDD", y = "RDD", numPartitions = "integer"), + function(x, y, numPartitions) { + xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) + yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) doJoin <- function(v) { joinTaggedList(v, list(FALSE, FALSE)) } - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' Left outer join two RDDs @@ -624,12 +624,12 @@ setMethod("join", #' \code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). #' The key types of the two RDDs should be the same. #' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' @param x An RDD to be joined. Should be an RDD where each element is #' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' @param y An RDD to be joined. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in rdd1, the resulting RDD will either contain +#' @return For each element (k, v) in x, the resulting RDD will either contain #' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) #' if no elements in rdd2 have key k. #' @rdname join-methods @@ -642,21 +642,21 @@ setMethod("join", #' leftOuterJoin(rdd1, rdd2, 2L) #' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) #'} -setGeneric("leftOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("leftOuterJoin") }) +setGeneric("leftOuterJoin", function(x, y, numPartitions) { standardGeneric("leftOuterJoin") }) #' @rdname join-methods #' @aliases leftOuterJoin,RDD,RDD-method setMethod("leftOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + signature(x = "RDD", y = "RDD", numPartitions = "integer"), + function(x, y, numPartitions) { + xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) + yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) doJoin <- function(v) { joinTaggedList(v, list(FALSE, TRUE)) } - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' Right outer join two RDDs @@ -665,14 +665,14 @@ setMethod("leftOuterJoin", #' \code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). #' The key types of the two RDDs should be the same. #' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' @param x An RDD to be joined. Should be an RDD where each element is #' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' @param y An RDD to be joined. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. -#' @return For each element (k, w) in rdd2, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) -#' if no elements in rdd1 have key k. +#' @return For each element (k, w) in y, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, v) in x, or the pair (k, (NULL, w)) +#' if no elements in x have key k. #' @rdname join-methods #' @export #' @examples @@ -683,21 +683,21 @@ setMethod("leftOuterJoin", #' rightOuterJoin(rdd1, rdd2, 2L) #' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) #'} -setGeneric("rightOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("rightOuterJoin") }) +setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) #' @rdname join-methods #' @aliases rightOuterJoin,RDD,RDD-method setMethod("rightOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + signature(x = "RDD", y = "RDD", numPartitions = "integer"), + function(x, y, numPartitions) { + xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) + yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) doJoin <- function(v) { joinTaggedList(v, list(TRUE, FALSE)) } - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' Full outer join two RDDs @@ -706,15 +706,15 @@ setMethod("rightOuterJoin", #' \code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). #' The key types of the two RDDs should be the same. #' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' @param x An RDD to be joined. Should be an RDD where each element is #' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' @param y An RDD to be joined. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD -#' will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and -#' (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements -#' in rdd1/rdd2 have key k. +#' @return For each element (k, v) in x and (k, w) in y, the resulting RDD +#' will contain all pairs (k, (v, w)) for both (k, v) in x and +#' (k, w) in y, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements +#' in x/y have key k. #' @rdname join-methods #' @export #' @examples @@ -727,22 +727,22 @@ setMethod("rightOuterJoin", #' # list(2, list(NULL, 4))) #' # list(3, list(3, NULL)), #'} -setGeneric("fullOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("fullOuterJoin") }) +setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) #' @rdname join-methods #' @aliases fullOuterJoin,RDD,RDD-method setMethod("fullOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + signature(x = "RDD", y = "RDD", numPartitions = "integer"), + function(x, y, numPartitions) { + xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) + yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) doJoin <- function(v) { joinTaggedList(v, list(TRUE, TRUE)) } - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' For each key k in several RDDs, return a resulting RDD that @@ -809,7 +809,7 @@ setMethod("cogroup", #' Sort a (k, v) pair RDD by k. #' -#' @param rdd A (k, v) pair RDD to be sorted. +#' @param x A (k, v) pair RDD to be sorted. #' @param ascending A flag to indicate whether the sorting is ascending or descending. #' @param numPartitions Number of partitions to create. #' @return An RDD where all (k, v) pair elements are sorted. @@ -821,7 +821,7 @@ setMethod("cogroup", #' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) #' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) #'} -setGeneric("sortByKey", function(rdd, +setGeneric("sortByKey", function(x, ascending = TRUE, numPartitions = 1L) { standardGeneric("sortByKey") @@ -830,17 +830,17 @@ setGeneric("sortByKey", function(rdd, #' @rdname sortByKey #' @aliases sortByKey,RDD,RDD-method setMethod("sortByKey", - signature(rdd = "RDD"), - function(rdd, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { + signature(x = "RDD"), + function(x, ascending = TRUE, numPartitions = SparkR::numPartitions(x)) { rangeBounds <- list() if (numPartitions > 1) { - rddSize <- count(rdd) + rddSize <- count(x) # constant from Spark's RangePartitioner maxSampleSize <- numPartitions * 20 fraction <- min(maxSampleSize / max(rddSize, 1), 1.0) - samples <- collect(keys(sampleRDD(rdd, FALSE, fraction, 1L))) + samples <- collect(keys(sampleRDD(x, FALSE, fraction, 1L))) # Note: the built-in R sort() function only works on atomic vectors samples <- sort(unlist(samples, recursive = FALSE), decreasing = !ascending) @@ -873,7 +873,7 @@ setMethod("sortByKey", sortKeyValueList(part, decreasing = !ascending) } - newRDD <- partitionBy(rdd, numPartitions, rangePartitionFunc) + newRDD <- partitionBy(x, numPartitions, rangePartitionFunc) lapplyPartition(newRDD, partitionFunc) }) From 8bd93b57e29ab09c51f321f1fa4a8235667ede03 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 25 Feb 2015 14:46:36 -0800 Subject: [PATCH 475/687] fix signature --- pkg/R/DataFrame.R | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index f8bf24f61d2a6..bb2865117c601 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -224,24 +224,25 @@ setMethod("toRDD", }) }) -setGeneric("groupBy", function(df, ...) { standardGeneric("groupBy") }) + +setGeneric("groupBy", function(x, ...) { standardGeneric("groupBy") }) setMethod("groupBy", - signature(df = "DataFrame"), - function(df, col, ...) { + signature(x = "DataFrame"), + function(x, col, ...) { jseq <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", list(...)) - sgd <- callJMethod(df@sdf, "groupBy", col, jseq) + sgd <- callJMethod(x@sdf, "groupBy", col, jseq) groupedData(sgd) }) -setGeneric("agg", function (df, ...) { standardGeneric("agg") }) +setGeneric("agg", function (x, ...) { standardGeneric("agg") }) setMethod("agg", - signature(df = "DataFrame"), - function(df, ...) { + signature(x = "DataFrame"), + function(x, ...) { cols <- varargsToEnv(...) - sdf <- callJMethod(df@sdf, "agg", cols) + sdf <- callJMethod(x@sdf, "agg", cols) dataFrame(sdf) }) @@ -323,10 +324,10 @@ setMethod("count", }) setMethod("agg", - signature(df = "GroupedData"), - function(df, ...) { + signature(x = "GroupedData"), + function(x, ...) { cols <- varargsToEnv(...) - sdf <- callJMethod(df@sgd, "agg", cols) + sdf <- callJMethod(x@sgd, "agg", cols) dataFrame(sdf) }) From 3a58ebcc6b95c1348009e330e49a7a46e2528803 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 25 Feb 2015 14:52:31 -0800 Subject: [PATCH 476/687] rm unrelated file --- pkg/src/src/main/main.iml | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 pkg/src/src/main/main.iml diff --git a/pkg/src/src/main/main.iml b/pkg/src/src/main/main.iml deleted file mode 100644 index 5e7b567d79304..0000000000000 --- a/pkg/src/src/main/main.iml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - From 3294949d41c5515f785bae2ac0b566ffd8c8c5df Mon Sep 17 00:00:00 2001 From: Chris Freeman Date: Wed, 25 Feb 2015 18:19:39 -0600 Subject: [PATCH 477/687] Restore `rdd` argument to `getJRDD` --- pkg/R/RDD.R | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 608ebe1ee2673..010bbd73182dd 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -97,18 +97,18 @@ PipelinedRDD <- function(prev, func) { # The jrdd accessor function. -setGeneric("getJRDD", function(x, ...) { standardGeneric("getJRDD") }) -setMethod("getJRDD", signature(x = "RDD"), function(x) x@jrdd ) -setMethod("getJRDD", signature(x = "PipelinedRDD"), - function(x, dataSerialization = TRUE) { - if (!is.null(x@env$jrdd_val)) { - return(x@env$jrdd_val) +setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) +setMethod("getJRDD", signature(rdd = "RDD"), function(rdd) rdd@jrdd ) +setMethod("getJRDD", signature(rdd = "PipelinedRDD"), + function(rdd, dataSerialization = TRUE) { + if (!is.null(rdd@env$jrdd_val)) { + return(rdd@env$jrdd_val) } # TODO: This is to handle anonymous functions. Find out a # better way to do this. computeFunc <- function(split, part) { - x@func(split, part) + rdd@func(split, part) } serializedFuncArr <- serialize("computeFunc", connection = NULL) @@ -120,13 +120,13 @@ setMethod("getJRDD", signature(x = "PipelinedRDD"), depsBin <- getDependencies(computeFunc) - prev_jrdd <- x@prev_jrdd + prev_jrdd <- rdd@prev_jrdd if (dataSerialization) { rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, - x@env$prev_serialized, + rdd@env$prev_serialized, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), @@ -136,7 +136,7 @@ setMethod("getJRDD", signature(x = "PipelinedRDD"), rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, - x@env$prev_serialized, + rdd@env$prev_serialized, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), @@ -144,9 +144,9 @@ setMethod("getJRDD", signature(x = "PipelinedRDD"), callJMethod(prev_jrdd, "classTag")) } # Save the serialization flag after we create a RRDD - x@env$serialized <- dataSerialization - x@env$jrdd_val <- callJMethod(rddRef, "asJavaRDD") # rddRef$asJavaRDD() - x@env$jrdd_val + rdd@env$serialized <- dataSerialization + rdd@env$jrdd_val <- callJMethod(rddRef, "asJavaRDD") # rddRef$asJavaRDD() + rdd@env$jrdd_val }) From 1e72b4b4de7cd3fd3651bf3d8a6f34ed198c5e36 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 25 Feb 2015 17:37:16 -0800 Subject: [PATCH 478/687] missing API in SQLContext --- pkg/NAMESPACE | 6 ++++- pkg/R/SQLContext.R | 56 ++++++++++++++++++++++++++++++++++++++++++++++ pkg/R/utils.R | 15 +++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index fd7eaae7278ca..803828704d0be 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -87,10 +87,14 @@ exportMethods("printSchema", "limit") export("jsonFile", + "jsonRDD", "parquetFile", "sql", "table", + "tables", + "tableNames", "cacheTable", - "uncacheTable") + "uncacheTable", + "clearCache) export("sparkRSQL.init") diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 9e28098f71462..37b5f0fd043e3 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -26,6 +26,23 @@ jsonFile <- function(sqlCtx, path) { dataFrame(sdf) } + +#' JSON RDD +#' +#' Loads an RDD storing one JSON object per string as a DataFrame. + +# TODO: support schema +jsonRDD <- function(sqlCtx, rdd, schema = NULL, samplingRatio = 1.0) { + rdd <- serializeToString(rdd) + if (is.null(schema)) { + srdd <- callJMethod(getJRDD(rdd), "rdd") + callJMethod(sqlCtx, "jsonRDD", srdd, samplingRatio) + } else { + stop("not implemented") + } +} + + #' Create a DataFrame from a Parquet file. #' #' Loads a Parquet file, returning the result as a DataFrame. @@ -68,6 +85,7 @@ sql <- function(sqlCtx, sqlQuery) { dataFrame(sdf) } + #' Create a DataFrame from a SparkSQL Table #' #' Returns the specified Table as a DataFrame. The Table must have already been registered @@ -92,6 +110,34 @@ table <- function(sqlCtx, tableName) { dataFrame(sdf) } + +#' Tables +#' +#' Returns a DataFrame containing names of tables in the given database. +#' @export +tables <- function(sqlCtx, databaseName=NULL) { + jdf <- if (is.null(databaseName)) { + callJMethod(sqlCtx, "table") + } else { + callJMethod(sqlCtx, "table", databaseName) + } + dataFrame(jdf) +} + + +#' Table Names +#' +#' Returns the names of tables in the given database as an array. +#' @export +tableNames <- function(sqlCtx, databaseName=NULL) { + if (is.null(databaseName)) { + callJMethod(sqlCtx, "tableNames") + } else { + callJMethod(sqlCtx, "tableNames", databaseName) + } +} + + #' Cache Table #' #' Caches the specified table in-memory. @@ -133,3 +179,13 @@ cacheTable <- function(sqlCtx, tableName) { uncacheTable <- function(sqlCtx, tableName) { callJMethod(sqlCtx, "uncacheTable", tableName) } + + +#' Clear Cache +#' +#' Removes all cached tables from the in-memory cache. +#' + +clearCache <- function(sqlCtx) { + callJMethod(sqlCtx, "clearCache") +} diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 4b4142a5fb1af..6639a0c2f610d 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -183,6 +183,21 @@ serializeToBytes <- function(rdd) { } } +# Create a new RDD with serializedMode == "string". +# Return itself if already in "string" format. +serializeToString <- function(rdd) { + if (!inherits(rdd, "RDD")) { + stop("Argument 'rdd' is not an RDD type.") + } + if (getSerializedMode(rdd) != "string") { + ser.rdd <- lapply(rdd, function(x) { x }) + ser.rdd@env$jrdd_val <- getJRDD(rdd, "string") + return(ser.rdd) + } else { + return(rdd) + } +} + # Fast append to list by using an accumulator. # http://stackoverflow.com/questions/17046336/here-we-go-again-append-an-element-to-a-list-in-r # From 774e687c0907c1f8309e04e9dc7ff268526b64fb Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 25 Feb 2015 23:26:15 -0800 Subject: [PATCH 479/687] add missing API in SQLContext --- pkg/NAMESPACE | 2 +- pkg/R/RDD.R | 1 + pkg/R/SQLContext.R | 10 ++++----- pkg/R/utils.R | 5 +++-- pkg/inst/tests/test_sparkSQL.R | 39 +++++++++++++++++++++++++++++----- 5 files changed, 44 insertions(+), 13 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 803828704d0be..1fe1dc286f1c0 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -95,6 +95,6 @@ export("jsonFile", "tableNames", "cacheTable", "uncacheTable", - "clearCache) + "clearCache") export("sparkRSQL.init") diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e6b7f31a14106..beaf74b4b7469 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1118,6 +1118,7 @@ setMethod("saveAsTextFile", toString(x) } stringRdd <- lapply(rdd, func) + # Return nothing invisible( callJMethod(getJRDD(stringRdd, serializedMode = "string"), "saveAsTextFile", path)) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 37b5f0fd043e3..ab2eb1035a777 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -35,8 +35,8 @@ jsonFile <- function(sqlCtx, path) { jsonRDD <- function(sqlCtx, rdd, schema = NULL, samplingRatio = 1.0) { rdd <- serializeToString(rdd) if (is.null(schema)) { - srdd <- callJMethod(getJRDD(rdd), "rdd") - callJMethod(sqlCtx, "jsonRDD", srdd, samplingRatio) + sdf <- callJMethod(sqlCtx, "jsonRDD", callJMethod(getJRDD(rdd), "rdd"), samplingRatio) + dataFrame(sdf) } else { stop("not implemented") } @@ -111,15 +111,15 @@ table <- function(sqlCtx, tableName) { } -#' Tables +#' Tablesq #' #' Returns a DataFrame containing names of tables in the given database. #' @export tables <- function(sqlCtx, databaseName=NULL) { jdf <- if (is.null(databaseName)) { - callJMethod(sqlCtx, "table") + callJMethod(sqlCtx, "tables") } else { - callJMethod(sqlCtx, "table", databaseName) + callJMethod(sqlCtx, "tables", databaseName) } dataFrame(jdf) } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 6639a0c2f610d..e11ec69ddff79 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -190,8 +190,9 @@ serializeToString <- function(rdd) { stop("Argument 'rdd' is not an RDD type.") } if (getSerializedMode(rdd) != "string") { - ser.rdd <- lapply(rdd, function(x) { x }) - ser.rdd@env$jrdd_val <- getJRDD(rdd, "string") + ser.rdd <- lapply(rdd, function(x) { toString(x) }) + # force it to create jrdd using "string" + getJRDD(ser.rdd, serializedMode = "string") return(ser.rdd) } else { return(rdd) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index f5e47ed47776e..e34c9e61a3006 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -20,6 +20,35 @@ test_that("jsonFile() on a local file returns a DataFrame", { expect_true(count(df) == 3) }) +test_that("jsonRDD() on a RDD with json string", { + rdd <- parallelize(sc, mockLines) + expect_true(count(rdd) == 3) + df <- jsonRDD(sqlCtx, rdd) + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 3) + + rdd2 <- flatMap(rdd, function(x) c(x, x)) + df <- jsonRDD(sqlCtx, rdd2) + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 6) +}) + +test_that("test cache and persist and unpersist", { + df <- jsonFile(sqlCtx, jsonPath) + cache(sqlCtx, df) + persist(sqlCtx, df) + unpersist(sqlCtx, df) + expect_true(count(df) == 3) + clearCache(sqlCtx) +}) + +test_that("test tableNames and tables", { + expect_true(length(tableNames(sqlCtx)) == 0) + df <- tables(sqlCtx) + expect_true(count(df) == 0) +}) + + test_that("registerTempTable() results in a queryable table and sql() results in a new DataFrame", { df <- jsonFile(sqlCtx, jsonPath) registerTempTable(df, "table1") @@ -55,7 +84,7 @@ test_that("union on mixed serialization types correctly returns a byte RRDD", { # Byte RDD nums <- 1:10 rdd <- parallelize(sc, nums, 2L) - + # String RDD textLines <- c("Michael", "Andy, 30", @@ -63,16 +92,16 @@ test_that("union on mixed serialization types correctly returns a byte RRDD", { textPath <- tempfile(pattern="sparkr-textLines", fileext=".tmp") writeLines(textLines, textPath) textRDD <- textFile(sc, textPath) - + df <- jsonFile(sqlCtx, jsonPath) dfRDD <- toRDD(df) - + unionByte <- unionRDD(rdd, dfRDD) expect_true(inherits(unionByte, "RDD")) expect_true(getSerializedMode(unionByte) == "byte") expect_true(collect(unionByte)[[1]] == 1) expect_true(collect(unionByte)[[12]]$name == "Andy") - + unionString <- unionRDD(textRDD, dfRDD) expect_true(inherits(unionString, "RDD")) expect_true(getSerializedMode(unionString) == "byte") @@ -86,7 +115,7 @@ test_that("objectFile() works with row serialization", { dfRDD <- toRDD(df) saveAsObjectFile(dfRDD, objectPath) objectIn <- objectFile(sc, objectPath) - + expect_true(inherits(objectIn, "RDD")) expect_true(getSerializedMode(objectIn) == "byte") expect_true(collect(objectIn)[[2]]$age == 30) From 8d2ec6e6396fd8c35f27d37feac59150f9e45c3d Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 26 Feb 2015 00:55:38 -0800 Subject: [PATCH 480/687] add sum/max/min/avg/mean --- pkg/NAMESPACE | 2 +- pkg/R/DataFrame.R | 21 +++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 10 +++++++-- .../amplab/sparkr/SparkRBackendHandler.scala | 5 +++-- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index e9668ab1f19ad..1f264a895e58e 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -89,7 +89,7 @@ exportMethods("printSchema", "limit") exportClasses("GroupedData") -exportMethods("count", "agg") +exportMethods("count", "agg", "avg") export("jsonFile", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index bb2865117c601..56ffc4c422242 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -331,5 +331,26 @@ setMethod("agg", dataFrame(sdf) }) +#' sum/mean/avg/min/max + +metheds <- c("sum", "mean", "avg", "min", "max") + +setGeneric("avg", function(x, ...) { standardGeneric("avg") }) + +createMethod <- function(name) { + setMethod(name, + signature(x = "GroupedData"), + function(x, ...) { + jseq <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", list(...)) + sdf <- callJMethod(x@sgd, name, jseq) + dataFrame(sdf) + }) +} + +for (name in metheds) { + createMethod(name) +} + + diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 81a090c8339e8..8bcdf3bb0f228 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -155,8 +155,14 @@ test_that("group by", { expect_true(3 == count(df2)) df3 <- agg(gd, age = "sum") - expect_true(inherits(df2, "DataFrame")) - expect_true(3 == count(df2)) + expect_true(inherits(df3, "DataFrame")) + expect_true(3 == count(df3)) + + df4 <- sum(gd, "age") + expect_true(inherits(df4, "DataFrame")) + expect_true(3 == count(df4)) + expect_true(3 == count(mean(gd, "age"))) + expect_true(3 == count(max(gd, "age"))) }) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 20db35081695d..9050b2a430d8b 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -107,7 +107,7 @@ class SparkRBackendHandler(server: SparkRBackend) matchMethod(numArgs, args, x.getParameterTypes) } if (methods.isEmpty) { - throw new Exception(s"No matched method found for $methodName") + throw new Exception(s"No matched method found for $cls.$methodName") } val ret = methods.head.invoke(obj, args:_*) @@ -149,6 +149,7 @@ class SparkRBackendHandler(server: SparkRBackend) args: Array[java.lang.Object], parameterTypes: Array[Class[_]]): Boolean = { if (parameterTypes.length != numArgs) { + logInfo(s"num of arguments numArgs not match with ${parameterTypes.length}") return false } @@ -165,7 +166,7 @@ class SparkRBackendHandler(server: SparkRBackend) } } if (!parameterWrapperType.isInstance(args(i))) { - logInfo(s"type $parameterWrapperType not match with ${args(i)}") + logInfo(s"arg $i not match: type $parameterWrapperType != ${args(i)}") return false } } From 68d6de4cd2914f1dec12de3fb287cfa6d71c3142 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 09:08:52 -0600 Subject: [PATCH 481/687] Fix typos --- pkg/R/RDD.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 010bbd73182dd..48aa66af93f42 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -265,7 +265,7 @@ setGeneric("unpersist", function(x) { standardGeneric("unpersist") }) setMethod("unpersist", signature(x = "RDD"), function(x) { - callJMethod(getJRDD(x, "unpersist")) + callJMethod(getJRDD(x), "unpersist") x@env$isCached <- FALSE x }) @@ -399,7 +399,7 @@ setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) setMethod("collectAsMap", signature(x = "RDD"), function(x) { - pairList <- collect(rdd) + pairList <- collect(x) map <- new.env() lapply(pairList, function(i) { assign(as.character(i[[1]]), i[[2]], envir = map) }) as.list(map) From 8c241a39bffa846b4d0336d433bb7e78a8c76728 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 10:15:41 -0600 Subject: [PATCH 482/687] Merge with master, include changes to method args commit 68d6de4cd2914f1dec12de3fb287cfa6d71c3142 Author: cafreeman Date: Thu Feb 26 09:08:52 2015 -0600 Fix typos commit 3294949d41c5515f785bae2ac0b566ffd8c8c5df Author: Chris Freeman Date: Wed Feb 25 18:19:39 2015 -0600 Restore `rdd` argument to `getJRDD` commit c652b4c2f1858af5343a71ef81f63eff684e769b Author: cafreeman Date: Wed Feb 25 16:22:36 2015 -0600 Update method signatures to use generic arg Replace the `rdd` argument in all of the S4 methods with `x`. This will allow us to standardize the code as other Spark components get added and we need to set up multiple dispatch on S4 methods. In any cases where `x` was used as a generic iterator, I've replaced it with `i` except in a few cases where a different letter made sense. For example, in some of the pair functions, we now use `function(k)` and `function(v)` for the key/value functions. commit c10148e07525e7d3b5c5b2be1b2b8c45a6c495fd Merge: 08102b0 910e3be Author: Shivaram Venkataraman Date: Fri Feb 20 17:55:47 2015 -0800 Merge pull request #174 from shivaram/sparkr-runner [SPARKR-178] Integrate with SparkR with spark-submit commit 910e3bef359dd74ce53bf39009004f1161ddc8f8 Author: Shivaram Venkataraman Date: Fri Feb 20 10:41:54 2015 -0800 Add a timeout for initialization Also move sparkRBackend.stop into a finally block commit bf52b17a546ca492bcae6f1fa7277ad642a9e890 Merge: 88bf97f 08102b0 Author: Shivaram Venkataraman Date: Fri Feb 20 10:36:35 2015 -0800 Merge remote-tracking branch 'amplab-sparkr/master' into sparkr-runner Conflicts: pkg/R/sparkR.R commit 08102b0d04d31904b6051a1e6107c9303e208048 Merge: 06bf250 179ab38 Author: Shivaram Venkataraman Date: Thu Feb 19 23:39:41 2015 -0800 Merge pull request #176 from lythesia/master [SPARKR-193] Retry backend connection if it doesn't come up commit 179ab38810e42917db332c385ada9d27da42f6bb Author: lythesia Date: Fri Feb 20 12:02:47 2015 +0800 add try counts and increase time interval commit 06bf250e2b8e08480e827c564b92ecb2306ca883 Merge: 17eda4c 06d99f0 Author: Shivaram Venkataraman Date: Thu Feb 19 16:50:50 2015 -0800 Merge pull request #173 from shivaram/windows-space-fix [SPARKR-200][SPARKR-149] Fix path, classpath separator for Windows commit 88bf97f48dc0de9464f5e771d99ddaac8d86617c Author: Shivaram Venkataraman Date: Thu Feb 19 16:45:03 2015 -0800 Create SparkContext for R shell launch commit f9268d922e24b88643a74b4a4c6a03e7024525ec Author: Shivaram Venkataraman Date: Thu Feb 19 15:58:17 2015 -0800 Fix code review comments commit e6ad12d93852674c63fc69a8301963a6c395eb18 Author: Shivaram Venkataraman Date: Thu Feb 19 12:35:45 2015 -0800 Update comment describing sparkR-submit commit 17eda4cdd5c2ad7eb9a2846fd66b9135f2c53adf Merge: 0981dff ba2b72b Author: Shivaram Venkataraman Date: Thu Feb 19 11:19:14 2015 -0800 Merge pull request #175 from falaki/docfix Minor documentation cleanup commit ba2b72bf56a8fd964e210ea34c320e3cb7eb5436 Author: Hossein Date: Thu Feb 19 10:35:07 2015 -0800 Spark 1.1.0 is default commit 4cd7d3f8966102742d75cc60a9e93308b44026cf Author: lythesia Date: Thu Feb 19 21:51:44 2015 +0800 retry backend connection commit 749e2d08831b85fe70603a985e3e28f49def51fb Author: Hossein Date: Wed Feb 18 22:56:25 2015 -0800 Updated README commit bc04cf439fe642c7ebbc7baededdacf89c4abf89 Author: Shivaram Venkataraman Date: Wed Feb 18 18:24:44 2015 -0800 Use SPARKR_BACKEND_PORT in sparkR.R as default Change SparkRRunner to use EXISTING_SPARKR_BACKEND_PORT to differentiate between the two commit 22a19ac516be71b585246d0ebba76f20edc31995 Author: Shivaram Venkataraman Date: Wed Feb 18 14:34:32 2015 -0800 Use a semaphore to wait for backend to initalize Also pick a random port to avoid collisions commit 0981dffd1361e4614d456214b76428e7158a6a02 Merge: fd8f8a9 0cda231 Author: Zongheng Yang Date: Wed Feb 18 09:50:06 2015 -0800 Merge pull request #168 from sun-rui/SPARKR-153_2 [SPARKR-153] phase 2: implement aggregateByKey() and foldByKey(). commit 86fc639a8ddb8e872b1f5cd7392ebd3f896d22c8 Author: Shivaram Venkataraman Date: Tue Feb 17 23:29:51 2015 -0800 Move sparkR-submit into pkg/inst commit fd8f8a934000b9791f38b1610ffc786a5ebf0cd6 Merge: 384e6e2 a33dbea Author: Shivaram Venkataraman Date: Tue Feb 17 23:17:39 2015 -0800 Merge branch 'hqzizania-master' commit a33dbeacdb355746d7eacc3d7d2f6d6200c94564 Merge: 384e6e2 9c391c7 Author: Shivaram Venkataraman Date: Tue Feb 17 23:17:00 2015 -0800 Merge branch 'master' of https://github.com/hqzizania/SparkR-pkg into hqzizania-master Conflicts: pkg/R/RDD.R commit 384e6e2926a76023f90fb1a3498f9a6cf8efb2fd Merge: 2271030 1f5a6ac Author: Shivaram Venkataraman Date: Tue Feb 17 20:41:17 2015 -0800 Merge pull request #171 from hlin09/hlin09 [SPARKR-159] Adds support of pipeRDD(). commit 1f5a6ac052a91784f4343d7ac0d40fca88ce1cc0 Author: hlin09 Date: Tue Feb 17 22:57:37 2015 -0500 fixed comments commit 5292be71de95b4861a8eb31f59752ef949e98d2e Author: hlin09 Date: Mon Feb 16 16:05:11 2015 -0500 Adds support of pipeRDD(). commit 0cda231ef9bcd0866a0c8f20a966bb424c880954 Author: Sun Rui Date: Mon Feb 16 16:51:34 2015 +0800 [SPARKR-153] phase 2: implement aggregateByKey() and foldByKey(). commit 95ee6b4de9704199afc4d6cfdd95010851eb4ecb Merge: 67fbc60 2271030 Author: Shivaram Venkataraman Date: Sun Feb 15 23:45:54 2015 -0800 Merge remote-tracking branch 'amplab-sparkr/master' into sparkr-runner commit 67fbc60af65fd1b11f8d0d6e3a47fb185b7b94e4 Author: Shivaram Venkataraman Date: Sun Feb 15 23:44:59 2015 -0800 Add support for SparkR shell to use spark-submit This ensures that SparkConf options are read in both in batch and interactive modes commit 22710309fcbecf3cdc1ca64370bbe6fd062f46a8 Merge: 52f94c4 7fcb46a Author: Shivaram Venkataraman Date: Sun Feb 15 19:11:18 2015 -0800 Merge pull request #167 from sun-rui/removePartionByInRDD Remove partitionBy() in RDD. commit 7fcb46a83d593ae49dc2a059f841675cedb9114c Author: Sun Rui Date: Mon Feb 16 10:44:20 2015 +0800 Remove partitionBy() in RDD. commit 52f94c4a2c3a14b4fc489d752aa85139d5b273e6 Merge: 5836650 59e2d54 Author: Shivaram Venkataraman Date: Sun Feb 15 10:59:36 2015 -0800 Merge pull request #160 from lythesia/master [SPARKR-137] Move pair RDD functions into a new file commit 59e2d54291a559907ecd62c90a842ea2600f2431 Merge: d968664 5836650 Author: lythesia Date: Sun Feb 15 11:54:23 2015 +0800 merge with upstream commit 5836650ab06d2bf42cc528969112ca9dce5584bb Merge: c91ede2 141723e Author: Zongheng Yang Date: Sat Feb 14 22:45:02 2015 -0500 Merge pull request #163 from sun-rui/SPARKR-153_1 [SPARKR-153] phase 1: implement fold() and aggregate(). commit 141723eeed1cd032931e112a3d11c7f57c9c72c9 Author: Sun Rui Date: Sun Feb 15 10:25:11 2015 +0800 fix comments. commit c91ede20017a88025e0bea502d07ecec32808400 Merge: 7972858 9d335a9 Author: Shivaram Venkataraman Date: Fri Feb 13 16:14:32 2015 -0800 Merge pull request #164 from hlin09/hlin09 Makes git to ignore Eclipse meta files. commit 9d335a9caab36b029c6f802454470fdd225d4d78 Author: hlin09 Date: Fri Feb 13 19:00:19 2015 -0500 Makes git to ignore Eclipse meta files. commit 94066bff5f1b238a6ed5b9906ef05b3a3d76bb12 Author: Sun Rui Date: Fri Feb 13 20:03:30 2015 +0800 [SPARKR-153] phase 1: implement fold() and aggregate(). commit 9c391c7c252a467e7646bed04654b1f60a0abe99 Merge: 5f29551 7972858 Author: hqzizania Date: Thu Feb 12 16:44:25 2015 +0800 Merge remote-tracking branch 'upstream/master' commit 5f29551bf8f1171482b9dabc17ecdf9569fa35bf Author: hqzizania Date: Thu Feb 12 16:26:20 2015 +0800 modified: pkg/R/RDD.R modified: pkg/R/context.R commit d96866486ac32da277bff4a5f234be1c413b70ee Author: lythesia Date: Thu Feb 12 12:21:21 2015 +0800 fix comment commit 79728588a503a5700b3e93b36fb0d818c7445f70 Merge: bd6705b f4573c1 Author: Shivaram Venkataraman Date: Wed Feb 11 09:05:22 2015 -0800 Merge pull request #159 from sun-rui/SPARKR-150_2 [SPARKR-150] phase 2: implement takeOrdered() and top(). commit 769087804897dcafeaf16075ddbcb33888b3eaa3 Author: lythesia Date: Wed Feb 11 13:53:14 2015 +0800 separate out pair RDD functions commit f4573c17ee0a895a99a12b289e86925baf99836f Author: Sun Rui Date: Wed Feb 11 11:29:28 2015 +0800 Use reduce() instead of sortBy().take() to get the ordered elements. commit 63e62ed5c5c94370267cf87eab4c874cbf75eb12 Author: Sun Rui Date: Tue Feb 10 19:09:17 2015 +0800 [SPARKR-150] phase 2: implement takeOrdered() and top(). commit 050390b79bcdb2675523e12743c4a42ee33a7d52 Author: Shivaram Venkataraman Date: Mon Feb 9 21:40:27 2015 -0800 Fix bugs in inferring R file commit 8398f2ec8fa592fa8af0697ba625090711fde349 Author: Shivaram Venkataraman Date: Mon Feb 9 21:15:16 2015 -0800 Add sparkR-submit helper script Also adjust R file path for YARN cluster mode commit bd6705be897fb1dcf6b4a114a44c6677ce1636b4 Merge: 0c6e071 c7964c9 Author: Zongheng Yang Date: Mon Feb 9 19:21:31 2015 -0800 Merge pull request #154 from sun-rui/SPARKR-150 [SPARKR-150] phase 1: implement sortBy() and sortByKey(). commit c7964c99c1fec20bdd6ede79e57bb30aec3af3ba Merge: 7feac38 0c6e071 Author: Sun Rui Date: Tue Feb 10 09:41:00 2015 +0800 Merge with upstream master. commit 7feac3899e1db7d471bda19aa44c068d5cc86cb4 Author: Sun Rui Date: Mon Feb 9 18:40:28 2015 +0800 Use default arguments for sortBy() and sortKeyBy(). commit de2bfb3f05a6a33694b1d740ee1227d8d1dd5418 Author: Sun Rui Date: Mon Feb 9 15:42:14 2015 +0800 Fix minor comments and add more test cases. commit 0c6e07133ca1efd80921f54e7ae57be21068418f Merge: 343b6ab f5038c0 Author: Zongheng Yang Date: Sun Feb 8 22:59:49 2015 -0800 Merge pull request #157 from lythesia/master [SPARKR-161] Support reduceByKeyLocally() commit f5038c062988b1d7fe6b6c6275b9f767dbc94689 Author: lythesia Date: Sun Feb 8 11:49:18 2015 +0800 pull out anonymous functions in groupByKey commit ba6f04443e9685d3b025a9f6511236740100a7fd Author: lythesia Date: Sat Feb 7 15:37:07 2015 +0800 fixes for reduceByKeyLocally commit 343b6ab95459a0b36c4cef1fe5d83734471316d0 Author: Oscar Olmedo Date: Fri Feb 6 18:57:37 2015 -0800 Export sparkR.stop Closes #156 from oscaroboto/master commit 25639cf25182a2f93e0ff7c3a76ca2844da0d29b Author: Shivaram Venkataraman Date: Fri Feb 6 11:55:36 2015 -0800 Replace tabs with spaces commit bb259209ccf0bf685d54d63f048a9c6ef65c8995 Merge: 08ff30b 345f1b8 Author: Shivaram Venkataraman Date: Fri Feb 6 11:53:17 2015 -0800 Merge branch 'dputler-master' commit b082a35e5d9aac2a0ffc033b871a0b7588be291b Author: lythesia Date: Fri Feb 6 16:36:34 2015 +0800 add reduceByKeyLocally commit 7ca651263fcef6c1e8d2352fcc1639a7cf056512 Author: Shivaram Venkataraman Date: Thu Feb 5 23:10:57 2015 -0800 First cut of SparkRRunner commit 345f1b8230943583163e88f3da758f187dfff47a Author: dputler Date: Wed Feb 4 22:17:23 2015 -0800 [SPARKR-195] Implemented project style guidelines for if-else statements commit 804355977ba387a036b9c5355156cf547e20a738 Author: Sun Rui Date: Thu Feb 5 12:12:47 2015 +0800 Add a TODO to use binary search in the range partitioner. commit 91b2fd6deaf1d49cdc6aeec8d1c5fb4d686c0319 Author: Sun Rui Date: Thu Feb 5 11:09:29 2015 +0800 Add more test cases. commit 0c53d6c4952ba6c87b2fc0837a17339062351df6 Author: dputler Date: Wed Feb 4 09:00:49 2015 -0800 Data frames now coerced to lists, and messages issued for a data frame or matrix on how they are parallelized commit d9da4519fa9efa5db769a43cb75d296a94d44a74 Author: Sun Rui Date: Wed Feb 4 21:46:49 2015 +0800 [SPARKR-150] phase 1: implement sortBy() and sortByKey(). commit 08ff30b14f86974ac085bd0e9ab95e536839bfc8 Merge: 554bda0 9767e8e Author: Shivaram Venkataraman Date: Tue Feb 3 22:48:57 2015 -0800 Merge pull request #153 from hqzizania/master [SPARKR-160] Support collectAsMap() commit 9767e8ec07bb45cab90818c050fb9f9ce2b7f565 Author: hqzizania Date: Wed Feb 4 14:21:50 2015 +0800 modified: pkg/man/collect-methods.Rd commit 5d69f0ae76b83e957d5ce0221110ce3a1640ede9 Author: hqzizania Date: Wed Feb 4 14:01:00 2015 +0800 modified: pkg/R/RDD.R commit 491409142ed7dcb7ad475b513b786f2e92305911 Author: hqzizania Date: Wed Feb 4 13:46:15 2015 +0800 modified: pkg/inst/tests/test_rdd.R commit a95823edc2b384288a0fccaa033bfb103ce8a823 Author: hqzizania Date: Wed Feb 4 09:35:43 2015 +0800 modified: pkg/R/RDD.R commit 554bda0656de356d5c88eb54322b2f98dc0d31d6 Merge: c662f29 f34bb88 Author: Zongheng Yang Date: Mon Feb 2 19:29:01 2015 -0800 Merge pull request #147 from shivaram/sparkr-ec2-fixes Bunch of fixes for longer running jobs commit f34bb88bf4ba4371eeb15d0a92658e2d947ef32f Author: Shivaram Venkataraman Date: Mon Feb 2 10:08:43 2015 -0800 Remove profiling information from this PR commit 60da1df9b3175c49322247bcf53999db1f922d91 Author: Shivaram Venkataraman Date: Sun Feb 1 06:38:58 2015 +0000 Initialize timing variables commit 179aa75afb2e5993cea5a3c86d363eed31d5ae8e Author: Shivaram Venkataraman Date: Sun Feb 1 06:28:27 2015 +0000 Bunch of fixes for longer running jobs 1. Increase the timeout for socket connection to wait for long jobs 2. Add some profiling information in worker.R 3. Put temp file writes before stdin writes in RRDD.scala commit 06d99f0f2ce19c86ddd81c6ded69f30761b47228 Author: Shivaram Venkataraman Date: Sat Jan 31 10:35:39 2015 -0800 Fix URI to have right number of slashes commit add97f5354ae83d4b87ff1e373a3c298cf589d55 Author: Shivaram Venkataraman Date: Sat Jan 31 10:18:06 2015 -0800 Use URL encode to create valid URIs for jars commit 73430c643aba95cbd9f8b7ce7546692893699d79 Author: Shivaram Venkataraman Date: Sat Jan 31 00:06:50 2015 -0800 Make SparkR work on paths with spaces on Windows --- README.md | 15 +- pkg/NAMESPACE | 3 + pkg/R/RDD.R | 362 ++++++++++-------- pkg/R/context.R | 2 +- pkg/R/pairRDD.R | 300 +++++++++------ pkg/R/sparkR.R | 73 +++- pkg/R/sparkRClient.R | 29 ++ pkg/inst/sparkR-submit | 74 ++++ pkg/inst/tests/test_rdd.R | 17 + pkg/inst/tests/test_shuffle.R | 71 ++++ pkg/man/aggregateByKey.Rd | 50 +++ pkg/man/foldByKey.Rd | 38 ++ pkg/man/pipeRDD.Rd | 34 ++ .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 13 +- .../cs/amplab/sparkr/SparkRRunner.scala | 105 +++++ sparkR | 2 +- 16 files changed, 887 insertions(+), 301 deletions(-) create mode 100755 pkg/inst/sparkR-submit create mode 100644 pkg/man/aggregateByKey.Rd create mode 100644 pkg/man/foldByKey.Rd create mode 100644 pkg/man/pipeRDD.Rd create mode 100644 pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala diff --git a/README.md b/README.md index 795b0a1477305..6d6b097222ade 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,6 @@ SparkR requires Scala 2.10 and Spark version >= 0.9.0. Current build by default Apache Spark 1.1.0. You can also build SparkR against a different Spark version (>= 0.9.0) by modifying `pkg/src/build.sbt`. -SparkR also requires the R package `rJava` to be installed. To install `rJava`, -you can run the following command in R: - - install.packages("rJava") - - ### Package installation To develop SparkR, you can build the scala package and the R package using @@ -31,9 +25,9 @@ If you wish to try out the package directly from github, you can use [`install_g SparkR by default uses Apache Spark 1.1.0. You can switch to a different Spark version by setting the environment variable `SPARK_VERSION`. For example, to -use Apache Spark 1.2.0, you can run +use Apache Spark 1.3.0, you can run - SPARK_VERSION=1.2.0 ./install-dev.sh + SPARK_VERSION=1.3.0 ./install-dev.sh SparkR by default links to Hadoop 1.0.4. To use SparkR with other Hadoop versions, you will need to rebuild SparkR with the same version that [Spark is @@ -97,8 +91,9 @@ To run one of them, use `./sparkR `. For example: ./sparkR examples/pi.R local[2] -You can also run the unit-tests for SparkR by running +You can also run the unit-tests for SparkR by running (you need to install the [testthat](http://cran.r-project.org/web/packages/testthat/index.html) package first): + R -e 'install.packages("testthat", repos="http://cran.us.r-project.org")' ./run-tests.sh ## Running on EC2 @@ -110,7 +105,7 @@ Instructions for running SparkR on EC2 can be found in the Currently, SparkR supports running on YARN with the `yarn-client` mode. These steps show how to build SparkR with YARN support and run SparkR programs on a YARN cluster: ``` -# assumes Java, R, rJava, yarn, spark etc. are installed on the whole cluster. +# assumes Java, R, yarn, spark etc. are installed on the whole cluster. cd SparkR-pkg/ USE_YARN=1 SPARK_YARN_VERSION=2.4.0 SPARK_HADOOP_VERSION=2.4.0 ./install-dev.sh ``` diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index fd7eaae7278ca..3d9995e12b744 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -2,6 +2,7 @@ exportClasses("RDD") exportClasses("Broadcast") exportMethods( + "aggregateByKey", "aggregateRDD", "cache", "checkpoint", @@ -19,6 +20,7 @@ exportMethods( "flatMap", "flatMapValues", "fold", + "foldByKey", "foreach", "foreachPartition", "fullOuterJoin", @@ -41,6 +43,7 @@ exportMethods( "numPartitions", "partitionBy", "persist", + "pipeRDD", "reduce", "reduceByKey", "reduceByKeyLocally", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e6b7f31a14106..1d1a645f2094d 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -81,7 +81,6 @@ setMethod("initialize", "PipelinedRDD", function(.Object, prev, func, jrdd_val) .Object@prev_jrdd <- prev@prev_jrdd # maintain the pipeline # Get the serialization mode of the parent RDD .Object@env$prev_serializedMode <- prev@env$prev_serializedMode - } .Object @@ -134,12 +133,10 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), computeFunc <- function(split, part) { rdd@func(split, part) } - serializedFuncArr <- serialize("computeFunc", connection = NULL, - ascii = TRUE) + serializedFuncArr <- serialize("computeFunc", connection = NULL) packageNamesArr <- serialize(.sparkREnv[[".packages"]], - connection = NULL, - ascii = TRUE) + connection = NULL) broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) @@ -195,7 +192,7 @@ setValidity("RDD", #' #' Persist this RDD with the default storage level (MEMORY_ONLY). #' -#' @param rdd The RDD to cache +#' @param x The RDD to cache #' @rdname cache-methods #' @export #' @examples @@ -204,16 +201,16 @@ setValidity("RDD", #' rdd <- parallelize(sc, 1:10, 2L) #' cache(rdd) #'} -setGeneric("cache", function(rdd) { standardGeneric("cache") }) +setGeneric("cache", function(x) { standardGeneric("cache") }) #' @rdname cache-methods #' @aliases cache,RDD-method setMethod("cache", - signature(rdd = "RDD"), - function(rdd) { - callJMethod(getJRDD(rdd), "cache") - rdd@env$isCached <- TRUE - rdd + signature(x = "RDD"), + function(x) { + callJMethod(getJRDD(x), "cache") + x@env$isCached <- TRUE + x }) #' Persist an RDD @@ -222,7 +219,7 @@ setMethod("cache", #' supported storage levels, refer to #' http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. #' -#' @param rdd The RDD to persist +#' @param x The RDD to persist #' @param newLevel The new storage level to be assigned #' @rdname persist #' @export @@ -232,13 +229,13 @@ setMethod("cache", #' rdd <- parallelize(sc, 1:10, 2L) #' persist(rdd, "MEMORY_AND_DISK") #'} -setGeneric("persist", function(rdd, newLevel) { standardGeneric("persist") }) +setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) #' @rdname persist #' @aliases persist,RDD-method setMethod("persist", - signature(rdd = "RDD", newLevel = "character"), - function(rdd, newLevel = c("DISK_ONLY", + signature(x = "RDD", newLevel = "character"), + function(x, newLevel = c("DISK_ONLY", "DISK_ONLY_2", "MEMORY_AND_DISK", "MEMORY_AND_DISK_2", @@ -263,9 +260,9 @@ setMethod("persist", "MEMORY_ONLY_SER_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_SER_2"), "OFF_HEAP" = callJStatic("org.apache.spark.storage.StorageLevel", "OFF_HEAP")) - callJMethod(getJRDD(rdd), "persist", storageLevel) - rdd@env$isCached <- TRUE - rdd + callJMethod(getJRDD(x), "persist", storageLevel) + x@env$isCached <- TRUE + x }) #' Unpersist an RDD @@ -283,16 +280,16 @@ setMethod("persist", #' cache(rdd) # rdd@@env$isCached == TRUE #' unpersist(rdd) # rdd@@env$isCached == FALSE #'} -setGeneric("unpersist", function(rdd) { standardGeneric("unpersist") }) +setGeneric("unpersist", function(x) { standardGeneric("unpersist") }) #' @rdname unpersist-methods #' @aliases unpersist,RDD-method setMethod("unpersist", - signature(rdd = "RDD"), - function(rdd) { - callJMethod(getJRDD(rdd), "unpersist") - rdd@env$isCached <- FALSE - rdd + signature(x = "RDD"), + function(x) { + callJMethod(getJRDD(x), "unpersist") + x@env$isCached <- FALSE + x }) @@ -314,22 +311,22 @@ setMethod("unpersist", #' rdd <- parallelize(sc, 1:10, 2L) #' checkpoint(rdd) #'} -setGeneric("checkpoint", function(rdd) { standardGeneric("checkpoint") }) +setGeneric("checkpoint", function(x) { standardGeneric("checkpoint") }) #' @rdname checkpoint-methods #' @aliases checkpoint,RDD-method setMethod("checkpoint", - signature(rdd = "RDD"), - function(rdd) { - jrdd <- getJRDD(rdd) + signature(x = "RDD"), + function(x) { + jrdd <- getJRDD(x) callJMethod(jrdd, "checkpoint") - rdd@env$isCheckpointed <- TRUE - rdd + x@env$isCheckpointed <- TRUE + x }) #' Gets the number of partitions of an RDD #' -#' @param rdd A RDD. +#' @param x A RDD. #' @return the number of partitions of rdd as an integer. #' @rdname numPartitions #' @export @@ -339,14 +336,14 @@ setMethod("checkpoint", #' rdd <- parallelize(sc, 1:10, 2L) #' numPartitions(rdd) # 2L #'} -setGeneric("numPartitions", function(rdd) { standardGeneric("numPartitions") }) +setGeneric("numPartitions", function(x) { standardGeneric("numPartitions") }) #' @rdname numPartitions #' @aliases numPartitions,RDD-method setMethod("numPartitions", - signature(rdd = "RDD"), - function(rdd) { - jrdd <- getJRDD(rdd) + signature(x = "RDD"), + function(x) { + jrdd <- getJRDD(x) partitions <- callJMethod(jrdd, "splits") callJMethod(partitions, "size") }) @@ -356,7 +353,7 @@ setMethod("numPartitions", #' @description #' \code{collect} returns a list that contains all of the elements in this RDD. #' -#' @param rdd The RDD to collect +#' @param x The RDD to collect #' @param ... Other optional arguments to collect #' @param flatten FALSE if the list should not flattened #' @return a list containing elements in the RDD @@ -369,17 +366,17 @@ setMethod("numPartitions", #' collect(rdd) # list from 1 to 10 #' collectPartition(rdd, 0L) # list from 1 to 5 #'} -setGeneric("collect", function(rdd, ...) { standardGeneric("collect") }) +setGeneric("collect", function(x, ...) { standardGeneric("collect") }) #' @rdname collect-methods #' @aliases collect,RDD-method setMethod("collect", - signature(rdd = "RDD"), - function(rdd, flatten = TRUE) { + signature(x = "RDD"), + function(x, flatten = TRUE) { # Assumes a pairwise RDD is backed by a JavaPairRDD. - collected <- callJMethod(getJRDD(rdd), "collect") + collected <- callJMethod(getJRDD(x), "collect") convertJListToRList(collected, flatten, - serializedMode = getSerializedMode(rdd)) + serializedMode = getSerializedMode(x)) }) @@ -390,22 +387,22 @@ setMethod("collect", #' in the specified partition of the RDD. #' @param partitionId the partition to collect (starts from 0) setGeneric("collectPartition", - function(rdd, partitionId) { + function(x, partitionId) { standardGeneric("collectPartition") }) #' @rdname collect-methods #' @aliases collectPartition,integer,RDD-method setMethod("collectPartition", - signature(rdd = "RDD", partitionId = "integer"), - function(rdd, partitionId) { - jPartitionsList <- callJMethod(getJRDD(rdd), + signature(x = "RDD", partitionId = "integer"), + function(x, partitionId) { + jPartitionsList <- callJMethod(getJRDD(x), "collectPartitions", as.list(as.integer(partitionId))) jList <- jPartitionsList[[1]] convertJListToRList(jList, flatten = TRUE, - serializedMode = getSerializedMode(rdd)) + serializedMode = getSerializedMode(x)) }) #' @rdname collect-methods @@ -419,16 +416,16 @@ setMethod("collectPartition", #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) #' collectAsMap(rdd) # list(`1` = 2, `3` = 4) #'} -setGeneric("collectAsMap", function(rdd) { standardGeneric("collectAsMap") }) +setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) #' @rdname collect-methods #' @aliases collectAsMap,RDD-method setMethod("collectAsMap", - signature(rdd = "RDD"), - function(rdd) { - pairList <- collect(rdd) + signature(x = "RDD"), + function(x) { + pairList <- collect(x) map <- new.env() - lapply(pairList, function(x) { assign(as.character(x[[1]]), x[[2]], envir = map) }) + lapply(pairList, function(i) { assign(as.character(i[[1]]), i[[2]], envir = map) }) as.list(map) }) @@ -474,7 +471,7 @@ setMethod("length", #' #' Same as countByValue in Spark. #' -#' @param rdd The RDD to count +#' @param x The RDD to count #' @return list of (value, count) pairs, where count is number of each unique #' value in rdd. #' @rdname countByValue @@ -485,15 +482,15 @@ setMethod("length", #' rdd <- parallelize(sc, c(1,2,3,2,1)) #' countByValue(rdd) # (1,2L), (2,2L), (3,1L) #'} -setGeneric("countByValue", function(rdd) { standardGeneric("countByValue") }) +setGeneric("countByValue", function(x) { standardGeneric("countByValue") }) #' @rdname countByValue #' @aliases countByValue,RDD-method setMethod("countByValue", - signature(rdd = "RDD"), - function(rdd) { - ones <- lapply(rdd, function(item) { list(item, 1L) }) - collect(reduceByKey(ones, `+`, numPartitions(rdd))) + signature(x = "RDD"), + function(x) { + ones <- lapply(x, function(item) { list(item, 1L) }) + collect(reduceByKey(ones, `+`, numPartitions(x))) }) #' Apply a function to all elements @@ -710,26 +707,26 @@ setMethod("Filter", #' rdd <- parallelize(sc, 1:10) #' reduce(rdd, "+") # 55 #'} -setGeneric("reduce", function(rdd, func) { standardGeneric("reduce") }) +setGeneric("reduce", function(x, func) { standardGeneric("reduce") }) #' @rdname reduce #' @aliases reduce,RDD,ANY-method setMethod("reduce", - signature(rdd = "RDD", func = "ANY"), - function(rdd, func) { + signature(x = "RDD", func = "ANY"), + function(x, func) { reducePartition <- function(part) { Reduce(func, part) } - partitionList <- collect(lapplyPartition(rdd, reducePartition), + partitionList <- collect(lapplyPartition(x, reducePartition), flatten = FALSE) Reduce(func, partitionList) }) #' Get the maximum element of an RDD. #' -#' @param rdd The RDD to get the maximum element from +#' @param x The RDD to get the maximum element from #' @export #' @rdname maximum #' @examples @@ -738,19 +735,19 @@ setMethod("reduce", #' rdd <- parallelize(sc, 1:10) #' maximum(rdd) # 10 #'} -setGeneric("maximum", function(rdd) { standardGeneric("maximum") }) +setGeneric("maximum", function(x) { standardGeneric("maximum") }) #' @rdname maximum #' @aliases maximum,RDD setMethod("maximum", - signature(rdd = "RDD"), - function(rdd) { - reduce(rdd, max) + signature(x = "RDD"), + function(x) { + reduce(x, max) }) #' Get the minimum element of an RDD. #' -#' @param rdd The RDD to get the minimum element from +#' @param x The RDD to get the minimum element from #' @export #' @rdname minimum #' @examples @@ -759,19 +756,19 @@ setMethod("maximum", #' rdd <- parallelize(sc, 1:10) #' minimum(rdd) # 1 #'} -setGeneric("minimum", function(rdd) { standardGeneric("minimum") }) +setGeneric("minimum", function(x) { standardGeneric("minimum") }) #' @rdname minimum #' @aliases minimum,RDD setMethod("minimum", - signature(rdd = "RDD"), - function(rdd) { - reduce(rdd, min) + signature(x = "RDD"), + function(x) { + reduce(x, min) }) #' Applies a function to all elements in an RDD, and force evaluation. #' -#' @param rdd The RDD to apply the function +#' @param x The RDD to apply the function #' @param func The function to be applied. #' @return invisible NULL. #' @export @@ -782,18 +779,18 @@ setMethod("minimum", #' rdd <- parallelize(sc, 1:10) #' foreach(rdd, function(x) { save(x, file=...) }) #'} -setGeneric("foreach", function(rdd, func) { standardGeneric("foreach") }) +setGeneric("foreach", function(x, func) { standardGeneric("foreach") }) #' @rdname foreach #' @aliases foreach,RDD,function-method setMethod("foreach", - signature(rdd = "RDD", func = "function"), - function(rdd, func) { + signature(x = "RDD", func = "function"), + function(x, func) { partition.func <- function(x) { lapply(x, func) NULL } - invisible(collect(mapPartitions(rdd, partition.func))) + invisible(collect(mapPartitions(x, partition.func))) }) #' Applies a function to each partition in an RDD, and force evaluation. @@ -807,14 +804,14 @@ setMethod("foreach", #' foreachPartition(rdd, function(part) { save(part, file=...); NULL }) #'} setGeneric("foreachPartition", - function(rdd, func) { standardGeneric("foreachPartition") }) + function(x, func) { standardGeneric("foreachPartition") }) #' @rdname foreach #' @aliases foreachPartition,RDD,function-method setMethod("foreachPartition", - signature(rdd = "RDD", func = "function"), - function(rdd, func) { - invisible(collect(mapPartitions(rdd, func))) + signature(x = "RDD", func = "function"), + function(x, func) { + invisible(collect(mapPartitions(x, func))) }) #' Take elements from an RDD. @@ -822,7 +819,7 @@ setMethod("foreachPartition", #' This function takes the first NUM elements in the RDD and #' returns them in a list. #' -#' @param rdd The RDD to take elements from +#' @param x The RDD to take elements from #' @param num Number of elements to take #' @rdname take #' @export @@ -832,17 +829,17 @@ setMethod("foreachPartition", #' rdd <- parallelize(sc, 1:10) #' take(rdd, 2L) # list(1, 2) #'} -setGeneric("take", function(rdd, num) { standardGeneric("take") }) +setGeneric("take", function(x, num) { standardGeneric("take") }) #' @rdname take #' @aliases take,RDD,numeric-method setMethod("take", - signature(rdd = "RDD", num = "numeric"), - function(rdd, num) { + signature(x = "RDD", num = "numeric"), + function(x, num) { resList <- list() index <- -1 - jrdd <- getJRDD(rdd) - numPartitions <- numPartitions(rdd) + jrdd <- getJRDD(x) + numPartitions <- numPartitions(x) # TODO(shivaram): Collect more than one partition based on size # estimates similar to the scala version of `take`. @@ -861,7 +858,7 @@ setMethod("take", elems <- convertJListToRList(partition, flatten = TRUE, logicalUpperBound = size, - serializedMode = getSerializedMode(rdd)) + serializedMode = getSerializedMode(x)) # TODO: Check if this append is O(n^2)? resList <- append(resList, elems) } @@ -873,7 +870,7 @@ setMethod("take", #' This function returns a new RDD containing the distinct elements in the #' given RDD. The same as `distinct()' in Spark. #' -#' @param rdd The RDD to remove duplicates from. +#' @param x The RDD to remove duplicates from. #' @param numPartitions Number of partitions to create. #' @rdname distinct #' @export @@ -884,18 +881,18 @@ setMethod("take", #' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) #'} setGeneric("distinct", - function(rdd, numPartitions) { standardGeneric("distinct") }) + function(x, numPartitions) { standardGeneric("distinct") }) setClassUnion("missingOrInteger", c("missing", "integer")) #' @rdname distinct #' @aliases distinct,RDD,missingOrInteger-method setMethod("distinct", - signature(rdd = "RDD", numPartitions = "missingOrInteger"), - function(rdd, numPartitions) { + signature(x = "RDD", numPartitions = "missingOrInteger"), + function(x, numPartitions) { if (missing(numPartitions)) { - numPartitions <- SparkR::numPartitions(rdd) + numPartitions <- SparkR::numPartitions(x) } - identical.mapped <- lapply(rdd, function(x) { list(x, NULL) }) + identical.mapped <- lapply(x, function(x) { list(x, NULL) }) reduced <- reduceByKey(identical.mapped, function(x, y) { x }, numPartitions) @@ -908,7 +905,7 @@ setMethod("distinct", #' The same as `sample()' in Spark. (We rename it due to signature #' inconsistencies with the `sample()' function in R's base package.) #' -#' @param rdd The RDD to sample elements from +#' @param x The RDD to sample elements from #' @param withReplacement Sampling with replacement or not #' @param fraction The (rough) sample target fraction #' @param seed Randomness seed value @@ -922,16 +919,16 @@ setMethod("distinct", #' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates #'} setGeneric("sampleRDD", - function(rdd, withReplacement, fraction, seed) { + function(x, withReplacement, fraction, seed) { standardGeneric("sampleRDD") }) #' @rdname sampleRDD #' @aliases sampleRDD,RDD setMethod("sampleRDD", - signature(rdd = "RDD", withReplacement = "logical", + signature(x = "RDD", withReplacement = "logical", fraction = "numeric", seed = "integer"), - function(rdd, withReplacement, fraction, seed) { + function(x, withReplacement, fraction, seed) { # The sampler: takes a partition and returns its sampled version. samplingFunc <- function(split, part) { @@ -968,13 +965,13 @@ setMethod("sampleRDD", list() } - lapplyPartitionsWithIndex(rdd, samplingFunc) + lapplyPartitionsWithIndex(x, samplingFunc) }) #' Return a list of the elements that are a sampled subset of the given RDD. #' -#' @param rdd The RDD to sample elements from +#' @param x The RDD to sample elements from #' @param withReplacement Sampling with replacement or not #' @param num Number of elements to return #' @param seed Randomness seed value @@ -990,19 +987,19 @@ setMethod("sampleRDD", #' takeSample(rdd, FALSE, 5L, 16181618L) #'} setGeneric("takeSample", - function(rdd, withReplacement, num, seed) { + function(x, withReplacement, num, seed) { standardGeneric("takeSample") }) #' @rdname takeSample #' @aliases takeSample,RDD -setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", +setMethod("takeSample", signature(x = "RDD", withReplacement = "logical", num = "integer", seed = "integer"), - function(rdd, withReplacement, num, seed) { + function(x, withReplacement, num, seed) { # This function is ported from RDD.scala. fraction <- 0.0 total <- 0 multiplier <- 3.0 - initialCount <- count(rdd) + initialCount <- count(x) maxSelected <- 0 MAXINT <- .Machine$integer.max @@ -1024,7 +1021,7 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", } set.seed(seed) - samples <- collect(sampleRDD(rdd, withReplacement, fraction, + samples <- collect(sampleRDD(x, withReplacement, fraction, as.integer(ceiling(runif(1, -MAXINT, MAXINT))))) @@ -1032,7 +1029,7 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", # take samples; this shouldn't happen often because we use a big # multiplier for thei initial size while (length(samples) < total) - samples <- collect(sampleRDD(rdd, withReplacement, fraction, + samples <- collect(sampleRDD(x, withReplacement, fraction, as.integer(ceiling(runif(1, -MAXINT, MAXINT))))) @@ -1043,7 +1040,7 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", #' Creates tuples of the elements in this RDD by applying a function. #' -#' @param rdd The RDD. +#' @param x The RDD. #' @param func The function to be applied. #' @rdname keyBy #' @export @@ -1053,22 +1050,22 @@ setMethod("takeSample", signature(rdd = "RDD", withReplacement = "logical", #' rdd <- parallelize(sc, list(1, 2, 3)) #' collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) #'} -setGeneric("keyBy", function(rdd, func) { standardGeneric("keyBy") }) +setGeneric("keyBy", function(x, func) { standardGeneric("keyBy") }) #' @rdname keyBy #' @aliases keyBy,RDD setMethod("keyBy", - signature(rdd = "RDD", func = "function"), - function(rdd, func) { + signature(x = "RDD", func = "function"), + function(x, func) { apply.func <- function(x) { list(func(x), x) } - lapply(rdd, apply.func) + lapply(x, apply.func) }) #' Save this RDD as a SequenceFile of serialized objects. #' -#' @param rdd The RDD to save +#' @param x The RDD to save #' @param path The directory where the file is saved #' @rdname saveAsObjectFile #' @seealso objectFile @@ -1079,25 +1076,25 @@ setMethod("keyBy", #' rdd <- parallelize(sc, 1:3) #' saveAsObjectFile(rdd, "/tmp/sparkR-tmp") #'} -setGeneric("saveAsObjectFile", function(rdd, path) { standardGeneric("saveAsObjectFile") }) +setGeneric("saveAsObjectFile", function(x, path) { standardGeneric("saveAsObjectFile") }) #' @rdname saveAsObjectFile #' @aliases saveAsObjectFile,RDD setMethod("saveAsObjectFile", - signature(rdd = "RDD", path = "character"), - function(rdd, path) { + signature(x = "RDD", path = "character"), + function(x, path) { # If serializedMode == "string" we need to serialize the data before saving it since # objectFile() assumes serializedMode == "byte". - if (getSerializedMode(rdd) != "byte") { - rdd <- serializeToBytes(rdd) + if (getSerializedMode(x) != "byte") { + x <- serializeToBytes(x) } # Return nothing - invisible(callJMethod(getJRDD(rdd), "saveAsObjectFile", path)) + invisible(callJMethod(getJRDD(x), "saveAsObjectFile", path)) }) #' Save this RDD as a text file, using string representations of elements. #' -#' @param rdd The RDD to save +#' @param x The RDD to save #' @param path The directory where the splits of the text file are saved #' @rdname saveAsTextFile #' @export @@ -1107,17 +1104,17 @@ setMethod("saveAsObjectFile", #' rdd <- parallelize(sc, 1:3) #' saveAsTextFile(rdd, "/tmp/sparkR-tmp") #'} -setGeneric("saveAsTextFile", function(rdd, path) { standardGeneric("saveAsTextFile") }) +setGeneric("saveAsTextFile", function(x, path) { standardGeneric("saveAsTextFile") }) #' @rdname saveAsTextFile #' @aliases saveAsTextFile,RDD setMethod("saveAsTextFile", - signature(rdd = "RDD", path = "character"), - function(rdd, path) { - func <- function(x) { - toString(x) + signature(x = "RDD", path = "character"), + function(x, path) { + func <- function(str) { + toString(str) } - stringRdd <- lapply(rdd, func) + stringRdd <- lapply(x, func) # Return nothing invisible( callJMethod(getJRDD(stringRdd, serializedMode = "string"), "saveAsTextFile", path)) @@ -1125,7 +1122,7 @@ setMethod("saveAsTextFile", #' Sort an RDD by the given key function. #' -#' @param rdd An RDD to be sorted. +#' @param x An RDD to be sorted. #' @param func A function used to compute the sort key for each element. #' @param ascending A flag to indicate whether the sorting is ascending or descending. #' @param numPartitions Number of partitions to create. @@ -1138,7 +1135,7 @@ setMethod("saveAsTextFile", #' rdd <- parallelize(sc, list(3, 2, 1)) #' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) #'} -setGeneric("sortBy", function(rdd, +setGeneric("sortBy", function(x, func, ascending = TRUE, numPartitions = 1L) { @@ -1148,20 +1145,20 @@ setGeneric("sortBy", function(rdd, #' @rdname sortBy #' @aliases sortBy,RDD,RDD-method setMethod("sortBy", - signature(rdd = "RDD", func = "function"), - function(rdd, func, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { - values(sortByKey(keyBy(rdd, func), ascending, numPartitions)) + signature(x = "RDD", func = "function"), + function(x, func, ascending = TRUE, numPartitions = SparkR::numPartitions(x)) { + values(sortByKey(keyBy(x, func), ascending, numPartitions)) }) # Helper function to get first N elements from an RDD in the specified order. # Param: -# rdd An RDD. +# x An RDD. # num Number of elements to return. # ascending A flag to indicate whether the sorting is ascending or descending. # Return: # A list of the first N elements from the RDD in the specified order. # -takeOrderedElem <- function(rdd, num, ascending = TRUE) { +takeOrderedElem <- function(x, num, ascending = TRUE) { if (num <= 0L) { return(list()) } @@ -1183,13 +1180,13 @@ takeOrderedElem <- function(rdd, num, ascending = TRUE) { newElems[ord[1:num]] } - newRdd <- mapPartitions(rdd, partitionFunc) + newRdd <- mapPartitions(x, partitionFunc) reduce(newRdd, reduceFunc) } #' Returns the first N elements from an RDD in ascending order. #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param num Number of elements to return. #' @return The first N elements from the RDD in ascending order. #' @rdname takeOrdered @@ -1200,19 +1197,19 @@ takeOrderedElem <- function(rdd, num, ascending = TRUE) { #' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) #' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) #'} -setGeneric("takeOrdered", function(rdd, num) { standardGeneric("takeOrdered") }) +setGeneric("takeOrdered", function(x, num) { standardGeneric("takeOrdered") }) #' @rdname takeOrdered #' @aliases takeOrdered,RDD,RDD-method setMethod("takeOrdered", - signature(rdd = "RDD", num = "integer"), - function(rdd, num) { - takeOrderedElem(rdd, num) + signature(x = "RDD", num = "integer"), + function(x, num) { + takeOrderedElem(x, num) }) #' Returns the top N elements from an RDD. #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param num Number of elements to return. #' @return The top N elements from the RDD. #' @rdname top @@ -1223,14 +1220,14 @@ setMethod("takeOrdered", #' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) #' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) #'} -setGeneric("top", function(rdd, num) { standardGeneric("top") }) +setGeneric("top", function(x, num) { standardGeneric("top") }) #' @rdname top #' @aliases top,RDD,RDD-method setMethod("top", - signature(rdd = "RDD", num = "integer"), - function(rdd, num) { - takeOrderedElem(rdd, num, FALSE) + signature(x = "RDD", num = "integer"), + function(x, num) { + takeOrderedElem(x, num, FALSE) }) #' Fold an RDD using a given associative function and a neutral "zero value". @@ -1238,7 +1235,7 @@ setMethod("top", #' Aggregate the elements of each partition, and then the results for all the #' partitions, using a given associative function and a neutral "zero value". #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param zeroValue A neutral "zero value". #' @param op An associative function for the folding operation. #' @return The folding result. @@ -1251,14 +1248,14 @@ setMethod("top", #' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) #' fold(rdd, 0, "+") # 15 #'} -setGeneric("fold", function(rdd, zeroValue, op) { standardGeneric("fold") }) +setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) #' @rdname fold #' @aliases fold,RDD,RDD-method setMethod("fold", - signature(rdd = "RDD", zeroValue = "ANY", op = "ANY"), - function(rdd, zeroValue, op) { - aggregateRDD(rdd, zeroValue, op, op) + signature(x = "RDD", zeroValue = "ANY", op = "ANY"), + function(x, zeroValue, op) { + aggregateRDD(x, zeroValue, op, op) }) #' Aggregate an RDD using the given combine functions and a neutral "zero value". @@ -1266,7 +1263,7 @@ setMethod("fold", #' Aggregate the elements of each partition, and then the results for all the #' partitions, using given combine functions and a neutral "zero value". #' -#' @param rdd An RDD. +#' @param x An RDD. #' @param zeroValue A neutral "zero value". #' @param seqOp A function to aggregate the RDD elements. It may return a different #' result type from the type of the RDD elements. @@ -1284,26 +1281,63 @@ setMethod("fold", #' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } #' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) #'} -setGeneric("aggregateRDD", function(rdd, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) +setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) #' @rdname aggregateRDD #' @aliases aggregateRDD,RDD,RDD-method setMethod("aggregateRDD", - signature(rdd = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), - function(rdd, zeroValue, seqOp, combOp) { + signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), + function(x, zeroValue, seqOp, combOp) { partitionFunc <- function(part) { Reduce(seqOp, part, zeroValue) } - partitionList <- collect(lapplyPartition(rdd, partitionFunc), + partitionList <- collect(lapplyPartition(x, partitionFunc), flatten = FALSE) Reduce(combOp, partitionList, zeroValue) }) +#' Pipes elements to a forked external process. +#' +#' The same as 'pipe()' in Spark. +#' +#' @param x The RDD whose elements are piped to the forked external process. +#' @param command The command to fork an external process. +#' @param env A named list to set environment variables of the external process. +#' @return A new RDD created by piping all elements to a forked external process. +#' @rdname pipeRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' collect(pipeRDD(rdd, "more") +#' Output: c("1", "2", ..., "10") +#'} +setGeneric("pipeRDD", function(x, command, env = list()) { + standardGeneric("pipeRDD") +}) + +#' @rdname pipeRDD +#' @aliases pipeRDD,RDD,character-method +setMethod("pipeRDD", + signature(x = "RDD", command = "character"), + function(x, command, env = list()) { + func <- function(part) { + trim.trailing.func <- function(x) { + sub("[\r\n]*$", "", toString(x)) + } + input <- unlist(lapply(part, trim.trailing.func)) + res <- system2(command, stdout = TRUE, input = input, env = env) + lapply(res, trim.trailing.func) + } + lapplyPartition(x, func) + }) + # TODO: Consider caching the name in the RDD's environment #' Return an RDD's name. #' -#' @param rdd The RDD whose name is returned. +#' @param x The RDD whose name is returned. #' @rdname name #' @export #' @examples @@ -1312,19 +1346,19 @@ setMethod("aggregateRDD", #' rdd <- parallelize(sc, list(1,2,3)) #' name(rdd) # NULL (if not set before) #'} -setGeneric("name", function(rdd) { standardGeneric("name") }) +setGeneric("name", function(x) { standardGeneric("name") }) #' @rdname name #' @aliases name,RDD setMethod("name", - signature(rdd = "RDD"), - function(rdd) { - callJMethod(getJRDD(rdd), "name") + signature(x = "RDD"), + function(x) { + callJMethod(getJRDD(x), "name") }) #' Set an RDD's name. #' -#' @param rdd The RDD whose name is to be set. +#' @param x The RDD whose name is to be set. #' @param name The RDD name to be set. #' @return a new RDD renamed. #' @rdname setName @@ -1336,15 +1370,15 @@ setMethod("name", #' setName(rdd, "myRDD") #' name(rdd) # "myRDD" #'} -setGeneric("setName", function(rdd, name) { standardGeneric("setName") }) +setGeneric("setName", function(x, name) { standardGeneric("setName") }) #' @rdname setName #' @aliases setName,RDD setMethod("setName", - signature(rdd = "RDD", name = "character"), - function(rdd, name) { - callJMethod(getJRDD(rdd), "setName", name) - rdd + signature(x = "RDD", name = "character"), + function(x, name) { + callJMethod(getJRDD(x), "setName", name) + x }) ############ Binary Functions ############# diff --git a/pkg/R/context.R b/pkg/R/context.R index 90f338cea47f7..90a48c0188101 100644 --- a/pkg/R/context.R +++ b/pkg/R/context.R @@ -180,7 +180,7 @@ includePackage <- function(sc, pkg) { #'} broadcast <- function(sc, object) { objName <- as.character(substitute(object)) - serializedObj <- serialize(object, connection = NULL, ascii = TRUE) + serializedObj <- serialize(object, connection = NULL) jBroadcast <- callJMethod(sc, "broadcast", serializedObj) id <- as.character(callJMethod(jBroadcast, "id")) diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index b65d4070108c8..2b3c2a0bc8052 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -7,7 +7,7 @@ #' @description #' \code{lookup} returns a list of values in this RDD for key key. #' -#' @param rdd The RDD to collect +#' @param x The RDD to collect #' @param key The key to look up for #' @return a list of values in this RDD for key key #' @rdname lookup @@ -19,18 +19,18 @@ #' rdd <- parallelize(sc, pairs) #' lookup(rdd, 1) # list(1, 3) #'} -setGeneric("lookup", function(rdd, key) { standardGeneric("lookup") }) +setGeneric("lookup", function(x, key) { standardGeneric("lookup") }) #' @rdname lookup #' @aliases lookup,RDD-method setMethod("lookup", - signature(rdd = "RDD", key = "ANY"), - function(rdd, key) { + signature(x = "RDD", key = "ANY"), + function(x, key) { partitionFunc <- function(part) { - filtered <- part[unlist(lapply(part, function(x) { identical(key, x[[1]]) }))] - lapply(filtered, function(x) { x[[2]] }) + filtered <- part[unlist(lapply(part, function(i) { identical(key, i[[1]]) }))] + lapply(filtered, function(i) { i[[2]] }) } - valsRDD <- lapplyPartition(rdd, partitionFunc) + valsRDD <- lapplyPartition(x, partitionFunc) collect(valsRDD) }) @@ -39,7 +39,7 @@ setMethod("lookup", #' #' Same as countByKey in Spark. #' -#' @param rdd The RDD to count keys. +#' @param x The RDD to count keys. #' @return list of (key, count) pairs, where count is number of each key in rdd. #' @rdname countByKey #' @export @@ -49,20 +49,20 @@ setMethod("lookup", #' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) #' countByKey(rdd) # ("a", 2L), ("b", 1L) #'} -setGeneric("countByKey", function(rdd) { standardGeneric("countByKey") }) +setGeneric("countByKey", function(x) { standardGeneric("countByKey") }) #' @rdname countByKey #' @aliases countByKey,RDD-method setMethod("countByKey", - signature(rdd = "RDD"), - function(rdd) { - keys <- lapply(rdd, function(item) { item[[1]] }) + signature(x = "RDD"), + function(x) { + keys <- lapply(x, function(item) { item[[1]] }) countByValue(keys) }) #' Return an RDD with the keys of each tuple. #' -#' @param rdd The RDD from which the keys of each tuple is returned. +#' @param x The RDD from which the keys of each tuple is returned. #' @rdname keys #' @export #' @examples @@ -71,22 +71,22 @@ setMethod("countByKey", #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) #' collect(keys(rdd)) # list(1, 3) #'} -setGeneric("keys", function(rdd) { standardGeneric("keys") }) +setGeneric("keys", function(x) { standardGeneric("keys") }) #' @rdname keys #' @aliases keys,RDD setMethod("keys", - signature(rdd = "RDD"), - function(rdd) { - func <- function(x) { - x[[1]] + signature(x = "RDD"), + function(x) { + func <- function(k) { + k[[1]] } - lapply(rdd, func) + lapply(x, func) }) #' Return an RDD with the values of each tuple. #' -#' @param rdd The RDD from which the values of each tuple is returned. +#' @param x The RDD from which the values of each tuple is returned. #' @rdname values #' @export #' @examples @@ -95,17 +95,17 @@ setMethod("keys", #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) #' collect(values(rdd)) # list(2, 4) #'} -setGeneric("values", function(rdd) { standardGeneric("values") }) +setGeneric("values", function(x) { standardGeneric("values") }) #' @rdname values #' @aliases values,RDD setMethod("values", - signature(rdd = "RDD"), - function(rdd) { - func <- function(x) { - x[[2]] + signature(x = "RDD"), + function(x) { + func <- function(v) { + v[[2]] } - lapply(rdd, func) + lapply(x, func) }) #' Applies a function to all values of the elements, without modifying the keys. @@ -176,7 +176,7 @@ setMethod("flatMapValues", #' For each element of this RDD, the partitioner is used to compute a hash #' function and the RDD is partitioned using this hash value. #' -#' @param rdd The RDD to partition. Should be an RDD where each element is +#' @param x The RDD to partition. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param numPartitions Number of partitions to create. #' @param ... Other optional arguments to partitionBy. @@ -195,15 +195,15 @@ setMethod("flatMapValues", #' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) #'} setGeneric("partitionBy", - function(rdd, numPartitions, ...) { + function(x, numPartitions, ...) { standardGeneric("partitionBy") }) #' @rdname partitionBy #' @aliases partitionBy,RDD,integer-method setMethod("partitionBy", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions, partitionFunc = hashCode) { + signature(x = "RDD", numPartitions = "integer"), + function(x, numPartitions, partitionFunc = hashCode) { #if (missing(partitionFunc)) { # partitionFunc <- hashCode @@ -212,15 +212,13 @@ setMethod("partitionBy", depsBinArr <- getDependencies(partitionFunc) serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), - connection = NULL, - ascii = TRUE) + connection = NULL) packageNamesArr <- serialize(.sparkREnv$.packages, - connection = NULL, - ascii = TRUE) + connection = NULL) broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) - jrdd <- getJRDD(rdd) + jrdd <- getJRDD(x) # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is @@ -229,7 +227,7 @@ setMethod("partitionBy", callJMethod(jrdd, "rdd"), as.integer(numPartitions), serializedHashFuncBytes, - getSerializedMode(rdd), + getSerializedMode(x), depsBinArr, packageNamesArr, as.character(.sparkREnv$libname), @@ -256,7 +254,7 @@ setMethod("partitionBy", #' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). #' and group values for each key in the RDD into a single sequence. #' -#' @param rdd The RDD to group. Should be an RDD where each element is +#' @param x The RDD to group. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param numPartitions Number of partitions to create. #' @return An RDD where each element is list(K, list(V)) @@ -273,27 +271,27 @@ setMethod("partitionBy", #' grouped[[1]] # Should be a list(1, list(2, 4)) #'} setGeneric("groupByKey", - function(rdd, numPartitions) { + function(x, numPartitions) { standardGeneric("groupByKey") }) #' @rdname groupByKey #' @aliases groupByKey,RDD,integer-method setMethod("groupByKey", - signature(rdd = "RDD", numPartitions = "integer"), - function(rdd, numPartitions) { - shuffled <- partitionBy(rdd, numPartitions) + signature(x = "RDD", numPartitions = "integer"), + function(x, numPartitions) { + shuffled <- partitionBy(x, numPartitions) groupVals <- function(part) { vals <- new.env() keys <- new.env() pred <- function(item) exists(item$hash, keys) - appendList <- function(acc, x) { - addItemToAccumulator(acc, x) + appendList <- function(acc, i) { + addItemToAccumulator(acc, i) acc } - makeList <- function(x) { + makeList <- function(i) { acc <- initAccumulator() - addItemToAccumulator(acc, x) + addItemToAccumulator(acc, i) acc } # Each item in the partition is list of (K, V) @@ -305,9 +303,9 @@ setMethod("groupByKey", }) # extract out data field vals <- eapply(vals, - function(x) { - length(x$data) <- x$counter - x$data + function(i) { + length(i$data) <- i$counter + i$data }) # Every key in the environment contains a list # Convert that to list(K, Seq[V]) @@ -321,7 +319,7 @@ setMethod("groupByKey", #' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). #' and merges the values for each key using an associative reduce function. #' -#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' @param x The RDD to reduce by key. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param combineFunc The associative reduce function to use. #' @param numPartitions Number of partitions to create. @@ -340,15 +338,15 @@ setMethod("groupByKey", #' reduced[[1]] # Should be a list(1, 6) #'} setGeneric("reduceByKey", - function(rdd, combineFunc, numPartitions) { + function(x, combineFunc, numPartitions) { standardGeneric("reduceByKey") }) #' @rdname reduceByKey #' @aliases reduceByKey,RDD,integer-method setMethod("reduceByKey", - signature(rdd = "RDD", combineFunc = "ANY", numPartitions = "integer"), - function(rdd, combineFunc, numPartitions) { + signature(x = "RDD", combineFunc = "ANY", numPartitions = "integer"), + function(x, combineFunc, numPartitions) { reduceVals <- function(part) { vals <- new.env() keys <- new.env() @@ -360,7 +358,7 @@ setMethod("reduceByKey", }) convertEnvsToList(keys, vals) } - locallyReduced <- lapplyPartition(rdd, reduceVals) + locallyReduced <- lapplyPartition(x, reduceVals) shuffled <- partitionBy(locallyReduced, numPartitions) lapplyPartition(shuffled, reduceVals) }) @@ -371,7 +369,7 @@ setMethod("reduceByKey", #' and merges the values for each key using an associative reduce function, but return the #' results immediately to the driver as an R list. #' -#' @param rdd The RDD to reduce by key. Should be an RDD where each element is +#' @param x The RDD to reduce by key. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param combineFunc The associative reduce function to use. #' @return A list of elements of type list(K, V') where V' is the merged value for each key @@ -387,15 +385,15 @@ setMethod("reduceByKey", #' reduced # list(list(1, 6), list(1.1, 3)) #'} setGeneric("reduceByKeyLocally", - function(rdd, combineFunc) { + function(x, combineFunc) { standardGeneric("reduceByKeyLocally") }) #' @rdname reduceByKeyLocally #' @aliases reduceByKeyLocally,RDD,integer-method setMethod("reduceByKeyLocally", - signature(rdd = "RDD", combineFunc = "ANY"), - function(rdd, combineFunc) { + signature(x = "RDD", combineFunc = "ANY"), + function(x, combineFunc) { reducePart <- function(part) { vals <- new.env() keys <- new.env() @@ -419,7 +417,7 @@ setMethod("reduceByKeyLocally", }) accum } - reduced <- mapPartitions(rdd, reducePart) + reduced <- mapPartitions(x, reducePart) merged <- reduce(reduced, mergeParts) convertEnvsToList(merged[[1]], merged[[2]]) }) @@ -439,7 +437,7 @@ setMethod("reduceByKeyLocally", #' two lists). #' } #' -#' @param rdd The RDD to combine. Should be an RDD where each element is +#' @param x The RDD to combine. Should be an RDD where each element is #' list(K, V) or c(K, V). #' @param createCombiner Create a combiner (C) given a value (V) #' @param mergeValue Merge the given value (V) with an existing combiner (C) @@ -460,16 +458,16 @@ setMethod("reduceByKeyLocally", #' combined[[1]] # Should be a list(1, 6) #'} setGeneric("combineByKey", - function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + function(x, createCombiner, mergeValue, mergeCombiners, numPartitions) { standardGeneric("combineByKey") }) #' @rdname combineByKey #' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method setMethod("combineByKey", - signature(rdd = "RDD", createCombiner = "ANY", mergeValue = "ANY", + signature(x = "RDD", createCombiner = "ANY", mergeValue = "ANY", mergeCombiners = "ANY", numPartitions = "integer"), - function(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) { + function(x, createCombiner, mergeValue, mergeCombiners, numPartitions) { combineLocally <- function(part) { combiners <- new.env() keys <- new.env() @@ -481,7 +479,7 @@ setMethod("combineByKey", }) convertEnvsToList(keys, combiners) } - locallyCombined <- lapplyPartition(rdd, combineLocally) + locallyCombined <- lapplyPartition(x, combineLocally) shuffled <- partitionBy(locallyCombined, numPartitions) mergeAfterShuffle <- function(part) { combiners <- new.env() @@ -497,6 +495,88 @@ setMethod("combineByKey", lapplyPartition(shuffled, mergeAfterShuffle) }) +#' Aggregate a pair RDD by each key. +#' +#' Aggregate the values of each key in an RDD, using given combine functions +#' and a neutral "zero value". This function can return a different result type, +#' U, than the type of the values in this RDD, V. Thus, we need one operation +#' for merging a V into a U and one operation for merging two U's, The former +#' operation is used for merging values within a partition, and the latter is +#' used for merging values between partitions. To avoid memory allocation, both +#' of these functions are allowed to modify and return their first argument +#' instead of creating a new U. +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param seqOp A function to aggregate the values of each key. It may return +#' a different result type from the type of the values. +#' @param combOp A function to aggregate results of seqOp. +#' @return An RDD containing the aggregation result. +#' @rdname aggregateByKey +#' @seealso foldByKey, combineByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +#' zeroValue <- list(0, 0) +#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +#' aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) +#' # list(list(1, list(3, 2)), list(2, list(7, 2))) +#'} +setGeneric("aggregateByKey", + function(x, zeroValue, seqOp, combOp, numPartitions) { + standardGeneric("aggregateByKey") + }) + +#' @rdname aggregateByKey +#' @aliases aggregateByKey,RDD,ANY,ANY,ANY,integer-method +setMethod("aggregateByKey", + signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", + combOp = "ANY", numPartitions = "integer"), + function(x, zeroValue, seqOp, combOp, numPartitions) { + createCombiner <- function(v) { + do.call(seqOp, list(zeroValue, v)) + } + + combineByKey(x, createCombiner, seqOp, combOp, numPartitions) + }) + +#' Fold a pair RDD by each key. +#' +#' Aggregate the values of each key in an RDD, using an associative function "func" +#' and a neutral "zero value" which may be added to the result an arbitrary +#' number of times, and must not change the result (e.g., 0 for addition, or +#' 1 for multiplication.). +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param func An associative function for folding values of each key. +#' @return An RDD containing the aggregation result. +#' @rdname foldByKey +#' @seealso aggregateByKey, combineByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +#' foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) +#'} +setGeneric("foldByKey", + function(x, zeroValue, func, numPartitions) { + standardGeneric("foldByKey") + }) + +#' @rdname foldByKey +#' @aliases foldByKey,RDD,ANY,ANY,integer-method +setMethod("foldByKey", + signature(x = "RDD", zeroValue = "ANY", + func = "ANY", numPartitions = "integer"), + function(x, zeroValue, func, numPartitions) { + aggregateByKey(x, zeroValue, func, func, numPartitions) + }) + ############ Binary Functions ############# #' Join two RDDs @@ -505,9 +585,9 @@ setMethod("combineByKey", #' \code{join} This function joins two RDDs where every element is of the form list(K, V). #' The key types of the two RDDs should be the same. #' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' @param x An RDD to be joined. Should be an RDD where each element is #' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' @param y An RDD to be joined. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. #' @return a new RDD containing all pairs of elements with matching keys in @@ -521,21 +601,21 @@ setMethod("combineByKey", #' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) #' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) #'} -setGeneric("join", function(rdd1, rdd2, numPartitions) { standardGeneric("join") }) +setGeneric("join", function(x, y, numPartitions) { standardGeneric("join") }) #' @rdname join-methods #' @aliases join,RDD,RDD-method setMethod("join", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + signature(x = "RDD", y = "RDD", numPartitions = "integer"), + function(x, y, numPartitions) { + xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) + yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) doJoin <- function(v) { joinTaggedList(v, list(FALSE, FALSE)) } - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' Left outer join two RDDs @@ -544,12 +624,12 @@ setMethod("join", #' \code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). #' The key types of the two RDDs should be the same. #' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' @param x An RDD to be joined. Should be an RDD where each element is #' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' @param y An RDD to be joined. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in rdd1, the resulting RDD will either contain +#' @return For each element (k, v) in x, the resulting RDD will either contain #' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) #' if no elements in rdd2 have key k. #' @rdname join-methods @@ -562,21 +642,21 @@ setMethod("join", #' leftOuterJoin(rdd1, rdd2, 2L) #' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) #'} -setGeneric("leftOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("leftOuterJoin") }) +setGeneric("leftOuterJoin", function(x, y, numPartitions) { standardGeneric("leftOuterJoin") }) #' @rdname join-methods #' @aliases leftOuterJoin,RDD,RDD-method setMethod("leftOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + signature(x = "RDD", y = "RDD", numPartitions = "integer"), + function(x, y, numPartitions) { + xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) + yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) doJoin <- function(v) { joinTaggedList(v, list(FALSE, TRUE)) } - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' Right outer join two RDDs @@ -585,14 +665,14 @@ setMethod("leftOuterJoin", #' \code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). #' The key types of the two RDDs should be the same. #' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' @param x An RDD to be joined. Should be an RDD where each element is #' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' @param y An RDD to be joined. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. -#' @return For each element (k, w) in rdd2, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) -#' if no elements in rdd1 have key k. +#' @return For each element (k, w) in y, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, v) in x, or the pair (k, (NULL, w)) +#' if no elements in x have key k. #' @rdname join-methods #' @export #' @examples @@ -603,21 +683,21 @@ setMethod("leftOuterJoin", #' rightOuterJoin(rdd1, rdd2, 2L) #' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) #'} -setGeneric("rightOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("rightOuterJoin") }) +setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) #' @rdname join-methods #' @aliases rightOuterJoin,RDD,RDD-method setMethod("rightOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + signature(x = "RDD", y = "RDD", numPartitions = "integer"), + function(x, y, numPartitions) { + xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) + yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) doJoin <- function(v) { joinTaggedList(v, list(TRUE, FALSE)) } - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' Full outer join two RDDs @@ -626,15 +706,15 @@ setMethod("rightOuterJoin", #' \code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). #' The key types of the two RDDs should be the same. #' -#' @param rdd1 An RDD to be joined. Should be an RDD where each element is +#' @param x An RDD to be joined. Should be an RDD where each element is #' list(K, V). -#' @param rdd2 An RDD to be joined. Should be an RDD where each element is +#' @param y An RDD to be joined. Should be an RDD where each element is #' list(K, V). #' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD -#' will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and -#' (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements -#' in rdd1/rdd2 have key k. +#' @return For each element (k, v) in x and (k, w) in y, the resulting RDD +#' will contain all pairs (k, (v, w)) for both (k, v) in x and +#' (k, w) in y, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements +#' in x/y have key k. #' @rdname join-methods #' @export #' @examples @@ -647,22 +727,22 @@ setMethod("rightOuterJoin", #' # list(2, list(NULL, 4))) #' # list(3, list(3, NULL)), #'} -setGeneric("fullOuterJoin", function(rdd1, rdd2, numPartitions) { standardGeneric("fullOuterJoin") }) +setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) #' @rdname join-methods #' @aliases fullOuterJoin,RDD,RDD-method setMethod("fullOuterJoin", - signature(rdd1 = "RDD", rdd2 = "RDD", numPartitions = "integer"), - function(rdd1, rdd2, numPartitions) { - rdd1Tagged <- lapply(rdd1, function(x) { list(x[[1]], list(1L, x[[2]])) }) - rdd2Tagged <- lapply(rdd2, function(x) { list(x[[1]], list(2L, x[[2]])) }) + signature(x = "RDD", y = "RDD", numPartitions = "integer"), + function(x, y, numPartitions) { + xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) + yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) doJoin <- function(v) { joinTaggedList(v, list(TRUE, TRUE)) } - joined <- flatMapValues(groupByKey(unionRDD(rdd1Tagged, rdd2Tagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' For each key k in several RDDs, return a resulting RDD that @@ -729,7 +809,7 @@ setMethod("cogroup", #' Sort a (k, v) pair RDD by k. #' -#' @param rdd A (k, v) pair RDD to be sorted. +#' @param x A (k, v) pair RDD to be sorted. #' @param ascending A flag to indicate whether the sorting is ascending or descending. #' @param numPartitions Number of partitions to create. #' @return An RDD where all (k, v) pair elements are sorted. @@ -741,7 +821,7 @@ setMethod("cogroup", #' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) #' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) #'} -setGeneric("sortByKey", function(rdd, +setGeneric("sortByKey", function(x, ascending = TRUE, numPartitions = 1L) { standardGeneric("sortByKey") @@ -750,17 +830,17 @@ setGeneric("sortByKey", function(rdd, #' @rdname sortByKey #' @aliases sortByKey,RDD,RDD-method setMethod("sortByKey", - signature(rdd = "RDD"), - function(rdd, ascending = TRUE, numPartitions = SparkR::numPartitions(rdd)) { + signature(x = "RDD"), + function(x, ascending = TRUE, numPartitions = SparkR::numPartitions(x)) { rangeBounds <- list() if (numPartitions > 1) { - rddSize <- count(rdd) + rddSize <- count(x) # constant from Spark's RangePartitioner maxSampleSize <- numPartitions * 20 fraction <- min(maxSampleSize / max(rddSize, 1), 1.0) - samples <- collect(keys(sampleRDD(rdd, FALSE, fraction, 1L))) + samples <- collect(keys(sampleRDD(x, FALSE, fraction, 1L))) # Note: the built-in R sort() function only works on atomic vectors samples <- sort(unlist(samples, recursive = FALSE), decreasing = !ascending) @@ -793,7 +873,7 @@ setMethod("sortByKey", sortKeyValueList(part, decreasing = !ascending) } - newRDD <- partitionBy(rdd, numPartitions, rangePartitionFunc) + newRDD <- partitionBy(x, numPartitions, rangePartitionFunc) lapplyPartition(newRDD, partitionFunc) }) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index f3a5dfa9745ec..757f830316f5e 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -4,7 +4,6 @@ assemblyJarName <- "sparkr-assembly-0.1.jar" sparkR.onLoad <- function(libname, pkgname) { assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep = "") - assemblyJarPath <- gsub(" ", "\\ ", assemblyJarPath, fixed = T) packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") .sparkREnv$libname <- libname @@ -83,14 +82,15 @@ sparkR.stop <- function(env = .sparkREnv) { #'} sparkR.init <- function( - master = "local", + master = "", appName = "SparkR", sparkHome = Sys.getenv("SPARK_HOME"), sparkEnvir = list(), sparkExecutorEnv = list(), sparkJars = "", sparkRLibDir = "", - sparkRBackendPort = 12345) { + sparkRBackendPort = as.integer(Sys.getenv("SPARKR_BACKEND_PORT", "12345")), + sparkRRetryCount = 6) { if (exists(".sparkRjsc", envir = .sparkREnv)) { cat("Re-using existing Spark Context. Please stop SparkR with sparkR.stop() or restart R to create a new Spark Context\n") @@ -98,21 +98,68 @@ sparkR.init <- function( } sparkMem <- Sys.getenv("SPARK_MEM", "512m") - jars <- c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)) - - cp <- paste0(jars, collapse = ":") + jars <- suppressWarnings( + normalizePath(c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)))) + + # Classpath separator is ";" on Windows + # URI needs four /// as from http://stackoverflow.com/a/18522792 + if (.Platform$OS.type == "unix") { + collapseChar <- ":" + uriSep <- "//" + } else { + collapseChar <- ";" + uriSep <- "////" + } + cp <- paste0(jars, collapse = collapseChar) yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") if (yarn_conf_dir != "") { cp <- paste(cp, yarn_conf_dir, sep = ":") } - launchBackend(classPath = cp, - mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args = as.character(sparkRBackendPort), - javaOpts = paste("-Xmx", sparkMem, sep = "")) - Sys.sleep(2) # Wait for backend to come up + + sparkRExistingPort <- Sys.getenv("EXISTING_SPARKR_BACKEND_PORT", "") + if (sparkRExistingPort != "") { + sparkRBackendPort <- sparkRExistingPort + } else { + if (Sys.getenv("SPARKR_USE_SPARK_SUBMIT", "") == "") { + launchBackend(classPath = cp, + mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", + args = as.character(sparkRBackendPort), + javaOpts = paste("-Xmx", sparkMem, sep = "")) + } else { + # TODO: We should deprecate sparkJars and ask users to add it to the + # command line (using --jars) which is picked up by SparkSubmit + launchBackendSparkSubmit( + mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", + args = as.character(sparkRBackendPort), + appJar = .sparkREnv$assemblyJarPath, + sparkHome = sparkHome, + sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "")) + } + } + .sparkREnv$sparkRBackendPort <- sparkRBackendPort - connectBackend("localhost", sparkRBackendPort) # Connect to it + cat("Waiting for JVM to come up...\n") + tries <- 0 + while (tries < sparkRRetryCount) { + if (!connExists(.sparkREnv)) { + Sys.sleep(2 ^ tries) + tryCatch({ + connectBackend("localhost", .sparkREnv$sparkRBackendPort) + }, error = function(err) { + cat("Error in Connection, retrying...\n") + }, warning = function(war) { + cat("No Connection Found, retrying...\n") + }) + tries <- tries + 1 + } else { + cat("Connection ok.\n") + break + } + } + if (tries == sparkRRetryCount) { + stop(sprintf("Failed to connect JVM after %d tries.\n", sparkRRetryCount)) + } if (nchar(sparkHome) != 0) { sparkHome <- normalizePath(sparkHome) @@ -136,7 +183,7 @@ sparkR.init <- function( } nonEmptyJars <- Filter(function(x) { x != "" }, jars) - localJarPaths <- sapply(nonEmptyJars, function(j) { paste("file://", j, sep = "") }) + localJarPaths <- sapply(nonEmptyJars, function(j) { utils::URLencode(paste("file:", uriSep, j, sep = "")) }) assign( ".sparkRjsc", diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 61ddf03575325..1a747031586d2 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -35,7 +35,36 @@ launchBackend <- function( } else { java_bin <- java_bin_name } + # Quote the classpath to make sure it handles spaces on Windows + classPath <- shQuote(classPath) combinedArgs <- paste(javaOpts, "-cp", classPath, mainClass, args, sep = " ") cat("Launching java with command ", java_bin, " ", combinedArgs, "\n") invisible(system2(java_bin, combinedArgs, wait = F)) } + +launchBackendSparkSubmit <- function( + mainClass, + args, + appJar, + sparkHome, + sparkSubmitOpts) { + if (.Platform$OS.type == "unix") { + sparkSubmitBinName = "spark-submit" + } else { + sparkSubmitBinName = "spark-submit.cmd" + } + + if (sparkHome != "") { + sparkSubmitBin <- file.path(sparkHome, "bin", sparkSubmitBinName) + } else { + sparkSubmitBin <- sparkSubmitBinName + } + + # Since this function is only used while launching R shell using spark-submit, + # the format we need to construct is + # spark-submit --class + + combinedArgs <- paste("--class", mainClass, sparkSubmitOpts, appJar, args, sep = " ") + cat("Launching java with spark-submit command ", sparkSubmitBin, " ", combinedArgs, "\n") + invisible(system2(sparkSubmitBin, combinedArgs, wait = F)) +} diff --git a/pkg/inst/sparkR-submit b/pkg/inst/sparkR-submit new file mode 100755 index 0000000000000..9c451ab8e3712 --- /dev/null +++ b/pkg/inst/sparkR-submit @@ -0,0 +1,74 @@ +#!/bin/bash +# This script launches SparkR through spark-submit. This accepts +# the same set of options as spark-submit and requires SPARK_HOME +# to be set. + +FWDIR="$(cd `dirname $0`; pwd)" + +export PROJECT_HOME="$FWDIR" + +export SPARKR_JAR_FILE="$FWDIR/sparkr-assembly-0.1.jar" + +# Exit if the user hasn't set SPARK_HOME +if [ ! -f "$SPARK_HOME/bin/spark-submit" ]; then + echo "SPARK_HOME must be set to use sparkR-submit" + exit 1 +fi + +source "$SPARK_HOME/bin/utils.sh" + +function usage() { + echo "Usage: ./sparkR-submit [options]" 1>&2 + "$SPARK_HOME"/bin/spark-submit --help 2>&1 | grep -v Usage 1>&2 + exit 0 +} + +if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then + usage +fi + +# Build up arguments list manually to preserve quotes and backslashes. +SUBMIT_USAGE_FUNCTION=usage +gatherSparkSubmitOpts "$@" + +SPARKR_SUBMIT_ARGS="" +whitespace="[[:space:]]" +for i in "${SUBMISSION_OPTS[@]}" +do + if [[ $i =~ \" ]]; then i=$(echo $i | sed 's/\"/\\\"/g'); fi + if [[ $i =~ $whitespace ]]; then i=\"$i\"; fi + SPARKR_SUBMIT_ARGS="$SPARKR_SUBMIT_ARGS $i" +done +export SPARKR_SUBMIT_ARGS +export SPARKR_USE_SPARK_SUBMIT=1 + +NUM_APPLICATION_OPTS=${#APPLICATION_OPTS[@]} + +# If a R file is provided, directly run spark-submit. +if [[ $NUM_APPLICATION_OPTS -gt 0 && "${APPLICATION_OPTS[0]}" =~ \.R$ ]]; then + + primary="${APPLICATION_OPTS[0]}" + shift + # Set the main class to SparkRRunner and add the primary R file to --files to make sure its copied to the cluster + echo "Running $SPARK_HOME/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files $primary ${SUBMISSION_OPTS[@]} $SPARKR_JAR_FILE $primary" "${APPLICATION_OPTS[@]:1}" + exec "$SPARK_HOME"/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files "$primary" "${SUBMISSION_OPTS[@]}" "$SPARKR_JAR_FILE" "$primary" "${APPLICATION_OPTS[@]:1}" +else + + export R_PROFILE_USER="/tmp/sparkR.profile" + + # If we don't have an R file to run, run R shell +cat > /tmp/sparkR.profile << EOF +.First <- function() { + projecHome <- Sys.getenv("PROJECT_HOME") + Sys.setenv(NOAWT=1) + .libPaths(c(paste(projecHome,"/..", sep=""), .libPaths())) + require(SparkR) + sc <- sparkR.init() + assign("sc", sc, envir=.GlobalEnv) + cat("\n Welcome to SparkR!") + cat("\n Spark context is available as sc\n") +} +EOF + R + +fi diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 89d7890fbf685..f0c00d71d076c 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -336,6 +336,23 @@ test_that("values() on RDDs", { expect_equal(actual, lapply(intPairs, function(x) { x[[2]] })) }) +test_that("pipeRDD() on RDDs", { + actual <- collect(pipeRDD(rdd, "more")) + expected <- as.list(as.character(1:10)) + expect_equal(actual, expected) + + trailed.rdd <- parallelize(sc, c("1", "", "2\n", "3\n\r\n")) + actual <- collect(pipeRDD(trailed.rdd, "sort")) + expected <- list("", "1", "2", "3") + expect_equal(actual, expected) + + rev.nums <- 9:0 + rev.rdd <- parallelize(sc, rev.nums, 2L) + actual <- collect(pipeRDD(rev.rdd, "sort")) + expected <- as.list(as.character(c(5:9, 0:4))) + expect_equal(actual, expected) +}) + test_that("join() on pairwise RDDs", { rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) rdd2 <- parallelize(sc, list(list(1,2), list(1,3))) diff --git a/pkg/inst/tests/test_shuffle.R b/pkg/inst/tests/test_shuffle.R index 3683287fd0423..8df9b439a08cd 100644 --- a/pkg/inst/tests/test_shuffle.R +++ b/pkg/inst/tests/test_shuffle.R @@ -70,6 +70,77 @@ test_that("combineByKey for doubles", { expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) }) +test_that("aggregateByKey", { + # test aggregateByKey for int keys + rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) + + zeroValue <- list(0, 0) + seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } + combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } + aggregatedRDD <- aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) + + actual <- collect(aggregatedRDD) + + expected <- list(list(1, list(3, 2)), list(2, list(7, 2))) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + # test aggregateByKey for string keys + rdd <- parallelize(sc, list(list("a", 1), list("a", 2), list("b", 3), list("b", 4))) + + zeroValue <- list(0, 0) + seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } + combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } + aggregatedRDD <- aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) + + actual <- collect(aggregatedRDD) + + expected <- list(list("a", list(3, 2)), list("b", list(7, 2))) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) +}) + +test_that("foldByKey", { + # test foldByKey for int keys + folded <- foldByKey(intRdd, 0, "+", 2L) + + actual <- collect(folded) + + expected <- list(list(2L, 101), list(1L, 199)) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + # test foldByKey for double keys + folded <- foldByKey(doubleRdd, 0, "+", 2L) + + actual <- collect(folded) + + expected <- list(list(1.5, 199), list(2.5, 101)) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + # test foldByKey for string keys + stringKeyPairs <- list(list("a", -1), list("b", 100), list("b", 1), list("a", 200)) + + stringKeyRDD <- parallelize(sc, stringKeyPairs) + folded <- foldByKey(stringKeyRDD, 0, "+", 2L) + + actual <- collect(folded) + + expected <- list(list("b", 101), list("a", 199)) + expect_equal(sortKeyValueList(actual), sortKeyValueList(expected)) + + # test foldByKey for empty pair RDD + rdd <- parallelize(sc, list()) + folded <- foldByKey(rdd, 0, "+", 2L) + actual <- collect(folded) + expected <- list() + expect_equal(actual, expected) + + # test foldByKey for RDD with only 1 pair + rdd <- parallelize(sc, list(list(1, 1))) + folded <- foldByKey(rdd, 0, "+", 2L) + actual <- collect(folded) + expected <- list(list(1, 1)) + expect_equal(actual, expected) +}) + test_that("partitionBy() partitions data correctly", { # Partition by magnitude partitionByMagnitude <- function(key) { if (key >= 3) 1 else 0 } diff --git a/pkg/man/aggregateByKey.Rd b/pkg/man/aggregateByKey.Rd new file mode 100644 index 0000000000000..7bcbd5cc69d12 --- /dev/null +++ b/pkg/man/aggregateByKey.Rd @@ -0,0 +1,50 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{aggregateByKey} +\alias{aggregateByKey} +\alias{aggregateByKey,RDD,ANY,ANY,ANY,integer-method} +\title{Aggregate a pair RDD by each key.} +\usage{ +aggregateByKey(rdd, zeroValue, seqOp, combOp, numPartitions) + +\S4method{aggregateByKey}{RDD,ANY,ANY,ANY,integer}(rdd, zeroValue, seqOp, + combOp, numPartitions) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{zeroValue}{A neutral "zero value".} + +\item{seqOp}{A function to aggregate the values of each key. It may return +a different result type from the type of the values.} + +\item{combOp}{A function to aggregate results of seqOp.} +} +\value{ +An RDD containing the aggregation result. +} +\description{ +Aggregate the values of each key in an RDD, using given combine functions +and a neutral "zero value". This function can return a different result type, +U, than the type of the values in this RDD, V. Thus, we need one operation +for merging a V into a U and one operation for merging two U's, The former +operation is used for merging values within a partition, and the latter is +used for merging values between partitions. To avoid memory allocation, both +of these functions are allowed to modify and return their first argument +instead of creating a new U. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +zeroValue <- list(0, 0) +seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) + # list(list(1, list(3, 2)), list(2, list(7, 2))) +} +} +\seealso{ +foldByKey, combineByKey +} + diff --git a/pkg/man/foldByKey.Rd b/pkg/man/foldByKey.Rd new file mode 100644 index 0000000000000..a2822c51a8ff4 --- /dev/null +++ b/pkg/man/foldByKey.Rd @@ -0,0 +1,38 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{foldByKey} +\alias{foldByKey} +\alias{foldByKey,RDD,ANY,ANY,integer-method} +\title{Fold a pair RDD by each key.} +\usage{ +foldByKey(rdd, zeroValue, func, numPartitions) + +\S4method{foldByKey}{RDD,ANY,ANY,integer}(rdd, zeroValue, func, numPartitions) +} +\arguments{ +\item{rdd}{An RDD.} + +\item{zeroValue}{A neutral "zero value".} + +\item{func}{An associative function for folding values of each key.} +} +\value{ +An RDD containing the aggregation result. +} +\description{ +Aggregate the values of each key in an RDD, using an associative function "func" +and a neutral "zero value" which may be added to the result an arbitrary +number of times, and must not change the result (e.g., 0 for addition, or +1 for multiplication.). +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) +} +} +\seealso{ +aggregateByKey, combineByKey +} + diff --git a/pkg/man/pipeRDD.Rd b/pkg/man/pipeRDD.Rd new file mode 100644 index 0000000000000..0964d3415ecb8 --- /dev/null +++ b/pkg/man/pipeRDD.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2 (4.1.0): do not edit by hand +% Please edit documentation in R/RDD.R +\docType{methods} +\name{pipeRDD} +\alias{pipeRDD} +\alias{pipeRDD,RDD,character-method} +\title{Pipes elements to a forked external process.} +\usage{ +pipeRDD(rdd, command, env = list()) + +\S4method{pipeRDD}{RDD,character}(rdd, command, env = list()) +} +\arguments{ +\item{rdd}{The RDD whose elements are piped to the forked external process.} + +\item{command}{The command to fork an external process.} + +\item{env}{A named list to set environment variables of the external process.} +} +\value{ +A new RDD created by piping all elements to a forked external process. +} +\description{ +The same as 'pipe()' in Spark. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, 1:10) +collect(pipeRDD(rdd, "more") +Output: c("1", "2", ..., "10") +} +} + diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 959613697774a..bfe449786b76d 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -360,10 +360,19 @@ object RRDD { sparkEnvirMap: JMap[Object, Object], sparkExecutorEnvMap: JMap[Object, Object]): JavaSparkContext = { - val sparkConf = new SparkConf().setMaster(master) - .setAppName(appName) + val sparkConf = new SparkConf().setAppName(appName) .setSparkHome(sparkHome) .setJars(jars) + + // Override `master` if we have a user-specified value + if (master != "") { + sparkConf.setMaster(master) + } else { + // If conf has no master set it to "local" to maintain + // backwards compatibility + sparkConf.setIfMissing("spark.master", "local") + } + for ((name, value) <- sparkEnvirMap) { sparkConf.set(name.asInstanceOf[String], value.asInstanceOf[String]) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala new file mode 100644 index 0000000000000..fb356f89b2d1d --- /dev/null +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala @@ -0,0 +1,105 @@ +package edu.berkeley.cs.amplab.sparkr + +import java.io._ +import java.net.URI +import java.util.concurrent.Semaphore +import java.util.concurrent.TimeUnit + +import scala.collection.mutable.ArrayBuffer +import scala.collection.JavaConversions._ + +import org.apache.hadoop.fs.Path + +/** + * Main class used to launch SparkR applications using spark-submit. It executes R as a + * subprocess and then has it connect back to the JVM to access system properties etc. + */ +object SparkRRunner { + def main(args: Array[String]) { + val rFile = args(0) + + val otherArgs = args.slice(1, args.length) + + // Time to wait for SparkR backend to initialize in seconds + val backendTimeout = sys.env.getOrElse("SPARKR_BACKEND_TIMEOUT", "120").toInt + // TODO: Can we get this from SparkConf ? + val sparkRBackendPort = sys.env.getOrElse("SPARKR_BACKEND_PORT", "12345").toInt + val rCommand = "Rscript" + + // Check if the file path exists. + // If not, change directory to current working directory for YARN cluster mode + val rF = new File(rFile) + val rFileNormalized = if (!rF.exists()) { + new Path(rFile).getName + } else { + rFile + } + + + // Launch a SparkR backend server for the R process to connect to; this will let it see our + // Java system properties etc. + val sparkRBackend = new SparkRBackend() + val sparkRBackendThread = new Thread() { + val finishedInit = new Semaphore(0) + + override def run() { + sparkRBackend.init(sparkRBackendPort) + finishedInit.release() + sparkRBackend.run() + } + + def stopBackend() { + sparkRBackend.close() + } + } + + sparkRBackendThread.start() + // Wait for SparkRBackend initialization to finish + if (sparkRBackendThread.finishedInit.tryAcquire(backendTimeout, TimeUnit.SECONDS)) { + // Launch R + val returnCode = try { + val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) + val env = builder.environment() + env.put("EXISTING_SPARKR_BACKEND_PORT", sparkRBackendPort.toString) + builder.redirectErrorStream(true) // Ugly but needed for stdout and stderr to synchronize + val process = builder.start() + + new RedirectThread(process.getInputStream, System.out, "redirect output").start() + + process.waitFor() + } finally { + sparkRBackendThread.stopBackend() + } + System.exit(returnCode) + } else { + System.err.println("SparkR backend did not initialize in " + backendTimeout + " seconds") + System.exit(-1) + } + } + + private class RedirectThread( + in: InputStream, + out: OutputStream, + name: String, + propagateEof: Boolean = false) + extends Thread(name) { + + setDaemon(true) + override def run() { + // FIXME: We copy the stream on the level of bytes to avoid encoding problems. + try { + val buf = new Array[Byte](1024) + var len = in.read(buf) + while (len != -1) { + out.write(buf, 0, len) + out.flush() + len = in.read(buf) + } + } finally { + if (propagateEof) { + out.close() + } + } + } + } +} diff --git a/sparkR b/sparkR index 01ed365fd4b15..916523d57f846 100755 --- a/sparkR +++ b/sparkR @@ -28,7 +28,7 @@ cat > /tmp/sparkR.profile << EOF Sys.setenv(NOAWT=1) .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) require(SparkR) - sc <- sparkR.init(Sys.getenv("MASTER", unset = "local")) + sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) assign("sc", sc, envir=.GlobalEnv) cat("\n Welcome to SparkR!") cat("\n Spark context is available as sc\n") From a9bbe0bd08c2b37c3bc9ff9cbd6d577b9458a94f Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 10:17:13 -0600 Subject: [PATCH 483/687] Update existing SparkSQL functions Updated methods to work with new `x` argument in the RDD methods. --- pkg/R/DataFrame.R | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 71564064caa17..0a69825d85dff 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -128,10 +128,10 @@ setMethod("count", #' } setMethod("collect", - signature(rdd = "DataFrame"), - function(rdd) { + signature(x = "DataFrame"), + function(x) { # listCols is a list of raw vectors, one per column - listCols <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToCols", rdd@sdf) + listCols <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToCols", x@sdf) cols <- lapply(listCols, function(col) { objRaw <- rawConnection(col) numRows <- readInt(objRaw) @@ -139,7 +139,7 @@ setMethod("collect", close(objRaw) col }) - colNames <- callJMethod(rdd@sdf, "columns") + colNames <- callJMethod(x@sdf, "columns") names(cols) <- colNames dfOut <- do.call(cbind.data.frame, cols) dfOut @@ -187,9 +187,9 @@ setMethod("limit", #' } setMethod("take", - signature(rdd = "DataFrame", num = "numeric"), - function(rdd, num) { - limited <- limit(rdd, num) + signature(x = "DataFrame", num = "numeric"), + function(x, num) { + limited <- limit(x, num) collect(limited) }) @@ -264,15 +264,15 @@ setMethod("mapPartitions", }) setMethod("foreach", - signature(rdd = "DataFrame", func = "function"), - function(rdd, func) { - rddIn <- toRDD(rdd) - foreach(rddIn, func) + signature(x = "DataFrame", func = "function"), + function(x, func) { + rdd <- toRDD(x) + foreach(rdd, func) }) setMethod("foreachPartition", - signature(rdd = "DataFrame", func = "function"), - function(rdd, func) { - rddIn <- toRDD(rdd) - foreachPartition(rddIn, func) + signature(x = "DataFrame", func = "function"), + function(x, func) { + rdd <- toRDD(x) + foreachPartition(rdd, func) }) From 30d71fdca380435bca50967762105d4f9038fb90 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 11:23:41 -0600 Subject: [PATCH 484/687] Standardize method arguments for DataFrame methods --- pkg/R/DataFrame.R | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 0a69825d85dff..a093a9ce0d3ce 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -39,7 +39,7 @@ dataFrame <- function(sdf) { #' #' Prints out the schema in tree format #' -#' @param df A SparkSQL DataFrame +#' @param x A SparkSQL DataFrame #' #' @rdname printSchema #' @export @@ -52,12 +52,12 @@ dataFrame <- function(sdf) { #' printSchema(df) #'} -setGeneric("printSchema", function(df) { standardGeneric("printSchema") }) +setGeneric("printSchema", function(x) { standardGeneric("printSchema") }) setMethod("printSchema", - signature(df = "DataFrame"), - function(df) { - sdf <- df@sdf + signature(x = "DataFrame"), + function(x) { + sdf <- x@sdf schemaString <- callJMethod(sdf, "printSchema") cat(schemaString) }) @@ -66,7 +66,7 @@ setMethod("printSchema", #' #' Registers a DataFrame as a Temporary Table in the SQLContext #' -#' @param df A SparkSQL DataFrame +#' @param x A SparkSQL DataFrame #' @param tableName A character vector containing the name of the table #' #' @rdname registerTempTable @@ -81,12 +81,12 @@ setMethod("printSchema", #' new_df <- sql(sqlCtx, "SELECT * FROM json_df") #'} -setGeneric("registerTempTable", function(df, tableName) { standardGeneric("registerTempTable") }) +setGeneric("registerTempTable", function(x, tableName) { standardGeneric("registerTempTable") }) setMethod("registerTempTable", - signature(df = "DataFrame", tableName = "character"), - function(df, tableName) { - sdf <- df@sdf + signature(x = "DataFrame", tableName = "character"), + function(x, tableName) { + sdf <- x@sdf callJMethod(sdf, "registerTempTable", tableName) }) @@ -94,7 +94,7 @@ setMethod("registerTempTable", #' #' Returns the number of rows in a DataFrame #' -#' @param df A SparkSQL DataFrame +#' @param x A SparkSQL DataFrame #' #' @rdname count #' @export @@ -149,7 +149,7 @@ setMethod("collect", #' #' Limit the resulting DataFrame to the number of rows specified. #' -#' @param df A SparkSQL DataFrame +#' @param x A SparkSQL DataFrame #' @param num The number of rows to return #' @return A new DataFrame containing the number of rows specified. #' @@ -164,12 +164,12 @@ setMethod("collect", #' limitedDF <- limit(df, 10) #' } -setGeneric("limit", function(df, num) {standardGeneric("limit") }) +setGeneric("limit", function(x, num) {standardGeneric("limit") }) setMethod("limit", - signature(df = "DataFrame", num = "numeric"), - function(df, num) { - res <- callJMethod(df@sdf, "limit", as.integer(num)) + signature(x = "DataFrame", num = "numeric"), + function(x, num) { + res <- callJMethod(x@sdf, "limit", as.integer(num)) dataFrame(res) }) @@ -197,7 +197,7 @@ setMethod("take", #' #' Converts a Spark DataFrame to an RDD while preserving column names. #' -#' @param df A Spark DataFrame +#' @param x A Spark DataFrame #' #' @rdname DataFrame #' @export @@ -210,13 +210,13 @@ setMethod("take", #' rdd <- toRDD(df) #' } -setGeneric("toRDD", function(df) { standardGeneric("toRDD") }) +setGeneric("toRDD", function(x) { standardGeneric("toRDD") }) setMethod("toRDD", - signature(df = "DataFrame"), - function(df) { - jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", df@sdf) - colNames <- callJMethod(df@sdf, "columns") + signature(x = "DataFrame"), + function(x) { + jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", x@sdf) + colNames <- callJMethod(x@sdf, "columns") rdd <- RDD(jrdd, serializedMode = "row") lapply(rdd, function(row) { names(row) <- colNames From 64f488d52a10a9d3b7a3e17ba581f8cc7db613ae Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 11:31:38 -0600 Subject: [PATCH 485/687] Cache and Persist Methods Added `cache`, `persist`, and `unpersist` to `DataFrame`. `DataFrame` now has an `isCached` flag. Added a `getStorageLevel` function to `utils.R` so that we don't have to duplicate the code between DataFrame and RDD. --- pkg/R/DataFrame.R | 85 ++++++++++++++++++++++++++++++++-- pkg/R/RDD.R | 30 ++---------- pkg/R/utils.R | 27 +++++++++++ pkg/inst/tests/test_sparkSQL.R | 18 +++++++ 4 files changed, 130 insertions(+), 30 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index a093a9ce0d3ce..31495e358bfba 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -19,8 +19,9 @@ setClass("DataFrame", slots = list(env = "environment", sdf = "jobj")) -setMethod("initialize", "DataFrame", function(.Object, sdf) { +setMethod("initialize", "DataFrame", function(.Object, sdf, isCached) { .Object@env <- new.env() + .Object@env$isCached <- isCached .Object@sdf <- sdf .Object @@ -29,8 +30,8 @@ setMethod("initialize", "DataFrame", function(.Object, sdf) { #' @rdname DataFrame #' @export -dataFrame <- function(sdf) { - new("DataFrame", sdf) +dataFrame <- function(sdf, isCached = FALSE) { + new("DataFrame", sdf, isCached) } ############################ DataFrame Methods ############################################## @@ -90,6 +91,84 @@ setMethod("registerTempTable", callJMethod(sdf, "registerTempTable", tableName) }) +#' Cache +#' +#' Persist with the default storage level (MEMORY_ONLY). +#' +#' @param x A SparkSQL DataFrame +#' +#' @rdname cache-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' cache(df) +#'} + +setMethod("cache", + signature(x = "DataFrame"), + function(x) { + cached <- callJMethod(x@sdf, "cache") + x@env$isCached <- TRUE + x + }) + +#' Persist +#' +#' Persist this DataFrame with the specified storage level. For details of the +#' supported storage levels, refer to +#' http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. +#' +#' @param x The DataFrame to persist +#' @rdname persist +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' persist(df, "MEMORY_AND_DISK") +#'} + +setMethod("persist", + signature(x = "DataFrame", newLevel = "character"), + function(x, newLevel) { + callJMethod(x@sdf, "persist", getStorageLevel(newLevel)) + x@env$isCached <- TRUE + x + }) + +#' Unpersist +#' +#' Mark this DataFrame as non-persistent, and remove all blocks for it from memory and +#' disk. +#' +#' @param x The DataFrame to unpersist +#' @param blocking Whether to block until all blocks are deleted +#' @rdname unpersist-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' persist(df, "MEMORY_AND_DISK") +#' unpersist(df) +#'} + +setMethod("unpersist", + signature(x = "DataFrame"), + function(x, blocking = TRUE) { + callJMethod(x@sdf, "unpersist", blocking) + x@env$isCached <- FALSE + x + }) + #' Count #' #' Returns the number of rows in a DataFrame diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 1d1a645f2094d..7219bdaa18bb0 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -235,32 +235,8 @@ setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) #' @aliases persist,RDD-method setMethod("persist", signature(x = "RDD", newLevel = "character"), - function(x, newLevel = c("DISK_ONLY", - "DISK_ONLY_2", - "MEMORY_AND_DISK", - "MEMORY_AND_DISK_2", - "MEMORY_AND_DISK_SER", - "MEMORY_AND_DISK_SER_2", - "MEMORY_ONLY", - "MEMORY_ONLY_2", - "MEMORY_ONLY_SER", - "MEMORY_ONLY_SER_2", - "OFF_HEAP")) { - match.arg(newLevel) - storageLevel <- switch(newLevel, - "DISK_ONLY" = callJStatic("org.apache.spark.storage.StorageLevel", "DISK_ONLY"), - "DISK_ONLY_2" = callJStatic("org.apache.spark.storage.StorageLevel", "DISK_ONLY_2"), - "MEMORY_AND_DISK" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK"), - "MEMORY_AND_DISK_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_2"), - "MEMORY_AND_DISK_SER" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_SER"), - "MEMORY_AND_DISK_SER_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_SER_2"), - "MEMORY_ONLY" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY"), - "MEMORY_ONLY_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_2"), - "MEMORY_ONLY_SER" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_SER"), - "MEMORY_ONLY_SER_2" = callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_SER_2"), - "OFF_HEAP" = callJStatic("org.apache.spark.storage.StorageLevel", "OFF_HEAP")) - - callJMethod(getJRDD(x), "persist", storageLevel) + function(x, newLevel) { + callJMethod(getJRDD(x), "persist", getStorageLevel(newLevel)) x@env$isCached <- TRUE x }) @@ -280,7 +256,7 @@ setMethod("persist", #' cache(rdd) # rdd@@env$isCached == TRUE #' unpersist(rdd) # rdd@@env$isCached == FALSE #'} -setGeneric("unpersist", function(x) { standardGeneric("unpersist") }) +setGeneric("unpersist", function(x, ...) { standardGeneric("unpersist") }) #' @rdname unpersist-methods #' @aliases unpersist,RDD-method diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 4b4142a5fb1af..3ceb928ea9cac 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -299,3 +299,30 @@ convertEnvsToList <- function(keys, vals) { list(keys[[name]], vals[[name]]) }) } + +getStorageLevel <- function(newLevel = c("DISK_ONLY", + "DISK_ONLY_2", + "MEMORY_AND_DISK", + "MEMORY_AND_DISK_2", + "MEMORY_AND_DISK_SER", + "MEMORY_AND_DISK_SER_2", + "MEMORY_ONLY", + "MEMORY_ONLY_2", + "MEMORY_ONLY_SER", + "MEMORY_ONLY_SER_2", + "OFF_HEAP")) { + match.arg(newLevel) + storageLevel <- switch(newLevel, + "DISK_ONLY" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "DISK_ONLY"), + "DISK_ONLY_2" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "DISK_ONLY_2"), + "MEMORY_AND_DISK" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK"), + "MEMORY_AND_DISK_2" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_2"), + "MEMORY_AND_DISK_SER" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_SER"), + "MEMORY_AND_DISK_SER_2" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_AND_DISK_SER_2"), + "MEMORY_ONLY" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY"), + "MEMORY_ONLY_2" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_2"), + "MEMORY_ONLY_SER" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_SER"), + "MEMORY_ONLY_SER_2" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "MEMORY_ONLY_SER_2"), + "OFF_HEAP" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "OFF_HEAP")) +} + diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index f5e47ed47776e..6669c97ded43f 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -143,4 +143,22 @@ test_that("multiple pipeline transformations starting with a DataFrame result in expect_false(collect(second)[[3]]$testCol) }) +test_that("cache(), persist(), and unpersist() on a DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) + expect_false(df@env$isCached) + cache(df) + expect_true(df@env$isCached) + + unpersist(df) + expect_false(df@env$isCached) + + persist(df, "MEMORY_AND_DISK") + expect_true(df@env$isCached) + + unpersist(df) + expect_false(df@env$isCached) + + # make sure the data is collectable + expect_true(is.data.frame(collect(df))) +}) unlink(jsonPath) From 534a95f16db66cd5b3f52e73e7f4e8b66b64311d Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 11:42:59 -0600 Subject: [PATCH 486/687] Schema-related methods StructFields are now returned as named lists. As a result, `schema` now returns a list of named lists where each element corresponds to the StructField. Added `dtypes` and `columns` methods, as well as a `names` method that serves as an alias for `columns`. --- pkg/R/DataFrame.R | 91 ++++++++++++++++++- pkg/R/deserialize.R | 19 ++++ pkg/inst/tests/test_sparkSQL.R | 20 ++++ .../edu/berkeley/cs/amplab/sparkr/SerDe.scala | 27 ++++++ 4 files changed, 155 insertions(+), 2 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 31495e358bfba..03a3ff1d0a6bd 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -58,11 +58,98 @@ setGeneric("printSchema", function(x) { standardGeneric("printSchema") }) setMethod("printSchema", signature(x = "DataFrame"), function(x) { - sdf <- x@sdf - schemaString <- callJMethod(sdf, "printSchema") + schemaString <- callJMethod(x@sdf, "printSchema") cat(schemaString) }) +#' Get schema object +#' +#' Returns the schema of this DataFrame as a list of named lists. Each named +#' list contains the elements of the StructField type, i.e. name, dataType, nullable. +#' +#' @param x A SparkSQL DataFrame +#' +#' @rdname schema +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' dfSchema <- schema(df) +#'} + +setGeneric("schema", function(x) { standardGeneric("schema") }) + +setMethod("schema", + signature(x = "DataFrame"), + function(x) { + schemaOut <- callJMethod(x@sdf, "schema") + schemaOut + }) + +#' DataTypes +#' +#' Return all column names and their data types as a list +#' +#' @param x A SparkSQL DataFrame +#' +#' @rdname dtypes +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' dtypes(df) +#'} + +setGeneric("dtypes", function(x) {standardGeneric("dtypes") }) + +setMethod("dtypes", + signature(x = "DataFrame"), + function(x) { + lapply(schema(x), function(f) { + field <- c(f$name, f$dataType) + }) + }) + +#' Column names +#' +#' Return all column names as a list +#' +#' @param x A SparkSQL DataFrame +#' +#' @rdname columns +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' columns(df) +#'} +setGeneric("columns", function(x) {standardGeneric("columns") }) + +setMethod("columns", + signature(x = "DataFrame"), + function(x) { + sapply(schema(x), function(f) { + f$name + }) + }) + +#' @rdname columns +#' @export +setMethod("names", + signature(x = "DataFrame"), + function(x) { + columns(x) + }) + #' Register Temporary Table #' #' Registers a DataFrame as a Temporary Table in the SQLContext diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index f8e4c4e630125..aa10681a2cadb 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -29,6 +29,8 @@ readTypedObject <- function(con, type) { "l" = readList(con), "n" = NULL, "j" = getJobj(readString(con)), + "t" = readStructType(con), + "f" = readStructField(con), stop("Unsupported type for deserialization")) } @@ -78,6 +80,23 @@ readRawLen <- function(con, dataLen) { data <- readBin(con, raw(), as.integer(dataLen), endian = "big") } +readStructType <- function(inputCon) { + data <- list() + numFields <- readInt(inputCon) + data <- lapply(1:numFields, function(field) { + data[[field]] <- readStructField(inputCon) + }) +} + +readStructField <- function(inputCon) { + numElems <- readInt(inputCon) + sfOut <- lapply(1:numElems, function(elem) { + obj <- readObject(inputCon) + }) + names(sfOut) <- c("name", "dataType", "nullable") + sfOut +} + readDeserialize <- function(con) { # We have two cases that are possible - In one, the entire partition is # encoded as a byte array, so we have only one value to read. If so just diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 6669c97ded43f..92ec149a951ae 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -161,4 +161,24 @@ test_that("cache(), persist(), and unpersist() on a DataFrame", { # make sure the data is collectable expect_true(is.data.frame(collect(df))) }) + +test_that("schema(), dtypes(), columns(), names() return the correct values/format", { + df <- jsonFile(sqlCtx, jsonPath) + testSchema <- schema(df) + expect_true(length(testSchema) == 2) + expect_true(names(testSchema[[1]][2]) == "dataType") + expect_true(length(testSchema[[1]]) == 3) + + testTypes <- dtypes(df) + expect_true(length(testTypes[[1]]) == 2) + expect_true(testTypes[[1]][1] == "age") + + testCols <- columns(df) + expect_true(length(testCols) == 2) + expect_true(testCols[2] == "name") + + testNames <- names(df) + expect_true(length(testNames) == 2) + expect_true(testNames[2] == "name") +}) unlink(jsonPath) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 5e6cc0bf5e931..2af1b222e1089 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -4,6 +4,7 @@ import scala.collection.JavaConversions._ import java.io.DataInputStream import java.io.DataOutputStream +import org.apache.spark.sql.types.{StructField, StructType} /** * Utility functions to serialize, deserialize objects to / from R @@ -156,6 +157,8 @@ object SerDe { case "raw" => dos.writeByte('r') case "list" => dos.writeByte('l') case "jobj" => dos.writeByte('j') + case "structType" => dos.writeByte('t') + case "structField" => dos.writeByte('f') case _ => throw new IllegalArgumentException(s"Invalid type $typeStr") } } @@ -183,6 +186,12 @@ object SerDe { case "[B" => writeType(dos, "raw") writeBytes(dos, value.asInstanceOf[Array[Byte]]) + case "StructType" | "org.apache.spark.sql.types.StructType" => + writeType(dos, "structType") + writeStructType(dos, value.asInstanceOf[StructType]) + case "StructField" | "org.apache.spark.sql.types.StructField" => + writeType(dos, "structField") + writeStructField(dos, value.asInstanceOf[StructField]) // TODO: Types not handled right now include // byte, char, short, float @@ -281,6 +290,24 @@ object SerDe { out.writeInt(value.length) value.foreach(v => writeBytes(out, v)) } + + def writeStructType(out: DataOutputStream, value: StructType) { + // Write a StructType as a list of lists in R + val fields = value.fields //Array[StructField] + out.writeInt(value.length) // Number of fields + fields.foreach { v => + writeStructField(out, v) + } + } + + def writeStructField(out: DataOutputStream, value: StructField) { + // Write the contents of a single StructField as a list + val contents = Seq(value.name, value.dataType.typeName, value.nullable) + out.writeInt(contents.length) + contents.foreach { t => + writeObject(out, t.asInstanceOf[Object]) + } + } } object SerializationFormats { From 36dffb3fd8b6765e609a88299aebea524f320786 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 11:44:55 -0600 Subject: [PATCH 487/687] Add 'head` and `first` Added functions for `head` and `first`. Updates to `NAMESPACE` and new tests. --- pkg/NAMESPACE | 12 +++++-- pkg/R/DataFrame.R | 63 +++++++++++++++++++++++++++++++--- pkg/inst/tests/test_sparkSQL.R | 15 ++++++++ 3 files changed, 83 insertions(+), 7 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 3d9995e12b744..8ee80ca576899 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -84,10 +84,16 @@ importFrom(methods, setGeneric, setMethod, setOldClass) exportClasses("DataFrame") -exportMethods("printSchema", +exportMethods("columns", + "dtypes", + "first", + "head", + "limit", + "names", + "printSchema", "registerTempTable", - "toRDD", - "limit") + "schema", + "toRDD") export("jsonFile", "parquetFile", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 03a3ff1d0a6bd..4583161c24732 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -280,6 +280,10 @@ setMethod("count", }) #' Collects all the elements of a Spark DataFrame and coerces them into an R data.frame. +#' +#' @param x A SparkSQL DataFrame +#' @param stringsAsFactors (Optional) A logical indicating whether or not string columns +#' should be converted to factors. FALSE by default. #' @rdname collect-methods #' @export @@ -295,7 +299,7 @@ setMethod("count", setMethod("collect", signature(x = "DataFrame"), - function(x) { + function(x, stringsAsFactors = FALSE) { # listCols is a list of raw vectors, one per column listCols <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToCols", x@sdf) cols <- lapply(listCols, function(col) { @@ -307,7 +311,7 @@ setMethod("collect", }) colNames <- callJMethod(x@sdf, "columns") names(cols) <- colNames - dfOut <- do.call(cbind.data.frame, cols) + dfOut <- do.call(cbind.data.frame, list(cols, stringsAsFactors = stringsAsFactors)) dfOut }) @@ -337,9 +341,9 @@ setMethod("limit", function(x, num) { res <- callJMethod(x@sdf, "limit", as.integer(num)) dataFrame(res) - }) + }) -# Take the first NUM elements in a DataFrame and return a the results as a data.frame +# Take the first NUM rows of a DataFrame and return a the results as a data.frame #' @rdname take #' @export @@ -359,6 +363,57 @@ setMethod("take", collect(limited) }) +#' Head +#' +#' Return the first NUM rows of a DataFrame as a data.frame. If NUM is NULL, +#' then head() returns the first 6 rows in keeping with the current data.frame +#' convention in R. +#' +#' @param x A SparkSQL DataFrame +#' @param num The number of rows to return. Default is 6. +#' @return A data.frame +#' +#' @rdname head +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' head(df) +#' } + +setMethod("head", + signature(x = "DataFrame"), + function(x, num = 6L) { + # Default num is 6L in keeping with R's data.frame convention + take(x, num) + }) + +#' Return the first row of a DataFrame +#' +#' @param x A SparkSQL DataFrame +#' +#' @rdname first +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' first(df) +#' } + +setGeneric("first", function(x) {standardGeneric("first") }) + +setMethod("first", + signature(x = "DataFrame"), + function(x) { + take(x, 1) + }) + #' toRDD() #' #' Converts a Spark DataFrame to an RDD while preserving column names. diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 92ec149a951ae..be5bfee968deb 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -181,4 +181,19 @@ test_that("schema(), dtypes(), columns(), names() return the correct values/form expect_true(length(testNames) == 2) expect_true(testNames[2] == "name") }) + +test_that("head() and first() return the correct data", { + df <- jsonFile(sqlCtx, jsonPath) + testHead <- head(df) + expect_true(nrow(testHead) == 3) + expect_true(ncol(testHead) == 2) + + testHead2 <- head(df, 2) + expect_true(nrow(testHead2) == 2) + expect_true(ncol(testHead2) == 2) + + testFirst <- first(df) + expect_true(nrow(testFirst) == 1) +}) + unlink(jsonPath) From ba495a84bfdf5f638b2e6dde12f6c4a501bc1d7c Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 26 Feb 2015 09:46:05 -0800 Subject: [PATCH 488/687] Update NAMESPACE --- pkg/NAMESPACE | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 1f264a895e58e..8f2b4cc17f14f 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -80,7 +80,6 @@ importFrom(methods, setGeneric, setMethod, setOldClass) # SparkRSQL exportClasses("DataFrame") - exportMethods("printSchema", "registerTempTable", "toRDD", @@ -91,7 +90,6 @@ exportMethods("printSchema", exportClasses("GroupedData") exportMethods("count", "agg", "avg") - export("jsonFile", "parquetFile", "sql", From 8282c59a383dafb6947d10103597b7580adf748f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 26 Feb 2015 09:47:21 -0800 Subject: [PATCH 489/687] Update DataFrame.R --- pkg/R/DataFrame.R | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 56ffc4c422242..d5f98bfe3a6f9 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -350,7 +350,3 @@ createMethod <- function(name) { for (name in metheds) { createMethod(name) } - - - - From f4dbb0b4a591010d0d7ee7e841174cd033756b6f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 26 Feb 2015 11:47:51 -0800 Subject: [PATCH 490/687] use socket in worker --- pkg/inst/worker/worker.R | 24 +--- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 112 +++++++++--------- 2 files changed, 58 insertions(+), 78 deletions(-) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index c5457adcbc54d..2ba5211ab1572 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -1,23 +1,18 @@ # Worker class -# NOTE: We use "stdin" to get the process stdin instead of the command line -inputConStdin <- file("stdin", open = "rb") +port <- as.integer(Sys.getenv("SPARKR_WORKER_PORT")) -outputFileName <- readLines(inputConStdin, n = 1) -outputCon <- file(outputFileName, open="wb") +inputCon <- socketConnection(port = port, blocking = TRUE, open = "rb") +outputCon <- socketConnection(port = port, blocking = TRUE, open = "wb") # Set libPaths to include SparkR package as loadNamespace needs this # TODO: Figure out if we can avoid this by not loading any objects that require # SparkR namespace -rLibDir <- readLines(inputConStdin, n = 1) +rLibDir <- readLines(inputCon, n = 1) .libPaths(c(rLibDir, .libPaths())) suppressPackageStartupMessages(library(SparkR)) -inFileName <- readLines(inputConStdin, n = 1) - -inputCon <- file(inFileName, open = "rb") - # read the index of the current partition inside the RDD splitIndex <- SparkR:::readInt(inputCon) @@ -31,10 +26,6 @@ isInputSerialized <- SparkR:::readInt(inputCon) # read the isOutputSerialized bit flag isOutputSerialized <- SparkR:::readInt(inputCon) -# Redirect stdout to stderr to prevent print statements from -# interfering with outputStream -sink(stderr()) - # Include packages as required packageNames <- unserialize(SparkR:::readRaw(inputCon)) for (pkg in packageNames) { @@ -123,10 +114,3 @@ if (isOutputSerialized) { close(outputCon) close(inputCon) -unlink(inFileName) - -# Restore stdout -sink() - -# Finally print the name of the output file -cat(outputFileName, "\n") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 74d5837fb9384..528aa2a3984c8 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -1,6 +1,7 @@ package edu.berkeley.cs.amplab.sparkr import java.io._ +import java.net.{ServerSocket} import java.util.{Map => JMap} import scala.collection.JavaConversions._ @@ -12,6 +13,8 @@ import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD +import scala.util.Try + private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], numPartitions: Int, @@ -27,21 +30,32 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( override def compute(split: Partition, context: TaskContext): Iterator[U] = { - val parentIterator = firstParent[T].iterator(split, context) + val serverSocket = new ServerSocket(0, 2) + val listenPort = serverSocket.getLocalPort() - val pb = rWorkerProcessBuilder() + val pb = rWorkerProcessBuilder(listenPort) + pb.redirectErrorStream() // redirect stderr into stdout val proc = pb.start() + val errThread = startStdoutThread(proc) - val errThread = startStderrThread(proc) + // We use two socket ot separate input and output, then it's easy to manage + // the lifecycle of them to avoid deadlock. + // TODO: optimize it to use one socket + + // the socket used to send out the input of task + serverSocket.setSoTimeout(10000) + val inSocket = serverSocket.accept() + val parentIterator = firstParent[T].iterator(split, context) + startStdinThread(inSocket.getOutputStream(), parentIterator, split.index) - val tempFile = startStdinThread(proc, parentIterator, split.index) + // the socket used to receive the output of task + val outSocket = serverSocket.accept() + val inputStream = new BufferedInputStream(outSocket.getInputStream) + val dataStream = openDataStream(inputStream) - // Return an iterator that read lines from the process's stdout - val inputStream = new BufferedReader(new InputStreamReader(proc.getInputStream)) + serverSocket.close() try { - val stdOutFileName = inputStream.readLine().trim() - val dataStream = openDataStream(stdOutFileName) return new Iterator[U] { def next(): U = { @@ -57,9 +71,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( def hasNext(): Boolean = { val hasMore = (_nextObj != null) if (!hasMore) { - // Delete the temporary file we created as we are done reading it dataStream.close() - tempFile.delete() } hasMore } @@ -73,7 +85,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( /** * ProcessBuilder used to launch worker R processes. */ - private def rWorkerProcessBuilder() = { + private def rWorkerProcessBuilder(port: Int) = { val rCommand = "Rscript" val rOptions = "--vanilla" val rExecScript = rLibDir + "/SparkR/worker/worker.R" @@ -82,47 +94,42 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( // This is set by R CMD check as startup.Rs // (http://svn.r-project.org/R/trunk/src/library/tools/R/testing.R) // and confuses worker script which tries to load a non-existent file - pb.environment().put("R_TESTS", ""); + pb.environment().put("R_TESTS", "") + pb.environment().put("SPARKR_WORKER_PORT", port.toString) pb } /** * Start a thread to print the process's stderr to ours */ - private def startStderrThread(proc: Process): BufferedStreamThread = { - val ERR_BUFFER_SIZE = 100 - val errThread = new BufferedStreamThread(proc.getErrorStream, "stderr reader for R", - ERR_BUFFER_SIZE) - errThread.start() - errThread + private def startStdoutThread(proc: Process): BufferedStreamThread = { + val BUFFER_SIZE = 100 + val thread = new BufferedStreamThread(proc.getInputStream, "stdout reader for R", BUFFER_SIZE) + thread.setDaemon(true) + thread.start() + thread } /** * Start a thread to write RDD data to the R process. */ private def startStdinThread[T]( - proc: Process, + output: OutputStream, iter: Iterator[T], - splitIndex: Int) : File = { + splitIndex: Int) = { val env = SparkEnv.get - val conf = env.conf - val tempDir = RRDD.getLocalDir(conf) - val tempFile = File.createTempFile("rSpark", "out", new File(tempDir)) - val tempFileIn = File.createTempFile("rSpark", "in", new File(tempDir)) - - val tempFileName = tempFile.getAbsolutePath() val bufferSize = System.getProperty("spark.buffer.size", "65536").toInt + val stream = new BufferedOutputStream(output, bufferSize) - // Start a thread to feed the process input from our parent's iterator - new Thread("stdin writer for R") { + new Thread("writer for R") { override def run() { try { SparkEnv.set(env) - val stream = new BufferedOutputStream(new FileOutputStream(tempFileIn), bufferSize) val printOut = new PrintStream(stream) - val dataOut = new DataOutputStream(stream) + printOut.println(rLibDir) + val dataOut = new DataOutputStream(stream) dataOut.writeInt(splitIndex) dataOut.writeInt(func.length) @@ -157,44 +164,33 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(1) } - for (elem <- iter) { - if (parentSerialized) { + if (parentSerialized) { + for (elem <- iter) { val elemArr = elem.asInstanceOf[Array[Byte]] dataOut.writeInt(elemArr.length) dataOut.write(elemArr, 0, elemArr.length) - } else { + } + } else { + for (elem <- iter) { printOut.println(elem) } } - printOut.flush() - dataOut.flush() stream.flush() - stream.close() - - // NOTE: We need to write out the temp file before writing out the - // file name to stdin. Otherwise the R process could read partial state - val streamStd = new BufferedOutputStream(proc.getOutputStream, bufferSize) - val printOutStd = new PrintStream(streamStd) - printOutStd.println(tempFileName) - printOutStd.println(rLibDir) - printOutStd.println(tempFileIn.getAbsolutePath()) - printOutStd.flush() - - streamStd.close() } catch { // TODO: We should propogate this error to the task thread case e: Exception => System.err.println("R Writer thread got an exception " + e) e.printStackTrace() + } finally { + Try(output.close()) } } }.start() - - tempFile } - protected def openDataStream(stdOutFileName: String): Closeable + protected def openDataStream(input: InputStream): Closeable + protected def read(): U } @@ -217,8 +213,8 @@ private class PairwiseRRDD[T: ClassTag]( private var dataStream: DataInputStream = _ - override protected def openDataStream(stdOutFileName: String) = { - dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) + override protected def openDataStream(input: InputStream) = { + dataStream = new DataInputStream(input) dataStream } @@ -261,9 +257,9 @@ private class RRDD[T: ClassTag]( broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ - - override protected def openDataStream(stdOutFileName: String) = { - dataStream = new DataInputStream(new FileInputStream(stdOutFileName)) + + override protected def openDataStream(input: InputStream) = { + dataStream = new DataInputStream(input) dataStream } @@ -305,9 +301,8 @@ private class StringRRDD[T: ClassTag]( private var dataStream: BufferedReader = _ - override protected def openDataStream(stdOutFileName: String) = { - dataStream = new BufferedReader( - new InputStreamReader(new FileInputStream(stdOutFileName))) + override protected def openDataStream(input: InputStream) = { + dataStream = new BufferedReader(new InputStreamReader(input)) dataStream } @@ -334,6 +329,7 @@ private class BufferedStreamThread( for (line <- Source.fromInputStream(in).getLines) { lines(lineIdx) = line lineIdx = (lineIdx + 1) % errBufferSize + // TODO: user logger System.err.println(line) } } From 07aa7c03e802e43738008f4ac7a1e2ccfa6ba0fe Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 26 Feb 2015 15:26:10 -0500 Subject: [PATCH 491/687] Unifies the implementation of lapply with lapplyParitionsWithIndex. --- pkg/R/RDD.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 48aa66af93f42..e50dfed02f6c7 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -493,7 +493,7 @@ setMethod("lapply", func <- function(split, iterator) { lapply(iterator, FUN) } - PipelinedRDD(X, func) + lapplyPartitionsWithIndex(X, func) }) #' @rdname lapply From f4f077ca1946dd16ee80532c940faafd219f44cc Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 26 Feb 2015 18:34:49 -0500 Subject: [PATCH 492/687] Add recursive cleanClosure for function access. --- pkg/R/utils.R | 16 ++++++++++++---- pkg/inst/tests/test_utils.R | 26 +++++++++++++++++++------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 64c43eccd4eb9..1cba009791674 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -350,7 +350,11 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { # Set parameter 'inherits' to FALSE since we do not need to search in # attached package environments. if (exists(nodeChar, envir=func.env, inherits = FALSE)) { - assign(nodeChar, get(nodeChar, envir=func.env), envir = newEnv) + obj <- get(nodeChar, envir=func.env) + if (is.function(obj)) { + obj <- cleanClosure(obj) + } + assign(nodeChar, obj, envir = newEnv) break } else { # Continue to search in enclosure. @@ -366,9 +370,11 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { # outside a UDF, and stores them in a new environment. # param # func A function whose closure needs to be captured. -# newEnv A new function environment to store necessary function dependencies. -cleanClosure <- function(func, newEnv) { - if (is.function(func) && is.environment(newEnv)) { +# return value +# a new function that has an correct environment (closure). +cleanClosure <- function(func) { + if (is.function(func) { + newEnv <- new.env(parent = .GlobalEnv) # .defVars is a character vector of variables names defined in the function. assign(".defVars", c(), envir = .sparkREnv) func.body <- body(func) @@ -377,5 +383,7 @@ cleanClosure <- function(func, newEnv) { argsNames <- argNames[-length(argNames)] # Remove the ending NULL in pairlist. # Recursively examine variables in the function body. processClosure(func.body, oldEnv, argNames, newEnv) + environment(func) <- newEnv } + func } diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 7317d0421d092..82232e8731944 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -36,12 +36,12 @@ test_that("reserialize on RDD", { unlink(fileName) }) -test_that("clean.closure on R functions", { +test_that("cleanClosure on R functions", { y <- c(1, 2, 3) g <- function(x) { x + 1 } f <- function(x) { g(x) + y } - env <- new.env() - cleanClosure(f, env) + newF <- cleanClosure(f) + env <- environment(newF) expect_equal(length(ls(env)), 2) # y, g actual <- get("y", envir = env) expect_equal(actual, y) @@ -53,20 +53,32 @@ test_that("clean.closure on R functions", { funcEnv <- new.env(parent = env2) f <- function(x) { min(g(x) + y) } environment(f) <- funcEnv # enclosing relationship: f -> funcEnv -> env2 -> .GlobalEnv - env <- new.env() - SparkR:::cleanClosure(f, env) + newF <- SparkR:::cleanClosure(f) + env <- environment(newF) expect_equal(length(ls(env)), 2) # "min" should not be included actual <- get("y", envir = env) expect_equal(actual, y) actual <- get("g", envir = env) expect_equal(actual, g) + + g <- function(x) { x + y } + f <- function(x) { lapply(x, g) + 1 } + newF <- SparkR:::cleanClosure(f) + env <- environment(newF) + expect_equal(length(ls(env)), 1) # Only "g", "y" should be in the environemnt of g. + expect_equal(ls(env), "g") + newG <- get("g", envir = env) + env <- environment(newG) + expect_equal(length(ls(env)), 1) + actual <- get("y", envir = env) + expect_equal(actual, y) # Test for function (and variable) definitions. f <- function(x) { g <- function(y) { y * 2 } g(x) } - env <- new.env() - SparkR:::cleanClosure(f, env) + newF <- SparkR:::cleanClosure(f) + env <- environment(newF) expect_equal(length(ls(env)), 0) # "y" and "g" should not be included. }) From 09b95126c0f6cb86d228ac20e5b4e31dff5eb68a Mon Sep 17 00:00:00 2001 From: hlin09 Date: Thu, 26 Feb 2015 19:55:20 -0500 Subject: [PATCH 493/687] add docs --- pkg/R/utils.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 1cba009791674..88d187461b197 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -351,7 +351,8 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { # attached package environments. if (exists(nodeChar, envir=func.env, inherits = FALSE)) { obj <- get(nodeChar, envir=func.env) - if (is.function(obj)) { + if (is.function(obj)) { + # if the node is a function call, recursively clean its closure. obj <- cleanClosure(obj) } assign(nodeChar, obj, envir = newEnv) @@ -373,7 +374,7 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { # return value # a new function that has an correct environment (closure). cleanClosure <- function(func) { - if (is.function(func) { + if (is.function(func)) { newEnv <- new.env(parent = .GlobalEnv) # .defVars is a character vector of variables names defined in the function. assign(".defVars", c(), envir = .sparkREnv) From 2ea2ecfab0d5cd3328bd343b9532ec505b7bd99a Mon Sep 17 00:00:00 2001 From: lythesia Date: Fri, 27 Feb 2015 09:32:17 +0800 Subject: [PATCH 494/687] use generic arg --- pkg/R/RDD.R | 24 ++++++++++++------------ pkg/man/coalesce.Rd | 6 +++--- pkg/man/repartition.Rd | 6 +++--- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 6d69f3e0cc7a0..111c1ffa052d2 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1045,7 +1045,7 @@ setMethod("keyBy", #' If you are decreasing the number of partitions in this RDD, consider using #' coalesce, which can avoid performing a shuffle. #' -#' @param rdd The RDD. +#' @param x The RDD. #' @param numPartitions Number of partitions to create. #' @rdname repartition #' @seealso coalesce @@ -1057,19 +1057,19 @@ setMethod("keyBy", #' numPartitions(rdd) # 4 #' numPartitions(repartition(rdd, 2L)) # 2 #'} -setGeneric("repartition", function(rdd, numPartitions) { standardGeneric("repartition") }) +setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartition") }) #' @rdname repartition #' @aliases repartition,RDD setMethod("repartition", - signature(rdd = "RDD", numPartitions = "numeric"), - function(rdd, numPartitions) { - coalesce(rdd, numPartitions, TRUE) + signature(x = "RDD", numPartitions = "numeric"), + function(x, numPartitions) { + coalesce(x, numPartitions, TRUE) }) #' Return a new RDD that is reduced into numPartitions partitions. #' -#' @param rdd The RDD. +#' @param x The RDD. #' @param numPartitions Number of partitions to create. #' @rdname coalesce #' @seealso repartition @@ -1081,18 +1081,18 @@ setMethod("repartition", #' numPartitions(rdd) # 3 #' numPartitions(coalesce(rdd, 1L)) # 1 #'} -setGeneric("coalesce", function(rdd, numPartitions, ...) { standardGeneric("coalesce") }) +setGeneric("coalesce", function(x, numPartitions, ...) { standardGeneric("coalesce") }) #' @rdname coalesce #' @aliases coalesce,RDD setMethod("coalesce", - signature(rdd = "RDD", numPartitions = "numeric"), - function(rdd, numPartitions, shuffle = FALSE) { + signature(x = "RDD", numPartitions = "numeric"), + function(x, numPartitions, shuffle = FALSE) { if(as.integer(numPartitions) != numPartitions) { warning("Number of partitions should be an integer. Coercing it to integer.") } numPartitions <- as.integer(numPartitions) - if (shuffle || numPartitions > SparkR::numPartitions(rdd)) { + if (shuffle || numPartitions > SparkR::numPartitions(x)) { func <- function(s, part) { set.seed(s) # split as seed lapply(part, @@ -1101,11 +1101,11 @@ setMethod("coalesce", list(k, v) }) } - shuffled <- lapplyPartitionsWithIndex(rdd, func) + shuffled <- lapplyPartitionsWithIndex(x, func) reparted <- partitionBy(shuffled, numPartitions) values(reparted) } else { - jrdd <- callJMethod(getJRDD(rdd), "coalesce", numPartitions, shuffle) + jrdd <- callJMethod(getJRDD(x), "coalesce", numPartitions, shuffle) RDD(jrdd) } }) diff --git a/pkg/man/coalesce.Rd b/pkg/man/coalesce.Rd index f308e9a853d8e..b3b9badb73060 100644 --- a/pkg/man/coalesce.Rd +++ b/pkg/man/coalesce.Rd @@ -7,12 +7,12 @@ \alias{coalesce,RDD,integer-method} \title{Return a new RDD that is reduced into numPartitions partitions.} \usage{ -coalesce(rdd, numPartitions, ...) +coalesce(x, numPartitions, ...) -\S4method{coalesce}{RDD,integer}(rdd, numPartitions, shuffle = FALSE) +\S4method{coalesce}{RDD,integer}(x, numPartitions, shuffle = FALSE) } \arguments{ -\item{rdd}{The RDD.} +\item{x}{The RDD.} \item{numPartitions}{Number of partitions to create.} } diff --git a/pkg/man/repartition.Rd b/pkg/man/repartition.Rd index 1bbf672ec8231..6dff0cd251152 100644 --- a/pkg/man/repartition.Rd +++ b/pkg/man/repartition.Rd @@ -11,12 +11,12 @@ this uses a shuffle to redistribute data. If you are decreasing the number of partitions in this RDD, consider using coalesce, which can avoid performing a shuffle.} \usage{ -repartition(rdd, numPartitions) +repartition(x, numPartitions) -\S4method{repartition}{RDD,integer}(rdd, numPartitions) +\S4method{repartition}{RDD,integer}(x, numPartitions) } \arguments{ -\item{rdd}{The RDD.} +\item{x}{The RDD.} \item{numPartitions}{Number of partitions to create.} } From d72e83094358a2bb90c0bc67030c7c4e93347e77 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 23:00:26 -0600 Subject: [PATCH 495/687] Add wrapper for `StructField` and `StructType` S3 classes and print methods for `StructType` and `StructField`. Removed the backend functions for both data types. --- pkg/R/deserialize.R | 19 --------- pkg/R/types.R | 32 ++++++++++++++ .../edu/berkeley/cs/amplab/sparkr/SerDe.scala | 42 ++++++++----------- 3 files changed, 49 insertions(+), 44 deletions(-) create mode 100644 pkg/R/types.R diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index aa10681a2cadb..f8e4c4e630125 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -29,8 +29,6 @@ readTypedObject <- function(con, type) { "l" = readList(con), "n" = NULL, "j" = getJobj(readString(con)), - "t" = readStructType(con), - "f" = readStructField(con), stop("Unsupported type for deserialization")) } @@ -80,23 +78,6 @@ readRawLen <- function(con, dataLen) { data <- readBin(con, raw(), as.integer(dataLen), endian = "big") } -readStructType <- function(inputCon) { - data <- list() - numFields <- readInt(inputCon) - data <- lapply(1:numFields, function(field) { - data[[field]] <- readStructField(inputCon) - }) -} - -readStructField <- function(inputCon) { - numElems <- readInt(inputCon) - sfOut <- lapply(1:numElems, function(elem) { - obj <- readObject(inputCon) - }) - names(sfOut) <- c("name", "dataType", "nullable") - sfOut -} - readDeserialize <- function(con) { # We have two cases that are possible - In one, the entire partition is # encoded as a byte array, so we have only one value to read. If so just diff --git a/pkg/R/types.R b/pkg/R/types.R new file mode 100644 index 0000000000000..7da1569792674 --- /dev/null +++ b/pkg/R/types.R @@ -0,0 +1,32 @@ +# Utility functions for handling Spark DataTypes. + + +structType <- function(st) { + obj <- structure(new.env(parent = emptyenv()), class = "structType") + obj$jobj <- st + obj$fields <- lapply(SparkR:::callJMethod(st, "fields"), structField) + obj +} + +print.structType <- function(x, ...) { + fieldsList <- lapply(x$fields, function(i) i$print) + print(fieldsList) +} + +structField <- function(sf) { + obj <- structure(new.env(parent = emptyenv()), class = "structField") + obj$jobj <- sf + obj$name <- SparkR:::callJMethod(sf, "name") + obj$dataType <- SparkR:::callJMethod(sf, "dataType") + obj$dataType.toString <- SparkR:::callJMethod(obj$dataType, "toString") + obj$dataType.simpleString <- SparkR:::callJMethod(obj$dataType, "simpleString") + obj$nullable <- SparkR:::callJMethod(sf, "nullable") + obj$print <- paste("StructField(", + paste(obj$name, obj$dataType.toString, obj$nullable, sep = ", "), + ")", sep = "") + obj +} + +print.structField <- function(x, ...) { + cat(x$print) +} \ No newline at end of file diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 2af1b222e1089..9b10214abb2b3 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -157,8 +157,6 @@ object SerDe { case "raw" => dos.writeByte('r') case "list" => dos.writeByte('l') case "jobj" => dos.writeByte('j') - case "structType" => dos.writeByte('t') - case "structField" => dos.writeByte('f') case _ => throw new IllegalArgumentException(s"Invalid type $typeStr") } } @@ -186,12 +184,6 @@ object SerDe { case "[B" => writeType(dos, "raw") writeBytes(dos, value.asInstanceOf[Array[Byte]]) - case "StructType" | "org.apache.spark.sql.types.StructType" => - writeType(dos, "structType") - writeStructType(dos, value.asInstanceOf[StructType]) - case "StructField" | "org.apache.spark.sql.types.StructField" => - writeType(dos, "structField") - writeStructField(dos, value.asInstanceOf[StructField]) // TODO: Types not handled right now include // byte, char, short, float @@ -291,23 +283,23 @@ object SerDe { value.foreach(v => writeBytes(out, v)) } - def writeStructType(out: DataOutputStream, value: StructType) { - // Write a StructType as a list of lists in R - val fields = value.fields //Array[StructField] - out.writeInt(value.length) // Number of fields - fields.foreach { v => - writeStructField(out, v) - } - } - - def writeStructField(out: DataOutputStream, value: StructField) { - // Write the contents of a single StructField as a list - val contents = Seq(value.name, value.dataType.typeName, value.nullable) - out.writeInt(contents.length) - contents.foreach { t => - writeObject(out, t.asInstanceOf[Object]) - } - } + // def writeStructType(out: DataOutputStream, value: StructType) { + // // Write a StructType as a list of lists in R + // val fields = value.fields //Array[StructField] + // out.writeInt(value.length) // Number of fields + // fields.foreach { v => + // writeStructField(out, v) + // } + // } + + // def writeStructField(out: DataOutputStream, value: StructField) { + // // Write the contents of a single StructField as a list + // val contents = Seq(value.name, value.dataType.typeName, value.nullable) + // out.writeInt(contents.length) + // contents.foreach { t => + // writeObject(out, t.asInstanceOf[Object]) + // } + // } } object SerializationFormats { From a57884ed1fae5aeff8c00b11af69c3cd59816b8f Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 23:00:52 -0600 Subject: [PATCH 496/687] Remove unused import --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 50bff49b9b739..6fa10621e3383 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -4,7 +4,6 @@ import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.spark.api.java.JavaRDD import org.apache.spark.sql.{SQLContext, DataFrame, Row} -import org.apache.spark.sql.types.{StructType} import edu.berkeley.cs.amplab.sparkr.SerDe._ From 818c19f24aa302b5b645cbf289b324eabe82202b Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 23:02:27 -0600 Subject: [PATCH 497/687] Update schema-related functions Update `schema` and related functions to use new wrappers. --- pkg/R/DataFrame.R | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 4583161c24732..69056bfbdd288 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -1,6 +1,6 @@ # DataFrame.R - DataFrame class and methods implemented in S4 OO classes -#' @include jobj.R RDD.R pairRDD.R +#' @include jobj.R types.R RDD.R pairRDD.R NULL setOldClass("jobj") @@ -58,7 +58,7 @@ setGeneric("printSchema", function(x) { standardGeneric("printSchema") }) setMethod("printSchema", signature(x = "DataFrame"), function(x) { - schemaString <- callJMethod(x@sdf, "printSchema") + schemaString <- callJMethod(schema(x)$jobj, "treeString") cat(schemaString) }) @@ -85,8 +85,7 @@ setGeneric("schema", function(x) { standardGeneric("schema") }) setMethod("schema", signature(x = "DataFrame"), function(x) { - schemaOut <- callJMethod(x@sdf, "schema") - schemaOut + structType(callJMethod(x@sdf, "schema")) }) #' DataTypes @@ -111,8 +110,8 @@ setGeneric("dtypes", function(x) {standardGeneric("dtypes") }) setMethod("dtypes", signature(x = "DataFrame"), function(x) { - lapply(schema(x), function(f) { - field <- c(f$name, f$dataType) + lapply(schema(x)$fields, function(f) { + field <- c(f$name, f$dataType.simpleString) }) }) @@ -137,7 +136,7 @@ setGeneric("columns", function(x) {standardGeneric("columns") }) setMethod("columns", signature(x = "DataFrame"), function(x) { - sapply(schema(x), function(f) { + sapply(schema(x)$fields, function(f) { f$name }) }) From db0cd9e9fa31bb5f72877c939eb33abeefc1057f Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 23:03:05 -0600 Subject: [PATCH 498/687] Clean up for wrapper functions --- pkg/DESCRIPTION | 1 + pkg/NAMESPACE | 2 ++ pkg/inst/tests/test_sparkSQL.R | 7 ++++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index e9ca14149981a..846ab2cf80db7 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -16,6 +16,7 @@ Description: R frontend for Spark License: Apache License (== 2.0) Collate: 'jobj.R' + 'types.R' 'RDD.R' 'pairRDD.R' 'DataFrame.R' diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 8ee80ca576899..f876c1a717844 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -103,3 +103,5 @@ export("jsonFile", "uncacheTable") export("sparkRSQL.init") +export("print.structType", + "print.structField") diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index be5bfee968deb..91f194a706a01 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -165,9 +165,10 @@ test_that("cache(), persist(), and unpersist() on a DataFrame", { test_that("schema(), dtypes(), columns(), names() return the correct values/format", { df <- jsonFile(sqlCtx, jsonPath) testSchema <- schema(df) - expect_true(length(testSchema) == 2) - expect_true(names(testSchema[[1]][2]) == "dataType") - expect_true(length(testSchema[[1]]) == 3) + expect_true(length(testSchema$fields) == 2) + expect_true(testSchema$fields[[1]]$dataType.toString == "IntegerType") + expect_true(testSchema$fields[[2]]$dataType.simpleString == "string") + expect_true(testSchema$fields[[1]]$name == "age") testTypes <- dtypes(df) expect_true(length(testTypes[[1]]) == 2) From 1cd714f168380ffe7ac880fdd18112a1aeeeacd9 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 23:12:38 -0600 Subject: [PATCH 499/687] Wrapper function docs. --- pkg/R/types.R | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pkg/R/types.R b/pkg/R/types.R index 7da1569792674..ce8c045d9d362 100644 --- a/pkg/R/types.R +++ b/pkg/R/types.R @@ -1,6 +1,6 @@ # Utility functions for handling Spark DataTypes. - +# Handler for StructType structType <- function(st) { obj <- structure(new.env(parent = emptyenv()), class = "structType") obj$jobj <- st @@ -8,11 +8,19 @@ structType <- function(st) { obj } +#' Print a Spark StructType. +#' +#' This function prints the contents of a StructType returned from the +#' SparkR JVM backend. +#' +#' @param x A StructType object +#' @param ... further arguments passed to or from other methods print.structType <- function(x, ...) { fieldsList <- lapply(x$fields, function(i) i$print) print(fieldsList) } +# Handler for StructField structField <- function(sf) { obj <- structure(new.env(parent = emptyenv()), class = "structField") obj$jobj <- sf @@ -27,6 +35,13 @@ structField <- function(sf) { obj } +#' Print a Spark StructField. +#' +#' This function prints the contents of a StructField returned from the +#' SparkR JVM backend. +#' +#' @param x A StructField object +#' @param ... further arguments passed to or from other methods print.structField <- function(x, ...) { cat(x$print) } \ No newline at end of file From dfa119bbdbc091af52d14710b26a7dd8a615193c Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 27 Feb 2015 00:18:54 -0500 Subject: [PATCH 500/687] Improve the coverage of processClosure. --- pkg/R/utils.R | 114 ++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 50 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 88d187461b197..d04fc52f58735 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -295,7 +295,8 @@ convertEnvsToList <- function(keys, vals) { # param # node The current AST node in the traversal. # oldEnv The original function environment. -# argNames The argument names of the function. +# argNames A character vector of parameters of the function. Their values are +# passed in as arguments, and not included in the closure. # newEnv A new function environment to store necessary function dependencies. processClosure <- function(node, oldEnv, argNames, newEnv) { nodeLen <- length(node) @@ -304,39 +305,46 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { } if (nodeLen > 1 && typeof(node) == "language") { # Recursive case: current AST node is an internal node, check for its children. - nodeChar <- as.character(node[[1]]) - switch(nodeChar, - "{" = { # Start of a function body. - for (i in 2:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) - } - }, - "<-" = { # Assignment. - defVar <- node[[2]] - if (length(defVar) == 1 && typeof(defVar) == "symbol") { - # Add the defined variable name into .defVars. - assign(".defVars", - c(get(".defVars", envir = .sparkREnv), as.character(defVar)), - envir = .sparkREnv) - } - for (i in 3:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) - } - }, - "function" = { # Function definition. - newArgs <- names(node[[2]]) - argNames <- c(argNames, newArgs) # Add parameter names. - for (i in 3:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) - } - }, - { - for (i in 1:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) - } - }) - } else if (nodeLen == 1 && typeof(node) == "symbol") { - # Base case: current AST node is a leaf node and a symbol. + if (length(node[[1]]) > 1) { + for (i in 1:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + } else { # if node[[1]] is length of 1, might be an R primitive. + nodeChar <- as.character(node[[1]]) + switch(nodeChar, + "{" = { # Start of a function body. + for (i in 2:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + }, + "<-" = { # Assignment. + defVar <- node[[2]] + if (length(defVar) == 1 && typeof(defVar) == "symbol") { + # Add the defined variable name into .defVars. + assign(".defVars", + c(get(".defVars", envir = .sparkREnv), as.character(defVar)), + envir = .sparkREnv) + } + for (i in 3:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + }, + "function" = { # Function definition. + newArgs <- names(node[[2]]) + argNames <- c(argNames, newArgs) # Add parameter names. + for (i in 3:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + }, + { + for (i in 1:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + }) + } + } else if (nodeLen == 1 && + (typeof(node) == "symbol" || typeof(node) == "language")) { + # Base case: current AST node is a leaf node and a symbol or a function call. nodeChar <- as.character(node) if (!nodeChar %in% argNames && # Not a function parameter or function local variable. !nodeChar %in% get(".defVars", envir = .sparkREnv)) { @@ -344,23 +352,29 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { topEnv <- parent.env(.GlobalEnv) # Search in function environment, and function's enclosing environments # up to global environment. There is no need to look into package environments - # above the global or namespace environment below the global, as they are - # assumed to be loaded on workers. - while (!identical(func.env, topEnv) && !isNamespace(func.env)) { - # Set parameter 'inherits' to FALSE since we do not need to search in - # attached package environments. - if (exists(nodeChar, envir=func.env, inherits = FALSE)) { - obj <- get(nodeChar, envir=func.env) - if (is.function(obj)) { - # if the node is a function call, recursively clean its closure. - obj <- cleanClosure(obj) + # above the global or namespace environment that is not SparkR below the global, + # as they are assumed to be loaded on workers. + while (!identical(func.env, topEnv)) { + # Namespaces other than "SparkR" will not be searched. + if (!isNamespace(func.env) || getNamespaceName(func.env) == "SparkR") { + # Set parameter 'inherits' to FALSE since we do not need to search in + # attached package environments. + if (exists(nodeChar, envir = func.env, inherits = FALSE)) { + if (!isNamespace(func.env) || + !nodeChar %in% getNamespaceExports("SparkR")) { # Only include SparkR internals. + obj <- get(nodeChar, envir = func.env) + if (is.function(obj)) { + # if the node is a function call, recursively clean its closure. + obj <- cleanClosure(obj) + } + assign(nodeChar, obj, envir = newEnv) + break + } } - assign(nodeChar, obj, envir = newEnv) - break - } else { - # Continue to search in enclosure. - func.env <- parent.env(func.env) } + + # Continue to search in enclosure. + func.env <- parent.env(func.env) } } } @@ -372,7 +386,7 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { # param # func A function whose closure needs to be captured. # return value -# a new function that has an correct environment (closure). +# a new version of func that has an correct environment (closure). cleanClosure <- function(func) { if (is.function(func)) { newEnv <- new.env(parent = .GlobalEnv) From 083c89fbbb961fc7eb3eac3fa93d92fbb89d2586 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 26 Feb 2015 23:37:53 -0600 Subject: [PATCH 501/687] Remove commented lines an unused import --- .../edu/berkeley/cs/amplab/sparkr/SerDe.scala | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 9b10214abb2b3..5e6cc0bf5e931 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -4,7 +4,6 @@ import scala.collection.JavaConversions._ import java.io.DataInputStream import java.io.DataOutputStream -import org.apache.spark.sql.types.{StructField, StructType} /** * Utility functions to serialize, deserialize objects to / from R @@ -282,24 +281,6 @@ object SerDe { out.writeInt(value.length) value.foreach(v => writeBytes(out, v)) } - - // def writeStructType(out: DataOutputStream, value: StructType) { - // // Write a StructType as a list of lists in R - // val fields = value.fields //Array[StructField] - // out.writeInt(value.length) // Number of fields - // fields.foreach { v => - // writeStructField(out, v) - // } - // } - - // def writeStructField(out: DataOutputStream, value: StructField) { - // // Write the contents of a single StructField as a list - // val contents = Seq(value.name, value.dataType.typeName, value.nullable) - // out.writeInt(contents.length) - // contents.foreach { t => - // writeObject(out, t.asInstanceOf[Object]) - // } - // } } object SerializationFormats { From 50c74b1cbeab5f3d48a0ddd2655a5c846455e351 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 26 Feb 2015 21:56:21 -0800 Subject: [PATCH 502/687] address comments --- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 528aa2a3984c8..54680a0708b61 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -30,6 +30,10 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( override def compute(split: Partition, context: TaskContext): Iterator[U] = { + // The parent may be also an RRDD, so we should launch it first. + val parentIterator = firstParent[T].iterator(split, context) + + // we expect two connections val serverSocket = new ServerSocket(0, 2) val listenPort = serverSocket.getLocalPort() @@ -38,14 +42,13 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( val proc = pb.start() val errThread = startStdoutThread(proc) - // We use two socket ot separate input and output, then it's easy to manage + // We use two sockets to separate input and output, then it's easy to manage // the lifecycle of them to avoid deadlock. // TODO: optimize it to use one socket // the socket used to send out the input of task serverSocket.setSoTimeout(10000) val inSocket = serverSocket.accept() - val parentIterator = firstParent[T].iterator(split, context) startStdinThread(inSocket.getOutputStream(), parentIterator, split.index) // the socket used to receive the output of task @@ -164,18 +167,15 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(1) } - if (parentSerialized) { - for (elem <- iter) { + for (elem <- iter) { + if (parentSerialized) { val elemArr = elem.asInstanceOf[Array[Byte]] dataOut.writeInt(elemArr.length) dataOut.write(elemArr, 0, elemArr.length) - } - } else { - for (elem <- iter) { + } else { printOut.println(elem) } } - stream.flush() } catch { // TODO: We should propogate this error to the task thread From e7c56d65316dfa177cfe585bcc192fdda2ebf26a Mon Sep 17 00:00:00 2001 From: lythesia Date: Fri, 27 Feb 2015 22:23:27 +0800 Subject: [PATCH 503/687] fix random partition key --- pkg/R/RDD.R | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 111c1ffa052d2..ae1f5d33e1e36 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1095,10 +1095,11 @@ setMethod("coalesce", if (shuffle || numPartitions > SparkR::numPartitions(x)) { func <- function(s, part) { set.seed(s) # split as seed - lapply(part, - function(v) { - k <- as.integer(runif(1, 0, numPartitions)) - list(k, v) + start <- as.integer(runif(1, 0, numPartitions)) + lapply(seq_along(part), + function(i) { + pos <- (start + i) %% numPartitions + list(pos, part[[i]]) }) } shuffled <- lapplyPartitionsWithIndex(x, func) From 3351afd42a9c88ef602e1ed325a8d8814064716a Mon Sep 17 00:00:00 2001 From: hlin09 Date: Fri, 27 Feb 2015 10:07:41 -0500 Subject: [PATCH 504/687] Replaces getDependencies with cleanClosure, to serialize UDFs to workers. --- pkg/R/RDD.R | 10 +++--- pkg/R/pairRDD.R | 9 ++--- pkg/R/utils.R | 34 ------------------- pkg/inst/tests/test_rdd.R | 5 ++- pkg/inst/worker/worker.R | 18 ++++------ .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 31 +++++++---------- 6 files changed, 30 insertions(+), 77 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index e50dfed02f6c7..ce03623801f79 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -110,7 +110,6 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), computeFunc <- function(split, part) { rdd@func(split, part) } - serializedFuncArr <- serialize("computeFunc", connection = NULL) packageNamesArr <- serialize(.sparkREnv[[".packages"]], connection = NULL) @@ -118,16 +117,15 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), broadcastArr <- lapply(ls(.broadcastNames), function(name) { get(name, .broadcastNames) }) - depsBin <- getDependencies(computeFunc) + serializedFuncArr <- serialize(computeFunc, connection = NULL) prev_jrdd <- rdd@prev_jrdd if (dataSerialization) { rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", callJMethod(prev_jrdd, "rdd"), - serializedFuncArr, rdd@env$prev_serialized, - depsBin, + serializedFuncArr, packageNamesArr, as.character(.sparkREnv[["libname"]]), broadcastArr, @@ -135,9 +133,8 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), } else { rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", callJMethod(prev_jrdd, "rdd"), - serializedFuncArr, rdd@env$prev_serialized, - depsBin, + serializedFuncArr, packageNamesArr, as.character(.sparkREnv[["libname"]]), broadcastArr, @@ -610,6 +607,7 @@ setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { setMethod("lapplyPartitionsWithIndex", signature(X = "RDD", FUN = "function"), function(X, FUN) { + FUN <- cleanClosure(FUN) closureCapturingFunc <- function(split, part) { FUN(split, part) } diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index a54c1abe01b47..2cd5d83cf383b 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -209,10 +209,8 @@ setMethod("partitionBy", # partitionFunc <- hashCode #} - depsBinArr <- getDependencies(partitionFunc) - - serializedHashFuncBytes <- serialize(as.character(substitute(partitionFunc)), - connection = NULL) + partitionFunc <- cleanClosure(partitionFunc) + serializedHashFuncBytes <- serialize(partitionFunc, connection = NULL) packageNamesArr <- serialize(.sparkREnv$.packages, connection = NULL) @@ -226,9 +224,8 @@ setMethod("partitionBy", pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", callJMethod(jrdd, "rdd"), as.integer(numPartitions), - serializedHashFuncBytes, x@env$serialized, - depsBinArr, + serializedHashFuncBytes, packageNamesArr, as.character(.sparkREnv$libname), broadcastArr, diff --git a/pkg/R/utils.R b/pkg/R/utils.R index d04fc52f58735..523f14116f414 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -93,40 +93,6 @@ isSparkFunction <- function(name) { packageName(environment(fun)) == "SparkR" } -# Serialize the dependencies of the given function and return them as a raw -# vector. Filters out RDDs before serializing the dependencies -getDependencies <- function(name) { - varsToSave <- c() - closureEnv <- environment(name) - - currentEnv <- closureEnv - while (TRUE) { - # Don't serialize namespaces - if (!isNamespace(currentEnv)) { - varsToSave <- c(varsToSave, ls(currentEnv)) - } - - # Everything below globalenv are packages, search path stuff etc. - if (identical(currentEnv, globalenv())) - break - currentEnv <- parent.env(currentEnv) - } - filteredVars <- Filter(function(x) { !isRDD(x, closureEnv) }, varsToSave) - - # TODO: A better way to exclude variables that have been broadcast - # would be to actually list all the variables used in every function using - # `all.vars` and then walking through functions etc. - filteredVars <- Filter( - function(x) { !exists(x, .broadcastNames, inherits = FALSE) }, - filteredVars) - - rc <- rawConnection(raw(), 'wb') - save(list = filteredVars, file = rc, envir = closureEnv) - binData <- rawConnectionValue(rc) - close(rc) - binData -} - #' Compute the hashCode of an object #' #' Java-style function to compute the hashCode for the given object. Returns diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index f0c00d71d076c..3b131fca94bef 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -86,7 +86,10 @@ test_that("several transformations on RDD (a benchmark on PipelinedRDD)", { part <- as.list(unlist(part) * split + i) }) rdd2 <- lapply(rdd2, function(x) x + x) - collect(rdd2) + actual <- collect(rdd2) + expected <- list(24, 24, 24, 24, 24, + 168, 170, 172, 174, 176) + expect_equal(actual, expected) }) test_that("PipelinedRDD support actions: cache(), persist(), unpersist(), checkpoint()", { diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index c5457adcbc54d..f427f8572b5b6 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -21,10 +21,6 @@ inputCon <- file(inFileName, open = "rb") # read the index of the current partition inside the RDD splitIndex <- SparkR:::readInt(inputCon) -# read the function; if used for pairwise RRDD, this is the hash function. -execLen <- SparkR:::readInt(inputCon) -execFunctionName <- unserialize(SparkR:::readRawLen(inputCon, execLen)) - # read the isInputSerialized bit flag isInputSerialized <- SparkR:::readInt(inputCon) @@ -42,11 +38,11 @@ for (pkg in packageNames) { } # read function dependencies -depsLen <- SparkR:::readInt(inputCon) -if (depsLen > 0) { - execFunctionDeps <- SparkR:::readRawLen(inputCon, depsLen) - # load the dependencies into current environment - load(rawConnection(execFunctionDeps, open='rb')) +funcLen <- SparkR:::readInt(inputCon) +if (funcLen > 0) { + computeFunc <- unserialize(SparkR:::readRawLen(inputCon, funcLen)) + env <- environment(computeFunc) + parent.env(env) <- .GlobalEnv # Attach under global environment. } # Read and set broadcast variables @@ -74,7 +70,7 @@ if (isEmpty != 0) { } else { data <- readLines(inputCon) } - output <- do.call(execFunctionName, list(splitIndex, data)) + output <- computeFunc(splitIndex, data) if (isOutputSerialized) { SparkR:::writeRawSerialize(outputCon, output) } else { @@ -93,7 +89,7 @@ if (isEmpty != 0) { # Step 1: hash the data to an environment hashTupleToEnvir <- function(tuple) { # NOTE: execFunction is the hash function here - hashVal <- do.call(execFunctionName, list(tuple[[1]])) + hashVal <- computeFunc(tuple[[1]]) bucket <- as.character(hashVal %% numPartitions) acc <- res[[bucket]] # Create a new accumulator diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 74d5837fb9384..d20e40eaf4ef4 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -15,10 +15,9 @@ import org.apache.spark.rdd.RDD private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], numPartitions: Int, - func: Array[Byte], parentSerialized: Boolean, dataSerialized: Boolean, - functionDependencies: Array[Byte], + func: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Broadcast[Object]]) @@ -125,9 +124,6 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(splitIndex) - dataOut.writeInt(func.length) - dataOut.write(func, 0, func.length) - // R worker process input serialization flag dataOut.writeInt(if (parentSerialized) 1 else 0) // R worker process output serialization flag @@ -136,8 +132,8 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(packageNames.length) dataOut.write(packageNames, 0, packageNames.length) - dataOut.writeInt(functionDependencies.length) - dataOut.write(functionDependencies, 0, functionDependencies.length) + dataOut.writeInt(func.length) + dataOut.write(func, 0, func.length) dataOut.writeInt(broadcastVars.length) broadcastVars.foreach { broadcast => @@ -205,14 +201,13 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( private class PairwiseRRDD[T: ClassTag]( parent: RDD[T], numPartitions: Int, - hashFunc: Array[Byte], parentSerialized: Boolean, - functionDependencies: Array[Byte], + hashFunc: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object]) - extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, parentSerialized, - true, functionDependencies, packageNames, rLibDir, + extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, parentSerialized, + true, hashFunc, packageNames, rLibDir, broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ @@ -250,14 +245,13 @@ private class PairwiseRRDD[T: ClassTag]( */ private class RRDD[T: ClassTag]( parent: RDD[T], - func: Array[Byte], parentSerialized: Boolean, - functionDependencies: Array[Byte], + func: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object]) - extends BaseRRDD[T, Array[Byte]](parent, -1, func, parentSerialized, - true, functionDependencies, packageNames, rLibDir, + extends BaseRRDD[T, Array[Byte]](parent, -1, parentSerialized, + true, func, packageNames, rLibDir, broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ @@ -293,14 +287,13 @@ private class RRDD[T: ClassTag]( */ private class StringRRDD[T: ClassTag]( parent: RDD[T], - func: Array[Byte], parentSerialized: Boolean, - functionDependencies: Array[Byte], + func: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object]) - extends BaseRRDD[T, String](parent, -1, func, parentSerialized, - false, functionDependencies, packageNames, rLibDir, + extends BaseRRDD[T, String](parent, -1, parentSerialized, + false, func, packageNames, rLibDir, broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: BufferedReader = _ From e776324ccbfc074aec317c898b44bd791eef4017 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Fri, 27 Feb 2015 09:52:41 -0800 Subject: [PATCH 505/687] fix import --- pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 54680a0708b61..a28d1dcd8636a 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -7,13 +7,13 @@ import java.util.{Map => JMap} import scala.collection.JavaConversions._ import scala.io.Source import scala.reflect.ClassTag +import scala.util.Try import org.apache.spark.{SparkEnv, Partition, SparkException, TaskContext, SparkConf} import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD -import scala.util.Try private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], From 222e06b47e3278e093e587ccf07521c1b8c9ea30 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Fri, 27 Feb 2015 12:37:24 -0600 Subject: [PATCH 506/687] Lazy evaluation and formatting changes --- pkg/DESCRIPTION | 2 +- pkg/R/DataFrame.R | 20 +++++++++----------- pkg/R/{types.R => SQLTypes.R} | 26 +++++++++++++------------- pkg/inst/tests/test_sparkSQL.R | 8 ++++---- 4 files changed, 27 insertions(+), 29 deletions(-) rename pkg/R/{types.R => SQLTypes.R} (53%) diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 846ab2cf80db7..0dad4ad2a2088 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -16,7 +16,7 @@ Description: R frontend for Spark License: Apache License (== 2.0) Collate: 'jobj.R' - 'types.R' + 'SQLTypes.R' 'RDD.R' 'pairRDD.R' 'DataFrame.R' diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 69056bfbdd288..2519b0595eeb7 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -1,6 +1,6 @@ # DataFrame.R - DataFrame class and methods implemented in S4 OO classes -#' @include jobj.R types.R RDD.R pairRDD.R +#' @include jobj.R SQLTypes.R RDD.R pairRDD.R NULL setOldClass("jobj") @@ -12,7 +12,7 @@ setOldClass("jobj") #' @seealso jsonFile, table #' #' @param env An R environment that stores bookkeeping states of the DataFrame -#' @param sdf A Java object reference to the backing Scala SchemaRDD +#' @param sdf A Java object reference to the backing Scala DataFrame #' @export setClass("DataFrame", @@ -64,8 +64,7 @@ setMethod("printSchema", #' Get schema object #' -#' Returns the schema of this DataFrame as a list of named lists. Each named -#' list contains the elements of the StructField type, i.e. name, dataType, nullable. +#' Returns the schema of this DataFrame as a structType object. #' #' @param x A SparkSQL DataFrame #' @@ -105,13 +104,13 @@ setMethod("schema", #' dtypes(df) #'} -setGeneric("dtypes", function(x) {standardGeneric("dtypes") }) +setGeneric("dtypes", function(x) { standardGeneric("dtypes") }) setMethod("dtypes", signature(x = "DataFrame"), function(x) { - lapply(schema(x)$fields, function(f) { - field <- c(f$name, f$dataType.simpleString) + lapply(schema(x)$fields(), function(f) { + c(f$name(), f$dataType.simpleString()) }) }) @@ -136,8 +135,8 @@ setGeneric("columns", function(x) {standardGeneric("columns") }) setMethod("columns", signature(x = "DataFrame"), function(x) { - sapply(schema(x)$fields, function(f) { - f$name + sapply(schema(x)$fields(), function(f) { + f$name() }) }) @@ -173,8 +172,7 @@ setGeneric("registerTempTable", function(x, tableName) { standardGeneric("regist setMethod("registerTempTable", signature(x = "DataFrame", tableName = "character"), function(x, tableName) { - sdf <- x@sdf - callJMethod(sdf, "registerTempTable", tableName) + callJMethod(x@sdf, "registerTempTable", tableName) }) #' Cache diff --git a/pkg/R/types.R b/pkg/R/SQLTypes.R similarity index 53% rename from pkg/R/types.R rename to pkg/R/SQLTypes.R index ce8c045d9d362..a51da78a7831e 100644 --- a/pkg/R/types.R +++ b/pkg/R/SQLTypes.R @@ -1,10 +1,10 @@ -# Utility functions for handling Spark DataTypes. +# Utility functions for handling SparkSQL DataTypes. # Handler for StructType structType <- function(st) { obj <- structure(new.env(parent = emptyenv()), class = "structType") obj$jobj <- st - obj$fields <- lapply(SparkR:::callJMethod(st, "fields"), structField) + obj$fields <- function() { lapply(callJMethod(st, "fields"), structField) } obj } @@ -16,7 +16,7 @@ structType <- function(st) { #' @param x A StructType object #' @param ... further arguments passed to or from other methods print.structType <- function(x, ...) { - fieldsList <- lapply(x$fields, function(i) i$print) + fieldsList <- lapply(x$fields(), function(i) { i$print() }) print(fieldsList) } @@ -24,14 +24,14 @@ print.structType <- function(x, ...) { structField <- function(sf) { obj <- structure(new.env(parent = emptyenv()), class = "structField") obj$jobj <- sf - obj$name <- SparkR:::callJMethod(sf, "name") - obj$dataType <- SparkR:::callJMethod(sf, "dataType") - obj$dataType.toString <- SparkR:::callJMethod(obj$dataType, "toString") - obj$dataType.simpleString <- SparkR:::callJMethod(obj$dataType, "simpleString") - obj$nullable <- SparkR:::callJMethod(sf, "nullable") - obj$print <- paste("StructField(", - paste(obj$name, obj$dataType.toString, obj$nullable, sep = ", "), - ")", sep = "") + obj$name <- function() { callJMethod(sf, "name") } + obj$dataType <- function() { callJMethod(sf, "dataType") } + obj$dataType.toString <- function() { callJMethod(obj$dataType(), "toString") } + obj$dataType.simpleString <- function() { callJMethod(obj$dataType(), "simpleString") } + obj$nullable <- function() { callJMethod(sf, "nullable") } + obj$print <- function() { paste("StructField(", + paste(obj$name(), obj$dataType.toString(), obj$nullable(), sep = ", "), + ")", sep = "") } obj } @@ -43,5 +43,5 @@ structField <- function(sf) { #' @param x A StructField object #' @param ... further arguments passed to or from other methods print.structField <- function(x, ...) { - cat(x$print) -} \ No newline at end of file + cat(x$print()) +} diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 91f194a706a01..21032a78494f8 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -165,10 +165,10 @@ test_that("cache(), persist(), and unpersist() on a DataFrame", { test_that("schema(), dtypes(), columns(), names() return the correct values/format", { df <- jsonFile(sqlCtx, jsonPath) testSchema <- schema(df) - expect_true(length(testSchema$fields) == 2) - expect_true(testSchema$fields[[1]]$dataType.toString == "IntegerType") - expect_true(testSchema$fields[[2]]$dataType.simpleString == "string") - expect_true(testSchema$fields[[1]]$name == "age") + expect_true(length(testSchema$fields()) == 2) + expect_true(testSchema$fields()[[1]]$dataType.toString() == "IntegerType") + expect_true(testSchema$fields()[[2]]$dataType.simpleString() == "string") + expect_true(testSchema$fields()[[1]]$name() == "age") testTypes <- dtypes(df) expect_true(length(testTypes[[1]]) == 2) From 5ef66fb8b03a635e309a5004a1b411b50f63ef9c Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Fri, 27 Feb 2015 14:33:07 -0800 Subject: [PATCH 507/687] send back the port via temporary file --- pkg/R/sparkR.R | 24 ++++++++++++------- .../cs/amplab/sparkr/SparkRBackend.scala | 16 +++++++------ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 4e89d823af876..58155a57e0e80 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -119,30 +119,38 @@ sparkR.init <- function( if (sparkRExistingPort != "") { sparkRBackendPort <- sparkRExistingPort } else { - # TODO: test the random port and retry, or use httpuv:::startServer - callbackPort = sample(40000, 1) + 10000 + path <- tempfile(pattern = "backend_port") if (Sys.getenv("SPARKR_USE_SPARK_SUBMIT", "") == "") { launchBackend(classPath = cp, mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args = as.character(callbackPort), + args = path, javaOpts = paste("-Xmx", sparkMem, sep = "")) } else { # TODO: We should deprecate sparkJars and ask users to add it to the # command line (using --jars) which is picked up by SparkSubmit launchBackendSparkSubmit( mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", - args = as.character(callbackPort), + args = path, appJar = .sparkREnv$assemblyJarPath, sparkHome = sparkHome, sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "")) } - sock <- socketConnection(port = callbackPort, server = TRUE, open = 'rb', - blocking = TRUE, timeout = 10) - sparkRBackendPort <- readInt(sock) + for (i in 1:100) { + if (file.exists(path)) { + break + } + Sys.sleep(0.1) + } + if (!file.exists(path)) { + stop("JVM is not ready after 10 seconds") + } + f <- file(path, open='rb') + sparkRBackendPort <- readInt(f) + close(f) + file.remove(path) if (length(sparkRBackendPort) == 0) { stop("JVM failed to launch") } - close(sock) } .sparkREnv$sparkRBackendPort <- sparkRBackendPort diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index 111b7cf678d03..1f3f25859f4a7 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -1,6 +1,6 @@ package edu.berkeley.cs.amplab.sparkr -import java.io.{DataOutputStream, IOException} +import java.io.{File, FileOutputStream, DataOutputStream, IOException} import java.net.{InetSocketAddress, Socket} import java.util.concurrent.TimeUnit @@ -78,20 +78,22 @@ class SparkRBackend { object SparkRBackend { def main(args: Array[String]) { if (args.length < 1) { - System.err.println("Usage: SparkRBackend ") + System.err.println("Usage: SparkRBackend ") System.exit(-1) } val sparkRBackend = new SparkRBackend() try { // bind to random port val boundPort = sparkRBackend.init() - val callbackPort = args(0).toInt - val callbackSocket = new Socket("localhost", callbackPort) - val dos = new DataOutputStream(callbackSocket.getOutputStream) + // tell the R process via temporary file + val path = args(0) + val f = new File(path + ".tmp") + val output = new FileOutputStream(f) + val dos = new DataOutputStream(output) dos.writeInt(boundPort) dos.close() - callbackSocket.close() - + output.close() + f.renameTo(new File(path)) sparkRBackend.run() } catch { case e: IOException => From 2808dcfd2c0630625a5aa723cf0dbce642cd8f95 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Fri, 27 Feb 2015 17:54:17 -0600 Subject: [PATCH 508/687] Three more DataFrame methods - `repartition` - `distinct` - `sampleDF` --- pkg/NAMESPACE | 3 ++ pkg/R/DataFrame.R | 90 ++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 21 ++++++++ 3 files changed, 114 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index f876c1a717844..9a33fcd62382b 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -85,6 +85,7 @@ importFrom(methods, setGeneric, setMethod, setOldClass) exportClasses("DataFrame") exportMethods("columns", + "distinct", "dtypes", "first", "head", @@ -92,6 +93,8 @@ exportMethods("columns", "names", "printSchema", "registerTempTable", + "repartition", + "sampleDF", "schema", "toRDD") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 2519b0595eeb7..6fca6720d3e9e 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -253,6 +253,96 @@ setMethod("unpersist", x }) +#' Repartition +#' +#' Return a new DataFrame that has exactly numPartitions partitions. +#' +#' @param x A SparkSQL DataFrame +#' @param numPartitions The number of partitions to use. +#' @rdname repartition +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' newDF <- repartition(df, 2L) +#'} + +setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartition") }) + +#' @rdname repartition +#' @export +setMethod("repartition", + signature(x = "DataFrame", numPartitions = "integer"), + function(x, numPartitions) { + sdf <- callJMethod(x@sdf, "repartition", as.integer(numPartitions)) + dataFrame(sdf) + }) + +#' Distinct +#' +#' Return a new DataFrame containing the distinct rows in this DataFrame. +#' +#' @param x A SparkSQL DataFrame +#' @rdname distinct +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' distinctDF <- distinct(df) +#'} + +setMethod("distinct", + signature(x = "DataFrame"), + function(x) { + sdf <- callJMethod(x@sdf, "distinct") + dataFrame(sdf) + }) + +#' SampleDF +#' +#' Return a sampled subset of this DataFrame using a random seed. +#' +#' @param x A SparkSQL DataFrame +#' @param withReplacement Sampling with replacement or not +#' @param fraction The (rough) sample target fraction +#' @param seed Randomness seed value +#' @rdname sampleDF +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) +#' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) +#'} + +setGeneric("sampleDF", + function(x, withReplacement, fraction, seed) { + standardGeneric("sampleDF") + }) + +#' @rdname sampleDF +#' @export + +setMethod("sampleDF", + # TODO : Figure out how to send integer as java.lang.Long to JVM so + # we can send seed as an argument through callJMethod + signature(x = "DataFrame", withReplacement = "logical", + fraction = "numeric"), + function(x, withReplacement, fraction) { + if (fraction < 0.0) stop(cat("Negative fraction value:", fraction)) + sdf <- callJMethod(x@sdf, "sample", withReplacement, fraction) + dataFrame(sdf) + }) + #' Count #' #' Returns the number of rows in a DataFrame diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 21032a78494f8..1fe5a3ef85fc7 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -197,4 +197,25 @@ test_that("head() and first() return the correct data", { expect_true(nrow(testFirst) == 1) }) +test_that("distinct() on DataFrames", { + lines <- c("{\"name\":\"Michael\"}", + "{\"name\":\"Andy\", \"age\":30}", + "{\"name\":\"Justin\", \"age\":19}", + "{\"name\":\"Justin\", \"age\":19}") + jsonPathWithDup <- tempfile(pattern="sparkr-test", fileext=".tmp") + writeLines(lines, jsonPathWithDup) + + df <- jsonFile(sqlCtx, jsonPathWithDup) + uniques <- distinct(df) + expect_true(inherits(uniques, "DataFrame")) + expect_true(count(uniques) == 3) +}) + +test_that("sampleDF on a DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) + sampled <- sampleDF(df, FALSE, 1.0) + expect_equal(nrow(collect(sampled)), count(df)) + expect_true(inherits(sampled, "DataFrame")) +}) + unlink(jsonPath) From cad0f0ca8c11ec5b3412b9926c92e89297a31b0a Mon Sep 17 00:00:00 2001 From: cafreeman Date: Fri, 27 Feb 2015 18:46:58 -0600 Subject: [PATCH 509/687] Fix docs and indents --- pkg/R/DataFrame.R | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 6fca6720d3e9e..d4400ba6bbb70 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -279,7 +279,7 @@ setMethod("repartition", function(x, numPartitions) { sdf <- callJMethod(x@sdf, "repartition", as.integer(numPartitions)) dataFrame(sdf) - }) + }) #' Distinct #' @@ -302,7 +302,7 @@ setMethod("distinct", function(x) { sdf <- callJMethod(x@sdf, "distinct") dataFrame(sdf) - }) + }) #' SampleDF #' @@ -311,7 +311,6 @@ setMethod("distinct", #' @param x A SparkSQL DataFrame #' @param withReplacement Sampling with replacement or not #' @param fraction The (rough) sample target fraction -#' @param seed Randomness seed value #' @rdname sampleDF #' @export #' @examples @@ -320,8 +319,8 @@ setMethod("distinct", #' sqlCtx <- sparkRSQL.init(sc) #' path <- "path/to/file.json" #' df <- jsonFile(sqlCtx, path) -#' collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) -#' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) +#' collect(sampleDF(df, FALSE, 0.5)) +#' collect(sampleDF(df, TRUE, 0.5)) #'} setGeneric("sampleDF", From 27dd3a09ce37d8afe385ccda35b425ac5655905c Mon Sep 17 00:00:00 2001 From: lythesia Date: Sat, 28 Feb 2015 10:00:41 +0800 Subject: [PATCH 510/687] modify tests for repartition --- pkg/R/RDD.R | 4 ++-- pkg/inst/tests/test_rdd.R | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index ae1f5d33e1e36..abd57e5293a54 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1103,8 +1103,8 @@ setMethod("coalesce", }) } shuffled <- lapplyPartitionsWithIndex(x, func) - reparted <- partitionBy(shuffled, numPartitions) - values(reparted) + repartitioned <- partitionBy(shuffled, numPartitions) + values(repartitioned) } else { jrdd <- callJMethod(getJRDD(x), "coalesce", numPartitions, shuffle) RDD(jrdd) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index ffa749171bf16..50464c1cd22ba 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -268,17 +268,21 @@ test_that("keyBy on RDDs", { }) test_that("repartition/coalesce on RDDs", { - rdd <- parallelize(sc, 1:10, 3L) - expect_equal(numPartitions(rdd), 3L) + rdd <- parallelize(sc, 1:20, 4L) # each partition contains 5 elements - nrdd <- repartition(rdd, 2L) - expect_equal(numPartitions(nrdd), 2L) + # repartition + r1 <- repartition(rdd, 2) + count <- length(collectPartition(r1, 0L)) + expect_true(count >= 8 && count <= 12) - nrdd2 <- repartition(rdd, 5L) - expect_equal(numPartitions(nrdd2), 5L) + r2 <- repartition(rdd, 6) + count <- length(collectPartition(r2, 0L)) + expect_true(count >=0 && count <= 4) - nrdd3 <- coalesce(rdd, 1L) - expect_equal(numPartitions(nrdd3), 1L) + # coalesce + r3 <- coalesce(rdd, 1) + count <- length(collectPartition(r3, 0L)) + expect_equal(count, 20) }) test_that("sortBy() on RDDs", { From 889c265ee41f8faf3ee72e253cf019cb3a9a65a5 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Fri, 27 Feb 2015 20:08:18 -0600 Subject: [PATCH 511/687] numToInt utility function Added `numToInt` converter function for allowing numeric arguments when integers are required. Updated `repartition`. --- pkg/R/DataFrame.R | 4 ++-- pkg/R/utils.R | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index d4400ba6bbb70..3a98fca070e4a 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -275,9 +275,9 @@ setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartit #' @rdname repartition #' @export setMethod("repartition", - signature(x = "DataFrame", numPartitions = "integer"), + signature(x = "DataFrame", numPartitions = "numeric"), function(x, numPartitions) { - sdf <- callJMethod(x@sdf, "repartition", as.integer(numPartitions)) + sdf <- callJMethod(x@sdf, "repartition", numToInt(numPartitions)) dataFrame(sdf) }) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 3ceb928ea9cac..55c5d85234533 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -326,3 +326,11 @@ getStorageLevel <- function(newLevel = c("DISK_ONLY", "OFF_HEAP" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "OFF_HEAP")) } +# Utility function for functions where an argument needs to be integer but we want to allow +# the user to type (for example) `5` instead of `5L` to avoid a confusing error message. +numToInt <- function(num) { + if (as.integer(num) != num) { + warning(paste("Coercing", as.list(sys.call())[[2]], "to integer.")) + } + as.integer(num) +} From 7b0d070bc0fd18e26d94dfd4dbcc500963faa5bb Mon Sep 17 00:00:00 2001 From: lythesia Date: Sat, 28 Feb 2015 10:10:35 +0800 Subject: [PATCH 512/687] keep partitions check --- pkg/inst/tests/test_rdd.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 50464c1cd22ba..7c138dd870e2e 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -272,15 +272,18 @@ test_that("repartition/coalesce on RDDs", { # repartition r1 <- repartition(rdd, 2) + expect_equal(numPartitions(r1), 2L) count <- length(collectPartition(r1, 0L)) expect_true(count >= 8 && count <= 12) r2 <- repartition(rdd, 6) + expect_equal(numPartitions(r2), 6L) count <- length(collectPartition(r2, 0L)) expect_true(count >=0 && count <= 4) # coalesce r3 <- coalesce(rdd, 1) + expect_equal(numPartitions(r3), 1L) count <- length(collectPartition(r3, 0L)) expect_equal(count, 20) }) From b0e7f731f4c64daac27a975a87b22c7276bbfe61 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Fri, 27 Feb 2015 20:28:08 -0600 Subject: [PATCH 513/687] Update `sampleDF` test --- pkg/R/DataFrame.R | 2 +- pkg/inst/tests/test_sparkSQL.R | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 3a98fca070e4a..9773598db578e 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -335,7 +335,7 @@ setMethod("sampleDF", # TODO : Figure out how to send integer as java.lang.Long to JVM so # we can send seed as an argument through callJMethod signature(x = "DataFrame", withReplacement = "logical", - fraction = "numeric"), + fraction = "numeric"), function(x, withReplacement, fraction) { if (fraction < 0.0) stop(cat("Negative fraction value:", fraction)) sdf <- callJMethod(x@sdf, "sample", withReplacement, fraction) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 1fe5a3ef85fc7..644dd1e5070e5 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -216,6 +216,8 @@ test_that("sampleDF on a DataFrame", { sampled <- sampleDF(df, FALSE, 1.0) expect_equal(nrow(collect(sampled)), count(df)) expect_true(inherits(sampled, "DataFrame")) + sampled2 <- sampleDF(df, FALSE, 0.1) + expect_true(count(sampled2) < 3) }) unlink(jsonPath) From ad0935ef12fc6639a6ce45f1860d0f62c07ae838 Mon Sep 17 00:00:00 2001 From: lythesia Date: Sat, 28 Feb 2015 10:50:34 +0800 Subject: [PATCH 514/687] minor fixes --- pkg/R/RDD.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index abd57e5293a54..12e4691e801e2 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1088,14 +1088,14 @@ setGeneric("coalesce", function(x, numPartitions, ...) { standardGeneric("coales setMethod("coalesce", signature(x = "RDD", numPartitions = "numeric"), function(x, numPartitions, shuffle = FALSE) { - if(as.integer(numPartitions) != numPartitions) { + if (as.integer(numPartitions) != numPartitions) { warning("Number of partitions should be an integer. Coercing it to integer.") } numPartitions <- as.integer(numPartitions) if (shuffle || numPartitions > SparkR::numPartitions(x)) { func <- function(s, part) { set.seed(s) # split as seed - start <- as.integer(runif(1, 0, numPartitions)) + start <- as.integer(sample(numPartitions, 1) - 1) lapply(seq_along(part), function(i) { pos <- (start + i) %% numPartitions From 0346e5fc907aab71aef122e6ddc1b96f93d9abbf Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Fri, 27 Feb 2015 23:05:42 -0800 Subject: [PATCH 515/687] address comment --- pkg/R/sparkRClient.R | 2 +- .../scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/R/sparkRClient.R b/pkg/R/sparkRClient.R index 4a06bb3364b50..1a747031586d2 100644 --- a/pkg/R/sparkRClient.R +++ b/pkg/R/sparkRClient.R @@ -2,7 +2,7 @@ # Creates a SparkR client connection object # if one doesn't already exist -connectBackend <- function(hostname, port, timeout = 6) { +connectBackend <- function(hostname, port, timeout = 6000) { if (exists(".sparkRcon", envir = .sparkREnv)) { if (isOpen(env[[".sparkRCon"]])) { cat("SparkRBackend client connection already exists\n") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index 1f3f25859f4a7..4cf7ac18f9425 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -88,11 +88,9 @@ object SparkRBackend { // tell the R process via temporary file val path = args(0) val f = new File(path + ".tmp") - val output = new FileOutputStream(f) - val dos = new DataOutputStream(output) + val dos = new DataOutputStream(new FileOutputStream(f)) dos.writeInt(boundPort) dos.close() - output.close() f.renameTo(new File(path)) sparkRBackend.run() } catch { From a00f5029279ca1e14afb4f1b63d91e946bddfd73 Mon Sep 17 00:00:00 2001 From: lythesia Date: Sat, 28 Feb 2015 15:43:58 +0800 Subject: [PATCH 516/687] fix indents --- pkg/R/RDD.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 12e4691e801e2..3a990a77ce531 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1089,11 +1089,11 @@ setMethod("coalesce", signature(x = "RDD", numPartitions = "numeric"), function(x, numPartitions, shuffle = FALSE) { if (as.integer(numPartitions) != numPartitions) { - warning("Number of partitions should be an integer. Coercing it to integer.") + warning("Number of partitions should be an integer. Coercing it to integer.") } numPartitions <- as.integer(numPartitions) if (shuffle || numPartitions > SparkR::numPartitions(x)) { - func <- function(s, part) { + func <- function(s, part) { set.seed(s) # split as seed start <- as.integer(sample(numPartitions, 1) - 1) lapply(seq_along(part), From 5c72e73fb9e1971b66e359687807490a8fdc4d40 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Sat, 28 Feb 2015 00:08:51 -0800 Subject: [PATCH 517/687] wait atmost 100 seconds --- pkg/R/sparkR.R | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 58155a57e0e80..a623d84812d17 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -135,11 +135,14 @@ sparkR.init <- function( sparkHome = sparkHome, sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "")) } - for (i in 1:100) { + # wait atmost 100 seconds for JVM to launch + wait <- 0.1 + for (i in 1:25) { + Sys.sleep(wait) if (file.exists(path)) { break } - Sys.sleep(0.1) + wait <- wait * 1.25 } if (!file.exists(path)) { stop("JVM is not ready after 10 seconds") From eb8ac119a0e266e656cbd3eeaf44c6722fd66045 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sat, 28 Feb 2015 00:35:20 -0800 Subject: [PATCH 518/687] Set Spark version 1.3.0 in Windows build --- pkg/src/Makefile.win | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/Makefile.win b/pkg/src/Makefile.win index c2f4b367ad0ea..2f77005fc9437 100644 --- a/pkg/src/Makefile.win +++ b/pkg/src/Makefile.win @@ -12,7 +12,7 @@ RESOURCE_DIR := src/main/resources SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) -SPARK_VERSION ?= 1.1.0 +SPARK_VERSION ?= 1.3.0 SPARK_HADOOP_VERSION ?= 1.0.4 SPARK_YARN_VERSION ?= 2.4.0 From abb4bb9da2cfc65ccc9d58f3e48cdf8e3ad20a68 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Sat, 28 Feb 2015 00:38:16 -0800 Subject: [PATCH 519/687] add Column and expression --- pkg/DESCRIPTION | 1 + pkg/NAMESPACE | 19 +++ pkg/R/DataFrame.R | 28 ++++- pkg/R/column.R | 108 ++++++++++++++++++ pkg/R/utils.R | 8 ++ pkg/inst/tests/test_sparkSQL.R | 55 ++++++--- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 4 + 7 files changed, 208 insertions(+), 15 deletions(-) create mode 100644 pkg/R/column.R diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 0dad4ad2a2088..69a1651961f08 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -20,6 +20,7 @@ Collate: 'RDD.R' 'pairRDD.R' 'DataFrame.R' + 'column.R' 'SQLContext.R' 'broadcast.R' 'context.R' diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index f876c1a717844..eaec2da1145bc 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -95,6 +95,25 @@ exportMethods("columns", "schema", "toRDD") +exportClasses("Column") + +exportMethods("asc", + "desc", + "last", + "lower", + "upper", + "abs", + "sqrt", + "min", + "max", + "sum", + "avg", + "alias", + "cast", + "countDistinct", + "approxCountDistinct", + "sumDistinct") + export("jsonFile", "parquetFile", "sql", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 2519b0595eeb7..d7a210d733acf 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -1,6 +1,6 @@ # DataFrame.R - DataFrame class and methods implemented in S4 OO classes -#' @include jobj.R SQLTypes.R RDD.R pairRDD.R +#' @include jobj.R SQLTypes.R RDD.R pairRDD.R column.R NULL setOldClass("jobj") @@ -494,3 +494,29 @@ setMethod("foreachPartition", rdd <- toRDD(x) foreachPartition(rdd, func) }) + + +############################## DSL ################################## + +setMethod("$", signature(x = "DataFrame"), + function(x, name) { + column(callJMethod(x@sdf, "col", name)) + }) + +setGeneric("select", function(df, col, ...) { standardGeneric("select") } ) + +setMethod("select", signature(df = "DataFrame", col = "character"), + function(df, col, ...) { + sdf <- callJMethod(df@sdf, "select", col, toSeq(...)) + dataFrame(sdf) + }) + +setMethod("select", signature(df = "DataFrame", col = "Column"), + function(df, col, ...) { + jcols <- lapply(list(col, ...), function(x) { + x@jc + }) + sdf <- callJMethod(df@sdf, "select", listToSeq(jcols)) + dataFrame(sdf) + }) + diff --git a/pkg/R/column.R b/pkg/R/column.R new file mode 100644 index 0000000000000..dedd1b1d63017 --- /dev/null +++ b/pkg/R/column.R @@ -0,0 +1,108 @@ +#' Column Class + +#' @include jobj.R +NULL + +setOldClass("jobj") + +#' @title S4 class that represents a DataFrame column + +#' @rdname column-class +#' +#' @param jc reference to JVM DataFrame column +#' @export +setClass("Column", + slots = list(jc = "jobj")) + +setMethod("initialize", "Column", function(.Object, jc) { + .Object@jc <- jc + .Object +}) + +column <- function(jc) { + new("Column", jc) +} + +# TODO: change Dsl to functions once update spark-sql +col <- function(x) { + column(callJStatic("org.apache.spark.sql.Dsl", "col", x)) +} + +alias <- function(col, name) { + column(callJMethod(col@jc, "as", name)) +} + +cast <- function(col, dataType) { + # TODO(davies): support DataType + if (class(dataType) == "character") { + column(callJMethod(col@jc, "cast", dataType)) + } +} + +#TODO(davies): like, rlike, startwith, substr, isNull, isNotNull, getField, getItem + +operators <- list( + "+" = "plus", "-" = "minus", "*" = "multiply", "/" = "divide", "%%" = "mod", + "==" = "equalTo", ">" = "gt", "<" = "lt", "!=" = "notEqual", "<=" = "leq", ">=" = "geq", + # we can not override `&&` and `||`, so use `&` and `|` instead + "&" = "and", "|" = "or" +) + +createOperator <- function(op) { + setMethod(op, + signature(e1 = "Column"), + function(e1, e2) { + if (class(e2) == "Column") { + e2 <- e2@jc + } + jc <- callJMethod(e1@jc, operators[[op]], e2) + column(jc) + }) +} + +for (op in names(operators)) { + createOperator(op) +} + + +createFunction <- function(name) { + setMethod(name, + signature(x = "Column"), + function(x) { + jc <- callJStatic("org.apache.spark.sql.Dsl", name, x@jc) + column(jc) + }) +} + +setGeneric("avg", function(x) { standardGeneric("avg") }) +setGeneric("last", function(x) { standardGeneric("last") }) +setGeneric("asc", function(x) { standardGeneric("asc") }) +setGeneric("desc", function(x) { standardGeneric("desc") }) +setGeneric("lower", function(x) { standardGeneric("lower") }) +setGeneric("upper", function(x) { standardGeneric("upper") }) + +Functions <- c("min", "max", "sum", "avg", "mean", "count", "abs", "sqrt", + "first", "last", "asc", "desc", "lower", "upper") + +for (name in Functions) { + createFunction(name) +} + +approxCountDistinct <- function(col, rsd) { + jc <- callJStatic("org.apache.spark.sql.Dsl", "approxCountDistinct", col@jc, rsd) + column(jc) +} + +countDistinct <- function(col, ...) { + jcol <- lapply(list(...), function (col) { + col@jc + }) + jc <- callJStatic("org.apache.spark.sql.Dsl", "countDistinct", col@jc, arrayToSeq(jcol)) + column(jc) +} + +sumDistinct <- function(col) { + jc <- callJStatic("org.apache.spark.sql.Dsl", "sumDistinct", x@jc) + column(jc) +} + diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 3ceb928ea9cac..5d223c723ce3a 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -326,3 +326,11 @@ getStorageLevel <- function(newLevel = c("DISK_ONLY", "OFF_HEAP" = SparkR:::callJStatic("org.apache.spark.storage.StorageLevel", "OFF_HEAP")) } +toSeq <- function(...) { + callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", list(...)) +} + +listToSeq <- function(l) { + callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", l) +} + diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 21032a78494f8..e35f6ba258f37 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -55,7 +55,7 @@ test_that("union on mixed serialization types correctly returns a byte RRDD", { # Byte RDD nums <- 1:10 rdd <- parallelize(sc, nums, 2L) - + # String RDD textLines <- c("Michael", "Andy, 30", @@ -63,16 +63,16 @@ test_that("union on mixed serialization types correctly returns a byte RRDD", { textPath <- tempfile(pattern="sparkr-textLines", fileext=".tmp") writeLines(textLines, textPath) textRDD <- textFile(sc, textPath) - + df <- jsonFile(sqlCtx, jsonPath) dfRDD <- toRDD(df) - + unionByte <- unionRDD(rdd, dfRDD) expect_true(inherits(unionByte, "RDD")) expect_true(getSerializedMode(unionByte) == "byte") expect_true(collect(unionByte)[[1]] == 1) expect_true(collect(unionByte)[[12]]$name == "Andy") - + unionString <- unionRDD(textRDD, dfRDD) expect_true(inherits(unionString, "RDD")) expect_true(getSerializedMode(unionString) == "byte") @@ -86,7 +86,7 @@ test_that("objectFile() works with row serialization", { dfRDD <- toRDD(df) saveAsObjectFile(dfRDD, objectPath) objectIn <- objectFile(sc, objectPath) - + expect_true(inherits(objectIn, "RDD")) expect_true(getSerializedMode(objectIn) == "byte") expect_true(collect(objectIn)[[2]]$age == 30) @@ -148,16 +148,16 @@ test_that("cache(), persist(), and unpersist() on a DataFrame", { expect_false(df@env$isCached) cache(df) expect_true(df@env$isCached) - + unpersist(df) expect_false(df@env$isCached) - + persist(df, "MEMORY_AND_DISK") expect_true(df@env$isCached) - + unpersist(df) expect_false(df@env$isCached) - + # make sure the data is collectable expect_true(is.data.frame(collect(df))) }) @@ -169,15 +169,15 @@ test_that("schema(), dtypes(), columns(), names() return the correct values/form expect_true(testSchema$fields()[[1]]$dataType.toString() == "IntegerType") expect_true(testSchema$fields()[[2]]$dataType.simpleString() == "string") expect_true(testSchema$fields()[[1]]$name() == "age") - + testTypes <- dtypes(df) expect_true(length(testTypes[[1]]) == 2) expect_true(testTypes[[1]][1] == "age") - + testCols <- columns(df) expect_true(length(testCols) == 2) expect_true(testCols[2] == "name") - + testNames <- names(df) expect_true(length(testNames) == 2) expect_true(testNames[2] == "name") @@ -188,13 +188,40 @@ test_that("head() and first() return the correct data", { testHead <- head(df) expect_true(nrow(testHead) == 3) expect_true(ncol(testHead) == 2) - + testHead2 <- head(df, 2) expect_true(nrow(testHead2) == 2) expect_true(ncol(testHead2) == 2) - + testFirst <- first(df) expect_true(nrow(testFirst) == 1) }) +test_that("select with column", { + df <- jsonFile(sqlCtx, jsonPath) + df1 <- select(df, "name") + expect_true(columns(df1) == c("name")) + expect_true(count(df1) == 3) + + df2 <- select(df, df$age) + expect_true(columns(df2) == c("age")) + expect_true(count(df2) == 3) +}) + +test_that("column calculation", { + df <- jsonFile(sqlCtx, jsonPath) + d <- collect(select(df, alias(df$age + 1, "age2"))) + expect_true(names(d) == c("age2")) + df2 <- select(df, lower(df$name), abs(df$age)) + expect_true(inherits(df2, "DataFrame")) + expect_true(count(df2) == 3) +}) + +test_that("column operators", { + c <- col("a") + c2 <- (c + 1 - 2) * 3 / 4.0 + c3 <- (c + c2 - c2) * c2 %% c2 + c4 <- (c > c2) & (c2 <= c3) | (c == c2) & (c2 != c3) +}) + unlink(jsonPath) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 6fa10621e3383..d41f0c2cb730e 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -15,6 +15,10 @@ object SQLUtils { new SQLContext(sc) } + def toSeq[T](arr: Array[T]): Seq[T] = { + arr.toSeq + } + def dfToRowRDD(df: DataFrame): JavaRDD[Array[Byte]] = { df.map(r => rowToRBytes(r)) } From 7b7248759c228fe8b0d9418447f8e1fd7f71b723 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sun, 1 Mar 2015 12:20:37 -0500 Subject: [PATCH 520/687] Fix comments. --- pkg/R/utils.R | 84 ++++++++++++++++++------------------- pkg/inst/tests/test_utils.R | 9 ++-- pkg/inst/worker/worker.R | 8 ++-- 3 files changed, 48 insertions(+), 53 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 523f14116f414..8720b38950ca4 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -266,9 +266,7 @@ convertEnvsToList <- function(keys, vals) { # newEnv A new function environment to store necessary function dependencies. processClosure <- function(node, oldEnv, argNames, newEnv) { nodeLen <- length(node) - if (nodeLen == 0) { - return - } + if (nodeLen > 1 && typeof(node) == "language") { # Recursive case: current AST node is an internal node, check for its children. if (length(node[[1]]) > 1) { @@ -277,36 +275,35 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { } } else { # if node[[1]] is length of 1, might be an R primitive. nodeChar <- as.character(node[[1]]) - switch(nodeChar, - "{" = { # Start of a function body. - for (i in 2:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) - } - }, - "<-" = { # Assignment. - defVar <- node[[2]] - if (length(defVar) == 1 && typeof(defVar) == "symbol") { - # Add the defined variable name into .defVars. - assign(".defVars", - c(get(".defVars", envir = .sparkREnv), as.character(defVar)), - envir = .sparkREnv) - } - for (i in 3:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) - } - }, - "function" = { # Function definition. - newArgs <- names(node[[2]]) - argNames <- c(argNames, newArgs) # Add parameter names. - for (i in 3:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) - } - }, - { - for (i in 1:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) - } - }) + if (nodeChar == "{" || nodeChar == "(") { # Skip start symbol. + for (i in 2:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + } else if (nodeChar == "<-" || nodeChar == "=" || + nodeChar == "<<-") { # Assignment Ops. + defVar <- node[[2]] + if (length(defVar) == 1 && typeof(defVar) == "symbol") { + # Add the defined variable name into .defVars. + assign(".defVars", + c(get(".defVars", envir = .sparkREnv), as.character(defVar)), + envir = .sparkREnv) + } else { + processClosure(node[[2]], oldEnv, argNames, newEnv) + } + for (i in 3:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + } else if (nodeChar == "function") { # Function definition. + newArgs <- names(node[[2]]) + argNames <- c(argNames, newArgs) # Add parameter names. + for (i in 3:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + } else { + for (i in 1:nodeLen) { + processClosure(node[[i]], oldEnv, argNames, newEnv) + } + } } } else if (nodeLen == 1 && (typeof(node) == "symbol" || typeof(node) == "language")) { @@ -322,20 +319,19 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { # as they are assumed to be loaded on workers. while (!identical(func.env, topEnv)) { # Namespaces other than "SparkR" will not be searched. - if (!isNamespace(func.env) || getNamespaceName(func.env) == "SparkR") { + if (!isNamespace(func.env) || + getNamespaceName(func.env) == "SparkR" && + !nodeChar %in% getNamespaceExports("SparkR")) { # Only include SparkR internals. # Set parameter 'inherits' to FALSE since we do not need to search in # attached package environments. if (exists(nodeChar, envir = func.env, inherits = FALSE)) { - if (!isNamespace(func.env) || - !nodeChar %in% getNamespaceExports("SparkR")) { # Only include SparkR internals. - obj <- get(nodeChar, envir = func.env) - if (is.function(obj)) { - # if the node is a function call, recursively clean its closure. - obj <- cleanClosure(obj) - } - assign(nodeChar, obj, envir = newEnv) - break + obj <- get(nodeChar, envir = func.env, inherits = FALSE) + if (is.function(obj)) { + # if the node is a function call, recursively clean its closure. + obj <- cleanClosure(obj) } + assign(nodeChar, obj, envir = newEnv) + break } } @@ -348,7 +344,7 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { # Utility function to get user defined function (UDF) dependencies (closure). # More specifically, this function captures the values of free variables defined -# outside a UDF, and stores them in a new environment. +# outside a UDF, and stores them in the function's environment. # param # func A function whose closure needs to be captured. # return value diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 82232e8731944..c50350a1db958 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -53,7 +53,7 @@ test_that("cleanClosure on R functions", { funcEnv <- new.env(parent = env2) f <- function(x) { min(g(x) + y) } environment(f) <- funcEnv # enclosing relationship: f -> funcEnv -> env2 -> .GlobalEnv - newF <- SparkR:::cleanClosure(f) + newF <- cleanClosure(f) env <- environment(newF) expect_equal(length(ls(env)), 2) # "min" should not be included actual <- get("y", envir = env) @@ -61,11 +61,12 @@ test_that("cleanClosure on R functions", { actual <- get("g", envir = env) expect_equal(actual, g) + # Test for recursive closure capture for a free variable of a function. g <- function(x) { x + y } f <- function(x) { lapply(x, g) + 1 } - newF <- SparkR:::cleanClosure(f) + newF <- cleanClosure(f) env <- environment(newF) - expect_equal(length(ls(env)), 1) # Only "g", "y" should be in the environemnt of g. + expect_equal(length(ls(env)), 1) # Only "g". "y" should be in the environemnt of g. expect_equal(ls(env), "g") newG <- get("g", envir = env) env <- environment(newG) @@ -78,7 +79,7 @@ test_that("cleanClosure on R functions", { g <- function(y) { y * 2 } g(x) } - newF <- SparkR:::cleanClosure(f) + newF <- cleanClosure(f) env <- environment(newF) expect_equal(length(ls(env)), 0) # "y" and "g" should not be included. }) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index f427f8572b5b6..48d6a5683e695 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -39,11 +39,9 @@ for (pkg in packageNames) { # read function dependencies funcLen <- SparkR:::readInt(inputCon) -if (funcLen > 0) { - computeFunc <- unserialize(SparkR:::readRawLen(inputCon, funcLen)) - env <- environment(computeFunc) - parent.env(env) <- .GlobalEnv # Attach under global environment. -} +computeFunc <- unserialize(SparkR:::readRawLen(inputCon, funcLen)) +env <- environment(computeFunc) +parent.env(env) <- .GlobalEnv # Attach under global environment. # Read and set broadcast variables numBroadcastVars <- SparkR:::readInt(inputCon) From 3f57e56e3f67603bd2fda165370930fd39ad5117 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sun, 1 Mar 2015 15:43:01 -0500 Subject: [PATCH 521/687] Fix comments. --- pkg/R/utils.R | 6 +++--- pkg/inst/tests/test_utils.R | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 8720b38950ca4..a5cda89b80161 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -273,7 +273,7 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { for (i in 1:nodeLen) { processClosure(node[[i]], oldEnv, argNames, newEnv) } - } else { # if node[[1]] is length of 1, might be an R primitive. + } else { # if node[[1]] is length of 1, check for some R special functions. nodeChar <- as.character(node[[1]]) if (nodeChar == "{" || nodeChar == "(") { # Skip start symbol. for (i in 2:nodeLen) { @@ -320,8 +320,8 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { while (!identical(func.env, topEnv)) { # Namespaces other than "SparkR" will not be searched. if (!isNamespace(func.env) || - getNamespaceName(func.env) == "SparkR" && - !nodeChar %in% getNamespaceExports("SparkR")) { # Only include SparkR internals. + (getNamespaceName(func.env) == "SparkR" && + !(nodeChar %in% getNamespaceExports("SparkR")))) { # Only include SparkR internals. # Set parameter 'inherits' to FALSE since we do not need to search in # attached package environments. if (exists(nodeChar, envir = func.env, inherits = FALSE)) { diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index c50350a1db958..970e9ab26f21c 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -48,10 +48,10 @@ test_that("cleanClosure on R functions", { actual <- get("g", envir = env) expect_equal(actual, g) - # Check for nested enclosures and package variables. + # Test for nested enclosures and package variables. env2 <- new.env() funcEnv <- new.env(parent = env2) - f <- function(x) { min(g(x) + y) } + f <- function(x) { log(g(x) + y) } environment(f) <- funcEnv # enclosing relationship: f -> funcEnv -> env2 -> .GlobalEnv newF <- cleanClosure(f) env <- environment(newF) @@ -82,4 +82,17 @@ test_that("cleanClosure on R functions", { newF <- cleanClosure(f) env <- environment(newF) expect_equal(length(ls(env)), 0) # "y" and "g" should not be included. + + # Test for overriding variables in base namespace (Issue: SparkR-196). + nums <- as.list(1:10) + rdd <- parallelize(sc, nums, 2L) + t = 4 # Override base::t in .GlobalEnv. + f <- function(x) { x > t } + newF <- cleanClosure(f) + env <- environment(newF) + expect_equal(ls(env), "t") + expect_equal(get("t", envir = env), t) + actual <- collect(lapply(rdd, f)) + expected <- as.list(c(rep(FALSE, 4), rep(TRUE, 6))) + expect_equal(actual, expected) }) From 4d36ab10389a6bccb0385a519ce0ce36dfc46696 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sun, 1 Mar 2015 16:33:53 -0500 Subject: [PATCH 522/687] Add tests for broadcast variables. --- pkg/R/utils.R | 2 ++ pkg/inst/tests/test_utils.R | 23 ++++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index a5cda89b80161..108b577f456c0 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -299,6 +299,8 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { for (i in 3:nodeLen) { processClosure(node[[i]], oldEnv, argNames, newEnv) } + } else if (nodeChar == "$") { # Skip the field. + processClosure(node[[2]], oldEnv, argNames, newEnv) } else { for (i in 1:nodeLen) { processClosure(node[[i]], oldEnv, argNames, newEnv) diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 970e9ab26f21c..c549aa65708d9 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -43,9 +43,9 @@ test_that("cleanClosure on R functions", { newF <- cleanClosure(f) env <- environment(newF) expect_equal(length(ls(env)), 2) # y, g - actual <- get("y", envir = env) + actual <- get("y", envir = env, inherits = FALSE) expect_equal(actual, y) - actual <- get("g", envir = env) + actual <- get("g", envir = env, inherits = FALSE) expect_equal(actual, g) # Test for nested enclosures and package variables. @@ -56,9 +56,9 @@ test_that("cleanClosure on R functions", { newF <- cleanClosure(f) env <- environment(newF) expect_equal(length(ls(env)), 2) # "min" should not be included - actual <- get("y", envir = env) + actual <- get("y", envir = env, inherits = FALSE) expect_equal(actual, y) - actual <- get("g", envir = env) + actual <- get("g", envir = env, inherits = FALSE) expect_equal(actual, g) # Test for recursive closure capture for a free variable of a function. @@ -68,10 +68,10 @@ test_that("cleanClosure on R functions", { env <- environment(newF) expect_equal(length(ls(env)), 1) # Only "g". "y" should be in the environemnt of g. expect_equal(ls(env), "g") - newG <- get("g", envir = env) + newG <- get("g", envir = env, inherits = FALSE) env <- environment(newG) expect_equal(length(ls(env)), 1) - actual <- get("y", envir = env) + actual <- get("y", envir = env, inherits = FALSE) expect_equal(actual, y) # Test for function (and variable) definitions. @@ -91,8 +91,17 @@ test_that("cleanClosure on R functions", { newF <- cleanClosure(f) env <- environment(newF) expect_equal(ls(env), "t") - expect_equal(get("t", envir = env), t) + expect_equal(get("t", envir = env, inherits = FALSE), t) actual <- collect(lapply(rdd, f)) expected <- as.list(c(rep(FALSE, 4), rep(TRUE, 6))) expect_equal(actual, expected) + + # Test for broadcast variables. + a <- matrix(nrow=10, ncol=10, data=rnorm(100)) + aBroadcast <- broadcast(sc, a) + normMultiply <- function(x) { norm(aBroadcast$value) * x } + newnormMultiply <- SparkR:::cleanClosure(normMultiply) + env <- environment(newnormMultiply) + expect_equal(ls(env), "aBroadcast") + expect_equal(get("aBroadcast", envir = env, inherits = FALSE), aBroadcast) }) From 6e51c7ff25388bcf05776fa1ee353401b31b9443 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 1 Mar 2015 15:00:24 -0800 Subject: [PATCH 523/687] Fix stderr redirection on executors --- pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 4d69686e1a2ea..89b0bf3d74747 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -37,7 +37,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( val listenPort = serverSocket.getLocalPort() val pb = rWorkerProcessBuilder(listenPort) - pb.redirectErrorStream() // redirect stderr into stdout + pb.redirectErrorStream(true) // redirect stderr into stdout val proc = pb.start() val errThread = startStdoutThread(proc) From 8c4deaedc570c2753a2103d59aba20178d9ef777 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Sun, 1 Mar 2015 15:06:29 -0800 Subject: [PATCH 524/687] Remove unused function --- pkg/R/utils.R | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 108b577f456c0..6bad0abfd0e0d 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -70,29 +70,6 @@ isRDD <- function(name, env) { inherits(obj, "RDD") } -# Returns TRUE if `name` is a function in the SparkR package. -# TODO: Handle package-private functions as well ? -isSparkFunction <- function(name) { - if (is.function(name)) { - fun <- name - } else { - if (!(is.character(name) && length(name) == 1L || is.symbol(name))) { - fun <- eval.parent(substitute(substitute(name))) - if (!is.symbol(fun)) - stop(gettextf("'%s' is not a function, character or symbol", - deparse(fun)), domain = NA) - } else { - fun <- name - } - envir <- parent.frame(2) - if (!exists(as.character(fun), mode = "function", envir = envir)) { - return(FALSE) - } - fun <- get(as.character(fun), mode = "function", envir = envir) - } - packageName(environment(fun)) == "SparkR" -} - #' Compute the hashCode of an object #' #' Java-style function to compute the hashCode for the given object. Returns From f7caeb84321f04291214f17a7a6606cb3a0ddee8 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Sun, 1 Mar 2015 15:11:37 -0800 Subject: [PATCH 525/687] Update SparkRBackend.scala --- .../scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index 4cf7ac18f9425..89b2e7ada6b4c 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -78,7 +78,7 @@ class SparkRBackend { object SparkRBackend { def main(args: Array[String]) { if (args.length < 1) { - System.err.println("Usage: SparkRBackend ") + System.err.println("Usage: SparkRBackend ") System.exit(-1) } val sparkRBackend = new SparkRBackend() From 5c0bb24bd77a6e1ed4474144f14b6458cdd2c157 Mon Sep 17 00:00:00 2001 From: Felix Cheung Date: Sun, 1 Mar 2015 22:20:41 -0800 Subject: [PATCH 526/687] Doc updates: build and running on YARN --- BUILDING.md | 9 +++------ README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index c1929f94bd65e..08d9a8129009f 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -7,11 +7,8 @@ include Rtools and R in `PATH`. 2. Install [JDK7](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html) and set `JAVA_HOME` in the system environment variables. -3. Install `rJava` using `install.packages(rJava)`. If rJava fails to load due to missing jvm.dll, -you will need to add the directory containing jvm.dll to `PATH`. See this [stackoverflow post](http://stackoverflow.com/a/7604469] -for more details. -4. Download and install [Maven](http://maven.apache.org/download.html). Also include the `bin` +3. Download and install [Maven](http://maven.apache.org/download.html). Also include the `bin` directory in Maven in `PATH`. -5. Get SparkR source code either using [`git]`(http://git-scm.com/downloads) or by downloading a +4. Get SparkR source code either using [`git`](http://git-scm.com/downloads) or by downloading a source zip from github. -6. Open a command shell (`cmd`) in the SparkR directory and run `install-dev.bat` +5. Open a command shell (`cmd`) in the SparkR directory and run `install-dev.bat` diff --git a/README.md b/README.md index 6d6b097222ade..fa4655180ca73 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,22 @@ the environment variable `USE_MAVEN=1`. For example If you are building SparkR from behind a proxy, you can [setup maven](https://maven.apache.org/guides/mini/guide-proxies.html) to use the right proxy server. +#### Building from source from GitHub + +Run the following within R to pull source code from GitHub and build locally. It is possible +to specify build dependencies by starting R with environment values: + +1. Start R +``` +SPARK_VERSION=1.2.0 SPARK_HADOOP_VERSION=2.5.0 R +``` + +2. Run install_github +``` +library(devtools) +install_github("repo/SparkR-pkg", ref="branchname", subdir="pkg") +``` +*note: replace repo and branchname* ## Running sparkR If you have cloned and built SparkR, you can start using it by launching the SparkR @@ -110,10 +126,23 @@ cd SparkR-pkg/ USE_YARN=1 SPARK_YARN_VERSION=2.4.0 SPARK_HADOOP_VERSION=2.4.0 ./install-dev.sh ``` +Alternatively, install_github can be use (on CDH in this case): + +``` +# assume devtools package is installed by install.packages("devtools") +USE_YARN=1 SPARK_VERSION=1.1.0 SPARK_YARN_VERSION=2.5.0-cdh5.3.0 SPARK_HADOOP_VERSION=2.5.0-cdh5.3.0 R +``` +Then within R, +``` +library(devtools) +install_github("amplab-extras/SparkR-pkg", ref="master", subdir="pkg") +``` + Before launching an application, make sure each worker node has a local copy of `lib/SparkR/sparkr-assembly-0.1.jar`. With a cluster launched with the `spark-ec2` script, do: ``` ~/spark-ec2/copy-dir ~/SparkR-pkg ``` +Or run the above installation steps on all worker node. Finally, when launching an application, the environment variable `YARN_CONF_DIR` needs to be set to the directory which contains the client-side configuration files for the Hadoop cluster (with a cluster launched with `spark-ec2`, this defaults to `/root/ephemeral-hdfs/conf/`): ``` @@ -121,6 +150,18 @@ YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ MASTER=yarn-client ./sparkR YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ ./sparkR examples/pi.R yarn-client ``` +### Using sparkR-submit +sparkR-submit is a script introduced to faciliate submission of SparkR jobs to a YARN cluster. +It supports the same commandline parameters as [spark-submit](http://spark.apache.org/docs/latest/running-on-yarn.html). SPARK_HOME, YARN_HOME, and JAVA_HOME must be defined. + +(On CDH 5.3.0) +``` +export SPARK_HOME=/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/spark +export YARN_CONF_DIR=/etc/hadoop/conf +export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera +/usr/lib64/R/library/SparkR/sparkR-submit --master yarn-client examples/pi.R yarn-client 4 +``` + ## Report Issues/Feedback For better tracking and collaboration, issues and TODO items are reported to a dedicated [SparkR JIRA](https://sparkr.atlassian.net/browse/SPARKR/). From 8caf5bb81b027aa9e0dc4c3e9d95028d7865e0b9 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 11:34:10 -0800 Subject: [PATCH 527/687] use S4 methods --- pkg/R/column.R | 87 +++++++++++++++++++++------------- pkg/inst/tests/test_sparkSQL.R | 9 +++- 2 files changed, 62 insertions(+), 34 deletions(-) diff --git a/pkg/R/column.R b/pkg/R/column.R index dedd1b1d63017..31a1c74bcca90 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -24,38 +24,36 @@ column <- function(jc) { } # TODO: change Dsl to functions once update spark-sql +# A helper function to create a column from name col <- function(x) { column(callJStatic("org.apache.spark.sql.Dsl", "col", x)) } -alias <- function(col, name) { - column(callJMethod(col@jc, "as", name)) -} - -cast <- function(col, dataType) { - # TODO(davies): support DataType - if (class(dataType) == "character") { - column(callJMethod(col@jc, "cast", dataType)) - } -} - -#TODO(davies): like, rlike, startwith, substr, isNull, isNotNull, getField, getItem +# TODO(davies): like, rlike, startwith, substr, getField, getItem operators <- list( "+" = "plus", "-" = "minus", "*" = "multiply", "/" = "divide", "%%" = "mod", "==" = "equalTo", ">" = "gt", "<" = "lt", "!=" = "notEqual", "<=" = "leq", ">=" = "geq", # we can not override `&&` and `||`, so use `&` and `|` instead - "&" = "and", "|" = "or" + "&" = "and", "|" = "or" #, "!" = "unary_$bang" ) createOperator <- function(op) { setMethod(op, signature(e1 = "Column"), function(e1, e2) { - if (class(e2) == "Column") { - e2 <- e2@jc + jc <- if (missing(e2)) { + if (op == "-") { + callJMethod(e1@jc, "unary_$minus") + } else { + callJMethod(e1@jc, operators[[op]]) + } + } else { + if (class(e2) == "Column") { + e2 <- e2@jc + } + callJMethod(e1@jc, operators[[op]], e2) } - jc <- callJMethod(e1@jc, operators[[op]], e2) column(jc) }) } @@ -64,7 +62,6 @@ for (op in names(operators)) { createOperator(op) } - createFunction <- function(name) { setMethod(name, signature(x = "Column"), @@ -80,29 +77,53 @@ setGeneric("asc", function(x) { standardGeneric("asc") }) setGeneric("desc", function(x) { standardGeneric("desc") }) setGeneric("lower", function(x) { standardGeneric("lower") }) setGeneric("upper", function(x) { standardGeneric("upper") }) +setGeneric("isNull", function(x) { standardGeneric("isNull") }) +setGeneric("isNotNull", function(x) { standardGeneric("isNotNull") }) +setGeneric("sumDistinct", function(x) { standardGeneric("sumDistinct") }) Functions <- c("min", "max", "sum", "avg", "mean", "count", "abs", "sqrt", - "first", "last", "asc", "desc", "lower", "upper") +"first", "last", "asc", "desc", "lower", "upper", "sumDistinct", +"isNull", "isNotNull") for (name in Functions) { createFunction(name) } -approxCountDistinct <- function(col, rsd) { - jc <- callJStatic("org.apache.spark.sql.Dsl", "approxCountDistinct", col@jc, rsd) - column(jc) -} +setGeneric("alias", function(x, name) { standardGeneric("alias") }) -countDistinct <- function(col, ...) { - jcol <- lapply(list(...), function (col) { - col@jc - }) - jc <- callJStatic("org.apache.spark.sql.Dsl", "countDistinct", col@jc, arrayToSeq(jcol)) - column(jc) -} +setMethod("alias", + signature(x = "Column", name = "character"), + function(x, name) { + column(callJMethod(x@jc, "as", name)) + }) -sumDistinct <- function(col) { - jc <- callJStatic("org.apache.spark.sql.Dsl", "sumDistinct", x@jc) - column(jc) -} +setGeneric("cast", function(x, dataType) { standardGeneric("cast") }) + +setMethod("cast", + signature(x = "Column", dataType = "character"), + function(x, dataType) { + column(callJMethod(x@jc, "cast", dataType)) + }) + + +setGeneric("approxCountDistinct", function(x, rsd) { standardGeneric("approxCountDistinct") }) + +setMethod("approxCountDistinct", + signature(x = "Column"), + function(x, rsd) { + jc <- callJStatic("org.apache.spark.sql.Dsl", "approxCountDistinct", x@jc, rsd) + column(jc) + }) + +setGeneric("countDistinct", function(x, ...) { standardGeneric("countDistinct") }) + +setMethod("countDistinct", + signature(x = "Column"), + function(x, ...) { + jcol <- lapply(list(...), function (x) { + x@jc + }) + jc <- callJStatic("org.apache.spark.sql.Dsl", "countDistinct", x@jc, listToSeq(jcol)) + column(jc) + }) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index b06e5df36deba..d01f353867e0b 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -242,9 +242,16 @@ test_that("column calculation", { test_that("column operators", { c <- col("a") - c2 <- (c + 1 - 2) * 3 / 4.0 + c2 <- (- c + 1 - 2) * 3 / 4.0 c3 <- (c + c2 - c2) * c2 %% c2 c4 <- (c > c2) & (c2 <= c3) | (c == c2) & (c2 != c3) }) +test_that("column functions", { + c <- col("a") + c2 <- min(c) + max(c) + sum(c) + avg(c) + count(c) + abs(c) + sqrt(c) + c3 <- lower(c) + upper(c) + first(c) + last(c) + c4 <- approxCountDistinct(c) + countDistinct(c) + cast(c, "string") +}) + unlink(jsonPath) From 7dfe27d06baf5bb00e679ea6a1bb7472295307d4 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 12:24:19 -0800 Subject: [PATCH 528/687] fix cyclic namespace dependency --- pkg/NAMESPACE | 7 ++++++- pkg/R/column.R | 17 ++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index a07b0de2cde71..ab0e0615b58b0 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -96,12 +96,14 @@ exportMethods("columns", "repartition", "sampleDF", "schema", + "select", "toRDD") exportClasses("Column") exportMethods("asc", "desc", + "first", "last", "lower", "upper", @@ -111,10 +113,13 @@ exportMethods("asc", "max", "sum", "avg", + "mean", + "isNull", + "isNotNull", "alias", "cast", - "countDistinct", "approxCountDistinct", + "countDistinct", "sumDistinct") export("jsonFile", diff --git a/pkg/R/column.R b/pkg/R/column.R index 31a1c74bcca90..c27f4405edd10 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -85,16 +85,19 @@ Functions <- c("min", "max", "sum", "avg", "mean", "count", "abs", "sqrt", "first", "last", "asc", "desc", "lower", "upper", "sumDistinct", "isNull", "isNotNull") -for (name in Functions) { - createFunction(name) +for (x in Functions) { + createFunction(x) } -setGeneric("alias", function(x, name) { standardGeneric("alias") }) - setMethod("alias", - signature(x = "Column", name = "character"), - function(x, name) { - column(callJMethod(x@jc, "as", name)) + signature(object = "Column"), + function(object, data) { + if (class(data) == "character") { + column(callJMethod(object@jc, "as", data)) + } else { + # TODO(davies): support DataType object + stop("not implemented") + } }) setGeneric("cast", function(x, dataType) { standardGeneric("cast") }) From d7b17a428c27aac28d89e1c85f1ba7d9d4b021d2 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 13:07:44 -0800 Subject: [PATCH 529/687] fix approxCountDistinct --- pkg/R/column.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/column.R b/pkg/R/column.R index c27f4405edd10..e17e986fb6905 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -109,11 +109,11 @@ setMethod("cast", }) -setGeneric("approxCountDistinct", function(x, rsd) { standardGeneric("approxCountDistinct") }) +setGeneric("approxCountDistinct", function(x, ...) { standardGeneric("approxCountDistinct") }) setMethod("approxCountDistinct", signature(x = "Column"), - function(x, rsd) { + function(x, rsd = 0.95) { jc <- callJStatic("org.apache.spark.sql.Dsl", "approxCountDistinct", x@jc, rsd) column(jc) }) From acae5272f0d3c6e853d767ec489e64999306db0f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 13:18:46 -0800 Subject: [PATCH 530/687] refactor --- pkg/R/column.R | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/pkg/R/column.R b/pkg/R/column.R index e17e986fb6905..1b1132cca352a 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -30,7 +30,6 @@ col <- function(x) { } # TODO(davies): like, rlike, startwith, substr, getField, getItem - operators <- list( "+" = "plus", "-" = "minus", "*" = "multiply", "/" = "divide", "%%" = "mod", "==" = "equalTo", ">" = "gt", "<" = "lt", "!=" = "notEqual", "<=" = "leq", ">=" = "geq", @@ -38,6 +37,10 @@ operators <- list( "&" = "and", "|" = "or" #, "!" = "unary_$bang" ) +functions <- c("min", "max", "sum", "avg", "mean", "count", "abs", "sqrt", + "first", "last", "asc", "desc", "lower", "upper", "sumDistinct", + "isNull", "isNotNull") + createOperator <- function(op) { setMethod(op, signature(e1 = "Column"), @@ -58,10 +61,6 @@ createOperator <- function(op) { }) } -for (op in names(operators)) { - createOperator(op) -} - createFunction <- function(name) { setMethod(name, signature(x = "Column"), @@ -71,24 +70,28 @@ createFunction <- function(name) { }) } -setGeneric("avg", function(x) { standardGeneric("avg") }) -setGeneric("last", function(x) { standardGeneric("last") }) -setGeneric("asc", function(x) { standardGeneric("asc") }) -setGeneric("desc", function(x) { standardGeneric("desc") }) -setGeneric("lower", function(x) { standardGeneric("lower") }) -setGeneric("upper", function(x) { standardGeneric("upper") }) -setGeneric("isNull", function(x) { standardGeneric("isNull") }) -setGeneric("isNotNull", function(x) { standardGeneric("isNotNull") }) -setGeneric("sumDistinct", function(x) { standardGeneric("sumDistinct") }) - -Functions <- c("min", "max", "sum", "avg", "mean", "count", "abs", "sqrt", -"first", "last", "asc", "desc", "lower", "upper", "sumDistinct", -"isNull", "isNotNull") - -for (x in Functions) { - createFunction(x) +createMethods <- function() { + for (op in names(operators)) { + createOperator(op) + } + + setGeneric("avg", function(x) { standardGeneric("avg") }) + setGeneric("last", function(x) { standardGeneric("last") }) + setGeneric("asc", function(x) { standardGeneric("asc") }) + setGeneric("desc", function(x) { standardGeneric("desc") }) + setGeneric("lower", function(x) { standardGeneric("lower") }) + setGeneric("upper", function(x) { standardGeneric("upper") }) + setGeneric("isNull", function(x) { standardGeneric("isNull") }) + setGeneric("isNotNull", function(x) { standardGeneric("isNotNull") }) + setGeneric("sumDistinct", function(x) { standardGeneric("sumDistinct") }) + + for (x in functions) { + createFunction(x) + } } +createMethods() + setMethod("alias", signature(object = "Column"), function(object, data) { From 8ec21af07caea512cc90c66010d3b7b2dc0fc6e3 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 13:40:34 -0800 Subject: [PATCH 531/687] fix signature --- pkg/R/DataFrame.R | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 7e48790c2c04b..50f153811ed2d 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -592,20 +592,20 @@ setMethod("$", signature(x = "DataFrame"), column(callJMethod(x@sdf, "col", name)) }) -setGeneric("select", function(df, col, ...) { standardGeneric("select") } ) +setGeneric("select", function(x, col, ...) { standardGeneric("select") } ) -setMethod("select", signature(df = "DataFrame", col = "character"), - function(df, col, ...) { - sdf <- callJMethod(df@sdf, "select", col, toSeq(...)) +setMethod("select", signature(x = "DataFrame", col = "character"), + function(x, col, ...) { + sdf <- callJMethod(x@sdf, "select", col, toSeq(...)) dataFrame(sdf) }) -setMethod("select", signature(df = "DataFrame", col = "Column"), - function(df, col, ...) { +setMethod("select", signature(x = "DataFrame", col = "Column"), + function(x, col, ...) { jcols <- lapply(list(col, ...), function(x) { x@jc }) - sdf <- callJMethod(df@sdf, "select", listToSeq(jcols)) + sdf <- callJMethod(x@sdf, "select", listToSeq(jcols)) dataFrame(sdf) }) From 71d66a1f75f846c77a6e0ece4c40c6d5d5019c06 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 13:47:44 -0800 Subject: [PATCH 532/687] fix first(0 --- pkg/DESCRIPTION | 2 +- pkg/R/DataFrame.R | 2 -- pkg/R/column.R | 1 + 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 69a1651961f08..b553fdec3014c 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -19,8 +19,8 @@ Collate: 'SQLTypes.R' 'RDD.R' 'pairRDD.R' - 'DataFrame.R' 'column.R' + 'DataFrame.R' 'SQLContext.R' 'broadcast.R' 'context.R' diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 50f153811ed2d..3a58bec7a8e78 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -492,8 +492,6 @@ setMethod("head", #' first(df) #' } -setGeneric("first", function(x) {standardGeneric("first") }) - setMethod("first", signature(x = "DataFrame"), function(x) { diff --git a/pkg/R/column.R b/pkg/R/column.R index 1b1132cca352a..915b7b8b72da9 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -76,6 +76,7 @@ createMethods <- function() { } setGeneric("avg", function(x) { standardGeneric("avg") }) + setGeneric("first", function(x) {standardGeneric("first") }) setGeneric("last", function(x) { standardGeneric("last") }) setGeneric("asc", function(x) { standardGeneric("asc") }) setGeneric("desc", function(x) { standardGeneric("desc") }) From e9983566f93304f2f5624613aedadd1e9d9a5069 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 2 Mar 2015 16:00:29 -0600 Subject: [PATCH 533/687] define generic for 'first' in RDD API --- pkg/NAMESPACE | 2 +- pkg/R/DataFrame.R | 2 -- pkg/R/RDD.R | 20 ++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 6 ++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 9a33fcd62382b..80f11b4fd2b78 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -17,6 +17,7 @@ exportMethods( "distinct", "Filter", "filterRDD", + "first", "flatMap", "flatMapValues", "fold", @@ -87,7 +88,6 @@ exportClasses("DataFrame") exportMethods("columns", "distinct", "dtypes", - "first", "head", "limit", "names", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 9773598db578e..53fd481e66bf7 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -492,8 +492,6 @@ setMethod("head", #' first(df) #' } -setGeneric("first", function(x) {standardGeneric("first") }) - setMethod("first", signature(x = "DataFrame"), function(x) { diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 7219bdaa18bb0..99a9584b71d5e 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -841,6 +841,26 @@ setMethod("take", resList }) +#' First +#' +#' Return the first element of an RDD +#' +#' @rdname first +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' first(rdd) +#' } +setGeneric("first", function(x) { standardGeneric("first") }) + +setMethod("first", + signature(x = "RDD"), + function(x) { + take(x, 1) + }) + #' Removes the duplicates from RDD. #' #' This function returns a new RDD containing the distinct elements in the diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index f0c00d71d076c..b1cd257d692c5 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -15,6 +15,12 @@ test_that("get number of partitions in RDD", { expect_equal(numPartitions(intRdd), 2) }) +test_that("first on RDD") { + expect_true(first(rdd) == 1) + newrdd <- lapply(rdd, function(x) x + 1) + expect_true(first(newrdd) == 2) +} + test_that("count and length on RDD", { expect_equal(count(rdd), 10) expect_equal(length(rdd), 10) From f585929cc9edabb3098ed4460eac01237a500e6a Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 2 Mar 2015 16:02:35 -0600 Subject: [PATCH 534/687] Fix brackets --- pkg/inst/tests/test_rdd.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index b1cd257d692c5..93bbca6c2b0b7 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -15,11 +15,11 @@ test_that("get number of partitions in RDD", { expect_equal(numPartitions(intRdd), 2) }) -test_that("first on RDD") { +test_that("first on RDD", { expect_true(first(rdd) == 1) newrdd <- lapply(rdd, function(x) x + 1) expect_true(first(newrdd) == 2) -} +}) test_that("count and length on RDD", { expect_equal(count(rdd), 10) From 1955a09f83a269d84139891bc29b41d0bcb9a1ae Mon Sep 17 00:00:00 2001 From: cafreeman Date: Mon, 2 Mar 2015 17:50:12 -0600 Subject: [PATCH 535/687] return object instead of a list of one object --- pkg/R/RDD.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 99a9584b71d5e..b204d7e48d463 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -858,7 +858,7 @@ setGeneric("first", function(x) { standardGeneric("first") }) setMethod("first", signature(x = "RDD"), function(x) { - take(x, 1) + take(x, 1)[[1]] }) #' Removes the duplicates from RDD. From 03402ebdef99be680c4d0c9c475fd08702d3eb9e Mon Sep 17 00:00:00 2001 From: Felix Cheung Date: Mon, 2 Mar 2015 16:17:17 -0800 Subject: [PATCH 536/687] Updates as per feedback on sparkR-submit --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fa4655180ca73..027614ab74808 100644 --- a/README.md +++ b/README.md @@ -150,11 +150,16 @@ YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ MASTER=yarn-client ./sparkR YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ ./sparkR examples/pi.R yarn-client ``` -### Using sparkR-submit -sparkR-submit is a script introduced to faciliate submission of SparkR jobs to a YARN cluster. -It supports the same commandline parameters as [spark-submit](http://spark.apache.org/docs/latest/running-on-yarn.html). SPARK_HOME, YARN_HOME, and JAVA_HOME must be defined. +## Running on a cluster using sparkR-submit -(On CDH 5.3.0) +sparkR-submit is a script introduced to faciliate submission of SparkR jobs to a Spark supported cluster (eg. Standalone, Mesos, YARN). +It supports the same commandline parameters as [spark-submit](http://spark.apache.org/docs/latest/submitting-applications.html). SPARK_HOME and JAVA_HOME must be defined. + +On YARN, YARN_HOME must be defined. Currently, SparkR only supports [yarn-client](http://spark.apache.org/docs/latest/running-on-yarn.html) mode. + +sparkR-submit is installed with the SparkR package. By default, it can be found under the default Library (['library'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/libPaths.html) subdirectory of R_HOME) + +For example, to run on YARN (CDH 5.3.0), ``` export SPARK_HOME=/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/spark export YARN_CONF_DIR=/etc/hadoop/conf From 1d0f2ae2097f0838d8c079b0bbcf89fe9805509f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 16:42:34 -0800 Subject: [PATCH 537/687] Update DataFrame.R --- pkg/R/DataFrame.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 3a58bec7a8e78..f5f0927b4a29b 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -600,8 +600,8 @@ setMethod("select", signature(x = "DataFrame", col = "character"), setMethod("select", signature(x = "DataFrame", col = "Column"), function(x, col, ...) { - jcols <- lapply(list(col, ...), function(x) { - x@jc + jcols <- lapply(list(col, ...), function(c) { + c@jc }) sdf <- callJMethod(x@sdf, "select", listToSeq(jcols)) dataFrame(sdf) From f798402e5ae02853f0477369273c478f7090700a Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 16:43:01 -0800 Subject: [PATCH 538/687] Update column.R --- pkg/R/column.R | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/R/column.R b/pkg/R/column.R index 915b7b8b72da9..1b1132cca352a 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -76,7 +76,6 @@ createMethods <- function() { } setGeneric("avg", function(x) { standardGeneric("avg") }) - setGeneric("first", function(x) {standardGeneric("first") }) setGeneric("last", function(x) { standardGeneric("last") }) setGeneric("asc", function(x) { standardGeneric("asc") }) setGeneric("desc", function(x) { standardGeneric("desc") }) From 06cbc2d233e6c0da062d0984e7cb95d3d9a5a1a1 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 17:26:14 -0800 Subject: [PATCH 539/687] launch R worker by a daemon --- pkg/inst/worker/daemon.R | 25 ++++ pkg/inst/worker/worker.R | 12 +- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 117 ++++++++++++------ 3 files changed, 106 insertions(+), 48 deletions(-) create mode 100644 pkg/inst/worker/daemon.R diff --git a/pkg/inst/worker/daemon.R b/pkg/inst/worker/daemon.R new file mode 100644 index 0000000000000..f2fff54aaee37 --- /dev/null +++ b/pkg/inst/worker/daemon.R @@ -0,0 +1,25 @@ +# Worker daemon + +rLibDir <- Sys.getenv("SPARKR_RLIBDIR") +script <- paste(rLibDir, "SparkR/worker/worker.R", sep="/") + +# preload SparkR package, speedup worker +.libPaths(c(rLibDir, .libPaths())) +suppressPackageStartupMessages(library(SparkR)) + +port <- as.integer(Sys.getenv("SPARKR_WORKER_PORT")) +inputCon <- socketConnection(port = port, blocking = TRUE, open = "rb") + +while (TRUE) { + inport <- SparkR:::readInt(inputCon) + if (length(inport) != 1) { + quit(save="no") + } + p <- parallel:::mcfork() + if (inherits(p, "masterProcess")) { + close(inputCon) + Sys.setenv(SPARKR_WORKER_PORT = inport) + source(script) + parallel:::mcexit(0) + } +} diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index f3fc3b2e94994..43f4221e01909 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -1,18 +1,16 @@ # Worker class -port <- as.integer(Sys.getenv("SPARKR_WORKER_PORT")) - -inputCon <- socketConnection(port = port, blocking = TRUE, open = "rb") -outputCon <- socketConnection(port = port, blocking = TRUE, open = "wb") - +rLibDir <- Sys.getenv("SPARKR_RLIBDIR") # Set libPaths to include SparkR package as loadNamespace needs this # TODO: Figure out if we can avoid this by not loading any objects that require # SparkR namespace -rLibDir <- readLines(inputCon, n = 1) .libPaths(c(rLibDir, .libPaths())) - suppressPackageStartupMessages(library(SparkR)) +port <- as.integer(Sys.getenv("SPARKR_WORKER_PORT")) +inputCon <- socketConnection(port = port, blocking = TRUE, open = "rb") +outputCon <- socketConnection(port = port, blocking = TRUE, open = "wb") + # read the index of the current partition inside the RDD splitIndex <- SparkR:::readInt(inputCon) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 89b0bf3d74747..fe9095eccd398 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -1,7 +1,7 @@ package edu.berkeley.cs.amplab.sparkr import java.io._ -import java.net.{ServerSocket} +import java.net.{Socket, ServerSocket} import java.util.{Map => JMap} import scala.collection.JavaConversions._ @@ -36,10 +36,9 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( val serverSocket = new ServerSocket(0, 2) val listenPort = serverSocket.getLocalPort() - val pb = rWorkerProcessBuilder(listenPort) - pb.redirectErrorStream(true) // redirect stderr into stdout - val proc = pb.start() - val errThread = startStdoutThread(proc) + // The stdout/stderr is shared by multiple tasks, because we use one daemon + // to launch child process as worker. + val errThread = RRDD.createRWorker(rLibDir, listenPort) // We use two sockets to separate input and output, then it's easy to manage // the lifecycle of them to avoid deadlock. @@ -54,7 +53,6 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( val outSocket = serverSocket.accept() val inputStream = new BufferedInputStream(outSocket.getInputStream) val dataStream = openDataStream(inputStream) - serverSocket.close() try { @@ -84,34 +82,6 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( } } - /** - * ProcessBuilder used to launch worker R processes. - */ - private def rWorkerProcessBuilder(port: Int) = { - val rCommand = "Rscript" - val rOptions = "--vanilla" - val rExecScript = rLibDir + "/SparkR/worker/worker.R" - val pb = new ProcessBuilder(List(rCommand, rOptions, rExecScript)) - // Unset the R_TESTS environment variable for workers. - // This is set by R CMD check as startup.Rs - // (http://svn.r-project.org/R/trunk/src/library/tools/R/testing.R) - // and confuses worker script which tries to load a non-existent file - pb.environment().put("R_TESTS", "") - pb.environment().put("SPARKR_WORKER_PORT", port.toString) - pb - } - - /** - * Start a thread to print the process's stderr to ours - */ - private def startStdoutThread(proc: Process): BufferedStreamThread = { - val BUFFER_SIZE = 100 - val thread = new BufferedStreamThread(proc.getInputStream, "stdout reader for R", BUFFER_SIZE) - thread.setDaemon(true) - thread.start() - thread - } - /** * Start a thread to write RDD data to the R process. */ @@ -128,9 +98,6 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( override def run() { try { SparkEnv.set(env) - val printOut = new PrintStream(stream) - printOut.println(rLibDir) - val dataOut = new DataOutputStream(stream) dataOut.writeInt(splitIndex) @@ -163,6 +130,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(1) } + val printOut = new PrintStream(stream) for (elem <- iter) { if (parentSerialized) { val elemArr = elem.asInstanceOf[Array[Byte]] @@ -312,7 +280,7 @@ private class StringRRDD[T: ClassTag]( lazy val asJavaRDD : JavaRDD[String] = JavaRDD.fromRDD(this) } -private class BufferedStreamThread( +private[sparkr] class BufferedStreamThread( in: InputStream, name: String, errBufferSize: Int) extends Thread(name) { @@ -320,14 +288,16 @@ private class BufferedStreamThread( var lineIdx = 0 override def run() { for (line <- Source.fromInputStream(in).getLines) { - lines(lineIdx) = line - lineIdx = (lineIdx + 1) % errBufferSize + synchronized { + lines(lineIdx) = line + lineIdx = (lineIdx + 1) % errBufferSize + } // TODO: user logger System.err.println(line) } } - def getLines(): String = { + def getLines(): String = synchronized { (0 until errBufferSize).filter { x => lines((x + lineIdx) % errBufferSize) != null }.map { x => @@ -338,6 +308,16 @@ private class BufferedStreamThread( object RRDD { + // Because forking processes from Java is expensive, we prefer to launch + // a single R daemon (daemon.R) and tell it to fork new workers for our tasks. + // This daemon currently only works on UNIX-based systems now, so we should + // also fall back to launching workers (worker.R) directly. + // TODO(davies): make it configurable + val useDaemon = !System.getProperty("os.name").startsWith("Windows") + private[this] var errThread: BufferedStreamThread = _ + private[this] var daemonSocket: Socket = _ + private[this] var daemonChannel: DataOutputStream = _ + def createSparkContext( master: String, appName: String, @@ -368,6 +348,61 @@ object RRDD { new JavaSparkContext(sparkConf) } + /** + * Start a thread to print the process's stderr to ours + */ + private def startStdoutThread(proc: Process): BufferedStreamThread = { + val BUFFER_SIZE = 100 + val thread = new BufferedStreamThread(proc.getInputStream, "stdout reader for R", BUFFER_SIZE) + thread.setDaemon(true) + thread.start() + thread + } + + def createRProcess(rLibDir: String, port: Int, script: String) = { + val rCommand = "Rscript" + val rOptions = "--vanilla" + val rExecScript = rLibDir + "/SparkR/worker/" + script + val pb = new ProcessBuilder(List(rCommand, rOptions, rExecScript)) + // Unset the R_TESTS environment variable for workers. + // This is set by R CMD check as startup.Rs + // (http://svn.r-project.org/R/trunk/src/library/tools/R/testing.R) + // and confuses worker script which tries to load a non-existent file + pb.environment().put("R_TESTS", "") + pb.environment().put("SPARKR_RLIBDIR", rLibDir) + pb.environment().put("SPARKR_WORKER_PORT", port.toString) + pb.redirectErrorStream(true) // redirect stderr into stdout + val proc = pb.start() + val errThread = startStdoutThread(proc) + errThread + } + + /** + * ProcessBuilder used to launch worker R processes. + */ + def createRWorker(rLibDir: String, port: Int) = { + if (useDaemon) { + synchronized { + if (daemonSocket == null) { + // we expect one connections + val serverSocket = new ServerSocket(0, 1) + val daemonPort = serverSocket.getLocalPort() + errThread = createRProcess(rLibDir, daemonPort, "daemon.R") + // the socket used to send out the input of task + serverSocket.setSoTimeout(10000) + daemonSocket = serverSocket.accept() + daemonChannel = new DataOutputStream(daemonSocket.getOutputStream) + serverSocket.close() + } + daemonChannel.writeInt(port) + daemonChannel.flush() + errThread + } + } else { + createRProcess(rLibDir, port, "worker.R") + } + } + /** * Create an RRDD given a sequence of byte arrays. Used to create RRDD when `parallelize` is * called from R. From e2d144a798f8ef293467ed8a3eb20b6cf77dcb56 Mon Sep 17 00:00:00 2001 From: Felix Cheung Date: Mon, 2 Mar 2015 17:52:10 -0800 Subject: [PATCH 540/687] Fixed small typos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 027614ab74808..92ee42adf8363 100644 --- a/README.md +++ b/README.md @@ -152,10 +152,10 @@ YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ ./sparkR examples/pi.R yarn-client ## Running on a cluster using sparkR-submit -sparkR-submit is a script introduced to faciliate submission of SparkR jobs to a Spark supported cluster (eg. Standalone, Mesos, YARN). +sparkR-submit is a script introduced to facilitate submission of SparkR jobs to a Spark supported cluster (eg. Standalone, Mesos, YARN). It supports the same commandline parameters as [spark-submit](http://spark.apache.org/docs/latest/submitting-applications.html). SPARK_HOME and JAVA_HOME must be defined. -On YARN, YARN_HOME must be defined. Currently, SparkR only supports [yarn-client](http://spark.apache.org/docs/latest/running-on-yarn.html) mode. +On YARN, YARN_HOME must be defined. Currently, SparkR only supports the [yarn-client](http://spark.apache.org/docs/latest/running-on-yarn.html) mode. sparkR-submit is installed with the SparkR package. By default, it can be found under the default Library (['library'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/libPaths.html) subdirectory of R_HOME) From 98cc97a7c94a61f290207e4a8481ae97203014c7 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 18:01:55 -0800 Subject: [PATCH 541/687] fix test and docs --- pkg/R/SQLContext.R | 8 -------- pkg/inst/tests/test_sparkSQL.R | 9 ++++----- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index ab2eb1035a777..702595a622597 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -148,11 +148,6 @@ tableNames <- function(sqlCtx, databaseName=NULL) { #' @export #' @examples #'\dontrun{ -#' sc <- sparkR.init() -#' sqlCtx <- sparkRSQL.init(sc) -#' path <- "path/to/file.json" -#' df <- jsonFile(sqlCtx, path) -#' registerTempTable(df, "table") #' cacheTable(sqlCtx, "table") #' } @@ -170,9 +165,6 @@ cacheTable <- function(sqlCtx, tableName) { #' @export #' @examples #'\dontrun{ -#' sc <- sparkR.init() -#' sqlCtx <- sparkRSQL.init(sc) -#' df <- table(sqlCtx, "table") #' uncacheTable(sqlCtx, "table") #' } diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index ef79941596b3e..1d9a10ce82b57 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -33,12 +33,11 @@ test_that("jsonRDD() on a RDD with json string", { expect_true(count(df) == 6) }) -test_that("test cache and persist and unpersist", { +test_that("test cache, uncache and clearCache", { df <- jsonFile(sqlCtx, jsonPath) - cache(sqlCtx, df) - persist(sqlCtx, df) - unpersist(sqlCtx, df) - expect_true(count(df) == 3) + registerTempTable(df, "temp") + cacheTable(sqlCtx, "temp") + uncacheTable(sqlCtx, "temp") clearCache(sqlCtx) }) From ed9a89f49cdb413d54bc6d1af6095a6cb23c43a0 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 2 Mar 2015 22:31:11 -0800 Subject: [PATCH 542/687] address comments --- pkg/NAMESPACE | 10 ++++----- pkg/R/SQLContext.R | 56 +++++++++++++++++++++++++++++++++++++++++++++- pkg/src/build.sbt | 2 +- 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 719e693912234..b4f7a78cb9e6e 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -122,16 +122,16 @@ exportMethods("asc", "countDistinct", "sumDistinct") -export("jsonFile", +export("cacheTable", + "clearCache", + "jsonFile", "jsonRDD", "parquetFile", "sql", "table", - "tables", "tableNames", - "cacheTable", - "uncacheTable", - "clearCache") + "tables", + "uncacheTable") export("sparkRSQL.init") export("print.structType", diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 702595a622597..3669dc9c16484 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -30,6 +30,20 @@ jsonFile <- function(sqlCtx, path) { #' JSON RDD #' #' Loads an RDD storing one JSON object per string as a DataFrame. +#' +#' @param sqlCtx SQLContext to use +#' @param rdd An RDD of JSON string +#' @param schema A StructType object to use as schema +#' @param samplingRatio The ratio of simpling used to infer the schema +#' @return A DataFrame +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' rdd <- texFile(sc, "path/to/json") +#' df <- jsonRDD(sqlCtx, rdd) +#' } # TODO: support schema jsonRDD <- function(sqlCtx, rdd, schema = NULL, samplingRatio = 1.0) { @@ -111,10 +125,21 @@ table <- function(sqlCtx, tableName) { } -#' Tablesq +#' Tables #' #' Returns a DataFrame containing names of tables in the given database. +#' +#' @param sqlCtx SQLContext to use +#' @param databaseName name of the database +#' @return a DataFrame #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' tables(sqlCtx, "hive") +#' } + tables <- function(sqlCtx, databaseName=NULL) { jdf <- if (is.null(databaseName)) { callJMethod(sqlCtx, "tables") @@ -128,7 +153,18 @@ tables <- function(sqlCtx, databaseName=NULL) { #' Table Names #' #' Returns the names of tables in the given database as an array. +#' +#' @param sqlCtx SQLContext to use +#' @param databaseName name of the database +#' @return a list of table names #' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' tableNames(sqlCtx, "hive") +#' } + tableNames <- function(sqlCtx, databaseName=NULL) { if (is.null(databaseName)) { callJMethod(sqlCtx, "tableNames") @@ -148,6 +184,11 @@ tableNames <- function(sqlCtx, databaseName=NULL) { #' @export #' @examples #'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' registerTempTable(df, "table") #' cacheTable(sqlCtx, "table") #' } @@ -165,6 +206,11 @@ cacheTable <- function(sqlCtx, tableName) { #' @export #' @examples #'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' registerTempTable(df, "table") #' uncacheTable(sqlCtx, "table") #' } @@ -177,6 +223,14 @@ uncacheTable <- function(sqlCtx, tableName) { #' #' Removes all cached tables from the in-memory cache. #' +#' @param sqlCtx SQLContext to use +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' clearCache(sqlCtx) +#' } clearCache <- function(sqlCtx) { callJMethod(sqlCtx, "clearCache") diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 1ee53463b721a..26746f6e6e86d 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -29,7 +29,7 @@ libraryDependencies ++= Seq( val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" - val defaultSparkVersion = "1.3.0" + val defaultSparkVersion = "1.3.0-SNAPSHOT" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( From e8639c3d154e0b119ac8b2b38b532b1fa250ba81 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Mar 2015 13:17:29 -0600 Subject: [PATCH 543/687] New 1.3 repo and updates to `column.R` Updated column to use `functions` instead of `Dsl` in accordance with the new API changes. Also created separate classes for `asc` and `desc`. --- pkg/R/column.R | 30 +++++++++++++++++++++++------- pkg/inst/tests/test_sparkSQL.R | 2 +- pkg/src/build.sbt | 3 ++- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/pkg/R/column.R b/pkg/R/column.R index 1b1132cca352a..89516bae950cd 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -26,7 +26,7 @@ column <- function(jc) { # TODO: change Dsl to functions once update spark-sql # A helper function to create a column from name col <- function(x) { - column(callJStatic("org.apache.spark.sql.Dsl", "col", x)) + column(callJStatic("org.apache.spark.sql.functions", "col", x)) } # TODO(davies): like, rlike, startwith, substr, getField, getItem @@ -38,7 +38,7 @@ operators <- list( ) functions <- c("min", "max", "sum", "avg", "mean", "count", "abs", "sqrt", - "first", "last", "asc", "desc", "lower", "upper", "sumDistinct", + "first", "last", "lower", "upper", "sumDistinct", "isNull", "isNotNull") createOperator <- function(op) { @@ -65,7 +65,7 @@ createFunction <- function(name) { setMethod(name, signature(x = "Column"), function(x) { - jc <- callJStatic("org.apache.spark.sql.Dsl", name, x@jc) + jc <- callJStatic("org.apache.spark.sql.functions", name, x@jc) column(jc) }) } @@ -77,8 +77,6 @@ createMethods <- function() { setGeneric("avg", function(x) { standardGeneric("avg") }) setGeneric("last", function(x) { standardGeneric("last") }) - setGeneric("asc", function(x) { standardGeneric("asc") }) - setGeneric("desc", function(x) { standardGeneric("desc") }) setGeneric("lower", function(x) { standardGeneric("lower") }) setGeneric("upper", function(x) { standardGeneric("upper") }) setGeneric("isNull", function(x) { standardGeneric("isNull") }) @@ -92,6 +90,24 @@ createMethods <- function() { createMethods() +setGeneric("asc", function(x) { standardGeneric("asc") }) + +setMethod("asc", + signature(x = "Column"), + function(x) { + jc <- callJMethod(x@jc, "asc") + column(jc) + }) + +setGeneric("desc", function(x) { standardGeneric("desc") }) + +setMethod("desc", + signature(x = "Column"), + function(x) { + jc <- callJMethod(x@jc, "desc") + column(jc) + }) + setMethod("alias", signature(object = "Column"), function(object, data) { @@ -117,7 +133,7 @@ setGeneric("approxCountDistinct", function(x, ...) { standardGeneric("approxCoun setMethod("approxCountDistinct", signature(x = "Column"), function(x, rsd = 0.95) { - jc <- callJStatic("org.apache.spark.sql.Dsl", "approxCountDistinct", x@jc, rsd) + jc <- callJStatic("org.apache.spark.sql.functions", "approxCountDistinct", x@jc, rsd) column(jc) }) @@ -129,7 +145,7 @@ setMethod("countDistinct", jcol <- lapply(list(...), function (x) { x@jc }) - jc <- callJStatic("org.apache.spark.sql.Dsl", "countDistinct", x@jc, listToSeq(jcol)) + jc <- callJStatic("org.apache.spark.sql.functions", "countDistinct", x@jc, listToSeq(jcol)) column(jc) }) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index d01f353867e0b..67b26c48c7fd4 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -166,7 +166,7 @@ test_that("schema(), dtypes(), columns(), names() return the correct values/form df <- jsonFile(sqlCtx, jsonPath) testSchema <- schema(df) expect_true(length(testSchema$fields()) == 2) - expect_true(testSchema$fields()[[1]]$dataType.toString() == "IntegerType") + expect_true(testSchema$fields()[[1]]$dataType.toString() == "LongType") expect_true(testSchema$fields()[[2]]$dataType.simpleString() == "string") expect_true(testSchema$fields()[[1]]$name() == "age") diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 1ee53463b721a..97211b692f8d2 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -29,7 +29,7 @@ libraryDependencies ++= Seq( val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" - val defaultSparkVersion = "1.3.0" + val defaultSparkVersion = "1.3.0-SNAPSHOT-sparkr" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( @@ -53,6 +53,7 @@ libraryDependencies ++= Seq( } resolvers ++= Seq( + "SparkR 1.3 Snapshots" at "https://s3-us-west-2.amazonaws.com/sparkr-dep-1.3/release", "Apache Staging" at "https://repository.apache.org/content/repositories/staging/", "Typesafe" at "http://repo.typesafe.com/typesafe/releases", "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", From 2b6f98036c9d124c9d8430644420dc8a60dbb1ac Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 3 Mar 2015 12:08:07 -0800 Subject: [PATCH 544/687] shutdown the JVM after R process die --- pkg/R/sparkR.R | 6 ++++- .../cs/amplab/sparkr/SparkRBackend.scala | 26 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index a623d84812d17..2e8797c2d39d1 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -149,11 +149,15 @@ sparkR.init <- function( } f <- file(path, open='rb') sparkRBackendPort <- readInt(f) + monitorPort <- readInt(f) close(f) file.remove(path) - if (length(sparkRBackendPort) == 0) { + if (length(sparkRBackendPort) == 0 || sparkRBackendPort == 0 || + length(monitorPort) == 0 || monitorPort == 0) { stop("JVM failed to launch") } + # never close this socket, JVM is waiting for it + .sparkREnv$monitorF <- socketConnection(port = monitorPort) } .sparkREnv$sparkRBackendPort <- sparkRBackendPort diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index 89b2e7ada6b4c..a8365a465bf01 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -1,9 +1,11 @@ package edu.berkeley.cs.amplab.sparkr import java.io.{File, FileOutputStream, DataOutputStream, IOException} -import java.net.{InetSocketAddress, Socket} +import java.net.{ServerSocket, InetSocketAddress, Socket} import java.util.concurrent.TimeUnit +import scala.util.control.NonFatal + import io.netty.bootstrap.ServerBootstrap import io.netty.channel.ChannelFuture import io.netty.channel.ChannelInitializer @@ -85,13 +87,35 @@ object SparkRBackend { try { // bind to random port val boundPort = sparkRBackend.init() + val serverSocket = new ServerSocket(0, 1) + val listenPort = serverSocket.getLocalPort() + // tell the R process via temporary file val path = args(0) val f = new File(path + ".tmp") val dos = new DataOutputStream(new FileOutputStream(f)) dos.writeInt(boundPort) + dos.writeInt(listenPort) dos.close() f.renameTo(new File(path)) + + // wait for the end of stdin, then exit + new Thread("wait for stdin") { + setDaemon(true) + override def run(): Unit = { + // any un-catched exception will also shutdown JVM + val buf = new Array[Byte](1024) + // shutdown JVM if R does not connect back in 10 seconds + serverSocket.setSoTimeout(10000) + val inSocket = serverSocket.accept() + serverSocket.close() + // wait for the end of socket, closed if R process die + inSocket.getInputStream().read(buf) + sparkRBackend.close() + System.exit(0) + } + }.start() + sparkRBackend.run() } catch { case e: IOException => From 4fa634328c7d11d31239b40eb6a9a44899f70266 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Mar 2015 14:23:33 -0600 Subject: [PATCH 545/687] Refactor `join` generic for use with `DataFrame` --- pkg/R/pairRDD.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index 2b3c2a0bc8052..2525e541e3d8c 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -601,12 +601,12 @@ setMethod("foldByKey", #' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) #' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) #'} -setGeneric("join", function(x, y, numPartitions) { standardGeneric("join") }) +setGeneric("join", function(x, y, ...) { standardGeneric("join") }) #' @rdname join-methods #' @aliases join,RDD,RDD-method setMethod("join", - signature(x = "RDD", y = "RDD", numPartitions = "integer"), + signature(x = "RDD", y = "RDD"), function(x, y, numPartitions) { xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) @@ -615,7 +615,7 @@ setMethod("join", joinTaggedList(v, list(FALSE, FALSE)) } - joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numToInt(numPartitions)), doJoin) }) #' Left outer join two RDDs From 294ca4a9249618fffb523b341615e1e910344b9d Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Mar 2015 15:01:22 -0600 Subject: [PATCH 546/687] `join`, `sort`, and `filter` New DataFrame methods: - `join` - `sort` - `orderBy` - `filter` - `where` --- pkg/NAMESPACE | 6 +- pkg/R/DataFrame.R | 140 +++++++++++++++++++++++++++++++++ pkg/R/column.R | 2 - pkg/inst/tests/test_sparkSQL.R | 70 +++++++++++++++-- 4 files changed, 209 insertions(+), 9 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index e5c92c96d0d72..26d0690a3cac0 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -88,16 +88,20 @@ exportClasses("DataFrame") exportMethods("columns", "distinct", "dtypes", + "filter", "head", "limit", + "orderBy", "names", "printSchema", "registerTempTable", "repartition", "sampleDF", "schema", + "sortDF", "select", - "toRDD") + "toRDD", + "where") exportClasses("Column") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index f5f0927b4a29b..8da89e54f00bf 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -607,3 +607,143 @@ setMethod("select", signature(x = "DataFrame", col = "Column"), dataFrame(sdf) }) +#' SortDF +#' +#' Sort a DataFrame by the specified column(s). +#' +#' @param x A DataFrame to be sorted. +#' @param col Either a Column object or character vector indicating the field to sort on +#' @param ... Additional sorting fields +#' @return A DataFrame where all elements are sorted. +#' @rdname sortDF +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' sortDF(df, df$col1) +#' sortDF(df, "col1") +#' sortDF(df, asc(df$col1), desc(abs(df$col2))) +#' } +setGeneric("sortDF", function(x, col, ...) { standardGeneric("sortDF") }) + +setClassUnion("characterOrColumn", c("character", "Column")) + +#' @rdname sortDF +#' @export +setMethod("sortDF", + signature(x = "DataFrame", col = "characterOrColumn"), + function(x, col, ...) { + if (class(col) == "character") { + sdf <- callJMethod(x@sdf, "sort", col, toSeq(...)) + } else if (class(col) == "Column") { + jcols <- lapply(list(col, ...), function(c) { + c@jc + }) + sdf <- callJMethod(x@sdf, "sort", listToSeq(jcols)) + } + dataFrame(sdf) + }) + +#' @rdname sortDF +#' @export +setGeneric("orderBy", function(x, col) { standardGeneric("orderBy") }) + +#' @rdname sortDF +#' @export +setMethod("orderBy", + signature(x = "DataFrame", col = "characterOrColumn"), + function(x, col) { + sortDF(x, col) + }) + +#' Filter +#' +#' Filter the rows of a DataFrame according to a given condition. +#' +#' @param x A DataFrame to be sorted. +#' @param condition The condition to sort on. This may either be a Column expression +#' or a string containing a SQL statement +#' @return A DataFrame containing only the rows that meet the condition. +#' @rdname filter +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' filter(df, "col1 > 0") +#' filter(df, df$col2 != "abcdefg") +#' } +setGeneric("filter", function(x, condition) { standardGeneric("filter") }) + +#' @rdname filter +#' @export +setMethod("filter", + signature(x = "DataFrame", condition = "characterOrColumn"), + function(x, condition) { + if (class(condition) == "Column") { + condition <- condition@jc + } + sdf <- callJMethod(x@sdf, "filter", condition) + dataFrame(sdf) + }) + +#' @rdname filter +#' @export +setGeneric("where", function(x, condition) { standardGeneric("where") }) + +#' @rdname filter +#' @export +setMethod("where", + signature(x = "DataFrame", condition = "characterOrColumn"), + function(x, condition) { + filter(x, condition) + }) + +#' Join +#' +#' Join two DataFrames based on the given join expression. +#' +#' @param x A Spark DataFrame +#' @param y A Spark DataFrame +#' @param joinExpr (Optional) The expression used to perform the join. joinExpr must be a +#' Column expression. If joinExpr is omitted, join() wil perform a Cartesian join +#' @param joinType The type of join to perform. The following join types are available: +#' 'inner', 'outer', 'left_outer', 'right_outer', 'semijoin'. The default joinType is "inner". +#' @return A DataFrame containing the result of the join operation. +#' @rdname join +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df1 <- jsonFile(sqlCtx, path) +#' df2 <- jsonFile(sqlCtx, path2) +#' join(df1, df2) # Performs a Cartesian +#' join(df1, df2, df1$col1 == df2$col2) # Performs an inner join based on expression +#' join(df1, df2, df1$col1 == df2$col2, "right_outer") +#' } +setMethod("join", + signature(x = "DataFrame", y = "DataFrame"), + function(x, y, joinExpr = NULL, joinType = NULL) { + if (is.null(joinExpr)) { + sdf <- callJMethod(x@sdf, "join", y@sdf) + } else { + if (class(joinExpr) != "Column") stop("joinExpr must be a Column") + if (is.null(joinType)) { + sdf <- callJMethod(x@sdf, "join", y@sdf, joinExpr@jc) + } else { + if (joinType %in% c("inner", "outer", "left_outer", "right_outer", "semijoin")) { + sdf <- callJMethod(x@sdf, "join", y@sdf, joinExpr@jc, joinType) + } else { + stop("joinType must be one of the following types: ", + "'inner', 'outer', 'left_outer', 'right_outer', 'semijoin'") + } + } + } + dataFrame(sdf) + }) diff --git a/pkg/R/column.R b/pkg/R/column.R index 89516bae950cd..ba3343f799919 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -23,8 +23,6 @@ column <- function(jc) { new("Column", jc) } -# TODO: change Dsl to functions once update spark-sql -# A helper function to create a column from name col <- function(x) { column(callJStatic("org.apache.spark.sql.functions", "col", x)) } diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 67b26c48c7fd4..26450eca63dd1 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -47,7 +47,7 @@ test_that("union on two RDDs created from DataFrames returns an RRDD", { RDD2 <- toRDD(df) unioned <- unionRDD(RDD1, RDD2) expect_true(inherits(unioned, "RDD")) - expect_true(getSerializedMode(unioned) == "byte") + expect_true(SparkR:::getSerializedMode(unioned) == "byte") expect_true(collect(unioned)[[2]]$name == "Andy") }) @@ -69,13 +69,13 @@ test_that("union on mixed serialization types correctly returns a byte RRDD", { unionByte <- unionRDD(rdd, dfRDD) expect_true(inherits(unionByte, "RDD")) - expect_true(getSerializedMode(unionByte) == "byte") + expect_true(SparkR:::getSerializedMode(unionByte) == "byte") expect_true(collect(unionByte)[[1]] == 1) expect_true(collect(unionByte)[[12]]$name == "Andy") unionString <- unionRDD(textRDD, dfRDD) expect_true(inherits(unionString, "RDD")) - expect_true(getSerializedMode(unionString) == "byte") + expect_true(SparkR:::getSerializedMode(unionString) == "byte") expect_true(collect(unionString)[[1]] == "Michael") expect_true(collect(unionString)[[5]]$name == "Andy") }) @@ -88,7 +88,7 @@ test_that("objectFile() works with row serialization", { objectIn <- objectFile(sc, objectPath) expect_true(inherits(objectIn, "RDD")) - expect_true(getSerializedMode(objectIn) == "byte") + expect_true(SparkR:::getSerializedMode(objectIn) == "byte") expect_true(collect(objectIn)[[2]]$age == 30) }) @@ -241,17 +241,75 @@ test_that("column calculation", { }) test_that("column operators", { - c <- col("a") + c <- SparkR:::col("a") c2 <- (- c + 1 - 2) * 3 / 4.0 c3 <- (c + c2 - c2) * c2 %% c2 c4 <- (c > c2) & (c2 <= c3) | (c == c2) & (c2 != c3) }) test_that("column functions", { - c <- col("a") + c <- SparkR:::col("a") c2 <- min(c) + max(c) + sum(c) + avg(c) + count(c) + abs(c) + sqrt(c) c3 <- lower(c) + upper(c) + first(c) + last(c) c4 <- approxCountDistinct(c) + countDistinct(c) + cast(c, "string") }) +test_that("sortDF() and orderBy() on a DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) + sorted <- sortDF(df, df$age) + expect_true(collect(sorted)[1,2] == "Michael") + + sorted2 <- sortDF(df, "name") + expect_true(collect(sorted2)[2,"age"] == 19) + + sorted3 <- orderBy(df, asc(df$age)) + expect_true(is.na(first(sorted3)$age)) + expect_true(collect(sorted3)[2, "age"] == 19) + + sorted4 <- orderBy(df, desc(df$name)) + expect_true(first(sorted4)$name == "Michael") + expect_true(collect(sorted4)[3,"name"] == "Andy") +}) + +test_that("filter() on a DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) + filtered <- filter(df, "age > 20") + expect_true(count(filtered) == 1) + expect_true(collect(filtered)$name == "Andy") + filtered2 <- where(df, df$name != "Michael") + expect_true(count(filtered2) == 2) + expect_true(collect(filtered2)$age[2] == 19) +}) + +test_that("join() on a DataFrame", { +df <- jsonFile(sqlCtx, jsonPath) + +mockLines2 <- c("{\"name\":\"Michael\", \"test\": \"yes\"}", + "{\"name\":\"Andy\", \"test\": \"no\"}", + "{\"name\":\"Justin\", \"test\": \"yes\"}", + "{\"name\":\"Bob\", \"test\": \"yes\"}") +jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") +writeLines(mockLines2, jsonPath2) +df2 <- jsonFile(sqlCtx, jsonPath2) + +joined <- join(df, df2) +expect_equal(names(joined), c("age", "name", "name", "test")) +expect_true(count(joined) == 12) + +joined2 <- join(df, df2, df$name == df2$name) +expect_equal(names(joined2), c("age", "name", "name", "test")) +expect_true(count(joined2) == 3) + +joined3 <- join(df, df2, df$name == df2$name, "right_outer") +expect_equal(names(joined3), c("age", "name", "name", "test")) +expect_true(count(joined3) == 4) +expect_true(is.na(collect(joined3)$age[4])) + +joined4 <- select(join(df, df2, df$name == df2$name, "outer"), + alias(df$age + 5, "newAge"), df$name, df2$test) +expect_equal(names(joined4), c("newAge", "name", "test")) +expect_true(count(joined4) == 4) +expect_true(first(joined4)$newAge == 24) +}) + unlink(jsonPath) From 8ff29d6a82980e6e38e45a7721a7443ee9fa8be8 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 3 Mar 2015 13:35:41 -0800 Subject: [PATCH 547/687] fix tests --- pkg/inst/tests/test_sparkSQL.R | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 573549d2b8f49..a547e3225670c 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -35,19 +35,20 @@ test_that("jsonRDD() on a RDD with json string", { test_that("test cache, uncache and clearCache", { df <- jsonFile(sqlCtx, jsonPath) - registerTempTable(df, "temp") - cacheTable(sqlCtx, "temp") - uncacheTable(sqlCtx, "temp") + registerTempTable(df, "table1") + cacheTable(sqlCtx, "table1") + uncacheTable(sqlCtx, "table1") clearCache(sqlCtx) }) test_that("test tableNames and tables", { - expect_true(length(tableNames(sqlCtx)) == 0) + df <- jsonFile(sqlCtx, jsonPath) + registerTempTable(df, "table1") + expect_true(length(tableNames(sqlCtx)) == 1) df <- tables(sqlCtx) - expect_true(count(df) == 0) + expect_true(count(df) == 1) }) - test_that("registerTempTable() results in a queryable table and sql() results in a new DataFrame", { df <- jsonFile(sqlCtx, jsonPath) registerTempTable(df, "table1") From 2e7b19002918a1e447efe4b0b43af181c6b49844 Mon Sep 17 00:00:00 2001 From: Felix Cheung Date: Tue, 3 Mar 2015 13:41:25 -0800 Subject: [PATCH 548/687] small update on yarn deploy mode. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 92ee42adf8363..92bc035b87842 100644 --- a/README.md +++ b/README.md @@ -155,7 +155,7 @@ YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ ./sparkR examples/pi.R yarn-client sparkR-submit is a script introduced to facilitate submission of SparkR jobs to a Spark supported cluster (eg. Standalone, Mesos, YARN). It supports the same commandline parameters as [spark-submit](http://spark.apache.org/docs/latest/submitting-applications.html). SPARK_HOME and JAVA_HOME must be defined. -On YARN, YARN_HOME must be defined. Currently, SparkR only supports the [yarn-client](http://spark.apache.org/docs/latest/running-on-yarn.html) mode. +On YARN, YARN_CONF_DIR must be defined. sparkR-submit supports [YARN deploy modes](http://spark.apache.org/docs/latest/running-on-yarn.html): yarn-client and yarn-cluster. sparkR-submit is installed with the SparkR package. By default, it can be found under the default Library (['library'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/libPaths.html) subdirectory of R_HOME) From 32b37d1a8053dc328f2a2a377923a2141e197f2a Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Mar 2015 15:53:08 -0600 Subject: [PATCH 549/687] Fixed indent in `join` test. --- pkg/inst/tests/test_sparkSQL.R | 56 +++++++++++++++++----------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 26450eca63dd1..a4fae0c25f572 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -282,34 +282,34 @@ test_that("filter() on a DataFrame", { }) test_that("join() on a DataFrame", { -df <- jsonFile(sqlCtx, jsonPath) - -mockLines2 <- c("{\"name\":\"Michael\", \"test\": \"yes\"}", - "{\"name\":\"Andy\", \"test\": \"no\"}", - "{\"name\":\"Justin\", \"test\": \"yes\"}", - "{\"name\":\"Bob\", \"test\": \"yes\"}") -jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") -writeLines(mockLines2, jsonPath2) -df2 <- jsonFile(sqlCtx, jsonPath2) - -joined <- join(df, df2) -expect_equal(names(joined), c("age", "name", "name", "test")) -expect_true(count(joined) == 12) - -joined2 <- join(df, df2, df$name == df2$name) -expect_equal(names(joined2), c("age", "name", "name", "test")) -expect_true(count(joined2) == 3) - -joined3 <- join(df, df2, df$name == df2$name, "right_outer") -expect_equal(names(joined3), c("age", "name", "name", "test")) -expect_true(count(joined3) == 4) -expect_true(is.na(collect(joined3)$age[4])) - -joined4 <- select(join(df, df2, df$name == df2$name, "outer"), - alias(df$age + 5, "newAge"), df$name, df2$test) -expect_equal(names(joined4), c("newAge", "name", "test")) -expect_true(count(joined4) == 4) -expect_true(first(joined4)$newAge == 24) + df <- jsonFile(sqlCtx, jsonPath) + + mockLines2 <- c("{\"name\":\"Michael\", \"test\": \"yes\"}", + "{\"name\":\"Andy\", \"test\": \"no\"}", + "{\"name\":\"Justin\", \"test\": \"yes\"}", + "{\"name\":\"Bob\", \"test\": \"yes\"}") + jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") + writeLines(mockLines2, jsonPath2) + df2 <- jsonFile(sqlCtx, jsonPath2) + + joined <- join(df, df2) + expect_equal(names(joined), c("age", "name", "name", "test")) + expect_true(count(joined) == 12) + + joined2 <- join(df, df2, df$name == df2$name) + expect_equal(names(joined2), c("age", "name", "name", "test")) + expect_true(count(joined2) == 3) + + joined3 <- join(df, df2, df$name == df2$name, "right_outer") + expect_equal(names(joined3), c("age", "name", "name", "test")) + expect_true(count(joined3) == 4) + expect_true(is.na(collect(joined3)$age[4])) + + joined4 <- select(join(df, df2, df$name == df2$name, "outer"), + alias(df$age + 5, "newAge"), df$name, df2$test) + expect_equal(names(joined4), c("newAge", "name", "test")) + expect_true(count(joined4) == 4) + expect_true(first(joined4)$newAge == 24) }) unlink(jsonPath) From e14c3289f65809fbf5dcd4513954e0bbf92a1b2b Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Mar 2015 16:04:55 -0600 Subject: [PATCH 550/687] `selectExpr` --- pkg/NAMESPACE | 1 + pkg/R/DataFrame.R | 29 +++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 67 ++++++++++++++++++++-------------- 3 files changed, 69 insertions(+), 28 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 26d0690a3cac0..a2831f04c5a26 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -100,6 +100,7 @@ exportMethods("columns", "schema", "sortDF", "select", + "selectExpr", "toRDD", "where") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 8da89e54f00bf..8daae8d694cf4 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -607,6 +607,35 @@ setMethod("select", signature(x = "DataFrame", col = "Column"), dataFrame(sdf) }) + +#' SelectExpr +#' +#' Select from a DataFrame using a set of SQL expressions. +#' +#' @param x A DataFrame to be sorted. +#' @param expr A string containing a SQL expression +#' @param ... Additional expressions +#' @return A DataFrame +#' @rdname selectExpr +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' selectExpr(df, "col1", "(col2 * 5) as newCol") +#' } +setGeneric("selectExpr", function(x, expr, ...) { standardGeneric("selectExpr") }) + +setMethod("selectExpr", + signature(x = "DataFrame", expr = "character"), + function(x, expr, ...) { + exprList <- list(expr, ...) + sdf <- callJMethod(x@sdf, "selectExpr", listToSeq(exprList)) + dataFrame(sdf) + }) + #' SortDF #' #' Sort a DataFrame by the specified column(s). diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 26450eca63dd1..68ef8d0dc56a3 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -231,6 +231,17 @@ test_that("select with column", { expect_true(count(df2) == 3) }) +test_that("selectExpr() on a DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) + selected <- selectExpr(df, "age * 2") + expect_true(names(selected) == "age * 2") + expect_equal(collect(selected), collect(select(df, df$age * 2L))) + + selected2 <- selectExpr(df, "name as newName", "abs(age) as age") + expect_equal(names(selected2), c("newName", "age")) + expect_true(count(selected2) == 3) +}) + test_that("column calculation", { df <- jsonFile(sqlCtx, jsonPath) d <- collect(select(df, alias(df$age + 1, "age2"))) @@ -282,34 +293,34 @@ test_that("filter() on a DataFrame", { }) test_that("join() on a DataFrame", { -df <- jsonFile(sqlCtx, jsonPath) - -mockLines2 <- c("{\"name\":\"Michael\", \"test\": \"yes\"}", - "{\"name\":\"Andy\", \"test\": \"no\"}", - "{\"name\":\"Justin\", \"test\": \"yes\"}", - "{\"name\":\"Bob\", \"test\": \"yes\"}") -jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") -writeLines(mockLines2, jsonPath2) -df2 <- jsonFile(sqlCtx, jsonPath2) - -joined <- join(df, df2) -expect_equal(names(joined), c("age", "name", "name", "test")) -expect_true(count(joined) == 12) - -joined2 <- join(df, df2, df$name == df2$name) -expect_equal(names(joined2), c("age", "name", "name", "test")) -expect_true(count(joined2) == 3) - -joined3 <- join(df, df2, df$name == df2$name, "right_outer") -expect_equal(names(joined3), c("age", "name", "name", "test")) -expect_true(count(joined3) == 4) -expect_true(is.na(collect(joined3)$age[4])) - -joined4 <- select(join(df, df2, df$name == df2$name, "outer"), - alias(df$age + 5, "newAge"), df$name, df2$test) -expect_equal(names(joined4), c("newAge", "name", "test")) -expect_true(count(joined4) == 4) -expect_true(first(joined4)$newAge == 24) + df <- jsonFile(sqlCtx, jsonPath) + + mockLines2 <- c("{\"name\":\"Michael\", \"test\": \"yes\"}", + "{\"name\":\"Andy\", \"test\": \"no\"}", + "{\"name\":\"Justin\", \"test\": \"yes\"}", + "{\"name\":\"Bob\", \"test\": \"yes\"}") + jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") + writeLines(mockLines2, jsonPath2) + df2 <- jsonFile(sqlCtx, jsonPath2) + + joined <- join(df, df2) + expect_equal(names(joined), c("age", "name", "name", "test")) + expect_true(count(joined) == 12) + + joined2 <- join(df, df2, df$name == df2$name) + expect_equal(names(joined2), c("age", "name", "name", "test")) + expect_true(count(joined2) == 3) + + joined3 <- join(df, df2, df$name == df2$name, "right_outer") + expect_equal(names(joined3), c("age", "name", "name", "test")) + expect_true(count(joined3) == 4) + expect_true(is.na(collect(joined3)$age[4])) + + joined4 <- select(join(df, df2, df$name == df2$name, "outer"), + alias(df$age + 5, "newAge"), df$name, df2$test) + expect_equal(names(joined4), c("newAge", "name", "test")) + expect_true(count(joined4) == 4) + expect_true(first(joined4)$newAge == 24) }) unlink(jsonPath) From 494a4ddef3bc39a8caa848c931033e1a6f6911bf Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Mar 2015 16:06:06 -0600 Subject: [PATCH 551/687] update export --- pkg/R/DataFrame.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 8daae8d694cf4..b8b118da0e6d2 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -628,6 +628,8 @@ setMethod("select", signature(x = "DataFrame", col = "Column"), #' } setGeneric("selectExpr", function(x, expr, ...) { standardGeneric("selectExpr") }) +#' @rdname selectExpr +#' @export setMethod("selectExpr", signature(x = "DataFrame", expr = "character"), function(x, expr, ...) { From acea1468a9c71ea5d711e0a6845b79d4ad6c8b21 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Mar 2015 16:20:55 -0600 Subject: [PATCH 552/687] remove extra line --- pkg/R/DataFrame.R | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index b8b118da0e6d2..09adfce07f5ad 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -607,7 +607,6 @@ setMethod("select", signature(x = "DataFrame", col = "Column"), dataFrame(sdf) }) - #' SelectExpr #' #' Select from a DataFrame using a set of SQL expressions. From 79186340c2095ba6ec32b06ebb1a3daffd72b486 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Tue, 3 Mar 2015 16:22:31 -0600 Subject: [PATCH 553/687] Fix test --- pkg/inst/tests/test_sparkSQL.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 68ef8d0dc56a3..539fde06e0108 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -234,7 +234,7 @@ test_that("select with column", { test_that("selectExpr() on a DataFrame", { df <- jsonFile(sqlCtx, jsonPath) selected <- selectExpr(df, "age * 2") - expect_true(names(selected) == "age * 2") + expect_true(names(selected) == "(age * 2)") expect_equal(collect(selected), collect(select(df, df$age * 2L))) selected2 <- selectExpr(df, "name as newName", "abs(age) as age") From 197a79b856237f2752e31f76183e715da5b2146b Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 3 Mar 2015 22:41:04 -0800 Subject: [PATCH 554/687] add HiveContext (commented) --- pkg/NAMESPACE | 10 ++--- pkg/R/DataFrame.R | 27 +++++++----- pkg/R/sparkR.R | 43 +++++++++++++------ pkg/inst/tests/test_sparkSQL.R | 20 ++++++++- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 16 +++++-- 5 files changed, 82 insertions(+), 34 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 96b2203538ac1..85cfb70828c20 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -128,14 +128,14 @@ exportMethods("asc", "countDistinct", "sumDistinct") -export("jsonFile", +export("cacheTable", + "createExternalTable", + "jsonFile", + "loadDF", "parquetFile", "sql", "table", - "cacheTable", - "uncacheTable", - "loadDF", - "createExternalTable") + "uncacheTable") export("sparkRSQL.init") export("print.structType", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index a5a68f3b53ef3..07afa5d171de3 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -749,11 +749,6 @@ setMethod("join", }) -#' Return the SaveMode by name -toJMode <- function(name) { - -} - #' Save the contents of the DataFrame to a data source #' #' The data source is specified by the `source` and a set of options (...). @@ -785,6 +780,8 @@ toJMode <- function(name) { #' saveAsTable(df, "myfile") #' } +allModes <- c("append", "overwrite", "error", "ignore") + setGeneric("saveDF", function(df, path, source, mode, ...) { standardGeneric("saveDF") }) setMethod("saveDF", @@ -792,11 +789,15 @@ setMethod("saveDF", mode = 'character'), function(df, path=NULL, source=NULL, mode="append", ...){ if (is.null(source)) { - # TODO: read from conf - source = 'parquet' + sqlCtx <- get(".sparkRSQLsc", envir = .sparkREnv) + source <- callJMethod(sqlCtx, "getConf", "spark.sql.sources.default", + "org.apache.spark.sql.parquet") + } + if (!(mode %in% allModes)) { + stop('mode should be one of "append", "overwrite", "error", "ignore"') } jmode <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "saveMode", mode) - options <- varargToEnv(...) + options <- varargsToEnv(...) if (!is.null(path)) { options[['path']] = path } @@ -846,11 +847,15 @@ setMethod("saveAsTable", mode = 'character'), function(df, tableName, source=NULL, mode="append", ...){ if (is.null(source)) { - #' TODO: getConf('spark.sql.sources.default') - source <- 'parquet' + sqlCtx <- get(".sparkRSQLsc", envir = .sparkREnv) + source <- callJMethod(sqlCtx, "getConf", "spark.sql.sources.default", + "org.apache.spark.sql.parquet") + } + if (!(mode %in% allModes)) { + stop('mode should be one of "append", "overwrite", "error", "ignore"') } jmode <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "saveMode", mode) - options <- varargToEnv(...) + options <- varargsToEnv(...) callJMethod(df@sdf, "saveAsTable", tableName, source, jmode, options) }) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 757f830316f5e..73300b68a5939 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -221,22 +221,39 @@ sparkR.init <- function( #'} sparkRSQL.init <- function(jsc) { - sparkContext = callJMethod(jsc, "sc") - if (exists(".sparkRSQLsc", envir = .sparkREnv)) { cat("Re-using existing SparkSQL Context. Please restart R to create a new SparkSQL Context\n") return(get(".sparkRSQLsc", envir = .sparkREnv)) } - - assign( - ".sparkRSQLsc", - callJStatic( - "edu.berkeley.cs.amplab.sparkr.SQLUtils", - "createSQLContext", - sparkContext), - envir = .sparkREnv - ) - sqlCtx <- get(".sparkRSQLsc", envir = .sparkREnv) - + + sqlCtx <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", + "createSQLContext", + jsc) + assign(".sparkRSQLsc", sqlCtx, envir = .sparkREnv) sqlCtx } + +#' Initialize a new HiveContext. +#' +#' This function creates a HiveContext from an existing JavaSparkContext +#' +#' @param jsc The existing JavaSparkContext created with SparkR.init() +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRHive.init(sc) +#'} + +sparkRHive.init <- function(jsc) { + if (exists(".sparkRHivesc", envir = .sparkREnv)) { + cat("Re-using existing HiveContext. Please restart R to create a new HiveContext\n") + return(get(".sparkRHivesc", envir = .sparkREnv)) + } + + hiveCtx <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", + "createHiveContext", + jsc) + assign(".sparkRHivesc", hiveCtx, envir = .sparkREnv) + hiveCtx +} diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index df79c95af2b77..0739c8e8a7604 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -255,7 +255,25 @@ test_that("save() as parquet file", { df2 <- loadDF(sqlCtx, parquetPath, "parquet") expect_true(inherits(df2, "DataFrame")) expect_true(count(df2) == 3) -} +}) + +#test_that("test HiveContext", { +# hiveCtx <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", +# "createTestHiveContext", +# sc) +# df <- createExternalTable(hiveCtx, "json", jsonPath, "json") +# expect_true(inherits(df, "DataFrame")) +# expect_true(count(df) == 3) +# df2 <- sql(hiveCtx, "select * from json") +# expect_true(inherits(df2, "DataFrame")) +# expect_true(count(df2) == 3) +# +# jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") +# saveAsTable(df, "json", "json", "append", path = jsonPath2) +# df3 <- sql(hiveCtx, "select * from json") +# expect_true(inherits(df3, "DataFrame")) +# expect_true(count(df3) == 6) +#}) test_that("column operators", { c <- SparkR:::col("a") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 7937b51ff627a..3d7d4d7731d6f 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -1,9 +1,9 @@ package edu.berkeley.cs.amplab.sparkr -import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD -import org.apache.spark.api.java.JavaRDD +import org.apache.spark.api.java.{JavaRDD, JavaSparkContext} import org.apache.spark.sql.{SQLContext, DataFrame, Row, SaveMode} +//import org.apache.spark.sql.hive.{HiveContext, TestHiveContext} import edu.berkeley.cs.amplab.sparkr.SerDe._ @@ -11,10 +11,18 @@ import java.io.ByteArrayOutputStream import java.io.DataOutputStream object SQLUtils { - def createSQLContext(sc: SparkContext): SQLContext = { - new SQLContext(sc) + def createSQLContext(jsc: JavaSparkContext): SQLContext = { + new SQLContext(jsc.sc) } +// def createHiveContext(jsc: JavaSparkContext): HiveContext = { +// new HiveContext(jsc.sc) +// } +// +// def createTestHiveContext(jsc: JavaSparkContext): TestHiveContext = { +// new TestHiveContext(jsc.sc) +// } + def toSeq[T](arr: Array[T]): Seq[T] = { arr.toSeq } From 8de958d9f295643f3e5b7089ddb9363dad4f7421 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 3 Mar 2015 22:45:02 -0800 Subject: [PATCH 555/687] Update SparkRBackend.scala --- .../scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index a8365a465bf01..be64c68204c87 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -100,7 +100,7 @@ object SparkRBackend { f.renameTo(new File(path)) // wait for the end of stdin, then exit - new Thread("wait for stdin") { + new Thread("wait for socket to close") { setDaemon(true) override def run(): Unit = { // any un-catched exception will also shutdown JVM From d18f9d334c3f0bdf21cd9ab0372aa02f1fa9c7df Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 3 Mar 2015 22:57:36 -0800 Subject: [PATCH 556/687] Remove SparkR snapshot build We now have 1.3.0 RC2 on Apache Staging --- pkg/src/build.sbt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 97211b692f8d2..1ee53463b721a 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -29,7 +29,7 @@ libraryDependencies ++= Seq( val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" - val defaultSparkVersion = "1.3.0-SNAPSHOT-sparkr" + val defaultSparkVersion = "1.3.0" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( @@ -53,7 +53,6 @@ libraryDependencies ++= Seq( } resolvers ++= Seq( - "SparkR 1.3 Snapshots" at "https://s3-us-west-2.amazonaws.com/sparkr-dep-1.3/release", "Apache Staging" at "https://repository.apache.org/content/repositories/staging/", "Typesafe" at "http://repo.typesafe.com/typesafe/releases", "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", From a37fd808254f506d252885ee4f9c9829eb6c8847 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 3 Mar 2015 23:49:48 -0800 Subject: [PATCH 557/687] Update sparkR.R --- pkg/R/sparkR.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 2e8797c2d39d1..eccc9aeec6cb4 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -153,7 +153,7 @@ sparkR.init <- function( close(f) file.remove(path) if (length(sparkRBackendPort) == 0 || sparkRBackendPort == 0 || - length(monitorPort) == 0 || monitorPort == 0) { + length(monitorPort) == 0 || monitorPort == 0) { stop("JVM failed to launch") } # never close this socket, JVM is waiting for it From 3865f394e5e2187bc4ac710d587a48df1177b310 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Wed, 4 Mar 2015 18:26:16 +0800 Subject: [PATCH 558/687] [SPARKR-156] phase 1: implement zipWithUniqueId() of the RDD class. --- pkg/NAMESPACE | 3 ++- pkg/R/RDD.R | 41 ++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 14 +++++++++++++ pkg/man/zipWithUniqueId.Rd | 36 +++++++++++++++++++++++++++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 pkg/man/zipWithUniqueId.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 26511b8c0c29d..f2f22ad4d6f1b 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -62,7 +62,8 @@ exportMethods( "unionRDD", "unpersist", "value", - "values" + "values", + "zipWithUniqueId" ) # S3 methods exported diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index d7d92e2aa8d7e..07a51a28e3d76 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1427,6 +1427,47 @@ setMethod("setName", x }) +#' Zip an RDD with generated unique Long IDs. +#' +#' Items in the kth partition will get ids k, n+k, 2*n+k, ..., where +#' n is the number of partitions. So there may exist gaps, but this +#' method won't trigger a spark job, which is different from +#' zipWithIndex. +#' +#' @param x An RDD to be zipped. +#' @return An RDD with zipped items. +#' @rdname zipWithUniqueId +#' @seealso zipWithIndex +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) +#' collect(zipWithUniqueId(rdd)) +#' # list(list("a", 0), list("b", 3), list("c", 1), list("d", 4), list("e", 2)) +#'} +setGeneric("zipWithUniqueId", function(x) { standardGeneric("zipWithUniqueId") }) + +#' @rdname zipWithUniqueId +#' @aliases zipWithUniqueId,RDD +setMethod("zipWithUniqueId", + signature(x = "RDD"), + function(x) { + n <- numPartitions(x) + + partitionFunc <- function(split, part) { + index <- 0 + result <- vector("list", length(part)) + for (item in part) { + result[[index + 1]] <- list(item, index * n + split) + index <- index + 1 + } + result + } + + lapplyPartitionsWithIndex(x, partitionFunc) + }) + ############ Binary Functions ############# #' Return the union RDD of two RDDs. diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 709bf6716ea30..7541bfe99631b 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -348,6 +348,20 @@ test_that("aggregateRDD() on RDDs", { expect_equal(actual, list(0, 0)) }) +test_that("zipWithUniqueId() on RDDs", { + rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) + actual <- collect(zipWithUniqueId(rdd)) + expected <- list(list("a", 0), list("b", 3), list("c", 1), + list("d", 4), list("e", 2)) + expect_equal(actual, expected) + + rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 1L) + actual <- collect(zipWithUniqueId(rdd)) + expected <- list(list("a", 0), list("b", 1), list("c", 2), + list("d", 3), list("e", 4)) + expect_equal(actual, expected) +}) + test_that("keys() on RDDs", { keys <- keys(intRdd) actual <- collect(keys) diff --git a/pkg/man/zipWithUniqueId.Rd b/pkg/man/zipWithUniqueId.Rd new file mode 100644 index 0000000000000..a25d91c665e08 --- /dev/null +++ b/pkg/man/zipWithUniqueId.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{zipWithUniqueId} +\alias{zipWithUniqueId} +\alias{zipWithUniqueId,RDD} +\alias{zipWithUniqueId,RDD-method} +\title{Zip an RDD with generated unique Long IDs.} +\usage{ +zipWithUniqueId(x) + +\S4method{zipWithUniqueId}{RDD}(x) +} +\arguments{ +\item{x}{An RDD to be zipped.} +} +\value{ +An RDD with zipped items. +} +\description{ +Items in the kth partition will get ids k, n+k, 2*n+k, ..., where +n is the number of partitions. So there may exist gaps, but this +method won't trigger a spark job, which is different from +zipWithIndex. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) +collect(zipWithUniqueId(rdd)) +# list(list("a", 0), list("b", 3), list("c", 1), list("d", 4), list("e", 2)) +} +} +\seealso{ +zipWithIndex +} + From bc901159e30ef3bebb2b8a7a36c9abfb3b1cf230 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 08:33:00 -0600 Subject: [PATCH 559/687] Fixed docs --- pkg/R/DataFrame.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 09adfce07f5ad..704470cd5210c 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -611,7 +611,7 @@ setMethod("select", signature(x = "DataFrame", col = "Column"), #' #' Select from a DataFrame using a set of SQL expressions. #' -#' @param x A DataFrame to be sorted. +#' @param x A DataFrame to be selected from. #' @param expr A string containing a SQL expression #' @param ... Additional expressions #' @return A DataFrame From 870acd488d2894e7c185ab75aa136eba7e77c8ef Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 4 Mar 2015 08:52:20 -0800 Subject: [PATCH 560/687] Use rc2 explicitly --- pkg/src/build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index 1ee53463b721a..e750af13d16de 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -29,7 +29,7 @@ libraryDependencies ++= Seq( val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" - val defaultSparkVersion = "1.3.0" + val defaultSparkVersion = "1.3.0-rc2" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( From 20242c4d1e13313d5a62f14617a75009fe787cf9 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 13:36:16 -0600 Subject: [PATCH 561/687] clean up docs --- pkg/R/DataFrame.R | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 704470cd5210c..15fba9a51c1d9 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -14,7 +14,6 @@ setOldClass("jobj") #' @param env An R environment that stores bookkeeping states of the DataFrame #' @param sdf A Java object reference to the backing Scala DataFrame #' @export - setClass("DataFrame", slots = list(env = "environment", sdf = "jobj")) @@ -29,7 +28,6 @@ setMethod("initialize", "DataFrame", function(.Object, sdf, isCached) { #' @rdname DataFrame #' @export - dataFrame <- function(sdf, isCached = FALSE) { new("DataFrame", sdf, isCached) } @@ -52,7 +50,6 @@ dataFrame <- function(sdf, isCached = FALSE) { #' df <- jsonFile(sqlCtx, path) #' printSchema(df) #'} - setGeneric("printSchema", function(x) { standardGeneric("printSchema") }) setMethod("printSchema", @@ -78,9 +75,10 @@ setMethod("printSchema", #' df <- jsonFile(sqlCtx, path) #' dfSchema <- schema(df) #'} - setGeneric("schema", function(x) { standardGeneric("schema") }) +#' @rdname schema +#' @export setMethod("schema", signature(x = "DataFrame"), function(x) { @@ -103,9 +101,10 @@ setMethod("schema", #' df <- jsonFile(sqlCtx, path) #' dtypes(df) #'} - setGeneric("dtypes", function(x) { standardGeneric("dtypes") }) +#' @rdname dtypes +#' @export setMethod("dtypes", signature(x = "DataFrame"), function(x) { @@ -132,6 +131,8 @@ setMethod("dtypes", #'} setGeneric("columns", function(x) {standardGeneric("columns") }) +#' @rdname columns +#' @export setMethod("columns", signature(x = "DataFrame"), function(x) { @@ -166,9 +167,10 @@ setMethod("names", #' registerTempTable(df, "json_df") #' new_df <- sql(sqlCtx, "SELECT * FROM json_df") #'} - setGeneric("registerTempTable", function(x, tableName) { standardGeneric("registerTempTable") }) +#' @rdname registerTempTable +#' @export setMethod("registerTempTable", signature(x = "DataFrame", tableName = "character"), function(x, tableName) { @@ -191,7 +193,6 @@ setMethod("registerTempTable", #' df <- jsonFile(sqlCtx, path) #' cache(df) #'} - setMethod("cache", signature(x = "DataFrame"), function(x) { @@ -217,7 +218,6 @@ setMethod("cache", #' df <- jsonFile(sqlCtx, path) #' persist(df, "MEMORY_AND_DISK") #'} - setMethod("persist", signature(x = "DataFrame", newLevel = "character"), function(x, newLevel) { @@ -244,7 +244,6 @@ setMethod("persist", #' persist(df, "MEMORY_AND_DISK") #' unpersist(df) #'} - setMethod("unpersist", signature(x = "DataFrame"), function(x, blocking = TRUE) { @@ -269,7 +268,6 @@ setMethod("unpersist", #' df <- jsonFile(sqlCtx, path) #' newDF <- repartition(df, 2L) #'} - setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartition") }) #' @rdname repartition @@ -296,7 +294,6 @@ setMethod("repartition", #' df <- jsonFile(sqlCtx, path) #' distinctDF <- distinct(df) #'} - setMethod("distinct", signature(x = "DataFrame"), function(x) { @@ -322,7 +319,6 @@ setMethod("distinct", #' collect(sampleDF(df, FALSE, 0.5)) #' collect(sampleDF(df, TRUE, 0.5)) #'} - setGeneric("sampleDF", function(x, withReplacement, fraction, seed) { standardGeneric("sampleDF") @@ -330,7 +326,6 @@ setGeneric("sampleDF", #' @rdname sampleDF #' @export - setMethod("sampleDF", # TODO : Figure out how to send integer as java.lang.Long to JVM so # we can send seed as an argument through callJMethod @@ -358,7 +353,6 @@ setMethod("sampleDF", #' df <- jsonFile(sqlCtx, path) #' count(df) #' } - setMethod("count", signature(x = "DataFrame"), function(x) { @@ -382,7 +376,6 @@ setMethod("count", #' collected <- collect(df) #' firstName <- collected[[1]]$name #' } - setMethod("collect", signature(x = "DataFrame"), function(x, stringsAsFactors = FALSE) { @@ -419,9 +412,10 @@ setMethod("collect", #' df <- jsonFile(sqlCtx, path) #' limitedDF <- limit(df, 10) #' } - setGeneric("limit", function(x, num) {standardGeneric("limit") }) +#' @rdname limit +#' @export setMethod("limit", signature(x = "DataFrame", num = "numeric"), function(x, num) { @@ -441,7 +435,6 @@ setMethod("limit", #' df <- jsonFile(sqlCtx, path) #' take(df, 2) #' } - setMethod("take", signature(x = "DataFrame", num = "numeric"), function(x, num) { @@ -469,7 +462,6 @@ setMethod("take", #' df <- jsonFile(sqlCtx, path) #' head(df) #' } - setMethod("head", signature(x = "DataFrame"), function(x, num = 6L) { @@ -491,7 +483,6 @@ setMethod("head", #' df <- jsonFile(sqlCtx, path) #' first(df) #' } - setMethod("first", signature(x = "DataFrame"), function(x) { @@ -514,9 +505,10 @@ setMethod("first", #' df <- jsonFile(sqlCtx, path) #' rdd <- toRDD(df) #' } - setGeneric("toRDD", function(x) { standardGeneric("toRDD") }) +#' @rdname DataFrame +#' @export setMethod("toRDD", signature(x = "DataFrame"), function(x) { From 0ac4abc5a58bd7c0cc06eaccc741124055f56b46 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 13:36:37 -0600 Subject: [PATCH 562/687] 'explain` --- pkg/NAMESPACE | 1 + pkg/R/DataFrame.R | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index f72a2c103ce32..193dff8c2dafb 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -88,6 +88,7 @@ exportClasses("DataFrame") exportMethods("columns", "distinct", "dtypes", + "explain", "filter", "head", "limit", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 15fba9a51c1d9..a2be5c283adda 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -85,6 +85,32 @@ setMethod("schema", structType(callJMethod(x@sdf, "schema")) }) +#' Explain +#' +#' Print the logical and physical Catalyst plans to the console for debugging. +#' +#' @param x A SparkSQL DataFrame +#' @param extended Logical. If extended is False, explain() only prints the physical plan. +#' @rdname explain +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' explain(df, TRUE) +#'} +setGeneric("explain", function(x, ...) { standardGeneric("explain") }) + +#' @rdname explain +#' @export +setMethod("explain", + signature(x = "DataFrame"), + function(x, extended = FALSE) { + callJMethod(x@sdf, "explain", extended) + }) + #' DataTypes #' #' Return all column names and their data types as a list From 68b11cf53723188b1c93c084119c44b7b92f0340 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 13:37:02 -0600 Subject: [PATCH 563/687] `toJSON` --- pkg/NAMESPACE | 1 + pkg/R/DataFrame.R | 28 ++++++++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 10 +++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 193dff8c2dafb..edf18113bcf1d 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -102,6 +102,7 @@ exportMethods("columns", "sortDF", "select", "selectExpr", + "toJSON", "toRDD", "where") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index a2be5c283adda..f85305b49b4d8 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -305,6 +305,34 @@ setMethod("repartition", dataFrame(sdf) }) +#' toJSON +#' +#' Convert the rows of a DataFrame into JSON objects and return a StringRRDD +#' +#' @param x A SparkSQL DataFrame +#' @return A StringRRDD of JSON objects +#' @rdname toJSON +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' newRDD <- toJSON(df) +#'} +setGeneric("toJSON", function(x) { standardGeneric("toJSON") }) + +#' @rdname toJSON +#' @export +setMethod("toJSON", + signature(x = "DataFrame"), + function(x) { + rdd <- callJMethod(x@sdf, "toJSON") + jrdd <- callJMethod(rdd, "toJavaRDD") + RDD(jrdd, serializedMode = "string") + }) + #' Distinct #' #' Return a new DataFrame containing the distinct rows in this DataFrame. diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 35dc94509d7f7..0cf3a005d021a 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -2,7 +2,7 @@ library(testthat) context("SparkSQL functions") -# Tests for jsonFile, registerTempTable, sql, count, table +# Tests for SparkSQL functions in SparkR sc <- sparkR.init() @@ -352,4 +352,12 @@ test_that("join() on a DataFrame", { expect_true(first(joined4)$newAge == 24) }) +test_that("toJSON() returns an RDD of the correct values", { + df <- jsonFile(sqlCtx, jsonPath) + testRDD <- toJSON(df) + expect_true(inherits(testRDD, "RDD")) + expect_true(SparkR:::getSerializedMode(testRDD) == "string") + expect_equal(collect(testRDD)[[1]], mockLines[1]) +}) + unlink(jsonPath) From 779c1020b2a35d123212808d156381751a857be7 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 13:38:43 -0600 Subject: [PATCH 564/687] `isLocal` --- pkg/NAMESPACE | 1 + pkg/R/DataFrame.R | 27 +++++++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 4 ++++ 3 files changed, 32 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index edf18113bcf1d..e51dced18a9db 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -91,6 +91,7 @@ exportMethods("columns", "explain", "filter", "head", + "isLocal", "limit", "orderBy", "names", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index f85305b49b4d8..07350f75383ab 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -111,6 +111,33 @@ setMethod("explain", callJMethod(x@sdf, "explain", extended) }) +#' isLocal +#' +#' Returns True if the `collect` and `take` methods can be run locally +#' (without any Spark executors). +#' +#' @param x A SparkSQL DataFrame +#' +#' @rdname isLocal +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' isLocal(df) +#'} +setGeneric("isLocal", function(x) { standardGeneric("isLocal") }) + +#' @rdname isLocal +#' @export +setMethod("isLocal", + signature(x = "DataFrame"), + function(x) { + callJMethod(x@sdf, "isLocal") + }) + #' DataTypes #' #' Return all column names and their data types as a list diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 0cf3a005d021a..6dba6ed175f7a 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -360,4 +360,8 @@ test_that("toJSON() returns an RDD of the correct values", { expect_equal(collect(testRDD)[[1]], mockLines[1]) }) +test_that("isLocal()", { + expect_false(isLocal(df)) +} + unlink(jsonPath) From 3fab0f8279ccd98acaa0cd23fb25344b2fe03a8e Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 14:49:27 -0600 Subject: [PATCH 565/687] `showDF` --- pkg/NAMESPACE | 1 + pkg/R/DataFrame.R | 27 +++++++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 11 ++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index e51dced18a9db..5122ce5bd8c8c 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -99,6 +99,7 @@ exportMethods("columns", "registerTempTable", "repartition", "sampleDF", + "showDF", "schema", "sortDF", "select", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 07350f75383ab..515a4351ff766 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -138,6 +138,33 @@ setMethod("isLocal", callJMethod(x@sdf, "isLocal") }) +#' ShowDF +#' +#' Print the first numRows rows of a DataFrame +#' +#' @param x A SparkSQL DataFrame +#' @param numRows The number of rows to print. Defaults to 20. +#' +#' @rdname showDF +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' showDF(df) +#'} +setGeneric("showDF", function(x,...) { standardGeneric("showDF") }) + +#' @rdname showDF +#' @export +setMethod("showDF", + signature(x = "DataFrame"), + function(x, numRows = 20) { + cat(callJMethod(x@sdf, "showString", numToInt(numRows))) + }) + #' DataTypes #' #' Return all column names and their data types as a list diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 6dba6ed175f7a..cb537b23b3d42 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -360,8 +360,17 @@ test_that("toJSON() returns an RDD of the correct values", { expect_equal(collect(testRDD)[[1]], mockLines[1]) }) +test_that("showDF()", { + df <- jsonFile(sqlCtx, jsonPath) + expect_output(showDF(df), "age name +null Michael +30 Andy +19 Justin ") +}) + test_that("isLocal()", { + df <- jsonFile(sqlCtx, jsonPath) expect_false(isLocal(df)) -} +}) unlink(jsonPath) From a5c28872b4582935a1e6663fa6d5636c0fa6aa12 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 15:06:04 -0600 Subject: [PATCH 566/687] fix test --- pkg/inst/tests/test_sparkSQL.R | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index cb537b23b3d42..21a13ad534413 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -362,10 +362,7 @@ test_that("toJSON() returns an RDD of the correct values", { test_that("showDF()", { df <- jsonFile(sqlCtx, jsonPath) - expect_output(showDF(df), "age name -null Michael -30 Andy -19 Justin ") + expect_output(showDF(df), "age name \nnull Michael\n30 Andy \n19 Justin ") }) test_that("isLocal()", { From ff8b005701cb44946947be310cfd01c71bbc5cd2 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 15:22:36 -0600 Subject: [PATCH 567/687] 'saveAsParquetFile` --- pkg/NAMESPACE | 1 + pkg/R/DataFrame.R | 27 +++++++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 11 +++++++++++ 3 files changed, 39 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 5122ce5bd8c8c..f105819719b72 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -99,6 +99,7 @@ exportMethods("columns", "registerTempTable", "repartition", "sampleDF", + "saveAsParquetFile", "showDF", "schema", "sortDF", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 515a4351ff766..5ebab6bdac8a5 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -387,6 +387,33 @@ setMethod("toJSON", RDD(jrdd, serializedMode = "string") }) +#' saveAsParquetFile +#' +#' Save the contents of a DataFrame as a Parquet file, preserving the schema. Files written out +#' with this method can be read back in as a DataFrame using parquetFile(). +#' +#' @param x A SparkSQL DataFrame +#' @param path The directory where the file is saved +#' @rdname saveAsParquetFile +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' saveAsParquetFile(df, "/tmp/sparkr-tmp/") +#'} +setGeneric("saveAsParquetFile", function(x, path) { standardGeneric("saveAsParquetFile") }) + +#' @rdname saveAsParquetFile +#' @export +setMethod("saveAsParquetFile", + signature(x = "DataFrame", path = "character"), + function(x, path) { + invisible(callJMethod(x@sdf, "saveAsParquetFile", path)) + }) + #' Distinct #' #' Return a new DataFrame containing the distinct rows in this DataFrame. diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 21a13ad534413..d7878cd11b9ca 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -370,4 +370,15 @@ test_that("isLocal()", { expect_false(isLocal(df)) }) +# TODO: Enable and test once the parquetFile PR has been merged +# test_that("saveAsParquetFile() on DataFrame and works with parquetFile", { +# df <- jsonFile(sqlCtx, jsonPath) +# parquetPath <- tempfile(pattern="spark-test", fileext=".tmp") +# saveAsParquetFile(df, parquetPath) +# parquetDF <- parquetFile(sqlCtx, parquetPath) +# expect_true(inherits(parquetDF, "DataFrame")) +# expect_equal(collect(df), collect(parquetDF)) +# unlink(parquetPath) +# }) + unlink(jsonPath) From f10a24e7b2da0a400e8cc718a056e0e63a24cb80 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 4 Mar 2015 14:09:31 -0800 Subject: [PATCH 568/687] address comments --- pkg/R/DataFrame.R | 4 ++-- pkg/inst/tests/test_sparkSQL.R | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 07afa5d171de3..036126ca993a0 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -787,7 +787,7 @@ setGeneric("saveDF", function(df, path, source, mode, ...) { standardGeneric("sa setMethod("saveDF", signature(df = "DataFrame", path = 'character', source = 'character', mode = 'character'), - function(df, path=NULL, source=NULL, mode="append", ...){ + function(df, path = NULL, source = NULL, mode = "append", ...){ if (is.null(source)) { sqlCtx <- get(".sparkRSQLsc", envir = .sparkREnv) source <- callJMethod(sqlCtx, "getConf", "spark.sql.sources.default", @@ -845,7 +845,7 @@ setGeneric("saveAsTable", function(df, tableName, source, mode, ...) { setMethod("saveAsTable", signature(df = "DataFrame", tableName = 'character', source = 'character', mode = 'character'), - function(df, tableName, source=NULL, mode="append", ...){ + function(df, tableName, source = NULL, mode="append", ...){ if (is.null(source)) { sqlCtx <- get(".sparkRSQLsc", envir = .sparkREnv) source <- callJMethod(sqlCtx, "getConf", "spark.sql.sources.default", diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 0739c8e8a7604..a86a1f8f0906f 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -1,6 +1,4 @@ library(testthat) -library(devtools) -library(SparkR) context("SparkSQL functions") From 6fac5962d9677d4140529d8761962ef5aced061d Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 4 Mar 2015 14:49:57 -0800 Subject: [PATCH 569/687] support Column expression in agg() --- pkg/DESCRIPTION | 1 + pkg/R/DataFrame.R | 72 ++++-------------- pkg/R/column.R | 2 +- pkg/R/group.R | 75 +++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 5 +- .../amplab/sparkr/SparkRBackendHandler.scala | 2 +- 6 files changed, 96 insertions(+), 61 deletions(-) create mode 100644 pkg/R/group.R diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index b553fdec3014c..786f8245b42dc 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -20,6 +20,7 @@ Collate: 'RDD.R' 'pairRDD.R' 'column.R' + 'group.R' 'DataFrame.R' 'SQLContext.R' 'broadcast.R' diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 61f63c2cbe28e..a6eee59b04cd7 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -1,6 +1,6 @@ # DataFrame.R - DataFrame class and methods implemented in S4 OO classes -#' @include jobj.R SQLTypes.R RDD.R pairRDD.R column.R +#' @include jobj.R SQLTypes.R RDD.R pairRDD.R column.R group.R NULL setOldClass("jobj") @@ -529,26 +529,30 @@ setMethod("toRDD", }) }) - +#' GroupBy +#' +#' Groups the DataFrame using the specified columns, so we can run aggregation on them. +#' setGeneric("groupBy", function(x, ...) { standardGeneric("groupBy") }) setMethod("groupBy", signature(x = "DataFrame"), - function(x, col, ...) { - jseq <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", list(...)) - sgd <- callJMethod(x@sdf, "groupBy", col, jseq) + function(x, ...) { + cols <- list(...) + if (length(cols) >= 1 && class(cols[[1]]) == "character") { + sgd <- callJMethod(x@sdf, "groupBy", cols[[1]], listToSeq(cols[-1])) + } else { + jcol <- lapply(cols, function(c) { c@jc }) + sgd <- callJMethod(x@sdf, "groupBy", listToSeq(jcol)) + } groupedData(sgd) }) -setGeneric("agg", function (x, ...) { standardGeneric("agg") }) - setMethod("agg", signature(x = "DataFrame"), function(x, ...) { - cols <- varargsToEnv(...) - sdf <- callJMethod(x@sdf, "agg", cols) - dataFrame(sdf) + agg(groupBy(x), ...) }) @@ -631,53 +635,5 @@ setMethod("select", signature(x = "DataFrame", col = "Column"), }) -############################## GroupedData ######################################## - -setClass("GroupedData", - slots = list(env = "environment", - sgd = "jobj")) -setMethod("initialize", "GroupedData", function(.Object, sgd) { - .Object@env <- new.env() - .Object@sgd <- sgd - .Object -}) - -groupedData <- function(sgd) { - new("GroupedData", sgd) -} - -setMethod("count", - signature(x = "GroupedData"), - function(x) { - dataFrame(callJMethod(x@sgd, "count")) - }) - -setMethod("agg", - signature(x = "GroupedData"), - function(x, ...) { - cols <- varargsToEnv(...) - sdf <- callJMethod(x@sgd, "agg", cols) - dataFrame(sdf) - }) - -#' sum/mean/avg/min/max - -metheds <- c("sum", "mean", "avg", "min", "max") - -setGeneric("avg", function(x, ...) { standardGeneric("avg") }) - -createMethod <- function(name) { - setMethod(name, - signature(x = "GroupedData"), - function(x, ...) { - jseq <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", list(...)) - sdf <- callJMethod(x@sgd, name, jseq) - dataFrame(sdf) - }) -} - -for (name in metheds) { - createMethod(name) -} diff --git a/pkg/R/column.R b/pkg/R/column.R index 1b1132cca352a..5fdc06e38ad5f 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -75,7 +75,7 @@ createMethods <- function() { createOperator(op) } - setGeneric("avg", function(x) { standardGeneric("avg") }) + setGeneric("avg", function(x, ...) { standardGeneric("avg") }) setGeneric("last", function(x) { standardGeneric("last") }) setGeneric("asc", function(x) { standardGeneric("asc") }) setGeneric("desc", function(x) { standardGeneric("desc") }) diff --git a/pkg/R/group.R b/pkg/R/group.R new file mode 100644 index 0000000000000..d54d8e09e5bf5 --- /dev/null +++ b/pkg/R/group.R @@ -0,0 +1,75 @@ +############################## GroupedData ######################################## + +setClass("GroupedData", + slots = list(env = "environment", + sgd = "jobj")) + +setMethod("initialize", "GroupedData", function(.Object, sgd) { + .Object@env <- new.env() + .Object@sgd <- sgd + .Object +}) + +groupedData <- function(sgd) { + new("GroupedData", sgd) +} + +setMethod("count", + signature(x = "GroupedData"), + function(x) { + dataFrame(callJMethod(x@sgd, "count")) + }) + +#' Agg +#' +#' Aggregates on the entire [[DataFrame]] without groups. + +setGeneric("agg", function (x, ...) { standardGeneric("agg") }) + +setMethod("agg", + signature(x = "GroupedData"), + function(x, ...) { + cols = list(...) + stopifnot(length(cols) > 0) + if (is.character(cols[[1]])) { + cols <- varargsToEnv(...) + sdf <- callJMethod(x@sgd, "agg", cols) + } else if (class(cols[[1]]) == "Column") { + ns <- names(cols) + if (!is.null(ns)) { + for (n in ns) { + if (n != "") { + cols[[n]] = alias(cols[[n]], n) + } + } + } + jcols <- lapply(cols, function(c) { c@jc }) + sdf <- callJMethod(x@sgd, "agg", jcols[[1]], listToSeq(jcols[-1])) + } else { + stop("agg can only support Column or character") + } + dataFrame(sdf) + }) + +#' sum/mean/avg/min/max + +methods <- c("sum", "mean", "avg", "min", "max") + +createMethod <- function(name) { + setMethod(name, + signature(x = "GroupedData"), + function(x, ...) { + # TODO(davies): pass cols into JVM once we upgrade the spark-sql 1.3 + sdf <- callJMethod(x@sgd, name) + dataFrame(sdf) + }) +} + +createMethods <- function() { + for (name in methods) { + createMethod(name) + } +} + +createMethods() + diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 313044f902221..632a05659f719 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -256,8 +256,11 @@ test_that("column functions", { test_that("group by", { df <- jsonFile(sqlCtx, jsonPath) - df1 <- agg(df, name="max", age="sum") + df1 <- agg(df, name = "max", age = "sum") expect_true(1 == count(df1)) + df1 <- agg(df, age2 = max(df$age)) + expect_true(1 == count(df1)) + expect_true(columns(df1) == c("age2")) gd <- groupBy(df, "name") expect_true(inherits(gd, "GroupedData")) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 9050b2a430d8b..eaff01ec54b7f 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -166,7 +166,7 @@ class SparkRBackendHandler(server: SparkRBackend) } } if (!parameterWrapperType.isInstance(args(i))) { - logInfo(s"arg $i not match: type $parameterWrapperType != ${args(i)}") + logInfo(s"arg $i not match: type $parameterWrapperType != ${args(i).getClass()}") return false } } From 3675fcf2c79305241fef7d266710d8e02e110fb0 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Wed, 4 Mar 2015 17:19:02 -0600 Subject: [PATCH 570/687] Update `explain` and fixed doc for `toJSON` --- pkg/R/DataFrame.R | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 5ebab6bdac8a5..5ab985f83c64a 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -108,7 +108,13 @@ setGeneric("explain", function(x, ...) { standardGeneric("explain") }) setMethod("explain", signature(x = "DataFrame"), function(x, extended = FALSE) { - callJMethod(x@sdf, "explain", extended) + queryExec <- callJMethod(x@sdf, "queryExecution") + if (extended) { + cat(callJMethod(queryExec, "toString")) + } else { + execPlan <- callJMethod(queryExec, "executedPlan") + cat(callJMethod(execPlan, "toString")) + } }) #' isLocal @@ -361,7 +367,8 @@ setMethod("repartition", #' toJSON #' -#' Convert the rows of a DataFrame into JSON objects and return a StringRRDD +#' Convert the rows of a DataFrame into JSON objects and return an RDD where +#' each element contains a JSON string. #' #' @param x A SparkSQL DataFrame #' @return A StringRRDD of JSON objects From b875b4f1dde465c80a9b6c4267ac00acf20408e8 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 4 Mar 2015 16:05:28 -0800 Subject: [PATCH 571/687] fix style --- pkg/R/SQLContext.R | 18 +++++++++--------- pkg/R/utils.R | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 0fd07502f21f6..c9e811750b494 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -21,7 +21,7 @@ jsonFile <- function(sqlCtx, path) { # Allow the user to have a more flexible definiton of the text file path path <- normalizePath(path) # Convert a string vector of paths to a string containing comma separated paths - path <- paste(path, collapse=",") + path <- paste(path, collapse = ",") sdf <- callJMethod(sqlCtx, "jsonFile", path) dataFrame(sdf) } @@ -71,7 +71,7 @@ parquetFile <- function(sqlCtx, path) { # Allow the user to have a more flexible definiton of the text file path path <- normalizePath(path) # Convert a string vector of paths to a string containing comma separated paths - path <- paste(path, collapse=",") + path <- paste(path, collapse = ",") sdf <- callJMethod(sqlCtx, "parquetFile", path) dataFrame(sdf) } @@ -140,7 +140,7 @@ table <- function(sqlCtx, tableName) { #' tables(sqlCtx, "hive") #' } -tables <- function(sqlCtx, databaseName=NULL) { +tables <- function(sqlCtx, databaseName = NULL) { jdf <- if (is.null(databaseName)) { callJMethod(sqlCtx, "tables") } else { @@ -165,7 +165,7 @@ tables <- function(sqlCtx, databaseName=NULL) { #' tableNames(sqlCtx, "hive") #' } -tableNames <- function(sqlCtx, databaseName=NULL) { +tableNames <- function(sqlCtx, databaseName = NULL) { if (is.null(databaseName)) { callJMethod(sqlCtx, "tableNames") } else { @@ -247,13 +247,13 @@ clearCache <- function(sqlCtx) { #'\dontrun{ #' sc <- sparkR.init() #' sqlCtx <- sparkRSQL.init(sc) -#' df <- load(sqlCtx, "path/to/file.json", source="json") +#' df <- load(sqlCtx, "path/to/file.json", source = "json") #' } -loadDF <- function(sqlCtx, path=NULL, source=NULL, ...) { +loadDF <- function(sqlCtx, path = NULL, source = NULL, ...) { options <- varargsToEnv(...) if (!is.null(path)) { - options[['path']] = path + options[['path']] <- path } sdf <- callJMethod(sqlCtx, "load", source, options) dataFrame(sdf) @@ -281,10 +281,10 @@ loadDF <- function(sqlCtx, path=NULL, source=NULL, ...) { #' df <- sparkRSQL.createExternalTable(sqlCtx, "myjson", path="path/to/json", source="json") #' } -createExternalTable <- function(sqlCtx, tableName, path=NULL, source=NULL, ...) { +createExternalTable <- function(sqlCtx, tableName, path = NULL, source = NULL, ...) { options <- varargsToEnv(...) if (!is.null(path)) { - options[['path']] = path + options[['path']] <- path } sdf <- callJMethod(sqlCtx, "createExternalTable", tableName, source, options) dataFrame(sdf) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 7cb7e54301252..eadb8f3fe278f 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -304,7 +304,7 @@ updateOrCreatePair <- function(pair, keys, vals, updateOrCreatePred, updateFn, c assign(hashVal, do.call(updateFn, list(get(hashVal, envir = vals), val)), envir = vals) } else { assign(hashVal, do.call(createFn, list(val)), envir = vals) - assign(hashVal, key, envir=keys) + assign(hashVal, key, envir = keys) } } From 8b7fb673f8bdeb3ccbc23bed718918e01e65409f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 4 Mar 2015 16:38:50 -0800 Subject: [PATCH 572/687] fix HiveContext --- pkg/NAMESPACE | 3 +- pkg/R/sparkR.R | 10 +++-- pkg/inst/tests/test_sparkSQL.R | 38 ++++++++++--------- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 15 ++------ 4 files changed, 32 insertions(+), 34 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 2cd09339810e9..2471c6a526a16 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -147,6 +147,7 @@ export("cacheTable", "tables", "uncacheTable") -export("sparkRSQL.init") +export("sparkRSQL.init", + "sparkRHive.init") export("print.structType", "print.structField") diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 73300b68a5939..0aa0bc9d67093 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -251,9 +251,13 @@ sparkRHive.init <- function(jsc) { return(get(".sparkRHivesc", envir = .sparkREnv)) } - hiveCtx <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", - "createHiveContext", - jsc) + ssc <- callJMethod(jsc, "sc") + hiveCtx <- tryCatch({ + newJObject("org.apache.spark.sql.HiveContext", ssc) + }, error = function(err) { + stop("Hive is not build with SparkSQL") + }) + assign(".sparkRHivesc", hiveCtx, envir = .sparkREnv) hiveCtx } diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 2b812288aae12..62c8af47d9f64 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -266,7 +266,7 @@ test_that("selectExpr() on a DataFrame", { selected <- selectExpr(df, "age * 2") expect_true(names(selected) == "(age * 2)") expect_equal(collect(selected), collect(select(df, df$age * 2L))) - + selected2 <- selectExpr(df, "name as newName", "abs(age) as age") expect_equal(names(selected2), c("newName", "age")) expect_true(count(selected2) == 3) @@ -295,23 +295,25 @@ test_that("save() as parquet file", { expect_true(count(df2) == 3) }) -#test_that("test HiveContext", { -# hiveCtx <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", -# "createTestHiveContext", -# sc) -# df <- createExternalTable(hiveCtx, "json", jsonPath, "json") -# expect_true(inherits(df, "DataFrame")) -# expect_true(count(df) == 3) -# df2 <- sql(hiveCtx, "select * from json") -# expect_true(inherits(df2, "DataFrame")) -# expect_true(count(df2) == 3) -# -# jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") -# saveAsTable(df, "json", "json", "append", path = jsonPath2) -# df3 <- sql(hiveCtx, "select * from json") -# expect_true(inherits(df3, "DataFrame")) -# expect_true(count(df3) == 6) -#}) +test_that("test HiveContext", { + hiveCtx <- tryCatch({ + newJObject("org.apache.spark.sql.TestHiveContext", ssc) + }, error = function(err) { + skip("Hive is not build with SparkSQL, skipped") + }) + df <- createExternalTable(hiveCtx, "json", jsonPath, "json") + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 3) + df2 <- sql(hiveCtx, "select * from json") + expect_true(inherits(df2, "DataFrame")) + expect_true(count(df2) == 3) + + jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") + saveAsTable(df, "json", "json", "append", path = jsonPath2) + df3 <- sql(hiveCtx, "select * from json") + expect_true(inherits(df3, "DataFrame")) + expect_true(count(df3) == 6) +}) test_that("column operators", { c <- SparkR:::col("a") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 3d7d4d7731d6f..05b63767fafb8 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -1,28 +1,19 @@ package edu.berkeley.cs.amplab.sparkr +import java.io.ByteArrayOutputStream +import java.io.DataOutputStream + import org.apache.spark.rdd.RDD import org.apache.spark.api.java.{JavaRDD, JavaSparkContext} import org.apache.spark.sql.{SQLContext, DataFrame, Row, SaveMode} -//import org.apache.spark.sql.hive.{HiveContext, TestHiveContext} import edu.berkeley.cs.amplab.sparkr.SerDe._ -import java.io.ByteArrayOutputStream -import java.io.DataOutputStream - object SQLUtils { def createSQLContext(jsc: JavaSparkContext): SQLContext = { new SQLContext(jsc.sc) } -// def createHiveContext(jsc: JavaSparkContext): HiveContext = { -// new HiveContext(jsc.sc) -// } -// -// def createTestHiveContext(jsc: JavaSparkContext): TestHiveContext = { -// new TestHiveContext(jsc.sc) -// } - def toSeq[T](arr: Array[T]): Seq[T] = { arr.toSeq } From fb3b139dd8f9ea40b96a75f5f389748c8fc320a6 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 4 Mar 2015 17:35:42 -0800 Subject: [PATCH 573/687] fix tests --- pkg/R/group.R | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/R/group.R b/pkg/R/group.R index d54d8e09e5bf5..c3f90ffc9abb9 100644 --- a/pkg/R/group.R +++ b/pkg/R/group.R @@ -22,7 +22,7 @@ setMethod("count", #' Agg #' -#' Aggregates on the entire [[DataFrame]] without groups. +#' Aggregates on the entire DataFrame without groups. setGeneric("agg", function (x, ...) { standardGeneric("agg") }) @@ -59,8 +59,7 @@ createMethod <- function(name) { setMethod(name, signature(x = "GroupedData"), function(x, ...) { - # TODO(davies): pass cols into JVM once we upgrade the spark-sql 1.3 - sdf <- callJMethod(x@sgd, name) + sdf <- callJMethod(x@sgd, name, toSeq(...)) dataFrame(sdf) }) } From 47a613f01a57af9021e2de43caf76122a6ef30c9 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 4 Mar 2015 18:41:37 -0800 Subject: [PATCH 574/687] Fix HiveContext package name --- pkg/R/sparkR.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 0aa0bc9d67093..6135c4d9c20d2 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -247,15 +247,15 @@ sparkRSQL.init <- function(jsc) { sparkRHive.init <- function(jsc) { if (exists(".sparkRHivesc", envir = .sparkREnv)) { - cat("Re-using existing HiveContext. Please restart R to create a new HiveContext\n") + cat("Re-using existing HiveContext. Please restart R to create a new HiveContext\n") return(get(".sparkRHivesc", envir = .sparkREnv)) } ssc <- callJMethod(jsc, "sc") hiveCtx <- tryCatch({ - newJObject("org.apache.spark.sql.HiveContext", ssc) + newJObject("org.apache.spark.sql.hive.HiveContext", ssc) }, error = function(err) { - stop("Hive is not build with SparkSQL") + stop("Spark SQL is not built with Hive support") }) assign(".sparkRHivesc", hiveCtx, envir = .sparkREnv) From 62b07602604c4125fbe7532719ecd38c04895748 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 4 Mar 2015 18:48:32 -0800 Subject: [PATCH 575/687] Fix test hive context package name --- pkg/inst/tests/test_sparkSQL.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 62c8af47d9f64..4fabec337558e 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -297,7 +297,7 @@ test_that("save() as parquet file", { test_that("test HiveContext", { hiveCtx <- tryCatch({ - newJObject("org.apache.spark.sql.TestHiveContext", ssc) + newJObject("org.apache.spark.sql.hive.test.TestHiveContext", ssc) }, error = function(err) { skip("Hive is not build with SparkSQL, skipped") }) From ac8a85213d9cdc4621c3f521f1d25fbde276ccc8 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 4 Mar 2015 21:32:58 -0800 Subject: [PATCH 576/687] close monitor connection in sparkR.stop() --- pkg/R/sparkR.R | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 2e8797c2d39d1..e34404267ff6e 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -47,14 +47,21 @@ sparkR.stop <- function(env = .sparkREnv) { callJStatic("SparkRHandler", "stopBackend") # Also close the connection and remove it from our env - conn <- get(".sparkRCon", env) + conn <- get(".sparkRCon", envir = env) close(conn) rm(".sparkRCon", envir = env) + + if (exists(".monitorConn", envir = env)) { + conn <- get(".monitorConn", envir = env) + close(conn) + rm(".monitorConn", envir = env) + } + # Finally, sleep for 1 sec to let backend finish exiting. # Without this we get port conflicts in RStudio when we try to 'Restart R'. Sys.sleep(1) } - + } #' Initialize a new Spark Context. @@ -156,8 +163,7 @@ sparkR.init <- function( length(monitorPort) == 0 || monitorPort == 0) { stop("JVM failed to launch") } - # never close this socket, JVM is waiting for it - .sparkREnv$monitorF <- socketConnection(port = monitorPort) + assign(".monitorConn", socketConnection(port = monitorPort), envir = .sparkREnv) } .sparkREnv$sparkRBackendPort <- sparkRBackendPort From f06ccec7c89d981eb8ed02313929ca2e43e25109 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Thu, 5 Mar 2015 14:25:50 +0800 Subject: [PATCH 577/687] Use mapply() instead of for statement. --- pkg/R/RDD.R | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 07a51a28e3d76..1148ef58d720f 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1456,13 +1456,13 @@ setMethod("zipWithUniqueId", n <- numPartitions(x) partitionFunc <- function(split, part) { - index <- 0 - result <- vector("list", length(part)) - for (item in part) { - result[[index + 1]] <- list(item, index * n + split) - index <- index + 1 - } - result + mapply( + function(item, index) { + list(item, (index - 1) * n + split) + }, + part, + seq_along(part), + SIMPLIFY = FALSE) } lapplyPartitionsWithIndex(x, partitionFunc) From dfb399aa848ec0c79caaaca71641c79e748d1b01 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 5 Mar 2015 10:00:01 -0800 Subject: [PATCH 578/687] address comments --- pkg/NAMESPACE | 5 ++--- pkg/R/group.R | 9 ++++++++- .../cs/amplab/sparkr/SparkRBackendHandler.scala | 13 ++++--------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index eef960f8a5e0d..cc6fa6ad11e3e 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -85,8 +85,7 @@ importFrom(methods, setGeneric, setMethod, setOldClass) exportClasses("DataFrame") -exportMethods("agg", - "columns", +exportMethods("columns", "distinct", "dtypes", "explain", @@ -135,7 +134,7 @@ exportMethods("asc", "sumDistinct") exportClasses("GroupedData") -exportMethods("count", "agg", "avg") +exportMethods("agg") export("cacheTable", "clearCache", diff --git a/pkg/R/group.R b/pkg/R/group.R index c3f90ffc9abb9..bf17efffc4b20 100644 --- a/pkg/R/group.R +++ b/pkg/R/group.R @@ -23,7 +23,14 @@ setMethod("count", #' Agg #' #' Aggregates on the entire DataFrame without groups. - +#' +#' df2 <- agg(df, = ) +#' df2 <- agg(df, newColName = aggFunction(column)) +#' @examples +#' \dontrun{ +#' df2 <- agg(df, age = "sum") # new column name will be created as 'SUM(age#0)' +#' df2 <- agg(df, ageSum = sum(df$age)) # Creates a new column named ageSum +#' } setGeneric("agg", function (x, ...) { standardGeneric("agg") }) setMethod("agg", diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index eaff01ec54b7f..1dc84295ac4d1 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -1,14 +1,9 @@ package edu.berkeley.cs.amplab.sparkr -import org.apache.spark.Logging +import java.io.{ByteArrayInputStream, ByteArrayOutputStream, DataInputStream, DataOutputStream} import scala.collection.mutable.HashMap -import java.io.ByteArrayInputStream -import java.io.ByteArrayOutputStream -import java.io.DataInputStream -import java.io.DataOutputStream - import io.netty.channel.ChannelHandler.Sharable import io.netty.channel.ChannelHandlerContext import io.netty.channel.SimpleChannelInboundHandler @@ -22,7 +17,7 @@ import edu.berkeley.cs.amplab.sparkr.SerDe._ */ @Sharable class SparkRBackendHandler(server: SparkRBackend) - extends SimpleChannelInboundHandler[Array[Byte]] with Logging { + extends SimpleChannelInboundHandler[Array[Byte]] { override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { val bis = new ByteArrayInputStream(msg) @@ -149,7 +144,7 @@ class SparkRBackendHandler(server: SparkRBackend) args: Array[java.lang.Object], parameterTypes: Array[Class[_]]): Boolean = { if (parameterTypes.length != numArgs) { - logInfo(s"num of arguments numArgs not match with ${parameterTypes.length}") + // println(s"num of arguments numArgs not match with ${parameterTypes.length}") return false } @@ -166,7 +161,7 @@ class SparkRBackendHandler(server: SparkRBackend) } } if (!parameterWrapperType.isInstance(args(i))) { - logInfo(s"arg $i not match: type $parameterWrapperType != ${args(i).getClass()}") + println(s"arg $i not match: expected type $parameterWrapperType, but got ${args(i).getClass()}") return false } } From d8c1c09fa55985d563514839ca01c1a9955163aa Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 5 Mar 2015 11:18:28 -0800 Subject: [PATCH 579/687] add test to start and stop context multiple times --- pkg/R/jobj.R | 16 +++++++++------- pkg/R/sparkR.R | 30 ++++++++---------------------- pkg/inst/tests/test_context.R | 10 ++++++++++ 3 files changed, 27 insertions(+), 29 deletions(-) create mode 100644 pkg/inst/tests/test_context.R diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R index de459110c426c..09cb7c472b95d 100644 --- a/pkg/R/jobj.R +++ b/pkg/R/jobj.R @@ -48,13 +48,15 @@ print.jobj <- function(x, ...) { cleanup.jobj <- function(jobj) { objId <- jobj$id - .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 + if (exists(objId, envir = .validJobjs)) { + .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 - if (.validJobjs[[objId]] == 0) { - rm(list = objId, envir = .validJobjs) - # NOTE: We cannot call removeJObject here as the finalizer may be run - # in the middle of another RPC. Thus we queue up this object Id to be removed - # and then run all the removeJObject when the next RPC is called. - .toRemoveJobjs[[objId]] <- 1 + if (.validJobjs[[objId]] == 0) { + rm(list = objId, envir = .validJobjs) + # NOTE: We cannot call removeJObject here as the finalizer may be run + # in the middle of another RPC. Thus we queue up this object Id to be removed + # and then run all the removeJObject when the next RPC is called. + .toRemoveJobjs[[objId]] <- 1 + } } } diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 5407d04c6af41..7938f459f5837 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -24,19 +24,6 @@ connExists <- function(env) { # Also terminates the backend this R session is connected to sparkR.stop <- function(env = .sparkREnv) { - if (!connExists(env)) { - # When the workspace is saved in R, the connections are closed - # *before* the finalizer is run. In these cases, we reconnect - # to the backend, so we can shut it down. - tryCatch({ - connectBackend("localhost", .sparkREnv$sparkRBackendPort) - }, error = function(err) { - cat("Error in Connection: Use sparkR.init() to restart SparkR\n") - }, warning = function(war) { - cat("No Connection Found: Use sparkR.init() to restart SparkR\n") - }) - } - if (exists(".sparkRCon", envir = env)) { cat("Stopping SparkR\n") if (exists(".sparkRjsc", envir = env)) { @@ -50,18 +37,17 @@ sparkR.stop <- function(env = .sparkREnv) { conn <- get(".sparkRCon", envir = env) close(conn) rm(".sparkRCon", envir = env) + } - if (exists(".monitorConn", envir = env)) { - conn <- get(".monitorConn", envir = env) - close(conn) - rm(".monitorConn", envir = env) - } - - # Finally, sleep for 1 sec to let backend finish exiting. - # Without this we get port conflicts in RStudio when we try to 'Restart R'. - Sys.sleep(1) + if (exists(".monitorConn", envir = env)) { + conn <- get(".monitorConn", envir = env) + close(conn) + rm(".monitorConn", envir = env) } + # clear all the reference of Java object + rm(list = ls(.validJobjs, all = TRUE), envir = .validJobjs) + rm(list = ls(.toRemoveJobjs, all = TRUE), envir = .toRemoveJobjs) } #' Initialize a new Spark Context. diff --git a/pkg/inst/tests/test_context.R b/pkg/inst/tests/test_context.R new file mode 100644 index 0000000000000..7e1671c0ead8d --- /dev/null +++ b/pkg/inst/tests/test_context.R @@ -0,0 +1,10 @@ +context("functions in sparkR.R") + +test_that("start and stop SparkContext multiple times", { + for (i in 1:3) { + sc <- sparkR.init() + rdd <- parallelize(sc, 1:10) + expect_equal(count(rdd), 10) + sparkR.stop() + } +}) From 9d01bcdf9a3e9ce0e2dd27493184eb15b7e0f21e Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 5 Mar 2015 14:26:58 -0600 Subject: [PATCH 580/687] `dropTempTable` Add `dropTempTable` function and update tests to drop the test table at the end of every test. --- pkg/NAMESPACE | 1 + pkg/R/SQLContext.R | 17 +++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 7 +++++++ 3 files changed, 25 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 2471c6a526a16..4c58de97ee4c3 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -137,6 +137,7 @@ exportMethods("asc", export("cacheTable", "clearCache", "createExternalTable", + "dropTempTable", "jsonFile", "jsonRDD", "loadDF", diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index c9e811750b494..2ea9b0b158b39 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -230,6 +230,23 @@ clearCache <- function(sqlCtx) { callJMethod(sqlCtx, "clearCache") } +#' Drop Temporary Table +#' +#' Drops the temporary table with the given table name in the catalog. +#' If the table has been cached/persisted before, it's also unpersisted. +#' +#' @param sqlCtx SQLContext to use +#' @param tableName The name of the SparkSQL table to be dropped. +#' clearCache(sqlCtx) +#' } + +dropTempTable <- function(sqlCtx, tableName) { + if (class(tableName) != "character") { + stop("tableName must be a string.") + } + callJMethod(sqlCtx, "dropTempTable", tableName) +} + #' Load an DataFrame #' #' Returns the dataset in a data source as a DataFrame diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 4fabec337558e..aa6e2b7f9ee9e 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -40,6 +40,7 @@ test_that("test cache, uncache and clearCache", { cacheTable(sqlCtx, "table1") uncacheTable(sqlCtx, "table1") clearCache(sqlCtx) + dropTempTable(sqlCtx, "table1") }) test_that("test tableNames and tables", { @@ -48,6 +49,7 @@ test_that("test tableNames and tables", { expect_true(length(tableNames(sqlCtx)) == 1) df <- tables(sqlCtx) expect_true(count(df) == 1) + dropTempTable(sqlCtx, "table1") }) test_that("registerTempTable() results in a queryable table and sql() results in a new DataFrame", { @@ -56,12 +58,17 @@ test_that("registerTempTable() results in a queryable table and sql() results in newdf <- sql(sqlCtx, "SELECT * FROM table1 where name = 'Michael'") expect_true(inherits(newdf, "DataFrame")) expect_true(count(newdf) == 1) + dropTempTable(sqlCtx, "table1") +}) }) test_that("table() returns a new DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) + registerTempTable(df, "table1") tabledf <- table(sqlCtx, "table1") expect_true(inherits(tabledf, "DataFrame")) expect_true(count(tabledf) == 3) + dropTempTable(sqlCtx, "table1") }) test_that("toRDD() returns an RRDD", { From befbd3249d06b3a1f4e48e3b8e43107261ba8a0f Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 5 Mar 2015 14:28:40 -0600 Subject: [PATCH 581/687] `insertInto` --- pkg/NAMESPACE | 1 + pkg/R/DataFrame.R | 30 ++++++++++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 26 ++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 4c58de97ee4c3..2d5a5531e0d57 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -91,6 +91,7 @@ exportMethods("columns", "explain", "filter", "head", + "insertInto", "isLocal", "limit", "orderBy", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index b729d734cb2fd..1a84efdaf5f5e 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -263,6 +263,36 @@ setMethod("registerTempTable", callJMethod(x@sdf, "registerTempTable", tableName) }) +#' insertInto +#' +#' Insert the contents of a DataFrame into a table registered in the current SQL Context. +#' +#' @param x A SparkSQL DataFrame +#' @param tableName A character vector containing the name of the table +#' @param overwrite A logical argument indicating whether or not to overwrite +#' the existing rows in the table. +#' +#' @rdname insertInto +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df <- loadDF(sqlCtx, path, "parquet") +#' df2 <- loadDF(sqlCtx, path2, "parquet") +#' registerTempTable(df, "table1") +#' insertInto(df2, "table1", overwrite = TRUE) +#'} +setGeneric("insertInto", function(x, tableName, ...) { standardGeneric("insertInto") }) + +#' @rdname insertInto +#' @export +setMethod("insertInto", + signature(x = "DataFrame", tableName = "character"), + function(x, tableName, overwrite = FALSE) { + callJMethod(x@sdf, "insertInto", tableName, overwrite) + }) + #' Cache #' #' Persist with the default storage level (MEMORY_ONLY). diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index aa6e2b7f9ee9e..51463db412347 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -60,6 +60,32 @@ test_that("registerTempTable() results in a queryable table and sql() results in expect_true(count(newdf) == 1) dropTempTable(sqlCtx, "table1") }) + +test_that("insertInto() on a registered table", { + df <- loadDF(sqlCtx, jsonPath, "json") + saveDF(df, parquetPath, "parquet", "overwrite") + dfParquet <- loadDF(sqlCtx, parquetPath, "parquet") + + lines <- c("{\"name\":\"Bob\", \"age\":24}", + "{\"name\":\"James\", \"age\":35}") + jsonPath2 <- tempfile(pattern="jsonPath2", fileext=".tmp") + parquetPath2 <- tempfile(pattern = "parquetPath2", fileext = ".parquet") + writeLines(lines, jsonPath2) + df2 <- loadDF(sqlCtx, jsonPath2, "json") + saveDF(df2, parquetPath2, "parquet", "overwrite") + dfParquet2 <- loadDF(sqlCtx, parquetPath2, "parquet") + + registerTempTable(dfParquet, "table1") + insertInto(dfParquet2, "table1") + expect_true(count(sql(sqlCtx, "select * from table1")) == 5) + expect_true(first(sql(sqlCtx, "select * from table1"))$name == "Michael") + dropTempTable(sqlCtx, "table1") + + registerTempTable(dfParquet, "table1") + insertInto(dfParquet2, "table1", overwrite = TRUE) + expect_true(count(sql(sqlCtx, "select * from table1")) == 2) + expect_true(first(sql(sqlCtx, "select * from table1"))$name == "Bob") + dropTempTable(sqlCtx, "table1") }) test_that("table() returns a new DataFrame", { From fef99de5d2f5db4310fe019873ae32e21ef90f8f Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 5 Mar 2015 15:14:30 -0600 Subject: [PATCH 582/687] `intersect`, `subtract`, `unionAll` --- pkg/NAMESPACE | 3 ++ pkg/R/DataFrame.R | 86 ++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 26 ++++++++++ 3 files changed, 115 insertions(+) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 2d5a5531e0d57..f964d6d1c0505 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -92,6 +92,7 @@ exportMethods("columns", "filter", "head", "insertInto", + "intersect", "isLocal", "limit", "orderBy", @@ -108,8 +109,10 @@ exportMethods("columns", "selectExpr", "showDF", "sortDF", + "subtract", "toJSON", "toRDD", + "unionAll", "where") exportClasses("Column") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 1a84efdaf5f5e..810ce81a6c54f 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -942,6 +942,92 @@ setMethod("join", dataFrame(sdf) }) +#' UnionAll +#' +#' Return a new DataFrame containing the union of rows in this DataFrame +#' and another DataFrame. This is equivalent to `UNION ALL` in SQL. +#' +#' @param x A Spark DataFrame +#' @param y A Spark DataFrame +#' @return A DataFrame containing the result of the union. +#' @rdname unionAll +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df1 <- jsonFile(sqlCtx, path) +#' df2 <- jsonFile(sqlCtx, path2) +#' unioned <- unionAll(df, df2) +#' } +setGeneric("unionAll", function(x, y) { standardGeneric("unionAll") }) + +#' @rdname unionAll +#' @export +setMethod("unionAll", + signature(x = "DataFrame", y = "DataFrame"), + function(x, y) { + unioned <- callJMethod(x@sdf, "unionAll", y@sdf) + dataFrame(unioned) + }) + +#' Intersect +#' +#' Return a new DataFrame containing rows only in both this DataFrame +#' and another DataFrame. This is equivalent to `INTERSECT` in SQL. +#' +#' @param x A Spark DataFrame +#' @param y A Spark DataFrame +#' @return A DataFrame containing the result of the intersect. +#' @rdname intersect +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df1 <- jsonFile(sqlCtx, path) +#' df2 <- jsonFile(sqlCtx, path2) +#' intersectDF <- intersect(df, df2) +#' } +setGeneric("intersect", function(x, y) { standardGeneric("intersect") }) + +#' @rdname intersect +#' @export +setMethod("intersect", + signature(x = "DataFrame", y = "DataFrame"), + function(x, y) { + intersected <- callJMethod(x@sdf, "intersect", y@sdf) + dataFrame(intersected) + }) + +#' Subtract +#' +#' Return a new DataFrame containing rows in this DataFrame +#' but not in another DataFrame. This is equivalent to `EXCEPT` in SQL. +#' +#' @param x A Spark DataFrame +#' @param y A Spark DataFrame +#' @return A DataFrame containing the result of the subtract operation. +#' @rdname subtract +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df1 <- jsonFile(sqlCtx, path) +#' df2 <- jsonFile(sqlCtx, path2) +#' subtractDF <- subtract(df, df2) +#' } +setGeneric("subtract", function(x, y) { standardGeneric("subtract") }) + +#' @rdname subtract +#' @export +setMethod("subtract", + signature(x = "DataFrame", y = "DataFrame"), + function(x, y) { + subtracted <- callJMethod(x@sdf, "except", y@sdf) + dataFrame(subtracted) + }) #' Save the contents of the DataFrame to a data source #' diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 51463db412347..eba8c7f86ab95 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -438,6 +438,32 @@ test_that("isLocal()", { expect_false(isLocal(df)) }) +test_that("unionAll(), subtract(), and intersect() on a DataFrame", { + df <- jsonFile(sqlCtx, jsonPath) + + lines <- c("{\"name\":\"Bob\", \"age\":24}", + "{\"name\":\"Andy\", \"age\":30}", + "{\"name\":\"James\", \"age\":35}") + jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") + writeLines(lines, jsonPath2) + df2 <- loadDF(sqlCtx, jsonPath2, "json") + + unioned <- unionAll(df, df2) + expect_true(inherits(unioned, "DataFrame")) + expect_true(count(unioned) == 6) + expect_true(first(unioned)$name == "Michael") + + subtracted <- subtract(df, df2) + expect_true(inherits(unioned, "DataFrame")) + expect_true(count(subtracted) == 2) + expect_true(first(subtracted)$name == "Justin") + + intersected <- intersect(df, df2) + expect_true(inherits(unioned, "DataFrame")) + expect_true(count(intersected) == 1) + expect_true(first(intersected)$name == "Andy") +}) + # TODO: Enable and test once the parquetFile PR has been merged # test_that("saveAsParquetFile() on DataFrame and works with parquetFile", { # df <- jsonFile(sqlCtx, jsonPath) From 428a99a1e11324aa4c9da889ebf9c997d9282b9b Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 5 Mar 2015 13:31:32 -0800 Subject: [PATCH 583/687] remove test, catch exception --- pkg/R/jobj.R | 16 +++++++--------- pkg/R/sparkR.R | 11 +---------- pkg/inst/tests/test_context.R | 10 ---------- .../cs/amplab/sparkr/SparkRBackend.scala | 15 +++++++++------ 4 files changed, 17 insertions(+), 35 deletions(-) delete mode 100644 pkg/inst/tests/test_context.R diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R index 09cb7c472b95d..de459110c426c 100644 --- a/pkg/R/jobj.R +++ b/pkg/R/jobj.R @@ -48,15 +48,13 @@ print.jobj <- function(x, ...) { cleanup.jobj <- function(jobj) { objId <- jobj$id - if (exists(objId, envir = .validJobjs)) { - .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 + .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 - if (.validJobjs[[objId]] == 0) { - rm(list = objId, envir = .validJobjs) - # NOTE: We cannot call removeJObject here as the finalizer may be run - # in the middle of another RPC. Thus we queue up this object Id to be removed - # and then run all the removeJObject when the next RPC is called. - .toRemoveJobjs[[objId]] <- 1 - } + if (.validJobjs[[objId]] == 0) { + rm(list = objId, envir = .validJobjs) + # NOTE: We cannot call removeJObject here as the finalizer may be run + # in the middle of another RPC. Thus we queue up this object Id to be removed + # and then run all the removeJObject when the next RPC is called. + .toRemoveJobjs[[objId]] <- 1 } } diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 7938f459f5837..d92b908ad5502 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -44,10 +44,6 @@ sparkR.stop <- function(env = .sparkREnv) { close(conn) rm(".monitorConn", envir = env) } - - # clear all the reference of Java object - rm(list = ls(.validJobjs, all = TRUE), envir = .validJobjs) - rm(list = ls(.toRemoveJobjs, all = TRUE), envir = .toRemoveJobjs) } #' Initialize a new Spark Context. @@ -197,10 +193,5 @@ sparkR.init <- function( envir = .sparkREnv ) - sc <- get(".sparkRjsc", envir = .sparkREnv) - - # Register a finalizer to stop backend on R exit - reg.finalizer(.sparkREnv, sparkR.stop, onexit = TRUE) - - sc + get(".sparkRjsc", envir = .sparkREnv) } diff --git a/pkg/inst/tests/test_context.R b/pkg/inst/tests/test_context.R deleted file mode 100644 index 7e1671c0ead8d..0000000000000 --- a/pkg/inst/tests/test_context.R +++ /dev/null @@ -1,10 +0,0 @@ -context("functions in sparkR.R") - -test_that("start and stop SparkContext multiple times", { - for (i in 1:3) { - sc <- sparkR.init() - rdd <- parallelize(sc, 1:10) - expect_equal(count(rdd), 10) - sparkR.stop() - } -}) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala index be64c68204c87..3cc5813e84c4d 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala @@ -107,12 +107,15 @@ object SparkRBackend { val buf = new Array[Byte](1024) // shutdown JVM if R does not connect back in 10 seconds serverSocket.setSoTimeout(10000) - val inSocket = serverSocket.accept() - serverSocket.close() - // wait for the end of socket, closed if R process die - inSocket.getInputStream().read(buf) - sparkRBackend.close() - System.exit(0) + try { + val inSocket = serverSocket.accept() + serverSocket.close() + // wait for the end of socket, closed if R process die + inSocket.getInputStream().read(buf) + } finally { + sparkRBackend.close() + System.exit(0) + } } }.start() From e6fb8d89dfaaa6293e9e9658324a3b73c57b8c39 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 5 Mar 2015 13:32:32 -0800 Subject: [PATCH 584/687] improve logging --- .../berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 1dc84295ac4d1..e8c2b1efa8d49 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -102,6 +102,11 @@ class SparkRBackendHandler(server: SparkRBackend) matchMethod(numArgs, args, x.getParameterTypes) } if (methods.isEmpty) { + System.err.println(s"cannot find matching method ${cls.get}.$methodName. " + + s"Candidates are:") + selectedMethods.foreach { method => + System.err.println(s"$methodName(${method.getParameterTypes})") + } throw new Exception(s"No matched method found for $cls.$methodName") } val ret = methods.head.invoke(obj, args:_*) @@ -144,7 +149,6 @@ class SparkRBackendHandler(server: SparkRBackend) args: Array[java.lang.Object], parameterTypes: Array[Class[_]]): Boolean = { if (parameterTypes.length != numArgs) { - // println(s"num of arguments numArgs not match with ${parameterTypes.length}") return false } @@ -161,7 +165,7 @@ class SparkRBackendHandler(server: SparkRBackend) } } if (!parameterWrapperType.isInstance(args(i))) { - println(s"arg $i not match: expected type $parameterWrapperType, but got ${args(i).getClass()}") + System.err.println(s"arg $i not match: expected type $parameterWrapperType, but got ${args(i).getClass()}") return false } } From 9dd6a5abcd2cf7d537eb91ada1cc45805b667124 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 5 Mar 2015 14:27:50 -0800 Subject: [PATCH 585/687] Update SparkRBackendHandler.scala --- .../edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index e8c2b1efa8d49..c292c59d63f29 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -105,7 +105,7 @@ class SparkRBackendHandler(server: SparkRBackend) System.err.println(s"cannot find matching method ${cls.get}.$methodName. " + s"Candidates are:") selectedMethods.foreach { method => - System.err.println(s"$methodName(${method.getParameterTypes})") + System.err.println(s"$methodName(${method.getParameterTypes.mkString(",")})") } throw new Exception(s"No matched method found for $cls.$methodName") } From c5fa3b9fd9278509f2c1c0683f30e5f23bcf3c0d Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 5 Mar 2015 18:22:53 -0600 Subject: [PATCH 586/687] New `select` method Added another version of `select` that will take a list as an argument (instead of just specific column names or expression) --- pkg/R/DataFrame.R | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 810ce81a6c54f..04d5b19221439 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -771,6 +771,20 @@ setMethod("select", signature(x = "DataFrame", col = "Column"), dataFrame(sdf) }) +setMethod("select", + signature(x = "DataFrame", col = "list"), + function(x, col) { + cols <- lapply(col, function(c) { + if (class(c)== "Column") { + c@jc + } else { + col(c)@jc + } + }) + sdf <- callJMethod(x@sdf, "select", listToSeq(cols)) + dataFrame(sdf) + }) + #' SelectExpr #' #' Select from a DataFrame using a set of SQL expressions. From 7a5d6fdfa73efdc87dd022e14f5bac71a75d3a3e Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 5 Mar 2015 18:23:16 -0600 Subject: [PATCH 587/687] `withColumn` and `withColumnRenamed` --- pkg/NAMESPACE | 4 ++- pkg/R/DataFrame.R | 64 ++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 12 +++++++ 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index f964d6d1c0505..82b46d5c94a8a 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -113,7 +113,9 @@ exportMethods("columns", "toJSON", "toRDD", "unionAll", - "where") + "where", + "withColumn", + "withColumnRenamed") exportClasses("Column") diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 04d5b19221439..054c7274500bc 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -815,6 +815,70 @@ setMethod("selectExpr", dataFrame(sdf) }) +#' WithColumn +#' +#' Return a new DataFrame with the specified column added. +#' +#' @param x A DataFrame +#' @param colName A string containing the name of the new column. +#' @param col A Column expression. +#' @return A DataFrame with the new column added. +#' @rdname withColumn +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' newDF <- withColumn(df, "newCol", df$col1 * 5) +#' } +setGeneric("withColumn", function(x, colName, col) { standardGeneric("withColumn") }) + +#' @rdname withColumn +#' @export +setMethod("withColumn", + signature(x = "DataFrame", colName = "character", col = "Column"), + function(x, colName, col) { + select(x, x$"*", alias(col, colName)) + }) + +#' WithColumnRenamed +#' +#' Rename an existing column in a DataFrame. +#' +#' @param x A DataFrame +#' @param existingCol The name of the column you want to change. +#' @param newCol The new column name. +#' @return A DataFrame with the column name changed. +#' @rdname withColumnRenamed +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' path <- "path/to/file.json" +#' df <- jsonFile(sqlCtx, path) +#' newDF <- withColumnRenamed(df, "col1", "newCol1") +#' } +setGeneric("withColumnRenamed", function(x, existingCol, newCol) { + standardGeneric("withColumnRenamed") }) + +#' @rdname withColumnRenamed +#' @export +setMethod("withColumnRenamed", + signature(x = "DataFrame", existingCol = "character", newCol = "character"), + function(x, existingCol, newCol) { + cols <- lapply(columns(x), function(c) { + if (c == existingCol) { + alias(col(c), newCol) + } else { + col(c) + } + }) + select(x, cols) + }) + #' SortDF #' #' Sort a DataFrame by the specified column(s). diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index eba8c7f86ab95..792d68c1973b6 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -464,6 +464,18 @@ test_that("unionAll(), subtract(), and intersect() on a DataFrame", { expect_true(first(intersected)$name == "Andy") }) +test_that("withColumn() and withColumnRenamed()", { + df <- jsonFile(sqlCtx, jsonPath) + newDF <- withColumn(df, "newAge", df$age + 2) + expect_true(length(columns(newDF)) == 3) + expect_true(columns(newDF)[3] == "newAge") + expect_true(first(filter(newDF, df$name != "Michael"))$newAge == 32) + + newDF2 <- withColumnRenamed(df, "age", "newerAge") + expect_true(length(columns(newDF2)) == 2) + expect_true(columns(newDF2)[1] == "newerAge") +}) + # TODO: Enable and test once the parquetFile PR has been merged # test_that("saveAsParquetFile() on DataFrame and works with parquetFile", { # df <- jsonFile(sqlCtx, jsonPath) From f3d99a66a27fc5929ea406e8ba8220218b55b42b Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Fri, 6 Mar 2015 09:23:04 +0800 Subject: [PATCH 588/687] [SPARKR-156] phase 2: implement zipWithIndex() of the RDD class. --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 57 +++++++++++++++++++++++++++++++++++++++ pkg/inst/tests/test_rdd.R | 14 ++++++++++ pkg/man/zipWithIndex.Rd | 40 +++++++++++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100644 pkg/man/zipWithIndex.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index f2f22ad4d6f1b..512d078e707bb 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -63,6 +63,7 @@ exportMethods( "unpersist", "value", "values", + "zipWithIndex", "zipWithUniqueId" ) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 1148ef58d720f..8313794fa4b38 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1468,6 +1468,63 @@ setMethod("zipWithUniqueId", lapplyPartitionsWithIndex(x, partitionFunc) }) +#' Zip an RDD with its element indices. +#' +#' The ordering is first based on the partition index and then the +#' ordering of items within each partition. So the first item in +#' the first partition gets index 0, and the last item in the last +#' partition receives the largest index. +#' +#' This method needs to trigger a spark job when this RDD contains +#' more than one partitions. +#' +#' @param x An RDD to be zipped. +#' @return An RDD with zipped items. +#' @rdname zipWithIndex +#' @seealso zipWithUniqueId +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) +#' collect(zipWithIndex(rdd)) +#' # list(list("a", 0), list("b", 1), list("c", 2), list("d", 3), list("e", 4)) +#'} +setGeneric("zipWithIndex", function(x) { standardGeneric("zipWithIndex") }) + +#' @rdname zipWithIndex +#' @aliases zipWithIndex,RDD +setMethod("zipWithIndex", + signature(x = "RDD"), + function(x) { + n <- numPartitions(x) + if (n > 1) { + nums <- collect(lapplyPartition(x, + function(part) { + list(length(part)) + })) + startIndices <- Reduce("+", nums, accumulate = TRUE) + } + + partitionFunc <- function(split, part) { + if (split == 0) { + startIndex <- 0 + } else { + startIndex <- startIndices[[split]] + } + + mapply( + function(item, index) { + list(item, index - 1 + startIndex) + }, + part, + seq_along(part), + SIMPLIFY = FALSE) + } + + lapplyPartitionsWithIndex(x, partitionFunc) + }) + ############ Binary Functions ############# #' Return the union RDD of two RDDs. diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 7541bfe99631b..40d03839c4be6 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -362,6 +362,20 @@ test_that("zipWithUniqueId() on RDDs", { expect_equal(actual, expected) }) +test_that("zipWithIndex() on RDDs", { + rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) + actual <- collect(zipWithIndex(rdd)) + expected <- list(list("a", 0), list("b", 1), list("c", 2), + list("d", 3), list("e", 4)) + expect_equal(actual, expected) + + rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 1L) + actual <- collect(zipWithIndex(rdd)) + expected <- list(list("a", 0), list("b", 1), list("c", 2), + list("d", 3), list("e", 4)) + expect_equal(actual, expected) +}) + test_that("keys() on RDDs", { keys <- keys(intRdd) actual <- collect(keys) diff --git a/pkg/man/zipWithIndex.Rd b/pkg/man/zipWithIndex.Rd new file mode 100644 index 0000000000000..615f007f7d1b0 --- /dev/null +++ b/pkg/man/zipWithIndex.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{zipWithIndex} +\alias{zipWithIndex} +\alias{zipWithIndex,RDD} +\alias{zipWithIndex,RDD-method} +\title{Zip an RDD with its element indices.} +\usage{ +zipWithIndex(x) + +\S4method{zipWithIndex}{RDD}(x) +} +\arguments{ +\item{x}{An RDD to be zipped.} +} +\value{ +An RDD with zipped items. +} +\description{ +The ordering is first based on the partition index and then the +ordering of items within each partition. So the first item in +the first partition gets index 0, and the last item in the last +partition receives the largest index. +} +\details{ +This method needs to trigger a spark job when this RDD contains +more than one partitions. +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) +collect(zipWithIndex(rdd)) +# list(list("a", 0), list("b", 1), list("c", 2), list("d", 3), list("e", 4)) +} +} +\seealso{ +zipWithUniqueId +} + From 5e3a576ae8f6718ac0640db5c3a6a2ddd9cfaaf1 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Fri, 6 Mar 2015 09:39:26 +0800 Subject: [PATCH 589/687] Fix indentation. --- pkg/R/RDD.R | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 8313794fa4b38..bc3fd3f7c9f98 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1500,19 +1500,19 @@ setMethod("zipWithIndex", n <- numPartitions(x) if (n > 1) { nums <- collect(lapplyPartition(x, - function(part) { - list(length(part)) - })) - startIndices <- Reduce("+", nums, accumulate = TRUE) - } - - partitionFunc <- function(split, part) { - if (split == 0) { - startIndex <- 0 + function(part) { + list(length(part)) + })) + startIndices <- Reduce("+", nums, accumulate = TRUE) + } + + partitionFunc <- function(split, part) { + if (split == 0) { + startIndex <- 0 } else { - startIndex <- startIndices[[split]] - } - + startIndex <- startIndices[[split]] + } + mapply( function(item, index) { list(item, index - 1 + startIndex) @@ -1521,10 +1521,11 @@ setMethod("zipWithIndex", seq_along(part), SIMPLIFY = FALSE) } - + lapplyPartitionsWithIndex(x, partitionFunc) }) + ############ Binary Functions ############# #' Return the union RDD of two RDDs. From a8cebf0759659c376f7eb8f6238436caadfc4d05 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 5 Mar 2015 20:12:55 -0800 Subject: [PATCH 590/687] Remove print statement in SparkRBackendHandler This print statement is noisy for SQL methods which have multiple APIs (like loadDF). We already have a better error message when no valid methods are found --- .../edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index c292c59d63f29..44b90ab36ab6d 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -165,7 +165,6 @@ class SparkRBackendHandler(server: SparkRBackend) } } if (!parameterWrapperType.isInstance(args(i))) { - System.err.println(s"arg $i not match: expected type $parameterWrapperType, but got ${args(i).getClass()}") return false } } From 3f7aed6a4b2c35eaf31077bd66104a74c5f176f4 Mon Sep 17 00:00:00 2001 From: Sun Rui Date: Fri, 6 Mar 2015 12:38:19 +0800 Subject: [PATCH 591/687] Fix minor typos in the function description. --- pkg/R/RDD.R | 4 ++-- pkg/man/zipWithIndex.Rd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index bc3fd3f7c9f98..138aeabf91df7 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1475,8 +1475,8 @@ setMethod("zipWithUniqueId", #' the first partition gets index 0, and the last item in the last #' partition receives the largest index. #' -#' This method needs to trigger a spark job when this RDD contains -#' more than one partitions. +#' This method needs to trigger a Spark job when this RDD contains +#' more than one partition. #' #' @param x An RDD to be zipped. #' @return An RDD with zipped items. diff --git a/pkg/man/zipWithIndex.Rd b/pkg/man/zipWithIndex.Rd index 615f007f7d1b0..cc4d74987f2d2 100644 --- a/pkg/man/zipWithIndex.Rd +++ b/pkg/man/zipWithIndex.Rd @@ -23,8 +23,8 @@ the first partition gets index 0, and the last item in the last partition receives the largest index. } \details{ -This method needs to trigger a spark job when this RDD contains -more than one partitions. +This method needs to trigger a Spark job when this RDD contains +more than one partition. } \examples{ \dontrun{ From e60578ac52f07e6dfc2bd31f51c6a4ef5d7023d3 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Thu, 5 Mar 2015 23:21:29 -0600 Subject: [PATCH 592/687] update tests to guarantee row order --- pkg/inst/tests/test_sparkSQL.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 9f7eb851f80d0..20da4b600820f 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -78,13 +78,13 @@ test_that("insertInto() on a registered table", { registerTempTable(dfParquet, "table1") insertInto(dfParquet2, "table1") expect_true(count(sql(sqlCtx, "select * from table1")) == 5) - expect_true(first(sql(sqlCtx, "select * from table1"))$name == "Michael") + expect_true(first(sql(sqlCtx, "select * from table1 order by age"))$name == "Michael") dropTempTable(sqlCtx, "table1") registerTempTable(dfParquet, "table1") insertInto(dfParquet2, "table1", overwrite = TRUE) expect_true(count(sql(sqlCtx, "select * from table1")) == 2) - expect_true(first(sql(sqlCtx, "select * from table1"))$name == "Bob") + expect_true(first(sql(sqlCtx, "select * from table1 order by age"))$name == "Bob") dropTempTable(sqlCtx, "table1") }) @@ -473,17 +473,17 @@ test_that("unionAll(), subtract(), and intersect() on a DataFrame", { writeLines(lines, jsonPath2) df2 <- loadDF(sqlCtx, jsonPath2, "json") - unioned <- unionAll(df, df2) + unioned <- sortDF(unionAll(df, df2), df$age) expect_true(inherits(unioned, "DataFrame")) expect_true(count(unioned) == 6) expect_true(first(unioned)$name == "Michael") - subtracted <- subtract(df, df2) + subtracted <- sortDF(subtract(df, df2), desc(df$age)) expect_true(inherits(unioned, "DataFrame")) expect_true(count(subtracted) == 2) expect_true(first(subtracted)$name == "Justin") - intersected <- intersect(df, df2) + intersected <- sortDF(intersect(df, df2), df$age) expect_true(inherits(unioned, "DataFrame")) expect_true(count(intersected) == 1) expect_true(first(intersected)$name == "Andy") From b4c0b2e49f7cc5cab62aa003057214fa56e4a17d Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Fri, 6 Mar 2015 12:41:16 -0800 Subject: [PATCH 593/687] use fork package --- pkg/inst/worker/daemon.R | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/pkg/inst/worker/daemon.R b/pkg/inst/worker/daemon.R index f2fff54aaee37..381b3c42d7041 100644 --- a/pkg/inst/worker/daemon.R +++ b/pkg/inst/worker/daemon.R @@ -1,7 +1,13 @@ # Worker daemon +# try to load `fork`, or install +FORK_URI <- "http://cran.r-project.org/src/contrib/Archive/fork/fork_1.2.4.tar.gz" +tryCatch(library(fork), error = function(err) { + install.packages(FORK_URI, repos = NULL, type = "source") +}) + rLibDir <- Sys.getenv("SPARKR_RLIBDIR") -script <- paste(rLibDir, "SparkR/worker/worker.R", sep="/") +script <- paste(rLibDir, "SparkR/worker/worker.R", sep = "/") # preload SparkR package, speedup worker .libPaths(c(rLibDir, .libPaths())) @@ -11,15 +17,23 @@ port <- as.integer(Sys.getenv("SPARKR_WORKER_PORT")) inputCon <- socketConnection(port = port, blocking = TRUE, open = "rb") while (TRUE) { - inport <- SparkR:::readInt(inputCon) - if (length(inport) != 1) { - quit(save="no") + ready <- socketSelect(list(inputCon), timeout = 1) + if (ready) { + inport <- SparkR:::readInt(inputCon) + if (length(inport) != 1) { + quit(save="no") + } + p <- fork::fork(NULL) + if (p == 0) { + close(inputCon) + Sys.setenv(SPARKR_WORKER_PORT = inport) + source(script) + fork::exit(0) + } } - p <- parallel:::mcfork() - if (inherits(p, "masterProcess")) { - close(inputCon) - Sys.setenv(SPARKR_WORKER_PORT = inport) - source(script) - parallel:::mcexit(0) + # cleanup all the child process + status <- fork::wait(0, nohang = TRUE) + while (status[1] > 0) { + status <- fork::wait(0, nohang = TRUE) } } From dc1291bfe2fc9d922b0718c1e25deb056badf38a Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sun, 8 Mar 2015 19:25:56 -0400 Subject: [PATCH 594/687] Add checks for namespace access operators in cleanClosure. --- pkg/R/RDD.R | 2 -- pkg/R/utils.R | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 138aeabf91df7..57de2693e6be4 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -105,8 +105,6 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), return(rdd@env$jrdd_val) } - # TODO: This is to handle anonymous functions. Find out a - # better way to do this. computeFunc <- function(split, part) { rdd@func(split, part) } diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 6bad0abfd0e0d..6b323e4fa6970 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -278,6 +278,8 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { } } else if (nodeChar == "$") { # Skip the field. processClosure(node[[2]], oldEnv, argNames, newEnv) + } else if (nodeChar == "::" || nodeChar == ":::") { + processClosure(node[[3]], oldEnv, argNames, newEnv) } else { for (i in 1:nodeLen) { processClosure(node[[i]], oldEnv, argNames, newEnv) From 15a713fda7972f31add2699132daf27b56264858 Mon Sep 17 00:00:00 2001 From: cafreeman Date: Sun, 8 Mar 2015 20:21:49 -0500 Subject: [PATCH 595/687] Fix example for `dropTempTable` --- pkg/R/SQLContext.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 2ea9b0b158b39..436d7501a3e69 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -237,7 +237,11 @@ clearCache <- function(sqlCtx) { #' #' @param sqlCtx SQLContext to use #' @param tableName The name of the SparkSQL table to be dropped. -#' clearCache(sqlCtx) +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' df <- loadDF(sqlCtx, path, "parquet") +#' registerTempTable(df, "table") +#' dropTempTable(sqlCtx, "table") #' } dropTempTable <- function(sqlCtx, tableName) { From 97dde1a5dd86a382b16e64a9d2ec90a66b2b6a3b Mon Sep 17 00:00:00 2001 From: hlin09 Date: Sun, 8 Mar 2015 21:46:50 -0400 Subject: [PATCH 596/687] Add a test for access operators. --- pkg/inst/tests/test_utils.R | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index c549aa65708d9..0e09ccd8b502f 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -83,6 +83,20 @@ test_that("cleanClosure on R functions", { env <- environment(newF) expect_equal(length(ls(env)), 0) # "y" and "g" should not be included. + # Test for access operators `$`, `::` and `:::`. + l <- list(a = 1) + a <- 2 + base <- c(1, 2, 3) + f <- function(x) { + z <- base::as.integer(x) + 1 + l$a <- 3 + z + l$a + } + newF <- cleanClosure(f) + env <- environment(newF) + expect_equal(ls(env), "l") # "base" and "a" should not be included. + expect_equal(get("l", envir = env, inherits = FALSE), l) + # Test for overriding variables in base namespace (Issue: SparkR-196). nums <- as.list(1:10) rdd <- parallelize(sc, nums, 2L) From 89b886da8250856edd4d7a979481bf9628a084cb Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 9 Mar 2015 10:12:28 -0400 Subject: [PATCH 597/687] Move setGeneric() to 00-generics.R. --- pkg/R/00-generics.R | 1160 +++++++++++++++++++++++++++++++++++++++++++ pkg/R/RDD.R | 699 -------------------------- pkg/R/pairRDD.R | 452 ----------------- 3 files changed, 1160 insertions(+), 1151 deletions(-) create mode 100644 pkg/R/00-generics.R diff --git a/pkg/R/00-generics.R b/pkg/R/00-generics.R new file mode 100644 index 0000000000000..90d0d35a2b653 --- /dev/null +++ b/pkg/R/00-generics.R @@ -0,0 +1,1160 @@ +############ RDD Actions and Transformations ############ + +#' Persist an RDD +#' +#' Persist this RDD with the default storage level (MEMORY_ONLY). +#' +#' @param x The RDD to cache +#' @rdname cache-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' cache(rdd) +#'} +setGeneric("cache", function(x) { standardGeneric("cache") }) + +#' Persist an RDD +#' +#' Persist this RDD with the specified storage level. For details of the +#' supported storage levels, refer to +#' http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. +#' +#' @param x The RDD to persist +#' @param newLevel The new storage level to be assigned +#' @rdname persist +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' persist(rdd, "MEMORY_AND_DISK") +#'} +setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) + +#' Unpersist an RDD +#' +#' Mark the RDD as non-persistent, and remove all blocks for it from memory and +#' disk. +#' +#' @param rdd The RDD to unpersist +#' @rdname unpersist-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' cache(rdd) # rdd@@env$isCached == TRUE +#' unpersist(rdd) # rdd@@env$isCached == FALSE +#'} +setGeneric("unpersist", function(x) { standardGeneric("unpersist") }) + +#' Checkpoint an RDD +#' +#' Mark this RDD for checkpointing. It will be saved to a file inside the +#' checkpoint directory set with setCheckpointDir() and all references to its +#' parent RDDs will be removed. This function must be called before any job has +#' been executed on this RDD. It is strongly recommended that this RDD is +#' persisted in memory, otherwise saving it on a file will require recomputation. +#' +#' @param rdd The RDD to checkpoint +#' @rdname checkpoint-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' setCheckpointDir(sc, "checkpoints") +#' rdd <- parallelize(sc, 1:10, 2L) +#' checkpoint(rdd) +#'} +setGeneric("checkpoint", function(x) { standardGeneric("checkpoint") }) + +#' Gets the number of partitions of an RDD +#' +#' @param x A RDD. +#' @return the number of partitions of rdd as an integer. +#' @rdname numPartitions +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' numPartitions(rdd) # 2L +#'} +setGeneric("numPartitions", function(x) { standardGeneric("numPartitions") }) + +#' Collect elements of an RDD +#' +#' @description +#' \code{collect} returns a list that contains all of the elements in this RDD. +#' +#' @param x The RDD to collect +#' @param ... Other optional arguments to collect +#' @param flatten FALSE if the list should not flattened +#' @return a list containing elements in the RDD +#' @rdname collect-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' collect(rdd) # list from 1 to 10 +#' collectPartition(rdd, 0L) # list from 1 to 5 +#'} +setGeneric("collect", function(x, ...) { standardGeneric("collect") }) + +#' @rdname collect-methods +#' @export +#' @description +#' \code{collectPartition} returns a list that contains all of the elements +#' in the specified partition of the RDD. +#' @param partitionId the partition to collect (starts from 0) +setGeneric("collectPartition", + function(x, partitionId) { + standardGeneric("collectPartition") + }) + +#' @rdname collect-methods +#' @export +#' @description +#' \code{collectAsMap} returns a named list as a map that contains all of the elements +#' in a key-value pair RDD. +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) +#' collectAsMap(rdd) # list(`1` = 2, `3` = 4) +#'} +setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) + +#' Return the number of elements in the RDD. +#' +#' @param x The RDD to count +#' @return number of elements in the RDD. +#' @rdname count +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' count(rdd) # 10 +#' length(rdd) # Same as count +#'} +setGeneric("count", function(x) { standardGeneric("count") }) + +#' Return the count of each unique value in this RDD as a list of +#' (value, count) pairs. +#' +#' Same as countByValue in Spark. +#' +#' @param x The RDD to count +#' @return list of (value, count) pairs, where count is number of each unique +#' value in rdd. +#' @rdname countByValue +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, c(1,2,3,2,1)) +#' countByValue(rdd) # (1,2L), (2,2L), (3,1L) +#'} +setGeneric("countByValue", function(x) { standardGeneric("countByValue") }) + +#' @rdname lapply +#' @export +setGeneric("map", function(X, FUN) { + standardGeneric("map") }) + +#' Flatten results after apply a function to all elements +#' +#' This function return a new RDD by first applying a function to all +#' elements of this RDD, and then flattening the results. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on each element +#' @return a new RDD created by the transformation. +#' @rdname flatMap +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) +#' collect(multiplyByTwo) # 2,20,4,40,6,60... +#'} +setGeneric("flatMap", function(X, FUN) { + standardGeneric("flatMap") }) + +#' Apply a function to each partition of an RDD +#' +#' Return a new RDD by applying a function to each partition of this RDD. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on each partition. +#' @return a new RDD created by the transformation. +#' @rdname lapplyPartition +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' partitionSum <- lapplyPartition(rdd, function(part) { Reduce("+", part) }) +#' collect(partitionSum) # 15, 40 +#'} +setGeneric("lapplyPartition", function(X, FUN) { + standardGeneric("lapplyPartition") }) + +#' mapPartitions is the same as lapplyPartition. +#' +#' @rdname lapplyPartition +#' @export +setGeneric("mapPartitions", function(X, FUN) { + standardGeneric("mapPartitions") }) + +#' Return a new RDD by applying a function to each partition of this RDD, while +#' tracking the index of the original partition. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on each partition; takes the partition +#' index and a list of elements in the particular partition. +#' @return a new RDD created by the transformation. +#' @rdname lapplyPartitionsWithIndex +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 5L) +#' prod <- lapplyPartitionsWithIndex(rdd, function(split, part) { +#' split * Reduce("+", part) }) +#' collect(prod, flatten = FALSE) # 0, 7, 22, 45, 76 +#'} +setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { + standardGeneric("lapplyPartitionsWithIndex") }) + +#' @rdname lapplyPartitionsWithIndex +#' @export +setGeneric("mapPartitionsWithIndex", function(X, FUN) { + standardGeneric("mapPartitionsWithIndex") }) + +#' This function returns a new RDD containing only the elements that satisfy +#' a predicate (i.e. returning TRUE in a given logical function). +#' The same as `filter()' in Spark. +#' +#' @param x The RDD to be filtered. +#' @param f A unary predicate function. +#' @rdname filterRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) +#'} +setGeneric("filterRDD", + function(x, f) { standardGeneric("filterRDD") }) + +#' Reduce across elements of an RDD. +#' +#' This function reduces the elements of this RDD using the +#' specified commutative and associative binary operator. +#' +#' @param rdd The RDD to reduce +#' @param func Commutative and associative function to apply on elements +#' of the RDD. +#' @export +#' @rdname reduce +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' reduce(rdd, "+") # 55 +#'} +setGeneric("reduce", function(x, func) { standardGeneric("reduce") }) + +#' Get the maximum element of an RDD. +#' +#' @param x The RDD to get the maximum element from +#' @export +#' @rdname maximum +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' maximum(rdd) # 10 +#'} +setGeneric("maximum", function(x) { standardGeneric("maximum") }) + +#' Get the minimum element of an RDD. +#' +#' @param x The RDD to get the minimum element from +#' @export +#' @rdname minimum +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' minimum(rdd) # 1 +#'} +setGeneric("minimum", function(x) { standardGeneric("minimum") }) + +#' Applies a function to all elements in an RDD, and force evaluation. +#' +#' @param x The RDD to apply the function +#' @param func The function to be applied. +#' @return invisible NULL. +#' @export +#' @rdname foreach +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' foreach(rdd, function(x) { save(x, file=...) }) +#'} +setGeneric("foreach", function(x, func) { standardGeneric("foreach") }) + +#' Applies a function to each partition in an RDD, and force evaluation. +#' +#' @export +#' @rdname foreach +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' foreachPartition(rdd, function(part) { save(part, file=...); NULL }) +#'} +setGeneric("foreachPartition", + function(x, func) { standardGeneric("foreachPartition") }) + +#' Take elements from an RDD. +#' +#' This function takes the first NUM elements in the RDD and +#' returns them in a list. +#' +#' @param x The RDD to take elements from +#' @param num Number of elements to take +#' @rdname take +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' take(rdd, 2L) # list(1, 2) +#'} +setGeneric("take", function(x, num) { standardGeneric("take") }) + +#' Removes the duplicates from RDD. +#' +#' This function returns a new RDD containing the distinct elements in the +#' given RDD. The same as `distinct()' in Spark. +#' +#' @param x The RDD to remove duplicates from. +#' @param numPartitions Number of partitions to create. +#' @rdname distinct +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, c(1,2,2,3,3,3)) +#' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) +#'} +setGeneric("distinct", + function(x, numPartitions) { standardGeneric("distinct") }) + +#' Return an RDD that is a sampled subset of the given RDD. +#' +#' The same as `sample()' in Spark. (We rename it due to signature +#' inconsistencies with the `sample()' function in R's base package.) +#' +#' @param x The RDD to sample elements from +#' @param withReplacement Sampling with replacement or not +#' @param fraction The (rough) sample target fraction +#' @param seed Randomness seed value +#' @rdname sampleRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) # ensure each num is in its own split +#' collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) # ~5 distinct elements +#' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates +#'} +setGeneric("sampleRDD", + function(x, withReplacement, fraction, seed) { + standardGeneric("sampleRDD") + }) + +#' Return a list of the elements that are a sampled subset of the given RDD. +#' +#' @param x The RDD to sample elements from +#' @param withReplacement Sampling with replacement or not +#' @param num Number of elements to return +#' @param seed Randomness seed value +#' @rdname takeSample +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:100) +#' # exactly 5 elements sampled, which may not be distinct +#' takeSample(rdd, TRUE, 5L, 1618L) +#' # exactly 5 distinct elements sampled +#' takeSample(rdd, FALSE, 5L, 16181618L) +#'} +setGeneric("takeSample", + function(x, withReplacement, num, seed) { + standardGeneric("takeSample") + }) + +#' Creates tuples of the elements in this RDD by applying a function. +#' +#' @param x The RDD. +#' @param func The function to be applied. +#' @rdname keyBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3)) +#' collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) +#'} +setGeneric("keyBy", function(x, func) { standardGeneric("keyBy") }) + +#' Return a new RDD that has exactly numPartitions partitions. +#' Can increase or decrease the level of parallelism in this RDD. Internally, +#' this uses a shuffle to redistribute data. +#' If you are decreasing the number of partitions in this RDD, consider using +#' coalesce, which can avoid performing a shuffle. +#' +#' @param x The RDD. +#' @param numPartitions Number of partitions to create. +#' @rdname repartition +#' @seealso coalesce +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5, 6, 7), 4L) +#' numPartitions(rdd) # 4 +#' numPartitions(repartition(rdd, 2L)) # 2 +#'} +setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartition") }) + +#' Return a new RDD that is reduced into numPartitions partitions. +#' +#' @param x The RDD. +#' @param numPartitions Number of partitions to create. +#' @rdname coalesce +#' @seealso repartition +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5), 3L) +#' numPartitions(rdd) # 3 +#' numPartitions(coalesce(rdd, 1L)) # 1 +#'} +setGeneric("coalesce", function(x, numPartitions, ...) { standardGeneric("coalesce") }) + +#' Save this RDD as a SequenceFile of serialized objects. +#' +#' @param x The RDD to save +#' @param path The directory where the file is saved +#' @rdname saveAsObjectFile +#' @seealso objectFile +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' saveAsObjectFile(rdd, "/tmp/sparkR-tmp") +#'} +setGeneric("saveAsObjectFile", function(x, path) { standardGeneric("saveAsObjectFile") }) + +#' Save this RDD as a text file, using string representations of elements. +#' +#' @param x The RDD to save +#' @param path The directory where the splits of the text file are saved +#' @rdname saveAsTextFile +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' saveAsTextFile(rdd, "/tmp/sparkR-tmp") +#'} +setGeneric("saveAsTextFile", function(x, path) { standardGeneric("saveAsTextFile") }) + +#' Sort an RDD by the given key function. +#' +#' @param x An RDD to be sorted. +#' @param func A function used to compute the sort key for each element. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all elements are sorted. +#' @rdname sortBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(3, 2, 1)) +#' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) +#'} +setGeneric("sortBy", function(x, + func, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortBy") +}) + +#' Returns the first N elements from an RDD in ascending order. +#' +#' @param x An RDD. +#' @param num Number of elements to return. +#' @return The first N elements from the RDD in ascending order. +#' @rdname takeOrdered +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +#' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) +#'} +setGeneric("takeOrdered", function(x, num) { standardGeneric("takeOrdered") }) + +#' Returns the top N elements from an RDD. +#' +#' @param x An RDD. +#' @param num Number of elements to return. +#' @return The top N elements from the RDD. +#' @rdname top +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +#' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) +#'} +setGeneric("top", function(x, num) { standardGeneric("top") }) + +#' Fold an RDD using a given associative function and a neutral "zero value". +#' +#' Aggregate the elements of each partition, and then the results for all the +#' partitions, using a given associative function and a neutral "zero value". +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param op An associative function for the folding operation. +#' @return The folding result. +#' @rdname fold +#' @seealso reduce +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) +#' fold(rdd, 0, "+") # 15 +#'} +setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) + +#' Aggregate an RDD using the given combine functions and a neutral "zero value". +#' +#' Aggregate the elements of each partition, and then the results for all the +#' partitions, using given combine functions and a neutral "zero value". +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param seqOp A function to aggregate the RDD elements. It may return a different +#' result type from the type of the RDD elements. +#' @param combOp A function to aggregate results of seqOp. +#' @return The aggregation result. +#' @rdname aggregateRDD +#' @seealso reduce +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4)) +#' zeroValue <- list(0, 0) +#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +#' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) +#'} +setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) + +#' Pipes elements to a forked external process. +#' +#' The same as 'pipe()' in Spark. +#' +#' @param x The RDD whose elements are piped to the forked external process. +#' @param command The command to fork an external process. +#' @param env A named list to set environment variables of the external process. +#' @return A new RDD created by piping all elements to a forked external process. +#' @rdname pipeRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' collect(pipeRDD(rdd, "more") +#' Output: c("1", "2", ..., "10") +#'} +setGeneric("pipeRDD", function(x, command, env = list()) { + standardGeneric("pipeRDD") +}) + +# TODO: Consider caching the name in the RDD's environment +#' Return an RDD's name. +#' +#' @param x The RDD whose name is returned. +#' @rdname name +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1,2,3)) +#' name(rdd) # NULL (if not set before) +#'} +setGeneric("name", function(x) { standardGeneric("name") }) + +#' Set an RDD's name. +#' +#' @param x The RDD whose name is to be set. +#' @param name The RDD name to be set. +#' @return a new RDD renamed. +#' @rdname setName +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1,2,3)) +#' setName(rdd, "myRDD") +#' name(rdd) # "myRDD" +#'} +setGeneric("setName", function(x, name) { standardGeneric("setName") }) + +#' Zip an RDD with generated unique Long IDs. +#' +#' Items in the kth partition will get ids k, n+k, 2*n+k, ..., where +#' n is the number of partitions. So there may exist gaps, but this +#' method won't trigger a spark job, which is different from +#' zipWithIndex. +#' +#' @param x An RDD to be zipped. +#' @return An RDD with zipped items. +#' @rdname zipWithUniqueId +#' @seealso zipWithIndex +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) +#' collect(zipWithUniqueId(rdd)) +#' # list(list("a", 0), list("b", 3), list("c", 1), list("d", 4), list("e", 2)) +#'} +setGeneric("zipWithUniqueId", function(x) { standardGeneric("zipWithUniqueId") }) + +#' Zip an RDD with its element indices. +#' +#' The ordering is first based on the partition index and then the +#' ordering of items within each partition. So the first item in +#' the first partition gets index 0, and the last item in the last +#' partition receives the largest index. +#' +#' This method needs to trigger a Spark job when this RDD contains +#' more than one partition. +#' +#' @param x An RDD to be zipped. +#' @return An RDD with zipped items. +#' @rdname zipWithIndex +#' @seealso zipWithUniqueId +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) +#' collect(zipWithIndex(rdd)) +#' # list(list("a", 0), list("b", 1), list("c", 2), list("d", 3), list("e", 4)) +#'} +setGeneric("zipWithIndex", function(x) { standardGeneric("zipWithIndex") }) + + +############ Binary Functions ############# + + +#' Return the union RDD of two RDDs. +#' The same as union() in Spark. +#' +#' @param x An RDD. +#' @param y An RDD. +#' @return a new RDD created by performing the simple union (witout removing +#' duplicates) of two input RDDs. +#' @rdname unionRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' unionRDD(rdd, rdd) # 1, 2, 3, 1, 2, 3 +#'} +setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) + +#' Look up elements of a key in an RDD +#' +#' @description +#' \code{lookup} returns a list of values in this RDD for key key. +#' +#' @param x The RDD to collect +#' @param key The key to look up for +#' @return a list of values in this RDD for key key +#' @rdname lookup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) +#' rdd <- parallelize(sc, pairs) +#' lookup(rdd, 1) # list(1, 3) +#'} +setGeneric("lookup", function(x, key) { standardGeneric("lookup") }) + +#' Count the number of elements for each key, and return the result to the +#' master as lists of (key, count) pairs. +#' +#' Same as countByKey in Spark. +#' +#' @param x The RDD to count keys. +#' @return list of (key, count) pairs, where count is number of each key in rdd. +#' @rdname countByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) +#' countByKey(rdd) # ("a", 2L), ("b", 1L) +#'} +setGeneric("countByKey", function(x) { standardGeneric("countByKey") }) + +#' Return an RDD with the keys of each tuple. +#' +#' @param x The RDD from which the keys of each tuple is returned. +#' @rdname keys +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(keys(rdd)) # list(1, 3) +#'} +setGeneric("keys", function(x) { standardGeneric("keys") }) + +#' Return an RDD with the values of each tuple. +#' +#' @param x The RDD from which the values of each tuple is returned. +#' @rdname values +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(values(rdd)) # list(2, 4) +#'} +setGeneric("values", function(x) { standardGeneric("values") }) + +#' Applies a function to all values of the elements, without modifying the keys. +#' +#' The same as `mapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. +#' @rdname mapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' makePairs <- lapply(rdd, function(x) { list(x, x) }) +#' collect(mapValues(makePairs, function(x) { x * 2) }) +#' Output: list(list(1,2), list(2,4), list(3,6), ...) +#'} +setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) + +#' Pass each value in the key-value pair RDD through a flatMap function without +#' changing the keys; this also retains the original RDD's partitioning. +#' +#' The same as 'flatMapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. +#' @rdname flatMapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) +#' collect(flatMapValues(rdd, function(x) { x })) +#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) +#'} +setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) + + +############ Shuffle Functions ############ + + +#' Partition an RDD by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' For each element of this RDD, the partitioner is used to compute a hash +#' function and the RDD is partitioned using this hash value. +#' +#' @param x The RDD to partition. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param numPartitions Number of partitions to create. +#' @param ... Other optional arguments to partitionBy. +#' +#' @param partitionFunc The partition function to use. Uses a default hashCode +#' function if not provided +#' @return An RDD partitioned using the specified partitioner. +#' @rdname partitionBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- partitionBy(rdd, 2L) +#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) +#'} +setGeneric("partitionBy", + function(x, numPartitions, ...) { + standardGeneric("partitionBy") + }) + +#' Group values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and group values for each key in the RDD into a single sequence. +#' +#' @param x The RDD to group. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, list(V)) +#' @seealso reduceByKey +#' @rdname groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- groupByKey(rdd, 2L) +#' grouped <- collect(parts) +#' grouped[[1]] # Should be a list(1, list(2, 4)) +#'} +setGeneric("groupByKey", + function(x, numPartitions) { + standardGeneric("groupByKey") + }) + +#' Merge values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function. +#' +#' @param x The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, V') where V' is the merged +#' value +#' @rdname reduceByKey +#' @seealso groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- reduceByKey(rdd, "+", 2L) +#' reduced <- collect(parts) +#' reduced[[1]] # Should be a list(1, 6) +#'} +setGeneric("reduceByKey", + function(x, combineFunc, numPartitions) { + standardGeneric("reduceByKey") + }) + +#' Merge values by key locally +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function, but return the +#' results immediately to the driver as an R list. +#' +#' @param x The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @return A list of elements of type list(K, V') where V' is the merged value for each key +#' @rdname reduceByKeyLocally +#' @seealso reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' reduced <- reduceByKeyLocally(rdd, "+") +#' reduced # list(list(1, 6), list(1.1, 3)) +#'} +setGeneric("reduceByKeyLocally", + function(x, combineFunc) { + standardGeneric("reduceByKeyLocally") + }) + +#' Combine values by key +#' +#' Generic function to combine the elements for each key using a custom set of +#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], +#' for a "combined type" C. Note that V and C can be different -- for example, one +#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). + +#' Users provide three functions: +#' \itemize{ +#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) +#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - +#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates +#' two lists). +#' } +#' +#' @param x The RDD to combine. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param createCombiner Create a combiner (C) given a value (V) +#' @param mergeValue Merge the given value (V) with an existing combiner (C) +#' @param mergeCombiners Merge two combiners and return a new combiner +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, C) where C is the combined type +#' +#' @rdname combineByKey +#' @seealso groupByKey, reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) +#' combined <- collect(parts) +#' combined[[1]] # Should be a list(1, 6) +#'} +setGeneric("combineByKey", + function(x, createCombiner, mergeValue, mergeCombiners, numPartitions) { + standardGeneric("combineByKey") + }) + +#' Aggregate a pair RDD by each key. +#' +#' Aggregate the values of each key in an RDD, using given combine functions +#' and a neutral "zero value". This function can return a different result type, +#' U, than the type of the values in this RDD, V. Thus, we need one operation +#' for merging a V into a U and one operation for merging two U's, The former +#' operation is used for merging values within a partition, and the latter is +#' used for merging values between partitions. To avoid memory allocation, both +#' of these functions are allowed to modify and return their first argument +#' instead of creating a new U. +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param seqOp A function to aggregate the values of each key. It may return +#' a different result type from the type of the values. +#' @param combOp A function to aggregate results of seqOp. +#' @return An RDD containing the aggregation result. +#' @rdname aggregateByKey +#' @seealso foldByKey, combineByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +#' zeroValue <- list(0, 0) +#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +#' aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) +#' # list(list(1, list(3, 2)), list(2, list(7, 2))) +#'} +setGeneric("aggregateByKey", + function(x, zeroValue, seqOp, combOp, numPartitions) { + standardGeneric("aggregateByKey") + }) + +#' Fold a pair RDD by each key. +#' +#' Aggregate the values of each key in an RDD, using an associative function "func" +#' and a neutral "zero value" which may be added to the result an arbitrary +#' number of times, and must not change the result (e.g., 0 for addition, or +#' 1 for multiplication.). +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param func An associative function for folding values of each key. +#' @return An RDD containing the aggregation result. +#' @rdname foldByKey +#' @seealso aggregateByKey, combineByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +#' foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) +#'} +setGeneric("foldByKey", + function(x, zeroValue, func, numPartitions) { + standardGeneric("foldByKey") + }) + +#' Join two RDDs +#' +#' @description +#' \code{join} This function joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param x An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param y An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with matching keys in +#' two input RDDs. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) +#'} +setGeneric("join", function(x, y, numPartitions) { standardGeneric("join") }) + +#' Left outer join two RDDs +#' +#' @description +#' \code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param x An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param y An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in x, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) +#' if no elements in rdd2 have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' leftOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +#'} +setGeneric("leftOuterJoin", function(x, y, numPartitions) { standardGeneric("leftOuterJoin") }) + +#' Right outer join two RDDs +#' +#' @description +#' \code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param x An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param y An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, w) in y, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, v) in x, or the pair (k, (NULL, w)) +#' if no elements in x have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rightOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +#'} +setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) + +#' Full outer join two RDDs +#' +#' @description +#' \code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param x An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param y An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in x and (k, w) in y, the resulting RDD +#' will contain all pairs (k, (v, w)) for both (k, v) in x and +#' (k, w) in y, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements +#' in x/y have key k. +#' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), +#' # list(1, list(3, 1)), +#' # list(2, list(NULL, 4))) +#' # list(3, list(3, NULL)), +#'} +setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) + +#' For each key k in several RDDs, return a resulting RDD that +#' whose values are a list of values for the key in all RDDs. +#' +#' @param ... Several RDDs. +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with values in a list +#' in all RDDs. +#' @rdname cogroup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' cogroup(rdd1, rdd2, numPartitions = 2L) +#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) +#'} +setGeneric("cogroup", + function(..., numPartitions) { standardGeneric("cogroup") }, + signature = "...") + +#' Sort a (k, v) pair RDD by k. +#' +#' @param x A (k, v) pair RDD to be sorted. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all (k, v) pair elements are sorted. +#' @rdname sortByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) +#' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) +#'} +setGeneric("sortByKey", function(x, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortByKey") +}) + diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 138aeabf91df7..34eb4ebd8e80a 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -105,8 +105,6 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), return(rdd@env$jrdd_val) } - # TODO: This is to handle anonymous functions. Find out a - # better way to do this. computeFunc <- function(split, part) { rdd@func(split, part) } @@ -163,21 +161,6 @@ setValidity("RDD", ############ Actions and Transformations ############ -#' Persist an RDD -#' -#' Persist this RDD with the default storage level (MEMORY_ONLY). -#' -#' @param x The RDD to cache -#' @rdname cache-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' cache(rdd) -#'} -setGeneric("cache", function(x) { standardGeneric("cache") }) - #' @rdname cache-methods #' @aliases cache,RDD-method setMethod("cache", @@ -188,24 +171,6 @@ setMethod("cache", x }) -#' Persist an RDD -#' -#' Persist this RDD with the specified storage level. For details of the -#' supported storage levels, refer to -#' http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. -#' -#' @param x The RDD to persist -#' @param newLevel The new storage level to be assigned -#' @rdname persist -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' persist(rdd, "MEMORY_AND_DISK") -#'} -setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) - #' @rdname persist #' @aliases persist,RDD-method setMethod("persist", @@ -240,23 +205,6 @@ setMethod("persist", x }) -#' Unpersist an RDD -#' -#' Mark the RDD as non-persistent, and remove all blocks for it from memory and -#' disk. -#' -#' @param rdd The RDD to unpersist -#' @rdname unpersist-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' cache(rdd) # rdd@@env$isCached == TRUE -#' unpersist(rdd) # rdd@@env$isCached == FALSE -#'} -setGeneric("unpersist", function(x) { standardGeneric("unpersist") }) - #' @rdname unpersist-methods #' @aliases unpersist,RDD-method setMethod("unpersist", @@ -267,27 +215,6 @@ setMethod("unpersist", x }) - -#' Checkpoint an RDD -#' -#' Mark this RDD for checkpointing. It will be saved to a file inside the -#' checkpoint directory set with setCheckpointDir() and all references to its -#' parent RDDs will be removed. This function must be called before any job has -#' been executed on this RDD. It is strongly recommended that this RDD is -#' persisted in memory, otherwise saving it on a file will require recomputation. -#' -#' @param rdd The RDD to checkpoint -#' @rdname checkpoint-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' setCheckpointDir(sc, "checkpoints") -#' rdd <- parallelize(sc, 1:10, 2L) -#' checkpoint(rdd) -#'} -setGeneric("checkpoint", function(x) { standardGeneric("checkpoint") }) - #' @rdname checkpoint-methods #' @aliases checkpoint,RDD-method setMethod("checkpoint", @@ -299,20 +226,6 @@ setMethod("checkpoint", x }) -#' Gets the number of partitions of an RDD -#' -#' @param x A RDD. -#' @return the number of partitions of rdd as an integer. -#' @rdname numPartitions -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' numPartitions(rdd) # 2L -#'} -setGeneric("numPartitions", function(x) { standardGeneric("numPartitions") }) - #' @rdname numPartitions #' @aliases numPartitions,RDD-method setMethod("numPartitions", @@ -323,26 +236,6 @@ setMethod("numPartitions", callJMethod(partitions, "size") }) -#' Collect elements of an RDD -#' -#' @description -#' \code{collect} returns a list that contains all of the elements in this RDD. -#' -#' @param x The RDD to collect -#' @param ... Other optional arguments to collect -#' @param flatten FALSE if the list should not flattened -#' @return a list containing elements in the RDD -#' @rdname collect-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' collect(rdd) # list from 1 to 10 -#' collectPartition(rdd, 0L) # list from 1 to 5 -#'} -setGeneric("collect", function(x, ...) { standardGeneric("collect") }) - #' @rdname collect-methods #' @aliases collect,RDD-method setMethod("collect", @@ -353,18 +246,6 @@ setMethod("collect", convertJListToRList(collected, flatten) }) - -#' @rdname collect-methods -#' @export -#' @description -#' \code{collectPartition} returns a list that contains all of the elements -#' in the specified partition of the RDD. -#' @param partitionId the partition to collect (starts from 0) -setGeneric("collectPartition", - function(x, partitionId) { - standardGeneric("collectPartition") - }) - #' @rdname collect-methods #' @aliases collectPartition,integer,RDD-method setMethod("collectPartition", @@ -378,19 +259,6 @@ setMethod("collectPartition", convertJListToRList(jList, flatten = TRUE) }) -#' @rdname collect-methods -#' @export -#' @description -#' \code{collectAsMap} returns a named list as a map that contains all of the elements -#' in a key-value pair RDD. -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) -#' collectAsMap(rdd) # list(`1` = 2, `3` = 4) -#'} -setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) - #' @rdname collect-methods #' @aliases collectAsMap,RDD-method setMethod("collectAsMap", @@ -402,21 +270,6 @@ setMethod("collectAsMap", as.list(map) }) -#' Return the number of elements in the RDD. -#' -#' @param x The RDD to count -#' @return number of elements in the RDD. -#' @rdname count -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' count(rdd) # 10 -#' length(rdd) # Same as count -#'} -setGeneric("count", function(x) { standardGeneric("count") }) - #' @rdname count #' @aliases count,RDD-method setMethod("count", @@ -439,24 +292,6 @@ setMethod("length", count(x) }) -#' Return the count of each unique value in this RDD as a list of -#' (value, count) pairs. -#' -#' Same as countByValue in Spark. -#' -#' @param x The RDD to count -#' @return list of (value, count) pairs, where count is number of each unique -#' value in rdd. -#' @rdname countByValue -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, c(1,2,3,2,1)) -#' countByValue(rdd) # (1,2L), (2,2L), (3,1L) -#'} -setGeneric("countByValue", function(x) { standardGeneric("countByValue") }) - #' @rdname countByValue #' @aliases countByValue,RDD-method setMethod("countByValue", @@ -493,11 +328,6 @@ setMethod("lapply", lapplyPartitionsWithIndex(X, func) }) -#' @rdname lapply -#' @export -setGeneric("map", function(X, FUN) { - standardGeneric("map") }) - #' @rdname lapply #' @aliases map,RDD,function-method setMethod("map", @@ -506,26 +336,6 @@ setMethod("map", lapply(X, FUN) }) -#' Flatten results after apply a function to all elements -#' -#' This function return a new RDD by first applying a function to all -#' elements of this RDD, and then flattening the results. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on each element -#' @return a new RDD created by the transformation. -#' @rdname flatMap -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) -#' collect(multiplyByTwo) # 2,20,4,40,6,60... -#'} -setGeneric("flatMap", function(X, FUN) { - standardGeneric("flatMap") }) - #' @rdname flatMap #' @aliases flatMap,RDD,function-method setMethod("flatMap", @@ -540,25 +350,6 @@ setMethod("flatMap", lapplyPartition(X, partitionFunc) }) -#' Apply a function to each partition of an RDD -#' -#' Return a new RDD by applying a function to each partition of this RDD. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on each partition. -#' @return a new RDD created by the transformation. -#' @rdname lapplyPartition -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' partitionSum <- lapplyPartition(rdd, function(part) { Reduce("+", part) }) -#' collect(partitionSum) # 15, 40 -#'} -setGeneric("lapplyPartition", function(X, FUN) { - standardGeneric("lapplyPartition") }) - #' @rdname lapplyPartition #' @aliases lapplyPartition,RDD,function-method setMethod("lapplyPartition", @@ -567,13 +358,6 @@ setMethod("lapplyPartition", lapplyPartitionsWithIndex(X, function(s, part) { FUN(part) }) }) -#' mapPartitions is the same as lapplyPartition. -#' -#' @rdname lapplyPartition -#' @export -setGeneric("mapPartitions", function(X, FUN) { - standardGeneric("mapPartitions") }) - #' @rdname lapplyPartition #' @aliases mapPartitions,RDD,function-method setMethod("mapPartitions", @@ -582,26 +366,6 @@ setMethod("mapPartitions", lapplyPartition(X, FUN) }) -#' Return a new RDD by applying a function to each partition of this RDD, while -#' tracking the index of the original partition. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on each partition; takes the partition -#' index and a list of elements in the particular partition. -#' @return a new RDD created by the transformation. -#' @rdname lapplyPartitionsWithIndex -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 5L) -#' prod <- lapplyPartitionsWithIndex(rdd, function(split, part) { -#' split * Reduce("+", part) }) -#' collect(prod, flatten = FALSE) # 0, 7, 22, 45, 76 -#'} -setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { - standardGeneric("lapplyPartitionsWithIndex") }) - #' @rdname lapplyPartitionsWithIndex #' @aliases lapplyPartitionsWithIndex,RDD,function-method setMethod("lapplyPartitionsWithIndex", @@ -614,12 +378,6 @@ setMethod("lapplyPartitionsWithIndex", PipelinedRDD(X, closureCapturingFunc) }) - -#' @rdname lapplyPartitionsWithIndex -#' @export -setGeneric("mapPartitionsWithIndex", function(X, FUN) { - standardGeneric("mapPartitionsWithIndex") }) - #' @rdname lapplyPartitionsWithIndex #' @aliases mapPartitionsWithIndex,RDD,function-method setMethod("mapPartitionsWithIndex", @@ -628,23 +386,6 @@ setMethod("mapPartitionsWithIndex", lapplyPartitionsWithIndex(X, FUN) }) -#' This function returns a new RDD containing only the elements that satisfy -#' a predicate (i.e. returning TRUE in a given logical function). -#' The same as `filter()' in Spark. -#' -#' @param x The RDD to be filtered. -#' @param f A unary predicate function. -#' @rdname filterRDD -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) -#'} -setGeneric("filterRDD", - function(x, f) { standardGeneric("filterRDD") }) - #' @rdname filterRDD #' @aliases filterRDD,RDD,function-method setMethod("filterRDD", @@ -665,24 +406,6 @@ setMethod("Filter", filterRDD(x, f) }) -#' Reduce across elements of an RDD. -#' -#' This function reduces the elements of this RDD using the -#' specified commutative and associative binary operator. -#' -#' @param rdd The RDD to reduce -#' @param func Commutative and associative function to apply on elements -#' of the RDD. -#' @export -#' @rdname reduce -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' reduce(rdd, "+") # 55 -#'} -setGeneric("reduce", function(x, func) { standardGeneric("reduce") }) - #' @rdname reduce #' @aliases reduce,RDD,ANY-method setMethod("reduce", @@ -698,19 +421,6 @@ setMethod("reduce", Reduce(func, partitionList) }) -#' Get the maximum element of an RDD. -#' -#' @param x The RDD to get the maximum element from -#' @export -#' @rdname maximum -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' maximum(rdd) # 10 -#'} -setGeneric("maximum", function(x) { standardGeneric("maximum") }) - #' @rdname maximum #' @aliases maximum,RDD setMethod("maximum", @@ -719,19 +429,6 @@ setMethod("maximum", reduce(x, max) }) -#' Get the minimum element of an RDD. -#' -#' @param x The RDD to get the minimum element from -#' @export -#' @rdname minimum -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' minimum(rdd) # 1 -#'} -setGeneric("minimum", function(x) { standardGeneric("minimum") }) - #' @rdname minimum #' @aliases minimum,RDD setMethod("minimum", @@ -740,21 +437,6 @@ setMethod("minimum", reduce(x, min) }) -#' Applies a function to all elements in an RDD, and force evaluation. -#' -#' @param x The RDD to apply the function -#' @param func The function to be applied. -#' @return invisible NULL. -#' @export -#' @rdname foreach -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' foreach(rdd, function(x) { save(x, file=...) }) -#'} -setGeneric("foreach", function(x, func) { standardGeneric("foreach") }) - #' @rdname foreach #' @aliases foreach,RDD,function-method setMethod("foreach", @@ -767,19 +449,6 @@ setMethod("foreach", invisible(collect(mapPartitions(x, partition.func))) }) -#' Applies a function to each partition in an RDD, and force evaluation. -#' -#' @export -#' @rdname foreach -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' foreachPartition(rdd, function(part) { save(part, file=...); NULL }) -#'} -setGeneric("foreachPartition", - function(x, func) { standardGeneric("foreachPartition") }) - #' @rdname foreach #' @aliases foreachPartition,RDD,function-method setMethod("foreachPartition", @@ -788,23 +457,6 @@ setMethod("foreachPartition", invisible(collect(mapPartitions(x, func))) }) -#' Take elements from an RDD. -#' -#' This function takes the first NUM elements in the RDD and -#' returns them in a list. -#' -#' @param x The RDD to take elements from -#' @param num Number of elements to take -#' @rdname take -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' take(rdd, 2L) # list(1, 2) -#'} -setGeneric("take", function(x, num) { standardGeneric("take") }) - #' @rdname take #' @aliases take,RDD,numeric-method setMethod("take", @@ -839,24 +491,6 @@ setMethod("take", resList }) -#' Removes the duplicates from RDD. -#' -#' This function returns a new RDD containing the distinct elements in the -#' given RDD. The same as `distinct()' in Spark. -#' -#' @param x The RDD to remove duplicates from. -#' @param numPartitions Number of partitions to create. -#' @rdname distinct -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, c(1,2,2,3,3,3)) -#' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) -#'} -setGeneric("distinct", - function(x, numPartitions) { standardGeneric("distinct") }) - setClassUnion("missingOrInteger", c("missing", "integer")) #' @rdname distinct #' @aliases distinct,RDD,missingOrInteger-method @@ -874,29 +508,6 @@ setMethod("distinct", resRDD }) -#' Return an RDD that is a sampled subset of the given RDD. -#' -#' The same as `sample()' in Spark. (We rename it due to signature -#' inconsistencies with the `sample()' function in R's base package.) -#' -#' @param x The RDD to sample elements from -#' @param withReplacement Sampling with replacement or not -#' @param fraction The (rough) sample target fraction -#' @param seed Randomness seed value -#' @rdname sampleRDD -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) # ensure each num is in its own split -#' collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) # ~5 distinct elements -#' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates -#'} -setGeneric("sampleRDD", - function(x, withReplacement, fraction, seed) { - standardGeneric("sampleRDD") - }) - #' @rdname sampleRDD #' @aliases sampleRDD,RDD setMethod("sampleRDD", @@ -942,28 +553,6 @@ setMethod("sampleRDD", lapplyPartitionsWithIndex(x, samplingFunc) }) - -#' Return a list of the elements that are a sampled subset of the given RDD. -#' -#' @param x The RDD to sample elements from -#' @param withReplacement Sampling with replacement or not -#' @param num Number of elements to return -#' @param seed Randomness seed value -#' @rdname takeSample -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:100) -#' # exactly 5 elements sampled, which may not be distinct -#' takeSample(rdd, TRUE, 5L, 1618L) -#' # exactly 5 distinct elements sampled -#' takeSample(rdd, FALSE, 5L, 16181618L) -#'} -setGeneric("takeSample", - function(x, withReplacement, num, seed) { - standardGeneric("takeSample") - }) #' @rdname takeSample #' @aliases takeSample,RDD setMethod("takeSample", signature(x = "RDD", withReplacement = "logical", @@ -1012,20 +601,6 @@ setMethod("takeSample", signature(x = "RDD", withReplacement = "logical", sample(samples)[1:total] }) -#' Creates tuples of the elements in this RDD by applying a function. -#' -#' @param x The RDD. -#' @param func The function to be applied. -#' @rdname keyBy -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3)) -#' collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) -#'} -setGeneric("keyBy", function(x, func) { standardGeneric("keyBy") }) - #' @rdname keyBy #' @aliases keyBy,RDD setMethod("keyBy", @@ -1037,26 +612,6 @@ setMethod("keyBy", lapply(x, apply.func) }) -#' Return a new RDD that has exactly numPartitions partitions. -#' Can increase or decrease the level of parallelism in this RDD. Internally, -#' this uses a shuffle to redistribute data. -#' If you are decreasing the number of partitions in this RDD, consider using -#' coalesce, which can avoid performing a shuffle. -#' -#' @param x The RDD. -#' @param numPartitions Number of partitions to create. -#' @rdname repartition -#' @seealso coalesce -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5, 6, 7), 4L) -#' numPartitions(rdd) # 4 -#' numPartitions(repartition(rdd, 2L)) # 2 -#'} -setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartition") }) - #' @rdname repartition #' @aliases repartition,RDD setMethod("repartition", @@ -1065,22 +620,6 @@ setMethod("repartition", coalesce(x, numPartitions, TRUE) }) -#' Return a new RDD that is reduced into numPartitions partitions. -#' -#' @param x The RDD. -#' @param numPartitions Number of partitions to create. -#' @rdname coalesce -#' @seealso repartition -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5), 3L) -#' numPartitions(rdd) # 3 -#' numPartitions(coalesce(rdd, 1L)) # 1 -#'} -setGeneric("coalesce", function(x, numPartitions, ...) { standardGeneric("coalesce") }) - #' @rdname coalesce #' @aliases coalesce,RDD setMethod("coalesce", @@ -1109,21 +648,6 @@ setMethod("coalesce", } }) -#' Save this RDD as a SequenceFile of serialized objects. -#' -#' @param x The RDD to save -#' @param path The directory where the file is saved -#' @rdname saveAsObjectFile -#' @seealso objectFile -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:3) -#' saveAsObjectFile(rdd, "/tmp/sparkR-tmp") -#'} -setGeneric("saveAsObjectFile", function(x, path) { standardGeneric("saveAsObjectFile") }) - #' @rdname saveAsObjectFile #' @aliases saveAsObjectFile,RDD setMethod("saveAsObjectFile", @@ -1138,20 +662,6 @@ setMethod("saveAsObjectFile", invisible(callJMethod(getJRDD(x), "saveAsObjectFile", path)) }) -#' Save this RDD as a text file, using string representations of elements. -#' -#' @param x The RDD to save -#' @param path The directory where the splits of the text file are saved -#' @rdname saveAsTextFile -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:3) -#' saveAsTextFile(rdd, "/tmp/sparkR-tmp") -#'} -setGeneric("saveAsTextFile", function(x, path) { standardGeneric("saveAsTextFile") }) - #' @rdname saveAsTextFile #' @aliases saveAsTextFile,RDD setMethod("saveAsTextFile", @@ -1166,28 +676,6 @@ setMethod("saveAsTextFile", callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path)) }) -#' Sort an RDD by the given key function. -#' -#' @param x An RDD to be sorted. -#' @param func A function used to compute the sort key for each element. -#' @param ascending A flag to indicate whether the sorting is ascending or descending. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where all elements are sorted. -#' @rdname sortBy -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(3, 2, 1)) -#' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) -#'} -setGeneric("sortBy", function(x, - func, - ascending = TRUE, - numPartitions = 1L) { - standardGeneric("sortBy") - }) - #' @rdname sortBy #' @aliases sortBy,RDD,RDD-method setMethod("sortBy", @@ -1230,21 +718,6 @@ takeOrderedElem <- function(x, num, ascending = TRUE) { reduce(newRdd, reduceFunc) } -#' Returns the first N elements from an RDD in ascending order. -#' -#' @param x An RDD. -#' @param num Number of elements to return. -#' @return The first N elements from the RDD in ascending order. -#' @rdname takeOrdered -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) -#' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) -#'} -setGeneric("takeOrdered", function(x, num) { standardGeneric("takeOrdered") }) - #' @rdname takeOrdered #' @aliases takeOrdered,RDD,RDD-method setMethod("takeOrdered", @@ -1253,21 +726,6 @@ setMethod("takeOrdered", takeOrderedElem(x, num) }) -#' Returns the top N elements from an RDD. -#' -#' @param x An RDD. -#' @param num Number of elements to return. -#' @return The top N elements from the RDD. -#' @rdname top -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) -#' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) -#'} -setGeneric("top", function(x, num) { standardGeneric("top") }) - #' @rdname top #' @aliases top,RDD,RDD-method setMethod("top", @@ -1276,26 +734,6 @@ setMethod("top", takeOrderedElem(x, num, FALSE) }) -#' Fold an RDD using a given associative function and a neutral "zero value". -#' -#' Aggregate the elements of each partition, and then the results for all the -#' partitions, using a given associative function and a neutral "zero value". -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param op An associative function for the folding operation. -#' @return The folding result. -#' @rdname fold -#' @seealso reduce -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) -#' fold(rdd, 0, "+") # 15 -#'} -setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) - #' @rdname fold #' @aliases fold,RDD,RDD-method setMethod("fold", @@ -1304,31 +742,6 @@ setMethod("fold", aggregateRDD(x, zeroValue, op, op) }) -#' Aggregate an RDD using the given combine functions and a neutral "zero value". -#' -#' Aggregate the elements of each partition, and then the results for all the -#' partitions, using given combine functions and a neutral "zero value". -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param seqOp A function to aggregate the RDD elements. It may return a different -#' result type from the type of the RDD elements. -#' @param combOp A function to aggregate results of seqOp. -#' @return The aggregation result. -#' @rdname aggregateRDD -#' @seealso reduce -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4)) -#' zeroValue <- list(0, 0) -#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } -#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } -#' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) -#'} -setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) - #' @rdname aggregateRDD #' @aliases aggregateRDD,RDD,RDD-method setMethod("aggregateRDD", @@ -1343,27 +756,6 @@ setMethod("aggregateRDD", Reduce(combOp, partitionList, zeroValue) }) -#' Pipes elements to a forked external process. -#' -#' The same as 'pipe()' in Spark. -#' -#' @param x The RDD whose elements are piped to the forked external process. -#' @param command The command to fork an external process. -#' @param env A named list to set environment variables of the external process. -#' @return A new RDD created by piping all elements to a forked external process. -#' @rdname pipeRDD -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' collect(pipeRDD(rdd, "more") -#' Output: c("1", "2", ..., "10") -#'} -setGeneric("pipeRDD", function(x, command, env = list()) { - standardGeneric("pipeRDD") -}) - #' @rdname pipeRDD #' @aliases pipeRDD,RDD,character-method setMethod("pipeRDD", @@ -1380,20 +772,6 @@ setMethod("pipeRDD", lapplyPartition(x, func) }) -# TODO: Consider caching the name in the RDD's environment -#' Return an RDD's name. -#' -#' @param x The RDD whose name is returned. -#' @rdname name -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' name(rdd) # NULL (if not set before) -#'} -setGeneric("name", function(x) { standardGeneric("name") }) - #' @rdname name #' @aliases name,RDD setMethod("name", @@ -1402,22 +780,6 @@ setMethod("name", callJMethod(getJRDD(x), "name") }) -#' Set an RDD's name. -#' -#' @param x The RDD whose name is to be set. -#' @param name The RDD name to be set. -#' @return a new RDD renamed. -#' @rdname setName -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' setName(rdd, "myRDD") -#' name(rdd) # "myRDD" -#'} -setGeneric("setName", function(x, name) { standardGeneric("setName") }) - #' @rdname setName #' @aliases setName,RDD setMethod("setName", @@ -1427,27 +789,6 @@ setMethod("setName", x }) -#' Zip an RDD with generated unique Long IDs. -#' -#' Items in the kth partition will get ids k, n+k, 2*n+k, ..., where -#' n is the number of partitions. So there may exist gaps, but this -#' method won't trigger a spark job, which is different from -#' zipWithIndex. -#' -#' @param x An RDD to be zipped. -#' @return An RDD with zipped items. -#' @rdname zipWithUniqueId -#' @seealso zipWithIndex -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) -#' collect(zipWithUniqueId(rdd)) -#' # list(list("a", 0), list("b", 3), list("c", 1), list("d", 4), list("e", 2)) -#'} -setGeneric("zipWithUniqueId", function(x) { standardGeneric("zipWithUniqueId") }) - #' @rdname zipWithUniqueId #' @aliases zipWithUniqueId,RDD setMethod("zipWithUniqueId", @@ -1468,30 +809,6 @@ setMethod("zipWithUniqueId", lapplyPartitionsWithIndex(x, partitionFunc) }) -#' Zip an RDD with its element indices. -#' -#' The ordering is first based on the partition index and then the -#' ordering of items within each partition. So the first item in -#' the first partition gets index 0, and the last item in the last -#' partition receives the largest index. -#' -#' This method needs to trigger a Spark job when this RDD contains -#' more than one partition. -#' -#' @param x An RDD to be zipped. -#' @return An RDD with zipped items. -#' @rdname zipWithIndex -#' @seealso zipWithUniqueId -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) -#' collect(zipWithIndex(rdd)) -#' # list(list("a", 0), list("b", 1), list("c", 2), list("d", 3), list("e", 4)) -#'} -setGeneric("zipWithIndex", function(x) { standardGeneric("zipWithIndex") }) - #' @rdname zipWithIndex #' @aliases zipWithIndex,RDD setMethod("zipWithIndex", @@ -1528,22 +845,6 @@ setMethod("zipWithIndex", ############ Binary Functions ############# -#' Return the union RDD of two RDDs. -#' The same as union() in Spark. -#' -#' @param x An RDD. -#' @param y An RDD. -#' @return a new RDD created by performing the simple union (witout removing -#' duplicates) of two input RDDs. -#' @rdname unionRDD -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:3) -#' unionRDD(rdd, rdd) # 1, 2, 3, 1, 2, 3 -#'} -setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) #' @rdname unionRDD #' @aliases unionRDD,RDD,RDD-method diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index 2cd5d83cf383b..665270385b583 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -2,24 +2,6 @@ ############ Actions and Transformations ############ -#' Look up elements of a key in an RDD -#' -#' @description -#' \code{lookup} returns a list of values in this RDD for key key. -#' -#' @param x The RDD to collect -#' @param key The key to look up for -#' @return a list of values in this RDD for key key -#' @rdname lookup -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) -#' rdd <- parallelize(sc, pairs) -#' lookup(rdd, 1) # list(1, 3) -#'} -setGeneric("lookup", function(x, key) { standardGeneric("lookup") }) #' @rdname lookup #' @aliases lookup,RDD-method @@ -34,23 +16,6 @@ setMethod("lookup", collect(valsRDD) }) -#' Count the number of elements for each key, and return the result to the -#' master as lists of (key, count) pairs. -#' -#' Same as countByKey in Spark. -#' -#' @param x The RDD to count keys. -#' @return list of (key, count) pairs, where count is number of each key in rdd. -#' @rdname countByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) -#' countByKey(rdd) # ("a", 2L), ("b", 1L) -#'} -setGeneric("countByKey", function(x) { standardGeneric("countByKey") }) - #' @rdname countByKey #' @aliases countByKey,RDD-method setMethod("countByKey", @@ -60,19 +25,6 @@ setMethod("countByKey", countByValue(keys) }) -#' Return an RDD with the keys of each tuple. -#' -#' @param x The RDD from which the keys of each tuple is returned. -#' @rdname keys -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -#' collect(keys(rdd)) # list(1, 3) -#'} -setGeneric("keys", function(x) { standardGeneric("keys") }) - #' @rdname keys #' @aliases keys,RDD setMethod("keys", @@ -84,19 +36,6 @@ setMethod("keys", lapply(x, func) }) -#' Return an RDD with the values of each tuple. -#' -#' @param x The RDD from which the values of each tuple is returned. -#' @rdname values -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -#' collect(values(rdd)) # list(2, 4) -#'} -setGeneric("values", function(x) { standardGeneric("values") }) - #' @rdname values #' @aliases values,RDD setMethod("values", @@ -108,25 +47,6 @@ setMethod("values", lapply(x, func) }) -#' Applies a function to all values of the elements, without modifying the keys. -#' -#' The same as `mapValues()' in Spark. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on the value of each element. -#' @return a new RDD created by the transformation. -#' @rdname mapValues -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' makePairs <- lapply(rdd, function(x) { list(x, x) }) -#' collect(mapValues(makePairs, function(x) { x * 2) }) -#' Output: list(list(1,2), list(2,4), list(3,6), ...) -#'} -setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) - #' @rdname mapValues #' @aliases mapValues,RDD,function-method setMethod("mapValues", @@ -138,25 +58,6 @@ setMethod("mapValues", lapply(X, func) }) -#' Pass each value in the key-value pair RDD through a flatMap function without -#' changing the keys; this also retains the original RDD's partitioning. -#' -#' The same as 'flatMapValues()' in Spark. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on the value of each element. -#' @return a new RDD created by the transformation. -#' @rdname flatMapValues -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) -#' collect(flatMapValues(rdd, function(x) { x })) -#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) -#'} -setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) - #' @rdname flatMapValues #' @aliases flatMapValues,RDD,function-method setMethod("flatMapValues", @@ -170,34 +71,6 @@ setMethod("flatMapValues", ############ Shuffle Functions ############ -#' Partition an RDD by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' For each element of this RDD, the partitioner is used to compute a hash -#' function and the RDD is partitioned using this hash value. -#' -#' @param x The RDD to partition. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @param ... Other optional arguments to partitionBy. -#' -#' @param partitionFunc The partition function to use. Uses a default hashCode -#' function if not provided -#' @return An RDD partitioned using the specified partitioner. -#' @rdname partitionBy -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- partitionBy(rdd, 2L) -#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) -#'} -setGeneric("partitionBy", - function(x, numPartitions, ...) { - standardGeneric("partitionBy") - }) #' @rdname partitionBy #' @aliases partitionBy,RDD,integer-method @@ -246,32 +119,6 @@ setMethod("partitionBy", RDD(r, serialized = TRUE) }) -#' Group values by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and group values for each key in the RDD into a single sequence. -#' -#' @param x The RDD to group. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, list(V)) -#' @seealso reduceByKey -#' @rdname groupByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- groupByKey(rdd, 2L) -#' grouped <- collect(parts) -#' grouped[[1]] # Should be a list(1, list(2, 4)) -#'} -setGeneric("groupByKey", - function(x, numPartitions) { - standardGeneric("groupByKey") - }) - #' @rdname groupByKey #' @aliases groupByKey,RDD,integer-method setMethod("groupByKey", @@ -311,34 +158,6 @@ setMethod("groupByKey", lapplyPartition(shuffled, groupVals) }) -#' Merge values by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and merges the values for each key using an associative reduce function. -#' -#' @param x The RDD to reduce by key. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param combineFunc The associative reduce function to use. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, V') where V' is the merged -#' value -#' @rdname reduceByKey -#' @seealso groupByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- reduceByKey(rdd, "+", 2L) -#' reduced <- collect(parts) -#' reduced[[1]] # Should be a list(1, 6) -#'} -setGeneric("reduceByKey", - function(x, combineFunc, numPartitions) { - standardGeneric("reduceByKey") - }) - #' @rdname reduceByKey #' @aliases reduceByKey,RDD,integer-method setMethod("reduceByKey", @@ -360,32 +179,6 @@ setMethod("reduceByKey", lapplyPartition(shuffled, reduceVals) }) -#' Merge values by key locally -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and merges the values for each key using an associative reduce function, but return the -#' results immediately to the driver as an R list. -#' -#' @param x The RDD to reduce by key. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param combineFunc The associative reduce function to use. -#' @return A list of elements of type list(K, V') where V' is the merged value for each key -#' @rdname reduceByKeyLocally -#' @seealso reduceByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' reduced <- reduceByKeyLocally(rdd, "+") -#' reduced # list(list(1, 6), list(1.1, 3)) -#'} -setGeneric("reduceByKeyLocally", - function(x, combineFunc) { - standardGeneric("reduceByKeyLocally") - }) - #' @rdname reduceByKeyLocally #' @aliases reduceByKeyLocally,RDD,integer-method setMethod("reduceByKeyLocally", @@ -419,46 +212,6 @@ setMethod("reduceByKeyLocally", convertEnvsToList(merged[[1]], merged[[2]]) }) -#' Combine values by key -#' -#' Generic function to combine the elements for each key using a custom set of -#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], -#' for a "combined type" C. Note that V and C can be different -- for example, one -#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). - -#' Users provide three functions: -#' \itemize{ -#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) -#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - -#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates -#' two lists). -#' } -#' -#' @param x The RDD to combine. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param createCombiner Create a combiner (C) given a value (V) -#' @param mergeValue Merge the given value (V) with an existing combiner (C) -#' @param mergeCombiners Merge two combiners and return a new combiner -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, C) where C is the combined type -#' -#' @rdname combineByKey -#' @seealso groupByKey, reduceByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) -#' combined <- collect(parts) -#' combined[[1]] # Should be a list(1, 6) -#'} -setGeneric("combineByKey", - function(x, createCombiner, mergeValue, mergeCombiners, numPartitions) { - standardGeneric("combineByKey") - }) - #' @rdname combineByKey #' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method setMethod("combineByKey", @@ -492,41 +245,6 @@ setMethod("combineByKey", lapplyPartition(shuffled, mergeAfterShuffle) }) -#' Aggregate a pair RDD by each key. -#' -#' Aggregate the values of each key in an RDD, using given combine functions -#' and a neutral "zero value". This function can return a different result type, -#' U, than the type of the values in this RDD, V. Thus, we need one operation -#' for merging a V into a U and one operation for merging two U's, The former -#' operation is used for merging values within a partition, and the latter is -#' used for merging values between partitions. To avoid memory allocation, both -#' of these functions are allowed to modify and return their first argument -#' instead of creating a new U. -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param seqOp A function to aggregate the values of each key. It may return -#' a different result type from the type of the values. -#' @param combOp A function to aggregate results of seqOp. -#' @return An RDD containing the aggregation result. -#' @rdname aggregateByKey -#' @seealso foldByKey, combineByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) -#' zeroValue <- list(0, 0) -#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } -#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } -#' aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) -#' # list(list(1, list(3, 2)), list(2, list(7, 2))) -#'} -setGeneric("aggregateByKey", - function(x, zeroValue, seqOp, combOp, numPartitions) { - standardGeneric("aggregateByKey") - }) - #' @rdname aggregateByKey #' @aliases aggregateByKey,RDD,ANY,ANY,ANY,integer-method setMethod("aggregateByKey", @@ -540,31 +258,6 @@ setMethod("aggregateByKey", combineByKey(x, createCombiner, seqOp, combOp, numPartitions) }) -#' Fold a pair RDD by each key. -#' -#' Aggregate the values of each key in an RDD, using an associative function "func" -#' and a neutral "zero value" which may be added to the result an arbitrary -#' number of times, and must not change the result (e.g., 0 for addition, or -#' 1 for multiplication.). -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param func An associative function for folding values of each key. -#' @return An RDD containing the aggregation result. -#' @rdname foldByKey -#' @seealso aggregateByKey, combineByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) -#' foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) -#'} -setGeneric("foldByKey", - function(x, zeroValue, func, numPartitions) { - standardGeneric("foldByKey") - }) - #' @rdname foldByKey #' @aliases foldByKey,RDD,ANY,ANY,integer-method setMethod("foldByKey", @@ -576,29 +269,6 @@ setMethod("foldByKey", ############ Binary Functions ############# -#' Join two RDDs -#' -#' @description -#' \code{join} This function joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param x An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param y An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return a new RDD containing all pairs of elements with matching keys in -#' two input RDDs. -#' @rdname join-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) -#'} -setGeneric("join", function(x, y, numPartitions) { standardGeneric("join") }) #' @rdname join-methods #' @aliases join,RDD,RDD-method @@ -615,32 +285,6 @@ setMethod("join", joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) -#' Left outer join two RDDs -#' -#' @description -#' \code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param x An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param y An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in x, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) -#' if no elements in rdd2 have key k. -#' @rdname join-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' leftOuterJoin(rdd1, rdd2, 2L) -#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) -#'} -setGeneric("leftOuterJoin", function(x, y, numPartitions) { standardGeneric("leftOuterJoin") }) - #' @rdname join-methods #' @aliases leftOuterJoin,RDD,RDD-method setMethod("leftOuterJoin", @@ -656,32 +300,6 @@ setMethod("leftOuterJoin", joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) -#' Right outer join two RDDs -#' -#' @description -#' \code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param x An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param y An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, w) in y, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, v) in x, or the pair (k, (NULL, w)) -#' if no elements in x have key k. -#' @rdname join-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rightOuterJoin(rdd1, rdd2, 2L) -#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) -#'} -setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) - #' @rdname join-methods #' @aliases rightOuterJoin,RDD,RDD-method setMethod("rightOuterJoin", @@ -697,35 +315,6 @@ setMethod("rightOuterJoin", joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) -#' Full outer join two RDDs -#' -#' @description -#' \code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param x An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param y An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in x and (k, w) in y, the resulting RDD -#' will contain all pairs (k, (v, w)) for both (k, v) in x and -#' (k, w) in y, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements -#' in x/y have key k. -#' @rdname join-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) -#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), -#' # list(1, list(3, 1)), -#' # list(2, list(NULL, 4))) -#' # list(3, list(3, NULL)), -#'} -setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) - #' @rdname join-methods #' @aliases fullOuterJoin,RDD,RDD-method @@ -742,27 +331,6 @@ setMethod("fullOuterJoin", joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) -#' For each key k in several RDDs, return a resulting RDD that -#' whose values are a list of values for the key in all RDDs. -#' -#' @param ... Several RDDs. -#' @param numPartitions Number of partitions to create. -#' @return a new RDD containing all pairs of elements with values in a list -#' in all RDDs. -#' @rdname cogroup -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' cogroup(rdd1, rdd2, numPartitions = 2L) -#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) -#'} -setGeneric("cogroup", - function(..., numPartitions) { standardGeneric("cogroup") }, - signature = "...") - #' @rdname cogroup #' @aliases cogroup,RDD-method setMethod("cogroup", @@ -804,26 +372,6 @@ setMethod("cogroup", group.func) }) -#' Sort a (k, v) pair RDD by k. -#' -#' @param x A (k, v) pair RDD to be sorted. -#' @param ascending A flag to indicate whether the sorting is ascending or descending. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where all (k, v) pair elements are sorted. -#' @rdname sortByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) -#' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) -#'} -setGeneric("sortByKey", function(x, - ascending = TRUE, - numPartitions = 1L) { - standardGeneric("sortByKey") - }) - #' @rdname sortByKey #' @aliases sortByKey,RDD,RDD-method setMethod("sortByKey", From 471c794fdcbf4a3b873d087a169cf91e67f4443a Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 9 Mar 2015 10:16:21 -0400 Subject: [PATCH 598/687] Move getJRDD and broadcast's value to 00-generic.R. --- pkg/R/00-generics.R | 15 +++++++++++++++ pkg/R/RDD.R | 1 - pkg/R/broadcast.R | 9 --------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/pkg/R/00-generics.R b/pkg/R/00-generics.R index 90d0d35a2b653..6d111f592b2f0 100644 --- a/pkg/R/00-generics.R +++ b/pkg/R/00-generics.R @@ -1,5 +1,8 @@ ############ RDD Actions and Transformations ############ +# The jrdd accessor function. +setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) + #' Persist an RDD #' #' Persist this RDD with the default storage level (MEMORY_ONLY). @@ -1158,3 +1161,15 @@ setGeneric("sortByKey", function(x, standardGeneric("sortByKey") }) + +############ Broadcast Variable Methods ############ + +#' @description +#' \code{value} can be used to get the value of a broadcast variable inside +#' a distributed function. +#' +#' @param bcast The broadcast variable to get +#' @rdname broadcast +#' @export +setGeneric("value", function(bcast) { standardGeneric("value") }) + diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 34eb4ebd8e80a..9377feb1533d1 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -97,7 +97,6 @@ PipelinedRDD <- function(prev, func) { # The jrdd accessor function. -setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) setMethod("getJRDD", signature(rdd = "RDD"), function(rdd) rdd@jrdd ) setMethod("getJRDD", signature(rdd = "PipelinedRDD"), function(rdd, dataSerialization = TRUE) { diff --git a/pkg/R/broadcast.R b/pkg/R/broadcast.R index 45881599f4f18..7f9e1c179ac11 100644 --- a/pkg/R/broadcast.R +++ b/pkg/R/broadcast.R @@ -28,15 +28,6 @@ Broadcast <- function(id, value, jBroadcastRef, objName) { new("Broadcast", id = id) } -#' @description -#' \code{value} can be used to get the value of a broadcast variable inside -#' a distributed function. -#' -#' @param bcast The broadcast variable to get -#' @rdname broadcast -#' @export -setGeneric("value", function(bcast) { standardGeneric("value") }) - #' @rdname broadcast #' @aliases value,Broadcast-method setMethod("value", From 6bccbbfc1b72b0eb62ec1eda7e17505ca44185b7 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 9 Mar 2015 16:09:48 -0400 Subject: [PATCH 599/687] Move roxygen doc back to implementation. --- pkg/DESCRIPTION | 14 + pkg/R/00-generics.R | 1175 ------------------------------------------- pkg/R/RDD.R | 545 +++++++++++++++++++- pkg/R/broadcast.R | 6 + pkg/R/generics.R | 331 ++++++++++++ pkg/R/pairRDD.R | 372 +++++++++++++- 6 files changed, 1266 insertions(+), 1177 deletions(-) delete mode 100644 pkg/R/00-generics.R create mode 100644 pkg/R/generics.R diff --git a/pkg/DESCRIPTION b/pkg/DESCRIPTION index 618847c951640..897fe77abc13a 100644 --- a/pkg/DESCRIPTION +++ b/pkg/DESCRIPTION @@ -13,3 +13,17 @@ Suggests: testthat Description: R frontend for Spark License: Apache License (== 2.0) +Collate: + 'generics.R' + 'jobj.R' + 'RDD.R' + 'pairRDD.R' + 'broadcast.R' + 'context.R' + 'deserialize.R' + 'serialize.R' + 'sparkR.R' + 'sparkRBackend.R' + 'sparkRClient.R' + 'utils.R' + 'zzz.R' diff --git a/pkg/R/00-generics.R b/pkg/R/00-generics.R deleted file mode 100644 index 6d111f592b2f0..0000000000000 --- a/pkg/R/00-generics.R +++ /dev/null @@ -1,1175 +0,0 @@ -############ RDD Actions and Transformations ############ - -# The jrdd accessor function. -setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) - -#' Persist an RDD -#' -#' Persist this RDD with the default storage level (MEMORY_ONLY). -#' -#' @param x The RDD to cache -#' @rdname cache-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' cache(rdd) -#'} -setGeneric("cache", function(x) { standardGeneric("cache") }) - -#' Persist an RDD -#' -#' Persist this RDD with the specified storage level. For details of the -#' supported storage levels, refer to -#' http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. -#' -#' @param x The RDD to persist -#' @param newLevel The new storage level to be assigned -#' @rdname persist -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' persist(rdd, "MEMORY_AND_DISK") -#'} -setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) - -#' Unpersist an RDD -#' -#' Mark the RDD as non-persistent, and remove all blocks for it from memory and -#' disk. -#' -#' @param rdd The RDD to unpersist -#' @rdname unpersist-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' cache(rdd) # rdd@@env$isCached == TRUE -#' unpersist(rdd) # rdd@@env$isCached == FALSE -#'} -setGeneric("unpersist", function(x) { standardGeneric("unpersist") }) - -#' Checkpoint an RDD -#' -#' Mark this RDD for checkpointing. It will be saved to a file inside the -#' checkpoint directory set with setCheckpointDir() and all references to its -#' parent RDDs will be removed. This function must be called before any job has -#' been executed on this RDD. It is strongly recommended that this RDD is -#' persisted in memory, otherwise saving it on a file will require recomputation. -#' -#' @param rdd The RDD to checkpoint -#' @rdname checkpoint-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' setCheckpointDir(sc, "checkpoints") -#' rdd <- parallelize(sc, 1:10, 2L) -#' checkpoint(rdd) -#'} -setGeneric("checkpoint", function(x) { standardGeneric("checkpoint") }) - -#' Gets the number of partitions of an RDD -#' -#' @param x A RDD. -#' @return the number of partitions of rdd as an integer. -#' @rdname numPartitions -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' numPartitions(rdd) # 2L -#'} -setGeneric("numPartitions", function(x) { standardGeneric("numPartitions") }) - -#' Collect elements of an RDD -#' -#' @description -#' \code{collect} returns a list that contains all of the elements in this RDD. -#' -#' @param x The RDD to collect -#' @param ... Other optional arguments to collect -#' @param flatten FALSE if the list should not flattened -#' @return a list containing elements in the RDD -#' @rdname collect-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 2L) -#' collect(rdd) # list from 1 to 10 -#' collectPartition(rdd, 0L) # list from 1 to 5 -#'} -setGeneric("collect", function(x, ...) { standardGeneric("collect") }) - -#' @rdname collect-methods -#' @export -#' @description -#' \code{collectPartition} returns a list that contains all of the elements -#' in the specified partition of the RDD. -#' @param partitionId the partition to collect (starts from 0) -setGeneric("collectPartition", - function(x, partitionId) { - standardGeneric("collectPartition") - }) - -#' @rdname collect-methods -#' @export -#' @description -#' \code{collectAsMap} returns a named list as a map that contains all of the elements -#' in a key-value pair RDD. -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) -#' collectAsMap(rdd) # list(`1` = 2, `3` = 4) -#'} -setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) - -#' Return the number of elements in the RDD. -#' -#' @param x The RDD to count -#' @return number of elements in the RDD. -#' @rdname count -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' count(rdd) # 10 -#' length(rdd) # Same as count -#'} -setGeneric("count", function(x) { standardGeneric("count") }) - -#' Return the count of each unique value in this RDD as a list of -#' (value, count) pairs. -#' -#' Same as countByValue in Spark. -#' -#' @param x The RDD to count -#' @return list of (value, count) pairs, where count is number of each unique -#' value in rdd. -#' @rdname countByValue -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, c(1,2,3,2,1)) -#' countByValue(rdd) # (1,2L), (2,2L), (3,1L) -#'} -setGeneric("countByValue", function(x) { standardGeneric("countByValue") }) - -#' @rdname lapply -#' @export -setGeneric("map", function(X, FUN) { - standardGeneric("map") }) - -#' Flatten results after apply a function to all elements -#' -#' This function return a new RDD by first applying a function to all -#' elements of this RDD, and then flattening the results. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on each element -#' @return a new RDD created by the transformation. -#' @rdname flatMap -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) -#' collect(multiplyByTwo) # 2,20,4,40,6,60... -#'} -setGeneric("flatMap", function(X, FUN) { - standardGeneric("flatMap") }) - -#' Apply a function to each partition of an RDD -#' -#' Return a new RDD by applying a function to each partition of this RDD. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on each partition. -#' @return a new RDD created by the transformation. -#' @rdname lapplyPartition -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' partitionSum <- lapplyPartition(rdd, function(part) { Reduce("+", part) }) -#' collect(partitionSum) # 15, 40 -#'} -setGeneric("lapplyPartition", function(X, FUN) { - standardGeneric("lapplyPartition") }) - -#' mapPartitions is the same as lapplyPartition. -#' -#' @rdname lapplyPartition -#' @export -setGeneric("mapPartitions", function(X, FUN) { - standardGeneric("mapPartitions") }) - -#' Return a new RDD by applying a function to each partition of this RDD, while -#' tracking the index of the original partition. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on each partition; takes the partition -#' index and a list of elements in the particular partition. -#' @return a new RDD created by the transformation. -#' @rdname lapplyPartitionsWithIndex -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10, 5L) -#' prod <- lapplyPartitionsWithIndex(rdd, function(split, part) { -#' split * Reduce("+", part) }) -#' collect(prod, flatten = FALSE) # 0, 7, 22, 45, 76 -#'} -setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { - standardGeneric("lapplyPartitionsWithIndex") }) - -#' @rdname lapplyPartitionsWithIndex -#' @export -setGeneric("mapPartitionsWithIndex", function(X, FUN) { - standardGeneric("mapPartitionsWithIndex") }) - -#' This function returns a new RDD containing only the elements that satisfy -#' a predicate (i.e. returning TRUE in a given logical function). -#' The same as `filter()' in Spark. -#' -#' @param x The RDD to be filtered. -#' @param f A unary predicate function. -#' @rdname filterRDD -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) -#'} -setGeneric("filterRDD", - function(x, f) { standardGeneric("filterRDD") }) - -#' Reduce across elements of an RDD. -#' -#' This function reduces the elements of this RDD using the -#' specified commutative and associative binary operator. -#' -#' @param rdd The RDD to reduce -#' @param func Commutative and associative function to apply on elements -#' of the RDD. -#' @export -#' @rdname reduce -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' reduce(rdd, "+") # 55 -#'} -setGeneric("reduce", function(x, func) { standardGeneric("reduce") }) - -#' Get the maximum element of an RDD. -#' -#' @param x The RDD to get the maximum element from -#' @export -#' @rdname maximum -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' maximum(rdd) # 10 -#'} -setGeneric("maximum", function(x) { standardGeneric("maximum") }) - -#' Get the minimum element of an RDD. -#' -#' @param x The RDD to get the minimum element from -#' @export -#' @rdname minimum -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' minimum(rdd) # 1 -#'} -setGeneric("minimum", function(x) { standardGeneric("minimum") }) - -#' Applies a function to all elements in an RDD, and force evaluation. -#' -#' @param x The RDD to apply the function -#' @param func The function to be applied. -#' @return invisible NULL. -#' @export -#' @rdname foreach -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' foreach(rdd, function(x) { save(x, file=...) }) -#'} -setGeneric("foreach", function(x, func) { standardGeneric("foreach") }) - -#' Applies a function to each partition in an RDD, and force evaluation. -#' -#' @export -#' @rdname foreach -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' foreachPartition(rdd, function(part) { save(part, file=...); NULL }) -#'} -setGeneric("foreachPartition", - function(x, func) { standardGeneric("foreachPartition") }) - -#' Take elements from an RDD. -#' -#' This function takes the first NUM elements in the RDD and -#' returns them in a list. -#' -#' @param x The RDD to take elements from -#' @param num Number of elements to take -#' @rdname take -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' take(rdd, 2L) # list(1, 2) -#'} -setGeneric("take", function(x, num) { standardGeneric("take") }) - -#' Removes the duplicates from RDD. -#' -#' This function returns a new RDD containing the distinct elements in the -#' given RDD. The same as `distinct()' in Spark. -#' -#' @param x The RDD to remove duplicates from. -#' @param numPartitions Number of partitions to create. -#' @rdname distinct -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, c(1,2,2,3,3,3)) -#' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) -#'} -setGeneric("distinct", - function(x, numPartitions) { standardGeneric("distinct") }) - -#' Return an RDD that is a sampled subset of the given RDD. -#' -#' The same as `sample()' in Spark. (We rename it due to signature -#' inconsistencies with the `sample()' function in R's base package.) -#' -#' @param x The RDD to sample elements from -#' @param withReplacement Sampling with replacement or not -#' @param fraction The (rough) sample target fraction -#' @param seed Randomness seed value -#' @rdname sampleRDD -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) # ensure each num is in its own split -#' collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) # ~5 distinct elements -#' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates -#'} -setGeneric("sampleRDD", - function(x, withReplacement, fraction, seed) { - standardGeneric("sampleRDD") - }) - -#' Return a list of the elements that are a sampled subset of the given RDD. -#' -#' @param x The RDD to sample elements from -#' @param withReplacement Sampling with replacement or not -#' @param num Number of elements to return -#' @param seed Randomness seed value -#' @rdname takeSample -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:100) -#' # exactly 5 elements sampled, which may not be distinct -#' takeSample(rdd, TRUE, 5L, 1618L) -#' # exactly 5 distinct elements sampled -#' takeSample(rdd, FALSE, 5L, 16181618L) -#'} -setGeneric("takeSample", - function(x, withReplacement, num, seed) { - standardGeneric("takeSample") - }) - -#' Creates tuples of the elements in this RDD by applying a function. -#' -#' @param x The RDD. -#' @param func The function to be applied. -#' @rdname keyBy -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3)) -#' collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) -#'} -setGeneric("keyBy", function(x, func) { standardGeneric("keyBy") }) - -#' Return a new RDD that has exactly numPartitions partitions. -#' Can increase or decrease the level of parallelism in this RDD. Internally, -#' this uses a shuffle to redistribute data. -#' If you are decreasing the number of partitions in this RDD, consider using -#' coalesce, which can avoid performing a shuffle. -#' -#' @param x The RDD. -#' @param numPartitions Number of partitions to create. -#' @rdname repartition -#' @seealso coalesce -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5, 6, 7), 4L) -#' numPartitions(rdd) # 4 -#' numPartitions(repartition(rdd, 2L)) # 2 -#'} -setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartition") }) - -#' Return a new RDD that is reduced into numPartitions partitions. -#' -#' @param x The RDD. -#' @param numPartitions Number of partitions to create. -#' @rdname coalesce -#' @seealso repartition -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5), 3L) -#' numPartitions(rdd) # 3 -#' numPartitions(coalesce(rdd, 1L)) # 1 -#'} -setGeneric("coalesce", function(x, numPartitions, ...) { standardGeneric("coalesce") }) - -#' Save this RDD as a SequenceFile of serialized objects. -#' -#' @param x The RDD to save -#' @param path The directory where the file is saved -#' @rdname saveAsObjectFile -#' @seealso objectFile -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:3) -#' saveAsObjectFile(rdd, "/tmp/sparkR-tmp") -#'} -setGeneric("saveAsObjectFile", function(x, path) { standardGeneric("saveAsObjectFile") }) - -#' Save this RDD as a text file, using string representations of elements. -#' -#' @param x The RDD to save -#' @param path The directory where the splits of the text file are saved -#' @rdname saveAsTextFile -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:3) -#' saveAsTextFile(rdd, "/tmp/sparkR-tmp") -#'} -setGeneric("saveAsTextFile", function(x, path) { standardGeneric("saveAsTextFile") }) - -#' Sort an RDD by the given key function. -#' -#' @param x An RDD to be sorted. -#' @param func A function used to compute the sort key for each element. -#' @param ascending A flag to indicate whether the sorting is ascending or descending. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where all elements are sorted. -#' @rdname sortBy -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(3, 2, 1)) -#' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) -#'} -setGeneric("sortBy", function(x, - func, - ascending = TRUE, - numPartitions = 1L) { - standardGeneric("sortBy") -}) - -#' Returns the first N elements from an RDD in ascending order. -#' -#' @param x An RDD. -#' @param num Number of elements to return. -#' @return The first N elements from the RDD in ascending order. -#' @rdname takeOrdered -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) -#' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) -#'} -setGeneric("takeOrdered", function(x, num) { standardGeneric("takeOrdered") }) - -#' Returns the top N elements from an RDD. -#' -#' @param x An RDD. -#' @param num Number of elements to return. -#' @return The top N elements from the RDD. -#' @rdname top -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) -#' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) -#'} -setGeneric("top", function(x, num) { standardGeneric("top") }) - -#' Fold an RDD using a given associative function and a neutral "zero value". -#' -#' Aggregate the elements of each partition, and then the results for all the -#' partitions, using a given associative function and a neutral "zero value". -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param op An associative function for the folding operation. -#' @return The folding result. -#' @rdname fold -#' @seealso reduce -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) -#' fold(rdd, 0, "+") # 15 -#'} -setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) - -#' Aggregate an RDD using the given combine functions and a neutral "zero value". -#' -#' Aggregate the elements of each partition, and then the results for all the -#' partitions, using given combine functions and a neutral "zero value". -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param seqOp A function to aggregate the RDD elements. It may return a different -#' result type from the type of the RDD elements. -#' @param combOp A function to aggregate results of seqOp. -#' @return The aggregation result. -#' @rdname aggregateRDD -#' @seealso reduce -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4)) -#' zeroValue <- list(0, 0) -#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } -#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } -#' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) -#'} -setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) - -#' Pipes elements to a forked external process. -#' -#' The same as 'pipe()' in Spark. -#' -#' @param x The RDD whose elements are piped to the forked external process. -#' @param command The command to fork an external process. -#' @param env A named list to set environment variables of the external process. -#' @return A new RDD created by piping all elements to a forked external process. -#' @rdname pipeRDD -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' collect(pipeRDD(rdd, "more") -#' Output: c("1", "2", ..., "10") -#'} -setGeneric("pipeRDD", function(x, command, env = list()) { - standardGeneric("pipeRDD") -}) - -# TODO: Consider caching the name in the RDD's environment -#' Return an RDD's name. -#' -#' @param x The RDD whose name is returned. -#' @rdname name -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' name(rdd) # NULL (if not set before) -#'} -setGeneric("name", function(x) { standardGeneric("name") }) - -#' Set an RDD's name. -#' -#' @param x The RDD whose name is to be set. -#' @param name The RDD name to be set. -#' @return a new RDD renamed. -#' @rdname setName -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' setName(rdd, "myRDD") -#' name(rdd) # "myRDD" -#'} -setGeneric("setName", function(x, name) { standardGeneric("setName") }) - -#' Zip an RDD with generated unique Long IDs. -#' -#' Items in the kth partition will get ids k, n+k, 2*n+k, ..., where -#' n is the number of partitions. So there may exist gaps, but this -#' method won't trigger a spark job, which is different from -#' zipWithIndex. -#' -#' @param x An RDD to be zipped. -#' @return An RDD with zipped items. -#' @rdname zipWithUniqueId -#' @seealso zipWithIndex -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) -#' collect(zipWithUniqueId(rdd)) -#' # list(list("a", 0), list("b", 3), list("c", 1), list("d", 4), list("e", 2)) -#'} -setGeneric("zipWithUniqueId", function(x) { standardGeneric("zipWithUniqueId") }) - -#' Zip an RDD with its element indices. -#' -#' The ordering is first based on the partition index and then the -#' ordering of items within each partition. So the first item in -#' the first partition gets index 0, and the last item in the last -#' partition receives the largest index. -#' -#' This method needs to trigger a Spark job when this RDD contains -#' more than one partition. -#' -#' @param x An RDD to be zipped. -#' @return An RDD with zipped items. -#' @rdname zipWithIndex -#' @seealso zipWithUniqueId -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) -#' collect(zipWithIndex(rdd)) -#' # list(list("a", 0), list("b", 1), list("c", 2), list("d", 3), list("e", 4)) -#'} -setGeneric("zipWithIndex", function(x) { standardGeneric("zipWithIndex") }) - - -############ Binary Functions ############# - - -#' Return the union RDD of two RDDs. -#' The same as union() in Spark. -#' -#' @param x An RDD. -#' @param y An RDD. -#' @return a new RDD created by performing the simple union (witout removing -#' duplicates) of two input RDDs. -#' @rdname unionRDD -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:3) -#' unionRDD(rdd, rdd) # 1, 2, 3, 1, 2, 3 -#'} -setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) - -#' Look up elements of a key in an RDD -#' -#' @description -#' \code{lookup} returns a list of values in this RDD for key key. -#' -#' @param x The RDD to collect -#' @param key The key to look up for -#' @return a list of values in this RDD for key key -#' @rdname lookup -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) -#' rdd <- parallelize(sc, pairs) -#' lookup(rdd, 1) # list(1, 3) -#'} -setGeneric("lookup", function(x, key) { standardGeneric("lookup") }) - -#' Count the number of elements for each key, and return the result to the -#' master as lists of (key, count) pairs. -#' -#' Same as countByKey in Spark. -#' -#' @param x The RDD to count keys. -#' @return list of (key, count) pairs, where count is number of each key in rdd. -#' @rdname countByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) -#' countByKey(rdd) # ("a", 2L), ("b", 1L) -#'} -setGeneric("countByKey", function(x) { standardGeneric("countByKey") }) - -#' Return an RDD with the keys of each tuple. -#' -#' @param x The RDD from which the keys of each tuple is returned. -#' @rdname keys -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -#' collect(keys(rdd)) # list(1, 3) -#'} -setGeneric("keys", function(x) { standardGeneric("keys") }) - -#' Return an RDD with the values of each tuple. -#' -#' @param x The RDD from which the values of each tuple is returned. -#' @rdname values -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -#' collect(values(rdd)) # list(2, 4) -#'} -setGeneric("values", function(x) { standardGeneric("values") }) - -#' Applies a function to all values of the elements, without modifying the keys. -#' -#' The same as `mapValues()' in Spark. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on the value of each element. -#' @return a new RDD created by the transformation. -#' @rdname mapValues -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' makePairs <- lapply(rdd, function(x) { list(x, x) }) -#' collect(mapValues(makePairs, function(x) { x * 2) }) -#' Output: list(list(1,2), list(2,4), list(3,6), ...) -#'} -setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) - -#' Pass each value in the key-value pair RDD through a flatMap function without -#' changing the keys; this also retains the original RDD's partitioning. -#' -#' The same as 'flatMapValues()' in Spark. -#' -#' @param X The RDD to apply the transformation. -#' @param FUN the transformation to apply on the value of each element. -#' @return a new RDD created by the transformation. -#' @rdname flatMapValues -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) -#' collect(flatMapValues(rdd, function(x) { x })) -#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) -#'} -setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) - - -############ Shuffle Functions ############ - - -#' Partition an RDD by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' For each element of this RDD, the partitioner is used to compute a hash -#' function and the RDD is partitioned using this hash value. -#' -#' @param x The RDD to partition. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @param ... Other optional arguments to partitionBy. -#' -#' @param partitionFunc The partition function to use. Uses a default hashCode -#' function if not provided -#' @return An RDD partitioned using the specified partitioner. -#' @rdname partitionBy -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- partitionBy(rdd, 2L) -#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) -#'} -setGeneric("partitionBy", - function(x, numPartitions, ...) { - standardGeneric("partitionBy") - }) - -#' Group values by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and group values for each key in the RDD into a single sequence. -#' -#' @param x The RDD to group. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, list(V)) -#' @seealso reduceByKey -#' @rdname groupByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- groupByKey(rdd, 2L) -#' grouped <- collect(parts) -#' grouped[[1]] # Should be a list(1, list(2, 4)) -#'} -setGeneric("groupByKey", - function(x, numPartitions) { - standardGeneric("groupByKey") - }) - -#' Merge values by key -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and merges the values for each key using an associative reduce function. -#' -#' @param x The RDD to reduce by key. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param combineFunc The associative reduce function to use. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, V') where V' is the merged -#' value -#' @rdname reduceByKey -#' @seealso groupByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- reduceByKey(rdd, "+", 2L) -#' reduced <- collect(parts) -#' reduced[[1]] # Should be a list(1, 6) -#'} -setGeneric("reduceByKey", - function(x, combineFunc, numPartitions) { - standardGeneric("reduceByKey") - }) - -#' Merge values by key locally -#' -#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -#' and merges the values for each key using an associative reduce function, but return the -#' results immediately to the driver as an R list. -#' -#' @param x The RDD to reduce by key. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param combineFunc The associative reduce function to use. -#' @return A list of elements of type list(K, V') where V' is the merged value for each key -#' @rdname reduceByKeyLocally -#' @seealso reduceByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' reduced <- reduceByKeyLocally(rdd, "+") -#' reduced # list(list(1, 6), list(1.1, 3)) -#'} -setGeneric("reduceByKeyLocally", - function(x, combineFunc) { - standardGeneric("reduceByKeyLocally") - }) - -#' Combine values by key -#' -#' Generic function to combine the elements for each key using a custom set of -#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], -#' for a "combined type" C. Note that V and C can be different -- for example, one -#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). - -#' Users provide three functions: -#' \itemize{ -#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) -#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - -#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates -#' two lists). -#' } -#' -#' @param x The RDD to combine. Should be an RDD where each element is -#' list(K, V) or c(K, V). -#' @param createCombiner Create a combiner (C) given a value (V) -#' @param mergeValue Merge the given value (V) with an existing combiner (C) -#' @param mergeCombiners Merge two combiners and return a new combiner -#' @param numPartitions Number of partitions to create. -#' @return An RDD where each element is list(K, C) where C is the combined type -#' -#' @rdname combineByKey -#' @seealso groupByKey, reduceByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -#' rdd <- parallelize(sc, pairs) -#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) -#' combined <- collect(parts) -#' combined[[1]] # Should be a list(1, 6) -#'} -setGeneric("combineByKey", - function(x, createCombiner, mergeValue, mergeCombiners, numPartitions) { - standardGeneric("combineByKey") - }) - -#' Aggregate a pair RDD by each key. -#' -#' Aggregate the values of each key in an RDD, using given combine functions -#' and a neutral "zero value". This function can return a different result type, -#' U, than the type of the values in this RDD, V. Thus, we need one operation -#' for merging a V into a U and one operation for merging two U's, The former -#' operation is used for merging values within a partition, and the latter is -#' used for merging values between partitions. To avoid memory allocation, both -#' of these functions are allowed to modify and return their first argument -#' instead of creating a new U. -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param seqOp A function to aggregate the values of each key. It may return -#' a different result type from the type of the values. -#' @param combOp A function to aggregate results of seqOp. -#' @return An RDD containing the aggregation result. -#' @rdname aggregateByKey -#' @seealso foldByKey, combineByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) -#' zeroValue <- list(0, 0) -#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } -#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } -#' aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) -#' # list(list(1, list(3, 2)), list(2, list(7, 2))) -#'} -setGeneric("aggregateByKey", - function(x, zeroValue, seqOp, combOp, numPartitions) { - standardGeneric("aggregateByKey") - }) - -#' Fold a pair RDD by each key. -#' -#' Aggregate the values of each key in an RDD, using an associative function "func" -#' and a neutral "zero value" which may be added to the result an arbitrary -#' number of times, and must not change the result (e.g., 0 for addition, or -#' 1 for multiplication.). -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param func An associative function for folding values of each key. -#' @return An RDD containing the aggregation result. -#' @rdname foldByKey -#' @seealso aggregateByKey, combineByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) -#' foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) -#'} -setGeneric("foldByKey", - function(x, zeroValue, func, numPartitions) { - standardGeneric("foldByKey") - }) - -#' Join two RDDs -#' -#' @description -#' \code{join} This function joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param x An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param y An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return a new RDD containing all pairs of elements with matching keys in -#' two input RDDs. -#' @rdname join-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) -#'} -setGeneric("join", function(x, y, numPartitions) { standardGeneric("join") }) - -#' Left outer join two RDDs -#' -#' @description -#' \code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param x An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param y An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in x, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) -#' if no elements in rdd2 have key k. -#' @rdname join-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' leftOuterJoin(rdd1, rdd2, 2L) -#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) -#'} -setGeneric("leftOuterJoin", function(x, y, numPartitions) { standardGeneric("leftOuterJoin") }) - -#' Right outer join two RDDs -#' -#' @description -#' \code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param x An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param y An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, w) in y, the resulting RDD will either contain -#' all pairs (k, (v, w)) for (k, v) in x, or the pair (k, (NULL, w)) -#' if no elements in x have key k. -#' @rdname join-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rightOuterJoin(rdd1, rdd2, 2L) -#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) -#'} -setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) - -#' Full outer join two RDDs -#' -#' @description -#' \code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). -#' The key types of the two RDDs should be the same. -#' -#' @param x An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param y An RDD to be joined. Should be an RDD where each element is -#' list(K, V). -#' @param numPartitions Number of partitions to create. -#' @return For each element (k, v) in x and (k, w) in y, the resulting RDD -#' will contain all pairs (k, (v, w)) for both (k, v) in x and -#' (k, w) in y, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements -#' in x/y have key k. -#' @rdname join-methods -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) -#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), -#' # list(1, list(3, 1)), -#' # list(2, list(NULL, 4))) -#' # list(3, list(3, NULL)), -#'} -setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) - -#' For each key k in several RDDs, return a resulting RDD that -#' whose values are a list of values for the key in all RDDs. -#' -#' @param ... Several RDDs. -#' @param numPartitions Number of partitions to create. -#' @return a new RDD containing all pairs of elements with values in a list -#' in all RDDs. -#' @rdname cogroup -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -#' cogroup(rdd1, rdd2, numPartitions = 2L) -#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) -#'} -setGeneric("cogroup", - function(..., numPartitions) { standardGeneric("cogroup") }, - signature = "...") - -#' Sort a (k, v) pair RDD by k. -#' -#' @param x A (k, v) pair RDD to be sorted. -#' @param ascending A flag to indicate whether the sorting is ascending or descending. -#' @param numPartitions Number of partitions to create. -#' @return An RDD where all (k, v) pair elements are sorted. -#' @rdname sortByKey -#' @export -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) -#' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) -#'} -setGeneric("sortByKey", function(x, - ascending = TRUE, - numPartitions = 1L) { - standardGeneric("sortByKey") -}) - - -############ Broadcast Variable Methods ############ - -#' @description -#' \code{value} can be used to get the value of a broadcast variable inside -#' a distributed function. -#' -#' @param bcast The broadcast variable to get -#' @rdname broadcast -#' @export -setGeneric("value", function(bcast) { standardGeneric("value") }) - diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 9377feb1533d1..8a98d408709ab 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -159,8 +159,19 @@ setValidity("RDD", ############ Actions and Transformations ############ - +#' Persist an RDD +#' +#' Persist this RDD with the default storage level (MEMORY_ONLY). +#' +#' @param x The RDD to cache #' @rdname cache-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' cache(rdd) +#'} #' @aliases cache,RDD-method setMethod("cache", signature(x = "RDD"), @@ -170,7 +181,22 @@ setMethod("cache", x }) +#' Persist an RDD +#' +#' Persist this RDD with the specified storage level. For details of the +#' supported storage levels, refer to +#' http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. +#' +#' @param x The RDD to persist +#' @param newLevel The new storage level to be assigned #' @rdname persist +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' persist(rdd, "MEMORY_AND_DISK") +#'} #' @aliases persist,RDD-method setMethod("persist", signature(x = "RDD", newLevel = "character"), @@ -204,7 +230,21 @@ setMethod("persist", x }) +#' Unpersist an RDD +#' +#' Mark the RDD as non-persistent, and remove all blocks for it from memory and +#' disk. +#' +#' @param rdd The RDD to unpersist #' @rdname unpersist-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' cache(rdd) # rdd@@env$isCached == TRUE +#' unpersist(rdd) # rdd@@env$isCached == FALSE +#'} #' @aliases unpersist,RDD-method setMethod("unpersist", signature(x = "RDD"), @@ -214,7 +254,24 @@ setMethod("unpersist", x }) +#' Checkpoint an RDD +#' +#' Mark this RDD for checkpointing. It will be saved to a file inside the +#' checkpoint directory set with setCheckpointDir() and all references to its +#' parent RDDs will be removed. This function must be called before any job has +#' been executed on this RDD. It is strongly recommended that this RDD is +#' persisted in memory, otherwise saving it on a file will require recomputation. +#' +#' @param rdd The RDD to checkpoint #' @rdname checkpoint-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' setCheckpointDir(sc, "checkpoints") +#' rdd <- parallelize(sc, 1:10, 2L) +#' checkpoint(rdd) +#'} #' @aliases checkpoint,RDD-method setMethod("checkpoint", signature(x = "RDD"), @@ -225,7 +282,18 @@ setMethod("checkpoint", x }) +#' Gets the number of partitions of an RDD +#' +#' @param x A RDD. +#' @return the number of partitions of rdd as an integer. #' @rdname numPartitions +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' numPartitions(rdd) # 2L +#'} #' @aliases numPartitions,RDD-method setMethod("numPartitions", signature(x = "RDD"), @@ -235,7 +303,24 @@ setMethod("numPartitions", callJMethod(partitions, "size") }) +#' Collect elements of an RDD +#' +#' @description +#' \code{collect} returns a list that contains all of the elements in this RDD. +#' +#' @param x The RDD to collect +#' @param ... Other optional arguments to collect +#' @param flatten FALSE if the list should not flattened +#' @return a list containing elements in the RDD #' @rdname collect-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 2L) +#' collect(rdd) # list from 1 to 10 +#' collectPartition(rdd, 0L) # list from 1 to 5 +#'} #' @aliases collect,RDD-method setMethod("collect", signature(x = "RDD"), @@ -246,6 +331,11 @@ setMethod("collect", }) #' @rdname collect-methods +#' @export +#' @description +#' \code{collectPartition} returns a list that contains all of the elements +#' in the specified partition of the RDD. +#' @param partitionId the partition to collect (starts from 0) #' @aliases collectPartition,integer,RDD-method setMethod("collectPartition", signature(x = "RDD", partitionId = "integer"), @@ -259,6 +349,16 @@ setMethod("collectPartition", }) #' @rdname collect-methods +#' @export +#' @description +#' \code{collectAsMap} returns a named list as a map that contains all of the elements +#' in a key-value pair RDD. +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) +#' collectAsMap(rdd) # list(`1` = 2, `3` = 4) +#'} #' @aliases collectAsMap,RDD-method setMethod("collectAsMap", signature(x = "RDD"), @@ -269,7 +369,19 @@ setMethod("collectAsMap", as.list(map) }) +#' Return the number of elements in the RDD. +#' +#' @param x The RDD to count +#' @return number of elements in the RDD. #' @rdname count +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' count(rdd) # 10 +#' length(rdd) # Same as count +#'} #' @aliases count,RDD-method setMethod("count", signature(x = "RDD"), @@ -291,7 +403,22 @@ setMethod("length", count(x) }) +#' Return the count of each unique value in this RDD as a list of +#' (value, count) pairs. +#' +#' Same as countByValue in Spark. +#' +#' @param x The RDD to count +#' @return list of (value, count) pairs, where count is number of each unique +#' value in rdd. #' @rdname countByValue +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, c(1,2,3,2,1)) +#' countByValue(rdd) # (1,2L), (2,2L), (3,1L) +#'} #' @aliases countByValue,RDD-method setMethod("countByValue", signature(x = "RDD"), @@ -328,6 +455,7 @@ setMethod("lapply", }) #' @rdname lapply +#' @export #' @aliases map,RDD,function-method setMethod("map", signature(X = "RDD", FUN = "function"), @@ -335,7 +463,23 @@ setMethod("map", lapply(X, FUN) }) +#' Flatten results after apply a function to all elements +#' +#' This function return a new RDD by first applying a function to all +#' elements of this RDD, and then flattening the results. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on each element +#' @return a new RDD created by the transformation. #' @rdname flatMap +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) +#' collect(multiplyByTwo) # 2,20,4,40,6,60... +#'} #' @aliases flatMap,RDD,function-method setMethod("flatMap", signature(X = "RDD", FUN = "function"), @@ -349,7 +493,22 @@ setMethod("flatMap", lapplyPartition(X, partitionFunc) }) +#' Apply a function to each partition of an RDD +#' +#' Return a new RDD by applying a function to each partition of this RDD. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on each partition. +#' @return a new RDD created by the transformation. #' @rdname lapplyPartition +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' partitionSum <- lapplyPartition(rdd, function(part) { Reduce("+", part) }) +#' collect(partitionSum) # 15, 40 +#'} #' @aliases lapplyPartition,RDD,function-method setMethod("lapplyPartition", signature(X = "RDD", FUN = "function"), @@ -357,7 +516,10 @@ setMethod("lapplyPartition", lapplyPartitionsWithIndex(X, function(s, part) { FUN(part) }) }) +#' mapPartitions is the same as lapplyPartition. +#' #' @rdname lapplyPartition +#' @export #' @aliases mapPartitions,RDD,function-method setMethod("mapPartitions", signature(X = "RDD", FUN = "function"), @@ -365,7 +527,23 @@ setMethod("mapPartitions", lapplyPartition(X, FUN) }) +#' Return a new RDD by applying a function to each partition of this RDD, while +#' tracking the index of the original partition. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on each partition; takes the partition +#' index and a list of elements in the particular partition. +#' @return a new RDD created by the transformation. #' @rdname lapplyPartitionsWithIndex +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10, 5L) +#' prod <- lapplyPartitionsWithIndex(rdd, function(split, part) { +#' split * Reduce("+", part) }) +#' collect(prod, flatten = FALSE) # 0, 7, 22, 45, 76 +#'} #' @aliases lapplyPartitionsWithIndex,RDD,function-method setMethod("lapplyPartitionsWithIndex", signature(X = "RDD", FUN = "function"), @@ -378,6 +556,7 @@ setMethod("lapplyPartitionsWithIndex", }) #' @rdname lapplyPartitionsWithIndex +#' @export #' @aliases mapPartitionsWithIndex,RDD,function-method setMethod("mapPartitionsWithIndex", signature(X = "RDD", FUN = "function"), @@ -385,7 +564,20 @@ setMethod("mapPartitionsWithIndex", lapplyPartitionsWithIndex(X, FUN) }) +#' This function returns a new RDD containing only the elements that satisfy +#' a predicate (i.e. returning TRUE in a given logical function). +#' The same as `filter()' in Spark. +#' +#' @param x The RDD to be filtered. +#' @param f A unary predicate function. #' @rdname filterRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) +#'} #' @aliases filterRDD,RDD,function-method setMethod("filterRDD", signature(x = "RDD", f = "function"), @@ -405,7 +597,22 @@ setMethod("Filter", filterRDD(x, f) }) +#' Reduce across elements of an RDD. +#' +#' This function reduces the elements of this RDD using the +#' specified commutative and associative binary operator. +#' +#' @param rdd The RDD to reduce +#' @param func Commutative and associative function to apply on elements +#' of the RDD. +#' @export #' @rdname reduce +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' reduce(rdd, "+") # 55 +#'} #' @aliases reduce,RDD,ANY-method setMethod("reduce", signature(x = "RDD", func = "ANY"), @@ -420,7 +627,17 @@ setMethod("reduce", Reduce(func, partitionList) }) +#' Get the maximum element of an RDD. +#' +#' @param x The RDD to get the maximum element from +#' @export #' @rdname maximum +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' maximum(rdd) # 10 +#'} #' @aliases maximum,RDD setMethod("maximum", signature(x = "RDD"), @@ -428,7 +645,17 @@ setMethod("maximum", reduce(x, max) }) +#' Get the minimum element of an RDD. +#' +#' @param x The RDD to get the minimum element from +#' @export #' @rdname minimum +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' minimum(rdd) # 1 +#'} #' @aliases minimum,RDD setMethod("minimum", signature(x = "RDD"), @@ -436,7 +663,19 @@ setMethod("minimum", reduce(x, min) }) +#' Applies a function to all elements in an RDD, and force evaluation. +#' +#' @param x The RDD to apply the function +#' @param func The function to be applied. +#' @return invisible NULL. +#' @export #' @rdname foreach +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' foreach(rdd, function(x) { save(x, file=...) }) +#'} #' @aliases foreach,RDD,function-method setMethod("foreach", signature(x = "RDD", func = "function"), @@ -448,7 +687,16 @@ setMethod("foreach", invisible(collect(mapPartitions(x, partition.func))) }) +#' Applies a function to each partition in an RDD, and force evaluation. +#' +#' @export #' @rdname foreach +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' foreachPartition(rdd, function(part) { save(part, file=...); NULL }) +#'} #' @aliases foreachPartition,RDD,function-method setMethod("foreachPartition", signature(x = "RDD", func = "function"), @@ -456,7 +704,21 @@ setMethod("foreachPartition", invisible(collect(mapPartitions(x, func))) }) +#' Take elements from an RDD. +#' +#' This function takes the first NUM elements in the RDD and +#' returns them in a list. +#' +#' @param x The RDD to take elements from +#' @param num Number of elements to take #' @rdname take +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' take(rdd, 2L) # list(1, 2) +#'} #' @aliases take,RDD,numeric-method setMethod("take", signature(x = "RDD", num = "numeric"), @@ -491,7 +753,21 @@ setMethod("take", }) setClassUnion("missingOrInteger", c("missing", "integer")) +#' Removes the duplicates from RDD. +#' +#' This function returns a new RDD containing the distinct elements in the +#' given RDD. The same as `distinct()' in Spark. +#' +#' @param x The RDD to remove duplicates from. +#' @param numPartitions Number of partitions to create. #' @rdname distinct +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, c(1,2,2,3,3,3)) +#' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) +#'} #' @aliases distinct,RDD,missingOrInteger-method setMethod("distinct", signature(x = "RDD", numPartitions = "missingOrInteger"), @@ -507,7 +783,24 @@ setMethod("distinct", resRDD }) +#' Return an RDD that is a sampled subset of the given RDD. +#' +#' The same as `sample()' in Spark. (We rename it due to signature +#' inconsistencies with the `sample()' function in R's base package.) +#' +#' @param x The RDD to sample elements from +#' @param withReplacement Sampling with replacement or not +#' @param fraction The (rough) sample target fraction +#' @param seed Randomness seed value #' @rdname sampleRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) # ensure each num is in its own split +#' collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) # ~5 distinct elements +#' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates +#'} #' @aliases sampleRDD,RDD setMethod("sampleRDD", signature(x = "RDD", withReplacement = "logical", @@ -552,7 +845,23 @@ setMethod("sampleRDD", lapplyPartitionsWithIndex(x, samplingFunc) }) +#' Return a list of the elements that are a sampled subset of the given RDD. +#' +#' @param x The RDD to sample elements from +#' @param withReplacement Sampling with replacement or not +#' @param num Number of elements to return +#' @param seed Randomness seed value #' @rdname takeSample +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:100) +#' # exactly 5 elements sampled, which may not be distinct +#' takeSample(rdd, TRUE, 5L, 1618L) +#' # exactly 5 distinct elements sampled +#' takeSample(rdd, FALSE, 5L, 16181618L) +#'} #' @aliases takeSample,RDD setMethod("takeSample", signature(x = "RDD", withReplacement = "logical", num = "integer", seed = "integer"), @@ -600,7 +909,18 @@ setMethod("takeSample", signature(x = "RDD", withReplacement = "logical", sample(samples)[1:total] }) +#' Creates tuples of the elements in this RDD by applying a function. +#' +#' @param x The RDD. +#' @param func The function to be applied. #' @rdname keyBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3)) +#' collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) +#'} #' @aliases keyBy,RDD setMethod("keyBy", signature(x = "RDD", func = "function"), @@ -611,7 +931,24 @@ setMethod("keyBy", lapply(x, apply.func) }) +#' Return a new RDD that has exactly numPartitions partitions. +#' Can increase or decrease the level of parallelism in this RDD. Internally, +#' this uses a shuffle to redistribute data. +#' If you are decreasing the number of partitions in this RDD, consider using +#' coalesce, which can avoid performing a shuffle. +#' +#' @param x The RDD. +#' @param numPartitions Number of partitions to create. #' @rdname repartition +#' @seealso coalesce +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5, 6, 7), 4L) +#' numPartitions(rdd) # 4 +#' numPartitions(repartition(rdd, 2L)) # 2 +#'} #' @aliases repartition,RDD setMethod("repartition", signature(x = "RDD", numPartitions = "numeric"), @@ -619,7 +956,20 @@ setMethod("repartition", coalesce(x, numPartitions, TRUE) }) +#' Return a new RDD that is reduced into numPartitions partitions. +#' +#' @param x The RDD. +#' @param numPartitions Number of partitions to create. #' @rdname coalesce +#' @seealso repartition +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5), 3L) +#' numPartitions(rdd) # 3 +#' numPartitions(coalesce(rdd, 1L)) # 1 +#'} #' @aliases coalesce,RDD setMethod("coalesce", signature(x = "RDD", numPartitions = "numeric"), @@ -647,7 +997,19 @@ setMethod("coalesce", } }) +#' Save this RDD as a SequenceFile of serialized objects. +#' +#' @param x The RDD to save +#' @param path The directory where the file is saved #' @rdname saveAsObjectFile +#' @seealso objectFile +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' saveAsObjectFile(rdd, "/tmp/sparkR-tmp") +#'} #' @aliases saveAsObjectFile,RDD setMethod("saveAsObjectFile", signature(x = "RDD", path = "character"), @@ -661,7 +1023,18 @@ setMethod("saveAsObjectFile", invisible(callJMethod(getJRDD(x), "saveAsObjectFile", path)) }) +#' Save this RDD as a text file, using string representations of elements. +#' +#' @param x The RDD to save +#' @param path The directory where the splits of the text file are saved #' @rdname saveAsTextFile +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' saveAsTextFile(rdd, "/tmp/sparkR-tmp") +#'} #' @aliases saveAsTextFile,RDD setMethod("saveAsTextFile", signature(x = "RDD", path = "character"), @@ -675,7 +1048,21 @@ setMethod("saveAsTextFile", callJMethod(getJRDD(stringRdd, dataSerialization = FALSE), "saveAsTextFile", path)) }) +#' Sort an RDD by the given key function. +#' +#' @param x An RDD to be sorted. +#' @param func A function used to compute the sort key for each element. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all elements are sorted. #' @rdname sortBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(3, 2, 1)) +#' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) +#'} #' @aliases sortBy,RDD,RDD-method setMethod("sortBy", signature(x = "RDD", func = "function"), @@ -717,7 +1104,19 @@ takeOrderedElem <- function(x, num, ascending = TRUE) { reduce(newRdd, reduceFunc) } +#' Returns the first N elements from an RDD in ascending order. +#' +#' @param x An RDD. +#' @param num Number of elements to return. +#' @return The first N elements from the RDD in ascending order. #' @rdname takeOrdered +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +#' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) +#'} #' @aliases takeOrdered,RDD,RDD-method setMethod("takeOrdered", signature(x = "RDD", num = "integer"), @@ -725,7 +1124,19 @@ setMethod("takeOrdered", takeOrderedElem(x, num) }) +#' Returns the top N elements from an RDD. +#' +#' @param x An RDD. +#' @param num Number of elements to return. +#' @return The top N elements from the RDD. #' @rdname top +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) +#' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) +#'} #' @aliases top,RDD,RDD-method setMethod("top", signature(x = "RDD", num = "integer"), @@ -733,7 +1144,24 @@ setMethod("top", takeOrderedElem(x, num, FALSE) }) +#' Fold an RDD using a given associative function and a neutral "zero value". +#' +#' Aggregate the elements of each partition, and then the results for all the +#' partitions, using a given associative function and a neutral "zero value". +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param op An associative function for the folding operation. +#' @return The folding result. #' @rdname fold +#' @seealso reduce +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) +#' fold(rdd, 0, "+") # 15 +#'} #' @aliases fold,RDD,RDD-method setMethod("fold", signature(x = "RDD", zeroValue = "ANY", op = "ANY"), @@ -741,7 +1169,29 @@ setMethod("fold", aggregateRDD(x, zeroValue, op, op) }) +#' Aggregate an RDD using the given combine functions and a neutral "zero value". +#' +#' Aggregate the elements of each partition, and then the results for all the +#' partitions, using given combine functions and a neutral "zero value". +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param seqOp A function to aggregate the RDD elements. It may return a different +#' result type from the type of the RDD elements. +#' @param combOp A function to aggregate results of seqOp. +#' @return The aggregation result. #' @rdname aggregateRDD +#' @seealso reduce +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1, 2, 3, 4)) +#' zeroValue <- list(0, 0) +#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +#' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) +#'} #' @aliases aggregateRDD,RDD,RDD-method setMethod("aggregateRDD", signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), @@ -755,7 +1205,23 @@ setMethod("aggregateRDD", Reduce(combOp, partitionList, zeroValue) }) +#' Pipes elements to a forked external process. +#' +#' The same as 'pipe()' in Spark. +#' +#' @param x The RDD whose elements are piped to the forked external process. +#' @param command The command to fork an external process. +#' @param env A named list to set environment variables of the external process. +#' @return A new RDD created by piping all elements to a forked external process. #' @rdname pipeRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' collect(pipeRDD(rdd, "more") +#' Output: c("1", "2", ..., "10") +#'} #' @aliases pipeRDD,RDD,character-method setMethod("pipeRDD", signature(x = "RDD", command = "character"), @@ -771,7 +1237,18 @@ setMethod("pipeRDD", lapplyPartition(x, func) }) +# TODO: Consider caching the name in the RDD's environment +#' Return an RDD's name. +#' +#' @param x The RDD whose name is returned. #' @rdname name +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1,2,3)) +#' name(rdd) # NULL (if not set before) +#'} #' @aliases name,RDD setMethod("name", signature(x = "RDD"), @@ -779,7 +1256,20 @@ setMethod("name", callJMethod(getJRDD(x), "name") }) +#' Set an RDD's name. +#' +#' @param x The RDD whose name is to be set. +#' @param name The RDD name to be set. +#' @return a new RDD renamed. #' @rdname setName +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(1,2,3)) +#' setName(rdd, "myRDD") +#' name(rdd) # "myRDD" +#'} #' @aliases setName,RDD setMethod("setName", signature(x = "RDD", name = "character"), @@ -788,7 +1278,25 @@ setMethod("setName", x }) +#' Zip an RDD with generated unique Long IDs. +#' +#' Items in the kth partition will get ids k, n+k, 2*n+k, ..., where +#' n is the number of partitions. So there may exist gaps, but this +#' method won't trigger a spark job, which is different from +#' zipWithIndex. +#' +#' @param x An RDD to be zipped. +#' @return An RDD with zipped items. #' @rdname zipWithUniqueId +#' @seealso zipWithIndex +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) +#' collect(zipWithUniqueId(rdd)) +#' # list(list("a", 0), list("b", 3), list("c", 1), list("d", 4), list("e", 2)) +#'} #' @aliases zipWithUniqueId,RDD setMethod("zipWithUniqueId", signature(x = "RDD"), @@ -808,7 +1316,28 @@ setMethod("zipWithUniqueId", lapplyPartitionsWithIndex(x, partitionFunc) }) +#' Zip an RDD with its element indices. +#' +#' The ordering is first based on the partition index and then the +#' ordering of items within each partition. So the first item in +#' the first partition gets index 0, and the last item in the last +#' partition receives the largest index. +#' +#' This method needs to trigger a Spark job when this RDD contains +#' more than one partition. +#' +#' @param x An RDD to be zipped. +#' @return An RDD with zipped items. #' @rdname zipWithIndex +#' @seealso zipWithUniqueId +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) +#' collect(zipWithIndex(rdd)) +#' # list(list("a", 0), list("b", 1), list("c", 2), list("d", 3), list("e", 4)) +#'} #' @aliases zipWithIndex,RDD setMethod("zipWithIndex", signature(x = "RDD"), @@ -845,7 +1374,21 @@ setMethod("zipWithIndex", ############ Binary Functions ############# +#' Return the union RDD of two RDDs. +#' The same as union() in Spark. +#' +#' @param x An RDD. +#' @param y An RDD. +#' @return a new RDD created by performing the simple union (witout removing +#' duplicates) of two input RDDs. #' @rdname unionRDD +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:3) +#' unionRDD(rdd, rdd) # 1, 2, 3, 1, 2, 3 +#'} #' @aliases unionRDD,RDD,RDD-method setMethod("unionRDD", signature(x = "RDD", y = "RDD"), diff --git a/pkg/R/broadcast.R b/pkg/R/broadcast.R index 7f9e1c179ac11..e589dfb668b06 100644 --- a/pkg/R/broadcast.R +++ b/pkg/R/broadcast.R @@ -28,7 +28,13 @@ Broadcast <- function(id, value, jBroadcastRef, objName) { new("Broadcast", id = id) } +#' @description +#' \code{value} can be used to get the value of a broadcast variable inside +#' a distributed function. +#' +#' @param bcast The broadcast variable to get #' @rdname broadcast +#' @export #' @aliases value,Broadcast-method setMethod("value", signature(bcast = "Broadcast"), diff --git a/pkg/R/generics.R b/pkg/R/generics.R new file mode 100644 index 0000000000000..85bdd088d2c4e --- /dev/null +++ b/pkg/R/generics.R @@ -0,0 +1,331 @@ +############ RDD Actions and Transformations ############ + +# The jrdd accessor function. +setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) + +#' @rdname cache-methods +#' @export +setGeneric("cache", function(x) { standardGeneric("cache") }) + +#' @rdname persist +#' @export +setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) + +#' @rdname unpersist-methods +#' @export +setGeneric("unpersist", function(x) { standardGeneric("unpersist") }) + +#' @rdname checkpoint-methods +#' @export +setGeneric("checkpoint", function(x) { standardGeneric("checkpoint") }) + +#' @rdname numPartitions +#' @export +setGeneric("numPartitions", function(x) { standardGeneric("numPartitions") }) + +#' @rdname collect-methods +#' @export +setGeneric("collect", function(x, ...) { standardGeneric("collect") }) + +#' @rdname collect-methods +#' @export +setGeneric("collectPartition", + function(x, partitionId) { + standardGeneric("collectPartition") + }) + +#' @rdname collect-methods +#' @export +setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) + +#' @rdname count +#' @export +setGeneric("count", function(x) { standardGeneric("count") }) + +#' @rdname countByValue +#' @export +setGeneric("countByValue", function(x) { standardGeneric("countByValue") }) + +#' @rdname lapply +#' @export +setGeneric("map", function(X, FUN) { + standardGeneric("map") }) + + +#' @rdname flatMap +#' @export +setGeneric("flatMap", function(X, FUN) { + standardGeneric("flatMap") }) + +#' @rdname lapplyPartition +#' @export +setGeneric("lapplyPartition", function(X, FUN) { + standardGeneric("lapplyPartition") }) + +#' @rdname lapplyPartition +#' @export +setGeneric("mapPartitions", function(X, FUN) { + standardGeneric("mapPartitions") }) + +#' @rdname lapplyPartitionsWithIndex +#' @export +setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { + standardGeneric("lapplyPartitionsWithIndex") }) + +#' @rdname lapplyPartitionsWithIndex +#' @export +setGeneric("mapPartitionsWithIndex", function(X, FUN) { + standardGeneric("mapPartitionsWithIndex") }) + +#' @rdname filterRDD +#' @export +setGeneric("filterRDD", + function(x, f) { standardGeneric("filterRDD") }) + +#' @rdname reduce +#' @export +setGeneric("reduce", function(x, func) { standardGeneric("reduce") }) + +#' @rdname maximum +#' @export +setGeneric("maximum", function(x) { standardGeneric("maximum") }) + +#' @rdname minimum +#' @export +setGeneric("minimum", function(x) { standardGeneric("minimum") }) + +#' @rdname foreach +#' @export +setGeneric("foreach", function(x, func) { standardGeneric("foreach") }) + +#' @rdname foreach +#' @export +setGeneric("foreachPartition", + function(x, func) { standardGeneric("foreachPartition") }) + +#' @rdname take +#' @export +setGeneric("take", function(x, num) { standardGeneric("take") }) + +#' @rdname distinct +#' @export +setGeneric("distinct", + function(x, numPartitions) { standardGeneric("distinct") }) + +#' @rdname sampleRDD +#' @export +setGeneric("sampleRDD", + function(x, withReplacement, fraction, seed) { + standardGeneric("sampleRDD") + }) + +#' @rdname takeSample +#' @export +setGeneric("takeSample", + function(x, withReplacement, num, seed) { + standardGeneric("takeSample") + }) + +#' @rdname keyBy +#' @export +setGeneric("keyBy", function(x, func) { standardGeneric("keyBy") }) + +#' @rdname repartition +#' @seealso coalesce +#' @export +setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartition") }) + +#' @rdname coalesce +#' @seealso repartition +#' @export +setGeneric("coalesce", function(x, numPartitions, ...) { standardGeneric("coalesce") }) + +#' @rdname saveAsObjectFile +#' @seealso objectFile +#' @export +setGeneric("saveAsObjectFile", function(x, path) { standardGeneric("saveAsObjectFile") }) + +#' @rdname saveAsTextFile +#' @export +setGeneric("saveAsTextFile", function(x, path) { standardGeneric("saveAsTextFile") }) + +#' @rdname sortBy +#' @export +setGeneric("sortBy", function(x, + func, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortBy") +}) + +#' @rdname takeOrdered +#' @export +setGeneric("takeOrdered", function(x, num) { standardGeneric("takeOrdered") }) + +#' @rdname top +#' @export +setGeneric("top", function(x, num) { standardGeneric("top") }) + +#' @rdname fold +#' @seealso reduce +#' @export +setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) + +#' @rdname aggregateRDD +#' @seealso reduce +#' @export +setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) + +#' @rdname pipeRDD +#' @export +setGeneric("pipeRDD", function(x, command, env = list()) { + standardGeneric("pipeRDD") +}) + +#' @rdname name +#' @export +setGeneric("name", function(x) { standardGeneric("name") }) + +#' @rdname setName +#' @export +setGeneric("setName", function(x, name) { standardGeneric("setName") }) + +#' @rdname zipWithUniqueId +#' @seealso zipWithIndex +#' @export +setGeneric("zipWithUniqueId", function(x) { standardGeneric("zipWithUniqueId") }) + +#' @rdname zipWithIndex +#' @seealso zipWithUniqueId +#' @export +setGeneric("zipWithIndex", function(x) { standardGeneric("zipWithIndex") }) + + +############ Binary Functions ############# + + +#' @rdname unionRDD +#' @export +setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) + +#' @rdname lookup +#' @export +setGeneric("lookup", function(x, key) { standardGeneric("lookup") }) + +#' @rdname countByKey +#' @export +setGeneric("countByKey", function(x) { standardGeneric("countByKey") }) + +#' @rdname keys +#' @export +setGeneric("keys", function(x) { standardGeneric("keys") }) + +#' @rdname values +#' @export +setGeneric("values", function(x) { standardGeneric("values") }) + +#' @rdname mapValues +#' @export +setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) + +#' @rdname flatMapValues +#' @export +setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) + + +############ Shuffle Functions ############ + + +#' @rdname partitionBy +#' @export +setGeneric("partitionBy", + function(x, numPartitions, ...) { + standardGeneric("partitionBy") + }) + +#' @rdname groupByKey +#' @seealso reduceByKey +#' @export +setGeneric("groupByKey", + function(x, numPartitions) { + standardGeneric("groupByKey") + }) + +#' @rdname reduceByKey +#' @seealso groupByKey +#' @export +setGeneric("reduceByKey", + function(x, combineFunc, numPartitions) { + standardGeneric("reduceByKey") + }) + +#' @rdname reduceByKeyLocally +#' @seealso reduceByKey +#' @export +setGeneric("reduceByKeyLocally", + function(x, combineFunc) { + standardGeneric("reduceByKeyLocally") + }) + +#' @rdname combineByKey +#' @seealso groupByKey, reduceByKey +#' @export +setGeneric("combineByKey", + function(x, createCombiner, mergeValue, mergeCombiners, numPartitions) { + standardGeneric("combineByKey") + }) + +#' @rdname aggregateByKey +#' @seealso foldByKey, combineByKey +#' @export +setGeneric("aggregateByKey", + function(x, zeroValue, seqOp, combOp, numPartitions) { + standardGeneric("aggregateByKey") + }) + +#' @rdname foldByKey +#' @seealso aggregateByKey, combineByKey +#' @export +setGeneric("foldByKey", + function(x, zeroValue, func, numPartitions) { + standardGeneric("foldByKey") + }) + +#' @rdname join-methods +#' @export +setGeneric("join", function(x, y, numPartitions) { standardGeneric("join") }) + +#' @rdname join-methods +#' @export +setGeneric("leftOuterJoin", function(x, y, numPartitions) { standardGeneric("leftOuterJoin") }) + +#' @rdname join-methods +#' @export +setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) + +#' @rdname join-methods +#' @export +setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) + +#' @rdname cogroup +#' @export +setGeneric("cogroup", + function(..., numPartitions) { standardGeneric("cogroup") }, + signature = "...") + +#' @rdname sortByKey +#' @export +setGeneric("sortByKey", function(x, + ascending = TRUE, + numPartitions = 1L) { + standardGeneric("sortByKey") +}) + + +############ Broadcast Variable Methods ############ + + +#' @rdname broadcast +#' @export +setGeneric("value", function(bcast) { standardGeneric("value") }) + diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index 665270385b583..dd33003aa191b 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -3,7 +3,23 @@ ############ Actions and Transformations ############ +#' Look up elements of a key in an RDD +#' +#' @description +#' \code{lookup} returns a list of values in this RDD for key key. +#' +#' @param x The RDD to collect +#' @param key The key to look up for +#' @return a list of values in this RDD for key key #' @rdname lookup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(c(1, 1), c(2, 2), c(1, 3)) +#' rdd <- parallelize(sc, pairs) +#' lookup(rdd, 1) # list(1, 3) +#'} #' @aliases lookup,RDD-method setMethod("lookup", signature(x = "RDD", key = "ANY"), @@ -16,7 +32,21 @@ setMethod("lookup", collect(valsRDD) }) +#' Count the number of elements for each key, and return the result to the +#' master as lists of (key, count) pairs. +#' +#' Same as countByKey in Spark. +#' +#' @param x The RDD to count keys. +#' @return list of (key, count) pairs, where count is number of each key in rdd. #' @rdname countByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) +#' countByKey(rdd) # ("a", 2L), ("b", 1L) +#'} #' @aliases countByKey,RDD-method setMethod("countByKey", signature(x = "RDD"), @@ -25,7 +55,17 @@ setMethod("countByKey", countByValue(keys) }) +#' Return an RDD with the keys of each tuple. +#' +#' @param x The RDD from which the keys of each tuple is returned. #' @rdname keys +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(keys(rdd)) # list(1, 3) +#'} #' @aliases keys,RDD setMethod("keys", signature(x = "RDD"), @@ -36,7 +76,17 @@ setMethod("keys", lapply(x, func) }) +#' Return an RDD with the values of each tuple. +#' +#' @param x The RDD from which the values of each tuple is returned. #' @rdname values +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) +#' collect(values(rdd)) # list(2, 4) +#'} #' @aliases values,RDD setMethod("values", signature(x = "RDD"), @@ -47,7 +97,23 @@ setMethod("values", lapply(x, func) }) +#' Applies a function to all values of the elements, without modifying the keys. +#' +#' The same as `mapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. #' @rdname mapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, 1:10) +#' makePairs <- lapply(rdd, function(x) { list(x, x) }) +#' collect(mapValues(makePairs, function(x) { x * 2) }) +#' Output: list(list(1,2), list(2,4), list(3,6), ...) +#'} #' @aliases mapValues,RDD,function-method setMethod("mapValues", signature(X = "RDD", FUN = "function"), @@ -58,7 +124,23 @@ setMethod("mapValues", lapply(X, func) }) +#' Pass each value in the key-value pair RDD through a flatMap function without +#' changing the keys; this also retains the original RDD's partitioning. +#' +#' The same as 'flatMapValues()' in Spark. +#' +#' @param X The RDD to apply the transformation. +#' @param FUN the transformation to apply on the value of each element. +#' @return a new RDD created by the transformation. #' @rdname flatMapValues +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) +#' collect(flatMapValues(rdd, function(x) { x })) +#' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) +#'} #' @aliases flatMapValues,RDD,function-method setMethod("flatMapValues", signature(X = "RDD", FUN = "function"), @@ -72,7 +154,30 @@ setMethod("flatMapValues", ############ Shuffle Functions ############ +#' Partition an RDD by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' For each element of this RDD, the partitioner is used to compute a hash +#' function and the RDD is partitioned using this hash value. +#' +#' @param x The RDD to partition. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param numPartitions Number of partitions to create. +#' @param ... Other optional arguments to partitionBy. +#' +#' @param partitionFunc The partition function to use. Uses a default hashCode +#' function if not provided +#' @return An RDD partitioned using the specified partitioner. #' @rdname partitionBy +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- partitionBy(rdd, 2L) +#' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) +#'} #' @aliases partitionBy,RDD,integer-method setMethod("partitionBy", signature(x = "RDD", numPartitions = "integer"), @@ -119,7 +224,27 @@ setMethod("partitionBy", RDD(r, serialized = TRUE) }) +#' Group values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and group values for each key in the RDD into a single sequence. +#' +#' @param x The RDD to group. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, list(V)) +#' @seealso reduceByKey #' @rdname groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- groupByKey(rdd, 2L) +#' grouped <- collect(parts) +#' grouped[[1]] # Should be a list(1, list(2, 4)) +#'} #' @aliases groupByKey,RDD,integer-method setMethod("groupByKey", signature(x = "RDD", numPartitions = "integer"), @@ -158,7 +283,29 @@ setMethod("groupByKey", lapplyPartition(shuffled, groupVals) }) +#' Merge values by key +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function. +#' +#' @param x The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, V') where V' is the merged +#' value #' @rdname reduceByKey +#' @seealso groupByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- reduceByKey(rdd, "+", 2L) +#' reduced <- collect(parts) +#' reduced[[1]] # Should be a list(1, 6) +#'} #' @aliases reduceByKey,RDD,integer-method setMethod("reduceByKey", signature(x = "RDD", combineFunc = "ANY", numPartitions = "integer"), @@ -179,7 +326,27 @@ setMethod("reduceByKey", lapplyPartition(shuffled, reduceVals) }) +#' Merge values by key locally +#' +#' This function operates on RDDs where every element is of the form list(K, V) or c(K, V). +#' and merges the values for each key using an associative reduce function, but return the +#' results immediately to the driver as an R list. +#' +#' @param x The RDD to reduce by key. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param combineFunc The associative reduce function to use. +#' @return A list of elements of type list(K, V') where V' is the merged value for each key #' @rdname reduceByKeyLocally +#' @seealso reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' reduced <- reduceByKeyLocally(rdd, "+") +#' reduced # list(list(1, 6), list(1.1, 3)) +#'} #' @aliases reduceByKeyLocally,RDD,integer-method setMethod("reduceByKeyLocally", signature(x = "RDD", combineFunc = "ANY"), @@ -212,7 +379,41 @@ setMethod("reduceByKeyLocally", convertEnvsToList(merged[[1]], merged[[2]]) }) +#' Combine values by key +#' +#' Generic function to combine the elements for each key using a custom set of +#' aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], +#' for a "combined type" C. Note that V and C can be different -- for example, one +#' might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). + +#' Users provide three functions: +#' \itemize{ +#' \item createCombiner, which turns a V into a C (e.g., creates a one-element list) +#' \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - +#' \item mergeCombiners, to combine two C's into a single one (e.g., concatentates +#' two lists). +#' } +#' +#' @param x The RDD to combine. Should be an RDD where each element is +#' list(K, V) or c(K, V). +#' @param createCombiner Create a combiner (C) given a value (V) +#' @param mergeValue Merge the given value (V) with an existing combiner (C) +#' @param mergeCombiners Merge two combiners and return a new combiner +#' @param numPartitions Number of partitions to create. +#' @return An RDD where each element is list(K, C) where C is the combined type +#' #' @rdname combineByKey +#' @seealso groupByKey, reduceByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) +#' rdd <- parallelize(sc, pairs) +#' parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) +#' combined <- collect(parts) +#' combined[[1]] # Should be a list(1, 6) +#'} #' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method setMethod("combineByKey", signature(x = "RDD", createCombiner = "ANY", mergeValue = "ANY", @@ -245,7 +446,36 @@ setMethod("combineByKey", lapplyPartition(shuffled, mergeAfterShuffle) }) +#' Aggregate a pair RDD by each key. +#' +#' Aggregate the values of each key in an RDD, using given combine functions +#' and a neutral "zero value". This function can return a different result type, +#' U, than the type of the values in this RDD, V. Thus, we need one operation +#' for merging a V into a U and one operation for merging two U's, The former +#' operation is used for merging values within a partition, and the latter is +#' used for merging values between partitions. To avoid memory allocation, both +#' of these functions are allowed to modify and return their first argument +#' instead of creating a new U. +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param seqOp A function to aggregate the values of each key. It may return +#' a different result type from the type of the values. +#' @param combOp A function to aggregate results of seqOp. +#' @return An RDD containing the aggregation result. #' @rdname aggregateByKey +#' @seealso foldByKey, combineByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +#' zeroValue <- list(0, 0) +#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } +#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } +#' aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) +#' # list(list(1, list(3, 2)), list(2, list(7, 2))) +#'} #' @aliases aggregateByKey,RDD,ANY,ANY,ANY,integer-method setMethod("aggregateByKey", signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", @@ -258,7 +488,26 @@ setMethod("aggregateByKey", combineByKey(x, createCombiner, seqOp, combOp, numPartitions) }) +#' Fold a pair RDD by each key. +#' +#' Aggregate the values of each key in an RDD, using an associative function "func" +#' and a neutral "zero value" which may be added to the result an arbitrary +#' number of times, and must not change the result (e.g., 0 for addition, or +#' 1 for multiplication.). +#' +#' @param x An RDD. +#' @param zeroValue A neutral "zero value". +#' @param func An associative function for folding values of each key. +#' @return An RDD containing the aggregation result. #' @rdname foldByKey +#' @seealso aggregateByKey, combineByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) +#' foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) +#'} #' @aliases foldByKey,RDD,ANY,ANY,integer-method setMethod("foldByKey", signature(x = "RDD", zeroValue = "ANY", @@ -270,7 +519,28 @@ setMethod("foldByKey", ############ Binary Functions ############# +#' Join two RDDs +#' +#' @description +#' \code{join} This function joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param x An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param y An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with matching keys in +#' two input RDDs. #' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) +#'} #' @aliases join,RDD,RDD-method setMethod("join", signature(x = "RDD", y = "RDD", numPartitions = "integer"), @@ -285,7 +555,30 @@ setMethod("join", joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) +#' Left outer join two RDDs +#' +#' @description +#' \code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param x An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param y An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in x, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) +#' if no elements in rdd2 have key k. #' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' leftOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) +#'} #' @aliases leftOuterJoin,RDD,RDD-method setMethod("leftOuterJoin", signature(x = "RDD", y = "RDD", numPartitions = "integer"), @@ -300,7 +593,30 @@ setMethod("leftOuterJoin", joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) +#' Right outer join two RDDs +#' +#' @description +#' \code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param x An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param y An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, w) in y, the resulting RDD will either contain +#' all pairs (k, (v, w)) for (k, v) in x, or the pair (k, (NULL, w)) +#' if no elements in x have key k. #' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rightOuterJoin(rdd1, rdd2, 2L) +#' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) +#'} #' @aliases rightOuterJoin,RDD,RDD-method setMethod("rightOuterJoin", signature(x = "RDD", y = "RDD", numPartitions = "integer"), @@ -315,9 +631,34 @@ setMethod("rightOuterJoin", joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) +#' Full outer join two RDDs +#' +#' @description +#' \code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). +#' The key types of the two RDDs should be the same. +#' +#' @param x An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param y An RDD to be joined. Should be an RDD where each element is +#' list(K, V). +#' @param numPartitions Number of partitions to create. +#' @return For each element (k, v) in x and (k, w) in y, the resulting RDD +#' will contain all pairs (k, (v, w)) for both (k, v) in x and +#' (k, w) in y, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements +#' in x/y have key k. #' @rdname join-methods +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) +#' rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), +#' # list(1, list(3, 1)), +#' # list(2, list(NULL, 4))) +#' # list(3, list(3, NULL)), +#'} #' @aliases fullOuterJoin,RDD,RDD-method - setMethod("fullOuterJoin", signature(x = "RDD", y = "RDD", numPartitions = "integer"), function(x, y, numPartitions) { @@ -331,7 +672,23 @@ setMethod("fullOuterJoin", joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) +#' For each key k in several RDDs, return a resulting RDD that +#' whose values are a list of values for the key in all RDDs. +#' +#' @param ... Several RDDs. +#' @param numPartitions Number of partitions to create. +#' @return a new RDD containing all pairs of elements with values in a list +#' in all RDDs. #' @rdname cogroup +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) +#' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) +#' cogroup(rdd1, rdd2, numPartitions = 2L) +#' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) +#'} #' @aliases cogroup,RDD-method setMethod("cogroup", "RDD", @@ -372,7 +729,20 @@ setMethod("cogroup", group.func) }) +#' Sort a (k, v) pair RDD by k. +#' +#' @param x A (k, v) pair RDD to be sorted. +#' @param ascending A flag to indicate whether the sorting is ascending or descending. +#' @param numPartitions Number of partitions to create. +#' @return An RDD where all (k, v) pair elements are sorted. #' @rdname sortByKey +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) +#' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) +#'} #' @aliases sortByKey,RDD,RDD-method setMethod("sortByKey", signature(x = "RDD"), From 8f8813faee633c7b51f0cf89d845ba2ae248df8b Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 9 Mar 2015 13:57:43 -0700 Subject: [PATCH 600/687] switch back to use parallel --- pkg/inst/worker/daemon.R | 66 +++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/pkg/inst/worker/daemon.R b/pkg/inst/worker/daemon.R index 381b3c42d7041..5af55aa4b255c 100644 --- a/pkg/inst/worker/daemon.R +++ b/pkg/inst/worker/daemon.R @@ -1,11 +1,5 @@ # Worker daemon -# try to load `fork`, or install -FORK_URI <- "http://cran.r-project.org/src/contrib/Archive/fork/fork_1.2.4.tar.gz" -tryCatch(library(fork), error = function(err) { - install.packages(FORK_URI, repos = NULL, type = "source") -}) - rLibDir <- Sys.getenv("SPARKR_RLIBDIR") script <- paste(rLibDir, "SparkR/worker/worker.R", sep = "/") @@ -14,26 +8,50 @@ script <- paste(rLibDir, "SparkR/worker/worker.R", sep = "/") suppressPackageStartupMessages(library(SparkR)) port <- as.integer(Sys.getenv("SPARKR_WORKER_PORT")) -inputCon <- socketConnection(port = port, blocking = TRUE, open = "rb") +inputCon <- socketConnection(port = port, open = "rb", blocking = TRUE, timeout = 3600) + +# Read from connection, retrying to read exactly 'size' bytes +readBinFull <- function(con, size) { + # readBin() could be interruptted by signal, we have no way to tell + # if it's interruptted or the socket is closed, so we retry at most + # 20 times, to avoid the deadloop if the socket is closed + c <- 1 + data <- readBin(con, raw(), size) + while (length(data) < size && c < 20) { + extra <- readBin(con, raw(), size - length(data)) + data <- c(data, extra) + c <- c + 1 + } + data +} + +# Utility function to read the port with retry +# Returns -1 if the socket was closed +readPort <- function(con) { + data <- readBinFull(con, 4L) + if (length(data) != 4) { + -1 + } else { + rc <- rawConnection(data) + ret <- SparkR:::readInt(rc) + close(rc) + ret + } +} while (TRUE) { - ready <- socketSelect(list(inputCon), timeout = 1) - if (ready) { - inport <- SparkR:::readInt(inputCon) - if (length(inport) != 1) { - quit(save="no") - } - p <- fork::fork(NULL) - if (p == 0) { - close(inputCon) - Sys.setenv(SPARKR_WORKER_PORT = inport) - source(script) - fork::exit(0) - } + port <- readPort(inputCon) + if (port < 0) { + cat("quitting daemon\n") + quit(save = "no") } - # cleanup all the child process - status <- fork::wait(0, nohang = TRUE) - while (status[1] > 0) { - status <- fork::wait(0, nohang = TRUE) + p <- parallel:::mcfork() + if (inherits(p, "masterProcess")) { + close(inputCon) + Sys.setenv(SPARKR_WORKER_PORT = port) + source(script) + # Set SIGUSR1 so that child can exit + tools::pskill(Sys.getpid(), tools::SIGUSR1) + parallel:::mcexit(0L) } } From 411b751ebda76b43dab7c2f80cdd4cb6c27fc8db Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 9 Mar 2015 15:13:50 -0700 Subject: [PATCH 601/687] make RStudio happy --- pkg/R/sparkR.R | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index d92b908ad5502..44ee3dbec3836 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -193,5 +193,10 @@ sparkR.init <- function( envir = .sparkREnv ) - get(".sparkRjsc", envir = .sparkREnv) + sc <- get(".sparkRjsc", envir = .sparkREnv) + + # Register a finalizer to sleep 1 seconds on R exit to make RStudio happy + reg.finalizer(.sparkREnv, function(x) { Sys.sleep(1) }, onexit = TRUE) + + sc } From ecdfda10f79f92fb14937a17797d7ef6aed4a41f Mon Sep 17 00:00:00 2001 From: hlin09 Date: Mon, 9 Mar 2015 22:22:02 -0400 Subject: [PATCH 602/687] Remove duplication. --- pkg/R/RDD.R | 122 +++++++++++++++------------------------------- pkg/R/broadcast.R | 1 - pkg/R/pairRDD.R | 57 ++++++++-------------- 3 files changed, 58 insertions(+), 122 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 8a98d408709ab..9134258eca2fd 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -164,14 +164,13 @@ setValidity("RDD", #' Persist this RDD with the default storage level (MEMORY_ONLY). #' #' @param x The RDD to cache -#' @rdname cache-methods -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10, 2L) #' cache(rdd) #'} +#' @rdname cache-methods #' @aliases cache,RDD-method setMethod("cache", signature(x = "RDD"), @@ -189,14 +188,13 @@ setMethod("cache", #' #' @param x The RDD to persist #' @param newLevel The new storage level to be assigned -#' @rdname persist -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10, 2L) #' persist(rdd, "MEMORY_AND_DISK") #'} +#' @rdname persist #' @aliases persist,RDD-method setMethod("persist", signature(x = "RDD", newLevel = "character"), @@ -236,8 +234,6 @@ setMethod("persist", #' disk. #' #' @param rdd The RDD to unpersist -#' @rdname unpersist-methods -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -245,6 +241,7 @@ setMethod("persist", #' cache(rdd) # rdd@@env$isCached == TRUE #' unpersist(rdd) # rdd@@env$isCached == FALSE #'} +#' @rdname unpersist-methods #' @aliases unpersist,RDD-method setMethod("unpersist", signature(x = "RDD"), @@ -263,8 +260,6 @@ setMethod("unpersist", #' persisted in memory, otherwise saving it on a file will require recomputation. #' #' @param rdd The RDD to checkpoint -#' @rdname checkpoint-methods -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -272,6 +267,7 @@ setMethod("unpersist", #' rdd <- parallelize(sc, 1:10, 2L) #' checkpoint(rdd) #'} +#' @rdname checkpoint-methods #' @aliases checkpoint,RDD-method setMethod("checkpoint", signature(x = "RDD"), @@ -286,14 +282,13 @@ setMethod("checkpoint", #' #' @param x A RDD. #' @return the number of partitions of rdd as an integer. -#' @rdname numPartitions -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10, 2L) #' numPartitions(rdd) # 2L #'} +#' @rdname numPartitions #' @aliases numPartitions,RDD-method setMethod("numPartitions", signature(x = "RDD"), @@ -312,8 +307,6 @@ setMethod("numPartitions", #' @param ... Other optional arguments to collect #' @param flatten FALSE if the list should not flattened #' @return a list containing elements in the RDD -#' @rdname collect-methods -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -321,6 +314,7 @@ setMethod("numPartitions", #' collect(rdd) # list from 1 to 10 #' collectPartition(rdd, 0L) # list from 1 to 5 #'} +#' @rdname collect-methods #' @aliases collect,RDD-method setMethod("collect", signature(x = "RDD"), @@ -330,12 +324,11 @@ setMethod("collect", convertJListToRList(collected, flatten) }) -#' @rdname collect-methods -#' @export #' @description #' \code{collectPartition} returns a list that contains all of the elements #' in the specified partition of the RDD. #' @param partitionId the partition to collect (starts from 0) +#' @rdname collect-methods #' @aliases collectPartition,integer,RDD-method setMethod("collectPartition", signature(x = "RDD", partitionId = "integer"), @@ -348,8 +341,6 @@ setMethod("collectPartition", convertJListToRList(jList, flatten = TRUE) }) -#' @rdname collect-methods -#' @export #' @description #' \code{collectAsMap} returns a named list as a map that contains all of the elements #' in a key-value pair RDD. @@ -359,6 +350,7 @@ setMethod("collectPartition", #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) #' collectAsMap(rdd) # list(`1` = 2, `3` = 4) #'} +#' @rdname collect-methods #' @aliases collectAsMap,RDD-method setMethod("collectAsMap", signature(x = "RDD"), @@ -373,8 +365,6 @@ setMethod("collectAsMap", #' #' @param x The RDD to count #' @return number of elements in the RDD. -#' @rdname count -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -382,6 +372,7 @@ setMethod("collectAsMap", #' count(rdd) # 10 #' length(rdd) # Same as count #'} +#' @rdname count #' @aliases count,RDD-method setMethod("count", signature(x = "RDD"), @@ -411,14 +402,13 @@ setMethod("length", #' @param x The RDD to count #' @return list of (value, count) pairs, where count is number of each unique #' value in rdd. -#' @rdname countByValue -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, c(1,2,3,2,1)) #' countByValue(rdd) # (1,2L), (2,2L), (3,1L) #'} +#' @rdname countByValue #' @aliases countByValue,RDD-method setMethod("countByValue", signature(x = "RDD"), @@ -437,7 +427,6 @@ setMethod("countByValue", #' @return a new RDD created by the transformation. #' @rdname lapply #' @aliases lapply -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -455,7 +444,6 @@ setMethod("lapply", }) #' @rdname lapply -#' @export #' @aliases map,RDD,function-method setMethod("map", signature(X = "RDD", FUN = "function"), @@ -471,8 +459,6 @@ setMethod("map", #' @param X The RDD to apply the transformation. #' @param FUN the transformation to apply on each element #' @return a new RDD created by the transformation. -#' @rdname flatMap -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -480,6 +466,7 @@ setMethod("map", #' multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) #' collect(multiplyByTwo) # 2,20,4,40,6,60... #'} +#' @rdname flatMap #' @aliases flatMap,RDD,function-method setMethod("flatMap", signature(X = "RDD", FUN = "function"), @@ -500,8 +487,6 @@ setMethod("flatMap", #' @param X The RDD to apply the transformation. #' @param FUN the transformation to apply on each partition. #' @return a new RDD created by the transformation. -#' @rdname lapplyPartition -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -509,6 +494,7 @@ setMethod("flatMap", #' partitionSum <- lapplyPartition(rdd, function(part) { Reduce("+", part) }) #' collect(partitionSum) # 15, 40 #'} +#' @rdname lapplyPartition #' @aliases lapplyPartition,RDD,function-method setMethod("lapplyPartition", signature(X = "RDD", FUN = "function"), @@ -519,7 +505,6 @@ setMethod("lapplyPartition", #' mapPartitions is the same as lapplyPartition. #' #' @rdname lapplyPartition -#' @export #' @aliases mapPartitions,RDD,function-method setMethod("mapPartitions", signature(X = "RDD", FUN = "function"), @@ -534,8 +519,6 @@ setMethod("mapPartitions", #' @param FUN the transformation to apply on each partition; takes the partition #' index and a list of elements in the particular partition. #' @return a new RDD created by the transformation. -#' @rdname lapplyPartitionsWithIndex -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -544,6 +527,7 @@ setMethod("mapPartitions", #' split * Reduce("+", part) }) #' collect(prod, flatten = FALSE) # 0, 7, 22, 45, 76 #'} +#' @rdname lapplyPartitionsWithIndex #' @aliases lapplyPartitionsWithIndex,RDD,function-method setMethod("lapplyPartitionsWithIndex", signature(X = "RDD", FUN = "function"), @@ -556,7 +540,6 @@ setMethod("lapplyPartitionsWithIndex", }) #' @rdname lapplyPartitionsWithIndex -#' @export #' @aliases mapPartitionsWithIndex,RDD,function-method setMethod("mapPartitionsWithIndex", signature(X = "RDD", FUN = "function"), @@ -570,14 +553,13 @@ setMethod("mapPartitionsWithIndex", #' #' @param x The RDD to be filtered. #' @param f A unary predicate function. -#' @rdname filterRDD -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) #'} +#' @rdname filterRDD #' @aliases filterRDD,RDD,function-method setMethod("filterRDD", signature(x = "RDD", f = "function"), @@ -589,7 +571,6 @@ setMethod("filterRDD", }) #' @rdname filterRDD -#' @export #' @aliases Filter setMethod("Filter", signature(f = "function", x = "RDD"), @@ -605,14 +586,13 @@ setMethod("Filter", #' @param rdd The RDD to reduce #' @param func Commutative and associative function to apply on elements #' of the RDD. -#' @export -#' @rdname reduce #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' reduce(rdd, "+") # 55 #'} +#' @rdname reduce #' @aliases reduce,RDD,ANY-method setMethod("reduce", signature(x = "RDD", func = "ANY"), @@ -630,14 +610,13 @@ setMethod("reduce", #' Get the maximum element of an RDD. #' #' @param x The RDD to get the maximum element from -#' @export -#' @rdname maximum #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' maximum(rdd) # 10 #'} +#' @rdname maximum #' @aliases maximum,RDD setMethod("maximum", signature(x = "RDD"), @@ -648,14 +627,13 @@ setMethod("maximum", #' Get the minimum element of an RDD. #' #' @param x The RDD to get the minimum element from -#' @export -#' @rdname minimum #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' minimum(rdd) # 1 #'} +#' @rdname minimum #' @aliases minimum,RDD setMethod("minimum", signature(x = "RDD"), @@ -668,14 +646,13 @@ setMethod("minimum", #' @param x The RDD to apply the function #' @param func The function to be applied. #' @return invisible NULL. -#' @export -#' @rdname foreach #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' foreach(rdd, function(x) { save(x, file=...) }) #'} +#' @rdname foreach #' @aliases foreach,RDD,function-method setMethod("foreach", signature(x = "RDD", func = "function"), @@ -689,14 +666,13 @@ setMethod("foreach", #' Applies a function to each partition in an RDD, and force evaluation. #' -#' @export -#' @rdname foreach #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' foreachPartition(rdd, function(part) { save(part, file=...); NULL }) #'} +#' @rdname foreach #' @aliases foreachPartition,RDD,function-method setMethod("foreachPartition", signature(x = "RDD", func = "function"), @@ -711,14 +687,13 @@ setMethod("foreachPartition", #' #' @param x The RDD to take elements from #' @param num Number of elements to take -#' @rdname take -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:10) #' take(rdd, 2L) # list(1, 2) #'} +#' @rdname take #' @aliases take,RDD,numeric-method setMethod("take", signature(x = "RDD", num = "numeric"), @@ -760,14 +735,13 @@ setClassUnion("missingOrInteger", c("missing", "integer")) #' #' @param x The RDD to remove duplicates from. #' @param numPartitions Number of partitions to create. -#' @rdname distinct -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, c(1,2,2,3,3,3)) #' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) #'} +#' @rdname distinct #' @aliases distinct,RDD,missingOrInteger-method setMethod("distinct", signature(x = "RDD", numPartitions = "missingOrInteger"), @@ -792,8 +766,6 @@ setMethod("distinct", #' @param withReplacement Sampling with replacement or not #' @param fraction The (rough) sample target fraction #' @param seed Randomness seed value -#' @rdname sampleRDD -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -801,6 +773,7 @@ setMethod("distinct", #' collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) # ~5 distinct elements #' collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates #'} +#' @rdname sampleRDD #' @aliases sampleRDD,RDD setMethod("sampleRDD", signature(x = "RDD", withReplacement = "logical", @@ -851,8 +824,6 @@ setMethod("sampleRDD", #' @param withReplacement Sampling with replacement or not #' @param num Number of elements to return #' @param seed Randomness seed value -#' @rdname takeSample -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -862,6 +833,7 @@ setMethod("sampleRDD", #' # exactly 5 distinct elements sampled #' takeSample(rdd, FALSE, 5L, 16181618L) #'} +#' @rdname takeSample #' @aliases takeSample,RDD setMethod("takeSample", signature(x = "RDD", withReplacement = "logical", num = "integer", seed = "integer"), @@ -913,14 +885,13 @@ setMethod("takeSample", signature(x = "RDD", withReplacement = "logical", #' #' @param x The RDD. #' @param func The function to be applied. -#' @rdname keyBy -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(1, 2, 3)) #' collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) #'} +#' @rdname keyBy #' @aliases keyBy,RDD setMethod("keyBy", signature(x = "RDD", func = "function"), @@ -939,9 +910,7 @@ setMethod("keyBy", #' #' @param x The RDD. #' @param numPartitions Number of partitions to create. -#' @rdname repartition #' @seealso coalesce -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -949,6 +918,7 @@ setMethod("keyBy", #' numPartitions(rdd) # 4 #' numPartitions(repartition(rdd, 2L)) # 2 #'} +#' @rdname repartition #' @aliases repartition,RDD setMethod("repartition", signature(x = "RDD", numPartitions = "numeric"), @@ -960,9 +930,7 @@ setMethod("repartition", #' #' @param x The RDD. #' @param numPartitions Number of partitions to create. -#' @rdname coalesce #' @seealso repartition -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -970,6 +938,7 @@ setMethod("repartition", #' numPartitions(rdd) # 3 #' numPartitions(coalesce(rdd, 1L)) # 1 #'} +#' @rdname coalesce #' @aliases coalesce,RDD setMethod("coalesce", signature(x = "RDD", numPartitions = "numeric"), @@ -1001,15 +970,14 @@ setMethod("coalesce", #' #' @param x The RDD to save #' @param path The directory where the file is saved -#' @rdname saveAsObjectFile #' @seealso objectFile -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:3) #' saveAsObjectFile(rdd, "/tmp/sparkR-tmp") #'} +#' @rdname saveAsObjectFile #' @aliases saveAsObjectFile,RDD setMethod("saveAsObjectFile", signature(x = "RDD", path = "character"), @@ -1027,14 +995,13 @@ setMethod("saveAsObjectFile", #' #' @param x The RDD to save #' @param path The directory where the splits of the text file are saved -#' @rdname saveAsTextFile -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:3) #' saveAsTextFile(rdd, "/tmp/sparkR-tmp") #'} +#' @rdname saveAsTextFile #' @aliases saveAsTextFile,RDD setMethod("saveAsTextFile", signature(x = "RDD", path = "character"), @@ -1055,14 +1022,13 @@ setMethod("saveAsTextFile", #' @param ascending A flag to indicate whether the sorting is ascending or descending. #' @param numPartitions Number of partitions to create. #' @return An RDD where all elements are sorted. -#' @rdname sortBy -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(3, 2, 1)) #' collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) #'} +#' @rdname sortBy #' @aliases sortBy,RDD,RDD-method setMethod("sortBy", signature(x = "RDD", func = "function"), @@ -1109,14 +1075,13 @@ takeOrderedElem <- function(x, num, ascending = TRUE) { #' @param x An RDD. #' @param num Number of elements to return. #' @return The first N elements from the RDD in ascending order. -#' @rdname takeOrdered -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) #' takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) #'} +#' @rdname takeOrdered #' @aliases takeOrdered,RDD,RDD-method setMethod("takeOrdered", signature(x = "RDD", num = "integer"), @@ -1129,14 +1094,13 @@ setMethod("takeOrdered", #' @param x An RDD. #' @param num Number of elements to return. #' @return The top N elements from the RDD. -#' @rdname top -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) #' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) #'} +#' @rdname top #' @aliases top,RDD,RDD-method setMethod("top", signature(x = "RDD", num = "integer"), @@ -1153,15 +1117,14 @@ setMethod("top", #' @param zeroValue A neutral "zero value". #' @param op An associative function for the folding operation. #' @return The folding result. -#' @rdname fold #' @seealso reduce -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) #' fold(rdd, 0, "+") # 15 #'} +#' @rdname fold #' @aliases fold,RDD,RDD-method setMethod("fold", signature(x = "RDD", zeroValue = "ANY", op = "ANY"), @@ -1180,9 +1143,7 @@ setMethod("fold", #' result type from the type of the RDD elements. #' @param combOp A function to aggregate results of seqOp. #' @return The aggregation result. -#' @rdname aggregateRDD #' @seealso reduce -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -1192,6 +1153,7 @@ setMethod("fold", #' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } #' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) #'} +#' @rdname aggregateRDD #' @aliases aggregateRDD,RDD,RDD-method setMethod("aggregateRDD", signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), @@ -1213,8 +1175,6 @@ setMethod("aggregateRDD", #' @param command The command to fork an external process. #' @param env A named list to set environment variables of the external process. #' @return A new RDD created by piping all elements to a forked external process. -#' @rdname pipeRDD -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -1222,6 +1182,7 @@ setMethod("aggregateRDD", #' collect(pipeRDD(rdd, "more") #' Output: c("1", "2", ..., "10") #'} +#' @rdname pipeRDD #' @aliases pipeRDD,RDD,character-method setMethod("pipeRDD", signature(x = "RDD", command = "character"), @@ -1241,14 +1202,13 @@ setMethod("pipeRDD", #' Return an RDD's name. #' #' @param x The RDD whose name is returned. -#' @rdname name -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(1,2,3)) #' name(rdd) # NULL (if not set before) #'} +#' @rdname name #' @aliases name,RDD setMethod("name", signature(x = "RDD"), @@ -1261,8 +1221,6 @@ setMethod("name", #' @param x The RDD whose name is to be set. #' @param name The RDD name to be set. #' @return a new RDD renamed. -#' @rdname setName -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -1270,6 +1228,7 @@ setMethod("name", #' setName(rdd, "myRDD") #' name(rdd) # "myRDD" #'} +#' @rdname setName #' @aliases setName,RDD setMethod("setName", signature(x = "RDD", name = "character"), @@ -1287,9 +1246,7 @@ setMethod("setName", #' #' @param x An RDD to be zipped. #' @return An RDD with zipped items. -#' @rdname zipWithUniqueId #' @seealso zipWithIndex -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -1297,6 +1254,7 @@ setMethod("setName", #' collect(zipWithUniqueId(rdd)) #' # list(list("a", 0), list("b", 3), list("c", 1), list("d", 4), list("e", 2)) #'} +#' @rdname zipWithUniqueId #' @aliases zipWithUniqueId,RDD setMethod("zipWithUniqueId", signature(x = "RDD"), @@ -1328,9 +1286,7 @@ setMethod("zipWithUniqueId", #' #' @param x An RDD to be zipped. #' @return An RDD with zipped items. -#' @rdname zipWithIndex #' @seealso zipWithUniqueId -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -1338,6 +1294,7 @@ setMethod("zipWithUniqueId", #' collect(zipWithIndex(rdd)) #' # list(list("a", 0), list("b", 1), list("c", 2), list("d", 3), list("e", 4)) #'} +#' @rdname zipWithIndex #' @aliases zipWithIndex,RDD setMethod("zipWithIndex", signature(x = "RDD"), @@ -1381,14 +1338,13 @@ setMethod("zipWithIndex", #' @param y An RDD. #' @return a new RDD created by performing the simple union (witout removing #' duplicates) of two input RDDs. -#' @rdname unionRDD -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, 1:3) #' unionRDD(rdd, rdd) # 1, 2, 3, 1, 2, 3 #'} +#' @rdname unionRDD #' @aliases unionRDD,RDD,RDD-method setMethod("unionRDD", signature(x = "RDD", y = "RDD"), diff --git a/pkg/R/broadcast.R b/pkg/R/broadcast.R index e589dfb668b06..e359d81b151d4 100644 --- a/pkg/R/broadcast.R +++ b/pkg/R/broadcast.R @@ -34,7 +34,6 @@ Broadcast <- function(id, value, jBroadcastRef, objName) { #' #' @param bcast The broadcast variable to get #' @rdname broadcast -#' @export #' @aliases value,Broadcast-method setMethod("value", signature(bcast = "Broadcast"), diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index dd33003aa191b..722da9238f734 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -11,8 +11,6 @@ #' @param x The RDD to collect #' @param key The key to look up for #' @return a list of values in this RDD for key key -#' @rdname lookup -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -20,6 +18,7 @@ #' rdd <- parallelize(sc, pairs) #' lookup(rdd, 1) # list(1, 3) #'} +#' @rdname lookup #' @aliases lookup,RDD-method setMethod("lookup", signature(x = "RDD", key = "ANY"), @@ -39,14 +38,13 @@ setMethod("lookup", #' #' @param x The RDD to count keys. #' @return list of (key, count) pairs, where count is number of each key in rdd. -#' @rdname countByKey -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) #' countByKey(rdd) # ("a", 2L), ("b", 1L) #'} +#' @rdname countByKey #' @aliases countByKey,RDD-method setMethod("countByKey", signature(x = "RDD"), @@ -58,14 +56,13 @@ setMethod("countByKey", #' Return an RDD with the keys of each tuple. #' #' @param x The RDD from which the keys of each tuple is returned. -#' @rdname keys -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) #' collect(keys(rdd)) # list(1, 3) #'} +#' @rdname keys #' @aliases keys,RDD setMethod("keys", signature(x = "RDD"), @@ -79,14 +76,13 @@ setMethod("keys", #' Return an RDD with the values of each tuple. #' #' @param x The RDD from which the values of each tuple is returned. -#' @rdname values -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) #' collect(values(rdd)) # list(2, 4) #'} +#' @rdname values #' @aliases values,RDD setMethod("values", signature(x = "RDD"), @@ -104,8 +100,6 @@ setMethod("values", #' @param X The RDD to apply the transformation. #' @param FUN the transformation to apply on the value of each element. #' @return a new RDD created by the transformation. -#' @rdname mapValues -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -114,6 +108,7 @@ setMethod("values", #' collect(mapValues(makePairs, function(x) { x * 2) }) #' Output: list(list(1,2), list(2,4), list(3,6), ...) #'} +#' @rdname mapValues #' @aliases mapValues,RDD,function-method setMethod("mapValues", signature(X = "RDD", FUN = "function"), @@ -132,8 +127,6 @@ setMethod("mapValues", #' @param X The RDD to apply the transformation. #' @param FUN the transformation to apply on the value of each element. #' @return a new RDD created by the transformation. -#' @rdname flatMapValues -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -141,6 +134,7 @@ setMethod("mapValues", #' collect(flatMapValues(rdd, function(x) { x })) #' Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) #'} +#' @rdname flatMapValues #' @aliases flatMapValues,RDD,function-method setMethod("flatMapValues", signature(X = "RDD", FUN = "function"), @@ -168,8 +162,6 @@ setMethod("flatMapValues", #' @param partitionFunc The partition function to use. Uses a default hashCode #' function if not provided #' @return An RDD partitioned using the specified partitioner. -#' @rdname partitionBy -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -178,6 +170,7 @@ setMethod("flatMapValues", #' parts <- partitionBy(rdd, 2L) #' collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) #'} +#' @rdname partitionBy #' @aliases partitionBy,RDD,integer-method setMethod("partitionBy", signature(x = "RDD", numPartitions = "integer"), @@ -234,8 +227,6 @@ setMethod("partitionBy", #' @param numPartitions Number of partitions to create. #' @return An RDD where each element is list(K, list(V)) #' @seealso reduceByKey -#' @rdname groupByKey -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -245,6 +236,7 @@ setMethod("partitionBy", #' grouped <- collect(parts) #' grouped[[1]] # Should be a list(1, list(2, 4)) #'} +#' @rdname groupByKey #' @aliases groupByKey,RDD,integer-method setMethod("groupByKey", signature(x = "RDD", numPartitions = "integer"), @@ -294,9 +286,7 @@ setMethod("groupByKey", #' @param numPartitions Number of partitions to create. #' @return An RDD where each element is list(K, V') where V' is the merged #' value -#' @rdname reduceByKey #' @seealso groupByKey -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -306,6 +296,7 @@ setMethod("groupByKey", #' reduced <- collect(parts) #' reduced[[1]] # Should be a list(1, 6) #'} +#' @rdname reduceByKey #' @aliases reduceByKey,RDD,integer-method setMethod("reduceByKey", signature(x = "RDD", combineFunc = "ANY", numPartitions = "integer"), @@ -336,9 +327,7 @@ setMethod("reduceByKey", #' list(K, V) or c(K, V). #' @param combineFunc The associative reduce function to use. #' @return A list of elements of type list(K, V') where V' is the merged value for each key -#' @rdname reduceByKeyLocally #' @seealso reduceByKey -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -347,6 +336,7 @@ setMethod("reduceByKey", #' reduced <- reduceByKeyLocally(rdd, "+") #' reduced # list(list(1, 6), list(1.1, 3)) #'} +#' @rdname reduceByKeyLocally #' @aliases reduceByKeyLocally,RDD,integer-method setMethod("reduceByKeyLocally", signature(x = "RDD", combineFunc = "ANY"), @@ -402,9 +392,7 @@ setMethod("reduceByKeyLocally", #' @param numPartitions Number of partitions to create. #' @return An RDD where each element is list(K, C) where C is the combined type #' -#' @rdname combineByKey #' @seealso groupByKey, reduceByKey -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -414,6 +402,7 @@ setMethod("reduceByKeyLocally", #' combined <- collect(parts) #' combined[[1]] # Should be a list(1, 6) #'} +#' @rdname combineByKey #' @aliases combineByKey,RDD,ANY,ANY,ANY,integer-method setMethod("combineByKey", signature(x = "RDD", createCombiner = "ANY", mergeValue = "ANY", @@ -463,9 +452,7 @@ setMethod("combineByKey", #' a different result type from the type of the values. #' @param combOp A function to aggregate results of seqOp. #' @return An RDD containing the aggregation result. -#' @rdname aggregateByKey #' @seealso foldByKey, combineByKey -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -476,6 +463,7 @@ setMethod("combineByKey", #' aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) #' # list(list(1, list(3, 2)), list(2, list(7, 2))) #'} +#' @rdname aggregateByKey #' @aliases aggregateByKey,RDD,ANY,ANY,ANY,integer-method setMethod("aggregateByKey", signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", @@ -499,15 +487,14 @@ setMethod("aggregateByKey", #' @param zeroValue A neutral "zero value". #' @param func An associative function for folding values of each key. #' @return An RDD containing the aggregation result. -#' @rdname foldByKey #' @seealso aggregateByKey, combineByKey -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) #' foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) #'} +#' @rdname foldByKey #' @aliases foldByKey,RDD,ANY,ANY,integer-method setMethod("foldByKey", signature(x = "RDD", zeroValue = "ANY", @@ -532,8 +519,6 @@ setMethod("foldByKey", #' @param numPartitions Number of partitions to create. #' @return a new RDD containing all pairs of elements with matching keys in #' two input RDDs. -#' @rdname join-methods -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -541,6 +526,7 @@ setMethod("foldByKey", #' rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) #' join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) #'} +#' @rdname join-methods #' @aliases join,RDD,RDD-method setMethod("join", signature(x = "RDD", y = "RDD", numPartitions = "integer"), @@ -569,8 +555,6 @@ setMethod("join", #' @return For each element (k, v) in x, the resulting RDD will either contain #' all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) #' if no elements in rdd2 have key k. -#' @rdname join-methods -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -579,6 +563,7 @@ setMethod("join", #' leftOuterJoin(rdd1, rdd2, 2L) #' # list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) #'} +#' @rdname join-methods #' @aliases leftOuterJoin,RDD,RDD-method setMethod("leftOuterJoin", signature(x = "RDD", y = "RDD", numPartitions = "integer"), @@ -607,8 +592,6 @@ setMethod("leftOuterJoin", #' @return For each element (k, w) in y, the resulting RDD will either contain #' all pairs (k, (v, w)) for (k, v) in x, or the pair (k, (NULL, w)) #' if no elements in x have key k. -#' @rdname join-methods -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -617,6 +600,7 @@ setMethod("leftOuterJoin", #' rightOuterJoin(rdd1, rdd2, 2L) #' # list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) #'} +#' @rdname join-methods #' @aliases rightOuterJoin,RDD,RDD-method setMethod("rightOuterJoin", signature(x = "RDD", y = "RDD", numPartitions = "integer"), @@ -646,8 +630,6 @@ setMethod("rightOuterJoin", #' will contain all pairs (k, (v, w)) for both (k, v) in x and #' (k, w) in y, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements #' in x/y have key k. -#' @rdname join-methods -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -658,6 +640,7 @@ setMethod("rightOuterJoin", #' # list(2, list(NULL, 4))) #' # list(3, list(3, NULL)), #'} +#' @rdname join-methods #' @aliases fullOuterJoin,RDD,RDD-method setMethod("fullOuterJoin", signature(x = "RDD", y = "RDD", numPartitions = "integer"), @@ -679,8 +662,6 @@ setMethod("fullOuterJoin", #' @param numPartitions Number of partitions to create. #' @return a new RDD containing all pairs of elements with values in a list #' in all RDDs. -#' @rdname cogroup -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() @@ -689,6 +670,7 @@ setMethod("fullOuterJoin", #' cogroup(rdd1, rdd2, numPartitions = 2L) #' # list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) #'} +#' @rdname cogroup #' @aliases cogroup,RDD-method setMethod("cogroup", "RDD", @@ -735,14 +717,13 @@ setMethod("cogroup", #' @param ascending A flag to indicate whether the sorting is ascending or descending. #' @param numPartitions Number of partitions to create. #' @return An RDD where all (k, v) pair elements are sorted. -#' @rdname sortByKey -#' @export #' @examples #'\dontrun{ #' sc <- sparkR.init() #' rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) #' collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) #'} +#' @rdname sortByKey #' @aliases sortByKey,RDD,RDD-method setMethod("sortByKey", signature(x = "RDD"), From ff948dbe9af8271c41b0b4867709ac6e73bdb0f5 Mon Sep 17 00:00:00 2001 From: hlin09 Date: Tue, 10 Mar 2015 15:37:44 -0400 Subject: [PATCH 603/687] Remove missingOrInteger. --- pkg/R/RDD.R | 10 +++------- pkg/R/generics.R | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 9134258eca2fd..88f00f3bbc60e 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -727,7 +727,6 @@ setMethod("take", resList }) -setClassUnion("missingOrInteger", c("missing", "integer")) #' Removes the duplicates from RDD. #' #' This function returns a new RDD containing the distinct elements in the @@ -742,13 +741,10 @@ setClassUnion("missingOrInteger", c("missing", "integer")) #' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) #'} #' @rdname distinct -#' @aliases distinct,RDD,missingOrInteger-method +#' @aliases distinct,RDD-method setMethod("distinct", - signature(x = "RDD", numPartitions = "missingOrInteger"), - function(x, numPartitions) { - if (missing(numPartitions)) { - numPartitions <- SparkR::numPartitions(x) - } + signature(x = "RDD"), + function(x, numPartitions = SparkR::numPartitions(x)) { identical.mapped <- lapply(x, function(x) { list(x, NULL) }) reduced <- reduceByKey(identical.mapped, function(x, y) { x }, diff --git a/pkg/R/generics.R b/pkg/R/generics.R index 85bdd088d2c4e..d1870b613ef73 100644 --- a/pkg/R/generics.R +++ b/pkg/R/generics.R @@ -110,7 +110,7 @@ setGeneric("take", function(x, num) { standardGeneric("take") }) #' @rdname distinct #' @export setGeneric("distinct", - function(x, numPartitions) { standardGeneric("distinct") }) + function(x, numPartitions = 1L) { standardGeneric("distinct") }) #' @rdname sampleRDD #' @export From 01aa5ee2cb848ae5215ae715461e93b743296ff5 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 10 Mar 2015 12:59:38 -0700 Subject: [PATCH 604/687] add config for using daemon, refactor --- pkg/inst/worker/daemon.R | 58 +++++-------------- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 8 +-- 2 files changed, 20 insertions(+), 46 deletions(-) diff --git a/pkg/inst/worker/daemon.R b/pkg/inst/worker/daemon.R index 5af55aa4b255c..13132abf647ec 100644 --- a/pkg/inst/worker/daemon.R +++ b/pkg/inst/worker/daemon.R @@ -10,48 +10,22 @@ suppressPackageStartupMessages(library(SparkR)) port <- as.integer(Sys.getenv("SPARKR_WORKER_PORT")) inputCon <- socketConnection(port = port, open = "rb", blocking = TRUE, timeout = 3600) -# Read from connection, retrying to read exactly 'size' bytes -readBinFull <- function(con, size) { - # readBin() could be interruptted by signal, we have no way to tell - # if it's interruptted or the socket is closed, so we retry at most - # 20 times, to avoid the deadloop if the socket is closed - c <- 1 - data <- readBin(con, raw(), size) - while (length(data) < size && c < 20) { - extra <- readBin(con, raw(), size - length(data)) - data <- c(data, extra) - c <- c + 1 - } - data -} - -# Utility function to read the port with retry -# Returns -1 if the socket was closed -readPort <- function(con) { - data <- readBinFull(con, 4L) - if (length(data) != 4) { - -1 - } else { - rc <- rawConnection(data) - ret <- SparkR:::readInt(rc) - close(rc) - ret - } -} - while (TRUE) { - port <- readPort(inputCon) - if (port < 0) { - cat("quitting daemon\n") - quit(save = "no") - } - p <- parallel:::mcfork() - if (inherits(p, "masterProcess")) { - close(inputCon) - Sys.setenv(SPARKR_WORKER_PORT = port) - source(script) - # Set SIGUSR1 so that child can exit - tools::pskill(Sys.getpid(), tools::SIGUSR1) - parallel:::mcexit(0L) + ready <- socketSelect(list(inputCon)) + if (ready) { + port <- SparkR:::readInt(inputCon) + if (length(port) == 0) { + cat("quitting daemon", "\n") + quit(save = "no") + } + p <- parallel:::mcfork() + if (inherits(p, "masterProcess")) { + close(inputCon) + Sys.setenv(SPARKR_WORKER_PORT = port) + source(script) + # Set SIGUSR1 so that child can exit + tools::pskill(Sys.getpid(), tools::SIGUSR1) + parallel:::mcexit(0L) + } } } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index fe9095eccd398..8e2e0d2d453b3 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -307,13 +307,11 @@ private[sparkr] class BufferedStreamThread( } object RRDD { - // Because forking processes from Java is expensive, we prefer to launch // a single R daemon (daemon.R) and tell it to fork new workers for our tasks. // This daemon currently only works on UNIX-based systems now, so we should // also fall back to launching workers (worker.R) directly. - // TODO(davies): make it configurable - val useDaemon = !System.getProperty("os.name").startsWith("Windows") + val inWindows = System.getProperty("os.name").startsWith("Windows") private[this] var errThread: BufferedStreamThread = _ private[this] var daemonSocket: Socket = _ private[this] var daemonChannel: DataOutputStream = _ @@ -345,6 +343,7 @@ object RRDD { for ((name, value) <- sparkExecutorEnvMap) { sparkConf.setExecutorEnv(name.asInstanceOf[String], value.asInstanceOf[String]) } + new JavaSparkContext(sparkConf) } @@ -381,7 +380,8 @@ object RRDD { * ProcessBuilder used to launch worker R processes. */ def createRWorker(rLibDir: String, port: Int) = { - if (useDaemon) { + val useDaemon = SparkEnv.get.conf.getBoolean("spark.sparkr.use.daemon", true) + if (!inWindows && useDaemon) { synchronized { if (daemonSocket == null) { // we expect one connections From 46cea3d75e5390b26a9763d6142e0f04a8004909 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 10 Mar 2015 14:02:09 -0700 Subject: [PATCH 605/687] retry --- pkg/inst/worker/daemon.R | 8 +++-- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 30 ++++++++++++------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/pkg/inst/worker/daemon.R b/pkg/inst/worker/daemon.R index 13132abf647ec..d25c1ea2af9ad 100644 --- a/pkg/inst/worker/daemon.R +++ b/pkg/inst/worker/daemon.R @@ -14,9 +14,13 @@ while (TRUE) { ready <- socketSelect(list(inputCon)) if (ready) { port <- SparkR:::readInt(inputCon) + # There is a small chance that it could be interrupted by signal, retry one time if (length(port) == 0) { - cat("quitting daemon", "\n") - quit(save = "no") + port <- SparkR:::readInt(inputCon) + if (length(port) == 0) { + cat("quitting daemon\n") + quit(save = "no") + } } p <- parallel:::mcfork() if (inherits(p, "masterProcess")) { diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 8e2e0d2d453b3..8c5cf6065e3a5 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -1,7 +1,7 @@ package edu.berkeley.cs.amplab.sparkr import java.io._ -import java.net.{Socket, ServerSocket} +import java.net.ServerSocket import java.util.{Map => JMap} import scala.collection.JavaConversions._ @@ -9,11 +9,10 @@ import scala.io.Source import scala.reflect.ClassTag import scala.util.Try -import org.apache.spark.{SparkEnv, Partition, SparkException, TaskContext, SparkConf} -import org.apache.spark.api.java.{JavaSparkContext, JavaRDD, JavaPairRDD} +import org.apache.spark.api.java.{JavaPairRDD, JavaRDD, JavaSparkContext} import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD - +import org.apache.spark.{Partition, SparkConf, SparkEnv, SparkException, TaskContext} private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], @@ -313,7 +312,6 @@ object RRDD { // also fall back to launching workers (worker.R) directly. val inWindows = System.getProperty("os.name").startsWith("Windows") private[this] var errThread: BufferedStreamThread = _ - private[this] var daemonSocket: Socket = _ private[this] var daemonChannel: DataOutputStream = _ def createSparkContext( @@ -383,19 +381,29 @@ object RRDD { val useDaemon = SparkEnv.get.conf.getBoolean("spark.sparkr.use.daemon", true) if (!inWindows && useDaemon) { synchronized { - if (daemonSocket == null) { + if (daemonChannel == null) { // we expect one connections val serverSocket = new ServerSocket(0, 1) - val daemonPort = serverSocket.getLocalPort() + val daemonPort = serverSocket.getLocalPort errThread = createRProcess(rLibDir, daemonPort, "daemon.R") // the socket used to send out the input of task serverSocket.setSoTimeout(10000) - daemonSocket = serverSocket.accept() - daemonChannel = new DataOutputStream(daemonSocket.getOutputStream) + val sock = serverSocket.accept() + daemonChannel = new DataOutputStream(new BufferedOutputStream(sock.getOutputStream)) serverSocket.close() } - daemonChannel.writeInt(port) - daemonChannel.flush() + try { + daemonChannel.writeInt(port) + daemonChannel.flush() + } catch { + case e: IOException => + // daemon process died + daemonChannel.close() + daemonChannel = null + errThread = null + // fail the current task, retry by scheduler + throw e + } errThread } } else { From 8583968b531db0762b698115ae59c69bc7e812ee Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 10 Mar 2015 15:05:30 -0700 Subject: [PATCH 606/687] readFully() --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 4 ++-- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 8c5cf6065e3a5..4ee0dc576b163 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -189,7 +189,7 @@ private class PairwiseRRDD[T: ClassTag]( val hashedKey = dataStream.readInt() val contentPairsLength = dataStream.readInt() val contentPairs = new Array[Byte](contentPairsLength) - dataStream.read(contentPairs, 0, contentPairsLength) + dataStream.readFully(contentPairs) (hashedKey, contentPairs) case _ => null // End of input } @@ -231,7 +231,7 @@ private class RRDD[T: ClassTag]( length match { case length if length > 0 => val obj = new Array[Byte](length) - dataStream.read(obj, 0, length) + dataStream.readFully(obj, 0, length) obj case _ => null } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 0174be7840a46..afec6f5070e81 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -50,8 +50,7 @@ object SerDe { def readBytes(in: DataInputStream) = { val len = readInt(in) val out = new Array[Byte](len) - val bytesRead = in.read(out, 0, len) - assert(len == bytesRead) + val bytesRead = in.readFully(out) out } @@ -66,7 +65,7 @@ object SerDe { def readString(in: DataInputStream) = { val len = in.readInt() val asciiBytes = new Array[Byte](len) - in.read(asciiBytes, 0, len) + in.readFully(asciiBytes) assert(asciiBytes(len - 1) == 0) val str = new String(asciiBytes.dropRight(1).map(_.toChar)) str From 4e4908a8ed25242b52e471d8165b4fa42d6c181c Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 10 Mar 2015 18:17:25 -0700 Subject: [PATCH 607/687] createDataFrame from rdd --- pkg/NAMESPACE | 2 + pkg/R/RDD.R | 1 + pkg/R/SQLContext.R | 125 ++++++++++++++++++ pkg/R/deserialize.R | 38 +++--- pkg/R/serialize.R | 23 ++++ pkg/R/sparkR.R | 2 - pkg/inst/worker/worker.R | 25 ++-- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 46 +++---- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 27 +++- sparkR | 4 +- 10 files changed, 231 insertions(+), 62 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 62a66ee73f68b..08f08b3f87ef9 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -146,6 +146,7 @@ exportMethods("agg") export("cacheTable", "clearCache", + "createDataFrame", "createExternalTable", "dropTempTable", "jsonFile", @@ -156,6 +157,7 @@ export("cacheTable", "table", "tableNames", "tables", + "toDF", "uncacheTable") export("sparkRSQL.init", diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index b204d7e48d463..00f227c0df2d5 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -160,6 +160,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), callJMethod(prev_jrdd, "rdd"), serializedFuncArr, rdd@env$prev_serializedMode, + serializedMode, depsBin, packageNamesArr, as.character(.sparkREnv[["libname"]]), diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 436d7501a3e69..b9e3af1976e1f 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -1,5 +1,130 @@ # SQLcontext.R: SQLContext-driven functions +infer_type <- function(x) { + if (is.null(x)) { + stop("can not infer type from NULL") + } + type <- switch(class(x), + integer = "long", + character = "string", + logical = "boolean", + double = "double", + numeric = "double", + raw = "binary", + list = "array", + environment = "map", + stop("Unsupported type for DataFrame")) + + if (type == "map") { + stopifnot(length(x) > 0) + key <- ls(x)[[1]] + list(type = "map", + keyType = "string", + valueType = infer_type(get(key, x)), + valueContainsNull = TRUE) + } else if (type == "array") { + stopifnot(length(x) > 0) + names <- names(x) + if (is.null(names)) { + list(type = "array", elementType = infer_type(x[[1]]), containsNull = TRUE) + } else { + # StructType + types <- lapply(x, infer_type) + fields <- lapply(1:length(x), function(i) { + list(name = names[[i]], type = types[[i]], nullable = TRUE) + }) + list(type = "struct", fields = fields) + } + } else if (length(x) > 1) { + list(type = "array", elementType = type, containsNull = TRUE) + } else { + type + } +} + + +#' Create a DataFrame from an RDD +#' +#' Converts an RDD to a DataFrame by infer the types. +#' +#' @param sqlCtx A SQLContext +#' @param x An RDD +#' @param schema a list of column names or named list (StructType), optional +#' @return an DataFrame +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' rdd <- lapply(parallelize(sc, 1:10), function(x) list(a=x, b=as.character(x))) +#' df <- createDataFrame(sqlCtx, rdd) +#' } + +# TODO(davies): support sampling and infer type from NA +createDataFrame <- function(sqlCtx, rdd, schema = NULL, samplingRatio = 1.0) { + stopifnot(inherits(rdd, "RDD")) + if (is.null(schema) || is.null(names(schema))) { + row <- first(rdd) + names <- if (is.null(schema)) { + names(row) + } else { + schema + } + if (is.null(names)) { + names <- lapply(1:length(row), function(x) { + paste("_", as.character(x), sep="") + }) + } + + types <- lapply(row, infer_type) + fields <- lapply(1:length(row), function(i) { + list(name = names[[i]], type = types[[i]], nullable = TRUE) + }) + schema <- list(type = "struct", fields = fields) + } + + stopifnot(class(schema) == "list") + stopifnot(schema$type == "struct") + stopifnot(class(schema$fields) == "list") + schemaString <- as.character(jsonlite::toJSON(schema, auto_unbox = TRUE)) + + jrdd <- getJRDD(lapply(rdd, function(x) x), "row") + srdd <- callJMethod(jrdd, "rdd") + sdf <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "createDF", + srdd, schemaString, sqlCtx) + dataFrame(sdf) +} + +#' toDF() +#' +#' Converts an RDD to a DataFrame by infer the types. +#' +#' @param x An RDD +#' +#' @rdname DataFrame +#' @export +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' sqlCtx <- sparkRSQL.init(sc) +#' rdd <- lapply(parallelize(sc, 1:10), function(x) list(a=x, b=as.character(x))) +#' df <- toDF(rdd) +#' } + +setGeneric("toDF", function(x, ...) { standardGeneric("toDF") }) + +setMethod("toDF", signature(x = "RDD"), + function(x, ...) { + sqlCtx <- if (exists(".sparkRHivesc", envir = .sparkREnv)) { + get(".sparkRHivesc", envir = .sparkREnv) + } else if (exists(".sparkRSQLsc", envir = .sparkREnv)) { + get(".sparkRSQLsc", envir = .sparkREnv) + } else { + stop("no SQL context available") + } + createDataFrame(sqlCtx, x, ...) + }) + #' Create a DataFrame from a JSON file. #' #' Loads a JSON file (one object per line), returning the result as a DataFrame diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index f8e4c4e630125..5722e6b332725 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -107,11 +107,12 @@ readDeserializeRows <- function(inputCon) { # the number of rows varies, we put the readRow function in a while loop # that termintates when the next row is empty. data <- list() - numCols <- readInt(inputCon) - # We write a length for each row out - while(length(numCols) > 0 && numCols > 0) { - data[[length(data) + 1L]] <- readRow(inputCon, numCols) - numCols <- readInt(inputCon) + while(TRUE) { + row <- readRow(inputCon, numCols) + if (length(row) == 0) { + break + } + data[[length(data) + 1L]] <- row } data # this is a list of named lists now } @@ -122,21 +123,24 @@ readRowList <- function(obj) { # the numCols bytes inside the read function in order to correctly # deserialize the row. rawObj <- rawConnection(obj, "r+") - numCols <- SparkR:::readInt(rawObj) - rowOut <- SparkR:::readRow(rawObj, numCols) - close(rawObj) - rowOut + on.exit(close(rawObj)) + SparkR:::readRow(rawObj, numCols) } readRow <- function(inputCon, numCols) { - lapply(1:numCols, function(x) { - obj <- readObject(inputCon) - if (is.null(obj)) { - NA - } else { - obj - } - }) # each row is a list now + numCols <- readInt(inputCon) + if (length(numCols) > 0 && numCols > 0) { + lapply(1:numCols, function(x) { + obj <- readObject(inputCon) + if (is.null(obj)) { + NA + } else { + obj + } + }) # each row is a list now + } else { + list() + } } # Take a single column as Array[Byte] and deserialize it into an atomic vector diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index 924d8e8e1e20b..ee654c421cbe8 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -55,6 +55,29 @@ writeRawSerialize <- function(outputCon, batch) { writeRaw(outputCon, outputSer) } +writeRowSerialize <- function(outputCon, rows) { + lapply(rows, function(r) { + bytes <- serializeRow(r) + writeRaw(outputCon, bytes) + }) + invisible() +} + +serializeRow <- function(row) { + rawObj <- rawConnection(raw(0), "wb") + on.exit(close(rawObj)) + SparkR:::writeRow(rawObj, row) + rawConnectionValue(rawObj) +} + +writeRow <- function(con, row) { + numCols <- length(row) + writeInt(con, numCols) + for (i in 1:numCols) { + writeObject(con, row[[i]]) + } +} + writeRaw <- function(con, batch) { writeInt(con, length(batch)) writeBin(batch, con, endian = "big") diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index 6135c4d9c20d2..cf80d1332c1bd 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -222,7 +222,6 @@ sparkR.init <- function( sparkRSQL.init <- function(jsc) { if (exists(".sparkRSQLsc", envir = .sparkREnv)) { - cat("Re-using existing SparkSQL Context. Please restart R to create a new SparkSQL Context\n") return(get(".sparkRSQLsc", envir = .sparkREnv)) } @@ -247,7 +246,6 @@ sparkRSQL.init <- function(jsc) { sparkRHive.init <- function(jsc) { if (exists(".sparkRHivesc", envir = .sparkREnv)) { - cat("Re-using existing HiveContext. Please restart R to create a new HiveContext\n") return(get(".sparkRHivesc", envir = .sparkREnv)) } diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index aeb8ec8f37c68..2a61f2ec87478 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -25,11 +25,8 @@ splitIndex <- SparkR:::readInt(inputCon) execLen <- SparkR:::readInt(inputCon) execFunctionName <- unserialize(SparkR:::readRawLen(inputCon, execLen)) -# read the inputSerialization bit value -inputSerialization <- SparkR:::readString(inputCon) - -# read the isOutputSerialized bit flag -isOutputSerialized <- SparkR:::readInt(inputCon) +deserializer <- SparkR:::readString(inputCon) +serializer <- SparkR:::readString(inputCon) # Redirect stdout to stderr to prevent print statements from # interfering with outputStream @@ -68,27 +65,29 @@ isEmpty <- SparkR:::readInt(inputCon) if (isEmpty != 0) { if (numPartitions == -1) { - if (inputSerialization == "byte") { + if (deserializer == "byte") { # Now read as many characters as described in funcLen data <- SparkR:::readDeserialize(inputCon) - } else if (inputSerialization == "string") { + } else if (deserializer == "string") { data <- readLines(inputCon) - } else if (inputSerialization == "row") { + } else if (deserializer == "row") { data <- SparkR:::readDeserializeRows(inputCon) } output <- do.call(execFunctionName, list(splitIndex, data)) - if (isOutputSerialized) { + if (serializer == "byte") { SparkR:::writeRawSerialize(outputCon, output) + } else if (serializer == "row") { + SparkR:::writeRowSerialize(outputCon, output) } else { SparkR:::writeStrings(outputCon, output) } } else { - if (inputSerialization == "byte") { + if (deserializer == "byte") { # Now read as many characters as described in funcLen data <- SparkR:::readDeserialize(inputCon) - } else if (inputSerialization == "string") { + } else if (deserializer == "string") { data <- readLines(inputCon) - } else if (inputSerialization == "row") { + } else if (deserializer == "row") { data <- SparkR:::readDeserializeRows(inputCon) } @@ -121,7 +120,7 @@ if (isEmpty != 0) { } # End of output -if (isOutputSerialized) { +if (serializer %in% c("byte", "row")) { SparkR:::writeInt(outputCon, 0L) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 8e2e3e40ab64f..97bd0b0edb59a 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -16,8 +16,8 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], numPartitions: Int, func: Array[Byte], - parentSerializedMode: String, - dataSerialized: Boolean, + deserializer: String, + serializer: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, @@ -127,18 +127,16 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( dataOut.writeInt(splitIndex) dataOut.writeInt(func.length) - dataOut.write(func, 0, func.length) + dataOut.write(func) - // R worker process input serialization flag - SerDe.writeString(dataOut, parentSerializedMode) - // R worker process output serialization flag - dataOut.writeInt(if (dataSerialized) 1 else 0) + SerDe.writeString(dataOut, deserializer) + SerDe.writeString(dataOut, serializer) dataOut.writeInt(packageNames.length) - dataOut.write(packageNames, 0, packageNames.length) + dataOut.write(packageNames) dataOut.writeInt(functionDependencies.length) - dataOut.write(functionDependencies, 0, functionDependencies.length) + dataOut.write(functionDependencies) dataOut.writeInt(broadcastVars.length) broadcastVars.foreach { broadcast => @@ -159,14 +157,14 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( } for (elem <- iter) { - if (parentSerializedMode == SerializationFormats.BYTE) { + if (deserializer == SerializationFormats.BYTE) { val elemArr = elem.asInstanceOf[Array[Byte]] dataOut.writeInt(elemArr.length) dataOut.write(elemArr, 0, elemArr.length) - } else if (parentSerializedMode == SerializationFormats.ROW) { + } else if (deserializer == SerializationFormats.ROW) { val rowArr = elem.asInstanceOf[Array[Byte]] dataOut.write(rowArr, 0, rowArr.length) - } else if (parentSerializedMode == SerializationFormats.STRING) { + } else if (deserializer == SerializationFormats.STRING) { printOut.println(elem) } } @@ -210,13 +208,14 @@ private class PairwiseRRDD[T: ClassTag]( parent: RDD[T], numPartitions: Int, hashFunc: Array[Byte], - parentSerializedMode: String, + deserializer: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object]) - extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, parentSerializedMode, - true, functionDependencies, packageNames, rLibDir, + extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, deserializer, + SerializationFormats.BYTE, functionDependencies, + packageNames, rLibDir, broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ @@ -255,14 +254,15 @@ private class PairwiseRRDD[T: ClassTag]( private class RRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], - parentSerializedMode: String, + deserializer: String, + serializeMode: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object]) - extends BaseRRDD[T, Array[Byte]](parent, -1, func, parentSerializedMode, - true, functionDependencies, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { + extends BaseRRDD[T, Array[Byte]](parent, -1, func, deserializer, + serializeMode, functionDependencies, packageNames, rLibDir, + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ @@ -298,14 +298,14 @@ private class RRDD[T: ClassTag]( private class StringRRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], - parentSerializedMode: String, + deserializer: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object]) - extends BaseRRDD[T, String](parent, -1, func, parentSerializedMode, - false, functionDependencies, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { + extends BaseRRDD[T, String](parent, -1, func, deserializer, SerializationFormats.STRING, + functionDependencies, packageNames, rLibDir, + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: BufferedReader = _ diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 05b63767fafb8..a8bdf81084512 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -1,13 +1,12 @@ package edu.berkeley.cs.amplab.sparkr -import java.io.ByteArrayOutputStream -import java.io.DataOutputStream - -import org.apache.spark.rdd.RDD -import org.apache.spark.api.java.{JavaRDD, JavaSparkContext} -import org.apache.spark.sql.{SQLContext, DataFrame, Row, SaveMode} +import java.io.{ByteArrayInputStream, ByteArrayOutputStream, DataInputStream, DataOutputStream} import edu.berkeley.cs.amplab.sparkr.SerDe._ +import org.apache.spark.api.java.{JavaRDD, JavaSparkContext} +import org.apache.spark.rdd.RDD +import org.apache.spark.sql.types.{DataType, StructType} +import org.apache.spark.sql.{DataFrame, Row, SQLContext, SaveMode} object SQLUtils { def createSQLContext(jsc: JavaSparkContext): SQLContext = { @@ -18,10 +17,26 @@ object SQLUtils { arr.toSeq } + def createDF(rdd: RDD[Array[Byte]], schemaString: String, sqlContext: SQLContext): DataFrame = { + val schema = DataType.fromJson(schemaString).asInstanceOf[StructType] + val num = schema.fields.size + val rowRDD: RDD[Row] = rdd.map(bytesToRow) + sqlContext.createDataFrame(rowRDD, schema) + } + def dfToRowRDD(df: DataFrame): JavaRDD[Array[Byte]] = { df.map(r => rowToRBytes(r)) } + private[this] def bytesToRow(bytes: Array[Byte]) = Row { + val bis = new ByteArrayInputStream(bytes) + val dis = new DataInputStream(bis) + val num = readInt(dis) + Row((0 until num).map { i => + readObject(dis) + }.toSeq) + } + private[this] def rowToRBytes(row: Row): Array[Byte] = { val bos = new ByteArrayOutputStream() val dos = new DataOutputStream(bos) diff --git a/sparkR b/sparkR index 916523d57f846..5987b58a7effa 100755 --- a/sparkR +++ b/sparkR @@ -30,8 +30,10 @@ cat > /tmp/sparkR.profile << EOF require(SparkR) sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) assign("sc", sc, envir=.GlobalEnv) + sqlCtx <- sparkRSQL.init(sc) + assign("sqlCtx", sqlCtx, envir=.GlobalEnv) cat("\n Welcome to SparkR!") - cat("\n Spark context is available as sc\n") + cat("\n Spark context is available as sc, SQL context is available as sqlCtx\n") } EOF From 26a36212853774f96d2804d26d6b19f44dc5c6d4 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 11 Mar 2015 23:25:58 -0700 Subject: [PATCH 608/687] support date.frame and Date/Time --- pkg/R/DataFrame.R | 8 +- pkg/R/SQLContext.R | 43 +++++- pkg/R/deserialize.R | 20 ++- pkg/R/serialize.R | 24 ++- pkg/inst/sparkR-submit | 4 +- pkg/inst/tests/test_sparkSQL.R | 143 ++++++++++++++++-- .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 4 +- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 16 +- .../edu/berkeley/cs/amplab/sparkr/SerDe.scala | 33 +++- 9 files changed, 251 insertions(+), 44 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index ef41d3b6d540f..58c792a00c365 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -168,7 +168,7 @@ setGeneric("showDF", function(x,...) { standardGeneric("showDF") }) setMethod("showDF", signature(x = "DataFrame"), function(x, numRows = 20) { - cat(callJMethod(x@sdf, "showString", numToInt(numRows))) + cat(callJMethod(x@sdf, "showString", numToInt(numRows)), "\n") }) #' DataTypes @@ -560,10 +560,8 @@ setMethod("collect", close(objRaw) col }) - colNames <- callJMethod(x@sdf, "columns") - names(cols) <- colNames - dfOut <- do.call(cbind.data.frame, list(cols, stringsAsFactors = stringsAsFactors)) - dfOut + names(cols) <- columns(x) + do.call(cbind.data.frame, list(cols, stringsAsFactors = stringsAsFactors)) }) #' Limit diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index b9e3af1976e1f..a5958de2e5442 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -4,8 +4,10 @@ infer_type <- function(x) { if (is.null(x)) { stop("can not infer type from NULL") } - type <- switch(class(x), - integer = "long", + + # class of POSIXlt is c("POSIXlt" "POSIXt") + type <- switch(class(x)[[1]], + integer = "integer", character = "string", logical = "boolean", double = "double", @@ -13,7 +15,10 @@ infer_type <- function(x) { raw = "binary", list = "array", environment = "map", - stop("Unsupported type for DataFrame")) + Date = "date", + POSIXlt = "timestamp", + POSIXct = "timestamp", + stop(paste("Unsupported type for DataFrame:", class(x)))) if (type == "map") { stopifnot(length(x) > 0) @@ -48,7 +53,7 @@ infer_type <- function(x) { #' Converts an RDD to a DataFrame by infer the types. #' #' @param sqlCtx A SQLContext -#' @param x An RDD +#' @param data An RDD or list or data.frame #' @param schema a list of column names or named list (StructType), optional #' @return an DataFrame #' @export @@ -61,18 +66,40 @@ infer_type <- function(x) { #' } # TODO(davies): support sampling and infer type from NA -createDataFrame <- function(sqlCtx, rdd, schema = NULL, samplingRatio = 1.0) { - stopifnot(inherits(rdd, "RDD")) +createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { + if (is.data.frame(data)) { + schema <- names(data) + n <- nrow(data) + m <- ncol(data) + # get rid of factor type + dropFactor <- function(x) { + if (is.factor(x)) { + levels(x)[x] + } else { + x + } + } + data <- lapply(1:n, function(i) { + lapply(1:m, function(j) { dropFactor(data[i,j]) }) + }) + } + if (is.list(data)) { + sc <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getJavaSparkContext", sqlCtx) + data <- parallelize(sc, data) + } + stopifnot(inherits(data, "RDD")) + + rdd <- data if (is.null(schema) || is.null(names(schema))) { row <- first(rdd) names <- if (is.null(schema)) { names(row) } else { - schema + as.list(schema) } if (is.null(names)) { names <- lapply(1:length(row), function(x) { - paste("_", as.character(x), sep="") + paste("_", as.character(x), sep = "") }) } diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index 5722e6b332725..6e7cf997f31ac 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -26,10 +26,12 @@ readTypedObject <- function(con, type) { "b" = readBoolean(con), "d" = readDouble(con), "r" = readRaw(con), + "D" = readDate(con), + "t" = readTime(con), "l" = readList(con), "n" = NULL, "j" = getJobj(readString(con)), - stop("Unsupported type for deserialization")) + stop(paste("Unsupported type for deserialization", type))) } readString <- function(con) { @@ -54,6 +56,15 @@ readType <- function(con) { rawToChar(readBin(con, "raw", n = 1L)) } +readDate <- function(con) { + as.Date(readInt(con), origin = "1970-01-01") +} + +readTime <- function(con) { + t <- readDouble(con) + as.POSIXct(t, origin = "1970-01-01") +} + # We only support lists where all elements are of same type readList <- function(con) { type <- readType(con) @@ -145,9 +156,10 @@ readRow <- function(inputCon, numCols) { # Take a single column as Array[Byte] and deserialize it into an atomic vector readCol <- function(inputCon, numRows) { - sapply(1:numRows, function(x) { + # sapply can not work with POSIXlt + do.call(c, lapply(1:numRows, function(x) { value <- readObject(inputCon) - # Replace NULL with NA so we can coerce to vectors + # Replace NULL with NA so we can chboerce to vectors if (is.null(value)) NA else value - }) # each column is an atomic vector now + })) } diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index ee654c421cbe8..f05ce71f2113e 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -16,10 +16,11 @@ writeObject <- function(con, object, writeType = TRUE) { # NOTE: In R vectors have same type as objects. So we don't support # passing in vectors as arrays and instead require arrays to be passed # as lists. + type <- class(object)[[1]] # class of POSIXlt is c("POSIXlt", "POSIXt") if (writeType) { - writeType(con, class(object)) + writeType(con, type) } - switch(class(object), + switch(type, integer = writeInt(con, object), character = writeString(con, object), logical = writeBoolean(con, object), @@ -29,6 +30,9 @@ writeObject <- function(con, object, writeType = TRUE) { list = writeList(con, object), jobj = writeString(con, object$id), environment = writeEnv(con, object), + Date = writeDate(con, object), + POSIXlt = writeTime(con, object), + POSIXct = writeTime(con, object), stop("Unsupported type for serialization")) } @@ -56,11 +60,10 @@ writeRawSerialize <- function(outputCon, batch) { } writeRowSerialize <- function(outputCon, rows) { - lapply(rows, function(r) { + invisible(lapply(rows, function(r) { bytes <- serializeRow(r) writeRaw(outputCon, bytes) - }) - invisible() + })) } serializeRow <- function(row) { @@ -94,6 +97,9 @@ writeType <- function(con, class) { list = "l", jobj = "j", environment = "e", + Date = "D", + POSIXlt = 't', + POSIXct = 't', stop("Unsupported type for serialization")) writeBin(charToRaw(type), con) } @@ -132,6 +138,14 @@ writeEnv <- function(con, env) { } } +writeDate <- function(con, date) { + writeInt(con, as.integer(date)) +} + +writeTime <- function(con, time) { + writeDouble(con, as.double(time)) +} + # Used to serialize in a list of objects where each # object can be of a different type. Serialization format is # for each object diff --git a/pkg/inst/sparkR-submit b/pkg/inst/sparkR-submit index 9c451ab8e3712..68b7698d630d5 100755 --- a/pkg/inst/sparkR-submit +++ b/pkg/inst/sparkR-submit @@ -64,9 +64,11 @@ cat > /tmp/sparkR.profile << EOF .libPaths(c(paste(projecHome,"/..", sep=""), .libPaths())) require(SparkR) sc <- sparkR.init() + sqlCtx <- sparkRSQL.init(sc) assign("sc", sc, envir=.GlobalEnv) + assign("sqlCtx", sqlCtx, envir=.GlobalEnv) cat("\n Welcome to SparkR!") - cat("\n Spark context is available as sc\n") + cat("\n Spark context is available as sc, SQL Context is available as sqlCtx\n") } EOF R diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 20da4b600820f..d5cb3e3b50821 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -15,6 +15,127 @@ jsonPath <- tempfile(pattern="sparkr-test", fileext=".tmp") parquetPath <- tempfile(pattern="sparkr-test", fileext=".parquet") writeLines(mockLines, jsonPath) +test_that("infer types", { + expect_equal(infer_type(1L), "integer") + expect_equal(infer_type(1.0), "double") + expect_equal(infer_type("abc"), "string") + expect_equal(infer_type(TRUE), "boolean") + expect_equal(infer_type(as.Date("2015-03-11")), "date") + expect_equal(infer_type(as.POSIXlt("2015-03-11 12:13:04.043")), "timestamp") + expect_equal(infer_type(c(1L, 2L)), + list(type = 'array', elementType = "integer", containsNull = TRUE)) + expect_equal(infer_type(list(1L, 2L)), + list(type = 'array', elementType = "integer", containsNull = TRUE)) + expect_equal(infer_type(list(a = 1L, b = "2")), + list(type = "struct", + fields = list(list(name = "a", type = "integer", nullable = TRUE), + list(name = "b", type = "string", nullable = TRUE)))) + e <- new.env() + assign("a", 1L, envir = e) + expect_equal(infer_type(e), + list(type = "map", keyType = "string", valueType = "integer", + valueContainsNull = TRUE)) +}) + +test_that("create DataFrame from RDD", { + rdd <- lapply(parallelize(sc, 1:10), function(x) { list(x, as.character(x)) }) + df <- createDataFrame(sqlCtx, rdd, list("a", "b")) + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 10) + expect_equal(columns(df), c("a", "b")) + expect_equal(dtypes(df), list(c("a", "int"), c("b", "string"))) + + df <- createDataFrame(sqlCtx, rdd) + expect_true(inherits(df, "DataFrame")) + expect_equal(columns(df), c("_1", "_2")) + + fields <- list(list(name = "a", type = "integer", nullable = TRUE), + list(name = "b", type = "string", nullable = TRUE)) + schema <- list(type = "struct", fields = fields) + df <- createDataFrame(sqlCtx, rdd, schema) + expect_true(inherits(df, "DataFrame")) + expect_equal(columns(df), c("a", "b")) + expect_equal(dtypes(df), list(c("a", "int"), c("b", "string"))) + + rdd <- lapply(parallelize(sc, 1:10), function(x) { list(a = x, b = as.character(x)) }) + df <- createDataFrame(sqlCtx, rdd) + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 10) + expect_equal(columns(df), c("a", "b")) + expect_equal(dtypes(df), list(c("a", "int"), c("b", "string"))) +}) + +test_that("toDF", { + rdd <- lapply(parallelize(sc, 1:10), function(x) { list(x, as.character(x)) }) + df <- toDF(rdd, list("a", "b")) + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 10) + expect_equal(columns(df), c("a", "b")) + expect_equal(dtypes(df), list(c("a", "int"), c("b", "string"))) + + df <- toDF(rdd) + expect_true(inherits(df, "DataFrame")) + expect_equal(columns(df), c("_1", "_2")) + + fields <- list(list(name = "a", type = "integer", nullable = TRUE), + list(name = "b", type = "string", nullable = TRUE)) + schema <- list(type = "struct", fields = fields) + df <- toDF(rdd, schema) + expect_true(inherits(df, "DataFrame")) + expect_equal(columns(df), c("a", "b")) + expect_equal(dtypes(df), list(c("a", "int"), c("b", "string"))) + + rdd <- lapply(parallelize(sc, 1:10), function(x) { list(a = x, b = as.character(x)) }) + df <- toDF(rdd) + expect_true(inherits(df, "DataFrame")) + expect_true(count(df) == 10) + expect_equal(columns(df), c("a", "b")) + expect_equal(dtypes(df), list(c("a", "int"), c("b", "string"))) +}) + +test_that("create DataFrame from list or data.frame", { + l <- list(list(1, 2), list(3, 4)) + df <- createDataFrame(sqlCtx, l, c("a", "b")) + expect_equal(columns(df), c("a", "b")) + + l <- list(list(a=1, b=2), list(a=3, b=4)) + df <- createDataFrame(sqlCtx, l) + expect_equal(columns(df), c("a", "b")) + + a <- 1:3 + b <- c("a", "b", "c") + ldf <- data.frame(a, b) + df <- createDataFrame(sqlCtx, ldf) + expect_equal(columns(df), c("a", "b")) + expect_equal(dtypes(df), list(c("a", "int"), c("b", "string"))) + expect_equal(count(df), 3) + ldf2 <- collect(df) + expect_equal(ldf$a, ldf2$a) +}) + +test_that("create DataFrame with different data types", { + l <- list(a = 1L, b = 2, c = TRUE, d = "ss", e = as.Date("2012-12-13"), + f = as.POSIXct("2015-03-15 12:13:14.056")) + df <- createDataFrame(sqlCtx, list(l)) + expect_equal(dtypes(df), list(c("a", "int"), c("b", "double"), c("c", "boolean"), + c("d", "string"), c("e", "date"), c("f", "timestamp"))) + expect_equal(count(df), 1) + expect_equal(collect(df), data.frame(l, stringsAsFactors = FALSE)) +}) + +# TODO: enable this test after fix serialization for nested object +#test_that("create DataFrame with nested array and struct", { +# e <- new.env() +# assign("n", 3L, envir = e) +# l <- list(1:10, list("a", "b"), e, list(a="aa", b=3L)) +# df <- createDataFrame(sqlCtx, list(l), c("a", "b", "c", "d")) +# expect_equal(dtypes(df), list(c("a", "array"), c("b", "array"), +# c("c", "map"), c("d", "struct"))) +# expect_equal(count(df), 1) +# ldf <- collect(df) +# expect_equal(ldf[1,], l[[1]]) +#}) + test_that("jsonFile() on a local file returns a DataFrame", { df <- jsonFile(sqlCtx, jsonPath) expect_true(inherits(df, "DataFrame")) @@ -398,7 +519,7 @@ test_that("sortDF() and orderBy() on a DataFrame", { sorted3 <- orderBy(df, asc(df$age)) expect_true(is.na(first(sorted3)$age)) expect_true(collect(sorted3)[2, "age"] == 19) - + sorted4 <- orderBy(df, desc(df$name)) expect_true(first(sorted4)$name == "Michael") expect_true(collect(sorted4)[3,"name"] == "Andy") @@ -416,7 +537,7 @@ test_that("filter() on a DataFrame", { test_that("join() on a DataFrame", { df <- jsonFile(sqlCtx, jsonPath) - + mockLines2 <- c("{\"name\":\"Michael\", \"test\": \"yes\"}", "{\"name\":\"Andy\", \"test\": \"no\"}", "{\"name\":\"Justin\", \"test\": \"yes\"}", @@ -424,20 +545,20 @@ test_that("join() on a DataFrame", { jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") writeLines(mockLines2, jsonPath2) df2 <- jsonFile(sqlCtx, jsonPath2) - + joined <- join(df, df2) expect_equal(names(joined), c("age", "name", "name", "test")) expect_true(count(joined) == 12) - + joined2 <- join(df, df2, df$name == df2$name) expect_equal(names(joined2), c("age", "name", "name", "test")) expect_true(count(joined2) == 3) - + joined3 <- join(df, df2, df$name == df2$name, "right_outer") expect_equal(names(joined3), c("age", "name", "name", "test")) expect_true(count(joined3) == 4) expect_true(is.na(collect(joined3)$age[4])) - + joined4 <- select(join(df, df2, df$name == df2$name, "outer"), alias(df$age + 5, "newAge"), df$name, df2$test) expect_equal(names(joined4), c("newAge", "name", "test")) @@ -465,24 +586,24 @@ test_that("isLocal()", { test_that("unionAll(), subtract(), and intersect() on a DataFrame", { df <- jsonFile(sqlCtx, jsonPath) - + lines <- c("{\"name\":\"Bob\", \"age\":24}", "{\"name\":\"Andy\", \"age\":30}", "{\"name\":\"James\", \"age\":35}") jsonPath2 <- tempfile(pattern="sparkr-test", fileext=".tmp") writeLines(lines, jsonPath2) df2 <- loadDF(sqlCtx, jsonPath2, "json") - + unioned <- sortDF(unionAll(df, df2), df$age) expect_true(inherits(unioned, "DataFrame")) expect_true(count(unioned) == 6) expect_true(first(unioned)$name == "Michael") - + subtracted <- sortDF(subtract(df, df2), desc(df$age)) expect_true(inherits(unioned, "DataFrame")) expect_true(count(subtracted) == 2) expect_true(first(subtracted)$name == "Justin") - + intersected <- sortDF(intersect(df, df2), df$age) expect_true(inherits(unioned, "DataFrame")) expect_true(count(intersected) == 1) @@ -495,7 +616,7 @@ test_that("withColumn() and withColumnRenamed()", { expect_true(length(columns(newDF)) == 3) expect_true(columns(newDF)[3] == "newAge") expect_true(first(filter(newDF, df$name != "Michael"))$newAge == 32) - + newDF2 <- withColumnRenamed(df, "age", "newerAge") expect_true(length(columns(newDF2)) == 2) expect_true(columns(newDF2)[1] == "newerAge") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 97bd0b0edb59a..832a81b9113a1 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -255,13 +255,13 @@ private class RRDD[T: ClassTag]( parent: RDD[T], func: Array[Byte], deserializer: String, - serializeMode: String, + serializer: String, functionDependencies: Array[Byte], packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object]) extends BaseRRDD[T, Array[Byte]](parent, -1, func, deserializer, - serializeMode, functionDependencies, packageNames, rLibDir, + serializer, functionDependencies, packageNames, rLibDir, broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index a8bdf81084512..90a22ffc842b1 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -10,7 +10,11 @@ import org.apache.spark.sql.{DataFrame, Row, SQLContext, SaveMode} object SQLUtils { def createSQLContext(jsc: JavaSparkContext): SQLContext = { - new SQLContext(jsc.sc) + new SQLContext(jsc) + } + + def getJavaSparkContext(sqlCtx: SQLContext): JavaSparkContext = { + new JavaSparkContext(sqlCtx.sparkContext) } def toSeq[T](arr: Array[T]): Seq[T] = { @@ -20,19 +24,21 @@ object SQLUtils { def createDF(rdd: RDD[Array[Byte]], schemaString: String, sqlContext: SQLContext): DataFrame = { val schema = DataType.fromJson(schemaString).asInstanceOf[StructType] val num = schema.fields.size - val rowRDD: RDD[Row] = rdd.map(bytesToRow) - sqlContext.createDataFrame(rowRDD, schema) + val rowRDD = rdd.map(bytesToRow) + val df = sqlContext.createDataFrame(rowRDD, schema) + // ./df.show() + df } def dfToRowRDD(df: DataFrame): JavaRDD[Array[Byte]] = { df.map(r => rowToRBytes(r)) } - private[this] def bytesToRow(bytes: Array[Byte]) = Row { + private[this] def bytesToRow(bytes: Array[Byte]): Row = { val bis = new ByteArrayInputStream(bytes) val dis = new DataInputStream(bis) val num = readInt(dis) - Row((0 until num).map { i => + Row.fromSeq((0 until num).map { i => readObject(dis) }.toSeq) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 5e6cc0bf5e931..3bb8434274a49 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -1,9 +1,9 @@ package edu.berkeley.cs.amplab.sparkr -import scala.collection.JavaConversions._ +import java.io.{DataInputStream, DataOutputStream} +import java.sql.{Date, Time} -import java.io.DataInputStream -import java.io.DataOutputStream +import scala.collection.JavaConversions._ /** * Utility functions to serialize, deserialize objects to / from R @@ -42,6 +42,8 @@ object SerDe { case 'e' => readMap(dis) case 'r' => readBytes(dis) case 'l' => readList(dis) + case 'D' => readDate(dis) + case 't' => readTime(dis) case 'j' => JVMObjectTracker.getObject(readString(dis)) case _ => throw new IllegalArgumentException(s"Invalid type $dataType") } @@ -76,6 +78,15 @@ object SerDe { val intVal = in.readInt() if (intVal == 0) false else true } + def readDate(in: DataInputStream) = { + val d = in.readInt() + new Date(d.toLong * 24 * 3600 * 1000) + } + + def readTime(in: DataInputStream) = { + val t = in.readDouble() + new Time((t * 1000L).toLong) + } def readBytesArr(in: DataInputStream) = { val len = readInt(in) @@ -153,6 +164,8 @@ object SerDe { case "double" => dos.writeByte('d') case "integer" => dos.writeByte('i') case "logical" => dos.writeByte('b') + case "date" => dos.writeByte('D') + case "time" => dos.writeByte('t') case "raw" => dos.writeByte('r') case "list" => dos.writeByte('l') case "jobj" => dos.writeByte('j') @@ -180,6 +193,12 @@ object SerDe { case "boolean" | "java.lang.Boolean" => writeType(dos, "logical") writeBoolean(dos, value.asInstanceOf[Boolean]) + case "java.sql.Date" => + writeType(dos, "date") + writeDate(dos, value.asInstanceOf[Date]) + case "java.sql.Time" => + writeType(dos, "time") + writeTime(dos, value.asInstanceOf[Time]) case "[B" => writeType(dos, "raw") writeBytes(dos, value.asInstanceOf[Array[Byte]]) @@ -233,6 +252,14 @@ object SerDe { val intValue = if (value) 1 else 0 out.writeInt(intValue) } + def writeDate(out: DataOutputStream, value: Date) { + out.writeInt((value.getTime / 1000 / 3600 / 24).toInt) + } + + def writeTime(out: DataOutputStream, value: Time) { + out.writeDouble(value.getTime.toDouble / 1000.0) + } + // NOTE: Only works for ASCII right now def writeString(out: DataOutputStream, value: String) { From a6dc435d5fde0ad62bef9e6882d617825abca0fb Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 12 Mar 2015 00:19:20 -0700 Subject: [PATCH 609/687] remove dependency of jsonlite --- pkg/R/SQLContext.R | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index a5958de2e5442..ea1dc3ca93b14 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -47,6 +47,26 @@ infer_type <- function(x) { } } +tojson <- function(x) { + if (is.list(x)) { + names <- names(x) + if (!is.null(names)) { + items <- lapply(names, function(n) { + safe_n <- gsub('"', '\\"', n) + paste(tojson(safe_n), ':', tojson(x[[n]]), sep = '') + }) + d <- paste(items, collapse = ', ') + paste('{', d, '}', sep = '') + } else { + l <- paste(lapply(x, tojson), collapse = ', ') + paste('[', l, ']', sep = '') + } + } else if (is.character(x)) { + paste('"', x, '"', sep = '') + } else if (is.logical(x)) { + if (x) "true" else "false" + } +} #' Create a DataFrame from an RDD #' @@ -113,7 +133,7 @@ createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { stopifnot(class(schema) == "list") stopifnot(schema$type == "struct") stopifnot(class(schema$fields) == "list") - schemaString <- as.character(jsonlite::toJSON(schema, auto_unbox = TRUE)) + schemaString <- as.character(tojson(schema)) jrdd <- getJRDD(lapply(rdd, function(x) x), "row") srdd <- callJMethod(jrdd, "rdd") From e87bb9876804af46c64137db934cfb89f4a14936 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 12 Mar 2015 00:27:17 -0700 Subject: [PATCH 610/687] improve comment and logging --- pkg/R/SQLContext.R | 2 ++ pkg/R/deserialize.R | 2 +- pkg/R/serialize.R | 4 ++-- .../main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala | 4 +--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index ea1dc3ca93b14..72ed1d9730f29 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -1,5 +1,6 @@ # SQLcontext.R: SQLContext-driven functions +#' infer the SQL type infer_type <- function(x) { if (is.null(x)) { stop("can not infer type from NULL") @@ -47,6 +48,7 @@ infer_type <- function(x) { } } +#' dump the schema into JSON string tojson <- function(x) { if (is.list(x)) { names <- names(x) diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index 6e7cf997f31ac..c5f8ac7f06a4e 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -159,7 +159,7 @@ readCol <- function(inputCon, numRows) { # sapply can not work with POSIXlt do.call(c, lapply(1:numRows, function(x) { value <- readObject(inputCon) - # Replace NULL with NA so we can chboerce to vectors + # Replace NULL with NA so we can coerce to vectors if (is.null(value)) NA else value })) } diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index f05ce71f2113e..cdeeb1604fbd2 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -33,7 +33,7 @@ writeObject <- function(con, object, writeType = TRUE) { Date = writeDate(con, object), POSIXlt = writeTime(con, object), POSIXct = writeTime(con, object), - stop("Unsupported type for serialization")) + stop(paste("Unsupported type for serialization", type))) } writeString <- function(con, value) { @@ -100,7 +100,7 @@ writeType <- function(con, class) { Date = "D", POSIXlt = 't', POSIXct = 't', - stop("Unsupported type for serialization")) + stop(paste("Unsupported type for serialization", class))) writeBin(charToRaw(type), con) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 90a22ffc842b1..be15ed1665ac4 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -25,9 +25,7 @@ object SQLUtils { val schema = DataType.fromJson(schemaString).asInstanceOf[StructType] val num = schema.fields.size val rowRDD = rdd.map(bytesToRow) - val df = sqlContext.createDataFrame(rowRDD, schema) - // ./df.show() - df + sqlContext.createDataFrame(rowRDD, schema) } def dfToRowRDD(df: DataFrame): JavaRDD[Array[Byte]] = { From 9a6be746efc9fafad88122fa2267862ef87aa0e1 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 12 Mar 2015 12:11:08 -0700 Subject: [PATCH 611/687] include grouping columns in agg() add docs for groupBy() and agg() --- pkg/R/DataFrame.R | 22 ++++++++++- pkg/R/group.R | 38 ++++++++++++++++--- pkg/inst/tests/test_sparkSQL.R | 7 +++- .../berkeley/cs/amplab/sparkr/SQLUtils.scala | 25 +++++++++--- .../amplab/sparkr/SparkRBackendHandler.scala | 13 +++---- 5 files changed, 84 insertions(+), 21 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index ef41d3b6d540f..21e295b7ff89b 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -697,8 +697,23 @@ setMethod("toRDD", #' #' Groups the DataFrame using the specified columns, so we can run aggregation on them. #' +#' @param x a DataFrame +#' @return a GroupedData +#' @seealso GroupedData +#' @rdname DataFrame +#' @export +#' @examples +#' \dontrun { +#' # Compute the average for all numeric columns grouped by department. +#' avg(groupBy(df, "department")) +#' +#' // Compute the max age and average salary, grouped by department and gender. +#' agg(groupBy(df, "department", "gender"), salary="avg", "age" -> "max") +#' } setGeneric("groupBy", function(x, ...) { standardGeneric("groupBy") }) +#' @rdname DataFrame +#' @export setMethod("groupBy", signature(x = "DataFrame"), function(x, ...) { @@ -712,7 +727,12 @@ setMethod("groupBy", groupedData(sgd) }) - +#' Agg +#' +#' Compute aggregates by specifying a list of columns +#' +#' @rdname DataFrame +#' @export setMethod("agg", signature(x = "DataFrame"), function(x, ...) { diff --git a/pkg/R/group.R b/pkg/R/group.R index bf17efffc4b20..577ab9feb480b 100644 --- a/pkg/R/group.R +++ b/pkg/R/group.R @@ -1,19 +1,39 @@ -############################## GroupedData ######################################## +# group.R - GroupedData class and methods implemented in S4 OO classes +setOldClass("jobj") + +#' @title S4 class that represents a GroupedData +#' @description GroupedDatas can be created using groupBy() on a DataFrame +#' @rdname GroupedData +#' @seealso groupBy +#' +#' @param sgd A Java object reference to the backing Scala GroupedData +#' @export setClass("GroupedData", - slots = list(env = "environment", - sgd = "jobj")) + slots = list(sgd = "jobj")) setMethod("initialize", "GroupedData", function(.Object, sgd) { - .Object@env <- new.env() .Object@sgd <- sgd .Object }) +#' @rdname DataFrame groupedData <- function(sgd) { new("GroupedData", sgd) } + +#' Count +#' +#' Count the number of rows for each group. +#' The resulting DataFrame will also contain the grouping columns. +#' +#' @param x a GroupedData +#' @return a DataFrame +#' @export +#' @examples +#' \dontrun { +#' } setMethod("count", signature(x = "GroupedData"), function(x) { @@ -23,9 +43,13 @@ setMethod("count", #' Agg #' #' Aggregates on the entire DataFrame without groups. +#' The resulting DataFrame will also contain the grouping columns. #' #' df2 <- agg(df, = ) #' df2 <- agg(df, newColName = aggFunction(column)) +#' +#' @param x a GroupedData +#' @return a DataFrame #' @examples #' \dontrun{ #' df2 <- agg(df, age = "sum") # new column name will be created as 'SUM(age#0)' @@ -51,15 +75,17 @@ setMethod("agg", } } jcols <- lapply(cols, function(c) { c@jc }) - sdf <- callJMethod(x@sgd, "agg", jcols[[1]], listToSeq(jcols[-1])) + # the GroupedData.agg(col, cols*) API does not contain grouping Column + sdf <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "aggWithGrouping", + x@sgd, listToSeq(jcols)) } else { stop("agg can only support Column or character") } dataFrame(sdf) }) -#' sum/mean/avg/min/max +# sum/mean/avg/min/max methods <- c("sum", "mean", "avg", "min", "max") createMethod <- function(name) { diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 20da4b600820f..5814e90573aa6 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -368,7 +368,7 @@ test_that("group by", { expect_true(1 == count(df1)) df1 <- agg(df, age2 = max(df$age)) expect_true(1 == count(df1)) - expect_true(columns(df1) == c("age2")) + expect_equal(columns(df1), c("age2")) gd <- groupBy(df, "name") expect_true(inherits(gd, "GroupedData")) @@ -380,6 +380,11 @@ test_that("group by", { expect_true(inherits(df3, "DataFrame")) expect_true(3 == count(df3)) + df3 <- agg(gd, age = sum(df$age)) + expect_true(inherits(df3, "DataFrame")) + expect_true(3 == count(df3)) + expect_equal(columns(df3), c("name", "age")) + df4 <- sum(gd, "age") expect_true(inherits(df4, "DataFrame")) expect_true(3 == count(df4)) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 05b63767fafb8..976f2e9a00691 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -1,13 +1,10 @@ package edu.berkeley.cs.amplab.sparkr -import java.io.ByteArrayOutputStream -import java.io.DataOutputStream +import java.io.{ByteArrayOutputStream, DataOutputStream} -import org.apache.spark.rdd.RDD import org.apache.spark.api.java.{JavaRDD, JavaSparkContext} -import org.apache.spark.sql.{SQLContext, DataFrame, Row, SaveMode} - -import edu.berkeley.cs.amplab.sparkr.SerDe._ +import org.apache.spark.sql.catalyst.expressions.{Alias, Expression, NamedExpression} +import org.apache.spark.sql.{Column, DataFrame, GroupedData, Row, SQLContext, SaveMode} object SQLUtils { def createSQLContext(jsc: JavaSparkContext): SQLContext = { @@ -18,6 +15,22 @@ object SQLUtils { arr.toSeq } + // A helper to include grouping columns in Agg() + def aggWithGrouping(gd: GroupedData, exprs: Column*): DataFrame = { + val aggExprs = exprs.map{ col => + val f = col.getClass.getDeclaredField("expr") + f.setAccessible(true) + val expr = f.get(col).asInstanceOf[Expression] + expr match { + case expr: NamedExpression => expr + case expr: Expression => Alias(expr, expr.simpleString)() + } + } + val toDF = gd.getClass.getDeclaredMethods.filter(f => f.getName == "toDF").head + toDF.setAccessible(true) + toDF.invoke(gd, aggExprs).asInstanceOf[DataFrame] + } + def dfToRowRDD(df: DataFrame): JavaRDD[Array[Byte]] = { df.map(r => rowToRBytes(r)) } diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala index 44b90ab36ab6d..67681fc608220 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala @@ -80,29 +80,28 @@ class SparkRBackendHandler(server: SparkRBackend) dis: DataInputStream, dos: DataOutputStream) { var obj: Object = null - var cls: Option[Class[_]] = None try { - if (isStatic) { - cls = Some(Class.forName(objId)) + val cls = if (isStatic) { + Class.forName(objId) } else { JVMObjectTracker.get(objId) match { case None => throw new IllegalArgumentException("Object not found " + objId) case Some(o) => - cls = Some(o.getClass) obj = o + o.getClass } } val args = readArgs(numArgs, dis) - val methods = cls.get.getMethods + val methods = cls.getMethods val selectedMethods = methods.filter(m => m.getName == methodName) if (selectedMethods.length > 0) { val methods = selectedMethods.filter { x => matchMethod(numArgs, args, x.getParameterTypes) } if (methods.isEmpty) { - System.err.println(s"cannot find matching method ${cls.get}.$methodName. " + System.err.println(s"cannot find matching method ${cls}.$methodName. " + s"Candidates are:") selectedMethods.foreach { method => System.err.println(s"$methodName(${method.getParameterTypes.mkString(",")})") @@ -116,7 +115,7 @@ class SparkRBackendHandler(server: SparkRBackend) writeObject(dos, ret.asInstanceOf[AnyRef]) } else if (methodName == "") { // methodName should be "" for constructor - val ctor = cls.get.getConstructors.filter { x => + val ctor = cls.getConstructors.filter { x => matchMethod(numArgs, args, x.getParameterTypes) }.head From 0467474fecb80f143b662408c51e5b2041231db7 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 12 Mar 2015 13:57:01 -0700 Subject: [PATCH 612/687] add more selecter for DataFrame --- pkg/R/DataFrame.R | 70 +++++++++++++++++++++++++++++++++- pkg/inst/tests/test_sparkSQL.R | 21 ++++++++++ 2 files changed, 89 insertions(+), 2 deletions(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index ef41d3b6d540f..f6abc8fd413be 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -774,21 +774,85 @@ setMethod("foreachPartition", }) -############################## DSL ################################## +############################## SELECT ################################## + +getColumn <- function(x, c) { + column(callJMethod(x@sdf, "col", c)) +} setMethod("$", signature(x = "DataFrame"), function(x, name) { - column(callJMethod(x@sdf, "col", name)) + getColumn(x, name) + }) + +setMethod("$<-", signature(x = "DataFrame"), + function(x, name, value) { + stopifnot(class(value) == "Column") + cols <- columns(x) + if (name %in% cols) { + cols <- lapply(cols, function(c) { + if (c == name) { + alias(value, name) + } else { + col(c) + } + }) + nx <- select(x, cols) + } else { + nx <- withColumn(x, name, value) + } + x@sdf <- nx@sdf + x + }) + +setMethod("[[", signature(x = "DataFrame"), + function(x, i) { + if (is.numeric(i)) { + cols <- columns(x) + i <- cols[[i]] + } + getColumn(x, i) }) +setMethod("[", signature(x = "DataFrame", i = "missing"), + function(x, i, j, ...) { + if (is.numeric(j)) { + cols <- columns(x) + j <- cols[j] + } + if (length(j) > 1) { + j <- as.list(j) + } + select(x, j) + }) + +#' Select +#' +#' Selects a set of columns with names or Column expressions. +#' @param x A DataFrame +#' @param col A list of columns or single Column or name +#' @return A new DataFrame with selected columns +#' @export +#' @examples +#' \dontrun{ +#' select(df, "*") +#' select(df, "col1", "col2") +#' select(df, df$name, df$age + 1) +#' select(df, c("col1", "col2")) +#' select(df, list(df$name, df$age + 1)) +#' } setGeneric("select", function(x, col, ...) { standardGeneric("select") } ) +#' @rdname select +#' @export setMethod("select", signature(x = "DataFrame", col = "character"), function(x, col, ...) { sdf <- callJMethod(x@sdf, "select", col, toSeq(...)) dataFrame(sdf) }) +#' @rdname select +#' @export setMethod("select", signature(x = "DataFrame", col = "Column"), function(x, col, ...) { jcols <- lapply(list(col, ...), function(c) { @@ -798,6 +862,8 @@ setMethod("select", signature(x = "DataFrame", col = "Column"), dataFrame(sdf) }) +#' @rdname select +#' @export setMethod("select", signature(x = "DataFrame", col = "list"), function(x, col) { diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 20da4b600820f..116b89c4ee42b 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -283,6 +283,27 @@ test_that("sampleDF on a DataFrame", { expect_true(count(sampled2) < 3) }) +test_that("select operators", { + df <- select(jsonFile(sqlCtx, jsonPath), "name", "age") + expect_true(inherits(df$name, "Column")) + expect_true(inherits(df[[2]], "Column")) + expect_true(inherits(df[["age"]], "Column")) + + expect_true(inherits(df[,1], "DataFrame")) + expect_equal(columns(df[,1]), c("name")) + expect_equal(columns(df[,"age"]), c("age")) + df2 <- df[,c("age", "name")] + expect_true(inherits(df2, "DataFrame")) + expect_equal(columns(df2), c("age", "name")) + + df$age2 <- df$age + expect_equal(columns(df), c("name", "age", "age2")) + expect_equal(count(where(df, df$age2 == df$age)), 2) + df$age2 <- df$age * 2 + expect_equal(columns(df), c("name", "age", "age2")) + expect_equal(count(where(df, df$age2 == df$age * 2)), 2) +}) + test_that("select with column", { df <- jsonFile(sqlCtx, jsonPath) df1 <- select(df, "name") From 66cc92a979943411c3552b7f0dd2b4beafb5f81e Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 12 Mar 2015 23:52:40 -0700 Subject: [PATCH 613/687] address commets --- pkg/NAMESPACE | 1 + pkg/R/DataFrame.R | 11 ++++++++++- pkg/R/column.R | 5 +++++ pkg/R/group.R | 7 +++++++ .../edu/berkeley/cs/amplab/sparkr/SQLUtils.scala | 3 ++- 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index 62a66ee73f68b..b52d67acd62a6 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -108,6 +108,7 @@ exportMethods("columns", "schema", "select", "selectExpr", + "show", "showDF", "sortDF", "subtract", diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 21e295b7ff89b..2ebe38131d143 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -171,6 +171,15 @@ setMethod("showDF", cat(callJMethod(x@sdf, "showString", numToInt(numRows))) }) +setMethod("show", "DataFrame", + function(object) { + cols <- lapply(dtypes(object), function(l) { + paste(l, collapse = ":") + }) + s <- paste(cols, collapse = ", ") + cat(paste("DataFrame[", s, "]\n")) + }) + #' DataTypes #' #' Return all column names and their data types as a list @@ -707,7 +716,7 @@ setMethod("toRDD", #' # Compute the average for all numeric columns grouped by department. #' avg(groupBy(df, "department")) #' -#' // Compute the max age and average salary, grouped by department and gender. +#' # Compute the max age and average salary, grouped by department and gender. #' agg(groupBy(df, "department", "gender"), salary="avg", "age" -> "max") #' } setGeneric("groupBy", function(x, ...) { standardGeneric("groupBy") }) diff --git a/pkg/R/column.R b/pkg/R/column.R index 799d31072c785..9468a1e9bb90a 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -27,6 +27,11 @@ col <- function(x) { column(callJStatic("org.apache.spark.sql.functions", "col", x)) } +setMethod("show", "Column", + function(object) { + cat("Column", callJMethod(object@jc, "toString"), "\n") + }) + # TODO(davies): like, rlike, startwith, substr, getField, getItem operators <- list( "+" = "plus", "-" = "minus", "*" = "multiply", "/" = "divide", "%%" = "mod", diff --git a/pkg/R/group.R b/pkg/R/group.R index 577ab9feb480b..653d0891e328c 100644 --- a/pkg/R/group.R +++ b/pkg/R/group.R @@ -23,6 +23,12 @@ groupedData <- function(sgd) { } +# TODO(davies): show better message +setMethod("show", "GroupedData", + function(object) { + cat("GroupedData\n") + }) + #' Count #' #' Count the number of rows for each group. @@ -33,6 +39,7 @@ groupedData <- function(sgd) { #' @export #' @examples #' \dontrun { +#' count(groupBy(df, "name")) #' } setMethod("count", signature(x = "GroupedData"), diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala index 976f2e9a00691..2491027d6d7b7 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala @@ -16,8 +16,9 @@ object SQLUtils { } // A helper to include grouping columns in Agg() + // TODO(davies): use internal API after merged into Spark def aggWithGrouping(gd: GroupedData, exprs: Column*): DataFrame = { - val aggExprs = exprs.map{ col => + val aggExprs = exprs.map { col => val f = col.getClass.getDeclaredField("expr") f.setAccessible(true) val expr = f.get(col).asInstanceOf[Expression] From 72adb14bd99dbab40f28cc6e499e2bdab08d98b7 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Fri, 13 Mar 2015 00:06:45 -0700 Subject: [PATCH 614/687] Update SQLContext.R --- pkg/R/SQLContext.R | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 72ed1d9730f29..b9c17a31003a9 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -90,6 +90,7 @@ tojson <- function(x) { # TODO(davies): support sampling and infer type from NA createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { if (is.data.frame(data)) { + # get the names of columns, they will be put into RDD schema <- names(data) n <- nrow(data) m <- ncol(data) From 8e1497df785b6c9c2f98135fbdf6f579b79b7a9a Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Fri, 13 Mar 2015 00:11:16 -0700 Subject: [PATCH 615/687] Update DataFrame.R --- pkg/R/DataFrame.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/R/DataFrame.R b/pkg/R/DataFrame.R index 2ebe38131d143..73252ab238ab0 100644 --- a/pkg/R/DataFrame.R +++ b/pkg/R/DataFrame.R @@ -177,7 +177,7 @@ setMethod("show", "DataFrame", paste(l, collapse = ":") }) s <- paste(cols, collapse = ", ") - cat(paste("DataFrame[", s, "]\n")) + cat(paste("DataFrame[", s, "]\n", sep = "")) }) #' DataTypes From 8bff523009d03f8a9a3f1c4b8c298b94d2c2696f Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 13 Mar 2015 11:41:55 -0700 Subject: [PATCH 616/687] Remove staging repo now that 1.3 is released --- pkg/src/build.sbt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/src/build.sbt b/pkg/src/build.sbt index e750af13d16de..a1fb240d8d81a 100644 --- a/pkg/src/build.sbt +++ b/pkg/src/build.sbt @@ -29,7 +29,7 @@ libraryDependencies ++= Seq( val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") val defaultHadoopVersion = "1.0.4" - val defaultSparkVersion = "1.3.0-rc2" + val defaultSparkVersion = "1.3.0" val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) libraryDependencies ++= Seq( @@ -53,7 +53,6 @@ libraryDependencies ++= Seq( } resolvers ++= Seq( - "Apache Staging" at "https://repository.apache.org/content/repositories/staging/", "Typesafe" at "http://repo.typesafe.com/typesafe/releases", "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", "Cloudera Repository" at "https://repository.cloudera.com/artifactory/cloudera-repos/", From 819012727dec40cdb53393dc4e4a9641d34c2fb7 Mon Sep 17 00:00:00 2001 From: Evert Lammerts Date: Wed, 25 Feb 2015 14:20:10 +0100 Subject: [PATCH 617/687] fixed parquetFile signature --- pkg/R/SQLContext.R | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index 436d7501a3e69..02a1a1ee5b22b 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -62,17 +62,15 @@ jsonRDD <- function(sqlCtx, rdd, schema = NULL, samplingRatio = 1.0) { #' Loads a Parquet file, returning the result as a DataFrame. #' #' @param sqlCtx SQLContext to use -#' @param path Path of file to read. A vector of multiple paths is allowed. +#' @param ... Path(s) of parquet file(s) to read. #' @return DataFrame #' @export # TODO: Implement saveasParquetFile and write examples for both -parquetFile <- function(sqlCtx, path) { +parquetFile <- function(sqlCtx, ...) { # Allow the user to have a more flexible definiton of the text file path - path <- normalizePath(path) - # Convert a string vector of paths to a string containing comma separated paths - path <- paste(path, collapse = ",") - sdf <- callJMethod(sqlCtx, "parquetFile", path) + paths <- lapply(list(...), normalizePath) + sdf <- callJMethod(sqlCtx, "parquetFile", paths) dataFrame(sdf) } From 7695d366b9be7a3c323a938a7405314c09d0fe2a Mon Sep 17 00:00:00 2001 From: Evert Lammerts Date: Wed, 25 Feb 2015 22:42:32 +0100 Subject: [PATCH 618/687] added tests --- pkg/inst/tests/test_sparkSQL.R | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 64b97fcebdefe..c78baab4772ec 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -527,15 +527,23 @@ test_that("withColumn() and withColumnRenamed()", { expect_true(columns(newDF2)[1] == "newerAge") }) -# TODO: Enable and test once the parquetFile PR has been merged -# test_that("saveAsParquetFile() on DataFrame and works with parquetFile", { -# df <- jsonFile(sqlCtx, jsonPath) -# parquetPath <- tempfile(pattern="spark-test", fileext=".tmp") -# saveAsParquetFile(df, parquetPath) -# parquetDF <- parquetFile(sqlCtx, parquetPath) -# expect_true(inherits(parquetDF, "DataFrame")) -# expect_equal(collect(df), collect(parquetDF)) -# unlink(parquetPath) -# }) +test_that("saveDF() on DataFrame and works with parquetFile", { + df <- jsonFile(sqlCtx, jsonPath) + saveDF(df, parquetPath, "parquet", mode="overwrite") + parquetDF <- parquetFile(sqlCtx, parquetPath) + expect_true(inherits(parquetDF, "DataFrame")) + expect_equal(collect(df), collect(parquetDF)) +}) + +test_that("parquetFile works with multiple input paths", { + df <- jsonFile(sqlCtx, jsonPath) + saveDF(df, parquetPath, "parquet", mode="overwrite") + parquetPath2 <- tempfile(pattern = "parquetPath2", fileext = ".parquet") + saveDF(df, parquetPath2, "parquet", mode="overwrite") + parquetDF <- parquetFile(sqlCtx, parquetPath, parquetPath2) + expect_true(inherits(parquetDF, "DataFrame")) + expect_true(count(parquetDF) == count(df)*2) +}) +unlink(parquetPath) unlink(jsonPath) From 662938a50979d3d63a072711669410b224757996 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Fri, 13 Mar 2015 21:21:37 -0700 Subject: [PATCH 619/687] Include utils before SparkR for `head` to work Before this change calling `head` on a DataFrame would not work from the sparkR script as utils would be loaded after SparkR and placed ahead in the search list. This change requires utils to be loaded before SparkR --- sparkR | 1 + 1 file changed, 1 insertion(+) diff --git a/sparkR b/sparkR index 916523d57f846..2ea730fff4a59 100755 --- a/sparkR +++ b/sparkR @@ -27,6 +27,7 @@ cat > /tmp/sparkR.profile << EOF projecHome <- Sys.getenv("PROJECT_HOME") Sys.setenv(NOAWT=1) .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) + require(utils) require(SparkR) sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) assign("sc", sc, envir=.GlobalEnv) From 46454e4fa7d6af7ccf8c4b8f3e8252ea047ce6ff Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Fri, 13 Mar 2015 22:40:30 -0700 Subject: [PATCH 620/687] address comments --- pkg/R/SQLContext.R | 14 +++++++++----- .../edu/berkeley/cs/amplab/sparkr/SerDe.scala | 2 ++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index b9c17a31003a9..a995b0512b9ae 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -67,6 +67,8 @@ tojson <- function(x) { paste('"', x, '"', sep = '') } else if (is.logical(x)) { if (x) "true" else "false" + } else { + stop(paste("unexpected type:", class(x))) } } @@ -97,7 +99,7 @@ createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { # get rid of factor type dropFactor <- function(x) { if (is.factor(x)) { - levels(x)[x] + as.character(x) } else { x } @@ -108,11 +110,13 @@ createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { } if (is.list(data)) { sc <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getJavaSparkContext", sqlCtx) - data <- parallelize(sc, data) + rdd <- parallelize(sc, data) + } else if (inherits(data, "RDD")) { + rdd <- data + } else { + stop(paste("unexpected type:", class(data))) } - stopifnot(inherits(data, "RDD")) - rdd <- data if (is.null(schema) || is.null(names(schema))) { row <- first(rdd) names <- if (is.null(schema)) { @@ -136,7 +140,7 @@ createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { stopifnot(class(schema) == "list") stopifnot(schema$type == "struct") stopifnot(class(schema$fields) == "list") - schemaString <- as.character(tojson(schema)) + schemaString <- tojson(schema) jrdd <- getJRDD(lapply(rdd, function(x) x), "row") srdd <- callJMethod(jrdd, "rdd") diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 3bb8434274a49..ea859a815f203 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -78,6 +78,7 @@ object SerDe { val intVal = in.readInt() if (intVal == 0) false else true } + def readDate(in: DataInputStream) = { val d = in.readInt() new Date(d.toLong * 24 * 3600 * 1000) @@ -252,6 +253,7 @@ object SerDe { val intValue = if (value) 1 else 0 out.writeInt(intValue) } + def writeDate(out: DataOutputStream, value: Date) { out.writeInt((value.getTime / 1000 / 3600 / 24).toInt) } From 7f5e70cab51fe63411e7585b1a0e960f4756e73f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Fri, 13 Mar 2015 23:56:29 -0700 Subject: [PATCH 621/687] Update SerDe.scala --- .../src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index ea859a815f203..c4f95563769a4 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -17,6 +17,8 @@ object SerDe { // logical -> Boolean // double, numeric -> Double // raw -> Array[Byte] + // Date -> Date + // POSIXlt/POSIXct -> Time // // list[T] -> Array[T], where T is one of above mentioned types // environment -> Map[String, T], where T is a native type @@ -154,6 +156,8 @@ object SerDe { // Double -> double // Long -> double // Array[Byte] -> raw + // Date -> Date + // Time -> POSIXct // // Array[T] -> list() // Object -> jobj From bc2ff380be08f8571951a66a0e4a6507ed1a6ffe Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Sat, 14 Mar 2015 00:15:56 -0700 Subject: [PATCH 622/687] handle NULL --- pkg/R/deserialize.R | 2 ++ pkg/R/serialize.R | 11 ++++++++++- .../scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index c5f8ac7f06a4e..2500c072bdb50 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -9,6 +9,8 @@ # Double -> double # Long -> double # Array[Byte] -> raw +# Date -> Date +# Time -> POSIXct # # Array[T] -> list() # Object -> jobj diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index cdeeb1604fbd2..22a462fac89b0 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -1,12 +1,15 @@ # Utility functions to serialize R objects so they can be read in Java. # Type mapping from R to Java -# +# +# NULL -> Void # integer -> Int # character -> String # logical -> Boolean # double, numeric -> Double # raw -> Array[Byte] +# Date -> Date +# POSIXct,POSIXlt -> Time # # list[T] -> Array[T], where T is one of above mentioned types # environment -> Map[String, T], where T is a native type @@ -21,6 +24,7 @@ writeObject <- function(con, object, writeType = TRUE) { writeType(con, type) } switch(type, + NULL = writeVoid(con), integer = writeInt(con, object), character = writeString(con, object), logical = writeBoolean(con, object), @@ -36,6 +40,10 @@ writeObject <- function(con, object, writeType = TRUE) { stop(paste("Unsupported type for serialization", type))) } +writeVoid <- function(con) { + # no value for NULL +} + writeString <- function(con, value) { writeInt(con, as.integer(nchar(value) + 1)) writeBin(value, con, endian = "big") @@ -88,6 +96,7 @@ writeRaw <- function(con, batch) { writeType <- function(con, class) { type <- switch(class, + NULL = "n", integer = "i", character = "c", logical = "b", diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index 6758aa56e8e22..1de10b2a5053b 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -12,6 +12,7 @@ object SerDe { // Type mapping from R to Java // + // NULL -> void // integer -> Int // character -> String // logical -> Boolean @@ -35,6 +36,7 @@ object SerDe { dis: DataInputStream, dataType: Char): Object = { dataType match { + case 'n' => null case 'i' => new java.lang.Integer(readInt(dis)) case 'd' => new java.lang.Double(readDouble(dis)) case 'b' => new java.lang.Boolean(readBoolean(dis)) From 6122e0e9ff58a8b73017f13fc63346fd58230b0e Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Sat, 14 Mar 2015 00:15:56 -0700 Subject: [PATCH 623/687] handle NULL --- pkg/R/deserialize.R | 2 ++ pkg/R/serialize.R | 11 ++++++++++- .../scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/R/deserialize.R b/pkg/R/deserialize.R index c5f8ac7f06a4e..2500c072bdb50 100644 --- a/pkg/R/deserialize.R +++ b/pkg/R/deserialize.R @@ -9,6 +9,8 @@ # Double -> double # Long -> double # Array[Byte] -> raw +# Date -> Date +# Time -> POSIXct # # Array[T] -> list() # Object -> jobj diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index cdeeb1604fbd2..22a462fac89b0 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -1,12 +1,15 @@ # Utility functions to serialize R objects so they can be read in Java. # Type mapping from R to Java -# +# +# NULL -> Void # integer -> Int # character -> String # logical -> Boolean # double, numeric -> Double # raw -> Array[Byte] +# Date -> Date +# POSIXct,POSIXlt -> Time # # list[T] -> Array[T], where T is one of above mentioned types # environment -> Map[String, T], where T is a native type @@ -21,6 +24,7 @@ writeObject <- function(con, object, writeType = TRUE) { writeType(con, type) } switch(type, + NULL = writeVoid(con), integer = writeInt(con, object), character = writeString(con, object), logical = writeBoolean(con, object), @@ -36,6 +40,10 @@ writeObject <- function(con, object, writeType = TRUE) { stop(paste("Unsupported type for serialization", type))) } +writeVoid <- function(con) { + # no value for NULL +} + writeString <- function(con, value) { writeInt(con, as.integer(nchar(value) + 1)) writeBin(value, con, endian = "big") @@ -88,6 +96,7 @@ writeRaw <- function(con, batch) { writeType <- function(con, class) { type <- switch(class, + NULL = "n", integer = "i", character = "c", logical = "b", diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala index c4f95563769a4..ea0115dd3e844 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala @@ -12,6 +12,7 @@ object SerDe { // Type mapping from R to Java // + // NULL -> void // integer -> Int // character -> String // logical -> Boolean @@ -37,6 +38,7 @@ object SerDe { dis: DataInputStream, dataType: Char): Object = { dataType match { + case 'n' => null case 'i' => new java.lang.Integer(readInt(dis)) case 'd' => new java.lang.Double(readDouble(dis)) case 'b' => new java.lang.Boolean(readBoolean(dis)) From 70f620c95fc3a9cdc7a0b47c97e06150c6cc7ac4 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Sat, 14 Mar 2015 15:26:42 -0700 Subject: [PATCH 624/687] address comments --- pkg/R/RDD.R | 152 +---------------------------------------------- pkg/R/generics.R | 6 +- pkg/R/pairRDD.R | 15 ++--- 3 files changed, 11 insertions(+), 162 deletions(-) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 7c696a6f521d1..30a083364ce43 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -762,15 +762,11 @@ setMethod("first", #' rdd <- parallelize(sc, c(1,2,2,3,3,3)) #' sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) #'} -setClassUnion("missingOrInteger", c("missing", "integer")) #' @rdname distinct #' @aliases distinct,RDD-method setMethod("distinct", - signature(x = "RDD", numPartitions = "missingOrInteger"), - function(x, numPartitions) { - if (missing(numPartitions)) { - numPartitions <- SparkR::numPartitions(x) - } + signature(x = "RDD"), + function(x, numPartitions = SparkR::numPartitions(x)) { identical.mapped <- lapply(x, function(x) { list(x, NULL) }) reduced <- reduceByKey(identical.mapped, function(x, y) { x }, @@ -1273,149 +1269,6 @@ setMethod("name", #'} setGeneric("setName", function(x, name) { standardGeneric("setName") }) -#' @rdname setName -#' @aliases setName,RDD -setMethod("setName", - signature(x = "RDD", name = "character"), - function(x, name) { - callJMethod(getJRDD(x), "setName", name) - x - }) - -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) -#' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) -#'} -#' @rdname top -#' @aliases top,RDD,RDD-method -setMethod("top", - signature(x = "RDD", num = "integer"), - function(x, num) { - takeOrderedElem(x, num, FALSE) - }) - -#' Fold an RDD using a given associative function and a neutral "zero value". -#' -#' Aggregate the elements of each partition, and then the results for all the -#' partitions, using a given associative function and a neutral "zero value". -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param op An associative function for the folding operation. -#' @return The folding result. -#' @seealso reduce -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) -#' fold(rdd, 0, "+") # 15 -#'} -#' @rdname fold -#' @aliases fold,RDD,RDD-method -setMethod("fold", - signature(x = "RDD", zeroValue = "ANY", op = "ANY"), - function(x, zeroValue, op) { - aggregateRDD(x, zeroValue, op, op) - }) - -#' Aggregate an RDD using the given combine functions and a neutral "zero value". -#' -#' Aggregate the elements of each partition, and then the results for all the -#' partitions, using given combine functions and a neutral "zero value". -#' -#' @param x An RDD. -#' @param zeroValue A neutral "zero value". -#' @param seqOp A function to aggregate the RDD elements. It may return a different -#' result type from the type of the RDD elements. -#' @param combOp A function to aggregate results of seqOp. -#' @return The aggregation result. -#' @seealso reduce -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1, 2, 3, 4)) -#' zeroValue <- list(0, 0) -#' seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } -#' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } -#' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) -#'} -#' @rdname aggregateRDD -#' @aliases aggregateRDD,RDD,RDD-method -setMethod("aggregateRDD", - signature(x = "RDD", zeroValue = "ANY", seqOp = "ANY", combOp = "ANY"), - function(x, zeroValue, seqOp, combOp) { - partitionFunc <- function(part) { - Reduce(seqOp, part, zeroValue) - } - - partitionList <- collect(lapplyPartition(x, partitionFunc), - flatten = FALSE) - Reduce(combOp, partitionList, zeroValue) - }) - -#' Pipes elements to a forked external process. -#' -#' The same as 'pipe()' in Spark. -#' -#' @param x The RDD whose elements are piped to the forked external process. -#' @param command The command to fork an external process. -#' @param env A named list to set environment variables of the external process. -#' @return A new RDD created by piping all elements to a forked external process. -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, 1:10) -#' collect(pipeRDD(rdd, "more") -#' Output: c("1", "2", ..., "10") -#'} -#' @rdname pipeRDD -#' @aliases pipeRDD,RDD,character-method -setMethod("pipeRDD", - signature(x = "RDD", command = "character"), - function(x, command, env = list()) { - func <- function(part) { - trim.trailing.func <- function(x) { - sub("[\r\n]*$", "", toString(x)) - } - input <- unlist(lapply(part, trim.trailing.func)) - res <- system2(command, stdout = TRUE, input = input, env = env) - lapply(res, trim.trailing.func) - } - lapplyPartition(x, func) - }) - -# TODO: Consider caching the name in the RDD's environment -#' Return an RDD's name. -#' -#' @param x The RDD whose name is returned. -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' name(rdd) # NULL (if not set before) -#'} -#' @rdname name -#' @aliases name,RDD -setMethod("name", - signature(x = "RDD"), - function(x) { - callJMethod(getJRDD(x), "name") - }) - -#' Set an RDD's name. -#' -#' @param x The RDD whose name is to be set. -#' @param name The RDD name to be set. -#' @return a new RDD renamed. -#' @examples -#'\dontrun{ -#' sc <- sparkR.init() -#' rdd <- parallelize(sc, list(1,2,3)) -#' setName(rdd, "myRDD") -#' name(rdd) # "myRDD" -#'} #' @rdname setName #' @aliases setName,RDD setMethod("setName", @@ -1518,7 +1371,6 @@ setMethod("zipWithIndex", ############ Binary Functions ############# - #' Return the union RDD of two RDDs. #' The same as union() in Spark. #' diff --git a/pkg/R/generics.R b/pkg/R/generics.R index 05300bb0aca8f..76787099a1590 100644 --- a/pkg/R/generics.R +++ b/pkg/R/generics.R @@ -297,15 +297,15 @@ setGeneric("join", function(x, y, ...) { standardGeneric("join") }) #' @rdname join-methods #' @export -setGeneric("leftOuterJoin", function(x, y, ...) { standardGeneric("leftOuterJoin") }) +setGeneric("leftOuterJoin", function(x, y, numPartitions) { standardGeneric("leftOuterJoin") }) #' @rdname join-methods #' @export -setGeneric("rightOuterJoin", function(x, y, ...) { standardGeneric("rightOuterJoin") }) +setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) #' @rdname join-methods #' @export -setGeneric("fullOuterJoin", function(x, y, ...) { standardGeneric("fullOuterJoin") }) +setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) #' @rdname cogroup #' @export diff --git a/pkg/R/pairRDD.R b/pkg/R/pairRDD.R index 319baf9c41ca3..9189410bb2ca6 100644 --- a/pkg/R/pairRDD.R +++ b/pkg/R/pairRDD.R @@ -563,7 +563,7 @@ setMethod("join", #' @rdname join-methods #' @aliases leftOuterJoin,RDD,RDD-method setMethod("leftOuterJoin", - signature(x = "RDD", y = "RDD"), + signature(x = "RDD", y = "RDD", numPartitions = "integer"), function(x, y, numPartitions) { xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) @@ -572,8 +572,7 @@ setMethod("leftOuterJoin", joinTaggedList(v, list(FALSE, TRUE)) } - joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numToInt(numPartitions)), - doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' Right outer join two RDDs @@ -601,7 +600,7 @@ setMethod("leftOuterJoin", #' @rdname join-methods #' @aliases rightOuterJoin,RDD,RDD-method setMethod("rightOuterJoin", - signature(x = "RDD", y = "RDD"), + signature(x = "RDD", y = "RDD", numPartitions = "integer"), function(x, y, numPartitions) { xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) @@ -610,8 +609,7 @@ setMethod("rightOuterJoin", joinTaggedList(v, list(TRUE, FALSE)) } - joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numToInt(numPartitions)), - doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' Full outer join two RDDs @@ -642,7 +640,7 @@ setMethod("rightOuterJoin", #' @rdname join-methods #' @aliases fullOuterJoin,RDD,RDD-method setMethod("fullOuterJoin", - signature(x = "RDD", y = "RDD"), + signature(x = "RDD", y = "RDD", numPartitions = "integer"), function(x, y, numPartitions) { xTagged <- lapply(x, function(i) { list(i[[1]], list(1L, i[[2]])) }) yTagged <- lapply(y, function(i) { list(i[[1]], list(2L, i[[2]])) }) @@ -651,8 +649,7 @@ setMethod("fullOuterJoin", joinTaggedList(v, list(TRUE, TRUE)) } - joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numToInt(numPartitions)), - doJoin) + joined <- flatMapValues(groupByKey(unionRDD(xTagged, yTagged), numPartitions), doJoin) }) #' For each key k in several RDDs, return a resulting RDD that From 3214c6dc709ca3628bc5e728144970a225a42e6e Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 16 Mar 2015 10:06:35 -0700 Subject: [PATCH 625/687] Merge pull request #217 from hlin09/cleanClosureFix Fix cleanClosure() on recursive function calls. --- pkg/R/utils.R | 77 +++++++++++++++++++++++-------------- pkg/inst/tests/test_utils.R | 35 ++++++++--------- 2 files changed, 66 insertions(+), 46 deletions(-) diff --git a/pkg/R/utils.R b/pkg/R/utils.R index 24b04436a33dc..6c99866d57020 100644 --- a/pkg/R/utils.R +++ b/pkg/R/utils.R @@ -320,51 +320,52 @@ listToSeq <- function(l) { # param # node The current AST node in the traversal. # oldEnv The original function environment. -# argNames A character vector of parameters of the function. Their values are -# passed in as arguments, and not included in the closure. -# newEnv A new function environment to store necessary function dependencies. -processClosure <- function(node, oldEnv, argNames, newEnv) { +# defVars An Accumulator of variables names defined in the function's calling environment, +# including function argument and local variable names. +# checkedFunc An environment of function objects examined during cleanClosure. It can +# be considered as a "name"-to-"list of functions" mapping. +# newEnv A new function environment to store necessary function dependencies, an output argument. +processClosure <- function(node, oldEnv, defVars, checkedFuncs, newEnv) { nodeLen <- length(node) if (nodeLen > 1 && typeof(node) == "language") { # Recursive case: current AST node is an internal node, check for its children. if (length(node[[1]]) > 1) { for (i in 1:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) + processClosure(node[[i]], oldEnv, defVars, checkedFuncs, newEnv) } } else { # if node[[1]] is length of 1, check for some R special functions. nodeChar <- as.character(node[[1]]) if (nodeChar == "{" || nodeChar == "(") { # Skip start symbol. for (i in 2:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) + processClosure(node[[i]], oldEnv, defVars, checkedFuncs, newEnv) } } else if (nodeChar == "<-" || nodeChar == "=" || nodeChar == "<<-") { # Assignment Ops. defVar <- node[[2]] if (length(defVar) == 1 && typeof(defVar) == "symbol") { - # Add the defined variable name into .defVars. - assign(".defVars", - c(get(".defVars", envir = .sparkREnv), as.character(defVar)), - envir = .sparkREnv) + # Add the defined variable name into defVars. + addItemToAccumulator(defVars, as.character(defVar)) } else { - processClosure(node[[2]], oldEnv, argNames, newEnv) + processClosure(node[[2]], oldEnv, defVars, checkedFuncs, newEnv) } for (i in 3:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) + processClosure(node[[i]], oldEnv, defVars, checkedFuncs, newEnv) } } else if (nodeChar == "function") { # Function definition. + # Add parameter names. newArgs <- names(node[[2]]) - argNames <- c(argNames, newArgs) # Add parameter names. + lapply(newArgs, function(arg) { addItemToAccumulator(defVars, arg) }) for (i in 3:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) + processClosure(node[[i]], oldEnv, defVars, checkedFuncs, newEnv) } } else if (nodeChar == "$") { # Skip the field. - processClosure(node[[2]], oldEnv, argNames, newEnv) + processClosure(node[[2]], oldEnv, defVars, checkedFuncs, newEnv) } else if (nodeChar == "::" || nodeChar == ":::") { - processClosure(node[[3]], oldEnv, argNames, newEnv) + processClosure(node[[3]], oldEnv, defVars, checkedFuncs, newEnv) } else { for (i in 1:nodeLen) { - processClosure(node[[i]], oldEnv, argNames, newEnv) + processClosure(node[[i]], oldEnv, defVars, checkedFuncs, newEnv) } } } @@ -372,8 +373,7 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { (typeof(node) == "symbol" || typeof(node) == "language")) { # Base case: current AST node is a leaf node and a symbol or a function call. nodeChar <- as.character(node) - if (!nodeChar %in% argNames && # Not a function parameter or function local variable. - !nodeChar %in% get(".defVars", envir = .sparkREnv)) { + if (!nodeChar %in% defVars$data) { # Not a function parameter or local variable. func.env <- oldEnv topEnv <- parent.env(.GlobalEnv) # Search in function environment, and function's enclosing environments @@ -387,11 +387,27 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { !(nodeChar %in% getNamespaceExports("SparkR")))) { # Only include SparkR internals. # Set parameter 'inherits' to FALSE since we do not need to search in # attached package environments. - if (exists(nodeChar, envir = func.env, inherits = FALSE)) { + if (tryCatch(exists(nodeChar, envir = func.env, inherits = FALSE), + error = function(e) { FALSE })) { obj <- get(nodeChar, envir = func.env, inherits = FALSE) - if (is.function(obj)) { - # if the node is a function call, recursively clean its closure. - obj <- cleanClosure(obj) + if (is.function(obj)) { # If the node is a function call. + funcList <- mget(nodeChar, envir = checkedFuncs, inherits = F, + ifnotfound = list(list(NULL)))[[1]] + found <- sapply(funcList, function(func) { + ifelse(identical(func, obj), TRUE, FALSE) + }) + if (sum(found) > 0) { # If function has been examined, ignore. + break + } + # Function has not been examined, record it and recursively clean its closure. + assign(nodeChar, + if (is.null(funcList[[1]])) { + list(obj) + } else { + append(funcList, obj) + }, + envir = checkedFuncs) + obj <- cleanClosure(obj, checkedFuncs) } assign(nodeChar, obj, envir = newEnv) break @@ -410,19 +426,24 @@ processClosure <- function(node, oldEnv, argNames, newEnv) { # outside a UDF, and stores them in the function's environment. # param # func A function whose closure needs to be captured. +# checkedFunc An environment of function objects examined during cleanClosure. It can be +# considered as a "name"-to-"list of functions" mapping. # return value # a new version of func that has an correct environment (closure). -cleanClosure <- function(func) { +cleanClosure <- function(func, checkedFuncs = new.env()) { if (is.function(func)) { newEnv <- new.env(parent = .GlobalEnv) - # .defVars is a character vector of variables names defined in the function. - assign(".defVars", c(), envir = .sparkREnv) func.body <- body(func) oldEnv <- environment(func) + # defVars is an Accumulator of variables names defined in the function's calling + # environment. First, function's arguments are added to defVars. + defVars <- initAccumulator() argNames <- names(as.list(args(func))) - argsNames <- argNames[-length(argNames)] # Remove the ending NULL in pairlist. + for (i in 1:(length(argNames) - 1)) { # Remove the ending NULL in pairlist. + addItemToAccumulator(defVars, argNames[i]) + } # Recursively examine variables in the function body. - processClosure(func.body, oldEnv, argNames, newEnv) + processClosure(func.body, oldEnv, defVars, checkedFuncs, newEnv) environment(func) <- newEnv } func diff --git a/pkg/inst/tests/test_utils.R b/pkg/inst/tests/test_utils.R index 910b110c6e651..e9582db9d98dc 100644 --- a/pkg/inst/tests/test_utils.R +++ b/pkg/inst/tests/test_utils.R @@ -61,13 +61,26 @@ test_that("cleanClosure on R functions", { actual <- get("g", envir = env, inherits = FALSE) expect_equal(actual, g) - # Test for recursive closure capture for a free variable of a function. + base <- c(1, 2, 3) + l <- list(field = matrix(1)) + field <- matrix(2) + defUse <- 3 g <- function(x) { x + y } - f <- function(x) { lapply(x, g) + 1 } + f <- function(x) { + defUse <- base::as.integer(x) + 1 # Test for access operators `::`. + lapply(x, g) + 1 # Test for capturing function call "g"'s closure as a argument of lapply. + l$field[1,1] <- 3 # Test for access operators `$`. + res <- defUse + l$field[1,] # Test for def-use chain of "defUse", and "" symbol. + f(res) # Test for recursive calls. + } newF <- cleanClosure(f) env <- environment(newF) - expect_equal(length(ls(env)), 1) # Only "g". "y" should be in the environemnt of g. - expect_equal(ls(env), "g") + expect_equal(length(ls(env)), 3) # Only "g", "l" and "f". No "base", "field" or "defUse". + expect_true("g" %in% ls(env)) + expect_true("l" %in% ls(env)) + expect_true("f" %in% ls(env)) + expect_equal(get("l", envir = env, inherits = FALSE), l) + # "y" should be in the environemnt of g. newG <- get("g", envir = env, inherits = FALSE) env <- environment(newG) expect_equal(length(ls(env)), 1) @@ -83,20 +96,6 @@ test_that("cleanClosure on R functions", { env <- environment(newF) expect_equal(length(ls(env)), 0) # "y" and "g" should not be included. - # Test for access operators `$`, `::` and `:::`. - l <- list(a = 1) - a <- 2 - base <- c(1, 2, 3) - f <- function(x) { - z <- base::as.integer(x) + 1 - l$a <- 3 - z + l$a - } - newF <- cleanClosure(f) - env <- environment(newF) - expect_equal(ls(env), "l") # "base" and "a" should not be included. - expect_equal(get("l", envir = env, inherits = FALSE), l) - # Test for overriding variables in base namespace (Issue: SparkR-196). nums <- as.list(1:10) rdd <- parallelize(sc, nums, 2L) From 6f95d49c3d49dcb97d677369188d974cecafd34c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Mon, 16 Mar 2015 11:57:57 -0700 Subject: [PATCH 626/687] Merge pull request #221 from shivaram/sparkr-stop-start [SPARKR-219] Clear broadcast variables when JVM is shutdown --- pkg/R/broadcast.R | 7 +++++++ pkg/R/jobj.R | 39 +++++++++++++++++++++++++++-------- pkg/R/serialize.R | 9 +++++++- pkg/R/sparkR.R | 13 ++++++++++++ pkg/R/sparkRBackend.R | 4 ++++ pkg/inst/tests/test_context.R | 33 +++++++++++++++++++++++++++++ 6 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 pkg/inst/tests/test_context.R diff --git a/pkg/R/broadcast.R b/pkg/R/broadcast.R index e359d81b151d4..a604c2c65dd37 100644 --- a/pkg/R/broadcast.R +++ b/pkg/R/broadcast.R @@ -60,3 +60,10 @@ setBroadcastValue <- function(bcastId, value) { bcastIdStr <- as.character(bcastId) .broadcastValues[[bcastIdStr]] <- value } + +#' Helper function to clear the list of broadcast variables we know about +#' Should be called when the SparkR JVM backend is shutdown +clearBroadcastVariables <- function() { + bcasts <- ls(.broadcastNames) + rm(list = bcasts, envir = .broadcastNames) +} diff --git a/pkg/R/jobj.R b/pkg/R/jobj.R index de459110c426c..8612a790c2799 100644 --- a/pkg/R/jobj.R +++ b/pkg/R/jobj.R @@ -8,6 +8,15 @@ # List of object ids to be removed .toRemoveJobjs <- new.env(parent = emptyenv()) +# Check if jobj was created with the current SparkContext +isValidJobj <- function(jobj) { + if (exists(".scStartTime", envir = .sparkREnv)) { + jobj$appId == get(".scStartTime", envir = .sparkREnv) + } else { + FALSE + } +} + getJobj <- function(objId) { newObj <- jobj(objId) if (exists(objId, .validJobjs)) { @@ -27,6 +36,8 @@ jobj <- function(objId) { # finalizers for environments or external references pointers. obj <- structure(new.env(parent = emptyenv()), class = "jobj") obj$id <- objId + obj$appId <- get(".scStartTime", envir = .sparkREnv) + # Register a finalizer to remove the Java object when this reference # is garbage collected in R reg.finalizer(obj, cleanup.jobj) @@ -47,14 +58,24 @@ print.jobj <- function(x, ...) { } cleanup.jobj <- function(jobj) { - objId <- jobj$id - .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 - - if (.validJobjs[[objId]] == 0) { - rm(list = objId, envir = .validJobjs) - # NOTE: We cannot call removeJObject here as the finalizer may be run - # in the middle of another RPC. Thus we queue up this object Id to be removed - # and then run all the removeJObject when the next RPC is called. - .toRemoveJobjs[[objId]] <- 1 + if (isValidJobj(jobj)) { + objId <- jobj$id + .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 + + if (.validJobjs[[objId]] == 0) { + rm(list = objId, envir = .validJobjs) + # NOTE: We cannot call removeJObject here as the finalizer may be run + # in the middle of another RPC. Thus we queue up this object Id to be removed + # and then run all the removeJObject when the next RPC is called. + .toRemoveJobjs[[objId]] <- 1 + } } } + +clearJobjs <- function() { + valid <- ls(.validJobjs) + rm(list = valid, envir = .validJobjs) + + removeList <- ls(.toRemoveJobjs) + rm(list = removeList, envir = .toRemoveJobjs) +} diff --git a/pkg/R/serialize.R b/pkg/R/serialize.R index 22a462fac89b0..4720669409ab1 100644 --- a/pkg/R/serialize.R +++ b/pkg/R/serialize.R @@ -32,7 +32,7 @@ writeObject <- function(con, object, writeType = TRUE) { numeric = writeDouble(con, object), raw = writeRaw(con, object), list = writeList(con, object), - jobj = writeString(con, object$id), + jobj = writeJobj(con, object), environment = writeEnv(con, object), Date = writeDate(con, object), POSIXlt = writeTime(con, object), @@ -44,6 +44,13 @@ writeVoid <- function(con) { # no value for NULL } +writeJobj <- function(con, value) { + if (!isValidJobj(value)) { + stop("invalid jobj ", value$id) + } + writeString(con, value$id) +} + writeString <- function(con, value) { writeInt(con, as.integer(nchar(value) + 1)) writeBin(value, con, endian = "big") diff --git a/pkg/R/sparkR.R b/pkg/R/sparkR.R index efbd0aad40198..ddd8d53a478c8 100644 --- a/pkg/R/sparkR.R +++ b/pkg/R/sparkR.R @@ -35,7 +35,9 @@ sparkR.stop <- function(env = .sparkREnv) { # Also close the connection and remove it from our env conn <- get(".sparkRCon", envir = env) close(conn) + rm(".sparkRCon", envir = env) + rm(".scStartTime", envir = env) } if (exists(".monitorConn", envir = env)) { @@ -43,6 +45,13 @@ sparkR.stop <- function(env = .sparkREnv) { close(conn) rm(".monitorConn", envir = env) } + + # Clear all broadcast variables we have + # as the jobj will not be valid if we restart the JVM + clearBroadcastVariables() + + # Clear jobj maps + clearJobjs() } #' Initialize a new Spark Context. @@ -178,6 +187,10 @@ sparkR.init <- function( nonEmptyJars <- Filter(function(x) { x != "" }, jars) localJarPaths <- sapply(nonEmptyJars, function(j) { utils::URLencode(paste("file:", uriSep, j, sep = "")) }) + # Set the start time to identify jobjs + # Seconds resolution is good enough for this purpose, so use ints + assign(".scStartTime", as.integer(Sys.time()), envir = .sparkREnv) + assign( ".sparkRjsc", callJStatic( diff --git a/pkg/R/sparkRBackend.R b/pkg/R/sparkRBackend.R index e4e9eda14bdc7..0754b5002f2d3 100644 --- a/pkg/R/sparkRBackend.R +++ b/pkg/R/sparkRBackend.R @@ -13,6 +13,10 @@ isInstanceOf <- function(jobj, className) { # from the SparkRBackend. callJMethod <- function(objId, methodName, ...) { stopifnot(class(objId) == "jobj") + if (!isValidJobj(objId)) { + stop("Invalid jobj ", objId$id, + ". If SparkR was restarted, Spark operations need to be re-executed.") + } invokeJava(isStatic = FALSE, objId$id, methodName, ...) } diff --git a/pkg/inst/tests/test_context.R b/pkg/inst/tests/test_context.R new file mode 100644 index 0000000000000..fe120d8c681db --- /dev/null +++ b/pkg/inst/tests/test_context.R @@ -0,0 +1,33 @@ +context("test functions in sparkR.R") + +test_that("repeatedly starting and stopping SparkR", { + for (i in 1:4) { + sc <- sparkR.init() + rdd <- parallelize(sc, 1:20, 2L) + expect_equal(count(rdd), 20) + sparkR.stop() + } +}) + +test_that("rdd GC across sparkR.stop", { + sparkR.stop() + sc <- sparkR.init() # sc should get id 0 + rdd1 <- parallelize(sc, 1:20, 2L) # rdd1 should get id 1 + rdd2 <- parallelize(sc, 1:10, 2L) # rdd2 should get id 2 + sparkR.stop() + + sc <- sparkR.init() # sc should get id 0 again + + # GC rdd1 before creating rdd3 and rdd2 after + rm(rdd1) + gc() + + rdd3 <- parallelize(sc, 1:20, 2L) # rdd3 should get id 1 now + rdd4 <- parallelize(sc, 1:10, 2L) # rdd4 should get id 2 now + + rm(rdd2) + gc() + + count(rdd3) + count(rdd4) +}) From 5e610cba9bbd86cc9745d042e7c5e664424f7fcf Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 16 Mar 2015 14:31:05 -0700 Subject: [PATCH 627/687] add more API for Column --- pkg/NAMESPACE | 9 ++- pkg/R/SQLContext.R | 10 +++ pkg/R/column.R | 112 +++++++++++++++++++-------------- pkg/R/generics.R | 80 +++++++++++++++++++++++ pkg/inst/tests/test_sparkSQL.R | 8 +++ 5 files changed, 172 insertions(+), 47 deletions(-) diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index f802badeaefd5..a5c142e0cae2b 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -127,10 +127,17 @@ exportClasses("Column") exportMethods("asc", "desc", - "first", "last", "lower", "upper", + "like", + "rlike", + "startsWith", + "endsWith", + "substr", + "contains", + "getField", + "getItem", "abs", "sqrt", "min", diff --git a/pkg/R/SQLContext.R b/pkg/R/SQLContext.R index f5ca720b8d5c5..b40ab20838fcc 100644 --- a/pkg/R/SQLContext.R +++ b/pkg/R/SQLContext.R @@ -130,6 +130,16 @@ createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { }) } + # SPAKR-SQL does not support '.' in column name, so replace it with '_' + # TODO(davies): remove this once SPARK-2775 is fixed + names <- lapply(names, function(n) { + nn <- gsub("[.]", "_", n) + if (nn != n) { + warning(paste("Use", nn, "instead of", n, " as column name")) + } + nn + }) + types <- lapply(row, infer_type) fields <- lapply(1:length(row), function(i) { list(name = names[[i]], type = types[[i]], nullable = TRUE) diff --git a/pkg/R/column.R b/pkg/R/column.R index 9468a1e9bb90a..baeaac8eb25a3 100644 --- a/pkg/R/column.R +++ b/pkg/R/column.R @@ -1,6 +1,6 @@ #' Column Class -#' @include jobj.R +#' @include generics.R jobj.R NULL setOldClass("jobj") @@ -32,17 +32,16 @@ setMethod("show", "Column", cat("Column", callJMethod(object@jc, "toString"), "\n") }) -# TODO(davies): like, rlike, startwith, substr, getField, getItem operators <- list( "+" = "plus", "-" = "minus", "*" = "multiply", "/" = "divide", "%%" = "mod", "==" = "equalTo", ">" = "gt", "<" = "lt", "!=" = "notEqual", "<=" = "leq", ">=" = "geq", # we can not override `&&` and `||`, so use `&` and `|` instead "&" = "and", "|" = "or" #, "!" = "unary_$bang" ) - +column_functions1 <- c("asc", "desc", "isNull", "isNotNull") +column_functions2 <- c("like", "rlike", "startsWith", "endsWith", "getField", "getItem", "contains") functions <- c("min", "max", "sum", "avg", "mean", "count", "abs", "sqrt", - "first", "last", "lower", "upper", "sumDistinct", - "isNull", "isNotNull") + "first", "last", "lower", "upper", "sumDistinct") createOperator <- function(op) { setMethod(op, @@ -64,7 +63,27 @@ createOperator <- function(op) { }) } -createFunction <- function(name) { +createColumnFunction1 <- function(name) { + setMethod(name, + signature(x = "Column"), + function(x) { + column(callJMethod(x@jc, name)) + }) +} + +createColumnFunction2 <- function(name) { + setMethod(name, + signature(x = "Column"), + function(x, data) { + if (class(data) == "Column") { + data <- data@jc + } + jc <- callJMethod(x@jc, name, data) + column(jc) + }) +} + +createStaticFunction <- function(name) { setMethod(name, signature(x = "Column"), function(x) { @@ -77,62 +96,60 @@ createMethods <- function() { for (op in names(operators)) { createOperator(op) } - - setGeneric("avg", function(x, ...) { standardGeneric("avg") }) - setGeneric("last", function(x) { standardGeneric("last") }) - setGeneric("lower", function(x) { standardGeneric("lower") }) - setGeneric("upper", function(x) { standardGeneric("upper") }) - setGeneric("isNull", function(x) { standardGeneric("isNull") }) - setGeneric("isNotNull", function(x) { standardGeneric("isNotNull") }) - setGeneric("sumDistinct", function(x) { standardGeneric("sumDistinct") }) - + for (name in column_functions1) { + createColumnFunction1(name) + } + for (name in column_functions2) { + createColumnFunction2(name) + } for (x in functions) { - createFunction(x) + createStaticFunction(x) } } createMethods() -setGeneric("asc", function(x) { standardGeneric("asc") }) - -setMethod("asc", - signature(x = "Column"), - function(x) { - jc <- callJMethod(x@jc, "asc") - column(jc) - }) - -setGeneric("desc", function(x) { standardGeneric("desc") }) - -setMethod("desc", - signature(x = "Column"), - function(x) { - jc <- callJMethod(x@jc, "desc") - column(jc) - }) - setMethod("alias", signature(object = "Column"), function(object, data) { - if (class(data) == "character") { + if (is.character(data)) { column(callJMethod(object@jc, "as", data)) } else { - # TODO(davies): support DataType object - stop("not implemented") + stop("data should be character") } }) -setGeneric("cast", function(x, dataType) { standardGeneric("cast") }) +#' An expression that returns a substring. +setMethod("substr", signature(x = "Column"), + function(x, start, stop) { + jc <- callJMethod(x@jc, "substr", as.integer(start - 1), as.integer(stop - start + 1)) + column(jc) + }) +#' Casts the column to a different data type. +#' @examples +#' \donotrun{ +#' cast(df$age, "string") +#' cast(df$name, list(type="array", elementType="byte", containsNull = TRUE)) +#' } setMethod("cast", - signature(x = "Column", dataType = "character"), + signature(x = "Column"), function(x, dataType) { - column(callJMethod(x@jc, "cast", dataType)) + if (is.character(dataType)) { + column(callJMethod(x@jc, "cast", dataType)) + } else if (is.list(dataType)) { + json <- tojson(dataType) + jdataType <- callJStatic("org.apache.spark.sql.types.DataType", "fromJson", json) + column(callJMethod(x@jc, "cast", jdataType)) + } else { + stop("dataType should be character or list") + } }) - -setGeneric("approxCountDistinct", function(x, ...) { standardGeneric("approxCountDistinct") }) - +#' Approx Count Distinct +#' +#' Returns the approximate number of distinct items in a group. +#' setMethod("approxCountDistinct", signature(x = "Column"), function(x, rsd = 0.95) { @@ -140,15 +157,18 @@ setMethod("approxCountDistinct", column(jc) }) -setGeneric("countDistinct", function(x, ...) { standardGeneric("countDistinct") }) - +#' Count Distinct +#' +#' returns the number of distinct items in a group. +#' setMethod("countDistinct", signature(x = "Column"), function(x, ...) { jcol <- lapply(list(...), function (x) { x@jc }) - jc <- callJStatic("org.apache.spark.sql.functions", "countDistinct", x@jc, listToSeq(jcol)) + jc <- callJStatic("org.apache.spark.sql.functions", "countDistinct", x@jc, + listToSeq(jcol)) column(jc) }) diff --git a/pkg/R/generics.R b/pkg/R/generics.R index 76787099a1590..fd8c214b1342b 100644 --- a/pkg/R/generics.R +++ b/pkg/R/generics.R @@ -330,3 +330,83 @@ setGeneric("sortByKey", function(x, #' @export setGeneric("value", function(bcast) { standardGeneric("value") }) + +################### Column Methods ######################## + +#' @rdname column +#' @export +setGeneric("asc", function(x) { standardGeneric("asc") }) + +#' @rdname column +#' @export +setGeneric("desc", function(x) { standardGeneric("desc") }) + +#' @rdname column +#' @export +setGeneric("avg", function(x, ...) { standardGeneric("avg") }) + +#' @rdname column +#' @export +setGeneric("last", function(x) { standardGeneric("last") }) + +#' @rdname column +#' @export +setGeneric("lower", function(x) { standardGeneric("lower") }) + +#' @rdname column +#' @export +setGeneric("upper", function(x) { standardGeneric("upper") }) + +#' @rdname column +#' @export +setGeneric("like", function(x, ...) { standardGeneric("like") }) + +#' @rdname column +#' @export +setGeneric("rlike", function(x, ...) { standardGeneric("rlike") }) + +#' @rdname column +#' @export +setGeneric("startsWith", function(x, ...) { standardGeneric("startsWith") }) + +#' @rdname column +#' @export +setGeneric("endsWith", function(x, ...) { standardGeneric("endsWith") }) + +#' @rdname column +#' @export +setGeneric("getField", function(x, ...) { standardGeneric("getField") }) + +#' @rdname column +#' @export +setGeneric("getItem", function(x, ...) { standardGeneric("getItem") }) + +#' @rdname column +#' @export +setGeneric("contains", function(x, ...) { standardGeneric("contains") }) + +#' @rdname column +#' @export +setGeneric("isNull", function(x) { standardGeneric("isNull") }) + +#' @rdname column +#' @export +setGeneric("isNotNull", function(x) { standardGeneric("isNotNull") }) + +#' @rdname column +#' @export +setGeneric("sumDistinct", function(x) { standardGeneric("sumDistinct") }) + +#' @rdname column +#' @export +setGeneric("cast", function(x, dataType) { standardGeneric("cast") }) + +#' @rdname column +#' @export +setGeneric("approxCountDistinct", function(x, ...) { standardGeneric("approxCountDistinct") }) + +#' @rdname column +#' @export +setGeneric("countDistinct", function(x, ...) { standardGeneric("countDistinct") }) + + diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index d8096ddcd9678..50c8d34340c8c 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -504,6 +504,14 @@ test_that("column functions", { c4 <- approxCountDistinct(c) + countDistinct(c) + cast(c, "string") }) +test_that("string operators", { + df <- jsonFile(sqlCtx, jsonPath) + expect_equal(count(where(df, like(df$name, "A%"))), 1) + expect_equal(count(where(df, startsWith(df$name, "A"))), 1) + expect_equal(first(select(df, substr(df$name, 1, 2)))[[1]], "Mi") + expect_equal(first(select(df, cast(df$age, "string")))[[1]], "NA") +}) + test_that("group by", { df <- jsonFile(sqlCtx, jsonPath) df1 <- agg(df, name = "max", age = "sum") From b043876d177d98f8dbbadce8aeceef1ebe715f60 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Mon, 16 Mar 2015 16:21:55 -0700 Subject: [PATCH 628/687] fix test --- pkg/inst/tests/test_sparkSQL.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/inst/tests/test_sparkSQL.R b/pkg/inst/tests/test_sparkSQL.R index 50c8d34340c8c..66e9869989884 100644 --- a/pkg/inst/tests/test_sparkSQL.R +++ b/pkg/inst/tests/test_sparkSQL.R @@ -509,7 +509,7 @@ test_that("string operators", { expect_equal(count(where(df, like(df$name, "A%"))), 1) expect_equal(count(where(df, startsWith(df$name, "A"))), 1) expect_equal(first(select(df, substr(df$name, 1, 2)))[[1]], "Mi") - expect_equal(first(select(df, cast(df$age, "string")))[[1]], "NA") + expect_equal(collect(select(df, cast(df$age, "string")))[[2, 1]], "30") }) test_that("group by", { From 44994c25a79144d85988af2fafefd7111dd1f849 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 10:06:46 -0700 Subject: [PATCH 629/687] Moved files to R/ --- .gitignore => R/.gitignore | 0 .travis.yml => R/.travis.yml | 0 BUILDING.md => R/BUILDING.md | 0 DOCUMENTATION.md => R/DOCUMENTATION.md | 0 LICENSE => R/LICENSE | 0 README.md => R/README.md | 0 SparkR_IDE_Setup.sh => R/SparkR_IDE_Setup.sh | 0 SparkR_prep-0.1.sh => R/SparkR_prep-0.1.sh | 0 TODO.md => R/TODO.md | 0 {examples => R/examples}/dfc/DFC.R | 0 {examples => R/examples}/dfc/README.txt | 0 {examples => R/examples}/dfc/example.mat | 0 {examples => R/examples}/dfc/maskUV.cpp | 0 {examples => R/examples}/kmeans.R | 0 {examples => R/examples}/linear_solver_mnist.R | 0 {examples => R/examples}/logistic_regression.R | 0 {examples => R/examples}/pi.R | 0 {examples => R/examples}/wordcount.R | 0 install-dev.bat => R/install-dev.bat | 0 install-dev.sh => R/install-dev.sh | 0 {pkg => R/pkg}/DESCRIPTION | 0 {pkg => R/pkg}/NAMESPACE | 0 {pkg => R/pkg}/R/DataFrame.R | 0 {pkg => R/pkg}/R/RDD.R | 0 {pkg => R/pkg}/R/SQLContext.R | 0 {pkg => R/pkg}/R/SQLTypes.R | 0 {pkg => R/pkg}/R/broadcast.R | 0 {pkg => R/pkg}/R/column.R | 0 {pkg => R/pkg}/R/context.R | 0 {pkg => R/pkg}/R/deserialize.R | 0 {pkg => R/pkg}/R/generics.R | 0 {pkg => R/pkg}/R/group.R | 0 {pkg => R/pkg}/R/jobj.R | 0 {pkg => R/pkg}/R/pairRDD.R | 0 {pkg => R/pkg}/R/serialize.R | 0 {pkg => R/pkg}/R/sparkR.R | 0 {pkg => R/pkg}/R/sparkRBackend.R | 0 {pkg => R/pkg}/R/sparkRClient.R | 0 {pkg => R/pkg}/R/utils.R | 0 {pkg => R/pkg}/R/zzz.R | 0 {pkg => R/pkg}/inst/sparkR-submit | 0 {pkg => R/pkg}/inst/tests/test_binaryFile.R | 0 {pkg => R/pkg}/inst/tests/test_binary_function.R | 0 {pkg => R/pkg}/inst/tests/test_broadcast.R | 0 {pkg => R/pkg}/inst/tests/test_context.R | 0 {pkg => R/pkg}/inst/tests/test_includePackage.R | 0 {pkg => R/pkg}/inst/tests/test_parallelize_collect.R | 0 {pkg => R/pkg}/inst/tests/test_rdd.R | 0 {pkg => R/pkg}/inst/tests/test_shuffle.R | 0 {pkg => R/pkg}/inst/tests/test_sparkSQL.R | 0 {pkg => R/pkg}/inst/tests/test_take.R | 0 {pkg => R/pkg}/inst/tests/test_textFile.R | 0 {pkg => R/pkg}/inst/tests/test_utils.R | 0 {pkg => R/pkg}/inst/worker/daemon.R | 0 {pkg => R/pkg}/inst/worker/worker.R | 0 {pkg => R/pkg}/man/DataFrame.Rd | 0 {pkg => R/pkg}/man/RDD.Rd | 0 {pkg => R/pkg}/man/aggregateByKey.Rd | 0 {pkg => R/pkg}/man/aggregateRDD.Rd | 0 {pkg => R/pkg}/man/broadcast-class.Rd | 0 {pkg => R/pkg}/man/broadcast-internal.Rd | 0 {pkg => R/pkg}/man/broadcast.Rd | 0 {pkg => R/pkg}/man/cache-methods.Rd | 0 {pkg => R/pkg}/man/cacheTable.Rd | 0 {pkg => R/pkg}/man/checkpoint-methods.Rd | 0 {pkg => R/pkg}/man/coalesce.Rd | 0 {pkg => R/pkg}/man/cogroup.Rd | 0 {pkg => R/pkg}/man/collect-methods.Rd | 0 {pkg => R/pkg}/man/collectToDF.Rd | 0 {pkg => R/pkg}/man/combineByKey.Rd | 0 {pkg => R/pkg}/man/count.Rd | 0 {pkg => R/pkg}/man/countByKey.Rd | 0 {pkg => R/pkg}/man/countByValue.Rd | 0 {pkg => R/pkg}/man/distinct.Rd | 0 {pkg => R/pkg}/man/filterRDD.Rd | 0 {pkg => R/pkg}/man/flatMap.Rd | 0 {pkg => R/pkg}/man/flatMapValues.Rd | 0 {pkg => R/pkg}/man/fold.Rd | 0 {pkg => R/pkg}/man/foldByKey.Rd | 0 {pkg => R/pkg}/man/foreach.Rd | 0 {pkg => R/pkg}/man/groupByKey.Rd | 0 {pkg => R/pkg}/man/hashCode.Rd | 0 {pkg => R/pkg}/man/includePackage.Rd | 0 {pkg => R/pkg}/man/join-methods.Rd | 0 {pkg => R/pkg}/man/jsonFile.Rd | 0 {pkg => R/pkg}/man/keyBy.Rd | 0 {pkg => R/pkg}/man/keys.Rd | 0 {pkg => R/pkg}/man/lapply.Rd | 0 {pkg => R/pkg}/man/lapplyPartition.Rd | 0 {pkg => R/pkg}/man/lapplyPartitionsWithIndex.Rd | 0 {pkg => R/pkg}/man/lookup.Rd | 0 {pkg => R/pkg}/man/mapValues.Rd | 0 {pkg => R/pkg}/man/maximum.Rd | 0 {pkg => R/pkg}/man/minimum.Rd | 0 {pkg => R/pkg}/man/name.Rd | 0 {pkg => R/pkg}/man/numPartitions.Rd | 0 {pkg => R/pkg}/man/objectFile.Rd | 0 {pkg => R/pkg}/man/parallelize.Rd | 0 {pkg => R/pkg}/man/parquetFile.Rd | 0 {pkg => R/pkg}/man/partitionBy.Rd | 0 {pkg => R/pkg}/man/persist.Rd | 0 {pkg => R/pkg}/man/pipeRDD.Rd | 0 {pkg => R/pkg}/man/print.jobj.Rd | 0 {pkg => R/pkg}/man/printSchema.Rd | 0 {pkg => R/pkg}/man/reduce.Rd | 0 {pkg => R/pkg}/man/reduceByKey.Rd | 0 {pkg => R/pkg}/man/reduceByKeyLocally.Rd | 0 {pkg => R/pkg}/man/registerTempTable.Rd | 0 {pkg => R/pkg}/man/repartition.Rd | 0 {pkg => R/pkg}/man/sampleRDD.Rd | 0 {pkg => R/pkg}/man/saveAsObjectFile.Rd | 0 {pkg => R/pkg}/man/saveAsTextFile.Rd | 0 {pkg => R/pkg}/man/setCheckpointDir.Rd | 0 {pkg => R/pkg}/man/setName.Rd | 0 {pkg => R/pkg}/man/sortBy.Rd | 0 {pkg => R/pkg}/man/sortByKey.Rd | 0 {pkg => R/pkg}/man/sparkR.init.Rd | 0 {pkg => R/pkg}/man/sparkRSQL.init.Rd | 0 {pkg => R/pkg}/man/sql.Rd | 0 {pkg => R/pkg}/man/table.Rd | 0 {pkg => R/pkg}/man/take.Rd | 0 {pkg => R/pkg}/man/takeOrdered.Rd | 0 {pkg => R/pkg}/man/takeSample.Rd | 0 {pkg => R/pkg}/man/textFile.Rd | 0 {pkg => R/pkg}/man/top.Rd | 0 {pkg => R/pkg}/man/uncacheTable.Rd | 0 {pkg => R/pkg}/man/unionRDD.Rd | 0 {pkg => R/pkg}/man/unpersist-methods.Rd | 0 {pkg => R/pkg}/man/values.Rd | 0 {pkg => R/pkg}/man/zipWithIndex.Rd | 0 {pkg => R/pkg}/man/zipWithUniqueId.Rd | 0 {pkg => R/pkg}/src/Makefile | 0 {pkg => R/pkg}/src/Makefile.win | 0 {pkg => R/pkg}/src/build.sbt | 0 {pkg => R/pkg}/src/pom.xml | 0 {pkg => R/pkg}/src/project/build.properties | 0 {pkg => R/pkg}/src/project/plugins.sbt | 0 {pkg => R/pkg}/src/sbt/sbt | 0 {pkg => R/pkg}/src/src/main/resources/log4j.properties | 0 .../src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala | 0 .../src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala | 0 .../src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala | 0 .../main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala | 0 .../edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala | 0 .../src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala | 0 .../main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala | 0 {pkg => R/pkg}/src/string_hash_code.c | 0 {pkg => R/pkg}/tests/run-all.R | 0 run-tests.sh => R/run-tests.sh | 0 sparkR => R/sparkR | 0 150 files changed, 0 insertions(+), 0 deletions(-) rename .gitignore => R/.gitignore (100%) rename .travis.yml => R/.travis.yml (100%) rename BUILDING.md => R/BUILDING.md (100%) rename DOCUMENTATION.md => R/DOCUMENTATION.md (100%) rename LICENSE => R/LICENSE (100%) rename README.md => R/README.md (100%) rename SparkR_IDE_Setup.sh => R/SparkR_IDE_Setup.sh (100%) rename SparkR_prep-0.1.sh => R/SparkR_prep-0.1.sh (100%) rename TODO.md => R/TODO.md (100%) rename {examples => R/examples}/dfc/DFC.R (100%) rename {examples => R/examples}/dfc/README.txt (100%) rename {examples => R/examples}/dfc/example.mat (100%) rename {examples => R/examples}/dfc/maskUV.cpp (100%) rename {examples => R/examples}/kmeans.R (100%) rename {examples => R/examples}/linear_solver_mnist.R (100%) rename {examples => R/examples}/logistic_regression.R (100%) rename {examples => R/examples}/pi.R (100%) rename {examples => R/examples}/wordcount.R (100%) rename install-dev.bat => R/install-dev.bat (100%) rename install-dev.sh => R/install-dev.sh (100%) rename {pkg => R/pkg}/DESCRIPTION (100%) rename {pkg => R/pkg}/NAMESPACE (100%) rename {pkg => R/pkg}/R/DataFrame.R (100%) rename {pkg => R/pkg}/R/RDD.R (100%) rename {pkg => R/pkg}/R/SQLContext.R (100%) rename {pkg => R/pkg}/R/SQLTypes.R (100%) rename {pkg => R/pkg}/R/broadcast.R (100%) rename {pkg => R/pkg}/R/column.R (100%) rename {pkg => R/pkg}/R/context.R (100%) rename {pkg => R/pkg}/R/deserialize.R (100%) rename {pkg => R/pkg}/R/generics.R (100%) rename {pkg => R/pkg}/R/group.R (100%) rename {pkg => R/pkg}/R/jobj.R (100%) rename {pkg => R/pkg}/R/pairRDD.R (100%) rename {pkg => R/pkg}/R/serialize.R (100%) rename {pkg => R/pkg}/R/sparkR.R (100%) rename {pkg => R/pkg}/R/sparkRBackend.R (100%) rename {pkg => R/pkg}/R/sparkRClient.R (100%) rename {pkg => R/pkg}/R/utils.R (100%) rename {pkg => R/pkg}/R/zzz.R (100%) rename {pkg => R/pkg}/inst/sparkR-submit (100%) rename {pkg => R/pkg}/inst/tests/test_binaryFile.R (100%) rename {pkg => R/pkg}/inst/tests/test_binary_function.R (100%) rename {pkg => R/pkg}/inst/tests/test_broadcast.R (100%) rename {pkg => R/pkg}/inst/tests/test_context.R (100%) rename {pkg => R/pkg}/inst/tests/test_includePackage.R (100%) rename {pkg => R/pkg}/inst/tests/test_parallelize_collect.R (100%) rename {pkg => R/pkg}/inst/tests/test_rdd.R (100%) rename {pkg => R/pkg}/inst/tests/test_shuffle.R (100%) rename {pkg => R/pkg}/inst/tests/test_sparkSQL.R (100%) rename {pkg => R/pkg}/inst/tests/test_take.R (100%) rename {pkg => R/pkg}/inst/tests/test_textFile.R (100%) rename {pkg => R/pkg}/inst/tests/test_utils.R (100%) rename {pkg => R/pkg}/inst/worker/daemon.R (100%) rename {pkg => R/pkg}/inst/worker/worker.R (100%) rename {pkg => R/pkg}/man/DataFrame.Rd (100%) rename {pkg => R/pkg}/man/RDD.Rd (100%) rename {pkg => R/pkg}/man/aggregateByKey.Rd (100%) rename {pkg => R/pkg}/man/aggregateRDD.Rd (100%) rename {pkg => R/pkg}/man/broadcast-class.Rd (100%) rename {pkg => R/pkg}/man/broadcast-internal.Rd (100%) rename {pkg => R/pkg}/man/broadcast.Rd (100%) rename {pkg => R/pkg}/man/cache-methods.Rd (100%) rename {pkg => R/pkg}/man/cacheTable.Rd (100%) rename {pkg => R/pkg}/man/checkpoint-methods.Rd (100%) rename {pkg => R/pkg}/man/coalesce.Rd (100%) rename {pkg => R/pkg}/man/cogroup.Rd (100%) rename {pkg => R/pkg}/man/collect-methods.Rd (100%) rename {pkg => R/pkg}/man/collectToDF.Rd (100%) rename {pkg => R/pkg}/man/combineByKey.Rd (100%) rename {pkg => R/pkg}/man/count.Rd (100%) rename {pkg => R/pkg}/man/countByKey.Rd (100%) rename {pkg => R/pkg}/man/countByValue.Rd (100%) rename {pkg => R/pkg}/man/distinct.Rd (100%) rename {pkg => R/pkg}/man/filterRDD.Rd (100%) rename {pkg => R/pkg}/man/flatMap.Rd (100%) rename {pkg => R/pkg}/man/flatMapValues.Rd (100%) rename {pkg => R/pkg}/man/fold.Rd (100%) rename {pkg => R/pkg}/man/foldByKey.Rd (100%) rename {pkg => R/pkg}/man/foreach.Rd (100%) rename {pkg => R/pkg}/man/groupByKey.Rd (100%) rename {pkg => R/pkg}/man/hashCode.Rd (100%) rename {pkg => R/pkg}/man/includePackage.Rd (100%) rename {pkg => R/pkg}/man/join-methods.Rd (100%) rename {pkg => R/pkg}/man/jsonFile.Rd (100%) rename {pkg => R/pkg}/man/keyBy.Rd (100%) rename {pkg => R/pkg}/man/keys.Rd (100%) rename {pkg => R/pkg}/man/lapply.Rd (100%) rename {pkg => R/pkg}/man/lapplyPartition.Rd (100%) rename {pkg => R/pkg}/man/lapplyPartitionsWithIndex.Rd (100%) rename {pkg => R/pkg}/man/lookup.Rd (100%) rename {pkg => R/pkg}/man/mapValues.Rd (100%) rename {pkg => R/pkg}/man/maximum.Rd (100%) rename {pkg => R/pkg}/man/minimum.Rd (100%) rename {pkg => R/pkg}/man/name.Rd (100%) rename {pkg => R/pkg}/man/numPartitions.Rd (100%) rename {pkg => R/pkg}/man/objectFile.Rd (100%) rename {pkg => R/pkg}/man/parallelize.Rd (100%) rename {pkg => R/pkg}/man/parquetFile.Rd (100%) rename {pkg => R/pkg}/man/partitionBy.Rd (100%) rename {pkg => R/pkg}/man/persist.Rd (100%) rename {pkg => R/pkg}/man/pipeRDD.Rd (100%) rename {pkg => R/pkg}/man/print.jobj.Rd (100%) rename {pkg => R/pkg}/man/printSchema.Rd (100%) rename {pkg => R/pkg}/man/reduce.Rd (100%) rename {pkg => R/pkg}/man/reduceByKey.Rd (100%) rename {pkg => R/pkg}/man/reduceByKeyLocally.Rd (100%) rename {pkg => R/pkg}/man/registerTempTable.Rd (100%) rename {pkg => R/pkg}/man/repartition.Rd (100%) rename {pkg => R/pkg}/man/sampleRDD.Rd (100%) rename {pkg => R/pkg}/man/saveAsObjectFile.Rd (100%) rename {pkg => R/pkg}/man/saveAsTextFile.Rd (100%) rename {pkg => R/pkg}/man/setCheckpointDir.Rd (100%) rename {pkg => R/pkg}/man/setName.Rd (100%) rename {pkg => R/pkg}/man/sortBy.Rd (100%) rename {pkg => R/pkg}/man/sortByKey.Rd (100%) rename {pkg => R/pkg}/man/sparkR.init.Rd (100%) rename {pkg => R/pkg}/man/sparkRSQL.init.Rd (100%) rename {pkg => R/pkg}/man/sql.Rd (100%) rename {pkg => R/pkg}/man/table.Rd (100%) rename {pkg => R/pkg}/man/take.Rd (100%) rename {pkg => R/pkg}/man/takeOrdered.Rd (100%) rename {pkg => R/pkg}/man/takeSample.Rd (100%) rename {pkg => R/pkg}/man/textFile.Rd (100%) rename {pkg => R/pkg}/man/top.Rd (100%) rename {pkg => R/pkg}/man/uncacheTable.Rd (100%) rename {pkg => R/pkg}/man/unionRDD.Rd (100%) rename {pkg => R/pkg}/man/unpersist-methods.Rd (100%) rename {pkg => R/pkg}/man/values.Rd (100%) rename {pkg => R/pkg}/man/zipWithIndex.Rd (100%) rename {pkg => R/pkg}/man/zipWithUniqueId.Rd (100%) rename {pkg => R/pkg}/src/Makefile (100%) rename {pkg => R/pkg}/src/Makefile.win (100%) rename {pkg => R/pkg}/src/build.sbt (100%) rename {pkg => R/pkg}/src/pom.xml (100%) rename {pkg => R/pkg}/src/project/build.properties (100%) rename {pkg => R/pkg}/src/project/plugins.sbt (100%) rename {pkg => R/pkg}/src/sbt/sbt (100%) rename {pkg => R/pkg}/src/src/main/resources/log4j.properties (100%) rename {pkg => R/pkg}/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala (100%) rename {pkg => R/pkg}/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala (100%) rename {pkg => R/pkg}/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala (100%) rename {pkg => R/pkg}/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala (100%) rename {pkg => R/pkg}/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala (100%) rename {pkg => R/pkg}/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala (100%) rename {pkg => R/pkg}/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala (100%) rename {pkg => R/pkg}/src/string_hash_code.c (100%) rename {pkg => R/pkg}/tests/run-all.R (100%) rename run-tests.sh => R/run-tests.sh (100%) rename sparkR => R/sparkR (100%) diff --git a/.gitignore b/R/.gitignore similarity index 100% rename from .gitignore rename to R/.gitignore diff --git a/.travis.yml b/R/.travis.yml similarity index 100% rename from .travis.yml rename to R/.travis.yml diff --git a/BUILDING.md b/R/BUILDING.md similarity index 100% rename from BUILDING.md rename to R/BUILDING.md diff --git a/DOCUMENTATION.md b/R/DOCUMENTATION.md similarity index 100% rename from DOCUMENTATION.md rename to R/DOCUMENTATION.md diff --git a/LICENSE b/R/LICENSE similarity index 100% rename from LICENSE rename to R/LICENSE diff --git a/README.md b/R/README.md similarity index 100% rename from README.md rename to R/README.md diff --git a/SparkR_IDE_Setup.sh b/R/SparkR_IDE_Setup.sh similarity index 100% rename from SparkR_IDE_Setup.sh rename to R/SparkR_IDE_Setup.sh diff --git a/SparkR_prep-0.1.sh b/R/SparkR_prep-0.1.sh similarity index 100% rename from SparkR_prep-0.1.sh rename to R/SparkR_prep-0.1.sh diff --git a/TODO.md b/R/TODO.md similarity index 100% rename from TODO.md rename to R/TODO.md diff --git a/examples/dfc/DFC.R b/R/examples/dfc/DFC.R similarity index 100% rename from examples/dfc/DFC.R rename to R/examples/dfc/DFC.R diff --git a/examples/dfc/README.txt b/R/examples/dfc/README.txt similarity index 100% rename from examples/dfc/README.txt rename to R/examples/dfc/README.txt diff --git a/examples/dfc/example.mat b/R/examples/dfc/example.mat similarity index 100% rename from examples/dfc/example.mat rename to R/examples/dfc/example.mat diff --git a/examples/dfc/maskUV.cpp b/R/examples/dfc/maskUV.cpp similarity index 100% rename from examples/dfc/maskUV.cpp rename to R/examples/dfc/maskUV.cpp diff --git a/examples/kmeans.R b/R/examples/kmeans.R similarity index 100% rename from examples/kmeans.R rename to R/examples/kmeans.R diff --git a/examples/linear_solver_mnist.R b/R/examples/linear_solver_mnist.R similarity index 100% rename from examples/linear_solver_mnist.R rename to R/examples/linear_solver_mnist.R diff --git a/examples/logistic_regression.R b/R/examples/logistic_regression.R similarity index 100% rename from examples/logistic_regression.R rename to R/examples/logistic_regression.R diff --git a/examples/pi.R b/R/examples/pi.R similarity index 100% rename from examples/pi.R rename to R/examples/pi.R diff --git a/examples/wordcount.R b/R/examples/wordcount.R similarity index 100% rename from examples/wordcount.R rename to R/examples/wordcount.R diff --git a/install-dev.bat b/R/install-dev.bat similarity index 100% rename from install-dev.bat rename to R/install-dev.bat diff --git a/install-dev.sh b/R/install-dev.sh similarity index 100% rename from install-dev.sh rename to R/install-dev.sh diff --git a/pkg/DESCRIPTION b/R/pkg/DESCRIPTION similarity index 100% rename from pkg/DESCRIPTION rename to R/pkg/DESCRIPTION diff --git a/pkg/NAMESPACE b/R/pkg/NAMESPACE similarity index 100% rename from pkg/NAMESPACE rename to R/pkg/NAMESPACE diff --git a/pkg/R/DataFrame.R b/R/pkg/R/DataFrame.R similarity index 100% rename from pkg/R/DataFrame.R rename to R/pkg/R/DataFrame.R diff --git a/pkg/R/RDD.R b/R/pkg/R/RDD.R similarity index 100% rename from pkg/R/RDD.R rename to R/pkg/R/RDD.R diff --git a/pkg/R/SQLContext.R b/R/pkg/R/SQLContext.R similarity index 100% rename from pkg/R/SQLContext.R rename to R/pkg/R/SQLContext.R diff --git a/pkg/R/SQLTypes.R b/R/pkg/R/SQLTypes.R similarity index 100% rename from pkg/R/SQLTypes.R rename to R/pkg/R/SQLTypes.R diff --git a/pkg/R/broadcast.R b/R/pkg/R/broadcast.R similarity index 100% rename from pkg/R/broadcast.R rename to R/pkg/R/broadcast.R diff --git a/pkg/R/column.R b/R/pkg/R/column.R similarity index 100% rename from pkg/R/column.R rename to R/pkg/R/column.R diff --git a/pkg/R/context.R b/R/pkg/R/context.R similarity index 100% rename from pkg/R/context.R rename to R/pkg/R/context.R diff --git a/pkg/R/deserialize.R b/R/pkg/R/deserialize.R similarity index 100% rename from pkg/R/deserialize.R rename to R/pkg/R/deserialize.R diff --git a/pkg/R/generics.R b/R/pkg/R/generics.R similarity index 100% rename from pkg/R/generics.R rename to R/pkg/R/generics.R diff --git a/pkg/R/group.R b/R/pkg/R/group.R similarity index 100% rename from pkg/R/group.R rename to R/pkg/R/group.R diff --git a/pkg/R/jobj.R b/R/pkg/R/jobj.R similarity index 100% rename from pkg/R/jobj.R rename to R/pkg/R/jobj.R diff --git a/pkg/R/pairRDD.R b/R/pkg/R/pairRDD.R similarity index 100% rename from pkg/R/pairRDD.R rename to R/pkg/R/pairRDD.R diff --git a/pkg/R/serialize.R b/R/pkg/R/serialize.R similarity index 100% rename from pkg/R/serialize.R rename to R/pkg/R/serialize.R diff --git a/pkg/R/sparkR.R b/R/pkg/R/sparkR.R similarity index 100% rename from pkg/R/sparkR.R rename to R/pkg/R/sparkR.R diff --git a/pkg/R/sparkRBackend.R b/R/pkg/R/sparkRBackend.R similarity index 100% rename from pkg/R/sparkRBackend.R rename to R/pkg/R/sparkRBackend.R diff --git a/pkg/R/sparkRClient.R b/R/pkg/R/sparkRClient.R similarity index 100% rename from pkg/R/sparkRClient.R rename to R/pkg/R/sparkRClient.R diff --git a/pkg/R/utils.R b/R/pkg/R/utils.R similarity index 100% rename from pkg/R/utils.R rename to R/pkg/R/utils.R diff --git a/pkg/R/zzz.R b/R/pkg/R/zzz.R similarity index 100% rename from pkg/R/zzz.R rename to R/pkg/R/zzz.R diff --git a/pkg/inst/sparkR-submit b/R/pkg/inst/sparkR-submit similarity index 100% rename from pkg/inst/sparkR-submit rename to R/pkg/inst/sparkR-submit diff --git a/pkg/inst/tests/test_binaryFile.R b/R/pkg/inst/tests/test_binaryFile.R similarity index 100% rename from pkg/inst/tests/test_binaryFile.R rename to R/pkg/inst/tests/test_binaryFile.R diff --git a/pkg/inst/tests/test_binary_function.R b/R/pkg/inst/tests/test_binary_function.R similarity index 100% rename from pkg/inst/tests/test_binary_function.R rename to R/pkg/inst/tests/test_binary_function.R diff --git a/pkg/inst/tests/test_broadcast.R b/R/pkg/inst/tests/test_broadcast.R similarity index 100% rename from pkg/inst/tests/test_broadcast.R rename to R/pkg/inst/tests/test_broadcast.R diff --git a/pkg/inst/tests/test_context.R b/R/pkg/inst/tests/test_context.R similarity index 100% rename from pkg/inst/tests/test_context.R rename to R/pkg/inst/tests/test_context.R diff --git a/pkg/inst/tests/test_includePackage.R b/R/pkg/inst/tests/test_includePackage.R similarity index 100% rename from pkg/inst/tests/test_includePackage.R rename to R/pkg/inst/tests/test_includePackage.R diff --git a/pkg/inst/tests/test_parallelize_collect.R b/R/pkg/inst/tests/test_parallelize_collect.R similarity index 100% rename from pkg/inst/tests/test_parallelize_collect.R rename to R/pkg/inst/tests/test_parallelize_collect.R diff --git a/pkg/inst/tests/test_rdd.R b/R/pkg/inst/tests/test_rdd.R similarity index 100% rename from pkg/inst/tests/test_rdd.R rename to R/pkg/inst/tests/test_rdd.R diff --git a/pkg/inst/tests/test_shuffle.R b/R/pkg/inst/tests/test_shuffle.R similarity index 100% rename from pkg/inst/tests/test_shuffle.R rename to R/pkg/inst/tests/test_shuffle.R diff --git a/pkg/inst/tests/test_sparkSQL.R b/R/pkg/inst/tests/test_sparkSQL.R similarity index 100% rename from pkg/inst/tests/test_sparkSQL.R rename to R/pkg/inst/tests/test_sparkSQL.R diff --git a/pkg/inst/tests/test_take.R b/R/pkg/inst/tests/test_take.R similarity index 100% rename from pkg/inst/tests/test_take.R rename to R/pkg/inst/tests/test_take.R diff --git a/pkg/inst/tests/test_textFile.R b/R/pkg/inst/tests/test_textFile.R similarity index 100% rename from pkg/inst/tests/test_textFile.R rename to R/pkg/inst/tests/test_textFile.R diff --git a/pkg/inst/tests/test_utils.R b/R/pkg/inst/tests/test_utils.R similarity index 100% rename from pkg/inst/tests/test_utils.R rename to R/pkg/inst/tests/test_utils.R diff --git a/pkg/inst/worker/daemon.R b/R/pkg/inst/worker/daemon.R similarity index 100% rename from pkg/inst/worker/daemon.R rename to R/pkg/inst/worker/daemon.R diff --git a/pkg/inst/worker/worker.R b/R/pkg/inst/worker/worker.R similarity index 100% rename from pkg/inst/worker/worker.R rename to R/pkg/inst/worker/worker.R diff --git a/pkg/man/DataFrame.Rd b/R/pkg/man/DataFrame.Rd similarity index 100% rename from pkg/man/DataFrame.Rd rename to R/pkg/man/DataFrame.Rd diff --git a/pkg/man/RDD.Rd b/R/pkg/man/RDD.Rd similarity index 100% rename from pkg/man/RDD.Rd rename to R/pkg/man/RDD.Rd diff --git a/pkg/man/aggregateByKey.Rd b/R/pkg/man/aggregateByKey.Rd similarity index 100% rename from pkg/man/aggregateByKey.Rd rename to R/pkg/man/aggregateByKey.Rd diff --git a/pkg/man/aggregateRDD.Rd b/R/pkg/man/aggregateRDD.Rd similarity index 100% rename from pkg/man/aggregateRDD.Rd rename to R/pkg/man/aggregateRDD.Rd diff --git a/pkg/man/broadcast-class.Rd b/R/pkg/man/broadcast-class.Rd similarity index 100% rename from pkg/man/broadcast-class.Rd rename to R/pkg/man/broadcast-class.Rd diff --git a/pkg/man/broadcast-internal.Rd b/R/pkg/man/broadcast-internal.Rd similarity index 100% rename from pkg/man/broadcast-internal.Rd rename to R/pkg/man/broadcast-internal.Rd diff --git a/pkg/man/broadcast.Rd b/R/pkg/man/broadcast.Rd similarity index 100% rename from pkg/man/broadcast.Rd rename to R/pkg/man/broadcast.Rd diff --git a/pkg/man/cache-methods.Rd b/R/pkg/man/cache-methods.Rd similarity index 100% rename from pkg/man/cache-methods.Rd rename to R/pkg/man/cache-methods.Rd diff --git a/pkg/man/cacheTable.Rd b/R/pkg/man/cacheTable.Rd similarity index 100% rename from pkg/man/cacheTable.Rd rename to R/pkg/man/cacheTable.Rd diff --git a/pkg/man/checkpoint-methods.Rd b/R/pkg/man/checkpoint-methods.Rd similarity index 100% rename from pkg/man/checkpoint-methods.Rd rename to R/pkg/man/checkpoint-methods.Rd diff --git a/pkg/man/coalesce.Rd b/R/pkg/man/coalesce.Rd similarity index 100% rename from pkg/man/coalesce.Rd rename to R/pkg/man/coalesce.Rd diff --git a/pkg/man/cogroup.Rd b/R/pkg/man/cogroup.Rd similarity index 100% rename from pkg/man/cogroup.Rd rename to R/pkg/man/cogroup.Rd diff --git a/pkg/man/collect-methods.Rd b/R/pkg/man/collect-methods.Rd similarity index 100% rename from pkg/man/collect-methods.Rd rename to R/pkg/man/collect-methods.Rd diff --git a/pkg/man/collectToDF.Rd b/R/pkg/man/collectToDF.Rd similarity index 100% rename from pkg/man/collectToDF.Rd rename to R/pkg/man/collectToDF.Rd diff --git a/pkg/man/combineByKey.Rd b/R/pkg/man/combineByKey.Rd similarity index 100% rename from pkg/man/combineByKey.Rd rename to R/pkg/man/combineByKey.Rd diff --git a/pkg/man/count.Rd b/R/pkg/man/count.Rd similarity index 100% rename from pkg/man/count.Rd rename to R/pkg/man/count.Rd diff --git a/pkg/man/countByKey.Rd b/R/pkg/man/countByKey.Rd similarity index 100% rename from pkg/man/countByKey.Rd rename to R/pkg/man/countByKey.Rd diff --git a/pkg/man/countByValue.Rd b/R/pkg/man/countByValue.Rd similarity index 100% rename from pkg/man/countByValue.Rd rename to R/pkg/man/countByValue.Rd diff --git a/pkg/man/distinct.Rd b/R/pkg/man/distinct.Rd similarity index 100% rename from pkg/man/distinct.Rd rename to R/pkg/man/distinct.Rd diff --git a/pkg/man/filterRDD.Rd b/R/pkg/man/filterRDD.Rd similarity index 100% rename from pkg/man/filterRDD.Rd rename to R/pkg/man/filterRDD.Rd diff --git a/pkg/man/flatMap.Rd b/R/pkg/man/flatMap.Rd similarity index 100% rename from pkg/man/flatMap.Rd rename to R/pkg/man/flatMap.Rd diff --git a/pkg/man/flatMapValues.Rd b/R/pkg/man/flatMapValues.Rd similarity index 100% rename from pkg/man/flatMapValues.Rd rename to R/pkg/man/flatMapValues.Rd diff --git a/pkg/man/fold.Rd b/R/pkg/man/fold.Rd similarity index 100% rename from pkg/man/fold.Rd rename to R/pkg/man/fold.Rd diff --git a/pkg/man/foldByKey.Rd b/R/pkg/man/foldByKey.Rd similarity index 100% rename from pkg/man/foldByKey.Rd rename to R/pkg/man/foldByKey.Rd diff --git a/pkg/man/foreach.Rd b/R/pkg/man/foreach.Rd similarity index 100% rename from pkg/man/foreach.Rd rename to R/pkg/man/foreach.Rd diff --git a/pkg/man/groupByKey.Rd b/R/pkg/man/groupByKey.Rd similarity index 100% rename from pkg/man/groupByKey.Rd rename to R/pkg/man/groupByKey.Rd diff --git a/pkg/man/hashCode.Rd b/R/pkg/man/hashCode.Rd similarity index 100% rename from pkg/man/hashCode.Rd rename to R/pkg/man/hashCode.Rd diff --git a/pkg/man/includePackage.Rd b/R/pkg/man/includePackage.Rd similarity index 100% rename from pkg/man/includePackage.Rd rename to R/pkg/man/includePackage.Rd diff --git a/pkg/man/join-methods.Rd b/R/pkg/man/join-methods.Rd similarity index 100% rename from pkg/man/join-methods.Rd rename to R/pkg/man/join-methods.Rd diff --git a/pkg/man/jsonFile.Rd b/R/pkg/man/jsonFile.Rd similarity index 100% rename from pkg/man/jsonFile.Rd rename to R/pkg/man/jsonFile.Rd diff --git a/pkg/man/keyBy.Rd b/R/pkg/man/keyBy.Rd similarity index 100% rename from pkg/man/keyBy.Rd rename to R/pkg/man/keyBy.Rd diff --git a/pkg/man/keys.Rd b/R/pkg/man/keys.Rd similarity index 100% rename from pkg/man/keys.Rd rename to R/pkg/man/keys.Rd diff --git a/pkg/man/lapply.Rd b/R/pkg/man/lapply.Rd similarity index 100% rename from pkg/man/lapply.Rd rename to R/pkg/man/lapply.Rd diff --git a/pkg/man/lapplyPartition.Rd b/R/pkg/man/lapplyPartition.Rd similarity index 100% rename from pkg/man/lapplyPartition.Rd rename to R/pkg/man/lapplyPartition.Rd diff --git a/pkg/man/lapplyPartitionsWithIndex.Rd b/R/pkg/man/lapplyPartitionsWithIndex.Rd similarity index 100% rename from pkg/man/lapplyPartitionsWithIndex.Rd rename to R/pkg/man/lapplyPartitionsWithIndex.Rd diff --git a/pkg/man/lookup.Rd b/R/pkg/man/lookup.Rd similarity index 100% rename from pkg/man/lookup.Rd rename to R/pkg/man/lookup.Rd diff --git a/pkg/man/mapValues.Rd b/R/pkg/man/mapValues.Rd similarity index 100% rename from pkg/man/mapValues.Rd rename to R/pkg/man/mapValues.Rd diff --git a/pkg/man/maximum.Rd b/R/pkg/man/maximum.Rd similarity index 100% rename from pkg/man/maximum.Rd rename to R/pkg/man/maximum.Rd diff --git a/pkg/man/minimum.Rd b/R/pkg/man/minimum.Rd similarity index 100% rename from pkg/man/minimum.Rd rename to R/pkg/man/minimum.Rd diff --git a/pkg/man/name.Rd b/R/pkg/man/name.Rd similarity index 100% rename from pkg/man/name.Rd rename to R/pkg/man/name.Rd diff --git a/pkg/man/numPartitions.Rd b/R/pkg/man/numPartitions.Rd similarity index 100% rename from pkg/man/numPartitions.Rd rename to R/pkg/man/numPartitions.Rd diff --git a/pkg/man/objectFile.Rd b/R/pkg/man/objectFile.Rd similarity index 100% rename from pkg/man/objectFile.Rd rename to R/pkg/man/objectFile.Rd diff --git a/pkg/man/parallelize.Rd b/R/pkg/man/parallelize.Rd similarity index 100% rename from pkg/man/parallelize.Rd rename to R/pkg/man/parallelize.Rd diff --git a/pkg/man/parquetFile.Rd b/R/pkg/man/parquetFile.Rd similarity index 100% rename from pkg/man/parquetFile.Rd rename to R/pkg/man/parquetFile.Rd diff --git a/pkg/man/partitionBy.Rd b/R/pkg/man/partitionBy.Rd similarity index 100% rename from pkg/man/partitionBy.Rd rename to R/pkg/man/partitionBy.Rd diff --git a/pkg/man/persist.Rd b/R/pkg/man/persist.Rd similarity index 100% rename from pkg/man/persist.Rd rename to R/pkg/man/persist.Rd diff --git a/pkg/man/pipeRDD.Rd b/R/pkg/man/pipeRDD.Rd similarity index 100% rename from pkg/man/pipeRDD.Rd rename to R/pkg/man/pipeRDD.Rd diff --git a/pkg/man/print.jobj.Rd b/R/pkg/man/print.jobj.Rd similarity index 100% rename from pkg/man/print.jobj.Rd rename to R/pkg/man/print.jobj.Rd diff --git a/pkg/man/printSchema.Rd b/R/pkg/man/printSchema.Rd similarity index 100% rename from pkg/man/printSchema.Rd rename to R/pkg/man/printSchema.Rd diff --git a/pkg/man/reduce.Rd b/R/pkg/man/reduce.Rd similarity index 100% rename from pkg/man/reduce.Rd rename to R/pkg/man/reduce.Rd diff --git a/pkg/man/reduceByKey.Rd b/R/pkg/man/reduceByKey.Rd similarity index 100% rename from pkg/man/reduceByKey.Rd rename to R/pkg/man/reduceByKey.Rd diff --git a/pkg/man/reduceByKeyLocally.Rd b/R/pkg/man/reduceByKeyLocally.Rd similarity index 100% rename from pkg/man/reduceByKeyLocally.Rd rename to R/pkg/man/reduceByKeyLocally.Rd diff --git a/pkg/man/registerTempTable.Rd b/R/pkg/man/registerTempTable.Rd similarity index 100% rename from pkg/man/registerTempTable.Rd rename to R/pkg/man/registerTempTable.Rd diff --git a/pkg/man/repartition.Rd b/R/pkg/man/repartition.Rd similarity index 100% rename from pkg/man/repartition.Rd rename to R/pkg/man/repartition.Rd diff --git a/pkg/man/sampleRDD.Rd b/R/pkg/man/sampleRDD.Rd similarity index 100% rename from pkg/man/sampleRDD.Rd rename to R/pkg/man/sampleRDD.Rd diff --git a/pkg/man/saveAsObjectFile.Rd b/R/pkg/man/saveAsObjectFile.Rd similarity index 100% rename from pkg/man/saveAsObjectFile.Rd rename to R/pkg/man/saveAsObjectFile.Rd diff --git a/pkg/man/saveAsTextFile.Rd b/R/pkg/man/saveAsTextFile.Rd similarity index 100% rename from pkg/man/saveAsTextFile.Rd rename to R/pkg/man/saveAsTextFile.Rd diff --git a/pkg/man/setCheckpointDir.Rd b/R/pkg/man/setCheckpointDir.Rd similarity index 100% rename from pkg/man/setCheckpointDir.Rd rename to R/pkg/man/setCheckpointDir.Rd diff --git a/pkg/man/setName.Rd b/R/pkg/man/setName.Rd similarity index 100% rename from pkg/man/setName.Rd rename to R/pkg/man/setName.Rd diff --git a/pkg/man/sortBy.Rd b/R/pkg/man/sortBy.Rd similarity index 100% rename from pkg/man/sortBy.Rd rename to R/pkg/man/sortBy.Rd diff --git a/pkg/man/sortByKey.Rd b/R/pkg/man/sortByKey.Rd similarity index 100% rename from pkg/man/sortByKey.Rd rename to R/pkg/man/sortByKey.Rd diff --git a/pkg/man/sparkR.init.Rd b/R/pkg/man/sparkR.init.Rd similarity index 100% rename from pkg/man/sparkR.init.Rd rename to R/pkg/man/sparkR.init.Rd diff --git a/pkg/man/sparkRSQL.init.Rd b/R/pkg/man/sparkRSQL.init.Rd similarity index 100% rename from pkg/man/sparkRSQL.init.Rd rename to R/pkg/man/sparkRSQL.init.Rd diff --git a/pkg/man/sql.Rd b/R/pkg/man/sql.Rd similarity index 100% rename from pkg/man/sql.Rd rename to R/pkg/man/sql.Rd diff --git a/pkg/man/table.Rd b/R/pkg/man/table.Rd similarity index 100% rename from pkg/man/table.Rd rename to R/pkg/man/table.Rd diff --git a/pkg/man/take.Rd b/R/pkg/man/take.Rd similarity index 100% rename from pkg/man/take.Rd rename to R/pkg/man/take.Rd diff --git a/pkg/man/takeOrdered.Rd b/R/pkg/man/takeOrdered.Rd similarity index 100% rename from pkg/man/takeOrdered.Rd rename to R/pkg/man/takeOrdered.Rd diff --git a/pkg/man/takeSample.Rd b/R/pkg/man/takeSample.Rd similarity index 100% rename from pkg/man/takeSample.Rd rename to R/pkg/man/takeSample.Rd diff --git a/pkg/man/textFile.Rd b/R/pkg/man/textFile.Rd similarity index 100% rename from pkg/man/textFile.Rd rename to R/pkg/man/textFile.Rd diff --git a/pkg/man/top.Rd b/R/pkg/man/top.Rd similarity index 100% rename from pkg/man/top.Rd rename to R/pkg/man/top.Rd diff --git a/pkg/man/uncacheTable.Rd b/R/pkg/man/uncacheTable.Rd similarity index 100% rename from pkg/man/uncacheTable.Rd rename to R/pkg/man/uncacheTable.Rd diff --git a/pkg/man/unionRDD.Rd b/R/pkg/man/unionRDD.Rd similarity index 100% rename from pkg/man/unionRDD.Rd rename to R/pkg/man/unionRDD.Rd diff --git a/pkg/man/unpersist-methods.Rd b/R/pkg/man/unpersist-methods.Rd similarity index 100% rename from pkg/man/unpersist-methods.Rd rename to R/pkg/man/unpersist-methods.Rd diff --git a/pkg/man/values.Rd b/R/pkg/man/values.Rd similarity index 100% rename from pkg/man/values.Rd rename to R/pkg/man/values.Rd diff --git a/pkg/man/zipWithIndex.Rd b/R/pkg/man/zipWithIndex.Rd similarity index 100% rename from pkg/man/zipWithIndex.Rd rename to R/pkg/man/zipWithIndex.Rd diff --git a/pkg/man/zipWithUniqueId.Rd b/R/pkg/man/zipWithUniqueId.Rd similarity index 100% rename from pkg/man/zipWithUniqueId.Rd rename to R/pkg/man/zipWithUniqueId.Rd diff --git a/pkg/src/Makefile b/R/pkg/src/Makefile similarity index 100% rename from pkg/src/Makefile rename to R/pkg/src/Makefile diff --git a/pkg/src/Makefile.win b/R/pkg/src/Makefile.win similarity index 100% rename from pkg/src/Makefile.win rename to R/pkg/src/Makefile.win diff --git a/pkg/src/build.sbt b/R/pkg/src/build.sbt similarity index 100% rename from pkg/src/build.sbt rename to R/pkg/src/build.sbt diff --git a/pkg/src/pom.xml b/R/pkg/src/pom.xml similarity index 100% rename from pkg/src/pom.xml rename to R/pkg/src/pom.xml diff --git a/pkg/src/project/build.properties b/R/pkg/src/project/build.properties similarity index 100% rename from pkg/src/project/build.properties rename to R/pkg/src/project/build.properties diff --git a/pkg/src/project/plugins.sbt b/R/pkg/src/project/plugins.sbt similarity index 100% rename from pkg/src/project/plugins.sbt rename to R/pkg/src/project/plugins.sbt diff --git a/pkg/src/sbt/sbt b/R/pkg/src/sbt/sbt similarity index 100% rename from pkg/src/sbt/sbt rename to R/pkg/src/sbt/sbt diff --git a/pkg/src/src/main/resources/log4j.properties b/R/pkg/src/src/main/resources/log4j.properties similarity index 100% rename from pkg/src/src/main/resources/log4j.properties rename to R/pkg/src/src/main/resources/log4j.properties diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala similarity index 100% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala rename to R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala similarity index 100% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala rename to R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala similarity index 100% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala rename to R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala similarity index 100% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala rename to R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala similarity index 100% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala rename to R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala b/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala similarity index 100% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala rename to R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala similarity index 100% rename from pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala rename to R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala diff --git a/pkg/src/string_hash_code.c b/R/pkg/src/string_hash_code.c similarity index 100% rename from pkg/src/string_hash_code.c rename to R/pkg/src/string_hash_code.c diff --git a/pkg/tests/run-all.R b/R/pkg/tests/run-all.R similarity index 100% rename from pkg/tests/run-all.R rename to R/pkg/tests/run-all.R diff --git a/run-tests.sh b/R/run-tests.sh similarity index 100% rename from run-tests.sh rename to R/run-tests.sh diff --git a/sparkR b/R/sparkR similarity index 100% rename from sparkR rename to R/sparkR From 014d253c97be326e7ba72b78cbd8bb4d5ff4643f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 10:07:34 -0700 Subject: [PATCH 630/687] delete man pages --- R/pkg/man/DataFrame.Rd | 38 -------- R/pkg/man/RDD.Rd | 35 ------- R/pkg/man/aggregateByKey.Rd | 50 ---------- R/pkg/man/aggregateRDD.Rd | 43 --------- R/pkg/man/broadcast-class.Rd | 26 ----- R/pkg/man/broadcast-internal.Rd | 20 ---- R/pkg/man/broadcast.Rd | 45 --------- R/pkg/man/cache-methods.Rd | 25 ----- R/pkg/man/cacheTable.Rd | 29 ------ R/pkg/man/checkpoint-methods.Rd | 30 ------ R/pkg/man/coalesce.Rd | 33 ------- R/pkg/man/cogroup.Rd | 35 ------- R/pkg/man/collect-methods.Rd | 67 ------------- R/pkg/man/collectToDF.Rd | 27 ------ R/pkg/man/combineByKey.Rd | 55 ----------- R/pkg/man/count.Rd | 48 --------- R/pkg/man/countByKey.Rd | 29 ------ R/pkg/man/countByValue.Rd | 30 ------ R/pkg/man/distinct.Rd | 28 ------ R/pkg/man/filterRDD.Rd | 35 ------- R/pkg/man/flatMap.Rd | 32 ------ R/pkg/man/flatMapValues.Rd | 32 ------ R/pkg/man/fold.Rd | 37 ------- R/pkg/man/foldByKey.Rd | 38 -------- R/pkg/man/foreach.Rd | 43 --------- R/pkg/man/groupByKey.Rd | 39 -------- R/pkg/man/hashCode.Rd | 26 ----- R/pkg/man/includePackage.Rd | 36 ------- R/pkg/man/join-methods.Rd | 129 ------------------------- R/pkg/man/jsonFile.Rd | 28 ------ R/pkg/man/keyBy.Rd | 28 ------ R/pkg/man/keys.Rd | 26 ----- R/pkg/man/lapply.Rd | 36 ------- R/pkg/man/lapplyPartition.Rd | 39 -------- R/pkg/man/lapplyPartitionsWithIndex.Rd | 41 -------- R/pkg/man/lookup.Rd | 31 ------ R/pkg/man/mapValues.Rd | 32 ------ R/pkg/man/maximum.Rd | 26 ----- R/pkg/man/minimum.Rd | 26 ----- R/pkg/man/name.Rd | 26 ----- R/pkg/man/numPartitions.Rd | 28 ------ R/pkg/man/objectFile.Rd | 32 ------ R/pkg/man/parallelize.Rd | 31 ------ R/pkg/man/parquetFile.Rd | 19 ---- R/pkg/man/partitionBy.Rd | 42 -------- R/pkg/man/persist.Rd | 33 ------- R/pkg/man/pipeRDD.Rd | 34 ------- R/pkg/man/print.jobj.Rd | 17 ---- R/pkg/man/printSchema.Rd | 23 ----- R/pkg/man/reduce.Rd | 30 ------ R/pkg/man/reduceByKey.Rd | 43 --------- R/pkg/man/reduceByKeyLocally.Rd | 40 -------- R/pkg/man/registerTempTable.Rd | 26 ----- R/pkg/man/repartition.Rd | 41 -------- R/pkg/man/sampleRDD.Rd | 35 ------- R/pkg/man/saveAsObjectFile.Rd | 31 ------ R/pkg/man/saveAsTextFile.Rd | 28 ------ R/pkg/man/setCheckpointDir.Rd | 30 ------ R/pkg/man/setName.Rd | 32 ------ R/pkg/man/sortBy.Rd | 36 ------- R/pkg/man/sortByKey.Rd | 34 ------- R/pkg/man/sparkR.init.Rd | 42 -------- R/pkg/man/sparkRSQL.init.Rd | 21 ---- R/pkg/man/sql.Rd | 29 ------ R/pkg/man/table.Rd | 30 ------ R/pkg/man/take.Rd | 28 ------ R/pkg/man/takeOrdered.Rd | 31 ------ R/pkg/man/takeSample.Rd | 36 ------- R/pkg/man/textFile.Rd | 30 ------ R/pkg/man/top.Rd | 31 ------ R/pkg/man/uncacheTable.Rd | 27 ------ R/pkg/man/unionRDD.Rd | 33 ------- R/pkg/man/unpersist-methods.Rd | 27 ------ R/pkg/man/values.Rd | 26 ----- R/pkg/man/zipWithIndex.Rd | 40 -------- R/pkg/man/zipWithUniqueId.Rd | 36 ------- 76 files changed, 2611 deletions(-) delete mode 100644 R/pkg/man/DataFrame.Rd delete mode 100644 R/pkg/man/RDD.Rd delete mode 100644 R/pkg/man/aggregateByKey.Rd delete mode 100644 R/pkg/man/aggregateRDD.Rd delete mode 100644 R/pkg/man/broadcast-class.Rd delete mode 100644 R/pkg/man/broadcast-internal.Rd delete mode 100644 R/pkg/man/broadcast.Rd delete mode 100644 R/pkg/man/cache-methods.Rd delete mode 100644 R/pkg/man/cacheTable.Rd delete mode 100644 R/pkg/man/checkpoint-methods.Rd delete mode 100644 R/pkg/man/coalesce.Rd delete mode 100644 R/pkg/man/cogroup.Rd delete mode 100644 R/pkg/man/collect-methods.Rd delete mode 100644 R/pkg/man/collectToDF.Rd delete mode 100644 R/pkg/man/combineByKey.Rd delete mode 100644 R/pkg/man/count.Rd delete mode 100644 R/pkg/man/countByKey.Rd delete mode 100644 R/pkg/man/countByValue.Rd delete mode 100644 R/pkg/man/distinct.Rd delete mode 100644 R/pkg/man/filterRDD.Rd delete mode 100644 R/pkg/man/flatMap.Rd delete mode 100644 R/pkg/man/flatMapValues.Rd delete mode 100644 R/pkg/man/fold.Rd delete mode 100644 R/pkg/man/foldByKey.Rd delete mode 100644 R/pkg/man/foreach.Rd delete mode 100644 R/pkg/man/groupByKey.Rd delete mode 100644 R/pkg/man/hashCode.Rd delete mode 100644 R/pkg/man/includePackage.Rd delete mode 100644 R/pkg/man/join-methods.Rd delete mode 100644 R/pkg/man/jsonFile.Rd delete mode 100644 R/pkg/man/keyBy.Rd delete mode 100644 R/pkg/man/keys.Rd delete mode 100644 R/pkg/man/lapply.Rd delete mode 100644 R/pkg/man/lapplyPartition.Rd delete mode 100644 R/pkg/man/lapplyPartitionsWithIndex.Rd delete mode 100644 R/pkg/man/lookup.Rd delete mode 100644 R/pkg/man/mapValues.Rd delete mode 100644 R/pkg/man/maximum.Rd delete mode 100644 R/pkg/man/minimum.Rd delete mode 100644 R/pkg/man/name.Rd delete mode 100644 R/pkg/man/numPartitions.Rd delete mode 100644 R/pkg/man/objectFile.Rd delete mode 100644 R/pkg/man/parallelize.Rd delete mode 100644 R/pkg/man/parquetFile.Rd delete mode 100644 R/pkg/man/partitionBy.Rd delete mode 100644 R/pkg/man/persist.Rd delete mode 100644 R/pkg/man/pipeRDD.Rd delete mode 100644 R/pkg/man/print.jobj.Rd delete mode 100644 R/pkg/man/printSchema.Rd delete mode 100644 R/pkg/man/reduce.Rd delete mode 100644 R/pkg/man/reduceByKey.Rd delete mode 100644 R/pkg/man/reduceByKeyLocally.Rd delete mode 100644 R/pkg/man/registerTempTable.Rd delete mode 100644 R/pkg/man/repartition.Rd delete mode 100644 R/pkg/man/sampleRDD.Rd delete mode 100644 R/pkg/man/saveAsObjectFile.Rd delete mode 100644 R/pkg/man/saveAsTextFile.Rd delete mode 100644 R/pkg/man/setCheckpointDir.Rd delete mode 100644 R/pkg/man/setName.Rd delete mode 100644 R/pkg/man/sortBy.Rd delete mode 100644 R/pkg/man/sortByKey.Rd delete mode 100644 R/pkg/man/sparkR.init.Rd delete mode 100644 R/pkg/man/sparkRSQL.init.Rd delete mode 100644 R/pkg/man/sql.Rd delete mode 100644 R/pkg/man/table.Rd delete mode 100644 R/pkg/man/take.Rd delete mode 100644 R/pkg/man/takeOrdered.Rd delete mode 100644 R/pkg/man/takeSample.Rd delete mode 100644 R/pkg/man/textFile.Rd delete mode 100644 R/pkg/man/top.Rd delete mode 100644 R/pkg/man/uncacheTable.Rd delete mode 100644 R/pkg/man/unionRDD.Rd delete mode 100644 R/pkg/man/unpersist-methods.Rd delete mode 100644 R/pkg/man/values.Rd delete mode 100644 R/pkg/man/zipWithIndex.Rd delete mode 100644 R/pkg/man/zipWithUniqueId.Rd diff --git a/R/pkg/man/DataFrame.Rd b/R/pkg/man/DataFrame.Rd deleted file mode 100644 index 7425e1f8d0864..0000000000000 --- a/R/pkg/man/DataFrame.Rd +++ /dev/null @@ -1,38 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{class} -\name{DataFrame-class} -\alias{DataFrame-class} -\alias{dataFrame} -\alias{toRDD} -\title{S4 class that represents a DataFrame} -\usage{ -dataFrame(sdf) - -toRDD(df) -} -\arguments{ -\item{sdf}{A Java object reference to the backing Scala SchemaRDD} - -\item{df}{A Spark DataFrame} - -\item{env}{An R environment that stores bookkeeping states of the DataFrame} -} -\description{ -DataFrames can be created using functions like - \code{jsonFile}, \code{table} etc. - -Converts a Spark DataFrame to an RDD while preserving column names. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -rdd <- toRDD(df) -} -} -\seealso{ -jsonFile, table -} - diff --git a/R/pkg/man/RDD.Rd b/R/pkg/man/RDD.Rd deleted file mode 100644 index 85dbb58ea9e84..0000000000000 --- a/R/pkg/man/RDD.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{class} -\name{RDD-class} -\alias{RDD} -\alias{RDD-class} -\title{S4 class that represents an RDD} -\usage{ -RDD(jrdd, serialized = "byte", isCached = FALSE, isCheckpointed = FALSE, - colNames = list()) -} -\arguments{ -\item{jrdd}{Java object reference to the backing JavaRDD} - -\item{serialized}{"byte" if the RDD stores data serialized in R, "string" if the RDD stores strings, -and "rows" if the RDD stores the rows of a DataFrame} - -\item{isCached}{TRUE if the RDD is cached} - -\item{isCheckpointed}{TRUE if the RDD has been checkpointed} -} -\description{ -RDD can be created using functions like - \code{parallelize}, \code{textFile} etc. -} -\section{Slots}{ - -\describe{ -\item{\code{env}}{An R environment that stores bookkeeping states of the RDD} - -\item{\code{jrdd}}{Java object reference to the backing JavaRDD} -}} -\seealso{ -parallelize, textFile -} - diff --git a/R/pkg/man/aggregateByKey.Rd b/R/pkg/man/aggregateByKey.Rd deleted file mode 100644 index 7bcbd5cc69d12..0000000000000 --- a/R/pkg/man/aggregateByKey.Rd +++ /dev/null @@ -1,50 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{aggregateByKey} -\alias{aggregateByKey} -\alias{aggregateByKey,RDD,ANY,ANY,ANY,integer-method} -\title{Aggregate a pair RDD by each key.} -\usage{ -aggregateByKey(rdd, zeroValue, seqOp, combOp, numPartitions) - -\S4method{aggregateByKey}{RDD,ANY,ANY,ANY,integer}(rdd, zeroValue, seqOp, - combOp, numPartitions) -} -\arguments{ -\item{rdd}{An RDD.} - -\item{zeroValue}{A neutral "zero value".} - -\item{seqOp}{A function to aggregate the values of each key. It may return -a different result type from the type of the values.} - -\item{combOp}{A function to aggregate results of seqOp.} -} -\value{ -An RDD containing the aggregation result. -} -\description{ -Aggregate the values of each key in an RDD, using given combine functions -and a neutral "zero value". This function can return a different result type, -U, than the type of the values in this RDD, V. Thus, we need one operation -for merging a V into a U and one operation for merging two U's, The former -operation is used for merging values within a partition, and the latter is -used for merging values between partitions. To avoid memory allocation, both -of these functions are allowed to modify and return their first argument -instead of creating a new U. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) -zeroValue <- list(0, 0) -seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } -combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } -aggregateByKey(rdd, zeroValue, seqOp, combOp, 2L) - # list(list(1, list(3, 2)), list(2, list(7, 2))) -} -} -\seealso{ -foldByKey, combineByKey -} - diff --git a/R/pkg/man/aggregateRDD.Rd b/R/pkg/man/aggregateRDD.Rd deleted file mode 100644 index 16a0fbe4cb3b3..0000000000000 --- a/R/pkg/man/aggregateRDD.Rd +++ /dev/null @@ -1,43 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{aggregateRDD} -\alias{aggregateRDD} -\alias{aggregateRDD,RDD,RDD-method} -\alias{aggregateRDD,RDD-method} -\title{Aggregate an RDD using the given combine functions and a neutral "zero value".} -\usage{ -aggregateRDD(rdd, zeroValue, seqOp, combOp) - -\S4method{aggregateRDD}{RDD}(rdd, zeroValue, seqOp, combOp) -} -\arguments{ -\item{rdd}{An RDD.} - -\item{zeroValue}{A neutral "zero value".} - -\item{seqOp}{A function to aggregate the RDD elements. It may return a different -result type from the type of the RDD elements.} - -\item{combOp}{A function to aggregate results of seqOp.} -} -\value{ -The aggregation result. -} -\description{ -Aggregate the elements of each partition, and then the results for all the -partitions, using given combine functions and a neutral "zero value". -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(1, 2, 3, 4)) -zeroValue <- list(0, 0) -seqOp <- function(x, y) { list(x[[1]] + y, x[[2]] + 1) } -combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } -aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) -} -} -\seealso{ -reduce -} - diff --git a/R/pkg/man/broadcast-class.Rd b/R/pkg/man/broadcast-class.Rd deleted file mode 100644 index 68514789d8e17..0000000000000 --- a/R/pkg/man/broadcast-class.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{class} -\name{Broadcast-class} -\alias{Broadcast} -\alias{Broadcast-class} -\title{S4 class that represents a Broadcast variable} -\usage{ -Broadcast(id, value, jBroadcastRef, objName) -} -\arguments{ -\item{id}{Id of the backing Spark broadcast variable} - -\item{value}{Value of the broadcast variable} - -\item{jBroadcastRef}{reference to the backing Java broadcast object} - -\item{objName}{name of broadcasted object} -} -\description{ -Broadcast variables can be created using the broadcast - function from a \code{SparkContext}. -} -\seealso{ -broadcast -} - diff --git a/R/pkg/man/broadcast-internal.Rd b/R/pkg/man/broadcast-internal.Rd deleted file mode 100644 index 14f81e9561968..0000000000000 --- a/R/pkg/man/broadcast-internal.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{setBroadcastValue} -\alias{setBroadcastValue} -\title{Internal function to set values of a broadcast variable.} -\usage{ -setBroadcastValue(bcastId, value) -} -\arguments{ -\item{bcastId}{The id of broadcast variable to set} - -\item{value}{The value to be set} -} -\description{ -This function is used internally by Spark to set the value of a broadcast -variable on workers. Not intended for use outside the package. -} -\seealso{ -broadcast, value -} - diff --git a/R/pkg/man/broadcast.Rd b/R/pkg/man/broadcast.Rd deleted file mode 100644 index 766592f1a1d99..0000000000000 --- a/R/pkg/man/broadcast.Rd +++ /dev/null @@ -1,45 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{value} -\alias{broadcast} -\alias{value} -\alias{value,Broadcast-method} -\title{Broadcast a variable to all workers} -\usage{ -value(bcast) - -\S4method{value}{Broadcast}(bcast) - -broadcast(sc, object) -} -\arguments{ -\item{bcast}{The broadcast variable to get} - -\item{sc}{Spark Context to use} - -\item{object}{Object to be broadcast} -} -\description{ -\code{value} can be used to get the value of a broadcast variable inside -a distributed function. - -Broadcast a read-only variable to the cluster, returning a \code{Broadcast} -object for reading it in distributed functions. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:2, 2L) - -# Large Matrix object that we want to broadcast -randomMat <- matrix(nrow=100, ncol=10, data=rnorm(1000)) -randomMatBr <- broadcast(sc, randomMat) - -# Use the broadcast variable inside the function -useBroadcast <- function(x) { - sum(value(randomMatBr) * x) -} -sumRDD <- lapply(rdd, useBroadcast) -} -} - diff --git a/R/pkg/man/cache-methods.Rd b/R/pkg/man/cache-methods.Rd deleted file mode 100644 index 07acbb764791b..0000000000000 --- a/R/pkg/man/cache-methods.Rd +++ /dev/null @@ -1,25 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{cache} -\alias{cache} -\alias{cache,RDD-method} -\title{Persist an RDD} -\usage{ -cache(rdd) - -\S4method{cache}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD to cache} -} -\description{ -Persist this RDD with the default storage level (MEMORY_ONLY). -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10, 2L) -cache(rdd) -} -} - diff --git a/R/pkg/man/cacheTable.Rd b/R/pkg/man/cacheTable.Rd deleted file mode 100644 index 6021384b3af9a..0000000000000 --- a/R/pkg/man/cacheTable.Rd +++ /dev/null @@ -1,29 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{cacheTable} -\alias{cacheTable} -\title{Cache Table} -\usage{ -cacheTable(sqlCtx, tableName) -} -\arguments{ -\item{sqlCtx}{SQLContext to use} - -\item{tableName}{The name of the table being cached} -} -\value{ -DataFrame -} -\description{ -Caches the specified table in-memory. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -registerTempTable(df, "table") -cacheTable(sqlCtx, "table") -} -} - diff --git a/R/pkg/man/checkpoint-methods.Rd b/R/pkg/man/checkpoint-methods.Rd deleted file mode 100644 index a39a0349ccf70..0000000000000 --- a/R/pkg/man/checkpoint-methods.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{checkpoint} -\alias{checkpoint} -\alias{checkpoint,RDD-method} -\title{Checkpoint an RDD} -\usage{ -checkpoint(rdd) - -\S4method{checkpoint}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD to checkpoint} -} -\description{ -Mark this RDD for checkpointing. It will be saved to a file inside the -checkpoint directory set with setCheckpointDir() and all references to its -parent RDDs will be removed. This function must be called before any job has -been executed on this RDD. It is strongly recommended that this RDD is -persisted in memory, otherwise saving it on a file will require recomputation. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -setCheckpointDir(sc, "checkpoints") -rdd <- parallelize(sc, 1:10, 2L) -checkpoint(rdd) -} -} - diff --git a/R/pkg/man/coalesce.Rd b/R/pkg/man/coalesce.Rd deleted file mode 100644 index b3b9badb73060..0000000000000 --- a/R/pkg/man/coalesce.Rd +++ /dev/null @@ -1,33 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{coalesce} -\alias{coalesce} -\alias{coalesce,RDD} -\alias{coalesce,RDD,integer-method} -\title{Return a new RDD that is reduced into numPartitions partitions.} -\usage{ -coalesce(x, numPartitions, ...) - -\S4method{coalesce}{RDD,integer}(x, numPartitions, shuffle = FALSE) -} -\arguments{ -\item{x}{The RDD.} - -\item{numPartitions}{Number of partitions to create.} -} -\description{ -Return a new RDD that is reduced into numPartitions partitions. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(1, 2, 3, 4, 5), 3L) -numPartitions(rdd) # 3 -numPartitions(coalesce(rdd, 1L)) # 1 -} -} -\seealso{ -repartition -} - diff --git a/R/pkg/man/cogroup.Rd b/R/pkg/man/cogroup.Rd deleted file mode 100644 index 07a711eb60f2f..0000000000000 --- a/R/pkg/man/cogroup.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{cogroup} -\alias{cogroup} -\alias{cogroup,RDD-method} -\title{For each key k in several RDDs, return a resulting RDD that -whose values are a list of values for the key in all RDDs.} -\usage{ -cogroup(..., numPartitions) - -\S4method{cogroup}{RDD}(..., numPartitions) -} -\arguments{ -\item{...}{Several RDDs.} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -a new RDD containing all pairs of elements with values in a list -in all RDDs. -} -\description{ -For each key k in several RDDs, return a resulting RDD that -whose values are a list of values for the key in all RDDs. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -cogroup(rdd1, rdd2, numPartitions = 2L) -# list(list(1, list(1, list(2, 3))), list(2, list(list(4), list())) -} -} - diff --git a/R/pkg/man/collect-methods.Rd b/R/pkg/man/collect-methods.Rd deleted file mode 100644 index f64e4a3217904..0000000000000 --- a/R/pkg/man/collect-methods.Rd +++ /dev/null @@ -1,67 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{collect,DataFrame-method} -\alias{collect} -\alias{collect,DataFrame-method} -\alias{collect,RDD-method} -\alias{collectAsMap} -\alias{collectAsMap,RDD-method} -\alias{collectPartition} -\alias{collectPartition,RDD,integer-method} -\alias{collectPartition,integer,RDD-method} -\title{Collect elements of a DataFrame} -\usage{ -\S4method{collect}{DataFrame}(rdd) - -collect(rdd, ...) - -\S4method{collect}{RDD}(rdd, flatten = TRUE) - -collectPartition(rdd, partitionId) - -\S4method{collectPartition}{RDD,integer}(rdd, partitionId) - -collectAsMap(rdd) - -\S4method{collectAsMap}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD to collect} - -\item{...}{Other optional arguments to collect} - -\item{flatten}{FALSE if the list should not flattened} - -\item{partitionId}{the partition to collect (starts from 0)} - -\item{df}{A SparkSQL DataFrame} -} -\value{ -a list containing elements in the RDD -} -\description{ -Returns a list of Row objects from a DataFrame - -\code{collect} returns a list that contains all of the elements in this RDD. - -\code{collectPartition} returns a list that contains all of the elements -in the specified partition of the RDD. - -\code{collectAsMap} returns a named list as a map that contains all of the elements -in a key-value pair RDD. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10, 2L) -collect(rdd) # list from 1 to 10 -collectPartition(rdd, 0L) # list from 1 to 5 -} -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(list(1, 2), list(3, 4)), 2L) -collectAsMap(rdd) # list(`1` = 2, `3` = 4) -} -} - diff --git a/R/pkg/man/collectToDF.Rd b/R/pkg/man/collectToDF.Rd deleted file mode 100644 index 229b5e93e82c0..0000000000000 --- a/R/pkg/man/collectToDF.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{collectToDF} -\alias{collectToDF} -\title{Collect to DataFrame} -\usage{ -collectToDF(df) -} -\arguments{ -\item{df}{A Spark DataFrame} -} -\value{ -An R data.frame -} -\description{ -Collects all the elements of a Spark DataFrame and coerces them into an R data.frame. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -converted <- collectToDF(df) -is.data.frame(converted) -} -} - diff --git a/R/pkg/man/combineByKey.Rd b/R/pkg/man/combineByKey.Rd deleted file mode 100644 index a634059241091..0000000000000 --- a/R/pkg/man/combineByKey.Rd +++ /dev/null @@ -1,55 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{combineByKey} -\alias{combineByKey} -\alias{combineByKey,RDD,ANY,ANY,ANY,integer-method} -\title{Combine values by key} -\usage{ -combineByKey(rdd, createCombiner, mergeValue, mergeCombiners, numPartitions) - -\S4method{combineByKey}{RDD,ANY,ANY,ANY,integer}(rdd, createCombiner, - mergeValue, mergeCombiners, numPartitions) -} -\arguments{ -\item{rdd}{The RDD to combine. Should be an RDD where each element is -list(K, V) or c(K, V).} - -\item{createCombiner}{Create a combiner (C) given a value (V)} - -\item{mergeValue}{Merge the given value (V) with an existing combiner (C)} - -\item{mergeCombiners}{Merge two combiners and return a new combiner} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -An RDD where each element is list(K, C) where C is the combined type -} -\description{ -Generic function to combine the elements for each key using a custom set of -aggregation functions. Turns an RDD[(K, V)] into a result of type RDD[(K, C)], -for a "combined type" C. Note that V and C can be different -- for example, one -might group an RDD of type (Int, Int) into an RDD of type (Int, Seq[Int]). -Users provide three functions: -\itemize{ - \item createCombiner, which turns a V into a C (e.g., creates a one-element list) - \item mergeValue, to merge a V into a C (e.g., adds it to the end of a list) - - \item mergeCombiners, to combine two C's into a single one (e.g., concatentates - two lists). -} -} -\examples{ -\dontrun{ -sc <- sparkR.init() -pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -rdd <- parallelize(sc, pairs) -parts <- combineByKey(rdd, function(x) { x }, "+", "+", 2L) -combined <- collect(parts) -combined[[1]] # Should be a list(1, 6) -} -} -\seealso{ -groupByKey, reduceByKey -} - diff --git a/R/pkg/man/count.Rd b/R/pkg/man/count.Rd deleted file mode 100644 index 6ac0a649dde98..0000000000000 --- a/R/pkg/man/count.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{count,DataFrame-method} -\alias{count} -\alias{count,DataFrame-method} -\alias{count,RDD-method} -\alias{length,RDD-method} -\title{Count} -\usage{ -\S4method{count}{DataFrame}(x) - -count(x) - -\S4method{count}{RDD}(x) - -\S4method{length}{RDD}(x) -} -\arguments{ -\item{x}{The RDD to count} - -\item{df}{A SparkSQL DataFrame} -} -\value{ -number of elements in the RDD. -} -\description{ -Returns the number of rows in a DataFrame - -Return the number of elements in the RDD. - -Return the number of elements in the RDD -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -count(df) -} -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -count(rdd) # 10 -length(rdd) # Same as count -} -} - diff --git a/R/pkg/man/countByKey.Rd b/R/pkg/man/countByKey.Rd deleted file mode 100644 index 875ab899f6ee6..0000000000000 --- a/R/pkg/man/countByKey.Rd +++ /dev/null @@ -1,29 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{countByKey} -\alias{countByKey} -\alias{countByKey,RDD-method} -\title{Count the number of elements for each key, and return the result to the -master as lists of (key, count) pairs.} -\usage{ -countByKey(rdd) - -\S4method{countByKey}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD to count keys.} -} -\value{ -list of (key, count) pairs, where count is number of each key in rdd. -} -\description{ -Same as countByKey in Spark. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(c("a", 1), c("b", 1), c("a", 1))) -countByKey(rdd) # ("a", 2L), ("b", 1L) -} -} - diff --git a/R/pkg/man/countByValue.Rd b/R/pkg/man/countByValue.Rd deleted file mode 100644 index 52439be85980b..0000000000000 --- a/R/pkg/man/countByValue.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{countByValue} -\alias{countByValue} -\alias{countByValue,RDD-method} -\title{Return the count of each unique value in this RDD as a list of -(value, count) pairs.} -\usage{ -countByValue(rdd) - -\S4method{countByValue}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD to count} -} -\value{ -list of (value, count) pairs, where count is number of each unique -value in rdd. -} -\description{ -Same as countByValue in Spark. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, c(1,2,3,2,1)) -countByValue(rdd) # (1,2L), (2,2L), (3,1L) -} -} - diff --git a/R/pkg/man/distinct.Rd b/R/pkg/man/distinct.Rd deleted file mode 100644 index 1071c7353a3be..0000000000000 --- a/R/pkg/man/distinct.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{distinct} -\alias{distinct} -\alias{distinct,RDD,missingOrInteger-method} -\title{Removes the duplicates from RDD.} -\usage{ -distinct(rdd, numPartitions) - -\S4method{distinct}{RDD,missingOrInteger}(rdd, numPartitions) -} -\arguments{ -\item{rdd}{The RDD to remove duplicates from.} - -\item{numPartitions}{Number of partitions to create.} -} -\description{ -This function returns a new RDD containing the distinct elements in the -given RDD. The same as `distinct()' in Spark. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, c(1,2,2,3,3,3)) -sort(unlist(collect(distinct(rdd)))) # c(1, 2, 3) -} -} - diff --git a/R/pkg/man/filterRDD.Rd b/R/pkg/man/filterRDD.Rd deleted file mode 100644 index b0a00ffcd5a37..0000000000000 --- a/R/pkg/man/filterRDD.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{filterRDD} -\alias{Filter} -\alias{Filter,function,RDD-method} -\alias{filterRDD} -\alias{filterRDD,RDD,function-method} -\title{This function returns a new RDD containing only the elements that satisfy -a predicate (i.e. returning TRUE in a given logical function). -The same as `filter()' in Spark.} -\usage{ -filterRDD(x, f) - -\S4method{filterRDD}{RDD,`function`}(x, f) - -\S4method{Filter}{`function`,RDD}(f, x) -} -\arguments{ -\item{x}{The RDD to be filtered.} - -\item{f}{A unary predicate function.} -} -\description{ -This function returns a new RDD containing only the elements that satisfy -a predicate (i.e. returning TRUE in a given logical function). -The same as `filter()' in Spark. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -unlist(collect(filterRDD(rdd, function (x) { x < 3 }))) # c(1, 2) -} -} - diff --git a/R/pkg/man/flatMap.Rd b/R/pkg/man/flatMap.Rd deleted file mode 100644 index 19b97e01d0789..0000000000000 --- a/R/pkg/man/flatMap.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{flatMap} -\alias{flatMap} -\alias{flatMap,RDD,function-method} -\title{Flatten results after apply a function to all elements} -\usage{ -flatMap(X, FUN) - -\S4method{flatMap}{RDD,`function`}(X, FUN) -} -\arguments{ -\item{X}{The RDD to apply the transformation.} - -\item{FUN}{the transformation to apply on each element} -} -\value{ -a new RDD created by the transformation. -} -\description{ -This function return a new RDD by first applying a function to all -elements of this RDD, and then flattening the results. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -multiplyByTwo <- flatMap(rdd, function(x) { list(x*2, x*10) }) -collect(multiplyByTwo) # 2,20,4,40,6,60... -} -} - diff --git a/R/pkg/man/flatMapValues.Rd b/R/pkg/man/flatMapValues.Rd deleted file mode 100644 index 03112204a9231..0000000000000 --- a/R/pkg/man/flatMapValues.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{flatMapValues} -\alias{flatMapValues} -\alias{flatMapValues,RDD,function-method} -\title{Pass each value in the key-value pair RDD through a flatMap function without -changing the keys; this also retains the original RDD's partitioning.} -\usage{ -flatMapValues(X, FUN) - -\S4method{flatMapValues}{RDD,`function`}(X, FUN) -} -\arguments{ -\item{X}{The RDD to apply the transformation.} - -\item{FUN}{the transformation to apply on the value of each element.} -} -\value{ -a new RDD created by the transformation. -} -\description{ -The same as 'flatMapValues()' in Spark. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(list(1, c(1,2)), list(2, c(3,4)))) -collect(flatMapValues(rdd, function(x) { x })) -Output: list(list(1,1), list(1,2), list(2,3), list(2,4)) -} -} - diff --git a/R/pkg/man/fold.Rd b/R/pkg/man/fold.Rd deleted file mode 100644 index f2253d3f34fa9..0000000000000 --- a/R/pkg/man/fold.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{fold} -\alias{fold} -\alias{fold,RDD,RDD-method} -\alias{fold,RDD-method} -\title{Fold an RDD using a given associative function and a neutral "zero value".} -\usage{ -fold(rdd, zeroValue, op) - -\S4method{fold}{RDD}(rdd, zeroValue, op) -} -\arguments{ -\item{rdd}{An RDD.} - -\item{zeroValue}{A neutral "zero value".} - -\item{op}{An associative function for the folding operation.} -} -\value{ -The folding result. -} -\description{ -Aggregate the elements of each partition, and then the results for all the -partitions, using a given associative function and a neutral "zero value". -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) -fold(rdd, 0, "+") # 15 -} -} -\seealso{ -reduce -} - diff --git a/R/pkg/man/foldByKey.Rd b/R/pkg/man/foldByKey.Rd deleted file mode 100644 index a2822c51a8ff4..0000000000000 --- a/R/pkg/man/foldByKey.Rd +++ /dev/null @@ -1,38 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{foldByKey} -\alias{foldByKey} -\alias{foldByKey,RDD,ANY,ANY,integer-method} -\title{Fold a pair RDD by each key.} -\usage{ -foldByKey(rdd, zeroValue, func, numPartitions) - -\S4method{foldByKey}{RDD,ANY,ANY,integer}(rdd, zeroValue, func, numPartitions) -} -\arguments{ -\item{rdd}{An RDD.} - -\item{zeroValue}{A neutral "zero value".} - -\item{func}{An associative function for folding values of each key.} -} -\value{ -An RDD containing the aggregation result. -} -\description{ -Aggregate the values of each key in an RDD, using an associative function "func" -and a neutral "zero value" which may be added to the result an arbitrary -number of times, and must not change the result (e.g., 0 for addition, or -1 for multiplication.). -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(list(1, 1), list(1, 2), list(2, 3), list(2, 4))) -foldByKey(rdd, 0, "+", 2L) # list(list(1, 3), list(2, 7)) -} -} -\seealso{ -aggregateByKey, combineByKey -} - diff --git a/R/pkg/man/foreach.Rd b/R/pkg/man/foreach.Rd deleted file mode 100644 index fa875d1279102..0000000000000 --- a/R/pkg/man/foreach.Rd +++ /dev/null @@ -1,43 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{foreach} -\alias{foreach} -\alias{foreach,RDD,function-method} -\alias{foreachPartition} -\alias{foreachPartition,RDD,function-method} -\title{Applies a function to all elements in an RDD, and force evaluation.} -\usage{ -foreach(rdd, func) - -\S4method{foreach}{RDD,`function`}(rdd, func) - -foreachPartition(rdd, func) - -\S4method{foreachPartition}{RDD,`function`}(rdd, func) -} -\arguments{ -\item{rdd}{The RDD to apply the function} - -\item{func}{The function to be applied.} -} -\value{ -invisible NULL. -} -\description{ -Applies a function to all elements in an RDD, and force evaluation. - -Applies a function to each partition in an RDD, and force evaluation. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -foreach(rdd, function(x) { save(x, file=...) }) -} -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -foreachPartition(rdd, function(part) { save(part, file=...); NULL }) -} -} - diff --git a/R/pkg/man/groupByKey.Rd b/R/pkg/man/groupByKey.Rd deleted file mode 100644 index bfb7199735c3b..0000000000000 --- a/R/pkg/man/groupByKey.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{groupByKey} -\alias{groupByKey} -\alias{groupByKey,RDD,integer-method} -\title{Group values by key} -\usage{ -groupByKey(rdd, numPartitions) - -\S4method{groupByKey}{RDD,integer}(rdd, numPartitions) -} -\arguments{ -\item{rdd}{The RDD to group. Should be an RDD where each element is -list(K, V) or c(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -An RDD where each element is list(K, list(V)) -} -\description{ -This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -and group values for each key in the RDD into a single sequence. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -rdd <- parallelize(sc, pairs) -parts <- groupByKey(rdd, 2L) -grouped <- collect(parts) -grouped[[1]] # Should be a list(1, list(2, 4)) -} -} -\seealso{ -reduceByKey -} - diff --git a/R/pkg/man/hashCode.Rd b/R/pkg/man/hashCode.Rd deleted file mode 100644 index 5b18f4aec4d4d..0000000000000 --- a/R/pkg/man/hashCode.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{hashCode} -\alias{hashCode} -\title{Compute the hashCode of an object} -\usage{ -hashCode(key) -} -\arguments{ -\item{key}{the object to be hashed} -} -\value{ -the hash code as an integer -} -\description{ -Java-style function to compute the hashCode for the given object. Returns -an integer value. -} -\details{ -This only works for integer, numeric and character types right now. -} -\examples{ -hashCode(1L) # 1 -hashCode(1.0) # 1072693248 -hashCode("1") # 49 -} - diff --git a/R/pkg/man/includePackage.Rd b/R/pkg/man/includePackage.Rd deleted file mode 100644 index 0bbf938763356..0000000000000 --- a/R/pkg/man/includePackage.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{includePackage} -\alias{includePackage} -\title{Include this specified package on all workers} -\usage{ -includePackage(sc, pkg) -} -\arguments{ -\item{sc}{SparkContext to use} - -\item{pkg}{Package name} -} -\description{ -This function can be used to include a package on all workers before the -user's code is executed. This is useful in scenarios where other R package -functions are used in a function passed to functions like \code{lapply}. -NOTE: The package is assumed to be installed on every node in the Spark -cluster. -} -\examples{ -\dontrun{ - library(Matrix) - - sc <- sparkR.init() - # Include the matrix library we will be using - includePackage(sc, Matrix) - - generateSparse <- function(x) { - sparseMatrix(i=c(1, 2, 3), j=c(1, 2, 3), x=c(1, 2, 3)) - } - - rdd <- lapplyPartition(parallelize(sc, 1:2, 2L), generateSparse) - collect(rdd) -} -} - diff --git a/R/pkg/man/join-methods.Rd b/R/pkg/man/join-methods.Rd deleted file mode 100644 index 11229a4e61ef9..0000000000000 --- a/R/pkg/man/join-methods.Rd +++ /dev/null @@ -1,129 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/pairRDD.R -\docType{methods} -\name{join} -\alias{fullOuterJoin} -\alias{fullOuterJoin,RDD,RDD,integer-method} -\alias{fullOuterJoin,RDD,RDD-method} -\alias{join} -\alias{join,RDD,RDD,integer-method} -\alias{join,RDD,RDD-method} -\alias{leftOuterJoin} -\alias{leftOuterJoin,RDD,RDD,integer-method} -\alias{leftOuterJoin,RDD,RDD-method} -\alias{rightOuterJoin} -\alias{rightOuterJoin,RDD,RDD,integer-method} -\alias{rightOuterJoin,RDD,RDD-method} -\title{Join two RDDs} -\usage{ -join(rdd1, rdd2, numPartitions) - -\S4method{join}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) - -leftOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{leftOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) - -rightOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{rightOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) - -fullOuterJoin(rdd1, rdd2, numPartitions) - -\S4method{fullOuterJoin}{RDD,RDD,integer}(rdd1, rdd2, numPartitions) -} -\arguments{ -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} - -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} - -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} - -\item{rdd1}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{rdd2}{An RDD to be joined. Should be an RDD where each element is -list(K, V).} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -a new RDD containing all pairs of elements with matching keys in - two input RDDs. - -For each element (k, v) in rdd1, the resulting RDD will either contain - all pairs (k, (v, w)) for (k, w) in rdd2, or the pair (k, (v, NULL)) - if no elements in rdd2 have key k. - -For each element (k, w) in rdd2, the resulting RDD will either contain - all pairs (k, (v, w)) for (k, v) in rdd1, or the pair (k, (NULL, w)) - if no elements in rdd1 have key k. - -For each element (k, v) in rdd1 and (k, w) in rdd2, the resulting RDD - will contain all pairs (k, (v, w)) for both (k, v) in rdd1 and and - (k, w) in rdd2, or the pair (k, (NULL, w))/(k, (v, NULL)) if no elements - in rdd1/rdd2 have key k. -} -\description{ -\code{join} This function joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. - -\code{leftouterjoin} This function left-outer-joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. - -\code{rightouterjoin} This function right-outer-joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. - -\code{fullouterjoin} This function full-outer-joins two RDDs where every element is of the form list(K, V). -The key types of the two RDDs should be the same. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -join(rdd1, rdd2, 2L) # list(list(1, list(1, 2)), list(1, list(1, 3)) -} -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rdd2 <- parallelize(sc, list(list(1, 2), list(1, 3))) -leftOuterJoin(rdd1, rdd2, 2L) -# list(list(1, list(1, 2)), list(1, list(1, 3)), list(2, list(4, NULL))) -} -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3))) -rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -rightOuterJoin(rdd1, rdd2, 2L) -# list(list(1, list(2, 1)), list(1, list(3, 1)), list(2, list(NULL, 4))) -} -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, list(list(1, 2), list(1, 3), list(3, 3))) -rdd2 <- parallelize(sc, list(list(1, 1), list(2, 4))) -fullOuterJoin(rdd1, rdd2, 2L) # list(list(1, list(2, 1)), - # list(1, list(3, 1)), - # list(2, list(NULL, 4))) - # list(3, list(3, NULL)), -} -} - diff --git a/R/pkg/man/jsonFile.Rd b/R/pkg/man/jsonFile.Rd deleted file mode 100644 index e46298d8c6a47..0000000000000 --- a/R/pkg/man/jsonFile.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{jsonFile} -\alias{jsonFile} -\title{Create a DataFrame from a JSON file.} -\usage{ -jsonFile(sqlCtx, path) -} -\arguments{ -\item{sqlCtx}{SQLContext to use} - -\item{path}{Path of file to read. A vector of multiple paths is allowed.} -} -\value{ -DataFrame -} -\description{ -Loads a JSON file (one object per line), returning the result as a DataFrame -It goes through the entire dataset once to determine the schema. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -} -} - diff --git a/R/pkg/man/keyBy.Rd b/R/pkg/man/keyBy.Rd deleted file mode 100644 index d4fb45d4965df..0000000000000 --- a/R/pkg/man/keyBy.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{keyBy} -\alias{keyBy} -\alias{keyBy,RDD} -\alias{keyBy,RDD,function-method} -\title{Creates tuples of the elements in this RDD by applying a function.} -\usage{ -keyBy(rdd, func) - -\S4method{keyBy}{RDD,`function`}(rdd, func) -} -\arguments{ -\item{rdd}{The RDD.} - -\item{func}{The function to be applied.} -} -\description{ -Creates tuples of the elements in this RDD by applying a function. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(1, 2, 3)) -collect(keyBy(rdd, function(x) { x*x })) # list(list(1, 1), list(4, 2), list(9, 3)) -} -} - diff --git a/R/pkg/man/keys.Rd b/R/pkg/man/keys.Rd deleted file mode 100644 index 33ceaae0aefac..0000000000000 --- a/R/pkg/man/keys.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{keys} -\alias{keys} -\alias{keys,RDD} -\alias{keys,RDD-method} -\title{Return an RDD with the keys of each tuple.} -\usage{ -keys(rdd) - -\S4method{keys}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD from which the keys of each tuple is returned.} -} -\description{ -Return an RDD with the keys of each tuple. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -collect(keys(rdd)) # list(1, 3) -} -} - diff --git a/R/pkg/man/lapply.Rd b/R/pkg/man/lapply.Rd deleted file mode 100644 index bf4f7505fc4c7..0000000000000 --- a/R/pkg/man/lapply.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{lapply,RDD,function-method} -\alias{lapply} -\alias{lapply,RDD,function-method} -\alias{map} -\alias{map,RDD,function-method} -\title{Apply a function to all elements} -\usage{ -\S4method{lapply}{RDD,`function`}(X, FUN) - -map(X, FUN) - -\S4method{map}{RDD,`function`}(X, FUN) -} -\arguments{ -\item{X}{The RDD to apply the transformation.} - -\item{FUN}{the transformation to apply on each element} -} -\value{ -a new RDD created by the transformation. -} -\description{ -This function creates a new RDD by applying the given transformation to all -elements of the given RDD -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -multiplyByTwo <- lapply(rdd, function(x) { x * 2 }) -collect(multiplyByTwo) # 2,4,6... -} -} - diff --git a/R/pkg/man/lapplyPartition.Rd b/R/pkg/man/lapplyPartition.Rd deleted file mode 100644 index 0d3b6937e96a6..0000000000000 --- a/R/pkg/man/lapplyPartition.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{lapplyPartition} -\alias{lapplyPartition} -\alias{lapplyPartition,RDD,function-method} -\alias{mapPartitions} -\alias{mapPartitions,RDD,function-method} -\title{Apply a function to each partition of an RDD} -\usage{ -lapplyPartition(X, FUN) - -\S4method{lapplyPartition}{RDD,`function`}(X, FUN) - -mapPartitions(X, FUN) - -\S4method{mapPartitions}{RDD,`function`}(X, FUN) -} -\arguments{ -\item{X}{The RDD to apply the transformation.} - -\item{FUN}{the transformation to apply on each partition.} -} -\value{ -a new RDD created by the transformation. -} -\description{ -Return a new RDD by applying a function to each partition of this RDD. - -mapPartitions is the same as lapplyPartition. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -partitionSum <- lapplyPartition(rdd, function(part) { Reduce("+", part) }) -collect(partitionSum) # 15, 40 -} -} - diff --git a/R/pkg/man/lapplyPartitionsWithIndex.Rd b/R/pkg/man/lapplyPartitionsWithIndex.Rd deleted file mode 100644 index 3fbddf930aeba..0000000000000 --- a/R/pkg/man/lapplyPartitionsWithIndex.Rd +++ /dev/null @@ -1,41 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{lapplyPartitionsWithIndex} -\alias{lapplyPartitionsWithIndex} -\alias{lapplyPartitionsWithIndex,RDD,function-method} -\alias{mapPartitionsWithIndex} -\alias{mapPartitionsWithIndex,RDD,function-method} -\title{Return a new RDD by applying a function to each partition of this RDD, while -tracking the index of the original partition.} -\usage{ -lapplyPartitionsWithIndex(X, FUN) - -\S4method{lapplyPartitionsWithIndex}{RDD,`function`}(X, FUN) - -mapPartitionsWithIndex(X, FUN) - -\S4method{mapPartitionsWithIndex}{RDD,`function`}(X, FUN) -} -\arguments{ -\item{X}{The RDD to apply the transformation.} - -\item{FUN}{the transformation to apply on each partition; takes the partition -index and a list of elements in the particular partition.} -} -\value{ -a new RDD created by the transformation. -} -\description{ -Return a new RDD by applying a function to each partition of this RDD, while -tracking the index of the original partition. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10, 5L) -prod <- lapplyPartitionsWithIndex(rdd, function(split, part) { - split * Reduce("+", part) }) -collect(prod, flatten = FALSE) # 0, 7, 22, 45, 76 -} -} - diff --git a/R/pkg/man/lookup.Rd b/R/pkg/man/lookup.Rd deleted file mode 100644 index 00f34b2966c90..0000000000000 --- a/R/pkg/man/lookup.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{lookup} -\alias{lookup} -\alias{lookup,RDD-method} -\title{Look up elements of a key in an RDD} -\usage{ -lookup(rdd, key) - -\S4method{lookup}{RDD}(rdd, key) -} -\arguments{ -\item{rdd}{The RDD to collect} - -\item{key}{The key to look up for} -} -\value{ -a list of values in this RDD for key key -} -\description{ -\code{lookup} returns a list of values in this RDD for key key. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -pairs <- list(c(1, 1), c(2, 2), c(1, 3)) -rdd <- parallelize(sc, pairs) -lookup(rdd, 1) # list(1, 3) -} -} - diff --git a/R/pkg/man/mapValues.Rd b/R/pkg/man/mapValues.Rd deleted file mode 100644 index ea676bd78098f..0000000000000 --- a/R/pkg/man/mapValues.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{mapValues} -\alias{mapValues} -\alias{mapValues,RDD,function-method} -\title{Applies a function to all values of the elements, without modifying the keys.} -\usage{ -mapValues(X, FUN) - -\S4method{mapValues}{RDD,`function`}(X, FUN) -} -\arguments{ -\item{X}{The RDD to apply the transformation.} - -\item{FUN}{the transformation to apply on the value of each element.} -} -\value{ -a new RDD created by the transformation. -} -\description{ -The same as `mapValues()' in Spark. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -makePairs <- lapply(rdd, function(x) { list(x, x) }) -collect(mapValues(makePairs, function(x) { x * 2) }) -Output: list(list(1,2), list(2,4), list(3,6), ...) -} -} - diff --git a/R/pkg/man/maximum.Rd b/R/pkg/man/maximum.Rd deleted file mode 100644 index 8142ead15805f..0000000000000 --- a/R/pkg/man/maximum.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{maximum} -\alias{maximum} -\alias{maximum,RDD} -\alias{maximum,RDD-method} -\title{Get the maximum element of an RDD.} -\usage{ -maximum(rdd) - -\S4method{maximum}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD to get the maximum element from} -} -\description{ -Get the maximum element of an RDD. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -maximum(rdd) # 10 -} -} - diff --git a/R/pkg/man/minimum.Rd b/R/pkg/man/minimum.Rd deleted file mode 100644 index 177325ecd9b4c..0000000000000 --- a/R/pkg/man/minimum.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{minimum} -\alias{minimum} -\alias{minimum,RDD} -\alias{minimum,RDD-method} -\title{Get the minimum element of an RDD.} -\usage{ -minimum(rdd) - -\S4method{minimum}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD to get the minimum element from} -} -\description{ -Get the minimum element of an RDD. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -minimum(rdd) # 1 -} -} - diff --git a/R/pkg/man/name.Rd b/R/pkg/man/name.Rd deleted file mode 100644 index f1334393e6c93..0000000000000 --- a/R/pkg/man/name.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{name} -\alias{name} -\alias{name,RDD} -\alias{name,RDD-method} -\title{Return an RDD's name.} -\usage{ -name(rdd) - -\S4method{name}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD whose name is returned.} -} -\description{ -Return an RDD's name. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(1,2,3)) -name(rdd) # NULL (if not set before) -} -} - diff --git a/R/pkg/man/numPartitions.Rd b/R/pkg/man/numPartitions.Rd deleted file mode 100644 index 6a5ce79228e5e..0000000000000 --- a/R/pkg/man/numPartitions.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{numPartitions} -\alias{numPartitions} -\alias{numPartitions,RDD-method} -\title{Gets the number of partitions of an RDD} -\usage{ -numPartitions(rdd) - -\S4method{numPartitions}{RDD}(rdd) -} -\arguments{ -\item{rdd}{A RDD.} -} -\value{ -the number of partitions of rdd as an integer. -} -\description{ -Gets the number of partitions of an RDD -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10, 2L) -numParititions(rdd) # 2L -} -} - diff --git a/R/pkg/man/objectFile.Rd b/R/pkg/man/objectFile.Rd deleted file mode 100644 index 0a37169e1eb2c..0000000000000 --- a/R/pkg/man/objectFile.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{objectFile} -\alias{objectFile} -\title{Load an RDD saved as a SequenceFile containing serialized objects.} -\usage{ -objectFile(sc, path, minSplits = NULL) -} -\arguments{ -\item{sc}{SparkContext to use} - -\item{path}{Path of file to read. A vector of multiple paths is allowed.} - -\item{minSplits}{Minimum number of splits to be created. If NULL, the default -value is chosen based on available parallelism.} -} -\value{ -RDD containing serialized R objects. -} -\description{ -The file to be loaded should be one that was previously generated by calling -saveAsObjectFile() of the RDD class. -} -\examples{ -\dontrun{ - sc <- sparkR.init() - rdd <- objectFile(sc, "myfile") -} -} -\seealso{ -saveAsObjectFile -} - diff --git a/R/pkg/man/parallelize.Rd b/R/pkg/man/parallelize.Rd deleted file mode 100644 index 70534c1b78a0d..0000000000000 --- a/R/pkg/man/parallelize.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{parallelize} -\alias{parallelize} -\title{Create an RDD from a homogeneous list or vector.} -\usage{ -parallelize(sc, coll, numSlices = 1) -} -\arguments{ -\item{sc}{SparkContext to use} - -\item{coll}{collection to parallelize} - -\item{numSlices}{number of partitions to create in the RDD} -} -\value{ -an RDD created from this collection -} -\description{ -This function creates an RDD from a local homogeneous list in R. The elements -in the list are split into \code{numSlices} slices and distributed to nodes -in the cluster. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10, 2) -# The RDD should contain 10 elements -length(rdd) -} -} - diff --git a/R/pkg/man/parquetFile.Rd b/R/pkg/man/parquetFile.Rd deleted file mode 100644 index 5c1d3cf15b7fb..0000000000000 --- a/R/pkg/man/parquetFile.Rd +++ /dev/null @@ -1,19 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{parquetFile} -\alias{parquetFile} -\title{Create a DataFrame from a Parquet file.} -\usage{ -parquetFile(sqlCtx, path) -} -\arguments{ -\item{sqlCtx}{SQLContext to use} - -\item{path}{Path of file to read. A vector of multiple paths is allowed.} -} -\value{ -DataFrame -} -\description{ -Loads a Parquet file, returning the result as a DataFrame. -} - diff --git a/R/pkg/man/partitionBy.Rd b/R/pkg/man/partitionBy.Rd deleted file mode 100644 index 5e5e1cf601416..0000000000000 --- a/R/pkg/man/partitionBy.Rd +++ /dev/null @@ -1,42 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{partitionBy} -\alias{partitionBy} -\alias{partitionBy,RDD,integer-method} -\title{Partition an RDD by key} -\usage{ -partitionBy(rdd, numPartitions, ...) - -\S4method{partitionBy}{RDD,integer}(rdd, numPartitions, - partitionFunc = hashCode) -} -\arguments{ -\item{rdd}{The RDD to partition. Should be an RDD where each element is -list(K, V) or c(K, V).} - -\item{numPartitions}{Number of partitions to create.} - -\item{...}{Other optional arguments to partitionBy.} - -\item{partitionFunc}{The partition function to use. Uses a default hashCode -function if not provided} -} -\value{ -An RDD partitioned using the specified partitioner. -} -\description{ -This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -For each element of this RDD, the partitioner is used to compute a hash -function and the RDD is partitioned using this hash value. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -rdd <- parallelize(sc, pairs) -parts <- partitionBy(rdd, 2L) -collectPartition(parts, 0L) # First partition should contain list(1, 2) and list(1, 4) -} -} - diff --git a/R/pkg/man/persist.Rd b/R/pkg/man/persist.Rd deleted file mode 100644 index e45421f07c861..0000000000000 --- a/R/pkg/man/persist.Rd +++ /dev/null @@ -1,33 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{persist} -\alias{persist} -\alias{persist,RDD,character-method} -\alias{persist,RDD-method} -\title{Persist an RDD} -\usage{ -persist(rdd, newLevel) - -\S4method{persist}{RDD,character}(rdd, newLevel = c("DISK_ONLY", - "DISK_ONLY_2", "MEMORY_AND_DISK", "MEMORY_AND_DISK_2", "MEMORY_AND_DISK_SER", - "MEMORY_AND_DISK_SER_2", "MEMORY_ONLY", "MEMORY_ONLY_2", "MEMORY_ONLY_SER", - "MEMORY_ONLY_SER_2", "OFF_HEAP")) -} -\arguments{ -\item{rdd}{The RDD to persist} - -\item{newLevel}{The new storage level to be assigned} -} -\description{ -Persist this RDD with the specified storage level. For details of the -supported storage levels, refer to -http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10, 2L) -persist(rdd, "MEMORY_AND_DISK") -} -} - diff --git a/R/pkg/man/pipeRDD.Rd b/R/pkg/man/pipeRDD.Rd deleted file mode 100644 index 0964d3415ecb8..0000000000000 --- a/R/pkg/man/pipeRDD.Rd +++ /dev/null @@ -1,34 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{pipeRDD} -\alias{pipeRDD} -\alias{pipeRDD,RDD,character-method} -\title{Pipes elements to a forked external process.} -\usage{ -pipeRDD(rdd, command, env = list()) - -\S4method{pipeRDD}{RDD,character}(rdd, command, env = list()) -} -\arguments{ -\item{rdd}{The RDD whose elements are piped to the forked external process.} - -\item{command}{The command to fork an external process.} - -\item{env}{A named list to set environment variables of the external process.} -} -\value{ -A new RDD created by piping all elements to a forked external process. -} -\description{ -The same as 'pipe()' in Spark. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -collect(pipeRDD(rdd, "more") -Output: c("1", "2", ..., "10") -} -} - diff --git a/R/pkg/man/print.jobj.Rd b/R/pkg/man/print.jobj.Rd deleted file mode 100644 index 43d78586fc6f1..0000000000000 --- a/R/pkg/man/print.jobj.Rd +++ /dev/null @@ -1,17 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{print.jobj} -\alias{print.jobj} -\title{Print a JVM object reference.} -\usage{ -\method{print}{jobj}(x, ...) -} -\arguments{ -\item{x}{The JVM object reference} - -\item{...}{further arguments passed to or from other methods} -} -\description{ -This function prints the type and id for an object stored -in the SparkR JVM backend. -} - diff --git a/R/pkg/man/printSchema.Rd b/R/pkg/man/printSchema.Rd deleted file mode 100644 index f7d89d1d45eef..0000000000000 --- a/R/pkg/man/printSchema.Rd +++ /dev/null @@ -1,23 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{printSchema} -\alias{printSchema} -\title{Print Schema of a DataFrame} -\usage{ -printSchema(df) -} -\arguments{ -\item{df}{A SparkSQL DataFrame} -} -\description{ -Prints out the schema in tree format -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -printSchema(df) -} -} - diff --git a/R/pkg/man/reduce.Rd b/R/pkg/man/reduce.Rd deleted file mode 100644 index 025d518994716..0000000000000 --- a/R/pkg/man/reduce.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{reduce} -\alias{reduce} -\alias{reduce,RDD,ANY-method} -\alias{reduce,RDD-method} -\title{Reduce across elements of an RDD.} -\usage{ -reduce(rdd, func) - -\S4method{reduce}{RDD}(rdd, func) -} -\arguments{ -\item{rdd}{The RDD to reduce} - -\item{func}{Commutative and associative function to apply on elements -of the RDD.} -} -\description{ -This function reduces the elements of this RDD using the -specified commutative and associative binary operator. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -reduce(rdd, "+") # 55 -} -} - diff --git a/R/pkg/man/reduceByKey.Rd b/R/pkg/man/reduceByKey.Rd deleted file mode 100644 index 0598b8589df36..0000000000000 --- a/R/pkg/man/reduceByKey.Rd +++ /dev/null @@ -1,43 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{reduceByKey} -\alias{reduceByKey} -\alias{reduceByKey,RDD,ANY,integer-method} -\alias{reduceByKey,RDD,integer-method} -\title{Merge values by key} -\usage{ -reduceByKey(rdd, combineFunc, numPartitions) - -\S4method{reduceByKey}{RDD,ANY,integer}(rdd, combineFunc, numPartitions) -} -\arguments{ -\item{rdd}{The RDD to reduce by key. Should be an RDD where each element is -list(K, V) or c(K, V).} - -\item{combineFunc}{The associative reduce function to use.} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -An RDD where each element is list(K, V') where V' is the merged - value -} -\description{ -This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -and merges the values for each key using an associative reduce function. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -rdd <- parallelize(sc, pairs) -parts <- reduceByKey(rdd, "+", 2L) -reduced <- collect(parts) -reduced[[1]] # Should be a list(1, 6) -} -} -\seealso{ -groupByKey -} - diff --git a/R/pkg/man/reduceByKeyLocally.Rd b/R/pkg/man/reduceByKeyLocally.Rd deleted file mode 100644 index f13c296065649..0000000000000 --- a/R/pkg/man/reduceByKeyLocally.Rd +++ /dev/null @@ -1,40 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{reduceByKeyLocally} -\alias{reduceByKeyLocally} -\alias{reduceByKeyLocally,RDD,integer-method} -\alias{reduceByKeyLocally,RDD-method} -\title{Merge values by key locally} -\usage{ -reduceByKeyLocally(rdd, combineFunc) - -\S4method{reduceByKeyLocally}{RDD}(rdd, combineFunc) -} -\arguments{ -\item{rdd}{The RDD to reduce by key. Should be an RDD where each element is -list(K, V) or c(K, V).} - -\item{combineFunc}{The associative reduce function to use.} -} -\value{ -A list of elements of type list(K, V') where V' is the merged value for each key -} -\description{ -This function operates on RDDs where every element is of the form list(K, V) or c(K, V). -and merges the values for each key using an associative reduce function, but return the -results immediately to the driver as an R list. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -pairs <- list(list(1, 2), list(1.1, 3), list(1, 4)) -rdd <- parallelize(sc, pairs) -reduced <- reduceByKeyLocally(rdd, "+") -reduced # list(list(1, 6), list(1.1, 3)) -} -} -\seealso{ -reduceByKey -} - diff --git a/R/pkg/man/registerTempTable.Rd b/R/pkg/man/registerTempTable.Rd deleted file mode 100644 index 11394db3550e3..0000000000000 --- a/R/pkg/man/registerTempTable.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{registerTempTable} -\alias{registerTempTable} -\title{Register Temporary Table} -\usage{ -registerTempTable(df, tableName) -} -\arguments{ -\item{df}{A SparkSQL DataFrame} - -\item{tableName}{A character vector containing the name of the table} -} -\description{ -Registers a DataFrame as a Temporary Table in the SQLContext -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -registerTempTable(df, "json_df") -new_df <- sql(sqlCtx, "SELECT * FROM json_df") -} -} - diff --git a/R/pkg/man/repartition.Rd b/R/pkg/man/repartition.Rd deleted file mode 100644 index 6dff0cd251152..0000000000000 --- a/R/pkg/man/repartition.Rd +++ /dev/null @@ -1,41 +0,0 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/RDD.R -\docType{methods} -\name{repartition} -\alias{repartition} -\alias{repartition,RDD} -\alias{repartition,RDD,integer-method} -\title{Return a new RDD that has exactly numPartitions partitions. -Can increase or decrease the level of parallelism in this RDD. Internally, -this uses a shuffle to redistribute data. -If you are decreasing the number of partitions in this RDD, consider using -coalesce, which can avoid performing a shuffle.} -\usage{ -repartition(x, numPartitions) - -\S4method{repartition}{RDD,integer}(x, numPartitions) -} -\arguments{ -\item{x}{The RDD.} - -\item{numPartitions}{Number of partitions to create.} -} -\description{ -Return a new RDD that has exactly numPartitions partitions. -Can increase or decrease the level of parallelism in this RDD. Internally, -this uses a shuffle to redistribute data. -If you are decreasing the number of partitions in this RDD, consider using -coalesce, which can avoid performing a shuffle. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(1, 2, 3, 4, 5, 6, 7), 4L) -numPartitions(rdd) # 4 -numPartitions(repartition(rdd, 2L)) # 2 -} -} -\seealso{ -coalesce -} - diff --git a/R/pkg/man/sampleRDD.Rd b/R/pkg/man/sampleRDD.Rd deleted file mode 100644 index c6b6fc831840c..0000000000000 --- a/R/pkg/man/sampleRDD.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{sampleRDD} -\alias{sampleRDD} -\alias{sampleRDD,RDD} -\alias{sampleRDD,RDD,logical,numeric,integer-method} -\title{Return an RDD that is a sampled subset of the given RDD.} -\usage{ -sampleRDD(rdd, withReplacement, fraction, seed) - -\S4method{sampleRDD}{RDD,logical,numeric,integer}(rdd, withReplacement, - fraction, seed) -} -\arguments{ -\item{rdd}{The RDD to sample elements from} - -\item{withReplacement}{Sampling with replacement or not} - -\item{fraction}{The (rough) sample target fraction} - -\item{seed}{Randomness seed value} -} -\description{ -The same as `sample()' in Spark. (We rename it due to signature -inconsistencies with the `sample()' function in R's base package.) -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) # ensure each num is in its own split -collect(sampleRDD(rdd, FALSE, 0.5, 1618L)) # ~5 distinct elements -collect(sampleRDD(rdd, TRUE, 0.5, 9L)) # ~5 elements possibly with duplicates -} -} - diff --git a/R/pkg/man/saveAsObjectFile.Rd b/R/pkg/man/saveAsObjectFile.Rd deleted file mode 100644 index de86270cca58b..0000000000000 --- a/R/pkg/man/saveAsObjectFile.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{saveAsObjectFile} -\alias{saveAsObjectFile} -\alias{saveAsObjectFile,RDD} -\alias{saveAsObjectFile,RDD,character-method} -\title{Save this RDD as a SequenceFile of serialized objects.} -\usage{ -saveAsObjectFile(rdd, path) - -\S4method{saveAsObjectFile}{RDD,character}(rdd, path) -} -\arguments{ -\item{rdd}{The RDD to save} - -\item{path}{The directory where the file is saved} -} -\description{ -Save this RDD as a SequenceFile of serialized objects. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:3) -saveAsObjectFile(rdd, "/tmp/sparkR-tmp") -} -} -\seealso{ -objectFile -} - diff --git a/R/pkg/man/saveAsTextFile.Rd b/R/pkg/man/saveAsTextFile.Rd deleted file mode 100644 index b0bc9cf705066..0000000000000 --- a/R/pkg/man/saveAsTextFile.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{saveAsTextFile} -\alias{saveAsTextFile} -\alias{saveAsTextFile,RDD} -\alias{saveAsTextFile,RDD,character-method} -\title{Save this RDD as a text file, using string representations of elements.} -\usage{ -saveAsTextFile(rdd, path) - -\S4method{saveAsTextFile}{RDD,character}(rdd, path) -} -\arguments{ -\item{rdd}{The RDD to save} - -\item{path}{The directory where the splits of the text file are saved} -} -\description{ -Save this RDD as a text file, using string representations of elements. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:3) -saveAsTextFile(rdd, "/tmp/sparkR-tmp") -} -} - diff --git a/R/pkg/man/setCheckpointDir.Rd b/R/pkg/man/setCheckpointDir.Rd deleted file mode 100644 index 783dcadf17e76..0000000000000 --- a/R/pkg/man/setCheckpointDir.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{setCheckpointDir} -\alias{setCheckpointDir} -\title{Set the checkpoint directory - -Set the directory under which RDDs are going to be checkpointed. The -directory must be a HDFS path if running on a cluster.} -\usage{ -setCheckpointDir(sc, dirName) -} -\arguments{ -\item{sc}{Spark Context to use} - -\item{dirName}{Directory path} -} -\description{ -Set the checkpoint directory - -Set the directory under which RDDs are going to be checkpointed. The -directory must be a HDFS path if running on a cluster. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -setCheckpointDir(sc, "~/checkpoints") -rdd <- parallelize(sc, 1:2, 2L) -checkpoint(rdd) -} -} - diff --git a/R/pkg/man/setName.Rd b/R/pkg/man/setName.Rd deleted file mode 100644 index e0bef3a5e435b..0000000000000 --- a/R/pkg/man/setName.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{setName} -\alias{setName} -\alias{setName,RDD} -\alias{setName,RDD,character-method} -\title{Set an RDD's name.} -\usage{ -setName(rdd, name) - -\S4method{setName}{RDD,character}(rdd, name) -} -\arguments{ -\item{rdd}{The RDD whose name is to be set.} - -\item{name}{The RDD name to be set.} -} -\value{ -a new RDD renamed. -} -\description{ -Set an RDD's name. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(1,2,3)) -setName(rdd, "myRDD") -name(rdd) # "myRDD" -} -} - diff --git a/R/pkg/man/sortBy.Rd b/R/pkg/man/sortBy.Rd deleted file mode 100644 index d3a231c745240..0000000000000 --- a/R/pkg/man/sortBy.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{sortBy} -\alias{sortBy} -\alias{sortBy,RDD,RDD-method} -\alias{sortBy,RDD,function,missingOrLogical,missingOrInteger-method} -\title{Sort an RDD by the given key function.} -\usage{ -sortBy(rdd, func, ascending, numPartitions) - -\S4method{sortBy}{RDD,`function`,missingOrLogical,missingOrInteger}(rdd, func, - ascending, numPartitions) -} -\arguments{ -\item{rdd}{An RDD to be sorted.} - -\item{func}{A function used to compute the sort key for each element.} - -\item{ascending}{A flag to indicate whether the sorting is ascending or descending.} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -An RDD where all elements are sorted. -} -\description{ -Sort an RDD by the given key function. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(3, 2, 1)) -collect(sortBy(rdd, function(x) { x })) # list (1, 2, 3) -} -} - diff --git a/R/pkg/man/sortByKey.Rd b/R/pkg/man/sortByKey.Rd deleted file mode 100644 index b39aff6ca8757..0000000000000 --- a/R/pkg/man/sortByKey.Rd +++ /dev/null @@ -1,34 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{sortByKey} -\alias{sortByKey} -\alias{sortByKey,RDD,RDD-method} -\alias{sortByKey,RDD,missingOrLogical,missingOrInteger-method} -\title{Sort a (k, v) pair RDD by k.} -\usage{ -sortByKey(rdd, ascending, numPartitions) - -\S4method{sortByKey}{RDD,missingOrLogical,missingOrInteger}(rdd, ascending, - numPartitions) -} -\arguments{ -\item{rdd}{A (k, v) pair RDD to be sorted.} - -\item{ascending}{A flag to indicate whether the sorting is ascending or descending.} - -\item{numPartitions}{Number of partitions to create.} -} -\value{ -An RDD where all (k, v) pair elements are sorted. -} -\description{ -Sort a (k, v) pair RDD by k. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(list(3, 1), list(2, 2), list(1, 3))) -collect(sortByKey(rdd)) # list (list(1, 3), list(2, 2), list(3, 1)) -} -} - diff --git a/R/pkg/man/sparkR.init.Rd b/R/pkg/man/sparkR.init.Rd deleted file mode 100644 index 4ae01b0aa3172..0000000000000 --- a/R/pkg/man/sparkR.init.Rd +++ /dev/null @@ -1,42 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{sparkR.init} -\alias{sparkR.init} -\title{Initialize a new Spark Context.} -\usage{ -sparkR.init(master = "local", appName = "SparkR", - sparkHome = Sys.getenv("SPARK_HOME"), sparkEnvir = list(), - sparkExecutorEnv = list(), sparkJars = "", sparkRLibDir = "", - sparkRBackendPort = 12345) -} -\arguments{ -\item{master}{The Spark master URL.} - -\item{appName}{Application name to register with cluster manager} - -\item{sparkHome}{Spark Home directory} - -\item{sparkEnvir}{Named list of environment variables to set on worker nodes.} - -\item{sparkExecutorEnv}{Named list of environment variables to be used when launching executors.} - -\item{sparkJars}{Character string vector of jar files to pass to the worker nodes.} - -\item{sparkRLibDir}{The path where R is installed on the worker nodes.} - -\item{sparkRBackendPort}{The port to use for SparkR JVM Backend.} -} -\description{ -This function initializes a new SparkContext. -} -\examples{ -\dontrun{ -sc <- sparkR.init("local[2]", "SparkR", "/home/spark") -sc <- sparkR.init("local[2]", "SparkR", "/home/spark", - list(spark.executor.memory="1g")) -sc <- sparkR.init("yarn-client", "SparkR", "/home/spark", - list(spark.executor.memory="1g"), - list(LD_LIBRARY_PATH="/directory of JVM libraries (libjvm.so) on workers/"), - c("jarfile1.jar","jarfile2.jar")) -} -} - diff --git a/R/pkg/man/sparkRSQL.init.Rd b/R/pkg/man/sparkRSQL.init.Rd deleted file mode 100644 index 9e078fdda8985..0000000000000 --- a/R/pkg/man/sparkRSQL.init.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{sparkRSQL.init} -\alias{sparkRSQL.init} -\title{Initialize a new SQLContext.} -\usage{ -sparkRSQL.init(jsc) -} -\arguments{ -\item{jsc}{The existing JavaSparkContext created with SparkR.init()} -} -\description{ -This function creates a SparkContext from an existing JavaSparkContext and -then uses it to initialize a new SQLContext -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -} -} - diff --git a/R/pkg/man/sql.Rd b/R/pkg/man/sql.Rd deleted file mode 100644 index 68e93ba62eb07..0000000000000 --- a/R/pkg/man/sql.Rd +++ /dev/null @@ -1,29 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{sql} -\alias{sql} -\title{SQL Query} -\usage{ -sql(sqlCtx, sqlQuery) -} -\arguments{ -\item{sqlCtx}{SQLContext to use} - -\item{sqlQuery}{A character vector containing the SQL query} -} -\value{ -DataFrame -} -\description{ -Executes a SQL query using Spark, returning the result as a DataFrame. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -registerTempTable(df, "table") -new_df <- sql(sqlCtx, "SELECT * FROM table") -} -} - diff --git a/R/pkg/man/table.Rd b/R/pkg/man/table.Rd deleted file mode 100644 index 70a908685bc94..0000000000000 --- a/R/pkg/man/table.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{table} -\alias{table} -\title{Create a DataFrame from a SparkSQL Table} -\usage{ -table(sqlCtx, tableName) -} -\arguments{ -\item{sqlCtx}{SQLContext to use} - -\item{tableName}{The SparkSQL Table to convert to a DataFrame.} -} -\value{ -DataFrame -} -\description{ -Returns the specified Table as a DataFrame. The Table must have already been registered -in the SQLContext. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -path <- "path/to/file.json" -df <- jsonFile(sqlCtx, path) -registerTempTable(df, "table") -new_df <- table(sqlCtx, "table") -} -} - diff --git a/R/pkg/man/take.Rd b/R/pkg/man/take.Rd deleted file mode 100644 index 2f1e5c88d4ea6..0000000000000 --- a/R/pkg/man/take.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{take} -\alias{take} -\alias{take,RDD,numeric-method} -\title{Take elements from an RDD.} -\usage{ -take(rdd, num) - -\S4method{take}{RDD,numeric}(rdd, num) -} -\arguments{ -\item{rdd}{The RDD to take elements from} - -\item{num}{Number of elements to take} -} -\description{ -This function takes the first NUM elements in the RDD and -returns them in a list. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10) -take(rdd, 2L) # list(1, 2) -} -} - diff --git a/R/pkg/man/takeOrdered.Rd b/R/pkg/man/takeOrdered.Rd deleted file mode 100644 index 9ae2137abed21..0000000000000 --- a/R/pkg/man/takeOrdered.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{takeOrdered} -\alias{takeOrdered} -\alias{takeOrdered,RDD,RDD-method} -\alias{takeOrdered,RDD,integer-method} -\title{Returns the first N elements from an RDD in ascending order.} -\usage{ -takeOrdered(rdd, num) - -\S4method{takeOrdered}{RDD,integer}(rdd, num) -} -\arguments{ -\item{rdd}{An RDD.} - -\item{num}{Number of elements to return.} -} -\value{ -The first N elements from the RDD in ascending order. -} -\description{ -Returns the first N elements from an RDD in ascending order. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) -takeOrdered(rdd, 6L) # list(1, 2, 3, 4, 5, 6) -} -} - diff --git a/R/pkg/man/takeSample.Rd b/R/pkg/man/takeSample.Rd deleted file mode 100644 index b417cc70f9a85..0000000000000 --- a/R/pkg/man/takeSample.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{takeSample} -\alias{takeSample} -\alias{takeSample,RDD} -\alias{takeSample,RDD,logical,integer,integer-method} -\title{Return a list of the elements that are a sampled subset of the given RDD.} -\usage{ -takeSample(rdd, withReplacement, num, seed) - -\S4method{takeSample}{RDD,logical,integer,integer}(rdd, withReplacement, num, - seed) -} -\arguments{ -\item{rdd}{The RDD to sample elements from} - -\item{withReplacement}{Sampling with replacement or not} - -\item{num}{Number of elements to return} - -\item{seed}{Randomness seed value} -} -\description{ -Return a list of the elements that are a sampled subset of the given RDD. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:100) -# exactly 5 elements sampled, which may not be distinct -takeSample(rdd, TRUE, 5L, 1618L) -# exactly 5 distinct elements sampled -takeSample(rdd, FALSE, 5L, 16181618L) -} -} - diff --git a/R/pkg/man/textFile.Rd b/R/pkg/man/textFile.Rd deleted file mode 100644 index f8b07a0a98e4a..0000000000000 --- a/R/pkg/man/textFile.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{textFile} -\alias{textFile} -\title{Create an RDD from a text file.} -\usage{ -textFile(sc, path, minSplits = NULL) -} -\arguments{ -\item{sc}{SparkContext to use} - -\item{path}{Path of file to read. A vector of multiple paths is allowed.} - -\item{minSplits}{Minimum number of splits to be created. If NULL, the default -value is chosen based on available parallelism.} -} -\value{ -RDD where each item is of type \code{character} -} -\description{ -This function reads a text file from HDFS, a local file system (available on all -nodes), or any Hadoop-supported file system URI, and creates an -RDD of strings from it. -} -\examples{ -\dontrun{ - sc <- sparkR.init() - lines <- textFile(sc, "myfile.txt") -} -} - diff --git a/R/pkg/man/top.Rd b/R/pkg/man/top.Rd deleted file mode 100644 index 627a43fd4ff71..0000000000000 --- a/R/pkg/man/top.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{top} -\alias{top} -\alias{top,RDD,RDD-method} -\alias{top,RDD,integer-method} -\title{Returns the top N elements from an RDD.} -\usage{ -top(rdd, num) - -\S4method{top}{RDD,integer}(rdd, num) -} -\arguments{ -\item{rdd}{An RDD.} - -\item{num}{Number of elements to return.} -} -\value{ -The top N elements from the RDD. -} -\description{ -Returns the top N elements from an RDD. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) -top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) -} -} - diff --git a/R/pkg/man/uncacheTable.Rd b/R/pkg/man/uncacheTable.Rd deleted file mode 100644 index fdd487fae40c1..0000000000000 --- a/R/pkg/man/uncacheTable.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\name{uncacheTable} -\alias{uncacheTable} -\title{Uncache Table} -\usage{ -uncacheTable(sqlCtx, tableName) -} -\arguments{ -\item{sqlCtx}{SQLContext to use} - -\item{tableName}{The name of the table being uncached} -} -\value{ -DataFrame -} -\description{ -Removes the specified table from the in-memory cache. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -sqlCtx <- sparkRSQL.init(sc) -df <- table(sqlCtx, "table") -uncacheTable(sqlCtx, "table") -} -} - diff --git a/R/pkg/man/unionRDD.Rd b/R/pkg/man/unionRDD.Rd deleted file mode 100644 index c10de0cc86228..0000000000000 --- a/R/pkg/man/unionRDD.Rd +++ /dev/null @@ -1,33 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{unionRDD} -\alias{unionRDD} -\alias{unionRDD,RDD,RDD-method} -\title{Return the union RDD of two RDDs. -The same as union() in Spark.} -\usage{ -unionRDD(x, y) - -\S4method{unionRDD}{RDD,RDD}(x, y) -} -\arguments{ -\item{x}{An RDD.} - -\item{y}{An RDD.} -} -\value{ -a new RDD created by performing the simple union (witout removing -duplicates) of two input RDDs. -} -\description{ -Return the union RDD of two RDDs. -The same as union() in Spark. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:3) -unionRDD(rdd, rdd) # 1, 2, 3, 1, 2, 3 -} -} - diff --git a/R/pkg/man/unpersist-methods.Rd b/R/pkg/man/unpersist-methods.Rd deleted file mode 100644 index c2311b2356d8b..0000000000000 --- a/R/pkg/man/unpersist-methods.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{unpersist} -\alias{unpersist} -\alias{unpersist,RDD-method} -\title{Unpersist an RDD} -\usage{ -unpersist(rdd) - -\S4method{unpersist}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD to unpersist} -} -\description{ -Mark the RDD as non-persistent, and remove all blocks for it from memory and -disk. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, 1:10, 2L) -cache(rdd) # rdd@env$isCached == TRUE -unpersist(rdd) # rdd@env$isCached == FALSE -} -} - diff --git a/R/pkg/man/values.Rd b/R/pkg/man/values.Rd deleted file mode 100644 index b784e54799035..0000000000000 --- a/R/pkg/man/values.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{values} -\alias{values} -\alias{values,RDD} -\alias{values,RDD-method} -\title{Return an RDD with the values of each tuple.} -\usage{ -values(rdd) - -\S4method{values}{RDD}(rdd) -} -\arguments{ -\item{rdd}{The RDD from which the values of each tuple is returned.} -} -\description{ -Return an RDD with the values of each tuple. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list(list(1, 2), list(3, 4))) -collect(values(rdd)) # list(2, 4) -} -} - diff --git a/R/pkg/man/zipWithIndex.Rd b/R/pkg/man/zipWithIndex.Rd deleted file mode 100644 index cc4d74987f2d2..0000000000000 --- a/R/pkg/man/zipWithIndex.Rd +++ /dev/null @@ -1,40 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{zipWithIndex} -\alias{zipWithIndex} -\alias{zipWithIndex,RDD} -\alias{zipWithIndex,RDD-method} -\title{Zip an RDD with its element indices.} -\usage{ -zipWithIndex(x) - -\S4method{zipWithIndex}{RDD}(x) -} -\arguments{ -\item{x}{An RDD to be zipped.} -} -\value{ -An RDD with zipped items. -} -\description{ -The ordering is first based on the partition index and then the -ordering of items within each partition. So the first item in -the first partition gets index 0, and the last item in the last -partition receives the largest index. -} -\details{ -This method needs to trigger a Spark job when this RDD contains -more than one partition. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) -collect(zipWithIndex(rdd)) -# list(list("a", 0), list("b", 1), list("c", 2), list("d", 3), list("e", 4)) -} -} -\seealso{ -zipWithUniqueId -} - diff --git a/R/pkg/man/zipWithUniqueId.Rd b/R/pkg/man/zipWithUniqueId.Rd deleted file mode 100644 index a25d91c665e08..0000000000000 --- a/R/pkg/man/zipWithUniqueId.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{zipWithUniqueId} -\alias{zipWithUniqueId} -\alias{zipWithUniqueId,RDD} -\alias{zipWithUniqueId,RDD-method} -\title{Zip an RDD with generated unique Long IDs.} -\usage{ -zipWithUniqueId(x) - -\S4method{zipWithUniqueId}{RDD}(x) -} -\arguments{ -\item{x}{An RDD to be zipped.} -} -\value{ -An RDD with zipped items. -} -\description{ -Items in the kth partition will get ids k, n+k, 2*n+k, ..., where -n is the number of partitions. So there may exist gaps, but this -method won't trigger a spark job, which is different from -zipWithIndex. -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd <- parallelize(sc, list("a", "b", "c", "d", "e"), 3L) -collect(zipWithUniqueId(rdd)) -# list(list("a", 0), list("b", 3), list("c", 1), list("d", 4), list("e", 2)) -} -} -\seealso{ -zipWithIndex -} - From 180fc9cf955614937a260e55c63d0b5fdddd122c Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 10:10:53 -0700 Subject: [PATCH 631/687] move scala --- R/install-dev.bat | 16 ++++++++-------- .../scala/org/apache/spark/api/r}/RRDD.scala | 0 .../scala/org/apache/spark/api/r}/SQLUtils.scala | 0 .../scala/org/apache/spark/api/r}/SerDe.scala | 0 .../org/apache/spark/api/r}/SparkRBackend.scala | 0 .../spark/api/r}/SparkRBackendHandler.scala | 0 .../org/apache/spark/api/r}/SparkRConf.scala | 0 .../org/apache/spark/api/r}/SparkRRunner.scala | 0 8 files changed, 8 insertions(+), 8 deletions(-) rename {R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr => core/src/main/scala/org/apache/spark/api/r}/RRDD.scala (100%) rename {R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr => core/src/main/scala/org/apache/spark/api/r}/SQLUtils.scala (100%) rename {R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr => core/src/main/scala/org/apache/spark/api/r}/SerDe.scala (100%) rename {R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr => core/src/main/scala/org/apache/spark/api/r}/SparkRBackend.scala (100%) rename {R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr => core/src/main/scala/org/apache/spark/api/r}/SparkRBackendHandler.scala (100%) rename {R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr => core/src/main/scala/org/apache/spark/api/r}/SparkRConf.scala (100%) rename {R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr => core/src/main/scala/org/apache/spark/api/r}/SparkRRunner.scala (100%) diff --git a/R/install-dev.bat b/R/install-dev.bat index 7d7e79bd8bb06..1de838946ae60 100644 --- a/R/install-dev.bat +++ b/R/install-dev.bat @@ -1,8 +1,8 @@ -@echo off - -rem Install development version of SparkR -rem - -MKDIR .\lib - -R.exe CMD INSTALL --library=".\lib" pkg\ +@echo off + +rem Install development version of SparkR +rem + +MKDIR .\lib + +R.exe CMD INSTALL --library=".\lib" pkg\ diff --git a/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala similarity index 100% rename from R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala rename to core/src/main/scala/org/apache/spark/api/r/RRDD.scala diff --git a/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala b/core/src/main/scala/org/apache/spark/api/r/SQLUtils.scala similarity index 100% rename from R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SQLUtils.scala rename to core/src/main/scala/org/apache/spark/api/r/SQLUtils.scala diff --git a/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala b/core/src/main/scala/org/apache/spark/api/r/SerDe.scala similarity index 100% rename from R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SerDe.scala rename to core/src/main/scala/org/apache/spark/api/r/SerDe.scala diff --git a/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala similarity index 100% rename from R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackend.scala rename to core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala diff --git a/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala similarity index 100% rename from R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRBackendHandler.scala rename to core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala diff --git a/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala similarity index 100% rename from R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRConf.scala rename to core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala diff --git a/R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala similarity index 100% rename from R/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/SparkRRunner.scala rename to core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala From 3415cc722319b11c1580a1edd709ff3ea71cae2f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 10:30:37 -0700 Subject: [PATCH 632/687] move Scala source into core/ and sql/ --- R/pkg/R/DataFrame.R | 8 +- R/pkg/R/RDD.R | 4 +- R/pkg/R/SQLContext.R | 4 +- R/pkg/R/context.R | 2 +- R/pkg/R/group.R | 2 +- R/pkg/R/pairRDD.R | 2 +- R/pkg/R/sparkR.R | 8 +- R/pkg/R/utils.R | 4 +- R/pkg/src/Makefile | 48 +- R/pkg/src/build.sbt | 74 --- R/pkg/src/pom.xml | 494 ------------------ R/pkg/src/project/build.properties | 1 - R/pkg/src/project/plugins.sbt | 5 - R/pkg/src/sbt/sbt | 50 -- R/pkg/src/src/main/resources/log4j.properties | 14 - .../scala/org/apache/spark/api/r/RRDD.scala | 21 +- .../scala/org/apache/spark/api/r/SerDe.scala | 19 +- .../apache/spark/api/r/SparkRBackend.scala | 32 +- .../spark/api/r/SparkRBackendHandler.scala | 21 +- .../org/apache/spark/api/r/SparkRConf.scala | 19 +- .../org/apache/spark/api/r/SparkRRunner.scala | 19 +- .../apache/spark/sql}/api/r/SQLUtils.scala | 33 +- 22 files changed, 155 insertions(+), 729 deletions(-) delete mode 100644 R/pkg/src/build.sbt delete mode 100644 R/pkg/src/pom.xml delete mode 100644 R/pkg/src/project/build.properties delete mode 100644 R/pkg/src/project/plugins.sbt delete mode 100755 R/pkg/src/sbt/sbt delete mode 100644 R/pkg/src/src/main/resources/log4j.properties rename {core/src/main/scala/org/apache/spark => sql/core/src/main/scala/org/apache/spark/sql}/api/r/SQLUtils.scala (76%) diff --git a/R/pkg/R/DataFrame.R b/R/pkg/R/DataFrame.R index 8c9256bdb5277..fea476866566c 100644 --- a/R/pkg/R/DataFrame.R +++ b/R/pkg/R/DataFrame.R @@ -557,7 +557,7 @@ setMethod("collect", signature(x = "DataFrame"), function(x, stringsAsFactors = FALSE) { # listCols is a list of raw vectors, one per column - listCols <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToCols", x@sdf) + listCols <- callJStatic("org.apache.spark.sql.api.r.SQLUtils", "dfToCols", x@sdf) cols <- lapply(listCols, function(col) { objRaw <- rawConnection(col) numRows <- readInt(objRaw) @@ -687,7 +687,7 @@ setGeneric("toRDD", function(x) { standardGeneric("toRDD") }) setMethod("toRDD", signature(x = "DataFrame"), function(x) { - jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "dfToRowRDD", x@sdf) + jrdd <- callJStatic("org.apache.spark.sql.api.r.SQLUtils", "dfToRowRDD", x@sdf) colNames <- callJMethod(x@sdf, "columns") rdd <- RDD(jrdd, serializedMode = "row") lapply(rdd, function(row) { @@ -1270,7 +1270,7 @@ setMethod("saveDF", if (!(mode %in% allModes)) { stop('mode should be one of "append", "overwrite", "error", "ignore"') } - jmode <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "saveMode", mode) + jmode <- callJStatic("org.apache.spark.sql.api.r.SQLUtils", "saveMode", mode) options <- varargsToEnv(...) if (!is.null(path)) { options[['path']] = path @@ -1328,7 +1328,7 @@ setMethod("saveAsTable", if (!(mode %in% allModes)) { stop('mode should be one of "append", "overwrite", "error", "ignore"') } - jmode <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "saveMode", mode) + jmode <- callJStatic("org.apache.spark.sql.api.r.SQLUtils", "saveMode", mode) options <- varargsToEnv(...) callJMethod(df@sdf, "saveAsTable", tableName, source, jmode, options) }) diff --git a/R/pkg/R/RDD.R b/R/pkg/R/RDD.R index 30a083364ce43..d188d5d29ca60 100644 --- a/R/pkg/R/RDD.R +++ b/R/pkg/R/RDD.R @@ -142,7 +142,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), prev_jrdd <- rdd@prev_jrdd if (serializedMode == "string") { - rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.StringRRDD", + rddRef <- newJObject("org.apache.spark.api.r.StringRRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, rdd@env$prev_serializedMode, @@ -151,7 +151,7 @@ setMethod("getJRDD", signature(rdd = "PipelinedRDD"), broadcastArr, callJMethod(prev_jrdd, "classTag")) } else { - rddRef <- newJObject("edu.berkeley.cs.amplab.sparkr.RRDD", + rddRef <- newJObject("org.apache.spark.api.r.RRDD", callJMethod(prev_jrdd, "rdd"), serializedFuncArr, rdd@env$prev_serializedMode, diff --git a/R/pkg/R/SQLContext.R b/R/pkg/R/SQLContext.R index b40ab20838fcc..216a94b8bb300 100644 --- a/R/pkg/R/SQLContext.R +++ b/R/pkg/R/SQLContext.R @@ -109,7 +109,7 @@ createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { }) } if (is.list(data)) { - sc <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "getJavaSparkContext", sqlCtx) + sc <- callJStatic("org.apache.spark.sql.api.r.SQLUtils", "getJavaSparkContext", sqlCtx) rdd <- parallelize(sc, data) } else if (inherits(data, "RDD")) { rdd <- data @@ -154,7 +154,7 @@ createDataFrame <- function(sqlCtx, data, schema = NULL, samplingRatio = 1.0) { jrdd <- getJRDD(lapply(rdd, function(x) x), "row") srdd <- callJMethod(jrdd, "rdd") - sdf <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "createDF", + sdf <- callJStatic("org.apache.spark.sql.api.r.SQLUtils", "createDF", srdd, schemaString, sqlCtx) dataFrame(sdf) } diff --git a/R/pkg/R/context.R b/R/pkg/R/context.R index 90a48c0188101..2a86306eba940 100644 --- a/R/pkg/R/context.R +++ b/R/pkg/R/context.R @@ -110,7 +110,7 @@ parallelize <- function(sc, coll, numSlices = 1) { # 2-tuples of raws serializedSlices <- lapply(slices, serialize, connection = NULL) - jrdd <- callJStatic("edu.berkeley.cs.amplab.sparkr.RRDD", + jrdd <- callJStatic("org.apache.spark.api.r.RRDD", "createRDDFromArray", sc, serializedSlices) RDD(jrdd, "byte") diff --git a/R/pkg/R/group.R b/R/pkg/R/group.R index 653d0891e328c..cb922cd5f1243 100644 --- a/R/pkg/R/group.R +++ b/R/pkg/R/group.R @@ -83,7 +83,7 @@ setMethod("agg", } jcols <- lapply(cols, function(c) { c@jc }) # the GroupedData.agg(col, cols*) API does not contain grouping Column - sdf <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "aggWithGrouping", + sdf <- callJStatic("org.apache.spark.sql.api.r.SQLUtils", "aggWithGrouping", x@sgd, listToSeq(jcols)) } else { stop("agg can only support Column or character") diff --git a/R/pkg/R/pairRDD.R b/R/pkg/R/pairRDD.R index 9189410bb2ca6..a9f26649e0a15 100644 --- a/R/pkg/R/pairRDD.R +++ b/R/pkg/R/pairRDD.R @@ -190,7 +190,7 @@ setMethod("partitionBy", # We create a PairwiseRRDD that extends RDD[(Array[Byte], # Array[Byte])], where the key is the hashed split, the value is # the content (key-val pairs). - pairwiseRRDD <- newJObject("edu.berkeley.cs.amplab.sparkr.PairwiseRRDD", + pairwiseRRDD <- newJObject("org.apache.spark.api.r.PairwiseRRDD", callJMethod(jrdd, "rdd"), as.integer(numPartitions), serializedHashFuncBytes, diff --git a/R/pkg/R/sparkR.R b/R/pkg/R/sparkR.R index ddd8d53a478c8..25f6941b24a11 100644 --- a/R/pkg/R/sparkR.R +++ b/R/pkg/R/sparkR.R @@ -119,14 +119,14 @@ sparkR.init <- function( path <- tempfile(pattern = "backend_port") if (Sys.getenv("SPARKR_USE_SPARK_SUBMIT", "") == "") { launchBackend(classPath = cp, - mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", + mainClass = "org.apache.spark.api.r.SparkRBackend", args = path, javaOpts = paste("-Xmx", sparkMem, sep = "")) } else { # TODO: We should deprecate sparkJars and ask users to add it to the # command line (using --jars) which is picked up by SparkSubmit launchBackendSparkSubmit( - mainClass = "edu.berkeley.cs.amplab.sparkr.SparkRBackend", + mainClass = "org.apache.spark.api.r.SparkRBackend", args = path, appJar = .sparkREnv$assemblyJarPath, sparkHome = sparkHome, @@ -194,7 +194,7 @@ sparkR.init <- function( assign( ".sparkRjsc", callJStatic( - "edu.berkeley.cs.amplab.sparkr.RRDD", + "org.apache.spark.api.r.RRDD", "createSparkContext", master, appName, @@ -231,7 +231,7 @@ sparkRSQL.init <- function(jsc) { return(get(".sparkRSQLsc", envir = .sparkREnv)) } - sqlCtx <- callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", + sqlCtx <- callJStatic("org.apache.spark.sql.api.r.SQLUtils", "createSQLContext", jsc) assign(".sparkRSQLsc", sqlCtx, envir = .sparkREnv) diff --git a/R/pkg/R/utils.R b/R/pkg/R/utils.R index 6c99866d57020..8ec8845dc8793 100644 --- a/R/pkg/R/utils.R +++ b/R/pkg/R/utils.R @@ -306,12 +306,12 @@ numToInt <- function(num) { # create a Seq in JVM toSeq <- function(...) { - callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", list(...)) + callJStatic("org.apache.spark.sql.api.r.SQLUtils", "toSeq", list(...)) } # create a Seq in JVM from a list listToSeq <- function(l) { - callJStatic("edu.berkeley.cs.amplab.sparkr.SQLUtils", "toSeq", l) + callJStatic("org.apache.spark.sql.api.r.SQLUtils", "toSeq", l) } # Utility function to recursively traverse the Abstract Syntax Tree (AST) of a diff --git a/R/pkg/src/Makefile b/R/pkg/src/Makefile index 576ea257b9ff5..dc795e2d1d74e 100644 --- a/R/pkg/src/Makefile +++ b/R/pkg/src/Makefile @@ -1,56 +1,10 @@ -SCALA_VERSION := 2.10 -SPARKR_VERSION := 0.1 -JAR_NAME := sparkr-assembly-$(SPARKR_VERSION).jar -SBT_TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) - -MAVEN_JAR_NAME := sparkr-$(SPARKR_VERSION)-assembly.jar -MAVEN_TARGET_NAME := target/$(MAVEN_JAR_NAME) - -SCALA_SOURCE_DIR := src/main/scala/edu/berkeley/cs/amplab/sparkr -RESOURCE_DIR := src/main/resources - -SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) -RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) - -SPARK_HADOOP_VERSION ?= 1.0.4 -SPARK_VERSION ?= 1.3.0 -SPARK_YARN_VERSION ?= 2.4.0 - -ifdef USE_MAVEN - TARGET_NAME := $(MAVEN_TARGET_NAME) - BUILD_TOOL := mvn -else - TARGET_NAME := $(SBT_TARGET_NAME) - BUILD_TOOL := sbt/sbt -endif - -ifdef USE_YARN - MAVEN_YARN_FLAG := "-Pyarn" -else - MAVEN_YARN_FLAG := -endif - -all: $(TARGET_NAME) sharelib - -$(SBT_TARGET_NAME): build.sbt $(SCALA_FILES) $(RESOURCE_FILES) - ./sbt/sbt assembly - cp -f $(SBT_TARGET_NAME) ../inst/ - -$(MAVEN_TARGET_NAME): pom.xml $(SCALA_FILES) $(RESOURCE_FILES) - mvn -Dhadoop.version=$(SPARK_HADOOP_VERSION) -Dspark.version=$(SPARK_VERSION) -DskipTests $(MAVEN_YARN_FLAG) -Dyarn.version=$(SPARK_YARN_VERSION) clean package shade:shade - cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) +all: sharelib sharelib: string_hash_code.c R CMD SHLIB -o SparkR.so string_hash_code.c clean: - $(BUILD_TOOL) clean - rm -rf target - rm -rf project/target - rm -rf project/project - -rm sbt/sbt-launch-*.jar - rm -f ../inst/$(JAR_NAME) rm -f *.o rm -f *.so diff --git a/R/pkg/src/build.sbt b/R/pkg/src/build.sbt deleted file mode 100644 index a1fb240d8d81a..0000000000000 --- a/R/pkg/src/build.sbt +++ /dev/null @@ -1,74 +0,0 @@ -import sbt._ -import Process._ -import Keys._ - -import AssemblyKeys._ - -assemblySettings - -name := "sparkr" - -version := "0.1" - -organization := "edu.berkeley.cs.amplab" - -scalaVersion := "2.10.3" - -libraryDependencies ++= Seq( - "io.netty" % "netty-all" % "4.0.23.Final", - "org.slf4j" % "slf4j-api" % "1.7.2", - "org.slf4j" % "slf4j-log4j12" % "1.7.2" -) - -{ - val excludeCglib = ExclusionRule(organization = "org.sonatype.sisu.inject") - val excludeJackson = ExclusionRule(organization = "org.codehaus.jackson") - val excludeNetty = ExclusionRule(organization = "org.jboss.netty") - val excludeAsm = ExclusionRule(organization = "asm") - val excludeSnappy = ExclusionRule(organization = "org.xerial.snappy") - val excludeHadoop = ExclusionRule(organization = "org.apache.hadoop") - val sbtYarnFlag = scala.util.Properties.envOrElse("USE_YARN", "") - val defaultHadoopVersion = "1.0.4" - val defaultSparkVersion = "1.3.0" - val hadoopVersion = scala.util.Properties.envOrElse("SPARK_HADOOP_VERSION", defaultHadoopVersion) - val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", defaultSparkVersion) - libraryDependencies ++= Seq( - "org.apache.hadoop" % "hadoop-client" % hadoopVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.spark" % "spark-core_2.10" % sparkVersion, - "org.apache.spark" % "spark-sql_2.10" % sparkVersion - ) ++ (if (sbtYarnFlag != "") { - val defaultYarnVersion = "2.4.0" - val yarnVersion = scala.util.Properties.envOrElse("SPARK_YARN_VERSION", defaultYarnVersion) - Seq( - "org.apache.hadoop" % "hadoop-yarn-api" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.hadoop" % "hadoop-yarn-common" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.hadoop" % "hadoop-yarn-server-web-proxy" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.hadoop" % "hadoop-yarn-client" % yarnVersion excludeAll(excludeJackson, excludeNetty, excludeAsm, excludeCglib), - "org.apache.spark" % "spark-yarn_2.10" % sparkVersion - ) - } else { - None.toSeq - } - ) -} - -resolvers ++= Seq( - "Typesafe" at "http://repo.typesafe.com/typesafe/releases", - "Scala Tools Snapshots" at "http://scala-tools.org/repo-snapshots/", - "Cloudera Repository" at "https://repository.cloudera.com/artifactory/cloudera-repos/", - "Spray" at "http://repo.spray.cc" -) - -mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => - { - case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first - case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first - case "application.conf" => MergeStrategy.concat - case "reference.conf" => MergeStrategy.concat - case "log4j.properties" => MergeStrategy.first - case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard - case m if m.toLowerCase.matches("meta-inf/services.*$") => MergeStrategy.concat - case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard - case _ => MergeStrategy.first - } -} diff --git a/R/pkg/src/pom.xml b/R/pkg/src/pom.xml deleted file mode 100644 index ba7e7de7b67cc..0000000000000 --- a/R/pkg/src/pom.xml +++ /dev/null @@ -1,494 +0,0 @@ - - edu.berkeley.cs.amplab - sparkr - 4.0.0 - sparkr - jar - 0.1 - - - central - - Maven Repository - https://repo1.maven.org/maven2 - - true - - - false - - - - apache-staging-repo - Apache Staging Repository - https://repository.apache.org/content/repositories/staging - - true - - - false - - - - apache-repo - Apache Repository - https://repository.apache.org/content/repositories/releases - - true - - - false - - - - jboss-repo - JBoss Repository - https://repository.jboss.org/nexus/content/repositories/releases - - true - - - false - - - - cloudera-repo - Cloudera Repository - https://repository.cloudera.com/artifactory/cloudera-repos - - true - - - false - - - - Spray.cc repository - http://repo.spray.cc - - - Akka repository - http://repo.akka.io/releases - - - scala - Scala Tools - http://scala-tools.org/repo-releases/ - - true - - - false - - - - - - - org.apache.hadoop - hadoop-client - ${hadoop.version} - - - asm - asm - - - org.jboss.netty - netty - - - org.codehaus.jackson - * - - - org.sonatype.sisu.inject - * - - - - - org.apache.spark - spark-core_2.10 - ${spark.version} - - - org.apache.hadoop - hadoop-client - - - - - org.apache.spark - spark-sql_2.10 - ${spark.version} - - - org.apache.hadoop - hadoop-client - - - - - org.slf4j - slf4j-log4j12 - 1.7.2 - - - org.slf4j - slf4j-api - 1.7.2 - - - org.scala-lang - scala-library - 2.10.3 - - - - - - UTF-8 - UTF-8 - - 1.6 - 2.10.3 - 2.10 - - 64m - 512m - - - - target/scala-${scala.binary.version}/classes - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 1.1.1 - - - enforce-versions - - enforce - - - - - 3.0.0 - - - ${java.version} - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - 1.7 - - - - net.alchim31.maven - scala-maven-plugin - 3.1.5 - - - scala-compile-first - process-resources - - compile - - - - scala-test-compile-first - process-test-resources - - testCompile - - - - attach-scaladocs - verify - - doc-jar - - - - - ${scala.version} - incremental - true - - -unchecked - -deprecation - - - -Xms64m - -Xms1024m - -Xmx1024m - -XX:PermSize=${PermGen} - -XX:MaxPermSize=${MaxPermGen} - - - -source - ${java.version} - -target - ${java.version} - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.5.1 - - ${java.version} - ${java.version} - UTF-8 - 1024m - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - org.apache.maven.plugins - maven-shade-plugin - 2.0 - - true - assembly - - - *:* - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - META-INF/services/org.apache.hadoop.fs.FileSystem - - - reference.conf - - - - - - package - - shade - - - - - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-scala-sources - generate-sources - - add-source - - - - src/main/scala - - - - - add-scala-test-sources - generate-test-sources - - add-test-source - - - - src/test/scala - - - - - - - net.alchim31.maven - scala-maven-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - - - - - - scala - Scala Tools - http://scala-tools.org/repo-releases/ - - true - - - false - - - - - - - yarn - - - org.apache.hadoop - hadoop-yarn-api - ${yarn.version} - - - javax.servlet - servlet-api - - - asm - asm - - - org.ow2.asm - asm - - - org.jboss.netty - netty - - - commons-logging - commons-logging - - - - - org.apache.hadoop - hadoop-yarn-common - ${yarn.version} - - - asm - asm - - - org.ow2.asm - asm - - - org.jboss.netty - netty - - - javax.servlet - servlet-api - - - commons-logging - commons-logging - - - - - org.apache.hadoop - hadoop-yarn-server-web-proxy - ${yarn.version} - - - asm - asm - - - org.ow2.asm - asm - - - org.jboss.netty - netty - - - javax.servlet - servlet-api - - - commons-logging - commons-logging - - - - - org.apache.hadoop - hadoop-yarn-client - ${yarn.version} - - - asm - asm - - - org.ow2.asm - asm - - - org.jboss.netty - netty - - - javax.servlet - servlet-api - - - commons-logging - commons-logging - - - - - org.apache.spark - spark-yarn_2.10 - ${spark.version} - - - - - - diff --git a/R/pkg/src/project/build.properties b/R/pkg/src/project/build.properties deleted file mode 100644 index 64abd373f7fe1..0000000000000 --- a/R/pkg/src/project/build.properties +++ /dev/null @@ -1 +0,0 @@ -sbt.version=0.13.6 diff --git a/R/pkg/src/project/plugins.sbt b/R/pkg/src/project/plugins.sbt deleted file mode 100644 index 147c561511f0b..0000000000000 --- a/R/pkg/src/project/plugins.sbt +++ /dev/null @@ -1,5 +0,0 @@ -resolvers += "Sonatype snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/" - -addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1") - -addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0") diff --git a/R/pkg/src/sbt/sbt b/R/pkg/src/sbt/sbt deleted file mode 100755 index 62ead8a69dbf6..0000000000000 --- a/R/pkg/src/sbt/sbt +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# This script launches sbt for this project. If present it uses the system -# version of sbt. If there is no system version of sbt it attempts to download -# sbt locally. -SBT_VERSION=`awk -F "=" '/sbt\\.version/ {print $2}' ./project/build.properties` -URL1=http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/${SBT_VERSION}/sbt-launch.jar -URL2=http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/${SBT_VERSION}/sbt-launch.jar -JAR=sbt/sbt-launch-${SBT_VERSION}.jar - -# Download sbt launch jar if it hasn't been downloaded yet -if [ ! -f ${JAR} ]; then - # Download - printf "Attempting to fetch sbt\n" - if hash curl 2>/dev/null; then - curl --progress-bar ${URL1} > ${JAR} || curl --progress-bar ${URL2} > ${JAR} - elif hash wget 2>/dev/null; then - wget --progress=bar ${URL1} -O ${JAR} || wget --progress=bar ${URL2} -O ${JAR} - else - printf "You do not have curl or wget installed, please install sbt manually from http://www.scala-sbt.org/\n" - exit -1 - fi -fi -if [ ! -f ${JAR} ]; then - # We failed to download - printf "Our attempt to download sbt locally to ${JAR} failed. Please install sbt manually from http://www.scala-sbt.org/\n" - exit -1 -fi -printf "Launching sbt from ${JAR}\n" -java \ - -Xmx1200m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=256m \ - -jar ${JAR} \ - "$@" diff --git a/R/pkg/src/src/main/resources/log4j.properties b/R/pkg/src/src/main/resources/log4j.properties deleted file mode 100644 index 605b3b8ff0db5..0000000000000 --- a/R/pkg/src/src/main/resources/log4j.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Set everything to be logged to the console -log4j.rootCategory=INFO, console -log4j.appender.console=org.apache.log4j.ConsoleAppender -log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n - -# Change this to set Spark log level -log4j.logger.org.apache.spark=WARN - -# Silence akka remoting -log4j.logger.Remoting=WARN - -# Ignore messages below warning level from Jetty, because it's a bit verbose -log4j.logger.org.eclipse.jetty=WARN diff --git a/core/src/main/scala/org/apache/spark/api/r/RRDD.scala b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala index 98eaa994a8267..109dbe269b0d1 100644 --- a/core/src/main/scala/org/apache/spark/api/r/RRDD.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala @@ -1,4 +1,21 @@ -package edu.berkeley.cs.amplab.sparkr +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.spark.api.r import java.io._ import java.net.ServerSocket @@ -280,7 +297,7 @@ private class StringRRDD[T: ClassTag]( lazy val asJavaRDD : JavaRDD[String] = JavaRDD.fromRDD(this) } -private[sparkr] class BufferedStreamThread( +private[spark] class BufferedStreamThread( in: InputStream, name: String, errBufferSize: Int) extends Thread(name) { diff --git a/core/src/main/scala/org/apache/spark/api/r/SerDe.scala b/core/src/main/scala/org/apache/spark/api/r/SerDe.scala index 02b9c1dfe82d6..eb5beaab81602 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SerDe.scala +++ b/core/src/main/scala/org/apache/spark/api/r/SerDe.scala @@ -1,4 +1,21 @@ -package edu.berkeley.cs.amplab.sparkr +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.spark.api.r import java.io.{DataInputStream, DataOutputStream} import java.sql.{Date, Time} diff --git a/core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala index 3cc5813e84c4d..424ed8595ca01 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala +++ b/core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala @@ -1,21 +1,33 @@ -package edu.berkeley.cs.amplab.sparkr +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ -import java.io.{File, FileOutputStream, DataOutputStream, IOException} -import java.net.{ServerSocket, InetSocketAddress, Socket} -import java.util.concurrent.TimeUnit +package org.apache.spark.api.r -import scala.util.control.NonFatal +import java.io.{DataOutputStream, File, FileOutputStream, IOException} +import java.net.{InetSocketAddress, ServerSocket} +import java.util.concurrent.TimeUnit import io.netty.bootstrap.ServerBootstrap -import io.netty.channel.ChannelFuture -import io.netty.channel.ChannelInitializer -import io.netty.channel.EventLoopGroup +import io.netty.channel.{ChannelFuture, ChannelInitializer, EventLoopGroup} import io.netty.channel.nio.NioEventLoopGroup import io.netty.channel.socket.SocketChannel import io.netty.channel.socket.nio.NioServerSocketChannel -import io.netty.handler.codec.bytes.ByteArrayDecoder -import io.netty.handler.codec.bytes.ByteArrayEncoder import io.netty.handler.codec.LengthFieldBasedFrameDecoder +import io.netty.handler.codec.bytes.{ByteArrayDecoder, ByteArrayEncoder} /** * Netty-based backend server that is used to communicate between R and Java. diff --git a/core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala index 67681fc608220..9d6f255856bb1 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala +++ b/core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala @@ -1,4 +1,21 @@ -package edu.berkeley.cs.amplab.sparkr +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.spark.api.r import java.io.{ByteArrayInputStream, ByteArrayOutputStream, DataInputStream, DataOutputStream} @@ -8,7 +25,7 @@ import io.netty.channel.ChannelHandler.Sharable import io.netty.channel.ChannelHandlerContext import io.netty.channel.SimpleChannelInboundHandler -import edu.berkeley.cs.amplab.sparkr.SerDe._ +import org.apache.spark.api.r.SerDe._ /** * Handler for SparkRBackend diff --git a/core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala index 9aa5e1b3164eb..eb69e49893467 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala +++ b/core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala @@ -1,4 +1,21 @@ -package edu.berkeley.cs.amplab.sparkr +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.spark.api.r /** * Configuration options for SparkRBackend server diff --git a/core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala index a09be4e5cb0c7..e27fa14aa0f27 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala +++ b/core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala @@ -1,4 +1,21 @@ -package edu.berkeley.cs.amplab.sparkr +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.spark.api.r import java.io._ import java.util.concurrent.{Semaphore, TimeUnit} diff --git a/core/src/main/scala/org/apache/spark/api/r/SQLUtils.scala b/sql/core/src/main/scala/org/apache/spark/sql/api/r/SQLUtils.scala similarity index 76% rename from core/src/main/scala/org/apache/spark/api/r/SQLUtils.scala rename to sql/core/src/main/scala/org/apache/spark/sql/api/r/SQLUtils.scala index 8df90c160f675..965ab36390673 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SQLUtils.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/api/r/SQLUtils.scala @@ -1,15 +1,31 @@ -package edu.berkeley.cs.amplab.sparkr +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.spark.sql.api.r import java.io.{ByteArrayInputStream, ByteArrayOutputStream, DataInputStream, DataOutputStream} import org.apache.spark.api.java.{JavaRDD, JavaSparkContext} +import org.apache.spark.api.r.SerDe import org.apache.spark.rdd.RDD import org.apache.spark.sql.catalyst.expressions.{Alias, Expression, NamedExpression} import org.apache.spark.sql.types.{DataType, StructType} import org.apache.spark.sql.{Column, DataFrame, GroupedData, Row, SQLContext, SaveMode} -import edu.berkeley.cs.amplab.sparkr.SerDe._ - object SQLUtils { def createSQLContext(jsc: JavaSparkContext): SQLContext = { new SQLContext(jsc) @@ -31,17 +47,14 @@ object SQLUtils { } // A helper to include grouping columns in Agg() - // TODO(davies): use internal API after merged into Spark def aggWithGrouping(gd: GroupedData, exprs: Column*): DataFrame = { val aggExprs = exprs.map { col => - val f = col.getClass.getDeclaredField("expr") - f.setAccessible(true) - val expr = f.get(col).asInstanceOf[Expression] - expr match { + col.expr match { case expr: NamedExpression => expr case expr: Expression => Alias(expr, expr.simpleString)() } } + // TODO(davies): use internal API val toDF = gd.getClass.getDeclaredMethods.filter(f => f.getName == "toDF").head toDF.setAccessible(true) toDF.invoke(gd, aggExprs).asInstanceOf[DataFrame] @@ -54,9 +67,9 @@ object SQLUtils { private[this] def bytesToRow(bytes: Array[Byte]): Row = { val bis = new ByteArrayInputStream(bytes) val dis = new DataInputStream(bis) - val num = readInt(dis) + val num = SerDe.readInt(dis) Row.fromSeq((0 until num).map { i => - readObject(dis) + SerDe.readObject(dis) }.toSeq) } From df3eeea715ac00ab79f3f8bbb9dd826e65bfe96f Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 10:52:10 -0700 Subject: [PATCH 633/687] move R/examples into examples/src/main/r --- R/examples/wordcount.R | 25 ----------- {R/examples => examples/src/main/r}/dfc/DFC.R | 18 ++++++++ .../src/main/r}/dfc/README.txt | 0 .../src/main/r}/dfc/example.mat | 0 .../src/main/r}/dfc/maskUV.cpp | 17 ++++++++ {R/examples => examples/src/main/r}/kmeans.R | 17 ++++++++ .../src/main/r}/linear_solver_mnist.R | 17 ++++++++ .../src/main/r}/logistic_regression.R | 17 ++++++++ {R/examples => examples/src/main/r}/pi.R | 17 ++++++++ examples/src/main/r/wordcount.R | 42 +++++++++++++++++++ 10 files changed, 145 insertions(+), 25 deletions(-) delete mode 100644 R/examples/wordcount.R rename {R/examples => examples/src/main/r}/dfc/DFC.R (93%) rename {R/examples => examples/src/main/r}/dfc/README.txt (100%) rename {R/examples => examples/src/main/r}/dfc/example.mat (100%) rename {R/examples => examples/src/main/r}/dfc/maskUV.cpp (53%) rename {R/examples => examples/src/main/r}/kmeans.R (71%) rename {R/examples => examples/src/main/r}/linear_solver_mnist.R (79%) rename {R/examples => examples/src/main/r}/logistic_regression.R (60%) rename {R/examples => examples/src/main/r}/pi.R (50%) create mode 100644 examples/src/main/r/wordcount.R diff --git a/R/examples/wordcount.R b/R/examples/wordcount.R deleted file mode 100644 index e75c85cabe9ec..0000000000000 --- a/R/examples/wordcount.R +++ /dev/null @@ -1,25 +0,0 @@ -library(SparkR) - -args <- commandArgs(trailing = TRUE) - -if (length(args) != 2) { - print("Usage: wordcount ") - q("no") -} - -# Initialize Spark context -sc <- sparkR.init(args[[1]], "RwordCount") -lines <- textFile(sc, args[[2]]) - -words <- flatMap(lines, - function(line) { - strsplit(line, " ")[[1]] - }) -wordCount <- lapply(words, function(word) { list(word, 1L) }) - -counts <- reduceByKey(wordCount, "+", 2L) -output <- collect(counts) - -for (wordcount in output) { - cat(wordcount[[1]], ": ", wordcount[[2]], "\n") -} diff --git a/R/examples/dfc/DFC.R b/examples/src/main/r/dfc/DFC.R similarity index 93% rename from R/examples/dfc/DFC.R rename to examples/src/main/r/dfc/DFC.R index cd972804408a2..0993637a0f9d3 100644 --- a/R/examples/dfc/DFC.R +++ b/examples/src/main/r/dfc/DFC.R @@ -1,3 +1,21 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + # Import required matrix and C interface packages library(SparkR) library(MASS) diff --git a/R/examples/dfc/README.txt b/examples/src/main/r/dfc/README.txt similarity index 100% rename from R/examples/dfc/README.txt rename to examples/src/main/r/dfc/README.txt diff --git a/R/examples/dfc/example.mat b/examples/src/main/r/dfc/example.mat similarity index 100% rename from R/examples/dfc/example.mat rename to examples/src/main/r/dfc/example.mat diff --git a/R/examples/dfc/maskUV.cpp b/examples/src/main/r/dfc/maskUV.cpp similarity index 53% rename from R/examples/dfc/maskUV.cpp rename to examples/src/main/r/dfc/maskUV.cpp index 901ee25492a6e..350c4712b2830 100644 --- a/R/examples/dfc/maskUV.cpp +++ b/examples/src/main/r/dfc/maskUV.cpp @@ -1,3 +1,20 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + #include using namespace Rcpp; diff --git a/R/examples/kmeans.R b/examples/src/main/r/kmeans.R similarity index 71% rename from R/examples/kmeans.R rename to examples/src/main/r/kmeans.R index 6fdbc824b89cd..403ca9fb107fa 100644 --- a/R/examples/kmeans.R +++ b/examples/src/main/r/kmeans.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + library(SparkR) # Logistic regression in Spark. diff --git a/R/examples/linear_solver_mnist.R b/examples/src/main/r/linear_solver_mnist.R similarity index 79% rename from R/examples/linear_solver_mnist.R rename to examples/src/main/r/linear_solver_mnist.R index 2b77aad99ea05..c29e2214b274f 100644 --- a/R/examples/linear_solver_mnist.R +++ b/examples/src/main/r/linear_solver_mnist.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Instructions: https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-Example:-Digit-Recognition-on-EC2 library(SparkR, lib.loc="./lib") diff --git a/R/examples/logistic_regression.R b/examples/src/main/r/logistic_regression.R similarity index 60% rename from R/examples/logistic_regression.R rename to examples/src/main/r/logistic_regression.R index c52b8315225ff..697fc331a0c5d 100644 --- a/R/examples/logistic_regression.R +++ b/examples/src/main/r/logistic_regression.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + library(SparkR) args <- commandArgs(trailing = TRUE) diff --git a/R/examples/pi.R b/examples/src/main/r/pi.R similarity index 50% rename from R/examples/pi.R rename to examples/src/main/r/pi.R index 0c3fa8fa62f3e..00fddc65543a6 100644 --- a/R/examples/pi.R +++ b/examples/src/main/r/pi.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + library(SparkR) args <- commandArgs(trailing = TRUE) diff --git a/examples/src/main/r/wordcount.R b/examples/src/main/r/wordcount.R new file mode 100644 index 0000000000000..5f5e66e8fbd61 --- /dev/null +++ b/examples/src/main/r/wordcount.R @@ -0,0 +1,42 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +library(SparkR) + +args <- commandArgs(trailing = TRUE) + +if (length(args) != 2) { + print("Usage: wordcount ") + q("no") +} + +# Initialize Spark context +sc <- sparkR.init(args[[1]], "RwordCount") +lines <- textFile(sc, args[[2]]) + +words <- flatMap(lines, + function(line) { + strsplit(line, " ")[[1]] + }) +wordCount <- lapply(words, function(word) { list(word, 1L) }) + +counts <- reduceByKey(wordCount, "+", 2L) +output <- collect(counts) + +for (wordcount in output) { + cat(wordcount[[1]], ": ", wordcount[[2]], "\n") +} From a76472f3cbc7ef12f3b871eea59f24db44d0ad39 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 11:06:51 -0700 Subject: [PATCH 634/687] fix path of assembly jar --- R/pkg/R/sparkR.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/pkg/R/sparkR.R b/R/pkg/R/sparkR.R index 25f6941b24a11..50c0d7e9f5295 100644 --- a/R/pkg/R/sparkR.R +++ b/R/pkg/R/sparkR.R @@ -1,9 +1,10 @@ .sparkREnv <- new.env() -assemblyJarName <- "sparkr-assembly-0.1.jar" +#TODO(davies): change to spark-submit +assemblyJarName <- "spark-assembly-1.3.0-SNAPSHOT-hadoop1.0.4.jar" sparkR.onLoad <- function(libname, pkgname) { - assemblyJarPath <- paste(libname, "/SparkR/", assemblyJarName, sep = "") + assemblyJarPath <- paste(libname, "/../../assembly/target/scala-2.10/", assemblyJarName, sep = "") packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") .sparkREnv$libname <- libname From 0a0e632f0d3cd518431a6a86e47fe36d11730d17 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 11:09:38 -0700 Subject: [PATCH 635/687] move sparkR into bin/ --- {R => bin}/sparkR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename {R => bin}/sparkR (96%) diff --git a/R/sparkR b/bin/sparkR similarity index 96% rename from R/sparkR rename to bin/sparkR index ee25123041046..49ac5db75fc11 100755 --- a/R/sparkR +++ b/bin/sparkR @@ -2,7 +2,7 @@ FWDIR="$(cd `dirname $0`; pwd)" -export PROJECT_HOME="$FWDIR" +export PROJECT_HOME="$FWDIR/../R/" unset JAVA_HOME From 18e5eedd242a4f622ef1f8615f46a5d89d31c9b3 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 11:23:20 -0700 Subject: [PATCH 636/687] update docs --- R/.gitignore | 26 --- R/LICENSE | 398 ------------------------------------------- R/README.md | 49 ++---- R/SparkR_prep-0.1.sh | 9 +- R/TODO.md | 6 +- 5 files changed, 15 insertions(+), 473 deletions(-) delete mode 100644 R/.gitignore delete mode 100644 R/LICENSE diff --git a/R/.gitignore b/R/.gitignore deleted file mode 100644 index 59176bdff6237..0000000000000 --- a/R/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -*.class -*.so -*.o -# Package Files # -*.jar -*.war -*.ear -.RData -.Rhistory -unit-tests.log -checkpoints/ -target/ -lib/ -work/ -# vim tmps -.*.swp -*.*~ -*~ -.Rproj.user -SparkR-pkg.Rproj -*.o -*.so -SparkR.Rcheck -# Eclipse Meta Files -.project -.classpath diff --git a/R/LICENSE b/R/LICENSE deleted file mode 100644 index 1c166d1333614..0000000000000 --- a/R/LICENSE +++ /dev/null @@ -1,398 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -======================================================================= -Apache Spark Subcomponents: - -The Apache Spark project contains subcomponents with separate copyright -notices and license terms. Your use of the source code for the these -subcomponents is subject to the terms and conditions of the following -licenses. - - -======================================================================= -For the Boto EC2 library (ec2/third_party/boto*.zip): -======================================================================= - -Copyright (c) 2006-2008 Mitch Garnaat http://garnaat.org/ - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, dis- -tribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the fol- -lowing conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- -ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -======================================================================== -For CloudPickle (pyspark/cloudpickle.py): -======================================================================== - -Copyright (c) 2012, Regents of the University of California. -Copyright (c) 2009 `PiCloud, Inc. `_. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the University of California, Berkeley nor the - names of its contributors may be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -======================================================================== -For Py4J (python/lib/py4j0.7.egg and files in assembly/lib/net/sf/py4j): -======================================================================== - -Copyright (c) 2009-2011, Barthelemy Dagenais All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -- The name of the author may not be used to endorse or promote products -derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - - -======================================================================== -For DPark join code (python/pyspark/join.py): -======================================================================== - -Copyright (c) 2011, Douban Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - - * Neither the name of the Douban Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -======================================================================== -For sorttable (core/src/main/resources/org/apache/spark/ui/static/sorttable.js): -======================================================================== - -Copyright (c) 1997-2007 Stuart Langridge - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -======================================================================== -For Scala Interpreter classes (all .scala files in repl/src/main/scala -except for Main.Scala, SparkHelper.scala and ExecutorClassLoader.scala): -======================================================================== - -Copyright (c) 2002-2013 EPFL -Copyright (c) 2011-2013 Typesafe, Inc. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -- Neither the name of the EPFL nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/R/README.md b/R/README.md index 92bc035b87842..ff212549787f4 100644 --- a/R/README.md +++ b/R/README.md @@ -1,50 +1,25 @@ # R on Spark -[![Build Status](https://travis-ci.org/amplab-extras/SparkR-pkg.png?branch=master)](https://travis-ci.org/amplab-extras/SparkR-pkg) - SparkR is an R package that provides a light-weight frontend to use Spark from R. ## Installing SparkR -### Requirements -SparkR requires Scala 2.10 and Spark version >= 0.9.0. Current build by default uses -Apache Spark 1.1.0. You can also build SparkR against a -different Spark version (>= 0.9.0) by modifying `pkg/src/build.sbt`. +### Build Spark + +TBD ### Package installation -To develop SparkR, you can build the scala package and the R package using - ./install-dev.sh +To develop SparkR, you can build the R package using + + ./R/install-dev.sh If you wish to try out the package directly from github, you can use [`install_github`](http://www.inside-r.org/packages/cran/devtools/docs/install_github) from [`devtools`](http://www.inside-r.org/packages/cran/devtools). Note that you can specify which branch, tag etc to install from. library(devtools) - install_github("amplab-extras/SparkR-pkg", subdir="pkg") - -SparkR by default uses Apache Spark 1.1.0. You can switch to a different Spark -version by setting the environment variable `SPARK_VERSION`. For example, to -use Apache Spark 1.3.0, you can run - - SPARK_VERSION=1.3.0 ./install-dev.sh - -SparkR by default links to Hadoop 1.0.4. To use SparkR with other Hadoop -versions, you will need to rebuild SparkR with the same version that [Spark is -linked -to](http://spark.apache.org/docs/latest/index.html#a-note-about-hadoop-versions). -For example to use SparkR with a CDH 4.2.0 MR1 cluster, you can run - - SPARK_HADOOP_VERSION=2.0.0-mr1-cdh4.2.0 ./install-dev.sh - -By default, SparkR uses [sbt](http://www.scala-sbt.org) to build an assembly -jar. If you wish to use [maven](http://maven.apache.org/) instead, you can set -the environment variable `USE_MAVEN=1`. For example - - USE_MAVEN=1 ./install-dev.sh - -If you are building SparkR from behind a proxy, you can [setup maven](https://maven.apache.org/guides/mini/guide-proxies.html) to use the right proxy -server. + install_github("apache/spark", subdir="R/pkg") #### Building from source from GitHub @@ -67,7 +42,7 @@ install_github("repo/SparkR-pkg", ref="branchname", subdir="pkg") If you have cloned and built SparkR, you can start using it by launching the SparkR shell with - ./sparkR + ./bin/sparkR The `sparkR` script automatically creates a SparkContext with Spark by default in local mode. To specify the Spark master of a cluster for the automatically created @@ -102,15 +77,15 @@ sparkR.stop() can be invoked to terminate a SparkContext created previously via ## Examples, Unit tests -SparkR comes with several sample programs in the `examples` directory. -To run one of them, use `./sparkR `. For example: +SparkR comes with several sample programs in the `examples/src/main/r` directory. +To run one of them, use `./bin/sparkR `. For example: - ./sparkR examples/pi.R local[2] + ./bin/sparkR examples/src/main/r/pi.R local[2] You can also run the unit-tests for SparkR by running (you need to install the [testthat](http://cran.r-project.org/web/packages/testthat/index.html) package first): R -e 'install.packages("testthat", repos="http://cran.us.r-project.org")' - ./run-tests.sh + ./R/run-tests.sh ## Running on EC2 diff --git a/R/SparkR_prep-0.1.sh b/R/SparkR_prep-0.1.sh index 671e291ae1938..2ef0fefabcd09 100755 --- a/R/SparkR_prep-0.1.sh +++ b/R/SparkR_prep-0.1.sh @@ -30,13 +30,6 @@ sudo -E /usr/local/bin/R CMD javareconf # Install additional needed R packages sudo /usr/local/bin/Rscript -e 'install.packages(c("rJava", "Rserve"), repos = "http://cran.rstudio.com")' -# Install Scala 2.10.4 -wget http://www.scala-lang.org/files/archive/scala-2.10.4.tgz -tar xzvf scala-2.10.4.tgz -sudo mkdir /usr/local/share/scala -sudo mv scala-2.10.4/* /usr/local/share/scala -rmdir scala-2.10.4 - # Clean-up #cd .. -#rm -r --force build_SparkR \ No newline at end of file +#rm -r --force build_SparkR diff --git a/R/TODO.md b/R/TODO.md index a4c2028233664..011a6bc95c44a 100644 --- a/R/TODO.md +++ b/R/TODO.md @@ -13,10 +13,8 @@ ## Performance improvements 1. Write hash functions in C and use .Call to call into them. -2. Use long-running R worker daemons to avoid forking a process each time. -3. Memoizations of frequently queried vals in RDD, such as numPartitions, count etc. -4. Pipelined RRDD to execute multiple functions with one call. -5. Profile serialization overhead and see if there is anything better we can do. +2. Memoizations of frequently queried vals in RDD, such as numPartitions, count etc. +3. Profile serialization overhead and see if there is anything better we can do. ## Feature wishlist From facb6e07ee3c9c2635cf63ae622cf2ecf5f18db5 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 11:25:12 -0700 Subject: [PATCH 637/687] add .gitignore for .o, .so, .Rd --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index d162fa9cca994..2828096ae59a1 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ *.iws *.pyc *.pyo +*.o +*.so +*.Rd .idea/ .idea_modules/ build/*.jar From 50bff632ce309153b85c81af6c451347ceb1fb80 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 11:34:06 -0700 Subject: [PATCH 638/687] add LICENSE header for R sources --- R/pkg/R/DataFrame.R | 17 +++++++++++++++++ R/pkg/R/RDD.R | 17 +++++++++++++++++ R/pkg/R/SQLContext.R | 17 +++++++++++++++++ R/pkg/R/SQLTypes.R | 17 +++++++++++++++++ R/pkg/R/broadcast.R | 17 +++++++++++++++++ R/pkg/R/column.R | 17 +++++++++++++++++ R/pkg/R/context.R | 17 +++++++++++++++++ R/pkg/R/deserialize.R | 17 +++++++++++++++++ R/pkg/R/generics.R | 17 +++++++++++++++++ R/pkg/R/group.R | 17 +++++++++++++++++ R/pkg/R/jobj.R | 17 +++++++++++++++++ R/pkg/R/pairRDD.R | 17 +++++++++++++++++ R/pkg/R/serialize.R | 17 +++++++++++++++++ R/pkg/R/sparkR.R | 17 +++++++++++++++++ R/pkg/R/sparkRBackend.R | 19 ++++++++++++++++++- R/pkg/R/sparkRClient.R | 17 +++++++++++++++++ R/pkg/R/utils.R | 17 +++++++++++++++++ R/pkg/R/zzz.R | 17 +++++++++++++++++ R/pkg/inst/sparkR-submit | 20 +++++++++++++++++++- R/pkg/inst/tests/test_binaryFile.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_binary_function.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_broadcast.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_context.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_includePackage.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_parallelize_collect.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_rdd.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_shuffle.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_sparkSQL.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_take.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_textFile.R | 17 +++++++++++++++++ R/pkg/inst/tests/test_utils.R | 17 +++++++++++++++++ R/pkg/inst/worker/daemon.R | 17 +++++++++++++++++ R/pkg/inst/worker/worker.R | 17 +++++++++++++++++ R/pkg/src/Makefile | 16 ++++++++++++++++ R/pkg/src/string_hash_code.c | 17 +++++++++++++++++ R/pkg/tests/run-all.R | 17 +++++++++++++++++ 36 files changed, 614 insertions(+), 2 deletions(-) diff --git a/R/pkg/R/DataFrame.R b/R/pkg/R/DataFrame.R index fea476866566c..b29aedcda194f 100644 --- a/R/pkg/R/DataFrame.R +++ b/R/pkg/R/DataFrame.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # DataFrame.R - DataFrame class and methods implemented in S4 OO classes #' @include jobj.R SQLTypes.R RDD.R pairRDD.R column.R group.R diff --git a/R/pkg/R/RDD.R b/R/pkg/R/RDD.R index d188d5d29ca60..32b42b10fdc0d 100644 --- a/R/pkg/R/RDD.R +++ b/R/pkg/R/RDD.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # RDD in R implemented in S4 OO system. setOldClass("jobj") diff --git a/R/pkg/R/SQLContext.R b/R/pkg/R/SQLContext.R index 216a94b8bb300..97ca7e58e15ca 100644 --- a/R/pkg/R/SQLContext.R +++ b/R/pkg/R/SQLContext.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # SQLcontext.R: SQLContext-driven functions #' infer the SQL type diff --git a/R/pkg/R/SQLTypes.R b/R/pkg/R/SQLTypes.R index a51da78a7831e..962fba5b3cf03 100644 --- a/R/pkg/R/SQLTypes.R +++ b/R/pkg/R/SQLTypes.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Utility functions for handling SparkSQL DataTypes. # Handler for StructType diff --git a/R/pkg/R/broadcast.R b/R/pkg/R/broadcast.R index a604c2c65dd37..583fa2e7fdcfd 100644 --- a/R/pkg/R/broadcast.R +++ b/R/pkg/R/broadcast.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # S4 class representing Broadcast variables # Hidden environment that holds values for broadcast variables diff --git a/R/pkg/R/column.R b/R/pkg/R/column.R index baeaac8eb25a3..406bf70a3af80 100644 --- a/R/pkg/R/column.R +++ b/R/pkg/R/column.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + #' Column Class #' @include generics.R jobj.R diff --git a/R/pkg/R/context.R b/R/pkg/R/context.R index 2a86306eba940..2fc0bb294bcce 100644 --- a/R/pkg/R/context.R +++ b/R/pkg/R/context.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # context.R: SparkContext driven functions getMinSplits <- function(sc, minSplits) { diff --git a/R/pkg/R/deserialize.R b/R/pkg/R/deserialize.R index 2500c072bdb50..e1e29ea71bf72 100644 --- a/R/pkg/R/deserialize.R +++ b/R/pkg/R/deserialize.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Utility functions to deserialize objects from Java. # Type mapping from Java to R diff --git a/R/pkg/R/generics.R b/R/pkg/R/generics.R index fd8c214b1342b..e0eb44fdafc09 100644 --- a/R/pkg/R/generics.R +++ b/R/pkg/R/generics.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############ RDD Actions and Transformations ############ # The jrdd accessor function. diff --git a/R/pkg/R/group.R b/R/pkg/R/group.R index cb922cd5f1243..718758aea8f7e 100644 --- a/R/pkg/R/group.R +++ b/R/pkg/R/group.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # group.R - GroupedData class and methods implemented in S4 OO classes setOldClass("jobj") diff --git a/R/pkg/R/jobj.R b/R/pkg/R/jobj.R index 8612a790c2799..f01dd8e187914 100644 --- a/R/pkg/R/jobj.R +++ b/R/pkg/R/jobj.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # References to objects that exist on the JVM backend # are maintained using the jobj. diff --git a/R/pkg/R/pairRDD.R b/R/pkg/R/pairRDD.R index a9f26649e0a15..7929a29c00e1d 100644 --- a/R/pkg/R/pairRDD.R +++ b/R/pkg/R/pairRDD.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Operations supported on RDDs contains pairs (i.e key, value) ############ Actions and Transformations ############ diff --git a/R/pkg/R/serialize.R b/R/pkg/R/serialize.R index 4720669409ab1..08e1215e1bfbe 100644 --- a/R/pkg/R/serialize.R +++ b/R/pkg/R/serialize.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Utility functions to serialize R objects so they can be read in Java. # Type mapping from R to Java diff --git a/R/pkg/R/sparkR.R b/R/pkg/R/sparkR.R index 50c0d7e9f5295..cbfe9c31580d9 100644 --- a/R/pkg/R/sparkR.R +++ b/R/pkg/R/sparkR.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + .sparkREnv <- new.env() #TODO(davies): change to spark-submit diff --git a/R/pkg/R/sparkRBackend.R b/R/pkg/R/sparkRBackend.R index 0754b5002f2d3..2fb6fae55f28c 100644 --- a/R/pkg/R/sparkRBackend.R +++ b/R/pkg/R/sparkRBackend.R @@ -1,4 +1,21 @@ -# Methods to call into SparkRBackend. +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Methods to call into SparkRBackend. # Returns TRUE if object is an instance of given class diff --git a/R/pkg/R/sparkRClient.R b/R/pkg/R/sparkRClient.R index 1a747031586d2..1fde20e86e9e9 100644 --- a/R/pkg/R/sparkRClient.R +++ b/R/pkg/R/sparkRClient.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Client code to connect to SparkRBackend # Creates a SparkR client connection object diff --git a/R/pkg/R/utils.R b/R/pkg/R/utils.R index 8ec8845dc8793..7dafb33704b52 100644 --- a/R/pkg/R/utils.R +++ b/R/pkg/R/utils.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Utilities and Helpers # Given a JList, returns an R list containing the same elements, the number diff --git a/R/pkg/R/zzz.R b/R/pkg/R/zzz.R index 1f0c7da2dff54..834f496b99e9d 100644 --- a/R/pkg/R/zzz.R +++ b/R/pkg/R/zzz.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + .onAttach <- function(libname, pkgname) { sparkR.onLoad(libname, pkgname) } diff --git a/R/pkg/inst/sparkR-submit b/R/pkg/inst/sparkR-submit index 68b7698d630d5..01a69baae6ed6 100755 --- a/R/pkg/inst/sparkR-submit +++ b/R/pkg/inst/sparkR-submit @@ -1,4 +1,22 @@ #!/bin/bash + +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # This script launches SparkR through spark-submit. This accepts # the same set of options as spark-submit and requires SPARK_HOME # to be set. @@ -7,7 +25,7 @@ FWDIR="$(cd `dirname $0`; pwd)" export PROJECT_HOME="$FWDIR" -export SPARKR_JAR_FILE="$FWDIR/sparkr-assembly-0.1.jar" +export SPARKR_JAR_FILE="$FWDIR/../../../../assembly/target/scala-2.10/spark-assembly-1.3.0-SNAPSHOT-hadoop1.0.4.jar" # Exit if the user hasn't set SPARK_HOME if [ ! -f "$SPARK_HOME/bin/spark-submit" ]; then diff --git a/R/pkg/inst/tests/test_binaryFile.R b/R/pkg/inst/tests/test_binaryFile.R index 71395f5a533d2..4bb5f58d83dc9 100644 --- a/R/pkg/inst/tests/test_binaryFile.R +++ b/R/pkg/inst/tests/test_binaryFile.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("functions on binary files") # JavaSparkContext handle diff --git a/R/pkg/inst/tests/test_binary_function.R b/R/pkg/inst/tests/test_binary_function.R index 76a62940543da..47292a4557b15 100644 --- a/R/pkg/inst/tests/test_binary_function.R +++ b/R/pkg/inst/tests/test_binary_function.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("binary functions") # JavaSparkContext handle diff --git a/R/pkg/inst/tests/test_broadcast.R b/R/pkg/inst/tests/test_broadcast.R index f903f7e59664e..fee91a427d6d5 100644 --- a/R/pkg/inst/tests/test_broadcast.R +++ b/R/pkg/inst/tests/test_broadcast.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("broadcast variables") # JavaSparkContext handle diff --git a/R/pkg/inst/tests/test_context.R b/R/pkg/inst/tests/test_context.R index fe120d8c681db..e4aab37436a74 100644 --- a/R/pkg/inst/tests/test_context.R +++ b/R/pkg/inst/tests/test_context.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("test functions in sparkR.R") test_that("repeatedly starting and stopping SparkR", { diff --git a/R/pkg/inst/tests/test_includePackage.R b/R/pkg/inst/tests/test_includePackage.R index b09c0971d49c9..8152b448d0870 100644 --- a/R/pkg/inst/tests/test_includePackage.R +++ b/R/pkg/inst/tests/test_includePackage.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("include R packages") # JavaSparkContext handle diff --git a/R/pkg/inst/tests/test_parallelize_collect.R b/R/pkg/inst/tests/test_parallelize_collect.R index 611eb7e13a0d2..fff028657db37 100644 --- a/R/pkg/inst/tests/test_parallelize_collect.R +++ b/R/pkg/inst/tests/test_parallelize_collect.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("parallelize() and collect()") # Mock data diff --git a/R/pkg/inst/tests/test_rdd.R b/R/pkg/inst/tests/test_rdd.R index 5fa2f171ca436..7a9eaf5f091e0 100644 --- a/R/pkg/inst/tests/test_rdd.R +++ b/R/pkg/inst/tests/test_rdd.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("basic RDD functions") # JavaSparkContext handle diff --git a/R/pkg/inst/tests/test_shuffle.R b/R/pkg/inst/tests/test_shuffle.R index 8df9b439a08cd..d1da8232aea81 100644 --- a/R/pkg/inst/tests/test_shuffle.R +++ b/R/pkg/inst/tests/test_shuffle.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("partitionBy, groupByKey, reduceByKey etc.") # JavaSparkContext handle diff --git a/R/pkg/inst/tests/test_sparkSQL.R b/R/pkg/inst/tests/test_sparkSQL.R index 66e9869989884..dd58bd100089b 100644 --- a/R/pkg/inst/tests/test_sparkSQL.R +++ b/R/pkg/inst/tests/test_sparkSQL.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + library(testthat) context("SparkSQL functions") diff --git a/R/pkg/inst/tests/test_take.R b/R/pkg/inst/tests/test_take.R index 3dbe3275e6d49..7f4c7c315d787 100644 --- a/R/pkg/inst/tests/test_take.R +++ b/R/pkg/inst/tests/test_take.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("tests RDD function take()") # Mock data diff --git a/R/pkg/inst/tests/test_textFile.R b/R/pkg/inst/tests/test_textFile.R index d0c78621f4432..7bb3e8003131d 100644 --- a/R/pkg/inst/tests/test_textFile.R +++ b/R/pkg/inst/tests/test_textFile.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("the textFile() function") # JavaSparkContext handle diff --git a/R/pkg/inst/tests/test_utils.R b/R/pkg/inst/tests/test_utils.R index e9582db9d98dc..9c5bb427932b4 100644 --- a/R/pkg/inst/tests/test_utils.R +++ b/R/pkg/inst/tests/test_utils.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + context("functions in utils.R") # JavaSparkContext handle diff --git a/R/pkg/inst/worker/daemon.R b/R/pkg/inst/worker/daemon.R index d25c1ea2af9ad..3584b418a71a9 100644 --- a/R/pkg/inst/worker/daemon.R +++ b/R/pkg/inst/worker/daemon.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Worker daemon rLibDir <- Sys.getenv("SPARKR_RLIBDIR") diff --git a/R/pkg/inst/worker/worker.R b/R/pkg/inst/worker/worker.R index 1c01fdf72833e..1a8f342c7796d 100644 --- a/R/pkg/inst/worker/worker.R +++ b/R/pkg/inst/worker/worker.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Worker class rLibDir <- Sys.getenv("SPARKR_RLIBDIR") diff --git a/R/pkg/src/Makefile b/R/pkg/src/Makefile index dc795e2d1d74e..a55a56fe80e10 100644 --- a/R/pkg/src/Makefile +++ b/R/pkg/src/Makefile @@ -1,3 +1,19 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# all: sharelib diff --git a/R/pkg/src/string_hash_code.c b/R/pkg/src/string_hash_code.c index 831c863fcd276..e3274b9a0c547 100644 --- a/R/pkg/src/string_hash_code.c +++ b/R/pkg/src/string_hash_code.c @@ -1,3 +1,20 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + /* * A C function for R extension which implements the Java String hash algorithm. * Refer to http://en.wikipedia.org/wiki/Java_hashCode%28%29#The_java.lang.String_hash_function diff --git a/R/pkg/tests/run-all.R b/R/pkg/tests/run-all.R index 0a4773ae5e21b..4f8a1ed2d83ef 100644 --- a/R/pkg/tests/run-all.R +++ b/R/pkg/tests/run-all.R @@ -1,3 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + library(testthat) library(SparkR) From 35e5755e0afe8c5a5f33b1693fa604726d9f3ac7 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 12:00:08 -0700 Subject: [PATCH 639/687] reduce size of example data --- examples/src/main/r/dfc/README.txt | 2 +- examples/src/main/r/dfc/example.mat | 99002 +------------------------- 2 files changed, 2 insertions(+), 99002 deletions(-) diff --git a/examples/src/main/r/dfc/README.txt b/examples/src/main/r/dfc/README.txt index fd1f2596943a8..d81c4812771b7 100644 --- a/examples/src/main/r/dfc/README.txt +++ b/examples/src/main/r/dfc/README.txt @@ -10,7 +10,7 @@ Type the following into the command line: Should be in matrix market format. We have included a sample matrix file, called "example.mat", which is a - 1000x1000 entry noisy gaussain matrix with 10% revealed. + 100x100 entry noisy gaussain matrix with 10% revealed. is the number of iterations diff --git a/examples/src/main/r/dfc/example.mat b/examples/src/main/r/dfc/example.mat index b63831ec63ce0..cd0829b849cfc 100644 --- a/examples/src/main/r/dfc/example.mat +++ b/examples/src/main/r/dfc/example.mat @@ -1,105 +1,17 @@ %%MatrixMarket matrix coordinate real general -1000 1000 99999 +100 100 999 3 1 -.9650753891727823 13 1 .027442759272197498 17 1 .2733140617433729 18 1 -.7340556416756879 27 1 .15588124326702052 33 1 .5152452067181288 -40 1 -1.104664661081575 46 1 .7782024486888124 47 1 -.046467679395642655 52 1 2.5849127359270425 70 1 -.6645107891628912 94 1 -1.4008796914290222 95 1 .029205396733255146 -102 1 -2.97925560316333 -132 1 .09096597510077215 -141 1 .5611907077251951 -164 1 1.2301828508839157 -165 1 -.7718548277230168 -172 1 1.1325389211648973 -190 1 .964712862034632 -208 1 .5258534922344492 -214 1 .44272245421830514 -235 1 -.7058018868632674 -247 1 -.2019326538529025 -248 1 .6368410900021068 -255 1 -.056975676546590366 -262 1 1.7014249179864418 -272 1 .4139325951445858 -286 1 .657949417711765 -293 1 -.5494809791858845 -299 1 1.3538794200738142 -304 1 .50405598078307 -310 1 .46402457292281685 -321 1 .180921217728562 -322 1 1.43800281861266 -342 1 -.6992451016563496 -345 1 -.01935948885811964 -365 1 -.14379846038044292 -376 1 .9995985960725632 -378 1 .2493648091411485 -387 1 .3406406221144367 -391 1 -.1572044716462238 -396 1 -1.5445456047793666 -402 1 .44547062019127937 -415 1 .4568397165496011 -416 1 -.813461244107129 -448 1 -.6676299970732854 -468 1 -1.201383199459984 -475 1 1.126850640989943 -480 1 -.421632915233148 -493 1 .49666570172734736 -527 1 1.1258958572128965 -579 1 -.023838345636757553 -582 1 -1.1142713880873334 -591 1 -.01925506016329831 -592 1 -2.40752127150329 -609 1 -.36528709833876144 -624 1 -.8784160754077898 -661 1 .7324465782683363 -682 1 .12494819034040433 -683 1 -.059648875505251 -689 1 -1.8763212488247842 -702 1 -.4443067935824285 -710 1 -1.327791919870426 -715 1 .5489334199856281 -723 1 -.6064644619647935 -735 1 .9097952146231988 -738 1 1.0155824583208324 -750 1 .8143181466683873 -752 1 -1.153851950478546 -770 1 -.6787014764379927 -780 1 -1.495236340141261 -792 1 -1.1001158087329233 -803 1 .7408998977999657 -809 1 -.715050344565861 -811 1 -.14496386816706996 -813 1 -.7009046904486069 -814 1 -2.235023846291991 -827 1 -.365109066174373 -852 1 -.4445482462626273 -856 1 1.0967777124015285 -873 1 -1.7623518303716834 -896 1 -.60242906841624 -904 1 .11783812695668017 -913 1 -.4887617596938987 -916 1 -.06621088910389554 -922 1 -.01179121827236454 -933 1 -1.1644229671976978 -936 1 -2.0428332422053668 -953 1 -.6474239052914893 -958 1 1.1325620605154114 -963 1 -1.6957347328240697 -966 1 -.8016902602650933 -976 1 1.741958207586582 -977 1 -.4733003198454624 -980 1 .17083949000545787 -982 1 1.5775795282701197 -988 1 2.383067994368054 -993 1 -.6759145988623183 -999 1 .7245098229597732 6 2 1.0917691197736878 9 2 1.2829334312850245 11 2 -.6771057020935008 @@ -111,100 +23,6 @@ 60 2 1.3965055432991407 62 2 -.15018293135481828 96 2 1.269315340807692 -105 2 -.885462919270759 -106 2 -.9404862881941443 -108 2 2.0648800618544456 -121 2 2.0023600911210315 -141 2 1.5978340407478209 -145 2 .5917982706934073 -147 2 -.5984510101836817 -167 2 1.26691354462169 -173 2 -1.1119788872444534 -185 2 .0725536070970415 -236 2 .5842166690630857 -249 2 1.0235673548897468 -255 2 .784192025705218 -269 2 -.5122873970730435 -270 2 -.5268793325016254 -273 2 1.5038834334242237 -284 2 -.011742637948503911 -285 2 1.557674434526471 -286 2 -.8868129682008409 -306 2 -1.4074918232924143 -311 2 -1.6424981473003701 -314 2 -1.294683791740073 -315 2 -.1318414079480327 -316 2 1.7561936625756454 -322 2 1.8102490444156978 -324 2 .8487600583960693 -329 2 -.666213221158499 -346 2 -.45881526699267666 -349 2 -1.7997497295359077 -353 2 .1948772997601262 -354 2 -.7937230247523609 -359 2 1.455689280494431 -361 2 -.1704918104995222 -362 2 -.5452503415598324 -369 2 1.1124102946442656 -390 2 -.9218323577503318 -393 2 .9362714028001683 -407 2 -.08590536633696103 -408 2 .6207077386941914 -419 2 1.3293088852219967 -430 2 1.0297984372539806 -440 2 -1.6295303555369745 -443 2 .05780459110631231 -450 2 -2.040037214802594 -459 2 -.2896144994955623 -484 2 1.4468063034039107 -487 2 -2.3006457058348486 -489 2 -.9447227239391234 -497 2 .4472106772013792 -515 2 .8813317746729444 -520 2 .12356722804771658 -522 2 .19668568103099804 -526 2 .6640663690483496 -562 2 -1.907663186640122 -563 2 .3462984583455576 -576 2 -.0707882571038762 -580 2 -.03141785311565789 -607 2 .9235875797247977 -613 2 1.3566534854495909 -633 2 -.27542955908552696 -638 2 -.6874974797699414 -648 2 .6811740648587197 -649 2 .7390751086425169 -652 2 .6866487893118679 -653 2 -1.2620752945066276 -654 2 -.42817771694966195 -672 2 .0780223523929203 -692 2 -1.459792392113333 -719 2 -.4503728066286463 -750 2 -.8918841444708168 -753 2 -.9833831719366004 -763 2 .9334423020009908 -779 2 .8960651545075122 -780 2 .555660398669094 -783 2 -1.0286352824498872 -796 2 -.5793497311459301 -807 2 -.8284912382143725 -810 2 2.643159193966524 -815 2 1.862360179862158 -848 2 -.6619951015349742 -855 2 -.3171491846975431 -858 2 -.7124774478583235 -880 2 -1.3886490037368495 -881 2 .30862916274171337 -900 2 1.1733136735750958 -901 2 .8813522480561969 -907 2 -1.786017714053841 -908 2 1.894130599859394 -916 2 .29088960163103417 -939 2 -.20075600312107644 -950 2 .46988825972452236 -962 2 1.6267268680884215 -972 2 .5486221221331551 -984 2 .7710068810263183 11 3 -1.0719098236708575 15 3 .17479499000508555 31 3 .25752051387941277 @@ -213,107 +31,6 @@ 62 3 .5308770016366252 81 3 -.6006198758028332 94 3 1.5664515498542577 -107 3 -1.2124352756741923 -119 3 -1.8617154126264257 -136 3 -.277495217316616 -139 3 -.590587515497705 -153 3 .01070459661515901 -162 3 -.29859326718367646 -164 3 .9698857859199288 -171 3 1.1356268358108834 -183 3 -.47425694969363286 -186 3 -1.1029160907922693 -200 3 1.120716814432935 -203 3 .12419632280625466 -212 3 -.840176885400341 -215 3 -.006030405681676683 -219 3 1.018984186512253 -233 3 .5950242919348767 -242 3 -1.5000751945827635 -254 3 -.18916207887525494 -273 3 .27109749169221997 -276 3 -.17232563936972786 -286 3 .05292788785904094 -288 3 -.5068049229421359 -295 3 .7389997072351288 -312 3 -.6450938517935587 -325 3 -1.2547807032221012 -327 3 -.29953326154954524 -328 3 -.27248802341424805 -336 3 -.2598269353105859 -372 3 .4175300064289378 -373 3 -.02011168195394017 -386 3 -.8081570525198618 -390 3 -.6213176304687703 -397 3 .2718983800315414 -410 3 .33415797006868553 -414 3 .1618508292100309 -425 3 .291143620098459 -447 3 -.7232783297903655 -461 3 -.8882473816376558 -467 3 .19531564483150166 -478 3 -.4459666886220118 -482 3 1.3066753678519147 -490 3 .5688855182612373 -494 3 .5326829920823608 -502 3 .13254540943910237 -503 3 .1764943498386518 -537 3 .48197087814715667 -541 3 -.7803424440726658 -574 3 .3114317457336066 -592 3 1.298061899174722 -607 3 .19700205073130692 -609 3 -.3769338574912668 -621 3 -1.3811387146544178 -631 3 -.06861401739033088 -635 3 .4229385543157648 -644 3 .6250458081396149 -669 3 -.22268587870795703 -671 3 -.002367171947852381 -676 3 1.2233576996926996 -687 3 -.24466769081814876 -691 3 -.8791447031727959 -693 3 .12912359960174408 -694 3 1.0873886060324005 -704 3 -.1445012480322525 -705 3 1.3955022814099274 -724 3 .7051651636942317 -725 3 -.21129222819810384 -731 3 -.3632631335444913 -740 3 2.472100932918257 -742 3 -2.078705415567248 -754 3 -.5924030193252098 -756 3 -.3986646682758746 -777 3 .10046703520440244 -778 3 -.4430127991216396 -780 3 -.029515126218947203 -782 3 .41559984696158814 -787 3 -.05137623303346017 -789 3 1.0375067436946757 -792 3 .4926773282490402 -797 3 -.1017995447685906 -803 3 -.321488650902338 -813 3 -.041210074867503665 -825 3 -1.3981120110780754 -834 3 .35411182701582705 -854 3 -.3752823938789575 -858 3 -.3404502416428724 -860 3 -.5758194466642699 -861 3 -.471177338423169 -865 3 .3991895721715806 -879 3 -1.6593918452418612 -880 3 -.7260203711998985 -884 3 .2410796282683902 -892 3 -.41431503801728264 -916 3 .4323536895336385 -923 3 1.414990963573125 -934 3 1.7920713159560127 -941 3 .7415067307945218 -965 3 -1.4492886892936698 -974 3 -1.0619454315021 -982 3 -.5640879445901351 -994 3 -1.4232696747986828 -998 3 -.21157853129371051 9 4 -2.222347545100131 33 4 -.07275217848108888 35 4 .16164355855860033 @@ -324,103 +41,6 @@ 65 4 1.18834324100774 78 4 -.3724319385918872 91 4 -.813073368541914 -101 4 1.4733744359042487 -104 4 .5511079043349141 -117 4 .6255500286226522 -125 4 1.6943406737228037 -126 4 -.1546873650242401 -140 4 .4770074004483893 -150 4 -1.0849807714798865 -152 4 -2.171207524232599 -162 4 .07729687799982558 -170 4 .19609358612775235 -171 4 -.581170896036264 -183 4 .5545734738119402 -184 4 .350568163181114 -187 4 .6259755666133885 -206 4 -.8877598024902578 -212 4 .5364668309607297 -216 4 -.0688439768168739 -227 4 -.35686608776896955 -238 4 -.4085545021208913 -246 4 -1.0525561797877854 -250 4 -1.1795287053669632 -251 4 .17599914256073176 -265 4 -.8910689427976664 -269 4 .1440075726080295 -280 4 1.1136048769586886 -281 4 -.6808047390159039 -282 4 -1.1896571625802816 -284 4 .7485757433256831 -291 4 .7350896806387052 -300 4 .4968572251237235 -314 4 -.10458818648203247 -331 4 .5083929601887763 -336 4 -1.844182199639845 -340 4 -.13459690007043454 -342 4 -.09314898664116437 -343 4 .21788854603505478 -358 4 -1.5926690990251786 -374 4 -.2690957962200258 -381 4 -1.2213703438107404 -393 4 -.658783785530266 -398 4 -.044030825492910604 -409 4 .08789660651403755 -421 4 .3340320020993794 -424 4 .15624993181581148 -462 4 -.03619565505981159 -477 4 .47206166852888454 -497 4 -.12125497898059145 -501 4 -1.3941467881082277 -511 4 -.27882471384776397 -520 4 .2909581696037223 -527 4 -1.075801834389201 -547 4 .8840169595730147 -553 4 -.002782142674669766 -560 4 -.21701972388675045 -565 4 -1.51788258528423 -588 4 .13374130877891488 -603 4 -.43625285622609505 -619 4 1.3260211750961468 -621 4 .03151574610979964 -625 4 1.100874504501118 -628 4 .38195342376963687 -634 4 -2.0665029325531066 -637 4 .30743834765401795 -640 4 -.26142685991286196 -645 4 .8686047393712115 -646 4 -.30372385239098826 -650 4 .34244776767332896 -657 4 -.4176003432581453 -668 4 -.33349942267974814 -719 4 .08543448588896291 -723 4 .5721283976795776 -740 4 .8686944960539423 -749 4 -.3032869290848199 -754 4 .2244753738230868 -781 4 .5406833595793787 -785 4 -1.1580215336812028 -786 4 -.5853815788094215 -804 4 -1.028925815579889 -806 4 .049198106477594525 -821 4 -.3291405572662923 -822 4 .9247254936645776 -825 4 .046796588117139076 -829 4 -1.14471094522726 -848 4 -.3511737251407629 -891 4 .29732027838420505 -903 4 .27908128944579 -913 4 1.6942650494152691 -914 4 .8079719818497563 -917 4 .08287552975980729 -919 4 .5973934724404315 -934 4 .9668442882525479 -939 4 .7039650123234902 -942 4 -.959187442506319 -967 4 .39596022591143204 -971 4 -.13552505367551382 -975 4 -.7502181428282978 -981 4 .004874400155456787 3 5 .5802952119439417 26 5 .7508738659433 34 5 .1983679895836788 @@ -430,105 +50,6 @@ 76 5 1.4606359276072767 88 5 .3633759721002092 99 5 .44185470031741747 -125 5 .1004914827587567 -137 5 .2594850734096633 -139 5 -1.213199919941382 -142 5 .7373639850481141 -150 5 .47538916832121897 -153 5 .39516407635942813 -166 5 .6372217401379099 -187 5 .10887109087571821 -193 5 1.145193890997891 -197 5 .8880942414708836 -203 5 -.9270302240985216 -204 5 -1.0993470998733308 -205 5 -.4095108757983451 -217 5 1.2480060091319145 -224 5 .2459287076893641 -235 5 .969531724412078 -239 5 .23811591947126484 -251 5 -.2767348484936707 -252 5 .3273193057769377 -260 5 -.46659955903310807 -261 5 .9548103284269265 -274 5 -.6037053809920341 -279 5 .31020455087274384 -281 5 .9718507791105235 -283 5 .16067707042971888 -286 5 1.4384575733973854 -287 5 -.05203107961320724 -292 5 -.20359046973900735 -298 5 -.21065688747128508 -314 5 .3000248807018693 -332 5 .8043355885047129 -348 5 -1.0832741519174847 -361 5 .11705688086874869 -363 5 -.09385414714152587 -368 5 -.528247473138306 -376 5 -.6567756885439715 -388 5 .13088710532407752 -400 5 -.17988697823023375 -412 5 -.07437519342620992 -416 5 -.4981871150392305 -437 5 .2431025402489136 -446 5 -1.0705396021246618 -448 5 .3370675434587495 -455 5 1.1908930686106782 -458 5 -.4461291698563858 -467 5 .9335547921093934 -469 5 -.6442731790857967 -488 5 .05067534162605902 -493 5 .7545955318890859 -496 5 .024546442233662643 -501 5 1.0241827499550196 -507 5 .4407940491432488 -516 5 -1.3000881555361818 -551 5 2.1343517862980774 -554 5 -.982881210988599 -564 5 .2937050581302254 -596 5 .9318719619156648 -609 5 -.819608874701478 -610 5 -.35067517996410574 -629 5 .3160383858203975 -635 5 -.3557253566530662 -650 5 .38905646750347517 -664 5 .122522411231572 -668 5 -.3224383135923646 -669 5 1.2418579977192366 -671 5 .48550780986146336 -693 5 -.27994142224725843 -694 5 .15276380079379848 -702 5 .2276177224750644 -704 5 -.746880304037474 -711 5 .3334230537521854 -721 5 -1.4543713877093953 -723 5 .6354751791406257 -725 5 .9021213864954278 -733 5 1.6209903058849435 -777 5 -.5547702730984286 -778 5 .42635726830430853 -805 5 -.8724654338069636 -807 5 -1.3766847989938509 -813 5 .2711058132382507 -815 5 .22839326328591228 -816 5 -.07160040553382399 -824 5 -.7172627330452074 -839 5 .002572736059822424 -848 5 -.5072436790233656 -853 5 .47821853247114665 -861 5 -.9812710869159204 -862 5 -.2713154389217948 -869 5 .11155984053483502 -907 5 -.1415922697749808 -909 5 -1.0058478734717318 -914 5 .31650151532894905 -949 5 -1.34348514390133 -952 5 -.11204178659345716 -959 5 .9222316669844491 -967 5 .8117443561642483 -984 5 -.24057810389930231 -994 5 .28772055387015505 -996 5 -.6205647383351257 27 6 -.7036214465154359 28 6 .11899233413999968 31 6 -1.0297826767976141 @@ -539,96 +60,6 @@ 73 6 .697420086059468 77 6 .28219078057589714 100 6 -.5247532019579773 -108 6 -.2634496024379327 -113 6 .09143142189624569 -127 6 -.27694904980332785 -129 6 2.514500823831737 -139 6 .6711981028539944 -166 6 1.5210885156595857 -181 6 .7245697660206727 -197 6 -.3176424023909451 -198 6 .5641722608943115 -206 6 -1.0971389966529959 -212 6 -.03539260030154674 -214 6 -.6586382133210208 -249 6 .3522890122865078 -250 6 -.7237038637451689 -278 6 -.7477083373644041 -287 6 1.1398295461879757 -292 6 1.4529858556139692 -313 6 .8242693245866599 -328 6 -.13721212575111957 -346 6 1.0108260812525733 -352 6 1.2849872902393378 -363 6 -.16246947018296387 -365 6 .3975451759792117 -377 6 -.0021319596847892003 -385 6 -1.8050564974104075 -392 6 .9179925944039145 -398 6 -.599328932331017 -400 6 -.26885856344393316 -404 6 .6644253851377153 -419 6 1.278529884946125 -420 6 1.6344737587059646 -434 6 .2156418183591658 -436 6 .9192398718862086 -456 6 -.7170518437388533 -459 6 .6460902375123951 -469 6 .46264941750424315 -486 6 -.6417296893204033 -487 6 .02160341545537533 -490 6 .6844650801975654 -501 6 -1.2862360974016591 -516 6 -1.0090402568786818 -517 6 -.36417318432587903 -518 6 .2554390498723493 -542 6 -.0832794782214838 -554 6 .2954931228142225 -556 6 -.594109088266457 -567 6 -.2776602473531113 -576 6 -.17061763676071118 -577 6 -1.2649161633191566 -578 6 .40157696778684904 -595 6 .5683136051311299 -598 6 -.007514166571379974 -609 6 -1.216929875196106 -615 6 .39745438123286597 -623 6 .37942528761300975 -637 6 -.33277756776525097 -647 6 .586030786974455 -650 6 -.08059074848045336 -660 6 -.9293736841931224 -662 6 -.19841532595663589 -665 6 1.0569038821989278 -669 6 -.37938335199017315 -675 6 -1.8586601532628872 -693 6 .5053288869155868 -696 6 1.5884231809283411 -701 6 .7688692516312824 -716 6 -1.1608682054002921 -717 6 .885551592930113 -721 6 .22748967433190476 -737 6 -.05449931504441148 -740 6 .5361955251122865 -758 6 1.136730501085291 -771 6 .9814454033327982 -782 6 -.2555945631276051 -807 6 .3599567232376236 -822 6 .4882847341038878 -826 6 -.01493733446809404 -833 6 -.12439376062258556 -847 6 .6629515053248782 -853 6 .05071433369628001 -874 6 -.7389798360862941 -879 6 -.8636876067738899 -889 6 .12442224575324404 -901 6 -1.9797158139116569 -903 6 -1.123295986579759 -923 6 .9165408966223989 -970 6 .6261717114612476 -971 6 .6211548223176424 -975 6 .30016110831896503 -990 6 -1.6599662994352953 5 7 1.6716266984909676 13 7 .7674743791931149 24 7 .9171772694010467 @@ -638,104 +69,6 @@ 59 7 3.0794586412797273 68 7 -.8809456780247451 91 7 -1.6802601373883534 -105 7 1.2013927947713758 -124 7 -.8393396838263799 -144 7 .2063006163035504 -147 7 1.7550306237751854 -148 7 -.5651608840101646 -154 7 .0954523157427686 -169 7 .10859378405755514 -185 7 .008270165473689861 -195 7 .2603310257090184 -199 7 .8129779904743242 -213 7 .22232748682429793 -232 7 -.4032877651319446 -233 7 -.46860483324631913 -251 7 2.3241586366673763 -282 7 -.8601868341756591 -293 7 .5059583436049018 -297 7 1.34835306727892 -309 7 -.09249733004864388 -325 7 .014300928904782323 -328 7 -.29582197633301144 -341 7 -.7801474793966572 -350 7 -.9442020194919829 -362 7 .34027367879328185 -392 7 2.2906793563983823 -396 7 -.35822863101242286 -401 7 -1.6322817100739155 -403 7 .2184368345691909 -418 7 -1.0553265060319204 -421 7 -.5576288825050293 -476 7 .4826540411950274 -494 7 -.47987883794123515 -499 7 -1.9574794589623354 -501 7 -1.2865331725415616 -503 7 1.1062001258118885 -517 7 -.6860372241264906 -541 7 -1.8089774846762086 -542 7 -1.032552023474924 -554 7 -.9285571545193236 -557 7 -2.4254120694312147 -559 7 2.3497361102563707 -561 7 .33994499494552927 -572 7 .5055918308943488 -576 7 -.08643314797418192 -577 7 .3850940392168122 -581 7 -1.771819720481633 -582 7 .7907295941737529 -584 7 .176409827672402 -585 7 -1.3118600491824857 -591 7 .46399305584365463 -600 7 .4362395135436965 -602 7 -.39420004602267106 -603 7 -1.4176301951318417 -613 7 -2.1175214227891517 -614 7 -.876451364815877 -615 7 .29090240599809314 -616 7 -.13914592186856622 -624 7 -1.587079028224713 -630 7 1.1162504652737553 -653 7 2.2057634344584085 -659 7 -1.323856190756775 -679 7 -2.6180249878609017 -681 7 -.7102988299095546 -685 7 1.204101493443434 -699 7 1.37596252613054 -706 7 .031829384424093526 -716 7 -1.0347845342903534 -723 7 1.239211401031736 -725 7 -1.6977701961151994 -732 7 -.5109912503085754 -737 7 .9874417624971434 -745 7 -.8439188077673636 -746 7 -.0934938163607193 -747 7 .9429387612566557 -764 7 .7221377679754619 -770 7 -1.244296071405503 -780 7 -.8076147216052209 -786 7 .8617245514135796 -787 7 -.48288908893770943 -796 7 1.2587766255847193 -804 7 -.8762359830699793 -812 7 -1.6669081958681133 -813 7 -2.9575454941919497 -829 7 -.37306724349935994 -835 7 -.9580595127568532 -841 7 .6301615577432197 -844 7 -2.711453402891621 -848 7 .7927673712308166 -855 7 -.5999558048674807 -864 7 -.3614520610945278 -868 7 -.7641236254701791 -871 7 -.38753576139192447 -879 7 -.009752878933047493 -893 7 1.066341049990335 -915 7 -.005567327271024424 -938 7 -.32463988501317526 -948 7 1.2971549730690661 -974 7 -.7203066836605504 -977 7 .8273258528179853 5 8 -.4572407222034704 11 8 1.6831183520240227 12 8 .17103201256166278 @@ -752,199 +85,12 @@ 93 8 .013375040956371292 98 8 .8000883276001304 100 8 -.23166642865355933 -114 8 -.19113078377021617 -154 8 .20783740792117583 -164 8 -.05652944542907708 -169 8 .09867277726346294 -190 8 -1.021189097072455 -201 8 .2391780169195171 -204 8 -.15283622031586144 -206 8 -.30275554625471496 -223 8 1.211160961290269 -229 8 .2965956097841304 -233 8 -2.0033839719822395 -236 8 .7341594046943516 -272 8 -.5569174283209841 -274 8 -.48643802312143103 -277 8 -.36319994559188273 -279 8 -.7821655427611868 -287 8 -1.0946611086849505 -303 8 -.7749844527315697 -309 8 -.25196947288143046 -310 8 -.28008918106460023 -313 8 -.01865958574084836 -347 8 -.7662344234634381 -353 8 -1.0045185942409858 -356 8 -.9158585686486417 -362 8 .03267331621973375 -369 8 -.5456647615452884 -373 8 .8510160384650419 -376 8 1.1909145137627628 -381 8 -.5563971432436917 -390 8 .945210010522818 -394 8 .6394296511109815 -405 8 -.3416169131529548 -419 8 -.003258646050085412 -438 8 -.5065846031410253 -444 8 -.6302548085213439 -445 8 .23709654930320304 -462 8 -1.426276177583183 -466 8 .2148598595093708 -484 8 1.5467855263905224 -487 8 -.07060807043117068 -497 8 .19119056435443327 -525 8 -.28328068136409734 -532 8 .17611070522750577 -539 8 -.5493353140155246 -548 8 -.09688026407502648 -567 8 .8882803511325812 -571 8 -.19302223193905935 -577 8 -.03245638106475488 -593 8 .8158116009803604 -602 8 -.5810399141693656 -605 8 .7687633980149488 -611 8 .8498238576826558 -622 8 -.7823741953169893 -625 8 -.9920101509717103 -634 8 -1.1582751215631393 -636 8 -.22284390499711493 -639 8 -1.2776402298437461 -641 8 .46360560796386296 -651 8 -.2133817493168086 -666 8 .11309144437387117 -668 8 -1.2743652843118174 -681 8 -1.345447563421137 -694 8 -.2136598084258509 -697 8 -1.0468347763111596 -703 8 -.540893537734283 -706 8 -.8099321360925081 -710 8 .8761614460418179 -713 8 .5082421642938948 -717 8 -1.282988152764682 -735 8 .7714680705062233 -741 8 .44256991679522434 -763 8 .41534923465820067 -777 8 -.6987569045370013 -780 8 .32547797810447077 -782 8 .33884960820871507 -787 8 .3582602556742298 -788 8 .8874712084218321 -790 8 -.4687676352229574 -794 8 -.5811771021171016 -834 8 .08438010118780179 -850 8 1.0443941442312186 -852 8 -.5150821815363789 -874 8 -.21008514726912728 -878 8 -.0814673346505924 -894 8 .6984294384108576 -899 8 .4030015845134836 -902 8 -.8340229717723551 -903 8 .5296911104073428 -908 8 -.6097199356909326 -922 8 -.06298040045715939 -935 8 -.0025886036259072445 -941 8 1.383889054556246 -954 8 -.41747136936125206 -956 8 .4532279380923157 -975 8 -.596735946827287 -981 8 -.5666664318332997 -988 8 -1.0929563866386693 7 9 -.2695987639301383 11 9 .08122949278860982 19 9 -.4254467155741001 57 9 1.1554682773488354 93 9 -.3041621585664956 99 9 .3333309067246158 -102 9 -.8936721486191582 -117 9 .44617653560889553 -123 9 -.6888397919627611 -126 9 -1.591085289721163 -133 9 1.0068763420581437 -142 9 1.0283524712866083 -149 9 1.231894207421209 -160 9 -.6537330781422657 -183 9 -.3199428384602221 -188 9 -.6090250288165687 -192 9 .2086879104689376 -195 9 .08887435673493412 -196 9 -1.233305822347445 -197 9 .17337082804639223 -200 9 -.4708161307854195 -215 9 .28725269759451066 -216 9 1.5915040684589004 -217 9 1.2832539003844465 -221 9 -1.5095032045306753 -243 9 .08837349325309532 -244 9 1.6856133085642417 -252 9 -.2948982964363473 -257 9 .42306465555897 -262 9 -.26509125116563975 -267 9 -1.2744622016237728 -276 9 -.02920685861471954 -283 9 -.11302119290658345 -296 9 .09701902837887129 -335 9 .8468123487414677 -341 9 -.15867315298228152 -349 9 -.5010228749273506 -374 9 -.16694503358702453 -396 9 -.2136777901469825 -397 9 -.8221375893713538 -408 9 1.006307496654604 -409 9 1.7736926028521403 -416 9 .8724292172628567 -422 9 .281046376618367 -425 9 .3984857329051384 -428 9 1.992241696149744 -448 9 -.9266265024393534 -458 9 1.6380805606262079 -464 9 1.665488574476507 -471 9 1.2173481154476025 -476 9 -.450007392074992 -515 9 -1.4753280328694145 -525 9 -.4942537707728072 -548 9 .4093148079398454 -556 9 -.6926846744126562 -578 9 .09551512469300039 -590 9 -.33416928978444993 -591 9 -.14907003342641095 -598 9 .45605242433970583 -601 9 .1437410388407795 -603 9 .16330561998958262 -604 9 -.5200353343676463 -628 9 .5237874710034781 -631 9 -.2419611033916501 -664 9 -.40702565506630994 -723 9 -.9417461128748869 -727 9 .07547811317074166 -732 9 -1.6681681417229541 -743 9 -.09408134421278982 -745 9 -1.3471805922927333 -752 9 -.8799674278672818 -759 9 -.7530432775026786 -769 9 .3087996916547723 -784 9 .3793531747292037 -812 9 -.42678395361237736 -821 9 -.6257828312501192 -827 9 .7943376617948078 -828 9 -1.3127182237483714 -833 9 .9142953708990857 -836 9 -.09542532715844629 -845 9 -.27239694028613726 -846 9 .7253052592770934 -876 9 -1.0289254616839283 -887 9 .9217799470288021 -897 9 -.4185695592277315 -907 9 .6124624232177872 -913 9 1.7102642678702553 -927 9 -1.2370168979360088 -946 9 -1.091790837531072 -949 9 .21539425509572507 -963 9 1.4002332946326155 -964 9 -1.101121731517189 -971 9 -.002667694712367885 -974 9 1.2599482390440861 -975 9 -.057127178653642544 -981 9 -.2645818425534425 2 10 .20235070713936648 5 10 -.39342765703074917 15 10 .526449224539627 @@ -958,87 +104,6 @@ 83 10 -1.5022564522647506 94 10 1.060613526913584 100 10 .12213898768682727 -102 10 .18152135488012974 -110 10 -2.2732770640698394 -129 10 -1.7133746223668764 -167 10 -.6960012608821842 -171 10 2.9772458886525786 -175 10 1.1536152709123453 -179 10 .892232488073014 -184 10 1.4355527767817187 -188 10 .0276216464977707 -191 10 -.2742489047488022 -201 10 -.811120376310028 -211 10 -.16585131904768236 -216 10 -.7149265291809418 -225 10 -.48191946618394543 -229 10 -.2124847366250252 -276 10 -.2417371077307215 -300 10 .7705340095325193 -311 10 1.921875018893293 -322 10 -.023479186840885534 -350 10 -.9322689565641179 -374 10 -.8661854376950779 -382 10 .26209878203459885 -408 10 -1.2363018937050443 -410 10 .762010105486609 -440 10 .241575975262431 -441 10 -2.6870835080883517 -448 10 .03379513653970542 -449 10 1.947211644161888 -477 10 .12061831458481853 -479 10 .5842237842409428 -496 10 -.05809352209415698 -505 10 -1.4250932749730651 -508 10 .7925020913098988 -516 10 .4556689884129424 -517 10 .875683389991599 -521 10 .1452639747774483 -527 10 .7667489242313746 -555 10 -1.1664652398727398 -600 10 -.5311429478522532 -629 10 -.435271961150389 -632 10 .6784517860370782 -667 10 -.057862437661873586 -674 10 -1.0105601417779209 -685 10 1.4559744245938595 -690 10 -1.5388900147133875 -700 10 -.45299057066416676 -715 10 -1.141816899913797 -728 10 .05525656262094748 -741 10 .39148032860057835 -748 10 .33977906904825944 -755 10 -.6543306208181418 -769 10 -1.5321918624394981 -770 10 -2.3465227240217517 -794 10 1.142689224748942 -822 10 1.2879804835297946 -827 10 -.6805328588428553 -830 10 .049903098326358294 -831 10 .953827862503806 -843 10 -.19914098229876365 -853 10 .06569504996268373 -858 10 .0712195832738555 -866 10 2.6118672205739752 -875 10 -.5023959638768872 -894 10 2.734187067664024 -896 10 -.844285692026251 -904 10 -1.1321010308941744 -913 10 -.29420890779137204 -914 10 .37842684723792613 -918 10 -.4375037974215885 -937 10 -.08482772425514079 -938 10 .47033656952364045 -947 10 -.8966003180787034 -948 10 1.0632032830127247 -956 10 -.21251038193183905 -957 10 -2.0519444259164508 -962 10 -.003718436197280756 -979 10 .5794339370306606 -983 10 -.6126251985307587 -986 10 -.5016854805410625 -988 10 -.8008242821874942 -992 10 -.2812625843554877 24 11 1.7926073783421628 34 11 .13442534982389193 42 11 -.3474116686316312 @@ -1047,106 +112,6 @@ 65 11 -1.4426319734131623 72 11 -.17315651553577982 91 11 .6757652395015319 -107 11 -2.0048867889850612 -114 11 1.2902530134930186 -117 11 1.5038906107788264 -132 11 .4247244626981235 -149 11 -.8338190579437836 -154 11 1.5794579691929738 -164 11 .9349550522478931 -167 11 .7775661406271983 -169 11 .3754912340303349 -172 11 -.44391663227949385 -174 11 -.3046525493468557 -175 11 1.3542620259925404 -178 11 -.3358953986102493 -179 11 .38435248180432535 -182 11 -.2755477899835842 -190 11 -.810078206464782 -191 11 1.3370298019033775 -204 11 -.6450164414198212 -205 11 1.3164553367877245 -211 11 .6811405687649987 -212 11 -.5089120339962205 -222 11 -.5487558764849514 -223 11 1.1473287951787452 -226 11 .7026842866889642 -231 11 1.505131881172001 -247 11 -.9179045407588624 -255 11 .3979528946637285 -278 11 -.029462892147744644 -282 11 .3494316687885583 -286 11 -.02533374439655864 -293 11 -.8870767357719975 -301 11 -.3171151149391944 -304 11 -.9900713618387595 -307 11 .09159400863688014 -329 11 -1.8627808958026675 -342 11 .43703829809898453 -348 11 .9937864988818321 -354 11 -1.1898280369755385 -357 11 .21588046167954894 -374 11 1.7004017835647967 -376 11 -.9465983442010208 -379 11 1.0351980115740622 -381 11 -.3551475488461909 -384 11 .22568804185655117 -406 11 -.3732749329808046 -416 11 -.7586136447822587 -422 11 -.8950368517292246 -423 11 -.8299145059891049 -425 11 .37801152571314156 -440 11 -.21478588586313382 -447 11 -.4677166429263584 -455 11 .1817508468042948 -456 11 .18555374465187768 -468 11 .32201152981526976 -478 11 -.9217510236702701 -481 11 1.198629973052535 -484 11 1.0690816737834499 -513 11 .46003850468837215 -554 11 -.30916277809489695 -560 11 .14187563507484838 -585 11 -.9064613370152831 -625 11 1.8040933398311505 -626 11 -.22356689741793684 -631 11 .23791060490062088 -645 11 .566129770540371 -648 11 1.1816798585082513 -651 11 1.5274385430214599 -654 11 .7501882442058078 -669 11 -1.168415354373909 -709 11 .6367321866511343 -710 11 -.22136618314287537 -717 11 -.43257296690060215 -745 11 .30010634327512364 -749 11 .007054160903530907 -762 11 .6143197874037771 -766 11 -.35756072047975473 -811 11 -1.2484718111990993 -831 11 1.0026164357478435 -841 11 -.7349994743412783 -857 11 -.628472255386064 -858 11 -1.0885294655311972 -872 11 1.4980310561782053 -874 11 .048377293048626493 -889 11 -.17861960412516464 -894 11 2.0679988062243795 -900 11 .2438953501493758 -912 11 -1.2120772444842136 -924 11 -.1179253898754582 -930 11 -.6642437138326368 -937 11 -.5225454810809627 -943 11 -.358025326131808 -947 11 .9531636075727427 -959 11 1.8416339538536606 -965 11 -2.1261728347983184 -966 11 1.9906062637667545 -974 11 -1.551687474323484 -975 11 -.4638416227356876 -979 11 -.02581039026272698 -989 11 1.2126764359455628 -994 11 -1.1730510587419078 9 12 .7253699533395683 19 12 -.13452900334166526 21 12 .3000679595863597 @@ -1157,179 +122,9 @@ 67 12 .03215381943206927 69 12 .5024819096630377 79 12 -.15331803336218164 -107 12 -.5605715982027585 -140 12 -.502746893192083 -141 12 .20956522197685687 -192 12 -.1664865754522374 -204 12 -.8189739130856355 -223 12 -.01957589080278055 -230 12 .25408696982362483 -246 12 .24691091900038487 -249 12 -.014041120116310452 -263 12 .5437668641667459 -264 12 -.488135511565722 -279 12 .6839308253698533 -288 12 .18112621941225587 -289 12 .8098636582950605 -297 12 -.5827891806329982 -301 12 -.5202635759611647 -317 12 -.23600883247983306 -349 12 -1.1146369332215083 -362 12 -.12919808916535763 -376 12 -.7970244216293556 -385 12 .32228952789264365 -388 12 -1.0525701732623176 -389 12 .43285302708841944 -411 12 1.0363606816113176 -413 12 .2664227694699327 -423 12 -.5384816984913493 -441 12 -.7163168224580102 -442 12 -.18271829979131027 -452 12 -.1958154732678492 -454 12 .6133652645987284 -480 12 .14304065529772164 -481 12 -.29481309863363836 -500 12 .2231238912178033 -506 12 .15773438712789384 -511 12 .542044898820709 -518 12 .40595067694828807 -523 12 -.3553349319570428 -532 12 -.18605203060572376 -549 12 .009758743167990788 -557 12 .686732809907538 -560 12 -.0821082537415414 -588 12 -.7894255376542407 -594 12 -.025851863909897445 -626 12 .14979866970858738 -627 12 -.11833512944447422 -640 12 .3765344406200777 -651 12 -.5053377540894564 -682 12 .3347274722077542 -688 12 .1289927369509874 -702 12 .6122105139049586 -723 12 .2654064048679974 -731 12 .28786508241917624 -741 12 .8709410294909229 -744 12 -.35200002044357237 -747 12 -.6367030533380121 -748 12 1.274650889536923 -749 12 -.02357172222816112 -776 12 .01339968957847195 -786 12 .10988155331915944 -788 12 -.09011370394993401 -790 12 -.8868163004217982 -800 12 -.09119130816579545 -817 12 .7151743600639096 -826 12 -.5733940165793658 -827 12 .54852136635242 -857 12 .3426934494510422 -872 12 .3467902071264749 -879 12 -.21532534043333468 -881 12 .10948327613843027 -930 12 -1.0213317429077837 -931 12 -.587156058654745 -933 12 .9410492321539154 -940 12 .5729497300539319 -942 12 -.3108192584010774 -952 12 .37327585685963544 -956 12 -.16458887613170303 -969 12 -.11931398558966726 -997 12 .32841330474304953 -999 12 -.2977429616437796 17 13 -2.7279710181191827 60 13 .3479597196471941 94 13 .681388798273315 -104 13 1.163024149133609 -106 13 1.88730676137842 -113 13 1.260869881463617 -133 13 .27023473012281385 -139 13 -1.51331397103846 -152 13 -2.4332099409128976 -172 13 1.5803610345659544 -175 13 1.543628269930542 -181 13 2.4551502680507524 -184 13 .2824873778730259 -198 13 .4813379543958384 -199 13 -.2974384431491653 -202 13 1.1936834792471183 -223 13 .9842601266704822 -245 13 -2.3435942173643816 -257 13 .9324567230107408 -264 13 -.8817928322622265 -270 13 .24028374768068464 -275 13 -.027083915101659306 -298 13 .9631080121110372 -307 13 1.265146352819054 -318 13 1.9993043715450418 -358 13 -1.267518811128569 -365 13 1.5088388253964369 -367 13 1.4981831065168159 -375 13 .8855415076215245 -381 13 1.0775011973712736 -383 13 1.1439553174891632 -395 13 -.3642108355472453 -432 13 -.8766172267803503 -434 13 -.8456533137651672 -447 13 -1.296844797183769 -449 13 -.1106018791258248 -460 13 -1.6375637239474823 -467 13 -.3635600988372762 -469 13 .5053482894080151 -487 13 -.006452057467476069 -488 13 1.7961377535214365 -490 13 .19408882796915855 -506 13 1.6543070732748182 -507 13 -.09546496824930278 -508 13 -1.3693291003527897 -518 13 .5492621018964219 -525 13 2.539851702337509 -528 13 -.13936286525643338 -552 13 .8810479376521086 -553 13 .14708340731189196 -554 13 -.17235558568858897 -583 13 -.30345711311393053 -584 13 1.0519678890437503 -587 13 .3416624586042989 -591 13 1.0839800657038792 -593 13 -.5223068283412138 -609 13 -1.7432704053018506 -614 13 .7990179859503617 -626 13 -1.998729208511692 -659 13 .30961733908055616 -661 13 2.112162684651808 -666 13 .27350888324615036 -676 13 1.6064248292741081 -688 13 -.6323058977010159 -689 13 1.1652526980659998 -705 13 2.887556814196321 -728 13 3.3363106997442533 -732 13 -1.686405117489533 -774 13 -.34201792134982156 -779 13 1.7157692023551376 -787 13 .050946091537767406 -803 13 -1.0081813347031343 -805 13 .8585942025001811 -806 13 1.6624149772400505 -809 13 .8588690660332694 -820 13 -.9695226185544967 -837 13 3.607410671595817 -841 13 .5955221018772351 -850 13 -1.6708267164538735 -857 13 -.08572927418118181 -858 13 -.3829922488648969 -866 13 1.4074022374860378 -870 13 -1.345968281976035 -881 13 -1.5396115802842616 -894 13 2.496757643393936 -904 13 -.3606297258063925 -922 13 -1.4450410263643851 -927 13 2.0741896832198288 -928 13 .38091474874975273 -939 13 .2595239073631143 -943 13 -.5257358670177449 -958 13 .33707112317993837 -966 13 1.8881227618458274 -974 13 -.623884470910605 5 14 -.6293419600550545 13 14 .23752021998964926 20 14 .29689040441722164 @@ -1339,115 +134,6 @@ 62 14 .7199580478284748 79 14 1.0694141411835443 88 14 .05578851780227162 -113 14 -.9413343356898707 -115 14 -1.1684242030018361 -117 14 -.26189476580211524 -125 14 -1.0515248182200798 -127 14 -1.2107572293771371 -146 14 .9971062075622545 -156 14 -.2832569116476981 -157 14 1.3123423840486006 -160 14 .42663936384436296 -194 14 -1.4561019371472221 -213 14 .8444031606284437 -217 14 -1.6543489676653031 -227 14 .8634575636162112 -232 14 -1.6421753946672535 -242 14 -.5948739741873363 -243 14 .09175543514378803 -246 14 -2.045038423444058 -247 14 .246725398515956 -251 14 .9618006562584303 -262 14 -1.5141216962485051 -283 14 .007688277968428747 -287 14 .17988001748893373 -299 14 -.880467877541663 -310 14 -.7204274213304418 -322 14 -.632753438485686 -325 14 -.4350551372307038 -331 14 -.8347211324920123 -332 14 -.908786646119925 -345 14 -.31043570026832534 -357 14 1.0613414567023964 -366 14 .9342887078129147 -375 14 -.3528696298525425 -383 14 -.6443063292087209 -388 14 -.22534471623112584 -397 14 .08522111406380611 -426 14 -.6271980560000148 -433 14 -.15839995097901016 -437 14 -.6659617596534357 -459 14 .07869195897917294 -464 14 .8505078920405234 -472 14 -.3560226517286859 -493 14 .46380578242966236 -495 14 -.7213880221894676 -497 14 -1.1912713062458724 -515 14 -.4651491821776641 -527 14 -.5438390505684797 -535 14 -1.6277292447635772 -559 14 .14487344326886276 -561 14 -.05117181111617607 -562 14 -1.010288782108112 -565 14 -.6740164996090526 -572 14 .33346023296923655 -574 14 .44918253788301016 -579 14 .5402690085654925 -580 14 -.2658186540495727 -581 14 2.0927791674705216 -588 14 .03823989948773282 -589 14 -.6906000611183718 -597 14 .5110198156245435 -601 14 .086921704455896 -607 14 .1648474160168393 -625 14 -.2761271684004192 -631 14 .4595628047377673 -653 14 -.06932200174884977 -659 14 2.0721933283506604 -661 14 -1.2670567564138233 -662 14 .40629545439988846 -667 14 1.87588367490367 -672 14 -1.5323755550937006 -674 14 .015551583753736983 -684 14 -.38629447338114953 -686 14 .5057363557879302 -690 14 -.5321003392939543 -709 14 .4809691924793555 -713 14 .3921822078782861 -725 14 -.1507488704213205 -735 14 -.6596950964806472 -747 14 .7262270948531098 -756 14 -2.381671476647218 -758 14 -.3326288188101657 -776 14 .6252773079036831 -777 14 -.2453417965189606 -798 14 .21648239459424196 -799 14 1.1573129867278258 -800 14 -.8016487557695683 -808 14 .3537012735947547 -810 14 -.6457800069410682 -822 14 .5410926146713525 -831 14 .22421587885118685 -838 14 1.3828741953869428 -840 14 1.3363560025985095 -854 14 -.0699921038330005 -866 14 -.09583227002918693 -869 14 .06268333456325867 -882 14 .5293704436364016 -884 14 .14444781050873245 -905 14 -.7461184515347219 -907 14 .24319365897547054 -908 14 -.2770215010573115 -911 14 .08527811322328037 -913 14 -.5812189200736293 -915 14 .7030635031618748 -923 14 .9227204334349115 -948 14 -.4892187329063692 -951 14 .6625399841802802 -967 14 .48990680861843633 -970 14 .2498459487781035 -973 14 -.20771649413785517 -986 14 .5841454969122677 2 15 -2.1939443806859984 5 15 .6950997299592981 7 15 .9901792256766214 @@ -1460,111 +146,6 @@ 73 15 1.1128204680932823 93 15 .22629843107386427 100 15 1.1506489936140627 -111 15 .1032572136179381 -118 15 -1.2459208351330389 -120 15 -1.2627569677161379 -130 15 .3717454779973478 -137 15 -.4180430646095635 -146 15 -1.0697802538801457 -147 15 -1.5452160774339758 -153 15 -.8809230504710108 -162 15 -.15987389384872647 -163 15 .38199734087924475 -166 15 .8765025304733348 -171 15 -.7700786795906092 -194 15 .7375349559943241 -211 15 1.5473049544511084 -229 15 -.7317282593446467 -239 15 -.4448114276324397 -248 15 .2813533330835631 -250 15 .09312246736063859 -256 15 -1.1528119632114742 -271 15 .813495771964893 -282 15 .6795089071871551 -285 15 -.6615368848028748 -288 15 .612921328151741 -293 15 1.368872553204757 -300 15 -.1936902559274654 -311 15 -.7135328955692646 -315 15 -1.3709683045076388 -323 15 -.831790514309113 -326 15 .7164709527532276 -338 15 1.2582679343216716 -345 15 1.0482819514130874 -360 15 -1.7434612673131327 -364 15 -.07205123377681899 -379 15 -.8092190414388212 -390 15 -1.2368184853370559 -405 15 1.7567600755013568 -414 15 -.31178717932564204 -429 15 .4408125417738804 -443 15 -1.5079974304449801 -451 15 -1.3493775753668047 -456 15 -1.5243425756300888 -458 15 .4933167606215042 -466 15 .7802898280627286 -467 15 -.5786885510216995 -489 15 .386331467554636 -503 15 -.9179181962687217 -505 15 1.5993612555224135 -517 15 -1.3269432089103739 -529 15 -.001568604896087955 -532 15 -.34800264023687966 -536 15 .7106085235071549 -586 15 -.4075950963129019 -588 15 .21453659327445765 -606 15 -.7060970521208527 -620 15 -.2555285167237574 -624 15 1.0179021120462945 -627 15 -.7427239616825585 -634 15 1.9423526352400744 -645 15 -.6925916620201152 -658 15 -.48970841829826955 -662 15 -.2963771616258651 -667 15 .9500726649420692 -677 15 -.30816087835463235 -683 15 .571646552537691 -686 15 -.051801956395510884 -690 15 -.7603658412826539 -696 15 2.215965989942078 -698 15 .2769721084786655 -712 15 -1.94947157585998 -715 15 1.6215792509229092 -717 15 1.0257269874814792 -742 15 1.8570173298595376 -746 15 -.3756853123784686 -762 15 1.0585683903400742 -767 15 .5882263972393291 -771 15 .6511497381123801 -782 15 .10807814752940542 -788 15 -1.0684601917764565 -797 15 -.08803615994949547 -798 15 .08728633515763388 -809 15 -1.011884790030816 -810 15 .8884121064110903 -826 15 -1.9935111080000412 -829 15 -.9332511378271754 -835 15 .76433058724356 -836 15 .0004493173489041706 -853 15 1.5159285694245868 -863 15 -1.974287650590898 -887 15 1.0118039156087058 -905 15 1.4621519885604362 -907 15 -.06856328655247683 -912 15 -1.1167570205821418 -917 15 1.1359457799056174 -923 15 -1.0731848904754913 -929 15 1.7064646249327469 -932 15 1.3590442787368286 -933 15 -.047410700739248385 -956 15 -.3993677778508023 -970 15 1.0310531529147757 -976 15 1.0407959067196124 -979 15 -.8946842048681273 -981 15 1.168773900371941 -996 15 -.20938170937932077 -998 15 -1.5027575479591821 -1000 15 -.5756260775146285 2 16 .08608785921803197 4 16 -.19056880469303694 8 16 1.1716882133757454 @@ -1573,196 +154,11 @@ 52 16 -1.0033701984223022 54 16 1.5241895558221108 55 16 .08499004068974017 -62 16 .15609149567777347 -122 16 .44417895918502004 -128 16 1.5375010915482852 -135 16 -.34586099238845525 -137 16 .18408955931176926 -142 16 .5431084156263142 -146 16 -.21238376163376904 -153 16 -.20482393801283894 -158 16 -.9297628102296756 -168 16 -.9253200350961833 -169 16 -1.0293349918988175 -171 16 .5904092547214693 -174 16 -1.0733100469772745 -176 16 -.16438386225804158 -194 16 .615810821118022 -218 16 -.25852149923469825 -220 16 -1.0375803825753604 -239 16 -.9524583498126916 -240 16 2.2207243002698154 -246 16 -.6435121410970643 -253 16 -.36996264248993904 -258 16 -.5550660291870263 -278 16 -.2173022158837072 -297 16 .23596465805410055 -300 16 .5106706043434234 -302 16 -.45541006575514875 -304 16 -.43144530642769907 -305 16 -.13357560638316388 -326 16 1.5142953786849458 -331 16 -.09969292205755188 -333 16 .40718997104576443 -359 16 -.4491133994488459 -367 16 .5753628529519068 -375 16 .7133318476460444 -410 16 -.3790847908071122 -434 16 -.4503533078060131 -435 16 .5483513628762418 -445 16 -.27254354794043795 -447 16 .3199519411060022 -463 16 -.335447440042872 -471 16 .4125643353777131 -481 16 .07015868042631973 -500 16 -1.2417229200294182 -508 16 -.16950116344873598 -510 16 -.03601116582024716 -537 16 -.18973231775781707 -557 16 -.46019913909577587 -578 16 .16972890254189849 -582 16 -.12006440723760978 -586 16 -.8661488015793015 -596 16 -.030962956690111634 -606 16 -.9178172586447411 -625 16 -.615981136080951 -663 16 -.2571099833507619 -671 16 -.7914755022080084 -673 16 .37493315735896715 -682 16 -.37743860001611046 -693 16 .8178655101371743 -704 16 .4718336343182406 -723 16 .267598632763106 -729 16 -.2404137465545294 -738 16 .39730753968128313 -751 16 1.2183795010154588 -752 16 -.4525078736321172 -755 16 1.481176488080303 -766 16 1.8373420143358785 -774 16 .18890404164438576 -779 16 1.2289972236968458 -802 16 1.3156064188226064 -816 16 -.1049239864824542 -818 16 -.006798973833709658 -823 16 -.12252550500240414 -835 16 -.44343710369793016 -838 16 1.2288039892857947 -843 16 .7590400376631974 -860 16 .6818920671279188 -872 16 .06453586222013354 -881 16 -.8623258032605849 -906 16 -.7944996090917577 -910 16 -1.0576074873026475 -917 16 .10748703825384731 -945 16 1.2047345547356343 -971 16 -.8895344261340558 -979 16 -.21408985594409546 -989 16 -.5482589377436846 -34 17 -.4984942084956633 44 17 2.413697825242908 48 17 -1.1884884817811106 -49 17 .1755384213871018 60 17 -.7969418638176379 78 17 -.6591385147037204 88 17 .0294211698408242 -103 17 .5922802909780306 -106 17 1.439114343476212 -111 17 .7290314855778378 -124 17 -.7731787079901803 -139 17 -.010311734091273776 -140 17 .21123509902363477 -152 17 -.5377456632033079 -164 17 -.33292016527861085 -178 17 .6465727965438273 -191 17 .6904082585483975 -206 17 -1.38618629489837 -223 17 1.5861949232404027 -241 17 .42422557731521937 -247 17 .733485894007216 -258 17 -.31681778303741764 -271 17 .5691084027344125 -272 17 -.3618536029496876 -274 17 -.2881784655179663 -276 17 -.6152909234462506 -285 17 -.17581213171002777 -293 17 -.5801464002859558 -296 17 .06316835419035381 -300 17 .22027441404744147 -305 17 -.12033907664998833 -308 17 1.2851437006783235 -325 17 -.4012791986276837 -347 17 -.7217074673304311 -353 17 -.7739285911123753 -357 17 .6352240851739126 -367 17 .4756731206062343 -370 17 .4223846187341042 -374 17 -.21136299400706052 -375 17 -.119236815015268 -383 17 .1469376043063151 -408 17 .5342232384900868 -412 17 1.2352018902307456 -416 17 -.5975331637555954 -425 17 .058288284922587086 -438 17 .12574557825736904 -439 17 -.7557435603883234 -445 17 .9918960512240884 -450 17 .04245901193964591 -458 17 1.0979099363115334 -462 17 -.8441759982082642 -476 17 .5023648328763624 -477 17 .5440825770921894 -521 17 -.27060025812257604 -529 17 -.4988682419418412 -536 17 -.19818424816825878 -537 17 .547870344104914 -549 17 1.0991335719997597 -552 17 .13071038858785117 -561 17 .45713676607224735 -582 17 .6338372845041392 -594 17 -.48523277393497494 -614 17 -.31365080363109904 -615 17 2.035682833213214 -622 17 .40520866438692765 -629 17 -1.3293116292552192 -645 17 .6645038093111417 -651 17 -.3016831872563668 -652 17 -.8245753278439353 -668 17 .06709398537187689 -674 17 -.16497841748207348 -675 17 -1.1739053391609684 -685 17 -.6892402662702102 -689 17 .7971292358686649 -694 17 .7421567955572718 -697 17 -.03970458384466338 -708 17 .22834617426538137 -710 17 .9930535787360767 -711 17 .20888420771580404 -723 17 3.142374570100368 -725 17 -.8325127677747987 -726 17 .07151011624351344 -728 17 2.026538951981186 -731 17 -.8232844547960139 -733 17 -.33401742698957565 -736 17 .08380745607151188 -738 17 .5883075078251088 -759 17 .2649897820833681 -778 17 1.3996782483556789 -786 17 -.5051825673779662 -812 17 -.5230447971960939 -816 17 .07132789630621178 -822 17 1.4125382791205359 -824 17 -.014035042091321184 -825 17 .04223948780135105 -826 17 -.12399267083344354 -835 17 .05432858030618482 -842 17 .6140796179905482 -876 17 .3381783633544133 -889 17 1.0583860865995345 -925 17 1.0569363854477731 -931 17 1.2736102682116661 -941 17 -.3206458703905013 -949 17 .3328146205888023 -984 17 -1.567399680544674 5 18 -.14680606553487255 22 18 .012065833767345852 24 18 1.1789923122933506 @@ -1775,85 +171,9 @@ 79 18 1.4622576175963728 81 18 -1.7782489722198485 82 18 -2.068687803283775 -117 18 -2.7632800280757053 -140 18 -.7437020335045891 -141 18 .18030125563311247 -145 18 1.3377921274821059 -149 18 -.8831515538141449 -180 18 -1.0593743693117432 -185 18 -.4053303412200592 -188 18 .6082775145411099 -199 18 .21036695432789845 -204 18 .14319554333820897 -207 18 -1.9736747995029744 -217 18 -2.89466623994876 -221 18 1.0755562527522378 -242 18 -1.2135074176772378 -251 18 .463280601162097 -252 18 1.8525056807535079 -266 18 -.13949592265615823 -274 18 .26500608705947837 -304 18 2.448094463953677 -305 18 -.03487315632113644 -310 18 -1.1880725999886597 -312 18 .29554271893625345 -329 18 .49765029227536883 -330 18 -.6306106605161413 -360 18 1.763007655858052 -367 18 -.505566494584105 -405 18 -.025349497972754095 -438 18 -.5522665621587238 -459 18 1.9178828129765764 -461 18 -1.3947999626619478 -464 18 -1.5989446019002957 -472 18 -.9944479642007955 -494 18 -.9200002415900759 -496 18 1.7778516973567335 -511 18 -.9386016128343969 -512 18 -.16150312309282325 -528 18 .6050130456724234 -533 18 .1262244158914023 -542 18 -.5821842800428253 -547 18 .6314323558748287 -604 18 .5667233536253254 -613 18 .4874882505237777 -620 18 -.0378827748353823 -626 18 -.5093577117931354 -629 18 .5279730376773464 -637 18 -2.4674413568866695 -640 18 .6783514219305549 -648 18 .2786649906579723 -666 18 .6145817548377448 -669 18 -2.6981787635126526 -671 18 .3730093995875695 -676 18 -1.9220859882881738 -688 18 -1.3396735783389064 -697 18 -1.789701755096187 -709 18 -.08497290683427686 -732 18 1.4976188660003649 -734 18 1.2645950145221305 -749 18 1.259001628195999 -773 18 .9976885373593611 -802 18 -1.9408967708303644 -806 18 -1.0673110637824017 -822 18 .349129932271051 -831 18 -2.161942876896238 -833 18 .3173775047748272 -836 18 -.1736103071622751 -856 18 -1.767065882665499 -858 18 -1.004743859956476 -893 18 1.018647140289261 -896 18 -.1981744405106835 -936 18 1.3771679257175309 -954 18 -.534493151233777 -958 18 -2.772864741011306 -964 18 -.2321146582071618 -971 18 2.228247242567525 -986 18 2.7016417938003636 4 19 -.17534731597203404 31 19 .11450298053035049 43 19 -2.6438681701130267 -50 19 .2926946077000022 57 19 .46290294044444663 65 19 -.1701701271921887 67 19 -.29825968589917184 @@ -1863,88 +183,8 @@ 76 19 .5354821167484654 85 19 1.345679017067255 93 19 .05107962177424269 -144 19 .8539250224597564 -149 19 .19335159920564693 -156 19 -.16569152241301638 -162 19 -1.063044093330015 -167 19 .1544300940161871 -179 19 .8747324313631276 -202 19 .8396477416263923 -215 19 .18766902050253967 -220 19 .5340795728194646 -222 19 .5791753455166314 -228 19 .5556180742263056 -253 19 .043064064161290286 -257 19 .14146737012820254 -259 19 .19208327684589258 -282 19 -1.4229674464983852 -294 19 .45527177176617667 -301 19 .6075478875161809 -312 19 -1.9796100860239376 -346 19 -.45014751579187307 -350 19 -.6764181255779451 -357 19 -.4914398573829316 -377 19 -.1589989960858985 -382 19 -.30757722073527427 -389 19 -.35090814326304187 -399 19 -.8676907108773744 -408 19 .5017849735142396 -411 19 .014934842121141836 -413 19 -.7184910044636027 -423 19 -.3310942664839058 -455 19 .34498769391881823 -463 19 -.14706849497686175 -466 19 -1.4258862927580995 -475 19 .4713121833119844 -496 19 .03739888702341304 -503 19 2.043200344729932 -522 19 -.2023631562101877 -531 19 .6972686489579205 -532 19 .4753801319837594 -535 19 .16414141328210288 -549 19 .6633230308942117 -559 19 1.1708908464733936 -609 19 -.3889343528996604 -619 19 -.4089930747148889 -634 19 .0034656354600101358 -655 19 .042980125947617034 -679 19 -.595799062708003 -698 19 -.18952848961219435 -703 19 -.08685122659918207 -713 19 .503425099590109 -715 19 -.8671685695393415 -719 19 .1518558372997342 -751 19 -.06382840725392896 -752 19 .4346529677561968 -767 19 -1.073593819728985 -788 19 1.3367688403038347 -809 19 1.0204540455523543 -810 19 -1.4664421520271929 -816 19 1.2552389387023462 -824 19 -.8211952712956698 -829 19 1.285041353502046 -836 19 .5707957243891748 -849 19 -.02685518140994425 -859 19 -1.1603770464437675 -870 19 .3921188926688411 -871 19 -.450765772883725 -875 19 .7355219791337901 -877 19 .4521534693463794 -880 19 .538865272398235 -887 19 -.2166398716348015 -900 19 .1888998622580409 -902 19 -1.2073170123076702 -938 19 .7389275161139874 -940 19 .5651928906956563 -950 19 -.31745946215958276 -952 19 -.31493992189004494 -958 19 .12135268709854873 -972 19 .47603098360576224 -985 19 1.204450258023833 -990 19 .942699007303536 12 20 -.6871097075184339 16 20 .9073464198293397 -20 20 .00896731716679236 25 20 -.6389147101966118 26 20 .08646891397296429 48 20 -.8101653810047662 @@ -1952,203 +192,11 @@ 74 20 -1.3814526881783082 78 20 .060860988976387594 91 20 -.8343741650290685 -106 20 -.7960347295918255 -111 20 -.42232173054828437 -124 20 -.157135206628556 -125 20 -1.4661424491009771 -151 20 .9434500030032631 -153 20 .0862184717053261 -167 20 .8979776008873118 -187 20 -1.283404714757654 -196 20 -.5457067316640807 -206 20 .3812874256390071 -211 20 .24035990471549198 -214 20 .6284919412681805 -222 20 .4805910847730353 -231 20 .5285795174134676 -240 20 1.379658909434911 -250 20 .44608690644262095 -262 20 .1591810923724244 -272 20 -.6265354675298379 -281 20 -.7902191843704224 -297 20 -.05299784992106851 -302 20 1.1638787011606742 -307 20 -1.2293973325761631 -326 20 .7235895488328923 -328 20 .5161999108316404 -335 20 .40339607019385015 -340 20 .4297546032460737 -343 20 .09543804417269192 -358 20 .3634907863570121 -365 20 -.19842646853411505 -370 20 -.24372513188729913 -384 20 -.3458517271024392 -387 20 .5509787581213246 -400 20 .5534022756845137 -402 20 -.27079302742958955 -418 20 .5939759047308553 -422 20 -.09355548761235213 -423 20 .1088425329946963 -426 20 .1350925940269735 -433 20 .4635101590200511 -442 20 .9226977701781779 -466 20 .28694385943845047 -467 20 .5127257471414828 -468 20 .5228200550987319 -472 20 -.0009343919004961565 -483 20 .640846473306788 -495 20 .8752035071640184 -505 20 -.946515653947047 -518 20 -.8939901614451479 -520 20 -1.606948374119393 -534 20 .2815781684903859 -548 20 .5102118603474685 -559 20 .45161857453806165 -586 20 -1.334833261617969 -587 20 .807976693734824 -589 20 -.6528727647024275 -609 20 .6824022200841492 -653 20 -.13022293381886396 -657 20 .49123628556559273 -662 20 .9755244561653968 -672 20 -.5909511265237032 -697 20 -.24684899188239834 -703 20 -.07298190061245843 -704 20 -.4115950403332665 -716 20 .14469991727175202 -723 20 .832651858585871 -733 20 -.6659824069761928 -736 20 .23735347893753028 -737 20 -1.105176702248082 -749 20 .19401502191340375 -755 20 1.095785299037927 -766 20 1.4244670884241277 -771 20 -.7835928714041911 -778 20 1.9723966100536494 -807 20 -.2747816918544914 -812 20 -.378551012221052 -817 20 -.5818864628522066 -819 20 .14758812319866585 -821 20 -.24904178311241676 -823 20 -1.5430020117350405 -824 20 .00800393613393549 -829 20 -.39234388271585824 -846 20 .6228547064051522 -852 20 -.6665186194709332 -854 20 .3132124619717601 -863 20 -1.2624464007338976 -875 20 -.315927260095378 -879 20 .8383475979048812 -908 20 -.5375658919993227 -925 20 .03894891277353964 -939 20 -.17069116886961416 -941 20 -.5016668085606688 -944 20 1.0014011377672716 -947 20 -.501602416893845 -956 20 -.3878521097277408 -957 20 -.06989212337018312 -970 20 .9090211662307234 -986 20 .7531095766831628 -989 20 -.48493871420024154 -992 20 -.2843847124987111 20 21 -.1430173346485228 34 21 1.1979882977654301 62 21 .13255327348378948 76 21 -.4458095205771501 90 21 -.6106018871169578 -106 21 .0024711892310200056 -108 21 .5364813790381796 -116 21 -.15953112708843106 -117 21 -.02670396598161664 -129 21 -.5869232737390482 -135 21 .5085197107876381 -141 21 .4181387142880306 -142 21 -1.1941015299785787 -145 21 -.7380373458052523 -157 21 .35896540023521495 -160 21 1.0762645680088019 -178 21 1.2804998415343365 -181 21 .5674026480545834 -184 21 -.19437009823221338 -217 21 -.2367873949274526 -234 21 .10528095619574136 -246 21 -.5514218872091281 -252 21 -1.0165631972599976 -256 21 -1.0719452486904828 -260 21 .6395459136622965 -266 21 -.8105485454651894 -267 21 1.7996397590621513 -304 21 -.5115415256587794 -314 21 -.5977449205035406 -322 21 -1.229460627869784 -326 21 1.125357637825239 -342 21 -.06679788280151328 -352 21 -1.1970862601842853 -362 21 -.7434132323958015 -363 21 -1.2632258486770207 -370 21 .2055436362261222 -372 21 1.0885252888442132 -373 21 .38282457125995384 -383 21 .947722997774079 -384 21 .10833046515058167 -392 21 -.246028694523515 -408 21 -1.4694862228701562 -417 21 .1992043824231013 -421 21 .7859994290284577 -456 21 -1.3047112666501366 -460 21 -.10574863625795416 -465 21 .5383818912919942 -468 21 1.0605631427245852 -473 21 .11706208851546149 -476 21 .9641242833135193 -510 21 1.2258887094583806 -511 21 1.0942833576654218 -514 21 .5834851578224216 -517 21 -.12004188104488706 -531 21 -1.1421427517597782 -558 21 .1291609252007887 -576 21 -1.9032550771779744 -578 21 .4232967612988907 -580 21 -.6009956761201114 -587 21 -.4961661935459146 -592 21 .21070897169176075 -614 21 -.8145090902446057 -630 21 -.20033354039161802 -636 21 -.2659647869742316 -668 21 -.653425273056611 -688 21 1.8098299846323276 -692 21 .27689355931013293 -701 21 -1.4920826267802325 -712 21 .051994023621619076 -734 21 .12334975590343723 -736 21 -.9969746631290101 -749 21 -.17471768223270853 -760 21 -1.1722908185021366 -777 21 -.23167058131516277 -781 21 -.3054564155458381 -788 21 -.8177447438151583 -796 21 .7518913943141156 -806 21 -.4238445339804542 -819 21 .7860498891020631 -827 21 .35435957750710256 -829 21 -2.0521262638858153 -846 21 -.09327013513768122 -851 21 .808317552573875 -860 21 -.11958579303521474 -869 21 2.707505800778233 -878 21 -.5619916793611038 -880 21 -.04257934363069818 -885 21 -.13274843347968196 -886 21 .07789652217216607 -894 21 1.0084888111250636 -909 21 .17190214179860516 -911 21 -.24686908375612387 -916 21 -.04862041962086718 -939 21 -.4972486243107338 -942 21 -.802772675284237 -961 21 -.06891627955419162 -980 21 -.5963196720592444 -987 21 -1.896879555539689 1 22 -.24339779814874588 6 22 .5760078283484324 15 22 .8621914658919236 @@ -2159,90 +207,6 @@ 60 22 -.1418954446752529 77 22 -.9303058636360312 96 22 .2536829129415404 -107 22 -1.2405424933164177 -153 22 .28216162671822415 -168 22 -.1401936984563866 -182 22 -.34694525174909785 -195 22 .7708431700867674 -197 22 .5347216529818424 -209 22 1.355574762457538 -210 22 -.723056861625225 -220 22 .37059288675357405 -225 22 -.12131878628578013 -230 22 -.9911961297089158 -241 22 -1.2131807141585589 -242 22 -1.4545181215271037 -248 22 .5433160273195408 -255 22 .014211609790553872 -275 22 -.02896587695205853 -278 22 -.3539829418966386 -309 22 1.0425054595602574 -312 22 -.711622482025816 -316 22 .9612913391370569 -317 22 -.23952694008963732 -328 22 -.46619856102934826 -343 22 -.3293621005346537 -353 22 .0750702019553676 -379 22 .6970417605007689 -382 22 -.568700645930614 -384 22 .1698584067710021 -402 22 .7098642114144071 -404 22 .30935412463053724 -406 22 -.4645514860499944 -411 22 1.0712965495877669 -420 22 -.9402276858550886 -428 22 -.2271858679227567 -443 22 1.4808819311700092 -449 22 .3065928788422668 -456 22 .535195780482563 -485 22 -.617807339579464 -504 22 1.341094613648713 -507 22 -.11234956402626811 -510 22 -.3848626129425601 -517 22 .33841963737288505 -526 22 .5121645569926271 -539 22 -.8244275657189366 -540 22 -.6806214841980953 -549 22 1.8316504414660573 -567 22 .3819045970905341 -570 22 .2682604255661943 -579 22 -.31466398189524175 -587 22 .37672418138464064 -590 22 .2679393556323442 -610 22 -.59114059096308 -630 22 -.06223464591479673 -659 22 1.4189177561385178 -667 22 -.2491479986426022 -696 22 -.5872223230668825 -704 22 -.5117982096169849 -706 22 -1.200264422275598 -716 22 1.2766392063765846 -740 22 1.2274288004220675 -750 22 -1.0437115276490787 -753 22 -.41800353407083524 -763 22 .24984607964796113 -769 22 -1.0390740772343163 -775 22 .1595102105532534 -777 22 .36839987331535096 -781 22 1.1472339485115897 -795 22 1.1831623325121787 -798 22 .5818837218317563 -816 22 -.6460787756300012 -825 22 -.6684337927899656 -849 22 -1.3050758817694168 -852 22 .6345794561725205 -855 22 -1.278672230434448 -864 22 .6288410385024268 -886 22 .12245148388840102 -890 22 -1.000762675768404 -891 22 .2441281523845889 -904 22 .07844432308289337 -932 22 .09686079066748035 -935 22 -.9045799272775952 -937 22 .19955711273997218 -962 22 .23735646060158938 -987 22 .7231440787598103 -993 22 .24480798994391081 17 23 .6429764135852559 21 23 -.6354952198226915 22 23 -.6161891408446064 @@ -2259,100 +223,6 @@ 90 23 -1.0058635297205267 92 23 -.25061623527633886 93 23 -.6334186175301786 -106 23 -.6427190179691341 -108 23 -.4748201752531344 -117 23 .743366310346192 -131 23 .7852986129438625 -135 23 .945904557687927 -143 23 -1.67164656260747 -146 23 .18675132094131136 -154 23 .19414373940443844 -156 23 .1255715247827956 -168 23 -.4302235516398169 -174 23 -1.007283657462882 -178 23 -.9347327596796258 -194 23 .7421335242771839 -196 23 -.8801032837381959 -202 23 -1.596753974166322 -207 23 .23326214706858822 -228 23 -.7456264687452638 -275 23 1.3472968590530818 -285 23 -.11476391541578854 -298 23 .8356505749483659 -300 23 -.23758882063355885 -313 23 .8569444118949886 -343 23 .09059613951357501 -350 23 .8852676693496286 -396 23 -.7459702982482895 -397 23 -.041931108691634994 -409 23 -1.4997954014874328 -411 23 1.3120959444173206 -418 23 1.5244251662370374 -452 23 .3527335245008379 -454 23 1.5090002253045625 -468 23 -.23456150129253278 -493 23 .6661295729977267 -495 23 1.0855799208522443 -499 23 -1.5386797334820241 -505 23 -1.573916105814741 -510 23 -.7626515767098905 -518 23 -1.514836045450879 -541 23 -.433967422592459 -555 23 -1.519004543690819 -557 23 1.5903415092135833 -565 23 -.5276598222794028 -570 23 1.130686036798916 -573 23 -1.9403880771958428 -580 23 -.7495112292607682 -598 23 -.6911019064492825 -602 23 .13929340593006242 -622 23 -1.6408157908101761 -635 23 -1.085040590845245 -638 23 .9228959416901568 -644 23 .6122297270868584 -649 23 .07439479973395959 -653 23 -.4259028798764992 -668 23 -.6426875830648524 -676 23 1.1168496462733088 -696 23 .22647163801741238 -710 23 .45076945465807405 -716 23 .9376083184121811 -722 23 .4052048046453555 -724 23 .5802474656862722 -741 23 .7780566318280695 -764 23 -1.9799775063614815 -768 23 -1.0499018513148246 -769 23 .45562471904719193 -775 23 .09073957439998351 -779 23 .6686586373869651 -788 23 .5861982258885896 -789 23 -.9917517551139359 -811 23 -1.2731958029974368 -817 23 1.2570791667545949 -819 23 .6499904935307007 -833 23 -.4855958383204582 -853 23 -.000863801620051563 -855 23 .3218245146270981 -873 23 1.5925726928713315 -881 23 -1.0961656964182906 -883 23 .040739097216322614 -885 23 .14539328251593345 -886 23 1.2017289602815115 -899 23 .8359380481146261 -905 23 2.721082324285049 -909 23 -1.5593827571225236 -918 23 -1.476314635716876 -937 23 .43460718528294034 -942 23 .06329249148435037 -952 23 -2.377855390134919 -953 23 -.7382974578431203 -958 23 -.22904508947470592 -961 23 .16343250541083065 -969 23 -1.3791987490882704 -970 23 .19639265745668527 -982 23 -.21011028079697702 -984 23 -.9080432061227 -998 23 -.9885905474601067 7 24 .8778720925498023 14 24 .069426847289812 19 24 1.3639965656485844 @@ -2360,93 +230,11 @@ 31 24 -.4217038752603968 34 24 .9187807748614002 39 24 .3271768908953827 -45 24 .09534235580633035 49 24 1.4041217315876702 53 24 -.705270234614411 56 24 .4295319231281637 57 24 -.8003846627128524 84 24 .5450701250109211 -113 24 -.17377444920434928 -130 24 .03622210332054615 -132 24 -1.376359613591807 -137 24 -.4779186030580178 -157 24 -.9154900081523196 -180 24 .39187938861260796 -201 24 -.2731757414300127 -211 24 .4387660981773086 -223 24 -.8586396134179928 -225 24 .5162779847841367 -229 24 -.22019702883716588 -233 24 .20567254513720049 -247 24 .30992562867910006 -275 24 -.01805439409483523 -277 24 1.649043707065881 -283 24 .21816570318433065 -285 24 -.30555816883118825 -294 24 -.33458045980081297 -314 24 .44621009622975566 -330 24 .17016647776997768 -339 24 -.8341769659481307 -340 24 -.9340612177325053 -345 24 1.0630314781134578 -355 24 .7088398334266948 -382 24 .2724115573257653 -399 24 .34108354452622663 -402 24 -.05008357342577535 -417 24 1.1118768729528132 -443 24 -.45064462934027344 -449 24 .06900785634578722 -456 24 -.5981689347763961 -457 24 1.305552123649221 -484 24 -1.5654331730734963 -488 24 .03862374370404585 -507 24 -.6974117057690239 -508 24 .46774188156782304 -520 24 -.19270214965467883 -526 24 -1.0035789913321798 -527 24 .852177118763522 -538 24 .10614229015863494 -549 24 -1.3399764482110281 -556 24 1.1319556860874054 -595 24 .13806242722768153 -608 24 -.18688189387311502 -610 24 .4462900959352493 -613 24 .651052104897792 -629 24 -.2918265477637941 -630 24 1.7004660154218312 -646 24 -.21948672332352023 -665 24 .0717027046929542 -666 24 1.211203954198088 -667 24 .45373075291900083 -671 24 -.05442762300046475 -673 24 .3468115756124395 -685 24 .3961326770349765 -686 24 -1.1668971397656687 -687 24 .38325964876322904 -692 24 1.0831722526056524 -716 24 -.9446886370764972 -723 24 -2.197291365978047 -731 24 1.116732877572341 -742 24 1.8279964428262687 -749 24 .3399270324750116 -752 24 -.27879161545367054 -757 24 .3883144993831309 -774 24 .23724873890234818 -786 24 1.1761974078631545 -792 24 .3036988868932492 -811 24 1.8299015051427616 -833 24 .9259455721430264 -850 24 .22351569341287747 -895 24 .13660569274383694 -900 24 -.6727945770224036 -901 24 -.9625025831002807 -903 24 1.42041796749178 -924 24 1.0111892552893231 -950 24 .388966155104945 -962 24 -1.0940785514914007 -974 24 1.5178766856531551 -975 24 .1528276622170957 -979 24 -.2017558335409441 1 25 -.6003378517358834 6 25 -.572547865378922 11 25 .39223024268169876 @@ -2461,94 +249,6 @@ 83 25 .4927164381834852 96 25 -2.298778368262911 98 25 .3731635967971261 -106 25 .13809277161114403 -108 25 -1.0308558817437052 -112 25 .1971812958518116 -113 25 -.8353630907774229 -127 25 -.5329711844281335 -128 25 1.014355014976548 -130 25 -.9242252537280781 -132 25 .7014734976401147 -134 25 -.2950680454740181 -138 25 1.1440275592877969 -172 25 .9628982841489352 -180 25 -1.3307232873328632 -184 25 1.289958160361894 -202 25 -.7398576765573524 -209 25 .8864054464568063 -235 25 .911292311473833 -249 25 -.08660233012384239 -264 25 -.03880004806087711 -281 25 .32710186287300397 -291 25 -.17262124927972475 -300 25 -.09026653901221113 -301 25 .9475947456282061 -314 25 .11285499371479504 -320 25 -.1802326126111515 -328 25 .7029810594602323 -330 25 .1300715561156649 -343 25 -.7634436215641623 -364 25 -.7225157589333565 -398 25 -.9493087118081632 -406 25 -1.1805318489272896 -411 25 .6743783603056019 -429 25 -1.3143397665673948 -430 25 .21307623627799718 -447 25 -1.1535893191279178 -468 25 -.43846609376408496 -480 25 .2411182063947251 -494 25 -.09956988105662729 -503 25 .561341187209564 -514 25 .35689214314683604 -517 25 1.3561764984613744 -538 25 .056197908996546656 -540 25 -1.3098037708522912 -547 25 -.885033152530369 -553 25 1.127295336055998 -566 25 .853197357961723 -578 25 -.31441274765497196 -583 25 -.13533635750911882 -587 25 .35535066579990665 -597 25 .19906562022512495 -601 25 .8644408620581957 -612 25 .43711230765447306 -614 25 .9838170644546173 -624 25 .02032355107706496 -646 25 -1.165223694017194 -649 25 1.0003305521480115 -657 25 -.06486665127457436 -658 25 1.2739009357723885 -663 25 .200177837966784 -682 25 .988207892565351 -702 25 -.8610944306864112 -714 25 -.15412310599840529 -726 25 .2754788663608221 -734 25 .25978826186174264 -740 25 .32758802146156746 -759 25 .4459092925779638 -770 25 .7485622252389689 -779 25 -.7130589686569653 -791 25 1.2170160976531978 -795 25 .46563105292836543 -796 25 -1.2573136146364698 -802 25 .29841190603168477 -830 25 .5021044764843877 -839 25 .9584435600695523 -855 25 .2579303677104166 -868 25 1.764628039922418 -869 25 -1.0025173051787764 -872 25 .1355667564461845 -881 25 -.7464176957556172 -895 25 -1.0881574507212148 -897 25 1.733815716859568 -902 25 -1.9291959484855576 -911 25 -2.006201741227332 -925 25 .4064594410380929 -931 25 .6773338276064077 -938 25 .1662373245130725 -963 25 -1.2669069984857118 -995 25 1.0455452890202455 -998 25 -.16790675802511623 11 26 .7322822994753085 12 26 -.23526623649783307 38 26 1.504272823092781 @@ -2559,97 +259,6 @@ 78 26 -.2836929884863118 85 26 .24028438431672508 95 26 -1.6131455892039603 -103 26 -.282830246151056 -110 26 .08504161885174882 -117 26 -1.0150317216849067 -147 26 -.5438645753942417 -154 26 -.8881188409198059 -165 26 1.2776855188666554 -177 26 -1.0649026332582123 -181 26 -1.363805483473932 -193 26 -.21226281477669026 -205 26 .26665456102626606 -216 26 -.3513700139732592 -220 26 -.7058432967239777 -221 26 .6953384412865343 -263 26 -.5424643661286629 -265 26 -.28558167593747036 -269 26 -.30383787823320046 -279 26 -.6859862901415631 -286 26 -1.1616043493977255 -291 26 -.5258112364379467 -292 26 .016858074143640003 -294 26 -.9899380528483879 -297 26 -.008606178747747516 -298 26 -.5470533989887403 -303 26 .2595044527696012 -316 26 .4209603381550028 -328 26 -.044435995800372136 -353 26 .9204107665179887 -360 26 .9076988799999363 -362 26 1.0601051046206187 -372 26 -.616251644779402 -385 26 -.7171975987693466 -388 26 1.2881626017119263 -394 26 -.1023995799783188 -399 26 .7778312859897222 -405 26 -.2609771947352998 -410 26 -.85360407574302 -417 26 .40397740795260173 -421 26 -.6880572389382038 -424 26 .3614352341355296 -451 26 .9904791612931002 -486 26 .5774512751587444 -492 26 -1.5024992655330704 -505 26 1.436033232615606 -507 26 -.348181122637804 -522 26 .9817194400761207 -533 26 .2299142914748587 -535 26 -1.202516508212646 -546 26 -1.1239432244935523 -564 26 -1.501409980277857 -566 26 1.0006565434526156 -570 26 -.47537418536356496 -602 26 -.34961379709541696 -603 26 .6441313563640793 -604 26 .12480303614796814 -616 26 -.4154379911116779 -622 26 -.39328548036441985 -627 26 .4154513324553989 -634 26 2.028406130609538 -638 26 -.7308745464022139 -664 26 -1.2850619384324014 -665 26 -.8458843518493063 -677 26 -.13983844596575146 -678 26 -.7021057818177038 -685 26 -.7403786294795743 -707 26 -.09191238076326899 -715 26 1.1673727099777396 -735 26 -.02690640863875754 -739 26 .881474646521398 -740 26 -1.2499863869414087 -756 26 -2.0399823808778423 -775 26 -.5358211269961685 -780 26 .10509739722399956 -787 26 -.9591713010225613 -799 26 .3000796202499319 -811 26 .5855403728746479 -819 26 -.6688151046239796 -837 26 .8125134196659476 -853 26 -.06444626045953927 -869 26 -1.0500769701545887 -874 26 -.59071635899984 -886 26 -1.0908351418519389 -896 26 -.23703984104884057 -914 26 -1.7756993265464436 -924 26 -.2585103539016911 -954 26 -1.3265550058982543 -956 26 .5540917265060485 -958 26 -.8471164994651897 -963 26 .098527888671164 -969 26 -.9911375099243532 -981 26 -.47177130732312483 -999 26 1.8043934483996151 1 27 -.29301331761452815 13 27 .05850553142335145 46 27 .19206782922375584 @@ -2660,93 +269,6 @@ 92 27 -1.027641057002319 95 27 -.2590187190976264 96 27 -1.3494850904145084 -107 27 .36616082291213403 -119 27 .7406787176103725 -131 27 -.23219132196500183 -166 27 -.9256848894634809 -192 27 .5171065656812195 -193 27 -.9233839695681907 -227 27 1.1818287635226352 -241 27 -.5903461836944832 -250 27 .07033964992346656 -255 27 -.1534058057795405 -262 27 .1629184652727224 -265 27 -.6531124926598701 -273 27 -.23088526512730403 -285 27 -.22831703569410247 -286 27 -.1733761621114659 -300 27 -.10292092150349086 -302 27 1.3085759166002051 -303 27 -.41132505730040675 -307 27 .208916863025502 -331 27 .2106726549435597 -342 27 .09523003462131363 -350 27 .1767838679428833 -353 27 .4248520447066726 -368 27 .2506712794822601 -375 27 -.6932957401774862 -377 27 .9768404156403169 -397 27 -.5796105280333722 -411 27 -.9721767464848421 -415 27 .7666044933401748 -417 27 -.4866665406092826 -428 27 .6950694972083613 -433 27 .04472939628459042 -442 27 .5531015548270908 -479 27 -.10805441261151638 -510 27 -1.0511430573575955 -511 27 -.5618960469210507 -528 27 .2197916063526621 -554 27 -.18307239539853537 -574 27 -.22802461817095482 -576 27 .9947621018762058 -583 27 .3032003285951373 -587 27 .5556935588043436 -590 27 -.1592399741472084 -605 27 -.38909768731904115 -607 27 .1957554641482936 -609 27 -.4642632373602253 -612 27 1.3500167252102881 -628 27 .4375523440483058 -638 27 -.5435585551816289 -656 27 -.3804355991854883 -678 27 -.36849312671136786 -686 27 -.8528254044186093 -692 27 -1.263536540100258 -697 27 .2276620719374053 -706 27 .29047538775387194 -708 27 -.9066151894728849 -729 27 -.16268275950093486 -733 27 -.07428060388409063 -734 27 -.7589869669082013 -755 27 .3762726230643064 -773 27 .2528515772903039 -788 27 .7793537213448387 -793 27 -.9682593740228035 -824 27 -.53086562143047 -834 27 -.561259157408195 -842 27 .6796986292053381 -850 27 .11021435809523816 -855 27 -.043977777180147656 -863 27 -.35326834044835204 -867 27 .30602768264259006 -869 27 -2.7072148997450096 -872 27 -.9648019598115813 -877 27 -2.3079058197192563 -878 27 -.1659976379845355 -880 27 .9235300890698906 -898 27 -1.339084984183679 -918 27 .4912637105596541 -920 27 -.4223445500856418 -923 27 .27960331190795484 -938 27 .2764982509498904 -939 27 .3970601332344716 -940 27 -.020188055530245885 -953 27 .7453306592094637 -957 27 .8640975599435916 -972 27 -.46297183506051864 -986 27 -.7646270688912815 -992 27 -.07651112300420036 9 28 -.7585289143147049 11 28 1.2201114941960678 34 28 1.3185127131555585 @@ -2757,94 +279,6 @@ 75 28 .9832456877295159 76 28 -.37299793588805163 93 28 .1602054873696065 -110 28 -1.1738444028147406 -112 28 -.2433914586275298 -117 28 .7003293309752975 -124 28 -.09839058566984425 -127 28 -1.061343195247597 -132 28 -.2631993266800466 -135 28 -.1641293712526813 -149 28 -.4001693386152148 -168 28 .7241143716514955 -186 28 -.7201904695817342 -190 28 -.5839092259609009 -200 28 -.5393720354300411 -207 28 .06999150451183123 -210 28 1.599351929423776 -212 28 1.3393765707500593 -240 28 .5753955863790452 -251 28 -.642153204056356 -252 28 -1.7952075958831883 -268 28 -.28192256382632763 -274 28 .3507391981694502 -301 28 .2908806543673076 -305 28 .8627987386805176 -306 28 .5419153256319788 -311 28 -.08831683349801642 -318 28 1.1445824314772992 -322 28 -.7459058043520368 -326 28 .9512334445346986 -335 28 .4580143638064297 -398 28 -.6113888785440562 -412 28 -.6261283573531596 -419 28 1.0937284501708147 -422 28 -1.8075542041481554 -427 28 -.5360257102031264 -442 28 .010562878278733895 -444 28 -.3132679134764251 -446 28 .47697363089090405 -450 28 1.0284610274609733 -459 28 -.6854219150535972 -469 28 .6255664992511107 -475 28 -.5187414498280356 -495 28 -2.165192300325805 -504 28 .9529263103242029 -522 28 .9254690394448414 -543 28 .30700765832320565 -550 28 .1538119849946668 -552 28 .9680267922356367 -577 28 -.7423628846119502 -595 28 -.9902343107507473 -616 28 -.8199602769425431 -638 28 -.5739537860560758 -644 28 1.8807275996175155 -658 28 .18931467976916333 -660 28 -1.4256675466801514 -664 28 .012493769540271815 -675 28 1.1944861585433486 -676 28 .6829048640758912 -686 28 .01054370988698218 -697 28 1.5945772066319022 -700 28 .30750164927504986 -709 28 .211791461213946 -716 28 1.0742758908303172 -729 28 -.18140792776884257 -731 28 .28665805716766596 -792 28 1.1328300000457499 -797 28 1.1545281337002309 -801 28 .5106327200779744 -803 28 -.8422002331853851 -806 28 -.3357226013352054 -807 28 -.6053325899363238 -822 28 -.35240364693966586 -839 28 .03624255917956597 -842 28 -.10250295071905087 -848 28 -1.5727669639141624 -855 28 1.1509729536998499 -860 28 -.4580761852992407 -894 28 1.0744489333399643 -907 28 -.48297690724205367 -911 28 -.9270395319007245 -912 28 .8519130787732363 -937 28 -.8148438832431278 -942 28 -.524207588344409 -947 28 -.8046137952047342 -949 28 .021157189231235454 -950 28 .08885901375447486 -953 28 .15783801579903944 -983 28 -1.1677597772307187 -987 28 .039761548000206676 -999 28 .576683542896627 2 29 -1.0538701031144937 3 29 -1.286283616696739 9 29 .3848661371422997 @@ -2855,109 +289,6 @@ 58 29 .11704292715922007 60 29 .0683993108231899 94 29 .2943584906535324 -116 29 .44475159053406693 -118 29 -.409246581838481 -119 29 -.4987187622291618 -123 29 .7777782815634113 -125 29 -.7127661056860728 -126 29 .19417016765077877 -127 29 -.2029370815763614 -129 29 -1.8509361342908512 -132 29 -.3942788607099531 -136 29 -1.9453410775522735 -144 29 -.6782388820207278 -150 29 .6587137810755865 -151 29 -1.1005803051603762 -159 29 -1.28146358440156 -165 29 -.4665188922708292 -186 29 .054459812698373064 -187 29 -1.6661592078881802 -197 29 -1.4552542253478569 -201 29 -2.1068162431692845 -208 29 .4093195275633967 -217 29 -1.0762851165461922 -229 29 -.5465656828400988 -230 29 -.19275169128867542 -232 29 .0855739543867333 -235 29 -.5861557395112982 -236 29 .5655844849081078 -238 29 -.8703050597653242 -255 29 .46614343669297453 -265 29 .6829664043222307 -268 29 -.8357529536041801 -272 29 1.6321553517583913 -292 29 -.7844513259029426 -295 29 -1.3537237054380427 -329 29 -1.7353671619546094 -331 29 -.4951253053762439 -346 29 1.1663506710813594 -350 29 -.15777825141328616 -362 29 -.9568061863161489 -384 29 -.008992850467314129 -385 29 .39339749281008063 -401 29 .5505701667487853 -412 29 .14119667310880873 -418 29 .9051215154568574 -422 29 -1.4006189162186273 -432 29 -.9104825492485558 -454 29 -.3206732822742599 -463 29 .5815665143247489 -481 29 -.4100348474435344 -485 29 -.5692079988657672 -494 29 1.2265105468383186 -513 29 -.8858648315444885 -526 29 1.1236703311419403 -553 29 -.13719518220673832 -558 29 .5067165467422823 -568 29 .45371742603630233 -576 29 -1.2267086198337542 -589 29 -.4162080118197429 -608 29 -1.1734520408893325 -616 29 -.5718543849773343 -626 29 .74848888854328 -628 29 .05660492134835521 -651 29 -.5575539355274013 -654 29 .6040337144255594 -659 29 2.0311233179354424 -670 29 .4343382622257656 -671 29 1.052129878467477 -679 29 1.363378733987593 -692 29 1.3603232206476914 -695 29 .11375421043861317 -703 29 .2929654189113632 -718 29 -.5466742519341042 -729 29 .2149409513101082 -739 29 .8786195060876579 -747 29 .18306048647700518 -761 29 -.0887113107681957 -774 29 -.40851017831991265 -779 29 .2435802537874584 -784 29 -.12662128525041905 -790 29 .5435646156480328 -792 29 .496158876415822 -804 29 .16115127938442564 -846 29 -.6882543750206802 -853 29 .34299771901803733 -872 29 .8026481595956487 -874 29 .6013498086501 -876 29 -.3585190834001973 -884 29 .702078498399086 -889 29 -1.618676534098179 -899 29 .02598980027616593 -915 29 1.3905379165285767 -921 29 .846608650471536 -927 29 -.3361987586474424 -947 29 -.588851013544686 -949 29 .5941208814540019 -950 29 -.6552650329997427 -951 29 .5950917309077505 -962 29 -.09710697512558664 -968 29 -.6767708469362056 -969 29 -.4186504313578522 -972 29 .10378930554884945 -983 29 -1.1392828260609305 -985 29 .406243513273183 -994 29 .6634025443630361 5 30 .4613749701372738 14 30 -.3964413219632601 16 30 .1432645520460615 @@ -2966,89 +297,6 @@ 74 30 -1.3289740162375883 91 30 -.6469463252578471 96 30 -.9963552823269065 -134 30 .5169038434635665 -150 30 -.6764579246937305 -164 30 -.347735508416589 -168 30 -.23689733041552005 -169 30 -.1285880928157319 -188 30 .4887050025742486 -193 30 .31719923738659406 -199 30 .5816706232311093 -211 30 -.6595940804919165 -217 30 -.8288205307944552 -220 30 -.4573109454158237 -240 30 .26883386813084836 -278 30 -.6958223353446562 -295 30 .6571823354945867 -316 30 -.9931079354826101 -325 30 .07433675321902324 -327 30 -.1572562107445482 -358 30 .4432175696274975 -367 30 .2555513373245544 -368 30 1.6727259509659598 -370 30 .07607042924121246 -399 30 -1.3202850392217214 -400 30 .029661882648010535 -401 30 -.07174867679176755 -408 30 -.38588473279258667 -419 30 -.6472178912780888 -437 30 -.119903461874853 -442 30 .5784920937970837 -445 30 .4438222673822667 -446 30 -1.5605045518490892 -453 30 .05006817230231997 -455 30 .8667607039099113 -460 30 .77789394462765 -476 30 1.1071067095107479 -484 30 -.143364191539248 -491 30 .012899641273922548 -493 30 1.2927394795114293 -496 30 .3124615193052584 -501 30 -.34410870225076967 -532 30 .0661783373684948 -534 30 -.3565499783255717 -543 30 -.0946849171177326 -583 30 .08326470665450575 -586 30 -.38235113869611 -589 30 -.2072064313457956 -592 30 -.7262789282517855 -599 30 -.4719962373129919 -601 30 .5650725181703949 -640 30 .08307298637267457 -645 30 .36201799522723505 -652 30 -.46900070983199127 -655 30 .6350757596536704 -659 30 .3680211919396475 -660 30 .6687600690947657 -681 30 -1.0571908840034274 -716 30 .4005200795513263 -727 30 .5298695893664143 -732 30 .5955907754435588 -745 30 .19109984671359107 -750 30 .0009325441362908402 -751 30 .31748887622064537 -756 30 -.09358387337841723 -762 30 -.14435116066017573 -778 30 2.3197141165152906 -789 30 1.2498820721998438 -795 30 -.4973022774096963 -796 30 .4563221497474416 -800 30 -.4126876366037071 -816 30 .16116353732812966 -819 30 -.10632798334371782 -826 30 -.5037609190424175 -834 30 -.24869561385912065 -840 30 .3891127657624226 -846 30 .39251304786171326 -865 30 .34602708327395953 -883 30 -.561905621291322 -888 30 -.01998557522873362 -892 30 -.3561185102579077 -908 30 -1.5168993921540186 -927 30 -.4924247369281253 -976 30 -.44965481649756067 -981 30 -.3185419324112253 -995 30 -.5272881305625765 4 31 -.007709467817307185 9 31 -2.1645381186636405 23 31 -.008874212435669174 @@ -3059,103 +307,6 @@ 68 31 -.8620927443235726 89 31 -2.4597971759482498 100 31 .3354984856648881 -110 31 1.644695836613559 -129 31 2.784948221573523 -132 31 -1.680993678840346 -140 31 1.1381355991174014 -144 31 -1.3515697246503424 -159 31 1.313628363866424 -160 31 -1.3636441357217242 -161 31 1.7153102309460122 -162 31 -1.9910499839000635 -170 31 -1.6013967887443814 -184 31 -.16847840781466733 -192 31 -1.1499370816543943 -194 31 -.3766336109151521 -204 31 .4800095514857968 -206 31 1.0641131856466604 -207 31 .010917719191467161 -218 31 -1.9380724596274845 -241 31 .590735260769212 -251 31 -1.6216848401790398 -253 31 -1.2966775258329237 -254 31 -1.142391449845884 -265 31 -.7325995819577715 -267 31 -.5287224981894305 -270 31 -2.3447690798454737 -282 31 -1.2389262819600946 -297 31 -.7770560942857996 -298 31 -.900522977228208 -314 31 .4248292577575127 -318 31 -.35339874697954426 -322 31 .015842443590853558 -333 31 .04988628586203572 -334 31 -.006190276299540186 -343 31 -1.9522641188945955 -344 31 1.50121405654805 -348 31 .09630781490928676 -363 31 -1.4144068663481995 -368 31 -.11233255208453517 -381 31 1.065188513709071 -414 31 -.18974158467432806 -417 31 .8275618281420914 -432 31 .6060998271111779 -439 31 -.4579009460662602 -448 31 .22336975689041494 -454 31 -1.1569676313409532 -460 31 -.3046028695863003 -464 31 -.6683961988682441 -473 31 .7337875360296138 -479 31 -.6077450408750376 -492 31 .5977716819618748 -504 31 1.4126505064336412 -525 31 -1.456322341938789 -528 31 .12173561827156874 -532 31 1.6492112912103782 -544 31 -.19220569492081324 -559 31 -1.075881939427438 -567 31 .7933753189228772 -571 31 -.25769568863019526 -584 31 .3057997888431153 -599 31 1.1338986259208037 -636 31 .5835344254864283 -639 31 .4759447392482687 -645 31 -1.3119866578200146 -654 31 .7547643949697831 -658 31 1.422907566677131 -664 31 -2.211254184260168 -671 31 -2.232617677374847 -676 31 -.8709276125172712 -695 31 -.5417003409683425 -700 31 .7651207393633325 -707 31 .8647700854590373 -764 31 -.6889878174210026 -780 31 -.2690821360067125 -811 31 1.3959390456560068 -822 31 .12017842913539765 -825 31 1.1120520147319322 -835 31 -.005400678476151222 -839 31 .8609132702510504 -845 31 1.7636837457905574 -850 31 -1.7608690998038856 -856 31 .10620314296385966 -858 31 .30447650682576366 -883 31 1.0867542743373149 -885 31 1.2124226636288875 -895 31 .8303002795830106 -896 31 -.3881539152582535 -906 31 -3.3540166577240833 -912 31 .5545771159605984 -931 31 .9377834130500383 -941 31 .11988671765713552 -942 31 .6262780439569 -943 31 .9964266677247184 -947 31 -.11207416970956949 -948 31 -.02851123324276722 -950 31 2.235507566803645 -970 31 -.6047171176167221 -982 31 .3936393557002602 -989 31 .30979342401074067 3 32 .9313349828526281 16 32 -.2731600265663719 30 32 2.167709412097289 @@ -3166,99 +317,6 @@ 63 32 -.10749303916100461 67 32 -.8178843781693027 70 32 -.11921881136425719 -119 32 .39433379826865894 -122 32 1.095150836604684 -124 32 .34031525680735253 -165 32 .9056183689556601 -166 32 .6928574708783601 -168 32 2.513782738228347 -198 32 -2.351218328235711 -200 32 .8035106679169126 -205 32 -.05816237804488222 -210 32 1.3397023604982017 -215 32 -1.01078167652987 -247 32 1.8313179479854216 -263 32 1.4167156758271533 -265 32 -.3798198671873338 -267 32 -.4633481742338385 -270 32 .21894908560199827 -276 32 .0618900194356724 -287 32 -.4187375237284293 -294 32 .5646822203627185 -304 32 -1.2044999273079355 -311 32 .33071075558746554 -315 32 .4225729055752279 -329 32 .3225223148868679 -341 32 .24426425898233903 -357 32 -1.1488787943203707 -363 32 .680639610677429 -395 32 -.7825892482821288 -419 32 -.4529013737988596 -422 32 .9292186263981923 -426 32 .9279613866978317 -455 32 .9476703516322967 -463 32 -1.2738584287453307 -478 32 -.43096924755282007 -496 32 -.025999683126865687 -497 32 -.036797121983566425 -504 32 -1.046153044338013 -509 32 .6475243364740325 -514 32 .7940405046604061 -518 32 -.21904456675929126 -519 32 2.7305233494866954 -539 32 .9328863741311607 -543 32 -.6262230719646533 -554 32 -2.14876452107243 -555 32 .6089801100677666 -565 32 .07940296549088696 -572 32 .8458676600907111 -577 32 -.8732238315416628 -588 32 -.753916245861718 -593 32 .4622033829185952 -597 32 -.3906303632233109 -603 32 1.7284132191479316 -613 32 .1731764172043003 -627 32 1.3930926881312926 -642 32 -1.5104425928475524 -643 32 .9938645128341635 -650 32 1.0542397855444972 -655 32 .47588755480527034 -679 32 -.5109097581328109 -683 32 -.4643967134066715 -693 32 .9059251326603841 -709 32 -2.1763700826751586 -717 32 .9452096711204867 -726 32 -.9949432092706454 -732 32 .5682419894128543 -752 32 .6154878836397333 -756 32 2.785930765884849 -760 32 .8725894605945779 -769 32 .30226632329588476 -770 32 2.511829982487621 -783 32 -.47414918106095005 -785 32 .9349108023881143 -798 32 .5659565323011881 -801 32 -.5395640173304085 -811 32 -.10511031877687159 -830 32 -.12520276602432276 -836 32 .8371637488846077 -837 32 -.4840713905166958 -846 32 1.3162833716195361 -861 32 .993761346252142 -865 32 2.1096906324170703 -874 32 -.6068970924704004 -882 32 -1.1676687667353238 -900 32 .3530069323001558 -925 32 1.302686480308309 -930 32 .6444443042125453 -932 32 -3.0707341985915315 -943 32 -.7193432623753433 -967 32 2.2612994044073935 -968 32 .4622385055415478 -975 32 .04066459823188688 -987 32 .4883490785147378 -988 32 .8462188640496053 -990 32 .2434409594137094 12 33 .3143625207161892 52 33 .6208668235340186 54 33 -.0014173551538826101 @@ -3269,90 +327,6 @@ 90 33 -.28007648017785197 93 33 .02388314458621635 97 33 .281522709380813 -129 33 -.3968961972293887 -131 33 .4422563939051292 -147 33 1.192143990099997 -151 33 .5290206371512567 -166 33 -.9035781323012232 -167 33 .7537243489554056 -179 33 .5615113483858921 -195 33 .4449085478450706 -209 33 .469043736177927 -213 33 .18540876624267347 -225 33 -.3254703467757929 -242 33 -1.2830212300126034 -285 33 -.3944112159623144 -300 33 .10047263186940614 -330 33 -.6199357089537885 -346 33 .0896858327362208 -352 33 .036260133711195755 -358 33 -1.269401045495875 -360 33 -.05262541976468872 -381 33 -.21373448785813862 -394 33 .16462656227733855 -418 33 .6785789005093646 -452 33 -.5219867411506369 -457 33 -.5402847242816755 -460 33 .555729642966817 -472 33 -.06566722792395711 -473 33 -.9428769623878018 -479 33 -.4211951736604732 -481 33 .6796511597701911 -485 33 -.17262386383424944 -486 33 1.0482389282237283 -500 33 .23990362321483066 -534 33 .16367227107533022 -538 33 -1.0681822608507257 -549 33 1.0883150650364475 -569 33 -.057886385642850924 -572 33 .33277798079917875 -573 33 -.4042005637400433 -576 33 .17831535245271624 -580 33 -.2813603933148326 -581 33 .5215242543381757 -593 33 .0858940886719923 -597 33 .17963071767125025 -598 33 -1.1220176981610477 -599 33 -1.8409515393560687 -602 33 -.14594647650314016 -636 33 -.5244649539814799 -646 33 -.04586838913568744 -657 33 -.09924542274293958 -658 33 .3769185442456474 -667 33 .17279059900447147 -669 33 -1.0048478760972035 -705 33 .06635805388538027 -706 33 -.5658968430029317 -708 33 .10832094190389292 -721 33 .8465181812904188 -728 33 -.11262102851580649 -729 33 -.07910016772793457 -735 33 -.3532320695739417 -752 33 .6025590641474986 -753 33 -.09583817997072494 -763 33 .6509796238184191 -781 33 .8084676308708434 -784 33 .05482652270485136 -797 33 .49828272995146716 -813 33 -.1531692179315677 -819 33 -.6678431212532583 -860 33 -.5910368582599628 -871 33 -.3331331595682484 -892 33 -.015495171120901652 -897 33 .19525166092932136 -908 33 -.5811111613513198 -916 33 -.10131058029546974 -932 33 .04823328605336301 -936 33 1.412398992485754 -937 33 -.3681326448774372 -939 33 .4729957522570011 -950 33 .11454158802791849 -959 33 .7525236338337591 -971 33 .3131512910543749 -974 33 -.773069043689509 -990 33 .6403402246042865 -993 33 -.5405262354519171 -994 33 -.8388847413541025 15 34 -.5913174786129093 18 34 -1.1528665899864394 19 34 -.39144824177611526 @@ -3360,7 +334,6 @@ 30 34 -.46649985973993613 35 34 .5683118214380578 45 34 .961459127279787 -49 34 -.5407817379944322 50 34 -1.0660784981108578 53 34 -1.1584141361306108 62 34 1.5938774791102834 @@ -3368,107 +341,6 @@ 87 34 -1.276522096609288 95 34 1.1197212938089285 100 34 -.7498477394284147 -106 34 -.03703051873172583 -116 34 -.10641775072874123 -117 34 -.2564808769279453 -121 34 -.2787693758928568 -127 34 -.7148797649159981 -132 34 .29259788130570086 -140 34 -.6610109350800476 -146 34 .6244844506907485 -148 34 .5374429184535984 -153 34 .8664163345947271 -166 34 -.2080688235129342 -182 34 .2033846046638142 -188 34 1.0252260032437872 -193 34 .5636838322757455 -199 34 -.15199861920980431 -206 34 -.43544151471092596 -212 34 1.2145819372988922 -241 34 -.27065394273688753 -249 34 -.18734015970139206 -254 34 -.4299837511534602 -255 34 -.5079193172932583 -257 34 .3225123063110559 -277 34 1.0807492222463888 -278 34 -.7887393200659993 -279 34 -.32065346587687127 -284 34 -.13350380205398063 -297 34 .28728608783751486 -302 34 .4950896423848552 -304 34 .6422965079878481 -315 34 .19585315482728766 -338 34 .002237052652134114 -349 34 -1.2208086324999052 -374 34 .9662121090795961 -375 34 -1.2151123566159592 -379 34 1.3660377810912172 -380 34 .9769990444384034 -383 34 -.5187144120228132 -385 34 .17616349898256545 -410 34 -.25294694558581887 -419 34 -.15867582912442763 -426 34 -.6332029806232627 -430 34 -.5377794108536318 -442 34 .4348551353305359 -460 34 .4456681167959823 -461 34 -.123030612537096 -472 34 -.3395304750441856 -489 34 .7524483218111873 -493 34 .19956405802356403 -515 34 -.18742347374616516 -518 34 .758316493150994 -520 34 -1.7093943180702516 -534 34 .5492420113658081 -535 34 -.38589861111696 -547 34 -1.356293769598337 -551 34 .11078114566476292 -562 34 -1.06091643934805 -584 34 -.3437236952638421 -585 34 -2.9766174758566217 -589 34 .3785933592367685 -592 34 -1.8093035327628826 -593 34 .9232072936272883 -597 34 -.004662719008792088 -633 34 -.487075602671176 -638 34 -1.3925107256086535 -644 34 -.05567769824753262 -663 34 -1.4447782771578328 -682 34 .6742470160776702 -692 34 .5679890046888958 -693 34 -.3393817419855417 -698 34 -.7146975038179664 -714 34 1.3453405955417115 -723 34 1.3180438820889087 -740 34 -2.5593526004772946 -750 34 .48344923383042265 -752 34 -.05324650358791494 -753 34 .5954148877557581 -755 34 1.8652376963676902 -758 34 -1.4030530564100643 -777 34 -.8085137825721955 -789 34 .2083041592701059 -796 34 -1.4113070730293034 -810 34 -1.2860236129152436 -816 34 .09963060852844016 -822 34 -.29042077847959635 -839 34 .30336805775424636 -843 34 -1.2876254652892 -851 34 -.6677247882122906 -854 34 -.5687593143509673 -868 34 .024685689655907173 -869 34 -1.0707135873301519 -875 34 .6207700988666482 -879 34 -.26308320917970734 -892 34 -.7650462193248212 -893 34 -.6578075302933684 -911 34 -.6299025528203586 -929 34 -1.1436537925762658 -936 34 -.9249705201290063 -944 34 .08566936861983113 -972 34 1.0144116688347762 -977 34 -.1169113725679336 -981 34 -.9751972028779443 6 35 2.1689432083540496 8 35 -.7407265504320089 15 35 -.006614733297172465 @@ -3483,101 +355,6 @@ 67 35 1.5938037670092986 74 35 -1.1344170532877365 98 35 -1.0157409432391509 -109 35 .3305673338584502 -148 35 1.0429144338419292 -151 35 -.04839549329385105 -154 35 -.21493323565165467 -158 35 .17842761715783823 -188 35 -1.2678046427390857 -190 35 -.9873452892828869 -199 35 -1.272382328274912 -215 35 -1.0154172035642985 -226 35 1.034950477760784 -231 35 -1.055709370377103 -235 35 -1.320152873909466 -242 35 .7944423123297064 -247 35 -.7170603243891867 -283 35 -.27316140855675464 -307 35 -1.3444607781060618 -308 35 -.2924968638091794 -311 35 -1.4180074432553913 -315 35 -.3100256472139538 -317 35 -.9637831977038991 -345 35 .03457370764725924 -346 35 .9899373805955883 -373 35 .1499088046529895 -399 35 1.7117163403630529 -400 35 -.7842941649183588 -403 35 -.5625196768894324 -406 35 1.171497575565261 -410 35 .7297325850304917 -415 35 -.9874014190645759 -446 35 -.7336461021350261 -468 35 .04610209385761477 -483 35 -.7881438165525585 -488 35 .8321233032238687 -489 35 .009235797635130985 -495 35 -.5392547337181888 -497 35 -.1926075329352292 -530 35 -.29112160532899345 -547 35 .29968258823931265 -557 35 -.057611759833497866 -561 35 -.8771198222594077 -566 35 -.5890420926438974 -600 35 -1.9037408743686774 -614 35 -1.7233575799878684 -617 35 -1.8929318880477497 -621 35 -.25385492937641385 -640 35 -.3471120754587181 -651 35 -2.5478321427720165 -657 35 -.0768366074524556 -677 35 .34786063200129425 -694 35 -.6548531306180413 -696 35 -.2067162556511128 -706 35 -.22739343386768823 -707 35 .344621235666503 -708 35 1.1656169175603588 -710 35 -1.7127789748301316 -717 35 -.45604485486377055 -732 35 .0965055641062223 -760 35 -1.8180672476030026 -765 35 -.21943263874068447 -780 35 1.8515541175418058 -791 35 -.8599914827654932 -794 35 .8369968685424353 -797 35 1.3400025731713265 -799 35 2.537720606915923 -810 35 .9933638772946748 -819 35 .6000216002845811 -827 35 2.0491991394751925 -831 35 -.5611279486989207 -838 35 -.5250187436065392 -845 35 .2536415448746303 -847 35 3.35816835254494 -849 35 -.7412465426324832 -852 35 1.3846868871826103 -854 35 -.27596156061793753 -856 35 .005988413096493625 -893 35 -.25844797529504626 -894 35 -.6464537411386546 -898 35 2.0969652501465266 -900 35 1.183816359775505 -901 35 -.8327714615409538 -907 35 .8502817799251526 -918 35 .19046483482249799 -922 35 -.17340973495473966 -931 35 .042328190487514586 -937 35 -.22179028642990792 -939 35 -.40052263978154257 -940 35 .0025259654058167706 -960 35 -.6876485130273153 -967 35 -.12031727859310841 -979 35 -.21469702073073854 -983 35 -.6947622934189848 -988 35 -1.4481328791768986 -995 35 -2.240826620342675 -996 35 -.4710540308056964 -997 35 .9181729842288568 10 36 -1.596340409542879 24 36 .4272664814164577 25 36 -1.8019522069658649 @@ -3590,87 +367,6 @@ 83 36 1.2365489718930514 84 36 -.3360417633581673 97 36 -1.1113293319966553 -107 36 -1.4804587288069255 -137 36 .24805478181067037 -140 36 -.19704625909730472 -149 36 -.48698156581542823 -163 36 -.1731839700690086 -171 36 1.2976462853364013 -175 36 -.7529031712476694 -197 36 1.3353459674686081 -202 36 -.28663000100485453 -203 36 -1.6948425422566085 -229 36 -.31885698920343764 -234 36 .9795697366437224 -239 36 -1.7005262710409075 -242 36 -1.1890055685826293 -248 36 -.7488080308580588 -250 36 -.2894355752923163 -262 36 .8172582907205249 -264 36 -.4408294532734577 -265 36 -.33890942206554314 -277 36 -.7197564185807919 -284 36 .1589179879436866 -286 36 .06728413574863676 -289 36 .23587805859487251 -297 36 -.915065392854308 -324 36 -2.5424037121458953 -326 36 -.021285295424531038 -328 36 -.07798503630089523 -379 36 -.7600087615800425 -390 36 .6393643334194978 -392 36 .03186637920871921 -399 36 .09156839392230884 -414 36 -.7153821131353251 -417 36 .4360689881457396 -424 36 2.5590638789928435 -425 36 .6815474506260786 -432 36 -.39799002164163205 -437 36 .35479031723613585 -451 36 -.8624627167383001 -454 36 1.1807963030827344 -457 36 -1.9171160699603138 -491 36 -1.4465301980374479 -495 36 1.2099105654547597 -497 36 .222037475279385 -516 36 .3123794077044043 -528 36 1.8511737915911128 -535 36 -.8829900894901475 -538 36 -.48806234283852323 -566 36 .5618846717272913 -585 36 -1.5137645555339947 -600 36 -.45529600082953603 -604 36 .8546156687710774 -610 36 -.23046009186539418 -638 36 1.8523922534343276 -643 36 .3197373722878679 -657 36 .02820492416711537 -680 36 .09392566678777622 -682 36 -1.1303568255891145 -686 36 .6917568653526434 -697 36 -.6930687303317052 -698 36 1.5990014397988879 -725 36 1.7981414136738028 -741 36 1.3012611525175497 -751 36 1.053022692214641 -752 36 .9754462930331491 -791 36 1.1113419544307632 -813 36 -.8834715217044252 -822 36 .9184153749077304 -832 36 .0721812118444379 -840 36 -.420565710885657 -867 36 -1.3220839030402287 -871 36 -.3222836560604009 -875 36 -1.2246800527795632 -881 36 -1.2872524552393434 -901 36 1.5348715932923838 -922 36 -1.6009769848974196 -951 36 -1.2017770722209868 -968 36 1.0828388206356103 -972 36 -1.311517868940773 -977 36 -1.7740459196984042 -993 36 -.5387438753368978 -12 37 -1.1769146551474883 14 37 .9662792026121622 22 37 .5926078520498841 27 37 -.1293835332180282 @@ -3681,7 +377,6 @@ 48 37 -2.5001076694957254 49 37 .34873536512041264 57 37 -.23133903533238037 -61 37 -.24405689491891658 67 37 1.237316608096115 68 37 .833306300470531 71 37 -1.1604948081713766 @@ -3689,108 +384,6 @@ 76 37 -.2380665265432864 87 37 .844210221420916 94 37 -1.9371641560094501 -101 37 -.8000687622444951 -120 37 -1.0728842641934655 -121 37 -1.1298021166708352 -123 37 -1.0666515640060483 -135 37 -1.4799605569796612 -139 37 1.6165659934788215 -146 37 -.5754858312117619 -148 37 -.09395291289397145 -154 37 -1.3036242905687705 -155 37 .2042963292438425 -163 37 .3304194600011545 -175 37 -2.0688312070126305 -201 37 .7918973544496736 -225 37 1.3147808983857376 -242 37 1.9951986347172646 -247 37 .08980935834293019 -249 37 .4326442344594872 -259 37 -.16116463238545234 -268 37 -.14912160538838465 -271 37 .8517482415724263 -282 37 -1.2769409992426146 -290 37 -.759582497655503 -293 37 -.44614529102199246 -314 37 1.1863468538253228 -322 37 -.9581116796400935 -334 37 1.3191777706106866 -345 37 .5054432881553385 -356 37 .006373739109016056 -373 37 1.4450549150058007 -383 37 -1.4890628711518894 -409 37 1.7296204896535234 -412 37 -.2886490228637158 -416 37 .2865205481493958 -434 37 1.1514958423647812 -443 37 -.5854250895818169 -448 37 -.666095823926821 -453 37 -.2127897129646211 -454 37 -.5713164502583303 -457 37 2.1184973038286032 -459 37 -.07751291528727493 -460 37 1.0744507211486243 -471 37 2.170682033590025 -472 37 -.6006588183431107 -474 37 1.5246994627627202 -479 37 -.14957329915553796 -486 37 .617102393170844 -492 37 -1.1184177726142626 -510 37 .17554162954138494 -513 37 -.2655647966214755 -521 37 .005966466236973722 -530 37 1.3331024419155755 -538 37 -.8030073809980818 -545 37 -1.1594515829026821 -552 37 -.8633821134493572 -561 37 1.1864082384548875 -577 37 -1.6971633093683183 -590 37 -.9858375903767209 -595 37 1.9015085351945893 -629 37 .17106455389302838 -631 37 -.4197372723449253 -637 37 .2509453695131609 -647 37 .5452179971762408 -648 37 -1.7517173364608722 -671 37 -.12084015093955452 -698 37 -.45728745041380126 -700 37 .2485954628269855 -715 37 -.13031055283615328 -724 37 -.5086513806386708 -727 37 .6654967398185179 -743 37 .6128391419838047 -746 37 -.6082220729063156 -747 37 .6866429157215717 -760 37 .6841753495599118 -776 37 -.6435420977491721 -780 37 -.6698112601912828 -800 37 .564243340122081 -821 37 -1.2450785009390888 -826 37 1.0259354681718684 -828 37 -1.5418408871986387 -830 37 -.32754112393674767 -841 37 .41070347290804465 -843 37 .4515971556948857 -847 37 .14033040142612943 -862 37 -.011332881341218987 -863 37 .6160014679685628 -870 37 1.3534503411927692 -871 37 .13942940227667883 -879 37 .9041700393228266 -880 37 .7983710850786516 -891 37 .53332694938628 -895 37 -1.0352881822620013 -898 37 -.42767512367015237 -911 37 .5017054876943894 -912 37 .7916642576483031 -915 37 -.01642713224513731 -930 37 .5630652309626267 -939 37 .4029236798424525 -946 37 -.5412489505356455 -969 37 2.4055130527835797 -977 37 .8585793724196904 -985 37 .27086533615075975 -6 38 -.3745208924620927 13 38 .2000829942029031 25 38 -1.7848971273049732 26 38 -1.4371864577295166 @@ -3798,93 +391,7 @@ 59 38 .10817109312291529 61 38 .9901862902865257 67 38 -.13636598045172973 -75 38 -.15306542748344742 92 38 -.0435781178433918 -105 38 .6043726462621712 -109 38 .530282792962862 -117 38 .24650488864681494 -123 38 .8926972521391543 -127 38 .47258820665317725 -130 38 .4505537432151353 -150 38 -.6142548537894094 -157 38 .7553222606168308 -159 38 -.08973669494315395 -165 38 -.08410500434866719 -166 38 -.5641451948963343 -190 38 .47557683711950594 -209 38 .07942675686904532 -239 38 -1.4070184808991153 -242 38 -.8532875689640939 -246 38 .29731425102911085 -248 38 .4675769150533313 -254 38 .0056949785236232175 -263 38 .2057096940889452 -274 38 -.0014604218834977636 -299 38 .3785674530666006 -302 38 -.20533299480038875 -305 38 -.2631393644376525 -319 38 .7856643910748305 -336 38 -.30806974344247084 -345 38 -.6158152975293375 -355 38 .07098387707246684 -368 38 .2135705550293871 -384 38 -.04187754339516927 -386 38 -.41098435675664674 -387 38 .43523933782364876 -394 38 -1.4455309572591728 -397 38 -.374003622849675 -398 38 .48256532918549844 -418 38 -.7473432927119433 -420 38 .8253392242864594 -428 38 1.196566300978804 -432 38 -.4801376340491408 -446 38 -.44410389815166085 -454 38 .0036590158794343464 -508 38 -.11763257565174076 -509 38 .06568079938766784 -513 38 1.3186168842806958 -521 38 -.429151678486354 -535 38 -.3320726365816785 -538 38 -.23911233872393403 -539 38 -.39408866321922986 -540 38 .5615608396446584 -577 38 -.1545792389065584 -591 38 -.03583998443879427 -600 38 -.2758771085734831 -616 38 -.6886990671775953 -625 38 .05972085762847629 -626 38 .9797768501726991 -643 38 -.7803228661580514 -645 38 .13247414351003675 -646 38 -.9324108421641016 -650 38 -1.4078747478846119 -656 38 .0711857339311699 -766 38 -.6492712281371338 -774 38 .08338237752276467 -780 38 -.5637368696090533 -783 38 1.143316233906743 -798 38 -.7363889454080781 -800 38 .1849868159060967 -802 38 -.6325400592791173 -805 38 -.34008268420344046 -806 38 .05770851079834617 -821 38 -.6003783011673822 -833 38 .765495289737177 -837 38 1.5815555870432751 -839 38 .3021502024186291 -845 38 -.8614295962427135 -853 38 -.2529863129529539 -856 38 .040540957106683664 -859 38 -.23500248021770037 -880 38 -.23799338658481708 -884 38 -.10073939836041551 -909 38 .6414185615282875 -937 38 .09656784481072289 -966 38 -.4078113487004003 -970 38 .3054254721898127 -976 38 .8450942095423782 -986 38 .815904278772044 -997 38 -.5844385477382587 7 39 -.4990206613550514 22 39 -.6468670531359176 28 39 2.4358790981394636 @@ -3894,97 +401,7 @@ 55 39 .6220835804508342 76 39 1.3060396267867582 77 39 .27432786396835107 -85 39 -.16567348007100857 99 39 2.486019846165284 -120 39 .2876728314659762 -131 39 -.07779097260186031 -150 39 -.5066301712826144 -154 39 -1.0073164439867552 -173 39 .43055531423585514 -174 39 -.8504891242587135 -176 39 -.29252279960726857 -179 39 .5544677064717662 -187 39 -.21709872606973996 -192 39 .48165136736055464 -196 39 -1.9099761030784934 -198 39 -1.3035301186125554 -205 39 -1.6885572666191435 -208 39 -.9239466629477189 -229 39 .8675986516736367 -230 39 .7568136494663393 -232 39 .09746801842415706 -233 39 -1.1968805273785648 -235 39 1.1164844187667324 -238 39 -.5575051680701667 -252 39 -.8406392296344378 -258 39 -.9611634746510924 -260 39 -1.238876334810267 -279 39 -.26235628650278076 -288 39 .5101300351673218 -291 39 -2.7552533937800527 -296 39 .022706847650681858 -300 39 -.574887394365973 -301 39 -.007743473784029051 -309 39 -1.4846315881871461 -315 39 -.46428291931688326 -320 39 -.9136230345934994 -321 39 2.3694171213673827 -322 39 -2.9460586069630956 -367 39 .46003526856808435 -383 39 -1.4996581589947122 -392 39 2.089636009253201 -412 39 .31527859897376975 -413 39 2.2724060374211446 -449 39 .7301624296771997 -483 39 1.206501027836392 -505 39 -1.4552337562499684 -524 39 -.5250150496336733 -539 39 1.2234370397880805 -548 39 -.45879021589721375 -567 39 .08613399890967652 -575 39 -1.556567225452565 -586 39 1.2439031154711282 -589 39 .13682645658644543 -597 39 -.36154505375205104 -599 39 2.3132426795345147 -602 39 -.4922595405222349 -618 39 .3219989841757005 -637 39 1.4992469609900638 -640 39 -1.2342411000502231 -647 39 .562405965698312 -652 39 .9960880691094958 -655 39 1.3227925576195456 -705 39 .4218296236104766 -734 39 -.27400696686657866 -736 39 -.9805098656792529 -739 39 -.5792828264522163 -760 39 .36501237140633686 -761 39 -.09296026037716762 -762 39 -1.0985098204041066 -782 39 -1.5198309850393694 -785 39 -.4954720072360186 -800 39 -.44447089327911676 -804 39 .200507755962188 -838 39 1.2619060785150762 -842 39 1.1019207145901224 -845 39 -.0972684446874516 -846 39 1.451197830398738 -853 39 -2.097324339731098 -862 39 -.6486850218644136 -877 39 -1.5299568623106143 -893 39 1.5813952471161645 -894 39 -1.4431890007448895 -902 39 .10536622084022593 -909 39 .9355469417793986 -929 39 -.16712709910871243 -933 39 .1334412499118288 -945 39 -.4243101463299983 -964 39 -.4225808089659541 -966 39 -1.722512153623337 -980 39 -1.3295573686325166 -989 39 -2.752380787328297 -993 39 -1.7129652980266192 -996 39 -1.3957204547829931 18 40 -.4366977852756713 22 40 .03310506409941058 65 40 .23624398838379884 @@ -3995,79 +412,6 @@ 94 40 -.23065651583339808 97 40 2.9594955980551907 99 40 -.7899705798491203 -103 40 -.5324003881739187 -107 40 -1.0241025143616664 -123 40 .227363663411419 -128 40 1.9834711585143818 -130 40 -.8923244219932208 -140 40 .228332578904537 -162 40 -.3543851499495566 -164 40 -.2254709839755752 -192 40 -.3258074462326701 -198 40 -1.415013229210043 -208 40 -.23239856835061248 -220 40 1.1608287601363116 -245 40 .7193212595746669 -248 40 2.1104331106618273 -255 40 .5760986622504418 -266 40 2.02021845674303 -290 40 -.3628343743088997 -354 40 3.179466740925852 -374 40 .350757881108239 -379 40 -.22914448742952695 -400 40 1.2328601252175493 -406 40 .5349048313432697 -411 40 -1.0806992831177737 -412 40 -1.906278785044783 -452 40 2.1578781537014455 -460 40 -.9937093289832313 -493 40 1.000309047452075 -498 40 -.31342083301063484 -516 40 -.17065450185757758 -520 40 -.6380331747246097 -523 40 -.2795825146161193 -535 40 -.8440454495837383 -559 40 1.1410438165792742 -560 40 .9834938122642598 -569 40 1.018663837253249 -597 40 1.4593331137735417 -609 40 -3.121600497615249 -612 40 .8117802306478403 -631 40 -2.1759036700462517 -637 40 2.6662956225509435 -639 40 .9079824629209027 -652 40 .444924930739885 -654 40 .24606912094971548 -685 40 -2.225461526170604 -698 40 -2.2676457975964066 -699 40 -.4523053010958809 -705 40 .8113003497849028 -712 40 .17928563530075078 -718 40 -.2750012220025994 -720 40 .0540968461663118 -728 40 1.5269391100610206 -730 40 -.1615518818886758 -750 40 .946061500972791 -769 40 2.2159094773698906 -773 40 -.22812481170678423 -792 40 -.6016858661899892 -795 40 -1.2754251731019088 -831 40 1.1555574054399536 -864 40 .5234509766803603 -868 40 2.430786523990818 -871 40 .7742197416148949 -874 40 -.08853609459985994 -887 40 1.5383479557368944 -893 40 -2.4959054807873873 -895 40 -1.0103200056178443 -899 40 3.120043897550201 -906 40 -.7762241480846498 -917 40 -2.252426672315252 -929 40 .9283177761772072 -948 40 .4092277623305949 -951 40 -.1791221225449263 -975 40 -.6036573982040149 -994 40 -.2336934168310942 13 41 -.5069184995400817 16 41 -1.3614519389047672 31 41 -.08230492086530203 @@ -4077,109 +421,9 @@ 78 41 -.37159367723206077 85 41 .8827367874013101 97 41 .7383079650386656 -103 41 1.7036824144080343 -107 41 -.2969667001721248 -119 41 -1.0457459223550545 -125 41 .2312575883724896 -128 41 -1.2301385601910866 -138 41 .20690350005292596 -147 41 -.30206263176821635 -149 41 .26136440659050175 -157 41 .9323891089516453 -159 41 -1.4307762047082253 -172 41 -1.296636359440826 -174 41 1.1227236044533733 -181 41 .38833378887324926 -182 41 -.3111077068350398 -190 41 -.05709728812229642 -206 41 -1.0699387815160448 -210 41 -.8205220003892653 -216 41 -.7021770782497804 -222 41 -.012067839649199122 -228 41 .6001663198387641 -239 41 -.3195966693499246 -240 41 -1.6663977368323037 -247 41 -.6602756057412424 -254 41 -.47407139405259097 -257 41 1.015441989311279 -276 41 -.017174829453882275 -281 41 .46667377357962037 -288 41 -.04186602742955935 -290 41 -.5242308133103668 -293 41 -1.664043607768805 -307 41 1.025755892760331 -338 41 -1.1580612763028901 -345 41 -.9388970047233219 -346 41 -.3968203620125399 -369 41 -.25314060179255954 -372 41 .5810787822306251 -381 41 -.06586285780306284 -404 41 -.1665537723914418 -413 41 -.16567180022346345 -456 41 .9003718318206002 -484 41 .43900728832451796 -492 41 -1.1399815491938063 -528 41 .7229418563429585 -531 41 -.8493004226312858 -543 41 -.6016855085919606 -550 41 -.16688060385064232 -555 41 -.08755681182655775 -558 41 -.15564470724798984 -576 41 .6581718433702821 -581 41 .4908358476636491 -604 41 .05297166951586382 -605 41 .3107755597857293 -629 41 1.4614499958311997 -630 41 -.4170326697492879 -634 41 -1.7135406326249882 -639 41 -1.4346929462818843 -649 41 -.6931905119380307 -657 41 -.06122087299701241 -658 41 -.6383045566749139 -662 41 -.9581103398857342 -666 41 -.5586504248327435 -669 41 -1.1671990840769781 -670 41 .6330060996120976 -671 41 .3670572362297189 -675 41 .7855949761127919 -678 41 -.15288006076894506 -682 41 .6145474092899859 -689 41 -.5399335606215288 -713 41 .6715359107480142 -716 41 .6626608069517286 -717 41 -.3869406120474662 -727 41 -.7935566748307444 -730 41 .5381206065482889 -731 41 -.7630485085951922 -740 41 1.1903436268945333 -762 41 -.0938881165917034 -771 41 -.7892177672499684 -773 41 -.500827692171034 -775 41 .7074746315171225 -783 41 .3393094592090474 -800 41 -.33310024605762223 -806 41 -.2588421172039296 -810 41 .33037289625326627 -821 41 -.013032731871085938 -840 41 -.21799782811173846 -841 41 -.41500344810533446 -887 41 -.8566446471244678 -889 41 -.028175918175995733 -908 41 -1.1403501456814629 -909 41 .8147860279447857 -914 41 .270728320136322 -918 41 -.38017286038848763 -919 41 -.7517518445386872 -921 41 1.1449718414688077 -932 41 1.4896963191500117 -934 41 -.18138268735002328 -950 41 -.4034827241793639 -977 41 .7467327647769427 1 42 .048775437331426585 7 42 -.9005327496783775 12 42 .4404090716936546 -15 42 -.861763641023655 -22 42 -.7078004911632233 33 42 -.7635655358460971 35 42 -1.3976615164352484 45 42 1.4429736573854675 @@ -4187,93 +431,6 @@ 69 42 -.903405172390316 75 42 .2793247087014626 98 42 -.6559009192145995 -104 42 1.1286235075256186 -105 42 .6076445743721501 -110 42 .1690991295304713 -112 42 .7485667881689537 -138 42 -.7224327394923444 -146 42 -.8104360488760871 -151 42 1.1901675261802598 -162 42 .14561478405715161 -170 42 -.9636870740573794 -188 42 .6571180247837844 -189 42 -.3598743679541283 -193 42 -.05507645473385616 -210 42 -.11723219584421271 -213 42 .616364574743082 -218 42 -.31122640166277415 -229 42 1.4200326756948733 -248 42 .8694059007040903 -257 42 -.23021542521185276 -280 42 -.24893069078912408 -287 42 1.784244115972743 -291 42 -.7099213928396744 -306 42 1.541325276666738 -319 42 .26163425351076 -355 42 .9840994232589069 -372 42 -1.283419919167105 -378 42 .4017897151986828 -383 42 -.9052223154851284 -385 42 -.6638407851133069 -386 42 .6747635452145047 -410 42 -.8687817875233472 -419 42 -1.8935041226863611 -433 42 .7232354172938378 -449 42 -.30055306842799606 -452 42 1.1316779004314546 -454 42 .5942466665343893 -483 42 .4062152207379424 -499 42 -.6163630054007845 -513 42 1.119335229932291 -514 42 -.40729504084693857 -518 42 -.6498344341898624 -520 42 -.14133118145141726 -521 42 .3724025080882683 -540 42 -.4010065780971758 -542 42 -.10719484859268094 -543 42 .7605013463563989 -547 42 -.18441312659520998 -562 42 .30950362327675146 -567 42 .6940900922814668 -574 42 .8078773409879066 -580 42 -.24015138312399972 -586 42 -.4869938042884487 -587 42 1.6347644321167127 -604 42 -.4056428373753103 -618 42 1.2913500061958025 -627 42 1.7301874124264958 -632 42 -.2563716623615431 -641 42 -.41793337635494837 -644 42 -.3625506049686291 -649 42 .05428360255946976 -651 42 .43127645247040547 -719 42 -.5722076609418438 -731 42 -.5122362238342155 -735 42 .6034704021839947 -761 42 .0046699870608349695 -776 42 .8429916825348467 -784 42 .2689075230013071 -786 42 .4706497013314296 -790 42 .6243832443537446 -795 42 -.14374524115448176 -801 42 -.15150473678751117 -807 42 .3596484456340856 -814 42 -.8969050967453633 -816 42 .5888102674598303 -829 42 .9620139853946592 -835 42 .581392722951965 -859 42 -1.880762265178977 -873 42 -.21048181775303293 -876 42 .7027276372782272 -892 42 -1.000169338552323 -895 42 -1.2794960692859445 -910 42 -1.0352417057011059 -920 42 -.25216298589833475 -952 42 -.34942899362384794 -956 42 .25849505718292465 -964 42 -.12090380170598616 -982 42 .043109992552627124 -984 42 -.8420334547704295 1 43 .33006131589050003 4 43 -.620278310538278 15 43 .8553861631125746 @@ -4281,103 +438,7 @@ 46 43 -.7894244493238481 50 43 1.5234353944271228 58 43 -.4661429154792463 -73 43 -.1930453862082568 100 43 .4348386714087092 -111 43 -.1824676324476444 -125 43 -.11447316826398352 -126 43 .5031520547830517 -127 43 .8565989517807504 -137 43 -1.9724467637333434 -149 43 .6752899738452098 -188 43 .6617352461580909 -208 43 1.1341815042445649 -244 43 1.6682926839815047 -245 43 -.6589600489656892 -262 43 2.493045969330039 -267 43 -2.1431512153130767 -272 43 -.8348582356809711 -278 43 .20285710066530482 -283 43 -.5195997541167041 -291 43 -.6757019383782338 -312 43 .2379667166233988 -314 43 .6033819951511293 -318 43 -1.1548672772059505 -329 43 3.271600282601352 -338 43 -.9918465616450645 -360 43 1.3012304821637142 -361 43 2.8699975990064774 -371 43 -1.4739493585844183 -375 43 .193577875830524 -383 43 .2032129883014217 -386 43 1.4145286174861236 -390 43 .5920101268118038 -392 43 .19575323908916725 -408 43 2.35244275215304 -419 43 -1.4395653055402242 -446 43 -1.1861672265637753 -450 43 -1.2760088400260732 -480 43 1.2069886527585698 -484 43 1.601197222872369 -486 43 -.18550520494465939 -524 43 1.4115191773569482 -535 43 -.1195441135641798 -548 43 -1.3011336064726564 -551 43 .6137413884783367 -569 43 -.11354376456320056 -571 43 1.6294317148191968 -572 43 1.0974951571689264 -582 43 .021828162826297078 -584 43 .37149209958765966 -597 43 .8418419070740378 -610 43 -.9921324580527914 -618 43 1.833934696749743 -624 43 -1.9365965512970515 -626 43 -.9705359081800736 -628 43 -1.7065896800419706 -656 43 3.2526023792824335 -660 43 1.3668246714967152 -678 43 -2.0658323950925084 -698 43 -1.2195113928585792 -701 43 -.4691508934913162 -705 43 .10188341176523913 -707 43 -.8539169952372287 -724 43 -.3080324498965949 -732 43 -.54002709566239 -733 43 .054651195888968176 -740 43 .7357811283551974 -751 43 -.8063496887007515 -761 43 -.15045083937582876 -781 43 1.6286472857740015 -790 43 -.32461601582427385 -793 43 .9651495826372133 -800 43 1.398103398546721 -801 43 .3723199032076492 -818 43 -.5898412248032241 -839 43 .6425433933630451 -841 43 .6801618782902918 -853 43 .7581293187856494 -857 43 1.9250063748730457 -858 43 -.7726549979096946 -877 43 -.3397942856247863 -885 43 -.3024558830030714 -892 43 .10646238950275495 -896 43 .678333376524279 -916 43 .21156370755390874 -924 43 -2.064238483103953 -927 43 2.4162548102573513 -928 43 1.5888249993237367 -935 43 -.352587389887385 -937 43 1.2530996674916597 -940 43 -1.068187807298007 -943 43 -2.4752124310629813 -950 43 -1.4281570429756831 -957 43 1.408392054457849 -972 43 -1.1209983841132392 -978 43 .4655714776646468 -980 43 1.7206549727316445 -988 43 .44549992923981263 -989 43 .9981222664902965 -1000 43 -.5049670011929721 1 44 -1.518721354293485 10 44 2.407583081799446 25 44 -2.466916190345792 @@ -4387,203 +448,11 @@ 68 44 -.6679731862834013 98 44 -.7968355147331512 100 44 -1.9506675448646646 -105 44 .14556896982685977 -107 44 -.8775956036949168 -122 44 1.0199511597399344 -133 44 1.0991265309606413 -152 44 .10978162055635414 -162 44 .36183762135404945 -170 44 -.6386112688409045 -175 44 .1312464186332327 -185 44 1.2507968388300548 -189 44 1.018543843256804 -193 44 -1.2264516451740994 -231 44 -1.0627274298116218 -243 44 .9093679236701468 -274 44 -1.9928308018935375 -283 44 -.360284680758726 -285 44 .9928304556036104 -286 44 -.034763823449148606 -287 44 .3723997528821518 -300 44 1.5412713982005823 -305 44 -1.0398799960566036 -307 44 -.0193909075215914 -318 44 .5825440644834401 -363 44 -.3399820342960701 -368 44 1.651005782603584 -374 44 1.0875865356929426 -377 44 1.365979090469115 -378 44 -1.61823890769155 -381 44 .19498586033881704 -427 44 1.6018171733243114 -433 44 .8818347874857972 -434 44 -.49219350199376777 -437 44 -.8211541947672957 -440 44 -1.4085474214364808 -462 44 -1.7333299141636442 -473 44 -2.6025398356548446 -494 44 .10781665631652346 -502 44 -.562137463831825 -510 44 -1.9693345313733495 -511 44 -1.1196779751233419 -519 44 .7295493842095307 -526 44 .9862348167116552 -530 44 -2.3041407949793045 -539 44 -.20587948939530432 -541 44 .054968602588374854 -573 44 1.3663627809002779 -586 44 -1.5503823289478904 -619 44 -.47361350475151576 -628 44 -.14641000743334073 -637 44 .8526565503338739 -652 44 .6102407703979524 -655 44 .5886548313678311 -664 44 -.7827740125968378 -666 44 -.7797180922772526 -671 44 -.1539466288537181 -672 44 .26851488453620803 -673 44 -1.3412950381999942 -683 44 -.48214908561825404 -699 44 -.042504777992862716 -731 44 .12671628567286936 -744 44 -.5849161452359567 -745 44 -.40820644133562195 -748 44 -1.6037037778891314 -749 44 -1.9411076006803507 -764 44 -.6072316124279336 -765 44 -1.0368593745643124 -768 44 -1.4223707530448024 -779 44 1.6571144065807015 -784 44 .9460306460270007 -789 44 .42002189086221764 -793 44 .6394496356896668 -801 44 .9214346775689659 -817 44 -.060653247721063175 -818 44 -.664104964185151 -821 44 -.004487387996226132 -824 44 -1.0688062805694944 -825 44 -.82090069817441 -826 44 .532978570848008 -840 44 .5107442226315316 -841 44 1.016702045688923 -848 44 -.25592345523537274 -851 44 -1.2859958226152812 -866 44 -.04961922201564231 -871 44 -.2485075202295508 -878 44 -1.0112994669647837 -879 44 -2.175214672993261 -882 44 .5304321064412697 -887 44 .9351227204229767 -897 44 -.9886921396003249 -952 44 1.209111759058925 -956 44 .284271426268779 -966 44 -.11238184512864807 -970 44 1.0151579004874145 -986 44 -2.0841320122916542 4 45 .11095005223714552 6 45 .6124119622850043 22 45 -1.5595912322701375 -48 45 -.741163617497414 -61 45 -.5264429740966605 66 45 .014354048324706995 81 45 .08887904255721792 -105 45 -.4962544328466374 -108 45 .0910861616609425 -112 45 -.7666011913465979 -119 45 .13754912917473744 -144 45 .7756984963168421 -145 45 1.351333492784858 -156 45 .7580672206270912 -161 45 -.14658515589005913 -168 45 1.44736934819256 -172 45 .028888315535376186 -176 45 .22495848549106523 -178 45 .883298407163967 -201 45 .3320983120168259 -216 45 .441632625357223 -220 45 .3142981768515873 -225 45 -.6551730816059484 -257 45 -.6589754339736793 -277 45 -.2104779766016203 -291 45 -.7124361384529568 -299 45 -.11359499651367135 -310 45 .585575470791421 -332 45 -.05747395324297325 -334 45 -.02163424659613941 -353 45 -1.2493853734475615 -359 45 .4229453233558131 -368 45 .13335868192076064 -369 45 -.12290138901782449 -370 45 .6778051367084805 -378 45 -.5156736588747064 -387 45 -.4431871704305018 -389 45 .6153335213972827 -403 45 -1.1293496365605753 -411 45 1.0450843661023936 -421 45 -.2908380617699714 -428 45 -1.697767800708566 -437 45 -.14872168880251402 -439 45 .23284341892422464 -454 45 .6703357141424406 -470 45 .9158191491310779 -472 45 .7564949331071826 -476 45 1.2398667079408907 -491 45 -.7113438587473406 -508 45 .23046428068675262 -511 45 .6216794204580051 -520 45 .7293459080214356 -531 45 .5318680044514246 -540 45 -.4282647152909531 -551 45 1.7257617633446738 -553 45 .8341502139412911 -557 45 .2816940612541693 -559 45 -.7476293772824909 -580 45 -.5394955268422529 -582 45 .4647068070168608 -583 45 .5759343703642532 -619 45 .06838556972342123 -627 45 -.48809187359024525 -632 45 1.1922116798333495 -647 45 .05010681361436724 -659 45 -.38328212456582555 -680 45 1.5791198832028264 -690 45 1.7184211265929348 -695 45 .051890064274402584 -704 45 -1.08148960716963 -715 45 .11414288153444717 -718 45 -.7413399917705524 -721 45 -.9248215373014397 -723 45 .8662234434499007 -735 45 .7719403751741801 -751 45 -.7399605808459992 -754 45 -.6314163548949988 -763 45 .04049748712858539 -773 45 -1.2731940659884309 -779 45 -3.0990074582290292 -789 45 -.18859846902569524 -797 45 .4464007065379913 -802 45 -.39675455276095095 -809 45 .002451804659426432 -826 45 .014045582902914511 -857 45 .6905583458253242 -868 45 -.14600710534779193 -876 45 .7063822809479945 -887 45 -.615787051489611 -896 45 1.2875636826415666 -900 45 -.2748320770330498 -915 45 -.1260122267508073 -922 45 -.5649903304612278 -924 45 1.1082684929372137 -926 45 -.9688274978165595 -935 45 .5256318001256229 -945 45 -.4393444197789723 -946 45 .5436450692203025 -954 45 .9011515362441089 -956 45 -.48261497388283725 -969 45 .36587857299382565 -977 45 .11410857617736206 -997 45 .39310438611574283 -1000 45 -1.317722405140937 4 46 .8452032751056596 9 46 -.5092739912848748 11 46 -.3273525650492035 @@ -4595,96 +464,6 @@ 74 46 -.1378286015432833 84 46 .5995890236107698 89 46 -.9800529559114415 -111 46 .9353637563493175 -121 46 .2949735941951276 -134 46 .34036885156754104 -140 46 -.3333423893723982 -143 46 .18669951179331196 -148 46 -.5604508241452518 -157 46 -1.1149150423264829 -210 46 -.62555836319603 -215 46 .35982088735690343 -218 46 .3306818883831139 -219 46 -.1782241211923821 -227 46 -2.0795050101847234 -242 46 .21735206636506255 -262 46 -.25957591451809037 -274 46 .6442200689839566 -275 46 -.25769663119279523 -285 46 .6174406695177004 -291 46 .7441152490760776 -298 46 -.23694489114474337 -300 46 .34351722172390214 -302 46 -1.3418782564396206 -308 46 .6608305289026372 -310 46 .19445846443568038 -326 46 1.1015093318263784 -349 46 .8037772008994373 -358 46 .3401935940808424 -360 46 .5123610151609257 -363 46 -.6922998754179516 -379 46 1.3661577323916705 -383 46 -.04899037356954951 -384 46 .12963790962355165 -399 46 .6369265703714657 -411 46 -.8970367037196579 -414 46 -.38363574915921755 -442 46 -.2948727050975511 -444 46 -.0032240304989372658 -445 46 .11263662813577771 -473 46 .6924063141445322 -490 46 .44219646289372777 -493 46 -.1455765404776711 -503 46 -.2992870957732428 -508 46 -.1018568537709592 -536 46 -1.2970098993943142 -540 46 -.38379521728478044 -559 46 -.3084662244698727 -581 46 .031214807652537795 -588 46 .5945173516767588 -590 46 -.5133728897064396 -593 46 -.0892877660465246 -599 46 .6528755691955869 -625 46 .3145581568739022 -626 46 -.3687007298423512 -629 46 -.3226144047434131 -642 46 .6314940560528415 -663 46 -.26389090167747353 -667 46 -.5285563990360924 -671 46 -.5162342694842643 -678 46 .22268683197551323 -682 46 -.31548307823431004 -686 46 -.3752836213071533 -689 46 .1258704105353938 -692 46 .853021653745651 -699 46 -.5942789633908461 -701 46 1.2274911463154763 -707 46 .4497927819896529 -710 46 .09859675076490851 -719 46 .08134197480804556 -727 46 .4977121693493552 -732 46 .6237628900631396 -753 46 -.08830197884888102 -764 46 1.0647363182807763 -773 46 .26759878499568707 -775 46 -.26745122786942555 -803 46 -1.4121103482603101 -806 46 .6570829089929846 -808 46 -.11110137703701524 -811 46 .7163875176945238 -818 46 .8118138191344024 -826 46 .2413281485551288 -846 46 -.08758077369480569 -853 46 -.042709688729123396 -855 46 -.2200009979313432 -887 46 .26486065236558154 -890 46 -.18771183403789474 -903 46 -.05744268714509074 -959 46 -.19165344156382602 -981 46 .09527085278083536 -983 46 -.38672985693144135 -985 46 .6129021632003249 -999 46 .7207504649868891 21 47 .2199268709653181 24 47 1.6187056586853845 32 47 -.5593596912029791 @@ -4692,90 +471,6 @@ 72 47 .792124485703384 78 47 -.12974465763259396 97 47 -3.3061094102427973 -101 47 3.336065083050017 -109 47 -1.2850963490728051 -113 47 -.8221282842006109 -118 47 .8427756216738723 -135 47 -.3318009658132529 -158 47 -1.1441247005682658 -164 47 -.7759115031544774 -171 47 -.031623056527816266 -215 47 -.3931168605797995 -223 47 .6241463358875727 -224 47 .5353100733808878 -234 47 3.4259591771616473 -256 47 -.15099326333211835 -263 47 .2381699064491386 -276 47 3.239249922672189 -296 47 -.37154090069939716 -312 47 -1.1825858458649894 -322 47 -2.301375137493688 -327 47 -1.172926039694871 -331 47 .7364333760082206 -379 47 -1.2353622727482247 -401 47 -1.2907337969164674 -408 47 -1.6255145257837398 -409 47 -1.3203767402800093 -412 47 .14156289987451504 -414 47 .8062030702606248 -415 47 -.03418922775910874 -425 47 -.3750487042544707 -429 47 .4827612909566256 -430 47 2.1089059271496033 -444 47 -.1958516869456684 -448 47 -1.464396420772836 -461 47 -.8877184948404064 -463 47 -.9683062610521335 -474 47 .5385610023008067 -541 47 -.37210258920343414 -548 47 -.4440716385112222 -565 47 -2.2228596164030177 -589 47 -.9639120810537165 -623 47 -.2403366828772146 -625 47 1.6277196794126108 -627 47 .30389578751803004 -633 47 .7236481736620836 -653 47 -1.0283936675582694 -678 47 1.6283249878893125 -680 47 -.0446319116103359 -686 47 .9813398985583798 -688 47 1.9522999569314234 -705 47 1.5630589131553103 -706 47 1.2464312317815942 -708 47 -.9244775257275123 -734 47 -.07155152014791381 -759 47 .8620053544963819 -770 47 -.9026635338793064 -778 47 -1.079843077592215 -781 47 -1.0603064002156208 -795 47 -.8517120432102794 -801 47 -.7468643114094788 -807 47 1.5675866664541172 -810 47 -1.1384502134091854 -819 47 .45373409098546047 -822 47 -.8010615573649074 -836 47 -.7776478717690195 -837 47 -2.1171412245423764 -839 47 -.7065070292140228 -845 47 .4398029936447172 -857 47 -.5812185056208967 -868 47 -.7732847455003476 -882 47 -1.4535356018404724 -890 47 .37860348321371023 -901 47 -.18992416414452318 -903 47 -.5419306069530051 -920 47 2.2656699442813815 -926 47 -.4266125480080199 -927 47 -.704633468761884 -928 47 -1.8123517610246418 -936 47 .5655288291465168 -938 47 .65488535381942 -955 47 1.1941418107330237 -973 47 -.6322383386170862 -976 47 -3.1434499607592548 -980 47 -1.7033837368176683 -991 47 .9591572538068802 -994 47 -.5227511686443285 3 48 -.3902188586444468 9 48 -.17750384693757046 16 48 -.9073273207337 @@ -4791,106 +486,6 @@ 77 48 -1.5286906037592771 92 48 -3.1151761768859787 95 48 2.6326282028677186 -114 48 -.8406113287350645 -117 48 .90555928111383 -118 48 1.0159316644243463 -125 48 .8084225051094137 -128 48 .9358296913189321 -135 48 -1.1556963159908031 -136 48 1.7491015152283351 -151 48 .9631865099540755 -155 48 -.46005540979070114 -156 48 .048191314051096786 -159 48 -.04898590006200303 -162 48 .35174003326882386 -168 48 2.404919998721982 -169 48 -1.9123823960504491 -179 48 1.145354193692109 -190 48 -.5683833310890505 -191 48 -.5829661817719692 -208 48 -2.0100769902649844 -216 48 2.023517896110544 -227 48 4.112136136634006 -259 48 .7758629207664194 -260 48 -1.3499556341047336 -264 48 -2.2507751081406164 -274 48 -1.563979861129347 -296 48 .5312092293829103 -297 48 -.5027348475309515 -317 48 .6400240319494861 -323 48 .8778243056933632 -329 48 1.7661930049316457 -334 48 .7813086067917225 -337 48 .264683655815821 -342 48 .7669326135398341 -356 48 -.6047872647124815 -386 48 .2192110361727545 -411 48 -.1187173827699525 -417 48 -1.6601978865166473 -444 48 .18419116160194884 -446 48 1.198985269526825 -450 48 3.900500103407182 -457 48 .2461201235757135 -468 48 -.309193181944753 -471 48 3.031308367500066 -482 48 .6198727184939675 -489 48 -.30910676166210777 -495 48 -.6750261370430972 -501 48 1.825512883141678 -515 48 -2.42081227248679 -517 48 .12067869380165604 -519 48 1.7199812764121816 -523 48 -.7214043670677518 -540 48 .854488511681304 -541 48 .556534874997746 -542 48 -.22505721811766616 -549 48 .09473354922916867 -555 48 .22565903912408353 -586 48 .5433789288695965 -593 48 1.4668206457295077 -607 48 .25024755471223326 -609 48 -.01339886449470374 -618 48 -.3463339057102177 -632 48 .07934058401974975 -633 48 1.6561392190213688 -655 48 1.8397299982308017 -658 48 -.8252157524686364 -659 48 -1.745278962512064 -695 48 .25534517042590754 -696 48 -1.7203512650422967 -703 48 .20511794039430722 -704 48 -1.915818336981534 -713 48 1.9075169495384556 -721 48 -1.6436640816005403 -724 48 .1859803083367 -734 48 .6612269824887835 -738 48 -.16491074371918008 -741 48 -.03803870242262447 -744 48 .8998202247510164 -778 48 .7540922848272831 -781 48 -1.9029422651946541 -785 48 .2173828036742252 -788 48 1.1659357114965216 -800 48 -.3423013992318291 -805 48 -.8924049457793818 -812 48 -.9125819273874967 -814 48 -.23924358932202547 -839 48 -1.1093680699655326 -851 48 -1.580957146073676 -860 48 .49934748761035475 -866 48 -.14073159753070624 -874 48 -.9753816319363318 -889 48 2.061446961486944 -892 48 -.5069296241992995 -923 48 1.0458462037212253 -928 48 .9689253606541715 -939 48 .8639714791462504 -948 48 -1.1010434994709466 -970 48 -1.5799586971987922 -973 48 -1.6688797894890386 -976 48 -2.025881682413352 -979 48 .7471672821906171 -983 48 .7728026663027538 10 49 -.006435751981005933 11 49 .35979709197017795 15 49 -2.926462329441517 @@ -4904,104 +499,6 @@ 87 49 .8729465171286084 93 49 -2.1495989686320987 95 49 .825919186892836 -102 49 -.4779433748592758 -108 49 -.45962891490905294 -116 49 -.03699314259638893 -117 49 2.0594479559905627 -133 49 2.2640798618558464 -137 49 3.044214374139369 -139 49 .4460163152358326 -152 49 .051366543919828034 -154 49 -1.169908077763603 -169 49 -1.3030210622318972 -173 49 .07922906040629785 -176 49 -.33791010940737065 -190 49 .9898749171047148 -191 49 -1.1875279442773572 -195 49 -.03854772008702082 -198 49 -1.1251591232352107 -203 49 .5800011757897298 -209 49 -3.0941820162335154 -228 49 1.649470768507224 -230 49 1.0390268166421133 -231 49 -1.4326447841661234 -240 49 2.351700994309026 -254 49 .6335773118538213 -268 49 1.934450417677152 -288 49 1.5612807266335764 -294 49 .9337335131022485 -299 49 .4081705605404985 -311 49 -.5251007787894431 -339 49 1.8221405088475013 -340 49 -.8690298467872144 -341 49 -.19743790639533645 -349 49 -.8157902741440692 -368 49 .5060913411524371 -369 49 .130839326978907 -377 49 .960945049982776 -384 49 1.307247738687339 -405 49 -.41085328452171405 -433 49 -.5656920858301363 -436 49 -.5922386207682393 -447 49 -1.4385800152011106 -448 49 -1.877536352442985 -452 49 -.20357264357858412 -457 49 .9211519873648523 -462 49 .4811371180901265 -464 49 2.08740482114098 -468 49 -.1170239491880748 -471 49 2.8116201062497383 -474 49 1.6301089398994142 -477 49 1.1426766329431857 -484 49 -1.9715044092022918 -499 49 .6289518388012134 -517 49 -.36616639442760346 -538 49 -.253033802509596 -544 49 -.13241249855209775 -547 49 -.5604903504491947 -570 49 2.130797536326173 -596 49 .2071351189515851 -597 49 .3747135511449069 -605 49 -.42553086995593437 -621 49 -.20276370465017113 -653 49 1.0458635101652096 -657 49 -.7319179339960302 -680 49 -.5981805861350139 -688 49 -.14257826372939994 -691 49 -.25597536115139824 -704 49 .31397162010533225 -745 49 -2.344234417295076 -746 49 -.5067119416749645 -751 49 1.1037804935709012 -752 49 -.778472264945517 -763 49 -.7304434593355538 -767 49 -2.0189721631835438 -775 49 .05567789872519835 -777 49 -1.0077849165086854 -793 49 -.04696069411894521 -807 49 .39450812409341574 -823 49 .715813422897855 -848 49 -.3639032893763803 -860 49 .8140599045335729 -863 49 .22394594467043344 -886 49 1.4223093938174676 -890 49 .6949112819189119 -895 49 -1.0251643295896633 -900 49 .751249995953451 -901 49 -.13490766005116048 -904 49 1.6583365876638894 -921 49 -2.666972023171732 -927 49 -1.9212966857400302 -932 49 .998492788606783 -955 49 .6288377318600413 -957 49 -.9605313112410481 -958 49 1.2249451522886012 -965 49 1.0755641795937416 -970 49 -.8051081145574509 -975 49 -.977351623468353 -984 49 -.14584546567706874 -989 49 -2.0787023523406845 -991 49 .6395347875546398 21 50 -.9550449756530952 30 50 -.6952542300517942 37 50 -.9961892892347993 @@ -5012,214 +509,16 @@ 68 50 .5883709502312635 69 50 -.49279444474926426 85 50 -.5695536254156546 -102 50 -1.5543813710431051 -112 50 -1.1359819950915702 -115 50 -2.0070820908506715 -130 50 .7708206792303722 -144 50 .6566164530199239 -146 50 .23907293266432755 -156 50 1.1304717647002671 -157 50 .4607623241449852 -160 50 .9825052934797687 -168 50 .49333731484355625 -172 50 -.4289688254326489 -175 50 .27332680476550053 -184 50 -.5523115054586498 -187 50 -1.8235682716435972 -189 50 .5937782109512083 -191 50 1.0878135468993684 -192 50 1.1574475077651458 -210 50 -.8290211903808822 -211 50 -.6666876897172234 -219 50 .538193445557108 -254 50 .501498389989546 -263 50 -.21785279272845698 -270 50 1.7765579592124 -273 50 -.40838162943706435 -277 50 1.1784755873919326 -287 50 -.3877391180505581 -298 50 1.602042683553185 -308 50 -.6019831515798851 -311 50 -1.232773010078328 -312 50 1.455417284935772 -319 50 1.74533254547222 -321 50 -.8801725963736765 -322 50 .8253304902585104 -332 50 -.8813432985996135 -336 50 1.3691994198131747 -338 50 -1.6616238867383117 -352 50 -.5655888662416726 -361 50 -.3055235812064339 -385 50 1.6484225318084305 -436 50 -.11669992482422208 -448 50 .08571465028584506 -476 50 -.5227554703383909 -486 50 .9197135780732801 -500 50 -.024913740517469373 -506 50 .004100000903469139 -517 50 -.09970559294380776 -518 50 .5162390658276482 -527 50 .3831716005931219 -530 50 -.7619881103301279 -538 50 -2.007351905761026 -551 50 -1.5739424312850483 -553 50 .5846458895958699 -592 50 -.5611553740435596 -624 50 -.6769419432896886 -632 50 -1.4461685034594791 -635 50 1.545804044878352 -637 50 -.29035029034603 -644 50 -1.8989988312578343 -659 50 1.0359077962071386 -660 50 1.0932188561833645 -666 50 .3026520508595655 -670 50 .14542010849150167 -677 50 .7847858864459744 -688 50 -1.2004057884669788 -693 50 -.8631354241264411 -694 50 -1.1361104722903226 -725 50 1.3992226787245912 -741 50 1.1772115227175588 -743 50 -.7151255353518506 -745 50 1.6983964267899938 -766 50 -.7503546230839178 -768 50 .36332987763745933 -783 50 -.1161183899958857 -798 50 -.9983140601626881 -809 50 -.08659590195870745 -812 50 .6295735104217219 -825 50 .016432409185368674 -845 50 .03357926928890936 -854 50 -1.3306673413422112 -862 50 -.9092549393348327 -881 50 1.0167370439622672 -888 50 -.9323173582626896 -889 50 .4938914728434863 -904 50 -.6426966531916106 -905 50 2.2090915343322477 -909 50 -.4452759277590421 -911 50 1.340671719769257 -913 50 -.33125675706199065 -932 50 1.189643627717103 -938 50 .43714430400593807 -948 50 -.9409664096661661 -958 50 -.21010548195359718 -974 50 .2056590942419298 -999 50 .17427021322075492 2 51 .11010983574279268 22 51 .4584212194292005 -27 51 .8273426591696115 42 51 .261491304011092 52 51 .9398670002877011 54 51 -.7573332225795644 59 51 -1.1065426840313344 61 51 -1.321040286280434 62 51 .41110934261158827 -69 51 -.4732532409072713 82 51 -.0976867953047025 94 51 -.5037126123345935 -101 51 .7041387878633572 -103 51 -.2974623397331819 -118 51 -.45162075004917895 -134 51 .07649971213228782 -143 51 .9177265485510505 -147 51 -.8615859225379344 -148 51 .1600908241672917 -149 51 1.2289598326052231 -172 51 -.4044261756574394 -176 51 -.837365242257731 -182 51 -.799194647481509 -186 51 .2723676986737622 -192 51 1.2807706182615621 -193 51 -1.4355813382235656 -200 51 -.39658206204374463 -203 51 .4784000920453022 -214 51 1.0401586666459401 -216 51 .3585650128251734 -238 51 .9875912625653236 -243 51 -.44831950039737184 -257 51 1.0007733024656262 -260 51 -1.3378238318757527 -267 51 -.18924518216837927 -272 51 -.9651115502094113 -276 51 -1.0196073405254353 -280 51 .3598064899266914 -282 51 -.09218571894833144 -283 51 -.5360754916271981 -288 51 .7690028552819583 -298 51 .4069703565926995 -307 51 -.3962601444940642 -313 51 -.3318420011976726 -317 51 -.45652013016986925 -319 51 1.1317673891740068 -320 51 -.17721486230565864 -334 51 1.5402100088784916 -341 51 -.609721425137113 -346 51 -1.12685378165129 -356 51 .2667821515761982 -362 51 -.6712834577946363 -366 51 .5448502501196687 -379 51 -.29226988385787855 -393 51 .23938273173246827 -396 51 -.753784397624654 -399 51 -.9771548021198028 -407 51 .9650431867723867 -409 51 .63674651162203 -418 51 -.548987429970083 -438 51 -.8475214118769876 -464 51 1.2767973871427487 -495 51 -.23611069273794238 -497 51 .36687735822952955 -502 51 -.3584098614451918 -505 51 -.7337896091744133 -508 51 -.2656943321198685 -509 51 .7966700242553267 -511 51 -.6818210526124885 -527 51 -.34302053364283924 -534 51 -.6217840932624097 -553 51 .35376161223680475 -580 51 -.3313216217966929 -599 51 .3894341910059362 -615 51 -.060968870038999395 -651 51 -.3356726322658504 -663 51 -.8586667691707202 -677 51 .6905674247075373 -684 51 .21845500754453792 -693 51 .3128109786283477 -696 51 .16651063435851182 -712 51 -.6179078024366761 -714 51 1.260753991752155 -717 51 -1.465690100908959 -721 51 -.005921108141141246 -731 51 -.37085517471892093 -750 51 1.7834333253276238 -751 51 .055213794070014255 -757 51 .6956235842607668 -789 51 -.8050244495544326 -793 51 .7633567037617274 -808 51 -1.3047877714636553 -809 51 .46512641696239015 -839 51 -.39128509353394214 -840 51 -.4278953069521422 -873 51 -.4272961085835756 -877 51 -1.4027788412499917 -880 51 .9818740591478518 -881 51 .661453838423937 -886 51 .5283112789750316 -890 51 .3431835577955685 -893 51 .3361801097710449 -897 51 .17263829746675258 -900 51 .37020197485075407 -909 51 .7472543847037788 -915 51 -.1441330645315237 -938 51 .8867958416261307 -950 51 1.0016732069869891 -958 51 -.9593891455642893 -959 51 -1.1964841324351028 -962 51 -.07967518557678809 -979 51 .6511099066805127 -982 51 .3497607070876003 -993 51 -1.0077590765967916 2 52 -1.439045791845367 23 52 -.37796382581496313 32 52 .028302695678421363 @@ -5228,97 +527,6 @@ 71 52 -.4495086758379814 79 52 -.30189257766775174 97 52 -.04768271251846936 -106 52 -.6417821734224333 -111 52 1.14698781485272 -119 52 .0775112562857116 -122 52 -.7670070951842594 -125 52 -1.4682469260736501 -139 52 -.4837612649918983 -168 52 -1.149225887958968 -172 52 -.07587916047890994 -192 52 -1.0210921335296672 -215 52 -1.3253693745896384 -219 52 .5939058939520887 -230 52 .733973566141285 -232 52 -1.0306060066372333 -239 52 1.952018646884238 -243 52 -.4002164112751335 -249 52 -.2838964822004631 -251 52 -1.813028313402513 -253 52 .5364238344210368 -259 52 .11953085988425077 -264 52 .7169111488600141 -287 52 .8971485304338577 -293 52 1.168583846465453 -294 52 1.098060093798252 -303 52 -.4528966961503038 -335 52 .9084623767305735 -337 52 -1.0020587926721114 -345 52 1.0757022771588978 -346 52 .7749791912039887 -354 52 -1.5941296892719308 -374 52 -.7102437627127325 -383 52 -.2615991678987331 -393 52 1.3194209604748122 -394 52 -.7783680847412247 -401 52 .19667835143051351 -410 52 .14597055614182558 -419 52 1.2860347862634618 -420 52 .8205694533726507 -443 52 -2.1020464592512855 -449 52 -1.1189679421758727 -457 52 -1.0252403433342987 -465 52 1.8552541702519276 -467 52 -.33134392750546043 -474 52 -1.3067825307743126 -475 52 -.35157453284016105 -481 52 .27690660864807404 -484 52 -.3777411269251263 -506 52 -1.2676069100762402 -514 52 .3245961380431836 -540 52 -.8117429604117451 -541 52 .2262456143645042 -574 52 -.4274982658171139 -599 52 .8321189645250906 -603 52 -.42279814062196713 -610 52 -1.257342974313433 -613 52 .35772083370630914 -618 52 -2.0878594304684137 -623 52 -.27230004621855686 -656 52 .2843573964382018 -658 52 -.9806886174161231 -661 52 .15273243715767132 -683 52 .6843595092631871 -721 52 -.19710322591246116 -723 52 -1.0706673604433745 -724 52 .15885517721336767 -729 52 .6069137854590085 -735 52 -1.4536534751766645 -744 52 -.29102913247171763 -747 52 -1.0075999756485206 -764 52 -.6479873366489126 -767 52 1.2946689207568118 -779 52 -.02355846906239109 -783 52 -.37654172712292744 -792 52 1.3418144726549046 -803 52 -.0340387559883064 -836 52 -.7599634026208665 -849 52 .3200979603684088 -866 52 -1.5380821004268066 -868 52 -.06151134021278844 -878 52 -.9707911574524926 -903 52 -1.1538580481423086 -918 52 -.016789280763328807 -921 52 -.17977593737165878 -925 52 -.5026518781208854 -940 52 .659874523134617 -948 52 -.15620726791024453 -969 52 1.2810138916955789 -977 52 -.20733442481077333 -984 52 .8578335626228158 -988 52 -.6942437698138988 -991 52 -.7640353473777058 -999 52 .8370090011393301 21 53 -.07928301894397798 23 53 -1.4003109793148363 25 53 .2535999169392763 @@ -5332,82 +540,6 @@ 79 53 .3391913630277598 84 53 1.0118511751208543 98 53 -.9649697171984419 -112 53 1.0987249001478285 -113 53 -.8002398150253495 -128 53 1.2974894715853844 -134 53 .23069281998841512 -138 53 .8476643085960003 -142 53 .06362448344847912 -150 53 .08368427385567714 -173 53 .25167661491611515 -175 53 .6216198949253838 -177 53 -1.893761511426405 -183 53 1.5974826964143227 -194 53 -.655509980397247 -197 53 .25127895758493113 -203 53 .9063979253856236 -219 53 1.501448406369936 -228 53 -.18344383073917678 -234 53 -.34966024796971407 -247 53 -.2755814439495624 -274 53 .7195865975685501 -277 53 1.4382323227960891 -282 53 -.6208279851323537 -295 53 -.5764849261595348 -315 53 .4565224919357947 -336 53 -.44256489716090286 -340 53 -.7811076342696823 -341 53 -.0830224222313925 -342 53 -.10893028825726309 -355 53 1.643701978150833 -359 53 .3949487811650648 -370 53 .09780393054388661 -374 53 .22782805591777988 -376 53 -.7142317008886123 -379 53 .6732053842854535 -380 53 -.7001664639174356 -397 53 .7118967827553447 -430 53 1.7720396430064858 -446 53 1.1553503158760599 -458 53 .3097311757304977 -471 53 -.5907623481362043 -504 53 1.4929784886203343 -513 53 .22339287984741765 -553 53 .004812683837097903 -556 53 .08468728641364909 -564 53 .6155508868499335 -566 53 .3432448836923858 -576 53 -.40900078881402274 -588 53 .5990745727053717 -614 53 -.5250330700490262 -621 53 -1.2508979465884376 -627 53 .2218786964901889 -660 53 -.8981685736477961 -666 53 1.1624012492520142 -685 53 .586125101870494 -713 53 .18452976305423624 -741 53 -.855000108280053 -747 53 -.7021026738743501 -759 53 -.0012296402025622835 -764 53 -.25313939879535297 -788 53 -1.0868390975220965 -828 53 .11040558957882984 -849 53 -1.229968071648144 -850 53 -.8657919240407462 -855 53 .0551275564593839 -863 53 -.07695007759150856 -870 53 -.3330357884758048 -874 53 -.23196147281483928 -877 53 .223173570857513 -887 53 1.4926053783460276 -905 53 -.2742721769176382 -922 53 -.5749503829226016 -924 53 -.6693923591154203 -925 53 -1.1409346952119683 -926 53 1.640147441407781 -953 53 -1.4415553039299096 -967 53 -.5535839048659945 -975 53 -.6946756279858501 11 54 -.9032681013715583 17 54 .562430909621765 19 54 1.5833879457261633 @@ -5418,102 +550,8 @@ 85 54 1.9776424869575628 86 54 .4026467166901367 96 54 1.395591494859416 -102 54 -.05958280236833585 -106 54 1.4780597368792667 -132 54 -.24560528555408226 -135 54 .8949282360057099 -176 54 .4503243467497299 -178 54 .9965647975536331 -188 54 -1.1123508899080818 -212 54 -.6634957777262033 -215 54 .604250295195729 -219 54 -.2839948371059159 -225 54 .7955126570820736 -227 54 -4.351995144464417 -234 54 -.7415913688164878 -237 54 1.0373293231806977 -241 54 .3621539433960844 -256 54 -.8729322244699954 -266 54 .21864336835087606 -289 54 .8315807899359535 -295 54 -1.3096442287584866 -311 54 .9853318547875082 -314 54 -.5145278278394931 -325 54 1.0930642058841034 -347 54 .8155150567786842 -348 54 2.4792690792967758 -352 54 -.14933697330918316 -356 54 .6734120212293516 -360 54 -2.012969679631915 -362 54 .19338176062668844 -391 54 .909008088632146 -405 54 .2437572404861056 -411 54 -.34114754161941935 -416 54 -.686051699299428 -424 54 .5751361975919806 -435 54 -.6449405655858278 -437 54 .5240500355769953 -439 54 .8138559832633809 -455 54 -1.922003498009436 -464 54 -2.676090673545176 -469 54 .598106576017822 -491 54 -.37056809482104364 -497 54 -1.4091774047066075 -510 54 2.7597470709865086 -533 54 -.7998024638614509 -543 54 .6511627448482699 -547 54 1.294607797736464 -551 54 -3.409944983421479 -570 54 -1.459724065068753 -574 54 -.5553517147704596 -577 54 .6431789232497169 -605 54 1.949555564632016 -609 54 1.8329912455022783 -615 54 -.5498568311039551 -629 54 .1688477569615845 -640 54 -.42282360291782706 -647 54 -.5507947068937221 -674 54 -1.396973431300943 -685 54 1.2341414041871313 -686 54 .8039510298843294 -690 54 -1.5925140247753335 -708 54 .9341294523339986 -732 54 1.3601685976153175 -745 54 .6494786493054223 -749 54 1.3503229679914155 -753 54 .8689692466149648 -765 54 .14134986119024887 -766 54 -.7505973479953789 -778 54 .6644440197711 -779 54 .9789803339208069 -826 54 -1.6613257417839282 -835 54 .7582466886451146 -844 54 -1.5291915159308296 -848 54 -.05823442555727819 -852 54 -.4028624258965395 -861 54 -.35484189314554293 -869 54 2.2025032316727304 -872 54 .12363306119524967 -873 54 .033648381839785774 -876 54 -.9383420328310432 -886 54 -.1557841010295525 -907 54 .5253197272502573 -911 54 .9914557696097364 -916 54 -.12561882754958492 -918 54 -2.2460146648038743 -921 54 .5198745246719972 -924 54 1.6682278233515737 -925 54 .2682710678698259 -932 54 1.614641318005911 -951 54 1.241342478816352 -954 54 .11572911637385187 -956 54 -.20922899827607178 -966 54 -.5392381362284517 -975 54 .7388269046697142 -992 54 -.2315071307020496 3 55 -.10191245199981926 13 55 .07080730154702826 -30 55 .2568132947540779 32 55 .09797456598224805 34 55 -1.99459184074729 51 55 -.6644020566090855 @@ -5521,112 +559,6 @@ 74 55 -1.4087055183268846 84 55 -.691218439569889 89 55 1.218925985773041 -109 55 -1.2796621009569669 -114 55 .6571249004895587 -120 55 -1.45961990631706 -137 55 -.9206493177649147 -153 55 1.3935363928069013 -169 55 -1.0492746015899848 -173 55 -.07996520513755437 -186 55 -1.3418553043164225 -189 55 2.1928667759583256 -195 55 1.164500353602894 -201 55 .32269071992793114 -214 55 1.2317072073424706 -218 55 -.6853063727063562 -225 55 .2387584569409563 -237 55 -.6827218003911131 -242 55 -1.7793884304543162 -256 55 -.25542729895350746 -260 55 .9797396940753043 -262 55 -.9678706787462098 -263 55 1.367271890958721 -265 55 -.7945673493504597 -269 55 -.05425527588942811 -285 55 -.5715018660615497 -300 55 -.37263117232496495 -303 55 -.5492935103092726 -328 55 .39772120564143176 -335 55 1.3492271989939262 -342 55 .9146520585418334 -353 55 -.9967178365129337 -357 55 -.2396621994541525 -363 55 1.4569501138806897 -375 55 -.1954784996895656 -380 55 .7075101647237284 -385 55 .9850273565005172 -423 55 -.2374494218344707 -424 55 .036541467930540944 -428 55 -1.6502018282686075 -449 55 .4698404764431833 -450 55 .3357555418840197 -452 55 -.1419888734873681 -461 55 -3.412421341415413 -482 55 1.9332499054086667 -499 55 -1.4208968872429042 -503 55 .3492426828147217 -520 55 -2.5433785549911185 -529 55 -.13728558458748294 -530 55 -1.3069770450397113 -541 55 -.1503911905767437 -548 55 .45158468934760204 -550 55 .8124525638178581 -553 55 -.8426439054941021 -554 55 .012954761261148882 -560 55 -.4432200377944222 -563 55 .3116498554620602 -564 55 1.0786484746909881 -577 55 -.3144618725757576 -595 55 1.8175599094461377 -603 55 .10099924649802353 -609 55 1.0898188226554608 -610 55 .7384338068366821 -613 55 -.48517239515870947 -618 55 -.6183876878488469 -620 55 -.8157654791548691 -621 55 -.07564540428941305 -630 55 -.32631451761106745 -638 55 1.3824703888781409 -642 55 -1.908445547784291 -661 55 .2470139008351295 -681 55 -.8848439688483608 -694 55 -.6444645723666244 -707 55 -.176596051089085 -716 55 1.1169553176677698 -733 55 -1.8660228722865728 -749 55 .39265411333904493 -763 55 .7852542999519337 -770 55 .135753894688381 -777 55 -.07806607863934006 -781 55 .29868477334551546 -785 55 .5458186105109661 -787 55 1.530038978613897 -793 55 -.6085364123459045 -796 55 .46870603162169155 -808 55 1.1404477913509687 -810 55 .6713351442384071 -812 55 .25063301972131036 -842 55 1.7362838776965406 -843 55 -2.6011240192317433 -845 55 .6306419452156743 -857 55 .6259093621618604 -860 55 -.20443657229968976 -861 55 -.8381978342457883 -874 55 -.09080583189145658 -881 55 -1.1766678888809028 -904 55 .3832296440170012 -918 55 -2.1463854598496903 -924 55 -1.6311538512432333 -931 55 .11164531214747059 -932 55 .8736835842580652 -937 55 .3172119356327553 -945 55 .04625443766478595 -963 55 -.7886142461387173 -980 55 -.5909944975830698 -988 55 -2.216199578909798 -990 55 -.3620798284540796 -994 55 -3.0005701075269453 -996 55 1.5482787102190785 10 56 .2012398193661427 35 56 -1.434979395193944 44 56 1.4562262934147674 @@ -5636,104 +568,6 @@ 86 56 -1.8025195378113295 97 56 .901513783050596 99 56 1.5377239258591207 -131 56 .3102621094224115 -133 56 1.1400575258591625 -137 56 -.4043580663685527 -141 56 -.6861648255531583 -149 56 1.0666958499666792 -151 56 2.956193900536479 -162 56 2.815965024650365 -173 56 1.3807894125023161 -175 56 -3.214673574636713 -177 56 .39605084048473643 -197 56 2.670167175718226 -200 56 -.1314306216441995 -201 56 2.43529797827179 -221 56 -1.6822017197861243 -240 56 1.9294718294713171 -246 56 .3177687910908036 -253 56 .6765207052847141 -258 56 .2492239780357444 -260 56 -1.7385911558058467 -263 56 1.757225863823224 -275 56 1.623024943429304 -282 56 .5222394360836664 -295 56 .8378821288079712 -297 56 -1.4654031323324146 -307 56 -.5082870437003424 -309 56 -.8601373636178459 -312 56 -1.6755907060633763 -317 56 .09182628165161626 -333 56 .6292227661720398 -335 56 -.11675330602145041 -338 56 -.06188028694806103 -344 56 -.8755651380250249 -358 56 -.5924875123661865 -370 56 -1.0843408730119324 -376 56 1.4575882209995246 -386 56 .44082630489791813 -440 56 -.09557063421637595 -454 56 1.4491756213434797 -476 56 -.12244540538628236 -478 56 1.5283923720144088 -484 56 -1.069039429125907 -492 56 -2.7522607426020924 -494 56 -.9273297600741233 -495 56 2.2906383816667093 -514 56 -1.9021194693489694 -534 56 -.5472425005203708 -537 56 -.8220701791717349 -549 56 1.7032245065465403 -554 56 .32935256656892115 -591 56 -.5956409589607873 -592 56 .30508087045254695 -597 56 2.126684540769186 -606 56 -.5987948206289668 -610 56 1.3811780884978522 -623 56 -.4563580348483368 -635 56 -1.9983911948648723 -643 56 .04808826947540321 -647 56 .7754433458587409 -648 56 -.5846956866453171 -649 56 -1.0360028464760738 -658 56 .7396696906406698 -664 56 -2.2571304043328335 -685 56 -1.9175820783760797 -687 56 .06679900566874444 -693 56 .07757019515873519 -701 56 .18091099766295515 -715 56 -1.7233901501457713 -721 56 .006788897140389324 -724 56 .12207615513974278 -725 56 .0647852587604839 -729 56 -.16725743868796428 -732 56 -.4594704602432703 -736 56 .5510652215514225 -748 56 -.004210863505175841 -759 56 -.37618280095333323 -768 56 .20197160379381007 -800 56 .6502061558044478 -808 56 .9481678711942191 -810 56 -.6691481040527422 -812 56 -.9389212055586872 -816 56 1.1027277944331142 -825 56 1.6009842310521867 -838 56 1.288567006768297 -840 56 -.8107943738517112 -845 56 -1.6104439565241937 -854 56 1.3575949137010073 -859 56 -1.089521140266151 -915 56 .0823467413674544 -919 56 -.20279418004213112 -928 56 2.0263209502625825 -931 56 -.7793364084337369 -934 56 -.738026593947944 -943 56 -2.4020725452513574 -955 56 .413956646620287 -960 56 3.140537436027118 -985 56 -.033478393579560325 -987 56 .07817282084576287 -989 56 .08419929124353115 14 57 .05574688659457393 28 57 .2065678146158031 29 57 .23914309871691586 @@ -5745,100 +579,6 @@ 66 57 -.07654948574946362 87 57 1.179816133453425 90 57 .05319632027250323 -107 57 .8222652765728187 -124 57 .40168158299810724 -138 57 -.5011641432578042 -145 57 .37486488353056563 -151 57 1.0166938505020147 -152 57 1.8467849767978148 -158 57 .5525614760631261 -166 57 .5050794488840098 -177 57 1.9230497897833974 -207 57 -.30962320375563407 -215 57 -1.318840377466993 -248 57 -.19910554739054726 -252 57 1.8421125045693518 -267 57 -.29992204900253555 -270 57 -.34170819788114903 -284 57 .532703713142864 -289 57 .09539974605584414 -314 57 .8520417674233427 -320 57 .2880039740203373 -322 57 -1.058297922110643 -336 57 .28442272630665416 -337 57 -1.7672134698227506 -354 57 -1.9692150121770715 -365 57 -.18088926994520868 -367 57 .4407161775284216 -368 57 -.4464034595733377 -371 57 -.18494630267419074 -378 57 -1.470223667969792 -417 57 -1.6716344306394135 -424 57 -.05612695490169822 -429 57 -.7121220563053066 -434 57 -1.5202779103777657 -438 57 -.7450035070847683 -447 57 -.4580692808879695 -457 57 -1.9617935167789635 -460 57 .25336880489461 -461 57 -1.7044488480420463 -465 57 1.6963033175941544 -477 57 2.6755749631904733 -479 57 .7554343653244978 -491 57 -.12986727838012266 -493 57 .533363134865709 -495 57 1.7153813291707758 -521 57 .5509393075272507 -549 57 -.0028327584900108838 -552 57 -.6536155345209682 -569 57 -1.3263560849116225 -597 57 -.35693155818765504 -599 57 -.7317924005212251 -606 57 .4637650410156775 -619 57 -.21473972567524993 -627 57 -.21998896361557008 -632 57 .9063715058359654 -640 57 .30686725125727626 -642 57 -.4348484493097764 -648 57 .2834297170616528 -652 57 -.17951006391370253 -659 57 -1.1693156965622737 -670 57 -.40451059537842154 -681 57 .052172532489301794 -683 57 -.4648289880485972 -708 57 1.1093416826224836 -709 57 -1.0214348019428596 -718 57 -.1796189346701942 -720 57 -.4259924701910844 -722 57 .06677948835761155 -736 57 -.6429489115884686 -741 57 .31420597249090554 -752 57 .15123210294535144 -757 57 -.533918177450813 -765 57 1.214241738298283 -773 57 .08918402583362371 -782 57 .6022373992524268 -792 57 .13687360151563735 -794 57 -1.4929586718947907 -799 57 .07268351166992984 -804 57 .3677867858735646 -828 57 .8944846762790089 -853 57 1.2522399875662111 -867 57 .9892961514135105 -874 57 1.313325485822629 -879 57 1.2252806530776545 -890 57 .168336013130591 -901 57 -.26244039613684034 -910 57 -.24712691009679616 -917 57 .8292316748725493 -925 57 -.005200279980212483 -926 57 -2.354559141797675 -945 57 .5540445386146363 -959 57 -.2877094845082521 -972 57 .054391668317613745 -975 57 .6065303654253051 -980 57 .12038681103300819 -999 57 .339210593716907 27 58 -.34342581467865263 45 58 -1.5125039074823896 67 58 .6397784043100386 @@ -5846,92 +586,6 @@ 83 58 -.5621515772362659 85 58 1.6874799380962746 91 58 -.43773254619140445 -117 58 -.5156329040704685 -126 58 -.8121614009691099 -139 58 .5893843748440939 -141 58 -.6146063631132788 -147 58 -.04721334579068893 -165 58 -.8481413979397477 -172 58 -.662817974512955 -173 58 .2965922096198617 -174 58 1.1748821945922576 -212 58 -.9479868225871487 -214 58 .44634640968472933 -220 58 -.5404999697333668 -229 58 -1.3349686416165298 -230 58 -.8163403502489993 -240 58 -1.5505336097106541 -256 58 .3298297883356832 -258 58 1.347729250065439 -265 58 2.1786836267930205 -274 58 .8348299654099681 -281 58 1.6371135967405892 -287 58 -1.2187749095240867 -290 58 -.48694565692801106 -309 58 -.2086798570589105 -311 58 1.579611518251955 -313 58 -1.3479641493356147 -332 58 1.2423333207628084 -334 58 .4911760799443492 -341 58 -.7055736435539687 -369 58 -1.43343720421226 -372 58 1.5098919030513 -375 58 -.5679505182685558 -390 58 .45431065977471385 -404 58 .383948766594891 -416 58 -1.3248082803076593 -429 58 1.03947575529885 -435 58 .4819461849048259 -441 58 .30573308877727967 -444 58 -.6175945525803058 -454 58 .2074040557179747 -471 58 .9966188298163525 -483 58 -.3436426542272506 -490 58 -1.3912942523800809 -495 58 1.3365870322310893 -500 58 1.754051139397591 -505 58 -.1689614632144724 -513 58 -1.236086637976833 -521 58 -.662506851730236 -537 58 .8085157245039147 -545 58 -1.276224907219634 -552 58 -.3481814623879923 -570 58 -1.3225999432288542 -586 58 1.9404826992365567 -589 58 -.117904889352242 -593 58 .7926454851102063 -611 58 -.4145540988377231 -627 58 .22751157235480737 -635 58 .09017802814931697 -647 58 .31378801328588485 -652 58 -.9877101222360458 -654 58 .18494179799297164 -670 58 .34486890519777624 -689 58 -1.277269172981062 -708 58 .8235692673539043 -729 58 -.40537277994937004 -740 58 .26773969064282294 -746 58 -.43019770514758093 -752 58 1.216216029408863 -753 58 .18411404567142917 -802 58 -.6748378870072871 -804 58 -.5892409496412637 -818 58 1.125063058973187 -826 58 -.6467195984465169 -830 58 .8772039072955007 -842 58 -.02794999647421806 -844 58 -2.8486869665641654 -848 58 -.7460465920818025 -853 58 -.5350548055676269 -884 58 .25878714992810403 -908 58 -1.914465058808969 -917 58 -.20251725145930582 -919 58 -.6218096838315847 -921 58 .44659384714579925 -939 58 -.16971650742545974 -940 58 .2535698760568272 -943 58 .46108884790851 -988 58 -.5177545045206158 3 59 -2.3168309560602465 13 59 -.52046900708695 18 59 1.040063759068556 @@ -5944,186 +598,11 @@ 72 59 -.9951567862189358 78 59 -.38438116669566247 99 59 -3.3955358749677713 -119 59 -2.015465197247996 -130 59 -2.1583786087534595 -132 59 .6301967504145369 -146 59 .7366743943370964 -155 59 .4031313400788863 -168 59 2.282287807088568 -171 59 .30703082143525745 -178 59 -.7230584246091495 -181 59 .913176564530024 -184 59 -.42885571586235716 -187 59 -1.1996412885993974 -195 59 .34209118644905556 -196 59 .8217163688973795 -218 59 .2622955732882495 -229 59 .9643293784998488 -238 59 1.3583706749059128 -247 59 -.3791915322059212 -248 59 -.6686611232276751 -263 59 .6446234174091721 -268 59 -.38891833321645475 -276 59 -2.266803947299369 -284 59 -.2385688442568898 -293 59 -1.7158136037107918 -304 59 -1.370514192528399 -320 59 -.5224905376163491 -331 59 .4849212601032134 -357 59 -.6158896983026617 -371 59 -.7484601276820492 -419 59 1.0922967787206628 -426 59 .0807853804331423 -436 59 .7445624453941997 -440 59 .20776959725206207 -457 59 1.3510591638443605 -467 59 .19650321655190564 -481 59 .6925963788551337 -483 59 -2.4842083180720964 -490 59 -.13811349462224246 -493 59 1.074328440721985 -499 59 .5033219096252558 -516 59 1.2533046140533428 -518 59 1.825029273853936 -526 59 1.3858365923176972 -555 59 .6386048544891836 -562 59 -1.1438479461741828 -615 59 .13991434112981532 -622 59 .7080499045191005 -633 59 -.09209210048968916 -648 59 2.174683565159069 -657 59 -1.8036311128350293 -659 59 1.1709986550760307 -673 59 -1.3169022510908475 -675 59 2.4884113484134573 -691 59 .6970646686263456 -703 59 -1.1656082096797986 -705 59 .9444130718734912 -720 59 -.16282303511955076 -726 59 -1.500862588271106 -729 59 -.31040814446939274 -748 59 1.1638155572206312 -750 59 -.9146061937020393 -759 59 .42482037867648575 -772 59 -1.2289355948259082 -774 59 -.7012491006030895 -786 59 .5447969612168296 -796 59 -.6181364034393947 -819 59 .8570122347354125 -853 59 1.1569695935710178 -864 59 .3491752234912251 -876 59 1.0611678424223336 -879 59 -2.127963311159857 -883 59 -.05427645937675868 -887 59 -.5379334819717234 -908 59 -1.2901823637972885 -909 59 .5546017557380776 -912 59 -1.9752406801087623 -927 59 1.50799574175956 -933 59 .6169828280746268 -934 59 .7940143235481099 -942 59 .8119444782325954 -944 59 .004132905829335065 -953 59 -1.1851721436348956 -962 59 1.8587744235333077 -10 60 .4331174597135181 29 60 -1.0933314934145346 38 60 -.24756292310930328 48 60 -2.74651936946914 55 60 .4100480550847626 75 60 -1.643224492154072 -107 60 .06444579991714533 -117 60 -1.0431263040952399 -130 60 -.27773312059689664 -134 60 .7927018990350775 -138 60 -1.5710967855111462 -142 60 -.2597550699290276 -143 60 1.0465157901761062 -147 60 -.9165098028642988 -149 60 .7660819783403626 -156 60 1.0417532954253432 -161 60 -1.9245554938577691 -166 60 .2716690767498795 -167 60 1.6518946294712322 -179 60 1.0053706476745525 -182 60 -.2587807389278402 -200 60 -1.445989888288537 -201 60 .2588859788112955 -214 60 .28356368271271165 -215 60 -.8927230936716176 -241 60 .6022014830824632 -259 60 -.7228867034703303 -261 60 -1.107086908475023 -282 60 .43630481784638186 -292 60 -.2736141774208506 -294 60 -2.336363880748508 -313 60 -.3206073781278744 -316 60 -.4699306377238469 -329 60 .6970264473506977 -330 60 .24180527171455102 -336 60 .3988479749175366 -349 60 -1.2660761913055976 -360 60 1.0126003424416774 -367 60 -1.0507821356919234 -369 60 -1.3292870398093335 -380 60 .7520364204397413 -399 60 -1.1040474398775983 -409 60 -.09836374850133416 -440 60 1.3083460069353503 -465 60 -.4663498667099383 -484 60 1.042802881588181 -486 60 1.948194990117416 -488 60 -.7557358697525695 -489 60 .27122286279162405 -490 60 -.7182350707675655 -493 60 .5463573476472563 -498 60 .3367989124584583 -504 60 -.5370149984064794 -538 60 -1.191607987535763 -572 60 1.0857697114752378 -574 60 1.7693730109979127 -577 60 .22000845115505246 -578 60 .015327776384032099 -588 60 .12800775072623638 -605 60 1.043095696318283 -613 60 1.6678519565075631 -638 60 -.9136180890460371 -652 60 -.48640446609279475 -659 60 1.4587240444711693 -662 60 .9393663200522752 -666 60 1.1953469002873025 -677 60 .24601445955068663 -690 60 1.3856679593122025 -700 60 .21650336270868464 -712 60 -.5922010439859695 -713 60 -.3322161752108394 -719 60 -.1438056182369688 -721 60 -.7907525910297998 -739 60 1.1009624959130626 -741 60 .17882830885663414 -743 60 -.9056595290571988 -748 60 1.7370181262313682 -750 60 .6272503729617949 -766 60 .6814322900592366 -767 60 -.5688145953928971 -768 60 -.04643999708946933 -778 60 2.785117435199516 -794 60 -1.8687829528751614 -816 60 -.0064933646299077195 -849 60 -1.789597336486474 -885 60 -.15087291490284296 -894 60 -.03146148236300561 -922 60 -.11104618176826175 -929 60 -.9332778617491605 -947 60 -.6668321218801704 -948 60 -1.1027074858416555 -950 60 -.8222611016464219 -958 60 .49939759678863954 -960 60 2.221666178627689 -962 60 .06153788232538619 -970 60 -.008555292025473534 -972 60 .28937907304513427 -976 60 1.5227745805276394 5 61 -.07266817923830671 7 61 -.27532183665404303 17 61 -.48255247036992427 @@ -6133,100 +612,11 @@ 49 61 1.2020877482176995 51 61 .2276509468061581 53 61 -.7219693862183543 -62 61 .02531227539755035 69 61 -1.3331712994281764 71 61 .7000213777538005 77 61 1.1393731715153883 91 61 1.3982468038366962 96 61 .9204718784964352 -101 61 -1.840096888202498 -108 61 1.8530383175471936 -114 61 -.10789297508338133 -124 61 .6467985512445182 -128 61 -.812199972664561 -131 61 .48981620910456725 -132 61 -1.190809842098333 -133 61 -2.458465964006735 -135 61 .9719041927950498 -138 61 1.721994126625085 -141 61 1.8800051961803625 -142 61 -.5512327787485795 -162 61 -1.6669795354065549 -175 61 3.1441427715112082 -177 61 -1.5760150037235434 -203 61 -.701558606678047 -205 61 .35096075906205537 -221 61 1.9076222884801461 -222 61 -.4457331534568595 -229 61 .4164249875450319 -230 61 .002910767385792906 -247 61 .6987070363717799 -298 61 -.7746212835053076 -302 61 -1.8262139865938027 -310 61 -.3762963352600693 -327 61 .3566201554862133 -363 61 -2.183020451191731 -365 61 -1.0623969870910002 -369 61 -.45307070149632583 -389 61 .3198449406869308 -396 61 -.18489310878272341 -413 61 -.8567214386701134 -419 61 2.040249585408528 -436 61 .2041969206622361 -437 61 -.4126926085165052 -439 61 -2.837188030554331 -452 61 -.1044049561377761 -486 61 -1.8956618745174878 -488 61 2.6985541580005146 -490 61 .5677233393612511 -506 61 -2.2904381788368564 -508 61 .28200408509026853 -515 61 .6784586513835758 -521 61 .18096527904301107 -541 61 .6084623183986513 -542 61 .5309922137649911 -560 61 -.5258647888454425 -565 61 1.4860819578087818 -577 61 1.7250617838225977 -600 61 -.7321100341642148 -603 61 .4102017637746256 -612 61 -2.4959220605987977 -623 61 -.5804425956649777 -625 61 .38079370767300796 -627 61 -1.7034102136074325 -640 61 1.2366235710136588 -641 61 1.4369503055690094 -656 61 1.2687530404245584 -683 61 .6484762577061259 -705 61 .4773272992928125 -714 61 -.8506652625249496 -724 61 -.27675327167890196 -726 61 -1.3887454056970712 -728 61 2.2269430772834418 -736 61 1.5035280378003375 -737 61 -1.012186529380881 -738 61 -.0013497267187282044 -746 61 .49531098515805033 -762 61 1.4876059340835206 -765 61 .5200048670968211 -779 61 -.27820427343566406 -784 61 -.07118426455898978 -787 61 -1.8799609860134379 -799 61 -.57526549558883 -804 61 1.357797769543717 -806 61 .8347848344922086 -807 61 -2.2791203837069793 -808 61 1.1480730410877904 -831 61 -1.4567603294738711 -842 61 -1.097148361449324 -855 61 1.696381840166227 -858 61 .04594212578922845 -896 61 .12657542080315765 -905 61 .805785713807437 -908 61 1.5166333490585855 -963 61 .35957708271196825 -986 61 .32817010965467575 -991 61 -.08649306096830489 2 62 -1.792712037063403 20 62 -.006958376955603959 34 62 .5991071199878302 @@ -6238,92 +628,6 @@ 92 62 .40468819241762066 94 62 -.9805258928518392 100 62 -.00390708871269102 -101 62 -1.9556351932082536 -110 62 -.4624299352494021 -112 62 1.7672059441252923 -113 62 -.09281491058550304 -114 62 2.0690899114593218 -115 62 -.6010185890306119 -116 62 1.4436528383070864 -125 62 .4487064597974127 -126 62 -.7435720159041237 -127 62 1.9214206659631428 -129 62 .16150868448993727 -149 62 -.28052511090893845 -174 62 1.3334220276407527 -181 62 .2130563116412197 -205 62 1.320934365097694 -251 62 .5165910486674257 -256 62 -.9011758337906277 -260 62 .7947763131062594 -262 62 .253557101083018 -263 62 .14501067193523098 -267 62 -1.1772986159952243 -272 62 1.7786001466305785 -276 62 1.6740415862677147 -286 62 -.9983911076423292 -289 62 .98911970268267 -307 62 .8952092606369997 -309 62 .665173064593034 -347 62 1.1755731882040437 -360 62 -2.93546392924793 -389 62 .575590537254572 -402 62 1.8308914088902135 -405 62 -.20535655297514616 -410 62 -.012275368321586 -427 62 2.0837977323641645 -457 62 1.0970653343274364 -470 62 .04955436864154142 -487 62 1.507748862037691 -494 62 -.12429603712091247 -510 62 2.2979042114423933 -530 62 .6575495571487309 -545 62 -.3526325959353545 -552 62 1.1060165842321967 -562 62 2.0261920769174484 -570 62 -1.3231093102398581 -573 62 1.1066856325532135 -591 62 .05344650758715491 -593 62 -.5171476105789172 -610 62 -1.174013789285434 -626 62 .7123141006262611 -639 62 -.5358833762099383 -647 62 .4630539477467377 -656 62 .24128649258877197 -657 62 -.6135177146920078 -659 62 .901789347525026 -681 62 2.5438818624312503 -683 62 .9912429819344759 -691 62 1.2078337698107022 -700 62 -1.1148709563030568 -703 62 .4499738650543652 -715 62 -.6714843455407508 -723 62 -.4005786872467517 -745 62 -.4213659683337341 -753 62 .15923884243218694 -763 62 -.24824261647339288 -769 62 -1.5459774747255177 -781 62 1.2514531413694754 -786 62 1.3186695931378078 -820 62 -1.6438943321432251 -835 62 -.1066758154989238 -837 62 2.155891500121672 -840 62 1.7278821102357962 -855 62 -1.9274669914506306 -858 62 -.6743162787779052 -865 62 -1.296974508546892 -897 62 -1.0261072992389453 -910 62 -.12627230315489135 -912 62 -.9804696907463729 -927 62 2.2083597025219257 -937 62 .13845804417204233 -940 62 .7611980532304063 -962 62 -2.591292056055457 -966 62 -.5122767145226228 -969 62 .3834501746992509 -970 62 .8461188518526913 -974 62 .6835828468403551 -978 62 -.5519643080125587 1 63 -.6982653429246515 5 63 -1.1851193898267671 14 63 -.8198032548534686 @@ -6332,105 +636,6 @@ 73 63 -.3015948375048896 82 63 1.3354657736364812 96 63 1.0162489473013254 -108 63 1.2239324498619144 -109 63 .299966153300288 -133 63 -.4859320521452425 -153 63 -.06712242030471853 -157 63 -.4243800924010998 -199 63 -.7232890828008443 -200 63 -.5133094686319696 -203 63 -.7494668101455632 -204 63 -.11940062750066247 -208 63 -.05839590081820531 -213 63 .03349658544110433 -230 63 .9077468209439341 -240 63 .19481839907034326 -280 63 -.5733830359304477 -282 63 1.0853296316082943 -298 63 .7582657049237667 -343 63 .3743604654763337 -347 63 -.6717845901568955 -349 63 -1.7731793037704402 -350 63 .17632262533410534 -356 63 .34464073384928096 -360 63 .7099416295676317 -387 63 -.055171398320680506 -393 63 -.10778311573878482 -394 63 -.3016484955450485 -400 63 .01487600291869514 -424 63 1.125945198087673 -440 63 -.5706391236821056 -441 63 -.9272270044009392 -443 63 1.325145665221297 -469 63 -.3517906846222434 -471 63 -.9269466501887708 -480 63 -.15563941655126046 -486 63 .671322671802702 -497 63 1.0271697206334682 -502 63 .06218052154364643 -503 63 -.2995803309884159 -506 63 -.7607173703944216 -509 63 -.4600353629426504 -515 63 .5142303479746911 -529 63 .869252490630978 -538 63 -1.027543413191862 -553 63 .5654619564321978 -570 63 .2717043965534233 -586 63 -.6447282703202158 -606 63 1.1946208034931174 -616 63 -.9410421015276801 -619 63 .010911168209169403 -623 63 -1.0182496573135966 -628 63 .22933271658420884 -633 63 .39644141833453994 -647 63 -.764905874283108 -654 63 -.4077364680671437 -655 63 .33163419135106015 -663 63 -.04321113659371731 -669 63 -.08686544910380857 -677 63 .4375899287490018 -696 63 -1.330485517973864 -706 63 -.19812642278372844 -719 63 -.5584381189575693 -735 63 .1237061923790303 -743 63 -.21907705830706203 -750 63 -.427376851774799 -751 63 .48077090462613936 -754 63 -.6494207856502467 -769 63 .18721135012001364 -772 63 -.055549534639171505 -790 63 -.7494985293051153 -791 63 .5164321022780618 -793 63 2.351462371230955 -801 63 .9325158271609643 -802 63 .4727348643149094 -810 63 .9723272617677527 -819 63 1.1602331972768811 -820 63 -.16326463485368908 -829 63 -.4760965302086083 -833 63 -.05137860448409151 -835 63 .9308719493018709 -855 63 .7059008448349788 -869 63 1.3455577506754148 -880 63 .6433553102632343 -886 63 .03159817115741053 -894 63 .39233350756698826 -898 63 -.40313564777288086 -905 63 1.8590400998726697 -910 63 .7717482750955424 -914 63 .3122925403920896 -919 63 -.21798577381928524 -920 63 -.22585765194023927 -923 63 -.9718282779874565 -924 63 -.8311947173315151 -938 63 .5040767924402786 -950 63 -.931970243689483 -973 63 .2313332051577235 -975 63 -.41001558854200004 -985 63 .7349710570212478 -988 63 .2701875327977944 -990 63 .26420308271929416 -999 63 .4788798889505951 2 64 -.06915744576988792 15 64 1.4066534380467348 28 64 .08844398737586712 @@ -6439,103 +644,6 @@ 71 64 .13721575026247365 78 64 .35929524626249254 85 64 1.0854869329875112 -105 64 -.5009449076077483 -116 64 -2.3838281908696066 -119 64 -.2125451848464487 -159 64 -1.956330268937747 -177 64 1.1714145867999808 -186 64 .30922831166781684 -194 64 -.7659031696437807 -206 64 .25187732648264943 -210 64 -.6384522179796991 -218 64 -.008443877615435094 -228 64 -1.3482567889376134 -247 64 .8933545463418143 -256 64 -2.021705766519323 -259 64 .5006411213964419 -269 64 .3987754416757871 -277 64 1.1981709934525828 -283 64 .48470460771040924 -298 64 .9123819487375083 -305 64 .3753608119026353 -307 64 .18231484702681816 -320 64 .26026510256778634 -322 64 1.2454201487412702 -345 64 -.09922423695720511 -353 64 -.7118906483415487 -358 64 .7886734648495686 -361 64 -.5570692828320065 -362 64 -.25482074722907855 -396 64 -.5730960112395764 -403 64 -1.12942812038584 -410 64 .5296060484370515 -418 64 1.6372375637882675 -423 64 -.37954717000702143 -429 64 -1.4654512357968432 -430 64 -2.0801064020772153 -434 64 .46166717658252265 -438 64 -.07752387662507508 -454 64 .6463413786183789 -455 64 2.600028135857387 -474 64 .921947830382809 -494 64 .8995255398519831 -521 64 .4211080084414134 -529 64 .8783146513438908 -545 64 .9765567797737471 -552 64 -.18034297557440057 -568 64 2.58141324093587 -569 64 1.0973887664786326 -581 64 .021680326142958967 -600 64 -.5992142529063491 -607 64 -.7076977584138622 -608 64 1.140157997415912 -611 64 1.308828818685162 -617 64 .31560362058287866 -621 64 -.4621111123971044 -623 64 -.25055351179208396 -629 64 .9768115728628308 -633 64 -.22677169167224936 -635 64 2.5746442336650475 -639 64 -.7507505070461904 -640 64 .9228730528373162 -646 64 1.9481640408160565 -661 64 1.2175475762523396 -665 64 -1.2135967996545927 -683 64 -.5858052424380341 -686 64 -.18579970638215915 -713 64 -.5012838601680621 -726 64 -.9280250030032549 -731 64 1.1493718995041962 -747 64 -.22344857696409218 -762 64 -.004368617579744299 -768 64 .1764321865605745 -770 64 1.6352726420342534 -801 64 .8381858254440347 -803 64 1.5968827220766464 -805 64 -.09851621298718011 -811 64 .0033657927471922866 -817 64 .16823959823739282 -819 64 -.7467016887658025 -829 64 1.0094983007881178 -838 64 -1.0901330728540148 -841 64 -.9516047936132408 -849 64 -1.5712177633679953 -868 64 1.0538470630025538 -870 64 1.2211920464330102 -889 64 .9826704821206593 -898 64 1.6661622788180053 -900 64 .5287088676106827 -910 64 .7430311690926608 -913 64 -.9423983182673551 -922 64 -.560799690034446 -960 64 -.6513607766204986 -967 64 -.7350237008086018 -973 64 -.4160789989756837 -978 64 -.09517570271605102 -979 64 -.12029804726378487 -989 64 .22840415384388765 -993 64 1.4747435153937365 -998 64 2.0576614629835706 4 65 .4577618577882367 6 65 .6237298001570086 10 65 -.37075919859281137 @@ -6546,105 +654,6 @@ 39 65 -.3273526403558361 67 65 .6374805900663102 87 65 -.4781356183093925 -104 65 -.3546742805365082 -105 65 .6335325492963353 -115 65 .1557719620104701 -127 65 -.026122252517938517 -131 65 .34793089709401814 -145 65 .44692242238428875 -155 65 .08413775547119645 -165 65 .04870469992900117 -169 65 .2895221678507526 -174 65 -.6363048209441108 -176 65 -.04931063021375738 -202 65 .39491262396075644 -206 65 .33345020658391483 -212 65 .26149943528886005 -225 65 -.7407087315542693 -231 65 -.5875996403535622 -256 65 .04177564719747865 -257 65 -.6188354895415356 -272 65 -.22063710436242565 -286 65 .9650806715097624 -300 65 .09330409828806148 -337 65 .3306824973888301 -339 65 .3476936565820027 -347 65 -.23641204689095474 -364 65 -.22355716614090268 -366 65 -.002201018811094274 -371 65 -.4006218284876738 -376 65 -.15493634320292335 -385 65 -.4496142911225909 -387 65 -.329468557496462 -392 65 .1988647787024098 -399 65 -.2872790472795263 -405 65 .1609438545211871 -410 65 -.767910677598874 -415 65 .1986702439946361 -419 65 .3236483230704774 -421 65 -.04110562331763473 -426 65 -.4735262300749639 -434 65 .5146095406174475 -459 65 -.5673531809778863 -479 65 -.48316825599441016 -486 65 -.06756321158842776 -487 65 .47754448671740557 -498 65 .22166467421492003 -505 65 .014023670574093369 -511 65 .5210743257811363 -513 65 -.9776068756507524 -518 65 .7483082192226476 -521 65 .6305027271915279 -524 65 .0780227195538295 -536 65 -.07614906865595805 -568 65 1.0433708924566758 -572 65 .0953837516874432 -575 65 .9083050756136167 -577 65 .23091248844026496 -592 65 -.9883222327790382 -599 65 .7193298186470112 -600 65 .3244756340098265 -606 65 -.09710979894423102 -617 65 .12488080069530044 -628 65 .40279868316860235 -629 65 -.12800060850357836 -631 65 -1.0870578341875885 -635 65 -.11365111161777201 -638 65 -.6963591123148037 -641 65 .20976135088662368 -661 65 -.10995659330183459 -670 65 -.056879995087195934 -678 65 -.07984107665867604 -685 65 .22063262079622162 -689 65 .11828939120952281 -697 65 .4126208640539722 -711 65 -.5097924447317306 -733 65 1.007659206553326 -740 65 -.7276126830448297 -754 65 -.14143773028916717 -769 65 1.1496648276360981 -781 65 -.35079985205014835 -785 65 -.15480231585102705 -805 65 -.37034643770985753 -818 65 -.07288565392647994 -822 65 .2565080819043528 -837 65 -.17161684713621794 -844 65 .17489863111894843 -869 65 -.17055966785697924 -898 65 -.653210663884906 -899 65 1.1736425593044337 -904 65 -.364403255175876 -905 65 -.740934544546277 -907 65 -.6661387855084104 -915 65 .7044773520242128 -927 65 -.49459891469130013 -929 65 .4434268037552378 -943 65 .4890030806831647 -949 65 -.5680327696717558 -956 65 .4563211771715344 -960 65 .39740061866297494 -969 65 -.3076423209630852 -977 65 -.4848207593886883 3 66 -.7418233880478399 17 66 .739397254564165 19 66 .9185517207950646 @@ -6655,179 +664,12 @@ 55 66 -.3041431344713681 84 66 -.5999445818280968 97 66 .09403238316688736 -108 66 .6273725946585794 -118 66 -.5851657999924249 -126 66 -.7743830889887628 -136 66 -.6158400648457787 -149 66 1.3097750064412943 -175 66 .5453247457735939 -189 66 -.15772067460753142 -198 66 .7342933281155284 -207 66 -.06526801482492744 -210 66 -.6570749829736755 -212 66 -1.2958080584648182 -218 66 1.2687083898973617 -240 66 -1.9620713226323916 -246 66 1.5400879354629915 -247 66 -.24627354777298055 -271 66 .5571007578504377 -278 66 .12326968199834007 -284 66 -.07248800541358671 -298 66 .3100507814548647 -341 66 -.06270198760782014 -346 66 .24833059462930301 -369 66 -.7329425347467647 -370 66 -.7209044657066772 -396 66 .18498201327468375 -412 66 .2954356022197384 -470 66 .10558235247839381 -472 66 -1.348623384103766 -475 66 -.13426984605539788 -485 66 .11047588392004723 -501 66 -.20603525989572 -505 66 -.35017747207310607 -514 66 -.06361775552327376 -519 66 -1.6570146121327605 -551 66 -.7364796985758898 -553 66 -.3642396921577431 -560 66 .06819369335228123 -569 66 -.2070019988061142 -578 66 .19562639193604742 -599 66 .6544593897515584 -609 66 .8510934870204665 -614 66 -.5545231368243755 -621 66 .9333127648416119 -632 66 .3502003344082931 -642 66 .7134121227978577 -666 66 -.14950870960103285 -675 66 -.17035861346377024 -690 66 -.2448450586041234 -714 66 -.18342312767513433 -724 66 -.20148453022083285 -727 66 .9353435076652146 -730 66 .6862202779825312 -776 66 .35256234769383965 -778 66 .9645088118580177 -797 66 -.10927701252384532 -800 66 .9890870853247097 -803 66 1.4462707606865055 -811 66 .08165868097789045 -816 66 -.08122409305854644 -819 66 -.1498934914263989 -820 66 .2094931219957049 -840 66 -.6884611600691004 -843 66 .16602571927794235 -861 66 -1.0422378992798078 -865 66 -.9783411133316199 -868 66 -.8727649527065416 -872 66 -.6248419306352444 -890 66 .2995621312698432 -895 66 -.06614695471694049 -897 66 .9991637113727343 -908 66 -1.466916216816736 -911 66 .9489511514821638 -934 66 -1.321381658153474 -937 66 .029612746313808114 -943 66 .11095483294489962 -948 66 -.1148347234584712 -950 66 -1.5312891848243453 -954 66 .3887697731821997 -956 66 -.2709775980818733 -968 66 -.5754390788130155 -984 66 .40059278424183903 -985 66 -.9784237310354458 2 67 .29796903728550644 4 67 -.25360253552095885 25 67 1.286536984944269 31 67 .5571972280151647 74 67 1.3228531935532533 79 67 1.1990645161223996 -104 67 -.8303616484206788 -144 67 .2731667133922713 -148 67 -.47082952631053626 -153 67 1.1046889377951066 -167 67 .24610989483617213 -168 67 1.2132325785462041 -177 67 .6149860425073416 -197 67 .8184859990846536 -209 67 1.4580099908436492 -219 67 -.29251838414819203 -254 67 -.185412986509226 -273 67 .2951669178099153 -297 67 -.5877931731850028 -299 67 -.5267818847858254 -303 67 -1.322771078979604 -304 67 .9245497100875444 -330 67 .26407929984455036 -342 67 .1185482914002133 -353 67 -.8728987598554154 -354 67 -.37213133800830245 -378 67 1.4334013834853025 -390 67 -.3186095675954431 -396 67 -.22170781974841505 -407 67 .5427408006628313 -413 67 -1.2062331405803262 -441 67 -.7808179619512301 -467 67 -.01664000222828542 -469 67 .2960403799249858 -478 67 -.7685341168083875 -498 67 .6504824421773274 -507 67 .5377709998572949 -515 67 .9311049316499348 -532 67 -.2881585427353987 -534 67 1.1730187860555201 -547 67 -.5167089699342655 -554 67 -.9861150312551317 -594 67 .15144818934373022 -607 67 -.6310168202070217 -622 67 -.4670722631089026 -634 67 1.2373580635126298 -639 67 -.5219148951859603 -643 67 1.0177503699089814 -646 67 -.5558455276346316 -649 67 .30990572937829336 -653 67 -.24269350325725453 -669 67 -.46275725184799504 -671 67 .3942369466561038 -672 67 .039777082685241466 -673 67 -1.063904799491103 -675 67 -.13810145739891044 -678 67 -.5938986212892645 -681 67 .6816291328511253 -686 67 -.7507829817838261 -687 67 .3806372948206933 -702 67 -1.0399426846604205 -703 67 -.8339694713055377 -724 67 -.2681906544167823 -731 67 .07193417027548524 -733 67 -.3623776876718033 -739 67 .3039383854753906 -740 67 .18566576391130513 -755 67 -1.3782206657369547 -756 67 -.10398453756267674 -764 67 .15630101492317494 -782 67 .788260794630307 -796 67 -.4398609549601987 -805 67 -.014307340871839005 -812 67 .7708059853230831 -818 67 -.5511762901199286 -826 67 .4287271403810787 -827 67 -.7352514861377246 -843 67 -.4812893014459225 -848 67 1.240819516486771 -851 67 .43383096423365275 -855 67 .09595385056299224 -888 67 .7202654662957025 -915 67 .04446020089798148 -921 67 1.8123452101660593 -945 67 -.3531475811072063 -946 67 1.0372426079428236 -948 67 -.5917195739817075 -949 67 -1.6739750144352237 -960 67 -.1708735512820724 -983 67 .5951961243846173 -986 67 .05357655942301458 -998 67 .9244541111247961 5 68 -.33089908439426724 24 68 .6419977382887232 25 68 -.9511378692507768 @@ -6836,82 +678,6 @@ 80 68 .9913196903679111 82 68 .6287985080536747 96 68 -.18858401647570766 -103 68 2.1371151658143313 -116 68 .17770233227729 -118 68 .2330041153506284 -121 68 .36325052674128844 -125 68 .9266553679962084 -175 68 -.2560100108354387 -192 68 .8900723257293088 -215 68 .6848411871065401 -220 68 -.25896331116434035 -225 68 -1.6356470327200183 -235 68 1.2540490438475949 -299 68 .42087379898808214 -326 68 -1.7632921641429058 -337 68 -.3558097776095247 -344 68 .9930252737692937 -360 68 .682844225055615 -378 68 .9638063074172043 -384 68 .267468931733544 -392 68 -.9180587206291282 -399 68 -1.3055983681007175 -409 68 -1.9283751189099516 -410 68 .4126780358462974 -419 68 .30254835239179934 -421 68 -1.6864751468450414 -441 68 -2.26733049091385 -446 68 -.7842703809897237 -448 68 .7237418417697794 -458 68 -1.2307518460302629 -464 68 -.8702820051630282 -490 68 -.6817702610676786 -491 68 -1.1606802835525583 -496 68 .7193379710511826 -501 68 .15983982124252458 -507 68 1.260709567170285 -508 68 -.09577112865752813 -515 68 1.5766563777665026 -543 68 -1.1161817939081597 -558 68 -.9725420086689327 -564 68 -1.4058265824818656 -565 68 1.0333914954707943 -585 68 -1.0603314268277158 -592 68 -.676577593381872 -615 68 -.26348661175095295 -619 68 .896839551322992 -643 68 -.2874710808068901 -671 68 .8581038642337895 -677 68 .0035722009115887604 -681 68 .49584633372786524 -682 68 .15161732752575896 -685 68 .7700966796798714 -686 68 .45549897113737065 -694 68 -.17624148174427798 -695 68 .05766028147153546 -697 68 -1.5449787393774157 -719 68 .8884256388870067 -739 68 .18512099764970374 -746 68 .1446250805152942 -749 68 1.1251286572437627 -751 68 -1.0366225034142853 -759 68 .4618143150561265 -767 68 .7849910613029375 -780 68 -.8154721917603027 -791 68 1.3934780736847328 -797 68 .08500307657869359 -815 68 -.26594776366218914 -825 68 .8679355915232206 -829 68 .16542191617870777 -837 68 .015198144158810906 -854 68 -.4528960759682238 -859 68 .31630763090652514 -888 68 .9050008692227635 -889 68 -.43428820522888 -895 68 .06536978507514946 -903 68 1.1876903514203516 -964 68 .35001021906679486 -986 68 .5881270659678973 10 69 .4415800120417581 12 69 -1.285414345481911 17 69 -.5712059267527972 @@ -6923,89 +689,6 @@ 74 69 -.6620235974703608 86 69 -1.110778753036815 95 69 -.45981908725954734 -134 69 .3234378998906719 -147 69 -1.7157927627443652 -153 69 1.0469895473714448 -157 69 -.0004585527248243612 -160 69 -.9556805063887834 -175 69 -.8578438107981252 -182 69 .724129714218945 -186 69 1.2290255723238586 -187 69 .03806111659508675 -189 69 .5311490604269999 -190 69 -1.556321611428458 -194 69 -1.6252795575497023 -199 69 -.23337055475951193 -219 69 .19121229058946157 -227 69 .2298866004463193 -231 69 -.22463095908255848 -253 69 -.7637381201574256 -262 69 -1.0106467355276534 -264 69 .8558325274318807 -273 69 1.1955932679498982 -296 69 -.5292057620472923 -299 69 -1.4112492503541896 -301 69 .04657533605390038 -344 69 .8480327445594561 -350 69 1.018057021343855 -354 69 2.722842906416495 -369 69 .8169895105039371 -377 69 .942155553534149 -406 69 .352106200299448 -433 69 -.09840337536842672 -447 69 .8551452927823618 -458 69 1.0313092729635274 -469 69 .028891028891376735 -472 69 -.04693515052642584 -484 69 -.9485729085541569 -491 69 .42586866430292214 -496 69 -.4014644566958475 -500 69 -1.4025739340067074 -501 69 .6087584385180139 -508 69 -.21336835087396128 -509 69 1.1068322305771026 -514 69 .30929580727968253 -540 69 .20251588248248945 -544 69 -.4786332367151171 -545 69 -.5952695422713704 -565 69 .22300159940627268 -567 69 -.16378267611005734 -588 69 .562735162383568 -608 69 .23044079436293613 -614 69 .2081032717768827 -626 69 -.3265296875134208 -629 69 -.6199391173060206 -639 69 .530146336648558 -645 69 .25079211821899366 -665 69 -.00022855247004812274 -671 69 -1.0469276657478739 -682 69 .3856822357411677 -710 69 -.03601839472606795 -754 69 1.8455462121470094 -760 69 1.2475541103126124 -766 69 -.38476659046430695 -769 69 .40367965963505603 -796 69 -1.3158385481997026 -807 69 .7245156617669009 -813 69 -.6369632297831396 -818 69 -.08669722460405833 -847 69 .6065549989578779 -849 69 .8281607217936212 -867 69 .4630641676875148 -871 69 -.5608487709623919 -872 69 -.14202991655597846 -879 69 -.03372740362749565 -895 69 .17503383795256985 -921 69 -.7957869693510572 -924 69 -1.1249821198035244 -929 69 .3636057855731476 -933 69 -.1256408784041143 -946 69 .10222491105787081 -949 69 -.03263276808697377 -971 69 .4557665625821961 -979 69 -.024037807230633423 -992 69 .2990349772276184 -994 69 .5045424193327115 4 70 -.6254797879931551 27 70 -.6502652002801268 28 70 -.4569278926130901 @@ -7015,97 +698,10 @@ 57 70 .5434077411321786 60 70 .2589603644632057 62 70 .2160284486084424 -68 70 -.05074252796180194 77 70 -1.4182105613027012 -78 70 -.7357202915311573 84 70 .12065267754764201 85 70 -.12044103126771578 87 70 .3816152878134108 -125 70 -1.2903733706159874 -130 70 .34261700993658395 -142 70 -.18528560139268196 -148 70 .45123156619698174 -149 70 1.128647881295262 -159 70 -.6704454878901167 -164 70 .17816191552076177 -172 70 -.2554756640847623 -174 70 -.5439500503280756 -184 70 -1.3733082866208903 -205 70 -.2265065954843756 -210 70 -.4459269071456655 -230 70 .35102656009677413 -259 70 -.01728075814417772 -260 70 -.17647652715442325 -263 70 .3251468925315913 -264 70 -.1190098216092928 -268 70 .13911307115017665 -273 70 -.12170420818736427 -277 70 .2662618154064376 -285 70 .7993240355622891 -290 70 -.30756591893812585 -296 70 .5484020422344971 -305 70 -.8763791052813789 -309 70 .6870057389997364 -315 70 .9229401185203635 -321 70 -.6735755953623387 -326 70 -.8297893118585422 -336 70 .2746858324890954 -340 70 .1933403869277821 -344 70 -1.453944376088499 -345 70 -.7125829249922737 -387 70 .37085635007176315 -399 70 .5701082567300565 -404 70 .013311222648536292 -434 70 -.3452021634320666 -458 70 -.1897732069950075 -477 70 1.041501222057434 -481 70 1.1723195662666488 -519 70 -.397047856281651 -522 70 -.49915557668145893 -523 70 .287398667141449 -524 70 -.010775758847581918 -531 70 -.43240362185549897 -569 70 .06936939445161103 -587 70 .19193644901079265 -590 70 .19387195094733492 -594 70 -.9919151740346013 -597 70 -.24625955434918578 -605 70 -.11289122145159161 -625 70 .46521287163899633 -638 70 -.728292047094917 -639 70 -.7067655218205999 -642 70 -.09816741916572483 -644 70 -1.5061236858498794 -658 70 -.7376408631747994 -665 70 -.48255273399698784 -672 70 -.1849992123405246 -675 70 -.14719712569185767 -684 70 -.8075373811006569 -686 70 .4545628213888796 -695 70 -.7431648595922314 -696 70 -1.029677899263362 -697 70 -.15393746998026053 -702 70 -.0601171256185693 -725 70 .5690490185478476 -746 70 -.15929971419240824 -801 70 .23816538932286868 -804 70 -.3807010075507471 -809 70 .13145255930059643 -820 70 .2056112094211378 -839 70 -.2802410069053786 -844 70 .7425305858235547 -855 70 -1.1370443257356946 -860 70 .02234336167500961 -866 70 -.3219280879869414 -872 70 .843287159421638 -875 70 -.7262204198946393 -939 70 .06819297337383513 -942 70 .014539544359084111 -975 70 -.13301762939042583 -981 70 -.8379828397501746 -996 70 .023947834583402702 -997 70 .5021170660505735 -1000 70 -.32992078981069206 2 71 -.5164337755451591 21 71 -.07618020034516805 33 71 -1.1380437251333733 @@ -7113,389 +709,30 @@ 61 71 1.0347885760618083 90 71 1.0122576988596745 98 71 .3944826223614321 -131 71 -.18499591649920819 -139 71 1.113162504474144 -141 71 -.27913658054688806 -146 71 1.1500433851962426 -149 71 -.046800726797619756 -151 71 .6687192196110571 -162 71 -.10559808107433692 -164 71 -.00879739427256528 -183 71 -.479161582718589 -186 71 -.907997449136145 -200 71 .42931591872663544 -212 71 -.3302814561331042 -224 71 .3412193477194796 -231 71 .8748722706768448 -238 71 .6272869238946821 -258 71 -.625612644978794 -279 71 1.1046352506653183 -295 71 .42076815368715387 -301 71 .593045940516636 -321 71 -.24913456728085048 -324 71 1.4756028777188988 -327 71 .2721513322641428 -328 71 -1.198884997116339 -334 71 -1.3908584663348407 -347 71 -.5812117210798217 -354 71 .48656109557650973 -356 71 -.00639977390037863 -370 71 .6904955974141662 -384 71 -.7152456856875488 -394 71 .5816515525341035 -413 71 -.1816673762194578 -414 71 .5373634905410241 -434 71 .6157219782917245 -445 71 .45735745562297064 -455 71 -.7204206629419079 -465 71 -1.3222474732260028 -474 71 -.5123842449216794 -475 71 .16638098400438378 -487 71 .08116919783653767 -490 71 .28206333642607395 -492 71 -.3897940824192035 -499 71 -.806506214781654 -513 71 1.9456767290529529 -520 71 -2.048798965856045 -523 71 -.1466528946118089 -539 71 .10214364432238682 -555 71 1.4984074714924525 -557 71 -1.4329076248499675 -560 71 .8616959835008243 -580 71 .8553004842204065 -582 71 .2901715576637273 -610 71 .786089351802729 -615 71 .4727067476843956 -643 71 -.289780234525548 -649 71 -.18023829742359015 -655 71 .8869925132070727 -660 71 -.8894733779198719 -662 71 -1.1595829922205774 -671 71 .5957062341257533 -676 71 -.509301681641077 -686 71 .06479691530690018 -688 71 -.3200588932092963 -697 71 .7138122627417445 -715 71 -.7925681747595121 -717 71 -.558716225846344 -736 71 -.1840387333141421 -762 71 -.7055886309361481 -774 71 -.7662915105920483 -777 71 -.6197156085343356 -786 71 -1.062115376676162 -794 71 1.2669801983192979 -803 71 -1.7923460551058596 -805 71 .25365146582405906 -813 71 .30281869679098594 -828 71 -1.189679252699416 -838 71 .9415689510183792 -859 71 .7059275133944762 -878 71 -1.802531267651266 -879 71 -1.2498528895188152 -881 71 .18828314619398157 -886 71 .2855576729568852 -900 71 .26510860810891523 -910 71 -.5600148342433147 -913 71 .670645654087787 -917 71 -.8900192655251337 -918 71 .3270617957408495 -920 71 -.1813085894252953 -936 71 .6026718721250756 -943 71 .8504036406117853 1 72 -.8781191067027555 3 72 -.582907113753571 -12 72 1.0105639072264045 14 72 .26762273558047567 17 72 -2.1487783935527323 19 72 -.7203552703030233 27 72 2.555160039339903 -39 72 -1.0239426339630109 40 72 -.7408326622828103 43 72 -.5382737185170272 46 72 -.6464684748402152 70 72 -1.1449157005820858 84 72 1.342688283736807 86 72 -.9286071730192668 -110 72 -.12697671607791822 -113 72 -.6299105779627688 -117 72 2.8357333595025747 -142 72 .21934753244095812 -176 72 -.17117915161790292 -185 72 .7627088683364324 -194 72 -2.2819670166346846 -195 72 1.7832904287292177 -200 72 1.7496397827974268 -209 72 .9833537805816688 -211 72 .6226333857410165 -232 72 .9841539627508006 -234 72 .4248162797737517 -235 72 .4777884278188496 -256 72 1.3462135016321681 -270 72 -.8874047848428783 -294 72 1.2819312905284685 -304 72 -1.9709708066109588 -310 72 .8371872403686522 -325 72 -.26810944261383196 -343 72 .009437442640509677 -352 72 2.628535605306986 -353 72 -.51516609404303 -365 72 1.0804431504891328 -371 72 2.5904682520123954 -380 72 .5160539613323833 -383 72 .12657916868954852 -387 72 .20218841922292183 -392 72 -1.2685557476155311 -394 72 2.251699993803304 -403 72 .7699241193185186 -405 72 -1.142851019952229 -411 72 .43843907650649927 -412 72 -.6075480455516934 -430 72 2.6960651768371666 -441 72 -2.353141773857144 -446 72 3.5871113428002315 -451 72 -.9232233596258688 -453 72 .9747966188301495 -455 72 -1.7179209662213601 -469 72 1.0995610452771327 -499 72 -1.1764015145755937 -512 72 2.649872643733664 -545 72 .13042052341017124 -546 72 -.502996459430478 -556 72 -1.7050005925099507 -576 72 .5610924258298906 -580 72 .7778572710506423 -583 72 -1.9664788021114548 -590 72 -1.0913765244427347 -624 72 .24618357740456182 -635 72 1.0625113131942983 -637 72 -1.2356918838668984 -646 72 -1.0646427090396602 -647 72 -.5481138155710167 -649 72 .8290667357182226 -670 72 1.0948359823463492 -675 72 1.6955305260566846 -695 72 -.9583133504757487 -702 72 -.1379075785097495 -706 72 -.6541540314516375 -710 72 .34413959024754326 -727 72 -1.6772075329362652 -735 72 -1.259236521298733 -745 72 -.6221369223478757 -748 72 -1.5153719833495227 -751 72 .3116580438597152 -768 72 -.25898080184514793 -777 72 -.5103775626037498 -796 72 -1.758205890169635 -817 72 .4150462673579507 -832 72 .00945576997602049 -847 72 -1.551047787112847 -854 72 -.8793794522276721 -870 72 .24929646050595994 -904 72 1.085642832173814 -913 72 .7977654769648951 -931 72 1.0407029698156542 -939 72 1.2414141292371652 -941 72 2.0393152251247866 -952 72 -.9283672499654714 -970 72 -1.8914818000834712 -972 72 -.055429900858419465 20 73 -1.8708070322264672 21 73 -1.759254478534368 -63 73 -.471593953905383 71 73 -.16791249654757365 76 73 -.8245001692582777 79 73 1.2752531322831242 93 73 .5780797504644989 95 73 -1.4006427656020333 -140 73 .39645060415613426 -176 73 .024872741361680786 -189 73 -1.6073969658210483 -199 73 .4368154341577895 -230 73 -1.869299295096735 -241 73 .4128608036504274 -257 73 -.025376255109530205 -258 73 1.0054791772399723 -269 73 -.4281520270678778 -270 73 -1.4346838662959485 -273 73 -.1925144387553314 -308 73 3.0728806181523027 -319 73 .4898771094591464 -341 73 -.868797479287835 -343 73 -1.8309909201103614 -348 73 1.4573331097842481 -353 73 -.5784487637691228 -370 73 .660099309174732 -397 73 .6482124466253818 -401 73 -.8031101282398762 -406 73 -.10788643821422769 -415 73 -.7756590428540583 -416 73 -.053018088366064337 -419 73 .037854071563152986 -437 73 -.15812951660983168 -439 73 .6376187230869513 -448 73 .45514753053337886 -453 73 -1.6556627196807872 -465 73 -1.6339587081691622 -470 73 -.9599650624275342 -472 73 .05896475445129673 -495 73 .1279943685584574 -496 73 -.796401987776483 -507 73 -.9382000989897809 -526 73 -.20833482989080657 -542 73 -.7074139437463953 -549 73 .6551446482044224 -551 73 -1.8162761791729292 -560 73 -.03555787142883821 -595 73 -.6759228571469592 -599 73 -.3804319624326293 -601 73 .1269752090525116 -633 73 -.9275150956340247 -657 73 1.332052776627856 -666 73 1.8152276608576634 -688 73 1.879170737145381 -706 73 -1.3535270798333283 -707 73 -.0628155259682541 -712 73 .7272153300834902 -724 73 .22810285401838243 -733 73 -.2054854886602625 -739 73 .1822276342494777 -752 73 .8696668940536972 -754 73 .015478889080211305 -760 73 1.7053608184246833 -761 73 -.3042268226156253 -766 73 .4468559284586848 -790 73 .6989636847075288 -799 73 -1.216457719254263 -815 73 -.6550271534196045 -818 73 1.5079373978698272 -819 73 -.9980728233177043 -820 73 -1.9301041880354317 -847 73 -1.4528471264539964 -848 73 .44965958327805416 -860 73 -.6063931439554436 -862 73 1.6162896225668277 -864 73 -1.1001733619414802 -872 73 .15296943347479472 -883 73 -1.6642427417339911 -887 73 .3272870736288291 -900 73 -1.1904657623832064 -911 73 -.9572946557672655 -913 73 -.9748042814907483 -924 73 2.544746657269202 -928 73 -.42692482759509165 -931 73 2.680186052219201 -949 73 .57141794578353 -966 73 .48616185595132794 -993 73 -2.253610683494132 -40 74 -.2806336267294681 42 74 .6733741777675256 54 74 .021365285934321146 57 74 .48568125488822733 -59 74 -.45326415294575995 82 74 -.03191355773734878 97 74 1.3655480224711654 -131 74 .9544606105348954 -133 74 -1.1255608400038313 -162 74 -.5089885200066866 -186 74 1.6103871499239757 -193 74 1.511764235274693 -200 74 .2701568002479261 -210 74 -1.3589100175810012 -214 74 -1.3104225222511587 -221 74 1.242157570172922 -224 74 -.5119944668597115 -225 74 -1.4076020594853051 -232 74 1.0207062713342092 -234 74 -1.9386671371625432 -236 74 -.253371237018997 -238 74 -.09142370369516575 -241 74 -.0012998969771818303 -251 74 .04199622559040915 -256 74 -1.0190377970569144 -261 74 .22264933694752911 -268 74 -.22888068832635666 -272 74 -.6061111527458952 -273 74 1.075578190164731 -296 74 1.018292970916169 -297 74 -.7383618829859293 -309 74 -.8448581256012839 -323 74 .29759274829362237 -328 74 -.5911621395918804 -331 74 .14402748787831 -341 74 -.5254407987253871 -351 74 -1.457169754242448 -356 74 -.9330741941329765 -358 74 .6639357191473688 -369 74 -1.6419151872195288 -377 74 -1.2946172778103986 -379 74 1.0905970664929967 -400 74 -1.207588208133222 -415 74 .0865358721511231 -423 74 -1.4566457827569372 -424 74 1.0228662934566406 -433 74 2.0158211748157084 -441 74 -.721415899151714 -444 74 1.1257687085135408 -461 74 .9195058819311095 -464 74 -.739555480468444 -470 74 .2682448098315891 -471 74 -2.1060592811010834 -482 74 -1.2818841657129627 -489 74 -.5618639658191315 -500 74 1.1274385768324684 -510 74 .14726139827184154 -531 74 .11988137248655922 -540 74 -1.3199687428444784 -541 74 .34552833914156245 -542 74 -.012570120194967272 -550 74 2.5087164134987194 -551 74 1.3290083978190361 -562 74 -.11587525205338836 -580 74 -1.3389723609947037 -585 74 -.32242831615351336 -626 74 -1.6421334117904165 -630 74 1.0651674822305321 -648 74 2.061721696050501 -656 74 2.8520541359124723 -672 74 .1878359776002294 -687 74 -.3130243630052204 -698 74 -1.014947355035787 -711 74 .7457560481356447 -720 74 .6961785070382815 -737 74 -.6492678129913954 -741 74 -.5434656680122012 -748 74 2.901355262737825 -765 74 -1.5401567913309253 -776 74 .35874171278427536 -782 74 .5185729233595078 -788 74 1.087082122120261 -790 74 -.9289231992462534 -794 74 -.2169018062968658 -811 74 -.9964299025291448 -812 74 -.35000183661778694 -829 74 1.1886793463585605 -831 74 -.6515602894983556 -835 74 1.9055489348079981 -855 74 .6968965114765694 -860 74 -1.1341247288881533 -864 74 .1710418945533279 -866 74 -.4732171615795427 -878 74 1.8639572181025035 -885 74 1.5497469190387765 -897 74 1.9884009987504987 -899 74 1.1722822178954313 -902 74 -1.6649490552256587 -909 74 -1.7122074457000782 -916 74 -.28596086308908253 -919 74 -1.6515182570418776 -930 74 -.7237956686389129 -943 74 -1.123262985982619 -957 74 -.5407727655071527 -961 74 -.8425974564202111 -973 74 .26771722425581 -976 74 .9460768334137275 -980 74 2.5151018218070607 -992 74 -.9107776901485675 4 75 -.3786945714543113 5 75 -.6025036843434799 10 75 .7808806208619156 @@ -7509,191 +746,16 @@ 69 75 -1.064868035939743 73 75 -.10084553161032078 76 75 .9290062115096387 -115 75 1.140321747455433 -138 75 2.824527367484552 -139 75 -.26426626145956283 -154 75 .04657818288832776 -156 75 .04011479725241046 -162 75 -.5442834595062213 -164 75 -.3366968281040476 -169 75 -.46144164245131053 -180 75 .07445756231827799 -199 75 .786737486991494 -202 75 -1.2838442047918133 -218 75 -1.4603662203150678 -221 75 -.7647967298149959 -228 75 -.9873634857413324 -253 75 .10190544604560814 -257 75 -.025148079043213978 -265 75 1.8071474949789739 -272 75 -.9443369541092771 -283 75 1.7628893672670647 -309 75 .6210592301463619 -317 75 .4199335277153279 -325 75 .46708842704273623 -326 75 -1.2054402580574546 -327 75 .35026276428067055 -345 75 .12662611327483672 -350 75 -.0735177168525676 -365 75 .4466558136213541 -395 75 .0923939799885633 -413 75 -.6283000900971737 -423 75 .6816746766764459 -431 75 1.3465466275355618 -453 75 2.500346905346506 -458 75 -1.9988328317266297 -464 75 .8792880992953602 -465 75 .17067935533610532 -472 75 1.4048167387349426 -479 75 1.6374887170837966 -482 75 .5825429367665189 -485 75 -.06867141361198817 -495 75 -1.4356095151161 -511 75 -1.514271879596518 -513 75 -.08036588134128644 -527 75 .3106182125408605 -535 75 -.016145646868583455 -554 75 -1.2355042075074114 -560 75 -.3675356232490733 -561 75 .45925989996480526 -596 75 -.11088503913464423 -604 75 -.262549196318162 -606 75 .27068711460684014 -622 75 -.6242275146805575 -626 75 -2.0881760310531896 -634 75 1.4975751398924118 -665 75 -1.1014622859360985 -692 75 -.8416849902768209 -702 75 -.7538782828162425 -703 75 -.1676075906865323 -711 75 1.2382234306854631 -720 75 .4231829069000231 -721 75 .023174082004494126 -730 75 -.6173821709480743 -737 75 -.2411736218342561 -742 75 .22087481903749406 -748 75 -1.6478343029201092 -755 75 -1.547145057578371 -766 75 -1.1638511634497946 -767 75 1.2556874020618818 -768 75 -.3943937923463067 -775 75 1.3785285252278219 -779 75 -2.202895472139579 -787 75 1.6542985295772716 -796 75 -.15374340889299867 -810 75 .7497436228353331 -833 75 -.8844627833661198 -835 75 -.993018540933594 -836 75 .053603898425906266 -851 75 -.21467917751803614 -852 75 .303685562609534 -859 75 .5433087747418304 -864 75 -.6664138057071834 -874 75 -.42439016161419296 -879 75 .7184769529112284 -886 75 -.8268316607198518 -907 75 -1.8177293686128675 -911 75 .21170471116114115 -915 75 -1.1688966865245423 -921 75 1.630471698294165 -932 75 -1.3977078183652671 -940 75 .7464231483181374 -947 75 -.9434421622516239 -964 75 -.06306264468550496 -987 75 .22087807826198178 -988 75 -1.6030975060213748 -999 75 -.17846882564309213 27 76 -.7807339672116327 29 76 .7639839896189005 40 76 -.4074991136053617 62 76 .4999870341431355 66 76 .9753205695663314 77 76 -.36529565690660815 -79 76 -1.1314621745777556 80 76 -1.5098122547024644 90 76 -.5092812574196279 96 76 -.47246491218910935 98 76 -.06051437123784487 -112 76 -.4042800067605052 -115 76 .8233904711992674 -120 76 -.8292579164637524 -125 76 .4219613921900295 -127 76 .3858600073478775 -135 76 -.6188275329736257 -152 76 .7241424055103953 -159 76 -.8420116564809869 -161 76 -.29545525932768185 -177 76 -.7717790507066857 -183 76 .4595865531771658 -232 76 -.5504865407991905 -235 76 -.0872169671273561 -240 76 1.834111186405164 -267 76 .8845866548926886 -268 76 1.240355538521455 -270 76 .26126997058989515 -294 76 -.9797030594169296 -295 76 -.3630238118018043 -301 76 -.5268628363580938 -304 76 .7557137770162632 -325 76 -.30562019260046497 -363 76 .6716896979644611 -365 76 -1.6308406395594417 -376 76 .5596026357957509 -378 76 -1.162910618154649 -388 76 .9534404375588326 -420 76 .7637023042703847 -458 76 1.869627966829058 -464 76 1.4045460873736517 -470 76 .673239695274126 -504 76 -2.082257970628195 -505 76 -1.3347666278639285 -512 76 -1.1984420734459227 -535 76 -.2105497498106872 -550 76 .10819370236011734 -552 76 -1.2676801041185597 -565 76 -.46688452669210534 -574 76 .679696152789274 -576 76 -.21228568547975254 -594 76 .8470179229020284 -597 76 .36342893917431107 -618 76 .5874856928842133 -619 76 -.6107673448634677 -634 76 -.03197452860931008 -651 76 -1.190244984547424 -657 76 -.24729352238193394 -662 76 .926661128314553 -663 76 -.7140421113135956 -675 76 .10997097385918136 -680 76 .6188663487118174 -715 76 .003876171005423104 -719 76 -.6749572708017975 -743 76 .9611885614326604 -748 76 1.9894871710661897 -750 76 1.6043972157939546 -765 76 1.2717980029397338 -769 76 1.4201758197103957 -774 76 .039582106049186994 -776 76 .34258424429640155 -784 76 1.5585197478451167 -786 76 1.2206363870856756 -788 76 1.545968218663161 -827 76 .8323471620731782 -839 76 -.5861921844601924 -847 76 .15174040479078174 -858 76 .5871358302663322 -859 76 -.6551421776434058 -879 76 1.4538324617700442 -883 76 .1802964786983466 -887 76 .15304864710961516 -906 76 .3867262186816772 -908 76 -.1806617653883101 -916 76 -.36680080369236345 -931 76 -.5088642202269623 -934 76 -.8471255215327292 -938 76 .23582439707134908 -959 76 .3041702321509426 -962 76 .32904427246416135 -998 76 -1.1185232710931177 5 77 -.21211954720829826 6 77 .4466446006335213 14 77 .38766238232910527 @@ -7708,88 +770,6 @@ 70 77 .5003450577427129 80 77 1.0667831747983902 96 77 .03946810110604465 -109 77 -.035251512467299344 -118 77 .02869446278653187 -128 77 -.16868079758910037 -132 77 -.5764111715721157 -135 77 -.2502609637023004 -141 77 .38668159835988847 -157 77 -1.1599997188832194 -160 77 -.3609918513264182 -184 77 .4403400786506659 -193 77 .955862896757316 -195 77 -.34040511450695976 -199 77 .2385680639706067 -205 77 .4017557703235581 -209 77 .6008212855976064 -223 77 .11536194372770348 -227 77 -.2897082410830536 -230 77 .5904703210512396 -250 77 -.5361547711923793 -281 77 .8091006616159773 -289 77 .3168411171777464 -291 77 .13094390377650594 -296 77 .3457478143008394 -297 77 .262711051282477 -309 77 .2063223256490059 -310 77 .41290467684267906 -315 77 -.8850231180546483 -320 77 -.15276530924073844 -338 77 -.057043360304577406 -366 77 -.8320175370569534 -373 77 -.1289538017760533 -374 77 -.019761958187865365 -375 77 -.05216940705378977 -385 77 -.3076702086488108 -388 77 -.7561188487183413 -411 77 .0821796946565997 -420 77 -1.0330672457290926 -438 77 .3967753912139388 -443 77 -.296983353539947 -446 77 .6032379182724896 -451 77 -.8500454717437984 -471 77 -.20198789220873947 -479 77 .3702596165569981 -489 77 -.6902821282091939 -516 77 -.01727059425629593 -554 77 -.7357153469606893 -564 77 -.0028885382760036743 -568 77 .4719398191011931 -578 77 -.7080328758306869 -607 77 -.28428672027085183 -612 77 -.9347009926609994 -621 77 -.6330579637668144 -622 77 .32990130226014436 -641 77 .27535262706648744 -673 77 .25886769818384137 -678 77 .7379846471674817 -687 77 -.264099201155425 -698 77 .13110273085422922 -714 77 -.21906039747874986 -718 77 -.8979185647285228 -730 77 -1.2154746327038193 -737 77 -.23868200589151095 -750 77 -.6646808387719058 -765 77 .032241544421580844 -787 77 .16208948736687642 -792 77 .45008076546412534 -803 77 -.7564155298854913 -807 77 -.9108222915212575 -819 77 -.43267545418384135 -860 77 -.08813046940764535 -870 77 .3273560333046929 -876 77 -.028377499547689033 -879 77 -.015829212077492494 -900 77 -.15780087955614616 -909 77 -.6116826222005632 -910 77 .6118694038978759 -911 77 -.16978690910869337 -925 77 -.6117428430582891 -941 77 .715964485800657 -945 77 .20420850953459008 -950 77 -.06673672657903013 -957 77 -.4160187922353091 -995 77 .052074565500444266 10 78 1.392798938814349 12 78 -.7103989156155377 16 78 -.9635972488519959 @@ -7802,100 +782,6 @@ 90 78 1.1373214276622996 96 78 1.8469253177284786 99 78 -1.2569312033178803 -113 78 2.3518951344970356 -131 78 -.986463015818589 -138 78 1.4712661425327591 -139 78 1.3631713451049352 -150 78 .8398596723250422 -165 78 .7196555132703885 -171 78 -.48474184573246604 -176 78 .9721371249918882 -193 78 -.8867680013667067 -218 78 1.5484075168654428 -241 78 .4640912428654162 -242 78 .31571510966163463 -245 78 .9990689341264772 -276 78 .5084052759354194 -290 78 .17115344251118114 -295 78 -.23871917797632763 -298 78 .2243423695659501 -305 78 .47895723628941345 -308 78 .20827662576478545 -310 78 -.5920173401696103 -321 78 .22089272675745492 -325 78 1.6513689852089324 -327 78 -.3198957931882917 -329 78 -1.4412754348672856 -339 78 -.8133544891551291 -343 78 1.0968829509586921 -368 78 -.36446029493349064 -369 78 .039066723985295634 -373 78 .16236688845031977 -378 78 .9768790835488171 -384 78 -1.8786064132214206 -402 78 .9367537596779505 -414 78 1.161537916452097 -417 78 .0055464377219425764 -421 78 .42815095167940587 -437 78 -.3368589747681948 -450 78 -.9639345200134524 -468 78 .18106526804096584 -480 78 .669300920742645 -492 78 -.3523122791975558 -498 78 1.2791737613408014 -531 78 .25956592663632283 -533 78 -.208337559316004 -545 78 .5617592820991795 -561 78 -1.8995553106413523 -573 78 1.9536767067445044 -583 78 -.4663326221740131 -588 78 -.5264231567424967 -594 78 -.8787945309176537 -607 78 1.1971820930289863 -608 78 .07030959272908388 -617 78 -1.3956182945866455 -649 78 -.44822933910256574 -678 78 1.3206459112120132 -686 78 .7476405092267555 -699 78 -1.2588265096882592 -714 78 .5881154556866245 -716 78 -.2734387047073118 -721 78 .5327268617996084 -722 78 .6126745424082569 -726 78 -1.6255297839137546 -728 78 -.3587736025824188 -732 78 -.36877338764524464 -734 78 2.009599351773625 -738 78 -1.625320981540072 -756 78 -1.3015339324311428 -761 78 -.5602954539897783 -769 78 -1.6245425869211396 -774 78 .32854078168280754 -816 78 -.17545031078399428 -821 78 .13656650314718619 -866 78 -.3119874572547957 -868 78 -1.4102236110265016 -879 78 -.5686846018823485 -888 78 -1.7748812030836163 -893 78 1.2961959615432463 -896 78 -1.33250978579066 -913 78 .030156579773279443 -916 78 .8043000740414461 -918 78 .8315684610660813 -923 78 .1660676359002077 -924 78 .6966823329905851 -927 78 1.373858362133142 -932 78 1.479688377327893 -937 78 -.5648130605308088 -950 78 -.6866891704370597 -951 78 1.291195490670631 -961 78 .47268577662217887 -968 78 -1.081760125292378 -979 78 -.18580581326844398 -990 78 1.0842949500518886 -995 78 -2.7028447203676333 -996 78 -.667846892655617 -997 78 -.15217775587703755 3 79 .27325601707986663 17 79 .3884203404721352 18 79 -.4965301545618842 @@ -7906,87 +792,8 @@ 75 79 -.7285898586047139 83 79 .3493116561336093 99 79 .9201392231015406 -112 79 .48403384075923767 -116 79 1.4832632865749733 -123 79 -.026938964474254062 -125 79 .8278626482703447 -150 79 -.3083641379020308 -185 79 .03896186956209914 -191 79 -.2393654938555596 -197 79 .39053850005831336 -200 79 -.070943045041232 -203 79 -.3905171367399154 -236 79 .6308936737235654 -250 79 -1.1566389429742818 -254 79 -1.5386585589884212 -263 79 .7855753751271496 -264 79 -.7377168239835921 -272 79 1.1706554774813034 -278 79 -.38007488791540556 -284 79 -.5685509005867486 -287 79 -.1467251402370333 -294 79 -.07480459994400626 -302 79 -2.1474235325555573 -308 79 1.8226059172605893 -309 79 1.1491155286424428 -322 79 .06703514902124538 -344 79 1.5940976228392763 -361 79 .9252063358293532 -384 79 1.1486619455174165 -392 79 -.03594232895763222 -403 79 .06852384289231028 -409 79 .25494917149492424 -421 79 -.21044725378587562 -427 79 -.3675430571873535 -450 79 .4621065369559428 -451 79 -1.766928148646905 -455 79 -.521643021947307 -474 79 -.8937905845477527 -480 79 .060221301216528994 -501 79 -1.935287457040514 -506 79 .048531778537064904 -516 79 .31977479265635267 -517 79 .367953875693923 -519 79 -.20114751882971893 -565 79 .04310118174470645 -573 79 -.09483569388747312 -575 79 .6644119031454248 -576 79 -1.285372117316847 -578 79 -.1485632566840557 -581 79 -.5448939029646751 -606 79 .7218570845809034 -610 79 -1.0552581909074696 -645 79 -.4030159897179528 -646 79 -.40857499851895684 -647 79 -.7484121031363739 -652 79 -.789787869115985 -677 79 -.7351858726794704 -678 79 -.46754437327182075 -682 79 -1.0010045515915746 -693 79 -.16701241045347362 -721 79 .9970475143582024 -730 79 -.4509610623619449 -733 79 1.282776367035991 -747 79 -.1819820951338693 -749 79 .570286878083939 -760 79 -.04217711593407636 -777 79 .14096475166752898 -789 79 1.153459022239863 -798 79 .5872312846900092 -817 79 1.5620087071213788 -819 79 .36252528997019 -826 79 -.16188285472792302 -854 79 -.34542454907610487 -855 79 .31501647879294287 -857 79 -1.6490880087997701 -924 79 1.865302055681781 -926 79 .24039107004827032 -961 79 -.7812258255622039 -974 79 -1.394461921972809 -988 79 1.0287146505366047 1 80 -.3573614032825329 5 80 -.042512668724658434 -19 80 -1.12507638151427 24 80 -1.0292861062758611 30 80 -1.3127220832838382 34 80 -1.0075481154181598 @@ -7995,92 +802,6 @@ 55 80 .24650541137476073 76 80 -.6945848090273591 83 80 1.5572292104977397 -118 80 -.17678548774475134 -141 80 .9682477150262152 -171 80 -.33899508953005164 -173 80 .0784589751897235 -175 80 .11904775590101775 -189 80 .04462135365819994 -199 80 -1.2228529808260884 -211 80 .40733053243285 -230 80 .023159680573374836 -231 80 -1.027111974650125 -236 80 -.5844407230186585 -238 80 1.348022066050293 -293 80 1.5325292838772626 -299 80 1.1981392040176746 -304 80 .9931715896110691 -305 80 -1.002444646026325 -311 80 -1.77018268829234 -324 80 -.39266931852639786 -332 80 .9024283838784647 -340 80 -.39148979770342907 -353 80 2.255947997295799 -354 80 .0347049555849363 -356 80 .90083856581141 -357 80 .03878978247234721 -360 80 .20644355702013423 -386 80 1.0966387588537945 -390 80 -.05066821654908438 -400 80 .31056407493140425 -402 80 .42470607316958936 -426 80 -.705737615273094 -428 80 1.9957486958881605 -429 80 .3204249213459657 -433 80 1.6896426365629644 -437 80 .12294291755615458 -447 80 1.0416501659539796 -455 80 -.37883356585145544 -467 80 -.6090325324647115 -471 80 -1.7601992116633998 -472 80 -.25412192129721134 -495 80 1.346932193591614 -513 80 2.0721859057012715 -517 80 -.5585641153223433 -518 80 -.6005210879696827 -527 80 -1.8788115791321574 -528 80 -.8446977031817968 -552 80 -.8447841194504766 -555 80 .4354337605627476 -567 80 .01743907305304848 -574 80 .28438063080357284 -576 80 .6694169741378024 -578 80 .8158152600959108 -603 80 -.9150441992138959 -622 80 -.8960435450224544 -627 80 .6428649841544194 -630 80 .9355896489854645 -640 80 -.06453709267736474 -648 80 .1973437856924834 -669 80 .855158948124919 -670 80 -1.275809180524004 -674 80 .8871427348771458 -680 80 -1.7720440742348273 -724 80 -.3023473340976563 -765 80 .9021640905972369 -770 80 -.1842405952371798 -776 80 .9643782690372908 -787 80 -.9743846588474985 -797 80 -1.3626385715569111 -799 80 .8180594363371497 -806 80 .4145672976895054 -815 80 1.254134568346531 -817 80 .6194598400187745 -831 80 .495303450732892 -840 80 -1.5816456392149503 -844 80 1.2088070488223135 -873 80 -.6927330436136354 -891 80 -1.2355957784019644 -904 80 .4150359527987979 -905 80 1.1769721947961582 -916 80 .46337528906066183 -924 80 -3.310068117149636 -949 80 -1.4618506040514878 -962 80 .8043734131478665 -967 80 .08512643622745122 -978 80 -.07618444886698245 -988 80 1.5063810840519793 -1000 80 -.09386020898215137 4 81 .4172527319098459 9 81 .025681801712732794 12 81 -.31952546307562396 @@ -8099,105 +820,6 @@ 93 81 .8208902673295256 96 81 1.14470654928624 97 81 -.6735563228193139 -101 81 .8854177380366037 -103 81 .38881188471094125 -130 81 -.6609814792415826 -140 81 -.3689986246292544 -144 81 -.717096159230437 -148 81 .7378807470015013 -151 81 -1.9619830090295785 -159 81 -2.341275627471967 -165 81 -.33109979818453333 -172 81 .6904886981821344 -177 81 -1.967964559487778 -185 81 -.224902357524501 -194 81 .4316465814982666 -197 81 -1.9120926554896536 -199 81 -.9163158579542097 -201 81 -2.216744672601588 -224 81 .3852316138011829 -227 81 .7886308281797565 -233 81 .6397297140377258 -238 81 -1.3081892876756247 -248 81 -.506969518497471 -260 81 .19100473103445648 -268 81 -.18934099546047123 -283 81 -.058509735279576695 -288 81 .8764106192962723 -296 81 .01015863907395605 -309 81 -.4037083073790234 -311 81 -1.1979358787377197 -330 81 1.1147266304190506 -355 81 .9315052200089164 -361 81 -2.0932603335874913 -367 81 -1.323494119274149 -377 81 .18432798714238163 -380 81 .32126180816120686 -383 81 -.2072762516523504 -391 81 -.44971660593830687 -398 81 -.5973688530305286 -400 81 .8588555508026757 -406 81 -.00495518709853391 -407 81 .27210668206962924 -409 81 -.35466667342163044 -415 81 -.01179388015811996 -445 81 -1.1585130488864321 -457 81 -.48476370524708334 -458 81 -1.4551668039532646 -463 81 -1.7346919250432566 -475 81 -.48649627995941297 -488 81 1.7607282910495021 -496 81 -1.3438857536019675 -504 81 .9718671386212087 -516 81 .8262275345216955 -522 81 .6796039793612948 -531 81 -.17929008777878636 -535 81 -.053976598764828125 -551 81 .19059382171644906 -563 81 .7770809904017464 -571 81 .6081276430587285 -579 81 -.3439680061760983 -593 81 -.1525520915821526 -597 81 -1.3688667603300082 -604 81 .3992702111751416 -607 81 -.5074108479713649 -608 81 -.9906165580012902 -616 81 -.9784411403446026 -626 81 -.15427167269295503 -631 81 -1.1567433683571129 -632 81 -.08471096244113935 -638 81 -1.3680615342969902 -643 81 -.1377012893555644 -645 81 -1.0095972912193703 -647 81 -1.173474197016961 -665 81 .906907619048764 -675 81 .9917322364767934 -707 81 -.5298103099515287 -708 81 -.7085405762410822 -710 81 -1.3532980480470007 -711 81 -1.8059572587548278 -716 81 .9786943901876135 -752 81 -1.0778287341536859 -757 81 .34133029308952356 -783 81 -1.6257152018872916 -786 81 -.2415636500801068 -799 81 -1.3777050090318124 -813 81 .961046595310272 -848 81 -1.1056855600152058 -849 81 -2.293873169950676 -861 81 -.23991494244031925 -881 81 1.1063964465535707 -887 81 1.3376830488874165 -890 81 .3564184780452498 -902 81 1.2537715285077027 -907 81 -1.14676018246208 -941 81 .8506270256798064 -944 81 -.4139083496704454 -946 81 1.5969432129922077 -957 81 -.1595874232085973 -984 81 2.0481740291539277 -994 81 1.3904267602496128 -998 81 -1.236813650182299 11 82 -.8390633651992045 25 82 -.0037155601375555014 26 82 -1.560443444893502 @@ -8209,113 +831,6 @@ 74 82 .06763384766600097 75 82 -1.0023341348156378 86 82 2.107375678349561 -103 82 1.3887168340297669 -129 82 -1.8005688784952314 -140 82 -1.3324060382488736 -141 82 -.10385231721753832 -150 82 1.5603409395220127 -155 82 2.5990715144344 -166 82 1.390514480512058 -167 82 .22877226569724657 -186 82 1.07026627240041 -205 82 1.2256922232312357 -214 82 -.8658184976226796 -215 82 .11474117612728704 -223 82 1.4060676230703488 -225 82 2.6380724286408825 -236 82 -.6922157530141386 -239 82 3.7572070678460463 -241 82 1.2861553201933709 -243 82 -1.237641809948621 -247 82 1.4640947014961825 -249 82 -.4102382508689572 -282 82 -.03707792025075672 -284 82 -2.882521299104565 -285 82 .9261542903034339 -297 82 1.758876160661152 -305 82 -.11397424338475046 -307 82 .9822878918376281 -318 82 -1.5614553044079982 -339 82 -3.3377222986191035 -341 82 .9095308383204082 -346 82 -.3136592274251455 -355 82 -2.362252106418963 -356 82 -.45726568168498943 -367 82 .05953159378304408 -372 82 .8525980704900529 -395 82 -1.535320310822622 -399 82 -.2770240125772585 -424 82 -.9628501145691243 -430 82 -2.4274858311523384 -436 82 .8760020665587418 -452 82 .2349021450483577 -460 82 1.1329246947603637 -462 82 .46090264145771276 -469 82 .44134479725774434 -477 82 -2.628730815948287 -479 82 -.0327075655441366 -480 82 1.219172982802722 -509 82 .29441474605369256 -515 82 1.364340405306025 -540 82 -1.9274034671052194 -550 82 .5424232076057255 -562 82 .16506926730100896 -567 82 .6165066914766538 -570 82 -3.095667429162527 -581 82 -.9455328699469121 -587 82 -1.5344266433537275 -590 82 -.994134933372609 -594 82 -.5275795415785297 -596 82 -.7962128251203877 -599 82 -.7176841998703976 -607 82 .2845862558525107 -626 82 -1.5252833132306272 -630 82 .8899579917893079 -651 82 -.6477298074697916 -658 82 -.5069375375034592 -665 82 -2.2452657645790244 -672 82 -1.1169802400977331 -673 82 -1.8877269604396185 -677 82 .131531275738212 -684 82 -.6666045586515775 -689 82 1.2115354221221293 -690 82 .7934481001755129 -692 82 2.3673913161881606 -701 82 .42964115575728895 -717 82 .4898980708367976 -722 82 -.1730461120068009 -723 82 1.3804026372488458 -727 82 .46638326622210435 -733 82 -.9524906646623981 -744 82 -1.4324376022816385 -745 82 1.5004952703747254 -750 82 -.6219582347794762 -773 82 -1.3263658730247045 -775 82 .9727502679535789 -790 82 .14730392321076421 -799 82 1.785805780129713 -807 82 .14996324611911657 -814 82 .01071605266682124 -821 82 .41975758513507205 -824 82 -.27858098961711497 -835 82 .4200869122809032 -840 82 1.0051773576462915 -848 82 .11425104958481079 -871 82 1.1593001566569738 -888 82 -.21103790412222817 -895 82 -.15657095035718788 -899 82 -2.090586499260661 -900 82 -1.0483432008729732 -902 82 -.7435994962691527 -909 82 .16992436917581566 -910 82 .8486563470274321 -916 82 -.14044028647239593 -934 82 -.8904241337073757 -940 82 -.14267670296680587 -963 82 -1.4596116077296077 -965 82 .725230605638679 -980 82 2.062005503837851 -989 82 1.5287451987342389 7 83 .5417865369942256 32 83 -.04403380434435167 34 83 -.11092807149659432 @@ -8327,472 +842,32 @@ 69 83 1.1162257305388361 70 83 -.42364019200344005 85 83 .9765067750158041 -104 83 .590203919424293 -115 83 .9690241085659109 -133 83 .6748033291311983 -146 83 -1.14417857924457 -158 83 .22471710540899756 -162 83 .7315308993752319 -164 83 -.028173989315748053 -172 83 -.4202117724024364 -187 83 4.426373257223753 -188 83 .854902778326833 -198 83 .37117030547071284 -200 83 -.1173518168498009 -261 83 .782726526073934 -271 83 -1.2131792614318302 -298 83 1.1758137880023662 -312 83 .7726094110942133 -333 83 -.3798410685250897 -341 83 -.45886909634181905 -344 83 .4552623259951675 -349 83 1.7307239299890445 -355 83 -2.002995287617114 -363 83 .5799372663793123 -364 83 -.6862420835483664 -371 83 -1.4232304106499531 -408 83 .03155143537827847 -418 83 -.25203273650228836 -434 83 .48214419555161886 -448 83 .2974484833940179 -450 83 -.11528715044443717 -468 83 .0892784073049576 -477 83 -.4464085501834274 -480 83 1.4553022697997804 -481 83 -.6565176186201308 -492 83 -2.030238937548135 -493 83 -.9325857529773719 -503 83 -1.2540681316356541 -512 83 -.8028577913459496 -515 83 .6993257914553467 -564 83 -2.403969194887711 -570 83 -2.3347214560615974 -575 83 2.5905669382539607 -586 83 2.4739600095636805 -593 83 .472782719068311 -607 83 1.6659249622221082 -610 83 -1.3494285786835605 -616 83 1.1614877900897351 -622 83 .22501632569557972 -643 83 -1.1768974242555097 -653 83 1.8789989649977539 -672 83 .7286302973116985 -676 83 -.6485756515430039 -678 83 -.9288581361636469 -680 83 .7564500422360304 -683 83 .6360517132890325 -685 83 .8742498997045727 -703 83 -.19485134492443235 -710 83 .7326513140824762 -715 83 -.6259076638725993 -720 83 -.846863944149837 -734 83 -.10892937177573798 -736 83 -.36646154329045744 -744 83 1.1548701430698742 -747 83 -.24184850553326595 -755 83 -2.892230024916928 -756 83 1.0008749539666346 -769 83 .5186988156973257 -772 83 .24230617964746554 -775 83 .7796066462982247 -777 83 .5059954811899376 -786 83 -.20654496659671862 -819 83 -.94813500697382 -837 83 1.1133425795743523 -851 83 -.04436293247739742 -854 83 1.063199615540316 -887 83 -1.0355838424831079 -899 83 -1.2061836360913705 -900 83 -.924458474286188 -944 83 -1.2138084016219264 -954 83 2.5872115885650913 -958 83 -1.5376024257089647 -972 83 -.5131917413919065 7 84 .1586922737293448 -33 84 1.6378450110147584 40 84 .0926714910485817 50 84 .7223009335759153 55 84 .8902341428129462 58 84 -.008131352046529802 61 84 -1.4833979775067203 65 84 -1.249857681979614 -109 84 -1.6128535825759647 -115 84 -.934713410187668 -120 84 -.4686707383038993 -121 84 .4158594470541464 -127 84 -2.8778080421233327 -160 84 .8414086771934431 -170 84 -1.2442733614503876 -199 84 -.7031008351710815 -214 84 .7929340147304866 -216 84 .11572593252163393 -229 84 .4247870212237908 -234 84 -.4012133918172723 -240 84 1.7925830984352153 -242 84 -.7098440489320037 -243 84 -.7259000030131698 -255 84 .42618335572755905 -263 84 .6885180129892844 -269 84 .3160793470448611 -283 84 -.3832081285492837 -284 84 .5194394212000164 -304 84 .968774938130366 -308 84 -.8928832247034886 -312 84 -.4175583624166644 -322 84 -.25126013704330735 -333 84 1.4143182753689154 -336 84 -.46576977465475133 -340 84 1.1327252451831125 -361 84 .09966269126506089 -375 84 .06855909113526186 -390 84 .9654800414104234 -398 84 .0836806766389479 -399 84 1.2751499247571996 -416 84 .6635327662952343 -419 84 -.9733990622726395 -422 84 .019924091290375655 -429 84 -1.197044621694488 -445 84 .534934913637381 -448 84 -.24623527491683933 -461 84 -3.089956577452459 -470 84 -1.192344095218936 -475 84 -.20047208168909753 -476 84 .7727560571020926 -493 84 -.5650908936484818 -507 84 .24205251210287543 -518 84 -.8328544388183782 -530 84 -1.5403769372859277 -541 84 .8952798273938415 -546 84 .12339855143412577 -582 84 -1.016862677810788 -587 84 .9004692712475817 -588 84 -.09465529254947248 -595 84 -.22856831642060985 -600 84 -1.3041939732614798 -602 84 -.2654913115093737 -603 84 1.380258361727661 -605 84 -1.0888435972728323 -615 84 .02013364807592371 -617 84 -.5146190747372441 -634 84 .8496960743800241 -643 84 1.382608100898567 -652 84 .23288678715058136 -664 84 -2.373895516018315 -677 84 -.8810456643260476 -704 84 -1.5614019346496684 -708 84 -.481485056185849 -711 84 -.18213294297839766 -712 84 .7694291631006234 -723 84 .9021478659148136 -731 84 -.5398652278312901 -736 84 1.0369548854180017 -740 84 .07012117644828286 -743 84 -2.105261273727931 -760 84 .49911161152273786 -768 84 -1.0301275488763584 -769 84 -.45066786068423353 -793 84 .4149612923032861 -795 84 -1.1862115203816237 -800 84 -.8282712461325067 -818 84 -1.636741598921347 -854 84 -1.4272475306207018 -884 84 -.5431656309260197 -893 84 -.7003775172069753 -904 84 .41861005954782277 -906 84 -.7421409204773417 -909 84 -.7290361429557024 -915 84 -.4837134978812056 -917 84 -.11195436080717659 -927 84 -1.070875973366807 -949 84 -1.1255826125616843 -960 84 -.6314199425992183 -965 84 -1.0071555534305352 -970 84 .16908351373463143 -976 84 1.8287896447304852 -978 84 -.8369286968700113 -979 84 -.16620346098286432 -981 84 -1.2502428808603776 10 85 -.3330455813285108 13 85 -.6514194741293058 14 85 -.023776090264009397 16 85 -.6499315764932921 20 85 -.007884750912557241 -35 85 .6062797815124858 67 85 -1.9078260981631856 77 85 .5677689225926744 81 85 .4278510923380882 89 85 -.8517654400158853 -108 85 .8442029159662648 -111 85 -.8679029831347667 -116 85 -.6863266436636941 -117 85 .4075840036406491 -118 85 .5703197112378083 -121 85 1.0934105818033468 -126 85 2.7333861837363393 -138 85 1.2606082768000948 -164 85 .3695261856734512 -166 85 .23439380214558914 -168 85 1.1837168565228227 -173 85 -1.5253524240817737 -200 85 1.7527351195117589 -204 85 -1.034689897658036 -208 85 -.16305379920043134 -211 85 -1.5675470545613384 -215 85 -.5130357603004466 -234 85 .26118981780761413 -235 85 1.4263739710195633 -252 85 1.596602475209027 -256 85 -1.6243216535286915 -286 85 .3755173120067133 -295 85 .9635778585966024 -308 85 -1.3101163309107007 -322 85 1.2780639536579481 -331 85 .3767263771051559 -337 85 -.3435922439747501 -353 85 -.7285778296323473 -357 85 -.3389167780422453 -359 85 1.1649717829582458 -360 85 2.8772261234653254 -368 85 -1.0394392523279277 -370 85 1.1549900307462568 -378 85 .043573882731337055 -382 85 -.5556007556615071 -384 85 -.10674414015634867 -393 85 -.3684428147065464 -406 85 -1.8663201372344447 -410 85 .551730391642098 -419 85 .4042233977104542 -420 85 -2.5217051985155465 -436 85 .46604371969391667 -448 85 .22371809985786367 -450 85 -.001097306375711267 -457 85 -1.2768253355322994 -459 85 .041792001461163325 -461 85 -2.0410885612861707 -476 85 .6443139501000426 -503 85 -1.614752916677766 -505 85 -.49574569615888875 -515 85 1.394568208114094 -522 85 -1.2505627812576698 -531 85 -.09575222540639029 -533 85 1.0025412577250359 -540 85 -.5853618753911423 -550 85 .8865675080427392 -556 85 -.8993658131548854 -558 85 .0869675887023472 -570 85 -1.3926522627979159 -579 85 -1.50739596126875 -581 85 1.0617541722695185 -583 85 1.6922805318191978 -606 85 1.495269010284599 -616 85 .6382925886745763 -617 85 .47102185289126264 -625 85 2.1812243729617844 -648 85 1.1473449896868855 -661 85 2.062935569215584 -662 85 -.8453787029245462 -681 85 1.0212740886796103 -698 85 -.03725336497204766 -725 85 1.197504913590368 -745 85 1.4360314857425598 -750 85 -1.0711339475329562 -766 85 -1.257573980805279 -790 85 -2.5691756154807934 -799 85 -1.0325143976588287 -813 85 1.1443716602739007 -817 85 1.0893803071258261 -828 85 .3425572398653771 -854 85 -1.6721166484471541 -857 85 2.353196753978147 -858 85 -1.1662043654388348 -874 85 .7848733414118607 -909 85 -1.435381951339086 -923 85 .36491826199332383 -925 85 -.7062175805680706 -949 85 -1.3222418702621948 -959 85 .05865202599064498 -962 85 .9713174348297272 13 86 -.7710915685089202 18 86 1.4641899142246302 65 86 1.724093871213153 90 86 .9985967247016794 -102 86 -.42967588541095725 -105 86 .8932783259496053 -108 86 -.9155263906714628 -109 86 1.3789355870816848 -141 86 -1.892422663220648 -148 86 -.5302241696988745 -154 86 -.7552108324233896 -165 86 -.4813030607818042 -180 86 .018924616570993813 -183 86 -1.2927836699269513 -193 86 -.4329551614206763 -220 86 1.5427413923744215 -229 86 1.6402022265992002 -247 86 .4434687753674794 -257 86 .4300176629671164 -269 86 1.3071632425076847 -276 86 -2.075834553426364 -302 86 3.6579556359128995 -306 86 -.4843267580821405 -315 86 .9962715987428931 -341 86 -.4201876994832701 -343 86 1.8043200470375547 -346 86 -1.3213834678530996 -347 86 .05739670916770083 -359 86 -.25269233439925365 -375 86 -.7430100913433935 -378 86 -1.0571625581232436 -380 86 .9839678925507424 -414 86 .3151556132426703 -432 86 .14978089120509908 -463 86 .11623213917898288 -466 86 -1.5182543211339532 -470 86 1.0223271081635714 -473 86 -.23838895795761486 -474 86 2.3414257357348913 -478 86 .5606476709042514 -482 86 -.913128357376642 -495 86 .04233837756690234 -505 86 -2.52488592796413 -518 86 -.35332660722042 -528 86 -.3022871144743339 -534 86 -1.6125217179653977 -550 86 .4942991086369185 -562 86 -.2542046930985617 -571 86 1.319031599235884 -581 86 -1.5814864143521947 -582 86 .020939392540037002 -583 86 1.1494382859987267 -604 86 .7477696000637263 -611 86 -.13489233403527248 -619 86 -.6691553346553059 -620 86 -1.5626307790037832 -623 86 .12754396783909414 -638 86 -1.609868974383573 -641 86 -.7945027009458747 -647 86 1.3581139452894537 -648 86 .16101070892952496 -689 86 -.8541590194606031 -699 86 -1.1441180413472696 -703 86 -.8324633767007458 -712 86 -.13471152610975382 -721 86 -2.112039929188567 -727 86 -.24553210311604082 -728 86 .7054863562810101 -737 86 -.007579923684620904 -747 86 .15395715459515155 -749 86 -.6884936920263223 -764 86 -.11008660649758009 -779 86 -1.6851420464192988 -795 86 -2.526764790676959 -814 86 -.7881216182513254 -853 86 -.36792306699696564 -855 86 .4999766687095595 -860 86 .5365923407957348 -861 86 -1.0585226497242985 -867 86 1.865835394450138 -870 86 .6386905518853335 -885 86 -.9803416841818767 -932 86 -.09335825107992407 -954 86 .4934070615993189 -964 86 -.3841447950595792 -972 86 .45872942898937835 -973 86 -1.0425819643105652 -981 86 -.09535139031410328 30 87 -2.228675341855869 35 87 .37878421621235464 38 87 -.8433560217315914 42 87 -1.5616368343810794 88 87 -1.2086017769280792 98 87 .3611539857960668 -103 87 -.9232394195566176 -110 87 .8549426292721567 -123 87 1.4185002624175844 -124 87 -1.4048871407071717 -129 87 .059890843523448575 -140 87 1.4399722798061099 -147 87 .30026316670201475 -170 87 1.6416813861606216 -175 87 -1.3740718634706486 -178 87 .7971201735886697 -188 87 -2.737735241942013 -189 87 .7666668285873921 -191 87 1.6093714212838663 -201 87 -.784963938383891 -220 87 -1.0349923646679833 -223 87 .5926926481232357 -230 87 -.1168283702270688 -246 87 -.8654843016951296 -247 87 -1.4746663396950912 -249 87 -2.1242429837437595 -253 87 .8751840003046856 -271 87 2.2443338978799834 -285 87 -1.8886333646848463 -286 87 -1.6306511503396166 -298 87 -.5199821064103904 -317 87 -1.9827619071807434 -337 87 .6835851545173746 -366 87 1.0305017199097797 -392 87 .6841353862189968 -399 87 -.40691652308236903 -400 87 .5626439313572248 -418 87 -.3399167883754235 -423 87 .34535123616107427 -434 87 -.6335689516026323 -449 87 1.0386490064787752 -486 87 3.0731578698208963 -487 87 -.10931100281890971 -495 87 1.0949303587417618 -513 87 1.2807558657494456 -524 87 -.12997801171390272 -525 87 -.6289669649126662 -530 87 -.7670430723109561 -542 87 -.9821417673661781 -544 87 -2.181677842559093 -551 87 -3.340946135539138 -578 87 1.5188537979671446 -588 87 -.28394321147931834 -613 87 -1.579226947653403 -619 87 .973598996132035 -635 87 -1.373756748405667 -638 87 -.05567838599505791 -640 87 -.8830212178805793 -657 87 -.07717378637614508 -675 87 -2.1166290513207464 -678 87 .19773765423245152 -687 87 -.26350706522347633 -693 87 .03615408349092934 -708 87 -.2937138905337897 -718 87 1.4032438236730758 -726 87 1.9310713473623227 -735 87 .24166032241913293 -740 87 -1.5749178382365046 -748 87 -2.885227395520146 -754 87 -.5977550441650439 -772 87 1.4043811828942485 -775 87 -.7650792521156528 -797 87 1.6917426616922078 -803 87 1.207814397075182 -817 87 -2.030569365676586 -821 87 -1.362852558393954 -826 87 -1.191447277301501 -836 87 -.5484128122487815 -857 87 -1.9381274134075916 -867 87 .008406633037712774 -893 87 .7379473224131348 -900 87 .9751714426784902 -903 87 -.23417476659148662 -904 87 1.3104167774029742 -928 87 .07087957278527514 -959 87 .5215732403215423 -960 87 1.951837786850253 -962 87 -.6331610572808533 -970 87 .4504775949961628 -983 87 -1.1643534952742414 -984 87 -.34810854286862725 -994 87 -1.0520762766612097 -999 87 -.9115863128937436 5 88 .9635487641412909 13 88 -.27461870921808185 15 88 .2987197055353105 @@ -8806,89 +881,6 @@ 81 88 .00348613992841864 85 88 -.019268221410424904 95 88 -.5584951865238197 -110 88 -.6568548460979046 -121 88 -.32800557829752824 -135 88 -.3379924682246995 -172 88 -.08899816539117031 -174 88 .9123505045980802 -191 88 -.6264266542316227 -235 88 -.03294595454431354 -256 88 .4448240372416624 -258 88 .6926905803206591 -261 88 -.09257895069179425 -266 88 .3130118007742825 -280 88 .9386031048713529 -284 88 -.6008585399639796 -288 88 .03656091428644642 -290 88 .19191550962193166 -299 88 -.29923405452301666 -311 88 .8683179450711463 -408 88 -.1626817715588739 -422 88 .13759770556906953 -430 88 -.5254902568897784 -431 88 -.2926193516983208 -447 88 .6056586699198311 -460 88 .2741762525666104 -462 88 1.1151771070736882 -464 88 -.8347689278431127 -466 88 -.05154725425473376 -468 88 .3458458845167302 -479 88 -.23254402358285145 -480 88 .12719808824411874 -486 88 -.5480049916320886 -499 88 -.08590059365015221 -502 88 -.14386329445293058 -508 88 -.05267871015526952 -511 88 .056756837353979975 -516 88 -.3874202955225937 -530 88 .8475456408109403 -540 88 -.22090334350538535 -554 88 -.5357248530958371 -564 88 -.8200711289939027 -571 88 .08692189720140568 -601 88 .16937224602709594 -605 88 -.1450383448604905 -606 88 -.25358404886987773 -621 88 .21819138165938962 -625 88 .368599806013756 -634 88 .5476449928642747 -641 88 -.4343803859782018 -645 88 -.2624115459273727 -661 88 -.5656768050789582 -684 88 .6069776142531053 -695 88 .45457614147229813 -699 88 -.0907626377074786 -707 88 .07956951087198459 -709 88 -.19104014446815398 -725 88 -.768674721525175 -735 88 .2018043701849482 -737 88 .14247656564970518 -754 88 .3593074202048976 -766 88 -.43094155193944733 -767 88 .08251514861191842 -776 88 -.3849118949808947 -779 88 -.31117248428205113 -789 88 -.3410143967597864 -790 88 .2355523771888905 -832 88 -.006336198283914171 -864 88 -1.1907219921885017 -868 88 -1.2834844008763675 -873 88 -.7709291095855324 -889 88 -.5914755838164554 -891 88 .23830504837121816 -912 88 .7926880644876286 -919 88 -.21267403192490525 -928 88 -.44777992553760115 -933 88 -.5761754804666073 -943 88 1.3119930991619626 -961 88 -.40662124846001557 -978 88 .25847432214090854 -979 88 -.11283611543115982 -983 88 .4572152259284159 -987 88 .4571172330244653 -991 88 1.0216029409401521 -996 88 .008138121545217807 -998 88 -.02210860814781449 3 89 .630203806573062 16 89 -.16173210037770244 19 89 -.7298077841331583 @@ -8903,78 +895,6 @@ 47 89 .470998476984054 64 89 -.5148166841474167 85 89 -1.8817955106744115 -102 89 .8137599652530237 -105 89 .3273936517897984 -112 89 -.47875862448641787 -116 89 .10847804770776656 -128 89 2.245306580941449 -139 89 -.48778253229498153 -155 89 -1.072063162281457 -167 89 -1.30054573273311 -169 89 -.7960851211707576 -174 89 -.6067907050231205 -175 89 -.5299548385058663 -179 89 -.4043289775609347 -194 89 .4148963963734426 -222 89 -.004707692490311527 -252 89 -.4281460356370721 -263 89 .8120425697181678 -267 89 -.2900971397855881 -294 89 .9263479113639641 -320 89 -.6617322783524254 -339 89 2.2289346837022923 -345 89 -.06300424282958274 -346 89 -.1575574554382509 -363 89 -.9399767033516828 -375 89 -.045006817006057534 -376 89 -.45712067448670896 -385 89 -.7155242921838704 -402 89 -1.2168843602868937 -406 89 -.7488119087027818 -426 89 .4369172682462901 -446 89 1.5216733528883406 -456 89 .430106317405716 -465 89 -.1535446259793782 -468 89 -.5364090471019818 -473 89 -.45033731288592277 -474 89 .8244302971031786 -503 89 -.6384669782539865 -507 89 .28327608449774483 -509 89 .35608641128057056 -512 89 .8219619056411431 -528 89 -.16702505908682236 -546 89 .39349816245985253 -549 89 .08903024645718771 -568 89 -.3443281259231593 -625 89 .4554678325430342 -629 89 .2331668139784523 -635 89 -.49789560404462857 -676 89 .7602107080862545 -709 89 -.11885118623811684 -721 89 -1.1373333714236253 -740 89 -.1693088595226696 -768 89 -1.0601768987383282 -771 89 .3917696799738282 -801 89 .396154438728814 -803 89 .14952665444250937 -804 89 -.0070010020992025135 -806 89 .6378415953971172 -815 89 .48373132302602373 -826 89 1.1297205010863465 -849 89 .318584583236095 -902 89 .13230022187364365 -907 89 .2390726000473798 -914 89 .21722934364027788 -915 89 -1.4285353843671176 -916 89 .012017426621932503 -918 89 1.7620181903119398 -929 89 .5514502297227395 -937 89 .8913552984361097 -945 89 1.8598830249547946 -965 89 -.1644518849954055 -989 89 -1.3493000621670803 -995 89 2.6354299269687993 -998 89 -.814990053491412 4 90 -.1404672184747886 5 90 1.0419896220873448 8 90 -.7889801771060541 @@ -8987,99 +907,6 @@ 47 90 -.05351787247603401 85 90 1.9202182053777488 86 90 2.221352702285861 -103 90 -1.3602783672004255 -116 90 -.5866133935026412 -154 90 .8835671112738646 -170 90 -.29628874818858897 -172 90 -.6644998908163157 -185 90 -.7908354628434386 -216 90 .29581766894071937 -228 90 .33838354936369913 -231 90 -.039741662710607153 -276 90 1.9663873609936835 -290 90 -.19195693783172635 -312 90 -.8924592089824748 -329 90 -.498142723481963 -354 90 -1.6716175283411638 -372 90 .43548996658433897 -376 90 -.5847531192001509 -378 90 .1396325964648889 -381 90 -1.2350050673797717 -382 90 1.0165731305684713 -394 90 -.04417929604851316 -399 90 -.9394901422450781 -400 90 -.4973847558082934 -402 90 -.46054465871347816 -404 90 -.6615522919611438 -430 90 -.9257129685275141 -434 90 -.5565179035371096 -435 90 .572907292172399 -454 90 -.27569282037056386 -459 90 1.6486871009884094 -463 90 .7538208406548882 -467 90 .12160609763468645 -469 90 .14264745721931466 -472 90 .35841885227389003 -483 90 .4817073254290537 -508 90 .07430576964482834 -518 90 -.4721439526568115 -520 90 .6819841379208361 -532 90 -.405693037040022 -541 90 -.5767307744933756 -550 90 -1.897557235131086 -555 90 -.6559779899668453 -561 90 -.24710353547956806 -563 90 .17664772900610393 -564 90 .208969927786698 -570 90 -.7388217180729997 -587 90 -1.0262238330073141 -599 90 .8344804154585188 -613 90 -.8213529695536789 -630 90 .014830155515978036 -635 90 -.3269303512791623 -637 90 -.9561159140489692 -645 90 .4114996429885334 -651 90 .1707561025754383 -659 90 -1.3284469065721172 -695 90 .20833499140573164 -701 90 -.5340652599088778 -703 90 .6083212068798678 -708 90 .6217074590466315 -734 90 .2980958473281145 -744 90 .23419175503919334 -745 90 -1.3035588837636287 -748 90 -.25200998506953665 -750 90 -.07191304650540858 -756 90 1.0899758036185738 -757 90 -.6127565458563445 -762 90 .20675964088976723 -769 90 -.6670783681551465 -813 90 .005864008686235989 -815 90 -2.3341477477677666 -816 90 1.415205584885191 -824 90 .24389667660094402 -835 90 -1.2574014039408095 -842 90 .1330497726347074 -844 90 -1.8032570959083456 -851 90 .3074272239392055 -866 90 -.1177952934115111 -869 90 -.048444077323772705 -871 90 -1.004671445367038 -878 90 -1.0519255773377512 -889 90 -.5785313749537008 -901 90 -1.0719115549581082 -913 90 1.034194846793815 -931 90 .11022185448325234 -947 90 -1.4327651390263578 -961 90 .7099680604656485 -968 90 1.2177253321544361 -970 90 -.9544493175453512 -971 90 .15556142666913148 -976 90 -2.4531109733258325 -979 90 -.30465439924635246 -981 90 .6163508453268621 -986 90 -1.9578416261743958 -989 90 -.9780242448580654 10 91 -1.5258588513108653 22 91 -.061571367729615356 28 91 .42544887517484586 @@ -9088,91 +915,7 @@ 56 91 -.9126432281958609 71 91 .5165172813899349 78 91 .018305783651845806 -91 91 .4580720708210767 93 91 .46817626079271035 -106 91 .33981826623016986 -133 91 -.18589333901941785 -161 91 1.1985437052299004 -184 91 .5998106977884831 -204 91 .16846358004808706 -212 91 .864060220041846 -216 91 .3361927757685355 -225 91 .745903886054987 -228 91 .47348963703370206 -235 91 -.3437064890584223 -242 91 -.28600384023006276 -282 91 -1.1762350060926388 -286 91 .584813452119352 -293 91 .7990876780506586 -296 91 -1.0650125392200953 -308 91 .44210746886979746 -311 91 .7262685229282788 -318 91 .5485806812332571 -320 91 -.28385404600936903 -322 91 .4071571078390639 -350 91 .26880191921115965 -368 91 .5206904520798493 -372 91 -1.5741868280560722 -376 91 .09689534489567125 -377 91 -.39002539667216013 -403 91 .41460968514452334 -411 91 -1.293379433939929 -412 91 -.5532856378986085 -424 91 .2497205230586106 -428 91 1.358001664553593 -439 91 .42222524373548054 -443 91 .27585974355901643 -447 91 .2908049354989877 -496 91 -.6213362096840249 -497 91 -.47957498215566136 -507 91 -.10152257793529776 -516 91 -1.267163706549456 -537 91 .4864125695407666 -559 91 .055030987929605035 -571 91 -.3921072262515819 -579 91 .8230036922936472 -581 91 .12022471563726536 -595 91 -.7652977035732303 -602 91 -.587757244138253 -605 91 -1.6470815541359536 -614 91 .5847123682345514 -617 91 -.10787124331691449 -662 91 .8271980381030803 -666 91 .8732156038693756 -668 91 1.7205210401179722 -676 91 .09907275597485662 -706 91 -.61929571185638 -710 91 .8658073252966063 -722 91 -1.2160995087531685 -727 91 -.2504556176721986 -728 91 1.1944240376820343 -731 91 -.6111594861978598 -747 91 -.45509591514243086 -759 91 -.6972613914697932 -771 91 .8930818129976117 -788 91 -.3347253916815525 -789 91 -.7378916067561911 -800 91 -.16585459984444634 -801 91 -.3026764312536892 -807 91 .49792455361902543 -808 91 .9307516707431946 -814 91 -.05547168148200171 -826 91 1.4615223606453132 -836 91 -.051399681733821534 -841 91 .7422093626554711 -853 91 -.8655798364510949 -861 91 1.9953653477732707 -894 91 .2841141686959835 -913 91 -.2562595428850297 -920 91 .7886184002421648 -926 91 .38631623610828325 -935 91 1.4580173684445705 -948 91 .6403189741679393 -955 91 1.3670332365229216 -956 91 -.12703538643034584 -961 91 -.6591550393018886 -981 91 .01644210320690282 -991 91 1.2067702084871348 36 92 -.8314986988870438 39 92 -.1988675825144179 42 92 .5281709157732636 @@ -9183,95 +926,6 @@ 77 92 1.7026156520691909 84 92 -.6575372691841956 93 92 1.246403165911745 -108 92 .4973728590081351 -117 92 -.435540431549953 -124 92 .49486688817452007 -127 92 -.19950379392185189 -135 92 -.09517660148237359 -147 92 -.4369558712516105 -157 92 -.7412438482057907 -167 92 -.11841894509624204 -174 92 .9455401752289678 -193 92 -.11182966268057204 -199 92 .20883411868301183 -204 92 .40734441611898453 -211 92 .5001562159406975 -240 92 -1.191532690600172 -253 92 -.6878416997106536 -277 92 .6837743352375765 -282 92 -.9544926044597157 -283 92 1.1743100396045374 -293 92 -.05073760345446561 -294 92 1.5015959810154293 -299 92 -1.2463392724792286 -322 92 .7107704725084554 -337 92 -.5743256288422337 -343 92 -.4253665954620891 -347 92 .187014915507304 -358 92 .161044776640235 -374 92 .6545329430029212 -382 92 -.39496347269899357 -383 92 -.06725761820801791 -386 92 .12075594303485634 -395 92 .2827703482918695 -457 92 -.4809406749763723 -478 92 -.32123322453848596 -488 92 1.4641306010074229 -490 92 1.4131496179414766 -496 92 -.09176575717926069 -511 92 -.9426532446447504 -532 92 -.13527830643611174 -535 92 .250810557086742 -539 92 .4002642463513134 -547 92 .924680841646145 -549 92 .31118518519416305 -556 92 -.34504483626280125 -564 92 -.5917614618333968 -589 92 -.4091021432296486 -607 92 .5666212789572314 -611 92 -.20386522014773717 -614 92 1.0245536105224864 -622 92 .0560937372818423 -637 92 -1.8536629671568723 -643 92 .5106612181228068 -648 92 .43129430571971095 -661 92 -.553352779255436 -663 92 .21774178347390624 -711 92 .49076865079151705 -712 92 .4321207963898218 -723 92 -.2830708978223082 -725 92 -.37598541356756476 -747 92 -.9418640342787248 -752 92 -.08457675384233235 -755 92 -.943272718896163 -759 92 .08233296078290218 -775 92 .20368691442166528 -793 92 -1.4538279927478035 -804 92 .105773793439003 -810 92 .6496940322096338 -822 92 -.5584645637675036 -829 92 -.19296489740164646 -831 92 -.7728076007774064 -871 92 -1.2027550503681717 -872 92 .4542900359905855 -902 92 .2743872880265116 -903 92 -.3276233657414343 -905 92 -.1484843272741648 -910 92 .37653274593233593 -930 92 1.1086621089927968 -937 92 -.13843156703784118 -947 92 -.5079591148779425 -954 92 .7111094323874434 -957 92 .3850653095949925 -959 92 -1.3108935546098406 -960 92 -2.432088281831742 -970 92 -.6373338474135902 -974 92 .3510854579525906 -976 92 -.48861323480806973 -982 92 -.17235383996009773 -988 92 .18555031159620264 -992 92 .7106301401711387 -1000 92 .0340039085018983 12 93 -1.122592501477699 29 93 .3333197250034817 42 93 1.0987678458666408 @@ -9285,194 +939,14 @@ 92 93 -.9747197538476169 93 93 .2565721783108728 94 93 .20584376643637523 -129 93 -.22561367854288544 -144 93 .9046453682993738 -148 93 .4459045491341105 -152 93 2.000860146786269 -156 93 .3406905702925862 -161 93 -.3936481295898292 -164 93 -1.0565791849867656 -168 93 .9582135638214695 -173 93 .6344329475485914 -184 93 .5976731313786506 -196 93 .5574917875315855 -210 93 .515298590732294 -232 93 -.1515279266092457 -235 93 .9168646758134622 -266 93 -1.2285641119492492 -268 93 -.48480170464774713 -272 93 -1.7287773186670266 -280 93 -.028980216489348093 -294 93 .20252931508438396 -303 93 -1.2668871463794131 -334 93 1.4822813213587276 -348 93 -.9277412260709903 -350 93 -.7058707162239638 -375 93 -1.3468013085898016 -383 93 -.7386985569292454 -394 93 .2816881746949659 -411 93 .12526366515350565 -426 93 .9266624644047059 -430 93 -.5694766063455072 -439 93 .61134534571156 -442 93 .2743873335729021 -444 93 -.4908949082113027 -446 93 -.15533258476322914 -450 93 .6301208086368247 -460 93 .7569068315245271 -461 93 -.8732713637050167 -465 93 -.42206141932961605 -474 93 1.4726648647365224 -476 93 .32359786298673376 -477 93 .19555148427391006 -479 93 .45938863486106496 -482 93 .130043266255051 -525 93 -.7825944288438191 -539 93 .482401760917249 -547 93 -.760279985935733 -559 93 1.2175785962393417 -564 93 -.08184203086930047 -571 93 .40281962804855176 -578 93 -.10148114112357849 -605 93 .13704364028297705 -609 93 .6585016810149183 -612 93 1.4864684912726602 -613 93 -.06801124743279544 -614 93 .5587763378122019 -621 93 .6918434225060949 -625 93 -.559179442140854 -627 93 .5617481733974855 -639 93 -.3949378988531886 -642 93 -1.51999316243017 -662 93 -.6684556991016971 -670 93 1.057944786099378 -675 93 -.6232142060430349 -678 93 -.5307430682007854 -682 93 1.3415314833061647 -686 93 -.6757291753779646 -687 93 .5408093602840883 -688 93 -.5236912354979983 -699 93 -.16258329180346337 -710 93 .9670272756391262 -724 93 .18862787994267552 -730 93 .439763668209481 -745 93 .09338721991547289 -747 93 1.261821324915108 -760 93 .6288776563201668 -790 93 .070661973570928 -794 93 -1.2258503283679938 -796 93 -.1473498726234852 -813 93 -.0550950481809539 -819 93 -1.6233304221001499 -833 93 .15399510661593488 -843 93 -1.288242683769602 -860 93 .2574279254697672 -862 93 -1.6399309793674137 -875 93 -.48991386436689544 -876 93 -.22799745236881194 -887 93 -1.1115124062027313 -903 93 1.3200422704994168 -920 93 -.6423452899036484 -943 93 -1.2933754800239996 -950 93 .20066108471519128 -952 93 -.49237996675161644 -979 93 .4833981715877826 28 94 .4641366283977738 40 94 .5040216895383361 50 94 .23193418419133055 54 94 1.7923680149602177 -72 94 -.4188745242328981 77 94 1.3495664425840646 87 94 .6508850344795004 95 94 -.4138929350296118 97 94 -1.850928301037939 -111 94 -.5230030222659636 -112 94 .12101442877730176 -116 94 -.07503746273025047 -120 94 1.3740467351326728 -121 94 -.6031904661897911 -142 94 1.2466601432078797 -147 94 .5242055999449896 -150 94 -.15191078289865154 -155 94 -1.2784964700592714 -185 94 -.6405188337417634 -200 94 .42346371987760467 -220 94 -.6686660971184673 -223 94 -.34225785994762176 -255 94 .5317725619542888 -258 94 1.0224000029836906 -262 94 .848018757710721 -286 94 .3184419971322984 -288 94 -.08745752456505931 -304 94 .14301891011508183 -311 94 .22782214769533557 -330 94 -.37971238034250643 -364 94 -1.437106759979334 -372 94 -.005122680200319682 -373 94 -1.5603997673557402 -377 94 -.4128038317228736 -385 94 -.34687956111432494 -408 94 .3730661509515478 -411 94 -.3597650896734509 -422 94 .6238619428980178 -442 94 -.7251420541908654 -448 94 .395352932014959 -449 94 -1.8768333576734986 -454 94 .21635795632602323 -459 94 .11171567749093961 -460 94 -.7252380202684771 -464 94 -.24484106837033623 -467 94 -.06349960092224505 -483 94 .8091150097535866 -488 94 .19241358035783873 -515 94 .34967090316308913 -533 94 .5126642122319311 -581 94 -.38494110712271257 -585 94 1.0030462887964577 -587 94 -.20204843882264872 -595 94 -.344598381948296 -605 94 -.4343179998534727 -607 94 -.29758897277655555 -613 94 .6713734212470523 -621 94 .5394967903406165 -638 94 .5957877346655958 -649 94 .33414275708375496 -651 94 1.470497050718814 -664 94 -1.0360646729335086 -669 94 1.2971680627873439 -674 94 .8012464747232083 -684 94 .054186788452036866 -690 94 .699548999338173 -691 94 -.274758860505433 -705 94 .5620770838116745 -718 94 .5367658827259679 -720 94 .09387798829915606 -755 94 .6314843021643797 -769 94 1.3083230444784952 -773 94 .9421983442558766 -782 94 -.2621776309591819 -785 94 .7281726393862199 -791 94 .5413549027179574 -808 94 1.2085608349630488 -810 94 .7021506173946886 -828 94 -.14594227126872392 -837 94 -.5252793622899845 -842 94 .4172539455243442 -877 94 -1.5260582696233218 -886 94 .3274851248034564 -887 94 .055900208750715 -901 94 .6873522969505967 -910 94 .9159730213728837 -919 94 -.46242423839304475 -934 94 .2417765559469453 -935 94 -.554622184716496 -941 94 .8285564266969229 -945 94 1.7885271684114603 -952 94 -1.197809689816858 -958 94 .30258072836766225 -971 94 -.7369204897110058 -981 94 .6821590425308255 -997 94 -.03875795730670267 1 95 .24767881497470196 18 95 -.4597149689510075 20 95 .801770996098489 @@ -9481,196 +955,11 @@ 38 95 1.1880782185969976 48 95 1.597308440680649 100 95 .6797619992684956 -105 95 -.15589506821793325 -110 95 .042489133269191875 -114 95 .3738719042242335 -124 95 .23082954509718967 -134 95 .7464254595613085 -135 95 1.2611955140227424 -139 95 -1.1230870935463837 -140 95 -.7234042707471862 -150 95 .4428545773148492 -170 95 -.4249367343211398 -181 95 .1786306216731411 -185 95 -.6089237608759638 -204 95 -1.2932290078457238 -211 95 -.8334441068313085 -212 95 -2.0091888943525746 -226 95 -.3144058349328104 -240 95 -2.002266283275286 -241 95 -.03683693830082234 -247 95 -.16895306644669747 -271 95 -.7347337606688997 -294 95 -1.4727957440415134 -302 95 1.1425592818420784 -306 95 -1.2273957140097094 -318 95 -1.5959833631949676 -322 95 1.5144830233965842 -329 95 .5282669114579864 -335 95 -.8736754080569727 -364 95 .07501807741948113 -375 95 1.0586851154875672 -399 95 1.0268168459034592 -401 95 1.5025047176996975 -409 95 -1.340391973680945 -411 95 1.3838182562269041 -415 95 -1.0445983309955105 -437 95 .14056289912492675 -451 95 -.1433846820537116 -458 95 -1.1651066117373765 -462 95 -.3402405304333904 -489 95 -1.1059141435166027 -497 95 -.21650189619631943 -498 95 1.2969957943149093 -507 95 .9570748439076584 -514 95 -.06609144867828537 -524 95 -.25772210848260224 -546 95 -.43184101784494344 -557 95 2.2318562537246516 -561 95 .1301937872863747 -564 95 -1.3911951275508816 -584 95 .3046425475618497 -593 95 .538719567877747 -601 95 -.23583313785887502 -621 95 .9554598490429369 -626 95 -.23940025567727405 -631 95 1.7732933334597738 -637 95 -1.6464174684377 -657 95 .5117438359077732 -660 95 2.2031276738796524 -667 95 -1.8867555351596672 -668 95 -1.3974317697895604 -669 95 -1.6268772616908356 -674 95 -1.6345818346005339 -684 95 -1.97678213402024 -700 95 -.9750948201290742 -710 95 -.4212424488885162 -719 95 .4328841480502564 -730 95 .9305920685215749 -733 95 -.9793943342398067 -734 95 -.11174705022375718 -736 95 .49965343307966825 -750 95 -.7302036214084497 -754 95 -1.077911645688004 -772 95 .8337276875198202 -783 95 -.34374678572327744 -786 95 .9383015295773297 -801 95 .6951649897567087 -813 95 2.9641443423418283 -815 95 -.11851265284009414 -849 95 -.7226378064846263 -851 95 2.023405914735946 -855 95 -.7495993678777614 -892 95 1.8507556790532291 -895 95 1.541805226890217 -904 95 -1.5012950569487091 -913 95 -1.191410713527675 -922 95 -.5747294070426691 -931 95 -.7420280329558321 -940 95 -.7127625733762989 -953 95 -1.4705786818387625 -960 95 -.15311450256714632 -977 95 -1.146495201684498 -993 95 1.5760041478198157 38 96 1.8575785640859537 40 96 -.7076706976858326 61 96 -2.2730165207094166 98 96 -.346027620931064 99 96 -.45972520277649054 -104 96 -1.0386946283811638 -107 96 -1.26717950478487 -111 96 -.838099677600553 -138 96 .4892402037231324 -143 96 -.8996665867185556 -144 96 .28103992304400094 -164 96 -.948789863514073 -172 96 1.3209162440706117 -190 96 -.28521472594422514 -195 96 .6793909703121226 -216 96 -.3179060112391932 -226 96 -1.3788233116577502 -231 96 1.2358569721041723 -248 96 -1.2625092235124207 -250 96 -.12805367459186862 -286 96 .15194535652258462 -288 96 -.2878159735492902 -301 96 1.888479506838659 -303 96 -1.3794530812037848 -320 96 1.831548731711191 -327 96 .8754275330466462 -334 96 .7983397519677558 -337 96 -.17613225187965265 -346 96 -1.024589981440112 -361 96 2.112012269723572 -362 96 1.286162623087971 -363 96 -.9112899377484011 -387 96 -.47543921204730094 -397 96 1.4439772546406895 -406 96 -1.0597489463803607 -414 96 -.7278597877527887 -429 96 -2.056332520321688 -432 96 -.7576976923819129 -443 96 2.731345342469053 -446 96 -.1674213005124804 -456 96 1.3002759719953532 -461 96 .1245867198297877 -471 96 -2.968808874324015 -489 96 .8523238559017609 -491 96 -2.2504340137148833 -500 96 .6618743396795648 -515 96 1.7254811490531816 -520 96 1.5674811170933363 -523 96 .026770999322238295 -537 96 -.5740551383890664 -548 96 .7870358323778892 -549 96 2.3671829828177215 -562 96 -.1763325824229564 -574 96 1.5786479526603743 -588 96 1.1159445646131176 -595 96 -3.140274486292529 -609 96 -1.978142531324389 -631 96 -.47515780029782934 -637 96 .9101141280993565 -643 96 .9810717231827057 -650 96 -.4777909294286425 -668 96 .9620554470613017 -672 96 -.18467764072977932 -683 96 .12111362250503722 -684 96 .04612277431312357 -690 96 2.067620296143667 -694 96 1.0056181738284709 -695 96 -.3528061973731675 -698 96 -.7462059775441794 -701 96 1.4647259572609033 -709 96 .6768235682678728 -712 96 .4792292760672202 -719 96 -.5475881914684508 -723 96 1.834926936441304 -729 96 -.03940723157042317 -730 96 -1.358972445768905 -734 96 -.7951592298375285 -749 96 1.354018185164163 -757 96 1.1364391889072143 -762 96 .03523205473171692 -764 96 -.5776153918456921 -793 96 .09243126625826956 -815 96 1.5706835260900047 -818 96 -1.163900182455256 -832 96 -1.382135084334778 -839 96 1.5358841459444457 -850 96 -.9749512481256315 -855 96 .8532126835189904 -866 96 -.29250278393543144 -878 96 2.754781712084304 -899 96 1.5421418953436428 -926 96 .21802921168051395 -927 96 -.13742799091494348 -931 96 .6205682511886135 -932 96 -2.60383425838901 -957 96 .2051115553848374 -963 96 -1.0409554895729223 -964 96 .5786409532496127 -988 96 1.9756347213400929 1 97 -.3462974934730866 5 97 -2.4688478295486145 8 97 -1.2809873152127966 @@ -9686,80 +975,6 @@ 87 97 -.6518543232325322 92 97 .30933395483567877 99 97 -.7751895251156558 -115 97 -.5638738074574574 -118 97 2.428917449968251 -122 97 1.0830370354624423 -127 97 -2.5691757851816197 -136 97 .23028146399646132 -137 97 -.31417179474324447 -140 97 1.0501529537898828 -151 97 1.798275706075212 -152 97 -2.326937649615371 -153 97 .17996008830721888 -168 97 -.6867095886436614 -193 97 -.8936678837082686 -197 97 .8876655105151277 -201 97 -.9723688319643387 -214 97 1.0424904621052207 -221 97 -.43705348079021744 -270 97 -1.4355073759404768 -273 97 -.7147763412543701 -306 97 2.104682183263085 -321 97 -1.2982247186294023 -334 97 -1.862907206841255 -362 97 -.7013556851156065 -390 97 .004523842365913071 -397 97 .2570510971433457 -424 97 .5820438925318528 -428 97 -1.4178035281785881 -439 97 -1.7404597615195416 -453 97 .725285592084034 -459 97 .6574936703213766 -473 97 -3.4975123633292604 -489 97 .025979364497829727 -492 97 .8063943188946474 -515 97 .02949434511754237 -521 97 -1.5615210225107639 -526 97 1.6763251318166226 -551 97 -1.9709331163628578 -559 97 -.44651630388940267 -588 97 -.04410218576978397 -595 97 1.1141163591345749 -604 97 -1.8882666256472036 -611 97 1.454692027913543 -653 97 -.7427556982237 -655 97 .5629127421330733 -667 97 .9434575116903889 -672 97 -.4412541074833195 -695 97 -1.513812748444554 -701 97 -1.7061231034776847 -721 97 2.249118430683144 -724 97 1.8956202922836405 -725 97 -.681427498437238 -750 97 -2.428375190217686 -756 97 -2.2988147788316904 -759 97 1.4654044177545436 -785 97 -.7010106095579881 -790 97 -.0727154943814573 -799 97 -.09860304489099739 -830 97 -1.4271618616538475 -850 97 .028984846289889638 -856 97 -.508650840973613 -866 97 1.7293451649514036 -885 97 .4330069642897619 -893 97 -.007233044233013397 -895 97 .872221856219632 -903 97 -2.585508167623066 -904 97 1.149375652349586 -917 97 .22418870278792036 -918 97 -2.589278261271258 -932 97 .6492102328018885 -936 97 3.042352383185016 -937 97 .31967965452030755 -940 97 1.6655279838711736 -959 97 -.16835378205669918 -969 97 -2.139986776414132 -977 97 1.0480628380705745 11 98 -1.7347606580516066 18 98 .42173563534369163 20 98 -.24537589070184432 @@ -9769,108 +984,6 @@ 67 98 .12381511531048484 93 98 -.3945432549594946 96 98 .048432929450472756 -109 98 -.6611907447502552 -150 98 .3720069928591674 -153 98 -1.1151292697591175 -159 98 1.409082280747362 -161 98 .2516520204482725 -166 98 .3269813835697438 -174 98 -.8197916136805045 -178 98 -.20500371835301825 -179 98 .031705031262742475 -183 98 .44680807398387323 -184 98 .8115027014936655 -200 98 .8188733444205626 -217 98 -1.0232306600908816 -232 98 1.197685216883553 -241 98 -.1719485564747038 -261 98 .1333522076937 -347 98 -.14138698535060856 -370 98 1.2348111192196813 -374 98 .4451568403994545 -381 98 -.03647465584277024 -386 98 -2.272305314016009 -390 98 -.7620834482282373 -391 98 .909682661245018 -399 98 1.0972248893786174 -401 98 -1.4588015658263713 -414 98 .1910685352543967 -420 98 -.8970692547735949 -425 98 .06617532777053965 -443 98 .12883524093760543 -445 98 -1.1695240022455355 -449 98 .20213205060668907 -451 98 -1.7140320946123286 -454 98 .23232699816930982 -473 98 -1.9928971688542325 -476 98 .6337489026842527 -495 98 -.5055793204187301 -496 98 -.6100814683268057 -502 98 .12991881333641903 -511 98 -.42864164793833115 -519 98 .16785078156403804 -525 98 1.3498032261836654 -527 98 -.238325259347202 -532 98 .4266988912208191 -549 98 1.0514210390229544 -552 98 1.9434553468716271 -556 98 -.013480533521134125 -561 98 -2.5456731079023673 -563 98 .01927889739163196 -570 98 .9855493660473326 -572 98 .44488951860153686 -578 98 .08699951027107132 -585 98 -.9316093623587907 -593 98 -.265767816383363 -605 98 -1.2938189788229253 -619 98 .5996129324881462 -628 98 -.31147238656005094 -634 98 -2.11566433924184 -651 98 1.74856717394588 -652 98 -.5781992702862363 -664 98 .49330358425642007 -669 98 -.04032652612200166 -674 98 -1.1253810743496224 -682 98 .4988008490341737 -684 98 .030494779519093587 -700 98 .09155352535774433 -705 98 2.407104868219728 -719 98 -.36181310599153466 -725 98 -1.4129389542232427 -728 98 1.1549802731201997 -736 98 -.8252940640449828 -743 98 .8307364792892815 -753 98 -1.4858571344391114 -779 98 .3148878366053052 -785 98 -.14041474746713573 -792 98 .04396116475038482 -799 98 -.8432611845758208 -804 98 -.5500177036058681 -807 98 .1418612850356133 -810 98 .24748854708975493 -818 98 -.41041135523939004 -823 98 -.2092459753151734 -840 98 1.1631474946856977 -855 98 .12920025744183306 -857 98 -1.2711550672254537 -865 98 .08828559422025622 -873 98 1.1453058769681066 -874 98 -.7816448485139216 -882 98 -.7532818296532771 -893 98 -1.4918043256206264 -898 98 1.379116548714232 -904 98 -.7335606410745398 -907 98 -1.1213050670706644 -908 98 1.2103742063764422 -916 98 .18242608389844978 -925 98 -1.5820985714159375 -929 98 -.7704588370864666 -948 98 1.5957860097357988 -950 98 -.7440443042760502 -957 98 -1.4952942089523065 -961 98 -1.002491268049958 -998 98 .6082514739059632 -999 98 .9573370798417423 21 99 -.40810025287110024 30 99 -.8373358976514677 36 99 .1954008007061444 @@ -9878,94 +991,6 @@ 59 99 1.5062460183608717 65 99 1.9728746835261286 69 99 .44826804112090485 -114 99 -1.3256478320945735 -122 99 .6982524812037824 -123 99 -.6640710412421771 -128 99 .9197033680641389 -143 99 -.8270231387524236 -154 99 -.05462797070042821 -161 99 -.41449882826471396 -166 99 -.40327326849094786 -173 99 .24127943125894033 -199 99 .9552124150966301 -226 99 -.17532068797589057 -230 99 -.5042677774869642 -234 99 .7437522044160181 -240 99 -.20947218797851613 -241 99 -.16783286670688846 -243 99 -.09459224773545356 -245 99 -.05809505661117363 -249 99 .6160623186959173 -253 99 .21412808938414413 -255 99 -.5237964538014019 -275 99 1.1684567336435143 -281 99 .8273590170830766 -297 99 -.8454195435498109 -303 99 -.026721487407017748 -306 99 .32311069492655853 -311 99 .7143205207273677 -318 99 .3615964279733392 -336 99 -.35289538434594975 -342 99 -.12900744995810542 -343 99 .26339759185159406 -348 99 -1.4771670238615582 -362 99 .6604450537722384 -370 99 -.8454329812802948 -372 99 -.1064045352973747 -387 99 -.17118531843878249 -388 99 .9462571908081076 -406 99 .23888872535937788 -408 99 .5894878287344498 -409 99 .8382691499988584 -410 99 -.05770422052366719 -412 99 -.16033095488279087 -421 99 -1.5757213381961506 -424 99 -.29595294474961176 -426 99 .024843424218072025 -449 99 .10828666355543196 -457 99 1.3804769353966047 -463 99 .37127621746233846 -489 99 -.09720187230902785 -495 99 1.157662876025848 -551 99 1.3686942551711017 -552 99 -1.5423436759198286 -577 99 .32982228503085337 -593 99 .16490887612488314 -618 99 2.2224847024178254 -632 99 -.03715167351895053 -656 99 1.8139540583519727 -660 99 .020311093481556852 -677 99 1.3249137750434858 -687 99 .3741356824380376 -693 99 -.2934074209705795 -695 99 1.0015847318784794 -714 99 -1.1091043237206755 -748 99 2.1488731714298352 -753 99 .12191537911115352 -759 99 -.6230531535635084 -761 99 -.5971503511890317 -771 99 -.2728776861949914 -782 99 -.832929919959787 -817 99 -.14392060352595734 -823 99 -1.4934790027761846 -828 99 -1.7871209084147268 -832 99 -.8053089290286377 -843 99 .8233449263228851 -844 99 -1.4422249025936982 -849 99 1.7755677092203022 -864 99 .1911527724628224 -865 99 .11059903281529113 -876 99 .9388643953921292 -890 99 .38727296957636276 -895 99 -1.5638057039044837 -905 99 -1.0401142905595053 -911 99 -.6255933790129358 -913 99 1.2384002346777438 -934 99 -.5720391887152602 -970 99 -.23077610799376852 -974 99 .09053074908592801 -981 99 .2848588582042678 -993 99 -.8858457665579533 4 100 -.5104903222169305 21 100 -.33623130017465924 32 100 -.38941876854188684 @@ -9974,90028 +999,3 @@ 82 100 -.680260856997128 96 100 -2.072838917588947 97 100 -2.696652916660356 -101 100 .6237362605187777 -104 100 -.4979247746733356 -106 100 1.0480044806097715 -113 100 -1.364813474657149 -115 100 2.0841900868157577 -125 100 .8530931335002766 -129 100 .33422813248837824 -134 100 .00420743400644942 -172 100 -2.472662830736617 -231 100 1.4705730756423459 -234 100 2.634930763709169 -235 100 .9106933208701153 -245 100 .044148134947555255 -263 100 .0247932185200877 -269 100 -.6775115192455621 -280 100 1.0955909648971476 -282 100 -1.7587060575859639 -294 100 1.8804581623146315 -295 100 -.5035453321536925 -303 100 -.07886087956109675 -304 100 -.28390175095100395 -308 100 .9958792535343179 -322 100 -2.6573992290676216 -350 100 -1.0558170696315563 -353 100 -2.043031811983722 -368 100 2.463220489409158 -370 100 -.019242807477230214 -390 100 .28845619522636745 -395 100 -.9239233063088774 -419 100 .28767968620374157 -446 100 .3234122540547577 -463 100 -.1420773395104775 -469 100 .09638382474998053 -470 100 -.8703838246235837 -473 100 -1.7157989390316128 -475 100 -.6968639325859559 -488 100 -2.1358178963755625 -499 100 -1.7293441468850101 -510 100 .6295101223177734 -514 100 .7246524180908599 -522 100 -.3575199027463103 -524 100 -.1303412154212646 -538 100 -1.1531988789178296 -539 100 1.4816328897845463 -563 100 .14493274905434972 -571 100 -.6865329640821987 -590 100 -.4300504965552061 -593 100 .7652452741157784 -596 100 -.23737451725317438 -615 100 .1677105176476066 -624 100 -.5854037590629078 -642 100 -2.3093559598379447 -651 100 .1704349329043407 -676 100 -.43347242192134655 -679 100 -2.4800412240766807 -687 100 1.1274372958872998 -700 100 -.16759448149276418 -705 100 -.6030108827085927 -706 100 .1459716325938408 -720 100 .12806321899150108 -724 100 .719114618776336 -733 100 -1.151771635111192 -751 100 -.5528582446605628 -778 100 .7056869686007479 -789 100 1.0588947266961686 -794 100 -.7723524100627777 -812 100 .8414199987069766 -840 100 1.9329849125208929 -844 100 -1.0467048814934459 -855 100 -.405098073041145 -856 100 .3896066018214033 -859 100 1.9135704798450863 -877 100 -2.1646441115626893 -878 100 -2.587742409959318 -885 100 -1.1693859342140482 -897 100 .30318354579956386 -902 100 -.01200008082915818 -908 100 -.7663800708955606 -909 100 .9898275930583919 -912 100 2.7613785511781326 -926 100 -.5443889009529832 -929 100 -1.345812426828961 -933 100 -.7848087507685932 -936 100 .22576291921566013 -941 100 -.02573585759583584 -943 100 .7757507934887857 -975 100 -.09588761964508247 -980 100 -1.2490685366299676 -988 100 -3.160233059015313 -1 101 .4819545370651795 -8 101 -.6330038437578679 -27 101 -.8673938884156278 -32 101 .5652393185100177 -47 101 -.10627936236448102 -50 101 .14421227927020971 -55 101 -.4843424671354158 -58 101 -.38805283524637885 -64 101 -.17779055810355512 -68 101 .030874668204463135 -76 101 .05972721280271226 -83 101 -.7459685559348997 -92 101 -.6214340689970046 -99 101 .28098274515125476 -174 101 -.17844442906056496 -176 101 .29221029256159176 -180 101 .009998178887079032 -232 101 -.04999602433400002 -240 101 -.2670666592769566 -241 101 .1454178305197309 -243 101 .2802025688268825 -259 101 -.5023313229087234 -275 101 -.43912258850496894 -280 101 -.0067922337200450045 -287 101 -.385926198234939 -291 101 -.190571483221046 -297 101 .8682048318320653 -322 101 -.22486973490261797 -324 101 -.045959157722464006 -327 101 -.23641128706813003 -336 101 .06561184973949825 -341 101 .401925566643141 -351 101 .3796074745000862 -353 101 -.08745037320847404 -356 101 .14667397619081401 -363 101 .24052559892776135 -373 101 .4799031526893468 -382 101 .43456819628321947 -386 101 -.1997932397589505 -394 101 -.7734629225631855 -407 101 -.1804776044954295 -425 101 -.19311709357179097 -428 101 -.029880648748718888 -435 101 -.47226290999866266 -436 101 -.5506336535647041 -438 101 .5599599370178059 -452 101 -.4446386870844763 -454 101 -.03531911298109469 -521 101 .14023420595102137 -524 101 -.34348564959313976 -538 101 .6024879044176695 -571 101 -.24426096336688885 -588 101 -.4266883921591677 -591 101 -.47749319351503755 -597 101 .260998769815967 -599 101 .29125080096334793 -629 101 .024802449790405953 -645 101 .8119964981043697 -648 101 -.003717414419470943 -652 101 -.3100961302398979 -658 101 -.5266660679975184 -669 101 -.304040632522183 -674 101 -.10868418159913945 -703 101 .15350698512338276 -728 101 -.06442027090654376 -738 101 -.37039993817126804 -744 101 -.3503690352860923 -748 101 -.13840434615120328 -771 101 -.18013147683102582 -784 101 .039667224409218146 -790 101 .6159607015502443 -815 101 -.7414755937300569 -843 101 .27057601699132267 -848 101 -.6788881192494542 -868 101 -.3222163029458345 -878 101 -1.0338670313319083 -884 101 .18929912420366068 -887 101 -.022923114146369813 -898 101 1.0992620846321324 -902 101 -.21604604061315474 -941 101 -.8246390419051249 -942 101 -.01738789899398848 -944 101 .09463849359232296 -964 101 -.15354514336897176 -985 101 -.5085688426872497 -16 102 -1.1519726114279247 -24 102 1.3668678804382224 -38 102 -.6381141462716545 -39 102 -.2814055598745602 -40 102 -.17716052769753088 -41 102 -.8917749551901006 -46 102 2.0420349779661793 -55 102 -1.2970791966377075 -58 102 -1.0311977092439408 -96 102 -.019966813022046073 -104 102 .021673453145530236 -106 102 1.507903060124051 -113 102 .6099552234757627 -116 102 .10454884100678816 -127 102 2.755980205397423 -147 102 -1.4033660734162572 -153 102 .030880062167236412 -164 102 .06042049786921616 -168 102 1.557810238195614 -190 102 -.47767853937322197 -211 102 .40432082884924847 -222 102 -1.0545277168804048 -223 102 .44942892297827086 -241 102 1.8794620277930396 -245 102 1.4987428433840837 -251 102 -1.5242535036724756 -256 102 .44254603940005993 -258 102 -.48857560711081793 -308 102 1.689350641331895 -319 102 -1.2998002259260188 -324 102 2.885929700273998 -327 102 -.3933629883199329 -330 102 1.8377645305832053 -332 102 -1.3188003140922626 -333 102 -.7231218992585592 -341 102 1.014764213799963 -342 102 -1.1003082168985707 -344 102 2.3502338592675867 -346 102 .9594998996911939 -350 102 -.7864471761298223 -353 102 -2.0008028104799402 -359 102 1.390505511601732 -390 102 -.7794229957227996 -407 102 -.810806766436388 -416 102 .9396119690691191 -419 102 2.460645344255818 -424 102 -1.9107689383615554 -437 102 -.6468778971086407 -454 102 -1.4618345749519475 -469 102 .3801622432585824 -477 102 -2.940806308994791 -484 102 -.754925589113699 -491 102 .8018467027488493 -493 102 -1.5712840730769015 -517 102 .32015957951586826 -518 102 1.128294758862798 -520 102 -.5596527835258337 -528 102 -.9591942709465708 -538 102 -.3840691894203652 -552 102 1.4704447199767647 -564 102 -.6099677116026081 -569 102 1.5936098031182455 -598 102 .3059640967798187 -599 102 1.5797990387637977 -622 102 1.4428953524525716 -633 102 -1.3450432458977022 -648 102 -.13423467102455727 -657 102 -.005484958095969494 -659 102 .5179231660491408 -708 102 -.18955861312738992 -711 102 -.5789489359149296 -714 102 -.31067666408902106 -725 102 -2.5555806271677413 -727 102 1.0996819690552873 -738 102 -1.3737891232264516 -746 102 .7228457151057337 -756 102 .5721580939470314 -770 102 1.2383596365968037 -771 102 -.721799647862238 -773 102 -.5630950836575035 -775 102 .9660267104237973 -781 102 -1.872615263351294 -785 102 -1.5330210280038652 -800 102 -.3053362009582255 -805 102 -.3965579153690796 -830 102 -1.3214806773438554 -833 102 .023063887398132244 -836 102 -.19870439510724644 -854 102 .44592453648008135 -856 102 .8313764500423919 -865 102 .3637229694967743 -880 102 -1.029315933247479 -884 102 1.1682768483611568 -906 102 -.44460350368529156 -913 102 .7419267882305515 -918 102 2.094768501487771 -931 102 1.1150008255613506 -937 102 -.6990762317230659 -939 102 1.0530478523829871 -963 102 .6498769510738089 -975 102 -.07804188929214237 -1000 102 1.0084881896518665 -4 103 .05178963701025585 -7 103 .1177641069419885 -15 103 .1557380917053781 -19 103 -.48156558269645516 -20 103 1.1654879772507496 -23 103 -1.2069360204552646 -25 103 -1.180122474587302 -29 103 -.07521410684331044 -32 103 .45761126802951896 -43 103 1.3829459140504141 -57 103 .6004105590698205 -66 103 -1.0933128952395965 -91 103 .6687051987877515 -109 103 -.21175569388051113 -121 103 .7452809236850133 -122 103 -.17326648006113318 -136 103 -.5139173958468218 -158 103 1.2038676359735638 -160 103 .41814181487336083 -167 103 -.6693243991909976 -191 103 -1.1387303524579553 -193 103 .6458126468237887 -197 103 .49060961598392916 -232 103 .7167052839607211 -234 103 -1.419091100037288 -245 103 -.6191304113817417 -262 103 1.3716585298055612 -263 103 1.0036941186759938 -266 103 -.04222121087757541 -267 103 -.7736909853964796 -270 103 1.264268582018915 -276 103 -1.9796289213016909 -281 103 .18654938612944066 -290 103 .08103270384615045 -299 103 1.2236769086138317 -318 103 1.6859044444615798 -320 103 .6942660895288122 -344 103 -2.1028238429525827 -353 103 .35210275407233277 -361 103 1.1419482896825772 -376 103 -2.1603207567754614 -379 103 -.2137005021369826 -404 103 -.14488892625534605 -410 103 .6447335213252174 -416 103 -.9840971481065262 -423 103 -1.2487832923696858 -425 103 -.32551644525101486 -435 103 -1.5950515358189306 -463 103 1.6314462007122572 -466 103 -.7465173385817272 -476 103 1.0274274991173475 -481 103 -.44998803600283416 -488 103 .9180905905402479 -518 103 .5140262120872758 -519 103 -1.4254794560608643 -520 103 .7060243320537314 -545 103 1.896377030266041 -560 103 .2173995356905954 -561 103 -.12196601238720667 -562 103 -.17058152399498583 -569 103 .06779255316661786 -574 103 .5210150266119002 -597 103 -.18505435249104116 -604 103 -.052236313146982016 -611 103 2.198491470111752 -617 103 -.4135607261108807 -625 103 -.43434104322731326 -630 103 -.23250830084036572 -643 103 1.2728778751614975 -645 103 .6666606741005392 -656 103 2.3475894088772313 -665 103 .43081102048428727 -667 103 -1.344234587435784 -669 103 .5205057506362099 -702 103 .9216124417121657 -709 103 -.3014701638663977 -715 103 -.16970622762114035 -727 103 .3597120292096533 -751 103 .027631569417918334 -764 103 -.5405842117243596 -765 103 -1.232218300403267 -781 103 .28120079504207296 -784 103 .12074029200850248 -793 103 1.5571931206071505 -799 103 1.20313724683336 -804 103 .500639509474344 -808 103 -.08866514104531917 -825 103 -1.240401010511181 -828 103 1.4766612633486726 -845 103 -1.2620748263677692 -850 103 -.4715464045927957 -852 103 2.6635290904952105 -864 103 .6776469020305685 -866 103 .15197733159222146 -868 103 1.7170274298535888 -870 103 -.7227518670526663 -874 103 1.3997196833671657 -880 103 -.45908539042115504 -886 103 -.1271728360277519 -914 103 -.5490568455336837 -928 103 -.2334547007102799 -952 103 1.4143711388426834 -958 103 .6723314867110433 -972 103 -.01719060505869979 -991 103 -.27285806389426864 -4 104 -.5106064617654911 -42 104 .26950659024028845 -59 104 -.6362243574414325 -91 104 -.4426552549329535 -92 104 -.6984861568123588 -95 104 1.5712056552512397 -103 104 -1.676731139355484 -104 104 -.7419455977983235 -105 104 -.0829006010212733 -113 104 -.07566700664342978 -125 104 -1.3543243425279454 -137 104 -.0959375374309544 -142 104 .04315712912301342 -143 104 .5585412959957953 -153 104 .6002377742421237 -156 104 .7040651838416822 -162 104 -.9048640790462938 -175 104 .19650838284981992 -177 104 -.41490578451146987 -189 104 -.027437776581686335 -192 104 -.42339721589247703 -198 104 -.9827237909769805 -210 104 1.7854904609144049 -211 104 1.0962280467786996 -231 104 -1.240289686940358 -242 104 1.423352279456086 -243 104 .8154241151910955 -256 104 .2591597464227212 -263 104 -.8394332512589695 -281 104 -1.5814263894543494 -282 104 -.7448715159718097 -284 104 .9008330868374872 -302 104 1.6376608466153513 -317 104 -.09396939577182761 -328 104 1.0316853447221006 -335 104 1.1054037429142998 -344 104 -.9212591988357263 -351 104 1.3506284253294063 -352 104 -.5703578563764442 -380 104 .3030626844773058 -386 104 1.0186802995511781 -389 104 .056520248983179616 -404 104 -.07880803418998995 -421 104 1.3132303878278113 -424 104 -1.1421077763621945 -439 104 -.8689761901782692 -457 104 -.08873107508034413 -460 104 -.1306049847054219 -469 104 -.5084932354693699 -478 104 -1.060592515522711 -484 104 -1.0084416659653597 -498 104 .835780719093821 -503 104 1.4522167887370674 -517 104 -.16643504503544665 -520 104 -1.4372933353271244 -523 104 .18696612369338572 -532 104 -.05358720925636541 -547 104 -1.07296028851278 -549 104 -1.5343454391565208 -565 104 -.8425004334715341 -569 104 .48374318592192966 -570 104 1.48557346110894 -588 104 -1.1555988156071926 -610 104 2.3526150063095157 -611 104 -.20859440877341268 -612 104 1.9536362952889088 -614 104 -1.1798281319766355 -645 104 .7044185954095703 -650 104 .5300927375344362 -669 104 .5424275684351026 -682 104 .3100668022737981 -694 104 .21875523991166 -705 104 .22954209267294773 -717 104 -.5209082116349983 -719 104 -.28945824505736084 -730 104 -.486045484209971 -738 104 .006073307754266295 -748 104 -.5300220158022324 -750 104 .895147932310978 -758 104 .1072824386799712 -764 104 .24536057939112965 -777 104 -.7510661975330115 -798 104 -.16668887815433328 -838 104 1.609360461186595 -841 104 -.02990338375831242 -844 104 .7975124003246673 -862 104 -1.507797949416358 -863 104 -.3631152332695331 -865 104 -.003263195159753547 -889 104 .052535890093270365 -897 104 .27282813268463213 -899 104 1.330966402585363 -900 104 1.1521318978081256 -924 104 .5595320191117019 -956 104 -.3481843100439317 -959 104 -.5721530813259645 -964 104 .30695893076686676 -965 104 .8401138881358299 -968 104 -.98944234962805 -974 104 -.8349138025140947 -980 104 -.04608200769602466 -985 104 -.12985485535635957 -995 104 .4358640163203069 -996 104 -.9158713539315375 -997 104 .5663790602168177 -9 105 -.5469884280519854 -16 105 -.24664172251719 -31 105 -.3017740420872563 -57 105 -.4129688396904713 -59 105 -.09474859721147479 -69 105 -.1758998771114973 -76 105 -.6314929312956499 -78 105 -1.1591919120141791 -88 105 .12183719724587179 -89 105 .09630108094758805 -99 105 .02692232522789101 -100 105 -.6870208376431411 -115 105 -.13482762246172297 -124 105 -.26164729085199434 -132 105 -.20237933188244783 -136 105 .05021555978837358 -138 105 .8426924787904412 -145 105 -.5590952456319106 -150 105 -.12357868884405425 -173 105 .4298076653936188 -174 105 -.34791547103720744 -175 105 -.3595499585219212 -178 105 .06624863727069581 -185 105 .4356699955541199 -187 105 -1.4595943467809485 -188 105 -.24961116706799386 -195 105 -.08820432419644227 -207 105 -.28963700242568646 -216 105 -.473435939751814 -221 105 -.5264770580797512 -224 105 .5559547866235466 -225 105 .9783726037391325 -246 105 -1.4832022577622304 -266 105 -.9045293106798683 -269 105 -.9378524614229361 -281 105 -1.0876619790049125 -289 105 -.715645933242184 -297 105 .7955505162007496 -298 105 -.5470876724347238 -328 105 -.45175852725183197 -337 105 .2771393370331078 -367 105 .13079492206844012 -395 105 .23835364387364155 -396 105 -.44391049656617243 -401 105 .5359869875005314 -403 105 .45655803043404936 -424 105 -.020700623164526394 -440 105 .11394582855846892 -443 105 .13195163657570452 -454 105 -.3085670684344016 -456 105 -.249652091014971 -469 105 .3827538748036097 -476 105 .1534250023678369 -491 105 .4917498437164609 -493 105 .13479463635067476 -499 105 -.22794128154241494 -502 105 -.27544494193594576 -509 105 .948329900225741 -511 105 -.7110047737934461 -553 105 -.017961320166647615 -555 105 .7398701481046621 -556 105 -.6497932784422219 -569 105 .6124475886916748 -575 105 -2.1981404681602044 -577 105 -.9305556473709782 -584 105 .1793456088543854 -643 105 -.03825220663425437 -671 105 .3630367768103149 -680 105 -.47065349362739595 -682 105 .2653176159120715 -686 105 .20674971896752553 -691 105 -.651251771728502 -708 105 -.6938186601015676 -746 105 .44176903466780243 -773 105 .10585110756666465 -783 105 .6553983506774559 -797 105 .43252279543412564 -805 105 .721626371269763 -807 105 .7828685641941104 -811 105 .40606668189684064 -816 105 .028166838821664583 -823 105 .3608756546034021 -829 105 -.5712013184421021 -832 105 .5099792167216162 -843 105 -.378292410201415 -869 105 .30581123329724635 -899 105 -.4095696064254262 -900 105 .40228987624920826 -904 105 .6363663601350257 -914 105 .16065635633857583 -917 105 -.04122891361958204 -937 105 .1050034165669162 -939 105 .5611198494983537 -940 105 .42798934737894556 -945 105 .09719831090399345 -951 105 .030941809875297197 -953 105 .3443020676575369 -958 105 .4300240321541736 -971 105 .07517415382371806 -976 105 .32060516983209325 -978 105 -.4603916003327787 -988 105 -.12163785032524899 -999 105 .5747901647351287 -28 106 .12163133088416672 -45 106 1.4660098558700039 -58 106 .7461958849085917 -59 106 .9168900490372934 -66 106 1.5394738846126679 -72 106 -1.1323823897530363 -81 106 .5441324337719151 -102 106 .49139492176284744 -113 106 -1.3654569416081666 -118 106 -.8952868494362809 -139 106 -.8608109892116662 -145 106 .6952795924834483 -148 106 .346374940640608 -155 106 .2738800266499886 -188 106 .5682545347798325 -212 106 .7345074474207776 -248 106 .15805765103272143 -249 106 -1.4337933368201246 -261 106 1.8861717040640802 -282 106 .17776330108464888 -291 106 -1.3852456160379578 -298 106 -.5912963852624183 -302 106 .7321502940601753 -314 106 1.1413860060701244 -328 106 .4653629812538384 -344 106 -.6994371689658118 -354 106 .011573765041177533 -356 106 -1.2226182073534033 -358 106 1.2922035766758424 -364 106 .37043930992531005 -389 106 -.29214780210226876 -391 106 -1.2281956509230016 -393 106 -.8873232376274255 -407 106 .6660540585937504 -412 106 1.350417897972623 -430 106 -.24979607974355905 -431 106 .24679845223042302 -462 106 -.03640289821452765 -465 106 .6555756070149401 -476 106 1.6529128211727193 -500 106 .4714184147539239 -513 106 .08071757453590442 -514 106 -.15734455060278796 -515 106 -.4079095884936813 -532 106 1.270911171533326 -534 106 .8163180289049988 -549 106 .1298331532842118 -555 106 -.07558017530332131 -578 106 .3278126888653724 -583 106 .5792246200340564 -593 106 -.6774883617946128 -615 106 2.1258322343745224 -621 106 .8248007905237374 -627 106 1.222258396256262 -628 106 -1.3313995838980826 -656 106 -.11929369378428145 -665 106 -.2669830585512134 -676 106 .03660390807009847 -680 106 .58246470826119 -698 106 1.1059314728893106 -715 106 -.33680789166600444 -725 106 .9302026174381517 -733 106 -.16442962461035582 -741 106 -.6889990743192554 -744 106 -2.2794364943252403 -752 106 1.0147935627793447 -768 106 -.5074764570796941 -777 106 -1.0841627917146526 -778 106 1.7251090965094933 -781 106 -.5085374647856119 -782 106 -.7440909264964493 -789 106 .1759968546377167 -809 106 1.7555552285512896 -810 106 -.03631219491766591 -819 106 -.9339328432975419 -823 106 -2.707678747847325 -827 106 -2.0878340877708164 -833 106 -.3698896688499891 -836 106 .9507141285238087 -852 106 -.9956198400233711 -859 106 .04108886404878742 -869 106 -.1816718072309202 -882 106 .15551990921549078 -897 106 2.4087284670200435 -924 106 1.0722791592616474 -935 106 -.2214778282874949 -950 106 -.32369562918354045 -953 106 1.298500471670962 -955 106 -.2318285800750417 -980 106 .7297226997577745 -987 106 -.31456458109760915 -3 107 -.5092475948907998 -6 107 1.048247474886925 -17 107 -1.8855638724187496 -32 107 -.24445668804312273 -44 107 1.0466300470636476 -49 107 -.031708804667323856 -53 107 .33813470822098346 -56 107 2.435932368251804 -61 107 1.6507572021410615 -68 107 -1.4573983796902321 -75 107 -1.2710447853746403 -87 107 -.8801444530089997 -97 107 1.1383565421485613 -107 107 -.26986415959365084 -129 107 .04590795808878123 -135 107 1.6826468126234406 -140 107 1.1851901031084913 -147 107 2.709994345159606 -159 107 2.361161277321696 -167 107 .2776331441696639 -180 107 -1.7814640008453806 -181 107 1.6135209074181274 -183 107 -.7567996672209691 -188 107 -.12240424823974701 -217 107 -2.522954950298119 -232 107 -.8892636816631772 -235 107 -.20156214682464213 -250 107 .3333757089380815 -282 107 .9055449453059761 -295 107 .8948153324486738 -318 107 -.12344388411111784 -327 107 .6170236558998206 -334 107 -1.8832738336163386 -338 107 .4629998163829898 -345 107 -.3030263724931697 -355 107 -1.0389474017033287 -359 107 1.6698736092652995 -368 107 1.1797513479720125 -372 107 1.618291448341848 -378 107 -.5131613309397571 -393 107 -.3360979858895499 -400 107 -1.121765977014385 -407 107 -1.5483474146660248 -409 107 -1.6165935265205968 -421 107 -.1173085920808805 -433 107 .7107735328524103 -441 107 -1.469383510376472 -448 107 .9812576767169269 -460 107 -.12322623997047374 -468 107 .4389694361415491 -471 107 -1.9534792317237493 -497 107 -2.0783117639809934 -502 107 1.3963517239141074 -510 107 .727501039437642 -524 107 -.3442406747157097 -570 107 .024640344247029794 -577 107 .9076182780751306 -591 107 -1.0850846423664005 -593 107 -.6721376352397329 -597 107 .14278925993529673 -603 107 -1.0578927135058966 -604 107 -.6945731175461802 -654 107 .7189793624031602 -671 107 .7311751323631097 -682 107 .32033496173681564 -683 107 .03467088055480069 -689 107 3.027951709682772 -690 107 .04886634006576858 -698 107 .7866037153628388 -702 107 .7003526998764151 -709 107 -1.1359139190142287 -721 107 .6789755870840886 -730 107 -.46631689812766225 -769 107 -1.0683734222124706 -776 107 1.909092704856677 -779 107 -.011810225727197476 -780 107 1.5863398662733963 -794 107 .9605855197552986 -803 107 -.16282238602438073 -807 107 -.5384113919897423 -831 107 .03078485231502784 -843 107 -.7061449055849309 -858 107 -.4454517735692447 -867 107 -.11918920570913794 -872 107 1.7531369149231733 -876 107 .9295992329476624 -892 107 .5427153271331957 -899 107 -1.284785750825535 -902 107 -2.457227303210823 -912 107 .136257475717854 -936 107 1.5265615429666595 -941 107 .30999740974803913 -961 107 -.05040469387384637 -976 107 .12150471852148143 -995 107 -1.7126227132793754 -10 108 .20636190518578618 -31 108 -2.3028185556185403 -43 108 -2.041652850392132 -52 108 .8514995266335401 -61 108 -.24412555308304817 -67 108 1.280766439056999 -72 108 .4078887295063266 -82 108 -.35206331704344496 -87 108 1.0172311793360027 -89 108 -.7344556554050513 -98 108 -1.115152380556122 -99 108 -.8702377389945628 -122 108 -.20146510423242822 -123 108 -1.0300226952729088 -130 108 -.1697070488343082 -131 108 -.11372232002536109 -151 108 .035495458014168646 -177 108 -.3432761818699927 -182 108 .17124311502622405 -183 108 .5329403191375338 -184 108 -1.5787328913057808 -190 108 .09427535046721966 -197 108 -.4272595337567542 -204 108 1.6587128731055523 -220 108 1.164671949687756 -248 108 1.9914965682630972 -249 108 2.2833726635631657 -266 108 .6173091061486086 -274 108 -.7959411179358838 -279 108 1.3192387543851616 -284 108 .8638295417888421 -293 108 .38588601719769705 -301 108 -.6469806817389647 -323 108 -.31881873011251294 -340 108 -1.8489441212170064 -345 108 .49535058006385774 -355 108 2.42462282371147 -356 108 .08890198565617302 -359 108 .4094354835206167 -388 108 -1.4228501790988841 -404 108 1.6654889940618856 -406 108 .9846467474189616 -448 108 -1.6550370765376123 -453 108 -.5085078129154907 -466 108 -1.0014238327088139 -467 108 -.9722293268128815 -488 108 .553999637736225 -530 108 -.622091013728876 -531 108 -.27801405879860086 -542 108 .26172221624797865 -546 108 -.423696028432251 -555 108 1.4463202704582057 -560 108 .30497862336611525 -561 108 -.17283269838372783 -589 108 .5233811914880391 -610 108 1.0888190197029322 -635 108 .10539393669458662 -644 108 -.3945097258408304 -667 108 1.140317121338772 -668 108 1.90733367668262 -669 108 1.1670369320942848 -692 108 -1.015434025774428 -703 108 .45120897304365265 -704 108 .9560531048147493 -717 108 -1.0984451479167854 -722 108 -.6233698776835142 -732 108 -1.8251447464226962 -733 108 .4142635878850395 -739 108 -1.6491740344075725 -769 108 .9355337722440698 -782 108 -1.2140665852114796 -795 108 .08366489234658975 -813 108 -1.8074104679526377 -825 108 -.3112409026949414 -836 108 -.3959962028822078 -840 108 .7431011207692323 -845 108 .14932984502132188 -846 108 .9312800766555686 -849 108 .5032500215782634 -864 108 -1.0727402142387328 -879 108 -1.1363517305050257 -896 108 -1.752295095167782 -897 108 -2.31122220730825 -916 108 .13355527483197444 -918 108 1.638334058833952 -929 108 .7015251985930322 -931 108 -.39781920439128743 -974 108 .7506039075084439 -978 108 .9441393858583037 -1 109 .2403284230661733 -3 109 1.9212327827289615 -11 109 1.8617459410200154 -24 109 .7819953877170089 -26 109 .21515555506719738 -48 109 -.4813554678682893 -57 109 -.17331457875119669 -65 109 -.5197351419372128 -87 109 .4989286330911089 -93 109 1.614784112335451 -116 109 1.125510720301405 -118 109 -1.2137609656711015 -134 109 .8267877383545454 -136 109 1.010838535326235 -138 109 .2977742797504214 -146 109 -1.6494181995704642 -159 109 -.3614092156368281 -161 109 -.13016702913795797 -170 109 -.8274620979094129 -175 109 -1.0350859799499483 -182 109 .39588984362410046 -183 109 2.60872247815371 -188 109 .4389954634445189 -195 109 .365002493053741 -199 109 .3526391926635612 -200 109 .6577860226208102 -207 109 -.112017612857813 -230 109 -.8641055579419756 -233 109 .6060642853082091 -234 109 -.19677533760348698 -235 109 -.8675246564350685 -246 109 -.3737689592757601 -253 109 -.6045219494595733 -264 109 1.5798044676306562 -276 109 .3142201618910527 -278 109 -.714788850097864 -281 109 .5112134213785253 -284 109 -1.1963370304114171 -292 109 .46418201885046384 -307 109 -1.2274286095137177 -310 109 .4942729370155475 -314 109 .6453544478762373 -318 109 -2.153735605515202 -325 109 -.7849409077156007 -346 109 -.6206706595946211 -353 109 .3338840921308964 -355 109 1.0572909208926826 -369 109 -.0468222804164314 -371 109 .6577096450965642 -387 109 -.17293485684099172 -388 109 1.7959355785819031 -393 109 -.9532689769923229 -406 109 -.38297610076796945 -408 109 1.1279464553784242 -421 109 .00949975985698756 -426 109 -1.7444025351271284 -430 109 1.0092901051969458 -440 109 .5504121534117657 -441 109 -.022073443062546706 -449 109 -1.007856115586414 -450 109 -2.017167134848195 -461 109 .19852410739054582 -488 109 .09665780454949595 -501 109 .18860825543572962 -507 109 -.1521353215656297 -508 109 -.4371434590245924 -543 109 1.871439200624682 -547 109 .40891414385216696 -558 109 -.8041821006421753 -563 109 1.0122219906267764 -579 109 .6295238511131124 -585 109 -1.0254268029822373 -587 109 .9389298582827478 -604 109 -.007396804793262832 -621 109 .34431015071550214 -623 109 .5300618640660881 -634 109 2.5622251917292784 -652 109 .11618083161831874 -653 109 1.1286327950813972 -671 109 -1.3410797373957963 -679 109 .7103130252114807 -684 109 .300710821233491 -685 109 -.608117502394478 -687 109 .1875013526069828 -691 109 -.36386926181742174 -698 109 -.8517664699643275 -714 109 .01891949377465451 -748 109 -.40721643747864045 -761 109 -.14491259873428533 -772 109 -.788591323311546 -778 109 -.6671733764234655 -789 109 -1.3027079869316616 -823 109 .6425982722885961 -841 109 1.2898856671408387 -853 109 -.9044218916413866 -860 109 -.1717407028217584 -864 109 -.1555838949159221 -867 109 -.9724342417981016 -872 109 .4864489018448265 -898 109 -3.1414111789669503 -901 109 .07169778190533152 -906 109 -1.7390747752551055 -911 109 -.38396272934182396 -914 109 -1.6610567234100262 -941 109 -.2401099524701394 -948 109 -.1066751705392282 -982 109 .6487686215744345 -993 109 -1.4279039810253698 -12 110 -.7811337935689795 -38 110 -.9464057090744968 -43 110 -.7184919361672691 -50 110 -.685668493665508 -53 110 2.1461766142526404 -57 110 .5469113742905873 -60 110 .5693181594453929 -89 110 1.2929315528786456 -96 110 -1.587724341158458 -100 110 -.15048323266064367 -111 110 .36220529882710306 -114 110 -.2176816250360681 -132 110 .8887857729163995 -134 110 -.6484954428537053 -139 110 -.01827622176481955 -148 110 .7654413619075122 -153 110 .5769133187304537 -169 110 .4226028843034015 -178 110 1.139906501487422 -180 110 1.2579187247343464 -193 110 .07806063033017019 -204 110 -.2145502741138523 -226 110 -1.3475913996898867 -227 110 2.0946853507708547 -231 110 -.7549404358956158 -232 110 1.1921742367653367 -233 110 -1.2379573523332252 -234 110 1.657649446845141 -248 110 -.6413740367498496 -254 110 .26550836317819093 -266 110 -2.0824158897450635 -272 110 -1.156793272010097 -279 110 .6732082796343954 -329 110 -.6819719746295321 -334 110 .6599167044418331 -355 110 -1.727701086266765 -407 110 .9335317807686679 -423 110 1.1045996899960957 -430 110 -1.328852741555447 -432 110 1.0731025426782288 -434 110 -1.1358191982394643 -457 110 .04272425729874555 -466 110 -.005991432021019483 -470 110 1.1258902708173424 -479 110 2.232366665104876 -480 110 .8918512894673144 -493 110 -.9267667057621153 -495 110 -.15130651934920672 -501 110 -.2496857737939756 -518 110 .3052830605964938 -552 110 -.24680103728863717 -562 110 -.31031857325906576 -574 110 -.1638406424256449 -595 110 3.2712062891211637 -602 110 .4651474737152326 -612 110 1.2015751953700082 -620 110 .15328111823995422 -623 110 .3143633298354836 -628 110 .6729075999776013 -633 110 .3745623504140789 -635 110 .7735236038959028 -638 110 1.3742602411379123 -653 110 -1.820201692793306 -660 110 .6923578201784764 -692 110 -.4738818086299116 -701 110 -2.118169087998683 -703 110 .7278383357727611 -709 110 -2.4441044381914083 -719 110 1.5031414896179056 -727 110 .31000654108964154 -732 110 -.41152904759962733 -738 110 -1.2418487886067155 -770 110 1.0824219249328502 -773 110 -1.8263299504225996 -783 110 -.09505587706607616 -790 110 -1.2324502535968773 -809 110 -1.5614478377702 -810 110 .556879549725008 -824 110 -.6691158826797309 -843 110 -1.1736756817569158 -847 110 .33054630826703574 -849 110 .3763628010441167 -853 110 .2921546402521458 -856 110 -.8398555810545478 -865 110 .721757476180205 -868 110 -.5324834533188799 -870 110 1.4431287348179365 -872 110 -.9524500705476182 -893 110 2.535293589238488 -895 110 -.3718225739523887 -905 110 1.3509895799024985 -908 110 .21031249442125044 -916 110 .6846894248981832 -918 110 2.008134995267593 -960 110 -.46967086100001565 -964 110 -.18750826892564124 -977 110 .26699297929022286 -981 110 .5271100089828902 -987 110 -3.5812892979547417 -988 110 -2.7630921385220293 -993 110 .9915457981871896 -997 110 1.4996951356227666 -4 111 -.010838796617688731 -17 111 .9033514793449293 -18 111 4.661729687440761 -24 111 -1.4175031966910194 -37 111 1.151532720459866 -52 111 .08064884849291054 -69 111 -.46212825913930317 -71 111 -.927250876742643 -92 111 -.6285237809232023 -96 111 -1.1038060231044655 -120 111 2.3990629226645046 -122 111 -.18767701466201162 -144 111 .5078711695124735 -147 111 -2.5189212645765924 -148 111 -1.4352274813139798 -161 111 .22371239595816161 -163 111 1.2042070332905968 -184 111 2.269251710325505 -194 111 1.388053147104822 -207 111 .6689894371900117 -235 111 1.5681230211117534 -243 111 -1.123756865258682 -245 111 1.8973452991475377 -253 111 -.2740246228752448 -255 111 -1.7996065149416016 -264 111 1.0747700706089185 -283 111 1.5062370310935453 -287 111 -.6593902757142345 -295 111 -.30809770292232774 -306 111 -.8485966878082621 -315 111 -1.2580954184371023 -336 111 .16633841953280842 -350 111 -1.6130077578798103 -362 111 1.2178747383581485 -377 111 -1.3146051250560433 -380 111 .5815707397844652 -394 111 .7715673649327021 -401 111 -1.7364666335690941 -409 111 -1.4964625419832898 -425 111 -3.191695775883749 -430 111 -2.772204926568576 -433 111 .5070874408901352 -442 111 -1.1344392492298523 -450 111 -.17186675411545146 -469 111 -.5107505416676765 -496 111 1.0870982893385572 -503 111 -.9342890716145458 -509 111 -.7650320036164983 -510 111 -.48711671294983605 -533 111 .9424226288884388 -538 111 -.15781951570094793 -560 111 .20423293259940278 -562 111 .3225107486501543 -567 111 .8015871397061404 -580 111 .6588786226147392 -583 111 1.2579996391753958 -590 111 -1.1733942858759447 -592 111 -2.4811607615385407 -607 111 -.6956036323145396 -621 111 1.7170297225904947 -623 111 1.8098411597330744 -653 111 .30296758205172913 -654 111 -1.8293291669425356 -659 111 -1.7206746666584056 -684 111 .7955264684882211 -697 111 -2.260817622610275 -700 111 2.4481181766946736 -727 111 -.7753294929787031 -739 111 .22757342182546672 -756 111 2.426212713041902 -758 111 -.2078422652841768 -762 111 -.45583483637663436 -779 111 -4.041291126472314 -786 111 -2.191494674959423 -807 111 -.4506218864262623 -820 111 1.454791963782964 -836 111 1.7555557706029905 -843 111 .01402271729004162 -853 111 -.8795343808194644 -873 111 -.453194157929249 -876 111 .3058138503003514 -884 111 -.046655724353390673 -893 111 2.0661900699499856 -896 111 2.699585414963635 -912 111 2.853402506242479 -920 111 -1.014794530982177 -926 111 -1.3877387318467858 -933 111 -1.2952237409996918 -949 111 -1.0509545002286087 -955 111 -.3689302182360934 -972 111 .9809961474582106 -982 111 .29197880113926666 -2 112 -2.594135494651064 -3 112 .23274994572056779 -22 112 -.0011116301020244156 -29 112 -.5888552767744574 -46 112 -.796403270294721 -82 112 .8322395297476233 -88 112 .7455879144421241 -114 112 -.10857167263416781 -122 112 -.9390227401587992 -128 112 -1.0802320673944072 -156 112 .6864566798462921 -168 112 -1.8576977741615284 -196 112 .13260968299634104 -201 112 -1.0950763904774337 -206 112 1.2028257433384202 -210 112 -.3245178693238445 -225 112 -.5287384458429457 -230 112 1.0255489042931702 -233 112 .5034731756663079 -240 112 -1.0371317971475182 -259 112 -.28842839988183955 -260 112 1.8614723145367909 -266 112 .208572412723581 -267 112 2.445720657763488 -286 112 -.10794647502250897 -302 112 -.4316631100252802 -304 112 1.0169530525635602 -306 112 -2.309937779335472 -323 112 -.06679437615267908 -332 112 .2465005407427357 -333 112 .01333131478797481 -339 112 2.445065322304709 -371 112 -.40967296938164544 -396 112 2.2748221458508486 -402 112 .3602791837616351 -408 112 -2.426999667010919 -427 112 -2.0343256110017576 -437 112 .4092669151288735 -440 112 -.6750653334123803 -448 112 .8100278227381019 -452 112 -1.8597498965238226 -473 112 1.80330067050392 -475 112 -1.7823104447164133 -477 112 -1.722309484112224 -486 112 -2.180582508800515 -490 112 1.0301288702631715 -499 112 1.3084189083139413 -505 112 1.885767155967247 -508 112 1.6859824279844586 -522 112 .6762893078683075 -528 112 .7476483750443137 -549 112 -2.0366277563519293 -557 112 1.1970626833645839 -560 112 -1.8020584346887925 -575 112 .8198005135593323 -576 112 -1.7761420994639716 -607 112 -.7795900705454553 -617 112 .49283112726297723 -640 112 -.9300598745749806 -655 112 1.2765664433529518 -665 112 .10829324272387245 -669 112 -.7415850399760912 -672 112 .48855333472905144 -691 112 -.01767339376810815 -708 112 .863745255007982 -720 112 .5093944332167485 -730 112 -.9462244933864059 -744 112 .3642236564722715 -760 112 -1.0868890227101227 -773 112 2.252355718251216 -775 112 -.45988630603532943 -788 112 -2.532224240422773 -790 112 -.9693556771111858 -813 112 2.4113629125797518 -826 112 -1.6355308861207798 -827 112 2.3601847451448843 -873 112 -1.288026120963953 -884 112 -.007100926985400768 -889 112 -2.77583002052897 -917 112 2.8830780221080627 -950 112 -.1242440729653603 -968 112 -.25956305267241553 -972 112 .6235494000240476 -986 112 1.446854215826663 -991 112 1.0682568275598963 -993 112 .11339548625326312 -995 112 -.6867093787744156 -999 112 .6661473464269494 -14 113 .8987894870453074 -15 113 -.13440536109898682 -29 113 .9391055711546529 -30 113 .04763839243145098 -33 113 .6886572316888454 -49 113 -.3011261993275114 -72 113 .6480502136220225 -74 113 1.5113904017180166 -75 113 .3038996490766731 -76 113 .33499438298233075 -78 113 .6133374387496713 -109 113 -.25926551678406684 -128 113 .07742042483568158 -132 113 -.4008177519664947 -137 113 .5540097559127601 -149 113 -.10103168737025543 -162 113 .2636052437405568 -167 113 -.2882463371337464 -182 113 .06280446376803069 -199 113 -.0625938089500476 -213 113 -.09574044303494891 -217 113 1.0889997407960712 -223 113 -.5518237933140027 -224 113 -.10361828241735183 -241 113 .3821421764320087 -248 113 -.1333688661131499 -256 113 -.311855596001433 -269 113 .02491444342687893 -274 113 -.31889071618074116 -278 113 .8174380637640222 -279 113 .11005322920162014 -288 113 -.2420865113003036 -302 113 1.0852233775809248 -305 113 -.11123471657226022 -316 113 -.8346689487542297 -324 113 -.11015071780831204 -329 113 .4581020609824274 -331 113 .07174634216660934 -336 113 .4042126064346758 -337 113 -.09074620658284707 -368 113 -1.4933108334217704 -386 113 .6343367376361858 -396 113 .7884104611832117 -402 113 -.6916094899644951 -403 113 -.15733086624978448 -408 113 -.17198259244946695 -417 113 -.12259210877287874 -420 113 -.1684356887947589 -423 113 .49519329012660324 -432 113 1.0250609314990844 -436 113 -.6263728640910143 -438 113 -.4537230855639495 -447 113 -.04705283119796172 -449 113 -.9490487038339759 -451 113 -.28075484536764783 -465 113 .4189788338658148 -495 113 .03848218809847596 -501 113 .5427698830121377 -511 113 .1806075019029138 -536 113 .9172299988402791 -541 113 .3494358258361964 -543 113 -.1581985379574277 -553 113 -.41950962189191493 -557 113 1.198794316973494 -559 113 -.13060457358620636 -566 113 .11433350862726019 -568 113 -.4805960850340986 -581 113 -.2723357314841252 -588 113 -.05119536001528132 -589 113 -.16106126262635057 -594 113 .04838100153553079 -604 113 .4200722623877653 -610 113 .09628461925381401 -624 113 .06854987497199481 -646 113 .08879454300539044 -652 113 .6247004215091049 -655 113 .44455387553601877 -678 113 -.17767038873700547 -688 113 -.4526829033884872 -705 113 -.4651424043176627 -719 113 .19371929212823247 -726 113 .1896795305294749 -736 113 .1404669798042614 -744 113 1.035088134534319 -750 113 .9426569929204358 -758 113 .003708923685254731 -763 113 .33031318717034963 -782 113 .09522926055086714 -798 113 -.1762027565836183 -811 113 .8513418858618937 -815 113 -.5303934684754525 -836 113 .10551549412787027 -841 113 -.4623438217782021 -849 113 .6690180282217405 -854 113 -.2588938269927662 -863 113 -.09206403473924618 -864 113 .07584239451196698 -880 113 .2555197516036286 -889 113 .024258215975438105 -890 113 .8604938027449316 -910 113 -.02782036421400147 -911 113 .38829352634276365 -913 113 .5962280379117204 -917 113 .34691413888062383 -921 113 -1.100832003267581 -938 113 .04867325187329612 -940 113 -.5206314249111359 -944 113 -.8601755986248789 -950 113 .7073154186339519 -970 113 -.4477805027014794 -981 113 .1651363046521907 -991 113 -.022187894916385814 -16 114 .3957039594700044 -28 114 -1.0871788845570618 -30 114 -.9307175773380386 -31 114 -.15515079103612728 -42 114 -.44265816764924415 -44 114 -.260162068163642 -48 114 .19204937660322186 -71 114 .7832142528046224 -78 114 .5156958496064475 -94 114 -.18873570993491773 -97 114 .1949042125127421 -143 114 -1.09565101279695 -154 114 .4144729844700728 -175 114 -.6208455894069632 -180 114 -.4270286449848407 -181 114 -.7227468308366248 -200 114 -.36376164999431226 -213 114 .38649757314792943 -219 114 .2186335665554343 -225 114 -1.5807570537871627 -235 114 .20992725315779967 -270 114 .18624123017597385 -303 114 .5849241959199496 -305 114 -.33288074763363096 -326 114 -.7920692574289859 -345 114 -.39465509340567984 -349 114 .3234126355082382 -352 114 .23998036850726429 -371 114 -.46681713021328103 -385 114 .6282386824507623 -389 114 -.12691554066282318 -399 114 -.11792168769200441 -423 114 -.9957134143325677 -426 114 -.4752240735100169 -430 114 .5706083444671051 -440 114 -.7120299681576441 -449 114 -.7424182079846757 -450 114 .02873515608058605 -471 114 -1.0306725474021052 -474 114 .4347497543205799 -494 114 -.048209532852782205 -532 114 .5630210607189995 -543 114 .14998183501190898 -579 114 -.47750677563229793 -582 114 -.18359077096340817 -609 114 .18970084601521633 -614 114 -.38567167468885993 -643 114 .1747520941167168 -667 114 -.3965462499226201 -671 114 -.4288872972347543 -673 114 -.12305312476473942 -684 114 -.6476115257556921 -692 114 .037419052952722937 -697 114 -.5887976024089148 -702 114 -.23961740962957656 -704 114 .01773069729038812 -714 114 .18739561473573085 -720 114 -.7247956819612384 -727 114 -.6211841423420594 -743 114 .5680129247661203 -752 114 .06331532884385552 -758 114 .11223152511303225 -780 114 .05536378572527109 -784 114 .6193706291876719 -808 114 .41905010042429947 -811 114 -.8034658603815936 -814 114 -.1639922063192081 -816 114 -.6685367034038214 -819 114 .7372009204227663 -820 114 -.31777808230433857 -833 114 .5057007584385348 -848 114 .6746317584820445 -850 114 .21854525046915607 -851 114 1.0726573589933885 -853 114 .7246094869343606 -865 114 -.3047990181096721 -866 114 .4467591435451158 -867 114 -.16790051673694628 -884 114 -.5326033001193211 -898 114 -1.4729838867529184 -909 114 -.5646787811720204 -916 114 .018108166587842645 -923 114 .040763967301484856 -926 114 -.7275106182399214 -930 114 -.8764114343228266 -932 114 .9091585119173263 -947 114 1.6449555666050522 -954 114 -.28115357260482876 -959 114 .6627827286674515 -963 114 -.5301089789195952 -978 114 .21795658758067663 -981 114 .060537031537212106 -989 114 .4240527769750318 -990 114 -.42194980107876046 -991 114 -.47914191613399365 -6 115 -.5116724135118789 -12 115 -.6275713753668133 -16 115 .4694628131053712 -17 115 .9939271811319103 -51 115 1.0603795637624351 -57 115 .14265698400627674 -58 115 -1.6422445172900766 -60 115 1.8981756317226681 -61 115 .8547249399340532 -65 115 .8610485056662537 -72 115 .3329442638528859 -81 115 -.20520687612889907 -84 115 -1.1260832889817753 -86 115 2.210503171081279 -87 115 1.5543701272175596 -94 115 -.48283300557048847 -108 115 .8464034231482259 -113 115 1.5553714998962216 -116 115 -1.793171542243725 -129 115 -.6670982007941175 -132 115 -.1822011768908609 -150 115 .17991007529506337 -152 115 1.4729828490732286 -182 115 -.005340682323097028 -190 115 .511394617323125 -192 115 .20715305539033974 -202 115 -.9604523877771958 -211 115 -.9307107142725098 -219 115 -.611036402310467 -220 115 -.08420595420031013 -241 115 .5961757894877004 -277 115 -.5940116714850125 -289 115 1.4648104945320939 -292 115 -1.8803784432541397 -305 115 -.576258797219438 -315 115 -.9823853086103511 -317 115 -.5829880417579464 -328 115 .1557652769388595 -342 115 .4655083168752512 -347 115 .9441568625013086 -348 115 .6526708528465596 -355 115 -1.9571655595000526 -357 115 -.8143634535072029 -369 115 .6671379362440234 -370 115 -.7633775556819571 -399 115 .1448896148046665 -422 115 1.7647906889274743 -430 115 -.6962990501808836 -439 115 .6507476162433321 -440 115 -1.807007238325871 -441 115 2.5468574440753926 -458 115 -1.102773128630498 -471 115 -1.039005529110168 -477 115 1.1376877735091637 -480 115 .5536847382768313 -481 115 -1.235288480876646 -488 115 .015137935889089987 -496 115 1.151221588923026 -497 115 .059685782001319916 -514 115 -1.3208758409908439 -517 115 -1.3917986412838177 -525 115 .8330919498906175 -529 115 .5989335274140811 -546 115 -.25682624635645235 -566 115 .4366556383397244 -596 115 -.43813222681087555 -599 115 .09681514170607103 -605 115 1.3950341037483391 -613 115 1.3664103957577565 -614 115 .34239465196001867 -615 115 -1.477715802626995 -628 115 -1.0213231053823706 -629 115 1.5451197394164091 -634 115 .08685328748448184 -661 115 1.9736891394248408 -673 115 -.246582558299746 -680 115 .5366816072168109 -696 115 .45386139334296466 -700 115 .07214556429071384 -705 115 -.5450405129081292 -706 115 2.5273475704927986 -707 115 -.698626745045377 -708 115 1.89263716774171 -713 115 -1.534422989735029 -732 115 -.7770096499672512 -734 115 -1.4349892677710037 -735 115 -.5218091755578987 -738 115 -.6710995608010999 -740 115 1.9896541418496465 -758 115 1.3751034537827627 -760 115 -.7535854356338092 -768 115 .48591362155950485 -771 115 .4561935331884997 -782 115 1.0410621410802778 -786 115 .7778983848249751 -787 115 -.9794536778973568 -788 115 -.7105800089851875 -798 115 -1.1622269172876676 -799 115 .67342626515774 -808 115 .7756722521390117 -818 115 -.6541392787092537 -820 115 .9670476974771698 -824 115 .25686293874190785 -825 115 -.9082155451556677 -840 115 -1.3356369274509132 -841 115 -.35389905602960425 -859 115 .027466350907312365 -871 115 .8455761491642123 -896 115 1.3033911584629183 -916 115 .5464177516429723 -927 115 2.004478476472552 -956 115 -1.2528165223208625 -962 115 -.8864790221484173 -972 115 -.1651859283710371 -973 115 -.8358252263481928 -985 115 -3.0028869283342363 -989 115 -.3564466090601913 -993 115 1.496256252083757 -5 116 -1.3934214332706811 -18 116 -.1990231126522311 -20 116 .47805397395329907 -27 116 .9235592843503345 -45 116 .32764379437045377 -57 116 .8322917567458986 -59 116 -1.1830828602297854 -67 116 -1.6679807517760648 -76 116 .12107238230546076 -89 116 -.38439215994440695 -108 116 .8348569387817335 -112 116 -.2629951593672198 -118 116 1.2501321029041157 -125 116 -.03889658903349589 -130 116 -.3828142268825809 -149 116 -.7166301037976246 -161 116 -.1200814861586109 -167 116 .10850951689949856 -172 116 1.188775063568414 -181 116 1.1878763609383667 -190 116 -.09914870328746934 -236 116 .19675281937657013 -247 116 -.3123261956625574 -252 116 .8607761258507406 -290 116 -.2708591698976402 -292 116 .2844710715736476 -302 116 -1.0575699083853873 -304 116 -.2263688518843573 -306 116 -.15167561473484295 -313 116 .8422877623310784 -321 116 -.4695870144659728 -323 116 -1.082611093779103 -327 116 .08979401742198806 -329 116 .7808264782588904 -332 116 .08827828389521536 -352 116 .8694796221640938 -358 116 -1.3946772652896717 -360 116 1.9116332205300834 -363 116 -1.183117686406413 -373 116 -2.2928685674965985 -374 116 1.0332255163349695 -377 116 .5393684895036267 -385 116 .7851229488783646 -444 116 .715996165248714 -458 116 -.9347212139986685 -485 116 -.5312634743197897 -492 116 .7343551772560051 -495 116 .3308928635921946 -515 116 .3262549869895617 -519 116 1.1150518846143092 -524 116 .09068534500278773 -537 116 -.5132770777470083 -571 116 -.9902988150137613 -577 116 .7662116235566695 -579 116 -.2917594619999991 -588 116 -.18575878189235473 -623 116 -.8858495291984849 -625 116 2.078702927996454 -628 116 -.5528756146697344 -633 116 .879604060793051 -647 116 -.20463934725945981 -663 116 .8133361418839338 -665 116 -.9371447678023193 -667 116 -1.0948536852187827 -675 116 .7784652713825022 -683 116 .20202271200006855 -716 116 .7643012183700316 -719 116 -.7434368325932286 -720 116 -.20474394481825636 -752 116 -.4797341654050641 -774 116 -.060879712767292087 -778 116 -1.5255894883785024 -781 116 1.4158713552535085 -784 116 -.13664964492091353 -795 116 -.3430247187359783 -801 116 .535588756059212 -816 116 -.8781891688656843 -834 116 .11163923774107551 -860 116 -.16010622711037867 -867 116 -.6142344004598363 -877 116 -1.3272823836638965 -883 116 .00385546476823051 -891 116 .06810996174316425 -897 116 -.8020571049266043 -906 116 -1.3603541422440952 -916 116 .16964802153722988 -928 116 .6274784764215264 -934 116 1.2264010559450629 -951 116 -1.0500364932066084 -953 116 -2.2523307336418403 -976 116 -.22680738903635067 -977 116 .04710807842664777 -996 116 .34953554569035783 -997 116 -.2700617463071462 -9 117 .22087173002938368 -17 117 -.8158500264884855 -37 117 -.15465271699529107 -41 117 .5100151651747792 -52 117 .4831299118037183 -56 117 .3613439199578132 -64 117 -1.3095113953666841 -70 117 -.9855291960944446 -71 117 .8707346908945064 -83 117 .7275477481226624 -103 117 1.4803338514028486 -104 117 -.41455478215103203 -107 117 -.5126977754978468 -111 117 .18564559064123767 -131 117 .8940987127034867 -143 117 -.4688767886325321 -149 117 -.8264880200380061 -172 117 .09323384365673379 -184 117 1.9550915448736452 -187 117 -.07908717991711368 -192 117 .9083410903852696 -200 117 .4819480183101663 -204 117 -1.3213847892536479 -207 117 -.6397370511659134 -213 117 .043945137516872027 -222 117 .9438182619278983 -237 117 -.30430617634741514 -244 117 .13786024498534014 -251 117 .8789774104306415 -273 117 .121200236203684 -280 117 -.5277086153449879 -285 117 .7775172564727135 -295 117 .07195879257725009 -305 117 -.21505120427040544 -314 117 -.391130662841525 -325 117 .13853154099710846 -327 117 .4160740566244394 -337 117 -.8306704003357965 -340 117 1.7235352306867335 -356 117 -1.2281920983708123 -358 117 -.3035622617596427 -382 117 -.1373932686291951 -387 117 -.18656065808274058 -422 117 1.059030574749199 -423 117 -.7517108340427869 -437 117 .2516787519258202 -450 117 -.9346856898875415 -461 117 .07255341345440734 -462 117 -.2046281826225234 -463 117 -.07509885670855149 -480 117 .6593445029722946 -500 117 1.1560590330583291 -523 117 .19730284676201942 -530 117 -.7509653974160277 -534 117 1.216960787773377 -540 117 -1.042048561732982 -542 117 -.3059681187865849 -545 117 -.4682295236247836 -549 117 1.7087808391850354 -558 117 -.8671451835836995 -562 117 .2573390502302652 -582 117 .29494190277034626 -590 117 .29427057468286333 -622 117 -.5895707082053805 -634 117 -.6963891393340841 -647 117 -.173207505298828 -649 117 -.19212990622373424 -660 117 .7243861110986647 -664 117 -1.211152718591978 -702 117 -1.081960565795035 -708 117 .5021755571466722 -711 117 1.262021103785164 -714 117 -.12011488560524089 -728 117 1.506850005018167 -749 117 1.1361988788800992 -751 117 -.6057235870690949 -772 117 .15585729063454062 -778 117 .5226003240335069 -791 117 1.7338468778722926 -806 117 .7279096749128932 -814 117 .5273795703959082 -817 117 1.2924527584496668 -843 117 -.448736450032526 -851 117 1.8241595104258832 -853 117 -.23890383489154182 -857 117 .38395649800173925 -860 117 -.811831689720401 -878 117 .8231927216853497 -918 117 -1.3579367530763737 -927 117 1.6072376439390816 -928 117 .26460405847463925 -937 117 -.12568772187987576 -938 117 -.24066920751734533 -939 117 .08826528839562886 -946 117 .08600908190452765 -948 117 .15192253302777947 -951 117 -1.680928398649827 -961 117 -.23767248457642312 -969 117 -2.2030984118161197 -16 118 .26044510284436856 -19 118 .06687657192366729 -29 118 -.22878095390270106 -38 118 -.7479841839557307 -39 118 -.9149576066203015 -55 118 -1.387894487353911 -59 118 .02266169591913786 -70 118 .1330953577586938 -89 118 -.23815275819159284 -145 118 .5832580181249037 -154 118 1.8698284805436545 -156 118 -.7463092322480434 -166 118 .8690084137196082 -168 118 .19528559234278178 -174 118 .12172361825685576 -189 118 -.8219042640770297 -193 118 .45065182916233015 -196 118 1.4382360618839254 -200 118 .8926685646102781 -205 118 2.315111507155517 -215 118 1.4945519447094175 -241 118 -1.5961858503228976 -249 118 .7776497518018941 -251 118 -1.1000054399895616 -265 118 -.9796168559952529 -270 118 .06356597571758588 -282 118 1.046926643905446 -358 118 -2.572340910569573 -370 118 .4078375294035355 -371 118 -.6524773843281814 -390 118 -1.100430643518147 -393 118 -.04603111680272552 -438 118 .8124301721497279 -442 118 -1.2576711705516734 -479 118 .05073858944556585 -498 118 -.37957812027885873 -501 118 .6747665933577042 -502 118 -1.0207363672700727 -508 118 -.8205306545742617 -516 118 .9693727261695916 -522 118 -.12209202883867404 -530 118 -1.21364085200167 -533 118 -.06295295123202976 -543 118 -1.274044784712734 -555 118 -.43769739278322006 -557 118 .31301573776994185 -560 118 -.062303217873191805 -566 118 -.13668639485642545 -570 118 -.16417198021085522 -571 118 -2.0852195342108244 -581 118 1.9308517016942035 -588 118 -.610461717756716 -593 118 -.6385832128947929 -596 118 .8617063127610586 -606 118 1.1710479936540834 -626 118 -1.122428905529618 -655 118 -.6362176411649596 -660 118 -.06669504316478617 -667 118 -1.5084597842880416 -674 118 -1.1927731479702184 -703 118 -.3092564990969862 -704 118 1.7540501899059417 -708 118 .8613358477404245 -714 118 -1.213951506772616 -716 118 1.8079596652384158 -718 118 -.38548642787625387 -730 118 .27498649648862683 -742 118 -3.726921064822398 -744 118 -.03312783938897382 -762 118 .5881830601813051 -786 118 .5631621712338739 -818 118 -.259319698102585 -819 118 1.3532356533235386 -823 118 -.41540315690470236 -855 118 -1.3966119162148474 -870 118 -1.4784156768756895 -871 118 .46599230048797136 -874 118 -.839030230532512 -895 118 1.6605391321124836 -901 118 1.3564192468692113 -907 118 -.5773612455877468 -920 118 1.468567869299285 -952 118 1.081553157945509 -958 118 .3140419870101796 -963 118 -1.4725336880500783 -965 118 -1.534882167091486 -971 118 1.0478837803281345 -973 118 .31448469142097357 -979 118 .0074686586153893935 -990 118 .5975704611434748 -1 119 -.5072344961125024 -9 119 -.9887367424752422 -29 119 -1.2264543195437367 -41 119 1.229269782800223 -47 119 -.8772534678066295 -50 119 .15259709902424415 -54 119 .26234342706516756 -57 119 -.4742225133331441 -60 119 -1.1015725632637483 -81 119 .3666416640648963 -87 119 -1.35046243619234 -92 119 .46471809265966674 -103 119 .7702964250626564 -113 119 -1.1013754469296324 -133 119 .2872067546193826 -145 119 -.21619263691559115 -148 119 .8074287663991783 -149 119 .007893271974100443 -154 119 -.3445473715398775 -160 119 1.6553100541187356 -170 119 .30516281302221904 -177 119 -1.0669928926102468 -180 119 -.6368677913227557 -181 119 .3656981586323138 -183 119 .6223558905800937 -184 119 .6574921943613479 -185 119 .6442717624409197 -186 119 -1.2813467907318512 -188 119 .35247160804267796 -190 119 -.42788924083673463 -203 119 -.13214984580660036 -204 119 -.3016455445832299 -216 119 -.18532872083697127 -217 119 -1.0745911119604887 -220 119 -.003400469240687626 -238 119 -.22788733827209173 -239 119 .3099315523172172 -243 119 .7738283118931172 -249 119 -.5650600627508513 -250 119 -.6760499507378751 -271 119 .33227399571059585 -278 119 -.9322946072936984 -279 119 -.08816527693772944 -284 119 -.35036143535744213 -300 119 .9865519410625406 -323 119 .2535639725410497 -333 119 .24443431946736158 -335 119 .7441278472367197 -338 119 .5198421308501281 -339 119 -.8244870250013622 -354 119 .8260280770766267 -355 119 .740558147207203 -356 119 -1.1998087521133016 -365 119 1.026349718502766 -371 119 1.5319577157195725 -386 119 -.4157271540043681 -398 119 -.4049213201221517 -401 119 -.1419875792400755 -402 119 -.28014441701028553 -423 119 -.631112953389889 -435 119 -.17555715282981743 -454 119 .8237804514363073 -464 119 1.839049700740662 -472 119 .4025384252865256 -474 119 -.38636572801448815 -497 119 -1.078047481247362 -508 119 .43836123341266575 -529 119 -.5190789268369322 -533 119 -.226440839212973 -536 119 -.05115238695014081 -547 119 -.16433111872567382 -548 119 .08703405738461578 -575 119 -1.8283959645026884 -581 119 .6572649540353457 -584 119 .3487788893741982 -592 119 -.3923459360553458 -598 119 -.7210317036112683 -605 119 -.4468227258556874 -608 119 -.5775878988314607 -615 119 1.4419904225212845 -639 119 -.5675603799425277 -666 119 .3918514370141194 -672 119 -.3524157603896884 -683 119 -.5101947795309405 -687 119 .04214974765042681 -706 119 -1.691742288910068 -714 119 -.19320199616220768 -716 119 .6999310416218614 -720 119 .5297241305500209 -746 119 .42799637284360803 -749 119 -1.6007573804248239 -751 119 .8694653228898374 -758 119 -.3532242251591206 -762 119 -.5681427055329398 -790 119 .54755394435777 -811 119 -.574804326123709 -817 119 -.07600275911238862 -818 119 .6613837673801501 -842 119 .5842376815096988 -846 119 .49594680736811264 -861 119 .028635491857912698 -865 119 .6109058737242374 -875 119 .07225533210754367 -877 119 .7486221123360465 -881 119 -.9448645237514991 -882 119 .15850650182877923 -894 119 .13584353662556065 -905 119 -2.122024395441757 -919 119 -.11175354205518268 -931 119 1.3404791418049995 -934 119 1.077765057720292 -956 119 .5598018730798342 -967 119 1.020446832920356 -968 119 .8162748340791743 -972 119 .27026370777526154 -975 119 -.5536151732874776 -981 119 -.8318982804162237 -995 119 .2003533771808963 -997 119 -.345956816006992 -2 120 -.8020704574723619 -6 120 .4142857617653788 -23 120 .7015491015523538 -29 120 .21636260602213933 -35 120 .3113206672356903 -39 120 .22829650764548326 -46 120 -.07341469875167311 -56 120 .05870237781336041 -58 120 -.004730813616398287 -78 120 .40033762641968146 -107 120 .45205726467617857 -109 120 .3835513768697429 -138 120 .13292285992055355 -149 120 -.5960039396576218 -158 120 .5845477763936702 -172 120 -.5062562622159199 -175 120 .5291217921443528 -182 120 .40492078259242614 -183 120 .14937303743617553 -185 120 -.5644561337393612 -201 120 -.16955546941882532 -202 120 -.7164385460726663 -207 120 -.4967518633297768 -223 120 -.15544661057106343 -228 120 -.2117994613497569 -231 120 -.05313001089701587 -242 120 .7394392823661018 -243 120 -.5829655341728475 -262 120 .07588263117441536 -266 120 .5481690762959297 -278 120 .461970299394348 -285 120 -.19081818642104395 -288 120 -.15948796743071253 -293 120 -.3457017359158904 -304 120 .9664779257218832 -310 120 .00166764907003919 -316 120 -.18515447991623527 -329 120 -.4956430200160492 -343 120 .33671531679736333 -358 120 .21575408144343144 -363 120 .4728493752903907 -365 120 -.6258580153417248 -374 120 .3835688710144312 -387 120 -.8317432703407579 -390 120 .026613174276288634 -392 120 -.7449506454199013 -399 120 -.4115322672699088 -402 120 -.19397592641542521 -410 120 .18749523892458964 -414 120 .17244948388272818 -417 120 1.088292093639256 -462 120 -.21440910934106577 -470 120 -.31076042389905534 -486 120 -.6074245019896212 -520 120 .40259430840644883 -523 120 -.6654236128551969 -580 120 -.37792306738705184 -589 120 -.10653322437156448 -603 120 .8989945625311637 -608 120 .5361477310252085 -611 120 -.2833489093125063 -622 120 -.60430644287114 -642 120 .6516187409380838 -656 120 .36842274386563245 -670 120 -.07639773541238329 -679 120 .3380908309343822 -688 120 -.05676163498358529 -691 120 .3524285952090891 -694 120 -.9171924155524811 -698 120 -.1422928760507285 -701 120 .45291603019932214 -708 120 .3953366234806683 -728 120 -.7739052672503156 -742 120 .6548655234244143 -752 120 -.029764462680610976 -759 120 .004476260843082636 -765 120 .32133540380137626 -774 120 -.0734122911117096 -777 120 .33296414357978976 -802 120 .029558965393610886 -815 120 .13359602669505494 -825 120 .47682497708827926 -827 120 .8387175957434316 -838 120 -1.2046518350707487 -841 120 -.5982125267583375 -846 120 -.3486688821185962 -855 120 .6865556975158108 -858 120 -.1698199694156941 -865 120 -.1209175616370566 -877 120 -.2491318372584022 -934 120 -.5133477888664983 -944 120 -.5155488031618225 -945 120 -.8499572542259964 -947 120 .32143330544604537 -982 120 .3877244069934971 -10 121 1.5082751708055961 -13 121 -.2620779277418255 -14 121 .8805995577413155 -20 121 .6714377354973459 -56 121 -1.3514003763615787 -60 121 -.16354672625204603 -63 121 1.1477164576770582 -65 121 1.4175131115630468 -66 121 .47099452552096216 -74 121 1.3703847222789345 -75 121 -.24220526547521593 -86 121 1.2096737931678485 -128 121 .24232385987370786 -142 121 1.3735796768049087 -143 121 -1.1622249316223665 -160 121 -1.3162266871241095 -174 121 -.8460379128470567 -183 121 -.9738551657279927 -184 121 -.25284145248592205 -185 121 -.8872539716213949 -197 121 -.06660253245451192 -204 121 .10942746063062897 -220 121 -.2113309823917079 -236 121 -.5925555966053289 -238 121 -.04507545201749917 -242 121 1.7041465273672063 -248 121 .14400108915436916 -278 121 .4934702830448853 -283 121 .29464281029959905 -328 121 1.4458401004897463 -329 121 1.0489338961702317 -335 121 .20471656479026923 -336 121 .6315350173346354 -338 121 1.0057700627451958 -352 121 -1.0502263759397095 -357 121 -1.8782369088677082 -383 121 -.9761386809385018 -385 121 -1.3276762488073823 -395 121 -.8241084976208349 -409 121 1.0904383282577346 -423 121 .5325201916917852 -424 121 -1.750885351784279 -431 121 .40388242289048315 -462 121 1.352039797383453 -464 121 1.568737173089039 -484 121 -.4739137560860308 -492 121 .4906922370360391 -498 121 .536475928738851 -500 121 .05867478881037461 -516 121 -2.2989427759299312 -521 121 1.158794708074581 -539 121 1.5629930979075892 -558 121 .9807012402909808 -559 121 .6578870687863809 -570 121 .3769809168070589 -576 121 -.8029111519279729 -601 121 -.9799633243465512 -602 121 .39881188903573167 -618 121 -.49965992490438094 -623 121 .40457511810683744 -631 121 -.41131319980629977 -639 121 2.369000821893873 -658 121 -.3905102439291786 -679 121 -.9546834932771482 -703 121 .4521784449662437 -716 121 -1.6668487321748626 -722 121 -.6428539788633171 -739 121 -.1007815732610247 -740 121 -1.7989337213704109 -741 121 .5804253852851154 -745 121 -1.2937890705259658 -756 121 2.887433602562956 -764 121 -.06910967539720449 -773 121 -.6632225502693674 -779 121 -2.119892482845295 -797 121 -.852097656930649 -802 121 1.8378154685712533 -814 121 -.14753147969555408 -859 121 -.8999262894190659 -860 121 1.6630942776265523 -872 121 -1.4731305850748455 -876 121 -.5439773154681715 -880 121 .772895339162835 -913 121 .8306692953213621 -925 121 .4209101423305353 -944 121 -.7295660473110352 -962 121 .01049779256500677 -965 121 1.9144007243839143 -971 121 -1.1602904978648 -975 121 .4483175119978902 -985 121 -1.5639342078956981 -997 121 .1796758559536149 -8 122 .21340101282315455 -17 122 -.48675487989905053 -27 122 -.3266353953650642 -29 122 -.3653824290150284 -32 122 1.0950944568959187 -63 122 -.05598662388648522 -74 122 -2.7110648363863463 -100 122 -.6476867307689117 -108 122 .05145022597251059 -135 122 -.5476617071093945 -140 122 .2085143846314687 -145 122 -1.0426477595869397 -151 122 -.026162019278953414 -165 122 -.5058424634306248 -170 122 .8813730728724378 -195 122 -.5907761421483504 -234 122 -1.03282572344465 -248 122 .8374824842675412 -259 122 .1275847216266831 -264 122 -1.6805905313853666 -268 122 .2565833832148617 -279 122 .25483309157375345 -306 122 1.2504467712428802 -326 122 3.10268188642523 -334 122 -2.543308699676074 -377 122 -.6496585576669948 -388 122 -1.5477721811082588 -389 122 -.4104439163394858 -393 122 -.821289293056558 -394 122 -.8229183243999857 -397 122 -.13982985400353787 -418 122 -2.2850380102642376 -422 122 -1.290347236215053 -425 122 1.7562983740085383 -437 122 -.8814320804114701 -439 122 -.46744643216009385 -451 122 .6042249934470278 -452 122 .38648056581688384 -475 122 1.030483124255627 -483 122 .5807812887470153 -504 122 .8858550170684223 -510 122 1.4691770927155834 -536 122 -2.3185571184444544 -548 122 -.6075395380821909 -554 122 .34942285660073047 -559 122 .9414027220576393 -566 122 -1.3705861034155498 -583 122 -1.9614384278892774 -589 122 .634286549161396 -601 122 -.2947922106131537 -605 122 -.6590337793080063 -609 122 -.5589232211397538 -618 122 1.3404945286162893 -621 122 -1.338013669842784 -638 122 -.607672450928622 -644 122 .14826940602243815 -653 122 .9638160121106112 -657 122 -2.145618951816793 -681 122 .4592846068401032 -689 122 -.674118781176904 -694 122 1.9809293668220618 -705 122 1.1211866528477468 -726 122 -.7469259638630531 -735 122 .1412262706965403 -738 122 .323908091339581 -762 122 -.952952504439486 -773 122 -1.1029547844885192 -775 122 -.45580818222510805 -780 122 -1.0919551462467731 -782 122 -1.5507031915300586 -808 122 .4900413317777107 -826 122 .35237310976563396 -850 122 -.6583091243170233 -869 122 .056584108536295516 -883 122 -1.002219404304359 -884 122 .5172202688814614 -889 122 -.45424503704525265 -893 122 -1.292838219687127 -910 122 -.9991435181726241 -911 122 -.596152529055861 -917 122 -1.0533257532500413 -923 122 1.2871941219597711 -932 122 -.5309218457973897 -944 122 1.0116502761625987 -949 122 1.7692711383395 -964 122 1.1555209651648026 -979 122 .9388932816774284 -980 122 1.1060634795931552 -1000 122 1.0095535666506932 -4 123 -.24159479676807655 -5 123 -.4842031471026173 -7 123 1.2889707455294979 -11 123 1.1533595389542988 -16 123 -.22610120299406297 -25 123 -.884819110898553 -34 123 .34212249341482404 -39 123 1.092882064496244 -41 123 -.9010667332061926 -43 123 -.7583325494311387 -106 123 -.7757168064639263 -112 123 -1.9246818059817234 -123 123 -.29601256375721785 -128 123 1.3364092695062264 -172 123 .17103755158293849 -173 123 -.5924584401993561 -184 123 .8558119011988279 -186 123 -2.011389855229249 -199 123 .4550459701593643 -200 123 -1.2244469246360983 -205 123 -1.5504656031446826 -214 123 1.5688457740720203 -221 123 -.6969248401198738 -225 123 -2.6355571950272667 -253 123 -.0986037425902537 -257 123 .9063519352503424 -260 123 -.24347619229311154 -262 123 .2968890844625994 -263 123 .46978243830062993 -270 123 .5811986027496883 -278 123 .5517378529995982 -293 123 .3321285002816773 -315 123 -2.5002409577612528 -325 123 -.48677906170721297 -333 123 1.756070052136549 -356 123 -.8352055984107263 -358 123 -.576395707055097 -359 123 -3.306348111341949 -366 123 .4023206757971211 -382 123 .4543222990953466 -384 123 .7418707207478045 -387 123 -.5042606411273256 -399 123 -1.7665480790195767 -400 123 .6847880067286791 -405 123 .14034930612305563 -416 123 -.5977798536974088 -421 123 .3094611060928582 -426 123 1.2718958196862538 -430 123 .4533844381079557 -431 123 -.5409094114154828 -435 123 .0033153105642994216 -436 123 -2.181718596339153 -441 123 -2.1262307889478733 -446 123 -1.5436229555636678 -449 123 -.199884772194254 -453 123 -.09737062184351306 -463 123 -.34784803105804957 -467 123 1.7140000960141744 -475 123 -1.5401936253693955 -477 123 1.0248377508509758 -478 123 1.4145101309942851 -481 123 -1.7457092039439688 -482 123 .6954588011203824 -485 123 .7139434639753377 -487 123 1.0934844716929715 -498 123 -1.3109853033905332 -505 123 -2.238072683956621 -515 123 .14130984189942014 -520 123 .945306677723651 -527 123 1.6091479168566472 -529 123 .6340220948716855 -533 123 -.30792920129172935 -575 123 -.45417248372276126 -582 123 .42506151311617446 -610 123 1.7317622773474557 -613 123 -.5408310880274568 -631 123 1.235876358632292 -633 123 1.1186474503064208 -635 123 -1.2810695761999462 -655 123 1.4006372400598064 -665 123 1.1142089734428415 -674 123 1.8021965586761968 -687 123 -1.3485504333340281 -697 123 -.7747664412106605 -698 123 2.5144681163443527 -711 123 -.2576399072039487 -712 123 .12328183321750731 -718 123 1.802694512579417 -740 123 -1.090051107456235 -742 123 1.7065205663158631 -746 123 .14974291549775398 -753 123 1.123116649537969 -779 123 -1.5599746976017872 -808 123 .36481948918061935 -810 123 -1.0623809055556868 -814 123 1.9230953152153403 -838 123 -.7533265666748726 -850 123 1.6261992183290308 -853 123 -.574265832613855 -857 123 -1.1833935889276403 -873 123 1.3329706074911754 -874 123 1.2724343853022124 -878 123 -.29073858424923127 -881 123 -.3992940102371282 -904 123 -.4858836053462742 -916 123 .037798662786235615 -917 123 .6152789794229305 -930 123 -.6131595757728849 -947 123 .32981647895014293 -2 124 .1438106440257361 -3 124 3.6467889477933277 -11 124 1.1401747724102338 -20 124 -1.5504300219704001 -52 124 -.07433154035927232 -55 124 1.849765518114222 -65 124 2.8824696481415306 -79 124 -1.8994547334947893 -89 124 -1.1927280325169636 -91 124 -.8309544385262174 -102 124 1.6722330340546046 -105 124 .7114705894322998 -107 124 .0932835448174604 -118 124 -1.2684662780299494 -135 124 -1.0353924360906317 -136 124 1.522152849535572 -168 124 -.45200645621936764 -171 124 -2.2058676981108185 -208 124 1.1927995376323384 -219 124 -.20814268446146134 -238 124 -1.4182809514889203 -243 124 .33616615620463686 -245 124 .41255359483220105 -250 124 -.8911597574129465 -261 124 -.10374091122992676 -295 124 -1.7273004775471732 -312 124 -1.2668644957719566 -317 124 1.072767542642871 -333 124 -.696810486309668 -342 124 -1.0317524574720733 -343 124 -1.8809686945584043 -361 124 .28449670286898343 -371 124 -.34075378430989656 -403 124 .735198969733483 -422 124 .7258439200086297 -445 124 .24850113851739603 -458 124 2.5236756310827397 -474 124 .8553767204530136 -477 124 .2695748658439025 -478 124 3.3261576569411284 -505 124 2.5752652355301895 -512 124 -1.374332656283521 -525 124 -2.3287746887912926 -534 124 .6214592772700958 -536 124 -.5220695573789901 -537 124 .14836928561318424 -568 124 -.6444481712717914 -577 124 -.05436146263472491 -585 124 -.24312408313598569 -604 124 .433200278446509 -605 124 -.5318269848797769 -625 124 -.18258435529664827 -626 124 -.01810476461402153 -638 124 -.24062568625781053 -653 124 2.8893174211836197 -660 124 -1.5042394012745406 -661 124 -2.1722639669773782 -664 124 -1.613735114787354 -672 124 -.1296160822312949 -688 124 .03494009055151179 -692 124 -.8881742616495641 -695 124 1.2599578022876063 -701 124 3.4254722470178307 -702 124 -.9973107721541086 -710 124 .9075736240472208 -721 124 -.4361129713134893 -731 124 -.8740656627554336 -737 124 .7788267992083301 -740 124 -2.9786460779534663 -764 124 -.19479981905423782 -778 124 -.838402106971616 -779 124 .6234864626485873 -787 124 -.7305125530259162 -788 124 .49836410446722235 -813 124 -3.0033969396973337 -818 124 .22008672289109787 -823 124 .8558479136441705 -861 124 2.377386831809978 -866 124 -.7582505393204819 -886 124 .15795181040408202 -893 124 .18338129017101484 -901 124 -.3690980280750112 -902 124 .5338608259481256 -905 124 -.8882818997642838 -913 124 .8889626628463367 -931 124 -.3519309402491838 -932 124 -.2448992381614398 -984 124 1.4223021385292556 -992 124 -1.566820079205139 -6 125 -.3409494241135561 -15 125 -.3966915357657943 -16 125 .8761942125692743 -24 125 .2579640080237761 -33 125 .5194362326497909 -49 125 1.3106950460003217 -50 125 .5477326468260142 -54 125 .32088402487031464 -56 125 -.8229496257103313 -60 125 -.8313909072876734 -63 125 -.14613471267860242 -81 125 -.028147360616393724 -86 125 -2.2217980685971055 -90 125 -1.2485142976086938 -95 125 -1.8145659084727082 -109 125 -.577884850187002 -113 125 -2.6968737379582755 -116 125 3.0014020137906496 -122 125 .08783773143079922 -124 125 -.2788345955311802 -133 125 .23014213178759502 -135 125 .23652346169910865 -169 125 -.04124760792929476 -178 125 -1.1861349499605778 -184 125 -.4674917395795039 -201 125 -.9381446368316435 -215 125 2.168241049055208 -223 125 -1.503220555866437 -242 125 -.16530171645081543 -255 125 1.1445612299176897 -258 125 .8258847086375627 -263 125 .96999684916884 -270 125 -.825511967095016 -289 125 .518151815661132 -300 125 1.4594535173230392 -309 125 .2949521522243554 -322 125 .42090300535920294 -330 125 -.03769412139419562 -334 125 -.2552129553675356 -346 125 .06815371215261529 -362 125 -.9906510143621755 -388 125 .3738015739983207 -390 125 1.046709832887209 -396 125 -.5742314470156128 -406 125 .5741539019688304 -407 125 -1.0409802325451438 -412 125 -1.2265240322318702 -418 125 -.8705699697501061 -436 125 .8624170170721531 -448 125 -.08651335606282236 -449 125 -1.4859109427619968 -453 125 -2.4178306357866344 -460 125 .0950060540880987 -471 125 -.578544516095605 -473 125 1.9555239135936267 -481 125 .48200926280341766 -489 125 2.443980609379408 -495 125 1.6074611303170316 -497 125 -.8102406895122777 -516 125 .9689228142904595 -517 125 -.2505259587274479 -519 125 -.3876746179723673 -524 125 1.0547275498075177 -532 125 2.0807007211260853 -575 125 -.7307141965636258 -580 125 -.7398330019664829 -583 125 -1.2885225614010107 -620 125 -.9343271796153753 -627 125 2.1330115454633067 -634 125 -1.0666352550650324 -636 125 .25659791678978205 -644 125 -.5001037801203904 -651 125 1.9702513486637943 -663 125 .020836451798133537 -667 125 1.1062590797255978 -690 125 -2.287410680414811 -710 125 -1.045476235203498 -716 125 1.5315024319625583 -727 125 .21047504519695429 -734 125 -1.05714678847003 -747 125 .0820084702807441 -749 125 -.3358301385083022 -752 125 -.888477937813393 -755 125 1.373867329712083 -773 125 1.5053727576123064 -783 125 .6103071856222086 -786 125 2.059091382079005 -789 125 .423699279923991 -803 125 -.3109512365185234 -805 125 .019252156015322208 -811 125 -.8593636428570542 -824 125 1.6145002711278023 -830 125 1.3822811008407612 -838 125 1.836373512352693 -841 125 -.5050013834391599 -847 125 -.01238024766343912 -872 125 .5006006454927784 -874 125 -1.0735146083304694 -897 125 -.9321170755581212 -912 125 -1.25550976279635 -918 125 -1.710496309388882 -922 125 -.10518407625774692 -932 125 .4576534239346107 -940 125 -.7882915619234432 -975 125 -.784886463354577 -978 125 .5635455404107856 -8 126 .21444828180377845 -10 126 -.3584357468171489 -12 126 .5269582396661197 -20 126 .9673674202883352 -29 126 .7534072672235773 -34 126 1.7292127124844865 -41 126 -4.086352234213619 -50 126 -.17428101616157246 -60 126 1.6464152442842914 -61 126 .8273185520800125 -64 126 -1.6021517604164979 -73 126 .022181956654416815 -77 126 1.31698648824705 -114 126 .8427965052514034 -119 126 -.7196380994004631 -125 126 -1.0886793843505562 -144 126 -.3817350978921965 -147 126 -.15569920877404797 -150 126 .32845352879813483 -153 126 -1.3851309753342094 -157 126 -1.3124175904375344 -193 126 .4902783905635339 -216 126 .03810071183627871 -232 126 1.1945646187798853 -244 126 -2.3926251373896874 -253 126 .1719347418531808 -267 126 .8178311653190611 -278 126 1.2328347497708545 -282 126 1.0087910996031328 -285 126 -.5594977102920998 -291 126 -.3491408247517158 -300 126 -.309218406664182 -323 126 .6313257665976222 -326 126 .30262784698873035 -339 126 3.5544967516999697 -370 126 -.2460690951743934 -373 126 -2.294377763133634 -377 126 -1.3426402497118357 -382 126 .6311976246076403 -385 126 -.3803212792553352 -391 126 .4863987093644684 -394 126 -.9894613274100543 -408 126 -1.2419314407038127 -412 126 -.2653770234540528 -428 126 -.9381204748799667 -446 126 -.8041031537071706 -448 126 -.3893914824873606 -466 126 .6603588486638445 -478 126 1.0669783340887256 -493 126 -.2514413997538503 -495 126 .7579360223138132 -506 126 -.605087232691372 -536 126 -.18346405581597705 -539 126 .4980949595892963 -552 126 1.442975992916449 -572 126 -1.9094617107924676 -582 126 .7165114919136363 -587 126 -1.8779260233899997 -609 126 .5011370753134851 -614 126 -.31985786560432694 -623 126 -.8239537732947385 -626 126 .3259002876426965 -634 126 -.48955703402994455 -643 126 .021451976606167766 -667 126 -.5794919414509581 -671 126 .29048497411924323 -690 126 -.8692439853525804 -717 126 2.231001619974714 -723 126 -2.3827369831771654 -727 126 .8003668351563691 -734 126 -.8934128113855022 -745 126 -1.9138915721604504 -759 126 .6945215943301801 -764 126 -1.4584114260277408 -765 126 1.1244861197756324 -766 126 .1614622729274633 -771 126 1.413219387074973 -777 126 .8916596756024172 -792 126 .07400414968232026 -798 126 .5982685319660711 -819 126 1.423576586017035 -823 126 .56246163404499 -830 126 -.011293043382532134 -836 126 -.2978690312200055 -837 126 -.9530991008414409 -846 126 -1.1919252246453376 -864 126 -.505213952033743 -890 126 -.16566739383197238 -903 126 -.6531778370656991 -925 126 -2.12541139179734 -928 126 -2.7870198630761704 -932 126 .33523182742285185 -934 126 .8149009206462114 -944 126 .047322272116587016 -948 126 .48680059843570367 -953 126 -1.3364720692695553 -17 127 .04773783623995784 -35 127 -1.506533454853565 -36 127 .3882327439265699 -37 127 -.31542534285296586 -43 127 -1.9418804286645195 -55 127 .09854834593978408 -91 127 -.49551746111537953 -94 127 -1.0970344664288598 -96 127 -.5588770110870902 -101 127 .17468882214529352 -112 127 .6375788669649308 -124 127 -.16626053363573728 -145 127 -1.450774051329691 -158 127 -2.561187629094193 -160 127 .36766105254026726 -162 127 .5599257080954381 -182 127 -.645760931341139 -189 127 .7964700522866246 -190 127 1.024240866343679 -192 127 -.08344636424645957 -194 127 -1.1856366260295812 -206 127 .008471449329440314 -211 127 .6325630351378821 -216 127 1.5972805491542024 -226 127 .36099169771611445 -243 127 .2542139280996724 -247 127 -.7526019035685855 -253 127 -.7113639244971626 -262 127 -.04923415630932153 -277 127 -.6244254308962911 -281 127 -1.5561314291057784 -303 127 .7934799114388454 -311 127 -.6293194726102764 -316 127 -.20621409380279404 -317 127 1.7208221520399931 -324 127 2.391579653706621 -327 127 -.11584012376986405 -329 127 2.1234597291998227 -338 127 .6366838013904444 -363 127 -.2855571416791845 -370 127 -1.257658494049531 -375 127 .18437910490162074 -380 127 .08921683062578922 -389 127 -.07729192267513518 -393 127 -.341706716859756 -394 127 -.43603027482633977 -413 127 -1.5480726496960326 -429 127 2.8731641571398088 -431 127 -.44951885927664237 -447 127 -.04947695693857694 -473 127 -.059323407948867264 -480 127 -.13096021048871861 -481 127 1.494999571816844 -486 127 .17257733775580297 -488 127 -.3714468762704672 -502 127 -1.5623444010615057 -512 127 1.2725808102910892 -520 127 -.029778492790938922 -527 127 -2.271435643630297 -531 127 -.08984172856663536 -537 127 -.6202596935524064 -541 127 -.4317684669767191 -549 127 .6047361394743319 -560 127 -.17129907805201183 -578 127 .08977671513776084 -585 127 .8162061881984848 -602 127 -.9514659939902221 -603 127 -.49153381242994626 -608 127 -.037200776787371624 -616 127 -.25840990260216423 -618 127 -.6656718047805446 -620 127 -1.857743431322982 -628 127 .31357237657710063 -630 127 -.5892435101437682 -632 127 -.6130411930250123 -633 127 1.410703106769062 -640 127 -.3734608321643207 -648 127 -.17037993067604423 -653 127 2.799940431758756 -663 127 -.5785821835128339 -666 127 .038636833858192055 -669 127 1.3182286423387723 -670 127 -1.1683356524422983 -691 127 .05706565113506376 -693 127 1.2438827353390274 -695 127 .11209999867711928 -704 127 1.0662242194483167 -724 127 -.09854943036576966 -731 127 -.4842769532683631 -732 127 -2.8128270968752433 -740 127 -.19679972280089303 -744 127 1.6579150291390217 -748 127 -.6969029409162792 -769 127 .7151891662281383 -790 127 .39118295268062137 -791 127 -1.4198948130017055 -801 127 -.018992621720917285 -821 127 -.21649991471276775 -826 127 1.043578391151387 -857 127 .5237277288600043 -886 127 .9286612675444189 -906 127 -.4946796135848472 -908 127 .2819776596152862 -923 127 2.0173142904974073 -925 127 .4317148400926216 -928 127 1.7638992364924646 -930 127 .18505255057111922 -940 127 .21021188918212486 -959 127 -1.3405643873875517 -967 127 1.522634942998717 -981 127 -.17919127079233194 -983 127 .03133794849703385 -5 128 -1.881502177554729 -7 128 1.7450243627974957 -13 128 .13662676044811417 -41 128 -.5056049754107768 -82 128 1.0905217415619732 -95 128 -.03632989632643435 -108 128 1.6192603446173224 -110 128 -.9515593674961297 -119 128 -1.4799583478976959 -133 128 -.4078755602590162 -136 128 -1.7754210193783675 -137 128 -.6191681440479224 -151 128 -.012145586147832593 -156 128 1.496978225391144 -167 128 1.234963532504771 -172 128 -2.0137542155340857 -186 128 -1.005122790079198 -187 128 -2.688882276353202 -188 128 -1.9289019578965467 -190 128 -1.7508371974784476 -191 128 2.0725111574917614 -192 128 .5872098671877363 -215 128 -.9600132941908718 -222 128 -.7993507888596718 -238 128 .9597975659173117 -258 128 -.4405003307633327 -259 128 -.5519299862224963 -272 128 1.8203432439260299 -274 128 -.03733565534384091 -280 128 -.26345465881884844 -309 128 1.0146804434193097 -316 128 .9001910343547354 -332 128 .6900504332364166 -335 128 -.8879621376043334 -337 128 .5323227393811266 -347 128 -1.0461268358008964 -369 128 -.3129856529869968 -376 128 -.4891729678335336 -380 128 .8374202317448873 -393 128 1.9730860307983822 -403 128 -.6060564988889614 -433 128 .5685906437524699 -451 128 -1.3566095406164416 -455 128 1.978281222213979 -458 128 -1.6939843550899152 -462 128 -1.8580514167050304 -467 128 1.1115319235634882 -484 128 .2404424153225732 -489 128 -1.437526140693156 -491 128 1.3891977774292965 -527 128 .6711726928027189 -554 128 1.8382875145864137 -564 128 .4987220713638525 -571 128 .02798662818649636 -586 128 -.958284087533353 -600 128 -1.7644610614528176 -601 128 -.8388270194911777 -607 128 .12244543258265826 -608 128 -.11730673121085139 -615 128 -1.383147229243176 -629 128 1.1609714602909296 -635 128 2.085580679046205 -648 128 -.11085088200316318 -677 128 -.12051998347062098 -701 128 -2.657250870946423 -710 128 -1.1982149391040082 -712 128 -1.665258870603395 -716 128 2.9128376849571884 -756 128 -1.8264603039317926 -757 128 -.3770082148883913 -773 128 -.6451119965336636 -775 128 -.14864587595100703 -777 128 1.3338462104634365 -781 128 .30941256048873567 -790 128 -.15849036443828643 -796 128 1.1501131544748358 -797 128 2.740296628414054 -800 128 -.47068337065408333 -804 128 .07986159510046023 -808 128 -1.3381054407502262 -842 128 .5492948601699212 -860 128 -.8798688735665304 -872 128 1.2771552787811469 -874 128 2.3686675029748976 -883 128 -1.4096444353964417 -909 128 .18200049940614876 -937 128 -1.1271194395864281 -940 128 -.14983279713734352 -941 128 1.6890400512410313 -957 128 .9101169308985708 -959 128 2.0294356356556573 -967 128 -1.484673282185942 -976 128 1.2813246589514617 -979 128 -.19865306671340818 -996 128 -.1728865883296796 -13 129 -.1419076986630484 -22 129 -.9740108555325508 -45 129 .64552293677246 -53 129 .08853991788712454 -54 129 1.312569509096631 -66 129 1.8566461486262464 -75 129 -.1960661626236234 -92 129 .8996469033245755 -96 129 -.932560263794016 -118 129 -.9556511095606144 -122 129 .6718071065859289 -136 129 -1.3041044525803447 -143 129 1.344675722003877 -151 129 -.34144994167700243 -161 129 .6116217057488527 -174 129 -.8342757780358587 -180 129 -.5345189886405356 -185 129 -.2098904166391118 -203 129 -.8820337343056761 -211 129 .9504735027520658 -214 129 .42724959550473296 -234 129 1.0395048605627408 -251 129 .17580155491076177 -255 129 .021131563674762356 -272 129 -.8034765833645413 -290 129 .7204265432126897 -341 129 -.11849556445111352 -359 129 -1.3312179477028696 -363 129 .37704495577391106 -369 129 .4711354739688931 -379 129 -.14661413002842932 -386 129 .6133141429215557 -401 129 -.37575528862277396 -414 129 .20855686966312897 -423 129 .8107850794514188 -432 129 -.5930001355722749 -442 129 .4150077763561918 -459 129 .6890438842315859 -470 129 -.9431170898778575 -475 129 -.6368884997164267 -483 129 1.2266023276764362 -492 129 .9748303609490834 -545 129 -.43551112096683053 -562 129 -.8477364358225615 -576 129 -.08356017462693234 -581 129 -.1743500076265604 -598 129 -.2972683104259076 -611 129 -.34572639782187214 -618 129 -.606316364555282 -654 129 -.45406014500920017 -663 129 -.564715572739808 -678 129 .6838261353944862 -693 129 .3243747168754867 -701 129 .7789677579862445 -709 129 -.8254873034834201 -725 129 1.2127441513127082 -726 129 .6063524825788499 -749 129 -.7740316034552466 -754 129 -.6806719914036822 -756 129 -.10305825396191881 -762 129 .0316497036531871 -782 129 -.19621198740954224 -788 129 -.3721832779724306 -805 129 .7573934856241666 -807 129 -.019565131561270502 -814 129 .5935782044578745 -823 129 .3767601097859583 -826 129 .6374910765106192 -829 129 -.32726958473487877 -842 129 .6495238103964582 -852 129 -1.1060456456839698 -853 129 -1.037535809267434 -882 129 -.6769241053687733 -887 129 .3011353429649936 -892 129 .14700935758753508 -895 129 -1.0688580454395393 -912 129 2.7429236076116843 -933 129 -.3157324407250036 -959 129 -1.0535681057624964 -968 129 .5461181658496609 -972 129 .8561474343505394 -978 129 -.5752618483400879 -989 129 -.9290848847744229 -12 130 -.5067699194295364 -15 130 -1.2857247191214256 -22 130 .5683126956421428 -25 130 .819228954711492 -32 130 .6045901583547295 -40 130 1.0155730694577394 -49 130 -.8676666410349871 -57 130 1.2214644374538257 -65 130 .6004151559721432 -89 130 .7045845528874425 -107 130 1.5708083454284016 -108 130 .4896530225264917 -113 130 1.712290507794431 -118 130 -.4442546113673729 -122 130 -.10409389848444917 -140 130 .5463406643421291 -143 130 -1.0627741563871804 -145 130 -.633782672242426 -159 130 .21542626411015858 -186 130 -.494182408145505 -196 130 -1.3287158858163493 -201 130 .509227780240281 -205 130 -2.002772008724499 -211 130 .10295055557016397 -223 130 -.21376332476224233 -237 130 -.9451395694056096 -241 130 .45782553164903345 -255 130 .8120927069802373 -257 130 -.6413114040069948 -260 130 -1.2552326444761794 -263 130 -1.30615875358917 -264 130 -.4291030015892818 -269 130 -.586373745606477 -286 130 -.010398972567785103 -312 130 1.4898211441276057 -319 130 -.4948162790192123 -321 130 1.2386706289340448 -336 130 1.5466120385756212 -349 130 -3.0382952847313303 -353 130 .5557875596329357 -354 130 -.6261018377366043 -358 130 1.1767845948776798 -359 130 -.10640190184659457 -366 130 .47582432404495667 -380 130 .21750398650372776 -385 130 -.47552938000861583 -390 130 -.3877553762174458 -394 130 -1.9978109117539877 -395 130 -.259838040482857 -396 130 -.13605915762931944 -412 130 -.38868788411269845 -427 130 -.2269358402116652 -432 130 .8504871048129456 -470 130 .828763510067375 -488 130 -.23059199179437295 -498 130 1.056047439948897 -516 130 -.7597814291021472 -525 130 1.1644272791002512 -531 130 .7334864363817987 -574 130 -.07957011146332724 -581 130 -.8142013887156427 -583 130 1.4933466409331615 -590 130 .13007771110666497 -602 130 .5402378741561119 -619 130 -.9195605139143113 -627 130 -1.0574597739062384 -630 130 -.5454117640409968 -631 130 -.03289404298333057 -635 130 .022058377961607378 -652 130 .23000845985276738 -654 130 -2.0610365418558456 -663 130 -.21883313733868007 -665 130 2.003727057738941 -695 130 .3488731845262622 -701 130 -.9928936207061254 -703 130 -.05581817762106581 -717 130 .6425099380139498 -733 130 .2784625703330581 -738 130 -.6023548791621901 -748 130 .9347792507456935 -749 130 .022841214900826697 -751 130 .06956143936389449 -755 130 .3818768110873937 -757 130 -.36535391835957554 -760 130 -1.4396456195438336 -762 130 -.09655126568741934 -803 130 2.345604944921328 -804 130 1.1478123562627847 -805 130 .008626358693953833 -822 130 -1.0009466030191676 -824 130 -.5114963825852631 -830 130 -.11255976179180428 -849 130 .512843421826237 -851 130 -.9359211689944131 -855 130 1.0732876860396898 -870 130 .7066871845660979 -879 130 .9971032517562005 -893 130 .7777013226184981 -897 130 .6914524131626442 -898 130 1.4249296170222214 -902 130 -.3965457005833387 -909 130 .17401192656863798 -911 130 .3460606323997043 -914 130 1.3436883911963733 -930 130 -.6056517499480147 -935 130 -.4321323386034191 -948 130 -.3287956265442464 -967 130 1.686224183550367 -982 130 -.05454522365421205 -995 130 -.4554478261177266 -1 131 -.21847349508504568 -27 131 .22118830575275045 -36 131 -.06010566140418151 -39 131 -.7058230306740942 -41 131 -1.0832832799600436 -72 131 .5912529423717068 -86 131 .14088119242522906 -100 131 -.49294222866560056 -116 131 .6243635149428298 -121 131 2.2128436295688534 -136 131 -1.477281699263987 -155 131 1.0089787263115062 -159 131 -.5449426246667115 -166 131 1.9349216866189778 -170 131 -.052216450765381506 -174 131 .39179077717323657 -175 131 3.127274844712076 -183 131 -.5283630876420994 -184 131 -.5564807438673094 -187 131 -1.7553869056726417 -191 131 2.065454459479254 -207 131 -2.321425952622359 -215 131 -.8472741309402041 -218 131 -.3976922092123656 -219 131 1.548751330905833 -225 131 .3670131137209523 -248 131 -1.0083451717309213 -251 131 -1.3416857077314643 -254 131 -.9518789954894022 -265 131 .3545342539153608 -266 131 -.9322868517580762 -286 131 -.8512002129174085 -295 131 .09616385089742674 -297 131 .08832170072682576 -299 131 -.5457892532661108 -308 131 .7499391850033167 -322 131 2.0881728082692264 -346 131 .38926859763572785 -355 131 -.736731732299868 -400 131 -1.0745732159960446 -410 131 -.05868373957395559 -427 131 .6472580720287789 -437 131 -.7357687304839136 -461 131 -2.171634893166457 -472 131 -.31648597596692135 -482 131 1.4619717985664469 -484 131 1.4571280016676624 -487 131 -1.6045797542854892 -489 131 -.8019217921088402 -490 131 .6580802712896768 -491 131 .8553687900805815 -492 131 .5729092183502739 -497 131 -.8995698294477306 -505 131 1.1704422262094285 -511 131 -1.0264665801566053 -524 131 -.2667165457296362 -529 131 .579808742742496 -564 131 -.6590052705338976 -567 131 .5781698097836717 -572 131 -.9942184312623766 -579 131 -.5637992416185508 -590 131 .1711180908058551 -599 131 -3.1909911110416482 -604 131 -.8174817955348052 -606 131 2.1795089396866385 -609 131 -.14071547094568596 -613 131 .09378332498056413 -630 131 -.17790612110650758 -645 131 .2261334917542448 -662 131 -.5332054858789935 -693 131 -.7517168485455533 -697 131 -.19036025957849534 -699 131 .24689221847715753 -705 131 -.05885617780961887 -727 131 -.3362591991797765 -767 131 2.0955995217015153 -772 131 -2.099438804973615 -781 131 .7396313320327079 -782 131 1.943185803945982 -793 131 1.1373456469443748 -794 131 2.781609029875821 -812 131 1.226602545741834 -816 131 -1.967711559305621 -827 131 -1.1675311905180352 -844 131 1.7109387968872296 -852 131 2.4319501349483668 -864 131 .26116199281946645 -885 131 1.1468964171141407 -889 131 .08551385699586161 -900 131 .34851677120637997 -914 131 -1.5024577954351779 -927 131 .6678904380429177 -936 131 2.4430625698168704 -940 131 -.0718334762710358 -943 131 -.10795246217476817 -976 131 1.4131496566422945 -978 131 -2.1952785674210142 -997 131 .6389686436860014 -2 132 .8500987213355954 -33 132 -.25012468683431816 -39 132 .8315007916867799 -50 132 .6471349072171139 -83 132 .4752434065717682 -86 132 1.081246163029704 -93 132 .6725068770316855 -95 132 .8275874312836184 -109 132 .35579431275589274 -122 132 -.4718526893881885 -125 132 -.828659972897636 -129 132 -1.7855608067118989 -130 132 -.5647004902159284 -153 132 1.231279674392338 -162 132 .8650030933903913 -169 132 .7718333612451381 -188 132 1.4869059861251095 -192 132 1.2948602850179178 -200 132 .5557258918125105 -201 132 .9405298515019584 -203 132 -.9443968179389386 -206 132 .7698210641747288 -209 132 1.925476273938467 -215 132 -.5318568402486259 -217 132 -.924273123464622 -228 132 -.4756365521109382 -229 132 .1597501692747632 -238 132 .7636975332044261 -240 132 -2.7922987643433848 -248 132 -1.7005296345080705 -270 132 2.3836017626847292 -282 132 .8831448813799199 -285 132 1.3914493824187235 -286 132 .5671414684196682 -288 132 -.923214587309566 -293 132 -.9530621760845248 -299 132 .5759181090648756 -305 132 -.47654875232086147 -313 132 -.5622347273764906 -319 132 .8154948262733596 -326 132 -1.519160795721561 -330 132 -.1153960728617007 -333 132 .220325689026902 -336 132 .9009953828540347 -344 132 -.8604721595105164 -375 132 -.7023794939779147 -378 132 .5751722265784086 -401 132 .46370093930779077 -405 132 -.3187426792634776 -410 132 .38267943627411016 -428 132 -.7647559549457245 -440 132 .7747606192845945 -476 132 .050874215616794324 -488 132 .22600218000581807 -491 132 -.3797659374168023 -520 132 .08125387181301513 -523 132 -.3460635465516523 -536 132 -.6523732454944826 -545 132 .29654750917580136 -557 132 1.6276296184725603 -563 132 -.20588833377143714 -569 132 .553272136592989 -572 132 .4529580351594902 -586 132 .8675665429988195 -594 132 -.5307865072234748 -595 132 .19247101001919348 -606 132 1.161562979894227 -608 132 1.6758233147110455 -629 132 1.0215581111842749 -632 132 .4862837554102107 -649 132 -.2246988089570907 -662 132 -.596905763879777 -670 132 .7565043477867341 -677 132 .2763599930219077 -703 132 -1.3324699860083045 -715 132 -.03038760964249662 -735 132 .4743849637661606 -773 132 -1.2787624101013304 -777 132 .4348425402083669 -814 132 .3949064515469844 -834 132 .6862671778925414 -836 132 .5791815365661088 -841 132 .18877061066936848 -860 132 -.606342810381069 -903 132 .5819577354795956 -913 132 -.6174479746248316 -925 132 .32350613161027436 -930 132 -.6668509480290716 -933 132 -.34324070839610216 -939 132 -.2060464057147746 -946 132 -.09733721925087876 -947 132 .7316061711443986 -956 132 -.012109934170630082 -958 132 -.692169220756417 -968 132 -.5714095662296573 -998 132 1.655795068591459 -5 133 .40014654350122153 -7 133 1.0317415593653592 -14 133 -.6317064404017017 -15 133 .3134166682970636 -29 133 -.03372952380648526 -33 133 .0166831477313822 -40 133 .1572153184696367 -54 133 .023722626818952444 -57 133 -.3050995841667287 -61 133 .4043963972315706 -63 133 1.5856051613244433 -67 133 1.0616904670363436 -68 133 .6792091143082882 -72 133 .643033911039559 -86 133 1.5304349515381968 -92 133 -.5037361137680372 -115 133 .8003460824286422 -144 133 .08544924892163601 -153 133 -1.6432386127635454 -155 133 -.5190657335687143 -158 133 1.2735434462032211 -177 133 -.6866553475994537 -181 133 .14885126959304001 -202 133 .2338756613931863 -210 133 .11435813529654162 -220 133 -2.2077222669643044 -256 133 -1.5819316313247729 -260 133 .2657102481228766 -270 133 .6648226801961484 -274 133 1.3312947176739207 -277 133 -1.1318838491169632 -281 133 1.4364060020058966 -290 133 -.09023671691316876 -298 133 -.00854252558395599 -312 133 .9704650153329217 -318 133 2.253106840190022 -334 133 .1963400842076326 -338 133 .2542529647187937 -344 133 -.04728913224941064 -346 133 1.0756062962742299 -348 133 .9187510680909292 -356 133 -.15061816245828466 -374 133 -2.781498132983457 -377 133 -1.4618987707861524 -389 133 .6124674793965929 -396 133 .5613908833871777 -412 133 .4743857711658263 -418 133 1.4662268299038557 -420 133 .22164570133831663 -426 133 .8874956160972496 -436 133 -1.3318976104239926 -438 133 .5524747006162898 -451 133 -1.643340403686945 -454 133 -.01476323463804928 -455 133 .744550550125064 -461 133 .9376682383663607 -473 133 .4491581144145265 -480 133 .5117804426689254 -510 133 1.6835578801369784 -514 133 -.3029757896180073 -517 133 -.007502540049473205 -541 133 -1.1252549699312109 -545 133 -.3532953047267616 -552 133 .7728711901789778 -567 133 -.22724192989160685 -574 133 .059226510441354775 -610 133 -.42364026998551274 -622 133 .9357387283744503 -630 133 .9807486402261352 -640 133 -.6623475731629309 -665 133 1.0681054432538661 -671 133 .8267625718183351 -687 133 -.6825136996081059 -698 133 1.8708032211159447 -703 133 .7492673943795755 -709 133 -.6619018926612822 -721 133 -.5050448588732888 -723 133 -.8264121635188111 -726 133 -1.0322280505075456 -733 133 1.6356111695437627 -740 133 .9233484630078261 -750 133 -.48798156122132863 -761 133 -.12934309708292108 -762 133 1.1939276671461234 -772 133 1.6793546471247205 -795 133 -.5561247666975946 -820 133 .0405626220711985 -827 133 2.0057090972624367 -832 133 .03824198616974536 -833 133 -.044088828207674916 -837 133 -1.3014599874738373 -839 133 -.5198257913380475 -847 133 -1.4875288936499167 -849 133 -.10790832118106958 -868 133 -1.8335628110474507 -871 133 .3596347578912967 -883 133 .45961329858253763 -884 133 .5911139111713941 -891 133 -1.0452308877754837 -895 133 -.0812013507337341 -915 133 .16054852559105115 -944 133 .14214676556981204 -957 133 -1.0666471853264072 -969 133 1.6413570047028185 -981 133 1.7725268025097602 -1000 133 -1.870431430744833 -10 134 1.8612522715814483 -12 134 .004508048017895335 -15 134 -.18539781874121872 -18 134 1.2512964779614681 -35 134 -.10917852057829544 -36 134 -.09024864388348143 -37 134 1.0576420211277926 -48 134 -1.703967328708308 -51 134 .33535312131913353 -73 134 -1.508724510571653 -80 134 1.5529559358948744 -89 134 .7472346127784503 -119 134 -.4103255737945239 -123 134 .06970541764864308 -142 134 -.022719151483589384 -147 134 -.4344198557485459 -168 134 1.0672723466754876 -170 134 .7284511269036149 -182 134 -.2094471270932369 -185 134 -.18352659062607304 -197 134 -.15050875560494575 -212 134 -1.5244362344448525 -218 134 .8320579674193503 -221 134 -.9995373647782078 -223 134 .25256878554528595 -231 134 -1.2774108704725349 -232 134 .8994081922691826 -233 134 -1.5595490819989528 -235 134 .993044886457525 -243 134 -.6746843169492762 -244 134 -.09330330986808033 -264 134 .13814797609681823 -267 134 -.13326261896166502 -313 134 -1.7749134841437773 -314 134 .10778628477685386 -318 134 -.21646752234266636 -319 134 .2602793760260145 -333 134 -.008158166698891064 -335 134 -.7133922891297653 -336 134 1.3062331562311955 -379 134 -.0536796555185214 -389 134 .42630752868226046 -392 134 .036564885706576025 -394 134 -2.072475142065153 -400 134 -.6366686718414957 -406 134 .4512089298912342 -408 134 -.4915911139549567 -419 134 -.1002957173726332 -431 134 -.23821857488892714 -437 134 .1640627726034855 -466 134 -.8202189061444084 -512 134 -.4225283717988846 -513 134 -.1549846555067896 -519 134 -.7025858451012426 -554 134 .6451656105388928 -570 134 -1.5419518987185696 -572 134 .6415888809875964 -582 134 .3829247140328851 -585 134 .25965466555079464 -597 134 -.5953370468783122 -605 134 1.6102991778228493 -612 134 .2734014801994946 -617 134 1.3481450493268055 -620 134 -1.0878269197688275 -631 134 1.0623792459348371 -635 134 .7388423001879368 -653 134 .29167713415131746 -670 134 .24824744431402862 -724 134 -.24037902569906022 -739 134 .4080891559979041 -742 134 1.706740476422308 -745 134 .7178410385373095 -761 134 -.3240702142656169 -769 134 -.22922982518338778 -782 134 .3944886767667857 -793 134 1.2464175582862824 -795 134 -1.0303072657279966 -796 134 .6637042951718712 -803 134 2.036357175103543 -816 134 .43002884770816396 -840 134 -.8694759127857866 -868 134 .559616183960299 -870 134 .7256414335326778 -888 134 -.27255288946089246 -898 134 1.2061487542887257 -900 134 -.1516608310110827 -901 134 -.1734333131509115 -904 134 -1.0406938375131396 -910 134 .3674755494889552 -934 134 -.6627953244237372 -976 134 -.22836919698855807 -980 134 .6661497093087776 -987 134 -.8993390632617716 -990 134 1.3321195877395027 -992 134 -1.3196079255569857 -999 134 -1.5194648948507368 -6 135 -.1740822052096646 -10 135 -.5436025056663899 -15 135 -.5895292639295829 -18 135 -.032930514177920395 -27 135 .5143852438963686 -41 135 .5251836125605287 -51 135 -.1770653194446703 -60 135 -.437402722571001 -63 135 -.017634317747018582 -69 135 -.2024702342055383 -80 135 -1.213545230507743 -106 135 .466116599949049 -110 135 -.30888209906478825 -127 135 -.520072556750951 -146 135 -.3176478566020749 -158 135 -.05940635786735819 -167 135 -.07529024011508681 -173 135 -.17774086020056767 -191 135 -.6334451154557699 -210 135 .31303911281961794 -226 135 .740341798094954 -233 135 .680633605933384 -241 135 -.543474131602985 -249 135 .8496406991845025 -263 135 .9419927475088035 -267 135 -.8114902582716015 -272 135 .3700945519229369 -278 135 -.2695161399261525 -302 135 -1.146832871591891 -321 135 .21526503109353373 -324 135 .836091030358388 -330 135 .8350920218397234 -353 135 .0978182317582284 -359 135 1.0765068349680067 -398 135 -.6301695897725095 -404 135 .901220689688802 -409 135 .43260619798351196 -430 135 .12611146125741385 -432 135 -.6528934420397916 -434 135 -.07248056179866885 -438 135 .0933761488157738 -441 135 -.7543963183123792 -455 135 -.5072801472681742 -461 135 .9153546709791711 -469 135 .35842736999792835 -476 135 .05393991696777467 -495 135 -.19372506165320247 -514 135 .1321073817619283 -519 135 .9466277311208461 -527 135 -.34526601887068376 -528 135 -.34853772310957015 -537 135 .2255157187612326 -545 135 .05897872086945996 -564 135 .3487972231544 -568 135 .34758502394118146 -574 135 .2872745156649777 -594 135 .41969411909086635 -603 135 .2159176550798136 -609 135 -1.0051474597818362 -610 135 -.46885366299715087 -619 135 -.24413746067397696 -628 135 -.030443339280344296 -630 135 -.33881612615405443 -654 135 .2747574422280076 -664 135 -.3482854594439788 -678 135 .18347114277773474 -679 135 .18417731836979134 -684 135 .5213346260995294 -694 135 1.1939553625233763 -697 135 1.0296189502151154 -702 135 .37431813761868377 -707 135 .40819349533594873 -711 135 -.3767948682347097 -724 135 -.11175901656711135 -732 135 -.1388035976947936 -734 135 .41637429143080085 -737 135 .15484086659590598 -756 135 .46284985984606375 -758 135 .3984444242357695 -776 135 .16797334824077792 -801 135 .5807540408223105 -840 135 .5425252045203294 -842 135 -.4894071662869378 -843 135 .7403435333540278 -871 135 -.20953699061577782 -876 135 .6501604120684213 -879 135 -1.1759309798067916 -883 135 -.3459443602286414 -887 135 .49345594966848233 -913 135 -.11253983408597462 -917 135 -.49072591173075747 -921 135 1.0948368425965072 -925 135 -.3640519585298121 -936 135 .3444554916197286 -940 135 .3705457652101679 -954 135 -.42614863889022075 -960 135 -.12462260385154263 -964 135 .6197642197807868 -968 135 -.12302325092329919 -970 135 .2659635541062506 -972 135 -.5019106395570944 -980 135 .6144787238394601 -984 135 -.4302193958580383 -988 135 1.686237495078082 -990 135 .17472790307132868 -992 135 .1783523449432881 -998 135 -.7242573324835904 -2 136 -.35282989463079545 -4 136 -1.3008882201379153 -18 136 -2.3892496779985253 -49 136 -1.0488948475834259 -58 136 1.629576600366728 -74 136 -.8352902490674284 -75 136 -2.266945422974935 -86 136 -1.3451799124788024 -87 136 .6789108795349729 -96 136 -3.746989611747309 -113 136 -2.933952292036078 -118 136 -.870712444827628 -120 136 -1.7105350374365254 -121 136 -1.6392704047367073 -134 136 .6463353820361302 -148 136 2.079069177212088 -156 136 -.07222432213759239 -160 136 .16528121709906665 -190 136 -.8021766636054553 -203 136 -1.3646411527644673 -213 136 .003820988769981701 -239 136 .7281172586267213 -259 136 -1.6162186179450324 -263 136 1.6133550306958981 -271 136 3.0218392410840744 -272 136 -1.1750923347281284 -273 136 -.13906204087736418 -279 136 -1.7940150488451714 -296 136 .5703406657661166 -301 136 -1.2697300111840932 -304 136 .47210597375385843 -306 136 .2136416405772239 -308 136 .18795290610756119 -313 136 .9661802841355126 -330 136 -2.65191540283388 -333 136 3.0578390421490425 -337 136 -2.254178753139682 -364 136 -.9401008107979123 -383 136 .20133517504771697 -395 136 1.7645928377263103 -401 136 -1.867357472603807 -405 136 -.3022243542743715 -419 136 -1.7907203588703782 -427 136 -1.0501820236461952 -429 136 -2.072195741524676 -436 136 -2.249108038444785 -441 136 -1.1580822912614233 -460 136 .8935887653216757 -480 136 -.5057406524666349 -482 136 .8302795058076057 -491 136 -.8502479722541001 -510 136 1.4840424267887042 -514 136 -.7065750042590653 -516 136 -2.345292156483478 -519 136 -1.2262622042963838 -525 136 -.6446217614782908 -544 136 -3.4598830058581043 -562 136 1.0995003979286724 -563 136 .9887184371739368 -568 136 -4.333777687999061 -581 136 -.5663908226203431 -593 136 -2.250543168324528 -613 136 -.5318335967380878 -624 136 -.3427820927761017 -628 136 -1.0740584143450012 -630 136 1.801665795330304 -632 136 1.0405651948378853 -666 136 -.47396749931633325 -672 136 .36703810752554283 -675 136 -2.802609748257179 -680 136 -.16222925677783298 -681 136 -2.8349750834953586 -709 136 -1.4510034923620554 -711 136 .606332045952332 -728 136 .026993782151768016 -733 136 -.17903348874149944 -738 136 .4659040698867107 -756 136 -.42104085465303087 -781 136 -.377521417847161 -784 136 2.3160090671510307 -785 136 .5929632966865873 -787 136 -.6539533658622239 -803 136 .3238442380097317 -808 136 3.6864275636931265 -836 136 .10638446433473478 -849 136 -.6240212747906945 -864 136 .6597952368906309 -868 136 .14424047543062077 -869 136 1.0757846476470365 -886 136 1.3081453294590304 -887 136 .06991178739907457 -891 136 -1.760832204605775 -907 136 1.3117671300200728 -937 136 .3218562619722306 -943 136 -1.2984652680712905 -945 136 1.6096650156103902 -954 136 -.7169321187923013 -959 136 -.670195759379657 -969 136 2.2592200624919165 -977 136 -1.307158230461975 -979 136 -.08244412100746606 -1 137 .28247666507599 -5 137 .1512683935658408 -27 137 -.9110410523090148 -31 137 1.4237975463854924 -32 137 -.01449930932554912 -42 137 .583147320964518 -47 137 -.73963872513386 -50 137 .6900290872720005 -64 137 -.9109978584433298 -66 137 -.9361146396364399 -83 137 -.7776811646472099 -98 137 .11624481958127195 -113 137 1.9253668416494036 -132 137 .8781006910543999 -143 137 -.38747072618958145 -146 137 .6761303946393797 -166 137 .3355069921708059 -169 137 1.148289086812361 -176 137 .1305066487316992 -202 137 .8658964893589579 -204 137 -1.2384901913508108 -206 137 -.5807840012586785 -207 137 -.034833213901030426 -209 137 1.0685580870596132 -217 137 -.6708668139436555 -221 137 -.4624061873739769 -222 137 .23977197543472367 -224 137 -.14818525127089535 -225 137 -.4546043280923808 -235 137 .9730862970262539 -253 137 .6197630342621127 -267 137 -.3324720028673097 -278 137 -.1777864446112184 -286 137 1.4829613361443943 -303 137 -.14748203320076447 -334 137 -1.353497571567728 -376 137 -1.4575316494205681 -380 137 -.695295498240303 -384 137 -.4279664212868907 -397 137 .048387869643739846 -416 137 -.8810890141579979 -441 137 -.8372001470838298 -454 137 .40615222651643246 -476 137 .708048545972441 -493 137 1.1925540017897398 -506 137 .9508383122900813 -511 137 .8962297525394874 -515 137 -.05587952577488753 -525 137 1.3907020852533896 -531 137 -.18904595569763466 -541 137 -1.2338707200798675 -550 137 -.10649374084711723 -553 137 .3875514056613999 -562 137 .45770314142189994 -573 137 .49745713934003644 -575 137 2.538308458294465 -579 137 -.5269002797246345 -582 137 1.0808971472171132 -589 137 .5536036058757554 -627 137 -1.005520467928985 -638 137 .8783706368407376 -665 137 -.015267403056502662 -666 137 -.5868123261277867 -669 137 -.05916579545200712 -670 137 .5874863229565305 -671 137 .9835469775717505 -675 137 1.7173697488340998 -683 137 .043817420908002114 -689 137 1.1775245701852606 -711 137 1.3354287248288232 -715 137 -.7201102813710991 -717 137 .8945888532881016 -726 137 -2.075871398537674 -733 137 1.0644183680393227 -736 137 -1.1417003147187192 -741 137 .34109853002881485 -754 137 -.8873383980044535 -769 137 -.16273101953695157 -774 137 .2836170748480642 -820 137 -.25894800220930875 -841 137 -.4829423622185619 -884 137 .24300906090943147 -890 137 .43248757155520234 -897 137 1.3694795340776018 -900 137 -.15568357365617874 -909 137 -.1779273452616238 -915 137 -.03820077482091358 -917 137 -.1277212900417257 -922 137 -.9058333198065573 -927 137 2.1627557157713233 -942 137 .4009920262514333 -957 137 -.950471844487219 -963 137 -.9942375974554467 -972 137 .6428171161218806 -980 137 1.671154616957231 -990 137 1.791371644423116 -995 137 -1.4122877394513786 -996 137 -.30726913313222554 -7 138 -1.8069457096375354 -22 138 .599491814218691 -32 138 .999898903977138 -37 138 .24613493204318804 -49 138 .48192688965619995 -55 138 -2.073910751145062 -64 138 .454490567951223 -94 138 .5063471411155902 -99 138 .7405880238355966 -102 138 -.2968878324638351 -105 138 .5971407519504108 -108 138 .2664097290760159 -119 138 -1.3790448496621084 -142 138 -1.0530158551805324 -144 138 -.8970840994714263 -151 138 -.17262821879725146 -163 138 .18658515598083347 -172 138 .6297493511951722 -182 138 .3150666472583789 -207 138 .4669615113773149 -217 138 -.4681580069876308 -231 138 -.6345051965429938 -235 138 -1.2866087476486108 -241 138 .5114497073797869 -244 138 -.48309842806636216 -259 138 -.002346070104901305 -264 138 -1.7136330368039512 -275 138 -.8407530859094734 -284 138 .24852479523839263 -290 138 .24697246786668925 -317 138 1.2618371967158337 -323 138 .11789823146183603 -335 138 .6726336969151587 -362 138 -.06525258615062993 -373 138 1.8040556484394465 -390 138 -1.4260797191499894 -392 138 1.472060063615969 -394 138 -.7070356929627953 -397 138 -.15598798322670998 -409 138 2.1688281161336986 -418 138 -1.9551806017857811 -421 138 1.0507581954082292 -448 138 -.8049531380487361 -472 138 -.8007541208868868 -475 138 .2506473939035967 -476 138 .1240491069681883 -478 138 .4595307743431178 -496 138 -.6784910065037765 -502 138 -.989923190739566 -503 138 1.1154774366805027 -508 138 .1700518530641496 -516 138 -1.1904963383336518 -522 138 .8582430189754721 -526 138 .8814573825351394 -532 138 .03895031253656399 -544 138 .660040671294099 -550 138 -1.630499478675621 -555 138 .5038505069423846 -566 138 -1.7832392199985965 -578 138 .6058518999039824 -586 138 .1143856334806204 -589 138 -.20037161504784498 -605 138 -.31764975995358236 -610 138 .631451487504871 -622 138 2.2313743313813723 -623 138 .11586944505067878 -638 138 .37166392821116856 -643 138 -.7476111956170088 -672 138 -.3387581758332481 -679 138 -1.3371626476688205 -680 138 -.9989918715417537 -698 138 .7111495668965574 -699 138 .0457280124507124 -706 138 -.2728695962843462 -716 138 -.19857016705285832 -727 138 2.0012569379121947 -739 138 -.8102129922458103 -744 138 .10220033232301287 -748 138 -1.4281765329379728 -753 138 .041663526920169974 -755 138 -.2783366909354921 -757 138 -.4613216850719878 -771 138 .48638684699503365 -780 138 .12978903137045608 -784 138 .5246164111618647 -787 138 -.0935846888846591 -799 138 .5902257431288396 -803 138 -1.11964176957092 -805 138 .6604987502340786 -813 138 -.8728873904138519 -826 138 -.529562267575476 -838 138 1.687379415439552 -844 138 .1468430815440459 -852 138 .1890035112603573 -857 138 -2.4983429302197195 -878 138 -1.425257407929229 -881 138 -1.1817390868785085 -890 138 -.5349740112524445 -902 138 .1766204173774214 -908 138 -.12682977894143183 -912 138 -1.0819290234344074 -914 138 -.4276756885890141 -922 138 .08658551509466285 -931 138 .708471930952681 -938 138 -.11900540030526392 -952 138 .943124846440752 -960 138 -.12489870831656742 -962 138 -.09623069044763059 -987 138 -.06257455608293175 -9 139 -.16947076588645346 -27 139 -2.7741583237087846 -30 139 -.5804645385580609 -51 139 .011869375644974006 -62 139 .18708305662559951 -72 139 -.2821622397629503 -75 139 2.129484871160291 -77 139 -.9682370495469681 -90 139 .6210057290468776 -115 139 -.029055230469180047 -135 139 -.9608718357708614 -141 139 -.2972922318120121 -172 139 .8019919141585656 -180 139 -.5807783094675545 -201 139 -.23279295204268047 -202 139 -.11818900256897474 -206 139 -.8785567474399434 -221 139 -2.3871400844592916 -246 139 -.6441170283694192 -252 139 -1.119433311151166 -254 139 1.2304390057164853 -265 139 -3.187763069181238 -288 139 .11610193814847927 -293 139 .8369287332969435 -296 139 -.5234576267419323 -301 139 -2.9864946391467693 -303 139 .5486750017069005 -328 139 1.3142326827348538 -335 139 1.4355636601029147 -336 139 -1.041956276696248 -360 139 -3.9154113905149677 -365 139 .10360627978020356 -368 139 1.3961764119393025 -371 139 .05690100998004071 -378 139 -2.4257593143440324 -389 139 .9135216360174712 -405 139 .10448926809759046 -409 139 1.8062673665012663 -429 139 2.070214709392373 -430 139 1.377477360402715 -446 139 .9360661985235067 -448 139 -1.8931847259323502 -451 139 -.33472090010794786 -466 139 -1.5466326877643342 -469 139 -.7606171649954933 -490 139 .19918274800189903 -500 139 -1.97929901852581 -510 139 -.88758711811264 -513 139 2.2482127868054507 -519 139 -.7770414712837074 -521 139 1.023107730686009 -526 139 .8609578617660225 -534 139 -2.3417153287474517 -535 139 -.38595731998833693 -536 139 -.15228930913110322 -548 139 -.42329053027367997 -556 139 -1.11248847454833 -574 139 -.449555150467463 -581 139 1.313669766435756 -583 139 -.29251200037454195 -586 139 -.42416008087703383 -595 139 1.4403226664038553 -610 139 1.9945579176697112 -627 139 -.040796136736219735 -629 139 -.5292079482672407 -630 139 -1.931033829552608 -641 139 -.2873593516781581 -667 139 3.2190753441431816 -668 139 .8854600683536387 -676 139 .8985385289024791 -682 139 .2643406318537779 -686 139 1.0596419601816174 -688 139 -.08615560318743515 -732 139 -2.518739101482543 -743 139 1.3346531605712826 -744 139 .9995947576683871 -745 139 -3.7102064874341285 -747 139 -.7047613892308966 -765 139 1.1744556137182838 -775 139 -.26378393051841015 -792 139 .6193626871440095 -795 139 -1.4440048250080026 -796 139 1.730079120277826 -800 139 .8688388041278073 -812 139 -1.7335664889832108 -829 139 -1.3010854754854229 -849 139 1.306937971328727 -855 139 -.14904399054937348 -866 139 -.09341234998528247 -868 139 .33345094992629787 -869 139 .27018703463959504 -871 139 -.4904850885616939 -874 139 .09182723989616247 -894 139 -1.8775340417227084 -896 139 -1.9314944873207769 -903 139 -1.662046628210022 -907 139 2.1156567670920183 -921 139 -2.1311993784255034 -924 139 -.7652774918927071 -928 139 -.19951477506211762 -929 139 1.9332384151820805 -946 139 -1.4054966885411038 -951 139 1.7628356526367648 -961 139 .025099573496739008 -994 139 -.6366349722150823 -11 140 -2.2272056895813943 -12 140 1.315112214741498 -13 140 1.0057173386460545 -34 140 1.8207129846096712 -35 140 1.1668738463562627 -57 140 -.21586466351809294 -60 140 .5027421812068689 -72 140 .28733702766015223 -93 140 -2.1169570725327027 -115 140 1.3707742415194628 -120 140 1.1240179880005752 -125 140 -.1547722613690467 -136 140 -4.147044397598935 -140 140 .6843782301009698 -145 140 -.13296064465378113 -151 140 -2.6392910502751126 -159 140 1.378975395943657 -165 140 -2.278178015674726 -188 140 -.9028996279970125 -191 140 -1.7669951914314086 -196 140 -.546382376993729 -210 140 .8458932802874937 -223 140 1.3580881370629445 -251 140 -.62500576863134 -270 140 .4391418903119917 -286 140 1.8738173808062275 -288 140 -.10117113696798424 -289 140 2.7815342912695713 -291 140 -.33749650970414297 -294 140 .823548462280285 -295 140 -1.190950528377317 -298 140 -.4977256340040463 -308 140 .6140947331229888 -322 140 -1.6042633859718047 -329 140 -2.1669404912000663 -333 140 .8658741833414423 -346 140 2.157870386132505 -350 140 -1.4737101139813114 -372 140 3.160623962932827 -373 140 -.7883503886123064 -374 140 -3.870728284603956 -382 140 1.0829403254192884 -395 140 .019365031480314016 -397 140 -.803540211445643 -422 140 -.4998225392486286 -480 140 .7202598555417139 -484 140 .6609049792174782 -492 140 2.3303332309169873 -495 140 1.5251359705414445 -496 140 -.7196821885638198 -504 140 -2.3561711508952388 -507 140 .09912772557164354 -526 140 1.691789394073267 -527 140 1.549109749506891 -540 140 .5017147733080118 -553 140 .15093563631106455 -560 140 -1.0611067625992645 -564 140 2.943375661488642 -578 140 -.269468074783408 -585 140 1.3269035824707827 -601 140 -1.1112773701257188 -603 140 -1.8628213831391363 -630 140 -.17453872639873072 -646 140 1.9953500440547336 -659 140 -2.1111901478551234 -663 140 .8130283334842988 -674 140 .038369998664811875 -687 140 -1.1926027984933516 -713 140 .6881226874491845 -746 140 .5802218875510888 -747 140 -1.2146219652146435 -748 140 2.7408938225863797 -759 140 .8346902561729691 -764 140 -.8897834398127378 -769 140 -.1688934517164985 -777 140 -.4831991313904114 -778 140 .745297677491426 -802 140 -.35209402786282584 -806 140 .4138784829707229 -825 140 -.4432543367022636 -829 140 -2.0896162820070288 -833 140 -.756768792589343 -846 140 -.5735979602191709 -853 140 1.4621639156054933 -857 140 -2.236260621819195 -862 140 .07422316690378435 -867 140 -.741173215162634 -876 140 1.2895616375052585 -880 140 -.2910656916387692 -890 140 -.8291748016285896 -900 140 -.5662240546736671 -906 140 .7040317546518037 -910 140 2.2728687187164756 -914 140 .8467655641141886 -926 140 -1.8779690529646091 -933 140 1.4116604507707915 -954 140 2.0139994130000867 -959 140 3.3288961766020737 -978 140 -.19261219353678263 -980 140 -.07951910084792269 -983 140 2.1868032625962726 -986 140 -1.7463754716930833 -989 140 -.7640122205750352 -3 141 .8735422273452538 -13 141 -.8236680438084275 -21 141 .15204528036917597 -25 141 -1.5186334596698825 -26 141 -2.116688465072954 -32 141 .022926955635601952 -34 141 -1.3233083653774138 -36 141 -1.6330106731136396 -37 141 1.2648722861689066 -53 141 .9532454007971196 -62 141 -1.2036061803047093 -64 141 -2.58517455397733 -82 141 -1.5285543520886793 -100 141 .04221750171073288 -125 141 1.1019065815314495 -133 141 1.2802688155739725 -139 141 -.06636422290167436 -146 141 .2602581358940683 -165 141 .8137089216157524 -168 141 .49761408116086303 -175 141 -1.9108540800121878 -210 141 -1.238686690589005 -220 141 .8521098694735881 -231 141 .5860247682414719 -232 141 .4561381790069189 -248 141 -.41103023082527207 -252 141 2.1159056425731513 -271 141 -.6952291947345075 -276 141 .9314344422960827 -280 141 1.5066969366321898 -291 141 -.5379080288590868 -300 141 -1.0435828869758565 -306 141 .18133628279150127 -313 141 -1.035801698309012 -334 141 .6698062380493802 -336 141 -.8549558863944708 -347 141 1.1486333853180235 -361 141 2.2176370714892735 -370 141 -.23067472759606808 -371 141 -.7495748641217972 -380 141 -.19179371425161365 -390 141 -.0929984973161661 -391 141 .5813699586626274 -393 141 1.2414087993746497 -409 141 -.2620597448210216 -423 141 -.1968681927519928 -441 141 .5833287559187913 -445 141 1.331216068575683 -484 141 -.017102804697464752 -498 141 -.3989423019310482 -507 141 1.8073037132830794 -512 141 .43190775182413865 -524 141 .6988454456399626 -527 141 -1.8852083765626177 -544 141 1.2827300543980327 -545 141 -.4168797107366178 -561 141 .8287065452119858 -566 141 -.15281062806707357 -570 141 -2.3554613187836035 -575 141 1.7430855322306547 -582 141 .7427094024617065 -583 141 .9479254016247829 -585 141 1.204448382527482 -588 141 .08058347646063423 -590 141 -.08791992735370663 -599 141 .041831460015138454 -617 141 1.51746438418001 -620 141 -1.7425397212763625 -623 141 .928760273124448 -627 141 -.06976982526239353 -643 141 -.049471083468167545 -661 141 .19678033414166102 -682 141 .9246395558661492 -684 141 -.9230058817375647 -692 141 .7173891476867569 -693 141 .011595537497801608 -695 141 -.1655146869412223 -710 141 1.1919412688485662 -737 141 .8836704509218034 -739 141 -.1155384083594547 -741 141 -.3336341716284751 -743 141 .08831819839739338 -744 141 -.5026971699495156 -746 141 -.023923208039117842 -748 141 -1.01218362546574 -755 141 -4.049846670737788 -770 141 .9473386124356399 -788 141 .644211752613453 -795 141 -.023306700784257273 -796 141 1.6355773134426683 -797 141 -1.3600169621852178 -803 141 -.17482835083314202 -828 141 -.7507310577572142 -830 141 .1614583203867529 -834 141 .7249185237461477 -838 141 -1.481303445457995 -847 141 -1.2030360485438192 -853 141 -.641059091161413 -873 141 1.7697354884376855 -882 141 .024855234442986048 -892 141 .4507914532424366 -897 141 1.1723572024244429 -901 141 -.78954476564652 -911 141 1.0006916745541374 -913 141 1.9313372224490404 -914 141 .5824242455783979 -917 141 -.038986268432878474 -920 141 -1.553604445525638 -925 141 2.332598478539055 -929 141 -.15759078785753242 -932 141 1.2349356007344598 -933 141 -.5501915837744173 -942 141 .9101013030176834 -945 141 -.7250876286661744 -947 141 -.7573620605890627 -948 141 .5722428606807832 -949 141 1.5535186340152012 -958 141 -3.6093743644667717 -992 141 -.13380656717547418 -993 141 -.07789607160606425 -994 141 -.8124031067640496 -997 141 -.31370138085661703 -2 142 -.2900754530470144 -3 142 1.9574320729453512 -27 142 3.056470568671684 -30 142 .40750850503348734 -37 142 -.34965741767111325 -43 142 1.2208867480692784 -48 142 1.1463798820075908 -50 142 .4555683230527727 -56 142 -1.834881033938099 -59 142 1.5266431301525174 -67 142 -1.3457686728755258 -77 142 2.767492260984853 -92 142 .817756194310911 -104 142 1.0469938081479944 -107 142 -.05144161979692666 -112 142 2.089736360819868 -121 142 -.2343966891411047 -125 142 3.2762405100891328 -126 142 -.05131965084281594 -143 142 -.39920491653183265 -145 142 -.1699643332614268 -149 142 -2.527783663257148 -150 142 .11760131635874092 -159 142 1.6971466784647595 -172 142 -.46678522143580137 -180 142 -.2513469713325663 -191 142 .6858683780872806 -196 142 1.3804934066133734 -205 142 2.747832309510831 -213 142 .4788367757953571 -217 142 .1447792622825056 -222 142 .5199426220100645 -244 142 .9094634825775966 -251 142 -1.7181099697352626 -262 142 -.30327982980387014 -271 142 -1.4559917483137559 -274 142 2.9918279488284782 -299 142 -1.4539669841055636 -303 142 1.792904322440203 -311 142 1.3210551708709926 -319 142 .3787236334943964 -326 142 -.8681070291098331 -329 142 -.031304716562624096 -331 142 -.12027659071429203 -332 142 -.3007348549116195 -357 142 1.7011679728827438 -365 142 .8758096115555479 -368 142 -.2835014596924436 -375 142 -.7806585744960877 -379 142 -.26579045193518536 -382 142 .8776966692172207 -423 142 .7442982913609335 -433 142 -2.2053233716457497 -439 142 2.2281099976410466 -478 142 2.2343480451396958 -497 142 -.47489461621710244 -519 142 2.275189502628462 -552 142 .4107598431644353 -554 142 -.8667562561154728 -558 142 -.25360165776604937 -577 142 -.4345328808563334 -579 142 1.00855750535026 -580 142 3.0925364360330216 -591 142 2.12800131831203 -604 142 -.8421058333110214 -605 142 -1.1307779091818175 -612 142 -2.018223459165249 -613 142 -1.5796424856087385 -640 142 -.7139098534256247 -641 142 -1.349929358265312 -676 142 -.8635920193173707 -677 142 -.5090405602697543 -721 142 1.7879602906051295 -729 142 -.12622152469862227 -732 142 -1.0915557106748262 -736 142 .8231821507969895 -745 142 -.4032985543902063 -758 142 -.12679262548865083 -764 142 -.38711536128492174 -768 142 .6321512699349562 -770 142 -.23028190325915776 -771 142 -.17350563650289036 -781 142 2.037613606471632 -784 142 -1.579615958389178 -793 142 -2.9137308188762945 -796 142 .39803326749319357 -802 142 -.4453724537826318 -807 142 2.2524323010968996 -838 142 -1.695152228795984 -844 142 -.629526419403435 -846 142 -.7319511212602517 -864 142 -1.7684942513021384 -875 142 -.19417458197527648 -878 142 .4681103696673227 -889 142 -.15254245322665383 -891 142 .9484359416535422 -908 142 .1482573909997452 -922 142 2.0728556092742187 -943 142 1.5107289635669345 -946 142 1.0873270941910298 -956 142 -.41754562557136715 -978 142 -.03907163777280345 -997 142 -1.7709109873148716 -4 143 .11115665289462762 -11 143 -.23842865658365808 -12 143 -.5212390277155287 -13 143 -.24615068103443227 -36 143 -.8062982380482782 -37 143 1.3135545635914911 -41 143 -1.9558239531953072 -44 143 .48590990445323684 -57 143 .12496975762022944 -63 143 .8961682282063785 -78 143 1.2900105159760382 -79 143 .24248007440549157 -87 143 -.10620952754462328 -105 143 -.2907078462365912 -118 143 -.782285790355732 -130 143 .30295001066719995 -150 143 .7433082271853753 -207 143 -.3353216312892002 -210 143 .6893968951876634 -222 143 .09543631180494454 -230 143 .631926020313377 -242 143 .3559036855523482 -244 143 -2.2263143254714923 -259 143 -.0755063626626181 -276 143 .24384722951531743 -283 143 .7694239836344036 -291 143 -1.3090800079521474 -294 143 .558955160098542 -298 143 -.20099809732676446 -299 143 .10131827874724347 -316 143 -.8747450355788754 -327 143 -.661712281755818 -330 143 -.5826540753892736 -353 143 -1.4245073156254935 -355 143 -1.6825307012187105 -410 143 .6408152177560387 -435 143 -.7150367956053326 -454 143 .059726561647719736 -456 143 -.09918294509188288 -463 143 .0373375599191437 -484 143 1.4304809731972659 -487 143 1.6307588942035622 -496 143 .20540152891696228 -501 143 -.6287404022419845 -543 143 -1.000801697643881 -568 143 -1.0407811515088858 -574 143 .06485598266626587 -590 143 -.1397035857731122 -594 143 .002726386778306167 -598 143 -.049744322649967185 -605 143 1.0653491423616226 -619 143 .16979664242790765 -625 143 -.007632981265169814 -627 143 -.5167692691263489 -629 143 .31935308402738927 -632 143 1.320065798639914 -642 143 -.4266591509993014 -645 143 -.7113184089789791 -654 143 -1.9437866143426514 -657 143 .2808535203638477 -667 143 -.3590759996566227 -674 143 -.3586718912841783 -694 143 -.907890250377644 -699 143 -.6041987818504188 -700 143 .7580840748501101 -703 143 .5911420137226853 -712 143 -.17134348638880795 -715 143 .3393382582128603 -736 143 -.7707799255890163 -739 143 .6358364019961489 -779 143 -3.056537430865773 -785 143 1.1729883242383765 -789 143 -.006933616419600929 -798 143 -.6329465843101403 -804 143 .7109119887032188 -809 143 -.5198695872106086 -840 143 -.39652490823016984 -856 143 -.7181976471292123 -867 143 1.1542923879539209 -888 143 .7020706129283766 -899 143 -.1503006982005381 -915 143 -.10473022070787495 -930 143 .3788211376931965 -936 143 .6199926999468702 -940 143 .6746923996641886 -951 143 -.18112257995119418 -968 143 .0396321248780557 -981 143 .7822312778803171 -984 143 .25773300338921223 -28 144 .07359911838945728 -29 144 .9488755712421018 -32 144 -.5120134967109057 -40 144 .9496857024931722 -60 144 -.2924780921636335 -66 144 .04599302934792579 -71 144 -.24741273860825108 -101 144 -3.055863332088374 -119 144 1.9412245056309698 -129 144 -.44654959167520136 -156 144 .008772870330340854 -177 144 .41507265179737973 -199 144 .2132701288980692 -201 144 1.2754502829060559 -204 144 .05893869411093171 -207 144 1.6302001994762199 -217 144 2.0554384024749925 -235 144 -.6623802259746496 -248 144 -.7454083056330428 -252 144 .010103878053232832 -285 144 .5120157190532288 -291 144 -2.891351110265396 -293 144 1.2598243477517346 -309 144 -2.2508968676764542 -318 144 .6282051378441686 -378 144 -.27683890603527384 -381 144 .8535984482429375 -387 144 -.47143280190435105 -403 144 -.6262619964199272 -404 144 -.9462760651556357 -417 144 .16155291186468507 -435 144 -.5034703790975628 -447 144 .29869928739717777 -454 144 -.14999690119120013 -455 144 .37944247902019335 -476 144 -.669745849115741 -495 144 .3982130988307706 -505 144 .6083940483048346 -513 144 -.9887093375943385 -514 144 -.9656897182799784 -520 144 .7806563745714175 -530 144 1.192800754150516 -533 144 .434007773528443 -536 144 -.25528642268811114 -543 144 .34603728113341453 -551 144 1.3878356539199643 -581 144 -2.0640774276780536 -582 144 -.057100021537100004 -588 144 .07504122798729551 -589 144 .8155548268303342 -591 144 -.32549222317555176 -615 144 .5815585353346138 -643 144 -.1739011428551683 -650 144 -1.1083261960622535 -653 144 1.3221213016224598 -670 144 -1.5450085996909526 -676 144 -1.468590667568427 -680 144 1.1626661580372526 -682 144 -.4699064800625913 -684 144 .770685175108156 -691 144 .6195416440173885 -693 144 -.6674320251116139 -699 144 -1.4600910922429104 -700 144 1.2362437896613125 -704 144 .3456118058126759 -715 144 1.3847377570831112 -726 144 -2.1725367265649735 -738 144 .19894576839535252 -744 144 -.06186228102710834 -795 144 -1.3732118506474018 -808 144 -.6958518906996671 -810 144 .6243899801001203 -814 144 -.7443120860076421 -828 144 1.076289003169109 -858 144 1.0241399953151211 -859 144 -2.0596610793352523 -879 144 1.5764283775729615 -880 144 .6300778889991826 -895 144 -.5267698028446522 -905 144 -.035935520457021995 -911 144 -.3695364102039873 -912 144 .9064159938286288 -928 144 .5231150187203122 -950 144 -1.0684583237809824 -960 144 1.2428593320799495 -962 144 -.4932565343166136 -977 144 -.6643017076628265 -981 144 .8523860827936622 -988 144 .42061137052983477 -989 144 -.24486215068952072 -4 145 .2747647764062542 -7 145 -1.3460851131258156 -16 145 .21703511221376032 -30 145 -.01565245439144889 -34 145 -.013858685552720566 -38 145 -.6504903214012875 -59 145 .7993371409906267 -75 145 1.8732354729056033 -81 145 1.0504814238066968 -114 145 .0390740328354965 -116 145 1.5417159326607819 -119 145 -.4730092648705596 -122 145 .3919323097824432 -129 145 2.1376273998768776 -145 145 -.8025380184865044 -157 145 -.4763249686650852 -167 145 -1.3389556109671965 -171 145 -.30097258063723664 -184 145 -.267423514093439 -196 145 -1.0176599652108091 -199 145 .02881260868485214 -212 145 .10457772220886705 -228 145 .8665046352194113 -234 145 .917980362994717 -238 145 .09817702624524752 -248 145 .791941142973424 -253 145 -.9082759815467741 -254 145 .12274666638634282 -274 145 .21700541372099594 -281 145 -.9532933948492529 -283 145 -.12908907613604761 -289 145 .023716897081599186 -300 145 1.2223493954402644 -306 145 .22254341466800656 -307 145 .765114999055972 -322 145 .25870030438759306 -324 145 1.6345867247052275 -326 145 1.6433479999267042 -357 145 -.36866025128130203 -362 145 .1253136177896348 -368 145 1.0477957312785497 -383 145 -.6141198225486376 -403 145 .3905420862617462 -422 145 -.3404793586452248 -425 145 .37596714687722954 -444 145 .6708125348162103 -448 145 -.8677488687409091 -473 145 -.6126477237987752 -474 145 -.6817862272460304 -476 145 .12932228285219483 -481 145 .9408276391675279 -493 145 1.380699350228476 -496 145 -.561452739918895 -497 145 -.7828844350910006 -500 145 -1.008348594867895 -507 145 -.3254531714011197 -529 145 -.08618390122245012 -556 145 -.20595848113463552 -562 145 .7735569552614423 -564 145 1.1393676200947502 -573 145 .6548308795278456 -576 145 -.36293906582151136 -578 145 .13682200493878113 -579 145 .7555137761279899 -583 145 -.7266298040650997 -593 145 -1.0441820920047094 -604 145 -1.5272137692119763 -608 145 -.6379626495857267 -619 145 -.1894931050697415 -634 145 -.01468405776827246 -643 145 -.593498282332115 -650 145 .6800310339877451 -663 145 -.666373506899117 -686 145 .2603159284408322 -687 145 .36726250282316825 -704 145 .8302947007011996 -720 145 -.04539535773415054 -723 145 .4421376772285427 -725 145 -1.2471833626585453 -737 145 .6064988500662585 -738 145 .259956944457016 -742 145 -1.0830901081105744 -776 145 -.06404205909253816 -778 145 -1.2116422526706554 -784 145 .04307228298068842 -794 145 .9390051349973745 -817 145 .15890590731846144 -824 145 .1827850331391636 -827 145 -.28435729191861725 -832 145 -.568649762199308 -853 145 -.2521179761172011 -855 145 -.23936066635436207 -863 145 -.2821186001528372 -867 145 -.7093262163018235 -871 145 -.8552516000023955 -878 145 -.10379301583524339 -886 145 .8459428786684983 -890 145 .02551996671655553 -912 145 -1.709495329292971 -931 145 -.385848746170019 -935 145 1.2280374851576297 -940 145 .7661236625005505 -951 145 -.6400540235119421 -955 145 .541990148727856 -983 145 .21958272704847545 -986 145 -2.1647470038742793 -15 146 .13025899772449012 -18 146 -1.2833503133519708 -19 146 .6814426895437593 -24 146 .5785244576846243 -46 146 -1.2638125952964052 -50 146 -2.457318163818665 -55 146 1.8087041868204057 -67 146 .48763506430473036 -83 146 .39520832049090726 -111 146 -1.5054074441882737 -117 146 -2.9763622381291066 -138 146 -3.153499723292748 -152 146 -1.3930871385713182 -163 146 .1282332235698413 -171 146 -.7852178237727078 -183 146 1.771107481411719 -191 146 .1788435948488378 -194 146 2.675663846000498 -195 146 .31670599114971926 -201 146 1.7752159649080614 -205 146 -.5971618282251319 -208 146 .8049090666028558 -214 146 2.785065054910031 -231 146 1.984716005333683 -242 146 .7557923201342691 -243 146 -.030839095643681397 -246 146 1.3884307682211072 -252 146 .16937125027106792 -274 146 1.4889250838267973 -300 146 -1.2091931503717581 -312 146 -1.0793785198537424 -317 146 -1.3397943759652837 -331 146 .18402240963102237 -340 146 1.6714948118053115 -364 146 -1.3247535470523206 -366 146 .7444876994747481 -368 146 1.2993436653032981 -373 146 -.16232873447317558 -384 146 .567764066695403 -389 146 -.5348448192225647 -392 146 1.9253239795917618 -394 146 .7028359038757721 -407 146 2.5320288973154215 -410 146 1.022890776297138 -416 146 -.9636410726531126 -418 146 .6142048873261863 -425 146 -.504437019005189 -434 146 -.6039564759927212 -436 146 -1.7942585782927434 -463 146 .516272278630762 -466 146 -.1638021912760159 -481 146 -1.9864005405498666 -489 146 .35132548501642513 -500 146 1.7348342310080005 -507 146 1.0412457622255404 -510 146 2.4117434255404593 -528 146 1.683847636348548 -551 146 -2.907834886036272 -552 146 -1.756738934719833 -553 146 .4161830805440909 -557 146 -1.454159891306753 -559 146 2.4442834109127776 -575 146 -.5131821665401423 -576 146 .5360002811878467 -577 146 .9253887744069241 -598 146 .6306691890603772 -603 146 -.565985018222599 -610 146 1.8062221948703825 -618 146 2.4996537031725596 -625 146 -.8192808607829409 -638 146 2.530070786396299 -668 146 -1.973091989793799 -671 146 .013771816603216885 -682 146 -1.6755063584699172 -684 146 -.24512398815902364 -686 146 -.7859283663976513 -688 146 .8019778407134831 -689 146 -2.598323793321761 -697 146 -1.3461848515323551 -699 146 1.9580148726538162 -722 146 -.9255146016263677 -734 146 -1.8623931873723203 -738 146 .2807367798684103 -749 146 1.2491812154736397 -762 146 .5766216676498889 -763 146 1.2551872397022148 -788 146 1.0612341508992156 -794 146 -3.2590510343328423 -805 146 -2.3071526340806754 -812 146 .027240711209014182 -819 146 -1.0969609439485426 -828 146 -1.7460751659301392 -830 146 -.052924257952064596 -833 146 2.104872597022691 -836 146 .47021283819780035 -838 146 -1.0800755720627953 -840 146 .7026760879585061 -848 146 1.5486895831579635 -861 146 -1.4885287465143673 -880 146 1.692408193704069 -883 146 -1.2548429261255944 -894 146 -2.7714146139392457 -895 146 -1.6166320809649537 -902 146 .6649025812360402 -913 146 2.3457160545173488 -916 146 -.5660114853730909 -920 146 -3.1404607748385533 -921 146 -2.387389532157341 -942 146 -1.4346789912061955 -943 146 .06394977296321397 -947 146 -.6500778595263477 -7 147 -.9011433838904382 -11 147 -1.0397905309107498 -13 147 -.6502170185020861 -53 147 -.5589540572992555 -74 147 -1.4469403094383657 -79 147 .4220536776899009 -81 147 -1.7321945513440489 -88 147 -2.2093937189233235 -119 147 -.7792257067329 -136 147 -.37224085473058405 -150 147 .3552863518980074 -155 147 1.8488261413108527 -157 147 .25478423503151326 -167 147 -.44410384794482877 -172 147 -1.0998090991864615 -174 147 .3294802766956994 -195 147 -.9889832001431883 -201 147 .21585205226501628 -209 147 -1.1642551633364713 -222 147 -.4868548779161005 -239 147 1.8174180519211536 -245 147 .9924000974572358 -273 147 -.4782114513815984 -275 147 -.923894060018722 -279 147 .5852013581288613 -290 147 .24545127032512964 -314 147 -.48145267938068725 -335 147 -.3565839067233724 -336 147 .9428378801892136 -364 147 1.6884212896315158 -366 147 .1939818391518123 -378 147 1.0532525280653693 -379 147 1.8116124194652379 -381 147 .030180448230875567 -390 147 -.8072587988006966 -395 147 -2.147031195002074 -401 147 1.1642781753617915 -404 147 -.09325054023777188 -407 147 -.681856281696033 -408 147 -.3259897883828065 -414 147 .4357410629371481 -436 147 -.09202019448459373 -443 147 -1.7869341023143372 -457 147 2.8559394693544427 -468 147 .7542078675742492 -475 147 .8732646573164174 -480 147 1.0706041315605512 -482 147 .44364060285259593 -483 147 -.8293794904082371 -484 147 -1.4996653414469125 -514 147 .9823425909891309 -531 147 .259681736329509 -544 147 1.5831085562634204 -547 147 -.16596060926906292 -558 147 1.1916543206790267 -565 147 .23490568273105722 -569 147 1.2896042987918455 -570 147 -1.08009920814296 -574 147 -.04028171504213449 -576 147 -.26003175798179884 -577 147 -1.5604831757278255 -578 147 .3048624092301719 -585 147 -.8434876996314726 -591 147 -.517690036068351 -596 147 -.8939785520905262 -607 147 .4356236229528883 -623 147 .9501916069180016 -634 147 -.868984623331386 -643 147 -.9815226216150759 -667 147 .7170765378402519 -676 147 -.33758557527966715 -717 147 -.8421696601239541 -720 147 -.11558070970398483 -730 147 .041698505673716746 -738 147 -.6187394297768166 -751 147 -.8121010331614424 -773 147 -2.018248973716992 -775 147 .025257534165506593 -788 147 .8009046647256824 -793 147 .9986686153093282 -805 147 -.4451025140370013 -814 147 -1.7012294344145935 -823 147 -.6952264860590728 -827 147 1.2076695930642165 -836 147 .35658255227875635 -847 147 1.128318768552932 -853 147 -.5313188816266058 -870 147 .924091348931081 -872 147 -.7413474573805618 -885 147 -.21989166677301017 -896 147 -1.8815996957498962 -897 147 -.021377304050567036 -908 147 -2.658997924634688 -910 147 -.9105995985852199 -931 147 .08221858400395449 -932 147 .6697974012665949 -933 147 -.6892225626203986 -958 147 -.536541648867224 -965 147 1.7477906665670913 -974 147 .4696833584188467 -975 147 .7105191567158039 -982 147 -.509650119122292 -984 147 -.5276989023493626 -990 147 1.1883036244042058 -995 147 -2.1832438863058186 -31 148 .04175183864840225 -42 148 -.6427432479130744 -49 148 .3577642501278472 -52 148 -2.791523746983362 -68 148 -.37047995116142846 -75 148 .1084581999025748 -80 148 -.6842177958381108 -95 148 -.4462930470710912 -107 148 1.1957279271550407 -109 148 -.4224711591804413 -129 148 .9735128692474961 -138 148 -1.0271920825499887 -145 148 -1.4478012912294729 -151 148 .605892010768016 -158 148 -.6383895266046404 -159 148 2.330773981606426 -168 148 -1.7308106669479622 -182 148 .000848583959402632 -195 148 -1.5784524499579151 -199 148 -.7635545900116616 -200 148 -.8707381267381191 -219 148 -.014757736374987548 -220 148 -1.2538043818131481 -226 148 1.1987639402593846 -239 148 .9539189242699864 -256 148 -1.6565080698472423 -265 148 -1.705180913239609 -269 148 -1.8571365517056848 -274 148 -.8105156853471087 -275 148 -.7618709587146094 -279 148 1.0416119273487023 -284 148 1.0631389472019603 -306 148 -1.9686471195037245 -315 148 -.17710053724774294 -349 148 -1.7414696562555658 -361 148 -.18199112943949028 -368 148 -1.0061907538558443 -397 148 -.8306594912166028 -423 148 .2381831406900078 -429 148 .7211961084187971 -430 148 -.5504033855458365 -457 148 .05043538821648506 -463 148 2.1880792811217367 -465 148 1.8913831182390541 -472 148 -1.036414448854653 -483 148 .3435433949003126 -493 148 1.2968418570971345 -506 148 -1.817596689028291 -522 148 .48182734918282005 -528 148 -2.510276027602689 -531 148 .39742544625573645 -539 148 1.599045439461137 -546 148 -.19854391249112774 -548 148 -.5717196412688919 -565 148 -1.5923156858913643 -573 148 1.360100787186401 -575 148 .36013141688527894 -589 148 -.40581613730329297 -591 148 -1.4982526296605956 -593 148 -.6898678683776036 -594 148 1.1605638818018045 -614 148 -2.076531886266915 -637 148 .8217691688427831 -639 148 1.8964693171401488 -650 148 .33080218699471636 -682 148 -.37518498604581374 -684 148 -.724359542267167 -686 148 .8863849591425987 -700 148 -.4014885935275111 -704 148 1.1217335168282678 -707 148 1.0610604114650102 -718 148 -1.8545336148467275 -750 148 .5443605662235391 -753 148 -.01044516949836738 -754 148 -1.138735783192423 -764 148 -.15100805915155935 -778 148 .4043595276586243 -785 148 .028507328253067662 -786 148 2.230825296566599 -790 148 1.4041077646484907 -793 148 -.14763315417221842 -814 148 -.8935981444396593 -836 148 -.3464011509996371 -845 148 -1.138053561594309 -846 148 .048022792752382804 -848 148 -1.6373496513424421 -858 148 .22961205657292144 -865 148 -.941553638457209 -870 148 -.3200877601643725 -890 148 -.21174958712759057 -891 148 -.36322046090716154 -895 148 -.3519143404343461 -901 148 -1.3540919439517842 -905 148 -.5067042931956353 -906 148 1.0353166639550813 -923 148 .15571564012789912 -927 148 -1.5654943663589995 -928 148 -.28381416245544344 -970 148 2.330532868701745 -977 148 -.4906691982291652 -990 148 -1.3499006185364533 -998 148 -1.4433128508533257 -27 149 .2919001487754673 -33 149 -.9905691528156504 -34 149 1.356715002104803 -48 149 .7787356860140044 -56 149 -.3124377995151908 -66 149 -1.3445398815869223 -75 149 -2.4410539884786795 -96 149 1.4053457857889846 -100 149 1.9108424252329548 -105 149 .7414951238445419 -152 149 -.23441271999776925 -156 149 .16426667620654328 -166 149 1.3427121274256222 -168 149 -.8886497669552005 -174 149 .9909598999913583 -179 149 -.5273012610157755 -187 149 1.86603595905038 -191 149 -1.0079121051881674 -193 149 1.7883181963998676 -199 149 .7274711554912676 -205 149 .5770104453219645 -217 149 .13181878174194134 -221 149 1.9354744811519748 -224 149 -1.2707100677264138 -225 149 -1.4627225180838848 -226 149 1.3507305187017917 -232 149 .7252558130675698 -244 149 -1.5615952153363477 -267 149 .8939963347567582 -277 149 -.018968525504341777 -293 149 .2949164276648869 -294 149 -.9566824832299491 -295 149 -1.6485842447673513 -298 149 .5879985462083408 -299 149 .7455129117243464 -315 149 -2.0093098842915382 -319 149 .8551694203029453 -337 149 -.6083618511842178 -345 149 .4195194215886502 -354 149 -1.25995451837941 -359 149 -.005502609060228814 -366 149 -1.3460767933875084 -369 149 -1.512128816017798 -371 149 -1.9576428885609614 -378 149 .8355082018534219 -381 149 .5096629973191956 -388 149 1.321772189986945 -394 149 -.6707003069991315 -405 149 .9504153200432568 -411 149 .44197105849913454 -415 149 -1.0798802952968527 -424 149 1.681361655081179 -432 149 .4841004507315777 -434 149 -.21070401206010028 -435 149 .1784194430069425 -459 149 1.0136678471672103 -467 149 -.415362702258011 -474 149 -.19047013471952232 -491 149 -1.9501959603847043 -492 149 -1.4160822464266873 -494 149 1.139550584892571 -498 149 .5869325975832383 -501 149 -.8594779286609789 -521 149 -.46079176459564186 -524 149 -.3166787792571551 -527 149 .9558407520617495 -529 149 .8211097462111309 -537 149 .4989000764496233 -545 149 -1.472557948374359 -558 149 .7454150174027773 -559 149 -1.0640811456606825 -568 149 -.14922878828428449 -574 149 .2066308511476177 -583 149 .8295432015414618 -596 149 .6680803080139334 -621 149 .9208772623224325 -632 149 .5987174028502606 -638 149 1.4886459816569337 -643 149 .03871860438217148 -660 149 .29755174094461584 -678 149 -1.5731827212860594 -680 149 1.479634183635198 -688 149 .7389036067437422 -691 149 1.0217186268011176 -696 149 .5170381239989013 -704 149 .8677087736001744 -714 149 -1.106492861160986 -718 149 -1.5017652723522088 -747 149 -.2647879895092715 -759 149 -.22422764918013605 -775 149 -.6027196552837786 -778 149 -.09332857953022775 -779 149 -1.3607254429460907 -787 149 -2.2700302351086936 -795 149 1.1167124785362565 -802 149 -.21337527916684107 -805 149 -.7730973919984752 -843 149 .802025614727526 -848 149 -.6136083897196649 -873 149 -.7920847537199668 -899 149 .08346750433837405 -900 149 -1.7690629602969794 -921 149 1.6502269609520457 -933 149 -1.586962094189128 -935 149 -.05072390142396779 -938 149 -1.8832681049666955 -958 149 -.030763106911422755 -960 149 .5818058857666267 -974 149 .11694105687079154 -996 149 .7558348476542239 -1000 149 -1.1269215592358113 -13 150 -.061898025047160105 -22 150 1.5437240282622908 -29 150 -.03833188107790843 -34 150 .030527413940460765 -38 150 1.8726141702633001 -39 150 -1.6347853097372052 -65 150 -1.1821424350041283 -77 150 -.33132648882771987 -85 150 -1.0655506459006479 -93 150 2.6098724681094714 -99 150 -2.418988477041937 -113 150 1.9726112388868908 -125 150 -1.4289097123120844 -126 150 1.012892522178337 -140 150 1.5295496348579587 -147 150 -.5506828997496187 -152 150 1.398622365832604 -157 150 -1.5552129991831531 -158 150 -.5096081447434512 -185 150 .2897146883026077 -194 150 -2.48554557914198 -195 150 -.3840922793561042 -199 150 -.9925944443047786 -204 150 -.29395168091820334 -218 150 -1.3529020747992793 -222 150 -.008018664317123989 -223 150 -.09197285930206836 -270 150 -2.1491492281397195 -282 150 -.17707869821554315 -286 150 -1.5051775874832118 -299 150 -1.395985193156925 -310 150 -.2824030217945167 -339 150 .47903367169274363 -340 150 -1.3399052747226334 -349 150 -1.7302709758895523 -352 150 1.3902655284215242 -369 150 1.989903249883808 -392 150 -.31370797735925476 -395 150 1.575791806716747 -401 150 1.3822287001545297 -402 150 -.35550573366522287 -438 150 -.19859736093249475 -448 150 -.6185667596365954 -459 150 .04002310492912314 -470 150 -.9914142513479548 -491 150 1.585881050399041 -504 150 1.5093894332518727 -517 150 -.1929796239282004 -547 150 1.5647065508038696 -549 150 .162240477244672 -553 150 -1.5607481395116067 -573 150 1.8992311080390851 -595 150 .24876162830986662 -599 150 .9444020242935972 -618 150 -3.0184181238758914 -636 150 1.2158769256604813 -638 150 -1.4829407777177754 -662 150 -.279961847453824 -674 150 -.7505382231611628 -679 150 .9183938876196003 -694 150 -.8073874250882938 -696 150 .002395502194121437 -701 150 .5982509485367371 -710 150 -.7133541985079423 -713 150 -1.0252348602083627 -720 150 .39746260757007046 -750 150 -.22192600908250887 -758 150 1.896154919380101 -761 150 .9030472741763762 -766 150 1.0416032510274724 -773 150 .23464777123342573 -775 150 -.17845981806764838 -778 150 -2.6331136768356176 -783 150 -.20250035455201126 -802 150 -.2413375208646925 -803 150 -.8612811268606944 -808 150 .5415379039641577 -823 150 1.6358097104937575 -825 150 -1.912698594546385 -857 150 1.006177561633396 -877 150 -.2973593737333019 -884 150 -1.4532638142111645 -889 150 1.6840085847695603 -890 150 1.2547897372043917 -901 150 -1.3699024539807256 -922 150 .36787465147451903 -953 150 -2.1398688125311063 -964 150 .553638543899972 -998 150 -1.7141645775239853 -999 150 1.72546620830924 -1000 150 -.020206168155912203 -4 151 -.15351137118844044 -16 151 -.9327569120031716 -18 151 -1.1649871730722297 -19 151 -.4529778481639114 -21 151 -.537769010312653 -32 151 -.03901588877529401 -39 151 -.7033060689649394 -43 151 -.7933125734033495 -51 151 -.6595048145545856 -61 151 -.40062265957589843 -62 151 1.7189565665684357 -75 151 -.4892089597873258 -77 151 -1.7048851025709035 -128 151 .06444087614643043 -136 151 -1.93944166978901 -143 151 1.4803645308611602 -151 151 -.29426525053283487 -155 151 .17948382829943366 -161 151 -1.309959413119034 -162 151 -.3360841881604479 -164 151 1.125996788999045 -168 151 .35809429825073147 -169 151 -.2084848158557733 -174 151 -1.9994319190408663 -183 151 -1.2400056247088285 -208 151 -2.07468984368875 -210 151 1.3948119243327497 -221 151 -.2690989142950725 -225 151 -1.7680653494599228 -240 151 .2140580353137186 -257 151 1.4290022123682955 -265 151 -.7211729342144084 -268 151 .5034614686574278 -283 151 -.3717135830686118 -291 151 1.809331363039534 -301 151 -1.158868624438635 -307 151 .1829259317898461 -308 151 .8859009041084436 -314 151 -1.913327781829673 -319 151 -.6576119249270571 -335 151 .7603709599150648 -345 151 -1.9567471778719732 -354 151 -.5867332853326241 -362 151 -.8441591320211802 -363 151 -.5870537730614681 -369 151 .43116276836508494 -373 151 .3429582156747295 -393 151 -1.0783197684400585 -399 151 -.25020190784470414 -407 151 -1.6886881751188099 -415 151 -.40843198602216957 -425 151 .289429071769298 -431 151 .154746468586762 -435 151 -1.3996830901338913 -442 151 -.5102284303281966 -512 151 2.0412676426885037 -523 151 -.8343791547085595 -533 151 .07097041004373475 -542 151 .14336129344449391 -545 151 1.7843348773995555 -558 151 -.6981679394522026 -576 151 -1.3927684141055117 -578 151 .47264542957906197 -584 151 .3563674109451862 -585 151 -1.945829829176287 -591 151 -.7127004519795943 -611 151 2.404591658507709 -614 151 .16286618832537214 -621 151 -1.672201451978704 -623 151 -1.0938316086623057 -669 151 -.5027983768905364 -674 151 .4025490074163661 -677 151 -.936030181981226 -679 151 1.7627298422800002 -689 151 .359599566892992 -712 151 2.169003275810028 -741 151 .706481225551098 -746 151 .7265970457206162 -748 151 -.5725260531699681 -750 151 -2.2760319156073483 -757 151 .9325668792170042 -764 151 -.5875746156850667 -785 151 .7546280064088895 -798 151 .5657446547025261 -807 151 .2621311668094738 -834 151 .16894703194367824 -837 151 -1.8403919489799045 -841 151 -1.1291993771592632 -847 151 1.6225055257814733 -848 151 -2.7789676894206643 -856 151 -.48916062605773014 -857 151 -.5310133663334954 -865 151 1.050426003944771 -872 151 .9411508876271646 -873 151 2.3363499545388033 -874 151 1.1980919151794434 -877 151 1.080976840838345 -885 151 .8090296333453761 -892 151 .08081202862926018 -930 151 -1.3538409453131899 -932 151 -1.1155197076305408 -934 151 2.6170812738933593 -939 151 .48979435680988104 -951 151 -1.8561797688667077 -960 151 -1.074954289162381 -969 151 -.5965648801176792 -972 151 1.7428503196771652 -976 151 -1.3787788240781778 -997 151 1.5698277545730457 -10 152 .14441102232837277 -18 152 -2.911260671261782 -21 152 .10236836802084691 -38 152 -.26508558012131694 -43 152 -.6669978902667679 -84 152 .3050140031784951 -96 152 -1.673758298372255 -98 152 .10730621120495559 -104 152 -.033508545169395706 -105 152 -.2697990230830671 -112 152 -.015238125342783564 -114 152 1.3683690258836365 -120 152 -.7262348851243472 -150 152 -.9453018736084797 -167 152 -.08368049621760433 -179 152 .29888370518172247 -182 152 -.8344686564055401 -190 152 -.5340669848094496 -197 152 1.6564819871378977 -199 152 -.04648715553778058 -201 152 .26383090029655987 -220 152 -.8096760994698201 -222 152 .36154558408498727 -252 152 .4703913177010144 -253 152 -.09353862180529046 -258 152 -.22034045272493297 -260 152 .5364463494557101 -276 152 1.0439632535989758 -285 152 -.8377189065194423 -291 152 1.3039802249535581 -298 152 -.20403385432283028 -311 152 .40504389733998264 -313 152 1.1874796530872522 -324 152 .26080282869774424 -343 152 -.05909049265292178 -351 152 -.5677669306620147 -361 152 .7961928721358813 -365 152 .5914326829869336 -380 152 -.8129505508445594 -406 152 -.4108365632183336 -412 152 .6853098474309951 -417 152 -1.2214102929575898 -419 152 -.8379289521668541 -422 152 -.633321718996783 -427 152 1.0845565062998896 -447 152 .07123121885963042 -455 152 -.9390709006871495 -459 152 .432254784515683 -472 152 .5804998307423388 -508 152 .23493225168301815 -515 152 -1.0382911783834128 -522 152 .3160189863251759 -548 152 -.4320679755730929 -567 152 .3029238024303716 -590 152 .632616009087788 -597 152 1.17613551040696 -604 152 -1.1716067445162128 -623 152 -.5346588936719886 -627 152 .7628438640618178 -628 152 -1.0911283780349332 -631 152 .644271786419227 -635 152 -1.4247368725878582 -640 152 .8118295692751958 -645 152 1.0440177515657778 -654 152 1.471577367768216 -667 152 1.6059669670354055 -676 152 1.5892156353618327 -710 152 .4081216495097786 -712 152 3.2953272342124698 -722 152 1.0350916457542225 -729 152 -.09165110901605313 -731 152 -1.3978567468183165 -734 152 .34904460139056076 -735 152 -.9799986279259015 -737 152 -.03347317753212238 -742 152 -1.4734277832502942 -748 152 -1.9879341820004646 -752 152 .24563750142626842 -756 152 -.7643555460938894 -760 152 .8740356586062544 -771 152 -.8798719905596825 -799 152 -.0020654790751130914 -812 152 -.9770769076337829 -820 152 -.7362415935471353 -821 152 -.06413015069420806 -829 152 -1.3566604642207951 -834 152 -.20384622483849718 -842 152 1.3814326399351506 -844 152 .22272966321229332 -860 152 -.15113617999493945 -870 152 -.5947404405106061 -880 152 .11028823871801335 -895 152 -1.0379002078687167 -907 152 .8109478708256903 -920 152 1.1482470917384116 -927 152 -.6051032334109109 -935 152 -.35483501157631336 -937 152 .7209552414438154 -944 152 .9424643679222985 -947 152 -.6108417030277293 -948 152 .282803844941089 -952 152 -1.3785813401147327 -974 152 -1.2730596580634952 -997 152 .3211921157527885 -1 153 .04015526715064885 -3 153 .6068644332791749 -5 153 .7707806512831152 -10 153 .8005830083951002 -11 153 -1.0865564542497428 -22 153 .49057163448400987 -30 153 -1.2765523850920977 -31 153 -.10960224109408856 -39 153 -.18541578571337938 -53 153 -.07935143996253882 -80 153 -1.965252022479324 -85 153 -.11965379729721076 -86 153 .03966704876126606 -89 153 .8969132597468684 -91 153 -.8898414650623342 -92 153 -1.2936212379037832 -105 153 1.4597121755918523 -106 153 -.10228488366636918 -110 153 1.6183915513037457 -117 153 .9589649082561266 -123 153 .12435508712197522 -129 153 1.0044670995497438 -134 153 -.13449748052698018 -158 153 -1.1717114531567305 -159 153 1.3425497552375834 -164 153 -.2556319719270935 -178 153 -.11122694981922422 -184 153 -.7265084726159097 -189 153 .4598541901822716 -193 153 -.43573938481861596 -205 153 -.6784729643114485 -207 153 1.210814336809617 -212 153 -.49957274212097014 -213 153 .04070835276508203 -215 153 .38671390851118825 -241 153 -.7137971261359743 -258 153 -.43948857094909693 -269 153 .2786385302346503 -273 153 .07039540347272127 -281 153 -1.3997676671705737 -283 153 -1.0446111870445054 -294 153 -.3071873586552537 -307 153 -.03747365677569711 -310 153 -.13171261915681176 -326 153 .9256772494805929 -330 153 -1.052417160258932 -331 153 .29902065003640566 -336 153 -.7190481986338563 -354 153 -.5691753155320234 -356 153 .017737200820358748 -367 153 .8330830411509524 -384 153 -.0022786656714015308 -385 153 -.6886533857894405 -389 153 .21569937576699813 -403 153 .614545901692439 -427 153 .903218902201966 -436 153 -1.0719439864177103 -456 153 -.8789486162253907 -471 153 .6303860392677043 -473 153 -.5860705502824195 -476 153 .8583399988099051 -478 153 1.55376456105992 -486 153 .9405320313467452 -491 153 .06803151874102459 -500 153 -.8616483211508887 -501 153 .7997115894046569 -514 153 -1.2591482497652113 -527 153 -.8960437750730383 -528 153 -.9729574217148205 -539 153 .7672874714688467 -596 153 -.11181806975665184 -601 153 -.09095703377421836 -606 153 -.9822324590432948 -612 153 .8695058099455524 -621 153 .4405974762689142 -625 153 -1.1743491862167466 -626 153 .8332493365491772 -637 153 1.8671264564874213 -657 153 -1.351219281903799 -670 153 -.302313549987775 -685 153 -.5036694385501943 -690 153 -1.1237601386239997 -696 153 .45058049501477526 -699 153 .5129719393585778 -727 153 .4650012685360282 -731 153 .08691904981260776 -739 153 -.06732708791607922 -747 153 .018378975709031492 -755 153 -.35690815350480803 -802 153 .8756753474669238 -820 153 .48726915851430413 -821 153 .15361393626655057 -838 153 1.0888520738512335 -840 153 .03335707132204696 -847 153 .8572793578656865 -851 153 .3247242711813454 -865 153 -.20635838256354236 -876 153 .6577332654172351 -877 153 .17279800585587887 -878 153 -.5283112081104371 -886 153 1.345011249486054 -901 153 .0007796921222425202 -937 153 1.4438517313185708 -945 153 .7504099568520103 -952 153 .39055981771438925 -963 153 -.26867644938949253 -967 153 1.7632282600960982 -970 153 1.5483431969619574 -972 153 -1.1523040175941799 -977 153 .21874197090303688 -985 153 -.5054260585170771 -989 153 -.7358604603327811 -996 153 .05949505325282281 -998 153 -1.13453195426318 -1 154 .443454310808116 -2 154 -.6187320754468602 -8 154 -.6373810195082528 -10 154 1.2825135231688425 -11 154 -.02685689905914218 -13 154 .4864640205340095 -18 154 -2.1808005845013887 -20 154 .16614117658902086 -26 154 -1.1985456985319909 -31 154 -.9653979659369942 -52 154 -.8058835715854461 -55 154 -.9760360655700977 -63 154 -.9077660052449753 -66 154 2.1287673245708087 -72 154 -.43836587809522354 -117 154 -.44468365884183236 -120 154 -1.8937114318323602 -139 154 1.249501368334873 -148 154 1.5353184082593596 -152 154 -.9844568474703753 -156 154 -.8953367742065997 -158 154 -2.0389407447648122 -165 154 -.23940247115512012 -170 154 .2069565947612356 -171 154 1.2150005525236316 -174 154 -.5633013637075555 -175 154 -1.6659422451934036 -185 154 .8422536378964065 -187 154 -.6054024303845823 -191 154 .2682487779536855 -196 154 -.1751165682113243 -214 154 .3881738961771151 -232 154 -1.7497030069752966 -233 154 .2395147960670469 -236 154 -.760399138687011 -243 154 .8086947894844659 -247 154 -.2510139873824347 -260 154 -.769946740833014 -267 154 -.9445338014671335 -280 154 .15648065496225147 -284 154 .5312482818090196 -295 154 .33838412920560623 -314 154 .8755801623446038 -325 154 -.7013137390310324 -328 154 -.1767123536547061 -329 154 .14079502642719194 -340 154 -1.0364462340152918 -344 154 .12125668981131502 -347 154 -.3544967945032549 -352 154 2.1219305081567676 -355 154 1.9473075729544818 -369 154 .46464239349565395 -372 154 -1.0553591537067377 -385 154 -1.6307380531361666 -405 154 -.9849854247176605 -427 154 1.827081648585734 -432 154 -.49582935326079314 -445 154 .7306758190133013 -464 154 2.0781746938195993 -476 154 -.3579537669175685 -484 154 -2.7100805919125754 -488 154 -1.3030770660548936 -489 154 1.6942697819757004 -490 154 -.42129356042952604 -510 154 .4356878501475721 -531 154 .3071724067666457 -539 154 .9671603036977523 -560 154 .036796213285200365 -582 154 .3710780439749957 -586 154 -.7624115122180155 -591 154 -.23140586781541578 -595 154 .5953338647773342 -621 154 -.052431051513844085 -659 154 .38397663249406166 -668 154 1.256446540934979 -671 154 -.016072861620698015 -682 154 .8815117300623823 -684 154 .6991336293892192 -688 154 -.014433382667021925 -693 154 .6181228140761673 -705 154 .003464223311396954 -710 154 .16184440109596734 -712 154 1.952293470039826 -714 154 -1.0150347246092333 -715 154 -1.0218665551485289 -717 154 -.7696963087093417 -719 154 .009309207970495476 -721 154 -.373068640862539 -727 154 1.1313465843118957 -742 154 .3349953070946101 -753 154 .6308768225805653 -775 154 -.0965647397414437 -778 154 .5999694122849305 -793 154 -1.0651024992863494 -803 154 -.991973254060042 -807 154 1.2593894485013544 -829 154 -.27948740590066107 -866 154 .1491190684790616 -871 154 .1421867648321697 -875 154 .9153218271129472 -894 154 -2.2547614458825658 -914 154 .5343495093266599 -920 154 -.30771748604662286 -926 154 .535395293725421 -930 154 1.0673121488857353 -932 154 .27736221242595066 -935 154 1.3405500704090842 -959 154 -1.1754986183049465 -964 154 -.601395869168646 -994 154 -.20367708279205377 -995 154 .6356545795282974 -20 155 2.354105633772198 -21 155 2.7264295398527056 -33 155 1.4696125726714022 -40 155 2.1019528783108563 -56 155 -.6160407445900867 -66 155 -.9518470454371536 -67 155 -.9483385199222305 -79 155 -1.3147565182492433 -80 155 .9900197014264644 -90 155 .7147181063526198 -93 155 1.013300198562695 -95 155 1.0160722126077455 -112 155 -.5931577820657561 -114 155 -1.4674326498205406 -118 155 -.01760591824201989 -130 155 -1.123742857760675 -138 155 .38071469651628376 -140 155 .9325383593042089 -144 155 .36383506447827973 -148 155 .740757012742092 -164 155 .6150654997041409 -172 155 1.149525669540158 -189 155 1.3357524236392238 -192 155 -.06983041122557607 -206 155 2.06065446038696 -212 155 -1.4423284944345567 -216 155 1.8603579258967529 -218 155 -1.925840669455718 -231 155 -3.207350279842772 -237 155 -2.246622960999177 -285 155 1.410356599764164 -286 155 -.3603519068634792 -331 155 .27257522172023496 -338 155 -.2588295982516815 -369 155 1.646755575698894 -400 155 .20300161602138 -407 155 1.1801116928726205 -410 155 -.16748316265975288 -413 155 -2.643697172871259 -432 155 1.454510406170361 -450 155 -.40020626872346754 -476 155 .1987263448939432 -490 155 .8357399221221193 -506 155 -.5536256282990449 -512 155 .4269592442044398 -547 155 -.327035064906657 -548 155 -.17085422278777274 -550 155 -.22526713439751825 -551 155 2.965136897147847 -552 155 -.08809007687694553 -554 155 1.00277898588686 -558 155 2.5982742794031077 -577 155 .025685599058148295 -583 155 2.3801423620260955 -601 155 -1.0780101650835687 -611 155 .31319880347157536 -620 155 .028426351482384343 -621 155 .7399138058395331 -636 155 1.3685875819508635 -654 155 -3.0512057945160738 -673 155 -1.340315896238212 -676 155 -1.5952111445029742 -688 155 -1.9890559309305793 -694 155 -2.0991067364217306 -701 155 -.022464767626946602 -711 155 .787253044795593 -726 155 -2.4628810302076825 -731 155 2.7220845544248986 -741 155 -.6588876392365741 -757 155 .07189869287940606 -770 155 3.216947833353684 -796 155 .0299985173489587 -817 155 -.6266416320829219 -826 155 -.9984557806659335 -863 155 -1.6545500638149706 -864 155 .5512933415433117 -896 155 .794878156129858 -937 155 1.8095376794303146 -939 155 -.8325722901596769 -955 155 .1946686870133736 -976 155 .28567384153806974 -986 155 -2.054579302536645 -991 155 -.46335080700725706 -17 156 1.7756374177197451 -18 156 .7847436110464583 -27 156 -.6821309555377432 -30 156 -.4044399739722351 -38 156 .6808930467495252 -43 156 -2.162064007248866 -47 156 1.2428904505715415 -49 156 -.8093999288881666 -51 156 .002912784914984097 -55 156 1.5268064289201373 -77 156 -1.8513942405304713 -86 156 -2.476677284130399 -92 156 -.730308629864132 -113 156 -.6487186141462196 -115 156 .7243876199291996 -118 156 -1.4442336076063722 -119 156 2.9318577783773874 -125 156 -.8974512420872277 -128 156 1.225505046945303 -130 156 1.6632256634621536 -134 156 .3051594062433352 -141 156 -1.1643842326883955 -149 156 .9358330652212832 -151 156 .3633974349985491 -156 156 .42398149368545385 -157 156 -.483801305886805 -180 156 .5171049943232708 -205 156 -2.0142300686950043 -213 156 -.03701336615082415 -218 156 -1.1771458949277285 -222 156 -.13143893453683142 -226 156 -3.295578714558818 -227 156 4.115259855378147 -247 156 .7580995083768047 -248 156 1.9531439067029996 -262 156 -.7919256980909453 -274 156 -2.034196433238071 -282 156 -.7194881373280637 -283 156 -.06577229428082566 -284 156 1.9786403424940993 -294 156 -.7004609588533577 -296 156 .8075295209700316 -322 156 -2.4095817784270137 -326 156 -1.1826469295563462 -335 156 1.2080790894157718 -337 156 1.2219335756704066 -342 156 1.5949027773976086 -344 156 -1.2846987138636505 -347 156 -.6965866545930532 -356 156 .4687270642455811 -360 156 1.1780247175426175 -367 156 .17776168881480858 -369 156 1.6676688875516024 -391 156 -1.6157535609765392 -399 156 .2033709751141189 -410 156 .37497313645682406 -411 156 -.8069614195291576 -425 156 .8995222838685788 -427 156 -1.1825122911247687 -431 156 2.429202761157499 -435 156 -.021374082816970535 -437 156 -.032393596203168576 -438 156 -1.3472485015575888 -445 156 -.888839024907627 -451 156 .5708088849049262 -482 156 -.7392175261691497 -485 156 -.6045569657011105 -497 156 2.1953297636818094 -500 156 -1.7223449573717988 -501 156 1.2437292615055597 -515 156 -1.1485979058850082 -523 156 -.6258037400617942 -529 156 -.18360850176209004 -532 156 .7794023219677109 -551 156 1.4930637412224166 -565 156 -.9179738959891283 -571 156 1.5199230159361576 -589 156 .2933075933011903 -591 156 -.3902432937281375 -637 156 1.7377872864510664 -650 156 1.562318252390352 -655 156 1.2395713490615434 -656 156 -1.4719811190921213 -664 156 -1.4573246245967943 -672 156 .6494266943516734 -675 156 .14105826473958064 -685 156 -1.6836445835455522 -696 156 1.000512433880451 -699 156 -.8272802956486789 -709 156 .5407904339528006 -710 156 -1.0216840247358923 -719 156 -1.3701035529192838 -727 156 -.7448137015849808 -729 156 .5579712833425732 -754 156 .9158194488276465 -756 156 2.4847214404575104 -758 156 -.5709734056324405 -760 156 .022989788147378287 -768 156 -1.9779279142149284 -769 156 1.3018452605987785 -783 156 -1.3439747724370217 -797 156 1.5812113679975592 -805 156 .5740310101053056 -809 156 -.5649292222990621 -810 156 -.45477006040045614 -812 156 .9262054007297233 -893 156 -.46492788899853904 -900 156 1.6645638887501624 -924 156 -2.340666647801963 -937 156 .07864972028473625 -944 156 -1.6347832343921787 -949 156 -1.6842088628725418 -951 156 .9457032514650693 -976 156 1.1724464497437928 -983 156 .5394114889870353 -994 156 -.6436954088606025 -1 157 -.4920023134247382 -2 157 2.895659863933859 -7 157 .025019687678919142 -12 157 2.688407011305652 -33 157 .8701742208042051 -47 157 -.6663919536660686 -67 157 -.8611696103759966 -98 157 .16162953251961334 -110 157 -.7717879865393908 -117 157 2.363510837786785 -133 157 .27016582513523907 -142 157 -.7425832347699073 -143 157 -1.2351893252193356 -161 157 -1.4864521900671508 -164 157 1.29385665807664 -179 157 .66172214162541 -191 157 -.4679854266895716 -198 157 1.0221368085898743 -204 157 -2.0407535913261636 -213 157 -.3525267775270872 -214 157 -.36044119537716357 -224 157 -1.1633312936669233 -228 157 -.3762801819028995 -230 157 -1.423858438440874 -243 157 .5452178368484203 -253 157 .3730683574550512 -266 157 -.2635074045278202 -267 157 .14409240276725857 -270 157 1.2345584644163683 -290 157 -.315870644433163 -310 157 -.009582722340191585 -315 157 .5327378291438206 -341 157 .5425878829091441 -349 157 .7154537765852784 -353 157 .19345041277086927 -356 157 -.9222932469990273 -368 157 1.7582526471395272 -388 157 -.7088845105751986 -392 157 -.8753764673313523 -393 157 -2.0365142574972372 -398 157 -.9319449651295435 -400 157 -.8421173315319052 -405 157 -.6144945836725177 -406 157 -.5457268087428837 -407 157 -1.5589148224318643 -429 157 -.7821251501814285 -433 157 .8872848787498647 -440 157 .023829378174487062 -465 157 -.06565909300204723 -471 157 -1.23582807930239 -488 157 .5048213983404395 -493 157 2.79999075172075 -511 157 -.06211163185621471 -519 157 -.29993379258296404 -531 157 -2.1371132946404576 -533 157 .0586662487836935 -547 157 -.5600102260763997 -562 157 .21816140291906294 -565 157 .4903540730419589 -573 157 -.10133488718936548 -575 157 2.107730127548156 -584 157 1.3741446272579632 -592 157 .7018870144583101 -604 157 -.3932426722194754 -618 157 1.9631462804337731 -621 157 -1.3236268962390259 -624 157 -.29187661206140486 -637 157 .5716436122714279 -654 157 .8975636190955414 -659 157 .19555745967925398 -668 157 -.980543054286987 -676 157 2.431132278553566 -677 157 .13990586794304724 -679 157 1.382181384932251 -694 157 1.6187846063943203 -697 157 -.3306144896431437 -722 157 2.4906674460399993 -726 157 .7377232984780302 -730 157 .5236544078823384 -736 157 -.749882385729766 -747 157 -.4921596284177459 -749 157 .34320679238043694 -764 157 -.6754808270062675 -777 157 -.11717905416708146 -782 157 -.0494738500377753 -804 157 -.8194944371124693 -862 157 .18891477784105926 -863 157 .39369630347872653 -867 157 -1.4175305276822745 -880 157 -.07950081418327225 -886 157 1.5106010944080799 -894 157 2.1149347797532108 -896 157 -.05239656876792297 -898 157 -.25083985994837493 -899 157 -.1103401283110031 -940 157 .6054725960290259 -946 157 -1.312060791510036 -948 157 1.2977113339635191 -959 157 2.9254926794880367 -965 157 -2.062563922762371 -967 157 -1.1438845700853082 -972 157 -.994835099728313 -985 157 1.0766302909262149 -999 157 .7535418631730939 -6 158 -.483573021474833 -35 158 1.1814456534680786 -37 158 2.6393765038701993 -52 158 -2.6376211526018833 -67 158 1.4790868698473432 -75 158 -1.717150689143107 -80 158 1.0331858298589753 -102 158 1.218411576334057 -111 158 .1503905560509503 -119 158 -2.109992648323519 -127 158 1.8647987352049264 -130 158 2.2941569414160417 -134 158 -.6320553148831765 -139 158 .3658037927398444 -142 158 -.6214084770376616 -146 158 2.1444403355911303 -148 158 .3988496705803786 -152 158 .5024156067985242 -155 158 -1.317208773785969 -165 158 -2.352004874996989 -172 158 -.518859451981095 -174 158 -.6518929552403623 -199 158 -.34790551461317787 -204 158 -.40801943105346256 -222 158 .381165137132538 -232 158 .7032878601148967 -244 158 -2.473514186211355 -245 158 -1.1750440796961843 -255 158 .9557367127247627 -267 158 1.0754157360783563 -278 158 1.119467565641667 -283 158 -.7187203458594391 -290 158 -.9019327841520064 -296 158 .4931357743283066 -300 158 -.556403859615219 -316 158 -1.757258028389374 -329 158 .3714923206697525 -337 158 -.6789250155949044 -340 158 -.5894900775702557 -342 158 .6179910567506207 -354 158 -2.922597278285763 -365 158 -.33361984404539546 -373 158 -1.2520126836010252 -381 158 -2.940152100811185 -431 158 -1.8806666853400655 -434 158 -1.7292113483917901 -437 158 .9042184589439591 -439 158 2.401355689795666 -442 158 1.6115209987926276 -444 158 .5893020625742269 -450 158 2.9503006884423884 -461 158 -.7604656294605664 -473 158 -1.1276736304076125 -501 158 -1.4860958593079063 -502 158 1.0216360464352334 -506 158 .7061309791600718 -507 158 .6428244328622584 -508 158 .8962963700925839 -512 158 -.5359051158696464 -515 158 -1.2132375579573287 -527 158 .3043241438859512 -529 158 .7171283844605317 -567 158 -1.1603904238473655 -568 158 -3.6496965068490383 -569 158 -2.4872330761937707 -596 158 1.0370196977285429 -601 158 .009185157955585221 -617 158 1.0885216016174535 -644 158 .2451650107346032 -647 158 -.2226436512802118 -677 158 -.421102005699729 -683 158 -.8120545524247178 -687 158 -.40708849787302126 -689 158 -.515241254122627 -691 158 .10205298993417575 -694 158 -.37681545162267427 -697 158 -1.3576930464359689 -706 158 2.2714315115520836 -736 158 -3.5561790606520463 -757 158 -1.9014933253604624 -760 158 -2.2728496782879857 -765 158 .07456718460998832 -766 158 -.3683730542739275 -776 158 1.2989491072333879 -805 158 -1.016377497989291 -832 158 .9263807358521696 -852 158 .6540017293502264 -856 158 -.5746935885321255 -859 158 2.6350339816014423 -868 158 -.6758035241018419 -877 158 -.3959973561539297 -898 158 3.1173167891901064 -903 158 .6962989826417393 -905 158 1.4803104626653325 -924 158 1.1307004818910296 -930 158 -.31800554799506764 -938 158 1.4101962023483965 -958 158 -.09230965139449203 -963 158 .686214116266216 -965 158 .8633717364176892 -967 158 1.5359081297537764 -969 158 4.097889615383072 -3 159 -.12613876546172978 -4 159 .3045397972799745 -16 159 .22204143028037754 -19 159 .424059371649115 -20 159 .004337063576236186 -21 159 -.38202319044045957 -22 159 -.24550876863138738 -25 159 1.4779255439151522 -34 159 .6788937213403426 -38 159 .4727480062896653 -46 159 -.09947070710033115 -54 159 .22200568484318464 -83 159 .5244494188942947 -100 159 .8368315728145513 -133 159 -.7239390897615182 -142 159 .1571161719783023 -146 159 -.44394033447922493 -153 159 -.3320285812166088 -159 159 -1.1823758110798275 -187 159 -.3564497189571231 -190 159 -.06519345696089195 -205 159 -.6756722677731832 -213 159 -.08634705953722013 -245 159 .983882453018946 -253 159 .056423986123324554 -263 159 -.9440712210492137 -280 159 -.27629506266179255 -296 159 .3502248710296281 -305 159 .6358467998069648 -321 159 .371513724104992 -324 159 -.6532789856819631 -327 159 -.09102550287181203 -329 159 -.5810813963817728 -332 159 -.3632366858420487 -335 159 -.5517550500639483 -342 159 .36365860299902314 -345 159 .5163157088038188 -369 159 -.4653734559175187 -378 159 -.3858962465156389 -382 159 -.2757717691110029 -385 159 -.09281439743950823 -405 159 1.2147735505018786 -408 159 -.5805104328308491 -414 159 -.11019297969137966 -419 159 .6795480807605517 -463 159 -.5229380831824498 -478 159 -.010979243573783364 -480 159 -.35802358540849666 -489 159 -.41925263666508644 -514 159 -.20629978350862985 -528 159 .1762127475567995 -537 159 -.5677195374759004 -569 159 -.21272200488892343 -586 159 .040370327131438136 -590 159 .2084373725477985 -618 159 -.6635813190865432 -619 159 -.30129725624890846 -627 159 -.3801810063231955 -634 159 .5301138792266272 -638 159 -.3778211779159469 -640 159 -.43881564414901686 -668 159 -.39500870357599194 -669 159 .07083642720505332 -679 159 1.131561824081135 -685 159 .1846058087628058 -687 159 -.6728163102445264 -690 159 .5331093388922968 -698 159 .07145419768754645 -700 159 .13289434067541636 -705 159 -.6271576970846932 -711 159 -.6939759471966356 -718 159 -.40851551520274293 -766 159 .04702362742919969 -773 159 .5853236745806334 -780 159 .0658234549418456 -782 159 .3543795054253629 -783 159 -.7416405532991841 -788 159 -.36438763800093016 -815 159 .596585853342398 -824 159 .05531385840126968 -825 159 .11321871645861352 -843 159 -.013224054413534927 -844 159 -.28989084887466415 -846 159 -.00868568331837559 -856 159 -.5767170546213052 -879 159 .8955514067962501 -887 159 .12652416840307432 -917 159 .4602430919290188 -943 159 .05833545509954747 -951 159 .2728863209715127 -960 159 -.4067727202867605 -963 159 .8178711129482079 -966 159 -.1182134547349237 -967 159 -.37640674334203345 -975 159 -.16470327959573872 -976 159 .4401968407190897 -983 159 .37523221415649144 -25 160 .7679528089778334 -43 160 -.6024800947843068 -50 160 -.4155701606240199 -54 160 -.4679148198106549 -59 160 .9349665529036828 -61 160 .5017304209725376 -70 160 .08657287891244561 -72 160 1.4170189936263633 -105 160 -.5808916786404342 -107 160 .016976469115929017 -121 160 .30500205527063506 -123 160 -1.1311649098073053 -127 160 .8649700108669397 -129 160 .453790474601484 -132 160 -.6620552416628106 -142 160 .030972510824669626 -158 160 -.12706361757381313 -167 160 .021301087612348453 -177 160 -.9858670948350636 -201 160 -.9456018500175938 -204 160 1.7324994627342216 -211 160 .7600850570628204 -216 160 -.8167007488455382 -225 160 2.055365911192312 -235 160 -.2990195975776442 -250 160 -1.5238650410444936 -252 160 -.6301598460332047 -262 160 -1.611845857526783 -267 160 -.05112084227748828 -273 160 -.08820788444934302 -280 160 1.3381766165565432 -294 160 1.9751175112723267 -295 160 -1.3229063864056623 -323 160 .22108906518438104 -326 160 .5162173343469372 -340 160 -.9160141316598707 -347 160 .3399923280577317 -357 160 1.1759927984341478 -365 160 .43544573716469 -369 160 -.21682797428480388 -376 160 .12316288480973239 -392 160 -.3279470568591185 -414 160 .007066220478408727 -418 160 -1.369330741725861 -419 160 1.4571168634282399 -454 160 -1.36843166251635 -468 160 .09032130782051674 -486 160 -.1459251507741752 -494 160 -1.2828972021859582 -502 160 -.9944393081237617 -503 160 -.7497304594176085 -518 160 .8903126677880422 -521 160 -1.7497526574985878 -524 160 .31398815813150155 -540 160 -.5741335689772008 -546 160 -.14334102413555205 -548 160 1.3677926520599863 -565 160 .6835818353079824 -583 160 -1.9515105070740533 -584 160 -.31847454399425373 -591 160 1.1049384065861096 -593 160 .13882486612555484 -595 160 .39720991086267465 -599 160 1.097813612069774 -600 160 1.7433670314654421 -602 160 -.3638971003095211 -603 160 .915797492321009 -607 160 1.0417316888953525 -609 160 .2005208572180141 -652 160 .7652832416789587 -654 160 -.2777312196696694 -665 160 .12823777133017836 -670 160 .5306265744067371 -677 160 .16764932461864146 -706 160 -.5184309765160683 -741 160 -.6587352437732308 -753 160 .2831285702856866 -762 160 -.267956495894511 -782 160 -.11346710167043442 -796 160 -.40892641015409154 -810 160 -1.6157033893716075 -839 160 .37782537271037786 -842 160 -.9281006957279959 -883 160 -.45622146594195445 -892 160 -.924323817499075 -924 160 1.7930328647391018 -934 160 -.4218575104647903 -937 160 -.9845436836315952 -945 160 -.3517488125267045 -972 160 .49983296133370647 -977 160 1.3210814702640166 -979 160 -.18552252534024538 -984 160 .8396444951901038 -28 161 1.6635986805373402 -44 161 1.2462634391333622 -61 161 1.285771921542958 -66 161 .6906081671532612 -69 161 -.3798110470858188 -74 161 .10874795798864542 -109 161 1.2967189897263887 -121 161 .7631703918963428 -136 161 -.6320204487254294 -148 161 .1803106879811426 -167 161 .41185939090887624 -171 161 2.9624513049659633 -173 161 -.9710573937984639 -185 161 .8592978646797391 -202 161 .8920924579873393 -207 161 .17932506307931526 -212 161 -1.5283340120092515 -226 161 -.7470591491959305 -246 161 -1.516587732689103 -248 161 -.025744133710282502 -269 161 .40875787531730573 -285 161 .7737768742360462 -311 161 .4416393795191226 -325 161 .10117963379404035 -344 161 -1.149313202860395 -358 161 1.9195402276849927 -382 161 -.6789968901042287 -383 161 .25057182378910836 -386 161 .9263631444594033 -387 161 .48150315693651313 -397 161 .16493151516471544 -408 161 -.0885069783797668 -416 161 -.43255343937014396 -449 161 2.6017169748688342 -450 161 1.1924499373507986 -456 161 1.2889122171881198 -489 161 -1.203836057833014 -509 161 1.1706762350856779 -511 161 -.18571205099806593 -513 161 1.403928106748833 -528 161 -.26213873898200074 -529 161 .12099467055153333 -531 161 .07869293471015634 -549 161 .6309307715469334 -586 161 .504361848436651 -604 161 -.43468950819798624 -621 161 -1.5637067711864205 -647 161 .856662097238758 -651 161 -2.168090458698831 -653 161 -2.2497677431474465 -676 161 .5126220347699865 -677 161 1.044176603224669 -694 161 -.7601081831639718 -702 161 -.19039145973120392 -718 161 -1.4538754137062946 -721 161 -1.1298309353760538 -724 161 -.014468873910915031 -735 161 1.035190902636288 -741 161 -1.287010606074323 -749 161 -1.882396799538594 -752 161 .09766706202093202 -767 161 -.5711271200324345 -769 161 -1.1135591416124264 -801 161 .6966993463919541 -810 161 -.058750792374239 -815 161 1.3687417337151375 -816 161 -.06669685872711631 -823 161 -1.1294991489798185 -833 161 -1.2615083506051565 -834 161 .38879761752914394 -841 161 .6294967748760012 -855 161 .3038766400486434 -898 161 2.665771045180422 -901 161 -.4578585214353387 -938 161 1.694215722804266 -944 161 -.34571650244639895 -950 161 -1.7498928799514815 -952 161 .8004421140546027 -964 161 1.263434994064264 -973 161 -1.533000250505684 -977 161 1.5895446901080936 -984 161 -2.427675427256165 -989 161 -.684694074593337 -996 161 -.26844893188608043 -998 161 1.9370989256940232 -1000 161 -1.1139432389655026 -9 162 .666353258070919 -65 162 -.6720278303848621 -69 162 .7406358307322246 -81 162 -.3882250508438242 -91 162 -.71325420319407 -95 162 -.164451502856473 -160 162 -.4533228338418698 -164 162 .2745136811038834 -172 162 -1.1653150049719916 -173 162 -.0940642837391113 -176 162 .735498967468455 -179 162 -.45869363761798865 -214 162 -.3385880378797697 -216 162 -.42252070028686 -218 162 .8302425062955502 -220 162 .7302542160334464 -228 162 -1.0028613280987047 -229 162 -.791687640628736 -280 162 .029840802166914038 -328 162 -.24737440020955767 -337 162 -.06397840703349156 -348 162 .5876602852730888 -352 162 1.6520709267489053 -362 162 -.41633138088511 -369 162 1.5773874208416983 -384 162 -1.4889234447465391 -388 162 -1.469303765933315 -395 162 .2912731437422741 -420 162 1.1786378302031841 -432 162 .539749408695653 -434 162 .21186949526545676 -447 162 .6697563393765249 -453 162 -.13567920336148845 -455 162 -.5124571948426815 -462 162 -.17073240540847637 -469 162 -.08348126106672564 -472 162 -.7190054431721253 -483 162 -.2997878232407232 -488 162 .36920071119376435 -494 162 -.13075244081803816 -508 162 1.0121157340264941 -511 162 -.2069568400634705 -527 162 -.9348908972089948 -528 162 -1.8456618863797705 -540 162 -.18787967002378822 -553 162 -2.0253324120835945 -560 162 -1.4826481116441252 -563 162 -.35127045001717755 -565 162 -1.6135537040753607 -573 162 1.798049393240452 -577 162 -1.1823768587437784 -583 162 -.39688613766255043 -610 162 .37843552206088493 -622 162 .21668655069870674 -630 162 -1.5060932118612798 -635 162 .5225608220295321 -636 162 -.2104635374705481 -639 162 .5481194847993699 -642 162 .5336528294013123 -650 162 .6458924965274698 -679 162 -1.066532961835382 -687 162 .9282732173331848 -693 162 .4358786431796509 -695 162 -.8137422770527343 -708 162 .5863167788196265 -728 162 .28470639886399557 -729 162 .3542102372147439 -730 162 -.29006310933225 -734 162 .9764371833781555 -736 162 -.9927254572423471 -745 162 -2.235871881180369 -747 162 -.4558059480893684 -750 162 .0652996365999568 -767 162 .4151658044225632 -780 162 .9699084558217606 -793 162 -.8235391859030223 -800 162 .5881621953953153 -809 162 -1.0787394474696985 -821 162 .09244634448438012 -831 162 -.22450959538694282 -845 162 .8594725478656171 -859 162 1.3068466906396004 -863 162 .11132148857050643 -870 162 .6349050352745986 -875 162 -.050328326449360514 -898 162 2.9326079366895335 -906 162 .5706402598215468 -910 162 -1.4535642052153372 -918 162 .3102047525654362 -932 162 1.4698958126476136 -937 162 .4851967633689223 -948 162 -.02206743576473054 -974 162 .681974385475182 -989 162 -.6399099249691079 -7 163 .6590487755220753 -27 163 -.22365358015692763 -29 163 -.8215754060294208 -43 163 1.973620079346849 -52 163 -.37451956955183363 -55 163 -.48143749129991714 -60 163 -.16492337112592487 -71 163 -.7011273752541601 -73 163 -.57549835260717 -80 163 -.03757325777439264 -101 163 -2.22529137350672 -128 163 -1.8383020093594822 -134 163 .8964708042025061 -138 163 -.9785792289187593 -150 163 .4847157753637954 -155 163 .7761765390566062 -158 163 2.0955125354713946 -161 163 -1.04708971625811 -167 163 .21005308679458004 -169 163 1.6429656846534302 -198 163 2.3145999429907036 -201 163 .6957377861911355 -202 163 .995480118723084 -221 163 .5040743613352873 -234 163 -1.0233849599019413 -241 163 1.2201156794241492 -247 163 .17109599698209127 -288 163 .020960399818214515 -293 163 -.025658712073514077 -304 163 2.2837535654447096 -312 163 .4527599267479824 -332 163 .5126715150459755 -342 163 -1.182723410223817 -346 163 .5041154528595544 -348 163 1.7551315157903642 -360 163 -1.041405872124898 -363 163 .8761709185781887 -369 163 -1.2312106462343353 -373 163 .6804070166183838 -379 163 .5117122823730428 -392 163 .30742437059405636 -404 163 -.8567271384052284 -410 163 .5318513368806345 -421 163 -1.1889330977913022 -433 163 .33774655646585605 -437 163 .1653757716613473 -451 163 .37985641707194867 -481 163 -1.4816326475542092 -485 163 .15637159591763136 -487 163 1.0691263517055036 -502 163 .8758165130759902 -511 163 1.3777177229996 -531 163 .21290259767554348 -532 163 -.20572899722409196 -537 163 .22039000820802626 -549 163 -.6719613976175355 -564 163 -1.2046302214853781 -583 163 .35403475970160503 -585 163 -.4252927683163964 -586 163 -.20464718805623733 -592 163 .000732205148276252 -602 163 .6338278897003209 -610 163 -.33732310779073343 -626 163 .5830644216131642 -636 163 -.4983833486363247 -639 163 -.25370487646127676 -640 163 .06229661193535384 -642 163 -.8942712259548047 -651 163 -1.3498279455559812 -676 163 -.26892066250098956 -679 163 1.220492156981195 -685 163 .016146487000653464 -704 163 .37270675692363003 -718 163 -1.6603643578665437 -721 163 .41581729691307173 -741 163 .15362358456478165 -750 163 -.0767058152855279 -756 163 -2.613212490503133 -765 163 -.32129737448687934 -771 163 -.03280028731398778 -774 163 .0824977263322291 -776 163 1.6067464152269815 -790 163 .9864247702680791 -794 163 -1.4334511170293496 -796 163 1.5544921165231391 -797 163 -.6840277938354944 -802 163 -.6168964845116778 -820 163 -.9768241862954838 -832 163 .6149757927730667 -844 163 -.9361105836648107 -846 163 -.4665263845725941 -847 163 .5099855799190689 -855 163 .06465943824253796 -876 163 -.3032351261419791 -885 163 -.5482977731037606 -914 163 -.3927341549922341 -915 163 1.8992870663753016 -920 163 -1.7632811953920862 -935 163 -.3400708211700461 -939 163 -.46354232474620466 -945 163 -1.6590263841352297 -947 163 -.8734864609476725 -949 163 -.44195919573008335 -959 163 .9102795230738105 -963 163 -.6852600430279924 -976 163 1.6528110542080008 -978 163 -.11502077251262954 -990 163 -.18683799473290724 -996 163 1.133445521565688 -32 164 .29861685931991677 -48 164 1.8002950978979926 -49 164 -1.8247196442372844 -72 164 .2779628978559452 -75 164 -.017239959687484402 -88 164 1.1348640425197827 -91 164 .7502179357913985 -96 164 .46217957798240533 -120 164 .5147370548949226 -121 164 .8768756968457189 -127 164 -1.408734668451253 -138 164 .14854333182215143 -160 164 1.4862873194409734 -204 164 .18803883652769648 -206 164 .009657740439967644 -214 164 .26412575209779016 -236 164 .8094107570812893 -244 164 -.4858223751109978 -299 164 .49529278906726565 -309 164 1.3101123906797156 -311 164 -.3833578860610857 -329 164 -.2643362418807471 -336 164 .8726564315550925 -347 164 -.31771753018464477 -355 164 -.7259352962590016 -362 164 -1.1783477747523712 -370 164 .6559217148129881 -373 164 -1.3674778643396384 -392 164 -1.9469856647680543 -393 164 -.15841436544885906 -402 164 .7321751128077628 -412 164 -.33878556602465404 -427 164 -.8107647162870166 -448 164 -.5327467072645165 -450 164 .8818384920870838 -461 164 -1.6425714577007524 -468 164 -.4301724522885336 -471 164 -.27525012681152894 -484 164 1.4158046415637429 -490 164 .6092091045651092 -518 164 .6434637129511865 -520 164 .7106189931765239 -526 164 1.159200378483351 -536 164 .7078317520384025 -551 164 -.7180144829832017 -557 164 1.4151696920840038 -562 164 -1.0874333413763948 -574 164 -.4173025031863243 -579 164 -1.2873052360286197 -588 164 -.5169318347743189 -593 164 .846677763948087 -596 164 1.0093169432221252 -602 164 .8134988397099521 -610 164 -.39422273265455143 -615 164 -1.4642697035947374 -628 164 .796932831496013 -659 164 -.15384056809788832 -660 164 .5875920089508069 -667 164 -1.7677288976725936 -682 164 -.1441724778086222 -683 164 -.4539846246965749 -704 164 -.8051546387906865 -719 164 .006336595749866697 -722 164 1.1325972312516281 -727 164 -1.1375571094252508 -732 164 -.8190102694971173 -748 164 .944951170791908 -780 164 -.10113416477496168 -792 164 .20631014486157745 -812 164 .3119493104919966 -813 164 .6757255774282732 -823 164 .8856189860877359 -828 164 -.1487872204954364 -831 164 .9816617457998338 -848 164 -1.407418974799465 -867 164 .19437722922361259 -868 164 .5068369458123962 -883 164 -.6276209491009116 -904 164 -.569594343656532 -908 164 .8004032152386995 -961 164 .25283308037470165 -969 164 -.9963616362050789 -988 164 -.012087323869710703 -993 164 .7147190727040877 -994 164 -.8117225411350597 -1 165 -.2760707452885129 -11 165 -2.213450494987312 -13 165 -.3597876969909236 -25 165 -1.1790220492337549 -27 165 .03604965919048883 -29 165 -1.2178061521059864 -56 165 -.18634334040861333 -72 165 -.8328893946969207 -82 165 .39252493351783 -96 165 -.1038449969711876 -102 165 1.3063577124108385 -140 165 -1.1471127159232413 -160 165 1.4962736156395875 -187 165 -.7395118559208357 -203 165 -.4125871414100679 -209 165 2.1305578029639434 -212 165 -1.6325628983446314 -250 165 -.3292441145795924 -260 165 1.6957687245364654 -274 165 1.70236785297688 -276 165 .6642822336819497 -282 165 -.12530809325339262 -285 165 1.1219006357510088 -296 165 -.06538605505578228 -302 165 -2.7048960800706694 -314 165 -2.1868198767626534 -315 165 .11629441089419357 -323 165 1.3783839450348603 -330 165 1.0048771180970295 -346 165 .3244093714925861 -348 165 -.12563571170052526 -351 165 -2.8300416146899643 -361 165 1.0561575584690988 -373 165 .2598645146573335 -377 165 -1.6728411690038618 -380 165 -.9170240477619324 -393 165 -.9766694260207046 -410 165 -.5503088163231405 -422 165 .0955782430795927 -427 165 -.45045745545567994 -445 165 -1.7996718172191937 -468 165 -.2314109878175367 -476 165 1.0570329760163368 -487 165 1.4324623737642364 -500 165 1.1806867436667403 -536 165 -2.590020329695989 -537 165 1.3241078166605127 -543 165 -2.4259253930272426 -549 165 .6944611855805033 -551 165 2.204740719048171 -558 165 1.3565104219101969 -568 165 .10667202587925984 -591 165 1.4685864550038668 -603 165 -.9474264556767312 -641 165 -1.01186061420321 -645 165 1.4006587774809593 -652 165 -.22997127831812278 -653 165 -2.3834041007721187 -662 165 -.7030776647949396 -664 165 1.02264055436787 -678 165 .6912376148152385 -702 165 .7622801284121556 -708 165 .8975419505644089 -709 165 -.9594887570748667 -710 165 .4633441198020618 -725 165 -1.4337890836197988 -731 165 -.09150033876332456 -748 165 1.6739176420717763 -758 165 .8158752963399958 -761 165 .2799730756344971 -774 165 -.07539783836260945 -785 165 1.1125719156573899 -802 165 -1.6220218200005423 -808 165 -.17178893360624997 -814 165 .8287672104776389 -820 165 -.8451852829564329 -866 165 1.7212723381574422 -870 165 -.30760162019366577 -871 165 -1.066061642338091 -872 165 .7056580178644549 -887 165 -.09050744917800739 -892 165 -1.2360179452988733 -906 165 -.5863487986073308 -910 165 2.141716099915732 -925 165 -.9608971256652667 -927 165 2.5502506146454316 -929 165 .21763638802963886 -936 165 3.011231412768723 -956 165 .062024957242014844 -969 165 -2.671798360125546 -973 165 -.3712761198628616 -978 165 -.9230212474281995 -14 166 .519071219608645 -24 166 .23415123129094967 -33 166 .25592862434238195 -51 166 -.6253183683804107 -74 166 -2.711309352906794 -110 166 1.1391239911222937 -117 166 .49492844826570837 -130 166 .5317252969099402 -132 166 -.12230539350216904 -133 166 .7615605895163564 -134 166 .9726787662690932 -171 166 1.0206909302778149 -173 166 1.0340053535117173 -176 166 -.47934268312243045 -184 166 -1.344990001012119 -198 166 -.3390340421287248 -200 166 -.43071625510741174 -215 166 .39744957752229426 -217 166 -.35330633524828003 -219 166 .5730630210507647 -226 166 -.04054201797064334 -228 166 .3405522508508281 -231 166 .07767123214683119 -232 166 -1.4614171239371703 -239 166 .1717704751166649 -240 166 2.0063276017202925 -241 166 -.6851897166988203 -252 166 -.9556296733707218 -253 166 .06731122943005516 -260 166 -.9611659068806221 -267 166 -.308635057287044 -284 166 1.1688174429230715 -285 166 -.6444094300729101 -286 166 -1.0115247760659363 -302 166 -.05066422784900297 -319 166 -.263201399537953 -326 166 1.3942372638540768 -327 166 .5316056106105558 -330 166 .6196942520692408 -332 166 -.07151232468156385 -337 166 .5096487566002601 -342 166 -.4123825609796358 -343 166 .4855604717514453 -346 166 .08219906866257728 -355 166 2.2350262015172757 -364 166 1.2475321154274246 -366 166 1.1398167342021563 -371 166 .8744676561517978 -380 166 .3028700486221125 -387 166 1.0201095985724546 -395 166 .434850288203395 -401 166 1.3569806209778157 -433 166 -.45830233762664635 -452 166 -.3134871760743253 -455 166 .07050572253972817 -462 166 -.1613889913147895 -484 166 -2.4055017447121783 -488 166 -.9889019893128355 -499 166 -.18274285937997975 -503 166 1.4016986325972927 -504 166 -.02742918146308404 -514 166 .39187120317935786 -515 166 -1.62911631571971 -519 166 -.19222788406601798 -520 166 -2.1325713358347715 -552 166 -.5375958110029564 -563 166 -.6374878495729375 -569 166 .6234258433831714 -573 166 .5406403934612827 -574 166 .25783498098785645 -587 166 1.692646615194016 -590 166 .02966558955113477 -638 166 -.7681473715286715 -649 166 -.027432922400552215 -655 166 .3159359950795923 -657 166 -.11578895737326632 -661 166 -1.3984300185065097 -665 166 1.1025158571528912 -674 166 .973267859372152 -688 166 -.3078735232983832 -700 166 -.8392586243807268 -709 166 .49157989180014783 -721 166 -.12473265854626796 -723 166 .49081029765211526 -729 166 .13510996255251384 -739 166 -.4708713584273419 -743 166 .13851578288903957 -752 166 -.885622673262563 -786 166 .8548374463051194 -792 166 .7881386069254598 -797 166 .1305863433802916 -830 166 -1.069240808465354 -831 166 .6570213824510285 -837 166 .038982923553465915 -852 166 -.7733087947253334 -858 166 .26976767739466995 -859 166 .4585527760609188 -866 166 -.09201102457875035 -871 166 .10723805624843435 -877 166 .011805870258691495 -903 166 -.7855116567773074 -907 166 1.2037983597504125 -909 166 1.4916254977501966 -910 166 -2.1546049289891442 -917 166 -.6075991219647817 -919 166 1.5029492379987153 -924 166 -.18271985689823983 -926 166 .7516679443669303 -927 166 -2.3755242778992405 -932 166 1.0938437632726743 -948 166 -.05335582630455166 -963 166 .3013708301727407 -979 166 .6133205708290561 -989 166 -.5216531047706667 -995 166 .7524202614219879 -997 166 -.23257368056298006 -9 167 .534671724095545 -14 167 1.737770378523863 -31 167 .5558921764767613 -47 167 1.0722909015373603 -54 167 1.290094110285605 -57 167 1.3678880621423404 -67 167 .44147929594998125 -80 167 1.489174258182922 -95 167 1.0917862286118758 -114 167 -.7535031109045369 -118 167 .27415866844994435 -125 167 -.21299028442145151 -131 167 -.7715490785693961 -140 167 .8799752438094355 -142 167 1.2878851345826705 -146 167 .21956885285612074 -154 167 .3015230801327115 -156 167 .09409421381228801 -163 167 .9549822879459028 -165 167 .494380071251454 -189 167 .3453675598096732 -191 167 -1.5269614244706289 -204 167 -.14034116811822653 -205 167 -.5184829594533988 -209 167 .3062627655488143 -218 167 -.6283775405473173 -238 167 -.2916496910492342 -263 167 -.9864394030254297 -278 167 .9277094481491298 -315 167 -1.0695653481236778 -322 167 -.30334869273614223 -323 167 -.1362036900510736 -330 167 .49690469229311773 -346 167 .7102683673969928 -350 167 -.3177568000418366 -383 167 -.3982614611989117 -391 167 .08177668367923085 -392 167 .02848032897988756 -399 167 .3787642042885553 -405 167 1.0906156094685073 -412 167 -.4622735883344279 -426 167 1.7270388143310176 -437 167 .23460788885682965 -442 167 -.027621706616024734 -448 167 -.7782123106615314 -457 167 -.0755635178266274 -483 167 -.09458867144929478 -491 167 .29120756045215623 -493 167 -.8361456156427145 -500 167 .22836095223325215 -528 167 -1.121537290843321 -539 167 1.0067302935273368 -540 167 -.15431663306462196 -545 167 .6397697503053651 -546 167 .2695037940454054 -547 167 .12875338640245898 -552 167 .9374360335137949 -581 167 -.728995483412789 -624 167 1.048883064505941 -632 167 1.3973299421026333 -645 167 .5828842138342484 -654 167 -2.966102491336404 -659 167 -1.9539392789151915 -674 167 -.3015249082236946 -701 167 -.29430601899512415 -721 167 -1.4681487709123915 -727 167 .29234358819153905 -741 167 .2573402097885063 -750 167 .029718902562924636 -781 167 -1.3905162633203365 -786 167 -.7497123006811434 -790 167 -1.2176873358337441 -800 167 .8555334063806006 -810 167 1.1806576373444462 -823 167 1.166045595219666 -824 167 -.6243518133380497 -833 167 -.666642079907437 -834 167 .41202479090458183 -836 167 .223709733519381 -848 167 -1.7837135934598702 -855 167 1.7069351260752135 -857 167 .7581192558274444 -861 167 -.1650992707154249 -862 167 .589821853322311 -863 167 -.18877179270941405 -866 167 -1.0633761395379744 -896 167 .5142744054190569 -897 167 -.37521395575915417 -904 167 -.11690181543759826 -906 167 -1.3222570908979525 -953 167 -.5530167930253638 -982 167 -.2784912747753939 -993 167 1.4219058887988303 -995 167 .4608502042758846 -33 168 -.34047164505178545 -45 168 1.235654477034102 -59 168 -1.320592803576 -61 168 .18546853713580386 -67 168 1.0170750712386334 -70 168 .8113666590657747 -71 168 -.10016320473914322 -79 168 1.5199043534136278 -97 168 1.891038500343135 -99 168 -.3919015215054856 -101 168 -1.6274280863404624 -109 168 .08469734147264049 -117 168 -.2627742396598548 -133 168 -.7832510558894816 -134 168 .8602622450940131 -139 168 .03339049163271447 -140 168 .5139079008451441 -146 168 -.3459206770187269 -147 168 -.9268969896538675 -155 168 1.0761016272278705 -165 168 .6668208349805999 -171 168 1.0332034017799445 -180 168 -.17423585922092122 -195 168 -1.3059481839305465 -211 168 1.113076388556402 -213 168 .33558132329219315 -261 168 -.3507849983253841 -266 168 .2942727458251636 -272 168 .03174896852174171 -300 168 .5379589970174202 -303 168 -.7132002678134176 -338 168 1.6625638708705186 -344 168 .030477160959062707 -347 168 -.8766042930424097 -375 168 .44711252141731317 -376 168 -.8305448447896007 -380 168 -.7149790736140745 -388 168 -.6392924858550576 -389 168 -.2276177382826838 -398 168 -.41607347366600794 -410 168 -.8989547990924793 -411 168 -.7206925151151449 -413 168 -.5337513591302623 -417 168 -.5472775492268683 -426 168 -.5161400412461006 -449 168 .5280025550921156 -468 168 -.7149503578311526 -490 168 .5048648203951361 -495 168 -1.0796789981891182 -501 168 -.9897829842124185 -510 168 .6368689049629954 -513 168 .19620908548722554 -515 168 -.7249459561428219 -519 168 -.1867486937333509 -520 168 -.4618166418739519 -529 168 -.41851173966403993 -534 168 1.1873337382760258 -542 168 -.4580888779140335 -547 168 -.6205441030283423 -564 168 .3097692453549035 -567 168 .23905250627058683 -589 168 .21415571952299528 -590 168 -.33479442248306357 -598 168 .6543888605373832 -607 168 -.8562001108881034 -621 168 -.8615933799424123 -626 168 -.1575215313158712 -633 168 -1.6703486789433868 -635 168 -.3217377748839847 -644 168 .48906533623099374 -647 168 .40812164900300085 -648 168 .28381044424625057 -661 168 -.9589381388163325 -671 168 .5348493073305836 -689 168 1.1260269402971925 -693 168 -.3819969515349269 -694 168 .5761655976103821 -710 168 -.41678228383542937 -716 168 -.0002625114404233679 -754 168 -.5814481204855156 -760 168 -.20807089169152745 -762 168 -.04800960012180076 -767 168 .04543483461983746 -789 168 .11554008289149384 -796 168 -.07611951486079378 -799 168 .6716155941134385 -809 168 -.3982863910775458 -814 168 -1.2125580329529364 -821 168 -.05355893879108506 -824 168 -.22038317099777813 -839 168 .5678850649311197 -846 168 .6703259493025455 -856 168 .9066667962444986 -863 168 -.8598496198490049 -866 168 -.9440017864989421 -895 168 -.17638979767697135 -929 168 1.7724391251536868 -934 168 -.4560445217328278 -935 168 .719983944544825 -954 168 -1.5440127223805487 -960 168 -.4377992604057525 -981 168 .14804183534296372 -986 168 .0639149850395915 -988 168 .49502350690168617 -999 168 1.9407930378518121 -4 169 .2413195583390781 -12 169 -1.2982909767050577 -54 169 -1.6931776436708654 -55 169 .12602951222090594 -69 169 .41717744106487653 -76 169 -.26405177117388223 -79 169 -1.1885417181331712 -88 169 -.7797573974271669 -92 169 .17831156335032375 -97 169 -.6684162281279102 -105 169 -.18822901728389307 -123 169 -.46079723980590737 -143 169 1.878552925526749 -145 169 -.6622240775958557 -158 169 -.42109434635768717 -163 169 .06592872732749508 -164 169 -.26400585725599235 -174 169 1.59443292149864 -224 169 -.15081045789965425 -225 169 .8321210310706431 -227 169 -2.2265387069333467 -235 169 -.11648536519880827 -239 169 .6772557404748576 -240 169 -.6558421291292221 -260 169 -.48503947527837193 -272 169 -.34701469635978033 -278 169 -.13169449805640354 -282 169 -.43124438825572126 -283 169 .3033355514346515 -284 169 .020631213587710737 -287 169 -.6283603419245725 -290 169 .12413027157150874 -292 169 -1.682447264125905 -294 169 .8063303979470202 -316 169 -.5705840851885571 -351 169 .45354890719696844 -366 169 -.8385409000510711 -381 169 -.4786322066510882 -392 169 -.11581343180951477 -393 169 1.314185569404885 -407 169 1.4394527595981867 -408 169 -1.6338324114771878 -431 169 .5727731887030543 -434 169 1.3786679155870682 -437 169 -.0025043173475217395 -438 169 .06098465187201543 -443 169 -.6745897359669211 -446 169 -.35162679806764985 -450 169 -.7316430506210363 -458 169 .5615919094379087 -459 169 .5387709109434352 -461 169 .49063504183607476 -477 169 -2.028175612595166 -492 169 -1.3529954781084097 -493 169 -2.4068380963520872 -494 169 -.6395805486182926 -530 169 1.6025264243682986 -532 169 -1.4179787211707964 -535 169 .11803981194783933 -540 169 .8021000245365368 -552 169 -.4558132554744271 -573 169 -.3818326008139372 -579 169 .18098444311761724 -599 169 1.0529552105703417 -629 169 .6378589747276211 -632 169 -.42834325708503174 -638 169 -.43281721619985064 -639 169 .45585125229066137 -654 169 -.4255590837409539 -663 169 -.6459480012693849 -679 169 -1.1943011437383368 -707 169 -.5012590981559596 -709 169 .08832688050339219 -719 169 .9190104898218683 -725 169 -.4917736142038334 -735 169 .9675755547408548 -763 169 .07915308994640011 -776 169 -1.0866126656146982 -781 169 -.6742425348335781 -797 169 1.1217145269151474 -804 169 .11915741918778715 -823 169 1.3638237046194792 -824 169 .4622632082192447 -825 169 -.14067819093280465 -833 169 1.2545812077850644 -841 169 -.0896545261867377 -856 169 -.061856603803359465 -867 169 .6993348914749327 -892 169 .3449058494037218 -900 169 -.7361900748622172 -905 169 .11305393407755379 -923 169 -1.1806435044265176 -930 169 .5296789686133855 -931 169 .10209239187178715 -939 169 .059348123690002336 -955 169 .46113124140447737 -957 169 -.15705077714327836 -961 169 .8029960584245004 -963 169 1.0706679448955712 -964 169 .07181491532645909 -974 169 .8173944000362932 -984 169 1.1697403962859092 -997 169 -.3235866783430821 -14 170 -.3841105494051138 -24 170 1.2358115285684357 -38 170 -.1730181757691795 -39 170 .7137218950620602 -40 170 -.2715690943114335 -49 170 -1.7437450935184247 -76 170 .42759182280805275 -85 170 .2804794155019047 -95 170 .4573429693952163 -121 170 .9074208404585388 -124 170 1.2250536783704173 -140 170 -1.323809411863205 -165 170 -.3774271857478012 -201 170 -1.0113752090495942 -202 170 -.5049580822723888 -208 170 -.37243854915904095 -212 170 .1883957398409114 -228 170 -.6161442237140196 -229 170 -1.1535309453967295 -232 170 1.0639160941213224 -263 170 .6256047597030325 -264 170 .9053321240508557 -286 170 .317086116773491 -288 170 -.4556998645723259 -303 170 -.252453863622159 -325 170 .8428485411487798 -343 170 .3254749172358663 -352 170 -.36322880933032736 -371 170 1.3545559940891463 -380 170 .9261514011914672 -412 170 .9962816233328676 -413 170 .785859304540677 -415 170 -.22275105212880633 -423 170 -.13117488533348298 -429 170 -1.4852050670900483 -431 170 .5157005161350275 -440 170 1.606244430003408 -443 170 1.8463579074304193 -446 170 .4249332726780407 -454 170 .5508782129308883 -459 170 .5690577117885025 -461 170 -1.9940632382639003 -466 170 1.2312657414865331 -471 170 -.8847104654380206 -493 170 -1.2314848123691642 -509 170 .38252090307824727 -517 170 .552196686666007 -519 170 .027797242788828 -522 170 .011913678945415854 -526 170 .8110346335252941 -534 170 .5269939211498473 -538 170 -2.4725967731768654 -542 170 .28981186783547086 -546 170 .5308486612242215 -553 170 .6686485772193239 -555 170 -.9531564798087993 -556 170 -.6149087832637615 -563 170 .6763501251019752 -577 170 .15472891495699995 -593 170 1.3260871240770866 -595 170 .6177079382604179 -597 170 -1.5438351006281725 -629 170 .5528483457411398 -635 170 1.4388007596625978 -639 170 -2.0275453178841722 -645 170 -1.0053120417565586 -657 170 .9591976413145518 -673 170 .2398010814504904 -686 170 .5151843695505753 -698 170 .4255062490340249 -702 170 -1.1203559789311408 -706 170 -.14298690668149233 -734 170 1.2677150779714739 -775 170 .5927874883453279 -776 170 -.41916754807122353 -789 170 .40817707751995463 -817 170 .7822472185855653 -828 170 .040775798558242524 -837 170 -1.5558406851608686 -841 170 -.8552740271125904 -862 170 -.1687378722735584 -875 170 -1.5020222536390022 -878 170 .46382388640975397 -881 170 .02170221237525631 -888 170 -.031702364309203784 -889 170 -.03823688100188015 -896 170 1.0890839433102864 -908 170 .4209487585964931 -921 170 1.0813526727376412 -935 170 -1.065543301122187 -936 170 2.6967120165802037 -943 170 -1.0842696376082441 -953 170 -.43107599868260055 -957 170 1.3297978064786742 -979 170 -.16019124077013314 -989 170 .8204529915007089 -993 170 -.3342692732090009 -998 170 1.9636246360339502 -2 171 -1.2667046392090637 -5 171 1.3699766389027859 -7 171 -.3877499042290667 -9 171 1.370170483849758 -21 171 .37993843759480794 -32 171 .5501136389349068 -43 171 -1.1758468946556824 -50 171 -.45606821174607537 -56 171 .8023388441995336 -82 171 -1.0079672993377646 -85 171 2.0788954956205106 -108 171 -1.1649092915471482 -123 171 .2124728925824435 -125 171 -.5498577856872118 -135 171 -.46463234158693345 -161 171 -.5406714018708003 -167 171 .6630324359863267 -176 171 -.45015932098772077 -182 171 .48149115000465836 -186 171 .2139802414554558 -190 171 -.32810452986909 -197 171 -.218452884370007 -199 171 .276575962509524 -203 171 .2174843134997376 -209 171 -1.2720032040744575 -234 171 -.9884303145630877 -239 171 2.4571076878661278 -255 171 -.7439238467050969 -269 171 -.7783623913239807 -277 171 -.3051659186508559 -289 171 -.7131593530920491 -292 171 -.28299343809367417 -320 171 -.45466801408428603 -326 171 .26649597417803544 -327 171 1.0406695606829661 -339 171 -2.45614018250183 -342 171 -1.1501014803534728 -343 171 .39811435972426396 -351 171 .9110003463463809 -360 171 -.5895433410237942 -366 171 1.2525761034812952 -369 171 -.27145776055053195 -372 171 -.06627826016429203 -378 171 .6442053681723608 -380 171 .3579798897070783 -381 171 .1974655329844507 -392 171 1.1500463027549084 -417 171 -.4639491904334126 -418 171 -.6926507082790523 -419 171 -.20150244305859882 -440 171 .25616948368471976 -443 171 -.7912575860065456 -448 171 .4552666114428447 -454 171 .14949030913262334 -458 171 1.77700940035597 -471 171 .38692484962635454 -478 171 -1.0124393805418137 -486 171 .959613065081367 -504 171 -.40586905903058323 -516 171 -.4350544649558221 -521 171 .27086281184605654 -531 171 1.0041734658926904 -532 171 -.8243998509620859 -541 171 1.0768799557678113 -544 171 -.4084787348881355 -562 171 .036453131058649724 -579 171 .8556785248426455 -595 171 .8927560926349132 -602 171 -1.1946601124936702 -612 171 .25977433020960333 -620 171 -1.0658030787296813 -639 171 .4086160334987624 -667 171 .9984575661870604 -673 171 -.7440705360425588 -677 171 .5079149802417037 -683 171 -.13281166379806827 -693 171 -.8717030059986592 -700 171 .0562058425645839 -701 171 .40460925420169325 -717 171 -.7393961999293518 -722 171 -.28088216217992784 -748 171 -1.1656893424063994 -752 171 -.0740933826072234 -767 171 -1.1803006403893628 -772 171 1.1454350192377452 -784 171 -.1538177003930552 -795 171 .3100328521753812 -822 171 .2102152535701443 -832 171 .7217355511856536 -834 171 -.15708047030423994 -851 171 -.5956856885665199 -852 171 -1.1839899476647093 -858 171 .8785795724354163 -879 171 .38650179169236437 -908 171 -2.272330024767766 -928 171 1.2113772296541059 -946 171 -.6692362367178497 -947 171 -1.9712828255300936 -988 171 -1.4324630998028425 -997 171 -.03349503430587531 -14 172 -.8524098006203189 -33 172 -.8142622612336549 -49 172 .8463278900090088 -52 172 .8823498679856547 -54 172 -.384984579670741 -60 172 -1.4169194851649494 -61 172 .012489232279035999 -63 172 -.4212372705393496 -64 172 1.1345995445891601 -76 172 -.6035171014314245 -80 172 -1.2434702344264348 -86 172 -1.7651880168595906 -91 172 -.01349136210756173 -96 172 -.2104161440062996 -103 172 .6448005866537224 -107 172 -.3765865864913548 -115 172 -.9782974137832854 -125 172 -.06553467720437933 -128 172 -.28709753179321884 -132 172 .5880024606710142 -144 172 .6230547063730925 -170 172 -.0005146532519469602 -175 172 -1.493935562641918 -208 172 -.1307125851045526 -228 172 .002382089718327665 -245 172 -.4681284089483605 -259 172 -.13586845144425008 -266 172 -.9756847230166295 -270 172 .5058174642399028 -276 172 -1.4901140515345261 -282 172 -.49960162345100473 -283 172 .04700728105158228 -286 172 -.4224711653411537 -303 172 -.33815655015538343 -313 172 .6416260989293796 -321 172 -1.3461500826003727 -326 172 1.1758809040533131 -329 172 .5692252789595084 -332 172 -1.223950191361049 -338 172 .08371516099035223 -361 172 1.1596564158726441 -391 172 -.00016005059040957725 -395 172 -.2861319541566343 -396 172 -2.2935564078882 -402 172 -.4423732215173899 -403 172 1.4379850678629131 -426 172 -1.2059543256903944 -432 172 -1.9059090644733154 -442 172 .006785135405215453 -457 172 -.04065460496597743 -458 172 1.7247082635281235 -465 172 -1.2503372811320241 -492 172 -.9122479101592428 -501 172 .5391676631176994 -523 172 .5130504964179923 -536 172 .006912128968765946 -539 172 .09499844549337007 -570 172 .6522772454150825 -576 172 1.8524053492622783 -587 172 1.3175408385761322 -591 172 -.38274727031227235 -595 172 -1.1481201582974885 -597 172 1.1229602229159314 -606 172 .22649043767847665 -611 172 .4798210599819396 -622 172 -.368083559641799 -633 172 -.7537575565298117 -636 172 -.49694847505586387 -643 172 .7369523968344358 -644 172 -.6105113148663591 -658 172 -.06242527103487597 -668 172 .5096216931064839 -670 172 2.454209365078211 -685 172 -1.8968844401643306 -688 172 -.3713156487187838 -700 172 -.33692501704904765 -711 172 -.42926041936318315 -724 172 -.14622916055593957 -726 172 .7833196965954905 -733 172 -.8123818345058957 -738 172 .9803848141009371 -747 172 .9972114638892235 -764 172 1.257583417177328 -767 172 -.9132146205570075 -780 172 -.18061306023467116 -782 172 -.820655191209465 -810 172 -1.148562351013156 -815 172 1.0692428924853794 -822 172 1.0643161399625454 -853 172 -1.881381769727207 -863 172 .26043342556367594 -872 172 .440301117951361 -875 172 .24236996459206572 -889 172 2.0253113225896837 -891 172 -.3992640957783779 -892 172 -1.1301408016523715 -896 172 -1.3444017096180705 -919 172 -.3118716918026413 -922 172 1.1063113331814232 -925 172 1.2104066647362979 -932 172 -1.0720047504652206 -939 172 .8643649056345903 -956 172 .808869784060384 -960 172 1.323897784350345 -961 172 .034080003874850336 -967 172 .9230011919361999 -972 172 .11686746024950034 -990 172 .17948737697575534 -992 172 -.031297057668224285 -996 172 1.1665487982205023 -4 173 .7630781097378478 -5 173 .8482870864238796 -9 173 -.5617394630720297 -20 173 -.8747073627538794 -34 173 .5818083119048792 -43 173 -.8516157216577331 -44 173 .6737075072243623 -57 173 -.4440923713881634 -73 173 -1.3438755671200127 -74 173 .10897758826036733 -91 173 .37256154808023034 -94 173 -.8634929524564103 -103 173 .9444506628282604 -107 173 .026755457686898944 -111 173 .20536430823459212 -116 173 .03442697629031473 -119 173 -.2340644185181501 -142 173 .25375089471609563 -143 173 .9505845526631342 -145 173 .7847666844197755 -146 173 .14340587055745185 -147 173 -.2225922998178223 -159 173 -.40129440385864756 -172 173 .03458026991400035 -184 173 1.5330093914427492 -190 173 1.0571996123304688 -208 173 .11357228209209595 -217 173 .36424712306283924 -219 173 -.9375739062451462 -223 173 .20441375109693688 -232 173 .9947109548582519 -243 173 .4761227448292895 -252 173 -.6022797965008103 -265 173 1.022823861243929 -268 173 .27515083982042526 -287 173 -1.3209119487852188 -317 173 .5114149949253195 -323 173 1.625796677650245 -341 173 -.2462073426016339 -350 173 -1.1086041966308828 -359 173 -.22498780319187295 -364 173 -.26747041791912807 -395 173 -1.4736368023969364 -415 173 .2663948063479842 -422 173 .026021772256066306 -431 173 -.427079433163868 -453 173 .5890257064464417 -470 173 .3686304779258653 -472 173 -.3360194991851115 -486 173 .5086560117297375 -489 173 -.21614804773600976 -491 173 -.7420481906631762 -493 173 .613536930290108 -497 173 .283580563613149 -498 173 -.3123520864513276 -502 173 .5449339967114041 -511 173 .42363606607491855 -524 173 .25281564221794683 -538 173 -.7005691951869975 -542 173 -.7592491914980299 -550 173 .5266322505742789 -575 173 .6907681613757484 -578 173 -.26703179198813826 -597 173 -.056269956545855905 -599 173 -.0828952316358586 -609 173 .8687063812943414 -625 173 -1.5195248410810982 -631 173 -.5415385897820284 -636 173 -.36446667120200077 -649 173 -.32092903077567564 -657 173 -.8606658439428696 -658 173 .3439904993278938 -668 173 -.6698653801867152 -672 173 .57156693941257 -676 173 .4716134391864263 -720 173 .5318281301002445 -724 173 -.34812573337999425 -730 173 -.258112897204673 -733 173 1.0722154042430385 -738 173 .04161670940178527 -741 173 .19411315127210282 -748 173 1.4523822510947 -750 173 -.043011780083024226 -752 173 .9354943877729471 -766 173 -.5469333991431604 -773 173 -1.1705526188293212 -789 173 .6313319139612708 -817 173 .4226407530429487 -866 173 .5435282016124556 -868 173 -.6366842451642086 -882 173 -.3968966185143753 -899 173 .8945203829087529 -900 173 -.6951913674288864 -909 173 .09422033122706433 -915 173 .7030073158442197 -924 173 2.382971933159484 -926 173 -.06416251866251842 -933 173 -1.0154213260443956 -937 173 -.4622911869698365 -952 173 -.43142515997005865 -955 173 -1.5232391556880878 -976 173 -.8844322243357662 -984 173 -.4428799088629555 -996 173 -.42464339948661245 -7 174 .8640762941894984 -17 174 .7131253644412134 -28 174 .15547888589501566 -30 174 -.15269158622736279 -43 174 .6393532560404265 -60 174 -.47200967824147655 -63 174 .4963799314265235 -64 174 .3445754937950119 -66 174 .13289502546693066 -71 174 -.3684013143265241 -92 174 .5540757543691106 -114 174 .01981847202647704 -121 174 -.058593171943423214 -124 174 .82486620245299 -132 174 .3875945834880503 -133 174 -.6293766212130502 -135 174 .8049212271670773 -145 174 .06630535056490935 -166 174 -1.7868286384694412 -175 174 -.2196566227632898 -204 174 .5532020761843015 -208 174 -.11430017070305412 -215 174 -.7208337795678644 -221 174 .49356935216147985 -243 174 .29696206667341984 -248 174 -.8725313105220744 -251 174 .5843460216981722 -272 174 .0332615476210086 -279 174 -1.504688650485432 -285 174 -1.7772503664663268 -289 174 -.018608799607577522 -302 174 -.08178142693195473 -303 174 .07760213047766135 -306 174 .5421197406680002 -308 174 1.4264290611124972 -318 174 -.47015071094575217 -329 174 -1.3943003768614464 -341 174 -.3186349265731049 -343 174 -.16803690351342948 -370 174 .6282188011374806 -377 174 -.197254572715933 -385 174 .38114672240635084 -399 174 -.5588988000134849 -420 174 -1.040748989619861 -423 174 .5371517734896769 -465 174 -.12041893051696066 -472 174 .22336033089621157 -475 174 -1.0608621988657825 -495 174 -.15828889320618755 -499 174 -.4470467286100827 -502 174 1.0820508413255456 -505 174 -.6095225498213882 -511 174 .4304345297618321 -513 174 -2.5428384805801962 -523 174 -.756582447564749 -535 174 -.36280169576634136 -540 174 .5405177749919525 -547 174 -.506845511425425 -566 174 .02232804393081623 -583 174 -.18317396064331978 -598 174 -.36729537202177404 -605 174 1.1401603605972543 -614 174 .07464417425750161 -617 174 1.0002321992288616 -629 174 -.09784890743251956 -639 174 -.4579346993318549 -646 174 .8369665610173949 -660 174 .2960033151728154 -676 174 .809955199550198 -677 174 -1.3547734041365893 -678 174 -.4025991326034476 -679 174 .5537274278023046 -681 174 -1.9357130032605065 -709 174 .10500343419383436 -712 174 -.3822292111887678 -726 174 1.443970585083744 -731 174 -.7312382924393908 -738 174 -.0658583152632319 -742 174 .5431026512984429 -749 174 .5192795449019745 -756 174 .06255010302874495 -757 174 .004942103825773703 -777 174 -.6825650584487982 -791 174 .42603138345722547 -804 174 -.014930138681154479 -827 174 -.3157898153392272 -828 174 .1909327418449775 -841 174 -1.1295416483043064 -846 174 -.21231923236946065 -857 174 -.953956822823132 -861 174 -1.3335292287768439 -862 174 -.07283350913743132 -874 174 .6514108374304219 -886 174 .08510081046476414 -887 174 -.33996855769071543 -898 174 -.3103760609259936 -901 174 .6457534673520857 -904 174 -.4729812659953976 -914 174 .871747854373643 -934 174 -.12214669367941819 -942 174 -.8060699259577233 -947 174 -.2270524626738347 -951 174 -.34542629195045943 -957 174 -.19640364112249187 -963 174 -.08655896927904448 -967 174 -.3821410024704881 -971 174 -1.2649121977867375 -988 174 -.8643672183984742 -998 174 .7663152320988975 -16 175 .0013091199521453462 -31 175 1.0465613646590557 -34 175 -.8626720655297418 -35 175 1.2071215667284045 -45 175 .8224438334126354 -83 175 -.5945760902389193 -86 175 -.007539393266493485 -104 175 -.9141126890168557 -139 175 -.9739169261535985 -142 175 -.469932099172862 -153 175 .9795626790112978 -162 175 .7110114779569248 -168 175 .02636360562636847 -170 175 -.23372101932389291 -177 175 1.2078130339082649 -192 175 .18826155662429633 -199 175 -.2704646807582666 -228 175 -1.7663696257790524 -233 175 -.6149437841121179 -242 175 -1.1892823179890208 -261 175 .844989338184692 -320 175 .09274799631924457 -326 175 .23763885553957428 -336 175 -.41842368438286154 -340 175 .6041829902950152 -344 175 -1.458669668529119 -349 175 -1.6941546726816612 -351 175 -.21031905048098612 -353 175 -1.109820653764595 -356 175 .014002564371023318 -379 175 -.41917597277783836 -380 175 .025782814604872015 -385 175 .5247345922086198 -390 175 -.16301019954854196 -405 175 -.16464162543201974 -406 175 -.7721900830750605 -409 175 -2.8475370465264414 -410 175 1.3958550226332902 -413 175 -.7690402044855633 -418 175 .7487685775934682 -419 175 .08840001330256375 -424 175 -.29628029918270293 -437 175 -.3923873526656466 -450 175 1.5192623808987582 -475 175 -.8789768496146549 -485 175 .01000017242027662 -488 175 -.08222345863845487 -492 175 1.501920701960568 -507 175 -.06109115848687835 -513 175 .8354769834529447 -522 175 -.22601514762756825 -540 175 -.4922771916588622 -541 175 -.13899615286933611 -562 175 -1.1973616342744449 -564 175 2.072764748919613 -566 175 -.37931300738983353 -593 175 .3771058334259271 -595 175 .5918785919280413 -596 175 .6186662190826024 -615 175 .723061991940053 -634 175 -1.5070815820082428 -643 175 1.6138102149881526 -644 175 .7518440686975894 -651 175 -.7190824223915377 -682 175 1.0933146222172752 -692 175 -.6946820253400404 -704 175 -1.8455560928041022 -742 175 -.7434733271835128 -761 175 1.0206378594469308 -763 175 .008496589351123726 -766 175 .789594814276866 -777 175 -.7363999080264879 -779 175 -.6613429067167992 -806 175 -.45020785988028805 -816 175 -.7180315533345908 -829 175 -.530320503783026 -832 175 -.43466804524554853 -841 175 .19436171435122127 -850 175 .5532309244775063 -868 175 2.2840071405574993 -888 175 .5760950853586915 -914 175 1.2637889242717706 -920 175 1.8066177451699774 -922 175 -1.8031233376548883 -937 175 .7586163101792305 -954 175 -.7452116178030862 -969 175 -.232386255373699 -972 175 1.1355429454268757 -973 175 -1.9501906730260046 -981 175 -.77269701315359 -992 175 .8956275054436171 -5 176 -.5407401871307721 -34 176 -.17317378189843968 -73 176 1.0134610868592802 -77 176 .19509233161910405 -85 176 -1.75263208557893 -87 176 .6367596910245822 -96 176 -1.6468653157982078 -98 176 .2875393371205288 -113 176 -1.1531207306191265 -131 176 -.2281452654803456 -152 176 -.6489670757946937 -158 176 -.7216016226027346 -169 176 -.5465243163630853 -171 176 .40689178975285495 -197 176 .9108661451287917 -202 176 -1.5981182539352161 -212 176 .928886730403171 -231 176 .6577023873757447 -246 176 -.814751204764443 -252 176 .17491093440207803 -279 176 -.08510328423095054 -291 176 -.0943143584260197 -322 176 -1.4406444534291203 -346 176 .652685360951895 -348 176 -.3911077311279991 -356 176 -.0051968183690037015 -358 176 -.4318605460281046 -365 176 -1.0358646159109706 -369 176 1.1348960506863792 -375 176 1.207581307283569 -381 176 -.5451299538705198 -382 176 .11630926856922162 -390 176 -.2731962904262003 -410 176 .3103749503896692 -416 176 .4575478095436175 -417 176 -1.0722483810890822 -419 176 -1.022345415220928 -420 176 -.06919960151113563 -430 176 2.0706310763282363 -434 176 -1.1334091302152467 -435 176 .8408086630268875 -437 176 .28746378570682457 -443 176 .18452106616094174 -455 176 -.02252044512593615 -459 176 -.005713480101481757 -482 176 .6213980056307212 -488 176 -.0802172943673577 -492 176 1.5643229162650756 -495 176 .8222667665515587 -505 176 .06004427528198095 -517 176 -.32492653216781897 -531 176 -.20113326382671157 -536 176 .9194833197594245 -548 176 -.14293140346324734 -563 176 .40337239996369156 -570 176 1.727369235025797 -585 176 .8334012948380218 -599 176 .21534884712952498 -609 176 -.4565676791271571 -623 176 -.7340873791842251 -628 176 .3166399218796656 -642 176 .005510571546618069 -653 176 -.2849009970982007 -682 176 -.5507413104929059 -698 176 .896983016854024 -720 176 -.05370212307267383 -745 176 -1.0733678333192742 -764 176 -1.27742623709858 -785 176 -.12337707801750225 -790 176 -.1088205945136633 -804 176 .03123118871496383 -806 176 -.20601163218740073 -809 176 -.20681943146181256 -812 176 -.5770355905278318 -813 176 -1.4798710302026183 -819 176 .8380636880742798 -822 176 .2967522370280756 -825 176 .21799368440186676 -826 176 -.20162916410447634 -829 176 -1.2114661392687978 -830 176 -.6147121060594937 -844 176 -.017672616692917614 -847 176 -.14958571958794803 -857 176 -.6414480070084402 -863 176 -.6201270720957516 -865 176 .4420148476801224 -867 176 -.9751027103958144 -871 176 -1.5101699090108605 -897 176 -.8862516506525007 -928 176 -.5435643364830525 -952 176 -1.0365392011129249 -954 176 -.1389261729753558 -964 176 -1.0210321256375536 -966 176 .6450601035984825 -967 176 .39552682762075986 -990 176 -1.1694321658285987 -994 176 -.5051241523863985 -2 177 -1.1212961763452067 -6 177 -1.1817384329936935 -13 177 .9590988160098702 -29 177 -.05613104937710414 -37 177 .2437863303395632 -42 177 -.6029107674876243 -43 177 .7891790454241788 -55 177 1.6103173913969266 -61 177 -1.9322655097569583 -77 177 .045637064280446726 -84 177 -1.4105340858707338 -89 177 1.0957032733726964 -96 177 -1.8270922683901178 -100 177 .4237529676290671 -107 177 -.7582001797608012 -120 177 -1.532010799345254 -121 177 .04522599431244914 -124 177 1.6256463173670173 -135 177 .5341138007335186 -172 177 -.09151118207993564 -178 177 -.05754589201201577 -191 177 1.1705906790753944 -199 177 -.43174950702790915 -207 177 -.8512825277081227 -225 177 -.5045888116276435 -233 177 .5105218201835525 -240 177 2.544766989089007 -247 177 -.5920396157932656 -251 177 -.4660935207129714 -258 177 -.2391373093825728 -267 177 1.8602584421343933 -270 177 -2.554054102391501 -279 177 -1.4309054297649564 -284 177 1.3196130905541552 -286 177 -1.227637715297211 -288 177 .014196008204872233 -299 177 -.42670189302191885 -311 177 -.8382775963308374 -327 177 .0010223828940229829 -346 177 .3931664171817081 -357 177 -.3110417818513948 -373 177 -2.655447430488269 -374 177 -.77562505021812 -377 177 1.3505171369543112 -383 177 -.07904575223683485 -392 177 -.21827263006091957 -402 177 -.4754513680553264 -407 177 .9874097469199183 -408 177 -.9460940091851873 -410 177 1.4413486810164529 -417 177 -.21188575257736672 -420 177 -.5404969754749736 -430 177 3.113428619132783 -431 177 .8970339317165277 -445 177 .5277168650550608 -466 177 2.0787828664488432 -471 177 -.05810541032291325 -479 177 .7383123856400122 -493 177 -1.7620495422780322 -504 177 -.8984007398032349 -507 177 .3263647400370849 -509 177 -.21018557900250773 -513 177 -1.5575110342011873 -515 177 .7170076405070823 -529 177 .05970396738945691 -535 177 -1.9622555150460177 -543 177 .7111745430440322 -546 177 .9459204023270118 -565 177 -2.0437138106570627 -568 177 -2.203904589397484 -571 177 -.06511390041202673 -584 177 .5665278188803091 -593 177 -1.2410710543814651 -600 177 .11547876818993666 -630 177 .3446072305857126 -646 177 -.13704554448897874 -647 177 -1.872501369226759 -648 177 -1.7431907922071188 -650 177 1.1703505328760182 -658 177 .7049128439629809 -672 177 .46524630923718996 -680 177 -.26152260072510525 -685 177 .6095577593373798 -689 177 -.37094017769612814 -704 177 -.07203583859747605 -708 177 -.9431170132665019 -711 177 -.25521310975771594 -713 177 -.20330448413547042 -716 177 .21828777466486332 -734 177 -1.300004216831886 -736 177 .028400849385755253 -742 177 .5886963569336996 -745 177 -1.4213299571598372 -748 177 -1.3677521366452434 -751 177 1.1085153768668508 -758 177 -.04352361533690511 -759 177 .9062335157000849 -760 177 .13613511561201677 -762 177 1.056268418569065 -799 177 -2.140680030310513 -822 177 -1.0012873481655207 -835 177 -.6789913597099771 -845 177 1.0814186154102887 -868 177 -.6792571555174726 -877 177 -2.753894777908631 -879 177 1.5104698826037521 -883 177 -.7803882752946671 -889 177 -.5406414901711069 -897 177 -1.1135348889847632 -901 177 .1882931551010424 -912 177 -.11835723040677251 -920 177 .6580433034303854 -923 177 .06155444488856185 -940 177 .28718062070623096 -958 177 .004335975495168259 -960 177 -1.4933440206223436 -973 177 -.12685262505963493 -985 177 -1.4492951599109585 -998 177 -.7697206105502035 -1 178 -.17338339684964932 -10 178 -.7141885107880662 -22 178 .2520371758959394 -26 178 .7644111013874172 -27 178 .23372514766049074 -40 178 -.17630090337819818 -64 178 .5279643716591933 -71 178 .10823971923974096 -77 178 -.02506202390945428 -81 178 1.432965744653126 -83 178 .003062181724586041 -86 178 -1.0048418368222138 -91 178 -.5048226310079204 -92 178 -.14658810379767812 -98 178 .37924222212683556 -130 178 1.2261514988170585 -166 178 -.7449636134398382 -177 178 -.5962211229733344 -187 178 .39258890680427927 -190 178 -.6998256988101428 -210 178 1.4111329926528497 -217 178 1.8430701940379484 -227 178 .8060443806457314 -231 178 .23804180209499914 -239 178 -.9659689515723953 -247 178 -.14521000897636552 -271 178 1.4928464202144627 -305 178 .4657878221764101 -321 178 1.4560225749685076 -339 178 1.6341978410688378 -342 178 .317692206461499 -345 178 .40361165584753456 -353 178 .03065396502263268 -381 178 -.5675263501795276 -406 178 -.4664223328560843 -407 178 .42643629646914855 -413 178 1.2949189148142197 -415 178 .03186291141678768 -422 178 -.5507152119574794 -425 178 .6873583317043503 -428 178 .15690692219690144 -430 178 1.0000492079777314 -444 178 -.8109688254623912 -448 178 -.2797020465841429 -449 178 -1.1418041533869205 -458 178 .4834678941854206 -464 178 1.0743755786509774 -484 178 -1.1961907213724563 -500 178 -.46989497525361096 -501 178 -.890008261260819 -515 178 -.6872354957265471 -534 178 -.008075287028181923 -550 178 -1.1134483716022765 -551 178 .7394933322028637 -557 178 -.47224485925122817 -571 178 .16448535656996185 -582 178 -.26690350478412095 -597 178 .25228653175570526 -599 178 1.8630718968572975 -601 178 -.3341126354922709 -607 178 -.4793360485305024 -621 178 .37432416891926884 -635 178 -1.4922103029460234 -654 178 -.5718389213631953 -660 178 -.5793469611047366 -661 178 -1.5330506018476164 -668 178 .4212047465107196 -679 178 -.9181765507193534 -684 178 .6816987011565572 -698 178 .9593179290151146 -704 178 .07191552377151217 -707 178 .4079929173372399 -716 178 -1.0017614742033873 -731 178 .12962797514708532 -739 178 -.23495615091553174 -740 178 -1.7433583580901943 -744 178 1.1756448763664678 -755 178 2.192443712054246 -773 178 1.2695922518115337 -788 178 -.49873593332008226 -803 178 -.1652959639558791 -818 178 -.060063682867404544 -821 178 -.6234856032010483 -824 178 .11848705937586189 -826 178 .613610459059683 -835 178 -.7054974975143579 -842 178 .9948408944437012 -846 178 1.0540686774448766 -852 178 -1.2950010645532946 -870 178 .31382333767861303 -876 178 -.5979721418025583 -887 178 1.0067363740621977 -898 178 -1.1124825683496675 -913 178 .587785811664294 -918 178 .6499560586986933 -924 178 .5248850026008912 -946 178 .2326969245789564 -953 178 .9613359662740182 -963 178 1.5691156249237777 -985 178 -.48021926011169286 -987 178 -.7412288697451 -988 178 .4190537854853426 -990 178 -.7735318798887023 -991 178 .48642349672640617 -992 178 -.10480886542310433 -998 178 -1.1342345241198484 -3 179 -1.0046412992587759 -11 179 .045764561009130976 -15 179 .053662854450809906 -19 179 -1.2447032989502673 -59 179 -.35874076976613684 -67 179 -.8621125303609443 -72 179 -2.1710710898070373 -78 179 -.6077700415437272 -82 179 -.29471527215996157 -124 179 -.9300786164378816 -140 179 -.15415578481613643 -144 179 1.5698481297344602 -148 179 -.35679261742833707 -151 179 2.036605359130856 -154 179 .07696108756032866 -157 179 1.7654684269817416 -187 179 -2.972916900700173 -188 179 -.9678023156895319 -189 179 .34706122998602584 -196 179 1.125106227982793 -205 179 .05999914927988821 -223 179 1.3282713404751296 -256 179 .18817789849204786 -265 179 -1.831883327841723 -274 179 -1.6664763802616833 -280 179 -1.2820597598224994 -291 179 1.6773270080022498 -305 179 -.3817164538058499 -310 179 -1.2033759133768038 -361 179 1.6124771791296355 -374 179 .9038244622785111 -375 179 .4963808321238191 -378 179 -.5909613927548989 -381 179 -.22000146141685326 -387 179 1.1137936692835824 -388 179 -.3661357611050936 -395 179 .24128451196390527 -396 179 -2.487035662263407 -430 179 .49842151741766777 -432 179 -1.742301262417038 -451 179 1.0099475828828186 -461 179 -1.443020926397192 -472 179 -.05585289793553977 -492 179 -.35378833720663816 -493 179 2.93579716089152 -530 179 -2.4409998702655638 -531 179 -1.526388621293305 -576 179 .2429290108582791 -579 179 -.8410281610193454 -589 179 .07392657018010816 -596 179 .0886418713029587 -599 179 -2.5693692691194774 -627 179 .6473690282321242 -629 179 -.23331064474124363 -643 179 1.3266802624288005 -651 179 -.23699250575195346 -655 179 -.3207839357786472 -665 179 -.9515388656492482 -691 179 -.7157075941391122 -717 179 -1.9995071013975698 -737 179 -.6291532146820664 -747 179 .8153976231912163 -754 179 -.6906935310717679 -780 179 .4275401382666718 -786 179 1.0428499601774912 -806 179 .10973984808382425 -810 179 .336512774735426 -813 179 -.3465984735208958 -819 179 .7116017842146731 -838 179 1.3666287480816373 -842 179 1.2899431781549626 -854 179 .1406703805168728 -874 179 -.7107967283639215 -910 179 -.3962398980992007 -912 179 -.03516756232309286 -916 179 .559882223101078 -919 179 .16083967528672505 -920 179 -.22312594399530566 -922 179 -.5962654958079757 -929 179 -1.5406050577581085 -931 179 .3540509235306354 -959 179 1.7102756083722848 -973 179 -2.3203974138468535 -975 179 .1708785030085808 -995 179 -1.139610368593526 -998 179 .33717697891149234 -12 180 1.809123218090767 -22 180 .31198521415736674 -32 180 1.6761765109341016 -33 180 .7937880749668371 -46 180 -.07014911537886392 -61 180 -.2550789432745187 -66 180 -.6722878342809073 -72 180 -.2981112339401287 -80 180 -.4281956955798785 -86 180 -.5267921319349829 -87 180 -1.8201033318918987 -94 180 -1.3930842069557674 -99 180 -.03447758310889232 -102 180 -1.7435491922918485 -103 180 1.7101223183939984 -133 180 1.951979070433366 -146 180 -.48515659119601295 -162 180 1.233029438600554 -163 180 -.3377144924989628 -173 180 -.024203552509523777 -174 180 -.606271158365207 -185 180 1.1160683307245278 -207 180 .8609898278806796 -216 180 .4057790166680272 -219 180 -.795764430387074 -226 180 2.2084886149314142 -232 180 1.4403603479736038 -240 180 1.0224743470941509 -243 180 .7986819498205194 -244 180 -.48332739023696364 -262 180 2.1372800884216074 -270 180 1.5938442565699482 -281 180 .06788350420233466 -285 180 .7024702949226699 -313 180 -.9059542166718103 -315 180 1.0761397592814053 -327 180 -1.116955094806121 -337 180 1.7151443030084212 -347 180 .8264979984341791 -390 180 1.7494793090470941 -409 180 1.437292344330837 -418 180 .012458561962478132 -466 180 -2.2472566742353006 -467 180 .10596460400606275 -473 180 1.9313231906577106 -475 180 .3962513194646446 -477 180 .30907152238249924 -521 180 1.7530795683273943 -526 180 .9482961749510426 -543 180 -.5947509052468278 -546 180 .3646384124473501 -557 180 -.6229501692129784 -561 180 -.6590789443747128 -563 180 -1.0802459853481803 -570 180 .9693678937319689 -579 180 -.608202603042602 -612 180 .8390875940133198 -631 180 -1.0390337766525823 -675 180 2.236783943634486 -676 180 1.595387927436915 -690 180 -2.1992534065319487 -696 180 -1.3663330140082708 -731 180 -.8704680752428906 -737 180 1.1549858347597832 -743 180 2.8479861078299553 -756 180 .7965786242044314 -759 180 .28124811311153747 -781 180 1.1912959465231094 -783 180 1.3555983463237997 -814 180 -1.1506336858330735 -822 180 .8075552726679782 -823 180 -.8415869761439567 -828 180 -2.0074971489089486 -843 180 .2915888070358993 -856 180 .4200047071824058 -860 180 -1.2790247698547523 -875 180 .2761349525309216 -879 180 -1.2115895054750108 -890 180 -1.6323675082686837 -903 180 -.11055886343442431 -906 180 2.9337697979193833 -907 180 3.0746500084880446 -924 180 .22459563903799376 -926 180 .2801632213396782 -930 180 -2.1914479738004435 -934 180 -.821805898174891 -941 180 .8525308668386026 -946 180 -2.2201570917080837 -949 180 3.0376335124802494 -950 180 -.9237223724137783 -957 180 -.9605085038341146 -970 180 .013138829700498816 -976 180 -.5965085782280376 -29 181 -.2619634524096442 -38 181 1.333012269932439 -53 181 .054245247284514506 -57 181 -.6906383095342149 -60 181 .7416339956701916 -61 181 .5572297433400939 -63 181 .08047139034603856 -73 181 .6490885913792559 -78 181 -.1549299654333114 -94 181 -.47702062186801014 -95 181 -1.3751021611135492 -108 181 -.8629984050348588 -112 181 1.8133178888360004 -128 181 .791871041502107 -140 181 1.8606917063074018 -145 181 -1.3945692330785688 -151 181 -.6785546662204391 -159 181 1.9865515717581017 -164 181 -1.4608689588531147 -170 181 -.021322317271468202 -180 181 -.5049617140787125 -187 181 2.321219599384084 -190 181 .28976699097716324 -191 181 -.8855339719533332 -200 181 -.5992743740574014 -210 181 .8602877413692145 -221 181 -.9382782075583205 -232 181 -1.8155001261119437 -235 181 -1.2421410677627596 -249 181 -.3189685351122155 -253 181 -.9312872153345995 -254 181 -.530044179251547 -259 181 -.44740672870064124 -283 181 .5606418912476229 -287 181 1.194145712489218 -304 181 -.005788760677124763 -312 181 -.7114171792142917 -315 181 -.8646779043548249 -317 181 .6472405210903847 -318 181 1.1133557905321647 -324 181 1.812285116260096 -336 181 -.71847862420731 -345 181 1.1324820490625434 -349 181 1.9077059711618822 -361 181 -.6632894062308009 -389 181 .0005046075473788825 -391 181 -1.498132674591779 -402 181 -.643911170944482 -413 181 1.8098049910270058 -442 181 1.2306931061328645 -453 181 -2.435498832007787 -456 181 -2.027518615480353 -475 181 .0061608467095375305 -477 181 .1466930379514566 -481 181 -1.4103643238797363 -502 181 -.7415729503912298 -504 181 -.26961628040204044 -512 181 -1.3992102941256104 -538 181 1.5141592826510892 -541 181 .17470776219073753 -547 181 1.1782962615309758 -549 181 -2.062421040444007 -575 181 -.963960919986816 -591 181 .15658831607656865 -596 181 -.36182311617243257 -637 181 1.427605162043824 -660 181 -.9375322388100659 -664 181 .48291951067486955 -666 181 .6606450457865685 -698 181 1.0087013942534575 -715 181 .731672129103615 -732 181 1.1008664009282831 -734 181 -1.2832723654667584 -744 181 .9634505585270416 -760 181 1.2679453434106547 -780 181 .5324126893467481 -784 181 .6771316367573643 -813 181 -.9204930779647974 -857 181 -1.971045925007219 -860 181 1.4756057718625186 -862 181 1.2161113380416388 -879 181 1.1760236302555687 -890 181 -.31337198288496027 -893 181 .2943703993415774 -894 181 -.7482345756996731 -903 181 1.2692773122573433 -917 181 1.0959080446538592 -923 181 -.3401715073674866 -931 181 .7812768118433271 -940 181 .44303572636597416 -941 181 -1.359837829989989 -958 181 .23638083422398135 -961 181 -.23564172771430575 -962 181 -1.4475298838252757 -965 181 .21440089619132302 -973 181 1.2164942941631276 -974 181 .47086447781952384 -991 181 .7437825023392692 -994 181 2.1980722591070876 -999 181 -.017349120317669636 -3 182 -.8661636602247706 -10 182 -1.3910861736005766 -11 182 -2.2172140101567335 -16 182 .789013443480728 -60 182 1.5211629078768956 -91 182 .07261009645333746 -110 182 .2253234377719996 -116 182 1.758402451458091 -127 182 -1.3998671431162868 -142 182 -1.9815666383759816 -144 182 -1.7993907920399037 -145 182 .14764713464573143 -149 182 -2.005126016877149 -150 182 .7847881236375568 -154 182 1.791294038433855 -173 182 -.3544512997405975 -179 182 -1.072206602668798 -182 182 .5788786162523345 -207 182 -1.700194540896565 -209 182 2.5378658989321634 -214 182 -.6453902945691555 -219 182 1.3713912120335452 -221 182 1.845444283128154 -227 182 -3.3006907374588597 -228 182 -1.6427364691574973 -237 182 1.7508129207751981 -239 182 -.5753652077929129 -242 182 -1.8534842096146442 -243 182 .2608089699762409 -244 182 -.43864397469920297 -268 182 -1.43376079136089 -269 182 -1.3880092821872612 -279 182 -.4546009071623333 -294 182 .4719422884654905 -309 182 2.2831802503028142 -330 182 -.4939112993834399 -331 182 -.506529449268651 -354 182 -2.24151565836698 -361 182 2.2010109632528 -369 182 -.368652728119119 -373 182 -.7011117316436744 -378 182 .5311014764259607 -387 182 -.04382974100658843 -395 182 1.2933676555601992 -409 182 .5143765604536281 -418 182 .13725021663285 -432 182 -.05305618476770443 -453 182 -1.761441429212857 -459 182 1.3837539215832397 -480 182 -.36527197919646626 -488 182 2.452937759976287 -490 182 .4291439188982494 -514 182 1.053631756424222 -520 182 1.0091982123140513 -522 182 1.8996411338524781 -523 182 1.1023704506023808 -529 182 .20521220739589408 -534 182 1.3432571348859896 -540 182 -1.3676436517358406 -544 182 1.1934331415039054 -545 182 .0851247629277971 -556 182 .8430513115495614 -567 182 -.4975202728700756 -572 182 -1.722586822933378 -576 182 -1.9930421853010385 -586 182 -.5958999104404756 -619 182 .2341912716388424 -622 182 .7945988049349199 -623 182 -.5332063236143144 -626 182 -.7675969356761758 -630 182 1.299745491963313 -634 182 .0530954085661576 -674 182 -2.0522502824497275 -683 182 1.293934766629691 -685 182 2.3383792086639708 -689 182 2.235690111104923 -702 182 1.6797283253928528 -715 182 1.0492430200720022 -720 182 .560955901456544 -721 182 2.078791505502977 -723 182 -.2689931505798347 -729 182 .17412136674432085 -731 182 -.337249688518441 -738 182 -.6873978740964677 -754 182 -1.5585735443511186 -755 182 -1.3294332285958328 -756 182 -3.230083195728194 -786 182 .34390996683830044 -809 182 -.2824311632294537 -812 182 .36675219335905074 -814 182 .40768751425301547 -821 182 .8905541468454077 -823 182 .4267401777250781 -827 182 -.7672306419412007 -832 182 .9965358806595992 -841 182 .45533348801194373 -842 182 -.5114141968051 -847 182 -1.0605970185950633 -850 182 -1.5609420029241812 -852 182 2.0345885544647646 -867 182 -2.3998828546683884 -884 182 .10940273901667696 -893 182 -1.4922921288696378 -898 182 1.4505105940775866 -901 182 .3032113000545162 -916 182 .018204661452383586 -926 182 1.1869579776542043 -927 182 .7541682746087837 -931 182 1.753278137803985 -937 182 -.9125796452985817 -941 182 .8785510816542841 -947 182 -.14255015410975447 -949 182 -1.2504891862757126 -958 182 .36381724105904156 -960 182 -2.0089302596729413 -966 182 1.3258001038872758 -974 182 -.24345497499960425 -989 182 2.271103004873031 -15 183 .19289045925386375 -19 183 1.7202631328004419 -30 183 .247628856361305 -33 183 -1.6297798864513486 -44 183 .9482742101947826 -58 183 -1.4077909692928765 -66 183 .9292744621364907 -70 183 .8211251743807915 -75 183 -.4909678502246177 -79 183 -.2141438088626066 -99 183 1.3335676275250121 -103 183 -1.9927044631476059 -106 183 .33139739619763836 -108 183 -1.0535685455987387 -110 183 -.3190492012320309 -115 183 1.4356460699920752 -120 183 -.9748344256047848 -122 183 -.08853590757956636 -123 183 -1.2472087361887365 -138 183 .4424865527606742 -156 183 -.22997661096738442 -157 183 1.069875239239618 -158 183 -.029784579955512508 -163 183 .08941091141170689 -164 183 -.7141584423141145 -172 183 -2.0053411268973944 -181 183 -.5450083414198554 -182 183 1.380011864118711 -221 183 -1.1858478653454771 -236 183 -.1565853987287629 -246 183 .23457612820692927 -258 183 -1.0766324599807857 -324 183 .8629812231126939 -328 183 -.934996483700105 -341 183 .11645756681201981 -358 183 .7930238736151806 -362 183 .3930049246409599 -379 183 .12493888827706848 -381 183 -1.1005003977341725 -398 183 .5508737507435755 -399 183 -.4663301128567623 -401 183 .17498218836211205 -414 183 1.0606995640035974 -440 183 .4767140334657287 -468 183 1.1237090341092095 -483 183 .5807658583320494 -490 183 -.031185503743944423 -491 183 .19980150313886785 -510 183 1.1119871046751941 -532 183 -1.4562615245800465 -533 183 -.3546011056353549 -543 183 .10852781221367072 -549 183 -2.009988583659263 -583 183 -.6865422117564312 -598 183 .4187561016139071 -599 183 1.9194028062815809 -603 183 -.0456006856770458 -605 183 1.143009479880806 -624 183 .9010262655461483 -629 183 -.6180746027384602 -635 183 -.039866785684959494 -653 183 .3901107519462538 -656 183 -.8100853219344368 -659 183 .11135659041215488 -661 183 -2.6365705167215614 -669 183 -.9136861449007457 -725 183 -1.3327451075776517 -726 183 -1.1995731082182033 -746 183 .1382258702182253 -750 183 1.352485435103924 -765 183 .7958197886604877 -776 183 -.35660506602435216 -794 183 -.6449198356470562 -796 183 1.8383670146345066 -818 183 1.5678684271916958 -827 183 1.9806167006405853 -837 183 -.8423064727621407 -839 183 -.4684331388399997 -841 183 1.2323380251814344 -842 183 .36163021984299 -846 183 -.24155205037435512 -847 183 -.30475909157755454 -855 183 .2182497882309356 -865 183 -.5550092495433838 -911 183 .25861604851421405 -920 183 -1.0672644990802622 -942 183 -.15504691032829188 -948 183 -.5594088231093476 -952 183 .2265243024499192 -967 183 .23150318694714875 -996 183 .05886550314516435 -998 183 1.470518540465525 -24 184 -1.5737427484894655 -27 184 .926242722993507 -31 184 .19959517499140905 -38 184 -.3012703101268941 -48 184 -1.4995367691984054 -78 184 1.8854794420503134 -96 184 .6827730142080114 -143 184 .06397397722648893 -148 184 -1.2187736209198559 -166 184 .6606461249719238 -173 184 .27219948072130395 -187 184 -.8128064242698836 -188 184 1.8402490442687824 -192 184 -.13343090747387384 -220 184 -.21308326160310853 -229 184 1.5951786618774568 -252 184 -1.3896877770634752 -273 184 .47889167553398876 -281 184 1.3442058255739149 -283 184 -.19554418126946282 -284 184 -.9075345564911806 -291 184 -.5874836438980328 -294 184 -1.1426813578602861 -298 184 -.3503022216119698 -329 184 -.2615722145685151 -349 184 -.630270032345868 -350 184 -.16621149316428557 -358 184 1.4362908744668437 -371 184 -.10280975915591006 -375 184 -.7923256581891784 -386 184 .06521995244476979 -387 184 -.4844669606133999 -397 184 .68274977388064 -399 184 -.9634520100311782 -412 184 -.9577601468598251 -421 184 -.6572447820167997 -422 184 -.16693810956156446 -425 184 .9262533993253927 -437 184 -.6385032149949187 -440 184 1.5559924155774598 -445 184 -1.5008284264779859 -465 184 -.9172424812234566 -479 184 -1.5313433768898195 -494 184 .30554276729561813 -496 184 -.7054197838771603 -499 184 1.019128547044244 -520 184 1.9865586619624933 -530 184 -.06012132770839125 -535 184 .9524760013893456 -536 184 -.02592864764592001 -543 184 .20279250003936738 -545 184 -1.4321323065066314 -558 184 .2452673388379119 -565 184 2.1002894077394894 -568 184 2.591956381367091 -580 184 -1.8672172493447017 -582 184 -.4220650575275748 -590 184 -.7905825909166089 -598 184 1.7240923167301105 -616 184 -1.031656768338672 -625 184 -1.874356686416645 -628 184 1.4909393975468312 -635 184 -.3083058020634713 -640 184 -.2906675489017184 -654 184 -.9590589587323035 -665 184 .4813716003973937 -686 184 -1.4204565679230474 -689 184 -.7868964564881107 -694 184 .8061809482118206 -700 184 1.3278552330989237 -701 184 1.7522291254756173 -705 184 .11317730577474085 -713 184 -.3094846801716714 -722 184 -.23136045907420008 -727 184 .17321408446103626 -779 184 -.7863210640292024 -781 184 -.5711581378957129 -795 184 .4626280614300835 -819 184 .8331045859188418 -841 184 -1.2791859067102047 -850 184 .22721871956731032 -853 184 -.32723561175285293 -857 184 -.15548711579312688 -872 184 -.5465205927539708 -873 184 -1.5171441170783118 -877 184 1.2135432712086525 -887 184 -.07366731090422754 -889 184 -.4752397681123423 -910 184 .7995406221389381 -933 184 -.9382021982670864 -938 184 -.9002214853271444 -944 184 -.4620529748204316 -946 184 .27874453538175936 -960 184 .8601896032297076 -965 184 .2628342251541172 -969 184 -1.1287514266648715 -977 184 -.5128408188613408 -979 184 .025075048216458007 -981 184 .77403688480442 -984 184 .7236082818739148 -987 184 1.2422351015177786 -988 184 2.1784549449384385 -997 184 -.7956008327574065 -9 185 -.5705144912374964 -15 185 -1.3723046701790038 -23 185 -.8196153998192931 -32 185 .46001182570223476 -33 185 1.2372003965998972 -36 185 2.172633961090739 -51 185 -1.7010759030196434 -53 185 -1.4032735400137835 -66 185 .994365363780049 -68 185 -.7091742618980043 -77 185 -3.2850877170121002 -78 185 .25730594393600403 -112 185 -.288847268206242 -118 185 -.2650710321851628 -124 185 .42573971092508134 -126 185 -.26700776328795317 -142 185 .7823399192617446 -149 185 1.5468072749746433 -155 185 -1.296531173544244 -191 185 .7916985059282384 -194 185 -1.720819860672996 -228 185 1.1332923481126893 -249 185 2.2412885346422264 -255 185 -.3237939581625016 -258 185 .010911167092035254 -264 185 -.3235640973776623 -269 185 1.0409380548807146 -274 185 -3.511712755642492 -281 185 -1.366239591715727 -292 185 .49036929237765076 -294 185 -2.1726531348481237 -296 185 -.9827592154226235 -297 185 -2.8254857948037126 -298 185 .8087389440814461 -301 185 -2.3738502852208403 -323 185 -1.0418680163781224 -337 185 1.6703765339058154 -345 185 -.268421534405473 -355 185 2.393110136432027 -359 185 -.7411578386971809 -360 185 2.129931534861633 -382 185 -1.199459279781783 -391 185 -1.337750876547679 -402 185 -.6567656355866454 -403 185 2.662621464182117 -407 185 .5996250411774957 -418 185 -.8775829141415962 -421 185 -.8902274985970876 -426 185 -1.669330010803124 -428 185 2.0168954759627797 -433 185 1.764638863985392 -442 185 .3198373279444642 -444 185 -1.471157960829391 -445 185 -.21162617889343277 -449 185 -.9075382423460505 -454 185 1.2581841932023525 -493 185 .05895607151380086 -505 185 -1.4317298731749915 -510 185 -1.5719646312136233 -511 185 -1.912392967821864 -538 185 -2.307456553557749 -548 185 .529658928112812 -555 185 1.1489340113315654 -557 185 .6171064288294736 -559 185 2.0566732789208384 -605 185 -1.2664508746208476 -606 185 -.36253927844075096 -614 185 -.1963592216081546 -619 185 -.2731960093904772 -626 185 .6288517896377022 -631 185 -.41247144350260884 -632 185 -2.2038817119112672 -649 185 -.5029335712864306 -684 185 .42441549891364955 -694 185 .3700317823032963 -700 185 -1.001520611280885 -706 185 -1.9721178791771956 -707 185 -.261179150479047 -709 185 2.377373849347038 -719 185 -1.3842165724791498 -734 185 -.5805272469841151 -747 185 .9824674775861244 -760 185 1.790961237166401 -761 185 -.037895439252467966 -795 185 -1.6235517499027519 -829 185 1.2580109592682132 -830 185 1.18672052910589 -835 185 .9218657027718653 -841 185 -.037243147342623184 -846 185 1.2635280677325962 -857 185 1.6121772913663963 -904 185 1.1724653063133852 -913 185 .8351154426988622 -936 185 -.9976172463801848 -939 185 .12313305648118258 -946 185 -2.937423547952891 -958 185 -.9325250632026171 -968 185 .49027744627791514 -970 185 -.24792329985104278 -982 185 .731317717359057 -9 186 -.6739970238053579 -14 186 1.2552244387226588 -16 186 -.09114868923503709 -24 186 -1.4313650727618707 -25 186 2.4816316533269815 -31 186 -1.3565880790872884 -33 186 .09337338417383924 -69 186 -.6912683024001448 -79 186 -1.581949842971693 -97 186 -.795220305980923 -116 186 -.4354445924977348 -135 186 -1.73855055780035 -137 186 .5119816363294638 -183 186 .34613148457370735 -199 186 .11893734257236922 -203 186 .40961071310513936 -239 186 .16951913934581817 -248 186 .5540694584314882 -249 186 2.294075333178453 -261 186 -1.0085361292344375 -265 186 -.7439906767780966 -313 186 .029665506146114563 -334 186 .5606044977258472 -367 186 1.4494833309611117 -373 186 -.10840325536726612 -391 186 -1.6029391719600858 -400 186 1.1121153941187567 -402 186 -2.0426847277359883 -412 186 -1.333864890378751 -424 186 -1.5084612977260672 -443 186 -.3731246275030391 -445 186 -1.7949825403116448 -447 186 -1.8579083424959395 -450 186 .9479011153332243 -482 186 -1.6660825985840653 -484 186 .8622376834560644 -487 186 -.3572716323461114 -491 186 .12826063460117373 -494 186 -1.656496595541788 -503 186 -.2227070059613332 -515 186 -1.6469706574600314 -520 186 .40889640426685364 -532 186 .11605213364012353 -542 186 .8020790838660616 -552 186 -.985124484904048 -555 186 1.0898528490558252 -567 186 .6082735975934994 -576 186 1.2337595775763897 -585 186 .9305617287585018 -588 186 -.3233811494422179 -590 186 -1.5934555266597565 -593 186 .40871060238610146 -658 186 -.08382925392069543 -660 186 -1.5800313113532574 -664 186 -1.0815836056679333 -682 186 1.5611616899554086 -693 186 1.3864908621646261 -703 186 -.2026619358704329 -712 186 .031623486059463746 -734 186 -.34332828264814685 -746 186 -.1262502278017698 -762 186 -1.913930621914939 -781 186 -1.271558844696628 -785 186 .5197105264104579 -792 186 -.6398590531867372 -813 186 -1.5627774885389227 -817 186 -.8327175625900922 -829 186 2.3224559372754308 -852 186 -.4588624519743977 -881 186 1.4229116608464432 -893 186 -.11264340101163599 -912 186 -.6854751921308619 -915 186 -1.2474505196024606 -927 186 -.4548008032431564 -938 186 -.050791753532557646 -941 186 -1.582963838576196 -953 186 -.30373688550437394 -967 186 2.157295564162215 -980 186 .15851982800846304 -986 186 -2.032072664864392 -993 186 .26027126095739794 -995 186 2.4620083643443245 -3 187 -.434933028769047 -6 187 1.0484741835932654 -11 187 .4060426737636097 -13 187 .8645348498375105 -17 187 1.1323067727398297 -25 187 -.6157858207105718 -29 187 -.03595834249391883 -51 187 -.12190641750941543 -71 187 .46911961847996647 -72 187 .5563125647593069 -74 187 .23238725037067667 -77 187 -.6913542237728431 -89 187 1.6315355626707573 -97 187 .008779075975804684 -121 187 .7164381938892791 -127 187 -1.9921426526891621 -137 187 -.6030571403708326 -144 187 -.009037140220183842 -148 187 -.8325339691987389 -155 187 -1.1674931062963303 -159 187 -2.2165899705343146 -165 187 -1.284556374722091 -169 187 1.0984178602741568 -179 187 -.20759442946894083 -193 187 .5085728098163305 -198 187 .5714980180992328 -229 187 -1.3137129081263523 -237 187 1.602977602333818 -243 187 -.39189918200727203 -258 187 .49468306407436097 -267 187 1.8352878967359247 -295 187 -.5731194663055752 -321 187 -.9919631385943378 -322 187 .19353381760646396 -329 187 -.43226733807717965 -331 187 -.4907584542393837 -338 187 -.8194607725330229 -349 187 -.22843928960879747 -355 187 -.36525657003712764 -369 187 -.49332933477455715 -375 187 1.316344056185354 -406 187 -.8807887932620706 -407 187 .4689250566568971 -416 187 -.43969306135184294 -421 187 -.4926065568684212 -424 187 2.1201932816925178 -425 187 .8416446424516221 -428 187 -1.492144323645289 -438 187 -.7065431162488097 -440 187 -1.7536375455885973 -442 187 -.5916768423370935 -443 187 1.2402953944156045 -445 187 .6740965425077211 -450 187 -.6321759744343385 -464 187 -2.6883010978115633 -465 187 .8750395650624287 -490 187 -.7984175388112269 -510 187 .5513484010297627 -531 187 -1.494339301599263 -566 187 .6202177131251565 -577 187 2.232312647307089 -581 187 .982722810205066 -611 187 1.0978474823687787 -626 187 1.229523919152362 -639 187 -1.1122234670754434 -653 187 -1.1017625524478922 -674 187 -.5217025486798864 -675 187 -.5629604949268074 -677 187 -1.0234724568225049 -685 187 .1576328465516821 -709 187 1.5405704922381296 -756 187 -1.9951086537602272 -763 187 2.241588352356839 -765 187 .28489762338040137 -769 187 -.19466855058192623 -776 187 .8410956713194332 -778 187 .8809730925425306 -797 187 1.6575811222502224 -799 187 .4843115648497504 -810 187 1.8806852103034308 -814 187 .8935857045261548 -824 187 .8298577562850467 -851 187 2.3231670504424096 -864 187 1.7966070678770678 -865 187 -1.0853684310144303 -866 187 1.0187862453667045 -871 187 .8099200214983321 -876 187 .9711890600704698 -879 187 .28740158261638754 -880 187 -.07980532871555036 -882 187 1.2098598956080222 -885 187 -.9241060436569452 -890 187 -2.0469794834681525 -893 187 -.750442709418738 -896 187 1.5384112673323471 -904 187 -1.1908565218092255 -922 187 -1.711809579520534 -959 187 1.9961241819997937 -978 187 -.42245614881037785 -988 187 -.7315406255283782 -991 187 -.8817735599102624 -11 188 1.4958620932504092 -31 188 .5239456022814667 -44 188 1.5527893243614768 -58 188 .7248625335682712 -66 188 1.3245173209833756 -67 188 -.03636701052050918 -68 188 -.10986343343918822 -69 188 -.5024679349936181 -72 188 -.4638803129323166 -82 188 .11847826556894021 -90 188 -.20447803125421982 -125 188 -.5072229167207432 -126 188 -.6906452735476121 -130 188 1.456128007972476 -136 188 -.47214044546625655 -146 188 .5875080837648414 -149 188 .9335015656599235 -152 188 .4849229853684026 -156 188 .6706960498422577 -164 188 -.8646187631995672 -175 188 -1.678531696735635 -185 188 -.11718106807280851 -186 188 -.3721407241294503 -195 188 .21987153339013582 -197 188 .42874181270679207 -222 188 .9128447289552746 -235 188 .39962030353549166 -240 188 .6772610882966602 -249 188 -1.127258891767182 -254 188 .5216585163687005 -260 188 -.6507822971530179 -267 188 .8893134319259246 -299 188 .7324487016323068 -302 188 1.7600793941134694 -320 188 .9125596270650239 -340 188 1.1167218549692495 -347 188 -.07091785588870089 -356 188 -.2558386000370936 -362 188 .06775412714126114 -380 188 .706432246846372 -384 188 -.20009582391063835 -392 188 .2504780401008917 -393 188 -.05773050195026187 -398 188 1.1539759502735532 -411 188 .8663305745835498 -435 188 -1.15462783253924 -464 188 .7266523154513194 -469 188 -.06973525687249471 -494 188 .5447770772227797 -497 188 .10892599144399306 -498 188 -.21399950467364703 -507 188 .1651603256758533 -512 188 -.43335850897681266 -521 188 .8507566682409448 -523 188 .2330429876606836 -524 188 .515247121276896 -526 188 -.20292719366833686 -546 188 .9083819795762333 -550 188 .9125568289866725 -565 188 -.6015642083698983 -591 188 -.9790601373759614 -598 188 -.2097316795267809 -601 188 .6210091877010941 -608 188 .9748959591312464 -611 188 .04194331738835264 -616 188 -.9014011397462945 -619 188 .17599543661242822 -623 188 -.07292892092012254 -669 188 -.7119509448101969 -683 188 -.9730984068616148 -686 188 -.1454430264262621 -687 188 -.2780085745952009 -689 188 -.409759832868632 -691 188 -.09427077793032611 -693 188 -.3722001253911434 -699 188 .669923338550864 -702 188 -1.090499926393234 -703 188 -.5880864302238886 -730 188 .641503064166268 -743 188 -.35520139261372335 -745 188 .9533212412214123 -751 188 .41562468161398514 -768 188 .3136173995618818 -799 188 1.1439935940326336 -810 188 -.3899474284682428 -814 188 .2323688798654624 -820 188 -.3562880300048771 -846 188 .2708801286819206 -866 188 .12327980136062225 -869 188 -.8041906484477552 -871 188 .339361702092303 -879 188 1.0924922803058201 -885 188 -1.3931244839279129 -889 188 .2046920461611897 -907 188 1.7920894328570487 -912 188 2.1210594626635446 -919 188 -.09219858581656587 -921 188 -1.5592339101910389 -929 188 -1.356068135798858 -933 188 -1.5825788409756614 -940 188 -.7116550329965964 -948 188 -1.018268291980111 -949 188 .9868284167843077 -951 188 .04259437208993635 -954 188 -.7684735684858798 -961 188 .6437601394935326 -970 188 -.38556999471959497 -9 189 .18611889544315238 -24 189 -2.6176689066141132 -30 189 -.3642245067051353 -40 189 1.4462875049310222 -55 189 .6709034877243711 -60 189 .52828349783887 -64 189 -1.131124875473602 -77 189 -.2817180446985602 -88 189 -1.8393543243923165 -92 189 -3.569579676673503 -112 189 -.7990565848987135 -115 189 -.23603416310365577 -126 189 -1.5201995915936242 -130 189 1.969449979537152 -132 189 .8758263451561554 -138 189 -2.2415382812186655 -147 189 -1.162693657515866 -163 189 .6936691409776816 -165 189 -.27450756501551654 -166 189 -1.2106138376486009 -169 189 -.5589997587227387 -171 189 -1.6625597129712912 -193 189 -1.6129763905034915 -204 189 .6005756635224376 -208 189 -.19448920694589353 -221 189 -.9383683531371713 -227 189 .9917357233283574 -228 189 2.402663355297414 -234 189 .5865830908340328 -239 189 -1.5687651764710677 -247 189 -1.0148110076387449 -255 189 -.40161270135355587 -276 189 -.3485180921095099 -278 189 1.7525337400647134 -291 189 -3.201542025210458 -293 189 .05552166762591461 -312 189 1.7188076049938497 -313 189 -1.9484877007315464 -316 189 -.8396332054474768 -326 189 -3.0996340590954534 -334 189 1.2864860951268546 -336 189 .6192234790078007 -338 189 -.5099515514164729 -344 189 -2.1553758066279025 -345 189 .5889355966975127 -361 189 -1.4606346570508508 -371 189 -1.8014370633710042 -372 189 -.6438026278295742 -373 189 -.7836080546078881 -400 189 -.18877725351550334 -409 189 1.2232460073768314 -415 189 1.3487978974652748 -420 189 .8768618547944206 -422 189 1.801729791050468 -449 189 -.5530420857187365 -457 189 2.30208351318581 -466 189 -1.2753943905464822 -471 189 2.171807472540682 -484 189 -.7116675871810448 -494 189 -1.5803805421744213 -502 189 -.932371286054695 -519 189 .8196559476407056 -523 189 -1.0158506740939173 -534 189 -2.8023508646093296 -538 189 .7435251420344187 -549 189 -1.2225756247249853 -567 189 -.8442635893430254 -569 189 -1.1035208103587026 -596 189 -.6705602469666556 -637 189 -.453403243760375 -640 189 -1.6686738396897383 -665 189 1.200904081243388 -672 189 1.5258003968705156 -706 189 2.013636423382799 -713 189 .6333677265084124 -727 189 -.5039576683334186 -738 189 -.5629834903203548 -744 189 2.2818740083417963 -751 189 -.40895061087577433 -754 189 1.4292779967094031 -762 189 -1.443311291806266 -781 189 -.2593741032855414 -789 189 -1.7976893114770958 -800 189 2.1084111768368476 -805 189 -2.3031270338250276 -867 189 2.030708198728371 -878 189 .04724025475446826 -888 189 -1.2695959011710396 -891 189 -.32160220265673267 -897 189 .6075229749566878 -910 189 .30954026072719804 -912 189 -3.0127664487148045 -930 189 -1.002168403708714 -937 189 1.5597600640691873 -939 189 -.7377620633427231 -975 189 .323268291671576 -978 189 2.2068819002203415 -980 189 -.4395425292263502 -984 189 -.7639020612558269 -998 189 .5142821014212742 -8 190 .8397221929711576 -16 190 .5612089287091899 -18 190 -1.4458088690766728 -19 190 -1.08107574709943 -20 190 .598291249393806 -29 190 -.23391466714230247 -31 190 -.43234915531774754 -39 190 -.5597835142972054 -41 190 1.5512683840857322 -42 190 .6012625666151854 -44 190 .6324151038652317 -104 190 -.5444750448937098 -121 190 -.011860047741651437 -124 190 .4187742176943252 -125 190 -2.245317882736277 -133 190 -1.32947211202532 -140 190 .9950438736830194 -141 190 -.008576523619839238 -164 190 -.6770540887594471 -165 190 .4260545242519357 -168 190 -.5293811747281773 -172 190 .347134372258366 -189 190 .5439567963897031 -195 190 -.0918285166292847 -209 190 .2267294129832829 -219 190 1.9578012774767775 -228 190 -1.5848003323398525 -229 190 1.430421837312277 -262 190 -.5557945827054436 -263 190 -.42257237336095776 -284 190 .5589915833934611 -297 190 -1.5235423208000305 -298 190 -.7810731478439386 -317 190 -.9179706542518529 -329 190 .2191050731095041 -336 190 .1909752810481782 -350 190 .9536745816135479 -368 190 -1.022543629770045 -369 190 .8562322748089478 -371 190 .897016098392371 -384 190 -.20620937259048322 -392 190 .06074611921049128 -448 190 .23708934582228663 -454 190 .5505696337624182 -482 190 -.07268532952121165 -484 190 .4787845751230686 -507 190 -.480269726600733 -513 190 .8079870702360072 -517 190 -.09038275881182567 -530 190 -1.4821562113425522 -538 190 -.4158460597711703 -550 190 1.7831287845738162 -558 190 -.22202199255118366 -563 190 .01714268151223683 -568 190 1.1230641050483676 -575 190 -1.2417840018797885 -577 190 -.2497689093847899 -580 190 -1.3774546018490568 -611 190 .7909347647535658 -614 190 -.6589977913313174 -655 190 .19079644279537075 -659 190 1.0028634962266667 -678 190 .48020319710983117 -684 190 -.34715253578482297 -706 190 -1.1255358634270272 -735 190 -.8757458657957766 -744 190 -1.0339423987703091 -754 190 .07065467753128456 -764 190 -.7388676686741203 -768 190 -1.2220786146402347 -773 190 .7538608955347453 -774 190 -1.0462008762116906 -801 190 .028976230240479364 -805 190 1.6835601020781843 -812 190 .28773781833537426 -814 190 -.4243744843555608 -818 190 -1.0315797581878003 -825 190 .1555747270553735 -837 190 -.7646917293774711 -839 190 .18787553508418642 -861 190 -.1620307821222563 -863 190 -.8195774762858498 -866 190 -1.2513437013814863 -879 190 .16272048643624876 -892 190 1.1847598031895659 -973 190 .5054798873258238 -976 190 2.6518833940762905 -981 190 -1.233113646435193 -989 190 -.3532733536578764 -990 190 -2.1883213355635993 -1000 190 -.40704529177389076 -3 191 .712081695114719 -4 191 -.15432220336452282 -11 191 -.3481158719479769 -16 191 .09564134851018297 -22 191 .8656707321158803 -26 191 -.12700111278915888 -39 191 .2193437317489173 -71 191 .28650801203308873 -81 191 .6344686392722674 -89 191 .3007345909200581 -98 191 .15425546292815842 -113 191 -.6195261647262096 -118 191 .10727910297061491 -143 191 -.7276240892101328 -157 191 .02065977756452231 -158 191 -.593132804936826 -159 191 -.394647984680931 -175 191 -.5336570679381405 -181 191 -.2854515133911233 -184 191 -.5628735631324326 -209 191 .08017675439929545 -215 191 .9412478377590084 -216 191 .3383303345690217 -218 191 -.43187681363163544 -228 191 .7795792362097915 -244 191 .5441659719863611 -246 191 1.02683289483799 -253 191 .03107348516819869 -261 191 .37793761998424663 -265 191 -.04730574228022477 -282 191 .5432706804993653 -284 191 .4657627111213658 -296 191 -.2622871149057766 -314 191 .575045618754038 -329 191 1.335314067167684 -333 191 .1027245377160957 -334 191 .6935500223956828 -339 191 -.18505784397847314 -349 191 1.1353743054649859 -351 191 .7368123302931645 -370 191 -.6383683062909007 -371 191 -.39976164976832523 -372 191 -.2847570598094862 -373 191 -1.0814320864414058 -407 191 .6285402936016432 -430 191 .7270469238310576 -436 191 .25641176805624566 -440 191 -.35827405518098965 -484 191 -.38098615849941364 -485 191 -.13157073783195875 -501 191 .7115762708501173 -504 191 -.23928697762050766 -507 191 .7332153462493329 -508 191 -.3819225735556087 -509 191 -.6370272254076547 -521 191 -.15969922441440706 -539 191 -.8518220033580455 -546 191 -.09452974140840395 -560 191 .0895635711234492 -565 191 -.26542022002111476 -571 191 .40088333246273883 -573 191 -.5566976236823062 -580 191 .4204196544397377 -602 191 .36008833681925684 -634 191 -.398140768719505 -636 191 .04951184898859233 -646 191 -.877372760789707 -650 191 -.17000982277885213 -655 191 -.8519412433370478 -658 191 .29231459534601983 -672 191 .15658809832512222 -716 191 .0829444245492266 -727 191 -.6403395978863429 -736 191 -.028188312114815827 -741 191 .5332475255587051 -742 191 -.6053733170345592 -743 191 .9706527361194096 -757 191 -.8636357255597014 -758 191 -.3177758955608488 -768 191 .32721644096856567 -774 191 .355880093475437 -776 191 .3644189113063616 -781 191 1.2597245082795023 -795 191 -.7923235076405387 -800 191 .564439980287945 -806 191 .14015140322765465 -818 191 -.2626243967372436 -820 191 -.36079762775393087 -823 191 .0663585025225108 -835 191 .17520531977752077 -838 191 -.7873412554004995 -840 191 -.5570720448323782 -847 191 -.5366985074478481 -851 191 .3574349927274204 -861 191 .3109083129007929 -862 191 .313875286068374 -869 191 -.48877356845118025 -871 191 .12882759293203344 -872 191 -.3108280462995665 -896 191 .5025796101959152 -912 191 -1.451046185731815 -921 191 -.545280932694339 -923 191 .3319985907923392 -928 191 .3815738372932463 -930 191 -.38834039479697124 -969 191 -.26345417398459336 -988 191 .5330574736491253 -1000 191 .4859888281680103 -23 192 -1.0023607295451522 -42 192 .052624744351295306 -50 192 .12842633292158498 -56 192 1.9311528020737738 -58 192 -1.4362962515054873 -62 192 .36532707675328013 -64 192 .9199312324556302 -71 192 -.7979500145309529 -76 192 -.3791620613163679 -88 192 -.4861849479720493 -90 192 .692039635046937 -92 192 .0920123736605555 -99 192 -.6716559399058242 -131 192 -.8110709818497915 -133 192 -.19371072766658193 -134 192 .8202028631532721 -137 192 -1.262573318081498 -139 192 .13023257327508747 -149 192 .009053294042677795 -154 192 .7977141574325659 -163 192 -.8434219906307913 -167 192 .21263833095342946 -175 192 1.8212353999800048 -216 192 -.5347685740899905 -217 192 -1.8235494957281915 -233 192 -.023823351964284853 -249 192 -1.2823579709193704 -266 192 -1.970172016378454 -268 192 -1.9822459873787477 -291 192 1.0100692460020646 -308 192 .3849387566497934 -319 192 -1.032250186227975 -328 192 -1.073740847722572 -329 192 -1.687523799986296 -341 192 1.5188560235669915 -355 192 -.5033034746861216 -357 192 -.17004333110531838 -363 192 -.1409106223270711 -364 192 .75567392473997 -368 192 .91884674344281 -384 192 -1.4359690159108587 -402 192 .8269791433942986 -404 192 -.5099897486482051 -411 192 .6533610487014673 -435 192 -2.108654838480486 -442 192 .2137010735885884 -450 192 -.6153965407732692 -454 192 -.34312329106441825 -455 192 .5473340051078197 -458 192 -1.1505175844111095 -461 192 -.8806879188019358 -463 192 1.1007016915408383 -484 192 .08835265640722866 -489 192 -.5639575949338274 -493 192 .5305296788514302 -522 192 1.0818347868232325 -524 192 -.8646286059264918 -529 192 -.06337076781204096 -553 192 -.8596359970912341 -554 192 .22017766569299785 -592 192 .9084348710696775 -595 192 .5482888850703107 -599 192 -1.1385923049093238 -646 192 1.471572144075514 -651 192 -1.4214670444096322 -657 192 -.49663557557217236 -668 192 -.16558236247848188 -673 192 -.12985700141933673 -675 192 -.544237789867731 -683 192 .06349116433154715 -684 192 -.678040364958835 -695 192 -.4715049462758051 -698 192 .4697812294179769 -700 192 -.4139383004558218 -704 192 -.1427725052777668 -706 192 .01452798095220778 -715 192 .13175759466674178 -726 192 -.9481593151836889 -730 192 -.5860860243995419 -752 192 -.11800011788545677 -762 192 .8747642978638563 -770 192 -.5205794569325518 -771 192 .1814000535195378 -774 192 .06964502930275548 -793 192 .017237963171307852 -803 192 -.5413548172568486 -808 192 .16750033868085812 -810 192 .8837621772461797 -818 192 .8191781999174765 -834 192 .6991154927413219 -847 192 1.4063932159641965 -851 192 .47908147829070147 -855 192 -.0652966041785687 -868 192 -.12303268329889538 -874 192 .3977669544548263 -882 192 -1.3568619771451502 -884 192 .450473619806965 -895 192 .2521857331189788 -901 192 -1.0401006160589539 -906 192 .5266962835295942 -913 192 -.5849474588582497 -924 192 .4229116091796943 -925 192 -.1815315357770974 -929 192 1.0778316266753611 -930 192 .4173586387579177 -933 192 .4305830622098551 -948 192 -.07229435698737857 -953 192 -.016504461248904742 -971 192 .6449529709797432 -3 193 -.7166882151454876 -10 193 .44770863973948943 -14 193 -.017040677982008506 -23 193 -1.0362886613952689 -34 193 1.2038641559712837 -38 193 .09590292494316884 -48 193 .9721066111120942 -50 193 .8927163852011505 -55 193 -1.2662284673318969 -76 193 .02343335912027547 -79 193 .3881886129778215 -86 193 2.3287458909992047 -96 193 .6387148028632013 -108 193 1.3027866801799233 -110 193 .04431243259174847 -115 193 -.2360557213140977 -117 193 .7150058826235008 -121 193 .36410181987267204 -122 193 -.49330079220236006 -123 193 -.7638251808389869 -124 193 -1.141711396795327 -139 193 -.11103443817202707 -144 193 -.6861169706559099 -147 193 .9440170370744405 -156 193 -.4832346171698807 -157 193 -1.5838985210348415 -162 193 -.7455907549215207 -165 193 .3033167293181449 -179 193 -.6583639540859594 -185 193 .2706234238784103 -186 193 -.5246847659817685 -191 193 -1.0895741533431818 -252 193 -.4131215671689673 -264 193 -.670735421923121 -276 193 .6096075527172682 -283 193 .1317109275652834 -288 193 -.11944650446593234 -291 193 -.04323439395077125 -295 193 -.27928353051421756 -313 193 .14691114218738444 -330 193 -.24122144343199334 -348 193 .48512927490143654 -350 193 -.5107972323978617 -351 193 .373729264560291 -363 193 -1.5501243838101746 -365 193 -.05846217952096261 -366 193 -.15856643158283287 -372 193 .8854886544814778 -383 193 .6456390493839368 -393 193 .32878375351218125 -395 193 -.9073418927668156 -417 193 -.5630212063218002 -440 193 -1.3363747640272603 -444 193 1.871799986578124 -459 193 .10253727698276083 -500 193 -.07944273413951564 -503 193 .5386402861397189 -518 193 .6117769370188164 -528 193 -1.6468921796559124 -546 193 -.5960476817912447 -547 193 .6901752693287572 -549 193 -1.0569750941174503 -550 193 -1.220417867041548 -577 193 .7809586426645335 -602 193 .4531418490354027 -615 193 .20281747346254703 -625 193 .09771040160939608 -631 193 -1.2151957109530598 -635 193 -.45855124658302615 -642 193 1.0842523853039012 -658 193 -.22382140190418812 -660 193 -.5402811377124515 -680 193 -.598861993602776 -706 193 .7552212377808966 -713 193 -.2505011217958487 -714 193 -2.2392395259072173 -719 193 -.28999574564505337 -722 193 .5545705374487417 -727 193 1.4642557463719728 -731 193 .9243345354922415 -735 193 -.5890663290003522 -746 193 .0012723816801088056 -748 193 .6972845621975367 -749 193 -.07038160787104111 -753 193 -.6145967897468135 -769 193 .5097366114597973 -775 193 -.4867662216154804 -785 193 -.010282314065745521 -828 193 1.0795547351887207 -837 193 1.540853328010223 -846 193 -.2579900975274251 -852 193 1.268786580759977 -859 193 -.6911487723709133 -860 193 .21345217106143038 -864 193 -.9412336780694157 -871 193 1.1619828123490425 -879 193 -1.0441976033584526 -914 193 -.975278909384963 -929 193 1.9102658072184258 -954 193 .3220978410236774 -980 193 1.2573213462001305 -983 193 .7408368268006575 -986 193 -1.9010890901201452 -996 193 -.00621389764161509 -2 194 .2936448592089156 -8 194 -1.6094259031270608 -9 194 2.2894358569537028 -12 194 .014558705270732747 -23 194 .5371396560139104 -25 194 -1.2097853061156851 -27 194 .73098976982012 -34 194 -1.6533869550193945 -38 194 -.8421694418806521 -44 194 1.5790588414357567 -53 194 -.47686690975395185 -67 194 -1.2618063089633798 -68 194 -.12354297302681964 -83 194 .046134597873746463 -102 194 -1.3576304646332942 -109 194 1.8247587090498383 -137 194 -1.5376908127719664 -155 194 1.2135176456316232 -158 194 1.6632747819949094 -159 194 -1.7990866072586749 -179 194 2.0044648148969175 -187 194 -1.6252292585501424 -189 194 .8960832561086232 -195 194 1.0652429259599638 -210 194 -1.304743022656435 -236 194 .15264380044704517 -243 194 -1.4308598569416389 -245 194 -.03715599331332638 -264 194 1.7280853495744872 -265 194 2.4977278604723825 -295 194 .8180437628344666 -303 194 -.2434091133507506 -320 194 -.0005760213810160619 -321 194 -2.784094677318729 -326 194 -2.360276668226306 -330 194 -.834203843355112 -331 194 -.20181667435580403 -345 194 -.795620997412778 -361 194 1.8033509855260876 -372 194 1.6605954093238633 -380 194 1.1870134977771898 -393 194 1.2537239878277615 -434 194 .3704325686112761 -452 194 .012163933537627208 -453 194 1.7014040019282228 -454 194 1.788592766320724 -462 194 -.8620078549697194 -488 194 -.933762514112416 -497 194 -.47002751659757186 -499 194 -.39674531738443963 -501 194 1.3908129608573008 -513 194 .6392004768904483 -518 194 -.279530322703847 -523 194 -.2558505698625591 -531 194 -.2491890167901879 -538 194 -2.0880721963060527 -557 194 .25540402627971315 -572 194 1.3030041388889286 -579 194 -1.2731139437536392 -580 194 -1.1013636432544311 -586 194 -.08135272949544728 -590 194 -.21489003357633576 -632 194 -.46235447140799885 -651 194 -1.3074042829009536 -658 194 -.7259843655526678 -666 194 .054993195093879094 -687 194 .8134785043095873 -691 194 .973261772494267 -695 194 -.18092783718965302 -707 194 -1.9270403090664325 -709 194 -.6307104957520064 -711 194 1.1125826458988537 -716 194 .6552605867937609 -726 194 .24824950567433815 -735 194 1.1499397667142268 -737 194 -.7232635102322499 -748 194 -.17070730947162688 -756 194 -2.28274916464715 -760 194 -.014134950042706339 -789 194 .9561475927144709 -793 194 2.41307723642176 -796 194 -.19189979233661364 -805 194 -.752578109724815 -817 194 .014099578991386544 -836 194 .6321716164212283 -846 194 -.8998995340456196 -858 194 -.8471216818735524 -871 194 1.4559887018266389 -879 194 .09616772324769121 -880 194 .13655349398689495 -902 194 -1.107368293338642 -903 194 1.150437588536219 -914 194 1.300893024744053 -921 194 1.4599873007555675 -926 194 -.8004341216867825 -932 194 .29259287635277664 -945 194 -2.77997418293519 -956 194 .6715681290020521 -960 194 1.969388436193066 -965 194 .9262341082510847 -966 194 -.4388446801444822 -973 194 -2.558130041919817 -979 194 1.1714521766576236 -980 194 1.1769944125373601 -999 194 .19783598459143734 -14 195 .5906733137239749 -20 195 -.2389273094773834 -25 195 2.219439894816874 -32 195 -.4946377435266169 -76 195 .3133864529433739 -79 195 -.214974667792015 -96 195 -.022729060753363783 -97 195 -.8267601775669855 -102 195 -.26865282677974467 -106 195 -.8653513479745429 -108 195 -1.357201830741733 -109 195 1.2184339706766913 -115 195 .4133899232850815 -122 195 .17034029622910243 -125 195 .1957397146054608 -132 195 -.06291266672697352 -142 195 1.171455688444166 -151 195 -.11210577084769206 -171 195 .17904519544871078 -173 195 .8578312124024308 -179 195 .4279980704032821 -181 195 -1.5318721012212253 -186 195 1.0615429384539143 -201 195 1.0105685026550346 -210 195 .5732582142922099 -231 195 -.20795549887246292 -248 195 .3039416901922852 -249 195 .5928908985596933 -256 195 1.4738493084360427 -263 195 -1.0486387003791013 -270 195 1.109877070905347 -310 195 .4877643463861019 -335 195 .199492275418479 -339 195 -1.2923700886099259 -345 195 1.1133789582299216 -354 195 1.9383315776795083 -356 195 -.6247860028343833 -359 195 -.755176699534312 -371 195 .28478665519146545 -387 195 -.004678372640137998 -393 195 .41319686839633424 -423 195 .48842792919032696 -425 195 -.4870014324584834 -426 195 .2568663639920455 -440 195 1.6171362560771438 -454 195 .5040821761336549 -456 195 1.0588599282360722 -459 195 -.0849829252800261 -468 195 -.8679860969108695 -474 195 1.4103570005193093 -480 195 -.19894250731896843 -488 195 -1.080781144776931 -505 195 -.11420058988316716 -518 195 .0467031900250247 -523 195 -.8392348402896039 -526 195 -1.1423339053407184 -552 195 -1.0878925582974954 -558 195 .15500367595702563 -576 195 1.848804456276431 -579 195 .26935002451182755 -597 195 -.7120504787432397 -602 195 -.9395563070279711 -604 195 1.2922798728107203 -617 195 1.3597372607425084 -630 195 -.24697513648849756 -631 195 .30456492367249116 -644 195 -.4054867882836079 -658 195 -.3883525369594214 -661 195 -2.1565735812142868 -684 195 1.0313555387999194 -695 195 .06355546732416276 -701 195 2.14001294321855 -703 195 -.44846495305803596 -717 195 -.6021306348124545 -736 195 1.2855732597538903 -739 195 .16626301794559623 -748 195 .23512701647375558 -750 195 2.1619830771578874 -758 195 -.745182282072823 -788 195 1.1251078249946935 -801 195 -.957634250327403 -807 195 -.38748670019374515 -815 195 .2772816812678407 -822 195 -1.1731733571998266 -845 195 .7968797901314821 -857 195 1.3612106716120298 -871 195 .04868997124331749 -890 195 1.603530223156519 -901 195 -.8658762574441359 -902 195 -.10891212906232234 -904 195 .07845018998036908 -907 195 -.5971992621052636 -919 195 -1.1789013014248535 -924 195 .24105448090179013 -929 195 .20088074343315188 -931 195 -.23272725024185553 -951 195 .1496637043604102 -953 195 1.2982876051591998 -985 195 .8248667273253085 -2 196 1.8880967749786821 -15 196 .33087671225954435 -17 196 -2.1415069116450858 -18 196 -.5134749752646243 -38 196 -2.1042993108419306 -49 196 -1.1413771478713515 -53 196 .19450623001218054 -54 196 .11572386306962655 -56 196 -.4527304953153648 -58 196 .6855230508534044 -60 196 -.382228967502285 -78 196 -.17924793866228314 -90 196 .4040259286227743 -93 196 -.8024151004885914 -104 196 1.1305921538183108 -106 196 1.4922754867881298 -114 196 -.9337846911362016 -122 196 .5591798245397571 -136 196 .8593343825134949 -139 196 .11585476750354823 -156 196 .07412983328690287 -164 196 .2127946878067451 -175 196 -.7116146094183661 -191 196 1.3580117744394424 -195 196 1.938773723446496 -201 196 -.5977728771605559 -224 196 -1.5976356007841628 -228 196 .38491551666794255 -240 196 -.514026218038375 -269 196 1.5303704277638988 -276 196 .27401902695468194 -296 196 -.8245500584558644 -299 196 -.400343110845512 -307 196 1.2460623775886133 -313 196 .07665914612111654 -323 196 .8021655423435439 -345 196 -1.6880913011830652 -353 196 -.6133318514187568 -374 196 3.1508828436015293 -376 196 1.398227669606907 -382 196 -1.093453416267454 -386 196 -1.1575189746110413 -391 196 1.399794683790816 -405 196 -1.354287530482888 -407 196 -.6172081505365248 -418 196 .21099781716034371 -427 196 -.38883302606755926 -446 196 2.177640480209447 -453 196 2.225420655049212 -456 196 1.907361927572514 -461 196 -1.2048950223312587 -462 196 -2.252135053809476 -478 196 -.7464663361034302 -491 196 .5680507714470534 -537 196 .8915859770998502 -541 196 -.1482822994245409 -545 196 .18419736308839504 -570 196 .35092081762904065 -597 196 -.48972690621790177 -603 196 .7159524119596459 -614 196 1.8005228127100097 -633 196 .9721736271915625 -639 196 -2.3048469538267424 -646 196 -.29530456135588534 -653 196 -.7140184380930834 -656 196 -.5418956320776526 -668 196 -.6807790040487782 -672 196 .928805246134008 -694 196 -.485647140745321 -704 196 -1.32812148416226 -733 196 -.14306633314865508 -740 196 .8769121825084597 -759 196 1.1544310651195222 -761 196 .1721825582881544 -774 196 -1.0697357843456314 -779 196 .4304399944273031 -782 196 .37768162996696414 -783 196 .13851657646121013 -784 196 -1.3370334759676612 -809 196 .21540447276583163 -811 196 -.5593626089168142 -812 196 1.0835176255922578 -813 196 -.7867289033533987 -843 196 -1.608933274565875 -846 196 -.31448371663588404 -847 196 -.6160139908490285 -850 196 .36888449682531943 -877 196 -1.551523438609307 -881 196 -.1378472638480362 -882 196 .615829163994322 -885 196 .46464887586362624 -886 196 1.1121267554770689 -924 196 -.9135073507932729 -926 196 .19765217540812455 -933 196 -.28002311671561475 -952 196 -.7886085609883642 -954 196 .7227720239540985 -967 196 -.3439184805133696 -981 196 -1.0956205971001427 -999 196 -.9875211142148832 -2 197 .5854564714225755 -12 197 -.10282672141218656 -24 197 2.498431815330762 -32 197 -.7148117491374608 -33 197 -1.220326927121067 -59 197 2.035897572449528 -65 197 1.4813322119998624 -67 197 -.8129052798495162 -68 197 -.9622967276625571 -81 197 1.9729870266015528 -91 197 -.5178365391929963 -96 197 -1.6949631086210992 -100 197 -.3224223115043704 -104 197 1.2290361031758108 -109 197 -.6034502132822821 -129 197 2.128111357489525 -136 197 .6389098817290846 -147 197 1.2503669588907729 -159 197 1.3129451375577597 -166 197 -1.5728149086603442 -170 197 -.8663947966731591 -183 197 2.4963428971827724 -210 197 .3436705568074922 -214 197 .9873660161033883 -216 197 -.07353076241663983 -224 197 -.7778744272767908 -228 197 1.4104644563903204 -234 197 2.264791556332097 -239 197 -1.7566460499477847 -240 197 1.099671983953872 -262 197 -.689966701191129 -268 197 1.07393377207525 -272 197 .11126071271678133 -280 197 1.7781736186394763 -288 197 -.23900478323536045 -290 197 -.513713172798732 -296 197 -1.5836949270452876 -305 197 -.5365022693377139 -312 197 -2.3570073446648605 -324 197 1.6539479572823725 -366 197 .6728499876499299 -369 197 .510027633958007 -376 197 .6679798600291214 -387 197 .14562235251092334 -392 197 .9615789761976751 -393 197 -.9720348486422506 -398 197 -.2563865631755424 -411 197 -1.3023860030461898 -418 197 -1.4363934787188963 -423 197 .22900691800722778 -441 197 -.3569472037175573 -446 197 1.7887182117498637 -468 197 1.001114333600729 -471 197 .8157065563460784 -478 197 1.6991212072987378 -501 197 -.534002482329097 -521 197 -1.930182621148556 -530 197 .3098940794412699 -536 197 -1.5073083603171433 -543 197 .10653942204171998 -552 197 -.3737467609294629 -556 197 .18752483431082084 -577 197 -.8120464802506266 -588 197 1.022115033494623 -591 197 1.6900745908847 -613 197 -2.4373928311801487 -616 197 -.25212621223692633 -619 197 1.0414094377335867 -639 197 -.6242033329334913 -642 197 -.9593133555465382 -664 197 -1.1156333175258262 -674 197 1.2609787209018115 -694 197 .750840109946578 -695 197 .29689299506813305 -698 197 .41342840960431415 -727 197 -.687278623009218 -735 197 -.12316824754058785 -747 197 .5253181167220595 -759 197 -.35913481870373754 -785 197 -1.174550678658332 -787 197 .7911352119000898 -815 197 -1.5016769369718106 -821 197 -.4787499572991478 -829 197 .04713280106697547 -838 197 .4445544616020021 -861 197 1.9695167041145847 -866 197 1.0199385540828856 -869 197 -2.399961986893826 -876 197 -.054832634348085024 -881 197 -1.5766985680909167 -882 197 .2708267754756928 -884 197 .12651062358051693 -890 197 -.6236247633018559 -894 197 -.8519367031061618 -905 197 -1.741145270879471 -906 197 -.5247396609148378 -920 197 -.303665645880231 -932 197 .010464422158794943 -945 197 1.609388521982868 -951 197 -.9766283912708431 -961 197 -.008694296074719911 -972 197 -1.141223005354937 -20 198 .7071210927108434 -29 198 .9254898708621977 -35 198 .9282891017906878 -41 198 -4.373724614104727 -63 198 -.5335475694557041 -86 198 3.265883037144318 -94 198 -.7218655403146369 -106 198 .5388267601591064 -129 198 -.014489399094382238 -133 198 1.2132650854981406 -142 198 .14533881130100168 -146 198 .11493862140208568 -147 198 .16857090004768457 -149 198 -.45062441444479645 -158 198 .04771843958112834 -162 198 -1.3976999425783578 -168 198 -.313737201879076 -170 198 .7818752975959291 -197 198 -1.8559913304516114 -198 198 .5708176831174356 -203 198 .9461450632303916 -211 198 1.1618605342673647 -224 198 -.4461968317496643 -228 198 .09629229610030159 -235 198 .42333775252590744 -280 198 1.5159543393756953 -285 198 -.8067310821933308 -295 198 -1.2591174726410737 -327 198 -2.2246220421319958 -329 198 -2.149074511045424 -335 198 -.11364436706234253 -344 198 .5635093330557404 -357 198 -1.8350101061711415 -358 198 -1.8590147031593411 -366 198 -2.3098251482812437 -377 198 -1.5929140472969536 -380 198 -.9362557217413165 -382 198 .4216918683047269 -422 198 -1.1210361402969902 -428 198 -.16940029914924865 -483 198 .11521731121617 -489 198 -1.7040832725508352 -491 198 1.2919991518864062 -493 198 -.9988763200496186 -516 198 .007507809879159527 -525 198 .722751858544613 -532 198 -1.5535415798293888 -542 198 .8636500737568169 -549 198 -2.1404026713254725 -556 198 .053344419683293696 -557 198 .22744623093840172 -569 198 -1.1558596274528592 -573 198 2.1934398520610556 -578 198 -.7670543235038074 -602 198 1.8288623915158695 -606 198 -.35197835542357947 -617 198 -1.5756646851837959 -623 198 -.13824818871282266 -625 198 2.844451568373129 -658 198 -.24433604255916788 -665 198 2.386908492795076 -668 198 -.20966281077959958 -685 198 3.918583816792768 -686 198 1.2250355164342104 -703 198 1.9959507461416182 -708 198 .6251390997526572 -710 198 -1.087006635399167 -711 198 .46013363778196387 -732 198 -2.586276385014864 -736 198 -2.9065747455403566 -744 198 2.51490792310052 -755 198 -.23206996285978987 -762 198 1.1187093525631324 -788 198 -2.8634719611438793 -799 198 -1.2245605611726011 -807 198 .1035354744585732 -820 198 -.056882026599782726 -831 198 .3409548416214091 -841 198 -2.608269288098989 -845 198 -.33493740153844986 -851 198 -.5076947663468324 -854 198 -.2090561797169021 -866 198 1.6150840807937272 -903 198 -.5239782763806687 -909 198 1.120404167728792 -930 198 .2769322349685209 -937 198 -.32970342448305695 -943 198 2.7626611256370186 -950 198 -.2593811235057046 -952 198 1.2847176083233671 -967 198 -1.0740365046326659 -987 198 -2.83093415213746 -990 198 1.3436033221501944 -8 199 -.12358766277483857 -10 199 -1.1688616223080643 -19 199 .5230495486466181 -21 199 -1.24514921381915 -24 199 .9767250169168641 -36 199 -.24213940641251122 -40 199 -.8084184164020456 -43 199 -.5833399250004623 -49 199 -2.3839824276816675 -78 199 .029651267503468193 -84 199 .4710499044029284 -88 199 .5267289855884948 -112 199 -.8489787498248437 -121 199 .300014648079283 -124 199 -.28697235575752716 -136 199 -.5203162864804576 -138 199 -.5221148264877463 -145 199 -1.0718072306934106 -152 199 -1.9956379450716093 -161 199 -.7729010822648038 -173 199 -.15082223883265589 -176 199 -.21715256837372604 -185 199 .4753921561758226 -197 199 -.4095608284107185 -199 199 -.04069281856330011 -226 199 1.0308669262573973 -231 199 1.1346612458367789 -232 199 .6544194955662818 -239 199 -2.3871266485511375 -261 199 -1.0454842744195216 -272 199 1.0566392908309092 -307 199 .6004984813696499 -325 199 .4421723228668654 -338 199 -.5308689236253139 -339 199 .2930091234247082 -350 199 .1693629923723064 -380 199 .9232357455326086 -391 199 .6590360441835424 -394 199 .7803596582715088 -397 199 -.6492721288848979 -415 199 -.5022640328094405 -436 199 .07211489573396071 -454 199 .3837839273719875 -455 199 .04644203225002208 -458 199 -.4962854805300998 -462 199 -.902112593450091 -466 199 -1.1132742778114246 -467 199 .6533884305232351 -480 199 .27702978630895475 -482 199 .9324868304371672 -486 199 1.4931228260354175 -505 199 -1.2316324682401472 -507 199 -.3669731106812791 -511 199 .4138838220307512 -514 199 .02169875879096289 -518 199 .24613221732473842 -522 199 -.3823787985711843 -537 199 1.3239799168411766 -545 199 -.11516592280986031 -546 199 1.0384902955153115 -552 199 -.6670620383556414 -555 199 -1.1172519416932396 -562 199 .4513076084619252 -563 199 -.04667828295101735 -573 199 -.13886624581343485 -613 199 -1.8199807632800011 -648 199 -.5024923125530162 -664 199 .8149689026775959 -665 199 .13038976696689888 -676 199 1.5104885902150724 -677 199 .09173639649147239 -681 199 -1.3777729138431534 -685 199 1.2415984386082766 -689 199 -1.7883557966908996 -699 199 1.0198924346493008 -708 199 -.5579464827575521 -712 199 .16154334375458243 -724 199 .6886502129809526 -737 199 .9008838881639925 -738 199 -.07523604767877154 -739 199 -.3940016876455274 -760 199 -.7465263533807496 -791 199 -.5747316746310811 -792 199 .12091232570217912 -798 199 -.13258812035899098 -801 199 -.8617554611984932 -824 199 1.2269617619722866 -825 199 .0559445317433754 -830 199 -.14790725554717657 -836 199 -.5753528284455444 -839 199 -.3161307441913586 -847 199 -.2212809325583735 -866 199 2.428948049189512 -884 199 1.0874735843613168 -886 199 1.6035130989453785 -890 199 -.8502938898694654 -891 199 .09397273035130534 -917 199 -.24734147858750935 -920 199 -.2430793865453483 -923 199 .5579514852784742 -938 199 .2587087173113019 -947 199 -.04403409613752991 -951 199 -.8846189615286697 -961 199 .09654760795122316 -984 199 -.37108491671863025 -986 199 .5465852162898747 -10 200 -1.3569382352950965 -20 200 -.763886905321219 -28 200 -.291523866664928 -74 200 .07241915503509276 -78 200 -.8187691257139216 -85 200 -.21098415139501986 -99 200 -.2208876319832747 -105 200 -.6327778676081143 -107 200 -.6324102953432684 -118 200 -.3283843073939799 -128 200 -.7684597953654667 -132 200 -.4939202367931061 -135 200 .9780989696865394 -142 200 -.4793935516675073 -154 200 .5777200986891668 -161 200 -.44805630016378706 -167 200 1.0936744219088725 -175 200 .5148316918359155 -184 200 .48439930244622165 -196 200 1.1483262340245375 -214 200 .6000195582549929 -222 200 -.8829747846185053 -235 200 -.1374192148848479 -255 200 -.18061858517635002 -271 200 .10325967639354973 -286 200 .3014784866120521 -290 200 .4408740574121156 -300 200 .05735853300276583 -304 200 .6947538548976102 -327 200 .21029320843285812 -354 200 .419775848659952 -361 200 .11945846711365277 -366 200 -.9502945160391831 -372 200 .2631306752160405 -373 200 .13561287314197448 -393 200 -.5196782495497101 -397 200 .5958835764100864 -410 200 -.3612339539715805 -415 200 -.40163990027571195 -432 200 -.4410548546321535 -433 200 -.24701207249588233 -437 200 -.26617876701501003 -444 200 -.7173593410534157 -462 200 -.6509610699904397 -469 200 .8998373218836833 -477 200 -1.9803832234376464 -486 200 .0654965449404625 -490 200 .6494749542726205 -496 200 -.34575338648265697 -512 200 -.2080210991469233 -530 200 -.15358087698655737 -544 200 .7180770414805153 -546 200 -.1809191893980186 -550 200 .5027619911935964 -564 200 -.5245859225153552 -573 200 .07072378890649023 -585 200 -1.1316763377723598 -591 200 .32685920813848035 -594 200 -.6096007888670194 -619 200 .6407248516982287 -632 200 -.47405734092164076 -647 200 -1.2195571989785594 -657 200 .6924983868241551 -659 200 1.0516085529065733 -674 200 -1.0396537918572757 -686 200 .08723923484689486 -689 200 -.13338953365388653 -693 200 -.3217531393894646 -704 200 -.11042702805439497 -709 200 .5206520237308798 -724 200 .05757247498993032 -730 200 -.9637980458926931 -734 200 .7218392294239886 -739 200 .3146701155067293 -741 200 .27275258424309035 -742 200 -.8347946193285966 -760 200 .08904697787780796 -768 200 .24814922646849946 -774 200 -.4331887398475499 -777 200 .0958329563491854 -778 200 -.49446955670364845 -781 200 .3347845929259391 -782 200 .5416124224735974 -802 200 -.5005707592405321 -813 200 1.0151617538087032 -816 200 -.36969525049543556 -824 200 .12873508892992538 -826 200 .6945354696131467 -861 200 .3598107577113421 -865 200 -.2834633639200408 -909 200 -.48374840542174996 -923 200 -.5041364176477169 -937 200 -1.4938524122351486 -939 200 .2065732775455969 -977 200 -.41516629670870947 -978 200 -.4713792703974022 -979 200 -.23982759868253187 -984 200 .7589748337737703 -994 200 .36607361022648105 -999 200 1.0533648973027363 -7 201 -1.6930461652989237 -24 201 2.415269378525139 -25 201 -2.39229220799925 -28 201 -1.6783248132901702 -36 201 -.941490703950902 -50 201 1.5014915477116253 -61 201 3.0841662192869217 -72 201 -.695535677561917 -90 201 .560011528296107 -93 201 .9052235935995765 -105 201 -.16914570206953755 -109 201 -1.2402044284864115 -131 201 -.8958230739422756 -135 201 .7537004385187203 -163 201 -.5922886244544182 -164 201 .5530499681522545 -176 201 .4974818140318735 -191 201 1.2645777536862142 -195 201 -.1281681407097793 -196 201 1.9903833000983138 -220 201 -1.207454244764991 -222 201 .2898502194074088 -238 201 .7359695328283701 -241 201 -.4128035235224787 -249 201 -.5066699839610668 -250 201 .31724334501026336 -255 201 .3114374466246158 -256 201 -1.09777948014629 -257 201 -.12379595203305696 -279 201 .23877976131499468 -290 201 .8604307589717619 -297 201 1.8542258659955344 -309 201 1.471169279902198 -340 201 -1.0235334057844088 -354 201 -2.5889260871134896 -360 201 -1.7719160818445079 -361 201 2.831227628639856 -379 201 .7839279929556455 -392 201 .22486179199203132 -395 201 .08942169084396985 -424 201 -.13976481109880612 -428 201 .8310640059570791 -460 201 .9561356660768907 -472 201 -.9198880431783696 -479 201 .017891092604112174 -483 201 .17801818447692586 -484 201 -1.3246809419497694 -486 201 .05035885950055813 -488 201 .8200069802914589 -501 201 -.9401484938201228 -510 201 1.278326683285506 -514 201 .2354603492762426 -522 201 1.2467095614572454 -532 201 .30195832881210927 -539 201 .744841347976701 -543 201 .3008570217382809 -577 201 -.05684178971525487 -583 201 -.3935220195015577 -593 201 -1.2214897203527273 -595 201 -.3239868379860306 -615 201 .1569568692300968 -630 201 1.313469887549131 -643 201 .7040554477694995 -656 201 -.11351553202816363 -667 201 .886964311067657 -668 201 .9760248240042295 -673 201 -1.7405271698996667 -700 201 -1.0477923702040866 -721 201 1.626367635210822 -733 201 -.8450425969610055 -743 201 .9773451798586408 -756 201 -3.5285107710926664 -757 201 -.7872518624746995 -788 201 -.8371613793282972 -797 201 -1.4614356808866789 -846 201 -.8668176291894159 -847 201 -.1134417962407907 -848 201 -.48358113273663794 -872 201 1.2589266372851842 -886 201 -.20582126799657138 -890 201 -1.7795003442604782 -891 201 .3717510681397933 -907 201 -.7576843981064845 -921 201 2.1573764124859722 -927 201 1.3016242820694368 -932 201 .6411214451066569 -934 201 .09107923470865317 -963 201 -.9907343035968293 -978 201 -1.6316181352911974 -986 201 -.48455855563458367 -999 201 1.131002183837049 -7 202 -1.3281116768032892 -12 202 -1.184590732953866 -19 202 .4806349870363072 -25 202 -.6436385472919528 -26 202 -.43480643705075195 -29 202 -1.2279921565423464 -32 202 -.5658462488473459 -34 202 .7828525825734478 -38 202 1.7038438866256054 -56 202 1.7898449155920768 -61 202 .31503839181441873 -70 202 .8785516256537594 -92 202 .8535503722335804 -100 202 .039218532680218965 -107 202 .07500467984459476 -108 202 -1.325714411082675 -130 202 -.13673953876791314 -133 202 -.1504394479853426 -147 202 .8038696414876778 -154 202 -.6772116703501687 -171 202 2.380036844562421 -175 202 -.417302465171578 -176 202 .1914269603590785 -190 202 -1.2347166419424418 -194 202 1.1887351976989144 -201 202 .2038371555882335 -204 202 -.045400935722315655 -232 202 -2.782172562050623 -243 202 .9022429803379073 -245 202 -.7316374300670874 -250 202 -1.2307499344797905 -253 202 -.04536739181775372 -257 202 -.6772989482208784 -267 202 .8467520225670606 -269 202 -1.9935288000772282 -276 202 1.1683365691833578 -280 202 -.8483726853416278 -289 202 -.4573567355612962 -296 202 -.2683052950469376 -300 202 .31928269908811624 -306 202 .16894380005446374 -322 202 -2.9043554369993974 -330 202 -1.0483100151036668 -336 202 -1.1675590088179917 -345 202 .22072691406556255 -346 202 1.7126660668790268 -373 202 .1346222599889657 -378 202 -1.144844963858021 -420 202 1.7715824038079808 -422 202 -1.4083740748501823 -425 202 1.4129758868806124 -427 202 .31176062071355976 -434 202 -1.2264219606000628 -442 202 .9661836529486636 -445 202 1.4716714372154232 -447 202 1.3287869617912484 -449 202 -.9070292860570848 -450 202 .12497465464905377 -479 202 .9744846766074077 -482 202 1.092725710257329 -490 202 .02883078260990088 -491 202 .04463818330128187 -502 202 .5683374596547826 -521 202 .5958592585117959 -527 202 -.05023180239117975 -529 202 -.8185239728383061 -530 202 -.2400174679641182 -534 202 1.0072692986883907 -559 202 -.6386506348592447 -561 202 -.00947080153483347 -581 202 .16047623438747122 -593 202 -1.9466329913675144 -596 202 .13488297657913476 -599 202 .9546024466368714 -601 202 -1.0137767350995919 -603 202 .6698795484543103 -614 202 -1.6286073512720516 -618 202 -.6032447540663342 -622 202 .05260669262175731 -636 202 -.922783864064595 -651 202 -.05041722556626414 -677 202 -2.493387444828829 -686 202 .7659854776505868 -687 202 -.5538965632534325 -690 202 -.750696966184902 -709 202 -.5586491287310695 -713 202 -.6450325041982369 -724 202 .5817534864824785 -733 202 -.5529199704054725 -735 202 -.9964889523682685 -742 202 1.065747485303209 -753 202 1.1859754848612296 -755 202 1.3944044938851383 -756 202 -1.0589402234462646 -767 202 1.6166593518486145 -783 202 .0015713039369358167 -787 202 -.4633013435485907 -788 202 -.883240598367572 -790 202 1.6670389339003482 -823 202 -.7241060892115693 -835 202 -.4689163670698624 -850 202 .4299617799090534 -860 202 1.3331710831955674 -889 202 -.590533195275686 -916 202 -.5923426477233829 -928 202 -1.0963086398186839 -948 202 -.3934460896334122 -952 202 -1.6892149289592164 -967 202 .9090622611456196 -970 202 .8649764868523211 -975 202 -.17867548887820545 -980 202 -1.0213153276217581 -994 202 .05417551344719776 -2 203 -2.332436567064134 -5 203 .2301087184889439 -18 203 1.9481024129515965 -35 203 .7395212060316869 -37 203 .7794672585689583 -39 203 1.846321580908484 -49 203 -.5389109664238607 -55 203 .21670976384784663 -70 203 .39417567616527016 -72 203 2.04832998858301 -74 203 2.3861694753985154 -75 203 -2.866104415776478 -78 203 .3697488166219156 -80 203 2.3255701498130263 -85 203 1.989344348717566 -89 203 -.13594758068823276 -97 203 -3.1310359748582677 -99 203 1.2308399449183478 -118 203 -1.4875641174800347 -120 203 .34112866202190795 -127 203 2.4292172265040004 -131 203 .3157102726891727 -156 203 .673372231060068 -160 203 -1.9279203001980743 -173 203 -.30689873955726243 -185 203 -1.4808562704403103 -191 203 -.011652713373299095 -199 203 1.2794004738926161 -226 203 -.20867485140091868 -233 203 -1.1373400955968964 -243 203 -.6564595092061277 -248 203 -2.394182234756213 -253 203 .3059698954813425 -255 203 -.6174324044807594 -257 203 -1.6711580691079182 -258 203 .45731476222695605 -269 203 .08901169423130564 -280 203 .3783605458791624 -283 203 1.4346308034921995 -286 203 .6519351785584702 -294 203 .40848894523710033 -318 203 -.10859255389787255 -322 203 -.7740232741268308 -344 203 1.6846595671392401 -347 203 .18909748924982123 -351 203 -1.8925671235217874 -364 203 -1.303063271763927 -370 203 .7866624983706141 -375 203 -.1670813216535446 -398 203 -.04523599587598605 -406 203 .011982005480730161 -411 203 .7905476327152889 -412 203 1.6908746981160427 -432 203 .816702983764264 -455 203 .9864292775328202 -457 203 .24999078306554293 -463 203 .16628280050292515 -481 203 -2.119158221116803 -501 203 -2.2434177629069056 -502 203 2.1555898097346797 -508 203 1.6370367598384197 -522 203 .5085331806134424 -526 203 -.16412100253813136 -537 203 1.1559011950518372 -538 203 .11576708722862336 -556 203 1.7754052972119805 -561 203 -.5948821783314548 -565 203 .98421984249634 -569 203 -.27078578445613327 -583 203 .3144583798124748 -591 203 -.22621552519515065 -602 203 1.0739963028363793 -605 203 1.7128065716895053 -614 203 .83539238528523 -622 203 .05398209304593059 -629 203 -.20032101840613403 -630 203 1.763892471798831 -644 203 2.1127019338893662 -653 203 -1.7139762985034865 -663 203 .6464986367305146 -672 203 .416534118543337 -681 203 .055772981544937206 -683 203 -.1452972000719448 -684 203 -.550681670497577 -703 203 .5205982185570257 -713 203 -2.3120916807582983 -715 203 1.5921786463261058 -718 203 -1.0277589675217877 -719 203 1.3720887265500277 -734 203 .3936639581042287 -750 203 -.3007882337265488 -768 203 .7126668707007322 -772 203 1.269537500635976 -783 203 -1.4776306029392727 -786 203 -1.8134353658394469 -792 203 .4981428917581815 -809 203 -.4406468518207288 -822 203 -.7718538483435436 -880 203 -.5775067142769946 -899 203 -.8570944472262603 -910 203 1.7500525512876208 -919 203 -.8923283856390166 -923 203 -2.0329901920489775 -927 203 1.5057509114928387 -940 203 .26742114304727493 -945 203 -1.4401204937852323 -957 203 -.2965515048705126 -971 203 -.6859341644411631 -988 203 -2.6279631552630858 -989 203 .2727048574469408 -998 203 1.9071753028655996 -1 204 -.04409839832207452 -10 204 1.7867212931516285 -11 204 1.3223217955048292 -13 204 .3080237585770254 -18 204 -2.908966553405585 -36 204 2.0036695687848343 -49 204 .7521484867331517 -52 204 -.2631335858101334 -53 204 -1.9128722720980813 -67 204 .0667749501886406 -81 204 -1.4097408586150175 -83 204 .7884184424103974 -85 204 .7692048727270757 -86 204 -1.6740884786149528 -104 204 .6478617085708982 -123 204 2.1566165331201503 -127 204 -.7785760825346664 -144 204 .9577205936800677 -160 204 .19764828543064544 -167 204 1.5339975729371707 -173 204 1.0341784690998486 -174 204 -1.9177143976423916 -178 204 .9153565218795087 -184 204 -.426773907396581 -200 204 -1.0823526800064147 -202 204 1.892065832290535 -237 204 -1.1177890717939374 -245 204 -.16855250357230933 -267 204 -.39555541064296895 -283 204 -1.566283238800302 -292 204 .47957187925486944 -301 204 -1.4121326870093571 -303 204 .17719912008986005 -316 204 .13512630205394602 -317 204 -.2480100168281401 -323 204 -.3668222065728969 -353 204 1.7773498794170832 -374 204 -.4066468556481471 -380 204 .24377274040289154 -385 204 -.2582670549488799 -388 204 .9098771820061333 -394 204 -2.2888504811788497 -403 204 1.3992406512147864 -407 204 .041731953105253974 -411 204 .5395813492884844 -419 204 -1.6301021189528626 -427 204 1.3269552558354576 -433 204 1.9867792522935475 -445 204 1.1120293683926974 -449 204 .839224390110346 -452 204 .1841128687915709 -468 204 -.2381804490473557 -474 204 -.6729924836706487 -477 204 1.956985128247924 -482 204 -.8635820107361001 -489 204 1.7499577656175458 -506 204 -2.4301648185032776 -525 204 .9510241618168136 -537 204 -1.8445004081756937 -565 204 .3270522447090232 -569 204 .6916642498109955 -587 204 2.0024282250989005 -616 204 -.9529164137499307 -617 204 -.33237375683976506 -628 204 -1.1817925579741195 -638 204 -1.8733526655860036 -641 204 .26281669713919137 -649 204 -1.2998962067303135 -652 204 -1.278720505920214 -654 204 1.7733212815802617 -665 204 .05496899125627945 -666 204 1.8183950827528765 -687 204 -.47527532738763145 -688 204 -1.2755180961524308 -704 204 -.418413966287117 -705 204 -.738374200650982 -723 204 1.4709465183102135 -729 204 .16121289761980404 -739 204 1.1531246735435443 -755 204 .26000523385927365 -762 204 -.3793634550008885 -788 204 2.873739968693022 -808 204 -.8634222643342588 -822 204 1.240355075745108 -826 204 -1.3161493407294147 -855 204 -.4834586345907821 -868 204 1.4764952350580531 -881 204 -.24871102297195008 -883 204 -.3103093249014478 -890 204 -1.2810280341951557 -893 204 -1.2706509896246112 -894 204 -1.734942445703302 -900 204 .7480578753000202 -912 204 .8539256442061102 -922 204 .635644699184084 -950 204 -.9888289723970679 -969 204 -.3873161338814845 -992 204 -.6195497381597255 -998 204 -1.8421890513491592 -3 205 .2286102492168744 -6 205 -1.171568194994344 -19 205 -.3779591286506071 -38 205 -1.5600053116464094 -51 205 -.19417754757457528 -52 205 -.36478608713034094 -53 205 .01882802170879405 -54 205 -.7660504631866089 -60 205 -.00914067860956988 -104 205 1.4530194652796853 -107 205 -.12095345564013997 -117 205 .9382055151614489 -139 205 .3639701168855968 -140 205 .20051517436323515 -147 205 1.2547711297783095 -153 205 -.13589019924963366 -159 205 1.680504950709809 -180 205 -.5408753378742679 -224 205 .3809472462454853 -226 205 .8149126400572327 -227 205 -.29425688753832085 -232 205 .5247061691292432 -234 205 .8355069064951405 -242 205 -.20166206776553128 -246 205 -.4251766517622709 -284 205 .40320322566042316 -294 205 1.3469072704913543 -296 205 -.7735369819680665 -324 205 1.3102302863499218 -342 205 -.4458455065631643 -348 205 -1.0949230068552107 -353 205 .3537483113620893 -354 205 -.252412809824703 -359 205 1.157715201731869 -366 205 .879505178234566 -380 205 .2768449013230301 -383 205 -.5385812718553381 -387 205 .503092298717428 -395 205 -2.094384175944937 -414 205 -.052581577887116454 -440 205 .9177024574485281 -441 205 .1988837518555964 -442 205 .5919440090939748 -452 205 .6676239748142347 -453 205 .055670583194973644 -464 205 1.4149291425152235 -472 205 .21501675109861823 -495 205 .785375672279774 -501 205 .5994057544753658 -507 205 .05926707154750676 -510 205 -.028054518959963165 -512 205 1.1988526051591066 -526 205 -.20869784247794945 -528 205 -.7780288810537178 -535 205 1.1132718253366385 -561 205 .1630616315530602 -565 205 -.6203344226120403 -569 205 .14782851872143357 -587 205 .5351790890555645 -592 205 -.39950867506501114 -597 205 1.2575594531101262 -599 205 1.205143991270027 -606 205 -1.0709875766543195 -609 205 -.6044234354496105 -616 205 .2945294650389919 -619 205 .1062413894764452 -624 205 -1.5509571857960085 -647 205 1.4215442398419107 -655 205 -.005763523835692452 -667 205 1.0216101398847428 -702 205 -.11105286729072665 -729 205 -.4230378309645192 -739 205 -1.4967227493594277 -742 205 -.4926452023928233 -744 205 .8188134523783486 -746 205 .12995087274940628 -754 205 .9293143946433828 -755 205 -1.352854133530408 -757 205 -.49373840650249406 -764 205 .4871962888530175 -770 205 .016909022081273692 -777 205 -.7815899515303244 -779 205 .3188708330683677 -786 205 .1340455076909472 -809 205 .03603141846704162 -813 205 -1.80621543192572 -817 205 -.678209321963105 -821 205 -.07291060724484193 -827 205 -.07101716534942396 -834 205 -.566146518559751 -846 205 .3608329369201469 -857 205 -.0029952269575820867 -869 205 -1.9036467788446867 -905 205 -2.872409263129624 -908 205 -1.1017949781228316 -930 205 .5170934603984316 -940 205 1.0975311723916459 -946 205 -1.4614188490549382 -948 205 1.076420586900292 -949 205 1.862704837000632 -977 205 1.7489124121957573 -982 205 -.45116018876948566 -987 205 -.369201862768744 -996 205 -.8469280957306006 -5 206 -.03077097131984166 -6 206 .3739998207276453 -10 206 -.30584146821741465 -38 206 1.0742317384199467 -41 206 -.3003571221561716 -48 206 .7090296271049155 -62 206 .08160912228390246 -64 206 -.9846108325376552 -78 206 -.02511071234559803 -85 206 -1.0168025932963358 -95 206 -.5333033900366493 -132 206 -.23397604998212804 -133 206 -.17457377418009362 -136 206 -.4857950043471684 -139 206 -.6105235924785413 -157 206 -1.4159372289443268 -186 206 .031394463245531884 -213 206 .5121986395998371 -214 206 -.10593753235488367 -220 206 -1.936854120325816 -228 206 -.5760351767699394 -229 206 .21263863692314713 -234 206 -.22890073125181148 -239 206 -.8872979845115851 -243 206 .6709518711017897 -264 206 -.003935711350871996 -265 206 -.7204916051950419 -270 206 -.5682694581030279 -280 206 -1.1874238885763417 -303 206 .3430222404996268 -306 206 -.6929416864784536 -307 206 -1.0980074065282053 -309 206 .1237744977395069 -317 206 -.716549741067841 -338 206 .7176474526461256 -349 206 -.15083700403907047 -354 206 -.151944405187084 -356 206 .17783771204813373 -378 206 -1.2641769858294496 -387 206 -.2125912253695695 -415 206 -1.077809190772565 -419 206 -.1788908902931995 -430 206 .38854269858927803 -438 206 -.6017949453714064 -454 206 .00998194648902442 -456 206 -1.4158646989590287 -457 206 -.8030670222673322 -461 206 .18098436744470864 -463 206 .5868572756666448 -475 206 -.3243879222019939 -488 206 .4605721820394196 -490 206 -.36481635435240295 -512 206 -1.4464552401997457 -519 206 -1.3437586443804177 -521 206 1.2654800981550585 -527 206 .327254004402415 -563 206 .26490742938946443 -587 206 .27898601620846175 -593 206 -1.0633962282593412 -604 206 .2234862901132363 -614 206 -1.3255424896235326 -623 206 -.8614958346361745 -637 206 1.5954193676642836 -647 206 -.18465172473379493 -649 206 -.04941223058861362 -655 206 -.45215317675700795 -677 206 -.5701102377634261 -684 206 -.20724379002373824 -686 206 .6117151450992152 -693 206 -.2503390989789423 -697 206 -.10765704393758528 -700 206 -.64564713111173 -714 206 -.8088705770076138 -726 206 .16091910543211804 -730 206 -.12355058977848504 -742 206 .20595197212740615 -757 206 -.47231544119382546 -763 206 .39153685421611273 -778 206 .6026511832443643 -779 206 .796888875342725 -782 206 -.21010405260190068 -784 206 1.4724101519537478 -800 206 .12855880020765914 -821 206 .39926335186209777 -827 206 -.3058064893467939 -843 206 .3177824674201991 -855 206 1.0066142399013234 -859 206 .3488509869443599 -863 206 -1.4520750153946862 -875 206 -.05127164052201334 -886 206 -.43610495887968237 -889 206 -.8340541280872171 -897 206 .4531086884270494 -900 206 -.07429488752682427 -902 206 -.32461983465878563 -942 206 -.20525977971037507 -952 206 -.04941388591380236 -955 206 .5867797599774112 -959 206 .7625231615268857 -962 206 .16588506133365014 -972 206 -1.090908589656419 -973 206 .29117034138160813 -974 206 -.2814490144920265 -977 206 -1.663903106666227 -982 206 .45263518979809153 -983 206 .3171578621807055 -989 206 .4945776812376517 -998 206 -1.5407567137188969 -7 207 1.3954402912703419 -8 207 -2.2243146981448945 -12 207 .02002980173088742 -14 207 -.9821516132940808 -42 207 -.2878254833878943 -50 207 -.5799980608157074 -66 207 -.12550741170441593 -71 207 -.955369105351819 -86 207 1.0216924037189894 -92 207 -.5679279070174883 -115 207 -.2946065254227747 -122 207 -.3008097968406447 -128 207 -1.061827334807758 -142 207 -.3377994676296274 -163 207 .010192116366416891 -165 207 .41067787800432853 -166 207 -.6215490614023861 -175 207 -1.56914964380057 -192 207 1.6487267655042976 -195 207 .5054770351021647 -217 207 -.9747972007926822 -241 207 .2926129191201422 -249 207 -.0662859484041415 -252 207 1.0473028192633713 -267 207 -.5172494714849529 -271 207 .372908471717012 -273 207 -1.080815754672445 -277 207 -2.293848931551035 -279 207 -1.7456297066202233 -283 207 -.3200100720514869 -289 207 .7388689082049489 -290 207 -.10370519710236019 -298 207 1.665243987356639 -301 207 1.3619521573045068 -305 207 .12406522421539953 -307 207 1.020885144132472 -311 207 1.1809942438451573 -322 207 1.1119810520567244 -339 207 -2.4669946410123096 -345 207 .008826087262976415 -347 207 1.6940742192890603 -356 207 -.3275759011933268 -401 207 -.161402170694031 -410 207 .2966291314231136 -434 207 .18266457631081967 -441 207 1.0855196719430598 -450 207 -1.0365940750206162 -461 207 1.2645738353354123 -464 207 -1.3548585088212992 -465 207 -.5666606793510436 -470 207 .2821098679441292 -487 207 1.3920360854607468 -490 207 -2.412819676782003 -524 207 .7369963410140888 -526 207 -1.1117874230722813 -534 207 -.19251613239892412 -536 207 -1.6715358409749903 -540 207 .38397297710789696 -541 207 -1.213594149913038 -561 207 1.1778618330751813 -568 207 -.6251865826905413 -571 207 1.85249473257128 -576 207 1.304053464513819 -581 207 -2.3594315043758574 -599 207 .367962074411165 -624 207 -.7766853945688696 -636 207 -.9842559563747655 -646 207 -1.189286606481216 -666 207 .6825288269411345 -667 207 -.851409278897441 -695 207 .9156593253427705 -703 207 -.8378195767711699 -709 207 -.446656945028526 -715 207 -.3536177433806486 -719 207 1.1472663478827718 -726 207 -.7518247042426881 -751 207 -1.3189268991024685 -755 207 -2.6566889311370496 -758 207 -.3219931102503373 -800 207 1.3277617461817757 -815 207 -1.7824814423207045 -818 207 1.1216617286790584 -826 207 -.8825223842723646 -847 207 -1.3953315674979605 -852 207 -1.1421895815320038 -863 207 -.5486899422196149 -869 207 -.956914526224275 -878 207 .037259988570514255 -890 207 -.5598591463367281 -893 207 1.7562297902427504 -905 207 -.26175499546208914 -908 207 -3.247769586521031 -914 207 -.11966976224693907 -919 207 -1.0798694668094075 -920 207 -3.00616060578152 -927 207 2.8946246554926645 -947 207 -.020415274282042088 -949 207 1.245747994365436 -952 207 -.5715347632887811 -958 207 -3.009474177191744 -964 207 -.677138349338769 -966 207 -.6104545802029903 -974 207 1.3788923102726043 -982 207 .494738490668335 -990 207 .9556436127569137 -998 207 1.4121184647254685 -8 208 -1.7124800941310923 -9 208 1.0196279160190231 -11 208 -2.2836912151854953 -13 208 .3850509368646791 -16 208 .8057374557398962 -25 208 -2.1367967611391903 -59 208 .9928213060378932 -63 208 -.005356206970163452 -64 208 -4.258710160313526 -85 208 1.0322330240266102 -98 208 .9047558204283326 -103 208 -.5211388778904679 -104 208 .03414698944022371 -112 208 -.91237119306262 -114 208 .3387567920458507 -143 208 -1.9646833661841734 -145 208 -.1430308265141197 -159 208 1.6110327137147469 -172 208 .5479273002962752 -186 208 -1.2287219335775152 -208 208 -.39419978126853844 -209 208 .8661553650516305 -211 208 -1.1521028802631412 -252 208 1.3890421230961216 -253 208 1.1498514981594559 -263 208 1.7864428922949596 -266 208 -.29224172333821874 -280 208 .3947001293994798 -322 208 -.12665552078414608 -346 208 -.13587286846916413 -348 208 -.5448882046496416 -363 208 .34992809065131925 -393 208 -.07077056873699102 -398 208 .4525180592442105 -422 208 1.5617024661841772 -425 208 -1.5494532009171065 -427 208 -.17755752483022388 -451 208 -.07061506403547943 -456 208 -.4943909600379063 -469 208 -.5935124400577401 -473 208 -1.8175021003331229 -485 208 .6359615643955343 -488 208 -1.1358674561403614 -490 208 -1.9744792505635012 -491 208 -.032716609103597485 -497 208 -.5270730918077897 -500 208 .5166639024652275 -501 208 1.5039451114900377 -505 208 -1.425984199931005 -534 208 -1.6278345874355835 -540 208 .49682878632424543 -541 208 -2.354324194269159 -552 208 -1.0077069693890175 -568 208 -2.9663728937975264 -575 208 2.4766325057658807 -582 208 .573273938461115 -596 208 .3501275272315752 -640 208 -.020456371892583175 -641 208 -.21501467066989827 -645 208 -.07135985796195765 -656 208 1.9895815950814475 -662 208 .8521124821919502 -668 208 -1.3182383105767872 -675 208 -.13199234134534155 -679 208 -.6024136226358145 -681 208 1.1571794085178555 -702 208 .26873050667035225 -720 208 -1.330255818000147 -721 208 -.1668105961654604 -754 208 -.48769669421927603 -800 208 1.0991168533616396 -806 208 .25508613378198064 -817 208 .23372010683862207 -822 208 .578410784317389 -824 208 .4385701924915159 -829 208 -.25941232161716676 -836 208 -.4106418694936985 -840 208 -.7718234146463263 -861 208 -1.8686780252210995 -864 208 1.4791560616713402 -869 208 1.1159280061597607 -912 208 -2.0692088830880317 -918 208 -.8885131045153132 -921 208 -.3633540210181523 -936 208 .7867382853614648 -941 208 .4943691021902381 -942 208 -.294535196889607 -943 208 -2.016229458663026 -956 208 -1.4958101101270278 -967 208 -.07087612097736487 -969 208 .8270445430727522 -972 208 -1.2420858465682911 -973 208 -2.3413732120789383 -975 208 .8144830418907372 -981 208 .2993730835926422 -997 208 .9893538740531838 -9 209 -1.212959164646872 -11 209 -1.1849736543643414 -12 209 -.2474285951895458 -19 209 .13577744597029653 -21 209 1.428111263628437 -27 209 -.8127146397743353 -30 209 -.3286796551075519 -31 209 -1.1604953717196804 -34 209 .4161561939029783 -55 209 -1.7243662174295125 -75 209 2.0334998033356673 -79 209 .10788271240205452 -83 209 -1.3566617671334564 -90 209 .2647301313562983 -97 209 1.856616479461517 -130 209 -1.3981708255061551 -131 209 -.7637188028074623 -152 209 -1.5422984842002054 -166 209 .3267009609900793 -168 209 -.7773286246518029 -171 209 1.1071772799672592 -174 209 -.7973624059003885 -183 209 .03148002617403276 -188 209 -.9468512497844863 -199 209 -.26280096084953536 -206 209 -1.7376224057981873 -215 209 .5253299151570376 -217 209 -.4315672236333627 -224 209 1.7813278562938142 -233 209 1.9484236401327306 -237 209 -.9795966482701256 -242 209 -.2701410532147392 -248 209 2.1296798493117937 -249 209 .08196599891140655 -250 209 -.8745071476226257 -258 209 -1.1767886915543457 -267 209 -1.5319298664171586 -277 209 -.03363515097516097 -289 209 -.1501621072459623 -324 209 2.5097228922031145 -335 209 1.5483507286677576 -348 209 -.5056173949546571 -356 209 .16317001484968294 -358 209 1.1270270508761757 -373 209 1.1822744514907573 -388 209 -1.0783813086250704 -403 209 .4463466349419799 -405 209 -.45859447036582324 -443 209 -1.80449349745255 -473 209 -1.336212655377155 -475 209 .48780986010852695 -476 209 .1920816132824463 -482 209 1.024700621656778 -496 209 -.7577424929378027 -536 209 -.9038472148954406 -547 209 1.431717112808136 -550 209 -1.404215467335633 -558 209 .2736778902658799 -583 209 -1.6287199407611619 -594 209 .6228108910829435 -604 209 -1.938152967722785 -615 209 .9142009293337473 -618 209 -.7138117164449931 -622 209 1.3808615729885096 -636 209 -1.2095699342757436 -650 209 .5007951052264327 -655 209 .20483647472071087 -665 209 2.2974707026784666 -668 209 2.2025363610067297 -680 209 -1.4959843680450393 -690 209 -1.9294523969407547 -694 209 1.886555592140935 -729 209 -.03934537785718312 -738 209 -.2794336108755846 -749 209 -1.4178740077530636 -750 209 -.40354328316877675 -755 209 -.23630529988891155 -763 209 -1.7131200193147065 -773 209 -.19635241457886213 -784 209 .7232193406908763 -789 209 1.0985080181529485 -802 209 .10955912559788372 -804 209 .1853806388453259 -805 209 1.6089473985750302 -813 209 -1.6262568567784432 -815 209 -.6449510110205464 -816 209 -.19870085680023475 -821 209 -.20667015613906586 -827 209 -.43544843666115174 -840 209 2.1304656582737196 -865 209 -.07771727744889687 -878 209 -1.3461808316548574 -883 209 -.5872449108700398 -888 209 -.11165589309385705 -889 209 .036881451053230305 -893 209 -.5402148263831332 -905 209 -2.7436926685075957 -906 209 -.31467820446950195 -924 209 .3194619825342529 -929 209 .8433335843740721 -954 209 -.9485290513971836 -973 209 .4997950556876826 -1000 209 .3515912223010261 -16 210 .26631831344903356 -18 210 -1.2288743538438207 -29 210 -1.2458685168620585 -30 210 .6884049469537493 -31 210 -.8638374819355105 -37 210 -.6875940326308871 -40 210 .24683455916818905 -51 210 .12371670366687895 -53 210 .41779983528914355 -65 210 -.23796591187224844 -70 210 -.3088911105530573 -82 210 -1.995964422112898 -104 210 .22363478401232484 -114 210 .5634464124653097 -120 210 .18631562952350172 -127 210 -.8801052005662745 -135 210 .5655916001899634 -148 210 .7678873946626438 -149 210 -2.5835945985679745 -163 210 .08063953278825944 -164 210 -1.1420378822589738 -165 210 1.1360567789789147 -172 210 -.37811029065886637 -180 210 -1.3788185596675997 -181 210 1.472521500468702 -201 210 .016765071185715363 -207 210 -.7494684691898065 -216 210 -.8428320185895573 -233 210 1.9116666274569238 -251 210 -1.076512340519531 -256 210 -.06059066653902839 -257 210 -.13020667447058104 -263 210 .5811080993742122 -269 210 -.3629860966261589 -293 210 .46881695133872725 -301 210 1.2017027300753085 -305 210 -.6875949974283367 -307 210 -.02835596677067638 -315 210 .6434351899151648 -334 210 -1.8007404702442857 -339 210 -.06518419873097625 -342 210 -.4614304717367691 -353 210 -.5930385535823942 -370 210 .4531342344170813 -400 210 .09481488072347882 -413 210 -.052699256536601666 -424 210 .3800750133384686 -428 210 .8126325642873848 -443 210 -.06304366353425384 -446 210 2.2027619548781456 -450 210 -1.6357572583854345 -478 210 .6052171393539184 -482 210 .5671788070070057 -489 210 .8909605178201679 -497 210 -1.5749067551888931 -498 210 -.13797113649022238 -500 210 -.27484860839993264 -508 210 .06695664300447246 -523 210 1.2990327966712982 -527 210 -2.1823871340086676 -533 210 .11351471690750226 -535 210 -.8776651424757768 -537 210 2.0947555692949154 -549 210 1.3130325858471834 -555 210 .5318128801735131 -579 210 1.0699239119866502 -593 210 -1.8701191646549484 -604 210 -1.601171208122439 -612 210 -1.3302360670034457 -616 210 .4434987169797325 -618 210 .15839265124829668 -629 210 -1.026534420940613 -643 210 .19686318282930496 -673 210 -1.299615277238685 -678 210 .819233981492768 -679 210 -1.0158025453349264 -687 210 .9117781355735822 -703 210 .6484316307563488 -711 210 .8271802005719714 -715 210 -.20440801629195762 -722 210 -1.4824461847720318 -726 210 .7512268577988798 -739 210 -.4902731383084694 -781 210 1.2077776896023997 -806 210 .06160780719774139 -811 210 .44333037332954195 -814 210 .7394044040961412 -815 210 -1.010638218086432 -819 210 -1.4914823771999575 -831 210 -1.2635479902706797 -842 210 -.16223933010979255 -849 210 .7315846912960937 -905 210 -1.1726503830236625 -907 210 -2.452718484503119 -970 210 -.25072751014199446 -974 210 .5858776409355652 -988 210 .5665078647474138 -1 211 -.9386773183123496 -12 211 1.804910432756427 -14 211 -1.5620563592397165 -15 211 .21953899532725377 -16 211 -.8496709884228906 -25 211 -2.411503593760664 -44 211 -.9583481942998939 -72 211 -.49160709312974094 -75 211 .3620427123903506 -89 211 2.182224320051477 -107 211 -2.6175311604826272 -114 211 1.0310732426698244 -122 211 .5058019291843404 -123 211 1.463197431978805 -136 211 1.3782097617971805 -139 211 .297569701020754 -172 211 .584582847393564 -181 211 -.18214693846984584 -201 211 -2.1877869283690403 -209 211 -.2946796018488718 -220 211 .19642392899297562 -230 211 -.7488205299664449 -251 211 1.4239940423199233 -256 211 .6842324256900545 -262 211 1.4555282282198112 -276 211 -.5826405258656558 -278 211 .9414110181611908 -282 211 .923839282206648 -285 211 .3769974516864437 -290 211 -.6861028201361573 -299 211 1.4180367111690748 -309 211 1.7013513815460177 -311 211 -.5363298248220557 -316 211 .4851243866169366 -326 211 -1.799610385709596 -333 211 -.18798547120835368 -352 211 .769900486961888 -368 211 1.1518123226424715 -369 211 -.9692929397683462 -384 211 1.7726767947991573 -385 211 1.313328086505617 -390 211 1.933512345883891 -412 211 -.629494991466419 -427 211 .0024455469524893164 -437 211 -.3252855511731136 -449 211 -.2795078689460875 -455 211 .13867891497677814 -458 211 -.29123326994983834 -466 211 -.9153921726356647 -505 211 -1.8143831292173402 -512 211 .7185252177074746 -521 211 1.1937393918047567 -530 211 -1.303337982818883 -547 211 -.05473762247589445 -562 211 -.006949091226487958 -563 211 -.011097880239526958 -570 211 1.5346288462318187 -601 211 .47195863286961753 -607 211 1.0876990212521749 -610 211 .7201369291511639 -645 211 -.10536906848678433 -658 211 .423623341515031 -683 211 -.7759054273642156 -696 211 -1.4630223320550293 -697 211 .3475351885430493 -719 211 -1.0733694220657226 -725 211 .7706674387978875 -730 211 .970683038441141 -738 211 .4838696362592377 -748 211 .9614011696119691 -765 211 -1.238201724029442 -768 211 .508308037145049 -786 211 .9153563973134864 -804 211 -1.0394595220304776 -807 211 1.1120940527014114 -824 211 .8160618604203598 -827 211 -1.0459788825931335 -831 211 1.613788409465092 -836 211 -.8463319726205282 -845 211 -1.4103536941501125 -848 211 -.2905548725194176 -849 211 -1.533133577667988 -851 211 1.46426718409089 -853 211 .14402697796146685 -854 211 -1.1803913156269135 -859 211 1.180163860694729 -869 211 .7833917291081525 -879 211 -1.4799707627856546 -881 211 -1.049410198888134 -885 211 -.5903451300408533 -887 211 -.36073528482443695 -892 211 -.23616002877441697 -905 211 1.5969791485529776 -906 211 2.02395906324048 -920 211 -.6104432282088863 -933 211 -.33322813564661485 -936 211 .6865857506228723 -946 211 -1.6866602315752137 -951 211 -1.200991314818644 -957 211 .6893749459706621 -960 211 .7371007834650508 -988 211 1.3382049610703786 -3 212 -1.1739390089590789 -5 212 -.8290644281603032 -17 212 -.7660728891665045 -53 212 -.2791124169067957 -56 212 1.842475522715343 -74 212 -.4574341327128394 -78 212 -.9518643198915315 -87 212 -1.239124922583021 -105 212 -.07191244660714718 -118 212 -.026375330955863502 -124 212 -.240676179223897 -125 212 -1.8447688511358356 -130 212 -2.4413528249704903 -132 212 -.4534160360926421 -142 212 -1.0589117715238696 -144 212 .09574777710303407 -149 212 -.09027216581525144 -153 212 -.04840028792588959 -154 212 .29008383555868805 -166 212 1.2977304933223737 -170 212 .23677232812279295 -171 212 2.2477674574764617 -173 212 -.8682589213209877 -181 212 1.3303224799180318 -185 212 .47452329876531485 -189 212 -1.6831358652536963 -191 212 -.257576274700619 -209 212 .3308976802992518 -212 212 .2506284883938816 -220 212 -.9071242321682662 -223 212 1.3419610208452026 -229 212 1.1009011676911924 -230 212 .5178124076307108 -253 212 .27354979609199653 -260 212 .5154509482201066 -269 212 -.8574509244876252 -301 212 -.4057135634706094 -307 212 -1.1038172527623404 -313 212 1.0391546448993447 -320 212 1.2244998313785325 -323 212 -.0829435417634291 -339 212 1.4999811520249822 -346 212 .8460655436296465 -349 212 -1.813406252816234 -357 212 -.06383488350729655 -367 212 -.34701862840002706 -375 212 1.1591362372677614 -401 212 -.24626360783039497 -410 212 .048069483397239654 -416 212 .015046222843834358 -429 212 -2.1942271827397843 -436 212 .0637246850426475 -443 212 .22649365844230648 -449 212 .24753348402353953 -467 212 .9104611418620173 -481 212 .25074107720954386 -482 212 .8514935631292155 -497 212 -.4495023691094898 -504 212 .38028631199448676 -506 212 -1.1931717080931388 -564 212 1.934697133636493 -573 212 1.1355551743539103 -577 212 .5423101987118719 -593 212 -.18333464373220082 -624 212 1.1304125677950512 -627 212 -.9284091943509907 -662 212 .5383179456437888 -667 212 -.25747884247482994 -672 212 .20957989497771967 -692 212 .23447508710545906 -718 212 -1.0009455576516784 -725 212 1.1667164256148657 -734 212 .45426677819921035 -747 212 -.8636747244968499 -749 212 -.5194724194819589 -761 212 1.2669235714886056 -764 212 .09549310735531388 -781 212 -.7605921876504519 -800 212 -.9445013037424063 -801 212 1.5685461852637324 -810 212 .930067459878088 -812 212 -.3496614550171877 -814 212 .1054721079759113 -815 212 1.5842817683044317 -826 212 -.8918619118644814 -831 212 .4332284788068956 -837 212 -.22046336228990937 -843 212 -.38910117831735763 -852 212 1.6500370769595047 -853 212 .7469800246774342 -864 212 -.227710033636951 -869 212 2.7554114779596617 -872 212 1.521967481533268 -886 212 -.6046291010620434 -888 212 1.3578920372183594 -893 212 -1.8443961521863828 -912 212 .27883559250171297 -913 212 -1.9150908384371308 -922 212 -1.8495754648834868 -926 212 .5587694457884441 -934 212 1.258392877067853 -946 212 .6263411162292349 -966 212 .4160980181367135 -967 212 -.05041446050416504 -986 212 .42104673163204787 -992 212 .48039171771012 -996 212 .45799063484334795 -15 213 .559442340455021 -50 213 .3892180610858844 -52 213 -.14823960339318779 -53 213 1.0061292394689947 -58 213 -2.532159446127099 -66 213 -1.2584196149479734 -75 213 1.8031087702085398 -92 213 .4081668113339966 -109 213 -.6764424747269392 -112 213 .5604405186917483 -114 213 .7212401682289541 -118 213 .605657608309878 -137 213 -1.2887691161475405 -145 213 -.39143746375119004 -157 213 -1.5445777289579201 -166 213 1.6230672957443901 -167 213 .23063920688325312 -172 213 -.6190899798930785 -199 213 -1.1540413006847228 -212 213 -.998893914654593 -213 213 .18004052713861546 -219 213 .37515927060571125 -237 213 .472520755640807 -238 213 .515436762557224 -254 213 .009344821701370933 -287 213 .30677012205487 -294 213 1.5487826143477472 -312 213 2.0357137916027224 -347 213 -.40949917047285417 -353 213 -.18311509525109948 -366 213 -1.4371765068944955 -372 213 -.2188960973200564 -378 213 -.011400918856975147 -380 213 -.6020505700835479 -401 213 1.350790239736491 -416 213 1.2759201208933102 -428 213 1.0520722394410766 -437 213 -.5795313915781619 -448 213 -.5925525701039172 -455 213 -.043801554080444366 -467 213 -.8195685807029984 -469 213 -.106470835941743 -480 213 -.5176601107984727 -484 213 -.3649128551046527 -490 213 1.2252500008302782 -512 213 -.18652703352897665 -515 213 -.20570255001124388 -516 213 .5552046213467506 -517 213 -.4438701887172934 -529 213 .026736417593404407 -546 213 -.7725287093348029 -580 213 .6786370314650533 -601 213 -1.6603297566744017 -614 213 -.14123809757594036 -623 213 .008410926735697962 -645 213 .8316003678776156 -649 213 .7430291915342665 -692 213 -.03275741340126529 -713 213 -1.0312652611488935 -729 213 .6696882369780595 -745 213 -1.6076016168347391 -753 213 -.17204254683956305 -759 213 -.18200734311014982 -761 213 .0469566313520908 -764 213 .023763395048624333 -779 213 .2401486628919168 -788 213 -2.3127878345515462 -792 213 1.0019292631844843 -808 213 -.028381948204442155 -830 213 -1.0981955057026063 -837 213 .3946039225914878 -855 213 .24301351532902404 -856 213 -.34584372776649713 -866 213 -1.3568950239793254 -873 213 -1.7673893208281788 -890 213 .4001110690335018 -894 213 .5073143996684903 -901 213 -.8843451518022112 -902 213 1.3158341633223953 -903 213 -1.2746467726785562 -915 213 -.041959222879837554 -917 213 .9201583612611013 -918 213 .5576951245687928 -922 213 -.1174198507834858 -932 213 .8717131454958309 -934 213 .12483354408480002 -952 213 2.498493355504575 -954 213 .34540016222579983 -975 213 .4836964741224189 -987 213 1.7206964343556108 -36 214 .3245064448907915 -46 214 -.45226154929810586 -105 214 -.04516208404997532 -106 214 .282890888453887 -110 214 2.1044351750788826 -124 214 -.36059048244656944 -140 214 1.656735154460599 -145 214 -1.1118926970444023 -146 214 .5938200708072727 -149 214 .34943659846672015 -158 214 -.10612940183395134 -161 214 .367170359867221 -192 214 -.5025173389931068 -194 214 .09682072212068606 -214 214 .20590983579231248 -224 214 .4920721821440891 -237 214 -.09417887080684947 -241 214 -.0026789930750781288 -259 214 -1.128630758774946 -274 214 .001751840217980933 -278 214 -.4143617937480808 -280 214 -.6993165650693604 -305 214 -.393609995757809 -306 214 .36019643584471656 -324 214 -.1494468073951452 -327 214 .4058618620235281 -352 214 .7145854562277493 -383 214 -.08709948891423126 -402 214 .2615145345195188 -403 214 .9639143331601927 -416 214 -.06729564313132966 -436 214 -.5387856831050196 -459 214 .20437036333962705 -465 214 .671842025977207 -469 214 .17728660328803655 -471 214 -.45271427806596704 -474 214 -1.0854108701593632 -515 214 -.6789882458158417 -523 214 1.6105769991426437 -528 214 -.6112255429034983 -530 214 -.9043998095878577 -531 214 -.1349467691595619 -534 214 .22742872924258756 -546 214 .0035775403294532465 -565 214 -1.6072199851085127 -583 214 .09319566430705165 -589 214 -.6811789092682623 -590 214 1.1524898871543445 -591 214 -.9442081472715892 -602 214 .18593166035355044 -613 214 -.6425383969317602 -615 214 .7758426950672945 -618 214 .015798549181501642 -623 214 -.6062796762538095 -631 214 .3957508066342794 -643 214 .6669124639295324 -651 214 .307000730965234 -653 214 .24036237903648722 -661 214 -.06533493041880956 -662 214 1.4334736698671091 -670 214 -.056606254052522655 -693 214 .3656329916978004 -706 214 -.42093585380505316 -739 214 .3720630520279433 -742 214 -.07476813090954845 -750 214 -.6024457449197702 -758 214 1.2111330313637327 -787 214 -.4281939390902522 -803 214 -.1335377850726759 -811 214 -.5058668574814063 -823 214 -1.2208390571979753 -841 214 .8236258652128903 -842 214 1.3009995484144314 -844 214 .029171631571819838 -889 214 -.12456689504559133 -893 214 -.32554478315581237 -899 214 -.5461402646271678 -902 214 -.48199883843415076 -904 214 .6136580264742438 -907 214 .8178334951425735 -912 214 -.4378461832690776 -918 214 -1.3304714621299278 -926 214 -.37868220815035936 -930 214 .45230694452827125 -932 214 .026755084863108486 -951 214 .7444780095265232 -956 214 -.4640432358394674 -957 214 -.2765208935362586 -959 214 -.05066599134428597 -977 214 -.8970222494386246 -996 214 1.3727539916622844 -3 215 -1.0909681116409327 -8 215 .6184792508076468 -10 215 1.570315815794084 -13 215 -1.3902756342284839 -18 215 2.2906985276657714 -31 215 .28682693743290866 -34 215 .9884897275136177 -35 215 -.14854998930461774 -50 215 -1.0691574879723882 -75 215 .03449665783589742 -84 215 -.17697695471345093 -96 215 1.4794587484790054 -100 215 -.45466598981309575 -115 215 .4536262880559511 -148 215 -.20536196574352833 -150 215 1.7747570040592655 -162 215 -1.6473649540368949 -166 215 1.0879368508452487 -191 215 -.6140196284324256 -202 215 1.1981047460969512 -203 215 -.004896318144400591 -208 215 .6855447445827401 -214 215 -.8990508002232519 -230 215 1.0796037486052805 -242 215 1.5348742852641561 -257 215 -1.680715252273412 -259 215 .5831675307466307 -272 215 -1.498788105473027 -273 215 .33680214312515544 -278 215 -1.220169028182703 -279 215 .736132198390701 -300 215 -.235386557814964 -305 215 .995624153978616 -317 215 1.5965249022695414 -327 215 .237925908572444 -338 215 .6870951654036966 -346 215 .142227006590534 -352 215 -1.210779690639311 -360 215 1.1248393616859527 -365 215 .2178903457551618 -369 215 -.7343044635851097 -416 215 .5621580819397864 -420 215 .5091665013192537 -429 215 -.38830946263302074 -432 215 -.6992623105236069 -439 215 -.6707086898643861 -444 215 -.2569091218492363 -448 215 .02245589820767959 -455 215 1.4654466521654743 -459 215 .2180406025032175 -481 215 -.6905954434731039 -492 215 -.5457551779645722 -493 215 -.8320970051800683 -519 215 .7011734955587238 -536 215 -.6648925576953744 -538 215 -.33184566661860404 -549 215 -1.1035534445352637 -580 215 -.6159830180837123 -603 215 .9647667692669093 -619 215 -1.4558736091852833 -621 215 -.45600214457817695 -630 215 -.4867590361589097 -633 215 -1.4121800211583773 -662 215 -1.8819774452539428 -665 215 .5820472607215446 -675 215 .35678633920439984 -682 215 1.0537302391463308 -706 215 -1.2592274110542174 -746 215 -.35032123648895924 -747 215 -.18706548001263198 -752 215 .23211042593392162 -758 215 -.7616075714564879 -768 215 .4700399013800948 -771 215 .5498691108619386 -778 215 .4048217194898192 -785 215 -.6435311187065527 -789 215 .04284755232213311 -792 215 -.30220614197104056 -798 215 -.4873947987216497 -807 215 -1.4550640264484047 -826 215 .9397190406200663 -829 215 2.013065683656857 -849 215 .7405291401918187 -859 215 -1.1189035994208132 -876 215 -1.7205011301892752 -888 215 -.5297756193067107 -889 215 .061968491457677355 -896 215 -.6695475776456005 -901 215 -1.506344948348446 -912 215 2.972576546180833 -930 215 .5280714502944555 -931 215 .5131821157357453 -934 215 -1.1438172673489253 -940 215 -.678788807306232 -947 215 -2.951230043532229 -957 215 -2.248411109140229 -960 215 .4881327994398631 -964 215 1.9832536168304984 -975 215 .24798032559356825 -980 215 1.0846117602492014 -990 215 .866317414557819 -995 215 -1.6978916271181377 -6 216 .0526662349247431 -8 216 .6504713723940428 -13 216 .25071777953719043 -30 216 .266482535110961 -52 216 1.0810725796259124 -59 216 1.6712599351043869 -65 216 .1889167683732545 -66 216 .2383282455659102 -73 216 -.692814984076829 -82 216 -.08695693038680323 -84 216 .6434445029840445 -90 216 .19371534228950021 -94 216 -.6476535608529262 -107 216 -.650145242235287 -109 216 1.4187213328407304 -113 216 -.7956904114119765 -133 216 .387228444333698 -139 216 1.0616752947520214 -147 216 -.027265916462856234 -159 216 -.1686542511050504 -164 216 .3476877320546291 -174 216 .09547162805496177 -183 216 .8541486473001909 -191 216 -.26517421960934245 -201 216 -.4921460796629354 -210 216 .7781582700156008 -212 216 .6284939238346469 -215 216 .6762016505431514 -229 216 -.18433331118411814 -252 216 -.8926552084723172 -262 216 -.43779076260369665 -268 216 .1016014930699878 -269 216 .2581975597600613 -278 216 -.8075319549536941 -280 216 .8044421082264013 -294 216 .9192419679372459 -307 216 .4632281846007421 -308 216 1.9713130193355375 -329 216 -1.482338535444779 -341 216 -.06097987690570268 -350 216 -.6459126076812628 -351 216 -1.5918238171890153 -357 216 .07410077467817047 -371 216 .4522353692301336 -378 216 .7186363856747799 -383 216 .3932934626201305 -391 216 .058149648747884 -398 216 -.3937392100803364 -399 216 -.8548852603356609 -447 216 -.18577873608404527 -462 216 .23151817305714437 -466 216 -.9013459205523363 -473 216 -.029842805100506957 -485 216 .4117346960250269 -492 216 .43442880589064103 -530 216 .1389947368823034 -580 216 -.10420033448464132 -588 216 .2380001732898946 -589 216 .08956899246715591 -591 216 .8404655069692817 -592 216 -1.4331204230620134 -633 216 -.4648152763135758 -658 216 .6475370553321772 -680 216 .44557845200060076 -689 216 -1.0362162840177451 -702 216 .11688675737382917 -731 216 -.6553523347340395 -733 216 .6792710382304098 -739 216 -.6343718320753752 -741 216 .1427258671372932 -756 216 .30412330807276916 -782 216 -.4827157635661794 -792 216 -.25385386892585493 -794 216 .6793180561649484 -807 216 .3014640353376309 -808 216 -.18003856330737894 -831 216 -.12624879031636005 -836 216 .20188296491472385 -840 216 1.2737870856606592 -861 216 .34710020429435995 -899 216 -.40539214795251516 -906 216 .3963878286782729 -910 216 .7213708037267018 -920 216 -.16794368546833113 -937 216 -.7692338983510207 -969 216 -.47474028696140586 -993 216 -1.0894008906486714 -1000 216 .9728137107350383 -10 217 1.2883953286637833 -24 217 -.5936933246158256 -82 217 .4555208131650459 -92 217 -.5053527696575028 -100 217 -.6999644947624601 -109 217 .594613510859964 -112 217 -1.0234701615552733 -120 217 .08066852110551123 -145 217 .36449211652553526 -146 217 1.1131671002179653 -156 217 .8474226478484841 -179 217 .8687542371444011 -196 217 .1612200469279303 -202 217 .08897654821936495 -217 217 -.3639948484074808 -230 217 .7990469880472556 -235 217 .5734484006659317 -237 217 -.13787869980844678 -254 217 .09038900207314518 -257 217 .4099925849200745 -281 217 -.5052167360292698 -284 217 .1859662692296184 -301 217 -.7104380108303477 -311 217 -.6532450206090601 -312 217 -.02685793895571849 -323 217 .21496069557836547 -324 217 -.9368838746709416 -348 217 -.39839184069644556 -360 217 .9026906519179145 -364 217 .716328688823614 -376 217 .411206656231644 -384 217 -.3234935448260803 -398 217 .11667074799094444 -404 217 -.8149926565951295 -439 217 -1.1841490799313468 -440 217 .33619830151509095 -444 217 .11361462514927487 -447 217 -.7607943304419679 -455 217 1.6311897337085175 -460 217 -.2354405740768498 -474 217 .48528536530872923 -489 217 -.37382659267972856 -498 217 .1400553878633261 -502 217 .5870359512838308 -506 217 .16811635367542405 -512 217 .7593576515498733 -520 217 -1.4304935658503148 -528 217 .3266274311860921 -534 217 -.02265356682929988 -535 217 -.23072193996871027 -539 217 -.34830970775624287 -559 217 -.1959000120467348 -570 217 .1888613465319689 -572 217 .45908027566541587 -574 217 .5718079046181175 -576 217 .08758169134473284 -579 217 -.5758132921372547 -607 217 -.5869142871337749 -633 217 .1466740310981524 -644 217 -.2886701778062255 -646 217 1.0433375280954154 -649 217 -.2511222800601907 -655 217 1.144981387942831 -683 217 -.5656984089764573 -701 217 -.43383439896276443 -703 217 -.227875501810148 -745 217 .2572312835500418 -758 217 -.7811869172249175 -761 217 .5772092128583252 -765 217 -1.0768951436734897 -769 217 -.7098899149629762 -781 217 -.721944310568889 -783 217 .28351449192460065 -785 217 .43058048651831976 -807 217 -.13060172000890496 -821 217 -.2575614586047798 -834 217 -.08080319930398916 -874 217 .6255361430067778 -899 217 .7901493983245984 -902 217 -.46102408204206646 -913 217 -.19308783669958218 -936 217 -.340536053216156 -951 217 -.38484982363242587 -952 217 .3241572746171968 -953 217 .29327357900616985 -957 217 .09819757841408552 -964 217 .10418109615266759 -969 217 .09172393094863156 -970 217 -.0006653545852774445 -973 217 -.5784757472911803 -975 217 -.2989599893755356 -992 217 .14546673887671568 -997 217 .6370473998693122 -998 217 .5541935980955851 -5 218 -1.589217628399352 -10 218 -.04577142022815914 -11 218 -2.4573645487612223 -23 218 -1.0184723219722378 -27 218 -1.706046231331556 -29 218 .17910122548411492 -38 218 .2696145668737196 -47 218 .5300849399656891 -69 218 .7359702395983067 -78 218 -1.0740078732993013 -91 218 .3516896056864347 -105 218 .2141914005693636 -109 218 -2.152509980482689 -117 218 2.127948290168529 -140 218 .5266112840962532 -141 218 1.478415344328222 -155 218 -1.4771472418512483 -162 218 1.193784358705342 -171 218 -.10744397495499056 -177 218 1.1689748410359382 -191 218 .29758658504728347 -192 218 -.695935774180314 -220 218 -.5689086068769718 -228 218 -1.7990259733666827 -235 218 .4032855834732223 -256 218 -2.8283672257194064 -292 218 -.27625546326163114 -310 218 -1.044328003652238 -318 218 1.4469266142102493 -328 218 .412428129876044 -329 218 -.20553502812710198 -345 218 -.5523305327322702 -350 218 1.076170664056641 -355 218 -.9919970511228975 -357 218 -1.20397159960488 -360 218 -.44757738001602154 -367 218 .2988697694518426 -370 218 .07875088914858006 -379 218 -1.0792825691602164 -381 218 -.0705812767756194 -391 218 .8009697210495657 -405 218 .8905554896448602 -409 218 -1.330298693778231 -419 218 .2312750481676621 -423 218 -.7875831790216407 -432 218 .5753371833774387 -436 218 -.06611383311886086 -453 218 -.038464248467733234 -491 218 .47409959520613076 -506 218 -.2404123625598673 -508 218 -.37985860164607643 -510 218 -.6496106269184002 -525 218 2.3618807174274585 -534 218 -.6637891034840344 -545 218 2.1665626219899035 -550 218 -.0890823675939764 -575 218 1.9347330390570832 -586 218 -.7047417547925987 -608 218 -.97960635315397 -620 218 .0641608357737496 -631 218 .679315642321465 -644 218 -.6778421194091655 -649 218 .38046727074403247 -657 218 -.41206018611922207 -685 218 .5009300912714048 -696 218 -1.0236821238343836 -716 218 1.9171908493976715 -717 218 1.4440708245864917 -718 218 .12002714769569695 -755 218 -1.0145454772457585 -771 218 .9270614140372868 -780 218 .7069401517485762 -786 218 .7384209895307562 -794 218 .942780457609992 -805 218 .9250208268305495 -808 218 1.4164133218575299 -809 218 -.2629420616344899 -822 218 .017169036846665084 -851 218 1.656929913661219 -854 218 -.4663685110301551 -856 218 -1.5173590460849022 -864 218 .8803192055434256 -878 218 .23633396620996305 -879 218 -1.1130197897472485 -883 218 -.381713020185115 -888 218 .9459456583244633 -898 218 1.3732146797414881 -900 218 .854305868669008 -903 218 -2.3231680268760058 -929 218 1.160151037266016 -931 218 -1.084722920670209 -938 218 -.25245668829160045 -947 218 2.8470050177044843 -956 218 -.4187056389024676 -973 218 -.3099626855235765 -981 218 .5601053715811791 -991 218 -.6234738074680881 -998 218 -.31181148345239107 -4 219 -.48221082381192926 -26 219 1.2294329327787628 -36 219 .4343019559876491 -54 219 .18269577934288622 -94 219 .9105787204993767 -125 219 -1.3453844384505294 -129 219 -2.4444198499770877 -139 219 -.8549556918085185 -142 219 -.24136918061181345 -162 219 1.0100477157961212 -193 219 1.0222723228889017 -196 219 .3936060993472441 -206 219 .6836746472283795 -231 219 .45748862604740603 -232 219 .5086961007054264 -245 219 -.40584955534606226 -258 219 .5464475262425522 -259 219 -.6579848041610585 -260 219 .6751337329478141 -269 219 1.520983106987387 -287 219 -.9943029232590599 -293 219 -.47165100477460403 -294 219 -1.5584142984576335 -306 219 -.36388297495811794 -318 219 -1.0921781511458222 -325 219 .5411758618334209 -330 219 -1.49834892905137 -331 219 .16749855986784165 -339 219 .18284299839252594 -345 219 -.8689938966928803 -351 219 -.8257081629759069 -355 219 -1.7706873460891828 -368 219 -.2730362504342595 -375 219 .2837453329799371 -390 219 .10834468587630997 -396 219 -.5800570495731289 -404 219 -1.6431048277575862 -414 219 .5948767942162774 -418 219 2.465647247276908 -427 219 -1.9002832312383326 -449 219 .7482672741507558 -472 219 .41862156373391574 -476 219 1.5206515240988279 -495 219 .2374988858100473 -502 219 2.0609707482355506 -506 219 -.4361407878993289 -540 219 -.010141547607805279 -544 219 -.743922623505405 -553 219 .5240173464857419 -562 219 -.2993319919070221 -566 219 .7165759662193892 -573 219 -1.4856021459203956 -581 219 -.8595009144935944 -594 219 -.8817225952177776 -607 219 -1.251932652641786 -609 219 1.401356935984572 -611 219 1.3408875951478483 -613 219 1.3441782726146012 -620 219 .43790938248981454 -622 219 -1.202430646505121 -628 219 -.30335011759669706 -643 219 1.2012645844751202 -646 219 1.1047214595663397 -662 219 -.2057017478748991 -679 219 1.7200866080136148 -700 219 -.41445968908888714 -718 219 .05816697596542343 -722 219 .9857418882984236 -739 219 1.2437566088180627 -750 219 -.8905518647826802 -776 219 1.0779150176036603 -780 219 .9458301393971251 -788 219 .5430328189534365 -789 219 .2718414396847511 -805 219 -.5062094729543308 -811 219 -.5297125709606201 -812 219 -.254544738930461 -826 219 -1.1705028048324604 -832 219 -.46144522617789285 -847 219 .4148756466751925 -848 219 -.6996564000841654 -850 219 .9559845947493356 -880 219 .45908875912050434 -883 219 .26311100263725906 -887 219 -1.5302302516698485 -893 219 .806812457612653 -894 219 1.6724366602053093 -901 219 .8161669424674355 -939 219 -.26585182650653366 -940 219 -.2615435459297356 -943 219 -2.004871222741278 -945 219 -.38744379120036243 -951 219 -.9831063561269328 -954 219 .09076495596944928 -958 219 -.0703179323686579 -979 219 .050024145157834383 -981 219 -.14143227326016372 -992 219 -.7153425875093705 -4 220 .15008194226463534 -14 220 -.3395888338744764 -15 220 -2.0682895498624845 -20 220 .20381517153072068 -21 220 .8969498969190041 -31 220 .25171672092971714 -34 220 -.12988101669985605 -40 220 -1.8394804897824109 -44 220 .7282754846666855 -58 220 1.1541939790796696 -88 220 -.43603341457770345 -101 220 1.2360830027595182 -113 220 -.36761852645841864 -114 220 1.0830005485240735 -119 220 -2.73412651262025 -121 220 -.3617303379307379 -156 220 -.05800595463148134 -163 220 -.37306029272446223 -170 220 -.13971006590771726 -177 220 .2274853525215645 -192 220 -.8843264853825283 -193 220 .6204040375854477 -200 220 .16138342808782047 -210 220 1.7455476632800284 -214 220 -.6048669737293572 -228 220 -.3073964944505184 -231 220 -.4439814039434121 -248 220 1.2696953938081839 -297 220 1.6339768976564013 -308 220 .5440770858295232 -314 220 -.021877017511033648 -325 220 -1.828689923721 -335 220 .9016331496836199 -336 220 -1.6493391253294456 -337 220 -.18597162779844206 -350 220 .15064947816329022 -354 220 -.6781460419985569 -365 220 .28291826432597056 -373 220 2.1007386240836374 -386 220 -1.3572620051906892 -391 220 -.20779616710500237 -392 220 1.2298003587425095 -396 220 -2.012834415167059 -401 220 -.9189848485208797 -407 220 -2.467885374614844 -415 220 .008935737385359618 -419 220 -.5616656094192669 -430 220 .19865161691195288 -431 220 -1.2299433492307892 -444 220 2.263556817139302 -451 220 .6216985328901419 -458 220 .7339816514461537 -469 220 -.14766471451283594 -475 220 .06651845196541623 -483 220 .13818676653084744 -489 220 .6843261080466403 -493 220 3.304679556657507 -522 220 .08096812217462168 -525 220 1.6689220042240263 -532 220 .9824770385159085 -534 220 -.9498053205043032 -541 220 -1.167556871410352 -570 220 2.5972166796667406 -572 220 1.664457153379854 -577 220 -.2221891394999906 -580 220 -.11038181407222444 -583 220 -1.0846751189591122 -584 220 .5438189648288414 -610 220 1.2891215021176006 -619 220 -.10969273035793224 -622 220 1.7888232854970143 -645 220 2.325118831847647 -647 220 1.2956892901164359 -656 220 -1.2364630540946824 -670 220 .7714066675066363 -676 220 2.1150249010391318 -678 220 .8453687923633832 -680 220 -1.2966308411260399 -703 220 .4720645857423136 -707 220 1.5712323447304044 -709 220 -.5203819008993725 -721 220 -.943552498588962 -722 220 2.2068781657639427 -728 220 2.06024980646568 -734 220 .6134366772668643 -757 220 .33559055479757766 -763 220 -1.3968180821663112 -768 220 -.6399408860489392 -786 220 -.005465372808313523 -792 220 -.2666393141332558 -802 220 -.28660248493473733 -815 220 .7365059488024593 -819 220 1.6350447168822804 -823 220 -2.0096749626486097 -834 220 -.5130189793290342 -836 220 -.100657243437553 -841 220 .7467863312105854 -845 220 -1.2565392166205755 -849 220 -.9842890473516005 -852 220 .6459738435933141 -876 220 .9864884269497799 -883 220 -.9630634925610906 -889 220 .781719301381693 -906 220 .8835615384878386 -923 220 1.664695975309473 -929 220 .18325239536196916 -933 220 1.688548072353577 -935 220 1.1633088844815038 -946 220 -1.8070009388691834 -955 220 -1.3577700361346188 -962 220 .9636956484670507 -965 220 -.7596086373292423 -979 220 .7797717126257708 -980 220 1.3031688401662511 -982 220 -1.3794992254934595 -986 220 -2.464455483913699 -991 220 -.25010731274811715 -1000 220 -.7583878001904627 -3 221 1.3213798356244153 -4 221 -.41416024203454427 -24 221 -.10194669288070643 -25 221 .9993702518624085 -35 221 -1.111025960650518 -36 221 -.5541689669048223 -40 221 -1.302605833235126 -45 221 2.6703805423997733 -56 221 .9131821068806696 -64 221 2.0258103301302772 -85 221 1.783757581714333 -86 221 -.9046558210139158 -91 221 .2112686223073012 -100 221 -.6035231593587649 -108 221 -2.4848456498523457 -110 221 -.49240136318788663 -113 221 -.8056178217817382 -116 221 -.3288694376695406 -119 221 1.6155045902459557 -125 221 .5993617277086852 -129 221 1.3415353207144751 -155 221 1.7420827928248104 -160 221 -2.0949307569871105 -178 221 .6585731199567997 -181 221 -1.062772735419305 -200 221 .23470411868079005 -221 221 -2.077126828068837 -255 221 -1.3321543155757092 -270 221 -.3545283880875633 -293 221 .00022056280983143162 -324 221 .4725352891100071 -325 221 -.5965646095147257 -331 221 -.06573011958357497 -340 221 .6918327362386256 -351 221 -.8766978753746483 -353 221 -.5872349298916004 -400 221 .7231596789135529 -405 221 -1.184503875936661 -414 221 .27383211552475 -419 221 -.18461863234588471 -432 221 -.4645362646017079 -433 221 .29574521344686244 -442 221 .47000543532632066 -452 221 .24660782643744733 -455 221 .2454068404526135 -463 221 -.5987768079784418 -467 221 -.2857689295760197 -493 221 .1464565352457117 -503 221 2.3438663988474877 -516 221 -2.014870482554607 -524 221 1.6738811487140994 -551 221 2.271631099913911 -558 221 -.0726825653183732 -561 221 2.623267506101641 -576 221 2.2664663397447526 -578 221 -.1651219283863651 -580 221 .3776876158034764 -584 221 -1.255416827256356 -625 221 -1.8392658851649242 -632 221 .661132799246352 -635 221 -1.4820702937346666 -637 221 .7026607089509913 -674 221 .17668333792170687 -687 221 .9707936483452988 -705 221 -.5903003078739864 -709 221 -1.4198198985875377 -714 221 -.3598144333225302 -722 221 -1.5242974801653868 -734 221 .3060415444731551 -737 221 -1.1785723738058649 -738 221 1.0313446289613162 -739 221 .044548332999150925 -754 221 1.3378933349761764 -757 221 1.920655884196384 -759 221 -1.2304541439675447 -762 221 -1.0126688936268011 -782 221 -.9055273322225209 -786 221 -.9355231893931544 -796 221 -.8006417604221914 -801 221 -1.3978083018404168 -806 221 .06383301369519909 -840 221 .7069119421237924 -841 221 3.4085071265425664 -844 221 2.044211498534933 -861 221 2.2196697085565282 -870 221 -.1805182148278731 -883 221 1.3386009030829276 -896 221 -1.0579275726393005 -901 221 -2.112650615244778 -940 221 -.6366473587963466 -945 221 -.9236195512583221 -954 221 -1.1405316342989575 -956 221 .01949938745942814 -964 221 .2721254749895099 -977 221 .7433338534392464 -984 221 -.8407635924613487 -989 221 -.7079737377347174 -1000 221 .7462951129437899 -5 222 1.0574122623725133 -39 222 1.3160708091137359 -51 222 .6037066113144809 -82 222 .8007280337870413 -94 222 -.9125123580514691 -95 222 .4100336617755727 -104 222 -2.033357187879057 -122 222 -.16333354526946914 -125 222 .599336183556014 -153 222 -1.5738586494176947 -171 222 .76315758199828 -175 222 .33501121278073215 -180 222 .9657436026557397 -192 222 -.6476655085348875 -193 222 2.2404681450052775 -206 222 .8629130730473212 -222 222 -.955266215091344 -228 222 .09364911657380214 -242 222 .3878347428131308 -244 222 -3.0415377880129286 -257 222 -1.4523067368659184 -280 222 .3404079876535957 -283 222 .8238044073902191 -286 222 1.1997659465117292 -296 222 .4321253649669662 -304 222 .24580780415212689 -311 222 1.772051640401547 -347 222 .650732825803443 -354 222 -1.032613005650356 -355 222 -1.957150605658967 -360 222 -.9579482802911155 -369 222 -.8951863854081065 -402 222 .08436057055972572 -407 222 .6815499686005844 -410 222 -.024921676756120524 -419 222 1.3393997215527769 -461 222 1.781571397796254 -464 222 -1.0456419974523141 -469 222 .2904787776153567 -470 222 1.3372693460095926 -474 222 .26455908265537376 -478 222 .9703185331974942 -488 222 .12229294695902634 -493 222 -.32495120697622165 -494 222 1.5523602088461765 -505 222 .8223106077143536 -529 222 .6129907504760408 -560 222 -.4897403833187884 -562 222 1.6338784526294337 -568 222 -1.4009180482935206 -577 222 1.4972903218853322 -580 222 .11411617858513706 -588 222 .06075310377581769 -592 222 -1.026669917487415 -594 222 1.005767274040703 -604 222 1.1097020506470687 -616 222 1.217598320414304 -632 222 1.4171366248635755 -635 222 -.4729496348224342 -656 222 .8946475064698016 -658 222 .8749421822407949 -663 222 .39002697057590374 -665 222 .6036093880083361 -668 222 -1.0064884445971398 -681 222 -.05275048208204977 -710 222 .8881857819772925 -713 222 -1.1718549596288887 -715 222 .7155059836463992 -733 222 1.299025191621686 -746 222 .024010804703497618 -764 222 .2960511022336059 -770 222 -.45207986805355943 -771 222 -.19305169095216934 -778 222 .39407111436070186 -782 222 .2957633614736482 -789 222 .6611183786468782 -790 222 -.5910224634264941 -795 222 .5217139765983315 -803 222 -.411497777991813 -808 222 .5106087257930049 -816 222 .13130332124051153 -817 222 .536985076816897 -820 222 -.14378362230434238 -826 222 -1.1688817384128751 -840 222 .18448476002717443 -844 222 -2.475049278295837 -853 222 -.10821747549405311 -855 222 1.7561850345591954 -869 222 1.5743599439291809 -873 222 .16689264897692743 -874 222 .7409759204849015 -882 222 -1.6400499164365403 -906 222 -.26012842773793304 -953 222 .9737087176700336 -956 222 -.8636971164891744 -957 222 -1.2334871667599945 -958 222 .8122315110849061 -960 222 .18761776929795043 -975 222 .4083070048944424 -977 222 -.5245375840324317 -996 222 .22770007703438577 -998 222 1.2064652834619296 -1 223 -.062386810221234976 -4 223 .5239028512038172 -12 223 -.18458992280278258 -21 223 .17570730344866634 -29 223 -.5027677086231339 -35 223 -.0939136144804287 -39 223 -.8750573150213564 -41 223 -1.0548233129119668 -56 223 .5033276860117888 -66 223 -1.5195576224354048 -71 223 .4458836523581172 -73 223 1.2104097112795178 -77 223 1.0913950855587435 -79 223 .4399703150774758 -102 223 .9444955689786256 -119 223 1.937669024065871 -130 223 -1.8160927596650702 -131 223 .49962738803061896 -138 223 1.9306370561211184 -142 223 .610460514269227 -167 223 .8617732578958182 -179 223 -1.117980526088239 -190 223 -.45945030661031677 -208 223 .8329491256595751 -210 223 -.9994755136282051 -218 223 -1.8000687745578647 -221 223 2.8093306950046535 -222 223 -1.066156515317996 -228 223 -1.2428771682213753 -245 223 1.4039783153427947 -256 223 -1.6379783994498267 -262 223 -.5522376764387654 -279 223 .8676881136413686 -281 223 1.483280711872039 -282 223 .2722547688835063 -290 223 .47272883756217227 -293 223 .6924281591823348 -299 223 -.8713787788253938 -319 223 .005373456331137597 -329 223 -1.5723832534399058 -330 223 1.085390374919882 -356 223 .49626977029898334 -370 223 .8336895962076766 -380 223 -.7852486887665163 -392 223 -1.4059098253431 -394 223 .8234355831237687 -396 223 1.6343196350992462 -397 223 1.5652899072680246 -405 223 1.4489565248147491 -415 223 .24674607219050876 -420 223 -1.5755408970687517 -435 223 1.146857887602381 -442 223 -1.4653896051405684 -449 223 -1.55886992892539 -450 223 -2.928295046964252 -473 223 1.3726218982956668 -494 223 -.22476518771690984 -497 223 .23163660531753996 -501 223 .3199630769214218 -524 223 .06158510602377197 -542 223 1.3555399638567789 -549 223 .3935575841698732 -556 223 .3417617554867977 -561 223 -.9300606418940197 -565 223 1.754119700669389 -581 223 1.2563091085545297 -583 223 -.0004228442972542684 -600 223 1.1557832278329383 -613 223 1.0601740965078872 -614 223 .9292199554431703 -647 223 -.4363859931857451 -648 223 .5608416257377145 -654 223 -.5779822503649432 -655 223 -1.1089757410220096 -688 223 -.09427212367037685 -702 223 .36961344903448345 -707 223 .25339532865988645 -715 223 2.3723866827945725 -742 223 -.8912813164504485 -744 223 1.0140143322854351 -750 223 -.6122397286993114 -764 223 -.528405189369024 -780 223 -.15868684373345743 -784 223 -1.059587081279381 -798 223 1.8535250883411354 -803 223 -1.304640235142205 -808 223 .3385875793429815 -813 223 1.6260826698212347 -825 223 -.7992450412459621 -836 223 -.3214609840596939 -838 223 -1.2383824475565546 -860 223 -.01109573425706159 -861 223 2.4110985435538828 -932 223 -.5638357725388506 -943 223 1.0475771259045805 -951 223 .7266184007210504 -969 223 -1.90224884952463 -984 223 2.0279779970909653 -990 223 -1.8094971056491844 -993 223 .9155629909919286 -998 223 -1.280166553336326 -28 224 .13396916196031255 -32 224 -.8781496345236567 -56 224 -.16695085628965847 -70 224 -.13524550967365986 -74 224 2.2445825924464518 -91 224 .03738559786567937 -94 224 -.5427167983766992 -99 224 1.0718716560944324 -112 224 -.7347219918589499 -113 224 -.0725455147636965 -120 224 -.08516326268236818 -127 224 2.244491096537843 -136 224 -2.84306182473634 -141 224 -1.1252861231551328 -153 224 -.5790295243906586 -182 224 -.026399560088656515 -194 224 1.4503078807607679 -221 224 .07571269258548348 -231 224 .90026016142613 -234 224 1.3475752496093023 -249 224 -1.5588301196269645 -254 224 -.9397306545313425 -255 224 -.8626578355160128 -256 224 -.5136788656891863 -292 224 -1.4245210747460348 -296 224 .5219821728227748 -303 224 .00567015821540319 -316 224 -.8781144361482988 -339 224 -.17300562387714433 -346 224 .18652039035591272 -353 224 -1.1710051297635284 -367 224 -.7703190115849459 -375 224 -.7375285780902434 -378 224 .985599021993823 -381 224 -1.409039249976503 -386 224 -.28465487994082617 -388 224 1.3083399093414307 -390 224 .07919977765986448 -392 224 -.44480468502387266 -401 224 -.5887494277926291 -404 224 -1.4110321971424173 -420 224 -.5207020794968974 -430 224 -.8797929653410622 -433 224 -.3312236414452949 -442 224 -.6252479045633762 -459 224 1.3891594326753138 -469 224 .2184535765813041 -472 224 .13320488189780672 -517 224 -.07290547885015064 -518 224 -.6821159634875943 -519 224 -.7226715892148692 -522 224 -.47919399520799794 -557 224 .3311107295862018 -560 224 -.02976582876083989 -571 224 .5968523279733273 -584 224 -.6662250657225194 -594 224 -.6062871635895826 -596 224 .5209410511487665 -604 224 1.8615565919435848 -607 224 -.3642640559105432 -623 224 .9911706463755954 -631 224 1.58105630345702 -652 224 -.3934355704255993 -676 224 -.22289543646268808 -710 224 .9713070594752504 -712 224 -1.105890710986505 -719 224 1.446536155651393 -729 224 .2774209380282915 -732 224 1.2702770802435785 -775 224 .6110128842210717 -778 224 .8872518659217346 -786 224 -1.185003474047933 -788 224 -.25961122872976233 -796 224 .9209453890814052 -828 224 .6757255224593289 -853 224 -.8263970868404358 -863 224 .8743904658587683 -878 224 -.08948389123555307 -892 224 1.037396016271754 -906 224 .37612900069242416 -908 224 -.6492555849872311 -911 224 .3098763382874322 -930 224 .6485136648332979 -932 224 .07234707059491619 -934 224 -.9018527919786992 -935 224 -.26531779687213236 -978 224 .4682662075411281 -3 225 .5196200789834267 -12 225 1.39759062694362 -28 225 -1.36297645839045 -33 225 -.2559615648321372 -48 225 -.36967407154408116 -52 225 -.15986284428822592 -53 225 -1.0788991685372116 -58 225 1.5728396076912499 -67 225 -.37657414245442977 -69 225 -.07568822547195643 -91 225 -.35752729304918623 -92 225 .36212496992707244 -94 225 .2249989490208823 -104 225 -.06037715263841186 -115 225 -.5966120943023885 -121 225 -.7595532840357905 -133 225 .628902647723266 -152 225 -1.952853279259203 -165 225 -1.0021752178993848 -175 225 -1.2012720408207198 -176 225 -.6824764479077391 -180 225 -1.2117913476980253 -189 225 -.7022480951679745 -194 225 1.3353658261323424 -218 225 .7813701908777366 -224 225 -.42232263921191154 -247 225 -.618877336981969 -252 225 .2542365657701148 -266 225 .3240642041897758 -274 225 -.35824895879168145 -275 225 .9568942567665014 -282 225 .7757853232025925 -289 225 .2520747568389243 -297 225 .20709887399976745 -304 225 .8214437617267566 -307 225 -.04369718602177847 -314 225 -.017239241958269202 -316 225 .31032292329413014 -320 225 1.2856047275878428 -324 225 -1.4147708146489486 -344 225 -.33467092420706884 -351 225 -.8725906373513086 -371 225 -.3269075499841335 -376 225 -.5734750358705502 -379 225 -.13961513476264198 -383 225 .9074238561042864 -385 225 .08177764543630653 -396 225 -1.4259705523383106 -400 225 -.5443589286650311 -418 225 .4339192818049886 -420 225 .3390447371615409 -421 225 -1.430433917334926 -423 225 -1.0778994416780212 -430 225 .4318293578498906 -452 225 -.6176241786650479 -455 225 -.7966245816440309 -463 225 1.188265730694923 -478 225 1.2256729144929799 -494 225 .48600327778940616 -504 225 -.7281220564007369 -513 225 .43920330189471835 -530 225 -1.1230661859730047 -543 225 .054504685982568885 -560 225 1.1077116752374876 -563 225 -.12345650839605359 -570 225 .9535720061917745 -588 225 -.07885806864952849 -603 225 -1.1154579948864567 -613 225 -.44199704878312374 -620 225 -.7663207911048456 -628 225 -.9617483368871299 -629 225 -.1663833926532164 -634 225 -2.6425909623937036 -637 225 2.0801263262418916 -642 225 -1.4807685810957696 -648 225 .5596097312044818 -653 225 .3076271377562708 -657 225 -1.0156178067015813 -672 225 -.022454504408680465 -682 225 -.2135214168227234 -687 225 -.3957650721210667 -695 225 .731310445322566 -730 225 1.0082637736375266 -736 225 -.2240975531286056 -749 225 .5572319310121525 -752 225 .6327612753885511 -764 225 .23186381118361993 -765 225 -1.0551893750546175 -766 225 .905567748278316 -767 225 -.09910559089528917 -779 225 1.0190117270770014 -780 225 -.12562420126485124 -793 225 1.130660714952373 -807 225 .1645564749220697 -811 225 -1.4821629786091586 -817 225 1.2892947474927625 -829 225 -.9511654206814747 -854 225 .5820307933259297 -855 225 -.578836288008936 -865 225 -.537721228232255 -866 225 1.5854375273323298 -876 225 1.5827650098002155 -886 225 1.3138640551610008 -901 225 1.1973255402906964 -931 225 .8141387142794762 -934 225 -.20902096735862863 -942 225 .23539181568968068 -961 225 -.8442539925775815 -964 225 -.18963603311110713 -984 225 -.7965948882451432 -989 225 1.1157131153781377 -6 226 -1.107777569449089 -15 226 -1.9714633637159538 -30 226 1.0387431610202946 -43 226 -2.7987059695482226 -44 226 .4185789985289045 -56 226 -.7986250674178782 -62 226 .4269839591849588 -81 226 1.6452300076242914 -100 226 -1.0819428159582816 -105 226 -.941024737744887 -107 226 -.30406232790555227 -109 226 -.5119190818158555 -111 226 -.4084330220821449 -124 226 .5361518560764496 -126 226 .3388602865701777 -141 226 -.4473514091033234 -144 226 -.029454782764483455 -172 226 .8555368480847798 -180 226 -.21502051489370239 -207 226 1.1799629275913208 -209 226 -.678570215313754 -217 226 1.8357799659703486 -233 226 .9288047422526641 -244 226 .897714463297439 -248 226 1.3594305958789252 -260 226 -.31948468695303883 -261 226 -1.001154311711236 -263 226 .3295159659185104 -275 226 1.1416150127952829 -288 226 -.1499153862993918 -291 226 -.7422330318373801 -317 226 1.421736758194407 -321 226 1.3356681422935592 -322 226 -.5570995765279587 -334 226 -.40694566880035976 -378 226 -.2260087064644361 -389 226 -.3924837743862517 -441 226 -.5152397149956216 -444 226 -.44429614934755063 -455 226 -.1435425918359625 -461 226 .49419558249026296 -465 226 -.8901378625523015 -489 226 .824147061107503 -518 226 -.056061035953801686 -526 226 -.9121207571678523 -539 226 -.05480701266271504 -549 226 .8261786186996749 -603 226 1.82826152092372 -605 226 -2.370616552550591 -606 226 -1.5141465354751127 -615 226 .38742426985326783 -622 226 .07235172416926466 -625 226 .4973241857820907 -631 226 -.7912807504204366 -655 226 .13225560556549976 -657 226 .30813846242017484 -691 226 -.5886091812077987 -698 226 -.5500619592780338 -701 226 1.80957207239681 -713 226 .4807012109907619 -723 226 .35648938351046533 -773 226 -.10737145719200797 -778 226 -1.515521708487918 -815 226 .8635281823511775 -816 226 1.4872642010846993 -818 226 -.9266226613460219 -833 226 -.3501524715294444 -839 226 -.07325495583644481 -868 226 .703234628384312 -874 226 -.8687698583152067 -879 226 -.2424990205330745 -885 226 .8935201980065597 -886 226 .1800957034374539 -900 226 .7858146955038485 -909 226 .7407516980647075 -917 226 -.7290907257664617 -919 226 .07933579848087269 -931 226 -.2014207937351068 -936 226 -.5062918575763555 -949 226 -.32295412071265056 -971 226 .3277290312094526 -975 226 -.6667440075227297 -976 226 -.9890046617247539 -983 226 -.20578022625548556 -987 226 1.1056392696069128 -11 227 .3299752934657544 -16 227 -.5232013978505532 -20 227 .9355992257473129 -23 227 .43731508078573644 -25 227 -.9527015525137561 -31 227 .11687041751614266 -54 227 -2.0451541482774545 -56 227 -.687130824715121 -77 227 -1.5654423304266918 -82 227 .8896591867485865 -90 227 .2477137772694819 -91 227 -.4278988646914476 -94 227 -.711350045052543 -102 227 -1.634990097525539 -103 227 .4242006789702686 -120 227 -1.0123821211522082 -131 227 -.6089356107284403 -145 227 -.09734409955167284 -158 227 -.7284984159547483 -170 227 .02930217621524353 -172 227 -.3465508632824477 -179 227 .7232651579790297 -187 227 -.23007137512028072 -194 227 -.6670255578316429 -222 227 1.302133799885203 -228 227 .611426856537871 -263 227 .08159998955173803 -264 227 -.13946472878813365 -268 227 .6438145468133387 -274 227 -2.080688561022615 -285 227 1.0959367530103337 -304 227 1.0640181019204993 -305 227 -.43096211590042544 -309 227 -.5515287742414772 -321 227 -.8797460236168543 -346 227 -1.0603417071623504 -353 227 1.1112453502792425 -364 227 1.1826333018806698 -367 227 -.38213275339200564 -369 227 -.09510509817729347 -371 227 -1.128555189676851 -387 227 .21066702950186397 -399 227 -1.3271790018009508 -400 227 .02132183478757399 -408 227 .31993324826174013 -433 227 1.5183150209778717 -434 227 .41352333934362295 -464 227 .0949911352143139 -470 227 -.16576316130862734 -476 227 -.5054677760827665 -489 227 -.6044684711743386 -512 227 .050326215608059895 -519 227 -1.2282762977174162 -534 227 -1.5656844813047894 -559 227 1.5303875011229244 -575 227 .44163579319881724 -580 227 -.41577696448373647 -606 227 .22049195849047198 -614 227 -.08585780266856965 -637 227 -.19152148590513926 -642 227 .05851823679450821 -650 227 .213276610783272 -656 227 1.3988257617265314 -659 227 -.2736860243225411 -671 227 .6586108460871306 -672 227 -.132231221167591 -675 227 .22842469202193805 -688 227 -1.934233935875977 -704 227 -.787020655432335 -712 227 -1.3394714432212862 -725 227 .2621105055505638 -732 227 -1.6985690145066958 -744 227 -.5393473796218072 -745 227 1.0696353443520783 -763 227 .8408138169623747 -779 227 .046720199443826174 -801 227 -.08709432013298604 -811 227 -.7154887279496962 -830 227 .37736447997249245 -841 227 -.8361192777795333 -844 227 -.5762690788143453 -847 227 1.7279770363993563 -855 227 -1.2272438899104352 -870 227 .3936098942595022 -884 227 -.9825437773267754 -899 227 1.0363734381260576 -902 227 .2623354605338334 -908 227 -2.0484375201716696 -915 227 -.49658718450554934 -916 227 1.074972433427837 -981 227 -.2797106049949045 -999 227 -1.4782615288646037 -23 228 1.1117457280942378 -29 228 .9515336784205843 -33 228 1.0887181600247946 -44 228 .2988325622280754 -58 228 -.04154722217722502 -60 228 .5811923293537224 -73 228 -.5347530240318925 -75 228 -1.5118537411255129 -79 228 -.41400901985545946 -86 228 1.1708110975114945 -91 228 -.33051815247920713 -95 228 .7280617201396955 -96 228 -1.5372250442888347 -117 228 -.78383083562254 -134 228 -.0688698727694733 -136 228 -1.2155787631391368 -140 228 1.157958654755344 -146 228 1.5721525498846014 -157 228 .632798333231596 -171 228 2.0922664217396005 -182 228 -.7650239057894723 -187 228 .1846647171097452 -188 228 -1.1715791710007135 -189 228 1.5308401812377799 -191 228 -.3771641765545545 -197 228 .5348554477903414 -211 228 -.782778284628303 -237 228 -1.133380987410444 -243 228 -.22210326680724146 -252 228 1.016350388765643 -253 228 1.3318726661399665 -263 228 .5444346309974966 -264 228 -.9563019059805845 -266 228 -.7312625575565218 -288 228 -.553651777125961 -295 228 1.3108762374275327 -296 228 1.748077701459395 -297 228 -.6787596573953151 -311 228 -.4087511609302287 -321 228 -.06922571715050857 -328 228 .9426902458860826 -333 228 2.113211229304851 -381 228 -1.2932577567650625 -398 228 .604574577856915 -421 228 -.20973947644601612 -424 228 -.72760647512297 -427 228 -.7848438902712581 -429 228 -.19413350123398665 -439 228 .5838317053211235 -482 228 1.2328376557653233 -505 228 -1.8501468989413914 -513 228 .06461238307677045 -519 228 -1.6712017949832765 -522 228 -.9346791654347048 -538 228 1.3840779302701003 -540 228 .4266577467930689 -601 228 .16035432347248624 -606 228 .10098471096556055 -618 228 .10213844882582059 -643 228 1.1443677071195033 -656 228 .9711580970295961 -659 228 -1.597823920125562 -691 228 -.31478197086404547 -694 228 -.5763609588887753 -695 228 -.028101205250929358 -696 228 .1360970777547641 -707 228 -.4633710776878602 -708 228 1.3652984333211133 -716 228 .16928277056344498 -720 228 -.8171183954377041 -733 228 .1388044960548808 -780 228 1.4881475607366375 -783 228 .2652661597745486 -793 228 -.7585290207808674 -796 228 1.615338095571326 -797 228 -.07563825654049644 -804 228 .1944620828125932 -833 228 -.18675866375652875 -838 228 -1.2173026319523286 -849 228 .06289103816552334 -856 228 -.8044424603930329 -874 228 1.6110896325069808 -877 228 -.42090666058457415 -891 228 -1.2232477416052239 -904 228 -.6392118237480218 -913 228 .8899552191812787 -929 228 1.1249177183013384 -933 228 1.2546043499565234 -934 228 .8815243317818235 -942 228 -.038526882384843586 -945 228 .12056104570839132 -957 228 1.3362304001423013 -968 228 -.12537442033889543 -975 228 .5277592512766405 -980 228 -.038138670292620684 -997 228 1.7038835746674095 -998 228 .5111761588336722 -2 229 -1.486185912230946 -6 229 .7538543080509228 -13 229 .0773788110132055 -23 229 .24954184411603345 -33 229 -.6058779030314937 -63 229 -.20725853689751375 -71 229 -.6371285820243441 -75 229 -.44707448174821773 -80 229 .20481839972146254 -84 229 .010157251710398829 -114 229 1.761506035126998 -123 229 .9557685877665456 -127 229 .44751244043493144 -141 229 -.49553572134509494 -154 229 -.30223973739012916 -171 229 1.7321086365018896 -173 229 .8988419697452562 -217 229 -1.9877525574651802 -221 229 -.548992630343849 -234 229 -.4947390810347648 -236 229 .383688441070546 -246 229 -1.6326273209352489 -291 229 .8551474174180798 -294 229 .13401831509040418 -317 229 -.9645126353021855 -324 229 -.3759650613112516 -331 229 -.5741148537263134 -336 229 -.3327546974905394 -347 229 -.9009431060550311 -353 229 -.7852756919716352 -381 229 -.8639730214334687 -387 229 .8013121131700719 -401 229 1.4586725950236863 -409 229 -.3781378332543033 -452 229 -1.669189791772241 -470 229 -1.72368738357111 -503 229 1.4263295225721078 -536 229 1.2630056851607123 -544 229 -1.169914540516517 -562 229 -.419935537515074 -564 229 .4697569957594133 -587 229 .11845830222194907 -596 229 -.08168239139115363 -602 229 -.43241288634473174 -606 229 .32246912378564246 -650 229 -.6522744879489045 -653 229 -.5398969450191207 -661 229 -2.063931861739651 -663 229 -.31099995278950016 -675 229 -1.6033741835960662 -686 229 .6020009690591851 -688 229 .8587695945039341 -705 229 -.8293976645916534 -715 229 .029408474325679612 -732 229 1.8821802204411364 -737 229 -.6194631689317932 -746 229 .17327816168643842 -749 229 -1.0313849724230053 -783 229 .8032641572871023 -791 229 -.13923087237503587 -804 229 -.6611065447960419 -834 229 .20207232755375004 -865 229 -.38780202265798547 -869 229 .6750747303356227 -882 229 -.16504775263229182 -888 229 -1.0779455367927036 -894 229 -.8676224493796759 -895 229 -1.059149001007229 -913 229 -.26077347057149314 -914 229 1.1959322809160715 -917 229 .5600151401645432 -924 229 1.568613980815931 -940 229 .1639975944747053 -941 229 .20108616571531032 -947 229 -2.2277914214231216 -950 229 .4279167159270679 -952 229 -.853087383938316 -962 229 -1.3603783451954983 -984 229 -.26725023620988914 -986 229 1.248153953298216 -15 230 .006423650850464098 -22 230 -.9448643356335303 -84 230 .5393953345046579 -91 230 .44419557601937093 -111 230 .8472343769451193 -115 230 -.3297644739290073 -117 230 .31262279756471667 -120 230 .9044867018738929 -121 230 -.5091416225271983 -136 230 .20212170411010386 -137 230 -.9244759138474977 -142 230 -.024201497413637682 -143 230 -1.032989809432976 -153 230 -.15435632964195445 -157 230 -.9560456200580124 -161 230 -.30827613937998083 -171 230 .9126461959222311 -176 230 -.5322054592076781 -189 230 -.8144736538755031 -195 230 .014807760016191433 -201 230 .9289536284749559 -206 230 -.20585892239459766 -207 230 .8277266260619051 -211 230 -1.0175334958914812 -223 230 -.025609847548613146 -224 230 -.044277903261360635 -238 230 .16326812407538455 -240 230 -.48703623134623236 -251 230 .38994823157309916 -252 230 .4722118828596376 -258 230 .7909187828781371 -271 230 -.7026871055840596 -283 230 -.09926505200116877 -285 230 .8418945108092019 -288 230 -.26864241124506494 -290 230 -.08155258315502792 -291 230 -.3891521430361752 -302 230 -.14793152171268645 -311 230 .858573346813285 -315 230 .8958851454294562 -341 230 -.25302574931079636 -343 230 -.9814057633037938 -345 230 .42333262673936645 -358 230 .4375108914603668 -380 230 -.718597672350631 -394 230 -1.062897016532439 -397 230 .2144442220732376 -401 230 -1.0209083532273389 -416 230 -.9642360528396682 -432 230 -.25773397719742985 -436 230 .2705139808830025 -439 230 -.08191013464086447 -452 230 .7676630033982638 -467 230 -.365325783727353 -487 230 .9037148581988749 -508 230 -1.1160097237822537 -538 230 .8935334009053844 -544 230 .8171542008476765 -550 230 .9665795679197406 -559 230 .8584117234629198 -567 230 .7460336406634546 -572 230 .8994274203058245 -584 230 .1596519387056299 -591 230 .4476029910414807 -597 230 1.1257129510143462 -603 230 -.7823151642938907 -621 230 -.14986349960097373 -622 230 .6988064041379989 -629 230 -.3005137627262272 -630 230 .8030355232273195 -668 230 .5804795074325593 -670 230 .8974337476140989 -709 230 -.2943811981005858 -711 230 .6583969285335165 -724 230 -.41414381669343625 -735 230 .44740351272767254 -738 230 .45149282516860645 -741 230 -.9554686586982809 -745 230 1.484836935999965 -749 230 .06357686355092595 -758 230 1.2349024048399893 -762 230 -.6921175956456598 -798 230 -.20406078225004565 -802 230 .04868956068532633 -808 230 .08894510815344715 -839 230 .547603811087217 -841 230 .9742045704154872 -842 230 -.7135623376618042 -846 230 .23803763037705677 -869 230 -.5482772791559465 -883 230 .5870070014215834 -890 230 -.1120933227029568 -891 230 -.9215681476413077 -939 230 -.3364959184996897 -941 230 -.7031897262676199 -943 230 -.20370823495514595 -949 230 -.5733432403116435 -958 230 -.37244208885185737 -971 230 .687253024839502 -973 230 -.3082541759758319 -982 230 -.15070657692456246 -988 230 1.125071056534464 -2 231 1.1887572061514755 -17 231 .14522744925982375 -18 231 -.09593514934486265 -23 231 .007563540982042032 -33 231 .07841505128003903 -38 231 .6743178577793307 -54 231 1.153760584316079 -58 231 .6059518626576708 -59 231 .6132206197641598 -92 231 .8942594185742127 -100 231 .7404208524590771 -168 231 -.5181961972493839 -174 231 .0690623511536687 -180 231 -.3158162175845419 -184 231 .8329701571945597 -185 231 -.36570915833599094 -186 231 .6533007619220247 -190 231 1.008088592032812 -203 231 -.1672586136756649 -210 231 -1.08564408266802 -221 231 .8049635131805082 -223 231 -.10479307389524328 -225 231 -1.1476804548075445 -277 231 -.40711095640793293 -289 231 .5089427135919529 -296 231 -.348749383110725 -328 231 -.11601189801821207 -329 231 -.3681376194747855 -357 231 .28036012434682167 -359 231 .5456378262319083 -363 231 -1.435501180966983 -378 231 .00282656900386752 -392 231 -.2960745378507611 -400 231 -.14500665393169446 -402 231 .7970640130517151 -443 231 .8149233901525494 -448 231 .7630474950681806 -449 231 -1.4179875484843696 -456 231 .21410682331768363 -462 231 -.005462841610494318 -466 231 .673498621841126 -473 231 -.14416907519019018 -503 231 -1.0854596029792511 -506 231 .04544116922001948 -522 231 -.616644883593158 -528 231 1.1664439783349483 -542 231 .6079584208733039 -547 231 .7375402494945206 -557 231 .6708054082608446 -576 231 -.4355578425325813 -584 231 .9250437988613498 -585 231 .4467603746267806 -595 231 -1.172347684648958 -598 231 -.3010457439743987 -606 231 .814312786688671 -609 231 -.7094414444594005 -640 231 .47749534996191334 -683 231 .4098651556438838 -685 231 .9110668191714498 -689 231 .8254583464688425 -696 231 .46992085200840006 -703 231 -.1407452810207048 -706 231 .6931740837737369 -741 231 .4744789108032558 -745 231 1.007668975462175 -746 231 .38453063964408707 -755 231 -.6267802364876314 -758 231 1.0870739913517296 -769 231 .6661010094853682 -782 231 .03836608542774145 -787 231 -.9118299386437883 -796 231 -.23421325398890752 -798 231 .748763658107604 -800 231 -.07703389175028738 -802 231 .0364180413335031 -807 231 .15902927369210224 -811 231 -.8320255646278105 -821 231 .8156320525478377 -822 231 .8584586701454683 -846 231 -.4317483669231893 -855 231 -.025177827579044673 -881 231 -1.306337195185523 -888 231 1.568328550960721 -906 231 -1.0853646428743262 -913 231 -.4907871567314589 -919 231 -.5665679260343661 -930 231 .17068739284900156 -931 231 .2665080638771536 -940 231 .1669809113047029 -962 231 -.20417503612780985 -968 231 .17159475955404963 -973 231 -.2733562462115967 -975 231 .19566808299251431 -978 231 -.5043455755558786 -980 231 .39127720591208026 -983 231 -.12056310399139739 -987 231 -.021373503001759123 -994 231 .3143430075335775 -1000 231 -.5572311579720954 -12 232 1.0002189621717394 -45 232 .3291992350263812 -49 232 .6720006641692142 -61 232 1.1136935337467553 -73 232 1.0739360746665414 -78 232 -1.576384076451296 -81 232 .4006042845120934 -95 232 -.7097214084518558 -96 232 .03652674708103973 -118 232 1.6767680633103197 -126 232 -.5251545557201869 -135 232 -.07640443407102013 -137 232 -.4149409046822064 -147 232 2.403850826377252 -157 232 .3526018416885546 -160 232 2.091176640974358 -173 232 .11503133393620929 -174 232 -1.2437096043416123 -175 232 -.6329256388982065 -194 232 -1.5173218224531007 -213 232 1.0009595788120047 -218 232 .34460391563386955 -221 232 -.9759605073974429 -235 232 -1.0306846531919271 -237 232 -2.079377835474043 -255 232 .6272660550605269 -258 232 -.5625812625787331 -263 232 1.763097234084011 -281 232 -3.0556017286051733 -289 232 -.2945931952148628 -313 232 1.077954939329547 -322 232 .21847684088832814 -330 232 -.0528884167640664 -338 232 1.0858966121701528 -352 232 2.60127525255869 -353 232 1.605710779125419 -357 232 .0970750896782141 -366 232 1.0950372907230934 -382 232 -.3222752104108294 -387 232 1.3665359405508497 -418 232 -2.0617797861143337 -419 232 -2.0149490438400344 -420 232 .9596190797260319 -430 232 2.2799044275672844 -436 232 .9303711730836703 -463 232 .7585775591229067 -472 232 -.07437067285360811 -487 232 -1.3104437269187517 -493 232 2.2355340293341714 -541 232 -1.1719107638812385 -556 232 -1.424625223232523 -582 232 -.14974241873763455 -585 232 -.5435567029103252 -588 232 -.42369133846921136 -598 232 -.9725682306275982 -611 232 .6021348792909582 -617 232 -1.9687555329461728 -621 232 -1.1891664147625793 -624 232 -2.372240921047783 -631 232 -1.0342361210447906 -651 232 1.283902162868859 -652 232 -.3118161522429136 -670 232 .15627395496821098 -675 232 -.31160257075059433 -685 232 -.7195602431136441 -686 232 1.0257426628890414 -696 232 .21856140840081675 -698 232 -.7514201991558533 -707 232 1.3055368094460886 -721 232 .5332597618314209 -724 232 .4288638022341689 -727 232 -.0772540795754878 -729 232 -.17846041258779574 -739 232 -1.1304709912409279 -754 232 .5867039336463489 -756 232 -1.048911627754746 -792 232 .06002006231822159 -798 232 1.0649605450432336 -802 232 .2031901593665712 -839 232 .2908636988194092 -843 232 .39653356262962886 -845 232 -1.1377335511169189 -848 232 .5423191309586101 -865 232 .15230555421928282 -866 232 1.1090577641292476 -900 232 1.2378753009288839 -911 232 -.4305205478808895 -915 232 -.016163204748329343 -918 232 -1.1164658774742122 -922 232 -.32388417801196684 -930 232 -.33307039469426303 -948 232 1.372693585060997 -965 232 -1.3710027137469358 -970 232 1.4590079215037395 -988 232 1.86739812549418 -994 232 -1.0864647727627106 -998 232 -2.0912911122841353 -7 233 -1.4081474494016168 -10 233 1.4404934258370214 -13 233 -.4595757673971006 -22 233 -1.221586447722046 -28 233 .8499488261720215 -40 233 -1.6244521636654496 -51 233 -.8897353558492833 -60 233 -1.2097127346099736 -107 233 1.2692908515877954 -109 233 1.9288915478468454 -110 233 -1.2702524800584987 -117 233 -.9713771500625896 -128 233 .45079478845933435 -131 233 -.19772621450732633 -140 233 .20563881286431354 -144 233 .7633171688557161 -157 233 .520512017159349 -159 233 2.1221823311438195 -171 233 2.3310319120876803 -173 233 .9009426992534788 -207 233 1.671109109485948 -223 233 .06990971165611762 -224 233 1.3991189182068462 -236 233 -1.375346477836999 -237 233 -1.7416731657234465 -248 233 .7183769109941919 -264 233 -1.5963760434525827 -275 233 1.6245509235967435 -283 233 .34508020836453046 -284 233 -.27865272021209625 -290 233 -.47014964552333804 -295 233 .6194104876502002 -315 233 1.4851824016517101 -341 233 -.2445233497609002 -351 233 -.2569824583966211 -367 233 1.1821057450710208 -375 233 -.8083519219545529 -403 233 -.6163584562343061 -407 233 .10184672924561589 -411 233 -1.1561571795701417 -412 233 .21338995162677665 -419 233 -1.2882783077916529 -420 233 2.27413862335648 -422 233 .8440275272776774 -427 233 .1810928588568757 -433 233 .07981897049550782 -434 233 .34308073418819074 -440 233 1.6497887498957684 -471 233 2.140770440174114 -476 233 .19499380061770571 -487 233 2.5820367725845914 -489 233 .7296516430557669 -503 233 2.7831893846839413 -505 233 -1.0371600223309168 -508 233 -1.047826474250666 -510 233 1.2067895424306312 -513 233 1.0366482275282525 -532 233 -.08136167038081282 -540 233 -.2802897493059433 -545 233 -.2883839626370835 -560 233 1.1824023570561553 -563 233 -1.2761969234129764 -567 233 .4401464990193973 -570 233 .4133324286853318 -577 233 -1.1789995715926238 -609 233 -.310460263340249 -612 233 1.3595220786044213 -621 233 .5496481985185805 -622 233 1.567823348306485 -631 233 -.35136803359088103 -659 233 -.40207156225646407 -672 233 .10820955395630272 -685 233 -.5674596791262341 -689 233 -.836070745505624 -697 233 .49924089041900366 -701 233 .8303627520324501 -705 233 .38631340935880315 -726 233 -1.8852257452936456 -733 233 .8613665101572988 -753 233 -.10600727212098672 -795 233 -.15988976442477576 -805 233 -1.3249253706085868 -814 233 -1.2684765817648576 -825 233 1.6416310371610845 -828 233 -1.9149318423648638 -836 233 1.0818144198494086 -837 233 1.3202837431134244 -847 233 -.4176049126217577 -860 233 .3175919053179577 -869 233 -2.692373156322253 -872 233 -1.963685923314235 -886 233 1.3410922218062908 -898 233 .14366111649577495 -935 233 3.1180313130187503 -959 233 -.35870018123703873 -962 233 -.9044887023871424 -968 233 1.2059157113265628 -995 233 .34757104916960135 -12 234 .7357227242270208 -13 234 .43524107661053724 -21 234 1.3867039296260673 -37 234 .08454676842426981 -40 234 1.1709741807095466 -78 234 -.660297688479426 -94 234 -.18085870499145895 -95 234 .01625222928635872 -103 234 .12192023837035423 -114 234 1.2498408380833148 -127 234 -.3191063956602557 -133 234 1.4071274408463095 -139 234 .23692438865794113 -148 234 .2404374621822969 -153 234 -.3377934825243556 -162 234 1.0011127657864398 -175 234 1.4624287984223705 -179 234 -.2883000833212357 -180 234 .960452630172749 -192 234 -.398399466706885 -205 234 -.270280963845746 -232 234 .8475835711788803 -239 234 -1.1698276017626545 -243 234 .15176418986878595 -245 234 -.3533099921218201 -249 234 .15777671775570623 -258 234 -.4433316540933616 -271 234 -1.393935663816345 -275 234 -2.328479933390956 -288 234 .516064898062241 -289 234 1.6371020075587797 -291 234 .4843860625619366 -293 234 -.24789817642033296 -310 234 -.36870746877176064 -314 234 -.6697432545446449 -317 234 -.594628159454955 -320 234 -.37217768399141576 -325 234 .5730238473655348 -339 234 1.3116366952386906 -354 234 -1.7607081109984324 -356 234 1.9007784861366124 -373 234 -.8278791318164389 -374 234 .5893246777976795 -381 234 -.46128412025721915 -384 234 -.6768326253175707 -386 234 -1.0393346658911886 -390 234 -.8230816416121154 -393 234 1.2664624204265909 -395 234 -.29864928638845345 -396 234 .9565715194470723 -401 234 1.0759640553341827 -404 234 1.5649651666336997 -406 234 .35094517438870193 -413 234 .6134525803162061 -440 234 -1.721839465281341 -447 234 -.9512934747859678 -460 234 -.6936075862494305 -461 234 -.696313376372466 -478 234 .13286186693293434 -496 234 -.357420236403346 -513 234 .8226117212436711 -519 234 -1.537054422789593 -525 234 1.5446223781688608 -534 234 -2.144190260118205 -553 234 -1.0019679619203086 -562 234 -.1794580940962337 -565 234 -.9660124835603923 -582 234 .048897678929815 -585 234 1.5685736552424172 -593 234 .6087991058116906 -601 234 -.6697933743868772 -614 234 -.6819530311567013 -641 234 -1.0001862292962462 -665 234 1.2907006421919727 -715 234 -.46248773685181743 -720 234 -1.0228518231149129 -727 234 .3035161065006985 -728 234 -1.5152950185117093 -749 234 -.3096980895675348 -762 234 .3315841744101681 -764 234 -.6868861358248484 -795 234 -.6859972980815666 -799 234 .9801644517370824 -800 234 .5773548390705102 -819 234 1.7934484645811464 -826 234 -1.0722187910495866 -833 234 .33827902467771415 -839 234 -.6241802340167447 -843 234 .1614137514305004 -846 234 -.780381872647818 -851 234 -.5842783843185286 -865 234 -.5890704094349015 -872 234 .2147705685401042 -874 234 1.1119346586311805 -879 234 -1.19433218140646 -896 234 -.7533933570754081 -910 234 -.2861954381679485 -915 234 -.8218876010106836 -923 234 1.063108214480605 -934 234 .5222982717422957 -939 234 -.5845190441424082 -952 234 2.323783717432259 -987 234 -1.4743559587037363 -995 234 -.5015528250065551 -997 234 .04626347402346383 -8 235 1.8214017643731475 -20 235 -.47508046577718777 -22 235 -1.540984153656584 -35 235 -.13567089888387893 -47 235 -.2630115115655578 -51 235 .27737425950711325 -54 235 .6062173190851554 -58 235 2.036875179083931 -62 235 .3544558267158326 -90 235 .39685713833859726 -95 235 1.5611509667646617 -103 235 .49366313297851744 -110 235 -1.9973223820633381 -125 235 1.851275927876097 -137 235 1.7932337645806038 -162 235 -2.110803354063565 -173 235 -.6937423778144847 -178 235 -.709061117331898 -181 235 -.21697457674765436 -183 235 .6880756076375923 -184 235 1.3744641174263967 -185 235 -.16525415945163735 -202 235 .1637729094999032 -206 235 1.0777400565543025 -208 235 .09039758714398745 -210 235 .6313756693317925 -218 235 -.6757953837121207 -226 235 -.044167537502013784 -227 235 .28061768506261586 -231 235 -1.4247279303166263 -241 235 .18991427342844155 -248 235 -1.6766870679289443 -253 235 -.9271498894300326 -267 235 .4485858888803012 -271 235 -.3871913409071527 -293 235 -.18386315358039856 -313 235 -.3393296868728728 -315 235 .049236379639620395 -329 235 .09353264795470054 -331 235 .822600270931773 -336 235 -.12515067218101011 -338 235 -.9803903204426632 -354 235 .5083998613829562 -359 235 1.0393019379675112 -361 235 -.7804877596075791 -383 235 -.0459751138239171 -400 235 -.17211334886365492 -419 235 -.10056570025563229 -428 235 .17426412299809466 -431 235 -.08919647557098123 -434 235 .7217600381481565 -452 235 .6194323097393348 -498 235 -.7337278290449765 -502 235 .26766294266312196 -508 235 -1.1190592198742773 -519 235 2.0202605391681736 -525 235 .42186390544223945 -526 235 -.5780908318274538 -553 235 1.9304506677300568 -561 235 .35667083776802355 -563 235 -.2335273631209816 -583 235 -.22503413584548224 -588 235 -.3472218219726728 -590 235 -1.3899917370791968 -601 235 .26267179268201857 -608 235 1.1367916621335568 -617 235 1.2887856079174058 -618 235 1.0730002539941854 -619 235 -.2226347604764065 -640 235 -.15710047590349738 -650 235 .02050309904370444 -652 235 .4177367179726934 -655 235 -.3020424085511821 -668 235 -.0031804166596127725 -672 235 2.1142889066540027 -682 235 .8962479384488691 -707 235 -.2294936536116059 -713 235 .5166996195401429 -726 235 -1.4496476453438147 -754 235 .46673837417404646 -763 235 -.2344758998516456 -768 235 -.33930505030504243 -771 235 .8002392055760004 -775 235 .537350998745476 -778 235 -.742518901987902 -810 235 -.7587806686680653 -819 235 .7797329478289603 -820 235 .514807683598818 -840 235 -.8353144713125358 -845 235 -.14598610240344223 -858 235 1.426153342324756 -860 235 -.38574815046333716 -868 235 -.517162041690203 -894 235 1.2441736536577832 -927 235 1.1078789289389128 -930 235 -.496052421874163 -939 235 -.43813097995399725 -967 235 .9222570883342179 -971 235 -.8299271688860465 -978 235 1.422036094339396 -11 236 .405242839459736 -27 236 -.3901897868027105 -33 236 .446755582456748 -38 236 .3760607271552804 -51 236 1.3772857060888333 -73 236 -.14511393884033225 -75 236 -1.501217621416916 -77 236 1.8128209710252878 -107 236 1.0359178536969724 -115 236 1.4057889557824725 -117 236 -1.609567220347756 -134 236 -.8065667958925854 -136 236 -2.6254093979442215 -142 236 1.2079532191571782 -151 236 -2.0397289319064793 -163 236 .028060893714569712 -179 236 -.0041586955346902404 -182 236 .40974233564416807 -237 236 2.0549330951381704 -254 236 -.7078898298951729 -258 236 .6778007181568902 -270 236 1.216132705194006 -280 236 .6956036443160324 -312 236 1.6170338479411057 -313 236 -1.471647481271667 -315 236 -2.955591133732176 -340 236 1.1170406170122902 -341 236 -.6289057961388013 -345 236 .1375378330325867 -352 236 -1.99595121761224 -359 236 -1.1256318584659246 -374 236 -.7441040401143637 -381 236 -1.1358635501972212 -395 236 .2349857261873312 -399 236 -1.1532276932823953 -409 236 -2.780420838221228 -413 236 2.3522024969155004 -419 236 1.2500782231943093 -430 236 -1.0941832096993234 -434 236 -.286489324193357 -446 236 -.5084931343378899 -480 236 .2015591565961629 -486 236 -2.1821606725175786 -490 236 .6678395042265933 -500 236 2.225464230105138 -506 236 .15912595942704913 -510 236 -.05032788244684333 -533 236 .5599718132696258 -535 236 .8731265285719592 -540 236 .7285473361288393 -548 236 -.3020354704328903 -549 236 -1.0859260996299975 -560 236 -.7487545581390362 -561 236 -.5638324434983268 -564 236 -.7635372523500584 -582 236 -.023088629965941923 -609 236 1.5306516232550642 -632 236 .6532756015715804 -649 236 -.4445458002172019 -656 236 1.773868558801927 -662 236 -2.621213626098368 -671 236 .931659881572784 -686 236 -.2898988066995614 -691 236 .5464186443459736 -693 236 -.09538136067378418 -695 236 -.0027844924834889984 -730 236 .5921001427730106 -739 236 .9550666474914278 -742 236 1.871939163588686 -758 236 -.7526865718257508 -793 236 -.9534312472095203 -797 236 2.2047770911183666 -800 236 -.2129291914152956 -809 236 -.9985786037567904 -818 236 -1.4201255653032712 -822 236 -2.0938678599219043 -843 236 -.970545405498939 -847 236 -1.4621504160813326 -860 236 .08359319486475653 -891 236 .11569438323218598 -908 236 .8331807682454029 -909 236 -1.1782475984541305 -924 236 .5271029454585808 -927 236 1.657509138878299 -929 236 .050780417314337786 -943 236 -.5359417891672191 -945 236 -.8866191506735955 -961 236 1.1177665476102476 -964 236 .0960473044104422 -973 236 -.4356824339554606 -979 236 -1.2221749264739759 -13 237 -.48993587398855254 -23 237 -.21791707590714135 -26 237 -.35446057953521537 -42 237 .9907285497511873 -43 237 -3.197944308256731 -55 237 -.4971334373730459 -63 237 -.7703524438340994 -81 237 .8927165871885638 -90 237 .6985797836843289 -104 237 1.7117435872418287 -106 237 1.1613584092063725 -121 237 -1.0718568982334298 -133 237 .9612321974601667 -137 237 .2143122190176058 -143 237 1.2645504071039335 -155 237 1.1669816205103847 -164 237 -.6366337278399526 -170 237 .3509960745680502 -180 237 -.9782846197441064 -188 237 1.1427568854999373 -194 237 -.5936131463065392 -202 237 1.3227212111514475 -210 237 1.002188479690568 -216 237 .505707756410872 -218 237 .5862654773621503 -233 237 -1.0770853814212842 -262 237 -.34810839327321746 -268 237 .21034866906453453 -279 237 .37951644623048675 -297 237 .7302915123756788 -326 237 .017191721837235052 -329 237 1.477554666334854 -330 237 1.055496266841128 -337 237 .45833843523951834 -344 237 -.16859655892397518 -353 237 .19322875824178481 -358 237 1.3730039081774 -360 237 .15627108367861026 -371 237 .9898459168600137 -373 237 2.652205001427634 -379 237 .5422641393140923 -386 237 .5663380197768099 -389 237 -.961519161736672 -409 237 .605375555209875 -413 237 -1.4623155347502033 -418 237 -1.4713600982888952 -428 237 .8849277545073909 -430 237 -.3200410705961553 -440 237 1.4658140075709822 -448 237 -.47176953951457784 -455 237 -.14001957217818253 -458 237 2.2105875835443602 -467 237 -.18549813764944684 -474 237 .5819074791287743 -475 237 1.0460074694354817 -500 237 -.9101680059414793 -539 237 .08112077881310546 -554 237 .2687578700053671 -556 237 -1.1381056671068484 -575 237 -2.150831902109864 -580 237 -.15158445136681037 -589 237 .27853376942116836 -602 237 -2.293993504170004 -603 237 .46976916169948435 -604 237 -.5778580126675158 -608 237 .9533776817089108 -614 237 -.28885245496441037 -631 237 .14076979960840202 -642 237 -2.1733409460262276 -654 237 .38543799347145935 -659 237 .9583646896085515 -660 237 -.657628498210759 -663 237 -1.4504839351265717 -664 237 -1.1402874319271021 -688 237 -.7633356920803439 -696 237 -.6538899760085741 -701 237 1.3184828688300034 -706 237 -1.761027511489028 -720 237 .011290024692203124 -751 237 .336197250258799 -757 237 1.3443440111519738 -765 237 -1.6481979435925538 -771 237 -1.1847806423664662 -781 237 -.7397066734426262 -785 237 -.9631703283047832 -792 237 -.4957307057081931 -795 237 .18144461757331642 -830 237 -.02699390898617847 -833 237 .5023009703933716 -837 237 1.0987581466643928 -839 237 .23101727894712043 -845 237 -.42810140605065683 -847 237 1.1644918449599773 -886 237 1.1769454676344482 -902 237 -.4573648997920438 -905 237 -2.721715452495954 -911 237 -.8280420261957919 -915 237 .378225447078098 -931 237 .30064830680212845 -933 237 -.6181524903248133 -936 237 -1.1919684047045487 -938 237 1.3008354944627343 -946 237 -2.2406557481993303 -947 237 -1.5161492562739298 -948 237 -.3144767700424434 -960 237 1.7944426204731114 -970 237 -.7181577939186874 -989 237 -.3555882899082946 -2 238 -1.681940888890975 -4 238 -.8695147459601623 -13 238 .09834126359934013 -24 238 -1.455864084054632 -33 238 .9537918526085047 -34 238 -.015295119469219187 -47 238 .9505098192069968 -48 238 1.2262149387234018 -63 238 .36570653092951816 -81 238 -.2263984683703078 -108 238 1.261194301965911 -119 238 .35916092530477794 -122 238 -.8899696488541226 -126 238 -.5477220378575004 -137 238 -1.1026124437970668 -144 238 -.6642435802922733 -152 238 2.130860127768619 -164 238 .28376223168254056 -171 238 -.9910997690448489 -189 238 1.2942617522840256 -206 238 1.6391810517112642 -212 238 -1.7643665144453775 -222 238 1.1682032888490224 -228 238 -.6254538473252316 -259 238 -.3666984879261924 -268 238 -.4838492144379667 -274 238 .37720452853979636 -302 238 1.9631323304806594 -312 238 2.3967199735473534 -324 238 -.2965641156511031 -329 238 1.335575780088738 -337 238 -1.3252379348685899 -356 238 2.2816857033730438 -389 238 1.6924776619619977 -392 238 .48093612791547097 -402 238 .43195765535064085 -410 238 1.0327138009365524 -414 238 .9418198778583833 -415 238 -.8116926531229275 -422 238 1.3667774685143894 -423 238 .6343278728451025 -434 238 -.731921252910332 -440 238 -3.109531094136065 -441 238 4.561708487726961 -445 238 .6634684303780313 -452 238 .7866132446629434 -465 238 2.535407521544792 -491 238 .43911911123393166 -495 238 2.045485259277807 -503 238 -.8952083837472407 -531 238 1.2826252638260809 -533 238 .125088001825441 -542 238 1.0263635048868955 -550 238 -2.109022857696613 -571 238 1.5572708470307781 -588 238 -.7682172110212346 -596 238 -.8029211864365596 -629 238 1.764442423308533 -678 238 .14003145174470527 -704 238 1.0630796972005954 -711 238 2.0825867980038617 -726 238 -1.938159344734918 -728 238 -.7527250303915289 -730 238 1.7584451968549648 -732 238 -2.2732678221993674 -750 238 .9295106791121122 -754 238 -.6223974513789066 -768 238 .16483442557091413 -781 238 .044745309278718476 -782 238 .8480259038383103 -795 238 -2.438877163338122 -802 238 -.22723466944980653 -806 238 -.3315800210849875 -807 238 -.9109681900216072 -815 238 -2.219320515184273 -829 238 -.17349893916250994 -835 238 .705105862178038 -852 238 1.770229523471837 -868 238 .10693358381923546 -904 238 -.2847047618915786 -911 238 1.3059805335415557 -917 238 .9786849685420729 -926 238 -1.9514098880281083 -956 238 -1.4966096407333562 -983 238 3.464795726947906 -3 239 .1772183134762382 -6 239 .25179308061286954 -28 239 1.2442691253289127 -33 239 .47893538209575404 -44 239 .06826355400992815 -48 239 .052121534632730795 -64 239 -1.2195325420711243 -67 239 -.4682762914782406 -79 239 2.1747040016701655 -84 239 -.18438054015528527 -87 239 -1.555941157454448 -92 239 .09283111763734339 -93 239 -.7682230488347743 -97 239 .7967789266738518 -105 239 .5985889893344403 -112 239 -.1408864244951501 -166 239 .7843239043629654 -167 239 -.07440913248769027 -168 239 .95801877817673 -173 239 -1.2296789055924346 -175 239 .24823058478089624 -180 239 -1.095520318586397 -182 239 -.3652746639936226 -196 239 -1.8831554359074414 -223 239 1.04771514272574 -228 239 -.8345541973666661 -237 239 -1.0291416609044557 -238 239 -.826310010626658 -246 239 -1.6377333243875163 -247 239 .1288059036942849 -250 239 -.13923892104610697 -254 239 -.25750170295220376 -256 239 .5598262787809962 -267 239 -.15618158336532767 -277 239 -.6698046349751263 -279 239 .4491962112906456 -287 239 .1925066287997306 -291 239 1.0171953495843906 -297 239 .2010047305455915 -298 239 -.24858135456589586 -299 239 -.22161440491850704 -306 239 1.130420155088763 -308 239 .7124760219970009 -313 239 1.5571709842367998 -325 239 -2.623126024163789 -334 239 -1.7306667465238341 -337 239 -.26231973928227786 -345 239 -.7121450313682652 -374 239 -1.1492184554838163 -386 239 -1.418093600324979 -402 239 .13483328825237728 -410 239 -.3658267633052731 -420 239 -.7049143311706089 -425 239 .7371684715674021 -429 239 -.9814660811983369 -432 239 -1.1882870464958184 -458 239 -.25150512009832066 -466 239 -1.2384174167583566 -474 239 -.8382704693104228 -479 239 -.30563174947977706 -485 239 1.4214760448446648 -501 239 .3794992056481427 -515 239 -1.6381688005738986 -528 239 .7284096741062975 -553 239 1.3329670735850225 -555 239 -.2505615261065308 -560 239 .6228991399809957 -562 239 .21442136541192053 -563 239 -.2939721719046531 -602 239 -.5354521821229637 -612 239 .9827740490013352 -622 239 1.2489139586765696 -632 239 .709781294403126 -636 239 -1.1086896180914732 -647 239 .6085392199505398 -653 239 -1.6591418860094465 -656 239 .07686556969115912 -664 239 -1.3005539286757744 -668 239 .6648266003255994 -678 239 -.07225147766459472 -699 239 1.1738147787850832 -700 239 .6585164118844843 -701 239 -1.1614762336603779 -704 239 -.5297107561779301 -707 239 .549960467591082 -744 239 -.9952778854598463 -769 239 .49911993181192565 -795 239 .32347920550448256 -820 239 .0005732410959563283 -832 239 -1.4479499855799565 -837 239 .8334935973110934 -839 239 1.1706696538075227 -851 239 .8567259188634879 -859 239 -.9264027632270834 -869 239 .9284181334835706 -877 239 1.684781344150072 -885 239 2.20278224279183 -895 239 -1.4854510090507267 -916 239 -.10973772495194645 -932 239 -3.127617458975767 -933 239 1.5700861600659624 -937 239 1.2290128787624488 -947 239 .5910783390550275 -973 239 -.8106846912172095 -995 239 1.5607962944557505 -997 239 .06337477304844033 -3 240 .3205580738509204 -31 240 -.044378300081627464 -32 240 -.17160514632817214 -42 240 -.8843112032173016 -54 240 .9084557803228456 -76 240 -.5583934504812987 -83 240 1.3307958303822727 -85 240 -1.8286483801082258 -90 240 -1.2293309711114844 -94 240 .4161334172567316 -106 240 -.5138422447979274 -114 240 .3465026397727792 -118 240 -.6300226582418769 -141 240 1.386994522761692 -143 240 -.5271120574917877 -145 240 .34102195346702613 -158 240 1.0776404611784633 -186 240 1.0813180313212662 -194 240 .08698913796156127 -196 240 -.3774561097614547 -205 240 .6686288407243949 -208 240 .9376243800456078 -240 240 1.1375208022504006 -244 240 .0779870846436391 -268 240 .024325036025103386 -285 240 .7461005475924088 -288 240 .7783509406891851 -290 240 .402622991253068 -299 240 .33711994289682856 -321 240 -.37041170484978764 -334 240 -.4959448360296683 -351 240 -.4091693731307945 -359 240 -.44595193293615165 -398 240 -.49496759991414546 -403 240 1.1089236341568012 -421 240 -.07689728035157337 -429 240 -1.0364335939311227 -430 240 .9133214420438204 -452 240 .5435149556227924 -467 240 -.5037494517136157 -476 240 -.29359735940046666 -478 240 .21007422126205388 -487 240 -1.4293402945711697 -515 240 .971807147653213 -558 240 .15090745775547493 -565 240 .8027760851174892 -567 240 .01965675324716422 -578 240 -.019928085116593802 -605 240 -.19368357653094376 -607 240 -.21649631646999018 -625 240 .17041178587432326 -636 240 .8972686001750594 -640 240 .1768861532713118 -643 240 .045319559806767495 -645 240 -.943917139215673 -660 240 .10316312518498257 -666 240 1.5806870722331583 -667 240 -.7741379415197411 -712 240 -.8580940225041105 -725 240 .9192892896939927 -742 240 -1.1155378164635472 -761 240 .46139257685732366 -767 240 .29943629059386057 -771 240 1.1449004046728386 -793 240 1.3646163516756158 -797 240 -.0905641675986606 -805 240 .2619880469506269 -838 240 .2653401359986332 -850 240 -.4009362820063519 -865 240 -.8470287903939531 -878 240 1.6611992765020678 -890 240 -1.246725943105798 -893 240 -2.08041116413259 -894 240 .702796037036285 -898 240 -1.6247537650364219 -912 240 -.5214963347341316 -915 240 .8136743585312705 -916 240 -.3500206914951058 -938 240 -1.2191130582108942 -943 240 .02203081887769723 -959 240 .9374236146458617 -961 240 -1.0532921654723606 -962 240 .641815882414609 -982 240 .9216797795762829 -11 241 -.24028356823456573 -13 241 .24746289974711533 -15 241 .7453117409796596 -30 241 -1.3477422745307952 -47 241 .33512909470319074 -53 241 .3525128251909456 -56 241 -1.4851059535836078 -66 241 -.6562741603644107 -70 241 -1.0242160531540896 -73 241 1.0806520581242078 -98 241 .5192228783665341 -107 241 .20675647113517315 -110 241 1.8638593506492753 -117 241 .1447499492044638 -133 241 .6245642218098361 -144 241 .5450513890849353 -146 241 -.7197217103451317 -161 241 -.9223095228249821 -189 241 1.6852386606135394 -202 241 -.4178923625295785 -209 241 .27939055550985115 -214 241 .9682147810780467 -222 241 1.7989116932055456 -236 241 -.06385255588500828 -239 241 -1.3611113131674477 -249 241 .4016326412490461 -270 241 .23303904991978922 -271 241 .20853184642554237 -279 241 -1.1576730850307868 -285 241 .714832991083495 -287 241 1.1926977520800162 -295 241 .44937782415876903 -319 241 1.8409095149058765 -337 241 -.21103308288750533 -347 241 1.0494300166500015 -354 241 -.7612747951617951 -370 241 -1.1633638206398875 -371 241 -1.2950783854432886 -387 241 -.3874479543229793 -389 241 -.0014789667491316716 -403 241 .2490316103675028 -405 241 -.3697606790074237 -408 241 .919863702644347 -409 241 .7656406952056013 -424 241 .5969527979840943 -430 241 .4750220497020333 -433 241 .7983285581863144 -434 241 -.15718775514671074 -442 241 .08462347134475026 -458 241 .7011816408681082 -471 241 -1.2852706811148151 -472 241 .31756534811268045 -476 241 -.6578013841273027 -479 241 -.9039075468011919 -482 241 -.6138571815627588 -484 241 -.4169820170975092 -489 241 -.21945789000068194 -491 241 -.560313751592933 -518 241 -1.642965264999202 -556 241 .35032769753104537 -561 241 1.2108752415581996 -565 241 -.6237913828596771 -566 241 .9245905156933252 -569 241 -1.7405993656810625 -572 241 -.10147417175622395 -578 241 -.08977346965930677 -585 241 1.4289496781497535 -603 241 -1.107460749105499 -604 241 .8589947139777745 -610 241 .0024201891420676247 -613 241 1.7107221938309833 -618 241 .39065082372344195 -663 241 1.8191356994451984 -679 241 -.2622377554247257 -700 241 -.7847401598122761 -717 241 .18051159055997912 -737 241 .7713585284385173 -755 241 -1.0247981518936782 -773 241 1.1594349604803424 -776 241 1.3918400170574958 -781 241 1.8344791907290536 -795 241 -2.539009235792849 -796 241 .47317063928457115 -799 241 .46151598145096284 -812 241 -.46769006331947416 -850 241 .14588907597142242 -881 241 .13321375476029879 -906 241 .9214173089342078 -907 241 1.1456231078517276 -931 241 -1.893376230935904 -932 241 2.2223787442414618 -943 241 -2.5304937530330474 -945 241 -.1688598323487692 -968 241 1.1308612940669422 -980 241 -.8139817895665413 -996 241 .0865115913527463 -1000 241 -.027992255872900926 -1 242 -.7335631660117977 -4 242 -1.3660037194820254 -11 242 2.8206607510212263 -14 242 .6991023702686315 -36 242 .7526608478877378 -58 242 .09657728250295575 -71 242 .6745209322034262 -87 242 1.1609893335800179 -119 242 2.314528755346318 -120 242 -1.0786808272644104 -121 242 -1.2656522514158481 -124 242 .39075489299530486 -133 242 -.2981681274449739 -145 242 .04931538703487601 -159 242 -1.1019107722867054 -162 242 .5317886149795965 -173 242 .8375873989876379 -183 242 -.4019522509305101 -185 242 -.8210830430626023 -186 242 .16642328386695748 -215 242 -1.9135898807659562 -223 242 .19302524895316195 -255 242 -.24872911042270152 -256 242 1.070669575914906 -270 242 .38402179600918734 -273 242 .410743849996726 -279 242 .07990227467735586 -298 242 -1.1783097013074544 -319 242 .8466426523068463 -321 242 .04813333117905222 -331 242 -.12342951556064027 -337 242 .1616100236899427 -338 242 -.08104940271095311 -340 242 1.1103674339629608 -348 242 -1.2564170858787769 -359 242 -2.0344536938419027 -360 242 1.226402062608319 -361 242 -1.586602740277372 -368 242 -1.4257143860162522 -369 242 .6582555907491148 -380 242 1.131283668867253 -399 242 -.8313160027872748 -418 242 .6637328216610409 -423 242 .661670086709719 -428 242 -.5581800921142624 -484 242 .3091529376702489 -488 242 -1.7924144346970114 -497 242 .9681107543827274 -505 242 -1.3745730195383563 -506 242 -1.4172754186036591 -513 242 -.4418552113419592 -517 242 -.2860668746445761 -528 242 -.28516726313781743 -533 242 .230107005021914 -534 242 .8029257316400933 -542 242 -.7776432538870065 -561 242 3.223839832913609 -583 242 1.00600493691421 -588 242 .01088174465794095 -597 242 -1.0464223025398878 -598 242 .7708693025274618 -638 242 -1.3346350846590145 -640 242 -.33802415315761103 -646 242 .5283685792227858 -648 242 -1.1103008959822764 -663 242 -.6168235098257281 -693 242 .36943052114864094 -713 242 -1.462179949225542 -719 242 .2101424282551989 -725 242 2.606984947964591 -726 242 .31051356734593666 -727 242 -.018153974810173668 -753 242 .9010024718795239 -769 242 .48179834504210317 -774 242 -.7246996015950747 -785 242 .5676167544333544 -811 242 1.282115030260068 -814 242 -.14661330452447058 -825 242 2.095668748167252 -829 242 1.9874496869786045 -847 242 2.3305223895854628 -849 242 -.6330015484124337 -851 242 -1.1273942051502788 -854 242 -.07463094437373546 -857 242 1.2720370577991065 -865 242 .9110131596362641 -878 242 -.5760360023511132 -884 242 .03230435244231883 -888 242 -.5903609304750945 -893 242 1.1907041235890645 -898 242 -1.3213292351220574 -901 242 -1.333755561903606 -903 242 1.4898215015442813 -905 242 1.7940275890310358 -912 242 3.1848793352927123 -913 242 .05916444380797921 -916 242 -.6580391416725809 -917 242 -.3526820167756308 -951 242 .8114587006764569 -952 242 -.30224330051839776 -979 242 .13376359924021242 -994 242 -1.0837681338528633 -997 242 .9408036383442303 -13 243 .27906566869270866 -19 243 -.4258653848514976 -25 243 -.648278392374785 -50 243 -.2691676481260048 -61 243 -1.2760725136911288 -74 243 .6147999166127484 -82 243 1.0384939224673935 -111 243 -.8223165752200716 -113 243 -.2626536328376745 -114 243 -.19511331935790874 -117 243 .9148724909717887 -130 243 .39571510691931944 -154 243 1.7865108227087252 -224 243 -2.3595580721982965 -231 243 1.3830596914238016 -252 243 .6782589652682584 -255 243 .43736948100367024 -274 243 .6865665205847443 -276 243 -.35457780795256505 -281 243 1.6902659753428344 -299 243 .9914953661721126 -334 243 .4441380302388021 -348 243 1.0939636333772584 -356 243 -.5850063906225005 -359 243 -1.0529356381800536 -376 243 .72792560451755 -405 243 .05012561315400603 -407 243 -.0393462790423936 -416 243 -1.051582832380285 -418 243 2.3965079357174703 -432 243 -.6489709363282435 -436 243 .2161486684883451 -437 243 .09921965163332969 -475 243 -.9009972661626092 -479 243 -1.3053345972147903 -493 243 .2616646638852893 -508 243 .1752544795924541 -509 243 -1.005682751081106 -517 243 .47603053287564556 -522 243 -.2813614404202053 -523 243 -.6082603348777915 -540 243 .3105263425276724 -546 243 -.1456564585115572 -561 243 -.9148550601552888 -565 243 .9216949144966278 -569 243 -.9465378891418537 -577 243 1.842599077329726 -580 243 -1.4391971856238228 -588 243 .6090127503966802 -595 243 -1.6133504592017887 -600 243 -.04791122072610097 -601 243 .2923551031480893 -623 243 -.9828755381719975 -626 243 .0696490660367348 -632 243 -.7792098757707707 -633 243 .11773996017557062 -637 243 -.053148187442828926 -649 243 -.9548792395713598 -688 243 .3879037520794876 -693 243 -.6458138782024241 -695 243 .011773050526958706 -706 243 .06485713558496072 -708 243 .15279523735114114 -711 243 .6405846669879606 -715 243 .09364850782184045 -716 243 2.4070834418684526 -726 243 1.9233458056678259 -727 243 -1.2747270792145082 -730 243 .35238599653840086 -736 243 .6799426754509823 -757 243 -.24047715545051884 -764 243 -1.1008728062905924 -767 243 1.1701195879037152 -772 243 -.602016917026894 -773 243 .738951359450675 -776 243 .6112766585851249 -781 243 2.1354833584122437 -789 243 .27471562809257805 -793 243 1.762560377294711 -794 243 -.12328952937352221 -798 243 -.2834393690463077 -816 243 -1.6394257145505735 -817 243 2.171090816207432 -844 243 -.9949692223207406 -862 243 .18434796650054402 -880 243 .01447435987284892 -882 243 1.2844013307900237 -898 243 -1.3921113120818618 -905 243 2.3563125010898784 -926 243 -.24666467278835583 -932 243 .0692332267578524 -938 243 -.6238604741532853 -940 243 -.5407115024853062 -941 243 3.4693248040132043 -953 243 -1.1240945072864692 -963 243 -1.9006116381848233 -972 243 -.721904910023534 -974 243 -1.01068561342239 -985 243 .6222700231831828 -990 243 .9796227965265679 -991 243 .0452940461127318 -8 244 -.4702431498845313 -29 244 .25980364208935597 -36 244 -.4693898527559657 -38 244 1.9751161655439484 -52 244 -.1811486592479088 -73 244 .2689776959421811 -90 244 .2406029168539918 -96 244 1.3251985434234945 -106 244 -.6040492296970705 -107 244 1.821076312194839 -116 244 -1.1320029898096633 -131 244 -.021124142401446555 -137 244 -2.500471964501294 -141 244 -.17937477225245987 -154 244 -.5821373240146569 -159 244 .8926819157274287 -165 244 2.0439837164669497 -168 244 -.04170041748752579 -213 244 .5969753606659073 -220 244 .24109453578535517 -224 244 .2933761736036139 -227 244 -1.650149001377237 -235 244 -.9350722226564575 -238 244 .31861119990673004 -241 244 .9479777995336927 -242 244 .4564085263555252 -243 244 -.9681068258008937 -269 244 -.949608122190145 -270 244 -.3258239171015351 -277 244 1.5377710256447157 -284 244 -1.320093245367934 -286 244 -1.0378364132473576 -297 244 .15179166708273203 -301 244 .9891862402791048 -303 244 -.31049915636398007 -312 244 1.035311917272179 -376 244 .6187008110692993 -390 244 -1.1431543895915783 -394 244 -.4649693965131597 -405 244 .6804974296113472 -416 244 .9865528768898831 -423 244 .6134223217612286 -427 244 .7201603546027187 -443 244 -1.1921568249444896 -452 244 .694339783528862 -461 244 .4489265833469201 -473 244 .9383876414258279 -486 244 -1.2342847805730073 -490 244 -.06854541607724862 -500 244 -.12077860811400712 -519 244 .2573853338552996 -525 244 -.5478763978853884 -541 244 1.4442233075083426 -555 244 1.5042976171734725 -564 244 -1.8876456481670358 -583 244 .4627620365190329 -592 244 .31104614565876854 -593 244 -.33926273825776887 -599 244 1.7868515817473833 -612 244 -2.1452633074115672 -620 244 .5465068336781258 -637 244 -.8663496744183964 -660 244 -.158405239245386 -668 244 1.1255439926349806 -675 244 -1.9284675173279089 -677 244 .03415109997227144 -678 244 -.1710077977386568 -689 244 1.2660653618229725 -699 244 -1.0372640262211807 -704 244 .4551608173236169 -741 244 -1.1994655838522355 -746 244 -.33101686271777186 -748 244 -.6383226651492331 -749 244 .6777975314290074 -775 244 -.08540073302642981 -777 244 .8637064712760015 -782 244 .40132489769842183 -798 244 -.2797337204995046 -806 244 -.21824692153974595 -807 244 -1.040180861863297 -808 244 -.3020751134614137 -814 244 -.6488306725897476 -817 244 -.6384765215408531 -823 244 .711521592136968 -830 244 -.17969814027894926 -840 244 -.5731386274758664 -872 244 .353795245944653 -878 244 .13629492833941975 -879 244 1.0016717690831347 -881 244 1.0340285784086458 -883 244 1.7683441361258119 -887 244 -.0073593016394594285 -893 244 .11023890632426103 -898 244 -.16520360959578995 -910 244 -1.1397756461115547 -922 244 1.8364856968898444 -929 244 2.206670700973076 -935 244 .022784341450082513 -939 244 -.261790047220853 -946 244 1.4400343986336386 -951 244 1.620106197744925 -966 244 -.695163826703767 -981 244 -.22869399171668606 -993 244 .22185962604942833 -18 245 .391687276296511 -28 245 -.6000289100976749 -38 245 1.6089881092393363 -39 245 .5244563146139838 -45 245 .1418404171777788 -50 245 -.5732185751324428 -58 245 -.6808697217225185 -83 245 -.2886918019985848 -131 245 .12675445447109684 -137 245 -1.7888771110205282 -145 245 1.3085248059534418 -146 245 .5324778255492585 -155 245 .9175694718655413 -158 245 3.358402616654984 -160 245 -.8280908849163899 -171 245 1.6882750439059064 -177 245 -1.2884260067144109 -184 245 .8009236042821415 -191 245 .2168750238160769 -204 245 -.9646976503792404 -209 245 2.0861335634621576 -215 245 -1.967659611259317 -220 245 -2.3574335753218048 -225 245 -.4770182118862982 -233 245 .09795527966770952 -245 245 -.2258134918292793 -254 245 -1.0821270258692561 -256 245 -3.375752170833226 -257 245 -1.6046596424404322 -280 245 -.8452497886143349 -281 245 1.547053409437193 -290 245 1.0702567522540787 -301 245 1.6144388573712058 -305 245 .7291131847490407 -333 245 .06993484642114288 -360 245 -.10824602238495674 -364 245 -1.4827495673900808 -383 245 2.06801899578205 -393 245 .1945703120087335 -403 245 -1.009869141424314 -404 245 -1.0009378957932815 -413 245 .9506377444124153 -418 245 1.8420990990441117 -427 245 -1.0084103326463223 -431 245 -.35661263646711594 -444 245 1.3408331200791799 -446 245 -1.1997544532321989 -448 245 1.2090697282723823 -452 245 -1.67164738062097 -454 245 -.46926496110868415 -457 245 -1.1789301457802375 -465 245 1.756184502594901 -467 245 .45427226730262166 -484 245 1.5535098922464403 -494 245 2.4332196305188494 -496 245 .23884702510857406 -510 245 1.6552400041900617 -514 245 1.3739186846132863 -524 245 -1.3868975507195427 -534 245 1.8320226421486432 -540 245 -1.505287377320684 -587 245 -1.6938859580034218 -588 245 -.08581819651108973 -627 245 -2.3631220225488834 -641 245 1.3305599880753758 -654 245 -.27591097719487095 -662 245 -1.029183494817697 -677 245 -1.7418044197003093 -687 245 -.5523258852742593 -690 245 .0561580660914526 -708 245 1.6452514885727196 -716 245 1.2743172776013934 -726 245 -.9832778970123682 -731 245 .5929203492564351 -738 245 -.875698826437921 -773 245 .1917862488813481 -793 245 -.17553713281815578 -796 245 1.4448995710678894 -799 245 .058809722106921175 -804 245 .8185275710330101 -818 245 .27838193735807215 -837 245 -.7280371018690516 -847 245 -.08812080165478137 -865 245 -.8857004199447422 -874 245 1.8224576565064217 -894 245 3.7196893716354955 -925 245 -1.4991764901005067 -929 245 .6077438912123122 -932 245 -1.2303671342101834 -938 245 -.26102828423215174 -943 245 .6744938677690965 -945 245 -.3697210607841193 -946 245 2.485259921322857 -951 245 .34393653325778467 -960 245 -1.5941877120216932 -964 245 1.2200719006969922 -981 245 .6492121093718797 -999 245 2.2772919333053077 -16 246 .9925508827179044 -19 246 -.7960935471922056 -21 246 .44195568288781634 -22 246 .7605102239948143 -63 246 -.28477272448743296 -79 246 -.41302324685949426 -84 246 2.1368805348324655 -87 246 .9865974925995709 -110 246 1.767392868341432 -112 246 1.4887558345707164 -114 246 -.06511091618581238 -118 246 .2614912182872273 -122 246 -.6777228463563032 -137 246 -.8677141643085208 -138 246 -.7680356551414956 -157 246 -1.6756217610679682 -163 246 .862411006014552 -172 246 1.7294322823658608 -198 246 1.1630131894561726 -204 246 -.949481088882415 -217 246 .5429912983571866 -222 246 .43529086698787783 -242 246 -.5318805143078151 -244 246 1.7240950173581178 -248 246 .3440830372289836 -251 246 .45671609012992687 -252 246 -.04443626986673685 -255 246 .5779604072781054 -263 246 .5611262318451127 -265 246 -1.9312998162362005 -297 246 -.8539632052822091 -310 246 .15588157582172793 -321 246 -.8647234507139863 -322 246 1.0401269174583823 -329 246 1.2014220999321226 -330 246 .031626965605666954 -346 246 -.3381808256597927 -347 246 .9384716017125592 -362 246 .5129503912093385 -368 246 -.8295788972837095 -417 246 -.30166136189014603 -422 246 .22597521337120216 -444 246 -.025307642806975394 -447 246 1.5622758607692457 -462 246 1.688336210986956 -466 246 -.32566462258562034 -468 246 -.42746888578254444 -471 246 -1.3562938568798713 -508 246 -1.6385043867776974 -536 246 -1.3110763785170338 -547 246 .9484075786047047 -570 246 .4277196658739536 -575 246 1.6542445207234155 -576 246 .8135818413996054 -581 246 .8707743726007701 -586 246 -.6239071485078643 -587 246 1.5236563063958481 -611 246 -.48251263129305866 -632 246 -.6391351912060762 -636 246 -.08340700900821543 -662 246 2.3237037405858425 -664 246 -1.1189692951009502 -674 246 .33409669659730706 -677 246 .5506896014233376 -678 246 -.6654518455872458 -690 246 -1.0317581300510383 -691 246 -.03823425735817179 -714 246 -1.7058813753091522 -739 246 -.45326620819366403 -752 246 -.6025986964446577 -768 246 .03161145372500005 -771 246 1.3559591629180783 -777 246 .5938057836229117 -786 246 1.5318513667515292 -788 246 .5975826532341005 -793 246 .03665332167984531 -807 246 .19930338122275482 -821 246 .04733794279577393 -826 246 .17378155647000565 -827 246 -1.4680134028197689 -843 246 1.5469912541958681 -851 246 -.31364743371415205 -869 246 -1.1097608041244924 -892 246 -.43611508109006036 -905 246 -.6788074765252945 -913 246 -.4246365520640999 -929 246 .018693463354310214 -934 246 -.764138179811378 -941 246 -1.0521964477341377 -960 246 .6821739198654071 -966 246 .15342555703382796 -977 246 -.15081850677242745 -978 246 .22181641822621564 -995 246 1.6316233902896577 -11 247 .6471411038119906 -15 247 -1.728579535530029 -38 247 -1.2205298571266412 -59 247 -.9531923202884339 -63 247 -.8925574820001267 -65 247 1.2026298581269228 -77 247 -1.8233030443972027 -82 247 -.5947449393303514 -98 247 -.7507675332547725 -106 247 .6172722058292939 -126 247 -.2650584882772191 -146 247 -1.0696249732265712 -149 247 1.5664260840430348 -150 247 -1.1122564535706263 -151 247 2.302304641821049 -160 247 .6955616016763313 -163 247 .25485609714355295 -168 247 2.07989485494126 -172 247 1.288429793606953 -178 247 -2.874894419340815 -188 247 .4564811066488975 -200 247 .0808204193880232 -214 247 -.05931871141135435 -230 247 -.07454222384230574 -256 247 2.8984371410941896 -258 247 .15862583815992423 -263 247 1.127578238991338 -264 247 -.7366771956056908 -276 247 -1.8830450675765251 -291 247 -.5154800115106232 -293 247 -.009343069021148127 -311 247 -1.068869100264078 -317 247 1.5486835969838917 -339 247 -2.337921414752957 -348 247 -2.125864845766818 -351 247 1.0215981358596298 -361 247 1.0503224034249175 -373 247 .9688074783729987 -384 247 .9548769408546814 -407 247 -.0013880168668783596 -412 247 -1.2075525455345533 -421 247 -1.409008351717876 -433 247 1.3813836144022906 -443 247 .9416528278106008 -462 247 .5679208212503435 -479 247 -1.3727532054004705 -499 247 .2624530609846015 -512 247 1.4220449005725 -542 247 .7501553506975756 -556 247 -1.2193201203116113 -558 247 -1.2000137507310888 -574 247 -.08409045986309546 -578 247 .23919380515548735 -584 247 .8136118431498649 -596 247 -1.2733029115578147 -608 247 1.0530547902772378 -618 247 .6675923514398103 -627 247 1.8957936028171427 -632 247 -1.2544667889644792 -654 247 1.2417387157679198 -661 247 .6332732869764025 -672 247 -.6357577239351031 -673 247 -2.1857104936807 -674 247 1.2271316035598299 -709 247 1.3804450958994212 -716 247 -.40358027769454613 -719 247 -.5706401012726278 -722 247 .51425126451544 -754 247 2.3877415969032785 -756 247 .6061545640007369 -780 247 -1.8802513874673028 -794 247 -.7221007765479435 -798 247 -.01767684923569937 -809 247 1.586377870927977 -813 247 -2.163817006417479 -818 247 -.5977934644682543 -819 247 1.168353634806761 -846 247 1.0563467533965687 -847 247 .7225061829430504 -853 247 -.5181924219478792 -857 247 1.7123084519250007 -858 247 .34475719584738845 -860 247 -.43260548664873694 -896 247 -1.2093538255634033 -903 247 -.761449576430921 -905 247 -1.489704593549641 -912 247 -1.3702726411491657 -928 247 3.2142187867425394 -931 247 -1.5045496370925104 -932 247 .5910316416647122 -962 247 .9032630729661231 -980 247 .8697871772133275 -986 247 -.6244528556561596 -994 247 -.8485114959275395 -27 248 .778431698867257 -43 248 -1.233606615523987 -69 248 -.2575478018384325 -79 248 -.9156171459063986 -86 248 -.8334461170122579 -95 248 -.21074533069140453 -107 248 .32044518549820245 -110 248 2.7463765215391844 -158 248 -1.4902954289112058 -167 248 .29472024474114517 -173 248 .4353820008042242 -188 248 -1.272739517538485 -194 248 -1.5835840856859074 -201 248 .3907281186372118 -214 248 .6934011186869229 -219 248 1.1424864120293707 -245 248 -.0484490271198352 -262 248 -2.343291011593858 -265 248 -1.053592013473674 -275 248 -.5993228292013824 -284 248 .7743865463865719 -307 248 -.13834472865431438 -329 248 -.7295355067932578 -346 248 .21272141750964266 -353 248 -.9580460547912599 -355 248 1.7137770156393923 -362 248 .14403753192660426 -367 248 1.0303871354786505 -378 248 .11949532323779441 -386 248 .2011081857992217 -408 248 .17391687701567043 -416 248 1.6756414230438241 -441 248 .2535584214637089 -464 248 1.18470977941816 -473 248 -1.4488717463277925 -475 248 -.31135598549001053 -477 248 .22014320969622053 -483 248 .6133924897550054 -484 248 -1.137943076147859 -492 248 .9421187698882361 -494 248 -1.1071329394954237 -498 248 -.2228560272992127 -499 248 -.9297080857305791 -519 248 1.0987338530479616 -526 248 -.35799088296098747 -536 248 1.0869359803335286 -542 248 .23045469596678742 -546 248 .5611180877073529 -565 248 -2.0132932532031784 -583 248 -.3026631886914775 -610 248 .44883534272057474 -630 248 -1.1126857368882326 -668 248 1.0057774395825263 -671 248 -.6721697732003556 -678 248 1.528308921337618 -683 248 -.02807978147786696 -694 248 -.40052968510307574 -697 248 1.1572303151870285 -708 248 -.7809497361905021 -720 248 .2911040310854849 -731 248 -.17080125705513743 -733 248 -1.776947042636296 -792 248 1.8504820334219871 -794 248 1.009147564267004 -798 248 .9233926698351689 -808 248 1.6287523014604184 -815 248 -1.5987710767856524 -817 248 -1.83136497571636 -826 248 1.1634965908137007 -843 248 -1.007067996967338 -844 248 1.190098291126685 -867 248 -.14920815798725023 -882 248 -.4411891148259401 -891 248 1.447883142109493 -894 248 -.9808362241518438 -907 248 -.3131174215017792 -908 248 1.158572891522829 -920 248 .8253705254494701 -939 248 1.2064877934495946 -952 248 -.742657306842271 -953 248 .547904223264293 -955 248 1.812190452123473 -967 248 .7519124904932376 -974 248 .3775160595960255 -978 248 -1.1949330846485038 -986 248 -.6502826491358057 -2 249 3.0200788013727387 -11 249 3.2575973889447347 -17 249 -.31067144360820453 -19 249 -2.357139938211643 -20 249 -.20181225075221199 -65 249 .8111349073129652 -75 249 1.5581234047422932 -86 249 -2.9659525827868873 -102 249 -1.6522094348211767 -137 249 1.0730670918683396 -140 249 -1.0704642791360435 -163 249 .4008117873541115 -172 249 1.6544543682117565 -189 249 1.7237782903436176 -192 249 .8739585916513319 -213 249 -.18948496883258462 -214 249 1.0017209276408363 -216 249 1.5731841924030439 -223 249 -1.1744122825145502 -225 249 -1.7958495341956957 -229 249 2.0803439203457286 -234 249 -.13223769587876416 -237 249 -1.5651365422275716 -247 249 1.0756301565604134 -248 249 1.5517631468523971 -258 249 -.19524441896559716 -269 249 1.7958013904760297 -274 249 -2.9155734496080323 -287 249 .4563124922554903 -301 249 -1.493916315389123 -304 249 -.10239145609765682 -312 249 -.7593249799134624 -316 249 -.860959836985644 -325 249 -.18965659232188814 -328 249 2.3495403393363175 -356 249 -1.2838131275153708 -362 249 -.8682205072798824 -376 249 2.566262066689107 -379 249 -.6812484383381131 -381 249 .9915792180571614 -405 249 -1.2274379366625672 -406 249 -1.0031431032598876 -426 249 -.8977892701444716 -437 249 -.29532675727518365 -439 249 .06445925463519683 -442 249 -.09877732833971922 -445 249 -1.9284306388761008 -449 249 -.5223729042116421 -457 249 -.6728967129821911 -511 249 -1.7701638813749612 -513 249 .47000115229067524 -525 249 -.05709318284686081 -536 249 1.8254501808436194 -545 249 .4080272578658007 -557 249 1.0289909031492739 -559 249 .9784906166390591 -560 249 1.2880369762861463 -570 249 1.904451323101897 -583 249 -.18839841732458032 -593 249 .9972212245945433 -597 249 -.22821851556715111 -609 249 -1.6847107921000715 -617 249 .6276649515211337 -619 249 -.18279486645564202 -631 249 -.4798195279696625 -636 249 1.7172206584544842 -654 249 -.4498372676152902 -655 249 -.6548371674102355 -656 249 -.8190339729419992 -669 249 1.6491353586899717 -693 249 1.1233668959955243 -694 249 -.002717514437806462 -696 249 -1.569235401309504 -699 249 -.22355341703836779 -702 249 -1.3408111045482647 -705 249 1.0158910882276861 -706 249 -1.4853175718649432 -713 249 1.678759995994058 -719 249 -1.1758390036919466 -741 249 -.13109767994490718 -746 249 -.31315832012784095 -752 249 -1.0214634430054534 -773 249 -.639231849843594 -774 249 -1.5819396906609504 -808 249 -2.4060829414197036 -809 249 .7623387679771301 -821 249 -1.0712911069561466 -825 249 3.2155681805644143 -880 249 1.6236395167910183 -884 249 -.21401020546492452 -886 249 .9467239627355827 -888 249 .02217368691520491 -894 249 -1.740596791910817 -897 249 .7649301423283404 -911 249 -.9417270313705655 -951 249 -1.8802337866137422 -967 249 2.7747008124334536 -970 249 -1.348851789533444 -981 249 -1.0945804894496767 -990 249 -.06593096914885531 -8 250 .027827658179344954 -26 250 .3881825767286283 -30 250 1.109073922825676 -45 250 1.198210312315194 -65 250 -1.3268818372402023 -68 250 -.47900615160142535 -87 250 .6596764796132967 -90 250 -.1537846337963687 -98 250 1.0947620245292213 -111 250 -.3938396070658594 -119 250 .35231971797605444 -138 250 1.0722359451250651 -146 250 1.8399526893689386 -167 250 .7166917174225718 -168 250 -.6536288483430766 -181 250 .6267970992747667 -188 250 .6223092709288071 -190 250 -1.9877424567144524 -192 250 .46487559704361897 -194 250 .3325465330430495 -216 250 -.16167940656485535 -223 250 1.8210803824404922 -236 250 .9153389531608682 -237 250 .5232885364457281 -247 250 1.4770425080689797 -257 250 -.3649957653612857 -260 250 1.190993892100411 -275 250 .7398331041940385 -284 250 -.7002747652447078 -293 250 .18478595344269333 -303 250 -1.7379044314099592 -306 250 .026565779544591182 -320 250 -.44486922753547564 -330 250 -.7218359804414801 -338 250 -.0001385294469491219 -344 250 .1236087395388353 -363 250 1.5388885547671942 -370 250 .7668494991502954 -374 250 -.661004595856501 -377 250 .3350053791522211 -378 250 -.011834153655737922 -388 250 1.098457785372948 -395 250 1.0371465501427468 -396 250 -.7037984536060001 -398 250 .29941256510971404 -403 250 .3406332854758102 -426 250 1.333254109226767 -449 250 .814889747746956 -459 250 1.783367373771519 -477 250 .6080960780106089 -491 250 -.29973883074123514 -492 250 .2560205905223411 -522 250 .029862127554499296 -528 250 .3915876004379468 -532 250 .35675991418455333 -536 250 1.795181548188856 -537 250 .20781003726258296 -542 250 -.7477278455288505 -546 250 .945265617990764 -552 250 -.33262258456799143 -580 250 .20973883022944667 -600 250 -.6522906593730727 -629 250 -1.313801152984074 -639 250 .09648188511485895 -640 250 .6401622523002695 -648 250 .1680820203534432 -653 250 -1.2675912691363522 -660 250 .8280739531032681 -667 250 .8951480369651162 -674 250 .4587834382513786 -678 250 .05650971990107946 -681 250 -1.55473720782846 -685 250 -.9365787034554723 -695 250 -.3399317384653506 -708 250 .3291376401393121 -726 250 .1815599322614405 -754 250 -.36093789098818535 -775 250 .40969207134894947 -816 250 1.0725903708140123 -834 250 .5806338893154976 -843 250 -1.587500387363564 -844 250 .23017086173112944 -845 250 1.2543475659960979 -848 250 .32882342373067824 -856 250 -.5739504037160484 -865 250 1.0696570812315256 -882 250 -.7162180714466707 -885 250 -.09897148647841181 -896 250 .9430912271208205 -900 250 .37239764230996375 -906 250 -1.224443300611765 -908 250 .4365703974119317 -909 250 -.9935068375122265 -915 250 .11866299694091209 -917 250 .904390496540214 -924 250 .6443836207414122 -929 250 -.2916901066527239 -933 250 -.21111242708855465 -946 250 .8096374147508172 -950 250 .4666034804572562 -954 250 -.32354634706993823 -970 250 -.5707871436999297 -986 250 -.011004911581370472 -990 250 -.37130262788558344 -995 250 -.5302344406767732 -19 251 -.5098759836788682 -28 251 .5999502067033486 -34 251 .27212308943842944 -42 251 .03828521536185181 -50 251 .3676681304732382 -76 251 .6055607554289937 -89 251 -1.2010747403625543 -91 251 .3816839779808318 -103 251 -1.0399776399186036 -105 251 .34189600253583097 -133 251 -.16975163125657897 -142 251 1.2008885506444102 -176 251 .5510465226570254 -197 251 .8834001803341742 -216 251 .6895349389141117 -218 251 -1.4362082531818847 -220 251 -.1714012534933665 -227 251 -.1304029374468447 -240 251 .4435101081884098 -244 251 .24817163659038427 -269 251 .45528690887619266 -299 251 -.21483853419035714 -304 251 -.031770294607982044 -306 251 -.8401257900588561 -318 251 1.6124628415104765 -324 251 .6623947210683997 -325 251 -.6284173998449551 -326 251 .2263300171009438 -327 251 -.3004119330675901 -347 251 .7747454105387678 -354 251 -.11487403110425333 -391 251 -1.4287526841102773 -397 251 .5040924646084759 -403 251 .11653355227857862 -432 251 1.274254315182865 -447 251 -.13986465244884172 -475 251 .35614052957385234 -485 251 .44232473356180035 -486 251 -1.2691914833693376 -508 251 -.9087059681004934 -510 251 -.8539213769818551 -513 251 -.3768181123263088 -522 251 -.958679522341803 -533 251 .6489753892390324 -534 251 .11369585681958973 -554 251 -.4775316306577456 -556 251 .7804191768812998 -561 251 .5080684186543203 -572 251 -.6414766212959754 -579 251 .7511120031424825 -585 251 1.5651381812132112 -593 251 -1.008536384423266 -598 251 1.01037878413694 -601 251 -.3216121259402938 -609 251 -1.7336231189706472 -612 251 -1.030392555320708 -613 251 .8339056641963396 -619 251 -.6547362029564344 -636 251 .124188799403649 -649 251 .9371376236036901 -666 251 .1538770422610134 -667 251 -.5368678949744973 -672 251 .7886266228571277 -679 251 -.6838365240172225 -680 251 -.12201641135022036 -682 251 -.3233796886218914 -685 251 .6508379118609993 -707 251 .26551095202914043 -715 251 -.009366927395158264 -737 251 .45320134103535986 -745 251 .019284401156962838 -763 251 -.160110236249161 -766 251 .4545139043314449 -771 251 1.1567883017760132 -787 251 -.8142652892724466 -789 251 -1.2781406359406375 -791 251 .08222045055806267 -794 251 -.26356146532963465 -802 251 .9861569878455716 -808 251 1.0872680394485714 -862 251 1.097350266432401 -869 251 -.7026452460483903 -891 251 -.26213784405862467 -898 251 -.7217558570911764 -910 251 -.07585110146489427 -918 251 .3354457828308169 -922 251 -.07186356142399239 -935 251 -.17728165553279324 -936 251 -.020093747156179793 -957 251 .40104748619873143 -975 251 .4186426854449939 -997 251 -.3080565856363198 -5 252 -1.1819553355028092 -12 252 1.5740119207801306 -15 252 1.4521252987556317 -23 252 -1.984707731226819 -41 252 -1.2073921050260619 -42 252 .2015732953171319 -44 252 -1.3443313554150331 -64 252 -1.7366510544769156 -67 252 -1.6202021609733641 -82 252 -.6394339983831248 -99 252 -2.152075232160971 -104 252 .5871382768457517 -116 252 2.178024246159938 -122 252 -.4877215476314333 -123 252 .10366230050735226 -130 252 -1.7191467726063367 -139 252 -.8254897045379253 -168 252 .5144276725824617 -171 252 -1.6374412558280989 -184 252 .1738795064402197 -188 252 -.1778872638831373 -197 252 .9778034576726863 -218 252 -1.62519220558322 -226 252 1.0542353539737963 -240 252 -.7115579353000507 -258 252 1.9262469672980282 -259 252 .9724623552108497 -282 252 .3826750793815405 -296 252 -.5797757237957838 -305 252 -.9162190033143118 -322 252 2.690017187969943 -337 252 -.3911711879563998 -341 252 .6615671340472454 -345 252 -.6609644692360495 -351 252 -1.687685393481857 -356 252 -.004049247076476414 -360 252 1.8002753511679381 -365 252 .9484707544222022 -381 252 1.0771415207796085 -402 252 1.1808274492094624 -441 252 -.7901063673006773 -444 252 1.1267217422878766 -459 252 .26355939917189264 -460 252 -1.166841454834875 -464 252 -1.474277406908367 -488 252 1.966289368898773 -495 252 .3306608904260686 -509 252 -.48491113702428523 -544 252 1.5829411439417846 -559 252 -.8958847058980323 -563 252 .5331851884406852 -567 252 .3766745160669055 -572 252 .06008321292039842 -609 252 -1.2832010553859483 -615 252 -.8961022313366291 -617 252 -1.184368130958604 -632 252 -.03965676690769925 -645 252 .38676722399620045 -692 252 -.7617098734277531 -696 252 -1.1610031841483506 -702 252 .24952703348352623 -710 252 .22030670803132463 -728 252 1.4471557612637367 -758 252 .5544757913297447 -763 252 .53595076766219 -767 252 .5813371452636995 -769 252 -.11763316617753145 -779 252 1.766561353717384 -786 252 -1.1461075061579544 -803 252 -1.5867178811304101 -810 252 1.4686853447333201 -816 252 -.9060871204059651 -821 252 .9436252428846433 -824 252 -.05936856624849239 -829 252 -.7391694698664291 -834 252 .7017432965371078 -855 252 -1.3466877558529047 -866 252 .9096115433224029 -871 252 -.9219742247966949 -875 252 -.6054751774760153 -879 252 -2.1372410998772704 -882 252 .09531689569768512 -893 252 -1.2469805746590172 -896 252 -1.2597582850532714 -901 252 1.2919836338500124 -903 252 -1.9148281336080557 -926 252 -.08707970064513648 -933 252 .8314323891415603 -938 252 -1.7483224626805056 -951 252 -1.7564114280100203 -965 252 -2.033168648125247 -972 252 -.9323432290847418 -7 253 -1.4243359041943036 -16 253 .2593027534122089 -32 253 .07062914189060683 -42 253 -.5081450446073468 -60 253 1.4679654989964503 -84 253 -.7139095906808979 -95 253 -.7013312891950996 -102 253 .9348980901861326 -103 253 -2.540132519808558 -109 253 -1.1930217273949024 -111 253 .9876527955070944 -119 253 .14878584642817796 -143 253 -.011706827274292342 -150 253 .010505703280460105 -152 253 -.1907045936609557 -172 253 -1.041930066698868 -174 253 .6987268606029788 -175 253 -.21671862566065733 -179 253 -.8269140484418178 -181 253 1.076411180422762 -206 253 -.2535439585826744 -208 253 -.5037304416321335 -211 253 1.6904029210843565 -213 253 .1919123482314472 -217 253 -.7148294197045866 -224 253 .9896488842433 -247 253 -.32143593828820294 -275 253 -1.4562641495774014 -283 253 .9888070971442212 -334 253 -.46983024880864527 -341 253 .8406604285525754 -346 253 1.1989590482139225 -352 253 1.7821251154161022 -363 253 .4099727213808495 -365 253 .2362399086741634 -379 253 -.9841738439003792 -398 253 .12997208837828125 -406 253 -.3684399846895313 -409 253 1.124789141184929 -413 253 .8248413662772995 -419 253 .6879385435893044 -424 253 -1.5750839700795622 -430 253 .9827137955951556 -435 253 -.2000067039352118 -441 253 2.1277274572784997 -444 253 .48318990492536196 -453 253 -.9100310334565421 -467 253 -.5070438625477787 -473 253 -1.2752697286656094 -474 253 -1.0479261875477184 -478 253 -.11262585593918509 -484 253 -2.191145824336965 -493 253 -.489717003582405 -499 253 -.7291708831827617 -516 253 -1.839659065368744 -542 253 -.3975472393722132 -559 253 -.10146010772219563 -565 253 -2.2783610586726595 -591 253 -.12453558242595386 -596 253 -.6914329478410715 -606 253 -1.2777153936505288 -613 253 -1.7997294747743608 -615 253 -.5074195401388728 -616 253 1.61060863417201 -629 253 -1.1654683694006773 -634 253 1.9253191966513816 -640 253 -.5806491042003246 -644 253 1.1577067431617898 -656 253 -1.6796616262850528 -668 253 .9855646610528399 -676 253 -.524752904113652 -677 253 -1.7259277307977028 -683 253 .4471586165399971 -685 253 1.1098878714141038 -692 253 -.19610948467249378 -708 253 .1397720952789444 -718 253 .3867894624270589 -721 253 -.07699519804046867 -733 253 -1.1588957492928353 -747 253 -.007012096314491012 -749 253 .042935659462263284 -750 253 .1995485085464307 -757 253 -.5112708154605388 -767 253 1.2803483274383656 -771 253 -.41559352815138617 -791 253 -1.5372830871187695 -792 253 1.359513526857151 -800 253 .8111002557339719 -805 253 1.742732032335541 -814 253 .4974070153796234 -820 253 .3492310256669109 -831 253 -.7219665167808085 -844 253 .0413605936544969 -855 253 -.31983980701879333 -865 253 .08820806302651128 -883 253 .03820364987547251 -898 253 1.9828766866103862 -932 253 .7816733981773041 -939 253 .8299234588202414 -943 253 1.6730253279679514 -961 253 .6235431107409005 -965 253 -.00020712111403588251 -983 253 .3697817492722886 -985 253 -2.289254895751576 -990 253 -1.3015076614611725 -993 253 .3871231784665836 -998 253 -.1332208142833124 -38 254 -1.158044241781492 -47 254 -.21323853090951927 -51 254 -1.1776688464983882 -59 254 -.7990320398571303 -60 254 -.6996931562652151 -78 254 -.13911441479930214 -96 254 .9884635631325832 -102 254 -1.0004976558239858 -114 254 1.058593432537358 -116 254 1.8329243987084995 -118 254 1.0663634108212383 -124 254 .11705588946449384 -130 254 -1.588045909732377 -134 254 -.1155086286313757 -139 254 -1.748473259234881 -143 254 -1.0881933491179667 -149 254 .28081869499011847 -150 254 -.9962869653441663 -153 254 -1.331787630237537 -154 254 2.172178233386389 -155 254 -1.013058035604432 -178 254 -.6834818164260689 -181 254 1.180786370639139 -196 254 .9212739333848196 -205 254 1.6276382912360354 -218 254 -.3016007120693337 -228 254 -.7757432094048243 -230 254 -1.019964649832723 -241 254 -2.3521778041583157 -242 254 -2.1871925778132457 -249 254 .19114333490590996 -257 254 1.0576484922943103 -271 254 -.9378947720316032 -272 254 2.2987508868183073 -276 254 -1.574966008000089 -278 254 .623455695475083 -288 254 1.3237656054428741 -300 254 .9723998904187653 -308 254 .8975113164715322 -309 254 2.163184375688937 -310 254 -.6183315062887456 -312 254 .6802760885077554 -320 254 1.985727810154042 -333 254 -.21512698879669617 -337 254 .6260697418529478 -343 254 -.8756504718880962 -348 254 .42697685934456897 -355 254 -1.199385814337914 -368 254 .6403988784707451 -371 254 -.47170335215429227 -382 254 -.6827311863570344 -416 254 -2.0618601858942243 -431 254 -1.6626388508255008 -457 254 -1.1092700723689366 -499 254 -.6532526164457221 -503 254 -.6383801914409757 -511 254 .2838819704331662 -516 254 2.3627889785439775 -526 254 1.7246640442228856 -540 254 -.014645608528595047 -547 254 -.39493093172059146 -567 254 .13914711476622987 -569 254 -.7781455403162544 -573 254 .20317553571080638 -589 254 .8923381740942671 -591 254 .08652545974058319 -602 254 1.126669498460008 -611 254 2.966565386733078 -614 254 -.025304234528490198 -629 254 .967966045386897 -630 254 .12589696382013935 -641 254 .07544264217532305 -646 254 .5445189438158621 -675 254 2.4908464026091086 -692 254 .21379520829739826 -707 254 -1.4763481470967963 -711 254 .5909654584855645 -717 254 -1.9519814437420246 -724 254 .6775404117334145 -731 254 -1.2571727713124747 -749 254 .8585347483335467 -750 254 -3.1148467591812707 -755 254 .274648437790117 -769 254 .057456779182312054 -771 254 .619396917076535 -814 254 -.04856718240226296 -820 254 -1.6838333778955166 -828 254 -.3377382808946484 -829 254 -1.8145008575668786 -855 254 -.8365156750008728 -862 254 .38370961629066347 -866 254 2.6893478163969835 -873 254 1.6575939395679566 -876 254 3.094051176366259 -877 254 2.4413325797428835 -898 254 -.5327335821946018 -904 254 -1.2719995797562254 -920 254 .9951724422161299 -936 254 2.0022689955701893 -937 254 -.13164197315961124 -951 254 -1.9487050968864166 -959 254 4.1259082406092 -981 254 .44958606931189127 -996 254 .5159296355113117 -1000 254 -.9237265996814703 -1 255 .4147030451828374 -2 255 -1.2649795278541545 -29 255 -.06236840375231989 -33 255 -.09928021528313387 -44 255 .7331239794788844 -53 255 .3947195178038333 -58 255 -.37849549373901636 -61 255 .5296510614652375 -120 255 -3.0673974451349904 -132 255 .07466551505510388 -135 255 .2700682669424346 -156 255 -.08516057122365889 -162 255 .8848273540538231 -189 255 .022868976796249885 -197 255 -1.038120207102161 -214 255 1.7448715333984675 -220 255 .01684445786803071 -224 255 -.20592052397852903 -236 255 .4808990064910702 -259 255 -.6965453536446773 -260 255 .013488315479528251 -261 255 -1.5571171209856034 -263 255 -.08733829911895075 -264 255 -.46328385695817725 -265 255 -.619929365495719 -275 255 -.7612996327643192 -286 255 -1.1055641750727792 -297 255 1.083579735193819 -300 255 .6905421249897791 -305 255 .556724187898113 -307 255 -.5798240205969719 -316 255 .09225137658226523 -337 255 .8473196371759054 -356 255 .6548649671463029 -367 255 -.7253161372705086 -372 255 -.1329520759856343 -385 255 .2658311602032573 -405 255 -.07607987146931176 -406 255 .8162166896581231 -408 255 -.7927566464757143 -425 255 1.6036648671670852 -426 255 -.9564909972483114 -428 255 .010026614263516273 -434 255 .3669505354597399 -436 255 .27207804126485835 -462 255 -.38788128046173403 -466 255 -.8253062071639693 -470 255 -1.4569877417969994 -487 255 -.5979724439306787 -516 255 1.6516514380568132 -519 255 -1.1523289531581198 -533 255 -1.0072743806542506 -537 255 1.161551374536687 -538 255 -1.8598002664025362 -545 255 -.1688658487238262 -578 255 .715731440122072 -579 255 -.0765039023712738 -583 255 -1.3807856993444465 -585 255 -1.6220147433448948 -593 255 .26332356651127403 -594 255 -1.2465051607405206 -618 255 -.09641134642447152 -619 255 1.0863506659104079 -630 255 -.30014679019246054 -631 255 .22447206623404564 -633 255 -.42987220427033057 -665 255 -.4138889139485939 -666 255 .4896359355046827 -682 255 -.345100078964373 -685 255 .22993738133935324 -693 255 -.07258035957807867 -694 255 .25830756110114683 -704 255 .25959240119999155 -778 255 .8061528911815878 -805 255 .2804450706315819 -820 255 -1.4789492799604038 -844 255 .3654347281062525 -856 255 .06489705227338088 -886 255 .644096336671079 -894 255 -1.8744105161722728 -900 255 .012979826972875919 -909 255 1.5015119573532094 -911 255 .9076644419869 -951 255 .6376349264072638 -955 255 .3874302447548952 -983 255 -2.2330420491731835 -984 255 .261977539577604 -24 256 .12514042174893802 -26 256 -.9976097923462874 -32 256 .4227927795940052 -41 256 -1.1605290467572555 -42 256 -.1454712540396114 -67 256 -.46165773985963393 -68 256 .65744544067018 -69 256 .547521610241082 -71 256 -1.279355427331164 -73 256 .3215318369041459 -76 256 -.04841690035841134 -82 256 -.47857982597419435 -83 256 -.27827257863899685 -88 256 -1.210491889037872 -90 256 .9609719774417382 -94 256 -1.8619496389622983 -100 256 .32786478206015474 -107 256 1.550859385097259 -118 256 -.09089711013486437 -119 256 .5316972023813348 -127 256 2.3254015881045267 -151 256 -.16247863341817903 -157 256 .28423406032719983 -160 256 -1.2745657849771965 -176 256 .6089744939882306 -183 256 -.27036000940067406 -191 256 .4329656121414801 -231 256 .04475755575858438 -246 256 1.5256355385155078 -247 256 -.23021492479262348 -253 256 .08733912825890434 -255 256 -.8004033984059973 -259 256 -.3370532615946325 -267 256 -.7537143804152466 -299 256 .16442995165052038 -306 256 -.6634944329083792 -312 256 .8281322601715188 -314 256 .28026516949331565 -321 256 -.6091757163308121 -343 256 .4906861826129387 -346 256 -.21466574816939693 -355 256 -1.424358082731508 -369 256 .04000082245025427 -372 256 .36002357171548893 -375 256 -.6759850921572443 -376 256 .8017080048469116 -382 256 .9053998881323092 -391 256 .556803718473581 -400 256 -.45746093959934553 -402 256 .0838055801260986 -403 256 -1.4114215461723942 -407 256 1.3735496692489253 -408 256 -.3966590711989734 -412 256 .415431787090275 -423 256 .6460515436257556 -444 256 -.5099306536430732 -446 256 -.10467277675927504 -452 256 .22780317157821192 -473 256 .34245971395070957 -484 256 -.3457193154009631 -488 256 -.5740510129314099 -511 256 .4671982355573018 -514 256 -.5146347162564745 -519 256 -.19551225433952235 -523 256 .4181417149314802 -525 256 -.8324443138226101 -530 256 1.67454470404758 -543 256 -.5634488018011814 -550 256 -1.3669448039726944 -553 256 -.6764997028893383 -556 256 .3679249593747051 -560 256 -.3086470105073283 -561 256 .1389076845345579 -565 256 -.08975476576298372 -579 256 .17799357151178988 -586 256 1.4264588158562144 -597 256 -.41881400945041447 -623 256 1.0544452649966387 -629 256 1.3419777154962207 -643 256 -.6555596305413842 -648 256 -.7336134873511002 -656 256 1.237681510549559 -657 256 .5192476590665908 -660 256 .23539991569368987 -662 256 -1.407185065472999 -664 256 1.1347713637176413 -671 256 -.23792329454316016 -673 256 -.09051371372709517 -676 256 -1.022288801700805 -688 256 -.9187161879902283 -704 256 .6511660800807612 -705 256 -1.4229196330864726 -720 256 -.7004426936912779 -751 256 -1.1889454685697645 -752 256 .6594838790069623 -770 256 1.0595360290377924 -775 256 .4778844356697285 -776 256 -.08399369756801206 -779 256 -.9955953258983095 -782 256 .5406608742786355 -789 256 -.018569193277003238 -791 256 .09305439637865556 -792 256 -.6719742504779675 -797 256 .03958424452324147 -803 256 -.08471536904821482 -808 256 -.3542753925551602 -810 256 .275928600923993 -818 256 .3702751669347941 -831 256 -1.0620134532788397 -837 256 .3214272390644894 -839 256 -.41030431937619183 -840 256 -.022366399871312462 -857 256 .6953186422762336 -864 256 .21132733479985988 -897 256 .20877320890151022 -901 256 -.7358793372382861 -913 256 1.092995370417579 -916 256 .2193448042241669 -924 256 .21506842609148435 -939 256 .2474030609213857 -953 256 .5504556976723802 -963 256 .3785614578785518 -971 256 .8588671476332319 -972 256 .0767940670484519 -985 256 -1.442397044987863 -13 257 -.11103442923946105 -37 257 -.009653399217739403 -39 257 .48947637920679515 -41 257 -2.896392626372551 -66 257 -1.8113731300963591 -104 257 -1.2553948354863325 -127 257 .15352055877137832 -133 257 -1.3165265887938828 -150 257 1.371763042093595 -156 257 .09160287844427722 -165 257 1.090932812789767 -167 257 -.6811082833892551 -168 257 -.488199659840723 -173 257 -1.0291450485007492 -198 257 -.15777459552218778 -204 257 -.6148319795060643 -221 257 1.8146094910446233 -235 257 -.007554668956593569 -238 257 -.49402014434468217 -239 257 .8631898644241215 -244 257 -.6736448534171189 -245 257 .16044927412360058 -246 257 1.2221853573731378 -260 257 1.5137225897483528 -262 257 .18462323657804192 -266 257 .2841736756184038 -268 257 -.6123120090662184 -273 257 .5958317851626806 -277 257 .6892254762966293 -308 257 -.8216941120852108 -326 257 -.6009941600308694 -336 257 1.6376760483744481 -343 257 -.39420378055814953 -344 257 .15760259012989158 -356 257 .7516863023648406 -357 257 .3122326922335722 -379 257 -.3204604208195788 -398 257 -.5885262941917427 -402 257 1.1342360276831207 -409 257 -1.332465495619292 -412 257 .1438441942255367 -423 257 .4253078199379523 -429 257 -.46340256600852936 -432 257 1.0699795833529535 -435 257 .13291200051548313 -436 257 .07267430258980909 -449 257 -.9767421588385093 -463 257 .12745265087060476 -477 257 -.673001648175749 -491 257 -.34965511753654327 -499 257 .7245634520780206 -501 257 .4092537069818142 -502 257 .5875638618086977 -511 257 .4579913781222408 -519 257 -.45055124367666655 -525 257 .8754563667600601 -529 257 .9278362821448621 -534 257 .9009888886571699 -542 257 .72802013220278 -546 257 -.586336031243068 -550 257 -.34171765511701235 -561 257 -1.0698398566427558 -572 257 -1.579263101688548 -573 257 .3234745517116452 -624 257 2.030913505903178 -629 257 .9461944629038542 -637 257 -2.1640190494014173 -640 257 .43285944755899175 -681 257 2.011828058105441 -688 257 .22576539064578627 -692 257 -.35645935120438177 -693 257 -.4674793610065298 -707 257 -.5996657395908181 -716 257 -.01951967832322528 -721 257 .6111153754928507 -728 257 .11146829207035605 -751 257 -.9007649521952231 -753 257 -.6497879774517533 -759 257 .19695689393932622 -769 257 .5095380209733906 -784 257 -.8896910609981686 -791 257 .9905338711388546 -804 257 .5503689868267555 -817 257 1.0303234108188548 -833 257 -.7475168788407545 -841 257 -.7867446646008049 -852 257 1.8246976699239097 -871 257 .014691407609475644 -873 257 -.044616178514049865 -879 257 .5917881484679215 -883 257 1.2193668279561647 -884 257 -.8257290258421868 -889 257 -.8996705609248576 -895 257 2.0834044294535174 -904 257 -1.1582421217015444 -916 257 .32187550872119575 -919 257 -.455342430303736 -920 257 .8112265755628597 -930 257 .3466389698036247 -962 257 .020192854212193856 -972 257 .40215517495757436 -998 257 .5303212693982212 -1 258 -1.6813549740266867 -15 258 -.7229809096346265 -17 258 -1.4690019690085383 -25 258 .14040372726727665 -30 258 1.7635198585636709 -39 258 -1.1228380812169718 -67 258 -.9126032196417813 -73 258 -.17310878604230623 -76 258 .7407056868620773 -101 258 1.6021211729945772 -110 258 .04222333520931694 -125 258 .18282745746340523 -143 258 -1.4312091353747332 -149 258 .7838911281735346 -151 258 -.057572894926865084 -153 258 1.4722267527870916 -158 258 -.6568461376854969 -169 258 -.7091549281556137 -170 258 -.7762179984594307 -176 258 -.15480129968609696 -183 258 -.8569234284063949 -197 258 .6793741955285363 -201 258 -.43459464858988683 -207 258 .9856103732512649 -210 258 -.37345224074183847 -221 258 .31558870055782906 -244 258 .6356457915821452 -245 258 .26189364798726217 -254 258 .9312431346759521 -265 258 -.4722157316564561 -284 258 .3637399170614724 -287 258 -.6402458825687553 -288 258 -.2726488649923232 -294 258 -.026053020173182506 -320 258 -.9429664871963134 -325 258 .34317816758881103 -328 258 1.3225859986873987 -332 258 -.39162870561758384 -356 258 .07244080020501827 -372 258 -.43932573540641146 -375 258 -.4009915211631511 -385 258 .9001221219929864 -398 258 -.7677843040506134 -399 258 -.15497961399987556 -406 258 -.7093141175121125 -428 258 .5948746876144536 -441 258 -1.206078481469482 -448 258 -1.1331333287051544 -449 258 -.3994033880233646 -461 258 -.8502559443905806 -471 258 -.08208618851576033 -472 258 1.5113405282377739 -473 258 -1.4092252827541438 -486 258 -1.5841688746994358 -488 258 1.2542374815681474 -490 258 .9919387065940732 -512 258 1.8188639408625609 -550 258 .9123216699161036 -557 258 1.766294222354849 -561 258 .010709526056607514 -597 258 -.8318156209100912 -606 258 .35959200904261995 -609 258 -1.8879233686842136 -625 258 1.1748714822573034 -641 258 -.9195544639062685 -649 258 1.0114185875251496 -673 258 -1.0916619969192518 -701 258 -.5138456479482749 -702 258 .13294209641281202 -704 258 -1.161218514479977 -710 258 -.4983693904724358 -720 258 -.41655244655851725 -727 258 -1.8441522801479209 -748 258 1.7821353459432088 -756 258 2.3847795801112426 -760 258 -1.322207940037896 -761 258 .9194367712040171 -764 258 -1.1700023371128725 -781 258 .13256709438266148 -792 258 -.8663292555914195 -803 258 1.0462559580921664 -806 258 1.0292349187367 -824 258 -1.7770122281186458 -832 258 -1.960114807902841 -839 258 .14754443711094714 -849 258 -.9514823629253321 -853 258 1.1254045981960186 -854 258 -.459493441445444 -858 258 .3400696684155381 -884 258 -.9223633100651338 -886 258 .5901053056045127 -890 258 1.5069910895913294 -900 258 .9139649012325864 -908 258 .8962033870685583 -925 258 -.8206491352871459 -930 258 -1.6696869182252863 -947 258 1.8403066628430569 -957 258 1.3006112400246088 -963 258 -.6602015138685309 -966 258 1.440120340274091 -985 258 1.708378879709086 -992 258 .924903189998417 -999 258 -.46235819149088314 -1000 258 .20828112478848615 -5 259 .6515279607288667 -9 259 -1.359538351775604 -20 259 -.03868366811059437 -22 259 .5303119935138229 -31 259 -1.5357999087439649 -39 259 -1.15100612362262 -40 259 -.9913183352328879 -41 259 1.3526897528748318 -50 259 .9977380875468038 -55 259 -.9519441766616059 -58 259 -.3242817677613661 -59 259 -.7902627840903037 -75 259 1.8777295993711673 -76 259 -1.1928711949550586 -82 259 -1.8156206756557651 -84 259 1.1755017604185831 -86 259 -1.3826783470747988 -91 259 -.6446254833352957 -103 259 -1.4457139238462315 -118 259 .8036775624440488 -121 259 -.5928153702198155 -140 259 2.2279433891212 -147 259 1.351978755548272 -152 259 -1.3256471120051692 -154 259 -1.7302357677456652 -171 259 .466487151425433 -193 259 -.9457056714225551 -209 259 -.6583220781491435 -224 259 1.5978998240315088 -233 259 1.914371535958326 -240 259 2.8348372257133083 -251 259 .5334100348499895 -258 259 -1.1161717992621836 -261 259 -.5954710335843785 -278 259 -.9209306083742045 -279 259 .40236728462887633 -297 259 1.3362582727553436 -308 259 .4227488657226424 -318 259 -.16364461483199574 -335 259 1.3891159427826796 -342 259 -.31655753205747694 -378 259 -.3241138390442603 -386 259 .1973436447331688 -398 259 -.677573486522445 -404 259 1.680612723492695 -409 259 2.7175642954571 -414 259 -.9154120142300798 -421 259 1.1095048841682862 -431 259 -.193448745819064 -439 259 -1.4676285829060844 -443 259 -.4585071155535022 -471 259 .11596155056812335 -473 259 -.6306475520214146 -492 259 .9517366036180289 -511 259 -1.4636174755400708 -523 259 1.6157795072136623 -542 259 .004015769466550745 -553 259 -.515164284626223 -560 259 -.5462207875108077 -569 259 .7326823273852385 -584 259 .3136069202765472 -586 259 -1.764716763978551 -623 259 -.25996147173126816 -630 259 -.12127548906180877 -659 259 .7142913287726962 -665 259 1.4565623353625066 -672 259 -1.3766206793855564 -675 259 -1.439130459856332 -684 259 .4288482809332147 -686 259 .2307384663343734 -693 259 1.060050442526003 -719 259 -1.2360844123281813 -725 259 -.6138784679366199 -735 259 -1.1517103535580984 -741 259 -2.603949253437372 -754 259 .8282502958061692 -761 259 .5932972359958972 -777 259 -.6519583751088961 -779 259 2.857097715546752 -795 259 .5196958126775965 -805 259 1.8010903859107583 -813 259 -2.2366467619881862 -818 259 .9777958804016686 -825 259 -.6488410488490273 -831 259 .1548563410363813 -845 259 .06588363792955265 -850 259 -.7920951989092601 -853 259 -.716710092173118 -855 259 -.5527859769092833 -856 259 2.0584841244795937 -885 259 .7143106375366248 -890 259 -.45167676155816766 -903 259 -1.9715956647353257 -905 259 -2.225492066706406 -911 259 -1.348552760829647 -927 259 -2.5209126175511596 -928 259 1.45092420454724 -941 259 -2.018165388464112 -942 259 .652787253053194 -958 259 .06062565991369899 -970 259 .8715586196373714 -974 259 .5242277567459948 -985 259 .6723611647280963 -993 259 -.3785960676776218 -998 259 -2.6130317086580637 -21 260 -.7152261128886741 -37 260 .6792907483610543 -41 260 -.6509758814556219 -43 260 1.0048588667125096 -46 260 -1.5332187875008279 -59 260 2.1089252347700724 -67 260 -1.011024652982174 -69 260 -.3942617274854254 -84 260 -.22270662391924612 -85 260 1.9043979140794782 -86 260 .0748636896087907 -100 260 .42197088142069056 -113 260 -1.3216446116544731 -117 260 -1.4166656043199595 -128 260 .5082833267762827 -135 260 1.5480579980690865 -136 260 -2.535969764195657 -140 260 .7119415160474885 -152 260 -1.7544670111887062 -154 260 1.061734003540411 -157 260 .23710431818236663 -165 260 -.10129080382037735 -166 260 .23575192868802153 -170 260 -.6878191239247932 -198 260 2.2039293021622193 -201 260 1.222421854891397 -222 260 .6328717029795834 -232 260 -.8711966004920221 -244 260 -1.0457783188807563 -249 260 -1.496605688197377 -250 260 -.6348618484917973 -265 260 -.2062063689083023 -282 260 .11989839209327849 -296 260 -.6122003136490101 -312 260 -2.2836711519253865 -341 260 -.25709270433995013 -349 260 2.4379549309684534 -358 260 -.68617266888408 -371 260 .26554883216611325 -382 260 .8802478014849331 -401 260 -1.9173115476581675 -404 260 .2726030651930925 -434 260 -1.3530584596403534 -441 260 -1.6399390666651756 -442 260 -.772383286160768 -452 260 -1.169532934967593 -467 260 -.09627402318008985 -483 260 1.0768206626510648 -486 260 .9110383135310416 -516 260 -.9432610440710968 -521 260 -.8402722712276596 -526 260 .0168878159190273 -536 260 -.6775598654833088 -539 260 1.0843366052321814 -554 260 -1.9664286838989975 -558 260 -1.3688419815832438 -580 260 .35458652947374136 -584 260 .40184159044000656 -589 260 -.25798017307015125 -598 260 -.7196617616236137 -602 260 -.28752516188798055 -609 260 .32814229393981337 -620 260 .6556965979335634 -632 260 .8215524373387403 -663 260 1.4787575063807188 -670 260 1.8286048120424336 -687 260 .11128353026082898 -693 260 -.2540684450257824 -708 260 .2714911318579525 -728 260 1.0519620349694323 -729 260 -.3810757269861482 -742 260 -1.0486363114750146 -751 260 .21070639416906708 -753 260 -.4579676708965287 -755 260 -.9568017664301779 -758 260 1.9068113205221815 -767 260 1.6114106571073528 -771 260 -.15682588031208308 -775 260 -.0672457609645287 -777 260 -.5471625511289809 -782 260 -.17457366767487054 -786 260 -.7932205375957438 -796 260 1.0354642981461828 -801 260 -.3716843796621835 -816 260 -.5611748365288004 -821 260 .5284219625914589 -825 260 .12095347162918799 -847 260 -1.6651372830548095 -848 260 .09575560175998735 -856 260 -.22674866567039736 -888 260 1.9943006821878995 -897 260 1.4757570818196908 -909 260 -.8249135934031188 -924 260 2.2568004151822305 -926 260 -1.1782970627730058 -934 260 .4776971308216976 -953 260 .729487020180423 -956 260 -.490998305415591 -963 260 -1.585880325830345 -974 260 -1.0733958735778657 -986 260 -.5194494161249958 -998 260 .04782743958788939 -10 261 1.2485019240434956 -18 261 3.9986165648591183 -37 261 .9724482481204269 -66 261 .9584550039875956 -74 261 1.3531879585465343 -90 261 1.2399447795627827 -109 261 1.952271458737902 -146 261 .21166764700968327 -156 261 .12678108541398564 -158 261 -.6384449158881179 -163 261 1.2451378382750953 -167 261 -.7317502322631023 -173 261 -.21333281383859481 -174 261 -.7101014916873891 -180 261 .8847242454525175 -191 261 -2.1445733762204355 -221 261 -1.8437186781706245 -228 261 .817269201503925 -241 261 1.5371695744508211 -244 261 -1.3018393205385472 -247 261 1.3248525534464486 -260 261 -1.1980037516830684 -276 261 -.7511317526398639 -292 261 .3607399000000699 -301 261 1.8891261178488752 -335 261 .24292784901320774 -343 261 .3189464070718247 -355 261 -.545675408456605 -362 261 .46056034331307344 -383 261 -.9237619689037797 -395 261 -1.9461660770484444 -405 261 -.7578635814168055 -409 261 -.6429284117235822 -416 261 .48119894732384094 -418 261 -.9825878301351775 -425 261 -.6004726574853783 -458 261 -.09185882910305218 -459 261 -.54432283668584 -466 261 -1.2135194466043744 -471 261 2.2354202818101117 -472 261 .21032644447071186 -488 261 .2973523271373603 -492 261 1.254274112252692 -496 261 -.39520564470829445 -499 261 -.34884434366084444 -508 261 -.8201973267691532 -511 261 .6098077836299384 -532 261 -1.1856709393496443 -566 261 -.556902851745648 -567 261 .8125014490471396 -585 261 -.6337296837636232 -592 261 -3.3578482954056006 -612 261 .319073896396535 -666 261 -.7142391424624404 -671 261 .8635753882193665 -684 261 1.9015751798759368 -691 261 .15522956697078355 -701 261 1.4040211465850894 -720 261 .8550503479904543 -723 261 .551724213573803 -729 261 -.4938584104218239 -730 261 -.6289257264120073 -732 261 .4103237148772541 -739 261 -.9559012329964924 -748 261 1.4447665829642238 -752 261 .496070976540019 -759 261 -.7991805743685307 -774 261 -.19529352001999817 -792 261 -1.0272712376561608 -797 261 -.9871120397282548 -799 261 -.6638028721666311 -831 261 .4237133329066656 -838 261 1.9431573435742977 -846 261 1.0072322747316251 -856 261 1.4685895890625944 -862 261 .26890956749518385 -873 261 -.49316283284710183 -874 261 .08986775157889298 -875 261 1.761920390636551 -880 261 .5385750367733102 -885 261 1.2382649251510844 -896 261 -.038898643034864705 -898 261 1.0463352515819007 -915 261 .12072289105556594 -919 261 -.9061015784469005 -944 261 -1.2787510397825004 -961 261 .09050215124922008 -975 261 .20246612370049472 -980 261 1.1754757031317606 -994 261 .7730268250923291 -18 262 -.7617249785520521 -26 262 -2.0222011304768057 -27 262 -.9340384836264232 -35 262 -1.3145142717805187 -41 262 -.152845552976517 -70 262 -.27160622406391544 -83 262 .35148941197925154 -109 262 -.0817682666132711 -128 262 -2.1107806371650755 -134 262 1.0894965312315479 -168 262 -1.5617421445082658 -172 262 -.7226163934246503 -186 262 2.2964564616676366 -191 262 .600973463086147 -192 262 .45797981371220625 -200 262 -.386638801246524 -205 262 -.323423197590816 -209 262 1.301047081403186 -213 262 1.2462834957059732 -220 262 -.7264451153030979 -228 262 -.029853112931528134 -229 262 -.594517908122113 -239 262 1.4608452308212105 -251 262 .31398314776152114 -259 262 -1.1697678015449338 -267 262 -1.4592805676466987 -291 262 -.20712651167616408 -299 262 .6830180880606597 -305 262 -.33491547848342484 -306 262 -1.043553991017444 -307 262 -.8601994802741276 -320 262 .7485803076552973 -326 262 .8252826347543418 -343 262 -.9892317003300596 -355 262 -.6922375048578325 -365 262 .916208613012613 -369 262 -.39010585522756797 -378 262 1.4884302227696793 -382 262 .9049282497519459 -385 262 -.08744788507830872 -387 262 -.19681250404733192 -392 262 -.008532366241391528 -412 262 .32940171928598827 -415 262 -1.0528064685447136 -419 262 1.0087513535344779 -426 262 -.6184921733410905 -434 262 .590291246334411 -444 262 .6121182244606592 -475 262 .6350675244730134 -502 262 -.7484048068374483 -524 262 .5438701704351104 -529 262 -.11711875142438175 -537 262 -.7343909478987827 -542 262 .10570545941802154 -548 262 1.182434032146332 -550 262 .014686593424406896 -560 262 -.19663647685506314 -579 262 1.0746881301426678 -602 262 .47858110008759386 -604 262 .2787784989134408 -613 262 1.6918180215280976 -615 262 -.027595746954284378 -628 262 -1.9180375357799855 -634 262 1.7601691620114344 -649 262 -.6211274431393556 -651 262 -1.4037159866517415 -661 262 1.7076252925659283 -665 262 -1.29910985237559 -667 262 -.7424396395543547 -669 262 -1.1375097856904786 -677 262 .10554402413530689 -690 262 -.5247159503784007 -695 262 -.24064218129732257 -699 262 -.5314560696917972 -702 262 -.24433145674338486 -711 262 1.194438385094455 -735 262 -.5503290038841085 -746 262 -.6894514923750448 -754 262 -.13709973510533074 -760 262 .05084437678437201 -764 262 .47767017971850445 -765 262 .8579155975845264 -772 262 1.147569577434646 -773 262 1.3249163218544557 -793 262 .9548711276601959 -824 262 .6613064177098027 -847 262 1.1417638696018808 -861 262 .7800647738775435 -862 262 .10437799559174055 -884 262 -1.080587386972053 -887 262 -.6194339178398102 -889 262 -.4736564696721706 -896 262 -.09389457438412854 -908 262 -2.31385984841537 -922 262 1.866218725795015 -925 262 .37221366510441733 -926 262 .42497447711083985 -928 262 .5141961865804474 -937 262 .059340109265846944 -952 262 1.6263423415493592 -956 262 -.09408466281378827 -957 262 .41045832040140695 -967 262 -2.2767173815400423 -968 262 -.5373306950115722 -973 262 .8977894707303709 -976 262 2.6255692155825767 -995 262 -2.02189767555605 -3 263 1.692352609277564 -27 263 -.5042952006616324 -29 263 .625436940014542 -42 263 -.5287719458059621 -62 263 -.5681341179814096 -73 263 -.11419461514220683 -76 263 .9162334960056243 -80 263 -2.0489601527176755 -87 263 .9671664953662549 -95 263 -.8297949177913114 -102 263 .7952150868990535 -107 263 .12514559193432395 -117 263 -.10668827213059068 -123 263 -.5228392621393453 -137 263 .9561436128391174 -156 263 -.6032464151920287 -157 263 -.1370882466499241 -169 263 .2912697056272878 -180 263 -.9335988137350933 -191 263 -1.6440294999881806 -208 263 .1508210910939257 -216 263 .9516350500360973 -237 263 -.9511580736168089 -239 263 -1.625671545397839 -244 263 -.7636401805658912 -256 263 .6871954994346077 -268 263 1.8248035961286073 -273 263 -.20745722487930718 -277 263 -1.8864997410934436 -293 263 1.5695392696885626 -294 263 -.171355566962496 -304 263 -.12803630413552425 -319 263 -.2668047914709403 -344 263 -1.1853590701824743 -345 263 .2140686883651341 -350 263 -.8090458170460612 -357 263 -1.352581830085549 -364 263 -.6286178851623558 -365 263 -.9186808294673224 -367 263 .8438467420946931 -371 263 -1.0040871598073 -381 263 -.545974591278781 -383 263 -.09179081642886307 -385 263 -.9317020037279902 -392 263 2.298131342854295 -405 263 -.6238620621371678 -407 263 .5613422192419056 -415 263 -.5037128260799625 -420 263 1.5618950810491428 -432 263 1.1430707331821235 -433 263 -.31101802062960826 -435 263 .7460986881697051 -436 263 -1.6150951382884458 -446 263 -1.2381316875332877 -450 263 1.1346732635359973 -467 263 .01808685227554948 -469 263 -.3411102416371964 -472 263 .5178935262663363 -501 263 .2139130340154461 -513 263 -.3813706001180859 -517 263 -.681892665118188 -520 263 1.0549299241689025 -524 263 -.4886192105189718 -526 263 -.6418258446515647 -527 263 -.8411250572191052 -548 263 -1.563890960981976 -555 263 -1.1163818780347463 -568 263 -2.8674129888953686 -575 263 2.085421994976523 -582 263 .7209298628195561 -584 263 .3319716635604773 -586 263 .3388094546898342 -587 263 .288816014647277 -590 263 .8198195848713984 -593 263 -1.3989565556774122 -600 263 .01903649761682849 -612 263 .7862690248217497 -623 263 -.3545592561344971 -637 263 2.1189493673264623 -645 263 -.27769271097604253 -669 263 1.0655231743372868 -676 263 1.092023963880773 -684 263 -.03177559680562561 -694 263 1.508951609653098 -701 263 -.7592728257369294 -706 263 .9573174187374272 -724 263 .2597841395398751 -732 263 -.6439053410407771 -737 263 .44882722292957705 -738 263 .39772148545955505 -750 263 .2715222134145413 -758 263 1.6362296751346486 -779 263 .285250193755341 -786 263 .9035966495736739 -790 263 .5528425103492443 -796 263 1.1056167667225725 -821 263 .4190055623716479 -831 263 .5033611045853454 -838 263 .3071998352002596 -848 263 .527078597378391 -860 263 1.0521551429000862 -891 263 -1.7370774820893353 -905 263 -.294984008292207 -916 263 .2801231397636409 -918 263 -.017920112062391837 -951 263 .02567752016584868 -968 263 .8829308216465073 -982 263 -.02275849517997397 -18 264 .7119512291090705 -19 264 .1390834464212532 -33 264 .5756331875092384 -49 264 -2.0020867767333823 -56 264 .8459512069107931 -58 264 .2354394681864061 -68 264 1.5087785167938323 -81 264 -1.0250715484744348 -83 264 -.41801181473389154 -86 264 .040975123367407267 -91 264 .35329543425555354 -97 264 .5625030797251611 -101 264 1.1285467990260465 -108 264 .5366849247485436 -141 264 -.9883923049513434 -148 264 -.5255226090133933 -166 264 -.019106585808126544 -179 264 1.4967865588434044 -208 264 -.09733007224363033 -220 264 1.1466066380949396 -239 264 2.0661648464048303 -241 264 -.12431687349934124 -250 264 1.0067129723223387 -253 264 1.3497061723053494 -262 264 .6362657503719061 -281 264 -.5509083091437059 -283 264 -.49500053719816195 -284 264 .5533458622272077 -286 264 .5669189805939713 -298 264 .00030221871271790546 -299 264 1.3101752506424953 -306 264 -.675275670389637 -335 264 -.5022140909573247 -342 264 .1467810158770424 -346 264 -.4443476289056826 -354 264 .9706300900185364 -361 264 -2.008839764642387 -366 264 .043850168217799884 -372 264 .7808241069991178 -373 264 1.8243382238155144 -389 264 -.3092398132813776 -393 264 .9249367185923743 -399 264 -1.2025857329319172 -400 264 -.3165498992347802 -404 264 -1.3130611193975361 -436 264 -1.3268386159041552 -440 264 .06988496809893865 -444 264 .24158030060759958 -484 264 .6751282196210616 -503 264 1.5104089321657392 -504 264 -.7118948971344989 -513 264 -.436977917660026 -529 264 .5579302580449093 -534 264 -.7009424606489749 -562 264 -1.9137931325397128 -572 264 1.236512276095632 -573 264 .2706339250552166 -583 264 .5610258587794713 -591 264 -1.5887141766525879 -602 264 -.007338014157663053 -617 264 .3927478997101158 -646 264 2.868667756842732 -647 264 -.1408547463151813 -648 264 .25603899018165654 -682 264 .8824905339242993 -688 264 -.4150381433351053 -727 264 .5472944806808147 -740 264 -1.9068128189123357 -748 264 1.1717475811014373 -749 264 -1.1299408906122625 -767 264 -.8193464967687942 -772 264 .8059399655615516 -783 264 .7410196250203247 -789 264 .06029676387808308 -805 264 -.6244842057461956 -820 264 .5667959772109747 -823 264 -.6795236664822463 -824 264 -1.2847152625512706 -852 264 .43829053717970895 -856 264 .2427159186638861 -875 264 .5709638578762728 -880 264 1.0848282510670917 -885 264 -.2589356909154632 -907 264 1.6870346224196948 -917 264 -1.3756269295477137 -949 264 .33142179902852403 -959 264 1.0995455295287577 -960 264 1.3077461439885323 -961 264 .682931630000802 -969 264 1.3434493702782633 -971 264 -.6280956975651282 -990 264 .9650758335317707 -998 264 1.0724062637952136 -999 264 .06884130649831689 -4 265 -.25611827867895065 -5 265 -.2248504994302591 -16 265 -.1148659665779101 -29 265 1.1744661123131863 -39 265 .6392269764761681 -55 265 .25076793282051807 -85 265 .8186453288669865 -89 265 1.1644353007515529 -101 265 .5399549799087122 -108 265 .16539008711700798 -111 265 -.21358381977893032 -116 265 -.5683293857342177 -147 265 .13624049295346555 -149 265 1.2357276579615202 -155 265 -.6774715017588976 -195 265 .5539634135107823 -246 265 1.1341534628405574 -248 265 -.28622030446360136 -255 265 .17418257488906685 -258 265 .2950558625946202 -263 265 .19848818314013597 -265 265 .7389137176105343 -278 265 .5759091804416756 -289 265 .48354103661548165 -304 265 .675088752191047 -307 265 .5325997766363026 -324 265 -1.3265841515579198 -326 265 -1.4522264169398824 -344 265 -.929971367142477 -346 265 -.5141563108627404 -353 265 .6088164101020439 -360 265 -.6715564948687517 -367 265 -.25015236690757087 -368 265 -.8239139634308731 -370 265 -.3071091407703168 -390 265 .23036443708132237 -420 265 -.14853774322828442 -425 265 -.5894974117956793 -427 265 .05940744043330404 -442 265 .4526243128224222 -444 265 .14816836991377366 -445 265 .25969383673666563 -446 265 -1.0596205517583572 -451 265 .4114665239103231 -460 265 .594735996507014 -476 265 -.34244412048355166 -486 265 .2382441960294107 -489 265 -.46100498198464146 -494 265 .06903316003975886 -498 265 -.20235840679885553 -512 265 -.29212776914917316 -514 265 -.8269273010483262 -520 265 -.2778346002203882 -523 265 .188317423240779 -528 265 .1683468856395698 -534 265 -1.071717211592231 -565 265 -.37965210178596015 -578 265 .2879661381656116 -588 265 -.49519986859444104 -593 265 .7852566693182472 -594 265 -.2973167250596077 -602 265 .1903400502197567 -606 265 .5161437579672006 -629 265 1.3151434637404522 -646 265 .38227810148914865 -655 265 .16375686583059582 -657 265 -.6021114298955459 -686 265 .25898703297728387 -692 265 .7167767559796604 -693 265 -.5095787445816063 -698 265 -.10406234378469478 -708 265 1.0808812724487966 -715 265 -.4882769334290239 -722 265 1.0169028472680655 -723 265 -.41237609857493707 -737 265 .36469142347227723 -758 265 -.6731860048027634 -768 265 .8658600363294326 -808 265 -.5855358894118134 -809 265 .17072385634317425 -810 265 .7491797768573991 -835 265 .6483174198718515 -837 265 .4086391022599245 -847 265 .5743204799746664 -850 265 .40122647614447926 -851 265 1.1459170144425177 -859 265 .24637932845890542 -860 265 -.24963826112375478 -873 265 .5724599483036797 -880 265 .28496845560756834 -888 265 -.4767485698775029 -899 265 -.11057077121172904 -906 265 1.4899773116090875 -909 265 -.009343226994544013 -911 265 1.1849621955007588 -949 265 1.09029897420689 -973 265 -.9681675255558593 -984 265 -.6014052496114585 -993 265 .35894641773699676 -10 266 -1.1874200014859095 -12 266 -.5859672376707076 -20 266 -1.0728953508845864 -22 266 .6931701796355558 -23 266 1.5833001938472422 -37 266 .02320016089370426 -41 266 1.1959777581487994 -55 266 .9751504960006825 -56 266 -.46457711333540014 -72 266 .8706338006698069 -98 266 1.2870674350182263 -103 266 .28693569601988766 -114 266 .18595778332422416 -119 266 .5670178309233814 -126 266 -1.0062049040252214 -130 266 3.050899549263901 -137 266 2.1326113653077887 -139 266 1.393886334757888 -153 266 -.6682174926228965 -171 266 -1.3165294456517664 -174 266 1.0494743529735742 -187 266 -.21502393297801042 -190 266 -1.551170122455748 -203 266 -.41257240475443274 -209 266 -1.344009555190942 -214 266 2.2993500442905477 -220 266 .16250095162990813 -232 266 -.015274977274469664 -241 266 -.5234771205166224 -242 266 .8298509482845392 -249 266 -1.0720059287445665 -256 266 1.5916119901912862 -270 266 -.15552394907028197 -281 266 .01813323924175658 -283 266 -.745200745144228 -309 266 .43307528528019934 -332 266 -.14669040635895814 -352 266 1.344738475973195 -371 266 .8201623539218297 -374 266 .9258966459801472 -390 266 1.397374809904507 -396 266 .6597416982781984 -420 266 -.0863671164301473 -449 266 .4845183714309215 -454 266 .011916597244794776 -477 266 -1.1206438863875792 -498 266 -1.062377534801577 -505 266 -.24391090399808663 -510 266 .6383820281225113 -548 266 .6470195965494332 -552 266 -1.3158514080560757 -556 266 -.01771399991200829 -564 266 -.13087785957283155 -565 266 -1.0392085971189835 -581 266 -.4664741791651776 -585 266 -1.687975801831883 -591 266 -.07798443934579102 -598 266 -.24161395777086625 -603 266 .874798775086912 -607 266 .5451932456808593 -611 266 -.968554998168139 -619 266 1.531553400442895 -620 266 -1.3419911725410159 -633 266 .631300806977737 -636 266 .05202945839576002 -639 266 -1.0295345378628553 -641 266 .42761466265654335 -642 266 -.8565426029426549 -652 266 -.06766094398955816 -655 266 .04658511152851652 -661 266 -.950457552216266 -662 266 -.3083403664640892 -667 266 1.0493129516468307 -674 266 1.1701064090204287 -685 266 .41760631132926845 -712 266 -.7257931813874837 -716 266 -.06332673854515528 -718 266 2.3650618439617075 -719 266 .4346390809689134 -722 266 -.0004902774574787327 -730 266 .4277477748661249 -731 266 -1.3260021824039858 -739 266 .19186089282621516 -759 266 .20384976341803038 -774 266 -.1612917554054913 -778 266 1.069882912163501 -796 266 .09901500204131458 -802 266 -.10566186290872044 -826 266 .8830415270457296 -830 266 -.6362631338796167 -832 266 1.3715024822264814 -856 266 -.28582619514708263 -874 266 -.4943959068040939 -903 266 1.5386681927321832 -918 266 -.9922453825411198 -931 266 .73297054279149 -951 266 -.13040471873039883 -959 266 -.04892116414586478 -972 266 -.14042445790279662 -975 266 -.9360902691225423 -987 266 -2.4785544329594464 -991 266 -.1955201755668338 -992 266 -.31591767807198035 -15 267 -.9159357882345918 -29 267 .04048225512877771 -42 267 -.12914369408125456 -48 267 -.9758077532367527 -59 267 -.9154022267241474 -65 267 -1.477484702542928 -80 267 -.5062573212829423 -104 267 .34896046958456095 -117 267 .015760801225484983 -122 267 .8059381399200723 -138 267 -1.0029177957789734 -164 267 .28431474763594 -169 267 -.4530009627096987 -172 267 -.3389444759378434 -185 267 .6254736175336398 -188 267 -.4587237027299996 -207 267 -.3829196623572852 -214 267 .5663989826615174 -222 267 .015459248082595273 -251 267 1.8883940847565943 -285 267 -.41957297482180606 -290 267 .2707085761090434 -301 267 -1.6516397242185532 -304 267 .35917411886121414 -306 267 .5251421627156709 -313 267 -.3239285766071209 -317 267 -.8884093297764666 -341 267 .3012799215190914 -347 267 -.9429296070313942 -358 267 .43480536330059033 -373 267 1.1715315889933653 -387 267 .7853417162074446 -405 267 .20555537203378554 -408 267 -.10095283758860943 -410 267 .7394298836683733 -422 267 -.7179946789472615 -434 267 .13035927412414083 -436 267 -.8234511292044915 -449 267 1.0722750169884312 -477 267 .7622712322971792 -485 267 -.25333255055894016 -495 267 -.2659901195759935 -503 267 1.5872711938285349 -506 267 -.6494059347358604 -525 267 .12853031222291025 -529 267 -.43369940416068814 -545 267 .9046716858515651 -553 267 -.05156317905545106 -556 267 -.9913233874326991 -566 267 -.691714762105861 -573 267 -.04724690437964714 -593 267 .5222299583688133 -597 267 .028806658888499648 -598 267 -.7686165391528164 -615 267 .8148111401368434 -632 267 -.44156589291247805 -634 267 -.8397903806307258 -641 267 .5169062578538419 -644 267 -.7704000833627818 -688 267 -.2827048461481655 -717 267 -1.604176428040609 -747 267 1.0040485695008552 -750 267 .5932969764760169 -763 267 -.39668801592062175 -768 267 -.10057312124841872 -774 267 -.8736758741696586 -776 267 .8581025117449056 -779 267 .5051647219571938 -781 267 -.739341160674161 -783 267 1.1299970924216096 -803 267 .898464797966107 -810 267 -.6138080620054653 -822 267 .14363107097858374 -824 267 -.2778544499272729 -831 267 .813288267681086 -832 267 1.18396999387199 -834 267 -.3191568438959885 -845 267 -.48592801722365225 -848 267 -.3742031563244914 -860 267 .037512497889526694 -865 267 -.08740397368217012 -883 267 -.9691207760798304 -884 267 .2877094217671573 -917 267 -.8335598106415472 -918 267 -.35091972029145646 -924 267 -.021992490012611148 -934 267 .0856826339664721 -939 267 .13318545876067697 -941 267 -.339224333510593 -945 267 -1.3519291614511044 -946 267 -1.0809271085418826 -959 267 .22434128990571783 -968 267 -.0757053805298107 -989 267 -.47276864605935454 -1 268 .4013613698738542 -47 268 .6786418570918207 -60 268 .4177978644808095 -71 268 .5755940249559911 -80 268 -1.1134109299515558 -98 268 -.07911167274345751 -101 268 .4622030891710529 -113 268 -.9398046988576785 -118 268 .4814015755484174 -124 268 .15478814301841162 -125 268 .45343111239883294 -126 268 .12856876601713102 -127 268 -2.0321307687698797 -139 268 .051965140195108145 -145 268 -.3031183617306979 -155 268 -.48062847211229964 -169 268 1.1546183764124005 -187 268 .21337642613835478 -209 268 1.0880852447318257 -212 268 -.3962927905329887 -213 268 .9418590838255948 -220 268 -1.4601719291920292 -223 268 -.5358082723161386 -225 268 -1.1387787220654846 -233 268 .3307182968342756 -256 268 -.6300137581099213 -257 268 .62529669341239 -258 268 1.51430696835453 -275 268 -.6810240104958374 -298 268 1.0798654112096484 -312 268 .46245961922945705 -319 268 .7778763388510711 -326 268 .8615209551224499 -340 268 -.1111427490874257 -373 268 -.5731289137219326 -376 268 -.6355992983741486 -387 268 -.2288877766465462 -403 268 .6031474071570389 -407 268 -.9078358634438082 -410 268 .5191922503144214 -413 268 .45869248904822557 -416 268 -1.2910665074757297 -418 268 .7087879464851711 -420 268 -.9367562740207201 -450 268 -.5286451566854351 -468 268 .5662237131474176 -477 268 -.6172433740293155 -482 268 .26595840504094004 -499 268 .08913957472301708 -549 268 .8620382628170362 -562 268 1.1201156700585153 -565 268 .1710683908979025 -594 268 .14552015280112254 -596 268 .686361365242913 -599 268 -1.7686363477354183 -603 268 -.6444793778892243 -617 268 -1.215067552172138 -628 268 -.592525604615349 -636 268 .006714740139231859 -652 268 -1.394162999336018 -669 268 -.3170965442675308 -676 268 1.4502442903655826 -685 268 1.2124404466565513 -699 268 1.7456459054790021 -714 268 -.4524076051298814 -715 268 .005995437593202146 -725 268 -.40315537341153107 -726 268 1.6357386144260442 -737 268 1.0028084247068052 -756 268 -1.9505855906272356 -781 268 2.4472990714078176 -782 268 .19846569044881723 -811 268 -.9433281111463385 -812 268 -.00811366939075915 -821 268 -.050075308076860614 -825 268 -1.4127322266321136 -838 268 -.8447857993421288 -847 268 -.8094442156589507 -863 268 .06714922562190674 -865 268 -1.0311521359084488 -866 268 2.052250751589211 -892 268 -.19527706697285818 -922 268 -.9354619120318504 -932 268 .8406448107792277 -938 268 -1.6588895339652887 -958 268 -.46738233206139124 -959 268 2.048727717890994 -963 268 -1.629292086203023 -970 268 .618075004313868 -997 268 .019015533486600004 -3 269 .5481207313773792 -14 269 .5707538385900587 -16 269 -.8259854583376929 -34 269 -1.5028009219709215 -39 269 1.358161262566963 -59 269 -.0059200847914332305 -63 269 -.522110561720377 -64 269 -1.5915680632045057 -82 269 .55161618545729 -85 269 .5489712514283144 -91 269 -.2917401311568107 -114 269 -.6133097264825559 -143 269 .10731911211398926 -144 269 .5834813830136549 -146 269 .5614546962197159 -155 269 -1.328292831078629 -165 269 -.2552171735323676 -166 269 -1.5190202420592813 -169 269 -.3639021934851676 -170 269 -.6050560163449401 -172 269 -1.2483811339783288 -202 269 -.9225558666606128 -210 269 -.5804255601961152 -221 269 -.09048817029450681 -241 269 -.3388820462363791 -257 269 .816143605506854 -263 269 -.03102725216221812 -264 269 -.16098633239645882 -295 269 .7045417960567707 -302 269 1.697068711792733 -309 269 .25486540114269407 -318 269 -1.6357209178622265 -320 269 -.13760310827468622 -358 269 -1.3838934929689068 -369 269 1.0189108988288422 -383 269 .08460438925837858 -398 269 1.0808033504592585 -404 269 -.9657168682810158 -410 269 1.1430180186504753 -422 269 1.395654853843189 -428 269 -.6825238828774591 -430 269 .6325384688757382 -446 269 -.16157338957286202 -458 269 -.4906872703447127 -470 269 -.11012678461936838 -481 269 .044523894902463945 -486 269 -.0773530744739489 -499 269 -.14395723218548184 -519 269 -.1534669665910276 -526 269 -.2427386188098165 -531 269 .15960733828084156 -540 269 1.20629088225121 -542 269 .4274931628188332 -543 269 -.41560661882638306 -546 269 .8921068026717193 -548 269 .05670956784308043 -553 269 -.5465476645020684 -557 269 1.7276259120600603 -585 269 1.1113689443376897 -600 269 -.19936564969677428 -604 269 .7725506001751012 -636 269 .13070419859020577 -647 269 -.5583380556925558 -664 269 -.35908733394477044 -666 269 -1.2696124721943194 -670 269 -.3972358279655499 -685 269 -.6126676128545672 -698 269 .39314791796470844 -710 269 .11106324757572822 -723 269 -.7389213946770733 -725 269 .9305377672528111 -727 269 -1.2404824554288643 -728 269 -1.370399139464546 -733 269 -.9404823090772525 -736 269 -.5452726039719952 -746 269 -.29072221758303984 -748 269 -.15529669145113295 -754 269 .4507543394736507 -764 269 -1.4737491304438604 -769 269 -.7446359203732522 -774 269 .1553571666629936 -786 269 -.12914702401254624 -808 269 -.11570472895513317 -818 269 -1.0763098592817248 -830 269 -.30522346695171615 -833 269 .737647172709547 -838 269 -1.9976480667206973 -839 269 -.8017475486640246 -859 269 .9794965464721986 -868 269 1.0667573070516374 -869 269 -.7220472879495143 -875 269 -1.4982015892816023 -876 269 .08857153986470148 -882 269 .6166979143171062 -888 269 -.9157354853892142 -895 269 .6349875559809843 -897 269 .9040954674584123 -913 269 1.2835612928244677 -942 269 -.6235737730733175 -944 269 -.7342616628581786 -956 269 -.6485988814164355 -958 269 -1.5986450028589363 -965 269 .5065179033309528 -966 269 .46739161460381595 -978 269 .18515213134284686 -996 269 .2790073820346088 -998 269 1.2481715204605766 -1000 269 -.396059828392576 -2 270 .3625521790160112 -4 270 .7501856811430734 -15 270 .546694043667223 -24 270 -.0511103544054307 -28 270 -1.2944727534469302 -30 270 -1.3462637237283692 -52 270 2.3044967449808538 -68 270 -.6377814455354954 -76 270 -1.5861302898687535 -78 270 -.9197716897237473 -82 270 -.37177005787855366 -92 270 2.4850943915197368 -103 270 1.8425313860165669 -105 270 .4496835484904532 -114 270 .8923098114884991 -124 270 -.48134577332713907 -141 270 .9216310910766499 -144 270 -.5451775269256806 -157 270 -.37104045781465356 -158 270 .3271330299113777 -171 270 .4724059460030382 -221 270 1.5690818742808268 -222 270 -1.8356372208060723 -231 270 .6747910737220516 -239 270 -.8882953586833663 -243 270 .8269975193051393 -268 270 -.6959889918935469 -269 270 -1.1198052156631124 -285 270 .14840428005291162 -293 270 -.34032471146740434 -315 270 .488467503878518 -322 270 .20770872757387382 -324 270 .5917408823154171 -330 270 1.2377176336724647 -331 270 -1.0168571925459158 -343 270 -1.746903189651069 -344 270 1.5666338904079733 -353 270 .5718765446017884 -358 270 .8507257363664653 -361 270 .08896025565357008 -411 270 .7876414095832577 -417 270 .899819359468581 -443 270 1.5994808025918643 -461 270 .805554429885827 -479 270 -1.661382806429869 -482 270 -.8133811724611376 -488 270 .5918912791775016 -503 270 .9623841081376318 -517 270 .7712280742661447 -522 270 2.29793691086331 -547 270 -.6219283353519216 -550 270 1.9250918676492512 -557 270 -1.9496869259291383 -562 270 -.6005889835924049 -564 270 -.5647739469320874 -569 270 1.6931653272610423 -571 270 .016802178664748292 -584 270 .6461949972411687 -589 270 .3895653852426676 -592 270 -1.285672380120656 -601 270 -1.1590208411705942 -602 270 -.363661362319394 -614 270 -1.0132915847729818 -629 270 -1.3243836327951775 -651 270 -.22736007492567117 -668 270 .8335115521834439 -674 270 -.8635050468446087 -682 270 -.4303773761819681 -688 270 .6009672588498256 -718 270 -.6443248233319336 -740 270 -2.0778196177219446 -750 270 -.11700969515557413 -757 270 1.5855336170733316 -771 270 .013346546299004308 -785 270 -1.496129448783468 -787 270 -.3560693355345063 -788 270 .8476719318886512 -791 270 .2629455321406401 -806 270 .19874769800330752 -808 270 -1.159010772811557 -810 270 -1.0558697745653483 -814 270 -1.4542127399176685 -824 270 .4859456889600138 -860 270 -1.0324045819532928 -887 270 .2961865301336606 -910 270 -.6415504219196821 -926 270 2.7922682060757644 -938 270 -.11621559516005281 -951 270 .18736824305638072 -954 270 -2.427135199105714 -970 270 .29817049909763516 -973 270 1.8588892670477914 -982 270 .6789958710544364 -996 270 .42373992943966404 -3 271 1.6370663980156355 -10 271 -.07485075708864938 -16 271 -.003388953069717735 -23 271 .5765187160193147 -24 271 .4302937286125554 -38 271 -.15990491074952007 -55 271 1.5812657512547246 -59 271 -.11916854517762826 -76 271 .37491528908464533 -84 271 .36927306647044855 -93 271 -.9296787264172519 -105 271 -.3819828035311308 -115 271 .6066216559500899 -124 271 .740848249237299 -127 271 -.8393009171255935 -136 271 2.1376070813870087 -166 271 -.9246777953326784 -172 271 .5468427853068668 -181 271 .11738816334106533 -192 271 .684031474403259 -200 271 1.0205772917222815 -228 271 .3988057889841226 -245 271 -.6821268726715631 -246 271 -.18194715129484057 -268 271 1.5800799784122541 -273 271 .1373229957529679 -275 271 .299369022839908 -293 271 .9775338285830597 -294 271 .125324916460757 -295 271 1.1287090542028426 -322 271 -.8181529682887889 -329 271 1.9030270847016564 -337 271 -.4767720552273844 -357 271 -.622173405902626 -362 271 .4288697695379056 -363 271 .9238676902240914 -384 271 .302792994610707 -394 271 .588072746833601 -399 271 -.4964334268643648 -400 271 1.5545090079516841 -405 271 -.7054928713967177 -411 271 -.9217787553682161 -437 271 1.008098681014827 -462 271 -.3211978815321533 -468 271 -.09196432703757956 -475 271 .44581477136975767 -487 271 -1.1886742946007742 -491 271 .1776973432031943 -512 271 1.0410338278241495 -524 271 .26593021662786553 -531 271 .7411572084903686 -537 271 -.8183949026192324 -538 271 -.19082883408490386 -575 271 -.24199391250327015 -603 271 .6581147509127522 -613 271 -.04167834433768236 -614 271 .6041579408431912 -617 271 .404300035129426 -643 271 .27426172767725554 -644 271 -.3757313593967982 -648 271 -.4446570334255657 -655 271 -.2223176293734959 -658 271 .46965294727914986 -661 271 -.41682086331839663 -666 271 -.8381204869014858 -667 271 .7736580056248747 -670 271 -.3159307046921257 -676 271 -.28753874929751955 -679 271 -1.2575758299591158 -696 271 .7737866451047177 -727 271 -1.4086952978520593 -733 271 -.4685316597707019 -734 271 -1.3086664669488746 -752 271 -.3843328495185693 -755 271 .09334922977586088 -773 271 .8981469109716709 -779 271 1.1305492193014524 -793 271 -2.046943569735475 -796 271 -.3684969185757177 -797 271 -.2669679773069114 -814 271 .41301492819080426 -817 271 -1.0234340172719711 -836 271 -.5935429513488133 -849 271 .7482658869011142 -850 271 -.05763245201752612 -863 271 -.7845182895823929 -868 271 1.9558941521039848 -896 271 .5626981597277033 -909 271 .11604868614467996 -919 271 -.23504620028681872 -939 271 .40248868315284914 -946 271 -1.3926013974992197 -985 271 -.5715550340623867 -994 271 -1.2754473021256933 -15 272 -1.2192646078280507 -20 272 -.1902364257582179 -28 272 -.9020802435419494 -30 272 -1.7963313751510719 -34 272 -.0509445371613203 -35 272 -.09159522437454924 -38 272 -1.5625279452703722 -43 272 -.6480756664438414 -45 272 -2.3828302376966586 -67 272 1.4358586982405916 -79 272 -1.880912340762249 -81 272 1.6890704637589142 -99 272 1.006649779647104 -103 272 .02253622504913458 -105 272 .7638650099887593 -126 272 -1.2388104745999966 -132 272 .576272855017046 -139 272 1.3303904476465338 -143 272 -.23300244354678828 -151 272 .5481220468268789 -153 272 -2.0238636417964266 -179 272 -.8707058409568149 -180 272 -.01340861476081058 -199 272 -.7354711494272431 -227 272 -.7349421147213328 -232 272 .060174638628312446 -247 272 -2.2373297499920906 -250 272 -.8719092467206906 -251 272 .8817839884302163 -255 272 .6105298764402425 -258 272 .6795236142013474 -266 272 .26889879350819035 -271 272 -.006815682551631293 -275 272 -.8833733460689642 -278 272 .5097672252195304 -288 272 1.6186517891897503 -294 272 .619892341381309 -296 272 -2.779046532671679 -303 272 2.411210321152036 -306 272 1.2193964023981394 -315 272 1.5621279609374428 -325 272 -.6249400731012392 -329 272 .011130838944071065 -333 272 -.18548780955032504 -337 272 .8266479546316864 -338 272 .5051241322570282 -339 272 .8337181203157319 -342 272 -.12519696621445722 -348 272 .16807605317892577 -387 272 .5642519743956107 -397 272 -.8656840391266828 -403 272 .8331796590972756 -412 272 -1.0198122646301582 -413 272 1.5502866632659689 -420 272 .837751645453317 -439 272 1.3913697658530526 -451 272 -1.1544829503736658 -457 272 -.3604965732393946 -460 272 -.29033036800443107 -481 272 1.0280026093152104 -485 272 -.19285193959716007 -490 272 .2826190019573833 -491 272 .8288693985316793 -499 272 -.4291373356614372 -500 272 -1.3824944078084551 -504 272 .591154551047061 -517 272 -.5692949222889675 -529 272 -.11191947021605628 -542 272 .6827412616857794 -543 272 -.40974499843861545 -563 272 -.25426034883568727 -599 272 .3699821355619262 -602 272 .35042600087598874 -616 272 -1.721117117127564 -632 272 -1.5506807997390024 -638 272 .1953765821496215 -645 272 1.1810024194234776 -652 272 -.3441993970838818 -686 272 .7486603378256472 -689 272 -2.2264209897643856 -702 272 1.1617383574493847 -718 272 2.5640088595848605 -736 272 -1.6644772047160297 -752 272 -.3418515773658104 -770 272 -3.207677609672266 -776 272 .5390609257267647 -810 272 -2.2342797004612254 -814 272 -.19600249203738776 -839 272 -.278732139719457 -841 272 -1.1386265585570354 -853 272 -.3464120061716317 -860 272 -.20739429585573566 -865 272 -.732856352348781 -867 272 -2.6139518379912783 -874 272 -1.4169532259274689 -877 272 -.8532488984134863 -882 272 1.1769996564815066 -886 272 1.8160933761160354 -887 272 1.107173751490197 -893 272 -1.2365206370096107 -901 272 .9887071966372161 -912 272 -2.772442216149238 -939 272 .15940018408826356 -953 272 -.08912651536503668 -961 272 -1.0793037887820234 -981 272 .42898817615002416 -990 272 .45318850510921505 -17 273 .08195709946788693 -45 273 -.5260593005508418 -50 273 1.2422108962860987 -62 273 -.07994659169731703 -68 273 -.7357600076503754 -70 273 -.04708035948837962 -83 273 .149789026490682 -87 273 -.01033823328813734 -88 273 -.3931582738398186 -121 273 -.024857496608888877 -137 273 .5557329821280714 -138 273 -.6560645079593612 -140 273 .30538326629553875 -153 273 -.3539324078666958 -168 273 -.3263105651758661 -169 273 -.09362794757046872 -171 273 .12816167754658392 -195 273 .6855940841539987 -199 273 -.3773898354748284 -213 273 -.2294241661480521 -219 273 -.2325102589093583 -230 273 -.8240769393847458 -241 273 -1.1380686191935754 -243 273 .1459883733551377 -244 273 .08677274731557494 -253 273 .36881960412852777 -260 273 -.08908207192971049 -268 273 1.5262593470751629 -277 273 -1.4019425296841184 -278 273 .5625842522832765 -289 273 .38734404044211224 -290 273 -.47562630024847774 -294 273 -.08992525569592612 -298 273 .6907498468896205 -307 273 .7766883016427979 -308 273 -.5277339803586835 -309 273 1.1138506259706242 -317 273 -.19070181256679633 -329 273 1.1770689540021684 -334 273 -.35003207620706606 -347 273 .55543025919486 -360 273 -1.1515036009388333 -371 273 -.2267536352324373 -378 273 -1.0706231268314526 -400 273 -.2208346417013605 -429 273 .930717882290004 -469 273 -.33526247656956765 -475 273 .05005091708549283 -478 273 1.2481040984083096 -479 273 .2178871605571323 -504 273 -.9565389040608839 -529 273 .2482055156709325 -534 273 -1.4397809747471473 -540 273 .3064355239489611 -544 273 -.2026691977559672 -548 273 -1.5006275823182382 -557 273 .23066610883724006 -590 273 .4506930141338262 -594 273 -.08051105034343475 -625 273 .8931115551000958 -629 273 .7901323757948017 -630 273 -.17311053054318837 -631 273 .5193723062380542 -642 273 -.038777169500980896 -647 273 .4212969108011679 -659 273 -.9939486809821533 -667 273 .14169294438344265 -673 273 -.06446783811162729 -680 273 -1.2292935252339592 -696 273 -.5920461014405812 -708 273 .13023074908978133 -711 273 1.0720356725927567 -743 273 .861546067119002 -745 273 .24278816417999094 -756 273 .3252796618866516 -770 273 -1.2728983751160101 -775 273 .23150659846436886 -778 273 .2315819840424801 -780 273 -.18656630206009828 -782 273 -.10077162081540114 -797 273 -.651187541791171 -805 273 .07160819976600181 -813 273 -1.2993354011408078 -825 273 -.2579839551669166 -828 273 -1.1692945300733635 -837 273 1.0454565285303092 -841 273 -.4032030932120954 -844 273 -.898620963639144 -860 273 -.17400662040623782 -875 273 -.619391982394336 -910 273 .32406102393348024 -947 273 1.3452823198083321 -960 273 .4904579697525928 -961 273 -.2902035333697928 -971 273 .30700965104242656 -2 274 -.3205259364234702 -9 274 -1.8267230183931564 -14 274 1.0942387592941163 -25 274 1.267019284133124 -26 274 .6876945148506629 -33 274 -1.1550171893095336 -44 274 -.22621213792594136 -46 274 1.7374135941097166 -50 274 -.5752718832165565 -51 274 .8237568014269292 -65 274 1.0830361821753602 -93 274 -.2110592953449943 -160 274 -.29610755152309914 -172 274 -.4794957365890521 -192 274 .047320920720508614 -218 274 .32102876891346604 -234 274 .3579605353104866 -235 274 .2886583934937734 -246 274 -.02343095968475581 -251 274 -1.1054980563792758 -254 274 -1.2297361278772296 -265 274 .9843470445799115 -270 274 .34875973969715085 -290 274 -.619339339236585 -295 274 -.7502539303980654 -301 274 1.7172944795283673 -316 274 -.03802220875826995 -320 274 -1.335278172996957 -321 274 1.623504416586993 -326 274 -.5456714211189928 -327 274 -.7247301746932991 -332 274 -1.1081490514831154 -345 274 .34219674299464914 -357 274 -.3735851349372263 -370 274 -.11355531133236954 -394 274 1.1223896967547138 -414 274 .4982894207393304 -415 274 1.2047548815846083 -436 274 .8675042342002093 -441 274 -.01069129269150848 -462 274 .6549983467378122 -474 274 .5819734778941417 -475 274 .5672826350801967 -492 274 .6918795049651807 -493 274 -1.2597276039010206 -507 274 -.4142761701076332 -512 274 .1805800793644597 -518 274 1.3701200534037619 -525 274 -1.0422785116072064 -526 274 -.36563478969956265 -541 274 .7798732566870691 -551 274 2.1890098330528023 -577 274 -1.548208253185414 -584 274 -.9595727305623547 -596 274 -.07863160292356969 -603 274 .8246251466013763 -604 274 -.09927920982978178 -618 274 -.13803564425965897 -619 274 .03848021490780899 -624 274 .8472797979680785 -629 274 -.1110799765663514 -641 274 -1.2849804090061863 -649 274 .6038699108159006 -650 274 -.5327538362841557 -669 274 .719648892289006 -685 274 1.0830590872866237 -726 274 -1.519424176443501 -744 274 1.9056986876892759 -748 274 .14426246031110776 -758 274 -1.4123726287588987 -767 274 -.8274557236489218 -770 274 1.054847457592938 -792 274 -.42460181684008225 -793 274 -.4615510186528504 -808 274 -1.6955250229350467 -813 274 -.061198177104233406 -820 274 .15247403392137615 -823 274 1.9567831129004898 -848 274 -.4736626584701684 -870 274 1.4893460262670752 -875 274 1.1367299477247683 -883 274 .5689622374015295 -913 274 1.0135289840009936 -927 274 .22018497056881725 -930 274 .5030724193239905 -934 274 -.1727200749702597 -937 274 -.42901179751366486 -943 274 2.189677363153934 -946 274 .3808802787345301 -950 274 .15517418903642435 -960 274 -.3511444974981056 -962 274 .41727522185702964 -986 274 -.8018339912016789 -7 275 .5238145672461809 -11 275 -.5479218267547651 -26 275 -.9557927518472742 -41 275 -.2669084949208953 -44 275 -.48985814313830117 -54 275 -.021860996084087925 -55 275 .862455585908866 -61 275 -.39083994799997734 -62 275 -1.3416241984415362 -72 275 -.3836372330014561 -99 275 .13781003039166523 -103 275 -.20410243005413276 -109 275 -.5731629745663408 -110 275 .23238523852405468 -137 275 -1.2521622164615656 -147 275 -.4034317518096554 -160 275 -2.2452890382622175 -178 275 .04909653796447831 -183 275 2.0483446804838463 -185 275 -.6269935959530621 -187 275 3.6483085494568734 -193 275 .4842276621494749 -202 275 .13953667020761518 -203 275 3.1500651207813646e-5 -214 275 -.5124848825122903 -221 275 .7112319478224535 -239 275 -.7601545155127074 -247 275 .7425789362513688 -262 275 1.302497840266696 -266 275 2.2313119253801355 -271 275 -.1758963848837692 -273 275 1.45678268944422 -288 275 -.20100555341357929 -301 275 1.8682284953852728 -305 275 -.4717537334799488 -327 275 .4847427592529565 -334 275 .8874577444850185 -339 275 -.9266279690631072 -340 275 .8430146670554188 -347 275 1.356592323963155 -354 275 -.03717225417013641 -355 275 -.9724977208949729 -379 275 -.49606347519840255 -382 275 .5685283689601657 -399 275 .2889276169515407 -405 275 -.3473298023690541 -408 275 1.177240529144243 -410 275 -1.058691023510058 -416 275 -.15809972177622825 -429 275 .3462008943413362 -435 275 1.3442512987914124 -452 275 1.2931066303621161 -465 275 -.3981832359465441 -485 275 .4565146999912057 -499 275 .4546142056579964 -505 275 2.180975682822531 -507 275 .8477084650834477 -513 275 -.5256464602618879 -536 275 -1.5695315664567797 -552 275 .22498636588715865 -555 275 .2178843469910574 -559 275 .5385786944789083 -582 275 .04497970440771608 -584 275 .20926932406307797 -598 275 1.8059326938867981 -605 275 .22074888811597884 -610 275 -2.2064997885025956 -622 275 .06818588540903658 -651 275 1.0657953443276031 -680 275 .5300442338518669 -705 275 -.9116448816414686 -717 275 .9124031780730124 -738 275 .5806142992098569 -747 275 -.16753327624719788 -753 275 .028719096036037006 -754 275 .4837813446817003 -808 275 1.2046988855454206 -827 275 -.718020199142897 -832 275 -.6143202363280397 -839 275 .9102633761701718 -856 275 -.5173727012365783 -883 275 1.2842871159645581 -890 275 -.6271721243579087 -893 275 -.262271151187721 -901 275 .06739382811281364 -904 275 -.6134776498614503 -907 275 -2.1135524560753973 -920 275 -1.3371907221280963 -921 275 .9466326718286063 -938 275 -1.8698533782751736 -965 275 -.26284428384092695 -979 275 -.20009921122299362 -980 275 .5320003801272427 -987 275 2.340440894618686 -990 275 -1.219742466582956 -11 276 -2.792386154895413 -25 276 -.08137642747033999 -30 276 -.43206697809424177 -35 276 -1.397645063262906 -44 276 -1.7349445230755658 -52 276 -1.1926849083522661 -60 276 1.6639894592832063 -65 276 2.344187084552757 -70 276 .1079286600922614 -77 276 .9783293440745071 -78 276 .49737941977913563 -102 276 -.051276282624913475 -110 276 1.9466050630017961 -114 276 -.24467981337555403 -125 276 .7560001217982074 -169 276 .04675256496571456 -177 276 2.811493683935693 -196 276 -.14945979573455456 -218 276 -.7191837951463615 -228 276 1.0171260124097425 -238 276 1.351154422076671 -239 276 -.9459589043060745 -251 276 -.4496715659919398 -266 276 1.2087193413739374 -275 276 -1.276661313740096 -284 276 .6266517298426306 -297 276 -.9062085300622883 -329 276 2.473020485193695 -340 276 -.42323192925714836 -342 276 .4514532723624438 -343 276 .3095223564200098 -350 276 .0028016562935397546 -354 276 -1.9946193898665041 -357 276 -.5324146064745932 -362 276 .7475782482528661 -365 276 .6153495190052486 -377 276 -.3204492590366129 -416 276 -.3677545875452718 -448 276 .010586558703555918 -470 276 1.2541637640065455 -477 276 1.8096140145323427 -486 276 -1.5043590314737536 -488 276 -.09208856179936556 -492 276 -1.6633526196101192 -530 276 1.0786803663498823 -548 276 -1.3269728791137125 -555 276 -.3322217270552906 -558 276 .33047562687939264 -559 276 1.866427003447464 -561 276 .41935678626242673 -581 276 .1258004062914131 -586 276 .8394727608789586 -602 276 .11036153708835485 -603 276 -2.4655406568168767 -614 276 .001788514694800944 -621 276 1.2252476087049224 -626 276 -.4059663412373899 -648 276 .3947285573324987 -661 276 2.153481839970126 -666 276 -.25313294723183477 -668 276 .18560014968858657 -674 276 .36582761620656296 -679 276 -1.6661781487666383 -685 276 -.03851823397361358 -695 276 .04508930556436494 -697 276 -.6817351158285821 -698 276 -.5720094376458975 -702 276 .11399009739516455 -703 276 -.6533038587366017 -705 276 .11045838514067982 -712 276 -.5896948127364094 -716 276 -1.2458801494420104 -726 276 -1.248505003224113 -731 276 .23748261013788463 -734 276 -1.159754475563033 -742 276 -.12490163710297102 -792 276 -1.529348184298234 -829 276 .7216056591065344 -839 276 -.09062981040286278 -845 276 -1.3021818353061936 -849 276 2.676001636612099 -861 276 .4471413129580679 -874 276 -.3199767834848801 -884 276 -1.704556986029782 -895 276 .7295052327191354 -897 276 .058623110563052666 -909 276 .21030747274888167 -923 276 .8899703631234099 -926 276 -1.6246430643886336 -934 276 -.06495454759289881 -958 276 -1.3898844724084842 -978 276 .5169643691538807 -979 276 -.15464689512796037 -982 276 -.06242297800708707 -988 276 .786782099739265 -997 276 -.565207365323349 -7 277 .5665832896826137 -14 277 -2.031370848854014 -16 277 -.8314395233319629 -23 277 .7691823481337824 -25 277 -2.7387135899973454 -29 277 -1.4565381412383942 -38 277 -1.661383700909924 -54 277 -.12935587811924537 -63 277 .627703094402188 -67 277 .7332635860629209 -106 277 1.3586624317229725 -124 277 -.2928779012262882 -128 277 .5004530155868172 -130 277 .2223600936407338 -138 277 -.17063996233622813 -139 277 .266296154528634 -168 277 -.04071610890995041 -186 277 -1.4027465050414198 -196 277 1.053736698199457 -213 277 -.6323361171227291 -236 277 .7068425578242099 -238 277 -1.32921047177388 -247 277 -.5076517501894763 -255 277 -.22455529420550813 -259 277 -.5853245784020575 -280 277 .6716536580352229 -297 277 .9613373162853247 -301 277 1.7869555226108746 -329 277 -1.3284811545956487 -331 277 .7755243227144464 -332 277 -.14942735190706768 -335 277 -.959775309683928 -337 277 -.10546437601742886 -364 277 -1.7366961485531356 -365 277 -.027517373109960254 -366 277 -.7582034083423344 -368 277 2.9101777877228687 -370 277 .8693525032308885 -408 277 -1.842832463538735 -426 277 -.17818184107804222 -431 277 -1.9129737820314767 -443 277 1.2386879995198254 -491 277 -.8865095647691099 -506 277 1.3710570484484355 -508 277 .6746179225289043 -548 277 -2.0734813799823284 -552 277 .10041765117978176 -560 277 1.261946959825212 -564 277 .24266061445056328 -567 277 -.016149695221483296 -572 277 .8778595393760774 -574 277 .2739531052624845 -593 277 .4198877277132791 -604 277 .8572334429635347 -619 277 1.5653345518472839 -632 277 -.04781800440114439 -633 277 -.10542914467403115 -639 277 -1.4539247802116892 -655 277 -.09024207536043558 -662 277 .021671746316646374 -664 277 .6293940093078344 -667 277 -.7405885892360602 -680 277 .8136904870131739 -689 277 -.753929462219609 -694 277 1.2935295300087002 -713 277 1.603327360365118 -738 277 -.2509513228325239 -787 277 -.2595877026259733 -796 277 .007769060861143484 -805 277 -2.0599264501812242 -810 277 -.8783951338190806 -811 277 -1.1576712983601796 -812 277 -.821386103338074 -814 277 1.32407014200033 -817 277 1.6593854221134214 -821 277 .2884317826756378 -824 277 1.0936044187530523 -827 277 -1.0131091655649678 -848 277 -1.8178681800579348 -850 277 .596413996158376 -862 277 .21897018906481508 -864 277 -1.1046586890344994 -866 277 3.1724108078628914 -873 277 1.7033373706654582 -875 277 -.7267645985404225 -877 277 1.670736733382543 -881 277 -.9808259691633714 -887 277 -1.5451792918132417 -890 277 -1.2538080589014846 -893 277 .0011178269345107628 -905 277 -1.2359061660741322 -912 277 1.5230401661532833 -915 277 .27968246275228636 -918 277 -.4946976118910119 -938 277 -.37177585088234444 -944 277 -.0472990754452022 -961 277 -.2848628193308665 -976 277 -2.341001440079245 -979 277 .8353604990956085 -983 277 -.6133279838930046 -984 277 -.646302341785289 -5 278 -.260079746235511 -11 278 -.047174277271420983 -16 278 -1.4816177093520533 -17 278 -1.5065953703340045 -24 278 1.4864794405342856 -27 278 .2660409764417872 -36 278 -2.016783571234747 -51 278 1.1866678320675121 -97 278 -2.6482715512962294 -98 278 1.5259054078555208 -99 278 .8532928715917596 -123 278 -1.1200246169423558 -139 278 1.7141230182172407 -153 278 .6981221033088758 -167 278 .1392006303408039 -210 278 1.2568501828061334 -223 278 1.272213262073504 -226 278 -1.6310224660621824 -272 278 -.5863820641230761 -274 278 2.0979887167056654 -284 278 -.5520051804646889 -291 278 -.2134932139778655 -298 278 -.28614616149978495 -301 278 1.257032377713498 -311 278 .3697755414851817 -320 278 -2.2455364103767175 -325 278 .5308392895596654 -328 278 -.4362506925993561 -354 278 -.38278523768509487 -356 278 .050331044911545414 -375 278 -1.2575996413233717 -388 278 -.32498047744622555 -395 278 -.04350433764720103 -407 278 .10132607451449602 -410 278 .22137814652368346 -418 278 .05608423090910941 -421 278 1.8846673821760036 -427 278 -1.098275853641479 -428 278 -1.9030999070099894 -434 278 -.17488099201358087 -447 278 -.491160921425532 -469 278 .35661575187809297 -470 278 -.972878759471297 -474 278 .29587142982523307 -478 278 -1.9844255061689269 -483 278 .08376224534165566 -491 278 .5634598634529133 -492 278 .487289414923515 -499 278 -.9487133951608782 -514 278 1.9048932556580116 -523 278 .07291924439595661 -527 278 1.1394035079827336 -530 278 1.444657942873307 -531 278 1.6334163374471022 -537 278 1.6314368272987712 -538 278 -.8408834894273369 -563 278 .6479377217849529 -564 278 .5159961887663675 -579 278 -.07698044495521288 -616 278 .8928233307504264 -627 278 -1.2711665511806012 -634 278 1.413159261623586 -635 278 .678714897406449 -648 278 -.5299229687696263 -650 278 .32545806257423837 -668 278 -.22985412982316958 -678 278 1.568341149965156 -686 278 .3417670269251056 -691 278 -.4838275857223758 -708 278 .22337631588828 -717 278 1.8599060300242285 -729 278 .7067329343080904 -753 278 .2536563251576149 -755 278 -.16101238173997834 -767 278 2.0459200164638953 -773 278 -.07708651739264595 -781 278 -2.1642837338710628 -796 278 .9570845274099261 -800 278 -.82869378417562 -811 278 1.809324605154442 -816 278 1.9171563385676509 -823 278 1.5732661416667615 -832 278 .3015321157982712 -838 278 -1.072788959831387 -840 278 1.703013234966348 -842 278 .5894439944074766 -844 278 .08923744911878141 -852 278 -.676702222336607 -858 278 .8304651823624212 -864 278 -.6280011772995989 -865 278 1.0441007287686275 -870 278 1.2478560294103487 -878 278 -2.3615287743046154 -891 278 2.0466830534597116 -901 278 -2.265591919797928 -910 278 -.03045323546654309 -916 278 -.051116455131072006 -917 278 .999849374841459 -922 278 .9275035568837209 -923 278 .312659078717068 -941 278 .48177309297712884 -944 278 -.9431800130605301 -952 278 -.8812797708317053 -956 278 -1.0843335489847776 -961 278 1.8312985432555742 -980 278 -1.1716887085749643 -995 278 -1.1900629425479914 -3 279 -.9059189198839116 -12 279 .7893936401980318 -41 279 -1.6778930983966356 -49 279 -.41326175455622316 -61 279 1.062170429011705 -66 279 -1.429955443879252 -79 279 1.465357940032274 -95 279 -.11213614872695202 -97 279 .7173702282280456 -99 279 -.31517395767489675 -115 279 -.9210856953290052 -116 279 -.28626879494943547 -120 279 .1842609422077262 -122 279 -.598427452440184 -128 279 -.5125177040017315 -130 279 -1.8364875788790964 -153 279 -.9500607122547273 -155 279 .037556526624204944 -164 279 1.4592781123095502 -201 279 -1.149474297511864 -203 279 -.43040511331249154 -211 279 .6252633952599894 -221 279 1.3143469372658827 -236 279 .33146737604888993 -241 279 .5777249099679693 -251 279 -.5803983697647581 -261 279 1.5199003703206704 -264 279 .5115822291356075 -268 279 -.6201332211925913 -271 279 -.0718429906419486 -272 279 1.4901223492791118 -275 279 -.844681630919912 -280 279 -1.0161383853085806 -285 279 .3232290945857282 -304 279 -.275005889219223 -310 279 -.7139419642353992 -313 279 .42000101193800016 -314 279 -1.2801006924468585 -335 279 -.7778488604703504 -341 279 .5952802883481014 -349 279 -.44291166960243755 -355 279 -1.103702128565351 -375 279 1.8960862364920497 -377 279 -.9623977190715355 -392 279 -.8191813753514042 -435 279 -.962778779092112 -436 279 .024207362201625726 -452 279 -.9159946920068476 -456 279 -1.0008100281752061 -476 279 .6309021874661593 -499 279 .04801513628321665 -510 279 1.1824811397364057 -533 279 .15540161875990469 -544 279 .252728983199092 -550 279 .12713463225685245 -551 279 -1.1395607028120158 -554 279 -.006528573419112496 -556 279 .5094527233682328 -564 279 .6082728546104998 -567 279 -.12523590803284265 -587 279 -.8606676680539028 -591 279 -.5117234381207681 -594 279 .41776794325956346 -602 279 1.1220744346719158 -613 279 .28099999456261004 -615 279 -.03777993774099733 -618 279 -.09797510905335885 -621 279 -.2930855069641246 -623 279 -.641049144717361 -633 279 -.9107372204286144 -634 279 -.827328058127025 -643 279 .7901800671420146 -648 279 .9243628202809443 -651 279 -.39434555232103957 -656 279 .7036516042576508 -658 279 -.060409736981163656 -659 279 .5509377203490534 -684 279 -1.2065702480413334 -703 279 .060982425884692326 -705 279 .48884499768447276 -712 279 .12140319467096991 -720 279 .2184114255252625 -749 279 .8617982152253095 -757 279 -.5764341995449002 -763 279 .5072708978664964 -767 279 1.6408140134110252 -788 279 -.8736424843977674 -797 279 -.015298034934271468 -798 279 .526375159105872 -809 279 -.3468722918272081 -815 279 -.011316222922004515 -841 279 -.8767855734159697 -845 279 -.19354441780136478 -852 279 1.9719965052190473 -854 279 -.3523335524905582 -861 279 -1.364539233605144 -878 279 .14002031249564414 -884 279 -.1705694019898198 -887 279 -.036795733455177074 -898 279 1.5226953133779701 -908 279 .32615489721393387 -918 279 -1.0979960245825047 -933 279 .3779018736252868 -940 279 .6054683674483591 -952 279 .27855260399609594 -958 279 .9341744767829065 -970 279 1.8388195786322885 -973 279 .10838489830035641 -979 279 -.6344305883642191 -982 279 .1292455302500487 -992 279 .4584068547669002 -997 279 1.0073484513035202 -4 280 1.5427603583827199 -7 280 .6322683562788479 -12 280 .04571765628561133 -23 280 -.46187326005302287 -38 280 .7791097077275522 -59 280 .10575532883367318 -63 280 .6426139683813227 -75 280 .5212803298149451 -76 280 -1.2404966847118772 -77 280 .7300963842929729 -81 280 -1.6670450109616688 -83 280 -.5757663782642403 -85 280 -1.3111623844943594 -87 280 -1.4530605384692497 -88 280 -.4682079727214789 -93 280 .3905971456050257 -97 280 .4141902183619479 -118 280 -.18968905940298725 -122 280 -1.5233750602606833 -143 280 1.4768635991234509 -148 280 -.2661189373884998 -162 280 -2.173867948484207 -197 280 -3.028709059033503 -204 280 1.7756428048693036 -212 280 .6860279961474359 -238 280 -1.7282776926430024 -240 280 -.8686237646173083 -245 280 .533084086368473 -253 280 -.9934718883069223 -280 280 .9444506422620739 -282 280 .13003402309029227 -294 280 1.190819594527629 -308 280 2.300103794655214 -317 280 -.8501790199482941 -329 280 -3.8023297306175 -338 280 .8476121464848164 -342 280 -1.061808219053472 -363 280 -2.3411667669319844 -364 280 -1.3164274026759204 -393 280 .8722366331078547 -410 280 -.4947783503804717 -412 280 -.4862836211426329 -439 280 -.46461747993578373 -441 280 1.0675824451998057 -447 280 1.1475527069662694 -458 280 -1.5196086322546656 -461 280 1.0515489656225356 -475 280 -.9435572476730659 -504 280 2.1873857306191193 -508 280 1.8452066756556287 -511 280 1.1393453722679494 -549 280 -2.3029963647455087 -553 280 -.6089744868788793 -562 280 .7247360657989912 -575 280 -1.537632377610418 -586 280 .7791006820525408 -598 280 .5284877151049265 -622 280 1.2773912583539895 -670 280 -.9621479009074365 -671 280 .21453964889435542 -672 280 -.7462840429421093 -708 280 .0663566443368662 -758 280 -1.3093529091814875 -766 280 -.90365922846026 -792 280 1.4540218405299743 -793 280 .5123725903338923 -806 280 -.5268308002929845 -807 280 -.9358735395458024 -817 280 .8603205404528308 -836 280 -.48780067493941087 -844 280 -.8919076824995475 -862 280 2.1489551336480073 -880 280 -1.542862772242596 -883 280 -.7260341015404431 -918 280 -.25887955402749296 -930 280 .42852540894578234 -932 280 .609887374879027 -941 280 1.3692907587501024 -942 280 -1.404188809804432 -945 280 -.917495707003806 -949 280 .28469667713078817 -953 280 -.8342415104264203 -977 280 -.8765116342401231 -984 280 3.1943752449053786 -996 280 -.3937888824016278 -999 280 .46852521233325967 -1000 280 .11930837867084008 -6 281 -.512811072637736 -17 281 -.7755892045522432 -22 281 -.40170937301507037 -30 281 .01234139137128066 -39 281 .022792845073719994 -45 281 .327930953100658 -95 281 1.5776653234206566 -101 281 1.4680993912410112 -107 281 -.2851625458579014 -118 281 .7428604412131299 -122 281 1.6710646505449325 -136 281 .6181817087340613 -144 281 1.2746068744462753 -155 281 .46748409195755436 -159 281 .3337634748802188 -175 281 -2.1109039563184755 -178 281 -.7715672764722417 -180 281 -.7298188630034832 -187 281 -1.8576045496695355 -196 281 -.05351348792271003 -208 281 -1.4064663894118337 -210 281 1.3870414673621854 -215 281 .5223246145158171 -216 281 .7841959192121583 -220 281 .4218522212069544 -239 281 .454437635194124 -261 281 -.632377065005565 -263 281 1.7247127606185855 -286 281 .38476189922631693 -310 281 .0862310679935937 -315 281 1.2805624846289085 -353 281 -.4380842124021555 -377 281 .8755541543942531 -393 281 -.8380997642704976 -395 281 -.9017566022811502 -397 281 -.5607360730955079 -402 281 -1.1482630704637264 -408 281 .03713110544858855 -420 281 .7446690962700683 -444 281 -.04504948597330782 -446 281 .18469715634233766 -450 281 2.337479012270063 -464 281 3.3542485458416826 -477 281 1.3428433129097062 -498 281 -1.284965476911701 -502 281 .46258350380194563 -505 281 -1.9896228540414422 -508 281 -.1374501254270888 -513 281 1.2467075060328219 -516 281 -.7802319290246384 -534 281 -.7847828068717428 -536 281 .04324186345706971 -540 281 .2361638540752145 -549 281 .5808904163114964 -556 281 -.7528422098391301 -564 281 1.5367726582188173 -599 281 -.03880546104694568 -618 281 1.203012138726172 -625 281 -1.1557036499489932 -633 281 .4737845010554065 -634 281 -1.6925817566587753 -656 281 -1.7873439874693413 -666 281 -.4710952613200743 -682 281 1.5158277382815284 -697 281 .8775771807102755 -719 281 .18106430045434352 -721 281 -.7051481738396855 -722 281 1.6494829182320485 -723 281 2.3511579376861085 -726 281 .3372576235251078 -729 281 -.12160464667983674 -735 281 .8305940570317359 -738 281 .34993995767402575 -739 281 -.524205623355573 -745 281 -.8031986382860719 -752 281 .3244828138384727 -756 281 .996557623460131 -765 281 -1.286117117751748 -779 281 -.4245763006213569 -787 281 1.2556380652068027 -798 281 -.41651292510915644 -803 281 -.048824227310718435 -821 281 -.5744580584926793 -835 281 -1.2099294892653205 -864 281 .3066571194687004 -870 281 .9450213560262631 -871 281 -1.0391201087883053 -874 281 -1.290614240656821 -875 281 -.27747625404014237 -894 281 -.9291649968097977 -895 281 -2.2974802105999768 -904 281 .6164635512610437 -905 281 -1.640158530117192 -951 281 -1.0342491940592768 -961 281 .45129326336054304 -970 281 -.8749135050815391 -986 281 -1.2672613165496864 -990 281 1.1235410414704374 -2 282 .9130075125259899 -24 282 -.26866805461980037 -44 282 .9821046489613942 -51 282 -.640865662121288 -71 282 1.0928443396735459 -72 282 -1.8673714252004818 -86 282 .3285246776855042 -89 282 -.0336317916693168 -93 282 -.06727598128998663 -101 282 1.2555878204471669 -103 282 -2.8527062418773634 -141 282 -.8736153290515585 -162 282 -.17716277161122243 -184 282 -.9064574730053608 -196 282 -2.2975827602722636 -221 282 -3.1597039930309485 -223 282 .6634104227797719 -241 282 .44170435939457375 -242 282 -.4895023321629806 -247 282 .25673539174606597 -250 282 .0076728393285589724 -282 282 -1.1731540976731445 -294 282 .9318513486770313 -296 282 .6688975434713647 -298 282 -1.961405354897826 -316 282 -1.4841780239509939 -380 282 -.6187141210114092 -381 282 -.7521233935090668 -390 282 -.16940522481740436 -398 282 -.07017710284299142 -399 282 .3595748403749518 -407 282 -.8046581943617145 -416 282 .6135235536026747 -433 282 .025646893709371107 -470 282 .6447215219361385 -475 282 .1583969574901471 -490 282 .0739997494777157 -495 282 .5087825938599148 -519 282 .8597094759270376 -535 282 -1.1573487846988908 -540 282 -.3474353574314588 -546 282 .37815516361658896 -548 282 -.9044354711057225 -552 282 -.42045939959106393 -554 282 -.8242039107190512 -560 282 -1.248180400122823 -562 282 -.2389397046668667 -577 282 -.3222372251753175 -580 282 .8251492343646093 -587 282 1.5433942845440267 -590 282 -.07209760253494603 -593 282 -1.0493312744590537 -596 282 -.19426043901154408 -615 282 1.3649232335484345 -626 282 -.6071345154617717 -651 282 -.4708663336961255 -672 282 .7710969057147847 -673 282 -.4450474906666186 -700 282 .4311079760967496 -701 282 -1.0319289537413892 -707 282 1.7432939985484686 -720 282 -.2799336233069831 -725 282 .5523891652326448 -746 282 .7762848104055629 -761 282 1.094040889367535 -764 282 -.7992207128770393 -765 282 1.1038355704528722 -766 282 2.41145688971837 -768 282 -1.637157771777354 -793 282 -2.4897630872040986 -813 282 -2.1315448060570765 -817 282 -1.1433672958008456 -831 282 1.61451456018094 -846 282 1.5574640118340237 -862 282 -1.3611442327239034 -867 282 .44405182168084584 -881 282 -.6536586241559991 -883 282 .6158139642290599 -886 282 1.0229300992122639 -887 282 1.2488331519045313 -890 282 1.1862985374749278 -904 282 1.2483072997747586 -906 282 -.8568418023295636 -907 282 .740121227994964 -909 282 .6767785698519053 -916 282 .5900569488785249 -921 282 -1.4099236857971411 -922 282 -.7084435388944679 -927 282 -1.6866387067053732 -943 282 -.6891520389406911 -951 282 .001200316053926953 -962 282 .3849360439189299 -965 282 -.14656198081135008 -970 282 .6950310099331811 -983 282 .9776997701949234 -7 283 -.2853630553415361 -18 283 .49191697085905095 -31 283 1.0959873500708253 -32 283 -.6537660830304765 -43 283 .8515585453032279 -55 283 .06328897123102827 -62 283 .32153198569048635 -65 283 -.04727207851642902 -82 283 .8532744818685222 -97 283 -1.1554763778044481 -116 283 -.05759465223725731 -129 283 -.12059870574358242 -147 283 1.5784092497613196 -167 283 -.6483468494258604 -218 283 -.5015590497295601 -238 283 -.8212542878684742 -239 283 -.3843113335904707 -272 283 .7433614970505497 -273 283 -.4422961276940942 -277 283 -.43297951087741876 -305 283 -.06635163911943123 -311 283 .7608499992596272 -315 283 -.934308538997742 -321 283 .5663080423421029 -324 283 -.8072251870950047 -352 283 -1.2528746636725394 -355 283 -.9676081903440377 -356 283 -.4012243354085454 -364 283 -1.1977582115767857 -370 283 .7303154795174231 -376 283 -1.8111103491783087 -391 283 .1229784780750021 -392 283 -.17124655942151554 -423 283 -.35791977814030046 -426 283 1.1299991124921447 -454 283 .25980085649033746 -466 283 .3751394965561666 -473 283 -1.7220640416081157 -476 283 1.9519031140738565 -497 283 .2738656342851556 -498 283 -.6638798640177284 -507 283 .11007518453912643 -509 283 -.3594680444466767 -513 283 -.7260533415342458 -527 283 .11553683262465614 -540 283 -.5390812849692027 -553 283 .28396192131968756 -559 283 -1.42390713175752 -566 283 -.09829643919361047 -580 283 -.46324256240805245 -582 283 .5211160086914455 -585 283 .4357717987147636 -601 283 -.5768719831110966 -603 283 -.49695154493464244 -616 283 1.2949076070365944 -621 283 -.643330186223034 -622 283 .3369941021470941 -649 283 .7603349593656813 -650 283 1.5852356546089184 -673 283 .6987834219888 -679 283 .935565403622943 -686 283 1.4625588830397511 -690 283 .09165455622811482 -699 283 .5169592984095827 -716 283 1.5246449241426883 -726 283 -.18336601993918827 -737 283 -.03418180396763967 -740 283 2.2476035559279994 -741 283 .534857371874968 -771 283 .6260404793516413 -777 283 -.36091520589963305 -787 283 -.16998812645334688 -789 283 .6378001566722976 -794 283 1.004964213888522 -796 283 -.09838672732393378 -801 283 .9781228194996716 -805 283 .2642735253195143 -807 283 -.1637982095890629 -820 283 .10524047532793285 -848 283 -1.8441548875279474 -865 283 .5007500794351537 -866 283 1.0679140130980793 -867 283 -.7387544426987813 -879 283 -.4191573989577574 -881 283 -.9770728032854465 -892 283 .4284471974656807 -894 283 2.6525249415906904 -912 283 -.8572154199007814 -924 283 -.04217503686206736 -925 283 -1.3844257097226744 -949 283 -.9749684861450685 -954 283 .24328664872600242 -960 283 -1.2124737459827895 -978 283 -.9246290028715112 -982 283 -.5285030037796155 -984 283 -.3509391550638655 -990 283 .5446501923703593 -18 284 1.0489171860980495 -27 284 -1.0215908740826725 -32 284 .3117515803536506 -38 284 -1.4070757584071831 -66 284 .2263335822557176 -72 284 -1.7361537805979865 -77 284 -.18846858779232012 -86 284 1.344823041846585 -118 284 1.099736564528001 -120 284 1.498308196324654 -121 284 -.24197687408809487 -145 284 .6635566629468092 -149 284 .9494279022308509 -179 284 .47408305991685024 -181 284 .6370312650874692 -209 284 -.3824953482495851 -248 284 -.21816740725882697 -250 284 .6411768558720836 -253 284 .07246765652231911 -260 284 -.879177206173148 -270 284 1.187919069801556 -295 284 .6116376467336302 -299 284 .22193953704022695 -307 284 .6934240838000261 -312 284 -.7213505378590928 -320 284 -.010347173856612012 -331 284 .8507084708161693 -337 284 .14729080657495922 -357 284 -1.106774628253323 -371 284 -.5997632264301955 -374 284 -1.0081369991872702 -377 284 -.7644040835929684 -385 284 -.5965236730815686 -393 284 -.9681394326935183 -415 284 .2669153504360175 -425 284 .6587864553010747 -438 284 .7664353453812268 -440 284 .33738542668037824 -445 284 -1.4072072864690677 -483 284 -.1945708406027311 -493 284 3.043608694888649 -494 284 1.1300295137432812 -498 284 -.36930986286579554 -503 284 1.8214036905929663 -506 284 .35895614843710716 -510 284 .899280923286921 -520 284 .9316796896180002 -525 284 1.7281049421472237 -537 284 -.16301655253569242 -539 284 .6818884218670946 -550 284 .7692716692704218 -552 284 .7026752261339849 -574 284 1.0709362741482185 -587 284 .6429756054431497 -604 284 -.688456081605952 -610 284 .0910510624870628 -615 284 1.9895550354423512 -621 284 -1.3942278465418376 -642 284 -.6175409240678205 -683 284 .2438351315644787 -692 284 1.1525931561773086 -709 284 -.20317208471258175 -734 284 .3161215220159206 -737 284 -.37691114523108094 -744 284 -.8500832353782174 -748 284 1.681637078970111 -752 284 -.0007232217645570685 -754 284 -.6092472125112974 -762 284 -.7537693141725125 -766 284 1.0142674516044092 -776 284 .6670645344222694 -777 284 -.8715932170167939 -811 284 -1.6453317666857548 -833 284 -.7861885864164421 -834 284 -.5128830470084749 -858 284 1.4015230192355936 -872 284 -.3052967268360517 -880 284 -.1430453956209511 -891 284 -.6890749558348835 -912 284 -.43137742475245516 -913 284 -.026127090231777374 -928 284 .2532927332659875 -929 284 .8778610956681581 -939 284 -.5193032951707193 -944 284 .7218176589311567 -964 284 1.4023293007539706 -965 284 -.07393727066296125 -984 284 -1.4033010716298255 -6 285 1.423246486411772 -9 285 .46442342814172055 -16 285 -.07204968856228161 -17 285 -1.1675702554610747 -21 285 .015519587358654274 -33 285 1.0454294812869425 -35 285 .007081407397540068 -36 285 1.4989088136383848 -41 285 2.702259734044023 -43 285 -.31282311688802394 -54 285 -.8862952313228484 -71 285 1.2336289880346136 -91 285 -.20295616038584885 -108 285 .691906343004733 -119 285 -1.86948912114077 -126 285 .2813177864409735 -135 285 .303322723322523 -153 285 .02621348207096675 -161 285 -1.9996559752032308 -192 285 .10090796806813566 -196 285 .7638551730762912 -202 285 1.7761316822762887 -208 285 -.48064767876980774 -216 285 .08120192433248313 -220 285 .5461883270731932 -236 285 -.1557579933752027 -265 285 -2.6268105113394733 -286 285 -.49587736270310334 -290 285 .04161664461216143 -300 285 1.3513275097526274 -302 285 -.28320514934184604 -318 285 -.8597028380304673 -345 285 -1.1865231509788454 -350 285 1.1585496900228174 -352 285 .8148550348680266 -353 285 1.5332665123945632 -354 285 .5310983848748686 -355 285 1.299811414450424 -370 285 .15103130248325744 -388 285 -1.3049806736204834 -409 285 .645756018136662 -420 285 -.8035234531492681 -431 285 -.5560321278073 -434 285 .534667660867045 -439 285 -1.9821598896713988 -457 285 .029705812228121593 -475 285 .6779899664944753 -477 285 .15165827890799297 -510 285 -.13046900298304798 -511 285 -.4879856337240391 -523 285 -.1143851394731313 -537 285 -.5850963822644192 -547 285 -.1595197043581801 -548 285 -.4412667652776084 -561 285 -.39190037450967846 -580 285 -1.2610111342363954 -589 285 .5259590848058906 -607 285 .7026265895591136 -608 285 -.9348119454311264 -624 285 -1.8266749923260306 -632 285 -1.1646791748714356 -638 285 -1.6137556506253767 -654 285 1.4657437367268205 -668 285 -.11382904723680942 -672 285 -.9041617822822117 -679 285 1.6567761342097236 -681 285 -.09511799519574686 -699 285 .6959053621344731 -707 285 -.0022491015732077485 -709 285 2.193726130650059 -727 285 -.10739212440902449 -732 285 -.9256660166067191 -740 285 .2928967326766935 -747 285 .17783182940221104 -749 285 -1.1282509113735006 -753 285 -.6085536039097718 -754 285 .21846771377873273 -759 285 .5714727977718269 -766 285 .6684629945562514 -779 285 2.6266284019329924 -796 285 -.916920986338706 -812 285 -.9019268078019718 -840 285 -.02220258519675676 -867 285 -.5938586257405881 -873 285 .20273549159325438 -886 285 .6866575883933392 -920 285 -.21014251173650125 -944 285 1.1292318656142404 -950 285 -.3108023591032649 -954 285 -2.0961312836381087 -981 285 -.8333246316623096 -984 285 -1.1236039640156354 -995 285 -.47960746434967927 -996 285 -.2341557938593679 -2 286 -1.9621052115898543 -10 286 -1.120037240568704 -21 286 -.41247298556108103 -25 286 .361670473684525 -29 286 .4321880016511766 -34 286 .5704691479517316 -36 286 -.9543127481639223 -38 286 .45638434923234744 -39 286 .33959245208326916 -50 286 -.32693074786323684 -63 286 -.46422750161466 -65 286 -.4547791447850354 -70 286 .03916581178108711 -81 286 -.9106607548471977 -84 286 -.13758942852183673 -107 286 .07892711764410772 -111 286 .17740551039712557 -116 286 .26831269682716735 -140 286 -.6918790508901967 -161 286 .08339841232277445 -163 286 -.5510784646358458 -182 286 .1289040869752801 -198 286 1.0271717657515982 -213 286 .19502564376756454 -214 286 .47092912223767575 -244 286 -.20055643404378748 -251 286 -.8284959630686591 -272 286 1.6750218703034823 -277 286 .07575960523916575 -280 286 1.2675077303361328 -283 286 .15307070688850777 -297 286 .1202526825548261 -309 286 1.150483575518712 -312 286 1.9765847824289784 -332 286 .10878297821988184 -348 286 2.1675085375085708 -362 286 -1.1400139473989679 -381 286 -.3196677557180132 -401 286 1.071391395307095 -409 286 -.24348688412626765 -412 286 .2045113613031707 -414 286 -.0032777429010035636 -426 286 -.03522066982624362 -439 286 .43175686677066405 -452 286 -.24283489986876705 -454 286 -1.0053182945769676 -474 286 -.21477082564267855 -477 286 -1.9578118058047493 -478 286 -.15225459604963393 -481 286 -.2774403900755344 -484 286 -.29718759071604384 -486 286 -1.1900366320245936 -487 286 -.4459449325772884 -502 286 -.31601706270168844 -513 286 -.9332288067024936 -515 286 2.0272034989572485 -529 286 .5607264735216679 -546 286 -.21212591860320346 -556 286 -.0717454325194375 -563 286 .6783383719141579 -565 286 .13237783783132082 -571 286 -.0591521281296014 -574 286 -1.299980453476854 -575 286 -.5098229234523365 -580 286 .7972298146956284 -584 286 .056092521791194845 -600 286 .8573113425505061 -603 286 -.8914556322560004 -619 286 .7797443592550699 -621 286 .8547395304597537 -625 286 1.9626945899136619 -655 286 .26788921517041936 -669 286 -1.5482069024748177 -681 286 1.524648100016321 -692 286 .3937149952616128 -695 286 -.5251649510479675 -704 286 1.2132404467332054 -718 286 .4233987922034608 -727 286 -.0220578289190434 -736 286 -.09887793441829025 -745 286 -.4237776408901983 -757 286 -.9973859218365485 -765 286 .14939624097747348 -766 286 -1.8975422119945329 -773 286 1.2045737880837057 -777 286 1.502379995086007 -779 286 .19923646793906635 -780 286 .48211269510843213 -786 286 .23662622774424028 -808 286 .13235723840731117 -821 286 .3760981729662229 -845 286 .6859388560083729 -848 286 -1.1702290518209384 -849 286 .862011504652914 -855 286 -1.0066995973254658 -870 286 .05976529228367847 -873 286 -.7011876813302993 -876 286 -.9688346886787093 -894 286 .3072481760549127 -908 286 -.20018748623622423 -957 286 1.134961604385146 -977 286 -.40046454064563675 -978 286 -.5350811287312854 -7 287 -.06420116812882723 -23 287 -1.4180453812523737 -27 287 -.22685716647517018 -32 287 .5596821647892629 -33 287 .28328580510407386 -53 287 -.715474525310722 -62 287 1.2756404639810772 -63 287 .36546147320172256 -107 287 -1.3086526576840014 -110 287 -2.886873838927352 -128 287 -.19400198717708578 -141 287 .8095123671473556 -156 287 .7526203591587103 -159 287 -.2907216282828524 -180 287 .3582576376849501 -200 287 .22412541964844349 -211 287 -2.3013499186460113 -216 287 .21362908723058757 -229 287 .6923367181606226 -240 287 -2.8963834301443123 -242 287 -2.1788656326130744 -261 287 -.591965633979032 -265 287 .684811527160224 -266 287 -1.0928200778165893 -279 287 1.433881619532742 -297 287 -.6103392614456039 -305 287 -.4410785454166411 -311 287 1.0936491105681987 -348 287 -1.1125482915885003 -350 287 -.0029745822592411875 -352 287 -1.7893527100367947 -368 287 1.2269643116767976 -393 287 -.6299906574970542 -401 287 -.2290612549705744 -404 287 -.5043601352671181 -410 287 .11222107226696316 -420 287 -2.0048682968551157 -440 287 1.510599924963668 -446 287 -.25133264668618405 -471 287 -.6163310175909609 -474 287 .10727706505178736 -475 287 .10133652528959636 -488 287 .8295440744248487 -489 287 -1.5282317647299315 -507 287 .7170270487096757 -522 287 -1.1699812988924496 -526 287 1.6352948251740025 -538 287 -.7674267892150015 -540 287 -.9350485023726365 -550 287 1.9089691923554601 -557 287 .220980882863798 -558 287 -.15192546919077068 -560 287 2.1693750258144266 -580 287 -1.1957576410988464 -582 287 .4548292808591158 -601 287 1.0785197319922886 -602 287 -.8036012004884382 -610 287 -1.1003263504281535 -616 287 .3771871978289939 -617 287 .1754087224510417 -619 287 .10408741514892386 -628 287 -.5454327885993828 -631 287 -.05255326965560475 -640 287 1.9476587469943534 -650 287 .8435923004725125 -661 287 2.589951074127954 -669 287 .09779207418405023 -677 287 1.7424069802088686 -680 287 -.17634324595283835 -682 287 2.420670575191143 -684 287 -.3577422729598776 -702 287 -.37258444744629765 -704 287 -1.3732657594372324 -709 287 .027407643001228277 -726 287 -1.1056827121329245 -739 287 -.7910252201626939 -741 287 .24972723305158515 -749 287 -.4465209456461585 -771 287 .42813934723219826 -774 287 -1.0106037425974352 -776 287 .6464507883349693 -779 287 -1.2063484631683867 -795 287 .9971382282974419 -797 287 -.7755000525648857 -800 287 -1.0622397056201662 -806 287 1.4583648179619428 -808 287 -1.8071924075904187 -833 287 -1.0123618751865897 -838 287 .33231423151163997 -841 287 -1.431028058416319 -845 287 -1.0979859083636536 -852 287 2.295280237380716 -869 287 1.546621980371362 -871 287 .3377717805088222 -878 287 .6797867758918252 -895 287 -.08379055484517989 -897 287 1.6706737813731836 -898 287 1.6827283452984925 -899 287 -.15026184580718005 -904 287 -1.8730891598933153 -909 287 .019838841908044073 -922 287 -1.504467066690887 -944 287 -.06707112678296727 -960 287 .43145409113956706 -966 287 1.4383757865766813 -1000 287 -.47336043071077405 -3 288 -.1033994540094152 -13 288 .3811740979491797 -21 288 .290473853854597 -42 288 -.21019383786104595 -48 288 1.0231066158850544 -57 288 .5100810025059502 -66 288 -.9988373024228249 -68 288 -.07898484911248788 -76 288 -.013042629261016429 -79 288 -.2579706943619533 -83 288 .4247012896327345 -94 288 -.210080928246489 -103 288 .4225212518221226 -104 288 .5324601220083354 -118 288 .4836724881139425 -124 288 .15142450338586116 -136 288 1.023665341036459 -140 288 -.3419789848840073 -158 288 -.07092294558571738 -167 288 -.4581693536088634 -170 288 -.5017953409913727 -191 288 -.5274826257145625 -203 288 .4539930829331529 -208 288 -.0788098036944281 -209 288 .38145168395845125 -223 288 -.6845509569642536 -242 288 -.21012848898843708 -254 288 .2781697543320224 -276 288 -.10783057800960263 -300 288 .48605241109856856 -315 288 .4623873239397887 -317 288 .38443576783377414 -339 288 .7725896944377011 -343 288 -.30622877452405567 -358 288 -.6984800680461294 -364 288 -.4947133893523735 -367 288 .0652325260576513 -370 288 .03203550240491031 -376 288 -.6012555928580022 -377 288 .1267367975924304 -389 288 -.08143282403651358 -433 288 .21822581777242048 -455 288 -.3632692927957309 -468 288 -.5400963914764122 -470 288 .6128971458841682 -472 288 .17294907775379856 -485 288 .3000148472671149 -515 288 -.23417470571588972 -532 288 .5292612511718846 -533 288 -.08345751682534484 -542 288 .7558000384935407 -544 288 .6824701651806259 -556 288 -.19907870935195657 -557 288 .5421261832032608 -568 288 .26514492109869153 -580 288 -.19583660421660712 -594 288 .3706499565715945 -602 288 .4088123617997245 -614 288 .06198602636007253 -618 288 -.27213311073572305 -621 288 -.6993672107726978 -637 288 .2609880727009254 -639 288 .02809095588126477 -645 288 .12036684416746829 -671 288 -.8712605284737956 -673 288 -.11356675030166549 -688 288 -.05839062340221013 -693 288 .272440542985914 -709 288 .9033822589998861 -713 288 .6555346371493845 -716 288 .7779091937965714 -732 288 -1.0571162596719668 -739 288 -.5172749541962833 -750 288 -.8056533286401552 -761 288 .21708927954182372 -775 288 -.3193973555543548 -781 288 .6694190663555963 -788 288 -.07969033737086137 -802 288 .45890498122992046 -826 288 .09506133569049462 -837 288 .7905769243214729 -842 288 -.6189869854498927 -853 288 .6235392641282637 -857 288 .24624748179462533 -871 288 -.022673503061961114 -889 288 -.058922991446297424 -893 288 -1.069441153088184 -894 288 .42548830907017493 -904 288 .007754594229665561 -920 288 .6373019401855394 -954 288 -.1634835239471593 -959 288 .7683617495026642 -963 288 -.22929230502927012 -965 288 -.824983292870918 -969 288 -1.1478373882670831 -983 288 .1466789869192422 -987 288 .37584488618220524 -995 288 .7808282859133151 -997 288 -.2776832846804568 -3 289 1.6344909021458516 -17 289 .935018664703746 -35 289 -1.1338438692128638 -37 289 -.13571158664211014 -43 289 -1.193121204265474 -46 289 -.4923244306208384 -57 289 .28352207496396764 -65 289 1.0389468149875292 -70 289 -1.0914970936629929 -92 289 -.07910786338959866 -94 289 -1.354634258380099 -99 289 .5923682062936427 -110 289 -.7783882182477421 -122 289 .6294149653962485 -140 289 -1.2096546923997722 -148 289 -1.5373380508940575 -151 289 .9096818491491795 -153 289 -.12750476665762306 -155 289 -.26719584395292156 -193 289 .6083494166741861 -194 289 .818919370348864 -217 289 1.0732609132799136 -224 289 -.4087863337512444 -232 289 -.04002274570889844 -233 289 -.8299547513642275 -251 289 2.172300913689975 -260 289 -1.636955148137029 -269 289 1.6409726046036663 -270 289 1.0557434619571138 -284 289 .09104160246378384 -291 289 -.850094254834721 -296 289 -.9358097268282701 -306 289 1.9156304387312013 -308 289 .26519662327505045 -311 289 .18234677690700668 -314 289 1.05647976351676 -329 289 2.31880373439328 -331 289 .22601424571732417 -333 289 -.6348495941347114 -336 289 -1.0214296110401369 -337 289 .7672150350478342 -339 289 -1.444860824507149 -341 289 -1.7267896027259315 -343 289 -.9441558681441541 -345 289 .14627669475825478 -350 289 -.012342278449855831 -394 289 .11351507038926408 -395 289 -.9428094296466943 -423 289 -1.139075439085378 -428 289 .9121090939015609 -431 289 .010073573462351104 -432 289 -.8526401923309125 -439 289 1.6030320738550934 -462 289 1.1199819986470214 -489 289 1.264673923740119 -490 289 -.9501465460285623 -494 289 -.8325285095249385 -515 289 .08493381816013587 -535 289 -.016357538275671754 -541 289 -.150659488998381 -549 289 1.4442426335714822 -563 289 -.2694761089139346 -606 289 -.07994369047183494 -609 289 -.5618548400459359 -610 289 .9849873532963149 -615 289 .9499598399393482 -618 289 2.1613988850735417 -619 289 -.560937722798634 -630 289 1.4099614129317004 -635 289 -1.0058350177320632 -640 289 -.3390202329991573 -658 289 1.0342178441303393 -672 289 -.19097449112121498 -683 289 -.3887070815282625 -689 289 -1.3796683370023162 -698 289 -.747136740386202 -703 289 -.7193794803663499 -706 289 -1.1922541083829639 -721 289 -.3377599520949412 -746 289 -.7726485166028113 -771 289 -.5285408387818846 -776 289 1.0760216271926784 -777 289 -.490747880024403 -784 289 .5120077162151234 -785 289 -.08489329348929242 -797 289 -1.4537899824049412 -801 289 -.4471612612272889 -818 289 .26182146577750776 -855 289 -.1776912945322549 -862 289 .21786612967781133 -884 289 .27293565809672016 -887 289 -.6962641565009251 -889 289 .7550456185034253 -900 289 -.8052728755781281 -905 289 -.833882955471514 -908 289 -1.003658339541968 -924 289 .07565153547751885 -926 289 -.413823026741084 -941 289 -.4134132276698058 -948 289 .484282344149254 -960 289 2.846503709855252 -974 289 .3362928389934747 -978 289 1.578314576376727 -15 290 -.3230548617897901 -21 290 .19951174677213376 -39 290 -.5050776692303506 -49 290 .6686859537502174 -53 290 .04648872812748675 -59 290 .645367757336368 -60 290 .5439361944138491 -108 290 .008081314366167762 -110 290 -.6276284980653553 -127 290 .9421893067356232 -132 290 .032415002391687764 -153 290 -.4961722038726177 -157 290 .4018818785806079 -160 290 .21402224114343904 -167 290 -.5430083948661593 -172 290 -.4513254042555708 -188 290 -.05829627926216835 -191 290 .3591587442671594 -199 290 -.11186344663619047 -206 290 -.9828925945891722 -209 290 -.5185629143758799 -244 290 .20643770818836815 -270 290 -.06217866177713896 -304 290 -1.0151590089180726 -310 290 .2819175667223638 -323 290 .4311520570963553 -354 290 .1381681048548927 -356 290 .3287740686571244 -377 290 -.15936314190874737 -401 290 .30389197937538526 -411 290 -.9169383634376814 -418 290 -1.4335857144285495 -442 290 .3380006356205293 -447 290 .20451249984685158 -465 290 -.7733890594288265 -470 290 -.043082551942701844 -473 290 -.027185418651775983 -475 290 .536254979263035 -500 290 -.247242356549716 -505 290 .9459244429341747 -506 290 1.2199946675995008 -514 290 .3150450416623062 -518 290 .5404579904184096 -527 290 -.655067263636128 -567 290 -.8452099158336245 -572 290 .2876045842141004 -579 290 .649304750801799 -590 290 -.656458004313301 -605 290 -.3686171591453546 -614 290 .2996184189743753 -619 290 .028527756328223686 -622 290 .8712535436695391 -623 290 .4794045759979808 -649 290 .005046276246547545 -653 290 .9930223282038146 -657 290 -.699984449738684 -676 290 -.10005386847874077 -690 290 -1.210011231233104 -705 290 -.15897527993824256 -706 290 -.09527323163356319 -708 290 -.42185603038260444 -713 290 .4924238454223282 -722 290 .217435025076819 -728 290 -.20162031705892192 -752 290 -.1898595963258083 -763 290 -.7030726688293537 -779 290 .4001327075957312 -789 290 .6436964981809996 -811 290 .3134502375345676 -812 290 .16282252850617926 -822 290 .4428571017284843 -824 290 .7582381130175095 -827 290 .7911612699755992 -833 290 .42937138405933817 -836 290 -.38279955833052026 -855 290 -1.2509421063537387 -862 290 .5187937588685384 -873 290 -.522416513220105 -877 290 -.011610626407667942 -883 290 -.6962774435900652 -892 290 -1.0142383965562831 -915 290 -.11069757158216922 -918 290 .558072575123475 -952 290 1.0389351114817917 -953 290 .4558255725272631 -954 290 .6828676564704782 -961 290 -.25916144125035145 -983 290 -.2573040062715212 -997 290 -1.137546409920866 -3 291 -.07558465421954869 -16 291 -.1106092533094507 -29 291 .9299346701146015 -65 291 1.027290777315366 -77 291 -.1965153365476844 -78 291 -.05498506508423531 -94 291 -.9433202315265209 -125 291 .36194671889080166 -144 291 -.05810394462905541 -145 291 .2996957453996182 -160 291 .15413810596393349 -163 291 .4142508761798024 -165 291 .6346294208534354 -183 291 -.36667535070524 -189 291 .22515054138471474 -191 291 -.25550856692579693 -207 291 .7179626638466936 -231 291 -1.0832350434630047 -235 291 -.3777522433621121 -255 291 .10968815038887358 -258 291 .5880115742546626 -265 291 -.517445182053355 -283 291 -.19165319615456392 -302 291 -.04052254351852513 -316 291 .81515568957896 -324 291 1.3412658521493737 -327 291 -.2389595713370914 -329 291 .8665178686398819 -352 291 .6425337973543006 -353 291 .928402385118186 -354 291 -.008073431412644072 -387 291 -.3622773432001637 -390 291 .0012660117190806675 -391 291 .16388118877636235 -396 291 .67675343597634 -407 291 -.19143434684469118 -410 291 -.5454049910204997 -424 291 -.29663205037908585 -426 291 -.42919791745837593 -445 291 -.7418922248622877 -500 291 -.4937451041895137 -504 291 .7750108263463495 -541 291 -.25457360816152697 -555 291 .32888066275021915 -559 291 .04354963955180049 -560 291 .13868357682437985 -569 291 .26644301027218226 -576 291 .20815326259344308 -591 291 .6458924619216357 -595 291 -.9086780167348936 -605 291 -1.0325917503412652 -610 291 -.9326954399657179 -620 291 -.13921216315042073 -624 291 -.13643435090545047 -632 291 -.4880662298733062 -644 291 -1.2544322232582465 -650 291 .2240161695264047 -667 291 -1.0378141480152716 -688 291 -1.1692813705232799 -699 291 -.8399907302107855 -728 291 .22665622284381948 -747 291 -.978392527251085 -753 291 -.6821131763505943 -764 291 -.7402704833497465 -765 291 .22830450670754848 -775 291 .015714861632399726 -776 291 -1.1053137872849683 -802 291 .2646077872083751 -820 291 .2940647673867908 -840 291 -.6222707294372541 -851 291 -1.30533471280764 -859 291 -1.4767174117176436 -860 291 -.13270957110217574 -864 291 -.3660297989803744 -870 291 -.28721046499759517 -875 291 .4030604985700787 -879 291 -.8605217988500646 -882 291 .42179238844500655 -905 291 .19125452910670526 -906 291 -.6122473446374284 -917 291 -.5718258424229864 -925 291 -.4811279661188886 -926 291 .35751327134689714 -927 291 .5635646924337774 -939 291 -.370040195831076 -953 291 -1.376967123929486 -955 291 .46802213513200025 -969 291 -1.1359514127274044 -974 291 .9568749421787645 -5 292 .40685658352665866 -7 292 1.922920935084603 -14 292 -1.7794465040817924 -21 292 -3.1798099138362734 -26 292 2.527559463273853 -37 292 -.44275548458514025 -44 292 -.21994804711946897 -82 292 1.384967653562828 -92 292 2.2372028745992205 -104 292 -1.7637581038299752 -115 292 2.6685244167544258 -124 292 1.043813620508083 -133 292 -.9950570311508224 -144 292 -.6864457085288542 -165 292 -1.1378657639350376 -172 292 -1.2228868093389555 -174 292 1.5669307312894634 -178 292 1.056194370102172 -184 292 2.552776172375215 -186 292 1.350598726349873 -196 292 .8155677541947538 -203 292 -1.6212267307407926 -210 292 .2928592639481116 -227 292 -4.26228634478133 -242 292 1.7777393007167501 -251 292 -.2808965691431762 -254 292 -3.4184776485774195 -276 292 1.0333417212236913 -290 292 .1404662376922746 -293 292 -.6497092176932469 -296 292 -1.3571845342255344 -304 292 1.6351956444682918 -316 292 -.21036588927899222 -317 292 -1.2220907586487315 -319 292 1.485295099024396 -325 292 .7432639370779011 -339 292 .4662959207330165 -351 292 -3.0818224937950096 -358 292 -.6906808776300217 -360 292 .5829810614120108 -390 292 1.1327806560855234 -392 292 -1.1746409244595124 -393 292 -.9390316322236287 -403 292 -.9643675909071505 -417 292 5.322508642308176 -421 292 -.423190285860945 -424 292 2.813977288744893 -434 292 .9623203141215926 -448 292 .9767567645427593 -454 292 -.4421112779226585 -455 292 1.244386239450194 -457 292 1.6266185104225932 -471 292 .28929880810316844 -480 292 -.06292534504051484 -483 292 1.240937749928891 -489 292 -.6906425147375781 -494 292 .49400224204202803 -499 292 1.1871321793095724 -501 292 -3.5658659102138923 -507 292 -.2981081352313789 -508 292 1.6724532881217087 -540 292 .6436860888445677 -557 292 -.9627584601161894 -559 292 -1.734321105141618 -563 292 1.57132278788704 -566 292 .5898465603241612 -571 292 .5868469634622279 -592 292 -2.962177151973556 -598 292 1.8392109875557852 -600 292 2.7963552769035642 -610 292 -.7968310808752792 -618 292 1.5353081614864692 -619 292 1.2233270391275308 -624 292 3.953303379220888 -642 292 .24357340934399768 -666 292 1.6857199540168173 -675 292 1.0535538660523152 -680 292 2.7276570785932996 -687 292 -.3301378665388858 -700 292 .6621460434266737 -703 292 .9406949658732061 -713 292 -1.0781673171413202 -725 292 .545862781796019 -732 292 2.9896627942114646 -752 292 1.839422713961795 -756 292 .4899396059114005 -776 292 -1.6038563502400107 -786 292 -1.4215738613774078 -788 292 -.529804441396029 -794 292 -.574130479221431 -795 292 1.6301267896862714 -798 292 -.5760411538066061 -800 292 -1.5895804662664565 -815 292 -.3124822149525906 -817 292 1.2575750350554677 -818 292 1.0530198938306015 -821 292 -.49547410963171234 -823 292 1.7291924516619632 -825 292 1.631303791961508 -848 292 -.9260068675987003 -879 292 1.90008508858003 -884 292 1.8711968717780225 -890 292 -.685504362579443 -893 292 .022370200277636754 -896 292 2.1594276571310917 -903 292 3.0735635374608568 -907 292 -.8277928550488339 -908 292 .698373523613501 -913 292 -1.026308250396506 -929 292 -2.8412277955482335 -935 292 1.6938787478209996 -940 292 -1.2079411124803066 -950 292 .14030749202905113 -955 292 .36698808520901527 -986 292 2.8832644892400086 -991 292 2.8351833153106814 -999 292 -.2933988219375153 -4 293 -.5482684247577376 -7 293 .5212868076092709 -9 293 .5490002929697599 -16 293 -.06290761435465979 -40 293 -.24407233057404618 -44 293 1.2607325010074282 -45 293 .2644038523597876 -59 293 -.09519885730552947 -72 293 .586633154167369 -81 293 .4974250056928139 -105 293 -1.1734827468345006 -130 293 .726517931753045 -131 293 .8434727652052689 -132 293 -.2477407615920858 -136 293 -2.723906407686568 -146 293 .9617300335186806 -148 293 .8114078430051385 -149 293 -1.4793046724169299 -159 293 -.5413435871522042 -169 293 .3264166254753451 -170 293 -.8909836245332361 -217 293 .059890026416159904 -221 293 .3669525559034438 -230 293 -.056271505035912786 -238 293 -1.267368688431333 -240 293 .23190930277516408 -263 293 .13837695941043063 -279 293 -1.223963086576857 -297 293 -1.1423037492310422 -301 293 .46496973113082724 -325 293 -1.0840475490709585 -331 293 -.1912294214887099 -350 293 -.49918313176212137 -365 293 -1.1772084781136911 -370 293 1.216155899196423 -374 293 -.9940972202901688 -376 293 .7047337567740849 -387 293 -.54080343547194 -394 293 1.867889036488684 -416 293 .7860808078349458 -477 293 -.09600674512767861 -483 293 .7312319338871199 -511 293 -.14344441105779332 -513 293 -2.2412228325815864 -523 293 .2925090503327295 -526 293 -.146600290152393 -542 293 -.1830948223816079 -556 293 .8857529783358506 -558 293 -.6478968224143788 -565 293 .02564145488444919 -589 293 -.6808285653926611 -606 293 1.0479239818832067 -619 293 .7165954188152166 -635 293 -.5253940520961767 -637 293 .5932972070391782 -665 293 -.9169276449895322 -670 293 .41144042392234886 -671 293 .9194887990717427 -680 293 1.0342790018257144 -686 293 .3950371757917236 -689 293 .9394734508296996 -698 293 1.8065935585596447 -701 293 -.46067508392438405 -702 293 -.15251658505028556 -714 293 1.1148495938782226 -722 293 -.7228035924931502 -749 293 1.0415348459014437 -761 293 .689382456667733 -766 293 .6474460917527157 -767 293 2.8503705839423663 -777 293 -.5804705063488684 -785 293 .8342555609217146 -795 293 -.3506662214404561 -808 293 .9039568639837998 -816 293 .022375698489075703 -818 293 -.8611444925910492 -819 293 -1.3900244501974712 -823 293 -.30030092290142596 -830 293 -1.0325940034581405 -831 293 -.3339060518208329 -844 293 -.5940868922209118 -849 293 -1.966688441720286 -857 293 -.19941470129030053 -859 293 2.0067968152740763 -861 293 -1.187794139452854 -864 293 .40227074050949607 -880 293 .5211899075447192 -918 293 -1.2100345346900583 -919 293 -.5345432719061302 -932 293 -1.346569216391008 -938 293 1.0324010904306002 -945 293 .1432730516995547 -954 293 -.19160033092471568 -11 294 .7402952819480921 -17 294 -.019079976217009798 -34 294 1.1525063851457198 -46 294 -.40663268629336613 -54 294 -.5088970629622203 -87 294 -.6631377876446587 -94 294 -.09779503364716252 -95 294 -.6987453211432941 -127 294 1.3042098764278878 -141 294 -.6011267448462368 -158 294 1.0537751973349418 -165 294 -.474889857457256 -177 294 -1.425701357346796 -178 294 .6172162661221496 -196 294 2.2870041949681843 -205 294 .2768917731052994 -216 294 -1.8068707461165003 -219 294 .41279418300355103 -249 294 -1.6984745674111281 -258 294 .4714498844374299 -267 294 1.9213186085700085 -271 294 1.501233191653651 -298 294 .6508392043166403 -303 294 1.319899789862591 -317 294 -1.2013631924565522 -337 294 -.30228118451076547 -338 294 .03755610052852278 -350 294 -.5364390543584391 -372 294 .41542093946287717 -377 294 -.4073450201558332 -378 294 1.9351608678262027 -380 294 .09058579566418719 -395 294 .05329017860555049 -396 294 2.064909522393085 -397 294 .023877824773757272 -401 294 -.28403968409974056 -422 294 -.638603755097904 -457 294 .18430114355515775 -470 294 -.815551062102058 -479 294 .1292904797929153 -486 294 .04467797167262052 -488 294 -.48587828359995244 -495 294 -.3793648173665382 -502 294 .6545565582759946 -510 294 1.7709817312525382 -524 294 -.6187745476661124 -531 294 .20543649963714591 -536 294 .6192214003025615 -556 294 .8388332465591212 -557 294 -.90335825247958 -570 294 -.770954258109951 -575 294 -2.2843719753400187 -589 294 -1.594537964253272 -603 294 .8146587648366324 -636 294 -.32134033356662933 -646 294 .11184246207284107 -652 294 .08180254515588178 -657 294 1.6507125569086079 -668 294 -.7024031546124812 -679 294 -1.3423140263680196 -681 294 -.8737917821662443 -691 294 .815110457099561 -701 294 .7559043389522382 -702 294 -.10844403019058456 -715 294 .45095286887265695 -729 294 .44125098757573844 -731 294 -.5683077031521211 -747 294 1.0391453091730067 -757 294 -.15424419628434308 -759 294 -.31543598833474873 -760 294 .38154556117772315 -785 294 -1.475453016823461 -791 294 -.029304634474783625 -793 294 -1.5239187025222005 -803 294 -2.195775592460087 -817 294 -.7924571799861064 -820 294 -1.3934662443308476 -828 294 .529317529382163 -838 294 -1.5974141790932364 -839 294 -.33916316281011566 -851 294 .8474166289685725 -856 294 -.8363049321209018 -892 294 .5396499220787989 -894 294 .21924555601528242 -910 294 1.1476989281347896 -920 294 -1.2042091607302732 -937 294 -2.376847525845884 -947 294 -1.8464488995082202 -950 294 .8476823532538372 -970 294 -1.8925620209801295 -974 294 -.39213934084283775 -986 294 1.9239883336627306 -992 294 -.7759804374427415 -999 294 -.9574226372686512 -6 295 1.7793144425679535 -12 295 1.2085852357853635 -14 295 .26913000745402893 -20 295 1.1702142714603982 -27 295 -2.472260863778744 -40 295 -.3042629932719249 -46 295 .6820842744411221 -51 295 .13160330859944055 -52 295 -.48146303981267946 -62 295 1.4957874970257863 -68 295 .5998172526383889 -108 295 .9651054294526362 -120 295 1.0459189286101644 -167 295 -.30324575425819617 -172 295 .113560280324757 -176 295 -.6163146117687884 -181 295 .5815783427029401 -190 295 1.5929616227270411 -194 295 -.1147123365872057 -202 295 1.5308520106622805 -224 295 .48391023560870144 -240 295 -1.8616476309086114 -243 295 .2518165169594268 -250 295 1.4504749871465732 -253 295 1.2500504003456534 -258 295 -.5540269394944922 -291 295 .10222229736333954 -300 295 .07218144417531977 -307 295 1.1146320816590918 -328 295 -.5681354407767883 -329 295 .9394179068225565 -337 295 .024235502160244227 -339 295 -.3189783271232837 -352 295 -1.5882925103828678 -357 295 -2.113876805103832 -376 295 -1.3007076208011417 -391 295 1.3938001372324573 -399 295 -.9917820710503957 -404 295 -.24561669826714672 -405 295 -.23776033846940473 -428 295 -.7617451525421327 -434 295 -.14189205910545027 -435 295 -2.018767017698579 -447 295 -2.2520713617973525 -464 295 1.291189332997411 -469 295 -.9226330320962829 -470 295 .6540115060963466 -473 295 -1.6055391295200752 -478 295 -1.1051956320369927 -499 295 -.4454098543855368 -504 295 -.7794888473877778 -506 295 .8694136150615753 -510 295 -.1501907824434947 -523 295 -.6624594746521687 -533 295 .047148573978388876 -591 295 -.786774462165146 -596 295 .6037956917934729 -607 295 -.4784587056668386 -608 295 .8223497382280963 -625 295 -1.5455501841447514 -634 295 -3.0989559315421564 -659 295 .3029009484497529 -672 295 .8466036324693182 -682 295 1.492039360334973 -689 295 .32561323056027247 -727 295 .40604443839903054 -745 295 .5260803157685126 -754 295 -.6552964935049584 -759 295 .641968216459971 -765 295 -2.541387944816303 -768 295 .4570071174472816 -770 295 .12763486439354121 -779 295 -1.647279557461209 -787 295 .33075546429697583 -792 295 -.9774852430577783 -825 295 -.7591703578068657 -850 295 .8114647707395308 -855 295 -.08132070662725296 -859 295 .060824198754669004 -872 295 -.013408254549616284 -875 295 .154617286184551 -881 295 .7821071263156387 -896 295 -.11835205676840795 -909 295 .5106038299770065 -912 295 -.9451204462705546 -917 295 -1.4057638659246763 -954 295 -.14423552267180034 -964 295 .9356283539176984 -977 295 .4052421710112086 -979 295 .8568998911604202 -982 295 -.6339196638569627 -985 295 .4693087372546051 -994 295 -1.5209959946713703 -2 296 .5621459673979158 -6 296 -.5040151428406002 -36 296 .37350112246122713 -47 296 .09500545575906243 -54 296 -.118011848998516 -66 296 -.8152197748566717 -77 296 .43936308732343876 -83 296 .5480599695680685 -86 296 .0800218434011577 -92 296 .19019706036171835 -104 296 .6331867152577835 -108 296 .733189452562042 -114 296 -.1757439774552636 -120 296 .5448475265434317 -124 296 .17613662208041006 -142 296 .6010369118494072 -161 296 .372019175215203 -165 296 .3380844578292415 -171 296 -1.3127569420645635 -187 296 1.9150210358584303 -194 296 .34232458676977534 -230 296 -.041848617923854 -238 296 .08547723187356428 -262 296 .925727819493296 -268 296 .6144254954860396 -276 296 -.07466489710688189 -283 296 -.6191123565199526 -289 296 .8132370709217579 -292 296 -.3558754832244473 -304 296 .327427987583771 -308 296 -.4510622310063444 -309 296 -.6067605323299549 -311 296 -.11897811795003074 -313 296 .39388279581695607 -315 296 .6484073984151676 -319 296 .22972613644709944 -341 296 -.6866763818713331 -356 296 .17411381441595808 -413 296 -.5065561868440825 -430 296 -.034643880966287795 -431 296 -.2741190504079511 -497 296 -.2738954828693502 -511 296 .2989509524816226 -514 296 -1.1230221271824805 -518 296 -.012320597722554658 -525 296 .13745940816358346 -535 296 .23871603107197334 -567 296 -.40976074889134123 -604 296 -.31924461336806104 -607 296 .4376532189716427 -636 296 .3942302819734465 -645 296 -.2651955868344336 -656 296 1.0353227257096091 -675 296 .08050223492997031 -677 296 .9914937433318539 -681 296 .9072690768124054 -685 296 .5083843783791773 -692 296 -.0006948407240223078 -695 296 .22652436489255884 -699 296 -.30083712220195125 -731 296 .1970762385658379 -737 296 .4989077797502476 -750 296 .5417732009103396 -759 296 -.7071174188467239 -762 296 -.27993927873200547 -771 296 1.2949672882328436 -775 296 -.5313715022065741 -779 296 1.2396744324462743 -794 296 -.17371959361991632 -809 296 .17911781469265997 -811 296 -.13829949793060756 -815 296 .37550721460502523 -816 296 -.17498789861888708 -824 296 .6734337222990258 -825 296 -.04397554604179785 -831 296 -.7161888602531401 -844 296 -.17565855188283838 -848 296 .9677117566321664 -862 296 1.1087940420444817 -863 296 -1.046186301550445 -864 296 -.4424035253195795 -878 296 1.087297697894945 -882 296 .5504248248011983 -892 296 -.38325679638550253 -895 296 .43769349783272316 -899 296 .6368505728328745 -903 296 .13513639236578676 -906 296 -.5466110392041694 -912 296 -1.3359007266847245 -913 296 -.2510083841632232 -926 296 .35127933237819764 -930 296 .14332029410023878 -935 296 .36932082609471834 -940 296 -.6423004667228894 -956 296 .1424262280910121 -959 296 -.14533101673854748 -965 296 .05572986903337045 -984 296 .8530834153794677 -986 296 -.36419111363933515 -987 296 1.483780029516612 -989 296 .4532110851779326 -9 297 -.02570846806644876 -18 297 .0285571699152634 -19 297 .3934228540216488 -36 297 -.03880550166370397 -61 297 -.6568997376386131 -70 297 -.23059284157581675 -71 297 .1020431001061088 -74 297 -.294239886667724 -77 297 -.2445918401236108 -87 297 -.07008088991866401 -105 297 -.3996490648332095 -130 297 -.4839594965574506 -135 297 -.08245745220871287 -137 297 -.9753546096160036 -150 297 .9594397526806251 -158 297 .4197989712256198 -159 297 -.956195025394776 -161 297 -.2431833722705103 -171 297 -1.0968339553861957 -178 297 .5152068621624339 -194 297 -.5366265859693624 -196 297 .0709711526083189 -205 297 .03567387150565633 -232 297 -.6782454055292958 -233 297 .2647499961616458 -241 297 .435429447169398 -247 297 .7913030377504747 -283 297 .4734315502637364 -291 297 .6436280768413523 -301 297 .6977919857973967 -321 297 -.43742171195544394 -331 297 -.8122511971017691 -336 297 .7925371762616817 -338 297 .08026884296131072 -354 297 1.5406112628705462 -372 297 -.6286967522085328 -392 297 -.5993533812539276 -398 297 .14962981283665092 -409 297 .3968429686538192 -417 297 .7035667156114042 -420 297 -.45820244218899875 -438 297 -.05922568854529747 -439 297 -1.1185028903682661 -441 297 .3397147316331504 -442 297 .028517825000664687 -443 297 .32753505858735965 -486 297 -.0342232233509497 -487 297 -.9876636729801499 -533 297 .20600283705340736 -558 297 .7780725086710822 -570 297 -.5211335443198661 -580 297 -.1617576537976595 -582 297 -.5778153436272372 -583 297 -.8529816237967143 -591 297 .10541321557577699 -592 297 -.22946178792740524 -605 297 -.03144215780977219 -615 297 .09315815497966864 -620 297 .8170101073420105 -622 297 -.5598224790260214 -625 297 -.25660059097214805 -627 297 -.558538499835463 -648 297 -.4515861606394123 -651 297 -.03986236936466256 -673 297 -.5527517330186652 -677 297 -.07606445732207362 -691 297 .04200842973179483 -706 297 -1.1233138737116377 -727 297 .11907296522135397 -733 297 -.7111934089547959 -741 297 -.4217288714024578 -749 297 -.2274562123532056 -758 297 -.687768747931673 -759 297 -.4722347846050704 -770 297 .3337926509561177 -780 297 .2854948425329603 -806 297 -.5233071594418418 -808 297 -.5485906231550767 -824 297 .03616891206209158 -826 297 .5930985083472684 -830 297 -.47641521979639234 -835 297 .861963139052401 -838 297 .28379822275254196 -840 297 -.03396739723188096 -850 297 .029132733752397326 -860 297 -.15641038855895267 -870 297 .512320994649614 -878 297 .31938480694005367 -881 297 .46978586406478395 -885 297 .33687699859100123 -900 297 -.1570679735034192 -901 297 -.2964210433763296 -917 297 .4631302564324799 -918 297 -.2955529029097871 -929 297 -.22615526369041905 -945 297 -.8768122446461382 -954 297 -.7912472136960842 -963 297 .6775094618124897 -999 297 1.2982271278655997 -4 298 -.8740122276463678 -11 298 2.5560827604281826 -13 298 .41145935388958454 -31 298 -.8373685120819421 -41 298 2.9116633631418916 -45 298 .2893401548597237 -52 298 -.0048901392536175375 -60 298 -1.3625821643316445 -124 298 .29004308119936173 -125 298 .24977281422417186 -135 298 .49530219592828206 -144 298 .5262135695694209 -151 298 2.2851646903968965 -158 298 -1.3912993223656 -170 298 -.28961448084593283 -181 298 -1.358204383380207 -206 298 .27654769567536974 -221 298 -1.3850077753579633 -222 298 .7792696985190638 -223 298 -.10441577715508886 -225 298 -.44514092328838184 -226 298 -1.5891708859476887 -230 298 -1.040832918056397 -241 298 -.8243193121872046 -253 298 .03164452208663685 -274 298 -1.4835547383308094 -275 298 1.6707879738159863 -276 298 -.32343742241584367 -310 298 -.3549574463319314 -341 298 -.9529021941301684 -364 298 .8361702837559233 -380 298 .9342892013485128 -381 298 -.2437693709074952 -383 298 -.9796060498312277 -396 298 -1.454206431110761 -400 298 1.994637334950521 -405 298 -.973787612122112 -425 298 1.5378402075226352 -430 298 1.8072818257162437 -440 298 .042802512480319244 -445 298 1.0365881188092159 -453 298 -1.2373853517439748 -475 298 .00905819572490428 -479 298 -.998848319814463 -480 298 -.7941166456592779 -484 298 -1.6527393563736827 -496 298 -.14414992223879503 -525 298 -1.507865125905355 -527 298 -.6559578904843861 -530 298 -1.1324147818701382 -531 298 -.21648902289157748 -559 298 1.7194324911977596 -561 298 1.6806468825077912 -563 298 .2580354667288934 -587 298 1.6743476350807653 -591 298 -.7567504488435064 -599 298 .1914320808497091 -607 298 -.6537483059698704 -619 298 .6049072477075023 -623 298 -.09692563481705077 -627 298 2.451092441523469 -628 298 -.1873375012815726 -629 298 -1.2255290556301162 -634 298 .22475237169730616 -640 298 -.17232790865034953 -643 298 -.1126919229878398 -646 298 -.9746650674097148 -659 298 .5278250951832895 -692 298 -.14402430670440908 -694 298 1.1120932564947459 -715 298 -1.1142063286255885 -725 298 1.1396472171653766 -733 298 -.73898502494308 -734 298 -.8806370279052453 -743 298 -.20041877337501482 -775 298 -.24558241491978144 -779 298 1.7031362214140426 -780 298 .32307419876713395 -789 298 .28804668780885045 -811 298 .3509936602634489 -813 298 -2.5562922351584647 -831 298 .7971465910524285 -835 298 .08820269517868211 -837 298 -1.1861967989305264 -847 298 1.6094482660766727 -879 298 .360954585157596 -904 298 1.1493851230394372 -916 298 -.8929902139049253 -931 298 .924979853141569 -938 298 1.197226119606753 -941 298 -.02553457823514757 -952 298 -2.3043697039463993 -959 298 -1.081760660037959 -963 298 -.6733575230426659 -972 298 -.9683792880816934 -978 298 .520471779334554 -982 298 -.31172610581792093 -6 299 .6229288458759777 -7 299 -.41755701297634035 -12 299 -.13323850512044455 -21 299 .2293347852783465 -41 299 .4727672577664798 -52 299 .9888417172358781 -53 299 -1.0886673317602804 -55 299 -.4183514399405216 -58 299 -.9511711850546869 -79 299 .7733382191309414 -86 299 .0980822110446766 -88 299 .32664574879702457 -99 299 -2.3714736128192713 -115 299 .13983219754120263 -117 299 .8411820340538709 -144 299 -.7159993832456183 -149 299 -.8926932893192302 -152 299 .9323862977495893 -164 299 .20295965742184838 -184 299 -.19841318108551118 -187 299 .5089931907982171 -205 299 .4324132265744641 -221 299 1.7357752125751518 -229 299 1.1799767942390704 -240 299 -.6190740251909191 -241 299 -.017082722899296944 -244 299 1.2288947593709758 -257 299 -1.4558319751731101 -274 299 -.5964178374186263 -282 299 -.2020438214747142 -286 299 .2466025608730786 -296 299 .5070760762642735 -303 299 -1.3782719844251798 -304 299 .08713340438369105 -321 299 .17966989274761563 -326 299 .8909437670444726 -327 299 .6638521880586346 -337 299 .47785601644759235 -338 299 -.12889569046922267 -352 299 -.5459499642670514 -368 299 -2.3996485807154446 -370 299 .24059431156052266 -371 299 -.1375686976605087 -381 299 1.5434089733956926 -395 299 .3456366724543458 -407 299 -.09076362629104695 -409 299 .37771676067586146 -415 299 1.3470004743869757 -441 299 1.3198575452758647 -458 299 -.245287614172684 -459 299 -.5206075263978299 -460 299 -.7966229330469892 -484 299 .8553666492112191 -491 299 -.2947400666311859 -492 299 .6067395763212117 -496 299 -.05582266882157311 -497 299 .009277085751438235 -503 299 -.2932155920963653 -507 299 -.30578788995802897 -510 299 -1.5207965970804282 -516 299 -.2088177069048302 -518 299 1.2635522323430102 -520 299 .7946458905806171 -524 299 .6343033696418032 -530 299 -.2342594494618451 -536 299 -.6525764782210365 -545 299 -.2889762829835098 -560 299 .06188223038978815 -584 299 -.5501412345065242 -604 299 -.6923129168591265 -608 299 -.43453641875103444 -615 299 .2967374095810831 -623 299 .44040125211743253 -627 299 -.8144503583527914 -629 299 -.26726962099596485 -642 299 1.5015275714778196 -662 299 -.3238427541585923 -666 299 .6899651518187967 -678 299 .6809751003429038 -697 299 .7532655596505573 -703 299 -.47163826947847154 -722 299 -1.9383652582065616 -746 299 -.06933869876903305 -750 299 .13959365083543532 -781 299 -.4163864175584194 -791 299 .5630870342232733 -800 299 .7987618868292138 -805 299 .6986421198837427 -808 299 -.8211598998051098 -818 299 -.7913402582538087 -839 299 .758361416908665 -868 299 .15256522082897056 -876 299 -.2414825334197841 -877 299 .42504000258473495 -898 299 -1.0164117482047483 -899 299 1.2343669632125691 -906 299 -2.243205457366093 -910 299 -.42264764828619655 -917 299 -.08956872278023192 -918 299 .9778676838351915 -931 299 -.44463554718064763 -948 299 .0765432357072511 -949 299 -2.525018778794452 -952 299 1.4518679172909958 -954 299 -.7012913425990966 -957 299 -.31210333713764327 -967 299 -.9020375921437684 -991 299 .7554230903327198 -993 299 .5264483911583552 -1 300 -.5297447909927688 -13 300 -.32631241668590094 -21 300 1.0803382583695373 -23 300 -.880226896197108 -36 300 .3440558503187484 -44 300 -.6741337747680219 -89 300 -1.3982677981059441 -93 300 .2550738525534014 -100 300 -.09333816910254095 -107 300 .07176071538358143 -119 300 -.9578591331476419 -123 300 -.7137083825062922 -141 300 .2284108771380423 -143 300 -2.093402668891547 -154 300 .11975126097391586 -158 300 -.10992734073220121 -166 300 1.9062891861749163 -175 300 .5520649221354624 -191 300 -1.6060698230243813 -193 300 -.12161163296429746 -197 300 1.877702708865017 -204 300 -1.5752054694892785 -222 300 1.0294906179971122 -235 300 .5725029514787268 -273 300 .85708523332111 -304 300 -1.426990264463454 -307 300 1.1089388917864613 -316 300 .8031108943862618 -318 300 1.8866913613145964 -322 300 1.470293695095961 -324 300 .08953282058317531 -334 300 -1.0200977518538885 -335 300 -.0683508374055793 -343 300 .3693116265104108 -377 300 -.5349156694640056 -386 300 .4174455762746619 -394 300 -1.1962997435803011 -412 300 -.3532791508439572 -414 300 .9955471216606909 -435 300 .26191477662772694 -440 300 .12211919887288694 -441 300 -.10092840997864151 -444 300 2.144567449661033 -466 300 -.531576290854554 -484 300 1.916256720618687 -491 300 .01583024030140575 -509 300 -.7058734116892335 -518 300 .09731192324258174 -522 300 -1.250179794797692 -525 300 1.8436948337032446 -528 300 -.8276627228084849 -536 300 -1.9700924912536486 -547 300 -.08624821402409483 -559 300 .6073481153457213 -574 300 .08244888102959466 -585 300 1.5099559345897564 -593 300 .08523461564992799 -601 300 .6528885867059041 -607 300 .012391920201727753 -619 300 -1.0528653062307805 -634 300 .06658506802553343 -649 300 1.2478693495989972 -651 300 -.18796765990057065 -653 300 -.15737136638931842 -660 300 -.1791289533236416 -685 300 -.9717729152339716 -695 300 -.6956064957608464 -698 300 -.7393854906703269 -711 300 1.3387988782630995 -734 300 .1861580312367792 -743 300 -1.3638913999265445 -758 300 1.9138257185458702 -771 300 1.8317235422759643 -776 300 .3081165327961276 -777 300 -.37834527165353293 -783 300 .23106545886183893 -784 300 -.6661297629669626 -803 300 .6180576462610741 -807 300 -.4113756387522406 -810 300 1.1760038034369935 -835 300 -.20754578574661536 -836 300 .07546230084420608 -841 300 .6485891083809702 -850 300 -1.3749714050232233 -858 300 .8450684619763894 -860 300 .10729225319465259 -878 300 .4974728959149663 -882 300 -.4926549915694978 -894 300 1.6672174176656882 -903 300 -.9658985668523556 -905 300 -.9921241009069025 -917 300 -.6913824984926707 -919 300 -1.128538723328705 -947 300 .7429094597420554 -949 300 -1.6836835768753007 -955 300 -1.172791323229949 -3 301 -1.1375229172423678 -28 301 -.5807091443366948 -97 301 1.5314033107963168 -102 301 -.424586914458118 -112 301 .16730657353670192 -118 301 1.0829979645545154 -132 301 .8479121657890862 -155 301 .2090644871687279 -186 301 -.7588961096979684 -192 301 -.2580824821628165 -199 301 -.3064231295594139 -211 301 -.32502026438628595 -243 301 .21983496453315246 -252 301 -.32211228194690483 -259 301 -.29243865340004493 -265 301 -.24849759197694665 -275 301 -.8333109981732719 -281 301 -.1907180191018073 -290 301 -.20765955599288827 -331 301 .2816746260377593 -351 301 .5387299279691553 -366 301 -.18651042518762295 -378 301 -.43171750660763386 -380 301 -.45324345829257623 -385 301 .1995171496621942 -388 301 -.9034687447911887 -390 301 -.7855888209239429 -393 301 .5649270768157698 -395 301 -1.0519697969685016 -399 301 -.07949891723539637 -404 301 .8548418829017309 -405 301 -.23754761367139335 -425 301 -.11422199277658551 -429 301 .9784214537464202 -434 301 -.3498317610559444 -452 301 .37953027782712256 -455 301 -.9763645918924115 -462 301 .6110894917637046 -469 301 -.33382698710323266 -483 301 -.4951925811590048 -496 301 .13319438638542722 -499 301 -.45534645141336183 -500 301 .033525546603540936 -502 301 -.480442445771926 -505 301 -.4476289642888879 -516 301 .1843323268962183 -544 301 1.2662624921119556 -573 301 1.110587919695068 -576 301 -.9694017097212044 -577 301 .3269211684628551 -582 301 .5840564841025822 -588 301 -.7683384882999976 -598 301 -.47972173104731 -599 301 -.2675429069499157 -602 301 .040539983464838746 -607 301 .6913890188289404 -608 301 -.14086921334639485 -655 301 -.02662605230309286 -689 301 .2886140207108293 -708 301 .8361971548773629 -728 301 .03305162552132615 -737 301 .5664785219611533 -783 301 1.202685435407469 -790 301 .5108021269385444 -791 301 -.19335733193809237 -792 301 -1.0378814367634375 -799 301 1.4089073017391989 -803 301 .44162734758191485 -827 301 .8157172902269509 -834 301 .16956799282473695 -844 301 -.9447613326975058 -870 301 -.48827398805790706 -878 301 -.5979470971117185 -881 301 -.47054560265051126 -883 301 -.5385458030098286 -897 301 -.3146917858787398 -904 301 -.22330442558137906 -928 301 -.1885730568006258 -950 301 -1.463255292982444 -956 301 -.13626932997016927 -973 301 -.3920936756977076 -983 301 .5329193803423116 -987 301 -.3644338823512484 -991 301 -.0719367764601914 -994 301 -.15622413035878424 -18 302 -1.4414186080995781 -19 302 .3882168082542396 -38 302 .37032599199925625 -57 302 -1.1167898218682855 -58 302 1.0039671494806963 -62 302 -1.397199016991881 -66 302 -.206914118955422 -109 302 .42819316593922696 -111 302 -1.0473698844626576 -131 302 .5759827178681526 -133 302 .05843113759399123 -159 302 -1.6216577321463572 -163 302 .31420506537644965 -176 302 -.1288188554031789 -184 302 .5338498032335287 -197 302 .04367085621114275 -205 302 .26109328440977997 -210 302 -.9677176247107037 -220 302 -1.4588791553812341 -223 302 -1.2753022586258795 -225 302 -1.5028780152984786 -227 302 -2.7778809572649363 -230 302 -.9358910645168816 -239 302 -2.928634407957465 -257 302 .2200112808169568 -277 302 -.5263536693162453 -301 302 .3807712199978712 -320 302 1.337605407251165 -324 302 -.6018448021982278 -325 302 .6905195973763434 -328 302 -.5941770479525769 -340 302 .5941656293359036 -351 302 -.021995557788658644 -377 302 .20380432195416798 -383 302 .2878337445182294 -387 302 -.5573898232932938 -396 302 1.042762705071069 -397 302 -.5520456081195306 -401 302 -.26428272372038775 -404 302 .8129146286964322 -407 302 1.6589253567436728 -418 302 .581912421244897 -427 302 -.2147626690014644 -442 302 .32270582351911514 -462 302 1.5305503156698708 -471 302 -.5436548365677424 -478 302 2.0448476632524137 -482 302 -1.4827816869643389 -487 302 -.9104667169117969 -497 302 .7678306451789099 -503 302 -1.1082965530915319 -508 302 .4419926725569578 -528 302 1.3254713112816268 -530 302 .4487368606732741 -544 302 .6536024944001427 -564 302 -1.441127885041545 -565 302 .03501679657587999 -577 302 .8591731209480239 -585 302 -.8314624886232238 -590 302 .9676371566935522 -592 302 -.4241635078676179 -594 302 .3908766223787187 -600 302 .7498729365514443 -609 302 .9841655337145776 -613 302 .15354710467867208 -627 302 1.4427722231178006 -642 302 .4025709391629146 -649 302 -1.3386716980673952 -650 302 -1.5982685669186487 -651 302 1.5016423120727762 -653 302 1.630632837380731 -655 302 -1.9001536930810699 -661 302 .46117942327661615 -664 302 -.4860885087435528 -671 302 -.8637888817349466 -686 302 -.8248653928918952 -698 302 .13428253206210483 -717 302 -1.1996993357670669 -731 302 -1.3107495831446092 -751 302 .18816466861228628 -757 302 -.7755244438090497 -768 302 1.0965897954927935 -781 302 1.5181778913616872 -807 302 .29565047832000124 -817 302 .21548372395169607 -821 302 -.6331221075943543 -825 302 .9817364545207147 -831 302 -.9305892281508812 -833 302 1.2778392682164563 -849 302 1.0269769416642853 -909 302 -.4589587889801085 -914 302 -.5101749015919829 -915 302 .4836465096422535 -930 302 -.07612906216901681 -939 302 -.17249637057970935 -963 302 -.33125756756052394 -984 302 1.417127535638401 -986 302 2.085424953217722 -988 302 .1899840994853134 -996 302 .181796336740136 -12 303 .5436443245404814 -23 303 -1.9339957464290705 -31 303 .7698904224145431 -42 303 1.9085909203057647 -54 303 .5448207545995458 -64 303 2.1628773324358215 -93 303 1.6459892838672607 -118 303 1.4390312089871649 -120 303 3.003686360301102 -124 303 -.7807841638252649 -127 303 .34978959333974813 -150 303 1.4481212647644772 -163 303 -.3015299251335148 -180 303 -.30105630239865955 -187 303 -2.87460921793003 -194 303 -1.5012255683861566 -203 303 -.1405975259650936 -232 303 .7246515077929362 -234 303 -1.742849731046595 -250 303 .12532507272843665 -301 303 1.172265280409009 -306 303 .24700487791064377 -327 303 .3056369528495756 -329 303 -1.2332019792968316 -331 303 .6129391497985821 -346 303 -.4139227990965303 -360 303 2.519953890350963 -383 303 .1878229554723737 -385 303 .4992954436966973 -397 303 1.2933034721021495 -436 303 1.1610641376027802 -453 303 2.312525378818437 -462 303 -1.9136269373181019 -476 303 .7626492774631699 -477 303 -.8154235474234268 -481 303 1.3515210811439389 -491 303 .8908861413782347 -492 303 1.5678644110641768 -496 303 .27215319722019937 -503 303 1.521557569085306 -508 303 -.2796661483499935 -526 303 .5898965164142334 -539 303 .5309410255549364 -560 303 .561551041976435 -589 303 .7634686515010993 -590 303 -1.6453510802926132 -601 303 .11839662912192349 -604 303 -.8128655307564852 -605 303 -1.5783531860080582 -606 303 .8371066947264706 -620 303 2.125818027526196 -625 303 .14428492609924218 -655 303 .883488604460918 -660 303 -.9403742251382418 -677 303 .6343398008343872 -686 303 .35990135325795514 -690 303 1.752795822798219 -711 303 .049406524849671486 -717 303 .09624529986969976 -720 303 1.0829123502056406 -736 303 .30141017683140536 -739 303 -.6762462140268173 -740 303 1.415498190820321 -754 303 -.2653008563266817 -755 303 -1.4326715929264158 -764 303 .7937647938771913 -769 303 -.8177346324870335 -781 303 -1.3327831007868856 -782 303 .9254434047256033 -785 303 .9502385848482998 -793 303 .4003214660149865 -800 303 -.7778292918551943 -802 303 -1.4977200236457169 -803 303 -.8251100079312105 -806 303 .7261062009491603 -812 303 .09071510696054529 -822 303 -.442324464629322 -825 303 -.38096207503093416 -842 303 -1.6655268962215275 -857 303 .9311903170837119 -860 303 -1.1944965303492512 -876 303 .49822653681189893 -887 303 .03344643892069267 -890 303 1.6809620830212477 -892 303 -1.0837201477681893 -897 303 .14726499549814132 -901 303 -.5634299836902991 -911 303 -.6816555967451401 -937 303 .8172189005930951 -951 303 -1.766901930921948 -953 303 -.26604212478753664 -973 303 -.3667409492130717 -988 303 .16018063639053384 -5 304 -.141738024527238 -6 304 -.0914751347451436 -14 304 -.9220582176521683 -16 304 .5607281110225888 -21 304 .1884244031637206 -34 304 .400312102432425 -36 304 .2698951573803831 -49 304 2.0577220655011224 -50 304 1.5521994535154209 -56 304 -.9086739826699486 -73 304 1.3553992352636843 -82 304 -.7704878917045952 -83 304 1.1745283721411812 -95 304 -2.3338170327873287 -97 304 2.64581170527151 -109 304 -.9413905174148371 -113 304 .15276120663752707 -134 304 -.22364063808633977 -138 304 -.5756458431253353 -180 304 -.25485166447574625 -181 304 .11332836633193835 -194 304 -1.0558655833805677 -219 304 .36452141770485 -223 304 -1.3597821156693302 -226 304 2.4673391591432705 -237 304 -.5668450888092582 -248 304 -.5263880497463543 -276 304 .49408143192372955 -292 304 -1.0559036356165963 -309 304 .8842006980892211 -311 304 -.17489451450548008 -327 304 -.24865810024171023 -328 304 -.8044766065074603 -331 304 -.6499559015176115 -347 304 1.0197997668995544 -352 304 .5543370421375077 -362 304 -.5814767569502307 -363 304 -2.383809095915028 -373 304 -.9577587684299618 -382 304 -.11180974455312083 -391 304 .21639031275587184 -393 304 .3238273538369647 -407 304 -.6449493134049427 -424 304 1.0556706347878586 -439 304 -.4719705575366788 -440 304 -1.5166871221451848 -441 304 1.961356023964557 -448 304 .12795615710192898 -472 304 -.9781685424161023 -475 304 .9210488717388327 -489 304 .7976315134658499 -495 304 1.4782591918534698 -530 304 -.7457346377880864 -533 304 -.29928453988685955 -541 304 -1.712627606890936 -549 304 .6166260344469627 -551 304 -1.6329676364615524 -553 304 -.6688492848265878 -573 304 .8519183929589024 -574 304 -.9123290851381436 -577 304 1.0209027781758484 -578 304 .3522566900931209 -593 304 -1.187727769220779 -610 304 -1.9969248819812833 -615 304 -1.2147549039437426 -644 304 -1.5648578286075119 -653 304 1.369889050499366 -664 304 .5819118822505176 -670 304 -1.006136624421026 -683 304 1.1688124647538785 -694 304 .9565397841359443 -711 304 .423864958148381 -713 304 .09832690232638602 -716 304 .7218424223501516 -721 304 1.5581982127083625 -736 304 .2216426924043838 -741 304 .06436176699213247 -745 304 1.0901172786562456 -765 304 .1954591592374983 -771 304 1.2479672937488666 -792 304 -.5852479151365787 -794 304 1.1027608769535002 -805 304 .1259427077769173 -817 304 1.4747361078821537 -824 304 1.4679769803190452 -837 304 2.4568241724542843 -849 304 .4287187471316481 -864 304 .1302800676485628 -866 304 .7143935084153864 -875 304 .22285407744964922 -887 304 .45804080974083566 -902 304 1.1216914616712734 -914 304 -2.642117322745497 -919 304 .5634811068286552 -930 304 -.3973479611599535 -934 304 -.8261071018574233 -940 304 -.4978380293671324 -948 304 1.848775701902424 -957 304 .3019289227722164 -977 304 -.11610997813624716 -986 304 .6872075409655841 -992 304 1.0396633337933743 -8 305 -.2612702492611551 -9 305 .43150856233036394 -13 305 -.5093687994588201 -17 305 -.3481957141251335 -25 305 -.22354621108622064 -39 305 -.12990362538084904 -44 305 -1.4315479890012188 -45 305 -.7846168445391365 -54 305 -1.7300309573559 -60 305 .7040960018804209 -69 305 .8325198604183877 -73 305 -.8988905449074852 -97 305 1.2478131306259774 -98 305 -.5886541222816372 -100 305 .6581220791662852 -111 305 1.7981557552088314 -118 305 .5255808320666315 -128 305 -1.5329773231579547 -134 305 -.4546536301652774 -135 305 .07598627865309705 -152 305 -.7665228487636432 -161 305 -.43249058304997795 -170 305 1.2283068006454985 -178 305 .5400144060822398 -180 305 1.1492255855662423 -216 305 -.9507002243748244 -224 305 -.7559768263430044 -230 305 -.11131201541397458 -231 305 -1.169415770566633 -243 305 .08414245933148834 -254 305 -.8092338882301282 -257 305 -1.069053533416159 -260 305 .6568762659071553 -262 305 1.2291725645739162 -278 305 -.30077810786867365 -279 305 -.015684101852381116 -280 305 .48788413925479013 -296 305 -.0873835146206433 -304 305 -.16243031796319035 -305 305 .40736575525516633 -308 305 .8741796163282392 -322 305 2.2585363517164607 -336 305 2.228228761928872 -337 305 .09567706081815402 -338 305 -.09158744158695618 -347 305 .5315303229978179 -366 305 -1.764383812658606 -375 305 .22160622603661972 -379 305 2.3982084967452275 -386 305 -.46481813729455757 -402 305 1.6704972658978674 -410 305 -.5109354665239251 -412 305 -.20386770497187814 -416 305 -1.148043265799398 -421 305 -1.310586828815942 -429 305 .29213703425392845 -432 305 -.1248983955643097 -447 305 -.15096819682931195 -461 305 1.820873007515784 -469 305 .007949957336905053 -470 305 .9439483534475975 -485 305 .030334319816476996 -488 305 1.676966115071369 -489 305 -1.0504756184071329 -492 305 -.4920129090988792 -496 305 .0976647101484186 -504 305 1.4121164151918628 -510 305 1.3044445713288515 -511 305 1.2332511967744713 -515 305 .88313797820551 -541 305 -1.1110945157367436 -553 305 -.05539605471268466 -555 305 -.06201624852906894 -558 305 1.686714599184667 -559 305 -.8085925042879005 -579 305 -.21390503494105187 -580 305 -.2731122445672378 -581 305 -1.0854805167255979 -601 305 -.61004992681228 -607 305 .3841450856772507 -608 305 -.1843872040204941 -622 305 1.4273534903985536 -629 305 .9955871553206379 -645 305 .4199358901426387 -648 305 1.000293663851932 -672 305 .1492193379463692 -689 305 .7505680170838348 -703 305 -.17119419405909658 -718 305 -1.8969973979560986 -738 305 -.8643494304773928 -747 305 -1.08540036928282 -752 305 .6371088816327032 -772 305 -.6779228358657873 -777 305 .9980912552594797 -781 305 .6696851592123861 -786 305 .25880884655308894 -787 305 -1.253837002616239 -796 305 .5392286327568536 -803 305 -.2509716900341375 -812 305 -.2230973816826042 -834 305 1.037875883208493 -846 305 -1.1906816243885343 -873 305 -.4931847338231123 -874 305 .14869503751241694 -898 305 1.6575223289596666 -901 305 .6845728168311154 -919 305 -.6575440606128343 -942 305 .2703847337327829 -944 305 .6065217887637737 -947 305 -.06563907598832994 -958 305 .5903754914406316 -959 305 2.1564346736661233 -979 305 .20907394502995205 -986 305 .3041367565102792 -991 305 1.2371931322366305 -10 306 .6386281927124997 -40 306 -.1890975412526914 -75 306 1.1844820156876104 -76 306 -.30323252774310444 -94 306 .37578755750858217 -111 306 -.880596152224321 -155 306 -.13537281254993183 -161 306 -.781874985416945 -167 306 1.1700951496749523 -208 306 -.7393786334431093 -215 306 .35531686954094654 -217 306 -.2990578696633316 -219 306 .1932940187052602 -226 306 -.5230906036934644 -228 306 .26789491653477304 -229 306 .5932386243772039 -235 306 .27538762423195334 -248 306 1.280805942280682 -257 306 1.1047379609855614 -260 306 -.821329354473934 -263 306 .28612966106449655 -268 306 .3625108248064579 -272 306 .08168845049593149 -280 306 -.14547318209113153 -281 306 -1.027927666962954 -299 306 -.1005448880140784 -301 306 -.9571067854642006 -315 306 .9610186837801065 -325 306 .3882750212166723 -333 306 .14540902429301494 -335 306 .37468575084393957 -338 306 -.5384378856292117 -345 306 -.6184407556730032 -350 306 .7070739952791467 -356 306 .21724511857809348 -363 306 .4036766993018619 -369 306 .20883278622148452 -386 306 .1194665961988764 -409 306 -.3688504365087826 -416 306 .15860902334493626 -418 306 -.26603560428467027 -430 306 .5309148392176537 -436 306 .4091356112352379 -443 306 .8156900130348474 -446 306 .9529503411779716 -452 306 .4426091545687131 -469 306 -.21298596274870382 -478 306 -.8306398915904755 -496 306 -.3104769297495345 -510 306 -.7781839984505514 -515 306 -.44680360415363507 -517 306 .025663113182392297 -528 306 .1266504912842657 -529 306 -.07605039643935965 -538 306 -1.48731921209923 -543 306 .15783265341200417 -551 306 -.0724806404271382 -555 306 .45610852104899013 -557 306 -.36268368243174864 -572 306 1.1212637673478452 -611 306 .16918156890678437 -618 306 -.6968145997647555 -622 306 -.2832613533252968 -655 306 .5564171369095765 -659 306 .4332900506821359 -660 306 -.17940026760616234 -664 306 -.2415177883823998 -680 306 -.47175912757540905 -682 306 .7849409896789388 -686 306 -.3013422181599892 -695 306 -.03716866763527407 -721 306 -.121945692352574 -722 306 .8600803576276589 -739 306 -.592756656798581 -750 306 .6896491866251483 -756 306 .39995924823338697 -757 306 .5496807439718396 -760 306 -.12332858880867138 -767 306 -.9100027588542104 -778 306 .5779775837688014 -782 306 -.2570551985847888 -790 306 -.20819953681093809 -791 306 -.35631492594281444 -796 306 -1.0809348936048515 -826 306 1.1774326818368883 -837 306 -.0900534701917729 -840 306 .23294423080697893 -841 306 -.212398114097128 -850 306 .8794938652438719 -863 306 1.0361525032883234 -867 306 .1722146930615013 -880 306 .5820531606086059 -898 306 -.24115917463835157 -906 306 .7646114461422757 -912 306 -.4907527878045381 -937 306 .2505350966995115 -940 306 -.0975715861425342 -941 306 .14267564901852064 -944 306 -.7829346461400358 -959 306 .08310190494306564 -964 306 -.38174030457949804 -977 306 .42007678029318274 -23 307 .5397768540686443 -26 307 .2807564460656087 -32 307 .0746064552290244 -83 307 -.4464532064769428 -104 307 -.41147093055466455 -127 307 1.9233298279321773 -166 307 .6838659677670698 -185 307 -.4053822287254742 -191 307 -.7289868231365475 -212 307 -.2724648836214107 -227 307 -2.0180810867356693 -269 307 -.6109336774800805 -279 307 -.032057111839079604 -293 307 -.12648534106233245 -301 307 1.306017298563943 -333 307 -1.6336744329526804 -338 307 .20823384138760945 -340 307 -.8333384709388685 -349 307 -.8165892305736577 -382 307 .10998649641124286 -391 307 .3836596628765584 -398 307 .045530715978024786 -399 307 -.54234797687412 -415 307 -.30523142903191813 -418 307 .04243484475356574 -432 307 .7372238089690055 -436 307 -.2919065951020204 -438 307 .173278441579121 -442 307 .21313092763474978 -443 307 -1.2509278827345147 -447 307 .3607638368006803 -451 307 -.3235854260691376 -474 307 .3721626107012679 -475 307 .1006588652367956 -478 307 .090935102904139 -483 307 -.05596378203876834 -487 307 .9861199370459175 -495 307 -.5152097423407601 -496 307 .11001682389968812 -539 307 .4147785901083643 -557 307 .23186552875096564 -565 307 1.118269366021092 -571 307 1.3594564058783314 -581 307 -2.03203500463022 -591 307 -.09336005830869677 -593 307 .527647708910106 -598 307 1.600096230297001 -601 307 -1.0024109964118773 -605 307 .7786862328748174 -607 307 -.2612178690106849 -619 307 -.838351230409953 -632 307 .427693092402473 -641 307 -.21042690435168843 -651 307 -1.4797602131932357 -668 307 -.10209990601758578 -697 307 -.6445522767159136 -708 307 .6426402691914423 -719 307 .514661892018963 -720 307 .1455416490183306 -727 307 .9547595912259563 -768 307 .5281648324964633 -777 307 .6868985571331817 -784 307 -.7662023908231329 -789 307 -.6225253743643888 -791 307 -.19392986663544493 -796 307 .45447219048983944 -797 307 .18526447676304153 -804 307 .9723429724781022 -811 307 1.1322725193808427 -814 307 -.18139841782725857 -826 307 -.5647379325214277 -828 307 1.4639102480814676 -831 307 -1.4472621290158416 -839 307 -.24575369929584917 -843 307 .9448506103780824 -857 307 .15976105960391412 -859 307 -.44435712417528084 -864 307 -.5697126352106201 -882 307 -1.0233193638237317 -885 307 -.16519802158389013 -898 307 .6537898704776298 -909 307 -.34891266697849405 -918 307 1.2136265051257353 -948 307 .22934327421970704 -972 307 .3653050372468446 -983 307 1.7302641399188214 -984 307 1.3650558877874266 -985 307 -.6710467173227721 -12 308 .5649539692254323 -24 308 -1.3862078594848801 -25 308 .2884462449251555 -59 308 -2.416320554129601 -66 308 -1.7302241290962883 -71 308 -.5244264750786704 -73 308 .1721284784115069 -79 308 -.5702023202160785 -89 308 .6660601791789117 -94 308 -.6949339225736465 -96 308 2.8583462776862123 -99 308 -2.0802358148959055 -101 308 .6186416132773929 -106 308 -.7895330278376806 -114 308 .9368618148417223 -115 308 -2.723175684626967 -120 308 -.4971253767540464 -127 308 -.31247503093509466 -137 308 -1.044031116841284 -146 308 -.21050898893801165 -152 308 .5131356548717111 -160 308 -.3208479815529038 -163 308 -.4918666750523639 -168 308 -.1731667407023607 -170 308 1.1580818786796778 -174 308 .37255632202009137 -197 308 -2.437835658155353 -221 308 2.523598146345801 -235 308 -.44128271110711426 -243 308 -.28440357581652875 -249 308 .6971349892127879 -260 308 -.4732470982306243 -270 308 1.3098589408970676 -316 308 1.5944075304566905 -336 308 2.8883004227363944 -341 308 .7960790728924202 -348 308 1.1997005286837763 -373 308 -.6657988180757671 -384 308 -.9121411865913381 -385 308 .9355759173136852 -402 308 1.5418057948185444 -412 308 -.6844273600586539 -416 308 -.3026559166801217 -422 308 -.18654497945206402 -448 308 -.47492830034284894 -455 308 .7762696333348988 -458 308 -.7930061341991159 -464 308 -2.4189565536846414 -471 308 -.6762846405038683 -492 308 -.0641592618516248 -502 308 -1.4493999773912885 -535 308 .8628950086409414 -538 308 .46725116422457835 -545 308 1.0541841699849561 -548 308 -.20952762726914914 -566 308 -.22265493996519437 -567 308 -1.0837736625614738 -569 308 .2466042753247938 -574 308 -.7762512606759631 -576 308 -1.047628311017672 -585 308 1.5728122046936837 -587 308 -.6947950368799148 -592 308 .36790398921101186 -603 308 -1.8423352010569034 -605 308 1.0050674295039705 -630 308 -.5480266814346263 -633 308 -.3467208121496416 -638 308 -1.4439501186565649 -653 308 -.08659266083836858 -684 308 -.5875696123434425 -685 308 -.17154551200646367 -701 308 -1.0357472860502879 -713 308 -.033895514079477516 -728 308 -1.4991955516366482 -734 308 .11833264612795831 -735 308 -.3555010124868033 -748 308 .9997357240462204 -761 308 -.40018550981574375 -762 308 .6882693650123155 -805 308 -.09406850221427021 -808 308 -1.6771476237270069 -814 308 -1.1955790180272288 -824 308 .3832907470426661 -826 308 -1.5124663775670388 -831 308 -.3174416807655717 -843 308 -.06310977614525695 -856 308 -.9114662914004281 -864 308 1.1115164571961957 -875 308 .22338461137406657 -893 308 -.9340956554466345 -895 308 1.6573890561880198 -898 308 1.491390577049079 -900 308 .6762666955853691 -902 308 1.1752768799965205 -904 308 -.4714719659321722 -917 308 .16455364076835616 -918 308 .17429960033353806 -931 308 -1.2015922314115532 -940 308 -.7923251551783654 -943 308 .0067760240760892515 -944 308 .384850591889723 -955 308 -.9568450814086956 -963 308 .3889979708645838 -972 308 -.09047797633643606 -996 308 -1.444130942547454 -3 309 -.05527545939867256 -4 309 .15790093182706133 -10 309 -1.008194666566401 -11 309 -1.0902969640064977 -17 309 .3273131354002846 -29 309 -.6837553193828576 -31 309 .07126925047728484 -64 309 -.42276518444927746 -73 309 .628894181230506 -77 309 .7448527116971149 -83 309 .025914177475831218 -112 309 .5034101904067391 -122 309 .015784513343575834 -129 309 1.0072068547765292 -137 309 .19444123671331712 -158 309 .36565513812657807 -176 309 .8007346354664393 -193 309 .5780222945884101 -194 309 .6271989735958212 -211 309 1.5574991457925407 -214 309 -.12948085210940657 -219 309 .8187491569514763 -234 309 .8179466656615983 -237 309 .9769922532863407 -240 309 .7437136168771209 -249 309 -.4922381849786272 -253 309 -.5535105206237183 -268 309 .26393465162280555 -275 309 -.5197695463601133 -294 309 .4534292433665855 -295 309 -.7927607829274396 -305 309 .18175843726860275 -311 309 .278778042815335 -332 309 .2881220286419383 -336 309 -.0772431644523778 -340 309 -.8716430378131366 -358 309 -.1855585090135616 -369 309 .3876579947465548 -381 309 -.4812997370602953 -409 309 .4630993620236761 -416 309 .24817917012464638 -433 309 -1.2153002744879573 -442 309 -.1782122537002125 -489 309 -.0072181055003504024 -492 309 1.7356329098790229 -503 309 -.7688445837271936 -505 309 .9438284350798173 -507 309 -.672980327179101 -524 309 -1.204180307357919 -561 309 -1.6105174686815462 -571 309 -.8786336298635076 -589 309 -.19791374005403978 -599 309 -.007131094987324185 -612 309 -.2342743242402434 -626 309 -.10411950214486035 -636 309 -.18919526685746696 -653 309 -.8167939106518344 -663 309 .5380855782190638 -685 309 1.5543397374372485 -697 309 .9911055865378138 -710 309 -.49954746384397697 -721 309 .1044046556428132 -730 309 -.6525599263064878 -742 309 -.1588419613920055 -746 309 .648786210150097 -768 309 -.633578621394653 -773 309 .9202898591687821 -775 309 -.6834269839293489 -778 309 -1.21160299666435 -780 309 .2766040650083621 -792 309 .7745854384628472 -810 309 .1892109215881389 -814 309 .6141493674592688 -821 309 .4948695016172034 -824 309 .863112431664324 -889 309 -1.2901939302519352 -897 309 -1.2780201709098566 -899 309 -.48576081204857713 -912 309 -1.1339626283697661 -914 309 -.8169348071650281 -918 309 -.33506800958260125 -923 309 .3567371434746807 -924 309 .3859303438813704 -977 309 -.3889192587796091 -994 309 .7221654002662532 -10 310 .848442458784285 -17 310 -.3888161540651829 -24 310 -.4263277429671215 -29 310 .8260429492536561 -41 310 1.2570371400570821 -47 310 -.5092213495003859 -55 310 .9329193848368822 -68 310 .11020902122575592 -87 310 1.066322765109089 -93 310 -.09247087132544599 -100 310 -.8717447715034007 -117 310 .26228972086898206 -120 310 .1300315451315615 -124 310 .22464415308604108 -128 310 .252450987544949 -132 310 .3413323040737927 -161 310 -.583689313071281 -163 310 -.5295070980766403 -174 310 -.017634826758913 -189 310 2.068264339409375 -190 310 -1.3601746225287665 -197 310 .9219054474891533 -202 310 -.7810691377880725 -212 310 .09135262147734363 -216 310 .9289124424656847 -227 310 2.419009431158273 -233 310 -.7517666482052721 -249 310 .38972583368750013 -299 310 .04262078628851803 -345 310 -.1627510137975473 -350 310 .5282996435323088 -361 310 -.2786569313009035 -368 310 -.15119524025227166 -372 310 -.8452433637600048 -382 310 -.24708273636041145 -385 310 .5279172348646913 -388 310 .21767837334626547 -392 310 .25066212823040657 -394 310 .17083869718028416 -399 310 -.7695358269095606 -401 310 1.1270310793997838 -404 310 -.8310409998960742 -410 310 .21588671717131688 -425 310 -.4547710675741629 -445 310 .26824408395232796 -446 310 .8085197027631769 -469 310 -.7225011435320157 -470 310 -.8164215145120727 -480 310 -.14149550280231182 -493 310 -.5417675302388055 -494 310 -1.2222561346090106 -511 310 -1.0158058404472021 -541 310 .6280043953986829 -563 310 -.5774304697514556 -564 310 .00798514891872941 -577 310 -.9444610627833658 -586 310 -.8744069111256062 -593 310 .5952056791630796 -594 310 -.8848322052238934 -597 310 -.4169969267233138 -603 310 .5674421125729429 -618 310 -.4738584191609277 -649 310 -.26259827010313874 -679 310 -.017943817893786476 -705 310 -.07216543722211305 -709 310 -.0515544096122307 -722 310 .2801663648605643 -724 310 .0025256599906499505 -729 310 .19818237940959427 -755 310 -.1445356241360915 -760 310 .7171662746161633 -770 310 1.6929803399596548 -783 310 -.004539544631580544 -786 310 -.2991814986834158 -788 310 .8826017138577968 -792 310 -.04038651891582113 -794 310 -.7731280539830434 -813 310 -.9836221853162735 -832 310 -.22356862622424317 -846 310 .3327957643066148 -847 310 1.2471643947302304 -854 310 -.09269130562777401 -870 310 .30556666588410014 -883 310 -.056517134240296474 -892 310 .5233541584357427 -909 310 .11649606329510237 -920 310 -.48612611536677314 -922 310 .5869411927006107 -924 310 -2.0686435215733616 -942 310 .3440734020778617 -945 310 -.03942132866934139 -948 310 -1.0235113046021431 -953 310 .3134066997363376 -978 310 .13646097078068753 -984 310 -1.2935974646457018 -993 310 -.2586068723240772 -11 311 .2597378896382034 -35 311 -.2528787163252404 -52 311 1.383479537426062 -56 311 -1.728257444916278 -62 311 -2.0333024181376507 -72 311 1.8942874176491504 -87 311 1.0082626094880744 -97 311 -2.2965361852890847 -99 311 -.4317553678930538 -112 311 .2530693350569406 -122 311 -.9531157073637265 -124 311 1.3118911504043833 -148 311 -1.4667485260635966 -155 311 -.8509682718477015 -161 311 .5171221963356627 -163 311 .27444451886401167 -187 311 3.968723901288625 -191 311 .8940528899659914 -199 311 .17571249285073745 -200 311 -.3986405231485663 -202 311 -.6933762140860509 -212 311 .10839788965566007 -219 311 -.9475428572137339 -225 311 -.021532171290463392 -226 311 -.1744725047810043 -238 311 -.24829804878695544 -239 311 -.9898285057377805 -244 311 -.06566787259697601 -250 311 .027816543789013742 -251 311 -1.1983174177302722 -254 311 -.7312349064222001 -260 311 .569868962837946 -269 311 .6195874578678359 -275 311 -1.2346073556614876 -292 311 -2.7126105479843483 -299 311 .18504699961664628 -302 311 .38557428888641426 -321 311 -.3502251849076091 -356 311 .5836735503102397 -375 311 -1.511664267337648 -376 311 2.215599209970191 -380 311 .7083654773572841 -381 311 .2396488099671181 -388 311 1.463592688559868 -391 311 .14577616252332892 -409 311 .13392214790111787 -411 311 -1.275712859429521 -429 311 1.46564507064368 -442 311 -.7610309606747583 -443 311 -.10001122923835953 -457 311 1.0122525303687926 -461 311 -.03998503348694605 -472 311 .0359475171335 -475 311 .12936927222340125 -498 311 .1957510350802633 -517 311 -.851002095875734 -531 311 .404652791929528 -562 311 .5912215846233015 -573 311 -1.0275404572507076 -584 311 -.32474660317605125 -599 311 .4687406213621475 -608 311 1.719828541339266 -611 311 -1.8452431923318329 -626 311 .1156114949060835 -635 311 1.4140673064954643 -643 311 -1.3628026689323918 -644 311 -1.053355233197447 -657 311 1.5989269598825415 -662 311 -1.9713172742495502 -682 311 -1.0518647215783246 -695 311 .019736102154119133 -699 311 -.37373208501232436 -702 311 -1.0230209112037971 -716 311 -1.9662585929854586 -720 311 -.593251237774171 -731 311 -.49233969112928555 -738 311 -.4683371894446719 -777 311 1.039041639429791 -778 311 -1.2400352187295127 -788 311 -.9386186013134786 -802 311 -.08652020588331327 -820 311 -.08467102512058967 -836 311 -.2874402447583106 -858 311 -.9932800305511614 -881 311 .7737934138892126 -895 311 1.7439109089584333 -901 311 .4993568539315341 -905 311 1.6187061574672958 -927 311 2.4656947451061146 -928 311 -.32248712179092365 -977 311 .2041883880937492 -981 311 .5433355562378822 -986 311 1.3947524680167187 -990 311 .3661418206707521 -991 311 1.2028574575322273 -997 311 -.594345338679421 -13 312 .14274700982135471 -17 312 .5948910537388576 -25 312 .4834644086383673 -26 312 .48189710690622883 -27 312 .4951692673275119 -40 312 -.34809694603748925 -42 312 .2678910082964821 -46 312 -.3073277166487429 -48 312 -.8800093039568982 -60 312 -.4544024943926209 -73 312 .07096117962702707 -76 312 .6949791245904766 -89 312 -.48614037415466615 -90 312 -.12435433860813089 -104 312 -.15608503989584138 -115 312 1.0509296855623953 -126 312 -.39582116688307134 -150 312 -.30445533294202365 -151 312 .09521459776906771 -155 312 -.25041142385183396 -156 312 -.3215945176730066 -165 312 -.14640634482565879 -175 312 -.8575658047791798 -176 312 -.17739130930406807 -179 312 -.030690432740740042 -226 312 -.8162796734769544 -248 312 .13576013613647972 -262 312 .04057895631372383 -266 312 .6388647746999495 -286 312 .47363466620051675 -288 312 .08878351466630166 -291 312 -.9229956444801422 -295 312 .06191448084598012 -317 312 .45877395478221394 -321 312 .293816645747471 -336 312 -.838093218150038 -339 312 .822732547508124 -342 312 .4727097366032857 -345 312 .4806962804363358 -373 312 .0492375933255771 -392 312 .869928460797159 -396 312 -.1737940564897756 -398 312 -.2070656231300036 -400 312 .6745841128926446 -401 312 -.9856233997944225 -406 312 -.5692239652595815 -409 312 .2628868021174166 -420 312 .17862248759994073 -423 312 .15945233521787316 -429 312 .15174306371277013 -430 312 .5003629032122464 -445 312 -.5112909533126757 -446 312 .292321135654082 -449 312 -.7688501620664225 -454 312 .19358910028377618 -460 312 -.25561625927265597 -462 312 .2450295356301921 -466 312 .12844197381359726 -483 312 .9159883056469689 -492 312 .4174640032832946 -513 312 -.5177677688957811 -523 312 -.0888080263002812 -533 312 .15487070569562655 -561 312 .6828038059772302 -565 312 -.08129657277588612 -587 312 .5698565532084267 -591 312 .3486077657952894 -604 312 -.06567371511773126 -612 312 .6944430539057515 -630 312 .11356477010380303 -653 312 .457061643030252 -658 312 .7087385749879811 -668 312 .4552874566493525 -680 312 -.15131508818888023 -682 312 .16215348035249907 -687 312 -.33744907368422083 -700 312 .6359360112011939 -722 312 -.40743009271178005 -723 312 .4487993800011735 -734 312 -.6805662002931872 -735 312 .06714519498744619 -740 312 -.7317595033368066 -741 312 -.17271202305094313 -748 312 .7153188755162262 -774 312 .2647730025310104 -777 312 -.7724476323628837 -792 312 -.15827708514393468 -793 312 -.8542361035150093 -797 312 -.531402272189416 -811 312 -.004410126495362335 -817 312 -.026579880703422182 -821 312 -.0249911345657879 -822 312 -.03879491539982115 -845 312 .024032013864338703 -874 312 -.09037591294237514 -878 312 .5481289598102639 -879 312 .5409744014058202 -883 312 .5091297397666792 -894 312 -.09615562891698093 -910 312 -.20364144300366405 -918 312 .43484898637372366 -938 312 -.11750108505036583 -949 312 -.6783002115115099 -963 312 .3077051818835197 -965 312 -.22576439830950637 -1 313 -.017258018618055967 -22 313 -1.1977754447291344 -31 313 .14108152839555863 -59 313 .408350456367394 -63 313 .6078586496563201 -66 313 -.8060743375402553 -89 313 -1.779007371543667 -92 313 1.49628066090352 -102 313 .8047469838578101 -106 313 .04630825731702213 -111 313 .9302335759562187 -120 313 2.3510744252100912 -126 313 .901886553405709 -127 313 -.430502147915816 -128 313 .7292793882430955 -135 313 -.069507613863113 -141 313 1.2963607081645403 -146 313 -1.0625870025245652 -152 313 -.7674941560384341 -154 313 .44738191973569563 -170 313 -.682069125027267 -183 313 1.3000641901811456 -190 313 1.4026557552784489 -194 313 .5499196126799842 -205 313 1.3474599692445568 -206 313 .1639113143195817 -209 313 1.2343194843428926 -217 313 .9142797303425438 -219 313 -.22444473160337014 -230 313 -.7913502876577174 -279 313 .03937320458708832 -295 313 -.3483552631416201 -323 313 -.16434906090035567 -330 313 .6372676995950389 -336 313 -.3069893335952742 -340 313 .06568171251650612 -368 313 -.4718149476760088 -386 313 -.1244726822848099 -392 313 .16152800951534607 -406 313 .014584685409001263 -414 313 -.00013272532487242084 -430 313 -.3998422432186587 -437 313 -.20450684591993298 -440 313 .20469240588956816 -444 313 .990221626878465 -452 313 .832167940832932 -480 313 -.08622642751322371 -491 313 -1.2084281372169192 -505 313 1.2100893520145275 -512 313 -.46449924356079864 -518 313 .46880175197208507 -522 313 .09327462393030489 -525 313 .8509268306711408 -556 313 1.17307032163803 -583 313 -.24875780093042438 -586 313 .7270643799158113 -598 313 .8734042748754376 -622 313 .7531499916985503 -660 313 -.7533668446594796 -667 313 -1.1486544788124424 -673 313 -.7773246344261159 -678 313 -.37810114874185424 -685 313 .5157511308280291 -705 313 1.0683667043866472 -707 313 .2123457030004236 -722 313 -.5262844928568521 -729 313 -.47585224597707215 -782 313 -.18019937854879567 -789 313 -.5652554022350007 -795 313 1.3473338521630092 -801 313 1.0826942439436795 -802 313 .47444826839447624 -809 313 .8629397237990586 -810 313 .6731700534325774 -817 313 1.7279895476823643 -820 313 -.3446989947759401 -846 313 .2615397317114264 -857 313 -.18915262144648937 -871 313 .5375551203910172 -872 313 .24753664111105234 -877 313 1.0570039599667453 -884 313 -.02104907888659284 -896 313 -.4101859865196131 -899 313 .2026331317181317 -904 313 -.663080422311227 -907 313 -2.3924139147867867 -909 313 -.9442900986992447 -911 313 -.8829886349409727 -919 313 -.42765143583805604 -929 313 .48471418318427606 -944 313 .5357655088551297 -946 313 .7756494116086174 -956 313 .23131372424585328 -968 313 -.7492978973440174 -975 313 .3586708439702628 -31 314 -1.817089041875003 -43 314 -.4597566219557027 -44 314 -.21747172149983104 -53 314 1.0179712997822674 -55 314 -.23309874334488165 -65 314 .43015233469210323 -66 314 -.015396247125104776 -69 314 1.0077160708348558 -86 314 -.21374458350806314 -98 314 .6000150223452555 -112 314 .9469021436382595 -132 314 -1.2301964810462982 -167 314 .23975825753782723 -171 314 -3.6205922121487846 -182 314 .7521404689436069 -188 314 -.3569218850811721 -204 314 2.9875575945089126 -213 314 .5059941621707373 -232 314 .24296025325774648 -236 314 -.02109519117261187 -248 314 1.019018978227994 -261 314 -2.0348051516044547 -270 314 -1.2902945411357984 -274 314 2.054929076403664 -281 314 -.02370661884064068 -286 314 -.7314816310315355 -287 314 -.7672392671643611 -296 314 -1.651542008545918 -308 314 1.2337662020582452 -310 314 .5446584077341694 -313 314 -.4374956395468775 -317 314 -.09744172520288312 -325 314 1.5503259280502901 -342 314 -1.0688050411670846 -352 314 2.580101892379156 -360 314 -.04906337225864432 -368 314 .32359119091281446 -389 314 -.2722481403906814 -395 314 -.7460842762381992 -404 314 .42985155553281523 -420 314 .5367950667215322 -422 314 -.615908304776798 -428 314 1.447120817545317 -430 314 1.2177190456524103 -432 314 .5906971714748566 -451 314 -1.4198001290008737 -452 314 .4377316874724365 -453 314 .22725345691883406 -483 314 .12210177638395092 -490 314 1.106434378348864 -515 314 .7776030657671484 -523 314 -.5445992030466125 -529 314 -1.0097614291706303 -540 314 .5676873225833816 -555 314 .9896506433737129 -558 314 .33307629220703105 -559 314 .6308763724887025 -600 314 1.8031159306763447 -604 314 -.5504174450242371 -609 314 .9643726794730759 -623 314 1.4758289762458623 -662 314 -2.402181576221353 -664 314 .8692060910114005 -678 314 1.1373098780458815 -696 314 .5944074730785206 -701 314 2.3945892201239705 -711 314 -.4817720403028398 -731 314 -.8151239902263457 -743 314 .7813931723145731 -753 314 .9442319544215272 -776 314 -2.2736518612797916 -779 314 .8699635803373823 -781 314 .01001185840242013 -796 314 .17601121848519752 -824 314 1.0584120135035315 -830 314 -1.2265594630000507 -841 314 .6556970984851633 -897 314 -3.079511302751312 -909 314 1.9509716840918616 -915 314 -.8206139423040529 -920 314 -1.8373558766662323 -924 314 .39982720541524547 -934 314 -.9886445866418025 -956 314 .43801347462603835 -960 314 -1.1252873283123002 -971 314 .6065288418830066 -978 314 .15437216350687336 -989 314 -.3873419717822897 -992 314 .5647222996871359 -998 314 1.25088699852479 -5 315 1.4720099693533273 -8 315 -1.2220606336474935 -15 315 -.8001903213091138 -37 315 .3931348649723956 -48 315 -1.9730128050375102 -59 315 .7936488317141136 -66 315 .9521546331212379 -78 315 .3711111592896176 -87 315 .9240504808093022 -93 315 -.591403892258982 -96 315 -.7636278542791306 -115 315 -.09018537048047963 -154 315 -.8597547598583603 -172 315 .817620356442802 -187 315 1.6955187344438347 -189 315 .14299668327009646 -190 315 1.2696056881339206 -194 315 .1696049372000044 -197 315 2.3522320827992047 -209 315 -.7447809830672031 -218 315 .05383390298273624 -236 315 -1.0518623481276537 -267 315 -1.7062137687992784 -271 315 .036709141201724055 -275 315 .8038756633142479 -280 315 .462331013686415 -303 315 1.0432420636905502 -309 315 -.8787766103055188 -310 315 .21164478618394192 -314 315 1.725535363542356 -325 315 .07916308267953673 -333 315 -.058835672848822136 -344 315 -.5148166475770284 -363 315 1.0132787092566549 -377 315 .2592714638087513 -386 315 -.1467143448914539 -408 315 1.6364929304788818 -435 315 .5058903005826357 -443 315 -.026369580912736074 -471 315 .021464687314046313 -478 315 1.3358651764158704 -483 315 .6843935392746716 -494 315 -.9848231251713786 -498 315 -.798874834199371 -500 315 -.37796755133089127 -508 315 -1.1420980615377356 -509 315 -.21273802467109204 -515 315 -.6630376426062107 -517 315 -.8099611840322637 -524 315 1.3889421325461864 -528 315 -.7255504476971856 -531 315 .35392450995195013 -533 315 -.5132946707314474 -546 315 -.8502610286594114 -550 315 .1803057173882883 -554 315 .2180170454749495 -568 315 -1.2229185764183803 -583 315 .02084363304209698 -585 315 -.5357798531063056 -589 315 .1307104976877443 -596 315 -.8294426356176499 -611 315 -.7276920579965676 -622 315 .5587500000550935 -623 315 .38106613345836376 -637 315 1.5233625557634483 -641 315 -1.155315432225938 -642 315 -.8488542027239511 -648 315 -.1605169445182974 -651 315 .7023893370395193 -655 315 -1.4497326137322966 -666 315 1.1287721397402195 -667 315 1.3320723478667924 -673 315 -1.0698242388240067 -675 315 -1.2003087631348828 -677 315 .07466635798878635 -679 315 -1.204541054701829 -697 315 .18785214840507675 -720 315 -.12541683860983316 -723 315 1.261330408755059 -727 315 .21343125042046185 -728 315 .40428240950885797 -736 315 .18850862130574023 -742 315 -.19682777415773464 -750 315 .7244198129494537 -769 315 .3240717938751778 -776 315 2.000422047406209 -809 315 1.5664273024778697 -825 315 .6173200007908777 -846 315 .540477813062807 -847 315 -.3444534964078015 -850 315 -.6816889912110626 -858 315 .15479797390022482 -871 315 .7234085735680404 -875 315 .4473539042720924 -881 315 -1.0911661666258134 -883 315 -.32901720705372545 -887 315 -.27647965544009434 -891 315 -1.4584768448380552 -924 315 .11629462901897611 -949 315 .8753873448522425 -961 315 -.5437666289963212 -981 315 -.4235204226395934 -11 316 -.5960943573903417 -25 316 .7385520878597684 -30 316 .4477594384335394 -37 316 .05817220073548911 -42 316 .4537110429558643 -47 316 -.603125428209134 -49 316 .2815953407306742 -58 316 -.18966906611506842 -61 316 -.6849991354420036 -62 316 .19436278105048554 -74 316 1.0017836946804328 -122 316 -.41245946273033374 -157 316 -1.499031546658635 -165 316 .6109781202976989 -166 316 2.221279346037271 -169 316 -.10646832747354369 -179 316 -.04661279661246817 -194 316 .17760115966964513 -237 316 -.6518159437875669 -289 316 .36762422844289366 -291 316 -.4939880792437017 -312 316 .4926298411811997 -322 316 .26246189546219567 -338 316 -.34653343201788434 -352 316 -.8322274500612856 -358 316 .47510547314538515 -360 316 1.0330639680401954 -367 316 .5589728041138127 -372 316 .5527559118210474 -378 316 -1.334844851814975 -379 316 -1.4202134695938118 -389 316 .31188400142127237 -395 316 1.6367627893685115 -403 316 .5400127265957265 -415 316 -.2511343330390589 -464 316 -.10651029477655659 -465 316 1.6940977233393473 -475 316 -.24995895195351236 -483 316 -.14623703115088316 -487 316 -.6232297557700546 -496 316 .33552193496816607 -504 316 -1.0243590038888812 -521 316 .8076492863823215 -523 316 .6443755618256862 -525 316 1.514892209481274 -528 316 -.17560619885284345 -538 316 1.4134381701980128 -539 316 .018430121557810056 -546 316 -.26212566725976066 -553 316 -.3897613606299558 -584 316 .15881125780948616 -585 316 1.60081946532455 -618 316 -.3994192707070141 -623 316 -.9298551133502622 -627 316 -.43527748503555297 -628 316 -1.1089579312000553 -639 316 .3739295126611135 -640 316 .8374950266778068 -646 316 .1717261393480783 -647 316 .20299094619435729 -651 316 -.6728518811549375 -661 316 1.4866638147229756 -683 316 -.38543760298901175 -708 316 .6689590837550622 -724 316 -.2575211328207455 -725 316 1.9836997810788 -735 316 -.9842955843645961 -750 316 -.6973911443731347 -757 316 .08984566434232454 -764 316 -1.3197001422065022 -783 316 -.837965256235277 -786 316 .007705484389340721 -792 316 .15243601154099967 -811 316 -1.241394405998653 -827 316 -.8100317885231536 -845 316 .19535744440846278 -860 316 .5311941280510446 -869 316 1.280541097104105 -875 316 -.44192499543926855 -887 316 .2492294040921739 -893 316 -.6496029769714063 -904 316 -.6466269166815358 -905 316 2.2636171148454327 -918 316 -.5308290478006858 -931 316 -.7298752448626539 -939 316 -.7001182763564044 -941 316 .01500209155016767 -945 316 1.0088975428317886 -957 316 1.122834865060622 -962 316 .5265059920750136 -974 316 .48436075730573086 -988 316 .4176910821244514 -998 316 -1.3929371173155574 -6 317 -1.407254547888513 -31 317 .17640882077019301 -32 317 -1.2425265280509967 -37 317 .678140296790368 -61 317 -1.3897997967230917 -64 317 .2531898838155847 -74 317 .9275090423029642 -80 317 -.6844165055818536 -85 317 -.4534042354511094 -91 317 .008125289195792078 -106 317 -.6327054372085861 -107 317 .3777017321153456 -112 317 .1049774971328061 -113 317 -1.1172850831100678 -118 317 -1.1228606267689791 -121 317 -1.0550586204082721 -125 317 1.4487390059054146 -130 317 1.0176339177825888 -132 317 .03844136449596539 -147 317 -1.0165768471105165 -150 317 .0176428334481617 -157 317 -.008269225109761219 -166 317 -.1377575389664618 -167 317 -.3815305435942765 -204 317 .6390451042010833 -208 317 .3676416734909919 -223 317 -.4695854670239426 -252 317 .3376816265378162 -261 317 .16869167930438858 -266 317 .514334159376701 -274 317 .30773972283940865 -275 317 1.1297736073876912 -279 317 -.938528710382549 -281 317 1.0525665815692793 -347 317 .5684365759100976 -348 317 -.8735010988095826 -358 317 1.110375775823614 -363 317 .851646392626694 -369 317 .06537884484348712 -372 317 -.8005223837848418 -388 317 1.2311213564440973 -406 317 -.3985010312980041 -412 317 .16392482681805504 -420 317 .329413918050693 -428 317 -.15959088702411062 -431 317 .3611505622585308 -432 317 .731904593108879 -451 317 .18963891344095604 -462 317 .9854114926150824 -469 317 -.18390907959267813 -470 317 .4298765641351456 -487 317 .36605332570721083 -489 317 .13999054490474883 -497 317 .8761318347346975 -499 317 -.22626883468102496 -530 317 1.030109853769431 -538 317 .009703929177327764 -542 317 -.4181633249146262 -558 317 -.2257085721398742 -562 317 .4756921680818134 -563 317 .4958225806563258 -571 317 .9249554761733348 -614 317 .29366525735077387 -639 317 .719030833008238 -642 317 -.04669078326665799 -644 317 1.3247935970387141 -652 317 .48087909949766316 -654 317 -.653920848533908 -656 317 -.15777415018405683 -660 317 -.5553742940111164 -663 317 -.33084044394191203 -667 317 .40587962029955 -673 317 1.123572914785037 -678 317 -.6742180152726923 -680 317 1.027408721636825 -687 317 -.18346449633399076 -693 317 .6401388362331818 -698 317 .5075660973808418 -703 317 .5000168017660847 -729 317 -.05030226133513675 -742 317 1.5629968252504505 -756 317 1.3983990366646746 -764 317 -.276099934921088 -775 317 .09416311222545828 -780 317 -.5016077511888112 -782 317 -.6696610299468311 -795 317 -.4668036950792283 -806 317 -.025811482913878303 -822 317 -.4648395708877016 -829 317 1.0291517533670391 -832 317 -.6877058214744339 -837 317 -1.175011014256421 -843 317 .49924820740771253 -858 317 .5365260574288936 -864 317 -.9121417437903665 -866 317 -.5956957838381498 -868 317 -.9361908607668444 -886 317 .062117721386566405 -894 317 -.2846399768379887 -897 317 1.2251088642233299 -903 317 1.8510062166199874 -906 317 -1.1854377338884758 -913 317 .44983621783428085 -916 317 -.6975987851588576 -921 317 -.7523389750092254 -922 317 .6267213907602427 -937 317 -.4278292518865042 -947 317 -.4711959904241501 -974 317 .02650531612735605 -976 317 -.5589936412046868 -978 317 .920012043308336 -7 318 .03217024967031694 -11 318 -1.4668484369203183 -25 318 .7186048732969459 -29 318 .6652855183036915 -36 318 .9164323680342683 -44 318 -2.0378603107147453 -53 318 .577452174000586 -55 318 .4449260310682239 -57 318 1.664657857756783 -77 318 .1712699209784019 -94 318 .18938859076557657 -97 318 .00059579869202811 -98 318 -.4666878629018686 -102 318 .516812238931857 -115 318 .3047776041138688 -117 318 2.789325997493126 -126 318 .8489277294339602 -130 318 -.7138018112607399 -133 318 -.5573204996581225 -146 318 -.8839342065492416 -151 318 .19888931528347412 -170 318 -1.9254683207507444 -190 318 .41275836060373217 -191 318 -.3173861481568331 -203 318 1.140740831243148 -214 318 -.6030926510288176 -217 318 1.2824324003932086 -220 318 .6048392482053779 -226 318 -.4682395134808549 -229 318 -.40230637876816505 -237 318 -1.3585490788224475 -255 318 1.0068373411670948 -273 318 1.539943100128294 -294 318 .37796130137513767 -305 318 -.9861193487510634 -306 318 -1.2207629890763865 -308 318 -1.491644984550652 -324 318 1.5372580900441224 -328 318 1.8028357948552547 -338 318 -.5190191636516519 -363 318 -1.916911213934976 -364 318 -.8404923698554266 -374 318 .3851355526742567 -383 318 -.18437844201987003 -400 318 .6277143623792623 -404 318 1.227834524887904 -405 318 .3195952674054295 -430 318 2.1855259767453945 -435 318 1.9849818827857324 -441 318 1.2149149166012954 -444 318 .8827085060507172 -448 318 -.9356099749308586 -458 318 -.9157068493326888 -465 318 .3915327590480684 -471 318 -.8901750054300575 -479 318 .49912292388807555 -503 318 -1.5692590324423334 -542 318 2.0947416002480947 -559 318 -.817798920900862 -565 318 -.2814953607062225 -592 318 2.003199792083916 -595 318 -.6901537589157818 -608 318 -.809605719809456 -611 318 .5497097887134546 -615 318 -1.4528502789840376 -616 318 .6970428649060985 -651 318 1.993277524640682 -663 318 .6390186780110366 -668 318 1.316945673453403 -671 318 -2.6435574575614385 -727 318 -1.4293355615794556 -734 318 -.9696271107955347 -745 318 -.487543678313644 -747 318 -1.1597146310270654 -761 318 .9016600016540119 -764 318 -2.021084801380647 -791 318 -.0071211557998913655 -797 318 -.3652685269551975 -823 318 1.430282922535719 -829 318 -.5950950258340535 -832 318 -1.1349899458376422 -854 318 -.610597587085257 -858 318 -.49162602774294395 -860 318 .5752098792183362 -886 318 -.3682507397934552 -892 318 .558114512485991 -895 318 1.80655536032048 -899 318 -.0907712299192171 -913 318 -.12229384510900118 -918 318 -.16091297905277593 -928 318 .383134464819779 -929 318 1.1178483088887126 -933 318 2.584119466572621 -937 318 1.110816221970993 -945 318 2.698230894705357 -960 318 -2.054837492619476 -967 318 -.6808135451012319 -982 318 .6147887093116674 -988 318 2.342725311578629 -991 318 .5091478608638853 -992 318 1.7707936637179056 -996 318 -.18909707354162644 -1000 318 .38174436271755785 -20 319 .8982982045416622 -32 319 1.3883314437214032 -37 319 -1.1536690335839315 -46 319 .8276617336068051 -50 319 .6690064965130552 -52 319 1.096815035684747 -61 319 -.7252399274385818 -78 319 .2686650195952253 -81 319 -.47334514873317735 -86 319 -.8238252560522832 -92 319 -.5325858073262857 -102 319 -1.7948638752582222 -112 319 -.717917476118996 -149 319 1.8365510969881869 -154 319 -.3168778799701327 -155 319 -.6121146956408922 -156 319 .2624639330931518 -164 319 1.1756156403783566 -167 319 .8904980055054503 -196 319 -.45745398912886276 -205 319 -.5617364201273648 -206 319 -.2682020547267177 -213 319 .28512256784666035 -224 319 .25958143722474397 -245 319 .8835910132265302 -262 319 .7673573484481763 -265 319 -1.152273664059273 -276 319 -1.8065319508277533 -284 319 1.3543141879045797 -285 319 .9214262829367765 -293 319 -.0712347033280135 -297 319 -.772727472357337 -318 319 .6163101483423601 -323 319 .2952532432969793 -325 319 .305455896384113 -328 319 .2701956961478983 -331 319 -.17335056932381201 -361 319 -1.6349170723342215 -380 319 1.055513503848284 -389 319 -.3695698230370746 -425 319 1.599642249653705 -431 319 .22953145383227203 -446 319 .34494304054680036 -451 319 .4363814548678545 -454 319 -.1985098710657565 -471 319 .3950553602914526 -520 319 -.03142222204488679 -523 319 -1.1274917738835395 -535 319 .5445491080642224 -543 319 .0013521553997443772 -565 319 .4898345060261302 -567 319 -.8715046746440627 -570 319 .706061106401301 -573 319 .9974438127854715 -595 319 -1.6101196692538042 -615 319 -.9943473254982993 -624 319 -.8504231772074187 -627 319 -.23918317206954828 -640 319 -.39481430263156564 -652 319 .05715588281346704 -663 319 -1.2765414794022933 -664 319 .7208952206865917 -673 319 .19007258440385125 -674 319 .43849714118967975 -675 319 1.531600832004998 -686 319 -.44746236693865504 -688 319 -1.0186567525621775 -689 319 -1.068001122685438 -724 319 -.6644543016635743 -746 319 -.7727075000100667 -750 319 .6592801206885319 -753 319 .2779314586102055 -756 319 .7622471000491994 -759 319 .1501519718897053 -797 319 .5739104805129112 -799 319 .5805532664591031 -813 319 -.33472269524306386 -836 319 -.22065108197060282 -853 319 1.1692050824605595 -858 319 -.12963397226470386 -859 319 -.5447829403296576 -874 319 1.3943792655889902 -886 319 -.16085116136059768 -895 319 .9097937178273938 -904 319 .6261657625282887 -919 319 .5170428606283284 -930 319 -1.921628060802422 -944 319 -.5346392001366278 -946 319 -1.1460911530137998 -955 319 .37120474013979976 -959 319 .8092916482024107 -991 319 -.26318895128244946 -7 320 .49326933193361744 -9 320 .4076692573775646 -11 320 -.3252924302977473 -12 320 -.3388102773265331 -25 320 -.5145992042371252 -42 320 .3106836506250934 -43 320 .6204117218297955 -49 320 -1.1263624882426122 -52 320 .5566580382717874 -57 320 -.6275906095418258 -83 320 -.2950260461505302 -95 320 .26162430646285156 -124 320 .04517663607590062 -141 320 -.35848995368306424 -146 320 .691830022589755 -160 320 .41171909929650047 -167 320 -.2834195633005796 -170 320 .3545520441718366 -195 320 .6338588653817848 -212 320 -.9431722104862242 -216 320 -.4671424872695088 -231 320 .4935400755045547 -235 320 .8099398831692903 -236 320 .2006287916374534 -243 320 -.7521646423592324 -271 320 -.33639946661452297 -282 320 .29595556614695945 -286 320 .0006798469019051179 -294 320 .611122012047994 -295 320 .11148149744569412 -302 320 .21270117614041995 -308 320 -.0140895860705052 -331 320 .3015293774335013 -344 320 .34497997057941654 -352 320 .4737314255819247 -353 320 -.5086618012551473 -355 320 -1.208104191599395 -380 320 .5330142213376374 -387 320 .07523524925607272 -432 320 .21533857674548207 -440 320 .4375768357262716 -441 320 -.5316286011727359 -445 320 .2685868197075413 -447 320 -.27895070368172586 -457 320 .44567614033752484 -467 320 .2202862434732211 -480 320 .6620997221697555 -490 320 -.39808289031165794 -497 320 .3371498313489372 -518 320 -.2081957377360334 -537 320 .6138009196864138 -538 320 -.948489755054593 -554 320 .18980436115048016 -561 320 -.6432798021764257 -573 320 .03156058947925411 -577 320 -.1376487768059312 -582 320 .2234877952021699 -592 320 .4334901531725498 -594 320 -1.353324475570662 -596 320 -.0697633162906245 -602 320 -.10944743462652236 -610 320 .054804296700580846 -613 320 -.3188349135579984 -631 320 1.2507143923610662 -644 320 -.7941500963030944 -650 320 .31342165986327897 -665 320 -1.405385205828442 -674 320 -.4458928299121634 -691 320 .8572655203503257 -700 320 -.43096623831031405 -702 320 -.4523069319504158 -712 320 -.46800933913283993 -720 320 -.6969674728007645 -729 320 .0897054644970662 -742 320 -.20082379640239456 -765 320 -.6403965343610466 -766 320 -1.8376626091000772 -779 320 -.7466656943418614 -781 320 .3996057899434008 -790 320 -.5200112645950143 -798 320 -.6143004110361445 -816 320 .6227560066512572 -824 320 .012479930791239349 -830 320 -.23326099884296728 -847 320 .0916651094024334 -856 320 -.9283820895121717 -873 320 .7731747785404792 -880 320 -.24480000477450226 -892 320 .7844747176603082 -894 320 -.08592565080252335 -910 320 1.1096538146135233 -927 320 1.874104610596059 -929 320 -.8494505032084012 -939 320 .43631467774181537 -943 320 -.6456961104853844 -945 320 -.7409600753288147 -953 320 .2778031426485199 -954 320 1.0628427491453514 -967 320 -.7107713304392865 -971 320 .9710946345311399 -986 320 .3708117014923843 -995 320 -1.2900464778342375 -12 321 2.1701604091973086 -15 321 .9042061509407231 -31 321 1.7905620728190754 -33 321 1.3000304729965504 -53 321 -.6868936747918225 -61 321 .24070946284825787 -93 321 -.13825768138529457 -106 321 -.5691221431443133 -110 321 -.5667516700874284 -127 321 -1.4674176495389661 -170 321 -.5487997257058328 -186 321 -.6773056978468646 -191 321 -.8490874080362492 -194 321 .7702955942512191 -221 321 1.0811900026862256 -237 321 -.1826251497500497 -251 321 .40674287716752927 -258 321 .9869888752332796 -259 321 .09999786986919355 -261 321 1.0323643208201787 -263 321 2.291099896528617 -268 321 1.023367994876967 -271 321 -.3977844421802099 -278 321 .255250164514731 -282 321 1.6683315600081285 -291 321 1.5037798118589243 -292 321 .3261892814276717 -301 321 -.0742748345799964 -302 321 -.2567338149662974 -308 321 -.14242726156120328 -315 321 -.8660406736954765 -328 321 -.15768251862700133 -329 321 -.3390292574321775 -333 321 .6989774954317791 -335 321 -.9471299325926388 -342 321 1.142282174951096 -357 321 -.9898764109863146 -363 321 -2.030222862422982 -379 321 -.04302467446585101 -381 321 .29182479369778663 -396 321 -1.7082600194481057 -406 321 -.622400208114526 -443 321 1.226908789916854 -446 321 -1.445668122003996 -455 321 1.4993386603263847 -483 321 -.8652681489493861 -486 321 -.27051405499236236 -490 321 -.41942315493517657 -511 321 .6670312546398798 -534 321 .6404371732550311 -539 321 -.5243992932900602 -554 321 -.7267152259442997 -559 321 -1.668418713124305 -570 321 .7844244458144789 -576 321 -1.634512142528117 -586 321 -.3908028110722729 -599 321 -3.0501402581839714 -620 321 1.0840122698312833 -627 321 -.348055949269618 -650 321 1.2653385918872335 -657 321 -1.4489354500240528 -665 321 -.13690807026915106 -671 321 1.2112477696448694 -681 321 .12600978657886294 -704 321 -.8243569985478176 -709 321 .11859161579505297 -713 321 .9511225456288506 -717 321 -.5788802944227652 -719 321 -.8671605785315848 -726 321 -.28417499765705645 -730 321 .13003395502577234 -739 321 .7462289432028448 -748 321 2.634215946499493 -752 321 .18910966080735397 -758 321 1.6435806331039888 -762 321 .6784138101754082 -769 321 .6324657770248501 -789 321 .8730161448545332 -791 321 1.5904870551714962 -793 321 1.9845045989995518 -822 321 .5814237194359457 -840 321 -1.1958991348914656 -858 321 -.6576238435396999 -900 321 .17750085188145273 -906 321 .05030976772897766 -908 321 .5284782607258364 -909 321 -1.7792244089718707 -914 321 -1.110280235681285 -923 321 -.06829228663449582 -928 321 -.7168188093980512 -937 321 .41488776315623777 -953 321 -1.706818465694702 -964 321 1.101774533734621 -969 321 -2.705674922048161 -976 321 -.8297139339631703 -981 321 .22724772509624747 -9 322 -1.2996719161722041 -65 322 -.7804614923915769 -67 322 -.0631866906575084 -83 322 .45354623656976345 -91 322 -1.5574936199447684 -95 322 -1.7816362082767594 -96 322 -.9281675739613253 -106 322 1.1689248656793703 -123 322 .9695947717539563 -144 322 -.6347715185605604 -146 322 -.6010336051902508 -157 322 1.190408766799422 -175 322 -2.581207104100183 -200 322 .3412082363611481 -207 322 .15216315923926024 -223 322 -.5590423326559779 -230 322 -1.2375607129589685 -238 322 .10663259367692018 -251 322 2.117422037335758 -281 322 -2.7099378925944073 -298 322 -1.301834106006576 -299 322 -.8844503585642871 -302 322 -.973263760072048 -304 322 .9898182882422899 -316 322 -1.4647667570547693 -319 322 .5374963056334282 -321 322 -.7366659347616356 -328 322 .892926703942609 -338 322 1.4601613080512352 -352 322 3.1916741161040143 -368 322 1.5780229088599067 -374 322 -.20838163225916329 -384 322 .5170133730636017 -385 322 -1.8989132596500076 -386 322 .331285592321391 -391 322 -1.7029025862101288 -398 322 .3488478704922403 -417 322 -.8930738361155467 -439 322 -.08200468221349701 -444 322 -1.4839189542258533 -490 322 -.5919820445980848 -504 322 .17571408717621734 -509 322 1.066651601248446 -516 322 -.5253862842389462 -523 322 1.67056276463866 -525 322 -1.7798753009482584 -526 322 -1.264670224716606 -537 322 .14715362094770285 -553 322 -.23436277122279545 -558 322 -1.8981611786054908 -571 322 .575440489744168 -572 322 .06966953411724079 -586 322 -2.4026067388897436 -622 322 -.898150145985577 -623 322 .030834814277431274 -625 322 -.9360068344371453 -632 322 -1.2704551665218442 -642 322 -1.6780414262287613 -649 322 -.41223600573242786 -652 322 .20085839207610515 -658 322 .6194359739005677 -661 322 -2.4396737786766596 -695 322 .2715323533496749 -697 322 2.046130837188065 -698 322 -.37570306341258536 -703 322 .5548864325892224 -704 322 .4502611898128477 -725 322 .1138469438973646 -738 322 1.492857589072674 -755 322 1.510169268322161 -760 322 2.933922605603052 -762 322 -.43073812340151163 -774 322 -.38770333476077196 -779 322 3.404872028422124 -796 322 -.021365658240175556 -799 322 -.10358958224190205 -808 322 1.6876908284866783 -821 322 -1.5338148695597538 -862 322 -.143402576132324 -869 322 -2.603172115150072 -875 322 .3848622732466246 -876 322 -1.1302254805065732 -881 322 -1.9344841904642252 -883 322 -1.356873277686917 -886 322 .3690986628759034 -896 322 -1.54541443243293 -897 322 -1.2042869606581827 -906 322 -.16852339391726912 -908 322 -.21771020074511058 -910 322 -2.7015680791660452 -911 322 -.9386185090594543 -925 322 .8567092033727939 -926 322 1.2115887855073357 -928 322 1.799648712646836 -941 322 -1.3175565417441446 -943 322 .008545342042701774 -954 322 -2.2634790304138934 -962 322 -1.2526572116931471 -966 322 -1.0000822331266903 -972 322 -1.6474429817150167 -986 322 .7001599874805048 -991 322 -1.712416853652963 -994 322 -.47816739266925945 -43 323 1.1624370308414218 -45 323 .019322378447817392 -54 323 .6080586383374893 -55 323 .5625576912926608 -56 323 .3112190266184203 -60 323 .42865474480503224 -91 323 .09694599522709091 -102 323 .687634790278226 -105 323 -.24714463896833858 -129 323 .5283170817513361 -133 323 -.7094492959020687 -135 323 .6997786491813419 -142 323 -.1681860955731434 -146 323 -.4362806445288828 -150 323 -.2011594506771367 -154 323 -.20035642541476076 -168 323 -1.2226044590967873 -190 323 -.8469745796962159 -192 323 -.01193127067393409 -196 323 .4756243755878277 -197 323 .454891882563059 -208 323 .3515428578003763 -214 323 .498701200306506 -217 323 -.4810166142135794 -233 323 .40072795302003617 -236 323 .6051668229275315 -237 323 .26824295720613117 -257 323 -.05536510173336205 -261 323 .6605384634245095 -262 323 .15877994830847203 -276 323 .8097302879905897 -280 323 .22404385615965783 -285 323 -.13505408672935407 -289 323 -.11577095946688096 -324 323 -.1155622631670061 -340 323 .4920036105538399 -349 323 1.4340872646319989 -351 323 -.21944183270931095 -355 323 .02720438823088854 -366 323 -.045151495180481754 -377 323 .24785906683081846 -393 323 -.10466190101503645 -398 323 -.162897293517133 -403 323 .8835620370604094 -411 323 .0037294717054596888 -451 323 -.7764044080039538 -460 323 .5539027160621739 -464 323 -.847859065435578 -475 323 -.268258558648204 -484 323 -.07644375111542723 -485 323 -.41225369185501787 -503 323 -.5807748339060448 -511 323 -.5519490359208851 -527 323 -.9595698991492336 -534 323 .5170649448848281 -545 323 -.23250400983651873 -548 323 .6435480854732148 -552 323 .0706056403532836 -559 323 -.16811145890418155 -573 323 -.8216388584560267 -574 323 -.24575295695715382 -577 323 .7179471214956443 -582 323 -.17922927133331898 -588 323 .7734280933497641 -594 323 .046519456385298495 -611 323 .00521490719724106 -615 323 -.1675566826929311 -632 323 -.2203599746204487 -649 323 -.06667980962433637 -656 323 -.04528887423919088 -661 323 .6118362577081 -671 323 -.7590391695407763 -679 323 .2371393674292737 -681 323 .0380080540900964 -699 323 1.0843667099174457 -709 323 .2356191976433406 -718 323 .5088149378443043 -723 323 .2702879219476627 -727 323 -.5025870806946791 -742 323 -.3361023345220817 -756 323 -1.1766158992115332 -777 323 .44303421663801 -778 323 -.35161364424368574 -782 323 .2903057382321458 -801 323 -.5107959404404904 -830 323 -.1493019555688878 -837 323 -.2485555865896319 -851 323 1.0428766634192341 -858 323 -.9151315688476878 -859 323 .4432488349872258 -868 323 .33054181846458 -891 323 -.5013778930180354 -897 323 .050980869323707795 -911 323 .23903900589747953 -930 323 .5365659889373565 -931 323 .17870149094971816 -964 323 -.6494311205453613 -984 323 .2961352392137586 -987 323 .25905693436264055 -20 324 .3871462788047155 -53 324 -1.2892015709735327 -78 324 -.6127645147061973 -115 324 -1.9847482399840137 -117 324 3.3243014477211945 -122 324 .47511847894723325 -124 324 -.9734481156234133 -131 324 .4253165153916962 -137 324 .2131804920093174 -139 324 -.026520834125711306 -143 324 -.03625303771182016 -150 324 -1.5205734265761985 -169 324 -.41595454599889914 -205 324 .6641985093057025 -207 324 .7122868275683797 -208 324 -.26232925050284817 -211 324 .23591352988024153 -231 324 -.07135378139255431 -249 324 1.3292250858709285 -259 324 -.25929045994756406 -261 324 -2.1411410512426827 -265 324 -2.552616048466799 -277 324 9.542625259706394e-7 -294 324 -.950035907738849 -297 324 .4972589124926754 -305 324 -.30603336534734915 -310 324 .012252034082568908 -322 324 .9922499124327379 -338 324 .4676785114837815 -351 324 .3632771580688208 -360 324 -.5268115769346351 -363 324 -.9133397391347118 -365 324 1.1509413598701115 -397 324 -.2740338843596474 -400 324 -.2742767046889488 -417 324 -.6852693927166039 -425 324 1.9003877428295628 -440 324 -.20851961821313697 -443 324 .8441392562598674 -444 324 .07894697166583156 -454 324 .6966993828323341 -466 324 -1.9992845942962711 -469 324 -.1663855351559654 -470 324 -.2540911750907793 -474 324 -.55995930551253 -484 324 -1.5215390022173179 -491 324 .4170353833677621 -510 324 -.016129191137504884 -517 324 .025239735979211142 -519 324 -.0588832549630202 -524 324 1.1236190205816219 -539 324 -1.3327512137433972 -568 324 1.4437109874956067 -571 324 -.5582825691150508 -582 324 -.5150001268452049 -596 324 -.23869835032008152 -605 324 -.4730798253431031 -610 324 1.2810075300882933 -627 324 .8889748712968917 -643 324 -.6408487202703776 -647 324 .3836529122175326 -648 324 .3039938218656327 -669 324 .468946993280714 -676 324 1.0761730652472914 -686 324 .05182075440632844 -689 324 -1.2650726568910775 -707 324 .24095891898608476 -709 324 1.9298334915350168 -710 324 -1.1769470721682953 -729 324 -.3467286457208304 -746 324 -.38721635164010815 -755 324 .1742779373081987 -756 324 -.6752624732332695 -774 324 -.8213842328807787 -783 324 1.570621993809124 -799 324 1.224254589143012 -813 324 -1.8045680451165353 -818 324 .738508457049615 -826 324 .7527533635453472 -829 324 -.2797344209354006 -831 324 .9709016928049106 -839 324 .4874498990381416 -859 324 -.802311850178878 -876 324 .7112345868901482 -885 324 -.03836853984714857 -896 324 -1.401700540757992 -902 324 .6473363751023307 -924 324 -.9215717087130829 -925 324 -.5308828196181762 -962 324 1.026168468415717 -979 324 1.0685227591881317 -986 324 .5487662486696154 -988 324 1.92461561026236 -989 324 1.0299644612445482 -990 324 .4967958518344038 -997 324 -.8393000439854751 -12 325 -.6414623497491967 -16 325 1.8236441543217454 -18 325 3.0082273118318095 -47 325 .20322291637911089 -51 325 .2898895876691663 -56 325 -2.0300219686164382 -61 325 -.0676027971665622 -62 325 -1.1653569113250146 -69 325 .2396172911204891 -76 325 .24955773131420245 -117 325 -1.1847365721584917 -123 325 -2.5293095156554086 -124 325 .2961794094596193 -132 325 -.7552642759040349 -144 325 -1.5919100309798497 -154 325 -.7988006892329352 -164 325 -1.4960666227001909 -168 325 -.2022413526867333 -187 325 4.005846658153885 -194 325 2.554198477516516 -203 325 .6541050082924363 -218 325 -.06682446146386808 -221 325 -1.5571934541506582 -233 325 2.257568863255957 -256 325 1.5944547176740482 -265 325 .06895959770754254 -270 325 -2.0670816811905928 -271 325 .8728157034348822 -301 325 2.0585002303853246 -313 325 .4841380916550213 -319 325 -.8582082498416208 -338 325 1.7387679681264847 -347 325 1.634106493813786 -363 325 -.9835278675281564 -365 325 -2.145653884073974 -370 325 -1.6099547034014587 -391 325 -3.155248943217962 -403 325 -.3141660948033926 -404 325 .9748266317159802 -407 325 .4517594545136816 -410 325 -2.2457608182261426 -449 325 -1.9217080368152444 -462 325 3.506439913103247 -498 325 .5047350727810644 -505 325 2.874046383031664 -507 325 -.42953445813364755 -510 325 1.249674332624969 -516 325 -3.286212044238255 -527 325 .3888769417973718 -535 325 .401784391389786 -544 325 1.2818590090448825 -563 325 .716113861699909 -565 325 .17479598347584202 -566 325 -.15524648367173688 -570 325 .7970782770791459 -574 325 .32585276498604365 -575 325 2.1907815604866943 -582 325 .6686470639473637 -583 325 -.8987470367729129 -586 325 1.4730018062843857 -599 325 4.9763998946070815 -602 325 .3645841487044603 -603 325 .8583559928066796 -606 325 -2.260675973278403 -609 325 -2.1481159127833416 -617 325 .7358113191478051 -620 325 .5746391411676116 -627 325 1.6624226593566178 -629 325 -1.1558214661100292 -631 325 -2.4070909517324544 -639 325 2.722100213110194 -647 325 1.3841724365688506 -674 325 .7996796375132798 -684 325 1.9245274680642723 -718 325 -1.1309361605319375 -719 325 -.4540836282680176 -725 325 -.718554327268677 -732 325 .8555540295512376 -736 325 .8646821568743416 -741 325 -.5687944222424376 -786 325 .1219907650916039 -802 325 2.159479390054801 -819 325 .14407775263116304 -828 325 -.06867011350343018 -844 325 -.8794012186253644 -846 325 1.3054186622312882 -848 325 1.4972771373879756 -858 325 2.0895306668591376 -864 325 -2.586698419350609 -888 325 1.0142941657838973 -891 325 -.24071861060951194 -893 325 -.3568192744999378 -909 325 -.22109311366257306 -925 325 .8479160862019113 -932 325 -1.4600300709572278 -939 325 -.45107708026634596 -944 325 -.2268019340822599 -951 325 1.0990414754433895 -962 325 -.9648347790211156 -963 325 2.0658891793514185 -965 325 .3092593119946477 -968 325 1.0422221143719224 -978 325 1.1409999067885805 -982 325 .5608307242587389 -989 325 -.6201913367178872 -993 325 -1.4148994419761962 -14 326 2.9205648340023314 -21 326 1.0190875998413782 -22 326 -.2522575767478952 -26 326 1.5896666462225484 -37 326 .9730090659636357 -73 326 -1.5709754808979255 -85 326 -.7680127336950994 -86 326 1.5191208278430925 -92 326 -1.8512059901939517 -93 326 -.28061819635354596 -95 326 3.7686510055660887 -103 326 -.9534859178187051 -112 326 -1.693679699871917 -113 326 2.4804311597605575 -122 326 .1453269960784749 -124 326 -.9545353325082715 -128 326 -1.094688201552344 -131 326 -.5770308731774396 -141 326 -1.3423985539274665 -147 326 -1.798130444669497 -164 326 1.6166409434945477 -169 326 -.7814180322669867 -185 326 .2813722848158421 -194 326 -.20468197576347943 -200 326 -.8625506020405946 -204 326 1.7957516609708062 -213 326 -1.8921140785736132 -215 326 -1.7721909627052908 -218 326 1.2831833040814478 -242 326 2.5823872088215993 -244 326 -1.8155772879754717 -260 326 -.48919003360055063 -265 326 .2955569225471672 -267 326 1.2622416386285948 -284 326 .9158205688107101 -288 326 -.17195475775896257 -293 326 -1.4269263808566983 -322 326 -1.4988393097414878 -325 326 .07218770827591059 -339 326 2.3407907594518123 -352 326 -.9616347299479222 -355 326 .7703922615157731 -373 326 2.025874380903517 -375 326 -1.298625976639796 -391 326 1.5248375087885908 -394 326 1.2547031459043272 -397 326 .12357815328570385 -398 326 -.10840896465001215 -405 326 .7344194736173484 -413 326 2.3013250394745386 -418 326 -.785081763641319 -422 326 -1.497729030326148 -433 326 -.27149880037605373 -451 326 -.2561723440162181 -458 326 -2.193599436610346 -465 326 .6983215972892235 -472 326 .11579391511399889 -483 326 -.7079350282587545 -494 326 1.1406810698984882 -510 326 -1.4254356235080545 -531 326 .33250926947815457 -537 326 -.4120141416214863 -539 326 .6090122865978029 -551 326 2.714723484748957 -552 326 .7697640654759701 -559 326 -1.225239322011586 -575 326 -3.362995368020775 -582 326 .16210009604873937 -606 326 -.9873108471179849 -611 326 -.25984103708033784 -628 326 2.199161875815741 -644 326 1.4267578807868462 -668 326 -.031125998130077062 -669 326 .640689200254919 -672 326 1.2602555682866767 -698 326 .1379745640615227 -707 326 1.5529716665670643 -718 326 -.5752672215358021 -726 326 -1.905758421880162 -743 326 -1.23028394448015 -760 326 -2.4674877163768705 -763 326 -1.3906085147200364 -768 326 -1.0363581895183387 -772 326 -.7771536401928725 -785 326 -.35714366930778246 -791 326 -2.1093157917811416 -795 326 -.2799786940138895 -797 326 2.0544729718570425 -815 326 1.0584832674086069 -830 326 -1.4671432304224923 -833 326 -.3660864278654176 -840 326 .8993229074358225 -875 326 1.2384960558607516 -876 326 -1.6496276849037812 -887 326 1.1946120766584227 -898 326 3.7081770286877855 -910 326 -.7013668830254807 -930 326 -.46131609443728827 -932 326 -.5150443670720216 -941 326 -.5887443363463932 -956 326 .11860813067046595 -960 326 -1.7979780454075316 -974 326 -1.8354420882164617 -991 326 .313891750010956 -3 327 -.003607148966263518 -7 327 .09243349570072901 -19 327 -.11178591470541985 -32 327 .6620103792458946 -46 327 1.744772098683226 -54 327 -1.0675166113834893 -69 327 .2633942066088263 -70 327 .060445621143680614 -71 327 -.3364407552938904 -80 327 -.4278283588664402 -85 327 .1498235240185821 -95 327 .8888767184250197 -114 327 -.3070753261261104 -126 327 -2.0918385975225604 -155 327 -.08399000683905491 -157 327 .894947259574818 -169 327 -1.1099918574754961 -174 327 -.5833477258009917 -197 327 -.09344730392378507 -204 327 1.162420828344548 -219 327 -.8094429176703749 -227 327 1.4582533275828844 -239 327 .2906326169931041 -268 327 .5784756516820295 -294 327 .06208264319423057 -320 327 -.5810550940745096 -345 327 .446834004209702 -353 327 .8305670542035961 -362 327 -.592414499239389 -368 327 .02518564860777376 -375 327 -1.3253489349136671 -381 327 -.16371249332948246 -400 327 .6709606313808654 -404 327 -.018348391226296223 -430 327 -1.1190962526832986 -432 327 -.15947526366353426 -451 327 1.9832853240521062 -454 327 .44785163387183846 -471 327 2.2676826920812405 -476 327 -.027128604743960137 -489 327 .7843650779821957 -490 327 -.47783680859797073 -518 327 -.006469548254479866 -549 327 -1.0595046368397707 -550 327 -.13755137852209598 -582 327 -.11941527787027037 -594 327 -.013955500152025851 -595 327 1.000432085389545 -598 327 .84990695644742 -614 327 -1.0350857616424443 -626 327 1.55329027950071 -640 327 -1.3913584211736396 -657 327 -.5197568261007263 -665 327 1.4955605880163159 -669 327 .9831644268651424 -705 327 -.42380737999171664 -718 327 .18636037245168252 -722 327 .27661920591440553 -766 327 .27895217977127656 -776 327 -.03200096800336391 -781 327 -1.484749679745153 -790 327 1.2699687360990484 -801 327 -.44147464881512893 -812 327 -.6450537541961263 -823 327 -.30240518001885824 -827 327 1.0490560700367577 -839 327 -.946665751344056 -841 327 .11935583513908257 -842 327 .3848454509326119 -848 327 .8243355578625756 -877 327 -.47679429445937194 -879 327 .5835741546163697 -887 327 -.04182660289782569 -894 327 -3.014895947857173 -901 327 -.8985014607808522 -902 327 .27348672037246224 -914 327 1.9492879020113365 -915 327 .028002394224730512 -917 327 -1.6279352432996546 -933 327 -.19020140284659667 -934 327 -.4399125890132298 -965 327 2.105495959791435 -966 327 -2.137197119520522 -973 327 -.1467306624240124 -981 327 -.31551539513423993 -987 327 -.6927079883450488 -995 327 .9802943132718565 -999 327 -1.7078823535265468 -5 328 -.5263491435088865 -9 328 -.14779677141402567 -16 328 .021335008634311148 -24 328 .526530734427013 -30 328 .03776740181030098 -32 328 -1.2586621856517939 -34 328 -1.3642544574256863 -35 328 -.3680180298656225 -39 328 .5788399470299604 -46 328 -1.3885452699497847 -90 328 -.8485498320000813 -143 328 -.18644400736762973 -180 328 -1.3336400319092192 -181 328 -.5980641355273317 -196 328 -.41488129581235894 -197 328 1.514685939455338 -204 328 -.5762901309269579 -207 328 -.30545692460674284 -216 328 -.16469535447290862 -224 328 -.6617030558963597 -253 328 -.07379472479216503 -277 328 1.2576907135547013 -292 328 .4598443151107914 -294 328 -1.9172359444087572 -300 328 -.2444690584034398 -307 328 -.9438903116340982 -314 328 .361122321784652 -317 328 -.2820443647162064 -327 328 1.386443228260008 -358 328 .4433600752699901 -374 328 1.4996833770993288 -388 328 1.4705818812401712 -390 328 1.0130851599315545 -399 328 .7875430597984945 -410 328 -.29682346172811075 -414 328 -.7399427554052049 -425 328 .2267403714847637 -427 328 -.08519333276599582 -428 328 .21419178514720605 -443 328 2.534790118878243 -453 328 .5720971684536851 -454 328 1.0050912732122683 -462 328 -.8877061383762425 -466 328 1.6207054447483384 -468 328 -1.3589888201823146 -470 328 -1.5358392384958266 -475 328 .47624676399222127 -479 328 -1.2010337488474911 -506 328 -.6369628136514636 -507 328 .3470050848725853 -509 328 -.10941367518490269 -520 328 -.8604077180065524 -545 328 -.38586148324455993 -550 328 2.4319321158169034 -556 328 -.6020024253514412 -557 328 1.0879512242983242 -567 328 1.2708153648502136 -569 328 .5411261798487975 -571 328 .550543025127633 -573 328 -1.459869398620753 -578 328 .003696425277514126 -586 328 -1.6308653866460858 -593 328 -.3223350574538204 -595 328 -1.094071325560505 -599 328 -.9523768875368505 -608 328 .30025668967589475 -618 328 .09288115033933256 -623 328 -.3710763088656743 -634 328 1.9249637601754332 -660 328 .6090720887986392 -666 328 .9247576369130732 -675 328 -1.068088479866098 -676 328 -1.0910423807150083 -685 328 -2.178966727512784 -687 328 -.47300735016646966 -694 328 -.10360337634171042 -703 328 -1.2721511208178866 -721 328 .9630416934937194 -735 328 -.502827428180939 -736 328 2.592720436022646 -742 328 -1.4138505507600791 -744 328 -.8354347684292815 -746 328 .2095371457769997 -750 328 -.07570915512551757 -756 328 -1.4483410108419046 -767 328 -.2670492752168744 -768 328 -.7559098019773566 -782 328 .17658672139912374 -799 328 -.8107582290182246 -802 328 .6476203673477723 -818 328 -.994199602214366 -838 328 .9169173100789685 -847 328 .5442362501760883 -872 328 1.1932760331817884 -874 328 -.9211712627355442 -886 328 -.6309679687601272 -907 328 -1.768018026286252 -929 328 -1.2456063105944557 -945 328 .4836794823462993 -954 328 -1.5488693516624188 -963 328 -.7431375882644051 -967 328 -.5711339167537001 -983 328 -1.4979297932609965 -13 329 -.2702062951384131 -20 329 -.26854585499834827 -25 329 1.8693000648378244 -41 329 -.8054097308117717 -76 329 .4372792052663653 -89 329 -1.7370332584279433 -92 329 1.367838804538652 -93 329 1.674518778617722 -94 329 .5553327356440679 -115 329 1.073306340169716 -122 329 -.538493346758313 -140 329 -.05385562289455026 -142 329 .7422960126805823 -154 329 -.11699427735128654 -163 329 .5836006869378016 -172 329 .39784595913697784 -176 329 .3073206658944747 -197 329 .4327316381077754 -225 329 .2555231770970691 -233 329 .7647808517093969 -259 329 .7115044173444811 -260 329 1.1595434597695784 -265 329 .4174987846810941 -267 329 .1747713252433917 -273 329 1.0539646067453403 -303 329 -1.2976413072673219 -329 329 -1.0495709073429342 -330 329 .7897825154053004 -331 329 -.10053933655058707 -339 329 .7919343420193804 -344 329 .5497978323144009 -364 329 -.7113305546712184 -389 329 .0606659203414832 -393 329 -.6660137191880162 -430 329 .07961615143768391 -441 329 -.4729189884896764 -442 329 -1.2080488080393257 -497 329 .19282546244847193 -499 329 .07809992373263912 -500 329 .2423224961415999 -519 329 1.2121986440402304 -535 329 -.43919078999042915 -544 329 -.13711336908609 -559 329 -1.369595276257095 -563 329 1.0742728611223233 -564 329 -.38005068912959805 -565 329 1.0192059398744062 -571 329 -.2497758903521083 -592 329 .1104891631650626 -600 329 .5250777694455384 -605 329 -1.0689160820805435 -608 329 -.4139072038309428 -645 329 -.7296448143228924 -658 329 .5376960360174722 -678 329 .5052565487622329 -688 329 .5276543038027588 -692 329 -.6451147041550659 -699 329 -.14240478818770327 -714 329 -.10833806460241295 -721 329 .08760243706669557 -732 329 1.1037031202635823 -739 329 .20346159467161767 -760 329 .4615832031719704 -808 329 .37241043795925965 -821 329 .30593615473143654 -822 329 -.4483242388127726 -851 329 -.4009092974665916 -855 329 .9867171466321552 -885 329 1.0946288951845238 -886 329 -1.2267600326502581 -896 329 .32045229985845874 -902 329 -.4823928874817201 -904 329 -.3451806189879767 -908 329 1.5299333679853302 -909 329 -1.0675244939469173 -918 329 -.11099856407904664 -921 329 1.1054049268619202 -932 329 -1.5661989321530574 -933 329 .09359431418220213 -942 329 .9597246434614084 -951 329 -.26438928799271494 -965 329 -.6390099376441155 -969 329 -1.180135332791379 -987 329 1.6120309153737988 -33 330 .7424380803892486 -36 330 1.2779345598680645 -37 330 -.21976970345545593 -51 330 .3612270605482217 -53 330 -.5273835491828669 -57 330 1.1159036149819634 -81 330 -.5931680579047294 -109 330 .9544285063609034 -113 330 .43695463462536405 -115 330 -1.4705794112193076 -129 330 .09699616973603614 -130 330 .0895737452013773 -138 330 -2.8316562910965826 -145 330 -1.4302896714623885 -150 330 -.6110652309816145 -180 330 .9013408579447836 -211 330 .6626937047201656 -217 330 2.030796313782903 -238 330 1.0541851748653133 -242 330 1.966880912239336 -245 330 1.4502182378989812 -270 330 -.24755048324321427 -318 330 1.8534339877738102 -337 330 1.193181100025154 -350 330 -.24019843547405617 -364 330 1.170641459141274 -367 330 .07275743353073869 -369 330 -.9052725124067031 -382 330 .12908809318543282 -399 330 -.46327938346150477 -401 330 .4643523252562187 -413 330 -.4512669524112773 -428 330 2.533622006431783 -430 330 -1.1227847352551592 -440 330 -2.0305507251429087 -447 330 -.1214903488284654 -454 330 -.3795312842528789 -464 330 .004113819824537374 -471 330 1.3086170905900838 -477 330 1.5314814384185953 -483 330 -.07304038776825571 -488 330 -.22724059720033835 -491 330 .7085004079264936 -495 330 .7762167030319662 -511 330 1.8744408753643595 -517 330 -.8076996465135862 -518 330 .8925487450351582 -535 330 .7603415809581265 -567 330 -1.2802289297720193 -568 330 .8405012278668691 -577 330 .16011654012450327 -587 330 1.2831916637225942 -593 330 .15906341162823534 -605 330 .6639157349085923 -614 330 -1.9989015226159363 -623 330 -.7942131419195336 -639 330 2.0532979089703933 -649 330 -.32372008190780327 -652 330 .23780007431191302 -695 330 .8648916058487084 -697 330 .7710425860800415 -701 330 .018753320090996506 -722 330 .16930427675639526 -741 330 .6910617230315126 -776 330 -.49302398285382343 -778 330 .6400621714247449 -808 330 -1.257299749871568 -818 330 .2918766008699919 -820 330 1.0811807462185334 -827 330 2.918818015285357 -828 330 -.05245944260426451 -858 330 .4180849157445619 -861 330 -1.1698007942220567 -876 330 -.7078854514674957 -884 330 -1.244047254384242 -927 330 -1.8031832515053916 -982 330 .9569985645405885 -986 330 -1.0839515350080176 -988 330 1.6341802518201205 -991 330 -.3367103623033971 -999 330 -1.180200122970272 -13 331 -.3864416952322306 -21 331 -1.5799308257868512 -25 331 .2359943250464908 -55 331 .4412675983098421 -62 331 -.666976275744732 -64 331 -1.0806633090952054 -67 331 -1.5117222456607693 -70 331 -1.4830081726154967 -91 331 .9975865899347912 -114 331 -1.3914171340329433 -115 331 .5604151377807164 -116 331 1.623679015782333 -126 331 .9155532546966701 -133 331 -.7782400653895669 -139 331 -.49811394508018136 -140 331 -2.031630573133856 -150 331 .43377554763862525 -152 331 -1.5538549544131535 -157 331 -1.0717264900239334 -158 331 1.5845429256198118 -165 331 1.131448534636396 -180 331 -.2626618056112714 -211 331 -1.8370254712648855 -218 331 -.8156352830835001 -238 331 -.6813384478038156 -253 331 -.7286271031553855 -263 331 1.1171025433971224 -302 331 -1.5255761153766654 -303 331 .8948409594234268 -306 331 1.588038961072082 -310 331 .7105184875709107 -313 331 .5714727666493332 -333 331 -1.4845079543057502 -345 331 .13249685492423166 -352 331 -.6357645305963094 -353 331 .5809945910493304 -363 331 -.9514932946999946 -370 331 .5407183491423164 -382 331 -.2727935883046298 -417 331 2.3210189277994067 -420 331 -.8877670003192474 -435 331 1.7693775510235143 -440 331 2.40735965523642 -496 331 .7117830930039785 -503 331 -.3510029326798332 -514 331 -.5111117817472484 -521 331 -1.5218572405483999 -524 331 1.447281614063403 -533 331 .47911271723226356 -543 331 -.18437888437178623 -548 331 -.4052324828172173 -552 331 .3016845285108452 -574 331 -.10505259690625696 -579 331 -.07763679892926904 -584 331 .5806012028367835 -585 331 -1.0839451064725993 -587 331 -.4381477947356852 -602 331 -.5894697135439947 -610 331 -2.348211560137033 -612 331 -2.0047004430831845 -614 331 1.3650791484751712 -615 331 .5055454423880459 -617 331 .6018326153232207 -630 331 2.0470523646247676 -635 331 .3736341512795597 -670 331 1.2432442860134914 -674 331 -1.082649874612782 -677 331 .7126079745087508 -712 331 -.23995374580889015 -745 331 2.6587291783070017 -775 331 .31499857323199665 -801 331 -.08231063403166756 -834 331 .19511711790319053 -843 331 1.2384123380609258 -875 331 .35483531303312243 -880 331 -.30750172100715745 -884 331 .10353280654891346 -886 331 -.06332109553652537 -887 331 -.8002365954517379 -895 331 .02996040118037023 -898 331 -2.2056346973874157 -908 331 -.8133710437479005 -913 331 -1.0884937042569525 -923 331 -.22610382921374916 -961 331 -1.1012550529592422 -969 331 -3.25897980837266 -8 332 1.3186640719718754 -22 332 -.36888116115312847 -23 332 -1.5069219577047768 -40 332 -.90480259345689 -59 332 -.6210979134268496 -88 332 .9578421991851354 -94 332 -1.0553221591028628 -100 332 -.23716752227608026 -101 332 -1.5133074340157282 -107 332 -2.52665455159223 -119 332 -.27979247481042496 -144 332 .3048894668300148 -164 332 -.8060385107636971 -169 332 -.8625294609294692 -184 332 .11028574220444864 -189 332 -.462860716944068 -193 332 .1448690845610323 -208 332 .3859322072419007 -215 332 2.705049910271237 -249 332 3.1785377165652218 -253 332 -1.1057485811754666 -254 332 .44678891471536636 -263 332 2.5716483359201714 -264 332 -.4769556931895905 -272 332 .33014957298830155 -285 332 2.184404071249732 -289 332 -.8106265632766371 -311 332 .11216530208877636 -314 332 .9545368721808509 -317 332 1.9339161412512063 -331 332 .026351439571286855 -355 332 1.1287091324302279 -359 332 2.030532354990656 -370 332 -.14344360078883273 -383 332 -.7675520357586235 -384 332 2.2241883819614716 -421 332 -1.6770980677489513 -431 332 -.42560120804732615 -458 332 1.7528254185721694 -501 332 2.96742715730245 -505 332 .528991445101162 -507 332 .66028312319609 -511 332 -2.2055116457116504 -517 332 1.1105743016181695 -533 332 .32880155502834296 -544 332 .613716187087529 -554 332 -.2263973944153882 -558 332 -1.8364673688799769 -561 332 1.0855646767834128 -562 332 .5013497789239266 -569 332 .36976461362552926 -571 332 -.6286331380478563 -575 332 2.312275993389503 -594 332 1.2580050745271858 -595 332 -3.6365481155823516 -597 332 2.355344640226986 -606 332 -.1818162014833792 -616 332 -1.2700304354243366 -621 332 -1.131162147977878 -629 332 -.3830757742221733 -639 332 -1.290229824496146 -649 332 1.1058788131095758 -669 332 1.866160003918096 -677 332 .7714111112686071 -680 332 -2.4469202471505396 -685 332 -.9578913623596491 -687 332 -.24399654130842932 -689 332 -.45066344092489585 -690 332 -.3086517541883206 -696 332 .33999551046091303 -706 332 -1.2614484766319403 -717 332 -1.347378990391491 -728 332 2.0495174488343126 -743 332 .0838594710409265 -771 332 1.4391053957846667 -784 332 .1849909026977888 -787 332 -.6048967299009285 -795 332 .4248727194884697 -813 332 -3.3125131383074553 -814 332 -.882722790978981 -815 332 2.304206438941426 -818 332 -1.4963034228628092 -820 332 -.6255823826142395 -826 332 2.1420963468320116 -827 332 -3.7372485016951704 -842 332 -.510213061679414 -852 332 -.15977039356947212 -856 332 .92251319571062 -866 332 .5077435058691198 -868 332 2.920606899277226 -875 332 .5187990674198452 -883 332 -.36518928747737184 -894 332 -.4471409755452212 -900 332 -.4570475975940835 -902 332 -.5510775871105951 -914 332 -3.0597204962950806 -917 332 -1.5304338362111172 -921 332 1.5756577958823774 -926 332 .11377288216715678 -933 332 .37100924832759835 -950 332 1.272009052208705 -961 332 -1.8628361856222686 -975 332 -.23925039439104795 -4 333 .272441412910701 -19 333 .6407193634796405 -31 333 -.27372475996967643 -35 333 .2792345478067154 -36 333 -1.029646549087797 -48 333 .9851062308932811 -54 333 -.28736224769794366 -77 333 .8432794859187528 -94 333 -1.0811132575178894 -102 333 1.4073777482705856 -110 333 .8997545954484077 -111 333 -.65390660821497 -124 333 .4528687370981678 -131 333 -.5187867632921078 -135 333 -.23533878908147596 -142 333 .8715459543130973 -143 333 .08815496755321846 -144 333 -.3897619726975901 -169 333 -.09297472814573393 -181 333 .3040906432615207 -211 333 -.32325249844413895 -217 333 .4129320408556102 -220 333 .5710847790446703 -225 333 .11076394441057201 -226 333 .09271331933689855 -244 333 -.6599187452836084 -245 333 -.5501164490873451 -250 333 -.6252484375304457 -255 333 -.47839053498549594 -257 333 1.09667380442953 -267 333 .12639529484066991 -276 333 2.549977072935146 -295 333 -.7739543178345922 -313 333 -.8522479008125731 -325 333 1.0753158493508592 -331 333 .34027459314057695 -332 333 1.078173642799173 -336 333 -.327370902161182 -346 333 -.07992778909525887 -351 333 .6542919455670702 -375 333 -.4651964235659873 -376 333 .48330898322869037 -390 333 .3570278810360869 -417 333 .6751997247673319 -419 333 -.1165532371624915 -425 333 -1.2320543639484711 -446 333 1.4107456962958846 -451 333 -1.3168416151700253 -457 333 .16123565162168618 -461 333 -.4600045060475919 -476 333 -.5144841373123226 -499 333 .18223307096711427 -502 333 .029756502655924957 -511 333 .18417400847090137 -548 333 -.36798965124464567 -579 333 -.42425160135402756 -581 333 -.4670643339618959 -599 333 .30274838976602564 -609 333 .7897624495540783 -613 333 -1.1986188150697437 -615 333 -2.5618846144920466 -619 333 1.4329817729768193 -636 333 -.30468480807365417 -649 333 -.28408347639513887 -650 333 .3781990956301014 -651 333 1.6385988820265067 -655 333 .38064353100883713 -679 333 -2.441789497666763 -680 333 .011998813809718983 -687 333 .3687403280715068 -695 333 .03800761923349244 -713 333 .511915768278515 -727 333 -.6854001970250574 -739 333 -1.0295979040413088 -756 333 1.0640337526476045 -757 333 -1.433606903159201 -758 333 -1.2034997812979293 -775 333 .7250352121161507 -784 333 -.48880689204673683 -786 333 -.24643239939520495 -812 333 .4732262875331101 -831 333 .49690707942228873 -852 333 -.4449738349347552 -867 333 -.03538631110993032 -871 333 -1.744262034567349 -882 333 -.246988987564349 -884 333 -.7075170073598751 -912 333 -1.8121015368440536 -915 333 -1.6997651827267815 -924 333 -.291796335796824 -927 333 1.6520216328945372 -929 333 -.5000537533570928 -946 333 -.06207825700605185 -967 333 -.21717828452775895 -971 333 -.18853915865444704 -986 333 -.38853060624569624 -992 333 .347178115915875 -1000 333 .9800010001941077 -27 334 .36521638144081325 -28 334 .5372116806672618 -38 334 -.04297834165470954 -54 334 1.2195531050421864 -62 334 .32311948895918907 -80 334 -.18901424487741814 -108 334 .7386499716902925 -113 334 .655835648581043 -132 334 .840634676542156 -139 334 -1.2417407666510494 -141 334 .9991974913073458 -146 334 .7843773096428684 -155 334 .425189311843735 -164 334 1.1056175441164882 -169 334 1.0168779735679165 -170 334 -.6427525782929537 -174 334 -1.2687580338723774 -206 334 -.9354364700445622 -217 334 -1.1465576373414628 -238 334 -.5720114421044096 -244 334 -1.224441004814436 -248 334 -1.1644253321407123 -255 334 .7897097672546298 -256 334 -1.1614439666255052 -301 334 .5805202176122224 -303 334 -.5426651071236079 -313 334 .9628110119531399 -315 334 -.4337810613911102 -319 334 -1.0853372183335959 -322 334 .6700088452533537 -331 334 .6985749808479201 -343 334 -.5915954348281484 -350 334 .051717235085066385 -385 334 .6301160070586552 -402 334 1.0969760705905873 -404 334 .2352640382971168 -412 334 .5713249355993069 -422 334 .03975783504567232 -428 334 -1.6865303365868145 -448 334 .6067330233179216 -458 334 -1.3202223319959572 -461 334 .20882400962671918 -469 334 .6765404034944746 -474 334 -1.1840931449276466 -483 334 -.11716206086787609 -487 334 .6160216719042881 -491 334 -.317021296779889 -536 334 -1.3069433341338963 -555 334 -.5659812974449909 -561 334 -.9120768755243093 -563 334 .11673815731159715 -568 334 -.9838583482047749 -586 334 .16841173281920924 -600 334 -.3644708596301612 -621 334 -.9675205693418674 -639 334 -.7641033648186327 -650 334 1.0738377624689748 -653 334 -1.8282897371224547 -656 334 .918171628583666 -670 334 1.2043381320958486 -671 334 .576787606527307 -693 334 -.3207746245341705 -704 334 -.38804483901358316 -716 334 1.4281711649182318 -718 334 -.35365111284337364 -721 334 .458800923682151 -723 334 2.575287759840833 -728 334 1.803383775581606 -737 334 .019244592464622262 -738 334 -.21821338034039686 -780 334 -.043042273225853134 -787 334 -.3408725916452502 -796 334 .06473303493000584 -802 334 -.9693281013392723 -814 334 1.0367652932253675 -818 334 -.7402632998041663 -823 334 -1.5492043768609423 -827 334 -1.6991997969147408 -841 334 -.016697092197762387 -843 334 -.1456481342599864 -852 334 1.8241254265340205 -856 334 -.4487772126686206 -870 334 -1.0347470739137592 -882 334 -.5230929517853569 -885 334 1.6839262285183516 -893 334 -.27815293995992446 -905 334 -.9649436937741673 -916 334 .306551561772755 -921 334 2.5061148996410787 -950 334 -1.080799388565559 -953 334 -.6459092366152596 -961 334 -.49090721882691735 -981 334 .30535087973184594 -985 334 -.06545477230049987 -3 335 -.37417976986238216 -8 335 .6349216205308725 -13 335 -.0791292220251322 -16 335 -.7042543660967889 -41 335 .29524124375979066 -85 335 -1.3324536179276014 -94 335 .035536010027597056 -101 335 1.3857709668922293 -112 335 -.3774909365363295 -130 335 .3443205303974144 -133 335 -.08564832147215327 -150 335 -.20532978837559362 -152 335 -.22642424325871668 -153 335 .5857131049719333 -170 335 -.026516591881476537 -179 335 -.06415380222765889 -186 335 -.08443474762029303 -187 335 -.42774288124689364 -191 335 .2538018365037645 -202 335 -.4272003699225686 -208 335 -.48940807749670867 -219 335 .2059787686308302 -220 335 1.5985975998493882 -234 335 -.3792365724163292 -238 335 .3458800228489057 -243 335 -.2486451858673756 -247 335 .12346116060939256 -250 335 -.4660373719115595 -257 335 .9356733185496531 -276 335 .26524855917475487 -282 335 -.35228163249127264 -283 335 -.08056360320172887 -296 335 -.2671754010762497 -304 335 -.7897921517381387 -305 335 -.1791155700250855 -313 335 .27473034995886236 -315 335 .8994993349244209 -318 335 .45373517199129415 -326 335 -.727963387241389 -331 335 .06135754762455689 -336 335 -.2979340286222055 -353 335 -.021249300968863724 -356 335 .147236352332758 -359 335 .3394843855589198 -360 335 1.2774671702166391 -376 335 .507957809858618 -382 335 -.6560952400883968 -390 335 .7710859189785688 -401 335 .7701105277487466 -405 335 .06730227708998796 -410 335 -.26240505246479195 -414 335 -.22036068465937014 -417 335 -.2830388176337729 -428 335 .4445661066234852 -469 335 .10932762548604454 -474 335 .2424107502481029 -477 335 -.5030902591566225 -501 335 .8394037600917214 -521 335 -.19849798184434353 -524 335 -.14316239784134932 -528 335 .3092553121458458 -531 335 -.3287468037492538 -557 335 .6027032920240648 -570 335 .32509529126294606 -572 335 .4196054909633363 -583 335 -.2475039070834642 -584 335 .20910814701921493 -596 335 .06269069658932759 -604 335 -.39054022220149975 -606 335 -.08057981458607014 -639 335 -.29394814412403014 -648 335 .2191228519824292 -657 335 .39840260919898074 -661 335 .5265855701710165 -663 335 -.5607320967627741 -667 335 -.6439700880621751 -674 335 .2642545451328532 -676 335 .1056286383721518 -696 335 -1.0109781537322178 -698 335 -.8139694929469495 -703 335 -.22594365180043074 -732 335 -1.4073659781224686 -754 335 .6970753112706412 -761 335 .04831819346921612 -785 335 .03420070771944034 -795 335 -.10490628208110037 -799 335 -.814571366102664 -813 335 -.537164914846833 -814 335 .14913034118237364 -832 335 -.25868174608639394 -837 335 .0774136263764883 -840 335 -.2797791593067397 -841 335 -.734526401151008 -844 335 .8649632231924764 -863 335 .6384173152686312 -869 335 -.7478606801194336 -870 335 .45274446871815877 -871 335 -1.2664979639680982 -882 335 .2838163669877098 -894 335 .07185361309400215 -908 335 1.1542540617569772 -909 335 .522836867581689 -949 335 .2145987077713715 -953 335 -.9001102338257769 -956 335 .5672745742552541 -976 335 -.17983820117006238 -979 335 -.10359234819864577 -986 335 .1280204881367772 -996 335 -.6191417842443876 -2 336 1.0773900348633616 -9 336 .16460972026326132 -22 336 -1.0082961949828941 -25 336 2.55555501803181 -44 336 -1.0104030826408705 -45 336 1.9773737069439514 -56 336 .6165674957304863 -83 336 .5120526587829942 -97 336 -.20573501086533127 -102 336 1.3775026860687467 -110 336 .4495066278425861 -113 336 2.168428202663859 -132 336 -1.449646943378638 -136 336 -.2075642616842911 -154 336 .10813401685736478 -155 336 .3274397246978811 -169 336 -.2153566588301139 -184 336 -.060831001024078485 -220 336 1.0839498766211013 -223 336 .3372473374782361 -225 336 .6783251417638734 -226 336 -1.561843686469061 -244 336 .715806206350357 -245 336 1.0997774193215006 -247 336 1.7596544410927095 -273 336 2.037977999410546 -280 336 -1.0812403223558393 -294 336 -.046540639793085675 -317 336 1.0507206268163674 -330 336 1.2256128299749756 -336 336 .2434018222713442 -353 336 -.825203984692805 -356 336 -.5525413313955538 -358 336 1.2647082752054906 -366 336 -.6989412371978396 -378 336 .513677278096549 -383 336 -.03975557756500038 -387 336 -.5536715794861298 -388 336 -.5020681777280555 -396 336 .44847103747257705 -402 336 -.010005683106523389 -417 336 -.05395186707550649 -433 336 .7683295928195215 -442 336 -2.336852891639763 -447 336 -.33361253889166065 -449 336 -1.0025745285188896 -452 336 1.6737791730500577 -464 336 -.7550803384885332 -469 336 .7333636684638268 -472 336 1.1196292599626323 -501 336 1.913847418164414 -502 336 .2722453424050482 -504 336 1.6292759033118476 -509 336 -.8379783887710199 -517 336 1.5648451666515422 -520 336 1.1077939764103428 -528 336 .07232186404892099 -561 336 -.10994048152876859 -571 336 -.8484486077123077 -580 336 .205978935428431 -582 336 -.25050767106940486 -588 336 .0974871992131697 -596 336 -.04666300908738061 -641 336 .6309455666154515 -656 336 1.508818906419986 -657 336 .9014958356191741 -664 336 -1.5530512347330168 -666 336 -.11923790391287126 -674 336 -1.2726931125848098 -684 336 -.04179300200702554 -705 336 1.0447447535068006 -706 336 .19876197761810505 -709 336 -.42188749184107555 -714 336 .17133388091086937 -734 336 .6324965664194565 -736 336 1.9776296373417808 -751 336 -1.0878738041816054 -753 336 -1.600291610877362 -759 336 .05584876559475599 -767 336 1.2249075706321677 -780 336 -.28457700559570986 -789 336 -2.0583964368898555 -798 336 2.2088571968236415 -810 336 2.211992213679169 -811 336 .037492794171229644 -813 336 1.522300906199166 -839 336 1.1488161805930737 -876 336 .8609053841902639 -882 336 -1.0331206922014198 -884 336 -.45357351217591035 -911 336 -.46848860834143713 -914 336 -1.9300848031965279 -918 336 .25888241069178886 -924 336 -2.1208630399357262 -930 336 .2211742641556541 -932 336 -2.4999382471625853 -944 336 .07987602880620646 -945 336 1.609675412268355 -952 336 .05250657565536161 -964 336 1.4163283081600069 -965 336 -1.1634312390209263 -986 336 -.24823552015102804 -997 336 -.5811863227466144 -16 337 -.4858507640451992 -25 337 -.730029905278843 -35 337 .7890818960037103 -50 337 -.05683913700153964 -56 337 -.7345782964497626 -67 337 .23496233368274844 -77 337 .23018832295864106 -85 337 -1.4698840057084062 -100 337 .13771791866791594 -115 337 1.3976039263177498 -148 337 .5227640867884971 -149 337 -.7483922468652118 -159 337 -.5825042893792705 -170 337 -.20796575984220667 -176 337 .2661374798900139 -188 337 -1.471200595597004 -192 337 -.563116595730073 -211 337 .3079653383367191 -224 337 -.7989824530879174 -226 337 -.14035650916626685 -229 337 -1.0850864407458103 -233 337 -.0695690358923284 -269 337 .6688456474165547 -275 337 -.31020724614771755 -294 337 .21112567578170047 -296 337 -.8018819483958171 -302 337 -1.0226197418026848 -313 337 .4081078523322717 -333 337 1.1291008821757265 -364 337 -1.4787113863876948 -366 337 -.3600962584597634 -388 337 .1916493901087259 -398 337 -.14390790812125917 -452 337 -.6459279781881395 -455 337 -.5043703985846775 -459 337 .19137492668934306 -468 337 .5440786820385184 -490 337 .6844912127606131 -518 337 -.5400871223447022 -524 337 -.7410958158562262 -528 337 1.5072075816621253 -536 337 .7906705380081115 -565 337 -1.2625403377496047 -571 337 -1.1719983217107168 -583 337 .0796452035478189 -596 337 1.2063011097014762 -604 337 .25056064832507163 -620 337 -.1001246216898408 -641 337 .9421917460998662 -654 337 .4212980832457975 -656 337 -.7135090877871976 -657 337 .41446024525457253 -667 337 .28956024829318094 -668 337 -.715923465408761 -679 337 -.5121546658982506 -688 337 1.019279510735993 -698 337 1.3883218716888843 -710 337 -.015458926171954357 -713 337 .9907235340095562 -718 337 2.1394689240517786 -728 337 -1.984491932379555 -730 337 .2758930559259833 -737 337 .7492400438695614 -748 337 .21789290261598904 -761 337 .13095959971883187 -769 337 -.5989013268619905 -773 337 1.1335634825135201 -778 337 -.4200391173869096 -791 337 -.13954439849591338 -798 337 .7319513587890645 -829 337 -1.3440695566947094 -845 337 -.09095916055820102 -868 337 -.14040960566275174 -871 337 -2.186701798418256 -896 337 .8178287367994692 -903 337 -.3470596292044319 -907 337 .8597113153862823 -918 337 -.633794612193797 -927 337 .06751384858193038 -978 337 -.16601870357023307 -988 337 .43991481506725216 -12 338 -.9710209256570546 -29 338 -.6798424054446222 -47 338 -1.3294479069336 -92 338 .9083103796365841 -95 338 1.3814227784410409 -110 338 -1.364201973157502 -128 338 -1.3045971333862914 -139 338 -.5577233106645252 -140 338 .020567199740697206 -143 338 .8742993335218386 -160 338 -1.8163059920945404 -168 338 1.4721190570599412 -172 338 -.08243538292269137 -178 338 1.4480294869051131 -186 338 .8166504702877797 -197 338 -.24320421662873176 -202 338 -.5190385544256242 -212 338 1.4275251189479299 -221 338 -.1672238159432141 -243 338 .16049931784870441 -247 338 2.379679149643557 -258 338 -1.5486511704803914 -263 338 -1.1358052436488046 -264 338 1.7046352607728312 -284 338 -1.1391213903945876 -287 338 .40836550146923034 -298 338 -1.3153490002423505 -303 338 -2.324132305071683 -304 338 .9943026274152393 -320 338 .6034450483469419 -332 338 -1.6183251754434558 -334 338 .9572832487315426 -335 338 .4711359476526914 -345 338 1.433065203920183 -348 338 -.7687675759823119 -362 338 .6029404593271692 -364 338 .9725994466242638 -371 338 .683657850606209 -376 338 1.3673010988154455 -385 338 -.7268634666664378 -417 338 .11974622081270533 -439 338 -1.144150696692406 -448 338 .7754629227674551 -457 338 .5236564883802112 -466 338 .695857419628338 -474 338 .3373286786625237 -477 338 -.5814764403062853 -489 338 .3963582472591708 -492 338 .5912433303442239 -493 338 -.7349442475600207 -505 338 -.5471999164267531 -523 338 -.6457662757718536 -530 338 -.26846381023344 -531 338 1.7466451717710507 -536 338 1.6032281667627628 -537 338 -1.5975426480845174 -547 338 -1.9312763050098907 -569 338 1.5822279708854168 -576 338 .9532597873685469 -580 338 -1.4391190515379797 -596 338 -.6325950960007457 -597 338 -.6981996911571338 -633 338 -.9394990713933706 -661 338 -2.5754848474504186 -666 338 .37015169056010017 -693 338 -.42760315411834404 -695 338 .2914224954388159 -700 338 1.1701960025373648 -701 338 1.6821438207372739 -716 338 -.8558845166786652 -726 338 -.9963132630498336 -727 338 .2826984353550672 -762 338 -1.0849489020121623 -778 338 .9296256272880927 -781 338 -2.1931339344465037 -797 338 -.22621676647764188 -807 338 -1.5977749993463415 -830 338 -.5482949258788443 -840 338 -.6390275299863727 -845 338 1.1543565758859 -855 338 1.810747956526246 -857 338 .6449674979688849 -890 338 1.6271399323738185 -921 338 -.5886734262839639 -932 338 -2.2674111767992415 -946 338 .5789840034090715 -951 338 .0711033714502101 -954 338 -1.4502002182425853 -973 338 .6953273201161813 -975 338 -.16817365583651298 -988 338 -.2171486924004527 -997 338 .2286595615692501 -15 339 -.4924602440840169 -22 339 1.2015190845900832 -27 339 1.5886361846316588 -59 339 -.3573836526554194 -72 339 .8337577145229526 -87 339 .5836489389868506 -88 339 1.0452134978919827 -115 339 1.0749697933137141 -120 339 -.9486602858788371 -121 339 .3172208115279599 -123 339 -.06517625195726738 -124 339 .9760985164037144 -132 339 -.34797037701100497 -139 339 1.2765510518803034 -140 339 1.1868323298874646 -141 339 -.07131702881214781 -145 339 -1.4071598325594608 -157 339 1.9885762711980042 -172 339 -1.053228396535596 -196 339 1.3053906350347668 -197 339 -.38358707615403315 -198 339 -1.5982077360979123 -234 339 1.6445516435789524 -250 339 -1.4856209701472374 -264 339 -.3490996398223629 -281 339 -.9550063368137016 -283 339 .24450926911698717 -288 339 -.10101482636450611 -299 339 -1.3306064244405518 -302 339 -1.5052651988832504 -303 339 .06918805232506055 -305 339 -.0030069519151250806 -317 339 -1.1510151450807893 -318 339 -1.4185847134497003 -341 339 .6120647870962292 -364 339 -.2037986203502573 -396 339 .8686193226062163 -400 339 1.4643100460512821 -401 339 .8972456807067883 -414 339 .09875912976381102 -429 339 -.14679986127556643 -454 339 -.7581354246715133 -462 339 -1.8116654977884614 -465 339 -.6097404520753653 -472 339 1.1545475211792113 -475 339 -.5665363543829759 -478 339 -.2551672462449679 -495 339 -.4354714036674516 -502 339 -.22859738150147957 -504 339 .6262699896460664 -536 339 1.651146056525254 -544 339 -1.5162141745247601 -573 339 -.329052589457072 -598 339 -1.190426406310244 -617 339 -.4099522856995947 -620 339 -.12085259598444768 -622 339 -1.4405228323931494 -630 339 -1.0220224521862817 -631 339 .9094333272530174 -650 339 .9544409618032937 -666 339 -.922757581552707 -670 339 .21278455747320268 -698 339 .45530801204751625 -702 339 .061004911487434435 -706 339 -.11375852261720698 -719 339 -.06180694085280242 -722 339 -.6266336218715152 -723 339 -.3674794141974076 -725 339 1.054898113677137 -733 339 -1.2263828702586175 -745 339 -1.591672581138248 -755 339 1.4739928437292193 -770 339 -.41155426122438166 -791 339 -.40371971677354257 -803 339 -1.1327968472772358 -805 339 .5639940946218012 -807 339 2.1971447845459022 -811 339 .802728180803776 -821 339 -.8301251849505502 -826 339 1.6262168262409964 -827 339 -1.0118556042765852 -870 339 .6751055992156096 -873 339 .4252847768335348 -893 339 .3025275267809234 -905 339 1.5861520557119633 -906 339 -.687406206859761 -914 339 1.0120142440984439 -921 339 -1.0658012872639009 -932 339 1.0663146063302378 -949 339 .9300437741696582 -976 339 -.05252381723828756 -977 339 .08495022702124885 -981 339 -.7456534807740623 -983 339 -1.6343958426971203 -986 339 .8447658100373249 -992 339 1.1775366478374458 -994 339 -1.3432627721106913 -11 340 .7067979144894231 -16 340 -.39098596491171167 -21 340 -.1628923671440441 -32 340 1.048771197116472 -37 340 -1.4883569136653705 -46 340 1.1183581282467903 -47 340 -.255930950781446 -48 340 -1.139726707028432 -53 340 -.7471320334147403 -58 340 -1.71426976970818 -77 340 -.2332698725379662 -82 340 -.9547309079529724 -85 340 .8713965409095719 -93 340 .7404447513297411 -98 340 -.46383605145604667 -113 340 .09434346803745586 -114 340 .31308857561629133 -118 340 -.9864099188969011 -119 340 1.365268270802455 -130 340 .6450529632478657 -131 340 -.15535762366032993 -142 340 -.4090245028132468 -153 340 .12221029286459859 -157 340 -.2752496128760306 -158 340 -.22976460418170652 -172 340 -1.5329991808963241 -175 340 -.5548633517191197 -177 340 -.1264923516389172 -186 340 1.7677445270211993 -187 340 1.6001838417743022 -206 340 -.1428595812134395 -209 340 -.8636622402567464 -217 340 -.4080757769350369 -235 340 -1.0570241851965003 -273 340 .3249680052794396 -281 340 .44594378028204384 -289 340 .15524953354598153 -303 340 1.5393222724239404 -322 340 .9235144867976401 -328 340 -1.2218451981170113 -334 340 .74780010929313 -351 340 .9797709646246359 -361 340 .2544814583858415 -371 340 -1.702861969736348 -374 340 .8847810355594061 -377 340 .07541991729045755 -403 340 -.6720901209946213 -414 340 -.7210910269739622 -421 340 -.30846522001995164 -442 340 1.0516114784211767 -450 340 -2.1138554682477055 -456 340 .020579267818882745 -487 340 .07505630568271719 -509 340 .1118143294977047 -518 340 .057539853570718474 -520 340 -.8948645093888611 -521 340 -.3863052193145499 -525 340 -1.3203540690893174 -535 340 -.10099238651507188 -538 340 -.39801129835820664 -546 340 -.7566394866459802 -560 340 .6541121131989556 -561 340 .5368272865030841 -564 340 -2.800444545377659 -567 340 -.886402562009655 -568 340 1.081227333899246 -581 340 -.8981410580432408 -583 340 -.3475319685775629 -589 340 -.10324790889138252 -596 340 -1.6726394199692698 -603 340 -.39592231334425715 -608 340 .6333711367122663 -621 340 .9652178759208349 -636 340 .8875863120338959 -637 340 -.5819759925278114 -640 340 -1.078830338582477 -647 340 .1662246401285784 -665 340 -.7709951843157443 -668 340 .19877066810577818 -673 340 -.7295663343138632 -676 340 -1.9494320265524618 -679 340 -.5744825486941749 -687 340 1.358182083047576 -703 340 -.48805466234588585 -704 340 1.0244666779000087 -711 340 -.29457310204197845 -725 340 -1.3384106153470237 -734 340 .003409221854771091 -745 340 .17596544111821677 -766 340 -1.2900486915525748 -771 340 -.39783085706359 -781 340 .2079552868464953 -786 340 1.7195313794504639 -792 340 -.31163080314556957 -793 340 .8942483967909324 -825 340 -.6938588435136711 -834 340 -.11714697424129822 -836 340 .46955842446131246 -841 340 .8958524594761982 -849 340 1.9804826213869158 -858 340 -.12491767936747802 -859 340 -.6756211064550006 -861 340 1.1595862638240206 -864 340 .6603166168422419 -866 340 -1.3457911647366352 -891 340 .3061910788183004 -897 340 -.5940651164685145 -905 340 -.5256478525937728 -916 340 .032573231044797285 -945 340 -2.6641218752966886 -948 340 -.06968571593619609 -949 340 .9022116518900181 -951 340 1.8834096552133026 -974 340 2.3528724685220763 -975 340 .47585859311253603 -979 340 .24211243328450852 -982 340 .6771644602552003 -987 340 1.6421159582910623 -989 340 .7333974531885934 -992 340 -.6499764337279681 -994 340 1.4624671469106638 -995 340 -1.3283827056408344 -998 340 .10129319796897307 -999 340 -.4737865990347488 -14 341 .19869255137621925 -18 341 -2.258223750708116 -39 341 -.174021999594986 -44 341 .8291516202189336 -52 341 .8468801911279312 -73 341 1.0282773337518663 -77 341 -.5977927384819537 -93 341 1.1047672358398763 -107 341 -.8191723896126138 -108 341 -1.036473928694094 -155 341 .17269335796759439 -170 341 -1.0077626066207381 -195 341 1.2619060571444947 -208 341 -.9248272050222907 -227 341 .8799358389041791 -231 341 1.9419014864306094 -238 341 .32918990221024946 -239 341 .6072518062041203 -261 341 -.3141054653900896 -270 341 -1.1157533312620622 -279 341 .34957035533473735 -286 341 -.9952570863200824 -307 341 -.3743423508047057 -308 341 .5163688301698433 -333 341 1.256479573459001 -336 341 -1.9120097305904074 -338 341 -.22591771168195873 -353 341 -.6468849290679313 -362 341 .026899445371421287 -364 341 .22306161700952812 -371 341 2.2286227005233528 -373 341 -.7460848435198766 -385 341 .07107495366224595 -395 341 1.0487892778930565 -406 341 -1.2335873086399662 -422 341 -.3878098258061056 -424 341 .29455366881897777 -432 341 -.48306968194355493 -450 341 -.3219622722080253 -465 341 -.8092740251256194 -476 341 .004739160405977091 -478 341 -1.3749524895667955 -483 341 -.3393091896260326 -500 341 -1.0756392082008523 -515 341 -.03789383705572491 -521 341 -1.037286785998246 -539 341 -.5956016862193826 -589 341 -.6094367086671444 -599 341 -1.3164673641170792 -603 341 1.2577723374487388 -615 341 .13358981286744412 -621 341 -.7542743857595897 -630 341 -.6526651303050447 -638 341 .7006530288677483 -644 341 .2502179085005522 -661 341 -.46695002991431434 -671 341 -.7254742223911754 -682 341 .4975419455646002 -712 341 2.2341226325169354 -730 341 -.934694533476462 -741 341 -1.5169996185705341 -746 341 .9397385840791572 -758 341 -.10568921321522971 -769 341 -1.5202299533240573 -779 341 1.5774069142775664 -787 341 1.3484758109253356 -800 341 -1.276706840122105 -806 341 -.7714311365507454 -814 341 .3905044509910465 -831 341 .6055924991013176 -832 341 .17459840149912487 -834 341 .34341902153493253 -836 341 -1.2400064974269216 -841 341 1.8804778537146025 -853 341 -.8843002815360337 -859 341 .5104458596926797 -878 341 -.46370758418033875 -886 341 -.16171738561807686 -893 341 -.3696335272710579 -903 341 -1.420426402971438 -911 341 .28755739270003045 -937 341 .1182642318161814 -938 341 .4869466841720753 -949 341 .06548300948349273 -952 341 -1.497589560394561 -5 342 .1459559034871805 -12 342 .4478502871144422 -20 342 -.7092019391550903 -51 342 -.8661382571231181 -65 342 .11497797032212431 -71 342 .5440235107138203 -74 342 -.7697918425192684 -87 342 -.5515479105807207 -107 342 -.5661713338901904 -110 342 -.7743476284602677 -117 342 -.042211994262733143 -118 342 1.481339044254007 -138 342 1.9498070467987259 -139 342 -.09902342724798752 -142 342 .5842886690215047 -158 342 -.9315507178817202 -162 342 -1.879281880420869 -171 342 2.0520118272762096 -173 342 -.37459951194610386 -179 342 .9273621809111399 -182 342 .34423058150990415 -186 342 -1.8865748027695453 -214 342 -.26711685552744574 -223 342 1.2654826419384093 -224 342 1.1777990364599606 -235 342 1.1089760776547677 -236 342 -.13940063326174765 -250 342 -1.023015848579794 -262 342 -1.6762067468722452 -265 342 -1.063291197319706 -286 342 1.823548003849405 -301 342 .5082402940859762 -314 342 -.05951977891564857 -316 342 -.9148247852303554 -320 342 -1.433510359134572 -326 342 .9231542625971166 -331 342 1.0532730132166848 -333 342 1.7506333940840673 -335 342 1.5167710308404196 -348 342 -1.9981220591028785 -356 342 -2.0355715173302897 -385 342 -.5437775834011889 -394 342 1.7793251463656607 -445 342 -1.3918068237176962 -455 342 .45158823825180516 -461 342 .518859653058307 -466 342 -.8879716391635291 -478 342 -.48080321128363196 -486 342 .9811816925506096 -490 342 1.0503510257095323 -497 342 -.23769392267716355 -498 342 -1.2887319539670659 -505 342 -1.2696164639724452 -514 342 1.15899252665427 -515 342 -1.8050580070767306 -534 342 .020965536821137318 -545 342 .30157602005470086 -552 342 -.07397324756509066 -556 342 -.8751723978686309 -577 342 -1.1329493357866345 -583 342 -1.510517912330272 -595 342 .43592589493312434 -607 342 -.6261720548478917 -616 342 .25175388924632247 -617 342 1.1145407844958166 -618 342 1.1890683246665172 -625 342 -.19318317961824671 -626 342 -1.1347688119679704 -632 342 1.0504298749689465 -633 342 .054278934507553736 -634 342 -.8821377169410146 -647 342 .7186491439882559 -652 342 .7669564261308206 -657 342 -.9031028542513784 -658 342 .669418778783477 -684 342 1.014408487066429 -686 342 .33801651038667785 -693 342 .8158759686780713 -697 342 1.4148215626073297 -716 342 -.29573627128099583 -726 342 -.5122019387614566 -728 342 2.6217695952083107 -735 342 .5466537455845598 -753 342 -.8930697565024629 -761 342 .9028180705116379 -763 342 -1.233144111490601 -784 342 .10852210871127886 -809 342 .22740965314785422 -820 342 .29373754028956467 -832 342 -.999685294863322 -841 342 1.1310187517184176 -848 342 .13430304024454204 -854 342 .1115330486185579 -855 342 .5632805122341493 -857 342 -.12814076131348195 -858 342 1.3518103587246086 -885 342 1.415867519909141 -887 342 .1639986313969607 -894 342 1.3305740790594238 -899 342 -.6707111360596917 -926 342 -.7479025646765096 -929 342 -1.1791664034524354 -935 342 1.8990032638239052 -946 342 -.9442384379797593 -951 342 -2.297841148377497 -965 342 -.45870254463016 -966 342 .02353632783073012 -970 342 -1.23854659634372 -978 342 -.2935843671599435 -985 342 1.2284769354939955 -987 342 -1.1048204806173902 -994 342 -1.6502767469919137 -996 342 .14673176679388417 -21 343 -.6550706330994115 -27 343 .32563618972431785 -28 343 -.7186612467818275 -30 343 -1.0745390714535925 -33 343 .44106830684870846 -37 343 .22695829078364455 -42 343 -.9927223152131945 -53 343 -.12080961240093957 -58 343 .9976749047993899 -60 343 .2871092702663619 -66 343 -1.0726361267272537 -85 343 -1.25797489299585 -99 343 .6804584889815765 -109 343 -.11612274770744703 -112 343 -.2817111334169949 -120 343 -.7150203823680543 -122 343 -.016879294233429876 -138 343 -1.046524736221897 -186 343 -.19802897012454032 -195 343 .6495592394074401 -196 343 .6479705058395999 -200 343 -.4614294343485301 -216 343 -.10401110899931933 -221 343 .7343599138237301 -228 343 1.1538370575879298 -229 343 -1.41162403351552 -234 343 .7494348180501897 -253 343 -.6697402076761372 -254 343 -.6638067820845013 -270 343 -.5396679201588775 -283 343 -.8479461631523895 -293 343 .13609993290011163 -323 343 1.0299275057548736 -328 343 -.07121538302900332 -337 343 .5706173384787523 -342 343 .0588289336849266 -345 343 -.9020113453058433 -346 343 .11795707290626627 -347 343 1.22600325550005 -352 343 .5236370973703639 -366 343 -.6774689683280558 -367 343 -.7793060770913864 -385 343 .12419796127010782 -406 343 -.4344538216325867 -426 343 -.4379790495253549 -434 343 -.27283937271136455 -441 343 .11827203429482151 -442 343 -.15744484807541997 -445 343 -.5304751817680917 -448 343 -.334406489845422 -457 343 -.22962129173681162 -460 343 -.17618186354626192 -478 343 1.828034575979916 -481 343 -.1859049863902582 -493 343 -.38621678527060443 -514 343 -1.166831520194107 -518 343 -.21914972439690023 -526 343 .29410059858471527 -530 343 .6048826073053615 -548 343 -.6300324048289262 -554 343 .24275879676467482 -568 343 -.6949393407377445 -572 343 -.1987284326320767 -588 343 .4579830423279451 -600 343 .8526545329464263 -606 343 -.01049479774764396 -610 343 -.06221031061148734 -613 343 -.7454269700794238 -614 343 -.034549474253900245 -624 343 .27303339179735864 -628 343 .965317472452132 -629 343 1.1232113996833792 -632 343 -.891718583150894 -639 343 -.43641907142897196 -643 343 -1.5184115708340322 -644 343 -.0808143381605752 -663 343 .4071566735353806 -667 343 .022936409542754513 -672 343 .6979353512810041 -678 343 -.15034490442652942 -681 343 -.42060593486746867 -682 343 -.7791820593505816 -696 343 .6525288552063881 -703 343 .577281878642427 -706 343 .6785788076685682 -709 343 1.079474562730159 -715 343 -.6359512035804611 -719 343 -.5165209445458152 -732 343 -1.2786642357473081 -735 343 .025693179923198084 -738 343 .017082405781023394 -757 343 -1.4630167390485755 -759 343 .1801653970553948 -763 343 1.1190948271363041 -788 343 -.20831348267876273 -794 343 .006938026646696044 -801 343 -.22149508874891594 -813 343 -1.610150475860048 -818 343 -.2339835289575148 -821 343 -.21502372131429803 -832 343 .6731865169319251 -841 343 -1.7805963917233436 -845 343 -.9345475649484981 -849 343 .4784654751685672 -851 343 .5980610106870672 -884 343 -.13327708379123634 -887 343 .018320088445819636 -893 343 -.36755872563386005 -896 343 .6456014689570029 -899 343 -.19242505620710923 -906 343 .7862612421181818 -914 343 -.06902002420035998 -915 343 -.7494412697021021 -918 343 -.6426029571786905 -921 343 -.8228707161737572 -924 343 .23719453066109536 -934 343 -.30468828296097933 -942 343 -1.6203506720297767 -948 343 .667133093845314 -950 343 .4799569078052745 -955 343 .7098300953485475 -965 343 -.5752424517034322 -970 343 -.8425305817082045 -973 343 .3404765410981403 -975 343 -.4726756001484579 -978 343 .6954262507108178 -980 343 -1.4227283329459899 -988 343 .630622570428941 -996 343 -.4056822548367959 -997 343 -.431387606879576 -36 344 -.051087147925468125 -38 344 -.32707225898642706 -58 344 -.18204455984724077 -69 344 .4739874642918259 -79 344 .02897322757302661 -88 344 .14151466324999012 -103 344 .3265089106496618 -122 344 .9561148843407277 -124 344 -.21951523926404676 -132 344 .8150019233967561 -142 344 -.49954434517607604 -145 344 -.5757219531622474 -146 344 1.32868585222793 -148 344 .83629568469164 -152 344 -.9551122037070982 -158 344 -.1555661764892356 -166 344 -1.3534985178954382 -168 344 -1.0660698818797751 -182 344 -.6009290887993357 -201 344 -.03818764593652467 -204 344 -.7574931024881157 -209 344 .5008264342651157 -218 344 .06270265663160504 -219 344 .5604538240346759 -230 344 -.7315935181574045 -240 344 .5750001795067994 -244 344 .1571639835771563 -262 344 -.5899623875906069 -268 344 .5630273181967467 -270 344 -.7121484356033698 -272 344 .7939214907650898 -286 344 -.7828569753596353 -293 344 -.37020730192435103 -300 344 .17004730025104026 -308 344 .18653422679754933 -310 344 -.7162481183655 -324 344 -.5075951267151491 -327 344 -.07173670261108708 -338 344 .008516117015658194 -340 344 .3757251591192482 -366 344 .3899668342784618 -378 344 -.6292901563006024 -396 344 -.17471487416611162 -397 344 -.40830536970754017 -428 344 -1.199314499171812 -446 344 .22083212976184197 -450 344 1.0167316593029758 -453 344 .09725293729638781 -463 344 .3676739204504774 -465 344 .500914200581852 -466 344 -.12457343825327398 -486 344 .8256722887152127 -510 344 -.2462804500377139 -512 344 1.3427701229754103 -519 344 -.5614702912231418 -534 344 -.8019583637300872 -535 344 -.7243522754498476 -543 344 -.40996195617311204 -548 344 -.36809040972915735 -555 344 -.6055337793296485 -566 344 -.625861243528302 -573 344 .09444426792744047 -578 344 .5574061994028489 -580 344 .337577052493271 -617 344 -.028913075271472743 -623 344 -.6825971746162114 -627 344 .4048933827478319 -638 344 1.5987528393777108 -644 344 .20452537140513766 -652 344 -.2808871645451452 -658 344 .05686924721185984 -662 344 .375005366539594 -671 344 .4677776821202413 -675 344 -.3455500988918492 -677 344 -1.0632577244072576 -689 344 .14033321516515515 -695 344 -.3340180593306896 -702 344 .09952314132504324 -708 344 -.0032576889761604527 -714 344 .5961936763055098 -732 344 -.7588544598510923 -738 344 -.35238461788073555 -740 344 1.3308913204504789 -749 344 .014957985674112845 -764 344 -.6114172707601024 -766 344 .2277284291249475 -771 344 -1.2678898632406557 -778 344 .3958478124828516 -785 344 .062067046250140916 -797 344 .6097138880999979 -799 344 .29290075504811103 -802 344 -.7788256248128923 -805 344 .7255480744037565 -813 344 -.6587751631739174 -829 344 -1.10388323800815 -847 344 .8004204110756918 -878 344 -1.2806778866505928 -881 344 -1.3307216258911219 -885 344 -.3588455228714549 -893 344 .5645857632906724 -908 344 -.11575100372647307 -914 344 .8507014825038917 -921 344 -.1353995414308439 -935 344 -1.5490550376237797 -948 344 -.12213242953199444 -950 344 .394806493166907 -963 344 -.8110184216530372 -976 344 -.7222129512183638 -986 344 -.4884706551685844 -991 344 -.8140761879452898 -999 344 -.4169704787512286 -9 345 -.779164830131498 -23 345 .5389434523981195 -31 345 1.2554271573611537 -35 345 .7762636617812924 -55 345 .015810022424716123 -61 345 -.1013879021646725 -68 345 .17404676167111605 -78 345 .2188140984031438 -87 345 -1.8896337170066524 -89 345 .7632921545654052 -96 345 .713497588437947 -97 345 -1.122662149507785 -102 345 1.3887079528132253 -113 345 -.3293139571596847 -121 345 .17764580230412544 -131 345 .5616393430606281 -133 345 -.20696403348273182 -141 345 .8635222158884941 -143 345 .23859650748525396 -155 345 .010552044567759059 -167 345 -.34804453000363844 -184 345 1.2080484021923275 -188 345 -.1608755802458152 -190 345 .9817963758095867 -212 345 .2616641203500723 -213 345 -.2999088111985058 -220 345 -2.0479377329303117 -241 345 .6346438459252539 -263 345 .1280700941851414 -264 345 -.0978497739615074 -267 345 1.9845762737171235 -273 345 -.9644312344146055 -296 345 -.8934144548257931 -301 345 1.1320205476825493 -314 345 -.9955560449504878 -319 345 .2945614496044418 -322 345 .05974427381222727 -332 345 -.08013460601271466 -347 345 .6380805670896738 -363 345 -1.6484093493063399 -393 345 -.717881784773742 -399 345 -.07595623963721268 -430 345 .131059743195774 -438 345 .24171087491425647 -452 345 -1.3918252003305998 -458 345 -1.1848062000305437 -460 345 -.1710604018210708 -467 345 .366556054462024 -472 345 -.6703033175725183 -485 345 -.16317751232064742 -487 345 .5177433664615052 -488 345 .6745743334241933 -491 345 -1.157766866644546 -496 345 -.35237904638991036 -506 345 -.24486533859180248 -532 345 -.06233672494208432 -543 345 -.5088774216352232 -546 345 .2724268617795372 -569 345 -.9894005775278567 -581 345 -1.2616712959386975 -595 345 -1.067740570153461 -597 345 -.28348920397757627 -600 345 .8285769921127644 -602 345 1.638647168192719 -604 345 .8205083608239441 -615 345 -.7784735615652711 -619 345 .988290362518974 -625 345 .4187961220975268 -630 345 1.2043269365489628 -631 345 -.3664027540713207 -639 345 -.6424674997134342 -644 345 1.094486419790312 -667 345 -.9023288244212816 -671 345 .702513173640276 -677 345 -.47222843847364976 -688 345 1.7253888112791032 -706 345 .5981228521983192 -707 345 -1.2514699526601363 -714 345 -.4309382983302377 -733 345 1.0865533360492712 -734 345 -.10836836875611171 -737 345 .5506041454206371 -758 345 -.38025282622650114 -760 345 -.9038679719335491 -779 345 -.3346799071825765 -781 345 1.1980768098820658 -786 345 .10886565371948054 -799 345 -.44281740722215024 -816 345 -1.4888847155191514 -820 345 -1.3069186257909868 -834 345 .3036479458772003 -837 345 -.9698614872121968 -845 345 -.6037422530285045 -846 345 -.750582308653286 -849 345 -.5918397691359893 -850 345 .09757701607269317 -851 345 1.956904676759152 -855 345 .7665577665081392 -859 345 1.1856736820933451 -864 345 -.6878190737030614 -865 345 -1.1735825136521287 -874 345 .8051435984180837 -899 345 -.14596982830321245 -921 345 .6975571981409233 -922 345 -1.3987228260344566 -931 345 1.3553324854871098 -938 345 -1.2265887882847994 -941 345 2.339407609837429 -946 345 1.2758904148799273 -947 345 .5734375549294897 -953 345 -.39656350852037764 -957 345 -.8551451361104864 -960 345 .15830951743738025 -963 345 -.46652694208860834 -977 345 -.8570661807576836 -30 346 .4462371226262016 -46 346 -1.4761670455479394 -49 346 -1.5955038701900728 -69 346 1.4169086024991144 -71 346 -.26397515888995643 -82 346 1.0613502666341998 -91 346 .26081571969370426 -120 346 1.2662235428592754 -131 346 .18709930147266837 -138 346 -.4947205453763458 -156 346 -.0982736524845057 -182 346 -.8669118169897818 -203 346 -.6694607139142604 -204 346 -.19852727670556272 -207 346 .053736383696496304 -217 346 .5014662284073006 -227 346 -.6848867593485262 -229 346 -1.8447692524411352 -246 346 1.4550317531905015 -254 346 -.41893631187569874 -277 346 -2.145739318607533 -281 346 2.1127038562723834 -290 346 -1.0400398217913027 -304 346 -.08092222476467707 -306 346 -.6116419022374456 -310 346 .3666680425457082 -326 346 -3.238177888515734 -333 346 .7076143566061602 -335 346 -.6770221455364976 -340 346 1.168564200731297 -344 346 .3793386611430404 -357 346 -.9952479067071373 -372 346 .8014267289725927 -381 346 -.6020353648590819 -386 346 -1.3631174633966325 -398 346 .13302783311323746 -404 346 .09497578524554327 -417 346 1.462575538713757 -423 346 -.2104122835454542 -428 346 -1.0628380717086878 -431 346 -.7911910572055383 -442 346 -.9031008505580298 -461 346 -.5154495837039564 -467 346 .14525436044783205 -478 346 1.7380147515323272 -479 346 .2409502434100098 -481 346 -.7344344013641664 -499 346 -.4632960453854726 -518 346 -.43042708882894026 -524 346 -.7933408927217456 -539 346 -1.0415039277813554 -557 346 1.3870072948934558 -578 346 -.9105064649853366 -579 346 -1.2354746377240162 -589 346 -.1614344830480691 -602 346 1.1164687830019007 -603 346 -.44780463863291875 -606 346 .6707200224865941 -610 346 -1.0996207776453852 -627 346 .4752846135874126 -633 346 1.7677465853879932 -634 346 -1.9989282575423337 -640 346 -.22419413483600212 -652 346 -.3829213000212079 -653 346 .09803623591492078 -654 346 -.058661899073539955 -681 346 .5284795339639305 -693 346 .31322531431879624 -704 346 -.07561151057546268 -706 346 2.0623593242986216 -712 346 -1.1213144324679039 -722 346 .6263406535277983 -727 346 -1.49284322316529 -747 346 -.03855902611937381 -767 346 .24304887240956136 -770 346 -.5212610780707728 -772 346 .017580024472362385 -795 346 -1.054070647024699 -800 346 -.15153918850927306 -803 346 .42974863221077475 -805 346 -1.9887418695623051 -806 346 .25574250435642004 -815 346 -.8118282978164921 -835 346 -.4797760744576006 -846 346 -.9883514959018658 -850 346 -.13412274820495723 -857 346 1.2708196138231382 -858 346 -1.0818525271878878 -859 346 .2934733233284261 -861 346 -.23899254778031176 -898 346 -.23452497523484692 -902 346 .6340262089250355 -907 346 .8438931604972801 -915 346 -1.811952720748605 -952 346 -1.0165822908080868 -960 346 -.15924322756975184 -961 346 .42449604614857406 -963 346 -.3631500387060478 -972 346 -.15561489392797864 -981 346 .67318959338904 -982 346 .6070259001178785 -983 346 1.2118043255040711 -985 346 -.5777649310922068 -5 347 -.25842133033581927 -19 347 .3132225087990913 -36 347 -.6752755047770677 -42 347 -.11774221110486328 -43 347 .6557793910844888 -51 347 .4836488447448901 -52 347 1.7588219965340706 -68 347 -.026365656068964544 -74 347 .278087866850611 -86 347 -.33079105102415196 -95 347 -.6519328453829933 -121 347 .6078959287182448 -136 347 .15393161661787583 -145 347 .34819417928120433 -146 347 -.6413407342645767 -151 347 -.6047125387217498 -153 347 -.291100449176557 -156 347 -.47772004797236545 -157 347 -.07172565354157132 -163 347 .175486952952576 -170 347 .1603285563669855 -199 347 .13039639826598703 -232 347 .3872705443208586 -241 347 -.31090667560822394 -253 347 -1.0202733449397412 -255 347 -.7127463479119802 -301 347 1.1346543504520428 -302 347 -1.9413262971794791 -303 347 .5766025760435826 -313 347 .4322475347039301 -355 347 -.05470860616310882 -399 347 .41278995137804764 -428 347 .3551199358410667 -430 347 .6035259344583427 -446 347 1.2486045680549853 -458 347 -.7270972959365529 -459 347 .15219236286264026 -465 347 -.9376850963121537 -466 347 .4879491904976695 -470 347 -.26160037803199077 -475 347 .06864231618175014 -479 347 -.09604387525865982 -489 347 .07566239809703826 -497 347 .02705512065881016 -507 347 -.021247502788871234 -524 347 .3554699939002452 -541 347 .06140611653636034 -546 347 -.5140406117331605 -555 347 .5178569920581471 -579 347 -.03871279784954306 -595 347 -.22280256562397982 -617 347 -.39734710495925346 -619 347 .37519234399074586 -630 347 .21862552861027912 -633 347 -.32586296070374615 -634 347 .5267869995399167 -641 347 -.4260955164914449 -643 347 -.4626434464646093 -644 347 .29219993428188906 -651 347 1.4793250347956584 -656 347 -.3111509681155466 -668 347 .42461427779565797 -669 347 -.30436015564490776 -689 347 -.3433816078719151 -701 347 1.2180771269518447 -714 347 .11102987265732328 -720 347 .2061093268766813 -721 347 .8963909902550505 -723 347 -.4684952405420762 -741 347 -.13921073541082835 -765 347 -.025762648984602537 -774 347 -.000503323454175239 -781 347 .7575402134136057 -809 347 .0760767439062029 -810 347 -.3263252014369518 -844 347 .3976816750755635 -848 347 .11555963688408893 -849 347 .2754478067417909 -851 347 -.16864356346803017 -856 347 -.28974241836985254 -886 347 -.5812000367911474 -916 347 -.16991767383696363 -918 347 -.3409761836419676 -928 347 -.08551777769370164 -929 347 -.8269911180043362 -944 347 -.24693209823263335 -955 347 .6960618119848982 -956 347 .6998406715466283 -961 347 -.257295043533157 -975 347 -.20316330009313893 -992 347 .1234225143908469 -994 347 .7021996638481143 -2 348 .6063986128823207 -7 348 1.484278866406055 -8 348 -.10352195939811512 -9 348 -.33445638858130544 -13 348 .124265394574048 -17 348 2.0699522916688515 -43 348 1.7221367651146333 -49 348 .2872624584055285 -60 348 .47284705964999413 -100 348 1.9373377355975785 -105 348 1.394746293575744 -106 348 -.5906410115816493 -136 348 -.8445032963103607 -143 348 -2.2560678932423386 -150 348 .11221426368325177 -160 348 -.6756865825468192 -178 348 .10643690914220146 -194 348 2.0077607241989344 -196 348 -.8860043569898499 -222 348 .755360960346106 -237 348 -.03250239198461484 -247 348 -.5325907359150606 -285 348 .402329088280562 -286 348 .5036950436331051 -295 348 -.6798557226712982 -296 348 .3234117575166611 -303 348 .8286005476218848 -309 348 -.45915439348005344 -330 348 -1.5837731813527693 -337 348 -1.1539855528964005 -340 348 1.2286294142264693 -365 348 -.8569727329154516 -381 348 .15180900028488245 -407 348 1.3621010966953149 -415 348 -.6483700820836925 -423 348 -.4314069917014547 -431 348 -1.2183703032142945 -453 348 -.46207285340068527 -459 348 .3733699775078805 -463 348 .7458820490555369 -466 348 .2721513804650869 -474 348 .7603727195801041 -476 348 .029286816131676136 -484 348 .9687299527186484 -492 348 -1.738668208144745 -530 348 1.332306435154543 -533 348 .4618530268376291 -539 348 .25694159603165073 -545 348 -.8255784716500312 -551 348 .050446929525062204 -572 348 -.5455396862934176 -583 348 1.6477092753076266 -587 348 -1.0053042920298403 -592 348 -.00774175701776416 -621 348 1.5724631888459437 -633 348 .8060762687633221 -634 348 -.6608061051147882 -640 348 -.6518266010135231 -660 348 .6589765347387154 -668 348 -.6882721286120504 -686 348 -.24125685323291957 -687 348 -.2776133090831948 -705 348 .07275821389594542 -739 348 .5414034241341611 -742 348 .4224909110068469 -749 348 2.14955623999303 -751 348 -.466740012166018 -756 348 .7831579786723805 -787 348 -1.8190680793004699 -794 348 -1.643971430717633 -801 348 .4671023551553931 -805 348 -1.3249078704617792 -807 348 -.6697289162244501 -815 348 -1.255816352366149 -817 348 1.3746155570980032 -824 348 .5206506352619581 -832 348 -1.034330246944633 -834 348 -.05641202421900776 -848 348 .547457654044105 -861 348 -.509483104931438 -888 348 1.4795426230754405 -898 348 -1.0427404228378006 -903 348 1.7184773254605776 -909 348 -1.5446554469054241 -914 348 -.9547924919997234 -917 348 .4844890418546256 -921 348 .3702787854983997 -923 348 -.6866898966278197 -935 348 -.5367935788026018 -950 348 -1.0533852145931517 -964 348 -.371228010192043 -989 348 .3092911567186138 -997 348 .2324733834751627 -998 348 -.22050057752435026 -10 349 1.0791629661561106 -19 349 .22975241543640712 -34 349 -.33230068195762236 -53 349 -.4611678886191944 -58 349 -.22095210024850606 -60 349 -.26425153111537286 -61 349 .6518873376116607 -62 349 .1362842188462361 -101 349 -.6870500805674281 -134 349 .8086045568585043 -136 349 -.15332241607573321 -157 349 .3918102363030813 -158 349 -.1275499235717756 -171 349 1.7436840628050299 -182 349 -.6240427454518582 -184 349 -.0022571726467314895 -194 349 1.0423587837873887 -195 349 -.6251045629861464 -202 349 1.0999753353004955 -219 349 .18785312867505674 -229 349 .29764175250493075 -234 349 -.37460184399367197 -239 349 .5310734199091294 -247 349 -.08094191351538627 -255 349 .7043388572942576 -256 349 .38812226671169436 -262 349 .5507656512190235 -273 349 .19526267775264244 -275 349 .5673022870149453 -276 349 -1.3135056132691127 -285 349 -.37211408769363624 -306 349 .21902780912799016 -314 349 1.0384475717016055 -351 349 1.2582271149391866 -357 349 .13995515074383524 -358 349 .08230736161618221 -367 349 -.20135831958296713 -377 349 .24371523329409336 -406 349 .5493759135228456 -408 349 .18537311146501467 -413 349 -.8689859230739804 -423 349 -.11561471980449806 -424 349 -.17604220895898132 -427 349 .7751182280891016 -428 349 .1917663665844838 -453 349 -1.7301880252042197 -457 349 .13969353592402434 -470 349 -.5124234103816916 -493 349 1.079183261524355 -494 349 .9976572139002701 -503 349 1.6514620176829393 -521 349 1.113328533380828 -536 349 .7044150984361573 -545 349 .12762155579252774 -550 349 .21584221764593775 -551 349 -1.6911508618195557 -568 349 -.9994129726646142 -572 349 -.08058511345393063 -581 349 -.7330849968675603 -601 349 -.2390180717581807 -609 349 1.0296859727682135 -612 349 .846170088881995 -614 349 -1.5251301648603521 -622 349 -.13068482118190872 -634 349 -.34693891996165116 -641 349 .1336495352773767 -648 349 -.8913263070846926 -649 349 -.982041084898393 -655 349 -.5427411447294725 -672 349 -1.4082140003584152 -680 349 .1423540890766155 -681 349 -.8917287519877988 -690 349 -.8785241426749308 -700 349 -.9558740659952323 -707 349 -.6174355430012863 -709 349 -.046076216098430905 -723 349 .4755039502215008 -745 349 .64540831507427 -748 349 -.4641575701922591 -749 349 .46279535435949126 -753 349 1.0109108767904615 -768 349 .5282989008489012 -784 349 1.1832223835758597 -802 349 .3368609153357078 -805 349 .24850139294390686 -814 349 -.55843204465946 -816 349 -.3590372733269461 -820 349 -.29610351426624637 -826 349 -1.700984476685367 -829 349 -.11416061202618923 -848 349 .7053465939448859 -886 349 .3322851837154007 -909 349 .09633878667209571 -910 349 -1.2389444328270551 -923 349 -.8225657031297989 -926 349 -.6423798435037087 -927 349 -1.279749215775417 -930 349 .3226391778795561 -937 349 .37382432074755645 -941 349 -1.1666484515830304 -951 349 1.2546027288419392 -963 349 .016367231189703485 -985 349 -1.0296223175584518 -999 349 .5337305531720606 -6 350 -.534402823331346 -27 350 -1.5660702844821603 -31 350 .5275489242833498 -37 350 1.0939517099693248 -39 350 .7035501550038191 -57 350 -.26770638811148506 -63 350 .4647874666442857 -92 350 -1.0901304191095291 -96 350 -.7831401429883952 -97 350 -.19211244633487268 -121 350 -.6037372872642669 -135 350 .566067247509331 -136 350 -.6970400535864532 -157 350 .19313808253125792 -196 350 -.2930752146570219 -206 350 -.12424004056245015 -216 350 .16368036545957868 -241 350 .40525011643502057 -252 350 .730087008103564 -260 350 -.053074189638509545 -271 350 .8804866532602269 -288 350 -.3131507067496346 -301 350 -1.432466174987188 -309 350 .35889875561139517 -310 350 -.8739718953859382 -316 350 -.8593771992582508 -326 350 1.1562985966645276 -327 350 -.04932400384547417 -355 350 -.28760960796295637 -356 350 .6332450977696663 -357 350 -.9131814639163991 -359 350 -.42350520487203874 -377 350 -.16913276504089306 -379 350 -1.762635984785277 -391 350 -.4647021583970784 -393 350 .5816034067727635 -396 350 -.028301740417111552 -402 350 .5435018464272363 -403 350 .03205164787820558 -405 350 .34471507996609885 -421 350 .13554867559428826 -423 350 .030180103959520234 -425 350 -.08311903349757388 -436 350 -1.602203851368017 -437 350 .5490010365035981 -465 350 1.6307873681495686 -494 350 .7763615570012341 -498 350 .15672877985007538 -504 350 -1.8346716386929354 -506 350 -1.1929520803727534 -522 350 -.06829641171583144 -536 350 -.29604075981460887 -539 350 1.210716985155209 -550 350 -.8464456896394306 -558 350 -.3210344171135343 -575 350 1.0288986140779377 -600 350 -.964507325049084 -602 350 .5452413203806338 -616 350 1.5968987764428104 -631 350 1.0447720571875219 -642 350 -.30677393928913466 -680 350 -.5558749300030644 -710 350 -.08844361616083632 -718 350 -.27944925641549107 -744 350 -.9490081318136091 -748 350 -.4881872592117515 -774 350 .7931765205678263 -798 350 -.6571906770057983 -822 350 .6230651198880534 -825 350 -1.0126782917657182 -832 350 .46862515616591777 -847 350 .6671851782710502 -888 350 .4004937327309432 -896 350 -.0638437598784814 -897 350 .4889631375627109 -899 350 -1.140481772387518 -909 350 .054855218137817414 -927 350 .07332537217088651 -929 350 .796657621645324 -947 350 -.14664449042202476 -955 350 -.26001293069192244 -966 350 -.8089436664279327 -980 350 .1093894578351231 -984 350 -.24375158453491572 -999 350 -.4050876256898882 -8 351 -.28725016862799146 -11 351 .20937520702331022 -28 351 -.6653804489615374 -46 351 .5740294984071961 -61 351 .4009557466087288 -63 351 .28371926670138037 -74 351 -.9189940986917126 -97 351 .3871065619871381 -98 351 -.3382772802251084 -109 351 .3943379516762572 -112 351 .10521578640893661 -118 351 -.5336295009775388 -125 351 -.6362385170479 -136 351 -.32423287976203075 -139 351 .4136033228780988 -152 351 .4995541704168952 -177 351 -.3979707611329753 -214 351 .15251705371046823 -227 351 -.052886488403591524 -236 351 -.020767471299295834 -252 351 -.24449751445681286 -253 351 .3734501886710121 -258 351 -.8770027944961812 -265 351 -.47373672241672304 -271 351 .8483061450402157 -279 351 -.07590708413196184 -293 351 .09101510460564577 -303 351 .2531894765247048 -318 351 -.7786754060079712 -338 351 .9929024037611042 -360 351 -1.1786639973454118 -366 351 .65728338948953 -367 351 -.034933178112303516 -378 351 -.016572039486142914 -404 351 -.08628306844097057 -411 351 -.3141077808298853 -422 351 -.5874301539222981 -439 351 -.41167529954338034 -441 351 .7069758111044684 -464 351 .2427419227846844 -468 351 .7275880600646537 -475 351 -.05522356592930876 -480 351 -.26395874950810216 -490 351 -.4185848660766357 -504 351 -.3854525635430658 -522 351 .7299808368104654 -525 351 -.30270960057409946 -533 351 -.28450048096629094 -536 351 .6027951933703892 -538 351 .354775095011645 -561 351 .32915300212806897 -567 351 -.11267462697257528 -577 351 -.2748639049723056 -614 351 -.9539614897728984 -630 351 .24910034379462578 -632 351 .08552403075057038 -633 351 -.5080760568971451 -634 351 .4312862590501661 -636 351 -.12843313630483083 -663 351 -.3473455830457055 -675 351 -1.1592805136121866 -682 351 -.14467303834896938 -710 351 -.157079000877214 -713 351 -.5324844385407457 -723 351 .08573193210585035 -741 351 -.37477833836493285 -742 351 1.1242614070422003 -743 351 .05690125856897815 -761 351 -.18106141829511407 -768 351 .11377283772998051 -781 351 -.6572833425871625 -795 351 -.13079557160851038 -808 351 .0581405302913611 -822 351 .1500093277305954 -825 351 -.5564678247145298 -843 351 .04198391305455112 -885 351 -.3745855940690083 -903 351 .19836090422382838 -905 351 -.36062896458743515 -909 351 .26461932560734247 -920 351 -.3825362116148069 -926 351 .01397463610119476 -931 351 .16055038283493933 -935 351 .06014677713238988 -943 351 .40708811279048845 -958 351 .03660968536542719 -971 351 -.12641096679990155 -975 351 -.0717646061435589 -981 351 -.06236782936494618 -994 351 .24250382209639693 -12 352 -.8479783361787651 -14 352 .4734475553419138 -23 352 -.4327089204603224 -24 352 1.5472310338865045 -27 352 2.144617536294374 -28 352 -.1297183795425558 -33 352 -1.5538734159427752 -34 352 -1.2637396940184729 -48 352 -.6421397845426154 -50 352 1.8154134026786728 -69 352 -1.270934679737071 -72 352 -1.3382477243136477 -80 352 -1.4801702291568115 -87 352 2.560931481037565 -88 352 -1.5845373184040845 -92 352 .2808550164922067 -95 352 -1.9491944818840454 -100 352 -.5657666963804181 -107 352 .6608709714554806 -133 352 .030223420950517707 -134 352 -.13192620500455185 -151 352 2.3490072143396428 -158 352 -.9271642135051168 -167 352 -1.4694391597148058 -189 352 .33448064594241406 -194 352 -1.6285340027763024 -196 352 -.005511678450541624 -198 352 .6009150837062902 -202 352 .14330155104388745 -216 352 .44789463214070907 -219 352 -.6457268072849148 -222 352 2.113390261137092 -227 352 -2.0230448649967845 -230 352 -1.8708830675543908 -231 352 .3124420035425207 -236 352 -1.5353510455904427 -263 352 .6040825561046744 -273 352 1.7312135998564977 -279 352 .4955226633912519 -295 352 .7998981042154545 -316 352 .44194285152740154 -322 352 1.633541282118435 -352 352 3.4476853672883045 -355 352 .5901144335118329 -361 352 3.0495421953801367 -362 352 1.8241922598364435 -365 352 2.0405393057377683 -367 352 1.957064937591953 -376 352 .22302337145275614 -377 352 .15055301243769412 -399 352 .7319432156146359 -402 352 -.4532154540589791 -415 352 .8930975639600753 -441 352 2.5631000184900046 -443 352 -.7785611420224726 -459 352 1.1405796017023901 -465 352 -.8724200949488432 -469 352 -.0201037641817704 -474 352 -1.3668037992804511 -489 352 1.4778584636766607 -494 352 -2.4534647099112314 -497 352 -2.529115637369786 -500 352 -.8124115503305565 -513 352 3.3326666673228096 -514 352 -.969314426437878 -515 352 -.3947061985220136 -516 352 -1.9680442182444948 -554 352 .03772557170384272 -563 352 -.05885968642634773 -565 352 -.5219197455172445 -582 352 .022763716673588757 -588 352 1.2460975465935706 -595 352 .7424462696209013 -602 352 -1.6930097705617795 -618 352 .7331615369807286 -623 352 1.0737257699641063 -652 352 .22518490844589248 -654 352 2.367590527015847 -658 352 .2642023463954497 -673 352 -3.436634096511113 -696 352 1.8784922477862018 -703 352 -.5986263069615518 -731 352 -.6393811140622507 -757 352 -.2740910682228012 -782 352 -.6444608929682769 -807 352 1.5147371252923236 -808 352 2.1530277879717863 -813 352 -1.4437515592661687 -825 352 -.018414157556428598 -830 352 .23975306499750323 -843 352 1.504752351214204 -864 352 .07468193510937013 -882 352 .629417934141245 -893 352 .7346979061357108 -895 352 -.0696877768402134 -897 352 -1.0833583945680962 -902 352 -.5504181059865727 -903 352 .25688601734738165 -914 352 -2.1681322775963268 -921 352 1.3930779951664178 -922 352 2.8570915297292254 -926 352 -.7269475147464032 -946 352 -.3475977146432873 -948 352 1.060693632865272 -949 352 -.7361383676209274 -964 352 -1.2361886060880984 -966 352 .07834053554395352 -972 352 -1.4273172399234704 -985 352 -.780004000384737 -988 352 .6790229317285578 -989 352 .3778408501348848 -2 353 -2.0437569148168353 -7 353 .07707825689571016 -23 353 -.05540024039359531 -26 353 -.8977150774199606 -35 353 .7971407087523809 -49 353 -.6735189069095654 -52 353 -.38549793083769823 -57 353 -.7341483534665834 -60 353 1.9820319142426517 -64 353 -.10196107750905305 -65 353 .21994811982183896 -86 353 .8472462607554698 -94 353 .6159154656932163 -110 353 1.2354888419778387 -111 353 .29178623911800594 -117 353 .26627036989872255 -127 353 -.36128682265166745 -153 353 -.5643400157082246 -155 353 -.1638565548907807 -157 353 .6901981582132712 -159 353 .15365858859304618 -168 353 -1.3971045043647834 -182 353 .227834130563308 -183 353 -.7140692578103711 -204 353 .5025876643328577 -206 353 -.980020870427833 -213 353 .22903356301223332 -221 353 .6609270086031358 -230 353 .12055114547996244 -261 353 .6154144411209418 -262 353 -.9656217471614655 -264 353 -.44128391963102226 -267 353 .09204807970905955 -275 353 -2.5136457634343987 -280 353 1.0498751187081679 -300 353 .05518262685837625 -308 353 -.010062190073452094 -315 353 -.29974040220782905 -321 353 .551918949453449 -324 353 1.4522076975023754 -347 353 .3340503868501418 -348 353 1.2340620525740718 -358 353 -1.8287681533609412 -363 353 -.7179377135925632 -376 353 -1.0059744587819281 -382 353 .47779532950251746 -384 353 -.8931348002210656 -401 353 .9459160894225223 -406 353 -.41981834126993856 -422 353 -.7646495563155971 -434 353 -.4756627461468195 -436 353 .08092011972481 -455 353 -1.1493407179069512 -457 353 -.5808179691659952 -458 353 -1.2622866493659242 -463 353 .707496665377785 -473 353 -.3766826467674975 -476 353 -.5599785730854525 -483 353 -.27518796727674966 -484 353 -1.4901824321098616 -491 353 1.3951905302611647 -505 353 1.040705168915379 -509 353 .4311826485496101 -532 353 -.7494651315517014 -533 353 -.3809885186747768 -534 353 -.5649592109429286 -570 353 -.5536089259862165 -571 353 -1.1021166182469653 -572 353 -1.4527451285434168 -573 353 1.0998425131163698 -574 353 -1.3788681177223523 -578 353 .01555077231737699 -582 353 .10407208382551697 -586 353 .07595923943657826 -587 353 -1.0529195966062193 -590 353 .2893233485338088 -594 353 -.7396616739746069 -596 353 .03893692735112611 -603 353 -.9848048344757604 -610 353 -.685158425458093 -632 353 -.09687902437497009 -644 353 -.021251271025683922 -655 353 1.1358159939339232 -660 353 .20304120905464998 -671 353 -.5163525350808885 -674 353 -.23419314897702878 -679 353 -1.210763964605656 -695 353 -.5834607041544291 -696 353 .35878860524397765 -698 353 .6332422910011121 -701 353 -.9738572976380588 -707 353 .6441550640972525 -726 353 .4636449034691943 -735 353 -1.1548184523676168 -736 353 -1.3518933973110596 -745 353 -2.1089565871949514 -749 353 .2286296789544135 -757 353 -1.1186813224557834 -763 353 .5159362740762058 -775 353 .010563680853008905 -786 353 .04775191219423275 -795 353 .46466785416089107 -797 353 1.6437556334906769 -806 353 -1.093974893247922 -824 353 1.2406230672732388 -834 353 .6790844180957717 -848 353 -1.8396141135508244 -853 353 .6365516068774226 -854 353 -.14809566766429663 -858 353 -.9595831683825847 -859 353 1.7013979814837066 -872 353 .512833594616249 -883 353 -.8602171015640793 -886 353 -.5018089831997407 -888 353 -1.1752581452945667 -891 353 1.3646846667495847 -897 353 -2.30940259028412 -911 353 1.1463118946823219 -922 353 -.48200801837478147 -928 353 -1.1267319033241638 -947 353 .1718788934784572 -950 353 .526607083328785 -953 353 -.49719348620677806 -956 353 -.37117101547784614 -958 353 -.12118171226682665 -959 353 -.18658876894053533 -974 353 .23364030509291556 -995 353 -.5501448659266244 -996 353 .00645651366886224 -3 354 -.6657336597462726 -25 354 -1.2173609919776958 -33 354 -.24928628074940948 -35 354 .037156201284401676 -37 354 .0435560041784728 -41 354 -.0983605934384306 -42 354 .5387771715143368 -51 354 -.2410365951533771 -53 354 -.8486793204225056 -58 354 1.0647980125827696 -65 354 .7850880342304768 -66 354 -.9117836108615005 -73 354 -.7883618420403573 -76 354 .2863822102358742 -83 354 -.1561138473113123 -84 354 .6238668194985976 -118 354 1.5896790131181169 -123 354 -.6556246987352431 -132 354 .6164685039982086 -133 354 .31444506334974465 -147 354 1.2622081663971418 -168 354 2.0516017435204743 -171 354 -.17442542161153884 -178 354 -1.2446647624272378 -188 354 .936742488633486 -206 354 -1.0780173531847166 -211 354 -.8182087757737757 -217 354 -.10018386067603194 -238 354 -.38958992916694013 -239 354 -1.797295060713607 -260 354 .1952324088599574 -263 354 1.5441613709054631 -271 354 -1.364394896303855 -275 354 .19459210023896054 -285 354 1.1205429027758704 -290 354 -.4269340373784503 -300 354 .8359102463482346 -301 354 1.1695304759327982 -305 354 -.17951932336942747 -307 354 1.2133726791176211 -313 354 .46547903285478287 -337 354 .43788510873028186 -340 354 -.21423417019928717 -346 354 -.2775549744577753 -366 354 -.6708411220974281 -389 354 .29529026869298325 -396 354 -.32108250716822617 -449 354 .3249186343447101 -451 354 .21433420599525277 -464 354 .4027483325674447 -481 354 .6810328012770565 -495 354 -.6761123840233524 -505 354 -.4257578855568585 -506 354 1.8735400789672252 -514 354 .11413351463833404 -521 354 -.26913610986383796 -542 354 .3467842379624335 -552 354 .5118559443459995 -553 354 1.0981163962967475 -555 354 -.16416415968436499 -566 354 .12909998460834832 -567 354 .3925349026347803 -584 354 .724186895434688 -599 354 -.8007757254494893 -610 354 -1.2099931313626549 -622 354 1.3821125157677772 -630 354 -1.4179893724837718 -631 354 -1.684466060807616 -633 354 -.08584860286857951 -636 354 -.4913166968648885 -678 354 .20181492639050527 -697 354 .8373938476378098 -712 354 1.029318896605919 -714 354 -.7998604997857894 -732 354 -1.1319330156818765 -739 354 -1.132670375205124 -740 354 1.681161582995155 -747 354 -1.279179279610329 -751 354 -.014636087954129934 -753 354 -1.44825072571309 -756 354 1.4385318888393703 -759 354 .407006155927653 -770 354 -.9869888659144411 -788 354 -2.6153024259095714e-5 -800 354 -.7327488844123704 -801 354 1.1425851778218579 -803 354 -.6601574261931779 -805 354 -.87272810248464 -816 354 -.8196566154884789 -831 354 .9485860664365775 -845 354 -.4797029355886093 -861 354 .7075947966531476 -873 354 .48351589730129707 -880 354 -.5772298612380015 -884 354 .2306870567015162 -892 354 -1.7865217886820686 -900 354 -.23984417627628185 -902 354 -.3468456264759038 -924 354 .08375040396096867 -926 354 -.07966095248576464 -937 354 .38563006773088676 -939 354 -.031888330746871196 -940 354 .6707138815398084 -960 354 -.44647258397130657 -961 354 -1.0510683435286163 -965 354 -.924143283467515 -966 354 1.2772062909170991 -971 354 .20933326356762028 -36 355 .855857965957445 -56 355 1.9118740472862628 -59 355 -1.6344635020666372 -67 355 -.05107612076498849 -79 355 1.801166324446592 -93 355 1.6151785470049884 -102 355 -1.0628770985090374 -115 355 -1.5884122209720832 -123 355 .6041354613039267 -127 355 -.31716439003055164 -140 355 .26406376920515917 -145 355 .6759870887284063 -147 355 -.11157033148022316 -157 355 -.3365875493916659 -160 355 -.440541062658582 -165 355 .8837504720194367 -236 355 -.10754327801098056 -265 355 -.409914568552331 -266 355 -.9110119308015925 -282 355 .6303485691037355 -300 355 .06549722859846775 -305 355 .06676477883258625 -317 355 .16496347423366314 -324 355 -.7715166299555566 -331 355 -.06581363344512142 -354 355 .12810934403058882 -394 355 -.5338713232006838 -407 355 -.40243522294258005 -423 355 -.4580768448389875 -446 355 -.4990758147511766 -452 355 -.0021753000015941448 -481 355 .22718537127368235 -489 355 -.2775734104969241 -500 355 -.6327747173181733 -510 355 -.40643303537414743 -513 355 1.1307279580789744 -519 355 -.65909105293417 -537 355 -.8784925790498324 -539 355 .4540740772325007 -541 355 .9027740563194129 -544 355 -1.0330013792775952 -546 355 -.2686645641415548 -557 355 .46756874539298715 -562 355 -1.5421951017095183 -566 355 .28698491391485054 -574 355 1.1302387910901546 -604 355 -.018882479010456338 -612 355 -.2694854571405567 -618 355 -.9439325952049437 -620 355 1.0310420200514856 -663 355 -.24480316393520313 -667 355 -.5251762892027739 -677 355 -.14231452701600344 -685 355 -1.5166763182918985 -688 355 -.45917518513915423 -693 355 -.6706893215717338 -712 355 .3714161382880034 -723 355 .9436707316071409 -724 355 -.1665396579143423 -746 355 -.25425040950989075 -769 355 -.27778468612778684 -781 355 -1.1506882020898148 -786 355 .1049809337934687 -821 355 .17759701378303588 -836 355 .4344073078275067 -851 355 -.20230151876672126 -857 355 .3059376584070683 -873 355 .22391303621879907 -874 355 1.1626755325053852 -875 355 -.0018441428259931003 -888 355 .08229077783275925 -893 355 -.4870005087900649 -904 355 -.29846759990234784 -910 355 -.9305870583894622 -911 355 .1216476294368652 -913 355 -1.267305683962558 -929 355 1.7333041388294852 -934 355 .5713432574045769 -938 355 1.4416979056765176 -957 355 -.3103342333322869 -961 355 .37211612985779463 -966 355 -.6138253567496526 -977 355 -.4917377920030661 -978 355 -.8091059430302892 -981 355 -.6589843423957856 -993 355 1.0330190562498698 -15 356 -.25935115675080256 -18 356 -1.0542003722958015 -49 356 -.7322471824407015 -65 356 -.408312110873464 -80 356 -.28793861104165397 -84 356 .7624964761684465 -102 356 -1.225866252999041 -103 356 1.7464607480515848 -115 356 -.7358463216692721 -122 356 .4019147905212799 -128 356 .802461160518192 -168 356 1.0148074355292669 -175 356 .48104586771882496 -177 356 -.5626961131143395 -183 356 -.13875850271156256 -197 356 .19428070733869707 -212 356 -.2572998567916405 -214 356 .03927005464046762 -220 356 .5229308491994332 -241 356 -1.4180628613994655 -246 356 -1.3167982806249938 -259 356 .7189137365867652 -279 356 .6506650229544575 -281 356 -.8243270991131364 -284 356 .17536634910067286 -300 356 1.0214722449010971 -301 356 -.36281461284115823 -306 356 1.3764630149867059 -319 356 -.3922216738745129 -328 356 -.3789318564373818 -361 356 .04759530589135319 -365 356 .5485545625640975 -371 356 1.2436578918717733 -382 356 -1.0808532948155671 -383 356 .4144305723708682 -397 356 .18185422262647277 -448 356 -.9632555960272713 -455 356 -.028994155091782686 -461 356 -.10893835532365809 -462 356 -1.3487076273884404 -464 356 .6676605183577525 -470 356 .13393281228680626 -487 356 -.7319522450810028 -494 356 -.3498131816141445 -502 356 -.5040106273667139 -507 356 -.6881942712436673 -508 356 .07751964346107312 -512 356 1.5343293518293872 -513 356 .9758716922613304 -515 356 -.5596108719806394 -516 356 1.1447516137469265 -523 356 -.6517685828867021 -528 356 .7713843828528094 -529 356 .17366731756242038 -530 356 -1.6588605399903094 -545 356 .8751077617071237 -558 356 -.3443558927739465 -564 356 .8967440736297894 -576 356 -.5088128520573797 -577 356 -.43138590918015596 -589 356 .2554361813002937 -605 356 -1.2237578752217562 -617 356 -1.0163421504690127 -623 356 -.4192201794382916 -653 356 -.985694897967336 -661 356 .5775909045756024 -670 356 .7986404998635273 -675 356 1.5473339202837422 -704 356 -.40127689060084437 -722 356 1.696763561997333 -749 356 -1.148906797372784 -767 356 -.4976357885377075 -787 356 .899033497050449 -789 356 .8023458792032205 -794 356 1.7954373054167025 -810 356 -.860319502271826 -812 356 -.22674017218915532 -825 356 -.49525476407763774 -832 356 .0988290056688397 -835 356 -.8877426396573573 -842 356 -.211715734851041 -853 356 -.3302934981503956 -873 356 .7671167491953235 -882 356 .36006813361590845 -896 356 -1.1812928139622056 -899 356 -.06709796370591412 -907 356 .275509967088325 -928 356 .28824135890104247 -935 356 .5443219142187644 -936 356 .92885155349709 -941 356 1.2020062247767578 -943 356 -.15195284967211348 -952 356 .07531289278044292 -986 356 -.020799356094047948 -989 356 .5595812728002971 -998 356 .4383579769219167 -12 357 .3248834369446977 -23 357 .8262970484182108 -48 357 1.4885894456841295 -49 357 .1356467451611708 -64 357 -.8393654304848254 -65 357 -.8110925490727856 -68 357 -.5872158854380483 -75 357 -2.5484998425865384 -77 357 3.7773729295783096 -83 357 -.849414872303081 -89 357 -1.0641489741309826 -124 357 .4580336581916297 -126 357 2.110779356507811 -130 357 -2.3999208993410694 -143 357 .047504826109504 -165 357 .7874478503498037 -172 357 -.33318956711830916 -181 357 1.6023981367757236 -205 357 1.2681574639239857 -236 357 .6213239674550392 -244 357 -2.950534326410299 -262 357 -.6840202603103729 -272 357 .00875501788390197 -280 357 -.3115609634253607 -301 357 3.5921711143481807 -333 357 .6441390367643638 -341 357 .3467539265185226 -343 357 -1.6919411897314396 -347 357 .14835419558015378 -355 357 -2.760741017728184 -367 357 .14568423861274324 -383 357 2.129645598887461 -385 357 .03817944400935283 -397 357 .9955858276789606 -400 357 -1.2497338306621752 -405 357 -.07574916346471547 -413 357 1.900142406959377 -414 357 1.4215426346906403 -415 357 -.9555952554325496 -417 357 2.1642616990433425 -424 357 1.1229580292182175 -442 357 -2.0223984895863434 -457 357 -.7092396684214912 -459 357 2.4729109682788404 -462 357 .24215822975942802 -469 357 1.5201448606076335 -481 357 -1.306563801043436 -514 357 1.527960162193097 -531 357 .8939564083062274 -532 357 .021003760989951922 -541 357 -.3514359519072345 -557 357 -.5001094497641321 -559 357 -2.2810167152834793 -561 357 -1.4659582864274259 -563 357 1.5029192676044194 -567 357 1.3994322425377799 -574 357 .533032528893036 -584 357 -.685659286366193 -586 357 1.528828854406883 -598 357 -.5106746711165975 -600 357 1.1112067964614971 -608 357 -1.006782168031332 -635 357 -.24990240923327095 -639 357 -.3531764202235714 -661 357 -.5810069964331841 -669 357 -.7632317759056999 -715 357 .5732004597515353 -718 357 -1.595505680545911 -723 357 1.9789658898860332 -751 357 -.9452375918181393 -757 357 -.0702550109768093 -763 357 .02724323299884071 -765 357 -.4459090381505451 -767 357 3.575929796167394 -770 357 -.6502558180200382 -775 357 -.0005622876145957023 -783 357 -1.2259255005180123 -789 357 1.3507417086421942 -793 357 -2.1936457210018427 -799 357 -1.2133583574685542 -804 357 .25891686146765586 -814 357 2.251535062952032 -819 357 -2.1266601580675712 -828 357 2.6700664671696583 -829 357 -1.0253457102174428 -834 357 1.3690619811146565 -866 357 .9980249873924572 -883 357 1.3919648529092912 -899 357 -2.321251021933696 -902 357 -1.8814922428367646 -907 357 -2.3292641319093703 -909 357 -1.816515167784571 -921 357 3.4147567081486807 -939 357 -.04940181491303117 -952 357 -2.621339961672774 -967 357 -2.769597742014878 -987 357 -.2921301450266085 -6 358 .02296122517384598 -10 358 -.24040829883329953 -22 358 -.7580114851697269 -25 358 1.0783070650190707 -45 358 -.21700883216258685 -54 358 .5527204091769016 -55 358 .9300712916793525 -56 358 -.7897721017114914 -57 358 .42535976078183485 -63 358 .29767052899939545 -65 358 .43740716648956385 -86 358 -1.4306977961173941 -89 358 .14068202612827546 -90 358 -.48013796507663453 -97 358 -1.2900355365810827 -110 358 -.7275893759906454 -147 358 -1.1364696644583872 -161 358 -.7673401024214361 -184 358 .039257697679315036 -188 358 .5508803781583173 -203 358 -.7547325911102243 -205 358 -.6847142463074621 -219 358 -.031266522316647546 -221 358 .4203395292383123 -222 358 -.3529341713607318 -230 358 .996507735978039 -235 358 .6578021966204096 -243 358 .20488516950187072 -273 358 -.41657879076743676 -283 358 -.3039497176404972 -287 358 -.7496990428036401 -289 358 -.4735647351746248 -291 358 -.8180403137939235 -292 358 -.24897128768523125 -293 358 -.19322375420590876 -297 358 -.9536749621770221 -308 358 -.10768860051115155 -310 358 .6658367136192918 -321 358 .6653801291235077 -338 358 -.7518624023849694 -351 358 -.02919447927461795 -357 358 -.5580499911895985 -358 358 .7957347451882845 -375 358 -1.0036053241596246 -380 358 1.353128581089631 -384 358 .8776992895758926 -389 358 -.8289475293858701 -392 358 -.2046216257721593 -399 358 -1.3290511240175877 -403 358 .5776887271667199 -404 358 -.23327396173646425 -416 358 .16983416644459615 -420 358 -1.0892337575898545 -436 358 -.41828334815831963 -450 358 1.3686627176065895 -467 358 .8056038440206232 -468 358 -.6417516870561755 -474 358 1.5126320733641334 -479 358 -.6114841233889458 -492 358 .7266471682517427 -532 358 .17011498565183442 -535 358 .12559265632479516 -541 358 .8998723296782586 -543 358 .10222998441288442 -551 358 .4957381846348983 -562 358 -.7549366184115998 -575 358 -.9321873157240383 -589 358 .7192385764141505 -603 358 1.5350537161346085 -605 358 -.01829964415020012 -606 358 -.2804025610848792 -619 358 .12583145765199855 -620 358 -.10855255901612036 -625 358 -1.4282098008578723 -649 358 -.2438481210371818 -653 358 -.3535802756924276 -660 358 -.2484559268883677 -670 358 -.2989802011756134 -672 358 .7081007609401868 -673 358 1.1534351869865345 -685 358 -.5605894641512189 -690 358 1.0617377394614922 -707 358 -.8355447940099958 -712 358 -.9647763924416501 -732 358 .05309651203350571 -744 358 .8440419125049708 -753 358 .6732715763701606 -773 358 .02294842752156577 -799 358 -.8576355482373524 -815 358 .9204699449675884 -822 358 -.6850954069296875 -825 358 2.033369519984748 -827 358 .3809621769794686 -834 358 -.6692676305697721 -843 358 -.5853570108080574 -845 358 -.14161487289419394 -852 358 -.9059306512312483 -867 358 .35226033143675417 -881 358 1.0662926669318156 -882 358 .3368494609857011 -894 358 -.9467198783008426 -908 358 .7732766411027671 -920 358 -.22382309786810223 -924 358 .22891308700464083 -930 358 -1.1182583286116639 -932 358 -.09935572210964723 -948 358 -.8722085927043032 -956 358 .30035714765467547 -960 358 .5258406881060841 -983 358 .08548360495549562 -993 358 -.903491071783573 -25 359 -.9721971164196211 -39 359 -.7656326749472347 -46 359 1.172835044313934 -48 359 -2.233985383669487 -51 359 -1.2744780521642403 -58 359 1.0930486478565853 -63 359 .3611035082934834 -65 359 .050236681772543305 -78 359 .44236379805240955 -80 359 -1.7842764038547712 -101 359 -2.016511364715717 -103 359 -.10085672026245922 -111 359 .898089870693665 -116 359 .9775123929049478 -128 359 1.080174447045463 -137 359 -.3994705339209528 -166 359 1.087166055553081 -172 359 1.4074138417471864 -190 359 1.4479283795424385 -193 359 1.158348070496358 -216 359 .923877653355574 -229 359 2.2249801311250375 -230 359 -.5758934606020146 -254 359 -.199004002893236 -257 359 -.49940134762516153 -260 359 -1.0520371693133668 -269 359 .3264435794550854 -273 359 .9049689032995922 -282 359 -1.1363321006499827 -292 359 2.010157131760226 -296 359 -.7492388328520135 -312 359 -1.791419920771132 -318 359 .8660891305800675 -328 359 -.06931593839513861 -333 359 -1.0048011618358708 -338 359 1.1938935966951723 -345 359 .3501587620493818 -346 359 -.16501149392600833 -360 359 -.04971175192425434 -371 359 .2248231640106978 -377 359 -.4848233211194086 -409 359 1.1668056507882862 -421 359 -.5739479472589543 -430 359 -1.0278197585506768 -439 359 -.5999700044399394 -458 359 1.8216959691264787 -468 359 -.3979900042278091 -477 359 .6550524396553081 -480 359 .13311825819027712 -483 359 .3097377085170808 -501 359 .43702653997051505 -534 359 .2502717990926102 -536 359 -1.2480816192777227 -539 359 .65614938825392 -588 359 -.35506996112759015 -615 359 2.7133415515390644 -628 359 -.04674106554810312 -631 359 -1.782017530161559 -642 359 -1.1868456667056748 -649 359 .776799056100867 -650 359 -.33592088295714184 -658 359 .626829591902732 -696 359 -.2605063082436875 -727 359 .6629575233717437 -732 359 .7234458726625899 -756 359 .9492053656342794 -762 359 -1.6359301024297923 -764 359 1.345118197300427 -769 359 .8966964957762931 -784 359 .16718486799346155 -789 359 .5142817019861403 -795 359 1.2218886133757858 -797 359 -2.133421267881127 -822 359 1.1654709773658511 -826 359 .8123798547406781 -848 359 .9720506907914402 -850 359 -.5615014379230292 -856 359 2.0236970044237106 -858 359 1.798966843832947 -865 359 .22796975038941297 -875 359 1.62245590856173 -882 359 .0801510946284208 -885 359 1.3183704452294147 -888 359 .9515413939298542 -899 359 .9771839625467076 -942 359 1.0569892648806378 -946 359 -.8849249961102876 -992 359 -.7276036219444261 -998 359 -.8984616242462264 -2 360 .1497844466879482 -11 360 1.2257865906831644 -19 360 -.5207800490249459 -35 360 -.3733106897586164 -41 360 1.0774667159176547 -48 360 -1.5287392094073153 -90 360 -.1284395431922836 -105 360 .40913016174920974 -106 360 -.6795814816845774 -108 360 -.8631133740506328 -118 360 -.8080126798948242 -126 360 -1.190376378495279 -128 360 .901849874714987 -164 360 -.945358842105836 -172 360 .7340428859476578 -173 360 .635304496538297 -205 360 -.9029583476859895 -230 360 .37690631715583467 -233 360 .0972708374818666 -234 360 .8260815683162492 -235 360 -.09937198336241782 -238 360 -.22032996236840888 -245 360 .831642631382939 -247 360 .39265647136605947 -250 360 -.4096697052230342 -294 360 -.13026793514808768 -297 360 -.026582724671295993 -306 360 .31170678341035213 -338 360 .6841968501162783 -344 360 .12309417003282344 -351 360 .5427571776495735 -379 360 -.5421050143950032 -380 360 .5519148110538173 -393 360 -.6550352691752654 -409 360 1.1938194602346661 -416 360 .28012885588614256 -420 360 .6102863078859257 -422 360 -.26446672612772226 -434 360 .5698639684574041 -441 360 .36205044735415437 -455 360 .670553026987439 -473 360 1.0579179308080633 -474 360 .6720737000111168 -477 360 .5323779760243732 -479 360 -.2160195653378548 -496 360 -.5084957338389564 -500 360 -.6145014053115933 -504 360 -.49715622685225574 -514 360 -.36584358609093975 -523 360 -.27437811250346683 -527 360 .6643930521246125 -546 360 .4498113575151998 -548 360 .40815777104958323 -549 360 -.43203232307666534 -557 360 -.5247731439691147 -562 360 -.1126634524154298 -564 360 .6222980658761509 -571 360 .7592154616490784 -579 360 .676865328701747 -592 360 -1.249803620340863 -595 360 -.1549799135396946 -617 360 .4174876997371608 -619 360 -.46795772011097536 -646 360 -.471088427252238 -655 360 -.115152065222251 -662 360 .6948790648035258 -678 360 .11229070304755698 -682 360 -.20620538074910388 -701 360 1.2627742499795673 -731 360 .3430876852235909 -754 360 .8139296717558996 -769 360 1.0336637314798494 -773 360 .2821092134633893 -805 360 -.2022252172665297 -830 360 .12503196569807162 -838 360 1.3864165805750208 -839 360 -.4029791174744462 -863 360 -.45707332664054445 -871 360 -.2981817754007503 -872 360 -.7854580222968539 -883 360 .311212545821966 -893 360 -.13626446677398582 -902 360 .18570037735153538 -910 360 -.8618201425303376 -915 360 -.1000237701652891 -955 360 .7908490166305954 -963 360 .6639855628060969 -971 360 -.7235150736507424 -986 360 -.5776587186349204 -991 360 .24237151578359392 -996 360 -.55379970596519 -4 361 -.6315548526905497 -15 361 -1.9784240481496624 -21 361 1.0633605193555622 -25 361 -.4833395388780394 -35 361 .42555042840598806 -53 361 .6041249636744418 -95 361 1.1027124224502052 -108 361 -.6452590759319465 -124 361 -.002764673425218786 -125 361 -.545407310540476 -137 361 .18149481035669474 -148 361 1.926223598671704 -149 361 .905850487223732 -151 361 .8289336922264271 -175 361 -.2519648685534888 -190 361 -.9304487297142208 -191 361 .07713433128191707 -195 361 -.2260131063942024 -211 361 1.2509429399784813 -217 361 .5603361375636783 -218 361 -.4438641477348044 -237 361 -.8981507630115158 -245 361 .04204208802375799 -254 361 .5174234348033335 -255 361 .7327055702648275 -266 361 -.7245867650485449 -268 361 .5697731382645228 -270 361 -1.2285745316525951 -289 361 -1.008842403216452 -294 361 -.05465820198358459 -306 361 -.009046497596134906 -312 361 -.5841516953364775 -322 361 -1.2927175606422936 -326 361 .770276577623591 -327 361 .14546729836486966 -334 361 -.1859840047581736 -340 361 -.43146177919568945 -349 361 -1.5253955886666903 -353 361 .20064216513653788 -354 361 .9429186138236101 -355 361 1.8678612364171239 -375 361 .21766536494351751 -377 361 1.4515099684436272 -384 361 .26582549593852645 -388 361 -.8666193322146245 -389 361 .0013446230473176946 -397 361 -.44220337886055694 -402 361 -.9592451054284905 -442 361 .6806889964163546 -475 361 -.1218400090850513 -491 361 .9435004704374121 -494 361 .14882590448995808 -501 361 .5682753345671707 -502 361 -.29854716777398865 -514 361 .05259423673380306 -528 361 -.6007319564992096 -546 361 .5373419354142992 -549 361 .037274201602280996 -550 361 -.036210207033254976 -565 361 -1.5064683373398644 -568 361 -.1818674539686005 -571 361 -.5703814443468738 -572 361 .3963924435977667 -588 361 -.829653909831357 -590 361 -.1997536538494975 -593 361 -.23407144890955445 -618 361 -1.6333235671691433 -620 361 -.3305111697975505 -627 361 .6537902564660641 -642 361 -.24111902903231328 -647 361 .1702120376327984 -651 361 -.2819413338676593 -654 361 -.46454817010096594 -687 361 -.4818703067472073 -706 361 -.34474226268106367 -742 361 .044851183892403446 -752 361 -.9611055682088805 -754 361 .41404015009392525 -756 361 1.010071371355024 -757 361 .417392852492642 -762 361 -.6978576889420192 -769 361 -.10901956203085816 -780 361 .4298017619509522 -792 361 .7992480998444228 -795 361 -1.3248582119679488 -798 361 .8818444464970645 -815 361 .41356673243253966 -817 361 -.7426818367143805 -826 361 .6421219411043133 -830 361 -.6874287489403326 -835 361 -.8222997309308041 -842 361 .6125911925726564 -845 361 .1712766931963849 -857 361 .257186117504586 -888 361 -.2280139918922873 -891 361 .5727534687257518 -893 361 -.5537917155076572 -903 361 -1.6091468394010442 -922 361 -.8442537099281671 -927 361 -2.09924342268433 -937 361 1.106633313522168 -962 361 1.307598997398877 -966 361 -.1383853633781089 -974 361 -.4132600562950071 -981 361 -.4527547362363875 -990 361 -1.0647611124845793 -994 361 -1.222406262271339 -1000 361 .009788010641084643 -4 362 -.6181900291571427 -11 362 .2925661037725356 -24 362 .47331042438421295 -29 362 -.314501900207125 -64 362 .40840914370289105 -82 362 -1.1076803377877058 -95 362 -.5013713562552512 -105 362 -.6420406232020354 -122 362 .27619499373727874 -125 362 .5043192616964323 -129 362 1.1206633241477615 -161 362 1.1892578329396686 -162 362 .024075162486694092 -175 362 -1.5646195153719547 -202 362 -.5325649622599643 -204 362 .32243016649786266 -212 362 1.377372661408072 -223 362 .16378936198255692 -224 362 .7390366280741056 -228 362 .20808150849370446 -231 362 .5003605133296152 -241 362 1.5586393115194341 -244 362 .37521331832270144 -252 362 .8580588866277543 -255 362 -.7305640677658692 -264 362 .38029301016520567 -275 362 .46587709664000077 -284 362 -.5211626731275849 -311 362 .15999182685048263 -314 362 1.116275053427851 -329 362 .09216664620040434 -335 362 .8157143434228818 -353 362 -.5727325167414095 -360 362 -.6427480370229014 -378 362 .7420897011459472 -389 362 -.16442570566249823 -398 362 .42170531279875084 -428 362 .2266636402595659 -443 362 -.7022068896562811 -453 362 -.7279939583183747 -465 362 .00559117031566439 -489 362 .39334876269953445 -493 362 -.6250265447882051 -505 362 .8106396313128488 -509 362 .2535428948382775 -523 362 1.132598259293196 -528 362 -.7308975027160851 -541 362 1.0360558959998252 -558 362 -.3315220334719427 -566 362 -.0930616537438354 -572 362 -.7920587550370816 -584 362 -.9300773297658187 -592 362 -.07033217859904344 -593 362 -.538504846871964 -600 362 .14043366040418648 -604 362 .21396047827026474 -628 362 -.38618333846942743 -634 362 1.9989923869611899 -644 362 .5390642447860559 -663 362 .24590486267050465 -678 362 -.3585265678027078 -681 362 -.7059699052416802 -689 362 .154808977424779 -690 362 .6252589612685495 -712 362 .6256404333994624 -716 362 -2.206742132684142 -724 362 .02109989906797994 -725 362 -.259407659389081 -737 362 -.47633739731236463 -750 362 1.2122946506477876 -752 362 .6917483195924228 -756 362 -.756039834265669 -770 362 1.6274498014812007 -771 362 -.8060911050574288 -788 362 .1286580688150168 -795 362 -.24338842630892343 -804 362 .24739543941311004 -821 362 -.44831474191108384 -827 362 -.15833651719386235 -836 362 .3599283008395744 -837 362 -.5877287991446892 -840 362 .6554765142435729 -852 362 -1.8322830688214848 -877 362 -1.3161835632649144 -901 362 -1.7673271444631906 -906 362 -.5465624796306876 -908 362 -.7232064014588979 -915 362 .2029002982478117 -922 362 1.7932317247527614 -932 362 -.21979665966719225 -935 362 .5175104883652824 -956 362 -.9531300819832051 -960 362 .5312136581234695 -962 362 -2.0935954297332584 -972 362 .30396851796101076 -994 362 .27876189865304946 -995 362 .06944540227705154 -4 363 -.7240085256227315 -6 363 -.40423742077602753 -30 363 -.02061147105392984 -44 363 -.13764959616163097 -46 363 -.5939183380963486 -50 363 -.23360044431375632 -52 363 -1.43941173675145 -56 363 .790393776646222 -70 363 .5451596581735219 -73 363 .8690736265503083 -76 363 -.2976806239492571 -102 363 .8174799970154474 -112 363 .2879676624251963 -114 363 1.1626540614619638 -130 363 .23249601157535768 -132 363 -.5040868216177672 -134 363 .5261617780601731 -144 363 -.6582729787717866 -148 363 .8619129913231314 -155 363 -.32566341357249295 -183 363 -.43385657690071777 -190 363 -.5835028204342887 -207 363 -1.053603271415553 -208 363 -.019540414937974135 -232 363 -.7426253058827834 -245 363 -.9882586797390839 -280 363 .029003609858391868 -292 363 .15534285450885238 -295 363 -.2701846928028236 -301 363 -.6756111058327764 -302 363 -.723350209066689 -309 363 .9124521375504363 -312 363 .15867721695267334 -320 363 -.09200419998257289 -323 363 -1.0337598863526916 -328 363 -.02466763734529596 -345 363 -.07986291113312591 -363 363 -.136555689049642 -369 363 1.0543228955642399 -383 363 .41832912165554886 -396 363 1.2013616794112345 -406 363 -.9300191810491452 -407 363 .06279883306181024 -414 363 .33882973173027486 -416 363 .48352261466975466 -436 363 -.36311678173203155 -447 363 1.0842698164004463 -502 363 .24323789004152202 -506 363 -1.00590477453134 -511 363 .33456008233379453 -512 363 -.5051327190598239 -525 363 .08500666331280408 -531 363 .36416546393775034 -551 363 -1.6599999990744705 -554 363 -.026039223469572208 -566 363 -.01992714096184399 -571 363 .10538629193058192 -579 363 .46748735533734853 -581 363 .4759978744900727 -588 363 .18039733221307824 -591 363 -.7264837025418867 -592 363 2.2429745381861124 -605 363 .6756782617561188 -609 363 .35216399876653876 -620 363 -.039197236881661206 -645 363 -.17784804998677867 -646 363 -.11852436564332916 -654 363 .656510746633003 -661 363 .5943756810313763 -670 363 -.46333691880264766 -682 363 -.959644913639752 -696 363 1.4145383427942617 -699 363 .5398343458517133 -714 363 -.40168789231131563 -717 363 1.6916994783498018 -725 363 .020936920121487596 -732 363 -.016857920571182544 -737 363 .3688062790598471 -744 363 -.8159132011687529 -747 363 .18818776565115114 -748 363 -1.4021125993351236 -754 363 -.7995778910876689 -763 363 .5158801069183364 -765 363 1.3791044081704402 -784 363 .26106065454033156 -785 363 .31885297993788775 -796 363 2.021447638214575 -800 363 .4405539147468306 -804 363 .21632962403658745 -811 363 -.07144927988703839 -813 363 .40795972844001016 -818 363 .2365475032055877 -832 363 .6442064456257193 -840 363 .3505245074814989 -848 363 -.6045528436268496 -883 363 -.09832795861070212 -888 363 .00558791053807417 -899 363 -1.5452254880068064 -900 363 .25289155875965785 -901 363 -.6504670911811652 -908 363 -.08067766456236414 -909 363 -.3817441719862029 -922 363 -.3161857918497597 -928 363 -.7643680297793312 -934 363 -.08033927508802044 -939 363 -.16869811804967227 -962 363 -.9519622037160708 -973 363 -.5716795486352132 -981 363 .2331992478485519 -987 363 -.6579224154700745 -992 363 1.0243936356478307 -993 363 .731200008975351 -7 364 .24432239455444982 -18 364 -1.0860468627022937 -33 364 -.4658260836231028 -35 364 -.6220239027016994 -40 364 .08999449012824426 -41 364 .4866547683736496 -46 364 .5682543413099457 -65 364 .1401988967039845 -103 364 -1.6224598209214447 -107 364 1.2334472982885518 -112 364 -.08711512705000123 -116 364 -.6240486140572952 -125 364 -.17059345845997173 -130 364 1.2031385045185792 -137 364 .5858161720996746 -150 364 -.7706434307050506 -154 364 -.4115909663087255 -173 364 .8984720435834499 -186 364 -.7333096360976337 -188 364 -.6569279446170897 -193 364 -.6362208097803334 -195 364 -.5379502737604012 -204 364 .3702794940457598 -213 364 .12132160877275741 -228 364 .7917005107476164 -231 364 -.3917712430804673 -239 364 .4271126809935785 -249 364 -.7341015009097696 -250 364 .1426698428554833 -267 364 .032969296333687614 -270 364 -.34517566857407583 -281 364 -.7191934565547452 -287 364 .092798121970076 -299 364 .39281299366172956 -303 364 .9239476901287546 -309 364 -.6762565113038296 -328 364 -.22338132816035036 -341 364 -.3667306734192073 -352 364 .48232341736497314 -372 364 .39371161362157564 -373 364 .3907793303510845 -386 364 .09675508683156796 -394 364 -1.1425894722565937 -413 364 .4102888561081336 -418 364 -.4886819546598199 -432 364 .5547577962592869 -435 364 -.6778775047841787 -442 364 1.7096453232038056 -447 364 .6485862480289966 -452 364 -.8831756258573208 -473 364 .4599330372384797 -475 364 -.018009570016951703 -483 364 .4058149163395105 -484 364 -1.8577896386685768 -493 364 .06096871530282724 -495 364 1.2800029949827194 -500 364 .045837723053594834 -501 364 -.9376349178798303 -505 364 -.34676740387521765 -506 364 -.8025971798709647 -523 364 .78133243515679 -545 364 -.09463620922086335 -547 364 -.1778433224444754 -552 364 -.5036990953354978 -553 364 -.4993756963498419 -563 364 -.4408718272062198 -588 364 .017598750099535633 -592 364 -.09286142292243871 -599 364 1.4192169645325585 -617 364 .5562463971716564 -626 364 1.6179370641981563 -632 364 -.11261182538231745 -653 364 1.3288962270683982 -661 364 -.7429403568164051 -668 364 -.5581797661518368 -672 364 -.6097986803478905 -696 364 1.2673259813331168 -700 364 -.4932678228756815 -704 364 .6317471568095964 -719 364 .4223364212050629 -738 364 -.020812226282809126 -755 364 -.06775909233736092 -757 364 -.582578879374805 -769 364 -.5949772425467735 -771 364 -1.09389535228468 -792 364 -.38763318429675464 -799 364 1.2900724023335282 -802 364 .12958720946281008 -803 364 .7031234553237029 -814 364 -.408316871036918 -817 364 -1.489968008391892 -819 364 .1508645764066418 -827 364 1.0937454858528637 -833 364 .8722639752133858 -838 364 -.03322342430561622 -845 364 -.8427938389097519 -849 364 1.4206964951883496 -855 364 -.1820076066256136 -881 364 .03292891098359423 -883 364 -.19549667419620917 -896 364 .15579690995821388 -897 364 .30749127000542653 -913 364 1.1196671876929696 -914 364 .9134246986178931 -916 364 .20438025925943656 -923 364 -.552106984460356 -940 364 .3512406768335465 -984 364 .24778138348531437 -11 365 -1.4747653842361979 -27 365 -1.6157823218289884 -32 365 1.287430891408483 -47 365 .5572224410222767 -57 365 -2.0020663857590395 -70 365 .6577140900957361 -77 365 .6061545498384996 -88 365 -.9181745214026376 -101 365 -1.324799918056716 -111 365 2.139114233547678 -115 365 -1.2345917594821776 -116 365 .2772528927392051 -117 365 .10260043634180285 -124 365 -1.0163333692191487 -145 365 .3649696863528605 -148 365 -1.5552147873658326 -158 365 2.762147053541838 -167 365 -.41188334204152777 -181 365 .39693377126014123 -197 365 -1.6030456155792634 -206 365 -1.9728113367158622 -217 365 -1.6186234568744386 -243 365 .24639499647083035 -244 365 -1.7903259426213693 -250 365 .11842871459534288 -254 365 -.9660293548345668 -264 365 .7635579235148856 -272 365 2.4334474711189165 -297 365 2.4630447458328857 -310 365 -.7466007648233557 -312 365 1.7452873854741717 -319 365 -.3840733839881726 -343 365 -1.5064462373703247 -345 365 -.45849223717806564 -349 365 .8244196157089261 -355 365 -1.7283405188282654 -361 365 1.2438847944692593 -369 365 -1.9621292320572337 -381 365 -.2100898986057192 -382 365 .29533168271301335 -388 365 -.42996493458235074 -415 365 -1.9524322452118434 -422 365 -.8857139687300595 -438 365 .9819039887821203 -440 365 -.7673770840096203 -445 365 .49873949344887497 -449 365 1.0284125986301365 -453 365 -1.4846146883769593 -460 365 .2952927510764664 -462 365 .6253050024480945 -465 365 1.096924586210096 -469 365 .6818437582791119 -470 365 .4488495239959144 -493 365 1.032184612991284 -496 365 .1423971217784224 -502 365 -.35828518777485086 -512 365 -2.0403018859103557 -534 365 .7443683038358765 -554 365 .6159676527131611 -574 365 .01337062042311836 -577 365 1.6596525235049626 -585 365 .01888978274211385 -593 365 .15763478454082597 -594 365 .5034575336785252 -601 365 -1.5383457194599879 -605 365 1.9046551967381853 -607 365 .23675942999852834 -609 365 1.9792663692650627 -631 365 -.6340608282881522 -635 365 .8816370964453345 -640 365 .06727390000422011 -647 365 -.4410369394923678 -650 365 -1.3614153449856181 -653 365 -1.292152130817668 -659 365 1.8398125371699838 -674 365 -2.6557912596259436 -696 365 -.43120084575459694 -701 365 -1.6882147330423933 -716 365 1.875460681201528 -725 365 -1.5329463265586496 -729 365 -.08582547381427641 -735 365 -.33904355636603384 -738 365 -.8767925466409918 -741 365 1.0322568787190405 -746 365 -.4254417087869956 -769 365 -.21730318459632791 -774 365 .3966494613225443 -794 365 .9558145496842316 -795 365 2.25819861244464 -810 365 1.5555397834848061 -829 365 -2.008039237289534 -839 365 .4961351944182733 -842 365 -.8375468492901696 -855 365 -.0255447757271947 -856 365 -1.0697127184934487 -866 365 1.6727036666888673 -868 365 -2.4537626013761047 -876 365 -.1639273911664382 -884 365 .6210278622972473 -888 365 .3655088918510852 -905 365 -.7891368708581783 -910 365 1.2099311566377098 -911 365 1.138246307140496 -912 365 -.47588021438858646 -913 365 -1.4971348010884982 -914 365 -1.252233910061041 -929 365 .30835244767015274 -933 365 -.9698081072048883 -936 365 .7187540726472488 -961 365 -1.0671733448066403 -972 365 -.24073127909626907 -976 365 -.004603496864409806 -2 366 .7531194264065793 -13 366 .35988926735725824 -17 366 .7939979781433224 -39 366 -1.23054408960383 -43 366 -.4042970248252341 -53 366 -.8479272530389508 -81 366 -1.0609497079954202 -96 366 1.5599075717528745 -115 366 -2.7086772459347253 -116 366 -.574541200615563 -117 366 1.9366181226110124 -120 366 -.7120474805902636 -155 366 -.7648504043566233 -158 366 -1.5734827705352787 -206 366 .5377634816446761 -226 366 -.05912343579443036 -275 366 .5327512132536553 -301 366 -2.292860515342148 -305 366 -.7863200398214787 -308 366 -2.2128335870706386 -320 366 1.443141645593096 -345 366 .924712913339856 -348 366 -.8334185809410173 -361 366 -.025402124767260593 -370 366 -1.186442969375287 -375 366 .884737385094424 -380 366 .2608200662333564 -396 366 -1.2581376737392866 -397 366 -.3954121644166431 -405 366 .5549696638316809 -408 366 2.2528674884126607 -412 366 -1.2851865528718318 -419 366 -1.3031958616821857 -421 366 -.5273031853075592 -423 366 -1.120869398416746 -434 366 .8340300402256232 -446 366 -.8459253189224202 -447 366 .941256626208239 -458 366 1.9739609019945719 -463 366 .5674707477013392 -505 366 -.7511320399274425 -506 366 -1.6864293463123168 -509 366 -.41117578064143623 -517 366 -.5302693971371885 -533 366 -.0026705771119400756 -555 366 1.1607194985022313 -557 366 1.2208820659112383 -565 366 -.13158601896633254 -574 366 .6968455430248403 -579 366 .9526120085525389 -586 366 -1.7413491717463578 -587 366 1.8515372650501485 -590 366 .13119042210730664 -593 366 -.26147529189818 -596 366 -1.6827003452240628 -601 366 -1.151329874322686 -612 366 -.6258668194227222 -632 366 -.5809085239723564 -633 366 .31829872282103416 -640 366 -.246775925186773 -678 366 .1254601487484108 -687 366 -.6153191437176073 -705 366 -.6111227964300904 -737 366 -.7053462964474047 -755 366 .13376677567296769 -782 366 -.5270499138751406 -792 366 -.5140955325895789 -802 366 1.4557696006177578 -808 366 -1.0417125500210822 -816 366 -1.126277054214842 -818 366 -.44955435782407394 -823 366 -.742527696446836 -825 366 -.7870242766387703 -840 366 -1.6313885222974942 -871 366 2.6319561743872733 -872 366 .63782153586306 -878 366 .7663028492754351 -885 366 -.8264138533167042 -888 366 -.6697016410060869 -903 366 -1.5010475147928066 -908 366 -.4727276095741602 -934 366 -.7596450351553549 -943 366 -1.281796598328358 -946 366 -1.7560099482009166 -963 366 .7211338268844507 -967 366 1.1727751545242986 -974 366 1.7316647636099278 -980 366 .46149937409756125 -981 366 -.47444407337184136 -985 366 .297897794725439 -986 366 .12186323282794884 -996 366 -.9519533063224895 -1 367 1.6430863053903955e-5 -25 367 -.43483211414938533 -28 367 -.5848972300999788 -29 367 -.32594230198295393 -32 367 .4828907145545922 -34 367 .058145443890477766 -51 367 -.36421890924708894 -54 367 .43457894843272593 -59 367 -1.5077746985082285 -67 367 -.023922369443422797 -75 367 .6865262056020531 -76 367 -1.006382839493304 -81 367 -.9146740858116313 -115 367 -.8211319245583093 -120 367 -.16445777286489172 -133 367 -.509386112204321 -155 367 .37685776596779064 -164 367 .2994673447070516 -172 367 .6320980201722143 -175 367 .7437359425548429 -178 367 .393546692490897 -180 367 -.803746914793275 -185 367 .6194683069175284 -208 367 .005061182346683041 -231 367 -.3775329125218533 -244 367 .9612712457956822 -277 367 1.4942064036543035 -294 367 -.4077609981941643 -299 367 -.13533147158908468 -303 367 .17166118398656008 -309 367 -.14780536490158036 -313 367 .9104972669287344 -325 367 -1.0250366446248382 -378 367 -.19342738045616242 -382 367 -.4953856653818085 -409 367 .9917578689497352 -419 367 .12750080411993198 -420 367 .23997343183947617 -431 367 -.06721289313506375 -435 367 -.5825241314576112 -445 367 .3527734008228687 -457 367 -.4783640397896866 -475 367 .3734774349512578 -493 367 .7823873523371547 -498 367 .5688801281456697 -510 367 .12948885988752712 -523 367 .8220369351713364 -555 367 .8041035233159688 -570 367 .7066190165675275 -598 367 -.17759625475780058 -603 367 .10106495715643347 -610 367 -.21252015261278173 -613 367 .1719687352675204 -617 367 -1.4494662336214224 -628 367 -.5833045213980401 -633 367 -.7850203617258118 -635 367 -.5273543878101502 -641 367 .011269586862218045 -653 367 -.07566927306711026 -676 367 .04482453446847383 -677 367 -.14582877290646235 -680 367 -1.0188004691299397 -685 367 -.37770470261674066 -690 367 -.7252990432738087 -699 367 .2557980939438839 -716 367 .5685296724593666 -722 367 -.10317349852461546 -733 367 -.2251514417330035 -741 367 -1.2572860643600705 -757 367 .3274573931996496 -765 367 .12179581532061574 -800 367 .3612793060205379 -824 367 .20072319904661057 -841 367 .578944403933989 -842 367 -.5048657455205836 -853 367 .5743526657210155 -861 367 .42293668945408436 -866 367 -.1983668126782961 -875 367 .4873172817865418 -883 367 -.12530943592484037 -888 367 .20712983822378417 -897 367 -1.0753080657880898 -904 367 .30246742269278837 -922 367 -.204513930408064 -925 367 -.47188311195747684 -927 367 -1.3620251429193044 -928 367 .4943923603210465 -948 367 .46227568923278717 -959 367 -.2874945429304031 -962 367 .35378147871391763 -995 367 .07313542644264517 -1 368 .4386020514173894 -48 368 -1.6112506037182022 -52 368 .16879628880259478 -56 368 .554902904869205 -66 368 .9955315241610847 -84 368 .06825668831216108 -85 368 2.6315356274019077 -88 368 -.1586665043667806 -101 368 -2.22172469510329 -123 368 -.26410505661694816 -131 368 .06286951446455757 -136 368 -1.3475943872739318 -141 368 -.6971642007457884 -144 368 .5798787116157547 -158 368 .6263030669610202 -160 368 -.9055454558231574 -180 368 -.6432738125392947 -191 368 -.3478482249900453 -193 368 .8091776739950559 -199 368 .9038718833986152 -200 368 -.2920149778701192 -204 368 -.2468181507848365 -210 368 .004142535984941964 -221 368 -1.4972296218423193 -229 368 .507209098086786 -232 368 -.18726767144759615 -245 368 .37597705962078304 -262 368 -.40690716518867065 -263 368 .5129932869377348 -272 368 -1.2389336948410445 -290 368 .3848193046214391 -292 368 -.05934802557814617 -296 368 .39900132590366494 -302 368 -.4412351327896761 -304 368 -.04167963620055582 -347 368 -.10363221147532979 -350 368 -1.2180238771360223 -355 368 -.7347554499701392 -365 368 .9276756709420838 -371 368 .008980053948341924 -374 368 -.302863032362375 -393 368 .0007973931376309418 -400 368 -.4626421948434897 -410 368 -.5886942230022897 -466 368 -.49484165875479047 -468 368 .4564281033564525 -472 368 -.3542623902952608 -475 368 -.024115009400173942 -481 368 -.02145458112138235 -489 368 -.14449915915231254 -503 368 1.6367181998484535 -511 368 .12644640178881833 -519 368 .3754502043748353 -527 368 .7000995903494136 -560 368 .685713092788933 -566 368 .018047530990390054 -572 368 .5047817126477072 -584 368 -.9280010887397044 -607 368 -.6817654590480154 -637 368 -.5499034393770216 -645 368 .32618191366284305 -651 368 -.9244674932538772 -654 368 -.19371274437503683 -658 368 -.07291217819428829 -659 368 1.0102084263115625 -664 368 -.03991430035719745 -665 368 -.07968799618684586 -675 368 -.43831680178950594 -681 368 .5131187598275726 -683 368 -.023808557491892868 -685 368 -.21720929019444904 -689 368 .3586274895364081 -691 368 .24452981545433738 -701 368 .3553481025221441 -707 368 .16498572220142474 -714 368 -.5100918829636975 -716 368 -1.018192545153476 -725 368 -1.1558841272413762 -747 368 .4427397162766711 -752 368 .814142384116253 -763 368 -.9235636709963442 -781 368 -.8419403797960984 -783 368 .304237874535844 -788 368 .698774215171184 -801 368 -.5831921089833403 -803 368 -.8176012103267196 -813 368 .8536504190847835 -827 368 -.7326079137876318 -845 368 .23898178342711274 -866 368 -.34607745469953066 -875 368 .4078390945866751 -879 368 .17440064897260854 -896 368 -.5945077193808639 -900 368 -.5529493548275576 -943 368 .5906704107848183 -945 368 -.9775946617588016 -13 369 -1.1225477131937238 -16 369 -.16220449930483072 -23 369 1.3371541387912227 -27 369 -.5447176906799024 -67 369 .20854427635190856 -68 369 .5905519001760559 -74 369 1.2349436743707063 -85 369 1.8821095417173204 -102 369 1.2056719472492854 -114 369 -.9336834211202798 -118 369 -.6276255902578852 -149 369 -.130357845184131 -153 369 .541623781892414 -166 369 .4016143547737717 -174 369 1.4999872777070806 -185 369 -.6194263443489896 -203 369 .09067256047003996 -214 369 -.579195185349237 -215 369 -.5160104616176994 -223 369 -.49906202405149025 -232 369 .23253306300831708 -252 369 .26355771945849255 -270 369 .48755252549794925 -272 369 -1.8138310166447877 -274 369 .25765401316545244 -279 369 .5282759043114214 -284 369 -.9679570856868807 -285 369 -.39113192297469934 -296 369 .9737835981128209 -320 369 -1.68128248645913 -326 369 -.6346874042762513 -327 369 .20568534337362485 -329 369 .3058005064964274 -357 369 -.03698861247665648 -358 369 1.8708528644795357 -359 369 .7784308920126988 -364 369 .5588999030235811 -368 369 -1.1327647605470073 -372 369 -.2948311811413779 -377 369 -1.271942419461161 -390 369 -.41783811066037646 -391 369 -.17588136822696576 -396 369 .6189117595487278 -397 369 .03312966761274766 -399 369 -1.5947504359978102 -404 369 -1.4954881871533237 -416 369 .6033203360875369 -419 369 .974330180388371 -432 369 .9019187746104784 -444 369 -.14321146264865386 -457 369 2.155494349083079 -460 369 .6732914134193527 -462 369 2.2085843065978867 -477 369 -.844510708733039 -495 369 -.34774563935902736 -501 369 .03454569125882676 -507 369 .2757285341004338 -521 369 -1.364139109151291 -529 369 -.4865487984830273 -555 369 .7280451650622018 -567 369 .03556913840888114 -569 369 .6843203126144007 -577 369 -1.1814080053157276 -583 369 -.057118862433886766 -590 369 -1.2381160098298294 -592 369 -1.59982854869096 -599 369 2.746540777375474 -612 369 -.9400021825085585 -642 369 .16298560752598687 -649 369 -.01411654663457576 -651 369 -1.582492536512606 -662 369 -2.071475223968996 -669 369 .18751382150090895 -683 369 .5148499879758732 -701 369 1.63751981106769 -712 369 -1.0296406826596245 -716 369 -3.0324475693322794 -769 369 .6255005619438068 -777 369 -.27020506999675714 -784 369 -1.3309469413695012 -789 369 -.5646232439145064 -816 369 2.3579885035229524 -817 369 -1.6958631406842226 -821 369 .026111927825584746 -825 369 .6881941861460059 -831 369 -1.4236902962405515 -833 369 .8034262860168727 -877 369 -.542192887217158 -901 369 -2.0077645824512835 -938 369 -.0794513949178315 -948 369 -.34702867907796964 -970 369 -.9993441364252941 -971 369 .09999670483271267 -977 369 1.0035795280980448 -988 369 -1.4445443974256267 -993 369 -.7218542205115711 -3 370 .26591432915250907 -20 370 -.43929970456305667 -25 370 2.7603011100247157 -29 370 -.4439802929627654 -61 370 -.7240463434673933 -63 370 .21729006273388923 -68 370 .6506005271003356 -87 370 .41765997703562574 -91 370 .6251147657679809 -93 370 1.5514210778573385 -95 370 -.6023132897747332 -118 370 -.8043596417838104 -120 370 .8019636531014974 -127 370 -.004661251691148338 -150 370 1.706859928977404 -176 370 .9320778199812733 -188 370 .8689650558689462 -202 370 -1.3228648295710945 -218 370 -.7192699443042975 -227 370 -1.6522402140292547 -233 370 .5034206828176051 -243 370 -.5303389941479952 -244 370 -.40785706455223564 -259 370 .8344825797215367 -270 370 -.6132298311281523 -312 370 1.0741393849375078 -318 370 -.08205703575144366 -322 370 .3819740253001268 -326 370 -.34786829201958847 -356 370 .4326397770933 -360 370 1.520236502072576 -382 370 -.08046792229019195 -388 370 .34078345212781946 -389 370 .03962780272095569 -394 370 1.1268246078791126 -398 370 -.46104991982939814 -406 370 -.3015331378977517 -417 370 1.4591085936923491 -423 370 1.0523984971439713 -424 370 .10255695376765758 -431 370 1.0672553559775197 -432 370 .7305324362404876 -443 370 -.28518573654791907 -445 370 .17614890347696568 -459 370 1.019600286537448 -470 370 -.09541704731920242 -471 370 -.5435500534455244 -475 370 -.22509985515431874 -487 370 -.45776474214898494 -506 370 -.3233279184223509 -514 370 .6373745102430255 -536 370 .2274860925202207 -553 370 -.4375190260350553 -583 370 -.1226648993060598 -607 370 .09988367861903258 -625 370 1.1936444331219058 -627 370 -1.3967644298666702 -628 370 .4157819401248395 -631 370 -.08720538113889596 -635 370 .8356457453003201 -641 370 .5727378597877757 -648 370 -.4618524491888265 -649 370 .4440890825707382 -651 370 .3559029172971136 -673 370 .20017668511109524 -689 370 .449440525905298 -690 370 1.077066739459674 -695 370 -.5788654075701901 -704 370 .2322221568988912 -708 370 .08865940623602998 -715 370 1.8314004375114774 -724 370 -.4220408215705318 -732 370 1.07630013264794 -734 370 .30722001137987404 -737 370 -.018647808056752153 -763 370 .4852170089721383 -806 370 -.4811089127596815 -809 370 -.193019150858442 -826 370 .2993809213982495 -828 370 1.8283844593494747 -831 370 -1.7156015098572257 -832 370 -.5373433959116223 -855 370 .7657564246202372 -873 370 -1.3885706307156402 -898 370 .3921425189698219 -899 370 -.3439485475305473 -909 370 -.8099298967947339 -910 370 .7371257254520244 -921 370 .6143591190090429 -923 370 -.8370949337313967 -928 370 -.8052460867414123 -936 370 .7434468349277715 -954 370 .689899416679967 -983 370 .47780121038518597 -7 371 1.5184510694893392 -11 371 -1.2087882923066746 -18 371 .9928129040965629 -22 371 1.5031932512759847 -24 371 -1.7906546505910739 -26 371 .07107086422433005 -32 371 .6206503044445797 -51 371 .8578617114848059 -52 371 -.8077212751118801 -55 371 .45093369575688313 -64 371 -1.35517210383225 -74 371 1.8393946014425901 -78 371 -.014275668001141632 -81 371 -.5485695200464683 -135 371 -.5762026139388261 -140 371 -.05518406966660344 -144 371 -.012256752252634506 -155 371 -1.6047369359722008 -157 371 -2.3481377825128993 -179 371 -.8316297896364204 -182 371 -.09275502166994645 -183 371 -1.577454577716713 -184 371 -2.1241918133363344 -192 371 -.37293653916930347 -198 371 -1.4931226527789394 -216 371 .620875512376197 -219 371 .4059161375297732 -237 371 -1.244578976870716 -240 371 -.0464587000939409 -248 371 -.13999397940899194 -271 371 -1.771979895004421 -276 371 -1.1270729308362417 -294 371 -.7854116984677572 -305 371 -.7179290986763397 -309 371 -.02687527074605786 -310 371 -.3675849667320936 -316 371 .8476208168187102 -320 371 .6051546154680657 -351 371 2.244222666499444 -365 371 -.7388600515452882 -371 371 -1.3189955997226366 -372 371 .03953911979566515 -373 371 -2.6891740293327815 -377 371 .24774120267867675 -397 371 .038379012542878815 -407 371 .4186733582628348 -409 371 .20787027791154442 -429 371 .9866145095641119 -440 371 -2.825144400019434 -457 371 -.5651431026930803 -464 371 -1.3173070839179033 -497 371 .4896622881271303 -500 371 -.9787309981736699 -515 371 -.23191851716424847 -516 371 .4125819675414786 -522 371 -.40309291537876446 -523 371 -.0035189838393529377 -527 371 -.7421581977638283 -540 371 .543689361684682 -542 371 1.9849658952299996 -571 371 .8861043020376008 -578 371 .11268424513496186 -604 371 -.28283149588409073 -628 371 -.06709410703720803 -629 371 1.4774889627400065 -632 371 -.11711395338604455 -633 371 .8047644985621594 -635 371 1.2020671459938688 -640 371 -.15452339947994279 -647 371 .3541201424133144 -649 371 .5961331393263395 -650 371 1.1026263917851666 -651 371 -.9100819448789698 -662 371 .21805139357449754 -685 371 -.7297740639537037 -732 371 -2.163480294308439 -740 371 1.3721907233467645 -755 371 -.22091288127526784 -768 371 -.5189560202719238 -770 371 .2366277527738694 -771 371 2.0256447317136757 -772 371 .0342209563114336 -773 371 .11462237923763552 -795 371 -1.9333648529562326 -807 371 -1.4714310956488692 -821 371 .9065611280224712 -826 371 -1.2039362384092884 -830 371 .7602954667847893 -831 371 .07934700513560759 -868 371 1.3697227459863939 -869 371 1.0420107564994368 -875 371 -.10893678116795275 -876 371 .4712310515642247 -893 371 -.8664091542632111 -895 371 2.1209540457760303 -899 371 1.0961276726554716 -905 371 2.8036445048606993 -909 371 -.7083530565770296 -927 371 -.010066407815094935 -932 371 1.350332760639973 -936 371 -.6813482850615027 -955 371 .3367831111129923 -961 371 -.4177763311492373 -962 371 1.8625276262095534 -965 371 .3341013859506857 -975 371 .3981348336652332 -982 371 .8071089020224841 -988 371 1.0593687158699971 -995 371 .2060357032296738 -997 371 .1704610373304508 -8 372 -.49203845610654506 -10 372 -.7553904821641019 -29 372 1.2751705470962336 -41 372 1.2915000958420357 -48 372 -.27730045092951916 -49 372 .4465172098091371 -52 372 1.9655842149952862 -59 372 -.5327252673322839 -88 372 -.5046180368930324 -94 372 -2.187872474243604 -96 372 1.7978920871355508 -101 372 -.5462180985067806 -140 372 -1.663171544652035 -169 372 -.027615533683435445 -186 372 1.1804413575523793 -197 372 -1.0687100447029971 -216 372 -.015547111790719052 -220 372 1.0078932415549264 -225 372 -.46658137829565244 -250 372 .5847673171594403 -257 372 .6845379233893449 -266 372 1.7119888537892736 -273 372 -.3087522311702801 -274 372 -.5478460193928445 -284 372 .6349471649149074 -291 372 .18823731502648225 -307 372 .32295488360581565 -317 372 .2661114952975031 -328 372 -.7506257891491221 -331 372 -.0970936937228378 -344 372 .33030223536377573 -370 372 -.7309596034514932 -379 372 1.0091074946681107 -405 372 -.14360721040578076 -407 372 .7753225964300426 -408 372 .18180084778778105 -411 372 -.6538264192814197 -417 372 .9664911978809412 -420 372 -.16807827445748838 -422 372 .28060219827813726 -428 372 1.670294308909395 -431 372 -.29718131357559885 -448 372 -.49083816160581817 -455 372 -.8721820246106403 -461 372 .7160393798362935 -480 372 .35394595133189 -496 372 .014798418772738964 -507 372 .5622884178268082 -510 372 -.2863987037584486 -514 372 -.923137565576511 -515 372 .7807348761638396 -535 372 1.0984671491424318 -560 372 .9277992358000853 -564 372 -2.2227894814332947 -568 372 1.7913352060263446 -576 372 .8890417536187879 -581 372 -.18034025001729412 -589 372 .5618807303345813 -593 372 .9111135458495303 -598 372 1.0223109294772175 -606 372 .01921555067205391 -613 372 .12437721483337635 -618 372 .08665070465179038 -628 372 .9613142463018483 -630 372 .1814442909352125 -631 372 -1.2922795530285467 -633 372 .9071124849522277 -665 372 -.9955051642999625 -667 372 -.9324809585651779 -671 372 -.7724071551497971 -674 372 -.10373282267721792 -677 372 1.8652631538264515 -696 372 -.5054655535343442 -723 372 -1.859286958335642 -735 372 .847704840818997 -757 372 -.6160054349977943 -764 372 .707443611462056 -774 372 -.061112894499138676 -785 372 -.8243339240210439 -788 372 .8425228640961108 -790 372 .13319640017581436 -795 372 -.1654820966906151 -806 372 .24923157180100522 -807 372 .3764917619732421 -820 372 -.5604550538807276 -853 372 .17981407305982205 -860 372 -.5228239087996197 -868 372 -.3148024741536835 -876 372 -.2661165220352038 -886 372 .04490635761390541 -893 372 -.5208961786304855 -921 372 -.376902395980883 -928 372 .9528432873733756 -930 372 -1.107470855403263 -934 372 -1.4954032405402056 -945 372 -.7103747021169372 -959 372 .551304503131878 -998 372 .3296951193828974 -1000 372 2.081370008866185 -2 373 1.0682508374420605 -3 373 -.3739992149258662 -13 373 .09551872443134146 -22 373 1.3365715614432347 -35 373 .29314350112621534 -39 373 -1.9897558573621554 -67 373 .5038274241714488 -76 373 -.48371951423713944 -84 373 1.2024112767647588 -86 373 -.7367890081148004 -95 373 .4201004734393883 -119 373 .6934927984410931 -124 373 .5291203422495775 -133 373 -.1960912061946939 -137 373 1.7667328667344238 -152 373 -1.5730236863689655 -155 373 -.4026511148560748 -156 373 -.9654691761773828 -158 373 -2.0042656499996094 -163 373 .5137226000854057 -180 373 .8770509989457035 -182 373 .44094378617650165 -192 373 -.9263117147589165 -219 373 .5512032873304058 -254 373 -1.4755251622150287 -263 373 -.07782065864216955 -277 373 1.0624328697969 -300 373 .9925011434959344 -301 373 -.29619332874028487 -303 373 .02456157155185615 -306 373 .7974848747574682 -308 373 .6160001774216126 -316 373 .5941984349845246 -320 373 -1.3018955668344476 -323 373 -.1270279024041353 -324 373 3.45721492276924 -326 373 .028016045792439444 -330 373 2.33264044980268 -336 373 -1.5421647080225447 -346 373 -.4036853000516736 -353 373 -.3450846048608262 -358 373 -.02961922310470147 -366 373 -.5887490539066307 -387 373 -.08047828770854804 -390 373 .9510677133645185 -398 373 -1.06299338118343 -409 373 -.6725975133064415 -420 373 -.7030618338470178 -444 373 -.6675795796877935 -447 373 -.8736481660348365 -463 373 -1.9096967958893463 -476 373 -.6840301341262187 -477 373 -1.7022454814322472 -502 373 -1.706000062505837 -509 373 1.3486224783407361 -515 373 -.6473099113632903 -538 373 -1.4144911996372997 -542 373 1.200758644804134 -545 373 .07694783852808941 -554 373 .3359810819490559 -555 373 .8555938371348749 -580 373 .5016774626637374 -583 373 -1.7573535643093792 -592 373 -.036049104949295835 -597 373 .12972607887212798 -598 373 -.034065376513428 -610 373 -.17500121497704507 -620 373 .3854974239841084 -631 373 -1.9799864420670996 -634 373 .8901172466953676 -637 373 -.8133995081690667 -668 373 1.6841023200567102 -676 373 .20104446307768742 -690 373 -.17080950725583566 -692 373 -2.055339898100369 -698 373 -1.0214787915005266 -708 373 -1.7543614857550618 -719 373 -.7472656229180794 -721 373 .5557342177369434 -726 373 .9676275822479393 -728 373 .0655269724620613 -738 373 .15363161493282573 -756 373 1.5050439016918609 -758 373 -1.6723244604665672 -775 373 .5918841856192409 -778 373 -2.522471363821241 -789 373 -1.0093631912741512 -799 373 -1.9272750832076095 -807 373 1.3949606008437947 -820 373 .0886249701041455 -822 373 -.5975293882957179 -825 373 -.1189499760165666 -827 373 .2416726718023377 -829 373 -.051998018962118975 -830 373 .004278993500866385 -834 373 -.16329351020702526 -840 373 .9449616082511129 -848 373 .14305440971931538 -853 373 -.759702145281766 -867 373 -1.1356827744358557 -875 373 .45094547491176845 -876 373 -.20499923646444101 -903 373 -1.5368377236250248 -917 373 -.737008640101772 -938 373 -.626996360606231 -942 373 -.9762790753981214 -944 373 -1.37925102808274 -947 373 .49023233059655524 -952 373 .47814829215538357 -955 373 1.8466546418904939 -964 373 .27441688056530694 -967 373 .36720648119740157 -982 373 .5957136847677005 -984 373 .15985211189371737 -986 373 -.5599981384431233 -997 373 -1.8421651336151508 -7 374 .34898575666019255 -9 374 .0672864964264247 -10 374 .49052430817235415 -15 374 -.6180552536477679 -17 374 -.12596379771124278 -26 374 -.026791203303877742 -67 374 1.1263346765181026 -85 374 .8294965267531412 -103 374 1.0716354424179755 -117 374 1.1835264805788546 -118 374 .5716638290144431 -132 374 1.5232174072705544 -142 374 -1.0045968896480337 -146 374 1.0380295708861784 -175 374 -.4946485044497608 -194 374 .2998212446554662 -218 374 1.4251928354417167 -253 374 .3141430753019631 -254 374 -.029500060881584717 -271 374 .6377671005622749 -280 374 .5093603155592215 -322 374 -.02413635939966821 -323 374 1.8599659698153581 -331 374 .7331400290341524 -351 374 .015730732471164452 -355 374 -.47659218564802613 -392 374 -.5144732155070801 -398 374 .5989134984493502 -409 374 -.24859306770674036 -412 374 -.03137364120260752 -427 374 .006712188146480005 -428 374 -.5261556605507832 -433 374 .0025730560969762784 -436 374 -.513940377769912 -439 374 .8251907905730949 -442 374 1.054922089276201 -443 374 .13551986494996637 -461 374 .4402580592950479 -463 374 .7795743439981233 -465 374 -.5225243506918404 -466 374 -1.8805841421004683 -478 374 .036450994361398606 -483 374 -.9147539315191483 -487 374 1.0761423427326104 -501 374 -.5607590026991925 -529 374 .046833777732396276 -544 374 .7918674118192183 -550 374 -.1663309970752234 -553 374 .7648105926932326 -560 374 1.274722357404016 -563 374 -1.1179354562911228 -565 374 -.12502331169097053 -566 374 -1.1747501825298312 -588 374 -.6710092726893364 -602 374 -.350283315738549 -615 374 .10883001667793742 -622 374 .7808891955951336 -634 374 -3.4196074423012823 -639 374 -.669866966779912 -641 374 -1.2353588567337999 -666 374 -.29640592707797425 -671 374 1.451612940035398 -672 374 .5681842323597306 -690 374 -1.2478584198603626 -692 374 1.1123177302247422 -696 374 -1.5371820864655694 -701 374 -1.0137197851598811 -705 374 .4492897980352093 -707 374 -.4111395686559405 -720 374 -.6622701957119553 -722 374 2.282181705158726 -730 374 .9436652272053365 -753 374 -.00335086599143046 -755 374 .10846296571832521 -765 374 -2.2791490324974286 -769 374 -1.2747870584808787 -781 374 .07803058048396434 -794 374 -.3893940886314057 -803 374 .8347299988114336 -809 374 -.9188768532784688 -836 374 .12538251060871897 -855 374 -.5555574587343797 -865 374 -.4180506094703449 -868 374 .24680024546603088 -877 374 1.2058489692107148 -879 374 -.9123733356818481 -897 374 .5875237983744899 -911 374 .26861351002807143 -928 374 -.21472139049946526 -945 374 -.782116132372197 -951 374 -.79020612248952 -974 374 -1.441608524447293 -992 374 -.5718215167982275 -3 375 -1.5888014591279935 -15 375 .2841364248374794 -25 375 -1.5758356774455025 -26 375 .780863764117221 -41 375 .6015182549738327 -47 375 -.28108620339215384 -64 375 .06301410461065421 -66 375 -.12756054111544454 -84 375 -.5481559114198638 -94 375 1.7711435287630153 -108 375 .8919240620147915 -111 375 -.8264834509995459 -124 375 -.08204842283335162 -125 375 -1.6431375570404267 -133 375 -.4050863643541328 -138 375 1.078696736757731 -141 375 .6740459103060275 -152 375 .40200275400416896 -153 375 1.3839863218261828 -158 375 .2461453644310274 -173 375 -1.2407467860791117 -177 375 .6871103241508925 -193 375 -.12157875589747551 -199 375 -.5996112692167614 -213 375 -.4813708202276863 -215 375 -.3116222693119032 -236 375 .5282633390296099 -257 375 1.3966225566253314 -262 375 -.015914986364801237 -267 375 .21826939953457014 -291 375 1.9492012007775252 -316 375 1.0591467527975202 -328 375 .1618880312049983 -334 375 -.7940068114766488 -338 375 -1.2647571103880817 -349 375 -1.815883705164784 -387 375 .5068045336724815 -388 375 -1.4494343228393787 -394 375 -.027645132822361224 -417 375 -1.3178675944285418 -429 375 -1.1254253104271363 -436 375 .5266481822450911 -451 375 .09307150551943928 -460 375 -1.025372560443585 -476 375 .7367595303656942 -487 375 -1.2745353479605683 -491 375 1.0519002993129758 -539 375 -1.4595615808891167 -558 375 -.4745784212073318 -575 375 -1.1316792474039252 -583 375 .4454379286514462 -589 375 -.01950368950742673 -609 375 .6776353291437542 -610 375 .15315219881443992 -619 375 .8000709008370421 -626 375 -.4148804135443027 -658 375 -.6436298364909648 -670 375 1.0503846535299164 -677 375 .06536127268650356 -702 375 -.5327322628272145 -717 375 -.9949006235639363 -723 375 1.491773041841243 -731 375 -.32329596243758696 -733 375 -.5608249040575953 -743 375 -1.5069444415683684 -750 375 -1.4721883171723202 -751 375 .13090738013401815 -758 375 -.8638704862786439 -767 375 .0916464446843346 -779 375 .5508193453328332 -797 375 1.4896672779693563 -800 375 -.9057786499942726 -846 375 -.4864374454494221 -847 375 1.948324434248892 -854 375 -1.3675973352564366 -869 375 1.3730205785840308 -871 375 -.4267833552922664 -880 375 -.33957475186987107 -909 375 .04476021872605791 -911 375 .8724271523247094 -923 375 .8610995301400342 -926 375 -.21964570287035678 -942 375 .5768387408857689 -947 375 1.22949969688327 -975 375 -.40703340944880434 -987 375 -.5102803201865609 -992 375 1.317424914225479 -993 375 1.2841845322389343 -999 375 .9349019413135762 -25 376 -1.46172634529691 -26 376 .15003879946910617 -29 376 -.7637422947072606 -46 376 .8695084803517291 -50 376 -.03962900247237276 -52 376 -.6630171021615678 -71 376 -.5957456573206561 -74 376 -.6188534124010272 -83 376 -1.2877730982683555 -96 376 -.8945897362781796 -101 376 .7891922498358859 -107 376 -.467367969207854 -134 376 -.15810855690979173 -141 376 .04018317861534844 -163 376 .13910520603184834 -170 376 .6376256895095426 -173 376 -.2508293550427425 -180 376 .17201429839726196 -188 376 .25791996629694747 -218 376 .8023093429176097 -229 376 .4734896770686898 -241 376 1.036534175265964 -262 376 -1.5545606279681556 -269 376 -.9385107224447615 -295 376 -.10574390582085584 -304 376 -2.4690284635707807 -310 376 .42994478743428327 -313 376 .3069066178065759 -322 376 -1.2733503367489767 -323 376 .8619915365236663 -330 376 .7491148153386544 -331 376 .6204031833655835 -363 376 -.8654063161319119 -384 376 .2622482555797351 -402 376 -.22149536091065514 -421 376 1.0487711272897515 -427 376 .13951505700176892 -428 376 -.48047144199601616 -436 376 -.30128681265796353 -443 376 -.8383650883783818 -460 376 -.7974177983699233 -468 376 .48781265154283593 -497 376 -.21169874998121674 -508 376 .2810878064671747 -523 376 -.003544964444682247 -528 376 -.8050492654414239 -530 376 -.20941238175399512 -539 376 .897170992137423 -543 376 -.6952944662242341 -545 376 .6883406935558513 -550 376 -.9399460000954981 -558 376 .5978745716293294 -562 376 -.05466851638163796 -585 376 -.8591082304068878 -587 376 .3698665039199603 -602 376 -.2914758617022144 -608 376 -1.0491909115823104 -638 376 .48928715380985216 -643 376 -.3673711099439106 -645 376 1.767867310918954 -663 376 -1.0258777180453214 -684 376 .7714447781662149 -700 376 .23697442407452798 -703 376 1.2287349215852363 -704 376 .16897370013069077 -724 376 .26480784824333625 -725 376 -.4672982647555197 -727 376 .9750433816089454 -732 376 .025259620815345857 -735 376 -.15461674122312272 -737 376 -.19769823428660538 -749 376 -1.8030786838026183 -766 376 .8169208919225746 -785 376 -.8327798607004996 -793 376 -.9990629427251623 -794 376 1.2394423263330354 -797 376 .2515829936888266 -801 376 .4116426824534637 -809 376 -1.5226470477553125 -822 376 .2916446255992108 -830 376 -.6416661630720932 -833 376 -.5810297567495066 -838 376 1.507970637841812 -856 376 1.1088324227979245 -877 376 1.2388918541904803 -884 376 .9722101220043026 -893 376 -.20850386672921037 -924 376 1.8294501547144983 -927 376 -1.2231170439104488 -931 376 .8335205767018075 -942 376 -.5030561441613935 -943 376 1.6336653934240273 -944 376 .05850795865999093 -953 376 .9654266016706449 -956 376 -.41853746457531854 -959 376 .7283696191690617 -973 376 .021651479774410357 -991 376 .733168422985173 -992 376 -.08034647262315403 -1 377 -.5650422934527539 -12 377 .06676442695463583 -27 377 -2.5539088394175695 -36 377 1.808345340236908 -38 377 .21026743778027074 -40 377 1.0406556932346995 -49 377 -1.5467081761237627 -69 377 .34396010714044617 -81 377 -1.1499658503008858 -92 377 -.274911533716504 -101 377 1.063673467787988 -103 377 .34701398259087607 -134 377 .27951010551321215 -141 377 .06898421577455649 -142 377 -.14192661420697633 -145 377 -.22609998180789842 -149 377 1.7178856433682528 -150 377 -.24418282554203338 -165 377 -1.3373994150899946 -196 377 -1.172596472475833 -209 377 -1.3977058849347916 -212 377 .29728005754951814 -215 377 -1.123255318468648 -225 377 -2.726440308367237 -229 377 .4280667605308442 -249 377 .052334723862610205 -251 377 .670580775192466 -252 377 -1.4347461797051007 -264 377 .44918389372635387 -269 377 -.7823516910979176 -284 377 1.2571175037898445 -290 377 .06238228925007982 -295 377 -.18317835283780334 -308 377 -1.1980550869125521 -315 377 -1.7080883174984065 -324 377 -2.0907416255865523 -342 377 .3673446107152449 -367 377 -1.4825512392546805 -368 377 -3.0961297861064776 -379 377 -.22399518985323263 -400 377 .021799336885292273 -401 377 .5164728680210173 -403 377 .025922617069878223 -418 377 1.6934036519916371 -434 377 .3792525513076773 -442 377 1.0477370229719132 -455 377 2.8412754200238495 -478 377 .18514817970117214 -502 377 -.49007335431044896 -503 377 -.41466444739353986 -516 377 1.401773242350851 -526 377 .8013256212922429 -528 377 .011455384125772572 -532 377 -.6568582672662837 -566 377 .06918429660312422 -572 377 -.5042777866636603 -594 377 .5545864831761728 -612 377 .10796079610758724 -622 377 -.3325785257226227 -626 377 1.9910289829744454 -632 377 -.5766555506650236 -663 377 -.08801068922495808 -677 377 1.1532227943092614 -682 377 -1.4886030818569465 -686 377 -.5629993631489147 -698 377 -.2349196062973392 -710 377 -1.804660348655772 -717 377 -1.2718501055706364 -722 377 .23972677731545922 -732 377 .051388332362626514 -750 377 1.1087331208243334 -768 377 -.003434266743426853 -802 377 1.5337327811200305 -804 377 1.3208415122336545 -810 377 1.1968200619365597 -822 377 -.9350504052202058 -829 377 -.37830313926031356 -839 377 -.7787798746914291 -842 377 .15983691980229145 -846 377 .13244875137796205 -856 377 -.23643246497950787 -864 377 1.3171294711343027 -868 377 -.8314258412998501 -882 377 .927539143840014 -918 377 .26978523227859413 -954 377 -.6997808120141817 -971 377 -2.035054681149761 -988 377 .24746547677805203 -989 377 .09218922233806971 -9 378 -.45408538328868225 -20 378 .18367271459907716 -49 378 -.05004146518816166 -53 378 1.0398687643639493 -62 378 -1.2643122205456956 -64 378 -1.481282032737516 -65 378 1.0791751518006216 -68 378 .6056187139001487 -81 378 1.0911334083475013 -86 378 .053574155502786644 -92 378 .025486789602413573 -97 378 -2.143565087977312 -98 378 .15353717241448725 -103 378 -.8651787961741233 -122 378 -.32849953820420164 -136 378 -.16445049540494308 -153 378 -.7958552564439093 -155 378 -1.3863554742172637 -156 378 -.48782477970335225 -163 378 .4359725667288191 -167 378 -.9634636170927249 -197 378 -.4608408164530549 -203 378 -.013975406353163425 -212 378 .6537052051899604 -215 378 -.5252465575192191 -228 378 -.5070703888370192 -235 378 -.05284724864080695 -251 378 -1.5291656445841963 -257 378 -.20549605570748636 -258 378 .3034797894211353 -259 378 .16264193116836395 -260 378 .29757813674310013 -269 378 -.3243728336851849 -290 378 .1105527229192868 -299 378 .005481957683287617 -310 378 .05831863663294193 -314 378 .4128806945846507 -323 378 -.7124737268621687 -331 378 .034135305521081086 -354 378 -.5121746457336853 -357 378 -.41845416613999054 -362 378 .16850948818569145 -370 378 -.4908308271289879 -377 378 -.025738051650141744 -390 378 -.64411175996149 -394 378 .7340385993976004 -399 378 1.0026072429080655 -409 378 .22923004443450004 -417 378 -.009222857527497843 -423 378 .5356718645093299 -425 378 -.24823815363448148 -429 378 .590679410580858 -435 378 1.244602993845075 -439 378 .5551434723449644 -446 378 .6542668839984328 -457 378 -1.1555470279760462 -467 378 -.425900790715774 -515 378 .287431341315126 -545 378 -.11139738960473909 -552 378 .5826323615755814 -553 378 -.5736373772409107 -559 378 -1.0760363939720685 -579 378 -.044250163593906565 -593 378 -1.0426734397670063 -605 378 -.3060688465936174 -611 378 -.506337295702183 -615 378 -1.818161778575528 -617 378 -.45457750790973556 -620 378 .2544712604837022 -626 378 -.07344331387915481 -633 378 .6023729066414416 -637 378 .06954972641820364 -656 378 .33619776905970383 -669 378 .6497473229582792 -699 378 .3837049368097708 -714 378 -.47153882969208943 -716 378 -.23034543163646692 -722 378 -1.271045005416721 -738 378 -.36203938549393483 -748 378 .48702900289941436 -759 378 .06897771607780935 -766 378 .3784867428972421 -776 378 -.6919192723127308 -780 378 .33645741807405694 -786 378 -.05354967601047603 -790 378 -.8182065826795132 -791 378 -.38996069087385576 -803 378 .17527192781442402 -808 378 1.6184211993780775 -811 378 .36619263718462924 -820 378 .7041918542317988 -823 378 1.4291976682509506 -829 378 -1.0312769559565782 -832 378 -.14047778307360917 -833 378 -.04495149903454089 -837 378 -1.2070147594641087 -843 378 .6450800646526001 -886 378 -.42332494039985413 -899 378 -.18978072734718776 -920 378 1.0822299479912547 -927 378 -.15084268707888046 -929 378 .49620920238373456 -930 378 .31636469887905194 -931 378 -.4394289238569484 -940 378 .26911907523375606 -948 378 -.008735490802728674 -966 378 1.0267552265193054 -972 378 -.5305573487896895 -983 378 1.2536311957805983 -17 379 -1.022456350837508 -26 379 -.7512269000785978 -30 379 .357834240412246 -32 379 -.4609860482774668 -57 379 .1237697152522107 -83 379 -.03458898560228804 -85 379 .8905555189008487 -91 379 .23303461814359472 -98 379 -.06394987982066819 -104 379 .5555399103443784 -105 379 -.5622669705485207 -134 379 .0520246569086598 -143 379 .09530463397705058 -145 379 .17798945321608878 -152 379 -.0717112792112356 -160 379 -.6939033734487665 -201 379 .9161937625817131 -219 379 -.012819669094357382 -224 379 .17084726436941036 -229 379 .23214953113286965 -250 379 .1287265775659026 -254 379 -.15550485470245962 -255 379 -.7026414114762793 -267 379 -1.0170061592416744 -298 379 -.04111001706401688 -305 379 -.6331141220006615 -314 379 .18835805768267067 -322 379 .4919312899665421 -347 379 -.13172185064107572 -360 379 1.0586986869102637 -363 379 .6360285923667819 -367 379 .6308582293596616 -368 379 .3114464323489934 -371 379 .6304605286625443 -376 379 .5539941005849973 -378 379 1.0812636099882096 -379 379 -.04797046312312179 -380 379 .04296035324176935 -386 379 .7766688640408538 -411 379 -.6484925823247801 -418 379 -.61760461364238 -449 379 .07435843570393712 -452 379 .6235747912805185 -455 379 -.8325985302754076 -466 379 .16402742538705306 -467 379 -.694940593452202 -483 379 -.003706594442352669 -497 379 -.9743928002851546 -512 379 .7365913914469039 -514 379 .19013644653322032 -515 379 .06123924465316076 -535 379 -.468778753958899 -536 379 -.5407470474886344 -539 379 .3840033747393007 -555 379 1.1376898176627823 -558 379 -.16482102846369212 -563 379 .056293305452417224 -575 379 -.16469065281630157 -584 379 -.4335889164914032 -585 379 .00013010533303194072 -588 379 .3597437719366013 -603 379 .6159948028178289 -608 379 .09559207756290561 -609 379 -.720374900931517 -623 379 .7895145280818481 -627 379 .12704342067318014 -644 379 -.03042682038956715 -661 379 -1.0246376029462183 -663 379 .02742684138962769 -681 379 .4706688628140262 -683 379 .2028744860492235 -704 379 -.3058688385264609 -705 379 .10793154283206463 -713 379 -.2937284810826147 -718 379 -.3156138163980716 -723 379 .7765472417561584 -726 379 -.18781754149829538 -728 379 1.6703167499806142 -734 379 .43930632383489265 -748 379 -1.206403710073372 -770 379 1.0463977525854014 -803 379 -1.123916468241175 -806 379 .05262761748908973 -810 379 -.28662601083009076 -827 379 -1.0975587814002368 -849 379 .7019700496868431 -863 379 .09101420403286392 -875 379 .06886516037711193 -880 379 -.17872501592638748 -922 379 1.1608431329977804 -945 379 .11635324985671901 -946 379 .04509467193795041 -950 379 .6611560074793081 -951 379 -.3739813010465023 -973 379 -.06831035604833822 -974 379 .7822418109691119 -986 379 -.17164868457655819 -991 379 -.4434123690153273 -994 379 -.30484275872848243 -11 380 1.5776113243571737 -16 380 -.437954806207567 -24 380 -1.3377439300176917 -27 380 .5622153247767124 -29 380 .7681352468238359 -30 380 -.5291125136404893 -36 380 -.09150055908095023 -37 380 -.5512104287424353 -59 380 .384256252793093 -74 380 -1.1908966828950844 -80 380 -.979593287421516 -105 380 .8593366405545952 -108 380 -.8738958355202344 -109 380 2.0277748726084797 -113 380 -.4172808454839298 -127 380 .9965146801284758 -130 380 .12375440584418382 -132 380 -.12862275139982482 -156 380 -.6823255897243249 -169 380 -1.3641759469986867 -171 380 -1.0315765820700369 -175 380 -1.6049064979262047 -177 380 -.28627674756904214 -180 380 .44769122102395553 -197 380 .23253083730388868 -199 380 .07420915185128787 -223 380 -2.0627919114279996 -232 380 .22943841978924878 -235 380 -.633949760525548 -238 380 .5464113933689495 -256 380 3.670170835294574 -269 380 -.14780857282980836 -277 380 .146579035721894 -288 380 1.19170913988561 -293 380 -.09781853300704015 -299 380 -.5409081288223896 -305 380 -.05584506684351334 -311 380 -.2787942975675301 -316 380 -.5356485580208528 -333 380 -1.7188017931702304 -337 380 1.6476682483183172 -338 380 .8699342450960706 -343 380 -.3687594327057584 -353 380 1.084747839666428 -360 380 .6894332164464513 -362 380 -.9887199755211803 -363 380 .35544608068889816 -364 380 1.3324305466021147 -379 380 .9670210308294178 -390 380 1.6899856476575457 -393 380 -.43837923913299764 -402 380 -2.0466743660437627 -407 380 -.16853246788309306 -408 380 .829445728222363 -421 380 -.01551601867742898 -436 380 .9849965715425872 -447 380 -.5922963818521607 -453 380 .14297073564405183 -472 380 -.3914583116401128 -482 380 -2.065989288411666 -487 380 .2114296905158706 -500 380 -.9781495114284473 -501 380 .9695246222547168 -504 380 .9154327232770831 -515 380 -1.8674611922390407 -517 380 .8237134429115672 -547 380 -.6511521729751613 -549 380 -.05311406702344654 -551 380 3.1308893554171755 -553 380 1.3996178430470458 -562 380 .01976735794500123 -572 380 1.7513521702236898 -577 380 -2.6286980888955824 -579 380 1.754835295026966 -580 380 .105788126919798 -581 380 -.8970151961418613 -582 380 -.4940241535682458 -585 380 -1.7937789769920673 -596 380 -.7549119015720327 -606 380 -2.275435286512353 -619 380 -1.1742704150773409 -622 380 1.2891576392803983 -623 380 .94666439310384 -628 380 1.7133248662730682 -631 380 -2.697486296228868 -657 380 -1.0166853149345125 -658 380 -.09044472336370674 -688 380 -.9377495003049218 -689 380 -2.228214122225144 -702 380 -.8824791948137111 -719 380 -.30717976934157887 -737 380 .15382727682030484 -744 380 2.5719757089388633 -783 380 .7457190534444135 -786 380 .43911910621191114 -799 380 -.38882740918903724 -809 380 -.36798584196685163 -815 380 1.7315637512209476 -825 380 1.7310590044358045 -845 380 -.1770942543302399 -852 380 -2.394344246910379 -873 380 -1.9354896511518993 -875 380 2.4171093681474125 -878 380 .44688270579351574 -885 380 .5077357605774131 -890 380 1.3037249637151085 -904 380 1.5614406784227095 -938 380 -.5795839777003076 -939 380 .26539211351804604 -951 380 .06190665886338538 -952 380 1.616946986201539 -976 380 -.12028229269019124 -980 380 -.06344261738101556 -989 380 -.805031475277693 -39 381 .026447016164421362 -50 381 -1.5268500016643063 -54 381 .4759432042743745 -62 381 .6953969887522837 -68 381 .49983328917831876 -87 381 -.6396866010251557 -94 381 -.8419221481588501 -102 381 -.19686993279599843 -107 381 -.9353368891544356 -116 381 -.3206170052588825 -129 381 -.9848875830608771 -137 381 1.5909736200280948 -147 381 -1.5652407097374574 -150 381 -.5734070504267264 -155 381 -.9454936764970983 -161 381 -1.132809653735248 -168 381 -.4321477767862414 -182 381 -.9629253438294498 -190 381 .5620314332828579 -205 381 -1.3346298770123084 -232 381 .06648106940774201 -235 381 .1288686553658283 -241 381 -.6358816360557958 -251 381 1.1636139664745162 -265 381 -.22064735085473586 -277 381 1.0669161276406878 -283 381 -1.2503836387783434 -295 381 -.8663704707782376 -298 381 -.5812789798544349 -319 381 1.0399444303635297 -321 381 .9359472358557752 -333 381 -1.0277541962252608 -366 381 .41699775568257846 -369 381 -1.5229033404337566 -372 381 -.4966726346154327 -383 381 -.33813909551435717 -394 381 1.2331749105331498 -397 381 -.14904476828378485 -398 381 .5582426908653169 -408 381 -.7548170258486739 -412 381 -.6940748633117932 -429 381 -.7643777657567017 -448 381 .101907753280809 -452 381 -.39766188959023396 -461 381 .9052631952807666 -462 381 .7310274161082931 -471 381 .24838124323621347 -490 381 .2570780438554763 -499 381 1.5108456807994672 -500 381 -.093682746232164 -502 381 -.39614281545747226 -506 381 -1.0844192655560176 -521 381 2.1542112767974086 -523 381 -1.548018585409662 -528 381 1.0297986479322092 -532 381 .9848111327891959 -545 381 -1.2164016431295694 -546 381 .8546336297850827 -568 381 2.03403792446832 -570 381 1.7007247269073527 -590 381 .35644446119018736 -598 381 1.5881290926501537 -620 381 -.3634287152196324 -628 381 1.7257424328552693 -632 381 -.9832678378097924 -641 381 1.0708560453701974 -654 381 -.16611187191189944 -662 381 1.220714535080134 -665 381 .6960367450729797 -672 381 .4310310701248259 -683 381 -.5024555378233899 -696 381 .8544940047105631 -718 381 .5389826548634526 -731 381 .16814076786687554 -732 381 .6789058293657241 -749 381 -.4694082535606952 -760 381 .04291334007479138 -772 381 .3034413604276174 -777 381 -.3875510292640505 -782 381 -.8783283939156303 -784 381 1.6043269529347841 -792 381 -.7234520407541964 -802 381 2.7215757674926166 -806 381 .20025463249748113 -808 381 -1.4394338501512571 -824 381 .2175764565673085 -835 381 1.0121286011365043 -836 381 1.2413265033997418 -844 381 -.5084714447887082 -850 381 1.2981912639049717 -854 381 -.5292454340469861 -855 381 1.636775712157776 -870 381 .8665393517160376 -876 381 .5491931089202687 -907 381 .8840475419965114 -910 381 .38115242421879353 -912 381 1.378420367348122 -916 381 -.7817660906857651 -934 381 -1.2474124713793233 -935 381 .7010525366595315 -942 381 -1.405629658380344 -955 381 1.2526688369454788 -957 381 -.7770212236537624 -959 381 .9196607060171349 -970 381 -.5241141472379935 -971 381 -2.5912623934108985 -985 381 1.3532753523741081 -14 382 1.2961194667362148 -56 382 -.012541815016527513 -71 382 .08453104048485208 -75 382 1.8488620008812842 -89 382 -.2882633916264047 -134 382 -.24030290930087914 -148 382 .21049501702941878 -154 382 -.8687375891521523 -157 382 2.345917220531982 -164 382 .15335743499567442 -185 382 .9748705098379261 -190 382 -.9681498045953303 -234 382 -1.2552330515048378 -247 382 .389939630345901 -248 382 1.6796882735055259 -258 382 -.23141604093361656 -269 382 .24615420886127398 -275 382 -.40823091352821406 -290 382 -.6103575516380207 -319 382 -.032416584831691186 -333 382 .3212077574506457 -365 382 2.4755691350233087 -379 382 1.3157626765244848 -381 382 .06617317379766768 -400 382 -.19798426883504452 -404 382 -.2469425635041369 -405 382 -1.5110862703028707 -407 382 -.8912176563967413 -424 382 -1.373374613784452 -467 382 .014149897577801024 -469 382 -.21128123974995855 -476 382 -1.050505623167825 -477 382 -1.2874134316397237 -479 382 .5004104120559086 -481 382 2.4472716557789216 -504 382 1.4421794130510723 -505 382 -.6093168814903496 -528 382 -.2795822353823869 -548 382 .551660171370461 -549 382 1.5067658623290092 -570 382 -.4354360012917593 -572 382 2.2676161364492233 -587 382 .4471882229401627 -621 382 -1.2440100422246443 -622 382 -.03153978480887581 -640 382 .6881244555323893 -663 382 -1.4346557250881726 -676 382 -.509333427369274 -678 382 .7840788023598761 -683 382 -.3214488851873777 -713 382 1.8645696301789774 -728 382 1.7523941271927799 -736 382 -.6094032234017648 -757 382 1.2021846969605008 -765 382 -2.1772586392972464 -773 382 -2.2536025195119036 -788 382 .8816171994381969 -799 382 1.28804542612847 -828 382 -2.4019266774748873 -837 382 1.59857075352798 -838 382 .9900414169398659 -841 382 1.4357487654355432 -850 382 .4987296496386814 -865 382 1.6048655690316536 -868 382 2.04807433708779 -883 382 -1.2813452499569637 -884 382 .10289306706063345 -908 382 -1.256384546158819 -910 382 -.34657074789771725 -914 382 1.0992836955910363 -925 382 1.6231804790365552 -951 382 -1.040262919237425 -956 382 .9353376992431331 -959 382 -.9647374975859498 -963 382 -1.4017791283931118 -967 382 .8263679884619541 -968 382 .5150555199891487 -971 382 2.2715462780748275 -976 382 -.0970139675741706 -996 382 -.8362114526153833 -1000 382 1.905063266179259 -11 383 .0016398970469022958 -15 383 -.8051800470349351 -47 383 -.7170322424039975 -67 383 1.3278386058706018 -73 383 -3.0142382066742828 -75 383 -2.9383117754622408 -81 383 -.20705616913764577 -99 383 1.813148335598235 -130 383 .5835536908054213 -131 383 -.7913791265647058 -134 383 -.09770929247258361 -152 383 3.0313242603082307 -159 383 -.0707148856397351 -161 383 -.9237126111981153 -171 383 4.605842422289686 -176 383 -.3540571160681377 -184 383 1.691177695377545 -194 383 1.6981510518233867 -209 383 -1.8535637481571094 -218 383 2.539682868153335 -220 383 .1911610534942423 -225 383 -.2665645459392727 -227 383 2.2761284884819633 -236 383 -.25738918990917026 -240 383 -2.9582860909976323 -244 383 -2.76169763175429 -246 383 -.24301986275648527 -249 383 -3.243112241434033 -258 383 -1.5730769170631167 -260 383 -.5243421181749114 -267 383 1.263088836760743 -272 383 -2.078420890107307 -278 383 -.7200894602242879 -279 383 .4783431359868274 -289 383 -.08152084413080096 -293 383 -2.189168447334532 -296 383 1.8785078012686491 -301 383 .3403510791802917 -308 383 .13519607191964564 -317 383 -.4214484703533641 -318 383 .08852994658585975 -337 383 -.9129591414084306 -338 383 .6719413036328524 -339 383 -.36029669288947086 -349 383 -2.7841129556351523 -353 383 -2.2631885681816506 -355 383 -2.263799458211907 -360 383 -2.209480402436855 -361 383 -1.4998566653234975 -375 383 -.8165013546781783 -395 383 -1.9072892721475265 -399 383 -2.8689731240057554 -413 383 1.732502238563026 -417 383 -.2878767326756151 -421 383 -.5343891348482174 -445 383 -.20272355776565512 -455 383 2.542337381773515 -460 383 .5133484804899964 -465 383 1.383911851805101 -467 383 2.7499851037279335 -475 383 -1.3205487569746985 -480 383 1.6450693709262736 -483 383 -1.066601234717815 -486 383 .3954729457943994 -492 383 -.025862386777209534 -494 383 2.2071133842002695 -497 383 .4615461843200333 -515 383 -1.5099119816254218 -520 383 -1.9892111080287633 -530 383 1.4857035398976919 -532 383 -2.25517642847784 -533 383 -.19298493279347584 -535 383 1.3567228524904864 -537 383 .06437917521089881 -538 383 -.33601067446658395 -543 383 -1.7295167565973788 -550 383 -.35297294376150185 -559 383 .7537385346066179 -574 383 .685439067549801 -581 383 -3.0181359476986405 -591 383 -1.6881301238974376 -618 383 1.6180469888809552 -632 383 1.4330869155740067 -672 383 1.4396019397526598 -676 383 .8913038251373449 -708 383 1.926948361335918 -725 383 -.3523313240903019 -736 383 -2.4615065774428992 -743 383 -.6432491570881187 -759 383 .6490105156306827 -807 383 -.7094600668039234 -827 383 1.7285755905708837 -844 383 -2.3852885630817884 -854 383 .8890506511217129 -858 383 1.1321064524526925 -885 383 -.8632279531597957 -887 383 -2.044305353073037 -936 383 -.5602270349576391 -937 383 .05149465973660857 -956 383 -1.070944658944545 -985 383 -1.018966902074034 -2 384 .6357444955366749 -8 384 1.1444542091344807 -29 384 -.15805676318908843 -33 384 .7954923262495099 -34 384 .6811897874304497 -38 384 -.9538604779930152 -40 384 -.47564107380057125 -47 384 1.044027026038789 -55 384 .023103375354150413 -59 384 .38386300985108324 -60 384 -.29231076349523255 -77 384 -.5296542158146279 -88 384 .4731771413552055 -98 384 .04225599764953329 -109 384 .3906110831381493 -118 384 .17527119981675526 -132 384 .5221496982010108 -134 384 -.39206601352067444 -148 384 -.047601910737074704 -164 384 .6992013620300819 -166 384 -1.100675443868505 -175 384 .5507210815217313 -182 384 -.6452755034988212 -195 384 -.167542552903813 -204 384 .12755800182938995 -206 384 -.2354646675430146 -209 384 -.7550347123730969 -212 384 .7706813552115328 -217 384 .9111286265492966 -224 384 -.10998563388468842 -232 384 .7195359182081459 -244 384 -1.5737202667984778 -248 384 -.32622262893458503 -255 384 .7083222857482272 -271 384 .7514712803494689 -272 384 .871246806413853 -276 384 -.02629142832838434 -297 384 .08536953837702782 -299 384 .6049660423647407 -303 384 .5431859364172819 -308 384 .8413094709102662 -314 384 -.6434544596529289 -341 384 -.21260169171017868 -354 384 .4085298778737873 -367 384 -.5119589493266961 -369 384 -.7301823501099272 -376 384 -.7998001095397348 -380 384 .0997211945527828 -391 384 -.2675472419935248 -406 384 .1841159788399706 -412 384 -.7504745133366767 -413 384 1.9067596049485145 -421 384 -.10318018370143958 -422 384 -1.1694813985581753 -435 384 .7916218725368963 -464 384 -.20821087349779793 -467 384 .2628392875715747 -472 384 .1103237961453821 -484 384 -.34554287262213096 -507 384 -.426933141391349 -520 384 1.3465602704041035 -521 384 1.0954909523996732 -532 384 .6358226263222646 -533 384 -.27562454524276364 -539 384 -.6619851955391759 -561 384 -1.2025383093236248 -571 384 -.6384813346587404 -583 384 -.6232096876862269 -584 384 .8691720172270474 -604 384 .06974360457419976 -608 384 -.6677918284379083 -621 384 -.8641167196708832 -634 384 -1.5417807569561983 -635 384 .07230058972906533 -646 384 .7765896581696252 -651 384 .4947110227894547 -671 384 .4200473858513284 -684 384 .34823907314666513 -690 384 -.9560281229088661 -699 384 .5091692678529337 -705 384 1.0368581729232065 -713 384 1.1843814531158505 -724 384 .1556769028490262 -732 384 -.2617419402464676 -734 384 -.30709560575485917 -739 384 -.2915101078199101 -752 384 .19261313917068762 -790 384 -.11857143629785877 -814 384 .24175362533139538 -823 384 -.008959071759263748 -841 384 -1.9096755888681947 -858 384 -.05164232941814573 -862 384 .5731281698113658 -873 384 -.12119786303139318 -888 384 .573152283273789 -891 384 -.20903185215204392 -898 384 -.25238084905802344 -913 384 .02180948610812293 -916 384 -.1745499550131464 -922 384 -1.6479470856280192 -939 384 -.44307201554024356 -945 384 .724663151701719 -953 384 -.21177478935327082 -957 384 -.8802867808772861 -965 384 -.6750668079097617 -977 384 -.6000149037733417 -979 384 .06875483469915977 -980 384 -.6359769655761507 -981 384 .746743475803647 -991 384 .9796513616913785 -997 384 -.0279326032916178 -6 385 -.35813788896592424 -18 385 -.2026416461567689 -29 385 .3828122933397264 -33 385 -.13377491813253845 -34 385 .054493362899867566 -42 385 -.030134356182265856 -52 385 -.5308706367915145 -59 385 .3295763361925502 -76 385 -.1939533222958953 -85 385 -.38000293923233647 -86 385 -.4216836641942362 -141 385 -.7869237560490768 -153 385 .11635291672187062 -159 385 .20406748380399184 -160 385 -.02570372770257895 -180 385 .09544976939555463 -184 385 -.4871926401986156 -205 385 -.46337636885702393 -206 385 .08586828992193435 -213 385 -.12086849200481085 -215 385 -.10318672995443903 -216 385 .35850419456540455 -218 385 .3320353801405521 -229 385 .42204911844999576 -231 385 -.1010095671324102 -236 385 -.30592865782564316 -240 385 1.1334542773780552 -243 385 .42025945053664027 -246 385 -.55305952291374 -251 385 .060476927730039425 -258 385 -1.1177106111710629 -268 385 -.048032056780623625 -270 385 -.8197727142691201 -284 385 .7247284255504857 -311 385 -.3312512108861166 -333 385 .15187619316125134 -351 385 .8453075758425234 -352 385 .7648581759120019 -376 385 .021308201647909003 -396 385 -.2965653701645091 -416 385 .704388963934401 -433 385 -.7495323664056791 -440 385 -.08951983222164656 -446 385 .553760586615844 -489 385 .5312831190935156 -491 385 .6246605839372668 -492 385 .6468873237937073 -494 385 -.28348790694802534 -512 385 .5542456989716192 -514 385 .3325132351588249 -520 385 -1.0212545634815229 -535 385 -.3684889449113129 -551 385 .713369266603515 -557 385 -.9968134232011188 -559 385 .47352544331243673 -561 385 .37382414614013804 -562 385 -.11149652204622297 -597 385 .15843935477309695 -614 385 -.4127457405095125 -637 385 .7845501347682481 -658 385 -.2469171478787667 -668 385 .5107544913576332 -669 385 .28758843802183454 -671 385 -.16267329277651515 -677 385 -.1295694055694802 -689 385 -.9591175020558813 -691 385 -.2780615521670993 -697 385 .8668014093297478 -721 385 -.9582711797478775 -724 385 -.15963830728757988 -735 385 .28102881713792666 -742 385 1.0120639697153597 -743 385 .05463736617298174 -761 385 .07937096575235145 -768 385 -.41541979893394776 -789 385 -.12219575020571513 -791 385 -1.089805996637721 -802 385 .3933014835500767 -817 385 -1.28097224235045 -820 385 .5501225178614219 -827 385 .4706206659040574 -830 385 -.527742936256365 -852 385 -.9341854022316154 -853 385 -.7946515460945927 -863 385 -.03992662174682957 -877 385 -.5514261247248772 -886 385 .38461084804553475 -893 385 .2834741689233648 -898 385 .1771486373510355 -910 385 -1.0864679163495796 -914 385 .8987677016141579 -922 385 .5646300621703308 -924 385 .25645662724524676 -926 385 .30500001165067664 -942 385 -.3113164529438875 -949 385 .8106443040460638 -956 385 -.31769609345488603 -962 385 .22578407059436062 -967 385 1.7096682962135161 -986 385 -.9591280683757131 -3 386 .13027668479761748 -20 386 1.441216847320422 -53 386 -.014925137907395261 -67 386 -1.6203118102648542 -76 386 -.1462126577995868 -80 386 -.17519919113502763 -83 386 1.2420855616472553 -86 386 .8507837640919754 -88 386 -.28911410393830206 -91 386 .4993616060437884 -115 386 -2.2020805987814387 -127 386 -1.3865085890508635 -130 386 -.7514578133590748 -144 386 .4612994730236596 -150 386 -.8120465198032849 -154 386 .5860151402914251 -167 386 -.9249869853546571 -169 386 .18369238274997796 -172 386 1.4472152609987976 -181 386 .42036289267988525 -183 386 -.9303142642106161 -185 386 .5425897179659116 -189 386 .5132719390455586 -201 386 -.0564050191602512 -211 386 -.7552817057683189 -217 386 -.7785404928980559 -235 386 -.04277979643751182 -247 386 -1.0938605096897802 -256 386 -1.1113993918432274 -274 386 -.9150822928501691 -283 386 -.9998707866582918 -298 386 1.309150436303913 -310 386 -.2187888719330237 -328 386 .29062254590915737 -331 386 -.02326851618466002 -348 386 -.38462441350575194 -349 386 -.010915292144015494 -352 386 .7115304573086247 -359 386 2.1511275705030997 -368 386 -1.7057807142553798 -381 386 1.681785179121947 -427 386 1.4568838303437501 -429 386 1.315847182555224 -455 386 -1.8181484207774143 -475 386 .8354677426625794 -477 386 1.3889257920494786 -479 386 -.5009504695352949 -491 386 .35592249186098507 -515 386 .23080165877378409 -529 386 .8309423103775059 -531 386 -.913435559293474 -540 386 -.13782836467338913 -558 386 -.14114022501527845 -567 386 .07893946192832765 -576 386 .1639201160374198 -581 386 2.113008686306582 -585 386 2.058360428978421 -599 386 -1.0648136976204392 -601 386 .16425852467159943 -621 386 -.1545906787240947 -641 386 -1.1138196956660644 -678 386 -.3770621771619874 -688 386 -2.4024992032812644 -695 386 -.8512379899976278 -696 386 -1.4146696944157053 -703 386 -1.3952886547998267 -709 386 1.1607615866499732 -711 386 1.8197958340298293 -735 386 -1.0828397015148068 -760 386 -.8692503756344404 -777 386 1.5945402856788722 -795 386 -.8579787649862897 -796 386 -.1330942608498572 -797 386 -1.2124676615066186 -824 386 -.22400449495766353 -828 386 .20841747552666814 -829 386 .3060208697527632 -833 386 -.1536194699106975 -835 386 .8546837577914813 -839 386 .4101979521208351 -843 386 .0829987893365286 -845 386 -.9420604615386314 -852 386 2.220295880343142 -856 386 -.7191554561416752 -911 386 1.2470329191314102 -912 386 -4.11208085161731 -919 386 -.47241457203090925 -931 386 -2.0368292461530006 -937 386 1.6115654546233285 -952 386 1.7149847666094513 -960 386 .11977855212602037 -970 386 1.6601165881098492 -974 386 1.3026455263532057 -986 386 -.6329209972218638 -998 386 -.8081471850273474 -4 387 .17367006663167323 -11 387 .15798206537411627 -16 387 .4233468574092297 -38 387 .8696094715109156 -41 387 -.28033048993947846 -44 387 1.0497817115864225 -56 387 .7307543416065725 -58 387 .6395914768564405 -60 387 -.01739948556701576 -73 387 .30447295333674035 -76 387 -.3389869804873322 -83 387 -.6942209468744297 -97 387 -.9488268993730387 -105 387 -.20839097090726788 -110 387 .3232050243245431 -128 387 .47255159016909715 -137 387 .7074507702469399 -138 387 -.1573532961560769 -148 387 1.2089705894996572 -161 387 1.0729338241659256 -177 387 -1.9182001862049567 -185 387 -.351993453879732 -189 387 -.9918064756467595 -206 387 -.17670002762022546 -236 387 .45644676439697196 -264 387 -.5684977933703764 -266 387 -.4089227876009326 -267 387 1.3310409663908613 -277 387 -.37798030366678315 -284 387 -.014106243306551823 -298 387 -1.1671715015798778 -320 387 .5518235465922048 -324 387 .39724781732653397 -329 387 -1.7098559524433672 -336 387 -.9241253170901096 -368 387 1.3070436846300586 -377 387 -.4147550738162361 -381 387 -.9301403814087299 -382 387 .7974054638664685 -400 387 .49952377957769684 -402 387 -.3641685272149614 -418 387 -.2717212519578376 -434 387 -.5377063504517895 -438 387 .1337871945225238 -442 387 .8212146954431125 -444 387 -.9766334733607116 -453 387 -2.0419289375572163 -475 387 -.738203572828009 -476 387 .9009031974013492 -482 387 .41237179532212903 -509 387 .3027729378994187 -518 387 -.9013169639338896 -521 387 -.0017686768485571033 -529 387 -.6768536021360303 -541 387 -.08234167286222965 -547 387 .571013209321875 -548 387 .9734058431156634 -575 387 -1.7042182149635206 -577 387 .2296276446017987 -600 387 .23191367998059592 -604 387 .0019662053058580597 -635 387 -1.7888447590433687 -658 387 .7795867383454357 -661 387 -1.8502519385954854 -669 387 -.4479555696060799 -674 387 .43967144286855936 -675 387 -1.9512972384276128 -682 387 -1.215109571990339 -702 387 .6891355114100501 -703 387 1.4275345405894189 -704 387 1.0562697014329416 -717 387 .29651626740670833 -719 387 -.3520964736871223 -726 387 .6850984968959275 -727 387 1.3381315508434026 -735 387 -.06766494393592223 -738 387 .004983902414180057 -754 387 -.7920106404915572 -768 387 -.14111032608853305 -779 387 .3132693626288305 -785 387 -1.145232831559039 -788 387 -.6833204745339638 -795 387 .4246192271094393 -814 387 .4953199016045463 -827 387 -.43285532863336285 -842 387 1.3298530422922747 -850 387 .20353882907651016 -873 387 -.2895657709804305 -884 387 1.122221236152869 -900 387 -.3734941184107621 -913 387 -.1710562719781629 -918 387 -.638336140305142 -919 387 1.732456369206737 -922 387 .39075050655093724 -931 387 1.7729449086797286 -945 387 .09640812779249361 -962 387 -1.3815289968355677 -982 387 -.06778100322192768 -984 387 1.1818214594948717 -988 387 -.6921043017831301 -994 387 .9607991050578655 -997 387 .4462820382081247 -25 388 -.7494914504772191 -29 388 -1.362131172031816 -44 388 1.1410624994454506 -47 388 -.5766637423834299 -65 388 -.7654609048983254 -80 388 -1.0122930483213184 -90 388 -.8352658191194183 -96 388 -2.2438245749031482 -104 388 -.1024514534056241 -116 388 1.6535190084920883 -119 388 -.47337465764036124 -133 388 -1.303558465688747 -138 388 2.188500115169987 -140 388 .44997581658980296 -154 388 -.5287739880530301 -165 388 -.15065813037278505 -182 388 -.5593812971995034 -193 388 -.0029644085747395 -196 388 .3470998175634832 -200 388 2.303050719311309 -218 388 -2.3726117773012394 -221 388 -.31726830281723184 -222 388 1.0228269356802047 -258 388 .8131195682634026 -287 388 -.2747311565213603 -298 388 1.0914926436226828 -304 388 -.1527360482067508 -306 388 2.15200717030824 -326 388 -.5510902273911632 -339 388 .47192064561734703 -386 388 -.33906123411289446 -393 388 -2.2328725992645206 -397 388 .844081791969099 -430 388 2.8688954913325824 -462 388 -2.9904204697883805 -466 388 1.2962000952246056 -479 388 -.02834679083704841 -484 388 2.0413413885459093 -487 388 -2.8574093578638458 -491 388 .09202726538528562 -511 388 -2.6970242673243563 -522 388 -.695846336547198 -528 388 2.1748450184265997 -531 388 -.348499264694746 -532 388 2.2892512816361 -535 388 -1.4073305188641279 -538 388 -2.2396271581475045 -539 388 -1.4756957112085747 -546 388 .32047614165965777 -565 388 -.058734146941911924 -566 388 .855901075257688 -570 388 1.4096191994225544 -576 388 1.535999020076933 -580 388 -.42790987043829326 -589 388 -.05183071880375957 -602 388 -1.1321582995929078 -605 388 -2.199954232542743 -606 388 .7619872070448173 -615 388 .05858518427225824 -617 388 .09949530076964169 -625 388 1.721442771721874 -632 388 -.4078555163183325 -645 388 -.768609094625368 -650 388 1.8980151713089564 -651 388 3.0024128836991135 -663 388 .16692071291718236 -689 388 .06842280886071259 -694 388 .6185318942380794 -703 388 -.5604538892567059 -710 388 .9549097885214939 -755 388 1.079739625865742 -759 388 1.3189463749083363 -760 388 1.3735498131096509 -782 388 .2291711258242049 -783 388 -.7592560457492177 -792 388 1.4012564131604985 -807 388 1.8388925147702233 -823 388 .4248513071267278 -825 388 1.652019320104454 -843 388 -1.930034738002964 -864 388 .015848899254886546 -880 388 .4100954209592569 -888 388 .7478087830633099 -913 388 -.36135390912453513 -937 388 .12144921603860809 -946 388 -.2591997732485807 -949 388 -.794202724946333 -954 388 -.8829412431441519 -974 388 -.8644012336937645 -987 388 -.42960026084210157 -992 388 1.260196762710049 -6 389 -.9141892816746839 -9 389 1.5141303596386222 -10 389 1.0085893856930106 -15 389 -.5561740728399351 -17 389 1.5555884416958752 -18 389 -.3340846832197538 -43 389 -.6788311920259934 -52 389 -1.4137619705309759 -60 389 .19709085004383647 -76 389 .6005318379744933 -81 389 .7409444608110554 -83 389 -.12069277658656348 -92 389 -1.877580210781224 -108 389 -1.2302515451352944 -109 389 .6638995152079359 -129 389 -.7486242704274185 -135 389 -.1413307603295157 -137 389 .41351069564459453 -139 389 -.03390975770271282 -143 389 -.3467917506313162 -145 389 -.21004500038484247 -146 389 .4064666673627472 -152 389 1.7300228378236722 -165 389 -.15627468607220393 -195 389 .09883168402974847 -198 389 -.2755233260936853 -209 389 -1.0008698008685777 -215 389 -.20854923487168645 -219 389 -.8391161938650047 -221 389 -1.4164212413719355 -222 389 1.606851127362174 -223 389 -.1112378732390666 -224 389 .17105681778862483 -228 389 1.0188265879849863 -234 389 1.1053635080470874 -261 389 1.183601692842846 -263 389 -.19721059552740897 -264 389 -.39303832990931076 -269 389 .32557783710269933 -275 389 -.14728079749411463 -282 389 .6193475430632251 -289 389 -.18170103133219379 -293 389 -.005423959137459938 -303 389 .05495077298838195 -316 389 -1.695024746114015 -325 389 1.6076611518085182 -330 389 -1.6322516466951522 -331 389 .1787123855968324 -333 389 .5466629163588581 -337 389 -.5235744819027311 -350 389 -1.2246059494525492 -353 389 .4998620172259589 -367 389 -.04861525480832837 -372 389 .67657746477428 -376 389 .998848370367501 -378 389 -.2342742156784453 -386 389 .9449459835599284 -406 389 -.4192346219392656 -416 389 -.03942510954237399 -417 389 -.2924962612211941 -419 389 -1.300898826743222 -422 389 1.7416976263020492 -437 389 .8685236908710412 -445 389 .8612201815686489 -447 389 -.028847003277248345 -463 389 .8609194546011081 -464 389 .9574038837191698 -501 389 .9163752241358869 -517 389 -1.2245944555282855 -522 389 -.83515427558333 -536 389 .5393793435985444 -537 389 -.898867009483459 -557 389 .431011766705724 -566 389 -.22520709817530155 -578 389 .20696188382675124 -596 389 -.9143914481579437 -597 389 -.05702605535491879 -599 389 1.0042641280415898 -629 389 .8526434225398234 -632 389 -.06646672327532677 -635 389 -.6805356804503908 -640 389 -1.069794619631856 -675 389 -1.163591421072311 -677 389 -.08621677062687019 -685 389 -.9127238073439966 -688 389 -1.2005519784165053 -704 389 -.3292442741313414 -726 389 -.23755022952492266 -736 389 -.5492282488186705 -737 389 -.012227068593051633 -746 389 -.6700637986992118 -756 389 .03375543437246152 -778 389 1.5917826522997427 -791 389 -.1716093347995624 -796 389 1.1462259893129085 -811 389 .1713455274176272 -817 389 -1.7494435787131903 -827 389 .9093846064643957 -832 389 .35208104207236246 -834 389 -.353811257631669 -854 389 1.1813736390318121 -880 389 1.109316010809711 -894 389 -2.1078551952270947 -901 389 -.8686915910654466 -903 389 2.1687784398366774 -907 389 2.1049805550379386 -925 389 1.507684865621678 -931 389 -1.1615251677279497 -941 389 -1.200374488164494 -972 389 -.27427571241664234 -978 389 1.2837248753029638 -980 389 -.66101157427764 -982 389 -.20587471420217884 -988 389 -1.8200741251340071 -996 389 -.07195232587566183 -16 390 .9058206085630911 -23 390 -.20617633238885724 -99 390 .5075879133259649 -120 390 -.8085667000753812 -133 390 1.9137882929396448 -140 390 1.9274933565833856 -142 390 .28409009587966366 -152 390 -.2347309499811356 -157 390 -.2539655419732657 -166 390 -1.2346912842832924 -169 390 -.4980447872601562 -177 390 2.4143161259185133 -181 390 .4363782244058385 -209 390 -.40587117426497304 -216 390 1.0645549673955907 -228 390 .3441265275943921 -229 390 -1.010310811710342 -257 390 .7973481124364662 -273 390 .15529180727939457 -293 390 1.1012902136973624 -298 390 -.6997866701337145 -333 390 .8913213288365092 -337 390 -.30350687288702005 -340 390 -1.4773299558691368 -341 390 .3965095141389709 -342 390 .7040560571210137 -352 390 1.7657205490769976 -369 390 1.2429307032374073 -393 390 1.28858512651142 -395 390 .29550663901990637 -396 390 1.4133651542477192 -408 390 .546739483890739 -409 390 2.2077444749420407 -418 390 -1.2039811016709132 -430 390 1.3804059511281352 -436 390 -.8955762507790687 -450 390 1.0452561688220021 -455 390 -1.892913166395885 -461 390 -.5907447529782128 -502 390 -1.2556138429827968 -505 390 -.44973925689766137 -513 390 1.248879696114888 -517 390 -2.034779627100512 -519 390 -1.1962890799545316 -533 390 -.7093553297781132 -546 390 .1825141548448958 -553 390 -1.7128155220088666 -560 390 -1.668300573358121 -570 390 .49914523216210605 -573 390 .9542783513208051 -577 390 .905513924308693 -578 390 .611307891454817 -584 390 .4262992904256242 -591 390 -.5036889550697188 -593 390 -.8815390072691662 -595 390 1.3913998458770616 -601 390 -.48794463199045496 -604 390 -.8714175704690639 -608 390 -.20253842070314027 -635 390 -.6951075990112351 -650 390 1.13579719643209 -655 390 .7621851870482037 -674 390 1.7666598677533956 -681 390 1.1397976099130964 -686 390 .9037747760225548 -687 390 -.041297417201707376 -689 390 -.3837122202437995 -698 390 .583188133756363 -712 390 -.47391974310757484 -727 390 .37181856112507017 -730 390 1.9963331399852782 -739 390 -.5394991718805597 -750 390 .8203875687089554 -760 390 -1.2448639414630822 -761 390 -.10703920525178622 -762 390 .4349335736286804 -798 390 .05644860347571501 -832 390 .9141686291238349 -845 390 -1.3594467412175777 -847 390 .8160022000111191 -856 390 .37618671754841543 -858 390 -.9249551443801285 -872 390 -.19600112183048504 -889 390 -.7479175159510673 -897 390 -1.4495645135934168 -902 390 1.187272187718301 -912 390 -4.590979919607499 -916 390 1.2868568799371691 -927 390 -.14984161809783297 -931 390 -2.2135480095233526 -934 390 .47325013186528164 -936 390 -1.7145412342620738 -947 390 1.853138935680188 -948 390 .8930684561781024 -964 390 -1.8683717334357548 -966 390 -.3511120216428582 -968 390 -.8939975335527591 -975 390 .19524909967492526 -987 390 -1.7612213339880245 -12 391 -.22626998779679863 -38 391 1.0528536230943342 -42 391 .5308043411259254 -49 391 1.2005580617870695 -53 391 .09588024184329959 -54 391 .37420828938428163 -56 391 .9670296113321472 -57 391 .87927936102684 -58 391 -1.3674573435848887 -77 391 -.938669115604917 -97 391 1.9123940843751002 -101 391 .37657404207763734 -112 391 .14958320584242113 -136 391 1.3231806298636908 -139 391 -1.0356322171963233 -163 391 -.44936111408063156 -199 391 -.9154114968994879 -217 391 -.31270262925085557 -246 391 -.14519243903044815 -247 391 .5034989694209002 -250 391 .7718494202703323 -251 391 -.8934316661587806 -287 391 1.0597290304211828 -321 391 -.5773902079132214 -331 391 -.49273547137525064 -345 391 .8291085166012163 -354 391 -.014264893979024362 -355 391 .5974139137884836 -371 391 .35266872908634966 -379 391 -.024095962232706727 -384 391 -.5798744644683741 -411 391 -.21263793756570015 -432 391 -.49407249819515175 -433 391 1.0905655457848165 -434 391 .16600220284942216 -455 391 .5106213653981285 -467 391 -.3658317432419069 -471 391 -1.4569412703911009 -481 391 1.0811918988444107 -509 391 .06581231823535565 -523 391 .504896045117861 -530 391 -1.1501715923212392 -548 391 .5248502461923632 -550 391 1.1070381126243045 -555 391 1.1329693897935482 -561 391 .1710866644470423 -563 391 -.21968373149268317 -585 391 1.3690510588274694 -597 391 -.4235256261121772 -600 391 -1.3095649804063538 -604 391 -.942606223125683 -606 391 .33570868843750157 -610 391 -.8753076962533002 -625 391 .34042539127330823 -629 391 -.31687992631741 -631 391 -.22110760431864307 -639 391 .16409444216791425 -665 391 -.2199676269333209 -682 391 .21549941142578177 -692 391 -.6971274181043849 -713 391 -.17665405951213595 -731 391 .8774823490219161 -732 391 -.3881120496589042 -735 391 -1.1151404930618147 -744 391 -.31667922352252326 -797 391 -.07509721827718235 -800 391 .4945708600035828 -823 391 .7556426295161158 -828 391 1.2349249742876944 -868 391 1.6318786676575843 -888 391 -.1898562827461857 -908 391 .8465442285758796 -909 391 -.33927871506793045 -911 391 .5307232484780621 -918 391 -.21536666270389146 -933 391 .9852993642584238 -951 391 .357869220887973 -997 391 .13002818946445355 -3 392 -1.24918941564308 -15 392 1.5511780473186387 -31 392 1.334359629125944 -33 392 .5385758414802317 -35 392 .47557754619723486 -53 392 .3131452006600744 -65 392 -2.542896315313825 -75 392 -2.563760114919346 -77 392 -1.1952424687933667 -96 392 1.8928441611651166 -97 392 1.7418591008412552 -120 392 -2.5040829141545116 -137 392 -2.7367866292043037 -138 392 -1.5916072227839584 -144 392 .5233799038716751 -162 392 2.672076914730942 -180 392 -.5849787137942737 -182 392 -.5654535793759359 -183 392 -2.666619940286745 -201 392 .171311010564828 -211 392 -.5125077780119393 -221 392 1.0595580812428553 -225 392 -.8479363172269897 -236 392 .18345384589152022 -247 392 -.4590797070312971 -257 392 -.7597381504060066 -258 392 -.9073618368573968 -260 392 -.07567927074272753 -281 392 -.44455947187451555 -305 392 .17030544215323756 -326 392 .08243136719293645 -330 392 -2.1057848366478984 -353 392 .5659399946945021 -355 392 -1.1359376938402534 -365 392 1.3283921225217297 -372 392 2.674899752049602 -391 392 1.5055753367583862 -400 392 -1.1432449303113172 -417 392 -1.5283686838373498 -420 392 .032604697066390895 -439 392 -1.5305121378391051 -443 392 -.1469097418258926 -447 392 1.558394003879124 -452 392 -.7239751814259591 -454 392 .5852450234232781 -458 392 .43276737062246545 -460 392 1.609166745713888 -480 392 .4025196474060459 -497 392 -1.1020174568460614 -507 392 .0822170092221079 -515 392 1.047299502262137 -518 392 -.3805206103529321 -532 392 -1.12442329732395 -533 392 -.19724178536714898 -560 392 .4420089212635798 -563 392 -.333615768986807 -565 392 -.13301237170511682 -572 392 -.4130443492730909 -605 392 2.5275849958618877 -611 392 1.2027897579297506 -618 392 .043218539899809075 -629 392 .5663544325226928 -641 392 .4299628399432532 -642 392 -.4817941719923422 -645 392 -.4951567795645344 -649 392 -1.7070243942650207 -664 392 .7814645529410589 -679 392 2.7590700016588587 -688 392 -.9898977653981473 -724 392 .599099436318943 -748 392 -.36532696051112434 -749 392 1.4759893534779094 -750 392 -.008336238633927961 -754 392 -1.7770844902959424 -761 392 .1506863684109304 -762 392 1.548541311050428 -772 392 1.928215625987456 -783 392 .8247529891010685 -847 392 3.6416998092309703 -852 392 1.3619424272611953 -867 392 1.4420849410549497 -868 392 .6130298414817733 -869 392 3.3815125593425006 -872 392 1.083568169663732 -876 392 .031564893353282775 -906 392 2.1784574755824857 -931 392 -.3491389021037905 -952 392 .7554365755290604 -962 392 -1.05134172910693 -967 392 -1.1340433001425971 -970 392 2.5191654183215006 -976 392 2.50032057721461 -978 392 -.5821772431381338 -980 392 .8347262503702048 -984 392 -.055552592495859754 -8 393 2.026434011054169 -34 393 .049127325475013035 -40 393 -2.6634478680389893 -42 393 -.12570383220279768 -53 393 -1.7415584392571342 -56 393 .14655050378293877 -65 393 -.5888077920098412 -80 393 -3.657843839776821 -98 393 -.8853881719188758 -116 393 2.0692864192617 -119 393 -2.0759148300958463 -122 393 1.3437774394649322 -123 393 -.012441213245711596 -127 393 -1.5484805309019227 -132 393 .952410324166536 -135 393 .05024079298062836 -149 393 1.0964425826557682 -156 393 -.305155563639803 -166 393 .37158638832441415 -173 393 -.026059768621542412 -205 393 .29154729879018715 -207 393 1.5077083297452016 -215 393 .5231929230016884 -216 393 .8085856849749513 -218 393 1.0086986045942419 -230 393 -1.0653975290384754 -235 393 -.5136778185710771 -252 393 -1.3398354761071634 -258 393 -.658384123370508 -259 393 -.011922694830450137 -260 393 -1.358521295243788 -268 393 1.5404269509261277 -270 393 -.5127649204567147 -279 393 .4325496480438249 -280 393 -1.7317886969159733 -292 393 3.786026355333775 -293 393 .7672426237752058 -297 393 1.6279503764979377 -320 393 .7903241243081344 -330 393 .7765386598042797 -331 393 .42938374608987206 -341 393 .32416832311603516 -342 393 -.08746893652466059 -349 393 .15018576469277983 -356 393 -1.8344081746104253 -359 393 .2447848673030835 -366 393 2.5311008542650613 -371 393 .9885046949599875 -378 393 -1.7737801370535653 -381 393 .3808230306712047 -388 393 -1.333589400055356 -397 393 -.14783038799805825 -418 393 -1.4012690165651502 -452 393 -.25495085141967727 -479 393 -.6272435440048716 -489 393 1.7879998183027785 -497 393 -1.6537734942333469 -503 393 2.4144383285012863 -511 393 -.43211655395622905 -516 393 -.7099295049277334 -522 393 .46711398543009164 -533 393 -.24387104640517177 -537 393 -.26561387350819765 -543 393 .4179128072445637 -546 393 -.09250374413815034 -550 393 1.5462589929318513 -578 393 .9678969543076166 -611 393 1.268096266221643 -645 393 1.5444636293318867 -658 393 .8060611310274813 -663 393 -1.1299024190532876 -670 393 1.0323618340000094 -676 393 2.008773668132363 -679 393 1.066033691656148 -685 393 -.5196895565729115 -691 393 -1.7377132436082525 -695 393 .7274039462658528 -696 393 .04099083577090386 -703 393 .1973539794035567 -704 393 -.15320641159721077 -712 393 3.5549120641667127 -724 393 -.17289111819243802 -730 393 -.5337405268032336 -741 393 -1.8373392608722579 -783 393 1.7153145374460625 -800 393 -1.0634913260255932 -803 393 .00038971031511053633 -806 393 1.4464206938009994 -822 393 1.7382851829206891 -833 393 -.9980022849910055 -835 393 -.5866794243948544 -847 393 .6131919053788863 -848 393 -.20986729731021225 -850 393 -.016414834440418746 -853 393 -.8083198003619573 -858 393 1.285791275828419 -872 393 .192670808979697 -881 393 -1.4660231500883563 -895 393 -2.802259592453891 -901 393 .12087502174391507 -920 393 1.9941561126390626 -941 393 -.9631247311295085 -943 393 .08982241946739913 -951 393 -1.4194615171818024 -958 393 1.4890347058979763 -968 393 -.3772062848338931 -985 393 1.8805241970752828 -987 393 .4468807296058154 -2 394 -.987884386983258 -21 394 -.34514911664409886 -33 394 .8022848621424044 -36 394 .15449033666339795 -51 394 -.03340536979514361 -59 394 .4200954974768811 -60 394 -.05411303088855396 -63 394 .5975311297343584 -68 394 .24650520123106362 -84 394 -.7980367131668216 -89 394 .6993710545028163 -95 394 -.49810076684547255 -118 394 -1.0939489052492626 -120 394 -.8999902280760128 -126 394 -1.4538933825493865 -131 394 .28751435482508236 -142 394 .39767694094898165 -143 394 -.3390748827274468 -147 394 -.31981973462788105 -153 394 -1.3834317770228557 -154 394 .2769467492699202 -167 394 -.3191574510099442 -171 394 .31312425511554687 -198 394 .2730307538904041 -201 394 -.6853273382362594 -207 394 -.1651066486533506 -233 394 .7605082351359774 -240 394 1.9519341944653865 -246 394 .021071361043061884 -250 394 -1.221280032353998 -258 394 -.184746955117419 -281 394 .07614024421386835 -309 394 .4090515158556296 -331 394 -.06395114333957032 -332 394 .5014466577699441 -357 394 -.9058492538248861 -370 394 -.3727472164427008 -383 394 .028329122376931318 -390 394 -.054785966398209845 -392 394 1.010566609741831 -395 394 1.28506287931828 -398 394 .2554674386089276 -399 394 .46807292089236174 -409 394 1.0317920248208512 -411 394 -.2681075010113405 -414 394 -.46829283129508537 -421 394 1.2488563195970315 -422 394 -.9533090105036244 -445 394 -.17221728386285895 -448 394 .05637998549709519 -482 394 .2722149814374079 -485 394 -.09127770003092744 -495 394 .6206796648764015 -524 394 -1.24188052904056 -546 394 .7686443132152856 -549 394 -1.0417457466753879 -555 394 -1.1165154784861975 -565 394 -1.218639798317013 -575 394 -.6078943551169154 -581 394 -.9846336398545535 -593 394 -1.1098429104914005 -629 394 -.7373852199907822 -632 394 .21954539598320674 -648 394 -1.522509169136404 -657 394 .8770499778638057 -659 394 -1.4135577037750537 -672 394 .5654431295894665 -673 394 2.275173074414481 -681 394 -1.852093149145454 -699 394 1.0812181161350816 -710 394 -.1582909567738796 -714 394 -.44645522108140634 -742 394 1.5041964990155359 -751 394 1.0840915660691337 -754 394 -1.0449765921455827 -763 394 .4996282573430978 -769 394 .4440031715914448 -770 394 -1.3599126681856812 -785 394 -.2686705020502598 -789 394 .2337014166362592 -804 394 .8763748249005542 -808 394 1.6171302516095905 -825 394 .48599680423681463 -826 394 -.820681361314428 -841 394 -1.1837069493944452 -845 394 -.17369634350695584 -846 394 .45440681576327124 -848 394 -.6265002791685564 -849 394 -.7796178550557938 -855 394 1.4990458089834995 -879 394 1.6610188252906386 -880 394 .5380621825631512 -883 394 -.15413915806592243 -903 394 .40664909896193546 -934 394 -.29019736502102156 -949 394 -.5730320593505938 -968 394 .619965456259232 -974 394 -.8793899509011934 -975 394 -.6305559041671934 -981 394 1.1902606552732686 -983 394 .5114523009105766 -991 394 .7540990325273147 -1 395 -.3441805582734879 -4 395 .014195423919503212 -11 395 -.7419591332026038 -18 395 1.0922335343833036 -27 395 -.6782580062212328 -28 395 .8450078191797763 -46 395 1.2890336177748414 -72 395 -1.0605065794417436 -77 395 -.2267645814794303 -89 395 -.3561502383507836 -100 395 -.38955727589078265 -108 395 -.5183811999440091 -114 395 -.5690509649339801 -118 395 .46697063015580986 -122 395 .6591981145129646 -124 395 -.5873906979510659 -134 395 -.9572562599252675 -135 395 -1.3271428008678336 -138 395 -1.145664149660464 -141 395 -.7974632580218943 -174 395 -.5609422697915625 -194 395 .31868915477764537 -198 395 -.5321627344954514 -199 395 .0954180725885122 -206 395 .5448882496841241 -231 395 -1.3677611933663034 -253 395 -.3150687547399935 -270 395 -.6063739640751444 -280 395 .07861103348770332 -285 395 .336025295546758 -295 395 .7175054464516101 -308 395 -1.1128555619814717 -325 395 -.03855791134968417 -332 395 .9100362052213775 -343 395 .08649382783016668 -364 395 .6443231448953954 -369 395 -.07776820350014423 -373 395 1.148842450433671 -387 395 .2954598418890571 -388 395 -.6029642598114878 -401 395 -.8975176367488554 -408 395 1.0821047617953115 -423 395 -.3075724283694393 -427 395 .5564470278382394 -431 395 -.6587467528225229 -433 395 .12895571515137624 -434 395 .11090952274824364 -440 395 .07705618329710784 -451 395 1.5617502716651814 -455 395 -.9380999430544942 -475 395 1.0560280906159814 -495 395 .6762165916416801 -499 395 -.3941692200792268 -546 395 -.2057983672488521 -553 395 .6015050759328713 -556 395 -.03532494192149329 -575 395 .5506635544537385 -581 395 -.6874372383653413 -610 395 1.2136917624390895 -611 395 -.5633411669027143 -615 395 .48170891026274704 -620 395 -1.2628997924115088 -622 395 .8852250316763488 -635 395 -.8946663555925836 -650 395 .2224649655150123 -656 395 .3957814708617003 -681 395 -.07184150301449285 -695 395 .5540215516417614 -735 395 .873383713179858 -742 395 .8057806243453811 -761 395 -.10422954662087132 -764 395 .02407191366656783 -769 395 1.018565725452802 -782 395 -1.21924281913102 -790 395 .42382320252545025 -796 395 -.6375586163986002 -813 395 -2.4987522032731935 -821 395 -.21387430532756263 -832 395 -.5795681996546717 -856 395 1.6523452568788886 -863 395 -.8461088944865188 -879 395 -.19086002064560775 -887 395 .6632628728789601 -894 395 -1.6377576097127136 -901 395 -.2629578602916605 -906 395 .07661458898293282 -942 395 -.6263690581599142 -949 395 .6527970950062574 -963 395 .3015286092001028 -966 395 -.9431066007202518 -975 395 .007637348697563558 -978 395 1.1041299303610617 -986 395 -2.300085999586261 -995 395 2.1562047321226747 -996 395 -1.274086670478211 -1000 395 .8116934028752453 -36 396 .2674041570696407 -43 396 1.3862157390838046 -49 396 .4589105314673871 -52 396 .31891461882779654 -67 396 -.4803817846517771 -68 396 -.3643393866488644 -85 396 -.6318062232386179 -90 396 -.09452041872289678 -106 396 .5710816570343797 -109 396 -1.2009995429765439 -111 396 -.31412093960916493 -115 396 -1.2754535079666223 -116 396 1.3464143853687327 -151 396 1.1426131746433752 -153 396 -.04456652723456467 -169 396 -.2528255892505593 -179 396 -.6994029119986711 -193 396 -1.488573086273325 -197 396 -.09900748004658119 -200 396 .49575391462523616 -217 396 -1.1112015582529575 -221 396 .96919884523494 -222 396 .4304171295138739 -223 396 -.7635471813038595 -227 396 -.4766926828418513 -229 396 -1.460779011032478 -238 396 1.089075244073291 -240 396 .5514836070359119 -247 396 -1.6974803188055156 -293 396 .13343240477853685 -309 396 1.1363571079753991 -310 396 -.5708952149955135 -314 396 -.12061808056845506 -318 396 -.20441257902362509 -333 396 -.11528543491528351 -335 396 -.11308032022455101 -351 396 1.331021449796126 -353 396 1.0778739491103562 -364 396 .2521141949173863 -373 396 -1.9150145820263431 -374 396 1.4640541634096695 -375 396 .8869768778967544 -389 396 .3257168880834941 -415 396 -.48022748403023485 -426 396 -.2597185227293618 -429 396 1.3379158726251252 -439 396 -.1588397854374015 -448 396 -.3272367554504326 -453 396 -.39952447203398134 -455 396 -1.9849129988597658 -457 396 -.44255638138372866 -465 396 -.07082180716044634 -475 396 .4940681566525192 -514 396 -1.085740497922583 -515 396 .26007265784190114 -519 396 -.48947398382151375 -523 396 .8268095946394809 -524 396 .04453496436552537 -529 396 .10708028633395175 -545 396 .8135172081359503 -546 396 -.7592847486430601 -566 396 -.06690471197185713 -571 396 -.14795348665773644 -593 396 -.5153962672572902 -595 396 .11446981253474464 -619 396 .3251129476063849 -622 396 -.6085041893310855 -630 396 .16737081395334447 -648 396 -.28687040352923887 -660 396 .9068965918859433 -667 396 -.12320265410591465 -674 396 .5298896668712197 -679 396 -.6812447719228677 -691 396 .7154035154575717 -704 396 1.23474711554723 -706 396 .7434463921903294 -709 396 1.4819474813791889 -712 396 -.46988107117058825 -739 396 -.42888009974317537 -740 396 1.5943820435854907 -748 396 -1.150736404411019 -749 396 .7298438717492551 -754 396 .38985325756798184 -759 396 .22872226436049745 -785 396 -.30515378899844586 -814 396 -.43364164262501326 -819 396 .7228565129250659 -848 396 .12318689133255722 -850 396 -.47060922884738643 -873 396 .04652148995536713 -886 396 .4311057194332664 -888 396 -.9854738404452328 -890 396 -1.0763788090017525 -907 396 .6725853259182304 -912 396 -3.3461893475904105 -922 396 .07155080908142653 -925 396 -.32238634101374464 -931 396 -.992255349391528 -935 396 -1.4114926265584444 -940 396 -.06775540156450487 -943 396 -.5320989691678402 -948 396 .9958416948530551 -960 396 -.3366512122772111 -968 396 -.4677784274555854 -989 396 .5773310984350859 -14 397 .7869681810533029 -18 397 .6146095567475242 -26 397 1.0194123631133907 -30 397 .07373664586409456 -40 397 .3041269926912047 -43 397 -.6741089163880053 -54 397 1.2310090279295833 -103 397 .2309314754185844 -114 397 -.26737748602447364 -117 397 1.9397277082124191 -118 397 .33614270081043107 -124 397 .2588374929723994 -142 397 .47440710449873713 -143 397 .40630536384622756 -151 397 -.9941673193871858 -157 397 -1.5111208826996143 -167 397 1.7883401899518183 -174 397 -.1483532967319794 -189 397 -.7346837559354632 -198 397 -1.0507217823137291 -212 397 1.0881570995378391 -222 397 -1.6949272006053557 -225 397 .8347445007405645 -242 397 1.6865558336449995 -251 397 -1.8540570985205396 -270 397 -1.4767462572148744 -312 397 .7068730138175019 -338 397 .286294065231168 -343 397 -.6375851387008558 -344 397 1.1216018437659447 -348 397 -.12380687235498329 -367 397 -.2949660655377137 -370 397 .2100467257158486 -377 397 .7251212955480119 -382 397 -1.4667224443979436 -390 397 .0849470351111931 -391 397 -.24286177367743966 -393 397 -.24662948637167792 -408 397 .3120644271871689 -416 397 1.2350966192658765 -418 397 -1.3376313184786917 -432 397 -.6770957959224989 -434 397 1.3055339645895967 -439 397 -1.9849156462260922 -447 397 .4319244477125763 -454 397 -1.0812490276186444 -462 397 -.5504089827525774 -465 397 -.7608753292569913 -487 397 -1.7346004809542082 -490 397 2.4067215395023385 -508 397 .11439868106469256 -533 397 .08415302490583787 -539 397 -.9926487104522654 -561 397 -.7816713459886775 -565 397 1.0090622420945143 -569 397 1.6082971206958545 -574 397 .2754146948869851 -587 397 1.0796830456494526 -589 397 .6237569504855451 -594 397 .03264992454661368 -595 397 -1.4484305645782254 -600 397 .3316422114264448 -607 397 .490501225787857 -622 397 .15366774683921294 -639 397 1.024807664855685 -652 397 1.2533008207157526 -655 397 .02455792129189907 -659 397 .6757786919751249 -664 397 -.3745048213961951 -666 397 .5724713974120719 -675 397 .7485719524473248 -678 397 1.849564798664288 -686 397 -.5091097280919934 -688 397 .18773502277477075 -696 397 -.2899093406198403 -697 397 2.117347913436594 -705 397 -.16413835102421875 -707 397 1.3400515078111164 -727 397 -.23135137702129116 -729 397 .32188275350186246 -734 397 .6525034600840736 -742 397 -.9041777645096746 -745 397 -.7960517673605961 -746 397 .2186261488736938 -780 397 -.6244194440103503 -787 397 .41580402817627876 -798 397 2.2139847626275104 -811 397 1.2117575735928476 -812 397 1.4225086381288214 -814 397 -.8071055059095987 -852 397 .2306922886011502 -868 397 -.5525826573069358 -870 397 1.1289512774050834 -893 397 -2.3237722270655734 -900 397 .7144202590031317 -907 397 -2.024302438480289 -913 397 -1.2674188418836814 -922 397 -.3284986479009166 -933 397 .9956407118463395 -941 397 -.40497653255574323 -985 397 2.1018811842452627 -997 397 -1.2206269343984366 -3 398 .8313634632659698 -7 398 -.41973248649363915 -11 398 -1.1346409224128102 -17 398 1.4517309905417648 -18 398 1.4486659882609771 -19 398 .5013629892663357 -22 398 .7869775744495358 -43 398 -1.470953598693033 -44 398 .09256507878473715 -48 398 -.9055123460266279 -56 398 -.8230830062005956 -58 398 -.20188765736598274 -63 398 .10703429959781949 -65 398 1.3853665965386395 -72 398 .49761492211470426 -76 398 .9006127822743757 -116 398 -1.654925369775807 -139 398 .25979995099817005 -144 398 -.17085630539717545 -149 398 .324163610993388 -163 398 .7269004818442828 -193 398 -.963921165205455 -219 398 -.33688835412658547 -223 398 -.08160554555651185 -232 398 -.5286554041925464 -240 398 .44223425200375654 -241 398 1.8205878075252928 -244 398 -1.0102549853645773 -247 398 -.11811640561762823 -250 398 -.28173677791091745 -256 398 .029755893751903795 -267 398 -.17392430483814697 -275 398 -.3511899131998159 -278 398 .3563681844883625 -305 398 .1318526133703225 -334 398 1.2349908286276625 -357 398 -1.6543443602598984 -358 398 1.0050231853522906 -359 398 -.38722777109825096 -380 398 -.5439294810734856 -383 398 -.9310763519870686 -384 398 -.8021734060496792 -395 398 -.04348096873266995 -398 398 .28239757511321056 -413 398 1.2810416909062379 -432 398 1.5101764954337737 -458 398 .07987871379524908 -469 398 -.5503235012517618 -495 398 .7757219774545953 -522 398 -.8423786631923943 -530 398 1.7341584883714878 -533 398 -.1494880040029475 -545 398 .12663459358903587 -559 398 .4289849554723999 -565 398 -1.665796310977542 -566 398 -.7750648038191851 -571 398 .6903764062023784 -575 398 .044061716591300044 -577 398 .33271030467110113 -589 398 -.4533411259601846 -591 398 -.17997638063173288 -597 398 -.32936771398522025 -598 398 .3778671562629646 -604 398 .07219468384397047 -618 398 -.9123051966893332 -636 398 -.35167951234679146 -651 398 -.7699591376709957 -673 398 1.4512772264562044 -688 398 .4564401399879505 -690 398 -.026244245186446774 -692 398 -.6197296982357315 -699 398 -.4997110438445468 -705 398 .14180320768127697 -726 398 -1.1278419002660873 -745 398 -2.372341361119334 -752 398 .10680244156240012 -759 398 -.483781926819394 -764 398 -.6359513609451235 -767 398 .350310050301894 -785 398 -.02795644604274046 -791 398 -1.440060607203778 -792 398 .16741670084010085 -794 398 -.8619864009177672 -802 398 .9377568389928834 -812 398 -.6147004748358494 -815 398 -2.1034624538013875 -823 398 .128579151727103 -824 398 .20685752853781605 -825 398 .6915105101011119 -826 398 -.7493081330032392 -839 398 -.9909632731544982 -840 398 .39647726555163787 -864 398 -.43654044311808754 -882 398 -1.2299377641351767 -893 398 1.2143923859402848 -894 398 -.44592217099439213 -908 398 .6815591199433457 -913 398 1.2734522348743025 -928 398 -1.1025239487116432 -931 398 -.76003036195758 -942 398 -.7631155495449125 -945 398 .3075356627408109 -954 398 1.1768563604372142 -962 398 -.5231606050440674 -1 399 -.07701285332516163 -20 399 -.6535958502503338 -26 399 -.905492913698291 -54 399 .31954150490029 -56 399 -.29478635931666014 -71 399 .28682091629800593 -81 399 1.5168884159891571 -86 399 -1.0342496279741444 -100 399 -1.7959772959332978 -119 399 -1.0611798578769123 -128 399 1.3873583233688904 -129 399 2.539599108963575 -134 399 -.2867448393223024 -157 399 2.087241199315876 -158 399 -1.4055868415107111 -160 399 1.9259858880593421 -166 399 -1.838667084105931 -168 399 .40192465927645143 -182 399 -.23046812060678384 -186 399 -.9639234376777971 -195 399 1.555373799202001 -208 399 -1.3459763555773854 -210 399 .3814963677962262 -223 399 -.2925734777123156 -225 399 2.2230950913231395 -229 399 -1.2673185907449922 -241 399 -1.9658133791213703 -263 399 1.4137019958124315 -264 399 -1.3558683801434335 -276 399 2.9836665435702048 -286 399 -.4357864047496345 -288 399 .15082498126712168 -303 399 1.4569063952071437 -313 399 1.3117439888405162 -335 399 1.3988403607698194 -371 399 2.3588489072172463 -378 399 1.4755442019303466 -405 399 -1.395409291252324 -412 399 -.19789437752566363 -419 399 -.2848101742568359 -429 399 1.4742888071971467 -431 399 -.5571530199541518 -445 399 .025699589595859437 -466 399 -.7192442114633831 -473 399 -1.6324165585914425 -478 399 .17492572094720807 -482 399 1.1240558468521706 -514 399 .12758604557352865 -515 399 -.11598929912449275 -537 399 2.2454731055533776 -540 399 -.3031592829628304 -542 399 .5030420464545636 -553 399 -.139575214916643 -568 399 -.6479892662513603 -574 399 -1.490426379718168 -599 399 -.7514885062605208 -602 399 -.9676373522762054 -606 399 -.32243361367471923 -611 399 -.29376563400546024 -616 399 -1.286188020492739 -617 399 -1.5526311346209307 -621 399 -1.5493467496691087 -634 399 -.9595728509921841 -647 399 -.40728407195510097 -676 399 .7863849837020606 -693 399 1.3876917436020917 -727 399 -1.1354909306943681 -747 399 .2306035366309601 -748 399 -3.3814215441432025 -761 399 -.421948877399115 -810 399 -2.325623299751625 -813 399 -2.4239489947527764 -850 399 -.5063606487653586 -862 399 1.644108147664758 -873 399 .42367700649463425 -883 399 -2.4279753049737023 -891 399 1.8798185172325887 -899 399 -2.6133669079665554 -930 399 .5403036251994664 -954 399 .4489137492471368 -966 399 1.7473698216008604 -968 399 1.3573913688632668 -2 400 1.795654079212321 -12 400 2.0607823158039666 -16 400 -1.0742385136889037 -31 400 -.3647024751072061 -37 400 -.6011086825361374 -42 400 -.323908576428113 -50 400 1.3727184992572643 -51 400 -.5225422024883114 -58 400 .8973070044115776 -63 400 -.7367824068687696 -68 400 .004580874620008071 -99 400 -1.6796079664815717 -100 400 -1.2302394275721122 -103 400 3.102699510970699 -104 400 1.6435546347494019 -108 400 1.0473586849564918 -119 400 -2.2700139934679817 -129 400 -1.0108120405439933 -147 400 1.4068834995232042 -149 400 .7596856577148489 -154 400 .7652205513788842 -168 400 1.2349382863334288 -172 400 .08763311654757697 -218 400 .8095937933550372 -227 400 .06286867878951312 -244 400 -.3293282913485022 -270 400 1.4531280134358326 -276 400 -1.0712497464343367 -294 400 -.223949607025164 -297 400 .9238967884212599 -312 400 -.00613977230355023 -338 400 -.43341892739288623 -343 400 -.07122291584015311 -350 400 .7474512517799681 -352 400 .07734024677731238 -353 400 .2969334463602482 -355 400 -.11781979132255856 -359 400 .639988699119324 -371 400 .42469168910857297 -378 400 .4158652362865458 -391 400 1.3013416997225957 -400 400 -.9622523832737061 -401 400 .8945920542550644 -409 400 -.8411030422964203 -414 400 -.5099764339647201 -424 400 .6813677497124001 -430 400 .15173057485353422 -433 400 .0018492176830134524 -451 400 -.01692900274740447 -458 400 -.4138821984101584 -473 400 -1.0208065999111833 -485 400 -.3351487093538529 -490 400 .17757311412306012 -506 400 2.047361633851823 -516 400 2.4062389882748167 -521 400 .2743575612329623 -524 400 .4035892680808948 -541 400 -1.181557042392507 -548 400 -1.280088796754261 -559 400 .09521763817079985 -568 400 1.9345470764198098 -569 400 .9745963008399668 -571 400 -2.4316170102093637 -576 400 -.668661892082038 -584 400 1.1014229315053554 -602 400 -.4629174870208853 -603 400 -.923807093959425 -604 400 -.7433142311294835 -618 400 .8361749949313707 -686 400 .6982936306627657 -703 400 -.2697357816439335 -706 400 -.9508058197994913 -714 400 .6379095124019137 -715 400 -1.1195134903051098 -720 400 .004233293188751555 -721 400 1.1281318354165388 -736 400 -.7831677095293095 -743 400 1.3514557991964542 -758 400 -2.175957600597057 -762 400 -.7657127570334334 -791 400 -.006843526186975729 -798 400 .7616333659696093 -802 400 -1.2857751793698633 -803 400 -.7587801955417824 -824 400 .6468656824012204 -833 400 -.27950032320202617 -850 400 .4022090458328346 -851 400 .4747504514642647 -872 400 .5009014497518826 -883 400 -2.1115056659794935 -902 400 .7983190717792507 -921 400 1.7862974484251501 -949 400 2.6441434328813265 -950 400 -.7175591688082789 -963 400 -2.5426869367833627 -966 400 .9279922951686524 -981 400 -.5002342548165175 -6 401 .5837789792092938 -7 401 .2748985330718749 -19 401 .7486093109593873 -25 401 .6890246029956135 -37 401 -2.075818822702163 -55 401 -.40225396513078504 -57 401 -2.035423899884006 -61 401 -.2309594410769322 -65 401 -2.5336611223392675 -68 401 -1.1873138293224503 -69 401 -2.051002732141677 -74 401 -2.250730464484084 -76 401 -1.725748518182466 -109 401 .021921753874783647 -110 401 -.2847465907297456 -113 401 -1.2927397059300716 -118 401 -1.650888322309639 -126 401 -1.1115671840883685 -137 401 -2.3178532524591167 -146 401 -.8109868601024824 -174 401 1.2300915102353704 -177 401 -1.6854102094726413 -181 401 -1.7030363502440835 -185 401 -.06369330032898673 -187 401 -.09570286167580888 -195 401 -.2960461561349368 -197 401 -.8564358790467608 -218 401 1.0202944191480525 -223 401 -.04446375990054255 -235 401 -1.7112625513160975 -236 401 .450181529448648 -242 401 -.05375933878901787 -244 401 1.9014535875415004 -246 401 -.06313956560633413 -247 401 .7948707154016813 -252 401 .4791224504590725 -259 401 -1.3735259296095284 -268 401 -2.399374366440073 -285 401 -.46319080230654375 -286 401 -2.4360932017546477 -291 401 .9780730073151883 -301 401 .6735408076050365 -309 401 -1.054622047734336 -312 401 .16517296312712687 -324 401 .4795375108931788 -329 401 -.5170852748414974 -332 401 -1.1187690678097832 -374 401 1.0136359273605924 -400 401 .22598387574030293 -404 401 -.8611427670699159 -413 401 -1.476352527182812 -417 401 .6376730928713145 -464 401 -1.9286904833325844 -466 401 1.1118832326968306 -475 401 .24705102276632082 -488 401 -.5321552628030422 -491 401 -.21978741340429975 -501 401 -1.6164963842554971 -515 401 1.8409818572732595 -532 401 .10962330561497576 -535 401 -2.167412734029005 -548 401 3.146161187117504 -553 401 -1.1441813708012205 -555 401 1.4592238466458023 -558 401 -.3529859954658711 -563 401 .9016682606226866 -573 401 -.29537586339498256 -574 401 .3408683889393334 -581 401 .40224006157386716 -588 401 1.6647228576268682 -594 401 -.5559790121003927 -605 401 1.2544125300446631 -619 401 -.3535430791295139 -620 401 -.20153768336680578 -627 401 -.5273264721714042 -630 401 2.4700601060125282 -635 401 -.42501632859334076 -690 401 -.08667548222456856 -698 401 -1.111751354735791 -704 401 .5065811605661992 -706 401 -1.7710849981650787 -710 401 .31797973621514286 -718 401 -.4216697687733947 -724 401 -.2942248306874237 -737 401 -.6438996137834173 -749 401 .710589751689583 -761 401 -.5490181467467015 -774 401 -.4009302570523096 -828 401 1.5993330017091332 -834 401 .024298688346236996 -852 401 -1.6559759953518691 -853 401 -.41324130480980426 -864 401 1.465587003582568 -885 401 -1.0424193811490698 -888 401 -1.559795642295322 -898 401 -1.6326704869577509 -903 401 .7329921900142595 -912 401 2.4225920997160673 -913 401 -1.628849618374428 -923 401 -1.134672502240133 -961 401 .11338799638999025 -989 401 1.5745469583903229 -993 401 -1.2688176340465653 -2 402 1.5106551966063988 -9 402 -1.2321564302798365 -14 402 -.11060533335662368 -16 402 -1.7229743966235163 -38 402 -2.4225988853979006 -44 402 1.3266492675790436 -45 402 -.4452085373536695 -59 402 2.192206589259091 -62 402 .6621367582729206 -72 402 -.8824945486501914 -96 402 -2.2355401593920052 -98 402 1.7828668126224132 -103 402 1.1455439799685294 -136 402 -.6327456129992404 -137 402 2.4184678726525344 -144 402 1.6094988552310703 -164 402 -.17056911924897103 -206 402 -.06754697293347225 -209 402 -.3613770234552021 -210 402 1.149045307142975 -223 402 .879336299623668 -225 402 -.5525309940908312 -228 402 .769339232728477 -231 402 .9465042431223408 -234 402 1.4709157410664573 -250 402 -.5401201253741402 -253 402 -.3057523055997281 -254 402 -1.1771059589027106 -263 402 2.1335442467048544 -270 402 1.8916198836584668 -272 402 -1.240473198153953 -275 402 .5450452382009155 -279 402 .11209183477636783 -283 402 .35341100486882915 -298 402 1.5983582425874183 -300 402 -.3878022760447833 -317 402 .270323592205357 -332 402 -.244738828806523 -334 402 .3974568610233567 -336 402 -1.7013228962405853 -345 402 -1.4641928602152288 -353 402 -1.4833436351462486 -371 402 1.6421845186057125 -383 402 -.00335038551157793 -388 402 -.526674397299582 -419 402 -.7454091775583748 -428 402 -2.065905798459379 -444 402 -.6272139860369379 -448 402 -.5793479217135237 -466 402 -.8421017434715534 -469 402 -.06792502282328207 -476 402 1.1380749353772592 -498 402 -1.8456046238852397 -517 402 .9385590199725857 -519 402 1.7229798532867093 -525 402 -.2674780420954908 -538 402 -2.255638940764706 -546 402 1.3832723459115979 -547 402 -1.1465799005818087 -586 402 1.3973260551491624 -589 402 .20499499812384409 -600 402 .7931283195194069 -629 402 .5245980930509447 -631 402 1.1142471377024956 -633 402 1.2585691130693744 -643 402 -.41632466741823126 -655 402 .8468652137064581 -658 402 .4718347652604731 -663 402 -1.259382501303179 -664 402 -.46021794504167013 -666 402 -1.3445642898430776 -684 402 .3531662306142336 -698 402 .8198484866723836 -707 402 -.20569511821148623 -708 402 -.10511937613660716 -710 402 1.315407749722276 -715 402 -2.2098151296171746 -726 402 .3613932871780266 -736 402 -1.1621382038992767 -739 402 -1.0797390730167193 -745 402 -.19615706069285468 -749 402 -1.0002665316964396 -758 402 -1.502518154332518 -768 402 .0695851826919586 -771 402 -2.070119317578418 -777 402 -1.4868599800294748 -784 402 -.6880459740215074 -792 402 -.6883682421201778 -795 402 -.014275149502314122 -826 402 2.1161805722487643 -840 402 .49498035110609007 -848 402 -.11177725670467845 -856 402 -.11322672352650084 -858 402 .39027171540113775 -881 402 .4134517914386999 -907 402 1.3843733482952612 -915 402 -1.3371761570368006 -917 402 -1.0440304542770296 -918 402 1.0665685018853226 -927 402 1.6744312340441976 -934 402 1.6669193704201821 -942 402 -.09165990023976542 -950 402 -.12065577544125906 -969 402 -.35552600523679995 -972 402 1.1130326035312375 -990 402 3.0703476234516422 -997 402 -.3440546471237006 -6 403 .2893111241765833 -9 403 .9627600113863561 -58 403 1.1058168271596356 -113 403 -.6376096141423898 -128 403 -.6614781036252528 -143 403 .9254576640510813 -148 403 .12177058882142389 -161 403 -.5711646697562514 -167 403 .49583673219676844 -170 403 .7221529389979763 -172 403 -.8104710644066481 -192 403 .6825463542114547 -193 403 .4611343651115898 -205 403 -2.2787845087598906 -209 403 -1.6950770563507724 -228 403 -.26729369427328126 -258 403 -1.03929283913525 -267 403 2.0683164721317167 -285 403 -1.7062718185470147 -306 403 -.8616430699552572 -312 403 .4315130755920233 -350 403 -1.2892394544792143 -352 403 -1.6057392260106165 -377 403 -.021612655521525484 -390 403 .5064110559963683 -392 403 .48557841273873875 -422 403 .05730727105176195 -464 403 .5122340398155177 -496 403 -.1253746496820017 -498 403 .4881446203392956 -541 403 1.2931691025210488 -546 403 1.5144223700470991 -558 403 -.20386349566701517 -602 403 .8737671367728659 -635 403 -.4636091318499615 -645 403 -1.5492778552060176 -647 403 -.8838755923318786 -655 403 1.376811005028935 -661 403 -1.39119985947017 -679 403 .39355586866141645 -680 403 2.141212908675008 -684 403 .11738311770529898 -695 403 .7016573506341567 -697 403 -1.3706118001140786 -701 403 .22686715082980988 -722 403 -.530516433250334 -739 403 1.2171059921874368 -742 403 3.064860737398457 -755 403 2.3768416449244527 -786 403 -.5833394259752267 -802 403 .6985435197459515 -809 403 -.7094139751785288 -828 403 .7067212510199284 -833 403 .4442596647711945 -863 403 -.08812724587203968 -872 403 -.9435130074041677 -876 403 -.43268951071834794 -891 403 -.5949074266262827 -893 403 1.0840679451800228 -896 403 2.603835234013539 -897 403 1.9965900912941812 -899 403 1.49075170141557 -900 403 -.24597783673452436 -915 403 .3440688473077202 -938 403 1.2232507045476377 -941 403 .7561569950530336 -959 403 .0025808659004598333 -982 403 .04572862216884418 -992 403 -1.601070375848905 -993 403 -.9743172391629046 -14 404 1.0764571654429815 -23 404 -.12392706576639508 -34 404 -1.0227273262480931 -35 404 -1.1312968077477878 -39 404 -.09868612528726581 -42 404 .6072007023581218 -45 404 .2337351793386956 -82 404 -.7171510941256821 -93 404 -.35026279602546795 -127 404 .32957126991151503 -158 404 -1.3338532033039496 -165 404 .9141899477061971 -182 404 -.2749470956073857 -184 404 -.6097849521750693 -211 404 -.26789871764766265 -214 404 -.865163167275304 -215 404 .84933558951905 -221 404 -1.463324578079526 -239 404 -.26089712612941734 -247 404 -.36819599308493656 -250 404 .8919677620433981 -259 404 .3535657521765191 -267 404 -2.3313422814312648 -290 404 -.7382994989280893 -296 404 .32962111000988964 -315 404 1.594420312790387 -349 404 .9323942314125488 -355 404 -.0714996857227671 -356 404 .33106444276827207 -367 404 1.6045574378579675 -374 404 -.04750788637052894 -376 404 -.47500464826924155 -377 404 .35851000799592475 -383 404 -.8063743633919175 -385 404 -.06023919136791551 -390 404 -.18909781542711737 -401 404 -.14803593167820356 -410 404 .0030331855553492465 -412 404 -.43711388406779317 -419 404 -1.4470324868965936 -421 404 -.05798752046978589 -430 404 .7004257718803769 -436 404 .30292865465086677 -437 404 .8718370256192124 -445 404 .09396797911178636 -459 404 .31644361054881254 -461 404 -.2668010669297537 -490 404 -.2677670410715481 -491 404 .6095426733817277 -503 404 -.20631845824027337 -507 404 1.092578326758888 -513 404 1.6079064692908132 -536 404 -1.6711949909461388 -543 404 -.8499648449274481 -547 404 1.3716858347486078 -548 404 -.6672963536642922 -550 404 -1.0558444855668698 -557 404 1.046845017154491 -560 404 -1.042804008902631 -561 404 .7309409929497876 -570 404 -.3439278349320797 -572 404 .099623075974692 -591 404 .5842397584531474 -597 404 .5546874813900123 -603 404 -1.0895966468298086 -610 404 -.8531273681978224 -620 404 -1.1699466127467864 -632 404 .1659135134348838 -648 404 .5906926427299786 -666 404 -.9368517343844964 -701 404 -.00563310359752206 -702 404 -.26506649836548346 -703 404 -.13684658877865805 -713 404 .2307438717416325 -715 404 -1.1347141846092086 -729 404 -.40975820424540077 -742 404 -.6161667607610637 -747 404 -.5434816811982175 -753 404 -.9778378891131106 -759 404 -.4103167131580685 -760 404 .846471885504876 -779 404 .8819241786533225 -784 404 -.5632108803068422 -790 404 -.3799640119750313 -791 404 -.40138103598038305 -800 404 1.5068984921366617 -803 404 .08604598751862065 -808 404 1.521739117711438 -817 404 -.281766739197545 -827 404 .27122143719106295 -828 404 -.8143250953852272 -830 404 .23758865345581648 -835 404 -.8910056909079014 -837 404 1.549842059828187 -845 404 -.3804190897243266 -859 404 -1.153220948931511 -860 404 .9779469708453732 -864 404 .025920833734094678 -869 404 -1.5017797492489104 -880 404 -.37170932217966524 -884 404 -1.5023306900880211 -889 404 1.2380553866085904 -890 404 .737138914193001 -908 404 -.1049205411362098 -912 404 -2.515611960753675 -946 404 -1.1200550958554745 -953 404 -.60949558770131 -983 404 1.2216668034668292 -984 404 -1.02448873271719 -987 404 .3217753759459024 -4 405 -.023159948881685422 -21 405 1.066827021511045 -26 405 -.35104411787842726 -27 405 .30215036573106735 -29 405 -.3129374223715284 -63 405 -1.218080459140067 -77 405 -1.3964525611265188 -83 405 -.27401295202661136 -97 405 2.003597321577953 -101 405 1.4532327135170475 -105 405 -.5999823601561688 -126 405 .1778586640712576 -134 405 .19616786860740557 -138 405 1.4470414754710776 -141 405 .7640410811090282 -142 405 .3032624469691994 -148 405 1.9080589982330138 -151 405 .9279118424330703 -152 405 -1.0509785784217582 -158 405 -1.9035738535003386 -167 405 .6605012235594502 -168 405 .8544213784982008 -175 405 .09243478701133195 -196 405 -.4187502266236478 -198 405 -1.1052778526971712 -218 405 -.6450674036630719 -243 405 .6324821973559451 -267 405 -1.269939108022327 -273 405 1.2862554322409463 -294 405 .7269801309730929 -313 405 1.1787999779202563 -320 405 -.7218917483602247 -327 405 .2941955556897923 -343 405 .03367026320501172 -369 405 .9813788185852174 -386 405 -.23371544886808154 -391 405 -.15473588006743935 -400 405 .856319711070965 -416 405 .7303980357928336 -449 405 -.6906746931110359 -451 405 .32027618282339254 -498 405 -.66049693673058 -523 405 .39870064238496655 -541 405 .32809170249450026 -543 405 .4191595969095693 -552 405 .25013244284621206 -566 405 -.671121155565034 -575 405 -2.5502581064042262 -577 405 -1.6489206658554112 -600 405 -.45608074115884 -621 405 -1.6547021356704916 -623 405 -.6334337645169591 -635 405 -.24497178304873501 -679 405 -.246425855462932 -681 405 -.22396040873303763 -701 405 .6885724158913406 -702 405 .6679380015197723 -710 405 -.4779461561228485 -744 405 .8310760375471015 -758 405 .1464855267647367 -765 405 .06380346390439096 -775 405 .007260732200490658 -777 405 -.46236832834047026 -783 405 .7674338535372182 -804 405 -.32074919145357517 -809 405 -.13294611640511728 -817 405 -.3131473786307556 -820 405 .13979832307396609 -821 405 -.20998128654138673 -827 405 -1.1752435724232597 -831 405 1.1250452122556698 -840 405 1.0782841377814847 -841 405 .9800324239740413 -849 405 -.6678805528529504 -853 405 -.13211738911798615 -871 405 -.9395668069418509 -886 405 .10000556436280997 -902 405 .6280148836945947 -908 405 1.4184199854283737 -917 405 -.8635472107826759 -929 405 .5627645102235597 -950 405 1.3460660814950705 -970 405 .07003168029503412 -973 405 1.0444026305461682 -976 405 -.13514597068694795 -979 405 .014169691034705174 -986 405 -1.0301099617069844 -999 405 .40477923504323626 -14 406 .7387025835499881 -39 406 -.4576360825734555 -49 406 -.48375967803341824 -72 406 .5462482838733637 -82 406 .5331912050678111 -95 406 .2463539486395485 -107 406 .27376753526740855 -114 406 -.0006828335066366431 -116 406 -.45594894816757586 -120 406 1.1310388717842432 -143 406 -.26667015971318286 -163 406 -.14997497714997346 -166 406 -.13142214518926737 -171 406 -1.1408126979928153 -174 406 .5475909698121062 -176 406 .4291252894850304 -180 406 1.1590543722081035 -182 406 .2558413753925962 -185 406 .19108932312523785 -198 406 -1.120854255775217 -229 406 -.5181297872261349 -240 406 -1.3722102018559736 -241 406 -.309060058151839 -247 406 -.451116985418823 -258 406 .46289643347837145 -296 406 .6648693774872699 -305 406 -.024378086740794266 -318 406 1.1077126319366006 -321 406 .24113251468489277 -330 406 .22225726207435492 -331 406 .12185181863971964 -342 406 .490552490995592 -349 406 -1.1011771299263489 -352 406 -.4705768495285699 -354 406 -.8193136052565375 -360 406 .5976080639682037 -367 406 -.11436956533446803 -373 406 -1.0325836569215385 -379 406 .37138853054853166 -384 406 -.27351084204659615 -408 406 -.24182809144068443 -416 406 .5171958687534431 -417 406 -.23148015141783954 -436 406 .3208082012517794 -448 406 -.7190804430385926 -458 406 -1.291135264209721 -463 406 -.11837440673023762 -474 406 .5978618604624131 -476 406 -.663348947697102 -478 406 -.3236623740316369 -484 406 .8898797207093214 -489 406 -1.0431318085386347 -501 406 .8534943517881999 -505 406 -.026771154145967032 -509 406 .031727474540288625 -513 406 -.16718372086611774 -530 406 .4241619649843458 -535 406 .8861585989131705 -553 406 -.1855097099762688 -556 406 -.7480683021566238 -561 406 -.646751008429402 -581 406 .2324183441417593 -585 406 1.3152412419981865 -586 406 .6300953925450712 -589 406 .1872726150185282 -623 406 -.2456883072200461 -664 406 1.027352067142323 -665 406 -.08693928217152203 -685 406 .1960129377660985 -692 406 -.2807422056433139 -701 406 -.41963837912754093 -711 406 .2590080669217505 -722 406 .4509255773933089 -725 406 -.06892349919212551 -730 406 .5067397065913737 -735 406 -.2711071359825204 -737 406 .2511948498942546 -751 406 -.44471038884471314 -754 406 -.21787246965891743 -766 406 -1.1579778711894169 -776 406 -1.2852257505750149 -780 406 -.15198048455882257 -786 406 .022023315906259285 -804 406 .32530009625572764 -840 406 -.554708821001307 -847 406 .07965941329280589 -849 406 .2770627956589744 -864 406 -.12827686028841806 -866 406 -.38158882206160605 -868 406 .33837368031119147 -877 406 -.18949771549239264 -906 406 .05956910890158911 -908 406 .32568419700071705 -924 406 -1.3385613533750396 -931 406 -.9408783072266048 -942 406 -.5357343993459122 -943 406 -.05629725888798667 -959 406 .5564947596967535 -972 406 .541036102963006 -979 406 -.432396180328469 -981 406 .2666687466908474 -985 406 .12715338718447075 -995 406 -.48783692554599045 -5 407 1.6235716390950299 -25 407 1.2216791754355685 -27 407 .13566136408218438 -29 407 -.5384334163293599 -77 407 .6767491913737854 -81 407 -.0695869874084391 -85 407 .6782473348253828 -107 407 1.2282182238227828 -123 407 .42076694234498757 -127 407 .7793265927043431 -129 407 .6809777402463292 -133 407 -.46211096861862455 -137 407 -.7192227203617869 -145 407 -.8728524411565133 -150 407 .22913981972380768 -160 407 -2.220501653029819 -170 407 -.2511087947831683 -171 407 1.4431961831822895 -174 407 -.21650319613858376 -178 407 2.4555702716802426 -185 407 -.9270761308504094 -223 407 .23009221180318568 -230 407 -.6272258593976723 -231 407 .6793033598400892 -238 407 -.7312535214167519 -247 407 .7126977046246215 -259 407 -1.897463882853652 -263 407 -1.217225226034187 -296 407 .28870964721915854 -308 407 .21183100191890822 -317 407 -1.081529786358634 -334 407 2.60431952894468 -336 407 -.08757128264739827 -345 407 1.2929185726702879 -352 407 -.33091044758604526 -376 407 .8249097648934698 -394 407 .7299259651786576 -414 407 -.5335785606428376 -446 407 -2.343990050709342 -462 407 1.2731389479665105 -468 407 1.1964667365553885 -469 407 -.021230960364266555 -484 407 -1.8141056016382786 -498 407 .6616400495082554 -505 407 .7608169988530101 -516 407 -1.4695496071808707 -519 407 -1.3513036646789416 -527 407 .8432087379760611 -533 407 -.40586679835891676 -536 407 2.2276938358469764 -541 407 1.1039059593796112 -544 407 -2.03575515097702 -566 407 .16981598958554944 -590 407 1.4055121881235788 -603 407 .7935523147273496 -634 407 2.2698719358329744 -635 407 -2.422285053753918 -642 407 -1.209739966618755 -645 407 -1.9629809450012787 -652 407 -.09791641725356026 -662 407 .4441866556885028 -664 407 -.8472973079357891 -672 407 -1.5429371439122974 -685 407 -.31527384802519365 -690 407 .3366827676607288 -698 407 .9650749764258041 -714 407 -.6908762319411048 -718 407 -.6017857525323796 -726 407 .3506976752219864 -728 407 -1.0186158221385821 -736 407 1.1699764584564192 -738 407 .6590254457483116 -749 407 .7141220725465462 -750 407 1.726685420851176 -756 407 -1.5812309378138811 -759 407 -.9989048529426544 -761 407 -.20277461964022814 -777 407 -.4290811102057774 -778 407 1.6608773942425508 -786 407 .6081918854899423 -787 407 -1.200815411182819 -799 407 .07753022555766709 -806 407 -.7516182913860694 -810 407 -.4920795342399613 -816 407 .8338459247786829 -835 407 1.2691594477929418 -844 407 -.5560660277052668 -849 407 .5293135916549673 -862 407 -.7611913048616357 -869 407 -.6254919498671583 -873 407 -.8072989430203769 -890 407 -.44096684429984156 -898 407 -1.8448981854745967 -909 407 -.818795109323617 -911 407 -1.1129448877699621 -912 407 3.2601675669465098 -919 407 1.5983799244211672 -939 407 -.12661697842980793 -946 407 1.0600394973753127 -960 407 1.2950713444312325 -971 407 -1.2985058557991984 -975 407 .33451191960785864 -982 407 .026883336864143542 -987 407 .02835323785267732 -990 407 -1.9725013033532806 -4 408 -.8962258302361931 -9 408 .4151253702202292 -58 408 -.6150706921630709 -92 408 1.0001359444667415 -93 408 1.0897468068893739 -105 408 -.5938847331128058 -120 408 -1.8627406390430996 -135 408 1.2814504591694973 -136 408 -1.6573478163544255 -171 408 2.2749376615565544 -187 408 .7803013596109947 -198 408 1.7224534198258974 -201 408 2.2091389165108444 -207 408 -1.088274109878527 -221 408 -2.364160182180483 -222 408 1.7746306964740621 -266 408 -1.0575103462278472 -281 408 -.665436060362797 -282 408 -.18197959200783023 -285 408 -.8386096423972911 -293 408 .3754257767534145 -299 408 -.6394611131434698 -328 408 -.526224573965326 -329 408 .19413139909486649 -330 408 -1.7509891389822507 -331 408 -.43072202926166897 -340 408 1.4054174695609574 -343 408 -.8750093762589507 -359 408 -.20939959997971896 -381 408 -.396271237410179 -412 408 1.8414848755404294 -423 408 .18552149464174325 -440 408 -.022323120304628827 -454 408 .4920986184143029 -455 408 -1.3724783360979818 -458 408 1.8811695797977772 -471 408 -.9910382334624932 -474 408 -1.2961510762379636 -479 408 -.479623555778226 -483 408 1.1268290436828001 -489 408 .7174470666236329 -500 408 .455148388954554 -504 408 -.8743743655202382 -508 408 .2597740399901928 -509 408 -.15213346607997089 -516 408 -1.2788153083171465 -531 408 1.319424350030726 -533 408 -.14977274581282943 -574 408 .636880666673782 -577 408 .12191149982512499 -591 408 -.8653464586390165 -609 408 .6375843420419898 -617 408 1.1778966281971173 -621 408 1.287506418917486 -627 408 .5533520337935413 -635 408 -2.1591629182544256 -640 408 .4870188357402243 -646 408 -1.4454493805819293 -651 408 .432819990715872 -661 408 -1.6920715086724816 -664 408 -1.5955606245647793 -683 408 -.291665009826134 -692 408 1.4330592494628112 -693 408 -.2695743604069364 -700 408 -.8882638544863368 -701 408 -.5252574519656547 -706 408 -.7643829934798417 -707 408 .03156014697431429 -709 408 -1.358053597553273 -710 408 1.67563788087437 -715 408 -.8005127917650957 -731 408 -1.1662791476788432 -769 408 -1.2509362521718297 -778 408 1.2962427734959918 -783 408 .6337196876111851 -784 408 .5474361997173073 -807 408 1.3589848466436407 -813 408 -.07828994694293544 -839 408 .8150752456246972 -878 408 -1.5660536868554933 -887 408 -1.073396633687165 -888 408 .8396935904214364 -902 408 -2.0073333128023076 -908 408 -2.227174767069056 -924 408 1.5176775461085361 -929 408 -1.0990201061932612 -930 408 1.9337656863816204 -958 408 -2.574037659434214 -960 408 1.1714233304343409 -976 408 .9931207764674664 -985 408 -1.702726129769361 -11 409 -.46656600946931986 -40 409 -.21032409183230844 -47 409 -.7578231880952508 -51 409 .27011801863287827 -83 409 -.0520135703346194 -120 409 1.9741292737543603 -124 409 -.031779034869586026 -135 409 -.9113708968634322 -141 409 -.4929507066749885 -149 409 -.1501731943605272 -175 409 -.12474498631578193 -189 409 -.2429702313843173 -192 409 .03728326886387273 -201 409 .8809232924189517 -206 409 .9508998148574203 -208 409 .2878649577125886 -211 409 -.7503931591978534 -235 409 .21872773018524935 -253 409 -.3622496070082522 -282 409 -.626535323399659 -291 409 -1.623659785630043 -292 409 -.19537402500189444 -299 409 -.1720652339426232 -300 409 -.10331137454662509 -316 409 -.13092947017895343 -321 409 .6174109024335832 -342 409 -.003010151107994378 -346 409 -.48811313158939684 -355 409 -.26798587119666145 -379 409 -.14062989703224243 -385 409 -.2868503614250922 -386 409 .737395689759361 -390 409 .014842887313555209 -392 409 .930153291219684 -395 409 -1.1483096765704572 -403 409 -.5400439936529549 -407 409 .4189527498971584 -418 409 -.7514104919564403 -423 409 .0615496382097325 -426 409 .1705278246434358 -427 409 -.11018145733533849 -434 409 .501047802938616 -439 409 .5606821774013773 -462 409 .9240426625018623 -495 409 -.2874613785093969 -503 409 .3467603695849864 -512 409 -.11309626008542525 -521 409 -.2256420143877339 -531 409 .9236242517055859 -541 409 .5863521850656632 -548 409 -.45216970741818396 -557 409 -.09633631828288293 -559 409 .7320214355206751 -560 409 .278876147303337 -566 409 .14264838987167563 -601 409 .21665125721194278 -603 409 .08017941957098132 -606 409 -.8085036903167657 -641 409 -.760433490619381 -661 409 -.778961203312833 -678 409 .043875764819246266 -700 409 1.628962393370415 -718 409 -1.0701663912953736 -720 409 .15166756890224117 -726 409 -1.5990083760546054 -733 409 .6022841573678291 -765 409 -.08905539815410346 -767 409 -1.1686665651917572 -772 409 .40091456498095407 -786 409 -.2418170815891991 -798 409 .2219205528588505 -800 409 .8525108484831029 -809 409 .33565116798880634 -821 409 .09462455898759126 -835 409 -.20193757560602837 -840 409 -.3296820917837259 -842 409 -.9922076040065503 -853 409 -.28435000017088136 -865 409 .38635508960967657 -866 409 -.9153288672854334 -879 409 .1420664649999026 -888 409 .6299956898136364 -900 409 -.23730749815261887 -931 409 -.7386471628718507 -953 409 .16360787109887506 -960 409 -.04272630612425943 -962 409 .5250329281959301 -978 409 .7119200459265235 -996 409 -.6348395267789188 -5 410 1.1130948796979114 -8 410 -1.2478942042419827 -23 410 -1.3917181422456526 -28 410 -1.1157115849242936 -32 410 1.3535632732108218 -41 410 -.2613435307672245 -43 410 .4585497339981191 -50 410 .8136778419337822 -55 410 -2.0195301934270957 -117 410 -.06562296634379926 -126 410 -.9182069099974435 -162 410 -.0850311009090806 -164 410 .6382376344745458 -202 410 1.4243289504521444 -212 410 -1.2829512282264042 -217 410 -1.4428268051830455 -218 410 1.2778976845026109 -233 410 1.3370231012151876 -234 410 -1.4360089519838772 -237 410 -.5933478630349833 -238 410 .7076556465130457 -252 410 -.553326851774329 -286 410 -1.1904852383675464 -292 410 .18819433276854716 -297 410 2.5016607351895614 -312 410 .12845615634259663 -314 410 -.18487723879274987 -315 410 1.3232013350125824 -317 410 1.2836537841457327 -323 410 -.7172099815246491 -340 410 -1.777174077886015 -356 410 .8735102997773243 -357 410 1.0734880855122357 -358 410 .22885014611966928 -365 410 1.5218664857811444 -373 410 .9703952266767042 -384 410 -1.0588366828266365 -392 410 .6750778544093501 -407 410 -1.182355187403541 -415 410 -.3388400869697403 -448 410 -.4264737616831376 -486 410 -.3467567993065767 -490 410 -.29169790527334216 -509 410 .42496858331809173 -521 410 -.7713067974698896 -524 410 .4045998023110565 -538 410 1.4166695667307623 -539 410 .9757803991395547 -554 410 1.1366289890791719 -575 410 -.9366094124297751 -578 410 .3472172314646342 -581 410 .7733711520472971 -589 410 -.3358090168061272 -610 410 -.37217436846758684 -612 410 -1.6938090038701195 -623 410 .4860075083449252 -633 410 -1.3364517607240705 -655 410 -.022910244860127965 -672 410 -1.6280257938889684 -688 410 -.6182736297867208 -696 410 .6223634590263312 -697 410 .9348321702289905 -705 410 -.6644674498688925 -711 410 -.1504786665193437 -719 410 .21834604236611643 -734 410 .8354324876920193 -757 410 -.3029846249338748 -764 410 1.41553865997718 -775 410 -.4747939953710206 -782 410 -.08730704804908637 -784 410 -.8269729018412558 -815 410 -.5551399522663301 -820 410 -.5461257211132069 -825 410 -2.782125014027982 -838 410 .4645602053978917 -841 410 1.6465027827703358 -847 410 .5989692888546883 -849 410 1.644108689008038 -850 410 -.9832946083200146 -856 410 .7425252489113126 -864 410 -.3049005001777595 -874 410 -1.2117493159289874 -893 410 -.1292252514564901 -898 410 1.5445249893292687 -900 410 .19726537634180183 -904 410 .6503761422479448 -925 410 .6863730737852269 -927 410 .09072829303134425 -934 410 -.6533657273954073 -948 410 1.307987418321043 -961 410 -.8420481135496114 -974 410 1.1879005489209336 -984 410 .32638771741420075 -987 410 1.8865681516533384 -988 410 -.05921288257389251 -996 410 .04248463123881428 -997 410 -.8930344520659266 -3 411 .24553089636735823 -7 411 1.2434770478165689 -8 411 .24545908371735922 -18 411 -1.5699498491673913 -24 411 -.24125960533316823 -40 411 -.6591339957707898 -49 411 -1.8485877868478036 -55 411 .9097438314542791 -61 411 -.8876547187552624 -83 411 .8821012506686433 -86 411 -1.3922730631176667 -91 411 -.25848796041609445 -95 411 -.06603772064655898 -117 411 -.352823999370089 -125 411 -.9112250394899106 -127 411 -.9514073784510756 -140 411 -.30842231551450155 -145 411 .27435845112230106 -154 411 .7420679511059312 -171 411 1.1478863806948112 -173 411 -.4917756732535709 -182 411 -1.1328460231968116 -217 411 -.20015302456493564 -221 411 .7088462491799083 -232 411 -.0017211591137994697 -257 411 .5939997834642001 -260 411 .28887569871442176 -270 411 .9424773342213284 -289 411 .19440314814019288 -292 411 .06973432632531279 -297 411 -.8993753233297469 -305 411 .5208272951464665 -307 411 -.7065539616784436 -311 411 .007646855816359155 -323 411 .5883197429250785 -324 411 -2.5352411240528463 -325 411 -.1274854084803106 -326 411 -.7398060702048177 -343 411 -.24645862701286314 -354 411 .02322948423262168 -366 411 .006383076338962249 -367 411 -.9225757893889986 -382 411 .17868722013403068 -391 411 -.15187095574442766 -392 411 -.17502283403955357 -393 411 -.992045977847503 -399 411 -.39623509886960623 -403 411 .8052351615082538 -426 411 .027597331428287117 -435 411 -.7268155539038313 -453 411 -.3936602324700888 -469 411 .40065645434535313 -472 411 .10358559191944916 -473 411 .41975674975393384 -479 411 -.5283354150501849 -503 411 .1823250706554161 -508 411 .7984551545562462 -520 411 .3852723855954698 -529 411 .5642272911214347 -531 411 -1.2772429695505108 -561 411 .10464658392040868 -564 411 .9219665737986265 -571 411 .6112944251259842 -583 411 .6213225758671417 -592 411 .04769832162477545 -594 411 -.36423395425136484 -602 411 .9056364891008167 -610 411 .5182932434222429 -619 411 .602186569015615 -635 411 -.59670408762241 -637 411 1.7364934921445547 -664 411 -.5193697280941815 -672 411 .24880275232744137 -678 411 -1.2606719793665415 -682 411 -.8623073243673887 -684 411 -.9344460043032231 -687 411 -1.234752652222884 -698 411 1.096929425118398 -713 411 .33212140049604766 -714 411 .8152707709843633 -720 411 .033520857948489594 -731 411 -.5178144983135716 -732 411 1.2203063200080828 -766 411 .2849425570622691 -767 411 1.0242061412422867 -768 411 -.1338442673048264 -781 411 .7942547292244774 -790 411 -.12109225988200473 -856 411 -.9536904520010296 -877 411 .6664269341275572 -886 411 .7284093854652657 -889 411 -.6735210418400034 -905 411 1.8904213066979036 -919 411 -.11303055046593516 -920 411 -.32538212047954773 -923 411 -1.0048238122401763 -943 411 -1.4535528484543416 -949 411 .11963457459504945 -976 411 .5204010112614834 -979 411 .20764837746770248 -985 411 -.0213228322000506 -4 412 -.05479440554952718 -6 412 -.2461957175501296 -29 412 -1.0266817417007996 -30 412 .909261477983872 -34 412 -.08854483340583 -35 412 -.5745694647544222 -37 412 -.9637868465000758 -54 412 .7700434586032114 -55 412 -.48846190186779237 -60 412 -.13010973510166854 -64 412 1.4753761883938281 -66 412 .8213322808171337 -68 412 -.41074740956301226 -70 412 -.2345010907989148 -75 412 1.0760172560595764 -80 412 -.2927681011041436 -92 412 1.3115262499942024 -110 412 .30877169838291757 -120 412 .5664171157279316 -125 412 .38070947371248176 -165 412 1.594864299314824 -172 412 .24143164229985198 -177 412 -.15342283909418225 -182 412 1.2045975676672305 -183 412 1.344528629540602 -192 412 -.2948473521142465 -206 412 -.043164486841518385 -216 412 -.01964338838537638 -252 412 .47007171920187124 -280 412 -.2968488056265679 -302 412 -1.614205352493822 -309 412 -.37638595263279295 -313 412 .9452314610625229 -320 412 -.5139678775481414 -327 412 .8323711326327999 -337 412 -.10989761193348392 -344 412 .6412624451395172 -380 412 -.42472212092350065 -386 412 1.0859342598228487 -393 412 -.1757129135301867 -394 412 1.0708227484605612 -396 412 -.11755065234134834 -398 412 -.6915677812782819 -411 412 -1.0940742731153095 -418 412 -1.1820168115353022 -434 412 .5054535369216169 -452 412 1.0617239184474505 -459 412 .26741875255071634 -474 412 -1.3055963727431632 -475 412 .6036201386524279 -484 412 .03154224800440761 -511 412 -1.4933399824763718 -521 412 -.8512983884944202 -533 412 .5340800989767449 -549 412 .9815402594580238 -558 412 .6301067785250656 -561 412 .6999133290839709 -578 412 -.061893261261571936 -592 412 .2612418174673512 -595 412 -.34659648646252605 -602 412 -.97246126896799 -624 412 .550113832253426 -630 412 -.020003620445009404 -651 412 .5585944395274731 -657 412 .7871513525282648 -665 412 -.35591845486667906 -666 412 .3755349204223316 -671 412 -1.0133508000747362 -673 412 -1.5493172566709004 -676 412 -1.229327257526635 -686 412 -.4338661468095933 -694 412 .152088505469234 -703 412 -.1992045368269446 -706 412 -.9812381671057699 -708 412 -.6653411990456569 -732 412 .6046181258840371 -745 412 .38940168999217367 -748 412 -1.3925661615450562 -750 412 .13344976441201772 -755 412 -.6368851738978791 -779 412 .5894807601351392 -799 412 -.7019183149766852 -803 412 -1.5101957920803692 -805 412 1.2694321712446217 -813 412 .13165206503277932 -818 412 -.025753331655797032 -819 412 -.9554258323505789 -827 412 -1.2603260340615663 -859 412 -.8509795803801634 -865 412 .6277012452697056 -880 412 -.558087281216507 -896 412 -1.1621379677776114 -905 412 -1.109108739008783 -914 412 -1.158952310672289 -924 412 -.6036263140474342 -927 412 -.5852673337894889 -929 412 .4075401203904624 -936 412 .11465946635610962 -944 412 .27109594481919536 -946 412 .8033654982118531 -947 412 -1.0250390249521764 -961 412 -.055371395049389614 -979 412 -.23128679765043356 -980 412 .5040062088198307 -994 412 .0016533835870860825 -995 412 .6215517413031795 -7 413 .01667241284396241 -12 413 -1.2982215100960943 -24 413 -.07869188944604594 -27 413 .3754556363338805 -30 413 -1.2101357436851399 -56 413 .9139358167001409 -57 413 -.6679959509598052 -63 413 .4079187489739819 -66 413 .7404235674063966 -76 413 -.8386693402692783 -81 413 -.9370594583151444 -89 413 -.578364937521497 -100 413 1.148333650649068 -104 413 -.8819167359731644 -115 413 1.0146746438104153 -122 413 -.7875449159458641 -123 413 .01916985281844666 -125 413 -.37539566558295484 -132 413 -1.4720590662837063 -139 413 .8505221574994024 -162 413 -.7025406064588635 -170 413 -.31725392595296875 -175 413 -.1985314838622365 -197 413 -.45696958277619637 -210 413 -.4355672298071732 -216 413 -1.0391518382485705 -218 413 .6257436860422851 -220 413 -2.1664716090210825 -227 413 -2.6674765079975598 -251 413 .32621046719164354 -261 413 .9688332489116823 -265 413 .10261414489231868 -269 413 -1.7266870126192548 -273 413 1.3541316338571299 -294 413 -.30789142009044645 -304 413 1.8706388913753502 -317 413 -.3701888583077568 -333 413 -.7730533486496717 -334 413 .9068244073096772 -352 413 .008016696398377259 -356 413 .29609025287343455 -357 413 1.740107692806648 -366 413 .8323103839707165 -408 413 .05789295841328821 -419 413 .5739492545526494 -420 413 1.6694103793864157 -465 413 .2767175969316696 -478 413 .35015330947249235 -489 413 1.2875940833034643 -502 413 -.3470508850592892 -503 413 .17215788290897077 -511 413 .5813408979277276 -513 413 -.8618268294934844 -518 413 -.7279503882266332 -537 413 .24433177346502297 -597 413 .5698813097889471 -598 413 1.2911696782888156 -604 413 .2464836777253287 -606 413 -.6715929300916245 -630 413 2.7381619880163766 -636 413 .3685247204197343 -642 413 .4054710998693141 -649 413 -.054553517095230264 -660 413 .18461605813093063 -669 413 -.31300902037763656 -671 413 -.9510642915407044 -679 413 .3757164610298363 -702 413 .18918886050060763 -703 413 .500787140463599 -709 413 -.04120673003228373 -732 413 2.321942187104603 -752 413 -.30222246825358656 -760 413 1.4734668140428588 -768 413 .12243977213322665 -779 413 .6604825501400934 -787 413 -1.7264265623755286 -805 413 1.2274814437769876 -814 413 -.24274938385247052 -840 413 .1041878997178157 -848 413 1.0043796501089048 -862 413 .9249779872789079 -865 413 -1.3068975350355025 -869 413 .33867824400686247 -872 413 .08705886583809998 -878 413 -.07427112161081598 -894 413 -.778621736167835 -904 413 .5145028484877564 -923 413 -1.3279946374064928 -928 413 -.08362244871508925 -955 413 2.145499156075565 -959 413 -1.6016050695866202 -961 413 -.42140358898309715 -962 413 -2.3200009986253036 -963 413 1.5196991475021246 -966 413 -1.3112504741777449 -973 413 .9522417458331665 -2 414 -.7467889222204014 -8 414 -.6616816007466317 -10 414 1.7413477006335643 -11 414 -2.0087315765896054 -13 414 .44609863670357364 -18 414 -.6601583632870415 -46 414 1.2506516782489803 -65 414 -1.0117333875404897 -69 414 .7647691310240317 -72 414 -.4967808966919698 -82 414 -.6127309242778909 -84 414 -.504202238710684 -116 414 -.03807920650701567 -131 414 -1.0885584008184586 -134 414 .4717176804376633 -146 414 1.0367577112390194 -149 414 1.1802715520211489 -160 414 .3516693625926631 -168 414 -.627203491733141 -175 414 1.3862251188061776 -202 414 1.4262668771974134 -234 414 -1.1247665942151865 -251 414 .003405084152199145 -253 414 .7279034089214729 -260 414 -.05986126693845415 -299 414 .04370659570561445 -313 414 -.16184450940038186 -323 414 .2474299951501216 -330 414 -.08435729317571107 -335 414 .16791510040755964 -338 414 1.6576242840756499 -358 414 .3107364071693127 -417 414 -1.0836079739291358 -419 414 1.2590361036037867 -442 414 .9458992235184182 -445 414 .07907494678879312 -452 414 -.8906674704821007 -464 414 .23715741014038572 -466 414 -1.2563763638634382 -474 414 -1.4666359329698668 -479 414 1.0210390767033957 -486 414 -.2316882788678224 -487 414 1.486596218397646 -492 414 .7072349326053867 -505 414 -.5457171935718996 -509 414 .42903525736701226 -519 414 -1.5835497204234157 -526 414 1.1857307509980886 -555 414 .585588860413391 -556 414 -.3443841228199116 -560 414 -.15173864524031985 -575 414 -.24771201623552855 -583 414 -.28031863095681525 -601 414 -.9037148239028951 -609 414 .2966898747067225 -617 414 -.8852786867254181 -620 414 -.019457998478548656 -622 414 1.54413205322315 -629 414 -.2720547653782077 -657 414 -1.5792470489190673 -680 414 -.5694965190673114 -702 414 1.2633592684734114 -705 414 .5080853801733602 -711 414 -.02132399252041208 -712 414 1.3061290301838822 -716 414 .5684500882981808 -734 414 .6611483986283002 -739 414 -.05018359372113468 -742 414 -.05374068431500482 -772 414 .5240190741167418 -785 414 -.05761337124172207 -790 414 1.2088867066158158 -791 414 -.877517285916435 -804 414 .06590122368310132 -819 414 .6784646249075493 -829 414 -.9972942821559043 -851 414 .17978164408463737 -856 414 .462798792588714 -867 414 .15770422688934765 -874 414 .17401447686212707 -883 414 -.24043537235712698 -890 414 -.376190643880007 -901 414 -.9011640983905442 -910 414 -1.100936895254992 -923 414 .5454224490758983 -924 414 .7361904771582165 -929 414 1.5934796330731502 -931 414 .22704282200063475 -942 414 .49788993526703273 -950 414 -1.2641021083901962 -969 414 .8413912616509378 -971 414 .24138661030184666 -981 414 .26684754157551377 -995 414 -1.5093278746968632 -997 414 .4834182953684665 -8 415 -.9042148431760964 -11 415 -1.0426060669238815 -12 415 .4289737024551961 -21 415 .001551558927281399 -22 415 -.8076669880420941 -26 415 -.03796415954649555 -44 415 .6731647647393807 -70 415 -.18794542494388083 -79 415 .962883035638907 -83 415 -.3763850774842681 -89 415 .40390130539837993 -105 415 -.6798376924898686 -108 415 .4092738901591992 -111 415 .22639146704892005 -120 415 1.2352661200295771 -143 415 -.29009567405571335 -148 415 -.2667952937291861 -169 415 .7519151572778313 -171 415 1.4054813194437115 -185 415 -.5212989824377696 -200 415 1.0955408570234257 -206 415 -.3842267446042247 -212 415 -1.1844200005191388 -223 415 1.7643089569701047 -227 415 1.41454790349431 -233 415 -.876655596457386 -259 415 -.12851684604198638 -261 415 1.975669634441388 -320 415 -.49609701634969083 -340 415 1.16278361421578 -348 415 -.2244033831053925 -350 415 -.11171073371209689 -351 415 -.9025371232105486 -358 415 -1.002518955922347 -365 415 .5441169115861112 -371 415 .5525563796779773 -386 415 -.24966163877390868 -388 415 -.22514593528104263 -392 415 -.9578163822911734 -394 415 -.5696485625292985 -395 415 .4044355165510449 -403 415 -.5433784237791954 -406 415 -1.1530415473332105 -409 415 -3.531817918880307 -474 415 -.07458230029794558 -482 415 1.5308098600363291 -512 415 .654632025903807 -514 415 .47786541973194463 -524 415 -.6598435020961697 -528 415 .9678044175009138 -531 415 .020238952281485895 -547 415 -.2605889771331625 -549 415 1.1286525550215407 -563 415 .16148097853060578 -589 415 -.42009321295444596 -595 415 1.1958034480446722 -612 415 -.2552108591315812 -617 415 .8375681061715142 -620 415 .5045054937080387 -639 415 -1.3214651331277547 -651 415 .252280051934039 -656 415 1.177896099550531 -657 415 -.08235498210787222 -671 415 1.3084053963286444 -672 415 1.313960009808956 -673 415 -.3794170409506412 -681 415 .8453121408505838 -686 415 1.2944899506742644 -710 415 .7073372055534394 -712 415 1.5177826889285473 -714 415 1.1995445023717834 -750 415 -1.7914444851619709 -762 415 .9047468582812421 -767 415 1.4569303719920352 -784 415 -.5560412734043451 -785 415 1.7252889236155426 -792 415 -.13684390068857963 -796 415 .3512703535361683 -813 415 1.0970091803754338 -814 415 1.3573902569164 -822 415 -.20311856260214764 -828 415 .73758157930385 -829 415 -.05154716261429801 -834 415 .8570431448667237 -837 415 .03548608014045594 -852 415 1.7022727489943918 -857 415 .8858672461212447 -880 415 -.3707983934654288 -894 415 2.4359834097675166 -925 415 -.07759341940678756 -935 415 -1.3629969278408942 -950 415 -.8613594090174932 -959 415 .6325289803122673 -961 415 .8105970907417056 -967 415 -.9607397467128891 -973 415 -2.4040886019227443 -990 415 1.140287194757304 -1000 415 -2.041345075577116 -29 416 .05456707176766458 -30 416 -1.1488701528909115 -46 416 -1.3222610849520158 -48 416 .1754666669076002 -66 416 .24986584747566537 -80 416 -.07749253814640437 -82 416 .07007161795456651 -98 416 1.0710285057777889 -103 416 -.7234383474872702 -107 416 .9358090666728652 -128 416 -.8907549114710482 -143 416 .0282502717836568 -163 416 -1.0149967828561999 -250 416 .2739067192500133 -260 416 .49563863795499485 -294 416 -.5910299805746408 -301 416 -.7455221463841261 -303 416 1.3705586855285299 -312 416 -.3932162959381081 -317 416 -1.8644380969968237 -319 416 .5759433300241282 -321 416 -1.1202723593198256 -322 416 -1.906743208544595 -324 416 -2.4457088870445656 -337 416 -1.4037441671927644 -341 416 -.27751280802274964 -348 416 1.2283149878057045 -352 416 -.4725093129372695 -354 416 -1.795326655674928 -361 416 .5573304254879817 -365 416 .5449017185849411 -374 416 -2.060075986558483 -376 416 -.42920099258240885 -379 416 -1.363405579804195 -427 416 -.6861641717000099 -449 416 .37280602802134216 -450 416 .005240169964250134 -452 416 -2.294706233905671 -458 416 .6465498015392714 -484 416 -1.0679821961696074 -485 416 .16538192530567405 -490 416 -2.277952278095613 -491 416 -.21322520967819797 -507 416 .5053033941895234 -533 416 -.8088618086265794 -543 416 .049874726159884794 -554 416 -.18982024084958843 -555 416 -1.7410188014262147 -562 416 1.4496620823932482 -578 416 .6411033733696563 -590 416 1.8489562030735869 -592 416 1.1934650758082552 -649 416 -1.656091927277246 -650 416 -.47324236241151946 -671 416 1.2826344937756162 -691 416 -.04966430394951357 -707 416 -1.0816929321484519 -708 416 1.4566186547320665 -709 416 -.8138549292077227 -713 416 -.742187230789531 -726 416 .6119053008438063 -728 416 -2.0491300859323105 -732 416 1.2341246482419406 -741 416 1.3180089930694094 -742 416 1.524633625412497 -750 416 .19420085422171315 -767 416 1.5097064264727367 -783 416 .32134140072916123 -784 416 1.3244755981951333 -796 416 2.692116893426039 -797 416 .4145579041103519 -803 416 1.1148470840739617 -812 416 -.8788926843471719 -817 416 -.8188449527607399 -834 416 .1416187589491541 -843 416 -.5984774083715847 -845 416 -1.2217701003689279 -857 416 -1.4724025474816813 -863 416 -1.2160376428881783 -866 416 .5830594359668878 -868 416 -.8512928653663707 -878 416 -1.5341424338167364 -884 416 .3191119328986558 -886 416 .8634871065324878 -888 416 -.11501891284136634 -890 416 -1.30221361989194 -906 416 1.9402549117430827 -910 416 .268988855559501 -914 416 1.332673635268589 -926 416 -1.7170937865980547 -928 416 -1.4774153568933637 -934 416 -1.038107840127244 -935 416 -1.8923226300251341 -947 416 -.5066973115614891 -959 416 .8959533218995156 -960 416 1.6015086785734516 -964 416 -1.5928229261618154 -967 416 -.4326940859922258 -981 416 .2421329364520798 -998 416 .9219525718546104 -29 417 -1.1101353513246504 -70 417 1.0483033670619581 -91 417 .9432816111978155 -95 417 1.8834788322406875 -97 417 -1.3482313125728809 -109 417 -.27219488204647546 -114 417 -.3727822812310954 -126 417 1.4102192357744427 -132 417 -.8256976967140558 -145 417 .519138090586068 -174 417 -.7863252651991631 -213 417 -.9443586530993873 -225 417 .39964290747396775 -228 417 -2.2488102897183566 -230 417 1.6601133258346523 -234 417 .20974302218002328 -240 417 -1.3116604201048032 -256 417 -1.678164197332972 -260 417 1.1893997163256913 -262 417 -1.8754289148227994 -269 417 -1.1383418623096044 -279 417 1.4077067102222371 -285 417 -.6482248633776561 -320 417 .036591089322227335 -345 417 .5181899131660209 -351 417 -.5433323309044844 -352 417 -1.7972835630174542 -380 417 -.19066918325749438 -388 417 -.9150304739163286 -391 417 .827930316866899 -409 417 -2.5576758960744668 -424 417 -.7414717919789389 -425 417 -.3405778160429613 -431 417 1.431493133493246 -433 417 .4696126432959358 -451 417 -.7413776715218929 -456 417 .11917081204840199 -469 417 .15969680704882575 -478 417 -2.336136365106221 -480 417 -.6710076715111855 -494 417 1.6462110296070986 -497 417 .8961189729816629 -512 417 .20362553246971715 -515 417 -.44860025165962847 -524 417 -1.2234799668716858 -527 417 2.029435279493876 -533 417 .7012536596095862 -536 417 1.7408100347905398 -540 417 -.972796577843455 -541 417 1.6503445635176752 -545 417 .7579321601736655 -553 417 -.2504811684867742 -568 417 .5629376412559745 -592 417 -.3265664005467434 -602 417 .25493379192489 -613 417 .7273733055297721 -614 417 .5093625442885418 -615 417 .7688424403809777 -627 417 -1.6981448211594448 -644 417 1.73361008107496 -649 417 .8217040096404159 -652 417 1.2367254110807464 -654 417 -2.297773700582737 -656 417 -.5054716762738761 -659 417 .32432980819931945 -686 417 .31676639053304934 -694 417 -1.0099108333445337 -700 417 .5392163997596806 -715 417 1.3300724559166415 -729 417 .3321972596624158 -737 417 -1.4135481880624097 -744 417 -.8415532212053581 -748 417 -.5133889366734334 -814 417 .714245683541612 -816 417 -.46476146862198486 -831 417 -.1869405194168629 -841 417 .17838743582077535 -865 417 .4766247663607467 -874 417 1.8633467904518675 -885 417 1.0114050746329335 -893 417 .12543072044345524 -899 417 .34480150195807224 -915 417 .29183333428412267 -929 417 1.686922129989433 -931 417 .594007225858197 -942 417 .654357224690763 -960 417 -2.0558420321956596 -961 417 .9895270014146477 -962 417 .715138750638593 -968 417 -1.7062486855176526 -971 417 -.32420303817191115 -979 417 -1.03976411341615 -987 417 -.009538426515098244 -993 417 1.0315161903516743 -9 418 -.610635977079367 -16 418 .27156971746511965 -26 418 -.35313708117650866 -42 418 .45984396493057234 -43 418 -.03585305078950832 -58 418 -.6130113821044298 -60 418 .19391104923007307 -77 418 1.155205457911415 -98 418 .2202235184510168 -99 418 .2904765301904925 -106 418 -.0980713142841442 -115 418 1.1463766842260372 -128 418 .4129003600063124 -142 418 1.0929186397158803 -154 418 -1.0468964831666066 -155 418 -.21624120475370365 -161 418 .6135442344454041 -171 418 -1.5018112551797782 -176 418 -.2189851980975532 -179 418 -.2821555973441028 -186 418 1.794678913881209 -198 418 -.6189185445229684 -200 418 1.3402268898792933 -209 418 .9191414219484091 -212 418 .6552141287997629 -223 418 -.3007416302346775 -228 418 .4763431663066837 -244 418 1.7829988773449066 -251 418 -.09684191038666976 -257 418 -.3414970093242968 -261 418 .862098319085043 -276 418 .9810743848550902 -281 418 .5334147598601412 -293 418 1.0346114937938329 -322 418 -.19326104916850173 -332 418 -.21047208458264366 -334 418 1.7023786365843014 -348 418 -.5011546927018515 -363 418 1.1024275075060461 -364 418 -.2847146286557154 -376 418 1.555315035994636 -377 418 .4750584665529637 -389 418 -.24998884251497935 -390 418 .3189388109783524 -392 418 .8875591327363282 -400 418 1.0778833748793024 -405 418 -.7721291148683476 -407 418 1.3303923399433566 -422 418 1.3198597457211083 -432 418 .7154511573067087 -446 418 .6712007388767751 -450 418 -1.4817719685121193 -469 418 .2876468153346159 -472 418 1.0198760310921395 -476 418 -.5852203579835831 -509 418 -.5729062640557113 -533 418 .4418440298814075 -543 418 1.1419106248528308 -564 418 -1.509171347562885 -578 418 -.3783937727087565 -587 418 .5476106271268023 -590 418 .17464566527069245 -593 418 -.9932576502493146 -609 418 -1.3946115163961164 -625 418 1.1536453914947018 -635 418 -1.1706690166536993 -636 418 .01295427248098073 -641 418 .29007390688780865 -643 418 .6641836913748359 -671 418 -1.5850595453856529 -684 418 -.12854357545857972 -686 418 -.917425829958256 -708 418 -.5941873247974983 -709 418 -.22982365265803953 -718 418 .5146603895812968 -721 418 .3414493135254112 -722 418 -2.1095714733758393 -731 418 -.5384163476404584 -736 418 1.7669049263140104 -739 418 .39368145194017273 -742 418 -.06539289219336285 -763 418 .06661339823240356 -764 418 -.7332026963558241 -767 418 .15747565877064834 -768 418 -.4065503544009428 -769 418 .9148964353569361 -774 418 .24067192780354799 -775 418 .343863111031338 -799 418 -1.421624428062177 -804 418 -.10045072770759982 -808 418 1.1787946265515084 -809 418 2.1031532218607016 -826 418 .9697982903223179 -843 418 .06452912457367047 -845 418 .7347692412179584 -847 418 -1.133291237255369 -849 418 .9508957298627532 -881 418 -.4340609668582276 -902 418 -.39741029572470105 -903 418 1.0513652718112039 -913 418 -.09519554083081194 -924 418 -1.092256561841919 -926 418 -.5378415030137823 -946 418 .3970780663677763 -947 418 .07312941821248352 -952 418 -1.2444323255859646 -965 418 -.18710703164879594 -968 418 1.5857504412554158 -974 418 1.8910231774304398 -985 418 -.5173430250737037 -8 419 .6289857877318276 -14 419 -.38541706391821107 -22 419 .08411154255051914 -27 419 -3.4483253078611207 -30 419 -1.828932439753692 -39 419 -.881634163925089 -44 419 -2.14379898777852 -47 419 1.2038530828477791 -52 419 -.851875122072946 -53 419 -1.1099287641171964 -61 419 1.0496296392214037 -69 419 1.5487921684259107 -78 419 .8046242926202966 -115 419 -.49821090647466165 -120 419 -.44101133600142095 -136 419 -.32992545662236195 -137 419 .4138401624461642 -146 419 -1.260070014465308 -150 419 .3365605934750092 -154 419 .7023294680917965 -207 419 1.0772319342437044 -215 419 -.4563669326564875 -229 419 .3212174383857488 -235 419 -1.2919943086911176 -242 419 1.8132394051763157 -263 419 -1.9252086656474345 -269 419 -1.1774017393553486 -273 419 .44045617790829694 -276 419 -1.4124481312825583 -283 419 -.9088867000204433 -287 419 .5706091486819822 -299 419 1.762996474079485 -302 419 2.161714957709039 -303 419 1.2689807119776804 -309 419 -1.6039978481345158 -311 419 -.059691187105135074 -317 419 .3132323441862307 -327 419 -.6177637500002457 -340 419 -2.250527367111953 -348 419 .8310829529691492 -369 419 -1.834791727567798 -374 419 -2.298806119368918 -404 419 1.5377881964377342 -410 419 -.21600891814621506 -411 419 -.9273939328347978 -414 419 -.6858932073712205 -420 419 1.1816656046325338 -423 419 .16755181344210907 -424 419 -.14949013734461525 -426 419 -.0752516413641934 -433 419 -.14096797979890757 -458 419 .4753487403166962 -470 419 1.5233198792432876 -474 419 -.36798118900485843 -489 419 .15429814432174294 -516 419 -.014883192578383796 -517 419 -.548174331514227 -519 419 -2.4264429399127168 -520 419 1.7576531579746084 -533 419 -.10885188604933463 -552 419 1.4148079809019762 -562 419 1.0847423710702448 -563 419 -.5520701943186417 -569 419 -.7634413917414542 -583 419 .19687287750169663 -590 419 .6382424282791758 -591 419 -.5088719073506457 -606 419 -.23835064313787727 -619 419 -1.3865680816446473 -623 419 -.43742082960380524 -624 419 1.0086704915726061 -647 419 .4449071805058248 -659 419 .06215655275648546 -663 419 -.39588686473259793 -679 419 .6783188333534806 -681 419 .8792615696309896 -692 419 1.8211190606235803 -694 419 1.0078868521096305 -716 419 .41807546203052615 -739 419 .5849254175458287 -761 419 -.2676290039025727 -775 419 -1.5580640315349024 -776 419 -.4937803212857775 -806 419 1.0071018633473645 -823 419 -.0854861510040196 -825 419 -1.6980806242202875 -836 419 .776959822798777 -843 419 2.3556512937240526 -844 419 -1.3475092019406278 -846 419 -.2935138980517862 -852 419 .6380243304451146 -879 419 .30842319569894777 -884 419 -.051082468803877054 -886 419 -1.0498768435569517 -890 419 -.7990584118672015 -891 419 -.6430665682879817 -895 419 .3378183216639344 -913 419 -.6898732591303419 -942 419 -1.2343247256263454 -963 419 1.1992881145569152 -965 419 1.0490506321960047 -978 419 1.0527818096320591 -6 420 -.7068444641787003 -10 420 .04442038316022101 -14 420 .8028795883492634 -15 420 -.8872570376202369 -19 420 -.20358436125124096 -20 420 .6076876878265685 -22 420 1.5927674047651792 -26 420 .17351137753334855 -40 420 .6543237065568375 -54 420 .26473002412765734 -60 420 .6535902220804581 -65 420 .4719310128448493 -72 420 -.25469496174072564 -99 420 -.11489950601389104 -103 420 -.19617158238977617 -116 420 .31917852180541756 -121 420 .37010694809702255 -127 420 -.7421465626247685 -132 420 .5135210671223026 -136 420 .8905431949380578 -158 420 -1.2126831991152833 -161 420 .21180040491060897 -173 420 -.51656348088517 -179 420 .02216861991524391 -183 420 -.8542035675282045 -191 420 .7898490327106914 -192 420 .359742635910136 -201 420 -.25480703172983693 -212 420 -.1942729987471731 -222 420 .4973122953249693 -224 420 -.49188561863756625 -230 420 .11031998679156198 -231 420 .3835084539483674 -242 420 .06854052001850856 -261 420 .18615941050301876 -264 420 -1.1238309245902145 -274 420 .034045329648297984 -289 420 -.5209231129812041 -292 420 .38406009707871097 -296 420 .08224788337313674 -314 420 -.004630091541664945 -325 420 .5172828340567043 -330 420 -.45358753043266103 -392 420 -.49360572799676444 -393 420 .06985114213668478 -409 420 -1.2082934732192707 -410 420 .7829621126439672 -411 420 .48636949107975364 -413 420 .035508670009396004 -467 420 .31724421729635444 -475 420 -.050045648210685884 -476 420 .47077025785451426 -489 420 -.474012416802874 -505 420 -.8334279442439613 -506 420 .9860402064266545 -531 420 -.4708264424628408 -534 420 -1.4042724188120543 -547 420 .5126873379247036 -564 420 .7122571205118988 -580 420 .41603382819157697 -597 420 -.39162275438126476 -609 420 .4948246402823713 -619 420 1.1727890590622256 -623 420 -.3363726005467077 -632 420 -.6905633672329119 -659 420 -1.0739819945525926 -685 420 -.16555586029080988 -688 420 -.5563989963719628 -692 420 -1.5828944228168043 -714 420 1.008322514964117 -736 420 -1.3292564291487876 -740 420 .6847513696462079 -758 420 -.9764277020833901 -770 420 -.35714047253202574 -774 420 .19664109542694758 -780 420 -.077456319426221 -785 420 .04730549170111211 -787 420 1.4305724699390154 -792 420 .250114560936885 -825 420 -.1558609596179546 -841 420 -.4907016970004852 -851 420 -.01979894526837425 -858 420 -.8445311803211363 -861 420 -.38857973336441265 -885 420 -.5320870926107937 -898 420 .6669995027517528 -905 420 1.129475247921158 -906 420 .38074793586257993 -928 420 .09171648178421918 -964 420 -1.5344361086597547 -969 420 .21184837198476847 -973 420 -.7845035901381727 -980 420 -1.0165386914210939 -992 420 1.297006112648804 -10 421 1.0407197101842547 -12 421 -1.6226237876185485 -15 421 -1.1071794263839632 -24 421 -.5683063965253115 -30 421 -.4228176545382213 -59 421 1.7241314969668946 -65 421 .17526100785117382 -84 421 -.6805677800484766 -91 421 -.8974749908964421 -94 421 -.47762301561020704 -102 421 .9269786581318463 -125 421 .5137928452691284 -139 421 .9963556755052317 -158 421 -.747912556810336 -162 421 -.6970458122067099 -168 421 .16007955399072724 -172 421 -.9731765661118579 -189 421 .007981748712715647 -201 421 1.7218858250851279 -212 421 1.251825450344053 -213 421 -.6049793287909926 -218 421 1.2478077373514807 -220 421 -.5164466058318792 -225 421 1.6234567810274485 -229 421 .5232827610918777 -237 421 .762963877517087 -238 421 -.3790419919599789 -246 421 -.1217745152539155 -250 421 -.5479728673680289 -255 421 -.8602280272478878 -260 421 -.6287173611182207 -272 421 -2.195945085831808 -328 421 .20125053713874194 -334 421 1.412843769902043 -338 421 1.3825352733855347 -362 421 .7582896498653637 -371 421 -.1954161941739163 -396 421 -.7342874362497851 -398 421 .9531784641639656 -415 421 .34810800221503313 -419 421 -.023922195175771023 -436 421 -1.3382167362568729 -446 421 -1.0303496537829158 -455 421 .6236097330023173 -467 421 .4597684513462186 -473 421 .20826037796690453 -489 421 .28256934607014766 -500 421 .722064172986207 -506 421 -.5291069011437356 -511 421 .8739688793358301 -512 421 -.6019553758069137 -515 421 -.8232577489190331 -530 421 1.5533541769326806 -533 421 -.2704043666319527 -541 421 1.0904395423106188 -551 421 1.0016653092807832 -561 421 1.1950037941144565 -567 421 -.04354104454839974 -578 421 -.21487319450465198 -587 421 .2945501264979083 -605 421 1.1164022188958884 -608 421 .8847080182305862 -625 421 -2.149934542917099 -643 421 -.5048173587175426 -653 421 .5298056082546797 -663 421 -.7971578887573617 -670 421 .263837151313949 -672 421 -.45192871135902957 -674 421 .3750423447168346 -694 421 -.6496204997049676 -704 421 -.2913409272619776 -732 421 1.4467332998590459 -736 421 -.011791553855845543 -741 421 -.515970171302143 -758 421 .2426325092593749 -770 421 1.6618999021320593 -777 421 -1.047514009235723 -793 421 -1.8236525037365845 -805 421 -.2666760850805115 -813 421 .0024429724030879396 -825 421 1.0567984794663414 -831 421 -.6928265900979225 -835 421 -.580101067755922 -839 421 -.5947871014032081 -851 421 -1.0158516446050343 -855 421 .9033425836806951 -860 421 1.165757310602863 -877 421 -.3658853408000559 -941 421 -1.455284644872161 -942 421 .22593232347463732 -945 421 -1.434653783141727 -962 421 -1.7111441860988028 -970 421 -.9630259131388609 -980 421 -.6951084732368233 -982 421 -.7290877862772329 -7 422 -.8819190604923687 -15 422 .046120907666405815 -22 422 -.3786652444318085 -29 422 -.9316905773747904 -41 422 1.2546547210149985 -46 422 .14526390526715632 -49 422 -1.0075669116744699 -70 422 .1432951042021923 -77 422 -1.6761434540713016 -79 422 1.5743876919923983 -84 422 .6005232914061541 -102 422 -1.9305897558929537 -107 422 -.7650597104670668 -108 422 -.32045170015091856 -109 422 .7327125746805913 -118 422 .6101298911271957 -122 422 .6569348197478377 -126 422 -.1205393726867021 -129 422 -.4164562443003498 -148 422 .5709141969712819 -168 422 -.7893867182220843 -176 422 -.7895943109329394 -180 422 -.5709873749307043 -193 422 .4529968554032578 -204 422 .03162438036355603 -213 422 .2876903385706334 -214 422 .5734365404964386 -228 422 -.2609617927762427 -234 422 -1.5534484150840047 -256 422 .19413390304986894 -274 422 -.16136220085435876 -283 422 -.5211991805201205 -286 422 -.4675637384428417 -292 422 .8058127797860535 -311 422 .2096082029729533 -313 422 .2563074038806696 -316 422 .5716477800478911 -340 422 -.6042750814911115 -342 422 -.6067266575463605 -357 422 .37469028742989935 -363 422 -.1677514560805186 -367 422 -.327793714660048 -368 422 2.3017311584712306 -369 422 -.477659647664201 -373 422 1.9582250321289645 -375 422 -.22854327065814584 -390 422 .18459319560818663 -395 422 -.026595057435967323 -402 422 .6892340506584467 -411 422 1.4716413573412819 -426 422 -.6388103151281742 -428 422 -.6915792124119727 -448 422 -.4341822415946939 -470 422 -1.1855714803506388 -471 422 .3559196375642963 -477 422 -.6036001933300088 -483 422 -.45574573173908245 -488 422 -.4243036621089211 -496 422 -.3027397547783561 -505 422 -1.3119900870224068 -510 422 1.371166884748415 -511 422 .08293805748750799 -515 422 -.5552183126426872 -528 422 .04255542384836257 -529 422 -.30052496413245644 -532 422 .1649483395267049 -547 422 .047960262817942925 -557 422 -1.8032266794914533 -563 422 -.6345476328784269 -565 422 -.5040234520825919 -578 422 .9512064837385488 -579 422 -.37785896461083895 -594 422 -.9859514413398326 -601 422 -.037507525171327716 -619 422 .45873490877421896 -631 422 .020856727305647207 -635 422 -.22554547210273926 -647 422 -.5037117675459994 -651 422 -.32026341470049136 -661 422 -.37996797058047393 -686 422 1.1059286693935122 -699 422 .7803012009372449 -707 422 .20880997172390559 -708 422 -.08479614004875258 -713 422 1.275244504145352 -720 422 .023960774267344664 -742 422 -1.3108457169505494 -746 422 .22697466454068588 -748 422 -1.716449080843636 -749 422 -1.503669337809908 -754 422 -.7408169721763436 -755 422 .23664928586601203 -758 422 -.7990346125323535 -768 422 .3892657412086733 -778 422 1.3786063976878609 -783 422 1.5439063020263033 -785 422 -.9261464408788587 -803 422 -.5721760722691674 -833 422 -.34639568753399275 -837 422 .4019894748748495 -847 422 1.7769325158012597 -868 422 .19265356820040708 -882 422 .581524574617541 -884 422 1.056016491373066 -885 422 .06870962666797487 -890 422 -1.148863647548373 -897 422 -.6403940924523626 -899 422 -.40517946367243896 -904 422 .18097677777400925 -918 422 -.8716093507242986 -925 422 .06681936115105866 -933 422 -.6701504899723759 -944 422 1.0204465718865596 -950 422 -.28646779811481327 -953 422 .7838964676711903 -959 422 1.3661770673142741 -963 422 -1.5245044021413339 -972 422 .12560976955817904 -980 422 .2381762304467122 -983 422 -2.337414289418639 -989 422 .6248778159343571 -991 422 -1.0761080193525612 -4 423 1.2113586952165976 -12 423 -.12248934660460399 -17 423 1.240733630609392 -24 423 1.220406869313842 -49 423 -.06383246568745754 -55 423 1.2396478768688757 -56 423 -1.0031483309012537 -60 423 .5047155448941767 -70 423 -.6445656043868095 -73 423 .7619746194029661 -75 423 -.7911844904261817 -78 423 .7554553001182255 -82 423 .7700371443847963 -92 423 1.8754570402527027 -97 423 -3.092027623260517 -101 423 -.9102003244138084 -107 423 -.7155185963982981 -131 423 1.2937100494023612 -133 423 -1.3308029094678586 -135 423 .05364787549871608 -139 423 1.7797532535990894 -187 423 2.2750879085560114 -199 423 .7154773217631575 -201 423 -1.153071824511358 -212 423 1.6473998430160954 -213 423 .020320391857990686 -215 423 .4131044220383578 -244 423 -2.070373468825003 -260 423 1.2973227863277605 -277 423 -.02413453560846307 -283 423 .7833333824801807 -308 423 1.6950363025307331 -310 423 .5523810565686216 -315 423 -2.057908599747282 -317 423 -1.1442122138933546 -345 423 .02611263736152193 -350 423 -.031030254558815876 -354 423 .8861993033545217 -355 423 -1.0675218472994916 -378 423 1.9241782188921115 -381 423 -.12034297855981424 -382 423 -.0916665855123909 -395 423 -.05355550836966953 -409 423 -.5277570933121543 -410 423 -.4549015134720142 -411 423 -.19024212797774223 -416 423 .3919413349221271 -431 423 .24402088561758226 -432 423 .971746792334038 -440 423 2.0592275099678883 -472 423 .006250940642248837 -476 423 -1.200288195841384 -493 423 -3.103101625585853 -499 423 1.4206596623342913 -517 423 .0035509212697435594 -548 423 1.1272431476502065 -577 423 .2569057467711107 -588 423 2.0337165632487304 -590 423 -.08268220919424778 -591 423 1.6043904021813813 -599 423 -.33772060625924116 -603 423 1.835040889470529 -614 423 1.410684909801023 -631 423 -.5135339398326415 -634 423 .26537901652844903 -636 423 1.0115974065702522 -637 423 -1.223769662067845 -658 423 1.3007709954153894 -676 423 -.3915527058581084 -689 423 -1.646897094352315 -693 423 -.1293948426739564 -702 423 -.27060658467771415 -711 423 .08227924082565236 -713 423 -.9037348105467923 -724 423 -.12336831910441481 -725 423 .20763543109364327 -751 423 -.9358584567404867 -765 423 1.3375882460670296 -777 423 .6482462715197784 -778 423 -1.406785590576452 -782 423 .7068780276662524 -785 423 -.762073439654955 -800 423 -.9170813304190394 -806 423 -.45859066669421583 -810 423 -.5221329205126735 -815 423 -.8968474523092451 -818 423 -.2833890997046351 -819 423 -1.432384953401829 -837 423 -2.2824987931673686 -839 423 -.3462867069091103 -848 423 .165756905013246 -858 423 -.7813472436301111 -860 423 -.5348016959208359 -872 423 -.48197536826296167 -882 423 -.5243456517186443 -918 423 -.288490622193295 -969 423 -.4671472125584344 -977 423 -.5634816712204384 -979 423 -1.135471406910376 -981 423 1.0663053523401664 -992 423 -1.396731883054624 -993 423 -1.8487651047159002 -1000 423 1.65961899941913 -28 424 -.7620606676487109 -41 424 1.5860703773943163 -42 424 -.8851808297637113 -48 424 -1.0716042569747146 -70 424 .4403461802355022 -77 424 -.7013795453895069 -94 424 .8761917063475686 -98 424 -.2914444083119101 -108 424 -.41857662306326515 -125 424 -.6012352177979463 -127 424 -.49601210623014247 -130 424 -.36993513468285155 -137 424 .26501233879374325 -149 424 .11142375536658866 -152 424 -.29651454525451043 -161 424 -.7112198285192979 -167 424 1.1848915073785047 -198 424 1.527743340742425 -202 424 .7290174858927213 -203 424 -1.2293977516054542 -233 424 -.6099428937858493 -245 424 .22975798984356802 -255 424 .831751000381884 -258 424 -.6940029585635565 -260 424 -.46686671799443236 -263 424 -.08935187389450983 -302 424 .6034440977870892 -315 424 -1.7581771315014 -349 424 -.6255162996253782 -360 424 -.9709251778430183 -361 424 -.8177230986948796 -362 424 -.31512139758730434 -388 424 .662759524679192 -392 424 .7816791945463094 -399 424 .06650470646806844 -418 424 .9307435629193471 -423 424 .09583730180484948 -434 424 -.17634477994377265 -444 424 -.8367427851419349 -447 424 .47970666063115125 -462 424 .07420840099220878 -486 424 1.9478395118665779 -490 424 -.010852454891130854 -502 424 .2913183049816031 -507 424 -1.6367478172088472 -517 424 .3698708417657073 -521 424 2.067793177543423 -566 424 -.2354272542056772 -583 424 -1.145897803358041 -592 424 -1.7039352559739507 -606 424 .25673402709514126 -613 424 .20842658493645766 -637 424 3.0626305051913216 -657 424 -.26897386050523203 -662 424 1.0396120644355298 -664 424 -.3443714413507362 -677 424 -.7572111359018854 -693 424 -.7512056210503856 -724 424 -.5403063884021214 -726 424 .3392793781907453 -731 424 .031697995276411844 -736 424 .4112658138035949 -748 424 1.2188062661479164 -749 424 -.6613103952962192 -755 424 3.213019280368729 -756 424 -.10795425212194693 -761 424 .5821442189634904 -763 424 .025733835674687407 -771 424 -.3822349236028492 -788 424 1.0857605692654768 -807 424 -1.2398332673903925 -824 424 .4135468670599356 -830 424 -.008945022820609265 -834 424 -.7790494407347869 -870 424 .9171929292582124 -883 424 -.3264667939117685 -898 424 -1.3985293648984367 -908 424 .41551412843783764 -917 424 -.10605209810223232 -920 424 -.006347275507427377 -928 424 -.6401818029160018 -930 424 -.39899774334085125 -947 424 -.8319145600533319 -961 424 -.5392682570266836 -965 424 -.4618315946796952 -982 424 .13881291971922594 -998 424 -.8898774016400587 -5 425 .7285773422628483 -11 425 .7383917651705905 -42 425 -.13100648818315377 -45 425 -.005928420451300709 -70 425 -.569408613994048 -72 425 -.6954778560295621 -74 425 -1.7392954839192176 -82 425 -.5642880936138713 -90 425 .10195848472782415 -99 425 .031875259696047105 -110 425 -.007901858967602215 -126 425 -1.02389696569131 -132 425 .22019734950738273 -137 425 .5297070702276047 -144 425 -.0242695319277611 -151 425 .8624636058783273 -156 425 -.27858358553813567 -158 425 -1.5449475560789048 -161 425 -.215227789405816 -174 425 -.15585960043525904 -177 425 -.2338124255385893 -178 425 -1.2887647965109341 -186 425 .04543789968658317 -202 425 .8503816947781921 -213 425 .41795040752983625 -214 425 .6341234679329824 -235 425 -.26319694829720325 -238 425 .5602186308611544 -251 425 .8728036703377678 -266 425 .6985587558863069 -277 425 -.12537027793368843 -278 425 -.20415686806374095 -292 425 .4300093393891698 -301 425 -.49872803749000544 -303 425 .5934068115748201 -307 425 -.2509453303114081 -319 425 .35785295328592104 -359 425 -.15330266802316006 -365 425 .37545357889673686 -371 425 .07147198859925027 -382 425 -.39440126215589927 -388 425 -.1388752532606213 -391 425 -.7804992164182399 -394 425 .1813111701333372 -395 425 -.5710057915006044 -409 425 1.57953696251596 -431 425 -.06895651676182643 -439 425 .4644995815666118 -440 425 .34692263205210855 -450 425 .28382884255121255 -465 425 -1.2557431250324205 -491 425 -.07005642398155593 -501 425 .5797445175203748 -506 425 .5592964304127889 -536 425 -.37665096813868437 -546 425 -.3628000897711513 -561 425 .5931221862789391 -563 425 -.6251058611202982 -569 425 .026546424016109627 -577 425 -1.1204904038195371 -578 425 .31642110445299476 -586 425 -.2520037377619976 -588 425 .41084554110752936 -591 425 .3412993291342821 -596 425 -.6628546068822379 -610 425 1.2339754927817685 -618 425 .3021800512634595 -628 425 .37650904484893477 -657 425 -.35297154196131986 -678 425 -.15122018542484822 -694 425 .46209173256123115 -706 425 -1.0264354184756808 -717 425 -1.2973333657142008 -729 425 -.16273337373485564 -745 425 .13354316355479945 -751 425 .4902458966835343 -753 425 .3444055839028783 -770 425 .10888719506379874 -804 425 -.4838889036484002 -806 425 .35803475348259994 -809 425 .09216577205972226 -825 425 .5068888679675416 -850 425 .30267065546136396 -851 425 -1.1527887543592732 -853 425 -.7217009796321611 -861 425 .9134601991452952 -864 425 .0566513421191434 -865 425 -.09144231360015864 -869 425 -2.1820306058348407 -872 425 -.512974788269575 -873 425 -.6333877594914228 -895 425 -.809970538661944 -915 425 .13249916764091613 -925 425 .5561056629403893 -940 425 -.4992720889844914 -947 425 -.08625061674555562 -950 425 .6738586975959657 -952 425 .3429530115736027 -953 425 .41932600929331115 -974 425 .6807779859780005 -975 425 -.340053802467113 -976 425 .48764789260740987 -982 425 .2395600007628508 -990 425 -.0977191185839766 -999 425 -.497624381740979 -13 426 .7486652837674731 -23 426 1.2389727172665097 -43 426 -2.070815180922432 -49 426 .5138995077796401 -52 426 -1.5785646425240272 -73 426 .9642535500628173 -74 426 -1.2172982259278562 -76 426 .2897886764579767 -82 426 -.25047356435829377 -84 426 -.006708022482314779 -91 426 -.9346308361619208 -109 426 -1.1805518219943765 -114 426 -.2991415611137017 -119 426 1.5975065403676563 -122 426 1.0127819297081155 -133 426 .23952468753957878 -140 426 2.6114754942383396 -169 426 -1.745229811587925 -196 426 -1.9574891774890348 -200 426 .4148786045853685 -206 426 1.1840073642817583 -236 426 .366414733458188 -239 426 -.6270715839506353 -244 426 -.09143290999922327 -257 426 .20808797173229587 -277 426 .39007355462476945 -289 426 -1.2745319835550724 -294 426 .5317566907698289 -301 426 -1.1828192647098952 -319 426 -.6451103999688098 -320 426 -.08093216133896292 -323 426 -1.2196097037328262 -335 426 1.7646751999722727 -358 426 1.3619508864479961 -364 426 -.062211771065561 -366 426 2.0776341402674854 -383 426 -1.554575074416784 -395 426 1.1940274708054568 -419 426 -1.6381885567074448 -421 426 2.204013733888992 -452 426 -.9135192984031032 -453 426 -1.3316859969243784 -462 426 .10838797431491558 -469 426 .1258485173060665 -477 426 1.592319927141816 -480 426 -1.3704689599166147 -481 426 .27441933459902335 -498 426 -.6422176944138991 -508 426 .16489312728711433 -509 426 .6840411642245074 -510 426 -.1363976241236754 -516 426 -2.114381809555893 -526 426 -1.28044254074794 -527 426 -.40090059821955953 -528 426 -.35134628481938573 -532 426 2.110197216176099 -536 426 1.750120048061294 -541 426 .9898547110591118 -546 426 .817798050576493 -556 426 .7581577648183375 -576 426 -.03953521047293207 -582 426 -.19797460472306996 -586 426 -.8778567857601742 -600 426 .07807760267545096 -609 426 -.9908627879447613 -626 426 .24015697068702577 -636 426 -.21310424041440718 -644 426 2.305208122923286 -652 426 .8605494475818607 -656 426 -2.866359261954866 -658 426 .8764594606695041 -665 426 1.5827113105138817 -670 426 -.685178757148956 -677 426 -1.9835103948848185 -682 426 -.4982616650171625 -684 426 .9832853971692128 -689 426 -.6731863976568957 -690 426 .2133268350427923 -727 426 .014734891342004008 -745 426 -2.026201395624085 -749 426 -.37345350331152005 -761 426 .4185402404456872 -773 426 2.248699250054563 -776 426 .1241717703228086 -810 426 -1.9117974163585256 -830 426 -.9379434820871174 -835 426 -1.2017816356908053 -861 426 .07256401505104434 -878 426 -.2822935931761066 -900 426 .3863429118481444 -908 426 2.072489594318465 -911 426 -2.1365395287713276 -918 426 .07352361623707211 -930 426 1.3815425716140275 -934 426 .625249684405604 -935 426 .26243607258855184 -944 426 -.35565434264826007 -981 426 .14835640194964886 -989 426 -1.8390506491809318 -7 427 .5415414274962902 -21 427 .13310421824918794 -36 427 -.18373513013495973 -48 427 1.0984476139552632 -52 427 .2655556895562046 -54 427 -.051411068309468205 -96 427 .9401926986792898 -97 427 .46130853075445627 -125 427 .3856533911222291 -140 427 -.8543223145194571 -153 427 -.29429420054434396 -162 427 .2773626404500736 -166 427 1.5034580239269195 -169 427 1.0839285027284586 -174 427 .7451901870127641 -181 427 -.12214062746405283 -191 427 -.2004464850006995 -203 427 .2830682005162752 -207 427 .046928195719522225 -230 427 -.26896557524011444 -258 427 1.301375995322082 -277 427 .11233021004802306 -282 427 1.0553315770997456 -293 427 .32606296256331924 -310 427 .0018053268452605103 -318 427 .8201885119327013 -320 427 .4351731429468344 -335 427 -.7192781220257369 -354 427 -1.1898063331126147 -363 427 -.9068344755296607 -385 427 .5117256801450996 -389 427 .4320515398575878 -405 427 .19389378272793212 -407 427 .19276544710729446 -424 427 .4405337862336636 -458 427 -.29127836140944285 -463 427 .6228687425297696 -465 427 .3278618710724013 -472 427 -.5009811303926179 -473 427 .6831516950464688 -487 427 .2220349835159089 -504 427 .2884378745936693 -508 427 -.8774534463434059 -519 427 .010508986444815772 -521 427 -.7443925055446182 -536 427 -1.453877119047846 -538 427 1.1857767141360245 -541 427 -.7124272527778642 -542 427 .47973063927896153 -545 427 -.4177057267083748 -558 427 .6897309173740371 -570 427 -1.2319039201760857 -572 427 -.5140179242537491 -577 427 1.150810631362151 -579 427 .007860882243403755 -581 427 -.2990552292521081 -584 427 .21208611697900903 -596 427 .04419482300845426 -605 427 -.01867773064384197 -606 427 .5189173285185257 -607 427 .5712336914669417 -610 427 -1.9602832437002484 -615 427 -.7429935823508524 -630 427 1.3272724145751582 -637 427 -.8131509806538512 -642 427 1.310661142694176 -658 427 .3434475680889491 -676 427 -.1588685853669162 -679 427 -.05955754440857802 -684 427 -.17969186209396815 -686 427 -.13487685092993743 -693 427 -.4436530704631989 -737 427 .48875122168176577 -745 427 .9696084426836135 -753 427 -.562084518687434 -754 427 .08748423165769569 -762 427 .4630873583775959 -775 427 -.06515104289589779 -810 427 1.3509489810882052 -812 427 -.1789733448546147 -814 427 -.09304340940352199 -829 427 .11144907060494867 -833 427 -.08810324004534384 -835 427 1.0417727426820946 -849 427 .7115271222366699 -872 427 .21603169022050903 -876 427 .5395538899590976 -881 427 .10657664797462818 -882 427 .1564086308407941 -887 427 -.3145854329629712 -896 427 .16443376757703831 -900 427 -.7818544370457543 -910 427 .8357257843123943 -916 427 .2785450305698299 -917 427 .33031788903250625 -920 427 -.3710700931220071 -943 427 .13070628240273352 -947 427 1.1365732748413797 -952 427 .6531571737675866 -956 427 -.0026808909231405068 -957 427 .3550146720080053 -959 427 .49290444672385303 -965 427 .04816673168342156 -966 427 .4011187687626735 -970 427 .8348928058291972 -977 427 -.3760416680409532 -984 427 .7266398479405215 -16 428 .057978852119475316 -20 428 .5382121602328342 -32 428 .9616928307572931 -42 428 -.1887096164595764 -49 428 -1.0068493499835134 -55 428 -.694661698966799 -64 428 -.18420832584145602 -82 428 .7176891500022027 -86 428 1.0519265678022711 -99 428 -.4982212390667954 -109 428 1.1191330699311042 -115 428 -.9615898871108296 -124 428 -.754650478943762 -135 428 -.5089192846304323 -142 428 -.18487971322800317 -144 428 .5846150003335155 -159 428 -.128487937609274 -190 428 1.5951720414255983 -219 428 -.964041395806771 -223 428 -.09378353997117386 -235 428 .3854978250026194 -248 428 -.23242780422444792 -249 428 .05388662503869798 -254 428 .3611175935706108 -264 428 -1.3787898511619159 -287 428 -1.2119580397090453 -296 428 -.19957687852092626 -300 428 .4408831150446128 -316 428 .18629922960488418 -320 428 -.19280211617794757 -321 428 .9738686425850411 -329 428 .4582331965353547 -339 428 .35692352509623626 -344 428 -.6697414610252419 -349 428 -.6656733308793923 -353 428 .3697175639553393 -414 428 .09950318938932239 -416 428 -.7813729100945721 -443 428 -.6327154381171635 -452 428 -.372821445958718 -470 428 .946992004077188 -471 428 1.330734315962722 -481 428 -.21381082181405284 -497 428 .14781469554835724 -523 428 -.7669574827857699 -531 428 -1.0974771867666449 -543 428 -1.395484169364638 -546 428 .21206262554607128 -550 428 -.3525389960924141 -586 428 .6045070499602554 -592 428 -1.2202978838015064 -597 428 .027002568987166686 -601 428 -.06461160256684728 -603 428 -1.3263595511323232 -632 428 .10401732248239047 -637 428 -.11679438194716307 -656 428 .6392068625879881 -671 428 .8694222785531271 -680 428 -.21375933248892603 -687 428 .17822527155594486 -701 428 -.7614739383868679 -712 428 -.04489446029995868 -713 428 1.3686024485223174 -715 428 -.734589139619547 -739 428 -.7662616663567634 -750 428 -.3396952783256655 -752 428 -.04724835289402443 -769 428 -.34493762435011943 -774 428 -.19450009507901872 -779 428 -.5567299106992402 -790 428 .3433002597703546 -799 428 .9102384595408757 -819 428 1.3101685376411156 -824 428 .21904613095543146 -827 428 1.0505078379963573 -828 428 -.8865822166670064 -847 428 .23317621543817135 -848 428 -1.3310752385739697 -856 428 .4527030583601477 -857 428 .008850023839562404 -859 428 -.22565081981047264 -865 428 -.1409570501640791 -874 428 .07973972247841031 -877 428 1.390915297566867 -880 428 .1314142928864457 -890 428 -.013483057979454482 -894 428 -.16271043011600334 -897 428 .4163126504169347 -910 428 .24660850786526994 -923 428 .16743948964038122 -926 428 -.611355975008838 -950 428 -1.3268600716430685 -957 428 -1.1670705701481483 -972 428 .22458617698709865 -991 428 .33723403072851754 -994 428 -.13814765731916304 -14 429 -1.399963740196789 -18 429 1.7542821267235018 -26 429 -.448289403342234 -33 429 -1.3718149575466485 -37 429 .8061370874857996 -41 429 -2.1863427717611565 -49 429 .45415442075057333 -59 429 2.4318782547707087 -63 429 1.7002653071441178 -74 429 .8422953869620285 -76 429 .5781771511778571 -81 429 -.6629859912474877 -82 429 .135189122668973 -106 429 .27150194617950546 -111 429 2.029805206302186 -125 429 .9289141440073878 -129 429 -.681026330800746 -138 429 .5399800126158325 -139 429 -.2642577772421839 -141 429 .6742867516365108 -142 429 -.41150888189971935 -158 429 2.184650995785427 -182 429 .43032590348614214 -183 429 1.154114557370816 -226 429 2.319885580095709 -230 429 -1.3199343379739452 -231 429 -.21578903307936867 -232 429 .29638304300334595 -233 429 .7897356192869797 -242 429 -.7001979103629092 -248 429 -2.336526215472398 -265 429 .7843162257995402 -270 429 .19807679246547194 -278 429 -.9973769819794643 -289 429 2.0199773894838837 -301 429 2.265320404030722 -306 429 -.658641091549416 -308 429 1.5059222293958914 -309 429 .26995120221193614 -317 429 .7080365334444525 -319 429 -1.1875170227830758 -333 429 -.7398444277478351 -336 429 .24582738595897982 -338 429 1.1305607467855208 -339 429 1.5510430874555223 -341 429 -.3174861805199012 -343 429 -2.1316286445626402 -355 429 -1.572364940375613 -356 429 -1.3551954655978198 -357 429 -.36273510711033025 -371 429 -.9776285111941572 -381 429 -.382955657418007 -386 429 -1.7087378954674293 -398 429 -.8874842044004888 -404 429 .8396612210757194 -408 429 -.6425045703339571 -414 429 .18995062158829779 -425 429 .037303348226679356 -448 429 1.0763190474008766 -451 429 -1.337110250390374 -469 429 .706702740310905 -476 429 1.132962819310738 -482 429 -.17375844366950338 -495 429 .6887748039298907 -502 429 .7373703331887334 -504 429 -.25217301760766353 -556 429 2.3716104079559104 -559 429 -1.2252463202959067 -571 429 -.4416095946429972 -574 429 .5586933569563104 -582 429 1.3374819086171874 -591 429 .8132162922131223 -592 429 -.5274936443846181 -594 429 1.793248682903467 -604 429 -.08617467261305187 -605 429 .6016594779074813 -618 429 2.124596656050322 -624 429 2.3832279577658584 -626 429 -.5178221348405313 -628 429 -.2762858551223102 -635 429 -1.1152011921177256 -639 429 .781874798517843 -641 429 .08384503178961097 -645 429 -.2583592690463964 -649 429 .6725228703354289 -650 429 -.751105048589745 -662 429 .10786599013802156 -670 429 .2533187723123935 -673 429 1.4224359179778683 -675 429 .6820544437362552 -685 429 2.6957395707448564 -708 429 .5022677356178112 -714 429 -2.736234229111713 -724 429 .027529234942625776 -731 429 .09036989180996001 -735 429 .08321463017615195 -758 429 1.7864298031347274 -770 429 -1.8568561404953965 -779 429 -1.150093126233942 -781 429 .26767943675276007 -786 429 -.5893468165799113 -802 429 -.1820054159573103 -805 429 -.5033157924093962 -817 429 1.7895249879958186 -828 429 1.3062598781504529 -829 429 -1.0024821470266632 -830 429 .9801323871706248 -842 429 -.6644866790636518 -844 429 -2.1767489083251848 -858 429 .4971961898183379 -859 429 -.4271186665931117 -875 429 .420671241116365 -880 429 -.7391318621463929 -883 429 .5691097233451189 -889 429 -2.1807093429452125 -898 429 .7841981241143458 -910 429 1.1978773252354837 -935 429 1.280145018143567 -938 429 -1.6082807775223957 -948 429 1.5817692728797454 -949 429 -1.0077486833807836 -954 429 .5795314722180405 -976 429 -2.3502237440270934 -995 429 .02200977726466762 -996 429 .6035628433197067 -9 430 1.5938259361914877 -11 430 -.11374466303531519 -12 430 -1.328741557409801 -27 430 -.9800984926743987 -29 430 1.379004262908815 -30 430 -.21983392812088895 -36 430 -.13504031456201093 -41 430 -.07415516972186115 -42 430 .25819719515877354 -58 430 -1.0739994040467837 -96 430 -.7289332128892708 -101 430 1.2609604546821092 -106 430 -.4333463903590461 -122 430 .6336483191613009 -140 430 .522931769459243 -164 430 -.6167544404471438 -174 430 .4927288966278729 -189 430 1.9166896738981243 -191 430 .9696104204507854 -193 430 -1.8543321299394608 -195 430 .31247184449932586 -200 430 -.18632373135500496 -208 430 -.5704596536959581 -246 430 .451110492803507 -259 430 -.7579483572844397 -275 430 -.9017172782260124 -294 430 .3306310355150497 -296 430 .9834551725607156 -306 430 -.3844687156703148 -317 430 -.7007573913043147 -334 430 1.6491358032671761 -335 430 .530994411505164 -349 430 -1.1455193122941458 -355 430 -.11657283058334955 -366 430 .24532381105252227 -375 430 -.35591617206200044 -381 430 -1.0007944746871555 -383 430 -.6618027890323892 -388 430 .6102821224702237 -401 430 1.6432718118658585 -416 430 .4902436153624812 -459 430 .663544196999371 -462 430 -.1065079029540882 -487 430 .5037878793850843 -542 430 -.05015205538001813 -557 430 .4953785231349258 -566 430 -.48490090817157866 -572 430 -.04272880948156085 -576 430 1.087887883899542 -577 430 -.636967235546304 -579 430 .07252500683705634 -586 430 -.14067292177411722 -599 430 .33674106705841617 -601 430 1.1237812741889224 -603 430 -.7030783623952255 -606 430 -.3621147531307413 -609 430 1.1481497849362097 -611 430 -.3997053361725501 -613 430 .10591856709897274 -627 430 -.4331111235236659 -636 430 -.24555488813598186 -664 430 .23547832342701785 -725 430 .04406808231048459 -733 430 -1.150213279481017 -744 430 -.468409262649259 -745 430 -.5771022827753852 -760 430 .10551880508211277 -764 430 -.12910355860478812 -773 430 -.22829877848127011 -775 430 .29533389597761284 -776 430 .815638420304683 -784 430 .03277017798603641 -786 430 .6008822692955116 -788 430 .6243152013373439 -798 430 -1.565416895397314 -817 430 -1.8654558279023843 -836 430 -.10230119949110321 -839 430 -1.1074867496314353 -853 430 -.20773454839590827 -888 430 -1.2779130414471347 -892 430 1.1935156768181907 -901 430 -1.0384721080345436 -913 430 1.3931784404923917 -926 430 -1.0141337108670392 -936 430 -.820904229994133 -938 430 1.4349991575101186 -941 430 -.9126498038621381 -950 430 .016700319779554718 -952 430 .5259929442787894 -965 430 1.4473094059771896 -969 430 2.3985254437196444 -987 430 -1.5783655380158486 -8 431 .9315041333706355 -11 431 -.7179739076889342 -13 431 .5024071119146322 -33 431 .9260667683981012 -42 431 .24669665286057113 -60 431 -.8463943141283676 -87 431 -.29682798827867607 -94 431 1.581284296339643 -103 431 -.2665356012368021 -104 431 .36560257776168803 -136 431 1.2711842810416494 -158 431 -1.0927122923931458 -159 431 1.224621049678241 -162 431 -.38122209702049514 -176 431 -.7611380143109043 -209 431 -.6274036323423177 -235 431 -.5440952385461307 -244 431 .4699901959669145 -264 431 -1.1357493349827437 -273 431 .8849603965599595 -282 431 -.2240002446356725 -286 431 -.0699847003885293 -315 431 1.2798751694692112 -322 431 -.6149165299211176 -325 431 -1.5890397184656568 -354 431 -.0565378338921739 -359 431 .5201032776896519 -373 431 1.444618809325353 -390 431 -.4861589401040305 -405 431 -.016160705727481045 -409 431 .07837169281099267 -410 431 .14844808313800117 -412 431 -.9222734548323799 -422 431 -1.3872396943485605 -426 431 .2212207758848315 -448 431 -.8897983586114256 -486 431 .7502446290194446 -488 431 .3651492144105737 -497 431 -1.1783488970623313 -499 431 -.8767327991667527 -507 431 -1.3300196205391894 -513 431 2.3700190815558297 -525 431 1.7744303979367737 -532 431 .5803447123830864 -555 431 .6809524801701313 -558 431 .3461514334241292 -571 431 -1.007658270898303 -577 431 -.2541832782938544 -585 431 -.7985796094100812 -591 431 -.7609752159480043 -597 431 .6984661874603747 -598 431 -1.0062366405144418 -614 431 -1.457284662611122 -616 431 .43889439657583346 -628 431 -.35328973443658335 -635 431 -.7047871975346218 -636 431 -.34010364505628915 -643 431 .9563490636950396 -652 431 .013051409984495749 -660 431 -.014339083276046834 -661 431 -.09777349601960557 -682 431 1.2279414183553665 -684 431 -.005627332784088404 -696 431 -1.2327245448578705 -704 431 -.4287083680226671 -706 431 -.817102148389901 -721 431 -1.0032602077352124 -750 431 -.9733152305255933 -755 431 .3987407501367658 -757 431 .688994909645175 -773 431 -1.914482317927082 -777 431 -.772560521649474 -788 431 .7994588839788396 -802 431 .11666412222844796 -803 431 .8416674110395519 -813 431 -.6505628016560422 -814 431 -1.1369033135867845 -818 431 .089433287780671 -829 431 -.6518926513989087 -834 431 -.49251217913933926 -841 431 .4071338167837618 -843 431 -.03238301294188317 -845 431 -.5570458148757755 -848 431 -1.3208642567885716 -860 431 -.09481097550185838 -861 431 -1.3692639398079893 -877 431 2.1262394337993267 -886 431 .3899432957843784 -892 431 -1.0750772342717898 -894 431 .21260627671176185 -911 431 -.975845030210391 -915 431 .35825296214887015 -937 431 1.6599556856062443 -972 431 .08372204234170408 -974 431 -1.0574411990426842 -997 431 .18748282457003007 -1000 431 -.741676557450514 -3 432 .26631015615206766 -6 432 -.748364212137251 -10 432 -.6717159585874245 -11 432 -2.27785300647813 -19 432 .06501136256903994 -38 432 -.9809472793900902 -47 432 -.9737028243564245 -54 432 1.2546797765537605 -72 432 -.7765625826329297 -91 432 .394325963191741 -95 432 2.655118829266389 -96 432 -2.6593121623337943 -101 432 -1.6310083891433726 -118 432 .931757185283121 -121 432 -.5198733090717673 -127 432 3.1865834202917456 -128 432 .7130338949427578 -133 432 1.2400857429544816 -136 432 -4.546479401185341 -155 432 1.456736735068368 -168 432 .5540065007088975 -171 432 4.041631822114028 -178 432 1.9036328813147898 -185 432 -.5707593849519286 -209 432 -.29857134684454123 -211 432 -.5736947543908248 -213 432 -2.088881547263799 -237 432 .6250301964048467 -238 432 -2.1184412792339766 -244 432 -4.201542494968841 -245 432 -1.3336253727395702 -246 432 -1.2291278960443501 -254 432 -1.567732860006426 -256 432 -.6399928597562838 -265 432 1.1748271014024139 -278 432 -1.2939809478521924 -279 432 -.13077501262018137 -282 432 -1.5043357660531063 -312 432 -2.7153888105925392 -315 432 -1.8061415824149227 -318 432 4.087929665674973 -325 432 -1.5931673939768571 -372 432 1.7431723069332703 -377 432 -2.8444823811093762 -382 432 .9036218981095298 -384 432 .01655223290521371 -387 432 -.42735518826226454 -390 432 -1.3388744859283068 -393 432 -1.7132680694165523 -394 432 .44325480688305385 -405 432 -.8973950454979694 -412 432 1.170344685814929 -424 432 -.1614426115939898 -465 432 .7844006109592463 -471 432 1.9187009988447232 -472 432 1.0094276394032218 -501 432 -2.4325725160563 -505 432 -.6185640871179003 -513 432 -2.08485863909443 -515 432 -1.2993285340504885 -523 432 .335980527371087 -531 432 .25189834890016954 -545 432 -.4760441597842777 -561 432 -1.271054920198042 -568 432 -3.1756358387617 -570 432 1.2123223199122592 -583 432 -.9713243380725753 -584 432 -.9416088875524866 -591 432 .7134647256680017 -604 432 .05848473310468674 -610 432 -1.2803430949201553 -625 432 -.13118861923542527 -626 432 -.9483684512980026 -628 432 -.24799947320600194 -668 432 -.14867801240308526 -690 432 -.11810588130262471 -693 432 -.0594079682722086 -697 432 -.16286158123354538 -707 432 .636802027360643 -708 432 .7378086700718032 -716 432 -.7123690106165721 -717 432 1.9978576313722565 -720 432 1.0900985199981328 -738 432 -.8599575636509934 -746 432 1.0708149873619768 -762 432 .7551613601664219 -763 432 -1.2061064924039093 -766 432 .4951857173741598 -767 432 2.223342737605391 -775 432 .6116733814986373 -777 432 -1.8981917970054292 -783 432 .06923415780113064 -795 432 1.6628488383418345 -801 432 .056259306737704975 -817 432 1.0260675952254545 -820 432 -.10592970251827236 -838 432 .7819592286304082 -842 432 .15015407637918576 -844 432 -2.8772476417185837 -861 432 -1.8553048875449394 -869 432 2.2742371011671763 -871 432 -1.3452745825173722 -873 432 2.489351849545963 -881 432 -1.1668711785803718 -913 432 .20534735898787554 -915 432 .14736586862925638 -925 432 .34675947550198283 -937 432 .09506233411497723 -949 432 -.13470648551982567 -952 432 -2.160694546712622 -956 432 -1.544223205171527 -968 432 .6736709879498604 -975 432 .5242002000463878 -977 432 .9977205002582563 -980 432 1.7556185546495051 -983 432 1.7441773003813374 -990 432 2.6913794045726527 -5 433 .4320184890600576 -11 433 -.9459489291057104 -23 433 -.5992698277477333 -41 433 -1.1258849817569916 -42 433 -.5010318437818213 -44 433 -1.125475122561047 -46 433 1.7513784508466208 -73 433 .31718476304924104 -104 433 .7839588144829568 -127 433 .6400506114576354 -133 433 1.0894947884491217 -135 433 -1.4009638280655448 -154 433 -.4885380387141914 -160 433 -.006706612761160961 -162 433 -1.4192005564028272 -163 433 .888033673100823 -164 433 .24580829875720497 -167 433 -1.3429184131985417 -178 433 -.4056098127532524 -191 433 -.7068489821030395 -202 433 -.06651550600561262 -219 433 -.5464090253719031 -228 433 .9752388936267085 -232 433 .3614569494039357 -241 433 .15346948774274616 -243 433 .8735220181986265 -247 433 -.9966858629999054 -251 433 -1.656392488492338 -273 433 .15137871867980168 -275 433 -.9317355113051364 -282 433 -1.2746690112386827 -286 433 .5746950043763442 -298 433 -1.414592855600623 -302 433 -.5394742562698345 -308 433 .06903065706520113 -323 433 .431712213015674 -328 433 .49027639744235635 -329 433 -.6314685795101259 -351 433 .8906291529981806 -358 433 .5962335786406924 -368 433 .07353978922622004 -374 433 -.6046693497710848 -414 433 .20822001172295818 -415 433 .3328775213553457 -420 433 1.275450414082221 -431 433 -.48475644368636445 -437 433 -.3273869892149628 -460 433 -.7206877590279428 -473 433 .4316960798509043 -486 433 -1.0366728650690684 -495 433 -.3670512640520845 -496 433 -.9995099446102538 -510 433 -.552471745516752 -516 433 -.9091368487378599 -531 433 -.18236932363641142 -532 433 -.7329551315023248 -542 433 .17082440987295397 -544 433 1.0072635241949797 -550 433 -2.297519661827693 -559 433 -.056379055512402965 -582 433 .1334190598015822 -602 433 .3368432851037643 -603 433 -.21998409845840589 -608 433 -.4648441807191392 -627 433 -.16991381139095077 -649 433 .775768766386349 -667 433 1.0893538114765557 -668 433 1.2146966565882498 -684 433 1.3778024144273588 -686 433 -.337778049318856 -706 433 .5768982136252068 -716 433 -1.0667369429047395 -717 433 .7990389442700361 -723 433 -2.0328043482966764 -734 433 .037420096976388754 -739 433 -1.3162897786975407 -742 433 .9317747371214676 -757 433 -.557372963748616 -766 433 -.10583554927174393 -780 433 -.5624930930962513 -790 433 .5184718561401007 -791 433 -1.9075203390938784 -795 433 -.14889822363754293 -817 433 -.8663654012392488 -821 433 -.0322043904882576 -826 433 .4158365615377587 -839 433 -.6431954486768768 -851 433 -2.6279243676464685 -859 433 -.4594780915867863 -881 433 .3921561507499954 -884 433 -.25316354432058374 -895 433 .1782300525860025 -904 433 1.1501729600638844 -905 433 -1.5151743897786947 -907 433 .10980617847284094 -911 433 .032612911337816936 -917 433 -.1731288309123562 -923 433 .6265831579637872 -926 433 .9153630098893087 -927 433 -.7463891974051886 -957 433 -.9663403177235811 -962 433 .894344843492783 -975 433 -.19044145218337866 -987 433 -.1566427488257167 -8 434 -1.6410318459747182 -37 434 .04106678707713182 -59 434 -1.2916791098974492 -73 434 .3719750952777898 -76 434 -.7334415897230446 -80 434 .7697825836726797 -99 434 -1.274890767903693 -110 434 2.327581697795152 -125 434 -1.6163812063482748 -132 434 -.19868551210938645 -133 434 .9119236566717978 -135 434 -.4554726109167122 -170 434 -.34587734443967827 -173 434 -.40571995900463786 -175 434 .7452054063037471 -176 434 .005902719734764397 -179 434 .22464660282664023 -182 434 .11384583554019223 -183 434 -2.440371236809681 -207 434 -.27358644979403873 -208 434 -1.440458805806953 -214 434 -.47736667178119163 -234 434 -.7924560994729736 -251 434 -.4869871855332237 -255 434 .16057853130024394 -264 434 -.8109516436568308 -276 434 -.12096579456316998 -284 434 1.5626635471620336 -285 434 .6546851490572344 -302 434 .13544487359068835 -312 434 .0986226182231709 -331 434 -.19445387358291177 -337 434 .03346938722939155 -340 434 -1.3805720417717167 -357 434 -.7974909687622234 -371 434 .3796785241656335 -377 434 1.258899041005802 -383 434 -.8744047164999086 -385 434 .0027638219052180946 -393 434 1.8013982058544504 -394 434 -1.6406041262230424 -433 434 -.15170309163107554 -451 434 .5056979402102417 -459 434 -.19032530717163937 -468 434 -.16402988469855498 -497 434 -.9315290759601206 -499 434 -.08616480315787338 -519 434 -.23631034947433532 -523 434 1.0140204808905855 -529 434 -.5170538884841583 -532 434 -.5896904911768532 -560 434 -.7965841307898139 -562 434 -1.2863676027288342 -564 434 1.5439200123750294 -565 434 -1.9061197390772608 -573 434 1.6798797843530369 -574 434 -.9024703495760236 -575 434 -2.3938874109423702 -589 434 -.7247584971486333 -599 434 -.12369826417070218 -600 434 -1.916235357309999 -609 434 -.5175585844937887 -617 434 -1.7431440135003013 -618 434 -2.387295182967304 -619 434 -.07247462566531929 -647 434 .642803115501333 -655 434 1.6251381241837692 -667 434 1.2061433064395206 -676 434 -.3096816932044219 -690 434 -1.137489628562332 -692 434 -.4203311452538723 -700 434 -.965544500414072 -707 434 1.698053025497095 -709 434 -.15655677834525383 -739 434 -1.0092906250831493 -744 434 -.07616044409595765 -749 434 -1.0280386939727628 -752 434 -1.3715999716153287 -782 434 .20481507370411958 -783 434 1.345915246723511 -789 434 .44849175272415975 -796 434 .9130370022819866 -798 434 .6060442243591666 -800 434 .788286002025236 -803 434 .664815917886239 -810 434 .41402665890083556 -812 434 -.7485488573178718 -823 434 .1909884959624992 -856 434 .6084553480756291 -861 434 -.04212806285141768 -871 434 .04260552613482095 -878 434 -2.017458607093298 -885 434 -.544961830211462 -887 434 .9708850692535622 -897 434 -2.0799392853640293 -904 434 .9862983537820124 -921 434 -.6856168855357638 -923 434 2.1542031677442575 -929 434 1.7885841838859875 -938 434 1.586876576262773 -949 434 1.051235896374868 -952 434 2.0745281073089106 -970 434 .776000483049299 -983 434 -.5045422294414893 -992 434 2.073522932353198 -994 434 -2.2313872785543865 -6 435 3.239761388458462 -9 435 3.146713224256999 -13 435 -.8643548899480654 -14 435 .5074195538470339 -28 435 .945948751267829 -30 435 1.5545999228745544 -31 435 1.2934471613385548 -34 435 -.4115534265729558 -36 435 1.6530433570389582 -53 435 .30653054873819924 -58 435 .06885542742046191 -66 435 .3426694959888984 -100 435 -.7649055775683965 -105 435 -1.2918841046690908 -121 435 1.448124918147738 -128 435 -2.282776112985213 -129 435 -2.048221686238808 -130 435 -1.0529563358636782 -132 435 -.3859595910072504 -133 435 -1.8000589120156185 -167 435 3.6618844954156593 -169 435 -.5764956468802112 -173 435 -1.3127434370448445 -177 435 -.07781857717177754 -181 435 .8251533802578859 -183 435 -2.3161018707374437 -184 435 -.9811934513047117 -187 435 -6.0374918951705965 -198 435 -3.2104487786520135 -201 435 -1.7990237505660256 -220 435 1.7939745706593488 -230 435 2.781017722703126 -234 435 -2.1699802904015772 -257 435 .07276584961544252 -277 435 2.852339626981216 -292 435 -.6309720593341677 -326 435 -1.2061970018201222 -331 435 -.10200735761144815 -339 435 .2997458094758309 -364 435 .9790150790839915 -365 435 -.5634156313081827 -377 435 1.174500063731919 -416 435 .988676418799697 -430 435 -.8078573496461782 -440 435 -.1529548086962666 -442 435 -.6230215022199427 -460 435 -1.3812228980125538 -471 435 -.8505236261343889 -473 435 -.9193338526662986 -478 435 -3.9918262904592097 -497 435 1.8147612962370274 -499 435 .8699901629982285 -500 435 -.28064743629285516 -503 435 .34222281027443296 -510 435 -1.5631259251039231 -514 435 2.4424049341202396 -529 435 .7718585763661883 -532 435 -1.0748082447651284 -536 435 3.3172305423857686 -538 435 -1.949856020302214 -539 435 -1.0127924491885099 -558 435 .9951428859226892 -583 435 .6072555180204632 -585 435 -1.2185593956483698 -588 435 -1.468496535296097 -597 435 -2.972818622259915 -600 435 -1.5879161837759637 -618 435 -2.1946449870066154 -620 435 1.9828753550013656 -632 435 .21676387158302673 -636 435 1.9034134912007228 -648 435 1.033869657616044 -661 435 .3699131137638395 -662 435 -1.0824460684825197 -664 435 -.5453845424388225 -667 435 -1.782741737403241 -671 435 2.8127104176431033 -680 435 1.0430782608299478 -687 435 -1.6885761011635403 -702 435 -.29986041837397437 -707 435 -.6578026862247704 -722 435 1.578668581840021 -732 435 1.2717435546890534 -752 435 -.949867139688523 -757 435 2.5610978767646184 -759 435 1.6410799808771184 -783 435 -.6110881163979989 -787 435 1.5507052977321858 -790 435 -1.6741139996864034 -792 435 1.357550815279743 -796 435 -1.6402199184376482 -798 435 -.06211691685078293 -802 435 -.41943604692784764 -808 435 -3.0552829668176926 -809 435 -.5897749604997906 -810 435 1.6415741501798224 -825 435 -.08761702546734801 -826 435 .29600721832381993 -836 435 1.0941180276264768 -839 435 -.25929322927326043 -844 435 2.2406258734366733 -866 435 -.6392321854099103 -878 435 .04964085100084348 -888 435 -.14405206665114542 -894 435 1.8682147931700677 -897 435 .5483282878050285 -907 435 -.10358894935704198 -908 435 1.2882207547830227 -916 435 -.11583500969016948 -930 435 -2.1845181969391514 -936 435 .15792920338339528 -937 435 -.7622153902901972 -938 435 2.605405001295548 -940 435 -.4800938203791413 -975 435 -.7899663357928453 -980 435 .5565257751610009 -983 435 -1.2855633175630914 -985 435 1.9351985936800566 -989 435 -.32708557887385376 -991 435 -1.4907412783734517 -997 435 1.5908923961745323 -999 435 1.8430971581785263 -8 436 .45307467590101724 -12 436 1.4597080482586948 -18 436 -2.6993929570911033 -26 436 .3929635475861699 -42 436 -1.2254728706975393 -52 436 -1.9972899338047194 -55 436 -.08642463611300993 -67 436 1.2648275585147402 -109 436 -1.380584725247465 -119 436 -3.356032421251918 -134 436 -.24598130805821072 -147 436 3.2417333216393533 -168 436 -2.569518098939988 -182 436 -1.909477500882565 -195 436 -.42211094770324703 -214 436 .798961168433748 -218 436 .8256291357233396 -228 436 -1.106326954778572 -230 436 -1.1530712899201976 -237 436 .22806018137783976 -245 436 -3.2983271760263295 -262 436 .015181400900662775 -272 436 1.5023430938687587 -283 436 -1.678695160595294 -293 436 .7330165384311466 -298 436 -.24431036078844917 -300 436 .7958559029126171 -304 436 -1.7524530415312325 -319 436 -1.0316003364098618 -328 436 .6226241367407355 -333 436 2.167017021042527 -353 436 -.009548571419348756 -359 436 -1.806259788229684 -360 436 -3.9473585469953094 -361 436 -.8939497863334582 -368 436 3.4411202234627956 -378 436 -3.398483005630764 -393 436 -1.7292260121473388 -410 436 2.007399106810745 -421 436 .7323665482563707 -424 436 1.651552668193323 -429 436 -.8467038648004878 -441 436 -2.151896676704517 -467 436 1.560177095745226 -477 436 3.101749673681839 -487 436 .2463327054636486 -495 436 2.107118413452184 -508 436 .5677763506415007 -512 436 .5146318179486242 -527 436 -.4770003335122447 -538 436 .6263815179999049 -546 436 1.5879623344862446 -583 436 .404098472107276 -587 436 -.0205929415135105 -593 436 -1.1861364624587096 -597 436 .5390879164892817 -622 436 .7343788132183453 -631 436 .6269651694519383 -635 436 -1.8757534758257788 -644 436 1.9332217423856264 -651 436 1.0268810898281115 -652 436 -.821758186612216 -663 436 .8165546033963824 -670 436 -.3287928474366037 -673 436 2.1895162081725124 -683 436 -.9716215468218661 -686 436 2.4740816444810636 -699 436 2.229535839772684 -720 436 -.5764627671842097 -727 436 .3359835361540896 -732 436 -.803199957379369 -751 436 2.5786212377682745 -773 436 -.059786057312910965 -775 436 -.5245072262770049 -787 436 -.30506745478647346 -801 436 .4340596805519138 -826 436 -2.0831839823457123 -847 436 .46604037548058774 -859 436 2.405519060333704 -860 436 .12980566890792405 -862 436 -.861848867331027 -872 436 .5350251210353519 -893 436 -.5826289330903979 -911 436 -1.2034842104635335 -926 436 -1.5330164218418039 -943 436 -.8807320071933804 -947 436 1.4241127737255455 -974 436 -3.3111641369996474 -996 436 .6159886908343595 -997 436 1.7349188981694668 -2 437 .6906333940922499 -3 437 .8332593481785278 -13 437 .9132572997147533 -15 437 .07606779664259837 -40 437 -.21429136354605208 -41 437 .6732375098101685 -52 437 -.2035895986389622 -65 437 -.42855248894332976 -68 437 -1.4699449851238269 -70 437 -.575412223404587 -76 437 -.8992333748656233 -96 437 -.5915604218925501 -107 437 -1.2718881218791824 -108 437 -.5792139961872055 -125 437 -.16230907887170898 -135 437 .7385389898941151 -214 437 .9427603810985992 -232 437 -1.4117212145221976 -245 437 -1.8806773797585266 -252 437 .5121061551440032 -253 437 -.10977997635908086 -264 437 -.36835613220065333 -272 437 1.04015903116419 -293 437 .8356058861173074 -329 437 .5356381028168946 -361 437 1.1745698602507293 -369 437 1.0337020913189634 -384 437 .22068654488451417 -398 437 .008030092148576029 -400 437 .8745165556690234 -402 437 .3837560953163787 -412 437 .010090371959784322 -429 437 .011652168318376677 -430 437 2.473522465785386 -451 437 -.15800836218210818 -453 437 -1.0165952769707673 -457 437 -1.7617908452618525 -466 437 .327932094031105 -470 437 -.5388963308020698 -472 437 .4812352273547513 -490 437 -.6068093736674963 -497 437 -1.1585046354927087 -504 437 .12518054102573642 -505 437 .15749626668524716 -520 437 -.9410489130875055 -545 437 .6740965827332734 -546 437 -.44427898709034275 -565 437 -1.2321987705382156 -571 437 -.624018303928902 -580 437 .6241382436333331 -581 437 2.052002126357989 -588 437 .43031265242817235 -607 437 .6484700791755447 -629 437 -.5544702681210146 -644 437 -.4222502323479226 -647 437 -.33544376784252916 -667 437 1.1006682052133285 -669 437 -.3121468189054361 -687 437 -.021180563095055692 -696 437 1.2256038361663064 -701 437 -.2689980263429384 -704 437 .5852564800505365 -710 437 .0566678055212303 -715 437 -.8156790084017085 -717 437 -.14112655478232625 -720 437 -.3573879498281438 -729 437 .00817831899628163 -740 437 .8062787134161353 -744 437 -.20653828077144482 -749 437 .3831375040546196 -756 437 -1.8635184290622722 -787 437 .06150497357722162 -789 437 .25762830255652913 -797 437 -.14494330152135984 -807 437 1.5803087868904844 -824 437 .4326920629599109 -827 437 -2.293362595611572 -831 437 .45019357555231954 -848 437 1.452287762129226 -862 437 .09047923693347332 -867 437 -1.233401754273127 -875 437 -.7184645017115276 -885 437 -.43268434029104225 -890 437 -1.5040785836263506 -896 437 -.9035675452509545 -898 437 -1.2352697454127937 -909 437 .032502666585020164 -925 437 -.0852270365150476 -974 437 .6007532970860405 -985 437 .017340045480378215 -986 437 .34281308455835585 -987 437 .3189721921693471 -988 437 .4775647153828098 -33 438 1.6809725101799078 -36 438 .37306419189000223 -46 438 1.2668039814942482 -57 438 1.0001389235908882 -98 438 -.11482666702837699 -99 438 -1.229698902676657 -130 438 .2839074094117069 -132 438 -.2919574208311788 -152 438 1.4654474076013808 -177 438 1.6618851408423967 -186 438 -1.0606391605181975 -189 438 1.0362655160824255 -194 438 -.9428326932274298 -203 438 .5680711981028155 -209 438 -.30927878578940576 -248 438 .9713823421627716 -251 438 -1.6530349573553904 -257 438 .5726685400064264 -285 438 -.0662642258897808 -299 438 .23511613860937433 -302 438 1.1496785249929669 -321 438 2.228192985843601 -324 438 .4717917781136328 -329 438 -.2922153601951297 -337 438 .7442901303808304 -359 438 .060739994466220866 -371 438 -.14861734356302678 -375 438 .26374309676042174 -379 438 -.434998636848989 -388 438 -1.9306893016028113 -405 438 1.3361012219247783 -421 438 1.4169160467201647 -430 438 .11225573115572436 -443 438 -1.5744211121102125 -468 438 -.5029183148641553 -475 438 -.4206174213445383 -486 438 -1.6073458735431199 -498 438 .4665596521647458 -500 438 -1.1918767006880504 -502 438 -.7379109477559749 -510 438 -1.9117377338678734 -515 438 -1.3024671391622202 -517 438 -.7064316020772701 -528 438 -1.2078993372723714 -538 438 .4198355896346081 -549 438 -1.5654260081590223 -552 438 .1504151252206069 -555 438 -.01873324137024976 -561 438 -1.097612980462226 -581 438 .9426087789523446 -587 438 -.4410915031923283 -595 438 1.303706805753718 -598 438 -.7431765835896552 -618 438 -2.8967205905220834 -641 438 .15738902675590008 -646 438 1.9825815582360375 -651 438 -1.4015138392841977 -654 438 -2.3739910817817194 -655 438 2.2938801565756193 -660 438 -.02177667092335933 -663 438 -.9316539579115871 -678 438 2.0030691497773407 -680 438 -.172948352843824 -683 438 -.04446049829555599 -686 438 .4436268526345014 -692 438 -.8808405702898426 -712 438 -1.247971209741158 -716 438 .7030910168015089 -721 438 -.7836140699672312 -737 438 .33986073920878757 -738 438 -.8759967346333625 -748 438 -.19881585074190272 -759 438 .5900470602862538 -794 438 1.008978944492334 -810 438 .5539372012196699 -818 438 -.9170915864242278 -820 438 1.1754385547055604 -827 438 3.2841559451855593 -844 438 .18799175551742262 -849 438 -.13677908117301912 -850 438 .9020777709300294 -856 438 .18171326236607024 -865 438 -.04022861049664898 -871 438 -.165209848237321 -879 438 .020513402265025498 -885 438 -.41295654448761127 -888 438 -1.3581056902655082 -892 438 .40389682295446416 -893 438 .12784450991698665 -894 438 -.31058286586773703 -897 438 -1.6790766414892622 -907 438 1.1236488341699755 -913 438 .6558529868351991 -937 438 .23173464488088294 -958 438 1.5997020158723196 -972 438 1.1738153246518463 -987 438 -1.3271720392165653 -993 438 1.7036621097982771 -6 439 -2.02238979651323 -16 439 .6422064689602631 -21 439 .01363264751699314 -25 439 .604835891506618 -44 439 -1.1765164201251148 -60 439 -.6653103565999563 -61 439 -.8530630226379423 -63 439 .3699342000866036 -71 439 -.11427216152455717 -75 439 .15367941584274447 -90 439 .07213793847525306 -100 439 .8123938684567942 -116 439 .39818730777586503 -124 439 .16923622413051642 -152 439 -.9741880435801026 -161 439 .7809532716560995 -165 439 -.9963868825324029 -202 439 .3504496998736097 -208 439 .5876732932413469 -229 439 .3312170893714209 -230 439 -.37572172064148013 -232 439 .9787539026638133 -243 439 1.0450190308683522 -245 439 -.07386226048825527 -246 439 1.5008882673178712 -252 439 -1.0523356197813938 -306 439 -.09741386972465067 -307 439 .787581098155004 -320 439 .28666440847794006 -327 439 -1.3763525150138738 -342 439 -.03465008692646679 -354 439 1.1919112826521174 -365 439 -1.4578484140775547 -366 439 .9449599704207596 -369 439 -1.0274882942116395 -375 439 -.18921853908089334 -413 439 1.447631669466378 -426 439 -.4020900865719137 -436 439 -.41338271283456235 -438 439 -.17164042620476871 -448 439 -.434215791753229 -456 439 -.1849629306270063 -459 439 -1.428027715174104 -464 439 .8176509658838866 -512 439 -1.082730767663955 -513 439 -1.383765238400574 -526 439 -1.6260655516835356 -538 439 .4044101084698535 -552 439 -1.1280096133758903 -566 439 -.5691056735686044 -568 439 -.23266252220570824 -576 439 -.253841777066651 -582 439 -.016326862556730604 -626 439 .9650698426613359 -633 439 1.9800366774560694 -656 439 1.204387247731998 -663 439 -.8371554951622415 -665 439 1.4744818223750589 -676 439 .7461486553262615 -681 439 -.5480026482353731 -690 439 -.6347605921063847 -698 439 .18053981152341742 -709 439 .5327572965617757 -716 439 -1.2447880927161803 -735 439 1.2936437122894642 -737 439 1.062558071653675 -748 439 3.123139952553562 -750 439 1.372427022004282 -761 439 -.7489894630697398 -762 439 -1.3278845258798349 -772 439 .596904165892508 -789 439 -1.1002840272487986 -812 439 -1.2457117222425638 -816 439 1.1834736452133692 -821 439 -.39218398539454147 -830 439 1.9303587811648348 -857 439 -.027777592088038552 -860 439 .8372035228391057 -871 439 -.23691570352672744 -885 439 -.5118408518666004 -890 439 -.24833248302552993 -902 439 .6468298684139681 -910 439 .7880221487228495 -914 439 -.17579037813433115 -915 439 -.8715927009299566 -929 439 -.46621815313941006 -947 439 .8785825044850508 -954 439 1.4060331223877236 -961 439 -.9677618274460864 -970 439 -.6466828443881762 -978 439 2.2227558865537764 -991 439 2.029739306333771 -1 440 -.10284674402563271 -14 440 -.3246402416905755 -19 440 .5960987684357572 -35 440 .8608577467225059 -37 440 -1.4155404205804267 -40 440 .02816737147750742 -44 440 -.5088365734173184 -51 440 -.12493345387567653 -52 440 1.062410087947866 -53 440 -.033831471586413836 -54 440 -.7890825593023074 -59 440 -2.003885756947442 -66 440 -.4574235458293063 -74 440 -1.7714348975191074 -92 440 1.0582147758478828 -98 440 -.9005035894329643 -100 440 -.5204014391004812 -125 440 -1.6191999260213794 -136 440 .1806348581511412 -148 440 .24234328936082689 -152 440 -1.3609715464098149 -158 440 .7213756452233658 -177 440 -1.0485161770681193 -195 440 -.07453537887125197 -229 440 -.09911467837611955 -230 440 -.14919614038010554 -238 440 .2698404383491707 -242 440 -.6531745424905492 -255 440 .5874025905757605 -264 440 .6682780718254717 -282 440 1.1322769696096737 -301 440 -.7829669395164989 -307 440 -1.1461421023485143 -310 440 -.944116850214334 -313 440 .639215656552918 -325 440 -.2704295640790057 -343 440 -.19357837234921638 -348 440 1.3456442408095248 -361 440 .23638288257961418 -362 440 -1.226426727841239 -364 440 .6332664697628939 -369 440 -.37711370588331666 -372 440 .5867847242347546 -407 440 -1.3718819239272422 -414 440 -.5693613654408928 -438 440 .19461760230374386 -440 440 -1.2495927730718477 -459 440 -.4360101896612819 -474 440 -1.714367339624515 -486 440 .5426486344340062 -491 440 1.2264384847359104 -493 440 .4146616223892259 -501 440 -1.1497734106015938 -502 440 -1.3699782118070525 -519 440 -1.5130610922654781 -527 440 -.5052700173553992 -528 440 -.13061070263458208 -535 440 -.5335457074893409 -544 440 .07406041018155077 -552 440 1.0222100498848028 -560 440 .1645177426479454 -573 440 1.382938256184257 -579 440 -.18058494171840136 -585 440 -.6528772447789748 -601 440 -1.1614356462105435 -622 440 -.12126988284933543 -625 440 .2593506662417293 -627 440 -1.3047410593709925 -629 440 -.12048538029261771 -631 440 -.33293639669776737 -653 440 -.9624499258321508 -669 440 -.8105900141554199 -689 440 .5767871721083596 -704 440 .5314855086192907 -710 440 -1.067449448367984 -714 440 .8553157343882819 -723 440 -.1881001526006729 -725 440 -.19091303286553576 -728 440 -.2955417558654634 -765 440 -1.4055255848805328 -774 440 -.6765165959479742 -788 440 -.3808246656890365 -791 440 .027054977958995502 -798 440 .6221209625920233 -828 440 1.0752418325441198 -843 440 -.6335948702592592 -850 440 .31956253191767314 -876 440 -.45787199900699216 -878 440 -.21897353098398564 -926 440 1.5449388715260963 -935 440 -1.0290288667803706 -951 440 .5488567879619377 -953 440 -1.2092584738209768 -960 440 -.399103723465675 -964 440 .7570708539274805 -968 440 -1.205562510551918 -969 440 -1.3586362519511035 -979 440 -.07623487937830103 -987 440 .687522387928175 -988 440 -.11333095333457013 -991 440 -1.2978358825908651 -995 440 -1.5573779445492895 -999 440 1.4825557943840335 -1 441 -.631579185026292 -13 441 -.4507872290949752 -20 441 1.2364588480899164 -35 441 .19571811192663818 -48 441 .066046865047074 -59 441 -2.2066359139062253 -61 441 .1371192475262581 -67 441 -.7435225442229592 -79 441 -.36325347503798283 -86 441 .1670986635860284 -91 441 .5811718398504938 -92 441 -.7713661739063717 -93 441 .7963963919873595 -94 441 .08321737884405034 -96 441 1.32204137708006 -104 441 1.141056621303934 -111 441 -.5650877176979077 -123 441 .9529165912910793 -125 441 -1.4299469361221204 -130 441 -.5497186756599572 -133 441 -.43256583464417037 -139 441 -.6878570192280236 -142 441 -.24125576721587472 -145 441 .0430624201649481 -165 441 .9046639356318052 -167 441 1.1748039636835312 -168 441 1.13596505615572 -178 441 -.677514987348105 -194 441 -2.084904055644929 -212 441 -1.5733701128917041 -218 441 -.47549757183787816 -230 441 1.013425507911889 -234 441 -2.5592672798789895 -281 441 -.7362758520017835 -299 441 .4032769103415965 -323 441 -.8580710743378068 -328 441 .26187891822271947 -332 441 -.541126952715013 -335 441 -.011943982193235447 -339 441 -1.1128103304025738 -341 441 .762614699606242 -344 441 -1.22658344032631 -348 441 -.19156706444247587 -351 441 1.494659742363543 -355 441 .35316648796737504 -356 441 1.385203213274121 -358 441 .0461092716854791 -383 441 -.32607399690558164 -392 441 -1.6339267743846124 -393 441 1.518090643071085 -395 441 .36914965374911674 -429 441 .30484796434203076 -436 441 .5367357554571042 -444 441 .6469872042729987 -455 441 .42079306100031155 -474 441 .14978266170265972 -479 441 .11839308051650074 -488 441 .5316421105941861 -496 441 .4394483590926774 -516 441 1.1404038690648204 -533 441 .23537886369220407 -542 441 .9576318073443478 -547 441 -.138304920365229 -551 441 -.09144892243892591 -558 441 .8440578701025747 -563 441 -.6841875000555466 -580 441 -.31480378470696646 -586 441 -.7391861080248419 -607 441 .6321429868227636 -614 441 .1734896595339992 -629 441 .7575974550989353 -630 441 -1.2928349031297917 -653 441 .1288122528437568 -654 441 -.1320664682500484 -665 441 -.8903086745420999 -671 441 .08519987006323355 -674 441 -.6037116217703047 -699 441 -1.2250500261388995 -718 441 -.6180641987880002 -724 441 -.41902093344776825 -728 441 1.2727066134940612 -762 441 -.4166327390645005 -764 441 -.2905593925623464 -766 441 -.2518738008596621 -770 441 1.1159486662557971 -779 441 .6187031567274655 -797 441 .34951586835226206 -803 441 1.1913589773490592 -813 441 1.2881202423172557 -828 441 .3953626341911604 -835 441 .8977845402623381 -839 441 .026350589674686106 -853 441 1.102475181762264 -861 441 .5475194790786466 -866 441 -1.2825193231812604 -868 441 1.7852773887136257 -871 441 1.2025087143888358 -888 441 -.9633611976574578 -897 441 -.7659712684706194 -900 441 1.2589995259486892 -902 441 .2416687977980606 -905 441 .9087624452675718 -948 441 -.45626451012344826 -956 441 .7756385386817689 -979 441 .11596812732024342 -13 442 -.9565544373252315 -20 442 .6261039992602658 -22 442 .14358634132822615 -27 442 .3917064877376953 -29 442 .20941393509441183 -34 442 -.8575255490625284 -35 442 -.2881533071390769 -46 442 .8728435407300786 -64 442 .24972792455055676 -71 442 .5152695239582048 -80 442 1.2781461070822646 -92 442 -.6405669815753313 -120 442 2.5604955027883123 -134 442 -.5713025013302628 -142 442 .782942632302782 -155 442 .026591960738543557 -174 442 .5491263001970026 -206 442 .08589313083866656 -213 442 -.6671562662765188 -222 442 .8462724712560143 -245 442 .6789176912577145 -247 442 .7682988614671259 -248 442 -.3999776893417971 -251 442 -1.6227446211939553 -291 442 .10664088254989341 -303 442 -1.2233578239410203 -305 442 -1.0152604972246657 -307 442 1.2166646631470115 -310 442 .7969926493439118 -315 442 1.7012284689985835 -325 442 .7821406546147751 -329 442 .7000695803094906 -346 442 -.9167262192309831 -348 442 -1.1573603270597967 -352 442 .8286438366766363 -355 442 -.48920941540309915 -361 442 .6409473448073881 -366 442 -.2700311137651361 -376 442 .0979887092500818 -379 442 .1904570897882687 -397 442 .3721026209615637 -421 442 -.5508059810898306 -430 442 -.5554319243345051 -431 442 .6837361458997689 -441 442 -.1521053207598267 -444 442 1.2083228662722774 -455 442 -.8576851141473546 -465 442 -.09811856346538853 -466 442 .04920102419176353 -473 442 -1.8996505357873843 -475 442 .5579809563705918 -487 442 .019673588733715455 -488 442 1.030145991756091 -508 442 -1.0064474612513565 -512 442 1.691210023803442 -516 442 -.663364449567486 -518 442 .3302363732911917 -529 442 .12449384404147343 -547 442 .21188739743655033 -551 442 2.29053324384663 -556 442 -1.3499065142198516 -564 442 -1.052043651069372 -566 442 .5494724211991344 -570 442 -1.3264095066888926 -580 442 .671323409941164 -596 442 -.643691107180218 -602 442 -1.3123711886783198 -611 442 .5576781596084619 -621 442 -.5969006060982482 -641 442 -1.5036568617841146 -642 442 .2886443184133906 -647 442 1.007779456481793 -657 442 -.15493836819219287 -669 442 .2859008417733869 -671 442 -.6718695327141084 -684 442 .2845314430139232 -689 442 .763472919370077 -706 442 .41752590875217543 -760 442 .0287488569292437 -761 442 .1824078303488425 -775 442 1.0044607326976729 -777 442 .02927394769085065 -779 442 -.7178606452396169 -785 442 .767698730699747 -794 442 1.1517400025682762 -806 442 .5804515764312338 -825 442 .21605423312370334 -831 442 .3198891164503774 -838 442 -.02497454885417708 -841 442 .8203644598074932 -861 442 2.2809147042139086 -876 442 .21128191502723664 -877 442 -1.037944348845294 -882 442 -.5770057894603812 -883 442 1.0755663695860231 -884 442 -.6636573506382342 -902 442 -.41353516019002007 -910 442 .3260441775561682 -916 442 .4988943500827641 -919 442 -1.5726442220971633 -924 442 -1.8440450644112014 -927 442 1.8200191106186248 -943 442 -.31040931052077236 -946 442 -.3128127545048826 -955 442 -.7980640162666217 -983 442 .22341161462855705 -993 442 .9641728838246069 -994 442 -.9107042767158248 -998 442 .7015452829465592 -1000 442 .4541988290059645 -2 443 .48887337533664854 -5 443 -.5220358503144059 -13 443 .4383030894931538 -21 443 -1.1282839860398888 -23 443 1.390375838114912 -31 443 .40816482905651247 -39 443 1.9725045072003546 -42 443 -.9444068079875056 -47 443 .16383280186640772 -60 443 .3308684108063382 -72 443 -1.0038730282341155 -92 443 .18628349664236693 -97 443 -.6350977233326023 -104 443 -.10282872211541763 -109 443 -1.0008471982500267 -115 443 -1.0384808169108786 -122 443 .22453773930848345 -124 443 .85602807726299 -136 443 -.23888048272960727 -165 443 -1.1010724210286225 -177 443 -.43932704192782657 -178 443 -.016665587778427138 -201 443 .7432447263388872 -228 443 .30412368725051514 -232 443 -.5403466121530327 -237 443 .34527696310499423 -248 443 -.7185696484678076 -252 443 1.3988982378773516 -255 443 .968408957996219 -273 443 -.5870495531862342 -274 443 -.12703355047693662 -278 443 .5944986165482504 -288 443 .45610436446654357 -291 443 .5996018551693719 -319 443 2.110765346276107 -335 443 -1.1374982813876384 -338 443 -1.1526568586751016 -348 443 1.138946147315734 -356 443 .39886659658688395 -362 443 .3036796150688339 -371 443 -1.1823995863493786 -373 443 -2.4866709773360176 -374 443 -.7643811797479553 -380 443 .049365070402401685 -388 443 2.8745827425223234 -393 443 -.43859027811999585 -398 443 1.1183413937618858 -399 443 -.11924265207328981 -410 443 1.7675588054495823 -429 443 -.5220833430184024 -443 443 1.6420383499562579 -483 443 -.003865087024367081 -490 443 -2.4563276417442084 -500 443 .9136747108816289 -503 443 -.7851132348519143 -514 443 -2.3395248336952257 -524 443 .10246980058627149 -525 443 .15009630290900342 -540 443 1.1955533417113655 -545 443 -.11494468460168158 -626 443 1.4473416562807833 -630 443 3.1482913385159517 -646 443 -.7229269432942038 -657 443 .8576397699242451 -663 443 2.604316750986092 -673 443 -.23442969997351104 -680 443 -.3815643257757103 -686 443 .6656433339414687 -690 443 -.6115401330976438 -694 443 .5462126215815952 -713 443 -.12571757322021815 -719 443 -.29736510615079853 -733 443 -.0026486650738592743 -737 443 .5249416336031411 -762 443 1.2878774085135625 -772 443 1.55041098944246 -774 443 .38553918677193666 -777 443 .9127691923554575 -784 443 .9990121310728088 -790 443 -.030420693333525137 -793 443 .9652481651402495 -801 443 -.7765054323251176 -805 443 -.4917529391128466 -813 443 -.7824950220529225 -816 443 -.6951727874833442 -823 443 -2.1229614543887205 -825 443 .12309265976525526 -828 443 .272199297872901 -830 443 .855632108730424 -834 443 -.21468321810214674 -878 443 .8693569109803758 -879 443 .5933361467154895 -887 443 -1.4370013030503728 -889 443 -.5236101671506167 -891 443 -2.575605188632569 -900 443 -.92464621013268 -902 443 -.2391981873046382 -909 443 -1.4579467386861218 -926 443 -1.4838294535903347 -936 443 1.1179343265491248 -950 443 -.20895572558045156 -953 443 -.5618782437121126 -955 443 .3400438412591439 -970 443 1.0615047632291121 -974 443 .4443537411026491 -977 443 -1.5733083864947663 -990 443 -.37812238497112904 -996 443 1.4526213716831715 -7 444 -1.311515335415414 -10 444 1.1723665702926507 -13 444 -.5889673447972269 -19 444 .06666958537440616 -51 444 .38392568604902855 -58 444 -1.4492469144964024 -67 444 .0746862576968454 -72 444 -.11767199028059867 -74 444 -1.4426542575970904 -81 444 -.22470126012725655 -85 444 .852517672131557 -113 444 .9438128955802114 -126 444 1.0346425318189094 -143 444 1.5760360234757909 -156 444 -.25378704173820915 -165 444 .7860822020088934 -183 444 -1.1430517904560837 -190 444 -.7366686677867414 -195 444 .9685848653430358 -213 444 .06807344695868878 -229 444 -.11564934798920229 -242 444 -.4541706184220304 -256 444 .7491641590539302 -259 444 .9315669486371732 -304 444 -1.293112373898648 -315 444 2.663435861423625 -321 444 -.1595154221951692 -331 444 -.27319319827255206 -336 444 -.7860715657787058 -340 444 -.7200334452721988 -377 444 .7064974641133506 -392 444 -1.5115076751623242 -393 444 1.0885250524168093 -400 444 -.7004172135559683 -402 444 .09788499829188807 -405 444 -.9563384265853057 -409 444 -.8586213162533861 -410 444 -.5928572629339384 -428 444 1.3397526787008014 -445 444 -.16565791421634268 -458 444 -.21680966455134948 -471 444 .7572520416747494 -490 444 .37256019433211274 -494 444 -1.642352726646309 -496 444 .012734201940419715 -504 444 2.168631539208391 -505 444 .006798715704345953 -512 444 2.260402311798773 -527 444 -.9819506300529152 -530 444 -1.0641510129391356 -535 444 .8231993113882133 -541 444 .10168591155067278 -546 444 -.5312413910599459 -567 444 -.4586159922668683 -587 444 .24634671236670735 -604 444 -1.0438281569005579 -607 444 1.722155195102884 -616 444 -.8430166162297106 -643 444 -.3320660868882734 -652 444 .47923344755540354 -672 444 -.9484857264944839 -708 444 .019400048417747756 -713 444 1.5565482355860452 -715 444 -.8584681736510295 -729 444 .029573064006687466 -737 444 .564161795501209 -738 444 -.30482255420283955 -747 444 -.043435492945976456 -750 444 -.14818217586234408 -751 444 -.43344569449935016 -770 444 .21246860760329184 -783 444 1.500254557021298 -786 444 -.017561678216327967 -790 444 .5545955339632394 -791 444 -.35930428155194416 -798 444 .4983147203990882 -806 444 -.23305230720942316 -811 444 -.15476253438428494 -839 444 .110416506542577 -874 444 -1.857189220988237 -878 444 -.9298129229476785 -899 444 -1.1211320024853764 -912 444 -1.3644287271020474 -933 444 .22382970032306668 -934 444 .5893427307082932 -943 444 .4383470346136371 -946 444 -1.184682157750842 -951 444 -.3927333049070482 -968 444 -.47980702327753944 -978 444 -.2516274762448498 -984 444 -1.497008878990395 -990 444 1.0806129369655244 -8 445 -.41093585645714953 -11 445 -1.5322691695049797 -16 445 .7490797066217776 -43 445 1.9572513512441334 -50 445 .8304619869730592 -59 445 -.3811599891663474 -60 445 .9134089315400308 -62 445 -.1991166119893379 -83 445 .4674302062838728 -85 445 -.14362800761993483 -110 445 1.885544901347198 -116 445 1.0164222153089773 -121 445 .7688287220869692 -143 445 -.9997656401926258 -163 445 -1.0656999141424326 -164 445 .18627084726001986 -167 445 .028321190861584952 -193 445 .37770799477416256 -212 445 -.5720785550606565 -217 445 -2.1155314040165547 -219 445 1.5398118905975566 -220 445 -1.6774880749505585 -236 445 .7189485628997907 -239 445 -.3157980569839517 -248 445 .14563584831802923 -257 445 .6708415813693166 -258 445 .3991932261376157 -265 445 -1.6377710517189221 -285 445 .05254530377682884 -292 445 1.3366656504487608 -296 445 -.2401981344119532 -302 445 -2.052861802512698 -310 445 -1.2968018539461434 -354 445 -2.0843936881779133 -360 445 -1.3231822229297436 -391 445 .48366045951446085 -402 445 1.5165215423674976 -403 445 .7135210125830157 -406 445 -1.2674488520363163 -423 445 -.5818038897872936 -438 445 .01617586222582905 -446 445 -.4133083290853922 -452 445 -.9091103461259863 -454 445 .18324898188392724 -456 445 -1.1999448360698282 -468 445 .6755855677807152 -471 445 -1.6887315489797072 -486 445 .4933841935207601 -490 445 -.33459383274012433 -525 445 1.2994812735171262 -526 445 1.3250235017798548 -530 445 -1.4912299902931223 -531 445 -.9468034603543639 -548 445 -.695592688421408 -553 445 -.8596750033891741 -584 445 1.015053246738168 -590 445 1.529579108497315 -602 445 .7567270443528423 -612 445 .17310979483410688 -630 445 .43870299136213065 -667 445 .3823683344704187 -671 445 -.15727334164668194 -695 445 -.6402279309998448 -724 445 1.1551918168283086 -726 445 1.246040515719572 -742 445 -2.187634764976955 -753 445 -.39759689409770615 -762 445 1.5937359891022869 -769 445 -1.327495641774365 -770 445 -2.6022324995127626 -773 445 .589804947881316 -782 445 .2886333408367787 -786 445 .03139445656815387 -804 445 -.4652820502567807 -812 445 -1.02029828705175 -818 445 -.5935870175027398 -824 445 .6206894549908831 -832 445 .35391351819546346 -850 445 -.4730264492334476 -857 445 -1.504672416199412 -864 445 .8230649838232769 -904 445 -.1392365949712836 -910 445 -.04372279074335873 -911 445 -.34814477192272186 -930 445 -.00575814382342775 -948 445 .5262940407219674 -949 445 -.5916898497264858 -950 445 -.032251065495617834 -974 445 -1.0988378801648144 -993 445 1.136675067668739 -2 446 -.4556067445875369 -7 446 -1.271812117288184 -10 446 2.1694175316520954 -14 446 1.035463348196195 -21 446 .27665360818966467 -40 446 -.6640187609391578 -49 446 -.16175550239395176 -62 446 1.3742125901090336 -67 446 -.5595783325540812 -70 446 .15935575697029447 -80 446 -.05675616844166201 -83 446 -1.0361727972354748 -95 446 1.3265866656636462 -107 446 1.0119098163547438 -116 446 -1.223026905698269 -123 446 .48226911038602294 -126 446 .4523182869803289 -128 446 -1.0251719310808654 -149 446 .44141894888606426 -161 446 -.15929809328917197 -165 446 .6360711603971781 -182 446 .7756010591060754 -186 446 -.5034047862946057 -195 446 -.4318148410234831 -208 446 -.4868490032776407 -209 446 -.4366827033585131 -228 446 -1.034577391268288 -248 446 1.2434098438802856 -257 446 -.22158507540263328 -263 446 .28908755578086026 -273 446 .15732120792635293 -278 446 -.6352131414215729 -279 446 .8319124907452758 -301 446 -.3178921703977754 -335 446 1.217839869325016 -364 446 1.4679479390866255 -376 446 .5044583117543532 -392 446 .5055230832129615 -397 446 .12942244699520825 -402 446 -1.0832787521516398 -404 446 -1.5351200422910916 -408 446 .13059671269983236 -424 446 -1.2106875742036651 -434 446 -.11045888728160133 -459 446 .5880775197737943 -463 446 -.3918304889006957 -493 446 .2886466135942909 -510 446 -.5827447130730604 -524 446 .545410674419223 -526 446 -.211047718812539 -530 446 -.5673485143838535 -541 446 1.5353338256295028 -545 446 .9090036497676532 -549 446 .1365721618069377 -597 446 -.4180041007904486 -599 446 .040042231397872254 -616 446 .259089679214337 -623 446 .5304248176586267 -624 446 -1.1104789954961451 -647 446 .1840233627773898 -648 446 .4378338176238996 -654 446 -.29067418645937804 -660 446 .2337857973530693 -663 446 -.6091643264299179 -679 446 .653150831466411 -688 446 -.1432229292837492 -700 446 .10293738580949101 -720 446 .4119983189331494 -730 446 -.42859131455245325 -743 446 -2.405511798861755 -748 446 -1.950024266539444 -773 446 -1.03352897233083 -781 446 -1.624311388758085 -783 446 .4147461546804379 -784 446 .20377712461906447 -806 446 -.5232461536801727 -810 446 -.36431771169050403 -818 446 .013558876478386245 -828 446 -.100340317549276 -835 446 -.14166089436076515 -839 446 .018564420736730522 -840 446 .28578733494182484 -842 446 .3371409760520152 -844 446 1.5368020353785785 -850 446 .6589807252826769 -852 446 -.5648029517283069 -857 446 .4042851214978035 -861 446 .26134731599780625 -862 446 -1.813727132186373 -864 446 .7832769412838821 -868 446 1.1823964565167364 -893 446 .9731117987387177 -902 446 -1.2141049742312704 -914 446 1.3080743195956357 -918 446 .4761238804374517 -978 446 -.5656541865320759 -983 446 -.5449498754411961 -8 447 -.5578684201411626 -9 447 2.0224461000059595 -10 447 .7466183864338449 -12 447 -1.1040942283623094 -16 447 -.39797264757699113 -77 447 -1.3623257276345024 -79 447 -1.5641384765033037 -87 447 .8458301233070404 -106 447 -1.8097603989661617 -111 447 -2.5517578594953223 -124 447 .9005426434052823 -141 447 -1.1483840055056338 -156 447 1.0391417083295444 -180 447 .6198889609273397 -258 447 -.39123475200269586 -261 447 -.2617447215690618 -265 447 1.3985353332646835 -276 447 -2.185415795404152 -289 447 -.5461284178996123 -311 447 -1.931494631370685 -313 447 -1.1756910924062116 -325 447 1.933168430246793 -326 447 -3.8123491715452524 -335 447 -.6410417390496783 -350 447 -.07891862509022868 -368 447 -2.704420680695626 -369 447 .37287303353948276 -370 447 -.4087942867923592 -373 447 -1.4938980632371355 -374 447 .6298832585970737 -402 447 -.42752235272738937 -409 447 -.06665384043925823 -415 447 .34537172385251835 -418 447 1.570630935908173 -423 447 -.25756710660212145 -431 447 1.807955428076988 -438 447 -1.4727299817182653 -439 447 .94254776870489 -446 447 -1.1296931683774118 -480 447 -.37729144474040643 -488 447 -1.7887180056994028 -502 447 .2150039312686991 -587 447 .04118663842586913 -607 447 -.290932192386544 -609 447 .64006826823898 -640 447 -.5863609417366612 -650 447 -.41641934529218283 -658 447 -.4906673396492931 -681 447 -.9364652033205975 -699 447 -.40166145046367363 -700 447 -.560911426450409 -708 447 .14243254081364978 -711 447 .031532687769369676 -721 447 -.35304293368483675 -725 447 2.0553860489427405 -730 447 1.1555064989255168 -738 447 .5941392273251204 -742 447 1.6025733517074165 -755 447 1.221279405953452 -761 447 -.3296166845544864 -766 447 -.6897761667864318 -778 447 1.4773398303122374 -782 447 .37354144846935405 -785 447 .8839701678248936 -811 447 .7794028130007883 -817 447 -.9988857633810058 -828 447 -.0678918504974781 -833 447 1.2893574069094056 -845 447 .04722169011195065 -852 447 -.778909348825872 -871 447 .6358195677393783 -878 447 .6359391153841911 -882 447 1.8033728950229062 -885 447 -2.163705271214418 -889 447 .8107265437985121 -891 447 -1.2496777048076506 -903 447 1.610254832693851 -917 447 -.39427988215201015 -921 447 -2.5207781005420973 -922 447 .6292978692744232 -924 447 -2.2228422020011265 -930 447 -1.4350783871804638 -940 447 -2.3847410525251265 -942 447 -.13018245245767351 -949 447 -.08315032758697169 -966 447 -.5726219301533518 -986 447 2.2073825719357734 -989 447 -.37997728123203234 -3 448 -.20954401469327294 -9 448 -1.3190273339415328 -25 448 -.6827716571426911 -43 448 1.5262303565986897 -45 448 -1.8893403057169784 -46 448 -.7407767444082836 -49 448 -.8113172737908998 -69 448 1.1682778738199766 -95 448 -.9322118477577845 -100 448 .6722277548776499 -108 448 .7548191274440151 -168 448 -2.582798680265426 -175 448 .9780533284305208 -204 448 .46488154820574357 -238 448 -1.4448300839401411 -245 448 -1.0699516211420645 -252 448 -1.0228782690091893 -264 448 -.9995545144734925 -273 448 -.028690907698678797 -298 448 -.7059960636400885 -301 448 -.287809187670722 -327 448 -.6273064960119679 -329 448 -2.433664260071958 -331 448 -.5083522857453363 -338 448 .8465259596212352 -348 448 1.835309534230564 -361 448 -.825761480772271 -369 448 .054441614954879654 -379 448 .37664754140915807 -389 448 .08411969968299132 -394 448 1.0512627469075317 -434 448 -.9121792030475433 -453 448 -1.8643041752595837 -462 448 -.18066026228652782 -475 448 -.9466063362201389 -481 448 -.5134483686670775 -490 448 .7022616276549003 -493 448 -.27780204315450696 -501 448 -3.286124069537744 -516 448 .8032460588680483 -524 448 -1.3463170684939663 -543 448 .15514596658303645 -555 448 -.8817951344579821 -569 448 -1.1024784887416466 -578 448 .3201259531665444 -587 448 -.21711680988958548 -618 448 -.5916490734165513 -639 448 .5483616727353022 -662 448 .15188056039017309 -673 448 1.83516383722363 -676 448 1.3157932125924212 -683 448 .4626388852831964 -698 448 1.4517725068152807 -699 448 1.0253153337245453 -711 448 -.7845657970516171 -731 448 -.3863462174942648 -732 448 .474570526284605 -738 448 -.4144141934366314 -740 448 .8790270922123369 -741 448 1.1475183133628026 -758 448 -.20871034623508822 -782 448 -.05994937430876194 -788 448 -1.766897123066537 -792 448 .9862456784979913 -812 448 .23588525207966896 -837 448 -1.2746872783856966 -839 448 -.09262078905571983 -852 448 .3751934888727243 -869 448 2.741166752899866 -870 448 .21055403707554315 -879 448 -.33096869122534167 -880 448 -.5096800652451381 -886 448 -.14777903512610638 -888 448 .2036082792265483 -896 448 -.16587762013345156 -905 448 .7652152613743977 -910 448 .1920760929611817 -911 448 -.05227090071954005 -925 448 -1.7550911616905076 -951 448 .9427689614772634 -972 448 -.8201153040437617 -987 448 -1.4326757644161225 -993 448 -.3760369420328695 -4 449 -.24443743347739683 -6 449 .546054330620943 -12 449 -.680747374382831 -20 449 .593058556335827 -26 449 -.1064001808323436 -47 449 .3513514121323813 -60 449 .3424219604392064 -62 449 .16002840085971978 -64 449 1.445948962688755 -71 449 -1.223878540801235 -77 449 -.9887957445186358 -83 449 -.8792825613453493 -91 449 -.6597649460534653 -99 449 -.07448827232235505 -102 449 -.8639777338757527 -108 449 -.39790072627316814 -116 449 -.9779048774274851 -132 449 .033212134982535224 -139 449 .9317652960555776 -150 449 -.28205586416994133 -157 449 1.5551350656961542 -160 449 .0032684821894612276 -162 449 .7865729010520154 -163 449 -1.004684353154077 -165 449 -.33763921765887256 -175 449 .06275099366540897 -188 449 -.04702417585150212 -201 449 -.5383575546454902 -204 449 1.0313084481241865 -224 449 .26451511663021854 -237 449 .26055628559863314 -241 449 -.11570459164683469 -274 449 -.3445749549688619 -290 449 -.07830399688941186 -293 449 -1.4019807827804767 -303 449 .3731709876517867 -316 449 -.2606641673769765 -370 449 .04902136090126495 -384 449 -.9645995811500526 -412 449 .465657166653077 -419 449 .8536029098087874 -423 449 .4814364851553605 -424 449 -1.2675974701571495 -451 449 -.03985589168480046 -477 449 -.8518046761772087 -478 449 -1.3421591952424607 -488 449 -.7104087303635505 -493 449 -.894958599598892 -520 449 -1.9495670877847304 -530 449 .47095263653367603 -538 449 -.9299468527849433 -540 449 .7754366032130563 -544 449 -.03944878982536814 -557 449 -.27448920979457875 -566 449 -.7629547781949342 -569 449 .4470587799190162 -591 449 -.9230747282166275 -593 449 1.3500159134083924 -594 449 -1.0998600408733117 -604 449 .35299689652128496 -616 449 -.2644017507830849 -621 449 .19691412694467625 -628 449 .4061750517621826 -655 449 1.2051388157602019 -661 449 -.5020168002401444 -669 449 -1.2254243394766189 -675 449 -.46728512018913526 -683 449 -.3306430486126128 -696 449 -.5866776219539024 -717 449 -.3563365938479808 -720 449 -.3535910710451351 -732 449 -.13637491794923193 -744 449 .1279490198743378 -772 449 .22749879197917738 -782 449 .35383167405242116 -784 449 -.20929412889329363 -785 449 -.5188199203065526 -789 449 .8891657033376852 -792 449 .3149812725582126 -793 449 .7766953096780385 -809 449 -.8955714540644346 -822 449 -.4959894949789655 -828 449 .12576538709438576 -840 449 .548571553535821 -846 449 -.4995207847041771 -883 449 -.44548028862378297 -889 449 -.34168252804782134 -903 449 .5622283827574347 -905 449 -.06613994590737496 -909 449 1.047572738390835 -950 449 -.27187406544633175 -961 449 .7486126498706519 -970 449 -.7343779822885624 -985 449 -.23451620646165408 -4 450 -1.3080120367812693 -20 450 .8770206115664391 -27 450 -2.542923576308912 -29 450 .8533021082148319 -31 450 .7076616798164838 -32 450 -.8450202003032804 -49 450 -2.4399472918269147 -51 450 .030584092971277566 -61 450 -1.2895867621965902 -68 450 .7242664334214479 -82 450 1.9138921303666847 -83 450 -.06070066854302911 -86 450 -.30545472117892797 -88 450 .5704053909475524 -97 450 -3.2350445350049157 -122 450 1.1642997357476208 -135 450 -.6247822308598294 -152 450 2.9727539502880274 -172 450 1.3109549968066518 -174 450 -2.3192928095877234 -187 450 -1.3893287917051105 -227 450 5.113145295167375 -233 450 .5359166597194783 -247 450 -.40188839554430644 -249 450 -.9760665042948197 -270 450 -1.0655070661680253 -283 450 -.145749856360262 -287 450 -.24532220872262225 -288 450 -.03866689998349736 -292 450 1.6760022885410875 -301 450 -2.7400954141369596 -303 450 -2.551414998210134 -308 450 -2.220474307964224 -312 450 -.16264090469920672 -314 450 1.5426328439742065 -320 450 .632978299316916 -331 450 .6894417207353113 -342 450 1.8670024816562614 -343 450 2.2467841860208075 -353 450 -.17784600540074244 -378 450 -3.6586901100620004 -385 450 -1.370080166493509 -400 450 1.2338687307583895 -402 450 -1.6225938620754006 -420 450 .2863416472317739 -434 450 -1.251257444283355 -435 450 -.9985180039623724 -444 450 .6036027762903526 -452 450 -1.164039320592757 -458 450 -.5563944591298036 -461 450 -1.5191909875196663 -480 450 -.9625065747102194 -490 450 .36780348413171177 -499 450 -.299004739233887 -515 450 -2.124083355941536 -535 450 -.9856344308287017 -539 450 .86740723152284 -544 450 -3.1309470967486286 -551 450 1.849004655414259 -556 450 .13211559332953293 -561 450 1.215241211611916 -567 450 .4899882390723635 -579 450 -.07963134720060949 -600 450 -.961566490735804 -606 450 -1.30853500392368 -616 450 1.0006665684662845 -633 450 1.1640392497177152 -647 450 .022070026244817104 -648 450 -.7136195916213981 -649 450 .6851877910411885 -657 450 .2492176216277702 -659 450 -2.552111123961598 -690 450 1.0855860422636434 -698 450 1.386152562298813 -715 450 -.3365939901373307 -742 450 3.007443025472454 -757 450 .05000947561813861 -762 450 .012106535706131571 -767 450 .22284102105621786 -790 450 -.7069764404451386 -792 450 .49992387408414585 -796 450 .19886602145550297 -808 450 .3005376549713343 -809 450 -1.2852848486804604 -814 450 .8682786380262737 -815 450 -.5962843739767331 -817 450 -1.008674651609967 -820 450 2.643943447788978 -824 450 -.979014850150373 -826 450 -1.4751174750620393 -857 450 .35590018370531573 -872 450 -.2085927253457281 -890 450 1.408498051472202 -898 450 .5497541322502884 -904 450 .7498378048148867 -908 450 2.264263962996717 -919 450 .7853051860303463 -933 450 2.3743991884864784 -964 450 -1.2228734744863774 -965 450 .6707693755924453 -971 450 -1.3234455096354378 -972 450 .5526205361260084 -983 450 2.090916641489916 -11 451 .14752151286451318 -12 451 1.4683365840707483 -14 451 -1.8940570059017774 -27 451 .13441575270101008 -29 451 -.23290757181694138 -31 451 .34168602847767804 -52 451 -.01863624690991568 -58 451 1.4184550074781288 -65 451 -.10359020103851592 -73 451 -.4037089252074429 -86 451 -.8135972491219755 -109 451 .37252981898052223 -138 451 -1.7869240985749186 -141 451 .5576219564546869 -164 451 .394003612185435 -179 451 .8383194176647342 -198 451 1.4322971108977536 -200 451 -.817610509863859 -204 451 -1.2899569107937432 -213 451 .40290913273187023 -220 451 -1.0096173771626722 -224 451 -.3622791493368376 -226 451 1.1437105866472639 -227 451 .548640075282139 -237 451 -.9284430617014736 -258 451 .5739856576209339 -268 451 1.6192180000421128 -277 451 -1.451212915612466 -293 451 -.13607554975976344 -296 451 -.9661937056773651 -297 451 -.16600443840863544 -308 451 .7213118033490422 -312 451 -.8127011426161577 -314 451 -.08166137704927529 -329 451 1.2395251133255472 -335 451 -.6169167446467616 -342 451 -.2867090615765071 -351 451 -.13454363859520874 -354 451 -.395030081611381 -357 451 -.47167683000161226 -358 451 -1.4279626983663625 -362 451 -.1924087743195502 -363 451 -.22791162161876777 -371 451 -.4796346954213373 -399 451 -.6286749978854045 -418 451 .5114579336234903 -430 451 .2678191138748029 -438 451 -.28977575928226423 -450 451 1.2641623185695858 -469 451 .10972415360598553 -477 451 1.5664495005576886 -479 451 -.8314580662711825 -492 451 -.7506002771929785 -505 451 -2.0986955388753663 -524 451 .5937910209851868 -526 451 .6438590645632558 -537 451 -.13142681424704683 -538 451 -.4034813532592971 -539 451 -.6381124879605491 -547 451 -.5210043895048394 -561 451 .18098785301797318 -568 451 -.37467318988068116 -585 451 -2.0526213329172442 -586 451 -.7744872228652713 -610 451 .9266115673670302 -614 451 -.8345780695901253 -623 451 -1.0388704138753417 -625 451 -1.1833266334369859 -627 451 1.224510444427633 -641 451 -.4105704212995045 -644 451 -.5678832435096466 -646 451 -.1788259767550016 -652 451 -1.4167046011582478 -655 451 -1.0318662985919864 -680 451 -.8184498365684514 -681 451 -.7451701247282669 -696 451 -.4616194245471036 -699 451 1.2374471752534337 -700 451 -1.062314066402156 -701 451 -1.5149761341321397 -705 451 .8331431685040713 -709 451 .5659176469003628 -715 451 -1.5584842073867533 -716 451 1.834320191050821 -737 451 .19095487659112845 -739 451 .18400710488514954 -743 451 1.5612691116494093 -753 451 -.2797010517896337 -770 451 -1.8630419709928734 -778 451 1.918677972171736 -784 451 1.0230261590631207 -796 451 -.019282706113752893 -803 451 1.0880061727645225 -808 451 .24434110893889643 -815 451 .39363997335350287 -825 451 -.11882135191872548 -833 451 .1782882292887822 -834 451 -.7584985659812084 -855 451 -.7433922191284105 -878 451 .047916188508035015 -883 451 -1.6315522703935643 -894 451 -.5258017072240209 -898 451 -1.056949771463954 -901 451 1.2028182121852253 -908 451 -1.4779996914492166 -909 451 .1342222803299269 -914 451 -.08116148682774213 -917 451 -.8674349197884934 -932 451 .2932066368861061 -934 451 .13096835583972083 -953 451 .29013548024650104 -958 451 -.587561176817477 -10 452 -.029540008022745534 -20 452 .5548968811367712 -34 452 -.6301112215827025 -88 452 1.07718632013515 -92 452 -1.4575474814288987 -101 452 1.9001400446054848 -103 452 1.9584261691548097 -115 452 -.5750418245509149 -120 452 2.4955436510507556 -124 452 .564262623036714 -134 452 -1.215322272737399 -143 452 -.22381120875388993 -146 452 .861721031386692 -153 452 .8132634283242699 -158 452 .28030208892533376 -177 452 1.8485228038645076 -192 452 .5941624614366618 -215 452 .04285922629938244 -238 452 .26922658242510034 -239 452 -.17286956234236273 -241 452 -.9661051304682668 -251 452 -1.685075922007913 -256 452 -1.3663816901304806 -261 452 -.3999369924473662 -266 452 -.33023157937902164 -301 452 .01990828491436089 -304 452 -1.127264697077102 -315 452 .24630045247627588 -316 452 .9174737456092216 -322 452 1.8837799195619753 -331 452 .781794434545013 -363 452 -.6479758166797505 -372 452 .8097818094217245 -374 452 1.8740469891180984 -375 452 -.7226716550303662 -385 452 2.06143377121918 -386 452 -.6552079298696077 -388 452 -1.6185231570861713 -389 452 .7575480746465106 -390 452 .49957063666225066 -401 452 .4053873618515402 -403 452 -1.164662656978576 -434 452 -.051125481945532555 -437 452 -.0015440622973773924 -441 452 -1.4846320962838997 -461 452 -1.5686751703224275 -473 452 -.9225963668474745 -481 452 .3891742900782913 -489 452 -2.0665450183065617 -499 452 .2737216700779677 -504 452 .16856026754643602 -511 452 -.045401722648416354 -516 452 1.1664852237167438 -525 452 1.3358940914445743 -534 452 -1.0473060261010172 -540 452 .22227049319956066 -570 452 -.9208869703635318 -572 452 .9020819710197283 -577 452 .3230227345895949 -608 452 1.3237852215593127 -612 452 -.8800916769207758 -623 452 -.5039618402600079 -689 452 .11596027797994587 -690 452 .8424543392262855 -697 452 -.9733575048887684 -703 452 -.4799192742917854 -716 452 1.1099526190848539 -719 452 .5152883601544848 -724 452 .3656048429347589 -726 452 -.5397138995225437 -741 452 1.428333888196077 -753 452 -1.5954250325985007 -754 452 -.08395126892736986 -756 452 2.2037998061818413 -758 452 -1.2560647622374932 -766 452 -1.7963681168378014 -769 452 -.2597009314165635 -791 452 .7439104939187913 -797 452 1.312105666176498 -802 452 -.6864892884276871 -810 452 1.3339031940365942 -818 452 -2.2117211729857966 -820 452 .4506917509322564 -835 452 -.5531572806137809 -838 452 -1.9171869752056814 -849 452 -.678961508493314 -894 452 1.6021443963672275 -911 452 1.0842499249846533 -928 452 -.44963047474826456 -951 452 -1.879356719239969 -955 452 -1.8199991865864225 -957 452 1.5659557912783448 -959 452 1.1726167432056296 -970 452 -.7675604762782439 -974 452 -.7459726654958303 -992 452 .4619279684048244 -3 453 -1.689588355289312 -7 453 1.0569817960871308 -12 453 .09078176346497935 -41 453 -1.3628582860695941 -49 453 -2.230250276200351 -51 453 .9840501486309972 -72 453 .8552638524342229 -76 453 .5392803035382077 -83 453 -.1058064403080458 -87 453 -.4151436355704585 -91 453 .6321792663859053 -98 453 .09201944848210428 -101 453 1.6230062257042799 -106 453 -1.3816563760307274 -108 453 1.5845582744246545 -116 453 -1.9906883412014096 -121 453 1.0446654958360566 -123 453 .16601059017950184 -150 453 .4845243580704328 -165 453 -.19446916757933114 -193 453 .23410999826957168 -197 453 -1.5750832604393445 -202 453 -.5090989760673212 -224 453 .35415884921963037 -230 453 1.8220782518612093 -245 453 1.2610617330927518 -263 453 -.9549605123389987 -278 453 .8775033910703307 -279 453 1.2736680578689503 -280 453 -.7964432428184659 -283 453 -.10292911615393203 -297 453 -.5237956561385866 -325 453 .34243838146264355 -332 453 .3851586706447489 -334 453 -.08667452127498898 -345 453 -.05799839819012604 -363 453 -.2135215263737818 -370 453 .39223333372808833 -371 453 -.4200502638363273 -381 453 -.6901798080623495 -411 453 1.3947588281611734 -412 453 -.02827346429439191 -414 453 1.0068773688663828 -425 453 -.7125903314569596 -446 453 -.4877662278367723 -477 453 -.30144218783113047 -487 453 .4714499024472422 -488 453 .923673811921077 -506 453 -.26402462385445863 -532 453 -1.3838543606530989 -555 453 -.6850917656901819 -557 453 1.5694337199593906 -567 453 .04895392535187679 -568 453 .6869776612693549 -577 453 .6694406985823342 -578 453 .031068741939699662 -585 453 1.1190377534055092 -588 453 -1.0185144402648418 -589 453 -.04132955649110952 -590 453 -.004520769967042912 -607 453 -.6467087923092413 -627 453 -1.8518795520388072 -640 453 .3183086878455889 -655 453 1.745334482568212 -660 453 .5228773097270937 -683 453 -.48658633316882155 -693 453 -.649561814325939 -709 453 -.14833994673994694 -710 453 -.6900158116385657 -712 453 -1.2041094492050062 -715 453 .7057002308026711 -734 453 .41163870515565554 -746 453 -.17868075129628241 -788 453 -.6306900061490293 -791 453 .22716617150518315 -797 453 1.6556831983845397 -809 453 -1.2091291472969938 -812 453 -.3217957587211998 -827 453 2.3858475040028284 -834 453 .4185888194472607 -835 453 .28290513465011613 -858 453 -.17212655144712796 -862 453 -.9356463449157595 -867 453 1.3712546824202403 -868 453 .025436967285905623 -885 453 .15767875742919882 -896 453 1.1268881306223952 -905 453 1.9061901628867326 -907 453 .6895101626647155 -918 453 .9843794662525192 -921 453 -.15391087225918693 -929 453 1.5027749488280893 -932 453 .07806461648275916 -936 453 .03589102272051355 -945 453 -.6784879145135824 -958 453 1.584913096504483 -976 453 -.24757559781225408 -980 453 .0940742440768455 -998 453 .8771917746587647 -1000 453 -1.617617190811644 -1 454 -.056082270565210264 -12 454 .5581861702106906 -30 454 .6919351559162001 -39 454 -.06054405018394096 -45 454 -1.6593508454325028 -86 454 1.7347081804240516 -98 454 .3862243141308704 -110 454 .19085531298606812 -120 454 1.251831473269745 -123 454 -1.4072405206813503 -130 454 .36338043751815785 -131 454 -.4936060169427416 -132 454 .6221993954991698 -138 454 .25353922033414933 -142 454 .4439967999279519 -144 454 .033162321430020486 -156 454 .15704667391281485 -162 454 -.9380859507294712 -183 454 -.5333061502006563 -202 454 -.4452525359649265 -203 454 -.3380402405047984 -208 454 -.7566951110852554 -209 454 -.35773650451511807 -211 454 .14088269368119508 -215 454 -.31657888930210915 -217 454 .9439227800247015 -232 454 1.1310574926204107 -262 454 -.19090026272821098 -270 454 -.37711947967434983 -273 454 -1.1502532036697042 -279 454 .4362256189833194 -283 454 .08161640117010172 -284 454 .9242173900225805 -294 454 1.3992185817483136 -310 454 .44813068711491244 -325 454 -.5390889822028216 -328 454 .48341591471291806 -335 454 .10585410011145432 -349 454 -.41974477704135377 -364 454 -.8737567358767633 -376 454 -1.636242397683606 -378 454 -1.633993622263261 -389 454 .7544845201335054 -394 454 .2202913155623937 -404 454 .841555394144153 -405 454 .24574871111382116 -408 454 -1.148469058943572 -409 454 -.7560925841650505 -416 454 -.11904195075383625 -420 454 .068667567088317 -426 454 1.4748414344662883 -430 454 -.04600212123922583 -454 454 -.29189762337479963 -457 454 -.04910188918208967 -460 454 -1.1689996926445316 -487 454 1.371560896167417 -491 454 .05330765609014172 -497 454 1.0806938012745442 -506 454 .8594162312974725 -528 454 .0875042147159728 -540 454 .488346157131623 -558 454 .683168826030611 -560 454 -1.0338474255629166 -562 454 .3786978290762207 -563 454 -.3107988733622675 -564 454 1.7618412712400793 -565 454 -1.0493101520245913 -587 454 -1.14111022853385 -591 454 .2886679315991342 -595 454 .850477570788076 -602 454 1.0328790367869496 -604 454 -.004390512103907618 -610 454 .00565396010673852 -613 454 -.7993593987352159 -630 454 -1.151111679116891 -647 454 -.07506559738014983 -652 454 .17337289731441397 -660 454 -.3997402023138981 -664 454 1.6639214793944486 -671 454 .21548865878234547 -685 454 1.8510657431207767 -689 454 -.3156634020585872 -692 454 -.8558288519094167 -693 454 .48823752104633844 -720 454 -.16903304543495215 -727 454 .16542956182143626 -743 454 1.21030971427341 -746 454 .04763161737867058 -754 454 -1.0694741025018994 -759 454 .2653695300003084 -778 454 -.3532162493058335 -807 454 -.1255807761774903 -825 454 -.021988461978695445 -831 454 .8166471632115528 -839 454 -.7582637659481084 -841 454 -1.5243935440021952 -847 454 -1.4992784503712369 -856 454 -.11355955496906275 -858 454 .3081200962154027 -860 454 .3976227631807063 -867 454 .012346271475199705 -868 454 -.8318295359643161 -877 454 -.24310716019821724 -893 454 .5758108360435783 -896 454 .5194067040844608 -916 454 .6741267930609314 -952 454 .0884785965600177 -960 454 -.8380678002488862 -962 454 1.0138953282892134 -968 454 -.47505724634381713 -973 454 -.18082889552271586 -993 454 .6811224269028422 -15 455 -1.1203853653409348 -22 455 .30381593467864465 -28 455 1.350208516238908 -29 455 -.05001081637073576 -31 455 -.08277496808479075 -34 455 .18214474828983185 -39 455 -.209691121873131 -75 455 .7056859788198858 -80 455 -.5142326195380728 -84 455 -.8014241802395068 -86 455 .2729054251853205 -88 455 .21346969637996177 -94 455 .7949465946643111 -105 455 -.15529574852436706 -107 455 .013053601075804024 -115 455 .9593992246087836 -144 455 .058002360355287226 -152 455 .709926261009461 -153 455 .4059600621808004 -154 455 -.27397388521368193 -157 455 -.46784029734283233 -170 455 -1.1088804820481795 -187 455 .5637100550139028 -190 455 -.07432922009549478 -191 455 -.8828275655726077 -202 455 -1.473580030663109 -206 455 .9187541375714333 -211 455 .5652818023849088 -213 455 -.5466429627277168 -278 455 .7361719510348185 -308 455 -1.1778032283343516 -310 455 .188127162859142 -318 455 1.4187215559867967 -333 455 1.3887249824926466 -339 455 2.106841513646682 -349 455 -.9913988157959579 -388 455 -.346313614452956 -391 455 -.9800546465994321 -394 455 .6968177225447687 -415 455 .29112069455853673 -421 455 1.1716008992985305 -442 455 -.05557615531940193 -456 455 .0005584590854030014 -480 455 -.48661879084619636 -481 455 .1716884250561646 -485 455 .3365783501352619 -490 455 .8635668951077646 -498 455 -.23193076005760196 -502 455 .5888260159415584 -510 455 -.9867672471526299 -519 455 .8763712938126933 -527 455 .021644032527042778 -532 455 .6316176901087269 -544 455 -1.1056813250758815 -550 455 -.5952901045829624 -555 455 -.3839575132388646 -556 455 .2072828173286984 -565 455 -.9635935703577599 -570 455 .9630645265452207 -575 455 .5377724568188769 -606 455 -.8816678564987828 -607 455 -.4847715136940096 -612 455 .34391509586898555 -623 455 -.3372254809937234 -644 455 1.316800765029721 -655 455 .6776983664390348 -656 455 -.0015002136014480583 -657 455 .14530138566582546 -660 455 -.29077159816374687 -674 455 1.2372075299078895 -679 455 -.4323126808259784 -693 455 .9983386512235807 -698 455 .5938889433966955 -704 455 -.14827990918464345 -716 455 -.41650172542155933 -734 455 -.8933545102953937 -763 455 -.28340342005730224 -764 455 -1.0604675954268246 -767 455 .2996410054056451 -774 455 .5603248530210381 -784 455 .5642426448610962 -794 455 .24028840175140498 -829 455 .13912270820928846 -838 455 .07824489464600987 -842 455 .21538469314122538 -846 455 .5314133681456692 -847 455 -.52153770960226 -855 455 1.0219596938400186 -867 455 .058018590086088895 -875 455 -.1736368661189717 -896 455 .39461694139533393 -910 455 -.13318892661627946 -917 455 .16546295569514877 -929 455 .8768205081117808 -947 455 .5049635930421794 -955 455 .8822782792221383 -956 455 -.738941811745524 -971 455 -.35159495970195137 -980 455 -.15231733325310143 -983 455 1.01670681352625 -52 456 -2.448467545437173 -53 456 -.21499637443241976 -67 456 -1.1099678933537134 -71 456 .8463799765114035 -79 456 -.8315087357621906 -81 456 1.9319157602959376 -98 456 -.3385619106020975 -111 456 .23034617588336725 -116 456 .03503914499025787 -119 456 1.600758362608535 -121 456 -1.9836154198432845 -130 456 -.31568906201584024 -134 456 -.6342643353021955 -145 456 -.3212246321094297 -152 456 .49320076098717147 -153 456 .36838394526705015 -156 456 -1.4928968660012834 -161 456 2.839709859868363 -189 456 -.054481895745097576 -190 456 .9308525169977975 -191 456 -2.3465102142203436 -215 456 -.29481943984828085 -240 456 2.322491891901047 -241 456 1.3899377114301257 -252 456 .9712382203036211 -259 456 .2821905158291359 -262 456 -.8432744552964461 -285 456 -.8026492261452093 -293 456 2.5938644965367885 -316 456 -1.6153310172088204 -317 456 1.8757075133500578 -323 456 -1.8531536008522536 -345 456 1.7642644321205174 -348 456 -2.0478709157241592 -362 456 2.5634494894470996 -364 456 -.7892936780077067 -365 456 -1.8837473574559327 -366 456 2.5015301618508716 -367 456 1.9958727807706702 -370 456 -.9104148717667897 -373 456 -.7776949785373262 -383 456 -1.6776760792899659 -411 456 -2.8067286936493163 -420 456 1.7053013425130776 -421 456 .9879916126554065 -427 456 -.1277319710215234 -437 456 1.0512847147530764 -445 456 -.28706147742948807 -455 456 -1.4348550779456253 -456 456 .1698905001695758 -461 456 1.5289111049468254 -468 456 -.23545953384149232 -476 456 1.3053445593837958 -481 456 .0027161615887937307 -493 456 .6115082449057575 -494 456 -.7230911632108206 -528 456 -1.1265476384942792 -539 456 1.6893953437495146 -541 456 .8279093095586211 -578 456 -.6851585122261926 -591 456 1.0180189931740153 -592 456 .7408217732911837 -603 456 1.5927167547761807 -619 456 -.8159067120254422 -643 456 .4774432803466665 -646 456 -2.629973941557907 -655 456 -1.052595285913993 -665 456 1.624260021394396 -681 456 -1.098821306761967 -696 456 3.1408623571121135 -703 456 .7976693606951999 -709 456 -1.2518097560655261 -713 456 -1.0145264650651264 -722 456 -2.2830056255118203 -749 456 .27662538681763427 -755 456 .5587501074984625 -799 456 -3.338468377277015 -804 456 .8600740480552633 -805 456 .9749742643312178 -810 456 -.9120310188486759 -824 456 -.6119418532030143 -837 456 -.06195269263299556 -842 456 .26985741235071614 -843 456 1.9784450464558891 -846 456 1.9164132758502368 -848 456 2.8214242318495275 -855 456 1.5468353097834537 -881 456 -1.141763404515767 -885 456 .7605511050583292 -890 456 .9324310810476663 -905 456 -.7169873088370171 -923 456 .5014465350813918 -924 456 -.2061212594665263 -926 456 -.9663305431198723 -927 456 -1.311958833371773 -934 456 1.2291434482891843 -937 456 1.6181582929473346 -952 456 -1.723675073717711 -956 456 -1.4436746691257474 -958 456 .1941955275844659 -973 456 .34829835420821537 -21 457 .7454407842618994 -24 457 -1.4045081152203374 -31 457 -.08442319904745602 -39 457 -.10032155325239617 -44 457 -1.1131363546307402 -45 457 -.15501466963143454 -55 457 -.5785141373401175 -58 457 -.7861056184140207 -66 457 -.6900638451495947 -72 457 .49419321572910524 -77 457 .24697599704366274 -82 457 -.3366800638503941 -88 457 -1.3345767963482282 -103 457 -.7341823402049531 -109 457 .1791320148089397 -127 457 .21975350461257806 -129 457 -.23861983076083537 -147 457 -.642696161098381 -152 457 -.2549860911686885 -156 457 -.07473911220830654 -184 457 -.5394163166652478 -189 457 -1.4576872693482577 -194 457 .7755751922465076 -199 457 -.7445467193480313 -201 457 -.23868622674285492 -202 457 .7333100181861506 -203 457 .5673578015549571 -210 457 -1.0940038192362551 -215 457 -.10343897502275054 -216 457 -.17190309321288588 -217 457 .07383284667430334 -224 457 .19764034695150637 -225 457 -.44323922445952313 -227 457 -1.9970029268061635 -237 457 .26891114357434276 -243 457 .1327521586174218 -268 457 -.4398227846963157 -270 457 -.2878215186680347 -284 457 .2931753959251604 -293 457 .9185196615661753 -299 457 1.0852959285545414 -311 457 -.17039431712300956 -318 457 .45096929877638037 -327 457 .17968002328300536 -334 457 .0725653472916654 -345 457 .7900920955930701 -359 457 -.3266106032502113 -366 457 .028665734515906982 -375 457 1.5841615614704376 -406 457 .8193834222436167 -420 457 1.1531342620728007 -430 457 -.8106060201640852 -443 457 -1.2624219839602229 -449 457 -.8676323366829417 -451 457 .06867515081151636 -494 457 1.1935485694970271 -503 457 .16643463072758086 -511 457 1.6479543187850116 -560 457 -.35242325874247515 -569 457 -.48562674763635616 -574 457 -.007000452483785075 -576 457 -.8745081516853495 -579 457 .8451966814207827 -596 457 -.6844454212293541 -604 457 .10563586067674487 -626 457 .9901439011863957 -630 457 1.8772960878968536 -640 457 -.9526931952643987 -651 457 -1.1715822995254987 -668 457 .4252570540373472 -670 457 -1.3523307230497594 -674 457 -.8042973726788085 -681 457 1.038995791151055 -690 457 -1.5251213306278546 -693 457 -.9814349816087066 -698 457 -.32288724768034605 -701 457 -.32081370825191685 -726 457 -.9865490357263229 -731 457 .6664573826528524 -747 457 -.4152914838699911 -755 457 -.3560562354750043 -757 457 -1.0668163968636974 -789 457 .046798439424516364 -796 457 1.4362868063696317 -801 457 1.2048870965519527 -804 457 .9506667135839936 -810 457 .8585014600003873 -811 457 .03784433687899144 -824 457 1.4072367081948993 -833 457 .7767488464567979 -835 457 1.652765668294936 -866 457 -.414510752691598 -891 457 -.8391053364814866 -893 457 -.7197958350789734 -901 457 -.04212271722099235 -907 457 .4047756877247533 -908 457 -.7555233722251546 -915 457 1.364659406846315 -924 457 -.07190203118087493 -927 457 -.5342365248625084 -928 457 -.08904672343493196 -945 457 -.6563138862451109 -952 457 1.5511392706053606 -975 457 .6709747053182753 -981 457 .8595490951959643 -990 457 -1.1384323885135081 -991 457 -.46951562639781647 -2 458 .7912298604202641 -6 458 -1.6395528394776653 -22 458 -.5618963693725617 -36 458 -.8312309086720153 -37 458 .6295391619423192 -40 458 -.25588848044121193 -42 458 .35619222302596476 -51 458 -.3919560380974323 -53 458 -.4709459301566471 -67 458 -1.8524881588826556 -88 458 -1.2260495818120374 -105 458 .5435359476669824 -108 458 -.8380612872373331 -111 458 1.1231635502156316 -116 458 .19113737959278193 -129 458 1.034645951133775 -139 458 -.8234444925753701 -149 458 -1.1845926705485237 -155 458 .46768601517545616 -165 458 1.479925988411812 -168 458 -.3179013335735862 -170 458 -1.9803747958653983 -188 458 .8176919307275734 -190 458 1.5429434525778958 -224 458 -.05737714236098013 -237 458 -.8743332707602508 -239 458 .5211744976680529 -242 458 -1.4249103955851319 -265 458 .32942983458940606 -272 458 -1.425950924408452 -275 458 1.0971727141100749 -285 458 .49474089358553747 -293 458 1.2327951287621033 -309 458 -.7085751861025193 -342 458 -.7073637178914887 -349 458 1.949421352989674 -353 458 .23306924294147116 -381 458 .7914489375811462 -386 458 .2906146637837411 -394 458 -.9073172897114511 -401 458 -1.796863641251135 -407 458 .8034442831940392 -413 458 -1.4805375971568364 -429 458 .30803148721835866 -436 458 -.19138459194919558 -442 458 -.6795396515755532 -450 458 -1.4566179542122157 -471 458 -.8029396632497328 -484 458 .35513390142302803 -496 458 1.0921153556590963 -497 458 -1.7842229623735362 -500 458 .9371526971407121 -506 458 -.5854667138382827 -507 458 .7638905470219722 -518 458 -1.6329240114799806 -556 458 1.4437943642418978 -568 458 -2.0614530260590964 -576 458 .9979091064213976 -577 458 .8036714175038092 -581 458 -.9716230941056627 -585 458 1.1774721377422457 -593 458 -1.5416557407323839 -599 458 1.8852112996215986 -601 458 .9710947768022106 -609 458 -1.5786228976900913 -610 458 -1.8554792987842006 -616 458 1.9166291988457047 -632 458 1.022911049035787 -644 458 .4142366190380843 -651 458 1.0004691875607477 -659 458 -.7007527468385683 -674 458 -.07971075495005606 -676 458 -.694413061254683 -682 458 -.21978732763343492 -687 458 .7115436608966279 -702 458 -.5663614313057822 -711 458 1.967415065679484 -712 458 1.4155151454095536 -716 458 -2.391874998784533 -740 458 .7714520932983475 -784 458 -.3333901629272177 -789 458 -.4607983396040409 -790 458 .4521384144509486 -791 458 .7665274642235318 -793 458 -2.1640622106212306 -814 458 .1868535907851661 -840 458 -.06471282157536534 -847 458 -2.0378586513284693 -848 458 2.201334313225998 -875 458 .26982960817540647 -926 458 -1.6220963833381152 -931 458 -.28093500207509736 -939 458 -.06001196471640665 -945 458 .764030183166269 -964 458 -.5337102348955758 -978 458 -.25677086452163633 -983 458 1.3202981892762375 -984 458 -.42622527132065996 -985 458 -1.567763785410552 -12 459 -1.1705491242704564 -32 459 1.286921012973064 -41 459 -1.5915882676844375 -44 459 .06806368405788228 -47 459 .3285442296143869 -50 459 -.6838649473618714 -52 459 -.14029775300276123 -69 459 .35906618701328896 -71 459 -2.226958687600141 -89 459 .5821744750698108 -91 459 -1.0125653482604668 -107 459 1.7004728956665145 -126 459 -.19532967664767098 -135 459 .553103260212214 -152 459 .11058554058865214 -156 459 .08197623881527827 -167 459 -.5680471588029016 -171 459 -.8008464286472426 -181 459 .1905786826001493 -200 459 -.11009385551182932 -215 459 -.6053799352631035 -218 459 1.4429435527447552 -219 459 -.27009430973661713 -228 459 -.5532192902467485 -229 459 -2.0437788437804856 -232 459 -.6963383221904711 -241 459 1.11765885811025 -247 459 -.7591798411288584 -249 459 -1.2217400659099973 -257 459 -1.5382031560968197 -262 459 -.4182458143448546 -266 459 -.5576495856988475 -304 459 1.0259098403520468 -305 459 .12798101861724837 -310 459 -1.3284657634199812 -316 459 1.2904592107878226 -338 459 .8501388933428691 -350 459 -.7620560411396048 -362 459 .22509463402632104 -367 459 -.5959476253929281 -372 459 1.3686618623074605 -376 459 -.7121323670329079 -377 459 -1.1314503254654174 -379 459 .9491923951453018 -421 459 .26613634700342226 -427 459 1.2805116676513821 -433 459 -1.038537797123709 -446 459 -.9455969156731427 -459 459 1.9894675320147366 -467 459 -.856552826797129 -472 459 -2.211312850961142 -483 459 -.5376395671867803 -517 459 -1.4878016340769882 -533 459 -.340234083856111 -534 459 .6427173454474434 -539 459 1.2278673518357763 -552 459 1.6073768817046314 -562 459 .8927682513737294 -584 459 -.7886258830796046 -591 459 -.886791482950272 -599 459 .020967317947049063 -621 459 1.292552691186096 -634 459 .480797600910002 -648 459 -.4420174508306507 -654 459 .6771801039693113 -657 459 .6836114284005014 -680 459 .6108710438770276 -683 459 .9407990079834976 -719 459 1.3842881377976695 -759 459 -.5138330979026284 -776 459 .2184361467665453 -778 459 -.7962168753414233 -782 459 1.3575334172701679 -786 459 1.1768464801517635 -790 459 1.3900627775013175 -792 459 .9064453096410203 -807 459 -.13545205190558124 -810 459 1.919791235704271 -821 459 .35332699178921145 -832 459 1.6064115577934244 -833 459 .5473175096533858 -843 459 .1093859205963639 -845 459 .7749076590247823 -847 459 .9268593025780524 -859 459 1.3270860695875142 -862 459 -.22633115159603812 -891 459 .7884842174617578 -899 459 -2.5624349185987305 -913 459 -.7565638974684521 -915 459 .8619667617153954 -921 459 .8707703402406632 -923 459 -.2697136113384251 -955 459 -.6754625277457211 -965 459 .6524273153445304 -967 459 -2.9221972652328443 -978 459 -1.23356773742843 -988 459 -3.2265249370771745 -989 459 1.1171715241202782 -992 459 .3166753207173578 -5 460 -.12701129732480668 -23 460 .555379673046674 -56 460 -.5024868803058948 -67 460 .0679400853518391 -70 460 .5809887989611564 -71 460 -.2505108236380635 -72 460 -.751937162415601 -78 460 .7700496282288705 -85 460 .5620239653041182 -96 460 -1.770954954204496 -103 460 -.731764020321119 -155 460 -.32811380456366473 -160 460 .880371456998258 -181 460 .8740622162610076 -198 460 .0411257170050382 -199 460 .5600036538513072 -236 460 -.17687499436531848 -240 460 -.001479729357149448 -249 460 -1.1852856997666097 -257 460 .4573602868594988 -272 460 -.4974341660665885 -285 460 -.7680130972879207 -315 460 -.27379358384870767 -322 460 -1.0706128360881535 -323 460 .7511787976103346 -327 460 -.9645647933480246 -352 460 -.2282668653961432 -356 460 -.5168485080559418 -360 460 -1.6119941640853432 -363 460 .003214917112683617 -370 460 -.03134307471072982 -378 460 -1.404564850562399 -396 460 -.554070046144947 -408 460 -.36415693306330854 -446 460 -.4593571042056962 -450 460 2.325766072936719 -451 460 -.10992241234232064 -462 460 -.39067183888256984 -485 460 .932254179832044 -497 460 .01903288215271548 -498 460 -.8278024531988153 -503 460 .7214608768342576 -512 460 .4095024663399898 -521 460 .2330346810807175 -545 460 .5494636199734044 -553 460 .02884390914230575 -579 460 -.4155389027549862 -593 460 -.11381883008149171 -614 460 .05186625123232594 -628 460 .04669509479479543 -645 460 .7281978999288712 -650 460 .8507574674486976 -659 460 -1.2952663943249305 -661 460 -.3284073728725827 -663 460 -.18959253073732735 -666 460 -.9594254242637912 -670 460 .0921743824840987 -696 460 -.2686635282884768 -717 460 .7745178110409704 -719 460 .2694535137925923 -729 460 -.3840611057133575 -763 460 -.32224783638160637 -773 460 -.9955572823467614 -776 460 1.1432112714543265 -782 460 -.39587622418710755 -806 460 .16116804771483403 -809 460 -.43916028293976805 -811 460 -1.0585357134095479 -816 460 -.041528839996518324 -828 460 -.8375306456253019 -829 460 -.0548500967413606 -832 460 -.5237655779892892 -833 460 -.3399407196617743 -839 460 -.21815331354669681 -843 460 -.01054744515123035 -879 460 -.04733948757258599 -881 460 -.4848827380375064 -888 460 .7226623839622873 -889 460 .0031456665486673807 -904 460 -.26556536698298705 -907 460 1.4386499451075119 -915 460 -.5649107589135157 -924 460 .9639244515909707 -938 460 .8862255429817077 -943 460 -.3766640119955791 -970 460 .01764733321319538 -971 460 -.2072670011485194 -974 460 -1.5078948446995053 -991 460 .34333337424498817 -19 461 .0823285120228851 -36 461 -.02584026150086216 -40 461 -.14934008141210156 -81 461 -.24398920171683786 -88 461 -.08484109629327102 -106 461 .13561238445200124 -120 461 -1.0923210359986544 -128 461 -.6797157148718547 -131 461 -.11527500295349613 -139 461 -.22738346762914674 -151 461 .2077813290982068 -165 461 -.4976114460449868 -167 461 -.15658894039942833 -185 461 -.3416127511221279 -190 461 -.2658890827664004 -196 461 .9539618373021329 -198 461 .6994972894182235 -220 461 -.9530031555551276 -250 461 .546395858384142 -257 461 .018956587184231592 -272 461 .07194630237686575 -273 461 -.8333726841058412 -293 461 -.34790645551790067 -305 461 .20977415390234513 -331 461 .02538555113776371 -344 461 -.25571078123555513 -349 461 .0054529719490148745 -365 461 .3532385155058913 -380 461 .04894324994074495 -404 461 -.5071972428878107 -426 461 .6601346407812623 -442 461 .012205561902720041 -452 461 -1.1789637063047895 -453 461 -.2995191677633863 -454 461 .4567292280988982 -460 461 .6118496046416353 -465 461 .7854951590323984 -473 461 -.36175055670662787 -479 461 .04794074306562156 -485 461 .011192398888307212 -547 461 -.5046132399647874 -554 461 -.15727117737195628 -555 461 -.8836075987506555 -559 461 -.28852301843044953 -583 461 .8253918338307197 -585 461 -.07157117641595703 -605 461 1.5603463657089542 -628 461 -.9647063259265666 -636 461 -.5264491042809798 -661 461 .9296252161781562 -677 461 -.6854072468375776 -708 461 1.2205534422181852 -732 461 1.019347122510819 -747 461 1.0263349071527534 -755 461 -.2382787239276053 -769 461 -.9208833291862759 -818 461 .6342266517271539 -834 461 .3398059297523638 -841 461 -.1342430802560447 -862 461 -1.2506594639898552 -865 461 -.42989436074668735 -866 461 .4227875701839455 -869 461 1.651887423367026 -871 461 .5182753411653307 -896 461 .7139844402077364 -897 461 1.3186627844054488 -901 461 .09215076313790609 -903 461 .4664678335907211 -905 461 1.164730438867502 -906 461 1.227259235968255 -927 461 .5700013237435659 -944 461 .7661663096350956 -947 461 .10486937135235307 -964 461 -.5622653536889529 -981 461 .0842265970013655 -992 461 -.34363333331904333 -6 462 -.35909290944780536 -9 462 -2.604016818109314 -15 462 -1.0865729394407575 -19 462 .7973558150904809 -46 462 .6838040658079124 -48 462 -2.5028021580085493 -66 462 1.551011410436441 -74 462 -.45375139037015644 -82 462 .6367095666126944 -94 462 -1.5071465009837568 -96 462 -.47882937103391776 -106 462 -.04593938703565845 -107 462 .1370795253278002 -111 462 -.5848828256431791 -114 462 -.7669591913296949 -126 462 -1.877568045302339 -143 462 1.6077406776096619 -146 462 -.8297904695078369 -148 462 -.17762659544544082 -161 462 .43658442525385016 -164 462 -1.0579651673026396 -173 462 1.179646131280984 -176 462 -.35594185322362465 -182 462 -.2700674437088108 -194 462 2.547404790033877 -197 462 -.2722585030046301 -204 462 1.9297098246702833 -212 462 2.6050529271825584 -217 462 2.2500832821447325 -223 462 -.5961381819950385 -231 462 .4167095610324536 -251 462 1.2251843845788084 -253 462 -1.275880428322568 -277 462 -.8015844394722046 -279 462 -1.8243994891953614 -299 462 -.20348113734686354 -302 462 .7167764990667077 -307 462 -.18423941833565513 -313 462 -.42043230096013956 -318 462 .26419468767440546 -320 462 .0308316342313382 -332 462 -1.073264218586032 -356 462 -1.9230182208217017 -364 462 -.43005436292868715 -379 462 .704081377055181 -392 462 1.3388695166725721 -404 462 .5527689149701168 -431 462 .024480469656267573 -434 462 .7859180691465906 -455 462 .9962146717301652 -466 462 -.9899122726533957 -474 462 1.2434881549652406 -483 462 1.408555601241606 -490 462 .6453191163026033 -505 462 -.13517366894883398 -509 462 .7580170866160051 -523 462 -1.5990997801648956 -526 462 -1.0235661916069096 -532 462 .2840339441604489 -539 462 .5840828879734413 -552 462 -.17912796763509353 -579 462 .09539183820317496 -582 462 -.06418468265340058 -591 462 .7378008049340237 -595 462 .23672001830245118 -601 462 .2611883276011487 -603 462 1.7927603137984265 -608 462 .5285716848466517 -621 462 -.10111926478236055 -622 462 1.1569669633650235 -628 462 1.9729654370156882 -654 462 -.6208707650212211 -673 462 2.679942850638486 -684 462 1.925352048834604 -689 462 -2.444268699465691 -711 462 -1.8276419521294325 -718 462 .7180552725946188 -731 462 -.3794417854513803 -732 462 1.530539876964526 -741 462 1.0828105929300527 -743 462 1.1485051838678537 -751 462 -.009540833862907352 -753 462 1.5347669527429566 -760 462 .869294295621972 -809 462 -1.0231248184326505 -819 462 .060590398921335886 -830 462 .18233676842764962 -840 462 .9321232766235112 -842 462 .8048227004979684 -892 462 -1.5156358347246865 -894 462 -1.257025655248124 -896 462 .7080598419614583 -906 462 .28899698298561316 -916 462 -1.0477810701077699 -921 462 -1.33548530425377 -926 462 1.0320340528927423 -932 462 -.8339299833615702 -933 462 -1.7349488049689794 -949 462 1.6699521807544784 -950 462 .49813311678047845 -955 462 .45441520605731195 -978 462 1.9127040165031037 -983 462 .3184074646166439 -995 462 1.3005729376832504 -5 463 .3194005537847259 -24 463 1.2807811416695238 -36 463 -1.434472983506363 -37 463 -.10945616876826163 -38 463 -.7983960549099325 -42 463 -.10604465400710303 -47 463 -.20330212563933142 -55 463 -1.6034967261802973 -60 463 1.1116741439779043 -68 463 -.04637478782909518 -78 463 -1.065885438890762 -80 463 1.6019444190137317 -92 463 .2153285931152354 -99 463 -.9234630337362623 -120 463 .29035043360592966 -160 463 .22954116877138864 -162 463 -.030760249467284152 -177 463 .34487113120286617 -179 463 .08483345930338379 -194 463 -.5714849839041978 -202 463 1.66858762014341 -209 463 .8490050541706823 -212 463 -1.8006355601342983 -226 463 2.1258285026396155 -231 463 .2566184290102997 -234 463 -.8604153612341268 -306 463 .21484135037958416 -309 463 .8444805777568698 -317 463 .6278067190926188 -324 463 .9395944783206926 -335 463 -.46634248261675465 -340 463 -.5827307762402906 -343 463 -.08916706823722553 -349 463 1.3937906941152514 -351 463 -.9837274901995716 -360 463 -.8050174415568251 -380 463 -.5330867458968219 -409 463 -.5910610621882073 -419 463 1.8934608709677114 -433 463 -.9403388966839653 -438 463 1.2704344362872373 -439 463 -.10487363419248129 -451 463 -.6908983586201428 -459 463 .8784795019839091 -473 463 -1.313814261426221 -477 463 -1.663833652669287 -481 463 .25371099173320233 -489 463 -.8264117501440574 -490 463 -.33085494745086164 -497 463 -.9258796370460334 -501 463 -1.03887575479163 -511 463 .28342018865989804 -519 463 -.7560055906894221 -520 463 .1933667557925375 -527 463 -.20113574701330295 -538 463 .1040626451178104 -555 463 .2048281107120172 -557 463 -1.1444115003735422 -564 463 -1.0197415701679193 -577 463 -.32974030431099555 -581 463 -.3064541686932055 -597 463 .04321112923236652 -603 463 -1.793126138684941 -605 463 .43433217167035654 -612 463 -1.4130053321426914 -616 463 .7598685155149747 -619 463 .43863630920011604 -629 463 .4817367082121443 -654 463 .07724273837249232 -657 463 -.9300105224024042 -661 463 .42528150941566356 -663 463 .053561191398865254 -667 463 -.5139092121591116 -719 463 1.1596968001388184 -748 463 -.8759491466729632 -751 463 -.8013280405480047 -753 463 -.8880289621976852 -760 463 -.7556089544755442 -766 463 -1.6178452862563588 -776 463 -.04371589687549948 -790 463 .285298174663078 -817 463 .2827447093000456 -822 463 .7503827336753928 -827 463 .47412225419300347 -872 463 .02276729886394782 -878 463 -1.0473502514838982 -890 463 -.4244688562343026 -896 463 -1.3285789321362491 -916 463 .4076246703015991 -928 463 -.8084998962486792 -952 463 .5293220172825939 -954 463 1.0522928296573415 -958 463 -.5358835752891538 -968 463 -.08676259560290348 -972 463 .5034044407744949 -976 463 -1.335769316012408 -985 463 .07059117886114283 -990 463 1.733143201619366 -8 464 .7252721647133169 -17 464 1.1454085363661242 -20 464 -.35938409545147687 -28 464 .20406243342042157 -31 464 .2687808464131466 -41 464 -.22248900005788327 -46 464 -.4468210144624736 -47 464 .5942560437254598 -53 464 .6963211141807332 -66 464 1.0894284400115062 -83 464 .006074297423036001 -105 464 -.27922429721506115 -117 464 -1.5250103329992193 -127 464 -.6130430194088305 -132 464 -.27690343552713786 -143 464 -.06914582392536113 -170 464 -.4904229063339834 -172 464 .050696999809434415 -178 464 1.288746950798601 -179 464 -.3974508627183887 -181 464 -.03485890698605219 -185 464 -.6206936811242068 -202 464 -1.240176823824011 -204 464 .03492043160508968 -216 464 -.02823303025211129 -230 464 .01826543345924738 -253 464 .015622119823375233 -255 464 .9320264891419394 -260 464 .16103548793925368 -261 464 .9632566015501333 -267 464 1.1127539726554527 -270 464 -1.5834953444042554 -272 464 -.5392421939316512 -280 464 -.717515504401961 -289 464 -.47647686566833697 -300 464 -.18048536046775454 -316 464 -1.4135127208288556 -331 464 -.02966254226993084 -337 464 -.4231371444646882 -338 464 1.1081671849598504 -358 464 .7305889981150429 -360 464 -1.2429028647640392 -362 464 .4279083051968433 -393 464 -.5959132562567729 -398 464 .3446079801364015 -399 464 .47767952359636023 -400 464 1.1144600646378302 -410 464 .5992856776931195 -448 464 .3258486203970209 -452 464 -1.4681603729131731 -456 464 -1.2824250442856622 -471 464 .182105788263668 -472 464 .3844599416052749 -475 464 -.6306041818589274 -479 464 .32357805361932584 -489 464 .6601890338042223 -502 464 .6936357230229794 -506 464 -1.6752442966702792 -514 464 -.034361483769112314 -521 464 .6419442966102238 -526 464 -.36394092897045804 -529 464 -.23221829802559482 -534 464 .4222755746832808 -537 464 -.07169758777502412 -538 464 .21585929131916537 -610 464 .9704431440671154 -614 464 -.9697023228096816 -627 464 .586855674486362 -632 464 .2579319715117078 -635 464 -1.7062314744798466 -645 464 -.7701738849326105 -662 464 .2772725214673802 -663 464 .1439438543552084 -668 464 .08295372195324059 -669 464 .08059131580590725 -688 464 .9597145350645738 -707 464 .09725699811058172 -709 464 -.3820007784559908 -720 464 .27913424245321394 -729 464 .21396620266328192 -746 464 .28425520995309433 -752 464 .22867392677865267 -756 464 .031193943072133606 -765 464 1.5602119534213903 -769 464 -.305889236972196 -770 464 -.2149697579709311 -771 464 -.5414528671380114 -773 464 1.216886784986233 -804 464 .4609744189592536 -806 464 -.9134394416352437 -818 464 .2120086927135838 -833 464 -.13271736585913757 -843 464 -.48567863765406527 -853 464 -.14141923076183652 -878 464 -.4641732235065939 -879 464 1.2320995602260743 -885 464 -.49610002457874586 -890 464 -.18961509746109795 -899 464 .25925428840278264 -921 464 -2.01082862255869 -927 464 -2.148398428195023 -931 464 .4625125977931109 -938 464 .8729455128148067 -953 464 .7715101938487033 -960 464 -.21201949990577612 -961 464 .5982131898445572 -984 464 .5618635195698395 -989 464 -1.0352699425344936 -999 464 .7502917968138031 -49 465 1.7892220156838587 -55 465 -2.044609921804918 -65 465 -1.785593862601531 -74 465 -1.0055500129025376 -85 465 .9918462096946823 -91 465 .18484270441867823 -148 465 .20843477491751825 -160 465 -1.2412982634324876 -165 465 1.093020315706586 -172 465 -1.0477976215723268 -187 465 -.5279470344703707 -197 465 -1.5520353575752743 -199 465 -.15537271859239699 -221 465 .8361564170968528 -226 465 2.1425558270238536 -237 465 1.1175661874891905 -255 465 -.27752040477898704 -267 465 -.3068095950077978 -281 465 -.30781131188725386 -290 465 1.0138441535688958 -292 465 -.5126620747110968 -314 465 -1.1441851392150475 -319 465 -.7580165576766934 -320 465 -.18596995646641878 -328 465 -2.019915753963148 -345 465 .6771834910742613 -356 465 .41279600046824433 -364 465 .8670994148531639 -379 465 2.400569085824822 -384 465 -.9909698594776494 -386 465 .6153494572949469 -420 465 .9328091432019533 -423 465 .4258231343629252 -431 465 -.15937651328584174 -452 465 -.45093571167974317 -472 465 -1.8734725961645533 -487 465 .701618387764894 -491 465 .7118486239146722 -495 465 -1.4764290010246892 -516 465 .35884166736422507 -533 465 .0905414394179736 -536 465 -1.008323694917243 -542 465 -.9202634078707665 -556 465 -.04807961541651608 -559 465 -1.0396371559468685 -563 465 -.11340392641210768 -572 465 -.4884228821169121 -588 465 .22928288534983488 -592 465 -.4529715127649846 -595 465 -.7169138735183056 -606 465 .31271722035475025 -609 465 .07786765186582996 -628 465 -.4718068462962954 -630 465 -.11194207067623907 -647 465 .4655523562451981 -672 465 -1.8731094718186831 -685 465 .5432350643785114 -710 465 -.04811949523198204 -714 465 -.7933674098743486 -717 465 -.4557207317208271 -722 465 -.7119645142443057 -725 465 -1.853167174088432 -732 465 1.4496796566230568 -734 465 1.5817057433566264 -735 465 -.14735657593331095 -743 465 .2192388013103311 -753 465 .09950884309367863 -762 465 .3141738342238177 -763 465 -.9332657679708163 -771 465 1.18320344524136 -781 465 -.8354958987153824 -800 465 .43487721298205856 -803 465 -1.8616241560697504 -806 465 -.16603231008868619 -832 465 .93836485233626 -833 465 -.41777980851463303 -839 465 .6100941534109525 -869 465 1.533885181671929 -876 465 -1.9005111549482272 -878 465 -.7826089293145353 -906 465 .31775144791929816 -907 465 -1.6585338532711726 -909 465 .6145157310466123 -914 465 -.9835652001245516 -922 465 1.213918980907825 -942 465 .7754063139372313 -943 465 2.8391773553875503 -954 465 -.8642584603840343 -964 465 1.9599732202366251 -965 465 .5062427452338458 -972 465 .8196193100311697 -989 465 1.1018579110909483 -1000 465 .1593239571501018 -7 466 1.9001956426183713 -45 466 -.1931079135794519 -78 466 -.08354711364095456 -81 466 -1.2642416965390986 -88 466 .1539911094615938 -95 466 .09858581310105746 -96 466 1.1196293210846446 -111 466 -.8555919655504687 -112 466 -1.4987230741365416 -133 466 -.5855686351879188 -136 466 -1.646169570813274 -139 466 .24812386948112602 -146 466 1.4031112942521795 -149 466 1.4427268609609039 -158 466 .771408608465702 -161 466 -1.4027134436816857 -175 466 1.252309726011624 -179 466 .5649136491734194 -181 466 -.6998129467874067 -184 466 -.8645565921694566 -185 466 -.6183260336585092 -190 466 -2.085504960526427 -203 466 -1.0758275384981701 -213 466 -.23682213408608765 -218 466 1.316145127019952 -231 466 -.4842810232567981 -237 466 1.458894176659318 -258 466 -1.3067679988236056 -267 466 1.819778221983129 -272 466 -.118036111891735 -276 466 -1.7479586540676288 -283 466 -.15648314493748056 -287 466 -.9538980712145898 -300 466 -1.1924428794397173 -324 466 -2.323339277384543 -328 466 -.2640115996911059 -355 466 -.3316772696893379 -363 466 1.7021341378877899 -365 466 .05792573564855444 -411 466 1.1059255496730105 -443 466 -.5905662837038227 -453 466 .4925426953930878 -465 466 1.6402225724362212 -466 466 1.022736942122252 -510 466 .460586334472196 -526 466 1.0550498359075338 -537 466 -.5739647678586439 -538 466 -.44665283728085936 -559 466 -1.1821994106987583 -570 466 -1.3771993549994153 -571 466 1.4018070227580064 -577 466 .45103306796073833 -580 466 -1.3101913665523246 -582 466 -.2901265485974868 -622 466 -.9791806365710372 -651 466 -2.7907181500866347 -657 466 1.0419559463268633 -658 466 -1.5650667066771773 -672 466 -.5774039481955007 -696 466 -.5332006392598918 -703 466 -.3370248293722461 -728 466 -1.9430195290304422 -729 466 .801811919423004 -730 466 .5523636452484679 -732 466 .9852716178282322 -738 466 -.5888982367077774 -742 466 2.1124698688586894 -745 466 -.2767164472318073 -747 466 .8323055822431927 -772 466 1.5084060027790014 -775 466 -.46379569055892467 -785 466 .5623726045298001 -786 466 .9731588703638717 -789 466 .39993703124045604 -796 466 1.181589439909863 -798 466 -1.7749264650033965 -807 466 -1.182885078813059 -812 466 .362761740423854 -814 466 .20686827031667065 -818 466 .24798348169042797 -839 466 -1.1300519235605782 -844 466 -.30981060901020707 -847 466 3.1059621809285773 -875 466 -.8581606421596001 -879 466 1.6710994115301903 -886 466 -.9413454933927075 -888 466 -1.2649576328664105 -891 466 -.12381425415072866 -903 466 .5630493565896683 -906 466 1.4498082667990397 -911 466 1.4044008470152631 -914 466 2.049068259996488 -935 466 -1.7738734057662433 -940 466 -.6304789522921049 -986 466 1.8291222843412334 -987 466 -1.7526260719150357 -991 466 -1.6291982715538482 -999 466 .05576198112385406 -23 467 -.7120661364640827 -38 467 -.238801985631395 -44 467 -.11210500610504877 -50 467 .020024534048643544 -75 467 1.7395483610344007 -99 467 -1.2953670378668722 -103 467 -.34398571334550976 -109 467 .7658114617374747 -113 467 .257805263272008 -130 467 .46073882818696543 -135 467 -.9960867150059531 -149 467 .7466419205762898 -168 467 .6958667856854908 -188 467 -.06690380819709374 -205 467 -.21706788577167824 -212 467 -.014857646962093796 -242 467 1.2166703165424804 -243 467 -.3135013630455637 -255 467 -.8049466671409871 -284 467 .47554172535512285 -291 467 .2807622315873817 -300 467 .3928185449529288 -302 467 -.10760425725742503 -314 467 -.07814755601757004 -319 467 .2878462973658295 -321 467 .46862771589740404 -338 467 .3846085794227825 -354 467 1.4056349224112323 -383 467 -1.0596601338163965 -406 467 .9146368489705202 -409 467 .5727820883237741 -410 467 -.4883223283114391 -454 467 -.8660618804502251 -460 467 .4758703150924568 -488 467 -.0007935316243610976 -496 467 -.21512367172948396 -512 467 .7930295930040442 -518 467 .7695184597192491 -545 467 -.16459551070033795 -554 467 1.7468943899370128 -557 467 -.4828287222445302 -558 467 .7067744912599924 -560 467 .15229436517835943 -564 467 -.6024833912403634 -584 467 -.2582247231265381 -590 467 -.8371616296758777 -594 467 -.7356506746876925 -595 467 .9610229972041576 -596 467 -1.2906655240808276 -597 467 -.3820561373227459 -609 467 .14632987254307578 -630 467 -1.3065160607311277 -661 467 -1.164327041577899 -668 467 .6386733360136839 -683 467 .39149539208596795 -694 467 -1.0072866744197524 -697 467 1.100749698573786 -719 467 .1755912212242312 -739 467 -.5136634181005411 -744 467 1.198021183958637 -765 467 -.1724705534806889 -771 467 -.635532934706115 -783 467 .7606429418178041 -795 467 .47216131768551084 -813 467 .3788893937563916 -826 467 1.3310904869203775 -828 467 -.3077920298066076 -857 467 .5146399806514479 -869 467 -1.4938233148391258 -877 467 -.3186543778738247 -882 467 .17893298159270032 -883 467 -.5814539630991493 -898 467 .257326749291428 -900 467 .5127922365425557 -901 467 -.7964630964549251 -914 467 .5646314726341495 -920 467 -.9198690176664737 -934 467 -.7755537239224176 -938 467 .394283883927671 -955 467 .5846730572813887 -957 467 .22819346994805742 -959 467 -1.178179609707468 -979 467 .10038094924185162 -12 468 -.25014489468773127 -30 468 -.867326648329616 -39 468 -1.0570794113339663 -55 468 -.33991465582276037 -57 468 .05337047556452755 -67 468 1.1484909484855736 -68 468 1.0054698857567685 -69 468 .6172058743489247 -80 468 .5548887068915396 -94 468 .7188628363869236 -101 468 2.519103876621089 -109 468 .6645567094457785 -110 468 .030929107362597713 -113 468 -.025921770360561786 -120 468 -1.5007613136353437 -123 468 .6404075694606313 -125 468 -.7333337240810924 -136 468 1.1812139873315624 -141 468 -.4532590754138423 -143 468 1.079824076233535 -154 468 -.5988073906664418 -167 468 .9482939696540928 -187 468 -2.231501802367353 -238 468 1.0624276724364803 -241 468 -.8704697926738462 -263 468 -.3841288396332439 -267 468 .7322608004235112 -272 468 .24202856091223002 -276 468 -1.33707663744041 -300 468 .2163551454255503 -314 468 -.24919877097032245 -331 468 .01789531186469326 -332 468 .08884706299407963 -335 468 .39705751094940683 -350 468 .28738042933118113 -354 468 .6264188915624036 -359 468 -1.3841250847614988 -379 468 .2822540044683829 -388 468 -1.1368612949698313 -392 468 -.6715120263327838 -398 468 .7045611079168307 -414 468 .055370904722087236 -418 468 .024893191694275105 -454 468 .1529261129633951 -492 468 .8426211326690055 -509 468 1.0559114197414385 -515 468 -.6052796578068071 -521 468 1.2727049426912358 -527 468 .5053425860827992 -531 468 -1.0733040249436416 -535 468 .20071893582841158 -540 468 1.186668352539402 -544 468 -.8699290701581809 -576 468 -.2237104789763974 -596 468 -.20182009177395877 -597 468 -.7779009640836415 -617 468 -.4646904813391933 -621 468 -.4531778668144664 -625 468 -.9048626791190031 -642 468 -.11114819898247469 -657 468 .008006919381753602 -664 468 .7827401607458699 -689 468 -.926067364053137 -694 468 -.6207853206378822 -696 468 -1.2852521264821555 -702 468 -.020055097934288252 -705 468 -.281669789530106 -714 468 1.7003226962529725 -719 468 .012881754136049611 -721 468 -.31618574803718846 -740 468 -.8848887233278493 -741 468 .5604307124519544 -743 468 -.16058073545216064 -747 468 .512126573656776 -753 468 .42728435794998054 -754 468 -.06433922035911187 -764 468 .032534201620666905 -779 468 .2537735518042784 -783 468 .8820502392290136 -791 468 -.7723473501275135 -796 468 -.1888861486734596 -809 468 -1.3345228568554173 -810 468 -.43486491942314454 -830 468 -.6530287063181959 -834 468 -.2882820177693297 -836 468 -.09736538189790782 -851 468 -.5503441682641805 -856 468 .26212769596795954 -860 468 -.2142387926561079 -863 468 .8018318707290416 -878 468 -.9086769607606444 -881 468 .6488993634915107 -904 468 .6188341779519446 -913 468 1.1810715864746006 -924 468 -.4530372830539053 -932 468 1.5750358546204706 -935 468 -.5816083698120461 -939 468 -.12189940448190537 -946 468 -1.3104087638651214 -957 468 .3915943402281912 -963 468 .020650712232716487 -966 468 -.6422538517734347 -967 468 1.5716918542405438 -981 468 -.36775510791452415 -989 468 -.8000797018880951 -3 469 -.8835452603137722 -24 469 -.08736400804466699 -31 469 1.0896931869788224 -33 469 .6016103015639965 -47 469 -.2571539872747617 -51 469 .47980396108873963 -61 469 .5931603295514507 -77 469 .8371079775087525 -104 469 -.29321680731721556 -121 469 1.1676506008766123 -133 469 .29352563460461045 -142 469 .2616886594908323 -152 469 .006800780122607708 -153 469 -.08857313145842256 -157 469 -.2744336773709821 -168 469 1.4939929832977499 -170 469 -.0030427146336559907 -171 469 -.04244140273627746 -175 469 1.2733126677375823 -184 469 .7894492557684397 -192 469 -.054911000002137667 -201 469 -.47495898617125876 -222 469 .28050045680696795 -231 469 -.508366265023835 -241 469 -.5789190793944115 -243 469 -.10005122265982269 -250 469 .493935762680961 -259 469 .9653804802946206 -261 469 .5059247950125924 -263 469 1.5408346964218347 -269 469 1.8605856508805352 -274 469 .9989666590337601 -279 469 .8115242295116756 -286 469 1.4659414873092462 -315 469 .0403004310925876 -322 469 1.7129748001907905 -339 469 1.2990605325230833 -341 469 1.0391616049586032 -343 469 .7065401335951051 -346 469 -.1620302606533081 -347 469 .3570206795652087 -363 469 -1.3583771998125003 -368 469 .25610569119096827 -386 469 -1.1300521347260835 -398 469 -.7023192863100371 -401 469 -1.0748007275806057 -414 469 .8611372855854895 -420 469 -1.6694644429206065 -425 469 -1.618507410157453 -440 469 .6646907014097029 -447 469 -2.268481833963812 -475 469 -.2917086409115339 -480 469 1.0358368583502902 -482 469 .6490727961381799 -519 469 .4072291427275881 -540 469 -.5224765286356295 -549 469 .8262129954004724 -551 469 .9938527649985622 -560 469 .39799808621805927 -565 469 .6314440438990117 -577 469 1.2287861498784958 -593 469 .7075908427366698 -610 469 -1.82080386082562 -612 469 -.9515462486591795 -636 469 -.6311741464794504 -646 469 .7747071919133385 -679 469 -.16117131185583483 -685 469 .8350327250866527 -695 469 -.3387937141298242 -704 469 -.5173390275304863 -715 469 -1.0830879181670086 -737 469 .563590142010522 -746 469 .0419543865335458 -749 469 .5557923924515946 -751 469 -.5869099478553313 -754 469 -.3530983587077018 -775 469 .6196151051715959 -783 469 -.2629427595509429 -799 469 -.529808880042522 -807 469 -.25353623517286816 -809 469 -.2273725001845091 -813 469 .5583260318304044 -822 469 -.3031713865268 -823 469 -.4036216825679417 -824 469 -.4530310619345254 -825 469 .05749425445681645 -839 469 -.03944213200960964 -850 469 -.689840226725968 -876 469 1.8843439544951204 -884 469 -.05541618633460817 -900 469 -.09476152399421911 -915 469 -1.3373515902616993 -917 469 -.08993337055570857 -920 469 1.3629203750937804 -922 469 -2.0078790158581956 -926 469 -1.3153239229157772 -935 469 -.1507405101126907 -936 469 2.1291518985845386 -941 469 1.772111141512746 -970 469 -.0778359237005742 -982 469 -.14826425310135893 -7 470 -.31283560659327936 -13 470 -.29047956379704315 -25 470 -.4144341295296411 -44 470 .4937589448586758 -50 470 .37697308131768364 -54 470 -.10497687348912804 -61 470 .10396721385065022 -89 470 -.19245776234433443 -97 470 .6674573464551259 -127 470 .6450038057245507 -138 470 -.9164671421801716 -170 470 .269638377063888 -189 470 -.4959862587911856 -193 470 1.0107090991670742 -199 470 .47290153066532387 -201 470 .6607994545162019 -202 470 1.0648539959175114 -221 470 -.8737476510285453 -222 470 .08684805420261264 -247 470 .6545713284224219 -253 470 .5223638847082992 -256 470 .8089836164645766 -265 470 -.42436500668517096 -269 470 .6579739086705304 -280 470 -1.219037631459626 -294 470 -.7115048756274668 -299 470 .7872400292245617 -353 470 .41369967153356174 -361 470 -.1777149361725509 -367 470 .4796652676698645 -382 470 -.4572709810272818 -403 470 .0009451111207651507 -414 470 .04797103256545477 -441 470 -.778517149106407 -450 470 .7621619038814328 -483 470 -.2580911014826839 -505 470 -1.5352449180943024 -527 470 1.3563856432121024 -529 470 .19938041995435274 -542 470 -.8428866189402725 -572 470 1.3196511077643405 -574 470 1.1743888957600497 -575 470 1.2280203444035733 -595 470 -1.598158484184142 -598 470 .5778229594926907 -609 470 -.6015495692257595 -613 470 .8072478972232662 -619 470 -1.0876500540860918 -639 470 .8013967543121354 -642 470 -.7193621686874917 -643 470 .10227161234552412 -647 470 .968724865238567 -650 470 -.011525698595364606 -651 470 -1.7113264482233863 -653 470 -.42563528830469993 -664 470 -.05561861236952584 -673 470 -.15381172930898399 -678 470 -.534716556367426 -711 470 -.7089095216190608 -755 470 .37037308129552926 -785 470 .5644386845585728 -810 470 -.39503918527661336 -811 470 -.6434719312044714 -814 470 -.9867745506922078 -818 470 .25173167156151566 -821 470 .17783479271679298 -823 470 -1.5280239867080414 -827 470 -.1727228314848831 -837 470 .47819124885327247 -838 470 2.179874861499144 -851 470 -.476162925563403 -852 470 -.18221708826735647 -862 470 -.6937521337282759 -875 470 1.174876143457912 -884 470 .5496099589634483 -886 470 .3154310211155209 -896 470 -.04025722799773344 -919 470 -.24606167083025865 -931 470 -.32912027986415276 -957 470 -1.5480794064776255 -968 470 -.7124481432802224 -974 470 -.5870237118729995 -988 470 .874291897435725 -999 470 .5124278724158792 -2 471 .6174648974106847 -3 471 1.1093543962198171 -10 471 -1.8603900249330994 -22 471 .5386460313382149 -32 471 .1581593641032449 -43 471 .13613335102430155 -56 471 -1.0538135104697612 -59 471 1.0886206704925856 -64 471 -.8669170908691943 -65 471 1.1678597314300394 -66 471 -.13159413393071429 -82 471 -.8884338924619316 -86 471 -.7621312074998079 -92 471 .7313349737307724 -97 471 .5889282115725262 -115 471 .6775102676696962 -125 471 1.8222940860749344 -128 471 1.1857797338446874 -133 471 .18473264116345978 -141 471 .6263288826146937 -176 471 -.046185438649669314 -193 471 .3740094229190065 -200 471 .15680479422179938 -205 471 1.3188722094416903 -206 471 -.8530239731058221 -207 471 -.06792022600267494 -220 471 -.43723410362082293 -222 471 -.02321265976984002 -227 471 -2.266809940895476 -251 471 .5366442686236862 -255 471 -.4243116686462975 -267 471 -.3513503075472442 -278 471 -.39539620749850785 -279 471 -1.3744703404792016 -304 471 .07488657579981339 -309 471 .6314401081071641 -318 471 -.1861393756976634 -321 471 -.42660131010442337 -332 471 -.4709007102821644 -344 471 1.5297868396937064 -368 471 1.2528194750047827 -379 471 .4933236875802064 -393 471 -.6584794994723777 -402 471 .3490334484089438 -424 471 1.046970864995583 -430 471 1.2400603518978552 -445 471 .29536427923957403 -455 471 -2.1680062457683014 -483 471 .6152113842843113 -524 471 .915638341071622 -552 471 -.13333826741841787 -557 471 -1.036837857154099 -563 471 .35007811960390595 -568 471 -.7535467488545033 -579 471 .24602448295928964 -586 471 .03062101274167632 -592 471 .3010665743866824 -594 471 .2945007321315801 -597 471 1.468019512722621 -601 471 1.079280748924462 -606 471 -.09944892824275398 -609 471 .01302635582316318 -613 471 -1.3204372864231226 -614 471 .012800009897311906 -619 471 .7614411914038608 -627 471 1.2897764961997065 -639 471 -.7115630116067873 -640 471 -.17816555682406404 -650 471 -.7603732486690266 -659 471 .18735086793264988 -666 471 1.2449908215333363 -669 471 .0837097752491151 -678 471 -.601341996057869 -680 471 -.7300329683616221 -681 471 -.05837079238234394 -698 471 .019631362590089553 -699 471 1.1427676429673668 -706 471 -.5008722989063266 -710 471 .2854377094515605 -720 471 -.012947023249552575 -726 471 .9688369121067585 -743 471 1.3859408395689072 -746 471 .14476766975712008 -747 471 .29639377525431626 -749 471 .027078252643473282 -759 471 -.26775360619352906 -782 471 -.7648017371674964 -784 471 -.21397936962460365 -794 471 .21324676359936207 -798 471 .3791392516376244 -806 471 .6481014014574957 -815 471 -.3920103582959875 -823 471 .19379826208748643 -826 471 1.0843533125075053 -839 471 .40625973630395384 -856 471 .37547428066937455 -859 471 -.5002418403523031 -868 471 -.3781447677798043 -871 471 -.783597800657462 -911 471 -.06585655470501836 -935 471 .8190902538593694 -944 471 .26249929469043376 -950 471 1.0916607197152333 -953 471 -.013998138994229192 -960 471 .7417327504034297 -967 471 -.9033701358238372 -969 471 -1.2927642795374006 -974 471 .1258621574445693 -976 471 -.5536630142836618 -980 471 -.5322084780226666 -990 471 .18232026119031178 -1000 471 1.4682455249279682 -11 472 -.053305824189168446 -16 472 .10929903139341238 -34 472 .7618319646581158 -46 472 .6759475971493795 -54 472 .28131245809736466 -71 472 -.45250844236860027 -72 472 .6142637538658136 -122 472 .22912709480138715 -127 472 -1.3051442167514171 -131 472 -.3283886670952576 -132 472 .09684802569109618 -143 472 -.034371230398959104 -154 472 -.4205386147114389 -156 472 -.6789658546220407 -169 472 -.5440506596545734 -174 472 -.20881204570140408 -182 472 -1.1433620388911208 -193 472 .14471682294397367 -210 472 1.4709449742328617 -218 472 .6843021192440486 -228 472 1.6270831288547773 -234 472 .9836970233256449 -255 472 .5815938311697345 -270 472 -1.713077385433018 -275 472 -.8215882130354278 -288 472 1.734770120482475 -295 472 -.5918676760185417 -300 472 1.1282199257302752 -327 472 -1.459757011065302 -333 472 -.8121058263913191 -346 472 .8637514953181129 -377 472 .4580973304013753 -392 472 .8087166496608408 -395 472 -.4665341583482587 -403 472 .13162222416083175 -417 472 .17324810094725498 -439 472 1.551960414397613 -463 472 -.33936803823630796 -482 472 .05347264797700501 -484 472 -2.9572613142006263 -485 472 -.019225065768513183 -487 472 -.13357614678203109 -499 472 .7864840542214327 -510 472 .12061672424079656 -522 472 -.5025947869758634 -526 472 .5696563636617062 -528 472 -.2654915568383125 -544 472 .5175529843385696 -561 472 -1.6396709269198702 -562 472 .7324307636230976 -570 472 2.5717799620980752 -577 472 -.1558571796270711 -595 472 -.5825426881389079 -600 472 .893955245478465 -601 472 -.8479581932335205 -618 472 -1.1165998484387583 -620 472 -1.0984411609013645 -624 472 -.08640547338970468 -632 472 -.8028853048278264 -648 472 -1.4165384845321052 -667 472 1.8710408705959327 -668 472 .25680356770421303 -681 472 -1.277917921687986 -689 472 -2.5727668829790353 -729 472 -.7358088744998106 -756 472 2.040456775733182 -760 472 -.5044843084906945 -779 472 1.8524861433980875 -785 472 -1.932339547187809 -793 472 .15371949294116188 -799 472 -1.1069347284380697 -807 472 .5965900476956124 -809 472 -2.6101109973425425 -828 472 -1.9280136855129382 -842 472 .6605989655940498 -872 472 -.6986765563267461 -884 472 .07219384076684146 -885 472 -.2835580183511215 -897 472 -2.1813778665913053 -901 472 .6176717668705122 -915 472 -.7523616870183149 -919 472 1.8873797942373298 -924 472 .6038377504086289 -926 472 1.2786493723773966 -945 472 1.4475584897936011 -946 472 -1.1758901219762357 -957 472 -1.1310646773432684 -958 472 1.5954300687636842 -980 472 -1.9157954585530876 -989 472 -1.019429251605513 -23 473 1.4973918370694717 -35 473 .5438112713699715 -38 473 -.3409691996656888 -46 473 .9275621691473693 -53 473 .5992497519601682 -60 473 -.5905545421510165 -66 473 1.8985281031871688 -74 473 -.5777625910535009 -87 473 -.8478839175984665 -109 473 1.2927455889807509 -121 473 -.5427206300695544 -128 473 -1.2243828499410159 -139 473 1.2731048918662302 -144 473 .30083108128807584 -153 473 -.25244324955686437 -175 473 -.9566816795766703 -181 473 .5246027280846188 -197 473 .12206097446113465 -212 473 1.1990689109511061 -213 473 -1.0587074649576642 -218 473 1.9078580849242996 -250 473 -1.5421024200504188 -257 473 -.32410975200532116 -265 473 .7406175044251737 -269 473 -.7505717240861404 -288 473 -.9860329650821078 -324 473 -.3634846354009136 -327 473 -.13180483309937724 -336 473 -1.2349696794792515 -356 473 -1.232368420770586 -362 473 .721772301058419 -368 473 3.1498201229618417 -408 473 -1.6459872072316726 -416 473 -.1853661914360341 -418 473 -.07041140312376347 -420 473 1.4671812504104436 -423 473 1.0661782910411484 -430 473 -1.2788218551040136 -441 473 -2.243944138667173 -480 473 .6707009215974582 -505 473 -.2925467052149166 -515 473 -.8719790154337395 -516 473 -1.2534797968114748 -530 473 .8006242383429372 -599 473 .4722011045374647 -603 473 .26488348576211546 -609 473 2.117579519110159 -629 473 -1.7880668190776448 -634 473 -.6403302020204928 -635 473 -1.0177972671931377 -640 473 .23399734034106587 -643 473 -.23025464138514626 -644 473 2.629193057019839 -654 473 -.932926096901951 -656 473 -1.995731173090856 -657 473 -.4142985647665309 -658 473 -.22595661758645427 -672 473 -.024207075342109495 -674 473 -.28046659250686906 -701 473 -.49759404654244044 -702 473 .2055604035963278 -719 473 1.3351385955847563 -736 473 -.9689542809281144 -760 473 .5934710117678282 -764 473 1.6094403603880434 -768 473 .29775392194497735 -774 473 .0016006943095590725 -776 473 .8831552464938783 -777 473 -1.663491420847856 -789 473 2.10647652936044 -798 473 -.7336839498154027 -838 473 1.0629054943960972 -852 473 -1.535827147320398 -865 473 .3683853502569391 -888 473 .23539060523990374 -908 473 -.9767935405044221 -920 473 .34098741768368557 -922 473 .7526244451519418 -924 473 4.297360847366909 -929 473 -.8153792796584439 -941 473 -.03644559379663884 -952 473 -1.7008339975436024 -962 473 -1.9265539045934328 -987 473 -2.0369814805246973 -993 473 -1.3383542616025617 -1000 473 -.9509740426951812 -3 474 .795388607181433 -11 474 -.010813211742531248 -15 474 -.25860229667552787 -16 474 -.6299198156054029 -19 474 1.2601122280353083 -41 474 -.4627923612709861 -43 474 -.9518608082580384 -47 474 1.1453772992660123 -49 474 .16313005751670884 -53 474 -.04495087745926743 -54 474 -1.5099806533153572 -55 474 .4459159457457961 -86 474 .9487366757900877 -90 474 .6972678230538361 -122 474 -.14254762219903383 -129 474 -.6709606448108802 -133 474 1.190104309769261 -142 474 .9710665538176212 -157 474 .5096391700919187 -166 474 -2.0285902365728985 -167 474 -1.9473591720765948 -170 474 1.0116424473912906 -180 474 1.3233068098841345 -201 474 .8715298475718365 -208 474 .7142870398078377 -256 474 1.272108419520696 -259 474 -.3657515353111114 -262 474 .31231134750512535 -263 474 -1.366005905715075 -284 474 .26091008520683606 -289 474 .7556218923922334 -306 474 -.32516658387226965 -311 474 1.0935852986747918 -324 474 1.0538753868057904 -340 474 -.06958925154396303 -351 474 .12465241833563105 -372 474 -.051021485733090455 -373 474 .876760708937868 -374 474 -1.4324155647754715 -402 474 -.7465931759743221 -427 474 -.8057253981553794 -439 474 3.618765495675306 -452 474 -.7551424255566529 -454 474 -1.1257072408617164 -459 474 .5467388672710249 -483 474 .9710272073664665 -530 474 2.61988937640923 -531 474 .38051284893443926 -532 474 -1.316333752059188 -545 474 -2.193675253847983 -558 474 .2768646764401313 -560 474 -.07826279588628404 -562 474 1.9812739186236907 -567 474 -1.2381802583334545 -570 474 -.9031388336464871 -579 474 .6275802860919348 -584 474 -.7642773842066862 -585 474 .268931274425139 -597 474 .16375916096790658 -600 474 2.3768347525978606 -652 474 .3564406390561105 -656 474 .22193306502357682 -666 474 .06208586029862391 -667 474 .7666610289434176 -689 474 -2.1273659444785666 -718 474 .380681635681063 -725 474 -1.391078352854821 -733 474 .7513082860116862 -735 474 1.7084414421744145 -740 474 -2.011178453345396 -752 474 .8133059498661174 -783 474 -.2620122618382744 -788 474 .19160046957661123 -802 474 .4205400236591436 -818 474 1.2804662010794476 -855 474 .3789462434124893 -870 474 .4488236677029212 -883 474 .19097202864640866 -893 474 1.7488410504345817 -899 474 .021218477568928418 -901 474 -.61606630627558 -903 474 3.6100621329352753 -917 474 .0008586555875236407 -919 474 -.02054639227784652 -933 474 -1.0954478193879178 -936 474 -.9625274358842991 -938 474 -1.0033213825643543 -939 474 .04649665705623837 -946 474 .2735159263340333 -957 474 -.6604956395582717 -965 474 1.8475025093479867 -968 474 1.544140619733195 -984 474 1.0930666237429971 -2 475 -1.1277674058639287 -18 475 .4266357840827938 -20 475 -.4418295067796402 -27 475 1.4781737172640683 -33 475 .20153477329528308 -46 475 -.5115940312509839 -57 475 .048002068965356574 -73 475 .4240877638795836 -86 475 -1.141143457914012 -87 475 .7305352813758881 -96 475 -.8220993971541493 -104 475 -1.677259596181009 -122 475 -.16928622138890312 -124 475 1.417904613541395 -127 475 -.473168314143676 -135 475 .5561306184768273 -139 475 .2988845377430984 -156 475 .41977688135199376 -178 475 .7711811259644693 -181 475 .015177944780112038 -182 475 1.2166390448883018 -199 475 .43980214751190644 -203 475 -1.0895356910571328 -204 475 .9964727006576293 -215 475 -1.6505102153455782 -230 475 .96088607466285 -243 475 -1.164750643361491 -248 475 -.2784549564914292 -261 475 .5786178030842662 -265 475 1.5044049499992485 -287 475 -.21515745455203208 -289 475 -1.4373458089915456 -305 475 .4131196805468485 -313 475 .23807306984512583 -316 475 -.6379587516768224 -325 475 -.09014426001743245 -332 475 -1.423923710931191 -342 475 .7104760787393195 -351 475 -.6149899630112452 -362 475 .23047238962515165 -366 475 -.13739983444324289 -370 475 1.0460858929153611 -373 475 -1.5493156000361186 -377 475 .7633055278770101 -383 475 -.4063582049997677 -399 475 .6838495899986274 -403 475 .35199805110088717 -417 475 .3838751899210861 -429 475 -1.832994327200961 -437 475 .2689394713099911 -440 475 .4771399414567287 -459 475 1.3200009560672907 -461 475 -2.2913342170416686 -462 475 -1.5765150691656171 -463 475 -1.7472655405179252 -478 475 -2.0159565658384926 -491 475 -.1207048455101955 -506 475 -.6302875090573367 -514 475 1.0292365383382764 -518 475 -.5098600526208261 -527 475 .9216597179050499 -536 475 2.411318464939127 -552 475 .04379414675452625 -556 475 -.3369734579347067 -578 475 -.5001248713609681 -608 475 .5976535149473071 -625 475 .6530145656374896 -628 475 .1468568677532704 -632 475 .389625985784963 -637 475 -1.1494893931130623 -650 475 .12072805249086119 -661 475 -1.6352936624218783 -675 475 -1.6084361791715325 -686 475 -.3630590620932222 -700 475 .057563573327607205 -745 475 .12267400846899383 -747 475 .9084279863256342 -765 475 1.2259709400996064 -772 475 -.07633791954650083 -774 475 -.24670708017065462 -784 475 -.3973870392436083 -791 475 1.0027748208216059 -798 475 .02594808550273478 -799 475 -1.218352095896824 -833 475 -.3191329367700879 -846 475 -.08384195339880168 -849 475 -1.0578272371063424 -862 475 -.5363904517646736 -869 475 -.5275560799273434 -881 475 .8118280170151708 -884 475 .20246248803665268 -893 475 .7399167755284817 -897 475 .2518876512679068 -901 475 -.8003280785424253 -902 475 -.2276135255760859 -914 475 .8513739940848453 -937 475 -1.1117399216478816 -959 475 -2.493865253557752 -966 475 .49749432150271816 -968 475 .4200585466785451 -971 475 .4687518024216142 -978 475 -.7791992464033797 -990 475 -1.0663267488266674 -23 476 -.7256114477433762 -25 476 -.10933087035755658 -30 476 -.7844358238033003 -40 476 -.6668674909907666 -49 476 -1.2285368783027646 -62 476 1.9486160603237188 -63 476 .3404756201218528 -82 476 1.4309025219243423 -92 476 -1.4278700689702324 -99 476 -.3607232944547688 -107 476 -.18407508650820747 -122 476 .49960543224398374 -143 476 .40455796577759456 -154 476 -1.1938503730664145 -168 476 1.4575412052245786 -170 476 1.3036824358261139 -188 476 .7239930805368264 -196 476 -1.8035156015687759 -199 476 -.562767718936386 -200 476 -1.5052877457361629 -201 476 -.7370169126013487 -204 476 .8418618192989897 -206 476 .17806027266561594 -224 476 1.543182361758488 -233 476 -.6566689999592414 -246 476 -.2625331539099631 -253 476 .06991495095957259 -274 476 -2.546617348347436 -280 476 -.651869648040814 -283 476 -.6978639420456946 -296 476 -.2108158960005322 -323 476 .9823881629937361 -355 476 1.4266349977964439 -391 476 -.5345115543151298 -399 476 -1.2527636612272783 -402 476 -1.0372249357646897 -431 476 .2639447723114095 -435 476 -.6168820270981716 -454 476 .7260503565390442 -455 476 2.2878496133261326 -460 476 -1.1494500226317932 -461 476 .6064601796110499 -463 476 -.36214936587723123 -468 476 -.8586145706152883 -476 476 .3922642649065767 -495 476 -1.3861298322707143 -499 476 .7765969332060917 -503 476 1.2867405213915408 -516 476 .05411039471985801 -518 476 1.2685221651232808 -540 476 1.0975236649084057 -548 476 -.6790279341618409 -576 476 -.44058669878788964 -580 476 -1.5381844565590248 -605 476 -.20299577391828466 -617 476 -.07298333647429156 -618 476 -.5482796156680856 -640 476 -.5660854743540815 -646 476 1.3930201335180368 -656 476 -.5848741280415003 -660 476 -.9395966616640022 -662 476 .4388165426375 -703 476 .051250476889811894 -711 476 -2.072406702235078 -714 476 .0715170237582185 -726 476 -.5678604570516267 -734 476 .03834479777272133 -741 476 .38968561270655266 -743 476 .2523875172704763 -749 476 -2.219017461975941 -756 476 2.625595008481554 -764 476 .6632583351407829 -775 476 -.2118824014813316 -787 476 .9512432259130934 -802 476 1.4125548600196731 -810 476 -1.4903310022379186 -834 476 -1.1273197766017677 -840 476 -.20666339006384027 -865 476 -.06492662671646698 -881 476 1.40997761695086 -889 476 .34379930418061594 -907 476 1.6785455532753553 -924 476 .014702767677543964 -932 476 .04999459448789468 -964 476 .6813896073701898 -1 477 -1.5284640457786574 -10 477 .3194883704243422 -11 477 .0172314994609557 -13 477 .24151839266702546 -19 477 .048867404901791194 -20 477 .6052572508534084 -24 477 -.8650867915442089 -28 477 1.541218781254949 -38 477 -.1744607319621166 -57 477 .7865115810080737 -58 477 1.469749560415851 -67 477 .7716331198221338 -71 477 .30432082570028685 -76 477 .7752980233528519 -91 477 1.4008669676002297 -92 477 .03791773019926308 -126 477 2.0277021102795922 -135 477 .3083884550837212 -145 477 .8592749667408498 -152 477 1.2592738584645204 -160 477 1.2276494783527068 -169 477 .4215373609571973 -179 477 .6152808346210337 -185 477 -.07966567395097487 -201 477 -1.8574033041728335 -212 477 .3023044244465908 -218 477 -.060506869848568956 -222 477 -1.1733460775924187 -253 477 .21947831041006355 -259 477 1.167179753104947 -268 477 -.034632245063000125 -271 477 .17789562196847272 -279 477 1.3369655609598854 -301 477 -.43054484366084245 -310 477 .07311977912722854 -328 477 .6490845185839653 -342 477 1.5431083741826053 -343 477 .5118429774571277 -344 477 -.7631430672823979 -373 477 -.1755273334436947 -396 477 -.6061406480842078 -416 477 .13851159261485727 -440 477 -.5005851732954134 -444 477 1.3582614821707457 -452 477 -1.3350154374527348 -458 477 -2.9072647811767767 -461 477 -1.1592848335600223 -472 477 .957863793174011 -483 477 -.6083182727674489 -485 477 .04479183614032656 -497 477 1.233945022737796 -505 477 -1.764974772166756 -506 477 -.45896020292653833 -512 477 .24371774302471055 -514 477 1.5670914669668665 -525 477 1.6947763215450726 -528 477 .6185407942227268 -530 477 -.4558319818227683 -543 477 -1.0394575241339183 -564 477 2.5203211223464956 -566 477 -.13675351328288085 -585 477 .09218354478949861 -591 477 -.48026742003411516 -603 477 .7888550706953793 -610 477 -.44266215705982975 -611 477 1.9963546167981097 -623 477 -.9550571948243858 -624 477 1.660669075166592 -631 477 -.3542976105586043 -634 477 -.42494010125678106 -662 477 -.7532399578773331 -664 477 .6487781922205594 -676 477 1.189450860966402 -689 477 1.4812855473616269 -718 477 -.8354665183876093 -736 477 -.6275206322816195 -737 477 -1.0246438139189546 -741 477 .8221353867692888 -744 477 -.6073663963395831 -746 477 .5317414726264511 -750 477 -1.995958886266798 -754 477 -2.014464915603018 -756 477 2.317960434372034 -764 477 -.8336699792711175 -765 477 -.7658263615716189 -767 477 1.694686801854245 -792 477 .8473160803590976 -794 477 1.6081354077657362 -796 477 -.9644052966122063 -821 477 1.0076509726582268 -833 477 -1.4186022824570528 -835 477 -.7708829009670366 -854 477 -1.8214540004357305 -897 477 .03912206455398239 -902 477 -.7196170288402157 -907 477 -.2424252039847457 -909 477 -.7938621215274989 -928 477 -1.7123188101667857 -941 477 1.8177182799719271 -948 477 -.5456070516465448 -963 477 .3194454699535156 -993 477 1.7512531550043542 -20 478 .5263172810819544 -31 478 .27458147995355514 -34 478 -.10693003909705236 -36 478 .8455273490542511 -40 478 -.7389733176120818 -47 478 -.8808278257669073 -51 478 -.4204051649046895 -68 478 .22850192595508328 -79 478 1.5238679187874657 -94 478 .5105637907409097 -106 478 -.5502832561673614 -114 478 -.29999760243912066 -135 478 -.16250449320092344 -141 478 .3437160968580807 -148 478 .018634504435671682 -150 478 .5676916475886759 -179 478 .7781967454778903 -180 478 .3148937135115164 -187 478 -2.8320190554484688 -208 478 -.561310495947881 -209 478 .539403827630104 -216 478 .34333016543229433 -258 478 -.3083205589139805 -271 478 -.9671066892836493 -274 478 -1.605046431908191 -310 478 .6017789789023974 -312 478 .19652576279753192 -320 478 -.18337292529719262 -324 478 -.279035109275012 -329 478 .056557291369406903 -334 478 -1.3225362498180027 -339 478 -.11380477627099017 -346 478 -.5687866157132984 -355 478 .04416759069372721 -362 478 -.3149416446924482 -367 478 .20827090193550452 -372 478 -.34542385817834614 -382 478 -1.525631722987309 -388 478 -1.6685599526454467 -393 478 -.636522119684656 -420 478 -1.3672336426626341 -430 478 -1.2419034146294838 -438 478 .13427875196186748 -443 478 .7153289576224935 -454 478 .860060953363783 -459 478 -1.2711845678067188 -471 478 -.1298688359902418 -473 478 -.7779426337657316 -479 478 .11347476881520642 -504 478 .703259676783874 -508 478 -.3612973097992178 -530 478 -1.285435120226136 -532 478 -.2849284423064949 -537 478 -.844591277205181 -538 478 -.3561542806965467 -543 478 -.35985365664717883 -546 478 -.02469388999492521 -564 478 .14915381446334092 -568 478 2.579629695983479 -572 478 1.4579600321149837 -575 478 .21534537481663713 -579 478 -.4901906591281784 -607 478 -.5116893923493341 -613 478 .8710115382656165 -614 478 .3616704885333936 -618 478 -.10302424613540798 -636 478 .4732573469820876 -638 478 -1.582636908638803 -639 478 .16183651950621664 -650 478 .9385191877203116 -662 478 .2569277204315721 -666 478 -.20838424056038052 -674 478 -.5818971180501231 -679 478 1.5366550673720336 -699 478 -.9929308748248161 -711 478 -.8505858512654405 -719 478 -.0414442512598098 -736 478 .23546362296673085 -743 478 -1.3378661298515315 -746 478 .05675974574991243 -751 478 -.008914675673433348 -754 478 .05377678602737712 -756 478 1.1473123038663664 -759 478 .5934933360934466 -765 478 -2.1094667330310877 -803 478 .40084334112965914 -804 478 .206383687556256 -847 478 .9119486293012347 -853 478 .04909923686026296 -856 478 .24247931204514972 -859 478 -.5993068150481717 -865 478 .6689229014177319 -878 478 .596957783827963 -879 478 -1.090601434204636 -896 478 -.76157803404998 -901 478 .6456553413467727 -911 478 -.41608013801006344 -929 478 .793884777435178 -933 478 .6065241383637631 -935 478 .853728384044383 -942 478 .8581810807470919 -944 478 -.12435252778360316 -957 478 -.74773294355107 -960 478 -.5624949660730271 -974 478 -.8154593983981285 -992 478 -.06421126579482861 -998 478 .1656242603583954 -4 479 -1.2947958890816276 -8 479 .10282305457585789 -12 479 .4403534734365998 -14 479 .13465113278505408 -27 479 -.7824494751526712 -37 479 1.4977474407191644 -39 479 -.4121279121966638 -49 479 -1.4688814821162788 -52 479 -2.2672901007879585 -58 479 .9946252348021446 -69 479 .01731359020181865 -72 479 -2.4082583361150163 -74 479 -.24657914134641729 -76 479 .953911155982421 -81 479 1.9948306863510306 -92 479 -2.195932892122928 -93 479 -1.0323221551384998 -110 479 3.0598960908190946 -129 479 2.0011414536248533 -134 479 -.3972902246931166 -140 479 1.5376911295756404 -141 479 -.4415536915454975 -151 479 1.7767936253911454 -168 479 .31597453564326794 -172 479 1.9929890109011756 -176 479 -.8998249497339432 -179 479 .3421407875096826 -185 479 .15770743378039645 -199 479 -.3824142505657341 -207 479 1.3769136516546356 -209 479 -.36374929035041276 -219 479 .36966659127702445 -224 479 .6587981661891693 -238 479 .92911674815742 -243 479 .24440629826206947 -245 479 -1.1410016889369057 -254 479 2.249115045309441 -267 479 -.85945853402945 -282 479 .02378696667166316 -289 479 -.8044270026062513 -296 479 .7900853136770998 -308 479 -2.186251799560919 -322 479 -1.2127093299138962 -331 479 .5869166948222628 -339 479 1.4501582423989183 -353 479 .5675719581623593 -356 479 -.08840414219388507 -364 479 .7150517301968764 -365 479 -.6621482030428156 -366 479 1.877775373788891 -375 479 1.093052124536016 -380 479 .28344726381663454 -383 479 -.6737170002352268 -397 479 -.6788201798637713 -408 479 1.328765759372514 -438 479 -.6505376885035785 -443 479 .24478473468353706 -447 479 -2.0622417418186756 -452 479 .5628272851338018 -467 479 1.008127624452722 -489 479 .15947383164932719 -504 479 -2.4157671073703004 -517 479 -.3137103897770382 -518 479 -1.1682080581428742 -537 479 -1.619587496330806 -541 479 -.7496159919160754 -542 479 .7614230295062133 -544 479 -2.593820442155135 -548 479 -1.4759218889342505 -551 479 1.658582468148715 -554 479 -.05309041328784374 -556 479 -1.1336326551829163 -569 479 -1.1855771626809477 -571 479 -.4589590134674885 -579 479 .08277721988557571 -594 479 -.004103856204062331 -608 479 .363904876793769 -609 479 -1.399031200328434 -627 479 1.6711260955964957 -646 479 .07421927496858413 -660 479 .9833138127219813 -663 479 .34932182751262386 -678 479 .36464745581383096 -682 479 .7713870222452879 -685 479 -1.3400183621253436 -686 479 .5060695331875639 -689 479 .013092666148558446 -695 479 -.043535798406362056 -701 479 -1.53510721859044 -728 479 1.1635470098041396 -748 479 .31496401533017954 -752 479 -.6942472206253242 -762 479 -.8873941055284751 -797 479 -.5512377399706735 -802 479 1.0205557830580687 -815 479 .1354423066291592 -837 479 .13750990615559866 -845 479 -.9927434984747074 -846 479 1.0983939570441843 -852 479 .8082161165747033 -866 479 .15157023018483493 -875 479 -.6118811114620978 -878 479 -.3680408392260629 -885 479 -.32779315991213065 -891 479 -1.1354339005170144 -901 479 .22366864441633721 -912 479 -2.0212219057549827 -919 479 .3639351748526336 -944 479 -.5339665782778313 -963 479 .172173907523182 -968 479 -.28037528849030063 -977 479 .05517566912322977 -16 480 -.021118307567869476 -21 480 .19699448911201745 -28 480 -1.3431789797040719 -37 480 .17197428502392878 -38 480 -.14233810767189964 -63 480 .5255683459724295 -68 480 .3438593441731421 -86 480 .5527135839779378 -87 480 -.30691146508538936 -88 480 -.8555689532982171 -91 480 -.7955903025344384 -96 480 .7350916541827809 -111 480 -.12921286368084733 -119 480 -.7599556201764263 -129 480 -1.559576111415783 -149 480 1.656932307754008 -154 480 .25090850475984205 -159 480 -.8927375456324116 -161 480 -1.2970814574910212 -182 480 -.650090681306895 -187 480 -.722357379827953 -192 480 1.2486501572961433 -195 480 -.46147430692642893 -196 480 .8987514820207894 -198 480 .27960674483682213 -201 480 .41212743499059756 -211 480 -.3182058574165391 -222 480 .6331359053899502 -226 480 -.036508250628962804 -230 480 .31353779532383913 -235 480 .15328017191865292 -250 480 1.1847886356706332 -280 480 -.38135119731060374 -287 480 -.32975595470025476 -288 480 .14772072607086398 -294 480 -1.0022630080969066 -303 480 .4311449523643101 -316 480 -.22933993703031658 -326 480 -.7515504932594032 -348 480 .6756002893249072 -369 480 -.1740680605971454 -376 480 .3777741234987492 -383 480 .4348990281937524 -392 480 -.3597643630057136 -417 480 -.8361032317708084 -435 480 -2.2295847065940837 -438 480 -.16068440071861473 -449 480 1.1726735035143723 -458 480 .45351341626512987 -463 480 1.0967773656229722 -464 480 -.33921497600468226 -477 480 .6771183625868548 -492 480 -1.3992054271512193 -499 480 .4349107361894912 -516 480 1.066481326077707 -527 480 .17984091101139976 -530 480 .1158995356482399 -535 480 -.5720969695706828 -537 480 -.6465904798030631 -544 480 -.5791331519852317 -545 480 .7037926464482721 -558 480 -.3875303527955909 -562 480 -.22817117920066488 -567 480 -.4886616359101109 -568 480 -.19596184717758136 -579 480 -.1438666330369121 -581 480 -.21449672380977391 -583 480 1.278556209308201 -586 480 -.6710471688040751 -595 480 .9871641019579558 -610 480 1.0360530732851871 -613 480 .4872566973711473 -621 480 .8528514914778662 -649 480 -1.6188688930373316 -653 480 .34498599463497154 -689 480 .4623211152446985 -694 480 -.9169128366146155 -709 480 -.20766901984415514 -728 480 -.9765537693256483 -735 480 .28476419185810864 -761 480 -.23643911021575503 -772 480 1.5438931085030858 -777 480 .3957382848211495 -779 480 -.41379888062693543 -782 480 .583841361310116 -795 480 -1.192386095173977 -829 480 -.12608319775147792 -856 480 -.740780580399071 -872 480 .05918869924345942 -879 480 .2867075196369664 -880 480 .3333904339875734 -895 480 -.22770137382860306 -904 480 -.5990389881579039 -905 480 1.232530208290994 -928 480 .039495542308783216 -955 480 -1.2600886138599057 -978 480 -.008647455650620063 -15 481 2.1666307836576304 -20 481 -.02490027943727363 -29 481 -.14459586855820145 -33 481 -1.4095374864861407 -38 481 1.6313272342820322 -51 481 1.081433389148711 -52 481 -.5113624255479144 -60 481 1.3573891443772457 -63 481 .29113085943989153 -64 481 .2630376487413534 -70 481 .31223525771803423 -86 481 1.4077455224945117 -103 481 -.27397737165310354 -105 481 -.6547002867202981 -106 481 .2665414473047437 -108 481 -.0250903939481949 -111 481 .7924964759751112 -114 481 .7255276323031649 -117 481 -3.3310648920332375 -119 481 .24766150286509772 -122 481 -.9240614852162277 -143 481 .6476767744369879 -171 481 -.09150879919950869 -173 481 .5884368518736606 -207 481 -1.4634503942484014 -215 481 -1.0818347023668695 -236 481 .13327313136565705 -243 481 -1.2035997002191596 -270 481 -.07789025780577905 -271 481 .04057886472398323 -280 481 .5527630023230272 -289 481 .4927357187059893 -293 481 -.42712774985886254 -302 481 -.3281138225461918 -322 481 .2527527664936927 -325 481 .9988566193795869 -396 481 .9556459494255676 -411 481 -.41657390912653547 -431 481 .025468155948218805 -435 481 -1.541774902215491 -441 481 1.5722799411084303 -442 481 -.06608357929622151 -445 481 2.0834470949362642 -449 481 .8667285350307901 -460 481 1.8238126269520596 -466 481 1.3528265598561457 -471 481 -1.0874959513390015 -474 481 -.7241827350259326 -480 481 .41750020369301144 -488 481 -.02807576278491366 -496 481 1.0814571270348148 -502 481 .5664776965793057 -524 481 -.3692965153992934 -533 481 .052225663950882094 -550 481 -.7990771962644465 -561 481 -.19019814040541147 -571 481 .9333886234160202 -572 481 -1.6172619677229358 -573 481 .017029924332329485 -576 481 .5453301174108686 -601 481 .14492258194671362 -613 481 .16779980663006103 -649 481 -.8916293196129041 -666 481 -.1424657150516118 -671 481 .5640783980588177 -685 481 .397116720582227 -691 481 .8236208191094637 -703 481 -.06264031829369043 -710 481 .7146691063885965 -728 481 -.035248334271363604 -733 481 -1.616418079380567 -735 481 -.18586214962908895 -762 481 1.8427602997727919 -766 481 -.9787727348085036 -784 481 -.97885833413791 -790 481 .8025870176488119 -792 481 .7483351301885505 -804 481 .19179613049904937 -813 481 2.5134085501155825 -844 481 -.6379908737648436 -863 481 -.5161275181657402 -888 481 -.40358271127703094 -892 481 1.2282484350517937 -893 481 1.7335972515831828 -902 481 -.32367682323640556 -924 481 .9047080107689415 -940 481 -.172214569914644 -944 481 1.0305712415324602 -945 481 -1.8654924470646777 -970 481 .06007433282603569 -986 481 .8918019129226042 -990 481 -.49852182271905826 -8 482 1.277565899524374 -19 482 .6259387968169775 -23 482 -1.0605023318039746 -44 482 -1.0043360717746712 -49 482 .10249541243471841 -50 482 .1631022158588382 -104 482 -.49426635307744043 -112 482 .13950334350099575 -117 482 .6316457520971059 -131 482 .4591840101809357 -134 482 -.3018304777938472 -149 482 -.9328911236958844 -151 482 -2.1834993873941633 -156 482 .3311311179678696 -160 482 -.42823448984755913 -164 482 1.514899555658441 -180 482 1.5990158411561064 -195 482 -.2331903152551784 -199 482 .0067062946358505725 -200 482 .3070720097707433 -201 482 -1.2197024172557716 -218 482 -.5184253688572765 -239 482 1.1579513202076994 -243 482 -.1100231057093555 -246 482 .0003983765939823379 -253 482 -.6127979243039503 -262 482 -.7987563637389153 -266 482 -.3620146086647027 -278 482 .14778478388017677 -281 482 1.2744325718390308 -284 482 -1.1618122719842023 -295 482 -.3157307655934002 -298 482 -.0879979754073077 -305 482 .5611874549377388 -312 482 1.567607841893418 -343 482 -.18797157083319466 -351 482 -1.1994469938358756 -374 482 1.3008944143881611 -406 482 .9201270795399821 -419 482 2.5234340979658993 -423 482 .42004006669824906 -443 482 -.362360343927512 -447 482 -1.194661147123645 -490 482 1.9217455998522066 -510 482 -1.1107442683933575 -520 482 1.0916609131234118 -532 482 -1.547244395969552 -622 482 .5795802408647505 -657 482 .1075245982014447 -671 482 .5173637383584715 -674 482 -1.7848981221449183 -683 482 .43651317273523743 -687 482 .24394538478412886 -693 482 -.43964561888581 -696 482 -2.0485313042228825 -701 482 .8928826020457843 -708 482 .3616614950755051 -717 482 .53004398758519 -732 482 .4244036370041422 -754 482 -.23860034448812353 -756 482 1.433761647657752 -765 482 -.8183706821427962 -766 482 -1.0983773876543332 -774 482 -.1868244441983776 -776 482 -2.76971478996528 -796 482 -1.2855799826377998 -802 482 -.39149662880142666 -835 482 -.39635532900114007 -861 482 1.5108164613345199 -874 482 .9788710052701647 -879 482 -.00888900596135786 -880 482 -1.0131001962783943 -891 482 1.7754905560569534 -917 482 .14698292088458348 -920 482 1.101076457512158 -935 482 1.0009119169653258 -944 482 -.7685171629891546 -949 482 -1.1651356960321892 -952 482 1.20805083834938 -962 482 1.352650236316234 -963 482 .897149769409838 -966 482 .6916073985284038 -975 482 -.18438490098244906 -993 482 .6273130989383509 -6 483 -.9005635036327937 -21 483 .8446367430236231 -27 483 .33790667749297115 -29 483 -.726876511926954 -30 483 .5387514916909454 -31 483 -.49974811194801494 -50 483 .34414721829853223 -75 483 1.3687434330111121 -77 483 .6692225056707382 -93 483 -.1085743243174083 -104 483 .4883232265112401 -119 483 .06436941360494593 -127 483 .6399535590926251 -128 483 1.2686488912941687 -136 483 .6606451773363244 -155 483 .8196042855754733 -160 483 -.0600910398534089 -163 483 .8673702487653997 -165 483 .4476653106495422 -169 483 -.5423181498135559 -172 483 .8390157511586882 -182 483 .6078106431840731 -195 483 -.4079762267660773 -202 483 .19530300660097405 -230 483 -.5378725892011377 -232 483 -.7477075534166839 -247 483 .42637144349233824 -248 483 .7270588146971574 -262 483 -1.2355775231404 -266 483 -1.0855500748121267 -268 483 -.27277610420896126 -286 483 .7349316465322288 -289 483 -.44820799498967023 -295 483 -.1808584154155377 -320 483 -1.2968042100909845 -329 483 -.6380604009992414 -341 483 .3265950071736876 -357 483 -.09890691273920522 -388 483 -.6098299008412464 -389 483 -.09412464532713187 -394 483 .845026008995117 -398 483 -.7656663487777121 -442 483 .44358910990341804 -459 483 .17384060729233874 -490 483 .8060565602402197 -504 483 .3034441000636183 -509 483 .7567706751761507 -513 483 .9631739199492843 -515 483 -1.6275105378868149 -516 483 -2.0262315702937457 -519 483 1.3569669265822955 -520 483 .21443359880306187 -521 483 -.5872960822733035 -580 483 1.0552753307909666 -582 483 .6172622539409656 -585 483 -.36624540985494325 -589 483 .3051294486818955 -596 483 .025600304214419223 -601 483 .08817570781005418 -633 483 -.3943693292239792 -640 483 -.13332269671123764 -642 483 -.40116638883497946 -650 483 -.12145650900198689 -669 483 .9107898348231199 -688 483 .7401809241319638 -694 483 1.284732919621994 -700 483 .9155001727133663 -709 483 -.6907016178398735 -714 483 -1.9446692366472722 -770 483 .19772716650327293 -771 483 .4300157609343084 -779 483 .0932212764531552 -800 483 .18350323883074643 -808 483 .9022917575973733 -820 483 .08940067992449013 -822 483 .7421262194931669 -833 483 -.2694464238704752 -840 483 1.603082138102149 -845 483 -.15858310098338002 -876 483 -.6233244944880534 -877 483 -.06962302727267759 -878 483 -.703224187816202 -893 483 -.04427899808870245 -896 483 -1.6945169156518056 -900 483 .21267703090909787 -916 483 .029357686693672863 -917 483 -.5469290345557859 -921 483 .43626951707672884 -940 483 1.2749555446671363 -947 483 -1.7961278465598343 -952 483 -.13540017634932278 -956 483 -.4143761389317837 -958 483 .5964224873410457 -968 483 .2982377855140486 -971 483 -.06861625772416904 -976 483 -1.5380469548918843 -10 484 .5352676905655558 -21 484 -.9638122784193267 -22 484 -.40024227783201144 -33 484 -1.4899494651120575 -72 484 1.8541859597462345 -77 484 .33218824654416534 -92 484 .40731200549619695 -112 484 -.4685700259460218 -114 484 .3558147358447096 -118 484 -.7433023005642987 -130 484 1.5541597878575157 -134 484 .7440152673709642 -135 484 .31154940561292477 -137 484 1.0512211803549427 -171 484 1.2249821165690922 -184 484 .796598007654314 -190 484 -2.655876009064942 -204 484 1.7901215740230574 -209 484 -1.224666282522866 -210 484 1.615309058492885 -215 484 -1.0991108596232189 -217 484 -.8843932125923466 -219 484 .39034761555354264 -229 484 -1.020811891083511 -251 484 .09596195690208434 -256 484 .2677844833172296 -263 484 -.9168050725635545 -280 484 .5846727562691417 -298 484 -.37085637163186497 -305 484 1.1272125036934955 -313 484 -.7349314227302497 -323 484 .35639844956520994 -358 484 .9411932441141835 -373 484 .9973880942008869 -376 484 1.0863847615312134 -383 484 -.11112846181789672 -386 484 .375585855644097 -405 484 .03786345242059906 -407 484 .25660014598182085 -432 484 -.010832319667774069 -440 484 1.8820285427471715 -442 484 .1803023049601091 -445 484 .9521637862064696 -463 484 -.8621942087087817 -479 484 1.474949307636055 -489 484 -.5427461933962153 -490 484 .5723922770359708 -509 484 1.5717250954803723 -521 484 -1.5667979197362065 -526 484 .4073560269988728 -533 484 -.31181110696586767 -552 484 .5881677512178519 -564 484 .6421586434141876 -577 484 -1.621573142824563 -590 484 -.4614134911206038 -592 484 -.8805205520772216 -605 484 .7401898936625536 -639 484 .1176695241526022 -641 484 .5907342599382671 -648 484 -1.175067919633104 -649 484 -.5752141564370836 -662 484 -2.726571359832442 -684 484 -.029073479161932744 -687 484 .7527303682396607 -690 484 .8694515167270306 -702 484 -.612795425066673 -707 484 .23778431857283983 -718 484 .7484882596576212 -719 484 1.7118605013501165 -735 484 .8496985682606228 -736 484 -.2789448087565867 -745 484 -1.9768276047153486 -768 484 .23189237822662018 -772 484 .4418934399230485 -782 484 .3067955380353333 -783 484 -.18527518964311218 -796 484 .7594141420937397 -804 484 -.33780564173497524 -812 484 1.6977765849651676 -826 484 .9618731149236077 -836 484 .1692164456489611 -852 484 -1.9470765917261794 -857 484 -1.0824800152516327 -874 484 -.37851517203703905 -888 484 -1.0743691739726755 -899 484 -1.4780642734287202 -900 484 -.30584912596134306 -910 484 -.002708014504304704 -915 484 .4712362257650087 -927 484 -.5347812500055106 -933 484 -1.3256456675095023 -935 484 .749001374035115 -953 484 2.897257555665831 -959 484 -1.212578827227575 -964 484 -.6277970722500662 -967 484 .6900037173036704 -973 484 -1.7104741716582048 -974 484 -1.084907408814338 -983 484 -.6449381265492062 -991 484 -.2540097855658762 -999 484 -.9260945042156495 -11 485 -.15917503881910205 -18 485 -.8699979856763913 -23 485 .693588878904897 -26 485 -.17796576070039 -27 485 -2.0147366762771064 -51 485 -.9182934029278003 -68 485 -.09702435500517825 -71 485 -.7677607603189361 -90 485 -.06980333982301377 -150 485 -.2676478226487743 -160 485 .28426607036534635 -164 485 .6967756008858903 -165 485 -1.399689237214453 -195 485 -1.191591343313751 -217 485 -.6461629344218528 -246 485 .31322263524811295 -251 485 1.9809166014832904 -252 485 -.8959537918702148 -276 485 -1.3562728017228411 -286 485 .2899600190323353 -292 485 .3959500100486675 -314 485 -.14592267644660437 -333 485 -.2398665787871755 -337 485 -.37154763388149564 -338 485 1.353151059454972 -345 485 -.5808724502433742 -352 485 -2.103386718984296 -393 485 -.18356284191205957 -399 485 -.4838263430542228 -408 485 -1.0345536982255434 -423 485 -.17509689754555932 -446 485 -3.0676333409245014 -463 485 1.636934036196607 -470 485 .35698831518948504 -472 485 -1.1526252331954938 -523 485 .32600978958771387 -535 485 .16287439272873566 -538 485 .8065720444264454 -541 485 -1.1186415238768057 -542 485 -1.051113444773943 -543 485 -.1516670213118249 -544 485 -.5597036539206799 -547 485 -1.0792922090091106 -554 485 -.26049428566142263 -560 485 .2358788511152481 -562 485 .7275631063052419 -574 485 1.0135414853988693 -581 485 -1.7993405745637157 -583 485 .1319011914288751 -594 485 .40672541632849646 -603 485 -1.352901258218155 -610 485 1.3195697424878814 -614 485 -1.6834239810236962 -618 485 1.1643434763139107 -622 485 1.162884624630752 -624 485 -.02296245699065949 -641 485 .41993946632223195 -646 485 1.480930691042171 -648 485 -.31231617820663565 -675 485 -.4806525607046559 -682 485 -.3027073941691303 -690 485 -.9562235522463018 -692 485 1.7627911569388215 -693 485 -.9807379410019266 -694 485 1.1538304352842341 -735 485 .8911406756795414 -745 485 -.03027779796281515 -776 485 1.7812779499560742 -777 485 -.48830518464608175 -788 485 .9284151315790656 -790 485 1.1782259503287977 -794 485 -1.163693448923621 -808 485 .16415902775213292 -813 485 .4216685961238751 -814 485 -.22305493491590395 -838 485 .7056052467866956 -845 485 -1.3422932427136962 -846 485 .03259327088874517 -869 485 2.371928493366917 -872 485 -.4497251068948469 -879 485 .23503952818287094 -896 485 .37959760166683504 -910 485 -.36151591468203575 -915 485 1.4649140010507828 -919 485 .783345905441592 -926 485 -.6620923644438814 -927 485 -1.0288863488915434 -930 485 -.49661501085058923 -954 485 -.7391177448461154 -959 485 2.046686170270976 -967 485 1.0625822879044007 -975 485 .3709531918625998 -982 485 -.3984582305151561 -999 485 .1601314194194734 -10 486 .9192775686549775 -21 486 .526266875453683 -22 486 -.393681611842014 -51 486 -.07616639965604532 -58 486 -.25997488855406387 -59 486 1.1979842229405484 -74 486 .17535481260495417 -87 486 .3562298568583518 -91 486 .19119300378861742 -107 486 .9063557583210688 -118 486 .26245157058571755 -184 486 .7406302840244837 -191 486 -.9330985061888029 -209 486 -.47010606621444945 -213 486 -.7028604092934319 -218 486 .20914869713339407 -222 486 .4874511247775818 -225 486 .9441775533501523 -230 486 .1319640499697737 -240 486 -1.027052604907308 -247 486 .6071515296961988 -276 486 .03390813465058211 -282 486 -.48515156367807366 -283 486 .6537339752905232 -348 486 -.8668238873712516 -349 486 -.44266984630636447 -364 486 .42694306299871426 -375 486 -.02336078759344351 -407 486 -.12745220800697285 -420 486 1.1067982942360282 -427 486 -.15288918513808714 -435 486 -.2781594612297124 -443 486 -.9090548015597714 -447 486 -.9356276151209337 -462 486 .6013580860430502 -467 486 .16778059531789807 -475 486 .27405111694198386 -476 486 .2507331834646574 -477 486 .7564182776342633 -480 486 .7550824434279113 -493 486 .5206809617524591 -496 486 .32452783804136254 -505 486 -.1702503079499076 -515 486 -.7970076414403628 -524 486 -.10880863450734979 -525 486 .1462346848513065 -530 486 .6941923299405122 -569 486 .34410340669113526 -582 486 .6215233882751772 -583 486 -.0917363257801598 -590 486 -.4510061008724036 -604 486 -.18584818433656308 -606 486 -.6890594061501988 -610 486 .34780007987324346 -615 486 .9725587522384888 -616 486 .8750804167946431 -619 486 -.4056299387118886 -634 486 .1767099392431546 -646 486 -.1762323704866073 -666 486 -.39711490212285067 -675 486 .12256648955981567 -708 486 .2737675861094243 -723 486 .81208194531984 -739 486 -.3435124006603042 -740 486 -.29895334706385 -745 486 -.5265623527436024 -747 486 -.21892667568662072 -768 486 .0019572747847531394 -778 486 .15670840384318077 -787 486 .03883808799571642 -789 486 .059899802247517224 -802 486 -.15576394076517483 -808 486 -.1606940802896213 -819 486 -.3940970002418425 -822 486 -.1680206970657762 -831 486 .19873468462856325 -855 486 .5081403591540039 -861 486 -.019837026427958926 -864 486 -.49693021452385805 -871 486 .07322227223455074 -880 486 .12841489767172787 -885 486 .06875657834035395 -886 486 .21410421743906527 -916 486 .2537292426474098 -917 486 -.4135060367966241 -918 486 1.1641854626570356 -919 486 -.341662303552387 -925 486 1.0137310386568765 -940 486 .7418128787581405 -942 486 .5485742640286645 -952 486 .2618395586249526 -957 486 -.8141973272728915 -966 486 -.6161137354775168 -967 486 1.1014149104956392 -989 486 -.7354898350652346 -998 486 .3723317337644577 -3 487 .9320422330830581 -9 487 .6329851879721134 -13 487 -.9519236078659983 -19 487 .000279561456644456 -24 487 -.9949635220392867 -25 487 1.918007988642426 -32 487 -.02338001625264092 -37 487 -.6320524113147302 -38 487 .9205641756285993 -62 487 -.029548787887765715 -69 487 -1.1429762953912084 -74 487 -.2420496118523643 -86 487 1.436038951722532 -93 487 1.5269049431254487 -121 487 -.7663017424170214 -125 487 .6125808839431424 -130 487 -.9881004232140221 -133 487 .02307061707983512 -137 487 -1.832614355068631 -139 487 -.15164898799942853 -145 487 .5796623896865098 -147 487 -1.337048497538063 -148 487 -.570756046251031 -167 487 -.6515287115700166 -168 487 1.41316263763661 -172 487 -.4329688936618678 -189 487 -.48153221988720973 -208 487 1.0940301179460517 -233 487 .7240459032185614 -242 487 .4772214599347351 -248 487 .19852178205370738 -282 487 -.3622178214315183 -287 487 1.6715688202258052 -296 487 .9140146705106911 -318 487 -.8002401148763952 -319 487 .028980251349936516 -323 487 -.8913686887534842 -330 487 .8976428832353165 -338 487 1.033623134632789 -340 487 -.342536972604697 -342 487 -1.2765929241618508 -358 487 2.288226797256429 -361 487 1.4977136244513727 -368 487 -2.187839824677254 -371 487 -1.3423642995884861 -372 487 -1.1776307171223264 -374 487 .04673857740601135 -389 487 .08303928778084521 -402 487 -.9417768631009001 -417 487 .06407058376821091 -434 487 1.543838756456147 -448 487 .8440522197359548 -462 487 2.3969582222075063 -470 487 -.8355597444397206 -486 487 -.8248625108155162 -513 487 1.4073701246909132 -524 487 1.3728105451038413 -527 487 -.28293194360337615 -532 487 -.8399550175672652 -537 487 -.8531230049240189 -543 487 .6692230964943072 -556 487 .28681614363181546 -561 487 2.2365111741110457 -564 487 -2.47168570233578 -574 487 .15767833111794227 -577 487 -1.345045543435457 -582 487 .2141292447785724 -587 487 .7048734172796703 -590 487 -.9755964740259389 -595 487 .5785964686105224 -615 487 1.0441331858783776 -631 487 -.4480443578370892 -639 487 .8562063383303139 -641 487 -1.6722404008783125 -659 487 .7297865051810175 -666 487 .5360250346677413 -673 487 -1.9380653934649303 -680 487 .5721999714189403 -692 487 1.3529413420422718 -702 487 -1.3555975642656088 -704 487 .40477850618894184 -708 487 .3200900359105418 -715 487 .7806923385095472 -716 487 -3.1318777602396737 -718 487 -2.2701217038697434 -733 487 -.7635529508967455 -734 487 .03792943400484183 -745 487 .6861676713496838 -754 487 1.3362258416830541 -764 487 1.370534588836432 -780 487 -.3969096346694757 -787 487 -.26774804188630175 -801 487 -.15798414511937126 -808 487 -.8459759947398644 -821 487 .12178667415563513 -848 487 2.076447700073576 -849 487 2.650320411285811 -875 487 1.7387781952009962 -882 487 -.30491030428544075 -888 487 -.5044480485098994 -899 487 -.06526498429998925 -913 487 -.13911921116448173 -915 487 .7237754403716343 -916 487 -.0005072423703114393 -932 487 -.06438002456179046 -936 487 -1.4282047043166244 -937 487 1.0092453992359807 -938 487 -.31717833681064966 -944 487 .36328227561734516 -947 487 -1.6823826574864704 -958 487 -1.5314405046034343 -977 487 1.0920090787847585 -996 487 -.2498067687221509 -3 488 -1.280201577437904 -14 488 -.20277580650679045 -17 488 .017386856477365417 -21 488 .5381532738335373 -25 488 -1.4044672734748616 -34 488 .4087279371772542 -37 488 -.0595399741494701 -43 488 -.4153103258604607 -56 488 2.0298773999667796 -66 488 1.115427468585089 -82 488 .05423331482644664 -86 488 -.929273025497088 -87 488 -.5030211237474017 -88 488 .06780585599368164 -109 488 -.2112324183408257 -112 488 -.726557951263173 -114 488 1.8189673461858047 -118 488 -.4173580472385314 -125 488 -2.166689581225018 -131 488 -.6440443437541152 -138 488 -.24272224593426722 -156 488 .6841111707719659 -163 488 -.8940463894855759 -168 488 -1.6408469884158938 -179 488 .346164101465581 -180 488 -.47386417783767765 -192 488 -.5287212071281264 -206 488 -1.1275724119019148 -209 488 -.8019369677843349 -215 488 -.9715906793977211 -220 488 -.9569000833768433 -231 488 .13149641955504177 -243 488 .5655013723465979 -246 488 -1.1358973301285162 -251 488 1.0965309929748424 -260 488 -.16656630471786057 -302 488 .40455635660608713 -304 488 -.0769672000510506 -311 488 -.9860225610703243 -332 488 .40060748367046967 -339 488 .32745277099303977 -360 488 -1.74150083569605 -364 488 1.0361665620579084 -368 488 .7245841802087885 -372 488 .31346542434137736 -378 488 -1.3574376289786456 -410 488 1.1286286042668108 -411 488 .8470241789922398 -420 488 .541966317465519 -432 488 -.8567927554704236 -448 488 -.598237882940015 -491 488 1.0812007940296207 -493 488 .6163456344338495 -497 488 -.32623504335253783 -509 488 .6342649219407974 -532 488 .2057558749451838 -539 488 .6822131078464605 -540 488 .2823025558048568 -551 488 -1.19580853040866 -572 488 -.313445663506187 -581 488 .8635571395332073 -588 488 -.6629659750156888 -592 488 .5847680021345275 -593 488 -.08642340239811827 -602 488 .18754753812832706 -603 488 -.1776865807941163 -606 488 .03130011829365122 -617 488 -.8217118378299428 -619 488 .02088999841229367 -622 488 .2504795233286638 -640 488 .22501546982610932 -642 488 -.7829629882821244 -659 488 1.135627975352228 -668 488 -.42243529277563363 -678 488 .8139029536306402 -682 488 -.25248969415711087 -698 488 .5625858322733699 -719 488 -.6267090158218941 -732 488 .8507958531399704 -735 488 -.44651358526952684 -750 488 -.2503631177594303 -774 488 -.7975817446895723 -789 488 1.285285363149909 -824 488 .406064896717137 -831 488 .534905078520066 -832 488 1.1926000034062751 -843 488 -.8811361340450814 -847 488 2.6636800711727466 -858 488 .03332170673954468 -875 488 -.091691280211078 -914 488 .8347641041329159 -916 488 .11684750938308883 -960 488 -.2245751211826576 -965 488 -.276680943804272 -966 488 -.7975588464270981 -987 488 -.8536634598989878 -990 488 -.46817336643669355 -994 488 -.8308357198012387 -996 488 .4795759219650404 -8 489 -.36679836705382063 -19 489 .6107454007992933 -20 489 .32614532085100567 -28 489 -.7093681438417432 -30 489 .15178807124883908 -39 489 -1.3035991075122206 -87 489 -1.8896885627318558 -90 489 -.029801342847315226 -96 489 2.170804260855862 -98 489 -.04908275486310931 -105 489 -.3723825810970756 -110 489 -2.9311073814428767 -111 489 -.6937086151859746 -168 489 1.9908403664694552 -171 489 -1.9049790477897777 -179 489 .7401262988524407 -186 489 -.5221267231573832 -189 489 .373940653383545 -191 489 1.7773136985103597 -215 489 1.735580260747718 -239 489 -1.175076395849075 -260 489 .016877995146064452 -261 489 -3.4957270212656884 -267 489 .787407390299973 -275 489 -1.0022513276511897 -284 489 .12788737421889662 -303 489 .8061250373972975 -318 489 -.607994918617545 -325 489 1.9059346373309953 -331 489 -.28828382352911497 -350 489 .9571183083795662 -358 489 -1.4282666476708654 -361 489 -.5743922641086167 -372 489 -.07263772651393162 -382 489 -1.5224070401880634 -388 489 -1.816509633022253 -389 489 -.5645280173182095 -392 489 -2.73888653922448 -393 489 .40446665369083457 -410 489 -.22731584295903892 -412 489 -.5140824885493723 -420 489 -1.9321866248337496 -421 489 -.6887003081151514 -425 489 .3852908216104616 -429 489 .45349508012851136 -439 489 -.9599267013570854 -454 489 .21916362986297067 -458 489 -1.007793180442563 -461 489 -.5958720981356023 -466 489 -.9510177250333836 -483 489 -2.093236075760646 -509 489 1.2704724798236107 -516 489 3.397830081950633 -526 489 1.4160263544449443 -527 489 .38060404114461777 -552 489 -.3488614452728676 -581 489 1.4528724929076198 -583 489 -1.1529713145373015 -587 489 -.3085335340482844 -594 489 -1.8531120253440294 -614 489 .697905814818215 -654 489 .11827209592372981 -671 489 1.1768088395618082 -676 489 .2580191959244751 -692 489 .38969843715392816 -709 489 1.5613222666574187 -710 489 -.5328864044897962 -713 489 1.780859100188159 -718 489 1.120632561670694 -725 489 -1.2220711505350879 -727 489 -.9299087349591131 -734 489 2.4416685351071896 -744 489 .8915293217669307 -749 489 -1.5910344018077436 -751 489 -.5942716855503922 -752 489 -.44498818115155225 -761 489 -.3040818978261616 -769 489 -1.252828841767819 -770 489 -.6718356660606807 -771 489 -.8148964914367228 -774 489 -1.4066960013654102 -778 489 -.11716186677199471 -809 489 -.982900890329974 -819 489 .32697820123320087 -822 489 -.26745740154789494 -831 489 1.0770348241015089 -834 489 .18366849646224542 -848 489 -1.0366769838396306 -849 489 -.7794781227430199 -851 489 -.4321534909675029 -855 489 -1.490018700173755 -875 489 .20755677847668014 -914 489 .5297821994031063 -919 489 -1.19807565838192 -924 489 -.4495798931573445 -926 489 1.697674948328595 -946 489 -.681369838697323 -987 489 -.028631695108599038 -989 489 1.0801364002547031 -1000 489 2.1944841138992484 -29 490 .6673883372087139 -38 490 -1.3474704540443185 -58 490 -.10837484119531171 -60 490 .14048222773453767 -72 490 -.7115080746868359 -83 490 -.7067567286245333 -88 490 -.6845511187507543 -90 490 .6280331547909999 -109 490 -.4489115908244437 -113 490 -.200922480881202 -139 490 .32129234797448436 -148 490 1.5001518557832048 -156 490 -.9683127104734135 -161 490 1.5866213329596497 -163 490 .13387793376611548 -187 490 .36089451789782545 -191 490 -.3436268961534544 -199 490 -.009130310183664198 -212 490 .044974224999585394 -216 490 1.2857523963998025 -218 490 -.8112198701186154 -244 490 .8090121916040294 -249 490 1.0321945291716155 -282 490 -1.773211167050489 -294 490 2.003455969532794 -298 490 -.7212727271747875 -307 490 1.03802027501506 -341 490 .8135062837378906 -343 490 1.6372514683430917 -344 490 -.8899309048209868 -346 490 -.5013038273593713 -365 490 .3666948701256945 -378 490 -.7441876927681084 -383 490 -1.58036749319457 -394 490 .6141226590036462 -419 490 -1.2734957904492203 -426 490 .6734072457649396 -427 490 .879779718941821 -450 490 2.4112762359495985 -458 490 .409332727918855 -459 490 -.7726705126547538 -467 490 -.06728307111994429 -480 490 -.0066077625834085885 -490 490 .993933022290447 -514 490 -.16762416362512117 -525 490 .11670277230077995 -528 490 -1.255894587729811 -549 490 .3019257685223777 -586 490 .23029451685597818 -596 490 -.456731615660783 -632 490 -.15572486395103774 -637 490 -.10344622805573993 -639 490 .5999773061299051 -651 490 .9658662704328991 -658 490 -.3121481742222672 -687 490 .5272488396586809 -708 490 -1.2326734802910688 -718 490 1.3543593267540806 -721 490 -.9103166992026468 -723 490 .22940904948819305 -736 490 -1.278446947851529 -751 490 .7812667935616782 -762 490 -1.4039920198943512 -771 490 -.5037733446303664 -775 490 .8118916011268933 -777 490 -1.0853438462694958 -779 490 .6587957558975163 -789 490 -.4635501973375178 -809 490 -.4800030286908099 -820 490 1.2116013941372117 -825 490 .5048376103518245 -828 490 -2.5545239298542195 -833 490 .037489551048096384 -838 490 1.2960728309410363 -857 490 .9133633049833184 -875 490 .18942226961573772 -879 490 -.8742475864487493 -890 490 1.388631936289903 -898 490 .6321421716592868 -905 490 -1.188948947973412 -922 490 .027440535531810473 -924 490 -1.2319837912833025 -936 490 -.7657090335251444 -938 490 .6117436433707568 -951 490 -.23744984621946122 -956 490 -.3165243638705092 -961 490 .13309752365552344 -981 490 -.4148466231986043 -982 490 -.6452630018990083 -998 490 -.2697035037780446 -16 491 .012684900449874442 -36 491 .2552612722780821 -41 491 .7149808224348891 -49 491 1.2899896395923367 -52 491 -.24330658104821484 -56 491 -.34274261921957866 -87 491 1.0909116995410388 -88 491 .29458010493447845 -95 491 .6606110941665296 -114 491 -.9706043522924324 -117 491 .27205770330475443 -118 491 1.1531967138538324 -126 491 1.1919968194000363 -136 491 1.7039062730528554 -137 491 -.9129418341491905 -139 491 -.8627879724664741 -174 491 -.31115464538993026 -179 491 .5366060020719979 -194 491 -1.1860327211295796 -199 491 .7250872350807398 -207 491 .7262836455557724 -216 491 .9625472665303847 -221 491 -2.082335856012326 -230 491 -.7544589853298712 -233 491 .5806902422957325 -238 491 .7489563321178678 -240 491 .44012997479723215 -268 491 .5590358002256013 -276 491 .3653681316063898 -284 491 -.6939531873861358 -285 491 .8704467251365992 -290 491 -.45779632765884903 -305 491 -1.2173653821239296 -310 491 .44321841349813973 -332 491 -.26362595163542496 -354 491 .17951113011398656 -372 491 -1.5191547890162305 -374 491 .5431884650569837 -379 491 -.9628222782289906 -388 491 -.008559678158684289 -390 491 .5037990737029371 -391 491 -.9995920321783651 -401 491 -.41722986189186817 -403 491 1.0130308059457933 -406 491 -.8695750658964223 -410 491 -.9307339301043508 -416 491 .3305867254735333 -421 491 -.4266523995582801 -445 491 -.02345417901426107 -458 491 .8860746009376245 -475 491 .8560146754040264 -520 491 -.8347956646106125 -528 491 -.5967118556704225 -536 491 -.8877470926451385 -563 491 -.25062754898005635 -582 491 .09760123497523704 -588 491 -.24818058402371668 -594 491 .018968752215350507 -603 491 .42789119734530234 -617 491 .2556900897987488 -625 491 .6925220700448564 -629 491 -.9233100725022314 -638 491 -.4281998358174343 -640 491 .8293635085940401 -646 491 -1.612800681614763 -650 491 .8546193949638908 -651 491 1.1644994330039435 -653 491 .8496354657059004 -660 491 -.21520879887910838 -666 491 -.3020562507729444 -676 491 -.1536557843969615 -679 491 -.7236789313704668 -682 491 1.5793361121402243 -689 491 .4293264772913819 -690 491 .99741230095906 -694 491 .21906753732807865 -722 491 .02381521536764372 -724 491 -.19282814112394864 -733 491 -.1652788738173368 -737 491 -.19894352463283455 -745 491 .7645232131478037 -751 491 .05278779796994242 -766 491 .697050747994751 -768 491 -.8530174769451543 -777 491 -1.0631244678036482 -779 491 .5266957164559246 -788 491 .6430953340049874 -790 491 -.052440750430957334 -796 491 -1.006760447747771 -824 491 -1.2920061055031153 -830 491 .378963720581151 -838 491 1.8309568845956579 -848 491 2.384231727210633 -859 491 -1.482743020406145 -871 491 -1.0837705182324098 -881 491 -.5878540243928558 -882 491 .37452761306124227 -903 491 -.5266415888290208 -907 491 -1.0305700244428722 -926 491 -.8198733429474152 -927 491 .49648129334835317 -929 491 .124083139762254 -934 491 1.5578570298066479 -966 491 .28314437367900513 -993 491 -.13495218394858913 -12 492 -.6964554596458917 -19 492 .7065872356613229 -21 492 -.684061496294186 -27 492 .8404005016938902 -31 492 -.46392586032032873 -32 492 .42421597945662826 -45 492 -.9721860330480704 -55 492 -.10300249482923884 -63 492 -1.3423106588824931 -73 492 -.012735076532135884 -79 492 -.5517167707077639 -91 492 .6600994641308631 -107 492 -.021444657698862783 -116 492 .28301558169188784 -136 492 -.08094553259315335 -143 492 2.626444408060248 -150 492 .47553076767774094 -155 492 .6976941764095258 -163 492 -.4631901857182822 -170 492 1.4219763633430296 -175 492 .1853921987379763 -176 492 .3989772699718251 -189 492 .8322382445366069 -190 492 -1.587331222184789 -202 492 -.3196608635148697 -213 492 -.6545748172772072 -228 492 .0990976928715826 -233 492 -1.1600591525450419 -246 492 -1.0390673075220844 -250 492 -1.358807103809001 -263 492 -.6390133636801119 -266 492 -1.3588607736218568 -269 492 -.4439761306123244 -286 492 .7209239327609939 -288 492 -.42874904733356806 -295 492 -.43193735923820986 -297 492 .3953446177606734 -318 492 -.16117419614331996 -319 492 -.1745671279186988 -326 492 -1.566957697802242 -341 492 .9810705935921541 -344 492 1.7169944485427937 -359 492 .0374743331545032 -378 492 1.1719283201369695 -381 492 -.6584485058866908 -383 492 -.2401054177156111 -388 492 -1.3352706324233086 -392 492 -1.4973041468460075 -396 492 1.0473891713243315 -398 492 -.17949498549807535 -400 492 .3076964327787278 -405 492 -.005890035476219191 -411 492 .25163838204124267 -412 492 .10132947395143363 -434 492 .8971445850597927 -461 492 -.8398488812984729 -481 492 .9532646210525422 -492 492 .9947278406686386 -508 492 .9051138535188201 -510 492 -1.0651237324193874 -522 492 -.07777776276541358 -541 492 1.0862530511199118 -570 492 -.5768753540560387 -579 492 -.5839227951408044 -583 492 -1.3562451149569474 -589 492 -.7145509544511963 -593 492 1.6864083177301434 -624 492 .9297951656066458 -628 492 1.4259999149517997 -631 492 -.13787068165749047 -644 492 .4902013938260171 -665 492 -.37291994824808156 -672 492 .25383991208423434 -683 492 .03760943305328995 -687 492 .5089464521109379 -692 492 -.5776716738462354 -697 492 .6656864637725238 -712 492 -.5159874230526873 -715 492 .19678302898018957 -720 492 .3585313751008606 -721 492 .5614986257776049 -733 492 -.5837551674151187 -743 492 -.5962294251725382 -745 492 -1.5358795892666388 -752 492 .16538022017779075 -786 492 -2.0454986842869807 -796 492 -.9265464735107497 -801 492 -.75841533107734 -806 492 -.880138430567182 -826 492 2.5058967272400308 -833 492 -.1242951338178811 -847 492 -.384006060114295 -855 492 -.39166753718336267 -867 492 .3142206053908997 -872 492 -.02722418946309005 -876 492 -1.026919277366188 -886 492 -.36561043221810224 -898 492 1.2240891294035143 -901 492 -.23362625735798315 -931 492 .792997888084367 -953 492 .349780079672558 -967 492 -.09924316123990523 -989 492 -.5286662966331773 -24 493 -.778253545270933 -39 493 -.08683904066631154 -48 493 .9638136195759429 -70 493 .38959467610924836 -123 493 .3258839503577661 -130 493 -.2103923616118233 -137 493 .7794048575740831 -144 493 1.0144076727525955 -181 493 .6580377376607126 -184 493 .05785039418911263 -193 493 .755245342566407 -196 493 -.28636961995385657 -216 493 .4303254072267587 -222 493 .11363629503919011 -228 493 -.4573017967086155 -233 493 -.45421451171927807 -234 493 .14418918551401008 -246 493 .5358324296820488 -266 493 -.23981584736599593 -271 493 .20359191970651627 -272 493 .4480204770373569 -279 493 .22918746488274264 -287 493 -.8701146413876828 -322 493 .12480204212453172 -323 493 1.1756824136874662 -325 493 .05915824220534582 -327 493 -.8666713642128435 -352 493 -1.259371264951486 -361 493 -.08505947663894892 -363 493 -1.0470114894282214 -364 493 -.8787176291406413 -372 493 1.3422458802532922 -384 493 .4514614294527021 -398 493 -.013404417716447202 -403 493 -.13138066805533583 -406 493 -.6621615855607069 -420 493 -1.1214428512304024 -449 493 -.23504139294552806 -456 493 .0525194223558518 -466 493 -.7945970992215317 -471 493 .006592577118996204 -497 493 .5053317383757265 -501 493 .7714332008962861 -508 493 -.6848941143957616 -531 493 -1.506839489286936 -543 493 -1.532721909203783 -546 493 .38659396526738277 -571 493 -.7051881559400393 -575 493 1.4915935360083195 -588 493 -1.015814292573825 -603 493 -.8946393599489476 -612 493 .25519873160321904 -614 493 .0024357891860306118 -615 493 -.29140596523506346 -616 493 .3246756932373383 -629 493 1.0183770357429776 -631 493 .24284147250862323 -639 493 -.5034348269972179 -640 493 .3023946088959685 -647 493 -.07644804411534348 -654 493 -.8580261117308761 -661 493 2.3172648132827742 -662 493 .6506731247516069 -670 493 -.32020931696883026 -676 493 1.8835966128051393 -681 493 .1400423669826207 -688 493 .22432311226839655 -697 493 -.6456717451058462 -698 493 .748426678171054 -703 493 -.21791113183408206 -710 493 -.6690668026387838 -715 493 -1.0079538110883752 -718 493 .422298417911102 -719 493 -.494006663906215 -744 493 -.5303784297739643 -745 493 .3491022735635574 -752 493 -.03348612267639563 -756 493 1.628063124544265 -767 493 -.08398490475851977 -773 493 -1.2696162377554665 -774 493 -.15503655551197543 -779 493 -.46840044184243734 -808 493 -.20737285007306602 -834 493 .10009590383379727 -842 493 .4443789027629409 -844 493 -1.322334944677749 -848 493 -1.5514757650772752 -853 493 1.0453939697742962 -872 493 .1573851520083516 -885 493 .20966721152200601 -897 493 .955065253502245 -919 493 -.43958506217692767 -929 493 -.25338266756783867 -935 493 -.8861619904972995 -951 493 -1.0004289003594353 -954 493 .40148934970829103 -965 493 -.4806419385216055 -979 493 .14671574058882236 -986 493 -.7153189947674222 -998 493 .38125810304871927 -999 493 -.40610973548310947 -4 494 -.005494280171348176 -26 494 -.43488435171100315 -40 494 .8121351914865553 -52 494 .502749900761971 -61 494 -.045041668134742446 -67 494 -.677113307405001 -74 494 .167737562394835 -78 494 -1.427547205232972 -92 494 1.9526185308946098 -93 494 1.4300731053102476 -113 494 -.1611611136394613 -124 494 .7461234354766776 -153 494 -.5592379453367856 -157 494 -1.4597728278230435 -177 494 -1.1430457335195405 -196 494 .07515285148763597 -206 494 -.13345130825576212 -209 494 1.4988304807765551 -210 494 -.8889984123154073 -243 494 -.2645904697635426 -245 494 -.2923462369805175 -267 494 -.42737820275462696 -272 494 1.3363054496275646 -273 494 1.758646512051914 -285 494 .42489081375087384 -303 494 .6170697605627995 -304 494 .3420509604091593 -308 494 .2566650516327871 -315 494 -.06888295828903537 -317 494 -.20542141377998233 -334 494 -.8999798359291149 -352 494 .4601586894270917 -357 494 1.5482475796249626 -358 494 -.6734747985056893 -370 494 .2530574686917728 -373 494 -1.006906624440564 -377 494 .06546972998032105 -387 494 -.12803119328746898 -393 494 -.26532010054817934 -425 494 .7371824144391207 -452 494 .7942887581701442 -455 494 -.8600037415851989 -472 494 -.04283154365899096 -487 494 -1.401402314343173 -500 494 -.6412424435040321 -505 494 2.1086488649077144 -518 494 .0011655751922821263 -522 494 .7915706326060132 -523 494 .7511634086622283 -530 494 -.6277138895053999 -542 494 .7657744458572457 -569 494 .27697017979108174 -574 494 .06670039288995261 -583 494 -.4140063334656096 -610 494 -1.8028549060942385 -618 494 -.9247825543882613 -622 494 -.7315539695368447 -643 494 .5034188907317929 -646 494 -1.2720591784595603 -651 494 1.6326759604460204 -677 494 -.9120666587806479 -688 494 -.10227249515843867 -712 494 -.29234663679155876 -716 494 .3690690051792169 -725 494 .5563575139027203 -739 494 .2369553265868125 -749 494 .6860729608285544 -756 494 -1.5696871044672247 -779 494 2.0130309750233493 -784 494 -.07591341396350093 -793 494 -.20257410043068508 -815 494 .5090138501117886 -846 494 -.37396085098035253 -869 494 1.0190994326931118 -876 494 -.14910303985667958 -880 494 -.8382768789911184 -885 494 .6533728389019696 -913 494 -1.7541656746053749 -920 494 .5422838205405178 -922 494 -.08809788337622138 -924 494 -1.2086865845230637 -946 494 1.4236062134470513 -979 494 -.5964075661670803 -986 494 1.0947994426542353 -1000 494 .31368556154851485 -2 495 -1.23485793112002 -32 495 -.06034971952722598 -42 495 1.3342813472570616 -45 495 1.2261425208875194 -47 495 -.7291262484065069 -50 495 -.39487577060806034 -55 495 .13181854784367986 -64 495 -.005503064983780295 -68 495 .22983789991588063 -71 495 -.5089722079327758 -77 495 -.0357425716328815 -111 495 .05585723219877664 -112 495 -1.7479759510192103 -119 495 -.7325370746225511 -125 495 -1.8885189853576094 -128 495 -1.4531481763415388 -129 495 .12379880538970936 -131 495 -1.2004666303625169 -133 495 .6214748727195045 -168 495 .06835053853548262 -174 495 -.5835660022622974 -190 495 -1.5240665353739156 -191 495 .35279845031231555 -209 495 .12063592900308494 -218 495 .3610463111120831 -222 495 1.8978936537869036 -228 495 -1.307461217308481 -237 495 -1.1283582046426248 -239 495 4.698851753408784 -267 495 -.6300412238373484 -280 495 -.6913000205860211 -285 495 -.9669682229993191 -292 495 1.1076489662969546 -297 495 .12087666056604986 -307 495 .5466641859425325 -317 495 -.5240035742693104 -319 495 -.6382784648678111 -330 495 -1.0351018954236764 -333 495 2.559962224772909 -353 495 -2.000191752445745 -355 495 -.6024143364019234 -370 495 .09461490023487126 -377 495 .6676965027910658 -378 495 -.9169599796133276 -401 495 .6596402308643066 -405 495 -.30799440008647516 -415 495 -.11561524571302276 -420 495 1.1733199617360495 -423 495 .5697311836074261 -432 495 .763476524347561 -466 495 .1531310020270037 -467 495 1.7009634690034208 -473 495 -3.160682186208769 -485 495 .3336145957340761 -501 495 .6615390388561417 -511 495 .1899230823050467 -520 495 -2.9393050300117847 -536 495 1.263472728861754 -571 495 -.14521969846193278 -578 495 .35977848859125516 -588 495 -1.3472095417216277 -591 495 -1.3562587707822062 -592 495 .5780266784282772 -595 495 3.7169628556581844 -615 495 .8426577702828237 -620 495 -.3757006126608948 -621 495 1.22374159353625 -627 495 -.6220542632982389 -658 495 -1.4139482111292923 -689 495 1.1183976665606372 -696 495 -.682200015334143 -704 495 -2.2339154551327804 -714 495 1.4482019313067167 -727 495 .14240490619624907 -732 495 .10003169626133648 -736 495 -1.5358614364903878 -745 495 -1.263713626862939 -746 495 .33084510574914844 -757 495 .736252152033475 -772 495 2.1509184777225587 -774 495 .08466783606857928 -793 495 -2.112178216759355 -797 495 .7864375692341651 -803 495 1.0236123916621374 -817 495 -1.9899938892477282 -823 495 -1.2362012514250833 -866 495 -1.4237677723001934 -868 495 1.1838849492408035 -888 495 -.6534004739220278 -895 495 -1.1193150970643226 -897 495 1.4390985705996377 -912 495 1.2646095237085249 -915 495 -.6589895725356727 -920 495 .7015471659754007 -921 495 -.9950116045111898 -922 495 .1387346576226303 -930 495 .8401224148594109 -940 495 1.629243054508442 -943 495 -1.3723731000729364 -953 495 1.9281679671048055 -971 495 1.7690109002811514 -975 495 .5128371252828194 -976 495 -.8077898692268922 -988 495 -3.2545738444402836 -991 495 -1.7812845966381703 -994 495 -2.470787404731998 -997 495 1.46483484546966 -3 496 -1.0557648515670426 -15 496 -1.5240299571614782 -16 496 .8376042420758026 -29 496 -1.8894247089926295 -35 496 .7206190692567378 -41 496 .6306777135210808 -42 496 -.35164797190720454 -67 496 2.9958429814434977 -69 496 .1416038138831414 -87 496 -1.939656746311147 -106 496 -.6359698539541834 -114 496 .0027554171868034993 -117 496 1.2177706641583896 -148 496 .7230907514812971 -152 496 -.6072557198413282 -169 496 .5768690434051461 -178 496 1.6682622277857895 -189 496 -3.233414659924321 -201 496 -2.115270607019072 -205 496 -.5383732750050259 -214 496 -1.2402566132934123 -221 496 -.21699743069953323 -229 496 2.363000825303403 -246 496 -1.536282916127244 -254 496 -1.9102495129750041 -267 496 1.9809466931843172 -274 496 -.032054511802581544 -282 496 -1.6521761119574259 -285 496 -.8366252202255515 -286 496 2.76141912086041 -319 496 -1.8143654816598733 -340 496 -1.5103037719975716 -348 496 -.4185948702846773 -349 496 -1.2167901615485635 -351 496 -1.9262452536046275 -372 496 -.6767785046202262 -374 496 -2.0944467400662092 -381 496 -.17161449287216923 -398 496 -1.1203873277398677 -401 496 -2.5592124489545145 -413 496 3.062458587212558 -421 496 .8329177226727004 -437 496 -1.8893954532416521 -465 496 -.2762479150681857 -473 496 .8036675511008355 -476 496 1.6549230638536474 -478 496 -.026504420692545598 -483 496 1.110401403702061 -529 496 .16010066117741123 -531 496 -.8109690824993997 -548 496 -.5635402479023157 -554 496 -1.3155028526455905 -594 496 1.5256164901645528 -597 496 .39332973946880534 -599 496 1.3697442082193079 -606 496 -.5568879550037962 -609 496 -.6153053472860063 -613 496 -.8725968378714047 -629 496 -2.1682197088487567 -634 496 .24418792364763214 -635 496 -.8826830396117954 -639 496 2.1794132776616046 -640 496 .012189372215157243 -642 496 -.1398126007497585 -649 496 1.129606197610264 -654 496 -2.42805332700944 -655 496 .28678723589381033 -659 496 .6160784930595872 -662 496 .5430130082485095 -664 496 .9547218413231933 -689 496 -.16679560793382775 -704 496 .35643386060755067 -708 496 -.8954885284979385 -714 496 -2.0757821780195207 -733 496 2.51185476638743 -747 496 -1.635664755388806 -750 496 -1.0266397968320669 -757 496 1.1648241250828053 -776 496 -1.4232273221330558 -777 496 -1.4717741567725626 -821 496 -.19018502665304543 -823 496 .40702603474132526 -839 496 .682463713895521 -843 496 1.8073884549746788 -847 496 -.8973689452455229 -850 496 .08558451374186382 -852 496 -.3432749731066681 -855 496 3.213435659185773 -863 496 .39344220453347345 -875 496 2.2006745292069065 -911 496 -2.5943453027658907 -916 496 -.6322122043242889 -923 496 -1.192450190560844 -925 496 -1.443613319854504 -927 496 -3.2113232924377026 -932 496 -3.2673308480375898 -950 496 -.8990602522198248 -952 496 .04873514507383209 -954 496 -1.2663052265370016 -972 496 .5526692459406272 -982 496 .22604912762024088 -990 496 1.13284868743648 -5 497 -2.039662760479757 -10 497 .0819481365243114 -14 497 .2864126458888503 -20 497 .5994107658242251 -35 497 1.2890705777153617 -36 497 -.02133624379527908 -44 497 -.4111650951145933 -50 497 .48070713354853545 -71 497 -.1359281131665145 -73 497 .2508066201557095 -84 497 .8573464420778938 -90 497 -.27074336498978074 -117 497 1.7729941586299254 -125 497 -1.2293660188188125 -128 497 -2.0856393599398952 -133 497 -1.3081952716830174 -141 497 1.9331678798888952 -164 497 1.9555333478284749 -167 497 2.4622265553866964 -189 497 -.592045623413693 -195 497 .5094710004258176 -205 497 1.3642512960545474 -209 497 1.5594379712985196 -218 497 .990985204107276 -232 497 .9208427837349544 -237 497 1.0516746832970179 -257 497 .9602018145340027 -259 497 .5514986941289263 -263 497 -.5498770538293554 -306 497 1.2704838110883407 -319 497 .29126543523207393 -329 497 -1.6010410063433926 -352 497 .03590564322366163 -353 497 -.15964830061058413 -358 497 -1.6964529473627186 -362 497 -2.5731243253922904 -363 497 -.9655985522512279 -370 497 1.3769361381148788 -372 497 .23178018922501248 -391 497 3.3246068860192572 -395 497 .3610082866230876 -397 497 .8827873149243324 -411 497 2.000430212940115 -417 497 .265832541833543 -435 497 -1.0628977915895426 -452 497 .24164519810348167 -476 497 -1.5796126880154748 -479 497 .06247995862715585 -480 497 -.18017176243868963 -488 497 1.5993230663405118 -490 497 .6727990812213619 -506 497 1.0106693514177203 -518 497 1.868525532330218 -519 497 -1.0210579536753221 -537 497 1.213393752983699 -542 497 .48116380617053306 -543 497 .2618141026330119 -582 497 -.8128970850400087 -597 497 -.8902655800452741 -599 497 -3.2158133528497297 -612 497 -1.1169462448274439 -613 497 -1.1065343880411 -615 497 -1.0875783917492368 -625 497 1.1739123009434387 -627 497 -2.2288145667734507 -628 497 .20890407246852546 -645 497 1.339206984342934 -653 497 -1.3975262743001888 -662 497 -.755878691562729 -663 497 -.5016220515939177 -665 497 -1.3882018571085557 -675 497 .6522722027819803 -682 497 .3401352340137863 -690 497 -1.044690780233565 -698 497 -1.151549322688664 -710 497 -.8241998960542094 -719 497 .23363253618520305 -726 497 1.1352473617333132 -729 497 .3531097925094162 -741 497 -.28810471021516115 -750 497 -1.389500627219884 -755 497 -.4415953370770379 -756 497 -2.772225063707699 -766 497 -1.9047908091279768 -767 497 .2646323406506069 -773 497 -.5507867878733458 -787 497 1.0490477213607792 -788 497 -.8993796946189161 -789 497 1.682173116254641 -800 497 -1.6226702267648225 -802 497 -2.2280692330587737 -806 497 -1.0409553859135672 -813 497 2.171386347207638 -838 497 -.8196506006547085 -856 497 -1.01002667613142 -869 497 2.609528068138402 -872 497 1.7817205146754844 -882 497 .1685726370621721 -894 497 .5650719169594605 -912 497 -1.4455601473671418 -918 497 -1.3648131035165074 -922 497 -.3723031432302715 -934 497 -.01735652207178834 -940 497 -.5017744481227022 -945 497 -1.3179709554587737 -948 497 .1334050417572081 -956 497 1.8960944144612812 -973 497 1.026449391848453 -977 497 .3411647754890386 -994 497 -.6793209957877953 -995 497 -2.5854264191856937 -6 498 -.7156945838157249 -7 498 .1772837356213764 -15 498 1.1918017899322897 -18 498 1.21812041231684 -19 498 .40854367899054367 -21 498 -.5359369315935805 -22 498 -.2955496961951326 -27 498 1.1093193549137232 -51 498 .18503092868168294 -52 498 .4712161175545553 -58 498 -.07578553533985322 -62 498 -1.1048630653799747 -63 498 .40076530416379885 -64 498 -.953858889416957 -72 498 -.03409593473871167 -77 498 2.1188683020368377 -83 498 .5837788912833055 -92 498 1.1190712736523483 -114 498 -.6015516586208147 -132 498 -.09087942205002597 -139 498 .19361223478075254 -143 498 -.7001455953580152 -145 498 .8452150155299466 -162 498 -.6127526126544941 -166 498 1.252960197530211 -171 498 -1.1322582309995297 -175 498 -.2581273315106248 -189 498 -1.2940468105288834 -193 498 1.006344120937649 -201 498 .6571942460409492 -210 498 -1.1938939901882986 -226 498 1.553586179465978 -245 498 -.19758819938359454 -252 498 .2945013660479851 -254 498 -.4796437215500111 -258 498 1.214494337350407 -261 498 .19331846483308107 -263 498 -.11896546507153015 -265 498 1.0606888571385678 -275 498 .3900042443947732 -276 498 .6240379021701578 -277 498 -.5821798642238087 -278 498 -.32934152991532895 -284 498 -1.201500628827141 -293 498 .5257302633242464 -302 498 -.8833986007278247 -315 498 .19930964392527029 -328 498 -.9335600981979159 -329 498 .19772911911963778 -333 498 -1.6609898275557742 -340 498 .037502556318086834 -351 498 -.9757734274717831 -355 498 -1.126310778282476 -357 498 1.1266796581262946 -375 498 .13500619170729128 -402 498 .532554693563639 -403 498 -.5829312576712794 -407 498 .4466890627916603 -417 498 1.8930873613647101 -419 498 -.1033387931376761 -459 498 .6669187554756563 -490 498 -.5150705554938522 -502 498 -.46255787777015916 -514 498 -.5390523064439632 -515 498 .8257724858984045 -516 498 -.38603920331690117 -526 498 -1.2037700890922818 -527 498 -.4933541991973017 -532 498 .09206537436588466 -537 498 .6813208014852721 -549 498 .033498889178168074 -565 498 1.0318249807709532 -610 498 -1.5795616051070989 -619 498 -.46392125796120876 -623 498 .6610476365322091 -625 498 .34771026423995827 -644 498 -.04945228406181807 -671 498 -1.1663542326217566 -694 498 .3862391746081612 -696 498 1.3173515654876657 -704 498 1.5229428592370104 -709 498 .2578753672338634 -711 498 .7424794333096124 -723 498 -.4754223277018502 -729 498 -.22502282441807586 -731 498 -.48254184451555626 -736 498 1.038909669139757 -741 498 -.08991827130943172 -744 498 .3223733992476443 -750 498 .11939757477931505 -760 498 .8118827776894377 -763 498 -.2795518803021449 -780 498 -.8178198900861712 -797 498 -1.746921144993395 -798 498 -.06732263621223819 -804 498 .11228493478790837 -807 498 -.38777780496488057 -828 498 .49192130445392934 -842 498 -.864324175367823 -843 498 1.9423468602569032 -852 498 -.7290852606653295 -857 498 -.3320581656382493 -862 498 1.8296382262044375 -879 498 .3205209546536678 -887 498 -.2790873481708684 -907 498 -1.4600793771956693 -922 498 1.1347261913402862 -932 498 -.2986268589515168 -933 498 -1.0793606252466952 -942 498 .09098529124849762 -946 498 .8913454157485764 -949 498 -.34198984881761674 -962 498 -1.060819883734179 -976 498 -.13594630654256556 -993 498 -.901741903641013 -996 498 .18849807629111986 -1 499 1.4694385410601911 -9 499 1.0860852510976153 -11 499 1.935388955259749 -23 499 2.9379827615131178 -26 499 .17148752430032893 -34 499 -.4488573019332053 -36 499 -.7190893387839918 -37 499 -1.1271348976986026 -41 499 .3365566061548225 -42 499 -1.1461971392263148 -43 499 2.2384901790621825 -63 499 -.19158900027923942 -69 499 -.8198744309244228 -82 499 -.6015801216289283 -84 499 .1417947483564161 -102 499 1.0173758385325402 -125 499 -.1820816499778765 -131 499 .04671575430738925 -139 499 1.394519663170904 -148 499 -.7536723212680876 -156 499 .18343576914794338 -171 499 -3.515339298734623 -181 499 -2.8543021128703376 -202 499 -1.6712031377058165 -209 499 -.13818653632643974 -216 499 -1.2636636505976662 -219 499 .5227038925288864 -222 499 .7047344408128262 -223 499 -1.5065465831187712 -224 499 -1.330152835621709 -229 499 -2.321984580062175 -242 499 1.7040107466438275 -276 499 1.0926655860091656 -290 499 .5608338252545713 -291 499 -1.7018000502357373 -296 499 .8203923392386793 -302 499 2.3338833010622513 -308 499 -.9893189877870604 -310 499 -1.2292649141689667 -315 499 -2.1210224357004863 -324 499 -.7267955397210789 -331 499 -1.4921383069426495 -350 499 -.32986305818001804 -367 499 -1.8587840763033534 -373 499 -3.1639743733594208 -380 499 .9114856071282214 -388 499 4.066102671490628 -409 499 1.9576306892547999 -413 499 -.42361104199863403 -426 499 -.24105967050748983 -434 499 1.063167827954435 -445 499 2.972340810897145 -446 499 -1.2601503752045449 -455 499 -.7488217316641405 -474 499 1.4967929167290595 -479 499 -1.1562251109859463 -494 499 -1.3399557790558783 -506 499 -2.4971711849590004 -513 499 -2.109671154541964 -520 499 -.6075613915520893 -565 499 -.47667278318872425 -569 499 -1.5093255203624345 -602 499 1.5054744057389666 -606 499 .11293355746586989 -627 499 .03544588333667392 -628 499 -.3227401863065058 -629 499 1.032149856499039 -634 499 3.0443165346250796 -646 499 -1.3846519497198957 -658 499 -.3983245903060163 -663 499 1.733108284712129 -694 499 -2.5157573602243635 -695 499 .19363251240129667 -715 499 2.1283116820941106 -720 499 -.516496019028009 -723 499 -3.641821871239038 -743 499 -.20040366515951738 -760 499 1.6457425902659633 -761 499 -1.4945324204145765 -770 499 1.2145689942576487 -778 499 .29036206234108886 -785 499 -.2555738256969448 -789 499 -1.8200539238147755 -793 499 -.9843132806046598 -795 499 -1.658076553471918 -804 499 .7670071731685921 -812 499 2.5674760796322613 -813 499 1.336056391563464 -815 499 -2.668430289873441 -816 499 1.8390160405030573 -823 499 1.4895647689702125 -831 499 -2.737519686673147 -837 499 -2.4181806065213274 -842 499 1.0723879956249633 -856 499 -1.722927082804884 -858 499 -1.8853153261591853 -859 499 1.0523479420216293 -864 499 1.902307161172059 -872 499 -.36340287846004393 -885 499 -3.157373658140943 -899 499 .1204899747072534 -909 499 -1.3893737959021952 -941 499 -.38671156393193923 -944 499 -.22844026460960945 -950 499 1.675253400905711 -962 499 -2.910925521871596 -963 499 2.244192564165271 -978 499 .8537059450086325 -996 499 .7497804408311883 -18 500 -1.5764978231027784 -20 500 .852070446997184 -27 500 -.7098888022537226 -31 500 -.5250831097350354 -32 500 .29113273430610087 -34 500 -.9211736909793027 -38 500 .32221571585336656 -55 500 .3319744124242852 -58 500 -.8437293146379459 -59 500 -1.3686711699165501 -65 500 -.1730333653034714 -79 500 -.5779736658055846 -96 500 .3287903451442938 -98 500 -.28375639023253163 -103 500 -.13276302998037393 -105 500 -.007778613162020789 -106 500 -.28781229889167215 -118 500 .38185539156532866 -119 500 -.34812330129474656 -124 500 -.12816407327066376 -135 500 .07529971005151506 -153 500 .9255956016797465 -155 500 -.81972462667966 -160 500 .28530148649397263 -162 500 1.852915929299985 -173 500 -.15823279026749393 -180 500 -.5974437963492814 -181 500 .20136738559338407 -185 500 .08203816638899017 -196 500 -.05006830600848672 -208 500 -.24502935009960414 -220 500 .7329793863500264 -223 500 -.03946995170989581 -238 500 .9822935401027659 -242 500 -.4313051910647983 -249 500 .17707565867451014 -265 500 -1.1684904747533769 -275 500 -.3498536191513002 -298 500 .13220674951231393 -318 500 -.9158930467519004 -321 500 -.667239551655858 -323 500 -1.10342422253173 -327 500 .5518939278628145 -331 500 -.2277070588435224 -340 500 .10761716544463125 -353 500 .8927468613744585 -362 500 -.08659793135193412 -379 500 -.8579972709882862 -380 500 .15945305025120204 -409 500 -.03408465577098202 -415 500 -.07935922804449054 -418 500 .10449056941908424 -419 500 -.8639172996627786 -434 500 -.3251502423682121 -435 500 -.6775222838989445 -437 500 .08772237958001611 -448 500 -.06085557005129638 -464 500 .09054966159614711 -465 500 .45650306651986317 -469 500 -.3570119330639415 -480 500 -.15639262083446664 -482 500 .30701749159080727 -483 500 -.5670097647485405 -502 500 -.3926079569365973 -512 500 .635175711914342 -513 500 1.327474678757404 -535 500 -1.0905160462219134 -536 500 .7789314663294274 -541 500 -.2445709134091033 -553 500 -.7683878068744942 -554 500 .955392852977362 -565 500 -.5470549998857225 -572 500 .006616801983586967 -574 500 -.16810467153783515 -575 500 -.20006035966845073 -612 500 -.2554827571228816 -641 500 .3306971155798438 -648 500 .004998702720450596 -668 500 -.08460964814118413 -680 500 -1.2018433611692876 -693 500 .28147831221818864 -698 500 -.5385222890008359 -710 500 -.7683614054376661 -712 500 .1781064366277956 -718 500 .34351132116903993 -753 500 -.33088684317831735 -757 500 -.2391232756548088 -775 500 -.1180828610007341 -776 500 .37317395071766835 -789 500 -.4536517684088359 -805 500 .9879437940406786 -808 500 .35212346148480883 -848 500 .3895920327149825 -863 500 -.710828479926789 -864 500 1.4167940212579861 -892 500 .8415016882181123 -895 500 .721566191006256 -899 500 -.02775067480709506 -902 500 -.1564673272844131 -916 500 .24917020768078166 -920 500 -.08368011530340594 -928 500 .8791573789618088 -943 500 -1.562082410589362 -956 500 .023517039168781947 -4 501 -.009796054826874189 -14 501 -.3428805004361465 -34 501 -.10260315446240914 -38 501 -1.1112391022172319 -54 501 .06810461783454799 -59 501 2.466000015618506 -64 501 .5809579449385952 -76 501 .9733291018228664 -85 501 2.14493842563564 -89 501 1.0154265399885565 -92 501 -.6528582628764574 -93 501 -1.0400789489092555 -98 501 1.095492663676136 -104 501 -1.0230379770490663 -126 501 .06937940962181173 -132 501 1.8564410448537627 -141 501 -1.356025318447238 -167 501 -.336915982922847 -170 501 .789669188587093 -175 501 -1.505880701078358 -176 501 -.4291893612125344 -181 501 .299980733830519 -194 501 1.6134869117966213 -238 501 -.5519514395200535 -272 501 -.9596810847496008 -321 501 .44397420218308087 -332 501 .29722035515833983 -336 501 -1.5275821163754688 -361 501 -.6872210792175096 -369 501 -.38888760654555976 -377 501 -.30030127012900365 -391 501 .23725803880878543 -392 501 .9786016866884083 -394 501 1.101376500072853 -395 501 -1.008556131140533 -412 501 1.385723106232187 -413 501 1.8961242241244227 -427 501 -1.2733193664845124 -435 501 -.8165583656197744 -440 501 1.8435401212219824 -441 501 -2.9141541075490767 -444 501 -.0979512994403112 -454 501 1.1075892567748593 -459 501 .8846623318391931 -480 501 .5373967070190281 -486 501 1.4684735588566202 -490 501 -.29075561921211707 -493 501 1.2532470991744349 -531 501 -.25082509453293034 -540 501 -.3035477805400583 -553 501 .8458463923275695 -571 501 -.9785473098892348 -575 501 -1.211327756046522 -582 501 1.1079795305118716 -602 501 -.8819636243322336 -604 501 .6471287311384344 -607 501 -1.2168773967650908 -608 501 .3819173613734538 -624 501 -.14588165692130306 -628 501 .009945143733216893 -648 501 .2740141028934019 -671 501 2.023585991380463 -681 501 -1.5548521670550262 -689 501 -.5887145027021026 -697 501 -.11229168895883677 -705 501 1.0359051230451952 -712 501 2.422558439100901 -733 501 .37141046233880853 -742 501 .8684871934589837 -759 501 .12846776990353842 -780 501 .3293849554473958 -782 501 -.6715663866123787 -795 501 .39745251464398124 -798 501 -.7818795711135567 -802 501 -.7615213271081297 -826 501 .27500847630356173 -827 501 -1.0953254401353583 -834 501 .041056140720401896 -835 501 -1.4101820457972547 -850 501 1.157969763123958 -868 501 -.6380680140740491 -877 501 .6553719865896428 -881 501 -.521050420001744 -898 501 1.0958013838192744 -908 501 -.6406834032345001 -927 501 -.04840499278293847 -928 501 -.966605326715677 -934 501 .8812899287334856 -938 501 1.5996181357262835 -945 501 -.3815204637436477 -946 501 -.33849142106367386 -947 501 -2.536092295063332 -957 501 -1.5317685622295543 -970 501 -.9550082708172501 -992 501 -1.035382174516434 -999 501 -.5571572543713614 -14 502 -.25511191991889537 -19 502 -1.0059785653855582 -20 502 -.14867745505834856 -26 502 .20516034495810082 -28 502 .689030782076329 -42 502 .7270665544093221 -54 502 1.6195326159954067 -56 502 .5041432961799696 -67 502 -.9796078021786997 -93 502 .832484868499695 -94 502 1.100091986819251 -113 502 .07756872782101946 -137 502 -1.0107865776398028 -154 502 -.1890356031614461 -166 502 1.2533616113397446 -183 502 .7058475066812842 -193 502 .11381938983855491 -200 502 .9124245983503171 -204 502 -.8760650081588718 -211 502 -.1213243264622641 -217 502 .22407294584303253 -236 502 .4638764837038628 -244 502 .31999963625804656 -250 502 .20884559846778064 -253 502 .15734473818370004 -256 502 -.2848329919364506 -260 502 .32730085325420727 -265 502 -.3579905980576311 -274 502 -.14533310979111186 -276 502 .12687536787223555 -288 502 -.6861292397536121 -292 502 .7936991431999081 -294 502 -.46138853834297483 -295 502 .3876210526611326 -303 502 -.9616762612317059 -323 502 -.7836020582660916 -329 502 -.19831690917014 -337 502 -.7302182496744113 -347 502 -.3094697020733038 -367 502 .5079457473579361 -368 502 -.08339243561895811 -373 502 -.8388169912971594 -380 502 -.3911284743320713 -384 502 .05890816793429407 -401 502 -.9095687075947041 -404 502 -.6625716794292421 -428 502 -.4331619906550523 -439 502 -.45322078910505226 -453 502 .22252137830535065 -454 502 .5250476407960587 -457 502 -1.4965123796141637 -460 502 -.239902263305431 -467 502 .0295823254787006 -497 502 -.27017228646980357 -501 502 .748735752453906 -506 502 -.6870732156446298 -539 502 .5729873809081233 -541 502 .4551780696353519 -558 502 -.10165745202214713 -564 502 .7308754694683893 -565 502 .023243387577818443 -599 502 -.0710135915140834 -633 502 -.021978508964938942 -635 502 -.7050339497982252 -658 502 .5200517306862412 -670 502 .09347163447937108 -712 502 1.1569159680589738 -714 502 -.17956601257597382 -720 502 .34474237632105303 -725 502 1.0646941326558614 -726 502 -.2093699610688019 -730 502 -.19400905973308893 -738 502 .3952683912965875 -751 502 .2301103865175082 -754 502 -.06429990822124591 -759 502 .11615180422295272 -782 502 .14472106225405384 -810 502 .6895484130049352 -813 502 -.03520256860810197 -854 502 -.20925996260059565 -878 502 .3631092070215679 -900 502 .18904031473171634 -904 502 -.21205992271073723 -916 502 -.24853134178015612 -921 502 .3524314565794782 -923 502 .058820841460956196 -945 502 .817340658472369 -969 502 -.30392943704612807 -1 503 -.964013130263015 -2 503 .8714042008988157 -10 503 .049658400045192556 -15 503 -.5765001005649149 -21 503 1.3269084486669664 -22 503 .5504839212811604 -26 503 .557966494503439 -33 503 1.2686682413959889 -43 503 .255676844975286 -65 503 .1847811039117138 -68 503 -.17941178328043306 -81 503 .13022685423191974 -87 503 1.8702090254943493 -96 503 -.5199390362921836 -102 503 .054601720846891084 -120 503 1.8659417185640281 -131 503 .174941821540029 -138 503 1.1629498719030722 -146 503 -1.155016756844629 -156 503 -.6210526365950219 -162 503 -1.0321319359618584 -167 503 .6936571041662399 -168 503 .5724007130191031 -187 503 .4481201730088656 -191 503 -.6754783779204047 -200 503 1.8192337667405583 -206 503 1.373974466227138 -219 503 1.3687787535727298 -224 503 .30654167834087276 -225 503 .14116553081022096 -233 503 2.7321258092907907 -241 503 -.37925901325779887 -256 503 -.5333931258222828 -257 503 -.9244976517087429 -272 503 -.32187444617433814 -278 503 .890865591801584 -279 503 1.5061082038115332 -320 503 .5559143514799098 -339 503 1.637616177855379 -354 503 1.1077043214830304 -355 503 1.3686281122513984 -373 503 -1.8661218032042193 -375 503 .9795869311443232 -387 503 -.023162054855595332 -394 503 .9135012681278076 -420 503 -.7125023099712714 -421 503 .9757280358610064 -434 503 .17110781857878782 -447 503 .3923207433498129 -457 503 -1.8588131028168828 -521 503 .40419475596630183 -522 503 -.08996554629946292 -525 503 1.0202654496538905 -529 503 .11817765754949835 -532 503 1.0956287246083969 -555 503 .9782387057923734 -609 503 -3.25865542656583 -612 503 -1.4295658471619406 -618 503 -2.15866297672418 -620 503 .9949640974623393 -624 503 .5412920977490115 -641 503 1.1736426860328892 -653 503 -.026100169756081038 -666 503 -.10540008107633264 -675 503 -.04522028460924954 -698 503 -1.060855003207098 -700 503 .7748650993855141 -701 503 1.1450139869488762 -705 503 .7532165291380458 -710 503 -.7722026664242936 -713 503 -.7684907972177685 -719 503 -1.456413348357037 -721 503 -.27006671748861155 -728 503 2.1931541518092548 -734 503 -.9152886707203849 -736 503 1.4609434794572915 -746 503 .37082175120098315 -779 503 1.1834181943020368 -781 503 -.08780137579107541 -782 503 .08541549381161151 -793 503 -.9099999739929825 -799 503 -2.0623742554586064 -814 503 -.33052451337279093 -815 503 1.4616932367081916 -824 503 -1.1690442836719104 -835 503 .444080247326187 -845 503 1.180321461232624 -854 503 -.4900886639372577 -871 503 -.6222858080159778 -890 503 .7785568529550133 -894 503 .5453575660915115 -914 503 -1.6077375488412462 -916 503 -.15680441138829818 -918 503 .2932147185592589 -929 503 2.217173361049587 -933 503 1.9995904729945584 -972 503 -.3493314359771258 -974 503 1.2490765589851536 -979 503 -1.1150623789782186 -980 503 .48378262872177275 -990 503 -3.037997589197872 -991 503 -.3583478251249162 -998 503 -2.6527902600137914 -1000 503 .035062968836545944 -3 504 -.5674194297677579 -7 504 -.4321599797522687 -10 504 .5089983851452047 -19 504 -.1156545828884097 -20 504 .30187447612166163 -42 504 .39874794421342225 -43 504 -1.1343580210132471 -46 504 .48018292846367966 -51 504 -.08453601676990669 -58 504 1.0958427515006859 -64 504 1.0489231726020223 -68 504 .3714334586173481 -72 504 .2418887844231965 -91 504 .14340291032893412 -93 504 -.3432191292512683 -114 504 .06266250154760614 -120 504 .9319278643019852 -121 504 .14997056911759835 -138 504 .5013775696594799 -149 504 .138558285529857 -150 504 -.06514895315397817 -152 504 .568721857278897 -160 504 .8930475387093173 -189 504 -.02559278320860553 -211 504 .6070623616446928 -232 504 .2534888584884195 -235 504 .36542655723141976 -240 504 .4098901219427703 -243 504 .7245004952304694 -247 504 .12272580420441209 -248 504 .3197145015323923 -268 504 .11426196319449927 -282 504 -.8724020482465242 -286 504 .862996918834384 -292 504 1.0173850107041373 -309 504 .3751583841297242 -311 504 .05148709117513445 -335 504 .6981093574249936 -355 504 .4624396853791993 -385 504 -.3973493437915154 -392 504 .01640549157063978 -397 504 .20005480012574278 -410 504 .19618422614208364 -416 504 .4627774810354853 -421 504 .6764770293776717 -423 504 .4366371137610119 -432 504 -.26126338530963245 -448 504 -.8406535883375276 -468 504 -.2741573567845002 -497 504 .8724118500758884 -499 504 -.4353474368073363 -512 504 .5405770613861155 -513 504 -.6974158803307756 -517 504 .4967732277808373 -538 504 -.29010892630448454 -555 504 -.08676835317914779 -563 504 -.08929050223423027 -572 504 .15955986611739303 -575 504 -.9843914311717077 -599 504 -.05223617071320871 -603 504 .8796491751942443 -608 504 -.32059021441297914 -609 504 -.13430305229868322 -610 504 .8224140098065122 -623 504 .02683385900495633 -624 504 .381922699570309 -649 504 .6257191994977086 -653 504 -1.476204700069816 -660 504 -.5744930122699707 -665 504 1.52498012582659 -677 504 -.06642789933651404 -692 504 -.6991269151865094 -694 504 .4412032245424076 -702 504 .678350691635798 -731 504 .3879885996152309 -736 504 -.6117297998126794 -744 504 .07472209281065012 -747 504 -.34501150750424764 -751 504 .467776955154033 -765 504 -.14580577156220326 -773 504 -.7713425671188285 -784 504 .44760975009639237 -805 504 .21299056033925784 -807 504 -.40964651621851966 -811 504 -.06111490743006944 -812 504 -.29100342000394364 -822 504 -.664212868334948 -840 504 .26135370829794524 -863 504 .45614643431237456 -874 504 1.0228711804564918 -877 504 .43554759395769727 -915 504 -.15693401396928125 -931 504 .4217361709357216 -941 504 .4134665026772908 -961 504 .430444305119636 -962 504 1.1273400538939375 -967 504 1.4652222519016682 -969 504 .7485244883624796 -972 504 .8135938227767588 -980 504 -.40863554919098444 -992 504 .054973171379000686 -993 504 .22937830927945782 -994 504 -.49266812721132247 -10 505 .8901232582592059 -29 505 .3526569936182683 -33 505 1.1896091819792458 -56 505 .2999468290864824 -79 505 .26866714916232814 -80 505 -.47859009479757925 -88 505 .5431414300942933 -104 505 .5205388903978371 -107 505 -.813900384148471 -129 505 -.6216904776782702 -138 505 -.8236932372239745 -152 505 -.19377299449118235 -160 505 2.219362702162365 -169 505 -.35315755523467496 -170 505 .11756687268722357 -186 505 -1.5322012899323239 -190 505 -.11613731569668342 -195 505 .691777579465023 -198 505 -.7135962775371326 -199 505 -.49289995990980434 -202 505 .4369141350514998 -209 505 -.1482485451717773 -213 505 -.12397898668448148 -228 505 -.11028844347236658 -234 505 -.6224121694714239 -236 505 .17147267909637015 -245 505 -1.1592475741156512 -253 505 .6060514502044396 -256 505 .31060181460376113 -258 505 -.34043417147489513 -265 505 -1.4359858123064182 -269 505 .5875874365075636 -294 505 -1.2560752108796194 -300 505 .38237000592535453 -301 505 -1.958639350178544 -308 505 -.4713537802166732 -334 505 .21670240080177744 -347 505 -.7103369428178943 -362 505 -.37343098702676214 -372 505 .7321165708123409 -383 505 .5691644668907436 -400 505 .0493757252322828 -410 505 1.2178666472859407 -415 505 -.09897519702513026 -416 505 -.7306839798198862 -429 505 -.23505119754070086 -431 505 -.39626312377356454 -437 505 -.12759212335960796 -448 505 -.6659149836181568 -488 505 -.9082262710887534 -516 505 .9215926152602173 -529 505 .21780507402945237 -538 505 -.8976672010334257 -542 505 .30680396452531034 -543 505 -.4587101616250451 -547 505 -.5170665187568796 -554 505 .6727008669749744 -561 505 .12509025381221464 -562 505 -.6971565010847913 -569 505 -.5255403394595859 -572 505 1.3538009158404911 -587 505 .5674840227284217 -590 505 .3067718540403735 -593 505 .5812435876371451 -614 505 -.27605470058710657 -642 505 -1.0501192299986983 -651 505 -.2405051525905166 -662 505 1.26031937494569 -676 505 1.3707110107231448 -683 505 -.8144637382102922 -689 505 -.16826379063612854 -703 505 -.5634036030157781 -711 505 -.0678642323098054 -724 505 .4839048767686678 -731 505 -.6456856743935108 -753 505 -.5378543204954568 -769 505 -1.006968431511806 -783 505 1.0856971540344214 -788 505 1.2471465729967162 -789 505 .8307930795266055 -790 505 -.03830543766096205 -791 505 -.04670127344964105 -798 505 -.3149750309712355 -802 505 -.20700505654695647 -805 505 -.16114947544989985 -808 505 -.46603701266880326 -816 505 -1.068711181426065 -818 505 -.4985036039619834 -834 505 -.41537289574754793 -850 505 1.0241622774018964 -858 505 -.7430498595514573 -885 505 -.32525548633419316 -900 505 .6643875064679259 -916 505 .5595455321435637 -917 505 -.9858031602261784 -948 505 -.2633448785445134 -952 505 .09157161209989359 -957 505 .37843324576318194 -973 505 -1.3869115810466723 -983 505 -.8469250065719496 -986 505 .023369429557605733 -997 505 .6780238038419492 -11 506 -.5280108456367785 -12 506 -.3374109370126581 -14 506 -.7374047222006873 -15 506 .2804710957109592 -16 506 .8450322335083351 -32 506 -.3903623901212343 -51 506 -.28049858142822975 -55 506 .9258644141240178 -56 506 -1.0421136878031352 -59 506 .4401539516884052 -64 506 -1.934655759060897 -69 506 .22870569196845064 -70 506 -.3771283038180105 -72 506 -.1606413290289191 -81 506 .2495877940087117 -92 506 .09594553436605564 -101 506 -1.5923704301439485 -102 506 .5229899234359172 -114 506 -.20097605854808792 -117 506 -.9850243124593755 -129 506 .42941399230671407 -134 506 -.08591634526852454 -159 506 .8328557038666551 -178 506 .05663101281362752 -191 506 -.3739108209649013 -194 506 1.0433245944830678 -217 506 .5383958408140557 -222 506 .5565309900740044 -229 506 -.4711968247943723 -242 506 .07336399451851408 -277 506 -.8013223792176671 -286 506 -.6426183746894126 -291 506 -1.057743745668935 -296 506 -.17801658437083126 -305 506 -.1507606566809564 -322 506 -.08650175815150281 -325 506 .04044547625708737 -349 506 1.893454904630232 -371 506 -1.365750027601089 -381 506 .5095160130982406 -383 506 -.3040389341758064 -387 506 -.05393002194862104 -391 506 -1.3481368178386608 -394 506 -.560570572969861 -406 506 -.28584983552224574 -416 506 -.537014716640239 -420 506 1.0098501082639453 -425 506 -.05221898665147462 -426 506 -.6194136092507697 -429 506 .7717471365010894 -430 506 .2942922242865613 -433 506 -.36097701063959925 -461 506 .9532535091217171 -534 506 .30235908997097616 -576 506 .4125223911850305 -580 506 .5745819783484576 -583 506 .3527227250927605 -597 506 1.0470346672796276 -611 506 -1.0991087542504712 -613 506 .30791826661703897 -615 506 -.283190243681399 -641 506 .037417414700336604 -654 506 1.5483279579390343 -655 506 -1.4111536903198574 -667 506 .726131652679399 -689 506 -.08523356612615571 -705 506 -.9557144174216332 -721 506 .1692282025919058 -729 506 -.035886466524122 -732 506 .02288269072875257 -738 506 .3170627903816555 -742 506 .8074704096945997 -743 506 1.1870852212170957 -750 506 .7855955847170898 -757 506 -1.0308815178203585 -765 506 1.4996865171819926 -778 506 -.11058811936268334 -804 506 .26120050061406735 -807 506 .17427437312467603 -809 506 .6809853766533578 -823 506 -.37016575857968487 -843 506 1.1420231864248243 -851 506 .7146879484381261 -866 506 -.5454440810359362 -884 506 -.569679115313241 -893 506 .2506452550320156 -950 506 .27753871000564373 -951 506 .7153215037387094 -968 506 1.277533186844053 -982 506 .5005978126176546 -986 506 .05804194084442323 -993 506 -.694731901803319 -3 507 .1345116335940866 -8 507 2.0900801077383537 -16 507 -.7601165564019174 -30 507 1.318921893446716 -32 507 -1.0847719673438243 -35 507 .5035597916603606 -40 507 -.3874718109045206 -47 507 .032213484338564455 -55 507 .4522513776642916 -78 507 .4771681910947638 -100 507 -.5678800466328595 -157 507 .1198907002975336 -171 507 -.5173309029936616 -183 507 1.0026077279360301 -204 507 1.466422168537688 -207 507 .4503225475158987 -217 507 1.7714462627258474 -226 507 -2.191973291981749 -227 507 1.9635530254147804 -234 507 .9475460606496549 -260 507 .11003376177830032 -265 507 -.18023519906495705 -290 507 -.31469048484944173 -306 507 .5142912716209207 -314 507 .22104015126371265 -335 507 1.0332958410705326 -338 507 -.7833301125027828 -343 507 .5041796452776051 -347 507 -.7840539032609893 -350 507 .48940295153922947 -354 507 2.5303118007073655 -356 507 -1.0310274444015564 -363 507 .11475655317803823 -369 507 .8734309133990243 -374 507 .7405775528757774 -377 507 .5103739691144787 -379 507 .41231508402609596 -387 507 -.27206446598831663 -391 507 -.5837408493223748 -401 507 -.5451517168459851 -410 507 -1.0033768680073267 -416 507 1.484843503651212 -419 507 .04320388438555546 -422 507 -.2598645727789257 -425 507 -.06210335442156625 -432 507 -.48580416221527256 -435 507 .8315213638178505 -451 507 .46191271118235344 -477 507 -1.1809091423820455 -479 507 .544643515327413 -493 507 -1.5511855382821225 -496 507 -.7886106309703476 -503 507 -.41807593947282473 -507 507 -.3257376392670316 -508 507 .09218510857486076 -516 507 -.417935834209042 -520 507 -.058482414523785886 -535 507 .1299356771506053 -540 507 -.3414089440405351 -550 507 .44260729468947796 -558 507 .4456350745846952 -562 507 -1.6417006383095933 -563 507 .3949689579482726 -577 507 -1.432410399520944 -586 507 .2567936877139381 -587 507 .6925116234329146 -608 507 .4279346005819107 -614 507 1.0242698196235203 -619 507 .12553669143200608 -622 507 -.49616219903345615 -624 507 .7272405205929009 -628 507 1.5696782186586646 -635 507 .5046143219430489 -642 507 -.34055878103872494 -643 507 .038896149009821065 -666 507 -.8964600113435484 -691 507 -.6975481810548608 -695 507 -.5248635734563908 -721 507 -.8692465485999146 -743 507 -1.8190709222242125 -750 507 .3046547232082728 -754 507 .9569737527018126 -793 507 -.9620073428065692 -798 507 1.062717391656339 -819 507 -.46050106234385485 -828 507 -.9341163136448711 -831 507 .7561009967501975 -839 507 -.13134471852319196 -846 507 1.1047714783153961 -873 507 -.6983879059218856 -874 507 .0655600391276412 -897 507 -.4482355582208787 -898 507 -.7891230787226761 -901 507 -.3207172627037043 -903 507 -.16100341362222514 -908 507 2.4022072033665403 -910 507 -.12970315064147386 -937 507 -.39761850832237783 -947 507 -.5408080013245289 -964 507 .5602470565526162 -965 507 .23798096264713248 -973 507 .9475341243463631 -990 507 -.00949054226163032 -991 507 .7539759870220845 -12 508 .008349319297172218 -18 508 3.5816838858275526 -19 508 1.4910720529370003 -27 508 -1.9686871631363647 -37 508 .24642743677866963 -40 508 .7503772117804773 -47 508 .905863655369076 -81 508 -.7065735585897281 -84 508 .5428785954757047 -87 508 .4872846176829889 -120 508 .8676318464745127 -121 508 -.5546770587311954 -127 508 2.7405932501880175 -142 508 1.043933411542438 -149 508 .7472478823589783 -153 508 -1.09281474522029 -158 508 -.3305420305280874 -177 508 .013078759962406553 -197 508 -1.4522993943940412 -203 508 .4471438780695932 -245 508 2.014435246736493 -260 508 -1.463405675587684 -264 508 -.24012475647773102 -275 508 -.18338702373076288 -286 508 1.1628183437557658 -296 508 -.10004367932605956 -316 508 -.09304010119034943 -331 508 .5756917082483277 -333 508 -2.216470447511215 -339 508 .6457382039109947 -347 508 1.3048903991912166 -352 508 -1.4356450162619891 -353 508 .9632937417479235 -355 508 -.652944259590808 -387 508 -.7610508936986824 -400 508 -.9646457173297912 -403 508 -2.051655951492637 -404 508 .4097031769514137 -407 508 1.0414600830727867 -409 508 2.2940220817553945 -415 508 .24887417711656884 -418 508 -.9817557755859677 -428 508 1.7864799113552525 -440 508 .39434030184738134 -445 508 -1.361836315029792 -449 508 .19561597099519262 -455 508 .07513476827622141 -458 508 .4823048252317638 -468 508 -.4361339691175794 -472 508 -1.324051011073776 -473 508 2.6596707589222444 -476 508 -1.3911070714809675 -479 508 -.3655936048290568 -487 508 1.9788667440385426 -488 508 .34857488835219813 -495 508 -.10903033073377202 -501 508 -.16266657239180027 -507 508 .23158290512938148 -508 508 -.5040717595793666 -523 508 -1.0220024730989372 -531 508 .3507170152782461 -532 508 -1.7063694125400226 -533 508 -.11594167905108795 -550 508 -1.431058732073482 -557 508 -.17535529517611803 -567 508 -.974917708350058 -579 508 .6633150682606943 -631 508 -2.034275888546017 -639 508 1.3938999366711966 -641 508 -1.2338365680561754 -650 508 -1.320119644126422 -654 508 -2.1567029068138086 -688 508 -.07165699206727108 -690 508 -.7364975847568326 -701 508 1.398796817691286 -708 508 .18892565248254378 -709 508 -.2624598041369542 -710 508 -.5511424271124892 -713 508 -.7349359910396219 -723 508 -2.6943174658616345 -732 508 -.7552375522888666 -746 508 -.8734087673604002 -781 508 -.5697035488778301 -788 508 .25087380658438224 -791 508 -1.0765169365583613 -793 508 .5339516435064594 -798 508 -.47190738911280294 -801 508 1.1437483483118838 -808 508 -1.7549951346041075 -811 508 .978944842142693 -812 508 -.3728810811076215 -813 508 .5040553231488829 -832 508 -.13502828677361367 -837 508 .07991350541326861 -838 508 -.3166086813656435 -849 508 2.090321707977527 -850 508 -.19351327611982921 -904 508 -.07208667505109573 -908 508 -.4744929062686086 -917 508 -.4935680432220738 -932 508 .5910353809328049 -936 508 -2.0978898103145087 -950 508 -1.1304691216618636 -958 508 .7529220913495485 -981 508 1.7573357452974616 -983 508 2.5088346165297413 -996 508 -2.2575676286135336 -1000 508 .8737497057206448 -8 509 .6547633481064465 -22 509 .7123802986434037 -24 509 .30387928902519945 -80 509 -.5576037361972075 -83 509 -.5542692015596489 -92 509 -.5485437427531701 -94 509 -1.3680079512255594 -104 509 .6870845053035368 -115 509 1.7656484515891855 -120 509 .21084761884830275 -146 509 -.7275227355965321 -151 509 -.8926741703568156 -155 509 .16343071485976576 -158 509 -1.7302978287390727 -159 509 .7561416036005927 -165 509 -.41211154168098774 -168 509 .42521722335807766 -169 509 -.5584809555641617 -170 509 .6201452609339514 -185 509 .2305367707260651 -191 509 -.9092991314358237 -200 509 -.684203303855575 -201 509 .16730209396776452 -206 509 .041781650990527414 -215 509 1.1319272821967479 -221 509 -1.1031419111145964 -222 509 -.8317513062079758 -230 509 -.09598070692835825 -236 509 -.722676182431605 -238 509 -.3716778400675157 -249 509 .7060381461141044 -277 509 -.7927500390379617 -294 509 1.8953355258343927 -300 509 .6207339392831327 -312 509 -.5306602386515369 -315 509 .6297334218629395 -317 509 1.1490999869281993 -318 509 1.8317206112509499 -320 509 -1.0108815663343174 -337 509 .7401424912824395 -343 509 -.25431680261706313 -348 509 -.5791011025085555 -396 509 .7307152088526528 -435 509 1.7765197662075836 -455 509 -.8104071294652413 -473 509 .7077176531218414 -481 509 -.16093783816114787 -501 509 -1.0778447695288196 -511 509 -.03348531183171401 -518 509 .31055124071572315 -519 509 1.0770066365579478 -525 509 -1.1646167332565514 -531 509 -.2595011933318533 -540 509 .5873608400107251 -541 509 -.4205295921859701 -549 509 -.8273090515292378 -554 509 -.2774753145360704 -557 509 -1.6768965625409398 -560 509 -.4158107904495095 -582 509 .18859313691639604 -602 509 -.2003940951275929 -617 509 -.06779152728116308 -635 509 -.7203393555814099 -636 509 -.5526692797978091 -639 509 1.0291123357853447 -671 509 -.9829054704150485 -689 509 -1.8213779163204231 -693 509 .5564334605337816 -707 509 .9694117431771365 -717 509 .10977066627709721 -725 509 -1.2492468567417525 -729 509 -.391099031690213 -740 509 -1.3601750302544398 -741 509 -.17288971535031752 -753 509 .48219521887680417 -756 509 1.6411264278681592 -759 509 -.9159301211718185 -762 509 -.922883274167173 -763 509 -.9416061464160248 -768 509 .030402992039189017 -771 509 -.41030986184907225 -778 509 -.6078761304553496 -804 509 -.1576334171444793 -812 509 -.3965410921509705 -815 509 -.4491457989467686 -817 509 -.6597970124314674 -819 509 .48765306908953965 -822 509 .0455203170927268 -823 509 1.0630357180806893 -826 509 1.2344073549459293 -846 509 .5419225906860716 -847 509 -1.6764054704194737 -861 509 .755871696805164 -864 509 -1.774269673000568 -878 509 -.3520681234649217 -881 509 -.029980618390619322 -888 509 -.7319712368918464 -893 509 .06022341232705584 -899 509 -.07451948112155352 -909 509 1.236997825495131 -911 509 -.7300574905391972 -920 509 .18589099694666078 -922 509 .6650341212081256 -924 509 1.5938494507072554 -927 509 -.5293269239825374 -928 509 -.04749735987255882 -935 509 2.1748841853178273 -951 509 .22664382379860482 -7 510 .929169994384148 -27 510 .5669072920544855 -32 510 -.8784446113295883 -41 510 .24907513730854713 -54 510 .18831835826614748 -83 510 .3163883920791884 -126 510 -.9940324179781405 -128 510 -1.0435076195050392 -147 510 -2.23518595434659 -151 510 -1.3848328423152263 -158 510 .6341709620150706 -162 510 -1.3993396189372234 -177 510 -1.7224401218385883 -201 510 .2724153790280477 -206 510 1.6125545690503298 -209 510 -.8991136073423568 -222 510 -.7537291298916592 -224 510 .062035270406316234 -235 510 -.45911050186955127 -241 510 1.5348316687473538 -245 510 1.9001835476745992 -252 510 -.10160643436982364 -255 510 -.34642307224777086 -256 510 .2280296269681557 -289 510 .1437249195805792 -298 510 -.7431435455945277 -306 510 -.2390127483971815 -311 510 .18243331056765313 -317 510 -.41466603981393085 -320 510 .7349416840525803 -322 510 -.5747399955102684 -338 510 -.00949529903705229 -366 510 -.2068411672276026 -372 510 -.3963058208420959 -376 510 1.2069798746989335 -386 510 1.0558302163922513 -389 510 -.5146374370810329 -411 510 -.7957117143304858 -424 510 .48011386236585935 -428 510 .06649224890445843 -430 510 -.9125975727988255 -432 510 .23051460834453696 -434 510 .8310035556488687 -439 510 .9981911107661805 -456 510 -.26118281694511497 -460 510 .862804645818598 -462 510 1.1931566606756714 -463 510 -.6506282250152042 -470 510 -.6431487560022149 -471 510 -.16788792915705375 -483 510 .9666289676448598 -486 510 -.08276476464348417 -497 510 .9880232652262404 -502 510 -.11997799780898191 -520 510 .7647365813448621 -526 510 -1.1457711470459528 -533 510 .37106070619344184 -561 510 .7769750938437163 -567 510 .0017597205450074482 -572 510 -1.3323995047022157 -578 510 -.7719759089475159 -593 510 -.07789366903190921 -602 510 .6761544773312717 -606 510 -.21415749699136294 -612 510 -.27597846893684214 -615 510 .14135725055340218 -638 510 .026572975510925134 -639 510 .938092923956246 -641 510 1.005730743859421 -657 510 1.186061124622594 -660 510 -.6166749336950866 -663 510 -.35014840379672496 -702 510 -.5944973060389377 -716 510 -1.2290274912076689 -717 510 .0768631998311892 -725 510 1.0229650695636772 -746 510 -.37395828956912147 -755 510 1.2401706688679406 -764 510 .6161694350332546 -803 510 -.13514165932156935 -810 510 -.21599150289873922 -813 510 1.061889755378911 -827 510 .6718140776771627 -840 510 -.4509341902143907 -865 510 -.7917611435131295 -875 510 .4473861693261835 -876 510 -.9486117242361084 -881 510 .8933256193746034 -922 510 .9255467668249581 -924 510 1.568873377045164 -925 510 .2720868587278167 -929 510 -.031639429112396755 -948 510 -.7825682164974784 -970 510 -.7267308623762048 -1 511 .3933254102572149 -2 511 -.4231381952879859 -4 511 .9090244433206934 -5 511 -.46449250964599625 -11 511 .8742613956668193 -27 511 1.1625949827792241 -32 511 1.1444916458040433 -34 511 .34951203750494975 -40 511 -.8601758490634498 -41 511 1.1186397634517677 -52 511 2.406627811941411 -68 511 -.18717855218642396 -78 511 -1.084683111521101 -90 511 -.17043537972160128 -98 511 .4590295147124768 -107 511 -1.1224089486982787 -121 511 .6340343580048625 -123 511 .6280460577705593 -124 511 -.48629213979056335 -134 511 .17363774899776407 -136 511 -.9108785926826485 -150 511 -.24415072608648067 -167 511 1.0130515686165529 -186 511 -.5741716844794128 -193 511 1.216516759241312 -204 511 1.0470861417904322 -211 511 .35839667915609896 -215 511 1.2294101043954144 -219 511 -.03339771315584891 -227 511 -1.8122562795035746 -237 511 1.2522817537376163 -247 511 -.6387109020304658 -248 511 -.1559375784129704 -252 511 -1.1285054119067968 -288 511 .5151484056234222 -294 511 .09044566743118554 -323 511 1.1285540255424356 -327 511 -.354309618299477 -329 511 -1.3983966732138138 -331 511 -.31991784182775324 -348 511 1.4581499037830121 -355 511 -.07174614089204492 -388 511 -.5908652661690647 -403 511 -.15402756045711474 -411 511 1.2610863521477804 -427 511 .28757023228740597 -428 511 -.6809900219294139 -450 511 .022239301002846212 -470 511 -.9293111753027625 -486 511 1.3127646123231747 -495 511 -.5101253811429117 -496 511 -.2390875522674462 -507 511 -.8192926523724804 -510 511 1.4010724736192217 -529 511 -.0002317739311516187 -549 511 .14430654599476034 -550 511 .12285854496475693 -559 511 -.39722386402133414 -561 511 -1.7741017333485563 -577 511 -.47182392342507234 -583 511 -1.5051961216928906 -587 511 -.6799453873876472 -593 511 .7930696244531827 -595 511 -.5359153730482162 -608 511 -.547835729375289 -623 511 .1021581660290502 -643 511 -.9575634280228127 -660 511 -.48097098782650377 -663 511 -.6970038877662559 -665 511 -.7525828716098407 -674 511 -.8684592210729692 -683 511 .08987120298254805 -686 511 .48461759432439844 -694 511 .4112397627306539 -703 511 .4530192706589716 -705 511 -.33878089541577566 -720 511 .3824240501672354 -724 511 .44399153413927717 -739 511 -.09167449967326423 -751 511 -.17869831573770478 -756 511 -1.682703497985471 -762 511 .2218042619254299 -777 511 .19459628595129605 -799 511 .9500104834688206 -813 511 .2462099605420812 -845 511 -.11376924038396492 -873 511 -.030921544164082992 -877 511 1.2958912244371261 -880 511 -.4142133637756322 -887 511 -.6665080205826949 -915 511 .768977058909316 -938 511 -.43484178502210424 -959 511 1.5839407251429964 -963 511 -1.4549807354609468 -971 511 -.36349840042946385 -974 511 -.9451797448748955 -980 511 -.22683148878010062 -997 511 -.4059143907114858 -10 512 -1.5558615399265587 -31 512 .7795783288346015 -36 512 -.35271341575144033 -48 512 1.3379375105682345 -49 512 -.849492163534211 -53 512 .24868525893479404 -65 512 -1.5208557577804573 -75 512 -.17172210027919743 -76 512 -.15492467306143645 -98 512 .4112336805839509 -118 512 -.4466425773339274 -119 512 .21238171546479653 -146 512 .6260153135240534 -153 512 -1.0806479402771978 -156 512 .10566344822689552 -181 512 1.011947984718706 -182 512 .37549195073244235 -201 512 -1.503562501990337 -214 512 .6689097529551563 -219 512 1.7924040650232484 -235 512 -.13061775540367104 -249 512 -1.4410942624736838 -250 512 -2.4302846388020187 -260 512 1.6736513073228938 -263 512 .16044364021335417 -267 512 2.2215989709784676 -275 512 .8638933868013332 -296 512 -1.0293388601853837 -307 512 -.9308548803754901 -311 512 .6180067392470772 -316 512 -.2547897161689384 -318 512 .21936333480588324 -319 512 -.49624563127113597 -320 512 .820071638925943 -346 512 1.47341608006897 -364 512 -1.1933778114838767 -370 512 1.2717690512765032 -384 512 .9017041591164632 -390 512 -.47229039904128156 -396 512 .20821358824726566 -410 512 -.01735201598197343 -414 512 .15852124236808518 -416 512 .3390733717629374 -420 512 -.7324379892751023 -433 512 -1.183713894730942 -434 512 -.7793685226142035 -437 512 -.41763704239324695 -458 512 -1.0964969663595912 -477 512 -1.201565544440388 -478 512 -.31448287098481176 -506 512 -.8292518618755261 -531 512 -.3587769484245869 -571 512 -1.6464401804579047 -578 512 -.05437755178954991 -592 512 .4127310548138194 -598 512 -.6458419992422487 -609 512 .7945271068026518 -619 512 .9989089338737313 -623 512 -.07789654207470684 -629 512 -1.909489925683057 -645 512 -.5683664493118057 -659 512 .5713533767063966 -662 512 -.032985826372413374 -668 512 .2267237988227482 -679 512 1.0663272901386722 -687 512 -.7226441549753705 -701 512 -.07492199047999379 -702 512 1.0619547916684526 -704 512 -.37453220879767 -708 512 -.9284860182485828 -726 512 1.372176723608827 -727 512 .10404331844735429 -741 512 .16052401656743884 -748 512 -.9932389943999258 -752 512 .6361121193124383 -760 512 .2678834035092829 -791 512 .154431969677788 -799 512 -1.8530449687553245 -808 512 1.4754301088865018 -809 512 -.7901560096677831 -825 512 .26108257393788725 -829 512 -1.8184318431058941 -831 512 -.10875395653170827 -842 512 1.0625418275129337 -868 512 -1.8276015367732448 -869 512 1.7117984888805247 -871 512 -1.6898591364268836 -873 512 .035377750029513544 -879 512 .16860543380597973 -883 512 -.7026399921019995 -886 512 -.0667072374013915 -895 512 -.20324750459281807 -927 512 -1.8560814262784822 -928 512 -1.589909797523264 -932 512 -1.7625317615133698 -938 512 .17127826877559185 -963 512 -.037988062037957265 -967 512 -.2859694865698566 -968 512 .45191522136460927 -989 512 .2565607756499827 -991 512 .629905697325062 -998 512 -.3180888696938612 -8 513 -.9065064684148978 -14 513 .6710177497269901 -17 513 .7054059830524082 -64 513 .7478400598984025 -73 513 -.13927719202460143 -98 513 -.15093824813124368 -108 513 -1.8876844422380008 -131 513 -.8079968943551189 -132 513 -.288284165345416 -149 513 1.2682511745596279 -181 513 -1.1606344475773527 -216 513 .30301832831812836 -226 513 -1.0862668518434082 -232 513 -2.0618274316537253 -235 513 -.5414625707302791 -243 513 -.09548960996457612 -244 513 1.0020386305914817 -245 513 .9815515496352002 -248 513 1.6507736085722222 -249 513 -.8388276787199653 -254 513 1.2030098490510694 -271 513 1.3221767208620778 -299 513 .008993573788526187 -307 513 -1.0895426076121761 -310 513 -.6987448869333169 -311 513 -.8041794361218421 -316 513 -1.4899370955445952 -320 513 -.07240740247300016 -322 513 -2.005632198430193 -325 513 -.1763325991471878 -328 513 .36671117910560763 -332 513 1.0827710527028995 -341 513 -.3036738018122952 -346 513 .3323479579861498 -351 513 1.644200485669317 -355 513 1.2041702778421868 -358 513 1.855058609474543 -374 513 -1.26850790294702 -383 513 -1.0389658627657754 -390 513 -.3761928565702176 -399 513 -.1847379680547844 -405 513 .15389933331750383 -410 513 .5262238881725911 -417 513 -1.209888423769939 -418 513 -.5913409615110898 -424 513 -1.5646903986202128 -429 513 -.620657638266869 -439 513 .018114626403096766 -450 513 -.489970259621192 -480 513 -.2033417111817754 -500 513 -.8346149710341422 -504 513 -1.3140492331424487 -506 513 -1.7063408317658122 -541 513 .961657820062026 -550 513 -.19281703254463922 -564 513 .6470005556939558 -577 513 -.8878328174453607 -583 513 .29033524616894435 -613 513 .15487464105481688 -621 513 1.2256091804971931 -648 513 -1.0484690676092359 -679 513 .3157504078078758 -683 513 -.26253293090701696 -684 513 -.1450981593848541 -714 513 -.11078224755565175 -731 513 .6279068440193293 -732 513 .8337257129958799 -754 513 -.037366980172020184 -758 513 .8617927995347451 -763 513 -1.008387529787717 -777 513 -.5018954971213747 -800 513 .87626920052839 -801 513 -.9709504672326893 -806 513 -1.014609984755702 -831 513 -.6092547776073443 -832 513 .7854525163218382 -841 513 2.032737999522576 -861 513 -.6202481854398852 -862 513 -1.6879129224789575 -864 513 1.190427892437771 -865 513 -.1700004758618357 -867 513 .9315797151940037 -872 513 -.583323124659073 -876 513 -1.5630800026076213 -883 513 .4649482828257611 -885 513 -1.5753786737393638 -886 513 .006162867657794099 -903 513 1.0053562166747672 -921 513 -2.264142397863855 -926 513 -.17697407432753814 -940 513 -.1739136487171892 -945 513 -1.3117978064911906 -962 513 -1.6973366329339794 -966 513 -2.1525691647136305 -972 513 .3464655206421588 -974 513 .957676583792774 -988 513 -1.6185738588323306 -992 513 -.38805628483086907 -5 514 .902017325504054 -6 514 .07642754957869637 -17 514 .9290147088678363 -21 514 1.4585524206389755 -31 514 .09216791383895967 -39 514 .2780803842406404 -40 514 .5710823270821438 -58 514 -1.4053066376462038 -60 514 .6056017342398062 -61 514 1.4806579283854293 -86 514 1.1793189761580587 -88 514 -1.920930030911077 -100 514 .21840084611982197 -104 514 .6970950275645866 -113 514 .5408097924759445 -135 514 .0003040499358625895 -154 514 -.024940914497606007 -168 514 -1.0013930703713316 -172 514 .20515842266022644 -174 514 -.643164250465679 -184 514 -.6126041060433256 -190 514 1.2161614400406644 -191 514 -.48053865351775293 -192 514 .8011350661755134 -201 514 1.1143546116018301 -206 514 -.08989665019189981 -214 514 -.7341614868891215 -223 514 -.201845552108422 -225 514 -.03090947036678718 -232 514 -.6784863314484988 -264 514 -.25711874396016204 -274 514 -1.7410203875778054 -275 514 -.6497881461099771 -281 514 -.7661602533075985 -330 514 -1.6938540440418566 -336 514 1.0832459748281509 -344 514 -2.4471919264508757 -347 514 .47574325759536173 -352 514 -.09505493395383702 -353 514 1.6496817901938365 -354 514 -1.9742981036502407 -361 514 1.1189219442258622 -362 514 .8127832383480582 -369 514 -.0858024284799786 -377 514 .09229507967402534 -387 514 .5626931960210508 -388 514 .4999722330839674 -396 514 -.7067257449213122 -417 514 -2.088269964836897 -419 514 -.923967816953252 -426 514 .6194988985361282 -442 514 1.3734777689775597 -452 514 .43658071355789213 -453 514 -.8196252695932955 -454 514 .40324643434085533 -458 514 1.493603554563619 -476 514 -.3199280618885287 -492 514 -1.7593204669256608 -498 514 .7832134476653378 -508 514 -.6544469460571878 -528 514 -1.5027282591753288 -545 514 1.4279179638481587 -555 514 -.2439587701616531 -570 514 -.8902953972600668 -573 514 .07509337264522978 -579 514 .6661089549143486 -604 514 .17210740076920605 -606 514 -.08620187868899554 -608 514 .7444004390601209 -609 514 -.1490204993282463 -628 514 -1.3505579848956144 -651 514 -2.172368377439241 -658 514 -1.0820502554314928 -667 514 .5088924360655287 -692 514 1.1746241005395701 -693 514 -.7053010928765985 -700 514 -.6016071249863396 -703 514 -.78173600613443 -707 514 -.2838461314793732 -742 514 .9424793564290013 -775 514 -.36725960012058134 -795 514 -1.8899398368036004 -798 514 -1.7006698273157517 -802 514 -.18609900201653 -803 514 2.160919911809268 -824 514 .23791057206135025 -833 514 .7490425306081776 -843 514 .31549074202630534 -846 514 -.37689538732483574 -864 514 2.175457277137494 -906 514 1.6927163374113967 -909 514 .2124504932033892 -960 514 1.8435709435005505 -988 514 -.7873051892378949 -989 514 -.3996589634529004 -991 514 -1.6492530767228037 -995 514 -1.2155684088693468 -1000 514 -1.4580703282567045 -2 515 .16885964216473554 -11 515 -.1144727500483178 -14 515 -.5413867900719975 -51 515 -.20684450565536566 -52 515 -.5307898425633274 -78 515 1.6224065588180432 -86 515 .1037018484638087 -102 515 1.555629673202985 -126 515 -1.1467577585986932 -133 515 1.0899065336864433 -137 515 2.0701031432937564 -143 515 -.6708379866726847 -145 515 -.07479544216905176 -153 515 -.7896299296227368 -155 515 -.8733326290560287 -161 515 .6243498343901598 -162 515 -.10301904905703274 -170 515 -.2950031547549435 -182 515 -.9050620740577564 -186 515 -.2385222310868382 -190 515 1.3556886131320658 -192 515 .12015693773295352 -204 515 .2791121337173935 -219 515 -.8618049523090106 -220 515 -.8775156024681839 -234 515 2.0354436878103686 -253 515 -.6782037672127723 -254 515 -.05264730624877556 -260 515 -.6023669470041513 -264 515 -1.3194660842422523 -267 515 .43618335799996955 -274 515 .6292416636246465 -281 515 1.2121007348559496 -282 515 -.11564900991342364 -295 515 -.8318219655432014 -313 515 -.5077811867065489 -321 515 .537430166319742 -332 515 .9434312597820214 -342 515 -.062081615636760734 -350 515 -.6221811893153183 -360 515 -.8952702210301163 -366 515 .4739002458632912 -373 515 -.41265258301626884 -378 515 -.19844396187961488 -383 515 .032410099755938865 -396 515 .5516704969491413 -398 515 .4204820946338727 -399 515 -1.4679485737062858 -402 515 -.5418809836748365 -418 515 .2824618626951056 -420 515 .4277002657958972 -423 515 .2372781950597566 -430 515 -.024695249305075426 -452 515 -.5533885619707287 -468 515 .6096117647306248 -473 515 .7084202501817654 -489 515 -.11025872827355863 -498 515 -.9349897281788117 -502 515 .5415429315885409 -505 515 -.05879343103783267 -518 515 -.7582827783338688 -525 515 -.6349540648188586 -528 515 .7075708658044031 -533 515 -.11094430299106327 -540 515 .7010004414139261 -541 515 -.6261369400589929 -548 515 -1.0328042168287386 -575 515 1.2450333156129485 -580 515 .6029211014618611 -581 515 -1.8875737603350171 -596 515 .586019470261982 -600 515 1.1626998800696113 -607 515 -.16860305683048737 -627 515 1.5017027786152868 -661 515 -.27151967280340733 -674 515 1.2055327380402245 -684 515 .26107449575393205 -686 515 -.5283164760277543 -697 515 -.5341191755993832 -712 515 -.5610507770948473 -715 515 -.5664948032667403 -724 515 -.12697746728477888 -729 515 -.5150297644178432 -738 515 -.19004082756221496 -744 515 .7906899994890092 -752 515 .9791047277661864 -759 515 -.21630323787442796 -779 515 -.6634185061368029 -784 515 .29894771826289585 -792 515 -.9784099234393723 -798 515 -.8261542698733488 -806 515 .48800822381880804 -813 515 -1.588040617199883 -838 515 -.389489583080755 -848 515 .748139130349831 -873 515 -.009797069356504318 -879 515 1.217756066730552 -882 515 .1850612512482335 -884 515 -.0058040945710108455 -893 515 .7285319391959486 -894 515 -.434331961315701 -903 515 1.6232080803517823 -905 515 .023236897620142326 -906 515 -.1901012705570306 -927 515 .693544746839246 -948 515 .48843478850429806 -964 515 -.561028388207332 -979 515 -.11496853520807349 -980 515 -.7614317149436427 -983 515 1.63510711367756 -985 515 -.9136943280140233 -987 515 -1.4459620917450025 -17 516 1.0038579107773784 -26 516 -.33728930236178667 -52 516 .07105246586244764 -71 516 .8323274841271879 -80 516 -2.3422994402370882 -118 516 -.3341708745385351 -130 516 -.958716533632229 -137 516 -.9156139746861518 -158 516 1.4394213371653108 -172 516 1.4846278212128756 -174 516 -.41663246268392357 -188 516 -1.483529059808716 -195 516 -.15049008392811605 -222 516 -.46363675651084524 -224 516 -.7771559098269749 -229 516 -.5912297900532094 -242 516 -1.1287342218750889 -243 516 .35476405512733034 -250 516 -.04106368670108079 -253 516 -.4572951732240942 -260 516 .6291837641725395 -303 516 1.447942286085541 -312 516 -.07829531373090926 -320 516 2.1873456967849663 -322 516 .3875546446680575 -332 516 -.1558143708203797 -362 516 .3202536337086777 -387 516 -.3353759219594519 -393 516 -1.5261566668850854 -413 516 -.11514459989287754 -415 516 -1.436586452742441 -419 516 -.6917693883161468 -423 516 -.5484769526140472 -442 516 -.7420194809601902 -444 516 -.0786993265156781 -451 516 -1.1759418027818702 -473 516 1.3235961424787275 -485 516 -.1964762176209702 -490 516 -.4029364053416818 -494 516 .5380268600620826 -498 516 -.16040356318926435 -513 516 -.7895986731945316 -523 516 1.0321934286850893 -538 516 .8084675436404731 -546 516 -1.146141348825358 -562 516 1.529277070588614 -566 516 .838635281189839 -568 516 -1.3049906507322573 -571 516 .33965741130260096 -622 516 -.03504935125926914 -625 516 .5467065498374507 -628 516 -.8592875723218621 -637 516 1.7650094281053428 -638 516 .9542795521888934 -641 516 1.1980220477039003 -642 516 .669122257415153 -653 516 .12903641797613843 -655 516 -2.2227654609579117 -659 516 .31457500690436674 -678 516 -.8781789250310259 -684 516 -.674731303315276 -693 516 -.0562107233415457 -699 516 1.740097188061742 -703 516 .19267474554354522 -706 516 -.44909743043035016 -714 516 -1.3617877378265317 -720 516 .4636016182118181 -728 516 -1.2101948752596656 -734 516 -1.3066227370523102 -741 516 .05893063524206343 -744 516 -.546401751032522 -753 516 .6095957848290215 -774 516 .2652501674536609 -790 516 .25008997789902193 -815 516 .11047520205098268 -823 516 -.5709679079273998 -824 516 1.3413185333410031 -842 516 .25452231814951376 -848 516 .6703702397473781 -850 516 -1.1439772845123692 -859 516 -.1912337531790504 -861 516 -.3427958545910449 -869 516 1.8271425524013944 -873 516 -.44648194285743403 -875 516 -.053084297554062104 -884 516 -.11667509897085607 -888 516 1.540481656007938 -897 516 -.2889923288666624 -908 516 .6164225520006414 -915 516 .7409148430907673 -919 516 1.0856622565887915 -936 516 .7662404058887512 -976 516 .7478369505773599 -987 516 1.0150027374236636 -990 516 -1.509786494301236 -1000 516 -.2860186489210592 -3 517 .9186246207241385 -5 517 1.4944459695795977 -34 517 .2517707335651262 -42 517 -.9778737459818249 -51 517 .27770503903593335 -60 517 1.0911266927698868 -65 517 2.2817264654931932 -73 517 -.41063437278382675 -82 517 -.13583803776303446 -95 517 -.7423773572317393 -103 517 -1.5610677131331068 -141 517 -.9677658586445875 -142 517 -.024621327008293052 -156 517 -.46525228676353947 -160 517 -.5123718928261902 -171 517 .5896072220073741 -174 517 .6291633736733001 -182 517 -.9831840985538541 -190 517 2.2575198839956503 -196 517 .04053729544548735 -197 517 .6563981494190199 -199 517 .6835368319159216 -200 517 -1.1430466664022836 -230 517 -1.0472557263858961 -231 517 -.23159763057907246 -255 517 .2862445430996147 -266 517 .0753989671534025 -275 517 -.7729828570620526 -283 517 -.13047063584550614 -302 517 1.2469739450661619 -304 517 -.12355722256093297 -313 517 -1.0873788428669728 -336 517 .07881189150291237 -340 517 .1400869875172623 -342 517 -.4880613724105251 -347 517 1.9505612960779473 -350 517 -1.720532516426651 -353 517 .24865411559604284 -361 517 .44043999827189084 -374 517 -2.6224855954303736 -380 517 -.38607503347975064 -389 517 .7757234068642573 -391 517 -.5666222303808823 -399 517 -1.7181918675612788 -406 517 .07645963626007082 -411 517 -1.1737747642309029 -419 517 -.6795723156827363 -426 517 1.067704894868234 -448 517 .54996679684388 -453 517 -1.006410450020442 -501 517 -.6032710756925385 -506 517 -.014517315583190471 -509 517 -.662360140438823 -514 517 -1.83187975152993 -529 517 .18769932636630854 -535 517 .5812302478062333 -539 517 1.5993417578006623 -556 517 1.4099148506825738 -569 517 -1.9198457548364765 -577 517 1.396111532938809 -593 517 -.6617755226893561 -603 517 -2.495148051855456 -622 517 1.110317812607344 -623 517 .44017743053929415 -630 517 1.672461584160334 -636 517 -1.993467165035711 -680 517 .5617330748300362 -683 517 .14401501222481367 -684 517 -.5492536826595148 -704 517 1.3089242937289918 -707 517 -.2917998608352708 -715 517 -1.2432920529716447 -742 517 1.6574275572893298 -751 517 -.18047501059182947 -771 517 -.9889638009775988 -776 517 1.8316354238333092 -796 517 2.6159155351316135 -806 517 .3807521166967537 -818 517 .9973127846932199 -845 517 -1.8690881742485428 -859 517 .17824562059671337 -861 517 -1.8013145511373585 -865 517 -.7533855059950161 -873 517 1.0122161063191606 -881 517 -.578231908562526 -882 517 -.2227209553455677 -890 517 -.6054662184880796 -894 517 -.9589853728705675 -908 517 -1.732434594291886 -913 517 1.9438899162551446 -914 517 .5816177093029145 -917 517 .391379562624633 -922 517 .6006866836427686 -934 517 -.7698055991876581 -950 517 -1.07243795255575 -956 517 -1.5983895622270878 -968 517 1.4755624482350531 -988 517 -.9168361635463587 -998 517 .8003647793190066 -15 518 .276932189019646 -16 518 -.19230009110970248 -29 518 1.7637627953193986 -85 518 -.27163824625554667 -87 518 1.6081035886748645 -92 518 -1.5680738633204478 -97 518 -1.563500031286267 -107 518 1.3971316521117454 -116 518 -1.4194621077993181 -129 518 -.12300849959945225 -138 518 .5679561308854565 -162 518 .7249596785940756 -187 518 1.999033984058387 -200 518 .23956046726017016 -217 518 .06776599721394139 -223 518 -.09655041260765226 -230 518 1.2890682505072761 -231 518 -1.4559470002066546 -232 518 1.1510839885656372 -238 518 .758328510448634 -248 518 -.5544544954081664 -253 518 .6253957132485166 -287 518 -.7376233983426244 -289 518 1.5219863082888028 -290 518 -.39508446720892887 -292 518 -1.4489439895286405 -296 518 1.5650668315883727 -299 518 .2171816771728216 -324 518 .5915027905814421 -327 518 -.37456579378038724 -347 518 .4196196813107421 -359 518 1.2854113541151995 -377 518 -.38537601094997653 -398 518 .14461681291087403 -404 518 -.6766167852860355 -424 518 -1.6012494031525488 -426 518 1.9488877769602155 -453 518 .8788306653221352 -460 518 -.43780877531562906 -470 518 .8221486765469628 -486 518 -2.956838174139947 -507 518 1.0330751588502227 -509 518 -.46779065045542645 -519 518 -.8126976805111488 -524 518 -1.6295268674048957 -525 518 1.0099368175448138 -545 518 1.0295401256033394 -557 518 1.8056077256002703 -560 518 -1.7404598582885584 -595 518 2.4281202055133506 -601 518 -.530415271203479 -607 518 .9379074220412039 -619 518 .20493043922231619 -623 518 -.1356930378027238 -631 518 .8762399188219638 -634 518 .3803025894134668 -642 518 2.046774274595742 -648 518 -.10615316532294468 -656 518 1.6066567992173793 -666 518 -2.20023211335751 -670 518 -1.8619876104362079 -675 518 .04108199858729964 -677 518 .23767085493709822 -707 518 .42243087038540117 -709 518 -.6953544738143671 -729 518 .16799909010050273 -743 518 -.08092731760149832 -750 518 .14447999215520463 -760 518 -1.984865911628427 -766 518 -1.0395266003057946 -776 518 -.9886122328542163 -784 518 -.5938482064896997 -797 518 .6964384046211876 -818 518 -1.057698118138261 -819 518 .19036616264302708 -836 518 -.635267016041539 -844 518 -.8857678285321795 -850 518 -.3607775357991033 -852 518 1.8374932087861564 -861 518 -.5522292903641317 -862 518 -.3186929641177672 -863 518 -.14059640764163073 -880 518 -1.180358377437376 -888 518 -.6772790839153704 -897 518 -1.1015328527879447 -900 518 .6687429688477586 -901 518 -.6655918398856435 -908 518 .4723505773754013 -909 518 .15333404837766695 -927 518 1.1614686826016398 -943 518 .31946317302432153 -945 518 -.44855733887942995 -949 518 -.5133390756604693 -965 518 .8828343543830004 -967 518 -.7902284342803502 -968 518 -1.5421155122206092 -971 518 .4952338686790928 -974 518 .624070690282538 -983 518 1.9769544744878562 -986 518 -1.0578803867869522 -17 519 1.322388444150636 -21 519 .7706577870435084 -40 519 .2807325972680816 -50 519 -.8086555409242057 -55 519 .1337260855902658 -71 519 -1.0734395554327245 -74 519 2.0432004733597524 -87 519 .6487063751021998 -92 519 -.4749634089323466 -100 519 1.245472720771085 -112 519 .22433922988242366 -116 519 -1.337246939606114 -141 519 -.4511673851360881 -144 519 -.4671524338080955 -147 519 1.0861543372208196 -152 519 .43367563054300895 -155 519 -.2547242607757244 -157 519 -.40488996224961804 -160 519 -.8301958714225756 -161 519 2.1971027198349637 -163 519 .6180620076565264 -166 519 -.16675809548297 -167 519 -2.755905583420125 -170 519 -.9229868172126778 -185 519 -1.3838128582219682 -200 519 .10057432427197402 -202 519 -.9779245230491084 -212 519 .4936163498936685 -213 519 -.9661419436728744 -235 519 .35176838870229515 -238 519 -1.1849445043036693 -259 519 -.44567958246404266 -260 519 1.1343868562124473 -274 519 2.494885577432802 -279 519 -.43764038400476996 -294 519 1.4665300815240991 -301 519 .5104162548530295 -307 519 .7914923891816648 -308 519 -.19867824755057573 -329 519 -1.716170772748728 -339 519 2.872807157438452 -342 519 .44058772730836093 -361 519 -.009423778001604016 -368 519 .7420594139957749 -374 519 -3.7107736331388734 -377 519 -1.6250663728786656 -423 519 1.0847677923352284 -424 519 -.09752903941903182 -455 519 -.6003188628459333 -479 519 1.2287635426142423 -486 519 -1.6919823129003124 -499 519 -1.8444043964386763 -525 519 .23532867152209663 -534 519 .18359802367669503 -546 519 .586484187863232 -559 519 -.9643064623677088 -572 519 -1.9519142873383843 -573 519 -.052789401071682146 -578 519 -.05959816850728589 -587 519 -1.1642337365511493 -603 519 -.9233694073102007 -642 519 -.3025078233370797 -647 519 .3112776627607866 -661 519 -.5253631268617672 -673 519 1.7126436466766373 -674 519 .27639846716541816 -688 519 1.9960361533587168 -693 519 .5585183964740439 -699 519 .1933905801224914 -705 519 1.0890061117281482 -712 519 1.096263679315794 -714 519 -2.106641620089876 -757 519 -1.3905723949310225 -768 519 -.331877670052262 -775 519 -.15258572966319622 -790 519 -.3716430922000682 -792 519 .024388793893242944 -801 519 .17204533540307462 -817 519 .37679345074449205 -825 519 .30403290853396725 -827 519 1.2650617913165805 -831 519 -.5220259695874643 -851 519 1.127482325083609 -859 519 .8845761525121536 -865 519 -.176479774356825 -867 519 -.5447102296900432 -881 519 -1.1268748250992264 -923 519 -.17631345093463874 -927 519 .5389238285438972 -948 519 .6040440251465969 -956 519 -1.9108401758774505 -957 519 -.5889903871022781 -958 519 .500953304906661 -965 519 -.40311991134099456 -977 519 -.3612936624519735 -982 519 -.8812411092912772 -995 519 .6321976591248959 -996 519 .803691290655555 -27 520 -.28287618354600774 -49 520 .4593786574747951 -68 520 .8152335019857868 -83 520 -.2102379795394222 -93 520 -.2214951104274669 -109 520 1.1783900678789216 -112 520 .686316607135872 -116 520 .1223521345559354 -119 520 1.0489433967868886 -120 520 -.9140188206654339 -123 520 -.6855801976638436 -126 520 -1.3123920760467587 -136 520 -.11377454729602696 -163 520 .34101280582858906 -166 520 -.5094782440351067 -220 520 -.1510773442063723 -227 520 -2.3509811606883932 -268 520 -.5592987523213836 -274 520 .7570086946522369 -275 520 -.7537592296838419 -276 520 .5711205456827377 -282 520 -.10640157492787722 -289 520 .6144811123095973 -293 520 -.4010025529745886 -303 520 1.235878405956674 -309 520 -.6090045964585011 -326 520 -.5296835442916773 -345 520 .1819848924135313 -346 520 .3524627975314224 -351 520 .03781826098473823 -356 520 .6555795276391538 -368 520 -.8630515703361834 -377 520 -.30509866328017193 -389 520 -.2523826320361584 -397 520 .022383145665172098 -407 520 .5638758836790541 -410 520 -.68081301299306 -428 520 .7108269911771821 -429 520 .8162580336691809 -450 520 -.4850890391029917 -457 520 1.4240096631043353 -458 520 .33223122413896033 -464 520 -1.402200262169951 -465 520 -.598974469329719 -477 520 -1.8427593420136792 -487 520 .3937975856038548 -496 520 -.362239865762941 -500 520 .32629595801639955 -503 520 -.6807520387322962 -554 520 .712415867991818 -564 520 -.9575789751484491 -570 520 -.6396242435641255 -575 520 -1.1381850296336269 -593 520 .5273529557505069 -594 520 .2105563080504383 -615 520 -1.0833739022852609 -618 520 -.44785192819376635 -630 520 .31258347387732266 -635 520 .5275505760684932 -678 520 .18905076826609574 -700 520 -.015505696239749553 -726 520 -.328943729433633 -730 520 -.2074519617357064 -738 520 -.3730145423141507 -741 520 .6195434669945257 -743 520 1.2585614626918489 -757 520 -.2100944038125153 -758 520 -1.5780535619759155 -765 520 .2913671402641834 -778 520 -.11419120806554243 -779 520 .0009277828464978599 -791 520 -.7110681393882127 -795 520 .5323687545541296 -803 520 -.624096984025743 -817 520 -.8666337327525878 -831 520 -1.042061702083571 -851 520 -1.06310237275384 -862 520 .9855127083433601 -863 520 .4779779470293182 -880 520 -.10888740909416514 -894 520 -1.223259270617127 -899 520 .22708355794054785 -902 520 1.5467446945932273 -932 520 1.2728832945236896 -958 520 .14137433608370814 -959 520 .1056867736108621 -990 520 .5510688563076716 -991 520 .7231255409285353 -993 520 -.905802137966543 -14 521 1.643905696416684 -19 521 1.6433307157617478 -20 521 .20293106281982454 -24 521 -1.7193867728989778 -34 521 1.544609727095463 -38 521 .3953539986486281 -75 521 -1.025140708880047 -93 521 .7784143505654553 -106 521 -1.440902441871878 -128 521 -2.2427380990634886 -145 521 -.6112753558766373 -149 521 .7741512030901606 -155 521 1.4299100209698508 -156 521 1.013875804823846 -162 521 -1.6296238134329901 -174 521 -.5180283615313591 -180 521 .9931887484955256 -182 521 1.8230172778965987 -197 521 -2.3130564806317344 -205 521 -3.006888956961231 -207 521 -.20356585288683682 -232 521 -.8063734386588008 -238 521 -.4817996005438502 -249 521 -1.8208404923663377 -253 521 .5286404748520724 -256 521 -.8372034966263233 -258 521 -2.1707686931479513 -264 521 .8048205549708178 -266 521 -1.4964598179892101 -288 521 -.6442490959824158 -292 521 -.14837640318448755 -297 521 2.661734251531707 -317 521 -.014873456678855104 -321 521 1.7908758554478796 -339 521 .670732385280908 -350 521 -2.4380147297592965 -357 521 -1.0812250933273704 -365 521 -1.1160231070961317 -396 521 -.5493388318695276 -401 521 -.3145486418045611 -403 521 -1.7624711279378482 -404 521 -1.9719780196007102 -411 521 -.5623580515909601 -414 521 1.5270951467685632 -428 521 -1.6955004510349287 -450 521 .28414643520196836 -460 521 .7020171507396167 -464 521 .7311495564082563 -471 521 2.1456864699212743 -491 521 -.039241525838065464 -492 521 .8696642968391616 -502 521 1.003563435674784 -509 521 .480277283803354 -512 521 -1.1797637807812882 -520 521 -1.3375515304139676 -546 521 1.432466591871012 -552 521 .8604883276323722 -567 521 .09506754076328967 -570 521 -.5674950936979979 -582 521 .9648765457414751 -589 521 -.5982975276625855 -591 521 -1.394625510348745 -592 521 -2.289255025483418 -593 521 1.1351847352017514 -594 521 .14393336168253007 -597 521 -1.453043611761588 -617 521 1.3525952673104504 -624 521 1.0413113003423402 -629 521 -.8620417348496958 -635 521 -.2601654652713059 -656 521 -1.0706569827191381 -669 521 -.28600186069945016 -672 521 .07290322139051947 -674 521 -.6899048958658269 -688 521 1.7461595205293217 -695 521 .890153733080861 -712 521 -.9506065635213841 -721 521 -1.9940595948766393 -724 521 -.4371392813323626 -726 521 -2.332709340215601 -738 521 -.8606629971802008 -756 521 1.4494201395300383 -760 521 -.9251725212904043 -777 521 -.8337310372535689 -788 521 -.3296534617446919 -800 521 .4208041611936484 -804 521 1.6382217250931113 -811 521 2.0628925083419003 -841 521 .41172606658774585 -856 521 .7469031907211874 -863 521 -.014318702610046481 -873 521 -.6061777900741244 -876 521 -2.1732133345577553 -885 521 -.5401818829206487 -905 521 -.7470951096790042 -910 521 -.9074756467006759 -923 521 -2.2609437354150916 -924 521 3.061333335297961 -926 521 .30027720094420435 -932 521 -1.019597605996786 -937 521 -1.0040509555232529 -946 521 1.4615752999633187 -955 521 -.8520562513522068 -959 521 -.8867913687680868 -960 521 .15013006416432592 -961 521 1.1413477764167614 -970 521 -.47878051919045184 -1000 521 -1.5013907095389978 -10 522 1.224391205956993 -11 522 -.2740278285131982 -47 522 -.9227828384634308 -54 522 1.3938109815337114 -59 522 -1.027335423570295 -60 522 .6576908325348495 -63 522 .42214358817177605 -73 522 .4314298860149758 -75 522 -1.7854766407094376 -83 522 .5144858998541264 -93 522 2.1573355854246965 -104 522 -2.3574495797644337 -117 522 -3.3946800484076167 -123 522 .9209865523260066 -126 522 1.3563713228130132 -145 522 1.061472434184438 -157 522 -.02056467149755628 -165 522 1.4706044399144245 -169 522 -.023804731947977914 -194 522 -.02373461446505952 -196 522 -.3163204156799311 -202 522 -2.5595847907706393 -217 522 -.8285983111311598 -227 522 1.7966609899018164 -236 522 .7400332442231865 -253 522 1.4820406593485662 -256 522 -1.9357922133042813 -264 522 1.9857433728490388 -269 522 -.25338505408309053 -270 522 -.7299741657173194 -271 522 .31940966546329186 -276 522 .2347416055043528 -284 522 -.7482087772347787 -286 522 -1.595839823592777 -288 522 -2.098131230182087 -292 522 .30540892759213145 -294 522 -.6859138348298202 -302 522 .7774347012711211 -304 522 1.820384199243982 -329 522 .13130906101945333 -335 522 .8349336120182387 -349 522 -1.9103911036840748 -371 522 .49877911131786845 -374 522 -.8515357175315567 -385 522 .0452217499836588 -391 522 -.34190360435344913 -398 522 .06653591597743458 -400 522 .7926734598391194 -402 522 -.3826709312473162 -411 522 .31285179807070806 -418 522 1.8483859668222575 -442 522 -.974022738486783 -443 522 -.0659989836611713 -465 522 1.9534398554426342 -467 522 .5479742025991674 -473 522 -1.4673960909673076 -474 522 -.081316194543748 -478 522 -1.1006149373601093 -483 522 .20511617040743657 -496 522 1.3169653390089269 -523 522 1.9424086349751304 -531 522 2.632863344932216 -536 522 1.9039862159224996 -538 522 1.1858517754313702 -539 522 1.0111260972980907 -547 522 .13333321075199503 -561 522 1.7302573574930784 -564 522 .12291030485606388 -570 522 -1.433415212765117 -588 522 -.30796065264846606 -610 522 -1.4341655429335043 -620 522 .6956777055716505 -628 522 -1.8443943703493255 -655 522 .46793279402015475 -657 522 1.7317218846856937 -664 522 -1.7631435584202932 -672 522 -.09677527741250282 -676 522 -1.4865918527851314 -710 522 .849327604787773 -732 522 1.2303105891701331 -772 522 2.26486135181199 -800 522 1.1154291356616082 -801 522 -.6852105408457747 -806 522 -1.1995621299829393 -817 522 -.4668321102668344 -826 522 -1.3697026055595858 -831 522 -.9853412157919487 -842 522 .6841233808122963 -847 522 .9515312460465477 -851 522 1.3366648828379977 -856 522 -1.7040554347557242 -857 522 1.2687689971132485 -861 522 -.2814601269804371 -885 522 -.49980193498986747 -892 522 3.0133757784475264 -905 522 3.3978749181290726 -907 522 -1.1251992530865966 -919 522 -.31660065982756963 -939 522 .11707719049814862 -979 522 -1.0256436165144427 -987 522 .2507021846605422 -995 522 -.9196135815743043 -997 522 1.8493700257411985 -1 523 -.3201219268254725 -20 523 1.0870147107715722 -30 523 -.6751406701625053 -36 523 .8482759129261908 -62 523 1.3790193542767932 -67 523 1.6536011869504772 -77 523 -1.084406570799018 -82 523 1.33885526760499 -92 523 -.8265632951250114 -94 523 -.5961687193311896 -102 523 -.7257921757312473 -112 523 -.6184955876421815 -118 523 -1.2157075463119187 -125 523 -1.6910629120071288 -127 523 1.4449477389339727 -129 523 -2.2433313393973213 -130 523 -.9722608842493278 -148 523 -.5917560999971573 -163 523 .13399709021637424 -175 523 1.4815128045078503 -193 523 .3807974409571648 -194 523 1.4357828817233558 -208 523 .45973752177752614 -231 523 -2.5312808958427175 -258 523 -1.1559350638569765 -289 523 1.5532988111647084 -291 523 -1.1769834169530133 -330 523 .35982725543109234 -331 523 .03450203139982061 -344 523 -1.4057527618179717 -345 523 .6093299467100082 -352 523 -2.717819756803351 -357 523 -1.1982033634784905 -376 523 -.7527957636461358 -382 523 .10719633357739994 -387 523 .08040866600262019 -397 523 -.5551895759586214 -398 523 .5977169291189404 -399 523 -.41540980421889273 -418 523 .4840849735865711 -426 523 .7596601790888519 -432 523 -.508908194339889 -433 523 1.2086009481610083 -437 523 -.7246387948253883 -442 523 1.7755936166896071 -463 523 1.1772422763282713 -479 523 .39492739128510057 -487 523 1.585482806128545 -495 523 -.6570022704774229 -510 523 .7324605877798498 -524 523 -.717435210368237 -527 523 2.458598627794725 -535 523 .9872144263205714 -537 523 -1.4386520278131754 -539 523 .6081397940109254 -557 523 -.010182073926565713 -567 523 -.3953461220057067 -569 523 .30922910445773244 -574 523 .872055940404196 -575 523 .49745942741717525 -578 523 .39594984217131085 -583 523 .6311439932675869 -594 523 .6769856521062982 -595 523 -.7618692183818144 -596 523 -.004002316349068186 -619 523 -1.335456714632018 -627 523 -1.0543631360301697 -634 523 -.4162765027632445 -638 523 -1.724159404756614 -640 523 -.743678661381937 -659 523 .630338300758916 -666 523 -.3208558390234192 -670 523 -.8846583351888511 -678 523 -.09746354783634838 -680 523 1.0209995519563126 -697 523 -.4666853587293813 -703 523 -.16862491058558535 -705 523 -.7347541283125131 -736 523 -.7060756806697842 -749 523 -.5838604496402996 -792 523 -.6565147748379577 -799 523 1.9029509119104497 -813 523 1.941596135826976 -818 523 .7221004282169625 -820 523 .39419855598536896 -824 523 -.06989203816852405 -841 523 -1.4840814490797318 -858 523 1.0691550206729186 -859 523 -.08089127002242366 -864 523 .5458318427183232 -881 523 1.716548177786693 -917 523 -.5669916908794043 -945 523 -2.0589795054196833 -954 523 -.4771369432000654 -956 523 .23727203667303967 -968 523 -1.812292437469634 -972 523 .7933601874854027 -34 524 1.006297966773091 -41 524 -.49197626537853867 -54 524 1.7010814206853482 -57 524 .7989909454018278 -61 524 -2.6853317652452944 -64 524 1.346408660881913 -65 524 .4974176346967757 -81 524 .3512424716764049 -96 524 -.017095511975438793 -107 524 -.018580197452301994 -125 524 .009895617630465453 -140 524 .02172526077373016 -165 524 -.30381887380035744 -173 524 -.5798747789313288 -183 524 .727718728629382 -192 524 -1.0398092290057757 -195 524 -.6708621277509551 -197 524 -1.6372347608497007 -219 524 .6701356289982305 -222 524 -1.3812818101251183 -231 524 -.39919603456092234 -255 524 .33458156635137515 -260 524 -.06723188521395114 -266 524 1.4031518536798993 -279 524 -.457417810951502 -301 524 .09264881529158815 -326 524 -1.4902874817520875 -329 524 -.9667046438229191 -333 524 -.0019891839983773307 -336 524 1.0746934999075617 -337 524 .6616800543762287 -365 524 -2.922387306259583 -378 524 -.972332668483449 -392 524 -.19655943934245426 -410 524 -.11251015821518166 -412 524 -.5085955086874617 -413 524 1.367471633929698 -419 524 .3135876249217271 -425 524 .1952342827980323 -433 524 .07488661808588162 -435 524 .8401808193957714 -442 524 -.10544816676889988 -455 524 1.963249206763866 -461 524 -.3469783940591383 -466 524 1.7951341898926152 -486 524 -1.1338816136517964 -488 524 .9341687175286878 -499 524 1.8376848188413497 -526 524 -.6195594475375605 -527 524 1.6630823815329825 -532 524 .08455111207310965 -536 524 2.4899287498461153 -557 524 1.6279340733902141 -558 524 1.0198163698652059 -589 524 .1426770718981694 -614 524 .1737134159345907 -616 524 -.8866467897016308 -623 524 -.17860319055611024 -629 524 -.09565106919458592 -640 524 -.8113031076354841 -647 524 -1.0451106122960159 -650 524 .34457307517760755 -653 524 -.8097021535474409 -656 524 -.17332024313785638 -682 524 -1.3643280917153533 -691 524 -.36815997334122297 -722 524 -1.8402508960698918 -758 524 -.6094120036523104 -759 524 -.18054568448718128 -782 524 .17179616727154307 -790 524 -1.1645387673665677 -797 524 1.6262237343968875 -802 524 1.9067085382819517 -810 524 .17441586044783502 -837 524 -2.7413187585867775 -839 524 -.6597803114237254 -840 524 -1.3600256836450189 -850 524 .44301642215028414 -876 524 -.31764938326419345 -881 524 1.1928739214393587 -921 524 -1.720810948316562 -939 524 -.3165806381297137 -962 524 1.2610032330374457 -966 524 .4587764542268408 -995 524 1.5378517542679093 -996 524 -.9799055140641671 -998 524 -.9113253488629448 -24 525 -.5347454852049329 -26 525 .1727107450069225 -33 525 -.6646135073645093 -48 525 -1.5359126323474044 -49 525 -1.6243794197689738 -50 525 -1.5088693767767702 -86 525 .15020477291107545 -103 525 -1.114471196403617 -135 525 -.3110039215720721 -137 525 1.107123344278055 -140 525 .8680075087702405 -148 525 .9416012316626121 -150 525 -.16178974014216344 -157 525 1.5980026485587384 -172 525 -1.1993770592802429 -187 525 -1.4586617682692005 -224 525 1.5452444886779197 -228 525 .28141133681554886 -235 525 -.04773534742437162 -241 525 1.2180834010323676 -256 525 .5262077068756643 -263 525 -.694161273738959 -272 525 -.7227406134189581 -274 525 -.21365651758854415 -283 525 -.18479807986839908 -287 525 -1.1946331250701676 -289 525 -.19522586824025984 -296 525 .07677373671218747 -300 525 -.22260563026333668 -312 525 -.4318547103835712 -328 525 -.45307861520068976 -330 525 -.1850592243561495 -343 525 .9932112078894935 -350 525 -1.2241482339397811 -353 525 -.6988223977369002 -387 525 .4471478676175172 -389 525 -.21860923550385303 -393 525 .8592512887860788 -428 525 -.8709405195501364 -431 525 -.09062739565961717 -442 525 1.844986072366691 -457 525 .5978926232824883 -460 525 .9720772107043637 -465 525 .3741322291311733 -486 525 1.2866103290756061 -487 525 1.53234467194602 -501 525 -1.9957798366568356 -507 525 -.9619589515753233 -534 525 -.5677881697841863 -540 525 .5807587855216605 -546 525 1.417291858799177 -556 525 .05355367863796855 -598 525 -.3332226921414366 -616 525 -.05403856950926132 -617 525 .7069802482288057 -626 525 1.8594738071887122 -637 525 1.209286191245662 -660 525 -.04036818283873396 -661 525 -2.2796826615644092 -674 525 .4592024360691848 -680 525 .9998806691556423 -690 525 -.44644158974215065 -710 525 -.03819550695846968 -722 525 .4176748850785303 -755 525 1.3475893559517187 -760 525 -.2557705868719755 -761 525 -.19240747651350384 -763 525 -.6598599492284836 -767 525 .01866370929798622 -773 525 -.4764649185128322 -779 525 -1.2579129938346372 -782 525 -.5326368199765272 -788 525 .39123943413790235 -794 525 -.719067681550705 -797 525 1.0258189672385427 -807 525 .06491031629627536 -812 525 -.2730110803900744 -819 525 -.3535528451455534 -830 525 -1.4835557400141677 -836 525 .5314093519312751 -842 525 1.0268938404047103 -848 525 -1.3690834792290743 -867 525 .7226118623023268 -873 525 .1302064521744429 -895 525 -1.5809851802054669 -905 525 -.7263942100078462 -917 525 -.12689534262123736 -920 525 -.5386824483413435 -928 525 -.845450451298837 -930 525 .20271682727904383 -947 525 -2.2035448527672927 -949 525 1.851490747107057 -966 525 -1.8757583425185427 -987 525 -1.9399947435530305 -989 525 -1.3176108865976732 -996 525 -.4833191074720393 -1 526 -1.18556384986982 -4 526 -.022209562834232074 -15 526 .8990344377941916 -68 526 -.08297512394800756 -74 526 .47169682768220916 -80 526 1.0573607451950184 -86 526 .5992784163649401 -91 526 1.6776402432260125 -95 526 1.4868853287876866 -115 526 -2.408357910886323 -123 526 1.3204222993175736 -151 526 -.2779419674514213 -164 526 2.4782304518584097 -186 526 -.487185190398691 -194 526 -1.309907723489252 -195 526 -.2967082864170146 -196 526 .11005942058037829 -200 526 1.1644112967784994 -215 526 -1.6418999775843799 -217 526 -1.2436105737273775 -219 526 .9844106828605541 -231 526 -.6420578597810197 -243 526 -.07129176640355062 -257 526 -.11599777525777866 -263 526 1.0199912687699177 -271 526 -1.6988658887715222 -273 526 1.1163975570887665 -303 526 -1.5767692047811188 -313 526 .8213872988695033 -319 526 -.7701451191642495 -320 526 .9896851884465356 -332 526 -.5263633943248037 -336 526 1.7325226511006533 -339 526 .9716826453631416 -344 526 -1.5166352981934583 -347 526 -1.8276815807358877 -349 526 -3.0929358250768164 -351 526 -.37889414485176 -352 526 -2.2207056697575016 -356 526 .6847953540901784 -357 526 -.3323359754235473 -384 526 -.44969000146079274 -386 526 .597349432275175 -410 526 .5967286044731058 -413 526 -1.5622649210868071 -416 526 -.1596790267508663 -423 526 -1.2160635735007297 -426 526 .44028537608013163 -430 526 -.03952228786438905 -432 526 -1.0574316934497403 -440 526 -1.7401282286254343 -453 526 1.030659934853122 -459 526 -.9619511464938771 -477 526 -.01971357556669323 -486 526 -1.0780299405608862 -504 526 .7786146613797067 -508 526 .14920374590365368 -509 526 -.5466387766330923 -510 526 -1.1933822704548342 -520 526 .013879233850891806 -542 526 1.1898920879419863 -549 526 .9122197789577648 -550 526 1.8878861820722233 -558 526 1.2699016874207034 -569 526 .9170657406445388 -572 526 .03938851006626351 -575 526 1.1083331195058737 -596 526 .9106458819608482 -606 526 2.1133178214127355 -626 526 -1.5668869058113777 -629 526 .01412055199716275 -635 526 1.487258274929399 -645 526 .6839083724980485 -648 526 2.4704853351474703 -652 526 -.3578002029804242 -658 526 -.46125230873760475 -667 526 -2.1890045475769955 -675 526 1.509480935162859 -682 526 .3217127036256845 -686 526 1.8350225642156826 -698 526 -.38779809675781696 -707 526 -.10606382728995983 -714 526 1.0224778342553589 -727 526 -.42401300165797184 -739 526 .6148662496177049 -742 526 -2.136590014310432 -745 526 1.3602653890148912 -755 526 -.02267047790692015 -785 526 1.45220059691605 -789 526 .49465052451353886 -802 526 -.9448380411067688 -810 526 2.9581981769860892 -816 526 -3.203522381774637 -833 526 -1.8637008233997996 -854 526 -1.4987068261668326 -858 526 -.2860538721519105 -869 526 4.305913193120879 -878 526 .8040435245195895 -885 526 1.7785113284126384 -888 526 1.3257464710456162 -890 526 -.3086636029367681 -894 526 3.4985021714197146 -905 526 1.3108889915553552 -917 526 .21294857165324566 -922 526 -2.8731189962564443 -926 526 -.019854502414909908 -927 526 -.19805450540643482 -932 526 -1.3420466703295455 -953 526 -2.4137725377890753 -971 526 .48502830936405367 -978 526 -1.7511668369661493 -4 527 -.2541308873432097 -20 527 -.6643111188481235 -26 527 .1606823901723599 -29 527 -1.178296462839452 -32 527 -1.394734990424499 -34 527 .7850044995095857 -36 527 .11431349678489242 -38 527 2.1963423063943983 -57 527 -.5373163652843181 -78 527 -.6605984539723195 -118 527 -.40209840938036656 -123 527 .4981409810546248 -125 527 -.19844293748367514 -126 527 1.086061502191971 -134 527 .571530968564975 -136 527 -.8571966961704705 -139 527 -.48480780391880446 -145 527 .9393831431480224 -153 527 -.1612195312317197 -155 527 -.26172814603767713 -157 527 -1.4082654947098823 -158 527 1.8847095880287066 -170 527 -1.0519006839255602 -184 527 .05437464246594255 -191 527 .38397930873319985 -208 527 1.0381149285593934 -218 527 -1.435721144794924 -237 527 1.3524651021855572 -238 527 -1.1185086151818042 -241 527 .5596893902379146 -249 527 .024331358922742297 -251 527 -1.0991951940302267 -258 527 1.1445192227285377 -259 527 .15030719765839556 -267 527 .0861365042161405 -276 527 1.1226859128776427 -284 527 -1.3544163036219348 -296 527 .23654236506898296 -331 527 -.5907936671491139 -332 527 -1.0963783259581565 -351 527 -1.2668605082622473 -352 527 -.2794484035302621 -360 527 1.6036250931532363 -368 527 -1.0676626416833037 -370 527 .7466360667773775 -371 527 .1847955670796455 -375 527 .8599777190607156 -389 527 -.03715965836004978 -394 527 .9933900019887943 -399 527 1.8630778153226455 -405 527 .677728952230971 -406 527 -1.1959697785844434 -408 527 .42717655096002405 -447 527 1.4422304042780938 -453 527 -.2686722933481479 -476 527 .014466061367126096 -485 527 -.6889532569479622 -505 527 2.2213114938113785 -507 527 .2179058969488791 -510 527 .06840889379544322 -524 527 -.15874054489528455 -527 527 -.6091982048609219 -531 527 .7300395965300551 -539 527 -.14082726672093665 -541 527 .4639002887900478 -548 527 1.1038213790680111 -561 527 -.5456800271725338 -562 527 .27433935970014095 -566 527 1.553821800050437 -569 527 .028486095708012707 -577 527 .991261203526797 -579 527 -.02452606771764869 -582 527 -.15230207899728876 -603 527 1.0307166768169305 -636 527 .7020839100796884 -639 527 -.393778987724545 -640 527 .7225987508466306 -644 527 1.0242287629452287 -655 527 -1.2428530171796475 -664 527 -1.4023574514753434 -667 527 -.9500489819998033 -672 527 -.5537008304975174 -673 527 -.6657499360622747 -677 527 -1.4272871312480295 -686 527 .21447172311036833 -690 527 .6613329376243028 -699 527 .8071491940590354 -711 527 .5133765283552414 -712 527 -.17698562629673298 -721 527 1.215604447832965 -740 527 1.147447985704581 -758 527 1.2296331975809596 -760 527 .8817649533089187 -763 527 1.0330909475290015 -774 527 .08749401933367351 -780 527 .28415298810444195 -788 527 -1.4611026546667627 -789 527 -.8074085961217674 -792 527 .9350516539600999 -795 527 .9301463951662454 -806 527 .05899517679000192 -818 527 -.8723664059648609 -823 527 .7871804306583362 -829 527 -.7376830255080276 -836 527 -.41206118546637627 -838 527 -.9963326108719016 -862 527 1.4107908646163647 -868 527 -.5306521947975799 -887 527 .08612903167000668 -890 527 -.6306360663240037 -900 527 -.6273535519610891 -904 527 -.5182454688487299 -916 527 -.6527786575606465 -921 527 1.057748444344082 -930 527 .7423013090245073 -935 527 -1.3275420612264388 -936 527 1.6898199027031098 -942 527 .48456791660751436 -949 527 -2.5566715318658955 -962 527 -.3918275947789665 -985 527 -.6490252749780274 -989 527 1.2560732202785934 -998 527 -1.0804083577727845 -6 528 .356501945538202 -29 528 -.09799787181914363 -30 528 .749019327149622 -44 528 .3585852051936181 -49 528 -2.2442171094217094 -70 528 .24884465774256137 -71 528 .6282982076769328 -72 528 -.873993658109946 -73 528 -.7619619934579404 -77 528 -.25605549133439026 -78 528 .7093288308590909 -92 528 -.9487250740531273 -107 528 -.3063846938595876 -140 528 -.10742995630593388 -151 528 .08296292535789393 -154 528 .7893160269291004 -175 528 .1368178405337465 -194 528 .4027744617843158 -199 528 .22380175523058898 -225 528 -1.6359113057694856 -230 528 .23296869890276958 -254 528 .3464827718904117 -262 528 .41024735923577627 -267 528 .548857835580215 -320 528 .15841649466780242 -322 528 -.553110500998352 -323 528 .629996794966021 -344 528 -1.067481053118817 -347 528 -.6205302912024049 -351 528 -.4089517541208299 -359 528 .04031246403504163 -363 528 .03851182992952656 -372 528 1.0592869174558581 -374 528 -.09002041609455527 -390 528 .3912160609653265 -396 528 -1.0406153110957028 -405 528 -.3491644521453479 -420 528 -.9355607657773715 -424 528 .3267367369766617 -433 528 .8571961071794487 -442 528 -.4449397832113486 -451 528 .24464250145903854 -487 528 .36329604715077046 -489 528 -.8443443770768637 -506 528 .35560620883097654 -510 528 -.5136624301728484 -526 528 .7649025349030588 -529 528 .7728074818941449 -549 528 .5043105775558522 -572 528 .5974714034286723 -580 528 -.8121495607765122 -593 528 .6050060639027514 -595 528 -.045362466452013486 -601 528 .12847610138285515 -640 528 .9001128898076725 -641 528 .3137209993260979 -648 528 .9797643487530344 -664 528 -.38882851476135527 -666 528 -.9795410476321853 -667 528 -.6687036704158309 -697 528 -.8378336482327249 -706 528 .6007128317412374 -709 528 -.6875951258146503 -710 528 .15155028795860107 -713 528 .9222991377263015 -718 528 .32245686538102936 -726 528 .04533502139113574 -731 528 .07826585012475824 -749 528 .17272152132167376 -754 528 -.7884911449843296 -759 528 .9627469078371823 -768 528 -.48671462818834227 -772 528 .5667661468000202 -777 528 -.5813442096300554 -801 528 .1327312185039745 -802 528 -.07804425221260927 -808 528 -.39747337130458205 -828 528 -.5504829357075472 -830 528 .29916517788604824 -840 528 -.5254233864952846 -861 528 -1.71610307246461 -889 528 .6181656285818442 -891 528 -.5897038583089692 -898 528 .9796172797322038 -902 528 -.9048239419712125 -914 528 1.100572553606402 -929 528 -.36522161932277036 -948 528 -.4870415919395892 -974 528 -1.5270300848382676 -978 528 -.08588437328605585 -979 528 .2830466770851301 -981 528 -.2022781087808304 -989 528 -.5529334935546403 -22 529 -.25470553043014377 -26 529 -1.675651121710873 -36 529 -.38053001416446813 -46 529 -.025347686686228846 -66 529 .5932011053364539 -67 529 -2.1416727704973075 -78 529 -1.2925512381045683 -90 529 .882411000005088 -93 529 1.420547915894243 -118 529 1.126400849140424 -124 529 -.7144407171905011 -125 529 -.01385746763841815 -129 529 .33865443693745656 -131 529 .04052698388548194 -132 529 .36661009709617476 -139 529 -.721418862097704 -140 529 -.34645859232455833 -141 529 .4890125460237938 -150 529 .132645878276983 -151 529 1.944450787635617 -152 529 -.5331936379314794 -158 529 .6974893766623319 -162 529 1.3104533439538004 -170 529 -.9625014491555717 -171 529 .4290048055391138 -177 529 1.2132241174845202 -185 529 .5685032495445879 -187 529 .07052135221041467 -191 529 1.2808121440612958 -196 529 1.2682712819308277 -227 529 -.8687081469563736 -234 529 -1.8209804024796945 -239 529 2.020181466519959 -241 529 -.792236831591268 -245 529 -.8728235068674802 -253 529 .7952175882783185 -266 529 -.8468132900769224 -268 529 -1.2018568794066236 -269 529 .5367903233786414 -272 529 -.24315872844019523 -283 529 .3568441972581481 -289 529 -1.3807942074095738 -297 529 .20311806165692248 -314 529 -.4716156022042286 -322 529 2.2688172560187816 -332 529 -.7584334420069744 -343 529 -.6097143728261866 -357 529 1.715984347958227 -360 529 1.3926228922169028 -367 529 1.0757933386405232 -372 529 -.2668529433120654 -373 529 .6666229290458989 -378 529 2.2339828340931 -380 529 -.2647980520961215 -393 529 .5068466358711263 -400 529 -.7829500410822452 -410 529 -.8273695840257623 -413 529 -3.4151308718270545 -419 529 -.06342501915313739 -420 529 .18351407796009467 -433 529 .8873493154567627 -438 529 -.21913098169395406 -445 529 1.2525660156752652 -449 529 1.2459524265042308 -464 529 .4161498357814442 -466 529 -.5569806969920268 -469 529 -.022512048695622427 -474 529 -1.2947340999443142 -480 529 .8516646591045486 -498 529 .18796911111806675 -516 529 .10758669269193044 -517 529 .6244021480063021 -520 529 -1.5519462300541957 -531 529 .5206295963835751 -532 529 .08058897208890259 -534 529 .7897557818686362 -537 529 .027437024077223718 -551 529 .27594282074423 -561 529 1.0322063284006384 -563 529 -.5995059053414635 -585 529 -.705122333975039 -594 529 -.507220989414613 -603 529 -.5583823406447992 -617 529 -.29620991600004226 -637 529 -1.3515602795535622 -650 529 -.42465692796666854 -658 529 -.15580616655570062 -662 529 .855591249292357 -665 529 -2.086977119814452 -667 529 -.5863797890488976 -677 529 .2604385497020797 -682 529 1.2842008737555581 -687 529 1.4402283895925816 -692 529 1.1999039654681627 -701 529 .2186456650061592 -712 529 1.8102539390331596 -728 529 3.6257490873730482 -739 529 -.14972151886610777 -740 529 1.2541057320282267 -756 529 -2.5049312476043246 -765 529 -1.852182336456354 -767 529 -.9960010479970156 -768 529 .6563346853639399 -770 529 1.1253356949909696 -806 529 .5024564145901147 -809 529 2.556860864745409 -816 529 .5326972936247636 -837 529 2.978442598788915 -856 529 -.22260282706297368 -860 529 -.9251506140674937 -875 529 .07074856816715148 -879 529 -1.616492610188219 -894 529 .06436912547404605 -895 529 -.4029025046480589 -896 529 -1.8265737779414633 -930 529 .6433326964808826 -946 529 -.7899533744245777 -966 529 .13991932787264721 -968 529 .59509123124292 -978 529 -.7597049309945327 -991 529 -1.0114541253225235 -997 529 -.5619848848478595 -14 530 -.9101638688348297 -25 530 -1.2166133277110847 -42 530 -1.3960756533390282 -46 530 -.6670716512579268 -49 530 -.12617105594861702 -54 530 -.8992122329921489 -79 530 .2769418291736195 -88 530 -.8247197623234536 -93 530 -.6029450867741042 -98 530 .8213924257278796 -103 530 .5142732958404773 -110 530 -1.0025007763264553 -120 530 -2.2158064817722343 -124 530 -.21295782277618128 -131 530 -.0938211358713081 -133 530 .21964097818336492 -141 530 .4931627161942217 -150 530 -.1721574171465026 -166 530 -1.8040002124119212 -168 530 -2.213377769960006 -170 530 1.060666327459043 -172 530 -1.4533747703116482 -179 530 -.46111846655864175 -196 530 2.0495205120541877 -201 530 -.44170514515941445 -236 530 .6948089773173067 -237 530 2.132974274055622 -251 530 .8090191971617808 -272 530 1.4304480357548734 -289 530 .8540551949487256 -293 530 -.2542674114002275 -301 530 1.4105239588225236 -334 530 -.24198508092333562 -339 530 -.5990194009659728 -348 530 2.2075815383998556 -351 530 -1.0195892501798733 -365 530 .6128451562240328 -377 530 -.8347580600338455 -397 530 -.36977503562609 -403 530 -.6316313509395635 -406 530 .6316310259165915 -412 530 .9080992567502739 -418 530 .17396597256418125 -433 530 -2.449220376749712 -439 530 1.7652376401473104 -449 530 .1961723012857242 -454 530 -.7366267197891981 -455 530 -1.7315827983623453 -458 530 .08447771474218752 -461 530 .8709837390217554 -487 530 .7232686423422661 -494 530 .05154554311234953 -505 530 1.5789210344031184 -515 530 1.3996798232191172 -520 530 .7722491189869963 -524 530 -.6102847108575655 -534 530 .34484234281081305 -556 530 1.4422277094865903 -567 530 -1.1107501739316539 -575 530 -.9384508222784553 -598 530 -.0897205039145135 -604 530 .26333681304816575 -610 530 -.23176291769175386 -613 530 -2.0155198828515477 -622 530 .6893865839653933 -654 530 1.5207873775694962 -662 530 -.4537720071662558 -664 530 1.122054831482804 -677 530 -1.1929250754070186 -678 530 -.5312570561263562 -684 530 -.5810557583588172 -686 530 .8486132724540973 -689 530 -.9327974206365863 -691 530 .6218263083688 -700 530 -.8768436712899047 -708 530 .011086733180448893 -711 530 .2329050833545643 -719 530 .5832248724290192 -721 530 1.4737405595519508 -733 530 .037853327975635 -735 530 -.14157965422962207 -738 530 -.3873369918270545 -767 530 1.5254280167252428 -769 530 -1.2874918859563316 -772 530 .04773140690775381 -774 530 .8628857689077456 -806 530 -.5320625656340116 -811 530 .7349479332194047 -820 530 -1.8872763245197566 -821 530 -.32868554503711755 -823 530 .0241049242777477 -829 530 -1.7270126234821868 -857 530 -2.1833504793989302 -884 530 .9533013579814889 -896 530 -.32977155358463484 -899 530 -1.9208409498715306 -904 530 -.2657398400455053 -918 530 -1.4235807968813976 -923 530 -.1686582715617226 -927 530 .8748857805544861 -934 530 -1.3069806754197992 -950 530 .4909073213412673 -964 530 -.17349758125387588 -986 530 1.138932891279996 -987 530 -1.912973827243324 -994 530 1.4581725690433798 -9 531 .5095185717565245 -13 531 -1.2127881333874082 -23 531 -.35858771603132017 -24 531 .31633479395205755 -32 531 -.5451599181833678 -36 531 -.5863385647602841 -40 531 -1.660467861966865 -51 531 -.4204342660143719 -56 531 1.0491441514954476 -76 531 .8159292287903394 -77 531 .2607119640473098 -79 531 2.266711393522882 -87 531 -.5337315440762067 -104 531 -.19730560216025622 -115 531 -.06934238194829473 -116 531 -.42660285861049857 -117 531 -1.207394580235758 -118 531 1.0032657761150767 -153 531 1.6651935654451964 -161 531 -.29677262894602635 -165 531 1.176289699714202 -172 531 -.426708223782261 -179 531 1.5731636339704012 -200 531 .663900983474496 -201 531 1.6056998918239027 -202 531 .6298398776365208 -212 531 -.895687028101762 -214 531 -1.2959116998811973 -220 531 1.2318958727745986 -225 531 1.3183904198044645 -226 531 -1.1858614940431638 -228 531 -.5580145133566503 -254 531 -.10656175524690888 -256 531 .6597540637358572 -273 531 -.43599128132234527 -288 531 -1.7054800815782007 -290 531 .009472284699463988 -295 531 1.3333246476481009 -300 531 -.07293047270415014 -306 531 .9040837910828868 -307 531 1.0731511490789933 -327 531 .32528545905656203 -356 531 -1.5700019343637528 -370 531 1.172044164752743 -371 531 1.1350752241798534 -399 531 -.9551934261309565 -412 531 .7047086892589111 -415 531 1.2522068594411309 -418 531 -.5437792757304828 -421 531 -.5775430717789487 -423 531 -.534790699645995 -432 531 -.8670573336226091 -439 531 -1.0867319435673395 -443 531 -.07492690118812759 -454 531 1.2314349307641113 -469 531 -.25693560523522135 -481 531 .9518907316318287 -483 531 -.6888500961058274 -492 531 .14132936321857953 -496 531 .7455030192886013 -513 531 1.5728975375278587 -520 531 -1.4480534086272634 -536 531 -1.1660433556087972 -545 531 .548207713144991 -560 531 .9314653956679602 -563 531 -.655842023599663 -580 531 -.03831051451474371 -596 531 .02559572566468446 -617 531 1.1459913518428435 -625 531 -.85787219176774 -628 531 -.7894028942465203 -647 531 1.1013293364563586 -650 531 .5254197194564408 -667 531 -.24456119214327018 -672 531 .5021880757657048 -678 531 .1519703605975624 -687 531 .7635290948208926 -690 531 1.6231367739453975 -691 531 -.5557554703866096 -714 531 -.012209387703510394 -722 531 1.1515351200668686 -728 531 4.630680342456396 -729 531 -.15182933790422332 -730 531 -.6916232637365143 -748 531 -.960595855308066 -753 531 -1.553945587395594 -762 531 -.9938716590420175 -776 531 .6953466859868848 -777 531 -1.5144152041007446 -782 531 -.039134553039616424 -791 531 .4292013950926889 -835 531 -.7837845589187662 -841 531 2.026854435543688 -852 531 .021846603218711347 -873 531 1.8523904946151475 -876 531 .7764752137247324 -894 531 1.4326957149590474 -917 531 -1.1262002028237523 -928 531 .5045398314621297 -943 531 -.3494125813880563 -963 531 -1.3724611573996606 -987 531 .8176450332061659 -3 532 .7338675203192379 -26 532 -.35410438101554287 -34 532 .11453661081499568 -38 532 -.061230913244349705 -58 532 .17864701724638268 -63 532 -.03522153574202593 -73 532 -.3514070245947214 -78 532 .1581522348119998 -81 532 .26093552942599374 -105 532 .05654926869439584 -110 532 -.16760573614075652 -132 532 .28722715575830327 -155 532 .3025965563484383 -195 532 -.06454995376470418 -196 532 -.4842233582692458 -200 532 -.19977122555623536 -240 532 .5158603673550813 -264 532 -.4113180518888118 -270 532 -.4550547169012352 -292 532 .7424063663165992 -300 532 .01790768464194696 -305 532 .015216567036065845 -313 532 -.07911077922484804 -353 532 -.22287866971788484 -386 532 .08028442995836603 -391 532 -.5763093471750542 -417 532 .32948295836907154 -432 532 .06303378201714165 -437 532 .1886038005817301 -441 532 .23756616684408458 -445 532 .1135551763419248 -455 532 -.24473458222421096 -460 532 .5057687695939215 -506 532 .019022485893371226 -526 532 -.7197310278357846 -542 532 -.6998740420209393 -543 532 .4235296867122945 -556 532 .37347430509548973 -572 532 .06996066110054443 -584 532 -.4827607547491915 -615 532 .673426312189472 -618 532 .6986220353873915 -623 532 .8506255971697729 -639 532 .4881216530764982 -640 532 -.3930754007544605 -656 532 -.745171123924623 -661 532 -1.600411002908391 -682 532 .1550176365810549 -688 532 .24588469946996896 -737 532 -.06763624262805684 -763 532 -.7390806835343605 -766 532 .22185135827433788 -774 532 .2740017324274658 -776 532 .2775522295273442 -795 532 .17239976319230885 -803 532 -.6125581941090327 -820 532 -.056095950076918144 -832 532 .31726299031266114 -834 532 -.5096211317796586 -839 532 -.10096243365772048 -841 532 .9358539508477118 -847 532 -.3923392271664994 -860 532 .6701477085779467 -869 532 -1.3927263488747121 -874 532 -1.047491991777681 -905 532 -1.4785010160937795 -917 532 -.2057017128978976 -934 532 -.32347140226312415 -941 532 -.8542249593378131 -948 532 .06612438291962851 -958 532 -.4572969933406176 -963 532 .20336008565499633 -974 532 .16663913450763873 -976 532 -.09189511995626322 -990 532 -.06669473479709816 -1 533 .018924930624584266 -4 533 .5926018152675352 -8 533 .15488439887700198 -14 533 .7809864690747255 -17 533 -.7626357214386357 -46 533 .399641260793318 -56 533 .4870881223445753 -58 533 -1.7958656529534935 -78 533 -2.0960454169121063 -89 533 -1.0249332349420264 -103 533 .7296638279607411 -105 533 -.1308637565226894 -107 533 -.4815668163460683 -112 533 1.3213601062551452 -121 533 1.2835443209483481 -122 533 -1.4282800856073514 -140 533 -.13577838281892352 -147 533 -.9966755175305333 -150 533 .7396505475553189 -153 533 -.20442358307198913 -190 533 -.6567863733360363 -210 533 -1.0817173369821982 -232 533 -.14378521349224538 -234 533 -1.868435916255659 -239 533 -.6529485895471182 -241 533 -.9515244529797726 -243 533 -.45405643829550024 -258 533 .22860961229285676 -265 533 -.41779042347282613 -309 533 .7865035481347977 -310 533 -.15127520700881988 -349 533 .39315010672514883 -364 533 -.13245212657580993 -398 533 -.7895198215677061 -413 533 -.5613290858198503 -420 533 -.7192482496008017 -423 533 .16807567894686293 -429 533 .420883775143078 -435 533 .5388786565309202 -453 533 -.6160046217263428 -458 533 -.6043717234759955 -462 533 .2480914096903014 -480 533 -.9016586783373994 -495 533 -.8592038900634655 -509 533 -.1330106924567553 -532 533 -.40050610846579326 -562 533 -.37901803381943955 -581 533 2.132402985368529 -588 533 .8566115264649459 -589 533 -.05099101235229191 -607 533 1.4841404826668299 -609 533 -1.3307541894054173 -617 533 -2.5890153203777904 -621 533 -.8239630839016033 -622 533 -.26297413258899155 -623 533 -.39025310675072433 -624 533 1.1960890165826574 -697 533 .9772858689316841 -701 533 .988942288680437 -710 533 -.8925558137709569 -717 533 .18913488899954586 -724 533 -.3628377068433538 -726 533 .17553380885573008 -731 533 .3010793030559487 -737 533 .2892577288905398 -740 533 1.1355983209481446 -753 533 -.12888770174078348 -768 533 -.08468087493128647 -776 533 -1.8478246081712069 -789 533 -.7197927996996041 -800 533 .3969709764744505 -802 533 -.16975544669706938 -803 533 -1.2334366852281993 -816 533 -1.0121522222648356 -824 533 .509638863799722 -837 533 1.1297354850708863 -857 533 .06659598431725469 -868 533 -.5574195596451037 -884 533 -.9980121331833625 -921 533 .8128525694371755 -928 533 .6833072222851698 -935 533 -.5799889293294961 -938 533 -1.3691573215004336 -950 533 .7832585078830647 -961 533 -.641575689531061 -982 533 .9420002966091525 -985 533 .5741096756337605 -986 533 1.3566205654205954 -987 533 2.4744303953567144 -13 534 -.3448219393815353 -16 534 -.12245833568893544 -19 534 -.8840203702545298 -20 534 -.5141365328531652 -31 534 .1865601666308636 -38 534 .27129186174463177 -41 534 2.8203984515335976 -51 534 -1.5450742550971823 -53 534 -.7440576527188723 -60 534 -1.3514708682464989 -63 534 .2733909886955713 -67 534 -.560216002800171 -75 534 -.6918732891248485 -84 534 .22037756598317843 -127 534 -1.122297387625057 -182 534 -.1920177362732457 -183 534 -.1366757919471018 -191 534 1.3704261548165673 -201 534 .0422135960619547 -217 534 -1.8239911644860858 -225 534 -.020315764367333178 -226 534 -.9844867714457475 -228 534 -.8333520817963478 -241 534 -.19401757963199326 -242 534 -.8663143110722833 -246 534 -1.6018303299530807 -252 534 .21635538907226154 -262 534 -.29192189027108356 -266 534 -.57690883621262 -272 534 -.4551601779998287 -275 534 1.320268439982803 -277 534 .7208928150481526 -285 534 .07300692299084777 -311 534 -.470647371976193 -321 534 -1.8454772274012496 -325 534 .020551707368567457 -336 534 -.29792637623151486 -350 534 -.1306579799348745 -353 534 -.3413839902812509 -363 534 1.5608607196907622 -371 534 1.0472367109821437 -387 534 1.0409464052706416 -395 534 .7487851281220455 -403 534 1.3529737098872925 -444 534 -.5621382252121996 -448 534 .8328840078194643 -458 534 1.1881057051618822 -472 534 -.26223597057517034 -487 534 -1.0471990558995914 -512 534 .9797010663274258 -514 534 1.251931690302385 -526 534 .20732705333673096 -534 534 1.0361657684493344 -537 534 -.31605461190264933 -543 534 1.4290970740722995 -544 534 -1.7619941872319753 -572 534 1.01219573345844 -594 534 -1.1138486766228088 -607 534 -.9822071915416342 -613 534 .09753577258239457 -619 534 -.20785089775661184 -625 534 -1.8078195485653623 -636 534 .22039147778816576 -650 534 -.31722266553557166 -652 534 -.47466453727035 -658 534 -.13177806919567805 -662 534 1.0290178791622306 -668 534 -.4678166202391069 -685 534 -2.123218376619118 -690 534 .7962604079156832 -716 534 .9554245301728633 -722 534 .40052444739357246 -736 534 1.233400725981732 -742 534 -.6945038385717739 -753 534 .02132018408123297 -768 534 .05710351766554058 -769 534 -.9990519189973841 -778 534 1.8755264515284384 -786 534 -.0573050606634445 -794 534 -.6011621732535084 -798 534 -1.0026286269929998 -837 534 -.10813169074044754 -842 534 .6534577539700523 -846 534 .3539349097003355 -849 534 -1.853555787614856 -863 534 .210241860478086 -889 534 1.5943894852008806 -902 534 -.9359267508641035 -913 534 -1.2277379557744126 -930 534 -.5818757409671335 -934 534 -.4671505938975819 -967 534 .11863035542695917 -982 534 -.46481457273925164 -992 534 -.13270805654632037 -18 535 2.3481785915107274 -19 535 -.00021822061476560461 -21 535 1.0799800915127222 -27 535 -1.037617513558753 -31 535 -.17139730012549056 -36 535 .7586273920532562 -50 535 1.8137065879816057 -64 535 -1.0999433417957611 -78 535 -.4192019579735859 -85 535 -1.8094028595108136 -90 535 .06473843030243662 -98 535 -.9800969778396831 -100 535 .43389899832403245 -120 535 3.051210017586069 -164 535 1.7763163028242752 -169 535 .6096881823227697 -180 535 .3828539042089828 -183 535 -.36006521917670337 -189 535 -.8102346069279714 -190 535 1.7900623054681934 -193 535 .3637705803615552 -195 535 -.27515461004941744 -196 535 -1.0573550108691534 -206 535 .004636731125328877 -233 535 2.1733975408294817 -248 535 -1.1523945321239115 -249 535 1.5089519262162694 -252 535 .1683285613341819 -259 535 1.3349776592096723 -273 535 1.479789863402389 -291 535 .7012782773732833 -296 535 .10482114111155359 -332 535 .16181482274525102 -339 535 2.2346218539996245 -341 535 .701430888100047 -366 535 -1.1698453991873854 -384 535 .5488476666537925 -389 535 .9388365442922905 -409 535 -.5083091322623695 -414 535 .3568344977273609 -428 535 .8882832000898144 -467 535 -.46088910614365897 -470 535 1.6068337360993317 -486 535 -2.577970474709917 -500 535 -.42510381813885484 -511 535 -.008068280500624775 -516 535 -.5711515829638858 -526 535 .6358282480573979 -536 535 -1.6977095971801972 -542 535 1.4053330507238648 -549 535 .001976638375230516 -554 535 -.0173091588907852 -557 535 1.4564645764201296 -563 535 -.10546609415031516 -564 535 .4961520600324819 -572 535 -.4274552962368983 -580 535 .11348506641229819 -583 535 .5753409546481982 -602 535 1.0528628469938983 -610 535 -2.4937397071572907 -627 535 -1.3437229537912643 -629 535 .5851693018256205 -650 535 .9914569630213983 -651 535 .5771322290318113 -663 535 .38970169561851814 -664 535 .7215940018015994 -673 535 -.4578941550747188 -676 535 .646407783569682 -685 535 1.162476391463815 -690 535 -.27009088177509694 -705 535 1.6041963286224732 -709 535 .2396489871372726 -730 535 -.48013745058437485 -741 535 -.12092182941070985 -769 535 1.3224604044545964 -771 535 2.5918808095422534 -778 535 -2.2145120734280446 -779 535 .4159612527803258 -797 535 -.7085719424685059 -799 535 -1.275881337974702 -806 535 1.424409450570884 -822 535 -.47130791896330704 -843 535 .9192574675935288 -852 535 2.4752513161486953 -864 535 -1.2124597662832437 -865 535 -.14074497084674042 -869 535 1.7741750151432307 -892 535 -.17521874268278206 -897 535 -1.0157532405214098 -903 535 -2.2420821281064534 -922 535 -1.8051067403444154 -935 535 -.2816764227228593 -940 535 .8327506220452843 -944 535 .01796607840513205 -945 535 2.130616796848044 -989 535 .46823489778156263 -997 535 -.2141093291761714 -5 536 -.3022279844147233 -11 536 2.277803473069894 -13 536 -.6618813378420043 -41 536 1.3508160905201163 -52 536 .20680195596983345 -60 536 -1.3329398795444054 -64 536 2.186575633648784 -79 536 .26953596574162536 -87 536 -.3679521416553988 -89 536 .48573460136611707 -97 536 -1.4697916379208498 -101 536 1.1080712947008822 -103 536 -.20301821181101748 -104 536 -.7664148594663143 -114 536 -.6328090739437495 -141 536 -1.5418083228380581 -163 536 -.0731355516074608 -168 536 .9770054885549025 -196 536 -.6549080589500418 -197 536 -.5066156289815202 -198 536 -1.599769411661155 -202 536 -.3810851828977948 -213 536 -.6709126184774704 -231 536 .2849054252730542 -235 536 .7585025696369813 -236 536 .5160017081868398 -244 536 -.6018921348357449 -261 536 -1.0145650230376004 -285 536 -.8835921591607325 -299 536 -.0260749936310882 -308 536 .42802284279993796 -323 536 .5565428647898741 -335 536 .4988436800749866 -343 536 1.0780481443879342 -352 536 -.6881256631050524 -379 536 -.11439353265406346 -382 536 -.5781926726735143 -387 536 .04351941539898824 -391 536 .18036180464888318 -393 536 -.3712979070263452 -402 536 -1.3786297679198116 -410 536 .21159315750109436 -438 536 -.058372255770632 -440 536 1.2597769476268192 -448 536 -.2924070677353261 -477 536 -.41961736319634085 -487 536 .1968956063957918 -491 536 .0586077535351497 -519 536 .3305864844408963 -532 536 -.22157314848474674 -541 536 1.59470029066404 -563 536 -.21524930759952718 -582 536 -.17152735677617478 -583 536 -.4895396982458001 -600 536 .0015790464030527585 -605 536 .20478446436081066 -615 536 .5081982457169563 -617 536 1.5608024525871744 -620 536 .2668458321236246 -621 536 -.23055810514783448 -623 536 .346507893518347 -644 536 .8774302727819617 -670 536 .8410983191354691 -672 536 .5672836353888893 -677 536 -.11822279691809305 -680 536 1.1366403210409142 -693 536 .1281248094810826 -698 536 .31740469610776767 -702 536 -.7266251152294302 -708 536 -.2957968861317065 -715 536 .06614251362522933 -718 536 .42170162254193466 -724 536 -.2085644750103069 -742 536 1.3526052337924952 -752 536 .35007505541823336 -780 536 .1952401300738352 -800 536 -1.0576619364897224 -818 536 -.14415457079544855 -828 536 -1.0289941757285825 -830 536 -.6753794762012981 -836 536 1.0038884409852251 -838 536 .9937754619296633 -851 536 -.6458471751022835 -854 536 -.6372307357652409 -857 536 .5212600355356899 -858 536 .8030807189546014 -860 536 -.02385875930759177 -861 536 -.7286033885367433 -862 536 -1.303458345894621 -864 536 .18139701134642963 -879 536 1.0221720680328548 -881 536 .9880230340561826 -891 536 .23423777280643035 -893 536 .519929334844763 -900 536 .26309554595274076 -904 536 .129545577734852 -911 536 -.7862564939874963 -924 536 1.0463481110905635 -925 536 .4755007426589438 -944 536 -1.0299004801912233 -983 536 -.07965415470181958 -987 536 -1.2823404683625155 -989 536 -1.3435000995275612 -994 536 -.8118713198217198 -996 536 -.5688073309416488 -998 536 .9618316812957637 -13 537 .39217170555856107 -51 537 .20828862686934724 -75 537 .9554125376108393 -77 537 -1.3737899364755128 -79 537 -.16747266506904307 -90 537 .519446758040061 -105 537 -.4813641255260589 -128 537 -.4646453103287 -136 537 -.32054230187749677 -146 537 2.1616434614673317 -151 537 .4852966503200558 -159 537 -.029440869605014866 -167 537 .02036244264382639 -173 537 -.32126340375537876 -196 537 1.8265959606237268 -202 537 .4847681458808169 -212 537 -.7869453672455797 -221 537 -.5782997097827909 -224 537 .6838639853772543 -231 537 .21127476367188863 -242 537 -.40281806608382836 -260 537 .6182064045872496 -266 537 -2.5311881646642425 -269 537 -1.301950230103464 -282 537 -.23557190862269092 -286 537 -.19002211911703765 -317 537 -.5364988606217204 -324 537 .5319419847476732 -329 537 -.8548492071649436 -339 537 .6541940138719273 -340 537 -1.127979421514573 -349 537 -.6983506513047775 -356 537 .9391561558065689 -359 537 -.11754073853165126 -369 537 .6802314407236655 -385 537 .27489694327138003 -389 537 .6637717990349995 -408 537 -.8624845515365636 -414 537 .7409471703436119 -415 537 -.4487535126118749 -418 537 -.4663509484383304 -423 537 .05535913143970346 -472 537 -.10678140199523989 -477 537 .22927469481429053 -496 537 -.3540304331783668 -503 537 .4755097244051763 -505 537 -1.169204081239526 -533 537 -.7899018711428094 -544 537 -.3737333468762779 -569 537 .27866831309770734 -572 537 .29298262804808006 -575 537 -3.205201952306263 -584 537 .04470637327633291 -592 537 .9836042375945914 -598 537 -1.9374751965055423 -607 537 .7524256053101136 -611 537 .7279173569503093 -619 537 1.153807145937977 -644 537 .08030577534075738 -647 537 -.36121128416213694 -649 537 -.1732964146213878 -652 537 .11961233013405619 -656 537 -1.6256926111310441 -681 537 .28880139443941705 -696 537 -1.42929004256408 -699 537 .13264344737682915 -704 537 -.433049207191152 -723 537 .36122023402602293 -760 537 -1.3149179131933377 -773 537 -1.495925140098569 -796 537 .9439730932807091 -832 537 .9764940659044941 -834 537 .2137644892980144 -838 537 -.20625848762597496 -839 537 -.29924326901191034 -843 537 -.8703231476015791 -855 537 -1.0495795764056968 -857 537 -.8184319356505179 -863 537 1.3700705953218306 -865 537 .08820256562489076 -866 537 1.0215300041964528 -870 537 1.41767697844683 -881 537 -.5388775944295997 -904 537 .5083566502581849 -912 537 -1.6486077147571507 -924 537 .006289263061920854 -929 537 -.15967290402330095 -944 537 -.02152800618414777 -947 537 -.8928566598785824 -954 537 .17527750938361447 -963 537 -.3808025930919429 -966 537 .08019717944166291 -968 537 -.6248600718303717 -981 537 -.5047232832489225 -996 537 -.19202653341031006 -999 537 -1.2317039331907196 -1000 537 -.5874046170107021 -13 538 -.7759438611869041 -21 538 -1.0281142285884226 -32 538 -.343089367739032 -44 538 2.207976110439952 -65 538 -.710453468707248 -82 538 -.9877939781948333 -94 538 -.2946884879584871 -95 538 -.3415361336208977 -99 538 1.2121184377381005 -101 538 -.9922992847335474 -122 538 .95569445070103 -123 538 .791749629988769 -139 538 .5570653844986649 -148 538 -.4244624992381086 -150 538 -.6187811028646382 -155 538 .8469886166870197 -158 538 -.4545054313312683 -163 538 -.2869395185291808 -168 538 .13538081020031106 -170 538 .09549044628546621 -183 538 1.0979658087520985 -191 538 .798583731040652 -195 538 .8635553301413746 -208 538 .37831967627387253 -210 538 .1574417174661099 -219 538 -.2330502901814428 -231 538 1.4491407098241922 -242 538 -.6332842201753288 -245 538 -.467203326876745 -246 538 -.5317108932576122 -268 538 -.09757638718394424 -277 538 -.9994589819344577 -286 538 -.6200815244638723 -289 538 -1.89455232723464 -309 538 -1.0409977610435492 -316 538 -.938863199055879 -320 538 -.11761156107701291 -340 538 1.5567676410235718 -345 538 -.5345550642133913 -363 538 2.1879890986625745 -375 538 -1.6344606039218346 -378 538 1.7421764182449884 -381 538 .26802469294528436 -390 538 1.5498972710602472 -402 538 -.5651959756942364 -411 538 -.14313919583540405 -420 538 .548151405041336 -423 538 -.33771121487494404 -424 538 .1541217700133481 -429 538 -.6458072644400409 -446 538 -.4878670414530808 -449 538 1.1905170487016452 -456 538 .24714817799705902 -479 538 -1.1496866800488508 -481 538 .6421531137308898 -490 538 -1.4058281568937179 -501 538 .19534125049345044 -511 538 -.8000352488778171 -514 538 -.16791555252984905 -516 538 .3266390582650184 -523 538 .31598028522733995 -525 538 -1.6100051848406165 -528 538 .776409057653726 -550 538 1.0917398690918234 -577 538 -1.0752281084756383 -597 538 .893298466989252 -605 538 .4484330515509094 -608 538 1.274438185625575 -612 538 1.516649825192887 -615 538 1.1845731022631196 -620 538 -1.2099258288296775 -628 538 -.4648823142280951 -642 538 -2.216697854617959 -653 538 1.37183020967522 -656 538 -1.1158570098711555 -671 538 .406541435260406 -674 538 .6985010460835541 -676 538 -.726425466535431 -681 538 -1.4448562398091032 -697 538 -.30778369111110343 -713 538 -.19410536055197153 -753 538 .5960400340332159 -782 538 -.6105852479354346 -809 538 1.6646087510110428 -846 538 .5674705774210832 -854 538 .48134306545979705 -859 538 -.11619937885377743 -879 538 .36181114304052675 -880 538 1.0982333362993262 -884 538 .6572876511942988 -886 538 1.0033492947698353 -895 538 -1.7632764020712088 -908 538 -2.0128869164712495 -912 538 2.8405487869591144 -939 538 .7876755412403696 -943 538 -.8673287233920235 -945 538 -1.114501571502298 -946 538 -.9376636837631628 -950 538 .6999099268926037 -951 538 -.33989802444759276 -979 538 1.1478165923204813 -983 538 -1.1620833846444423 -991 538 -1.0021752350857038 -993 538 -1.7842117979608396 -994 538 -.6825435846107467 -999 538 -.12744766073146965 -11 539 2.3815242541368966 -12 539 -.09860536517934188 -30 539 -1.904681999463619 -31 539 -.20112448003186228 -48 539 -1.8878882244984603 -60 539 -1.1386404793725116 -73 539 -.13334242361963497 -87 539 -.6337505482403643 -95 539 -1.4029758347217627 -102 539 -.9662347561143134 -104 539 -.014696787884901091 -123 539 .802418065491029 -125 539 -.2689566987726275 -153 539 -.3670281537606263 -173 539 1.3370768696265543 -213 539 1.226997622949908 -216 539 -.5540453412952443 -219 539 -.02290163894487729 -226 539 .30120271287238537 -228 539 .7392969895964723 -231 539 -.11638031790263928 -234 539 -1.3216193617703818 -244 539 .3061456709390819 -245 539 1.2822077418555524 -247 539 .512764115340284 -255 539 .18295232814937884 -259 539 -.852585628274791 -263 539 -1.2708240805498519 -264 539 1.2303915076030583 -265 539 .24018246218451605 -272 539 -.7927094803247463 -287 539 1.3352730777525779 -294 539 -2.1024863324588456 -295 539 -.7935434788434829 -311 539 -.470343332775799 -320 539 1.631299448863441 -324 539 -.8160485846490207 -329 539 .6837626848001246 -347 539 -.07913985315934037 -352 539 -1.1243611126186672 -365 539 -.30761227975262223 -379 539 .4493012797041618 -383 539 -.33697273909244263 -403 539 .8551704978214614 -415 539 -.2992894619079795 -425 539 1.3034619556899296 -432 539 -.9126481894270586 -433 539 .8156912759860467 -467 539 -.22332011777232577 -468 539 -.31630583965525877 -483 539 .604972356719399 -521 539 1.204826886039967 -538 539 -.613160271608141 -559 539 .5821656523568972 -576 539 .8257605089393929 -578 539 .005988556018640651 -582 539 -.5398655364307847 -589 539 .5371338174138715 -590 539 .30039734558306824 -599 539 1.002057646707486 -600 539 -.2988159302023174 -631 539 -.7078047730681258 -633 539 -.5492094507048636 -643 539 -.47781766428928124 -664 539 -.5359715802750731 -681 539 -1.396056671111319 -698 539 -.9556501666128271 -721 539 -.20541365896922922 -735 539 1.0682161654432447 -743 539 .17616343542914165 -752 539 -.16249433784631157 -770 539 .40960060495310363 -776 539 .20603782900725212 -783 539 -.16981975048579417 -791 539 .6348995022182193 -798 539 -1.3721105009464476 -804 539 .5162146127020877 -810 539 -.5038001892078133 -816 539 -.020897484252796084 -839 539 .12078648112470516 -845 539 -.49323698273448946 -849 539 -.13968680339697087 -881 539 .6536203636227321 -890 539 -.5928629670961428 -900 539 -.649041194251927 -903 539 1.3545336717755183 -925 539 .2414811033285552 -931 539 .26134482952290544 -932 539 .18547222647822353 -934 539 -2.4713921808390507 -936 539 -1.8237393842078486 -937 539 -.9309744299441441 -940 539 -2.232407168345668 -951 539 .9535829116266495 -959 539 .15366696410458924 -971 539 -1.1813061394594826 -979 539 .4786242939449035 -980 539 -.31088496571123503 -982 539 .9300269722613436 -985 539 .6929082793305777 -991 539 -.19679899477135246 -23 540 -1.0745355429192152 -51 540 -.1724451321242389 -54 540 1.3046615924517166 -55 540 -.43676889067873775 -57 540 .3339778366878934 -81 540 -8.203438154246595e-5 -104 540 -.10486858379516667 -112 540 .8487450421387271 -117 540 .1002509168899465 -120 540 -1.2455585531080426 -132 540 -1.5242757613706657 -135 540 -.37065121430920034 -152 540 -.062032737016715675 -173 540 .5317846726589991 -174 540 -.6435783157507272 -184 540 -2.383147765154551 -208 540 -.27240530939808366 -213 540 .940152864981731 -226 540 -.3062158970856746 -234 540 .24344664202437732 -237 540 .6431115008865238 -243 540 .5918923717924996 -260 540 -.0904394494949888 -261 540 -.09822201683792917 -268 540 -.5925882449122146 -272 540 .6637185049019394 -311 540 -1.4509387925806183 -314 540 .7997355374189523 -343 540 -.47587917765288257 -345 540 .9214516418698696 -347 540 -.7162066081367006 -357 540 .6123922028193054 -391 540 -.6511214566160487 -392 540 .973947511143981 -396 540 .05029587756588266 -400 540 1.4150401927819827 -401 540 .3929954322235605 -423 540 .6119726712665653 -430 540 1.9548820260683002 -437 540 -.32595607851466946 -451 540 -.7403563218067335 -483 540 1.2671103907992227 -485 540 -.7931283248379971 -489 540 1.608229943939506 -490 540 .954555196497213 -510 540 -.634406001687196 -517 540 -.7977181372766735 -521 540 .8918208564443377 -534 540 .37475720724286543 -560 540 -1.4102588593704952 -564 540 2.0508994094868886 -566 540 -.39199578414728764 -574 540 .5116258664933867 -595 540 -.3641750051228718 -596 540 -.6394915872076119 -607 540 .06129337779284649 -613 540 -.6076955900506102 -616 540 -.28969765969034755 -629 540 -1.7157092347404554 -641 540 1.292739360805649 -648 540 -1.038945497749577 -649 540 .7962214653051408 -650 540 .37143039694323854 -652 540 .7818479593404111 -658 540 -.3913872167775089 -664 540 -.6726884136726206 -678 540 1.8183061061973917 -691 540 -1.163377418430626 -700 540 -.526296352030451 -702 540 1.1422952935576163 -703 540 .9530970253956671 -716 540 -.29230482538508606 -727 540 .7297176243143351 -728 540 .044041876688834594 -734 540 -.8785894311279718 -737 540 -.5427474156819565 -754 540 .052392540532573396 -757 540 .36121637907267856 -765 540 2.276593468408046 -772 540 -.2974960092021669 -786 540 .5898069737326719 -799 540 -.7436265185667341 -802 540 1.387036987151711 -809 540 -.7249223746793462 -810 540 -.5397991230744329 -817 540 -.6927643081241929 -822 540 -.3011492345045831 -851 540 -1.9657969199087912 -859 540 .38416196350260245 -860 540 1.2366555199345763 -862 540 .45755285182763505 -868 540 -.5949372863385403 -874 540 .778811376248242 -875 540 .571596351831236 -916 540 -.32445483867895974 -918 540 -.1410679734157185 -920 540 .8972800012722686 -933 540 1.2281699655256735 -938 540 .3520070524428065 -953 540 -.7701797960174286 -958 540 1.3479844255200695 -960 540 -1.3687116934623322 -964 540 -.5919819501425924 -967 540 .8897558638213884 -995 540 1.523225469811568 -998 540 -2.511582779050689 -999 540 1.300635209796815 -29 541 -.5177002886605895 -36 541 -1.1822792370785977 -39 541 .6741419873302031 -99 541 -.7163906863823702 -103 541 .4930599642640851 -108 541 .22835630391520773 -109 541 .596283975980731 -113 541 1.3251051317767772 -118 541 .6592191281373723 -119 541 -.35851826661822667 -121 541 .27587467438282176 -126 541 2.0707634949785785 -136 541 -1.5478472322725898 -142 541 .9538429045461985 -144 541 .6015877391641087 -145 541 1.8076515446648882 -148 541 -.40590103828317314 -152 541 .8311562689092644 -153 541 .7628402620137047 -156 541 .13446049203900654 -160 541 -.15627832890858487 -188 541 2.1585632209416423 -205 541 1.094287363812373 -245 541 .19443227868499735 -259 541 .9574032211652924 -261 541 .4823355758977771 -278 541 -.07863164490411971 -285 541 .12626307360378003 -290 541 -.4920799367914044 -298 541 .6920097453715208 -320 541 -1.5977005277222833 -329 541 -.511691805015413 -332 541 -.6111723244563008 -341 541 .5262732586011474 -350 541 -.3160397074825414 -359 541 1.8054352881840925 -367 541 .4091440753764447 -382 541 .02257319710011521 -387 541 -.7509826895976244 -388 541 -.4762185334119319 -404 541 -1.417778175196027 -418 541 .4040495738661398 -425 541 -2.3343041395643294 -433 541 -.005862014324243315 -436 541 .36265067441353416 -485 541 .6844534374461032 -499 541 -1.4409501088623708 -508 541 -.253555153261198 -509 541 .07495536263269792 -511 541 -.6023179690194475 -525 541 .05690913486128356 -527 541 .6196758128924329 -529 541 .41546194718134044 -548 541 -.8686912533296021 -562 541 -.2399229322111387 -588 541 -.17037824431061313 -593 541 .7795131436777893 -595 541 .8996185741960446 -598 541 -.18384127015652527 -599 541 -.25175320780132027 -617 541 1.292837082177199 -623 541 .9194254093123045 -630 541 -1.0142687197015423 -635 541 1.0046515528780582 -644 541 1.3202908786810938 -660 541 -.8222583369651152 -682 541 1.0530706018852372 -700 541 1.745600349045798 -703 541 .13377980711771623 -710 541 1.4023174217738994 -721 541 -.4139906876167976 -725 541 -.530236034367568 -741 541 .12370633561886496 -747 541 -.4993179511510257 -748 541 1.0491980616460457 -760 541 -.25344389472293016 -779 541 -2.53790457299366 -790 541 -1.7656286121595113 -818 541 -.9536147137570599 -829 541 1.155838576870209 -841 541 .14229370463502736 -847 541 -2.2449324957470607 -867 541 .7885384694124069 -869 541 -.3367424441445052 -891 541 .28628889914807354 -901 541 .11635796132916798 -915 541 -.9828668358769646 -925 541 .6610070326750005 -940 541 .761246332512836 -942 541 .3989671477418975 -944 541 -.933729212076058 -954 541 1.787901167574489 -984 541 -.6867468585890356 -992 541 -.4889439281851678 -993 541 .08191181284436612 -16 542 .1683448236475429 -21 542 -.3192149624605804 -37 542 .7118361243563378 -52 542 -.04134880027005669 -82 542 .47501540183509244 -90 542 1.1145093861786284 -92 542 -1.2975853648969462 -101 542 -2.259237322541202 -111 542 .8205891738988662 -115 542 -1.0641103801004208 -132 542 1.475968864430359 -137 542 1.0498529620913737 -144 542 .49435341681974426 -159 542 -.2335143490669887 -168 542 .08426145085981392 -181 542 -1.7484662356405394 -183 542 -1.7975991513722998 -184 542 1.5318980660670385 -206 542 -.5288660202312312 -224 542 -.07421955571459976 -230 542 -.08336124451519067 -243 542 .12639864409646415 -245 542 .12573026799839895 -262 542 2.3845219203083605 -273 542 -1.7131184935225694 -275 542 -.4929968771653939 -299 542 1.9464054870671161 -310 542 .015223931347055852 -319 542 .261464957770145 -332 542 1.6306290479717525 -339 542 -1.9493175365544877 -380 542 .2515288722784183 -390 542 -.038302332401456016 -396 542 -.4394558872680785 -419 542 .20743950700644875 -423 542 -.3463079656246507 -440 542 .791515317047355 -458 542 .8262007996868516 -464 542 -.6408029005506876 -501 542 -.5489022119554225 -505 542 -.9382952749908888 -507 542 .1891527291287432 -523 542 -.5040713103088732 -532 542 -1.8702937563460185 -569 542 -.4450749045572301 -576 542 -.56629218973378 -577 542 .8244036591890589 -584 542 -.5333590298044052 -592 542 -2.2057746888101306 -605 542 2.710105662418485 -613 542 .36808714540469745 -631 542 -.034042772410295984 -634 542 -3.2570315114544783 -636 542 -1.0008001315031807 -638 542 -.03105516906383981 -648 542 -.23631202780384583 -657 542 -2.004360401576869 -659 542 .511492866388452 -660 542 .4224838815958851 -668 542 -1.8313436737863922 -673 542 1.1446156650943793 -676 542 .12141452803380065 -689 542 -.5373322190036175 -699 542 -.6736705841065272 -715 542 -.1349599531858874 -730 542 1.6858733263975931 -743 542 2.314782403880522 -747 542 .2016361036784287 -763 542 -.297888209812909 -781 542 .3738685197209066 -800 542 .9843688838140219 -801 542 .635629449640112 -804 542 -.07334026301605538 -813 542 1.1963743250109948 -820 542 -.5584466836686204 -836 542 1.2697407020942175 -850 542 .7910330682102908 -866 542 .7770372974007976 -874 542 -.22782461345556632 -876 542 -.22054111170185267 -878 542 -.6651892838054773 -895 542 -1.2800343236421359 -898 542 .980645727398312 -906 542 3.203568436502887 -915 542 1.129617634948506 -921 542 .14261461150442678 -934 542 -2.019983618051796 -937 542 -.3415389890834043 -958 542 -.8791486683485107 -965 542 1.9809039375174218 -968 542 .45932217806593617 -970 542 .49532144400671096 -991 542 .43968659327880444 -2 543 2.5275514310861515 -12 543 1.2532970850553586 -15 543 -1.186856344279678 -18 543 -.6076169800965885 -50 543 .8304475250081008 -53 543 -.6698436776640764 -77 543 .4515741787716385 -87 543 -.29527357516320496 -105 543 .5637778170742723 -119 543 -.9014711465560145 -141 543 -.015947607827607898 -179 543 .2154685418481082 -184 543 .8731323611881894 -195 543 1.065700832793268 -197 543 2.6572676454946196 -199 543 .5972933608834616 -201 543 .9299685671341177 -218 543 -.9489957607413716 -220 543 -.3712137294179195 -225 543 -1.2332963424053403 -233 543 -.07450491738647734 -236 543 .00979966589468173 -256 543 2.383825002195877 -257 543 1.3981434897999816 -263 543 2.3342551106898797 -279 543 -1.0379511389420872 -295 543 .0793208972943987 -303 543 .31196144244526613 -305 543 -.6773275574998178 -311 543 .9984142603758563 -313 543 .8932938273303928 -315 543 1.1160408198244969 -325 543 -.6843366270689407 -329 543 .9941605469974888 -334 543 .6425756187731997 -344 543 -.13961473673588726 -345 543 -.9411701712766827 -358 543 -.8693017081146052 -368 543 2.351318131136947 -370 543 -.22433004727611722 -382 543 .19486297329722557 -387 543 .19684244643138707 -405 543 -1.7651126013695426 -412 543 -.12718542150743165 -425 543 -.15382490754585226 -429 543 .7677070942037094 -437 543 .710167073810386 -441 543 -1.8653804681816857 -445 543 -.9981380546621429 -447 543 -1.2611821752594405 -478 543 2.359926286787461 -487 543 -.13010563487994703 -500 543 .30328883781781757 -501 543 .834390142796267 -535 543 .07759475171963362 -586 543 .31450461003927543 -587 543 .9066451062267077 -618 543 2.117095705185411 -634 543 -1.932264219689803 -646 543 -1.6900651533564335 -654 543 1.4148499082947328 -660 543 -.1253340275329346 -661 543 .07614531635053728 -685 543 .18422688403474982 -689 543 -1.2585052507321033 -698 543 .8767601542482683 -703 543 .04368336046886455 -715 543 -2.226771455066466 -721 543 -.11457551277704758 -731 543 -1.7423143011295052 -733 543 1.4237559988145063 -742 543 -1.0918214155045303 -750 543 -.8336510370491452 -764 543 -.7868934123605615 -765 543 .09317927666624043 -770 543 -.7863491698148654 -790 543 -.3705144785527973 -818 543 -.6759105944985766 -824 543 .16846969156658897 -845 543 -1.3952821555949853 -863 543 -.049034859510860576 -865 543 1.1267138286171332 -868 543 1.3871860093095227 -885 543 .262680690821232 -904 543 .40784535198802835 -905 543 -.9086322657459467 -916 543 -.26077146705952925 -919 543 -.6476523305224676 -920 543 .8429083281539153 -928 543 .2381982044369766 -930 543 -.22759007533140524 -938 543 -.46653100812291975 -942 543 -.47450711655374417 -974 543 -1.2158485261220713 -989 543 -.32805266722189974 -996 543 .3908448942016316 -997 543 -.7383907505113547 -998 543 -.799921572692055 -20 544 -1.1748293868930082 -36 544 .8994906588812192 -40 544 -1.7451276823084676 -61 544 -.7148352599331018 -65 544 -.23858950726502604 -78 544 .9921346764934118 -84 544 -.09800357923070908 -88 544 2.0776057576497147 -93 544 -.2103385266795722 -97 544 .6212828118465038 -99 544 -.9918384822902151 -110 544 -2.2380237252881408 -121 544 .14454566911518407 -129 544 -1.132323009408242 -138 544 1.3178382623086702 -140 544 -1.6967468379501662 -175 544 .4538715656969051 -180 544 -.47502710516381047 -191 544 -1.0716155145810191 -194 544 .5282644229116675 -206 544 -.3133401349468822 -217 544 -.5418169600918656 -221 544 .003787965010957961 -228 544 -.5395833718152693 -229 544 1.3195702010995645 -255 544 -.06646184353329268 -258 544 1.7081887984453574 -263 544 3.0596104822699552 -310 544 .9296049280890311 -312 544 -1.6747451911278788 -315 544 .6783095673949148 -324 544 -1.5700712241096375 -333 544 .5669182201066882 -345 544 -.9169924774878622 -352 544 -1.8634675363511104 -362 544 .9043881435880552 -374 544 .412561879815161 -376 544 -.3323698543408437 -394 544 .41619297253510823 -418 544 1.1476728491415127 -419 544 -.2931937005522536 -430 544 -.6558753184036239 -432 544 -1.6078356239943843 -440 544 1.797391230795125 -443 544 2.343484718883793 -450 544 .8047078120388542 -451 544 1.0860596435846603 -471 544 -1.2401106125630557 -490 544 .1925269993415018 -508 544 -.9461715673058204 -520 544 1.8767314452772672 -529 544 .9711008970651989 -534 544 .7782472875780881 -535 544 1.0470811158255884 -539 544 -.913967366661946 -543 544 -.8574398720075632 -547 544 -1.546621079282886 -550 544 2.75737844362411 -551 544 2.4735539431561215 -561 544 .36971012667043984 -567 544 1.7203366610446977 -568 544 1.676956970253911 -571 544 -1.7134212751750781 -586 544 .43395812980847187 -591 544 .9898938906567637 -596 544 1.6391016745809122 -610 544 -1.676982932768405 -620 544 1.3700510098010747 -632 544 .571506433264218 -647 544 .45232690578818613 -652 544 -.7468491919346558 -653 544 -2.03573579344411 -661 544 1.0161578309404116 -666 544 .925019904505801 -670 544 2.1464317467308334 -679 544 1.4799869774219128 -685 544 -.9792705510663987 -697 544 -.4086352192152757 -699 544 .6054862326435595 -719 544 -.4159281740236101 -725 544 .14015134000725366 -738 544 .6847142185593448 -739 544 -.3574900060502192 -741 544 -.6175251172404376 -750 544 -2.767699428352089 -763 544 -.07873913953088285 -781 544 .7822666987423395 -788 544 1.0302277664567774 -799 544 -.9893112295444968 -815 544 2.3164557608489815 -821 544 .6303354664210709 -825 544 2.0071288483884886 -826 544 1.270057758479866 -828 544 -1.07261749366505 -836 544 .6917278823253545 -840 544 -.5504495947419623 -844 544 .2866644845719057 -855 544 .5393272793944084 -859 544 -1.4398532744148247 -883 544 .22614241923347883 -899 544 .5606060360871341 -903 544 -1.4836031575908544 -941 544 1.7542644177028752 -943 544 -1.5614201671160832 -951 544 -3.523254171550055 -961 544 -.4935082913045824 -963 544 -2.7960575501184946 -967 544 -.6105031692405148 -971 544 .7648577486182697 -989 544 1.377640505661297 -10 545 -.01468964883996541 -12 545 -1.0538486467452584 -18 545 -.3456837500914056 -37 545 .9956076169063093 -47 545 -.5629491629601119 -54 545 -.878494527192558 -55 545 .2833443874678671 -72 545 -.682073498690568 -85 545 1.4334433365891401 -88 545 -2.0963624780152728 -110 545 .9344467421570313 -123 545 -1.3593258405843636 -130 545 1.7822725618179271 -140 545 1.6114216440134501 -143 545 -.39556432652320506 -172 545 -.00849178743370185 -174 545 .803955200220057 -185 545 -.24870070485426585 -186 545 -.31768436084321505 -189 545 .367166731348052 -199 545 1.1241074434464542 -226 545 .10659088202546288 -234 545 2.308701575162362 -244 545 .21983271107607272 -248 545 1.4663637831843905 -254 545 .6532591124737418 -255 545 -.8775115437167221 -257 545 -.31177811867366195 -265 545 -.7438329059556233 -269 545 -.09616306485243968 -285 545 -1.349898690281569 -324 545 1.0564430217053982 -327 545 .09040235291364992 -356 545 -.891812350347219 -361 545 .23649359545627163 -366 545 2.323475709099255 -408 545 .5528073343283212 -420 545 3.218126469916169 -434 545 .25153164280599094 -435 545 1.0718654706653754 -442 545 1.5963426388510928 -463 545 .8417065262003104 -495 545 1.9095582331025978 -496 545 .1516301356276653 -502 545 .2443360979016113 -506 545 .34114089196760017 -516 545 -2.6618791066493186 -525 545 -1.6662608029860668 -531 545 1.1079749961958347 -542 545 -1.1520464720447956 -547 545 .5308853033109584 -561 545 1.6952246108982039 -562 545 1.9959920096435766 -566 545 -1.0701719267364325 -574 545 -.3776403416071561 -581 545 -2.1054265295708183 -591 545 .3887461684784493 -608 545 .9479999405578894 -613 545 -1.5204465079521974 -627 545 2.3381623345480405 -654 545 .8470677819769135 -668 545 .8179655646711427 -671 545 -.8553144198108585 -675 545 -1.6691036717921652 -676 545 -.4814585192021434 -678 545 -1.0481351715485443 -685 545 .350178303777746 -686 545 -.8564564448609039 -715 545 -1.496267616256964 -740 545 -2.072724399016048 -746 545 -.11546754983113308 -758 545 .5206946300935212 -777 545 -1.2623738165341913 -789 545 .2976276563090904 -795 545 -.6872005478387371 -799 545 -.03419136165762561 -800 545 1.202147869625258 -813 545 -2.5696282601798295 -821 545 -.6945648821885338 -832 545 .4066615565902235 -872 545 -2.2825328406340137 -873 545 .017094133202912365 -905 545 -2.5295657125942586 -908 545 -1.6484755069411634 -934 545 -.9293207493985801 -936 545 -1.6919579096597572 -939 545 .4682674092913137 -947 545 -2.2189060960140714 -972 545 -1.208916090040896 -1 546 .04492954068586254 -6 546 .6074382504939557 -24 546 .5523292399107893 -35 546 1.4426839160468585 -49 546 -2.0628212478133032 -54 546 -1.8137464186976808 -64 546 2.3994073606165025 -65 546 -.9336943624220793 -72 546 2.7070831363211982 -89 546 1.8068311082916577 -90 546 -.47371023803671747 -103 546 .09058138969985864 -128 546 -1.0579714737772903 -131 546 -.717009300103044 -154 546 .04579426112891459 -161 546 .03986363550030097 -164 546 -.11232330143142888 -191 546 1.960436277602576 -195 546 -.20544634608878076 -201 546 -2.1438778190914793 -206 546 -1.0575548154000514 -216 546 -1.0409966344043853 -217 546 -.6970506057109384 -226 546 .8708247199988807 -240 546 .476507676065384 -241 546 -.21004650470741149 -246 546 -.31058931427529746 -247 546 -1.3551768186125486 -253 546 -.5240180933925752 -254 546 -1.0860711825928977 -273 546 -1.6372209426492321 -281 546 -.8089540399324142 -332 546 -.24923127907315532 -346 546 .8917605907519983 -349 546 -.044436692117649335 -358 546 -1.3750267744024236 -372 546 .11355797386141393 -376 546 .8858151792692499 -379 546 1.0243470553979916 -407 546 .3254957297655492 -420 546 -.045084090135580984 -422 546 -1.744332432189439 -429 546 .5000029997852824 -445 546 .3699538934678546 -450 546 .4996839864162823 -452 546 -1.569814416928464 -453 546 -.22571269237777375 -461 546 -1.1835560253402102 -479 546 .9626653362219976 -480 546 -.4865145126993883 -484 546 -2.3344314746334125 -489 546 -.23375355543729914 -522 546 .7634984645006739 -527 546 .546247262984886 -534 546 -.962491125190152 -536 546 1.5477605249680946 -562 546 -.4822791610341998 -568 546 .12145809012491283 -569 546 -.25775996446307775 -578 546 .3649051493819933 -579 546 -.5963621545542327 -588 546 .4666967298057173 -594 546 -1.6751799458899506 -601 546 -.24734633199467887 -609 546 3.0281873032530995 -617 546 -.8883613462278488 -622 546 -.39192221718743564 -623 546 .10116469028138338 -626 546 2.2633171244774797 -627 546 -1.116230594560013 -659 546 .7505048736338136 -667 546 1.4047103600885293 -674 546 -.1434265653165646 -687 546 .3030583781876241 -691 546 .7297900278868702 -700 546 -1.705371568638878 -713 546 .505680899393595 -724 546 .4371019156026086 -728 546 -3.774691599521375 -739 546 -.1338600638835285 -744 546 1.5674823763714643 -775 546 -.05281675725831366 -783 546 .6470472742216548 -785 546 -1.711173745261898 -819 546 -.1720229722298935 -833 546 1.1101844847003735 -834 546 .200274141324274 -840 546 1.0609153322215201 -852 546 -.6904901156837376 -861 546 -.9328940280825264 -875 546 -.22224417647232675 -893 546 .6125298043227462 -904 546 .8841136661644803 -917 546 .5344158894487274 -922 546 .28950313897026964 -931 546 .553839922621261 -940 546 -.03169464995879802 -945 546 -2.0826738252583703 -946 546 .5004068656752324 -947 546 -.6971681072757415 -957 546 .21797900613718044 -958 546 .08949039024277665 -963 546 .9904427689505437 -966 546 -.4411004078802737 -976 546 .6089839993609044 -991 546 -.5268280155389544 -992 546 .40936334205210245 -4 547 -.06283766588126363 -6 547 .9075110490582258 -14 547 1.2513760798101534 -18 547 2.088600019095371 -39 547 -.20595360284441755 -64 547 1.0305066672891146 -74 547 1.5622176649114325 -76 547 .9410711688746101 -84 547 -2.169447336443687 -85 547 -.14199980193000233 -91 547 -.4993271678367731 -97 547 -2.5165328088423795 -103 547 -1.3250211063840924 -106 547 -1.537649639339905 -113 547 1.4042297901973233 -116 547 -2.7351888079583135 -127 547 1.8667083904412005 -131 547 -.671701066678335 -166 547 -.7867981640335232 -175 547 1.2562807118645964 -177 547 .17348131583808218 -181 547 .22634522631379103 -188 547 .42035157421870567 -204 547 .5870711376145928 -206 547 .8558865576785459 -209 547 -1.5327451608542946 -219 547 -.37973928949298785 -228 547 -.8310489656292117 -232 547 .28121473282320203 -258 547 -1.480827586893348 -262 547 -.6183612113252891 -266 547 -.6885308675616695 -277 547 .32639806005667316 -297 547 1.229444180527918 -309 547 -.5941149218167162 -316 547 -1.1153660480736554 -338 547 .6870779859888153 -353 547 -.9609099101526941 -363 547 .3353654047903109 -371 547 -.6270957107310963 -378 547 -1.6649279645902846 -385 547 -.5152565512162991 -409 547 -.5685448472216409 -413 547 2.4643720788319783 -418 547 .9605986858524932 -420 547 .4626416448646434 -438 547 .7026214393037116 -447 547 -1.5906024692142913 -464 547 .257593271499951 -480 547 -.11167564469017523 -489 547 -1.2329926437601304 -519 547 -1.6163471593000922 -531 547 .46203152132616826 -537 547 -.22194526490779254 -554 547 -.2094915005606059 -565 547 -.7771889313409777 -569 547 -.8079049232139911 -600 547 .09643492551734002 -627 547 -1.184319544311906 -639 547 1.8483550363861674 -640 547 -.9134029747326528 -656 547 -.05524907586411467 -690 547 .20252360058077043 -701 547 -1.167042760784974 -711 547 -.43680523149177786 -716 547 .03818593791276848 -721 547 -1.6119097366680362 -735 547 .8216594089983187 -738 547 -.8775767449355711 -746 547 -.32110044729843423 -751 547 .00036387618454258863 -758 547 .059089811393499905 -824 547 .3171536282897026 -846 547 -.0006977029339596272 -859 547 1.5897422852539598 -868 547 -1.9027278765752194 -873 547 -.13846756572682048 -877 547 1.199514718645293 -897 547 .5867092747349846 -913 547 .31450683059870677 -923 547 -1.7186387941838324 -934 547 .0749590642605383 -938 547 1.371808527794622 -945 547 -1.2768654038620368 -947 547 -.7793087333124491 -952 547 .9941534505777309 -993 547 .4389958272151002 -5 548 1.6863488123345052 -10 548 .30595388804518137 -31 548 1.2832036478169442 -38 548 1.720512948722339 -61 548 -.34636510227862843 -79 548 1.6252389996253613 -112 548 .7136378813205844 -122 548 -.6638210924915338 -124 548 .3390328808183082 -126 548 .0747347681502804 -134 548 .22843096321306336 -135 548 .4281649473313784 -136 548 -1.29776892742627 -141 548 -.2419198323513389 -158 548 2.2115195342923477 -176 548 -.43757282598952824 -179 548 .29315501724129317 -183 548 .40431127908199627 -207 548 .4086096892823302 -227 548 -1.092061436007558 -231 548 -.830663066804265 -238 548 .2571795963800003 -248 548 -1.9680747777983478 -261 548 1.528208291508774 -263 548 -.08284960297839039 -286 548 .16809320847654502 -294 548 -1.8560315884718055 -297 548 -.7389706918314337 -306 548 -.6404849475458088 -307 548 -.43713325103648726 -310 548 -.07131836400257402 -319 548 .9440134935185405 -329 548 1.332966291284306 -345 548 1.5371902002010862 -351 548 -.8219224819615415 -354 548 -.4929400971247748 -361 548 2.3356563047438916 -378 548 .8677702337084764 -381 548 1.1067820368339263 -402 548 .42666793945266734 -429 548 -1.2693525235723149 -452 548 .5624806837210587 -468 548 -.36615779673097676 -478 548 .1826687972464412 -486 548 -.4283671042133722 -525 548 .650369259003702 -535 548 -.023695848672625502 -549 548 .4470787964591415 -558 548 .29843655949065534 -561 548 2.257610092325693 -562 548 .6700984506779403 -566 548 1.7632572149678525 -575 548 4.776119607413626 -581 548 -2.1839936063105574 -589 548 1.0203902678421157 -615 548 1.3920549947135736 -616 548 1.4376103888925373 -618 548 1.8769487759418269 -622 548 -.1717829316137118 -643 548 1.0267135804558563 -646 548 -.8032971978237058 -649 548 -.3516576174741424 -657 548 -.1428216727420275 -664 548 -.8667653077104732 -692 548 1.4579762888699959 -702 548 -1.0759291394346628 -707 548 -1.4339215864560997 -710 548 .9150982378500324 -718 548 -2.687749349390917 -725 548 .17495034433593465 -755 548 -1.7675845682374607 -763 548 .09085631792439819 -766 548 .2739309061029214 -772 548 2.2060289049774036 -779 548 -1.5816500350508091 -793 548 .28248514332718816 -796 548 .2476626858510538 -799 548 .8430465151418829 -804 548 .909758920738596 -805 548 -.24484556335595956 -836 548 1.806491986561639 -856 548 -.8597036455314945 -911 548 -.43444643191915766 -912 548 2.635926841112647 -922 548 1.071785187360097 -928 548 .3282213885900114 -947 548 .13963407262166394 -956 548 -.44123693227949545 -957 548 -.142534630441061 -958 548 -1.1618800394814621 -963 548 -.2866418753251941 -973 548 -.665648988816977 -978 548 .4045166112082666 -984 548 .05165023838023135 -7 549 -.6152525858239714 -8 549 .918698696994531 -17 549 -.7629674065499669 -36 549 -.2439662555472557 -72 549 .045447554922201525 -106 549 -.9162074588355944 -118 549 -.9939384860512952 -121 549 .10442334928977628 -130 549 -1.2581468310023753 -151 549 -.8036061947798572 -154 549 .8291174506317175 -157 549 .4908063218408335 -165 549 .1534690045441916 -178 549 3.0271568518310965 -187 549 -2.2325164737251413 -189 549 -.5080161186950836 -201 549 .4384235276508354 -234 549 1.7707090102971206 -238 549 -1.3735275896829975 -246 549 -1.3337776120707245 -250 549 -.786944516578617 -265 549 .814180430737203 -284 549 -1.6412087928883552 -289 549 -.622886584331698 -308 549 .4511228223196626 -332 549 -.02217317165309622 -339 549 1.0173729393905768 -377 549 -.6441383000329293 -394 549 1.1628479230407418 -405 549 .708035572792814 -423 549 .7523753977059202 -438 549 -.37635359505639465 -440 549 -.13028843439810767 -442 549 -1.1091433249610716 -443 549 .33316412576551235 -450 549 -.20254848331516412 -451 549 -1.152889489913564 -454 549 .7909533832439094 -456 549 -.6841774979312137 -458 549 -1.6360824654875938 -463 549 -.19466844642283648 -469 549 .8651004819441899 -471 549 -1.0978482794306315 -472 549 .9719388532965783 -476 549 2.997772185686179 -488 549 .13514120164397242 -491 549 -1.0979795547835605 -492 549 1.2665853131179878 -505 549 -.3783522464463209 -530 549 .08059499127713643 -536 549 1.951967585799485 -540 549 -1.4492051591400807 -571 549 -.35400442970802926 -578 549 .10633240421581154 -581 549 -.886741003450522 -582 549 1.0096885381675678 -588 549 -.41716314502197704 -591 549 -.9617468489279338 -599 549 -1.4025490929624145 -612 549 1.13462863865193 -617 549 1.7089433621653798 -618 549 .6696570419854779 -623 549 .18694811497733071 -624 549 1.7308743561484532 -643 549 2.460742697906499 -651 549 -.8749835554138111 -654 549 -.6055661795196112 -660 549 1.0782851716282296 -667 549 .02641837470271427 -704 549 -1.6816218103178213 -714 549 .41485436761530425 -715 549 .6515598448981413 -718 549 -.9867600604082978 -724 549 .5265505847262846 -739 549 1.5311699903129037 -747 549 .35987767810693944 -781 549 -1.290748030084059 -790 549 -.7521410081417553 -804 549 .7427950561622365 -813 549 1.815035590281993 -814 549 2.0684157707985555 -830 549 -1.073659808249273 -839 549 .2994347595800555 -842 549 1.0608233287195765 -852 549 .6616056665820057 -863 549 -.3354992314597839 -880 549 -.03570897118526689 -893 549 .8191989171774223 -934 549 .7931664575891646 -937 549 -.8449037945659833 -944 549 1.0706272942174802 -945 549 .22552242383275123 -953 549 .8527010125600599 -955 549 -.4308588743920152 -958 549 .8844672284361771 -975 549 .171107785739594 -995 549 -1.0095477818173084 -999 549 1.9680158622741504 -3 550 -.7421501877161117 -12 550 1.0876461383929978 -28 550 .5817662335719301 -61 550 .39108787325710653 -87 550 -1.88457847478319 -110 550 -1.7864026153074657 -117 550 -.3006392228857132 -119 550 -1.36702210924719 -129 550 -1.3060184363860292 -135 550 .7634789741408012 -150 550 .3438786642028228 -161 550 -.17948363176166368 -173 550 -.9226137781745738 -174 550 -1.8996985366012593 -177 550 -1.8692860798453559 -190 550 1.084123411277633 -205 550 -.3096831118565977 -208 550 -.5618789968428343 -211 550 .32515258820095505 -236 550 .6009279509337095 -251 550 -.04213461052068032 -267 550 1.6843513064810787 -269 550 .11773182219017103 -275 550 .8419592268098668 -282 550 -.30421447977603755 -283 550 .06497798092789962 -298 550 -.5753277187059459 -310 550 .016343674846451106 -311 550 1.6185900839394158 -321 550 1.1847396981310887 -329 550 -2.1910143763797523 -335 550 -.02708209917105825 -342 550 .08376810031207071 -352 550 -2.645923346702884 -356 550 -1.2447805343721714 -361 550 -.7266038543659401 -393 550 -1.5265825929876213 -401 550 -2.122608994450006 -406 550 .5182178814944944 -408 550 -1.6675902007797199 -412 550 .18807726605885883 -425 550 .5144526417089269 -443 550 .12662638948733032 -448 550 .1465482240956723 -459 550 -.33774322166656645 -465 550 .8182514875234788 -466 550 -.7483858806266593 -471 550 .6411502388775961 -485 550 1.1979234436569262 -489 550 -.4757625101087943 -520 550 1.2402029212139265 -535 550 1.053245106442474 -548 550 -1.4123026284328892 -557 550 -1.110144310782464 -559 550 -1.5889019847172265 -581 550 -1.301835954043665 -583 550 -.6861755871096312 -601 550 -1.1290316293286584 -611 550 1.2891279649978087 -627 550 .030453037420832982 -631 550 -.3908405053456223 -684 550 .40873301397057515 -691 550 -1.1630152252555663 -695 550 .7810081976247799 -698 550 1.9267477110938256 -702 550 1.7178776631185098 -713 550 .6660212985941933 -726 550 -.7990114014886173 -729 550 -.1599078185612452 -734 550 .5130443253567767 -735 550 .28119660484805686 -746 550 .29301395332215374 -763 550 .01389186194608491 -774 550 -.25483310305275997 -814 550 .7696055398014169 -821 550 .5010727225602876 -827 550 -.33521207121530916 -839 550 .35444595057399264 -848 550 -2.686474407030051 -874 550 .8369007607326375 -889 550 -1.428167632583781 -917 550 .3371461255810587 -927 550 -.8666755860855067 -935 550 .8263359595844902 -936 550 .39560556340035025 -940 550 1.4920792903385747 -950 550 -1.4468653293506695 -970 550 .3537876658970194 -972 550 .5653782983813417 -973 550 -.7324375050269784 -980 550 .7280308485808468 -985 550 .11415804833591237 -992 550 -.8912581215987306 -995 550 -.049540614898141655 -12 551 1.7606697572568588 -13 551 1.057946597506926 -37 551 -.013737414440157024 -44 551 -1.261512310427531 -52 551 -.4051598207692281 -60 551 -.37254404184309065 -67 551 .6916354625571989 -77 551 -1.0759416675138307 -85 551 -1.456357510850158 -96 551 .4764580286497346 -97 551 1.8479961780329694 -113 551 -.13911227796591502 -118 551 .7353056278372717 -121 551 -.181462475423593 -122 551 .10755759194297435 -145 551 -.5281134071485443 -151 551 .30151379464272166 -165 551 -1.1468886855749 -183 551 -.410051280083704 -193 551 .6964723386979914 -201 551 -.8376170426894474 -212 551 -.5689716398572483 -217 551 .4306523735123383 -225 551 -1.3531530949575492 -237 551 -1.0552436027766585 -261 551 -.07567963476822379 -268 551 1.5759300112082437 -272 551 1.1216135266275558 -278 551 .49528921311807433 -280 551 -.5452048680877628 -293 551 .8016193489920701 -314 551 .19232070745896845 -316 551 .5526970751498769 -325 551 -.9186238911891687 -333 551 -.48117045717642587 -346 551 .29008739127183675 -351 551 .6674051905603992 -374 551 -.8782595808095721 -389 551 -.041650236431577586 -396 551 -.725180778911779 -410 551 .1855452332078399 -423 551 -1.329552659199695 -454 551 .5007388953745517 -456 551 -.7431380205324892 -482 551 -.09715534956050398 -488 551 .40766163025086094 -489 551 .6071128625318063 -496 551 -.5424220534672102 -497 551 -.5422279621218001 -498 551 -.5452004487056974 -516 551 .09205522928158642 -534 551 -.9362114489430502 -541 551 -1.5017400059905524 -557 551 -.10282334908590285 -560 551 .3392163368315529 -565 551 -.1898033139598616 -568 551 -.15738236131003894 -569 551 -.63107785164789 -578 551 .633277396457872 -581 551 .787456913416094 -598 551 -.01965231634114989 -601 551 -.9346838552162824 -616 551 -.2814421985795561 -621 551 -.8661920499506237 -641 551 -.290456083112658 -656 551 .5165810297030373 -665 551 1.2162135714326636 -667 551 .049249943625345065 -669 551 1.028453571559505 -670 551 -.7685126886193483 -676 551 1.4317207735109607 -682 551 -.04290866313314132 -689 551 .025624178713046675 -697 551 .8037471670023295 -698 551 .07122405453385679 -720 551 -.23844638009773647 -729 551 -.6887226718583965 -736 551 -.8687843955290288 -738 551 .3935810936951176 -747 551 -.89940399945909 -749 551 -.29569454667057765 -770 551 -1.9851530354308387 -778 551 .5840061771065792 -799 551 .2861757800464754 -803 551 1.3686483455650271 -805 551 .038982329926902176 -814 551 -.8945606778246457 -829 551 -.9814436773563098 -839 551 .20398832633417308 -840 551 -.28716030379056867 -845 551 -1.9228650294449008 -847 551 .5167758831875999 -857 551 -.9994166603555918 -887 551 .42915664525089436 -899 551 .9948029902449504 -912 551 -2.4296882812438074 -914 551 -1.1024064125465556 -925 551 -1.4943085126765323 -926 551 -.1655899050497735 -929 551 .23864102619588007 -933 551 1.3140144638144906 -934 551 .6299127584860804 -935 551 -.013544697036666387 -953 551 -1.081811223809607 -986 551 -.7838845664596538 -994 551 .08298662003837412 -995 551 1.1217886677015165 -7 552 -.46224883423087687 -31 552 -.8477768383897383 -36 552 .23267973817232815 -42 552 -.4879845983032472 -43 552 -1.226952684055744 -74 552 .2709679993757469 -77 552 .5637206986785531 -79 552 -1.4952208024809834 -93 552 -.35247910233403557 -103 552 -2.3360856245138844 -136 552 1.0723155385240914 -146 552 -.75823755328815 -148 552 1.4746870613186687 -165 552 -.34609068621897576 -186 552 -.149435504031756 -199 552 -.08302023966925759 -206 552 .9749955091001845 -210 552 .9595690941637295 -213 552 .05988440008967142 -235 552 -.2079911061470495 -237 552 -.2226261247508624 -261 552 .9415428451458889 -265 552 -1.6548611862882714 -269 552 -.6813914412007287 -284 552 .9123828048159456 -290 552 -.468064778359352 -294 552 .9614933936032887 -296 552 -.4183945311745956 -300 552 .39425324537862017 -306 552 -.6379078627947783 -330 552 .09920551090173207 -336 552 -1.3673658020373776 -341 552 -.4706329841735676 -343 552 -.21901653270157048 -346 552 .5547802181655165 -350 552 .529070035329499 -361 552 -.9610360264309549 -381 552 -.2884980340526714 -382 552 .4279441862133268 -391 552 -1.8761209586654406 -415 552 .31046328296483194 -426 552 .2926491601288366 -464 552 .9489584320743338 -477 552 1.7469519107600802 -487 552 -.2997583418124963 -491 552 -.046175313219552774 -506 552 -.4719427498502742 -518 552 -.5815219874440356 -521 552 .09505927716265522 -533 552 -.1094987430822065 -538 552 1.391482963250662 -541 552 -.06271515390918891 -542 552 .5714542682211238 -571 552 .10693906994064316 -578 552 -.2069081054881678 -583 552 -.0877742642147722 -597 552 .9035834310553482 -609 552 -1.4787234540694916 -619 552 -.10749964134047879 -629 552 -.8927303759857659 -635 552 -1.8545187582616987 -647 552 .47884983489191646 -670 552 -1.597827699559646 -680 552 -.8505954877520092 -681 552 -.7473457141154853 -683 552 .356866791989361 -702 552 1.1897877578124276 -708 552 -1.158239849934454 -713 552 -.1197476103636885 -725 552 .6893658273508013 -728 552 -.34449034260599043 -747 552 -.4475401406276629 -750 552 .3476753767049303 -752 552 -.42037875149590354 -754 552 .4716517881696514 -759 552 -.45691756721828997 -761 552 .2821798953584116 -770 552 -.2719318827384056 -781 552 -.2782700927391636 -791 552 -1.4629542603890355 -798 552 1.0649876212227363 -803 552 -.30637665369343586 -816 552 .5767709503371912 -831 552 .003251983823110094 -834 552 -.5666569561833301 -854 552 .718068698492769 -856 552 1.347003348956998 -869 552 -1.1757758778325393 -875 552 .28338119872318074 -922 552 -.49560647917767786 -935 552 .2114946457159947 -986 552 -1.6801241317329065 -999 552 -.4072044892742255 -39 553 -.5688774925439644 -49 553 1.5678125160441008 -57 553 .49761994016940253 -63 553 .32929919105181465 -78 553 -.3727961701756528 -96 553 .3196755168794198 -99 553 -.3739591813860381 -128 553 -.7551425592352036 -133 553 -.011425940550466814 -137 553 -1.5987308060733108 -162 553 -.7882284798052521 -166 553 1.803362944001954 -173 553 .7875017309469264 -174 553 -.5660320370600536 -179 553 .2900416971636929 -194 553 -.1974428635245255 -216 553 .39932729449832927 -221 553 -1.233705706998081 -233 553 .43360496308155316 -236 553 -.9190275108630783 -247 553 1.3150904122979752 -252 553 .12843775059405876 -254 553 .594261557302735 -256 553 .7556789693596766 -265 553 -.8904544658753483 -268 553 -1.25313237490177 -273 553 1.189325428039147 -274 553 -1.3588245853233718 -281 553 -.905595996963823 -287 553 .7686467595717545 -305 553 -.07126388174048806 -306 553 .36010225076516345 -307 553 -.3961233092011306 -327 553 .9964948260344041 -342 553 -.7924432365581535 -343 553 -.3356234604129859 -348 553 -.6654960510612586 -360 553 .5154553758736179 -370 553 -.11878752498705161 -373 553 1.7377165315388488 -374 553 -.01341931672207497 -384 553 -.49527810481508355 -385 553 -.8944106585272302 -397 553 .3439570202715485 -400 553 -.3875090916360988 -405 553 -.4229824641298206 -409 553 .6705816416285724 -410 553 -1.078063693953578 -425 553 .35681234375119597 -434 553 .6071594616789617 -462 553 .5741885081323359 -470 553 -.7845131212208418 -477 553 .022097050185610312 -482 553 -.5420120488066766 -498 553 .7867930597479159 -499 553 -.25340993350036023 -502 553 -.18908364955825663 -509 553 .4137989927433181 -525 553 .24770154829506164 -532 553 -.23126215544499892 -534 553 .7029006124758659 -544 553 -.49364188532105563 -552 553 .39935073743786836 -555 553 1.691167052951927 -572 553 .6040380061456934 -583 553 -.5828638056448039 -584 553 -.8745734968569088 -587 553 1.0016725768297106 -598 553 .6586133406065298 -606 553 -.6357026370905225 -622 553 .7427948759477501 -623 553 .6692919314828331 -630 553 -.14065001362039997 -640 553 .2686381226648794 -644 553 -.16461221907258572 -649 553 .6563193149873661 -654 553 -.3456242694592107 -665 553 .7325960989427645 -671 553 .2592833883675424 -692 553 .8997321593447515 -693 553 -.1411331670574402 -701 553 .9224656923662635 -720 553 .6046291127087218 -751 553 -.25848429190821104 -763 553 -1.5158125993626261 -775 553 -.06170285408839103 -781 553 -1.1643566013788764 -786 553 -.12401096472710993 -807 553 -.5961145958415763 -808 553 -.527793173071883 -812 553 -.09664706003948997 -837 553 1.4122359415251184 -839 553 .4622794336274739 -849 553 .1731271418594083 -861 553 1.3885880169547828 -866 553 -1.1970368527682524 -868 553 .4954506695411086 -872 553 -.054647912314288574 -879 553 -.30384015925209645 -888 553 -.033419083449232015 -906 553 -.6112793955752116 -927 553 -.84313846051294 -933 553 -.18051221933260925 -934 553 -.15699715478421838 -935 553 1.5084776977272585 -936 553 -1.235475234514817 -941 553 -2.512216778923172 -946 553 -.09648517460930112 -953 553 .8399509296404455 -955 553 -.3096820141678019 -956 553 .372628586273301 -974 553 .5944090879876133 -982 553 -.712082272143441 -990 553 -.6677163287176394 -993 553 -.11615489352486584 -994 553 .022533140745522585 -14 554 -.34645226341777047 -34 554 -1.0706381872484616 -36 554 -.3751188773252557 -37 554 -.41398116979781885 -42 554 -.4694141902742389 -74 554 -.9387272789149849 -84 554 1.6351913078494311 -87 554 -.14377408988460172 -99 554 -.7052855369300135 -102 554 -1.2582530834010406 -109 554 .19892048326935577 -117 554 .7091934433471783 -131 554 -.4539515791533738 -139 554 .23531801712536568 -146 554 -.3038946790771101 -154 554 .30207832770797005 -159 554 -.29999824485048016 -162 554 2.356916673264196 -175 554 -.7233402856270045 -176 554 -.18236765332226218 -198 554 1.146313992164737 -203 554 .9679930109908104 -246 554 .749412015873619 -248 554 .05504098854364588 -253 554 .26266889349411854 -256 554 .07872417453227454 -261 554 -.4515375671084178 -272 554 1.1265926932978918 -275 554 -1.2761451161227872 -288 554 .40918258753531533 -295 554 .07465719614705105 -296 554 -.6259082125641443 -300 554 .04661975748599528 -301 554 -.17094750963460803 -319 554 .8399006305062054 -323 554 .11334908818229612 -341 554 .08842421996641649 -366 554 -.5768276270515191 -397 554 -.741282484718849 -400 554 -.626114701765961 -404 554 .6133081493266792 -408 554 .7906862543766843 -417 554 .1546516612831067 -436 554 .6187565480580303 -441 554 1.0074249895144212 -444 554 -.08640560331751482 -458 554 .7675072162904815 -484 554 -.9660258578407416 -500 554 .06760518313749832 -502 554 -.8525010973344326 -515 554 .6911057677678584 -541 554 -1.5326641619878205 -569 554 -.14766327764174536 -599 554 -.5819028656878107 -604 554 -.14543629773228545 -605 554 .5608645289210741 -637 554 -1.1233397733015815 -644 554 -2.2327930355374277 -645 554 .3684170850908519 -665 554 -1.7118388535454765 -675 554 -.31702918977016126 -683 554 .43871787018869224 -721 554 1.3134189053000285 -724 554 .5581337686693792 -727 554 -.31982425091924216 -744 554 .12982590457965315 -751 554 -.2935360407622365 -752 554 .004393681516618928 -769 554 -1.1311081803926202 -790 554 .8015750083015416 -804 554 -1.0190340015326094 -810 554 -.04465872102316347 -837 554 1.693155074878188 -878 554 -.443200466526565 -881 554 -.38544740127691296 -899 554 -1.4059796472523807 -903 554 .5041815885794337 -923 554 .8588261987819068 -930 554 -.1810752867323695 -943 554 -.29963173055503034 -944 554 .32210277925997877 -959 554 .6528382589284534 -960 554 1.2446876544582595 -969 554 -.7154193370660553 -974 554 1.1282090633158113 -976 554 .5164153758671536 -982 554 .5036111086232486 -984 554 -.542556550992064 -999 554 -1.0638958499941609 -40 555 -.32546200245507984 -43 555 .16458363843652218 -60 555 -.18736022412353 -91 555 1.1135311702708666 -110 555 -2.649803871993257 -123 555 .18401674608288976 -131 555 .7069680532124086 -138 555 1.4107864847902396 -161 555 -1.0413200771673354 -174 555 .8609788269232151 -204 555 .9425643103495702 -211 555 -1.064566071267055 -224 555 -.9340966377661316 -231 555 .6461496344261936 -233 555 -1.888340849267309 -248 555 -1.1102147277446075 -261 555 -1.1935767071221695 -266 555 -1.3799238438006918 -267 555 1.2436402137781828 -274 555 .6183750669069245 -302 555 -.6834141631431205 -318 555 -.5199482539848052 -323 555 1.2142545127663376 -326 555 -1.9817068763283021 -344 555 1.3042525900440787 -347 555 -.47016989459563324 -352 555 -.9272118571721757 -357 555 .2982198100470673 -364 555 -.18451410508577057 -396 555 .15557192206675685 -401 555 .6439320665350575 -405 555 -.12750155176378747 -413 555 1.1089000838737724 -415 555 .4152140678417904 -416 555 -.10088560808344833 -436 555 .6345210308509212 -438 555 .343810375680479 -456 555 1.0631236958237062 -465 555 -.8153313679289027 -472 555 .14327328457588626 -479 555 .3343469361719828 -484 555 1.8820766314573993 -507 555 .21092071883091756 -521 555 -1.0452921978130643 -523 555 -1.4696607053341877 -524 555 .06834745043342472 -528 555 1.5259938529803383 -536 555 .07448090630184978 -537 555 .8783197711792866 -542 555 -.02323573605770274 -543 555 -.7100227499517213 -548 555 .08724159997251918 -550 555 .5766503551232118 -568 555 1.7625826614156481 -581 555 -.40019327082610806 -587 555 -1.3823090366018618 -595 555 .5255911950931691 -598 555 -.6242130433518427 -603 555 .8610195725394029 -620 555 .9047912418801876 -641 555 -.26307645321752215 -642 555 -.691563692802729 -645 555 .10015236977351252 -669 555 -1.1282363457461841 -679 555 .18474503909766943 -688 555 .6484644772742093 -692 555 .3008272172919039 -694 555 -1.460014894047202 -702 555 -.7072809168167392 -716 555 1.0518923328520184 -717 555 -.3918808826654111 -721 555 .7256450529238809 -727 555 -.8706074548727388 -728 555 -.2759606201175043 -734 555 2.0128800849892285 -745 555 .2907361427307116 -750 555 -.7171630915962791 -754 555 -.20298119824953853 -759 555 .7393362905973621 -763 555 .6406672976499789 -771 555 -.9421185167946188 -772 555 -1.2376502154053195 -773 555 -1.224937370361451 -780 555 -.32285067039856513 -786 555 -1.7005043917321558 -790 555 -1.2011348881760797 -816 555 .14600742682841855 -824 555 -.8038679703090867 -827 555 .2724179736501376 -859 555 1.2775479027977672 -867 555 .6164820842662178 -870 555 1.5410015166504138 -876 555 .20988033407032383 -881 555 .8955799071945292 -924 555 .9716116564166081 -939 555 .6306696503481835 -959 555 .7801498050499629 -969 555 -.9025725138236611 -986 555 1.500768975615821 -998 555 2.631070006159586 -32 556 -.04761036098037774 -35 556 .5639940097709111 -38 556 -.8053010101893727 -45 556 .9538247706531247 -84 556 .49833594589470875 -103 556 2.8310751731690025 -105 556 .06380194033529457 -114 556 .4849784766996479 -128 556 .4690318402750112 -138 556 .5665168785904213 -142 556 -1.047206717820986 -149 556 .19338502359679932 -159 556 -.5597443268666985 -174 556 -1.5749214132609228 -188 556 -.10079891023059233 -197 556 1.1558567261709178 -208 556 -.4915892840196909 -219 556 .7828003306781605 -230 556 -.8493767668702128 -244 556 -.16984313636678086 -247 556 -.1220163666661721 -248 556 -.31525825480273106 -272 556 1.1197400725164288 -275 556 .7783486957526197 -290 556 .26782865353857543 -310 556 -.1281910014317923 -321 556 -.9499739905182312 -324 556 -1.0697203321959587 -354 556 -.2480826865871879 -355 556 -.34437596827326544 -362 556 -.16042298681901226 -367 556 -.01813293447973066 -370 556 1.2015033828036399 -373 556 .9132133355392877 -389 556 -.15506653455487973 -407 556 -1.7418672457943694 -422 556 -.46158363057379836 -436 556 .9165197968751362 -472 556 .3296251595560834 -481 556 1.0364778222693458 -489 556 .13028077233330726 -514 556 .6941929422658698 -541 556 -.7765099637759862 -563 556 -.37731246068659235 -567 556 .7610160093413457 -575 556 .7342420253438172 -586 556 -.9027495514848654 -589 556 .8085767005516769 -599 556 -2.854402241574838 -608 556 -.910028991675697 -626 556 -.5883252192617361 -661 556 1.9320045004382398 -664 556 -.9270874543509038 -667 556 -1.2987123308738793 -679 556 2.211376612799896 -680 556 -1.1655962459492433 -692 556 .4797302851178198 -693 556 -.5402445221667507 -724 556 .2685711483793133 -771 556 .6702189967238532 -809 556 .6910012232971985 -816 556 -1.9760188359862036 -829 556 -.8507329521157686 -830 556 1.0147248627551484 -837 556 1.2115526763942495 -853 556 .5006409798926224 -867 556 -.8290304286800698 -885 556 1.4692598736323408 -888 556 1.2168253224837144 -895 556 -.1566359018561983 -912 556 -.46964612843097825 -923 556 .742344071373089 -925 556 -1.5197378517429938 -929 556 -1.3254297333783103 -930 556 -1.573612835600051 -950 556 -.772169048665735 -951 556 -2.1741528310822718 -952 556 -.5986036681903314 -958 556 .5980307639999393 -959 556 2.134349702486454 -964 556 .8499779238034829 -965 556 -1.689878009515873 -973 556 -.6275803508672548 -984 556 -1.1939079650191684 -999 556 1.7810252874968762 -4 557 .14795650648038572 -11 557 .2312785974958584 -14 557 1.9837787731618286 -16 557 -.46980860140605835 -18 557 2.624673579161334 -21 557 .8160795860344775 -24 557 -.6243952889397859 -36 557 -.5413003502494116 -40 557 1.637772261258866 -49 557 .1774129941593482 -55 557 -.20299283235339563 -67 557 .7415098441154622 -86 557 .677849557245981 -102 557 1.128186029171434 -108 557 .8876365474938132 -109 557 -.03694654532283824 -131 557 -.20998887778963168 -134 557 .015989806152170785 -163 557 .30323254840385694 -168 557 .5208764315804291 -174 557 .6388845362519774 -190 557 -1.1817138671535943 -193 557 -.7220661418959662 -199 557 -.31656653438571103 -220 557 .8862535529567475 -221 557 1.445124813888068 -222 557 -1.3048612607545416 -223 557 -.4479965408101915 -267 557 .5460166664141355 -273 557 .7717171718860588 -284 557 -.03191784398913153 -312 557 1.9587195677816358 -326 557 -.48242160870644807 -334 557 -.3897252058618056 -353 557 -.7147231483617201 -368 557 -2.0784458458549606 -375 557 -.3948146246814549 -390 557 -1.211355942187631 -394 557 1.0622888716322274 -398 557 -.23115081351308472 -418 557 -.0355147886217408 -428 557 .09229681039976569 -444 557 -.2632515418886795 -458 557 -1.6613368676118463 -461 557 -.527880469307714 -492 557 1.5692251916399036 -508 557 .634710228417043 -523 557 -.740172424936797 -554 557 .4057849917892722 -556 557 -.16681402938650342 -567 557 -.2234351168779527 -570 557 -.859128988936711 -587 557 -.7526822716070602 -589 557 -.3867475027778383 -624 557 1.8881865709786356 -626 557 -.6512661368974678 -635 557 1.3980094770467673 -643 557 .15397177169154103 -645 557 .03885931777061982 -651 557 -1.2504373212456987 -658 557 -.9384520377710183 -670 557 -1.7198199572774293 -684 557 .45881848288751453 -698 557 -.45787563595365466 -711 557 -.6555329399263488 -718 557 -.6216304116237615 -720 557 .5145843955480608 -727 557 .17633850364987017 -745 557 -1.6665056006707435 -750 557 .7533168533480654 -765 557 1.2057892869313984 -773 557 .4059829288038532 -775 557 -.1443915627408261 -780 557 .5946320564730243 -786 557 -.8596856164385192 -787 557 .6488628026320202 -798 557 .7084312706886289 -801 557 .564299483639536 -807 557 -1.06041148087678 -812 557 1.5284130953335051 -821 557 -.016729295033754754 -841 557 -.8502912826718555 -849 557 -.15612004326381312 -856 557 -.22914931156475682 -863 557 .5738450176883447 -866 557 -1.5817199948847518 -876 557 -1.7220123686855788 -880 557 -.8813448188753347 -887 557 1.1957651769007758 -901 557 -.8037516455319103 -902 557 1.0527248152922288 -903 557 .0642912064684418 -904 557 .18118331796380815 -932 557 -.0654264862004523 -933 557 .7016799501027527 -954 557 .8491094863097288 -955 557 1.012053843696751 -976 557 .604613282580943 -996 557 -.9495136706503479 -1000 557 .00973648322762727 -4 558 -.01564293253582305 -11 558 -1.0234454895790799 -19 558 .16015056696521512 -22 558 -.6889610386947194 -73 558 -.6130646653319585 -76 558 .5560748919029164 -107 558 .33159482955148173 -110 558 -.522868578195721 -111 558 .8800172178522732 -127 558 2.1749139472557566 -132 558 1.324886967660429 -133 558 .9610901611231436 -137 558 .3430025129841083 -140 558 .33286348980069536 -161 558 .009138560538046916 -164 558 -.9256216200484788 -174 558 .25215577769967645 -182 558 -.7635931776031639 -188 558 -.009064222542971997 -190 558 1.6415839160891486 -191 558 -.4537116303122809 -224 558 -.3836371339822816 -228 558 .9292845332423121 -238 558 -.6588217146163489 -244 558 -1.3814749306622642 -247 558 -.39551793527860507 -250 558 .16471289820150795 -267 558 -.044757025541222184 -293 558 .5834622977371385 -315 558 -.8981663518710271 -319 558 .3678924405531175 -329 558 .3253674837400483 -336 558 -.6908215769830107 -342 558 -1.0054699949733896 -345 558 -.40701749758495176 -352 558 -.6603605973849936 -369 558 -.8310591934233021 -372 558 1.59297341610131 -381 558 -.7405488637635907 -391 558 -.9295286750725025 -411 558 -.06182079348384352 -415 558 -1.3479925235117352 -418 558 .5165954758933835 -428 558 -1.004567322931538 -433 558 -.9998788390247164 -437 558 1.1034244806967632 -443 558 -.2528978027934353 -450 558 -.07474161848792386 -453 558 -1.5929033922870972 -470 558 .9539221205825588 -475 558 -.24167285727172041 -481 558 -1.1145192203500582 -502 558 1.540628148632291 -542 558 -1.3059200913325064 -571 558 .6873021301138622 -572 558 -.4120556159857305 -582 558 1.3193130999855134 -589 558 -.7696783636792324 -603 558 -1.6030298443791917 -647 558 .47448487009490714 -652 558 -1.2919075399484756 -671 558 .3379231507419662 -674 558 -.023383880524972325 -676 558 .7471236644962728 -698 558 1.7155512399931803 -701 558 -1.099478475207571 -705 558 -.18394043610547844 -716 558 -1.0176143792771297 -746 558 .011170409167705578 -752 558 1.8282071543284446 -757 558 -.882331259102411 -827 558 -1.0144562992675827 -834 558 .24842754909069314 -853 558 -.8410648421621816 -856 558 -.2843996489318973 -858 558 -.5737605095174372 -860 558 .2849589668122402 -866 558 .9539290513752111 -867 558 -.8995359145723717 -868 558 -1.0625696886276748 -872 558 -.9579485158448335 -898 558 -.3853740387623682 -900 558 -1.5859154473816233 -916 558 -.19816673010174812 -924 558 2.691674945435809 -928 558 -1.0744602269464865 -961 558 -.15082296967241746 -962 558 -2.56909918825509 -968 558 2.321108243248533 -973 558 -2.392559743860056 -989 558 .5236229225841307 -990 558 .5761354512058418 -994 558 .778592259512502 -998 558 .616596596096344 -2 559 -2.0854842066691797 -22 559 -.22768688252323088 -24 559 -.5517419949703363 -44 559 -.7414298816938085 -48 559 2.3471145875586963 -52 559 .7857017402508829 -61 559 1.6209277799697042 -63 559 1.156618905969381 -68 559 .8064494268000202 -106 559 -.2511580368867306 -112 559 -.4919189127733615 -121 559 1.7203510479042219 -124 559 -.748816611772182 -128 559 -3.282999075993351 -137 559 -1.6410584568150353 -143 559 .8855382686546871 -146 559 .8593664970964984 -156 559 1.4134592739522358 -159 559 -1.2112358882823113 -165 559 .039477595890885106 -167 559 .5641035782565453 -187 559 -1.0046061806506883 -201 559 -1.8294118038198062 -212 559 -1.958942072024289 -235 559 -.295637033216858 -236 559 .4154007147118261 -258 559 .013789890889957232 -260 559 1.1329207592254644 -273 559 -.7188648552261028 -278 559 .12059338538204425 -281 559 1.048363361312153 -302 559 .46122555655428443 -309 559 .45982590921641237 -316 559 1.9451129368923534 -336 559 3.3170490727702484 -346 559 .8066603619105117 -367 559 -1.508999446519681 -369 559 -1.104594006740516 -371 559 -1.9832899012708176 -382 559 .1374976115607568 -404 559 -.9119083958101504 -409 559 -1.0379313444308118 -418 559 1.8752100451380989 -419 559 2.99177079245968 -421 559 -.8185062370285962 -441 559 .5981659506810042 -451 559 -1.3226942625428586 -453 559 .07868289330090261 -474 559 -.6740731375013228 -502 559 .17301136919771276 -523 559 -.11953111021563034 -537 559 .3276322014220515 -553 559 -1.1671419375771883 -563 559 -.10732442225404443 -572 559 -1.0545996870582743 -582 559 .24510520639537126 -584 559 -.3874522287128711 -599 559 -2.6329774160742736 -612 559 -1.8203774994492539 -617 559 -.7304448966517033 -619 559 .11860142006661553 -622 559 -.031086561814970867 -624 559 1.110690419977334 -644 559 -1.4925048266937828 -655 559 .9784726575960289 -656 559 1.3358272247043517 -664 559 2.7726703900131047 -705 559 -1.3957418876545402 -714 559 1.1269891046011549 -716 559 1.936903350503976 -721 559 1.1240032085633134 -722 559 1.261572898287411 -731 559 .876053372300847 -754 559 -2.1682557797978683 -771 559 .2911285934494369 -775 559 -.5361401098385593 -778 559 .876469228278157 -780 559 1.7664360302915292 -783 559 .43422484452244453 -787 559 -1.0950275500181361 -790 559 -.1107404167694558 -802 559 -2.175524472305158 -810 559 2.5571161592982277 -823 559 -.5366353323883302 -830 559 -.8919724690220222 -844 559 -1.148519835281836 -861 559 -2.0413644622198057 -865 559 -1.6503335527373681 -883 559 -.17888147194756482 -891 559 .00724778974268675 -905 559 1.4643333545429198 -919 559 .1683954104645361 -937 559 -1.2525853604895743 -945 559 -2.6059568091623038 -948 559 -.03726967541504789 -951 559 1.1328012743046778 -952 559 1.4645501342253917 -957 559 -.3214971823500033 -958 559 -.18940210303532937 -962 559 -.45158134439435316 -969 559 .34179503376679604 -979 559 -.3338690408413257 -999 559 .5357974557614872 -4 560 .842424487810073 -20 560 -.5709925704715473 -36 560 -.8769498216546068 -44 560 .28009433269264644 -45 560 -.934926480505082 -56 560 -.4488623532782018 -62 560 .330796047256413 -77 560 -.16507836545933657 -81 560 .04884467300431874 -90 560 .7622803626206115 -92 560 -.3702799688435175 -116 560 1.0444055116636417 -134 560 -.6376033297196478 -140 560 -1.5259026725065654 -141 560 .00921881633451331 -147 560 .8511419436830663 -155 560 .7192000911130537 -168 560 1.0594507806360374 -186 560 -1.3105568180171474 -197 560 .03418902660931968 -200 560 -.6555336824288895 -208 560 -.5762416670432278 -215 560 .6768874126799819 -232 560 1.1901232604666987 -236 560 .1523453478113943 -240 560 -1.2121385674639429 -245 560 -.9723709024710729 -255 560 -.6907661792309787 -262 560 .15746173877523145 -294 560 .2843880953736977 -305 560 .5052500586207397 -317 560 .11941734956910047 -320 560 -.623591764971596 -321 560 .04231827722850545 -344 560 .8868347966677805 -350 560 -.5762966213347922 -378 560 .42463126309560406 -394 560 .10911939454086278 -396 560 -.5602287640348673 -401 560 -.6055281234636274 -415 560 .20129658339026105 -435 560 .2888315219242933 -441 560 -2.2526227568345334 -442 560 -.40965993423790686 -450 560 1.450193117626645 -457 560 1.127247900595532 -484 560 .7961960754572782 -499 560 -1.0877337744344968 -518 560 .8368081988405422 -531 560 -1.563770933122803 -533 560 -.07919656998473046 -538 560 -.9217158123299327 -555 560 -.6045606136133164 -567 560 -.18831342385033514 -570 560 -.0005525050378257096 -580 560 -.22994542422279704 -585 560 -1.924061189715645 -590 560 -.604169459803862 -595 560 -.23238442872279721 -609 560 1.3991420809165342 -611 560 .5603979357473207 -623 560 .4784540707957482 -625 560 -.08762524650987191 -633 560 -.04771347055267997 -635 560 .7633852886913803 -643 560 -.7699474674041752 -662 560 -.5361819660198824 -665 560 -.24671813368007506 -667 560 -.5921409453565242 -668 560 -1.1544661154202647 -679 560 -.588143328218084 -681 560 -.04940673598242987 -704 560 -.27024428008785445 -718 560 .2858273050527367 -734 560 1.6333459800788774 -735 560 .7785248251393734 -765 560 -2.2053585980698296 -771 560 -.9197373375730618 -822 560 .5514375134175544 -824 560 .3425780446470545 -828 560 -1.1247336212257428 -829 560 -.22926727405723982 -840 560 .9352290524506716 -844 560 -.8658260405557994 -845 560 -.5392672319546935 -850 560 .3954533489873495 -859 560 .47337004111956055 -860 560 -1.258502076150657 -863 560 1.782148607660658 -864 560 -.816007020023761 -891 560 .2509122274306701 -923 560 .15167850647129502 -948 560 .3430489796532472 -960 560 .5834023848300323 -982 560 -.1610110511354068 -988 560 .026813610286947565 -992 560 -.6999725305357852 -994 560 -.2171238223329251 -995 560 -.7553243190746053 -2 561 -1.03940287124209 -22 561 -.4449886437654676 -33 561 -.9900511393001239 -83 561 -.9925828812776651 -91 561 -.7518971882305723 -92 561 -.14138495805423915 -109 561 1.289955362614904 -113 561 -.9071058201088043 -119 561 -.22435444678301186 -123 561 -.7883968172173085 -127 561 1.347855996058691 -129 561 -.3614774048324722 -138 561 -.30271306298825496 -146 561 .37554334407664225 -164 561 -.15973960279876245 -185 561 -.0917470343849708 -186 561 -1.2472558944519876 -205 561 -.46966834614855396 -206 561 -.4206873516184908 -217 561 .2759592351477078 -220 561 -1.4869733444268771 -224 561 .6108740388153606 -225 561 .20521161893680517 -234 561 1.254449689334605 -236 561 .24007304067575963 -241 561 1.3208219197563158 -271 561 1.8881987029357068 -273 561 -1.4101158577823416 -274 561 1.1920290882597295 -275 561 .049293447003009534 -278 561 -.810386227752586 -279 561 -1.273360445745281 -302 561 -.2540937592816499 -310 561 .15005190216122943 -311 561 1.414262805460893 -312 561 -.9229838630944056 -313 561 -.3399987036392151 -334 561 -.03799815002895038 -351 561 -.6096397391148886 -353 561 -.8635949148948097 -371 561 .03879779060681931 -372 561 .4648114137306507 -389 561 -.10263890491920348 -396 561 -.04835043066942863 -403 561 -.6673192321276442 -419 561 .3198307876044133 -432 561 .04667840209240423 -445 561 -.3404378119182094 -447 561 -.4178944772044803 -461 561 1.4906105851996434 -501 561 -2.9380278962939723 -516 561 -.34605581055611545 -526 561 .3223848031784847 -545 561 -.8978867641914174 -558 561 -.3742772659369029 -593 561 -.05116628805530004 -605 561 .9795491178434381 -637 561 1.1061965637219888 -651 561 -.19327249258514045 -652 561 -.27609917142771173 -655 561 .7785614987329927 -666 561 .15672366651307382 -668 561 -.6273189544428313 -675 561 -.09112313584687773 -677 561 -.5351840781732324 -692 561 .8738287900458325 -695 561 1.138646381198772 -696 561 1.0244284068363556 -698 561 1.4552853580421163 -707 561 .003929165387390665 -711 561 -.8347017204582309 -714 561 -.9138540618967007 -723 561 -.16374974608480922 -731 561 -.17260797661243768 -736 561 -.7150755682039388 -761 561 -.3789554317551734 -773 561 .030556164223630427 -774 561 .3330228631340725 -777 561 -1.005146956516094 -778 561 1.1064861417998892 -779 561 -1.1796526866035753 -809 561 -1.3687889165595015 -812 561 -.3417085701117919 -820 561 -.49382717635017487 -824 561 1.1074147040622337 -846 561 .27432895125630635 -847 561 -.6328161420470046 -849 561 .7039620117902314 -851 561 .22181055605833652 -864 561 -1.0481497057219384 -870 561 .900122923847503 -873 561 .12685069959936962 -878 561 -.9353128880643917 -887 561 -.05368169836438423 -895 561 -1.2084128400648393 -902 561 .21640972003861 -925 561 .31604394370830874 -940 561 .8227309129449828 -941 561 .3678846833326155 -944 561 -.32431277149169985 -949 561 1.5090424363604038 -955 561 -.38605803547564366 -967 561 .8998727147626382 -971 561 -1.3733642843741798 -5 562 -.4377867292608699 -25 562 1.7604825125872514 -37 562 -1.5886022311785462 -39 562 -.18818304271003786 -53 562 .038652230953271124 -54 562 -.6511262502536576 -59 562 -1.2141524301410467 -69 562 -.16980368772999693 -127 562 -.002766150585770205 -143 562 -.047156212175543145 -169 562 1.1582273055566192 -187 562 1.906056401189293 -200 562 .7854715050659717 -205 562 1.2983947873241546 -206 562 -.6605668043693915 -216 562 -1.5758096174725953 -228 562 -.6211596374285118 -235 562 -1.0443131622324775 -236 562 .12473088382714076 -272 562 1.739257131244678 -281 562 1.8856321255901303 -300 562 -.02583055087302935 -304 562 .6785345033995182 -309 562 .5915560567750217 -312 562 2.1768531276360186 -326 562 .41141047266824254 -334 562 -1.4466680543710833 -343 562 -1.3225906416049662 -351 562 -.8296218005302746 -358 562 -1.153397681936456 -361 562 1.4056321184834917 -372 562 .34717236261337375 -419 562 2.721213568692353 -421 562 -.03052265048886771 -439 562 -1.6277411773838792 -446 562 .6999336090399773 -472 562 -1.065928888154843 -496 562 .41046711600415475 -504 562 2.5502011546203587 -509 562 -.9616414355431256 -513 562 -.4731573042403662 -520 562 1.0252110567402073 -533 562 .4199854268404375 -537 562 .802692156535174 -547 562 1.4360270995307407 -555 562 .4824036785024634 -610 562 -3.0434071033364543 -614 562 .8247160764575074 -615 562 -1.5085888847658704 -619 562 -.22108979839210258 -623 562 .19377608882524539 -632 562 .08367388713457267 -634 562 1.5396510780732129 -639 562 -.3900741114854334 -663 562 1.0066760825230125 -671 562 -.8339658610690078 -674 562 -2.7426912962037426 -680 562 .33505095132073126 -691 562 1.0224994925369706 -694 562 -1.0784739948325093 -697 562 -.47378832360185075 -702 562 .15876781473123552 -703 562 -.19793498730703873 -709 562 .7270771028148282 -712 562 -2.1177113546536375 -715 562 2.1200549586185087 -730 562 -.972012061969414 -731 562 .6929282244338046 -773 562 1.386324565307217 -774 562 .5205977029481453 -775 562 -.46711711144963347 -778 562 -2.5261279152525042 -802 562 -1.2850131946005543 -804 562 .5796825994855075 -812 562 1.4756800571575126 -829 562 -.5471562757247568 -831 562 -2.4058992448194636 -832 562 .17817708916462444 -851 562 -.010386031125925158 -860 562 -.49200171187837305 -884 562 -.7356570551147877 -902 562 .9997554448784822 -922 562 .12650754421588262 -960 562 -1.9878807294081229 -964 562 1.201038871411376 -965 562 -.3884010062825058 -973 562 1.7017838192471384 -23 563 -.29315194630226177 -33 563 .5626551096505262 -34 563 .34952374508325784 -39 563 -1.0064136243624737 -43 563 -.5440200784313401 -68 563 .352523340230239 -76 563 -1.0889604131069364 -100 563 -.28723385074503494 -103 563 -1.7194128249378506 -106 563 -.8347736177108682 -110 563 2.334765157080896 -134 563 .6335594819482486 -158 563 -1.6805548040720573 -159 563 -.733873241399365 -160 563 -1.1027742104051106 -162 563 -.8322246165760494 -165 563 .30088817747571717 -192 563 -.9814588786228676 -196 563 -.5771957350814323 -219 563 1.2832610551064152 -241 563 -.3652329968956078 -248 563 1.80586199562498 -283 563 .09269871068076085 -288 563 .6430004623765743 -308 563 -.3769724909989105 -309 563 -.27047340930159436 -317 563 -.3674141406801517 -320 563 .3225498907594157 -326 563 .6954864830314467 -328 563 1.3890898533792706 -329 563 -.4654523713563118 -340 563 -1.1415614919658217 -349 563 .33866100571667 -355 563 2.694246166154111 -357 563 1.3774029492320505 -364 563 .21406481937234123 -373 563 -.5615537043309242 -388 563 .06632976522936261 -391 563 -.914980312745541 -408 563 .3823639039471869 -432 563 .5259874675518125 -433 563 -.8533070723135827 -434 563 1.0238507628620324 -449 563 -1.87065089733564 -451 563 -.6619101009697226 -459 563 -.39399228214690574 -473 563 2.371470499708863 -481 563 .3857986705331041 -483 563 1.0949365518676544 -492 563 .7719321007203387 -496 563 -1.1330891424002363 -499 563 1.9143004677057958 -510 563 -1.1985161007350704 -512 563 .11712840374015686 -522 563 .6546605360016492 -527 563 -.5409596332124946 -530 563 -.09802573676941671 -543 563 1.7088773728666082 -546 563 -.08106185401158691 -550 563 -.6757744039604532 -558 563 .4727720064075379 -568 563 .46049139384365584 -578 563 -.024783068437872 -581 563 1.3285386131607433 -590 563 -.005184428613625128 -593 563 -1.0472357630036098 -603 563 1.9162055531776783 -609 563 -1.331765901902381 -614 563 -.5682646350412106 -617 563 -1.4786797467737585 -637 563 .7421399843545711 -645 563 -.3000798378018782 -648 563 -1.6693463834672977 -670 563 -1.6642407335903053 -673 563 -.04178792097570659 -694 563 .24790628318408153 -696 563 2.19398769829731 -720 563 .36919841819824345 -723 563 -2.3894834283468533 -762 563 -.3100044356041113 -769 563 .9283285860394421 -817 563 -1.0052904627228485 -821 563 -.8724210375348052 -827 563 .686127034505625 -856 563 .9134642733548746 -873 563 -2.326249605779668 -892 563 .6422767726212396 -895 563 .7566772556336009 -905 563 .8908621043637048 -918 563 .04687786528187801 -934 563 -.5912877700528221 -944 563 -.4862431276783278 -954 563 -.6000665360279158 -980 563 -1.777436087343443 -986 563 .6597686270918987 -998 563 -2.323929523981582 -14 564 .3989054765288641 -21 564 -.24486973381935773 -31 564 .8316817675870701 -41 564 -2.1985284513478396 -44 564 -1.2220493433469901 -87 564 -1.3469199524642261 -88 564 1.0670000479546977 -92 564 .2451437877961538 -94 564 -.3584472364591959 -104 564 -.5526107226085937 -106 564 .36810109990131773 -110 564 -2.1111773870483845 -125 564 1.2550276119833081 -133 564 -.22424357171414944 -138 564 2.7530027271829898 -155 564 .49948946964073127 -163 564 .4367772413862946 -170 564 .6550173324615293 -176 564 .5568018449969732 -188 564 1.7423160358813625 -196 564 .6175077521284068 -198 564 -.41107842427954583 -211 564 -.21106041602919454 -215 564 -.04445350379519142 -223 564 .6013945342474106 -228 564 -.5019934061512423 -229 564 -.2995477614902544 -231 564 -.6331463432466264 -236 564 .13354043882663438 -247 564 -.05952367215233355 -256 564 -1.3246950206759116 -265 564 1.0784610854934091 -275 564 -.40747768299149173 -280 564 .13083236568346557 -288 564 -.6652370929706045 -305 564 .1464481843566231 -306 564 -.39246074157687827 -308 564 1.1433084581090802 -311 564 1.7779580284864835 -326 564 .48080942101815743 -338 564 -.8745771659702419 -341 564 1.4073589965008904 -344 564 1.0020482178420431 -375 564 -.3538764835744581 -385 564 .46736343989929463 -389 564 .33043147365273895 -395 564 -.8532861872562066 -396 564 .7422557006193127 -400 564 -1.308562106922964 -404 564 .3960797817965529 -416 564 -.2548625326497672 -427 564 -.8589058638280709 -430 564 -.5568632104633774 -448 564 -.898837785434195 -473 564 -1.7152559082283687 -493 564 .11512805134874168 -507 564 -.12850850468980862 -511 564 -.3325786034786293 -540 564 -1.3923190672060557 -542 564 .36223157320139165 -547 564 -.14489398467901834 -551 564 2.171751820465965 -553 564 .9781975152492712 -572 564 .4303307655314927 -577 564 .07100106768849868 -580 564 -.14147029788471244 -585 564 -.24283022540747098 -587 564 -1.4411730315136428 -630 564 -2.250666477122086 -635 564 1.917556812459935 -637 564 -2.1620934615640754 -659 564 -.4381426544579123 -673 564 .9335842257348432 -697 564 .676412457763714 -704 564 -.04511258905738813 -707 564 .49796192968329434 -723 564 .38307359991761814 -730 564 -1.1238049418116682 -744 564 .7471725665360922 -757 564 -.019762620684044024 -762 564 .048709448639868175 -765 564 -1.7993290972035616 -771 564 .9203338571429333 -778 564 -1.8913626644472272 -781 564 -.170658804863104 -791 564 .0332663345190224 -792 564 -.06498938421913142 -800 564 -1.0611215255588815 -803 564 -1.5146901792686673 -805 564 -.8788397997685642 -816 564 -.5564861907003614 -857 564 .1059445112831662 -867 564 -.4074776375016416 -870 564 .6337843617205953 -871 564 -1.505552304608482 -874 564 .015873650774204884 -882 564 -2.005984911867411 -886 564 -.1863918680684763 -940 564 1.4828266986387977 -948 564 .6723860852265516 -965 564 -1.0633236809192321 -967 564 -1.2204179690253047 -979 564 -.5607769909317234 -980 564 1.1402931798335367 -993 564 .737699196093228 -995 564 -.5178487333096793 -1000 564 -.35481053031130255 -3 565 -.7693495337427938 -11 565 1.4132282852416198 -13 565 .3394337903022691 -16 565 -.5526647950512438 -28 565 -.05224866756194753 -35 565 .5271031616777985 -56 565 1.0460679131763364 -65 565 -1.1477664937435301 -81 565 -.6810585962161176 -85 565 -1.5279677092556019 -102 565 -1.1116749878545729 -112 565 .4979054921344499 -116 565 1.45451675265099 -131 565 1.0193038280392472 -132 565 -.8881655802847976 -133 565 -1.0764083756103133 -151 565 -.3961043720662873 -159 565 -1.3093913612241954 -182 565 .3693359235118683 -231 565 .6761140323857399 -234 565 -1.369299514685782 -262 565 -1.2009295058172906 -272 565 1.3099469882536092 -286 565 .23035098525748915 -298 565 -.27296299499593246 -310 565 .16791982415247872 -346 565 .38870028109478183 -354 565 1.8565468454751937 -366 565 -.27170461889469266 -374 565 1.4722666183564768 -375 565 -.4876951939834505 -391 565 .48762727429627994 -392 565 -1.014819579778787 -396 565 -.28972334764103086 -397 565 .8058120702814698 -399 565 1.195124619696838 -406 565 .5926734464494842 -412 565 -.607648044195364 -413 565 .2957649566380386 -429 565 -.67661232146298 -443 565 .847891072495441 -463 565 -.872870371648955 -479 565 -.5245961928950655 -488 565 1.1630947467387311 -492 565 1.497954168227504 -498 565 -.29998485334986597 -499 565 .5935133058470896 -511 565 -1.0074697261287715 -515 565 .08277802379412957 -530 565 -1.3434289104941184 -534 565 .6693134942122566 -554 565 .43342274918904866 -557 565 -.8357053311935931 -562 565 -.8406556287223604 -593 565 -.11388739380402725 -642 565 -.025084448800020913 -647 565 -.800035595597039 -653 565 -.9819933781790687 -665 565 .5525623073727637 -667 565 .180433260370938 -673 565 -.11487268057539121 -678 565 1.1894410328896436 -679 565 .8417302230229119 -709 565 1.2415647919464199 -710 565 -.380865500234862 -715 565 .7176459527371138 -732 565 .3430134771691205 -738 565 .46488315078962206 -754 565 .2742394251418986 -755 565 1.5242307999890294 -761 565 .6125566142497345 -767 565 .1949426184564428 -770 565 -1.066590205294842 -790 565 .0248995009116295 -792 565 1.2568548138232294 -793 565 1.1058055270724798 -803 565 -1.754742243930265 -808 565 -.47297515363841675 -809 565 -.49824222344390673 -812 565 1.2088750690726084 -816 565 -.7514823999030263 -823 565 1.5692273112178496 -826 565 1.5349354455137882 -863 565 1.2000001190616048 -902 565 1.0339789735715832 -903 565 -1.7477201057008287 -909 565 .5705741035638315 -916 565 -.21445994312117259 -919 565 .64176181717183 -921 565 .5882988762648365 -935 565 .6966550996289333 -950 565 .9187850165294371 -961 565 -.5643471743410976 -993 565 -.3581535773905483 -997 565 -.782462807958686 -9 566 2.5532051161215086 -13 566 .07366241655750348 -41 566 -2.3334179805772473 -50 566 -1.2218130550228288 -55 566 .28333375838655805 -56 566 -.2365431246687922 -71 566 -1.3942987224313463 -73 566 .5676779827403328 -79 566 -1.5939765958467356 -90 566 -.42567877043281727 -101 566 -.19301025700568494 -113 566 2.026344416119834 -115 566 -.07004681304342865 -128 566 -1.5406184978020276 -135 566 -.6926123731805419 -136 566 -1.178382656213756 -161 566 .9424072421273915 -173 566 -.3919098557506365 -183 566 -1.8920355491469472 -196 566 -.9180491511419323 -211 566 .45313584270780605 -212 566 -.27820447302627654 -215 566 -2.1932424701018194 -222 566 -.8379559318994818 -224 566 .704826048761774 -244 566 -.7259156605281318 -245 566 2.516666678185205 -283 566 .347224404271512 -302 566 2.6865994375808095 -308 566 -2.1701025945141095 -320 566 .7004298027547645 -331 566 -.28328395042994253 -341 566 -.3812122990543857 -346 566 .7042717774142812 -357 566 -.9189842513720796 -373 566 -2.198216430102135 -374 566 -1.7529398994195176 -388 566 .37416884418903607 -390 566 -1.702837613122271 -393 566 2.276585147413516 -400 566 -.23293563761214856 -412 566 -.10126282636422917 -434 566 .33121274172285825 -449 566 -.8635206731612382 -454 566 -1.379337795602489 -462 566 1.112899609305776 -486 566 -2.637886159629519 -498 566 2.1313488926313986 -501 566 -.3109731819348396 -502 566 -.32324435860827105 -509 566 -1.2444924714228085 -527 566 1.4159801643395684 -528 566 -1.1786040110835305 -554 566 1.0759071004528826 -563 566 .38861938447955013 -564 566 .14095343915459457 -584 566 -.9862992310220389 -586 566 .5875161107863384 -587 566 -1.1640371628235067 -607 566 -.40736004407089194 -637 566 -.8479997576323086 -642 566 2.8889314220446978 -653 566 -.1264806154636218 -656 566 1.5520401773539367 -660 566 .6311101823359575 -691 566 .6636884331993097 -693 566 -.5372163595004442 -700 566 .24940148946064816 -703 566 .44795786555693706 -711 566 .09759117254402777 -738 566 -1.0423813435235803 -752 566 -.5580795505669525 -767 566 1.008876968339708 -772 566 2.072109197735447 -780 566 1.7605396598759244 -785 566 .7477677868264503 -789 566 -1.1477507449974687 -793 566 -.19708893783336032 -798 566 -.8032411751993527 -829 566 -.24087869920505886 -833 566 .7644700824469364 -835 566 1.046580030349153 -839 566 -1.360723165994877 -848 566 -1.7498860907533729 -889 566 -2.1658570068015566 -912 566 -1.0740723559013352 -925 566 -.7419145081404859 -942 566 -1.2774056091752817 -943 566 .8661900056080847 -954 566 1.0225444295766417 -967 566 -.19537171371826406 -978 566 .40645871700427705 -992 566 -.5092914308676297 -18 567 -2.122589609459719 -20 567 .23254624914187977 -40 567 .21507615458571638 -45 567 .634156078500824 -57 567 -.2529091164128322 -62 567 -.18682447985603995 -67 567 -1.0352339447075578 -73 567 .7255523312164124 -88 567 -.1201398918087754 -98 567 .20033880293603068 -100 567 -1.1215129630398466 -106 567 1.1024197873642079 -122 567 .19655116581424803 -135 567 .18165662290887385 -149 567 .028362138523117884 -159 567 -.12381730266377877 -162 567 1.2946277497314413 -167 567 1.0474061328823905 -186 567 .1644393843910868 -202 567 .3363075518233938 -224 567 -.5103880617360523 -231 567 .8963646601945602 -242 567 -.8752682254872124 -268 567 -.885029602145436 -270 567 -.5532588208469524 -273 567 .3139758595244814 -283 567 -.04781030847587911 -290 567 .2500257644950998 -292 567 .16092699332453902 -302 567 -1.0126828017394096 -310 567 -.4885453865199139 -311 567 -.4885519376667252 -312 567 -.48591456311051795 -317 567 -.019933772929957905 -321 567 -1.3693776117981649 -334 567 -.4557095296730965 -340 567 .11205343884723581 -346 567 -.45776078166462647 -359 567 .5251090070190613 -374 567 2.2283372220189936 -396 567 .1749199284134296 -410 567 .08722081524407203 -417 567 -.833847803171322 -422 567 .17005499786592992 -434 567 .20908042932497575 -443 567 .4882275544295992 -447 567 1.0429806147025822 -454 567 .046733794275533605 -469 567 .241493535242551 -478 567 -1.2296297669964444 -491 567 1.0728901255702417 -492 567 -.9244021212061699 -503 567 .2111162377641807 -505 567 .3235788801806492 -514 567 .29840752441511736 -517 567 -.3916534463053579 -519 567 .357497964519791 -528 567 .0019526242596963894 -532 567 -.12426875110858258 -541 567 -.08743077898587753 -556 567 -1.3001123041791012 -581 567 1.9343041949583455 -582 567 -.2694343639164988 -603 567 -.3259097755366588 -605 567 -.6843513934172295 -606 567 .2623600564517428 -613 567 -.8095550608715146 -615 567 -.2924064188089848 -619 567 .5380248044611193 -632 567 -.6786289462482653 -647 567 -.3209309446405324 -654 567 1.4083859834389545 -679 567 -.10214540806852003 -686 567 .31588415269384806 -697 567 .20960517724385436 -701 567 -.08011102745392856 -717 567 -.20141951157941082 -723 567 .4373692808229316 -729 567 .352396576981979 -743 567 -.6579240493404084 -746 567 .26636947550844653 -747 567 .6597967777058467 -782 567 .30046910566629714 -787 567 1.0286983295471415 -790 567 .3956624739680778 -802 567 -1.3113895901601067 -812 567 .5545310857219227 -822 567 .2706204230237167 -854 567 -.2267580297974534 -865 567 .476614703811551 -869 567 -.3154640692476579 -875 567 -.690775861357925 -879 567 -1.0757728926991363 -889 567 1.3286256227642703 -891 567 .5150538033951513 -893 567 .2168993311828894 -923 567 1.287435184213352 -928 567 1.0028072889422053 -930 567 .30513597107055884 -932 567 .8686874781432234 -940 567 -.10745303689723082 -954 567 -.5335635507256706 -963 567 -.6048568682257031 -969 567 -.8724682161258275 -972 567 .24062927175672635 -973 567 -.6982020964207025 -9 568 -.43019443498722326 -21 568 .6709624545776532 -26 568 -.9391885720756913 -37 568 .42260217422806373 -50 568 1.207968486890982 -59 568 .17352425148903733 -101 568 -1.1182348171104985 -108 568 -.5034176017412738 -122 568 -.038425301917369786 -130 568 .3357164487167562 -145 568 .8660409961494934 -165 568 .9553346045726135 -189 568 .8327196492001181 -197 568 2.4688536429529395 -198 568 -.6473258087522709 -199 568 .34569854227646457 -211 568 -.5773641848492128 -225 568 .0331378033132598 -230 568 -1.031157009753806 -231 568 .5834371075421558 -234 568 1.8249308103502957 -251 568 -.7298217540270635 -253 568 -.1210594888541498 -287 568 2.414714447040819 -312 568 -1.1828486014261914 -314 568 1.4119401810156527 -317 568 .5685055150676558 -326 568 .0067331450705243046 -338 568 -1.053943650936044 -355 568 -.5008520783032571 -361 568 2.3072267593129983 -362 568 2.0894657715408353 -365 568 -.2081227311169297 -368 568 -.8567368025021947 -377 568 .03392261388182019 -380 568 -.8857641603573267 -381 568 1.2086903460839993 -423 568 -.5295464093417728 -425 568 -1.2964454691004312 -433 568 .31304957934981315 -453 568 -.16112037263577283 -472 568 1.5663561959369399 -477 568 2.091990931856804 -493 568 .5542069127002985 -494 568 -1.3009328380929832 -497 568 -.7299665978872516 -504 568 -.7495707339866484 -506 568 -.2504024066690139 -516 568 -1.8105043659514368 -518 568 -1.9133518187710077 -525 568 .22677507732055938 -535 568 -1.4048976381162361 -547 568 1.2834874508893617 -553 568 -.35674335887136804 -575 568 3.3136783969620507 -594 568 1.1226893419484196 -596 568 -.23260908987765655 -638 568 1.1166707105677671 -646 568 -2.7309307889086756 -648 568 .3291519933669085 -649 568 .9918536707640297 -651 568 2.44110005868244 -668 568 1.1542844843806643 -678 568 -.9066384241383532 -694 568 .4706081089582511 -705 568 .6680810833361419 -720 568 -.3750967650810395 -722 568 -1.4918436688814074 -724 568 .07818045129993863 -731 568 -.8126146473967267 -737 568 .42219640866273256 -758 568 2.5420012035042516 -770 568 .5986797047464555 -775 568 -.03759594971867178 -784 568 .20279872058601128 -786 568 -.4113777409630962 -808 568 2.4337075988830787 -813 568 -1.6680427231610164 -826 568 -.1092813848825407 -834 568 -.14386174957153086 -845 568 .11926676524427135 -862 568 .6821100666427349 -863 568 -1.8574361868123368 -883 568 1.2402071711789826 -893 568 .2823908778995842 -896 568 .868924878044195 -923 568 .9776020704157806 -924 568 -2.1187231621486626 -926 568 -1.8155640093892698 -932 568 -.743876194402302 -950 568 .8784153454090052 -957 568 2.070558043674245 -962 568 -.9450011773268171 -970 568 .6287242355959817 -5 569 -1.375547365752518 -28 569 2.269814399739833 -30 569 2.612350209020766 -34 569 .9949411825189475 -74 569 .8471800932968525 -85 569 -.37171851721443755 -86 569 1.069579583962762 -88 569 1.1644460554960012 -95 569 3.1245380456773293 -118 569 1.975085666701264 -119 569 -.8091010980362981 -127 569 -.07380842317675712 -128 569 -.24503534212210556 -132 569 .2627102253870714 -145 569 .24044167269758981 -146 569 1.6132122130144 -150 569 .7231161246146862 -172 569 -.5349931494145742 -203 569 .07507794135133797 -214 569 -.42845953137928483 -227 569 1.3302898234100229 -231 569 .1959213538989688 -232 569 1.7325675093811606 -239 569 .8077173251603545 -250 569 -1.8473098287585754 -251 569 -2.103141722562677 -285 569 -.2968958938971164 -304 569 -3.20672005109141 -305 569 .26311182281672285 -306 569 .45305514510938094 -308 569 1.5591969695881973 -311 569 .8714038264883885 -313 569 .3122315651940732 -338 569 -.3128497351994898 -356 569 -.36315949989858043 -374 569 2.0358153250632154 -386 569 -1.1815666920425714 -387 569 -.060787791934682714 -399 569 -.03858857321506108 -404 569 -.004889827328936228 -406 569 .5118746967670983 -439 569 -1.3225131847445961 -456 569 1.3899564716885209 -475 569 -.6241355347732983 -476 569 .6417197124339278 -479 569 1.760335589051503 -484 569 1.695499599908493 -524 569 -.5981170875652694 -537 569 1.518288999505526 -539 569 -.06469587943595417 -542 569 .13072179598025488 -544 569 1.0633412741973867 -572 569 .8325777741049136 -575 569 -2.4396854908239747 -577 569 -1.6447193582676285 -586 569 1.134499149678318 -589 569 .12318723581158264 -594 569 -1.3117021473608437 -599 569 -1.305676832321585 -604 569 -1.0784463732340497 -608 569 -.2505235249493069 -623 569 .4313903781827228 -631 569 -.9657506486659216 -634 569 -.6120078863037508 -635 569 2.0650453051112327 -644 569 2.1026908131426927 -655 569 1.8869660662477725 -660 569 -2.029015716283899 -664 569 .8821747945578522 -672 569 1.474563780009906 -673 569 .8064047190861119 -680 569 .4003680122974676 -682 569 1.8776726141210969 -688 569 1.793609570295588 -704 569 -1.1782620704967541 -706 569 -.3684995256792283 -715 569 -.5623922844057351 -717 569 .24456039914481834 -731 569 .03282779737073917 -735 569 -.33149435974890135 -738 569 -1.1089655687556703 -755 569 .6479046432504633 -762 569 -.8145371681513656 -771 569 -.04171427793851156 -775 569 1.2564305692071687 -777 569 -1.1028333902236314 -778 569 -1.4913922745101986 -787 569 2.074578736839904 -829 569 -.1694943213992613 -830 569 -.8062916371851816 -832 569 -.7656363190040646 -843 569 -.6555573734780847 -858 569 1.214863911589512 -862 569 .954848441576219 -867 569 -.012591465829080321 -871 569 -2.2803280675253945 -877 569 .3164999968138885 -879 569 -1.4738783275494032 -886 569 -.0914572818892063 -890 569 1.4962367356142936 -892 569 -1.3081328575278106 -899 569 -.9357813354336749 -909 569 1.1684577699947982 -914 569 1.0323143775009178 -924 569 1.2100841250557774 -933 569 1.4799344005157242 -943 569 1.5666252009984432 -946 569 .7958029133519335 -963 569 -.40318083214957295 -966 569 1.0902459874874402 -967 569 .43839557919037986 -971 569 .17438484906200555 -978 569 -.6588449097107305 -989 569 -.6349908470594321 -994 569 -.7765015302780106 -995 569 -.00032823555437416774 -8 570 -1.9010853866077055 -11 570 .41481580242646 -13 570 .06917609901188904 -15 570 -.5184949613583324 -26 570 .4801800154181118 -32 570 .7588468489603353 -63 570 -.19369470279962514 -72 570 .22735659887241363 -73 570 .5126705969124598 -82 570 1.390692986569732 -85 570 .2386226212132242 -86 570 -.4483641711302558 -91 570 -1.4407529133958783 -93 570 -2.3743331544768385 -109 570 .826108720019968 -110 570 .9446506082932733 -113 570 -.9001621195327146 -124 570 .2673991425914474 -129 570 -1.5006325001694496 -130 570 3.9748798954968327 -132 570 1.3633404734718901 -147 570 -.5205456739659994 -159 570 -2.2942119274985395 -170 570 .08460683127222582 -178 570 -.75470712685088 -187 570 1.3164168356762593 -194 570 .5079052186512621 -197 570 -.8731979786280322 -206 570 1.0085526353557972 -217 570 -.1708281291041333 -249 570 -1.2169634379584278 -261 570 .46517348086692645 -264 570 -1.4344917330962992 -271 570 1.5640249968133022 -273 570 -2.3538944572206884 -279 570 -1.4553937712796208 -283 570 -1.3519455154562918 -294 570 -.5583564968144439 -311 570 -.9696859768663191 -340 570 .8479453963988725 -342 570 .3939102430138642 -346 570 -.6156429058678978 -349 570 -.05964152088427187 -388 570 1.470195852257252 -399 570 -2.4018132431705497 -403 570 -.033917824092348704 -404 570 .15239094566745703 -424 570 .011789764978047866 -425 570 -.7738007258649598 -427 570 -1.025377546268199 -429 570 1.0146397683177715 -439 570 2.9728656000628604 -452 570 -.5594076743323974 -459 570 -.09859190241551843 -483 570 -.46645592416179454 -490 570 -1.9051914650074417 -491 570 .2171010444421017 -557 570 .9361546840787065 -568 570 -1.047739399693454 -575 570 -.6066780070936629 -593 570 .9050202850345284 -605 570 2.257973647692404 -620 570 -2.82058303431561 -644 570 -2.020401667696846 -650 570 .1270962578972865 -660 570 1.9924062104922018 -672 570 .43018876850000964 -681 570 -.7933518885842008 -696 570 .3830810136984811 -697 570 -1.789818654767717 -709 570 .13841655707656608 -710 570 -.5764202507327679 -732 570 -1.7242690443201016 -759 570 .23644105594263432 -760 570 -.6335463553412818 -780 570 .36724910686001444 -789 570 -.017290310998236372 -798 570 -2.608219460216959 -802 570 -.07061629854941773 -804 570 -.4953384637010381 -826 570 -.8860124653746855 -832 570 1.1786635309037372 -841 570 -1.7089640489900766 -845 570 -1.2626159027499417 -847 570 .8405623611162438 -848 570 .44362719819104995 -882 570 1.4573798925378008 -887 570 -1.4351550548584304 -891 570 -1.2707327925209513 -902 570 1.0260432132397355 -903 570 2.0907334504681367 -923 570 -.6018469868839604 -927 570 .9278814937096963 -928 570 -.005673088368394114 -940 570 -.32008379475759713 -984 570 -.35385845913722885 -6 571 .15633492357518763 -7 571 .2165987184302797 -29 571 .4677871645894227 -36 571 1.0238258878290207 -39 571 -1.017345962865567 -43 571 .3156972383022749 -85 571 -2.6511220736024166 -86 571 -2.6925420185333775 -93 571 2.2752842696746622 -99 571 -1.7708228004955653 -101 571 2.6348842845441034 -104 571 .2614211430689007 -113 571 .07648236366428346 -117 571 .569883454208385 -126 571 1.174689290165394 -136 571 2.71844367088132 -139 571 -.07965939016732601 -146 571 -.07155342455926798 -148 571 2.1320939583368586 -153 571 2.168763115095424 -161 571 .1523491647622925 -171 571 -2.9123627791958597 -175 571 .7739253169121012 -179 571 -.5117518617080111 -184 571 -2.770049789434327 -194 571 -2.972396892155213 -196 571 .59081116437566 -198 571 -3.506261305278099 -201 571 -.8822331929170785 -239 571 .8747544175153183 -249 571 1.0639046851466072 -255 571 .27663384232283156 -267 571 -.1595195826046809 -292 571 .2580653874783909 -337 571 .5804178049262916 -343 571 .8257168259202882 -344 571 -.19460652098823164 -368 571 -1.8657667699699618 -396 571 1.0180649871680967 -406 571 -1.996955359594216 -411 571 -.6591358215225641 -417 571 -1.7640673121328843 -429 571 -.7381706100863576 -435 571 .12417696527810165 -456 571 .8289337706368292 -458 571 -.7259420299167914 -473 571 .8919284286620562 -496 571 -.2512725994174233 -497 571 .7396798985611814 -520 571 -2.042473506922623 -525 571 -.7149327461929659 -543 571 1.772398669886204 -545 571 .7357189688027417 -557 571 2.633022564991339 -571 571 .20470149490648687 -575 571 -2.6717014852940095 -577 571 -1.129884447386471 -582 571 -1.8231985951833405 -612 571 -.4874684709553882 -617 571 -1.8015707560716194 -620 571 .30533500414661546 -622 571 -3.0072730305743756 -632 571 -1.1262085854190236 -658 571 -.7977388828895043 -663 571 .519091511948016 -675 571 -1.7856286190728266 -681 571 -.6047778487501505 -694 571 -1.4773316902629716 -698 571 -1.516740701659206 -700 571 -.9550028895068686 -704 571 -.9556808873585936 -705 571 -1.1268902871796276 -708 571 -1.0319828184695772 -717 571 .5988647190166081 -722 571 -2.081747679912721 -738 571 .3030095769149811 -742 571 -.8675600435480657 -748 571 -2.9018922563687957 -755 571 1.3016615343208968 -771 571 .5307129617752185 -776 571 -1.9628102653380344 -795 571 -1.041112360396101 -797 571 1.7570535126648066 -812 571 2.517751406302229 -826 571 1.5998439406347724 -831 571 -.009567478658693243 -837 571 -1.0533863202867115 -844 571 3.4333779960281063 -864 571 1.184467542298916 -877 571 -3.0558567698421397 -893 571 -.7070874678516139 -897 571 -2.7436436314986747 -902 571 1.0589257258953688 -913 571 -1.1294450594539562 -922 571 -.09892281423822008 -935 571 -2.7194942659697547 -937 571 -.06306838024675027 -948 571 -1.8971421531125072 -959 571 -3.544994028634323 -961 571 1.1223471724610241 -962 571 .8141878764877708 -969 571 -.7715572116731252 -976 571 3.0912340562615346 -984 571 .9106282041551212 -986 571 2.0670556575227064 -987 571 1.982736838851903 -1000 571 1.2056578662716835 -6 572 .5416553251493623 -10 572 -.06943546066017751 -16 572 -.6126812619075068 -34 572 -.26343575504543565 -48 572 .002887241975846694 -49 572 .09497056560208644 -51 572 .0642382429177974 -62 572 .14428893248745683 -94 572 -.848784043439732 -95 572 .17846627601350212 -102 572 -.4902290604227813 -124 572 -.540532531988913 -126 572 .6622887455737712 -130 572 -.5625873198598774 -156 572 -.057000982235943506 -175 572 .33075165028672354 -185 572 .37033210818115053 -186 572 .08103622619578452 -188 572 .8164465855351862 -195 572 .3683382740020051 -196 572 .8145341438964331 -202 572 1.269539923297294 -207 572 -.15149043511139468 -216 572 -.14134271136397672 -217 572 -.8998810371242496 -219 572 -.891114051965684 -231 572 -.2111659510179374 -234 572 -.9379104938069179 -244 572 -.13190958725963964 -256 572 -.18428943424818311 -262 572 .7725394919243165 -270 572 1.3544754411382136 -272 572 .5062927487576754 -275 572 -.2952522183599546 -278 572 -.2218103386208832 -304 572 -.122098618911925 -310 572 .11832703923561422 -323 572 .731629617509329 -328 572 -1.204159832596827 -336 572 .2699529426692628 -337 572 .13798396102937174 -341 572 .4006874042691889 -366 572 -.4656687062908988 -371 572 -.5610327518318866 -389 572 .15800745080453232 -394 572 -.8535727730287503 -395 572 -1.1228039014080116 -401 572 .20484401053244944 -414 572 .08162916904553433 -436 572 .4320760157515897 -441 572 -.6675571187491653 -454 572 .6431780927310149 -455 572 -.6870947351298589 -494 572 -.1541719394349442 -504 572 .4011993996871321 -548 572 -.8529807241623071 -554 572 .09222428763963389 -563 572 -.46908005685591464 -565 572 .8560245577503383 -570 572 -.7018719217852517 -609 572 .35460182152922576 -614 572 .27477098349188656 -617 572 .13488718075706607 -618 572 1.1341423698611826 -623 572 .2572403330975013 -632 572 .05260501899970382 -636 572 -.5013468511524364 -641 572 -1.41390970252774 -660 572 -.12193729343779745 -662 572 -.1260550177684575 -669 572 -.48916818284144303 -679 572 -.3992399557880891 -686 572 .15799627326840646 -689 572 .003971096082225178 -709 572 -.04701845477468937 -720 572 -.16533320932057893 -730 572 .30229579761412984 -773 572 -1.3470598520921055 -777 572 .1167589494596579 -782 572 .13975611939386787 -795 572 .9465231324875572 -796 572 .023502515588674777 -815 572 .46604127867140865 -832 572 -.09993437345796759 -833 572 -.041004843372812974 -837 572 1.3603890121041486 -845 572 -.4836946828538068 -861 572 .2391259991966276 -872 572 -.1906269893780468 -873 572 .43272755553153985 -877 572 .8594391474264366 -880 572 -.38141724644442154 -885 572 .3015474377446876 -894 572 .432372375382034 -902 572 -.1706777052174684 -915 572 .06604655753235164 -918 572 -.1166880629225337 -931 572 .10002579484243276 -932 572 -.10446476081584914 -942 572 .37322972838895807 -945 572 -.28423633569951995 -953 572 .010240854833362662 -966 572 .19660627812906636 -967 572 -.8538027155436034 -972 572 .017852022021710417 -975 572 .4774438194195467 -976 572 -.5172598244125224 -980 572 1.1367400506819867 -4 573 .7802160211593483 -35 573 -.39171757072227525 -42 573 -.47294468995188577 -63 573 -.3389909492072571 -64 573 1.3938228886125898 -102 573 .4069552239575133 -111 573 -.3506215235590955 -122 573 -1.0734064803740926 -131 573 .46221802435878784 -137 573 .7986494669819836 -140 573 .11301093021361963 -149 573 -.6837883273229793 -154 573 -.7968138146930205 -158 573 -.7764455526269475 -159 573 -.7186867947120762 -163 573 1.3742169152133328 -171 573 -2.2474001254350804 -176 573 .3102854805102961 -178 573 -.6646696901857923 -193 573 .09983423118262116 -201 573 -1.067275593621446 -202 573 -.9891279388067882 -206 573 1.1055914783323209 -231 573 -1.0066631320941921 -243 573 .7676896673390059 -250 573 -.8634861211007603 -252 573 -1.297257547956452 -260 573 -.4528949017783582 -262 573 -.34566607892324475 -263 573 -1.5844712901061588 -276 573 .95005956654676 -288 573 .6666897360992288 -297 573 -.48819514966609606 -301 573 .5633742274357163 -306 573 -.6981839182926619 -308 573 -.38225152542279905 -320 573 .2767482005055056 -326 573 .5053093866758664 -337 573 1.2595307235773963 -344 573 .612590939737047 -345 573 1.0800213610491072 -349 573 -.124463281362614 -357 573 .30017827954252074 -371 573 .25411988236613603 -384 573 1.1425294472710623 -393 573 -.5575310326497833 -400 573 .6272050626941215 -401 573 -.8673943533487591 -403 573 .2425783647844899 -441 573 1.5702671965968722 -447 573 -.3644765887923419 -448 573 -1.0826215653641122 -475 573 .5842667463318744 -508 573 -.40221474828973014 -517 573 .4491732160860647 -536 573 .12395288201107102 -540 573 .21185543694011402 -553 573 .34746869560966565 -571 573 .12092436356363041 -576 573 -.6150231819027276 -578 573 -.6287797208140026 -589 573 .9119265097795115 -607 573 .6331692343681279 -620 573 .8251455212666454 -630 573 -.8788576946510818 -631 573 -2.5071856875002054 -637 573 .22571515651825083 -643 573 -.907355895204832 -645 573 -.1568299126678541 -649 573 1.3488733771575445 -650 573 .05416599790298286 -661 573 -.4134305714667149 -681 573 -.048344603124598734 -705 573 -.03524445623364225 -712 573 -1.753625373809442 -719 573 -1.121818764343809 -736 573 1.0323168124493096 -739 573 -.9763863885975299 -741 573 .026838835314056425 -743 573 .21164035258475666 -753 573 .4355182430382263 -757 573 -.23039265461839503 -759 573 -.558511487630576 -761 573 .3035365277379174 -763 573 -.13558524140558353 -764 573 -.236942920630342 -781 573 -.4081091935768334 -783 573 -.8668747453285384 -784 573 -.21906788531337862 -786 573 -.0690075217998059 -799 573 -2.138523929905375 -810 573 -.4691457508920806 -811 573 1.1606446608845442 -816 573 .005138947467100349 -817 573 .4320398084661624 -836 573 .011343871921379908 -845 573 .8054272048482232 -861 573 1.5793365070384406 -879 573 .06793729734094216 -892 573 -.48781651026288786 -897 573 -1.8445976732545681 -900 573 .19623743277750022 -913 573 -.5010016052286551 -922 573 -.30874482465064734 -933 573 1.163140561059123 -957 573 -.35973706438596653 -963 573 1.595317998378946 -967 573 .35911922980530053 -998 573 -1.9170378084242408 -10 574 .5854876017901776 -14 574 .8483653752521066 -41 574 -.7485683987264521 -56 574 .7669820034307805 -70 574 .4177472958871903 -76 574 -.38043589151473245 -79 574 -.8786580945948547 -81 574 -.8217943330009697 -86 574 .06034112228814611 -91 574 -.18484288505515206 -94 574 .2299828238317907 -98 574 -.00036465059561984565 -102 574 -.040497103901583495 -110 574 .25745613290443137 -124 574 .1031823606296442 -127 574 -.27006051156220173 -129 574 -1.2312185294715488 -131 574 -.42380423591798644 -138 574 -.14778256902818637 -139 574 .2260398318552348 -147 574 -1.759408463825437 -155 574 -.3174646933784837 -185 574 -.5969346098592799 -209 574 .24254793008070988 -226 574 -.32526987619276476 -228 574 -.9747847269878818 -243 574 -.36844065434779677 -255 574 .23040695358265156 -282 574 .71627949691573 -286 574 -.7654564237894306 -303 574 -.3412343934215733 -316 574 .030884996921209322 -319 574 .6299367916082436 -331 574 -.5114389523374123 -345 574 .19533223442791078 -348 574 .8587205177038636 -380 574 .54539140487089 -395 574 1.0758302848164785 -404 574 -.9933187616954917 -418 574 1.1362517457299963 -422 574 -.3324274328971332 -425 574 .030034317666695065 -435 574 -1.238132796854571 -445 574 .2700598312905981 -462 574 -.6942513004493522 -464 574 -1.4665914902441854 -470 574 -.7804264957873233 -473 574 1.2020924914466802 -477 574 -.9515964907866712 -478 574 -1.2300275622126462 -481 574 -.7232605033365119 -495 574 -.7094745124794055 -512 574 -.9508595622736774 -570 574 -1.174858681023762 -574 574 -.2339349549409353 -601 574 -1.1591425524977794 -613 574 1.1567612530098446 -615 574 -1.33573544627422 -616 574 .014022215948776812 -631 574 .8065453782968021 -649 574 -.6680343759308126 -652 574 .31148811003110527 -657 574 1.1197261632548383 -663 574 -.031267989213741965 -674 574 -.6900456261442578 -697 574 -.8621208884881112 -734 574 -.13451311618815054 -735 574 -.1850757307335958 -736 574 -.018838222898088782 -742 574 .8687001635602185 -752 574 -.5634711328080707 -762 574 .943713311466697 -768 574 -.0329235952912137 -770 574 .23929648150137053 -793 574 .9071404547585167 -822 574 -1.7459156610640025 -844 574 -.13760199870982245 -845 574 .940394513254623 -847 574 1.57243634057595 -862 574 -.5147933262368609 -887 574 .15217219716089564 -890 574 .2579642413870679 -896 574 1.179546311449757 -923 574 -1.182874683132104 -933 574 .10603018360741723 -948 574 -1.0811735776785898 -958 574 .5187532937574866 -960 574 -.8043426951995352 -962 574 .36795514995616074 -965 574 .8160260095852155 -992 574 .09945498223896443 -3 575 .3546180811388216 -8 575 -1.5797904810918475 -10 575 -.7522030373074117 -20 575 .2315293259779122 -27 575 -1.0923292236157027 -32 575 .7065187174682361 -34 575 .5773676674590291 -35 575 -1.2233672111933953 -37 575 -.23327667108281275 -44 575 -1.2243440071230554 -52 575 -1.1984443237337157 -63 575 1.4810006715798147 -65 575 .2386254266948185 -67 575 -.3882422033435479 -69 575 .7718006989074339 -76 575 -.7481411363964086 -82 575 -.9261707090105096 -93 575 -.3652513993035597 -95 575 -2.4020911995308847 -97 575 2.506059361880285 -106 575 .9638088995218037 -157 575 -1.5744494742616673 -162 575 1.9331304187338523 -184 575 .5919280559035092 -195 575 -.9175410692965181 -197 575 1.034004041055951 -204 575 -2.2517432362642773 -212 575 -2.4525509338063705 -223 575 .01867223098279737 -228 575 .2062832859639422 -237 575 -.3964986113045667 -238 575 .24875214726133937 -244 575 .04953177045891653 -247 575 -1.7686544555401214 -248 575 -1.1898769553447814 -258 575 1.228927478597433 -270 575 .021996639061568526 -283 575 -1.0946566066747838 -308 575 .05402102749573759 -315 575 -.12226561855560586 -319 575 .2869441206699767 -327 575 -.003985276850846497 -330 575 -2.2784191226807913 -341 575 -.5194142398177457 -364 575 -.5856006779204864 -371 575 -3.068065801737105 -384 575 -.43507382553936635 -388 575 .9286115631811743 -392 575 .5648518631518833 -397 575 -.6485697848139458 -403 575 -.3608029130710422 -404 575 1.594356635400898 -405 575 .3342170156583184 -408 575 1.1389687965614788 -426 575 -.6511669563701992 -428 575 .8442320585626264 -436 575 -.7251842331840646 -440 575 -2.621477426643519 -442 575 .1585968174779232 -460 575 1.1763508093730284 -464 575 -2.869584377776652 -465 575 1.288326727472659 -467 575 -.9966988830738671 -472 575 -1.6234107454898459 -484 575 -1.1144793598678628 -485 575 .3502829851919217 -497 575 -2.4271962575083803 -511 575 1.9137640790411727 -516 575 .00123063829488693 -526 575 .1393396696750899 -554 575 .6757660735244975 -561 575 -.5183203117287412 -563 575 -.08448086059793072 -573 575 .3951299099712975 -579 575 .6181878111007412 -602 575 1.2635885305839758 -610 575 -2.021481527978186 -612 575 -2.6331652800839005 -613 575 .7843274264928901 -619 575 -.7962506473614821 -626 575 .7164358182990893 -630 575 3.3956883262955557 -651 575 .231751716845656 -656 575 2.4398079112444586 -658 575 .3111770870794999 -692 575 2.3234497627842563 -699 575 1.2559252346246268 -702 575 .8420241402875739 -704 575 2.7267589220687176 -722 575 .5105316496303806 -732 575 .7316147117070815 -746 575 -.33494661268521486 -748 575 1.4941638077564072 -751 575 .26456858823965723 -764 575 -.0878965918328075 -772 575 1.5594731805372752 -811 575 -1.9888205647590782 -863 575 -2.5919381865672313 -867 575 -1.31473695601477 -868 575 -.27231128324538945 -877 575 2.6733789033527304 -881 575 -1.8358379546234043 -890 575 -2.8599458559958593 -908 575 -2.529070168238753 -917 575 .904361852420173 -932 575 .7616873666801083 -934 575 -1.6235406385523743 -943 575 .15851953916237388 -946 575 -.114124014707458 -947 575 1.3828631765447934 -950 575 -1.8610648336965645 -962 575 -1.7405241775880975 -969 575 -.5888406678968447 -976 575 .14833849630898685 -2 576 .9296070431254072 -16 576 .5783853817743557 -25 576 1.0308801549462452 -58 576 1.294758203584724 -87 576 .2311140797340937 -89 576 .1874915838499 -98 576 .2550674745245649 -108 576 .7403456362100302 -110 576 .9163360642339635 -114 576 -1.1605144116289579 -120 576 1.7350871773868741 -124 576 .39312879470573636 -139 576 -1.243811436032179 -168 576 .26278446718271176 -170 576 -.46646337659356807 -181 576 -.0008022279708021288 -198 576 -1.2689539568422903 -207 576 1.218901880336947 -227 576 1.807731979382464 -230 576 .8442133146112347 -232 576 1.3002763263367607 -237 576 .0096096626136922 -238 576 -.6661576410709414 -256 576 -.515164383100518 -269 576 1.2850530148272614 -271 576 .6901691930877024 -290 576 -.6465310785871211 -295 576 .12019722648114817 -304 576 -.3704636966477247 -309 576 -.4017924714127787 -326 576 -1.2402721705867001 -331 576 .6750613320805141 -356 576 -.21609078695114417 -385 576 -.12837486699156814 -387 576 -.7409890731775857 -392 576 .389597423050809 -423 576 -.006954508918121462 -426 576 1.3231697483768377 -451 576 -.2538594794601492 -458 576 -1.1159419851961947 -464 576 .6001664828013602 -466 576 .22959228335567788 -468 576 -.24944283889811142 -483 576 .4247659372294595 -490 576 .3914717602537962 -493 576 -.2075547792482819 -494 576 .574666093372207 -503 576 -.758710833201234 -505 576 -1.0637902923492326 -577 576 1.7749848246422577 -587 576 -.5958847870311906 -594 576 .9997295321439585 -596 576 .9330373547443568 -604 576 .9046693651606182 -610 576 -.00865693060864844 -622 576 .2040578100751551 -625 576 -.2079604133808391 -627 576 .37412074117604777 -628 576 .9875684908823531 -632 576 .6823240381477689 -633 576 1.2996879278111744 -635 576 -.10991869566644721 -646 576 .7242943164780491 -648 576 -.08906329858552181 -655 576 .5967172094263857 -660 576 .06432495638315705 -679 576 -.36576556548551586 -684 576 .49960067557779875 -686 576 -.10977603973265516 -697 576 -.662908297038618 -699 576 -.8340775107390634 -701 576 -.6105035487510769 -713 576 .15966089813927914 -727 576 -.558475455734545 -736 576 -1.019443830821292 -740 576 .007004489277759346 -749 576 .6571457628183366 -773 576 -.6282934171046995 -775 576 .07020985135037561 -791 576 -.28444636187781547 -796 576 -.14777777355474192 -797 576 -.10410240622220729 -816 576 -.4648583230961771 -820 576 1.4282088407447364 -827 576 2.0297566063639634 -840 576 -1.380063903903342 -858 576 .2876376927773998 -864 576 -.29936875883603975 -866 576 -.11459237021678711 -881 576 .8921737937365349 -885 576 -.11234284502143023 -892 576 .484676619593703 -900 576 .13848858775157874 -906 576 -.17426259404621275 -908 576 1.0524955980201862 -921 576 -1.1174747944011965 -931 576 -1.265424529713737 -936 576 -.4439115721257503 -955 576 -.4138653283200727 -958 576 1.2769796686829267 -980 576 -.21014363948606468 -989 576 -1.2972045620906747 -992 576 -.5646177293437 -8 577 .8368559426750866 -35 577 .3197480129156232 -38 577 .4476505758601035 -42 577 .1975718169268135 -43 577 -1.1155566570780817 -69 577 -.4158789894766598 -79 577 .19994762426257923 -82 577 -.3681466044921346 -87 577 .8355601141726867 -90 577 -.07769630065260508 -97 577 .22908968650716044 -98 577 -.3549750047392377 -105 577 -.4684406293592994 -110 577 1.5771799012328966 -118 577 .5492393968276958 -130 577 -1.0690438061107488 -141 577 .2652983705408734 -144 577 -.28329654660244025 -187 577 -1.15890721207746 -193 577 -.5276224434091572 -210 577 .9279632804360487 -214 577 -.5192979873027955 -224 577 1.3190845473525568 -231 577 -.11266551385449547 -246 577 -1.2946977228655219 -247 577 .2640345812991672 -262 577 -1.7812717936049667 -268 577 -.32010154572491417 -296 577 .1368536893761476 -311 577 -.7572925856724142 -338 577 .9868306525551805 -350 577 .6292250847973284 -357 577 -.19832517898458873 -381 577 -.2080362545022904 -394 577 1.0064167861112425 -426 577 .31217533531360014 -439 577 -1.5625393554327445 -444 577 .6308588030836216 -464 577 1.2590957786641173 -466 577 .1860217581550746 -470 577 -.22025913419124404 -482 577 .7501089530693147 -490 577 1.3969615485128926 -504 577 .0037869352178767635 -509 577 .47071656115304 -532 577 .6877361554243684 -538 577 .6842640580420905 -551 577 1.3847255827812304 -593 577 -.7261420526569792 -650 577 1.0640852466337978 -656 577 -1.7150186702930366 -658 577 -.18608187432759976 -659 577 -.3103661171955948 -662 577 .3717803345365208 -683 577 .19847204281317365 -691 577 -1.1811326586110928 -698 577 .06911950595440837 -700 577 .24984329770331554 -714 577 -.4541015430738763 -727 577 .08868762755424667 -744 577 .07651754200405084 -748 577 -1.4902142959882194 -749 577 -.9630710894168931 -757 577 .5520007487828169 -765 577 .8658852036665983 -766 577 1.5337590413021247 -768 577 -1.255274934961687 -770 577 .027106425658011732 -773 577 .052731837660752484 -785 577 -.537227455579554 -791 577 -.9955262906819923 -804 577 .26247025458557866 -807 577 .11206733013366482 -809 577 -.33182457236443674 -814 577 .023171027936443905 -823 577 .6744023281572177 -844 577 1.5060800603199953 -858 577 .8756036994667137 -864 577 -.48126937338398906 -865 577 .7751292543464028 -877 577 -.08893001349320279 -883 577 .1508966595279339 -886 577 -.26985098944597363 -887 577 1.4289175592594945 -893 577 -.8675463359067573 -894 577 .35562592439729857 -915 577 -.17640017791394438 -923 577 .8435747710410691 -941 577 -.7204978927319052 -945 577 1.2766447635033724 -952 577 .368943961044287 -954 577 -.6651876993077703 -979 577 -.553346687105785 -991 577 -.438756230357772 -8 578 -1.5972455511432473 -15 578 -.16502551383210476 -30 578 -.02089749609568496 -46 578 -.09204387471446583 -50 578 .07445272494481092 -64 578 -1.158739976790585 -74 578 .16004956278380933 -81 578 .7426962319190547 -87 578 2.4871708043148026 -101 578 -.20085942789512462 -110 578 3.0659390543362646 -121 578 -.17054756427125484 -132 578 -.8771964263150841 -136 578 .5511147339720588 -162 578 1.345099447608414 -169 578 -.8379784778842575 -188 578 -1.2634819019640855 -191 578 .6063269729777695 -197 578 .7051034288279617 -200 578 1.0013011435201642 -201 578 1.6654261892698996 -209 578 .7256655721254417 -214 578 .26972594707026104 -216 578 .29872726998797017 -224 578 -.03310484826112333 -234 578 1.597388041023939 -236 578 -.09256089104186145 -266 578 .21537553835838136 -267 578 -1.447880740321058 -290 578 .1513515042769238 -292 578 .5927153723469056 -293 578 1.0810827838891799 -296 578 .9008449037355495 -306 578 -.8740988282320501 -317 578 -.0868225006805598 -320 578 -.9962610671085437 -323 578 -1.9680661697036521 -352 578 2.3075628419063716 -375 578 .4836484702141022 -376 578 .315085898031918 -391 578 -.6162233706131011 -396 578 1.039151272505043 -397 578 -.37269423970272586 -398 578 .4606672239277912 -423 578 .8956708865878058 -432 578 1.5507556979107162 -441 578 2.1914560702357337 -463 578 -.002289279888683965 -471 578 -.42088794265593876 -476 578 -.4342036021844109 -478 578 .6958583026432976 -486 578 -.8270556128122898 -502 578 .29276811685001247 -504 578 -.8292906045516686 -505 578 1.4528808788204006 -522 578 -.31127769915256315 -546 578 -.1152057641499879 -548 578 1.303982151876418 -558 578 -.47621673901608674 -580 578 1.755123455172833 -581 578 .5798825767299007 -583 578 1.1181033723972897 -620 578 -.8852739442752751 -621 578 1.665181626019314 -627 578 .16377970442328207 -629 578 -.10815871059628808 -634 578 2.3902928361974434 -648 578 -.8741637390991506 -666 578 -.834264300262515 -671 578 -1.4609904903473185 -672 578 -.6285967019849595 -676 578 -1.126033667505869 -691 578 .10492496999897338 -694 578 -.900926449675799 -695 578 -.4581218124501383 -701 578 .3894307525010339 -707 578 .8442575372942711 -715 578 -.2113800119150718 -731 578 -.07278724291232494 -733 578 -1.5756637165664171 -739 578 .17749633287418715 -745 578 -.9659513594392095 -757 578 -.598427239245122 -760 578 1.2594407321870897 -773 578 1.826155041917448 -774 578 1.0517595232104906 -781 578 .17469520839724767 -782 578 .25392171419106063 -785 578 .21285549340052307 -803 578 -.13256864515643502 -821 578 .12375378958505805 -827 578 .15769611440933573 -833 578 .46845128954587445 -842 578 .6064055378128544 -868 578 .47569001597506816 -894 578 -1.5145164806207605 -905 578 1.2153453529177394 -907 578 -.4212668188671673 -912 578 -.7290242365770288 -922 578 1.0896632711485958 -935 578 -1.4237227012770874 -962 578 -1.8918339561526227 -970 578 .07923503143188196 -979 578 -.7272412272140062 -988 578 -1.0264942568752589 -996 578 1.0349172486866762 -2 579 .30475515148817534 -21 579 .863248925115076 -23 579 -.6675482874853373 -45 579 1.2915220618546868 -54 579 1.1813882491907295 -65 579 -.5762161156450835 -72 579 -.9955745734878573 -74 579 -2.227343797650376 -92 579 .4470048659239749 -112 579 .7815504525119994 -131 579 -.26756515252042 -152 579 -.19205740000401156 -163 579 -.36216912334368545 -175 579 -1.015833499907604 -177 579 -.027709548662887773 -202 579 -.7224817739748454 -214 579 .27462177936130994 -217 579 -.11703844300152765 -226 579 -.99565045730507 -243 579 .0470452126828791 -273 579 1.3926409148486998 -279 579 .024202424332803715 -288 579 -.017204044518454684 -294 579 -.6531520007629159 -299 579 -.3481176405087302 -309 579 .07459356096888693 -315 579 .7594415760132119 -325 579 -1.5247005075147015 -336 579 -1.2697190645811804 -337 579 -.16084246572043326 -375 579 .6440235428502423 -382 579 .09109462827133008 -383 579 -1.0418100642535293 -409 579 1.7044194619666202 -431 579 .6252670653885439 -436 579 .17948200675886145 -439 579 -.9092111395182008 -468 579 .06293702101320792 -474 579 -.8933150225228496 -475 579 .48870258924148147 -479 579 .07017174832302885 -516 579 -.6034694723397821 -535 579 -2.1001730708689905 -539 579 .15787185872257428 -540 579 .04644395985485265 -555 579 .8519245051559741 -562 579 -.23495550886464037 -566 579 .0707609330000531 -586 579 -1.8443981453100124 -594 579 .17862582565914042 -595 579 -.22816132126884503 -605 579 -.7854497244251177 -620 579 -.8292529651862379 -642 579 -.6141127078886938 -649 579 .1566074953912706 -652 579 .30226523248739656 -669 579 .3205654047690063 -683 579 .07896479964838773 -692 579 -.5967058204919548 -701 579 .32335277628536363 -717 579 -.05822056954370608 -719 579 -.837523841051787 -726 579 1.4046025759110483 -734 579 -1.0430194386612426 -735 579 -.8990180279214037 -736 579 .764674284058267 -739 579 .12161767051469238 -744 579 -.26636867064713105 -775 579 -.8723090114556555 -777 579 -.018083945191017553 -788 579 .0411691215899366 -810 579 -.23069892913919748 -842 579 .9346295149584223 -844 579 1.7331426762120827 -870 579 -.8201411479039696 -873 579 .09401395880772884 -886 579 -.054691150185042434 -893 579 -.46152462771913155 -907 579 -.08955621850548959 -919 579 1.370960761700362 -922 579 .5930787321499935 -923 579 .6726642997883804 -927 579 -2.0631718401482475 -929 579 .12827311194608998 -936 579 -1.0799990303373035 -960 579 -.017130404803139626 -973 579 .08310031203690724 -981 579 -.6549397203838077 -2 580 -.715624594894634 -24 580 .8524110703399701 -40 580 .24351081752855674 -43 580 -.4910722281635482 -44 580 -.6235455993365178 -51 580 .6917440016107006 -56 580 -.8383814829250141 -57 580 -.6642387957460284 -62 580 -.5404553171470233 -65 580 .5567539124920896 -70 580 -.08273573729743178 -81 580 1.1871185922701604 -85 580 -1.8901465797890138 -111 580 -.9958280914125371 -114 580 -.20586763450797113 -125 580 1.468196817960863 -147 580 -1.388232269412609 -154 580 -.03228259183656747 -181 580 .014494427477675875 -191 580 1.0779318580837784 -192 580 -.39588700112636876 -195 580 .3922961392939802 -200 580 -.2692081399916142 -203 580 .1155878344726353 -213 580 -.17602173544990468 -214 580 1.3373472023852109 -218 580 -.28038772288703123 -221 580 .9887955439283993 -222 580 -1.2258070951844826 -233 580 -.6519691857036414 -234 580 .8233268527755139 -239 580 -1.4450490254716435 -243 580 .2678977171574304 -263 580 -1.0833614606920179 -277 580 .09000968572730772 -298 580 .5237058160008834 -315 580 -.3623597595870818 -333 580 -.32692635494801675 -338 580 -.7728840253099843 -346 580 .18682087191072533 -356 580 .09787258657024962 -367 580 -.8318540515603814 -382 580 -.5817150495922317 -388 580 -.7848094044996596 -407 580 .041210821864285575 -427 580 -.6406869198233599 -436 580 .8523241879477357 -444 580 -1.8880106724012584 -454 580 -.9883383338548587 -475 580 -.2885766899231605 -478 580 .07924019804790831 -498 580 -.7526717308903073 -524 580 -.23917558328954278 -542 580 .3682652405357786 -580 580 .25024638452434855 -582 580 -.6393580174292797 -589 580 -.3013265166714867 -614 580 .7783231223993831 -618 580 -1.1085452299043597 -622 580 -.05468477764665605 -627 580 .44700401555763614 -634 580 .13652634341218067 -640 580 -.7797902188777679 -641 580 .03747746811512423 -645 580 .06378972334606778 -649 580 -.29966650349371654 -655 580 .6655881011444158 -660 580 -1.4398628612486828 -675 580 1.1195873763848292 -684 580 .9761409060720517 -685 580 1.4328004564668393 -699 580 .186948679300332 -712 580 -1.1621478288181146 -739 580 -.8228761017883697 -740 580 -.849096457095576 -757 580 -.055386495549046455 -771 580 -1.1071153919998205 -786 580 -1.126320301491656 -842 580 .24073728015026497 -844 580 -.2775424551722016 -852 580 -1.1045933558101069 -854 580 -1.0536703072922111 -855 580 .10814511722794182 -857 580 .06584382360372189 -860 580 -.19884954472990152 -875 580 -.2198107647437795 -878 580 .4096383963425967 -888 580 -1.3150183559628505 -889 580 -1.0149112715778579 -893 580 .1533189846852523 -908 580 1.5935519689330435 -912 580 -.050910784771206544 -920 580 -.14196903307127237 -925 580 -.17181490408410963 -927 580 -.11870896343751472 -935 580 .7169332351397848 -937 580 -1.4081289795094714 -943 580 1.157541040605382 -944 580 -1.506826956990101 -949 580 1.67217308268942 -960 580 -1.0479979107260116 -982 580 .7870353424523888 -990 580 .9500157222640195 -997 580 -.8705930870242752 -5 581 -.7152015314115995 -10 581 1.0436406096020068 -16 581 .6362034935372585 -19 581 -.1042033075068702 -20 581 .4088558475212288 -36 581 .7150362819760026 -50 581 .9042570961636477 -51 581 -.9017471192490113 -74 581 -1.9268613893105837 -84 581 -.6457105035235938 -86 581 .08781379153083792 -93 581 .3369279899868983 -108 581 .7170975469868244 -111 581 1.4107626344303337 -113 581 .09325843162976678 -125 581 -1.199566967900114 -129 581 .9992308193441937 -132 581 .3051104680558213 -137 581 -.753478300276392 -138 581 1.6486068610990987 -147 581 2.146706230225847 -200 581 .45876824555892154 -204 581 -1.0774827549075052 -207 581 -.2515785134605877 -209 581 .1584757842979081 -216 581 -.34505819756245143 -231 581 .1029740850451302 -248 581 1.0971030379580555 -280 581 -1.7369377319400037 -303 581 -.45915728615758256 -305 581 -.11412186764074807 -312 581 -1.3055738073332737 -325 581 -2.5198123091725084 -336 581 -.6089865039062615 -338 581 1.3632314331584876 -344 581 -.51141718230784 -366 581 .7147041102188649 -395 581 .7377375094401841 -404 581 1.4102868084705689 -411 581 1.4080318236768656 -432 581 -1.3508002795031782 -433 581 -.3119640659581498 -449 581 .5784297200977282 -466 581 -1.3982067242556038 -468 581 .10228001289907929 -484 581 -.008821516224514131 -496 581 -1.2593895200659797 -500 581 -1.4258433712104543 -523 581 .40533090352974366 -524 581 -.8803634853884352 -542 581 -.07894698927283224 -587 581 .974041783087948 -592 581 .7076579057302983 -604 581 -1.6124965162506337 -608 581 -2.200014432257028 -609 581 -.1833070268680408 -620 581 1.3454733271121004 -627 581 -.47810053642319966 -629 581 -1.6298612592190653 -637 581 .8079847613042556 -688 581 1.503995098123187 -706 581 -1.1070273140128313 -709 581 .12215592532039603 -711 581 -1.1567616757612154 -734 581 1.2348178202942597 -743 581 .20143754691081595 -749 581 -1.6858343906911375 -752 581 -.4460300926563711 -759 581 .8339916341563869 -761 581 1.3233721266954024 -762 581 -.0038145197972508232 -763 581 -.6860296772117886 -769 581 -1.1557123074169837 -777 581 -.6878179273632083 -817 581 1.1346581120852661 -819 581 1.3720653097553637 -838 581 2.0671536759516713 -843 581 -.18090966108614823 -844 581 1.543477863246126 -845 581 -.020943727911466842 -856 581 .9109117466419001 -862 581 -.1229978987635613 -888 581 1.1317236268945539 -900 581 1.167376468558671 -905 581 -1.5565905645582492 -935 581 .2352559317610518 -985 581 1.033552007295592 -989 581 .21617902565815378 -999 581 1.760689472498448 -13 582 .08723366175934294 -19 582 .44356164575254386 -23 582 .04215616712234817 -24 582 .7276769375563303 -31 582 .21095839144210188 -35 582 .08740270676177825 -37 582 .285007469609541 -44 582 -.38717962926883026 -86 582 .9570167959206897 -89 582 1.2280766224408635 -95 582 -.5605040363504328 -102 582 -.4066079934510998 -111 582 .3988119102774888 -114 582 .9824300198698419 -115 582 -1.2090186664983684 -116 582 .2848694758680283 -126 582 .18432495453713404 -137 582 .18453478904755022 -138 582 -.4579573499607799 -142 582 -.7088762519284998 -147 582 .7037318892577629 -156 582 .15658243850155718 -158 582 .05975280288928486 -168 582 -.4751087499209004 -179 582 .20496730322630788 -187 582 .9522267565547441 -193 582 -.6299817682218314 -200 582 .1007148138473879 -202 582 .8900087603891378 -211 582 -.5619452717388989 -212 582 -1.4526771849753541 -214 582 .3031617669474189 -218 582 .4365811119696593 -234 582 -.524163001444855 -238 582 .866193753791977 -253 582 .5161066058737551 -260 582 .46786517440092756 -267 582 -.46090517083905 -270 582 .33379647854855354 -276 582 .24506514309909727 -281 582 .09840680255137235 -287 582 -.7368568133330528 -289 582 .49946405147369954 -319 582 .3950518225224606 -327 582 -.21254428847289508 -329 582 .7264331754015461 -343 582 .7598947686229296 -355 582 -1.105801410897193 -361 582 .9902508193212423 -380 582 .16912058227171264 -391 582 1.4358306527036362 -406 582 -.2305758705451535 -426 582 .4394123827516336 -432 582 .32066688462894966 -441 582 .5214251092569703 -444 582 .41959263192846774 -452 582 -.0686219031070456 -479 582 .30091025190726006 -491 582 .8783665229100436 -503 582 -.06930141787332544 -504 582 -.11267501638845434 -506 582 1.0013159714729045 -515 582 .4639818668112115 -518 582 -.436445306836064 -523 582 .4977765359447283 -551 582 -1.8571096344207432 -556 582 -.5725689288239306 -565 582 -.7949628854171855 -574 582 -1.044442968944139 -588 582 -.09641165633241239 -597 582 .01905004160744231 -612 582 -.36795412011186845 -642 582 -.25844496492846447 -648 582 -.10621615049845087 -666 582 -.5970269715997583 -671 582 .31167759033006565 -673 582 -.34287787416611426 -688 582 -.5637776788323446 -717 582 .3349626516574954 -722 582 1.017759793205441 -726 582 .2285288453264402 -727 582 -.03491964421462032 -752 582 .20626004296254286 -756 582 -1.4425848859338466 -757 582 -.8054420694356835 -787 582 .16884748728591975 -790 582 .36130510337498 -796 582 1.34925861748852 -801 582 -.4145398152951301 -805 582 -.12777058050658338 -810 582 .6234173192933703 -824 582 .912876999200836 -834 582 .43353878548312264 -903 582 .28179939783137187 -904 582 -.3922689406684169 -912 582 -1.35406919874918 -932 582 1.7897388290592136 -933 582 -.10695527137103931 -937 582 .11760292543335922 -959 582 .8527292666496818 -965 582 .20587890399816605 -970 582 .3001289427139217 -2 583 1.186340540938554 -5 583 -.19240305221522377 -10 583 -1.131601030038264 -19 583 -.037503835321041144 -28 583 .3072435965674251 -33 583 .16242909520397505 -35 583 .7932317278047524 -37 583 .3861416929437729 -40 583 -1.9402434214760478 -42 583 -.5282663197108936 -55 583 -.5988320079249673 -69 583 .5913900238877585 -96 583 -.9029475031593023 -99 583 1.1919413906490886 -106 583 1.2233718490426202 -119 583 -1.684568677853319 -129 583 .5062344594664381 -133 583 .5453041445342146 -136 583 -.7875366756368608 -149 583 -.6291907879593295 -152 583 -2.773784782311426 -157 583 .6007119558591569 -170 583 .5526976252476106 -176 583 -.40379404958591025 -179 583 .03480319346332178 -181 583 1.0930164357066747 -217 583 .13053353013805913 -229 583 .6021811001598902 -253 583 -.8934253477502384 -257 583 .7402407753702263 -261 583 -.49781308914437317 -276 583 .8659827072228087 -280 583 -.647026378276736 -287 583 -.9195923544797253 -289 583 -.21336701304275507 -324 583 .2252346467282169 -338 583 .7999210567949665 -344 583 1.0606813059555327 -346 583 1.007245365180089 -352 583 -.48332377054144393 -367 583 .13689423449527377 -379 583 .9105226064545057 -405 583 -.3228294646976464 -428 583 -.99001316306019 -464 583 1.0637060286806268 -472 583 .418830109598633 -473 583 -.9343323651137709 -493 583 1.8553439876461004 -494 583 .9761000073567349 -498 583 -1.4199506440981347 -517 583 .8714994747949759 -556 583 .4395152418832907 -559 583 -.9608293432010027 -574 583 .9382594281989488 -588 583 -.1824829593916445 -600 583 .11600088362620242 -612 583 1.8148269582814254 -617 583 -.2240076688777131 -625 583 -.4541039206685583 -652 583 -.510345852536358 -681 583 -1.8698947326871038 -683 583 -.1257946301048133 -699 583 1.6499771499640847 -706 583 -1.171013478430902 -708 583 -.907079789122482 -742 583 -1.1410102835104876 -749 583 -1.1902334750827843 -755 583 1.9916632323202634 -758 583 -.22712257846466427 -775 583 -.4778421747354946 -798 583 1.4306313140017024 -800 583 -1.8481989781595296 -805 583 -.09386610409158272 -808 583 1.0585196242434745 -820 583 -.951882910754849 -833 583 -.8477192006436252 -835 583 -1.3181597310719126 -870 583 .5040232647032762 -871 583 -1.0254810719446175 -872 583 .2165592453383663 -876 583 1.1419957191994818 -879 583 -1.3767273567748934 -898 583 -.14774186747630533 -900 583 -.13352493494217255 -912 583 .17832932896232467 -936 583 .43706238662533936 -938 583 -.11343972264743651 -942 583 -.5555301516792805 -944 583 .4614087734009425 -951 583 -1.3410801284976772 -953 583 .4057900578819072 -963 583 -1.236231549024689 -969 583 -1.1961005051416937 -971 583 -1.20959371592395 -977 583 .07226577671260317 -983 583 -1.6406492897641922 -999 583 .5915309118641396 -19 584 -.2704517468608623 -22 584 -.20683893183753832 -29 584 -1.3516118479955979 -47 584 -.9295997084969526 -62 584 .42170930124047673 -77 584 -.10564975094096409 -112 584 1.1441186613091328 -124 584 -.27695606012745727 -130 584 -2.08244124346543 -138 584 2.346395717193557 -154 584 -1.4512612384060777 -172 584 -.05873754881692066 -175 584 .8018058134243362 -186 584 .31795944156165823 -188 584 1.1235864525859263 -213 584 .11456695337544665 -214 584 -1.1684219804830331 -229 584 1.4394838870133977 -241 584 1.2257860647025018 -249 584 .03347120120893601 -251 584 -.8345456995187228 -252 584 .17871229257061905 -256 584 .0971224314578763 -258 584 -1.9194993252958534 -264 584 .9728233451369446 -278 584 -1.0324994094095996 -283 584 1.2532209144422424 -287 584 .6956077259851161 -289 584 -1.3291366975987837 -303 584 -1.2510898253882874 -305 584 -.3414284766375589 -315 584 .5109590633123368 -342 584 -.27904645408634726 -377 584 .08088244182350587 -426 584 -.026336659066637506 -431 584 1.146234748792437 -439 584 -2.2730878172539404 -441 584 .291477429323902 -445 584 .6439576474294949 -455 584 .5642803435126464 -463 584 -.2935544726415734 -465 584 .11586017794062126 -466 584 .2802793135954735 -488 584 .6490775396535778 -498 584 .8991219351674773 -507 584 -1.5409639360572684 -520 584 -1.7725660703206148 -525 584 -.3213923455464774 -534 584 1.368238971507967 -539 584 1.3850290144125017 -541 584 2.0064747674758956 -552 584 1.4656388575133308 -568 584 -.13362364603505641 -571 584 -.6524694640723347 -585 584 .23237112635199664 -592 584 .5100401702748042 -599 584 1.3460485613052424 -600 584 -.75960891867126 -616 584 .7343577381285399 -623 584 .7507172131160158 -626 584 -1.2935098485339396 -631 584 -.5679409180833904 -635 584 -.742888972210336 -643 584 1.105175778235796 -651 584 -.6141961458874609 -656 584 -1.70577450930368 -668 584 2.2191243567338907 -678 584 1.5348091883485002 -689 584 1.3089075231762117 -697 584 1.6007138751070706 -699 584 -.4151582645488171 -700 584 .679372194063453 -713 584 -.834514597688312 -716 584 -1.288536575296509 -724 584 -.41823829970439613 -731 584 .9930083154909914 -732 584 1.1253160734776682 -733 584 -1.1639002173393802 -736 584 1.1682319945701924 -740 584 -.39169114391398513 -741 584 -2.4732326971336454 -742 584 .4597301760871684 -768 584 -1.1993158696837858 -794 584 1.082623294615797 -798 584 1.2802135117368663 -803 584 -1.5135279444315883 -809 584 .5537156713264566 -815 584 .06256076432186095 -835 584 -.48303959622123127 -863 584 -.4858273303465448 -875 584 .8309190145107935 -878 584 -1.0503442381722605 -902 584 -.9325775572156871 -904 584 1.004888920452415 -907 584 -1.9094453306063202 -908 584 .8839501524924679 -911 584 -.9319975888795602 -924 584 -.004103692876847198 -937 584 .9340085856815786 -952 584 .1840663383132432 -974 584 .5255345964241436 -986 584 -.9433724617025971 -8 585 -.8580975527099989 -18 585 -.5002057446776722 -29 585 .07903883376752646 -41 585 .33853563617184307 -51 585 .7169992471490326 -57 585 -.6566752994401959 -64 585 .8869962470386308 -73 585 .875477147130255 -85 585 .041041423254506285 -104 585 1.3004962568517657 -110 585 -.41891985325718684 -112 585 1.7968602266609368 -117 585 .4133841525024479 -134 585 .28156457532691104 -142 585 -.5083040414714705 -165 585 1.2410054650764337 -173 585 .7291601253155813 -178 585 -.683936117921143 -183 585 .4376096827763237 -222 585 -.5826019820855391 -246 585 -.08345119165753605 -251 585 -.764771996235401 -253 585 -.5605631553640175 -260 585 .45867075546426517 -263 585 -.9228693068506473 -265 585 -.037194357103784444 -270 585 -.9194730926571586 -284 585 -.7464322073093712 -285 585 .7777023927429452 -286 585 -.8911713645142849 -294 585 1.1210653035257216 -307 585 -.15192938975843312 -324 585 2.503130347235218 -334 585 -1.507368111295833 -337 585 .34042468790669567 -365 585 1.3199380286578586 -373 585 .009327896108509523 -395 585 -.21173935795789028 -398 585 -.2048922350231742 -401 585 1.038014817737585 -406 585 .5428151883238564 -421 585 .41567959752234085 -443 585 -.7977159115791357 -449 585 -.15465392945965384 -457 585 .9298859542866317 -466 585 .14405703036282114 -480 585 -.13713442377885923 -483 585 -.08072496432561321 -504 585 2.306643728261621 -515 585 .706559733385445 -517 585 -.27479395888033514 -520 585 -.26133012226085733 -527 585 -1.3836705214814757 -528 585 -.8447463078641322 -560 585 .10620841033971382 -572 585 -.669648433961311 -585 585 .8211741598224975 -605 585 -.6768284001359731 -626 585 -.5158165917073306 -653 585 1.403657015643284 -662 585 -.2372333157920755 -678 585 .753834505410504 -712 585 -.5179059665067863 -725 585 -1.9236868204727577 -733 585 -.7142130075315298 -735 585 -.7771537019727186 -747 585 -.4069923309046717 -753 585 .004649943834472307 -763 585 -.05028026618271503 -778 585 -1.7810538228046813 -786 585 .41765279666563093 -790 585 .7814415820516211 -809 585 .04417681905682318 -823 585 1.6048191044685676 -828 585 .6723615370866389 -837 585 1.8131922042184272 -841 585 1.1362785793540495 -842 585 -1.1317873622462666 -849 585 1.2921792183705354 -861 585 2.45944575281452 -869 585 -.0015334354805164319 -884 585 -.8073877992799359 -886 585 -1.202590691755503 -896 585 -1.800478599649256 -899 585 -1.2039431023105325 -917 585 .04510278004211127 -934 585 -1.0662487536250531 -935 585 .43385973068968187 -939 585 .2996531978899921 -946 585 .8474492474513285 -976 585 1.0989244229842017 -980 585 .08234491218857433 -987 585 2.368745257047413 -29 586 .4719568481164122 -31 586 -.31557987569822726 -41 586 -1.1478629887951308 -44 586 -.150866759221498 -46 586 1.0543212821114492 -48 586 .4892744540356403 -58 586 -1.4482902741482309 -75 586 .6286244945349945 -79 586 -.5026226160033204 -108 586 -.06757096971944004 -127 586 .4178583722596823 -128 586 -.6677627276146232 -169 586 -.10596840934987295 -174 586 .23774897981948764 -183 586 -1.0511898166343334 -189 586 .04044437796459513 -197 586 -.4833778616262775 -218 586 .3898826079508848 -229 586 -.30764067987173616 -233 586 .9959331653816776 -239 586 .9398613457934746 -260 586 -.002811163643376288 -267 586 -.7725572621830764 -268 586 -1.1579384816976939 -308 586 -.8265366900631321 -349 586 -.4953347858332483 -373 586 -.71988517338511 -376 586 -1.0717212974542099 -377 586 -.0534364765258475 -405 586 .48326578529385333 -410 586 -.07508625998873145 -412 586 .05701554165608118 -417 586 -.9857810557378467 -428 586 .9565850065452912 -464 586 -.1529070141540953 -468 586 .21597565393008633 -477 586 .6515942865681771 -493 586 -.21874408941123524 -494 586 .3129547072371335 -503 586 .2261405004659061 -506 586 -.3196700831570352 -517 586 -.782685885162608 -545 586 .5038835276671867 -552 586 .5535273790534271 -560 586 -1.0629133998490166 -566 586 -.5283911547190686 -567 586 -.3141639611057844 -571 586 .13578801870050383 -580 586 .9977711114423543 -588 586 -.45910731746279904 -591 586 -.21454068351455982 -600 586 -.33945171603611973 -602 586 .2007308558417812 -604 586 -.5665168885346857 -608 586 -.448284113022865 -617 586 -.7765087389630364 -623 586 .17057343077600556 -632 586 .42496699797404974 -635 586 .052666313625795935 -638 586 -.1344627792280542 -644 586 -.1264284361217542 -660 586 .00742624640338407 -667 586 .7806605101194808 -704 586 .7467703401982486 -705 586 -.19193655376590146 -712 586 .054184508357307544 -726 586 -1.0387080987228843 -730 586 -.09813329516676306 -736 586 -.6288481037884857 -741 586 -.3848143149063249 -770 586 .34989105043250124 -772 586 .5470815376691979 -779 586 -.07481753953479323 -805 586 .899541898015437 -821 586 .30532334556516905 -843 586 .5574867988752816 -850 586 -.35096291482494224 -855 586 -.10430955073158366 -867 586 .42912669479904014 -875 586 -.05389656013975966 -882 586 -.7355268698575445 -884 586 -.628011423685677 -885 586 -.37908787161335755 -908 586 -.13686967741534511 -911 586 .2810357792173725 -914 586 -.10551089760589977 -939 586 -.10662274960807651 -960 586 -.7532355304118465 -980 586 .13373354489894143 -991 586 -.6535120716926163 -46 587 .92757984502456 -47 587 .6649587260531293 -52 587 .6310511802452041 -57 587 -.7456518741368858 -60 587 .7710003041447023 -72 587 .6763429521682125 -77 587 -1.0516060885229725 -84 587 1.1139862575397197 -91 587 -.843390002590338 -108 587 -.14713216090644238 -111 587 -.022435796221536047 -136 587 .6799188239425826 -139 587 1.0563316051847544 -148 587 .23845796977141173 -153 587 -.16382896973630623 -154 587 -.3757219687623889 -163 587 -.6802958775857656 -164 587 .16846997396550423 -166 587 -.8781989598856125 -180 587 .3036309674992367 -182 587 -.1275525254138321 -187 587 .05393817772085079 -200 587 -.409154437089616 -208 587 -.17601455389234322 -210 587 -.17149889439130261 -213 587 .6162582832003749 -216 587 -.44173421541270774 -227 587 -1.2196400610432019 -241 587 -.6316937910642011 -247 587 -.7582999908229713 -252 587 -.9454526203775553 -278 587 -.17084027293317858 -293 587 -.7347760948515316 -304 587 -.1600698296946628 -305 587 .25131085509844403 -339 587 -1.1395923363965161 -369 587 .16578808276839307 -376 587 .16562705104156078 -377 587 .6348424519627097 -378 587 .7668218711779184 -381 587 .07621380159263345 -385 587 .029171783045984084 -389 587 -.18034124380913702 -398 587 .46554261289579135 -401 587 1.7419510707524255 -406 587 .7348677559246816 -407 587 -.3061365031008207 -430 587 .25800068175678204 -445 587 .4846136937999831 -446 587 .5810345492842571 -465 587 -.3653362244658912 -468 587 .34657083249311516 -469 587 -.04634754435051211 -494 587 -.6478112452949488 -504 587 .9945866440577376 -511 587 -.08083078344752163 -516 587 1.2118849301670476 -524 587 .31116561728231495 -525 587 -.6193070052648066 -529 587 -.6256432324179614 -532 587 -.7725821271233392 -534 587 -.4684502068876098 -537 587 .581235497156342 -539 587 -.33199862882106806 -541 587 -.3412846779269769 -542 587 -.1443097812016236 -561 587 -1.0139357888602034 -566 587 -.6719626651104608 -576 587 .39942910562236855 -577 587 -1.071931887919514 -589 587 -.5926426318095659 -591 587 -.25550141832619633 -601 587 .020239949008376168 -648 587 -.7731514796666267 -649 587 -.6287815521585266 -657 587 .021935677259046493 -665 587 .0685000674283494 -668 587 .03627113441821612 -679 587 -.7262953829680918 -693 587 -.08025236055810864 -697 587 .5985582843624573 -700 587 -.9160160175981055 -704 587 .6975704980056059 -706 587 -.29886938837794913 -723 587 -1.1853021442474985 -728 587 -1.1228336803281815 -729 587 .36218348775927645 -730 587 -.05401455213408051 -731 587 -.17207108971596174 -733 587 -1.0636754606700305 -739 587 -.3913571166056842 -752 587 -.340129148680122 -768 587 .5612819309405781 -772 587 -.5234932067969214 -776 587 -.4344635402602602 -794 587 .44906590055263174 -806 587 -.9200795487920347 -824 587 .9912542873134255 -831 587 -.036900882419901804 -835 587 -.2871361204708254 -843 587 -.0015325940181776486 -852 587 -.25351833174655236 -858 587 -.417841726502137 -870 587 .8694628606203447 -897 587 -1.6829450805617947 -901 587 -.691658028341331 -912 587 -1.1577731254721013 -913 587 .4563903523574208 -930 587 .1683621569989546 -934 587 -.5854664904318121 -948 587 .40657970603835925 -951 587 1.2706824860473498 -959 587 -.18670386253563287 -972 587 .03856330073497235 -981 587 -.2886204176546027 -986 587 .5618126534661475 -987 587 -.07767356868213335 -994 587 -.10526946698570526 -12 588 1.7115344888679669 -24 588 -1.517561495870834 -27 588 -.6791583229478994 -44 588 -.2405094282949029 -102 588 -.48632448818480917 -124 588 -.4091702851552428 -149 588 1.0805202991168967 -152 588 .4071225902809775 -160 588 .03152808497504965 -169 588 1.864855689766713 -176 588 -.7274543317145156 -205 588 .3759115237651626 -212 588 -2.869711601547712 -214 588 -.9281392521538339 -217 588 -2.0973070170497565 -247 588 -.02545160684141247 -269 588 2.4045857463733884 -271 588 -.4239713096683844 -282 588 2.8103820621543116 -293 588 -.709512476746657 -308 588 -.3947140601783286 -312 588 1.1914664608820011 -325 588 1.5504329013221667 -333 588 -.5758487226002439 -343 588 -.40042603785954883 -348 588 .24552544088048395 -396 588 -1.0866631586075528 -404 588 -1.3442735710507479 -410 588 1.0050751662921242 -423 588 -1.9485023195107947 -437 588 .27164554762343834 -441 588 -.7348759437074296 -443 588 .9582012460764102 -448 588 1.8858637091556576 -465 588 .8340918527487141 -471 588 -2.6307993695012493 -473 588 -.33252686324382685 -486 588 .299370315539795 -492 588 -2.7511777839722336 -502 588 1.1765501516706776 -511 588 1.3010103167707123 -547 588 -1.3379946293306695 -561 588 1.2140833417658434 -564 588 -2.4256159146689447 -570 588 -2.099886303716229 -572 588 1.0496748080368632 -598 588 -.04270091607994589 -616 588 .6311151349256032 -623 588 -.7117249242794276 -625 588 -.7287471205358594 -626 588 -.017683959124356607 -639 588 -1.8778291537837009 -645 588 -.9809654412302352 -655 588 -1.3259625361191096 -673 588 -1.3573531390706675 -683 588 -.4871275392551842 -685 588 -1.0010796166047644 -692 588 1.957559387026676 -703 588 -2.093009843754118 -758 588 1.024856040116886 -765 588 -2.4662550715456195 -786 588 1.4008137188987666 -802 588 -1.270242647852325 -804 588 -.24601262113008077 -814 588 -.23230024675615385 -815 588 .4188155980825182 -831 588 -.23027118186504278 -841 588 -.45082808493281523 -843 588 -.4204826457827936 -851 588 3.2144221820398213 -852 588 1.6041868230177954 -869 588 2.0713615982091067 -874 588 .3391087157015083 -877 588 2.1357777923724486 -881 588 .1736643186348076 -883 588 .23554370865816887 -891 588 -2.550046425822581 -904 588 -2.6710806479829543 -907 588 .7772525642248503 -914 588 -.6849133913763421 -919 588 -1.884568364647404 -949 588 -.5908949186757398 -961 588 -.6648976636423899 -979 588 .8413764942292059 -982 588 -.025712352650961723 -985 588 -.33929946083652857 -988 588 -.6154970993996529 -5 589 -.031052217023337852 -15 589 -.5389788491074546 -42 589 -.8668905355377061 -72 589 -.7985250244881397 -77 589 -.12479424197339739 -95 589 .6089382831537569 -97 589 .3217090328807386 -116 589 -.0683107974720306 -121 589 .025728701194616163 -123 589 .3027417088122914 -124 589 -.7963510460129001 -134 589 .5777266258508637 -138 589 -.6410569692851447 -139 589 -.8309707628646453 -143 589 -1.378305534100291 -144 589 .17765735203677344 -150 589 -.2105087885467269 -156 589 .33303522589973855 -157 589 -.8727386880446766 -160 589 1.210075839626889 -162 589 -.6162716875352077 -169 589 .9432791814121242 -170 589 -.08650824534877982 -175 589 1.1650575313463738 -191 589 -1.1529670831870644 -205 589 -.6092757787647889 -210 589 .5741149188245331 -216 589 .10460553762316871 -220 589 -2.5974623848946474 -221 589 -.48117179039914343 -233 589 1.0914352810576273 -237 589 .35286155356573645 -240 589 .7864761449744812 -244 589 -1.4912935066019568 -246 589 -.3698962545876675 -260 589 -.03343781813452679 -263 589 1.1383407912500192 -272 589 .6062867952125974 -291 589 .38159844116832226 -294 589 -.8265552312588825 -313 589 .6241677727245327 -315 589 -1.0691451471617013 -324 589 -1.2696900906015247 -333 589 .7767117697536144 -349 589 -.4975291327436562 -354 589 -1.503679244742221 -359 589 -.009955855817516984 -361 589 .28711787927599464 -372 589 1.5386308546219205 -392 589 1.022648714196513 -397 589 -.40567272187903863 -401 589 -1.4468423693887156 -404 589 1.5747303208650476 -406 589 -.019987725996340272 -416 589 -.7377454933399484 -426 589 .3924495627964181 -433 589 -.07098140375525676 -438 589 .19455482298118615 -440 589 -2.121239611188677 -458 589 -.010035904171473056 -470 589 1.2034063974731852 -475 589 -.9275125022031006 -482 589 1.1402295028448282 -484 589 -.5385762404442802 -489 589 .06932634160040838 -513 589 -.19497124158563534 -518 589 -.03193569031635983 -520 589 .6827806484038261 -532 589 .7952562438997051 -535 589 -.13433453746150653 -543 589 -.38042181130255676 -553 589 -.35629173933608926 -583 589 .22852037824242186 -589 589 .12652754295065577 -592 589 1.0506688168013951 -613 589 -.031412729143640364 -616 589 .9273766785111748 -617 589 -.416294252381174 -626 589 .09376140351377432 -630 589 .31325875062461384 -631 589 -.33719833195282883 -633 589 -.6002255890217472 -651 589 -.7594486930561549 -654 589 -.16947761571843356 -657 589 -1.1798539331493871 -668 589 -.09846421955771338 -671 589 .5067644475438385 -706 589 .21905997738623192 -723 589 1.233957998685578 -725 589 .6275719311151461 -733 589 1.0711145381231677 -740 589 1.5636696778383987 -763 589 -.1847946291730587 -785 589 .2905167469668475 -787 589 -1.3485054731580202 -790 589 .3773381438572077 -794 589 .3185883136800821 -796 589 1.1609399296144625 -800 589 -.013696117547317685 -821 589 .9228863328294301 -822 589 .7453517995231735 -849 589 -1.8156715686716156 -873 589 1.2349181803693676 -875 589 -.06991097980178203 -888 589 1.917237548403364 -891 589 -1.1546373169496804 -900 589 .45335030356116107 -914 589 -.4945479075578867 -919 589 1.635838416155926 -923 589 .11911875039863314 -931 589 .5127496816211744 -932 589 -1.2409927634524596 -938 589 .25575593706763544 -941 589 .3508319045599874 -950 589 -1.1371036476351226 -976 589 -1.2122799183056356 -988 589 .6322808009437931 -994 589 -.1459320272889115 -995 589 .13690447273280393 -16 590 1.004968486013171 -28 590 -1.1032464797477701 -39 590 .2876535383146279 -51 590 -.32123833723465267 -60 590 -.14123473790198876 -89 590 1.0110395485425132 -91 590 -.47215440257024716 -101 590 -.31433399670101564 -102 590 .19609272833373106 -117 590 -1.1228943357309122 -145 590 -.30198952631075 -147 590 -.48979005424614197 -157 590 -.5439205632242203 -159 590 -.5640643390088492 -160 590 -.32324456348686215 -161 590 -.5634994690305644 -164 590 .47788825766342335 -169 590 1.2543491725599787 -177 590 -1.6008292295450062 -191 590 -.44621493650886257 -193 590 .8048200918572351 -200 590 -1.1419504893325556 -214 590 .019949051376696017 -231 590 -.08437369751846002 -235 590 -.24129532240144497 -237 590 1.4612575563925747 -244 590 -1.340719993284696 -256 590 -1.259408209211057 -267 590 1.4035132674877415 -277 590 .44192377822121764 -284 590 .28085006733956563 -293 590 .47259157148915226 -300 590 -.36874698779109244 -328 590 -.4946391769792602 -329 590 -.33603236350977655 -335 590 -.6065410167501412 -359 590 -1.5655073311914085 -379 590 -.03157636346146486 -382 590 .49676718871118575 -396 590 -.18362924580349824 -401 590 -.2094492122817404 -410 590 .79324532142448 -411 590 .6698243117585587 -418 590 .97931929083631 -428 590 -.9313225663337115 -436 590 -1.3308063952954154 -475 590 -.7258396165843938 -478 590 -.03135508844000909 -484 590 -.23660924487782123 -502 590 .38867059415296884 -504 590 -1.0328955921045047 -510 590 1.7110706889957927 -512 590 -1.8632981904792603 -545 590 -.15285257117866802 -551 590 -1.4886849975881598 -554 590 .17487852302898077 -556 590 1.1712097547456872 -568 590 -.54537077084628 -583 590 .5417135322964072 -616 590 .05763152433086932 -620 590 .19538600820041918 -644 590 .4950880500643214 -665 590 .5725652739424142 -666 590 .5764749484014426 -676 590 .266441870771998 -692 590 1.059765809992265 -702 590 .7934228663941028 -709 590 -.0143956962401727 -714 590 -.17362618665513732 -732 590 1.5728391430874888 -743 590 .5779155023894195 -755 590 1.2784644812766022 -766 590 .5412320633942085 -776 590 .5865364131436447 -815 590 -.5408995550444552 -824 590 .7165550789187117 -836 590 .5085090129053157 -848 590 -1.2070562781952445 -862 590 -.7001892675741515 -867 590 -.14855363986620007 -870 590 .23127585824138064 -872 590 .21376736478508193 -878 590 .2224107388730024 -879 590 .9450973028070785 -884 590 .5510849661234158 -885 590 -.5758428859358824 -891 590 -.9449303693092943 -908 590 -.21152133090352895 -914 590 .16686628258423417 -917 590 .8106647590543261 -924 590 1.2835096895671572 -938 590 .1504588377867595 -947 590 .18310154716513394 -949 590 -.6077154103549101 -957 590 -.833003546427477 -961 590 -.2040432718059158 -982 590 .255015269521898 -992 590 -.9000029015030037 -995 590 -.8215421163510953 -3 591 .80722506508267 -12 591 -.02711535603787238 -25 591 -.4204092812864252 -31 591 .19017545176383777 -39 591 .2966993275450289 -52 591 -.8634605869049495 -58 591 1.227930210509939 -68 591 -.40058555102938576 -69 591 -.3155926009089402 -75 591 -.9014340200014045 -78 591 .6485265039675976 -83 591 .8644720662468346 -98 591 .24767324794756632 -101 591 .9275509301710317 -104 591 -.31539634301929 -108 591 -.4889950742010276 -112 591 -.5617476163543651 -132 591 .25308816682493335 -136 591 .5665628745462418 -154 591 -.33174352667950724 -163 591 -.10845463373193794 -173 591 .06134685538295538 -177 591 -.7483893612246314 -181 591 -.5236999732230221 -199 591 -.19557879387594299 -203 591 -.7191488357927646 -232 591 -.6580327232110588 -233 591 .007897219497224356 -243 591 .24899954956564815 -247 591 -.33057304729091697 -248 591 .704479676368654 -258 591 -.2706095348668013 -266 591 .6627392668229564 -281 591 -.39228571656307737 -290 591 -.07537670200955418 -298 591 -.2456423262792148 -306 591 .09233713612582689 -308 591 -.2686293926711057 -321 591 -.28348631207181374 -334 591 1.6449297103800968 -343 591 .02144614495507697 -355 591 .7525851216252387 -360 591 -.5314069644315423 -368 591 .17655377695587068 -376 591 .15861392180236994 -382 591 .32149071072226193 -394 591 .2560226108191262 -396 591 -.8003957171828007 -401 591 -.25676998344914126 -403 591 1.2930714476163403 -404 591 .45757704960178414 -425 591 .8521258274568166 -426 591 -.031465965091716355 -430 591 .7458629706282035 -434 591 -.9121053398433531 -453 591 -.8358696454493796 -459 591 -.17553888237566506 -468 591 .3902436386736102 -486 591 1.2856771072222652 -516 591 -.1906773224585807 -535 591 -1.1807533883455945 -538 591 -.3072644610985398 -541 591 -.2779906504672228 -574 591 .4738023571416209 -584 591 .39675239634090276 -597 591 .42130007211484355 -599 591 -.09415694277986592 -601 591 -.2350066802685171 -615 591 .23750096186131997 -626 591 .5286110274781375 -627 591 1.1494813150841752 -633 591 .6460592419247337 -635 591 -1.343262949527908 -640 591 -.21428574425942842 -645 591 -.8220331526508551 -646 591 -.2587584993812678 -656 591 -.4146739926771244 -661 591 .24045301444072892 -698 591 .6325999602968152 -714 591 -.2043149322797875 -716 591 .5445321642964278 -723 591 .37887570374552326 -735 591 .07165054389504469 -737 591 -.3065589534504025 -742 591 .537858632368452 -745 591 .36937436294096176 -757 591 .04413851609179695 -765 591 .7827615025385624 -772 591 .8923890591277189 -778 591 1.4280730113512048 -786 591 .6828828434442058 -800 591 -.3198569164536661 -801 591 -.3776935180925818 -838 591 .5323657299016278 -841 591 -.39315361309088814 -843 591 -.474412098105608 -848 591 .9049621343485126 -849 591 -.849002739300202 -859 591 .34678562533028656 -862 591 -.8750302134246644 -869 591 -.45713391474637943 -884 591 -.021766769948272084 -891 591 -1.4275660071931118 -892 591 .6680295731589762 -893 591 -.1621300340769038 -907 591 1.1164067711849683 -913 591 .2607719431482643 -943 591 -1.213577726793974 -944 591 .27523487681123116 -955 591 .8171317267947916 -958 591 -.25139462311282473 -959 591 .13791841697510504 -978 591 .24248115745527754 -1000 591 -.5426934546476764 -14 592 .10244025830511756 -25 592 .11628463705844644 -33 592 -1.0917580175909616 -43 592 .19876780000827635 -46 592 .2843592224266498 -54 592 -.1276830975966683 -59 592 .8182050380133723 -68 592 .31516733319972834 -73 592 -.5757890846251339 -81 592 -.8454297107557809 -88 592 .21776594079210404 -90 592 .06857602011180353 -110 592 -1.972872901741965 -118 592 .17817727551709284 -125 592 .35429463750205326 -128 592 -1.019687440623366 -143 592 1.176666138661465 -154 592 .8736184547234146 -180 592 .5887166555791647 -193 592 1.454168377847854 -219 592 -.02865476727306613 -233 592 -.41693427593517884 -236 592 .5006868600425525 -238 592 -1.2292445681005215 -243 592 .29775509607639444 -246 592 -.8388384711454014 -247 592 .27258277961153 -254 592 -1.772553407023233 -258 592 .2768935638714101 -262 592 -.9116718200323641 -264 592 .7577363161482513 -265 592 1.2427190161960473 -323 592 .8076273153001976 -355 592 -.4997352185192758 -360 592 .39341584388050466 -368 592 .8152708304142072 -373 592 1.316864186814943 -381 592 -.4384562329844274 -386 592 -.39479785241649257 -391 592 .8887029062633051 -442 592 -.6088821976554196 -454 592 -.5868286599393187 -505 592 .8994428168064658 -529 592 -.08364283800011757 -532 592 -.6168838945559622 -541 592 .3726727752390958 -543 592 -.008557594604956642 -547 592 .16193926867284142 -549 592 -.376654959197788 -560 592 .18944927100701323 -565 592 .8695463073185827 -576 592 -.5648070098587781 -579 592 -.45189045419365215 -616 592 .05826797563890765 -617 592 -.08630586802930257 -619 592 .16707075280711634 -623 592 .633222612723949 -624 592 1.686660872815927 -644 592 1.1869912266269262 -646 592 .6255490480457404 -670 592 .7534318393467169 -671 592 .6356223112268646 -679 592 -.2464092412331097 -684 592 .23788285290405087 -688 592 1.248580690801874 -704 592 .01951602083101804 -721 592 .509786252107118 -731 592 .062424324702460635 -732 592 1.2379519446591762 -749 592 -.6841112712467446 -750 592 -.7774810951997011 -752 592 .633854543727282 -755 592 .23997793035577794 -779 592 -1.0869507147891926 -784 592 -.7711457359867895 -789 592 .8293829705969512 -795 592 1.8695129646022504 -801 592 .00591060015322907 -818 592 .7675545112794137 -819 592 -1.0534959276274332 -820 592 -1.0913088206830084 -826 592 .6093350731854175 -835 592 -.566880134071331 -836 592 .22987728746906694 -837 592 -.38123966428923023 -848 592 -1.310216001533487 -850 592 .012106140279115642 -856 592 -.2034689083252696 -880 592 -.6785341110504849 -892 592 -.8140530207901667 -893 592 .03949550957371811 -895 592 .05819121723133888 -907 592 -.9244260791902607 -913 592 -.823275046584636 -923 592 -.34264582281694034 -926 592 .8841007102896128 -948 592 .044708247502929 -953 592 .5867860082351022 -965 592 -.23716836229089625 -969 592 -.41319623627444996 -971 592 -.5979235931378087 -982 592 .014490618635125671 -986 592 .68190118206742 -989 592 .5491741233881211 -990 592 1.2497649875285455 -999 592 .37444606504109346 -67 593 1.553486602221151 -80 593 1.6994177245664872 -83 593 -1.2663374179196656 -93 593 -.6655133782132692 -94 593 .21026994594397674 -103 593 -.8041459059626446 -105 593 .15841613277286226 -114 593 .06689432666607575 -135 593 -.6820630405503757 -146 593 1.3173596681785773 -149 593 .8755198629403337 -150 593 .29267496870554793 -155 593 -.18372286591537362 -168 593 .6951814038978978 -172 593 .32762439013266065 -173 593 -1.1618781826533882 -175 593 1.3469974100848374 -197 593 -.9721195284059692 -200 593 -.7913514162976756 -208 593 -.895683517290387 -222 593 -.5473804590107151 -224 593 1.063333633521062 -229 593 .06415714447265493 -230 593 1.4534745529510893 -233 593 .07403611861722909 -235 593 .862493550099697 -238 593 -.16235741132632042 -243 593 .510890735631984 -244 593 -2.0676139494597536 -256 593 -1.574234778383975 -259 593 .8092565963013016 -292 593 .14381091371957253 -297 593 .9438908432704096 -307 593 .940975594902295 -308 593 -.868807884444257 -309 593 .1582867916452927 -316 593 -.8152458235715012 -322 593 -.9542883221638974 -338 593 .4728858249256049 -347 593 -.2774045284897997 -369 593 .1999747780675502 -373 593 -.20641867234954916 -376 593 -1.8689008206150686 -394 593 -.6088020789502689 -404 593 -.20227093686460496 -409 593 -1.2206956301938336 -414 593 1.3147102397288266 -415 593 -.1935109992550974 -418 593 .3855253294438778 -446 593 -.3176569144520521 -448 593 -1.212279229137065 -450 593 1.6824631178046363 -455 593 1.7440589891878022 -461 593 .15230014386030782 -468 593 .026911434818417318 -479 593 1.9817437598324177 -484 593 .6161707631655992 -485 593 .5944032790367342 -495 593 -.5603434748272342 -508 593 .2353658725653019 -517 593 .08754565290983715 -518 593 .9917967832465195 -526 593 1.1787791271077308 -527 593 1.683408159370035 -529 593 .6734975241654574 -544 593 -.05824665862422399 -570 593 .3099114818417318 -583 593 .5648531412422635 -589 593 -.050848470571142695 -600 593 .32843457999243275 -605 593 .3035120007001407 -608 593 .25177575412473924 -628 593 .9720075642388714 -635 593 .5469063617527293 -659 593 -1.5656385462000804 -669 593 .6850590397839194 -679 593 -.5621886874245545 -681 593 .2677123563672375 -691 593 -.15499563708529948 -711 593 -.1466316517861445 -729 593 -.1029210627442334 -731 593 1.5433184737141068 -744 593 .24699836405921813 -749 593 -.46145663529203096 -751 593 .05553452352040285 -778 593 .11509850730353785 -787 593 .36716362353314685 -796 593 .7814648179222148 -798 593 -.011096029073363961 -825 593 -.36359294422894517 -826 593 -1.0533478840276451 -827 593 2.9715148865852448 -865 593 .09083576139964983 -867 593 1.0992650556518424 -869 593 1.4077975904390159 -879 593 .5374689385035775 -880 593 -.2244683876059026 -883 593 .9186501252882859 -885 593 .36570519004216884 -887 593 .35521724102287977 -896 593 .4310671234248416 -898 593 2.9758190051217284 -901 593 -.3938037798876792 -903 593 -.18036069245525388 -915 593 -.6147095005346354 -925 593 -.5384764163550128 -928 593 -1.5574500223968872 -929 593 1.967204721658608 -944 593 -.7415644175338473 -952 593 1.1482181633308366 -956 593 -.800950965114917 -972 593 1.38943145716828 -990 593 .9112178908115622 -997 593 .4342258849375752 -36 594 .44998564387920326 -48 594 .4392632226604613 -59 594 -1.402668981385574 -99 594 -.8329457038321809 -103 594 2.014161694813261 -127 594 -1.793176273740245 -157 594 3.2003384125868246 -164 594 -.13430206399968597 -165 594 -.9973217367586795 -179 594 1.1240174636170142 -183 594 -.8390616233338338 -190 594 -3.0872144700059114 -198 594 -1.6208455494163572 -220 594 1.9890987705109338 -230 594 .24031325071771137 -257 594 2.705391247690725 -264 594 .12419417729123086 -269 594 -.3916163843793782 -291 594 2.2146583402897235 -294 594 -.5542090880157916 -309 594 1.061982793086255 -324 594 -.08111223864572778 -325 594 1.3941766558716089 -334 594 .2299596865119754 -384 594 .09487676289384953 -391 594 2.1141224934834133 -400 594 .7208643224962417 -422 594 -.6856262652901082 -424 594 .17357267240213403 -447 594 .28731434848731285 -448 594 -1.1266082065631777 -450 594 1.1197040107792737 -471 594 .17806854794227295 -480 594 -.4111771739306356 -492 594 -.0906380001282087 -503 594 .1457488489155191 -517 594 -.2652878403868674 -518 594 .1200609933581604 -523 594 -.8472468588269738 -525 594 -.7561043338124755 -530 594 -1.3851621574279878 -546 594 .9261084228234673 -551 594 -2.311810809933446 -553 594 -.007369405369984899 -558 594 -1.6031531247413184 -564 594 .08442009450198477 -567 594 -.6682662313412178 -583 594 -.8376886305449597 -587 594 .40503447220088795 -592 594 .2264239877780586 -597 594 -.7246943438217885 -632 594 -1.815193115840295 -639 594 -2.075309231686966 -649 594 -1.1504798915653505 -652 594 .13306200185742711 -660 594 .7250686932683115 -661 594 .047715274570264254 -666 594 -.5038839046372903 -680 594 -.8015096689718537 -683 594 -.9756550159780005 -690 594 -.08162707456979344 -700 594 -1.959765042410255 -703 594 -.44357514068361825 -707 594 -.30711956943822405 -712 594 .29732009647595786 -715 594 -.9324489815324738 -730 594 -.1795188683235574 -758 594 -3.06463173491674 -761 594 .13053004031688464 -771 594 -2.5103857422753078 -780 594 .07240889256036023 -781 594 .251995729271115 -785 594 -.9721327863181871 -787 594 2.2847006936966494 -791 594 .057320103225885086 -792 594 1.284447584701247 -798 594 -.499487300252857 -799 594 1.1973311925220615 -808 594 -1.7761707204008317 -825 594 -.8822754095439049 -838 594 .10390805124933868 -886 594 .7519170471003936 -907 594 1.7694354153850465 -910 594 -.2633488523338685 -914 594 1.653506522376678 -915 594 -.5501589197068545 -925 594 .13397071285335455 -937 594 -.7548031270491802 -948 594 -1.2983016957546425 -955 594 -.09760705283279199 -967 594 .12160673944976771 -976 594 1.4871317164236804 -986 594 2.4704778708298276 -3 595 1.0929465835642125 -5 595 1.2227996454699728 -6 595 -1.4639441444131684 -16 595 -.12952460240341052 -18 595 .5326860359490926 -66 595 -.5611924049471961 -67 595 -1.360937088717096 -70 595 -.5202851033793899 -73 595 -.09077133891174523 -82 595 -1.8072567549125031 -85 595 2.8205916344685047 -102 595 1.9133853311612483 -113 595 -.2957659759602205 -117 595 -1.9715729603836332 -126 595 .6795109451437503 -138 595 1.6035150445946222 -143 595 -.07609198082389604 -171 595 -.4555419335737501 -189 595 -.6688778861295381 -210 595 -.6542863362250152 -213 595 -.12471654643106024 -229 595 -1.4851209370275744 -238 595 -.782537864661616 -239 595 .39116511608316673 -245 595 -1.3990358002510828 -250 595 -.4224243238808422 -252 595 1.3922958073258984 -256 595 .17614402201499857 -264 595 .018063673251905416 -268 595 -.6867745480367959 -281 595 1.469495354920523 -286 595 .734419100615372 -325 595 .3248450617810438 -354 595 -1.815977495029184 -356 595 -1.1466223157307385 -360 595 -.17435148619048185 -390 595 -.7697802551011864 -396 595 .998796738132362 -404 595 -.3592563345317424 -405 595 -1.1294298746654121 -420 595 .8075218640729054 -444 595 .18941071773938978 -446 595 .6028943768800155 -452 595 -.039665467816239156 -469 595 .8866546192393054 -477 595 -.7744661917624918 -480 595 1.1333960950642537 -515 595 .9480022083216948 -524 595 .20734385736090039 -532 595 .2268418391728739 -552 595 1.1197250343621221 -556 595 1.1603939157810659 -576 595 .6453710407576636 -579 595 .4933046790601559 -587 595 -1.0756393521056147 -592 595 .7797463623971839 -615 595 .07693714563727588 -628 595 -1.3095141157640149 -629 595 -.20111554770975945 -641 595 -1.1682626716536832 -660 595 -.5821859870936957 -680 595 .4534372287855554 -681 595 1.786956412407907 -688 595 .5956347613767273 -693 595 -.12121799333057125 -695 595 .1226869978982294 -707 595 .5005290407290973 -726 595 -.8931620064124771 -730 595 -.3430483842119894 -764 595 .6800355550146109 -793 595 -2.496089859193847 -807 595 1.2613482239059706 -819 595 -2.1774941709414612 -822 595 1.5450398938576706 -832 595 -.27321040420491594 -842 595 -.4176010632099904 -843 595 1.3440349760945114 -847 595 -3.242332156594423 -854 595 .9940368237044822 -861 595 2.0398722638279465 -872 595 -.608505992545036 -888 595 .886936210435666 -896 595 -.8711468499462317 -899 595 -2.7961898656248745 -909 595 -.25834376666809095 -913 595 -.03847255444533492 -929 595 -1.0393652805480509 -934 595 -.24416168975351502 -948 595 1.1433124654871567 -950 595 .04783406041841495 -965 595 -.6594734888037951 -979 595 .005539568620971352 -985 595 -1.0009028157843116 -30 596 -1.4346033747483704 -49 596 1.3664747548876541 -65 596 1.9528993094533253 -81 596 .3429903068163026 -83 596 .23274540848070985 -124 596 -.11163334353963175 -129 596 -.35758234120193333 -130 596 .1157412922756869 -133 596 1.0952673909491748 -155 596 .13023919656008773 -171 596 .6309672950368984 -172 596 1.6648117847180384 -174 596 -.30114734865112147 -178 596 .16430985931708852 -181 596 -2.0698759848388986 -185 596 -.03557448622834239 -211 596 -.8348699436305439 -216 596 .9914209057415875 -222 596 .1400769832923378 -232 596 -.1489547390954033 -235 596 .003057597933059819 -259 596 -.5309667375028404 -308 596 .19654392242911123 -312 596 -.8154540680204794 -313 596 -.28802777606817914 -319 596 .2907084742049575 -320 596 .7102988657515845 -326 596 .0796356623561478 -334 596 1.2314442294124046 -340 596 .20786874747406814 -346 596 .08376285873122288 -355 596 -.12108192620597155 -373 596 2.076333500307215 -375 596 -.16054570676536628 -379 596 -.30754431374763375 -386 596 -.10718272301597631 -392 596 2.320587934262656 -394 596 -.30575348155796495 -401 596 -2.397406473175542 -411 596 -1.3236268943294374 -418 596 -.7775339433419934 -444 596 -.9270707077237439 -453 596 -1.2666581022474421 -456 596 -.24995783188456916 -481 596 -1.975819553432752 -487 596 1.7206271517855614 -504 596 -1.0476503061438427 -508 596 -1.189840280345222 -520 596 1.8933511884961056 -540 596 .22380233686310802 -549 596 -.6157972192734013 -552 596 -.3925507209781331 -566 596 .0003400584221923686 -567 596 .06296554739029708 -580 596 -.2896442519657669 -596 596 -.030970449793412014 -597 596 1.4559910189232843 -599 596 2.7193944604665083 -641 596 -.6508103605123093 -644 596 .2728399205612598 -649 596 -.44511121166611195 -680 596 .9820296858047673 -688 596 .1111782973792964 -693 596 -.2320156596556403 -707 596 -.5369261226366296 -740 596 -2.2674418300658177 -741 596 .15187783460068852 -742 596 1.6040014571079322 -749 596 -.23033645975196235 -753 596 .7657573851071839 -763 596 -1.0255478838700474 -764 596 .9300794427375481 -768 596 .5873225036780192 -774 596 .43434046874166066 -778 596 1.214931403117824 -802 596 1.821683972276901 -821 596 -.28143115158628873 -855 596 1.1697534428220675 -864 596 -1.0465829986620856 -866 596 -.05081428077770953 -867 596 -.21765955532002956 -898 596 -2.1441811116950986 -918 596 1.3499680364138233 -928 596 .5803303150014996 -944 596 -.5586069378417181 -970 596 .09875461679352529 -994 596 2.118585815501149 -996 596 -.8343222883447736 -40 597 -.04611057735813453 -50 597 .686660912572024 -51 597 -.030874100557033116 -96 597 .4099393325783987 -119 597 1.4080019181907435 -120 597 .19702904543872612 -130 597 .5215523042104662 -138 597 .750087722898791 -140 597 .28708307171990255 -142 597 .8938953277920025 -152 597 -.5119603628057336 -153 597 .7211773965015046 -155 597 .3295363894574147 -158 597 -2.340520172455226 -176 597 -.25768264644882694 -198 597 -.7784024274076515 -199 597 -.20451437573380646 -200 597 .16699956308689098 -213 597 .45588458712818647 -221 597 -.6841306362462454 -225 597 2.0552116207548363 -240 597 1.291494819827088 -245 597 .9040297545628375 -254 597 -.2887180034294398 -262 597 -.9665649163830713 -271 597 -1.3118875526226166 -391 597 -.4349704653077639 -414 597 -.5798883839747611 -418 597 -2.5574923327166017 -482 597 -.7997785003477852 -484 597 -1.572144545203875 -501 597 .6727973069451175 -502 597 -1.6699628743438713 -536 597 -.9718702094226116 -548 597 1.2905685663215773 -555 597 1.9565646065264441 -572 597 1.0640818806793568 -615 597 -.30117852762574615 -643 597 -.9229303170240368 -645 597 .9913699971149621 -656 597 -1.2808662157098114 -659 597 .15396848693354231 -668 597 1.9460081102432527 -678 597 1.2398797472971743 -693 597 .9883722809667003 -694 597 -.32600081497735295 -697 597 1.8147957288068728 -699 597 -.31459643200605264 -709 597 .8581356127206428 -713 597 .6097173435914539 -721 597 -.12055589674922759 -723 597 -.5708599020647255 -760 597 1.392356786346585 -778 597 -1.2488901376046728 -779 597 1.6296918501080369 -786 597 .07092369960357428 -811 597 .9719223336585554 -842 597 -.7250285217291987 -844 597 2.145894006154091 -849 597 1.505672730221026 -852 597 -1.6086654327517633 -854 597 .5678433590534042 -876 597 -1.137232752830694 -888 597 -1.5861384611399378 -894 597 -2.3977608750574326 -907 597 -.8330420383400283 -908 597 .2876762328915094 -912 597 -.7201163932025478 -914 597 -.24826121038774956 -916 597 -.1644044655412066 -918 597 1.154666602170075 -930 597 .3649318360361436 -936 597 -1.0625281699170974 -942 597 -.21543486875460874 -945 597 .02042635379214272 -960 597 -.1628087134565765 -974 597 1.2822513927720744 -7 598 1.3738753399103503 -14 598 .35983476204096077 -17 598 .9855710830695827 -24 598 -.691737365035871 -28 598 -.6860055612439405 -32 598 .45281506698195984 -38 598 .1997468124829023 -62 598 -.1769754452854782 -80 598 .5709128894590588 -88 598 -.37975163355080227 -90 598 -.2385645165725312 -95 598 -.46502925733144684 -101 598 .6374510331668547 -115 598 -.522371627002208 -116 598 -1.3369841079324356 -125 598 -.8882320821528852 -144 598 .13401651533168363 -152 598 1.2116887730077541 -159 598 -.7048245307715866 -160 598 -.5321894054429728 -162 598 1.1748184651133446 -190 598 -.43153188782035506 -192 598 .3962652603107524 -199 598 -.5018374983251941 -204 598 .3178523203103928 -213 598 .11222567836098851 -220 598 -.11432176638263836 -224 598 .16023555711789528 -241 598 .06859510636410857 -262 598 .4793429031192735 -274 598 -.28280388083158303 -288 598 .21024945935444114 -293 598 -.04220864259380766 -311 598 -.7486540086778135 -339 598 -.12744291758270135 -345 598 .1523818879092671 -363 598 .9733472172182058 -365 598 .0045341095952430716 -380 598 .2167191926880243 -400 598 .19356583039786734 -418 598 .5643964194540079 -420 598 .139318634468641 -436 598 -.793247543331423 -448 598 .11256164663819733 -452 598 -.3495862930452761 -457 598 .24070624972181712 -462 598 .19342251546164385 -463 598 .30685548186246153 -470 598 -.32963041199935394 -475 598 -.12635674109017095 -486 598 -.12448442368353455 -491 598 .027955347404450673 -496 598 .09083334224080386 -498 598 .5360694099740781 -508 598 .31585103467838693 -523 598 .13325307534928035 -538 598 .14050889027151672 -563 598 -.03856425594697955 -569 598 -.7075914618522909 -572 598 -.6264850601671968 -573 598 -.4603042979323975 -605 598 1.163617898978542 -618 598 -.7913992453036487 -620 598 -.570219007322693 -646 598 .663512389653611 -651 598 -.9565707764024063 -660 598 .9149129870081242 -668 598 -.6366177194291844 -684 598 -.4965829423976754 -687 598 -.3343716309388536 -699 598 -.35852900390403225 -702 598 .0051408931219499715 -719 598 .25606478800508387 -720 598 -.5735988742922081 -739 598 .6790380062937033 -753 598 .7307590596929188 -754 598 -.09207572642395365 -755 598 .2606695589742235 -764 598 -.3711067630261445 -765 598 .7194400388668949 -799 598 .8822756971554058 -801 598 -.03962223460842141 -806 598 -.7728175836766081 -818 598 .06255163059704248 -839 598 -.6625221198675254 -848 598 -.1936718263529522 -881 598 .750586654883842 -885 598 -1.2680004123302164 -902 598 .3265443297297499 -907 598 .9945792336416818 -918 598 -.16691336454406225 -922 598 .18732351890243143 -934 598 -.8222732846169349 -945 598 -1.1088024480675496 -964 598 -.6742461705959804 -968 598 -.05082997536948744 -981 598 .27532336197192997 -2 599 .1509447893367078 -6 599 -1.826052758667859 -11 599 .3326415657795278 -21 599 -.2018116754177009 -36 599 -.35067193040933864 -41 599 -.8836019833857768 -47 599 .38776079555568954 -51 599 -.30788285544185967 -58 599 1.325984828206714 -69 599 -.19109401498251252 -93 599 -.41191769484319823 -95 599 -.27906346453858444 -112 599 .2484679349057815 -117 599 -1.3958044147136925 -122 599 1.0244126216038096 -127 599 -.5164574347792135 -129 599 1.7607551508930612 -143 599 -.4078699667519827 -146 599 -.003943072961778454 -163 599 .5346824186691261 -180 599 -.621757022552589 -187 599 1.0456820558321516 -196 599 -1.1717718086541438 -235 599 .6418965615076956 -240 599 2.1789892042037917 -245 599 -.92289249792802 -248 599 .15298536118428246 -250 599 -1.3398943728753747 -251 599 -.04526181715152349 -254 599 -.8414815339081605 -269 599 .2023814693880649 -271 599 1.8262880474377694 -281 599 .04058735926584086 -311 599 .796879499464187 -316 599 -1.8652834320100526 -345 599 .03662698711170523 -355 599 .6174924542786898 -358 599 .2901853195127926 -362 599 .8621774312026408 -363 599 -.4054724840170174 -366 599 1.1035835694515432 -371 599 1.221982650766427 -386 599 -1.0171379566013399 -400 599 1.4308807169221331 -411 599 -.5232405631825263 -429 599 -.3053869548716058 -432 599 1.0170601441019953 -435 599 1.5554431781109999 -444 599 -1.148168379788134 -446 599 .3661767821411824 -456 599 -.7987380892011811 -464 599 1.1238943929600855 -467 599 .033248344785156536 -468 599 .6838838346876993 -471 599 .5548425470052281 -476 599 1.358338453411614 -483 599 2.0781727863868484 -505 599 .5613239259602698 -521 599 -.7014689298255414 -525 599 -.9809621637595104 -528 599 .7043839256038865 -545 599 -.9525565744266777 -550 599 -.8215425163395419 -557 599 -.3070863201201472 -564 599 1.603644493215391 -585 599 -.08085405830790729 -587 599 .2694368264083809 -597 599 .4612352180763984 -600 599 .508953109298292 -604 599 .14431382880210797 -645 599 -1.234128665628195 -654 599 .3780002225219217 -661 599 -1.6055291149945738 -664 599 -1.443283969637366 -674 599 1.6282181870245447 -680 599 .1156807724648593 -686 599 .023013840939396693 -694 599 1.3459882139442407 -703 599 1.0229018382530646 -712 599 1.2244617044631079 -717 599 1.3451629291598393 -722 599 -1.2326239729545048 -738 599 .22603525284418943 -743 599 .1337351240707378 -746 599 .7536174055420818 -760 599 1.4910092033295945 -767 599 1.2726150073446625 -770 599 -.26581931370790574 -781 599 -.08507663315329815 -783 599 -1.1581258534869057 -795 599 -.7285704110444013 -804 599 .0697127103699028 -811 599 .5790149139942862 -819 599 -.15526234225391078 -830 599 -.44429905755636007 -833 599 .03328715495798795 -835 599 -.9207318511871997 -837 599 -1.8125104550074789 -838 599 .2834652046989128 -846 599 .789398514947792 -872 599 -.531047427605182 -877 599 -2.0164280862378523 -882 599 -.24781790071403886 -892 599 .8188684922154018 -898 599 -1.3293276511111873 -901 599 -.49487613417890075 -914 599 -.005134893817404909 -922 599 -.2934712596276584 -924 599 1.1508796205590026 -927 599 -.9621438657810665 -930 599 1.2750211407694643 -931 599 .659973805585278 -934 599 .4789218285993756 -991 599 .9467463549281487 -992 599 -.13393983634970896 -995 599 2.5120935089011835 -1 600 .3045109850392858 -21 600 1.235573771874392 -25 600 2.5854701401566516 -40 600 .49212755691049104 -41 600 -.20413504418931933 -52 600 -2.410436053144531 -74 600 -.6254830560579805 -87 600 3.010607151369466 -89 600 -1.6861737053515904 -96 600 -1.6913025942633924 -120 600 -.22420901526063605 -121 600 -1.272228942056231 -130 600 -.8006918083896559 -140 600 3.6232143172328333 -166 600 3.094519894228586 -169 600 -1.3388364522161647 -170 600 -2.7396249097499212 -171 600 .36682496001797066 -179 600 -1.4459757748329716 -186 600 2.0239298654654228 -188 600 -.9067814341357723 -201 600 1.3614638937882133 -203 600 .27157841888072154 -205 600 -.6737316802150988 -208 600 .7708536290621933 -223 600 -.6023491891098889 -252 600 1.1346455199489793 -256 600 .5866851715632786 -266 600 1.4150493766100736 -277 600 2.232632857175202 -304 600 1.2161450329704122 -308 600 -1.1823855790793385 -314 600 2.294082758722467 -325 600 -3.282103118531066 -362 600 2.182838334265692 -364 600 -.22459186567075373 -365 600 -1.9986290975554748 -376 600 -.31731724643029874 -391 600 -2.8818366581849952 -403 600 1.933057906098111 -404 600 .18315854366790152 -411 600 -2.7370232430481125 -421 600 2.0950060584932224 -441 600 2.4889158790082626 -460 600 .6634188805697967 -463 600 -.6593319448843152 -467 600 -.9619465647487291 -486 600 -.393431757232101 -487 600 -1.3372325177221016 -491 600 -.8708988659529433 -492 600 .5937922061190439 -501 600 -.049733045045321965 -531 600 2.7150597873856253 -542 600 .3122092447423519 -559 600 -.5241330236962224 -561 600 1.6983515732979362 -589 600 .10042840546994716 -590 600 .8903871762957526 -612 600 -.027171167605018726 -622 600 -.7785061620421417 -624 600 .8840780776889381 -644 600 1.651054815710657 -645 600 -1.4306932346182115 -657 600 1.6636646603803473 -666 600 .7723928752224216 -675 600 -3.5601273114882233 -687 600 -.3721276415740728 -690 600 .9645047761101841 -696 600 4.536810782624131 -708 600 -1.4347472301221231 -720 600 .8662699366093858 -731 600 .9068190564140972 -732 600 1.5733519930627022 -771 600 1.7817277744443432 -776 600 .3019180623037609 -777 600 -.28658745522210716 -783 600 -1.5240357048200894 -792 600 1.5020127677372859 -817 600 -.4122709631753029 -830 600 -.8004862254146874 -831 600 -1.6417828377630974 -837 600 -.6153401607962334 -841 600 2.4010328442569753 -843 600 1.1302050730669475 -847 600 .025496931252167065 -848 600 2.899108251663709 -858 600 .5888754962116595 -870 600 -2.1507874943591068 -871 600 -.3858882466956608 -883 600 1.824370496538685 -900 600 .832514659836626 -911 600 -2.100558500335389 -912 600 .992473976348506 -923 600 -.3476554467267095 -933 600 .9325220305800755 -939 600 -.06318881594528403 -950 600 2.218647254343631 -951 600 1.756160963151566 -971 600 -.5821847433501184 -973 600 1.4777782154828862 -976 600 1.8416732836397356 -977 600 -1.1346933270239474 -979 600 -.9525971961201697 -994 600 1.0745155205938233 -999 600 2.9268992741193998 -1000 600 -.2982208332512062 -13 601 .3661831854606289 -22 601 -.16004350324996142 -30 601 -.39634811892918964 -59 601 1.0981222686186507 -74 601 -1.3913940506371434 -75 601 .5210188103080811 -103 601 -1.0183267714927322 -110 601 .5449674957883878 -114 601 -.24589767985583405 -119 601 -.04677880663296602 -125 601 1.2136908152584114 -131 601 .18275763466880807 -134 601 -.21951551792227852 -138 601 -.3487168921628407 -146 601 .1630744385868244 -155 601 -.008764917180709552 -160 601 .6811756590891079 -171 601 .6741360975949309 -184 601 .2469859230510963 -192 601 -.31375344255668136 -194 601 .8269257179797314 -195 601 .1949993727993814 -219 601 .021774946866327333 -229 601 .7294924559271718 -235 601 .008658493515058888 -242 601 .24285508520759214 -249 601 .22333420800555231 -253 601 -.7177348353123751 -265 601 -1.5178711276850225 -271 601 .7096112938181328 -274 601 -.11716230986498338 -282 601 -1.287392487446409 -308 601 .5042778282485023 -321 601 .5538541663091142 -331 601 .0958820333479441 -333 601 .4609293052130306 -337 601 -.06582273285167387 -338 601 .6640152267605 -341 601 -.16047735124811918 -343 601 -.09407912516549902 -359 601 -.49329700877124344 -362 601 .18903032701625477 -395 601 -.704556426368563 -398 601 .16357124736725195 -402 601 -1.0006216041862432 -405 601 -1.1051631642245274 -411 601 -.7006066194315181 -415 601 .6284406856719297 -425 601 .4977906722755929 -428 601 .30201290149907756 -438 601 .07447424206749531 -449 601 -.4528442688300337 -455 601 -.403798793603188 -464 601 1.925786851377658 -474 601 .05306089972994402 -491 601 -.10141994389951292 -495 601 .37575729509042144 -496 601 -.3826122669001414 -516 601 -1.1221620997547843 -540 601 .2575160867974043 -550 601 -.302479052399136 -551 601 .9185624732778183 -552 601 -.5085023795985577 -553 601 .5732895974539634 -564 601 1.229509546414272 -575 601 -1.215555954935709 -578 601 -.025676666206562185 -579 601 .4906942509290843 -583 601 -1.0512472603087877 -592 601 -.42304539643217304 -593 601 -.5319310528629939 -626 601 .2734677281833835 -646 601 -.6917531265350818 -658 601 .7003269080537337 -678 601 -.09991238080105641 -708 601 -1.303139138523602 -709 601 -.24644624698897027 -720 601 .2464698948985965 -735 601 .42710425476708275 -738 601 .6345791098012542 -739 601 -.6470599057841776 -740 601 -1.3484467775700815 -757 601 .15898190221562056 -759 601 -.34181126926126054 -767 601 -.9469146409045828 -771 601 -.792760188104788 -772 601 -.032934067240285025 -773 601 -.17030260805384115 -780 601 -.4950756519208199 -792 601 -.23475003272816636 -802 601 1.0206061253880683 -809 601 .2158043106062093 -811 601 .03671118488286529 -813 601 -2.2544215154243212 -820 601 .08709127355166141 -825 601 1.3815400063058652 -828 601 -1.9691554094315016 -879 601 -.1727157027439046 -894 601 -.9541985673008277 -906 601 -.19814417317223082 -908 601 .24121588509684339 -911 601 -1.3971435411042934 -913 601 .875561570057027 -919 601 .3522439926297777 -920 601 .5181539973070599 -968 601 1.001361144287756 -982 601 -.32549489582273444 -991 601 .4377398848809314 -993 601 -1.0021743610264995 -999 601 -.5220656424469026 -38 602 -.9017592555984081 -40 602 -.32206956393693503 -41 602 .015899797258244794 -42 602 -.14619794103253894 -60 602 -.5670124711054322 -63 602 .9905072912528623 -73 602 -1.0144318589819556 -81 602 -.6574285903171743 -82 602 1.436949302518735 -110 602 -.17247149302889533 -129 602 -1.1805546893532342 -140 602 -.5616200599088997 -144 602 1.0937675849315334 -148 602 -.6426742110999977 -165 602 -.9550854758482692 -177 602 .004222594695503817 -180 602 .5637066761919198 -183 602 -1.5821347166020117 -205 602 -.81522695405963 -212 602 -.9146470265353362 -226 602 .594022465412175 -234 602 -1.0630967393703947 -240 602 -.05552242690266243 -244 602 -.49048129236378113 -254 602 1.0283489698776547 -264 602 -.5304928583916171 -279 602 .5582778273012485 -280 602 -1.2753310142542575 -290 602 -.11852817594077888 -295 602 .8906630629017718 -303 602 -.46467831507758 -325 602 -.4699638670722574 -327 602 -.38516050786218614 -333 602 -.10504698540189464 -342 602 .8943112927767426 -360 602 -.4934119091167302 -371 602 -.5412449298898313 -377 602 -.07511338403897486 -379 602 -.19532814240851917 -380 602 -.05819001454954335 -389 602 .3269863373794274 -411 602 1.3060846770882197 -421 602 -.6405581687705486 -437 602 -.4642362777970801 -447 602 -1.1606316502115586 -452 602 -.22574308744196656 -476 602 1.084057646755842 -492 602 1.4072870404693014 -495 602 .37340461562773347 -511 602 1.1122199847355636 -513 602 -.1355563516047753 -528 602 -.1459353674315324 -537 602 -1.1303890408364259 -538 602 .5672492844659415 -542 602 .5332364761351779 -552 602 -.4026630492654182 -609 602 .05771897096054937 -613 602 1.2975489345553053 -614 602 -.749216209996001 -630 602 -.6889367576909748 -642 602 .4756960282206201 -647 602 .44896885431873196 -658 602 -.07186216927551786 -659 602 -.306839816693969 -667 602 -.6770338893148393 -669 602 .7225453803910024 -673 602 .34947019357151093 -683 602 -.5157315883817958 -687 602 -.8732778420211952 -695 602 .23343654776167266 -709 602 .3740989037722337 -710 602 -1.0728976271466983 -715 602 -.2315883513861961 -716 602 1.9267139217324531 -722 602 1.806815074835287 -735 602 .21978678973896662 -747 602 -.710925343020623 -756 602 .8312407029280795 -762 602 .03898682219864828 -798 602 -.13713429700920887 -805 602 -.2853674779887637 -811 602 -1.702465926059944 -817 602 1.1706066862898554 -821 602 .5065838920581692 -824 602 -.25383894928651446 -826 602 -1.564810314458117 -830 602 .9138009617424241 -835 602 .9034244345806415 -850 602 .4308841158475852 -891 602 -1.109757069590696 -908 602 -.10681122109232136 -933 602 1.036059876278367 -937 602 .5765357853002574 -944 602 .2595904425689488 -948 602 .5414404941569941 -966 602 -.14209617554086174 -977 602 -.8264887066317623 -991 602 -.3790720828251067 -6 603 .8655638825153722 -10 603 1.9806463590191372 -11 603 -.5566724395467032 -31 603 -.7047959818100469 -35 603 -.019175471556979864 -37 603 -1.0453148992098862 -102 603 -1.392188420699614 -104 603 .22839525904447994 -165 603 .4367305723165778 -170 603 -.77292398093675 -176 603 .5287037150048255 -177 603 1.4106691967105236 -188 603 -1.94579511643291 -198 603 -1.3915227907023715 -208 603 .3185827620455289 -217 603 -.135422197566019 -223 603 -.5356385659216356 -227 603 1.785111310197229 -243 603 -.834833993840687 -266 603 1.146985187156551 -299 603 .8438762749437917 -300 603 -.40729914113298626 -309 603 -.463919418592244 -312 603 2.215522438435888 -319 603 .39615292453370654 -333 603 .19502042092020244 -346 603 -.14438018212969675 -347 603 -.5382008739415958 -354 603 -.5013556273801392 -360 603 .28511944070898065 -372 603 -.21476133077599013 -375 603 1.3518679468340802 -376 603 -.3224483514940119 -378 603 -1.146964184284202 -382 603 .16098262307397926 -386 603 2.2929436614346375 -397 603 -.23728662284407182 -407 603 1.1527039530044414 -412 603 -.40450765017293955 -413 603 -2.469951704847311 -422 603 .036860884355958023 -426 603 .6738881953037914 -428 603 1.076630400120219 -429 603 -.07844716651603904 -432 603 .5967266502415628 -443 603 -1.0998652962172883 -451 603 .274286778697719 -458 603 .1571404944324475 -483 603 -.6704695839850037 -489 603 .06920505357126076 -501 603 1.4798910344504277 -511 603 .4159650360902498 -518 603 -.08431638068062278 -530 603 -.23471618070401984 -537 603 -2.1030716442655115 -538 603 1.167625639149127 -539 603 -.3122697057597757 -557 603 2.256489645193693 -563 603 -.20826547417121688 -564 603 .3086070159955074 -600 603 -1.8579983292165327 -604 603 -.008485475200082498 -607 603 .007740833607328024 -608 603 -.12041603225066655 -634 603 1.8935599314130187 -646 603 .7074406933035672 -647 603 -.13784785932774435 -648 603 -.611356833618192 -658 603 -1.6051847635174155 -665 603 -.156621564679929 -671 603 -.46511023235670906 -678 603 .7614536324726191 -684 603 -1.1003188117515679 -700 603 -1.02992250154777 -709 603 .7698479387825886 -718 603 -.7429037954556096 -720 603 -.8699969487323362 -722 603 -.8314964431927367 -730 603 .5300537629364669 -759 603 .1775854090766819 -767 603 -.148348553382146 -773 603 1.0140638897051966 -786 603 1.9557632870776598 -802 603 .583203120971028 -816 603 -1.114120890882904 -827 603 1.598841266014587 -834 603 -.04092785233674337 -836 603 -.3372445638738579 -838 603 -1.0344608554011552 -846 603 -.22681783807945005 -856 603 -.33255564850003805 -860 603 1.2455953865118663 -863 603 -1.5985661153401982 -875 603 -.021730269694545584 -876 603 -.8876181868406836 -886 603 -1.5344456012208487 -899 603 .8830887422771877 -911 603 1.5244577589188724 -913 603 -.6774805084565323 -914 603 .07095481437541244 -919 603 1.5156797721935635 -930 603 -.4428253257222324 -935 603 -2.8174999058813057 -940 603 -.9477875768219315 -965 603 .5469837767415293 -969 603 1.5419081966473505 -979 603 -.8360168503568488 -9 604 -.15508397570584115 -11 604 -.0711835042668994 -24 604 .7181352531783365 -35 604 1.1928390914335052 -41 604 -.9874662877678052 -55 604 -.7742962311259012 -71 604 .3931962450701831 -74 604 .5519156019464883 -106 604 -.3014786035782744 -110 604 .7065209896301179 -112 604 -.597688823153652 -138 604 2.6876485616434413 -140 604 .9220758362871513 -153 604 1.2159763626370623 -161 604 .925732010113223 -177 604 .8665752154822165 -214 604 -.8107168171651018 -217 604 .5559901692797403 -222 604 -.7423674299462903 -234 604 .5087873044927074 -241 604 .1661021271122382 -244 604 .12805733608715078 -255 604 -.4419503552011819 -270 604 -.7479139932933495 -291 604 .33225075311027774 -295 604 1.0405111607708883 -301 604 -.6733108249175318 -327 604 -.2899621817632124 -339 604 1.9789054423903638 -366 604 -.2503686381056783 -368 604 .9833160238169893 -369 604 1.323710095012118 -370 604 .8687038715940918 -380 604 .21321132548789362 -387 604 .17316402306830989 -417 604 -1.3994012353600256 -418 604 -.6202982448641798 -454 604 -.3690307480665771 -456 604 .6665079484691682 -459 604 -.5253844847527618 -488 604 1.5375891071767551 -490 604 2.428686854634802 -500 604 -1.0704531008734075 -517 604 .8254437787013115 -525 604 .3322453586069749 -526 604 .8631562267518933 -528 604 -.6625130264894709 -532 604 -.3167665872630672 -536 604 .7628602116546761 -543 604 -.41224121572115635 -586 604 -.24267619712814542 -593 604 .5565173270519479 -597 604 -1.3305409002885922 -601 604 -.5833847829258343 -604 604 -1.059965331603091 -611 604 .6627499115924371 -621 604 -1.6656676037457774 -627 604 -.9912409062636628 -631 604 -.16326752717171616 -641 604 .6176544052806293 -651 604 -.16897983459562438 -682 604 1.348738186633108 -713 604 1.1235685611449109 -720 604 .505222737314253 -725 604 .8519740056596196 -728 604 2.085581935945211 -729 604 .18126735940740127 -731 604 .8413814330253535 -748 604 -1.4534504353751934 -750 604 -.9533688493139405 -752 604 -.9154080785512444 -758 604 -.1865189225520391 -761 604 1.0822980393548034 -765 604 -.30823185321883395 -779 604 -.5963299907128405 -781 604 -1.6708354600676278 -787 604 1.9014649367826133 -791 604 -.8680294593160648 -821 604 .3130479365423813 -822 604 -1.4281879789524672 -823 604 1.8379507532906394 -824 604 -1.3337489122471293 -841 604 -.0422883363293976 -844 604 1.9335513226444418 -859 604 .5932126294938982 -865 604 1.5764705283743248 -877 604 -.5391780883602583 -890 604 1.8964915078608648 -905 604 .13899651225885454 -907 604 -.9884089962352338 -909 604 .531125361554963 -913 604 -.20863391194028136 -919 604 -.06081766163759462 -932 604 -1.108383187303394 -975 604 -.7049699853109105 -979 604 -.4956990398280998 -997 604 -.16190632879045178 -17 605 -.004525547182236259 -29 605 .8287809880231751 -32 605 1.2726376483017279 -40 605 .3584117305160692 -43 605 .25591728427500077 -50 605 1.3766938574357674 -58 605 .3334234303694794 -59 605 -.7890891808433325 -63 605 1.2183744302097415 -75 605 -.08428920347389089 -103 605 .8400279436166226 -120 605 1.2347130936239368 -129 605 -1.4335552886002807 -145 605 .1759981064533219 -146 605 1.335545228141177 -149 605 2.413811055311495 -156 605 1.1226237940170476 -159 605 -.14674346110189845 -171 605 2.001328363077104 -184 605 -.9677248815437133 -204 605 -1.2475778064483578 -217 605 .17942695499816746 -249 605 .027778643208637245 -251 605 -.38708755228972963 -270 605 1.5489740630378313 -274 605 -1.2342689656695711 -275 605 -.9173606252887102 -276 605 -2.288320843588221 -284 605 1.2888517383792923 -302 605 1.6965487444167382 -307 605 .6689403787702557 -314 605 -.8751590881682606 -356 605 .9389831999693868 -367 605 .1998584847681485 -392 605 -.7371489132223132 -403 605 -.8697781094164148 -415 605 -.4219212278995902 -428 605 -.4911822351046751 -445 605 -1.5280680867423406 -464 605 .4286181635577297 -484 605 .7687222123212093 -511 605 1.673951541645398 -513 605 .4036834775794836 -524 605 -1.2072176246398416 -528 605 -.588703309684184 -530 605 -.6655148729093561 -547 605 -1.0826715417272188 -549 605 -.9347700135769385 -554 605 1.2912130369157082 -559 605 -.516349312057963 -565 605 -.08711755313739636 -566 605 -.7109300767264892 -571 605 -.7673366683227651 -579 605 -.6827488606294037 -580 605 -1.2170373234550753 -600 605 -1.2632025338314927 -613 605 1.022933049415776 -615 605 .04389631288628092 -620 605 -.16125995337570453 -657 605 -2.1028711013399812 -669 605 .7297282351769473 -674 605 -.19691612649960455 -679 605 1.5995979409600396 -680 605 -.4892128751673196 -682 605 .7131857275068957 -686 605 1.2155205781793044 -704 605 -.5073830289703258 -708 605 1.1646678582345429 -712 605 -.056110036319482304 -722 605 2.6348167738169366 -736 605 -2.0480466821338625 -738 605 -.6246727739916942 -743 605 .5283873314748722 -746 605 -.5928912076478074 -764 605 -.4285662196535817 -767 605 -.7210164154502579 -788 605 .35129428963650755 -806 605 .543717918754087 -863 605 .0008461844547479475 -870 605 .9955725905928832 -876 605 1.0389041070322174 -877 605 2.6260428474023945 -895 605 .5035641457283084 -897 605 .5584057824066285 -898 605 2.2672099871696636 -903 605 -2.1912471357678696 -913 605 .18168153009691648 -928 605 -.5208108525554233 -940 605 1.1255244445884742 -942 605 -.4306135323564537 -950 605 -2.4541802071408503 -951 605 -.4536277822681719 -970 605 2.014293246336589 -973 605 .00904158313883574 -988 605 .7024174946099397 -989 605 -.25680546959404615 -990 605 .7916812906583472 -6 606 -1.3042374941661923 -8 606 -1.3197293496971427 -23 606 .46175756404644014 -25 606 .36565757838612 -32 606 .5672721812891728 -44 606 -1.7915420934982862 -67 606 1.0766617127374187 -75 606 1.1670992993738534 -93 606 -1.7887869814958084 -103 606 -.7953518675077949 -104 606 .6559149923748144 -113 606 1.1266335775291612 -125 606 1.5365995040263567 -150 606 -.32031261055670845 -154 606 .9052013781146363 -163 606 .3290592498686189 -184 606 -.6086987016662329 -198 606 -.6071493743872225 -199 606 -.06649053269709425 -208 606 -.6854392028411852 -223 606 -.9835664614338719 -233 606 .26419956267035993 -234 606 1.5859761912849069 -268 606 .7350920123794911 -269 606 .012216914494506445 -279 606 .4669788782477108 -281 606 .679084567663873 -310 606 .5408216194683559 -314 606 -.06529699734577006 -320 606 -1.9239067923477202 -326 606 -1.7564797599560273 -349 606 1.1610710414937107 -373 606 -1.6983182865823876 -374 606 .3431072209189939 -380 606 .24788632373746894 -382 606 .6501330299555383 -409 606 -.17135862777225244 -413 606 2.6835390599291733 -428 606 .48137352517977244 -437 606 .6481608686975333 -438 606 1.1392864818502761 -441 606 1.6286086650167602 -455 606 -1.8912240856309337 -458 606 -1.7477174995865126 -460 606 -.6988864592856961 -474 606 1.227893545098861 -545 606 -.41999172348409597 -558 606 .8956462836548774 -564 606 .2533631704955749 -572 606 -.8776674081673336 -586 606 2.155570207700958 -589 606 -.6429241872786567 -601 606 .6212194450913475 -606 606 -1.008169241041645 -624 606 .9504537194286973 -630 606 -1.2168141353484858 -633 606 .9032127170226597 -659 606 -2.099850412091313 -665 606 .6495017490692346 -668 606 -.36367318461205633 -690 606 -1.0721666882573602 -696 606 -.5050111432131561 -705 606 -.033516952064284664 -723 606 -2.796794219706997 -731 606 -.036405149204583126 -742 606 .36269384247597486 -747 606 -.7892667638893587 -756 606 1.8334959114129843 -771 606 -.6143728782912112 -778 606 -1.9424461969318318 -785 606 -.488135559528104 -790 606 -.7800887961867402 -792 606 -.46779525931344007 -797 606 1.1215361377221333 -800 606 .5581557312187492 -810 606 -.4189662166143546 -811 606 .40782585232467217 -812 606 .24945928718853413 -817 606 -.9082250772082012 -832 606 .18825026599862466 -838 606 -2.7408526856881634 -852 606 .4662694352382054 -853 606 .35888197464572763 -871 606 -1.6082193389956032 -884 606 -.721553714368062 -895 606 1.6792172865461952 -896 606 .0348942812568331 -920 606 .31681457493796 -930 606 .4387952007417967 -946 606 .2745736528196292 -977 606 1.157918599415499 -987 606 -2.2551888524035024 -996 606 -1.496009576825864 -1000 606 .7288651335914889 -3 607 -2.0206398060557373 -6 607 .9172083633868059 -25 607 -1.8660880452568354 -43 607 -1.0031333534300746 -57 607 .5932972712602492 -64 607 -.10082404012959541 -86 607 1.0270282700241402 -119 607 -1.5574422774362386 -138 607 -.027699217958666034 -146 607 2.204739177846506 -147 607 1.186790497520231 -151 607 1.147937681681121 -158 607 -1.4872391158507412 -167 607 -.2878788292807399 -188 607 -2.2467244965996147 -194 607 -1.2543455425824248 -199 607 -1.309505086439624 -206 607 -1.1871399590287646 -221 607 -.9188969271818863 -241 607 -.9827153907599859 -247 607 -1.5157891135331218 -252 607 -1.185387112795109 -266 607 -1.8215330751560783 -268 607 -.5219513963166525 -274 607 -.7674137491004005 -280 607 -.7537434585297582 -288 607 .012868127621551852 -307 607 -.08706456930883485 -315 607 .6872890359383057 -316 607 -.28354583579526244 -321 607 1.3499112251351062 -323 607 -.5113065441510433 -329 607 .31093887048925417 -335 607 .9786964987197269 -347 607 -1.0382753018656943 -349 607 -2.6927934556784066 -360 607 -2.4836348982096035 -363 607 .23493488661564327 -372 607 .4133400829859474 -375 607 1.213820609003858 -378 607 -2.382999825033596 -409 607 .06913276088560415 -412 607 -.4989805116074373 -415 607 -.24873707913837043 -418 607 -.952781106578225 -451 607 .016446913055664175 -461 607 -1.6261626903639899 -466 607 -1.0976975122913935 -471 607 1.3457689635056747 -476 607 .8098231416284033 -484 607 -1.6294699537585475 -486 607 -.24750606028783864 -494 607 .8102424895641602 -495 607 .20466331214408515 -499 607 .17056455617761188 -520 607 -2.428848432654731 -528 607 -1.7558238734820824 -530 607 -.516620263121035 -553 607 -1.477440218992116 -588 607 -1.6206275506620893 -609 607 .2565415773812234 -611 607 .8340393016069352 -616 607 1.0000070480461432 -622 607 .5080019814776451 -623 607 -1.113900777698324 -624 607 -1.584546239736091 -639 607 1.0413811907837893 -644 607 -.958942991985386 -647 607 .4542547500312099 -650 607 1.7593128807123302 -655 607 2.251074896645812 -667 607 1.5818963986661907 -680 607 -1.3138812684945123 -686 607 1.3118159361509996 -697 607 1.076862267875196 -699 607 -.5690902675466418 -738 607 -.5434931198422964 -740 607 .9822008859792027 -742 607 .2624853574430328 -775 607 -.0648176008891366 -778 607 .19484068734017848 -793 607 .6034769098652403 -803 607 1.605058217305827 -814 607 -.7373720598182435 -815 607 -.04961257501835768 -835 607 -.7136253962674667 -846 607 -.21675876211360415 -857 607 -.2347801995201111 -865 607 .18080171954632032 -877 607 .7876862723462857 -882 607 -.5585957993251212 -912 607 -3.068257099502911 -914 607 1.7975388109149086 -944 607 .22412657441186332 -950 607 -.5755682247348235 -952 607 2.313762084601028 -957 607 .1708431376359083 -959 607 -.021694584855234123 -972 607 .9157790673442683 -979 607 .014317150855343075 -996 607 -.9132645998580289 -18 608 -.7492679953877501 -19 608 -.848471008201347 -24 608 .3077564349565135 -47 608 -1.762205840539831 -58 608 -.22292888018334767 -70 608 -.793540529579591 -80 608 -.7453025543978887 -83 608 -.1700259781221495 -86 608 -1.3051614555264837 -90 608 .25768043403503366 -102 608 -1.1065965378357832 -106 608 .5813308952036225 -109 608 .7075750378581777 -110 608 -1.3298174058528642 -119 608 1.1353020002850294 -140 608 .028629138049083708 -161 608 -.1552858644729635 -170 608 .16242366855373322 -178 608 -.3386912319004964 -179 608 .5734042091307286 -201 608 .9054974247743439 -205 608 -.1162537279157976 -233 608 -.6691005618724221 -234 608 -.5966031587365151 -237 608 -.2702220609094876 -238 608 .29516303275353317 -241 608 .1604395792269737 -251 608 .9600155256938632 -253 608 -.04789414446519591 -255 608 -1.4764832078277739 -260 608 -.5070059441973972 -261 608 -1.6894459522694667 -267 608 -.5324572774669045 -276 608 -.8669663677923318 -277 608 .4310299032641712 -289 608 -2.0142622482082544 -296 608 -.08793359860818656 -305 608 -.015761591970863256 -311 608 -.1788055627771885 -324 608 .6656209700362927 -348 608 -.589913212299909 -349 608 .4480247953889921 -366 608 1.2386477044333972 -370 608 .20036214967112323 -376 608 1.9342317321878448 -389 608 -1.0835913204043612 -399 608 -.40307328036344214 -404 608 -1.0861155287097048 -414 608 -.2748468052488415 -418 608 -.9925491009696715 -444 608 -.688331096457484 -446 608 .6059680340227882 -456 608 .5493166035277619 -468 608 -.5852835426185378 -478 608 -1.2262201532674828 -481 608 .8589256384337908 -497 608 -.9974701075844518 -505 608 .6150177314864023 -506 608 .16481942858393517 -515 608 -.15820180380524373 -529 608 -1.0123293108801628 -535 608 -.6176622144985171 -537 608 .05798492646323025 -550 608 1.0635841563491395 -562 608 -.5429943337712524 -596 608 -.9844982030808079 -621 608 -.5266211555582501 -631 608 -.14910637248091374 -662 608 .1806279041909432 -667 608 .7671738521780471 -669 608 -.3628337108127696 -677 608 .207332198391102 -701 608 2.2835661525147515 -726 608 .1379864764841829 -761 608 -.06919685391720304 -765 608 -.6777122908113261 -775 608 .34845665993420377 -791 608 .4424614518025759 -806 608 -.032011976994561264 -810 608 -1.5449562355311097 -821 608 -.9582628827157007 -832 608 .07995033475825439 -842 608 -.2482488905833723 -843 608 -.354852232544804 -849 608 .06272544088610121 -858 608 1.1484114245668389 -864 608 -.0200011287795914 -865 608 .7237412435027515 -870 608 .4682786701583117 -877 608 -.2570834562169157 -901 608 -.9633772544107122 -909 608 .4880443588788584 -917 608 -.9790298703754924 -928 608 1.6911764190157548 -932 608 -1.0256675934208206 -935 608 1.7345392377464437 -958 608 -.8482086844939366 -960 608 .6287827246173218 -963 608 -.771886647707861 -967 608 1.0449499713884913 -981 608 -1.3812231851099828 -23 609 1.515181916383836 -32 609 -2.2536662649399584 -47 609 .6806321599562485 -62 609 -.09987897759058029 -83 609 1.2444926450097078 -89 609 -.46885779956374746 -106 609 -1.8831903490756126 -108 609 -1.0625721954887737 -119 609 2.0221924589723264 -130 609 1.2352308337068443 -139 609 -.3933099207931387 -166 609 -.3029209900142532 -167 609 .9084580265190246 -176 609 .01622022134749119 -179 609 -.0054048566053002366 -187 609 -1.0009760644615697 -190 609 -1.6113817870872793 -207 609 .3777575747209188 -211 609 .05732916895005499 -230 609 .7765865311578586 -232 609 -.40439318960034043 -242 609 1.050813156459373 -248 609 -.6558002632980635 -264 609 .18436625111343946 -272 609 -1.6115856350423456 -279 609 -1.0411796414876895 -280 609 -.6773876864327194 -287 609 .13579495026328844 -292 609 1.0076450489152649 -294 609 -.8614211683039404 -299 609 -.22566101455892001 -306 609 .18598051689102207 -354 609 2.292135835856709 -359 609 -1.96854258398902 -362 609 .2934668406299745 -371 609 1.906429516967548 -382 609 -.36211717139513644 -383 609 -.5133108764988085 -384 609 1.3197612938686545 -392 609 .36417778589141725 -407 609 1.3076591015273267 -414 609 .0540769395968293 -423 609 .6577863120342218 -429 609 -1.6723809442916338 -437 609 .3710560645597186 -440 609 .7093082593383365 -446 609 .45948171168931956 -452 609 -.9100250883755553 -468 609 -.5204122342695052 -469 609 .4433635949312491 -531 609 .6801678376157877 -535 609 -1.2069998119978687 -547 609 -1.1707080981809885 -560 609 -.6287419879015089 -566 609 .838921373804571 -580 609 -.8010313979696372 -596 609 .9834440096990152 -632 609 .448393017718115 -637 609 1.6919630330673174 -655 609 .09848478514458728 -677 609 -1.5404874082365805 -688 609 1.2397674457696817 -696 609 1.2545753406020201 -720 609 .7267308282050072 -728 609 -.6253037037078255 -749 609 .43578123536042623 -761 609 .7986165393732069 -763 609 .7149628086848804 -804 609 .7754935663380894 -810 609 -.37931853926104525 -811 609 .7958047872530665 -816 609 .7526522008312839 -820 609 1.2720271926829947 -827 609 -.6453818310166703 -832 609 -1.2109394694571765 -839 609 -.24186825869909936 -842 609 1.113597854222466 -849 609 -1.8099035158122883 -851 609 .001120837778452649 -852 609 -1.1229207351879813 -854 609 -1.6285137430231658 -862 609 .18594344443532326 -924 609 .5672853855792175 -936 609 .3710709523534859 -943 609 -1.1873777242636256 -955 609 2.071237542764512 -959 609 -1.009715211368961 -968 609 .875502004678304 -972 609 .29315310982870324 -980 609 -1.4915956406056539 -985 609 .2361740568384623 -995 609 2.419779237812668 -997 609 .6422907741400347 -5 610 -1.374989955177199 -14 610 .3771831225426913 -29 610 1.5597606177702468 -33 610 2.6568909478718634 -35 610 .41806899700871686 -44 610 -1.6497868599282857 -56 610 -.48185503406696345 -60 610 .4400499233558589 -65 610 .195037521371773 -73 610 .8202757349115325 -82 610 .8745569597842042 -83 610 .26634146043633244 -98 610 -.8757533003761133 -106 610 -.11480604191559798 -109 610 -1.1825861647113207 -113 610 .15909739153457125 -120 610 -.6668210563273236 -126 610 -.5176651867555458 -131 610 -.8801484317001419 -143 610 -1.4946218240005515 -160 610 2.4796732189137596 -161 610 -.4501253451074015 -168 610 -.9529511390454182 -191 610 .2410493351842616 -192 610 -.870668326043143 -193 610 -1.3711693898013322 -195 610 .018566635743064566 -202 610 .06794370530987645 -227 610 2.8889268844791003 -229 610 .3838885647757218 -230 610 .5268016868996408 -232 610 .09577984413441828 -237 610 -1.9410633196739298 -257 610 1.6777877745454597 -259 610 .18323603192938603 -266 610 .17857585910504975 -293 610 .6917650591641985 -295 610 1.5081056890070619 -323 610 -.1535249557321493 -325 610 -.7916252469504798 -327 610 -.3207269607763732 -329 610 .9627813641616723 -336 610 .1983243586003629 -349 610 -1.5007207906408666 -350 610 1.483663120115431 -372 610 -.10584823947873158 -377 610 1.407300001632561 -419 610 -1.3602945654219674 -425 610 1.779387115770229 -430 610 2.0597398602468417 -449 610 -1.2432541690633454 -454 610 -.08399992750652527 -467 610 .20265831916933197 -473 610 -.4241789052729771 -477 610 2.414699057369518 -494 610 .390574033094167 -501 610 .6991664956130506 -510 610 -1.3754790942109258 -515 610 -2.074143471105343 -520 610 -.864751779746158 -523 610 .3957800469206992 -525 610 2.3227946382712843 -544 610 -.9951503676785397 -545 610 2.8202854669964545 -563 610 -1.2456232990300213 -565 610 -1.5199099337467639 -573 610 1.573190419023736 -576 610 -1.813875880704268 -587 610 1.4743354196338534 -598 610 -1.3871186966021194 -603 610 -1.664046187405241 -606 610 -.44781568046744696 -608 610 -1.124538318919065 -614 610 -1.4594889016387862 -627 610 .010255392845360367 -639 610 .35365431452029056 -644 610 -1.4454495997439658 -648 610 .10071183470703256 -653 610 -.11793325962179935 -687 610 -1.0286315497042937 -688 610 -1.0229406546503297 -689 610 -.2473751084443878 -713 610 2.43696319688448 -717 610 -1.0127799396905341 -719 610 -1.7275174054610316 -726 610 .7873485637032571 -752 610 -1.8864765563052273 -759 610 .9849236366384906 -764 610 -1.1046140649285698 -772 610 -.646273975107215 -773 610 -.8957318664234138 -775 610 -.6577295988324245 -777 610 .3432495087236715 -779 610 2.7268816401162534 -802 610 .40736630159372805 -811 610 -2.1490578256310724 -813 610 -1.7703020287776663 -816 610 -2.3541567127439995 -817 610 .2369287982440715 -866 610 .90107473001326 -884 610 -.9819024219035816 -889 610 .1345616951995247 -900 610 1.7844878273025941 -902 610 .8646998738411078 -910 610 -1.2760640199297926 -915 610 -.7976156206889093 -929 610 .967518437168997 -938 610 .3071615718259134 -953 610 -1.715196706221348 -966 610 .3428998964202522 -991 610 -1.2726954435104632 -995 610 1.2012920846893247 -1 611 -.6279992561748033 -6 611 .5025004503131629 -16 611 -.9756470066893712 -23 611 -1.2482830484432077 -29 611 -.2314981542847557 -31 611 -.5708412835188368 -36 611 -.24226066550327519 -43 611 .6870523378699471 -58 611 -.876507320974407 -72 611 .49931441216174205 -80 611 1.469643221144885 -98 611 -.13767272563499866 -113 611 1.3636585092626394 -121 611 1.287255102420047 -122 611 -.4020433616098521 -124 611 .3804117085608336 -131 611 .24837219079308281 -147 611 -.09530952723089361 -169 611 -.47496860297459553 -189 611 .19018545526573832 -201 611 -1.203630004139244 -203 611 .34325516315125215 -220 611 1.2780768126038864 -229 611 -.3507172259170614 -230 611 .3886220625105762 -240 611 -.9007949944010314 -257 611 .698272074024906 -272 611 1.1775816886552846 -277 611 1.0309882742742766 -279 611 1.2566184886814034 -280 611 -.0009699468969697062 -282 611 -.2790036573926874 -288 611 -.47879401297056284 -314 611 -1.3608614303562734 -319 611 -.5530753498328991 -342 611 .7371518916542826 -353 611 -.7799593468534978 -373 611 -.7380038046395748 -375 611 -.269430358250343 -380 611 .10957033063504097 -389 611 .15596702835149884 -390 611 -.1941345342490443 -392 611 -1.4562895761682113 -403 611 -.23610032493432534 -404 611 -.0660162879258985 -428 611 .11518006090485686 -430 611 .8340574850963594 -431 611 .4427023392529694 -442 611 -1.0323524779905005 -444 611 .46469678172026063 -456 611 1.1359863236582879 -460 611 -1.1190551263721475 -473 611 -.7904603550718332 -480 611 -.09292915805382729 -486 611 -1.3290572249936423 -498 611 .08025910250650553 -502 611 -.5522116567492478 -503 611 -1.129476332157134 -505 611 .8203749576955927 -507 611 -.09655225191527761 -509 611 .5839216809643452 -534 611 -.07114937308165373 -537 611 .5187398439309109 -547 611 .9213940806733462 -564 611 -.1486020278216621 -567 611 .08174510319727536 -576 611 -.20678106632774662 -588 611 .020787279007145637 -596 611 .08435581637940007 -598 611 -.6277939934307106 -608 611 -.31740060753539645 -609 611 -.5723605332383818 -629 611 .1700944360518362 -631 611 -.11922066241220211 -640 611 .8580098667177498 -647 611 -.3815752378069257 -651 611 .9401596873617509 -657 611 .3695832535486565 -675 611 1.0080001793231546 -680 611 -.4942112922727879 -697 611 .5269150903337532 -721 611 .7303367958803143 -736 611 -.1623665763831544 -738 611 -.5778414476737138 -743 611 -.8740606506273988 -757 611 .058037855903883495 -761 611 .22928807302606147 -765 611 -.3771513506196119 -770 611 .0615995260530601 -780 611 -.42321605083665853 -795 611 1.1037277431502897 -822 611 -.4575785396666484 -824 611 -.5073978563374815 -837 611 .3630160863207814 -843 611 -.5630182163460792 -860 611 -.5109538775714174 -864 611 -.8144020664156071 -868 611 .3290891966099785 -879 611 -.9818612859565173 -884 611 -.34021205368393387 -891 611 1.6401881490723291 -892 611 -.2074158698944248 -906 611 -.8358326376124328 -922 611 -.5433776821992735 -926 611 .8633957296108659 -927 611 .6995513450406875 -970 611 -.5050894260838301 -974 611 .02851946226934507 -979 611 -.35010239482255523 -985 611 .8316888787910641 -20 612 -.38767625929996086 -23 612 -.46463967286296654 -78 612 -.1777211548070852 -80 612 -.11810492644804586 -83 612 -.28321519704444736 -89 612 -1.3988198854642264 -93 612 1.735781190998936 -106 612 .16826424910902288 -124 612 -.623224330817886 -131 612 .4225170068008469 -138 612 .5219872278753108 -145 612 .39355984998924376 -155 612 1.5240030861233622 -158 612 .2862193795516037 -159 612 -.163336537150177 -164 612 -.03487022503939237 -208 612 1.0004539297458963 -235 612 -1.2165046778255195 -256 612 1.0068134652993774 -261 612 -1.5037414401654134 -285 612 .2798536286877423 -287 612 .9240854750582204 -292 612 -.19367004094443116 -309 612 -1.6617929678477716 -312 612 .20275877367629142 -315 612 .42623965539165454 -320 612 .22684373236279498 -321 612 -.4161132174774526 -324 612 .8975619099391783 -326 612 1.270206826906171 -332 612 -2.035475891651286 -333 612 -1.8033835475537963 -337 612 .6299274676639479 -354 612 1.8539238324741942 -359 612 .3464795196293598 -361 612 .1301140096895943 -381 612 1.1019773682140188 -385 612 -.46965524921157764 -392 612 .21391601736788393 -396 612 -.6460636268821549 -402 612 -.5373566824054609 -430 612 -1.227128052091387 -439 612 -.9291927941497116 -446 612 .06329339450633349 -452 612 .29030099384399993 -466 612 -.06543939244451594 -467 612 -.7991007140933206 -475 612 .7753615131651443 -480 612 -.495357937017994 -520 612 -.6070458165121099 -538 612 -.20108055425626817 -548 612 1.8227851520478677 -554 612 .20871517945204246 -614 612 -.24335783512378006 -616 612 -.6180435445656105 -624 612 .5944504228518768 -663 612 -.8074919369131026 -664 612 -.2558847369970657 -683 612 .45414468682547393 -689 612 .06409040144253185 -696 612 .4843645345478064 -706 612 -1.512745647724825 -712 612 -.6604439872205322 -720 612 .9223906117140129 -723 612 .17452504933622687 -750 612 .8636392131724553 -751 612 -.5679370968822537 -773 612 .210325230746433 -778 612 .07388939757265225 -820 612 -.3377896051471651 -830 612 -.008747782065104577 -871 612 1.0991273778027373 -886 612 -1.4174619964024653 -903 612 .6401494394972745 -908 612 -.43197159013863135 -912 612 2.3053033531604576 -915 612 1.4535468882784919 -920 612 -1.0339779003642802 -929 612 .4561021816246391 -932 612 -.9782984616291861 -952 612 .5408466563736168 -958 612 .2212657622082289 -985 612 .9457555927977419 -988 612 .15967995092242027 -998 612 -.4657933484021739 -1 613 -.16490102122232259 -6 613 .12892487266905547 -24 613 -1.6346574102833231 -45 613 .07443875741748175 -48 613 -.8030862481607999 -54 613 .31812063736284074 -56 613 -.340396668319643 -66 613 -.15034196927102672 -85 613 .3885259025863393 -87 613 .03025282187188645 -92 613 -.7189758568962694 -106 613 -1.3547711614776579 -121 613 -.569857565923123 -146 613 .36153026498393737 -171 613 1.6695147714783194 -176 613 -.12196968724798307 -182 613 -.6211910731118934 -186 613 -.10050560798493868 -187 613 .5018721634502866 -196 613 -1.4255251601082306 -219 613 -.4793387683670297 -223 613 .34998908395125383 -236 613 .20482084624955418 -238 613 -.35139095167829976 -239 613 .4078621697635569 -240 613 -.6300345176585211 -252 613 .6708713487661132 -261 613 1.7631428968514729 -265 613 1.2051194499577618 -268 613 .8563719727739278 -269 613 1.3045564215286276 -271 613 1.2712161688069639 -274 613 -.4772180471872381 -290 613 -.2553382263834464 -310 613 -.2265788377749146 -311 613 .15708318124225962 -321 613 -.09301476295570528 -325 613 .05380097479882312 -330 613 -1.6112227099869942 -350 613 -1.078579670836878 -370 613 -.3531229952674563 -372 613 1.477321459181927 -377 613 -.6211428396168046 -383 613 .7175862048388544 -395 613 .10505790761617699 -398 613 .5900467711804817 -402 613 -.010068335573306109 -438 613 -.4780135674754236 -442 613 .058498924548959594 -449 613 -.30296373614667904 -457 613 -.1526022897881657 -469 613 -.5797747695556027 -474 613 1.3115373164061377 -475 613 -.5722641039728587 -483 613 .2360576812065759 -488 613 -.7314852831864478 -499 613 -.4084606407924959 -502 613 1.517140748862896 -503 613 .18045494434135098 -507 613 1.0763893525634003 -510 613 .4193793077346752 -511 613 1.4427651313026704 -531 613 .13531584940215047 -534 613 .1451262618516465 -537 613 -.9346048863714349 -555 613 -1.4089910560516457 -604 613 1.4263597494605107 -611 613 .8469637273595774 -616 613 .9027222448026486 -636 613 -.29372646887373133 -646 613 .5078424305255396 -651 613 -1.1455396574587124 -661 613 1.4512982847815556 -664 613 .11830610151178682 -671 613 .9516497470949331 -674 613 .13573539760992728 -682 613 -.3230482591504571 -690 613 .7722900728397377 -699 613 -.21756466038853284 -703 613 -.38931552909429057 -708 613 1.0245954875531629 -715 613 .04227852769038345 -728 613 -.39526937176267357 -733 613 1.1476913545712646 -737 613 -.387739770817988 -749 613 1.3164686348027421 -759 613 .24052781714734242 -761 613 .012423926926534781 -784 613 .9162261761419412 -790 613 -.7926822839681934 -794 613 -1.7954710491732595 -820 613 .8834743006894825 -833 613 .0513707933886076 -839 613 -.5961753104842644 -845 613 -.8967262505733026 -859 613 -.18852472573146994 -861 613 -2.261594992244495 -873 613 .8495810918335384 -890 613 .1816299078818185 -908 613 -.3504372906862557 -910 613 .7815673597921875 -926 613 -1.935717891084217 -930 613 -.36469372652316123 -969 613 1.155299620919966 -979 613 -.2483674886943672 -989 613 -.43244922210145864 -15 614 .8727927350895429 -20 614 -.7543924646076122 -22 614 -1.595796388122662 -32 614 1.23624602289725 -34 614 -.4650217584902087 -37 614 -.31790463905952004 -39 614 .5900871731370062 -50 614 -.5092374183828877 -53 614 -1.357618460582793 -54 614 -2.3462699376416194 -59 614 .7467110102375981 -69 614 -.10247090664316541 -89 614 1.3403451057759974 -100 614 -.7910795757931384 -102 614 -1.90053043593667 -114 614 1.0642318321754962 -124 614 -1.3585458807032704 -151 614 .36131765550294476 -152 614 -1.1127889474092827 -173 614 .74963141146465 -188 614 1.151929023952927 -196 614 1.9722807631454478 -208 614 .39146797526473365 -215 614 1.0304155182489156 -227 614 -1.2825386410742876 -233 614 -2.485578499597166 -244 614 .13102035536940604 -249 614 -.7643892544082221 -256 614 1.032545783535744 -265 614 .7435933979427415 -268 614 -.41092943609637994 -277 614 -1.165221569502491 -292 614 -.9865374075141901 -300 614 .10343684535418071 -312 614 -.3629775188669679 -331 614 -.008081859219017135 -352 614 -.8043478384835285 -353 614 .050110590215873024 -360 614 -.285198954337581 -362 614 -.8829502912707058 -388 614 .19577033769828278 -389 614 -.8946680503518036 -393 614 .26752993755748844 -413 614 .2058428903263387 -424 614 .5198731339934022 -430 614 -1.5513371532212483 -439 614 .1214114433259172 -449 614 3.0225498767630783 -450 614 -.08544284417238826 -455 614 .3861319560190798 -457 614 1.8530426969748577 -458 614 1.2176953851396555 -462 614 -.13041676399156502 -473 614 -.19922312457749144 -485 614 .1929082767327801 -494 614 .17695971368932212 -524 614 1.3819212074793956 -525 614 -.4187727936421735 -530 614 -.9744899646399795 -540 614 .09668624839917239 -552 614 -.757211094544424 -555 614 .24789165143344896 -569 614 .8448919923318461 -571 614 .07590570985447055 -574 614 .5259610601891569 -586 614 -.23300109512027614 -603 614 -.8183160080860843 -608 614 .8134872563581568 -610 614 1.5393300579847509 -614 614 -.3591438802862729 -624 614 -1.0769356407126431 -628 614 -.45041848568565435 -629 614 .3011482554230135 -636 614 -.642198446531123 -656 614 -.44959534740736534 -667 614 .11141524651753887 -671 614 2.1355341535790786 -678 614 -1.4121891257859303 -698 614 -.46267113038802815 -699 614 .28650474175258694 -710 614 .5304691942010518 -717 614 -2.960282860238547 -732 614 1.269296128285467 -751 614 -.5516745021816019 -757 614 .9697568062240629 -768 614 1.4432655777737065 -781 614 .3676331238562556 -788 614 2.0584029658982725 -800 614 -.9792813481991908 -809 614 .4687510363182272 -825 614 -.4729347717269175 -830 614 .39836435532995973 -831 614 .24011722156847293 -850 614 1.2473121741914257 -856 614 -.07006970725143083 -866 614 1.540857437151013 -867 614 .09283495020109658 -871 614 1.605233494865096 -879 614 -.9516333369999668 -884 614 1.360534387139748 -894 614 -.759878858100668 -898 614 -.14518644692968036 -906 614 2.7707471514246835 -910 614 .5279797311184941 -916 614 -.24160161927443546 -917 614 -1.042433615850442 -940 614 -.5421501855943721 -952 614 -.09493350713260065 -979 614 1.7637397468455507 -4 615 -.6743777870849051 -24 615 .7652054320344077 -59 615 -2.5684129977569676 -62 615 -.20137045849943802 -69 615 -1.5836407161060069 -102 615 -.42216259316340643 -118 615 -.8189263653645573 -129 615 .8110954446090124 -142 615 .24896877014306204 -155 615 -.6191475341421204 -169 615 -1.276902749186426 -175 615 -.03676629805547449 -185 615 -.4580860075604395 -189 615 .6662022490979195 -192 615 .22626563728930998 -193 615 -1.1491096454963734 -200 615 1.240417552137537 -218 615 -1.5971168917917802 -224 615 -.6648012651074287 -244 615 1.722198000646012 -261 615 -.3567651872598875 -290 615 .4195985137531306 -303 615 -.978925438275846 -324 615 .1009977202860876 -336 615 .05418400800943249 -349 615 -.5807363068118476 -357 615 1.50564978381063 -367 615 -.6113953110218698 -369 615 1.2394450321771082 -379 615 -.6103518638851804 -400 615 1.5123330060095213 -406 615 -1.5575991500246213 -408 615 .43295237740961623 -409 615 -1.317575882323844 -421 615 .828586542558528 -422 615 -.2898644478956987 -425 615 .6161248305063732 -431 615 2.0499727485858283 -438 615 -1.1887253741412844 -446 615 1.2060447485164858 -448 615 .18449280656162156 -457 615 -2.170952957309191 -458 615 -.5030164439663672 -459 615 -.035362766279708996 -462 615 -1.804958494240728 -481 615 1.2244751367356408 -490 615 .8184740909598164 -501 615 .7451387757269567 -512 615 .7674280730517643 -525 615 -.8807402112778098 -559 615 -1.3110783235794432 -578 615 .06897487995198548 -579 615 -.38366820600086426 -606 615 .610200376196966 -607 615 -.049250564764429586 -608 615 -.333484880414023 -620 615 .7473215949638472 -625 615 1.3749012130396787 -636 615 1.663270513040751 -639 615 -.9322462181935145 -661 615 .24433686170793653 -674 615 .5045644836044711 -709 615 .9548118672864316 -715 615 .8880378960330297 -719 615 -.45011344221891625 -744 615 .10231916344865413 -787 615 .5924867724829156 -794 615 .3755142701209451 -801 615 -.7741095546240248 -824 615 -.9325416213848661 -861 615 1.1322517214007428 -872 615 1.6675158664852159 -875 615 -1.2248594488673294 -877 615 -1.8085646560954147 -884 615 -.7535406677770977 -894 615 -.005544141188888546 -901 615 .6216183517322282 -944 615 .08808380909049182 -945 615 .3429834876501909 -952 615 -.8757881090064227 -961 615 .6421456972826807 -967 615 -1.0117112365784946 -981 615 -1.0806178597989156 -991 615 -.8963862092695053 -5 616 -.41164250288089055 -18 616 1.1303999447234419 -26 616 .6658771572220392 -28 616 .7139612628690772 -29 616 .850864280617118 -30 616 -.10708002465142091 -39 616 -.6161312969581507 -55 616 .608661677627216 -58 616 -.7211485769288257 -60 616 .7057620287575105 -75 616 1.105767970224222 -105 616 -.3669669564391966 -112 616 -.4499984832177202 -115 616 .63459995582904 -117 616 .20261908726542088 -118 616 -.4554706476646854 -120 616 .329056469526096 -134 616 .08673013215412644 -165 616 -.1471100307815363 -183 616 -.3188740500178085 -186 616 .40161834243790967 -196 616 -.8572810190375904 -206 616 1.1426837954504716 -239 616 -.11138664091077694 -242 616 1.4978589751515028 -260 616 .03846273768623471 -264 616 .22345659325101488 -267 616 .3808190692956835 -275 616 -.7751177721988662 -278 616 1.3381919601852235 -282 616 .0977438088839336 -284 616 1.1346256059295354 -289 616 .4125258148312228 -354 616 .29944651088151425 -356 616 1.19352647739968 -358 616 .5382778522174225 -384 616 -.3529977828236876 -394 616 .7408863889069182 -398 616 -.19055865512349665 -399 616 1.0892760982715741 -404 616 .0765522620950221 -405 616 1.4641916671088604 -434 616 -.12306873147357916 -450 616 -.17724730855981335 -451 616 -1.1326942545145067 -471 616 -.1564463438963521 -474 616 .3737699476060117 -490 616 1.1582577204747384 -494 616 .20052842679342694 -496 616 -.6112790558025192 -510 616 -1.5676228418617335 -515 616 -.3040032939271037 -516 616 -.44545248846306074 -527 616 .24499666552657073 -535 616 -.5684420387556627 -547 616 .6232986625367841 -559 616 -1.3381015722689318 -586 616 -.24878804126150714 -599 616 .8673972198925757 -602 616 .9610391565221185 -626 616 -.13168845438606247 -634 616 2.1222788746987025 -638 616 -.6523428504602983 -652 616 .7949200364676404 -657 616 1.1370675126931535 -660 616 -.004908849909573828 -674 616 .5596854852953294 -676 616 -.7549510901206866 -691 616 -.1720842430140248 -692 616 -1.5110754375689994 -699 616 -.9298817223495285 -703 616 .4786884088270803 -713 616 -.42806248487067855 -729 616 .45618546321292786 -731 616 1.2713605292905585 -748 616 -.20381457357352278 -751 616 .3216453480913315 -769 616 .7540101464159463 -811 616 .8376990327631482 -823 616 1.793126382975499 -828 616 .9877233568956214 -843 616 -.08406730603686577 -846 616 -.017222546138356012 -873 616 -1.2732296838882853 -875 616 .06671620225510752 -880 616 -.15320618031919503 -893 616 -.44089616684087 -902 616 .9882765787400988 -913 616 -.19621538232164776 -918 616 .6370145910700494 -925 616 -1.0776851292970713 -939 616 -.4620544221003674 -948 616 -.5988443371912956 -952 616 .9266863315153469 -953 616 -1.245495257488819 -954 616 .2897303863338015 -962 616 1.0411991244192658 -984 616 1.3916138004448635 -994 616 .20558004390847112 -5 617 1.4790535306175634 -12 617 -1.0107864854350124 -17 617 1.7842759389514011 -56 617 -.3781917479140305 -77 617 1.262416478801984 -81 617 -.4930888502409718 -93 617 .3444900527429346 -102 617 .6103023987861719 -110 617 1.3527250743640762 -120 617 -.9494909158192045 -130 617 .19089137773294915 -137 617 -.4009557596301617 -139 617 .08387569484428664 -143 617 -.7641379021878699 -149 617 .011393254489769578 -160 617 -2.0514074976303913 -161 617 1.3526022453513322 -180 617 -.1820721434800241 -186 617 .8118747907955847 -204 617 .1893259442349708 -207 617 .5597805290524397 -217 617 .8944895837767637 -219 617 -.49679423188983024 -220 617 -1.2998288203111021 -225 617 .779523635469746 -230 617 -.00469205612305941 -231 617 -.8602645703824122 -246 617 1.3647585204767576 -249 617 -.15252082606967965 -256 617 -.3840645439061156 -257 617 -1.473886592901704 -259 617 -.9207141258741756 -260 617 -.5970285553732457 -266 617 1.038375794547368 -294 617 .06522147931256567 -302 617 1.0918104054308724 -312 617 .7282880335870173 -326 617 .8088156565878388 -336 617 .6709586066171507 -344 617 -.3498112951769477 -351 617 1.5829025546728712 -358 617 .6427975164500366 -383 617 -.7379948103312405 -415 617 -.6249528497768876 -438 617 -.20002419091338022 -444 617 -.013916606881854332 -447 617 1.290908601760462 -455 617 -.7786604666032194 -456 617 -1.1117796507329538 -464 617 -.7854482851719597 -473 617 1.4446915183216074 -482 617 -.8702420728751116 -483 617 .9366865288638571 -484 617 -1.652693976994853 -498 617 .9692350973541041 -501 617 -.5989509697368923 -515 617 -.32995738906757804 -521 617 .23931375409728337 -544 617 .07310688634254907 -556 617 1.539415444908083 -559 617 .4149791760883952 -564 617 -.22830312513107048 -569 617 -.7403156520399743 -587 617 -.06528319807899982 -594 617 1.454044368496096 -599 617 2.4469572941850437 -622 617 .48155294177573443 -627 617 -.2181503054545505 -635 617 -1.299787099083859 -638 617 .02170580582797269 -647 617 .5714419412845542 -656 617 .36467931793683483 -662 617 -.3134337323701851 -669 617 .22736611573293813 -677 617 -.1131712535024301 -683 617 .7156584600007674 -691 617 .5436618596850764 -735 617 .31356550483550044 -744 617 .02725540634388718 -748 617 -.06970569015269565 -749 617 .6994434328713574 -761 617 -.6552704151057701 -769 617 1.1809459909379556 -771 617 .6790183010386809 -772 617 1.7450486606015334 -784 617 .5641377890719302 -796 617 1.7812650804894654 -806 617 -.2580308377030485 -814 617 -.20799803337561112 -818 617 .9960864164649696 -825 617 -.41123130922613654 -830 617 -.17414935406926393 -831 617 -1.6375906590916653 -835 617 .7386437251958085 -855 617 .39271721064220344 -873 617 -1.0014784850717162 -886 617 -.7515793103965862 -949 617 -.842833567765614 -958 617 -.5621251490173776 -964 617 -.35741555565101013 -983 617 1.7861677007286003 -987 617 .759790175305964 -988 617 -.49853228174453695 -18 618 -1.1093866112871058 -25 618 -1.451360676930507 -60 618 .05759243362711869 -94 618 .2800710700605233 -108 618 -.6277950851357865 -110 618 -1.4022665927700861 -113 618 .307510344138539 -126 618 .19343813706570534 -131 618 -.038402999421588355 -134 618 .5051157161185305 -139 618 .7612130052699717 -154 618 -.42434041111393783 -162 618 .2667295544703216 -168 618 .4926319676937134 -176 618 -.32839653350911846 -177 618 .14896546446453188 -183 618 -.9112865633434631 -184 618 .2814321164200764 -205 618 .15145216003475964 -218 618 .888689522479581 -235 618 -.15514214609144372 -265 618 -.2712981777339337 -274 618 -.15897551231008192 -278 618 -.6440391825478783 -288 618 .008160891249184926 -301 618 .1285006776920557 -330 618 .8215680952075914 -349 618 .15429807437614557 -361 618 .12190619608365692 -363 618 .6689230782886824 -373 618 1.4230670596750035 -395 618 -.6505724864849393 -425 618 .3959332994027034 -427 618 .7099701103056595 -440 618 .9430517449986784 -443 618 -.027490499627329648 -468 618 .17123850274005442 -477 618 -.7526624079150268 -489 618 .11083304249001616 -491 618 .8219746435726841 -497 618 -.9086713580451428 -499 618 -.6278525486042839 -505 618 -.2644193785457065 -514 618 1.2476485101510135 -519 618 -.12544501227071597 -528 618 -.24845703876525443 -529 618 -.3300210101426043 -561 618 -.26748500330310393 -566 618 -.27476094077944613 -567 618 .040471760538904666 -570 618 -.34991336877326384 -581 618 .49043082497804835 -589 618 -.4917382586610435 -600 618 -.49894674844884973 -616 618 -.4329024950218704 -618 618 .18856827926389302 -637 618 -.7798370536831521 -638 618 -.20006107967267894 -659 618 1.6033869305988708 -670 618 1.2540476330011332 -686 618 .1405558195099929 -689 618 -.21282332846478125 -699 618 .13231224700823266 -710 618 .32404822351815515 -719 618 .7261349211201419 -739 618 -.4264180441706156 -748 618 -1.6705139773850175 -770 618 .07694149273924272 -782 618 .004205469408571666 -789 618 1.2994694577752965 -790 618 .7628473689227034 -799 618 1.5502537244499979 -801 618 -.36376189090983957 -802 618 -1.35845986582157 -803 618 -.7317030896478083 -815 618 .3173403377692362 -816 618 .3178447460233432 -817 618 -.7281934159273232 -820 618 -.8493510888894145 -832 618 .7472137723318463 -848 618 -.4119793504732994 -876 618 -.6532402233747475 -887 618 -.4112510712978743 -901 618 -.6351445255746015 -905 618 -1.5158349929508714 -907 618 .1588556466598871 -928 618 .6830817843804182 -931 618 .5308820205295888 -969 618 -.22024245889454658 -991 618 -.7758928694260262 -992 618 .2296427186538718 -995 618 -1.393040125928455 -8 619 .2383938698500021 -14 619 -1.6125818216385428 -37 619 -.2662688464284305 -39 619 .4886083295097313 -42 619 -.3114069573438176 -46 619 .1639716412844995 -47 619 -1.6079802634326965 -77 619 .8548807197153835 -79 619 1.6291417387811904 -83 619 -.04439145007531117 -105 619 1.1774374834990962 -112 619 1.278897581202489 -114 619 -.006006887096526609 -121 619 -.5848348785613088 -126 619 -.7541839794807833 -131 619 .45501753326233774 -134 619 -.0015012302613504613 -138 619 -.6255358713727751 -141 619 .3905162778052506 -142 619 -.7526667472622687 -146 619 -.97183807886949 -149 619 .01814664567318005 -160 619 -.19325998750402398 -179 619 .1326595834342869 -184 619 1.527235265090346 -202 619 2.3255855407378947 -227 619 -2.383400895562092 -238 619 -.29373800436222003 -244 619 -.2587345131400828 -276 619 -1.351966611054674 -281 619 .675716411147881 -301 619 1.646115313959136 -302 619 -.37648592789791985 -310 619 .33074441087878603 -316 619 .9835122342537838 -317 619 1.3999214229455086 -322 619 1.073722567444516 -355 619 -.7973718594585094 -356 619 -1.1969530672751725 -368 619 .1330705647824748 -373 619 2.4806042444010283 -383 619 .4967766248579755 -390 619 -.2521261774239765 -412 619 -.2588500365064357 -414 619 -.7050699626732811 -419 619 -.021317472841150528 -435 619 .02666281391542004 -447 619 .6274491025095886 -450 619 -.9329802740439033 -457 619 1.4989648556319954 -479 619 -1.333743633629492 -481 619 -.6121018082629405 -500 619 .7561876170505255 -525 619 .31214139650875933 -531 619 -.33194880145568106 -542 619 -.932448455873625 -546 619 -.919889528334925 -550 619 1.1672779092593624 -570 619 -.09236595164002855 -610 619 -.3110948916043583 -635 619 -.7801465506439389 -639 619 -.04023678703570227 -701 619 .23635483572465738 -702 619 -.34368185448280525 -707 619 -.3595789775707836 -714 619 -2.054728636287063 -715 619 -.02895676230716652 -718 619 -1.7225695119347064 -726 619 -1.4873033477279314 -738 619 .46471426834728863 -743 619 1.0616563687096843 -794 619 -.5765037121830716 -795 619 1.5655865271580705 -802 619 -.28045807218894575 -803 619 -.3364169305364919 -810 619 -.5885442382027188 -834 619 -.2376118737590504 -835 619 .9375836498833465 -848 619 .26748642296277253 -867 619 -.6496019466763824 -877 619 2.4521530616397818 -894 619 .24928638679166892 -897 619 1.3276989054649713 -902 619 -1.0126998774548541 -910 619 -.1503216417923048 -937 619 .16545160296157685 -939 619 -.3787204115690427 -942 619 .798015548496299 -948 619 1.4089996638607076 -951 619 -.46169616930083907 -953 619 .59206962966552 -962 619 -.813181027385408 -968 619 .26687186152040066 -985 619 .4408710289329757 -992 619 -1.306923847744985 -993 619 -.9503119469047733 -996 619 .2875024832349936 -20 620 -.8221770853105542 -41 620 .3505942555658833 -45 620 1.6638981041533354 -48 620 -1.4530897756350427 -60 620 -1.2486920981599297 -72 620 -.5757036158584032 -85 620 1.0514714878353864 -93 620 1.3618925220301725 -103 620 -1.304202624916654 -107 620 .7664944776838074 -113 620 -1.0136689022735452 -117 620 -3.1398836468357882 -127 620 .03770771872641913 -189 620 .022337760492450454 -197 620 1.2179121857477426 -199 620 .7910118034431743 -201 620 1.335935160086811 -222 620 .770955837068865 -224 620 .7284697443516872 -225 620 .18048161111188127 -242 620 -.4666996658685743 -255 620 .12004902328031014 -271 620 1.759048899758149 -278 620 -.9221072432627699 -308 620 .058125288926975674 -315 620 -1.2901856976198909 -326 620 .7781844197711313 -350 620 -.4528699837681713 -351 620 -.7931714091914773 -357 620 .19751661308909135 -370 620 .4783012669139779 -381 620 -.5949879628167548 -385 620 -.6592404947582073 -389 620 -.23854915904556498 -391 620 -1.125443071209679 -394 620 1.0161584164727397 -401 620 -.6994843009902127 -405 620 -.1110155855038454 -409 620 -.6275587121443282 -438 620 -.7906331851253748 -455 620 1.4352414817162473 -457 620 -1.650823196555034 -464 620 1.5023822532166835 -471 620 -.8440235240011039 -473 620 -.6807329313965826 -510 620 .6408665962797925 -512 620 -.2167261897794581 -519 620 .3022274889249443 -540 620 -.8085666404374269 -570 620 .33320587825525894 -572 620 -.4594730660345335 -591 620 -.870513335386369 -604 620 .4782882733523526 -605 620 .10926725750020651 -606 620 .0857668884444293 -609 620 -.2026010682817688 -612 620 1.2349466283571418 -617 620 1.5395596463127583 -632 620 .7561143627872203 -634 620 1.9751413419564685 -636 620 -.4862296969413733 -645 620 -1.2049444777902905 -648 620 -.11538453903871618 -654 620 .33134574971674124 -659 620 .24228014489091804 -671 620 .6848895280288969 -679 620 1.200367396112263 -684 620 -.408429341977936 -698 620 .6247038916457052 -709 620 -1.3871998393032574 -725 620 1.6410040882147794 -738 620 .5571902799996135 -739 620 1.085863191695072 -742 620 1.3511915513575392 -759 620 -.00011767240656107222 -802 620 .4843091771310391 -805 620 1.1257161066605548 -825 620 1.6757783343154122 -844 620 .37386438920397524 -859 620 .49504494026812157 -860 620 .6649466377964257 -861 620 -.06726132461906956 -869 620 -.38226051380557796 -897 620 1.5045699943786282 -902 620 -1.8213967149652077 -903 620 .48390487478008204 -916 620 -.7809436472610048 -923 620 -.6689780293134824 -924 620 1.0324930012152957 -928 620 -.24455636663665642 -931 620 .8215620946025373 -937 620 .15619136616718368 -943 620 -.8991177280341787 -949 620 -1.9106598440058176 -959 620 -1.5961567500804401 -962 620 -1.2913650259342646 -970 620 .31945492199851666 -990 620 -1.118815055012876 -4 621 1.3177680705310304 -14 621 -.14114547925992904 -38 621 1.5997817301009192 -42 621 -.5105517599757594 -90 621 .12177364063417087 -101 621 -3.3287071563932327 -104 621 .1789833091311522 -113 621 1.2580033853989636 -120 621 2.6227573382973453 -151 621 -1.760698690671004 -154 621 1.166800690350068 -178 621 -.7088935185416492 -188 621 .7013506792158608 -194 621 -.964989712406424 -200 621 1.3648671349468098 -205 621 3.2628244779598186 -210 621 -1.8116856448156657 -213 621 .5890218862258316 -221 621 2.1006201691435544 -225 621 .9113542183259795 -241 621 -.04313736361368456 -275 621 -.867133146147516 -277 621 .7017096492077461 -286 621 .4760273772407853 -291 621 1.8067954088184486 -293 621 .48285414411118716 -306 621 -.3600603532122184 -307 621 .6072711918389072 -317 621 1.5706358979962556 -341 621 -.06686924104014626 -348 621 1.5655562966381353 -349 621 3.103720198642436 -368 621 -1.2962342626468135 -374 621 .623005736735961 -377 621 -1.843930118477474 -378 621 1.6970495317329584 -382 621 -.16349343050271894 -401 621 -1.5458754415709577 -411 621 -1.7430405342768012 -412 621 -.9209560866778028 -432 621 1.0010687659157624 -454 621 -1.6089893605055097 -455 621 -3.0071248739133134 -458 621 -1.4213837049278228 -491 621 -.7032227211251089 -509 621 -1.345373487291036 -533 621 .7760323703086192 -536 621 -3.263542289820636 -548 621 .6904286365610266 -554 621 -.5280991548389593 -558 621 1.9340646990509498 -560 621 -.904048561179129 -570 621 -1.5339264068248872 -574 621 -.9978307817264664 -594 621 1.3991615890951545 -603 621 .009082705258044154 -605 621 -1.5145826192991017 -607 621 1.7708348167361148 -612 621 -4.361927585793543 -616 621 .9074896980365967 -630 621 1.1244912391139763 -638 621 .9385910879201935 -645 621 -.07267764658234624 -649 621 1.3909605750574312 -651 621 2.7842367786149747 -656 621 1.8588196283634462 -665 621 -.9882502127217222 -667 621 -2.163994326822741 -669 621 .24616421686304923 -676 621 -.38215060456010214 -687 621 1.0291294712285126 -695 621 -.7966288014891616 -716 621 -.8985702794656958 -729 621 -.3591988398996725 -758 621 .911249298971964 -764 621 -.24620838192776845 -765 621 .7259412515378043 -766 621 -.943969835851604 -768 621 .4937418858952336 -774 621 1.0705812328550914 -781 621 1.7090874859599103 -783 621 -1.1443780122077798 -790 621 -1.0234894431531982 -794 621 2.4898777572217115 -799 621 -1.7563361597855314 -809 621 .29960741095311266 -837 621 2.181981937521413 -853 621 1.1543608945004826 -864 621 -2.5146691331973 -866 621 -.03414923039972644 -867 621 -1.6014741446701717 -868 621 -1.4809789429573843 -869 621 1.22304355515597 -894 621 2.445664420146552 -901 621 .47901518137664323 -902 621 .9057147784719676 -908 621 1.5460641168635574 -920 621 1.007834138648722 -921 621 3.4872123922077614 -929 621 .8971850692499822 -931 621 .38919926429994844 -935 621 .4896172019299127 -970 621 .08965575311890962 -18 622 1.6928996828490004 -23 622 -.12364982832301796 -32 622 .3934680540594143 -33 622 -.9042445249293685 -36 622 -.38004822385221837 -44 622 -.9218273670882398 -48 622 .03423786386159705 -63 622 1.185279953162728 -89 622 -.3405877662189367 -91 622 -.05134093241824015 -117 622 .23996684267780807 -130 622 -.9856041072450131 -146 622 -1.5607302187993146 -156 622 .009818829054026174 -160 622 -.7859459166434386 -161 622 .23881716790391005 -174 622 .014290868111218998 -193 622 1.0315763251835177 -211 622 .15738751143840768 -214 622 -.5610045475083818 -217 622 1.18256987174073 -221 622 .9450532168809079 -224 622 .030519553036776392 -226 622 1.823784131999698 -234 622 -.5157006985033513 -247 622 -.3647124281085818 -272 622 .03004911555862927 -284 622 -.6073573198060687 -297 622 1.1959499225746812 -308 622 .7369078111967613 -322 622 .6163564610743463 -325 622 -.34445470433483816 -340 622 -.6824606036268934 -343 622 -1.3554927825250682 -347 622 .7132176610987809 -353 622 .6771087986470727 -365 622 -.9345751675743591 -366 622 -.3804120646065307 -370 622 -.557460376575169 -381 622 .6728539224450669 -383 622 .3066340234728274 -406 622 1.3760499576750904 -408 622 -.21894028090936674 -417 622 1.2953199587329982 -419 622 .5999592632281163 -433 622 .0802937726091284 -456 622 -.28532552299787994 -457 622 1.6947648888778788 -461 622 2.299108445809697 -483 622 .5636237803302648 -490 622 .23695544423588227 -493 622 .31422823592626103 -511 622 1.1474104700084475 -517 622 .24767645431678748 -519 622 -.43590069574631063 -538 622 1.0358046805290935 -554 622 .12827932645389867 -577 622 .6229593714294692 -589 622 .5415145775469854 -600 622 .7780068829357922 -602 622 .6849504049618358 -608 622 -.5603015585543122 -609 622 -.3481905268953046 -628 622 .5358206694661731 -630 622 .8131852477472433 -636 622 .2544826294385517 -648 622 -.07223222884064096 -658 622 .12908270773267858 -661 622 .22769125290128706 -695 622 .7286122252079437 -696 622 .46959088710513414 -699 622 -.7168170947387541 -741 622 .3566982406492994 -744 622 .5906896428429265 -756 622 .5321039796818063 -757 622 -.6388053236147762 -764 622 .7962832376292611 -772 622 .227068737917575 -828 622 .9435445587074717 -840 622 -.01264686234124908 -845 622 -.7079254625536027 -879 622 .1617211210760992 -891 622 -.4456877540661686 -905 622 -1.3063279443634148 -929 622 .7822932398073711 -942 622 -.35657435941992754 -956 622 .27913055389071983 -1000 622 .41346699160961803 -1 623 -.7424607457139305 -14 623 1.2800641411544424 -25 623 1.7518911953480896 -29 623 1.0265853765063344 -36 623 .4895929773364821 -42 623 -.01942395158510926 -43 623 -1.1043934155380122 -47 623 1.23574151121708 -49 623 1.0519048371273774 -69 623 -.13947508992915048 -88 623 -.1932879580689742 -91 623 -.0817565286576585 -92 623 -.3881799298828641 -93 623 .2729108619526054 -116 623 .6126385451913948 -153 623 .6006818587873166 -177 623 .9013008513973422 -192 623 -.3912336821907455 -195 623 .4942014871787685 -202 623 -1.5741390898748777 -224 623 .18879015443039152 -228 623 .44056180497818276 -229 623 .016717185625698197 -234 623 .6488156850468852 -253 623 -.9318941385570605 -263 623 -1.1252075004036262 -291 623 -.8100589032133356 -294 623 .8371760672900256 -316 623 -.451642422506374 -319 623 -.1871994103478284 -325 623 -.38050756140916675 -342 623 .7074384031200389 -345 623 .7703564020676341 -346 623 -.46757033153047695 -350 623 1.5130608669415433 -351 623 1.425007425773941 -352 623 2.4477580417132607 -356 623 .6718121181740835 -375 623 -.2958479347127833 -383 623 -1.5684724215410717 -384 623 .6998762267666893 -398 623 -.42649553807441165 -399 623 .9057632165684202 -404 623 .7306647829241624 -405 623 .3453890757016995 -406 623 -.7401564055767818 -420 623 .14238569431358272 -426 623 -.25295254300608333 -462 623 .1795859912079864 -480 623 -.956733943450292 -514 623 -.626202740283069 -518 623 .07493918431586119 -529 623 -.3488852174014003 -544 623 -.452966446934696 -545 623 .02847267866540474 -548 623 .9990578079470132 -557 623 .9497574122918084 -569 623 -.06863316239385216 -572 623 -.46736651576414767 -577 623 -.8659017726131457 -586 623 -.3068377715297692 -591 623 .6033599495192403 -594 623 .22016846714449567 -598 623 .6329963429726718 -599 623 1.6674529913316618 -613 623 -.16635395180447493 -615 623 -1.166357506630161 -632 623 -.5669069481692482 -648 623 -.8746715581590014 -651 623 1.0724727940358332 -661 623 -.2824737286788091 -668 623 1.5623703711327457 -671 623 -2.2517846131390633 -675 623 -.03134565570515397 -676 623 -.7602773322333135 -688 623 -.9242362820172576 -709 623 .9334539360740579 -711 623 -.7603362235937717 -727 623 -.9965357837960899 -729 623 .2892459963504764 -733 623 -.5897295478181969 -737 623 .5002234662979153 -746 623 -.10716040157870256 -789 623 -2.038918926123536 -791 623 -.9787651107682032 -798 623 1.2262276883561098 -802 623 1.0801644287194103 -806 623 -.25362433178391913 -816 623 .8243741982851495 -819 623 .8298386121607403 -826 623 1.4087675681763472 -835 623 -.6239493398986182 -839 623 -.47011402590316403 -848 623 1.3739963859216031 -850 623 -.5137068111367628 -879 623 -.07962017007911582 -885 623 -.1302149385682091 -887 623 1.7780051239416093 -893 623 -.625797268370079 -901 623 -.3423173519246452 -902 623 1.2630910349205178 -907 623 -.7841852264310611 -920 623 .6130334948941296 -921 623 -1.3753991144132656 -925 623 -.1451379856249661 -932 623 .9795277309555634 -951 623 .8441176352456835 -953 623 -.9148234641246471 -956 623 .13532434535080198 -978 623 .17554939425320013 -984 623 .7208911710010695 -989 623 -1.0496031528456926 -994 623 .22707619945664292 -9 624 1.3579383826198057 -14 624 -.23428038662508954 -24 624 .12478448005175566 -34 624 -1.188736194641751 -59 624 -1.6437521755235422 -60 624 -.5066364454121604 -62 624 1.4293774838108122 -86 624 -.34357381218438016 -112 624 -.5547170173899323 -178 624 -.542309593775014 -189 624 .11789185752428545 -197 624 -.17421164851259568 -214 624 -.3501485370251708 -217 624 -2.4188612325588705 -228 624 -.8865633843208834 -230 624 .11080076011719052 -247 624 -.13538751352669542 -261 624 -1.429229078896207 -271 624 -1.6569048484911106 -275 624 -.43958885431693473 -276 624 -2.2500566638072783 -288 624 .3751797100416663 -289 624 -.3689563439618191 -350 624 .9189956559681582 -353 624 .1523164907761395 -366 624 -.37692186717798826 -393 624 .609943229549997 -427 624 1.158302688301127 -432 624 -1.8803214443114835 -436 624 .925970967165192 -447 624 .025342849485238697 -448 624 -.5212913039265014 -456 624 .6144346015848767 -464 624 .31534410646104905 -467 624 .42933352764412824 -478 624 -2.3799185880870573 -488 624 .6042238154223047 -494 624 .415186330683502 -502 624 -.4359026977473377 -526 624 1.6392477210580445 -531 624 -1.43862708144094 -546 624 -.4019559979462149 -549 624 1.5466095994154538 -560 624 1.34493539110385 -569 624 1.3998044213831253 -575 624 -1.3246858311893075 -577 624 -.7531200066573358 -587 624 .5815956775167491 -595 624 -1.774179926305922 -596 624 -.19215382397027922 -606 624 1.2204734234998573 -609 624 .3377491284134373 -620 624 -.3117647496176379 -627 624 -1.237257709631543 -630 624 -1.4658829979272643 -631 624 .19750875628225995 -636 624 .2444750355422768 -665 624 -.8959860314389568 -670 624 1.3920217361273852 -676 624 .38703610615968725 -679 624 1.9465398534414233 -687 624 -.04214519879128893 -689 624 .4568676474610547 -692 624 .9384706174629747 -696 624 -2.6210102582342865 -707 624 -.1769612610365618 -716 624 2.5012067511455633 -720 624 -.09746166238789584 -728 624 1.5601323301362535 -737 624 -.4753882704932654 -740 624 1.226390471040818 -746 624 -.04267620333387857 -757 624 .9311713592787612 -765 624 -2.6931756341416335 -769 624 -1.5573742659248389 -775 624 .23904717515516558 -785 624 .22684698771394435 -822 624 .45541059256524025 -823 624 -.6056902567482386 -842 624 -.3456567145651554 -855 624 -1.6131778236546193 -865 624 .11178538130068744 -880 624 -.4425600140377949 -888 624 -.5568966664190751 -899 624 -.08646698911311568 -909 624 .5965186372759612 -931 624 .22161625663043338 -940 624 -.2841795517568818 -947 624 .4320874408394275 -964 624 .652755445220406 -993 624 .9022274958307805 -1 625 -1.3203866376172126 -19 625 -1.0194914285487275 -22 625 -.47431836863506077 -38 625 .04531850046810394 -39 625 -1.2602004690396236 -57 625 2.504490310724316 -67 625 -.5175158349809094 -74 625 2.679379208706864 -90 625 -.03824290622540907 -94 625 -1.275098983792791 -95 625 .812239410059974 -99 625 -2.628118041856893 -102 625 .06843654675367601 -107 625 .008411405247129883 -109 625 -.07377469106749521 -114 625 -2.28044812455377 -122 625 -.9384806270373311 -123 625 -.7307020999734706 -127 625 -.5626092430862701 -143 625 -1.9670964158933613 -144 625 .7043559635474657 -158 625 -.5070265791114704 -159 625 -.6392701556053069 -193 625 -.3494438190167012 -205 625 -.2617401825450496 -217 625 2.9161541797623665 -219 625 -.6897842040045622 -222 625 .05244396075909205 -236 625 -.6047111609937066 -245 625 2.224381714411586 -246 625 1.8052841454574429 -248 625 -.8568688840138206 -256 625 -.3326812051704249 -263 625 -.7067698874718892 -268 625 .9021475801226458 -283 625 -.103158973049943 -296 625 1.18639073627873 -298 625 -.5046579057952991 -309 625 -1.348594018650252 -338 625 -.781524056076653 -346 625 -1.2233304075080733 -385 625 .07326877130388595 -389 625 .08776046805579026 -393 625 -.08716970986779139 -398 625 -.6452737707583233 -399 625 .12707667793412036 -402 625 -.6455749182811741 -415 625 1.2989217737170822 -427 625 -.6361893305196149 -431 625 .7815009594221706 -464 625 .18467171667805482 -471 625 -.6040583567418044 -498 625 .5972806102425795 -503 625 -.5348068133337734 -516 625 -.6651209694249227 -517 625 .9679336905755869 -535 625 1.087082621550537 -542 625 1.568643480900919 -544 625 .40388141327510546 -547 625 -1.285039862046683 -568 625 2.836058302663487 -572 625 .4763880140392792 -580 625 -.9407650792632136 -598 625 1.7335488720103083 -599 625 1.0131772115732618 -605 625 -1.536008908984043 -618 625 -1.3305325442188194 -642 625 2.6184962260785953 -646 625 .04539387105489688 -660 625 -.7617086173003601 -701 625 .8465043959786749 -702 625 .23681100716410342 -710 625 -1.0422610091952313 -728 625 1.515627203230669 -752 625 -1.3209881045522451 -754 625 .769286931621635 -771 625 2.873525856238634 -779 625 -.6106101911276045 -793 625 1.2390667218239282 -794 625 .08381552291516453 -795 625 -1.4978262405446792 -798 625 .8107121114869118 -812 625 -.24889975627748603 -813 625 .2357629836468382 -823 625 1.097104562719514 -827 625 1.7359189436000215 -828 625 .2665162942054591 -843 625 .4979222360830984 -863 625 -.5333731686457115 -864 625 -.46605601101318644 -870 625 -.1461606246496782 -894 625 .6576917439699606 -899 625 2.8311328319777895 -903 625 -1.0013814022580687 -907 625 -1.7267712523302774 -908 625 1.8176168935602435 -910 625 .31656572878369954 -917 625 -.9493322487680069 -919 625 -1.0982505485133058 -936 625 -.8151176808591694 -943 625 -.7801403745556141 -969 625 -1.0581353479461244 -973 625 2.3957753940813693 -988 625 2.8725489203712256 -994 625 .6590290403543069 -14 626 .6736722795415543 -28 626 -.29577617914957854 -40 626 .17283849090694803 -53 626 -1.2576532024218692 -56 626 1.3072305792118004 -62 626 1.2018548943659284 -66 626 .24029857032090024 -76 626 -1.97807798956572 -83 626 -.17923479123012742 -90 626 .07345926732630056 -101 626 -.775495439014361 -129 626 1.8926818335412177 -147 626 -.3624377742006528 -155 626 1.1595169344498162 -189 626 -.9706025326820874 -198 626 -.48674077716967423 -211 626 1.6045588643093533 -235 626 -1.6580232502858625 -240 626 .27170621976607023 -250 626 .24174406475805582 -258 626 -.6071806938784148 -264 626 1.608233591573243 -266 626 .0881458369769675 -271 626 -3.2876508513379763 -291 626 1.9289171370432057 -301 626 -.17428006163565196 -303 626 -.16168690318194062 -308 626 .08993540427427442 -317 626 1.8236796952582741 -318 626 -.4949596282212181 -325 626 -.7803118399520002 -333 626 -1.474523641367807 -339 626 -1.6784694536262912 -351 626 .19212604317475387 -354 626 1.7054910681259847 -362 626 -.631342820479852 -372 626 -2.477435380097551 -387 626 .8402942502637323 -392 626 -.9680389036007162 -409 626 .7064902009284314 -413 626 -2.7516124343893904 -424 626 -.9425967500495557 -427 626 2.932243232546541 -448 626 -1.0237336801272519 -450 626 -2.4317472675391634 -461 626 -.0176726248488685 -464 626 -.10378386535357592 -466 626 -.4758215938784498 -479 626 -.4300166836291518 -486 626 .14739790652879742 -503 626 .8861568616871629 -571 626 -1.0021286631877981 -578 626 .5824490874145969 -582 626 -.9989556878771907 -589 626 .9235877284626632 -611 626 .12919130025188622 -617 626 -3.2082106723731414 -621 626 -2.474088659699912 -627 626 -.9796349243050751 -633 626 -1.3232270958267096 -645 626 1.6758766559856146 -662 626 .9200016712192711 -666 626 .8780748366877555 -676 626 -1.3206699302132436 -677 626 1.4785068285952634 -684 626 .7804163500923648 -697 626 2.516556746477412 -705 626 .12716574385656892 -738 626 .6147075137754594 -739 626 -1.0781196728529232 -741 626 -3.148085695840925 -763 626 -1.2214863741779824 -766 626 .7017234480138148 -769 626 .36398490558080343 -777 626 1.02564870832766 -793 626 1.844689781628231 -799 626 .824523112761995 -810 626 -.021877069633125704 -815 626 3.5096515979782734 -817 626 .3541590871924225 -819 626 .23983543931957768 -831 626 -.45059371481444455 -850 626 -.8508705381866286 -855 626 -1.2851507509060651 -863 626 .8496482783010831 -880 626 -1.0917094656862834 -900 626 1.2609041111861208 -911 626 .7504121219777202 -913 626 -1.6869674986199337 -921 626 1.5320593702406202 -931 626 -.08541045400701855 -936 626 -.6760618830428785 -960 626 -1.7610941127530455 -962 626 1.3346256136906622 -969 626 -3.1922023772941577 -982 626 .3054541285694754 -2 627 -1.2216194546137598 -3 627 -.08020617252764943 -4 627 -1.2855868617097725 -12 627 -.9499758918659716 -16 627 -.0025833541436625085 -21 627 -.32722614673072364 -35 627 1.2535140263297944 -53 627 1.7926677293804876 -55 627 .6955562975050713 -62 627 -.18619722271325698 -64 627 -.9147486721151543 -73 627 .8102249384926355 -83 627 .3485260743175814 -86 627 -1.7636930445564194 -96 627 -1.189479835697288 -115 627 -.9376230430150233 -119 627 -.6629657078103205 -122 627 .5527358476508049 -124 627 .6384487787049355 -126 627 .5521798132868936 -130 627 1.5133762137981397 -135 627 1.6594183374021545 -144 627 .39822136904069594 -148 627 1.2131338268810614 -159 627 -1.174493004028282 -165 627 -.9491105961488773 -166 627 -.9918688946238025 -172 627 -1.5837267052689603 -177 627 .07408813007992554 -183 627 -.5817629227103394 -203 627 -1.0179132231071475 -210 627 -.47947180075859475 -225 627 -.44497099211975566 -233 627 -.8444979246054514 -240 627 .8778926210318609 -243 627 -1.021758658309295 -257 627 .9903928517324303 -258 627 -.7439414280973143 -266 627 -.9933496979647755 -268 627 -.6113853011248686 -282 627 .9306314886336231 -283 627 -.44660774603984604 -331 627 -.645631799536004 -333 627 2.0457863168425856 -348 627 .7845836655630144 -351 627 .8539141577979209 -379 627 -1.339352871140572 -389 627 .09555957828336006 -422 627 -.002905189247673051 -492 627 -.3679919399685005 -494 627 .6250840097582055 -504 627 -.8657307547498455 -506 627 -1.380356573548037 -548 627 .7592301001002256 -587 627 -.3134407302507846 -663 627 1.5169921070855232 -666 627 -.8867579572233104 -677 627 -2.4406563666877465 -681 627 -1.5125179701500373 -683 627 -.8329619935813322 -710 627 -.11975424208499405 -719 627 .12188591077616814 -721 627 1.0531485139609196 -736 627 -.11454605086205105 -744 627 -1.7698793821370473 -754 627 -1.051105778470335 -760 627 .0701342536979023 -767 627 1.8923732905090793 -776 627 1.436345765030617 -785 627 .40061346758640504 -804 627 -.27962473448165476 -809 627 .6690913677525391 -816 627 -.4939579115405539 -837 627 -1.9012129185113984 -846 627 -.5354830300972235 -892 627 2.2971663079113642 -913 627 -.12764944606537376 -921 627 -1.5401303146746645 -934 627 .31383345692082054 -945 627 -.7149707033606203 -965 627 -.9654500962122764 -969 627 .5503190802799274 -981 627 -.8233574388333398 -983 627 -1.2526106034445215 -993 627 .3222264908820716 -999 627 .8730565686793245 -11 628 -.5456111788556802 -16 628 -.5212808272866752 -25 628 -.7061847889806915 -47 628 -.3672549165333837 -48 628 -.5247222023728897 -50 628 -.4113269665325481 -65 628 .2065491520403555 -71 628 -.9207958696038184 -95 628 -.7778286040022628 -114 628 .04476623276153696 -125 628 .3970966973698333 -130 628 1.5917152653027529 -133 628 .6428287849212629 -134 628 -.21029194132366566 -135 628 .3377837227999403 -140 628 -.4636470249954012 -152 628 .03971460587424373 -177 628 1.1039997433673792 -187 628 1.7935179046939795 -205 628 -.05032635898822219 -223 628 .4065120814859756 -231 628 .6861770807577005 -242 628 -.5607880641641346 -255 628 -.792674575787582 -258 628 .5100170432501726 -264 628 .24921648078499592 -271 628 .3703392548454213 -272 628 -.3487031452072574 -277 628 -1.6578763386020614 -286 628 -.6440499709278809 -288 628 -.5372438227049698 -294 628 .17001962258915826 -307 628 .709361002541425 -314 628 .3184711478594036 -319 628 .9143989694160162 -329 628 1.0482882164340608 -336 628 -.09234004385128664 -341 628 -.28852003996992165 -346 628 -.3266413989477855 -356 628 .1860282667798847 -367 628 -.0186516917397377 -378 628 1.3654318265885 -387 628 -.08799142484404868 -388 628 1.3629773393513358 -427 628 .028373445123193564 -442 628 .18040151917535863 -459 628 1.3303796197415445 -473 628 -.30342431270099973 -481 628 -.3590704286007621 -482 628 .30186704657330915 -495 628 1.3244326007126015 -505 628 .11632677812931405 -522 628 -.2562655820277324 -524 628 .22860880522039445 -558 628 -.8842507334882135 -562 628 .9476776630460253 -565 628 -.45615922251238944 -584 628 -.3693485544097786 -594 628 -.5155079902074992 -597 628 -.06832267760889724 -606 628 .11492391656742293 -612 628 -.1737495597225056 -628 628 -.7612498098858812 -629 628 .7772668051508256 -650 628 -.8668598738279486 -662 628 -.778144475042492 -672 628 -.5660153575378447 -686 628 -.02725297486477562 -696 628 .4141234823131007 -700 628 -.24278772102215065 -727 628 .009302352532893028 -739 628 .46580935446032823 -745 628 .2994928993082366 -762 628 .5267106855541089 -790 628 .5248194733700362 -798 628 -1.575673011521544 -799 628 1.3020987291714385 -805 628 -.6072640624351743 -807 628 .7599241154566241 -826 628 -.44849166055661693 -829 628 .4685827758401029 -831 628 -.6501721502780132 -833 628 .8759678408582661 -851 628 1.3156771395855877 -857 628 .399474780264847 -865 628 -.21415706743702168 -874 628 -.9332347647752277 -877 628 -.9861616398319387 -885 628 -1.386391195748749 -904 628 -.7260013073095775 -906 628 1.1861821506494596 -911 628 1.0617580325030966 -915 628 -.1496855002521198 -926 628 -1.0012553528618222 -947 628 -.6613609932895009 -950 628 -.3987721093389433 -980 628 -.13956524150845298 -981 628 -.2943245447191165 -988 628 -2.008315008272252 -993 628 -.6284586451720489 -995 628 -1.4379977409156013 -10 629 -3.283851686961456 -27 629 .21667203550123088 -80 629 -1.6040757263043106 -82 629 .31529011867167644 -84 629 2.326218080760025 -91 629 -1.051785342627489 -101 629 -.12395917118502267 -110 629 -.28038440885082416 -112 629 1.0188645926332347 -124 629 -.2306759548013802 -128 629 1.8076923519252848 -129 629 -.5034479110962097 -144 629 -1.045063931805714 -146 629 -1.882570318889344 -153 629 -3.30481996952783 -165 629 -1.8255318170428925 -184 629 -.392146703531814 -198 629 3.3863397698038336 -204 629 .11703459167930204 -207 629 -.13746116269879186 -226 629 3.923762458142066 -231 629 .7431452397606382 -240 629 1.7374631814755668 -249 629 .73946934999912 -261 629 -.5674908545817715 -263 629 .39219726310219494 -268 629 1.628608163435851 -272 629 2.8865514940455497 -279 629 -2.254430745262293 -283 629 -1.8175349247882235 -287 629 .8302438078173172 -296 629 -2.5782858180521444 -297 629 .22665622799984303 -304 629 .5012296221964831 -306 629 .7234838608416171 -313 629 .860391669270483 -322 629 1.4845819025361173 -351 629 -.5120677642237765 -352 629 -.2642317438936236 -369 629 -1.8015649576912767 -389 629 -.34802546094360715 -395 629 .23884516981924844 -402 629 2.157045150777737 -407 629 -1.127637868530586 -412 629 -1.0804621060176822 -425 629 1.915908833470436 -428 629 .8038682782433635 -439 629 .898391257500761 -440 629 -1.086474241888389 -443 629 .8059597832728549 -449 629 -1.858125989708907 -451 629 -1.8798233178603738 -469 629 .7850074917805985 -492 629 -.1008569575696019 -497 629 .06744291130776275 -499 629 .8879922033505622 -504 629 1.035882995750699 -505 629 .9935394866802167 -521 629 .37310030980014774 -523 629 -.5027444688457428 -532 629 .8372412943826304 -533 629 -.9406390154655679 -543 629 .12551616463805093 -557 629 -.6169683509245082 -579 629 -.3898296984815143 -584 629 2.049748718112939 -592 629 .9094978228528032 -596 629 1.1531358072714746 -607 629 1.2623926753973558 -632 629 -1.499946000666378 -633 629 .14237831863705408 -639 629 -.6890054977804613 -659 629 .3364983235310293 -675 629 .40639075692471244 -690 629 -3.08512564427506 -695 629 .8225348864681961 -698 629 .6186568561950608 -702 629 1.4199527610882872 -715 629 .007891994349297271 -735 629 -1.0442335105190164 -762 629 1.058431827067655 -771 629 .22147919793044213 -775 629 -1.1641770653332364 -782 629 -.5420499907455792 -784 629 .8264070821722557 -806 629 .9896336901759424 -807 629 -.13496038143259867 -815 629 .6866633681482082 -819 629 2.1570228660029898 -826 629 -.9422135649145942 -851 629 1.6798126328720582 -853 629 1.0166507107063174 -854 629 -.32306072536051655 -856 629 -.2730801247239862 -858 629 -1.648775443852084 -864 629 -.31941899873040547 -871 629 1.090872322358828 -875 629 .05669220800813821 -887 629 .2478521913826356 -904 629 .07770458712348124 -918 629 -2.3015723019346757 -933 629 -.943658362462573 -936 629 .5132901386806515 -948 629 2.605037983161468 -953 629 -1.7518920646799958 -961 629 -2.0325910716928814 -964 629 .4339718172218411 -977 629 -.9811288263926929 -6 630 -.627286543190172 -12 630 -1.0729663748010414 -16 630 -.9009050289012662 -50 630 -.8891086123498683 -62 630 -.33374257611046776 -64 630 1.5310258789659446 -66 630 1.3840870400053762 -68 630 -.002753625688441473 -81 630 .36383228679394897 -87 630 .5069246938955736 -97 630 .20611039685119287 -102 630 -.909083381502707 -105 630 -.5106559338891171 -111 630 -1.1477866703769946 -114 630 -.46181694937192314 -121 630 -.6546935831278005 -125 630 .9356177316166158 -127 630 1.0381278678620578 -136 630 .9976767016838176 -169 630 -.7373221702627611 -178 630 -1.0713885934712315 -179 630 .24104251385075284 -189 630 .8815424626107968 -190 630 -1.272434470673065 -243 630 -.5113315463376975 -248 630 .8181299008606374 -275 630 .28264780518350807 -280 630 .8091405757659245 -305 630 .1821932926848009 -318 630 -2.7807635849731276 -322 630 -.16841112287515642 -338 630 -.536070506668369 -342 630 -1.0668966152324562 -359 630 -.6810349155561617 -377 630 .6808539966342532 -378 630 2.0405687386662015 -383 630 -.9727691190493146 -387 630 .16164840319585716 -388 630 .879938742081394 -389 630 -.6742688701669121 -390 630 1.1046162948659062 -398 630 .7960952208091172 -401 630 1.1326644566111252 -427 630 .04023820734289521 -429 630 .31198957706366814 -470 630 -1.5674374850124742 -474 630 .9128174768510285 -485 630 -.14201413347471298 -496 630 .6075849799580385 -510 630 -.05270620934749323 -517 630 -.2730854602441396 -518 630 -.36383316280709277 -534 630 -.052931068962001185 -541 630 1.2264134171480439 -546 630 .23949432087757683 -558 630 -.8998947325649196 -564 630 -1.6916318578321012 -566 630 .20480660136618814 -570 630 -.9929194824363117 -585 630 -1.3194266898367863 -605 630 .07223189766566752 -617 630 .5443632308626205 -626 630 .22954152276385506 -636 630 .33856142911814924 -637 630 -.41248056258310833 -663 630 -.6372133703781931 -673 630 -.5837722971760735 -678 630 -.5368141571942245 -697 630 -.17600882296931178 -703 630 -.39986237664871344 -719 630 .7591473434247049 -725 630 -.6662401498800365 -739 630 -.02929227550561403 -755 630 -.2808405093854127 -769 630 -.6784580757938199 -783 630 .08745318032070962 -791 630 .22404323692607458 -794 630 -.8395438447174872 -795 630 .17306852764504999 -808 630 -1.1184327953157538 -840 630 .1943979951759321 -852 630 -2.0507097444522877 -860 630 -.11599221341442283 -866 630 -.8516343808277871 -886 630 .20042570414688132 -919 630 -.7161663670912193 -922 630 2.295227488412336 -944 630 -.6104472239584959 -947 630 -1.2246549309882988 -950 630 1.0431345058608483 -952 630 -.3230164401783861 -967 630 .4808338946144757 -972 630 .3536332047214862 -982 630 .07160148972938785 -988 630 -1.1051396835243072 -994 630 -.2460794003735169 -33 631 .42550841088832875 -35 631 .34877389957992955 -43 631 -.6446316717907896 -49 631 -.7699390129747484 -72 631 .1533023518832991 -73 631 .04926159804668834 -87 631 .12082526146281553 -94 631 .3200408109200846 -107 631 .6189802946514783 -119 631 .6603368463735827 -121 631 .12648090806165752 -130 631 1.4273530194170572 -138 631 -.5756907632414876 -139 631 -.07618527258887542 -140 631 -.6990770763407329 -145 631 .09166894800903631 -152 631 1.6585186258484648 -154 631 -.951423107144926 -163 631 -.9270206854767983 -173 631 .25968537313308615 -193 631 -1.5084924587119222 -195 631 .67443823758203 -206 631 .3131666703041939 -234 631 -1.3738063370675473 -255 631 -.7728564976886657 -262 631 .08927693210304576 -263 631 -.5790995504296832 -283 631 -.27615278575497104 -306 631 .20802721913413424 -328 631 .3599158928749654 -337 631 .7272721543677423 -342 631 .12358945448515998 -344 631 -.6753737221877982 -354 631 .8997631669540671 -357 631 .017809527790096952 -360 631 1.327467756060681 -373 631 -.12352829312854635 -380 631 1.7912806389506788 -382 631 -.3840056624993514 -383 631 -.6467410558772493 -384 631 -.6851037642704838 -386 631 1.695016656786829 -388 631 .1749998760682136 -392 631 -1.2252527969396096 -413 631 -1.2348717678997352 -420 631 -.6997792652787631 -428 631 -.20705420526579743 -435 631 -1.2349729223241979 -453 631 .9488938487703087 -456 631 .5262812289587919 -462 631 -1.380669521589179 -465 631 -.4852494406008476 -491 631 .4910243147153194 -500 631 -.18638059580276267 -519 631 -.3530993309100398 -557 631 .7292537027870153 -576 631 1.4814149308614537 -582 631 -.7444847949372867 -583 631 .5336873819741762 -586 631 -.9034020608374391 -601 631 .8804696539686602 -615 631 -.1043723685424155 -620 631 -.9716542855325174 -633 631 .5363993995851642 -634 631 .00839667896601795 -636 631 .9661986225842474 -639 631 -.7832885593671274 -643 631 .2700543402375568 -651 631 -1.1859402943866595 -672 631 -.6919778902592402 -674 631 .3040882650158985 -686 631 -.5043248831634247 -696 631 -1.1768707085190826 -699 631 -.37135544942058096 -711 631 -.375185607166008 -715 631 .18756910819458303 -717 631 -1.080473723320704 -728 631 -.0021721545339996318 -734 631 .5369893889026572 -751 631 -.2381198440122019 -761 631 -.05635549970274771 -765 631 -.6410598070671253 -772 631 -.00900246673342886 -773 631 -.3650748725444269 -786 631 .24405031621628118 -795 631 -1.1125095169233208 -796 631 -.5633999250238366 -800 631 -.24402404981593936 -805 631 -.11445185902818737 -808 631 -2.059719279538397 -819 631 -.5944211577892343 -824 631 -1.09128644609237 -842 631 .36855221784905756 -850 631 1.4265330781949348 -865 631 .2373776623073206 -866 631 -1.0581886139728034 -874 631 .3492561777908208 -879 631 .24309225029827244 -880 631 .587381426370294 -916 631 -.05321490506841027 -927 631 -.5839615520388148 -930 631 -1.0033137305964426 -943 631 -1.5680753404055878 -955 631 -.42395984734343195 -961 631 1.0454765401158097 -964 631 -.7111860251409471 -966 631 -.31197723901119173 -967 631 .6049550106409821 -973 631 -.582889303841169 -977 631 -.029376717824933937 -981 631 -1.1023599676877318 -990 631 -.06905887447371181 -18 632 -2.25585555906579 -44 632 -.28838764798182975 -61 632 1.7937221493557585 -62 632 -1.095836551534425 -69 632 .5528709688173005 -76 632 -1.7763290972084196 -88 632 -2.7327383328114383 -110 632 2.080077831826011 -119 632 .3129905299910709 -122 632 -.5713918231326394 -123 632 -.38066358926141247 -133 632 .7791223941323687 -147 632 .1556128925587899 -149 632 .32556248829384316 -157 632 .39502809087627716 -158 632 -2.2867771859839916 -164 632 -1.0928420429809438 -179 632 -1.341966105394598 -186 632 .15447518293909776 -187 632 2.603847849672007 -190 632 -.47979769175318654 -199 632 -.8018495790137337 -203 632 2.726484372666009 -219 632 -.1542391271037959 -227 632 -2.2361960579006537 -239 632 -.680610282361347 -240 632 1.4835729837053864 -241 632 -1.2765537417410031 -245 632 -.13039359280430496 -266 632 .04268751185150739 -269 632 -2.1534830195236934 -270 632 -2.5906532267554607 -273 632 .9685156613534034 -274 632 .2844477619722333 -286 632 -2.080229955278012 -319 632 -.5799806731640612 -327 632 .8003682418818161 -346 632 .402604975561616 -382 632 .8522832741981171 -384 632 -.7397529032183611 -386 632 .10384024337703973 -390 632 -.7194425591582456 -400 632 .17617268028086552 -409 632 3.595024010148437 -424 632 -1.9675549906059808 -427 632 3.5104171733157066 -430 632 1.4590757420772154 -440 632 -1.2146392973638551 -448 632 -.8885266980207805 -469 632 -.31834426484978173 -476 632 -2.0828640119742694 -485 632 -.46980725223149766 -491 632 1.5544462114271107 -494 632 -1.8505916481037747 -530 632 -.0015108736473763845 -533 632 -1.0109948399085735 -541 632 -.43361612284330403 -542 632 .13424518235751323 -549 632 -.43648104681287586 -551 632 -1.0849847332589464 -557 632 -1.4649922952841212 -598 632 .25444972299409896 -605 632 -.7771922180122793 -620 632 -1.7249243431754178 -622 632 .6779136918365234 -628 632 -.6830451056462533 -642 632 .6169364478999191 -647 632 1.1782906957178008 -654 632 1.6440052617767937 -677 632 .30607798260541835 -684 632 .1253138558035473 -694 632 .23468480078591736 -699 632 .31564327122292635 -723 632 -1.456489562397372 -728 632 .1364283382647387 -732 632 -1.700419732704039 -737 632 .8844823980203288 -763 632 -1.1524038384959812 -818 632 1.6547031883922525 -846 632 .06405797977325148 -892 632 -.3407517457398721 -897 632 -2.943480670340205 -906 632 .47169544564941845 -908 632 -1.1786590151943575 -920 632 -1.1816005070972053 -934 632 -.7521379506580448 -938 632 -.5692052340424274 -942 632 -.25429788111937657 -955 632 1.5616833889059005 -966 632 -.9965112312923936 -970 632 .2537598767545159 -980 632 -.9559386542505575 -983 632 -.7479636630424333 -995 632 .6594481867349742 -997 632 -1.4538409350915378 -2 633 .10325165568565668 -8 633 .9008939517338124 -21 633 -.9654423503795507 -24 633 -1.1434097788630515 -54 633 -.819737731569014 -57 633 -.06060559933778402 -60 633 -1.5135758576051372 -64 633 1.9096172970071172 -77 633 .5339261680188173 -88 633 -.25643557873549977 -99 633 1.0370122858134287 -100 633 .07899713047190879 -121 633 -1.0849066942497108 -151 633 -1.4603993554646395 -160 633 .17652236157425338 -174 633 .1608827744319707 -178 633 -.03087877158603962 -179 633 .4364699956835748 -186 633 -.32660672135443514 -203 633 -.6627662716016253 -206 633 .9851873978595477 -210 633 1.3629730313650066 -227 633 -.6812905295981423 -235 633 .8302536317402205 -237 633 .748502897566618 -240 633 -.47416052147081816 -251 633 .5345405309979796 -254 633 -1.1503599674570786 -257 633 .004446207350758513 -258 633 .10058519080279474 -259 633 .1855844329869658 -269 633 .8257552414591988 -274 633 -.16724844054195473 -281 633 .9406820387238027 -290 633 -.5926466925624049 -302 633 1.2032948853842669 -310 633 1.4095819830176706 -314 633 .6150045829178092 -372 633 -.3186469601996266 -389 633 -.6482212870214688 -394 633 1.1986757473304106 -427 633 -1.571014878392086 -436 633 -.3792426050219365 -437 633 -.2638702752745091 -448 633 -.3227110992126447 -456 633 .5051122250077872 -488 633 -.8917187963087996 -500 633 1.386357906438748 -514 633 .2607302330531271 -524 633 .29110416300364106 -529 633 .015924886237438846 -535 633 1.801394447392647 -540 633 .48361273246344794 -542 633 -1.5440764853774864 -552 633 -.5448601366247635 -553 633 1.938220103512465 -557 633 -1.7755794204526936 -573 633 -1.0060623279976193 -577 633 -.8924461981853345 -587 633 .010548104614818171 -598 633 1.370916325531193 -604 633 1.0080689355339765 -606 633 -.9067619447547578 -628 633 1.6089323231993449 -648 633 -.5444024476437052 -656 633 -.24584855108208864 -663 633 -2.142293601743712 -685 633 .5817617310019877 -688 633 .995597863367569 -693 633 -.215153398863417 -698 633 .016620626946836137 -702 633 -.5677761814216526 -756 633 2.532419907963682 -770 633 1.077538532583143 -775 633 .4505511181342861 -780 633 -1.1512296331555933 -781 633 -1.2714583086378575 -783 633 .09154385526779443 -792 633 -1.1779330119496838 -794 633 -.9369290970971756 -796 633 -1.0160397690556493 -810 633 -2.51317241217188 -816 633 1.8483276395461148 -818 633 .7849217464557967 -821 633 -.9113752166319117 -828 633 -1.901853201445852 -849 633 .9184456213116333 -867 633 .5043955388196018 -874 633 -.6957781067407375 -876 633 -.07012887000042567 -877 633 .2336898055554354 -881 633 1.45575744501525 -892 633 -1.5739693896402907 -893 633 .6504478044337664 -908 633 -.4760719538950567 -911 633 -.9746871902389588 -913 633 .8729840733496459 -971 633 -1.2800523931452794 -974 633 -.9808234700029121 -982 633 .2532360339757165 -991 633 1.6398353054727752 -993 633 -2.099135008803668 -997 633 -1.063726642807594 -2 634 -.08227347618512942 -32 634 .33064456099463024 -34 634 -.5611651121727296 -40 634 -2.047295698873717 -46 634 1.4352862397697255 -73 634 -1.0582058435407071 -98 634 -.07367814763313363 -105 634 -1.0063419647196927 -114 634 -.23992368835384925 -120 634 -.8366711709135312 -126 634 .0443973672912677 -154 634 -1.5174752110475627 -164 634 -.43991537811220227 -170 634 1.5241302888005406 -171 634 1.280809925695747 -176 634 -1.0231191448089145 -184 634 .5169362716361507 -196 634 .12456913090740329 -197 634 -.21398854465198244 -199 634 .4362270902157566 -207 634 .02310860480625218 -209 634 -1.9380535067402347 -215 634 .4368849220081342 -224 634 1.1709681445146718 -234 634 -1.2227497680734123 -251 634 1.446926975615691 -257 634 .5926122694651629 -258 634 -1.1398871752595818 -262 634 -1.414672968247171 -269 634 -.44889644952871455 -300 634 .2431193211737389 -308 634 1.9009760044880226 -331 634 -.010545936218261137 -344 634 1.3014896818752528 -360 634 1.4576977372798063 -364 634 1.8154310777295375 -365 634 1.2569327197293079 -366 634 1.1241429685331403 -380 634 1.1355074952892905 -402 634 -1.2072718208383804 -403 634 .5439370029094327 -404 634 -1.1448665893745262 -408 634 -.3217382113796558 -426 634 -.9476315403654832 -435 634 -1.0422789816172275 -436 634 .628988614012838 -447 634 .21270860643537542 -473 634 -.337445234237789 -474 634 .47440283505410563 -485 634 .2786036344985768 -486 634 2.4162321151131225 -490 634 .4224982668947797 -492 634 -.12916371948766942 -494 634 -.5360727663105984 -515 634 -.6663616223642103 -526 634 -.30048312545061756 -536 634 .6050658190576882 -541 634 2.120596463214809 -554 634 -.07845000068196617 -558 634 -.3441571650486707 -560 634 1.9327559163378023 -563 634 -.6538251558479662 -564 634 -.7295837385031981 -570 634 .42006837484752113 -573 634 .06892458212013161 -574 634 1.366991039170543 -576 634 1.986599576744595 -603 634 1.9485324010814984 -610 634 2.2604312760806025 -623 634 1.2500847157924642 -625 634 -2.400232472572145 -628 634 .7369057138585182 -634 634 .6168610985119739 -638 634 -1.5719152473311575 -649 634 -.3789129968263618 -653 634 -.3321044410692836 -656 634 -2.515459961398594 -663 634 -1.9971652889781586 -721 634 -.317735216462794 -728 634 1.6884915664968585 -735 634 1.5731878311450815 -738 634 .6799654579345287 -750 634 .8479853954429923 -756 634 -.27898609232609306 -771 634 -1.387916154900403 -799 634 1.0992265185273191 -801 634 -1.318738474574275 -813 634 .104677012297719 -814 634 -1.2486249660184976 -841 634 1.721452206057317 -869 634 -2.66447289985665 -874 634 -1.5641282054308092 -878 634 -1.0824852096005637 -891 634 .8678182546871718 -897 634 .161954318573168 -909 634 1.3998479034582696 -914 634 1.1429865296761401 -915 634 1.1378363754566643 -919 634 -.5780652551150871 -939 634 1.1819267667324769 -949 634 1.5916877014191075 -966 634 -1.3235129513113475 -968 634 .9099711474835576 -969 634 -.24382584708871707 -991 634 -.7677469588499554 -994 634 -.4058972828347035 -14 635 -1.3442076765984048 -21 635 -.7161747537621996 -22 635 -.13231972883865278 -31 635 .4096869522570165 -32 635 -.3277331381424769 -35 635 1.2372651104738022 -49 635 -2.736497501005071 -52 635 -.3027189929578945 -58 635 2.6429998646844206 -59 635 .41193956596343606 -63 635 .15479572324083957 -69 635 1.5342158956024536 -72 635 -.8715839193685073 -79 635 -.40400130750420576 -82 635 1.9041729590971577 -88 635 1.6483504891805754 -94 635 1.4361930688980433 -103 635 1.1626736218523077 -108 635 .9804395904636182 -110 635 .9214491457738676 -154 635 1.3004693877266296 -169 635 .18761506612567092 -170 635 -.3969336128708504 -190 635 .8788455466512001 -222 635 -.7264832897699911 -241 635 -.8323638836486279 -243 635 1.0101141168272714 -246 635 -.43106545981280087 -256 635 -.1953712801421921 -276 635 .9411958639115418 -285 635 -.559678164385365 -289 635 .9974787236112203 -306 635 -.19753492025083158 -309 635 2.2349566037876403 -324 635 -.7560472333703454 -340 635 .19918502001173663 -359 635 -1.045480484138838 -372 635 .8189624518563474 -385 635 -.0877344557497094 -389 635 .18759817285493818 -449 635 -1.575754761643228 -467 635 .8118536627989812 -480 635 -.4193400842162611 -503 635 -1.4551190068831878 -504 635 -.8926176040387594 -525 635 1.0786103662818536 -526 635 1.323996838863561 -528 635 1.6878625583739457 -555 635 -1.8791457540160112 -564 635 2.898603288293722 -569 635 -1.7850065848589263 -573 635 -.2863380300534318 -577 635 2.1560498049104835 -582 635 -.13705729461505167 -624 635 .7698896274414754 -630 635 -1.0432949152508548 -631 635 -.3888722665881092 -637 635 1.7490202696494301 -640 635 .6063426539315284 -650 635 1.8839849535502826 -656 635 -.49728576504268807 -657 635 -.6475992537393607 -664 635 -.2164609700581659 -665 635 1.00548291449875 -668 635 -1.1290334030643654 -691 635 -1.2682624110616956 -697 635 .5825032710638895 -699 635 1.3901028578810626 -706 635 .8515899436741873 -708 635 -.5743571909124954 -741 635 1.8956582183614903 -744 635 .303982510284285 -758 635 -.1140200234196428 -772 635 -.6390437564435785 -775 635 -.2959766469917751 -779 635 1.0677741472887747 -785 635 .3558894320536697 -794 635 1.0123969632591399 -804 635 -.12440228097700748 -809 635 -1.41451957006869 -833 635 -.5132249284094516 -845 635 -1.0567662179854518 -850 635 .27230189365456775 -857 635 -.9262425487650752 -859 635 1.0631707492932625 -871 635 -1.845548047701299 -879 635 -.8142298911975754 -902 635 .3380424588431016 -910 635 1.6571316784337524 -917 635 .29831203862352673 -931 635 .3662775182981165 -935 635 -1.0307730740923415 -945 635 2.846642679290205 -952 635 -1.43430068815546 -953 635 -1.1488293994722127 -964 635 -.23714352815253475 -965 635 -2.0246437749877924 -975 635 -1.1283396962056587 -7 636 2.1549635093800696 -23 636 -.9389417036063036 -51 636 .20121003679913887 -52 636 2.393710890169076 -53 636 -2.352359852907897 -56 636 -.7267595570438582 -58 636 -.4955161785655115 -59 636 -2.1336151472027076 -83 636 1.4514649287852772 -88 636 -1.2984527612859578 -91 636 -.8646444305194632 -104 636 1.652225128490057 -108 636 1.6453650114147065 -112 636 1.5766588365451844 -118 636 -1.60043641526305 -120 636 -2.2318475245450036 -127 636 -.20223642562923277 -147 636 -2.1625385095236216 -167 636 .8918539600278813 -174 636 1.1050239051043582 -178 636 .05649871264514178 -199 636 -1.1888172802877133 -203 636 1.0213997271597646 -208 636 2.4385610749591615 -209 636 -1.1171812991540284 -217 636 .5574581569414732 -222 636 -1.4502222371998004 -229 636 -.029292076813323076 -235 636 -1.8952181291332029 -247 636 -.8987140123521311 -252 636 -1.995722440518108 -253 636 -.259781580353561 -260 636 -1.8262548708566015 -267 636 .1041491871957615 -272 636 1.5488961072896112 -273 636 1.2388851222533048 -274 636 -1.2623747646673247 -276 636 -2.482186955386914 -298 636 .332243455667009 -332 636 -.9395429676118012 -334 636 -.0638956523645331 -341 636 -1.3381367488040974 -351 636 .9722726882954525 -362 636 -1.8781302624122376 -364 636 .38952457454718126 -366 636 -1.3028591787188022 -373 636 1.7791562407939288 -378 636 1.2863302928887914 -381 636 2.4096808338120392 -384 636 .6902209175132707 -385 636 .21783433517050024 -390 636 .1780121504195296 -395 636 -.6538729599991191 -397 636 -.06710220214244361 -406 636 2.236835159727489 -412 636 -1.27455152783429 -413 636 -.08360882226720578 -416 636 -1.1229401925606914 -417 636 1.7419715941616358 -435 636 -.32871815729416953 -443 636 .03833651909703801 -448 636 .4708824927858152 -451 636 .7139742312771628 -461 636 2.138129538900585 -476 636 -3.354714181333001 -482 636 -1.931955931694929 -496 636 .06322926748247076 -502 636 -2.8085014869387175 -513 636 -.45990293298203877 -526 636 -.32003511081185704 -529 636 .2591515307803689 -536 636 -.8555743662498676 -537 636 -.7399124509367624 -564 636 -3.177133044838524 -566 636 .4557921744378688 -577 636 .1172587750023917 -584 636 .7345139922656047 -640 636 -1.357688595540683 -645 636 -.7864706951015004 -656 636 1.2060312649895584 -659 636 2.0904057108848453 -664 636 1.6500150917907423 -679 636 1.2540960804835013 -680 636 -.13516075395594285 -700 636 -.6571914723207555 -705 636 -2.673792785597404 -708 636 .14227430736907798 -715 636 2.200241842863077 -717 636 -2.6748814924114206 -735 636 .5936164196236885 -736 636 1.2687141557202717 -737 636 .4625741017212142 -738 636 .4560833752654981 -748 636 2.0550637770080966 -749 636 .5600840448592788 -752 636 -.9978658602138117 -754 636 .2898103004330532 -761 636 -1.221341213348501 -767 636 -1.8606536809664653 -772 636 -.47946057189701746 -791 636 .2834289973611095 -794 636 -.6711735453108765 -799 636 2.613477425613555 -800 636 .9312287673244616 -810 636 -.014698410996119099 -826 636 -.9290838473641985 -837 636 1.3463106692831 -839 636 .07517020220313309 -843 636 1.7727313455460907 -845 636 -1.151626247569296 -849 636 .6196343162082265 -855 636 -.6555430989492881 -868 636 -2.1507535005402008 -881 636 1.0996133784661604 -894 636 -2.072681752731748 -904 636 -.4117872228663514 -907 636 .010316054215774903 -922 636 1.4436416245766333 -937 636 -1.246120319313558 -940 636 -2.7368938712112865 -944 636 1.0237617891611535 -946 636 .05672464672541655 -952 636 2.3416023018153833 -957 636 -1.4065970103258072 -964 636 1.7318874378722608 -988 636 1.0617285758146453 -998 636 -1.1101081720186574 -6 637 .6566499709067115 -26 637 -.05546403066250919 -36 637 -.012139814290281312 -37 637 -.9256061288523283 -39 637 -.7520071528648451 -44 637 -.6578569941556951 -68 637 .7282080551187964 -96 637 1.7350575805631885 -102 637 -1.376581222338797 -106 637 .258112673948107 -108 637 .30411489480180726 -113 637 .5998276645872171 -120 637 -.876377122898934 -126 637 -.8299368865927932 -146 637 -.5347572107510048 -158 637 -.39228330480504425 -159 637 -1.5542202853423754 -190 637 .08010442300932774 -196 637 .9752935329382253 -209 637 -.540686708503477 -212 637 -.39506822414403564 -222 637 -.9959586693825451 -225 637 .6080911268639005 -232 637 .48354975579525394 -234 637 -1.9647613047859918 -261 637 -1.8682575279732903 -270 637 .7198245507599608 -275 637 -.6891244225536656 -308 637 .15082044360918193 -312 637 1.3612009039818849 -327 637 .10536389742587779 -332 637 -.966210159265905 -333 637 -1.8226246400033639 -335 637 -.6096354770628986 -343 637 -.04031239263475144 -345 637 .10072256105834917 -350 637 .01595221139715984 -351 637 .6222784693466729 -355 637 .4283692330443481 -365 637 .7730424004532606 -368 637 -.9080053809762796 -373 637 1.0853363583905014 -390 637 .30988836512685247 -397 637 .05721509364633346 -399 637 -.12969333504048977 -414 637 -.3333663725006111 -416 637 -.11214543403010996 -435 637 -.1296955239419314 -436 637 .5193667350649341 -455 637 .2279239849628407 -458 637 .47258819179171074 -470 637 -.9498400140557883 -475 637 .5981445741146049 -481 637 -.16578666816108198 -491 637 .631327615392769 -515 637 .36402379148905234 -516 637 1.5068415167960545 -520 637 -.631545204894958 -521 637 .1163641077346222 -531 637 -.5900782212327684 -551 637 -.6970468638583668 -557 637 -.39517381134411916 -563 637 -.41362194048352907 -567 637 -.8218873101546025 -580 637 -.2101515450370783 -581 637 .0637465399358422 -595 637 -.4514083986656948 -602 637 -.09742974226713412 -606 637 .007420729951846582 -610 637 .7521726325251801 -611 637 -.9629554879179917 -627 637 -.46776578620121856 -641 637 -.9486628541436894 -653 637 .9471017087443948 -663 637 -.866760328558038 -676 637 -.7646648499931731 -687 637 .4890921794745471 -704 637 .5110290432223469 -706 637 -.6226744785532881 -709 637 1.0595326526551037 -711 637 -.7764350777645302 -714 637 .3426145030629174 -728 637 -1.1918891512083163 -758 637 -1.5700352947780352 -792 637 -.031488805520873575 -794 637 .2345431861092609 -799 637 1.3533259430936433 -811 637 .7497355898002125 -815 637 .7069695599996537 -822 637 -.12022395590677701 -840 637 .12220877648701915 -847 637 .9395201492665272 -860 637 -.37348995254916484 -877 637 .7146728488148515 -892 637 -.5441834035029778 -897 637 -.9368243361061686 -903 637 .5370116505503864 -911 637 1.1493800651453512 -928 637 .5713952143712998 -936 637 -.7786605223825781 -943 637 .8998304834350185 -954 637 -.08390304718636304 -955 637 -.13113376777620708 -981 637 -.008865728450441382 -995 637 -.8939086121265664 -997 637 -.5801833008591195 -999 637 -.5241650191954401 -1 638 -1.0331965582150706 -13 638 .5977421767030442 -16 638 1.0117767519816465 -19 638 -2.4338980518731645 -27 638 2.7722477431304435 -28 638 .8190846232731022 -36 638 1.7266078246586716 -43 638 -.04773585350862278 -46 638 -3.0102903059642325 -51 638 -1.7429555463507784 -59 638 .21451714466532365 -78 638 2.831245097374309 -83 638 2.7070806870562345 -84 638 -.3401123281706854 -85 638 -2.0879975420251418 -97 638 -2.5754701878161077 -98 638 .4088272925797237 -102 638 2.0282452299279794 -114 638 -2.44050127631382 -115 638 1.7299178011412315 -125 638 .9662875881969764 -135 638 .8972491508172336 -143 638 -2.044219302401377 -144 638 1.2575041968370564 -161 638 -.9961375952167546 -165 638 -.885466741493311 -171 638 .4721628469904988 -176 638 -.7921584659207364 -186 638 1.071394303433299 -193 638 2.2408740402186242 -197 638 3.0283748277213705 -205 638 .32462502077065586 -215 638 -.39386679194769436 -225 638 -3.810419899294381 -228 638 -.31980489211644514 -242 638 -.7970852737048442 -251 638 .7414273384731778 -253 638 -.46432930168394193 -261 638 1.1133280102398608 -275 638 3.677870690210705 -276 638 -.5267033777943928 -287 638 1.7900235679104983 -289 638 -.5440928822885875 -292 638 1.3571963755028302 -311 638 .5137716865235931 -329 638 .5367860721369306 -335 638 -.4748208976989886 -345 638 .1191176625624617 -349 638 .6056177814597523 -359 638 -1.60667501904229 -375 638 .5331480622724902 -376 638 .7356366387223943 -384 638 2.691299597735705 -396 638 -1.0070706177790298 -398 638 -.36919957860480024 -419 638 -2.8478378595975067 -422 638 .9219847647676117 -454 638 1.6177107417947867 -474 638 1.139503879437622 -491 638 -2.9961403617667206 -493 638 1.0593762808326272 -498 638 -1.585374729136212 -504 638 -1.749565896475043 -516 638 -.8791536845135475 -517 638 .9542613323925608 -529 638 .8551426539703298 -545 638 -.8354480130181778 -558 638 -2.288292911099111 -569 638 -2.007580878625232 -575 638 3.6805461882833264 -600 638 .14173908576509747 -603 638 2.444002773090522 -615 638 1.0941533124082963 -648 638 .3133162996890974 -649 638 .4031388627845579 -655 638 -2.155453055158498 -675 638 1.0925257373090922 -697 638 -.8183091179219675 -698 638 .7322898441059411 -700 638 .515205622331895 -706 638 -.21414355065972046 -707 638 -1.6862521664317018 -713 638 -.0897186849281833 -716 638 .552408337654104 -717 638 -.4841493939520962 -722 638 -.7261138628113903 -727 638 -2.002421735221111 -730 638 .023376568575916988 -732 638 1.6993285244570793 -735 638 -.1220594273803002 -741 638 1.2301887952033084 -742 638 .08842322456290225 -747 638 .3897338446681398 -758 638 1.25093920356121 -770 638 -.21560635539163048 -771 638 .5986463056910918 -798 638 -.11919455558665015 -803 638 1.1593531211140862 -808 638 1.2615899789189098 -814 638 1.4884984275845758 -838 638 1.1602161273595228 -841 638 -1.0370596637096567 -849 638 -2.4578705289085314 -853 638 -.10291547043322789 -862 638 .3618229886542897 -868 638 .9870119022870754 -871 638 -1.290433195423549 -876 638 3.309138614978058 -889 638 1.0208519772930083 -900 638 -.6894462307488204 -904 638 -.6760065244248034 -908 638 2.050346504360484 -929 638 -2.213394353071322 -950 638 .7244809217606462 -991 638 1.2808613521198522 -993 638 -1.0822419389682034 -1000 638 -.42969512657199405 -18 639 .2594504711409047 -19 639 -.26921360561297153 -22 639 .45829054276234055 -25 639 .5408662226476397 -37 639 -1.521900726598746 -41 639 .6834379735924087 -56 639 .21927558039886919 -62 639 -.197936686795796 -64 639 .8715627131348528 -91 639 .9224247730853912 -94 639 -.582778606350999 -96 639 1.4633036584078856 -106 639 .7457434650879611 -123 639 .3066981703301917 -126 639 1.5810785375838852 -131 639 .6603442409619874 -139 639 -.24174563000442936 -154 639 .061032315231890046 -162 639 -.378935626400266 -168 639 1.5741703763217512 -195 639 1.0588469203329876 -203 639 .8350558629905288 -206 639 -.9393626249380076 -210 639 -1.014639770184032 -221 639 1.9368988435729795 -225 639 .2791649148448755 -248 639 -.26901171906695975 -295 639 .16277896357632043 -296 639 -.6951217631622719 -339 639 -.8223299116021708 -341 639 .5463678951191968 -354 639 .6053070695420117 -359 639 1.7155541011936526 -368 639 -.46955135185677904 -371 639 .3854085686585897 -373 639 -.34304936654669216 -376 639 .707622924732741 -395 639 .002307403575564762 -397 639 1.1663336123580883 -401 639 1.0342095556263868 -434 639 .8079420800442838 -451 639 .11203479528162127 -452 639 2.0848125251866207 -480 639 -.06586116491811733 -483 639 -1.172648296919547 -485 639 -.9812289510686001 -498 639 .1096696979765336 -499 639 1.1552033738790657 -533 639 .40059378012349517 -544 639 1.4662320970316638 -557 639 .6380527290878983 -563 639 -.037458502777319685 -579 639 -.2773901989989054 -590 639 -.6414895392326997 -591 639 1.2831990076449866 -610 639 -1.531520025790359 -620 639 .8672081827207145 -621 639 -1.2025949048985103 -646 639 -.5533646924662639 -647 639 -.14761393641099993 -657 639 .15672641436560886 -673 639 -1.6143885961649762 -681 639 1.3710692843160701 -695 639 -.9311800620366562 -715 639 .4762634785542282 -716 639 .5286683080378448 -721 639 1.259090468194158 -741 639 -.9374614355076452 -742 639 -2.55173111748829 -760 639 -.026157929772444723 -773 639 .15417244207330882 -779 639 1.3167450830206853 -792 639 .2835023533307333 -823 639 1.5420816499995944 -824 639 -.36205439556693925 -850 639 -.9253515549572188 -854 639 -.9290730034502879 -855 639 -1.084538929674816 -863 639 1.2608817871963984 -877 639 .1680640518333026 -883 639 -.4355558639065977 -892 639 -.5585208477020663 -893 639 -1.3188970913599256 -900 639 -.10665982321668148 -932 639 .10889466246052444 -940 639 -.8275385328441074 -941 639 .47400695021981026 -942 639 .4921604341856858 -957 639 .23417773928546587 -960 639 -1.2159501695840622 -961 639 -.6015662109519948 -968 639 -.8645870223191633 -975 639 -.0783079719964408 -977 639 .628406453477995 -1 640 .5456738950836396 -7 640 -.9786093158651173 -9 640 -3.0361299584264296 -21 640 -.23171899882585234 -23 640 .1558452075391442 -26 640 -.908168986241038 -28 640 .30482063001850906 -44 640 -.6325774839213847 -64 640 -2.3926922667202852 -77 640 1.8968037825954611 -79 640 -.4985690558609139 -90 640 .8265317985707241 -93 640 -1.7638185715793326 -108 640 -.3267724756871204 -122 640 .5361751508363163 -144 640 .43763338819267705 -151 640 .19050034314966252 -165 640 .0027005792046590066 -173 640 .3221183749302233 -180 640 -.6813089176686811 -197 640 2.9537534063359114 -210 640 -.036297076412058454 -212 640 -.6598849456717581 -221 640 -1.65449658070225 -222 640 .8799683427284232 -234 640 1.3707487609164863 -271 640 -.711584193243968 -274 640 .4794530379681531 -290 640 -.662429319870917 -302 640 -.9819395592180649 -303 640 .9744672370765174 -328 640 .13934488769754794 -332 640 .09311034853994313 -341 640 -1.0793458905806728 -351 640 -1.5497933102297206 -368 640 1.1467082399532 -376 640 -.3232000499991507 -382 640 .3373881210503179 -384 640 1.792713361509845 -390 640 1.3691063742015035 -408 640 1.6614377328845298 -428 640 1.7014522554423703 -442 640 -.5140911987370335 -451 640 1.437703638672751 -457 640 1.348535420729011 -498 640 -1.8056442626556766 -510 640 .4921735362167007 -516 640 -1.7325629295350429 -553 640 1.4802034871172791 -571 640 -.4195754678368945 -574 640 -.14247674150483522 -575 640 3.191318924216886 -593 640 -1.11712065255006 -595 640 -2.0330664564538425 -596 640 .7838795949282439 -598 640 1.5196113583011954 -600 640 1.7744367975625401 -614 640 .6958832061425739 -632 640 .10210828000382756 -641 640 -1.9859784353357806 -649 640 .7301368708027989 -667 640 -.32054295167674146 -668 640 1.2652387055076055 -671 640 -2.073532341882233 -675 640 1.7516076579921678 -679 640 -2.0300037575352183 -687 640 .9279183119266061 -694 640 1.889734244465446 -697 640 .6316650852013538 -718 640 .008447060841226341 -723 640 1.5027978418803158 -739 640 -1.4614998903486691 -749 640 -.19406755966140465 -756 640 1.7949263539812348 -763 640 -1.1282117023545664 -768 640 .7171286949634764 -769 640 1.7325540576561367 -770 640 -.7141222741581654 -779 640 .8705169516066708 -797 640 -3.2645660414629014 -806 640 2.5701574555355706 -824 640 .5070987635464653 -838 640 1.6946558820722113 -840 640 .4948705455340146 -851 640 .014180736697369474 -877 640 -.45734671923774284 -889 640 .28654085427922216 -893 640 -.6022164075380803 -895 640 -1.2132660068898493 -908 640 -.7427411247945962 -918 640 .5077492637568511 -919 640 -.7858953135214625 -932 640 -1.3231218019143076 -945 640 2.310072123187865 -962 640 .30722168304491415 -966 640 .34491660328484264 -998 640 -.94920548996599 -24 641 .5974821253761737 -26 641 .4856815273196947 -33 641 .2971011102337202 -49 641 -.6891929712127073 -55 641 .31088839206254504 -66 641 -.654255708687489 -71 641 -.32892027544120894 -82 641 .29494612980054613 -87 641 .13440400956224663 -96 641 -.25688412243311887 -100 641 .2773224003650272 -101 641 1.3863198436602462 -102 641 .533680895166785 -111 641 -.5658002567812923 -116 641 .4135109445741133 -125 641 .8929258147742922 -130 641 1.4234213668427624 -131 641 -.07603312054195176 -144 641 -.2204742103043962 -148 641 -.06046127537219234 -178 641 -1.015344313068903 -195 641 .4106222082657123 -203 641 .2778450002718892 -209 641 -.33417869607057504 -210 641 .18150986783479114 -220 641 .3175682628234921 -234 641 .8847582041519909 -245 641 -.36712776624470334 -283 641 .14448568344801394 -290 641 -.4566713900305247 -304 641 -.41307693026416703 -313 641 -.21305832840473826 -314 641 -.28384872698577734 -341 641 .09033701191366901 -353 641 -.18631392796065127 -357 641 -.23041530464637838 -365 641 -.3350473409398236 -370 641 -.2755401356744418 -376 641 .5171336401591287 -394 641 .9665865954783152 -395 641 -.3060815064670713 -402 641 -.14293108748697642 -407 641 .33314016112959544 -408 641 -.9321302742537847 -413 641 1.7531346255122457 -425 641 -.28978341374837896 -429 641 .7949633228710045 -452 641 -.0730893019821186 -463 641 -.7028333940474235 -465 641 -.6038234872957006 -472 641 .30247043765235004 -476 641 -.4488372739390558 -490 641 .6206123851473145 -495 641 -.005784020816262447 -505 641 .41424085985583114 -517 641 -.2739896597747155 -538 641 -1.1261076465144852 -550 641 -1.293876862134788 -557 641 .18481979189509165 -564 641 -.05477949874171643 -566 641 -.4166414249774669 -567 641 -.9389229856867954 -575 641 -1.2122658026093354 -597 641 -.40893523247376123 -599 641 -.10215184424984394 -601 641 .5338733593205771 -602 641 .6297335333265727 -604 641 .1574106373488813 -612 641 .21316059125130965 -613 641 -.9761276281767945 -623 641 .1873948088457492 -625 641 1.1012196321104337 -655 641 .19636336346769306 -670 641 -.4985284865711994 -671 641 -.419146216075077 -675 641 .7034638146936633 -703 641 .5573974752542614 -704 641 .3467865040897306 -705 641 -.23506094813101058 -723 641 -1.3745044582937116 -748 641 .10291772080768406 -754 641 .2641570617678744 -762 641 -.09269601780013072 -764 641 -.47542369302079884 -792 641 .009185634061270445 -796 641 .15721387515373964 -799 641 -.7418247969659295 -830 641 -.18686025834631578 -849 641 .5535958917682515 -861 641 .051167299237044564 -915 641 -.7278955217420061 -925 641 -.058360009742011276 -945 641 .1911543185537855 -961 641 .26671391512675063 -964 641 -.24197468100628208 -973 641 .2527666892162562 -2 642 2.93736459707879 -20 642 .2789973718139823 -23 642 -1.3290157584133266 -26 642 -.02734589853419639 -35 642 -.5180077473289941 -44 642 -1.9504718809529613 -57 642 .8315339951770953 -63 642 -.493535942273793 -78 642 .1889925564282264 -88 642 .5440461896874937 -109 642 -.8762900255972774 -124 642 .3244565183361029 -128 642 1.367360358845359 -144 642 .43839558917950744 -169 642 .33182242090285474 -180 642 .06597428007218198 -192 642 .0930685741114625 -211 642 -1.091875778939854 -216 642 .5137530676543608 -240 642 -.3006910890309558 -248 642 -1.08125298992702 -250 642 1.2025734367406204 -310 642 .3873974765148579 -311 642 .23436834452604005 -322 642 3.0305311009356837 -324 642 -.0198378917896794 -325 642 .6387076483591198 -331 642 .22596214175447665 -332 642 -.21507753720066924 -339 642 -.16014700907215154 -341 642 .168294865277115 -356 642 -.19788715503916637 -357 642 .17011057911109406 -377 642 -.17763540892354482 -393 642 -.9292421727448934 -402 642 1.41619521226455 -419 642 -1.099761313301559 -442 642 -1.273698934390019 -451 642 .4256877263841985 -457 642 -.24720409042497943 -483 642 -1.359079486209322 -507 642 1.2016238542762125 -510 642 -1.3797705756745635 -518 642 .15305183286872054 -534 642 -.7501588791526785 -536 642 -1.885968427491884 -544 642 1.7250805101002102 -545 642 .6111435208289707 -552 642 -.5161147136125329 -554 642 .6500176212315752 -562 642 .23809954669910116 -563 642 -.2346046938879286 -566 642 .9438509934548672 -579 642 -.35515243842452426 -584 642 1.5978299487447942 -587 642 .08479575042067239 -598 642 -.11591695309224362 -613 642 1.0724203678663602 -636 642 .2476435077492576 -645 642 -.13568792799739515 -646 642 -1.2278006221371593 -650 642 .6144936043225798 -656 642 2.7650242754009153 -687 642 -.036329627384562024 -690 642 -.44305868043039304 -730 642 .9427109573296465 -774 642 -.3241082979105426 -784 642 -.6448959588149301 -786 642 .5743197984100474 -788 642 .5579015914236891 -801 642 1.2807037007432331 -816 642 -1.1295115650838459 -817 642 2.120111406942899 -819 642 1.4913129672722487 -824 642 -.14593746153794263 -830 642 2.270142522613206 -835 642 .585003473215667 -848 642 .7140193088847551 -851 642 .672652244192471 -870 642 -1.7283992918745443 -885 642 .5610056511043274 -906 642 -.25851797907917706 -907 642 -.5309002649131728 -909 642 -.5310401138509981 -912 642 -3.2432099955729585 -913 642 .11707566957015667 -938 642 -1.7101089987659022 -952 642 .6018980317587351 -958 642 -.30775482649419805 -968 642 -.8990202896266059 -971 642 .9118981608123747 -972 642 -1.393944021196353 -991 642 .5528579852501208 -4 643 .1149050638458941 -10 643 .4018656339244928 -18 643 -.8912759917273472 -19 643 -1.029575662671302 -33 643 .21198006364481342 -38 643 -.39104987481944314 -79 643 1.6332091743439598 -85 643 -.26431235764840055 -89 643 -.10882000935414149 -90 643 -.31533355196021223 -94 643 .7995570908471976 -99 643 .3095663241179409 -109 643 .12755113367106696 -132 643 .4862611835042655 -140 643 -.16274731019514682 -144 643 .6565935080879165 -151 643 .2516044771734408 -159 643 .15159055327336923 -163 643 .11275680608877342 -181 643 -.011245005646753486 -187 643 -2.3642510506234546 -189 643 -.9154987306460483 -192 643 -.18504211730340187 -206 643 -.5579009128724021 -207 643 .6235986680632306 -219 643 .40395104590711983 -220 643 -.3927847194261117 -221 643 -.5343299339197067 -233 643 .04111935761784839 -249 643 .19898805724079105 -258 643 -.35499721799029965 -264 643 -.13737765362759963 -265 643 -1.7377117076389688 -287 643 .39974545603722655 -295 643 .5757399907152699 -299 643 .14777743911543328 -303 643 -.7305422054780314 -320 643 .8403748915140581 -322 643 -.2544174473164355 -347 643 -.862844195374296 -355 643 .6207756850778596 -363 643 -.4113969530991669 -376 643 -.47940676226404544 -393 643 -1.134934028982144 -394 643 .10346244865435056 -417 643 -.6744314874053481 -424 643 .5387982997938899 -427 643 .16971695412458854 -428 643 -.2421826634677845 -431 643 -.1527464266234968 -436 643 .13777612750632046 -444 643 .40397923123710067 -470 643 -.0024700421922143508 -474 643 -.47516395103984527 -485 643 .8177749841918175 -493 643 1.7191843889628189 -498 643 -.32255656572106983 -508 643 -.2717706891522833 -512 643 .45007538112097994 -539 643 .07728255822728008 -545 643 .6206283493726007 -553 643 .9088242931224741 -607 643 -1.0204820618459174 -614 643 -.7038263564271646 -625 643 -1.607614540002683 -626 643 -.026528283699399052 -630 643 -.370166740879662 -634 643 -.3835486594366816 -638 643 -.8600728855779266 -648 643 .7620806305823685 -651 643 -.6456299284609531 -656 643 -.5620867121158765 -731 643 -.054933290965019095 -738 643 .6342477844897867 -751 643 .9031780550092688 -773 643 -.93596529833628 -781 643 -.27944809586602215 -786 643 .30224135700831267 -810 643 -.22509068655748202 -816 643 -.8529101269918763 -817 643 .677290504979996 -829 643 -.10466514729009405 -839 643 .5555575759205567 -841 643 .18623798143270787 -855 643 .7037696631872696 -874 643 -.118461024488275 -888 643 1.0193050253816442 -893 643 -1.106823983548245 -894 643 .6050058358514822 -900 643 .2775318777043482 -902 643 -1.1408483911728087 -903 643 -1.2626096767534611 -910 643 -.6031310545056576 -931 643 .4649058254329693 -937 643 .7054119122703214 -945 643 .5150503766811456 -957 643 -1.1930102721801676 -974 643 -.9780145748910827 -994 643 -.4042638172842732 -995 643 .34731196444608414 -5 644 -.9717330725650216 -9 644 -1.1129072355158176 -23 644 -1.82187927919101 -33 644 .497805273820121 -52 644 1.9584495866102147 -67 644 -.8917920471102039 -97 644 1.8453108663769815 -111 644 .377457299848723 -127 644 -.9469922452265234 -136 644 1.953082372155131 -138 644 1.2994581337608364 -151 644 .6061547325272636 -182 644 .19872445548134715 -217 644 -.7910543364888676 -227 644 -1.030743180138937 -235 644 -.15937131225493117 -236 644 -.4196200805627782 -238 644 .9137479810069642 -249 644 1.9348202669904828 -252 644 .21029823033785733 -260 644 .43146213151880375 -288 644 .0872823823389551 -299 644 -.35072374297609177 -329 644 .6573775150506538 -330 644 .9868059682246283 -334 644 -1.7324123053911629 -338 644 -1.252414707033825 -347 644 .7626434974077146 -354 644 -.9239287046532073 -366 644 -1.6468647584209832 -372 644 -.9788125667466235 -388 644 -1.2915293540581323 -398 644 -.5916868658341313 -421 644 -.41171345500446477 -441 644 .9488930270317502 -467 644 -1.45535113625786 -483 644 -1.2568795084540147 -495 644 -.1483510444595798 -496 644 .28934677432305833 -498 644 -.42154986876921935 -499 644 .6787350927475765 -512 644 1.3572142423663909 -513 644 1.673162906699956 -515 644 .49057342143833393 -516 644 1.1955741372231066 -538 644 -.3526422692611533 -542 644 1.473133731994832 -561 644 -1.2664790612066557 -571 644 -1.399791667570163 -573 644 1.1076041368608727 -582 644 -.6435727575635898 -583 644 -.053897923936723116 -608 644 -.043104793640039586 -609 644 -1.3439080001592132 -625 644 2.687590213725944 -633 644 .485708895643164 -639 644 -1.35511155656345 -643 644 -.4447415590337362 -644 644 -1.8777192543142194 -658 644 -.18514711982316073 -661 644 2.1639718517560027 -689 644 -.1776709330847156 -704 644 .9890968936286375 -711 644 .9197675793547752 -733 644 -.1389659355681313 -745 644 .38619686616454313 -755 644 -2.272797249745785 -757 644 -.720333060541869 -790 644 -.7464913810881396 -803 644 -.8460958548889065 -806 644 .6122283928817782 -808 644 -.14542813849328193 -816 644 .07085307434597696 -823 644 1.6019681936342134 -840 644 -.06157898284800094 -847 644 -1.0219409108796553 -861 644 2.4168155957084596 -870 644 -.958928834473701 -917 644 -.5089354197808738 -918 644 -.4354767700127922 -925 644 -.49380726324642715 -932 644 1.237071715961706 -934 644 .7136057879368871 -941 644 .1440134680046981 -942 644 -.10215400587769444 -968 644 -.9747930659628471 -977 644 1.4123531539887022 -981 644 -.17772240941383088 -1000 644 1.5760092737875027 -9 645 -.21824523211217084 -16 645 -.2671615347608553 -44 645 1.3550452217781728 -61 645 -1.412954887713003 -65 645 -.060476530381737746 -66 645 1.2939372800629219 -70 645 .07251771148031975 -72 645 .3720270074463286 -73 645 1.3414014428844896 -74 645 1.9854281145523276 -130 645 .8092061539269119 -146 645 1.0377619949435384 -147 645 -.5550192893691743 -161 645 2.5518309689063976 -163 645 .24387387240319244 -185 645 -1.6540008431054538 -188 645 .5566658703936855 -202 645 -4.210479577456027 -203 645 -.32794651503332406 -212 645 1.9857112797700525 -218 645 -3.135103916302417 -235 645 .504223360783162 -243 645 -1.4198561423526583 -246 645 -1.5820070678441998 -251 645 -2.5525124562809567 -258 645 -1.4843342594261706 -270 645 -2.942380956849426 -288 645 -2.929075541690304 -300 645 -1.0241409662022796 -301 645 -.4379494589232035 -315 645 -.5299801028397049 -326 645 -.5799660050667181 -332 645 -.3196240197102156 -345 645 1.4462589404578003 -346 645 -.6874013168499331 -368 645 -.13752635105001193 -370 645 .8462987382612099 -374 645 .056664894696347765 -376 645 1.3696795265248818 -378 645 .08117009266721413 -386 645 2.1163052350921157 -394 645 2.8159453815548265 -397 645 .9406928262678973 -401 645 -.289750705761209 -411 645 -1.6347969330621288 -414 645 2.12758808555902 -417 645 -1.5313137693199337 -429 645 -.5983537966221802 -465 645 .4709195530538078 -470 645 -1.0550956107694938 -476 645 1.5999597530198453 -480 645 -1.1393367420697558 -499 645 -1.1093069185810434 -541 645 2.982343630806288 -544 645 -3.267141650463556 -554 645 -2.1094035411077883 -556 645 -.9196547398049786 -566 645 .9394546918044833 -568 645 -1.725806292287736 -572 645 -1.5033249254771288 -591 645 .2566714463944091 -600 645 .39642183642362816 -615 645 -.019310876983296355 -639 645 .8421940896303255 -646 645 -1.0979531998625511 -654 645 -1.3182597540007661 -655 645 1.312682658197296 -659 645 -1.8900288124363818 -678 645 1.665034758185383 -697 645 .35399034589039524 -705 645 .33736124402127415 -712 645 1.8999040923019992 -723 645 .7252627318530066 -759 645 -.14161777361947997 -764 645 -1.8449505461292388 -774 645 .4962478098527658 -777 645 -1.155584209878561 -789 645 -2.8754156881757993 -799 645 -3.3268418469187946 -800 645 .3984981181394588 -817 645 -2.086542239103098 -835 645 -1.377518864221535 -838 645 -.3732287979873901 -860 645 2.0308033941486627 -887 645 1.2259163963446988 -904 645 1.393094660867709 -918 645 .6198469789137669 -921 645 -.8172911848865134 -937 645 .8905672215071966 -944 645 -1.1599539243248547 -966 645 1.0808125954495131 -991 645 -.6932467290369853 -18 646 -.9039043634268306 -31 646 -.3531012900487084 -46 646 -1.034816027133067 -63 646 -.2369110616392908 -66 646 .4008518199061621 -85 646 -.45009927640345504 -90 646 -.4021186618124164 -93 646 -.4632229225574997 -94 646 .0933930321861137 -108 646 -.8521162640208066 -120 646 -.44583959043111 -133 646 .058777943643153197 -137 646 .5487371916267738 -140 646 .44096947319444185 -145 646 -.4828579507504065 -152 646 -1.2439351519944628 -153 646 -.60139450634322 -155 646 -.6203611225277313 -162 646 .11864092842329466 -174 646 .02164596783958645 -193 646 .15810873367764938 -207 646 .48796701706736445 -212 646 .6294870792352195 -218 646 -.6660728097188209 -237 646 -.21123387301925814 -239 646 -1.6070675749167616 -243 646 .3458489533986772 -248 646 .18691604472482903 -252 646 .2519457574734434 -272 646 -.12274743385823104 -278 646 -.20321447859720734 -294 646 -.31345635479444306 -296 646 -.9213416159292029 -304 646 .1014385456482702 -313 646 .7673487874458118 -324 646 -.0016486389786528333 -338 646 .11778495286643975 -344 646 .37732368677191924 -358 646 -.4743544562762959 -362 646 .42308125773776895 -367 646 .14202829533492256 -377 646 .16571134190583134 -383 646 .015282548258320122 -386 646 -.9664897306697514 -398 646 -.07560668042018734 -417 646 .1873697957207936 -435 646 1.316939996115605 -439 646 .9780583889559642 -457 646 -.6834429519736803 -472 646 .44645822810119395 -478 646 1.4333672689965453 -492 646 -.5076208696833068 -495 646 1.0183138270209233 -512 646 -.019635987651049867 -519 646 .6863988054814687 -522 646 -.5694456031723527 -536 646 -.029230139020566787 -555 646 -.2178361678346456 -564 646 .33951023545563797 -572 646 .0037175411071444786 -574 646 -.14810523314932011 -575 646 .2622286123597494 -581 646 -.023534373154719485 -582 646 .12832816566967312 -603 646 .31439969425556696 -612 646 .6862501896952958 -621 646 .3067658798102659 -628 646 -.3138544691681163 -645 646 -.5711944469678911 -670 646 .23512893736415022 -676 646 .665359532829557 -679 646 -.6527499812032834 -681 646 -.9006128271990134 -684 646 .09666548315874052 -692 646 -.32493402502973223 -694 646 .9873638795859789 -700 646 -.3204612162261781 -702 646 -.046237978166808774 -704 646 .5091626897603717 -708 646 -.84636332285475 -718 646 .9755286599597809 -723 646 .5883355436067744 -737 646 .2752775071378599 -748 646 .07599230233145973 -750 646 -.06628510769887909 -757 646 -.33489225447659976 -759 646 -.10423380087252021 -770 646 -.5459026740968878 -787 646 -.1783802844533107 -792 646 -.20887282793556955 -793 646 -.8656328550215447 -812 646 -.3020026907545527 -839 646 .15877158233754862 -842 646 .7935874774162927 -845 646 -.5305310150106413 -848 646 1.46027549207943 -850 646 -.31730610542159404 -856 646 .3067502730717558 -857 646 -.37343050986866794 -862 646 .4781759307312823 -883 646 -.45210073675394713 -884 646 -.05092237408475585 -888 646 .7036756886742837 -900 646 -.4724894688291932 -902 646 -.3397601765784904 -924 646 .16775678821256645 -933 646 -.1909339224662694 -944 646 -.0350050398213452 -959 646 -.14486451033127867 -978 646 .06395638095537054 -985 646 -.1511120168882441 -995 646 1.4249561100073713 -996 646 .6779704646854747 -1000 646 .57241655257081 -2 647 .15407262133670846 -5 647 -.8574626941121753 -28 647 -.13882531826616495 -37 647 -1.233696596056229 -42 647 .5074281893529872 -49 647 1.4578209780550953 -64 647 .6872051979427992 -80 647 -1.6347703350378857 -81 647 .7920678495836379 -82 647 -1.614598715549973 -90 647 -.45374718686619087 -129 647 3.649245824570621 -132 647 -.8420227142967792 -133 647 -.6670037387986956 -163 647 -.8661044551943108 -167 647 2.112760285172137 -169 647 -2.7648312095218666 -198 647 -2.004819699588051 -218 647 -1.027256038846859 -222 647 1.3505741623603231 -226 647 -2.2154438367209086 -231 647 .86864742009078 -241 647 -1.9462454046604654 -266 647 -.25475757263318155 -275 647 .01477293768820672 -280 647 -.3856296056373498 -301 647 -2.6960625740558433 -309 647 .05686197202844519 -326 647 .45981095085671814 -341 647 .6011044660106662 -389 647 -.7307761076302399 -416 647 1.613528433349525 -440 647 -1.1625772684244546 -448 647 -.7674418629350425 -469 647 -.2677776114542272 -472 647 .6841778054548087 -477 647 .7722396395871358 -486 647 1.7340779448609849 -503 647 .8240003193917449 -510 647 -2.434203933473985 -511 647 -2.614670088845426 -514 647 -.0026948234970176066 -515 647 -.9202662253300152 -527 647 -2.5882265679587233 -528 647 -.9732959930774241 -536 647 1.4648102717896068 -538 647 -1.1435259514343523 -573 647 -.06464284706331208 -602 647 -1.7142707695936248 -630 647 -.6733597454014917 -633 647 .37947605635319914 -636 647 .9937994125028364 -638 647 -1.7222654815329428 -643 647 .8477600128232857 -647 647 .027382371278906914 -654 647 1.9291606830367685 -685 647 -2.643445856872453 -697 647 1.5860987760328058 -704 647 -.6109190787324225 -707 647 1.4643437212221067 -709 647 1.0036858691750155 -712 647 1.418951588320952 -723 647 .5699902636804224 -728 647 1.6302393317135773 -733 647 -2.542557617371178 -738 647 1.0278358570304806 -742 647 -.9336549782492334 -744 647 .3936698467649358 -746 647 .2786581121921471 -750 647 1.2362330332620834 -770 647 1.3303607811337461 -787 647 1.6877314006331512 -796 647 -.5499056809694167 -805 647 2.2905750873104633 -853 647 -.6794127030720012 -873 647 -.09076233605534631 -890 647 .218375499303409 -905 647 .5942786813472736 -910 647 -2.8345001202097504 -912 647 -.937374543195248 -916 647 -.1738823098001412 -917 647 -.8783073116884965 -928 647 2.666268700219117 -929 647 -.2975937045745435 -949 647 .16583438964701847 -960 647 -.6906257602770889 -988 647 -.09837957232447325 -989 647 -.5899018992945444 -6 648 .3484346730828162 -13 648 -.4452157080958156 -22 648 -.49167325763628145 -23 648 .8650884203955863 -25 648 1.3950970654828185 -28 648 1.6680665254788494 -36 648 -.6920424379003711 -40 648 .2903667216739029 -41 648 -1.3409066519973805 -44 648 1.2167844708267217 -48 648 .4946862752083144 -60 648 .059507649532773585 -64 648 1.0710636157030937 -74 648 1.502421116898377 -86 648 .07932412871183424 -111 648 -.6190516823027571 -113 648 .5055380862386529 -131 648 .1488044927329767 -143 648 1.0795832768877542 -152 648 1.779095167784468 -154 648 .20718039824986373 -174 648 .16094155669345642 -185 648 -1.091718450428052 -193 648 -.22021153545547295 -202 648 -1.9399323772221628 -220 648 .2825072992088785 -226 648 -2.1272649553540637 -246 648 -.5964031772233223 -250 648 -.8144040877435339 -283 648 1.1451161445084752 -289 648 -.9940787299135172 -308 648 -.28462872719256216 -313 648 -.23825760381925337 -322 648 -1.4584553951110295 -329 648 -1.3257707771630114 -367 648 .03966143355489801 -391 648 .9031585258112194 -396 648 .36077468559469866 -414 648 1.4670376732472477 -415 648 .2533513672030744 -422 648 .03182493581272806 -429 648 -1.3331522437050467 -449 648 .5644876081727294 -459 648 1.0660851139378167 -462 648 -1.671394831574464 -469 648 .6701532297087367 -470 648 -.36584993437138347 -471 648 .24088570215604183 -478 648 -1.4777706604611023 -488 648 .1864757153993622 -500 648 .5321377715527134 -504 648 -.4573553702839507 -507 648 .03987837368271106 -530 648 .5648735081153295 -535 648 -.4933329275805781 -536 648 1.7546956311120159 -539 648 .39670940751752953 -547 648 -.5184795332226279 -552 648 .2326114331904892 -564 648 .7542396116889184 -576 648 -.0890809096530342 -592 648 .22340858441814626 -607 648 -.8273126893898648 -612 648 .9723015426942496 -614 648 1.1830350200466169 -620 648 1.162975923636739 -635 648 .6446973290866654 -651 648 -.3850658485722774 -664 648 -.5445031626595406 -704 648 -1.6472863317124429 -716 648 -.18405839318769024 -717 648 1.431640456171788 -723 648 .5893128497076685 -738 648 -.5590958737539323 -739 648 .334832518244512 -742 648 .85844919083234 -752 648 .6492969777873938 -753 648 -.058165990926681205 -757 648 .6991044359502273 -778 648 -.23285834907821737 -783 648 -1.1616035278432921 -784 648 -.15156007862586365 -795 648 -.36530003296549407 -805 648 .46032186057032376 -829 648 .023262455286043905 -833 648 -.6707920487310014 -841 648 .15827226893023472 -866 648 -.5653401756916596 -874 648 1.1564447724236293 -875 648 -1.0956581539132204 -905 648 1.6277579192623435 -913 648 -.3380844076381192 -917 648 .9478865479109855 -934 648 1.0773286399460167 -935 648 -.7905242526271488 -952 648 -1.160258790157675 -957 648 1.105604770027027 -969 648 1.129692207411286 -972 648 1.8336729517124009 -992 648 .026109674228909592 -1 649 .7271246193719378 -29 649 .49886369202874375 -33 649 -1.0739767968805287 -37 649 -.12582134446927093 -48 649 -1.793164136925481 -51 649 -.14079554423421695 -60 649 .2421434378728676 -120 649 -2.7922141595344128 -127 649 1.0881730633912976 -131 649 -.6974213991607009 -171 649 .3413927562364664 -193 649 -1.2510014897337947 -200 649 -1.3092208483397099 -203 649 .5252774760380108 -212 649 1.4172470393509267 -220 649 -.5775005571541765 -232 649 -1.6502797789271482 -238 649 .3173217892089121 -241 649 .7193146213132291 -242 649 1.4821358810337866 -250 649 -.4316359026582596 -251 649 1.2579398198560763 -252 649 -.8307214189839237 -261 649 -.5442701212805937 -272 649 -.8244203881823747 -279 649 -.848901863862149 -281 649 -1.5152533717892214 -321 649 .7027895204234217 -329 649 .24607613182401514 -338 649 1.7930899797826565 -362 649 -.21084769011438825 -363 649 1.9407258339883153 -365 649 .500957010583945 -367 649 -.05482634264026588 -373 649 1.3195633792705468 -374 649 -.7942527340165926 -409 649 2.6204897617970935 -420 649 2.312167858917608 -433 649 -1.2614184475873602 -439 649 .9002938539648271 -458 649 2.2661984211942308 -459 649 .6086775975709311 -462 649 1.211645186297361 -463 649 .38667668274530087 -466 649 -.4398537192015504 -478 649 -.22273739564078687 -484 649 -2.850235755854961 -486 649 1.1938140241193718 -487 649 .49775233158018223 -496 649 -.08495323168095396 -502 649 -.5034877612541162 -600 649 -.2988858581407487 -608 649 .0437388593752225 -611 649 -2.200895407489136 -632 649 -.4196869325618989 -633 649 -.37093218250870297 -645 649 .24465686264694145 -669 649 -.3874027840054565 -675 649 -2.5071360313288573 -691 649 .2473364986946031 -702 649 -.2922685902380618 -712 649 -.3394155962236885 -728 649 -1.4122371548437556 -742 649 2.2250731678769493 -743 649 .6031614024715203 -747 649 1.2430014697682632 -754 649 .46263609556339413 -758 649 -.5245461132128986 -768 649 .2938744383980302 -782 649 -.7536135896164806 -790 649 2.263590910757617 -791 649 -1.3711618687804932 -802 649 .4881217866468715 -806 649 -1.0827017115952517 -807 649 .4161342792619709 -812 649 .4672553578862424 -815 649 -1.6445543016831827 -824 649 .8154504414029741 -827 649 .969446395652351 -830 649 -1.4017949660456241 -843 649 .4441006377449681 -850 649 .9639307654457834 -853 649 -1.17594707655565 -863 649 -.6144557217805449 -872 649 -.9796558129746457 -874 649 -.4507777937619832 -882 649 -.057367601491508706 -884 649 .267568669335798 -892 649 .05396919649848552 -896 649 -.4530765716055751 -898 649 -.346821026707385 -909 649 1.1449115765589888 -949 649 1.347053755362729 -956 649 -.40035631178947084 -958 649 -.8897499511571154 -986 649 .13063876969146576 -987 649 -.5114317054441596 -991 649 -.8360816191262713 -2 650 .8568607165282799 -9 650 -2.9487815929233054 -20 650 -1.9890035487942346 -38 650 -.9105389979328365 -46 650 -.028075445437517086 -47 650 -.7996919785356337 -54 650 .7309393289929572 -57 650 -1.2900843231262935 -82 650 -.7726781448160034 -107 650 -1.287434607094561 -124 650 -.45117603105545045 -128 650 1.1117277533865382 -137 650 1.4329583006241893 -140 650 .1697212561325917 -150 650 -.18269036879446832 -160 650 1.599632887773415 -181 650 -.24925832805184195 -188 650 1.091756562237332 -192 650 -.37091543246067454 -196 650 .05407363589852712 -198 650 1.1140072600425943 -210 650 1.6275624000089595 -232 650 -1.0640521372691896 -272 650 -.19905813971621605 -277 650 -.6585721405940892 -279 650 -1.2972232212038766 -283 650 .2072240661015854 -286 650 .8076136269789598 -291 650 1.0116618197903624 -325 650 -1.3203273286453454 -336 650 -2.549575643172166 -342 650 -1.0499966825196354 -353 650 -.9018708727814819 -357 650 .9898245385097527 -358 650 1.0589208154306151 -396 650 -1.5777749748188397 -409 650 .26549828397468894 -427 650 .21368051893775994 -428 650 -.7725071430523259 -434 650 .2510786674718916 -442 650 -.1641141685809367 -449 650 1.2180437186609294 -457 650 .06643966698750445 -468 650 .8115734269914414 -469 650 1.2706366906009965 -477 650 -1.0594253925777466 -491 650 -.15478069709541492 -492 650 .7160528452605806 -520 650 -.4942035117928969 -539 650 .14448075572637847 -544 650 -.3262092940619863 -554 650 -1.4857852881323466 -563 650 .1729405609546168 -593 650 -.2830708894256314 -606 650 -.5436477937316808 -608 650 -.9588337217316169 -611 650 -.07577673843886407 -615 650 1.9717715893279006 -618 650 1.6759378313255486 -622 650 .544741580459515 -644 650 2.327797869721489 -651 650 1.3856609602320578 -657 650 -.298078946973887 -663 650 -1.2985811505628257 -678 650 .2155726654744759 -681 650 -2.8262308741207045 -688 650 2.0866534469204456 -689 650 -1.3937483372915787 -709 650 .1977034747560577 -711 650 -1.5779871212477494 -720 650 1.3424441878352267 -724 650 -.1289409772860728 -740 650 -1.7708996693993606 -763 650 -.7718942001599086 -765 650 -1.2439007774643598 -772 650 -1.0852126159827609 -807 650 1.4527547919755468 -812 650 .5230229184416879 -818 650 1.778285620010309 -828 650 -2.3293924166413036 -837 650 -.5574523790487933 -850 650 .6140443612219835 -851 650 -.023302934768653513 -862 650 .8066915855151063 -868 650 -.9652651420062321 -872 650 -.29429516912927767 -881 650 -1.3695392817316017 -885 650 1.0952102958484797 -892 650 -1.6723831554907025 -897 650 -.3049293469146444 -913 650 -.2949933150107768 -918 650 -.38981245234330897 -921 650 .21544432828456192 -943 650 1.0222292893690303 -946 650 -.2154693451447227 -952 650 -2.4101310775236917 -953 650 1.8590541427929892 -955 650 .4016844887376948 -958 650 .6369776148552787 -959 650 .08991500006009019 -962 650 -.438792041827552 -966 650 -.5125536878577132 -968 650 1.83089141125551 -980 650 -.3034418023095204 -984 650 -.6211077051705647 -40 651 .9384772428828254 -43 651 -.30852535225769673 -44 651 -.9179273560654715 -67 651 1.2817994478001546 -76 651 -.1615071896478053 -91 651 .46314458487046867 -125 651 -.3153041151143081 -126 651 .1263136093347268 -142 651 .46193595906088536 -145 651 -.24424814557151037 -150 651 .5481102164510423 -157 651 -.4276317818167894 -185 651 -.21334105540479706 -194 651 -.35509357974727906 -234 651 -.4854662539602601 -235 651 -.12121497397708325 -246 651 .24298726804605741 -247 651 -.2702599406606198 -265 651 .6627380123257345 -273 651 -.08746070438988575 -286 651 .5654441179253077 -305 651 .29422278023979215 -333 651 -.6211442566242074 -341 651 .6594269139901413 -350 651 .05172360861741947 -358 651 .9097076356244536 -361 651 -1.8903364408036964 -368 651 -.7168872466990186 -370 651 .24562249687610369 -385 651 -.0490137082978814 -392 651 -.7577166405003428 -398 651 -.1747933643382747 -409 651 -.6213747668188723 -410 651 -.29917349115409775 -411 651 -.34893000796838264 -418 651 -.6481879172625069 -425 651 -.2336999282667384 -428 651 .33330530631234884 -454 651 -1.0694583240756677 -495 651 -1.598425122775818 -498 651 .692244189587667 -499 651 1.2398778491023281 -526 651 .5823285131121881 -529 651 .15019456005892928 -531 651 .18900911478768692 -537 651 .09867906149633356 -542 651 .14025684360308777 -545 651 .22280313917613892 -547 651 .047688576330913765 -560 651 -.25420997702281234 -569 651 .5486646940980607 -576 651 -.9011451438899742 -577 651 -.8162838570951433 -583 651 -.26622177251168494 -591 651 .31457240866027913 -625 651 .2344430177681998 -632 651 .18336490401964042 -633 651 -.21257450247769918 -635 651 1.2919612103298546 -638 651 -1.2047431468932774 -642 651 1.2243405021551812 -650 651 .26120233099342194 -672 651 .6455953121147456 -684 651 1.038244107767544 -696 651 -1.315984693942016 -697 651 .47412637204848584 -700 651 .6282805569274363 -710 651 -.4986470044093821 -714 651 .24349678525937485 -718 651 -.33577105007989616 -730 651 -.7583321387739174 -741 651 .24908364639447228 -759 651 -.11082992466068502 -770 651 .48708598139005854 -783 651 -.11982138806162113 -786 651 -.4223078144101292 -787 651 .7071549839859599 -834 651 .2449617589974442 -835 651 -.6703839140079982 -838 651 -.38606239548129306 -872 651 -.2757346017581347 -876 651 -.959674867387384 -880 651 -.4133158086111659 -888 651 -.6965333195587843 -908 651 1.1302965327217047 -916 651 .3324821069503884 -921 651 .038371574813982824 -931 651 -.29352766437269295 -935 651 .6332050716785418 -940 651 .2805222221977006 -941 651 -.0776807658557923 -944 651 -.8075925839669865 -962 651 1.1482286478709154 -972 651 1.2450689158875103 -978 651 .26993309227332063 -2 652 .8491100894709008 -3 652 -1.215214544758274 -7 652 -2.148281059587583 -15 652 -.6354103597983088 -36 652 -.6669663477824036 -68 652 .19823270474696128 -74 652 -.046877525958483865 -78 652 -.28242191947483336 -79 652 2.11138324711351 -81 652 -.9757166459205385 -82 652 -.05944209684145202 -83 652 -1.4270958081874734 -91 652 1.267289961858518 -119 652 -.15304295360625605 -131 652 .55169617209261 -149 652 -1.0410928483545598 -161 652 1.0990105862414992 -173 652 -.16488385204985018 -186 652 -.20108723980094118 -192 652 -1.6800650416920766 -194 652 .5539104305399292 -197 652 .07995583648361934 -200 652 .014565304565400505 -208 652 -.3231054743342128 -214 652 -1.7110997739330245 -218 652 .6416448552534016 -228 652 -.10956096048023042 -234 652 -.7663382903417207 -243 652 1.637010358666719 -258 652 .1918552805810644 -283 652 1.261888666279356 -311 652 1.689730750481184 -315 652 .4905586942238681 -341 652 .8629352360835818 -342 652 -.6001336266015224 -344 652 1.2854281739726803 -361 652 -.26579931048600064 -370 652 .94662928781824 -371 652 .7075001538414306 -384 652 .9089918761987059 -426 652 -.7616691551994061 -432 652 -.828421290710339 -435 652 .6884165082974293 -447 652 -1.4113312578245425 -461 652 2.7835834359043643 -467 652 -.06939221158448376 -470 652 .9541861358185872 -508 652 -.2283836773328075 -517 652 2.147998435917241 -545 652 -.2071667950063385 -549 652 -.09036405610096974 -566 652 -.3693151784030752 -583 652 -2.298390435850618 -596 652 .9571058156119823 -613 652 -1.0579729655519334 -615 652 1.589914259435548 -629 652 -1.2303666251922727 -644 652 2.3398720083834745 -656 652 -.4259748524791089 -668 652 1.6660397511387286 -673 652 .5046841822162812 -697 652 1.9505979839307206 -713 652 .5550791631019507 -728 652 2.5719822936467955 -733 652 1.366749085632382 -743 652 .10193824630456214 -757 652 .9470586095509019 -762 652 -.9101818544570419 -775 652 -.06862483466814903 -795 652 2.89979724333025 -802 652 -.1024246253852391 -803 652 -2.0199141672014793 -817 652 1.1233403215842024 -833 652 -1.3448543955407888 -837 652 .9992939108924017 -841 652 -.12871660083767134 -842 652 -2.016680670418074 -858 652 2.30639025724343 -864 652 -3.012328242030037 -872 652 -.03445821074401481 -877 652 2.7344078207590297 -879 652 -1.5160759758914595 -883 652 .7504094979667686 -894 652 2.4831634934199887 -899 652 .07257647351710092 -909 652 .6425927764091356 -924 652 2.273359542088169 -932 652 -2.956212574487131 -935 652 3.2908786533313967 -938 652 -.7123588397860358 -940 652 1.0158351892847677 -946 652 .8157992102437225 -956 652 .7427278175865526 -964 652 3.033242090608089 -979 652 -.1321530933869626 -987 652 1.992150063390922 -1000 652 .5837848913648535 -2 653 -1.8594945962337663 -3 653 .5983104269366255 -5 653 .7275411849607112 -14 653 .7780212620302988 -18 653 1.4631672127400632 -26 653 -.05033890950670625 -52 653 -1.7618513489639385 -55 653 .77654726477014 -62 653 -1.1688197380927714 -70 653 .8505695283963871 -71 653 -1.399782243142827 -78 653 1.0948623096761427 -81 653 1.015524854520888 -87 653 .6860543426496134 -111 653 .17405823514040691 -115 653 1.943253215618478 -118 653 -.6390501945090397 -122 653 .08164966688963962 -124 653 .36049026103966464 -128 653 .5611264148999191 -129 653 -.3140905936785958 -140 653 .7808294663241763 -142 653 .7751691218797861 -145 653 -1.1353189131372825 -150 653 -.3524529189640824 -157 653 .239342627966376 -167 653 -2.347057574995018 -177 653 .4330303690358001 -178 653 .49908535190476 -180 653 1.0211381149537475 -184 653 .03672434084450176 -192 653 -.36590121151306726 -200 653 -.9022909821903294 -209 653 -1.339091840278502 -244 653 -2.0694031632433147 -251 653 -.7016570944865229 -267 653 .8816715628215269 -286 653 .42620120950768825 -291 653 -1.8668887380791288 -293 653 .8683124197663328 -307 653 .6636650067042459 -310 653 .11582823033792743 -314 653 .7289309419514476 -322 653 -1.5188932941218234 -329 653 -.3277824504499324 -334 653 1.2838076590698917 -339 653 2.0963111886513337 -343 653 .6604277282373493 -347 653 1.308167322854805 -353 653 -.06390663763117496 -393 653 .4720402896819214 -396 653 1.6161401130603308 -413 653 2.8246694755685406 -478 653 1.8702441385322224 -489 653 -.8479399696259193 -509 653 -.4737324346155919 -511 653 1.6235272793704356 -515 653 -.20155228863327973 -516 653 -1.0920573849384736 -528 653 -.06765279699530469 -564 653 1.0600123367351675 -566 653 -.7831093500354198 -582 653 .5250833201384343 -586 653 1.4680221551515988 -615 653 -1.6176464467995944 -618 653 -.49965250127744326 -641 653 .3955633118022932 -643 653 -1.0854613289105088 -647 653 -.3581209760266484 -648 653 -1.6571556183872855 -649 653 -.19664344145570084 -661 653 -.2487759504344705 -685 653 1.8588687539792204 -697 653 -.4812827956282834 -699 653 -.2959256680173252 -707 653 -.213461866778731 -715 653 -.05219482521767212 -732 653 -.6247293848154469 -734 653 -1.3107111814840298 -746 653 -.23239002943881493 -749 653 .8485605371109556 -755 653 .7421465267888478 -770 653 -.4211991882392482 -779 653 -1.279985174457107 -781 653 -.48723229231005205 -802 653 .4211460580643893 -804 653 .5580737711198066 -812 653 -.36883859140843606 -827 653 3.0776955388096563 -835 653 -.7473533059666096 -837 653 -1.7748830760293572 -856 653 -.22044290206160083 -862 653 .255769141402869 -864 653 -.6543462982290917 -866 653 .12917434477154638 -878 653 -.5750907218657867 -884 653 -.15301498106740688 -885 653 -1.1316105142515724 -892 653 .7327684740428995 -916 653 .1788641056295336 -920 653 .0785971182301249 -935 653 -.3398056905394562 -937 653 -.4154145197621165 -953 653 .7244722383911197 -975 653 -.024126155779996217 -980 653 -1.5458088075470047 -983 653 2.4163391849386144 -2 654 -1.185190806275285 -11 654 -1.956408152493536 -17 654 .13140887925986983 -19 654 .5185220872671922 -32 654 -1.1691079343293485 -35 654 .6116315093272067 -39 654 1.7776595946143061 -43 654 2.648954845204741 -47 654 .06603463810390131 -48 654 1.9543119621489458 -53 654 1.3993664817430067 -67 654 -.8715507956634447 -76 654 .9318150086101772 -84 654 -2.109499956604896 -89 654 .327353399421425 -106 654 .030894928408809398 -119 654 -1.1108723748791236 -134 654 -.34053529357148354 -148 654 -.3023167827647754 -177 654 .31119525131096354 -179 654 .15441487636860604 -181 654 1.2982238689311634 -185 654 -1.087615071363242 -190 654 .41791582561298757 -194 654 1.233230489764678 -197 654 .043918586307661434 -200 654 .5315284174854104 -206 654 .3083407799782857 -285 654 -.7096350444478825 -287 654 -.6655337587431377 -304 654 .6074856612942593 -321 654 -.9284257299486769 -349 654 .7717946722877309 -359 654 .21666620473401133 -360 654 -.917535603412292 -363 654 -.39822570621770675 -367 654 -.13519119233059923 -372 654 2.5450445942519058 -420 654 -.1981911005732407 -422 654 .8451350884545096 -439 654 .903847114573981 -442 654 -1.14277087370752 -449 654 -.32204681150097325 -467 654 .6487072412547817 -475 654 -1.5230815261882809 -489 654 -1.6297894221720293 -493 654 .25856095342888963 -500 654 1.9775526832102215 -510 654 1.3952273026884354 -531 654 .2677335377226584 -534 654 .8536588138364506 -539 654 .9154681562646989 -540 654 -.5665320121333783 -556 654 1.4711632486696584 -558 654 .10883844264155947 -570 654 -1.2524898542892915 -578 654 -.08818161995294313 -593 654 -.47085080842385696 -605 654 1.4212246999111837 -620 654 .9811680728757346 -622 654 -.13034072110332712 -633 654 -.6853645547254448 -662 654 -.9889712621218671 -696 654 .6756848560903964 -697 654 -1.9517334558759198 -720 654 -.12968185999599513 -722 654 .08329222556756263 -728 654 -.27974850231277193 -731 654 .07333380913306858 -736 654 -.7048122550717127 -740 654 2.72165099642014 -746 654 .7133303868431458 -753 654 -.46146817075850244 -769 654 -.7773856878906413 -786 654 -1.1675641839656237 -799 654 -.3478821616239782 -820 654 -.3206239839283307 -822 654 .19729534348378402 -830 654 -.33531960382360537 -870 654 -1.653079777551541 -872 654 .2929689470636311 -875 654 -1.5108532599804863 -886 654 -.3131890227674194 -903 654 .942748277748812 -905 654 1.5112866585877418 -921 654 1.2679731689512563 -925 654 -.28447968899371057 -930 654 1.007533388170795 -945 654 .23064048332696974 -964 654 -.34506866482585136 -968 654 .5626282887160021 -969 654 .7097027892688628 -990 654 .4088027306061709 -995 654 -1.433542351579246 -31 655 -1.1815720267126095 -55 655 -1.2528113018416747 -96 655 3.2184866800130423 -118 655 .6332662831259882 -122 655 -2.285599677346098 -125 655 -.4878522195551389 -198 655 -.24137507988432377 -214 655 -.14376383068246554 -218 655 -.2303155294655875 -228 655 -.9765912127804734 -238 655 .16540890289661422 -244 655 1.3392525423557617 -245 655 1.8520371510235 -250 655 -.877822619934009 -251 655 -2.907870680663808 -261 655 -1.6327135940404742 -303 655 .697116921597408 -339 655 -.7846712880945592 -348 655 2.488452050672746 -368 655 -1.919029074015647 -371 655 .02693198820679707 -378 655 2.3923833020959413 -415 655 -.19173723016082472 -431 655 .9672876701647802 -435 655 -.06819083000315199 -436 655 2.6345860857340484 -447 655 1.9910662970473858 -464 655 -3.909969056868073 -479 655 .5776473590434258 -487 655 -1.6263067792485477 -489 655 -.9052160873279986 -490 655 1.7126364656006667 -493 655 -3.286800099285279 -504 655 4.065266655707755 -505 655 3.473236662849802 -506 655 .6879536201308029 -513 655 .006380857530571132 -518 655 1.7552844213356333 -542 655 .6419309447987119 -552 655 2.0954979732910766 -563 655 .6926864474711415 -575 655 -2.354288299319896 -576 655 .29514360803526873 -593 655 .7982506983471869 -604 655 -.5308061730550675 -611 655 -.6926299889781171 -619 655 .3267941763294407 -635 655 3.400900948281754 -637 655 -4.515303086531319 -638 655 -.32561407232335277 -660 655 -.9949687658737633 -675 655 -.5546198442331477 -687 655 1.0195330501031918 -696 655 -1.1832052436697822 -700 655 -.3715032894884014 -715 655 2.1830315529247923 -717 655 .627099939051882 -726 655 -.015801490189489162 -738 655 -1.1669113219633331 -740 655 1.451358757307091 -761 655 -.621071366619247 -762 655 .8403431996915334 -772 655 -2.927283052808764 -780 655 .0954129509289009 -782 655 1.9990031802993466 -785 655 -.9885417895732274 -787 655 .7698556997593451 -788 655 -2.9443955205517147 -791 655 .46473240398781507 -792 655 1.9631452520390338 -796 655 -.06943034112009469 -801 655 .2781754629907652 -816 655 -.21861482908387453 -829 655 -.4684317185930429 -841 655 -.1435230735484026 -850 655 -.5247505307691991 -851 655 -1.4755323121835726 -875 655 -.02192986813212841 -878 655 .17459105818500104 -883 655 .012150416817457148 -891 655 3.219399490495577 -909 655 .4165483828024065 -930 655 .26067378034310684 -938 655 -1.004151516958101 -950 655 .9934054081824785 -978 655 -1.384194683689355 -990 655 -.5418365787102736 -994 655 1.096513351671486 -1 656 .7597717966052165 -12 656 -.46709348633782666 -13 656 .4054440255989132 -24 656 2.5537351109078315 -49 656 .4153672196492081 -62 656 -.17627233586830188 -75 656 .6502175899015967 -111 656 -.031650730490350054 -112 656 .6421250223926607 -113 656 -1.93025297251108 -114 656 1.7063655190462539 -121 656 -.07929955962967453 -122 656 .8213221030725852 -126 656 -.16023357444568895 -131 656 -.1734758931253251 -138 656 .7235930652826281 -141 656 .25261724680162356 -142 656 -1.4459301229760966 -151 656 1.9027917096039735 -153 656 -.02220396467812291 -157 656 2.434905376374142 -164 656 -1.0681038974376076 -173 656 .9508820955690005 -179 656 .23859135801527842 -184 656 -.47308649043091644 -185 656 .7361138986399681 -201 656 .0818305215586723 -206 656 -2.1119987587879256 -261 656 -.4853099044656292 -271 656 -.13330357556159741 -277 656 -.9544822602767503 -284 656 -.009931624048542503 -306 656 2.3449870375727957 -310 656 -.7482022077706711 -316 656 -.23490153145693124 -324 656 1.0683217640094504 -327 656 .7958641409150505 -355 656 1.3628991094280638 -357 656 1.2494171004799604 -358 656 -1.0575709401627298 -360 656 -1.4474493460726374 -361 656 .8573498934498472 -392 656 .538201485543788 -405 656 -1.0427797145788993 -410 656 .3207493069871924 -422 656 -.726451712725323 -439 656 -.44832794497912876 -446 656 .9216484194029658 -466 656 -1.1012649512347594 -470 656 -1.7462190590060191 -493 656 .7398085965003656 -495 656 .36476961107655836 -497 656 -1.6965786386324646 -505 656 .3389327174071049 -523 656 1.3365677543206516 -531 656 -.3789504589316113 -534 656 -.32562751920317257 -537 656 1.5897029029886935 -545 656 .3067533410531602 -546 656 -.1605595553215249 -561 656 -.542542544214549 -588 656 .5476853931342073 -590 656 .4460217829081163 -598 656 -1.3810214904060458 -613 656 -2.4404948775972066 -615 656 .2910464889012639 -635 656 -.7815543899554298 -650 656 -.037722194270524444 -661 656 -1.231190348174925 -666 656 .31092507545494336 -682 656 .3525164847972467 -686 656 .8668090603514998 -702 656 -.5326130784748595 -712 656 2.1067701868746376 -721 656 1.4172554391981396 -726 656 1.8909661318521176 -730 656 -.4607804180300971 -741 656 -1.4725876089832324 -762 656 -.010727105188134597 -768 656 .4522847556119021 -770 656 -.8816365986987907 -771 656 -1.6924268194574221 -777 656 -.377243379257001 -812 656 .23194919812834291 -822 656 1.4144176942168736 -832 656 1.5488264808200753 -838 656 .8818848190512821 -876 656 -1.2197389197311541 -881 656 -1.8483952752407211 -902 656 .38042364968890374 -906 656 1.073006600969821 -910 656 -1.187405069906091 -912 656 -.031865946886337565 -915 656 .1915005565836033 -924 656 .1841341644757132 -926 656 .7016456339370862 -931 656 1.2217838816206203 -936 656 .4961056920570121 -937 656 .3135769067664411 -938 656 .7587941498743215 -965 656 -.9254003888426661 -973 656 -1.280105672137769 -976 656 .323621048353884 -984 656 -.9392099991283587 -986 656 .3001117887935767 -990 656 -.08733952995454103 -991 656 -1.2056585474293287 -999 656 -.055361150815418425 -4 657 -.6615244816813315 -9 657 .26406749930754353 -29 657 -.12631922790057534 -30 657 1.1523153869896405 -31 657 1.5748966392760932 -32 657 -1.4547740458082925 -36 657 .04591164122958745 -61 657 -1.9803476310701247 -67 657 -.7109279665330143 -99 657 1.3120424804268418 -105 657 -1.0517584951143535 -117 657 -1.2176671638998626 -135 657 .7672327132426002 -136 657 -1.688725360035251 -141 657 -1.3011891560742175 -154 657 .5787934946676259 -161 657 -.6833332333650859 -162 657 .2512369480032216 -169 657 -.18023597266090793 -170 657 -.2963716058929961 -192 657 .9894894866219227 -196 657 -.02146801156762379 -209 657 .35141934114148216 -212 657 1.0882765862756567 -220 657 .5683404348151226 -224 657 -.7139955139849791 -226 657 -3.048844332786262 -227 657 3.1765920106653827 -229 657 -.5541992398031654 -234 657 2.5120804325843062 -245 657 -.43072689294600386 -257 657 1.0471081914686395 -258 657 .05028108219884045 -267 657 1.7455038964070333 -268 657 1.0686322449438812 -270 657 1.0267301755139329 -292 657 .14238700844417848 -294 657 -.4043809647685697 -298 657 .9060328263351985 -307 657 .9878166420945931 -309 657 .7988166069960484 -310 657 .007155162697935757 -323 657 .8325986219955012 -331 657 .847782968580384 -345 657 -.9438933724909517 -353 657 -1.794600490487392 -357 657 -2.0404122691340842 -359 657 -1.4124590798205923 -367 657 -.28006942881620267 -372 657 1.0332143582192874 -374 657 -.19902969368484222 -412 657 1.0569147469157942 -414 657 1.4385092793519552 -424 657 .5476509815039383 -436 657 -1.291674558941265 -437 657 .7748516023394612 -438 657 -.3551803287353445 -445 657 -.8806969102337977 -460 657 -.6906229239190882 -463 657 -1.581897689969372 -471 657 .16780571121901694 -486 657 .06349180930286621 -497 657 1.9986476604732013 -502 657 2.6608900076318722 -508 657 .5635497850827917 -521 657 -.06211488801350385 -540 657 .4209721281233258 -542 657 .10754948207238672 -549 657 .6893769517001402 -557 657 1.3445088229040338 -575 657 .40970675973199444 -580 657 -.6374559319684511 -584 657 -.17050825487193555 -611 657 1.004244359308145 -615 657 -.42327714036363884 -623 657 -.17196491076994103 -628 657 .6539662522678088 -632 657 .3951426429724964 -633 657 1.3797198898263563 -634 657 -1.3004021425286476 -637 657 -.15725794244274421 -641 657 1.4883164073849746 -645 657 -1.4802462493745434 -657 657 .7642789403830679 -666 657 -1.7830408497615045 -679 657 .009258142374709483 -684 657 -.41602266584203246 -692 657 -1.8541177601076275 -710 657 .837477600658767 -717 657 .9002195464143706 -727 657 -1.7404249289756242 -728 657 -.38934237552983736 -740 657 -.03712653200219035 -746 657 .38663456647098116 -748 657 .780964066083497 -755 657 1.5113358950463396 -776 657 .5126778073171459 -777 657 -1.3783102124502067 -786 657 -2.4144071259884843 -788 657 -.2164421573613777 -802 657 -.045989027412588396 -804 657 -.3917331657461099 -859 657 1.9306568593503386 -866 657 .41719501350359434 -871 657 -2.6277513605189107 -875 657 -1.8133037762631539 -896 657 2.578168882883942 -909 657 -1.1468029520356389 -922 657 -1.585854729033787 -938 657 1.6875926443811886 -948 657 -1.9034162085022306 -957 657 1.9202144549260147 -969 657 .8748170074052789 -986 657 -.20306308489484862 -991 657 .341231083366233 -996 657 .3107891825776725 -1 658 1.0733676433623642 -3 658 .9745430252960684 -10 658 -.5771773659973353 -22 658 .397554095690476 -34 658 .4955242760862924 -46 658 1.6838088534018234 -54 658 -1.443492953308661 -65 658 1.1579781194415364 -68 658 .07528003484973451 -72 658 .8432672064165717 -78 658 .6468051570006158 -83 658 .4514353755175258 -101 658 -4.437779851382074 -110 658 -.8080111203160588 -127 658 1.1620222602551293 -130 658 -.11373277877874005 -136 658 2.2374214899607074 -146 658 -3.077769323374131 -154 658 -1.3598022014033988 -164 658 -.6282293523263501 -171 658 -2.580144731719911 -175 658 -.8469435134116925 -206 658 .9926669979556717 -209 658 -1.1773905586976252 -211 658 -.05858421923399898 -228 658 2.1372558343211505 -245 658 2.2149437689802887 -260 658 -1.5596876067207328 -261 658 -1.8474078462478516 -276 658 -.2485255442968002 -296 658 -.9196135835865602 -297 658 .6462619883245717 -300 658 .029445114561813597 -326 658 .17084897129278181 -332 658 -1.337451342703167 -340 658 -.8991556048415273 -341 658 -1.6527121490041883 -353 658 1.7648961750569494 -354 658 2.2455821995865 -362 658 -.15429155533719602 -366 658 .08124265018198855 -385 658 -.9240496484645551 -389 658 -.671890358846935 -404 658 -.1685066830107768 -411 658 -3.2603361343254478 -426 658 -1.8030231830292138 -428 658 3.5223073407072514 -442 658 .603107034440115 -443 658 -.6844349624051145 -457 658 2.6741187410726566 -472 658 -1.5947672227897176 -489 658 1.6754237206827933 -491 658 -.8874618532708514 -503 658 -.0832268227211544 -506 658 -.4292444834108247 -513 658 .1951066432660437 -514 658 -.8726313431988063 -529 658 -.6860821978861612 -539 658 .22058381747774775 -542 658 -.3820693630486136 -571 658 2.160162697262529 -582 658 -.49231931461427836 -596 658 -1.6100804691368034 -605 658 -.1390905361890077 -622 658 .8255954484478722 -624 658 .24413348889006609 -629 658 .2257103002503498 -634 658 2.6368647497649644 -649 658 .08665336024969515 -655 658 -2.0449869478236264 -657 658 .3017969940276693 -659 658 .32749099458628983 -660 658 -1.7708337802186704 -665 658 .03471162983331176 -673 658 -.6453974524389972 -686 658 -2.396533997455915 -696 658 1.437451929399333 -703 658 -.3270651942314235 -711 658 -.6116013088559068 -741 658 -.9977406119423841 -745 658 .37916334101715965 -750 658 2.5084988442396776 -761 658 -1.045573555429566 -766 658 -.5603329376224024 -793 658 .4726449304722733 -794 658 -.9787854585575158 -804 658 .6609394302998469 -812 658 .8997077681845775 -817 658 -.7528915331410474 -832 658 .2876843620024006 -848 658 2.5076609845076807 -850 658 -.9169622969470881 -859 658 -3.0026139667344176 -882 658 .4776534580110996 -884 658 -.7071742637813142 -893 658 -.8417641264971264 -896 658 -.6634380012927188 -898 658 -2.3077279116143057 -900 658 -.9026970061938016 -916 658 -.48219766005942777 -925 658 1.136235303898371 -926 658 1.8672673257528718 -932 658 .8197171338567083 -962 658 -.7450623594247849 -968 658 .2598318676916028 -979 658 .13040061902829148 -981 658 .1796534826537881 -989 658 .8401811532646141 -999 658 .04733987924144875 -36 659 1.1847490344552234 -45 659 1.1895169500687257 -95 659 .7197971175905274 -100 659 .02023159053977619 -110 659 .5588287605334183 -114 659 .3743783495552999 -115 659 -1.115759641423365 -133 659 .7578811881566885 -177 659 .44240955576988783 -179 659 -.06211399915643437 -186 659 -.533208146859939 -245 659 1.0681255135749286 -251 659 -.03079114458936839 -253 659 .5199854683737436 -258 659 -1.3292488456169569 -273 659 1.3013143855831584 -276 659 -1.6341480297659339 -287 659 .927537413302611 -310 659 .21021159241076948 -315 659 .32263841784332903 -330 659 .42431026500963137 -335 659 -.09067964232179528 -355 659 .7741755573952485 -358 659 1.8757092362300192 -388 659 -1.0794507206227455 -401 659 -.17991801930452983 -403 659 -.2869701457804277 -412 659 -.9953411979852116 -418 659 -.7752862431160064 -431 659 -.11118754253787277 -435 659 -1.3267781675126005 -440 659 -1.8302462892559646 -459 659 -1.3263870957998238 -467 659 .35618086813339994 -469 659 -.8369774567713172 -495 659 .04027995133446462 -516 659 -1.2232113280629524 -534 659 -.5884803944224849 -535 659 .21790498316883392 -556 659 -.12265659998320107 -580 659 -.7936271672445956 -593 659 -.22302390491787277 -598 659 .42320857838392734 -617 659 -1.0726476353372463 -620 659 -.03495958536275767 -634 659 .7948616154537035 -635 659 -.7429397159773563 -637 659 1.2801271231925073 -645 659 1.1039074033182974 -674 659 .10365392109657537 -681 659 .26523732375519327 -701 659 -.36049917291416045 -731 659 1.688418976534507 -733 659 .723810074137814 -736 659 -.5306758873734527 -799 659 .819077199010452 -803 659 1.5808190507965008 -807 659 -1.5894324811003107 -812 659 -1.5274053244070036 -819 659 1.708318574483638 -833 659 -.22702523072923325 -847 659 1.3863457614020631 -851 659 -1.393613950443455 -861 659 -1.201525692034965 -870 659 .371188926303477 -894 659 -.3725650077097317 -897 659 -.02604178332160642 -911 659 -.715248399715611 -914 659 -.30259074249764784 -916 659 .5521634472573889 -924 659 -.4407687811703114 -927 659 -2.0297747583699963 -930 659 -.38879368043944046 -999 659 .6465708796440103 -1 660 .45555233743030127 -15 660 .6894927146259404 -16 660 -.8619905553765723 -27 660 1.0477191906912733 -37 660 -1.1230344409986397 -61 660 .24145594444715765 -84 660 1.4531676582095918 -87 660 -1.0103291601626685 -91 660 -.4142663281997044 -93 660 -.20259515882836293 -97 660 2.0956147483153935 -116 660 1.4875575475194678 -117 660 .9278268152631731 -125 660 .5796442669127078 -161 660 -.9584204457820561 -166 660 -.6526991014703933 -167 660 .5165751364308108 -172 660 -.700588655192527 -178 660 -1.0580736121048082 -192 660 .568782954974465 -196 660 1.5566522584736349 -203 660 .626082763932941 -216 660 -.6428835931077062 -220 660 .5497777943183126 -229 660 -.35828963674184955 -238 660 .40420898592061294 -241 660 -1.3866819139216853 -243 660 -.3277993347171565 -258 660 .6281989857218246 -267 660 -.14586135051587096 -275 660 -.4739078942134882 -276 660 -.5557552079391549 -287 660 -.31085788931264424 -297 660 .5249450746023452 -305 660 .016754379314527 -318 660 -1.1448911356885139 -342 660 -.9212208910506117 -347 660 .17972054063014642 -352 660 .6657425898756841 -357 660 .7802969119904611 -368 660 .41958371094716224 -386 660 -.37116838637453525 -417 660 .7549405449821979 -421 660 -.6621414926652012 -423 660 -.5091322695964673 -428 660 .7002727057079843 -433 660 -.06272674866027547 -458 660 .4300678259011953 -475 660 .46588777522395863 -481 660 .6558418579514027 -484 660 -.632957867152832 -500 660 -.14572439754370353 -503 660 -.06877938627077651 -511 660 -.22962080191273201 -515 660 .8752065938639866 -523 660 -.5331128772519014 -535 660 .41029585611454855 -544 660 1.1777004951982517 -551 660 -1.382604452635227 -563 660 -.14261935433291853 -603 660 -.6612617149293123 -615 660 -.36326477864015616 -620 660 -.5708791108882821 -650 660 -1.0404858858022288 -654 660 1.6098209617539652 -668 660 -.07864225252698592 -672 660 -1.0099320181296318 -687 660 .5625347908429371 -690 660 -.8396446592669502 -695 660 .08159300003351237 -696 660 -.6300709059035544 -697 660 -.03154308170267894 -707 660 -.3915356066877098 -728 660 -.8001645536794137 -734 660 .9266085578800805 -736 660 .14834364249700016 -738 660 .03992785134883087 -743 660 .9470462991352874 -759 660 -.08326427645085996 -763 660 .20409484968680125 -764 660 .8585523628993967 -778 660 .22176531812709446 -785 660 -.9884705378726234 -792 660 -.36557806979804824 -801 660 -.42540878101665325 -812 660 .4106521699906278 -813 660 -.1789494490901612 -819 660 -.3282784302744728 -825 660 -.6518298787812843 -826 660 .9432173799581451 -833 660 .5227337370443869 -843 660 .01620248122256497 -847 660 .33907534774189185 -866 660 .632953157035821 -871 660 .5088053394967058 -882 660 .8210027894346601 -891 660 .1851516289918696 -892 660 -.871952848152673 -893 660 -.4290265707550277 -897 660 -.4168900740414937 -903 660 .2982231321112615 -917 660 -.5681110250620747 -932 660 1.1027977155427882 -957 660 -.28187864989976735 -960 660 1.08262588170397 -970 660 -.2019853661544965 -981 660 -.5528924385593394 -15 661 1.3850640856219703 -19 661 1.187122977433802 -24 661 .5134451329470324 -32 661 .724596369440641 -51 661 .20671962519666714 -60 661 .7208722960180628 -64 661 -2.0448734611576174 -66 661 -1.3029893212153423 -68 661 -.206530610489679 -80 661 1.3421449400776908 -87 661 -2.164437856158396 -93 661 -1.2760768071346396 -94 661 -.41891773499634605 -104 661 -.6576170035546901 -144 661 .3369602185829181 -169 661 2.1880435935038336 -199 661 .38464385389893807 -201 661 .03556228776194992 -204 661 -1.459565630758001 -205 661 .5407631851091792 -229 661 -1.0820094791348571 -245 661 -1.8552819869386135 -261 661 1.3546322196234986 -271 661 .2802117712457519 -303 661 1.780182791730238 -307 661 1.4556502360097339 -315 661 -.6537769471020853 -329 661 -.6473883694031825 -352 661 -2.4474771126670145 -360 661 -2.000610534339661 -365 661 .8192489659838522 -372 661 3.072435896036921 -398 661 .025777940748749825 -424 661 .5210334919467428 -432 661 .005389952346499971 -435 661 -.9607474037432775 -443 661 -.6567768488991422 -448 661 .5621371700683891 -470 661 1.5643089050285839 -494 661 1.5323968511264063 -502 661 1.0034199425905515 -520 661 1.2784598637530118 -543 661 -1.9821469777064058 -556 661 .7291918873551648 -608 661 .06785261370173076 -622 661 1.3247973432059794 -625 661 .16174573129828623 -637 661 -.8224887433682222 -645 661 .7650829466729078 -649 661 -.7825598075146772 -651 661 -.36967951719639064 -652 661 -1.582835334112684 -654 661 .33297020680719824 -660 661 .8594710771480611 -662 661 -.372858855227105 -680 661 .6117431129156095 -696 661 -1.3661365537178922 -698 661 1.3444589862663012 -715 661 -.8710101031190488 -721 661 .4804480693422312 -726 661 -1.2937152080008598 -742 661 -.8793538510808458 -774 661 .29186657078043965 -788 661 .1965167539520855 -791 661 .4321320960884665 -820 661 -1.4814181602766314 -832 661 .373943460401958 -836 661 -.07164656693591755 -841 661 -.9790155953784059 -844 661 -2.8998635162825743 -849 661 .22702353227606603 -855 661 -.3249648137204566 -866 661 1.9581396693364386 -874 661 -.04975242428648028 -879 661 -.8260197492294843 -889 661 -2.0737323045872365 -897 661 1.1342950649500478 -899 661 -1.4379091928044052 -912 661 -.3864581989292839 -915 661 .44835358975844064 -919 661 -.44132720136352627 -931 661 .797932127398678 -936 661 1.7946709472369773 -956 661 -.21164935232198173 -963 661 -1.8168939046121102 -974 661 -1.421748099067709 -978 661 -.30154484013719995 -993 661 .6346471247657065 -999 661 -.5491706301058856 -1 662 -.4095669356867972 -13 662 .1980084173096402 -17 662 1.0785794925969148 -20 662 .26935604914105693 -25 662 3.947685502967709 -28 662 1.1058693548840597 -32 662 -.9656407034584515 -37 662 -1.3427335555702147 -39 662 -1.0563536986912743 -41 662 -1.3289743487664514 -49 662 2.484647196138558 -50 662 .28539381430057603 -51 662 1.081915870528091 -52 662 .8691857165910368 -56 662 -1.7855513428841416 -65 662 1.7860797415358074 -77 662 1.3374394755146906 -92 662 .9821570597899351 -96 662 .7845597809960421 -100 662 .8434404699652752 -109 662 -1.316872063398507 -129 662 1.5341386128052292 -134 662 -.7360148318603529 -148 662 .10542254219595136 -152 662 .1568284376656839 -174 662 1.3813100378323515 -177 662 -.21458763833837488 -186 662 2.365518392491799 -188 662 .44533278250321046 -223 662 -2.1472860642757605 -224 662 -.17029668364042458 -252 662 -.46154601017447483 -257 662 -1.0033197800671272 -263 662 -1.7598559674715297 -264 662 .9718771295341442 -271 662 -1.5381848708139918 -278 662 1.1914733222211946 -284 662 -.23347175177980392 -285 662 .5575485671563545 -286 662 .36012935852285205 -312 662 1.699061527980087 -323 662 -.8479502505420562 -324 662 2.67034578897524 -330 662 1.4844950329414928 -341 662 -.5158323433006381 -405 662 .8918411694556404 -411 662 -2.3989094607520336 -418 662 -.9293845068164 -432 662 1.279716961835964 -437 662 .18817529662662918 -439 662 -.08388074323077133 -442 662 -.6904067956864935 -443 662 -.7605496333543611 -446 662 2.4226456827597893 -449 662 -2.575148210554771 -453 662 .025260289335166306 -456 662 1.0032352259284196 -457 662 .17673254104389705 -470 662 1.03471662076929 -480 662 -.9197008356207392 -493 662 -2.3690007027633593 -496 662 -.9381735240547209 -499 662 2.210351581995962 -510 662 -2.0064599381586983 -512 662 -.8285985120500817 -527 662 -.055489321533381764 -529 662 .19711181863015387 -561 662 -.6961366164970092 -573 662 .6424432535471207 -582 662 -.7255985067189723 -595 662 -.8078847714450967 -596 662 -.16761360760489985 -613 662 .7154460451534199 -642 662 3.28472246201337 -650 662 -.14360099111041846 -655 662 -.6882145827257542 -663 662 -.4190088285218942 -674 662 -.10106852880729317 -685 662 1.1956379694424455 -690 662 .6759668970110727 -726 662 -.5413735770309243 -732 662 -.9826926191631256 -742 662 .3414627950899135 -755 662 .9322975771325968 -774 662 1.1126699106900524 -785 662 -.08168094383757704 -790 662 -1.3825719129441028 -792 662 .07347522250461175 -802 662 1.951843031339873 -815 662 1.1055798689314313 -819 662 .6079704318728832 -825 662 .7552496801059594 -831 662 -1.284699918865931 -834 662 .22020542299523546 -838 662 -.9582474000196404 -845 662 1.3452928599475882 -846 662 .060931565928043885 -853 662 1.1322020802072563 -865 662 -.014517224100384613 -870 662 -.5538172354356706 -872 662 -.0037237975485567842 -880 662 -.9185025811888522 -891 662 1.2700331394791942 -892 662 -.004352044590695603 -894 662 .5445564036626864 -896 662 .27441840398958794 -902 662 1.678716814392955 -904 662 .7528429600487976 -917 662 .6545279569099123 -919 662 .010236240365834592 -936 662 -.19708567503892666 -942 662 -.8812695974241547 -959 662 -1.5385520859824435 -976 662 -.10008764561676602 -980 662 -.4936576449930315 -989 662 -.06132428650086616 -991 662 1.9613949972192248 -993 662 .4270647368415292 -994 662 2.33374648225422 -997 662 -1.2967433597947264 -3 663 -.1265728922946634 -16 663 -.25487641745767936 -24 663 2.101633284973442 -30 663 .8062884613194511 -31 663 -.531738608074027 -42 663 -.4504848397980948 -47 663 -.8150993263971079 -62 663 -.8407958868955413 -69 663 -.12547838618001528 -80 663 .25540650650693153 -87 663 -.2191614457365606 -97 663 2.0448536417311596 -116 663 1.8481110977915027 -140 663 .01981800650247545 -157 663 -.5655813878735714 -159 663 1.5309821032889448 -163 663 -.15914936275555558 -183 663 .826932138979656 -196 663 1.7023529171130203 -197 663 .1392367065030445 -223 663 .5131106157525684 -226 663 1.6245483191564258 -228 663 -.2058399773502861 -230 663 -1.3147028096429227 -248 663 -.6786689929992613 -261 663 -.030309159498421154 -274 663 1.7993586583571988 -281 663 .2366768249385438 -299 663 -1.1955833271542522 -318 663 .014155618909090423 -321 663 -1.2981546869476828 -355 663 -.4728338658176028 -357 663 1.9507007473942986 -360 663 .4645069524485112 -378 663 1.6179451170255885 -380 663 -1.1524343019009724 -385 663 .16472653691095346 -402 663 1.2991067666780434 -407 663 -1.109409835330727 -428 663 .9282404023140526 -436 663 1.8197546556192041 -440 663 .20501634692033283 -441 663 .4730002406116173 -450 663 -2.1188222152932434 -461 663 .6107577506820122 -472 663 -.6374308604874882 -489 663 .4111476474543477 -507 663 -.27479798772914826 -508 663 .2543016215824382 -525 663 -.30807404271842753 -562 663 .587576700405892 -574 663 -.3453573542994113 -577 663 -.5464807847717355 -608 663 -1.0886676289658352 -622 663 .2737717208318894 -648 663 .8823471299602426 -658 663 .2513610293822757 -661 663 .2978678533689375 -666 663 1.0405367465134066 -685 663 .8361066791295131 -694 663 .3435687719736581 -698 663 -.38587569725640875 -716 663 -.1750643321355474 -726 663 -.3558017175031317 -736 663 .9103909054747263 -755 663 -2.572881994952341 -765 663 -.6716147923447437 -776 663 -.03273604832105993 -782 663 .24178454165764443 -799 663 .43191255837685916 -800 663 .06680541319876532 -807 663 .6878393124834219 -813 663 1.1112516916338553 -815 663 -.06660573224916932 -833 663 -.4355409044133671 -843 663 .8276733134917056 -844 663 .957090889005499 -861 663 1.9671004845043263 -864 663 -.892837995406884 -876 663 -.48064834037446436 -880 663 -1.5499137433047805 -900 663 -.6211877946244424 -909 663 .17304042404028255 -913 663 -1.3207393311762343 -920 663 .11703534122666745 -945 663 .22893218348863698 -963 663 -.7818942114519614 -991 663 .4225586482303182 -19 664 1.0829852077930302 -26 664 -.6969912381504233 -30 664 -2.176616168527255 -37 664 -1.877755765739038 -65 664 -1.8621063387469947 -79 664 1.1519265600394537 -84 664 2.107349439411059 -98 664 -1.4408998196614233 -128 664 -.6973423731462468 -147 664 -.08153193152991081 -148 664 -1.1666906816539417 -151 664 .4497804620114667 -171 664 .6407773166622941 -177 664 -2.5128928539930095 -188 664 -1.0397249768822225 -196 664 .8448238213482724 -203 664 .8919209649210179 -218 664 2.7232195834290827 -225 664 -.5851441866168763 -230 664 -.6258798606328381 -244 664 .5301497026354941 -247 664 -1.1578611081837413 -251 664 2.408261980101336 -263 664 -.5945206139939757 -268 664 -.3976130509235779 -290 664 .7671100034014547 -292 664 -.6114446761147201 -296 664 -1.5953108980532895 -303 664 2.204309412841267 -305 664 .7508636337698282 -330 664 .22690570687945466 -356 664 .8751023146502388 -373 664 3.1738895163655356 -385 664 -.13422865838742984 -386 664 -.34008756188044953 -399 664 .42936404969467856 -413 664 -.26316827488944783 -422 664 -1.7701546908886123 -424 664 .5646864154056419 -448 664 -.18400293941427912 -472 664 -2.728810991363112 -486 664 2.1520632748403217 -493 664 1.5083799718665762 -505 664 -.5026883606000722 -509 664 .20964560849171582 -537 664 -.0036031023439427688 -547 664 -.15791032214141243 -550 664 1.0279732112138977 -573 664 1.254622324651229 -590 664 .319465728726623 -591 664 -.9502192595148037 -592 664 -.6724820037469026 -612 664 -.07270042550791894 -617 664 -1.8559862408905365 -619 664 -1.1434496271501535 -625 664 -2.697259224660191 -626 664 2.2411577175523743 -642 664 .1389016028840464 -661 664 1.2037154396491425 -666 664 2.2800270304923593 -675 664 -.5419845826479023 -686 664 .19085442397876412 -702 664 .25629253494578835 -722 664 1.237598326021691 -724 664 -.22021604351263768 -727 664 1.6013399361140779 -773 664 -.2017145840229888 -785 664 -1.5350522773087858 -801 664 1.1745023527939997 -833 664 .4733350360465891 -841 664 -.7027352409030917 -843 664 .7722139308490779 -846 664 -.1831717011471397 -854 664 .3525891031373959 -856 664 .8906100115331655 -873 664 -1.1919112696415524 -886 664 -.08844611660782155 -930 664 -1.3896880020932478 -937 664 -.3926319594940997 -947 664 -.1456370224834145 -954 664 -2.295468856350726 -956 664 1.3206764001687068 -969 664 -1.0119391925667585 -973 664 1.5094758823616343 -984 664 .4958120321221852 -13 665 .8597577500816418 -21 665 .9735656850990496 -34 665 -.6942647363744606 -56 665 -.5728039874832058 -62 665 -.3507964473243631 -96 665 .04879059589698103 -97 665 1.3096654976558812 -104 665 .9701668637014924 -113 665 .23090128962963397 -126 665 .13964657416198728 -163 665 -.6258875733099127 -168 665 -.6378572812131774 -172 665 .6261635720737672 -177 665 1.5033420792702559 -184 665 -1.2055587759536472 -191 665 .35327928892715305 -193 665 -.9642845947866232 -196 665 .4507267233194316 -213 665 .24282611594694287 -223 665 -.12850335249824557 -227 665 .5618544302310451 -255 665 .7849006784433583 -257 665 .5109675831326599 -274 665 .065819722800035 -295 665 .7229563884561235 -299 665 .5653946952393001 -305 665 -1.0615972858633773 -306 665 -.7025204841531614 -309 665 1.0156854847209624 -312 665 .43382284355370937 -315 665 1.2400292946730485 -320 665 -.2326743806116787 -389 665 .6969872761921467 -404 665 1.2622143062715485 -409 665 .4418376266165205 -429 665 1.2580788701443064 -454 665 -.18041407400990395 -459 665 -.49530760390622125 -470 665 .49578192383474534 -472 665 -.18160893320088878 -478 665 .6143955606217285 -495 665 1.3832825187701716 -500 665 -.9359054854838764 -510 665 -.777793287046393 -516 665 .08236408926383887 -530 665 -.6248231138671787 -537 665 -.3118834638070157 -539 665 -.35218689742974624 -543 665 -.6682245466358893 -555 665 -.34829168435504276 -556 665 -.9156190851284642 -584 665 .8386287636694696 -601 665 -.005418750413892566 -606 665 -.34887506348325026 -622 665 .0054503918570304455 -623 665 -.8731097323456553 -627 665 -.22189129882159858 -638 665 -.08313819384366339 -641 665 -.5371394172406132 -642 665 .6253965484000246 -647 665 .5803208798817758 -656 665 .6766348890947099 -661 665 1.8345048319213295 -676 665 .6351309597884441 -677 665 .2751223944249212 -685 665 .1622314969914888 -697 665 .4067170277606813 -698 665 -.1306171641697243 -718 665 .45776882931370905 -738 665 -.14170926407466194 -746 665 -.02705838180433779 -747 665 -.3054836784744541 -748 665 -.5595731571141039 -760 665 -.6473440750879443 -770 665 -1.1100764777318342 -772 665 -.22967474055653048 -773 665 -.1454818539343389 -782 665 -.19921685301696196 -787 665 -.23103731806201516 -789 665 .48028593800032593 -813 665 -.8516367194705036 -863 665 -.6468336580719711 -872 665 .49760064384420594 -882 665 .6730881495746691 -883 665 -.6968280773990909 -886 665 .5520176919390613 -894 665 -.3808173607210949 -905 665 .21258984035197256 -923 665 1.4482201612784034 -932 665 1.4497125134813194 -934 665 .6548414516478168 -935 665 -1.2677882113368328 -940 665 .6817936235032866 -943 665 -.48646567388685014 -946 665 -1.0901569080976905 -948 665 1.145563763211844 -949 665 .4210756534518565 -954 665 -.0035443609549949823 -956 665 -.3197034291856046 -972 665 -.8571961537174386 -977 665 .4681620088433091 -986 665 -.9712176617623282 -997 665 .028079257103473792 -999 665 -.48997635022158875 -37 666 .3984338919509238 -41 666 -1.133694412655858 -43 666 .186663107129612 -51 666 .766535222950563 -71 666 -2.0271860654932206 -74 666 .03323772383768815 -80 666 .927672678158078 -102 666 .3638448251304932 -130 666 .20265994817590155 -132 666 .28386609431540394 -139 666 1.046792937512107 -142 666 -.46846147712772124 -150 666 -.1344899546346876 -151 666 -1.0112585633573332 -164 666 .6618101920922002 -165 666 -.5551611779758859 -171 666 -.04563783729360826 -211 666 .570115576255712 -213 666 -.03461556369996979 -227 666 -1.8516927790348277 -255 666 .22190755951295701 -263 666 -1.1001978718049774 -273 666 -.8947933453856136 -303 666 1.807822721391251 -311 666 .501184413907905 -312 666 1.1035105982017317 -330 666 -.21135366683791693 -354 666 -1.181864589490601 -358 666 -.5287612691451316 -359 666 -.2669801396397061 -363 666 -.08726636444815655 -364 666 .15492055292510643 -388 666 -.7126614750270817 -416 666 -.43321293917714554 -435 666 -.19556564337873297 -461 666 1.5251603242581417 -467 666 -.13437962505743611 -503 666 -.017783534164890334 -518 666 .45401783495574505 -520 666 .28050784399760464 -549 666 -2.242426279344613 -557 666 -1.1839240084610805 -560 666 -.678135263391367 -569 666 -.5285515672549832 -604 666 -.021744103999909586 -641 666 -1.1929178922424248 -643 666 -1.2968521263423634 -647 666 .40684819045587584 -650 666 -.7894931075842239 -668 666 -.3907554219652105 -671 666 .10476087458049047 -683 666 .3975694397349505 -685 666 1.9087396537072596 -692 666 1.014006693235843 -695 666 .6061352304074238 -701 666 -.6691470301525013 -725 666 -1.6856672349687227 -740 666 .5687897828695333 -746 666 -.33693461659799306 -748 666 -.1301220439382123 -786 666 1.4708346389618563 -796 666 1.9771519408416989 -800 666 .9311367936654046 -805 666 -.5633020001891057 -809 666 -2.025368101920676 -841 666 -.733111619592128 -848 666 -2.08760051381258 -853 666 .4446504618023464 -863 666 -.18586493957072242 -881 666 .17579153339031636 -890 666 -.2243594856166713 -892 666 -.3387847576751936 -896 666 -.5907382560374801 -902 666 1.0673369265479713 -918 666 .7291789691260459 -962 666 -.5829281817753862 -968 666 -.23272552885767975 -969 666 2.311412937720691 -970 666 .06962769964154436 -971 666 -.8529118071406827 -974 666 -.10261738831920605 -980 666 -.4186176976909958 -4 667 -.09032482791807334 -7 667 -1.3794789205503488 -11 667 1.257833533588874 -14 667 -.16748593536865233 -24 667 -.28088611704420186 -35 667 .845283678235492 -45 667 .6894292205090944 -57 667 -.08655727579546707 -59 667 2.715029477467363 -84 667 -1.8075243954130724 -99 667 2.2501554942630952 -111 667 .2677013851838763 -117 667 -2.575082112213042 -122 667 1.7808695725225825 -134 667 -.031692707032957394 -139 667 .054851631126011546 -140 667 .04840717741396339 -148 667 .5672036700086363 -157 667 2.134121375360118 -159 667 .6596736319237673 -185 667 -.251876963985872 -205 667 -1.3875957962592762 -217 667 -.24574797818497945 -230 667 -.058752529382620614 -234 667 1.7047496553019315 -241 667 2.3025382844185516 -247 667 1.3761984204954614 -269 667 .7370255746751233 -274 667 -.10111026914764168 -277 667 -1.9552545396132452 -296 667 .7761160717861622 -299 667 -.34152943463643687 -301 667 1.4180646829787693 -309 667 -.8259325822119303 -321 667 .7887927123180118 -325 667 -.5420600956709051 -336 667 -1.2986752155983152 -340 667 1.2790433247013735 -342 667 -.2521663495350353 -348 667 -.9870048251881355 -368 667 2.990711916553651 -379 667 .27795112757440127 -382 667 .02863945751029849 -409 667 -2.666359269536582 -425 667 -.8600920702125495 -467 667 2.148916422860845 -481 667 -.7660997641266348 -493 667 1.3061555425382947 -495 667 -1.231337025089757 -500 667 1.3648816814615492 -530 667 .3018083178749715 -540 667 -.9144211171958215 -551 667 2.2328286116711737 -562 667 -.10197676381260945 -582 667 1.2852828142933295 -604 667 1.0432521536576818 -625 667 -2.551472624201077 -632 667 1.3317855803735579 -666 667 -.8292004369989652 -669 667 -.17986865464339102 -684 667 .3403232613427586 -737 667 -1.2487899761227546 -762 667 -.5854648885259299 -764 667 1.3022949324420756 -788 667 1.2710673663498855 -789 667 1.2938107183646064 -800 667 -1.463652526063325 -810 667 -1.74482621620649 -823 667 -2.0029162090437667 -842 667 .9610766431407405 -850 667 1.2059397929634113 -853 667 -2.339017639487915 -867 667 1.1644685011677298 -870 667 1.393987536146465 -885 667 .3824013117661518 -891 667 -.43437022234355893 -902 667 -2.088931188085762 -903 667 1.3405722229480985 -908 667 -.7477027213198131 -918 667 1.753327852960429 -921 667 .17395722318082396 -931 667 1.4398632727285772 -939 667 .6600642111003034 -949 667 .5342635211712627 -971 667 -.24204981282438703 -979 667 .8237897642567558 -981 667 -.32499666783605446 -985 667 .5966902536214185 -990 667 2.545486863016617 -27 668 -.1293371869752552 -33 668 -.16955137444059337 -50 668 -.5686759720886296 -67 668 -.5987279448824793 -72 668 .659646923781104 -74 668 1.279994142844769 -89 668 -.39965493065136415 -113 668 .37522677398190485 -116 668 -.7269115614311152 -136 668 -2.736875924672677 -141 668 .8601700961322811 -142 668 -.7345009641443156 -144 668 -.9734046704829278 -153 668 -.8390842069927941 -162 668 -.41549060270444327 -177 668 -.8218685754338323 -199 668 .2737559900188426 -213 668 .18273296695461053 -234 668 .5356872501894334 -248 668 -1.4939953193206839 -257 668 -1.6334044079714714 -261 668 2.454334000674213 -282 668 .9542164954051917 -291 668 .45467559950432257 -303 668 .4098541492603284 -312 668 .31523246429198576 -319 668 -.3535874106025726 -326 668 1.362885142447311 -337 668 -1.3169366711437918 -348 668 1.793778006818659 -354 668 -1.9094542773022412 -356 668 .47881998288965966 -363 668 -.7700017581743065 -381 668 -.35682589526365166 -383 668 1.3232208023589387 -393 668 .4878687436796287 -398 668 -.23137227394054266 -406 668 -.5107500537193969 -414 668 .7067886915723683 -420 668 .03345499116553609 -452 668 -.9248283304813119 -454 668 -.9916989547803445 -469 668 .9399009877709709 -495 668 .9448220214074327 -510 668 1.1418912178453309 -518 668 -.49581543941816475 -529 668 .187520039371933 -540 668 -.9668933502163697 -541 668 -.4990487761274805 -548 668 .37301490907488444 -568 668 -2.3537589113920254 -578 668 .027745751441320687 -579 668 -.012538417371581843 -593 668 -.9971037972724759 -604 668 .0897196620792206 -625 668 1.3138378643580204 -626 668 -.7518958945647293 -644 668 1.2489568929865977 -652 668 -.3527445071783981 -656 668 .7119629984714381 -658 668 .46314660443783384 -659 668 -.07769876606513507 -670 668 -.35344645249277346 -678 668 -.24053841835415174 -687 668 -.006398860888765429 -697 668 -.8572341370794785 -710 668 .29182935322651016 -721 668 .5539040398139937 -723 668 -.40710802554426284 -726 668 -.5883652752878762 -757 668 -.6540515487892026 -763 668 .7581277102117034 -765 668 1.321696133872972 -777 668 .9272658361934927 -779 668 -.3804043715319717 -794 668 .40288168818522996 -799 668 -.3919826930850296 -818 668 .17517695483640056 -819 668 -1.0310522916430078 -831 668 -1.599782166587636 -833 668 -.704863541644851 -850 668 -.9327243624350653 -856 668 -1.1997197370012171 -873 668 .08497477058696706 -874 668 .9558987643387294 -879 668 .837861931052911 -886 668 -1.2536193105854538 -937 668 -.7749530045338101 -941 668 .6040510506665654 -944 668 1.1926452290281515 -945 668 .2816813510539075 -951 668 .7512003354735894 -968 668 -.12699979596882038 -972 668 -.17212759033422026 -986 668 .45412800605561393 -989 668 .7748812023600504 -991 668 .1554104730485967 -994 668 .8616280784578696 -7 669 .1965587034350592 -18 669 -.9538412566104458 -35 669 -.40286579488720486 -38 669 -2.418548026969423 -48 669 -.456832652800539 -65 669 1.4527107510605606 -76 669 -.032523322856819886 -89 669 1.113243099449386 -111 669 .018804337311718905 -176 669 -.6918038504940909 -179 669 .4348339505339046 -183 669 .9134635395537037 -201 669 -.548700229745225 -203 669 .15860197629704068 -218 669 .6969210606405452 -236 669 -.4313864608380663 -241 669 -1.6441867809005823 -266 669 .3372833528303636 -295 669 -.6488713972545257 -322 669 .4907645987508681 -338 669 -.2498511877566203 -343 669 -.9264907668415475 -364 669 -.5066579498859379 -376 669 .02398124090957834 -409 669 .8856066086646668 -414 669 -1.411712108036067 -435 669 1.6527483540849592 -439 669 1.8309474014947145 -460 669 -.41205211408471293 -473 669 .3200784182197439 -476 669 -.43245285951217655 -482 669 -.4311171337638568 -492 669 -.3713144337353097 -495 669 .7640858446093829 -511 669 .23131644803716797 -514 669 -.8540571034960603 -545 669 -.5864138681485607 -547 669 -.27649027991242997 -554 669 -.24721574639188754 -556 669 .30945518430099594 -590 669 -.21245483376462476 -597 669 1.3090906950698111 -604 669 -.005108510884994841 -607 669 1.0212798435289545 -612 669 .975754632094793 -613 669 -1.1996657010143243 -649 669 -.581300017553434 -683 669 -.02708341576460757 -690 669 -1.6785683122930648 -693 669 -.0486014457321971 -701 669 -.12526319526913626 -711 669 -.41430102618641707 -726 669 .8112791108094239 -769 669 -.0762414247559441 -783 669 1.1160229111803015 -807 669 .9278791215527333 -813 669 -2.278028648692497 -824 669 1.2924099283379062 -825 669 .7824862443437574 -836 669 -.1288910472628581 -840 669 .8604686940937329 -841 669 -1.1032945537765724 -847 669 -1.4569088080517458 -853 669 -1.0655377552391174 -860 669 -1.3287864408382644 -872 669 -.7790233441598605 -876 669 1.2492768565968073 -886 669 2.072089116647928 -887 669 -.37526663430121276 -890 669 -1.4366465952890177 -941 669 1.1386318109959028 -949 669 2.890856815522046 -958 669 .03612184620952666 -969 669 -1.5914143988486549 -970 669 -.8006231124445499 -986 669 -.022401704980532594 -2 670 -1.5210671657548573 -13 670 -.922776268874242 -14 670 .29492059867142667 -15 670 .9829148233700898 -21 670 -.934315318370759 -32 670 -.9501215394890749 -41 670 -.5249971997863744 -42 670 .6656663993124418 -62 670 -.048720368925705956 -63 670 .3834836189150771 -89 670 -.3908306155817066 -90 670 -.05510253287124046 -100 670 .4107665286411368 -101 670 -.5636916665885181 -113 670 .4076540357999281 -118 670 -1.2932076688830358 -120 670 .16799840787401396 -137 670 .63860810860852 -151 670 -1.4252673191088516 -155 670 .7317104202587974 -163 670 -.09125639557866858 -168 670 .40208847008718807 -186 670 .44226476373403834 -191 670 .25317056142574634 -205 670 -.5441777410026494 -206 670 .6815609139463424 -213 670 -.5746657319562956 -220 670 -.03514755811969007 -235 670 .722106498546009 -238 670 -.9006621331922458 -253 670 -.049240735885135084 -260 670 1.0424910253002375 -269 670 -.047127171203360047 -283 670 .9589521224428186 -296 670 .6980062238382951 -325 670 .527313993304457 -359 670 -.757055370570831 -366 670 -.5304641481314535 -386 670 .7397691199039717 -387 670 -.5224585191231932 -388 670 .5763503067040655 -395 670 -.1547018988843395 -409 670 -2.062979582706677 -421 670 .40621360980034593 -445 670 .0401316960610611 -474 670 .8710063742719357 -477 670 -1.9921430784210308 -491 670 -.7672621309447243 -497 670 1.4274431737511848 -510 670 .6493895723493132 -511 670 .19017909790671794 -518 670 .3136524496809225 -522 670 .43648854031265805 -524 670 -.4949191897161488 -526 670 -.06064099699700226 -527 670 1.9146220558571136 -537 670 .7913955291380398 -552 670 .398425396101695 -565 670 .8075657896199092 -576 670 .2859886208320608 -586 670 .8733632946377833 -591 670 .070046538410935 -597 670 -1.3216022816537807 -600 670 1.1526367885499575 -618 670 .05960538536481941 -642 670 -.5240978377363366 -648 670 -.4578438283183514 -662 670 -2.3407759721684025 -682 670 -.004709006840587929 -686 670 -.5515657266770896 -698 670 .6342217755794023 -712 670 -1.051373543817011 -733 670 -.4051053616317454 -734 670 .7030320785901611 -737 670 -.7690575372581108 -750 670 .34095000169186734 -753 670 .38712465018723163 -754 670 -.29182431896812555 -758 670 -.9069699301426408 -777 670 -.41327297244809297 -793 670 -1.0971447161520225 -840 670 .06108156515361412 -846 670 -.5103067424088193 -865 670 .33648093433778825 -869 670 -.20957291439384945 -885 670 .11114988220070282 -894 670 1.027622775209049 -898 670 .38621108519041536 -908 670 .4310979353255685 -909 670 -.507852131368925 -916 670 -.7177841397165124 -928 670 -1.2299832883986261 -932 670 -.8792519190594532 -948 670 -1.3788118242363097 -950 670 .14425750452700287 -957 670 -.044810313996836854 -959 670 -.7231800788031982 -979 670 -.5086595436221133 -999 670 -.01120511617166374 -2 671 .06619705228409795 -5 671 -.09948577639210734 -12 671 -.5942114929623505 -20 671 .9274403325324795 -30 671 -.15159951128442845 -42 671 .3362207255665029 -49 671 2.4596164916967287 -66 671 .41429266895269773 -71 671 1.086383264980323 -74 671 -.987610633267262 -87 671 .4713134209707692 -90 671 -.5385948639281614 -91 671 .5495298292171223 -100 671 -.6000829799703508 -133 671 -1.9197252324339473 -135 671 -.6267050627752879 -158 671 -.3738855444981359 -161 671 -.8343635338587891 -169 671 -.897440691762897 -174 671 .440350646744804 -195 671 .07225785196907948 -197 671 -.9133428741024079 -203 671 .7559158575824922 -211 671 .6452092136599902 -220 671 1.7973315393468192 -231 671 -.6637068691266389 -237 671 -.36764134341923094 -241 671 -1.230593459873258 -248 671 .976317238976043 -249 671 2.214192758773283 -252 671 -.528909393477652 -269 671 -1.144118867945827 -277 671 3.1783016719015826 -286 671 -1.0778534586659703 -289 671 -.8302545561451663 -295 671 1.0038301821219637 -301 671 .04838333598268339 -311 671 -1.9732120880166093 -313 671 .4762127822092235 -314 671 -.2397406394876622 -328 671 .05284622480896893 -329 671 .5110377335108482 -338 671 -.17583310936849367 -343 671 -.5070111408081138 -345 671 1.0429882242033108 -348 671 .15112508401657151 -349 671 -1.3013374857139826 -354 671 2.291914635540537 -355 671 1.5774268078173763 -361 671 .12224572888808599 -365 671 .7770486738685338 -370 671 .20218653588940436 -384 671 -.27490592016961907 -385 671 .02972527652873483 -404 671 -1.1829954380707381 -414 671 -.5685087298750161 -423 671 -.26026755137067353 -438 671 -.7447248432091768 -465 671 -.61756363055534 -470 671 -2.272628523015848 -486 671 .0006858932207898768 -491 671 .5531740784371956 -518 671 1.0278904188175693 -525 671 -.18040733962991218 -550 671 1.6098059863209542 -565 671 1.8039426840788586 -572 671 .30534148871270933 -579 671 .9767393077272559 -606 671 .2746112518374562 -617 671 -1.7737607854230109 -622 671 -1.035591085175498 -634 671 2.9997578684797874 -641 671 -.3653081223731943 -643 671 .5250964592984422 -648 671 .16474618514608932 -657 671 .848680264408788 -690 671 1.1237448106757486 -698 671 -2.9493675827066927 -701 671 2.210933344923662 -703 671 -1.1870809083944218 -712 671 -1.3082795097897728 -729 671 .6898720882062733 -730 671 -1.4439539720452004 -736 671 2.170918425312644 -743 671 -1.8943915837652188 -744 671 .2660842397513604 -754 671 1.250435656027422 -764 671 .5695873293836458 -795 671 .7423135461296185 -796 671 -1.655517990487639 -803 671 -.11306144652810221 -826 671 1.1636737574668223 -834 671 -.001617770468772331 -873 671 -2.1966980744142783 -881 671 1.034090250214536 -896 671 -.9966398609257029 -904 671 .5371687596574244 -906 671 -1.0707373450303992 -909 671 .18203014071110935 -912 671 -.18545320470769552 -921 671 .16504970874658303 -932 671 .4885552744513738 -933 671 -.5733143070329155 -938 671 -.08107243036953724 -968 671 -1.488810403921207 -986 671 1.772031320726846 -990 671 -1.948453558182659 -9 672 1.6976484108699772 -20 672 .044689610129582336 -56 672 -.21590150138298558 -68 672 .2656973697362631 -97 672 .708088832435715 -121 672 -.6616090382114819 -134 672 .4553282709611397 -138 672 -2.096847614603579 -153 672 .14812163152876154 -166 672 .8263099346639142 -182 672 -.10757264722822671 -183 672 -.6113896727708344 -186 672 1.848435498322216 -197 672 -.7602845809666764 -198 672 1.0300984292185738 -202 672 .636954051689634 -210 672 -1.025559614275921 -219 672 -.6550866046836589 -221 672 1.1499024824737087 -229 672 -.1144837931565531 -250 672 1.2624789176625635 -268 672 -.7984674289218573 -275 672 .18025515803988146 -280 672 .1807431827125522 -282 672 1.3053152577515776 -284 672 -.25714707516690155 -317 672 -.366733680546352 -327 672 .9564784143668529 -335 672 -1.1058841916289435 -347 672 .5621966329199414 -358 672 .20354646859582776 -365 672 .08657950854829492 -380 672 .46042959631851677 -382 672 .32349853402003736 -385 672 .31658924375190656 -394 672 -1.5093324589396642 -404 672 -1.268510658390358 -410 672 .3212223138395429 -412 672 .14419751005996087 -414 672 -.6574879242108284 -425 672 .10205780592005148 -430 672 -1.785520952964013 -437 672 .2756064304175975 -443 672 -.14334138042656797 -446 672 -2.1100544231934135 -454 672 -.21845058254564645 -455 672 .1820430667544668 -464 672 -1.4998161595267094 -468 672 -.14638211201180257 -470 672 -.7738530472918961 -501 672 .405606308747192 -542 672 -.6309324126584274 -544 672 .24340489166415333 -565 672 .9132054309004858 -579 672 .45093861858938605 -593 672 .1951459230991288 -595 672 .12352895940934511 -600 672 -.3348380924729919 -607 672 -.3432963407780624 -610 672 .22149637675297257 -616 672 -.3082996127081859 -629 672 .8586485713635404 -639 672 .4045170764000342 -668 672 -.4406540090840395 -684 672 -.19696515249591492 -691 672 1.1930447989488937 -699 672 -.6942552743713928 -700 672 .09877348318951483 -710 672 -.3283450268110776 -714 672 .15060343520316538 -724 672 -.6884211795231063 -732 672 .9305390480669947 -746 672 -.9153224466631483 -750 672 2.0260138992567582 -752 672 -.07422580722959796 -754 672 .2330456706416816 -755 672 -.46890452242223624 -760 672 .29357294489205443 -765 672 .5953129060111261 -766 672 -.6671261896866986 -793 672 1.263430267327521 -801 672 -.22742971799752493 -803 672 1.1687099539970254 -808 672 -1.0211243177755758 -814 672 -.7221345136247775 -815 672 -.45235094527432645 -824 672 .0465704280506965 -829 672 1.0991334555479366 -847 672 .8848272809241002 -848 672 1.3540998933416142 -849 672 1.0545165555420866 -850 672 .45522039152166427 -879 672 1.3853226331031676 -883 672 .9749284067916149 -886 672 -.8842710801475195 -892 672 .39010004709469936 -904 672 -.6462300741042425 -912 672 1.3551063046728915 -938 672 -.34840723751882785 -943 672 -.10662512827376336 -947 672 .02472079022261922 -948 672 -.3006261168573261 -960 672 2.0023379174736595 -964 672 .2501006149927154 -969 672 1.2142630233370801 -975 672 .7253498800397316 -982 672 .8354783769238795 -987 672 1.245552760042738 -989 672 .5376446602611166 -995 672 -1.32409522480353 -32 673 -.30355531402666547 -36 673 1.4417585136431574 -39 673 -.786445482532055 -41 673 .798062619157071 -51 673 -.6916006060173168 -54 673 1.1765861902993573 -72 673 -1.9701700616517748 -80 673 -1.2777651001127468 -81 673 .053748753452272396 -86 673 -.12956260145341741 -87 673 .7338257465172532 -94 673 .6265538953986111 -101 673 -.43693530386539653 -117 673 1.7179986774366944 -133 673 -.07327778886935302 -134 673 .1855160078948911 -144 673 .9116028979166565 -150 673 .00863281698915283 -158 673 -.6703006899972999 -159 673 1.528803921269106 -160 673 -.26060360766298546 -164 673 .37058751858380745 -177 673 1.3817759891519836 -187 673 -.7572193681445514 -201 673 .8354822403659715 -225 673 -.28246514637865744 -228 673 -.7652449683995266 -235 673 -.2202502060402663 -236 673 -.7319596262875548 -239 673 .501968987653852 -262 673 .4768750474226813 -267 673 -1.8207776368869881 -278 673 .1539325242867308 -292 673 1.195126349647491 -320 673 .4247227421947817 -337 673 -.32624912479086504 -367 673 1.4441831954671818 -396 673 -1.6973017186137447 -398 673 -.5899461264437796 -409 673 -.0574474538165201 -410 673 -.2877360484090693 -412 673 -.853537762941641 -421 673 -.6783080656967305 -434 673 -.0718219164759967 -448 673 -.08983593253819738 -491 673 .3218492232531165 -501 673 3.171004075012882 -518 673 -.1405521513872934 -523 673 .593225626657304 -536 673 -.35425508094590435 -546 673 -.7776286868373334 -547 673 -.5406319820321246 -558 673 .17056669645270736 -594 673 .6628537582255143 -597 673 .7321776897654019 -598 673 -.21739073205934134 -606 673 -.30400876089917017 -618 673 -.12377575924788302 -623 673 -.8447392414335496 -651 673 -.745244516401097 -653 673 .2242167361701292 -656 673 1.0999045158062215 -658 673 -.07118633593917392 -659 673 -.10989950026459293 -668 673 1.1952421334158114 -676 673 -.11877857569655151 -684 673 .033313195172655304 -686 673 -.06653069220811864 -698 673 -1.299914554903429 -704 673 -.595045550757264 -709 673 .18370173137896145 -726 673 -.6400323357930127 -740 673 .4474910090204637 -742 673 -.9721193662813119 -744 673 -.9313440176756039 -747 673 -.7928869529767466 -754 673 .4508135965634276 -760 673 .26038462243563704 -768 673 -1.1132636469547974 -777 673 -.05240716021116322 -784 673 .21869798959467104 -794 673 -.06837964421653442 -795 673 -.8381567310971945 -801 673 1.1187632971511094 -806 673 1.1681904685607765 -813 673 -.5241733637587273 -836 673 .1518734365837836 -838 673 1.7904845630297965 -844 673 1.8726764603611734 -845 673 -.23037481764722811 -852 673 1.1615200400873156 -889 673 2.410730511285447 -893 673 -.8586030363930832 -898 673 -.5822657804718981 -901 673 .10590555111398756 -924 673 -2.659527268060999 -937 673 2.094240256335315 -945 673 1.4801475406288738 -949 673 -2.0194300641384504 -952 673 1.2067251509257853 -963 673 -.1476837574006401 -964 673 .09056392123721305 -965 673 -.3750809632097423 -987 673 2.3712448269882023 -991 673 -.861815885851908 -994 673 -1.0183827031838573 -1 674 .8473523079514697 -13 674 .08356399805156023 -29 674 -.5393394379289613 -36 674 -.6960211794517283 -56 674 -.07116577011597139 -77 674 .927515608361871 -80 674 -1.1101951947577602 -86 674 -.32513242107763785 -98 674 .7480132117749604 -138 674 -.20629579172378876 -139 674 .3452884629170531 -149 674 -.7013799370217845 -153 674 -.24918173913457842 -177 674 -.10193261628281053 -199 674 .8116954873223523 -206 674 -.27369032737078347 -232 674 -.8843194358233855 -234 674 1.5558115311452907 -237 674 -.3633744861267486 -247 674 .23886427358318044 -250 674 -.396484287779456 -253 674 .047325422205947466 -263 674 1.2044773082047915 -292 674 1.2058587294568108 -303 674 .6586432405589716 -322 674 -1.0566222991802878 -337 674 -.96382539333491 -345 674 -.37387841442164577 -348 674 .01010788284038805 -353 674 -.17496333156516974 -358 674 -.42318621533721357 -368 674 1.7301180722882799 -369 674 .13075712717815316 -371 674 .2815487612082517 -390 674 .21183900930880215 -394 674 .16689254817619248 -404 674 .13294200954397928 -405 674 -1.1526608818424386 -412 674 .8491225528304013 -421 674 -.4303146095538615 -426 674 .01573647574513562 -429 674 -.21770177722245518 -432 674 -.06166233938187306 -437 674 .6980330485230173 -440 674 .6198315245248475 -457 674 -.3709099388212135 -458 674 1.4347228126712277 -471 674 .22837720290775243 -495 674 1.3225580041743532 -496 674 .5235045410437207 -498 674 -.7697016422850402 -533 674 -.24045489616488017 -540 674 -.16167214342533873 -542 674 -.7923590804101623 -555 674 -.25916722424242267 -562 674 1.2589000379963353 -568 674 -1.515059078961568 -572 674 .13608798013211934 -575 674 .08250745785918306 -584 674 .11230421403681429 -592 674 .3567197115778487 -608 674 .17346147848911336 -612 674 .8866482924980615 -613 674 -1.1061099706729742 -628 674 -.9016768145803051 -633 674 .26235266974629023 -656 674 -.9801336760538667 -660 674 .379966671914967 -687 674 .5226529380397722 -690 674 -.3139852466318076 -723 674 1.7028896260762405 -730 674 .5240547444724979 -732 674 .5983175322101455 -734 674 -.39356259453686104 -736 674 -.06045698750610668 -745 674 .18738543604099264 -748 674 -1.0527638498471645 -752 674 1.0767689700823546 -758 674 .6265088715896019 -759 674 -.42275813428365083 -763 674 -.22095667545709405 -767 674 .1879264633788894 -792 674 -.3443423085712592 -802 674 -.2221246572933293 -817 674 -.3909239374311293 -818 674 .7058910446446717 -826 674 .229681984705646 -829 674 .05753975365826958 -831 674 -.048682481433332814 -836 674 -.24426603376271508 -840 674 1.024018395463788 -848 674 1.3991466646588548 -852 674 -1.3244087649626661 -858 674 -.2701884682993615 -873 674 1.178477181403926 -885 674 -.5092445094461154 -892 674 -.14663778908022065 -905 674 -1.2055085800128114 -909 674 .0976216922067203 -911 674 -.9301684843452491 -916 674 -.26935287076894887 -923 674 .563785871862082 -938 674 -.04252501866909847 -948 674 .08025201204483244 -950 674 .3698608436584357 -951 674 -.6325457091471105 -952 674 -2.017675511635268 -971 674 .5263419631787637 -983 674 .0239104483493546 -984 674 -.7387811334609338 -986 674 -.33806429216668005 -55 675 .5313687713978652 -68 675 -.023578311429250473 -98 675 -.10972879825556506 -118 675 .5655768360011599 -122 675 -.5117858707691816 -135 675 -.5718979630722393 -145 675 -.3271020737328657 -158 675 -.7128029663237709 -170 675 -1.5610788546405805 -177 675 2.0789697705280292 -187 675 1.8757629387416703 -189 675 1.238474215605273 -194 675 -1.476048379619625 -198 675 -1.6373704108475322 -199 675 -.4560934207254098 -212 675 -.6980241823824299 -237 675 -1.3703048510405702 -246 675 .3937576975101202 -265 675 -.35767535364810793 -283 675 .4358938720585679 -284 675 .41024759600058125 -299 675 -.5156417235528232 -312 675 .39243591818814244 -329 675 1.2657511575949185 -335 675 .6321481910295359 -351 675 1.6346141054928873 -370 675 -.28643980213632175 -377 675 .5594466949140374 -388 675 .1512318894989263 -390 675 -.5308521883159698 -414 675 .19868960790962387 -420 675 .4517613706360987 -428 675 1.5140451440558773 -446 675 1.1462236685030194 -447 675 .4345917351198737 -449 675 -1.2557383968263875 -454 675 -.6181841189116242 -467 675 -.6869994605336942 -471 675 -.5867800952858828 -475 675 .546080966512955 -497 675 -.49055595224247794 -509 675 -.33809167823301245 -515 675 -.4038675614574784 -551 675 .7244051410674459 -564 675 -.518912593695343 -573 675 .2460703095690441 -577 675 -.4795176371006237 -579 675 .9392734485916765 -606 675 -.6168521772147645 -610 675 -.9420080006572753 -613 675 .7930579424613233 -618 675 -1.6070149538481635 -622 675 -.8888511777593882 -623 675 -.10144547995551677 -628 675 -.6381525797382182 -629 675 .22768972669220094 -652 675 .5113662612313753 -663 675 .6572157763465357 -664 675 -.7036723469831899 -692 675 -1.217835540036971 -701 675 .41563718427098056 -704 675 .16786304254662854 -706 675 .7220664139408941 -720 675 -.44084431899769394 -737 675 .056947131097880785 -745 675 -.32982086849029035 -750 675 .9377770874210964 -752 675 -.8710407718363197 -754 675 .8461185386910827 -758 675 .9218492638066738 -766 675 .28204787799474057 -783 675 -.41725901950804484 -786 675 .07779974972005482 -787 675 .2426440088134717 -788 675 -.6759344388311238 -805 675 1.375906845713742 -809 675 .7274987875832797 -819 675 -.6366427940283056 -821 675 .38192334484751744 -843 675 -.04616812360141773 -855 675 -.7227034945277019 -856 675 -.0020977477818279605 -867 675 1.1536184385392825 -868 675 1.4569460898803563 -873 675 -.2835326558457938 -875 675 -.11135462191453467 -879 675 .11215374246062779 -893 675 .6885201477936168 -895 675 .9680222396045707 -898 675 .2519124964604048 -917 675 -.06586827384768623 -958 675 -.8812453284858649 -959 675 -2.2894964886346467 -970 675 .3883996108670168 -973 675 .3256831790637952 -9 676 -1.0483942773367798 -15 676 .3565645097534325 -16 676 -.9663484016647853 -22 676 -.5035063450342815 -25 676 .1292824138466963 -33 676 -2.3409794329040032 -34 676 .012674108341232192 -44 676 2.9439940240928846 -47 676 -.6375114609088668 -50 676 -2.286707391237303 -51 676 -.38641500989660915 -57 676 -1.8430227240269994 -76 676 -.7920231627053458 -88 676 -.49090552754682254 -97 676 .42712430097730963 -113 676 -2.1810912083439216 -114 676 .16346433837980506 -116 676 .2138973217830035 -121 676 -.9189813891838574 -149 676 -.46998324312422746 -159 676 -.8874378544051977 -176 676 -.335871614740107 -185 676 -.07513688191150905 -195 676 -.0343294808787598 -198 676 1.1920642928521819 -205 676 -.6281803045045672 -222 676 -.1622109773268848 -236 676 .12648456175980743 -240 676 .2722529559822999 -241 676 1.0045356973326034 -258 676 -.9211532604981645 -263 676 -.8756319507525064 -278 676 -1.9883187577584032 -289 676 -1.9755793419914132 -296 676 -.9356758653607189 -310 676 .005510484283134026 -315 676 .1966265397895075 -320 676 -.7187129005175876 -336 676 -1.1665151528022681 -341 676 -.6317384392323299 -358 676 1.1729378972238584 -362 676 -.37030943776137837 -368 676 1.5488906517609053 -371 676 .7623086674062212 -373 676 2.8178946890932877 -384 676 -.4226181869956016 -391 676 .3547496492949308 -393 676 .6143380375112066 -395 676 -.8971469209167224 -417 676 1.5669906301519303 -441 676 -.7451908774254578 -470 676 -2.342606462575641 -476 676 -1.2674649637165787 -484 676 -1.8786209321349103 -485 676 .1180952633026856 -496 676 .15253906308430815 -497 676 -.6539826687127139 -510 676 1.9825589573944866 -511 676 -.6765628445057134 -519 676 -.0029847533150937702 -520 676 -2.34980220330782 -526 676 -1.0177222595041682 -527 676 .8952413386178363 -536 676 .4709894095597671 -544 676 -.2334437951352985 -548 676 2.5128484260191284 -566 676 -.285033589216878 -567 676 -.5299199664541482 -579 676 .6219359072854819 -582 676 .19656020067479615 -599 676 1.0809623040820984 -606 676 -.8344217390916191 -607 676 -.18525422694604565 -613 676 -1.8541782807352063 -622 676 .06498551961278196 -623 676 1.9037589457587838 -630 676 .9727042816766388 -631 676 .6393130913700947 -638 676 .2358386785447596 -655 676 .30335601181449867 -672 676 -2.2203794733205484 -686 676 -1.2568152523468334 -689 676 -1.4746410614790766 -707 676 -.05492716594054632 -710 676 1.4852636887423494 -750 676 1.9034669767524193 -784 676 -.4127550354479034 -797 676 .4755438170445724 -800 676 -.7518388624022234 -806 676 -1.3338918646117495 -811 676 2.492051316506818 -817 676 -1.989104993420503 -823 676 .3512725598576916 -841 676 2.469252774053706 -847 676 .5265911015152873 -865 676 -.33523069821697726 -893 676 1.5370461365754569 -907 676 .10982510808203785 -923 676 -.8317198300206029 -926 676 1.6843144755009274 -931 676 1.8246330943827502 -947 676 -3.801528622358978 -958 676 -1.9005281858640213 -968 676 2.7582066274077506 -973 676 -1.0047874091490911 -975 676 -.27816754635350277 -999 676 -.5176779862408611 -4 677 .36437584213950713 -96 677 .5631589985541798 -113 677 -1.7543187623262588 -134 677 .8934261285002429 -138 677 -.1796072266131607 -144 677 -.725712914042923 -154 677 -.984123171335756 -158 677 -.8546270196002141 -180 677 -.16561540682568254 -181 677 -.5629737612059184 -194 677 -.1427328107110548 -203 677 .8941419092217726 -208 677 -.12635840506932805 -214 677 .9088070574651377 -219 677 .9430684409410485 -236 677 -.2086934476923394 -240 677 1.8410542301640356 -258 677 -.6713427216931488 -282 677 -.9943014810182765 -292 677 1.2647029695324825 -306 677 1.3075626806358824 -309 677 .0874556233149084 -310 677 .02548099608365467 -318 677 -.9242295381273182 -329 677 -.9813812054985455 -335 677 .3928277942336309 -343 677 -.9148636686429721 -358 677 .26745737621700466 -363 677 -.24405820578505694 -374 677 .0372795499909119 -400 677 .4109310885289802 -422 677 -1.7470179013545135 -435 677 .3434154441692555 -451 677 -.4410926624248447 -457 677 .2933782703652378 -461 677 .6704564166408464 -473 677 1.0200585251713012 -480 677 -.6089283474263524 -502 677 -1.1697315465172526 -511 677 -.40284164601368266 -525 677 -1.311188063682694 -529 677 -.8646580809218258 -579 677 .8450831657704688 -584 677 .17543680356323618 -612 677 .999587459014331 -614 677 -1.203484701132445 -620 677 -.28175698448455516 -625 677 -.6398432808386243 -644 677 .42932836881492886 -647 677 -.2566331187227744 -651 677 .40445697144672366 -653 677 .8657506050109325 -691 677 -.26374896693256794 -695 677 .47594827356606134 -716 677 .1261366161150592 -732 677 .7150830204555393 -752 677 -.45177474232595416 -762 677 -.23043357743049245 -778 677 .11704864703142748 -780 677 .1672119741399573 -786 677 .8323211459262725 -820 677 -.9046020004017602 -842 677 .39424131801182344 -845 677 -.08698658069010759 -852 677 -1.3915353498698566 -856 677 1.069081312596024 -863 677 .21486796487911042 -878 677 -.7590429878059903 -888 677 -.9598253580931406 -918 677 -.41897575282746913 -927 677 -2.069382506041484 -932 677 .6210906612726247 -940 677 -.11905925680291811 -941 677 -.38204179229640356 -946 677 .2698905016303276 -953 677 .7638526519234864 -957 677 -1.2492246341382562 -958 677 .17572983254444224 -962 677 -.5351767545253169 -972 677 -.3828332338653869 -976 677 .9617698587383473 -2 678 -.0890868841514599 -5 678 .788369078504309 -9 678 .4650426786398333 -15 678 .3460163096340762 -29 678 -.33711844384776196 -38 678 .8315462565292233 -44 678 1.0028522835625502 -64 678 .5076865948434786 -69 678 -1.1260674571451537 -71 678 -.13354186192008966 -79 678 1.1771275414583338 -83 678 -.8765743568894514 -88 678 -.1579524096312543 -91 678 .8525894820787903 -93 678 1.5529978710135657 -114 678 -.5588920868690234 -130 678 -1.0999952751254352 -131 678 -.07088971724939414 -133 678 -.48703914804988235 -142 678 .23931436064329578 -147 678 .016708064879281496 -176 678 .1502994888912963 -180 678 -.8589220705862659 -194 678 -.9650848513574671 -222 678 .9549616066774158 -223 678 .589145778430729 -234 678 -.013229091865392 -246 678 -.4687742053308357 -263 678 -.0856760794252559 -278 678 -.6062144849957342 -289 678 -.864407679608415 -294 678 .8314576049431771 -301 678 1.0947220891930032 -309 678 -.4316754057517799 -359 678 1.8121818318586298 -370 678 .33199319111110537 -374 678 .4456540058576047 -388 678 -.0649558738767235 -400 678 -.3949704003121386 -422 678 .8647707675696318 -429 678 -.1477048950202577 -434 678 .31910239493638526 -459 678 .9126866445686348 -464 678 .48158660810540777 -468 678 -.3895923725836943 -477 678 -.17980700030031155 -489 678 -.31236294486181837 -498 678 .6319237910558471 -503 678 .8392987500397882 -505 678 .7782174242407731 -519 678 1.0686992967013618 -561 678 .6652776455116851 -566 678 .3638567439955533 -574 678 .010724023136250219 -579 678 .6496948170848991 -583 678 -.009184989515531358 -601 678 .38986110750828085 -603 678 .13463463834429285 -612 678 -.9296278022021275 -631 678 .5282267897023589 -639 678 -.06510363424680164 -641 678 -.6083409283882248 -647 678 .7888694702455701 -665 678 -.6579796745963272 -667 678 -.3627675518839867 -672 678 -.39994715141614556 -675 678 -.8205022034453489 -676 678 -1.191338298931872 -683 678 .1648933676545836 -687 678 .8441995230626704 -694 678 -.8877001451769512 -717 678 1.027333104078879 -722 678 -.8314089914149536 -732 678 .5273499587804097 -739 678 -.11371044053440575 -743 678 -1.8203402932788275 -757 678 .8822414577902432 -761 678 .03715195189996157 -762 678 -.2118763850366216 -766 678 .20080892739283723 -786 678 -1.0171352379922203 -791 678 .3553292377890309 -793 678 -1.25222721578741 -797 678 -1.1557613623089522 -800 678 .5677537610340524 -801 678 -.33412223230198845 -803 678 -1.0321940431382473 -809 678 1.1749135340605334 -822 678 .05002904426366428 -840 678 .1770421256669733 -843 678 -.008652288222528233 -871 678 .25098799909570346 -875 678 .3070224734919595 -884 678 -.19865454191318777 -885 678 .6203177107368267 -889 678 1.2319304561806463 -904 678 -.022443190952572162 -907 678 -1.718798201125275 -910 678 -.7360496188043458 -923 678 .604588711640928 -931 678 -.14186289405394334 -936 678 .4134433331183741 -953 678 .33770202102792723 -971 678 1.5032155071436861 -972 678 .7533288389592734 -973 678 -.4605188322707039 -974 678 1.1095280627648478 -976 678 .42993709026833676 -986 678 -.7097984109403372 -4 679 -.9245015582028534 -12 679 .20921092248014522 -25 679 -.21419418740392665 -32 679 -1.1373237810640393 -47 679 -.8648798806862245 -56 679 -.9478046393412468 -70 679 .05278470851974733 -76 679 1.880016169448117 -86 679 1.2248721830991098 -103 679 -1.2625864770561224 -113 679 .16414330714835676 -133 679 1.1217901117843907 -150 679 -.3325223332912948 -164 679 -.31025249617114903 -180 679 -.6019909147348304 -184 679 1.1066053363354917 -185 679 -.9935126924225965 -191 679 -1.8077419215934087 -211 679 -1.6772316489388455 -235 679 1.2034967476262066 -240 679 -.8627973848345198 -241 679 .9979530026471725 -255 679 .5785772025057085 -262 679 1.5411043361204997 -268 679 1.4656194951462158 -281 679 .8391946012001266 -294 679 -.7181220988448608 -298 679 .12041899851010524 -318 679 .9733891416086586 -322 679 -1.0477377738043596 -337 679 -1.3180989185728356 -343 679 .9336617059561065 -344 679 -2.210613740976021 -348 679 -1.426322320466618 -353 679 -.13929780535611117 -354 679 -1.6477175223683318 -396 679 -1.0241595208860512 -405 679 -.5868429055762183 -406 679 -1.1431105192478332 -407 679 1.1364238912142424 -413 679 -.5102378829713473 -417 679 -.7313060783568224 -426 679 1.576847901500328 -430 679 -1.227223210815929 -431 679 -.4779119673740661 -453 679 .47608868695056283 -457 679 -.6512237633809967 -467 679 1.192694661099418 -491 679 -.9022510519274549 -498 679 -.4979566720178068 -499 679 -1.5997742923796965 -504 679 -3.3012351973914025 -517 679 -.2612727060221761 -525 679 1.2487541660307302 -527 679 .2996942727412638 -548 679 -2.220380806383735 -564 679 .8153152748758075 -569 679 -1.813221876211398 -594 679 .818304743553379 -598 679 -.24453555437834895 -604 679 .9559680269089448 -610 679 .3227890922655975 -622 679 .03725135935415466 -628 679 -.3872594283067041 -631 679 1.6060631384750108 -634 679 -1.1248918133399244 -677 679 -.2305723811044766 -679 679 -.12905636511851248 -682 679 .43282476642101453 -688 679 -.23084037741793423 -693 679 .0683154367201335 -697 679 -1.9776104492834405 -711 679 1.7858375898257388 -713 679 -.1508542465059763 -717 679 1.2698809240728015 -724 679 .19606184412524988 -734 679 -1.7068347062344156 -740 679 .25252202806454455 -750 679 .17886310792969184 -752 679 1.0746071265337844 -769 679 .6935188243459797 -780 679 .27052123159750896 -781 679 .029103439407585724 -786 679 -.21277179045350963 -789 679 -.5088144397493413 -793 679 -.9765170894301413 -806 679 .6313601027420834 -826 679 -1.5228478402785692 -828 679 -.19819522894260672 -844 679 -2.3904871982575058 -856 679 -.3467878636307816 -857 679 .9494101755956076 -862 679 -1.5510285370806098 -871 679 -.1472710407744858 -877 679 -.8338410337044952 -880 679 .9919271955660219 -887 679 -.97217183694906 -890 679 .7741782603222818 -894 679 .45863662503691593 -910 679 .8281627598852823 -911 679 -1.0328059716633624 -912 679 .4903983606531005 -921 679 -.8402195320342627 -946 679 -1.0431310402272098 -959 679 .3257703493775195 -998 679 .4083571236341408 -5 680 .9949519819208652 -38 680 1.6668050210017664 -64 680 1.2684625299155845 -75 680 -.2270751423896466 -78 680 -.48172386474766926 -91 680 -.2895409913168443 -100 680 .565600080483651 -102 680 -.7340569343678957 -112 680 2.0295085832070283 -130 680 -.8686268784491501 -133 680 -1.7270547088932715 -135 680 .37856780515742344 -146 680 -1.867153236331429 -147 680 -.6625588277551564 -150 680 .4381911015256918 -161 680 -.7056673443027991 -171 680 -.27234586867525246 -181 680 -1.6011239669833426 -189 680 -2.3027091377845283 -206 680 -.09435465306251868 -218 680 .6037174135673053 -243 680 .1513262953882713 -280 680 -.20467107678324853 -287 680 2.003794540103826 -289 680 -.4716216263075769 -299 680 -.3245183725095251 -319 680 1.0196918008021902 -323 680 -.7679939642514274 -326 680 1.9161853438856127 -329 680 -.7788659341804427 -330 680 .3422242560046072 -331 680 -1.0110434944196591 -334 680 .009511019036528484 -346 680 .28229827640851335 -347 680 -.07587875131758218 -361 680 1.2088449549019544 -367 680 -.9471533575712681 -372 680 -1.0187053612185804 -386 680 .4196921885177646 -404 680 .3798446726216167 -411 680 -.37806853282363984 -416 680 .003786611398119877 -425 680 2.157232577706979 -438 680 -.6597651393923033 -439 680 -.7481864471517652 -443 680 1.0737957736904784 -476 680 -1.048116272315588 -483 680 1.1850922492107694 -496 680 -.4367675138386794 -520 680 .0371963183252141 -531 680 .2199004737352174 -541 680 1.074939294718703 -602 680 -.05340819324077355 -604 680 .07692904453608432 -605 680 -.016945767886599218 -612 680 -.2862718140373281 -629 680 -1.595922655073335 -646 680 -1.4343782965015959 -647 680 -.4913336033355503 -685 680 -.08997481278020308 -686 680 -.7007038944041081 -690 680 .0014079326837327794 -691 680 -.0967585986491604 -704 680 .9228755785711106 -705 680 -1.497305272193338 -711 680 -1.2244297587567847 -716 680 -.019057064687206374 -721 680 1.0368122369743953 -732 680 2.7198146166683324 -737 680 -.7785159352798788 -751 680 .22588827189869018 -753 680 1.2499500425813053 -754 680 .4085690776940736 -756 680 -2.53467613402327 -763 680 -.07757178333004731 -764 680 1.0964505976693864 -767 680 .2518071097537732 -780 680 -.08178852383558158 -782 680 -.6453678764895711 -787 680 -1.3057402851938202 -795 680 1.6075297017816532 -831 680 -1.6564441927897673 -835 680 1.4304388043642733 -842 680 -.15603037636756348 -860 680 -.3735159059806712 -867 680 -1.3180031343083685 -868 680 -1.4988233470528614 -869 680 -.44980805245939715 -877 680 1.1959402307971718 -881 680 -.5767616725542667 -907 680 -1.9499084527363206 -920 680 -1.249249063156119 -944 680 1.5439237579065248 -948 680 .408699111357564 -962 680 -1.0972020816996277 -966 680 -.4283131148066815 -967 680 -1.1233487521485435 -989 680 1.8168374658587316 -990 680 -1.4259495191699663 -994 680 1.7840476416007276 -1 681 .4522186528887252 -20 681 .7209334676948189 -23 681 -1.1159539132558094 -26 681 -.6411505341027183 -32 681 .7415579510989561 -40 681 1.2088438830784631 -50 681 1.3633646954284262 -62 681 -.6554382514289132 -65 681 1.1234723191367952 -67 681 -.4375794106348115 -75 681 .8778428108658766 -81 681 -1.345736944710756 -82 681 -.41018068029118715 -83 681 .37377449665662354 -92 681 .16037744081572222 -110 681 -1.4668603860577736 -123 681 -.40530520557753275 -156 681 -.13820565685316166 -165 681 1.6352029090393925 -170 681 .23315850172337177 -173 681 -.06738572004430235 -183 681 -.42548278369672493 -194 681 -1.168992847971728 -198 681 .7248270202665643 -202 681 1.1557867489608615 -208 681 1.1730153489507393 -214 681 -1.1249855449482182 -216 681 -.004050902113062013 -218 681 -.5464455497294242 -249 681 2.525048442977098 -270 681 1.1537436024916488 -273 681 .7925424267090819 -275 681 -.7740636790740466 -287 681 .625534371546286 -293 681 -.46022873337833425 -298 681 .9269328737666656 -314 681 -.45464694675125433 -315 681 1.437355875827075 -316 681 1.9706715470283 -322 681 2.9870395498402913 -326 681 -.5935067061057685 -346 681 -.8871889889385417 -347 681 .8532508538972178 -349 681 .2758184606159307 -351 681 .10978458077103109 -382 681 -.33536270901920257 -415 681 .8069313036736403 -426 681 -.8514499694323627 -435 681 .9264961261998511 -438 681 .26051671540004495 -440 681 .4086609076019329 -453 681 .4553960005031581 -461 681 1.4556451742909258 -464 681 -2.1207003546961594 -465 681 -.3361909572883596 -481 681 -.2070528205912474 -486 681 -1.9052803262778923 -492 681 -1.1495221900871535 -531 681 -.20908428392648404 -533 681 .45267284157426235 -535 681 1.7668723300949019 -536 681 -2.7787577849359923 -546 681 -1.5811203031614185 -555 681 .49131632929888236 -557 681 1.1203234408292644 -564 681 -2.8994503634504962 -565 681 1.9875255314623603 -582 681 -.3738490437953039 -588 681 .11938807761970756 -595 681 -1.058926713662936 -597 681 .17963788160446853 -627 681 -.9231299238708741 -632 681 -.1787973125785204 -651 681 -.14070733230005633 -658 681 -.4105273542742859 -665 681 -.6793967980576119 -686 681 -.8014764560490126 -688 681 -1.6868890274634316 -696 681 -1.5229691332435817 -704 681 1.1418850642178782 -728 681 .3845008663774451 -729 681 -.325057407509221 -733 681 .5609287559882351 -737 681 .8885675956777317 -739 681 -.5330954121420202 -745 681 1.1048989751919611 -780 681 -1.5798295601929593 -796 681 -.6612179269785369 -811 681 -.17074663192113865 -812 681 .23050395836570275 -840 681 -.8244031037001271 -842 681 -2.3831267591055387 -865 681 -.7718525178353031 -873 681 -1.4534956350170867 -940 681 -1.0632521091072247 -941 681 -1.1767699835607848 -948 681 1.5133953876103439 -949 681 -.337311440451244 -952 681 2.318071448777632 -966 681 .3671604882745166 -996 681 -1.4087393542821112 -4 682 -.48584142619313747 -9 682 -.29442095583843403 -67 682 -2.264947465214195 -71 682 1.3391205790036782 -72 682 -1.7185522526524615 -81 682 .8814119651437734 -82 682 -.44734367668339403 -84 682 .10684347845612943 -89 682 -1.7019274223483838 -118 682 .6507350824112772 -136 682 1.0388434508198063 -147 682 .8656547122451015 -156 682 -.22602133356247658 -160 682 -.5689590575517918 -163 682 .6416968794468535 -176 682 -.48920958162681233 -184 682 .6752197707562693 -189 682 .8242787875398799 -201 682 1.7886123536668603 -204 682 -1.2687903983884938 -216 682 .6925893102891751 -218 682 -2.1393310758553667 -229 682 .6952391275736189 -250 682 .7841904104727717 -266 682 .4325103528694232 -268 682 .738457316657558 -286 682 .44602922192940847 -289 682 -1.1287285322627472 -300 682 -.2970852580624441 -314 682 .5743620944381587 -325 682 -.06106375706786158 -331 682 .38586713815303614 -342 682 .5589226713537389 -343 682 -.06486043156500443 -344 682 -.6568276506317346 -357 682 .23141174113663582 -362 682 1.4447075131176976 -372 682 -.8354033532536964 -395 682 -.07192848607821664 -409 682 -1.2819650766361266 -414 682 .3361535307340199 -425 682 -1.6508817463799856 -439 682 -.040279708972057994 -441 682 -.7065235445002196 -442 682 -1.407286623229112 -462 682 -.23758185178529945 -476 682 .07097002190319299 -486 682 -.6544017818783275 -489 682 -.2415147721523739 -490 682 -.171092792229178 -503 682 -.08691877556178951 -508 682 -1.5398477005452356 -519 682 2.3765568934017556 -547 682 -.16916711424008682 -553 682 .5424241562988831 -557 682 1.2854654038831137 -559 682 .7799540922454293 -587 682 .3444624757640167 -602 682 -.991684664387151 -619 682 -.5136335951887752 -628 682 -.8621928290042069 -647 682 .8759032161621723 -652 682 .19733528560133912 -658 682 .7380090555035039 -662 682 .7512642247866463 -671 682 -1.0371878499932565 -686 682 -.3600010054779238 -698 682 -.6647851117610373 -706 682 .11274025978021018 -715 682 -.7894975760701313 -763 682 -.3677629223568177 -776 682 .4544799037769947 -783 682 -.4435856800966142 -792 682 -.5764249594709823 -796 682 -1.1760024126351993 -809 682 2.1888183453204824 -810 682 .7000744246801541 -813 682 -.9667387559733956 -825 682 2.1171193537767867 -844 682 .6807537261177138 -848 682 2.4717761643274128 -869 682 -1.737320882852619 -871 682 -.9655709431942976 -873 682 .6810065947383219 -874 682 -1.0674186240603503 -894 682 .9304759032881358 -904 682 -.3085829805758692 -907 682 -1.7211704307957372 -921 682 1.2421563123963155 -922 682 .003153219258306028 -926 682 -1.277432515221898 -932 682 -1.4502166821388836 -934 682 .9615280253328784 -943 682 -1.6877291372248246 -966 682 1.0550723527123085 -968 682 .23654125689655253 -982 682 -.4007852849281883 -990 682 -.5206711585625292 -28 683 .19585016554255177 -43 683 -.3967778364374353 -49 683 -.24067772761357387 -51 683 -.29230649394568975 -55 683 -.2673795971294374 -60 683 .48008086020415497 -66 683 -.4235345871136419 -75 683 1.4900434662094508 -76 683 -.22650109713027905 -77 683 -.8996738612484 -86 683 .07352704143831695 -88 683 -.015012498448911976 -93 683 -.6514434539266404 -94 683 .48833111345571933 -97 683 1.1487319068131028 -102 683 -1.0185556234715882 -119 683 -1.4895362407782533 -122 683 .1552719355449681 -123 683 .09426165374523637 -147 683 1.6858659140580365 -190 683 .40187289990748765 -208 683 -1.0943852102111737 -211 683 .43110740979246936 -215 683 1.0207674917551095 -226 683 .35320395912848646 -281 683 -1.2393142353985849 -300 683 .9289045336186929 -302 683 -.6049332062398691 -312 683 -.2522106292604884 -340 683 -.6790995614035985 -355 683 .37388115145292 -362 683 -.5274490582568105 -368 683 .969437312293662 -396 683 -.20462344889218442 -397 683 -.12636895324879527 -416 683 -.4456660414896383 -420 683 -.147730918009291 -428 683 .7897353846376216 -432 683 -.2153174863583099 -433 683 .10460916425824554 -436 683 .7054214655657896 -438 683 .11179988005182957 -443 683 -.037458013379308264 -446 683 1.074876181090886 -452 683 1.05827269998648 -487 683 -.6060041693375945 -496 683 -.2480084785943482 -498 683 -.9715678929277498 -506 683 1.091903433521028 -514 683 -.3237310898673489 -516 683 .3275044393640255 -539 683 -.5354688513315351 -552 683 -.2974792358674702 -568 683 -.20752893678120077 -569 683 -.005549589996572941 -590 683 -.15624824823484212 -604 683 -1.2425070818703325 -625 683 1.0650706077746837 -639 683 -.40440897920719165 -644 683 -.6729033877025596 -671 683 -.7292958367282 -673 683 -.8202678041335852 -711 683 .1762298172902123 -713 683 1.5205265213264285 -716 683 .8060688049667332 -732 683 -2.094490392956842 -752 683 -.8543092093163491 -764 683 -.6192162997227928 -766 683 .1911440058363742 -786 683 .26213731673028184 -802 683 -.37399789493079616 -813 683 -1.267012908056014 -816 683 -.6745636878512151 -817 683 .5295887421035772 -825 683 -.7985067637938728 -826 683 .42319044693866353 -848 683 -.2189833825807322 -851 683 -.21937548839018234 -917 683 -.6307401552943439 -923 683 1.8005916935973607 -960 683 -.47775047278717225 -964 683 -.42319663587323336 -979 683 .07307797433850058 -981 683 -.26949478285128087 -992 683 1.4123773481476338 -996 683 -.18286771294831644 -1000 683 .38094693090123977 -26 684 -1.0326545428134164 -36 684 -.19480322571117015 -42 684 -.1412088149043776 -55 684 -.31908501393382127 -59 684 2.3875892314964324 -68 684 .15421994330310465 -69 684 2.13588326158166 -84 684 -.30125663505455175 -101 684 -.8164788589618235 -109 684 1.5277054005369004 -119 684 -1.7108123811807352 -127 684 3.1389572014012748 -129 684 -1.6220497545719885 -135 684 -.3609427324218428 -140 684 .11441023521254616 -145 684 -.41930131039500584 -146 684 .6967293154502606 -151 684 -.34529456297926453 -153 684 -.8350231559181394 -156 684 .43561613397363674 -158 684 -.3463997523326692 -168 684 -.269881735606152 -175 684 -.7932854859351719 -179 684 .4515721957589621 -227 684 .46725668560286393 -228 684 1.5609593018221635 -233 684 -.6221197690320369 -240 684 -.9408530628419203 -253 684 1.0644432232141194 -274 684 -.6384816146476221 -275 684 -.34724794524335034 -287 684 -.6293538453286326 -294 684 .3608894650205277 -304 684 -.8006869560896797 -314 684 1.0845581597169076 -323 684 1.8104478473681764 -325 684 .9506507959605864 -326 684 -.09889150056926316 -330 684 -1.2589128154480054 -334 684 .5160213225556107 -341 684 -.2010178351005426 -342 684 -.1999609071691846 -345 684 -.16395802557285943 -355 684 -1.5993550783225565 -378 684 -1.7963159902441421 -381 684 -1.253072809756398 -401 684 -1.4104916874778861 -407 684 .4651164048631017 -410 684 .9944909428676927 -418 684 -.12346902740140525 -427 684 -.37750818537081887 -430 684 -2.5138974611725984 -437 684 .2452001752390419 -442 684 1.458065877439184 -447 684 -1.833971756603353 -449 684 .674129876891593 -453 684 -.2684871284796214 -459 684 -.16485020408014925 -471 684 2.017047647137221 -473 684 -.7872927970622884 -477 684 2.9161174812886865 -498 684 -.3936915034972594 -508 684 -.8268751025368481 -515 684 -1.6759037132842454 -518 684 -.40629502532119516 -522 684 -1.1295876689748967 -523 684 .37788727551405765 -527 684 .5844562582132866 -539 684 1.5890960073120755 -544 684 .5795161693552255 -547 684 -1.0684860227121415 -555 684 -1.4463665018987515 -570 684 .14116864111534844 -592 684 -1.3758287586720603 -605 684 2.009365935959681 -610 684 1.5715823851703674 -612 684 .642422265144012 -617 684 1.4085886972396382 -624 684 -1.7240106928622876 -635 684 -1.287949966444415 -641 684 -1.229846131276255 -643 684 -.7802880464976125 -644 684 -.3631298068258813 -647 684 1.4488058988427206 -651 684 -2.4038579287984887 -652 684 -.7984269631302555 -655 684 .7309576867686017 -656 684 2.0364777059654555 -677 684 1.123948379276208 -683 684 -.5911399776311381 -693 684 -.605471605339281 -716 684 -.7378516477510803 -732 684 -1.0947714096418515 -741 684 1.1653254686494654 -756 684 2.139275002200531 -761 684 -.43329263670402485 -763 684 -.6157040055999021 -766 684 .22817172694554586 -776 684 1.986375114683071 -785 684 .9554224349011231 -820 684 .6465020676551081 -823 684 -2.756919015891214 -851 684 .8201146634143383 -868 684 -.03948084065608832 -869 684 .7851582568901945 -883 684 .3156275804742282 -884 684 .3464047840826033 -902 684 -1.0287490303560995 -911 684 -.2932753174825177 -920 684 -.46447797335821334 -929 684 1.4630881094555777 -930 684 -.1203887223093832 -937 684 1.166978032284174 -942 684 -.7570222079128376 -946 684 -2.113945739768684 -948 684 1.1604716889084292 -957 684 -1.2231870838833865 -958 684 -.02144040686280646 -964 684 -.28810778529531245 -970 684 1.0428753777584714 -971 684 -.8327979454867092 -975 684 .7228312932186697 -12 685 -.33212172870879175 -17 685 -.40859244455241395 -39 685 1.3445386581458878 -41 685 -2.4992237158818873 -42 685 .542291696368961 -55 685 .6488645695943096 -57 685 -.6175692628678571 -75 685 -.5377057051212902 -101 685 -1.196987069664399 -104 685 -1.5613016281284056 -131 685 .34616743543397177 -136 685 -2.773837824836973 -158 685 1.6342024211892272 -161 685 1.0849668629963611 -167 685 -1.0501814769145854 -178 685 .25455741833906464 -182 685 1.0572893898620566 -192 685 -.19877830669558255 -224 685 -1.081509583184004 -238 685 -1.3127603590156454 -300 685 -.7488814658677687 -304 685 .09227484647167726 -325 685 .07761922157242708 -342 685 .06584808619414043 -353 685 -1.6740007872563742 -357 685 .5301137199494935 -381 685 -.5784657136671127 -384 685 -.18659540775353167 -388 685 .6388522667068899 -396 685 1.6760199598771242 -405 685 .03695325373506987 -415 685 -.003252117213844205 -437 685 .5710548921390375 -457 685 -.4346834297087196 -459 685 1.6339932033346327 -462 685 .030081555930562456 -463 685 -.5601208166471114 -466 685 1.4387224821351918 -476 685 .3470430133448321 -502 685 1.3131576860634473 -512 685 -.5007236786513375 -534 685 1.043546450046013 -538 685 -.02520854566406462 -539 685 .8263028974493494 -549 685 .1708667936686155 -557 685 .24560482539733325 -559 685 -1.1317675762148456 -571 685 -.6160429222631486 -577 685 .7090329573709064 -581 685 -1.3732120701477435 -596 685 .9227337795830239 -601 685 .5695595413435411 -606 685 .48910078485715713 -607 685 .02917740635571285 -609 685 .28647050556898357 -611 685 -.24183131574216526 -616 685 1.1536856838356129 -651 685 1.3983279762835097 -662 685 -1.713414141163563 -676 685 -.18937766204052528 -717 685 2.1891034522830224 -751 685 -1.0273119199313379 -758 685 .4403581246573219 -760 685 .45290725652444247 -789 685 -.39068160567673627 -804 685 -.10112583047640203 -809 685 .26249141173293566 -815 685 -1.56920275412103 -816 685 .9802955767213593 -826 685 .4824435484959609 -830 685 -.5110380020253132 -835 685 -.48835360359582414 -841 685 .34215929947091905 -849 685 .667109893134834 -854 685 -.5923738129046447 -859 685 .5090442647299955 -863 685 .7624578804224754 -871 685 -1.753002374461335 -917 685 1.6472770478943526 -931 685 .9390319738384704 -934 685 .253358301489926 -940 685 .3293959244131771 -944 685 -.3701279547022125 -950 685 .4814454968825498 -951 685 -.8383481680214301 -963 685 .2920528309448951 -970 685 -1.2174796076432886 -975 685 .41227010681133347 -20 686 .7643414921765966 -21 686 -.023246665712646195 -22 686 -1.2380885301211026 -23 686 -.07470777614671202 -25 686 .016853213939401993 -39 686 -.35073115142975103 -48 686 .19740206767923585 -54 686 1.3492294248528411 -58 686 2.550042488335502 -60 686 -1.4218779439586102 -68 686 1.289605521716244 -78 686 2.2208293370625567 -83 686 1.1040458445109391 -93 686 -1.365352225147555 -95 686 1.8872813510298578 -113 686 .7461987580899399 -119 686 -.7080168332183552 -129 686 -2.5846010282133456 -148 686 -.19144623423956286 -153 686 -.034450669786687704 -161 686 -2.188511537343649 -174 686 -2.923585626292875 -178 686 1.2929662998963551 -186 686 -1.4432023141339057 -188 686 -1.0800054538026782 -209 686 -.9121128032858911 -233 686 -.9230721225878823 -244 686 -2.2205080763833327 -273 686 -.36083480500656046 -289 686 1.230824493919325 -308 686 -1.1684339862658162 -310 686 -.5383620272397274 -320 686 2.7839099481652623 -382 686 -.41671378860192654 -394 686 -.5718968248492364 -404 686 .049135744469127565 -433 686 2.0667806193208214 -445 686 -1.5715375026594474 -446 686 -2.3914726265872686 -447 686 -2.0902532983711266 -492 686 2.979770231345373 -500 686 -.22044642457050243 -506 686 -1.8023625966511476 -517 686 .03474467818157524 -532 686 .2663506653610796 -536 686 3.1945095546797195 -541 686 -.3392550590019915 -554 686 .34975050923711115 -559 686 -1.840835732269798 -573 686 -.6921907155314624 -575 686 1.1233042298065712 -586 686 -.8375528486768788 -595 686 -1.7124397162862974 -597 686 -1.6880722333089777 -605 686 .9973646641600353 -631 686 .33233976593482967 -632 686 .17220541149382912 -648 686 .06135031336042142 -693 686 -.2576919465726927 -705 686 1.3657118587551822 -715 686 .19090645909553922 -726 686 .4413411866182493 -732 686 .08439128892517034 -739 686 1.195877478452148 -740 686 -.5424117103234503 -747 686 -.6343120730242309 -756 686 2.5769195001206158 -766 686 1.3930254376673912 -768 686 -1.3144668672646642 -770 686 -.8236801450321574 -779 686 -1.2704249554083629 -785 686 1.9211799264923346 -786 686 .8293940662897162 -791 686 .03872957227233961 -803 686 3.942782248017824 -806 686 -.1020848689256217 -809 686 -1.677972271398611 -812 686 -1.579125905872146 -816 686 -2.8622576674078966 -827 686 1.0320881442365732 -830 686 .6723065680293466 -837 686 -2.6505284789603043 -859 686 1.0181941610505565 -872 686 .45876951446527414 -877 686 1.700645499906907 -895 686 -.21831784009009514 -912 686 -.5021885131475617 -926 686 -.8266362421129521 -929 686 .6614653027877289 -933 686 1.1562488645136126 -947 686 2.9046606569501443 -962 686 3.0208255256214005 -969 686 .93516126777352 -974 686 -2.4181809925633413 -978 686 .789957572418869 -980 686 -.4552396456081902 -991 686 -.3290536444800684 -992 686 -.544144800793742 -996 686 -.9699391302239287 -8 687 .3707839300625638 -37 687 .8093415923728093 -48 687 2.2150357102991824 -61 687 -1.2632602981935686 -82 687 2.320858326979583 -86 687 -.5231338504288763 -89 687 1.1156923512036232 -91 687 .06520395370900585 -106 687 -2.0152404210080905 -110 687 3.900576066515164 -111 687 -1.5021198696150686 -112 687 -2.4790130593233624 -139 687 -.5071510830754088 -140 687 1.5095351250365598 -174 687 -.8972634466078103 -176 687 .6364562405647276 -183 687 -1.4570544033257617 -213 687 -.9086221284497296 -218 687 -1.3946214493188784 -240 687 1.6538274711570302 -251 687 -1.4328231494147146 -263 687 -.3837784492729116 -266 687 -.2780266073621459 -288 687 .009105190942936547 -297 687 -2.284524453314618 -298 687 -.44532984836386824 -315 687 -.9610534444503175 -349 687 -2.909277134158547 -402 687 -.47166199692641403 -441 687 .19119013434154436 -453 687 .8596500688903134 -465 687 1.6252546798171683 -468 687 -.266618371335981 -471 687 .5660394526419138 -536 687 2.4719504046025906 -550 687 -.9648689306720573 -554 687 .8707665598865596 -562 687 -1.6115468029172388 -572 687 -.7959271080820656 -576 687 -1.7254977473897917 -589 687 -.273936878546567 -590 687 .4352028726365006 -599 687 -1.1611184888396582 -614 687 -.16335682640165056 -618 687 -3.446983513442304 -628 687 1.2180483510123645 -629 687 .9111239131018413 -658 687 -.776711346400173 -674 687 2.0586679247866915 -676 687 .9300441894410354 -681 687 -1.0519392954700701 -682 687 -.38217505996845064 -699 687 -.1257412917932325 -701 687 -2.0513855713250133 -713 687 1.75902958479185 -736 687 -1.6288844630839896 -743 687 -.5610283006582517 -744 687 1.0374607454212983 -778 687 -.7038186012795354 -806 687 -.9594155766057861 -807 687 .15089688925494488 -822 687 -2.144388295461664 -824 687 -.389767172705044 -838 687 -1.9026178174081936 -853 687 1.7264358055097255 -865 687 .9117114088556011 -866 687 -.08631487057471508 -871 687 -2.01620793190645 -885 687 -.6762103177670588 -933 687 3.1249022826906425 -937 687 .3805234629784433 -956 687 -.5119515076825608 -959 687 -.13921440036147703 -965 687 -.4879855485405428 -971 687 -.4708228488804911 -973 687 .2846454779889471 -974 687 -1.0029543289422262 -978 687 -.5053434490715509 -983 687 .39741976813185187 -4 688 .008426136446992666 -11 688 -.19512421205603142 -17 688 .9161328128195053 -18 688 2.1873649112947824 -19 688 1.0977286706402891 -44 688 1.1233969274238045 -60 688 .03922604713711557 -63 688 1.1711163573117331 -67 688 .9625607683654542 -76 688 1.189066014271162 -84 688 -3.3522923029876557 -85 688 .0937932053106672 -90 688 -.2409513638969265 -101 688 .08575730576754942 -102 688 3.696156998578277 -105 688 -1.1787512936563351 -106 688 -1.1861642251094417 -126 688 .2905013780887365 -131 688 .041916651014455554 -132 688 -.2138585816905705 -144 688 -.3540691643940066 -145 688 .27581099564740774 -164 688 -.3592622368141111 -172 688 -.7758516177680589 -178 688 2.6764798290109373 -214 688 -.3521912616204628 -219 688 .2747365058354718 -224 688 1.1216287581803412 -233 688 -.21195277356577005 -245 688 .5952614170650006 -274 688 2.6107315389994414 -281 688 1.119441965504457 -298 688 -1.3788520064900416 -307 688 -.007221336132052954 -309 688 .6239182830874725 -326 688 .7660371670714221 -330 688 -.5053405791916221 -331 688 .4430549261699256 -333 688 1.5444361077932296 -337 688 -1.2822651179038853 -339 688 3.181986993145696 -347 688 -.36114475147574454 -355 688 -1.0178985310864017 -356 688 -.951931640138701 -375 688 .6199016802349655 -410 688 .5745025325536117 -419 688 2.2954795859203183 -427 688 -2.7630521773182513 -446 688 -.8041594541953032 -453 688 -.025433961273797934 -455 688 2.349437829443381 -468 688 1.1324236807973742 -470 688 .9307700395450168 -473 688 -.7621095142864717 -500 688 1.4360889305192561 -508 688 1.712779662003223 -510 688 1.2968956838779973 -512 688 -1.0449403204392749 -553 688 -.006295419293804956 -561 688 -1.2258269921265303 -568 688 -2.301366465460326 -586 688 1.209683126675162 -613 688 -.7639079100070683 -618 688 -.19225730081461959 -619 688 .8183617063487537 -620 688 2.579270006260002 -630 688 .07911622894110096 -633 688 -1.17104478620959 -636 688 -.8155386150219618 -637 688 .05199728292862105 -648 688 -.38565050665884876 -650 688 .5340746903650004 -657 688 .6928133668214853 -662 688 -2.1998823245228616 -663 688 .07502671359714863 -669 688 -.30405631355131435 -685 688 1.997878010506643 -702 688 1.6627790944166072 -708 688 .43423910925410086 -725 688 1.609845583243933 -728 688 -.5950927447959519 -732 688 2.653853248529549 -742 688 2.389195649569163 -748 688 .16204237560558638 -750 688 -.7293716294161374 -787 688 -.14750603628284173 -817 688 -.04542937168137287 -825 688 .7670366841415655 -839 688 -.4714602422682151 -844 688 -1.8223449208185434 -868 688 -2.8763854317357276 -877 688 .09733295840934927 -878 688 -.6571902143631776 -882 688 -2.921080461151971 -884 688 1.4380006897641824 -888 688 1.373945022677243 -902 688 -.6842928409050837 -918 688 1.189694478035514 -920 688 2.2461766432569306 -928 688 -3.3348850036785445 -933 688 .36497838725891335 -938 688 .5103989336206662 -946 688 2.669786844004804 -953 688 1.5021906601059802 -960 688 -1.7077486458557356 -961 688 1.0556074653780836 -965 688 -.30037761845547395 -973 688 -1.01676314628695 -975 688 -.31735963297702774 -983 688 1.4918587208370333 -994 688 .786818329441159 -5 689 -.4058826159782416 -11 689 -.6497226860154063 -13 689 .34906470382914834 -15 689 .8584149554968069 -25 689 -1.8114730134307524 -42 689 -.30200025189549407 -65 689 .10796405618970017 -67 689 -1.3037407062744995 -88 689 -.31130812948281533 -96 689 .6879821144048369 -105 689 1.3236321089687773 -112 689 -.3533409674702064 -116 689 .46318304337708543 -122 689 -.005858584396290181 -129 689 -.7706655638801946 -139 689 -1.3038359212417339 -148 689 -1.92296169930746 -150 689 -1.0076254016601454 -152 689 -.6971354634897843 -156 689 .20304164454248597 -164 689 .4356107001222116 -165 689 -.2806528711809483 -173 689 .009968117792615652 -180 689 -1.2504328795589135 -189 689 .14379903641183825 -193 689 -.15464359257948862 -223 689 -.0551871637401446 -224 689 -1.1213905113785452 -238 689 1.106225618170597 -244 689 1.1963923834956016 -245 689 -1.7009516496881447 -250 689 1.9993898682756666 -333 689 .0027590196229533223 -338 689 -.7695112455675925 -362 689 .49792590406713144 -365 689 1.3059582528164126 -374 689 .3308320068531 -378 689 -.17610124495142077 -380 689 -.19912732805125533 -388 689 .9867813182738573 -391 689 -.08048900704384582 -395 689 .13429480950213513 -411 689 .6477013051770907 -415 689 -.7957221689390632 -422 689 1.2482052575206466 -435 689 -.4059387172274985 -448 689 .8595241180334328 -453 689 -.6075987553419886 -454 689 1.113334039426656 -456 689 .05075445678870421 -477 689 1.8969651741776559 -484 689 .1781224852959507 -501 689 2.003519995726271 -523 689 .8927498381523404 -549 689 1.190430752486886 -555 689 -.8455247507618555 -556 689 -.17452325902661447 -561 689 .6925995689272826 -566 689 .829991006503079 -570 689 -.6892434119835404 -577 689 1.6630120995995599 -590 689 1.2383131205053004 -594 689 .29365844941812236 -598 689 -.2841526181628319 -603 689 -1.9143181391581425 -610 689 -.456759379768048 -638 689 .11537722566279808 -640 689 .5461933057444887 -641 689 -.5414086707687151 -642 689 .006309883015771844 -652 689 -1.643662029171472 -654 689 2.210540817071355 -658 689 .28852960817741 -659 689 .4175489989777124 -680 689 -1.1367340155484535 -690 689 -.703240916028453 -691 689 .4772793857122924 -696 689 -.3194030889574546 -699 689 .7563357375550146 -714 689 .11379736818969038 -715 689 -.8280319901578352 -716 689 1.2978201050931981 -718 689 -.20379304596127917 -721 689 .7322037126226618 -727 689 -.5392957049526579 -729 689 -.14391885545494218 -741 689 .5058014929385496 -751 689 .11316872449590354 -755 689 -1.912960426993562 -783 689 .6887318591312427 -784 689 .36309979372030143 -793 689 1.9767724446778088 -795 689 -.8921302686458088 -821 689 .4406428886485106 -822 689 1.2724089058155497 -828 689 -.08466320100508001 -829 689 -.1851398594668418 -837 689 1.8838063492797892 -852 689 .883967996747101 -873 689 1.0197580130633903 -876 689 1.7614321886846565 -886 689 .7232021091026717 -919 689 -.3224423764499388 -922 689 -.07031085058669731 -929 689 -.3463497860694329 -931 689 -1.1164156726810355 -934 689 -.5580098887024163 -941 689 -.14548003784852506 -944 689 1.0481931763605976 -955 689 -1.1927774997619673 -956 689 .09017669930009986 -963 689 -1.745452788446555 -967 689 -1.1255538423277918 -976 689 1.1894943511137064 -988 689 .12427596302205356 -992 689 .4332299425101066 -998 689 -.48224983647743963 -14 690 -.9654255686004473 -24 690 .9792414399125688 -34 690 -.9422122308062864 -37 690 .2838420185998365 -76 690 .2242761064387841 -78 690 .6289541467728257 -83 690 1.2747347316410087 -91 690 -.4161292208297285 -98 690 .5502755409079011 -100 690 .05686145279197363 -103 690 -.7496921704171645 -104 690 .550277240067862 -111 690 -1.5036768171001549 -130 690 1.6982824990966587 -132 690 .4186332749281692 -138 690 -.7365899583529467 -140 690 .6091686351448545 -147 690 .9703013608913731 -156 690 -1.0485617166297803 -157 690 .775557780603776 -158 690 -1.3189185153907035 -189 690 1.0411135157613638 -202 690 -.9978153269275102 -230 690 -.9971604740273796 -238 690 -.2543215954453916 -251 690 .9689776330707751 -254 690 .051507487338370794 -258 690 .8308326011464681 -259 690 -.3790676292008142 -269 690 1.2036820642650405 -277 690 -.7371982658921697 -287 690 1.4389594413686742 -289 690 -1.2210062996633217 -301 690 -.6039606410693414 -329 690 1.1291114507000626 -331 690 .026575781580303756 -336 690 -2.090978025583525 -344 690 .26745513366994556 -348 690 -1.036801522753915 -363 690 .25013917217545356 -366 690 1.0376807339388971 -375 690 -.19167898918688736 -381 690 .3756566387700042 -384 690 1.3478625872285142 -390 690 1.4234358929375226 -391 690 -1.8996109019181318 -414 690 -1.0776308611102494 -430 690 2.0607522870297 -434 690 -.340133743234334 -447 690 .6744844816997156 -449 690 -1.8451058554419035 -460 690 .1908732832213243 -481 690 .8598203602305099 -498 690 -1.5613069812820757 -500 690 -.31988719311462466 -502 690 -.05126685440610511 -505 690 .11320354848872172 -509 690 -.25405198619839464 -540 690 .5972953803172485 -557 690 .15827766378873004 -568 690 -.767260426104592 -573 690 -1.6141847897113986 -579 690 .24648728663959502 -583 690 -.08882737950672992 -621 690 .5595720154086427 -627 690 2.4914525465999926 -632 690 -.8191217081053591 -653 690 1.5165096821156656 -655 690 -1.5289055706837946 -658 690 1.4091023099517397 -666 690 .6086938247730173 -671 690 -1.795712414774784 -673 690 -.27090523576434294 -685 690 -.5224012180239153 -697 690 .5820144282869403 -716 690 -.7431628334140311 -729 690 -.06982727141996758 -736 690 .8446576857575557 -743 690 .01168825084129102 -755 690 .5581218524008322 -761 690 .014111279788836681 -772 690 -.014817543124069854 -776 690 .8441836942476918 -787 690 .352452380343357 -795 690 -.9124076750010552 -828 690 -2.006077590786112 -830 690 .5014941731453177 -834 690 -.6897154811893944 -846 690 .6730809435270604 -854 690 .08081715519749758 -870 690 -1.1676673082034343 -875 690 -.4183527533137645 -878 690 .8017307792043589 -879 690 .3895505840496418 -882 690 1.493371208266703 -884 690 -.5639079368379215 -887 690 .28833110784385585 -901 690 .572716815359234 -928 690 1.0804590678161845 -959 690 -1.2397692220602636 -974 690 .4715630725995872 -984 690 -.36446542810044713 -27 691 -.4325898286987855 -32 691 -.20059716407627443 -39 691 -.613865269586754 -41 691 2.2999762685601195 -50 691 -.25363327769251653 -63 691 1.263618615024535 -64 691 1.8651878049289994 -79 691 2.1725066764068295 -82 691 .21720163856604116 -89 691 -.4342458778821829 -101 691 -1.2703096221720394 -114 691 -.3191389677949217 -118 691 -1.2205404105319504 -142 691 -.3739698925190112 -171 691 2.255980206049369 -194 691 .6749062516535527 -204 691 -.256984582220894 -214 691 -.546175979030673 -217 691 .7685351238364275 -219 691 .38717754493953943 -221 691 .25242922925776484 -230 691 .7649500581374767 -234 691 -1.6475534733674633 -277 691 1.899249803752455 -282 691 .2773918128896286 -287 691 .9238545944096773 -290 691 .5742514694327617 -301 691 .01066315623518585 -306 691 .41240763929225266 -310 691 .02888699470582955 -337 691 .4388402495575161 -365 691 -.6943633225268575 -399 691 .420445174518281 -415 691 .49827678173994444 -417 691 -.4972529157169228 -419 691 .1672814615480724 -421 691 -.35459599040322143 -424 691 .051276790542880576 -436 691 -.30254283118307623 -440 691 -.1422060625471592 -442 691 .42966456333192166 -450 691 -.6061593347642203 -451 691 1.9390272752766329 -458 691 1.061008847193507 -459 691 -1.2234370969733788 -473 691 .7567553082000322 -478 691 -1.4660590908563054 -483 691 -.19218376525395522 -485 691 .5304753218917636 -491 691 -.2520020031128569 -496 691 -.403400643436692 -502 691 -.09794254461648247 -508 691 -.0630027461935384 -515 691 -.6737354434257629 -516 691 -.03402855685627358 -518 691 .6837544700205502 -521 691 2.157626183891037 -530 691 -1.5463819861044301 -537 691 -1.5983477002325732 -539 691 .2620647785094515 -542 691 -.6640469621395835 -556 691 .09152361872181092 -566 691 .6028205173453416 -574 691 2.0670719436098706 -577 691 -.49211592429973816 -583 691 -.3575140472418407 -592 691 -1.5238099058593262 -597 691 .07627981797655627 -604 691 .28886365408906733 -622 691 .13209603420210134 -625 691 -3.155021528700641 -630 691 .021117199513525427 -635 691 -.5408427016921158 -637 691 1.9849728597152518 -641 691 .8258977764127321 -654 691 -.39564972229400885 -669 691 .4314464075493424 -676 691 -.5341289115717783 -677 691 .4665705740425717 -692 691 .9511344023992142 -705 691 -.09410134135901412 -708 691 -.08053869719435158 -712 691 .12429461419927977 -713 691 -.5483961493803806 -734 691 -.2431056027771489 -736 691 1.4752814217377823 -739 691 .7566993763631116 -741 691 -1.0553284814584967 -756 691 .061167234460202835 -757 691 1.734169642644391 -759 691 -.16736645493067992 -763 691 -.9846010191771322 -774 691 -1.248055526274508 -783 691 .4765989668945877 -800 691 -.2579852758645773 -803 691 1.0211358016729424 -818 691 .3641410525397287 -821 691 -.2837034009861692 -840 691 -.7170358697892983 -842 691 -.5532587133294641 -869 691 -.38818988143252775 -872 691 .4705249879608506 -897 691 1.0567844537618465 -902 691 -1.3312327235689108 -911 691 -.9793646682635699 -920 691 .4745021873017947 -923 691 -1.3942874140584922 -937 691 .15994314032757623 -943 691 -.5039615594441803 -952 691 .6426957883922277 -985 691 1.6221548431716881 -986 691 .5211164595904139 -2 692 -1.196901201273247 -21 692 -.05810130225079774 -27 692 .5199850181518059 -30 692 .7994774138075458 -33 692 -2.1854664048908274 -49 692 .4690400920397752 -52 692 -.9124261402763545 -76 692 .5973146199534439 -82 692 -1.4161929394553514 -86 692 1.955544277840721 -99 692 1.3049409328369135 -102 692 1.1474638226998426 -112 692 .6413199500553842 -113 692 -.3501609575091991 -118 692 .45885381467288255 -139 692 .6155697906776253 -145 692 .2514480616881043 -147 692 .8770552597287299 -154 692 .3142681705067604 -206 692 -.46302411640138286 -213 692 -.5874979883639605 -229 692 -.8327692855823109 -243 692 -.36720907258777985 -247 692 .40714064097345254 -258 692 .1803643363007662 -276 692 1.1530260803948795 -280 692 1.0996610914911977 -283 692 .8851891389593453 -290 692 .08692113304505736 -294 692 1.3177865588297413 -302 692 -.3524490981549948 -314 692 .642505159896602 -321 692 -.9339700590511723 -332 692 1.3952568201694764 -351 692 -.8169192234196512 -364 692 .3060565176502829 -368 692 1.8136876260774093 -378 692 1.5013308171579889 -380 692 -.6586537980795876 -384 692 -1.2654795013047258 -389 692 .509168093769878 -422 692 1.3375304175455025 -433 692 -1.1893307413554934 -442 692 .16089987790837856 -446 692 -.705678728739062 -461 692 1.1292255264208206 -466 692 -.7569000057914566 -481 692 -.0008793658036626364 -483 692 .511325311656244 -487 692 2.5204323648678866 -491 692 -.31436490972625286 -492 692 -2.3782665114929316 -509 692 .3043687454455879 -510 692 1.5889875222935874 -533 692 -.28941343813304565 -540 692 -.8226609183426791 -550 692 -1.108962263863678 -551 692 .24377864935047555 -577 692 -.5678356701477807 -598 692 -.35492624245048887 -623 692 1.4500134623133636 -626 692 -.07503520833780278 -647 692 .8329438887527618 -656 692 .23413395670554643 -663 692 .6334192862510429 -680 692 .8236902970630876 -686 692 .46051975187798133 -687 692 1.493067584495511 -690 692 -.18859485089900224 -698 692 .9555538959904386 -704 692 .19395420767992708 -712 692 1.730915360800613 -728 692 1.1818375198378366 -754 692 .14312449782194853 -758 692 .9319955452344774 -776 692 1.94405761608964 -794 692 -.7449935527707945 -816 692 2.0235344762383347 -823 692 -1.4337833741967803 -849 692 2.7658678221756094 -881 692 -.43992983396699264 -898 692 1.6633487781719773 -913 692 1.3674318693240972 -926 692 -1.4962571685727308 -933 692 -.933926911212764 -934 692 -.30033589859275445 -937 692 .6020982563278934 -963 692 -.8030692462333019 -984 692 -1.1163726306042505 -999 692 -1.5471456431088082 -5 693 .4444746565994402 -8 693 1.188251855270666 -16 693 .19412135231177383 -32 693 -1.2100131653004447 -52 693 -.9057678216319928 -56 693 -.9354668583844192 -72 693 -.8784371190494074 -77 693 -.06212332634343071 -81 693 1.2487089029071443 -91 693 .29399441711455077 -119 693 1.1744554724478955 -124 693 .6328951672786123 -140 693 -.07980960145029532 -143 693 -.39251581122484025 -155 693 -.7995931543744506 -166 693 .049596447257962264 -167 693 .08191677700777789 -174 693 -.7745820822724354 -190 693 .1501271144052414 -213 693 -.5645020219167304 -225 693 -1.0063964067889832 -263 693 .5875648199891936 -264 693 -.3343806700954661 -267 693 .10695846842169686 -272 693 -2.374875713561451 -273 693 -.1546510343608703 -275 693 1.6228938883339066 -278 693 .4465426713802458 -307 693 .20782538384684393 -335 693 .19304392429541573 -352 693 -.08611608127571568 -353 693 -.025608049200638063 -362 693 .8103222666202767 -363 693 1.1858432118191078 -371 693 .5507126698163801 -380 693 .8260657729619514 -381 693 -.3440573970318881 -389 693 -.3351881803158364 -415 693 1.1277057772886137 -417 693 .07299075781923361 -418 693 .38630232398006087 -436 693 -.7025256444178268 -442 693 .05541714780174159 -449 693 -.2540870674012669 -455 693 1.1131699655086666 -459 693 -.5584508101191895 -478 693 .731245656218598 -500 693 .2643180837764829 -506 693 -.15550708922205536 -508 693 -.9187338334059518 -511 693 -.2242564810764089 -517 693 .43010499224602855 -526 693 -1.2060736782161912 -534 693 -.1973434339560504 -604 693 .791081859512352 -624 693 -.8005591586162993 -634 693 .6007408314780359 -653 693 .005146022426149144 -668 693 .02161984179090659 -671 693 .108511066344287 -690 693 1.8468031838394672 -728 693 .8846887431880824 -731 693 .3858019834773897 -738 693 .9148933454065167 -777 693 -1.032345074113678 -788 693 1.1289765307908541 -796 693 -.9065433089699613 -799 693 -1.04962768819858 -803 693 1.3635945166119499 -811 693 -.03527334568115925 -813 693 -1.0830707712566356 -819 693 .21868099487601111 -837 693 -1.018488840875454 -841 693 .06980827999277142 -851 693 -.7637147891646114 -856 693 .49535361417960144 -857 693 1.2778070402377542 -859 693 -1.0526182630958452 -867 693 .942627227725782 -872 693 -.8990598911884468 -901 693 .1310415319883163 -902 693 -.6501147503767215 -907 693 .15351631649547842 -938 693 .8373629918547378 -941 693 -.359752309560274 -945 693 .1766395993102748 -959 693 -.9110052421610744 -963 693 .5924567652905108 -976 693 -.31065340224508886 -978 693 .8119229027265201 -988 693 .7022017849987614 -994 693 -.49220039086912243 -6 694 -.44719110671491763 -9 694 -.8899998073057608 -33 694 .33969463150981527 -34 694 -.21034366388177592 -37 694 -.7871324865472649 -44 694 -.6226444355287281 -51 694 -.15544959748664133 -55 694 1.0107811682499976 -61 694 -1.5535304662040212 -88 694 1.075073439705227 -92 694 1.0794335691079828 -102 694 .5208322093199779 -104 694 -.08022527894862744 -108 694 -.1906209486190196 -109 694 -.9862225578947716 -113 694 -.7460472467068197 -115 694 .7893216840568167 -122 694 -.3749280304152373 -124 694 1.299300666787694 -137 694 -.43457403939782907 -139 694 -.2822959258051418 -148 694 -.16932449876853217 -161 694 -.217073261003265 -174 694 .7154105358671567 -183 694 1.7340385051925946 -199 694 -.10625500909481156 -215 694 .26511871035547196 -222 694 -.06520966097637432 -228 694 .1146331798082875 -242 694 .15793156377539933 -243 694 -.6147212727005722 -246 694 .223565728924552 -251 694 -.5862411546994051 -284 694 -.52102738235943 -286 694 -.344153780596762 -292 694 -.16088307988193376 -302 694 -.507243481167437 -321 694 -.5274596298179532 -329 694 .026139336511789034 -341 694 -1.1183287026087938 -348 694 .1364595751330552 -358 694 -.2778686387335772 -361 694 .3306510787388956 -371 694 .5148170882417888 -386 694 .20030020654819725 -389 694 -.541343487458009 -401 694 -.2604240984583231 -415 694 .41443499294172487 -431 694 1.0620010743672057 -434 694 .2314713439029338 -436 694 .8368378253559003 -445 694 .17923650844221015 -455 694 -.0024207771477069706 -457 694 -.7976605346991779 -469 694 .46266757281221316 -476 694 -.3841344693524185 -485 694 -.6918469927268667 -490 694 .5233208712229831 -501 694 .5877897252577445 -514 694 -.5477921672736401 -533 694 .36004718549649617 -534 694 .9685952348132496 -537 694 -.09831964220667139 -557 694 1.1820048157335312 -586 694 -.41836399299045396 -625 694 .9095385445833025 -626 694 -.6324023865539034 -636 694 1.0135010229616312 -659 694 -.23310757152475609 -665 694 -1.2570653954787845 -673 694 -.42620534961203216 -707 694 -.5507604714918599 -711 694 -.20023183452283938 -727 694 -1.0550156476518262 -731 694 -.39186955245065785 -736 694 1.8263428208527088 -759 694 -.08295781805439183 -763 694 .6164446646022699 -769 694 1.296775166357198 -777 694 .4148681720166633 -791 694 .7979965667950879 -812 694 .9603870397057582 -827 694 -1.0868788211466343 -840 694 -.8331179455918614 -854 694 -.8092450922903107 -863 694 -.2942469948999131 -871 694 -.5770144846951217 -882 694 .846332000016909 -883 694 .3941779338956425 -904 694 .24019518506777365 -927 694 -.11236661664691168 -928 694 .45221627062861663 -929 694 -.7852734955072538 -932 694 -.116202949722837 -937 694 -.5030535004348727 -939 694 .1863375473537336 -949 694 -1.277372154743827 -973 694 .8528375529981296 -978 694 .05936474610659623 -980 694 -.4614955215563451 -987 694 1.2284459674061172 -11 695 -.019545574339492947 -30 695 -.05412614613273901 -41 695 -.29556470852688654 -49 695 -2.0875186702247115 -52 695 -.8983828135038749 -54 695 -.05575062958358776 -56 695 1.2190916643528626 -57 695 -.6438929163866156 -59 695 .3685810334164967 -76 695 .6887681205039542 -80 695 -.0020385440935245525 -81 695 -.6089721146841227 -91 695 .18969527741642248 -93 695 -.7454206358798966 -105 695 .2728499185708642 -108 695 .26913648579031363 -115 695 -1.524869533518783 -127 695 .33236670077877684 -146 695 1.4609607341934006 -149 695 .5695788259004455 -155 695 -.0793539521524027 -156 695 1.1960452036345084 -161 695 -1.9210891470817246 -167 695 .12055401734447191 -170 695 -.006197388373819501 -174 695 -1.4872224860638865 -187 695 -1.795332548777463 -195 695 -.16189697826402102 -196 695 .2714141882632186 -199 695 .04112463010762463 -229 695 .13051375078972138 -233 695 -1.4454272355277333 -235 695 .9093376045332084 -236 695 .5292544319061427 -237 695 .2512813762795904 -244 695 -1.151272135523623 -257 695 .08429374790537203 -258 695 .26143009465947187 -269 695 1.0281456172075696 -287 695 -.8640867645132122 -293 695 -.4000936635640349 -308 695 .06912886039419118 -317 695 -1.512205326410402 -325 695 .04100381270426355 -337 695 -.7794667468105119 -338 695 -.2954041265685613 -340 695 1.322765507846718 -345 695 -.9757984244355346 -351 695 -.44380184008974305 -353 695 -.42799422765631095 -389 695 .25168030224786164 -397 695 -.32361630703074706 -398 695 .3975863772296545 -420 695 -.8388941322741323 -430 695 -.8229240213224032 -439 695 -.38705934736955266 -440 695 -.4147687546403425 -446 695 -2.283233527776992 -457 695 -.7827351433371992 -462 695 -1.3855287341295095 -464 695 .15050132327135773 -485 695 .4740927281166084 -494 695 2.0338655644175145 -499 695 -1.1226270574447792 -507 695 .40671360018039093 -534 695 .22564681116914326 -539 695 -.0003648734433254197 -550 695 1.5717669022216079 -556 695 .28693654615502845 -575 695 1.8073143452779177 -582 695 .6601823820594839 -586 695 -.5458899298435854 -593 695 .3119489074781382 -606 695 1.8161974205668694 -612 695 .8274499294749674 -620 695 -.054928558350350765 -636 695 -.8801074473714482 -642 695 -1.5704181631701948 -662 695 .6108152913423982 -671 695 2.090566569630007 -699 695 .7273211652247488 -702 695 .06860483163568229 -715 695 -.6968914514916517 -718 695 -.5564195158750714 -725 695 1.0477837183157572 -744 695 -2.4096749353671614 -751 695 .20507342629707792 -753 695 -.30776522957457775 -760 695 -.7325580351895102 -785 695 1.6559748378160308 -798 695 -1.4643728857123979 -799 695 1.044129305948507 -801 695 .27388479805784427 -809 695 .561947242178839 -813 695 1.120822392853657 -814 695 .9993924534450249 -819 695 .21894805060942388 -820 695 -.35831355372983437 -838 695 -.49521869969751675 -839 695 .06718142784516563 -842 695 1.1295950961504757 -843 695 -1.3116513910433925 -860 695 -.5735322971877921 -871 695 1.1278164341143406 -873 695 2.098002338310467 -888 695 1.1379960854945528 -914 695 .5556320649889731 -918 695 -1.167634236868259 -921 695 .12471258381349382 -933 695 -.43499755170955356 -938 695 1.160885639996706 -944 695 .792885641749537 -945 695 -.2529756176074218 -959 695 2.165197156752031 -965 695 -.4125401762580441 -976 695 -.10288196343335054 -2 696 .2545825777102442 -24 696 -1.7037486120778653 -35 696 -.8846446596473829 -40 696 -.021266815205371353 -45 696 .09517406771310455 -49 696 .7499475468672072 -56 696 -.9907829495943121 -60 696 -.4079323126377976 -63 696 -.056039927508111764 -66 696 .5683270846809717 -69 696 .024179021977825906 -77 696 -1.7448751494150057 -94 696 -1.4387163951836512 -102 696 -2.1353884077201775 -107 696 .34135272557893376 -109 696 .9009973404582535 -110 696 .3310752061924839 -111 696 -.7472252415570584 -113 696 -.6426447215865798 -119 696 .8901134309687717 -137 696 .10446183273359369 -143 696 -.40024128391336733 -161 696 -.42368670434508793 -169 696 -.6690049744240038 -179 696 -.4542108776385745 -180 696 -.05955903268496933 -185 696 .4326664937904151 -195 696 -.1339704619318381 -201 696 .24070551925029107 -221 696 -.11129930659988738 -228 696 1.371109674999633 -235 696 -.7912330643892158 -279 696 -.05207209095392365 -287 696 1.1201591505196793 -299 696 .934204552081308 -314 696 1.1326687557733721 -317 696 .3286796891432283 -318 696 -.5713650278609744 -324 696 .32439099153712386 -325 696 .43994604951536476 -346 696 -.5840772847480274 -350 696 -.04226758862111424 -389 696 -.6386544545276951 -391 696 -1.020121207226655 -399 696 -.7527437934083215 -412 696 -.9492185784781876 -413 696 -1.0497682360771874 -418 696 -1.2403657070920273 -424 696 -.513472936561497 -431 696 .27858127513608666 -458 696 2.3298958912816845 -465 696 -.7582272621514067 -466 696 -1.2672547640144116 -481 696 -.4869147773823368 -483 696 -.01669431126141703 -487 696 -.13709982154064143 -489 696 1.352191593744883 -498 696 -.010354950340388414 -524 696 .8828366213286848 -530 696 -.5192706917263448 -547 696 -.5620277538916673 -551 696 .062370240090960684 -564 696 -.5160002224835037 -567 696 -.6986874204134743 -569 696 .0764416632825703 -573 696 -.18495304415355185 -576 696 .7568488625026314 -599 696 1.541474539438175 -614 696 -1.3253928908656267 -616 696 -1.1094297417822436 -625 696 -2.036952492378557 -635 696 -.6446856220648591 -644 696 -1.818560185905304 -647 696 .7950588954123591 -659 696 .20988305732107282 -685 696 -1.027494591519834 -698 696 -1.3889817026445752 -707 696 .025406953382289592 -710 696 -1.223283095013125 -720 696 -.484866049292932 -727 696 .5290355453238955 -731 696 .5249230866133734 -739 696 -.1837031203833515 -745 696 .31562226644012387 -749 696 -.6897368436532149 -756 696 .19018183520481227 -764 696 .5359618925843174 -782 696 -1.2344063866555257 -784 696 .5030304910694905 -790 696 1.3375940203922332 -794 696 -1.3709496725266281 -803 696 1.3636073191451994 -821 696 -.7348709223411015 -822 696 .12648719776658415 -832 696 .5401419892483907 -841 696 -.1985954404427254 -852 696 -1.161662908368723 -862 696 -.2769030489676316 -870 696 .5363818175862332 -890 696 -.32423286830986486 -895 696 -.841385918904447 -937 696 .4826141637422805 -954 696 -.664720095339563 -972 696 -.8894568819667322 -995 696 .6913436546720797 -25 697 -2.209602705871359 -36 697 -.1952788414525792 -41 697 .4708913010742755 -42 697 .08561948644263151 -45 697 -.3594061239264191 -46 697 .7752808801725402 -48 697 -1.2088720979338212 -63 697 -.0860758291942644 -74 697 -.7952736097481695 -83 697 -1.0435246129863294 -113 697 .3340359845969935 -123 697 -.1957151881808152 -127 697 1.5370737458226478 -128 697 .27330522342377106 -180 697 .25295853394510215 -189 697 .5020083946429474 -201 697 .09271668642459777 -203 697 .21828690380387542 -207 697 .3669104129681706 -210 697 .6418841204007998 -211 697 -.8479508957966526 -244 697 -.7009507247918537 -264 697 -1.4037114233969583 -274 697 -.4483902681497453 -277 697 -1.6911349270367249 -285 697 .17107772286642192 -303 697 .5006850953814532 -316 697 -.13398883001420475 -320 697 -.7872858479739654 -333 697 -.16868367407319748 -334 697 -.7173386181061254 -341 697 .6200151122517769 -355 697 -.6412111669768313 -356 697 -.1721649239649017 -359 697 .0012773912491760853 -369 697 -.8415447944452866 -378 697 -.6082018356593997 -389 697 .08127520001251388 -408 697 -.21798523978475196 -413 697 .7035998477966234 -420 697 .8815844876577812 -423 697 -.46807172635040123 -429 697 .8291839351880866 -436 697 -.39571675329860034 -449 697 1.3533834652102004 -450 697 1.7205095750728427 -452 697 -.4208429375202433 -453 697 .38416688319222736 -468 697 .7166405441640566 -474 697 .46078655905295096 -483 697 -.6799122668762705 -491 697 .8122500109542801 -503 697 1.3079384088729868 -511 697 .6436072203804406 -523 697 -.2797961622296943 -533 697 -.5089553860711759 -535 697 1.19035996769616 -566 697 -1.3019426365809836 -572 697 1.3120698447684502 -585 697 -1.201061574617105 -626 697 1.0256936668536478 -640 697 -.06775210315840316 -667 697 .6230079195645355 -668 697 -.8154626433446436 -674 697 .17241963223534829 -684 697 .06861939618466954 -705 697 .9351179005301871 -706 697 -.08209172524706852 -722 697 1.8699731381538622 -725 697 -1.4079597690885053 -737 697 .3238480895882344 -741 697 .4065298032590328 -746 697 -.2888986330999033 -760 697 -.7066444108513281 -761 697 -.37604173733863566 -779 697 -.6553946028973918 -781 697 -.20511408494000344 -782 697 -.4017005372368904 -783 697 1.5806320045667333 -787 697 .4224779738581268 -788 697 1.3273078073096571 -790 697 .6563148862661885 -830 697 .5211937595623183 -843 697 .04612195191866281 -878 697 -1.222460230083947 -903 697 .10481466788042568 -909 697 1.266336525950087 -910 697 .20143310327741631 -920 697 -.296593023445015 -935 697 1.3576201846068505 -936 697 -.44856917314059164 -951 697 -.5332074210383331 -959 697 1.6342233406738744 -979 697 .9811637845562673 -988 697 -.6202545354386303 -989 697 -.48746683866305274 -996 697 -.7942038992445977 -2 698 2.1457161438189134 -4 698 .13303387341063466 -6 698 .344158443855821 -10 698 -.28543643296988463 -16 698 .9641115610702238 -27 698 .615357739283127 -30 698 -.341458509879046 -35 698 -.7164745742530557 -57 698 1.2889273233344678 -88 698 .9103597073112808 -95 698 -.6454664794850127 -99 698 -1.7854712836275484 -102 698 -1.004537875255898 -123 698 .5378605584544294 -125 698 -.01856070416812458 -145 698 1.0863442667952752 -162 698 -.4460705504782729 -169 698 -.5873678601432771 -170 698 -1.1180954041161084 -171 698 -1.2935121613419684 -172 698 2.0897338130319993 -176 698 -.7025694941343812 -222 698 -.12510146477134182 -231 698 -1.1308269608844939 -235 698 -.8211751420513975 -238 698 .004269394428508488 -247 698 .6496246520074463 -277 698 2.136506993729597 -283 698 -.6614623136525286 -286 698 -.0736444777432436 -311 698 -1.1219909175141127 -321 698 -.11087193308251347 -335 698 -.5056355371368217 -340 698 -.10657327081003558 -345 698 1.0519300021620097 -347 698 -.24074709797463925 -352 698 -.020394536358563364 -355 698 .8387976364106169 -361 698 .6985257176145887 -371 698 -.24264224199200757 -372 698 -1.5980996971825565 -381 698 2.208302187168784 -388 698 -.12478971545090961 -391 698 -1.4039179797926076 -400 698 .644475757715249 -409 698 1.1703062917487959 -425 698 .808650178422156 -431 698 .8484567721060828 -432 698 -.6081594470642919 -435 698 1.0876400895884062 -436 698 1.0320070715059633 -449 698 -1.537714162931638 -452 698 2.4858792728325163 -467 698 -.9314258537703023 -486 698 -.2561942912144764 -506 698 -.8038265285533992 -513 698 .5933431353059899 -545 698 .2675725908222629 -559 698 -.23905247566746213 -562 698 -.803975783102125 -577 698 -.03447207994727931 -584 698 .7267385722538379 -585 698 .23214599237729946 -598 698 1.185699810902068 -602 698 -.2537345098713068 -603 698 .9557251624300372 -608 698 -.34315922307920116 -625 698 -.31264696724707747 -631 698 -1.5073083220858539 -655 698 -1.8315437727938357 -663 698 -.08327151807713658 -691 698 -.11929845937825662 -692 698 -.6699427548198771 -714 698 -.22997251256839657 -716 698 .3165195338392488 -748 698 1.6949757098525944 -751 698 .30086721587776416 -756 698 .5456182232558758 -762 698 -.98034862458599 -765 698 .47856150080058973 -776 698 -.7032945442308057 -780 698 -.8991701355714673 -784 698 .17220854866723287 -788 698 .5915464131958614 -803 698 .44784744713244407 -844 698 2.2095403233637034 -859 698 -2.5145712599843666 -864 698 .09416292778560005 -868 698 1.2862056625558724 -869 698 -1.6070266908243795 -877 698 .3362590864234054 -884 698 -.8583365710682904 -900 698 .5511084808627028 -913 698 -1.233442646321439 -914 698 -2.1666302852742763 -925 698 -.8806157304121458 -933 698 .5210975429830403 -966 698 .4361199215524216 -979 698 .049161439189256834 -988 698 2.9270628696149563 -992 698 .30216116443647095 -999 698 1.9090887659544866 -1000 698 1.0782664485148283 -12 699 -.5196841627967953 -17 699 .23531986128546517 -26 699 .3897297440104824 -32 699 .5173427175275256 -39 699 -.8027449472786334 -46 699 .3786541536425355 -50 699 .005945571552281842 -58 699 -.19391682605018756 -60 699 -1.190816458633441 -69 699 -1.5943430658721272 -92 699 .2737859074941399 -99 699 .19423798966949007 -107 699 -.17905232065942972 -108 699 -.6911221590665263 -125 699 -2.0253777033619724 -127 699 -2.2306773857501465 -130 699 -.2884993013205531 -137 699 -1.7107868219759894 -153 699 .9371469378731474 -160 699 .3822040694577675 -178 699 .24657447328036786 -180 699 -1.1975532377211886 -190 699 -1.7852488088156053 -201 699 -.4914455384598334 -205 699 -1.6125891707070625 -226 699 -1.1453467610439514 -231 699 -.10683279266628913 -237 699 -.6004439576905388 -245 699 .63346066328579 -253 699 .6153311965126603 -259 699 -.6367693617924219 -269 699 -1.2812534434202965 -273 699 1.3439426370750729 -275 699 1.1318272274686625 -293 699 .504808882433817 -295 699 1.1452547468368408 -304 699 1.3475706496921946 -306 699 1.063612647484487 -314 699 .6601966830471862 -317 699 -.9395436511040165 -323 699 -1.2385682718060087 -324 699 -.7610693838931613 -332 699 -.5435572056518564 -349 699 -1.96632912188649 -352 699 .8977213693810646 -360 699 .1274107233959099 -379 699 -.4253496910662169 -392 699 .3024163855978207 -419 699 -1.1646625013620377 -428 699 .7210156604690503 -432 699 -1.7135400104514473 -434 699 .3728922212711279 -443 699 1.22125824072253 -447 699 1.4095974955083124 -468 699 -.7634602652921149 -477 699 1.0519123388439522 -503 699 1.5567435820019604 -504 699 -.09860421513365264 -505 699 -1.3959403929109997 -521 699 2.180143620801296 -526 699 .11731602115363945 -561 699 1.3783613880791377 -567 699 .2672368836096627 -570 699 1.2824203367270628 -572 699 .9030996565738334 -603 699 .6870184009539934 -613 699 .9059244703790074 -616 699 -1.3926406352833123 -625 699 -2.2735602951883798 -628 699 -.2669611522650869 -633 699 -.02844449637964795 -649 699 -.4137869288471462 -654 699 1.080179911546107 -656 699 -1.7376655536653711 -658 699 -.7183292574573011 -659 699 1.5781360743120285 -660 699 .795364055023266 -699 699 .5160346627451733 -703 699 -.8271980676423677 -708 699 -.8262235872626663 -717 699 -2.2363665821026344 -728 699 .5205654551552182 -736 699 1.0931514871138661 -754 699 .27128856350691577 -764 699 .14849571180168164 -789 699 -.19460568878616236 -795 699 -1.0513108177530506 -798 699 -.4030367289007099 -826 699 -.3009957366936212 -844 699 2.259531177201693 -847 699 3.7724307892270548 -850 699 1.1404615407425003 -857 699 -.5145661833708157 -859 699 .18914204933958173 -860 699 -.07677831666983084 -893 699 -1.290262508815454 -911 699 -.23563016478582618 -912 699 .4379624951972276 -914 699 .026713124079952175 -919 699 1.1607291655387 -936 699 -2.0360417727798845 -938 699 1.4875930935567916 -952 699 .689975306533267 -955 699 .9220639119561648 -970 699 1.1641760006633655 -977 699 -1.036141740984061 -991 699 -2.3971162356085025 -992 699 .6664999494549474 -5 700 -.13452591162699737 -14 700 -.34054867429750707 -33 700 -.3905431899804688 -36 700 -.7108448962022204 -39 700 1.2214602754511317 -47 700 .04797385296534255 -51 700 -.18901062067390798 -52 700 .30494207297980513 -54 700 -.443168636995298 -84 700 -.21128648046969112 -100 700 -.08274238951632666 -105 700 -.7575230705492785 -180 700 -.05754829412808293 -218 700 .3104237638169411 -220 700 -.3288824484070608 -231 700 1.5495203702177198 -244 700 -.36583963378199963 -250 700 -.574561437461538 -321 700 -.7642715064481329 -329 700 -.32276370902221724 -330 700 -.7009110258548295 -331 700 -.3130327359400312 -334 700 1.0716369117983588 -346 700 .1621301233453138 -379 700 -.2426926873588906 -385 700 .6407452475836038 -388 700 1.1647030110020165 -389 700 -.3545338411000216 -390 700 .40057119673508773 -402 700 .16385139964631523 -445 700 .960628262619792 -469 700 .5636325305055374 -482 700 .2583335685948053 -483 700 .2621517026045817 -487 700 -.09186487411630262 -520 700 -.7723935049967857 -524 700 .19282059290343606 -528 700 1.045254279751752 -529 700 -.20011293868199004 -538 700 -1.2119961098737215 -541 700 -.015346369285519836 -552 700 -.4365348035432775 -555 700 -.4651300700027634 -558 700 -1.2759546652448228 -559 700 .3887302831648222 -561 700 .19212296438218462 -584 700 -.12327101520941933 -590 700 .4869837535122077 -591 700 -.15443494786900908 -603 700 .2722902354165957 -608 700 .38047175153902785 -620 700 -.2452519978095432 -640 700 -.08463321573481386 -679 700 -.4148992840137589 -691 700 .1893436747789401 -695 700 .1480402228127291 -700 700 -.7257524813650305 -709 700 -.31486681026809826 -724 700 .5669835568789411 -731 700 -.8893291845143915 -741 700 .5028916867281668 -752 700 1.096406138910752 -769 700 -1.2019560774513272 -814 700 .8767012133161324 -823 700 -.2272187903485504 -834 700 .3093988812579038 -849 700 .4232614545213057 -866 700 .42719732604864796 -867 700 -.28512554591797185 -897 700 .548530771027069 -917 700 .7452651486121296 -923 700 -.3838843750024328 -932 700 .46180143744557506 -962 700 -1.5076812972384523 -964 700 -.8336101790757782 -966 700 .013850114227673689 -972 700 .210448180640604 -974 700 -.2688199709543965 -978 700 -.01824908376485082 -990 700 .37658613228661125 -998 700 1.1778505960048342 -8 701 -.0753759705682306 -22 701 .8615072353843253 -27 701 -.2244838249151442 -41 701 -1.2054277569081928 -42 701 -.49651340890788487 -70 701 -.1372943983652844 -74 701 .8219499710012781 -83 701 1.410798611025765 -94 701 .5760525794327085 -135 701 .6578660382657718 -142 701 .1795524402542826 -152 701 .05380173135711602 -159 701 -.03493431217814645 -161 701 .08372190437599394 -166 701 1.3080224430366119 -167 701 .19474646994936545 -172 701 .8123847732323253 -173 701 -.6083983429984047 -192 701 -.4933411099503876 -197 701 -.25116692214126246 -219 701 1.0363530712719757 -226 701 -.42166770750637805 -239 701 -.42527840233301806 -240 701 .29629794042374524 -244 701 .7947499595866493 -248 701 -.32636551283475745 -253 701 .15786472380014344 -259 701 -.19335860451268114 -283 701 -.3211148879185986 -295 701 -.026202445776580457 -297 701 -1.752704901823141 -320 701 1.0336325313975148 -323 701 -1.3881300595121895 -330 701 -1.088968287188619 -359 701 .11883233074403515 -418 701 .9054462405951609 -426 701 -.22919855834006958 -432 701 .7809307745478724 -440 701 -2.0548493050379073 -455 701 -.37438301566554655 -456 701 -.07930930203719194 -461 701 -1.6227281277217456 -464 701 -1.9310521347453835 -468 701 -.7242673827980399 -473 701 .7852587104331203 -491 701 -.41704698128203843 -492 701 -.21108604363549888 -496 701 .12107084683107514 -499 701 1.0251036379912934 -501 701 .8275730556352039 -512 701 -.8074408175804173 -516 701 .3928519730992246 -524 701 -.6098911320389925 -538 701 1.0523878175482444 -557 701 2.162674361310897 -560 701 -1.0761088621233745 -561 701 -.0988635713877449 -602 701 1.1627844171485833 -615 701 -1.1555231003274582 -621 701 .6029002652835068 -631 701 .39707069077833745 -639 701 -.1019606194218832 -645 701 -1.0855053188271626 -652 701 -.28547024401196586 -655 701 -.6727670962163089 -661 701 1.998210748071061 -664 701 -.6069043525180805 -665 701 -1.1068230295214372 -666 701 .2759202674688411 -683 701 .3473773835652553 -697 701 -.745670890889543 -709 701 .9973534497671148 -710 701 -.549975793669141 -722 701 -1.0558388528785214 -737 701 .15511924502491575 -761 701 .30681487721734674 -763 701 1.1314053293055542 -767 701 .6839079137062707 -783 701 -1.010411420104682 -814 701 .46830915004838636 -825 701 -.9459216290631148 -835 701 1.1841989348343718 -847 701 -.09665484951736161 -857 701 .5213680679234689 -860 701 .4662554391237151 -869 701 1.3104314073125054 -873 701 -.4829227253140136 -875 701 -.9397752371702912 -877 701 -.7337403266468487 -885 701 -.3204049267832493 -903 701 -.9882243067520642 -910 701 .2323070580927835 -912 701 -1.9931871994664594 -922 701 -.8559168695746652 -926 701 -.22514976212413063 -929 701 .6276808604986872 -945 701 .7665728713658957 -967 701 -1.9394760837457206 -978 701 -.7429334357778631 -986 701 .8765155286744123 -1000 701 -.638308126237317 -2 702 -1.5882044425899196 -5 702 -1.988794116424848 -10 702 -.57871857534776 -11 702 -1.0188915401197893 -16 702 .37425998956459455 -18 702 -3.005418375367541 -24 702 2.279079208792479 -39 702 -1.4205089725860192 -60 702 1.8235465883569268 -62 702 -.9242705950516809 -67 702 .32606228699037937 -93 702 .7613548838625404 -112 702 .10728386665774346 -118 702 .6239475933606365 -123 702 .8133736636815154 -144 702 -1.6338193680366921 -168 702 -3.176767257858603 -169 702 -.9731787017642344 -182 702 -.01827021859777528 -189 702 .0696108542699308 -190 702 -2.578032663955114 -192 702 -2.0418212157026043 -195 702 -.13190174945699107 -202 702 -2.3162268011481024 -207 702 -1.3231358987691906 -219 702 2.99013183457272 -227 702 1.0380733212206925 -228 702 -2.064173629335215 -240 702 2.7080156099684327 -243 702 .07178821428420099 -246 702 -1.2973102139516044 -270 702 -3.8402116818379826 -287 702 .7297517232802428 -295 702 -.36160244389127305 -302 702 -2.5483224809821756 -308 702 -.11304379938435385 -320 702 .5911582221192395 -327 702 .3547374945294617 -356 702 2.2172859686920625 -370 702 .24434664480746848 -382 702 .11363660363393491 -388 702 -.7589907568020825 -391 702 .8227065021676407 -406 702 -1.6190175676230896 -433 702 -1.697455777986615 -447 702 1.5039245142759827 -453 702 -1.4930946820038995 -471 702 -.9284763173744601 -514 702 .0824380186283808 -525 702 -.04874020627824686 -555 702 -.42370291282572153 -558 702 .1982216948105535 -559 702 -2.2049736602713 -589 702 -1.4700460328618383 -591 702 -.5903980451324984 -607 702 1.2365324849082895 -609 702 -.2191361729936629 -611 702 .17961528742350047 -612 702 .24734547235083715 -616 702 .03772660019498547 -624 702 .9575956751012707 -634 702 1.2433767830541098 -646 702 .4180810225375613 -690 702 -1.9704942096924825 -722 702 -.6699757924753478 -724 702 1.0334511265309894 -733 702 -1.5227671508497806 -737 702 .45478896360292215 -754 702 -.8680088584086476 -756 702 -1.9043062465542249 -773 702 3.050374750836191 -786 702 .41160266337663115 -807 702 1.0576261581001163 -809 702 -1.2138027978201344 -841 702 -.26602866553681204 -882 702 .34067683737777876 -899 702 -1.5964698293914037 -908 702 2.544511655017318 -923 702 1.414502411155414 -926 702 1.139327255342195 -927 702 -2.0701763599990617 -929 702 -.06146417871418711 -932 702 1.7415995644235378 -942 702 -1.2458910673003631 -946 702 1.2284503540203566 -960 702 -2.9255220657518244 -962 702 .4844851514754856 -975 702 -.8073744731346305 -977 702 -.9739172010968362 -4 703 .4521557599268638 -7 703 -.330296149332215 -20 703 -.6090623220161585 -27 703 2.385385648313559 -29 703 .6273200400704158 -32 703 .28793451963987915 -47 703 .3612600293098796 -52 703 2.0365194270054423 -96 703 .37828253427632974 -107 703 -.010856114049959235 -120 703 .30101892429818866 -123 703 -.8058391873382127 -138 703 .8181071759179908 -148 703 -.5002577576994824 -149 703 -1.3337373657737328 -151 703 .13378331982337835 -152 703 -1.4386180336035084 -166 703 -1.0497672457129998 -183 703 1.6263748096827633 -206 703 -.20467926416075877 -208 703 .22128682673612926 -228 703 1.8087685241336307 -256 703 1.5288293295714306 -268 703 .1943726086025097 -270 703 -.947191723154302 -291 703 .5447088574006074 -292 703 -.9879174099653647 -317 703 .8074729798087885 -319 703 .6430303578371392 -321 703 -.5542482040736122 -323 703 -.07600047727394739 -339 703 -1.2580920138529086 -341 703 -.42969163276185524 -342 703 -.8071905238067243 -344 703 2.0320644564659878 -348 703 .3019105599723404 -354 703 .5594237626962958 -365 703 1.176942753702395 -393 703 .3315105380584194 -398 703 .013894099858021244 -404 703 .21416497963444503 -408 703 .3913530324683861 -416 703 .21547391666922736 -428 703 1.8480947171473507 -434 703 1.2645575950861876 -435 703 2.241480273691563 -454 703 -.9304069715857392 -463 703 -.6475919474013481 -474 703 .3132216574616951 -505 703 2.419807345940097 -506 703 1.856028295904065 -512 703 .5632130443846498 -514 703 -.5664849796038645 -516 703 .4531435410558884 -517 703 -.23078077272237063 -523 703 -.30120943694728625 -563 703 .25323106704678916 -567 703 -.6625121765083204 -573 703 -.28710853467086006 -586 703 1.006012580617814 -591 703 1.6544595495588315 -595 703 1.4742451213449685 -604 703 -.5847048405474775 -607 703 2.0885030856474387 -620 703 -.6665575199192515 -643 703 -1.3375208580451694 -644 703 -.8570684830485682 -659 703 -.271001319882725 -672 703 -.8404080315303231 -704 703 1.120312219088182 -717 703 .40403253035427633 -720 703 -.2701803243965753 -727 703 -.7919800022168785 -763 703 -.00040097297873164356 -798 703 .44850294850398364 -822 703 .3444137211781811 -839 703 .10287749668564213 -841 703 .8348696106232557 -842 703 -.44444785603702097 -847 703 -2.2142483510689317 -848 703 2.0463877467903466 -868 703 -.3213637501521357 -869 703 -2.671853230931224 -877 703 -2.7677624867306143 -911 703 1.1779951080069595 -912 703 -.6670719209640288 -917 703 .12773420835268684 -919 703 -.7288635142371926 -920 703 -1.4815332465297057 -923 703 1.250014060991182 -942 703 -.36056448682555087 -953 703 -.12693348737083432 -972 703 -.5712173046475442 -997 703 -1.9424135338797988 -1 704 .166904724673881 -2 704 .7457950175628639 -12 704 1.1808243886455163 -25 704 -.6280152537178134 -40 704 .14636895954444254 -42 704 -.4900316947961684 -44 704 -.9209696323639289 -59 704 .5037875120330464 -61 704 -.2649419081048227 -63 704 .8962456486473225 -98 704 .11426670291276511 -116 704 -.9329009241335459 -120 704 -.35569177612550035 -129 704 -2.5877725949593477 -141 704 -.6767025760435218 -148 704 -2.6451013564375816 -149 704 2.3075564314006116 -153 704 -.68332104085229 -159 704 -1.526802954670785 -169 704 .9377117519900868 -170 704 .6663714387521436 -171 704 .009238672303316361 -172 704 .8132700064580959 -176 704 -.48647240611004616 -178 704 -.6224042037946129 -179 704 .37421870790357536 -214 704 .09319717959660109 -219 704 -1.738918771183204 -227 704 -.12422255760751749 -246 704 2.444291534199749 -253 704 .7172777505531471 -254 704 1.5893772626376548 -273 704 -1.2134679853042845 -278 704 .7748156950090143 -284 704 1.305112120529371 -294 704 -1.255107086815781 -306 704 -.6364002554858043 -324 704 -2.1641567243974946 -328 704 -.2483222703962704 -330 704 -.7325931598060291 -343 704 .6415595267952949 -347 704 .8761713614758668 -353 704 1.593655081654543 -376 704 .3046012037611158 -379 704 -.46848702506712314 -398 704 1.1197467113601292 -431 704 -1.2222597294038025 -440 704 .2938887823797159 -444 704 -.506900323590592 -472 704 -.7866159265705749 -478 704 1.486741133898086 -481 704 -1.623557040291469 -490 704 -1.7686811270154374 -509 704 -.6709405142106131 -520 704 1.2094228540803207 -525 704 1.0418439874698793 -540 704 1.6538466116539863 -542 704 -.011803714589382877 -560 704 1.363672984786371 -562 704 .7690539342038518 -567 704 -.8077089800280639 -588 704 -.9388548720299569 -599 704 -.05133126801177611 -603 704 -1.9153872301565174 -614 704 -.5455576201327786 -640 704 -.9702860924502378 -641 704 -.9621462680140238 -642 704 .734951894348728 -645 704 -.3493395761451383 -648 704 -.3605110104687449 -656 704 2.342654113764628 -657 704 -1.38184983852406 -667 704 -.8572474143852986 -686 704 -.7302467322752922 -706 704 .6839192523282942 -708 704 .628082098565681 -725 704 .012386090654856963 -729 704 -.49672562941964576 -734 704 -1.1519112165639827 -739 704 .37821821278896484 -754 704 -.0658030461157602 -755 704 -.11254791252138296 -759 704 -.22836881191531844 -772 704 1.1891532519327213 -801 704 .7894266196753733 -820 704 .20035545803914212 -822 704 .17089262433097457 -823 704 -1.7106796942720035 -824 704 .4568108855629299 -837 704 .05684546751983752 -843 704 .49100638513289446 -866 704 .7275577812193338 -870 704 .3703050822435021 -871 704 1.596148230347477 -881 704 1.03547000791454 -882 704 1.2969974772725372 -905 704 .4826676966590773 -912 704 -.694282908032512 -945 704 -.9822040723009697 -963 704 -.8587495723000301 -964 704 .0679313797689509 -979 704 .863112001408278 -1 705 -.7427873999426415 -12 705 .053711044272013266 -25 705 1.0369742914338145 -30 705 .44205744281872855 -40 705 .5582305381924345 -54 705 -.24369882649388186 -56 705 -1.0081797393392353 -60 705 .06790042612853048 -61 705 -1.1166049642480134 -68 705 1.0657074440828658 -71 705 .27935729994128505 -78 705 1.1203642757961485 -80 705 1.3313961426659962 -87 705 .2841424886178606 -99 705 -1.0854682683518155 -106 705 -.8812926983996496 -113 705 1.181204110163169 -125 705 .38540519495328174 -129 705 -.9440726024111998 -138 705 -.5477708186758172 -174 705 .5164356584504827 -201 705 .3535390796016221 -203 705 -.0997901606040025 -205 705 -.3103363785104968 -219 705 -.6883491168664544 -227 705 1.4699019703762823 -243 705 -.8366613402061569 -249 705 .732471216866537 -282 705 .14380706991226436 -298 705 .9532442172400268 -305 705 -.16423388353561497 -316 705 -.2773981223758465 -321 705 .061391563698446526 -344 705 -.6041219994002903 -358 705 -.2891396592428061 -362 705 -.5892461129884079 -365 705 -.14899971555966485 -373 705 -.9433056119017343 -380 705 1.2764710640886108 -390 705 .9960588696574281 -414 705 .3681699469232874 -457 705 .5370318619314776 -471 705 .30349339015650706 -473 705 .22566656347094372 -475 705 .15043751897780983 -481 705 .1667267498784841 -493 705 -1.24161343818372 -503 705 -.6237219704493926 -504 705 -.41403478849039 -519 705 .8285967577310369 -520 705 .16699165380244851 -529 705 .4806815053880814 -534 705 -.9889911269383405 -556 705 -.8874659492355338 -558 705 -.007170032003330301 -579 705 -.8508923019563723 -601 705 .9111386470053133 -622 705 -.9442457180708911 -635 705 1.4982437281793182 -638 705 -.9286163004357079 -642 705 .49942361262660273 -647 705 -.12064720487663474 -653 705 .14234354284970305 -674 705 .3710186471756484 -689 705 -.6409196716686583 -701 705 .29832495275311444 -711 705 .24593651048605042 -745 705 .39358631820357026 -746 705 -.5111137696370767 -752 705 -.35768941222926104 -754 705 .7861568834097528 -761 705 -.1815472738116759 -768 705 -.02125686907694583 -772 705 -.27043254191042515 -778 705 -.08713380356480613 -792 705 -.8129388199534587 -800 705 .15301907927850686 -826 705 1.0008327253943343 -827 705 .9458340767575124 -835 705 .24008947090013402 -837 705 -.21207552667672955 -841 705 -1.0468366903228916 -860 705 -.2919776028676031 -862 705 -.4767978398517037 -869 705 -1.5840166754309624 -876 705 .6938339116388977 -877 705 -1.751262775592618 -892 705 .31173951114630966 -894 705 -.7306862604282344 -924 705 -1.475964460343646 -931 705 -1.1284563459821444 -934 705 .16559948646036446 -944 705 -1.537707471740424 -946 705 -.9090951345689525 -965 705 1.1993512430420692 -967 705 .43287780637817636 -971 705 .4544678784517986 -974 705 .40444433291189347 -981 705 -.17263123396535068 -987 705 -.5041320633063907 -14 706 -1.573612382127422 -21 706 -.9980106900586208 -52 706 .2775198690339906 -54 706 .8431403403825196 -61 706 -.7139574892439811 -62 706 .1642109521080061 -70 706 -.7048596143161504 -73 706 .23707743874100096 -80 706 -.8274179541788477 -90 706 -.7053457388166896 -91 706 .44611688423243556 -98 706 .6419745659087535 -112 706 -1.0128801251128996 -125 706 -.8957551816691265 -129 706 -.45533945899808564 -140 706 -.2848491414439949 -151 706 .9897637244156441 -157 706 .7534381096810929 -167 706 .973114822406503 -177 706 -.3256910037167763 -198 706 -.27665616132757487 -199 706 .19267276272112355 -206 706 -.16674198609362562 -216 706 -.34839843474291093 -223 706 .8779173041780786 -231 706 1.494719109322754 -243 706 -.41946452559831904 -258 706 .8898202639478751 -262 706 .7060240828345068 -273 706 -.3072591332407121 -288 706 .06217661942917557 -290 706 .13733915055424933 -291 706 1.4480890042816776 -295 706 .37956115948766234 -304 706 .8666770406546157 -306 706 .9862845482861288 -310 706 -.7189854716813209 -343 706 -.225120942555943 -347 706 -.4908696192778799 -366 706 .08483962261517372 -377 706 .5741149926444289 -383 706 1.3927553571698472 -418 706 1.8677544768437455 -425 706 -.1923842655792079 -428 706 -1.7574571788324875 -435 706 -.29588705351746825 -446 706 -.5487725532415222 -455 706 .45277401576409193 -471 706 -1.9418827001550947 -472 706 1.099067096555665 -540 706 -.2438435279621402 -555 706 -1.020002943278939 -579 706 -1.3596923124341185 -582 706 .043134909809553354 -584 706 .7519243166590343 -590 706 1.0949082075810594 -630 706 .7379551311600336 -639 706 -1.691763288861876 -642 706 -1.3217162468762726 -643 706 1.1399016294763884 -653 706 -.963745639540696 -655 706 -.6667011882316458 -665 706 -1.7230530940752673 -671 706 .5209564503118809 -673 706 -.7088758721051613 -677 706 -1.0075316458580732 -685 706 -.5464274584326407 -688 706 .18108676962764989 -692 706 -.4284828524328434 -696 706 -.4627893113390114 -697 706 -1.0011415378696613 -701 706 -1.6373928576251013 -705 706 .8646775883713167 -706 706 -.22547046332177667 -725 706 1.2105457381636198 -749 706 1.0941737360924506 -754 706 -.6781063258918062 -762 706 .6077145490814891 -765 706 -.9544508409677945 -766 706 .5085934455172336 -769 706 -.7989084286978638 -780 706 .1939025780691079 -781 706 1.17525803073764 -785 706 1.1282557190661096 -788 706 .5155334327438627 -802 706 -.3048238303761757 -805 706 .11408024444609957 -809 706 1.3695198088927452 -820 706 -.6528125550984004 -824 706 -.47429368671104755 -832 706 -.44047238827917296 -854 706 -1.0440495354348955 -876 706 2.078746436931581 -883 706 -.7829877290080554 -889 706 .7759836344150669 -890 706 -1.1064359072626224 -896 706 .8031047300678797 -899 706 -.055672497519518443 -907 706 .5337912507645757 -908 706 -.03711004227118175 -914 706 -.2788351126595736 -918 706 -2.272674727192041 -919 706 -.798399325415566 -930 706 -1.035237121221167 -939 706 .13365279235321625 -954 706 -.8908984846351924 -973 706 -1.613212355904288 -989 706 .9967565763279858 -993 706 .18760789781305587 -3 707 .7050847793829458 -4 707 -.5093337890013675 -7 707 -.22829609400824083 -18 707 .5865877304052023 -22 707 .17283593284618526 -27 707 -.5266072418872129 -31 707 -.1094957224640471 -36 707 .3182072903576742 -50 707 -.3505704886193187 -63 707 -.05355190598076377 -84 707 -.41852995474850563 -97 707 -1.1149966315158433 -105 707 -.06097829229292795 -111 707 -.5745959582312319 -118 707 -.3868498167187873 -122 707 .45910764500666235 -124 707 -.05032657266505136 -158 707 -1.2542927690141388 -164 707 -.7686273601040883 -170 707 -.40286591335066874 -174 707 -.3008538140009945 -183 707 -.24101490908543627 -188 707 .2570468052537598 -220 707 .47573477614383985 -238 707 .3002154135245717 -243 707 .058459609768321236 -261 707 .3180287475131652 -262 707 -.2992886079638185 -266 707 -.3001380443115277 -276 707 -.17768119659828446 -291 707 -1.5544889529023806 -300 707 .010639523965729147 -307 707 .031006559271068372 -314 707 1.1859683807513697 -336 707 -.6852594406872718 -343 707 .9874100371321219 -346 707 -.1693686295646685 -347 707 -.2556526753911663 -350 707 -.45077683234839727 -359 707 -.47569865886791407 -373 707 .2204510702688437 -388 707 .12943055000660136 -404 707 -.39348316632833447 -405 707 -.18674655747319685 -411 707 -.7259434832385703 -425 707 -.21871990685372095 -430 707 -.24107098668310678 -441 707 .27740701497108994 -453 707 .20161527795904943 -496 707 -.04527325643052188 -497 707 .48436219459033814 -504 707 -1.2973638156662752 -520 707 -.618606140159996 -526 707 -.43639425063709525 -527 707 .211466136137536 -533 707 -.24366762917962187 -541 707 .6265797835489364 -558 707 -.2316218835138777 -584 707 -.46855079681007883 -587 707 .4873930924854496 -593 707 .1114207214406561 -614 707 -.2531152870097914 -620 707 -.5858340696954394 -623 707 .4922470033850235 -627 707 .689688402305729 -630 707 -.5448145286713418 -633 707 .6440972645567076 -636 707 -.056154357945288044 -648 707 -.6204682536618612 -659 707 -1.0808767464682167 -665 707 1.041932350486736 -688 707 -.18387593879159198 -692 707 -.6202077638347233 -701 707 .24779327305973456 -710 707 .19667647513768421 -716 707 -.9742252250663013 -723 707 .08941276257235771 -769 707 .17412417870909874 -775 707 .10289723418619925 -783 707 -.09898532845043773 -811 707 .2606701292237502 -812 707 -.30266880201763124 -830 707 -.37988470406092106 -835 707 -.6514868464609024 -840 707 -.08973423253604872 -863 707 -.6558521601212759 -864 707 .12335785670339565 -866 707 -.70491257708981 -912 707 .6533596603796631 -915 707 -.2572851868570343 -944 707 -.6667609069905206 -946 707 -.761105472623648 -948 707 -.829423410323693 -953 707 1.144911891151874 -956 707 -.7614826548221296 -963 707 .94720783949029 -964 707 -.6924576699669335 -968 707 .27467557976019197 -973 707 -.522547390416455 -17 708 -2.0466552716853528 -35 708 -.1668725313957028 -42 708 -.12089907441647857 -49 708 .44607015379863996 -51 708 -.16631475004921908 -52 708 1.9288712830453871 -57 708 -1.450010573648798 -60 708 .476010264463906 -66 708 .5322776407082924 -72 708 -.3476326876462869 -87 708 -.8603554044010253 -103 708 1.1737902450486415 -118 708 1.4101603943352972 -120 708 -1.2486714538396158 -144 708 -.052870611175421245 -148 708 -.13582959694713986 -149 708 -.2480581491636164 -161 708 -.29086815253385256 -188 708 -.20950826569188336 -201 708 -.09109226457783907 -216 708 -1.088906574132633 -243 708 -.651273139530269 -249 708 -.4007701044863742 -263 708 1.1277875927528387 -277 708 -1.6094046600160021 -291 708 2.228921553058441 -297 708 .9578280703782327 -301 708 .5849471320465985 -315 708 2.1139714097538587 -317 708 .17503374878681582 -326 708 -.4384476817654812 -357 708 1.3595056050852918 -368 708 2.5760540673142183 -384 708 -.3060465606656144 -396 708 .20455721563712276 -412 708 .5214118013640394 -422 708 .03792722220913044 -426 708 -.9599149304060528 -427 708 1.3904822851395058 -432 708 -.803063884566392 -434 708 .4592579340305815 -455 708 -2.3434043428352798 -476 708 -1.6587291607869303 -477 708 -1.648514956679469 -481 708 2.238895583296851 -506 708 2.2650139463885233 -518 708 -.4681849073679252 -553 708 -.12816112163080415 -556 708 -1.3281660162086821 -560 708 .985296474906997 -575 708 -3.002752338576337 -584 708 .45176378380253623 -587 708 -.07909205030252314 -591 708 .6239887514227817 -603 708 -.4933586297372521 -616 708 -1.2136962622923355 -626 708 .4083673991466234 -648 708 .07773696112703883 -664 708 -.3834549813847966 -668 708 .002761066652840455 -671 708 -.14844140104637582 -685 708 .11548340169636546 -693 708 .021173049707409693 -705 708 -.14999283411999326 -706 708 -.969160991680937 -720 708 -.2515839524707155 -722 708 .8798512027123532 -736 708 -.374106359888732 -738 708 .05351912994548001 -741 708 -.9065704208159333 -744 708 .438173677065412 -747 708 1.1093889546240632 -754 708 1.2674559769323608 -761 708 -.715422003524946 -763 708 -.13380835929474041 -764 708 1.2062581076018641 -782 708 .03970418806243378 -791 708 -.04827463408895294 -803 708 -2.3398890857331582 -812 708 .9245489487951807 -818 708 1.313619048547492 -821 708 -.6789971354643268 -827 708 -1.6967670923901648 -828 708 -1.6024610492139957 -861 708 1.472856721062516 -876 708 -.7266860648510016 -884 708 .16494134864994386 -915 708 -.25540396186725434 -917 708 -.5890344506472789 -919 708 -.13410034965597784 -933 708 -1.0917217028756916 -941 708 .3639272402800671 -969 708 -1.6538144899406904 -985 708 1.5161320157632847 -995 708 -1.1058903310943218 -999 708 -.9898005365074305 -24 709 .5272282010585454 -28 709 -.2944720125620882 -29 709 -1.0608609182147046 -30 709 .30684053758511787 -34 709 -.2775956252367901 -47 709 -.8878215194137045 -54 709 -.11539502319675218 -60 709 -.9028169108408511 -66 709 -.22841458059524425 -80 709 .264340756585139 -88 709 1.2292502769932578 -93 709 -.9505130921332209 -96 709 -.38211807055037206 -130 709 -.5866624521799677 -144 709 1.3163686349747468 -147 709 1.701462179372974 -174 709 -1.0596491033016817 -198 709 .8475646647619934 -205 709 .6780786179408519 -206 709 -1.0631992691774788 -208 709 -.5733320630332908 -246 709 -.5072330533737135 -261 709 .19641123562787074 -266 709 -1.0324410513257458 -273 709 -1.6248821599787222 -278 709 -.5314688578574236 -292 709 -.056608249058955395 -307 709 .6014416770802429 -310 709 -.3722715555468354 -318 709 -.09820457938984167 -326 709 -.1890174307347785 -327 709 -.7044847268081343 -330 709 -.6350067970198198 -343 709 -.14457113090033613 -346 709 -.07476158676686837 -354 709 -1.1580995287975224 -356 709 -.916456535250506 -357 709 -.5372481163610234 -366 709 -.08464238131555726 -370 709 1.258806985077881 -377 709 -.28252747064974765 -397 709 .04849104850177306 -418 709 1.2999494901934752 -419 709 .05386977304104454 -463 709 .271932862463519 -466 709 -.7366073546916287 -479 709 -.27535400434808355 -487 709 .6041205303834816 -489 709 -.6641837652839055 -490 709 -.6238184890200817 -492 709 -.06453968378269886 -498 709 -.9620262709307064 -506 709 .7304825906530411 -528 709 1.7583616629224426 -529 709 .6968649670136746 -535 709 .847823685065044 -563 709 .1516910228036022 -588 709 -.41847060196889074 -603 709 -.7492357405778409 -632 709 -.11417163235008579 -634 709 -3.326498349222694 -640 709 1.204877614414361 -642 709 -1.743418248097997 -649 709 -.5366075984838437 -652 709 -1.1453137418355193 -654 709 .5268592331285741 -655 709 -.2638748137112072 -664 709 -.25005127565908986 -665 709 -.8029306547174939 -681 709 -.45062676336628965 -685 709 .0025170496619706523 -699 709 .8062590741290352 -706 709 -.33325617061554 -722 709 2.1536153110341045 -726 709 .5161333503310924 -746 709 .25709879532870583 -752 709 1.092404619486591 -758 709 -.28738737751119803 -775 709 .264095202631339 -783 709 .4683451584222863 -798 709 -.28814005664992237 -799 709 .6356496995787099 -809 709 .26880001624375016 -810 709 .09477836618212693 -812 709 -.6878152351048663 -818 709 -.07527270185701534 -819 709 -.02360617814949613 -850 709 .5848906191975667 -853 709 -.4405825240457813 -878 709 .05892105266664095 -894 709 2.0965756872829377 -896 709 .3744469482971491 -906 709 1.3738881530132356 -923 709 .07438362304986866 -943 709 -1.3849417749989181 -951 709 -1.9704093044814175 -953 709 .2506488165523012 -959 709 2.474643554826475 -968 709 .27248472792199796 -972 709 .08080593338141459 -975 709 -.04823996900020057 -981 709 -.19937118779857585 -985 709 1.0841650258244162 -10 710 .40690367012174533 -13 710 -1.5612918333911223 -16 710 -1.6423330170223878 -21 710 -.680996856074815 -29 710 1.4163891418803551 -31 710 .1165825399536527 -48 710 -2.40870560705078 -51 710 1.0201553001100367 -53 710 .9542522496187393 -58 710 -.5309548091054053 -70 710 -.6779499890207261 -72 710 1.1815592957193892 -73 710 -.4160550711358 -74 710 1.7642632420576734 -102 710 .7577009726618988 -103 710 -.8611404733676578 -106 710 -.13846088935314027 -119 710 1.7055028536440124 -123 710 -.6179709753407888 -136 710 .05072607663743498 -137 710 1.6101678662020804 -138 710 -.4438704599966229 -146 710 .329957671241592 -152 710 2.4022470799180704 -153 710 1.5711176505734894 -178 710 -1.075960365157226 -224 710 -.9069037041580136 -234 710 1.2075526919548834 -243 710 -1.27102992022906 -292 710 -2.027847950640936 -295 710 .40941780332910493 -298 710 1.3728529792947508 -301 710 .7959855770499975 -310 710 .4792580697793366 -313 710 -1.8400288609478275 -320 710 -1.7480989792035642 -341 710 -.7162986594998457 -358 710 .656661560727353 -366 710 -.15461196091512364 -367 710 -.14434176670691531 -373 710 -.34728100516652644 -402 710 -1.3752270684713803 -408 710 -1.1599459818729787 -413 710 .29096791100876296 -414 710 .8143995236970878 -419 710 -.5193685348606509 -464 710 .929209801805925 -484 710 .6958331278612024 -521 710 -1.4212740164963136 -530 710 2.120913972577625 -534 710 -.6721280697146598 -544 710 .3382059503376924 -547 710 -.6874519864396915 -552 710 -1.801691296159953 -563 710 -.21914692133275565 -570 710 -2.518703528388562 -602 710 -1.0482421042363348 -603 710 .9931886993625121 -604 710 1.481914478250211 -606 710 -.5026232055040213 -613 710 .2698429262218023 -616 710 -.19370203168869096 -617 710 2.395632057240698 -634 710 .45133964584364494 -650 710 -.7694975060493353 -659 710 -.8037248816076541 -665 710 -1.7153354214898038 -681 710 -.13999157970248538 -683 710 -.633582767078627 -690 710 2.2377531318779615 -697 710 -1.5888664686075635 -707 710 -.4951881620360842 -709 710 -1.4039489285548161 -727 710 -1.1473862695727972 -730 710 1.08551086777844 -731 710 -.05303780525440817 -736 710 .1173088159841899 -751 710 -1.7707285077061021 -757 710 .30668488430761925 -760 710 .3808618095105558 -766 710 -2.6091558052862234 -794 710 -1.9804756354794957 -803 710 .4846984325401426 -807 710 .9876657153954533 -813 710 .36133786031929116 -833 710 1.4019997104119448 -838 710 -1.371813161874464 -840 710 -.6301642873220261 -847 710 -.5233733079778599 -856 710 -.4308794741055344 -865 710 1.0862598855394048 -871 710 -1.2119071657974927 -888 710 -1.8685288252916914 -897 710 1.4924543932963485 -899 710 -.025228283329312956 -909 710 .6126456115871153 -910 710 1.1007307542324547 -931 710 -1.177302490212755 -942 710 -.12083857099693171 -944 710 -2.322671928138144 -947 710 -.9975753296729322 -968 710 2.120593972726506 -988 710 -2.4237202993653075 -989 710 -1.444227320019832 -993 710 -1.357000520882965 -1000 710 1.1940569786292823 -1 711 1.4547643093397353 -7 711 .7585610769584777 -17 711 1.3164025508226362 -45 711 -1.398133510015954 -63 711 .2732527202351259 -68 711 .002749053020596623 -77 711 .52965242436168 -88 711 -1.5677470270796834 -96 711 -.4324865511820175 -106 711 .5472901122381256 -125 711 -.13149428902660876 -132 711 .9931974209608647 -133 711 1.492373398483121 -136 711 -1.1402043980357088 -138 711 -1.982702129275144 -140 711 .8467978335749178 -161 711 .0833678789238762 -175 711 -1.4590320846051987 -189 711 .8502269891446903 -192 711 .8227083364222519 -205 711 -1.1158679610996745 -207 711 -.6411268382781915 -211 711 -.2705550678313295 -222 711 .7020987940629998 -247 711 -.8742197172194451 -252 711 .3139821893201796 -279 711 -1.2457446607283453 -291 711 -1.0113277336872597 -298 711 .33749555242682433 -300 711 -.8333101438397028 -302 711 1.7351229394643903 -306 711 -.5777101488659577 -310 711 -.8961642703398746 -317 711 -1.0412617570171696 -324 711 -1.0801878241702627 -327 711 -.1866347846698791 -345 711 -.6161165670591885 -347 711 1.0155393488839197 -350 711 -1.34204145344857 -361 711 .23404354688257822 -369 711 .0860812122509288 -380 711 .10964574910076258 -389 711 .2774300200979793 -392 711 .9111361357244291 -393 711 1.044537015798355 -396 711 .6344860090508578 -398 711 1.6546069591380488 -408 711 -.926833437998131 -415 711 -1.0583484874685458 -416 711 -.555844571647674 -432 711 .9198317269321205 -444 711 -.5238619037626953 -460 711 1.7629904139316637 -467 711 .25089103427905174 -471 711 .8171265278103803 -473 711 .29934535314983324 -478 711 .76851673303289 -493 711 .011957538889418362 -494 711 .06445053337898493 -504 711 -1.772450013987461 -517 711 -1.7279677892067058 -527 711 -.4218251236208172 -529 711 -.047330622802967987 -538 711 .36167646922973185 -543 711 -.4131898695265187 -544 711 .250568470660064 -572 711 -.8961185696685818 -585 711 .6586242773382184 -586 711 .5071039405234355 -590 711 .9378650660244618 -594 711 -.11109011897345919 -617 711 .9420911429875038 -625 711 -.3707510105582856 -633 711 .3037484911549107 -637 711 .2657137296624764 -640 711 -1.0901291582373511 -652 711 -.49764313612619826 -661 711 -.03412351200342695 -664 711 1.3852985378099614 -671 711 .5642220601309174 -677 711 -.49092924273490607 -680 711 .63600448463584 -701 711 -1.0064285489628406 -735 711 .7356185550189701 -737 711 .40744521439530507 -738 711 -.40298493588233936 -739 711 .5583196300386002 -743 711 1.5639258277585812 -748 711 -.7168267742231937 -762 711 1.0803692410473515 -778 711 1.6179724784618006 -786 711 1.520216268650087 -797 711 .2561643876013977 -806 711 -.7345065039434497 -808 711 .6669378755894033 -811 711 .22004965977008284 -812 711 -.7475501919669718 -841 711 .14072331072613248 -843 711 -.014833028081919185 -857 711 -.685092749949451 -862 711 -1.295907585424113 -865 711 -.7966293596461932 -867 711 .16619682367993704 -870 711 -.23164990757760937 -884 711 .07629495128887692 -895 711 -.662775931313924 -908 711 -2.190951135490119 -919 711 .7709294699324141 -967 711 .3053270230504464 -973 711 -2.02925731537905 -986 711 -.1775760370511072 -997 711 .9081792642570831 -4 712 -.7523601403542073 -9 712 2.3141656147676906 -23 712 .6938459617343465 -30 712 -.9621763086552672 -42 712 -.8882284218128953 -45 712 -.7699331790773586 -52 712 -2.8587257775064434 -74 712 .24789326433496064 -81 712 -.02285364400860837 -85 712 .2303394389732931 -93 712 -1.1163489809086717 -104 712 -.9302867141153928 -124 712 -.5906341338865597 -127 712 .05169206731943504 -129 712 -.7158075254865316 -140 712 1.3507776276000734 -180 712 .31036150641952664 -183 712 -2.3424262902633717 -184 712 -1.110841589476369 -187 712 -.6250673560645702 -193 712 -.5725887801118604 -194 712 1.0469179533419304 -196 712 -.25824177954338623 -203 712 -.7717209938909906 -205 712 -1.9376466958136755 -207 712 -.47135817667031915 -208 712 -.37334482003816505 -216 712 .2680908794808162 -220 712 -1.19723480109911 -244 712 -1.2879423496561133 -252 712 -.2363697636534247 -256 712 -1.7022256477314528 -286 712 -.8707990414381832 -291 712 -.9954229263544925 -316 712 -1.010642616858471 -348 712 .054769176893416954 -363 712 .5651423957699839 -378 712 -2.4930125275106865 -400 712 -.23977418909937726 -405 712 1.071713740558608 -418 712 1.1857140045949368 -427 712 -.7215514762485773 -441 712 .9457422113343187 -444 712 1.0940994231753323 -489 712 -.8193452552497204 -496 712 -.04342934813523778 -514 712 -.5752853508081953 -518 712 -.4762541115818346 -523 712 .8693315204160813 -538 712 .9916837757314618 -543 712 -.7108701451103993 -555 712 -1.5455679723483522 -566 712 -.8935144890614434 -587 712 -.6560702047346223 -591 712 -1.837320342445224 -603 712 -1.883726999709893 -607 712 -.8437652696385314 -628 712 -.1265406890356904 -640 712 -.46169757549485113 -642 712 .08367285469447408 -648 712 -.7753180453495069 -650 712 1.0660079344744369 -651 712 -2.0477608162675023 -657 712 -.28665177046087575 -669 712 -.17361533938119822 -678 712 -.1013872602181734 -680 712 -.10537852310189369 -684 712 -1.1166745210087523 -697 712 -1.0166199728774428 -701 712 -2.828315102644423 -702 712 1.3128498599317036 -706 712 1.3020752445366788 -734 712 -1.27352113548899 -746 712 -.3622814917304018 -749 712 .8633142639618774 -750 712 .06283454064740188 -795 712 -2.3409705829867464 -801 712 .733741446289208 -806 712 -.7456972124474877 -816 712 -1.617154882390033 -820 712 .8085782625402337 -825 712 -1.2365269049400753 -827 712 1.895443146426197 -829 712 -1.3830221956637947 -835 712 .18157420490799525 -844 712 -1.7837790428293183 -854 712 .2160408339624677 -857 712 -.8193297783143303 -858 712 -.9405903590545999 -864 712 1.6954368444443333 -868 712 .25420224534423586 -883 712 -.3457201044749377 -904 712 -.3360819908056948 -908 712 -.38446221460057456 -913 712 .7833598819619262 -915 712 -.005136738175596976 -927 712 -.6949881426910987 -929 712 .9086247096592862 -930 712 -.5820607499197392 -967 712 1.0516505743817537 -968 712 -.5866141096063299 -992 712 .32517783854845683 -1000 712 -2.4888752065814277 -1 713 .18797473995926742 -13 713 1.0276634190455307 -15 713 -.8126522914067583 -30 713 .046308576434010616 -41 713 -.027223726272901316 -55 713 -.773890291196152 -56 713 -.5523511388499664 -76 713 .05551664607907869 -87 713 -.5055675857903152 -103 713 -.3890023160831022 -109 713 -.734755509900224 -120 713 .7135598304785571 -125 713 1.553310722667998 -129 713 1.8082227405430304 -156 713 -1.0746599135972574 -177 713 -1.2806936289441688 -184 713 .782376802152168 -189 713 -1.1610761374595784 -208 713 -.7002533754003574 -224 713 .36255657150886983 -229 713 .26377921877192695 -231 713 .5540364318617091 -251 713 .06813026553446272 -252 713 -.26112021964672594 -262 713 -.5930882760021238 -263 713 1.5103014264486583 -285 713 -.7213652289080341 -293 713 .6748489202151683 -299 713 -1.0396070325690767 -317 713 1.2456028240220045 -325 713 -1.9964377798305666 -328 713 -.09880169606095018 -341 713 .20239935698014824 -352 713 .5887284586340747 -360 713 -1.1301504230257278 -369 713 -.2442828131019465 -398 713 -1.1403609436266726 -404 713 2.0631257314114735 -410 713 -.9655690274375688 -413 713 .9543317053033824 -416 713 -.410928506820498 -423 713 .04616521452454178 -424 713 .541647175087543 -440 713 .2877403130198129 -449 713 -.7642723451264813 -452 713 -.3914989380651891 -453 713 -1.15222628407882 -456 713 -.2768518794782071 -462 713 .3605802826328136 -486 713 .5386869797787663 -488 713 .5851094291104081 -503 713 .36204171016051667 -507 713 -1.1227333339971497 -512 713 .6844698391238505 -515 713 -.9313552630816881 -526 713 .036084122238775114 -528 713 -.16294968948932234 -534 713 .01140444702450702 -541 713 -.8041804711448219 -543 713 -.050841229113043514 -555 713 .33263744592816274 -560 713 -.21211659677400815 -562 713 1.2587222646649037 -575 713 -.15622191218576073 -580 713 .445924459561207 -600 713 .6123321418566462 -605 713 -1.1816447694553172 -612 713 .6667792742543814 -622 713 1.2601809004189772 -628 713 .1362460129610804 -632 713 .3790307054654697 -646 713 -1.1028214879584703 -647 713 .6840208679788076 -660 713 -1.2639960928572829 -666 713 .9839094804815893 -675 713 .46237055236386093 -706 713 -.6232210056295323 -712 713 2.1798067085420296 -740 713 .8336200197796015 -752 713 .23279000863223825 -768 713 -.16990763115911345 -773 713 -.033810541724179466 -775 713 -.17476748257097807 -776 713 .5046546250989807 -781 713 .23192238564280873 -793 713 -1.3343108064584337 -794 713 1.1586383150794122 -795 713 1.1166267831125416 -849 713 -.13810145831968795 -866 713 1.5016253382366034 -868 713 -.30138082390406984 -882 713 -.2008870020796685 -883 713 -.7712412815345466 -892 713 -1.325856924311391 -906 713 -.7722155473981245 -912 713 -.24163320309250239 -919 713 .8380121762345089 -922 713 -.5057369366983737 -937 713 .5585745633480991 -975 713 -.31575949754414856 -988 713 2.061750723128101 -991 713 1.2184207517653107 -992 713 .18768439007642648 -995 713 1.8112498670963257 -996 713 .6626760818273777 -11 714 2.216958851313835 -16 714 -.17157448674400066 -26 714 .6130748819048546 -28 714 -.38948541663640507 -29 714 .23732809735275545 -37 714 -.3028721745725839 -42 714 .4507265919167286 -53 714 -.6556165396528022 -62 714 1.4272951802349694 -63 714 .5438943203293118 -88 714 -.06939392430060959 -90 714 .02054282790485656 -101 714 -.524386159375717 -103 714 -.49550949025564855 -129 714 -1.0402670808921293 -132 714 .05112098160099576 -138 714 -1.1282796656474385 -139 714 .09595514120781294 -148 714 .23375814862929034 -159 714 -1.4984934196852748 -172 714 -1.1033196160638128 -174 714 -.49514097404694646 -182 714 .14385470748317888 -189 714 .5280444441063549 -190 714 -1.2997178549421293 -204 714 .9093955008809432 -221 714 -.5254469080598418 -226 714 -1.1881925292941204 -233 714 -1.4733279827933048 -237 714 -.17770481663977258 -248 714 1.1093922926910555 -253 714 .7761542496729747 -273 714 -.12695286791721833 -279 714 .24144624032986842 -289 714 -1.047926769309697 -292 714 -.2554254129467899 -315 714 .04629439958846508 -324 714 -1.1443559829577188 -325 714 1.0183338081620215 -333 714 -.48138780828151034 -357 714 .20486245148745236 -358 714 2.1284624582540457 -368 714 -1.0085297648681073 -369 714 -.24295041230522108 -381 714 -.03532685987592738 -382 714 -.35059515336709995 -394 714 -.29936212003797663 -396 714 -1.802853276301276 -405 714 -.11403402877145621 -416 714 .5157374698226622 -429 714 -.9005996122292378 -449 714 1.8102771397705009 -484 714 -.3534667913985114 -526 714 -.5343411773916068 -541 714 1.6985889592183463 -550 714 1.0396912565532515 -553 714 .3017572153832765 -568 714 1.7913932320402117 -576 714 1.2356364514829414 -587 714 .757990829830582 -590 714 -.5397710155844622 -593 714 1.0972795692924224 -596 714 -1.1604383373793348 -605 714 .9510617940118878 -629 714 -.6407780695179262 -636 714 .7610330225139161 -637 714 .6402137461999078 -642 714 -1.0302626963527555 -665 714 .15101572449736658 -682 714 .5057733207195916 -684 714 .2663056513311905 -688 714 -.6557667096100809 -693 714 -.7626312059016624 -699 714 -.8926536579602832 -711 714 -1.1227002947065463 -719 714 .4159796346624448 -720 714 .1703516133143986 -740 714 -2.9173550826928802 -741 714 -.4075303191045157 -749 714 -1.1220226941564455 -755 714 .6975259064468174 -771 714 -.8319239965271161 -773 714 -.8390087616828421 -796 714 -.2971066256908528 -798 714 -1.838959654798048 -806 714 -.8151170783124505 -808 714 -2.2116465748745737 -829 714 1.6226182801980102 -833 714 .7397707585594313 -850 714 1.5164439641023368 -862 714 -1.9472319382020078 -878 714 -.7671808946968884 -899 714 1.6456599169072879 -914 714 1.4936698729855307 -919 714 -.08242711028038041 -922 714 1.3726750780754853 -931 714 -.10988922842787492 -937 714 -.13057714553113262 -939 714 .11018681865010695 -943 714 -.6456102644662904 -947 714 -1.1780888311476567 -950 714 -.31291774113697446 -954 714 -.9747285633684384 -967 714 1.9150605670401009 -982 714 -.12484671964816926 -999 714 .13661795302450522 -1 715 .1636872311248147 -9 715 2.2346367461407994 -13 715 -.4483157024704231 -14 715 2.45104672602273 -30 715 -.10101604346551063 -43 715 -.8228686332974021 -45 715 .2903722032182101 -52 715 -1.6020413377303933 -67 715 1.176080656336368 -112 715 -.5412602678989722 -118 715 -1.0741450463629487 -122 715 -.2874217543151924 -127 715 1.1302309671070572 -130 715 .6390159356225686 -150 715 .5403646067256445 -151 715 -.04179199090389614 -152 715 2.9859165779359835 -163 715 -.9025114482161015 -177 715 1.100175816859538 -193 715 -1.9956840606604873 -213 715 -.4321890867626905 -215 715 -2.1450152021574147 -221 715 -.6391663133598665 -237 715 .6523586384850062 -247 715 .1950181858452843 -258 715 -2.5449228490735583 -268 715 -2.511262464642319 -276 715 -.44175493697333224 -288 715 -.6508471714500718 -294 715 1.2171969913769147 -303 715 -.8863534878965835 -312 715 1.041927527829007 -338 715 1.184995521452227 -345 715 .8454426093230463 -348 715 .3998584360760862 -357 715 -.7379576644139023 -358 715 1.8983515889937952 -370 715 -.24652178694004798 -377 715 .5728588851326857 -386 715 1.8847064045160962 -389 715 .24430794475288192 -391 715 1.248890946769223 -393 715 2.4665195494233645 -405 715 1.5490506502445391 -414 715 1.307289197369325 -455 715 1.9807478514234882 -464 715 .26906417571458846 -466 715 .8238253821822623 -469 715 -.5394794543765296 -476 715 .11230273974102584 -488 715 -.4277694044573498 -493 715 -2.1849132704815024 -530 715 1.0391605238320438 -556 715 -.9542405904144097 -569 715 .36152965097757533 -570 715 -.8982749431668601 -572 715 -1.3401554403231435 -581 715 -.25461633266453626 -586 715 -.5818947801500078 -618 715 -2.575035292993588 -625 715 -1.0736487205785898 -630 715 -1.1380429337549887 -640 715 -.7866685705585694 -645 715 .6095960032299272 -649 715 -.268448193100335 -686 715 -.2177794347605535 -709 715 -1.1067576101689338 -712 715 -.9006911368840933 -731 715 2.0312861087984055 -741 715 .07356433438799509 -749 715 -.7393910548249572 -758 715 -.09071884091533841 -762 715 .7000828556241487 -768 715 -.43420161791984185 -772 715 1.271610838569744 -773 715 -.08719622822761688 -776 715 -1.1263444319093943 -788 715 -.8985720421116581 -790 715 1.0752669047952483 -797 715 1.6750997575846864 -800 715 .7152742177127547 -802 715 -.23673674789544386 -806 715 -1.6634024281466049 -811 715 1.4551263256592362 -825 715 -1.512848781354408 -844 715 .8238636005692878 -845 715 1.363549706206176 -848 715 -1.45668380328718 -850 715 1.2538957317650823 -851 715 -1.5717009490549367 -852 715 -.13448045429936095 -870 715 1.8294519144584165 -884 715 -.007729426306744173 -892 715 1.0736409588490963 -910 715 -1.9346002323888098 -911 715 .9060962790539222 -913 715 .32705916854652894 -944 715 -.032561702311842085 -956 715 -.7859400379474969 -958 715 .42191677128221616 -972 715 1.977304712765556 -977 715 -.39813474785698316 -983 715 .8812606388711095 -990 715 -.8882467430747876 -5 716 1.726823775396759 -24 716 .02931434322358424 -32 716 -.9431799505296807 -39 716 .6780273607393451 -44 716 -.5498563290652403 -56 716 -1.9097679473960851 -79 716 -1.0083959526398107 -88 716 -1.0151702712498856 -96 716 -1.1250325136063752 -99 716 1.2938560073823777 -104 716 -.7774401326911085 -119 716 .45801872035915625 -125 716 1.8469679717057415 -133 716 .8647572483802067 -139 716 .47044288036580545 -142 716 1.117882706671898 -152 716 -.0360724787466678 -158 716 .10195655398331402 -162 716 -1.448825342809337 -209 716 -.710885251018074 -215 716 .05401938059370588 -233 716 .82418833469809 -278 716 -.15113901578472824 -282 716 -1.0386899008207966 -306 716 -1.2634883541791282 -320 716 -.8633326722139241 -324 716 .7887327395312301 -347 716 1.3648825311073132 -348 716 -.017067542127053914 -352 716 -.534507586078663 -357 716 -.8450692538526242 -376 716 -1.1780824877014189 -385 716 -1.060130342670218 -388 716 .07232263842481818 -391 716 -1.1652462559262142 -420 716 1.3943399150999376 -430 716 -1.0424576428186563 -436 716 -.40355789636283523 -440 716 .7048854946063975 -449 716 -.7171787372323737 -454 716 -.7418546796887944 -460 716 -.37190312685132654 -480 716 .5827475286950217 -481 716 -1.4780386221648854 -495 716 1.0286891658766573 -504 716 -.8284688963685886 -505 716 1.3534756379788573 -520 716 2.2325849294115296 -532 716 -.35643536437621126 -581 716 -2.1706584394823367 -601 716 .10841081520667965 -611 716 -1.186524750715593 -615 716 -.4689027752848177 -617 716 .8937122971858229 -622 716 1.4397484486318044 -629 716 .06640141383563834 -636 716 -1.1000106267117613 -644 716 1.765859131456598 -649 716 .5352148664134584 -651 716 .5160863508343048 -663 716 -.16065451987242102 -669 716 1.0103579097393598 -698 716 1.0408584858040122 -714 716 -2.405887574982614 -715 716 -.2805872320072177 -722 716 -1.0606622854988939 -726 716 -1.9045700781501724 -737 716 .6995809218342716 -738 716 -.6889598501608496 -750 716 .38904715603289197 -762 716 .07691071310014837 -770 716 .06067964266901331 -782 716 -.6708733264768161 -784 716 -.3879453610976097 -786 716 -.6083486898336825 -802 716 .36243954576275406 -811 716 .3467721637992197 -831 716 -.7508240915687769 -838 716 -.2224203024237917 -849 716 2.0883714925128154 -858 716 .976810528622967 -875 716 .5399175512118882 -892 716 -.43757398359769806 -901 716 -.7751300997408077 -922 716 .37049573293335347 -937 716 .21755553468498826 -948 716 1.0606654144389551 -949 716 -.169481527713743 -961 716 -.27149443097640735 -983 716 2.429967136824188 -33 717 -.4344815244863389 -52 717 -1.3777016189638265 -63 717 .5362737080576736 -93 717 -.40219670587781403 -111 717 .6097621059859941 -119 717 .3462400953579732 -142 717 -.5623563221785339 -159 717 1.267500244202553 -161 717 1.2352291841850749 -170 717 .05530143874508735 -188 717 -1.4992769237200894 -204 717 .34114171284064604 -210 717 .14413396958090424 -218 717 1.3104735844130433 -232 717 -1.23825520275484 -255 717 1.1921152528780241 -261 717 1.1363628071326242 -267 717 -.1993024870810692 -276 717 .9693416746678483 -278 717 -.1399969467762585 -282 717 .3624797132760874 -292 717 .035140153171732885 -310 717 -.3919602344801455 -318 717 .38711427257967335 -326 717 1.120451825770625 -330 717 -1.0969733875444752 -353 717 .9118480380131192 -356 717 .8432082942255599 -363 717 -.10638384109033702 -365 717 -.42877742585200546 -391 717 -.6782255665910327 -404 717 1.3689014514265152 -423 717 .8414989494439222 -427 717 .9361102038415606 -473 717 1.357128297244165 -478 717 1.6980675414750996 -486 717 .13063859986400778 -495 717 2.119903405433653 -500 717 -.3037097822280874 -502 717 -.6735026879190561 -518 717 -.8856992166017149 -521 717 .2563099320970302 -527 717 -.3251460917821961 -537 717 .3521123850461139 -549 717 -2.016420547632267 -554 717 .5358207842576158 -573 717 .08070727108840836 -589 717 -.7407898105960857 -616 717 .37599663959141605 -618 717 .0989222113340515 -620 717 -.862356607234142 -624 717 .11006383764552916 -635 717 -1.5743892118411256 -679 717 -.9883472125207433 -717 717 .482412685004458 -723 717 -1.7180214850136364 -744 717 .5523531209957825 -751 717 .7935844565739028 -756 717 -.8014479984747362 -806 717 -.09067821374103383 -811 717 .5377710039277628 -812 717 -.6575634139646941 -818 717 1.6243713075079045 -825 717 -1.1252943470598702 -842 717 .6534336097045036 -845 717 -1.158454054820465 -846 717 -.08886619257976258 -851 717 -.14130176384506304 -873 717 -.9198333327779938 -881 717 -.6951660124859791 -892 717 .47777454826614424 -907 717 1.1458958066811964 -909 717 .25339194558683054 -915 717 .6999732683323775 -925 717 .06230141529818431 -945 717 -.17032771672943153 -962 717 -1.3951178632765604 -982 717 .2315756713798634 -24 718 1.0639242693128388 -76 718 -.27322240611332044 -80 718 -3.555787928736466 -87 718 1.7050018102460587 -88 718 .8949959081814193 -97 718 1.172252194957408 -103 718 -.9594750200842432 -104 718 .43448249372966286 -111 718 -1.1921244878928565 -113 718 -2.4065412102680326 -135 718 1.1504447628572723 -156 718 -1.0911343165404905 -165 718 1.144621412421988 -173 718 1.0843494515545655 -180 718 -3.1745942067106365 -182 718 -.8199866290018354 -185 718 -.34585676369716956 -196 718 -.9223598079013191 -200 718 2.1340133719708967 -203 718 .3054081525176079 -212 718 .33866422663968626 -217 718 -.40291269284827813 -225 718 .33492260286190334 -245 718 -1.796968175644494 -257 718 .023229958740427097 -261 718 1.435274798772713 -264 718 .8518534578428191 -278 718 -.30524189826987475 -284 718 -.5714110132590153 -287 718 3.711919684505767 -300 718 -.2571383744124792 -326 718 .9625547953383637 -355 718 1.1852143761347806 -358 718 -.1318605692226946 -363 718 .7936935267299388 -373 718 -2.080126710967677 -399 718 1.5926661760752006 -414 718 -1.3423666454289087 -417 718 -1.1768397990795223 -428 718 1.4373579634049862 -431 718 1.0963127686580831 -442 718 -.912478785818071 -451 718 1.4855932623358152 -459 718 .7646732049659891 -461 718 -1.2410898385021523 -466 718 1.5675215796068678 -468 718 -.5319168436501279 -487 718 -2.4784912746010543 -502 718 .2848646744326394 -531 718 1.3831140562945652 -533 718 .4277513561557304 -535 718 -3.1532833576539554 -542 718 .648358821667443 -552 718 -1.2811589661780765 -554 718 -.49900083585404936 -572 718 -.012668688166616447 -615 718 1.0390576188398326 -619 718 -.6494041024651326 -632 718 -.4367698048036972 -641 718 1.0398776781313972 -654 718 3.938543052291844 -661 718 .46587876417300117 -673 718 -3.226954703818358 -677 718 -1.733404787298863 -701 718 .9792878868784567 -702 718 -1.8192843948982302 -711 718 1.676955968845106 -717 718 .0992372532214732 -723 718 2.1942298960675855 -734 718 -2.021805592098874 -744 718 -1.1721887804659525 -770 718 .7070800209715178 -773 718 2.3921026848790627 -783 718 -.7427331050133829 -784 718 .8743156103519741 -806 718 .39833838545654654 -817 718 .5671361839665754 -827 718 -4.610511647806435 -885 718 -.409204188883291 -888 718 1.2134431085152977 -889 718 2.975490587537037 -902 718 -1.634114742004436 -940 718 -1.3030788964512083 -968 718 1.6629926852623251 -977 718 -.4676902091393734 -995 718 1.7794031797770855 -1 719 .528856470298493 -13 719 -.0867439057300741 -22 719 .9151227941899407 -27 719 -1.1126024433420476 -28 719 .7731212063620173 -36 719 -.920378243499346 -54 719 .17893127496373584 -65 719 -.09577673537652234 -68 719 .476792689889082 -69 719 .5288779913170691 -71 719 -.704519207160851 -73 719 .0021413840720914123 -76 719 .8798823572936755 -77 719 1.0094278751485433 -101 719 1.5870716810951722 -102 719 1.6493831099617937 -103 719 -1.1363174128803328 -121 719 .33241723209736995 -132 719 .33197312808779905 -138 719 .605598439479678 -140 719 1.2692210763604193 -142 719 -.06822002342684566 -163 719 -.912899583985733 -166 719 -1.014919605061215 -172 719 -1.4592110837103283 -173 719 -.6926804320201962 -182 719 .28213347976577796 -188 719 -.8978323160043211 -203 719 -.6564375232140013 -207 719 -1.0746561840139868 -217 719 -1.309793439694984 -224 719 -.1260796041582809 -227 719 1.135840877697741 -235 719 .958414714399407 -265 719 1.4011117014033931 -268 719 -.6440866437730841 -275 719 -1.443358617153066 -298 719 .2798644026406215 -312 719 -.18259493247885872 -314 719 -.01054502061483788 -316 719 -1.1169770478617522 -352 719 .010908668317763121 -366 719 -.24689913109610678 -375 719 .6828557296525902 -399 719 .15108760602692833 -403 719 -.6883168861474191 -407 719 .9462017052176337 -419 719 .8825814105047753 -429 719 -.2453937794432533 -450 719 .17467282849892563 -455 719 -.00981809468286686 -469 719 -.14785752340115627 -473 719 -1.8839147967287408 -482 719 1.8628084168078405 -487 719 .8894751791587939 -489 719 -1.6442949603507264 -496 719 .7717085653950201 -521 719 -.749235848182704 -529 719 .08764597208555283 -543 719 -.8484085383410013 -544 719 -1.2122591214777274 -546 719 .7395440446049126 -563 719 .296468235362393 -573 719 -.5920154900917962 -597 719 -1.3436646496732245 -617 719 .9132396677821206 -626 719 -.1027067956297778 -646 719 .8957544079153575 -654 719 -.6947154572989038 -667 719 .400673431864917 -668 719 -1.3968939193961396 -675 719 -1.3344256316430971 -677 719 -1.67766140882815 -688 719 .3010844400585527 -699 719 -.030544755954816163 -704 719 -.7900619645886188 -706 719 1.800180433201613 -719 719 1.1278598749662714 -720 719 -.7057557880456103 -730 719 .781239962866929 -735 719 -.5772891630915488 -736 719 -1.226574223014044 -746 719 .4065233875147676 -758 719 1.086756279904905 -759 719 .6401363409525557 -783 719 -.4850687356967735 -784 719 .05141300793712172 -786 719 -.7756074788668196 -798 719 -.7645301337106445 -818 719 -.46247414509747387 -847 719 .4094677015712839 -849 719 .4803335376965518 -859 719 1.8904347459634465 -860 719 1.0307027885364124 -866 719 -.6247582894362943 -877 719 -1.604524474457409 -898 719 2.362414789438354 -902 719 -.7419432894119701 -903 719 .7103451315595434 -911 719 .3794612160291114 -929 719 .5489849882504075 -933 719 .5708711999613608 -940 719 1.351646488668313 -951 719 .4847544326228784 -956 719 -1.2039898994646523 -975 719 .46457050280025003 -5 720 -.2789403638083875 -11 720 .038218139751707014 -13 720 .12356224142660009 -25 720 .6905728258090383 -26 720 -.35239271397070904 -27 720 1.1377307151418417 -44 720 .28298266359797225 -73 720 1.0035531297299067 -87 720 .30678209040429133 -92 720 .7471241984617621 -117 720 -1.2077081214210021 -128 720 -.2794038335458024 -129 720 .5986089921479073 -131 720 .07235290975376932 -136 720 -.7533811237009964 -145 720 -.5198875674333083 -153 720 -.5612523280278957 -161 720 1.2401089326977444 -167 720 -.18510465366075593 -168 720 -.8520941533957501 -173 720 .39140618354320167 -176 720 .7343689489133728 -185 720 -.42367473171313946 -216 720 -.8530925952687896 -224 720 -.7945708624493792 -240 720 -.1087152492699927 -245 720 -.07310524900087702 -254 720 -1.2428354460804782 -258 720 .4130858243609905 -285 720 -.9277565396537973 -289 720 -.1926358085504371 -300 720 -.3619647987199154 -308 720 1.048720625754105 -310 720 .03398625283940821 -311 720 .44257428250440806 -324 720 1.4691136282372874 -328 720 -.48101990579082116 -332 720 -.6273072265584321 -346 720 .6926305567348234 -368 720 .5862890413436579 -379 720 .29907750079341144 -383 720 .032773789387994794 -387 720 -.11901720906702848 -401 720 .05780149018048206 -403 720 -.3152370514768445 -418 720 -.3009899335696813 -436 720 .7200125293468033 -438 720 .49486795229873964 -442 720 -.4951814761314799 -445 720 .6987296003890429 -451 720 -1.5000123235417893 -462 720 .15401620901356658 -465 720 -.5198854676297822 -470 720 -.525061367492226 -476 720 -.7059044036510544 -477 720 -1.4608826230828351 -481 720 .2829214729044845 -511 720 -.5944908315020904 -547 720 1.3962335348365922 -554 720 -.43440837373542274 -560 720 -.7827316513074801 -569 720 .027104453699801682 -577 720 -.6999559836156868 -583 720 -.807525797225228 -604 720 -.27400912338490824 -613 720 -1.4401833556824593 -635 720 .373653776087842 -642 720 .07742145455020583 -666 720 .1070293810078582 -673 720 .4734878561107275 -686 720 .038787608300834955 -704 720 .7377961110322331 -712 720 -.27250043580584515 -725 720 -.8672755480023928 -735 720 -.5374775942711497 -742 720 -.1405600321674603 -751 720 -.3969526745497092 -758 720 -.4137763100479883 -759 720 -.36136758477385267 -783 720 -.6774435390031855 -787 720 .3177957396179941 -835 720 -.8178833621602134 -837 720 -.6933691771867675 -845 720 .9722644366337477 -863 720 .8916013459448913 -877 720 -1.3913693978372763 -889 720 -.8224241140248574 -907 720 -.7615749132718507 -913 720 .10662067903406305 -914 720 -.02697653323670187 -933 720 -.4517953122566653 -945 720 -.12100661734573966 -960 720 -1.0722518847790952 -967 720 -1.317915566846215 -979 720 -.4883566975675404 -995 720 -.13868950271782451 -14 721 -.7965168990281909 -19 721 -.0005894985392393276 -38 721 1.3033632140847136 -47 721 -.21261905248980928 -73 721 .07234084917378256 -89 721 1.162035627891215 -94 721 1.298234223224616 -95 721 -.6487203192463258 -98 721 .92957810798286 -101 721 .9382781738996829 -112 721 -.7571848355571067 -114 721 .2541675078395328 -115 721 -.9128562788366017 -129 721 -1.0920467004029288 -132 721 .4251296036336057 -139 721 -.9518882276222689 -143 721 -.873531202027411 -162 721 1.7925713008522866 -179 721 .6138734672528854 -186 721 -.10682009718559861 -190 721 -.7868715821144102 -191 721 .8105477431055963 -241 721 .7394659048890098 -258 721 .5249745594476387 -259 721 -1.2931334530565974 -295 721 -.07059697799014392 -308 721 -.6268099068589857 -324 721 -2.5665822344756997 -337 721 -1.3709754056358847 -362 721 1.0082980958979009 -363 721 .36764432596019253 -365 721 -.06637346791978171 -389 721 .7758779880276525 -390 721 -.8369788347523173 -392 721 -.5796533637776108 -398 721 .3330376643518902 -399 721 .5507641083302267 -401 721 .14007078334102402 -405 721 .7227299548861988 -409 721 -1.2833534963385052 -411 721 1.4737000162690077 -418 721 2.398835728219783 -419 721 .18414244866005858 -420 721 -.5794396032018196 -427 721 -.9922664250913814 -428 721 -2.0425824300445474 -437 721 .7880399627073927 -455 721 -.06663748020172602 -462 721 -.6153596435579274 -476 721 1.4012042658534605 -478 721 .04575925156229793 -487 721 -.007460031810799982 -500 721 1.0798682611429244 -506 721 -1.217234818147935 -507 721 1.2399080115579297 -518 721 -1.4095920834714244 -524 721 -.8604117085670472 -546 721 .29091886066263134 -557 721 1.5310650350522435 -560 721 -.7198096282079821 -583 721 2.001435455301934 -590 721 1.8492422822580594 -627 721 -.761858042462114 -659 721 -.4881669964299862 -662 721 .015822587085037337 -670 721 .3982082056558383 -674 721 -.4110509072714885 -687 721 -.7335454375952354 -689 721 1.6133055870576993 -721 721 .6744670105454671 -732 721 .8599282244324175 -733 721 -.5878740184664459 -756 721 -1.4356723416213615 -765 721 .4126340613942176 -768 721 .25177247994425883 -795 721 -.9671821599809906 -800 721 .3299876375085255 -804 721 .11085339022919764 -833 721 -.29046672017355224 -846 721 -1.2499701699948749 -860 721 -.005631719278914454 -865 721 -.1706731540835009 -873 721 1.5095049717650635 -885 721 -.9874227402145587 -893 721 .899489108513141 -902 721 -1.3295073847030316 -913 721 -.4662764754596778 -921 721 -.09936397226881036 -949 721 -.9257423950328638 -952 721 -1.4319064982635317 -957 721 1.5806123220952877 -963 721 -.2506725070661369 -965 721 -.7493680624048944 -977 721 -1.4805958011506188 -990 721 -.474470592043887 -9 722 1.001664110317008 -11 722 -2.537061387148143 -16 722 1.2049949433905762 -18 722 -.921831557910829 -20 722 .8777137097045714 -34 722 -.4311365140425293 -37 722 1.8548906458441021 -38 722 .317845408192023 -44 722 -.444711490487834 -57 722 .7479440199827868 -68 722 -.341917509619383 -72 722 -.8555123895138433 -77 722 .6263450006099143 -105 722 .5653356359075776 -120 722 -.3546231923542311 -124 722 -.060210055767565565 -126 722 -.5995499175556821 -132 722 .4630023941724234 -138 722 -1.078570226594956 -157 722 -.019886981965906256 -162 722 1.4564107525187848 -166 722 -.4715266990560044 -178 722 .5183770704629885 -190 722 .6735817098917809 -191 722 -.6668493121505178 -200 722 .30603671219692813 -228 722 -.815616348862168 -272 722 .12509147053080433 -273 722 .032644035728505966 -294 722 .36823504405633806 -311 722 -.37132537281211564 -321 722 .5958279069362573 -334 722 .6222027897603118 -351 722 2.143080939237781 -374 722 -2.2300994183989755 -381 722 -.8700417004770016 -387 722 .22590340380716686 -391 722 -.5146615851891457 -409 722 .8061015681740997 -417 722 -2.139242936997381 -451 722 -.83222308087713 -478 722 1.5941847777711988 -499 722 -.9745590779737366 -503 722 .23304566609326982 -508 722 -.14464277179171814 -510 722 -.40298932127369524 -515 722 -1.524968368787774 -552 722 -.43100386699798043 -565 722 -2.6129430384945898 -575 722 1.3265866117996048 -586 722 -.4690624429061942 -587 722 -.10999385044210279 -588 722 -1.0642128725170705 -597 722 .07623559156724136 -602 722 1.1232445470009522 -616 722 1.8939277041851317 -632 722 .5115139181984633 -638 722 1.397838500101927 -641 722 1.0856968720394315 -645 722 .36262351901177203 -654 722 .051226343140015604 -671 722 -.5790923847012064 -675 722 -.7804233329977892 -681 722 .33086664519022246 -684 722 -1.2547525992112545 -687 722 -.8150818337912047 -688 722 -.14967228539495203 -695 722 .045353730698717426 -699 722 .5092377299813555 -708 722 .8515229671275675 -723 722 -.32067910892448154 -732 722 -1.4876379560984063 -738 722 -.38581091352003055 -739 722 .18338974973940358 -749 722 1.416698924352839 -751 722 1.4363277613042984 -764 722 -1.8010124527831377 -772 722 2.058769049939581 -776 722 1.808793742390068 -780 722 1.4313019950193322 -801 722 .7137912503261328 -821 722 1.1421069952597689 -833 722 .02958530975052258 -837 722 -.26544313482994975 -840 722 -.35625857000382805 -893 722 .758155891461691 -904 722 .37503812895070887 -909 722 -.47251216326457474 -910 722 -.5701507829705101 -911 722 -.48940697864433025 -912 722 -2.681577059801693 -918 722 -.4667026918897441 -962 722 -.04410085345639696 -981 722 .9491914771764214 -983 722 1.7982440614113657 -988 722 -.23960079247409105 -989 722 -1.4831555498097213 -8 723 -.07520608781228813 -11 723 2.570396846667323 -19 723 .2932979535066581 -25 723 1.743124724846447 -27 723 .3375559559573106 -33 723 -.5538492676154234 -43 723 -.5891366288253083 -58 723 -.7218086290770898 -66 723 1.3093374314062451 -73 723 .08671260573321418 -83 723 .4452089575062172 -96 723 1.6251054206680438 -100 723 -.20284282038537527 -103 723 -.06829102336303015 -110 723 -.9440390429697642 -114 723 -.24357248727872866 -117 723 -1.3861310679636705 -119 723 1.9756803326217551 -120 723 -1.7850970723816366 -128 723 -1.6066032885420898 -135 723 -.49520669993622385 -138 723 -1.053351352433565 -149 723 .983426391640419 -159 723 -2.368021758421997 -165 723 .3784935245814074 -174 723 .5716919793675195 -188 723 .6965385985508045 -193 723 -1.2498605130301264 -198 723 -.13478939913494228 -199 723 -.2016528658627588 -211 723 .03950824256619844 -234 723 -2.1477057939535005 -253 723 .3502000034188385 -260 723 -1.0309709720336355 -264 723 1.7094720134391446 -269 723 -1.1619200871748945 -271 723 .36858617694630014 -291 723 -.539055221132853 -304 723 2.0664238455060935 -307 723 -1.4011806553441337 -313 723 -.6780044014990119 -330 723 .7952489075562043 -337 723 1.076337830308408 -343 723 -.037604277596091154 -345 723 .7781082243103234 -360 723 1.3803387218610632 -381 723 .9109269850224464 -395 723 .004131674670371371 -405 723 .36893095605723014 -411 723 -.758869477375171 -426 723 -1.2120335127177861 -440 723 .5794788623026412 -463 723 -.8325728957218427 -467 723 -.31868140397926165 -469 723 -.6209098308603143 -473 723 2.350382332500981 -499 723 2.0543678455535757 -513 723 -.04294574095928033 -515 723 .7983136397211309 -537 723 -.9742858222672963 -540 723 .5684972334512531 -541 723 1.9839403813367908 -548 723 2.21922094470625 -549 723 -.12996068095129312 -580 723 -1.0675703572965982 -583 723 -.3394450725394202 -585 723 -1.0875681982892014 -586 723 -1.115689157960512 -589 723 .019949991889725308 -596 723 -1.4563697112661098 -626 723 .9692634148517326 -638 723 -2.092297161434669 -650 723 -1.388162852038433 -663 723 -.8020837952530232 -674 723 -.5284604003230411 -680 723 .44531815493414134 -687 723 .19117524218562834 -689 723 -.6740983684089806 -696 723 .4871428422007901 -711 723 -1.2656958350425045 -717 723 -1.844593758484599 -722 723 -1.222189201152203 -723 723 -.9439140239390832 -728 723 -.5180993083043623 -749 723 -.5193081331842402 -774 723 -.7347021133658418 -775 723 -.3571764593011716 -785 723 -.8603929713769802 -795 723 -.1690432114421667 -804 723 .3105785666377828 -812 723 1.4191036783348545 -816 723 .8690875131499808 -836 723 .8762084003898344 -841 723 .6462704389643886 -847 723 2.440655759416053 -850 723 1.1324103984571412 -851 723 -1.2989774865437014 -864 723 1.2184667047514053 -866 723 -1.6139465016260541 -875 723 .9261522544376299 -881 723 1.4438350940817184 -888 723 -1.7319649703201794 -908 723 -1.0928244478692763 -923 723 -1.762618236024771 -924 723 -.4760250103222107 -939 723 .030018297234886526 -951 723 1.455818581522148 -957 723 -.06770560168075619 -970 723 -.6046091496876733 -977 723 -.47286038017202964 -979 723 .6596985364205675 -986 723 2.3107605121518278 -994 723 .4577216377009078 -20 724 -.01782211309022863 -37 724 -.16449232480281606 -39 724 -.30515223076851755 -41 724 -1.1567525361990143 -54 724 .44511467195098586 -57 724 -.023378339349391205 -63 724 -1.2308214666243333 -66 724 .38242385569683596 -68 724 .708383070959071 -70 724 .2673252363267995 -74 724 1.1337505467430395 -78 724 -1.485236363255142 -115 724 1.085788054518494 -116 724 -.3075563657292806 -117 724 -1.678818409318393 -121 724 1.2507253562510345 -126 724 2.172050340648668 -132 724 -.9482071136653405 -135 724 -.08445878003088327 -140 724 .22995912738469554 -141 724 -.5596050306680598 -143 724 1.9507668839290337 -164 724 -.41596479545408316 -166 724 .15824190579186165 -170 724 .18674082592362795 -184 724 .3137958584064661 -194 724 -1.730310604569211 -198 724 -2.0063953588837085 -211 724 .1576058688698094 -215 724 -.9377770033988286 -221 724 -.33899829347770816 -223 724 .8684489820252774 -236 724 .4751738661568355 -254 724 -1.4768295765798471 -269 724 -.7449581104843775 -275 724 -.8467730948024843 -295 724 .12877058592181667 -335 724 1.282414994350837 -336 724 -.40898200801800466 -340 724 .12885427560925172 -347 724 -.9303803896684443 -357 724 1.020276555571968 -371 724 1.9952583495415048 -372 724 -.9201768515668272 -373 724 -.41488341117702804 -389 724 .1952057257309272 -450 724 -.6888141609749523 -456 724 1.4124510730406554 -466 724 1.2324608921245075 -473 724 -1.7642427699386056 -476 724 -.3411289812883398 -479 724 1.6254137118200656 -482 724 .8127226719619925 -494 724 -.8553804945194041 -506 724 1.5537627744964255 -509 724 1.3429669813592235 -516 724 .1550973860844198 -540 724 -1.3087979052046455 -549 724 .3630809967378256 -559 724 -.98550145470275 -570 724 -1.4102185910081424 -581 724 1.0093101310141812 -594 724 -1.4749123935754307 -609 724 .15938685492431087 -622 724 -.6664643881297874 -647 724 -.5879395226748915 -649 724 .7507374954836981 -651 724 .27459175228099175 -679 724 -.8446206459420744 -686 724 -.3418913735065628 -694 724 -1.9539028461026864 -706 724 .06591901601999224 -733 724 -1.4989463942015981 -741 724 -.9894683805593563 -744 724 .3460361149221727 -758 724 -.6795852518507383 -759 724 .0913883074213831 -765 724 -.32410840763065213 -767 724 1.3021787620814416 -770 724 1.7999818445409808 -771 724 -.3499141425073373 -774 724 -.19641602758206814 -809 724 -.2015926745263566 -810 724 -.13101818394919656 -817 724 -1.0656738283305442 -821 724 -.06941516802559579 -824 724 -1.1125871701669918 -830 724 -1.7974277468492126 -832 724 -.4018600587011796 -841 724 1.4253624560979936 -853 724 -1.0990205349466686 -855 724 -.35161755140724366 -864 724 -.8518916226519677 -872 724 .48849031223216277 -877 724 -1.3658501645118322 -891 724 2.234947331486934 -893 724 1.142177252216704 -897 724 -1.4274569367461754 -900 724 .4084766387255296 -906 724 -1.3576751810724317 -910 724 .11361828138770805 -916 724 -.10965033230921804 -917 724 .5406549117687436 -928 724 -.198336310818212 -931 724 .7572725123262969 -944 724 -.9125187066194604 -951 724 -.1362163080184251 -953 724 .326243915314739 -969 724 -.094392299964618 -983 724 -.6878822881180708 -989 724 -.565692485488118 -996 724 .38292859444923716 -15 725 .445278619100173 -16 725 -.4436286507274013 -38 725 -.32526303082262975 -52 725 .3664179817522788 -60 725 1.045345247986813 -74 725 1.0901052690862316 -78 725 -.5185671014659499 -83 725 -.10239171857502484 -84 725 .457157026512809 -87 725 .17356312046104552 -106 725 1.0336162738404207 -116 725 1.0803367558687142 -127 725 .40009420282507463 -130 725 .747878346318054 -133 725 .347766234463056 -137 725 1.4973258021996374 -139 725 .6917960654853399 -143 725 -.10282703455794286 -149 725 -.9770245163017064 -165 725 -.08710164023399186 -168 725 .04297985389831146 -173 725 -.25102741060454203 -214 725 .2178085609359165 -220 725 .09966551985199586 -228 725 .6784206327333369 -231 725 .45695596521000387 -236 725 .03443081528545101 -237 725 .22584044670572556 -244 725 -.5459678136969284 -247 725 -.766596642804781 -257 725 .5186018648675901 -261 725 .1508700680061529 -263 725 .001105291110800502 -281 725 .7873874890159641 -319 725 -.19432284803984862 -334 725 -.5260532943330207 -339 725 .8297525766379958 -340 725 -.37661174845498924 -365 725 .06507437682779424 -377 725 -.7208879068231135 -379 725 .32204072831599617 -392 725 -.34749684941917464 -401 725 -.8736802108968255 -425 725 -.743692144573351 -439 725 1.2620816300846471 -482 725 .19664097452558893 -509 725 .02223818094863382 -514 725 -.6654717335154913 -529 725 .30421172379161543 -539 725 -.2981535903041411 -550 725 -1.4892232657237472 -551 725 -.32313651867860343 -552 725 .3911685431534272 -565 725 -.35037721989700965 -569 725 -.7116216356144753 -594 725 .15049413996900454 -597 725 -.06694064747781256 -618 725 .23080690335741885 -620 725 -.07029227323322172 -627 725 -.219513695102646 -636 725 -.6342543587409812 -637 725 -1.1954393440266287 -646 725 -.5934771871715551 -650 725 .029909049658118247 -655 725 -.2699367881939648 -656 725 .6748974836506104 -659 725 -.876443194854224 -676 725 .47332767163227546 -703 725 .766141598619758 -710 725 .21850781601912325 -726 725 -.007163049553127977 -756 725 .29128640911193737 -760 725 -.07019513643872255 -761 725 -.6287662429821197 -774 725 .982375468162844 -787 725 .08033494720074402 -794 725 .7337461684401556 -797 725 .13247737497091477 -814 725 .6585788220677983 -817 725 .13111291960223553 -818 725 -.09873281096876843 -824 725 .93369374308315 -883 725 -.3522230820805586 -885 725 .10858002459175445 -891 725 .8310291981906055 -892 725 -.13665169161833202 -893 725 .4311643351646593 -911 725 .37934320730560145 -922 725 .008475405270058786 -933 725 .2092318883856613 -941 725 .8531619007511859 -944 725 -.37043162081610775 -946 725 .5766542513937657 -947 725 .27588003109905074 -957 725 .2212718588450582 -973 725 .19893943148489324 -974 725 -.11636976677335337 -980 725 -.39322933969916685 -986 725 -.3721438085062237 -13 726 -1.7354139585541248 -14 726 .028831046095026513 -20 726 -.32102869335781703 -31 726 -.28824303395152184 -34 726 -1.1919799187759288 -38 726 -1.3238748048001032 -43 726 -2.7278128906168044 -48 726 -3.965596420687579 -54 726 -.8260509120145278 -62 726 1.3449201980912664 -65 726 .45599577356077237 -67 726 -.7196430448468565 -94 726 -1.8807003741069734 -97 726 .7912736298586809 -110 726 -2.6234899031101278 -115 726 -.39943260502264777 -119 726 1.1183154893043847 -135 726 -1.0328904523917584 -141 726 -1.3918185408329233 -166 726 .412670450617064 -173 726 .6837312716425249 -178 726 -1.1019599737937302 -179 726 1.4697804643267043 -189 726 .47268234425469213 -209 726 -1.089327812336591 -212 726 -.407308966750498 -229 726 2.3262211649496156 -230 726 .7364746229253109 -235 726 .9322572270044162 -237 726 -1.6169390973055666 -242 726 .5960294991422861 -243 726 -.2467018594690052 -252 726 -.5478852070074537 -256 726 2.805254260458268 -261 726 -2.6014198576541094 -263 726 .4532921410131462 -280 726 .1674712416017856 -320 726 -.5272885364972778 -327 726 .1474722344530094 -334 726 .8628796652934764 -340 726 1.1066275406958426 -360 726 2.873585001733046 -386 726 1.910777322674858 -404 726 -1.7853420139426497 -431 726 1.130470281187995 -447 726 -1.035450452171458 -450 726 .5854847859200173 -454 726 1.5663627924105796 -460 726 -.11019729398920747 -464 726 2.5438790649400995 -465 726 -1.6274138198540786 -466 726 -.8421354087041363 -467 726 .31654075319508385 -478 726 -1.0035440129958428 -505 726 -1.4149638949545356 -524 726 2.004356949070176 -529 726 -.30180563082242484 -541 726 1.7921825891959469 -556 726 -.7214180429340152 -567 726 .8239412470851858 -582 726 -.5740155239540986 -602 726 -2.2811395112840644 -624 726 -1.8236693791082292 -635 726 .8191439535211454 -643 726 -.4756019631613018 -644 726 -1.5168370171958505 -645 726 -.19719705770098955 -646 726 -.6585374091812253 -650 726 -.885145364410368 -655 726 -.6364637643138795 -663 726 -2.0170032331540466 -673 726 -.9515634533840117 -674 726 .13805293541110578 -693 726 -.33978546125156395 -719 726 .6658307193984029 -728 726 2.3023750380373658 -740 726 -2.921810152968726 -770 726 3.155525177036403 -780 726 -1.4915441001807546 -805 726 -1.7896776647168506 -806 726 .8873227382551012 -837 726 .7518557100572429 -844 726 1.4014913686504853 -860 726 -.7461699810996253 -892 726 -1.4231373520514643 -893 726 .1612430932653716 -901 726 -.0773501902140879 -906 726 -.002402937756250183 -941 726 -1.636470379163922 -956 726 .6993354730800483 -957 726 -.38882819715340927 -961 726 .3149296688362217 -992 726 -1.4895916253476529 -996 726 -1.2901839135283175 -3 727 1.012601524433139 -9 727 -2.873438411122184 -10 727 -2.44238368061877 -16 727 -.6530843632544844 -43 727 -.12475442821471198 -74 727 -.6337659413999466 -75 727 1.2616095478422427 -95 727 -2.269562200844989 -107 727 -.5992523992848487 -120 727 -2.21452845865196 -136 727 .9592146799828737 -149 727 -.6975129258186492 -152 727 -2.8379534360323935 -154 727 -.29401880005294595 -156 727 -1.1178115823648052 -162 727 .712610304244506 -167 727 -1.4852442907477834 -172 727 -.44583601425446373 -178 727 -1.878196990883599 -180 727 .5633088839013083 -210 727 .1990841392883061 -213 727 .7188989343793561 -220 727 -.44271630609326584 -241 727 -.8271620222594429 -251 727 -.03952304054603642 -335 727 .8247756998434452 -340 727 -.5360041590862991 -344 727 1.629086835673413 -372 727 -.8039269453270427 -374 727 -.4414596762176976 -385 727 -.7272379066017871 -388 727 .7403370873219733 -397 727 -.9846390499421749 -449 727 -1.933127538996786 -452 727 -.5266799305899046 -453 727 -1.6066329135472426 -456 727 -1.2167909804692665 -460 727 .9116387811284867 -461 727 .03892376713186772 -472 727 .3121944391616553 -495 727 1.802050564413272 -539 727 -.7007131443428741 -540 727 2.043664824981681 -548 727 .5070371784838674 -564 727 .733744332707543 -569 727 -1.8915933279527248 -579 727 .26246580356040733 -586 727 .12898636630951288 -599 727 1.2073695945815295 -614 727 -.2934813597350622 -630 727 .4785006657295433 -632 727 -1.2812103184919994 -639 727 -.06901874259006785 -643 727 -2.2144788768416093 -649 727 -.6012965235123613 -667 727 2.142822084352637 -672 727 -.2562346265793746 -674 727 1.777124391942879 -680 727 -.7608772608022186 -698 727 1.2152765237989902 -703 727 1.4916142827851249 -707 727 .20919185392316647 -713 727 .867857124465834 -717 727 .6466763722715632 -746 727 .22350360035416014 -751 727 .9368455069983135 -753 727 1.774577449779709 -795 727 -.8510976108613624 -803 727 -1.0788054565637986 -817 727 -1.2234194042466708 -826 727 .8730020363504535 -845 727 -.24900200725291918 -852 727 -1.8678469945158755 -859 727 1.5532501519091944 -863 727 .4893732592070821 -865 727 -.26791126215279326 -867 727 -1.8503501027673765 -873 727 -.5841302271218461 -885 727 -1.652764589517148 -891 727 .6974092169688864 -904 727 1.568357669717963 -921 727 -2.214415916921094 -922 727 .5967655932626604 -943 727 1.333721651264857 -954 727 1.7448872934062774 -989 727 -1.0720632552021245 -13 728 -.959478718921853 -33 728 -.46707557978770564 -42 728 .4700748758227197 -51 728 .22878967735689978 -62 728 -.8844537055206644 -81 728 .765993680012738 -82 728 -.5794129473353726 -94 728 -1.4778666445616881 -100 728 -.3287792170211443 -112 728 -.1751001234622913 -119 728 2.0425104278827804 -121 728 -.37983231582380506 -127 728 .3516373020615388 -158 728 -.7982555721136311 -167 728 1.1418408908702429 -169 728 -1.0633892597221224 -203 728 .3191323111609521 -204 728 1.3005028369198095 -211 728 -1.4933168820556064 -229 728 -.7567401022107242 -240 728 -.07625674895101867 -254 728 .5151690730214948 -263 728 -.6713914113094002 -268 728 -.25020006137742934 -290 728 -.5006501377481603 -293 728 -.7773850371387506 -301 728 .02603260770421266 -303 728 .043854935210585845 -308 728 -.7118926534049073 -310 728 -.19926840372089621 -315 728 1.1243626326111766 -317 728 -.6697893247162461 -364 728 .6884026409076336 -403 728 .7836552193419712 -404 728 -1.8955199082311602 -410 728 .002636372365846393 -412 728 .6776593619222261 -416 728 .8335766355308863 -418 728 .09357072897583671 -422 728 1.868958474762955 -439 728 1.429067135168613 -445 728 1.227102475729255 -450 728 -1.26329971985252 -451 728 1.2484897527733017 -480 728 .21203716274227988 -482 728 -1.441648918561376 -487 728 -1.9754506253834836 -489 728 .15556127060167965 -492 728 -3.5454401680083865 -499 728 .9464156473870138 -514 728 -1.0849463348235893 -518 728 -1.415956195952319 -521 728 -1.2349461464752678 -536 728 .6161748979449292 -538 728 -2.3842284159056355 -545 728 -1.5872534536000897 -547 728 .16632229259741296 -552 728 -2.283038768902918 -570 728 -2.157478678374292 -573 728 -2.0374018279243415 -604 728 1.0856309402341346 -623 728 .8848201894029124 -624 728 -1.442420208353512 -629 728 1.1680633521794785 -632 728 -1.547745481610995 -633 728 1.0498963599403934 -637 728 -1.158052499185857 -661 728 -.37303047294248093 -682 728 -.06875188854805726 -685 728 -1.7163785514301182 -707 728 -.9803743176934298 -712 728 -1.7604969744673746 -716 728 -1.736736465837088 -724 728 -.4097947316992231 -731 728 -1.3715840491375564 -733 728 -1.8962201116071644 -743 728 -1.1053023393850963 -749 728 .9202045868344042 -752 728 -.10429694401783882 -758 728 -1.938137471780865 -776 728 -.05446844094223893 -778 728 -.09110065562779485 -780 728 -.4338016591748006 -788 728 .9981873644192627 -790 728 -.05704800419165744 -796 728 -.8012388108499078 -801 728 -2.361056171918396 -812 728 1.9989228309921112 -815 728 -.28372690802960515 -817 728 -1.7326503862827576 -825 728 1.736645375859486 -831 728 -.4174291154268819 -852 728 -2.0014033634670763 -876 728 -.32576747373114434 -880 728 .8148641475697475 -884 728 -.9199414987997915 -885 728 -1.9975069347625434 -927 728 1.4554418885795732 -933 728 -2.0623270742123894 -937 728 -.5780644204747472 -951 728 .09857881479748232 -952 728 -.5017706473625915 -953 728 .3103720438903954 -966 728 -.06587034339035075 -971 728 1.6084216206730433 -975 728 -.019903018489688735 -5 729 -.019764815605897712 -11 729 1.3032385336945882 -13 729 .09837910621324117 -20 729 -.6297964596119291 -27 729 .1640800592356192 -39 729 .059919552595589065 -64 729 1.7804864244887424 -69 729 .2274149584876059 -70 729 .11947763430429524 -72 729 1.77623970070068 -75 729 .1134575366058897 -86 729 -.8305650922915909 -94 729 -.6401734478787922 -95 729 -.466017310628498 -98 729 -.01973584822465894 -103 729 -.16728347814943514 -109 729 .709585899543144 -116 729 -.29696036949012833 -124 729 .6982775629400291 -141 729 .1263296781505745 -149 729 -.6880521855685962 -163 729 .45869850246093924 -168 729 -.6574828077873797 -204 729 1.7008797771118127 -205 729 -.4816081726861413 -223 729 -.9630234995233625 -257 729 -.3534098893718135 -268 729 -.6428784539463619 -305 729 1.012375837730229 -312 729 .9788900346881065 -335 729 -.3268307751233516 -341 729 -.8781292315657778 -358 729 .3061626309135731 -362 729 -1.003708210188824 -385 729 -.5582801005239318 -426 729 -.46843278458813514 -451 729 -1.0590241514738914 -514 729 .1970461804227138 -524 729 -.3140087291942942 -525 729 -1.6033617434820067 -533 729 .06603614980062739 -540 729 .6184665219964003 -544 729 .47067474451099595 -556 729 .9036348507058434 -557 729 -.2123306600579381 -584 729 -.1622270470217321 -590 729 .05834399610782587 -595 729 .05420667798032184 -610 729 .17277783675241137 -624 729 1.7399287460383046 -633 729 -.2595724917398485 -664 729 .5209569404571764 -670 729 -.8503898964209787 -686 729 -.7491959050181162 -718 729 .08913624346351778 -733 729 .30060572765154464 -737 729 .05117392745450919 -742 729 1.1734790658732797 -747 729 .056226262953678746 -752 729 -.05376271650263763 -757 729 -.22134894903201194 -767 729 .6861157863966036 -770 729 -.15711265715482703 -793 729 -.29281633853451894 -804 729 .5976968525186868 -808 729 -.4936077268773137 -819 729 -.3398147988053547 -821 729 -.6752371056416463 -836 729 .3574208748714087 -849 729 .15914553325885206 -862 729 1.1714780173637476 -863 729 .5172258522366658 -873 729 -1.8048449075399766 -878 729 .5465427393804841 -883 729 .0414394935954447 -886 729 -.9303596908187726 -890 729 -.007085307906286302 -916 729 -.5751977075495454 -920 729 -.8771101236867725 -924 729 1.2121944214899465 -931 729 .7195480435365039 -940 729 -.8305373496590831 -952 729 .03838821561600202 -970 729 -1.129589630367689 -972 729 .2779398638242114 -982 729 .9530347837219791 -984 729 1.760603864014123 -9 730 -.25476651316245374 -26 730 -.07639982846742756 -28 730 -1.031025954522952 -42 730 -.34658087152491246 -57 730 -1.5929478617696309 -69 730 -.17565639653747464 -75 730 .11978945762318033 -89 730 .528354111620244 -91 730 -.15877863727437286 -95 730 -1.0697200105386202 -111 730 -.6796971759664843 -117 730 -.44455831136267876 -129 730 -.5253769376156424 -137 730 -.2099953164458913 -155 730 .5351489403383871 -157 730 1.4639441368184603 -189 730 .1992773291623023 -202 730 .3889651038908027 -215 730 .6608854247584228 -216 730 -1.2991272987093456 -234 730 -1.194456463428664 -250 730 -.556483799528045 -252 730 -.16414883900384683 -263 730 -.45713459579538374 -273 730 -.434646556615624 -282 730 -.0469896309010581 -288 730 .1208224757680165 -291 730 1.894876865499097 -292 730 -.5314108136956698 -305 730 .232475261098671 -317 730 -.9506311142209809 -321 730 -1.1453523087245552 -358 730 -1.3485535809389448 -371 730 .6061100105289963 -373 730 .1202033945878829 -378 730 1.8243541688596807 -379 730 1.470457843326289 -399 730 .4206477761051297 -407 730 -.21566243330781026 -413 730 .2462291904754449 -422 730 -.5168299638426674 -423 730 .2838679089191522 -431 730 .27838708154709113 -450 730 -.8098027409333151 -453 730 .08285095191977009 -460 730 .9825248764486652 -494 730 -.912341802808306 -503 730 -.7204652102693412 -508 730 1.0788474130228387 -528 730 .5821981535928498 -535 730 -.43564652421604694 -537 730 1.0993251135660664 -553 730 -.508561623851387 -563 730 .42318212295408036 -565 730 .22889103383385542 -575 730 -2.486035722561196 -600 730 -.138394324250265 -601 730 .8088835492542672 -602 730 -.20464747447655024 -603 730 .44548886716454444 -624 730 .2836556570889521 -638 730 .5067757525788323 -647 730 -1.1427747218283848 -657 730 .977814472128752 -665 730 -1.6931432656208127 -673 730 -.6395833207611434 -696 730 -.1308444243266764 -699 730 .6710918654570148 -713 730 .32280206327099586 -726 730 1.6458535439555495 -733 730 -1.4956224747861757 -750 730 -.1625407424248731 -765 730 -.7349648484512896 -766 730 -1.1720073678017353 -767 730 .40954266536486106 -775 730 .29165556894072425 -789 730 .5958928338906126 -790 730 .16688609785829786 -807 730 1.123795309279972 -816 730 .1296899935931565 -824 730 .392727478101507 -881 730 -.3581004931802351 -888 730 -1.1923380657178329 -891 730 .9857158547627353 -898 730 .015444331823818602 -899 730 -1.1803648716934012 -919 730 -.16160192473977295 -923 730 .41966510775535654 -924 730 .24699941445976387 -927 730 .4733230619515172 -936 730 1.0976567742332048 -944 730 .37625382347810465 -958 730 -1.1405130918028437 -960 730 -.24562355346676074 -973 730 -.18677635944992116 -974 730 .515427872136082 -982 730 .15323179269713005 -984 730 .2785279048622543 -990 730 .376543176594946 -1 731 .5902430851562648 -8 731 -1.1290420439427784 -14 731 .2723872179254375 -15 731 -.5012399781476488 -30 731 -.5719325706119971 -34 731 -.19857312265052546 -56 731 -.45592284284410506 -68 731 .10467664727801443 -76 731 .5134420699349286 -100 731 .4379817605829093 -108 731 -.5369048560232386 -109 731 .5798434677639805 -112 731 -.6079553442929716 -129 731 -.7985708206579338 -155 731 -.2954621722123162 -166 731 -.2256168067538371 -168 731 -.5813710583309027 -221 731 -1.311617044862793 -230 731 -.00456379241148841 -235 731 .21304815930020926 -236 731 -.46619264707640007 -238 731 .6120444923634525 -242 731 .35764231552184766 -243 731 -.11078681928267706 -254 731 1.0848943817070273 -259 731 -1.0156150448866728 -278 731 -.04533527866632841 -287 731 .1933810167204072 -289 731 .4441946310377269 -310 731 -.2991982039246462 -312 731 .016556343264571338 -330 731 -1.1208472999953256 -335 731 -.018573564073814414 -338 731 .511293699887978 -343 731 .7659981063361349 -369 731 -.2585764589292071 -386 731 .6621834990159892 -404 731 -.8115158416473051 -417 731 -.30825859136383293 -427 731 -.46684196130053635 -435 731 -1.1258441774410681 -437 731 .5728523126424439 -442 731 1.1136632338118395 -445 731 .6537440911780579 -446 731 -1.9417131006554338 -464 731 .38322596621386196 -470 731 .520636946554808 -471 731 .7591788402984758 -473 731 .22969385823585328 -477 731 1.307008641306131 -483 731 .294134320727499 -485 731 .8236237576623068 -507 731 .4596048279037788 -546 731 .49349709685415055 -565 731 -.7857477967576695 -591 731 -1.0265498607795183 -598 731 .5736463387183293 -601 731 .15182787049591617 -614 731 -.6702979203729157 -638 731 .14307309117835068 -640 731 -.7851058599127135 -646 731 .013239769305015303 -647 731 .6778606415639756 -650 731 -.43441076526831235 -667 731 .6739603569644605 -672 731 .21304199966984955 -673 731 .7127684659965738 -676 731 -.39912106660213104 -677 731 -.1502506424736143 -689 731 .2879062138203059 -691 731 .5181427417246954 -710 731 .20119894865495572 -713 731 -.8185737456800241 -727 731 .9682519749260188 -732 731 .3331451252092329 -740 731 -.9655493945407839 -749 731 .5016990406974698 -771 731 -.3312847532817047 -776 731 1.1705242015782853 -780 731 .8149865679885825 -786 731 .8640213301037708 -793 731 -.6065597458002 -799 731 .885623928475602 -804 731 .513920874261876 -807 731 -.49102645899867925 -818 731 .5941209456903898 -825 731 .5875363011536346 -827 731 1.1138014327033476 -833 731 .47233917541701465 -836 731 .6323302507978479 -859 731 -.03285243924449985 -862 731 -1.2026973286630955 -868 731 -.6470398288928821 -869 731 -.38238982663267207 -873 731 .351385543550757 -878 731 -1.110219409278326 -885 731 -1.3802164888059067 -895 731 -1.0709025234528213 -899 731 .34412195948524377 -911 731 -.13859053247396846 -913 731 .927406049097872 -921 731 -1.3282095934344025 -924 731 .9818839541059943 -932 731 .4496763135233929 -933 731 -.5599473259451364 -961 731 .45667479148347334 -965 731 1.4990982557615327 -976 731 -.25948720189803476 -16 732 .7196234908146406 -30 732 1.2103797016133182 -46 732 -1.0235990923545994 -51 732 -.1299010240908424 -54 732 1.7720241368792262 -55 732 .7880338165608696 -58 732 1.5718600404230763 -64 732 -.7709856641496864 -67 732 -.9759631620051988 -83 732 .11992410398248213 -98 732 .4553124792566942 -104 732 -1.4850056153745903 -120 732 2.4700029969701633 -132 732 -.00503147742995011 -137 732 .5121708642648151 -139 732 -.35579167218678287 -168 732 .8465258277881209 -170 732 -1.130944870246324 -180 732 -.5704930904257459 -184 732 2.5427342479697432 -190 732 1.625195336506087 -207 732 .6029561881815974 -225 732 -.13691249685492862 -251 732 -.9387526238880067 -255 732 -.46307717045049757 -257 732 -1.6195663165385146 -260 732 .9814660820659895 -293 732 .7977887066133295 -305 732 -.12183211949434103 -312 732 -1.7856572573245932 -328 732 .3204383408021483 -335 732 -.0404055130668652 -362 732 2.070574818146598 -384 732 .9657190770509442 -391 732 -2.127084213119494 -407 732 .3698579866192529 -425 732 -1.483878580717046 -429 732 -.37228608711376665 -437 732 .5620842301099924 -443 732 .32006578228784427 -447 732 -.3684279016243756 -453 732 .1993670453683132 -455 732 -.7663691660039378 -458 732 -.04506179938576739 -464 732 .42031103633104716 -466 732 .8116921749843282 -515 732 .6290546900287926 -516 732 -2.3841481329763936 -517 732 1.1734214654682666 -522 732 -.4597285911083838 -526 732 -1.9439331544220178 -527 732 .7701337917679544 -529 732 .11159526737662495 -532 732 1.1909973922401567 -538 732 .6348202085468622 -539 732 1.0489137380922726 -550 732 .29590939216954054 -560 732 .02203540053828465 -566 732 1.0916170558848166 -577 732 .8850261785973332 -582 732 .8872749835911702 -588 732 .8136254576988448 -591 732 1.5861085280158733 -618 732 2.522314569369715 -621 732 .545813808764062 -646 732 -1.9697607513745792 -651 732 1.57791089089518 -676 732 .02423956449165432 -690 732 1.660223755823984 -699 732 .47567820644715814 -700 732 2.0266849104783353 -714 732 -2.1037184137326195 -716 732 -1.9343996077042067 -717 732 1.3655153713137045 -718 732 -.7572519710490457 -741 732 -.39725428151690767 -745 732 .7735814060836135 -748 732 2.159633136133809 -769 732 1.5636530471468184 -788 732 -.29514637896016477 -838 732 .593503133938242 -844 732 -1.4580508339629503 -848 732 1.6124614347285617 -864 732 -2.218650277008788 -893 732 .38220118740611037 -895 732 -.8397950934461823 -909 732 -1.6052123637853752 -918 732 .33322490841717545 -922 732 .4264129375692205 -928 732 -.7602231454403637 -932 732 -3.0717902818774903 -940 732 .2170093778939698 -946 732 1.592174705468 -949 732 -1.7841805349901951 -961 732 -.2935825330324258 -969 732 -.9841882022811625 -979 732 -.44266773511234225 -982 732 -.1418903128354462 -994 732 1.503821473922183 -8 733 1.9015155343753738 -10 733 -1.5480303153221873 -75 733 .966675879133754 -79 733 -.39609575607204517 -119 733 -.050088954348541104 -121 733 -.16707920131611576 -134 733 -1.126374283448063 -147 733 .7182249562562145 -153 733 -.9378399068705346 -167 733 -1.253395428111982 -195 733 .16490673561224045 -204 733 -.22493158008460512 -230 733 -.23120277077612936 -254 733 -.5140312514460067 -260 733 -.38575122191056754 -261 733 -.9332672549034161 -277 733 -.20499034552240197 -281 733 .6966722955530402 -291 733 .026375339701040158 -302 733 -.7122800141501512 -306 733 .5065520902531371 -311 733 .7969073384858986 -314 733 .16018455613670815 -320 733 .22217448529961997 -327 733 -1.0893346623354916 -328 733 .5551228506465816 -348 733 -.9234013368594615 -356 733 -1.3842222507910924 -360 733 .4117311384983555 -372 733 -.8305394023274175 -378 733 -.9297286189661836 -392 733 .12326451937692796 -407 733 -.9010010689317345 -416 733 -.7712705362280612 -424 733 .9843813873524027 -448 733 -.6351739174642282 -488 733 .916439132546836 -501 733 .7111360892801689 -548 733 -1.653815543391879 -558 733 -.17978376084109132 -564 733 .5410330904724524 -574 733 -.09156322064095701 -577 733 .5552754758772868 -578 733 -.4667546313988091 -590 733 -.3672146931436022 -599 733 .6003716919808948 -612 733 -.2203715360350085 -626 733 -.5145143216359047 -628 733 1.18141253508476 -634 733 -.8592963282402758 -639 733 .17471548715980242 -673 733 .8415888660609533 -678 733 .1842832377269774 -684 733 1.2568040203325734 -693 733 .5727235378103216 -700 733 1.0883875930394762 -708 733 -.867982659418175 -739 733 -1.1403240191312376 -746 733 .09410227436189227 -758 733 -.1515475485737328 -760 733 -.037292722279981344 -771 733 1.0502128560806656 -801 733 .9931539714787918 -823 733 .3241530808104948 -830 733 1.901406812821125 -837 733 .5673570903725401 -841 733 -1.4398469988615052 -842 733 -.5949246413606414 -845 733 -.8583889314917175 -859 733 -1.6102835820203585 -868 733 .194084202864705 -869 733 -.9139269268169279 -874 733 -.39065817525743507 -899 733 .9457376602506993 -902 733 .19778013513442066 -911 733 -1.1447712054464354 -913 733 .38714283788370873 -917 733 -.6460437641473926 -921 733 .6571192894548727 -934 733 .9359431219595336 -935 733 1.444538173340641 -941 733 .8045313066019292 -948 733 1.2918625922986215 -963 733 -.6840603090515529 -988 733 3.2095239760023575 -995 733 2.1300434635831516 -6 734 .8291863007996908 -11 734 -.248494135670137 -22 734 -.6203699480960935 -27 734 -1.341754689332424 -60 734 -.7045801853390096 -94 734 .3723667062912461 -106 734 .09554413620073078 -120 734 -.5091689160600366 -127 734 .6359907712305921 -128 734 -.14858561574391113 -137 734 -.12565873788318155 -149 734 1.9261958175914131 -157 734 .6490466674817733 -158 734 -.4431287056367554 -167 734 -.18846106058862638 -168 734 .23175111428560485 -178 734 .06879549199659679 -185 734 .5956596269341619 -192 734 .621659925350106 -203 734 -.18401939270398004 -211 734 -.6596658134922744 -222 734 .5104026994207135 -242 734 -.37480931714876636 -255 734 .3198572516574718 -263 734 .9412379833213508 -293 734 -.51630270802015 -320 734 .3210754178430578 -340 734 .03656777581547114 -348 734 -.7911313226987406 -350 734 -.6295947082439092 -375 734 .10316646048551151 -389 734 .20259596016779452 -391 734 .1754815861535409 -407 734 -.34272535890002526 -411 734 .9132676010235925 -422 734 .07771402088152113 -423 734 -.7830804231807857 -431 734 -.5691669786875773 -432 734 -.9552350288634478 -441 734 -.6274200584149447 -449 734 1.2936714364617106 -467 734 .79687091488441 -470 734 .21475176953768427 -479 734 .06268048103387988 -481 734 .044221803116904115 -526 734 .7761543421313636 -530 734 -.7433796136096239 -550 734 .7958016109911115 -552 734 -.8320272229590534 -558 734 -.5129981019298768 -569 734 .006757039971831534 -575 734 .09852413223989649 -576 734 -.280185798540141 -577 734 .2950606381442794 -578 734 .6927288406413143 -589 734 .2538380174923234 -591 734 -.9162614754729449 -594 734 .050762087183481394 -601 734 .23908116498090748 -604 734 .3931386642856747 -617 734 .2228089927146545 -624 734 -2.034976426686744 -647 734 .8448809914409364 -652 734 -.4925692853266216 -657 734 -1.6748254564803413 -681 734 -.17040729511212038 -689 734 -.21652038871457494 -694 734 .2583312540727142 -703 734 -.4131698988023683 -715 734 -.949438507955775 -724 734 .17755748049355835 -729 734 -.2947240582409625 -741 734 -.10452254851231746 -746 734 -.5499074196015099 -747 734 .2025703485736393 -758 734 -.06953158855855827 -772 734 1.0756152331675468 -776 734 1.333389301823921 -788 734 1.7256866813402667 -790 734 .8018551705718989 -806 734 .2744583085546701 -813 734 -.002757447905740229 -832 734 -.013043466928328723 -836 734 .5029031161283825 -844 734 -.34145609162719404 -849 734 -.2723995611928048 -853 734 -.1293295094205535 -859 734 -.12834872666113206 -860 734 -.26815159061888877 -875 734 .4431227724060476 -877 734 1.7030681411787698 -891 734 -1.0746119562703134 -907 734 2.035032197530327 -915 734 .6391905750430674 -926 734 -.9970452512630101 -932 734 .054735036860645285 -967 734 1.7338363991301242 -974 734 -.5798270041093534 -29 735 .8059376482247762 -34 735 -.6940351731857634 -68 735 .25132894045028015 -70 735 -.586195151413595 -82 735 -.66375252603018 -85 735 1.277220122827404 -87 735 .5298977458215142 -91 735 .3104516236184617 -93 735 .427368474636671 -97 735 -.14381301921483258 -98 735 .10877026505053171 -99 735 -.9645157979568357 -101 735 -1.6454585960616788 -127 735 1.6992300856334526 -137 735 -.9229508245971785 -144 735 -.242637632835505 -151 735 .4148777706808873 -163 735 .05801854830888944 -196 735 .497539803524994 -204 735 -.12583949866152472 -240 735 -1.8586705996182205 -261 735 .49039718492535755 -271 735 -.8384302527810887 -291 735 -.7405300204727197 -304 735 1.2958594545681796 -307 735 .5412652861881359 -311 735 .21779812322202444 -314 735 .37854525543463047 -323 735 -.2707857225101324 -331 735 -.05137708631322568 -332 735 .487313131636355 -355 735 -1.4674686466834088 -357 735 .6483701684006056 -362 735 .7777184147042799 -381 735 .6233362020888495 -395 735 -.39459223105940566 -398 735 .43632464121059344 -400 735 -.49904797384649835 -420 735 .1311109430272145 -421 735 -.8885243460646133 -426 735 .15557886719753444 -431 735 .2642485139394208 -435 735 -.0002703448713246709 -436 735 .010598909967808445 -476 735 -1.0534674641170843 -478 735 .06422378624231048 -487 735 .29554958675164145 -497 735 -.1919064871175568 -530 735 .9579475535908123 -551 735 -.3894482995155326 -574 735 -.571704402708757 -576 735 1.3951681175801074 -613 735 1.0924433698054605 -624 735 -.26736349284837707 -637 735 -1.5115869667752828 -643 735 .29055379230415107 -647 735 .31388180623655193 -654 735 .47792739362585446 -666 735 -.1937353301707743 -677 735 .4862754213873918 -678 735 -.9598674328595779 -688 735 -1.511214094379512 -712 735 -.9499341797269311 -726 735 -.7639359869930394 -731 735 -.05054237142255989 -732 735 -.2189612895489874 -746 735 -.3276339017278411 -752 735 .2714641239872627 -753 735 -.2724214503368154 -760 735 .18936141422319552 -764 735 -.03144847088476869 -787 735 -.323666858089087 -800 735 1.030035319207922 -808 735 -.47870693549105026 -811 735 .2684508133226358 -814 735 -.12842640846154468 -817 735 -.4387052174018887 -831 735 -.9147337792289907 -832 735 -.3800713835527541 -835 735 .8116730373341694 -852 735 -.03651052968247477 -854 735 .5752350966599565 -865 735 .12208330681875937 -871 735 .7678053887608391 -881 735 .6958710766341368 -883 735 1.0838059752808085 -894 735 -.3222875449434529 -898 735 -.037338754415670944 -899 735 -.3842287942539519 -925 735 1.103833538918613 -930 735 .4187895033524734 -941 735 -.5759135075325987 -946 735 .1956056734163328 -954 735 .7169615161541751 -960 735 .5004598117782235 -981 735 -.34346708625298966 -8 736 -1.018203447095266 -14 736 -.8620859816854646 -19 736 .5744072062989286 -25 736 .016497201472406645 -35 736 -.5433363385626822 -37 736 -1.9514486206757176 -42 736 -1.0980436489960381 -45 736 .2777431126071859 -49 736 1.4615643081420482 -57 736 -.8208852279594123 -63 736 .17962035810801116 -75 736 .06018406131271002 -78 736 -1.1630239924713606 -79 736 .14772778869727438 -89 736 .31253696822712784 -94 736 -.3902403507984666 -106 736 .02372340495772161 -108 736 1.095777177465886 -109 736 -.3292964810134875 -122 736 -1.4265854751418925 -133 736 -.9545720340661614 -148 736 -1.0542504658808332 -153 736 -.31033445990489006 -155 736 -.14788378988078626 -168 736 -1.5889835444995075 -170 736 .009590332261349005 -174 736 .4651397997591813 -176 736 .05264727587032561 -198 736 1.5419464284285833 -199 736 -1.006362715849802 -206 736 -.6177029616625601 -216 736 -.8486757691549596 -226 736 1.3506448724931448 -245 736 .1492138827795973 -255 736 .7998856071438458 -257 736 -.5595478283209496 -258 736 -.05073612973396699 -284 736 .018039650341187104 -285 736 1.2654609115731164 -286 736 -1.8156220670656251 -303 736 1.5353203427444222 -315 736 .5592135247791182 -357 736 1.7686307527865932 -360 736 .24115924703425023 -364 736 .6869458337552045 -369 736 -.45311955802786424 -373 736 -.4388718001509847 -375 736 .850657963877432 -381 736 1.2769781147513448 -390 736 -.34489489489921027 -401 736 1.906608023634335 -406 736 .19530222660732954 -415 736 -.736771533159498 -422 736 -.3393394416408053 -428 736 1.6783334593574406 -432 736 -.5222079067687294 -440 736 -1.8816219447146698 -442 736 .5162158888266243 -444 736 -.15698911803813134 -448 736 .4524291497490852 -452 736 1.2079948764004342 -464 736 -2.4377226029522467 -490 736 -1.1334833946970875 -493 736 -.056844598159469295 -495 736 .9152027397004616 -505 736 1.0628606000390377 -507 736 .08396337957093872 -512 736 -1.0635765569148181 -515 736 1.1353074738243971 -530 736 -.7793263732584714 -539 736 -1.0087165524551576 -543 736 1.1461552753898754 -544 736 .26424286184956297 -548 736 .964327821838235 -551 736 -2.613094218448817 -554 736 2.286730476952797 -563 736 -.23582323587326995 -564 736 -1.8670354851355075 -567 736 -.7911689331024623 -583 736 .4670159097983855 -584 736 .5719080005342859 -597 736 .6019583316238403 -619 736 -.941874434289419 -621 736 .15417101231246805 -633 736 -.43081298667116186 -638 736 -1.0127325293302352 -668 736 .18805937198056147 -678 736 -.25871017933387774 -697 736 -.3471228106481194 -702 736 -.3109282727158196 -709 736 1.8333808197440526 -728 736 -1.0839497730414143 -729 736 .5109567121817528 -740 736 .3440088371642134 -742 736 -.8727593111865907 -743 736 .6035406564208792 -747 736 .04991452611433289 -749 736 .9147323444025516 -754 736 .06365963588257885 -755 736 -.8659165272365074 -783 736 .17494568847162786 -786 736 2.5361883000093415 -787 736 -1.2588748559838814 -799 736 1.7932833059396658 -816 736 -1.1676756782689997 -827 736 -.1129005525274313 -829 736 -.5110424279758712 -844 736 .9100529275080543 -845 736 -.4524141713081775 -860 736 -.4567258956920295 -866 736 -.6145884647340063 -871 736 2.501600544883793 -872 736 1.1148139397162284 -882 736 1.3279842517820268 -883 736 -.33107669351541247 -888 736 -.6686734946154607 -901 736 .382335887068802 -917 736 .222101224601441 -936 736 -.7158613182017713 -939 736 -.8302418572028994 -944 736 1.0833732316603308 -976 736 3.041929495210515 -985 736 -.23040045828305408 -986 736 1.9083272744446738 -990 736 -1.4533433751107168 -991 736 -1.3274745801592658 -1000 736 .4898382748926563 -15 737 1.4387324128705343 -16 737 -.3373703030060921 -33 737 -1.8489530990198955 -35 737 -.8751936924088031 -51 737 .5633995501573373 -67 737 -.5808224458429915 -69 737 -.01654492441855475 -79 737 -.10747193768875324 -80 737 .9499008866102001 -81 737 -1.1175732503461986 -84 737 1.1437723821286556 -89 737 -.34460488761021335 -96 737 1.4565214128342499 -103 737 -.28432009484419074 -107 737 1.4664415799930837 -111 737 .8589734626596576 -154 737 .14793114232723803 -156 737 -.39276248307134837 -163 737 -.053595541041860845 -164 737 -.2867124433718432 -182 737 .6803163875469282 -183 737 .0742760224341642 -194 737 -.5453001775093158 -196 737 1.3969181231254182 -198 737 1.7928989306142313 -201 737 1.071919359497085 -202 737 1.1373346369245099 -204 737 .5701946549154904 -213 737 .7899401181271226 -225 737 1.871653784933792 -241 737 .3212318196738496 -242 737 -.3899989588482583 -244 737 1.3155418695430694 -258 737 .3879275634501982 -259 737 -.6180554449804625 -261 737 .1629292746444852 -265 737 1.608606423014912 -271 737 -.7593334326385706 -275 737 -.9525945036305442 -278 737 -.7262986739337154 -296 737 .18972109655886388 -302 737 -.01867341032109099 -313 737 -.7299481247969055 -317 737 .4925706249313682 -319 737 .78947230358664 -330 737 -.33293453761723923 -331 737 -.5105279306308746 -332 737 .1240315559633762 -343 737 -.4387193894975163 -351 737 .2256381451650652 -363 737 1.411239042639578 -372 737 -.11280257702254226 -384 737 -1.57955343602891 -387 737 -.12968028544372973 -413 737 -.701440524813929 -420 737 1.272069591037583 -446 737 -.336328231409982 -455 737 -2.03782584719992 -466 737 .10182027512085308 -474 737 -.5349288522174354 -480 737 .7948007181527347 -483 737 -.1674929312012497 -492 737 -3.3247572689949085 -506 737 .2677408588954583 -512 737 -1.0012228721429168 -517 737 -.6305241711251508 -526 737 -.8750881427978447 -527 737 -.7893174741134173 -536 737 -1.599501218623936 -541 737 .13163384554051405 -550 737 -.5787872336146451 -576 737 1.5112214778518187 -580 737 1.5003597796652408 -630 737 1.6058108618100837 -632 737 -.2902269534733089 -646 737 -1.0948916382667473 -669 737 -1.285449489899302 -674 737 -1.5055427131032968 -713 737 -1.7132072370284552 -726 737 -.8179373655805033 -746 737 -.34031337229726283 -757 737 -.2359693328754043 -759 737 -.8706202926384023 -772 737 .11376632348146606 -777 737 .9738194082824447 -783 737 .289241669702712 -804 737 -.36626667481982544 -809 737 .9204422645859287 -815 737 -1.375740157858287 -818 737 1.4784997669865632 -831 737 -1.949010688782176 -843 737 .6228864019793554 -854 737 1.026644409486805 -864 737 .41236666426275526 -865 737 -.7357066636273033 -872 737 -.6038316765012914 -888 737 -1.0771012704746408 -897 737 -.25778789293269594 -905 737 -1.2030265623422196 -916 737 -.08234640718719222 -921 737 1.0487360568068327 -931 737 -.11919849874061114 -932 737 1.3179602362386569 -946 737 .5848239420492488 -947 737 -1.374858685394919 -963 737 -.1192817727798015 -965 737 .9982186825937984 -973 737 -.17517587135895582 -985 737 -1.1708497828970854 -993 737 -.6183380630221063 -2 738 1.3969761398277467 -5 738 1.174477832587099 -13 738 -.4130270798166529 -14 738 -.8927785160118029 -48 738 -1.3729475619504192 -50 738 .008313715765796537 -57 738 .40519956692593995 -73 738 -.7944778381054085 -84 738 -.2174055594712184 -85 738 1.6840447224295905 -96 738 -2.470385005180064 -107 738 -.0312529199517803 -117 738 -1.2963325944542714 -136 738 -1.4983954083378608 -158 738 .4946983389219719 -162 738 -1.5939075022185951 -167 738 -1.836610622956759 -180 738 -.8905050933849371 -183 738 1.9496327629003947 -185 738 -.5811274324932874 -219 738 -.8417635750391564 -254 738 -.6877301140836264 -258 738 1.0313607698564562 -262 738 -.030866952315360983 -266 738 -.8550176915563656 -267 738 -.40069136388411136 -273 738 -.6479627320242041 -276 738 1.287217853186846 -291 738 -.6244164603675374 -307 738 1.1342290331797076 -308 738 .9374156191399681 -313 738 .6160253221450505 -317 738 1.5391309239330433 -321 738 -.016313071421674458 -322 738 -.6262731266710355 -329 738 -.30041739270690127 -331 738 1.0002955724696232 -347 738 .5995204949487118 -361 738 1.252501244721416 -362 738 2.000308209027296 -366 738 1.4433689396607576 -370 738 .3648796800927948 -372 738 .0725623973852669 -387 738 -.07962394783110062 -405 738 -1.8247729856788217 -421 738 -.8284074463575622 -442 738 -1.0248804590596912 -478 738 1.4945408052432843 -480 738 .707886458107886 -483 738 1.2555638133388125 -484 738 1.0591842562462919 -507 738 .2097035975616252 -513 738 -.5623394779884547 -515 738 -.4456486176718891 -520 738 1.9679328851626676 -524 738 .14043799187524877 -527 738 .214999184830107 -528 738 .2819575515079053 -530 738 .48947916256090446 -534 738 .6581537690692533 -535 738 .5866275964995836 -536 738 -1.6363422744852676 -537 738 .975881131860438 -541 738 -.44945538937707386 -543 738 -.5375752742994822 -568 738 -1.7957511094192575 -570 738 .7767751497978478 -571 738 -.7273359401188072 -572 738 .6713673368529454 -575 738 2.4814403254628368 -587 738 -.2824035363785179 -610 738 -1.0393809404354348 -613 738 -.8094157663589762 -643 738 -.16268821611497863 -656 738 .6964914543000483 -663 738 .07882780573165232 -678 738 -.9124745127939066 -690 738 .5656608033090865 -700 738 1.471457496443062 -712 738 2.4387430657403617 -718 738 -.24109272743213067 -722 738 -.21294438353406706 -723 738 2.7466817561611445 -732 738 1.0932925397148472 -733 738 1.125867653647671 -735 738 .7031472044669156 -762 738 -.3696821763678132 -765 738 -.21085249120756916 -782 738 -.876051698487362 -792 738 -1.0226576937073035 -805 738 -.7071354453224294 -827 738 -1.5263924887990108 -849 738 .7541978611129883 -852 738 -1.0586273529746426 -870 738 -1.5392082704257126 -900 738 -.9907778908668722 -903 738 1.1244302846808727 -915 738 -.24326005771175177 -917 738 -.005962893556929708 -918 738 .46970151920970826 -940 738 .9835409769319159 -949 738 -.5620730401483505 -961 738 -.47027571131753176 -967 738 .3541144242087307 -971 738 .06266034123793418 -987 738 -.3350784515146239 -988 738 .8290477176250954 -990 738 1.0045387742376197 -991 738 1.6056872076673872 -997 738 -.5173895025133027 -999 738 .0926942818024168 -2 739 2.9199562134114254 -35 739 -.1822711300111344 -46 739 -1.28773759518404 -50 739 1.3416680508810932 -51 739 -.9016136125767016 -60 739 -.9033014438998646 -62 739 -.14466412076013466 -66 739 -1.4259736459772983 -67 739 -.21535917520957798 -68 739 -.6505512322675816 -71 739 1.0552763303351373 -78 739 .1689157411596179 -90 739 -.43734565092986344 -93 739 -.7740573685253799 -111 739 .0835210729943737 -128 739 1.529292487460496 -130 739 -1.2787762671043807 -132 739 .1581502310350561 -159 739 -1.2188437682770599 -164 739 1.129932403342204 -169 739 .7665119732815358 -175 739 .6468433839360915 -193 739 2.2177828581119763 -205 739 2.7383412790630506 -211 739 -.6810983080398598 -213 739 .5129026143072117 -221 739 2.0654076226892815 -226 739 2.097762412884868 -233 739 .29140234979266333 -237 739 -.011650493404342196 -244 739 -.0061351103684539054 -251 739 -.09155745871289966 -262 739 1.804111506877559 -265 739 -.59202417157388 -267 739 -.026646662875103547 -278 739 .05867378582676472 -289 739 .8131507914252942 -290 739 -.42354627957139446 -358 739 -1.6349148083840344 -363 739 -2.9097442578306896 -413 739 -.08142821498332228 -425 739 .7601705147660641 -438 739 -.16915604836574782 -458 739 -.18647954994898855 -472 739 -.023766520182196146 -505 739 .15577892161185794 -515 739 1.1855094398267574 -532 739 .8770672631905474 -537 739 .5575040725314626 -546 739 -1.1829404370039367 -560 739 1.6209873705042257 -579 739 -.6827251904007532 -582 739 -.5920490957335505 -583 739 -.869477729467314 -588 739 .6921250146382897 -607 739 .9901347461588742 -608 739 -.8388793234675163 -610 739 -1.671313251997253 -611 739 .8448921351457066 -613 739 -.17387957189276418 -614 739 .7459107569253176 -619 739 .06496836899654884 -632 739 -1.0870466549792428 -643 739 -.9538036196320184 -651 739 2.471684200515576 -661 739 2.331412421326306 -689 739 -.9071953002730451 -705 739 1.1972312709721487 -706 739 -1.017853370051299 -715 739 -.20351767140229712 -718 739 .48295800571031255 -726 739 .758509504924017 -728 739 -.33183480029997237 -735 739 -.37362209680768327 -742 739 -3.3272069062819263 -747 739 -.9762688254632759 -750 739 -1.9397256987664926 -770 739 -2.1726407492598008 -783 739 -.14933595585162182 -791 739 1.0032528906108975 -844 739 .287959322172204 -860 739 -1.8703641068342463 -865 739 -.46054659392667396 -882 739 1.1552114594534846 -895 739 .6852776357011894 -900 739 -1.0843557605700536 -904 739 -.6664102683810402 -905 739 -1.2805839162293586 -907 739 -1.4378390285737892 -949 739 .4937798989003357 -963 739 -2.5376618580248635 -970 739 -.03967352829642477 -973 739 1.8565424984271104 -977 739 .3015585045753731 -2 740 1.0178137072894704 -6 740 -.18964011075226156 -16 740 -.7793635150550852 -21 740 -1.3717960152318704 -34 740 .2982118350367826 -39 740 .6427490371850939 -40 740 -.3334688251836521 -44 740 .178724491906581 -46 740 -1.9155275593095946 -55 740 .773211132110638 -79 740 1.3459550718928361 -84 740 -.9725816044207269 -91 740 1.3814680564460178 -100 740 .30005426694751425 -110 740 -.16445806471273833 -116 740 .6156625455356953 -130 740 -.4811062627838072 -151 740 -1.0212889793075197 -165 740 .5169642586218833 -167 740 .48090599280770013 -168 740 .5067489259261139 -174 740 .2647210728830268 -197 740 .8219743399542424 -200 740 1.6652062182799308 -204 740 -.3875807442547846 -211 740 -.29468888075687094 -239 740 -.11313759762754311 -244 740 -.9394036524059755 -246 740 -.949395450428903 -260 740 2.348831806910855 -266 740 -.45472634807520795 -268 740 .19397254264545294 -274 740 1.8085709078628716 -296 740 -.1500032087189998 -297 740 -1.4719465071050584 -300 740 -.09057818806553075 -313 740 1.3238936060626438 -317 740 -.2859719001760375 -350 740 .8622662837259254 -367 740 -.08230902093615482 -370 740 1.5817187737769698 -374 740 .3334258604145176 -378 740 .6594593761931586 -384 740 .8225965330887277 -394 740 2.4027852833441923 -408 740 -.19237204082735035 -411 740 1.1887402982449076 -413 740 .4144345764818387 -415 740 .53841646409444 -422 740 .11039503700913916 -433 740 -.14864647497613773 -441 740 -2.7161791742266064 -467 740 -.30242747143252513 -470 740 .23657475277563925 -474 740 -.39219806909071125 -478 740 .08024700781972964 -479 740 -.03532371274145679 -493 740 -.1960734684251899 -499 740 -1.1044763661667578 -505 740 1.1429301537015422 -518 740 -.3450321019446241 -521 740 -1.5095811107644257 -538 740 -.9592857227902579 -540 740 -.9561115246146936 -542 740 .6335836967521781 -553 740 .780949267414243 -555 740 -.47872180531257696 -556 740 .3750651203903313 -558 740 -.3316342741479344 -561 740 -.8369514995636178 -581 740 .685257500462549 -582 740 .12267237178045068 -607 740 -.1112908153157835 -608 740 -.49943111878062957 -623 740 .18027063945663274 -635 740 .2773302438927885 -637 740 -.712918712428098 -639 740 -1.1622441232312581 -644 740 2.0954969397344567 -646 740 -.943515809031297 -653 740 -1.5607786313669132 -656 740 -.11773919652760947 -659 740 -.20090583215014832 -678 740 .021567527540361998 -688 740 1.3421625209681696 -703 740 .21901312434716413 -726 740 1.0288190209984336 -734 740 .6424288946392224 -744 740 -.07557523645137926 -745 740 .8098827583054637 -753 740 -.6572361981900474 -754 740 -.1242767340588339 -765 740 .05356749395841781 -768 740 -.5310889498741647 -775 740 .3244270324052384 -796 740 -1.0979782917998155 -801 740 -.5593233597770306 -804 740 -.17874214100302133 -809 740 1.0084757317956854 -814 740 1.9947338971863324 -816 740 .11717511405231237 -830 740 .30449657369439453 -834 740 .502726786294027 -838 740 -.9039342923939072 -850 740 -1.0071169724684297 -853 740 -.3833212258214357 -869 740 .5964085181998104 -874 740 -.190705926596247 -881 740 -.8181477222735553 -885 740 1.5139369748373177 -902 740 -.5572255034133273 -905 740 1.0163655506052178 -923 740 .4100821683164221 -931 740 1.2826556822851363 -934 740 1.1264081983293248 -944 740 -.4230739828924784 -945 740 1.9496039778258334 -952 740 -2.2347283402958418 -953 740 -.9596993658716627 -954 740 .4406055483350768 -957 740 1.00334068833769 -964 740 .3171991715597749 -975 740 -.382446772266704 -990 740 .04412773034077516 -997 740 .3464988322308895 -999 740 1.545265569491864 -2 741 -1.7926767791617206 -10 741 -.6795200611143144 -11 741 -.956085236049318 -27 741 -.13748819566351478 -31 741 -1.0934442964454887 -40 741 1.1557871050786745 -43 741 2.369783457521989 -52 741 1.5877355536895914 -55 741 -1.0532035847336558 -56 741 .9222297300371509 -64 741 1.0385598998676233 -73 741 1.1481874640026066 -77 741 .21630817644316636 -87 741 -.20640598506027752 -92 741 1.5997170208231069 -94 741 -.7267726669944141 -110 741 -.6335808597574489 -125 741 -.276621419946824 -134 741 .48720911077997264 -150 741 .5498238067483143 -158 741 .9058196815624491 -171 741 -2.0643131803270167 -177 741 -.8671959070062177 -182 741 .8311667005438336 -189 741 -1.3765292143232193 -227 741 -3.9424329722789855 -233 741 .9287182213006586 -241 741 -.5139286813153302 -244 741 1.0953149723261049 -256 741 -1.653058588726715 -272 741 2.44484877914371 -285 741 .5369963656677056 -289 741 .9419745949859863 -290 741 .6662131672134461 -308 741 .9248573634846445 -317 741 .04989153912039471 -331 741 -1.0715094497295357 -332 741 -.8650593015493524 -333 741 -2.1214605866445795 -335 741 -.44190094195990215 -339 741 -1.3567279528558798 -343 741 -1.2016844998163618 -350 741 .7107867040685232 -354 741 -.5756046971202826 -356 741 1.3688714226767413 -357 741 2.242831525744357 -358 741 -1.3361759663897372 -364 741 -.13676257404751793 -388 741 -.39535830227468194 -398 741 -.3656213729381955 -399 741 1.6730659336823397 -407 741 -.5482235347853458 -408 741 .005444360983373378 -411 741 -.8450962559284777 -418 741 -.9785602364638967 -427 741 1.8031429903217708 -435 741 -.023142255064378184 -442 741 -.2540796650389759 -452 741 .6434491022152142 -459 741 .5983442662453142 -479 741 -.2637660722792723 -489 741 .5167190467988083 -493 741 -.9209973095434251 -501 741 -1.6423049856947953 -510 741 1.0277862311839052 -518 741 .9509808025047537 -528 741 -.6817506740259445 -537 741 1.2373891661901066 -541 741 -.6265950507078045 -544 741 1.9317075995556419 -549 741 -.6225018825530737 -555 741 .864955454148772 -570 741 -1.5109527006777337 -574 741 -.9708560148782741 -598 741 .1806377346601701 -599 741 -.03680071266980893 -601 741 -.6099101054307898 -608 741 -1.343291922758371 -618 741 -1.0307356843455748 -636 741 .5686508239905486 -641 741 -.883707658818124 -649 741 -.5258686556435331 -660 741 -.4025650603792469 -675 741 -1.194757386769282 -686 741 .2732545962565166 -706 741 -.35121498113512983 -724 741 .0034206500003896856 -746 741 -.004122497433261756 -754 741 .01610736687816189 -755 741 -1.731019204023955 -771 741 .5128596791096877 -774 741 .3537049605016039 -787 741 -.3958326487029117 -795 741 2.4405745909407557 -806 741 -.48200442374270436 -814 741 -.7008183376678145 -819 741 -.7870410702201075 -821 741 -.058346831535224505 -837 741 1.4430179490633055 -870 741 -.048107949786910575 -873 741 -1.51557133188379 -896 741 -1.8984289944972363 -898 741 .7591608403200484 -901 741 -.2323386474465089 -912 741 -1.52599612108303 -935 741 -.18807605368150523 -955 741 .36756046992922115 -963 741 .1465273463832914 -967 741 -3.0042951025957154 -973 741 1.786850535443664 -983 741 -1.3702556892622937 -1000 741 1.271456139947469 -4 742 -.3695221062927331 -6 742 1.2631948468422762 -9 742 2.0827513444507053 -39 742 -.7068764466513882 -100 742 -.36359100947567125 -110 742 .3756892859976917 -115 742 -2.4511176854232715 -120 742 .517763593519245 -122 742 -.08616325297821326 -139 742 -1.445248154865929 -144 742 1.0371293071399816 -145 742 .7447076557877422 -154 742 .23205250385797632 -157 742 -.26154058512959777 -164 742 1.1903334370527032 -204 742 -.8400352793638222 -207 742 -.33653507438092156 -214 742 -.4988701819121223 -221 742 1.331453937728831 -230 742 .9874515459298403 -238 742 1.040862793654599 -245 742 -.14522379304787214 -248 742 .11939780946555456 -251 742 .05112824353216816 -257 742 .6224968601536625 -267 742 -.20941908836263287 -276 742 -2.0789105496149523 -278 742 .7437304891604979 -279 742 1.1619851300827413 -296 742 1.040231153176401 -299 742 .8650710853779019 -301 742 -1.5662838001538026 -306 742 -.478494253525548 -316 742 .8240841744353158 -318 742 -.7093857020199218 -337 742 .5427350732007782 -341 742 .9499277753757692 -343 742 1.0222534280086362 -353 742 .5515818022556327 -373 742 -1.0348076484901267 -400 742 -.11272990752376844 -428 742 -.26251397500921597 -441 742 -.7883963436671454 -464 742 .05589090426591329 -468 742 -.9525439876624309 -472 742 .3579426841416618 -486 742 -.23265031238965683 -491 742 .7087981986079103 -497 742 .002698397705656247 -502 742 .016212164940181115 -514 742 .101001902736062 -521 742 1.0631282975974192 -525 742 1.7355334200978703 -526 742 .9779427292103607 -540 742 .08276432717504534 -553 742 .08195827482685866 -554 742 1.0277391725528418 -556 742 -1.8102971288185117 -578 742 .455687547768124 -588 742 -.9491598967101458 -595 742 -.6387569912457398 -614 742 .23738958061220666 -649 742 -.009243965687822847 -661 742 2.2577726990855274 -681 742 .429331324535044 -693 742 -.27203868047783103 -695 742 -1.069580644486985 -697 742 -.5112096220779119 -704 742 -1.243466269133471 -723 742 .3611261520027016 -762 742 -.2622417439049185 -778 742 .31642171941888647 -779 742 .14662310881939306 -787 742 .24484430129616874 -792 742 .09296053580969668 -794 742 .2866268806606517 -845 742 .010485004313173688 -851 742 .3110079133972886 -893 742 -.7414472013428496 -902 742 -.35317760893090533 -907 742 .559002853010806 -920 742 .45472932236801006 -925 742 -.9014295346446829 -962 742 1.6829524776741531 -964 742 -.05617673059238245 -968 742 -1.637646730177244 -969 742 -1.3823283289778692 -977 742 -.36419098812652234 -982 742 -.15812728242710977 -983 742 -.6486319909034087 -998 742 .37457044472254275 -6 743 -.7513165991828759 -17 743 .1277323278430143 -18 743 1.4004850800923192 -56 743 -.5188023300925735 -68 743 .6545838533845898 -69 743 -.08740017590236224 -73 743 .5934799426902629 -78 743 .09346306749671351 -93 743 .6786057259608091 -99 743 -1.0572210141042806 -100 743 .1855223492377207 -101 743 -.7976478313305666 -115 743 .5060816631100078 -120 743 .4563599511412116 -125 743 .7040049996051557 -152 743 .5984227132518873 -170 743 -.17740254633852715 -175 743 -.22375249841933137 -176 743 .709808661783812 -198 743 -.2556058403725806 -199 743 -.051864854084605366 -205 743 .28446912209190744 -209 743 .8267739152214437 -224 743 -.8066834146681557 -232 743 .490074709017024 -257 743 -.254099423496898 -265 743 1.9086007334227537 -283 743 .8070635094390919 -286 743 -.36868619402478764 -288 743 -.4028224040776792 -296 743 .44444924786773454 -298 743 .3629989055987546 -303 743 .49786268127357725 -306 743 -.842569117363444 -320 743 -1.004309191672606 -321 743 -.45560103093701404 -329 743 .33148631399439066 -334 743 .7730824246812973 -339 743 -.5404232033335483 -360 743 .8966691148325938 -373 743 -1.472169137726917 -384 743 -.803397172861294 -392 743 -.45555882768575173 -403 743 -.7644747143627283 -406 743 -.22044396954806375 -420 743 .022569418095939122 -423 743 .6821263697997696 -437 743 .7144360616315888 -438 743 .05964846197443176 -452 743 .892695630412835 -474 743 .39322373754773626 -495 743 -.07949313574771939 -515 743 1.1416376449169496 -526 743 -.6896945297000017 -532 743 -1.0776379919163703 -535 743 .45824293112439796 -540 743 .011433063681778044 -572 743 -.7123107421607571 -573 743 -.034427330566150056 -578 743 -.787706411171647 -587 743 -.8320772812808097 -589 743 -.34644630052504244 -594 743 -.17299061474813393 -597 743 -.6440772015125429 -598 743 .7820407753317093 -611 743 -1.057172287485241 -616 743 .2673546712721311 -619 743 .2978202509852534 -634 743 1.2413261814495413 -635 743 1.0838406305394543 -644 743 -.8493385835341966 -646 743 -.5731082389295998 -648 743 -.5958557313153594 -653 743 1.0777659354934008 -662 743 -1.5868899742630374 -663 743 .29473580633884905 -678 743 -.07367258573156019 -700 743 .3602799946614907 -703 743 -.12022171211432647 -704 743 .394525148330327 -723 743 -2.023541707961153 -725 743 -.8349485708479397 -731 743 .22040217006874455 -737 743 .5249549795525028 -757 743 -.4232972239300082 -759 743 -.3802131150587476 -771 743 -.06614195369308198 -812 743 1.121925089137442 -824 743 .06191193332783115 -825 743 -.22562543760755824 -848 743 .6432929035197237 -859 743 -.3875913921507288 -863 743 .3882171613176091 -893 743 .9762256892475241 -900 743 -.32121937893688823 -905 743 .5533165226508862 -911 743 1.4997001720012457 -921 743 .02457921675972502 -932 743 1.3181448442254693 -935 743 -.15260499757048954 -937 743 -.29637676617724207 -943 743 .2819975780888806 -946 743 .9190182640567484 -950 743 .5926280412020997 -967 743 -1.2698422748206306 -970 743 -.9944801567365941 -978 743 .11509963329970044 -982 743 .501344105454977 -986 743 .4617610987751934 -987 743 .8786627250217214 -19 744 -.7531719848516196 -20 744 -.01485555574802018 -43 744 .6118412081422011 -62 744 -.06748627879631462 -72 744 -1.0254024021759331 -88 744 .43592879274024404 -106 744 -.7763287139950459 -122 744 .19878500692477205 -128 744 .5204147941988296 -132 744 .006211265078948945 -141 744 -.013430003226774803 -145 744 .3843853689233325 -154 744 .02934365812908292 -156 744 .08370147344621638 -161 744 -.41158292004820174 -165 744 -.3058944867069373 -184 744 -.2878427806619912 -186 744 .43121478420929116 -190 744 -.2940802357625468 -191 744 -.22650754909609408 -193 744 -.11697809457250055 -196 744 -1.0453518633260093 -207 744 .28502310849344314 -210 744 -.5286923620160225 -214 744 -.11344738305263966 -217 744 .2982716423409931 -223 744 .3063112054934429 -240 744 .7616185590842068 -256 744 -.3475654393549299 -258 744 .1530278587430497 -262 744 .6787273740220829 -263 744 .6414387768467256 -269 744 .2862126248731962 -280 744 -.8247095329287026 -299 744 .6451937737792921 -303 744 -.5251744648086099 -342 744 .5875050158892031 -354 744 -.421107718332693 -367 744 .11727430810943645 -399 744 .33036625362553923 -413 744 -1.1735005453702962 -418 744 .8509988780192803 -440 744 -1.2341251378051863 -449 744 -1.0861696413811197 -459 744 .24014775131654742 -466 744 .7464310787317325 -473 744 .426573956345464 -476 744 .803773340844972 -478 744 .4726803354259377 -480 744 -.37254172555249826 -487 744 -.31779687839573356 -496 744 .2203683739611504 -508 744 -.3334558446196401 -518 744 -1.2924085265149032 -521 744 .7318756252487212 -526 744 -.34465680012269345 -536 744 .9048643673991703 -548 744 -.261171309850028 -549 744 .3438042742914813 -550 744 .8923725103019284 -599 744 -.09450103739099296 -609 744 -.5479207434265144 -615 744 .603128148234686 -618 744 .4333334476127305 -630 744 1.3222001316962733 -656 744 .6452963912503686 -662 744 1.1655232518959824 -684 744 -.739996230434794 -687 744 -.6619601572129556 -693 744 .13580132429931438 -701 744 -.5825508653404119 -737 744 -.34295850979298 -745 744 1.0984903157252868 -747 744 .2674885426464929 -759 744 .30192668402003414 -770 744 .04966894921677347 -772 744 1.2096249553358194 -775 744 -.46856578535233717 -776 744 1.3666003605878347 -781 744 .4734738577992623 -812 744 -.5513282175185193 -820 744 .4935932878696487 -823 744 -1.3437442250403522 -835 744 .9628791897729132 -842 744 .5955488160148156 -869 744 .3773890675855048 -877 744 -.6440492640374615 -887 744 -.1604634002557618 -900 744 .13993628275885972 -910 744 -.2710561832103121 -920 744 .3384022052415898 -929 744 .1468317285887448 -934 744 .1432881028525427 -939 744 -.44308131747821294 -966 744 .1287780326226828 -974 744 .2649389446717061 -975 744 .33139218551824673 -996 744 .9134099186443325 -1 745 -.44884476649157656 -9 745 1.090606715539404 -20 745 .6482225985341511 -32 745 .2116947332669489 -38 745 -.3926724979385886 -49 745 -.7988694484410519 -52 745 -.9957255864592971 -59 745 -.5495319740406341 -61 745 -.1304814028417437 -63 745 .48352423724932136 -64 745 1.1429016776970662 -74 745 .009590959285741454 -85 745 -.5813474854184445 -93 745 -.32807316962568267 -94 745 .230759751360843 -95 745 1.0096316785406316 -112 745 -.8115635235587911 -130 745 -.18728098001232385 -131 745 -.5241350755381868 -133 745 .5314984109307471 -147 745 -.6759467773403977 -152 745 1.59726098488359 -158 745 -.8825969619793852 -176 745 -.11118826158217368 -207 745 .8631181420006835 -236 745 -.2737402244241213 -244 745 -.2359515439264552 -251 745 .06221977334844642 -267 745 .04548478493724506 -268 745 -.383894416092865 -290 745 -.032816578103246896 -291 745 -1.3603880249095779 -312 745 .3750563887278332 -325 745 -.2745405307806749 -327 745 .03419026653481523 -330 745 .24089499700814584 -334 745 .19101905563069557 -337 745 .27858382636225615 -338 745 .7041250859882545 -369 745 .1691002497745999 -376 745 -.2993879261470659 -390 745 -.04454933655366773 -400 745 .16416388890175662 -418 745 -.15150214196277417 -428 745 -.06667252442850032 -432 745 -.0246094768123208 -457 745 .23493573480678034 -462 745 -.1316973914333477 -478 745 -.4486039080547124 -486 745 -.2231447193623678 -496 745 -.5406021275610995 -518 745 .6562969056789675 -519 745 -.1996189532861858 -558 745 .6414355272374016 -559 745 -.06678651196124408 -562 745 -.803924547034858 -585 745 .2644026448060805 -595 745 .38341861772762026 -599 745 .7398555036461197 -604 745 -.07568632753859572 -617 745 -.03852935096434632 -620 745 -.1706051978776249 -631 745 -.1025051087758205 -645 745 .8053955844818937 -654 745 -1.8115410781035755 -660 745 -.3246831154118286 -671 745 .8199670312294787 -690 745 .21952818631902882 -693 745 .045916270328442164 -696 745 -.43875689516026334 -698 745 -.02326723019418027 -716 745 -.03280549717407455 -738 745 -.10987853071111968 -755 745 1.2712930650874772 -771 745 .15764176624009243 -778 745 .61979613180075 -784 745 .5782637992803602 -798 745 -.19875501888253055 -807 745 -.8288651178421456 -810 745 -.25275213764462545 -811 745 .1476878634615888 -815 745 .33260953531285264 -823 745 .1863861151511354 -832 745 -.04783138262802551 -835 745 -.07806824471097897 -839 745 -.5173316553078184 -842 745 -.051035090631124144 -846 745 .6093541583670178 -878 745 -.3007336270717789 -919 745 .6063559904334193 -925 745 -.3019798784783294 -935 745 .3518121249075401 -974 745 -.22653570661353606 -977 745 -.16327219944186114 -986 745 -.7816795479485164 -23 746 .43277851044313204 -25 746 -2.138366206995022 -33 746 1.0009055492873504 -37 746 2.0697741250030397 -49 746 -2.91523913879097 -59 746 1.8906121456480476 -88 746 .30957355135269565 -108 746 .16247222745229095 -113 746 -.1260940912706051 -122 746 1.6832723017963458 -139 746 -.8356013677521614 -140 746 -.9261373787500391 -141 746 -.635155766996502 -146 746 1.3091418573545066 -172 746 .889901660378512 -176 746 -.39219750267834685 -193 746 .3644253402186829 -196 746 .1075440024097593 -201 746 .42875640002044657 -207 746 .9094959232683584 -210 746 .840343901510191 -225 746 -1.8299374658943839 -227 746 2.8483971063476465 -246 746 -.038428870160421506 -251 746 .5752719351462309 -260 746 -.6370189600634878 -271 746 .12532876088069111 -277 746 -2.9317040825482743 -280 746 .6441355312279883 -281 746 -.20891328227631153 -302 746 1.3733299175347276 -304 746 -1.7784707811582467 -321 746 .691495672261872 -344 746 -1.2576793005745737 -358 746 -1.3632815290104197 -365 746 .13862158768768734 -367 746 .6009829293107061 -381 746 -1.3016308208993115 -392 746 -.15409904867161484 -408 746 -.3851455069370106 -419 746 -1.881970942779075 -437 746 .29487935386611724 -444 746 .19876018426698733 -453 746 1.4043070519180127 -462 746 -1.285779306789672 -463 746 -.1468909276905042 -478 746 1.363569954594392 -486 746 .6541505524254744 -493 746 1.1257531435113326 -501 746 1.2701820918010251 -509 746 .6821019557841104 -550 746 -.3174259952305367 -562 746 .07937779170701513 -566 746 -1.097596053769004 -572 746 1.650318026307158 -588 746 -1.3486671030540656 -590 746 -.03785871890248782 -599 746 -1.3704467142940748 -619 746 1.252957318065187 -635 746 .2670088771248597 -637 746 .3105837427741558 -648 746 .6969445892783521 -649 746 -.18214135492915587 -657 746 -1.7231517540708168 -663 746 -.5033428092207813 -664 746 .6022284801803888 -687 746 -.40577822150460574 -696 746 -2.4212877979382026 -697 746 -.3932080069117661 -701 746 -1.9225083072115006 -715 746 -2.81918323348952 -742 746 -.6415090019369396 -748 746 1.650013063523179 -756 746 3.1420331495050746 -760 746 -1.1283070391474126 -772 746 .15559877129653363 -777 746 -1.168136858735609 -783 746 .6683367527649781 -785 746 .854122891681738 -786 746 -.40331328581882686 -787 746 .8581424074017532 -788 746 1.2342296383431082 -797 746 .19344019484735653 -828 746 -2.9174034454308235 -838 746 -.30433740124715636 -842 746 .9055398992566044 -868 746 2.025393380176437 -883 746 -1.0450955725110704 -892 746 -.6307000975117044 -911 746 -.3141952643951089 -933 746 1.2805884411565152 -936 746 .8385114564551899 -943 746 -1.8506296101017525 -974 746 -2.2151875448565113 -979 746 .7093093543807908 -980 746 -.19631770858209316 -6 747 -1.2625248901269337 -12 747 .6287248166111548 -25 747 -1.822245509781407 -28 747 -.88295697206673 -33 747 -.9044170090968309 -40 747 -1.2171951887668135 -41 747 1.0560900465903418 -47 747 .02840230095043665 -50 747 -.5164854546942191 -63 747 .3763217454393782 -72 747 -.8709025468332469 -75 747 -.9775676820534663 -81 747 1.1541182329524295 -94 747 -1.3554283941067136 -108 747 -1.0310426512986712 -109 747 .9470439597343406 -122 747 .8814759982635839 -135 747 -.20119281480345272 -138 747 -2.350547565655297 -143 747 -.16824275266821412 -154 747 .015473771784125942 -169 747 .3492919473019263 -170 747 .21636131673716483 -171 747 .0846010910078425 -173 747 1.1528919831955318 -181 747 -1.3803620910157586 -183 747 .9649781803061568 -186 747 -.7579107043761107 -187 747 1.400731407754234 -223 747 -.6880567304418114 -237 747 -.09920044412568646 -260 747 -1.4641751422409595 -274 747 -.0679979510277447 -281 747 -.19378125431583063 -288 747 1.2730563148786598 -295 747 -.7254318256295745 -298 747 -.003514528340781975 -300 747 .1576550406869615 -309 747 -.48673213201245974 -323 747 1.0308028689477975 -354 747 .4282564110578928 -358 747 -.8473825063438108 -361 747 .49488081120845373 -369 747 -.8189222046598681 -370 747 -1.036778086949305 -378 747 .03812817208128601 -392 747 1.7432974498563991 -394 747 -.4545964173218703 -396 747 -.3595614877774912 -398 747 .8438786604118295 -403 747 .36044055747485426 -412 747 .005668004626950423 -421 747 -.9833983369350491 -426 747 -.5337841564516886 -438 747 -.039005058508967294 -439 747 2.766442356034059 -447 747 .4188649797784732 -454 747 .5239724429044905 -467 747 -.2243710783083191 -481 747 -.5581149845502579 -482 747 -.7597931307166622 -486 747 1.9559465435520251 -487 747 .988195510992911 -489 747 1.09028697576213 -516 747 -.4853164681390271 -535 747 .1720352455726182 -538 747 -.09328837231915853 -545 747 -.8979724908138862 -546 747 .09388016192760706 -548 747 -.9782482478351666 -577 747 .3362436339363324 -580 747 .11398787982664887 -581 747 -1.5881456872551702 -582 747 .3776239296496816 -586 747 .38984256480053137 -593 747 -.44249805784471086 -598 747 .6721541219303488 -602 747 -.07022266496754026 -603 747 -1.1006488092501767 -623 747 .06470839551712543 -635 747 -1.8964477610618298 -639 747 .1396324443589163 -644 747 -.22104324498839786 -660 747 -.12642966125503374 -693 747 .13558528513587323 -697 747 .1044736608837782 -701 747 .2838956582953156 -708 747 -.647011319429325 -741 747 .5253354142774556 -750 747 .8318550096201784 -754 747 .35865718372499655 -759 747 -.5696332491111336 -764 747 .47317435682111986 -778 747 1.5980417052874074 -783 747 1.0808038046104422 -784 747 1.019296700270834 -786 747 1.4262936232789423 -794 747 -1.714560256838652 -800 747 .043783103990183855 -809 747 .19341915494402448 -812 747 -1.4395064768882353 -814 747 -.33855789212576826 -819 747 .6916034677522717 -830 747 .8317235199685669 -840 747 .8302221054450813 -841 747 .04583325520185136 -845 747 -2.1087453319065204 -846 747 .4719215091126451 -851 747 .8494262556023203 -881 747 -.6956496084707094 -885 747 -1.0245685368476496 -887 747 -.6816802269080828 -892 747 -.8619757808487425 -896 747 .15552841712898485 -898 747 -1.6850296293251419 -905 747 -1.6836842109925911 -910 747 .02782185454273378 -930 747 .24357496718452543 -975 747 .1113102923837258 -991 747 .5075629940291674 -993 747 -1.5027678032614578 -1 748 .7486602644008583 -16 748 1.1549254697128706 -21 748 .5221349659381556 -25 748 -2.6945402640895426 -40 748 -1.0347649351520305 -75 748 -1.1267008022232452 -91 748 -1.0957439485540932 -121 748 -1.062555249331686 -135 748 -.08777972834542432 -149 748 2.217101325579011 -174 748 -.945855626852727 -175 748 -1.5366542163921195 -209 748 -1.4178535719004868 -216 748 .9216763818999409 -280 748 -.3523684994815229 -289 748 .3021084950001835 -344 748 -1.7652239868202315 -348 748 -.9520948636718229 -364 748 1.3841323741320366 -387 748 .9342999218774256 -389 748 .0617314212879906 -392 748 1.7558370084959918 -393 748 .3996600329621334 -404 748 .7123644474564235 -406 748 .8310163438350071 -407 748 -.017485933862001046 -409 748 2.046253973451421 -421 748 -1.6429333312414578 -445 748 .6844109317096432 -454 748 1.0710837115780947 -477 748 2.6572685874222497 -493 748 2.4975838874304017 -500 748 .06953406754654268 -502 748 .30457387625069066 -513 748 1.9250946539367277 -518 748 -1.011243078007638 -523 748 1.0375005276632687 -525 748 .9281991513198926 -527 748 -.66645123846097 -540 748 .2753538544780953 -545 748 .8191285357105023 -551 748 .12704761541715967 -563 748 -1.2857458125703505 -564 748 .23314666408092038 -566 748 -1.0567500007977908 -574 748 .05469426939652697 -578 748 .8243506408750891 -585 748 -.6145136309734516 -599 748 .734988612590604 -654 748 .8231675313859921 -663 748 .045689378424455154 -672 748 -.5975780586389503 -673 748 -.5940686783484065 -674 748 .5987469563770152 -688 748 -1.2462161619664087 -689 748 -.04493331198654696 -722 748 1.5945570921723295 -735 748 1.076130492298462 -744 748 -1.3072326365146407 -756 748 -.574317570404397 -757 748 -.3349962940819533 -761 748 -.4187938432004793 -785 748 .15235628666238601 -793 748 1.0903236118582353 -799 748 2.5740793751915607 -820 748 -.285902223618127 -826 748 -1.2059284073061762 -833 748 .8082610074281957 -858 748 .08003522497681269 -861 748 -1.5676155590938299 -863 748 -1.3785736011558039 -869 748 -.527704394390521 -872 748 -1.1507784286889076 -876 748 .34256879758012315 -880 748 .7217862263956083 -887 748 -1.307861920938904 -890 748 -.5723619162229673 -901 748 -.6329101707177528 -956 748 -.7217131263537068 -980 748 1.190460011931704 -982 748 -.6722568974144792 -987 748 -.4718200186942318 -988 748 -.38612680738614086 -991 748 -1.0574203420242287 -994 748 -.5654348163848131 -998 748 .056600119290697345 -27 749 1.7090306841421952 -28 749 1.0477957297303755 -30 749 1.3361913391088214 -50 749 .34395148458794234 -65 749 .32392598255611255 -75 749 .8968930145371762 -82 749 .6353425593603672 -85 749 -.09305738024398534 -109 749 -.08481787330955996 -127 749 -.4697598463871437 -142 749 .5093058462626384 -149 749 -.710639812671465 -157 749 1.5209395313838248 -160 749 1.5332900237417184 -162 749 -.038197135444831484 -165 749 -.373913405345321 -167 749 .4713305885145429 -180 749 .7899529401879444 -194 749 -1.3433997489845229 -205 749 1.4106439302442104 -221 749 .4522145065227622 -229 749 -.8496769037243143 -249 749 .005796127063415597 -251 749 -1.0025070721289544 -254 749 -1.3288346990763222 -255 749 -.9699678635339277 -264 749 -.3245847118139866 -272 749 .5416090407347772 -273 749 -1.192313624654188 -302 749 -1.2067311900943445 -310 749 .28839260437136305 -311 749 .2321093115527227 -339 749 .29572069017010516 -360 749 1.7970667133823162 -374 749 2.203074277606474 -375 749 -1.215727159862826 -384 749 .47864306781515076 -389 749 -.008566638916393194 -414 749 .2927945245288639 -416 749 .17892372362447984 -431 749 .23488322142017673 -435 749 1.2727409563974257 -444 749 -.7031018560788482 -464 749 -.08213227947804394 -474 749 .7595616550775144 -479 749 .4035650343226762 -484 749 1.5277574070948325 -494 749 -1.4455102621413063 -507 749 .4931818846881641 -510 749 -1.4346517380809218 -511 749 -1.2859500475458523 -519 749 1.5065640343183415 -526 749 .6486687487294053 -529 749 .4169707132058963 -535 749 1.037971101586201 -536 749 -.23419157859951448 -544 749 .5553298572737017 -563 749 .22766453592268715 -584 749 .33980950199573035 -591 749 1.0038960972634376 -605 749 -.9128277207120987 -606 749 .7493620646892696 -612 749 .2566397328918034 -621 749 -.7990488196344785 -623 749 -.04672170518978841 -632 749 -.35076503945642934 -636 749 .05769576286678844 -640 749 .7525783630947818 -644 749 .10522896748907698 -650 749 .883562008127695 -652 749 .35131006922165886 -684 749 -.21688146195728694 -688 749 .19682041825740787 -691 749 .25968726364169237 -692 749 -1.172178890800992 -697 749 .05697490439581192 -718 749 1.9475637975288822 -725 749 -.2767870879306392 -729 749 .0667193994731154 -730 749 -.38918090894479807 -732 749 -1.152938318381681 -737 749 1.0110998873080577 -749 749 -.303232096007539 -759 749 .62715591869799 -763 749 .7508105106393796 -768 749 .08358701840417336 -771 749 -.9344194773485942 -773 749 -.5830663698499515 -793 749 .07326744736655988 -801 749 -.5301261432722897 -803 749 -.8630900067759997 -824 749 -.5993974116737499 -835 749 -1.2319594611701525 -837 749 -.2627143438318135 -844 749 .05102784966727718 -852 749 .3569256505823573 -876 749 .7301538256275166 -889 749 .8339333424895266 -900 749 -.14583809437979717 -909 749 .32260616060247516 -917 749 -.0805241339030682 -926 749 -.020635421994374674 -928 749 -.24101495662422817 -931 749 .4176489806666813 -942 749 -.13173206140899865 -943 749 -.602491007267316 -947 749 .5540451563391622 -952 749 -.6437024695836452 -954 749 1.028530500774447 -964 749 -.4042231178747082 -965 749 -.612596880264351 -975 749 -.541062535573849 -984 749 -.8768187810239889 -9 750 .2905952043174862 -25 750 -.5357752337235938 -45 750 .28420406335485876 -54 750 -.2407360261714474 -68 750 -.5266066558996879 -80 750 .20396770407692014 -83 750 .9219447186465544 -94 750 -.7754869842982146 -103 750 .5872872261450188 -130 750 -.07800296567467072 -133 750 .2625807134434435 -144 750 .6307353160670833 -146 750 -.41846905933707607 -172 750 .5994652848098907 -192 750 .9188666569009855 -194 750 -.7947583051776841 -196 750 .7542366435827247 -204 750 -1.865136652120568 -226 750 -.17376830701043194 -227 750 -.43490390118597716 -231 750 -.015409136264713172 -234 750 .32376016639623006 -245 750 -1.6649239009206742 -252 750 2.088809886079518 -259 750 -.11964008098619106 -284 750 -.521191322017682 -301 750 .18519766307410546 -303 750 .08891289762068544 -327 750 -.30134646808312726 -330 750 -1.093647445273084 -332 750 1.241940253060918 -333 750 .6690847080051319 -336 750 -.27028780799921726 -358 750 -1.679757905695819 -359 750 2.2558122243191256 -367 750 .7292415603146145 -370 750 .07105622700732782 -373 750 -2.494364100088202 -375 750 .4286348736746872 -393 750 -.13984769064559494 -398 750 -.2119245125636837 -400 750 -.5890780486758969 -401 750 -.39112649758750656 -407 750 .4292062016235072 -411 750 .11164239104784279 -428 750 .7333537812485276 -443 750 .1426590966119067 -457 750 -.23389213505253761 -462 750 .3943430150732059 -476 750 -.40933534479548195 -486 750 -1.1743003391673206 -494 750 -1.2383600798876326 -536 750 -2.253782149721392 -558 750 -.419356548901471 -577 750 1.4326113540757022 -584 750 .4444421709758981 -588 750 -.1843136402076151 -597 750 .3284240973044975 -607 750 1.1097831837015149 -609 750 -1.0532560307569856 -634 750 -1.2451299393527706 -636 750 -.9935991307719206 -637 750 -1.6868629862215438 -639 750 -1.4078498476653802 -640 750 .775875303623355 -645 750 -.17727057228006118 -649 750 .1539894809147598 -654 750 1.0459850459592859 -661 750 2.449287294470539 -666 750 -.4780917712983774 -667 750 -1.8365059289497812 -677 750 .3676674448126948 -684 750 -.8892659810334632 -686 750 .3980084410921605 -688 750 -1.589127583466672 -700 750 .43796489622343365 -704 750 .20209965366201155 -707 750 -.41155178402989 -708 750 .9751350330272726 -717 750 1.1769961341909783 -720 750 -.698974584192293 -729 750 -.4271463792574442 -735 750 -.4257394362317759 -749 750 1.8898377326291622 -752 750 .34388034572566084 -757 750 -1.0668043331585313 -772 750 .19709606679166106 -777 750 .6882241169005103 -779 750 .3166165573832087 -788 750 .25408889769332854 -791 750 1.188988723706666 -809 750 2.041241008732433 -813 750 -.22049396797651988 -850 750 -1.5508543500163237 -853 750 .9624764688134364 -857 750 2.0242711828221296 -865 750 .9556221257009297 -870 750 -2.4049595776004606 -886 750 .6337162310776507 -894 750 1.0091495925009186 -908 750 -1.3702087077805465 -910 750 1.2740168909416865 -921 750 1.815283106884657 -926 750 -2.314023488537572 -929 750 .41671309663557987 -930 750 .08440205901019564 -961 750 -.23997985361830443 -975 750 1.3394267095109518 -983 750 1.0431739544594525 -989 750 .7052458918899055 -990 750 .14427401913252438 -993 750 1.1575541011558959 -999 750 -.5996690910804962 -22 751 -.8570059384064416 -26 751 -.5667843136709053 -34 751 .5154483084892789 -45 751 .7464149461371016 -84 751 .02433622984839577 -94 751 -1.6191279753928587 -98 751 .30721150437543404 -110 751 -1.9720166129732988 -118 751 -.8120709962876276 -145 751 1.2025161466592809 -153 751 .05107447775477972 -176 751 .28488463101523326 -200 751 .07057803849212149 -202 751 .6096171790317907 -225 751 1.6930778046581418 -233 751 -.20970827963798194 -249 751 .11690636880667833 -268 751 -1.8002745671943174 -289 751 -.3622374957219471 -290 751 .5583799698120548 -299 751 -.8795827206879658 -313 751 -.015384555225094299 -319 751 .3368915463074894 -321 751 -.8324225709428111 -329 751 -.5677594388488649 -356 751 -.9408445358403612 -365 751 .7665843259644839 -373 751 .9536587393122905 -375 751 -.9840874047250892 -385 751 -.051474304573688845 -389 751 -.1016611773008856 -400 751 -.6310911892386086 -407 751 .6711126808344361 -417 751 1.9979298416456057 -442 751 -.8836982808364494 -443 751 -.45051202467970247 -451 751 .6443278014064373 -452 751 .17264124481407483 -455 751 -.8263631082540335 -456 751 .7046014676312702 -484 751 .5465713934305859 -492 751 -2.0718987197498806 -531 751 1.6834177057225512 -538 751 .13531939224921113 -556 751 1.1163236171176285 -576 751 1.454937498815398 -585 751 -.12832075047310643 -586 751 1.1160994948555085 -588 751 1.0438488191069228 -602 751 -.5117322631700905 -617 751 1.1388566238488496 -621 751 .7778040782304683 -622 751 .3977858370733785 -652 751 .0049149222146195465 -659 751 .8580390533904545 -662 751 -1.2588727636024313 -666 751 .581537380621888 -675 751 -.8448775551009046 -676 751 -1.6675976041219784 -680 751 1.445460312973232 -695 751 .10980085328509254 -698 751 -.23041184550813137 -704 751 .21898260999007213 -705 751 -1.2234133875035431 -708 751 .4769779217474895 -745 751 .6859733446748822 -757 751 .8247173895911132 -772 751 .37277260119958344 -781 751 -.18579072401194552 -782 751 .3363640666489131 -803 751 -1.6486041383819199 -828 751 1.1628083585662936 -832 751 -.23616447764984205 -833 751 -.03273571792314736 -838 751 .051720506202401324 -849 751 1.520956226540333 -854 751 .49856884236239984 -860 751 -.05144021787920078 -861 751 2.1655136505279313 -862 751 .9263693136985356 -889 751 -.0030779397950167903 -897 751 .6058179259224191 -900 751 -1.2766291890160582 -901 751 -1.0581515752399746 -911 751 .10578861776976435 -944 751 .04705209060190521 -950 751 -.020182717317902915 -955 751 -.2627856080193904 -960 751 .31554862425934915 -970 751 -.8897569694574258 -992 751 -1.249023898990414 -13 752 -.0839294430021649 -35 752 -.2594607769876592 -54 752 2.3142883663939635 -88 752 .6167567525145344 -100 752 -1.471185108502092 -116 752 1.3916028177078312 -125 752 .6074885017109224 -134 752 .4564412289775177 -137 752 -1.010390338148103 -138 752 2.87202017722891 -146 752 .8251072206834433 -147 752 1.8084981451590318 -156 752 -.7721089434537168 -165 752 1.0469227432062664 -167 752 .8958021445038424 -168 752 1.3945335494253452 -175 752 -.6050782455375429 -191 752 -.33402322781496246 -221 752 -2.3889105808987883 -226 752 -1.3048760069077385 -230 752 -.6369990247123406 -235 752 -.2568582738034307 -272 752 -.846522864964779 -279 752 1.3008146659293152 -330 752 1.6279123550905297 -341 752 1.012047071554103 -352 752 1.6587054774322845 -365 752 .22953046518985046 -383 752 -1.1365240868089337 -384 752 .2834524729547195 -385 752 -1.3365562768346688 -395 752 .22471398036852722 -403 752 1.1602075279726412 -419 752 -.26166393231263513 -444 752 .886283941134363 -455 752 -.0038108204568542414 -459 752 .39769531519617235 -467 752 -.33321683143075753 -485 752 .9470530697669344 -486 752 .7477603643207495 -490 752 1.3864605712898581 -506 752 .6140540525387802 -514 752 1.4457794013944838 -525 752 .008691807912683355 -540 752 -2.057005870106177 -541 752 1.3042060685528936 -567 752 1.5325847322441586 -573 752 .4749860317400107 -587 752 1.6745575208536372 -601 752 .3049719539673594 -627 752 .8823618834454274 -630 752 -1.2074524596808758 -636 752 -.8907884027491464 -638 752 .044121669813974265 -640 752 1.3485980148309948 -673 752 -1.30991266294849 -674 752 .5751718400122688 -689 752 .9305645463709842 -692 752 -.6633261190265577 -718 752 -.2575264993711476 -728 752 4.422250121333761 -739 752 -1.1833099196051704 -741 752 -3.1412665049253174 -745 752 .02056453636991179 -757 752 1.8645793133530995 -758 752 1.4565014886171164 -759 752 -.14484096988843204 -774 752 -.532543722376054 -785 752 -.3710594275771833 -792 752 1.0498766395812897 -803 752 -2.1800030170216265 -809 752 1.3039841427568835 -812 752 .29584612676578387 -846 752 1.4822407996609162 -849 752 -.9936352745393666 -853 752 -1.9103292978624722 -865 752 1.8245003706932663 -870 752 -.21852216515704564 -872 752 .48362344881637437 -874 752 -2.144364282071979 -881 752 -1.2025723242079303 -892 752 -1.1389859569595995 -896 752 -2.1065328829885828 -900 752 .7748754316145768 -906 752 -2.092515209934461 -910 752 -1.6169597916683345 -918 752 .4964705605732808 -932 752 -3.1176135762872303 -959 752 -1.8845098823998327 -971 752 1.2985796933708322 -974 752 -.617816977343958 -994 752 -1.1417234917394357 -997 752 -.7325210521386541 -7 753 -.03998111084040755 -9 753 -.8587288207928562 -14 753 .4748042779781343 -20 753 .43896504736079667 -25 753 1.6572717481279986 -26 753 .8570589677086629 -30 753 .5687521341364121 -63 753 -1.6900103605446986 -70 753 -.9911192049899864 -71 753 1.817926142352891 -74 753 -.04857548524547013 -76 753 -.8557479904920428 -110 753 .5638651342413773 -116 753 1.2435581587150228 -117 753 2.46121261954414 -121 753 .7802566243914122 -130 753 .2779221947760887 -142 753 1.2474550978624623 -148 753 -.02286874042086355 -172 753 .23773862593060668 -176 753 -.3237331771965816 -187 753 -.37562214179567494 -188 753 .12871181072362062 -192 753 .4574424212027298 -208 753 -.33807504538382166 -215 753 1.2264592106548389 -220 753 2.937872837758245 -232 753 .7474809044910155 -235 753 -.01694651882728833 -250 753 .10066758551848816 -263 753 -.25455614538610016 -272 753 .5639449768586907 -275 753 .20602557634460494 -284 753 -.11343128628955297 -287 753 .9546265296334232 -290 753 -.6285024201631352 -301 753 -.39295508583905686 -319 753 .9306072603976826 -320 753 -.38173362088574514 -321 753 -.44708176209354156 -338 753 -1.9593722312427984 -341 753 .18529445952220328 -358 753 -.12628322260596375 -359 753 1.2679165802803118 -381 753 1.8160869032581934 -384 753 1.0056194173553261 -390 753 1.1514782467062594 -436 753 2.5114546764019283 -439 753 -1.671010845545458 -486 753 -.21869155826016498 -487 753 -3.0197058300222723 -500 753 -1.2549759223266677 -504 753 2.24506390557389 -516 753 1.5517270373902468 -520 753 -.43197024533484196 -535 753 -.3786075260062592 -537 753 -.8412039075005894 -547 753 .6559277954760181 -551 753 .737606052779858 -599 753 -.6412667677223866 -608 753 .36703862327954573 -609 753 -2.1025545822702454 -612 753 -.8870544108322167 -629 753 .47630926484018693 -634 753 1.7983275885790568 -636 753 2.0746491824754734 -641 753 -.1841331417161887 -643 753 .035599957557873374 -673 753 -1.9233957684786454 -690 753 1.1928153976596287 -697 753 .8764699795585311 -700 753 -.09204221081009994 -701 753 2.102805677165383 -704 753 -.5853205821562723 -716 753 .19342198706016137 -720 753 .021528431462685346 -722 753 -.7264486792741667 -739 753 -.8330735475080265 -747 753 .036131156708470474 -748 753 -.6006917504478541 -749 753 -.3732477178303689 -764 753 -.42569770790275774 -765 753 .08693882344287607 -781 753 .7575545844797759 -792 753 .4821618148495639 -812 753 1.5938207710120782 -824 753 -1.392715748756908 -834 753 -.09037481144681514 -848 753 2.370853768796452 -850 753 -.5482254880975919 -855 753 -1.3657209702884976 -856 753 -.04684380047339369 -877 753 -2.1174781989590286 -892 753 .05627959361781704 -897 753 -1.9624027312143717 -902 753 1.2477898840934205 -923 753 .907652570768725 -946 753 -.26030339711822387 -955 753 1.5105655031287553 -983 753 -1.6978016488243297 -995 753 1.2105618109794498 -7 754 -1.216586574383756 -33 754 -.5999101524524295 -48 754 -1.4162000815945417 -54 754 .22176791852211072 -65 754 -1.6761409151634015 -79 754 1.284291426688423 -84 754 -.43960724246631966 -89 754 -.520490596330369 -101 754 -.46263439815468343 -102 754 -.9012236250134474 -119 754 1.2149275222403535 -137 754 -.7956706975735558 -145 754 -.7113572225363882 -147 754 -1.0006222636495772 -157 754 .24737281480365358 -159 754 .19863010893658756 -189 754 -.6731316028371733 -193 754 -.2367529158386545 -239 754 1.8354035477079171 -245 754 1.5160133360271768 -251 754 .01966350962156438 -259 754 .4825039128788722 -260 754 -.4078557829489874 -271 754 .580553024015957 -288 754 -.04877052640168047 -292 754 1.3106693834195418 -301 754 .09933508527271093 -305 754 .5760575239263692 -306 754 .5376702093161976 -310 754 .031692522048126746 -311 754 -.809375158660099 -318 754 -.8362298120593157 -323 754 -.6035975560081245 -324 754 .9869359813011606 -332 754 -1.1112674602286692 -348 754 .11206634184126563 -351 754 -.046568827187205564 -356 754 -.2900763089646138 -360 754 -.13407373691907978 -362 754 -.08202778633406364 -363 754 .6419579647857562 -388 754 -.2367462052807065 -394 754 .9665526883769295 -416 754 1.0633934783013006 -420 754 .8025374000444818 -444 754 -.2640536866694619 -454 754 -.3701688179471013 -457 754 .13599270580987285 -463 754 -.38684440635272904 -476 754 .25340273111385725 -482 754 .07711102460412723 -517 754 .13940377119310127 -519 754 .2363386357794798 -525 754 -.9434491519876188 -544 754 -1.3883046886939665 -561 754 .6034215600368498 -562 754 -.6426032147803229 -572 754 .0325135213151127 -581 754 .17712249821958093 -598 754 .3822333158487102 -619 754 -.5147889098460243 -628 754 .12529399515087294 -631 754 -.6883723452003744 -647 754 .03401269921363712 -654 754 -.6246636847763766 -680 754 .17841882844729007 -690 754 .5936834090609108 -695 754 .17007706812048656 -701 754 1.0978291756338296 -705 754 -.3101648311577936 -710 754 .17301675543469636 -715 754 1.0332092496692662 -730 754 -1.5154007358155177 -764 754 1.1999397487358907 -767 754 .11857752736430616 -774 754 -.5963155378477979 -788 754 -.06722688080476502 -801 754 -.23668755622351845 -807 754 -.39352979224215745 -818 754 .9077907436303508 -848 754 -.06454569140262412 -853 754 -1.081350184314767 -861 754 .30595831455871153 -876 754 -1.431409210079562 -877 754 .9694464850011407 -892 754 -.553742080668366 -901 754 -1.4020405442986221 -911 754 -.7518500863951807 -925 754 .4484289173119623 -941 754 -1.3052391073872687 -951 754 .9057783904074159 -980 754 .05737179798963654 -992 754 -.17943717749175908 -6 755 -.7326463210348324 -9 755 .24518415372852448 -11 755 -2.0387081376418283 -21 755 1.105332289025928 -25 755 -.7801243657523345 -29 755 -.18683563102858447 -45 755 .21950973753244285 -47 755 -.10577806330439903 -54 755 1.8500836822183118 -58 755 .9056890186710261 -61 755 .5423081534381123 -68 755 -.6620257317326246 -95 755 .558716090501915 -104 755 -1.2442210363243533 -109 755 -1.8243630741873509 -116 755 -.2574630206199261 -125 755 -.2940256579076606 -127 755 -.755532432473832 -140 755 1.5093687885702929 -153 755 -.6088945294805768 -158 755 .1981730986616598 -163 755 .43557935240163237 -170 755 -1.6384292519888244 -171 755 1.6922630662579625 -175 755 .4759086653957185 -203 755 -.32696753274736373 -221 755 -1.1563983546032968 -223 755 .5912167768306681 -232 755 -.255567992650561 -239 755 -.8003448330594151 -243 755 .7376616122036803 -250 755 .10805322166281212 -263 755 1.2930494082956288 -268 755 1.341732650427178 -279 755 .42491382650950105 -284 755 .39871578268738045 -288 755 -.34278460501964697 -305 755 -.7237198794705083 -328 755 1.4289537777661585 -329 755 -.185401903821643 -341 755 .10325908321070708 -350 755 .04906227143455953 -352 755 -.6093398957914263 -375 755 2.1840627021194456 -386 755 -.9004957238710273 -423 755 -.4145445587862459 -434 755 -1.7635668991929383 -436 755 -.6966871834230808 -450 755 .9742842654521524 -455 755 -.2288780851949192 -466 755 -.200577964455185 -468 755 .32762724439376306 -485 755 .8246386694573822 -491 755 -.24714405535325742 -500 755 -.09161876153870155 -502 755 .8134209410578391 -518 755 -.6794218998256503 -521 755 .6685918850044955 -526 755 .13005057477411947 -535 755 -.21364399106153675 -540 755 -.5446573242520435 -572 755 -.46921207189702974 -574 755 .24646870694594097 -579 755 .2686245379052995 -599 755 .38513107145912073 -621 755 .056866212134731 -637 755 1.1946783330539796 -651 755 .410117657938237 -655 755 .033985213767566164 -663 755 .8605884710728678 -667 755 .2028056187383933 -673 755 .4344436411218313 -692 755 -.8904282016570422 -697 755 .3522573762943356 -721 755 -.8266037617484605 -729 755 -.6575681676511701 -733 755 .9218278211393666 -735 755 -1.0229428152291393 -754 755 -1.0427814468919485 -758 755 2.5712821864437485 -791 755 -.40453610540786344 -802 755 .6779956902517683 -808 755 2.1341683699297276 -812 755 -1.839817661718274 -850 755 -1.0147482790478424 -869 755 1.6043407155142368 -881 755 -1.1878493094906217 -899 755 -.23333569185017802 -911 755 -1.3101121468108838 -928 755 -.8731555306691253 -948 755 .6643941536242502 -980 755 .7372291589690971 -985 755 -1.3937757653397957 -995 755 1.4241096054465687 -34 756 .6856053997755476 -40 756 -.09376312649347127 -58 756 -.06936053326565159 -71 756 -3.045850972910762 -77 756 -.009476593505015868 -78 756 .5273779759222904 -79 756 -2.8412452642035197 -81 756 1.8483073530218141 -104 756 .7373461090764997 -112 756 -.05939341664965277 -114 756 .2463129977556802 -115 756 2.8707410055940366 -143 756 3.466224101137675 -147 756 -3.0285364938397628 -152 756 .853225072061098 -157 756 2.7168340418321884 -163 756 .4331847816969899 -168 756 .6962738762648393 -194 756 .43330832758456667 -200 756 -1.918231781986372 -208 756 -1.0044296838107971 -211 756 .7294388157554033 -216 756 .359395437166802 -234 756 2.491532483011962 -244 756 -1.236658485103516 -257 756 .9731370158782889 -258 756 -1.9707331056612687 -271 756 1.8273393825043618 -284 756 1.1633759776030943 -292 756 .4777964728732664 -293 756 -1.2408984503377165 -297 756 2.907439562979262 -298 756 -1.324467212656292 -311 756 .34138702976695356 -341 756 .028040503687420663 -347 756 .6223206639240437 -352 756 2.107488579254541 -370 756 -.9876517940345104 -388 756 -.561847798133361 -398 756 1.1189254069364496 -413 756 4.101411524229192 -441 756 1.1853598979695326 -463 756 -.4775040894748699 -466 756 -1.0161303991022632 -479 756 1.632906497416155 -489 756 .046686773440063695 -500 756 -.1659497019254661 -511 756 .4003362992369718 -517 756 -1.0242082223276954 -569 756 -.012083277616319776 -583 756 -1.9668926840829613 -617 756 1.040492503397691 -621 756 1.1773940449213558 -638 756 -.4735442857893419 -648 756 -3.0180454086066364 -686 756 -1.4129972103726038 -689 756 -3.2915812378765894 -697 756 1.3869288753157856 -704 756 .20190153177386494 -715 756 -.20312931750907978 -718 756 1.5189854166017804 -733 756 -.454762856849017 -735 756 2.1704882382909236 -759 756 -1.3883908639948421 -761 756 -1.0519837587349978 -775 756 .8387915536741822 -790 756 1.8672342292692388 -796 756 .8586441850414245 -808 756 -1.6020896799923419 -810 756 -4.471975566262286 -816 756 3.6110061505669155 -820 756 .7434830949424802 -822 756 -1.227503399937527 -832 756 1.6499928386376375 -857 756 -.3228961578441835 -858 756 1.7293907370670814 -881 756 1.7638488404991874 -911 756 .19142869622546063 -915 756 -.43830318094070697 -920 756 -1.4216996883913018 -928 756 -.6690297724288199 -937 756 -1.1805206323201176 -943 756 3.2216110563969504 -987 756 -2.53503027372234 -989 756 -3.068675295545179 -990 756 1.5717678746475068 -994 756 1.080317171691687 -998 756 1.9675768816959514 -5 757 -.21803833025353364 -9 757 .2912425475793898 -31 757 -.11546885760234572 -34 757 .022605755817298026 -36 757 -.052465488318340234 -42 757 -.26800546950629306 -77 757 .5052921347638125 -78 757 -.7119159053112399 -80 757 .06555790333248698 -89 757 .059871229641536516 -95 757 -.3611712892297668 -98 757 -.2389775614415707 -133 757 .3698469985614796 -141 757 .6219098465761407 -170 757 -.3500275476971545 -172 757 .28672177902400164 -176 757 .3280404569611538 -178 757 .11306756087981121 -181 757 .8011801275552812 -182 757 -.10156130073057244 -197 757 .13431379049177974 -200 757 .3152853097299694 -215 757 .02405207379230835 -218 757 .1720944390478058 -223 757 .08677860948537772 -235 757 -.3016020073950859 -243 757 -.05168187984310477 -244 757 .20014954023245646 -248 757 -.11492731009682461 -252 757 .5285976484581048 -273 757 .2594812429229083 -279 757 .6338723666152795 -298 757 -.2023651884802046 -299 757 -.012912460616464274 -302 757 -.4915636265091899 -311 757 -.08457121082162969 -333 757 .159675916877351 -335 757 -.07402459949658975 -343 757 .20052861180253093 -345 757 .04789028031871699 -348 757 .3595165290002371 -380 757 -.5345136648631696 -381 757 -.040063130048663555 -408 757 .41143414190560934 -409 757 .44735051900313233 -415 757 -.3750436983628552 -424 757 -.5901347020410016 -427 757 .9846628450458915 -436 757 .0829879250126769 -441 757 .9342963545209815 -445 757 .14648603180337474 -470 757 .3537869346440186 -496 757 .2952427420586863 -509 757 -.1848960567039175 -510 757 -.13180240083717287 -513 757 .6782327942437896 -527 757 -.8469068126908047 -531 757 .10428589357892606 -535 757 .29331201438189936 -543 757 -.46565603372675435 -545 757 .6371714619667838 -547 757 .9594277302664034 -549 757 -.2677530849506391 -554 757 .1921703222783215 -555 757 -.15886314564896997 -562 757 .15382660846862167 -568 757 -1.153605249952943 -569 757 -.33716346358575033 -571 757 -.3681973866128717 -584 757 .2151920190067362 -590 757 .1917257840673049 -595 757 .3048265728567413 -620 757 -.10866020194492282 -624 757 .0453310133358506 -629 757 .227425903983292 -630 757 -.026457792827974076 -637 757 -.6021363653730812 -651 757 .19038586333610127 -667 757 -.08786261051667568 -674 757 -.3599237721147803 -676 757 .43335460672632864 -680 757 -.6263313321018628 -682 757 -.1863741050346962 -685 757 .493004488060682 -690 757 -.963392166335717 -712 757 .3730316239535548 -743 757 .528514695981491 -766 757 .00039533720384897497 -771 757 .5706652089530334 -774 757 .6751332065350273 -814 757 -.12178149983978367 -817 757 .24246096266308753 -818 757 -.0740318011667698 -819 757 .5490644306478336 -821 757 .7542743725376755 -824 757 .5282222176804773 -833 757 -.17065841603417728 -842 757 -.4230027655747506 -860 757 .3430121771201122 -880 757 -.6208396376901464 -883 757 .05785986115576934 -884 757 -.47151108320951285 -898 757 1.062574310329026 -903 757 -.8573718410142458 -904 757 -.012502529725552991 -915 757 -.30515826891382425 -924 757 -.5536712461054608 -938 757 -.19987539287497988 -956 757 -.4049339698467376 -971 757 .42301720870433757 -973 757 -.09856471139871699 -976 757 -.7457083649274687 -981 757 .082756396782626 -984 757 -.16106365451559487 -986 757 -.8172577303066846 -988 757 .14286128700707693 -1000 757 -.6968008436474641 -4 758 -.2909467936876523 -11 758 2.1742251076459604 -16 758 .4426496405247922 -26 758 1.5519514797670548 -27 758 -.16403971762886463 -38 758 -.775703649312262 -43 758 -.9397959060644562 -44 758 -.4998681419321599 -47 758 .8841336838906003 -57 758 .5521049639117156 -69 758 .24572341615342636 -71 758 .8639118244813156 -76 758 .5967003331229546 -83 758 1.579139891009171 -93 758 -1.900061619969174 -99 758 1.453492012317982 -101 758 1.0197321286468692 -105 758 1.4852532612282323 -116 758 -.40525474587981886 -120 758 -1.7137636856699703 -134 758 -.1766358559434162 -136 758 2.114775955072984 -146 758 -.8580346739659213 -152 758 .012539032709325708 -153 758 -.4693519235040845 -154 758 -.8810510132125497 -159 758 -2.5518300869801624 -163 758 .4697806818232276 -178 758 -.6232800932829511 -195 758 .42687547517954966 -198 758 -.33686854369459074 -206 758 1.7292090034743808 -216 758 .985600804318651 -220 758 -.29139719586852475 -225 758 -2.6097508631369304 -229 758 .5589465376185871 -232 758 -.29242794859428006 -235 758 .3557157531353922 -258 758 -.17031483455527247 -285 758 -.28937007132565884 -288 758 2.2315838255494516 -295 758 -.08580606629529332 -339 758 .27298994346333966 -348 758 -.9284039569833175 -378 758 -1.027525728457902 -379 758 -1.5748687380583286 -380 758 1.1055316404901057 -415 758 .053103621561960024 -416 758 -.647779238286978 -424 758 .9897083958631484 -429 758 .40060711007796534 -488 758 -1.7198513494690162 -495 758 1.032953746203616 -506 758 -.8702514508647329 -512 758 -1.1531464664463182 -514 758 -1.7164023151353263 -528 758 .8367254779395321 -529 758 .36834046515874236 -541 758 -.22675896043384797 -542 758 .2568814169386744 -545 758 -.45430681966483666 -547 758 -1.2022079995948352 -571 758 1.9689025886740763 -574 758 .429150869835175 -608 758 .834357512836299 -633 758 1.9461114230545848 -659 758 -1.0624261544460787 -668 758 -.9452800675316042 -681 758 -2.333287169007945 -685 758 -.8233232852488599 -730 758 1.0773192235012516 -735 758 1.0370472074553116 -739 758 .65227076361374 -746 758 -1.0547231572645552 -755 758 2.9049061382793746 -761 758 .10522910769945282 -779 758 .870318690409217 -785 758 -.1856066059027574 -802 758 2.5082545123562556 -807 758 -.3315690228733878 -823 758 -.8961803402815443 -825 758 1.9886842208378825 -827 758 .1683874888360519 -832 758 .4796997485243476 -845 758 -1.6324390524646062 -847 758 .3908333890339692 -851 758 -.19035484303941563 -862 758 -.5912711012768406 -863 758 -.7300325357773086 -868 758 .07465740689084832 -873 758 -.6251339557597848 -876 758 .8713865728804294 -883 758 -.6232954399780392 -893 758 -.6245540002981678 -896 758 1.8558011102626006 -897 758 1.3804051402075201 -899 758 2.7760663354218047 -903 758 .8893000660805662 -910 758 .09267328206156239 -911 758 -.346746664998535 -913 758 .9874973014825957 -919 758 .07442466248417205 -929 758 -1.1394348208305913 -939 758 -1.02392054771703 -947 758 1.738689968732024 -949 758 .8343168957151703 -953 758 .232014283962197 -964 758 -.7778846053430675 -971 758 -1.831946857898092 -976 758 .8545019390752622 -999 758 -.8458990292408446 -24 759 -1.5721515753679232 -27 759 .41394628867525773 -45 759 -.026291682462361576 -64 759 -.3205489009797215 -73 759 .797031196087997 -93 759 .5044199262838018 -98 759 -.9161630907852208 -112 759 .8546774147579517 -133 759 -1.2614601306017486 -142 759 -.5325813240473292 -148 759 -2.417377321986177 -151 759 .5038027550858444 -169 759 .6620422554403893 -207 759 -.04238647787542896 -235 759 -1.0502574064021941 -245 759 .4557104064791459 -247 759 -.07439998269798087 -248 759 -.7337446110246664 -251 759 1.2402622539825836 -255 759 .39625013301267037 -258 759 .9518827823667564 -259 759 -1.1587460411612098 -264 759 1.9987608803913273 -282 759 1.978309824586931 -287 759 1.9722521939766713 -292 759 -2.5038585596179037 -303 759 1.366618476723191 -306 759 .4411333974875551 -315 759 .007466191315435362 -326 759 -1.0386133753931837 -373 759 .10628828819921342 -396 759 .30958842465738584 -398 759 .5878413303109546 -401 759 1.2375935018270299 -403 759 .7686255275251107 -419 759 -.5355572591326659 -428 759 1.3797853167046423 -431 759 .3760048157636031 -435 759 -.08715235806324181 -442 759 .1142622455217661 -444 759 -1.4600227673717 -446 759 -1.5005266836714166 -448 759 1.150831726687818 -451 759 .8129145040138976 -452 759 1.5508113747908387 -456 759 .23603613566637177 -464 759 -2.8136239065475803 -465 759 -.6285493054942193 -466 759 .861213737294264 -495 759 .7417389725735974 -505 759 .8656599972075887 -517 759 -.3769578001682392 -521 759 1.0537284429429141 -523 759 -.507896912494621 -528 759 .6875957236394225 -529 759 .4872409316173391 -536 759 .39755825390295507 -554 759 2.1222485472914228 -556 759 .9872625740943874 -561 759 .8570486350094689 -562 759 .3879041360882749 -581 759 -.18554360333322828 -583 759 .61449504172601 -585 759 -.39393658689913547 -605 759 1.4055222877413103 -615 759 -.3989723537980887 -626 759 .9274656065360538 -628 759 -.3403513195725227 -663 759 .8304143260290582 -687 759 -.29040853908258574 -691 759 1.1388517802478373 -693 759 -1.596056845639141 -705 759 -2.4279430082671345 -710 759 -.8899328002845308 -718 759 -.5321867183326016 -726 759 1.0109116550597992 -736 759 2.1635237457860885 -749 759 1.4444741268604573 -753 759 .9292761639580358 -772 759 -.016233534682015813 -778 759 .7995090377239243 -782 759 .157986260013313 -797 759 -.39749268280558947 -815 759 1.5209323881085937 -820 759 -.9223149743469262 -821 759 -.5964619938355193 -836 759 .6691777040239326 -840 759 -1.8121086845553611 -848 759 1.9158746510132534 -888 759 -.30562486272076866 -899 759 2.183017992474636 -907 759 -.4420651582430094 -919 759 -.2673719485769596 -920 759 -3.0631018702929143 -921 759 -.7070029210623615 -922 759 .9562082239450986 -927 759 -.33168624751209913 -934 759 -2.9180798193113144 -948 759 .4759159664759537 -952 759 .7976514100281195 -957 759 .4364119147160719 -958 759 -1.2858727381875783 -970 759 .9804280656486196 -983 759 -.8637425038154729 -989 759 2.3711447443602025 -992 759 -.8709349228670307 -994 759 1.6134332140683676 -995 759 -.8101926296742724 -1 760 -.39394609629113564 -6 760 -.03717590347718709 -30 760 1.2872656870208086 -40 760 -.23727131864554588 -45 760 -.7173630682150219 -47 760 -.055156743436526726 -72 760 .28651132092380927 -76 760 .047758161126696445 -78 760 -.3408709965437958 -92 760 -.3212910795219756 -103 760 1.0470678528535804 -127 760 1.2689968346749492 -132 760 .5427545471692443 -136 760 .046454067408433594 -149 760 -.38603161890637694 -160 760 .5029361566265448 -162 760 -.6398115218874799 -169 760 -.08036643595683732 -174 760 1.1172438222437502 -184 760 .7481556216813607 -192 760 .6572919127364363 -193 760 .4985824407793916 -227 760 -.7314276987486114 -237 760 -.2671939552624639 -243 760 -.14986908953381367 -247 760 .2073350367213333 -265 760 1.2239617466526227 -283 760 .6957692078145786 -297 760 .6621278076138163 -315 760 1.1367145520423043 -324 760 1.2721869469453004 -333 760 -.5435513548494901 -342 760 -.2978186998477482 -356 760 -.5256301148685524 -363 760 .14557203880198655 -365 760 1.1140659830138697 -376 760 .8971934965132997 -377 760 -.4267925036120201 -396 760 .377093406734505 -410 760 -1.0204139102965677 -419 760 .7131747021519124 -427 760 -.12557347259366558 -429 760 1.0581284089386063 -431 760 .12435480069774833 -433 760 -.35512673872219325 -441 760 -1.2208148144760427 -466 760 -.5290269757683543 -467 760 -.2566526410173172 -471 760 1.19706261568396 -474 760 .4065922913376726 -503 760 -.38759951978439866 -536 760 -1.6508613289013683 -542 760 -.12776813950399774 -544 760 1.8565236597754857 -555 760 .6027376979118431 -562 760 -.475220356537118 -572 760 1.1920419006604082 -577 760 -1.4291975446048522 -584 760 -.12728048293522864 -585 760 -.8915395431149122 -588 760 .10774352561309786 -608 760 .9173275614472838 -618 760 .505318950232938 -639 760 -.9381754940039411 -648 760 .6986695526275046 -662 760 -1.418560431118301 -663 760 -1.182719943480488 -676 760 -.14249794179998226 -691 760 .775503452962086 -720 760 .11525653603029866 -721 760 .4494005172431474 -727 760 -.4005481248149403 -731 760 -.5853405494870106 -760 760 -.2659732583034084 -765 760 -1.8213960697461362 -767 760 -.5967675960585774 -787 760 1.203249797939472 -798 760 .6068409832871337 -804 760 -.8334594364418704 -808 760 -1.4426265386718775 -828 760 -1.142505586494354 -831 760 .5425092220133423 -838 760 -.10628543010287181 -845 760 .7344825697185793 -859 760 .05637821059904341 -873 760 .11752375848314087 -882 760 -.7950113430454494 -884 760 .453553604398874 -894 760 .37286149794663104 -897 760 -.51967133020218 -898 760 1.0877177871557628 -914 760 .7788868231454859 -919 760 -1.483710213663017 -923 760 .6868942906498016 -932 760 -.021806682127887292 -954 760 1.1974211820357314 -970 760 -1.6531159652729852 -974 760 -.3994437255954899 -977 760 1.4726383461013408 -985 760 1.66750539834084 -986 760 -.3891220163530954 -991 760 1.022895042170772 -996 760 -.7327576990420435 -30 761 -1.9130598341792733 -34 761 -.053882685673882824 -55 761 -.1877862800067354 -59 761 .2665137945049867 -66 761 .023047190978749618 -83 761 -.6644160770977561 -88 761 -2.4274942559536754 -94 761 -1.29085706535896 -96 761 .6999990974141597 -104 761 1.242234754319094 -111 761 .42700732320380047 -113 761 -.7456328215657844 -135 761 -.5948739132445516 -143 761 -.893358873945358 -146 761 -.7186736292305296 -156 761 -.6259361000590329 -162 761 1.9083099416359701 -184 761 -.6537275546925373 -188 761 -1.3957962640109087 -191 761 .18045493182789807 -199 761 -.3569853582370924 -203 761 1.3959488246004546 -211 761 .6295778398905886 -213 761 .6655036741433097 -216 761 .16385553896554803 -219 761 -.8230794197546546 -220 761 -.7014985628021806 -226 761 1.4871506565858874 -240 761 .8203612728302299 -241 761 -.25566139168322033 -248 761 1.2257458669455574 -252 761 -.3561054089011688 -257 761 -.404373547723627 -275 761 -1.3062252909679009 -278 761 -.039459596567933644 -308 761 -.8850056796255656 -322 761 -.2909462028807742 -337 761 -.5727777971008251 -339 761 -1.13338378770213 -346 761 .3146106868074793 -348 761 .4907682288003967 -355 761 .4903438637061196 -361 761 .5934523771572711 -367 761 .19528027751371455 -371 761 -1.9704707899390113 -377 761 -.14130580041870197 -379 761 -.931929584943771 -382 761 1.1495257391764855 -409 761 3.753675219269652 -410 761 .5178267497648913 -411 761 -2.1941219431737857 -416 761 -.3485732471935663 -422 761 .375049841447031 -446 761 -1.0783926405938662 -460 761 1.6839582109046196 -486 761 .2667731926320538 -493 761 .2722072701992226 -496 761 .2966439560947206 -498 761 .406166351291365 -518 761 -1.1340660040938713 -524 761 .17104637966031372 -526 761 -.5074375506072691 -532 761 -.49952931957930874 -552 761 -.3815615730648269 -556 761 .5068203850070316 -557 761 -.8326192184765147 -559 761 1.8049836136143433 -563 761 -.6991050892506621 -573 761 .2584268695606375 -583 761 .45659938272111666 -593 761 -.7539731758992798 -612 761 -.028756308707654055 -615 761 -.5809378996542011 -633 761 .41201926835410896 -635 761 -1.2817248680950206 -644 761 -1.7828264589258906 -652 761 -.3389138564801988 -662 761 .3361517035851791 -663 761 .6083350904236977 -683 761 .5755319111217039 -690 761 -1.860669013315706 -692 761 .965246114190378 -699 761 .12253583327664894 -704 761 1.9236220781604754 -710 761 -.37446831364098854 -713 761 -.40550356658826886 -719 761 .2894947829415533 -723 761 -1.4601676027221024 -729 761 -.16329315113713516 -740 761 -.3854073359644143 -747 761 .4089347374889954 -753 761 1.1312693520741433 -765 761 1.2821676541288127 -772 761 1.5419848180173534 -776 761 1.2670137194448 -781 761 .6035474572727133 -792 761 -.6212354613871371 -796 761 2.2874388312591143 -804 761 .19338169270109765 -809 761 -.2560431539069301 -813 761 -.8440596507491532 -818 761 1.4274778388729104 -819 761 .2946862529062037 -831 761 -.9391318172813067 -834 761 -.36182151070215696 -838 761 -.5985404446798614 -862 761 -.40525546372667925 -867 761 .017779267636733778 -877 761 -.263804496071899 -879 761 .33132224314361236 -880 761 .02676415493781098 -897 761 -.3078222102523519 -904 761 .490777104071609 -914 761 -.16728633711103444 -928 761 .3842933381310624 -931 761 -.9740892901514357 -932 761 2.362581316142586 -936 761 -2.050116910909318 -937 761 .6738891563988365 -940 761 .11890137899101805 -943 761 .7638768884589812 -947 761 -.27575451928519146 -953 761 .7382880607615355 -955 761 .34836717588655014 -962 761 -1.7138642018651724 -984 761 .45388278969496476 -1000 761 .1872815659337628 -7 762 1.1806891600997833 -9 762 -.6199550226486401 -13 762 .16536902919838858 -21 762 -1.0204109363839313 -25 762 .5577379075158658 -35 762 -.8116523307900462 -41 762 1.5171793396628894 -46 762 -1.5925106548280075 -49 762 1.2165028664301003 -51 762 -.30388001522451563 -80 762 -1.3143349872644707 -83 762 1.8295893805511483 -87 762 .45406422260701546 -88 762 .526032541419568 -106 762 .14923758357184766 -120 762 -1.813641110225469 -122 762 -.39790201587367985 -135 762 .5423789903248033 -157 762 .006034992238839807 -178 762 -.7890598232210847 -184 762 -.11920419676859391 -192 762 .5798214021371657 -193 762 -.5976221087516342 -195 762 .922651847399092 -201 762 .5484951925404521 -214 762 1.5051339418024166 -216 762 -.8531914058284862 -221 762 1.4243598721865787 -255 762 .05180650383598599 -268 762 .7705134300565155 -286 762 -1.5622674738024547 -288 762 .7401225940688362 -291 762 .401787692708939 -300 762 -.4652548373338445 -305 762 -.12557051092660887 -312 762 .1277017988358081 -319 762 1.8982779101219576 -324 762 -.17634182154776107 -333 762 -.6427157195785402 -340 762 .8979551456090218 -350 762 .6287586575269934 -351 762 -.07944154351318904 -368 762 -1.0158479761121952 -384 762 .7141665525637068 -394 762 .5777994674324148 -426 762 -1.609163498835468 -432 762 -.3337185072690968 -448 762 .9437654666639584 -481 762 -.04638990901640247 -497 762 -.18544497247342784 -502 762 -.60994095116739 -509 762 -.9938434116315401 -511 762 -.8320425317871176 -516 762 1.1947044362227823 -519 762 .16088478581443277 -520 762 .20248200372753114 -522 762 .29646932573132745 -537 762 -.029450932260432536 -540 762 .7429664014217136 -544 762 -.26201867275045015 -556 762 .7545441657160629 -562 762 .5131940214367878 -572 762 -.49046160881954126 -575 762 .08814483337280178 -585 762 -.5336380722838937 -588 762 1.5383177852524506 -590 762 .8502389312160361 -595 762 -.6813070802958221 -601 762 .5711541183640642 -617 762 .1312577638646795 -668 762 -.06531952553118134 -677 762 -.6633225217121079 -682 762 -1.4775488913463484 -688 762 -1.261021900129915 -693 762 .09841339666901151 -694 762 .14068987194903881 -699 762 1.1226393642926609 -700 762 -1.196821224223863 -708 762 -.5756123433786539 -709 762 1.5303952404830812 -737 762 .40427856776169746 -750 762 .7489020892804459 -755 762 .11211413033219572 -756 762 -2.0400832026514366 -757 762 -.3465499809387834 -768 762 .49832206765066944 -775 762 -.32856074491534454 -776 762 .8437760608372689 -793 762 .4242523563795153 -801 762 -1.294050007675929 -803 762 -.31755341930401365 -824 762 .3323004353122107 -849 762 .20482733131371825 -860 762 -.16696940524268 -869 762 -1.3417009079226394 -884 762 -.4723813891198543 -889 762 .15388809398287423 -890 762 -1.3826205353341645 -894 762 -1.5550757223002332 -910 762 .1352694481299324 -951 762 .33130476300434003 -957 762 1.1636485961420997 -961 762 -.4417983440619085 -970 762 -.3732529439104296 -976 762 2.11787036504424 -978 762 .5181745164401259 -983 762 -.9636955703486934 -987 762 1.0298913073311124 -990 762 -1.0961958230551234 -995 762 .7122047946556855 -998 762 -1.032064485428728 -8 763 -1.1502960062939427 -22 763 .8533120619596455 -26 763 -1.6828033573518524 -34 763 -.6499848999683444 -37 763 -1.3143225507654042 -47 763 -.980607827905293 -55 763 .369472230040752 -76 763 -.6537915621169913 -85 763 .7925951575303362 -93 763 1.204749109948018 -94 763 -.5543962559594018 -98 763 -.08826654550472579 -116 763 1.843590172386616 -119 763 -.30809761985986744 -125 763 1.0069270023329133 -136 763 .5888837248616384 -137 763 -1.994741458004754 -144 763 -.8717929647269769 -148 763 -.7528073031609451 -149 763 -1.9449081415547969 -153 763 -.033341036450266995 -169 763 .11141514404520415 -176 763 -.006604546805227887 -179 763 -.5085779979025662 -180 763 -1.335202252591719 -191 763 1.0095120073277994 -199 763 .20192716632099744 -245 763 -1.5475885089119832 -252 763 1.8585445545104264 -265 763 -.10909592992979927 -272 763 1.1582300989533323 -274 763 .9350992947939382 -283 763 .26266642435662685 -290 763 .425016775538409 -300 763 .017686914499431106 -310 763 -.3400647717048079 -312 763 -.7504307857445776 -315 763 1.2920397848843308 -334 763 -.47912178925154447 -335 763 -.2008852620769069 -349 763 2.8232861995984213 -356 763 .008027585900994623 -359 763 1.6249191148282922 -360 763 1.2846819010597597 -389 763 -.06865739390325629 -392 763 -.3365291590333756 -398 763 -.6843884000854461 -400 763 -.12333100052336876 -406 763 -.9518529462148548 -417 763 .1878893084943128 -422 763 .9439858851258651 -425 763 -.785438500882818 -428 763 1.1849655806154162 -446 763 1.1766578051082215 -455 763 -2.8816483117890845 -469 763 .8399918231737663 -516 763 .21065300366367334 -522 763 .26199036645389356 -527 763 -2.547972381351218 -529 763 -.2880107637848752 -530 763 -.7069602570114971 -541 763 -.5072027498207428 -559 763 .28641357787636385 -562 763 .6555481009700422 -563 763 .7812137625473344 -571 763 -.23580699718886072 -578 763 .00276768972355115 -584 763 .5681117932141593 -585 763 .7185916894269958 -593 763 -1.2146440351801477 -594 763 .12847037906236683 -615 763 -.3407425847649663 -616 763 .34941931626789485 -619 763 -.011020101443200297 -641 763 -.5192393400793284 -664 763 -1.561418562041913 -673 763 -2.4517281618861264 -688 763 -1.0981800719445485 -706 763 -.15559349421517854 -722 763 -1.07557623396584 -729 763 .2644107695194119 -730 763 -.25777018498276605 -739 763 .11970693991878881 -754 763 .9541004010729108 -768 763 .5107061110365236 -772 763 -.9200692203605009 -798 763 .7142549379252335 -801 763 -.6365498468113822 -812 763 .6471903233805034 -821 763 .22939333706607487 -838 763 -.7455258352372671 -851 763 .9769919467982302 -857 763 .8174784121970937 -884 763 -1.074063070997477 -926 763 -.09181624321181928 -945 763 1.0060883654919552 -951 763 -.27346668298024307 -955 763 .8798333543176464 -959 763 -1.0475155892953913 -963 763 -1.0602532219493126 -966 763 1.2622770408625317 -971 763 1.7570892528656614 -977 763 .31551894528202573 -983 763 -1.0382779691542727 -1000 763 .5141296523387183 -6 764 .835697534683161 -18 764 .722547223749441 -27 764 1.0887571568101682 -29 764 -.8259883598899009 -61 764 -.7904067583253905 -72 764 -.23437445070971985 -78 764 1.3397893435848287 -84 764 .5532457597047925 -88 764 .8282007227830326 -93 764 -.14256287963277647 -103 764 2.05251946744776 -111 764 -.18306137752762047 -116 764 .26789821629827154 -117 764 -.16047560092541638 -124 764 -.20917718081988163 -129 764 -2.4621747006085504 -134 764 .10813267864019213 -136 764 -.6915965077668325 -181 764 -1.2080409668878687 -196 764 -.021823584745631754 -205 764 .30659019006358684 -209 764 -.08956149165382438 -213 764 .14600183574700246 -239 764 -.0552020053491188 -252 764 -.3719387052941766 -260 764 -.3547735518935419 -262 764 1.1145193134814564 -268 764 .12036331172437498 -270 764 2.5477248079259343 -275 764 1.4507612323554415 -277 764 -.00876830815485916 -296 764 -.1606375554521112 -301 764 1.7849338755821489 -305 764 .7545171852316603 -309 764 -1.0957701504604105 -311 764 .8387818360382808 -333 764 -1.277093681831243 -367 764 -1.0348183941534437 -370 764 .7647069943541486 -374 764 .5050760589082307 -375 764 -1.0231572157119677 -377 764 -.6351197163039173 -384 764 .8868234953508731 -385 764 .8826195691478811 -409 764 -.5893601890848867 -444 764 -.6614256816594104 -445 764 -.49690536482592684 -460 764 -.005344412916001469 -474 764 .5639631413950013 -519 764 .2438744717606486 -523 764 -1.4554316300292456 -526 764 -.4082574112113693 -537 764 -.18540065813248638 -570 764 -.5120921250678501 -586 764 .6456672696750596 -589 764 .8092828739386856 -595 764 -2.0051777724476447 -600 764 .4260327616632021 -604 764 1.1348360958739705 -629 764 .38439304070352875 -634 764 -1.039989409591884 -642 764 -.6189880654215466 -649 764 -.739825808875379 -653 764 -.5147551809724908 -660 764 -.31714963683123104 -661 764 .08074729303905695 -668 764 -.5587862290317054 -669 764 -.21219247171813926 -672 764 -.07194887928199137 -684 764 .2501944829923097 -688 764 .3366986987958028 -689 764 -.5792440941050034 -695 764 .6853859635912878 -701 764 .7488902474332227 -703 764 -.8961155685834249 -709 764 .2454282605685464 -725 764 -.194315578707818 -734 764 .8877115643741366 -745 764 2.339254267778584 -747 764 .28217435308799926 -772 764 -.2746695046364946 -776 764 -.2377389748825769 -786 764 -.3821769618740777 -799 764 .5135547726833893 -830 764 1.1771456154184083 -836 764 1.2245238329856174 -846 764 .16857990882270582 -852 764 -.5526726971624263 -868 764 -.330980026699046 -887 764 -1.2473687528850748 -891 764 -.8305943202286837 -896 764 .6964821382684652 -909 764 -.7466737291605027 -916 764 -.6030213246127157 -918 764 .07025279680807502 -928 764 .38015810727034327 -958 764 .07478331560369293 -959 764 1.3285699267392492 -960 764 1.322481863990746 -963 764 -1.9710636279709952 -977 764 -.14442115038362932 -983 764 -.5865259681202963 -992 764 -1.6740255560859947 -21 765 -1.0173062682579816 -22 765 -.07311513806189043 -23 765 1.535334067661533 -39 765 1.7288945442575598 -51 765 1.1492270340147266 -62 765 -1.475923000891042 -77 765 2.452084686939296 -80 765 2.713140502089116 -82 765 .6776884602304943 -129 765 -2.199149721181568 -142 765 -.3030815373245763 -151 765 -1.4439444200387677 -156 765 .3219172037103536 -165 765 -.3644537816893877 -178 765 .29214427735722276 -217 765 -1.3365342692829478 -233 765 -1.3562660449203687 -238 765 -.8313493801547961 -255 765 -.3810804583153983 -256 765 -2.0622169311268257 -263 765 .7846346792741912 -264 765 -.31619814146866027 -270 765 1.1049516090230513 -276 765 2.272156323696207 -281 765 2.4445602683971983 -300 765 -1.0615882079830017 -305 765 .12813920224937211 -311 765 2.3766428626174494 -324 765 -1.0471471039488154 -335 765 -.4341687186659584 -361 765 .6055271577809875 -376 765 -.6877540160343248 -378 765 .3400010209091312 -391 765 1.4174238317268897 -394 765 .06677570125642082 -400 765 -1.1505363847624088 -422 765 1.336219576782619 -427 765 -2.0323087525944126 -430 765 -.42757283185301304 -437 765 .99963340124055 -444 765 .07780393093741217 -447 765 -1.44604531329262 -450 765 .7924938356009318 -456 765 .03312603981093479 -466 765 .5221084012184148 -469 765 .5847060700997059 -489 765 -2.6020588023326714 -491 765 -.5540244066126302 -492 765 -.60934450069539 -494 765 .3374759126956811 -495 765 .7823346272331065 -503 765 -1.8868904170457994 -504 765 -.702476213955571 -514 765 -.10444106622970593 -535 765 1.6186345765543617 -537 765 2.1379488024769726 -547 765 .4001167643917344 -554 765 -1.6983370794238082 -563 765 .705811987368493 -574 765 -1.343675644132304 -579 765 -1.4301712082322966 -580 765 .9422416442023991 -587 765 -3.299306281881659 -611 765 .7807461559430855 -613 765 -.6428975256012939 -615 765 -1.6463901327974408 -633 765 -.0614075567869371 -636 765 -1.469156177293978 -642 765 -.21406849837565048 -647 765 -.856040105807028 -653 765 -1.3901946549129736 -654 765 -.433963112125356 -655 765 .9591566485289457 -660 765 .6494557071665427 -674 765 -.9626804967530521 -676 765 1.205536401093058 -680 765 1.3799940590683875 -684 765 -1.032605930931049 -702 765 .2408091418446837 -724 765 1.4651177285380281 -738 765 -1.5304438657405048 -746 765 .5136357163144741 -748 765 .9380179622522121 -756 765 .4053274457119709 -784 765 -1.115203989831331 -812 765 .14067448561630663 -821 765 1.0864262640481424 -823 765 -.12214806400310384 -870 765 -.8255147627009033 -889 765 -1.843708248617197 -891 765 -.10249779876190634 -903 765 1.5380561398653516 -924 765 1.95775735822997 -940 765 1.4839117097002021 -943 765 .09225861602177782 -947 765 .025323130446371522 -956 765 -1.0644477743168337 -964 765 -.22873138155932315 -965 765 -.4574122943837683 -970 765 -1.2469765388576861 -985 765 -2.0167112381576624 -986 765 -.2215057683409451 -990 765 2.4842638604160676 -991 765 1.4165653252505013 -1000 765 -1.8067629320723027 -4 766 .3801575668336049 -15 766 1.612131695890119 -20 766 -1.1991584067668288 -21 766 -1.411052919449998 -27 766 2.805884321937348 -28 766 .1809546656760873 -30 766 .6500757817351391 -34 766 -.18514847489347439 -66 766 -1.3886255061696482 -68 766 -.34464919353204293 -71 766 .7782590067588504 -77 766 1.3872116847310874 -80 766 -.11114544707704618 -88 766 1.6490124395504582 -92 766 1.2164068329077122 -120 766 1.4226809082752583 -129 766 -.06630225183094834 -133 766 -1.4249379883334956 -134 766 -.8033162204483635 -180 766 .23079970885167947 -182 766 -.23097947067973337 -187 766 1.2428146834868046 -191 766 .42437295008229914 -192 766 -.21820515089407397 -199 766 .3664764980765662 -200 766 1.354365890382539 -206 766 .3678446883099931 -208 766 .32474126443387547 -214 766 .4407039503975435 -221 766 1.639542943699028 -242 766 -.761510312391857 -262 766 .7392433921977468 -276 766 1.3272270207030654 -293 766 .0816150393423356 -329 766 -.14380973805987912 -330 766 .07805106206896345 -344 766 1.300257662875323 -347 766 .6820908288722833 -360 766 2.4251971867789712 -369 766 -.03952748557482488 -373 766 -1.4520008304655718 -375 766 -.2638958197583131 -378 766 1.0135872822981473 -384 766 1.4334851002973523 -385 766 1.0298176686735776 -393 766 -1.4692604395637556 -401 766 -1.0502493360393979 -413 766 .33202711782439664 -422 766 .6891278077026206 -423 766 -.5076511510451811 -426 766 -1.1070274790732586 -440 766 1.2312992938107472 -443 766 1.8686072831826217 -445 766 -.3209171832853596 -447 766 .14866509334578787 -449 766 -1.1689160177327225 -451 766 -.9074945899338809 -463 766 -1.3765269082845806 -470 766 .5169484508752075 -476 766 -.3110855748625468 -479 766 -.9394435426065064 -481 766 .38202594465522166 -500 766 1.006438949470149 -506 766 .8867502283922598 -508 766 -.27320088914628243 -509 766 -.8992676709036567 -529 766 .6457528608409383 -546 766 -.7657252286679066 -553 766 .958930762657473 -557 766 1.1129493387515415 -563 766 .9483390497485624 -569 766 -.3295654696735141 -571 766 -.7347419080646775 -582 766 -.32109023840911466 -603 766 .9598088126413226 -612 766 -1.529099693300474 -616 766 -.5493053704324085 -631 766 -.35690837960243527 -638 766 1.291530732343195 -645 766 -1.4307203742674965 -658 766 1.6505053634430444 -662 766 .4187260147433891 -672 766 .7252901850673662 -699 766 1.0025254612273793 -706 766 .2803006579384192 -714 766 .31732662607408113 -718 766 1.1882879487181315 -746 766 .5166706750883409 -787 766 -.43212985412391125 -808 766 .8277554295810804 -811 766 -.276951722195843 -825 766 1.1597319041537035 -835 766 .0529577222455071 -850 766 -1.0839886105081273 -856 766 -1.210105051059732 -868 766 .40188997088626033 -890 766 -.8379734281445467 -896 766 .8483163715940134 -907 766 -1.7326044922040076 -921 766 1.9707433818495972 -924 766 -.6170035015449276 -929 766 -2.010829473229217 -933 766 -.5881142708974987 -941 766 2.310934754791748 -981 766 .2858665945303369 -987 766 .4346624947664264 -991 766 1.6643292991931269 -994 766 .4055035781196986 -995 766 .8905770716440858 -999 766 .5980640664333541 -1 767 -.2959684926521837 -5 767 1.2855213755104478 -15 767 -1.9768994308898358 -20 767 .16786045837714536 -26 767 .9435343169569796 -33 767 -.29160327410683634 -38 767 .3895884595495704 -39 767 -.03437194742708996 -52 767 -2.20245158534014 -55 767 .4286515096185925 -57 767 1.7901999035883227 -65 767 1.4323796810705247 -98 767 .08845307889827658 -106 767 -2.0266785098316764 -109 767 .27106970274059644 -110 767 .7022234356345608 -113 767 .4396478000555468 -116 767 -2.305538535887505 -133 767 .595856699053329 -145 767 .026735658340145418 -155 767 -.18989052867626863 -164 767 -.4174081436864251 -165 767 .3446266990772411 -174 767 -.7079649383744152 -183 767 -.1181340391290995 -193 767 .09479448717831344 -195 767 -1.2157753157636075 -199 767 .8115685724845496 -202 767 -1.3075190141260002 -230 767 1.4576200208518835 -240 767 .09802892650071832 -242 767 1.7886262173155296 -247 767 .8256532065042345 -268 767 -.0037566321080117204 -280 767 -.7552434780129302 -287 767 -.0580773197750441 -296 767 1.263372472436769 -315 767 -1.20476419811909 -326 767 -.06647328238621647 -339 767 2.6709883017024287 -342 767 .5510144245787957 -343 767 .5103256009092705 -350 767 -1.1703098066536026 -358 767 3.0782939418694277 -371 767 .07755358409537184 -391 767 -1.83108356410889 -398 767 -.11605245704583969 -407 767 .8615059455011367 -408 767 -.7312902807107416 -413 767 1.2899180790002427 -443 767 -1.4626750851441344 -445 767 -1.3942901735656903 -448 767 -.18989665938608682 -452 767 -.7073724458952513 -475 767 -.31037164286521157 -482 767 -.6631829873314528 -489 767 -.42314405416788126 -503 767 .3696254236823842 -514 767 .01612458920191495 -519 767 1.1681805657518725 -545 767 -.560054084942837 -558 767 1.2437105499769567 -560 767 -1.1209339595272174 -565 767 -.15241848598367722 -571 767 1.0129867014665126 -576 767 -.7536673233088549 -596 767 .304851801268876 -603 767 1.1350884898436515 -614 767 -.13311338163762482 -616 767 1.1217523099975242 -625 767 -1.3940070532330726 -626 767 -.5537366294287461 -632 767 1.463465184630366 -640 767 -.9656166822112171 -645 767 -.47489474782135166 -664 767 .14696439184619164 -670 767 -1.6527887268242962 -675 767 .8351697626396297 -679 767 -.9416154733827995 -693 767 .7683617284466354 -694 767 -.4441278751888507 -699 767 -1.4920856586637834 -714 767 -1.0270125580001488 -716 767 -2.1330069104574276 -723 767 -.44382701264762336 -730 767 -.273020052587548 -756 767 3.643397338896898 -777 767 -1.2337252967230297 -778 767 -.08335433348529445 -781 767 -2.3402728679547953 -786 767 -.6779150700439547 -801 767 .540207698704396 -806 767 .145106929276772 -816 767 1.1585442841143663 -825 767 2.323744876443194 -845 767 .2700251497622288 -859 767 -1.055642781173741 -863 767 -1.0464850256431228 -879 767 1.9978761295165826 -880 767 .7366293834519401 -881 767 1.3004345288735228 -892 767 .022233671122518367 -894 767 .5009078725868865 -905 767 -.24309095208152612 -928 767 -.7974438643166811 -929 767 2.3977832219844366 -966 767 -1.1094164340300443 -971 767 -1.5076014012420704 -973 767 .5353238664507756 -3 768 .4180838675600285 -43 768 .644441616894191 -52 768 -.11136225000913906 -53 768 -.6848959897810675 -57 768 .07404271418658363 -66 768 -.3876201720470955 -95 768 .6545770393148433 -102 768 .6943329287913542 -114 768 -.9477447903438231 -129 768 -3.1681857082196236 -135 768 .5630566001478509 -144 768 1.9963483769229426 -177 768 .6788420728436952 -189 768 .8580405177835517 -192 768 1.7049250904228834 -194 768 1.713256465266418 -196 768 -.16575446036138144 -209 768 .2747073513642766 -229 768 -.04961538065990401 -239 768 -.01787136040404108 -243 768 -.6561666322625821 -250 768 1.7714814819747573 -264 768 -.39413441356874135 -266 768 .6574708395700486 -274 768 -1.2947091869422365 -287 768 -.7332372802164504 -288 768 .07459174821319697 -306 768 -.108871288841287 -323 768 1.4835444732978216 -325 768 1.6968472716308451 -336 768 .8409522077634819 -353 768 .3658547906636988 -359 768 -.8286845766444847 -363 768 1.1626207556695733 -375 768 -.23965491295377417 -400 768 -.42483149159456673 -410 768 1.2450691698837453 -421 768 -2.4832474999161382 -423 768 -1.3757527382837795 -432 768 -.19854417651638917 -442 768 -.3393457159440704 -467 768 1.4109546212490236 -471 768 -.8338836183551745 -474 768 1.92633481982334 -489 768 -1.3043840123420747 -507 768 1.7421341231493408 -533 768 .28538740139236674 -534 768 -.5130609215105847 -538 768 -.4339531078713054 -542 768 -.18837559336764997 -552 768 -1.9150998617877848 -559 768 1.095738266243992 -569 768 -1.5101705742501168 -577 768 2.026120252736209 -586 768 .8405093348235115 -598 768 -.18536656923533784 -600 768 -.28420860940743026 -606 768 1.1431592878494001 -608 768 2.0856614387539154 -617 768 2.250891745241269 -620 768 -.8590282681080204 -624 768 -1.2392748871161392 -636 768 -.5644978096650533 -663 768 .828397382668884 -677 768 .7788412395946911 -679 768 .8739258232272356 -680 768 1.3609306894108453 -689 768 .016899056949018693 -710 768 .32084208076715426 -712 768 -.6421501764845461 -719 768 .6138648184841361 -727 768 -.8762009608951359 -739 768 1.1906577492944759 -740 768 .21150532216657386 -742 768 .49938671964419507 -744 768 -1.6994099769219158 -754 768 -.500338690635596 -758 768 -.16738932169025358 -762 768 -.015042573907649376 -786 768 .2112164704167455 -792 768 -1.9083009944823197 -807 768 -.7202608810056972 -827 768 -.32924168497404127 -828 768 -.41285927131786454 -845 768 -1.6806533627108682 -867 768 1.2424194831987823 -877 768 .2785107011367327 -885 768 -.9984747734553042 -889 768 .4339707076760567 -894 768 .4135401212142308 -911 768 .11579842283129932 -916 768 .3130867423505575 -944 768 -.39349205556733635 -959 768 1.9163023002240953 -962 768 .003640844439917079 -974 768 -.6090315890161742 -975 768 .607087988783584 -998 768 1.5504344555668381 -8 769 .26167471672089315 -17 769 -2.1701213664606764 -19 769 .09419823791429249 -21 769 -.07448520700211217 -24 769 2.5628144083614592 -28 769 .28404665894663156 -36 769 -.7042636930521424 -39 769 -.7561178869944041 -74 769 -.4262365692979144 -80 769 .17009143604317098 -88 769 .26508109965664395 -95 769 .38432854189896826 -96 769 -.13381653137050492 -103 769 1.093814151837789 -174 769 -.2727867614371637 -175 769 1.7465080041104566 -203 769 .22709557582211135 -227 769 -.5548197978214969 -242 769 -1.9532770699319304 -251 769 -1.3168180479701492 -253 769 -.38054439111639676 -262 769 -1.8608666485157979 -265 769 -.827269009680023 -269 769 -.7942733313222525 -276 769 1.6542156733147848 -324 769 1.1786075635792495 -327 769 -.1320861306126278 -337 769 -1.0747368979486902 -353 769 -1.465592521908066 -367 769 .5915580209247201 -375 769 1.08526437533427 -381 769 -.3817574754383104 -382 769 -.19438695873526834 -387 769 .08541760947186841 -395 769 .8348913222883478 -418 769 -.2581449936217741 -421 769 .5557724894406761 -433 769 -1.1236586478883253 -447 769 -.04783758882343253 -452 769 -.5389995957733286 -457 769 -1.407443446587183 -459 769 1.0827699162732851 -464 769 -.7982800036845277 -467 769 -.4973471174843571 -468 769 .5362039433674718 -480 769 -.16549468960141656 -492 769 1.3766961595081049 -494 769 .8059206694458733 -497 769 -1.407833574628346 -503 769 -.17229294754507463 -510 769 .6716384306248162 -532 769 .614368963608357 -534 769 .8519632434547697 -540 769 -1.7252823134830746 -546 769 -.6197463845387644 -557 769 -.8316284090843876 -558 769 .7879845478916354 -636 769 -1.0445494524571899 -654 769 .4286386301392626 -698 769 .8566926127617823 -699 769 .9620747091227653 -715 769 -.21105235712480017 -728 769 1.8543347901642828 -739 769 -.4768824952768373 -744 769 -.8562332834701819 -754 769 -1.2682264792469362 -761 769 .5472532333562663 -770 769 -1.777056979766074 -797 769 -.076529653201592 -811 769 -.8253385195077216 -812 769 .2522069991268998 -820 769 -1.0986116716636813 -827 769 -1.3692105343114414 -831 769 -.23454410392969166 -842 769 -.15235107733383696 -847 769 -.749609478202513 -857 769 -1.4709664495648704 -875 769 -.49981473806954263 -879 769 -1.596308280043313 -886 769 -.5952024496020966 -897 769 -1.466199737210817 -938 769 -.3945729217900453 -961 769 -.4651077533588416 -971 769 .497883699560406 -991 769 .18802691515704067 -992 769 1.2231137110839447 -1 770 -.18464815206480192 -2 770 1.1654899198201336 -5 770 .6348247670591307 -15 770 -2.5349627448034457 -16 770 .26690248811858197 -43 770 -2.4306306401112883 -48 770 -1.2790433202208078 -56 770 -1.6592364616329334 -78 770 1.0625595543410238 -84 770 .6128993689015126 -93 770 -2.2931247719190346 -98 770 .43012326801938816 -103 770 -1.1257437147043898 -130 770 .8253617021790688 -134 770 -.8375229655432208 -139 770 -.03927160102577293 -144 770 1.0268313164761877 -152 770 -1.2140407480785511 -154 770 -.036648825413349184 -159 770 1.213475158135563 -180 770 -.270143266385023 -181 770 .45750353008641187 -197 770 1.5573789161150104 -199 770 .25028059027883387 -215 770 1.0551064099745098 -221 770 -2.7736333561272395 -239 770 -2.294875663249815 -253 770 -.22164212822860657 -264 770 -3.174210103508928 -271 770 .9125095167959832 -325 770 -.3505278632887345 -338 770 .836753377286115 -342 770 .21513258389203044 -346 770 .0381161354306164 -348 770 -1.597788293493688 -352 770 .8770755304120221 -374 770 -1.1821834343278994 -390 770 .9008082970105449 -393 770 -1.2316172353674326 -405 770 -1.1379042167071924 -493 770 1.7546383317864123 -503 770 1.0556301616754062 -508 770 -.6951632760819363 -509 770 .6349912149902973 -519 770 .06143850323691535 -530 770 -.1000191897640079 -539 770 .4239382012748688 -556 770 -.08951897262225114 -569 770 -1.0858259668331693 -580 770 .15528489290828532 -583 770 -.4379163976112548 -598 770 -.6849243227346352 -606 770 -1.2078004604544827 -616 770 -.17108488297781244 -618 770 1.162715312672638 -620 770 -1.5664250480656878 -640 770 -.4901772778819523 -649 770 .11554113539875238 -650 770 .9604758228413188 -651 770 .3375746532587946 -656 770 -.5741043390751007 -659 770 -1.6127226701085835 -662 770 1.064550435667853 -665 770 1.9235398668312478 -666 770 -.5877532420566054 -668 770 -.29478150948048654 -680 770 -.8038698223005306 -686 770 .3550048253895119 -694 770 1.4458545138751815 -699 770 .6289697495252655 -703 770 .7348262313786593 -711 770 -.3661518349041492 -715 770 -2.2995558910769365 -722 770 1.5897317954017325 -733 770 1.1032814109995512 -760 770 -.018958473656127482 -791 770 -1.7340171863028229 -814 770 -.2159200992327155 -841 770 -.43656345017252807 -844 770 -1.5966391971505662 -862 770 -.5146723831015784 -867 770 -.5502444754804123 -868 770 .8534606876862453 -881 770 -.9055394911883389 -922 770 -.6371472069530374 -940 770 1.7510045652710438 -943 770 -.0931915060418263 -948 770 .7295299385028614 -950 770 -.23696915696108356 -953 770 1.4623896298077448 -954 770 .3977133322315855 -973 770 -1.2404895542523642 -991 770 .2371241135375312 -4 771 .6365318569285144 -17 771 .4399985206186879 -30 771 .6136373495593583 -55 771 -.542623023187898 -59 771 .013628252788814042 -66 771 -.5954601885467421 -77 771 .4305457966327026 -79 771 .20664771181429056 -107 771 .00523294152401009 -112 771 .08659497179880954 -116 771 -.5802281811357004 -132 771 -.5727006858619695 -141 771 .608054092259235 -143 771 -.6406699047015374 -144 771 -.32972336573197103 -154 771 .294478588360416 -169 771 .5327085980773951 -178 771 .5528566652587804 -192 771 -1.0400684793118378 -193 771 1.0727982148389832 -197 771 -.41142643093542663 -200 771 -.2848737424583061 -205 771 -.0807334221989422 -224 771 .5326326422167816 -231 771 -1.4086511261094123 -243 771 .6555777635489215 -264 771 -.03956058640065674 -286 771 1.182263621611407 -288 771 .17202458622906236 -294 771 .4071856915877941 -302 771 -.15797677871165405 -312 771 1.088210595515284 -316 771 .367110403304856 -318 771 2.7198333738258738 -341 771 -.012190336849488448 -347 771 .03465899377172095 -350 771 -.2970770666120035 -373 771 .6461597441779218 -384 771 .6494533390996778 -403 771 -.8679373133928303 -408 771 -.3146670424483337 -409 771 -.01768135394779327 -410 771 -.6764693163982223 -413 771 1.085679214530243 -432 771 .2769783440438397 -442 771 -.2541455194105052 -453 771 .1896116045340888 -463 771 -.10965895350751319 -465 771 .4600367997323373 -467 771 .027164316424853466 -472 771 -.24563799814356818 -473 771 .598220475826373 -478 771 .26079511026277297 -479 771 .419238377671859 -482 771 -.5981781797282228 -487 771 .7262798808322681 -510 771 -.1130380351113357 -527 771 .9792840844592926 -528 771 -.4898667705424246 -547 771 -.33920374247524737 -585 771 .5822642756721961 -591 771 .5198226819181865 -595 771 -1.319710180047937 -619 771 -.6111268911025383 -622 771 1.0999191486144262 -623 771 -.08143134383808232 -626 771 -.5436074937867162 -636 771 .43339050990629024 -647 771 .4016105416642082 -652 771 .2739526611125172 -671 771 -.08017619338119697 -675 771 1.430662868062962 -678 771 .7411656122136399 -683 771 .3476183132652779 -684 771 .8366534149483736 -689 771 .4465901119585346 -690 771 .15565439079722898 -709 771 .09586258492569166 -718 771 -1.1521766439869061 -729 771 -.2435892480882947 -730 771 -.570435855699699 -738 771 -.3209001376172841 -763 771 -.24362015737592252 -768 771 -.5610978757400892 -773 771 -.5093837796767668 -795 771 .25455840375864736 -806 771 .8121921097462699 -809 771 -1.2366628347778534 -810 771 .3453934394552813 -845 771 .16297874022863765 -849 771 -.6197748952483841 -851 771 -1.2022836648942705 -866 771 .13540547824427043 -872 771 -.08035666213467199 -894 771 1.2134647570515382 -907 771 -.7887806578445757 -915 771 -.08048061815454167 -943 771 1.0784516744130292 -963 771 .7461725821517945 -965 771 -.04605659518951824 -966 771 .016327498388565037 -972 771 .10941199972290372 -974 771 -.41022388663073117 -975 771 .1504875420728447 -990 771 .3288188235609466 -14 772 -.14076894828666944 -30 772 .5331882215909559 -31 772 .5301428233298671 -61 772 .8586598229072694 -68 772 -.5338724573361195 -70 772 .04510785787992445 -87 772 -.2402232216226954 -101 772 -.7525950061257305 -105 772 -.2978729803439639 -122 772 .22173101132757644 -123 772 .22753084561379008 -134 772 .4388395379133476 -136 772 -1.1184202497201863 -162 772 .03234963370411464 -168 772 .06370829075174182 -172 772 -.3381946075589062 -184 772 .6586009546729082 -188 772 .6759882589234288 -189 772 -.4825262761204842 -208 772 -.029437852108772783 -211 772 -.14602149909935094 -213 772 .08122456781696077 -229 772 .451678089326501 -231 772 .2006868846182372 -237 772 -.21807459414256553 -248 772 -.2285521738633959 -264 772 .6639529750258903 -268 772 -.5372001799264925 -275 772 .35137316428049137 -276 772 -.3878016441018173 -287 772 .027047928168875697 -288 772 -.8865557695003309 -300 772 -.025645922815244995 -309 772 -.06137410817361198 -329 772 -.496344146805767 -344 772 -.13281830167950148 -346 772 .20148061637615036 -347 772 -.5525177574459491 -366 772 .5512758584141253 -380 772 -.7192949618945382 -428 772 -.5615457830080464 -433 772 .26792119388593205 -438 772 .19824140240921126 -454 772 .3874358035535585 -479 772 .20621856537155706 -485 772 .22941326538641757 -489 772 -.009201808120963273 -501 772 .10464507933233683 -527 772 .005911811184426019 -541 772 -.02918683829752257 -546 772 -.20752899240486553 -555 772 .29479389569036873 -556 772 .3727047915796473 -562 772 .11807922812633286 -563 772 -.036611344078906545 -569 772 .5470234539622528 -575 772 .885790116747396 -588 772 -.2499221965563452 -593 772 -.038543502122077605 -608 772 -.36352598738870034 -613 772 .029581969935834285 -614 772 -.05944315283312333 -616 772 .7734573663659491 -624 772 .013884851479010255 -630 772 .31729690149428025 -632 772 .5957256034004316 -636 772 -.8093109548651146 -637 772 -.12357331876489798 -641 772 -.034126076183246534 -654 772 .32703810793751037 -668 772 .19616246869896417 -669 772 -.38392994048811446 -703 772 -.1629460697634848 -710 772 .6973259198666125 -712 772 1.1770199844158524 -714 772 -.19365430670329753 -715 772 -.01823906635902009 -720 772 .1645363626379173 -730 772 -.1909496732066731 -739 772 .5074644694931043 -758 772 1.124284267225033 -761 772 .2440639980494788 -765 772 -.7311617737350079 -785 772 .5068869502625533 -789 772 .6233134134173731 -793 772 -.03258428745766065 -809 772 .7750740765043045 -812 772 -.402485647410649 -823 772 -1.1041698442232548 -824 772 -.19945030685825493 -840 772 .38826158907843544 -862 772 -.515031368475623 -877 772 .9651698580372114 -883 772 .4941849160112409 -889 772 .291621050966013 -892 772 .10982726166887752 -902 772 -1.6303312050220637 -910 772 -.3892626607514557 -915 772 .6520475347021286 -916 772 .018887188900796457 -927 772 .3285337310774144 -953 772 .18399276107086218 -961 772 -.06586358782479669 -965 772 -.25982336894215774 -990 772 .0059311841021725265 -1000 772 -1.1963689311442316 -5 773 .2867037260659084 -12 773 1.106428619860009 -28 773 -.7250413244991472 -44 773 -1.6030310545796513 -48 773 1.4155524294231494 -61 773 1.6029451450192274 -78 773 -.3136743888700863 -92 773 .09249597282432256 -112 773 1.1129713647884283 -114 773 -.11109845105133095 -129 773 -.648101926204856 -130 773 -.5380070364723819 -138 773 .46286397110616473 -159 773 1.4018667006148937 -171 773 -1.9258472349833553 -190 773 2.5064591028363377 -216 773 -.20717975395624863 -219 773 -1.168967453497985 -225 773 .29958186819743327 -251 773 -1.2108745947695931 -264 773 -.28670495268081875 -266 773 .345795485655895 -268 773 .4288543176977046 -276 773 1.5060730584578208 -277 773 -1.5776963137173088 -279 773 -.03934748320176698 -288 773 -.15668875815536476 -289 773 1.4647162281777444 -291 773 1.0191568135012319 -307 773 1.6560764619768444 -316 773 1.8160859833988048 -331 773 .312813045383718 -336 773 .2098784209061132 -342 773 -.5308565174050687 -346 773 .025498390966835656 -371 773 -1.3949526368402376 -373 773 -.5817115122636829 -383 773 .9987434381049459 -384 773 -.04006653215204799 -418 773 -.547704355248892 -429 773 1.9135496435688981 -435 773 1.8065863358343508 -436 773 1.233075752277886 -438 773 .9160648680393111 -441 773 .9980027072161064 -453 773 .08879948504953941 -458 773 -.7705334423581606 -477 773 -1.0480040749975559 -479 773 -.3660233322807306 -481 773 .06067974189338253 -512 773 -.5411198922323721 -551 773 -.08992407550836348 -553 773 -.2397377652485359 -560 773 .14562358997057778 -561 773 -1.482646342542507 -565 773 .7725571523387169 -598 773 .23160124734972287 -625 773 2.426372950303787 -627 773 -.8702647393396725 -628 773 -.6859982631092254 -636 773 -.9157891252871702 -643 773 -.826073001160131 -650 773 -.766907139519076 -665 773 -1.2538908622082099 -668 773 .04410049211066341 -674 773 -1.2786720056930165 -679 773 -1.7044671035781078 -691 773 1.3636041069206404 -695 773 .1268240680106326 -697 773 -.6189320885280253 -744 773 .6588668550489918 -751 773 -1.1700085312049386 -753 773 -1.033224601617154 -762 773 .39523806330692307 -783 773 -.010526478671722378 -789 773 .26612363171529935 -824 773 1.010834746452726 -844 773 -1.5233107600030233 -854 773 .5773814025666691 -858 773 -.47737898695783 -863 773 .32821156524645295 -916 773 .2877892979264471 -918 773 -.3638149465036898 -928 773 -.6365849903149516 -946 773 .4804699450180624 -961 773 -1.0004993961203523 -979 773 .0545467036010784 -992 773 -.04291078367109992 -1000 773 .42991434727461353 -11 774 .9669883938307934 -14 774 .306786343444928 -23 774 -.48629996185110336 -26 774 .5708598769389557 -49 774 .13607145514708405 -76 774 .313510162318958 -80 774 -.4973316574554715 -104 774 .720121957985789 -134 774 .05799540782224564 -149 774 1.7473641652780114 -154 774 -1.3391687122069644 -165 774 .37323956051508017 -167 774 1.0414273322506897 -174 774 -.9480551618421644 -179 774 .6967706981616356 -191 774 -.7963205998574158 -198 774 -1.7988485485840557 -203 774 .0517017160383079 -206 774 .8027758441224813 -218 774 -.43551893720093937 -222 774 .9727746716577013 -227 774 2.771111116968101 -241 774 -.999781971880299 -253 774 .48303981601006435 -254 774 1.7701253064084024 -269 774 .3959999495858844 -271 774 -.4825440573824716 -282 774 -.15645970855669183 -305 774 -.4727943037383298 -312 774 .1658981035462191 -325 774 -.10963160842015235 -329 774 2.0118404746293628 -332 774 -.18705926094678516 -340 774 .16692640443158124 -350 774 .36220966955739087 -361 774 -.6671171965703808 -371 774 .27839084119103014 -389 774 -.09735890738901956 -422 774 .5626475984893006 -429 774 .16396443697613128 -432 774 -.4592216994951748 -466 774 -.4465343390835496 -471 774 .3396673465291602 -479 774 -.03974425400962495 -486 774 .3965334461184028 -504 774 -.5995497725138912 -512 774 .9264838204697612 -536 774 .4068910912229883 -589 774 .8654368822384774 -594 774 -.12477890033110373 -601 774 .1583193720247229 -604 774 .01401644130241976 -624 774 -1.9818855474012524 -625 774 -1.6455047848019095 -638 774 -2.5900143072050263 -639 774 .3845993753199529 -641 774 -.019748734078214772 -642 774 -.04644214946204708 -648 774 .36249575096994524 -650 774 .6913275652761373 -661 774 -.1813068837131117 -701 774 .5428481396760094 -706 774 -.7150293038313452 -709 774 .04448171130231572 -726 774 -.3960308506276219 -735 774 .6802665735288076 -747 774 -.07239566260842048 -766 774 .5219544577051624 -775 774 .13783444243566606 -790 774 -.10946149183652136 -805 774 -.08986809795031414 -817 774 -.4600676584037381 -818 774 -.9570494699170988 -824 774 -1.4544217506284571 -832 774 -.7785456586301341 -850 774 .6967090004045033 -852 774 .022281966735391855 -888 774 -.29057987296328136 -893 774 -.1806764049384654 -900 774 1.0891218442581645 -904 774 .4214337140473179 -905 774 -.13625551384890697 -912 774 -.20158509069266442 -913 774 .48333518286283916 -917 774 -1.563062724786313 -941 774 -1.522804851751537 -947 774 .3690143829147368 -960 774 .4948704626687488 -970 774 .22644929453721846 -971 774 .5941051407298774 -977 774 .2508074735909038 -981 774 -.7645067693573852 -990 774 -.5287309524720094 -4 775 .29390001911550256 -28 775 .8384906659488237 -40 775 .025528421116754407 -84 775 -.8319186902245936 -94 775 -.5307611168897624 -104 775 -1.0074476050348935 -107 775 1.5172143402943121 -116 775 -2.5178911967681796 -124 775 -.3566936412454613 -139 775 -.2216901277821281 -154 775 -1.2407038861504507 -161 775 .786583385806818 -163 775 1.6118391116148085 -167 775 .3280630359979997 -173 775 .3958830971734078 -197 775 -1.139798789562765 -226 775 -.21531348275695888 -267 775 .8185199277837576 -303 775 -1.4525108645035052 -304 775 .20899768676507272 -321 775 2.2888042909325956 -354 775 2.1950210851459557 -360 775 -.4217925697826774 -380 775 -.17068176785855368 -381 775 .34280142737122193 -391 775 -1.7161711851833297 -397 775 .21715692909315276 -398 775 -.005132391177114559 -410 775 -.7736962312526329 -420 775 1.102644947829256 -424 775 -1.26579890230281 -432 775 .032974046792421885 -442 775 1.6312101429534362 -449 775 -.04090644059211698 -458 775 .7734819072780799 -476 775 .49736832417676025 -488 775 .4924155754378107 -489 775 .5317051601217523 -526 775 -.866122045508651 -542 775 -.7755518985485049 -547 775 -1.804815706596287 -556 775 1.5719358149605187 -565 775 .8151277532036619 -570 775 .97729279708076 -573 775 .4280513848918335 -577 775 .12057277060778025 -590 775 -.49112654304074677 -592 775 -2.714840897820981 -595 775 -1.268560489181161 -596 775 -.17595103753394692 -604 775 .8169330323323188 -613 775 1.774429038552219 -641 775 1.0990318186661303 -642 775 1.305828997183053 -644 775 .7675441704502208 -652 775 .8913805619476401 -655 775 .7903873259885716 -663 775 -1.653490355912237 -676 775 -1.1322567603160376 -692 775 .6016736636876538 -700 775 1.5019754872733488 -708 775 -.10978762762075073 -714 775 -1.3635034763191525 -727 775 1.8573527109467614 -762 775 -.37437060056775606 -767 775 -.8340930948980323 -773 775 -.028719018038872307 -775 775 -1.1295495901321415 -776 775 -1.4975741522977748 -791 775 -1.10024501322111 -794 775 -1.2560472823546098 -821 775 -.22021516478353 -835 775 .9091404137761684 -855 775 3.1734309759902075 -864 775 -.7216777771660453 -880 775 .7304780104319256 -895 775 -1.108108159069679 -902 775 .030581506251088547 -912 775 1.6495189554016096 -933 775 .3406400165729773 -937 775 .05590924547772766 -943 775 1.5811945332783972 -964 775 1.6309110248847796 -967 775 2.5961379191819423 -994 775 2.2167104048417476 -4 776 .47054657559648483 -27 776 -.140505011968186 -35 776 1.1301220982518718 -60 776 -.5137743880015986 -96 776 .8084341086735619 -101 776 2.1733248734870223 -121 776 .6405099209244907 -148 776 .06401917334986089 -166 776 -.6771115252085237 -188 776 -.2868005547843126 -189 776 -.07967921591769236 -198 776 -1.265406293237667 -199 776 -.7029218811053194 -205 776 -.4177819524578801 -214 776 .5668232478417142 -219 776 1.0850730116482625 -229 776 .23636916622735127 -232 776 .9016893971030675 -247 776 -.47733244119009277 -249 776 .43036685717736234 -252 776 -1.3639521770760217 -274 776 -.3714472486092737 -284 776 .8727173315730935 -288 776 1.0780376964670357 -297 776 -.8496678032353511 -298 776 .19682633681390047 -304 776 .15150748555520144 -311 776 -.8085918776616439 -320 776 .8916582208600101 -323 776 .6746024964824503 -325 776 -.21118960684207694 -329 776 -.6695721968445315 -333 776 -.4102411826381546 -368 776 -.45503646082308685 -371 776 .5962720648082463 -372 776 -.45027655763286945 -379 776 .5500832424875808 -382 776 -1.0167445990375368 -385 776 .4761221714691276 -387 776 -.16917507034220364 -391 776 .5206362699115481 -393 776 -.36078657635437533 -401 776 .8637393498659761 -414 776 -.35278040278306366 -415 776 -.04283550629013491 -424 776 .8425007788255365 -428 776 -.768328658598626 -432 776 -.5999031072351234 -438 776 -.20940161059957924 -444 776 -.7104208465478173 -450 776 .9146959842870053 -460 776 -1.0326779288246235 -464 776 -.26826354804762625 -479 776 -.19739803984642856 -485 776 -.8951524341999137 -490 776 1.12139125199118 -508 776 .3645449635113147 -510 776 -.7586100901607288 -522 776 .2513650057551996 -537 776 -.45352812390308284 -538 776 -1.3893711097034023 -544 776 -.4515877437893885 -553 776 .7335344967861646 -563 776 .04003606415168871 -574 776 .26162908271654817 -576 776 -.791556440235042 -589 776 .5974750483920275 -590 776 -.12740237244583819 -601 776 -.9969955091265359 -603 776 1.1894024479448777 -644 776 -.04450683572261034 -649 776 -.10913501120685165 -660 776 -.12967484726660508 -672 776 .6378604440337576 -679 776 1.3639960878333426 -695 776 -.08416944407847567 -696 776 -1.2623170173651013 -720 776 .16998168243680079 -725 776 1.6325148808532912 -735 776 -.08942595231155596 -745 776 .013585989806793763 -751 776 .5570190299203498 -761 776 .6319338474864185 -764 776 -.3009518631207959 -765 776 -.4042762425049611 -767 776 -.06881073172057356 -778 776 .12422121948893083 -815 776 1.9411907004727007 -829 776 -.3680962658804812 -836 776 .06427580719969124 -842 776 .0720057009911962 -873 776 -.8274328145456563 -893 776 -1.422856978553823 -894 776 .08455287799615815 -906 776 .2952859161538947 -943 776 -.1369181140360891 -957 776 .059082733665843684 -978 776 .5648505059901754 -12 777 -.23654349037548555 -13 777 .25800706459785056 -14 777 -.5001471534306747 -21 777 -1.0288333308111368 -109 777 -.39447726877211897 -114 777 -.3080698572103179 -118 777 -.7834005487652065 -131 777 .8826221963467318 -133 777 -1.3071493917128283 -138 777 1.5130154213725955 -139 777 1.2226339944756879 -154 777 -.3261327705587565 -182 777 .5454169043681115 -188 777 .48053902098769524 -197 777 .133144009257877 -201 777 -.3995366561945867 -229 777 -.21055749360073442 -241 777 1.5238244074624696 -262 777 -1.5509175714834222 -279 777 -1.231314425565531 -284 777 -.9986002382608523 -287 777 .011463527929326006 -296 777 -.6975202166342478 -309 777 .33061165607522924 -310 777 .2052911615181172 -319 777 -.195961707554468 -360 777 .10591635232316712 -364 777 -1.1485591459170121 -375 777 -.20168900334060552 -385 777 -.9726578825474902 -386 777 -.5116628947460887 -407 777 -.39978782053453443 -472 777 .521795415305298 -474 777 -.705786790018624 -484 777 .11441620603766998 -502 777 .34242437561261263 -536 777 1.1623753265059786 -539 777 .6696750940864469 -556 777 .8836116344046409 -569 777 .043062942076714184 -576 777 -.32885398280730926 -582 777 .009211341342672957 -583 777 -1.3217224266599052 -594 777 .06154565063102835 -601 777 -.5787480770447556 -607 777 -.8422412967324454 -610 777 -.27918948944114796 -629 777 -1.6618106787229052 -647 777 -.9283629322222756 -650 777 -.205883787144 -651 777 1.283480341811667 -658 777 1.0606820760451372 -693 777 .24235867249561133 -704 777 -.05274494551785808 -715 777 .7505981020099228 -721 777 .27806874494536316 -750 777 -.7788182622781793 -761 777 .2896374523283806 -771 777 -.3092043850016628 -775 777 -.23423013746769158 -790 777 .06661618058454638 -799 777 -1.7365538106122196 -802 777 .3309802453602401 -806 777 -.4522267097513728 -811 777 1.0004779411297096 -818 777 .37155285732026566 -829 777 -.5336767610246431 -831 777 -.5604931538823656 -834 777 .1612615302290569 -851 777 .04081232686871536 -869 777 .2529966047758651 -874 777 -.1914096392374465 -875 777 -.17837048288893315 -882 777 -.7292104933793858 -883 777 -.07523788912056004 -886 777 -.5691580369646538 -901 777 -.22454839992400158 -904 777 .1821104185223304 -908 777 1.6195210416564736 -912 777 2.3565860723396495 -939 777 .6884527018652261 -948 777 -.37256356054793394 -970 777 -.9600653080832341 -971 777 -1.0326482000134807 -974 777 -.8280801608893447 -976 777 .0371405982750361 -993 777 -1.0385601984917685 -998 777 -.38830895168960206 -1000 777 .03625455008910518 -19 778 .05072250306725383 -37 778 -.5815194719338846 -38 778 .8656875653534419 -47 778 1.3087248433538554 -64 778 1.057849526233784 -90 778 -1.188959193356467 -93 778 .1978525607846598 -95 778 -.7152484768804268 -105 778 -.09660023960601767 -114 778 .005885466434671617 -126 778 -1.483048517963872 -138 778 -.6027730885800758 -142 778 .7694596918925389 -163 778 .38546730519615896 -164 778 -1.2962627466401309 -169 778 -1.2752286777763477 -170 778 -.05717979825262559 -177 778 -1.293761763439003 -190 778 -1.2783453737040982 -192 778 -.6879548658828293 -194 778 .36512346811869 -195 778 -.4567937875311595 -199 778 -.46237832024132536 -204 778 1.2247717424997655 -220 778 -.3039209442902693 -221 778 .20611012379195706 -223 778 -.9300210431373314 -236 778 .2534447272723453 -250 778 -.7583570585468 -289 778 -.45187101737057467 -311 778 -1.096600722505537 -313 778 .655283552681517 -322 778 -1.4278838475906062 -323 778 -.7209148429551029 -332 778 -.5928953515966612 -334 778 .8973360449293556 -335 778 .4309047091182774 -351 778 .8317000848673618 -354 778 2.5272017068686794 -365 778 -1.2728469533480984 -380 778 .2918505972653158 -384 778 .8133282026162599 -389 778 -.5842379833124336 -390 778 .3408050645542632 -392 778 .8660034089639469 -396 778 -.026676902493715043 -398 778 -.00030487012375508826 -420 778 .116966264489209 -425 778 1.6500030614028713 -441 778 .6298734830211916 -454 778 -.6215583237007081 -456 778 -.7548311907845904 -475 778 -.04599269916802394 -503 778 -.5900153582672343 -519 778 .3634809050531043 -520 778 -.3974890688232915 -548 778 1.3044833760917591 -549 778 -.4641402096964824 -574 778 .3842003482844956 -598 778 .6604976514867005 -604 778 -.14873680376662507 -613 778 -.19252346887305968 -625 778 -.5476617078465206 -659 778 -.2616552938962898 -668 778 .9189271631780519 -685 778 -.12080788062080836 -686 778 -.6787244298965796 -704 778 .17845123037655028 -721 778 -.2309700966050433 -725 778 1.4657239231179144 -735 778 -.04308480563324979 -738 778 .7235117834558261 -739 778 .09365783135216509 -751 778 1.0949201275048592 -753 778 1.3791233557362896 -766 778 1.2129316289017251 -779 778 1.3185366544102697 -782 778 -.7424966473454006 -789 778 -.8274923564480474 -799 778 -.996784271181868 -833 778 .3520627031362072 -835 778 .03296048466066362 -860 778 .8828371771312798 -862 778 .4581387479572486 -883 778 -.3020658899449563 -884 778 .062259940721570706 -921 778 -1.965784262228789 -947 778 .03034754461013113 -954 778 -1.0560248199171176 -963 778 1.5294663104791446 -975 778 -.8833597816727352 -977 778 -.5946504795171055 -978 778 .4860228279542983 -979 778 -.2620608226436404 -986 778 .6709800791753147 -988 778 .9465285640907305 -995 778 2.062242605014322 -20 779 -.829297825160299 -33 779 -.5472940884909208 -44 779 1.1479785907716606 -51 779 -1.6106614850955387 -53 779 -1.1064352429257889 -55 779 .3083081521775305 -71 779 .5056865569680359 -81 779 2.040702343883696 -91 779 -.7657447260422192 -92 779 -1.165131171078305 -112 779 -.4937503034064776 -122 779 1.7599490887047096 -137 779 2.295848830256171 -156 779 -.15501299314721576 -159 779 .348168508764377 -180 779 -.3717787232692191 -201 779 1.114767919539988 -203 779 -.30664522701799113 -208 779 -.6425049366936282 -219 779 -.9188212630426924 -222 779 .4030332136457072 -236 779 -.6174931395703946 -237 779 -.660874742217433 -247 779 -.04967198481236533 -255 779 .0029654819118492266 -259 779 -.4785742124608966 -261 779 -.6561520295261537 -268 779 2.146673040633553 -278 779 -.3396717930279176 -297 779 .48737534835813495 -301 779 -.574593957640629 -308 779 .5886163411531226 -316 779 -1.8622967520413822 -319 779 -.13463637648874396 -328 779 .7845212205154497 -360 779 -1.7929501584531908 -369 779 -.9935812565891179 -386 779 -.9811212012992946 -388 779 .42158647361916946 -390 779 1.8584612049463112 -393 779 -1.9078414074752326 -411 779 -.1522222142370242 -415 779 .6431645423738732 -420 779 1.3085341952069924 -425 779 .9393604440065368 -429 779 .4238686681230156 -433 779 -.09047127305458866 -438 779 -.1487882868792336 -441 779 -1.312190006735581 -453 779 -.7952515301047248 -464 779 3.152277995628189 -467 779 .754950920627789 -470 779 1.043247362791259 -472 779 .5786660088296709 -473 779 .10999130211530114 -483 779 1.262531611663531 -503 779 1.758869751521383 -525 779 -.42026792670754354 -528 779 .30056742839779593 -532 779 1.3360417970918428 -551 779 1.690608469426643 -582 779 .40882773940357914 -583 779 -.5643338751324974 -601 779 .7963632453341253 -602 779 -.7039340414846473 -611 779 -.44125300530761585 -619 779 -.07009324907253103 -676 779 1.2986683413083997 -688 779 .40309892398408914 -694 779 1.5382839978587908 -707 779 -.13213800895525263 -722 779 1.0285453628570194 -731 779 -.9007334553927878 -739 779 -.5349835334943289 -741 779 .3553102130038465 -752 779 .541223648758239 -753 779 .6038334294796036 -754 779 .28301568336674904 -765 779 -.3896540264621803 -776 779 1.465546310166101 -807 779 .539330713365589 -810 779 -2.751535954439275 -812 779 -1.827461754535916 -821 779 -.8057008102125042 -844 779 -1.049438151492118 -852 779 -1.9606146847212353 -858 779 1.0284131049876817 -893 779 .11963353222951459 -895 779 -2.8857399234679066 -902 779 -.6798453511148942 -913 779 1.7265193037306583 -937 779 .6475818564927265 -941 779 -.3292427482122293 -947 779 -.6816928471501702 -957 779 -1.7269568455596724 -989 779 -1.3109491691291804 -990 779 1.1070940552011903 -41 780 -.7436914064512602 -44 780 -1.3951000501585678 -68 780 .39849102507625767 -118 780 .29955478500800353 -135 780 -1.2821418086682344 -140 780 -1.0000489840189764 -144 780 .6131081131638573 -152 780 1.5125357276289737 -173 780 -.019055178890582447 -174 780 .8618384042667854 -177 780 2.4138820442097066 -181 780 -1.0717391855577385 -186 780 1.7340846883292456 -198 780 -.2619356587064049 -200 780 -.23797095237787874 -202 780 .4029365756804451 -212 780 -2.039541721790325 -235 780 .13515602707259677 -236 780 -1.5934385831313596 -256 780 .5218597663728635 -259 780 .576119233842272 -265 780 1.2636434710802296 -284 780 -.5905336558483086 -303 780 -.6528760425660947 -333 780 -.6978866124589624 -347 780 1.4675606150613032 -356 780 -.514425232407292 -364 780 -.0881452837160465 -365 780 -.36180493976910927 -370 780 -1.0982552333845481 -377 780 -1.32359952470927 -410 780 -1.189900095182365 -420 780 .8246519621429899 -427 780 -.029493058193868306 -435 780 1.1797575091662562 -444 780 .8276466031097522 -478 780 1.8640363246454585 -481 780 -1.3805829705190018 -503 780 .039334100475263784 -520 780 2.0913495583514816 -533 780 .7184270670147589 -545 780 -.612136735814277 -558 780 .9971962262962183 -566 780 .6489976553059307 -576 780 .8333414609329388 -583 780 1.5759200367152826 -596 780 -.6554973067896462 -598 780 2.0485508431320842 -612 780 -2.66496449385245 -622 780 .681919186944971 -631 780 -.664334404697104 -644 780 -1.4324215032688397 -648 780 1.0040903432837542 -670 780 -1.1510008463106391 -679 780 -1.4481937082497793 -690 780 .7182927754798862 -691 780 1.2984446189055092 -693 780 -.27969777255660977 -696 780 -.6132718687608019 -700 780 2.2765288756169406 -730 780 1.2703188858563488 -736 780 .28362956118779226 -738 780 .15840760522995806 -744 780 .5749626449418522 -785 780 1.562984788045838 -788 780 1.3468893312221664 -795 780 -1.0650494770723717 -822 780 -.2746088663307938 -826 780 -.35237481501356127 -835 780 .9779321475838721 -857 780 2.4293526347609253 -864 780 -.5962871102539085 -873 780 -.870521874042333 -897 780 2.1166062688309557 -901 780 -.23316280680934445 -912 780 -.8184157606783236 -918 780 2.038673033951751 -921 780 1.3196903524571337 -929 780 2.6806070441293754 -946 780 -.6920103516902736 -959 780 -.6451883695541911 -978 780 1.5483039423542304 -993 780 .7795212728595365 -998 780 -.2703947512846279 -13 781 -.011681319848613037 -31 781 .7994859022667781 -47 781 -.6872113736346348 -55 781 1.4174098547721392 -62 781 -.8647019408368963 -75 781 -2.7907235467545406 -79 781 -.5003314390893738 -80 781 -1.3867753771139268 -86 781 -.06215782539211016 -89 781 .7644319104587681 -99 781 2.0350740406379417 -101 781 -1.3819863112695019 -118 781 -1.460559325640585 -121 781 -1.2675545701691806 -129 781 -.2485340601019968 -138 781 -2.482939109745598 -139 781 -1.212227431565481 -165 781 -.00036841218525991704 -192 781 .7937954869961255 -210 781 -1.038866177349242 -223 781 -.3051580171118544 -258 781 .2271079714216303 -265 781 .5904494056417544 -283 781 -.589862201901235 -285 781 -.09256962055722656 -299 781 1.3157444580223712 -309 781 -1.0709919490606132 -320 781 1.0535892311496942 -322 781 -.8522567572859328 -324 781 -2.3485442923388895 -330 781 -2.51363929083809 -359 781 -.9837180382346679 -380 781 -.5190462143674134 -426 781 .5341911625318424 -428 781 -.20381223101934948 -443 781 -.06169938362938149 -445 781 1.3851377270699319 -459 781 .9280138157695484 -467 781 .0829081114418698 -469 781 -.7800215780333333 -478 781 1.6877926153724152 -499 781 -.4922181128293115 -512 781 -1.8164220199883279 -517 781 -1.3355434326344446 -534 781 .09032106387738092 -537 781 -.9529256158381652 -546 781 -.008655377244261145 -579 781 .2910542224557861 -592 781 .56181860682001 -594 781 1.0450870654749833 -598 781 .6548203807524751 -621 781 2.469981086521638 -632 781 .36062546422927366 -635 781 -1.9674101044443073 -645 781 -1.900455579568984 -658 781 .6927207616319533 -669 781 .1962309231178301 -675 781 -2.101453902584554 -677 781 -.9633136390555463 -679 781 .1929561019060021 -680 781 .3574309049708069 -686 781 -.28251103701407393 -687 781 -.49005066495197747 -730 781 1.9672628905933904 -753 781 .6063503576041435 -774 781 .7458656177900455 -796 781 1.6533739963989305 -824 781 .23037828263288607 -832 781 .0026549570227212826 -838 781 -.73611509690466 -850 781 -.38402107039793604 -856 781 -.43575374186165305 -868 781 .43672011466043453 -880 781 .8747862158920381 -881 781 -.5509913237909828 -883 781 .9128728934493958 -895 781 -.4930396273849506 -900 781 -.5980057068561567 -903 781 1.6705558745749052 -915 781 .1559532878699253 -918 781 -1.1970759617173696 -926 781 -2.387279658165324 -931 781 -1.1785646390163715 -963 781 .19201685013601116 -982 781 -.1472109987614952 -984 781 .05771776937461325 -987 781 -.6991132060005294 -4 782 -.10828859060732735 -8 782 .36509390193188085 -26 782 1.5903503588614072 -27 782 -.04806391443547253 -31 782 1.0534497461148347 -33 782 1.4302937500720172 -44 782 -.8420416345864462 -52 782 .5055294063102413 -61 782 -1.232970583814081 -64 782 -.41087910206415096 -71 782 .6906664209770642 -73 782 .353843634784456 -78 782 .27027025573824826 -83 782 1.0553614323570892 -103 782 1.6502856742164742 -106 782 -1.1284004876142637 -109 782 -.593039522042751 -113 782 1.175746509722417 -117 782 .08380795681451775 -142 782 .25466155731783846 -143 782 .2505539966028628 -145 782 1.0653109718521332 -151 782 -.600029415537503 -169 782 .6232144549512809 -177 782 .2695688390947647 -178 782 .2133331979165376 -279 782 .027767153386245132 -280 782 -.14455510464062624 -322 782 .5505896418147558 -328 782 .4339365863346298 -332 782 -.4657980529295014 -341 782 .27851520665807883 -368 782 -1.174704866188501 -373 782 -2.291230083832551 -377 782 .21545005016254884 -379 782 -.17533061048895351 -393 782 -.032144631722895625 -399 782 .23611833574819846 -474 782 .8516905422159944 -492 782 .7418496270339544 -494 782 .2621071736685049 -499 782 .8445984350424405 -503 782 -1.5973974316782635 -517 782 .1953116946514006 -519 782 -.3458074722307901 -525 782 .6281836411370897 -527 782 .7968314413609271 -536 782 1.472416722123497 -537 782 -.43546854895683057 -539 782 -1.38535160136844 -547 782 -.32495960077354213 -551 782 -.8616211931432389 -562 782 -1.2972468914302528 -581 782 .5183345937085997 -587 782 -1.487482192332974 -588 782 -.08021145206800248 -617 782 .40058622751582024 -637 782 -1.2013110510844387 -656 782 .9135330376339958 -676 782 -.01897125419291785 -695 782 -.8551081704242406 -706 782 1.1611582900131847 -712 782 -1.4871977209407234 -727 782 -1.2813652508993256 -730 782 .04333084571505924 -735 782 -.340755090279671 -739 782 .8498103852035466 -750 782 -.6317620882795016 -774 782 -.3014789845073729 -782 782 1.552289316614812 -783 782 -1.3324793923850065 -786 782 -1.1202737118035715 -795 782 -.7121623780374813 -809 782 -.18569181850183664 -837 782 -1.472135331722093 -851 782 1.2237998622524278 -855 782 .5734501365907847 -879 782 .835925771209143 -885 782 -.023246259292898447 -894 782 1.7779402635541266 -909 782 -1.2652243276439712 -918 782 -.4580951742849448 -926 782 -.5361842492238684 -957 782 1.7607495363124959 -994 782 -.7038332908826003 -1000 782 -.8117754912194314 -15 783 -.3545172660647717 -20 783 -1.382122302208812 -26 783 .22449942629018976 -31 783 1.0507486849468166 -70 783 -.4567971214802993 -105 783 -.49394560756637595 -112 783 .20839227948163852 -115 783 .4815131207010985 -132 783 1.038906709013045 -134 783 .4554887083644206 -136 783 -1.3098727782032165 -139 783 -.20779029091244 -142 783 -.4437218772226188 -146 783 .8261137628725306 -159 783 1.1736633577027142 -162 783 -.7524446955511048 -163 783 .15741527298312818 -200 783 .3389444824264308 -214 783 .2369803555651311 -250 783 -.4314050636128025 -261 783 .10206874196845636 -271 783 1.3601266211358303 -277 783 -.7544150966890568 -287 783 -.14510927796040785 -291 783 .12712307176033533 -296 783 -.06247589112949972 -297 783 .6277667812396841 -301 783 1.0135000636127478 -308 783 1.3241838700240103 -317 783 .3726424837682899 -328 783 -.11509226558368611 -335 783 .6077236285212048 -344 783 .24162118866808338 -347 783 -.7204268232519163 -356 783 -1.8746368449156992 -375 783 -.18497171513720112 -408 783 .21530840990910702 -446 783 -.5333842862792264 -456 783 .18639332468500203 -504 783 -.5576234529169616 -506 783 -.04273623909964347 -507 783 -.7738435712827971 -508 783 -.01998685027783434 -510 783 1.1077713307020156 -512 783 .8622173111126982 -536 783 .3202694747661843 -539 783 .8430955668431294 -548 783 -.06672236386097613 -557 783 -1.6947770345785726 -559 783 .4570576029597146 -560 783 .8251795788326393 -563 783 .12885529357309788 -567 783 1.2115685867345094 -572 783 .9698099793111737 -589 783 .04570750937163477 -593 783 -.2516668705202856 -612 783 1.7613196668088398 -617 783 1.4440289476726136 -619 783 .1671804320305552 -629 783 -1.5481143218643354 -631 783 .45054899450226327 -646 783 -.5061808453715815 -655 783 -.4323143303590199 -660 783 .161867022265979 -661 783 -2.0922715785798083 -675 783 -.13435094406400755 -686 783 .31521472847684184 -727 783 -.012813391085615494 -735 783 .46689474540001635 -743 783 -.9364314052120571 -745 783 1.0131962631725508 -748 783 -.3728578356020471 -753 783 -.10589628446756497 -781 783 -.5263898814546343 -797 783 -.7058383915548362 -804 783 -.4934209735008595 -808 783 .5640203604780925 -828 783 -1.1280103379096766 -836 783 .7389804987653805 -864 783 -.3285738492061617 -868 783 .6626008562041433 -874 783 -1.35192618081828 -877 783 .8079191751379718 -904 783 -.1668828815541304 -917 783 -.29315001248242434 -924 783 1.850786407490283 -940 783 .5985927568282144 -959 783 -.10525401182839111 -974 783 -1.3771893639496204 -980 783 .9253964165999655 -1 784 -.4599214308669018 -17 784 .5210564937702442 -23 784 -.5700194742203927 -24 784 -.2101065531678714 -25 784 -.4215973823485921 -60 784 -1.1092021582061327 -64 784 .2622450158956892 -68 784 -.38283354211735177 -75 784 .625839706497272 -78 784 .5916441188934081 -123 784 .14862811986830052 -124 784 -.04423030127261937 -125 784 1.0105368372789796 -128 784 1.6343994412678478 -142 784 .19874128161071175 -150 784 -.45833277838190767 -158 784 -.6309057269321527 -161 784 -.3354082008393329 -167 784 .47347547673086304 -185 784 .7132453703109396 -188 784 .3366239121136641 -190 784 .9479759818338945 -193 784 1.171483558386587 -200 784 -.4665943029489908 -217 784 1.1189653248604083 -229 784 .9152934518447022 -239 784 -2.6162845989646315 -252 784 -1.0705180580463043 -254 784 -.5785362110236004 -256 784 1.784778183329149 -263 784 .7122010442724827 -264 784 -.7049422457031966 -270 784 .08793685489554681 -277 784 .26770308116860314 -278 784 -.33151340102058685 -287 784 .6221938412522533 -299 784 .04053280460384118 -312 784 -.4955932785268437 -326 784 .9244286265257577 -336 784 -.6898755324807921 -358 784 .34752676996955256 -374 784 -.388744861938842 -380 784 .06816779102207515 -383 784 -.10221938890067495 -387 784 -.02401587803535707 -395 784 -.2724388698874903 -396 784 -.7997142172715266 -414 784 -1.2335784142549613 -420 784 -.1908080270917196 -422 784 -.8222328199653864 -423 784 -.6425608849230666 -450 784 .6949737655979176 -465 784 -.928043953506502 -471 784 .13643813447338043 -491 784 -.7206037372367025 -519 784 .601251333071587 -558 784 -.7481724300237151 -564 784 .2870397682059156 -573 784 -.18113604781404713 -578 784 .06846772658108474 -582 784 -.30152624229015806 -605 784 -.7072683936536336 -608 784 -.6860516152080531 -629 784 -.5895813323992259 -632 784 -.5776808824694039 -640 784 -.16203661091175153 -641 784 .06428300862388442 -646 784 -.48088441809372484 -647 784 .22966679753285563 -657 784 -.7064065439496404 -662 784 1.6380909170573383 -676 784 .5655932716070892 -678 784 -.3340876127646597 -685 784 -.02656758504863868 -698 784 -.41396541601222486 -699 784 .6738199506253763 -716 784 .7687553335711497 -740 784 -.9902699978310917 -743 784 1.0192240226952196 -750 784 .03272905877251531 -765 784 -.5942062292100279 -771 784 .08859327458051755 -781 784 .34218792045110336 -784 784 .8996394831596117 -813 784 -1.5016452267490492 -816 784 -.7160575474763695 -822 784 .8742268177795062 -830 784 1.1474105945044137 -850 784 -.11664706190340746 -854 784 .09674818961094975 -865 784 -.3928602035188876 -869 784 -1.0127463906084366 -872 784 -.2759323224739391 -884 784 .49482969542804717 -901 784 1.0846647107936633 -902 784 .1994016588688206 -912 784 .3312112944906427 -915 784 .5992214811663948 -919 784 .2867800891112955 -929 784 -1.2699655033182315 -971 784 -1.0597998788585599 -974 784 -.7851119741256104 -983 784 -1.0734539013429223 -986 784 .3753252607130437 -1 785 -.8278862703392498 -13 785 .09416394442824602 -14 785 .2593372347596275 -37 785 -.7722691326688544 -38 785 -.026905541094677174 -42 785 -.4716620744108499 -49 785 .07517349318759854 -56 785 -.39191292109916587 -64 785 2.240139454022167 -65 785 .22404671569064316 -70 785 .12065606379051493 -79 785 -1.105705359546864 -82 785 .8928993814077292 -89 785 -.09554803746559125 -101 785 .5864428166495603 -109 785 .5422865982657639 -127 785 -1.1201984113560142 -130 785 .8294533430755963 -131 785 .5266521798116278 -135 785 -1.0285150082020185 -141 785 -.3462129167402947 -152 785 .7566224437299258 -174 785 -.18119380616582514 -180 785 .9570489904035295 -183 785 .44625259106316223 -191 785 -.13219287203407953 -193 785 -.6308792742074202 -199 785 -.6095973080322143 -208 785 -.09762925661187535 -238 785 -.15486135469709428 -248 785 1.218622692791035 -256 785 1.400694008142539 -263 785 -1.540944126071729 -266 785 1.2132122513358832 -281 785 -.4627571246933111 -300 785 .34860442816655923 -313 785 -.26084801410698016 -316 785 -.7271927857713861 -329 785 .20828645353817934 -356 785 .0396180057936214 -368 785 -.9292848254299265 -370 785 -.492510265241876 -404 785 .4637517351855483 -427 785 -.3443112336513381 -434 785 1.0494149011784892 -438 785 -.48199611958836786 -447 785 .32386031955649286 -452 785 .09187254143160649 -464 785 .492994279495332 -473 785 2.352386513216194 -513 785 -.8096918904159918 -532 785 -.04940513205143887 -533 785 -.17020539953989902 -537 785 -.9275555194512164 -575 785 -2.2164630753919763 -586 785 -.5413909174620154 -589 785 .3312421408992005 -618 785 -1.7238956491108253 -621 785 -.38373081052159447 -636 785 1.8603336057812638 -639 785 1.1270891699294798 -651 785 -.4807574572611273 -660 785 -1.0323091833364442 -661 785 -1.1617592101906835 -662 785 .011640099145206861 -678 785 .8295276496896606 -681 785 -1.8212896011766084 -695 785 .014636451273982998 -722 785 -.8792009697417594 -730 785 -.7197464874023393 -733 785 .015563021627458734 -736 785 .7180983360471271 -773 785 .7992727682573202 -777 785 -.32031994937907154 -783 785 -.34495510691702275 -784 785 .7242618279759553 -794 785 -.19831685749761196 -803 785 .11877308449393587 -813 785 -.7803427930897724 -815 785 1.2032215314020875 -837 785 -1.2855547010630985 -845 785 .23253809613326082 -851 785 -2.312817238875569 -858 785 .6196470436121195 -869 785 -1.9287425944276715 -882 785 .6731737016319331 -897 785 -.898668373164132 -918 785 1.2399273645967275 -935 785 .6754059534647863 -954 785 -.7296870342781314 -970 785 -.7110443483534649 -980 785 -1.4653489511461621 -986 785 .9216153056540433 -8 786 .5198378074774078 -16 786 -.3558735268815196 -25 786 1.124846615797038 -30 786 -.33081542565421784 -34 786 .5116079746984431 -46 786 .6479344490556873 -63 786 .19137671289274713 -64 786 4.02382584947191 -75 786 -.23235505213747845 -82 786 -1.4381781511081853 -97 786 3.253744831398023 -104 786 -.1860902750508495 -108 786 -.6716474175009856 -112 786 1.2602320793113795 -120 786 -1.5814187589964896 -144 786 -.664837019569716 -156 786 .3901193465339482 -167 786 3.4481025714999505 -168 786 .1609499627488516 -174 786 .17998720860091155 -186 786 1.942473396427932 -206 786 -1.1877822464683472 -224 786 .8183824026478727 -238 786 -.13962557988473132 -251 786 1.0261074726438073 -258 786 -1.031627883479013 -260 786 .3152708905797281 -276 786 -2.001128684155685 -279 786 -.509799510026221 -290 786 1.3660513009155781 -298 786 -.356151475983343 -308 786 1.687290491670048 -315 786 .3042901797221012 -318 786 -3.6392089605667564 -322 786 .6398419039971841 -325 786 -.05263026502596232 -326 786 1.4890624804345853 -343 786 -1.3029697744402955 -346 786 -.137825738653693 -356 786 -.07921717585810469 -368 786 -.8707521000925124 -389 786 -1.2652838418254209 -398 786 -.045610723157096855 -416 786 .43856086774258146 -421 786 -.12244666193875987 -425 786 1.7506652328346284 -427 786 .7919107267719059 -430 786 -.9341793580117383 -439 786 -2.557799403816177 -445 786 1.6171523276257156 -453 786 -.3285917431609607 -455 786 1.8110709766844055 -469 786 .7049986997133534 -474 786 -1.4005017736454535 -480 786 -.932138230867398 -491 786 -.2115762091589415 -501 786 -1.204640843592347 -511 786 -.6402133671105962 -512 786 -.2691128071461711 -516 786 1.5918931664506257 -546 786 -.9849590451249358 -547 786 -.8503787645147874 -576 786 1.6911421595323384 -580 786 -1.2108345687392208 -594 786 -.6780597475502802 -602 786 -.974179293294838 -607 786 -.892080952184445 -613 786 .2107395001474433 -614 786 -.4637239756344171 -617 786 -.6193291708597384 -620 786 1.4313589367815827 -622 786 -.559036838076777 -626 786 -.17158711683155792 -638 786 -1.3075789633722936 -642 786 -.9351013585218118 -644 786 -.6019484030413678 -659 786 3.9539553247725716 -662 786 -.1885322178493264 -669 786 -1.5438468975487913 -673 786 -1.544188861081239 -687 786 .49203089866810495 -695 786 -.25725760397595315 -697 786 .5184981673518213 -737 786 -1.4802756194754048 -741 786 -2.086187230429693 -756 786 -3.2497731186431285 -770 786 .7892955873434578 -811 786 1.8181236234007734 -841 786 2.0341356428758997 -843 786 -.5540300614504552 -846 786 .37315645254295415 -849 786 -1.4490651067595044 -854 786 -.6115008440690372 -859 786 -.1034877781568522 -861 786 1.7410141813664892 -887 786 -.5876521025656641 -897 786 -.5270806217140768 -922 786 2.4619729378967192 -935 786 1.1623682550660563 -936 786 -.4744907659443213 -943 786 1.0736717477136761 -948 786 -.8728831493965098 -949 786 -.9721395144460271 -960 786 .3105487386496 -975 786 .0062966742340043284 -981 786 -1.4795032129125822 -10 787 .8254849638119451 -32 787 2.162210678247878 -33 787 .6705229440505314 -41 787 .6039783561529125 -64 787 1.6001959318830452 -67 787 1.9728430845014144 -72 787 .1550688092965232 -83 787 -.8260683583966213 -101 787 2.6957480264850746 -113 787 1.1265263105831218 -118 787 1.154651388542857 -128 787 -.4509397653686441 -134 787 -.462917443649385 -173 787 -.6679646324967677 -180 787 1.5932586929005292 -202 787 1.61355731957055 -211 787 -.11168969949188379 -214 787 .13201579788956858 -215 787 .5115399964440799 -228 787 .4478982904539231 -245 787 .013379691287622814 -255 787 -.3516344273412023 -266 787 -1.1089019713287043 -280 787 .1887365978321012 -283 787 -.910166838394072 -284 787 .9481639958571038 -287 787 -2.835973723668613 -297 787 .8990115118319056 -300 787 .6475159191905542 -309 787 .8699607004823031 -316 787 .9317519858808417 -330 787 1.0839444101740756 -332 787 -.5521352036704498 -344 787 .23228736378111556 -346 787 .1216477292714363 -353 787 -.11222880050292336 -367 787 -.6816714875646456 -376 787 -.44441558405357084 -392 787 -1.8689691477189143 -394 787 -.46288173564972823 -398 787 .246385778280034 -405 787 -.08369320006521908 -406 787 1.2460649985774643 -408 787 -1.4913385686897662 -415 787 .017719405064064782 -432 787 -1.2476551750660667 -442 787 .5535918691243301 -454 787 .4235933101650948 -455 787 1.5431711175095955 -470 787 .15861979946238425 -474 787 .8315282983004985 -475 787 -.28570995232676333 -481 787 .3008306267787988 -500 787 -.13700785421722897 -515 787 -.57848236564149 -529 787 .6076029822374855 -539 787 -1.3357331387938778 -582 787 .03782374063515749 -597 787 -.8797373264976951 -599 787 -2.118080187958557 -600 787 .06723646330625059 -615 787 -.6089670177009379 -617 787 -.9119548064203467 -618 787 -.14651701693071073 -627 787 -.9068913264454788 -633 787 .2995947646028262 -647 787 -.35754997291655266 -655 787 1.3526337255058662 -662 787 -.8711995966736253 -678 787 .8653783636390763 -680 787 -.08919043676286909 -696 787 -3.2871918814327374 -706 787 -.3181063076603391 -707 787 .04994815288792205 -717 787 -1.6705177122857826 -740 787 .5581757288118773 -745 787 -.7506617312098413 -751 787 .0671042910431332 -752 787 -.044564128518392115 -778 787 .7904738307142906 -785 787 -.3934187342658319 -791 787 -.7092718811830877 -806 787 -.3026760510827426 -812 787 -.4766043629447788 -818 787 .006003117629942267 -820 787 -.9026622631896491 -827 787 1.3330225044466952 -835 787 -.8464040133384717 -847 787 1.1356836267953836 -848 787 -3.1330375197273517 -854 787 -.6387962969040283 -858 787 -.055459667088469944 -859 787 1.1513079735834615 -866 787 1.9948905619129742 -888 787 -1.0026847617838142 -901 787 1.2496191354984916 -908 787 -.29556468759728755 -913 787 .935313281204288 -916 787 .7248922546842327 -921 787 .4657423388509185 -923 787 .5588586758828586 -959 787 2.66754991382289 -964 787 1.1794896210088188 -967 787 .5581433004495961 -975 787 -.7623987474770443 -980 787 .312519662907501 -8 788 -1.855944021535579 -11 788 -1.7372453369726881 -14 788 -.535383892738686 -17 788 -.4805407980506389 -29 788 .27391097777680723 -38 788 -1.0855848561253079 -40 788 .9044716174512416 -44 788 -1.2347013238491704 -46 788 -1.6525695004986705 -48 788 3.3989432821298737 -73 788 .4675289896628688 -81 788 -.37760171270450976 -95 788 -.8612157924774276 -105 788 .02372061387950771 -122 788 -.3341227010459508 -132 788 .6231776858869086 -143 788 .28510540716820343 -145 788 -.10445111303217373 -149 788 -.1089735901123487 -154 788 2.6692885262535664 -155 788 -.7068387495778665 -180 788 .9464521020447239 -184 788 -.07952794519648326 -207 788 -1.8930448267159676 -211 788 -.12512883933851765 -223 788 .5325829897641912 -226 788 2.2370059696478597 -233 788 -.9232910603064413 -234 788 -.8699810144172218 -239 788 -2.0620266204488154 -241 788 -1.3165586122653352 -251 788 -.03649810575749225 -253 788 .27700023160560455 -261 788 .6808227551808841 -267 788 .7138358669726776 -300 788 -.050484474262141955 -303 788 2.47389342079633 -315 788 -.5781297965554785 -321 788 -.6240731230730769 -323 788 1.1607676051879798 -325 788 1.3535903638525812 -341 788 .9747907628989696 -344 788 .5144643357880629 -349 788 1.6748006319783058 -351 788 -.3274259667065401 -353 788 -.028526760697802387 -357 788 -.20947247298155414 -374 788 1.3692035817292032 -377 788 -.3146634356758522 -384 788 -.47142953383268094 -389 788 .7804499589741897 -390 788 -.6337229137084361 -402 788 2.4478632338094135 -413 788 1.5715527244952046 -443 788 .1370923462101235 -455 788 -1.4115374831761291 -469 788 .5327406657828987 -476 788 -.3499099641414531 -480 788 1.0443815477716287 -486 788 -.4600624594011463 -497 788 .26352745857061527 -513 788 -.3050782716881887 -518 788 .29334257197581226 -530 788 .3594108520274987 -550 788 -.8613370501075819 -575 788 .12030503438495399 -583 788 .7140877515715787 -591 788 -.06257542823218215 -602 788 1.495333420672263 -623 788 -.9040747252987594 -625 788 2.6153275520418706 -626 788 .913990342101967 -633 788 .10205616020394175 -652 788 -1.5042442983147803 -655 788 .1733422998697538 -663 788 1.3038614033918485 -666 788 -.3092632309630249 -693 788 -.7309770448628804 -703 788 -.017870525471736093 -712 788 -.6815627448572859 -742 788 -2.2284993274896583 -757 788 -1.8714778744175466 -771 788 -.9462249111218747 -774 788 .2626921794472564 -837 788 .60436968033624 -839 788 -.18101281515592102 -840 788 .2971645499491632 -853 788 1.247517502708016 -857 788 -.5441343011435112 -861 788 -1.546929961911654 -890 788 -1.9485011904883376 -897 788 -.9916066048824285 -905 788 1.3036065593205957 -911 788 1.965912564190986 -917 788 1.0192236112147455 -931 788 .21671700754586187 -938 788 -.8127684490935585 -945 788 .1479487064827247 -962 788 .23175638920723726 -974 788 -.8955288048161376 -976 788 -1.0941761439178326 -986 788 1.2299376574199812 -3 789 -.3513986419901682 -19 789 -.14763097360415456 -26 789 -.9901775412611667 -37 789 -.3736525597479958 -71 789 .8865092202474105 -77 789 -2.618761860062825 -125 789 -1.6728571980378544 -135 789 .2358733189442883 -137 789 -.20424943773657156 -144 789 -.06883113642594914 -171 789 .42643200823431104 -172 789 .4148350438576043 -174 789 -1.1356104809779963 -183 789 -1.3004822368032118 -207 789 -.13410425166750362 -212 789 .1771245043040924 -228 789 -.42558365022950906 -258 789 -1.395405141413657 -268 789 .7233564340597906 -269 789 -1.6775163342916122 -288 789 1.125131342196604 -290 789 .013705719126693952 -321 789 .10580163659461697 -337 789 .2737975903815746 -348 789 -.14942589281105703 -363 789 .38191736230418316 -376 789 -.939026552100041 -379 789 -1.6345212646636018 -380 789 -.0033649082225999105 -384 789 -.3904069790652472 -396 789 -.2988222061580261 -416 789 -.09529733860285437 -421 789 .9908228750793134 -445 789 1.2073283379560862 -450 789 .63415431771917 -454 789 -.29635388513329636 -468 789 .7462317042594776 -469 789 -.45621537781500004 -480 789 -.9071985679975714 -495 789 1.7311493487140455 -499 789 .16210256364279518 -510 789 -.5654454383635351 -514 789 -.9730893288074336 -531 789 -1.117314333054511 -534 789 -1.661581031841061 -542 789 .7661413506966662 -552 789 -1.138678090607994 -556 789 -1.1317357734560867 -560 789 -.7921051621563305 -567 789 -1.206722732343618 -577 789 .16949992335497402 -593 789 -1.0185000859935485 -595 789 .14090105778140977 -615 789 -.35422146623960044 -621 789 .3698954831437218 -630 789 -.19832186866039342 -651 789 .051332278398029035 -657 789 -.10238719117013498 -660 789 1.6386944702125936 -667 789 2.502767733687916 -684 789 -1.0219633205029939 -698 789 .2549759891937997 -708 789 -.4177848092174496 -709 789 1.2912266653557911 -710 789 -1.53425932304158 -719 789 -1.1529157099648943 -733 789 -.9714294450483254 -736 789 -1.246990800230089 -743 789 .6554817548863803 -757 789 -.6966073987360218 -759 789 .387047186466615 -765 789 .9360287969133118 -767 789 -.995195545144615 -775 789 -.8379040478500372 -779 789 3.064091282961497 -783 789 1.4583327395308294 -788 789 .2731253022792144 -792 789 1.017314461864785 -801 789 -.004582220574972672 -803 789 1.2224539095702678 -809 789 -.24020879239708018 -831 789 1.3363813627051069 -845 789 -1.2645730021681099 -850 789 .8635979391587878 -854 789 .6438917353909653 -863 789 -1.4143101380685377 -865 789 -.3250415577411733 -867 789 -.7275347224791842 -870 789 .2480047470064075 -872 789 .7238218945612336 -899 789 -.10327310037539884 -904 789 1.6477667833371452 -909 789 1.234918435955114 -918 789 -1.5306346054056579 -920 789 -.2847838038097087 -925 789 -.5203351204116441 -960 789 .7446716773341608 -970 789 1.4414130194482393 -973 789 -.21902128717763758 -981 789 -.5398505520134037 -992 789 1.7675078458989295 -1 790 -.34828239806942163 -5 790 -1.0667332171072545 -6 790 -.35338929338547365 -7 790 -.1580932508348871 -9 790 -1.0886796622448471 -13 790 .884111682626074 -23 790 -.25869765327204286 -24 790 1.1949150671103999 -25 790 -.8934910300400452 -31 790 .15455727770353372 -39 790 -.937680981771801 -40 790 .2982483087905018 -42 790 -.6813746550161711 -57 790 -.13961320662786997 -64 790 -.3055405959268283 -74 790 .4776162342822364 -79 790 -.9327891113714049 -93 790 -1.1896964290965295 -94 790 .9281356865140575 -98 790 .41145643907126894 -118 790 1.2566437771121923 -122 790 .5117270318409259 -134 790 -.663040541863025 -135 790 .029291585305338937 -143 790 -.10734626725341062 -144 790 -.3451275075179509 -148 790 1.2528619667403387 -158 790 -.39198033110070074 -161 790 1.0641564675548674 -164 790 .3609029268701078 -171 790 -.16744786492571212 -176 790 .7555741856572771 -190 790 .14228990821702597 -200 790 .3087078810286493 -206 790 -.757295196038779 -209 790 -.18247474676581238 -213 790 -.6642212830944036 -228 790 -.6031654573669856 -233 790 .7371252345054988 -245 790 -.9733098155536603 -248 790 .24934114067050345 -249 790 -.9161220990677731 -255 790 .8323991703059895 -263 790 .1700523123180465 -270 790 -1.435863654071022 -291 790 .8328588598986313 -296 790 -.9359161839815737 -324 790 .9619920904927913 -333 790 1.0122238225226416 -338 790 .4661022463159107 -346 790 1.210749621924183 -355 790 .16315369473977032 -356 790 .5817644713007502 -362 790 -.8510820466157629 -363 790 -1.7615911727662037 -366 790 -.7783894332794965 -369 790 .5811677018114547 -371 790 .8203577191108324 -407 790 -1.1976994612412049 -410 790 .4404240940123153 -414 790 .4364335026028842 -426 790 .620781573053333 -428 790 -.7452170715544086 -431 790 -.6729594692136645 -435 790 .8610191824869822 -439 790 .33514507060484966 -472 790 .7760325065546413 -474 790 -.27653756938774887 -488 790 .6663879167869923 -489 790 -.5872680476353959 -503 790 -1.3222574087620294 -507 790 -.15619676554370973 -520 790 .8268046378070307 -526 790 1.2635107201879034 -529 790 .4248522050480906 -531 790 -1.016243744955931 -532 790 .22828112256714717 -559 790 -1.2291431165667035 -584 790 .47204768338844116 -588 790 -.6565111790923844 -616 790 .23728778917672413 -618 790 -.930509536457238 -648 790 -.31443541697843524 -651 790 1.1365173759513225 -656 790 -.9702756782740363 -657 790 -.4158973734950427 -690 790 -1.3738307798929268 -701 790 -1.2661822639808367 -703 790 1.1609460267756118 -707 790 .5668240186475038 -725 790 .20805524437933487 -727 790 -.02608548776439816 -761 790 .39849298688768614 -771 790 -.2686182406395624 -786 790 -.4035650847491705 -800 790 -.6760018978156327 -830 790 -.5869766717009406 -843 790 .1631142513102882 -844 790 -1.0792566685108242 -862 790 .6447939462021804 -884 790 .16471306986298673 -892 790 .25316400009613527 -897 790 -1.4234161818888418 -924 790 .5429086793214907 -929 790 -.14924480135592108 -952 790 -.33458953135752645 -967 790 .27898566812090436 -968 790 -.4901034060209698 -970 790 -.15186799819618246 -979 790 -.7521229896913009 -980 790 -.9440300740364372 -981 790 1.0320430871417503 -982 790 -.03871073424344067 -6 791 .4218321533849817 -26 791 .3481956584677871 -29 791 -.23879421951427587 -49 791 .9442087642196034 -68 791 .01852843636037102 -71 791 .5047086102558467 -75 791 1.3111104301127043 -76 791 .1826046815787269 -95 791 1.9096901957833707 -100 791 -1.111231723192339 -109 791 .8754387193563302 -131 791 .4787011494980583 -136 791 1.6895505724725846 -146 791 .29378350371056294 -161 791 .06123648304122992 -168 791 2.6693386078928203 -170 791 .3108039990438744 -177 791 .2561965687478858 -233 791 -.21561281357312195 -242 791 .23595854988652662 -251 791 .13881348757011813 -259 791 .9226655380554465 -275 791 1.6498643051001458 -279 791 1.4460844845153822 -280 791 -.8764026340782625 -283 791 .3032171278635922 -301 791 .3756173248600916 -305 791 -.19202764731229208 -323 791 -.06804061634455233 -329 791 .7076787442196275 -333 791 -.5485651814432542 -344 791 -.4403982302062566 -357 791 -.08742725155881939 -368 791 .6348270660726366 -370 791 .08035739942539505 -377 791 .21285462909631286 -386 791 1.262028105399414 -398 791 -.48224744651273377 -404 791 -.5303509745447333 -413 791 -1.3156071735759594 -423 791 -.5649767852756123 -426 791 -.40384180825428223 -450 791 .6821647009712031 -455 791 1.03104309184478 -466 791 -1.3179968026853095 -482 791 -.955116956303063 -493 791 .8457645736103527 -525 791 .4452707645283346 -533 791 .34892579769061777 -536 791 -.6394276403657047 -537 791 -1.0784971475381608 -557 791 -1.0554318656259385 -569 791 1.7704957064598599 -571 791 -.40353878919831254 -573 791 .6266377684554418 -586 791 .11772542385701665 -595 791 -.9550893094211892 -613 791 .20530807486718877 -637 791 .42090525419858593 -638 791 -2.311511191995696 -650 791 .11761420336621282 -651 791 -1.3834780674155183 -659 791 .6233490180555752 -661 791 -2.036071315128894 -662 791 .3626162573770494 -678 791 .7099166815177617 -689 791 -.2428164821976205 -696 791 -1.4677490721254347 -699 791 -1.1660123228755006 -705 791 .8727743869192858 -737 791 -.9607800334232095 -750 791 .39344975150664696 -755 791 -.01407877142420393 -766 791 .7247907307879903 -771 791 .7897447749549136 -777 791 -1.1488216980142896 -784 791 -.44659739201202286 -816 791 .8103282345445539 -820 791 .7298966179518818 -824 791 -1.7187626519412076 -828 791 -1.2954978775719475 -835 791 -.321141039611718 -839 791 .3159374252050273 -850 791 -.09671024418376899 -857 791 .5534750434588406 -868 791 1.3622801096296933 -869 791 -2.5825647311167867 -879 791 -.7548426378014648 -880 791 .6182800723635925 -884 791 .7482736148875824 -888 791 .2617369065403621 -901 791 -.7146370079644367 -922 791 .7883203690559895 -928 791 1.9264519772007664 -932 791 -1.9596135589655992 -935 791 2.3364113774565958 -936 791 -1.262515842291518 -943 791 .11986457398020332 -951 791 -.9862278453262827 -953 791 .8491385375349524 -955 791 -.9672394210333831 -956 791 .5683130658252218 -995 791 .53214371519961 -10 792 .04159104914278787 -20 792 .10069227518792714 -32 792 .05252361665792088 -33 792 -1.2107194523566303 -37 792 -1.1153207499505031 -39 792 .1000268021247285 -55 792 -.7613788704767033 -57 792 .043201676624227914 -93 792 1.5138900431268458 -97 792 1.7719810248797307 -102 792 -.17267551647749232 -110 792 -2.373513181326091 -120 792 2.3311971820793307 -140 792 -1.720019662024042 -160 792 -1.3324909183908982 -179 792 .2929636960842388 -201 792 .13814494775655767 -208 792 .8502117519289262 -213 792 -.06977079388591567 -224 792 -.9450168507691097 -240 792 -2.9367921323056008 -242 792 -1.1937343874738484 -275 792 -.14840735593660262 -280 792 .20308790541112737 -290 792 .2260051707153025 -291 792 1.1802117970519634 -296 792 .4668274013211089 -299 792 -.35882632341760434 -300 792 -.053920338187837986 -313 792 .09646299794984758 -316 792 2.282133359157235 -343 792 -.9614203681832099 -352 792 -.7945620699014444 -355 792 -1.5732036874011506 -356 792 -.3415050271169577 -358 792 .1744832991748939 -365 792 1.3215880683585142 -371 792 -.41633875862378017 -380 792 -.45328796619241857 -389 792 .1626520065531173 -409 792 -1.24301849201698 -421 792 -1.3513400114692116 -423 792 -.7348020325075494 -430 792 -1.4437289634346695 -432 792 -.4501242194944124 -438 792 .3170314263346763 -447 792 .2841745734926568 -454 792 -.02598083366802475 -455 792 -1.1010095938119204 -477 792 -2.030468049000122 -481 792 .67607577996561 -485 792 -.11645565815865135 -502 792 -.17873909076424005 -520 792 .8125938717261793 -531 792 .6289210385986991 -534 792 .9567066102430197 -554 792 -.009197926355190733 -556 792 -.32282258722661317 -564 792 -2.9031320840325487 -577 792 -.711845343557879 -585 792 .1948313205172759 -586 792 .9656090685805343 -587 792 -.7202722036043784 -588 792 .22950284189063097 -615 792 .02349053661259695 -622 792 .30610083086621676 -626 792 -2.05705954356887 -628 792 -.9309025684570195 -665 792 -1.7604199151081787 -669 792 -.5491302841093786 -671 792 -.054732297236505745 -674 792 -2.302624195477642 -678 792 -.06770797123577638 -687 792 1.2328222119368235 -690 792 .8048251180085011 -705 792 .1731608582061589 -716 792 -.422216342243684 -722 792 -.10205608699692269 -729 792 -.1865140365895197 -734 792 1.7358195069896762 -748 792 .562495887411185 -765 792 -1.8202152139845256 -799 792 .517140194034226 -805 792 -.15136463926905175 -820 792 -.8628663578100491 -823 792 .544606551628229 -848 792 .33499367660872353 -857 792 1.3186747528164668 -868 792 .6372873815563667 -871 792 .8476654497631506 -873 792 -.43237621230269546 -875 792 .489420876607714 -886 792 -1.1357117918500481 -897 792 -.09527245475512439 -913 792 -1.1487852744429334 -914 792 -1.4840518955510298 -921 792 3.6603565187433076 -930 792 .24616318259467887 -940 792 -.7222166559315355 -943 792 .5399366733501237 -958 792 -.37928428975867207 -960 792 -.7641311912774553 -962 792 -.17847016613694824 -965 792 .12982716609676231 -974 792 .9812516660836469 -982 792 .29259505333162555 -999 792 .8781084362883542 -11 793 -.793296829576175 -21 793 .3674401491088086 -29 793 .036050587496227714 -32 793 -.857135198246372 -50 793 .48666487982448514 -60 793 -.1835910424371998 -67 793 -.9087248305691322 -68 793 -.87644565561255 -70 793 -.3430601463251975 -71 793 .5087859277373742 -87 793 1.082695550290204 -90 793 .11094819729583476 -96 793 -.014956757672090815 -112 793 1.7152379982498538 -114 793 -1.023744271280215 -156 793 -1.0009458793204564 -164 793 -.7755706603458045 -187 793 2.7651763695912472 -209 793 -.16885722365143224 -217 793 1.096260944035212 -222 793 .34029995666144414 -232 793 -.5338627505312229 -245 793 -.2558514019325337 -252 793 .401997015766405 -258 793 .6561310764867708 -260 793 -.884718056303571 -267 793 -1.6300257390533766 -283 793 .07437077001453615 -297 793 -.2946983236541945 -316 793 .03692789587511 -321 793 -.1072298736707315 -333 793 -.6653745640111979 -334 793 .33854475927207855 -343 793 -1.7197763734248048 -354 793 .522193068569217 -371 793 -.9395898920711279 -385 793 -1.1129546080065977 -399 793 .08576345216357162 -404 793 .8049477709879231 -425 793 .11606228658536258 -443 793 -.521228371673594 -449 793 -1.5776044183319793 -450 793 -.9134157910951962 -464 793 .1825759303749024 -468 793 -.41969919412387896 -470 793 .8118594531405643 -472 793 .07314677144256572 -473 793 .8136587390162893 -486 793 -.192863656958593 -491 793 -1.1488735732338704 -518 793 -.7094198298888906 -537 793 -.47010984535576095 -560 793 .03079637978533445 -567 793 .21418700923073372 -579 793 1.3263822576508921 -582 793 .11068413364068648 -583 793 .11531665531075289 -585 793 .7531161382360146 -588 793 .7320538256376088 -596 793 -.3658413703603379 -598 793 1.5941410838473782 -613 793 .4876363440921865 -628 793 -.5625981297889977 -651 793 .6327757066608679 -659 793 -.9817639696714295 -662 793 1.6017843517967796 -678 793 -1.031763935844633 -685 793 .07943899819529629 -700 793 1.005026696545709 -711 793 .62243718920331 -712 793 .20851922833267156 -729 793 -.4398485452700778 -733 793 .5806416322283128 -734 793 -1.4410493086896587 -742 793 .005623576621130926 -745 793 .9936787823986661 -754 793 .9942630569188098 -760 793 1.6552845252881483 -761 793 -.4197149628761386 -763 793 -.8347806852871356 -768 793 -.04742373458716945 -770 793 .3452981363663038 -771 793 1.4963180701488086 -791 793 .11555848907659895 -803 793 -.34090349312298185 -810 793 -.044178732271837315 -815 793 -.04634205294004659 -829 793 .9541648287777655 -852 793 -.8236292002427598 -853 793 .11057439633364245 -857 793 .027316103648418397 -865 793 -.2476539772310307 -876 793 .6067501771598961 -908 793 -.27914471385873496 -912 793 -.29565286991918466 -922 793 1.1536825562327275 -932 793 -.9254421109371636 -933 793 .17715339613685094 -944 793 .27810887444825627 -948 793 1.213247180165005 -987 793 2.4027806111825507 -992 793 -.29739204394901353 -1000 793 .6653131070287555 -7 794 .08715095170952007 -9 794 .0716938505492029 -18 794 .7426776107757064 -20 794 .8474000934713981 -26 794 .0054091267300274345 -27 794 -2.091783658821985 -31 794 -.8549852853790503 -42 794 -1.037939039251292 -66 794 .3264983888714108 -77 794 -.4444566693856254 -84 794 -.09965125245118123 -90 794 -.48586192218386487 -91 794 -1.1316389840182466 -92 794 -.2255834053078069 -95 794 -.7335592835798408 -96 794 .5043427612296193 -100 794 .27770169762685193 -113 794 -.3087022093819915 -116 794 -.675574586226519 -117 794 -.06548474010837821 -148 794 1.3209187540008385 -150 794 .21985361885274485 -162 794 -1.1671159418053483 -164 794 -.14345162269409284 -171 794 -.09506582277992293 -197 794 -1.3482519584302803 -202 794 -.2939394822404806 -235 794 -1.1605438737489862 -241 794 .7738576842482406 -249 794 .338025751515815 -263 794 -1.8403635208875795 -267 794 .40046694490498536 -281 794 -.9801704335782531 -293 794 1.3978002304837667 -294 794 .6486671907258055 -302 794 .5904107215702356 -304 794 -.33881218400168833 -307 794 -1.3735593203923686 -328 794 .8365873968354366 -333 794 -1.0876805679175998 -338 794 1.9327546855885376 -340 794 -1.906033232437146 -341 794 -.44357139613448116 -356 794 .7282448862460574 -362 794 -.355214844543545 -364 794 .2448051589915032 -365 794 -1.75038551241217 -373 794 .4665531532742094 -392 794 1.3743685951292355 -398 794 .22619352545309257 -406 794 .8292463030960432 -415 794 -.4591170527389797 -437 794 -.262688750323755 -439 794 -.17099713997146782 -443 794 -1.8649177684097842 -447 794 .6808553663216808 -463 794 .15007251143578923 -472 794 -.7884467774241065 -480 794 -1.0777283813662806 -493 794 -.8192628800917624 -497 794 .694479708413453 -503 794 .0615802618692656 -507 794 -1.2273557612694104 -517 794 -.9130211931272637 -518 794 .5618040381932063 -525 794 -.5354638010552725 -530 794 .826936002392191 -545 794 -.0921991560189124 -546 794 .06726976699687817 -581 794 -.41856600661794724 -583 794 -.5993557093330586 -588 794 -.1667890219235631 -591 794 -.7414607931014927 -612 794 .3539349065156688 -617 794 -1.1328802109658556 -634 794 1.981214005723819 -643 794 -.7407634828876428 -648 794 -1.6038366555756824 -656 794 -1.219507116480835 -665 794 2.742674579472348 -668 794 1.1288053188573688 -688 794 .4117400331268876 -702 794 1.5732264314554665 -709 794 .43778882914544603 -711 794 -1.6738150202440818 -720 794 .28831616534308435 -732 794 -.21193904807471795 -739 794 -.22841194014190086 -741 794 -.09736038735009817 -746 794 -.2079600539174956 -757 794 -.2536698890218514 -759 794 -.9243859881217068 -776 794 -.9190414698220795 -781 794 -1.3530800534109664 -783 794 .12603831656447803 -784 794 1.1369578500953264 -793 794 -.6779247691998413 -795 794 -.9527835005305487 -801 794 .7727275822657095 -803 794 .32842160334757003 -811 794 1.2338777919919326 -823 794 1.0614999207944216 -836 794 .38835949909875955 -853 794 .6076503159150096 -887 794 1.7787491159684141 -925 794 -.5551542534255107 -937 794 -.06369050768649376 -952 794 1.3060661158449536 -960 794 -.20586957309140594 -964 794 .28211000294077393 -971 794 -1.8392994251692225 -988 794 .6597720079095628 -6 795 -.026360797644775585 -26 795 .6962920317822251 -44 795 -.002233306500556975 -53 795 1.4059825392428025 -55 795 .3665435810791202 -70 795 .05677902450954912 -75 795 .6767529498195275 -86 795 -1.0121227184105965 -94 795 1.2837164256426665 -95 795 -.5234807723430267 -96 795 -.2790823820821227 -102 795 -.3185099660383236 -103 795 -.5894015558637996 -106 795 -.38744043535408035 -110 795 1.4172806742078992 -125 795 -1.082626570217802 -151 795 .3339125259292113 -155 795 -.41144797631165086 -163 795 -1.0022611634610763 -179 795 -.08612697394386644 -180 795 .3083761150431876 -185 795 -.31401696660484213 -186 795 -.19240221554869985 -188 795 -1.5233591775459858 -194 795 -1.2584982244326985 -214 795 .9674419699340724 -215 795 -.7673094948074424 -228 795 -.7622817903120527 -232 795 -.8573765615910319 -235 795 -.0770122641346356 -243 795 -.6632363843604236 -254 795 -.18319299141004913 -256 795 -.6955411605079255 -278 795 .6335557149490637 -289 795 -.73217631762305 -300 795 -.26950728741101687 -363 795 .5679105508210298 -370 795 .2917665998580808 -373 795 -1.5825525783129926 -381 795 -.5159675411370501 -386 795 .4213021034258778 -398 795 .40627427353850876 -401 795 1.8773574305156742 -410 795 .8336679357180977 -428 795 -.6328520809285167 -433 795 -.3462039051106763 -440 795 -1.073284669814954 -455 795 .7187731613777527 -457 795 -1.1118648043286765 -462 795 -.9934241300412536 -486 795 .00473783570400739 -519 795 -.24787613782357606 -539 795 -.6938663542217629 -548 795 1.5838509141968204 -551 795 -1.7114524805772278 -606 795 .05147529337469356 -607 795 .5206575863267606 -618 795 -2.446848084417583 -630 795 -.6974668749791154 -650 795 .6932562201601187 -685 795 -.26305099431466106 -693 795 .6678032973463769 -709 795 .30071326846867896 -711 795 -.1333241635653039 -712 795 -.7046605135817483 -714 795 1.9870406530045526 -743 795 -.9702336854008179 -746 795 .25657389677388903 -749 795 .4238454524773252 -767 795 1.2010347559261736 -768 795 -.47879165216999836 -769 795 -1.013194363691038 -782 795 .7400937498984403 -794 795 .24054909665092533 -812 795 1.1013344689520383 -832 795 .7933035595043438 -837 795 -1.6816226251774768 -849 795 -.40692540282738154 -853 795 .20511055224123353 -864 795 .8111475333033298 -877 795 -1.462099785258509 -896 795 .4044540666755571 -928 795 -.1318353239395889 -955 795 1.4016843830078587 -967 795 -.21334383621844058 -976 795 1.238442356844004 -978 795 -.6914549701823199 -986 795 1.315868872724166 -989 795 -.7670903870699083 -990 795 -1.0220997514759484 -17 796 .6464313270820942 -35 796 .4007709391271784 -46 796 .09001928942027425 -64 796 .3044944046440937 -74 796 -.304216439827103 -118 796 -.3014430425990394 -121 796 -.4845962920248418 -140 796 1.0201933364758458 -144 796 -.4143591244281949 -157 796 .8956146913898947 -167 796 -.569631504468871 -170 796 .33306232179471046 -196 796 .19241325439682455 -205 796 -.6125096824468387 -215 796 -.5652337681254177 -226 796 -.007975081875305545 -237 796 1.0475691980866824 -240 796 .49081026226456864 -259 796 -.5474676849019217 -261 796 .8054554442665376 -270 796 -.7051114889399386 -277 796 -.6435907614248809 -278 796 -.39657926721927905 -281 796 -.140893027769407 -287 796 -.28517064973775363 -290 796 .03614652079474251 -299 796 -.38103085476116266 -305 796 .39015126694510444 -311 796 .40221995501425317 -336 796 -.33715327071428697 -349 796 .6275850304099163 -355 796 .13823838764807939 -362 796 .1117780378213332 -378 796 -.1071963603085965 -399 796 -.20804105975825615 -412 796 .6884792031493191 -414 796 .09310119768208858 -434 796 -.46248311940613 -437 796 .23554128117631767 -445 796 .418658628870627 -454 796 -.5081915070910726 -470 796 -.13350324024912724 -471 796 .8582325756410993 -495 796 .4775570612243526 -517 796 -.6006318501021781 -519 796 -.7975585189333692 -522 796 .3242628645870831 -525 796 -.9410949060139159 -529 796 -.1917580401650678 -530 796 .706121209213304 -551 796 -.8055547609804687 -555 796 -.6489270387411457 -560 796 -.6259492134421013 -561 796 -.1339133951579501 -577 796 .24502999575549575 -612 796 1.189208141760946 -613 796 -.9334263602691178 -617 796 .6694488301070805 -618 796 .03512909374527839 -642 796 -.533143554126826 -652 796 .06658250015112996 -659 796 -.34022035880798496 -667 796 1.4913852212120178 -668 796 -.3858152422219273 -669 796 -.5319043998838593 -682 796 -.3130760437933239 -685 796 .8864763770134757 -721 796 -.039834804836137286 -724 796 .3612682505763917 -727 796 .7189193439137411 -743 796 .688208987490331 -747 796 .7310232214297225 -776 796 .24867553418203425 -785 796 -.6084908320163199 -788 796 -.2893306829902589 -798 796 -.47406741032463817 -823 796 .005039907740237874 -841 796 .3288630544170138 -853 796 -.5058409011084639 -876 796 -.6780867794850407 -877 796 -.052359928500507746 -890 796 -.15879408085000885 -903 796 .8496896021716056 -911 796 -.4535868191886553 -936 796 -.3226457575034032 -939 796 .08134385162403596 -944 796 .058812661924831505 -977 796 -.2532003271915785 -980 796 -1.043237179712996 -982 796 -.24167598155756365 -27 797 2.4625581392614686 -35 797 -1.6744115252379872 -42 797 .593992326429556 -54 797 -.3061819855572853 -61 797 .6418075111668707 -64 797 .1492735417136735 -71 797 .1878462100639775 -74 797 -1.7371336181675732 -79 797 .7281673872366555 -101 797 -3.320305498211913 -105 797 .31841755812499806 -109 797 .6006716010399834 -110 797 -1.1285811046932859 -111 797 .8007603085067017 -134 797 -.2629080590940802 -139 797 .2765260768725216 -149 797 -.8356603136078261 -151 797 .7075880999924942 -170 797 -.512206831430795 -175 797 -1.9073917152552964 -176 797 -.6563345771119891 -210 797 -.0036203407910384983 -223 797 -.1589452586390611 -225 797 1.8655806466495841 -227 797 -2.217791340629401 -246 797 -.8508630431824697 -260 797 -.3668628026075768 -261 797 -.9643027803901367 -264 797 -.2651804146662732 -273 797 .38492049652945093 -275 797 1.4158346652978258 -283 797 .4764932369996737 -284 797 -1.6893876196983246 -317 797 2.2725161006019037 -325 797 .13038788292091355 -332 797 -.7928105347179655 -337 797 -.30632142072852775 -343 797 -1.4242883955274905 -345 797 .2894139595537603 -349 797 2.954320000815075 -353 797 .06471374117898769 -372 797 -1.3296389162075253 -374 797 .09379343049821093 -392 797 1.4627863673022183 -436 797 1.2084795825018848 -445 797 .34906082296279384 -446 797 .8082231094425534 -456 797 .8148050759225037 -463 797 .23156740220607552 -468 797 .04077029491255547 -473 797 -.7612473009248646 -479 797 -1.2746140704518032 -497 797 -1.7615985663654787 -522 797 .20368494853002514 -527 797 -.9360387271360674 -547 797 .221494196187751 -556 797 .3932321276240858 -562 797 1.240840080038513 -568 797 .0856105009758209 -601 797 1.3788282388274373 -602 797 -1.7568162846143058 -607 797 .5710882811208434 -608 797 .2508913354721911 -627 797 1.404225110162609 -629 797 -1.1314588574341689 -630 797 .6678215005283261 -637 797 .24590092906173594 -646 797 -2.444689314335575 -651 797 1.4885528689665932 -658 797 .6588304797842888 -694 797 .6760868412705535 -695 797 .43163901542035255 -698 797 -.8100015160524924 -727 797 .1257866745854707 -746 797 .20331533551341419 -748 797 -.8182443592777912 -754 797 1.3427668445206415 -758 797 .46006676088378806 -769 797 .20548984555802463 -806 797 1.2246417681473634 -814 797 -.8711339120844452 -836 797 .031785640793686246 -838 797 2.3001293449754785 -839 797 .9445046146179205 -861 797 2.5896348706372994 -864 797 -1.0336257838520044 -866 797 -.3549959094832146 -874 797 -3.423454024942616 -890 797 .20207415495846828 -901 797 -.7242379429467666 -906 797 -.45114883601256095 -907 797 -1.48760973329274 -947 797 -1.8518549864296368 -949 797 .6270445469837866 -955 797 -.12989998100728928 -6 798 .10302534531960958 -12 798 .5535147309253385 -43 798 1.0515472489303321 -50 798 -.18809172580342268 -72 798 .7799011974898808 -81 798 -.18489021846652454 -82 798 .39542848746929316 -88 798 .7633170802779216 -91 798 .37567225197641807 -101 798 -.3099486469838836 -104 798 -.03357240022130904 -119 798 .2587927880731615 -123 798 -.02519042717153175 -135 798 .06644462053563024 -136 798 -.46222658827156043 -149 798 -.919749825557497 -155 798 -.2618895346761071 -158 798 .80977632215397 -161 798 -.40364096374051406 -169 798 .6964396091318527 -171 798 -1.5701951858211909 -189 798 -.15354506032877416 -192 798 -.11745838273974478 -198 798 .22702533422818674 -203 798 -.20921649089819327 -205 798 .7767400621208636 -206 798 .11032589860453716 -215 798 .29457612975363945 -218 798 -.4314404392823593 -230 798 -.21128087774674723 -269 798 .9303742673624875 -278 798 .27749447429532365 -280 798 .939353209544979 -281 798 1.4833328016382887 -291 798 .6965368166245769 -325 798 .8176807830003499 -343 798 -.4174229890745323 -345 798 -.24990609427085297 -356 798 -.05990128694180604 -360 798 .9911036139588691 -363 798 -.5381718658528956 -382 798 -.11291060749399191 -388 798 .07771502598465396 -393 798 -.07277974717145998 -395 798 -.16547388809633976 -405 798 .19308829164981517 -420 798 -1.106983962124361 -435 798 .8741975162221817 -438 798 .039051545816482076 -443 798 .421170030701056 -453 798 .4688412281772125 -458 798 -1.0138787643935983 -463 798 -.6261751460315539 -470 798 .10204290584365425 -496 798 .05179177890409725 -501 798 .12105720930458597 -552 798 .12057580849546232 -554 798 -.07761111844691237 -567 798 -.3224027402020401 -575 798 .7756341260916761 -578 798 -.4467818580415562 -599 798 -.9185227584969192 -600 798 1.0209128484495926 -607 798 .49827431018650153 -610 798 -1.0200810644646126 -626 798 -.30517737954609314 -640 798 .14760165552162677 -654 798 .28528262682097405 -658 798 .4334206287767901 -664 798 .16324636072889495 -675 798 .7798798815919845 -680 798 .22711108032800847 -694 798 -.4931246295815761 -702 798 -.27141874131775134 -703 798 -.03654554866675705 -709 798 .38070554651121474 -719 798 .31399754468981766 -722 798 -.005358814043880278 -731 798 -.45844109966605784 -736 798 .28466308320775124 -740 798 .7180981769679091 -758 798 -.9528150098179688 -759 798 .1963450846949277 -776 798 -.890878963056108 -786 798 -.7657640350667788 -792 798 -.39270691303565397 -794 798 .3806381703991749 -797 798 .5660091212945508 -806 798 .04778054143071937 -808 798 -.48516685128150133 -817 798 .816853685295483 -831 798 -.5926470682826198 -841 798 -.9687330360022909 -852 798 .29290625054455677 -853 798 .04802364584639303 -876 798 .3966089980320434 -917 798 .31935198921122626 -919 798 -1.0319698797532872 -935 798 -.20951169574956852 -939 798 .05378207732946387 -947 798 .7899406050672543 -962 798 .42986671291440337 -978 798 .04035476834780463 -981 798 .457513176792546 -984 798 .5412006780675611 -2 799 -1.2326686799797277 -12 799 -.5035897124926773 -19 799 .6272443882045721 -26 799 -.9546584130345971 -28 799 -.33134786895349244 -34 799 .4231896905309761 -48 799 .897989449270501 -60 799 .7944203028093333 -67 799 .4082998929012032 -72 799 .47832311619342455 -83 799 -.6905919178931482 -102 799 -.5963550289730667 -112 799 .5957121181521953 -121 799 .4130333097619214 -124 799 -.4594918854978453 -131 799 -.4226758760013963 -136 799 -.0796106957926685 -154 799 -.29130140214922157 -163 799 -.4620784187540275 -166 799 .28024181832827266 -184 799 -.9788929488334689 -187 799 -.33137367778851645 -195 799 -.6234719290313837 -205 799 -.08800152422033591 -209 799 .27582229612329223 -233 799 .9160697998715923 -251 799 -.4745985110925665 -264 799 .33480859214484904 -268 799 -1.4339831871741375 -274 799 .5045366103492039 -276 799 .5419545184022357 -282 799 -.08719142679937444 -284 799 .19042252475965088 -289 799 .05787961086032841 -298 799 -.7428772960921335 -299 799 -.7530622910703998 -308 799 .22092533561765476 -325 799 -.4982541009022955 -339 799 -.18473639941380732 -353 799 -.17046798863009563 -362 799 -.14539237083496268 -374 799 .682445128610714 -387 799 .5494651259654048 -391 799 .9074618422539069 -400 799 -.12957507623802714 -401 799 .9557082205060348 -417 799 -.8918855621822597 -431 799 -.012076211150466296 -437 799 -.4331127031825716 -443 799 -.9286378160778274 -446 799 .4366698522780551 -456 799 -.7788979539728268 -458 799 -.051906932034620074 -460 799 .6932064269044156 -471 799 -.0830089743382518 -476 799 -.38227007501845367 -481 799 .7876031698630854 -507 799 -.5907069994839158 -518 799 .12323109519739833 -545 799 .5500740835808898 -555 799 .8168571111707825 -561 799 -1.0136066488689934 -565 799 -.7003936894173625 -572 799 -.6359743952640519 -573 799 1.1151395592886901 -577 799 -.5214973736850035 -580 799 .6305372823031146 -582 799 .009610778440185885 -583 799 -.44499477393286946 -597 799 .06055287689860728 -600 799 -.6223715760417506 -614 799 -.620238231943602 -632 799 -.04038315883880583 -634 799 .7473796681205125 -635 799 .16157378299139297 -636 799 .08528560636256122 -637 799 -.580628859065434 -639 799 .4074745072253903 -641 799 .21677727271496222 -650 799 .05040821167169206 -669 799 -.908178883492483 -696 799 .49154468341294455 -698 799 -.06511783437847982 -699 799 .1434443328146196 -700 799 -.6437334531865736 -709 799 .19283653699033854 -711 799 -.33703272218154484 -715 799 .4037229160472149 -718 799 -.0874884279027315 -720 799 .03856156486155287 -723 799 -.3989448392915338 -754 799 -.3320641397296414 -755 799 -.3238762882243253 -760 799 -.0017145070624302247 -768 799 -.1952579295845434 -779 799 1.0528121135082136 -781 799 -.22780886110726895 -783 799 .47328773222857684 -786 799 .33934488901515897 -792 799 1.161419502470131 -800 799 .3574786432443718 -805 799 1.4852592582942825 -812 799 .34158670139920705 -820 799 -.24631910063316143 -824 799 .5096480831101282 -826 799 -.40954172129142735 -831 799 -.4186557169974998 -832 799 .8167695573261017 -840 799 1.0024849523596115 -842 799 .012144819092073295 -844 799 1.0392914437884697 -855 799 -.6381209174153076 -863 799 .07270940511754814 -871 799 .21170644492043336 -897 799 -1.6675806580131791 -902 799 .4783905406193324 -909 799 .6191217448487314 -910 799 -1.195182169257351 -922 799 .34710023171941523 -924 799 -.30591771198616025 -927 799 -.8915568497898695 -928 799 .09749863792555655 -944 799 .8602772537141948 -948 799 -.11941900392398647 -957 799 -.04576332159614163 -966 799 -.09438782298387915 -972 799 .23608564471393365 -974 799 .6247230598176431 -975 799 -.008564591161826562 -979 799 -.16174558618346846 -982 799 -.42151902678659403 -987 799 .669202134250846 -992 799 .8819729201973705 -2 800 -1.6744808527388317 -6 800 -.27026052371752535 -18 800 1.1538287509256944 -20 800 .42515371734887986 -39 800 .010288309104923746 -41 800 -.3979909512482767 -44 800 -.1755340904967797 -46 800 .9102051482175101 -53 800 .09457585587740214 -66 800 .1584926598456979 -70 800 .49796287385956606 -77 800 .3805996355424854 -99 800 .03345777719787507 -101 800 -1.416888176238297 -104 800 -.38062477022252117 -108 800 -.08478454951816568 -115 800 .5020736404124027 -152 800 1.4619189091123357 -156 800 -.004370748323298479 -172 800 -.17236883515371992 -180 800 .22231502708871198 -192 800 -.14404907186539564 -198 800 -.27133219043420825 -205 800 -1.0868207375781893 -211 800 .5962382525387586 -221 800 .5116425551935537 -230 800 .9355194141801505 -245 800 1.9497183820760258 -248 800 .29474219128388457 -260 800 -.382825471578064 -261 800 .48084920178608254 -262 800 -.37456298698898527 -268 800 -1.0541377812832804 -286 800 -1.068076798581897 -298 800 -1.2020088684790753 -301 800 .12818387058565 -341 800 -.7576377939557621 -345 800 1.424189289173651 -370 800 -.7673080968902796 -378 800 .012499632245858011 -405 800 .9556833271806782 -421 800 .9672640285597636 -436 800 -.43575263086350274 -451 800 .042437730858146526 -466 800 .9500241379944836 -481 800 -1.1819326413155604 -495 800 -.11262740306095141 -514 800 -.17396781136355433 -515 800 -.0951893219775018 -526 800 -1.0296320779647994 -542 800 -.10566754953321782 -546 800 -.20195068046494274 -552 800 .31235544332575593 -560 800 -.9396495515773193 -571 800 1.8593147230068952 -583 800 .5544056137065889 -592 800 .0512527252813021 -594 800 .8600056662215182 -597 800 -.49711335220459857 -604 800 .3954645990810422 -606 800 -.7124964186154653 -618 800 -1.5495049531013838 -623 800 .6986570415629048 -635 800 -.5582752283383734 -669 800 .24620489690127256 -670 800 -1.458209929436435 -679 800 -.10649864263300841 -693 800 .11078685314610588 -708 800 .09967309841240482 -723 800 -2.0129793569824326 -725 800 .45936166543562507 -730 800 -.15347008478553925 -732 800 .5784027273070531 -739 800 .469932412203239 -750 800 1.659875520915487 -751 800 -.17640473017931182 -753 800 .7461769638691079 -764 800 .0398828517492541 -774 800 .6293718328139242 -781 800 -.7129719453742788 -818 800 .15582375906946638 -822 800 -.9566440979190534 -824 800 -.0760744711068372 -829 800 .5264625281553538 -831 800 -1.6420581400420011 -868 800 -1.1502417138524013 -871 800 1.0771607953552045 -881 800 .7258876396934925 -885 800 -.5625970664992878 -892 800 .8186206276451444 -899 800 .6751301503983047 -914 800 -.2655285118150136 -917 800 .6580873440177792 -920 800 -.6682665278984514 -927 800 -.9400101763235785 -952 800 .8648881132878778 -958 800 -.11533236297190484 -979 800 -.6624896695095341 -997 800 .09953029791233732 -13 801 -.011868162543034957 -15 801 -.2443106613753085 -38 801 -.7479814851825839 -52 801 .2517880611600836 -69 801 -.11560192229368794 -74 801 -2.834177330994086 -76 801 -.8389391719292894 -104 801 1.1121542661351773 -109 801 .46799969421565135 -112 801 -.8468668907033747 -117 801 -.7365405731581861 -135 801 .33308157850815 -143 801 1.2669119743755126 -146 801 1.1586787160537415 -181 801 -.8212075880485779 -201 801 .42428988258847816 -208 801 -.472978283256119 -214 801 1.7816639723657934 -223 801 .30151975886092286 -228 801 .528966523867071 -241 801 -1.2511948302649665 -254 801 .8238442448862546 -266 801 -.4173388479956367 -268 801 -.23294805661453669 -294 801 -.5581947786359422 -303 801 .9135215465428675 -306 801 1.7574425580395263 -312 801 -.8015958319379823 -317 801 -1.188929923223849 -339 801 -2.649953474504437 -360 801 -1.0763639728370056 -367 801 -.08480892141238344 -390 801 1.1115544730520153 -394 801 -.8703850723005216 -398 801 1.392167770025854 -411 801 .6814907879948806 -461 801 -1.6032480985535618 -470 801 -1.679977306877265 -479 801 -.1985309049402568 -487 801 -.8325261229837119 -500 801 -.7951086516344251 -501 801 -.255564428823444 -552 801 -1.6999398111066635 -559 801 1.8289431279268684 -562 801 -.31857304253152247 -563 801 -.6249472949900465 -566 801 -.6434135000677884 -578 801 1.0893262553559064 -583 801 .05862364691352469 -587 801 .7225667622549371 -599 801 -.8237456288517477 -600 801 -1.8002988040441728 -605 801 1.0281066815312734 -631 801 1.6690797602918237 -646 801 -.021479279996575507 -653 801 1.2186145493449814 -654 801 1.87529295664207 -655 801 .05885340571308356 -667 801 1.6840704126717434 -682 801 .09024773324001735 -694 801 -.7494773915117663 -703 801 -.5846450555613474 -707 801 -.4025928349443444 -712 801 .47530307401868044 -715 801 -1.105501745492204 -727 801 .07435759355745224 -728 801 -.8807639014739075 -742 801 .04964186102556985 -759 801 .44147720318390316 -760 801 .9072851734510323 -786 801 1.192145711676527 -788 801 1.4871358688200769 -791 801 -.158085129609569 -792 801 .3283300731013266 -810 801 -1.1090653106457775 -815 801 -.8351314940153601 -823 801 -1.0305807123052104 -825 801 -.6548570735905976 -830 801 -1.0564946501901695 -865 801 .3128696884943684 -868 801 1.0979856669210908 -882 801 1.7234555359980768 -883 801 -1.8498167495567437 -886 801 .9727497906201021 -887 801 -1.1858948248040282 -904 801 .7888601891831667 -921 801 -1.814391425043941 -937 801 .0767589981614141 -955 801 -.21169371560283862 -960 801 1.7955090690014692 -972 801 -.21712005056221623 -984 801 -1.0845498465364025 -986 801 1.3365409498100158 -990 801 -.2004352823492894 -993 801 -.7568307223388018 -2 802 -1.0613233419239367 -12 802 .21845896346125476 -28 802 -1.0691602751715155 -29 802 .6852144370736793 -30 802 -.9532405111468257 -35 802 .7726806635316689 -50 802 -.03425587528552437 -52 802 -3.071033216067717 -55 802 -.6491650481555282 -84 802 -2.035616102508016 -105 802 1.263041799806747 -122 802 .2947380141653865 -123 802 1.0607507762642117 -125 802 -3.0883707278306853 -138 802 -1.9782253008111808 -155 802 -.3059196598272709 -164 802 1.3621025863158736 -166 802 .00285526971602508 -170 802 .39915011250030813 -182 802 -.9097869946023405 -199 802 -.891787643407272 -232 802 -.5382440430718083 -235 802 .07067897063035658 -246 802 .837364717937246 -248 802 .17178215962321047 -276 802 -1.9360672448612248 -286 802 -.5212011415738993 -288 802 .6070024315994439 -293 802 .6022003062832805 -309 802 .13838349884062162 -310 802 -1.6124732227020515 -311 802 -.6871777791315438 -318 802 1.091124666938936 -323 802 .4266605989861337 -328 802 .12086494149301817 -333 802 .9095201254054386 -336 802 1.9684409973362724 -355 802 -.2895411121726967 -371 802 -1.6298046807686732 -391 802 .5965999120024892 -403 802 -.4643663433037494 -405 802 1.1816740539987733 -406 802 .12152017127971164 -413 802 .14600884937026015 -424 802 -.2398979313154613 -438 802 .13935342794730232 -442 802 1.4062985353965687 -444 802 2.002009535068548 -445 802 .44041791066021374 -451 802 -.27368926391820264 -456 802 -2.340083240670951 -472 802 -.9314212781161495 -475 802 -.9063901743621078 -479 802 1.1687111758811044 -480 802 .058256889684473734 -483 802 -.1272119627453135 -488 802 -.5328422921029964 -494 802 3.259971177071319 -512 802 -1.0116030390658535 -534 802 -.9619845720496715 -544 802 -1.692011749301167 -552 802 .021174729732244373 -581 802 -.7516742067624196 -605 802 2.0738516358592034 -620 802 -.7243802963526464 -623 802 -1.4254098001930502 -632 802 .7124734721880899 -635 802 -.855853607835252 -651 802 -3.0948443222330053 -654 802 -1.0077608102840698 -657 802 -1.2980733253373613 -666 802 -1.1293565190437942 -695 802 .44927561453351367 -710 802 -1.1397433305075069 -723 802 -.03490078270377986 -724 802 .5619525344209596 -746 802 -.3783145160520229 -750 802 -.5725571373580945 -758 802 1.6307443304370839 -765 802 .01787963961784239 -769 802 -.4216841030071627 -774 802 .09401524447523936 -781 802 -.6189729279125733 -800 802 .6978168193346603 -803 802 3.1374881723345007 -820 802 .7930889514172899 -821 802 1.0636116989044178 -830 802 -.46178059106463126 -855 802 1.0821959310003555 -874 802 2.74974540917634 -879 802 .3805524480100039 -893 802 .47960806932621125 -895 802 -.43626191935618885 -900 802 1.0382599929109815 -906 802 1.9291306236261885 -915 802 .7297697536411123 -929 802 1.9360298088864039 -940 802 1.1388653057827058 -976 802 -.3287895924884096 -995 802 -1.4041615863755865 -996 802 .04233913062434072 -1 803 .34571644501174376 -17 803 .03958733853510879 -31 803 -2.0101127772730045 -32 803 1.057616360100344 -40 803 1.4580373757424292 -49 803 1.7565440236517433 -51 803 .9233005021233021 -65 803 .4416384483405656 -76 803 -1.1777237573026453 -79 803 -1.8932105166425615 -82 803 -1.1551188124300826 -83 803 .1530629866206878 -100 803 -.4216354056339692 -107 803 .6999576293201129 -119 803 1.1721041798065057 -124 803 -.3067297859995228 -211 803 .7707737313648123 -215 803 .9037547199551708 -228 803 .5785215644876297 -234 803 -1.0868482312119012 -238 803 1.455654582021973 -257 803 -.031586102843416175 -258 803 -.6768127175864551 -275 803 -1.4149911303380005 -288 803 .1022125420573694 -296 803 -.0737300815801035 -316 803 .2795832947775798 -323 803 -1.6188063708165814 -333 803 -.9160949247440431 -338 803 .5168549036451454 -344 803 -.5797356114997668 -347 803 .40394239510283525 -354 803 .3380835161848721 -372 803 -1.4662802185198436 -385 803 -.2429821437680574 -386 803 .8500853309497012 -390 803 -.17805089933422388 -398 803 .3215625964055701 -416 803 1.0950500247486028 -431 803 .4491094101438048 -440 803 -1.481282856698301 -446 803 1.320777629411492 -486 803 -.49802762526103384 -509 803 .13379392269722223 -512 803 .4381598521461465 -513 803 1.7749389976660994 -527 803 -1.4079491676505804 -531 803 .8683843099817986 -537 803 -.7502947998109798 -542 803 .6168566297375195 -543 803 .6839551438543554 -544 803 .02288036601918335 -546 803 -1.0106142215894827 -549 803 -.32568703765586343 -555 803 1.0246821171812424 -556 803 -1.0473822034762537 -565 803 -.5620211289974648 -592 803 .9373472311609417 -609 803 -1.2285615928939466 -629 803 .5452010710476596 -643 803 -.4542237241968534 -663 803 .07869179688208566 -664 803 .2769794145951047 -669 803 -.09110275981742098 -680 803 -1.0222522854168141 -686 803 -.7056954086977678 -704 803 .875757868768075 -706 803 .2839018654517275 -717 803 .13186251405727847 -719 803 -.12031544497290139 -725 803 -.9092387943605345 -738 803 .03406924325132235 -741 803 -.9314448299668064 -758 803 -.28587676773344206 -766 803 -.26250758590085277 -808 803 -.17007861383683553 -819 803 .017664852436415183 -820 803 .43427129858973984 -842 803 -.6406439052337941 -850 803 -.49097133880024574 -851 803 -1.8575336180850073 -857 803 .9509029264107518 -885 803 -1.022000651828331 -903 803 -.3962940247601783 -914 803 -.5637603143701525 -960 803 -.2270539304785956 -970 803 .48452693825317117 -979 803 -.11473181196913576 -986 803 .07010314802586932 -993 803 .5468767032434116 -994 803 .29145993384066504 -1 804 -.07192715168715738 -7 804 -.1684104162541014 -14 804 .8794621846881265 -15 804 -.08995030438367312 -62 804 .5851912881827227 -72 804 .9825976134629936 -80 804 1.7456203033788518 -86 804 .7025713061404838 -90 804 .283940484063156 -94 804 1.1477410148653409 -100 804 -.868753161075876 -134 804 .3132830303299922 -136 804 -1.4203259148841134 -155 804 .7044581841955925 -159 804 -.9955099725526387 -177 804 .1391438309361667 -179 804 .535260478239981 -213 804 -.47681377546896553 -234 804 -.8041551132114125 -241 804 .04922556830557902 -250 804 -.5541777362554962 -252 804 -1.2156827149704832 -260 804 .5706162775304788 -275 804 -2.052496601809668 -281 804 -1.357306319595107 -284 804 .9009177689572215 -300 804 .39181079232687965 -306 804 -.16018663019023857 -308 804 1.1077148927145186 -314 804 -1.5873711587688377 -323 804 1.2588421090533868 -326 804 .2131565990811899 -343 804 1.3320513242116174 -346 804 .9914746847056352 -357 804 -.9768764468495883 -405 804 .6955555921911559 -409 804 -1.2263408694936793 -423 804 .39147456263631286 -439 804 -.9295524643676042 -459 804 .15423657484396827 -478 804 -1.5512824662911462 -480 804 .019818480951995898 -488 804 .15239504021086991 -489 804 -.8231670740257887 -493 804 -.3581902138544575 -495 804 -.8933814907817919 -504 804 .34717376142704937 -516 804 1.524315583730154 -524 804 -1.2079438305687185 -526 804 2.3521151859938474 -528 804 .07326007834716422 -529 804 .10775473527215718 -538 804 -.9648259515219866 -547 804 .37512528719624183 -550 804 -1.0932374997586782 -560 804 -.173493461328384 -572 804 .12083714288385378 -583 804 -.7730473665211327 -586 804 -.006188906305435823 -589 804 -1.0949010914228565 -609 804 2.4731054648832664 -610 804 1.2384596507185857 -621 804 -.9697786846230814 -638 804 .8651105200572147 -639 804 -.32777999549431525 -661 804 -.07909406589854928 -668 804 -1.2810292737829096 -674 804 -.541192343074872 -677 804 .024150248351962583 -681 804 .13147401388904972 -687 804 .21275015501308703 -688 804 .9250421783381252 -692 804 .7083264133035019 -708 804 .48628690713901623 -733 804 -.38324968992787256 -743 804 1.0146188038504764 -747 804 .27008185737760204 -756 804 -.4916771321731974 -776 804 -.6495246273211912 -780 804 .5904448108910603 -806 804 -1.0412413526533402 -810 804 -.359775764739962 -818 804 .9620201976421258 -820 804 -.9499461520810638 -843 804 -1.014993332653499 -846 804 -.858387692739329 -847 804 1.4658214591759864 -857 804 -1.3291393459037661 -866 804 1.3238396351053852 -871 804 -.1531266104141168 -873 804 .8548555900080816 -876 804 -.9512728523081997 -886 804 .4160878236240658 -890 804 -.15694148475212613 -900 804 .6438335797781715 -903 804 -.7936570407144824 -913 804 .41584083485041456 -919 804 .875530120048107 -923 804 .49012004709142126 -929 804 -.32023104763560645 -947 804 -.8906000016372848 -952 804 .7910706323167838 -954 804 .5983896928399095 -956 804 .09640607052135491 -966 804 .06475553387767956 -975 804 -.6378165602403796 -977 804 .32814976075236035 -983 804 -1.063003422030472 -986 804 .30245632784625825 -1000 804 -.5916879427933227 -5 805 .812294462180574 -8 805 .6886580154897776 -15 805 .84208351624878 -17 805 -.5218460041694759 -25 805 2.447235574189563 -34 805 1.4392960818383207 -54 805 .9609720602875603 -58 805 -.8122034064722626 -85 805 .18794637280961335 -96 805 .08785957635178897 -97 805 -.4971463754232103 -116 805 .050081211027316955 -129 805 1.0336129168886954 -141 805 .16240202439788542 -142 805 .7181088953610744 -185 805 -.5976468831880051 -211 805 -.10973623206939373 -219 805 -.17905523351591132 -224 805 -.057654717584846235 -226 805 .06606255782015634 -229 805 -.21338222355037464 -232 805 -.15154203997535248 -245 805 1.1467121031749907 -295 805 -.8555723048846894 -319 805 -.7070932818487294 -337 805 -.5949899005324656 -349 805 1.0560811988849355 -365 805 -.36990678517856895 -370 805 .671579197440643 -375 805 -.2436971253686951 -377 805 -1.2182845070605322 -388 805 .1710095237133198 -396 805 1.0868631745188562 -398 805 -1.1378942397353586 -399 805 .8027447636950713 -404 805 -.9376831354987596 -408 805 .11052320320063963 -413 805 .327053600485407 -427 805 -.11851702814271448 -430 805 -.6917458761481916 -433 805 -.8625826666889098 -437 805 -.056732247991099855 -443 805 -.8145323106618433 -445 805 .0006255629837769519 -454 805 -1.1147468378601442 -466 805 .8924146000369093 -475 805 .45623232960005344 -509 805 -.32925911389499424 -523 805 -.036321614069064714 -524 805 .17666416094975174 -531 805 1.8485713165596984 -543 805 .0563567468678568 -545 805 -1.2942838889269064 -549 805 .06791157344728527 -565 805 1.2825156492384555 -569 805 1.0806829305544468 -570 805 -1.0456566545458266 -571 805 -.16161954672008266 -582 805 .385959555903482 -590 805 -.860378020645923 -628 805 -.10183382400982209 -631 805 -.8750936731662423 -645 805 -.4007438620682917 -675 805 -.20394909471138484 -686 805 -.5289839192053238 -691 805 .32328287066361755 -696 805 .5737357727199724 -698 805 -.3001173885556708 -714 805 -1.2685568977608017 -745 805 -.15262970727792935 -761 805 -.4163044091011368 -764 805 .48177949237745943 -776 805 -1.2302278798534239 -795 805 1.9027718680085934 -800 805 .8080927193825527 -804 805 .5589100539592786 -806 805 .5772394757589588 -807 805 -.5199048987681438 -834 805 .6448159047557678 -837 805 .7052132131230557 -840 805 .3286781179806849 -854 805 .004023989201952877 -872 805 -.015886557278872532 -878 805 .4732584169656122 -889 805 -.044741453604132286 -890 805 .8219518351964998 -904 805 .09371850230861184 -906 805 -2.240242322433397 -909 805 -.6898645939218023 -913 805 -1.1579586790531784 -914 805 -1.3013216613976342 -922 805 .7629024222670433 -931 805 .48371059461404636 -933 805 -.10830070757413003 -938 805 -1.2758527122411738 -974 805 .984312843959791 -990 805 -.26276414769248524 -1 806 -.41830520877063215 -41 806 3.2301066515760066 -42 806 1.2029310843561587 -71 806 1.3019985609826452 -75 806 -1.2276758871625981 -92 806 1.0285983477358103 -98 806 .25463466807572116 -108 806 -2.553404843724353 -109 806 .37923721758958906 -124 806 .5238259056471551 -131 806 1.3837440561571706 -152 806 1.0790074891264325 -158 806 -.330147776717111 -169 806 -1.22445738311233 -190 806 -1.005041032003811 -195 806 .4780438519148525 -218 806 -.492897054494239 -219 806 .14474574532859427 -228 806 .5761710910993889 -231 806 1.1901375570671846 -232 806 -1.7986858236661956 -248 806 .7479711354478392 -259 806 -.7332187352330037 -260 806 -1.135972218582876 -264 806 .9454162275930553 -268 806 .0175771850570162 -275 806 3.3514721584324807 -283 806 .17683426866193494 -323 806 -.696854657888565 -337 806 -.29054723998402343 -340 806 2.065477057514963 -353 806 -.22316620400767706 -358 806 2.36529733669725 -372 806 -1.206112746055352 -377 806 .7787476879835241 -378 806 1.5250947697183976 -406 806 -.16478600489198275 -426 806 -.8314796860553726 -452 806 .3970989977170268 -459 806 .3576927175026348 -478 806 -.37274434494767333 -480 806 -.23792870939830557 -486 806 2.4408720508476773 -493 806 .651745206042793 -496 806 .28639268396613704 -523 806 .22055290571042205 -530 806 -.9817514685777137 -544 806 -1.8311806392997474 -545 806 -1.4849375460230483 -547 806 -1.6025716216471204 -559 806 1.6161898303436402 -574 806 1.6674502102074786 -589 806 .3197272908855074 -590 806 -.19463407344152678 -597 806 1.0780127716522854 -598 806 1.2879944494274678 -604 806 .7694044852045325 -611 806 -.34309587993002566 -613 806 .7932479430089894 -615 806 2.555713094362487 -624 806 -1.061147709785744 -637 806 2.1837504335360496 -640 806 .3645345889480324 -649 806 -.04717545073404594 -654 806 1.4072487314226703 -684 806 .557198119384439 -696 806 1.5736345746227687 -704 806 -1.5388628928200316 -712 806 1.5774921575344567 -718 806 -.26236652520317005 -719 806 .10078368629845208 -725 806 1.0382649219375715 -728 806 2.373097175341146 -730 806 -.553299042516256 -743 806 -2.004524933558089 -747 806 1.5522436422030097 -749 806 -.37962948633739546 -765 806 .09735793996096573 -770 806 2.2110215286635286 -792 806 -.21394807245561775 -798 806 -1.2424067442420308 -799 806 -.5016898479770578 -816 806 2.0998728353720097 -818 806 .556816720784065 -826 806 1.3301241571701907 -834 806 -.674840813020331 -841 806 2.7042432660956393 -846 806 1.4569750561658765 -853 806 -2.322609536806799 -862 806 -.9779794425338865 -870 806 -.6945507411729255 -880 806 1.6196692029171278 -897 806 2.2524376091016385 -898 806 -3.4773633050549186 -902 806 -1.6589524276578282 -904 806 .06705933462087792 -931 806 .517853011958865 -946 806 -.6196871253814551 -949 806 -.9930132282433833 -950 806 .9920414031199531 -954 806 -1.7428458332325885 -958 806 -1.46091212452926 -970 806 -.6797050763926145 -988 806 .10836171524485597 -994 806 -.4138166898169726 -1 807 -1.6420035602096903 -29 807 -.0815798912409394 -41 807 2.8659413317781026 -52 807 1.2983655652998467 -70 807 -.8180992515435752 -78 807 .8613871559213901 -89 807 .16821787904548935 -92 807 .8183486819957686 -123 807 1.3630534577923212 -146 807 -.02920112599620797 -147 807 -3.0457072453710343 -151 807 .4840928289694383 -164 807 -2.0901949857043745 -165 807 -.40129835353358195 -166 807 -.9733734632183788 -168 807 -.1034387379906045 -190 807 -4.018063381047141 -203 807 -1.6462432043537276 -213 807 .4768741845900118 -225 807 -1.0292770041816837 -238 807 -.4466537518050079 -247 807 1.9566543444480566 -249 807 -.3344709318605891 -251 807 .9609694528840621 -265 807 .6924856918485703 -279 807 -1.1636562297781834 -282 807 -.4527091397947426 -288 807 .6375616349679546 -296 807 .4556954766950835 -300 807 -1.1350647066268547 -303 807 -2.2018140141673634 -304 807 2.9335236786029895 -338 807 -1.5547027504557844 -351 807 .5060513047322706 -360 807 3.0236024740134746 -366 807 .2899977905934478 -370 807 .4905129518674575 -371 807 1.7651909125753944 -386 807 1.9398274933513218 -390 807 2.1225380434956493 -404 807 -2.06998791608159 -424 807 .6742728071604212 -446 807 .045013850989130695 -454 807 .2497746657699454 -455 807 3.362494524580377 -464 807 .9989763249058683 -510 807 -1.0191578020895644 -522 807 .3126401307266228 -523 807 -1.3214096670688265 -527 807 1.9135789270239305 -528 807 1.6937289607969086 -544 807 -3.24423323043364 -549 807 .3333933444315553 -622 807 -2.753735899513171 -633 807 .7251254131372379 -636 807 2.744691735742915 -639 807 -.11120997355832055 -645 807 -2.555858198593458 -649 807 -1.131384256174996 -650 807 -.3806663798169802 -675 807 -1.1638911210259213 -685 807 -2.313991539662663 -697 807 -.2264071432972729 -698 807 -.7455470174137024 -705 807 -2.0114747612451405 -717 807 -1.7375457577541342 -725 807 3.8376998516086545 -741 807 .9634957875083829 -762 807 -.6046702488070941 -787 807 1.2746420490047699 -812 807 2.596105766968328 -821 807 -1.865284606060151 -833 807 .8206059450205428 -843 807 -2.7337560988710856 -858 807 -.03581454603004816 -860 807 .3880775958875651 -878 807 .46645118017311055 -885 807 -1.319403099434274 -894 807 -2.106793489696659 -911 807 -.13000436325063006 -915 807 .21645963831038534 -918 807 -.14582173536670287 -922 807 .6218175894792582 -926 807 1.7087383171541368 -928 807 1.2121532306756477 -956 807 1.0111597535554742 -959 807 -2.212526738542803 -979 807 -.13050058517733765 -6 808 -1.8038460550198177 -14 808 .45984777778786934 -49 808 -.12513237885965622 -60 808 .4200966270099799 -68 808 .02434201898939148 -70 808 -.30581777727592796 -103 808 -1.6277929803292928 -108 808 -.9581968748446862 -109 808 -.49438224232004296 -110 808 2.4916705575359677 -147 808 .32291323439486164 -152 808 -.9702902989028186 -155 808 -1.4042017260331927 -165 808 -1.269649145515704 -219 808 -.5168944206142312 -237 808 -1.6312507368507836 -239 808 -2.606103181822354 -249 808 .6310817566973004 -253 808 -.397907666265928 -273 808 -.36887589226731643 -279 808 -.29077354431600855 -290 808 -1.0759605838622417 -292 808 .6365664848153753 -295 808 .7485253689534033 -310 808 .028940353481124483 -317 808 -.2148760286102243 -347 808 1.0232468829958372 -351 808 2.456269627542966 -353 808 1.6366454135393858 -372 808 -1.035247906955874 -397 808 -1.36778555341007 -409 808 2.230727607318517 -414 808 -.9969486828888873 -424 808 -.7054817691232022 -433 808 -.7510584740388064 -465 808 -.756321538209368 -486 808 1.332965206991344 -493 808 -.3596298757775211 -512 808 .6576102426676926 -524 808 .2760440797048923 -529 808 -.5338681014845246 -534 808 -2.3574935001237174 -541 808 -1.0925679214336375 -553 808 -.5826919567482782 -555 808 -.32883453272439805 -580 808 1.151534588378206 -584 808 .658590524220277 -586 808 -.47925071456393586 -598 808 -.057091450192820595 -609 808 .10757387146791593 -618 808 -.5750924950939542 -639 808 .17172270304993575 -641 808 -.6346994825257177 -643 808 -1.338698657908679 -670 808 -1.1696386251874664 -680 808 -1.4515390635586585 -685 808 -.1392775915546032 -699 808 .7239749899048459 -701 808 .4821985347458375 -702 808 -.044727219934935 -750 808 1.8083769414481494 -752 808 -.7084012720222862 -765 808 1.332903105078759 -774 808 .6320774120989097 -796 808 .4888458269232751 -802 808 .7078632313972749 -816 808 1.067116687295705 -819 808 1.2571858790967356 -832 808 .9911444292076379 -839 808 -1.1485973391903235 -857 808 .4705211807772733 -861 808 -.19210290000555552 -881 808 -.4134159733506787 -887 808 .32532253764397434 -894 808 -3.9782816558970833 -916 808 .6455608300843145 -918 808 -.2185247697190691 -919 808 1.0118350613277103 -921 808 -2.6930077092055447 -929 808 -.816054873464536 -937 808 .9517940278217765 -946 808 -2.276238166674839 -947 808 .9871013436523841 -956 808 -.45319595300091 -982 808 .2232624811373419 -988 808 .5916586792671857 -3 809 .12085675359322058 -28 809 -.3873245590257826 -30 809 .07760971256587397 -36 809 -1.0700064338337314 -45 809 -.7142841946542241 -47 809 -.00684003170718514 -81 809 -.3429254847940979 -130 809 -.7402245556603545 -131 809 .45320046590157786 -133 809 .011857911392657933 -141 809 .9001626159634721 -146 809 -1.292437568304015 -150 809 .2153883041327881 -159 809 .9499051925198403 -186 809 .8915849824371105 -190 809 1.4757896936018555 -199 809 .6205295757212858 -205 809 1.7291925949945721 -250 809 -.44261861787558965 -280 809 1.2486866929389642 -300 809 .2603849022452506 -321 809 -.26757061651233105 -325 809 .4052516162471488 -329 809 -.6474076485396012 -330 809 .534146659727553 -332 809 -.791198884367768 -341 809 -.22649630737968116 -344 809 1.6130507184597314 -360 809 -.12332582440133784 -370 809 -.06708528765087697 -371 809 -.6159483612285445 -391 809 -.04536223493011124 -410 809 -1.250926144675623 -414 809 -.3024352525678634 -429 809 1.0016325003442892 -440 809 1.0914076600593245 -446 809 .5342554035961333 -452 809 .4898608642803057 -464 809 -1.4496974237227591 -477 809 -1.3896069845197607 -486 809 -.642929700513273 -503 809 -.6073326792505849 -513 809 -.12206474407436183 -520 809 1.709745084619127 -535 809 1.2574512071377233 -547 809 .7664583866206789 -548 809 -.007973690658564871 -559 809 .21587467458071274 -566 809 .22179342910919825 -590 809 -.3381582945916678 -593 809 -.4250841836171082 -617 809 -.513184459950667 -619 809 -.011286424196714953 -621 809 -.059947948376295496 -649 809 .17014175898147554 -686 809 -.31458053055506097 -695 809 .4141810118852318 -734 809 .34096319275176534 -742 809 -1.216103998679272 -756 809 -.47045188707108787 -759 809 -.6566561380713708 -782 809 -.1828865080776375 -785 809 -.679660628668054 -815 809 .05240632442955248 -826 809 .7752850582943511 -830 809 .8472058465925087 -831 809 -.8887666580508526 -836 809 -.36371643095497225 -837 809 1.492947548386957 -841 809 .04381685437027717 -845 809 -.24724729055834493 -854 809 .47469677245160224 -857 809 -.6067259714498281 -884 809 .21483455244307326 -895 809 .17186787639104548 -896 809 -1.1729821668005305 -916 809 -.1990855771326756 -924 809 1.2751095358021391 -929 809 -.6559975496329993 -937 809 -.24442696625736451 -946 809 .7299268159650845 -951 809 -.2276774190172589 -956 809 .325343410024592 -957 809 -1.0538215526872323 -961 809 -.84590972288384 -972 809 -.8577325859815084 -6 810 .9004415938920454 -7 810 -.06592244523563769 -11 810 -.014171440734535239 -12 810 .23792948624447266 -75 810 .9919037622103738 -77 810 -1.1550901969359548 -95 810 -.16610426028780728 -102 810 -.8968337869849278 -103 810 .9074099581399895 -114 810 .8687303795330941 -123 810 .17593103417100892 -130 810 -.6482919231342794 -141 810 .6343158940333062 -149 810 .3669819803049284 -160 810 .7048784254928999 -183 810 -.5769456328679577 -208 810 -.27691192708224394 -213 810 .3887629364033194 -217 810 -.2493386394042922 -224 810 .07172071004126247 -250 810 -.26873355219916667 -261 810 -.8725170198205644 -272 810 1.3370256411609978 -285 810 .07548060381349267 -314 810 -.6484125178420848 -327 810 -.1284510572840935 -332 810 -.7892054528608577 -341 810 .41255982253248313 -353 810 .4301030230763295 -355 810 .5826265105145243 -357 810 .20154535967600812 -365 810 .22772165863162086 -376 810 -.6626175779797625 -386 810 -.45143433627387863 -395 810 .44849148849069764 -398 810 -.14254639974077318 -402 810 .5261355609481148 -418 810 -.23355334253675059 -428 810 .21041438792272388 -438 810 .309851298673543 -452 810 -.13353292755202595 -468 810 -.31128160950296074 -469 810 -.01048004785633011 -476 810 -.3196258946463473 -483 810 -.39408990225545043 -487 810 -.4867599941259929 -488 810 .8323166684510915 -512 810 .2674696310685424 -526 810 .5830471118026344 -541 810 -.10402397705529669 -542 810 .4292192015330109 -546 810 -.1983181357206527 -550 810 -.08349091316834775 -561 810 -1.126581323600225 -567 810 -.615037999134104 -569 810 .47118093052504767 -579 810 -.16695356583286627 -609 810 .20720933208892997 -610 810 .0009630326050410198 -619 810 -.16940322852623854 -634 810 -.3680339842438363 -652 810 -.055013364634666925 -667 810 .03912815702467168 -672 810 -.3115975628912638 -677 810 .3873388550473754 -685 810 .25947037814692836 -687 810 -.28258398437611626 -689 810 -.24482872582363477 -694 810 .32844460640854706 -709 810 1.0324547065470018 -714 810 .1930255795600943 -726 810 .31149567894330055 -730 810 -.3713761699820973 -734 810 .46595607861371025 -749 810 -.6072494717326649 -751 810 .6022230427683104 -761 810 .23969772142140244 -777 810 .5163720291173923 -778 810 -.41447054075738227 -797 810 .6801356631221822 -800 810 -.41393602606602803 -805 810 .44846825660284395 -826 810 -.12283429452395178 -828 810 .2229834544383521 -838 810 .09519548713337722 -841 810 -.7014824766892308 -849 810 -.8782241568726767 -859 810 .2221916294357804 -865 810 -.48520571664794293 -866 810 .4616463722046328 -874 810 .39941081084733876 -879 810 -.9012135827703993 -882 810 .0344711212640763 -897 810 -1.3396657714301559 -905 810 .06171269664385807 -908 810 .5854846710246981 -927 810 -.7329207573287951 -929 810 .15751532730608103 -943 810 .5377888264850355 -955 810 .0504376618175144 -989 810 .47092652947040603 -992 810 .6621949947161466 -993 810 .34044149213460806 -998 810 -.21268458757755732 -3 811 .5327822008969346 -17 811 .49552902545279354 -28 811 .17190796548027515 -31 811 1.676575152585613 -33 811 -1.530180471665065 -50 811 -1.4067981000402148 -54 811 -.1159224416597903 -57 811 -1.024825047090744 -59 811 1.8382348615834958 -72 811 .27972827853951243 -76 811 .8283501519266309 -82 811 -.2722526330807358 -84 811 -.981321524776601 -86 811 1.0791557852913851 -90 811 .2752146462805262 -98 811 .5665288703132317 -102 811 1.8798493656744455 -103 811 -.21153649520645987 -110 811 -1.6216237780140221 -113 811 -.004405457066947928 -120 811 -.025036368305114354 -122 811 .19275533582221502 -126 811 -.14695763634235814 -129 811 -1.6268510768116193 -153 811 -.5935311723051102 -175 811 -.28242555631276234 -185 811 -.9150810458196729 -189 811 -1.0363568149924332 -196 811 -.07363168177596544 -199 811 1.2932931916440504 -201 811 1.0445129527057737 -212 811 .08935751340875764 -220 811 -1.4693292151886115 -223 811 .9527391414775362 -227 811 -1.7862766183399117 -230 811 -.5856035870957471 -239 811 1.6367318461397415 -243 811 -.1598560079122294 -257 811 -1.4439467082357125 -267 811 .790193937183469 -292 811 -.4220068212428376 -299 811 -.034715431422652016 -300 811 -.9055926721905699 -324 811 -1.4041294509174178 -337 811 -1.2344261821077467 -338 811 .19585660376645955 -340 811 .9440251569312014 -392 811 .634617829596414 -393 811 -.19994104065644733 -395 811 -.5436901948564727 -401 811 -1.353111619205953 -404 811 -1.1523578237106467 -407 811 .6277562552162087 -429 811 -1.347038378599922 -458 811 -.09075847016846766 -463 811 .648928035520647 -469 811 .3048604620935055 -518 811 -.5698377139079147 -520 811 .6915560680806223 -526 811 -.39837098923132397 -531 811 .7686344056471728 -533 811 .2740815106896163 -540 811 -.7228597832464526 -573 811 -.9195898248279222 -584 811 -.7955502135925661 -587 811 -1.1624629425302702 -588 811 .2492082276517547 -632 811 .9434367358720508 -655 811 -.007506364545290252 -682 811 -.3508570379215388 -701 811 -.4010482700169171 -705 811 -.4204727037230014 -706 811 .20298329383620725 -707 811 -.8271396952884464 -713 811 -1.450410754758909 -751 811 -.8638033122186558 -753 811 .23542686694044593 -760 811 .3628843795544775 -788 811 .14399836936845126 -795 811 .7182872029487242 -810 811 .3066082157087592 -823 811 -1.2562569480765415 -826 811 -.8276860833958711 -828 811 1.4960016746182252 -847 811 -1.4124783729141375 -851 811 1.4129629694953716 -853 811 -.3721639478905163 -859 811 .04849975603657539 -870 811 -.5461141813072052 -880 811 .274289971473353 -881 811 .09972748241256826 -891 811 -.8392258236103103 -896 811 .9838330034703509 -910 811 .8838123407273955 -916 811 -.5174207990190378 -917 811 .7471612179933573 -919 811 -.6646139927977979 -933 811 -1.5198926215319748 -934 811 -.8280625549245076 -939 811 .02279202967167844 -958 811 -.5765446326938702 -964 811 .604004632144217 -974 811 -.42100591405526205 -982 811 -.4300563250559658 -987 811 -.2622722248885534 -7 812 -.18798888531863184 -20 812 .7910509801868287 -26 812 -.35456002746868287 -28 812 1.2385069955945862 -36 812 .8169048215486268 -60 812 -.45426379030822517 -66 812 1.1212372576746605 -70 812 -.48292854119048545 -75 812 .381075051688544 -89 812 .33659852565344817 -120 812 .6047898863730798 -123 812 -.5066678514260048 -143 812 -1.0623282048676816 -154 812 -1.52676684665685 -160 812 .15924302990490638 -171 812 .19231036398651613 -173 812 .34764186521310175 -179 812 .6275178615299167 -186 812 -1.0343118047037045 -187 812 1.3756092559543447 -188 812 .25364850513025616 -198 812 -2.489968599134525 -201 812 2.7224970334561616 -203 812 .3716808554462887 -205 812 -.7477973106302374 -243 812 -.4542218574521963 -254 812 2.7162137552403403 -258 812 -.8435466224501064 -267 812 -1.9837894599700194 -280 812 .17240966261118046 -284 812 1.827358264508924 -321 812 .10686441868159596 -333 812 1.625425509199831 -334 812 2.539006803349018 -341 812 -.37849056564186173 -347 812 .4228431185987103 -359 812 .5189766187924937 -362 812 .6079202823055646 -367 812 1.5717952065336278 -373 812 -.565461753760634 -378 812 -.803240762427393 -380 812 1.4725745046357115 -381 812 .09744531183645158 -391 812 -1.187223301484626 -394 812 -1.3189464509039357 -430 812 -.7951443563978332 -433 812 1.1624605866000846 -434 812 -.0271466417557239 -435 812 .15630797051383985 -439 812 1.9784436841597433 -451 812 3.1436551161165447 -453 812 1.4936707144667891 -463 812 -.04292767063170934 -466 812 -1.3643980168607446 -481 812 .5016346492383685 -496 812 .740192714267082 -500 812 -.24126919971790456 -517 812 -.7356935280280161 -526 812 -1.2506379906159626 -531 812 .7650514630967519 -532 812 .0027057213833028594 -535 812 .049795844138302736 -550 812 -.017375475369749017 -568 812 .18136405046199428 -575 812 .46690163830454023 -585 812 .5981965407702852 -590 812 -.8387697157631709 -625 812 -1.0531449949305407 -629 812 1.076861183864667 -638 812 -1.9206983522601195 -643 812 -.1620929341639244 -646 812 -.4912937349986075 -676 812 -.5664730739023284 -706 812 .544642266756123 -709 812 -.8070896701151246 -713 812 .9934735169126567 -719 812 .17497556721729968 -734 812 -.9937445893523944 -736 812 -.9912690272471776 -758 812 -.15872380167423422 -768 812 -.5218648318841875 -772 812 1.3531083473058423 -801 812 -.7150713735439016 -806 812 .4132450659874995 -816 812 2.3983296908725964 -838 812 1.148215084705853 -842 812 .33633056610021744 -847 812 .8235833851778102 -877 812 -3.0958913153808725 -895 812 -1.7785255030046914 -902 812 -.7594176287547291 -920 812 -.7527600818086042 -951 812 -.7744843199168496 -965 812 1.865258048011358 -966 812 -1.015863924432001 -977 812 1.50743578987677 -985 812 .007179042080115328 -993 812 -.07940073364970071 -9 813 -1.4314276364633076 -18 813 .6949287223940215 -23 813 -.6358107475056543 -30 813 -.07401471916610275 -43 813 .13048430659635024 -53 813 .05335805509776001 -58 813 -1.2543808284016442 -61 813 .969738890836262 -81 813 .07950483355311094 -97 813 .986252753588515 -117 813 1.508730838604169 -118 813 .9573281032124346 -128 813 .353679194405731 -145 813 -.8796175457452775 -148 813 -.1616874614043125 -157 813 -.5316442399956733 -169 813 -.2964495023536221 -171 813 -2.648212421506515 -189 813 -.06867722838935285 -203 813 1.712803545833082 -209 813 .014884071427715681 -217 813 .06340449692133557 -227 813 -2.4042467601974167 -234 813 -.6112935758088545 -235 813 -.6971514444338024 -239 813 -1.6981255937385629 -243 813 .025115099049126156 -249 813 1.376606887690609 -254 813 -.4484996469425877 -255 813 -.6332374240439336 -256 813 .38147839368334857 -279 813 .3417596257904651 -291 813 .2887263982661961 -296 813 -1.168799812950166 -300 813 .46865420864088453 -303 813 1.5665455373048693 -310 813 .4202925140874343 -318 813 1.3847258289781241 -333 813 -1.266405147485524 -341 813 .23315631957130203 -353 813 .6821338046486495 -357 813 .7429096196806013 -368 813 -.45642436977157624 -372 813 -1.0071182812147454 -384 813 .26340245251094174 -385 813 -.19196594254726737 -386 813 -.8366534333378595 -395 813 -.9320894754089905 -404 813 1.373818907622329 -428 813 2.1134988948661966 -439 813 .416683052264708 -450 813 -.3436569069834716 -453 813 -.4070546551219374 -458 813 .1633109991697468 -466 813 -.5331096947324558 -474 813 -.3729493846149252 -478 813 .9444443640973453 -491 813 .6436691704909648 -508 813 -.41324393539176046 -513 813 .7922653777784027 -516 813 .3078368072210321 -518 813 .9000085815557054 -526 813 -.05008521087209161 -528 813 -.8307048628232336 -552 813 .48199790700971534 -565 813 -.2333410239886749 -584 813 .17881208282004601 -587 813 -.08379531178055467 -590 813 -.6625844211086914 -600 813 1.2395138464383657 -608 813 -.3840044119221564 -613 813 -1.0536394289168682 -630 813 -.42991114328029023 -631 813 -1.2336726953355999 -639 813 .23420582762572761 -644 813 -.6655795787198635 -662 813 -.5094767421647032 -667 813 .23428667380480686 -676 813 -.20438596171147538 -700 813 .08474034018726201 -711 813 .04176484690117287 -713 813 .006308538951917492 -716 813 -.8397958642237849 -718 813 .4088699406254179 -735 813 -.45842527633562014 -736 813 -.34920664694382336 -750 813 .5520960896159853 -774 813 .982895513841332 -780 813 -1.0754829784924957 -784 813 -1.0715698387804247 -792 813 -.19031398004013705 -800 813 .7439153171088074 -803 813 -1.2038722907899262 -815 813 -.09431637614456019 -821 813 -.11517819795046239 -826 813 .7772419397745967 -828 813 -.29780988028748 -857 813 .07319326897718835 -871 813 -.2481244134073101 -888 813 -1.2005654134615242 -898 813 .31094269597490354 -900 813 -.18107864068277107 -910 813 .20448760179480052 -919 813 .6198898924950172 -921 813 .5580479908897592 -939 813 .1651722693844033 -943 813 1.9054246491184035 -955 813 .5646218942104952 -960 813 -.5622623154217393 -964 813 .22113716458663596 -970 813 -.6249188343005803 -977 813 1.1027153190432932 -985 813 .15162744347975782 -986 813 -.544918744003386 -17 814 .45563201383324387 -20 814 1.4543240381254101 -28 814 .010781818226801743 -35 814 .341316240841714 -43 814 -1.7400563156474431 -45 814 -.5428563362653979 -48 814 -.03790967179693423 -55 814 -.12325171313195711 -60 814 .10013593358226085 -65 814 .8410429824035801 -78 814 .007415423079284285 -93 814 -.937768060364264 -113 814 .3615009384796722 -128 814 1.393435317679704 -129 814 1.1593877930989898 -142 814 .7893065643030495 -145 814 -1.7594230617689548 -149 814 2.1764212244708996 -175 814 .2894664970412847 -186 814 -.8678448883756049 -193 814 -1.6598622814198567 -197 814 -.9811611038690443 -199 814 -1.2984074197179947 -214 814 .08326916360001752 -237 814 -1.2919958361077455 -242 814 1.71110720283632 -253 814 -.6211167277334402 -258 814 -1.195066063894277 -260 814 -1.6890383199131032 -284 814 2.3351396890562044 -285 814 .9207933166854747 -311 814 -1.9581617758130847 -320 814 -.1518276992945789 -347 814 -.3122032686240534 -354 814 1.4795009011815894 -358 814 .21127514810859732 -377 814 1.7692045701386532 -389 814 -.11012137112188089 -402 814 -.7084274458176215 -405 814 .31689046296954265 -421 814 .8038034478817805 -446 814 1.4437819666641993 -455 814 .7480469334161517 -457 814 .36935023534558337 -466 814 -.811003733339728 -476 814 -.6961115592000016 -485 814 -.7641669098974165 -489 814 .46486450625264497 -493 814 -.8780549547571425 -494 814 -.991336425021855 -500 814 -2.2247916134993906 -513 814 1.4833399452955942 -522 814 -.5275064180203106 -528 814 -.8009261236360313 -539 814 -1.43682411398949 -542 814 1.0715698434399863 -548 814 -.23333270965047298 -570 814 1.3215086304642596 -571 814 -.2007987014194274 -583 814 -.14352400402540355 -587 814 1.3485399596620362 -589 814 .34886714391502566 -590 814 -.5740698003522805 -600 814 -.48369451006847697 -604 814 -.6721604878193872 -607 814 1.1260134911084552 -636 814 1.6502252620326272 -649 814 .23716715075146888 -671 814 -.5891719049617452 -690 814 -.7582000491113847 -707 814 .8762960265074886 -725 814 .4372159975558974 -742 814 .05668161731754577 -752 814 -1.774265603301102 -760 814 -1.2349144276055637 -767 814 -2.2102942785813067 -778 814 -.1986284804989339 -789 814 -.7376389544698783 -790 814 .21646122081461247 -798 814 .7184556210758782 -800 814 .0918893790436846 -819 814 2.5376032512469697 -833 814 .8152550111621818 -837 814 .0022474659056774884 -844 814 1.278531464208628 -858 814 .48728207811657587 -869 814 -1.5337524741310817 -876 814 -.5950363683480373 -885 814 -.48673946327011447 -887 814 1.398137642870069 -895 814 .5280770235756547 -901 814 .2633588603536125 -903 814 -1.3430330654255092 -906 814 .679938352390601 -914 814 .6565458037660352 -922 814 -.4848635827197176 -949 814 1.2143650044555632 -959 814 -.1171013274091924 -964 814 -.29863944550759736 -968 814 -1.385551712844718 -987 814 -.22041218853372144 -993 814 .6871060100910109 -995 814 1.3760251299065303 -11 815 -.22929854100101593 -14 815 .05233064310621664 -17 815 .8343068325545846 -21 815 .24558036578621703 -26 815 .13053132987805244 -30 815 -.8328279360423491 -38 815 -.35031042697126424 -64 815 -1.150494902959284 -73 815 .9625582592792313 -76 815 -.3610125176708838 -77 815 -.8212884073680287 -106 815 -.26271226453610946 -107 815 -.25290702095623097 -131 815 -.5507976843452413 -158 815 -.4247780664369184 -178 815 -1.4269330885142306 -181 815 -.4691980208068579 -185 815 .3271944933801722 -187 815 1.185552564998185 -192 815 .5017241967477329 -199 815 -.965753439815829 -224 815 -1.0460394951216476 -240 815 -.027801944376451573 -250 815 1.1348565635826637 -261 815 -.4014276002524269 -266 815 1.6649367465608953 -321 815 -.36089663620977946 -322 815 1.440442057132353 -336 815 1.1600186908755872 -340 815 -.4141741561174823 -343 815 .5605947562432316 -349 815 -.1022913749584372 -357 815 -.24435598270383493 -365 815 .3610763935804893 -377 815 .7837730420176577 -396 815 .9887938531115406 -402 815 .8219271143540172 -410 815 .587155927312177 -423 815 -.4396997166989267 -433 815 .44991538926448094 -449 815 -.9641682681265308 -463 815 .18039158914557707 -473 815 1.4216654474373973 -485 815 -1.058994128485271 -493 815 -.9998377985409073 -498 815 .09396760075531571 -506 815 .2843331412799338 -514 815 -1.2911981325569917 -520 815 .2775965362692 -541 815 -.8888370518790935 -547 815 .39984448926633315 -551 815 -1.4895255542521322 -560 815 .09196775991650456 -576 815 .041657829236825594 -596 815 -.5176187616170674 -597 815 -.19346018536504092 -598 815 -.07975581021359049 -606 815 .33629506348423854 -613 815 .7592442249891104 -616 815 -.821391282411782 -619 815 .19110114143318563 -623 815 -1.0426895558328149 -636 815 .9794248503860556 -641 815 -.5570003751881858 -643 815 -.5701707645109525 -655 815 -.37562423800067435 -670 815 -1.3079800400768002 -676 815 -.10406495258273016 -688 815 -1.681356017331648 -718 815 .8274395323492231 -733 815 -.17161659995046566 -783 815 -.04286641522325513 -784 815 -.22441592328979657 -793 815 1.6417340694819917 -795 815 -1.2038316384671213 -807 815 .240232659759234 -811 815 -.4093953813579608 -835 815 .5527581378056852 -844 815 -.7315503595947427 -856 815 -.8822033585810847 -864 815 1.0917360269265035 -865 815 -.3352969322892285 -877 815 -1.0150122568887394 -882 815 1.1733468676511196 -889 815 -.38450676754314184 -890 815 -.3113271454798675 -896 815 .8782698465435321 -914 815 .023061521710928873 -923 815 .16836605201595786 -927 815 .9365106526186034 -930 815 -1.0512411520268896 -943 815 -.8785158198096136 -952 815 1.2207881904813644 -964 815 -.5779561161542266 -999 815 -.9417550372174702 -16 816 -.16829173942072484 -18 816 -1.2098558011687293 -31 816 -.3143164965037981 -49 816 -.8841917339479994 -50 816 .3547088223978635 -66 816 -.8546730872213576 -95 816 -1.1676209119442607 -107 816 -.517579771589439 -116 816 .05772028133405897 -129 816 -.8130334699583249 -155 816 -.9913640611704579 -156 816 .3522034864681906 -181 816 -.49405707297855783 -185 816 .15207192714937467 -186 816 .10731375783858231 -191 816 .9259760372766352 -209 816 .18255818810974062 -214 816 .5852901984956499 -225 816 -1.4647828190108179 -229 816 -.5736512251129714 -231 816 -.2777506821748041 -232 816 .3393042861780257 -236 816 .14372122770297377 -238 816 .7028471777341714 -253 816 .24538418279964472 -256 816 -.8226261802954457 -266 816 1.2216410595340637 -272 816 1.4345020895513374 -280 816 .07744855019102459 -321 816 -.08844934787520965 -324 816 -.49276933962498953 -329 816 .8852925591909323 -350 816 .5989965298459842 -351 816 1.531155801548281 -360 816 -.42518072056297174 -363 816 -.27213397954008267 -366 816 -1.2640098288953097 -368 816 -1.373156317158139 -369 816 -.38120246073074815 -372 816 .5241916953372413 -373 816 -1.2754733983695399 -375 816 .2962392533384932 -392 816 -.9757217435693902 -394 816 -1.1598163041401657 -396 816 .2654760857475291 -398 816 .5450760591077353 -401 816 1.2938693782997825 -420 816 -.608389319532975 -425 816 .7337734490073993 -446 816 -.4171152031316383 -452 816 .534076948882412 -468 816 -.02333927046043785 -471 816 -.641887785960878 -497 816 .7517043683537733 -501 816 .0558498290604926 -508 816 .4454799924756183 -519 816 -1.4708501731604695 -534 816 -.8505585740400962 -538 816 -.44162875708634836 -560 816 .11700401029343446 -565 816 -.36833424281005006 -588 816 -.19235797453088577 -591 816 -.6289493371127055 -607 816 .5770795060432391 -614 816 -.7288922962274383 -620 816 -1.1620613066996217 -639 816 -.6607107270445411 -645 816 -.06570176856091159 -660 816 1.19045645262065 -664 816 .8081495132264053 -670 816 -.9559800795831638 -687 816 -.6188400749615548 -690 816 -.9516882947748153 -700 816 -1.1352822147609287 -725 816 .7204880757603287 -729 816 .2253342352836933 -745 816 .1451234170494227 -766 816 -.16603117653410973 -769 816 .13179180898268886 -770 816 -1.2425649791528741 -771 816 -.22696015970948658 -794 816 -.2111489338129322 -797 816 .9253151302054784 -828 816 .18831605869130383 -838 816 -1.2772000213355175 -858 816 -1.16340981217415 -861 816 -1.077472648299182 -865 816 -.7994439166208025 -874 816 1.4134443185509313 -877 816 .08979413383150445 -881 816 .016284341317577417 -890 816 -.9120453666475112 -902 816 1.0741063230343735 -910 816 .3029641478288607 -930 816 -1.4079869064593626 -952 816 1.2182881133890255 -972 816 -.5170818170812526 -973 816 .529187675337568 -974 816 .5312237059558553 -978 816 .18977656760261458 -979 816 -.16377471796792592 -982 816 .90494401997344 -985 816 -.05949900524190206 -991 816 -.8307257841853233 -3 817 .03847136736185321 -16 817 -.1483062131264295 -38 817 -.22958750633681246 -44 817 .34872255691902065 -48 817 -.3217838434138014 -54 817 -.8625453477737194 -67 817 -.538505054056126 -74 817 -.4372528938702943 -84 817 .5960379088463779 -93 817 -.5362031508274294 -94 817 -.32757339539954294 -95 817 -.19778682580849782 -123 817 .7169735676522458 -128 817 -.27603696624791035 -132 817 .7160499398396922 -135 817 .27198815715692365 -138 817 -.7834435998336581 -156 817 .2027617431917074 -164 817 .15211686030016933 -169 817 .07671783994189982 -188 817 -.24759263685556435 -193 817 -.2122214524650621 -211 817 -.7366276006488579 -217 817 -.9918841624713116 -220 817 .2592009512914902 -232 817 .4601096652322959 -244 817 .5697292285863882 -272 817 .12018243350055548 -280 817 .3167348326517684 -286 817 -.20310300366945486 -292 817 -.3827559924323478 -295 817 .30494991921681613 -296 817 .06113916497971714 -347 817 .05603657000086107 -364 817 .4024851697232248 -374 817 .5039660088929938 -376 817 .5377199896902232 -404 817 -.21407722418615233 -405 817 -.5453421104489243 -411 817 .3626871285455332 -415 817 -.02414897088743581 -423 817 -.3813112247930109 -431 817 -.45509470865642954 -434 817 -.24948753067186175 -448 817 .2203896318895361 -455 817 -.8104207554844107 -459 817 -.027571135769981478 -465 817 -.1462102287863184 -484 817 -.03054293846852555 -486 817 .7447010466047179 -492 817 -1.1718606930937048 -522 817 -.3246240155255337 -528 817 .32942744076109337 -535 817 .06595411941613 -538 817 -.18169538221073908 -550 817 .2583669105609305 -574 817 -.39873156017047257 -576 817 .5841562920928541 -580 817 .1619290859133165 -589 817 .1392896244705597 -596 817 -.16853078679035258 -633 817 .2564246442985675 -637 817 -.215260470867957 -652 817 -.6135394601348786 -659 817 .2887301130401972 -669 817 -.5368530342081352 -681 817 .4915851854560388 -704 817 .02461945638259158 -716 817 .19847659536236323 -721 817 .2738102618196244 -729 817 .07169880765694686 -751 817 -.17376441783700042 -754 817 .0988040527947547 -755 817 -.8638449727616956 -783 817 .40561158186425184 -795 817 -.28674775668052654 -803 817 .5683201393108996 -810 817 .24272969550663928 -811 817 -.7204081234739595 -812 817 -.4001277118502149 -815 817 -.36862236882424104 -816 817 -.056647762577779176 -823 817 -.9673389429151246 -862 817 -.6850799196319158 -870 817 -.33047074675641414 -873 817 .884362119001284 -882 817 .7832778511484437 -885 817 -.7133778760927009 -896 817 .10352038498284731 -906 817 1.1575020255505883 -911 817 .5907546263302532 -914 817 .36773934914773443 -918 817 -.6030510216657725 -920 817 -.8771593879023416 -921 817 -.15738350228180356 -928 817 .2704519351238024 -942 817 .2315586536634684 -944 817 .17884028472360247 -956 817 -.057140822830957415 -959 817 .3693696023451174 -975 817 .32271939717835985 -980 817 .29160844585759427 -989 817 .2104775184212303 -996 817 .3410771815419691 -8 818 -.21509852767319534 -17 818 1.1636085685203212 -22 818 1.409102178005424 -24 818 .5578642929967821 -25 818 -.20352927888367006 -40 818 .44500703489092014 -66 818 -.40745333259319094 -77 818 .2655207310823199 -89 818 .4181565024139384 -95 818 -1.355401617427053 -108 818 -.35693886676577524 -116 818 1.0100987652854798 -117 818 .7540570323697078 -123 818 -.40038443892531944 -131 818 .03892770793260608 -132 818 -.03897585115515796 -134 818 -.4445990798999838 -136 818 1.0919060209419307 -141 818 .15182110716527208 -155 818 -.9775206114928058 -157 818 .2026714000323581 -166 818 -1.3188712757959067 -173 818 .298308021757085 -181 818 .021130558820273038 -183 818 1.1795166779905466 -193 818 -.5300876758081602 -213 818 .46460614233053726 -215 818 1.041236409939033 -218 818 -.39876325173860483 -227 818 -.9052717280167419 -238 818 -.5052677181483758 -240 818 1.6261114592732104 -242 818 .33900057521805205 -251 818 .17916718040318502 -260 818 -.12747245084096687 -261 818 .044139437570216565 -264 818 -1.3183738127114413 -270 818 -1.3925209276965382 -286 818 -.4025516939061428 -299 818 -.0011903028537564656 -300 818 .296932447371899 -316 818 -.7431792917754685 -326 818 -.3667414175444893 -338 818 .26002061248222696 -356 818 .23949448995411837 -404 818 1.603906902519904 -408 818 .08720017234739014 -420 818 .7142817723935837 -427 818 .41313026416058357 -428 818 .7263847986366521 -435 818 1.714189543831446 -436 818 .17915621875472026 -443 818 -.15599093823865834 -448 818 -.40608222718114173 -453 818 -.9269382721660635 -475 818 .21320567845972205 -485 818 -.20994046147582954 -504 818 -.24650259600807822 -518 818 -.6224853525053637 -524 818 -.05568731357847764 -532 818 .5139863166114244 -534 818 -.7844651769933324 -569 818 -1.1302906724037796 -582 818 -.1229330833993245 -591 818 .628762839663894 -615 818 -1.1347042388578554 -623 818 .0775221462393948 -644 818 .2421387420865574 -646 818 -.9334530602576241 -670 818 -.8265380234060523 -673 818 .7144002852929157 -716 818 -.6533824516777748 -724 818 .2925044141537396 -730 818 .45124513023659296 -736 818 -.41981396044600866 -743 818 1.4157401511419276 -775 818 -.10699108489285947 -780 818 -.6048714012370833 -786 818 .5483677742822322 -817 818 -.36609568519560903 -845 818 -.6259244293636403 -851 818 -.3516541892687246 -856 818 .512413875943671 -860 818 .4613356112314706 -884 818 -.5085344562013018 -889 818 -.5736091227947402 -891 818 -.16935643412106302 -896 818 -.09520536127014469 -918 818 -.38290416675197275 -927 818 .11405433693347145 -934 818 -.048272468333598606 -947 818 .8326813638421612 -970 818 -.6305954537890596 -975 818 -.3262507993552911 -978 818 .5135976089860835 -990 818 -.3906798613900279 -7 819 -.9660231053453767 -18 819 1.1601612247194084 -23 819 -.8698545445885179 -24 819 -1.3687403686027901 -30 819 .639174181838795 -53 819 -.09870856334528787 -56 819 -.5544443719287467 -57 819 1.6312739230651954 -78 819 1.445849990615435 -82 819 1.9658219450461212 -90 819 .4862945019515526 -113 819 .4445435969142516 -116 819 -.41603258384998915 -185 819 1.0011629965581759 -192 819 .19130689171213117 -199 819 .100273192086411 -210 819 2.786734336478741 -215 819 -.06485733205325528 -219 819 -.4685775723090172 -229 819 2.245582635019984 -240 819 .9594586090437561 -244 819 -.9151425274982221 -273 819 -1.1631895923515572 -291 819 -.6542276859610694 -315 819 1.1542826190510413 -328 819 1.217121662574398 -337 819 1.5466719732980267 -338 819 -.2135890554504703 -342 819 1.372107943694406 -373 819 2.3711258926846757 -381 819 -1.038485979568835 -388 819 -2.7691650808278756 -397 819 -.1001336177410217 -403 819 .32712647396415223 -424 819 -1.0119606348448626 -439 819 -.405058609020849 -444 819 .4124173061870685 -478 819 -1.0958007372621525 -500 819 -.9624381304423546 -506 819 1.8555232673270632 -514 819 1.1642062601413272 -523 819 -1.8917581628428464 -536 819 1.0346267891574354 -539 819 -.4292382299215098 -542 819 -.28931199722437617 -544 819 -1.1590981254424044 -550 819 .6499702266392541 -553 819 1.6987309901742413 -555 819 .4230141360551327 -559 819 .4609878905082601 -568 819 2.442956364024301 -577 819 -1.092627138210231 -585 819 -2.25345698200558 -589 819 1.0863927846103985 -592 819 -2.4830241563574327 -597 819 -.7766262442627894 -608 819 .9174422005042642 -624 819 -1.7324972862562504 -635 819 .6085443856000408 -646 819 2.036950130231736 -662 819 .026880415733218574 -685 819 -.9937486217355626 -689 819 -1.2471553099997452 -692 819 -1.246161869646946 -701 819 -.3424292402696946 -711 819 -1.9942436911810546 -712 819 1.3580423541296929 -713 819 3.0574321976309737 -715 819 -1.4306089450215211 -731 819 .467253804133628 -740 819 -1.711061435552026 -743 819 -.8323454495873914 -744 819 .7126473101642394 -755 819 2.1971759446964154 -790 819 -.9019457597629456 -800 819 -1.6463113836905334 -802 819 .8532924649053364 -804 819 -.4835802985025285 -807 819 .06995096549554261 -822 819 -1.095850551647752 -830 819 .2754223359073982 -835 819 -1.7734987768550767 -838 819 2.7020896693292116 -840 819 .32034213939444034 -841 819 -1.3873745940399882 -845 819 -.43607677872131057 -851 819 -1.6600125371773455 -852 819 .10582137897069338 -858 819 1.8435313661993393 -859 819 -.024550077847456137 -861 819 -1.2133572383563753 -891 819 .564499598840936 -900 819 1.5354809483718417 -904 819 .7042701160565334 -911 819 -1.352361988534444 -913 819 1.451380299067246 -916 819 .375846901553882 -931 819 -.26273631149036314 -942 819 -.7114528042377688 -962 819 3.290351527318408 -972 819 1.6482857350608306 -991 819 .30759753946775525 -994 819 -1.8371752128462473 -9 820 -.3465971342531053 -14 820 2.4393271534863183 -24 820 -.5007295772918217 -28 820 1.4898337563772368 -37 820 .1901396048660477 -54 820 -1.298018860194846 -66 820 -.3327316793030022 -67 820 .10238518071401831 -75 820 1.5161458463473274 -81 820 .039683856791220024 -97 820 -.44772879937836724 -112 820 .31327527501697955 -140 820 -.7861118452537532 -144 820 -.18581194698960152 -151 820 -1.124103096334901 -163 820 .6039920827421132 -168 820 3.0475527075157127 -184 820 .35793206088001783 -185 820 -.19543739321601233 -189 820 .6811697843194902 -200 820 .0838237945096933 -221 820 -.4583346608198111 -232 820 1.5251644253599819 -243 820 -.5110804204313382 -246 820 .40079971997050323 -259 820 1.497830225248228 -260 820 -.10198190423030797 -263 820 -1.2655768004892036 -266 820 -.7320080096901842 -280 820 1.1674925748790326 -292 820 -1.4404321856264866 -303 820 -.850604869760667 -307 820 1.5780451084897118 -323 820 .4581783930779241 -324 820 1.8508815707418858 -353 820 -.7445152963578704 -354 820 -.0529071869070933 -370 820 -.04561289208658035 -386 820 .9947386926351431 -392 820 -.5476062595376187 -399 820 -1.1121339801370704 -405 820 -.153623286895625 -414 820 1.528071531762075 -415 820 1.399659557926008 -428 820 1.3513120328907076 -443 820 -1.7738909463716173 -467 820 -.3390680700790152 -470 820 -.08563475090216913 -473 820 -.3928087305067031 -476 820 -1.4602334957241958 -486 820 -2.105655764531722 -500 820 .5151739328752352 -513 820 .2550628621501679 -518 820 1.3893773132622311 -551 820 2.5342001307120494 -578 820 -.9817891408184164 -588 820 -.2101432218612917 -598 820 .8386226809437074 -608 820 1.6471167453346192 -611 820 -1.2813963721777835 -616 820 .7645505610889508 -619 820 -.4742505618867256 -624 820 .13938547271161655 -626 820 -1.0269550361790198 -639 820 .5087011283977608 -640 820 -.4688055280080336 -655 820 1.2461305834276875 -676 820 -1.6472352298881676 -686 820 -1.0453952243626674 -704 820 -.11388506202989937 -722 820 -.58326858294663 -747 820 -.9100854737102734 -749 820 -1.2218166847242555 -772 820 -.9920907344686668 -792 820 -.6123398722409827 -797 820 -.08046443641483501 -841 820 .23732268586339278 -852 820 -.2552740143512228 -870 820 1.1506767012663 -884 820 -.3487201332125852 -889 820 .37962153216802874 -893 820 .9459879017845558 -907 820 -1.0220880471608622 -923 820 .2782688614431706 -924 820 -.1372102859955298 -977 820 1.715291027876391 -985 820 .43232677045342516 -995 820 -.5890005454406608 -997 820 -1.3677658714069116 -5 821 -.05329761012283408 -10 821 .806734020803228 -40 821 1.0585111369420936 -41 821 -2.8350603643430095 -87 821 .5361785874129219 -93 821 .45107609537954607 -116 821 -.48008315878855584 -153 821 -.3179758107877903 -189 821 -.48595051433288006 -194 821 -.3735254964901124 -196 821 .01936279222146632 -222 821 -.5550900739215816 -224 821 .5974114016297888 -238 821 .27737888194695837 -240 821 -1.7867914899405533 -250 821 .2836219882073447 -283 821 .7937024555538494 -289 821 1.5268325604850181 -290 821 -.008203884592150143 -291 821 .04752321961092611 -305 821 -.296825726771319 -313 821 -.33415500826772077 -333 821 .33666964668125565 -338 821 .9761528221770254 -352 821 -.6950996643834912 -359 821 2.309689702854445 -361 821 .024512547908276672 -371 821 -.8186681337896189 -380 821 -1.1717254747906405 -392 821 -.07096210351328289 -399 821 1.2893146428105897 -401 821 -.8302840461195523 -403 821 -1.6627371208821788 -420 821 .5669939510992231 -422 821 -.36400088614837955 -452 821 -.013415847795902477 -453 821 .12616544075205494 -463 821 1.1889253293065978 -470 821 1.2600335258673765 -475 821 -.37882790732289956 -483 821 -.19210567892943878 -492 821 1.4719590395456241 -508 821 -.1993937265784925 -523 821 .4549883520370514 -525 821 1.4015875759016168 -529 821 .45669584486421877 -553 821 -.957430048320895 -586 821 .9361020162459142 -587 821 -.866966335327086 -597 821 -.3658300314427408 -610 821 -1.5611043047739295 -620 821 .831095375295902 -626 821 -.7912204837950989 -642 821 1.4770260038019742 -648 821 1.1506365304324166 -650 821 .7036901799613076 -665 821 1.599096471713959 -673 821 -.0676585678932313 -686 821 1.0827750567323793 -697 821 .2847454074247543 -700 821 .5991737494911924 -707 821 1.259132611881039 -715 821 -.022442068078941335 -729 821 -.1044598345748031 -748 821 .15401619639134143 -750 821 -1.100876571833708 -772 821 -.11322684667664548 -776 821 -.6092358740348306 -782 821 .5393365098388628 -783 821 .185756894208518 -787 821 -.40125078927374935 -790 821 -.3489093820737184 -800 821 .8626512744815759 -810 821 1.3513537550546917 -815 821 -.5765981377641878 -819 821 .6066068009437237 -840 821 .38097166269650207 -843 821 .8176307621981987 -855 821 .463552576058353 -859 821 -.14381221407962475 -861 821 -.4121226786855268 -875 821 .268005778519861 -882 821 -1.9226424031328677 -884 821 -.48197227455764313 -889 821 -.7857396801897338 -894 821 1.8163775055438105 -900 821 .4891832646447815 -918 821 1.1696116438466118 -930 821 .6313589064227152 -950 821 -1.0060455204032335 -951 821 .6054441621247137 -970 821 1.1871340888994666 -986 821 -2.1262383487202787 -991 821 .5294591926903234 -992 821 .7718783395532224 -999 821 -.01864759564104096 -4 822 -.48534350977155005 -5 822 -.7366444842081054 -6 822 1.2084790146463822 -10 822 1.5777461177237542 -14 822 .05451230494313694 -24 822 -.521452209564008 -41 822 2.5402592346128996 -50 822 .30982945283666774 -52 822 .7439287410927972 -58 822 -.16008967923249254 -75 822 .447624156401271 -84 822 .6540747102277726 -87 822 -.15446548605497662 -94 822 1.1169257296735586 -100 822 -.9621550302108293 -110 822 .38729899291464476 -144 822 .9515951151628944 -163 822 -.9131959509259193 -165 822 -.5056324431580765 -195 822 .6583940661158629 -210 822 .2255499285384471 -222 822 .4938455182767359 -252 822 -.4446663489634156 -268 822 -.2823525489810448 -273 822 .25762463275380243 -288 822 .7579469440439456 -296 822 .1452625626143199 -301 822 -1.8115152670239403 -306 822 1.1985029518590429 -330 822 .2333358207242456 -334 822 .6064329101824647 -336 822 .14905751411520385 -353 822 .6113813369044842 -367 822 -.09054889591430143 -371 822 .6496554686697733 -379 822 .04467464290039476 -386 822 1.093555989545615 -387 822 .8711657645851528 -396 822 -1.543550379008497 -412 822 -.016306688381880322 -435 822 -1.4764086232824258 -436 822 .08841334445574686 -439 822 -1.4986906106333993 -443 822 1.0581716863132464 -450 822 .07343378332246076 -451 822 1.6288388319991012 -481 822 1.2128308402677845 -514 822 .3831760035943893 -523 822 -.023741011707856738 -524 822 1.2312975962247108 -545 822 1.115195705137685 -553 822 -.04859316312611815 -557 822 .12384588486950593 -558 822 -.8381912947385521 -565 822 -.3528414359097498 -596 822 -.8704476212850945 -598 822 -.4363579830197416 -609 822 .38193882050210276 -620 822 -1.0626273237027704 -635 822 .10727290720475091 -650 822 .25535499596731925 -677 822 .4803776119026625 -690 822 .14965836181314127 -707 822 -.20858827129934285 -741 822 -.5980612643052572 -744 822 -.661444646436253 -749 822 -.6352366889831956 -762 822 -.6929805365463787 -775 822 -.01503335030592262 -786 822 .9177994789487696 -788 822 1.2762345201246246 -789 822 -.044833725960957596 -800 822 -.5167746776435442 -808 822 -1.261468068384057 -812 822 .04304556441838913 -834 822 -.33100668205426165 -840 822 -.609112804800348 -848 822 .979900775618419 -849 822 -1.1800796639059863 -859 822 .358360809565207 -866 822 -.3475891482956766 -868 822 1.7698400250161783 -869 822 -.7461102546425826 -870 822 .9600968256565409 -879 822 -.6860344948514834 -881 822 .2955520074691232 -883 822 -.9069161019692146 -902 822 -.008027832643867569 -904 822 .4139424144763044 -907 822 .9528644614806127 -939 822 .29777144101327857 -948 822 -.9193281339824682 -967 822 1.104899755720269 -971 822 .7572491848956127 -977 822 -.22377473638451548 -997 822 .3275689905050989 -3 823 .31015069027435654 -10 823 2.4434279469083684 -12 823 -1.0091463556316225 -17 823 .8387224757052226 -43 823 -3.248214455068384 -51 823 -.11563434580553049 -59 823 .18710572100167816 -63 823 .7323326418240829 -65 823 .7371388696080612 -77 823 -.22302500893927246 -96 823 -1.6305616561924619 -112 823 -.5193663704561337 -124 823 -.598678146692547 -134 823 -.14183041390815498 -150 823 .12286743075523845 -153 823 1.3138274351856665 -154 823 -1.6043798830976956 -169 823 -1.360644073764757 -180 823 -.632677818219363 -182 823 .47102166677103013 -222 823 .42713303378791445 -226 823 -1.6423612452663874 -240 823 .7745399992788148 -246 823 -.28707306565998236 -249 823 .15678131796879777 -262 823 -.8831879994018926 -263 823 -.5463958679656858 -281 823 -1.609472987536364 -316 823 -1.7457419592921462 -318 823 1.8826739168311344 -361 823 -2.210318567671025 -363 823 .8573254004350128 -368 823 -.3385080107362244 -375 823 .39790136628982586 -377 823 .24811808017659565 -383 823 -1.8196418665026222 -396 823 -1.7420096450631444 -397 823 -.343156601553596 -399 823 -.47023925243542214 -402 823 -2.034776130096121 -407 823 .057226024045048465 -415 823 .9110041491701802 -424 823 -2.455931232988503 -441 823 .8906881522855004 -456 823 -.38434354546443467 -465 823 1.2249100539417255 -467 823 1.0135435581998724 -472 823 .5895142845754601 -476 823 1.519358134046171 -486 823 -.3263740234782745 -488 823 -.7079797956948224 -491 823 .44358562676246344 -499 823 -.420999021652222 -509 823 .4127086978036017 -532 823 .17696469130395096 -533 823 .30034434819655353 -535 823 .023595557664839423 -539 823 1.8146049437011027 -544 823 -1.5938412104116062 -550 823 -.43345417714803575 -554 823 -.6206053837226967 -564 823 2.461923145744879 -571 823 .587352692015551 -575 823 .142856472070286 -580 823 .05368543379158022 -585 823 .8667806037766149 -586 823 .21839047383202134 -610 823 2.120842738252367 -618 823 -.8178407078257157 -630 823 -1.6992730302380858 -637 823 1.3687812335868466 -643 823 .40840144758336505 -648 823 .23780311574285334 -652 823 1.2796973586548506 -657 823 -.959367513326353 -659 823 -1.5302250189587825 -674 823 1.5885231610219899 -683 823 -.35880203427170904 -713 823 -.16859513414170121 -721 823 -2.7627389584819078 -731 823 2.0769669915489186 -741 823 -1.0545315378470799 -742 823 2.9358109108412975 -747 823 -.8089983955966692 -767 823 -1.0909452956510857 -770 823 2.4196828371463797 -772 823 1.773077102057131 -789 823 -.9879052060789123 -798 823 .20314885133610533 -807 823 -1.0453857360770402 -821 823 .12814044467370495 -832 823 -1.176762604740962 -839 823 -.5903348421528064 -852 823 -.3810177687876365 -861 823 -.6648525483424069 -874 823 .7533740763376693 -877 823 -.22294484297993855 -914 823 1.2359814405514684 -930 823 .28880147369477005 -933 823 2.1645859021179272 -945 823 .41578916933980103 -960 823 .04029361754539437 -961 823 .39072056384267734 -967 823 3.8485731145259443 -974 823 -.4427693453432433 -987 823 .21080848740087896 -996 823 -1.2775281956983702 -1 824 -.12615368432571145 -3 824 1.918967596595878 -4 824 -.7656460039149333 -5 824 1.8311241968117047 -18 824 2.0710052298609285 -22 824 -1.7460592061506512 -40 824 -.5450697321420263 -54 824 1.4044858374431817 -65 824 .7953801152390444 -93 824 -.3903920795049918 -94 824 .25522951881207945 -103 824 -3.25439192893384 -122 824 .704958852232471 -124 824 .3420519164205117 -133 824 .7268725558348897 -134 824 -.15922250896714718 -136 824 -.7481356928892656 -146 824 .14229694148775154 -150 824 .3360570746273375 -152 824 2.8428160373200857 -177 824 -.0226878407934743 -183 824 .008294491285055786 -187 824 .14675045090961225 -189 824 -.5569161825751912 -195 824 -1.486258399431486 -202 824 -.9055754848692532 -206 824 2.5171089559880784 -215 824 -2.097005083683537 -220 824 -1.5963465342904017 -234 824 2.286218298382082 -246 824 .9703812948850059 -253 824 .8275284229973745 -254 824 1.5943071609785842 -262 824 .49756399997723333 -273 824 .410168899290294 -277 824 .034249655530742426 -291 824 -3.7962078962311034 -295 824 .264439966407803 -302 824 3.1143836023748785 -303 824 -2.08789573460151 -326 824 .7240684299512988 -333 824 1.0255151182083857 -345 824 1.5394014391969864 -347 824 .01574360288458762 -352 824 -2.1555828331108504 -358 824 2.9459857315475166 -360 824 -1.4353155862632996 -379 824 -2.567460990450844 -382 824 .8761298157400278 -392 824 2.71931185829976 -404 824 -.728259094795611 -406 824 .017406200074592065 -413 824 .10848206581508896 -419 824 -1.208590097974234 -424 824 -.5145654837981164 -443 824 -.6490110116667571 -446 824 -2.6008495015318536 -459 824 -.002675358679827544 -464 824 2.2527011885350325 -477 824 2.9461157433109655 -487 824 1.884081845476666 -502 824 1.5048228836983932 -508 824 -.7976444115664614 -509 824 -1.104196520156758 -522 824 -.40056397772216407 -534 824 .5686424229724916 -538 824 2.3585385349010166 -548 824 -.9619010546570259 -565 824 -.3998332347271605 -573 824 -1.3739515254119057 -599 824 2.633776850824403 -603 824 .6082063183044957 -614 824 -1.329342584670773 -621 824 1.391810448990302 -633 824 .3919608548503468 -637 824 3.0008365782287845 -644 824 1.6647573665490814 -645 824 -1.1867833342816114 -657 824 -.2964841084840247 -680 824 1.4078458071294624 -684 824 .5586862013454197 -703 824 .3621027787850417 -706 824 .3778328881009087 -710 824 .22010415675158934 -713 824 -1.4997141794487445 -726 824 -1.628653310247901 -739 824 1.0827359238942893 -740 824 -2.372955950360114 -755 824 1.7865807350136003 -761 824 .7796489177234015 -764 824 -.391676723154148 -791 824 -.510889766930614 -792 824 -.7591658179955577 -829 824 .8531509699659132 -858 824 1.291056294930263 -860 824 2.071081289824678 -890 824 .9826375925145393 -907 824 .7148096961276398 -923 824 -1.9578910517352637 -928 824 -.8578135578196792 -937 824 .6954727364069496 -941 824 -1.5948432605757312 -946 824 -.35822257768507837 -948 824 -.6865640954203368 -950 824 -.9336915185671194 -951 824 .565278864598347 -962 824 -.24604559595063857 -983 824 2.9055883988576743 -989 824 -1.9223719493218858 -992 824 -1.5444609221332068 -1 825 1.9323002791744357 -3 825 .2690139635852755 -4 825 -.3290543572670923 -14 825 -1.143700361421312 -19 825 2.1591917831342924 -34 825 1.8012405056908063 -51 825 -.18559058833632883 -79 825 .9744273291939558 -98 825 -1.082170340717752 -131 825 -1.1255512309706257 -132 825 -.4941558456918401 -144 825 -.9827190855547879 -148 825 -.6822858297648181 -149 825 1.1472585997473548 -151 825 -.8082435305499378 -153 825 -2.286574918596488 -161 825 -.17669769262827917 -176 825 .4819258683059857 -193 825 .7590314647122405 -215 825 -2.07888362291815 -249 825 -2.1026348294481076 -251 825 1.7992605650045144 -253 825 1.486512159060916 -262 825 1.586160478434404 -272 825 .3685035626374702 -273 825 .5753355274407965 -288 825 .763002645451305 -291 825 -1.5375148247848196 -302 825 2.648966737726608 -313 825 -.8311827073645106 -317 825 -1.4842701065604818 -334 825 1.083110095111596 -350 825 -2.267582689880063 -372 825 2.7288271115340934 -377 825 -1.4528669026388623 -400 825 -1.2538361279889971 -403 825 -.9275399498744956 -406 825 1.0779970075558751 -413 825 1.0203153166091932 -429 825 -1.372102273766127 -434 825 -.9226569798645878 -440 825 -3.8998141759077405 -453 825 -3.5494781673451423 -455 825 1.212395469218969 -460 825 1.987070458245063 -479 825 -.16750786080979918 -484 825 -2.4113964859093424 -499 825 1.5497445635666791 -500 825 .4097944897178418 -515 825 .2543950389836687 -520 825 .3245234193335082 -546 825 -.02818081242541265 -559 825 -.8033636604397401 -562 825 2.0027826611617803 -564 825 1.0379494021627027 -571 825 3.1774718657138594 -572 825 -2.6453886450301454 -578 825 .9406564475867907 -583 825 1.4084984369481 -608 825 -1.6520507077792668 -621 825 2.1874226259797758 -639 825 2.1859226182711753 -646 825 1.3441520126371815 -672 825 -1.4510401622442979 -675 825 -3.5150243420914107 -681 825 -.19875174348523242 -689 825 1.6610210556370553 -699 825 -.0008241673703224955 -701 825 -1.7063476351023168 -706 825 .6498871395449303 -736 825 -.49810525870076144 -774 825 1.3621386547090548 -787 825 -3.35057955337393 -793 825 .7159351047881651 -844 825 -2.4847115569229445 -848 825 -2.0840709989793558 -875 825 .27696998014557506 -892 825 1.2397368177177626 -900 825 -.48399196674854383 -901 825 -1.0973845126786705 -912 825 .6733942386709229 -918 825 -1.02968229570856 -921 825 -2.4731257612751154 -932 825 .9882820365607101 -937 825 -.7269310783590894 -940 825 -.2145477306174163 -941 825 -1.3875596264484806 -960 825 2.0085400400568822 -979 825 -.37850034389053755 -981 825 1.8448118325185656 -2 826 .4100938557181431 -16 826 .9318715667088163 -27 826 1.7405831116484927 -63 826 -.048755092799516106 -67 826 -.8143544172659101 -85 826 1.080687945026534 -88 826 .22900010292494427 -91 826 -.25975937990395914 -100 826 -.3465817677053844 -105 826 -.06146392141313731 -106 826 1.173593087148288 -118 826 .22811009903301582 -124 826 -.23074713044373762 -129 826 1.35402877472497 -132 826 .24320246247233973 -134 826 1.318897199030901 -151 826 1.5061430665046096 -168 826 -1.9031924461953238 -188 826 -.7549541165169195 -198 826 1.6973206994087353 -202 826 .34071101560935746 -209 826 .7785739878855413 -223 826 1.0899079506991196 -257 826 -.06112324128933609 -262 826 -.24595015785931418 -277 826 -.30434080730294216 -283 826 -.34517934744945544 -289 826 -.9974500787172402 -299 826 -.583149529406248 -306 826 1.9766559186728636 -311 826 .5322488288712806 -316 826 .2684162353750163 -317 826 -.2919642065762428 -320 826 1.1039799337941374 -334 826 -.4804584615546302 -347 826 -.25017520162302276 -367 826 .2164304244430969 -370 826 .2342322680078081 -382 826 .39131175196537676 -383 826 .4913282468045136 -390 826 -.1795826161310814 -394 826 .08594510910746701 -396 826 -1.224641279971005 -422 826 -.6040709997587314 -432 826 -1.0327298716498992 -437 826 -.09318611854749918 -445 826 1.6502272367434279 -494 826 .5122940610232034 -496 826 .06991814720243356 -497 826 -2.1787300396548246 -500 826 -.5041461260824412 -503 826 1.0352695956172517 -506 826 -1.3507322720914825 -510 826 1.5291744436267647 -513 826 1.4869858108266505 -519 826 -.5606249158953627 -522 826 1.1336191853603892 -529 826 -.6316908929556927 -535 826 -1.899568765718262 -559 826 .07021045947482075 -571 826 -.5075415047379529 -579 826 .2783128765312383 -580 826 -.0286027024214896 -587 826 1.049475098634314 -616 826 -.05841275994829248 -621 826 -.2743238739825572 -631 826 .4948537686329966 -632 826 -.275760466713564 -647 826 -.22371778859990193 -649 826 -.2656054604246891 -672 826 -1.4693125069920492 -682 826 -.2993707259681485 -694 826 1.7097385817696857 -697 826 .38947884453765513 -701 826 -.6049759223178064 -705 826 .22995408482319601 -713 826 .16190654785734612 -717 826 -.8564960112093881 -718 826 -.13414975871811236 -721 826 1.0769607941217927 -734 826 -.04964769739218197 -736 826 .7067065543969905 -748 826 -1.6349193018515693 -749 826 .32675171655816904 -759 826 .3933133942445553 -762 826 .5459218922297955 -768 826 -.183809742297447 -770 826 -1.3792759384836084 -890 826 -1.7741018807226157 -891 826 -1.0030483515211464 -899 826 -.8764482623540258 -902 826 -1.2763889908252803 -912 826 1.1250278167451289 -913 826 -1.0028991603988526 -914 826 -1.5109353978556497 -915 826 1.0599110133163736 -920 826 .009075354922227358 -924 826 .36654892524688987 -925 826 .17061144129467024 -930 826 .714335969228918 -934 826 .3250891624034248 -969 826 -1.6071149367376787 -981 826 -.8592518423357601 -983 826 -2.132928442915487 -999 826 2.263249293990863 -29 827 -1.0017535367406964 -63 827 .9513949568197985 -70 827 -.07165144961950765 -89 827 -.2284481196962072 -90 827 1.1666095219149093 -93 827 -.8649279469618959 -94 827 -1.4513072964928966 -96 827 -.5302503878337883 -97 827 -.8247925296746379 -105 827 .4824870500604266 -125 827 1.3466793857051158 -150 827 .48263415504203966 -152 827 .02454872372489178 -156 827 .174579179098514 -170 827 .5025742952318976 -181 827 -.2369350871530446 -202 827 1.447630304078498 -211 827 -1.5694341325899217 -214 827 -.7168744870449107 -240 827 -1.9076051837749397 -248 827 -1.9227317336038028 -260 827 .04308053940600882 -271 827 .9483521069472315 -281 827 1.768240880637693 -297 827 1.4541845881475417 -299 827 .07450772642366708 -308 827 1.337557308363576 -319 827 -.38222477296517277 -324 827 -.9750553293834346 -364 827 -.5876733070508282 -370 827 .2712293077472875 -372 827 1.2367659896342562 -405 827 -1.3345579045117195 -408 827 -.5887460707562033 -411 827 .5367018911542382 -420 827 .5374956726063751 -425 827 -1.1678510093438015 -436 827 -.44876583399644165 -437 827 .09326939944548789 -456 827 .25391816563419023 -462 827 1.0365339305389416 -478 827 .6510471721260802 -495 827 .12934665317134933 -503 827 1.0833679814964414 -526 827 -.4599637487766182 -549 827 -.07011267955790994 -553 827 1.084711890932601 -561 827 .3637903664625887 -570 827 -.43954993426433625 -572 827 .7283794825152794 -585 827 -1.1704144564411565 -592 827 -1.9680008298747564 -603 827 -.7104246856346659 -610 827 -.395312342743661 -612 827 -.09792200469477319 -621 827 .11228422245950631 -634 827 -1.4968845949508025 -648 827 1.1217562338476958 -652 827 -.5855289851101372 -653 827 -.6058295814912509 -654 827 -.5120750084063204 -657 827 -1.3418657731752182 -660 827 -.56735312797165 -664 827 .6290480225571693 -670 827 1.3199853307553195 -683 827 .11873636374480365 -687 827 .8724826202108314 -689 827 .22837810150243965 -700 827 1.3222283516128006 -701 827 -.15956128789274632 -711 827 .7367227559660043 -718 827 -1.1677603939767245 -720 827 .5063093816777785 -721 827 -.7215147735625745 -734 827 .3691927864065127 -735 827 1.512737591167292 -747 827 -.18100043451150005 -755 827 -1.1800904140076203 -756 827 1.2028741284333286 -764 827 1.180880500704269 -778 827 .9416619639424639 -784 827 -.7823938019246872 -815 827 -.7563384774890206 -817 827 .5981364368889328 -828 827 -.1777836074286998 -839 827 .5392012643799611 -846 827 .3054770736641181 -856 827 .06459271105300508 -857 827 -.7136191826696634 -862 827 .3370282583758129 -881 827 .27415412868314554 -886 827 .7539034059051606 -888 827 1.5167269771002332 -901 827 -.08946933408961143 -911 827 -1.1553166145481188 -919 827 -1.1826573335034976 -932 827 -2.019276088144536 -968 827 .9724541881084025 -983 827 1.3414478492742383 -986 827 -1.195783340110936 -989 827 .3460128557238984 -990 827 2.411538534146143 -995 827 -.6175273162751377 -999 827 -.5025225668232731 -5 828 -.6827691141247072 -17 828 -1.719254287664802 -25 828 .029208922545916685 -29 828 -.5905711121378512 -44 828 -.19624219013503436 -54 828 -.6325243488102861 -79 828 .960808462678771 -87 828 -.1086711427281319 -90 828 -.04192498444470677 -92 828 1.2678683952212957 -98 828 -.197353203540867 -104 828 .21725023177763048 -118 828 .4753400364717867 -121 828 .9062484811543308 -140 828 -.7535513289914657 -141 828 1.0354521599726687 -152 828 -.2658518378851022 -166 828 1.3689697376363728 -167 828 .7385001328224461 -169 828 .2689280113829431 -178 828 -.4507039644052175 -190 828 -.9494991103709657 -204 828 -.7143118497340121 -214 828 -.2761859700150028 -229 828 -.8830388470312425 -231 828 .6323054015465546 -263 828 .3914098520584087 -264 828 1.9703215476901477 -271 828 -1.6562520989966287 -279 828 .15651883954399073 -288 828 -.8182499008535891 -298 828 1.3888756988399051 -316 828 1.557240274624472 -320 828 -.14804385012435334 -347 828 -.04129161436761854 -382 828 -.21952089146787557 -387 828 -.22365196954536753 -388 828 .34422816362640934 -404 828 -1.2065156545211235 -419 828 .8017020816140279 -426 828 -.6963757181362538 -437 828 .2964894098858937 -450 828 -2.385756574783319 -456 828 .9602398742371728 -458 828 -.6901535718931447 -463 828 .3038931440907744 -466 828 1.171446404834674 -471 828 -2.2245960363280677 -473 828 -.5488824937012933 -474 828 -1.0160997029218914 -496 828 1.2651516316525808 -497 828 -.9157324693092175 -498 828 .7157664351466911 -503 828 -.5351019902491281 -504 828 1.7330141808813289 -548 828 .6514926306199699 -588 828 .5517006001633029 -592 828 1.5659983750863378 -597 828 -.26303667612476705 -603 828 -.2844874666608943 -614 828 1.153266775936873 -623 828 -.011843015848752577 -626 828 -1.3247452481459785 -627 828 -1.3218264775556077 -662 828 -.3175092660081551 -671 828 -.07622679046410741 -681 828 1.8931501733905558 -691 828 .6021436184560429 -695 828 -1.1769800124665715 -698 828 -1.0413121728885244 -700 828 -.34003245253206177 -707 828 -.5277725621487452 -709 828 .44319666527432844 -746 828 .3365056110628084 -750 828 -.846734984780175 -756 828 -2.554185120395954 -760 828 .08387776782035794 -769 828 -.35220601720215283 -770 828 .2097602251704899 -786 828 -.35532629458239207 -792 828 .3314489246923053 -793 828 .7370972181858115 -815 828 .46244736347881843 -820 828 -.9945277322460728 -823 828 .03143439470001819 -828 828 1.619576451842982 -844 828 .8931777716947306 -875 828 -.5417138770649765 -879 828 -.8132801297957132 -887 828 -.8128188105534965 -901 828 .38756951971190556 -902 828 -.4027150884292067 -922 828 .5338039023664488 -923 828 .3616724314679176 -927 828 1.8245125129571031 -953 828 -1.3365903987602537 -976 828 1.427333555696253 -1 829 .9773024876766209 -17 829 -.8486259285480291 -23 829 .4196178179750448 -37 829 -1.2155674397920702 -40 829 2.2120804233238864 -41 829 -.056504696537148645 -66 829 .09808086728609203 -68 829 .8823831673533237 -69 829 -.3369064185654329 -112 829 1.5482668737448062 -117 829 -2.1001938822059296 -126 829 -.45848135590796363 -131 829 -.9609282918207138 -135 829 -1.6633488816676116 -152 829 1.8058468510002557 -180 829 .5688359643750697 -181 829 -.9967964650432707 -203 829 2.0097027866206654 -220 829 3.2289840196019486 -230 829 1.042096728089156 -241 829 .39714110482478826 -250 829 .506477419466748 -251 829 -2.072191913363544 -258 829 -.3694451149567814 -264 829 1.9005526754538795 -270 829 -.961232083628372 -280 829 1.9087744691831172 -302 829 .18904698804461326 -342 829 -1.2235295871208263 -346 829 -1.1036630395114375 -361 829 -.08155495407029964 -364 829 1.2135416765047504 -367 829 .5977695595599734 -374 829 2.394707740302952 -379 829 .653763842974561 -400 829 .30469700138147743 -422 829 1.3161277145502228 -444 829 -1.0727513012347543 -451 829 .935565950591318 -455 829 -2.5038180146841618 -477 829 -2.8184967822989786 -505 829 3.825606754651883 -521 829 -3.19615204248893 -528 829 -1.8389764792713434 -549 829 -.5877898316820845 -567 829 -.6668404927060164 -569 829 1.672559857011079 -594 829 -.12942419371062516 -598 829 1.6475731422895723 -604 829 -.41780873355298265 -623 829 2.2493115779375628 -633 829 -.1855117384147581 -652 829 1.404777971965687 -653 829 3.109748123687232 -658 829 -1.7219493661187617 -677 829 1.1440256229876848 -683 829 1.147240866494772 -695 829 -.7148410696010883 -698 829 -2.3162702841615705 -707 829 1.2953464453287526 -712 829 -2.2874069346403587 -715 829 1.2506590040793306 -717 829 1.9084470264992575 -721 829 .209171090867588 -733 829 -2.2870687838756876 -740 829 -1.2016425550473693 -743 829 -1.3568854588556958 -754 829 2.433830864203087 -760 829 1.2681587086944657 -763 829 -.9660342093339224 -765 829 1.5098114825806308 -778 829 -2.6749381542394937 -794 829 -.0020211258818502095 -851 829 -3.1894070390256988 -875 829 1.0931504623303216 -893 829 2.1378065584970924 -910 829 -.9605877074287952 -915 829 -.7994774756772054 -917 829 -.15296294155626766 -926 829 1.308361708155717 -931 829 -1.5109741144182856 -938 829 -.5913661900820723 -944 829 -1.1946893695646545 -947 829 -1.684896359012032 -955 829 1.376179813870537 -960 829 -.9776995530636403 -966 829 -.8133028215939783 -971 829 2.2864899603363424 -982 829 .11749865267924259 -986 829 .17606827420632143 -987 829 3.3646991125743204 -995 829 -1.0987009288623295 -996 829 -1.1412717712690994 -7 830 .5174378163577761 -9 830 1.468073329939964 -16 830 .5146916919784584 -22 830 1.250777221254857 -23 830 -.7957363752310429 -36 830 1.9382858873436843 -44 830 -.6408699021852553 -55 830 .3051547463469375 -59 830 -2.5755963666303834 -62 830 .3307237029897554 -74 830 -1.2874188683573224 -87 830 1.2469245069663029 -105 830 .7625520397266965 -117 830 1.5058162844938614 -132 830 -.3700240866620973 -134 830 .5117059919136491 -137 830 -1.4941000503767508 -152 830 .44275036383738336 -180 830 -.7707626969098673 -188 830 -1.8564127271119044 -197 830 .03945755928155162 -203 830 .9141452026857988 -206 830 .3146371425550427 -213 830 .9809957750071461 -220 830 .6618381183602013 -242 830 .21944768925746827 -244 830 2.4806114463093567 -250 830 1.3533818823080563 -253 830 1.0207851297422221 -292 830 .1313714335460382 -298 830 -.2901970812897837 -300 830 .41831341557483986 -304 830 .775234710304212 -308 830 -1.8991068497012362 -310 830 -.5191499521665071 -312 830 .8616004723099776 -353 830 1.9008945002552171 -367 830 .3135899602499458 -384 830 -.20378549666686335 -387 830 .6722493511583925 -392 830 .16009768983418587 -398 830 .6093406513828018 -412 830 -.5531276171926824 -421 830 .10705996912379931 -424 830 -.3459360447941026 -442 830 1.064944009214901 -451 830 1.2618253563117352 -455 830 -.25377443091073826 -458 830 1.4393485448798822 -463 830 .34096621024746837 -471 830 -.9428200495235549 -488 830 -.29394584486848674 -499 830 1.3080846732981855 -501 830 1.8166880428128964 -534 830 -.914244643871664 -536 830 .5652267863244316 -549 830 .3114898529185142 -555 830 .6650940601517873 -600 830 -1.8290951573248666 -607 830 .5099082950779913 -627 830 -.03952054148492107 -642 830 1.0649374526249464 -670 830 -1.0368646535458443 -686 830 -.17835271014071313 -702 830 -.12732911853922216 -716 830 .45324199118096936 -747 830 .20392200889168297 -759 830 .10430626451243877 -760 830 .1172431680674115 -770 830 .22732975118874843 -792 830 -.07010834330590593 -813 830 -.9610853437366728 -814 830 -1.216001126824896 -821 830 -.07406931852816516 -831 830 .6088516103212706 -836 830 -.5310450918227162 -849 830 -.31318510915722564 -850 830 .07336526860809497 -864 830 1.922363315850636 -887 830 .3091097370693455 -906 830 .40211532572705866 -926 830 -.13657657885248137 -932 830 1.6590766407633888 -935 830 -1.6542437681862354 -937 830 1.3421731778613621 -948 830 .13641736844580749 -951 830 1.0284807798542663 -954 830 -1.4778412064404252 -962 830 .762538773862892 -986 830 .29406004965827104 -13 831 .8513579026083319 -28 831 -.9057008140649208 -31 831 .9632684841887864 -33 831 -.19594900074716007 -47 831 .5422211081260908 -56 831 .8803934616410384 -65 831 -1.2180518198749466 -68 831 -.6650900337735735 -81 831 -.39764856496845646 -85 831 .030447989041672778 -114 831 1.2513834537720365 -122 831 .1187719854789589 -123 831 .5864044088516366 -146 831 .08500547137476162 -148 831 -.14726205471968296 -154 831 1.5129500154669684 -194 831 .9067153115871633 -209 831 .07796786445291799 -215 831 .27537863100595694 -216 831 -1.6656950454412258 -218 831 1.2601078154658416 -219 831 .9505870077538603 -230 831 -1.440705499556449 -234 831 -.22985858150576904 -252 831 -.6904949272449493 -255 831 .5375380056958027 -258 831 .9228736011050919 -283 831 -.5090374534771618 -292 831 .6385941804930785 -300 831 .6081492834328911 -307 831 -.3331340731335314 -313 831 .7602126934416328 -314 831 -1.3640622923937857 -320 831 1.0751432219119492 -331 831 -.3678473819768037 -337 831 .18604275397622735 -347 831 -.3238755384731081 -348 831 1.7080983388275586 -359 831 -1.261947042716569 -368 831 2.1816575387173045 -378 831 .313964572068505 -404 831 1.5074418877952176 -408 831 -1.3301546076311304 -423 831 .027413624625074573 -431 831 -1.209166598948718 -434 831 -.5921036968878224 -435 831 .34861435566011745 -442 831 -.557079104208608 -444 831 -.42503589326083746 -458 831 -.5120914949529184 -469 831 1.3619171212418826 -473 831 .010046667046735904 -479 831 -.5131000489328212 -482 831 .8550069117382099 -486 831 1.1387539754422344 -520 831 .9865515692063617 -548 831 -.007985921665058016 -573 831 .08374284339097646 -590 831 .8322670035961965 -595 831 -1.4983155536056467 -605 831 .6827397187045826 -609 831 1.8794221342148463 -611 831 .6551889207133929 -658 831 1.1828574580067148 -696 831 .44395777754558935 -698 831 1.3736104724318965 -702 831 .8434586497933281 -710 831 .4150472636043234 -720 831 .5507162369201417 -726 831 1.5071472752705377 -740 831 .8825685392115814 -756 831 -1.3788107842571788 -760 831 -.05372950545884196 -765 831 -1.0508374719088707 -776 831 .5521237000386837 -777 831 -.06191517304333215 -794 831 1.062626038027385 -799 831 -.18852677304909773 -801 831 -.10424101951127482 -806 831 -.1067305979112874 -816 831 -1.3467540438014982 -820 831 -2.0167914364526167 -830 831 -.06528969242967037 -843 831 .2069978671726849 -848 831 -1.5661173294044548 -859 831 1.476644137845666 -863 831 1.101062195684453 -867 831 -2.131147591833553 -868 831 -1.8046505273883209 -900 831 -.8362568370755316 -907 831 .3913284584981484 -914 831 -.6126376095409385 -920 831 .04883366358298444 -921 831 .9090844979516799 -938 831 -.7133783169756333 -939 831 .31769531067475465 -943 831 1.0195500388889636 -951 831 -.712837926952231 -971 831 -1.1310548182177254 -975 831 -.8279134657720958 -978 831 -.7383613686278463 -986 831 1.7402789811321326 -989 831 1.6850293102854423 -8 832 -1.1557943046260581 -27 832 1.5896774463363186 -39 832 .883757666879009 -55 832 -.30794510538675735 -62 832 -.6867510521143375 -69 832 -.4071511576869855 -77 832 .4540995120705449 -87 832 -1.764332099465844 -116 832 .4208922004599742 -120 832 -.9336587846407358 -127 832 .5916973891964263 -130 832 .24624640613456897 -138 832 1.326272340103334 -155 832 1.168434675322756 -175 832 .48512735018292763 -178 832 .12069644198872484 -181 832 .03860084120410237 -196 832 3.079139698929466 -199 832 .21280455385859487 -201 832 -.8712743682734119 -202 832 .7034834786443691 -209 832 1.8013885226521007 -233 832 -1.5993094712528362 -258 832 1.1663935921600714 -270 832 1.301517533853402 -276 832 .34197394268129355 -288 832 -.3111989090226195 -294 832 -.11858815173299742 -298 832 1.960088681189144 -327 832 .38764607603179135 -331 832 -.5571405559561323 -350 832 -.012536966762668042 -362 832 -.8075618255209518 -363 832 .12147723188758294 -364 832 -.6030465508137851 -411 832 1.3940843487215175 -420 832 -1.437561820341572 -429 832 -1.1828709609936987 -435 832 -.4274273791992492 -438 832 .21262455756791188 -447 832 1.4130918938300692 -449 832 1.780999710242764 -466 832 1.1437986952153565 -483 832 -1.0521591207966874 -486 832 .005184622242447673 -487 832 -.7394147879537026 -489 832 -.8112127904386499 -504 832 2.270521562528176 -512 832 -.3407187616050099 -534 832 1.2886670484981635 -537 832 1.683770611527372 -550 832 .5339157355398945 -555 832 -.03213278400255172 -570 832 -2.2739708510896857 -598 832 -.3439101365854761 -608 832 .06149056962974686 -635 832 1.714841803880134 -636 832 .27535188802432115 -668 832 -1.0222588185446704 -678 832 -.5106630285252152 -693 832 -1.093303922645734 -698 832 -.23213206441357975 -700 832 -.5892449741347598 -732 832 1.8451916284876324 -741 832 .37082407573571685 -745 832 1.3636996042773504 -746 832 .1035451779808994 -752 832 .6053729787534127 -755 832 -1.2124792585557147 -762 832 .8569668965313535 -776 832 -.45893053752852564 -791 832 1.543823796063739 -793 832 .9510675117801165 -803 832 -1.564501246309349 -804 832 -.8081297614010453 -808 832 -.6596913149571225 -809 832 .4388991578818413 -812 832 1.9735161492957594 -820 832 -1.8745683220633307 -823 832 .992781612194157 -832 832 .807253034811596 -839 832 .6612752923431924 -844 832 -.019281597405055948 -850 832 .16230834301421343 -854 832 -1.405977776712009 -862 832 .4054492808095804 -865 832 -.3640807108538784 -880 832 -1.1049781438642157 -889 832 -.76144591281386 -895 832 1.5035459521487264 -912 832 1.546147892687113 -922 832 .8801067846185564 -934 832 -1.2287289411657565 -935 832 -.2505256910205498 -941 832 1.8992586822506283 -944 832 .43605973969132134 -948 832 -.29752984858259046 -949 832 .7121945629329216 -989 832 1.9323627804810306 -995 832 -2.677780636071715 -998 832 2.1820489908817424 -7 833 .40291034355836136 -50 833 -1.4062787611823915 -53 833 .4701898531580823 -58 833 -.2979685525646818 -60 833 1.2704479828936395 -72 833 2.3071814225236262 -75 833 .2939460032328941 -106 833 -.634861157357673 -112 833 .6070972171021791 -120 833 1.0696828551433102 -140 833 .3925563849013722 -159 833 .35491691903003053 -179 833 -1.1632610760715285 -181 833 -.12164341816981403 -191 833 -.8538113609398639 -202 833 -.6709393236107998 -210 833 .4309953677283098 -215 833 -.726087206152899 -231 833 -.5471020191958935 -236 833 .08432096663349516 -262 833 -.7801688005910816 -263 833 -2.194770017941373 -276 833 2.527929208631702 -282 833 -.8766817487063591 -285 833 -1.2026017215918077 -295 833 -1.7245831643906846 -300 833 -.25505601223158325 -304 833 -.6608130363684936 -307 833 .3011145028442041 -309 833 -.23698819836305715 -312 833 1.3296038776663879 -315 833 -1.866777492867069 -322 833 -.37213018000707854 -323 833 .5660278931981151 -329 833 -1.9203939267121397 -330 833 .5277701268954541 -345 833 1.05443257738994 -349 833 .34282196701441264 -357 833 .009505791371791306 -360 833 -.4920472436414015 -369 833 .23528846912161347 -386 833 -.7258996559928923 -397 833 .5352246338943405 -415 833 -.17887886242412132 -435 833 1.1813252032913244 -449 833 -.7066665341296531 -458 833 -1.359122909567862 -489 833 -.5977662130034289 -505 833 2.143747646978865 -510 833 .22969206313345145 -522 833 -.07149242994904889 -528 833 -.6210221600398148 -531 833 .9622820543455076 -532 833 -.9968687104614032 -535 833 1.0489364840547055 -567 833 -.7947830277672329 -578 833 -1.1230062274784958 -579 833 .20257681745151132 -590 833 -.2963444930688398 -601 833 -.9140422335099315 -615 833 -1.4106073102731789 -617 833 .1725143939409086 -621 833 .7507239666633151 -627 833 -.8017595615369326 -633 833 -.4511919017723536 -637 833 -.9536929052307856 -639 833 1.1962425545642952 -646 833 .4450293950743194 -649 833 .4958844834575745 -650 833 -.775709404211956 -668 833 .4745187969701859 -675 833 .03507724387099027 -700 833 1.2220604996818867 -708 833 .05965853946294192 -718 833 -.28267614721366463 -723 833 -2.811447619230584 -747 833 -.8091128549090668 -750 833 .6177640220714488 -751 833 -.8494502951519733 -753 833 .6392240638215201 -770 833 .17110521016737246 -771 833 .4858733104849406 -799 833 -1.5885543632195307 -812 833 1.0954615887705534 -816 833 .9231636054110339 -823 833 2.2878744067609746 -831 833 -1.6414266368643478 -834 833 .4919582977261729 -850 833 -.41206165997484884 -855 833 1.4273900792546854 -856 833 .05408034395895428 -863 833 .2975137402237581 -875 833 .6436061854164997 -876 833 -1.3558132905764153 -883 833 1.1272469294628202 -884 833 -.06655760006454861 -887 833 .9418042231413385 -898 833 1.13291167445203 -908 833 1.568849387440809 -919 833 .35526493762703193 -920 833 .26056888428533853 -933 833 .09936882564932512 -937 833 -1.409913372583177 -939 833 -.40552485610064626 -956 833 -.5456274562568704 -958 833 1.3810431305369344 -964 833 .828222890306122 -979 833 -1.2708113013516806 -983 833 1.9698452354383498 -994 833 2.158213208445275 -996 833 -.7956724264660029 -6 834 -.3692964031402006 -13 834 .03308672967721919 -42 834 .09567802167367459 -52 834 -1.1136469173156636 -57 834 -.8681655905632023 -79 834 .7761016891882613 -87 834 -.9392267081086851 -90 834 -.1896513040763957 -94 834 1.0369719083295041 -104 834 -.8069763979909136 -131 834 .23178595873862917 -138 834 -1.2591682048938773 -141 834 -1.5914152615829098 -155 834 .792351758393058 -175 834 -2.567777829246281 -181 834 -.8866661503548717 -194 834 2.0820870220215317 -203 834 -1.175105100149316 -225 834 -.36178022780981584 -241 834 1.2033947614853788 -265 834 -.624933049031994 -266 834 -1.2555156032781818 -269 834 .005028065152912042 -273 834 -1.5609528725580233 -276 834 -.49102335264041613 -277 834 -1.628876202015609 -280 834 -.33229719186642986 -296 834 -.3575825173829229 -302 834 .9832061097248125 -327 834 -.09621811920132747 -331 834 .4668537991857534 -332 834 .8153763402313519 -370 834 -.17330342562949902 -384 834 .39995206853166343 -411 834 .7191734499098555 -433 834 -.2620413099151051 -446 834 -1.6729553530310666 -450 834 2.1007528211951847 -458 834 1.7737105782014295 -464 834 2.682009364919302 -489 834 .5614686445585663 -495 834 .5769888848798703 -497 834 -.1580803228707601 -506 834 -.2841353375510567 -542 834 -1.698310591141991 -550 834 .14536212602536924 -551 834 -.14348673642026852 -559 834 1.211107600865211 -565 834 -1.2349240864741373 -569 834 -.5568352489155826 -580 834 -.7005413826790845 -586 834 -.5520831958117367 -589 834 -.6957131832263967 -600 834 -.587428729691869 -601 834 .7440923444855846 -602 834 -.5831210642189687 -604 834 .8688192320879929 -612 834 3.4061599474219912 -619 834 .5172732789845403 -629 834 -1.303752668120556 -641 834 .6760656147543311 -643 834 -.3604370528181179 -644 834 1.7334458059813733 -651 834 -.715744733444162 -668 834 -1.0173843594676835 -687 834 -.012318589568885707 -689 834 -.8955579233556344 -697 834 -.29000993053369195 -699 834 1.212572887833078 -710 834 1.1552258819644081 -717 834 -1.3020399689665623 -754 834 -.37608095032009514 -762 834 -.48582978627299844 -771 834 -2.163384040758394 -776 834 2.0897532398401477 -786 834 -.4854395256391212 -787 834 .3309586937117242 -788 834 1.4493553744733658 -791 834 -.2784182989622531 -821 834 -.8936642738839253 -830 834 -.7272328564546291 -851 834 1.038637007370414 -855 834 .5605450337278081 -856 834 .9629040656538289 -884 834 1.8001973148802783 -888 834 .2788230901837872 -902 834 -1.083660880079898 -923 834 -.5064586387169931 -925 834 1.2461440470398975 -926 834 -.8431122144466698 -927 834 -1.6051613452457383 -953 834 2.9393578133156497 -959 834 .22286394206826307 -964 834 -.8813657268479043 -975 834 -.6340220444197393 -996 834 .6102745509158956 -6 835 -.6737453628950876 -8 835 .6826909215090149 -20 835 .29562994651638136 -26 835 .4686801675727752 -32 835 -.6683688328004588 -51 835 -.0540807151241956 -69 835 -.6296122452088336 -70 835 .022465595300808137 -78 835 -.5299003147411451 -81 835 .5954315489511451 -82 835 .003268548483107543 -92 835 .6678618604429872 -97 835 -.4559007195006942 -106 835 -.8841487637685854 -134 835 .20414528107527713 -136 835 1.374511205873871 -192 835 -.8562703626031078 -211 835 1.2351175534883923 -214 835 .36888339667191744 -215 835 -.1629087258103859 -229 835 -.17739969576004194 -236 835 .5180302520628348 -270 835 -2.0962448797866435 -271 835 -.13306112969982536 -280 835 -.29963531207547967 -282 835 -.21384311636401335 -300 835 .04188845866084194 -303 835 -.4659558813344174 -307 835 -1.1554873321679808 -313 835 .9105795609819047 -321 835 .2533092880228415 -323 835 -1.5654150857124223 -324 835 .9328432141437721 -360 835 .7760500863042564 -386 835 .2064053214042495 -410 835 .028621203784072485 -411 835 -1.0489530157779159 -417 835 -.4915962822633597 -423 835 .43946181797026884 -426 835 -.2602960429982873 -429 835 -.054137681201851556 -430 835 1.9394189334921046 -436 835 .29226999804840176 -444 835 -.49079779978378457 -447 835 1.0375660828499436 -478 835 .5291272078880647 -481 835 .16981030656226892 -487 835 -1.7430728104042326 -489 835 .7296394874944577 -492 835 .8371160016231283 -504 835 .22492749177359406 -518 835 -.3576261976745079 -522 835 -.03705550074939816 -535 835 -1.3360097027631448 -544 835 -1.192478374243325 -555 835 .15365117291382238 -558 835 .30206735764642845 -581 835 1.4964193270695376 -587 835 .8316963464581253 -588 835 .6956596192299078 -605 835 -.906180449912962 -619 835 .037939891626557795 -623 835 -.5052257940208813 -626 835 -.2586467170863099 -627 835 .14997680468997526 -629 835 -.442599213012871 -658 835 .20192213258021469 -678 835 .6159869480986656 -699 835 .2483328916191247 -725 835 1.4963862683828475 -732 835 -.560506375184579 -740 835 -.4036464196726623 -742 835 -.0839589345236095 -773 835 2.334834619597155 -782 835 -.06400673460519786 -795 835 -.8391040510019867 -804 835 .6270593119536514 -808 835 1.0766523082165989 -826 835 .18593513660686295 -834 835 -.014710797796465502 -838 835 -.4839368385219772 -877 835 -1.6082426809483206 -901 835 .1455441225175036 -908 835 1.8703619839994743 -919 835 .8425570876456617 -932 835 .3578088798626055 -941 835 .1579638187062372 -965 835 -.7547968110572154 -966 835 .638615185934648 -982 835 .5065902409225448 -983 835 -.20229047238463344 -984 835 1.214005090943716 -990 835 -2.348914215346916 -999 835 1.1360231524971192 -10 836 -.8493371708058748 -21 836 .5499375708176318 -47 836 1.5107818199875243 -66 836 -1.7782522530616047 -73 836 .3100815270440813 -74 836 1.3293775952688531 -91 836 .091690005639195 -100 836 .09420465381192121 -106 836 -.26938007548340026 -109 836 -1.5140201926042858 -122 836 .34113814546908006 -133 836 .20643751326189475 -144 836 .3660470617133485 -154 836 1.1712729817530263 -158 836 .12907380363408935 -161 836 .40626910970374014 -165 836 -1.394691423818134 -168 836 -.29272969247378716 -213 836 -.7673710842626911 -232 836 1.1958862140479767 -236 836 .5613372643682433 -253 836 -.23096769240340517 -258 836 .5330934757958444 -260 836 .8422468290781753 -263 836 .7961308735101584 -264 836 -1.4959610775132832 -274 836 1.4889475589847214 -280 836 -.183777668521099 -306 836 -1.3437579682378804 -310 836 -.10743845422977143 -316 836 -.024054920766510918 -325 836 -1.0640970030592027 -326 836 -.38445592457668953 -330 836 -.8550669511011899 -346 836 .46577017659797604 -365 836 -1.2622292748009232 -414 836 .32609431441347525 -419 836 .03220404637182589 -421 836 .7431097528389243 -437 836 .21239983929025208 -446 836 .7821378873781429 -461 836 -1.5282226298285384 -474 836 -.10451143064419847 -484 836 .9901933688670252 -488 836 .9218548197374175 -496 836 -.6610302106725823 -498 836 -.9666770008474436 -501 836 -.14203967526223316 -526 836 1.3667479141238488 -547 836 .5161320749929696 -549 836 .12785269211855235 -559 836 -1.4344096182823316 -566 836 -.37288214797338043 -582 836 .1114344526434955 -585 836 1.2783384863682317 -593 836 -.5357565272856438 -607 836 .5115354208059884 -610 836 -.8601220228765161 -621 836 -.5059589815578628 -622 836 -.1455549344835856 -636 836 -.2939607882202229 -638 836 1.2482004983643988 -646 836 1.031011884968352 -655 836 .9924470396403335 -670 836 -1.1057935259876834 -672 836 2.018952556559874 -674 836 .6853069163186897 -675 836 1.577404748815218 -679 836 .10292445124156888 -682 836 -.36675355449819946 -686 836 1.4845063836513348 -688 836 .9961183641620714 -689 836 .30298433169381506 -694 836 .8256759738015816 -695 836 -.5875910482611548 -754 836 -1.1311270141961078 -765 836 .6004357633142057 -788 836 -1.4725084477860682 -794 836 1.318091377373764 -796 836 .019906390499508708 -804 836 .03886899332454173 -819 836 1.6157079977033473 -848 836 -2.1076901862104642 -849 836 -1.2569198764625131 -850 836 -.14680961414199395 -854 836 -1.1003925938620662 -866 836 1.3583173139414697 -933 836 2.3345709259560623 -936 836 1.3404819142724458 -942 836 -1.4165051885816384 -961 836 -.013574599496641117 -974 836 -1.5347033908669747 -986 836 -1.0198997219886425 -19 837 .6918716013231039 -31 837 -.11119075114606862 -47 837 .6534213899342558 -49 837 -.7129073423274475 -52 837 -.3412599028477984 -56 837 -.25373702669684695 -62 837 -.3099415974523584 -75 837 -.2042041183154379 -82 837 .6050747973015463 -84 837 -.6934327806837043 -108 837 .7609270846727951 -113 837 2.1374222649505086 -117 837 -.29114955037779855 -140 837 -.44150834536870376 -144 837 .2485522563756133 -162 837 1.355611291732431 -182 837 .21919100720707857 -194 837 -.6155803835093604 -211 837 -.8719320726310625 -222 837 .48329418461190266 -232 837 1.0930388670248758 -238 837 1.262627725036136 -248 837 -.24781198147790257 -255 837 -.43884568772954535 -272 837 -.356570621119926 -280 837 .3919643928535011 -284 837 .749145770763439 -288 837 -.37054205755864744 -290 837 -.40717132453360294 -302 837 2.2128884085876965 -310 837 -.370230190600631 -323 837 .22347102145414574 -333 837 -.17245251681555873 -343 837 1.7654948230430743 -354 837 -1.0565458478244356 -357 837 -.9980860485416181 -367 837 -.1800187135730161 -374 837 .830030418442489 -378 837 -.10529926189807978 -387 837 -.3312026028956598 -396 837 .9159889548717195 -397 837 -.4967168537977209 -403 837 -1.2833050282660283 -404 837 -1.3795673714778052 -409 837 -.6257388045285058 -420 837 -.055228490874252495 -432 837 1.1170400057944097 -440 837 -.5191294921210482 -442 837 .5004634714119657 -457 837 1.1388535989888706 -459 837 -.3385174526690574 -470 837 .06145334115207506 -473 837 .22265366308579937 -475 837 .06787613889048728 -479 837 .7063234174025774 -480 837 .641272249400143 -486 837 -1.4851804447912982 -507 837 .8877095170824417 -524 837 -.661010503515204 -568 837 .769391138060982 -591 837 -.7022309005131969 -598 837 .21951820339550218 -599 837 .47641109376096813 -639 837 .21159197100055366 -642 837 1.40072722639904 -651 837 -1.8847802815596706 -652 837 .289113685070741 -661 837 1.0189128596095285 -668 837 -.926691466880182 -680 837 .9052088349372757 -686 837 -.4918560176605275 -689 837 -.030347332201936028 -715 837 .21186232379564132 -731 837 1.3362386112940756 -744 837 .3483636558867343 -753 837 -.38719201141509574 -760 837 -1.1645487878953742 -770 837 1.550537614472122 -788 837 -.18179249125816155 -794 837 -.508809514414167 -799 837 1.1780216511622281 -828 837 .8304170642907652 -834 837 .49427933706005556 -835 837 .2979493356853235 -836 837 .3187700111780792 -852 837 .9079387553180317 -887 837 -.6366192182705188 -902 837 .7297629883014208 -905 837 1.4509746878118592 -908 837 -.7106866660471954 -913 837 .6241873351653546 -920 837 -.833312290172546 -931 837 -1.8168740043536182 -933 837 .38423288621974533 -970 837 -.08792374506691111 -989 837 -1.122544401026328 -11 838 .9055983649603365 -20 838 -.6264635341297842 -32 838 -.2915257230135631 -46 838 .2643184403332967 -51 838 .12199771522077131 -60 838 -.6712567108739829 -65 838 .4230673400989632 -74 838 1.0263265635138468 -76 838 .550444495411655 -82 838 .8601683864781351 -89 838 -.1701950925661013 -93 838 -.1870465915483407 -99 838 .6129570664989724 -100 838 1.0854156241760289 -117 838 -1.3520367953586314 -122 838 -.5432644419757628 -152 838 .9662946668331416 -156 838 .5125026973499507 -180 838 .9187453818432034 -182 838 .28560910725298005 -199 838 .6190433510880087 -247 838 .5667311613607361 -260 838 -.6452426951884466 -268 838 -.18973103959142779 -281 838 1.7813490420517695 -284 838 -.7615880666181556 -287 838 -.08105421884346217 -292 838 -1.3154764281569538 -319 838 .6804673346147561 -328 838 -.5425172833632631 -370 838 -.4184033354396334 -386 838 .4405924081845283 -396 838 -.16200460393593002 -403 838 -.7072320800697514 -405 838 .35767092773196907 -413 838 1.0851185268196795 -415 838 -.275336107761318 -423 838 .33955785481020057 -425 838 -.03704774249581755 -435 838 -.28883601114179397 -436 838 -.8239234004006416 -472 838 -.971766962449546 -484 838 .42394461777477693 -487 838 1.2387113595357104 -503 838 .08496123744217836 -522 838 .11974378719585962 -534 838 .6736459622517261 -538 838 .10012274989758027 -539 838 .5204001548070373 -566 838 .42475319022117874 -581 838 -2.7016653488980826 -604 838 1.5713519359410575 -605 838 1.232522785849212 -623 838 .6382779456940938 -633 838 -.3809731389083095 -643 838 -.5181382170654847 -646 838 .3433348899803833 -651 838 -1.7269135281667838 -654 838 -.9130869862378386 -655 838 -.34885521515733364 -687 838 -.012541543244423137 -689 838 -.1561774406599738 -691 838 .6800913925316807 -703 838 -.19602280795608237 -738 838 .02241538442330828 -756 838 .6192361159398407 -767 838 -.06947882449275253 -774 838 .008189463330115374 -776 838 -.270909841028755 -779 838 -1.9555562546608294 -795 838 -.07486355446509121 -799 838 .2577999719352046 -831 838 -.9603229417549063 -842 838 -.5122103925232377 -846 838 .16703219150997262 -851 838 .07518834171260409 -854 838 .10017544159883278 -862 838 .24065816916320232 -864 838 -.27420003882169236 -866 838 -.519095380882244 -882 838 -.3708425966815639 -892 838 -.44336427710434556 -893 838 .2545477234792755 -897 838 1.9005180260215304 -912 838 2.133949361430855 -917 838 .10661731728963736 -928 838 -.6569277408609331 -931 838 .23479275671649125 -970 838 -.142502184351396 -975 838 .32089066744534717 -982 838 .4745860118307601 -989 838 .2557599985879048 -5 839 .12735205160233715 -18 839 1.4120214647337466 -28 839 1.1116089811636338 -32 839 -1.8438372252454085 -33 839 -.21209083222706937 -69 839 -2.4101326760446193 -70 839 -.22262953031239985 -87 839 -.15388229625777536 -91 839 1.7304991282587672 -98 839 -.4491421550043927 -99 839 .024967503371578242 -100 839 .38270851456898813 -101 839 -1.4504142113624272 -109 839 -.42941046263936855 -117 839 -1.336643025845756 -122 839 .23722485282265762 -125 839 -.9210969909979264 -148 839 .12284831590841343 -176 839 -.6167387636056513 -190 839 -.5833719739118752 -226 839 -2.3772823486555885 -243 839 -.1584563398697913 -260 839 .20714115104454364 -261 839 .352071543073992 -269 839 1.1158213661790817 -285 839 .6608811746616832 -302 839 .505559267786769 -312 839 -1.0029847796756468 -325 839 -1.3974666279189387 -341 839 -.6884133805139386 -342 839 .6527298159367243 -343 839 -.6106501850478538 -393 839 -1.548943606767197 -406 839 -.681646558970328 -419 839 -.019374357123938826 -420 839 -1.3370942706037348 -421 839 -.40662145478419875 -422 839 .45596326437838214 -438 839 -1.2282260381079093 -439 839 -1.3529705369301077 -440 839 .5578176805029298 -448 839 .9845071312433551 -456 839 .9166924716011665 -459 839 -.1476902642336762 -476 839 1.5042062322639864 -478 839 -.8749120857601316 -484 839 3.079531108306751 -501 839 1.464002544603268 -504 839 -.3822085622850021 -505 839 -.6774782998732356 -532 839 .9295617938111046 -533 839 1.1097306162699494 -543 839 .7639272744659108 -556 839 .6314943818521661 -568 839 1.792197577157019 -598 839 .6523897572947701 -613 839 2.177790569236105 -615 839 2.2326695472372893 -631 839 .1392590299489841 -640 839 .8078243663133651 -644 839 1.362410756058227 -646 839 -.45141230507834545 -650 839 .16985080075442205 -653 839 -1.6683288736741915 -659 839 .3938589904073041 -669 839 .7652441734339424 -681 839 -1.3947946300838499 -687 839 -1.0541067111433455 -688 839 .47715682454608993 -702 839 -.8561338983705317 -709 839 -.797616876045232 -732 839 2.3237326670602725 -750 839 -.5448823361163421 -764 839 -.23718211897741512 -765 839 -.038325062640603175 -769 839 1.678130458696278 -785 839 1.4698387059209972 -786 839 -1.529625165721863 -829 839 1.272237376258716 -835 839 1.2484946182017571 -841 839 .7389956773932858 -853 839 -.1705260296735328 -857 839 .9979105632117973 -865 839 1.0808137683535564 -919 839 -1.3225365589873168 -926 839 -.3223336505957819 -943 839 -1.3749299338031429 -944 839 .27317905151539884 -950 839 -.41685423891524337 -959 839 -.9423493484399261 -963 839 .07699263323680056 -966 839 .06299387227538544 -968 839 -.28360024974885706 -974 839 -.39008035390863005 -991 839 .024609361329008726 -5 840 .1479868436088043 -22 840 -.003856309035493416 -24 840 -.00846646298233461 -38 840 .5132324571276248 -49 840 .3999810668570671 -53 840 .24567128753638184 -70 840 .5378645820513521 -77 840 .9171534923929027 -79 840 1.0424095927266905 -80 840 .7446217360131457 -86 840 1.6670864525171722 -98 840 -.3921961791104635 -108 840 1.1791691249518352 -109 840 -.03692153634949183 -119 840 -1.2814986749875228 -123 840 .25673029381788326 -150 840 .5096080181062911 -169 840 1.2655895786786433 -178 840 1.3624452093410713 -183 840 -1.1071738234553352 -186 840 .08809962253435577 -206 840 -1.0113064756748966 -208 840 .6042303442154384 -214 840 -.8023320950818732 -217 840 -1.3658740409722894 -221 840 .726049150563474 -251 840 -.2909797575044487 -254 840 .23617153087042708 -263 840 -.20227034570162875 -273 840 .44233060842144967 -281 840 .3979970157932933 -293 840 -.06830092293766961 -299 840 .11418453576253282 -305 840 -.08577108640209095 -322 840 .8108517066729013 -335 840 -.7631560151390752 -337 840 -.8082504867887871 -368 840 -.6906001760749059 -374 840 -.2001007491205416 -383 840 1.2141918111484702 -385 840 .33594855492787007 -388 840 -.18702465654692677 -397 840 -.12593634707729154 -405 840 .7931663393009454 -411 840 .09412205941520813 -414 840 .45602971818644455 -441 840 .8450238029208096 -448 840 .6079279647540912 -450 840 -1.4037446232256408 -471 840 -.8067314565898103 -474 840 -1.3540364161392486 -476 840 -.2973818487482532 -480 840 .6977725335288855 -481 840 -.427398188952455 -486 840 -.9973025159664681 -516 840 .3273681118530143 -518 840 .15887833243457739 -521 840 -.34337858830353885 -522 840 .6680880652485119 -529 840 .13532521103987868 -549 840 -.6969705292693913 -562 840 .44334110415791705 -569 840 .05453036909276343 -582 840 .7548212574226079 -584 840 .014855256650193507 -586 840 .07927732655029357 -601 840 -.7115556692650878 -628 840 -1.2673718761850103 -631 840 .2671842530037061 -642 840 .3349803467179202 -647 840 .0964431623405633 -648 840 .7425542917916529 -657 840 -.606708885763431 -664 840 1.4575184087868875 -667 840 -.6581955267333693 -680 840 .014256680027262499 -684 840 -.9038693979361735 -687 840 .2972193641793463 -695 840 -.18879285787480454 -697 840 -.9930332446049658 -698 840 .541406990226871 -717 840 .7465847900995555 -725 840 -1.058524595407285 -732 840 .6455511236612163 -736 840 -.5563967101191801 -746 840 -.10384152164002396 -749 840 .6623614712127789 -750 840 -1.1657342003735531 -760 840 -.7431938000923408 -766 840 -.17802982260500289 -780 840 .6990531163108975 -782 840 .7059078552393729 -810 840 1.5552454443827022 -819 840 -.10104974563348286 -820 840 -.8784015337226581 -831 840 -1.162030127193654 -866 840 .04694079523635719 -878 840 -.4678576545400732 -880 840 -1.0108331110572295 -917 840 .7947725947392393 -925 840 -.6211948826867769 -936 840 .6612715760480689 -945 840 -.5557201258923129 -948 840 .5597733051138565 -960 840 -.2971684793878217 -981 840 .5511648771597177 -987 840 .16631850902633677 -994 840 .37644762537604537 -996 840 .5077435688131867 -1 841 .21320480109626846 -4 841 .03237316296664178 -37 841 -.2243494257549157 -42 841 .33904417289756417 -45 841 .5197184401223263 -46 841 1.156302946264164 -53 841 -.8982843151377973 -74 841 -2.3669784869660226 -76 841 -.4835977850059434 -84 841 1.4585309903247645 -85 841 1.8430060067581164 -100 841 -.9873801633783947 -105 841 -.36539389454884486 -106 841 .9337080104850027 -122 841 .7555215734688698 -134 841 .5294676655251943 -146 841 .21801425706259317 -147 841 -1.0617110308666429 -150 841 -.3491183914225307 -156 841 .2776112561893876 -165 841 -.14978339115174827 -181 841 -2.054160924686821 -209 841 -2.2331328031836133 -213 841 .569916061454548 -224 841 .3074474587396762 -231 841 .9150541817748663 -252 841 -.5999141169555486 -278 841 -1.0399130630591902 -285 841 -.6644078980178167 -291 841 -.43389243061108296 -302 841 1.6162086006898095 -342 841 -1.5023968690008296 -370 841 -.2751715475659471 -377 841 1.1376417152732134 -406 841 .9331036039497865 -421 841 -.5775208676456804 -432 841 -1.0764798958919135 -439 841 .9208607507199459 -454 841 .5750828766395075 -455 841 .22085580373476216 -465 841 -1.7061375453299483 -481 841 .3279411475598555 -488 841 -2.2802398048156656 -516 841 .6305809344233709 -526 841 -.6112398704907127 -561 841 1.7784704781939589 -567 841 -.14794703572930537 -568 841 1.65556018630943 -572 841 1.548544351366421 -582 841 -.48666164534844997 -594 841 -1.426664504925398 -596 841 -1.397986488377119 -598 841 .35378399327626525 -599 841 .7085107529782803 -601 841 1.6352023145685242 -607 841 .015841125411143284 -610 841 2.911598050659233 -626 841 1.4856065314163331 -644 841 -1.4772387449667912 -649 841 -1.3561963247571949 -667 841 1.3352832631054774 -674 841 .4564062584071229 -697 841 .06794891636316289 -733 841 -1.0396147235281787 -762 841 -1.2042703748507146 -764 841 1.9419676365276457 -766 841 -.8524149778610193 -774 841 -.8830978279405863 -780 841 -.46333318094280695 -800 841 -.6017101173743292 -806 841 -.9438370125274347 -808 841 -2.128569928286064 -816 841 2.0065808689542686 -820 841 -.34489244417033804 -826 841 1.407590807575197 -831 841 .21101365872176414 -850 841 1.650683430607495 -852 841 -2.692189554829047 -863 841 1.1414313619386105 -890 841 .23297115393933227 -910 841 -.7511329779062752 -913 841 1.1473810189122826 -919 841 -.28495921974786065 -921 841 -1.3269299703713433 -925 841 2.343878345906804 -934 841 -1.6611520100771107 -943 841 -.33945803444536415 -960 841 2.432088386837249 -961 841 .7703865320296439 -963 841 -.9949299465070627 -983 841 -1.098592154422064 -984 841 -1.0376804317328336 -986 841 1.328061830708708 -995 841 -.8025995037457156 -999 841 -1.135092815103259 -18 842 -3.0335975335008496 -26 842 -.4118672915504355 -32 842 .9956659225586222 -37 842 -.5523879432250437 -40 842 -.07458049541672027 -43 842 .7670974041923901 -49 842 -.45599571773972664 -59 842 -1.8316094580282127 -61 842 .4765705180209829 -70 842 -.09896966300104457 -77 842 -1.8720963993869815 -85 842 -.14859606572488396 -90 842 -.5981202807538116 -98 842 -.2824879268221425 -111 842 -.4470864650521997 -117 842 1.3909062642910315 -125 842 -1.4720156196137686 -163 842 -1.2339709793759213 -170 842 -.3484124733941158 -174 842 -.5869154738971576 -175 842 .33672183690796725 -184 842 -1.1968132583481164 -188 842 -2.0098814900774493 -191 842 1.5425642150687204 -201 842 -1.0258577510071318 -219 842 1.1495234937698962 -224 842 .043392126735568304 -234 842 -1.4689451916095013 -235 842 -.5225771411224971 -244 842 1.4158403140787557 -248 842 1.4725629334140575 -264 842 -.02229001691780709 -266 842 -.35210659724577326 -279 842 .15372025804795417 -280 842 -.6956413690270996 -281 842 -1.7963948609350893 -294 842 -1.0571317367303976 -320 842 .5751428622970668 -321 842 -1.0937167395305025 -326 842 .6523269822150736 -328 842 -.022160643405417627 -331 842 -.6082391235888397 -332 842 .25044133747389186 -333 842 .5797539885822273 -343 842 .2686737981936154 -360 842 -.07302579917390031 -362 842 -.33311817499718066 -366 842 .12006592911454891 -373 842 -.44721220135790135 -377 842 1.3460297822781777 -394 842 -.840171354312841 -403 842 1.181222346775899 -410 842 .8789725802535598 -415 842 -.5806507779346219 -416 842 -.08653602927053095 -418 842 .046900841796758325 -421 842 -.00578635539879714 -426 842 -.2875113526799413 -430 842 1.5017755533698218 -432 842 -.9201437762929189 -438 842 -.3641259360701074 -445 842 .9886364164358972 -454 842 .4735178291539214 -459 842 -.45364306387515396 -463 842 .4081985724813158 -464 842 -.020750062309687983 -475 842 -.33877900233500224 -480 842 -.39970042485319424 -484 842 -.5049717932355079 -486 842 1.2471201985639615 -487 842 -1.3438325561618487 -519 842 -1.2107753952431306 -529 842 -.22795253401490823 -554 842 1.2416975891700672 -558 842 -.9574188062779521 -578 842 1.1910290741110987 -582 842 -.38157290924024473 -609 842 .17329298892826706 -610 842 .40298711875587373 -629 842 -.12781585437461834 -654 842 1.4747109036976538 -669 842 -.9439851029124573 -680 842 -1.6988471724004446 -703 842 -.4491711651550364 -704 842 -.22948828162123086 -705 842 .10241624080850414 -712 842 .9404649702500543 -716 842 1.674276250375323 -726 842 1.502065333426689 -728 842 .14310405896306727 -751 842 .8920904175539293 -752 842 -.9811926908118963 -776 842 .8981704797072996 -789 842 .7454843026777875 -792 842 .8293954694381146 -807 842 .4870745167784165 -809 842 .46959638914386304 -810 842 .6586289807328478 -816 842 -1.174442373020462 -827 842 -1.4631843371581257 -832 842 .9199103839637274 -838 842 .08770072160382655 -858 842 -1.1649469638047483 -870 842 .10301078055449492 -871 842 .4728342223519123 -878 842 -.5546876572134997 -903 842 -2.0592787781040878 -906 842 .9140273807875516 -927 842 -.6500225168962197 -930 842 -.7801199551494894 -942 842 .27359226830615513 -950 842 .3373495428155068 -962 842 .27678448652042764 -974 842 -.10212044543199511 -977 842 -.500638040790622 -994 842 -1.746664132262132 -995 842 -.452234061371804 -15 843 -.44525885762021494 -24 843 .6099145480858253 -45 843 -1.0939853687511003 -48 843 1.7693897172213218 -49 843 -1.481248346785491 -54 843 -.10169937903888016 -57 843 .26711969228104493 -58 843 -.8009263493906147 -63 843 -.8753906441794387 -64 843 -1.2925105801260879 -87 843 1.044572067285048 -89 843 1.2138120564187216 -93 843 -.8226395826777425 -137 843 .9928776070914558 -164 843 -.18125858700239672 -172 843 -.6356932824211703 -185 843 -.4278218318338363 -188 843 -2.21022554088883 -197 843 -1.0112279614866175 -212 843 -.3146810851046551 -216 843 .2934362153439186 -219 843 .3177376133478776 -223 843 -.047809081218575286 -228 843 -.3805840305145427 -241 843 -.5837227419488802 -242 843 .49685440563672206 -268 843 .6446416129323753 -273 843 -.7156799173057184 -280 843 .5956918004738813 -301 843 -1.9403673589148929 -307 843 .6864438460690655 -315 843 -.3182467684630884 -337 843 -.01414073099576428 -340 843 -.28536323798234564 -345 843 -.5211213508871272 -354 843 -1.4250608157713973 -360 843 -.9455350836954631 -362 843 -.5939827557399476 -364 843 -.00866153607957823 -376 843 -.36335253324961486 -389 843 .9672969819249068 -402 843 .10094098129850032 -404 843 .3428577270657218 -421 843 .8333802742321447 -426 843 1.4309704540574126 -434 843 -.780081588023741 -453 843 .5904534452507915 -486 843 -1.0177666694589125 -489 843 -1.047353929042785 -508 843 .24969638803708621 -520 843 -.3975045621323344 -521 843 -.35532312323244286 -522 843 -.8982620372645229 -527 843 -1.1448788098134879 -539 843 -.5186845575075512 -542 843 1.144579732762494 -557 843 1.4396230881827001 -558 843 .08878752450530898 -570 843 -.12387106410816312 -589 843 -.7576671310978172 -591 843 -.2820636350345544 -597 843 -.9930959828660461 -601 843 .24258200755811518 -604 843 -.2243679977426699 -610 843 .0780319438930487 -614 843 .448154749028297 -622 843 -.848825780821611 -626 843 .41444153468113054 -635 843 .7310111616114477 -643 843 .0685874147332398 -651 843 .45243217315025724 -656 843 .05178352318011693 -666 843 -2.0310496289462776 -670 843 -1.3157994279901941 -697 843 -.4257295029840158 -703 843 .2963524518528187 -706 843 1.6663993234514376 -722 843 .3373499613831674 -728 843 -1.364479984274931 -735 843 -.8146765410134533 -746 843 .10736591392490384 -751 843 .27782152392580867 -757 843 -1.1389752986027548 -780 843 .5148722906299891 -798 843 .09374288882370568 -805 843 .3201671622758292 -809 843 -.9255972445231216 -827 843 1.5688052031734843 -831 843 1.040873333913046 -848 843 -.9191980397785964 -850 843 .16202882261665855 -861 843 -.9415310028060921 -872 843 .21313615008453793 -877 843 -2.0472713267296627 -879 843 .1039126930037031 -886 843 .4485846651183703 -891 843 .7275951040754269 -893 843 .7756601893354769 -900 843 .7266200958992095 -903 843 -.5986678705444397 -908 843 .5886639259325396 -915 843 -1.7310271753358581 -918 843 .03576080386978914 -924 843 -1.8875960971020607 -926 843 -.8794468281069896 -931 843 -1.217669403800128 -939 843 -.03760791632666936 -946 843 -.2761874438438396 -954 843 1.3660762948405687 -961 843 .6883428881152774 -973 843 -.349962872349957 -974 843 .06481379821477648 -990 843 -.4091801585808431 -13 844 -.33846298396507934 -23 844 -1.4028457316580614 -37 844 -.692811601086258 -40 844 -.3550587067989259 -50 844 .6092697038079358 -81 844 -.9924615878432868 -88 844 -.5850834925061066 -106 844 .6181793519326236 -118 844 .7461833478794454 -129 844 -.012269284130565092 -141 844 .31365756963876834 -167 844 .3083163486759718 -172 844 -.13261084166855913 -180 844 .15217999755615108 -183 844 -.6522879901285366 -195 844 -.2136867279884344 -202 844 1.1068183789480939 -226 844 1.041585934671924 -231 844 -.6403647433885311 -233 844 .3994225393163058 -238 844 .5269067031844552 -240 844 -.6740865829922633 -247 844 .001409756213100924 -267 844 -.7090724199177411 -280 844 -.05602016275846926 -304 844 -1.0180009955738658 -305 844 .24544602155205225 -331 844 .02887833789797524 -348 844 -.02046105559760589 -357 844 .4916743842599495 -366 844 -.14908885022419832 -369 844 -.6746087198898159 -377 844 -.30760446062889835 -382 844 -.6901446888603621 -393 844 .4400967534045895 -402 844 .26438158561335856 -430 844 -.7061790031656503 -433 844 -.050441198898658855 -460 844 -.3047765190254173 -472 844 -.7326572856983562 -484 844 -.4141744987165092 -496 844 -.3844553074658925 -504 844 1.1794078090623212 -514 844 .8203908806716479 -520 844 -.5602283950994519 -526 844 .30357696782261784 -538 844 .16801114712211024 -542 844 -.1883074286955777 -544 844 .9291081249310661 -548 844 .29586482947880555 -552 844 .5485954160456484 -564 844 -.5348469863591873 -576 844 .10459785580279596 -577 844 -1.2978692834786658 -585 844 -.7924627771166384 -587 844 .4812601657496486 -591 844 .22977437854942367 -600 844 .046113712499154746 -605 844 -.6648400429036796 -606 844 -.28282873656410745 -611 844 -.23213250865583912 -619 844 -.6504086480632545 -622 844 .906877564861005 -627 844 -.5771903157402515 -637 844 -.6212495288496988 -653 844 .24477326002824823 -663 844 -.9945780489002486 -671 844 .11295979896789693 -678 844 .7061031319339832 -682 844 .6706779717328462 -689 844 .04864873797862597 -691 844 .3576130571622359 -692 844 .974404490201886 -696 844 -1.0100169597013056 -701 844 .5250530102076032 -723 844 -.11617492557048247 -728 844 1.208063615613879 -736 844 .028714110362749158 -737 844 .007484462315133361 -746 844 .07464431170317119 -750 844 -.07485988475634238 -778 844 -.4055440993701642 -813 844 .4687491294437661 -830 844 .3648202899566557 -833 844 -.1100328268424024 -862 844 .7318115255826823 -909 844 1.126019830261337 -911 844 .3472543223085429 -924 844 .1307383782875436 -943 844 1.281960124739109 -946 844 -.4074446412298519 -960 844 -.04177103746010703 -965 844 .359890383772132 -980 844 1.0012006678668968 -982 844 .0641738331836507 -985 844 1.2159755275845672 -993 844 -.0073739590204624506 -997 844 -.9185596546656692 -7 845 -1.1686577414431423 -13 845 .9165556043019157 -17 845 .02402132839584937 -34 845 1.4948651398952626 -44 845 -.8888008249562369 -46 845 -.2262812071048638 -52 845 -.47541251179495714 -57 845 -.08580574940745825 -69 845 .7065666986203714 -73 845 .45308657888299864 -82 845 -.21443369396388398 -91 845 .06452465373022698 -96 845 -.26821275864062705 -104 845 -.6981523305776738 -107 845 -.9600790552881038 -114 845 .7240088710061184 -119 845 -.42600360103284296 -130 845 -1.512176411085542 -148 845 .9933604232133906 -149 845 -1.505813292509168 -157 845 -.9314514430341219 -167 845 -1.1063867145677768 -188 845 -1.077474161730487 -195 845 -.5563040687246308 -204 845 -.2419673780328065 -219 845 .7361531982134674 -223 845 .22917710993251877 -248 845 -.09552463151896845 -257 845 -.32472040700670807 -258 845 .18288369488540862 -259 845 .5184748426053544 -262 845 -1.2467192533280618 -272 845 1.5129835993401397 -277 845 .22651521816483494 -284 845 -.14864833729868632 -308 845 .9145610899036426 -328 845 -.043665276986603024 -338 845 .9252331991219405 -340 845 -1.097979967790669 -359 845 .8501316111599582 -361 845 -.164459664785621 -374 845 -1.0752783524513372 -392 845 .372653344267908 -396 845 1.2731644875765122 -397 845 .3980816789345276 -398 845 -1.1656448111881987 -438 845 .8133377980809661 -467 845 -.5699963640590208 -511 845 -.2673019397886914 -512 845 -.0054321537073615915 -522 845 .29705026693359926 -528 845 -.5693309109754685 -530 845 .1374374604198606 -547 845 1.4802831650646022 -557 845 -.470402254858782 -576 845 -1.9710107975287596 -578 845 -.08007802116528512 -585 845 1.2345672883000045 -597 845 .5772241915597609 -598 845 -.4191175936643398 -604 845 -1.406983294490402 -605 845 -1.094138938520002 -620 845 1.4372383397154067 -626 845 -.6148554726218708 -645 845 .8694239493854659 -646 845 -.17025985926103948 -649 845 1.364597664864509 -653 845 -.7269737860233063 -664 845 .5619734924340809 -685 845 2.2719730608571918 -687 845 -.20581337720615464 -689 845 .43888176603809137 -697 845 1.5611170658731561 -708 845 -.40360993758923447 -711 845 -.11862796079960877 -712 845 1.0424916575414396 -718 845 .24797269057907603 -723 845 -.3759251584887471 -730 845 -.908374541598523 -738 845 -.545656156876779 -747 845 -1.3786527902564147 -748 845 -.6046919100479118 -760 845 -.48957773735199084 -763 845 .035570386337674426 -769 845 .21562765498983455 -790 845 -.24911471742408617 -802 845 -.043504609824239926 -803 845 -1.5891024428908482 -815 845 -.3909784477478908 -819 845 .7465224619687177 -840 845 1.2035068085012104 -854 845 -.03251499108473144 -884 845 .015844743250492038 -900 845 .04833292568735123 -906 845 -1.3547724526147082 -914 845 -1.239392338909315 -917 845 1.176301480654491 -941 845 .9293753482172623 -963 845 .770571513671241 -973 845 1.0803882191757743 -981 845 .9624127377515529 -986 845 -1.029632132029874 -1 846 -.19740845335301502 -3 846 -.5692750481019226 -7 846 .35558449224242344 -11 846 -.24958238603927607 -25 846 .4676142678772818 -35 846 .8343558046951769 -38 846 .18021964176600933 -40 846 .5811063231116986 -63 846 -.03855295247558976 -74 846 .956117149531659 -78 846 -.344533121850662 -80 846 1.1426292038499464 -100 846 .17523246833712353 -103 846 .09190531338428488 -112 846 -.4266411646933684 -114 846 .09641855481068429 -149 846 -.46336300665887287 -151 846 -.8567562989679427 -155 846 -.1346897079055503 -163 846 -.10144335362126669 -169 846 .18619084497937413 -199 846 -.14363981233821513 -206 846 .15263948999921495 -213 846 -.4011378602377112 -225 846 -.09797242001542616 -245 846 .37572048039324035 -263 846 -.6393374555905106 -269 846 -.5001914401738726 -270 846 -.32229247710718006 -282 846 -.10487267258197111 -314 846 -.6074736201191944 -324 846 .3730546871293439 -333 846 .41296330590886265 -338 846 -.15424056422836807 -363 846 -.4679187734082247 -367 846 -.2749901972218641 -378 846 -.4713288889096027 -382 846 -.16855270126341734 -402 846 .15932681289209374 -417 846 .2617583266677351 -428 846 -.7636073439571727 -446 846 .474959101464119 -462 846 -.6805234037653513 -496 846 -.42230280510490326 -500 846 -.19162964996092963 -506 846 .2329924450476945 -508 846 .7814253251380333 -511 846 .32087610022936686 -533 846 .025523800915656043 -537 846 .336316054740428 -542 846 .2346979852885838 -552 846 .5328849917115249 -565 846 -.41147036860072733 -571 846 -.493363731708386 -577 846 .2726933151745882 -585 846 .6353698731289683 -592 846 .33174761059908753 -606 846 .1028284079431479 -620 846 .7024286950721662 -624 846 1.0451541382559193 -627 846 -.838680808954734 -628 846 .49065808814248824 -630 846 -.6118238992324337 -647 846 -.7920895129725132 -653 846 -.867686816008272 -654 846 -.9964046777046237 -662 846 -1.2721754368822609 -666 846 -.7684210500164795 -669 846 -.20682473796170886 -696 846 -.23018398356456443 -698 846 .703580084758575 -701 846 -.30219773526314303 -711 846 -.12430565288001849 -718 846 .37898904107233694 -742 846 .29848573223903097 -747 846 -.26787839499455773 -757 846 -.09520521370724755 -790 846 -.6297193371699839 -793 846 -.5297812542125823 -794 846 .828276146051838 -806 846 -.5092858713212611 -808 846 .0479460000692155 -817 846 .06461367536671543 -842 846 .08996985984427942 -844 846 -.39425637584342865 -849 846 -.19387696498381332 -858 846 -.13539943503927168 -871 846 -.771619121073574 -879 846 .3425771925750068 -885 846 .20557058823019986 -888 846 -.2521284438210976 -890 846 .21862776692297842 -918 846 .29967862358172825 -922 846 -.886290866892887 -924 846 .21838154998173268 -935 846 -.5363020273998196 -938 846 .10200640510969411 -941 846 .9962889895101018 -942 846 -.7199365300099843 -955 846 .17645528805619312 -982 846 .20920030577990278 -11 847 1.1459284330552693 -15 847 1.217251427048876 -24 847 2.2676155462377308 -27 847 3.0173303213722913 -41 847 1.2691365863836335 -61 847 -.41576129845028087 -69 847 -1.1860689559357678 -73 847 .516408415929867 -78 847 -1.230841421146829 -85 847 1.4334202533728229 -111 847 -1.0296270370752525 -124 847 .3878279631862249 -128 847 -.9532424116763857 -155 847 .6785720953233648 -170 847 -.22642300129517318 -184 847 .45615878394598575 -188 847 .2748016622034396 -203 847 .005821621366530652 -213 847 .36553133650166125 -216 847 -.8064702949301448 -217 847 -2.043480756252504 -240 847 -.44801596353784956 -247 847 .8326144939992384 -256 847 1.0765231485186133 -265 847 .6388157254764031 -287 847 -.9805736979519705 -288 847 -.6048236250105077 -289 847 -2.358959603859695 -299 847 -1.1609906498534137 -301 847 .5686254372109698 -307 847 .35528574572024685 -312 847 -1.180320567134299 -317 847 -.5182515650259136 -318 847 -3.3371434916266027 -325 847 1.3512326134056138 -334 847 .2277480370686672 -344 847 1.2965202781360319 -354 847 .4933967070094466 -362 847 -.5927916715997323 -369 847 .677598821395698 -370 847 1.3094981190236932 -380 847 1.0524883215741787 -393 847 -.015090497434670919 -405 847 -1.146410716260318 -406 847 -.9431129914795873 -428 847 -.6822421126455649 -433 847 -.30537678451279626 -436 847 1.3695135791853714 -445 847 .8575243166072135 -446 847 1.5245251969862421 -471 847 -.7678453593206107 -478 847 -1.373546400720889 -481 847 2.440915564386157 -490 847 -.09624153723228498 -492 847 -1.7302974015889467 -498 847 -.7173158203334536 -500 847 .36153071234295076 -501 847 .6876784470641953 -507 847 .3507575162430255 -514 847 .6036137907625269 -532 847 .2063514839479697 -535 847 -.6467500297949749 -537 847 .9587343042063927 -541 847 .48063195892674715 -566 847 .6052051856534141 -567 847 .448948912834625 -596 847 -.6849098660359989 -619 847 1.4714405174628882 -620 847 -.041865014381818416 -621 847 -.49824991798429713 -650 847 .07517927698968395 -651 847 2.05387746674171 -662 847 -.6695135245460999 -665 847 -2.9996880904224956 -666 847 -.054527672189915895 -674 847 -.16799778512261426 -678 847 -.34710862860090463 -684 847 -.685274998941476 -685 847 -1.2238248558855818 -689 847 -.48069961097222813 -695 847 -1.0698588695578746 -705 847 -.48169128610925993 -709 847 .08039771467785461 -714 847 2.3760432870629167 -718 847 1.7119918448877725 -727 847 -1.6387111035863497 -734 847 1.8960774484782768 -740 847 .23269681014486898 -749 847 -.23697912704008267 -756 847 -2.0260485738534197 -761 847 -.3105312193124333 -780 847 -.4397124185553053 -787 847 1.7946368117382245 -813 847 .2200574987297206 -818 847 -.14300858783938908 -837 847 .3360053980320352 -858 847 -1.0194716841921643 -863 847 2.1154077160304583 -873 847 1.0424777928246762 -876 847 .09970093315966333 -881 847 -.4491003020235623 -895 847 .3640706508713216 -897 847 -.5680729810270496 -919 847 -1.4018747825992677 -929 847 -2.4956040253143796 -938 847 .4628016856343256 -952 847 -1.2671181571060968 -954 847 -.11475799401868028 -970 847 -1.7670506691780308 -972 847 .8434390907458322 -986 847 1.8404055818288934 -993 847 -.8639247442832061 -997 847 -.5085523511500569 -1000 847 1.2625339203213612 -1 848 .1107930901594346 -3 848 1.2655570929711442 -29 848 .6561861420619459 -45 848 -.7562530609938556 -62 848 -1.268743195743109 -83 848 1.2287083903663 -87 848 .9471610457598488 -100 848 .7054273794301902 -108 848 .9714525232245049 -143 848 -2.541962130540633 -155 848 -1.8882648239334703 -156 848 -1.0407941395283196 -165 848 -.22050002683277425 -168 848 -.9376651469122276 -177 848 .6351640712136335 -193 848 -.3120056352023862 -198 848 .12591505828434804 -221 848 .5848943045956436 -231 848 -.21918432787333006 -247 848 -1.0481240174217088 -248 848 -.32860763427965084 -250 848 .4354966088580084 -254 848 .7288680196715431 -283 848 -.6772736432774985 -304 848 -.7835568712930121 -333 848 .4344587725263655 -341 848 -.25375301917615894 -342 848 .7188679232724431 -345 848 .08538492792584985 -367 848 .4909931032954472 -368 848 -.34639862454385606 -374 848 -.8042019194220229 -383 848 .12519543382438492 -398 848 -.39889933778697023 -408 848 1.5918574278928952 -412 848 -1.0776507432767461 -421 848 -.3741419766030525 -447 848 -.010191865886032339 -452 848 1.465432138833217 -454 848 -.28114951646452535 -465 848 .4379582623450695 -472 848 .8487817552606421 -484 848 -.33506332661216776 -494 848 -.8082433463205018 -509 848 -1.4936038686260746 -518 848 -.6306438519311708 -525 848 .9485229416525335 -526 848 -.46709640152007476 -527 848 -2.0658364910512987 -559 848 .143602829263963 -568 848 -1.5788958049605306 -577 848 1.50959425053445 -579 848 .3776339044941243 -601 848 .006237471949416706 -619 848 -.05073678116292098 -627 848 .8665694613412587 -668 848 .6555630626431885 -669 848 1.2036045971813 -678 848 -.13403148720775435 -681 848 1.0930332408123615 -685 848 .8921763977262845 -701 848 -.3516844055126003 -726 848 .5526754742859036 -762 848 .11226741149318477 -765 848 1.5922572115300886 -766 848 .7828041544360506 -767 848 -.3411307916079673 -801 848 .9756994833637218 -811 848 -1.2447909897419298 -818 848 -1.2544874806593769 -820 848 .3516738315867562 -824 848 .5808026246995103 -828 848 -.4524108616072483 -833 848 -.09813175709448381 -836 848 -1.0021389622095531 -848 848 .734720181316722 -850 848 -1.4731547869814225 -854 848 .3575772034092698 -859 848 -.9956285920687479 -877 848 -1.5236553857845854 -886 848 .4350520501126202 -897 848 -.634705070320418 -938 848 -1.6460152533509944 -949 848 -.6940951133364358 -950 848 .5124190651783013 -955 848 1.238757352893983 -958 848 -.04647289929124904 -966 848 1.34086887335722 -979 848 -.512413234493254 -980 848 -.08821032322940821 -983 848 .6649925536113706 -7 849 .4004902754721132 -12 849 .3095751536823371 -28 849 -.40491925186284916 -31 849 .010796548098029352 -32 849 .2581470273231689 -36 849 .07355808873477057 -39 849 .2579455211929958 -44 849 .17165044580706798 -46 849 -1.0312822863876778 -54 849 -.4442084132678256 -64 849 -.7923607360133833 -88 849 .9435155179071163 -90 849 .043358300779192935 -100 849 -.41261328390091223 -110 849 -.04026577959622077 -111 849 -.6701891058557994 -121 849 .8527655451160217 -165 849 -.32853319575319806 -183 849 -.8621862393827464 -198 849 -.8752002954506984 -202 849 -.15866567802515463 -203 849 -.19188965568145153 -224 849 -1.0048369119083511 -228 849 -.5252053414268059 -229 849 -.5668158390312702 -236 849 .4547261484276771 -237 849 -.5762800897478977 -260 849 .6487146682015315 -262 849 .42872180288641804 -269 849 .6812583790067692 -282 849 .6069328663413686 -291 849 1.3070927327383912 -297 849 -1.2502323808034088 -303 849 -.17746417301489445 -304 849 .35557400856463334 -323 849 -.05723215120624345 -325 849 1.024796871129349 -342 849 .4617298733670607 -346 849 -.9083167663248342 -353 849 -.08125336446905201 -359 849 .25397177364802775 -360 849 1.1901890682721599 -376 849 .497437949429214 -379 849 .1158554853199098 -391 849 1.2433819042240484 -403 849 .5177850648131109 -420 849 -1.3373075970264947 -446 849 .45116064591691263 -452 849 .6053946238338622 -483 849 -1.3710558700897353 -484 849 1.2393941472832901 -493 849 .0038287552814991258 -502 849 .3036823045658378 -508 849 .20409450219832895 -509 849 .15720416449162752 -523 849 .04313081929992561 -524 849 .26778048402720345 -533 849 .0406572500865578 -536 849 .34309266875448696 -543 849 -.2599156230946676 -545 849 .8278799280364679 -553 849 -.1270164662983171 -558 849 -.7189867305976191 -559 849 .01752535695226816 -567 849 .2935873460756529 -575 849 -.032189998565156475 -579 849 -.8899961078024113 -596 849 -.2195359486520064 -601 849 .9126612394945292 -617 849 -.1854193210579446 -624 849 -.9121936545431786 -631 849 1.5134109268419729 -636 849 -.014228997529069434 -649 849 -.5354877690824551 -650 849 .6656099131860417 -656 849 .3827516698656138 -663 849 .6594458574873141 -670 849 .6741302794444277 -688 849 -.8007150004242207 -709 849 .22028503760741447 -722 849 1.0175392556034177 -724 849 .794128019598104 -725 849 .18754868433140154 -731 849 -.8306579574008575 -735 849 -.6143247720832504 -757 849 .07230420217397579 -758 849 -.5920768080146558 -768 849 .18227523506844218 -775 849 .329822780475404 -790 849 -.7000223109462536 -822 849 -.11402051783317116 -841 849 -.16228918453783125 -866 849 .27744831614250437 -867 849 .4926718911882885 -868 849 1.8402313777574548 -870 849 -.15136619091775516 -883 849 -.5686924626268057 -889 849 1.0424489222878173 -894 849 .158043548770915 -902 849 -.037084854116052474 -914 849 .3008975416798243 -920 849 -.2702041194240289 -949 849 .38282952620169525 -959 849 .5728517804052264 -961 849 .4723542127632468 -963 849 -.9147760428687904 -988 849 -1.159538853795915 -993 849 .5614351086025487 -5 850 1.2896224939922947 -16 850 -.6139278685028405 -30 850 1.1533358575955528 -41 850 -.5101404782609353 -51 850 .4963456291913647 -64 850 .8545673458751505 -66 850 -.29827694905797314 -128 850 -.6057452741085861 -155 850 .6039894305293705 -162 850 -2.2821274534351055 -163 850 1.3849401370463188 -170 850 1.290451609508333 -184 850 2.8734970128894726 -193 850 2.8296863308822218 -196 850 -.8728701836370832 -205 850 .14079437347026547 -214 850 -.7036441116188696 -221 850 .12661304564200332 -230 850 .09757343683691011 -232 850 1.8316921602087586 -237 850 1.356665261188211 -243 850 .38752530642472627 -257 850 -1.1397887524611479 -268 850 .3878040872314848 -271 850 .94576143513872 -282 850 -.23829149339377106 -286 850 2.6954103555487903 -292 850 -1.6938605970817637 -300 850 -.8878713063545007 -310 850 1.359574748468246 -322 850 .4225309366787515 -349 850 -.15780896858424528 -361 850 -.0594956550720369 -387 850 -1.1279860251358553 -392 850 -.11720160495768847 -419 850 .7903687167359627 -422 850 1.0069473855636721 -425 850 -1.4966906869493695 -433 850 .36056229979446497 -479 850 -1.0312101985725834 -490 850 .34209126709285215 -504 850 -.2548533228243245 -538 850 -.5439904381037186 -539 850 .40324861681040153 -553 850 2.026055653947156 -561 850 .39631459094698845 -564 850 -1.5865029178607961 -583 850 .01838092602965949 -604 850 1.8110610059536663 -652 850 -.09755431644124783 -668 850 -.9561018210031816 -689 850 -.41552780162774117 -696 850 -.9803286654361072 -699 850 -1.209860497887807 -725 850 -.15727396497896648 -727 850 -.037504856640765256 -755 850 .3595140502518692 -798 850 -.7743725403621107 -816 850 1.0136558108942093 -840 850 -.7470662111477725 -850 850 .10613593413715913 -856 850 -.49359177471232046 -863 850 1.0079250819689416 -881 850 1.7339862915487745 -883 850 1.6105121900703616 -898 850 -.5890672781775831 -911 850 -.7733977400370182 -918 850 2.006303219133995 -922 850 .023079065290962812 -925 850 .4829066680677282 -927 850 1.8301364547911485 -931 850 .49387406712896986 -961 850 -.045795671890249884 -972 850 .7661352746401514 -976 850 -1.6636117576186586 -13 851 -.09224957547394058 -27 851 3.0100576278369813 -29 851 -.8779100237423069 -41 851 .3049082661469923 -46 851 -.7426180407246061 -63 851 -1.3105084316367008 -101 851 .06884455097978678 -107 851 -.9350628217067788 -112 851 .5588758901822237 -114 851 -1.049030861173935 -153 851 -.09449170953064917 -159 851 .2918560667436037 -166 851 -1.3158769557855814 -198 851 -.1896673260781883 -203 851 .10221840948450614 -204 851 .43658471937962817 -206 851 .12207798904000772 -218 851 -1.204835433216796 -222 851 .3219131454217771 -247 851 .31280285815403486 -251 851 -.10987343223986704 -252 851 .6806071526838531 -259 851 .43355581164970425 -273 851 -.8628766673485447 -281 851 .6068402838364637 -290 851 -.3863190053159349 -297 851 -.44453370930569236 -303 851 .0008341120145519965 -307 851 .8526899005203735 -315 851 .7597776750503872 -325 851 -.22863998049657971 -333 851 .8936678032196625 -347 851 .5835637380904246 -393 851 -1.5711657433412693 -409 851 -.9101107935811551 -414 851 -.2733958114642669 -428 851 -.42158038786092683 -433 851 -1.1076767746320022 -445 851 -.33249178466875773 -462 851 -.41776562263328176 -463 851 -1.264868481265821 -469 851 .925375282878048 -480 851 .1381712213222339 -507 851 .29594970453334274 -523 851 -.36570358644370576 -524 851 .6526222436359754 -537 851 1.530429203220516 -538 851 -1.4339206671037192 -540 851 -.32901155439179847 -550 851 -.18964694272255056 -562 851 .5242197075726958 -574 851 -.4365403342389715 -575 851 -.8050457779432048 -587 851 -.09294963992434362 -595 851 .6706829811277932 -618 851 1.1109141656915051 -619 851 1.3378446055282902 -625 851 1.3842847506483709 -641 851 -.35033023055814044 -647 851 -.273163119121583 -653 851 .6375176147625393 -656 851 -1.017188089041762 -667 851 .38479709878603646 -677 851 -1.0194959919621498 -679 851 -1.5310356212257576 -701 851 1.0466047832882537 -703 851 .5022172186522096 -706 851 -.5359603360967715 -724 851 .3805194700916332 -747 851 .7206396452332084 -754 851 1.0340179224784252 -769 851 -.7367212896254478 -776 851 .21909484039035493 -796 851 -.9098137577819403 -797 851 .02228889223631436 -801 851 -1.7636715006562154 -802 851 -.032998092005703375 -808 851 .7392448189036048 -820 851 -.6402164359339508 -825 851 1.9016975963979406 -864 851 -1.4296355842201594 -865 851 1.4823962387856349 -874 851 -2.298171643379478 -879 851 -.02634502611886866 -882 851 -.032500498647924383 -886 851 .9541559905771098 -910 851 .7908859789345537 -914 851 -.07717527462224319 -923 851 1.3009549632581587 -930 851 .7707298651410629 -940 851 .4151893021041328 -944 851 -1.0979243017896685 -974 851 -.691990415018124 -989 851 -.4039853851517943 -993 851 -1.4588001032954787 -999 851 -.8669592686173018 -1 852 .4030019172074513 -6 852 -.7149162276479923 -9 852 -.5585103431738924 -14 852 .18908045869446 -17 852 .9840911471960838 -22 852 1.6121564156772503 -26 852 -.10777475283662423 -45 852 -1.7038011001661897 -47 852 1.8629687492466351 -48 852 2.754147335527065 -50 852 -.19148375594391995 -68 852 .2417731666218369 -81 852 .5857736587587759 -84 852 -.5259619053526658 -85 852 -1.5165207300099652 -91 852 -.1933856772276434 -97 852 -1.5547536083129754 -139 852 .25426348090764184 -145 852 -.7505252180957735 -146 852 -.3562611435991764 -160 852 .08858547069596258 -165 852 -.6366603519388934 -183 852 .632981092603368 -209 852 1.0942068672888863 -214 852 .5142686683701759 -218 852 -.8561993252779945 -222 852 -.23103299946033545 -224 852 -.9492333441594591 -227 852 -.7615433367817108 -233 852 1.0911681776542743 -239 852 -1.7083323957303105 -267 852 .5808309172220213 -268 852 .7637447279832178 -275 852 -1.458942982703831 -278 852 .8943457871358389 -288 852 -.2352666431963002 -296 852 -.3297291775709418 -301 852 -.8084026421703615 -307 852 .09334823912099935 -310 852 -.4374796064568689 -333 852 .6061947964619712 -336 852 .38907895177818635 -341 852 -.18003258798112978 -348 852 .7999264635909076 -361 852 -.2482499706857214 -375 852 1.263217403140029 -393 852 -.030833236694952998 -423 852 .4042503294925006 -434 852 -.9966177039761703 -436 852 .2427641141248995 -441 852 1.0493521360535627 -451 852 -2.279209583761946 -460 852 -.18768126849486308 -461 852 -1.2202122549122962 -463 852 -.18488210417628093 -464 852 -1.7339416610775267 -468 852 .496988409563731 -478 852 1.2843954674600762 -500 852 -.01761836782878816 -518 852 -.3795614199799296 -527 852 -1.0096550873734484 -532 852 .33498024932070397 -546 852 .12476513815777447 -559 852 -1.1157109560042116 -566 852 -.07153676950777864 -584 852 .7979081668759958 -587 852 -.926952262335905 -588 852 .22999102935470775 -595 852 .6483609297286473 -598 852 -.8154089474022506 -603 852 -.3555239422688928 -612 852 -.8123241534889551 -616 852 .37364949095094524 -619 852 1.0454363575193701 -635 852 -.05039949386732548 -646 852 -.2806986681667488 -661 852 1.579170551083052 -710 852 -.6436980447419636 -720 852 -.4291393983014905 -746 852 .23005566599573543 -792 852 .5942715537508843 -794 852 .6889356972207602 -800 852 -.028853921000291355 -829 852 -1.567010335400682 -839 852 -.21491405598840302 -845 852 .34270840128811203 -849 852 -.10966929447444887 -868 852 -.6069243599054269 -872 852 .6453784678977541 -876 852 -.11135815466562288 -883 852 -.5417503796639657 -889 852 -1.2901871712056556 -894 852 .5276193931764765 -902 852 1.1623307273576369 -906 852 -.4902874808742013 -913 852 -.0576315199388146 -921 852 -.5543973432716143 -933 852 .8599525257110416 -939 852 -.218611797631776 -947 852 1.5218582017008633 -978 852 -.757088536913245 -981 852 .8156556150362131 -998 852 -.250073435094572 -8 853 -.12461504727712056 -12 853 -.30251361568445606 -20 853 .6340891287692139 -40 853 .0943524676626889 -42 853 .3209214336907389 -43 853 -.589403419924266 -50 853 .1488889011140928 -70 853 .7917054965977943 -86 853 1.0598440543163203 -93 853 .45848243742646416 -100 853 -.49066638821404157 -102 853 -.15076700030795812 -116 853 -.2398693505465368 -123 853 -.5056149851050404 -131 853 -.4743689874685577 -141 853 -.28809298649722215 -153 853 .08152870655500719 -171 853 1.0900377425910874 -189 853 -.6699903909703304 -196 853 -.08993047679514773 -219 853 -.12521825630737624 -223 853 .5522053503218434 -225 853 1.113104081817546 -235 853 -.22076989130418634 -236 853 -.5056018855401421 -239 853 1.526986597782031 -240 853 -.726307482172505 -241 853 .7645189797299805 -251 853 -.5679493435471373 -262 853 -.7870242452777548 -274 853 .07314272787766654 -286 853 .3768234416142825 -291 853 -.1466495406450994 -298 853 -.8281079984981861 -299 853 -.5244471572530348 -328 853 -.2536709101375605 -336 853 .17629081511563333 -338 853 .9351010209848849 -354 853 -.4551982113257891 -368 853 .41290539318959074 -389 853 .28443128134388235 -403 853 -.6088038111152445 -407 853 -1.068992149183408 -412 853 -.050841614841408686 -415 853 -.10021482789858406 -447 853 -.3447678555531231 -461 853 .4326563624006931 -474 853 -.7356339398028551 -483 853 -.20385867206635422 -487 853 .9458649955121731 -488 853 .5221975339029663 -493 853 .26707118550915676 -501 853 -.7817404199255816 -503 853 .9444828480616181 -509 853 .5075921121185085 -514 853 1.152907148296496 -521 853 -.22419040852181582 -530 853 -.004483702444313176 -547 853 .10677173020070727 -571 853 -.6393241699752109 -575 853 -.8364792843958341 -608 853 -.47260783579301824 -614 853 -.34346732061893137 -625 853 -.2407598490469061 -648 853 .5944114968647207 -658 853 -.7665561251947095 -661 853 -.9859790694018632 -663 853 -.6507111563903012 -672 853 -.3981615989196241 -707 853 1.2405232885180262 -709 853 -.7931475980347036 -727 853 1.0043338017468963 -732 853 .13978514483003623 -735 853 .17831626212943225 -747 853 -.6338780763316947 -757 853 .3648279916114445 -758 853 .3904483538405955 -781 853 -1.0207352078358625 -782 853 -.18369432876502292 -792 853 .2288633849415693 -796 853 .7340079770344146 -819 853 .1425509375455476 -820 853 .11719484206547039 -827 853 .7352674481335847 -829 853 -.00032607862716230174 -834 853 -.026956056653940796 -837 853 .39543687619711787 -840 853 .921097627453207 -848 853 -1.1911605575780502 -854 853 .42669187823408244 -862 853 -.1830605502075422 -869 853 .8019586278650653 -870 853 .7757692236710503 -904 853 .2375376415205053 -918 853 .9323272821367983 -920 853 .8115786435031827 -948 853 .25799409160062037 -957 853 -.8322796458258723 -959 853 -.3356851646218342 -962 853 -.16643686298097612 -970 853 .1959428982147693 -972 853 .9474735165930634 -983 853 .0955860372314936 -3 854 .03626988282705342 -12 854 -2.886652879255069 -16 854 -.24536207459651424 -20 854 -.2587655288240064 -34 854 1.5293486948107617 -48 854 -1.276405122093128 -76 854 .4327693514018418 -104 854 -1.5558332373062034 -132 854 -.49063094895127185 -134 854 .3899347553243325 -135 854 -.7205064922361217 -187 854 1.0757952629554726 -196 854 -.17895762054019065 -230 854 1.1314701637786329 -246 854 -.22581289742308103 -253 854 -.22274500718459153 -278 854 -.5021428365128342 -280 854 .7088400279746327 -283 854 1.7066743768134183 -295 854 -1.310713614833595 -303 854 -.6190465798157191 -305 854 1.1304122712077889 -336 854 .07610581584436378 -343 854 1.449713874339386 -345 854 .7346165139612904 -374 854 -1.9783244058558358 -393 854 1.696070965980797 -426 854 1.8252821845175833 -427 854 -1.5110569872449358 -455 854 1.3515981179293115 -466 854 .5879996623935015 -496 854 -.22982207680183256 -539 854 2.5824848908741393 -542 854 -1.5462994796769074 -554 854 -1.0798889522863007 -560 854 -1.6178588566452476 -563 854 .4910275318680114 -578 854 -.5452626113869803 -589 854 -1.7572525443636318 -608 854 .47578637164542636 -613 854 -1.2760490486860363 -620 854 .33081768263545897 -661 854 -4.177535370662091 -666 854 -1.90847932902154 -674 854 .14414268580579087 -685 854 1.4820601097364778 -688 854 1.823270940898859 -703 854 1.9602407359922631 -784 854 .2503163744643631 -785 854 -1.1275491751786453 -799 854 -.12941670061772223 -808 854 .26521564599691516 -829 854 .131509352286879 -849 854 1.9819141696355551 -858 854 1.2249248337171332 -861 854 -.8684575726140712 -865 854 -.3711500877242345 -882 854 -2.5119220256624923 -901 854 -3.0186006168294477 -907 854 .8541953548905729 -912 854 2.7130498956687474 -924 854 3.208500959346903 -936 854 -1.8624757307679487 -942 854 -.7781891921327957 -954 854 1.5901511304300764 -958 854 .32859092898939657 -964 854 -.47371077456077026 -972 854 1.753353446759375 -976 854 -.625967154806393 -978 854 .09731730612951407 -999 854 -1.9954251689988434 -14 855 -1.0612919867023438 -18 855 -3.4164128709474606 -19 855 -.9912791224727109 -22 855 -.8710257961555343 -24 855 2.4206535110965164 -26 855 -.05889241271332703 -38 855 .1898309216803494 -67 855 -1.4009012070091669 -89 855 .19342257274443986 -103 855 1.734914098119577 -105 855 -1.2745013656163542 -111 855 -.18509680949085924 -136 855 -.6695971300732597 -188 855 -.358284049956692 -200 855 1.5929105486754496 -201 855 -.3591533600811296 -205 855 1.1228803851435603 -206 855 -1.706620454054481 -232 855 -.846788262283811 -237 855 -.08350570554252525 -246 855 -2.796116717601562 -254 855 -1.2102553097998678 -255 855 -.1090387444937763 -266 855 -1.5670913307060432 -268 855 -.18278948042158166 -297 855 -.010922469034907803 -305 855 -.34814135394481893 -307 855 -.8734548525156798 -308 855 1.7363544829975306 -315 855 .4733946252740353 -319 855 .21495028069808278 -334 855 -.9140228964935996 -356 855 -.8321634824343404 -357 855 1.1983710871239566 -377 855 .8450029833380268 -400 855 .2131986141118609 -417 855 -.7237859330609763 -419 855 -.0745918921322772 -425 855 .7594239220587801 -438 855 -.3230675500916176 -439 855 -1.8761952052320638 -444 855 .27900554931610116 -473 855 -2.4536712366088342 -483 855 -.04804185916673266 -484 855 .8657804653265291 -488 855 -.0661755302913001 -511 855 -1.812085043982073 -531 855 -.7596452446190773 -541 855 .21473227749676485 -549 855 2.528451445246585 -561 855 -.40025375580506256 -582 855 .07148925373151722 -588 855 .2660681194908368 -591 855 .005609291467692547 -600 855 -1.6248820496391663 -601 855 .9909794102354881 -609 855 .42141163039307217 -616 855 -.6240625882427144 -640 855 1.8209451236227143 -648 855 1.1210171420108033 -677 855 -1.6798059023454106 -686 855 1.304786416551246 -690 855 .19306157688034134 -703 855 -.23463814872039057 -712 855 3.2578425382729175 -718 855 1.1496526028254437 -722 855 .8363474137357577 -723 855 3.551358954569043 -728 855 1.9611984748207056 -747 855 .8802099485469937 -754 855 -.2771129167062431 -825 855 -.3926494160425326 -843 855 -1.6053288353200408 -858 855 -.8828697163384039 -865 855 1.022035633158843 -867 855 -1.222940392021518 -875 855 -1.0469368532708203 -899 855 -1.168449874724253 -906 855 .12271864335772453 -908 855 .12534448180516927 -920 855 .9576342915706891 -931 855 1.859122569966182 -933 855 -.5700778231966626 -942 855 1.3834767704208586 -945 855 .9039728027686628 -965 855 -2.342602301176284 -977 855 .007589468448822356 -994 855 -2.0311950665510743 -8 856 .12146468819470699 -42 856 -1.4636016210545457 -77 856 -1.859302365373943 -83 856 .3053136224679075 -91 856 -.8241502655105204 -92 856 .8029612089650731 -95 856 -1.1154321928722277 -111 856 .41151969700620056 -118 856 -.523037548554404 -129 856 -.44207025090190033 -136 856 1.5026394967131043 -163 856 -.15776003364123453 -165 856 -.21476720722662102 -168 856 -1.2924454183890752 -169 856 .39916313707517986 -172 856 .6619198909987765 -186 856 .661133771502002 -188 856 -1.1089975219507584 -192 856 -.5529849978931958 -203 856 .7187018696297363 -211 856 1.2432584304314391 -214 856 -.25464346524254516 -226 856 2.2844774551198768 -235 856 -1.7870207831869787 -241 856 -1.2098383624124345 -249 856 1.1338476952097063 -256 856 -.6046985070045866 -277 856 1.7713691140276837 -279 856 .03390450346033837 -288 856 1.6416535099214737 -290 856 .7000612969257292 -323 856 -.20611868347455609 -324 856 .124094892806027 -343 856 -1.1053614843841653 -353 856 1.9192742381772843 -357 856 .8352060823230798 -358 856 -.0971963324625203 -365 856 .2976848580402154 -380 856 -.3894102126204269 -392 856 -.25795085602359363 -406 856 1.4966088724632154 -412 856 -.9316738842210945 -418 856 -.6561985897464259 -426 856 -1.286322133521574 -427 856 1.8896691091963222 -431 856 -.5837712267700174 -432 856 -1.1161344764850594 -448 856 .008428703766763579 -452 856 .29820622634060134 -472 856 -2.1767961368191564 -486 856 1.111476670432118 -496 856 -.2695537227853386 -513 856 1.05912836312596 -524 856 .39795707301738437 -526 856 .5745719117763652 -535 856 -.19190599346676912 -577 856 .3924591891862359 -597 856 1.06502842353821 -603 856 -1.2195123957030585 -681 856 .42804838442626325 -689 856 .18505879664067956 -694 856 .9826159930281754 -697 856 .42111170581515084 -704 856 1.329821319431996 -756 856 -1.9591934634054569 -764 856 .9792114954897403 -767 856 -1.2915099413460913 -780 856 .5132084984928392 -800 856 .5792646310742257 -813 856 .4779448428221028 -818 856 1.3402404125539373 -819 856 1.7180374106803358 -830 856 .4413505169796129 -858 856 -.058384788395358905 -861 856 -1.1162398650054761 -865 856 -2.1229653074763997 -879 856 -1.2762188009644349 -899 856 1.39931304547447 -900 856 .43030041268325236 -934 856 -1.3020844053920302 -938 856 -.45368354636870895 -940 856 -1.076089269460816 -941 856 -1.6425237958516772 -944 856 1.5952645471402283 -946 856 -.5695128186541789 -947 856 .29715454635642835 -965 856 .168526875504571 -969 856 -.565932013830077 -989 856 1.3155404329357938 -994 856 .9005624576958304 -1 857 -.8498706477399313 -4 857 .4021518931499356 -35 857 -.2881581621889819 -37 857 -.16316820705173435 -87 857 -.4946085584776587 -90 857 -.37157526152243764 -106 857 -.55704828970329 -118 857 -.01949064353717462 -136 857 2.1646163207543996 -147 857 -.1559858985334356 -150 857 -.7050580089288428 -174 857 -.6716494672263332 -176 857 -.6774274018189304 -186 857 .0599162401485515 -188 857 -.17938462045064252 -201 857 -.847338497961586 -203 857 .17593326560426747 -209 857 -1.4123483706215842 -211 857 -.003160351926462357 -227 857 .9663492498357293 -247 857 -.6332895299576254 -255 857 .47838048285544876 -281 857 .1003746297144491 -288 857 1.5308189738655344 -305 857 -.08515431755773917 -306 857 .17197696811909643 -308 857 -.1068807256048924 -309 857 -.354104031634021 -323 857 .9590591463702964 -333 857 -.948676939735889 -342 857 .27529133864091787 -346 857 -.3565997900144253 -365 857 -1.1027733119032423 -376 857 -.03017599553928807 -385 857 -.35556249775253457 -417 857 -.03121676483392888 -431 857 -.3587642810652582 -435 857 1.1162225354932018 -439 857 .38910020939366 -440 857 .03540875382878643 -458 857 .3965590958699691 -460 857 -1.1215751163801335 -461 857 1.0173659059805464 -476 857 -.2111960161158789 -489 857 .6236806633412726 -504 857 -.07602454508377741 -548 857 -1.2039377917184666 -550 857 .6844538218961423 -551 857 .9171696394911626 -562 857 -.003720414638343411 -564 857 .3477588157774888 -571 857 .29298563813285255 -573 857 .023322072567272117 -583 857 -.1024277385556867 -588 857 -.3413326029408711 -608 857 -.0485226138595547 -615 857 .022974872628236304 -625 857 -1.2662918790179012 -630 857 -.8067623677335032 -632 857 -.6181462605479132 -637 857 1.5153463836553802 -667 857 -.6170383059769693 -671 857 -.4127420551663613 -690 857 -.5537365716054511 -693 857 .09067564987711257 -694 857 1.0579852327264767 -696 857 -.8941476568366994 -743 857 .9204550411042667 -746 857 -.6906350754618588 -771 857 .5820517196769133 -772 857 -.6002851023693726 -780 857 -1.3301158027579798 -789 857 -.5607074753744297 -793 857 1.80071240758044 -796 857 -1.4525142720320292 -803 857 1.1093019887873632 -806 857 .7947178760347862 -815 857 2.1867650938025665 -838 857 .9524269298343082 -869 857 -1.2210693953415126 -876 857 1.208704373423339 -902 857 .6889529402895144 -914 857 -.5460301112106949 -925 857 -1.1319432286714866 -954 857 -.22845184987252415 -955 857 .1750202929647609 -962 857 2.0002564754780425 -975 857 -.6832196214263848 -980 857 -.26836070971989334 -992 857 -.2548349126412721 -7 858 1.2375759061079896 -22 858 -.20612766523155546 -25 858 2.098033835046814 -27 858 .13617009628228924 -35 858 -.007794418625476127 -47 858 1.243748940450115 -60 858 -.21727396348596587 -61 858 -1.9400093504561504 -83 858 .8944660836059679 -105 858 -.008067782653041589 -107 858 .07495293716975512 -118 858 -1.6576359260090445 -121 858 -.6723993983085201 -122 858 -.22237678539711683 -127 858 -.9043613523924192 -128 858 .8098175697195703 -131 858 .5955071094738151 -143 858 -.3060849964474122 -160 858 -.9069447222558707 -163 858 .6839552959485491 -173 858 .04847012366388153 -178 858 .32928971439818044 -190 858 -.4247318619637545 -205 858 -.8648099749739439 -229 858 -.20409673075074847 -230 858 .69416899944036 -245 858 .7415252881352279 -260 858 -.0968596018909281 -264 858 .16976234075892035 -271 858 1.2851888843439856 -303 858 -.5420859347778235 -307 858 -.8898984566748932 -308 858 -.34079499618050757 -317 858 -.8582337388783319 -332 858 -.16541421001769857 -341 858 -1.2568812614923806 -350 858 .17796619768864946 -369 858 .28511178025222494 -370 858 -.4583946595622117 -377 858 .2703617372005006 -379 858 -1.148878055492109 -385 858 -.7501803849616453 -388 858 1.0856112679007508 -391 858 -1.201573265206265 -392 858 .2996099875004736 -395 858 .8753247624927945 -409 858 .5833823809013948 -417 858 .6791762417214408 -424 858 .8755627144853086 -428 858 -.3227435463820047 -453 858 -.4457784064589189 -462 858 .17384763286105548 -466 858 1.310734291456186 -474 858 .8397058513961668 -478 858 1.0385084322204803 -481 858 -1.194702242745139 -482 858 -1.0012111405296207 -484 858 .06354840550463664 -499 858 1.0087922052436558 -506 858 -1.2658223497251215 -534 858 .6158981331374492 -537 858 -.6705672933038876 -545 858 -.8938644461620372 -551 858 -.16582318390581197 -552 858 -.2710072189140661 -557 858 .9442253208466544 -578 858 -.5610185199882088 -588 858 .46348449004714376 -603 858 1.4201965245859691 -617 858 .8383459550017194 -625 858 -.2705804378930984 -639 858 .9198480436085237 -642 858 .8789898676753878 -655 858 -.35419876193443794 -656 858 -.17971039088588528 -663 858 -.10215833167329152 -681 858 -1.6604144307803983 -688 858 .5161356604395776 -696 858 1.5407050331091334 -704 858 -.13522792466630812 -714 858 .34023277518242945 -738 858 .47504948720416396 -751 858 .2663698805861642 -755 858 2.196710176230849 -775 858 -.6070801328476523 -778 858 -.06140281466468328 -789 858 -1.3533695105290178 -793 858 -.6097030105779457 -805 858 -.13124933822563556 -809 858 -.17525708020814923 -810 858 -.06091772423447776 -819 858 .4224887628621629 -824 858 -.03462581487876736 -871 858 -.4695654906565821 -896 858 1.7539391636920336 -900 858 -.13631640875874945 -918 858 -.003751429675488374 -924 858 -.2673866826026562 -934 858 -.6480377014263585 -939 858 -.5202911579758432 -951 858 .5731619688050646 -954 858 -.14135346533477205 -955 858 1.867632023860209 -958 858 .6976199551571315 -966 858 .0249532941766734 -980 858 -1.2990583705174918 -5 859 .09967092370107802 -12 859 .35230209902710247 -21 859 -.6464707189161361 -24 859 .48544062484219247 -35 859 -.03232608280395721 -37 859 -.15078597116900816 -45 859 .29207230753351154 -47 859 -.595905775957203 -81 859 .3172680804853352 -82 859 -.05027972282383783 -94 859 -.2373876243317295 -101 859 -.5805628200404981 -107 859 -.6956345088062661 -122 859 .2716259246557466 -128 859 .7134593598448946 -136 859 .24631453458139546 -144 859 .06486947912210828 -149 859 -.9243517394322813 -153 859 -.036597741394176694 -173 859 .06879124987576571 -175 859 -.5112760812762004 -183 859 1.124769868715588 -196 859 -.3384518733023293 -197 859 .7172718498016563 -219 859 -.033374772050626667 -226 859 -.018616225351526003 -235 859 .0625824530514302 -256 859 .9613848929317119 -259 859 .5205692529843463 -264 859 .016098113833278728 -266 859 -.12397821681082061 -289 859 -.786480521444533 -309 859 .04641186778019314 -319 859 .11563390861388571 -324 859 .5302230554115935 -363 859 -.6063333861178053 -364 859 -.18418887544287602 -381 859 .26252922140248913 -382 859 -.5230040468094075 -393 859 -.8743924165871215 -394 859 1.2760511407162045 -407 859 -.6246294941650745 -409 859 -.39122256380608283 -410 859 -.8895589452325686 -412 859 -.2468384921747945 -452 859 .23977380486273284 -462 859 -.32792131697716953 -467 859 -.2278979661953498 -468 859 -.21116165793906563 -492 859 .4455021429187328 -515 859 -.02241769108400843 -546 859 -.15394128685706468 -547 859 -.2722195451791119 -548 859 .170039608424191 -577 859 -.71470014531797 -585 859 -1.513146651031536 -614 859 .2493481247064989 -620 859 .6630358382435444 -625 859 .005970476459679908 -626 859 -.6564026327711678 -630 859 -.32586200488172334 -633 859 -.23552729402086672 -637 859 .3589574341339128 -641 859 -.03718775309693935 -646 859 -.7999312280998896 -654 859 .21567229952471245 -659 859 .5352280036638795 -662 859 .13420898951124602 -670 859 .8373772919014385 -673 859 .07917568480910214 -676 859 .17106736349230314 -689 859 -.5590467358266862 -703 859 .2397283698915897 -719 859 -.11761593254833005 -727 859 -.42315025807948065 -735 859 .3166924633712438 -742 859 -.7191391896609785 -748 859 .009488197340141974 -752 859 .1478906003537271 -810 859 -1.0707012692366722 -811 859 .23995311811458833 -820 859 -.4527473450853816 -822 859 .25641579297486905 -838 859 1.324175057643683 -847 859 -.9144163285495269 -863 859 .45565753172542334 -866 859 .31924045942147555 -873 859 -.08604714797598415 -875 859 .4012333489590128 -877 859 .11079960958657797 -879 859 -.35870314078264326 -895 859 -.6260267121157549 -905 859 -1.4085957240065476 -906 859 -.8896461216861873 -908 859 .4687057820699419 -919 859 -.6477145721553366 -930 859 .03411872063802415 -950 859 .5091390550786559 -955 859 .19169255289620454 -966 859 .2636838764009555 -974 859 -.5523955239159374 -976 859 -.32882054821836415 -979 859 .09250517563220242 -980 859 .36612914075292413 -982 859 -.0007985028344288537 -996 859 .13430863479952895 -997 859 -.6746617977462185 -5 860 -.8152884525315092 -8 860 1.0998413240305003 -18 860 2.327010993140905 -46 860 1.317165994156224 -51 860 .8415194928694312 -65 860 .5925935416243013 -68 860 1.4153279976819348 -71 860 .3710566486783462 -91 860 .8999423640873127 -113 860 1.9169800973489346 -168 860 2.095146648168134 -172 860 .8325553660593065 -202 860 -.6047682804541845 -216 860 1.0785522888098673 -219 860 -.26180973034186866 -224 860 .5382374565531233 -228 860 -.049298498461414236 -238 860 .5678640526529232 -246 860 .762998684081641 -249 860 1.6592879612552636 -262 860 .34865344696091316 -265 860 .038216861451043554 -269 860 .04193885816758744 -271 860 -1.2757099266969123 -284 860 .8978073705287728 -287 860 -.36191925896435423 -290 860 -.7423718249364968 -295 860 1.2055254674670142 -318 860 1.3364872620855455 -328 860 1.2600231353234146 -339 860 1.2408625179401058 -341 860 .3288752563297394 -343 860 1.1338919997210863 -358 860 1.236705838638978 -368 860 -1.9661997057766645 -370 860 -.15877093133873593 -379 860 .13011315547687044 -382 860 -1.1312680273804834 -415 860 1.1826920128256093 -422 860 -.2001178486162891 -424 860 -.9385852113615171 -428 860 .8435342777000058 -461 860 -.6624115384284762 -467 860 .414221940027321 -491 860 .6937782830470839 -492 860 1.7749837420503887 -494 860 -.4015925564474078 -506 860 .46135029063386984 -508 860 -.6396932354749555 -523 860 -1.3110919325958796 -558 860 1.3253460707007463 -563 860 -.5727815452446192 -568 860 2.3651839307824227 -576 860 -.3226967120762576 -579 860 -.025043255911067333 -583 860 .7368773901125543 -587 860 .2648796030778294 -593 860 1.2463397904040672 -622 860 -.04931835461043449 -637 860 -.8109056611665303 -652 860 1.0556760733611081 -675 860 2.2417246682211145 -679 860 .3896958132450933 -686 860 -.9967481987143872 -696 860 -2.065418716802924 -699 860 -1.9327722881643064 -711 860 -1.006127061083895 -719 860 -.5962184577797414 -726 860 -.5065058094013937 -729 860 -.021520651204743176 -748 860 1.1711102996333917 -749 860 -.7161437574051328 -760 860 -1.799702038521494 -762 860 -1.0188425830767374 -776 860 -2.2454978091334277 -793 860 1.5044029977984386 -796 860 -1.4878552646621421 -804 860 .7753402989657628 -810 860 .36071268693467434 -813 860 .35660655529424895 -817 860 -.17767544956634704 -819 860 1.4041033355245718 -823 860 1.7608959460364488 -828 860 -.10688701236691135 -830 860 .22440574372869185 -837 860 -.32620978440654647 -840 860 -1.370243826552717 -850 860 .551452471102388 -852 860 .8209227808126562 -855 860 .7777165247352859 -856 860 .44022924523315915 -891 860 .7787781112619926 -897 860 -.6024941334709025 -907 860 -.41068795394917 -934 860 .581866523721773 -959 860 -.10311024141047637 -972 860 1.122771684901233 -973 860 2.0184232316777524 -994 860 -.19549999605185847 -995 860 .4846408982106274 -23 861 -1.1061323845171085 -44 861 -.6930601763498452 -50 861 1.136257291694491 -57 861 .320950288392807 -62 861 -.3576603978875556 -67 861 -.2417975411547968 -68 861 -1.4689163499036852 -89 861 -.6304073355233322 -96 861 -1.1519256468687564 -105 861 .3865716887399773 -106 861 .49313260952102556 -129 861 2.891101037452971 -130 861 -1.6589392627654287 -135 861 .2664123359907546 -138 861 .8247506776128911 -142 861 -.09060574513013925 -145 861 -.4773212987561227 -158 861 -.04465650329659744 -174 861 -1.1340515890082667 -183 861 1.926087319197504 -218 861 -.7853704852851917 -247 861 -.9007815927982616 -248 861 .1935084847769399 -273 861 1.3431873682043534 -278 861 -.04184322938351007 -290 861 .17834863602269257 -292 861 2.67787773936558 -296 861 -1.3049867504085024 -297 861 .29641081021118815 -335 861 .24876536949724098 -337 861 -.6428207557221882 -351 861 -.9409287771716248 -357 861 .15281184614448928 -367 861 .8454660935880673 -379 861 -.6198663847855744 -382 861 -.08733576919134069 -384 861 1.2104141538997164 -385 861 -1.8833550943916697 -386 861 -2.1305141766132643 -397 861 .2595316179854912 -403 861 1.445100865945121 -406 861 -.7861978701983996 -412 861 -.8767815237984435 -416 861 -.48063031847437965 -455 861 -1.226039936546257 -461 861 .7628693414030114 -462 861 .1306570915264473 -477 861 1.647664650937773 -485 861 .7709117755014752 -507 861 -.6148221193158794 -508 861 -.693512980212898 -518 861 -.4703305988668864 -519 861 .7562167148024823 -534 861 .34516266479087404 -535 861 -.6163802466566798 -537 861 .8177501259853522 -541 861 -1.1104448717721354 -556 861 .8940635886772448 -582 861 .4730696811637431 -583 861 -.9707393565528374 -612 861 -.12376214547789574 -614 861 -.817208943692294 -615 861 .5819604021902848 -622 861 .6471118460082775 -626 861 -.7586659445555539 -633 861 .10946064158968807 -640 861 .6413675136892328 -643 861 -.004332031694042615 -650 861 1.0316759761172656 -672 861 .6614254559971942 -686 861 1.1746615629010069 -692 861 -.975691112492033 -700 861 -.057686175671184205 -757 861 -.5831458388092422 -770 861 -2.465528711710849 -794 861 1.4879888852684124 -796 861 -.16516892289403073 -802 861 1.0668195356882422 -810 861 -.14773368912226933 -816 861 -1.309259095863598 -829 861 -1.850651185081381 -848 861 .0936410081120615 -856 861 .947765004107435 -879 861 -1.30692915339675 -885 861 1.4909501760089567 -900 861 -.027492036295213684 -935 861 -.1282167255353842 -954 861 -.6159765407148314 -955 861 1.601170595974774 -979 861 -.5181243652909218 -990 861 -1.3226824172707288 -2 862 .3002532093551815 -3 862 .0002484673850212801 -21 862 1.2784902630365467 -25 862 .4266260534039962 -43 862 -.30356402037459407 -82 862 .633529928652478 -85 862 -.30793549020245214 -90 862 -.2639178335547407 -91 862 -.09068712398763783 -95 862 .09242479515859253 -96 862 .4633978684679707 -118 862 -.8699352774500945 -131 862 -.4777648816881463 -136 862 1.2603436662965117 -149 862 1.951627930009144 -153 862 1.203451617947605 -156 862 .5952303740291575 -164 862 .20147225510283506 -221 862 -.04816971682171525 -228 862 -.7921993663857776 -240 862 .724925339419798 -247 862 .23249479829786157 -253 862 1.1954704719120204 -254 862 2.2696971472631207 -262 862 1.0296125219385568 -271 862 .10923169203642755 -276 862 -2.4793015082521097 -281 862 -1.066525628746154 -290 862 .013584099847926079 -298 862 -.9328162464485639 -321 862 -.23875940719462382 -342 862 .6797785180656806 -347 862 -.7923122827961677 -348 862 -.7669214957950006 -354 862 .11639253513040401 -368 862 -2.012973515544499 -375 862 .9479383102396631 -383 862 -.8682598199194638 -402 862 .04201242396828958 -421 862 -.25718428706416196 -425 862 .36683652580163884 -435 862 -2.0271119952361665 -449 862 -.21673150635839006 -459 862 -1.046555403276589 -476 862 .5566701107900258 -477 862 1.9768903654064918 -480 862 -.20581714736862783 -483 862 -.43743779822721507 -488 862 -.5546276460152821 -493 862 .3038592068410262 -508 862 -.642443956485918 -513 862 .9793407688412409 -517 862 -.9518306752640253 -519 862 -.9125336507145129 -523 862 .6880445839256737 -545 862 1.4501194722802915 -547 862 -.8209596787926994 -548 862 -.15330856285266203 -562 862 -.874054330704706 -594 862 .46208617639683885 -595 862 -.6543653481690056 -600 862 -1.9908615902382047 -604 862 .3196587646290039 -607 862 -1.0873455365141589 -608 862 .045072045323326176 -612 862 .027744025575882236 -616 862 .31595977391438446 -632 862 .012420823588210755 -641 862 .4696185008858102 -663 862 .06036843352898377 -664 862 -.227187718201999 -671 862 .43147708195274087 -699 862 -.8748753338787609 -704 862 -.8208461437953957 -739 862 .7851176949323831 -748 862 .5765859680510783 -756 862 .03415988517004351 -768 862 -.6331346345805583 -777 862 .474307201729411 -786 862 1.7525378378471859 -787 862 -.43048837374332105 -793 862 1.2744549821433537 -798 862 -.8660054113573423 -803 862 2.5475615343135978 -809 862 .4717543207707063 -811 862 -.697475152474391 -835 862 1.3730623027580837 -837 862 .03585786163157764 -838 862 .5982472262310196 -842 862 .05659660034143733 -860 862 .7684501632693681 -865 862 -.2609728455325204 -941 862 -1.9056679864924775 -951 862 1.0990736820967284 -952 862 1.661784455069463 -960 862 .8158995115500385 -961 862 .02633216976189783 -999 862 .8278690055860353 -7 863 -.4756426328609959 -10 863 -1.47165190039543 -26 863 -.04432355771896651 -28 863 -.34960628577325736 -32 863 -.7695075675447711 -34 863 .034960439623332784 -37 863 -1.728203853769993 -44 863 -.07184229524048857 -45 863 1.0707376061381113 -74 863 -.9078598269469982 -80 863 -1.21444469936595 -92 863 2.4973019360995625 -102 863 -.23814360573708315 -106 863 .6038049343182426 -111 863 -.3764856037445451 -124 863 .8918996797078509 -136 863 .8203245747502425 -157 863 -1.0299337805038253 -167 863 1.454958292230962 -169 863 -.26262285985838935 -170 863 -1.0742886147723107 -175 863 -.22397437522044006 -195 863 .6703472681999191 -196 863 -.033194635660131866 -198 863 .4193140764319072 -201 863 -.24696526477474776 -219 863 1.1221868459006843 -220 863 -.04014936517582125 -226 863 -.04956356255282651 -266 863 .9534779417245574 -291 863 1.2542568641854122 -320 863 .39713438107577326 -324 863 1.2566130590983107 -337 863 -.056957337856083035 -339 863 -1.4393263677061898 -340 863 .4594530854464979 -345 863 .3306403100175064 -349 863 1.8097190707061113 -352 863 1.1292064348006334 -357 863 2.60798954690175 -365 863 .19606096305760107 -384 863 .5535826256899905 -390 863 .0774411357825662 -419 863 .006658820689172756 -429 863 -.7425181049788603 -444 863 -.6166191454049513 -454 863 -.36315484410125304 -458 863 .7516556535985432 -488 863 1.0644274901299622 -489 863 1.2399179510357314 -492 863 -.6713368884008886 -499 863 .36858338929476253 -518 863 -.48872332614576025 -527 863 -1.1381750719975696 -532 863 1.3717949448288216 -544 863 -.09475539789074552 -547 863 .7729989801648305 -557 863 .026501354460997578 -573 863 -.29416514527971893 -590 863 .14888680673453625 -596 863 -.4326424410928937 -605 863 -1.5785629022925356 -608 863 -.9277691978798671 -621 863 -.46290266218921244 -637 863 .008497134559605502 -642 863 .08327496202402133 -653 863 .6585725855174355 -659 863 1.1060931034096155 -674 863 -.4791200720349898 -680 863 -.6856653552935297 -684 863 -.06517682422479226 -685 863 -.6124810621454974 -705 863 -.5566142839455591 -726 863 1.4596844655198522 -735 863 -.9596317023104145 -752 863 -.36808796726880677 -767 863 .45501778293993017 -782 863 -.12358841884068006 -785 863 -.49923071796685736 -808 863 .878146181039138 -812 863 1.5457621143241438 -815 863 1.1192090004577335 -816 863 .40213688806478376 -823 863 .4586386082772945 -830 863 .27292164442365496 -854 863 -.6963144858988294 -855 863 -.7379140429912364 -872 863 1.1603385625145992 -882 863 .8420213944203832 -888 863 .38607020022175426 -891 863 .22382458423979834 -897 863 -.9508496997204022 -902 863 .10006952376005752 -946 863 1.0461219243649753 -947 863 .06868591334024597 -961 863 -.5621246867326345 -962 863 -.8345407907056646 -986 863 1.4430308822102362 -987 863 3.0237484729227893 -997 863 -.8869759362467361 -2 864 -.26707749023160166 -6 864 -.052837261054005866 -7 864 -.996209486751858 -29 864 -.7596505293335871 -32 864 .058950388985240076 -63 864 -.7358432153157859 -82 864 -.243745474578161 -83 864 -.5887704503406186 -99 864 -1.3977807641939257 -101 864 .3070112908804682 -110 864 -.4195371636854784 -117 864 1.4198760216676902 -127 864 -.4984451747173507 -130 864 -1.3960784024148754 -136 864 -1.4802923563086734 -186 864 -.57942988241332 -189 864 -.5996571032898775 -195 864 -.02152667737660735 -197 864 -.2241100187163272 -209 864 1.7055652102084005 -251 864 -2.152627421564024 -282 864 -.48260695077714716 -286 864 .669056402169104 -287 864 -1.1115720828977877 -289 864 .915614019441003 -296 864 -.9798058525981531 -304 864 -2.105463949775389 -305 864 .10040948908717962 -315 864 -.09729298761976789 -331 864 .24281722642847925 -335 864 -.18500234794366363 -337 864 -.36713509174733183 -342 864 .040368126794447096 -348 864 .962913002207075 -355 864 -.818727807926493 -363 864 -2.474291254562525 -373 864 -.7315381797590201 -380 864 -.8893044491221419 -407 864 -1.9746101567418781 -414 864 .5362409921965494 -439 864 -.68734466357984 -452 864 -.21321829935190606 -469 864 1.082420096087968 -473 864 -1.184271172882246 -487 864 .12102127213839683 -514 864 .9651599916686862 -525 864 .33654454724022 -542 864 .6130163000255535 -555 864 -.24788873813750167 -581 864 1.1594414413938343 -606 864 .5778886682942548 -623 864 -.013845615487431975 -627 864 -1.3673961335099818 -631 864 -.7339659807968395 -641 864 -.6295422133347501 -642 864 .9261446441079715 -657 864 -.37774084086684007 -686 864 1.3743785569371296 -689 864 .3779651719155878 -692 864 -.5697668222558054 -699 864 .16956117115184943 -703 864 .9836290575660027 -724 864 .7311360292749355 -733 864 .3086043645254282 -736 864 -.9023109180744013 -755 864 -1.1251848440430003 -762 864 .6742968433451574 -797 864 .5365501033879752 -799 864 -1.2208836100846727 -806 864 .2159074607888531 -816 864 -.9145749599718774 -818 864 -.2375970687033497 -824 864 .9755043681362352 -833 864 -.9630658410100749 -859 864 .7373711624909554 -871 864 -1.1765096189477435 -884 864 .1448082997081398 -911 864 .4211633282220618 -927 864 1.4262565083337597 -938 864 -1.346127634618716 -956 864 .15189800910742218 -958 864 1.0929178402784463 -959 864 .9501667361859766 -991 864 1.4051764519332863 -995 864 -.21169528118154943 -4 865 -.4706618414577109 -7 865 1.6262361192104025 -21 865 1.4132336734173776 -46 865 .4396517372153608 -47 865 .5313884348008017 -56 865 -1.7363021588163396 -81 865 .16063197213017477 -95 865 -1.5694525361342466 -103 865 -1.7436604017962472 -129 865 -.3049835771820816 -131 865 -1.2794541235083556 -132 865 -.3992286099548934 -149 865 1.0223618997391957 -173 865 .20690426103759937 -183 865 -.8445978338020228 -195 865 -.1358623398145964 -199 865 -.23922344229242753 -203 865 .6120428629945077 -204 865 -.39931513508963373 -217 865 1.0372333032945908 -229 865 -.4517845634094052 -233 865 .7575947382624597 -244 865 .7979516683415424 -256 865 -.5641866985819012 -267 865 -1.2798403614409313 -274 865 -.7190516337308174 -285 865 .7882152699196765 -292 865 -2.020728346317684 -310 865 -.015617389438690288 -319 865 .5329688087448508 -366 865 -.1148615940909943 -369 865 .36680729428735104 -370 865 -1.7939440622977583 -373 865 -2.296254872826214 -389 865 .7192909062330864 -398 865 1.0920332576678742 -400 865 .11009902228793264 -402 865 -.03876158002375869 -403 865 -.9495178976210892 -409 865 2.1303504868063783 -414 865 -.07077707938532354 -452 865 1.241444702961433 -456 865 -.22965013021205394 -457 865 .9015361035800983 -462 865 2.2156774483900383 -470 865 .788544549488917 -474 865 1.24294937738783 -476 865 -1.0857261314444644 -480 865 .5581085626631371 -514 865 -2.1698183466292558 -518 865 -1.0090228480722006 -522 865 -1.2971357936620718 -523 865 .7141737704521748 -524 865 -.5462474292124203 -527 865 -.8563018081969828 -537 865 -1.636703646578269 -554 865 1.1187908284649848 -556 865 .7714039438675322 -568 865 -1.1546954697420604 -569 865 -1.3511721176024196 -580 865 1.0877130656078542 -588 865 -.057062947763503666 -592 865 .629911654561292 -597 865 -.11947875400265452 -606 865 -.775922324241577 -620 865 -1.5013543990259464 -640 865 -1.5333518867236333 -644 865 -2.3066951781426166 -653 865 2.2536556278058164 -668 865 -.31205522575093536 -672 865 .2723261643449438 -693 865 -.13681024058228264 -702 865 -.07095626097993044 -706 865 2.0302667719860943 -732 865 -1.6765492384457161 -739 865 .3369365200003457 -746 865 -.9249641587614058 -761 865 -.8262961025337476 -806 865 .16778703856963922 -809 865 .3720764383974321 -810 865 1.5574209599914322 -842 865 -.319715739476565 -852 865 .2727643593663208 -877 865 -1.6516478248172088 -885 865 -1.7260924509558018 -890 865 .2314094864357413 -904 865 -.29740706533566463 -912 865 -1.8842714587025111 -920 865 -1.4065939567171581 -921 865 -1.6825899209104436 -927 865 1.0526168274158387 -939 865 -.9540601872521491 -946 865 -.46283220627631444 -949 865 -.7212276100805206 -955 865 .3709812096029919 -977 865 -.5807553889114708 -980 865 -.4374830692295523 -992 865 -.2228370006731633 -993 865 .9743265670306147 -4 866 1.7053017188691055 -9 866 -1.4807001379652134 -42 866 -1.3301939020119344 -45 866 -3.352447614738758 -47 866 2.7072789613762533 -65 866 1.6307934779458344 -74 866 1.9431345014731385 -82 866 2.0709810676286837 -108 866 2.1909523635146138 -111 866 -.2410205600014732 -117 866 2.59339144317007 -124 866 -.04906725559465921 -148 866 -2.3204328458465455 -153 866 -2.2791564954361463 -156 866 .32224087406662494 -171 866 -2.725887244514372 -175 866 .9552402145228017 -178 866 -.9669893752609923 -185 866 .5488375286953302 -215 866 1.4782213642204656 -237 866 1.7609563307172185 -238 866 -.6800032159024245 -242 866 1.8821601338085752 -264 866 -1.1295996284669931 -267 866 2.2143995302677215 -269 866 .6775755569586639 -285 866 -.14200086824051888 -288 866 1.8092619212197332 -322 866 1.1212878264488348 -335 866 -1.8889494797524444 -343 866 .09196359465993198 -346 866 .2676168851469143 -349 866 .6983366871630537 -359 866 -1.1660575771907555 -374 866 .5980018480427444 -375 866 -.8827197688525379 -392 866 -2.011489135580916 -419 866 .8002931956873237 -422 866 -.5482481016026542 -426 866 -.34383874740245546 -434 866 1.0446700031813054 -437 866 -.3541792720984782 -438 866 .9867594447761153 -448 866 -1.001812207459738 -453 866 .33746339349156784 -454 866 -.4848508850306719 -457 866 2.1998739172367494 -459 866 -1.5308718043514582 -463 866 .08135696050782575 -470 866 1.4014813747007007 -482 866 -.22899659394398275 -486 866 -.4719317129852847 -491 866 -.004993447359123127 -496 866 -.7012655741455113 -501 866 -1.6824672133672085 -510 866 .6946181668197813 -544 866 3.399849376986038 -555 866 -1.614904772364263 -557 866 .12087681954979378 -564 866 -.9299338402722955 -566 866 -.774702030550393 -571 866 -.36831433733369434 -577 866 .7148493582077713 -583 866 -.33420991853964815 -593 866 1.2737113762890946 -594 866 -.20457020301610926 -600 866 1.9752209225309874 -611 866 -.4847174739742036 -612 866 -.4989751544923167 -620 866 -.40139731084091923 -625 866 .17782867633294058 -638 866 -.40965869983928893 -645 866 .19718581234930044 -649 866 -1.0190345191985204 -673 866 2.946729650570427 -678 866 -.1193271052151269 -701 866 -.054451584658461255 -706 866 1.1265453215506023 -707 866 -1.4920488690312677 -708 866 .018989368848297057 -712 866 -3.6252303333835854 -739 866 -.5351845980178411 -743 866 3.517882921840497 -745 866 -1.092140715184086 -754 866 -.322015053729221 -755 866 1.1822447029499046 -767 866 -.3476654183850134 -803 866 .3850218772801096 -817 866 .8443963366098111 -826 866 .21314219516629923 -839 866 -.8715562147776709 -842 866 -.44517304551255743 -861 866 -1.09514419677451 -900 866 -1.3506636810410206 -915 866 -.759540849984103 -930 866 -1.8462093543598568 -936 866 .2422295505292356 -956 866 .8827358794373527 -967 866 -.8074691633615723 -969 866 .056649637902316 -1000 866 1.319272944203246 -3 867 .049036900434236405 -6 867 -.06203254383877148 -8 867 -1.384090560249402 -10 867 .9084222206315621 -11 867 .12181042580704708 -16 867 -.10949862426692719 -17 867 .30788120092358573 -19 867 .7627332065819332 -36 867 -.9079894343561628 -47 867 -.3616379072705922 -51 867 .5215100283506735 -56 867 -.07606676050439418 -57 867 -.504547411655284 -60 867 .3223916384966989 -79 867 -.3212805809964864 -91 867 -.7227904645517715 -93 867 -.34192768212829994 -100 867 .17467472239203197 -109 867 1.7843334683238625 -122 867 .0235818157562654 -152 867 .9940958079262222 -153 867 .29572038509321485 -169 867 .6360826690733792 -187 867 1.375413160538638 -208 867 .6309075055689526 -231 867 -.424382043929375 -233 867 -1.19121789855361 -244 867 -.20209185564172685 -247 867 -.030214037266260096 -254 867 .41370865465325624 -269 867 -.08872911423840368 -284 867 -.26864050236223264 -295 867 -.13029536405225572 -307 867 .5950339365275047 -314 867 .3042366517411619 -320 867 -.6398421437640215 -323 867 .7547265924679701 -330 867 -.6080886728388739 -333 867 -.4256077853120987 -352 867 -.34215404656803855 -360 867 -.8316167912496992 -373 867 .5966620662794073 -409 867 .6371155609102638 -421 867 -.6609730934160253 -433 867 -.279816117472362 -437 867 .4765041711205155 -455 867 -.3706106475371885 -460 867 1.3126168870334425 -463 867 1.0067814936777397 -494 867 .017185843805531537 -496 867 .912120623379728 -501 867 -.3917425196902161 -516 867 -.08510725948028745 -525 867 -.6567022421736953 -535 867 .6790105104638973 -553 867 -.15193794346517786 -558 867 -.0016068534868103335 -580 867 .4091839041225316 -591 867 -.5999229247777322 -603 867 -.8546351607482923 -614 867 .05196052106547569 -638 867 .277479965130506 -662 867 -.993640427091699 -663 867 -.1468333388235945 -666 867 -.3618028486407576 -680 867 1.4182800753142792 -702 867 -.5955406962479531 -703 867 -.4489938968690015 -724 867 .0968619738118358 -727 867 .8283181830538968 -746 867 -.34469030657827093 -760 867 .16576807070277708 -770 867 1.2343901894625564 -788 867 .8750385661374405 -797 867 -.219723838763353 -811 867 .8948289961116732 -819 867 -1.2371754820345782 -821 867 -.304894091525925 -822 867 -.005718644206475776 -832 867 .38455404718265906 -837 867 -.3103043028498843 -865 867 -.33096547342661914 -866 867 -.4892794697457431 -871 867 1.0933828442996743 -873 867 .0646057796981015 -876 867 -1.1292271885781884 -886 867 .3643741751282008 -914 867 1.1098150273706757 -930 867 .5456503696713498 -946 867 -.15479470960283837 -949 867 1.2857589067429995 -964 867 -.3545977795093965 -965 867 1.822466989968543 -998 867 1.7492374641420816 -8 868 -.7963788943726409 -14 868 .12568577522838614 -20 868 .9259078438362374 -33 868 1.118880490358512 -41 868 -.16127044052650039 -46 868 .1363292046564763 -55 868 -.06547422328953592 -60 868 .3988445320523984 -65 868 .9203161017468273 -88 868 -.5307162304848437 -92 868 -1.6733045147085839 -96 868 .6976700375085411 -116 868 -.03921410335245157 -123 868 .2939712401137555 -125 868 -.540457020877488 -138 868 -1.119703653542785 -146 868 .5426660912618427 -148 868 -.6907116262157004 -158 868 -.7186279152984791 -166 868 -.8692775122409538 -200 868 -.588591679281936 -219 868 -.555230246492513 -229 868 .04892689312681685 -243 868 .16559201067804397 -254 868 1.0359379303285137 -256 868 -.6231358003152125 -257 868 1.0358290958440985 -260 868 -.9168377459561589 -265 868 -.5527147284307601 -323 868 .9026574924828251 -324 868 -.6641018608668071 -340 868 -.4348992775111361 -350 868 .1728697194493246 -360 868 -.9855152152267341 -363 868 .006977931493398176 -364 868 .48002481880269965 -365 868 .3754620665921957 -383 868 .2980998511331485 -385 868 .6484724603189598 -392 868 -.43287610248672564 -413 868 -.052802453732262486 -419 868 -.5499697829240505 -422 868 .39841390890177997 -433 868 .41443647635483083 -439 868 .22571343132330587 -445 868 -.7410879224610294 -454 868 .2872593552068588 -457 868 .337859078169444 -458 868 -.2410138805937395 -468 868 -.027154440803343227 -480 868 .6091950587784567 -481 868 .06242415306849817 -485 868 -.2424231331789539 -497 868 .3387469769917589 -498 868 -.33802983910657136 -512 868 .1688098951123804 -517 868 -.4411884415386792 -528 868 -.11014635054532038 -553 868 -.14099229147500164 -562 868 -.18628006120116766 -580 868 -.29629274709811404 -581 868 .38741755307021425 -586 868 .04947992284403703 -589 868 -.03157132967590681 -609 868 .4806014508959237 -616 868 -.08544546501844515 -627 868 -.18690730666353492 -631 868 .11145718062209158 -638 868 -.6514154577906297 -642 868 .574979462364619 -666 868 -.7472602191856229 -673 868 .13481390834414966 -679 868 -.2535653424251866 -680 868 -.5746241569314289 -688 868 -.8576175853225994 -689 868 -.4973339331044137 -708 868 .7127764495545248 -713 868 1.3939889794424334 -714 868 .39819834037320284 -723 868 -.6961930429638882 -732 868 -2.188424376061507 -739 868 -.45820067817905274 -746 868 -.48909460301210733 -748 868 1.0192682712829004 -755 868 -.2863707053068601 -770 868 -.6935893962475935 -776 868 .2655438532685347 -782 868 -.00456428067111584 -791 868 -.7847092531408109 -805 868 -.6122590119881471 -849 868 .014919459887787062 -859 868 .08715162991536574 -873 868 .4005749870573368 -878 868 -.2695658020392161 -879 868 -.7764837674786852 -885 868 -.5742915002832839 -901 868 .8541265296129847 -903 868 -.8685627035384818 -906 868 1.601089557661293 -907 868 1.9771742597132638 -908 868 -.5001053196458464 -911 868 .7533432342340003 -912 868 -2.522067752203625 -914 868 .6495610109000072 -928 868 .12672487819073774 -936 868 -.29317610831177376 -938 868 .2777253376039305 -972 868 -.2527931656496973 -987 868 -1.5926004280248522 -988 868 .2104154269186853 -5 869 -.2391839092091329 -34 869 1.0763116152045262 -37 869 -.7382712667766771 -45 869 .3495618524291691 -57 869 .8793173413555313 -73 869 -.28233481438023994 -82 869 1.3648932524486237 -98 869 -.6641392510868365 -108 869 1.0565255605054826 -114 869 -1.0699950455465619 -116 869 -1.1612794017199244 -139 869 -.5336882902850222 -142 869 .9613925437875517 -145 869 .5925731919204764 -164 869 .39265030388938466 -168 869 .7499093906216825 -181 869 -.5289803273273137 -201 869 -1.3538519441880967 -207 869 .8409840467180579 -210 869 .7034172976703079 -250 869 -.5769991038263749 -254 869 -.1638957972502399 -278 869 .5119900665599939 -294 869 -1.2872304523945053 -295 869 .022314273546077637 -298 869 -1.0428376714756542 -299 869 .2613069689221358 -306 869 -.7145366539596072 -326 869 -.048777552034423424 -327 869 -.17117479998267737 -337 869 1.2237496913796555 -360 869 1.6225273414111725 -361 869 -1.9652433056646084 -364 869 -.303965331282966 -366 869 -.09751470144816271 -377 869 .25912349711646504 -387 869 -.4844128279770895 -421 869 .5615374699262571 -432 869 -.5416733606903477 -441 869 -.48419886927801675 -443 869 .7137195845250799 -448 869 -.2575844658344049 -452 869 -.1257293145205849 -471 869 -.34891558511393994 -473 869 1.97910739167404 -486 869 -.41800105452725383 -487 869 -.7001497211070433 -492 869 2.4656051754540638 -495 869 -1.8725174297733593 -496 869 -1.2111929927853966 -507 869 -.6828315022894484 -526 869 -.1813809697626592 -533 869 .514653770367949 -542 869 .4476217252625436 -546 869 .41056884191421994 -549 869 -.5643067594408931 -559 869 -1.6350440051575985 -568 869 2.3549720717223246 -578 869 -.26642751982849455 -580 869 -1.7651805989529121 -594 869 .6611932221063078 -605 869 -.7377207252736485 -608 869 -.6420331911053122 -616 869 -.7823275588467566 -623 869 -.4677535308481909 -624 869 1.369013269763562 -629 869 -.5421046511068515 -632 869 .1857486957037989 -635 869 .31731728397036096 -653 869 -1.7272538699584852 -667 869 -.746579008378052 -669 869 1.346576149860934 -685 869 -.4208647711847396 -690 869 1.5669759748190417 -693 869 -.04041544632981975 -696 869 -.27661970927421203 -721 869 -1.1380992668709071 -726 869 -.13980606222461733 -728 869 -.1458855921269446 -742 869 1.1563833868782365 -765 869 .7448549885891781 -771 869 1.5033803799446044 -772 869 -.35978119912173195 -780 869 -.004767703669549463 -787 869 -.42245826081288446 -788 869 -.39031112947027624 -794 869 .07512967040827212 -801 869 1.2364295030449381 -806 869 .16801368035042968 -815 869 2.1122953192539793 -817 869 .7455331665709444 -839 869 -.015508165662354516 -845 869 .6454619210817634 -848 869 -.2591017610364018 -852 869 .21948554196122977 -862 869 .5619981581176612 -863 869 -.0418922108699543 -866 869 -.47270293125885104 -878 869 1.5822590508551269 -884 869 .15546189744401667 -889 869 -.2334984260621352 -890 869 .8254751640341533 -892 869 -.26419910895424187 -898 869 -1.2954231713320317 -917 869 -.21803943839286954 -923 869 -1.6299843955350688 -930 869 -1.1723812139627814 -941 869 .42990788738762586 -961 869 -.35482141830716163 -975 869 -.7274272950157914 -982 869 .8183415761322265 -985 869 1.3059130032228947 -995 869 .9632425718400554 -997 869 .30546630219156046 -9 870 2.367459360884836 -10 870 .31589293708176236 -26 870 .4101112281471355 -28 870 -1.7730742074747854 -39 870 .5870121379989126 -44 870 -.7443879664959647 -52 870 .2689648024185464 -59 870 -2.2073783431815572 -81 870 -1.4656898768043465 -110 870 .22369180336963718 -127 870 -.9218675034791999 -135 870 .37636678286836645 -137 870 -1.8205015933387207 -193 870 -.30407889289655354 -201 870 -.34966140271744733 -206 870 .5233249876236885 -228 870 -.38927421545142843 -234 870 -2.429618269743902 -240 870 -.15126304475627822 -243 870 -.8126942069244818 -250 870 1.5323403542865055 -251 870 .8432898847479934 -254 870 1.474092104373462 -259 870 -.7194790502733115 -262 870 1.7413311093678165 -270 870 1.1358728073900968 -282 870 2.195640003453203 -284 870 .18272735929264472 -312 870 2.0783057445867232 -322 870 1.000939917796784 -328 870 -.08910496789751765 -329 870 .9741888461135029 -338 870 -.5322005823427334 -339 870 -.9809786576772445 -340 870 .14613783892837562 -341 870 -.7735486184097305 -390 870 -.048041504560191406 -401 870 1.3639330419326596 -409 870 .6230654047747943 -414 870 -.717080482436471 -415 870 -.7401258155138637 -420 870 -1.201655884223628 -422 870 .5359140905228835 -439 870 -.7791026153633439 -473 870 1.9714296778039 -481 870 -1.00651757617457 -486 870 .05018891264056563 -491 870 -.47409388088751236 -494 870 .8240038865293924 -548 870 .29397488317396503 -549 870 -.2273263139786823 -556 870 .0789893718876861 -559 870 -.39785998976735054 -568 870 1.2742033777712187 -587 870 -.08891347769321813 -593 870 .08904634929493724 -611 870 .5514493891306366 -634 870 -.07165731833280164 -647 870 -.49650254204688576 -656 870 1.4373312661190398 -662 870 .5287432966904438 -672 870 -.9479729461214024 -673 870 -.7478946777450902 -674 870 -.8977119683547935 -690 870 .17258951556136892 -705 870 -1.5039028746484058 -724 870 -.4044159741022769 -728 870 -1.114159168883513 -759 870 .13081461417029572 -764 870 -.4450968849785818 -783 870 -.4010672049756139 -789 870 -.6871648947971816 -796 870 .08994571846793155 -801 870 .8237789842084406 -808 870 -.98605723029964 -812 870 .056170984296914 -822 870 -.1926066151832136 -825 870 -.802527307077695 -832 870 .4788754018021768 -847 870 1.8031453239413573 -852 870 1.015188794218778 -856 870 -1.273057709920229 -872 870 .6779114860370034 -894 870 -.4909595041680604 -906 870 .5234910704116947 -908 870 -.8655131653119572 -927 870 -.3028158380357426 -929 870 .5043404328783959 -932 870 1.2733396271936759 -938 870 -.1399766911368038 -956 870 .6667652587483252 -962 870 -.04162707044665137 -967 870 -1.2343269660186218 -973 870 .8999017172125288 -981 870 .048620701478788 -998 870 -.6298021930631699 -8 871 .33844598510720697 -30 871 -.2577819516945276 -37 871 -1.3637082112328005 -47 871 1.2035611640562907 -63 871 -.7717992314687017 -68 871 .08807824342831319 -84 871 1.0912714927260159 -100 871 .4295754136783698 -108 871 1.1074894600112242 -110 871 1.7125654279833338 -117 871 2.3856623614979533 -131 871 .6554818479566362 -133 871 -.8985372565878555 -144 871 -.6521627468617648 -164 871 -.09799148815226183 -183 871 1.439961072393987 -190 871 -.2559812542010663 -192 871 -.4688956782884225 -196 871 .33221303041251027 -198 871 -.6463086017246785 -225 871 -1.3798961351448602 -228 871 -.10894898199918451 -235 871 -.21470060874774427 -236 871 .6796637694565475 -249 871 1.6187948257161717 -254 871 -.17027672224468887 -256 871 -.12178544778133685 -263 871 -.19112360715053783 -264 871 .38406873516954176 -267 871 -.07930057905100511 -276 871 .6338362950754899 -297 871 -2.4795608637224427 -299 871 .21836348158959507 -300 871 .2338328989264403 -323 871 -.9325336969204187 -332 871 -.9091495448390152 -336 871 .12616919110041896 -352 871 1.1016950263844767 -361 871 .5004230787335431 -371 871 -.03430362847247567 -376 871 .5478263424293737 -387 871 -.36420376175666824 -411 871 -.17240012203194405 -412 871 -.9827344859284396 -419 871 -.7148159458402306 -429 871 .6065216004990525 -432 871 .3567837714477796 -436 871 1.668072361110648 -438 871 -.7720899048834802 -440 871 -.8808051165359396 -481 871 .7379980467130217 -485 871 -1.2403727571299075 -489 871 .24535378718284412 -493 871 -.9287414012948695 -496 871 -.4553316951739759 -512 871 -.018087635973151824 -528 871 .8936927086460579 -545 871 -.13919423143728343 -547 871 .855229058176161 -549 871 1.3014960848740609 -580 871 -.16468683548974553 -589 871 .4801641559170369 -593 871 -.633170299012959 -610 871 -1.564719990361703 -620 871 -.051101952161541835 -622 871 -1.2869947328011704 -624 871 .5001558378004844 -634 871 .5756041520386338 -639 871 -.9048596893984954 -654 871 1.3759703500558689 -663 871 .6410100433835177 -683 871 .49046215772559354 -685 871 .24171203678601616 -697 871 .2865552611968874 -703 871 -.508327256920648 -704 871 .5136283724529552 -706 871 .2726809244549947 -726 871 1.6742269504827612 -735 871 -1.4876635755963687 -745 871 1.0081752001603685 -753 871 .26336085697532796 -756 871 -.4189571606410212 -758 871 -.6324550527810011 -769 871 1.1290461553708722 -787 871 -.2862013780784338 -790 871 -1.165590954192137 -798 871 .9895582435801493 -809 871 .11179550662237037 -818 871 -1.5137287147262481 -829 871 -.5454110590974998 -837 871 .5840758442466839 -858 871 -1.366463156384307 -860 871 -.3032654073271798 -862 871 1.5629223467359767 -869 871 -.09706410991177868 -882 871 1.4847137634376653 -912 871 -2.5939394041533896 -914 871 -1.8830488787157353 -916 871 -.22755222508099954 -931 871 -.7698411495942491 -937 871 -.13577452251017627 -952 871 .1122292604019249 -958 871 .20797366937796297 -971 871 -.11576388971964605 -977 871 -.4518836098056612 -993 871 .27731807974115497 -6 872 1.1523472051039643 -15 872 1.0362690743768468 -24 872 -1.4818344330198046 -30 872 -.33518731715619327 -31 872 .06162555655590943 -40 872 1.839071421883424 -41 872 -.6575528799827564 -66 872 -1.848418895623342 -72 872 .8784315945111529 -76 872 -.2174316931855365 -84 872 -.14737143502008598 -88 872 .23575822304485886 -103 872 1.2966565994221322 -109 872 .47901881856429196 -118 872 -.5293350865948165 -121 872 1.2659401829705348 -176 872 .33366454023171954 -184 872 -1.1742829501748493 -203 872 .0486523366170966 -213 872 -.1662173315160813 -238 872 .7939132945019721 -240 872 -1.3379391062115111 -247 872 -.9413122656487876 -248 872 -.943372747417409 -280 872 .3031690986355148 -282 872 1.9198249782568224 -289 872 1.3013759954054556 -297 872 -1.8044928428946214 -306 872 -1.5481960844832292 -319 872 1.146727894915589 -341 872 .24976251934570065 -353 872 1.188062635393794 -369 872 -.4847307343787098 -380 872 .9310136914332788 -382 872 .023103593028554192 -383 872 .7845658596051691 -414 872 .03172360365937074 -426 872 .44769749729239894 -428 872 .13668543014094733 -430 872 -.751484625579935 -457 872 .5470357690428099 -476 872 -1.0649251682006955 -481 872 -.8066188275495477 -490 872 -.3388263297610918 -513 872 -.6747775173769336 -523 872 -.8980199225175454 -535 872 .675222714201769 -536 872 .2333223675646534 -571 872 .7917689621364873 -586 872 .20760974495415394 -601 872 -.5282323566639777 -624 872 -.24089872050279434 -625 872 .5941831967915262 -631 872 .33959855043209286 -632 872 -.7165204561987599 -633 872 .6273714657063885 -658 872 -1.0639838241548312 -660 872 1.000328610759354 -667 872 -2.0427774428384504 -707 872 -1.5689436699230321 -716 872 1.2892372327095145 -727 872 -.3748145966171681 -740 872 .6286512149429859 -755 872 -.07243882559595975 -758 872 -1.4221357020948162 -766 872 -1.5954442226106613 -777 872 1.531296583973968 -796 872 .026710440367172017 -799 872 1.2543003564755821 -816 872 -1.2923638069774508 -819 872 .7140297262036407 -820 872 .0028179143994386674 -825 872 -1.2607263290100768 -850 872 .5286867165360802 -853 872 1.940338271315209 -855 872 -.28954617435693797 -863 872 .24568860923817512 -868 872 .319937702239142 -872 872 .5118274423701785 -888 872 -.9994578086586403 -897 872 -.22518521843574446 -903 872 -.15537203628201846 -919 872 -.6812919933033108 -932 872 2.4612058380634716 -936 872 -.04047369132472889 -942 872 -.7021900991001608 -959 872 .9958208227859799 -977 872 -.6085767948593352 -990 872 .2149829074533177 -993 872 1.4085383564875968 -995 872 -1.4636345242889501 -15 873 .6960234075204345 -17 873 -1.9937265870682355 -34 873 .33755410118215423 -42 873 1.1295611365756095 -55 873 -.41316625878634716 -60 873 -.17633363522082693 -73 873 .02778575465971131 -83 873 .5723799156848582 -89 873 -2.364404579433261 -90 873 -.061331238994940536 -94 873 .1532000335426824 -100 873 -.5852663941515227 -105 873 -.6631402586588507 -118 873 .35127458899164654 -119 873 .7912106596335657 -124 873 .5536739101495053 -127 873 -1.2612455030223906 -143 873 .006792319494453095 -159 873 -.2849412585499068 -177 873 .19955657570021873 -179 873 -.12244938816317558 -185 873 .39714751560243927 -193 873 -.1680749107670743 -205 873 1.1290335290565436 -206 873 -.16194908021796708 -208 873 .05387856510037843 -214 873 -1.2776907209845794 -219 873 .3783945207520506 -220 873 1.5140031119143051 -223 873 -.070747904305443 -248 873 -.5633487678691023 -251 873 -1.8796240290423667 -305 873 -.28794044195128987 -308 873 -.4117735711107914 -319 873 -.2315980179175018 -337 873 .3938797389517728 -343 873 -.21564565091500087 -360 873 3.4607576010535803 -369 873 .11960427269225148 -372 873 -1.1326768155615723 -379 873 1.3023165906244556 -381 873 1.3485689977320576 -394 873 .6782010774426388 -401 873 .7217012819106304 -415 873 1.0569357881007715 -416 873 .7744352027222373 -424 873 -.08560916565660197 -426 873 -.5825888656813938 -452 873 1.7947616084369835 -463 873 -1.2004597864686204 -464 873 -.5874546917654623 -478 873 -1.6897076135242872 -479 873 -.10609523404860072 -497 873 -.2150490180499274 -504 873 2.124488797717125 -508 873 -.5895574825331112 -517 873 1.3632567638255233 -535 873 .32200040424273724 -536 873 -.5094807062521436 -553 873 .1351863568368598 -554 873 .2615913803241958 -555 873 1.5546836467057041 -559 873 -1.3555982497260395 -561 873 -.25043251541077194 -584 873 -.029959767751930454 -586 873 -.16993825114922434 -603 873 1.3630475997217657 -606 873 .6796339932897439 -611 873 .6262655609179334 -628 873 -.023719833969591667 -641 873 -.23707595181240815 -668 873 1.3379497898148296 -677 873 .7660167576240389 -681 873 1.2075553853593866 -692 873 -.5761721341914592 -694 873 -.6929101447932008 -695 873 -1.1763926087649623 -728 873 2.9306629177064507 -743 873 -2.0510157503394666 -744 873 .31446526846251865 -769 873 .9330537641306554 -772 873 -2.1313575045861084 -780 873 -.43743202508215073 -787 873 .5248496441188144 -789 873 -1.2673875062847357 -791 873 .9517412948772818 -800 873 -.3053989936754401 -817 873 .7535987165695379 -824 873 -1.5945770137292046 -826 873 1.4134577843104832 -827 873 -.4454157416487453 -831 873 -.42490758777409227 -834 873 .32469705641318725 -835 873 .4639517694506046 -839 873 .755969122830269 -848 873 .19764222932102102 -854 873 -1.0624644510566628 -860 873 -.6073751285448764 -863 873 .6833798131700205 -880 873 -.9028734640494831 -886 873 -1.6564501080568421 -888 873 .36932867058116114 -908 873 1.446930562139529 -917 873 -.3462820924594178 -922 873 -.23657667842383245 -941 873 -.03857106787585418 -946 873 .7729421965495379 -951 873 -.6609456240409471 -952 873 1.0966019569553378 -969 873 -2.6254322389184646 -986 873 .3132571986513994 -992 873 .8190007770226378 -994 873 -.017906686825538726 -28 874 .18842224770875857 -32 874 -1.0030538042869237 -42 874 -.24522707789629047 -47 874 -.1025278892293307 -53 874 .13968081465988563 -58 874 .6685977687651823 -68 874 -.5965954897556452 -71 874 -.363817864258025 -74 874 -.20031702118581982 -95 874 -.09245550277705852 -109 874 -.2517552223678008 -124 874 .004234044730569916 -143 874 -.225640719479355 -146 874 .11829700365844271 -157 874 .09717030202106036 -159 874 1.471958144609323 -168 874 -1.4983191102061286 -171 874 1.8704749600135644 -180 874 -.4916783767974866 -190 874 -.25430145931466247 -194 874 1.865322895734828 -251 874 .5261444095383565 -260 874 .2175654193800542 -276 874 .6585672888223654 -280 874 -.5016265923318495 -283 874 .46041648057220746 -288 874 -.47023175899091885 -300 874 -.37403394343088303 -307 874 -.5675114005576251 -317 874 -.28442051440506 -340 874 .1182086299136984 -345 874 .5463923073184677 -353 874 -.8039500146283105 -363 874 .2357348862966192 -370 874 -.17442631728452895 -376 874 -.5863473433815738 -377 874 -.580362643254534 -385 874 -1.1627234511261433 -393 874 -.5088041756704175 -411 874 -.5450293680626843 -422 874 -.2921732341296261 -430 874 -.11260225381462663 -446 874 -1.0323730801465587 -454 874 -.2246851329112592 -486 874 .39226214912310775 -500 874 .466680565926262 -502 874 .8994041104683692 -504 874 -.9806326528906331 -506 874 -1.537928303411376 -513 874 -.8953171668913761 -516 874 -1.615207139782672 -527 874 .5891870885894742 -532 874 .9418031817338675 -536 874 .782784351934823 -537 874 .5673370713819361 -561 874 .2683703573110483 -562 874 .9215420122060181 -564 874 1.0845311878156834 -572 874 -.8642615479783159 -578 874 .044970030772371536 -591 874 -.23625888616419474 -596 874 .24161570934395277 -620 874 .7501517338781347 -628 874 -.16085111282247896 -629 874 -1.4457625906773275 -639 874 1.1686661489787684 -640 874 -.14369761146222193 -647 874 -.17553830480371524 -650 874 -.3986161298777159 -651 874 -.1868216325474372 -692 874 .33938301636636947 -720 874 .44113780601505903 -727 874 .8043177525659081 -744 874 -.8210953920022319 -748 874 -.42621148698778905 -755 874 .8233612166106029 -759 874 -.3571753812330193 -777 874 -.7731142914791247 -798 874 -.41630293917156025 -807 874 -.23608760284712976 -815 874 -1.8135719307877454 -858 874 .3593842120352818 -879 874 1.1441668893585994 -898 874 -.1608400372947932 -911 874 -1.616292222568164 -916 874 -.3430253543810691 -918 874 -.08375075902006193 -925 874 .24471541344301395 -936 874 -.3790173580266791 -939 874 .12888066100820988 -946 874 1.0938754979517962 -981 874 .28657170264167775 -985 874 -1.309336456487445 -989 874 -.6521178032385574 -993 874 -.6627272225655823 -994 874 .6239513804076535 -997 874 .42882419758362816 -999 874 .7941742374850597 -10 875 -.6770059610569622 -12 875 1.0333077295333295 -22 875 -.5714570764425325 -28 875 .24230377036101428 -30 875 -.02203475403182291 -34 875 -.08572531378281983 -43 875 -.363086909892949 -45 875 -1.5723055952552392 -51 875 -.49966825136894993 -57 875 -.8825528376986577 -111 875 -.2539747504390244 -124 875 -.22066368429283045 -125 875 .4290436266144591 -133 875 1.03100764381469 -147 875 1.427632962305624 -152 875 -1.3174945594847838 -166 875 -3.0536168831944113 -174 875 -.49247363819454976 -177 875 -.7274607211790889 -187 875 -1.800574144249916 -195 875 .47487832707306465 -216 875 -.333168951293909 -229 875 -1.1066880869385216 -247 875 -.9389292501637388 -261 875 -.10480225308654287 -266 875 -1.5135612166812646 -273 875 -2.520916363213396 -289 875 -.06617434009170373 -300 875 -.0786321346846145 -307 875 .9829460640255361 -319 875 .2574224961429586 -330 875 -.9105562804147053 -348 875 .33264371185111385 -363 875 -.18249308051871482 -368 875 2.7425516479982637 -370 875 .7007782004921 -383 875 1.197658887228536 -386 875 -2.03771116558019 -399 875 -1.4253835247986717 -424 875 1.0918819613007273 -427 875 -1.141168706650678 -434 875 -.8873721727458985 -435 875 .12322034134244503 -438 875 .7616698501104759 -450 875 2.7047271891288647 -452 875 -2.1080921233549095 -468 875 1.410053212245442 -483 875 -.10537654578877328 -490 875 -.367912059548578 -497 875 .8957034652381095 -505 875 -1.9901896927775589 -521 875 .1602243052873416 -525 875 -.06140085084700145 -529 875 .6731895729042101 -535 875 .8475270967407734 -560 875 .7204294145347347 -574 875 -.3242154393937906 -577 875 .5453370818430034 -578 875 .10351591414603141 -581 875 -.7549669965508002 -588 875 -.5435870161468461 -602 875 .20552905088491746 -603 875 -.4155830842092676 -605 875 1.0160694903837129 -606 875 .5510342400084081 -610 875 1.1092915403096388 -618 875 1.369631906127867 -622 875 .4057508947417749 -635 875 .22239882302417635 -647 875 -.7282106853703951 -670 875 1.3424200885884483 -688 875 1.5871044056348165 -691 875 -.19390192380693894 -703 875 .5874175465390742 -723 875 1.418537181396166 -724 875 1.1661682559734912 -730 875 .8434091687844045 -732 875 .01875785256989454 -749 875 -.44249146205063145 -758 875 -1.449884378988115 -760 875 -.6663437408437424 -762 875 .48303813791903627 -764 875 .07175136947976049 -772 875 .08686850970948833 -796 875 .12881261276068573 -823 875 -.9098869551992017 -831 875 1.5736964035276253 -836 875 -.31416115747073386 -844 875 -2.1225326720424413 -846 875 -.36841215300735464 -851 875 2.0205049211255646 -899 875 -.7867616572321898 -901 875 1.0249080054925392 -909 875 .4833884448621039 -913 875 1.0390786708748023 -932 875 -.009982259239938937 -939 875 .23189787796501254 -953 875 1.260704212579407 -955 875 -1.4761222506739125 -957 875 -.48976712038349307 -959 875 2.4381165761747097 -969 875 .11974796447417102 -971 875 -.4643707358339536 -983 875 -.7153292682829343 -2 876 1.5712006067189053 -24 876 -.3002914438578539 -28 876 -2.1861006502654514 -30 876 -1.3289094976215936 -31 876 .010532180409289646 -36 876 1.7193849045821987 -37 876 -1.2037708158639358 -46 876 -2.0077916627418637 -47 876 -.27156863143255583 -48 876 2.4651051757062508 -74 876 -.5427792003020006 -94 876 .45937595420351063 -95 876 -1.742085607832512 -135 876 1.2778137683298822 -139 876 -1.52758716122749 -143 876 -1.785903247173329 -152 876 -1.5763314669457602 -157 876 -1.5050339077888455 -162 876 1.5245646052918638 -175 876 1.3711688611822472 -180 876 -.6519024799116135 -184 876 -.7380583562802276 -189 876 -.8727998659381413 -190 876 .766392550892195 -194 876 -.492808347981771 -220 876 -1.1692533840923778 -221 876 2.838885790965639 -226 876 1.2670235846553555 -228 876 -.7868739087493154 -232 876 .08587164492504556 -239 876 -2.673214486194183 -259 876 -.6549094400763982 -262 876 2.2445292278620563 -270 876 .6526063669166963 -274 876 -.8462937043153869 -292 876 -.9498471962340967 -303 876 .8125957556145621 -341 876 -.20493195300234013 -343 876 -1.375558081135861 -351 876 .108169122650318 -352 876 -.8640773232216622 -368 876 -1.517821495432037 -370 876 .10432236355189899 -373 876 -1.625163359558566 -377 876 .08324737947864083 -388 876 .33452895339181693 -390 876 .05128864682406542 -393 876 -.8471502129864471 -402 876 2.142941323091447 -404 876 .8895160693472305 -417 876 -.5035419319868546 -420 876 -1.632622849719818 -435 876 -.06498315654096944 -439 876 -1.214296645230716 -444 876 .46082373320769554 -458 876 -.015895596696288844 -465 876 .4661988228644107 -473 876 1.008459214020778 -482 876 -.3288387493443792 -486 876 .5085857258967189 -487 876 -1.85053002059776 -501 876 1.2313883440839777 -522 876 .18202261778334333 -533 876 .0699028442392773 -571 876 .5682142947273433 -572 876 -.06095643497984689 -575 876 2.206123131968849 -589 876 .7875282887697236 -597 876 .7698807095498948 -601 876 -.8985718612720824 -617 876 -1.1977720242156153 -618 876 .2703490073969547 -622 876 -.9684974583625132 -624 876 -.10844940061778727 -630 876 1.6060134002910487 -631 876 -.013280635210424191 -642 876 1.117702939247578 -644 876 -1.5935131787553947 -659 876 .938885096457819 -669 876 -.03480830799678705 -680 876 -1.533264557050805 -682 876 -1.471338026784924 -685 876 -.27181488347482863 -707 876 -1.5368729538630395 -712 876 -.7736577901910493 -715 876 .3192714559708196 -721 876 1.3560439449919122 -727 876 -.9184845538649259 -728 876 -1.052145622421526 -732 876 -.38396202798172274 -740 876 1.6914681870655837 -742 876 -2.6568067199759398 -775 876 -.7745203488938502 -787 876 -1.6212658267329811 -789 876 .049847957032674785 -794 876 .007492761246582807 -797 876 -.45861143067288196 -808 876 .8508626191265756 -827 876 -1.5945767222338034 -845 876 -1.163540364898057 -852 876 2.0917737710945614 -858 876 -1.8102989695675233 -859 876 -.5486088571320493 -862 876 .09289102175066372 -872 876 1.76322731706266 -873 876 .007591244435443491 -877 876 1.3916904767674574 -891 876 -1.369030099858444 -901 876 2.47842434110462 -907 876 -.037471484931482564 -911 876 .6779745885040481 -914 876 -2.280179317236417 -922 876 -1.5672512602790731 -926 876 -.013012868355621751 -927 876 .12643415569079836 -929 876 -.8553828974769084 -931 876 -.2151361450644437 -941 876 1.2315568674302024 -944 876 1.4248094358253098 -957 876 .8347156890542134 -984 876 .3948167427066423 -996 876 .7241765638938252 -3 877 -.5950277431799488 -19 877 -1.5120971550098925 -21 877 -.034195490810889476 -82 877 .9468635231811319 -116 877 -.5507105545184549 -117 877 1.4597319056043552 -124 877 -.24471679411688882 -125 877 -.7259162631099141 -126 877 2.1254618239517824 -137 877 -.6704170287538731 -143 877 -1.076056624853886 -147 877 1.9005480104941577 -150 877 -.3286795993417193 -169 877 .5610427835144627 -173 877 -1.374637526606095 -175 877 .6537195053524437 -178 877 -.3270817650639661 -181 877 1.0175675363144705 -202 877 .34956002131373876 -208 877 -.6164548704347953 -209 877 1.456582048105022 -216 877 .810389096505256 -225 877 -2.0455571532133217 -232 877 1.5750760169049796 -235 877 1.5787642287184875 -239 877 .3364007886489933 -257 877 .7145763392386077 -269 877 2.3765554537990843 -271 877 -.8527360342438507 -272 877 -.324100438303661 -274 877 -1.1739020061312768 -287 877 -.8730605396835275 -296 877 1.083572686087868 -315 877 .47680097615342487 -316 877 .5033034166645127 -331 877 .8296693011335696 -334 877 -.33072335411200005 -360 877 .8091996969910062 -368 877 .4416533802632866 -371 877 -.053184376996509596 -397 877 -.21985608340433024 -411 877 2.0970844784638643 -415 877 .2958919844731508 -422 877 1.3903076416791207 -451 877 1.0798802586402863 -452 877 .639950508097847 -463 877 .45496647020404735 -471 877 -.7120949155061255 -472 877 .7360149146210514 -476 877 1.341311137045417 -483 877 -1.8126540207308022 -516 877 .023665839140786238 -532 877 .08128342772963357 -581 877 .0941543857717077 -589 877 .7956585867828615 -597 877 -.5501555346619766 -603 877 -1.327962347092042 -604 877 .16530557502697407 -610 877 -.3832439090675079 -617 877 .8801621128630918 -619 877 -.1253732693856226 -625 877 -.052702884553473606 -627 877 -.10646678127507057 -634 877 -2.8387871973953067 -636 877 -.6638947986847811 -638 877 .04412556991841267 -640 877 1.5772498447778558 -641 877 -.5938021814943133 -652 877 -.8051337250367433 -664 877 -.2532737987317504 -684 877 -.9357602576710167 -724 877 .547447144812854 -737 877 -.20074945476304495 -739 877 -.04797699566256132 -755 877 -1.3010266640631392 -762 877 -.3771496973271631 -773 877 -2.5350912732162176 -788 877 1.2408229036408047 -792 877 -1.3002890614349334 -795 877 -.7333587796853848 -803 877 1.6825654373663952 -815 877 1.2248269487310006 -820 877 .10494312054164795 -840 877 -1.1668119716693588 -867 877 1.035604159262985 -879 877 -.6171472365256409 -883 877 .134681770648491 -908 877 -.9704026660612087 -910 877 1.297533913450866 -911 877 -.04089786653273064 -913 877 .5077693479940585 -915 877 -.6041393512036148 -917 877 -.951265806930402 -924 877 -1.1343439259613919 -931 877 -.9829213707576108 -935 877 -.6184824769523217 -949 877 -.17902191762900038 -968 877 -.6877839921111173 -975 877 .3270945872867432 -995 877 -.6211360311851506 -13 878 1.5174941522292644 -17 878 .7330122187254764 -21 878 -.9714059797341097 -31 878 -.5899924941780468 -34 878 -.16620186961252567 -57 878 -.7416199857333083 -72 878 -.8338227448796218 -95 878 -1.8020817522731993 -112 878 -.0055103381552529945 -117 878 4.223501374246036 -121 878 .5362032064611323 -129 878 -.2879391809136717 -131 878 .4189887889404226 -142 878 -.32731746166944076 -144 878 -.3578243998590786 -168 878 -1.1717888654257813 -174 878 .27565650175064565 -180 878 .41417866652345836 -182 878 -2.12796140292792 -185 878 .7078987989506483 -200 878 -.0543069079852187 -203 878 .7647174506881538 -206 878 -1.135694410239356 -207 878 .12951773160972455 -227 878 -1.57865800408198 -256 878 -.10956771056244233 -262 878 2.376760304774661 -266 878 1.7838294111315227 -267 878 .15008723475229788 -288 878 1.5467743179840743 -289 878 2.004295568737118 -301 878 -.8250680202027476 -311 878 .34964293156628745 -313 878 .6897726360115153 -320 878 1.1717765051636029 -321 878 -.4143797353897581 -324 878 .24309530463338788 -328 878 -.5096535430940005 -339 878 .5651951766726464 -350 878 1.4226882899146613 -353 878 2.0030997401672224 -357 878 .20055789778090483 -367 878 -.6315217848387046 -373 878 -1.1765577549926636 -374 878 .4385933814844044 -376 878 -.9203183044518576 -378 878 -.4328800960612527 -380 878 -.18645992222440919 -387 878 -.519643930287656 -396 878 1.2275485952177816 -424 878 2.548604206253401 -425 878 .988183512362856 -437 878 .42625166979545714 -494 878 -.7411439096264947 -499 878 .08744616300986822 -501 878 .03396174021708166 -512 878 -.41728820347175083 -516 878 2.0905682930867524 -523 878 -.37619586307202924 -541 878 -3.2294204578614853 -543 878 -.8962335473498342 -563 878 -.009702329230018514 -576 878 -1.1140194314371035 -580 878 -.1617540357688242 -591 878 1.0355087425607203 -592 878 1.5795133589530426 -593 878 -.9108098415364619 -595 878 -2.6351966820587647 -605 878 .02357001095043325 -614 878 -.000621266025301305 -626 878 .7997253302802516 -629 878 1.8360351541790465 -636 878 -.09183771389533947 -644 878 -1.1533466532131658 -645 878 -.3597848562898037 -647 878 -.6235075367779196 -653 878 .6645649721681555 -658 878 1.322956141432657 -661 878 4.363368250067741 -667 878 -1.4026820606641837 -677 878 .5758026153685676 -688 878 -.21301796167966974 -708 878 -.351641154858081 -761 878 -.5846090323072866 -774 878 .2681096128953544 -777 878 1.312574616340837 -803 878 .14326732456087585 -808 878 1.164789789427958 -814 878 .1386639688577616 -815 878 1.1812861503953158 -820 878 -1.8693855529743075 -829 878 -2.013804679598049 -841 878 -2.7512415797737844 -862 878 1.6613802180439965 -866 878 2.7242809713105944 -870 878 -1.3683281725592102 -871 878 -.11286604430838573 -889 878 -1.4825356649799182 -894 878 .3824514437816148 -896 878 -.021255502807846716 -900 878 -.9190810795758905 -931 878 -.2500398811783786 -939 878 -.6657423468691126 -945 878 2.4543167990070685 -946 878 -.8900287977303503 -955 878 .19841300432943454 -957 878 .4516902418293408 -3 879 -.45659514171993126 -6 879 .2342395212118661 -23 879 -1.405575507078038 -30 879 .0313804978970007 -39 879 -.29712863172691 -42 879 -1.139418419813449 -53 879 -.15192987787033596 -57 879 -2.027191015595249 -62 879 -.8986698419930921 -72 879 -.2698547735150289 -85 879 1.087885471070381 -89 879 -.1923538407568759 -111 879 1.938638800927992 -118 879 1.3139628360271844 -121 879 .8304134498324564 -135 879 1.0922273001046519 -137 879 -1.1627707468499944 -140 879 .5444120776548245 -151 879 -.009113202316121713 -161 879 .6819117504160706 -170 879 -.06471126964370315 -181 879 1.3938258110552253 -183 879 1.7374200496154082 -191 879 1.6006959968377654 -192 879 -1.334660407967784 -205 879 2.5217577186924838 -212 879 -.5506609199834125 -214 879 .2238386732655639 -225 879 1.576074947018642 -227 879 -3.6201848561413894 -228 879 -.5938743953711825 -235 879 -1.293893780659757 -240 879 .1786125408584513 -242 879 -2.4481806871463476 -243 879 .1896837513294146 -248 879 -.4152794096207012 -256 879 -.7688751897543448 -270 879 -1.4566797293706815 -278 879 -1.4868032122512458 -282 879 -.09449356609809192 -302 879 -4.419414394795662 -320 879 .03928161438646956 -326 879 3.4379589307337017 -327 879 .3223887168674062 -345 879 -.8294190487706086 -349 879 3.8877246650779185 -357 879 2.3096397548755947 -371 879 .30388648770422055 -379 879 1.7637205623773098 -381 879 .25404811441950503 -390 879 -1.4019254397669896 -394 879 .22876994601704775 -395 879 .2956370384139945 -397 879 .535809692000337 -403 879 .3283865969660815 -465 879 -.6807420531036452 -466 879 -.3041300912770273 -468 879 1.1625302839493634 -470 879 -.680596928285779 -484 879 -1.113408457946844 -495 879 .9967439420083453 -500 879 -.16172825857753176 -502 879 -.8849857542857071 -506 879 -.09538875885915994 -510 879 2.0708703363149255 -521 879 -1.5962737151492725 -529 879 -.5149799956972302 -532 879 .9486216621386399 -535 879 -.42337436381955124 -537 879 2.5900105624878016 -541 879 -1.5430937450112263 -552 879 2.1200921939283934 -570 879 -.01306469043549352 -577 879 .09988879656887956 -582 879 .5669453526823363 -590 879 .7269214069077421 -600 879 -.06495777905532119 -604 879 -1.782057172301554 -615 879 .13272769701489961 -616 879 .23779979806336993 -629 879 -1.0988253777425414 -632 879 -.0713047287489721 -639 879 -1.0415772554174327 -642 879 -1.0123700185757927 -664 879 -.1954279539231797 -678 879 .5885813875229808 -686 879 1.7223530137832785 -687 879 .8175602411275683 -692 879 1.3543076001985688 -709 879 .6499404832390353 -723 879 1.0283838291517462 -732 879 1.2332660448733728 -750 879 -2.7047834333721155 -756 879 -3.5123737109705693 -797 879 -.6452380433669096 -825 879 -2.7003064526517195 -830 879 -.20931537543318085 -844 879 .5887718447515053 -847 879 -1.0087540691918824 -851 879 1.7359720166336579 -869 879 2.909085698630883 -892 879 -.6886079750858776 -898 879 .562203325748788 -902 879 -.008242101378899046 -926 879 1.1713396984003055 -938 879 -1.5277214091051603 -939 879 .6773411855493048 -962 879 -1.4740063932993421 -974 879 -.12553768226092316 -979 879 .1742184311699237 -993 879 -.23489090738428706 -5 880 -1.0418328850648857 -10 880 -.34867914557573154 -13 880 -.826600321086775 -14 880 -.4370631954774362 -26 880 2.2194880287742698 -28 880 1.5561989312095428 -38 880 -1.9188790874202422 -43 880 -2.1344411288749794 -46 880 -.5356071060337516 -50 880 -.49134740742100086 -53 880 -.19344927240383733 -58 880 2.4825383098954337 -64 880 1.8635188300233545 -70 880 -.506267615715032 -75 880 -.5309543840092845 -103 880 1.6742336149509782 -110 880 -2.6847787474562512 -123 880 -.05166480319844477 -128 880 .5454784616618233 -143 880 2.307680078275941 -171 880 1.4150767164359963 -179 880 1.4182978827605832 -184 880 1.4187526333074008 -185 880 .36056825334327103 -193 880 1.8294425936545609 -212 880 1.225577942171156 -215 880 .1454727877635688 -238 880 -.8498758263506462 -245 880 -.28022480056379695 -246 880 -1.984294535621576 -247 880 .553606877769667 -250 880 -1.2639493932559922 -255 880 -1.1937534534851841 -256 880 1.2822445112132297 -265 880 .06906448659690229 -311 880 .847728560484634 -326 880 -1.0915739473506416 -327 880 -.7691679293233139 -341 880 .7051021272117336 -345 880 -1.642999423098797 -359 880 -.638650849233243 -361 880 -1.0946343364150963 -377 880 .30095388093435593 -396 880 -1.4746670233823134 -407 880 -.882737189646972 -411 880 2.4319978522680885 -433 880 .30003835960782727 -448 880 -.514506246092 -450 880 2.710655902090738 -462 880 -2.49273124532013 -464 880 2.1734167902723254 -472 880 1.2252363214384645 -495 880 -2.1803739143521845 -511 880 -.5970526697006869 -530 880 -.8072445804676776 -552 880 -.5775918159241731 -561 880 -.3461128026267136 -571 880 -1.706468139861106 -583 880 -1.3612602312385156 -585 880 -3.616731215740802 -589 880 .23758409951844695 -600 880 .30645535467614277 -606 880 .6899539677948617 -621 880 -1.687510227998167 -631 880 .23581139508629237 -633 880 .28980183278999505 -634 880 -2.188260118889219 -640 880 1.163143530841047 -650 880 .8228418762791064 -664 880 -1.0602027516378603 -667 880 -.4751283206677026 -668 880 -.9744658420270178 -678 880 -.04927110737215831 -682 880 1.4238885069362528 -727 880 -.8993535180339521 -735 880 .9359132669895505 -757 880 1.3687806605286277 -777 880 -1.774532501023573 -787 880 1.5416734301428767 -792 880 .21495605685946428 -793 880 .6729188724885076 -806 880 .07539860663836848 -807 880 .5565845233821041 -831 880 1.8668995787193483 -842 880 .8408302644638056 -873 880 1.2622833244432625 -881 880 .39232456334943416 -887 880 -.4001106363947876 -889 880 .7407928448460299 -900 880 -.16933261095271082 -902 880 -.47896083238926634 -910 880 1.3861967227070962 -915 880 -.3926005699150885 -922 880 -1.3174966324121444 -930 880 -1.0897934664035658 -935 880 1.6060390634370112 -940 880 .6236573785369866 -947 880 -.8354473151285764 -950 880 .14668967466061517 -953 880 1.5215611871118895 -970 880 -1.7497134327752244 -979 880 .7679750712258202 -981 880 -.7065325864765378 -985 880 2.533567791628261 -988 880 .22004723730194206 -989 880 -.3969406919629425 -996 880 -.32927831642473326 -8 881 -.4789892770550758 -47 881 2.1567389792597136 -59 881 -1.0564053750871834 -65 881 1.578705268086016 -95 881 -.5364828139857383 -98 881 .6165286783152945 -105 881 -.10890039206981858 -112 881 -1.6750062259046816 -113 881 .5201949214478976 -116 881 -.3852991796162205 -126 881 .5181856785157869 -129 881 .14432259197855327 -148 881 .22378464538085235 -156 881 -.15275036161095046 -159 881 -1.6351307717293482 -160 881 1.1686774715799253 -172 881 .681151394546712 -175 881 .4727139740505328 -179 881 -.5507752430359991 -183 881 -.6249084106482616 -188 881 -2.271107571424258 -206 881 .9291083805458504 -213 881 -.4349468708686235 -214 881 .3065168512314716 -217 881 .6615310144095466 -236 881 .6771834344302307 -244 881 .10341048267014302 -268 881 1.4907322296767642 -279 881 .6842511227829307 -287 881 -.221822040671402 -315 881 -.07812488932842127 -322 881 .4070347866643818 -329 881 .8111947828316581 -339 881 2.3152914409079477 -352 881 .9607986192565254 -359 881 -.3466980945400849 -367 881 .13477240297000873 -371 881 .1736468881628467 -397 881 -.423927261093037 -422 881 .3887940343743962 -467 881 .38241531334600287 -480 881 -.10356758852273876 -482 881 .7178207571060454 -483 881 -.5547411169680768 -485 881 -1.375158830614562 -505 881 -.8379848022723052 -526 881 .5499917179165811 -531 881 -1.0442793279619205 -536 881 .9215751813353446 -547 881 .8032144442641562 -558 881 -.08155516656365364 -576 881 -.6496985684726312 -587 881 -.7148634354641676 -598 881 -.840874097252871 -628 881 .910468971434668 -665 881 -.3205660787083314 -666 881 -1.5850819106645413 -669 881 .4808117848378433 -674 881 1.3406320502180737 -683 881 -.2279751095094624 -685 881 .24192411004722386 -691 881 .248862784216402 -696 881 -.7837122437978925 -701 881 -.9879796705929499 -703 881 .11106925949233212 -715 881 -.5172762235372922 -720 881 -1.1662991538332725 -729 881 .2764311076646224 -740 881 1.1136660495008015 -744 881 1.4007786010142675 -746 881 -.19468552563286418 -758 881 -.7351230924156267 -763 881 1.490122481347093 -765 881 1.3713387368850776 -786 881 .3124237355495409 -792 881 .2462679007217974 -794 881 .43264347025088334 -797 881 1.6638588581471643 -798 881 .4594326168333868 -809 881 -.9416919814729849 -822 881 -1.3853979840847712 -845 881 .08908271666016551 -859 881 .905308993817433 -860 881 .26357542767907216 -866 881 .00434844356577016 -886 881 .6397426042503379 -895 881 2.1804393126908574 -897 881 -.9829298186357498 -898 881 .3773001368505545 -907 881 1.3986654412918558 -916 881 .6258501512147162 -918 881 -.2945974157130229 -931 881 -1.820445450767504 -939 881 -.24204744519432905 -941 881 1.582933553081429 -946 881 -.6980173392982607 -951 881 .07991168537694811 -957 881 2.8937179723974897 -959 881 .13274839285244233 -965 881 -.32412426304298064 -985 881 -.6273994502053614 -992 881 1.3981513901364564 -994 881 -1.0284612593983027 -998 881 -.02621455955920239 -3 882 .6423996368302516 -15 882 -.5409981398277457 -35 882 -.7263052478599318 -42 882 -1.5756721238666027 -48 882 -.007628036223632766 -52 882 -1.7751481353645067 -64 882 -1.6314553487477113 -104 882 .333881221665511 -106 882 -.7534883941538444 -137 882 -1.1421917265692152 -142 882 -.8243973108775227 -143 882 -1.4335082885861659 -147 882 .3493992309124595 -152 882 -.12006901987920233 -153 882 -.6875449177091938 -163 882 -.13881068561134494 -179 882 -.6234861347383925 -180 882 -1.0471335991135027 -183 882 -.22911914106064307 -190 882 .3245151631881509 -206 882 .17949380443596977 -210 882 -.7304686858487865 -214 882 .22357592669156673 -232 882 -1.9769953259539925 -238 882 .742052611207962 -258 882 -1.0931069772410273 -262 882 1.2549956748765403 -269 882 -1.16091970828363 -277 882 .746912804552397 -281 882 -1.1606610789102805 -294 882 -1.6144620877967497 -303 882 1.1235923735985904 -305 882 -.352144009348224 -319 882 .23697818243001023 -342 882 -.26239194184575637 -343 882 -.4462712050559719 -345 882 .5253829804050774 -349 882 -.12698716302619825 -352 882 .21927660529206877 -364 882 .5841363065482282 -388 882 1.0999750743811862 -420 882 1.575343073729651 -435 882 -1.0185380124120853 -451 882 .37833887177793674 -455 882 -.19979172480842508 -462 882 1.265411594492819 -481 882 -.6877277684148946 -482 882 -.24593149658411254 -489 882 1.4405374955912174 -493 882 .7197598713479194 -495 882 2.0214758743723302 -504 882 -1.0044814856313673 -516 882 -.4249256685034204 -519 882 -2.100338334494806 -526 882 -.24784757546829947 -527 882 -.9388431345261666 -529 882 -.3071075084521721 -531 882 -.043016033388673734 -546 882 -.34902942915989477 -548 882 .2657926322941894 -564 882 .6819662943685495 -574 882 .4114697302997666 -580 882 -.11305366589234629 -591 882 -1.5135752849198774 -594 882 1.1147679400892716 -614 882 -2.134909882567826 -627 882 .29191229487581355 -634 882 .7107804737718133 -677 882 -.43667948252198907 -692 882 .7104331739558721 -711 882 -.20984539609438305 -720 882 -.4990547216179425 -721 882 .029061629159034902 -748 882 -.17244386794176403 -751 882 1.1868716051429138 -754 882 -.4251234388288276 -766 882 1.6849662368610134 -777 882 .6938385695968468 -778 882 1.125509130630529 -781 882 .759230775264364 -782 882 -.6927035753353383 -800 882 1.4269813141655525 -804 882 .6919126568727634 -831 882 -.6423821837305176 -841 882 .05291782718197466 -843 882 .8295590379531987 -857 882 -1.1848446476671086 -874 882 .9157091910853412 -875 882 .26221130960857264 -888 882 -.20626642573066234 -901 882 -.5968801442656391 -904 882 .5254336300601095 -905 882 1.1228013919577802 -911 882 .23339774771762065 -916 882 .1976950148786268 -925 882 -.672318812523673 -931 882 -.5882622151763847 -947 882 .9872785741720149 -959 882 -.10392409878399732 -963 882 .8894659884287341 -989 882 .18827188644243775 -991 882 -1.4839709979864768 -4 883 -.34118574816099917 -6 883 -.017493069200919795 -9 883 .5968877448160425 -16 883 .9876565387322332 -20 883 -.08926996687753523 -21 883 .13081439329046085 -34 883 .25342572750699305 -37 883 .701289810146004 -41 883 -.9094060793388481 -47 883 -1.109245015011321 -61 883 1.870664950210403 -62 883 .1380604329185025 -67 883 -.3001315522875914 -107 883 .5958412864301432 -109 883 .025142445695666676 -131 883 -.31796820706195905 -146 883 .14604106415094567 -149 883 -.25329895099635236 -172 883 -.0006556467645682899 -181 883 .3103789870033267 -194 883 .9130393841391454 -202 883 .916047444641336 -204 883 -1.3473438056042926 -210 883 -.16869460070799935 -214 883 -.5966697357103412 -217 883 -1.292324676978701 -235 883 -.3384783179094447 -240 883 -.6975181105712759 -242 883 -1.4835059849902388 -255 883 .5127367689369238 -261 883 1.640613457610358 -269 883 -.09079133908018092 -294 883 .0477438580613444 -303 883 .520599369726258 -308 883 .1637651702428066 -316 883 .07462154203355792 -317 883 .5277154900397552 -320 883 .11774225684970051 -333 883 .17650524696736164 -363 883 .161000035824528 -365 883 .5830230127801633 -373 883 .6332073858753481 -379 883 -.2797365505447974 -383 883 .8105465329529293 -384 883 -.779703792069098 -396 883 -.5693117308475647 -411 883 .14839491301677052 -412 883 .6235394633732726 -416 883 -.7942365982343459 -425 883 -.29455551594484025 -432 883 .1283512852536513 -473 883 -1.4556970550763597 -481 883 -.43424584564017 -487 883 1.564365323500145 -498 883 .2474132929115727 -504 883 -.6767445612450395 -538 883 1.5025069795600412 -558 883 -.024455145213272637 -590 883 .7463813908296735 -593 883 -.5953747377450189 -595 883 -.14948280460193283 -613 883 -.393853873322115 -619 883 -.39194867494849006 -645 883 .47420932920562703 -680 883 .07036354137374619 -682 883 -.028562835328464126 -705 883 .30066368060312076 -719 883 .42771567009289035 -730 883 .13670894061625255 -739 883 .4221881735412 -742 883 .19474317752427084 -747 883 .0001737424104408386 -752 883 .6474192170291779 -767 883 .5756755096987973 -778 883 .7607146452800813 -791 883 .1445874974319883 -810 883 .22684034337358713 -833 883 -.5667205842576974 -855 883 -.028330197414065582 -866 883 .253285877081518 -887 883 -.5690307266493955 -895 883 -.9465219737626513 -916 883 .17575046827383545 -922 883 .2586398536864504 -925 883 .4649185618401645 -930 883 1.0456646855218845 -938 883 .18013159669687062 -940 883 .7722827929592025 -972 883 -.20916006597570153 -995 883 -.9999076476069526 -997 883 .535836440954202 -1000 883 -1.4990070213904911 -1 884 .09627047311705593 -13 884 .17362367312538993 -31 884 -.08954780495345308 -40 884 1.5776627330535316 -46 884 -.3998586737084723 -78 884 .1429425278538948 -84 884 .0459211381920554 -100 884 1.2507625285810038 -150 884 .4529604394621376 -153 884 -.6145497080158978 -154 884 .7179698701116086 -165 884 .35188911362126324 -182 884 .3365475073727622 -188 884 -.6201971072662195 -203 884 .07283985166425563 -206 884 .8694275351719476 -209 884 1.1726110444170386 -241 884 -.24998862673159045 -246 884 1.6533271353241683 -267 884 .7762923550344423 -270 884 -.24752873944258127 -271 884 -.7936991989627362 -274 884 .775988894368 -282 884 1.3944910824340424 -293 884 .6554473542726332 -304 884 1.2113331856731964 -328 884 -.05675038508214228 -345 884 .5933953332339396 -348 884 1.3771890553145112 -366 884 -1.7453878541597017 -367 884 -1.1714043652762334 -379 884 .23551019708054102 -382 884 -.09488978444995866 -389 884 .19485504638609177 -390 884 -.7714806445096912 -407 884 .6694791996299365 -412 884 -.6117672630456323 -413 884 .3239163447410964 -427 884 -.18041436769579308 -435 884 .28434918330147957 -449 884 -1.2192760187958536 -453 884 -.45552925784937043 -474 884 -.027894402729863363 -475 884 -.026202321636013062 -477 884 -1.0456890450212009 -480 884 -.45336310334230434 -482 884 -.7785380714502164 -489 884 -.40149136931772206 -509 884 -1.1963391961235867 -512 884 -1.749768719306772 -521 884 -.002844890243995174 -522 884 .21969890444079843 -526 884 -.14422168604092184 -531 884 -.16449180505192254 -537 884 -.5019255104450323 -551 884 -1.3968506683169208 -557 884 1.971344636429949 -565 884 1.0126206891640643 -566 884 .8049787403842195 -567 884 -.4868015932591523 -571 884 .9779735708798807 -595 884 -.8814286632588078 -597 884 -.8060903722310485 -606 884 .6446832223268666 -616 884 -.21395993323508347 -627 884 -1.2421772659346488 -638 884 -.4737830080778061 -641 884 .6020300583186867 -663 884 .8071253389764889 -665 884 -.5364368823640541 -674 884 -.8620205856919004 -681 884 1.0435506213305443 -685 884 .6321788473787867 -702 884 .7188251742060231 -727 884 -.1425115112733426 -745 884 .5854284398568436 -752 884 -.623218438090961 -758 884 -.38005820586724204 -765 884 1.1414739595154129 -770 884 -.6738489008312819 -801 884 1.3744898018177205 -817 884 1.118675709677727 -819 884 .7447026057973776 -820 884 -.09583903450550779 -831 884 -1.2678463384688925 -861 884 -.04313101621034254 -905 884 2.3873223236337124 -908 884 .7082581897374629 -909 884 -1.0999433448524418 -916 884 .05143063567551978 -941 884 .5401546014995701 -955 884 .7984815814737828 -984 884 2.0433865547085763 -985 884 -.7440459456712507 -989 884 1.1724884105288516 -996 884 -.47021883976932927 -17 885 .259886816181468 -36 885 -1.3026212594488815 -42 885 -1.124561881514028 -48 885 .9738712967433506 -61 885 2.1453255425066784 -80 885 .040691153457334005 -113 885 -.7717434196728834 -115 885 .019898612638380733 -138 885 -.7208832713269044 -159 885 1.664737368485126 -160 885 .5613890308099795 -166 885 -1.818717081568743 -167 885 -2.2556409062959246 -169 885 1.1518205319941766 -204 885 -.985298417990495 -208 885 .15247103185721364 -213 885 -.01658968010378943 -225 885 .3989335081099451 -238 885 .2119369542694653 -260 885 .7402687762683128 -270 885 -.2980478940979031 -281 885 .1947468163893878 -314 885 -.2647857891355505 -325 885 .7227043080298244 -329 885 -.039287087679442056 -351 885 .08783252728196181 -366 885 -.20650092413438742 -367 885 .16198927628454887 -369 885 -.19422835800922486 -370 885 -.43575194006181983 -375 885 .7697321620228295 -387 885 -.023193947415262567 -388 885 .543802658298795 -394 885 -1.5918664843850063 -400 885 -1.1044836642566245 -423 885 -.0686967505010641 -425 885 -.5628110266599744 -431 885 -1.9782419134325215 -443 885 -.7788483824235288 -469 885 .42289523498696646 -488 885 -.762355114308114 -493 885 1.2363541652132046 -503 885 -.06121125100254356 -517 885 -.87805133571123 -524 885 -.6357363584352514 -528 885 .09935644642966254 -531 885 -1.0028225078615574 -532 885 .0017706560347269251 -535 885 .38484721707542724 -539 885 .657051659442854 -546 885 -.2193630665879913 -553 885 -.913943741731445 -555 885 -1.2063151727327521 -559 885 .6149027723294334 -563 885 -.20732109582633537 -565 885 -1.3356024113023357 -602 885 .5716422429037189 -616 885 .952985365150095 -625 885 1.087892463657741 -626 885 .915008589479149 -630 885 1.2568509873192033 -682 885 -.4681231588880505 -698 885 1.6642975008359355 -701 885 -1.8063306681083027 -704 885 1.397758400450706 -706 885 .9441933094358325 -707 885 -.18928643331356 -717 885 .7103779575990241 -732 885 -.2572967166598165 -747 885 .4210328657828011 -767 885 .657229868358849 -804 885 -.8125180492767152 -815 885 -2.4018828732365662 -821 885 .3120160797265899 -826 885 -1.4175857459155874 -847 885 -.9415888960987493 -854 885 1.3365526126293066 -881 885 -1.7098366693696807 -908 885 -1.7635726556208235 -920 885 -.7639031598755122 -941 885 .3472469329068438 -949 885 2.130880087405883 -950 885 -.5362631308145466 -951 885 .2246416615942543 -956 885 -.9067056605197887 -985 885 -2.0087496085105725 -992 885 .09871394993047086 -1000 885 -.7848459424508709 -3 886 -.033918697187843794 -11 886 2.078272715726657 -21 886 -1.2831350966738297 -35 886 .6001990645867431 -39 886 .1713142950864405 -41 886 1.1882524631295364 -61 886 -1.261605834884166 -63 886 .491294473807807 -66 886 .396050750791308 -68 886 -.547155427012456 -85 886 -.8081660278228924 -121 886 .03552804816561718 -126 886 .5916047572782323 -129 886 -.06634742674748997 -145 886 .6163658094026842 -146 886 -.3147078379619256 -161 886 -.7382224361190213 -167 886 2.1026328578283273 -175 886 .5002137537088328 -179 886 .2017102538862867 -183 886 1.7782254096734933 -187 886 -2.6750625557004564 -188 886 .041453706392314715 -189 886 -1.5342319762974328 -190 886 -1.2939003337890806 -196 886 -.18383884450747645 -208 886 .14266379728136516 -215 886 -.15688862969131917 -216 886 -.966867879001564 -235 886 -.4107056547900026 -240 886 1.1287843954020131 -241 886 .1459266295031023 -272 886 .5717673018579631 -302 886 -1.729547103748593 -310 886 -.04544458932636336 -314 886 -.6877503528665114 -324 886 -.1699586372630516 -331 886 -.5906399597292029 -339 886 .14992596234287053 -340 886 .32292858430958893 -346 886 .3151275892820823 -354 886 1.7043447752505971 -355 886 .7682593722827699 -368 886 1.0803568156185046 -369 886 -.5044949531244847 -382 886 -.8946097915460053 -398 886 -.5685932488886171 -413 886 .40587345672045505 -420 886 -1.5016907598277525 -433 886 .22604044496297315 -438 886 -.39914538224239526 -443 886 1.8424889161193163 -445 886 .22492496250012967 -459 886 -.1083265553932593 -466 886 .6874060458141059 -467 886 .20482254770434902 -513 886 -1.0210036175032686 -522 886 1.20716594774025 -549 886 .7410473949699055 -551 886 -.8037110887836308 -554 886 -.7746570494784577 -557 886 -.6119333233632627 -558 886 -.5114977588703586 -566 886 .8024705218260244 -570 886 1.330384261947413 -576 886 -.27340680125004085 -577 886 .2460481027526374 -583 886 -1.127015820926356 -587 886 .4481279743891606 -593 886 -.6971438954445749 -595 886 -2.30404575145808 -607 886 -1.0683929994449528 -622 886 -.527899426480298 -635 886 .007284356931786973 -667 886 -.15886257932006453 -675 886 -.16619883013607412 -677 886 -1.0665967601619708 -689 886 .22245933389751474 -699 886 1.22133626756633 -701 886 .31265889600477426 -702 886 -.11328314899503489 -712 886 .6576014162533222 -722 886 -.34561609756840694 -728 886 -.053336630136212315 -745 886 1.0364280949472295 -757 886 1.0089156251710292 -766 886 .917123181094031 -772 886 -1.0419797470424608 -775 886 -.697183403808787 -777 886 -.18870156063863958 -781 886 .016753899404954642 -789 886 .41900559013169053 -795 886 1.1315935573579057 -797 886 .5854462738518541 -798 886 .7183468174285143 -800 886 -1.6555228866661944 -802 886 .4546095003729564 -803 886 -1.1082025314783563 -809 886 .25082556768739267 -811 886 .2077852121608731 -825 886 .2441304385900826 -829 886 -1.0513548671569533 -862 886 .6975991721568422 -865 886 -.16554476531790246 -948 886 -.219950583929037 -959 886 .45439139963502273 -963 886 -.7953265514664115 -994 886 .19644842825048642 -997 886 .335823717277082 -4 887 -.34311202105859656 -17 887 .8523742950583533 -46 887 .7448117551934312 -53 887 -.14236851136398254 -57 887 -.11661677518775895 -61 887 -1.207402981208938 -69 887 -.8604265854400108 -78 887 1.1423183315131407 -87 887 .6827186720957433 -96 887 -1.1430069096209938 -111 887 -.7379255359936203 -120 887 -1.4111697797185427 -124 887 -.02725359710201751 -128 887 -.8386090617541075 -147 887 -1.865504018553278 -173 887 1.6084824981973236 -182 887 .5510726040644512 -183 887 .5467985849437705 -187 887 .11143755578775053 -190 887 -1.2834303928288486 -214 887 .7006053715511678 -215 887 -.822051999697262 -217 887 .7902832509668863 -218 887 .8440868300887305 -225 887 1.301321942541947 -256 887 2.2007099070602676 -277 887 -.7299222898058263 -281 887 -.09669177308572928 -284 887 -.20994966410319396 -287 887 -.14570388665693287 -290 887 .18551795316365505 -291 887 -2.395847919650726 -306 887 .7471408586026219 -309 887 -2.163671587156078 -310 887 .3596119578637913 -339 887 -1.3611656703659403 -365 887 -.09490283752920942 -367 887 -.08107419865414592 -378 887 1.1062196288120942 -379 887 -.6113480575792405 -385 887 -.6509161364869772 -414 887 .21147000057111848 -436 887 -1.2065895972742005 -450 887 .14655463412781694 -469 887 -.4497364878053318 -476 887 .02980127357871759 -481 887 -1.0264792192069183 -484 887 -.7120449725317426 -488 887 -2.2181426766393035 -498 887 .4812293337363931 -499 887 -.06685785905212177 -507 887 -.5666758079661107 -512 887 -.3280220748289696 -528 887 -.17552888987841594 -543 887 1.0217920690985076 -546 887 .9165566415022974 -551 887 .46073939060159985 -553 887 .10651418162539605 -571 887 1.7645313947590855 -575 887 -1.6042671037419924 -590 887 -.4809556891623994 -592 887 -1.9634425838450515 -601 887 .8206774562184321 -604 887 1.191905442134604 -611 887 -1.809786480224972 -616 887 -.5122886332937124 -621 887 1.1802498434040782 -626 887 .956203332653748 -634 887 1.6464277040261641 -648 887 -1.5751382568007113 -649 887 -.769366001547846 -667 887 1.8914099979407326 -680 887 1.734959725338576 -695 887 .8088577828793423 -697 887 -.4081443322349321 -699 887 -.4560726167189762 -704 887 -.9674508365396596 -706 887 -.7526397024195907 -719 887 1.0310567164571087 -721 887 -1.1411665525537589 -743 887 -.9659051669080102 -755 887 .733954582493189 -762 887 -.569832042168428 -773 887 .28812125783418685 -775 887 .3589558216169774 -782 887 -.6785393632494865 -783 887 -.2820290014104055 -787 887 .6747224968642471 -789 887 -.39648144453648915 -802 887 .47829327734589955 -806 887 -.9269361939526197 -813 887 -.17057520204293 -842 887 .7985861095804834 -855 887 .6175801164248008 -869 887 -3.209830139291343 -893 887 1.873906395500643 -909 887 .3662021922740723 -921 887 -1.6619289649925229 -922 887 2.2285523902841846 -937 887 -.38447485501273093 -940 887 -.7300196706978165 -943 887 .591172244015914 -973 887 -.8599298083942808 -981 887 -.44124605580802123 -996 887 .15674336774423245 -1 888 -2.0869497415992564 -16 888 .3687368864001562 -36 888 1.7063514763204113 -43 888 -1.0169168882421113 -59 888 -1.302592204187244 -77 888 -1.1361677041862472 -81 888 .10337282477424486 -83 888 .061332675839889855 -94 888 1.9007488980650353 -95 888 2.663914091629755 -101 888 1.9883534725523875 -102 888 -.031248339452228213 -114 888 -.7756554502120708 -126 888 1.7850077594013938 -147 888 .502277767785819 -168 888 1.773097974498023 -174 888 -2.1565723001237243 -185 888 .40801390632836115 -187 888 -3.073446350519671 -188 888 .7181508310104789 -197 888 .19859399362798755 -221 888 .5037153084075483 -224 888 1.4263121798154534 -236 888 .22642565957676755 -237 888 -.7766732368071958 -242 888 .13728938378883787 -243 888 .7665169019893696 -245 888 .9321797252747497 -260 888 .04035052729403643 -264 888 -.02762183598080816 -285 888 .6388177504288618 -290 888 -.47035216367076804 -334 888 -1.1867936810703381 -336 888 .2740736467837527 -338 888 -.23294565933216296 -341 888 .9993354637133868 -345 888 .11367584151720372 -359 888 1.0561790390501686 -370 888 .8716931084483948 -374 888 .14992898578517944 -375 888 .5559919144296531 -380 888 -.09686343118924386 -385 888 -.23687782936340854 -387 888 -.06156871009477518 -402 888 -.581979364873694 -405 888 .621988655646321 -413 888 -.3136611387940975 -417 888 -1.5138763653181844 -421 888 .7413283446188264 -434 888 -.37087939464378655 -449 888 -.35939098217384313 -454 888 .5851649238276887 -461 888 -1.1849747281419265 -474 888 -.13119030183856553 -483 888 -.6211885872439562 -484 888 2.001188448448264 -488 888 1.7700756983576078 -496 888 -1.1334197122536052 -498 888 .03743681110443879 -505 888 -1.6921495838434881 -518 888 1.5417495112279591 -524 888 -.932670875873326 -538 888 .4913876849823138 -539 888 -.4378616733300919 -548 888 -.9513143815372952 -572 888 .6996020402551735 -580 888 -1.5095145481762071 -586 888 -.4005649205845464 -588 888 -1.6424093003411797 -595 888 -1.3877745225204579 -597 888 -1.277173561945086 -607 888 -.9883100728480834 -625 888 -.2774071831927226 -627 888 -.5152265130186688 -645 888 .6832183371482735 -647 888 .20801966853372209 -652 888 .9291939381138465 -655 888 1.2388693010039473 -669 888 1.5373867147655358 -671 888 .4966667332377699 -682 888 1.147322563067109 -688 888 .8101836819885858 -690 888 1.3247571420570337 -694 888 .7471067047761049 -723 888 .7571491993025664 -757 888 1.0327471743598584 -767 888 .2278352051154247 -775 888 -.1578195580747092 -781 888 -1.4966270134783168 -784 888 .6972970272864412 -785 888 1.2543847514043425 -787 888 .5918300164955037 -804 888 .8532064026799084 -812 888 -.560250805929287 -818 888 -2.296207567168445 -823 888 .6735871131156024 -828 888 .20598123476188626 -848 888 -1.6273044723616672 -856 888 .4372120556854913 -894 888 2.204779686225805 -895 888 .37343307672390347 -904 888 .11930321282206642 -914 888 .3919038087386435 -923 888 .1602914032700769 -939 888 -.5525888055199828 -963 888 .5482233976101906 -15 889 -1.4904327624218279 -35 889 .1539444534565702 -37 889 .02879296186964586 -55 889 .0665794889781186 -61 889 -.1135458609956485 -82 889 -.1910663306564459 -112 889 -.9020230231301474 -117 889 .22583595037394044 -125 889 -.6494525212883592 -126 889 -.6716212018685772 -132 889 -.05736049905081046 -153 889 1.1260122045535665 -162 889 1.2817371482586921 -168 889 .030804636172541804 -181 889 -.19809259026159537 -190 889 -1.5661058092461253 -195 889 .590923551518587 -212 889 .41325263642032656 -217 889 -.029179520200736123 -223 889 -.32057126648085676 -265 889 -1.080670894489133 -269 889 -.8667614993240471 -301 889 -2.001656341943953 -314 889 .758931776139197 -320 889 -.9276231790983142 -332 889 .45917287472499724 -337 889 .522589407212837 -355 889 1.5485921461987495 -368 889 .2596312588355553 -378 889 -.5790082738670669 -403 889 .3747260244767551 -454 889 -.09452396931538642 -455 889 .18180660174318422 -461 889 -1.413162028446093 -471 889 1.365956492604807 -475 889 .24297638990906137 -476 889 -.007045864445695688 -478 889 -.683756449192105 -491 889 1.1852817039881527 -507 889 -.2044724155636001 -525 889 -.5459283967504459 -528 889 -.6747127507076907 -538 889 -.7262175716202214 -540 889 1.0885856632847255 -541 889 .5586571552922048 -550 889 -.7069033856494228 -557 889 .08853985424732298 -569 889 -.02489019602709233 -570 889 .46380009442077474 -581 889 1.1478360021963978 -582 889 -.6797173463702171 -585 889 .38831811024987073 -587 889 .8013935023063188 -594 889 -1.0126261034895747 -599 889 .46040701704766707 -611 889 -.835632621139432 -622 889 -.37223788034823235 -631 889 .5714183713893166 -635 889 -.1173041755431671 -641 889 -.05572506445024833 -643 889 -.13568713250813488 -655 889 1.0399972765029084 -667 889 1.3451964320235745 -677 889 .03214513124410827 -694 889 -.9818838530177323 -711 889 -.6055458413838444 -727 889 -.2848415419564535 -770 889 .9263436383645381 -795 889 -1.6207088112581187 -800 889 .234986267335288 -853 889 -.4089528810143035 -872 889 -.31712622046164396 -876 889 -1.1038650940029846 -888 889 -1.8265296531995219 -889 889 1.172828602568494 -890 889 .6693286097549082 -907 889 1.4901691174752159 -918 889 .3295062853935481 -921 889 -2.0796026695119556 -925 889 .8497648098309365 -935 889 -.4661318924692965 -951 889 .8891543711391418 -952 889 1.0560366638455188 -974 889 .6327419627156773 -7 890 -.09419500675966232 -13 890 -.16090298077968868 -21 890 .8548428831551755 -39 890 .07300387562757102 -41 890 .10091277240210389 -42 890 -.0808916072264973 -57 890 -.11964744623426266 -69 890 -.3303709194349113 -77 890 .20943221087422306 -89 890 -.254586585035631 -95 890 -.7614947716390092 -105 890 .4869713221504481 -109 890 .20197547496875645 -136 890 .31190265791112926 -138 890 -.2197427954468575 -149 890 .6954865114388604 -165 890 1.1427877588103568 -179 890 -.3135269518054477 -193 890 -.7341665533430599 -200 890 -.10926034490544784 -210 890 -.9707190488763893 -225 890 .7477253982360211 -228 890 -.004557110779562015 -235 890 -.8158029158138412 -259 890 -.41669258164562467 -266 890 .3985502396400997 -320 890 .08014758924692873 -321 890 -.7253890437712375 -326 890 .812712856138603 -330 890 -.38009403754357063 -338 890 .6164531449378524 -341 890 .12390115857107226 -342 890 -.40521207899314265 -351 890 .8149402466624948 -372 890 .4001768483290999 -387 890 .07260003076477482 -395 890 -.24903649400329325 -396 890 -.007107714639699558 -407 890 .1826148115060026 -411 890 -.6923892605278447 -420 890 .7214901477382639 -435 890 -.9305657613908563 -441 890 1.9070806185553089 -469 890 -.44362781325115574 -482 890 -.125225425142305 -509 890 -.39942778736118556 -512 890 -.7663957419899617 -524 890 .4297183339325751 -531 890 .5967873413656515 -538 890 1.004270683346853 -548 890 .15581453984161864 -562 890 .23797733735905596 -567 890 .0751818972744545 -571 890 .7697045342206068 -576 890 .1870360058470178 -579 890 1.0069267318640445 -584 890 -.29637214487463537 -585 890 1.2767335664062325 -599 890 .5086725644561177 -618 890 .04931692437677593 -633 890 -.6162609746246691 -634 890 .5727049437471968 -642 890 .7953666360421205 -645 890 .535710604133512 -676 890 -.9069461281807725 -684 890 -.6904872837088332 -692 890 .8700276931653557 -707 890 -.1054619053656962 -709 890 -.07330313313956255 -715 890 .6640582561879089 -735 890 -.09478475876977113 -748 890 -.0017979552334944499 -760 890 -.30286897124304646 -764 890 .5453195890800467 -779 890 .12294804490926738 -798 890 -.6832861824574596 -806 890 .47363010017665874 -809 890 .6410564510855201 -825 890 -1.3501368301925416 -837 890 1.528029208778702 -838 890 -.3251366412134614 -848 890 .05430382825038665 -874 890 .09257476489111843 -875 890 .5925416047425863 -889 890 .09182502542105954 -896 890 -.465675496868648 -907 890 -.3947011756967567 -909 890 -.03304306983346546 -932 890 .40581649420480015 -933 890 .07659767667378797 -958 890 -.7716334549033027 -968 890 -.8735129811946543 -973 890 .39016481526044483 -980 890 1.0290697713201866 -991 890 -.6340769282747604 -994 890 .4738658167376184 -997 890 -.07787022672804242 -1 891 .23743425629438863 -30 891 -1.0281776478526778 -37 891 -1.0195761222765118 -42 891 .3027499991170647 -51 891 -.1644080630766792 -55 891 .16773043159695722 -90 891 .12074217636844282 -96 891 .799019119115836 -97 891 1.0454234307410528 -112 891 .693527304227176 -133 891 -.2628005995337747 -139 891 1.0236068118689994 -150 891 .18578568738325227 -162 891 .8280394700624427 -164 891 -1.1294864955848067 -168 891 -.05421566929586956 -178 891 -.05387267653214353 -196 891 .9732927598001059 -199 891 -.13488261517912817 -209 891 -.8236004197139847 -228 891 .4849349267180629 -231 891 .6499860010780819 -243 891 -.6945984607838224 -250 891 -.0158650862614019 -264 891 1.0844815485147035 -266 891 .0035576315915541445 -269 891 -.9089051844694407 -289 891 -1.4661640876104 -300 891 -.4209885710293574 -301 891 .12887593717210116 -320 891 -.2018103332709974 -380 891 .9336005464265119 -381 891 .2778420255498263 -384 891 -.7385565415423925 -393 891 1.2050015638534777 -418 891 -.5705169861818544 -420 891 .6283621512032267 -427 891 .4291700404708563 -456 891 .07868044187867568 -471 891 .13352888362842974 -476 891 -1.558298144971364 -491 891 .3408209352870579 -492 891 -1.8932173530193888 -500 891 -.4292110088012975 -512 891 .17337885341744508 -519 891 .05116901022650336 -550 891 .4840364550053068 -553 891 -.31408531539064066 -556 891 -.4700124194330011 -563 891 .040709700642367674 -576 891 2.1260800656828613 -590 891 -.22225792382315518 -602 891 -1.092121119936914 -606 891 -.3029875673415851 -619 891 -.22877757281976388 -642 891 -.8504520671018623 -658 891 -.5671489282959087 -671 891 .32297585960544994 -675 891 -1.7736543343765478 -678 891 -.15527937952484294 -694 891 -1.3309466174046256 -714 891 1.285232377765964 -719 891 .6715746504357327 -734 891 .3872876644152715 -738 891 .5033474982297639 -746 891 -.31218381803399586 -772 891 .08590113407526481 -779 891 .47014473840605203 -782 891 -.1953678295272785 -791 891 .06543749858586043 -797 891 .5452145459258424 -809 891 .6242951237567574 -810 891 -1.1870158894376759 -831 891 -.7073605753190132 -832 891 .9771083109163714 -860 891 -.04865204110412158 -884 891 .13065773644377388 -887 891 -.6478268432165575 -902 891 .6750124360702932 -909 891 .6636703918744138 -913 891 .21540025444637576 -914 891 .6460435995107426 -916 891 -.4156987981861011 -929 891 -.7479877768255796 -937 891 -.4097563158786208 -939 891 .5442339443403057 -945 891 -2.101409892680436 -949 891 .9311925142428024 -958 891 -1.7121162087095891 -963 891 .16710599935728837 -966 891 -1.1246841616935097 -984 891 .03535177753765131 -7 892 -.1573083442835059 -16 892 .9823385452339584 -17 892 -1.1256556650604423 -35 892 -.2311729073467437 -37 892 -1.2525691551279357 -42 892 .6398638825882242 -48 892 .40866380192406676 -58 892 .04462699444024207 -69 892 -1.3543130181895422 -72 892 -1.1421885705185382 -74 892 -.14781857361382433 -75 892 .1072029144616113 -78 892 -.17371461338729643 -82 892 -.08263670936049648 -91 892 1.3624922559802854 -99 892 -1.9343126265779997 -104 892 .038721046623990854 -113 892 1.4047886519299622 -125 892 -1.2694708024662815 -130 892 -2.8669903331872275 -147 892 1.0106605222186593 -156 892 .38327799437445065 -168 892 .866679818240709 -169 892 .40965141459413307 -189 892 -1.394415276114736 -191 892 -.5523218834400585 -194 892 -.6210513874455759 -197 892 .8042911060081802 -200 892 .8283559665873045 -215 892 -.31535156662706354 -217 892 -.1922605080434328 -224 892 .12073769072506757 -234 892 -2.3067806417774444 -246 892 -.16547502471459566 -269 892 .5260352352600239 -277 892 1.8533681585074393 -284 892 -.9090200376516415 -295 892 1.0809599148438453 -298 892 .12673915697717456 -303 892 -1.1991509784717889 -312 892 .41022193390004724 -322 892 1.753392925186266 -323 892 -.7421560028727272 -329 892 .46274135038446124 -334 892 -1.426106745616035 -352 892 -1.3249028883203695 -356 892 -.25946713175612685 -362 892 .6796528525879842 -364 892 .20873050053326847 -370 892 .6709419518715122 -394 892 -1.1285154133269173 -403 892 .5470892646384407 -407 892 -.9456104806714762 -433 892 2.0703641195020097 -441 892 -.7706097789479152 -453 892 .3158190692284787 -472 892 -.08290566808523513 -480 892 -.021230337503354596 -498 892 .5085371177884277 -517 892 1.2740163192969312 -521 892 .9644689321957794 -524 892 .7850121041305694 -531 892 -.13397494980763194 -532 892 .4089999673339353 -552 892 .4092367935440163 -555 892 .8051915775407597 -565 892 1.8621125594957617 -584 892 .451076318492418 -592 892 .2872354136066644 -603 892 .08424733452891127 -606 892 1.2844961616496056 -609 892 -1.9941149402730731 -628 892 -1.1208659344257115 -643 892 1.596122244570728 -649 892 .7866754400953893 -666 892 1.025699025533771 -673 892 -1.8442292473809583 -684 892 -.34264053198669203 -687 892 -.5920962838733829 -732 892 .2696369077577525 -736 892 1.1437051503278755 -750 892 -1.3349695741814391 -771 892 2.4365410194751864 -772 892 -.5785138717555758 -774 892 -1.155744625803832 -799 892 .3702636489189453 -800 892 .011726357379914565 -801 892 1.8847848679654362 -829 892 .2552500271650703 -842 892 -1.2339325247497754 -844 892 1.7931550217604215 -847 892 .6017702521268398 -850 892 -.9632265713322872 -853 892 1.364736413242301 -879 892 -1.173672805688086 -888 892 1.7079100803209877 -890 892 -.3123833787225845 -896 892 -.5553023368357292 -900 892 .3973315004283182 -918 892 -.40463255462670655 -919 892 -.6531036593955933 -922 892 -.9438730138914261 -947 892 1.400851557924155 -954 892 -1.9327890872039861 -963 892 -.9074875958856908 -965 892 -1.0214786253210977 -995 892 -.4938858954963777 -999 892 2.8464068681935757 -40 893 1.540522460886903 -59 893 -1.469179116536801 -62 893 -.9151198364393005 -89 893 -1.29137772974356 -128 893 .6753678649625552 -131 893 -.7435659952955974 -139 893 .4389034909634499 -144 893 -1.6848743172593723 -193 893 -1.6564523835562754 -196 893 -2.172380604601146 -197 893 -.7405465580907779 -208 893 .553801534057222 -227 893 -.25751335887525734 -231 893 -.9404576044734358 -250 893 -.8015581930988908 -254 893 .411220951885561 -285 893 -.7338673830492215 -315 893 -.33422951295836617 -324 893 2.2927947959377315 -387 893 -.12862137220659486 -391 893 -1.6379714317451128 -407 893 .7485100676122273 -422 893 -.7166735753309241 -423 893 1.2326251143732807 -430 893 .9068102462358066 -444 893 -.26485554261452077 -464 893 -.3278193036730418 -466 893 1.5226652555393838 -484 893 -1.6348619769031045 -528 893 -1.7171652108250806 -549 893 -1.4992689981894434 -554 893 .25573116409128827 -557 893 .7623361203862893 -558 893 1.2809376090367772 -586 893 -.1518886134771235 -606 893 -1.710107070610473 -613 893 .4494501071430913 -616 893 .43468150166249026 -619 893 -.7453559889364012 -625 893 .741945678952671 -626 893 -.5666301385636805 -633 893 -.13602661905740984 -635 893 -.9301332118730062 -637 893 .5131325698417317 -643 893 -.022407650396650172 -647 893 .2760562899611475 -658 893 -.1720681931861663 -673 893 -.013617252506202479 -675 893 -1.5207860698932278 -699 893 -.8096228214170226 -724 893 -.9697240797122854 -725 893 1.222145913154126 -739 893 -.3419301074629653 -741 893 -.8080908632250261 -763 893 -.3720556033638392 -768 893 -1.1699976443420739 -780 893 .5044364011476754 -796 893 .3339598512079099 -801 893 .3965972691074798 -802 893 1.9412012265670284 -804 893 1.3111561179498774 -813 893 -.5545884935970715 -818 893 -.4682981096173432 -830 893 -.7179198589139542 -834 893 -.36782278136221125 -844 893 1.197725274535761 -852 893 -.47054813876529444 -857 893 .1953471334765987 -861 893 1.442065474272003 -867 893 -.3030846613500465 -874 893 .9686986416015728 -879 893 1.4477137370685795 -888 893 -.4256751585185166 -893 893 -.5290342578815674 -897 893 -1.8659427345421566 -917 893 .5116882939155392 -930 893 1.1893739496976166 -934 893 -.4392205188262712 -935 893 -.4301595523611614 -938 893 -.719118895087545 -939 893 -.19319954499585112 -958 893 .9871312113881123 -970 893 .016582048546804257 -972 893 -.4823423082798722 -982 893 .5261475222987707 -983 893 1.1888231891210046 -994 893 1.517068018411305 -4 894 -.7189929449666003 -6 894 -.5228696836709759 -26 894 -.4163729090539843 -52 894 -.5806681521819259 -64 894 -1.1457232338151448 -75 894 -.0783584397576851 -80 894 -3.837223747470084 -85 894 -1.228742727264812 -92 894 1.5484884902578462 -93 894 .7376139609142193 -95 894 -2.4913536226436754 -98 894 -.9110982470932474 -115 894 -.014208813604522336 -146 894 -1.5430329148891555 -148 894 .4005128247405306 -151 894 1.8448776211643523 -160 894 -.455722907158312 -165 894 -.185839991154256 -174 894 -.9250129219564263 -183 894 2.4664228137974598 -188 894 -1.9089690796844205 -189 894 -1.1550093316255476 -190 894 -.5795997556073169 -202 894 -.31390991603359486 -210 894 -.4460032786906194 -231 894 1.1503369299002533 -234 894 -.25906603949491636 -242 894 -.4978248884092675 -249 894 .8014987885151008 -253 894 -.2596761863981576 -264 894 .16390930253136907 -275 894 1.4639950323371422 -279 894 -1.6715117430626059 -294 894 -2.197458762741849 -315 894 .3947871134341183 -318 894 -2.449354995871164 -319 894 .9161253323575349 -327 894 1.0795235414969555 -341 894 -1.6236911947630077 -361 894 1.4165867257845988 -373 894 -.08789553055269918 -376 894 .2531967445492004 -381 894 1.24146110043429 -436 894 .07017400353643646 -442 894 .36630086369910825 -453 894 -2.7930710233538645 -456 894 -.8431235805931889 -459 894 -.19197081692344692 -472 894 -.3333005194172157 -473 894 1.731366210190018 -476 894 -.2797979422564614 -478 894 1.3849342369733895 -485 894 -.01977529409141561 -492 894 -.9310695382230998 -495 894 1.8097345820332997 -511 894 -.6772000736880072 -552 894 -.3868486330319073 -566 894 .7462801319612031 -574 894 .8645966480078042 -599 894 1.0006297110814804 -607 894 -.4505265325681991 -611 894 -.37604152840693894 -621 894 .2533534747155278 -647 894 -.2167115972108216 -662 894 2.9702220462358766 -719 894 -1.6677655217111005 -721 894 .7430442718418322 -746 894 -.15909525078306808 -750 894 .38456267771373354 -760 894 2.3030203746485864 -772 894 .5094590153184558 -775 894 -1.2930039626469745 -781 894 1.1705942952300654 -784 894 2.01251265287891 -786 894 1.5672148402927357 -816 894 -.4264108981898513 -829 894 -.5649941656025605 -830 894 .16972470754983457 -832 894 .8506112924064112 -838 894 1.6816882798934 -849 894 -.7175567654489614 -850 894 -.3732610088537719 -868 894 .25421482050868477 -871 894 .879540786547424 -911 894 -1.042726655250859 -916 894 -1.0231515783372689 -921 894 -1.5821285195311159 -923 894 -.40277991205302677 -924 894 -.8921103612357372 -938 894 -.666622151164209 -952 894 -1.3171491288687094 -960 894 1.180061887060315 -17 895 -.06942020079871128 -18 895 -1.2466164583266952 -23 895 -.31189673281755864 -27 895 -1.3299744506926112 -30 895 -.8542181826798535 -31 895 -.016777442765490355 -35 895 -.35030095695525093 -40 895 -.27499355884034243 -47 895 .0005078030866464784 -48 895 -.2850180175375278 -52 895 -.3871416905392622 -62 895 -.07493240565869319 -72 895 .03854524022263327 -74 895 -1.590606000567987 -82 895 -.7785182849000422 -88 895 -1.8529466719285745 -135 895 -.2129988736039623 -143 895 .5870192375373757 -154 895 -.006363495710386247 -157 895 .3535716916526478 -183 895 -1.027115511949955 -208 895 .00357928393862348 -212 895 -.577760253580691 -230 895 -.5917415412332376 -285 895 -.309726901789423 -287 895 -.29999595419753716 -292 895 .12934472306446215 -294 895 .6278911613687086 -335 895 .0070409797658087785 -336 895 .28454885029974586 -340 895 -1.065157132232723 -360 895 -2.4500692422484076 -363 895 .3528848294509126 -371 895 -1.2108436602462527 -378 895 .42010419062282467 -380 895 -.35939532503720983 -394 895 -1.3772668421439194 -399 895 -.1267631704227233 -434 895 .27257922907914023 -455 895 -.9060117923806116 -459 895 .2749670735500582 -463 895 1.7831834960843054 -508 895 .2960775752310318 -515 895 -.8918946626091651 -523 895 .704443470588519 -533 895 -.5550311962331635 -556 895 -.06892843449037675 -570 895 -.2102719056380823 -572 895 .2764903818446347 -574 895 -.3061529485325272 -582 895 .7156576163329453 -590 895 .027186377864546488 -598 895 -.0060545445127705155 -618 895 .4627184127254188 -619 895 -.2789484418773665 -632 895 .09546694924070243 -635 895 -.35448124924566565 -651 895 -.8714500668612825 -653 895 .8620162422931918 -656 895 -.26111884651054734 -657 895 -.937798333503762 -678 895 .15221657669845748 -691 895 .46041630782110077 -713 895 .27545230892030814 -724 895 .423541703352292 -726 895 -.7944208468072562 -756 895 -1.1430864043843576 -765 895 -.8493540542723744 -771 895 -.5510424388777904 -775 895 -.03320597537048334 -779 895 .34058516586437915 -788 895 .38373763432306196 -816 895 -.25279142665180465 -841 895 .6869171675028662 -881 895 -.48177872647050557 -896 895 -1.584330531865321 -897 895 -.7576949115909515 -902 895 .2838447945256038 -912 895 -.5728344488391085 -913 895 .6539367257493753 -914 895 .16670151171552713 -918 895 .04494392946323327 -956 895 -.2921099663815967 -957 895 -1.3212490719918906 -965 895 .7188222513506085 -967 895 .08775741305632032 -978 895 .12150927302566157 -995 895 -.9364142217273611 -14 896 -1.7504405712016795 -17 896 .7162117030717885 -20 896 -.385760610909673 -25 896 -.23288030662117454 -27 896 -.10637716131657557 -31 896 .6197734527446872 -36 896 .5939996566370545 -44 896 .5378475892730337 -51 896 -1.0216620610213683 -70 896 -.1687966557774738 -71 896 .6341775072545525 -86 896 -.8916930799592616 -111 896 .5198626138287774 -114 896 .3270536449562722 -115 896 -1.043673762282176 -135 896 .9896699792059388 -164 896 -.37420915966182977 -165 896 .5597820011275133 -167 896 .6726307802783852 -170 896 -.41154508210032203 -189 896 -1.777309688293098 -190 896 .3767130634795184 -198 896 1.835115562794114 -233 896 .7673390986417208 -246 896 .627913802911377 -256 896 -.3637946966554685 -274 896 -1.0274819462355256 -279 896 -1.2103714009112492 -298 896 -.665096417668902 -304 896 2.2550504515443186 -331 896 -.8113516395943652 -339 896 -1.4834181758388834 -357 896 1.4561532588506316 -377 896 -.4621183637075499 -394 896 -.9080305920946626 -408 896 1.1218933001786202 -415 896 -1.0239384510254832 -422 896 .08384102352100814 -423 896 -.5111380484373181 -427 896 .5989493171426059 -451 896 .579761668123435 -452 896 -.0026960195579520674 -457 896 -.2613628152538657 -473 896 .9149555041839603 -478 896 -.058877389696652 -500 896 -.023892894675526466 -512 896 -1.532629391432913 -514 896 -.23160655108223294 -521 896 1.1461441860025834 -529 896 .03401028320667654 -547 896 -.3357426798155565 -554 896 .12509257710016228 -555 896 .33763484769156116 -562 896 .5405089938367073 -566 896 1.0079830934412104 -577 896 1.0782345770071173 -585 896 -.46060222899445497 -595 896 -2.279184500073081 -600 896 -1.4756609846027804 -608 896 -1.0142033823554975 -615 896 1.6181353562295813 -618 896 1.0937687254618806 -622 896 -.11463970575836022 -638 896 .2168272703862505 -640 896 .16996666594090915 -648 896 .12043838316939186 -667 896 -.02404981039207809 -704 896 .6839145018260921 -711 896 .20100341388195644 -716 896 .34801075680883464 -741 896 -.4755721058808252 -744 896 -1.8193198924938323 -774 896 -.33228907978182876 -778 896 1.0739178791275639 -781 896 .6751316356157699 -802 896 .73752412660878 -809 896 1.6503330917570624 -816 896 -1.2249390797489732 -819 896 -.20705062682012215 -827 896 -1.8779933749949718 -836 896 .6742268332453032 -840 896 -.6392573118672834 -845 896 -.7490281617679628 -846 896 .3808272320925983 -853 896 .898779997838315 -855 896 .41711510934358265 -862 896 -.3321004007980289 -888 896 1.3406236267012823 -891 896 -1.7476960403872248 -897 896 1.1590462959372736 -907 896 -.9136926726848548 -932 896 -.8495881112661251 -938 896 -.2675458464438697 -942 896 1.3723394207486026 -983 896 -.293138537544027 -992 896 -.6522545743091825 -999 896 2.733110099954319 -15 897 -.3126166528655461 -20 897 -1.342296135451357 -21 897 -.5772766542291876 -28 897 .033325556690977275 -30 897 -.4887089768087831 -76 897 .48997389871341657 -83 897 1.0436638865381456 -89 897 -.8293211043119646 -116 897 1.8838054399148443 -119 897 -.3623187945831951 -120 897 .8354212040845673 -128 897 2.5346783579406784 -132 897 .8825925813440472 -137 897 .4262070881102012 -141 897 .5573156660940044 -143 897 -1.3020801574827787 -144 897 .40074963258259794 -165 897 -.02641567810549334 -170 897 -1.5840208462236578 -183 897 2.585758925498573 -204 897 -1.1527547539341876 -210 897 -.3616551339917259 -211 897 -.6399191575817818 -220 897 -.5124396455502256 -223 897 -.5048230622136269 -235 897 -.04357637684200073 -243 897 .2989337772570414 -254 897 -.03184180834275111 -256 897 2.2575920373805265 -270 897 -.22397707797133887 -278 897 -.31062521688577605 -279 897 -1.0090217147959286 -293 897 .9545071867405779 -298 897 .15175990449310733 -306 897 1.7050046680699436 -313 897 1.315167610856741 -322 897 .5416128817420197 -335 897 -.39041817282835234 -339 897 -.29959706079365145 -345 897 -.16164432293707776 -349 897 2.614867137303084 -355 897 .2015886978317816 -358 897 -.4528006441828357 -364 897 -.917108774138881 -372 897 -.9296205547463491 -394 897 .6680719465417175 -401 897 -1.7958797918839442 -410 897 -1.0063971203781863 -412 897 -.4377256741318889 -427 897 .3848353149020572 -428 897 1.053012431020169 -432 897 .10398428673458293 -433 897 -.00796095141425518 -436 897 .8018560609993017 -469 897 .39265125690623626 -470 897 .749269823005746 -496 897 .07379019366392094 -498 897 -1.5449891882416709 -515 897 .0140698069088208 -522 897 -.9983354941992963 -532 897 2.120217657469385 -540 897 -.3303989720760196 -548 897 -.6945223570672224 -565 897 .3590341992187912 -572 897 1.0673609094704266 -590 897 .07246262798329327 -602 897 -.7415000024344849 -604 897 -.30519926556037374 -612 897 -.037149274765494136 -614 897 .3828477697976519 -633 897 .8301558738987006 -634 897 -.4957904716949755 -654 897 1.757421119068999 -660 897 -.466132657797967 -679 897 -.5566639324463183 -692 897 -.6676992227174684 -730 897 .18641835302322207 -737 897 .5145622513661334 -744 897 .1580652115401483 -745 897 1.4086477745090762 -748 897 1.4586229652924267 -758 897 .705565408207004 -764 897 -.527858969817763 -769 897 1.4144098804088772 -794 897 -.6744856568547948 -800 897 -.19389374685111635 -805 897 -.7333722385135427 -811 897 -.7733437564595518 -813 897 -2.550157334860115 -816 897 .6901549847840767 -818 897 -.2728064955540498 -822 897 1.6004939011012274 -829 897 .6364076618264918 -857 897 .005331382683041744 -864 897 -.8265603722006704 -869 897 -1.899334291425844 -876 897 1.7066313658308039 -893 897 -.8377823961786802 -904 897 .3994500330707427 -912 897 .07845791135088545 -915 897 -.2857077493981753 -926 897 -.8766766343043405 -939 897 .04811037529403796 -945 897 2.1001178040036828 -957 897 -.2910457304753327 -967 897 .010038437432202493 -968 897 1.3218739397704835 -970 897 -.07215624933249166 -971 897 .1869489378463487 -978 897 .4710662719226768 -991 897 1.0141252512750973 -1000 897 .9756741701174058 -12 898 -.03289592516008344 -22 898 -.237932968139682 -27 898 3.238395575377001 -32 898 -1.7364233041334565 -64 898 -1.7056782650025286 -68 898 -1.4661850059577104 -71 898 1.3361258066804553 -72 898 -1.1923359097079556 -93 898 .5271018656695661 -117 898 -.9645540946540601 -124 898 1.362977983327319 -144 898 -.2609148064578674 -146 898 -.9502819077474118 -150 898 -.09056678220321455 -155 898 -.2917937599535006 -163 898 .6006607316111336 -185 898 -.4262938388127189 -209 898 1.2687499008765273 -222 898 .9326663513631593 -225 898 .04897786687325306 -258 898 1.3034007830845298 -260 898 1.1211145632282078 -278 898 -.5304759065325164 -285 898 -.28785985711660733 -292 898 1.2702140680959664 -294 898 -.4078369364041173 -309 898 .7720432682728245 -329 898 -.12504411357897693 -330 898 -.6042957265531859 -337 898 -1.034482546197498 -396 898 .21157380772923595 -405 898 -1.0718574070870224 -411 898 -.307362731463947 -416 898 -.1259790319798238 -434 898 -.6463519872143965 -441 898 -1.0452569315181506 -451 898 -.15995279795920617 -454 898 .23392732937570795 -464 898 .27098254554053963 -511 898 -1.7092190943471468 -524 898 .8935396249424553 -537 898 .7675311466351807 -544 898 -.3044229723888098 -555 898 -.08983517502428699 -557 898 -.19137896820589562 -562 898 .8242701383923675 -569 898 -.44143958233247343 -571 898 -.2883495430892927 -595 898 -.40324286308471635 -618 898 1.418374291452338 -628 898 -.8519547983042032 -629 898 -.8121634210572957 -638 898 1.7035912080273303 -649 898 .36866361683453724 -651 898 3.2329797650022076 -652 898 -.11540721366058784 -680 898 -.36823849186559743 -681 898 -.7761824138942823 -691 898 -.5796252992196526 -692 898 -1.1315554418151483 -718 898 .919939822006888 -745 898 1.1852346688977415 -747 898 .534141967890465 -748 898 -.4064660862164809 -754 898 .6911520216961127 -755 898 -.31349454476310495 -764 898 -.5916036047395403 -768 898 -.40261350756469877 -771 898 -.06401387794226748 -778 898 -.8805176561622307 -782 898 -.2884389959743374 -804 898 -.4767125548529203 -814 898 1.0580406430536973 -819 898 -1.2176208889098714 -826 898 1.2205030875146625 -837 898 .34236830473807445 -849 898 .03632794853600222 -858 898 -.5547013260916709 -872 898 .18275791916909884 -875 898 -.7481342008435509 -876 898 1.008645901351829 -879 898 .012735585175483122 -884 898 .24333462196410682 -892 898 .4784677783178517 -905 898 -.040747132709787415 -912 898 1.034841659439317 -915 898 -.5398180828302119 -921 898 1.1391467708098961 -923 898 .9556988997787171 -924 898 .10887689648453526 -928 898 .38421572431757656 -951 898 -1.291909263636607 -959 898 -1.1326645339301689 -963 898 -.8245264140605278 -966 898 1.3223852405051972 -971 898 .6821750225818762 -990 898 -.8979134479341696 -5 899 1.4278508338753593 -8 899 -2.2848806241826796 -14 899 .6457665489024299 -17 899 .4549019707432296 -20 899 -.3726466403205423 -22 899 .7977568078505466 -37 899 1.1858742736628152 -42 899 .6645729782450425 -44 899 1.45769459128396 -45 899 1.0667210814231027 -51 899 .09149377436743686 -54 899 -.3999924903469569 -58 899 -1.7013661083471092 -65 899 1.3445256055530936 -77 899 2.149492503005776 -95 899 -1.3917666476365136 -98 899 .9327422944015565 -109 899 -.993736323107077 -125 899 .43529576510061846 -139 899 -.24183886208524 -155 899 -.48901900009116095 -169 899 -.398416194255605 -209 899 .6632606073522388 -212 899 -.29422028949536777 -218 899 -1.1729608339304234 -219 899 -.8320004158578688 -223 899 .2752990014451474 -224 899 -.4195645821433244 -226 899 -2.1600638519919584 -230 899 -1.1024210976094855 -239 899 2.4176581248431606 -257 899 -.5744481873560808 -263 899 .18300839226927923 -268 899 -.20884106528990387 -278 899 -.13410308520398917 -279 899 -.43310141141349656 -329 899 2.1599558006698563 -350 899 -.945022610334027 -355 899 -.8977205656782791 -368 899 -.625797117983185 -371 899 -.6065698456711607 -374 899 -1.1914200251842633 -397 899 -.6182217938151661 -412 899 1.4420985618749318 -430 899 -.28168619206436996 -443 899 -.6407225230235798 -453 899 -.04946688359164423 -454 899 .11932782516251314 -460 899 1.9259602685712904 -470 899 -.31948304682252904 -474 899 .5145713205856335 -481 899 .1333110865245758 -483 899 .7536917771729579 -484 899 -.2630740460965276 -534 899 .32982247637937506 -538 899 1.229924745654353 -539 899 1.4387324841384694 -542 899 -.3671380322276671 -544 899 -1.0796537791600906 -573 899 -1.6655240069641277 -577 899 .20976997857397028 -582 899 .411851564016955 -597 899 .4099021085716671 -616 899 1.9119959881028443 -618 899 .9110124867203016 -639 899 -.1347721365411108 -649 899 -.38251351383470067 -662 899 -.2417333564172952 -704 899 -.16070282093421434 -710 899 1.5451839778083372 -722 899 -1.5129265698091061 -738 899 .12439209513355771 -752 899 .7876303109869461 -760 899 2.311372650587418 -764 899 -.5421262569357344 -769 899 -.0973556473187307 -770 899 2.181816929741303 -783 899 -.43645676520124926 -797 899 -1.8059142528041443 -799 899 .07260319483703284 -806 899 -.222107756574756 -814 899 .5627214643688025 -816 899 2.4213976908150614 -823 899 -1.322683207503398 -852 899 -1.2942517492887222 -868 899 .850807407258667 -890 899 .7097770136350411 -908 899 -1.8157726970502637 -920 899 -1.3076553237337587 -921 899 -.39226587083738973 -927 899 1.9089712093334545 -928 899 .6587454363542123 -950 899 .446761669863251 -956 899 -1.6484959340950622 -957 899 2.023372932795792 -958 899 -3.291245819269124 -962 899 -2.9626503320102775 -965 899 .9576228284652551 -968 899 2.152624885350625 -970 899 -.2172042502001333 -978 899 -.04346865713440584 -981 899 -.5771914815052084 -983 899 2.0508047597414985 -996 899 1.243158532412493 -4 900 .3490507832842962 -6 900 -.40892703471791425 -9 900 -2.099720574311701 -28 900 1.0204334368267027 -31 900 .672710987751154 -38 900 -.5190703065097663 -62 900 -.08950732206263137 -68 900 .06579409235748847 -69 900 .22873305922110404 -82 900 1.5312331377959092 -83 900 .9326347223850204 -86 900 -1.7997083959741174 -94 900 1.4882150588322054 -104 900 -1.369687777946286 -120 900 .5736723406792382 -129 900 -.15087888771401214 -161 900 -.11997924106973093 -174 900 -.6545529170111651 -176 900 .08696267476698807 -182 900 -.7171234936953867 -192 900 -1.083594163885194 -196 900 -.10723752459702589 -218 900 -.9215374230350659 -226 900 -.6539750517393269 -228 900 -.5305518326483298 -231 900 2.0176798178330517 -238 900 -1.9405992878894414 -253 900 -1.0387872023774822 -263 900 1.27822942479989 -311 900 .92103619828812 -322 900 -1.3719833061223023 -323 900 .8879208134182811 -330 900 -.28881244503802084 -337 900 .14032600827905847 -348 900 -.10375287850059463 -352 900 -.4215734370232419 -359 900 -1.5273502615348757 -362 900 -.754326863722449 -370 900 1.2178184873987428 -379 900 -.13651431016325205 -386 900 -2.2236816000669575 -388 900 -.06366780674275668 -400 900 .8445540051550091 -416 900 -.21544069131135532 -427 900 -1.9083466908693865 -429 900 -1.108480050687724 -434 900 -1.1890528010644525 -437 900 -.08970039525571939 -471 900 .01592019914534143 -475 900 -1.3076914231734895 -476 900 2.0048201372405705 -484 900 1.2672908799264562 -488 900 .5087495263291955 -493 900 -.05724123877126597 -521 900 .08433001963074037 -529 900 .8454771711204272 -534 900 .4051623264908404 -539 900 -.9545550294481029 -544 900 -.6887776514344718 -559 900 -1.665957451896833 -562 900 .010678833895400442 -565 900 -.3254391478497368 -591 900 1.0210681127604522 -597 900 -.22160734105492244 -606 900 .6044089132045476 -611 900 1.0181727110452148 -625 900 1.1831399521527883 -628 900 1.024916220849297 -629 900 -.411701498011388 -648 900 -.035017433631088585 -649 900 .2393797821400766 -672 900 1.768596508628037 -677 900 -1.3370696228024084 -685 900 1.3219765931380576 -692 900 -1.779908995178804 -709 900 .31912533785339275 -723 900 .9363955778207922 -728 900 -1.598945007436807 -744 900 .5269973626832678 -752 900 .8297481806599724 -753 900 .3346309598035264 -754 900 -.6481744053144648 -756 900 1.6261367388994508 -772 900 -.9602564051288751 -789 900 .34007918344811927 -792 900 .7111672897576444 -800 900 -2.4427523938760265 -808 900 1.1467392809106471 -810 900 -.7254114477757087 -822 900 .03890538877949594 -835 900 -1.211287906276438 -841 900 -1.7380556042903252 -843 900 -.6872155247206095 -847 900 -2.111966337606959 -865 900 .8805072900263695 -866 900 2.277494079983302 -867 900 -1.758082745393489 -897 900 .17400398915326531 -906 900 -.8325891727191514 -909 900 -.8727429137399684 -911 900 -1.4081798049017078 -916 900 -.4908082821635906 -917 900 .8890980048882072 -936 900 2.2352284372655715 -943 900 -.5907965718514654 -956 900 .12831784374813812 -960 900 -1.1703690563511209 -985 900 1.0528852732420058 -994 900 -.3819584369388155 -995 900 1.8137075044766933 -8 901 -.07060384460954076 -32 901 -.7472805586504381 -43 901 .06078678311056945 -49 901 -1.3219535077203293 -71 901 .788650014882685 -104 901 -.8922068869983644 -109 901 -1.8101710987943762 -123 901 .21261100612695077 -136 901 -.14058408760281607 -140 901 1.3301796741542842 -141 901 -.25816810756356223 -149 901 -.2127247653947141 -150 901 -.6313767441125528 -157 901 .6436070940298722 -159 901 .08533635472557367 -162 901 .6540743758593828 -166 901 -.5942225599060106 -169 901 -.8549499192573492 -174 901 -.3370408874562325 -179 901 -.13866090740669973 -188 901 -1.7698238771827106 -204 901 -.7101066001885704 -213 901 -.24008182266303402 -216 901 .5184492988644805 -232 901 -.5625535302988945 -235 901 .6674329282146382 -256 901 -.805303273903118 -261 901 1.7347371403173222 -275 901 -.44445889060588906 -301 901 -1.7937398005634095 -309 901 1.1376078950867443 -326 901 -.7312529236848665 -338 901 -.34172643231805844 -340 901 .4290307471877912 -341 901 -.0026873234643121635 -351 901 1.0558287332172538 -369 901 1.7152217074710792 -371 901 .9355027861218417 -388 901 .4393211639009478 -398 901 .1258909915249866 -401 901 -.23168743333910619 -417 901 -1.228711190685692 -418 901 .8861103901324539 -429 901 -.33970509142916455 -432 901 .6729484449859229 -446 901 .404325643993244 -477 901 1.3912360147719816 -483 901 .5449657697276137 -486 901 -.45855959777691924 -491 901 .05043688845441402 -494 901 .4330459690974518 -504 901 -1.4040083079061283 -516 901 -.7173490009426003 -521 901 .39413689576109606 -534 901 -.24631873274715507 -537 901 -.41092883852895473 -538 901 .22893714817297003 -543 901 -.2732007525622854 -547 901 .201781542871716 -548 901 -.09684257942609086 -562 901 -.783417259650685 -570 901 .7289073328470634 -574 901 -.24555822025294918 -584 901 .2558242800698052 -588 901 -.17721604073092956 -593 901 -.4958920527541515 -607 901 -.3876135135145857 -644 901 .7202453517834515 -651 901 .7501732706274533 -656 901 -.5352576637965235 -662 901 .06791793511257743 -673 901 .2738743858197021 -718 901 1.4816864100419505 -736 901 -.32165613196887854 -757 901 -.5749085099103757 -760 901 -.16970565972183008 -775 901 -.09861981949542803 -778 901 -.23695007598829188 -799 901 -1.3333474975934643 -812 901 -.1050931789626821 -822 901 -.9454724628356471 -838 901 -.9574201091013531 -843 901 -1.167084889341388 -857 901 .4019622810485886 -871 901 -1.6015990460569007 -877 901 -1.9694552054968988 -878 901 -.20479371208416902 -903 901 -.6832794704068128 -915 901 -.8556120088912231 -928 901 -.6673871406484083 -929 901 .07089269493296493 -940 901 .5110116282663881 -941 901 1.0238778701745024 -942 901 -.6055141465453111 -951 901 .2287841074541893 -967 901 .3366044202598676 -968 901 .09151412819932919 -975 901 -.45911338717640404 -978 901 -.7633344399339952 -980 901 -1.2386161002547282 -987 901 -1.6859770986354194 -1000 901 -1.106840444118932 -3 902 1.2992179852757377 -13 902 -.20087453650357953 -21 902 -.8318837918918568 -25 902 -.6935355396932644 -29 902 -1.1625092324466444 -33 902 -1.8706464786931893 -37 902 .8983542908797195 -42 902 .2066718084608592 -51 902 -.3102311444912078 -89 902 .4311995889136176 -93 902 .27190921983810606 -99 902 2.628518342536055 -101 902 -.7053239883704687 -104 902 -.7574223629502094 -112 902 .580868213846723 -126 902 -.46636867972289137 -134 902 .19633526574838533 -140 902 1.4781241856890912 -146 902 .6609599442685342 -168 902 -1.1892135047256809 -170 902 -.3062031707000407 -176 902 .10522659006514105 -181 902 -.1971636036972388 -200 902 .3575508317014807 -213 902 -.09858926267223965 -219 902 .2822145161484404 -233 902 -.8226263122898471 -249 902 -1.9302177035376655 -312 902 -2.71084180888453 -316 902 -1.38522741035176 -319 902 .09514270081810135 -328 902 -.48839401049841663 -333 902 1.260363890113851 -335 902 1.2492970715960512 -346 902 .49624574482754075 -355 902 .08384472384768021 -358 902 .14255355506651363 -375 902 -.6336125826136914 -380 902 -.29823122661444246 -387 902 .17205190493016564 -393 902 -.4132619263872389 -397 902 -.24389491868446023 -406 902 -.32079493912661244 -419 902 -.08841309897777158 -439 902 1.432505637426296 -446 902 -.08076839748994617 -451 902 -.8358306825618996 -454 902 -.09457561062248963 -462 902 .08923632641309308 -469 902 .8382292204738773 -477 902 -.2772159218129808 -506 902 .1972544146675002 -520 902 -1.0857410949916588 -522 902 .29413965885154253 -525 902 -2.222076008130805 -529 902 -.7606589004508097 -542 902 -1.5262990769026543 -549 902 .38199669382382806 -553 902 -.2689732730072156 -589 902 -1.3221822352589796 -619 902 1.1085752257779584 -621 902 1.0726313235756588 -648 902 -.7856429889003899 -649 902 -.3645857560094941 -657 902 1.0550598534849376 -672 902 -.6458555787191156 -677 902 -2.0232061692826036 -683 902 -.23082695490855332 -700 902 -.3630708779529818 -720 902 .38151822627565685 -740 902 -.7758396507613659 -787 902 .6598388662567042 -790 902 1.1636028305806951 -795 902 1.0520836698974272 -806 902 -.625681431013013 -827 902 -1.5433826660205836 -829 902 -.22246457075446574 -839 902 .1610372678908025 -852 902 -2.391290039491831 -865 902 .5575319824225625 -867 902 -.7660726878249513 -871 902 -1.5166920962766688 -873 902 1.1487290706226634 -877 902 -1.3666294421709135 -891 902 -.0433023812289355 -897 902 .7600327712033073 -923 902 .328173774458292 -949 902 1.1491434572142218 -950 902 1.1856137966562992 -957 902 -.29323491436274257 -959 902 -1.4321816981812914 -973 902 -2.353802828098656 -987 902 -1.265598203370845 -993 902 -1.8151764732873927 -1 903 -.8022092549112767 -9 903 -.07884047454439108 -15 903 -.9314127713625086 -22 903 -.1215475554323747 -30 903 -1.3691327725145601 -38 903 -1.6536480948578323 -40 903 -1.3157905866426274 -69 903 .42138568534530596 -76 903 -.9613595429124588 -86 903 -2.0082355861782344 -94 903 .8058411442798736 -104 903 1.6232600984758359 -115 903 -2.125239285364215 -119 903 -1.5982133723320062 -141 903 .5638995866221679 -145 903 -1.086922680543242 -166 903 -1.5261538490883422 -169 903 -.7923169756455386 -175 903 -.7146547432509645 -182 903 -1.5661311823351796 -185 903 1.3910809389355834 -204 903 -.15556427321642938 -224 903 .11978950666842678 -234 903 -1.7242578169355907 -254 903 .3511210180146564 -257 903 1.8717362654719827 -262 903 .503629858012943 -278 903 .026742828973852474 -279 903 -.1305062966010037 -284 903 1.3473288229990423 -285 903 .5683873922382148 -291 903 1.691724953269254 -307 903 -.5105384814632994 -325 903 -.060166327872566525 -340 903 -.15509385340912685 -346 903 -.5255510491506615 -356 903 -.03316359816663772 -359 903 -1.2009988714157442 -377 903 1.5006244784051763 -432 903 -1.5339478597239515 -439 903 -.7781059307697398 -453 903 -.4910866476244116 -454 903 1.0915637094766875 -455 903 .49325083573116346 -479 903 -.6972539078938985 -481 903 1.2540183334356978 -483 903 -.6043055730438697 -485 903 -.1638286547140707 -510 903 .1034228792730936 -516 903 1.5775930108038954 -522 903 .3807612493051332 -529 903 -.10058577307281305 -562 903 -.6209608488372719 -580 903 -1.3366628353051344 -585 903 -2.444040790135296 -600 903 -1.6393123657454276 -611 903 .8809214647786376 -615 903 .39756465325865553 -628 903 .18495849275598278 -642 903 -1.1649702983363255 -646 903 .384834698765037 -650 903 .6018537362636445 -654 903 1.2366980212772882 -660 903 .5791575940323649 -666 903 .6545076166984268 -670 903 .8956853528804269 -693 903 -.16943702169405023 -702 903 -.09302019999920096 -706 903 -1.5207158513467025 -707 903 -.12051982440782254 -717 903 -2.820946195627578 -721 903 .6032156026296726 -735 903 .09699962119044889 -737 903 .12868475173659794 -744 903 -.42168726405582957 -755 903 1.0890126313439719 -762 903 -.9204548225714255 -779 903 2.141228686773302 -791 903 -.3716872358512483 -821 903 -.8396568543512437 -833 903 .12942608215343077 -840 903 .3042424413665716 -855 903 -1.112253033079375 -864 903 1.2015063685957557 -875 903 .10035917931297528 -877 903 1.1327193676816996 -879 903 -1.7034245725899764 -882 903 1.7870175909518038 -901 903 1.2878633639514856 -914 903 .3700181579732795 -931 903 .4537883727690847 -935 903 -.008139211768160431 -952 903 .19295973812356257 -953 903 -.1842287730669387 -964 903 -.38389677920691706 -1 904 1.1745451371887765 -13 904 -.44573382750614543 -20 904 -.4489482649124164 -21 904 -.12296529410003285 -38 904 -.6728317266868291 -45 904 -1.6386355425584072 -46 904 .6815594843163352 -64 904 -.000283308210060184 -68 904 .8381207960595645 -76 904 .403160359642969 -80 904 1.1307580377446125 -96 904 -.5821664265650099 -98 904 .9300041335403064 -99 904 1.3958137655714322 -120 904 -.766617189232017 -132 904 .26704490313356144 -133 904 1.2213365266213085 -150 904 -.2682020707492512 -157 904 1.2878834330823887 -174 904 1.856992899764569 -175 904 -1.8914028882985687 -178 904 -.4597567316178425 -185 904 -.8385744391738574 -199 904 .7711247956996068 -206 904 .6019357690589626 -208 904 .3401056791201146 -216 904 -.05095799447745328 -235 904 .39744527416453146 -245 904 .2954568476137817 -250 904 -.3696634837132006 -254 904 -.45577405284706285 -255 904 -1.2096759988744252 -257 904 .02154620804811813 -259 904 -.4859539101436577 -271 904 .8952772040765166 -279 904 -.946202173647464 -293 904 -.298480005729959 -311 904 .9081719745681468 -314 904 .7281761846056083 -315 904 -.29018849327901886 -316 904 -1.1962884541911456 -321 904 .3969584225146695 -324 904 .70372779010341 -330 904 -.16407923894375676 -381 904 -.9369953461257563 -395 904 -1.5929219673853505 -411 904 -1.6550036402680601 -433 904 -1.82648495157996 -448 904 -.11415177423946696 -486 904 -.4010893237687221 -488 904 -1.4110951212588017 -506 904 1.4058685105953654 -518 904 -.8132588932396436 -523 904 -.0633234048931918 -527 904 -.13863495341365697 -536 904 -.9795324113825087 -548 904 .41812310466084435 -562 904 1.3676722702798711 -570 904 -1.2786774940742338 -572 904 -.8861985979715249 -577 904 -.6232277597221348 -581 904 -2.071990916949869 -583 904 -.11847325836533903 -588 904 .7347737098302194 -599 904 1.6980003693378178 -601 904 1.2680678490133153 -605 904 1.154143935688183 -606 904 -1.1795249709107267 -620 904 -1.0309007176439229 -648 904 -1.662557554698349 -655 904 .5200336753596633 -661 904 -1.4713268254687544 -668 904 -.6651670452386336 -678 904 -.33762981332756853 -679 904 -3.2373397507171937 -683 904 .1510924783284891 -690 904 -.3554809899915356 -692 904 .32814625895731764 -693 904 .23527386270348064 -724 904 .2258590309702289 -734 904 -.15469901056139243 -741 904 .9235288944286937 -742 904 1.8521021862671212 -753 904 .9934275030420616 -765 904 1.3087033954567817 -766 904 -1.6576224092469438 -778 904 -.054600486255717604 -784 904 -.6872548292742798 -812 904 .6918422900607868 -815 904 -2.7901901083975456 -826 904 .34133720182440597 -838 904 -1.4386169627876604 -840 904 .8900127172892895 -908 904 -1.1876696176924637 -921 904 -.8972533847374489 -934 904 -1.303239434720318 -937 904 -.46830102717954925 -939 904 .40441705972777897 -953 904 1.7264132133272336 -963 904 .8261934044383408 -967 904 .18830772949339447 -976 904 -1.2222385925588897 -981 904 .42190636786638996 -983 904 1.7280660942723907 -985 904 -1.5330362247618314 -996 904 -.4206638151048448 -20 905 -1.1237855173214908 -22 905 .5230372216736974 -27 905 2.2665218514908174 -35 905 -1.1612139033793736 -37 905 -1.2209084966511397 -40 905 -.25790991273825314 -45 905 -.7380891383156727 -54 905 -2.147305155232051 -59 905 .45380085257055425 -74 905 -2.101083487605766 -85 905 2.0417344444289633 -110 905 -1.4676612521104304 -119 905 -.42889539762879697 -135 905 .9110789447831983 -163 905 -.9078494906807388 -180 905 -.8758277956102622 -187 905 1.8458016775199544 -208 905 1.2849613089437721 -212 905 -.5951202237922051 -214 905 1.338448821077871 -222 905 .27791356147147844 -239 905 -1.6010675297516457 -252 905 .29721021030290795 -253 905 -.2312223427903919 -259 905 -1.7084842172347974 -286 905 -1.3739706314735125 -305 905 .004317244584350179 -311 905 1.0238150915804358 -312 905 -.30921692017866964 -316 905 1.0469189591495172 -330 905 -.8398740033188039 -349 905 4.171817199746444 -383 905 .782765036622019 -384 905 .03463887254717621 -393 905 .46545772855459766 -394 905 -1.1010647516756205 -398 905 .4270560198337947 -407 905 .10275751913230247 -415 905 -.825194228280543 -435 905 .6306055094635651 -436 905 1.0548805281795652 -437 905 .1972372923394324 -440 905 .9585827724257943 -450 905 -2.244122594104065 -482 905 -.7950220542304028 -487 905 -.4236073289445623 -501 905 -.9760139423262433 -503 905 .15109546027689152 -525 905 -1.3810717428538308 -534 905 .441700756170169 -562 905 1.7318503419895748 -572 905 .03167588670579269 -574 905 -.5199133489629773 -600 905 .25737824864153036 -601 905 1.5242910006175339 -626 905 .9640393149665115 -643 905 -1.1814196665081764 -652 905 -1.4280848486637794 -656 905 -.04831080935595259 -658 905 .5954461947696679 -668 905 -.24004187868976318 -678 905 -1.7686905965426207 -680 905 -.6253518269661369 -692 905 1.9157965411404143 -699 905 1.5340151014919443 -730 905 .3308831129237888 -733 905 -.8264591857242863 -740 905 .23573894856143832 -752 905 .4382517274815245 -770 905 -1.561588984596043 -808 905 .49637898694955507 -822 905 2.063589001848136 -825 905 -.8686816279827271 -828 905 -.30695142698632527 -833 905 .9925806647085409 -837 905 1.8595433093239968 -842 905 .43427289733694796 -845 905 -.9337345248084985 -859 905 -.10257772707569948 -877 905 .234539405236529 -902 905 .539522352515037 -916 905 -.3671215760409669 -918 905 -2.6898808954260445 -931 905 .9894370472143407 -932 905 1.7263015309079215 -933 905 -3.0935339837673284 -939 905 .44686017242996995 -947 905 -.45578016448040015 -950 905 .5062436537187815 -962 905 -2.277884349858732 -963 905 -1.8807418866292547 -976 905 1.7971300854796353 -13 906 -.5877745389682663 -31 906 .11185524800698031 -37 906 .1186045047414018 -51 906 -.045913047746342514 -70 906 .2228533241303438 -107 906 .5113020409518356 -111 906 -1.0010329731676464 -115 906 .916024979878359 -117 906 -.6942684812211666 -119 906 2.3220611543848815 -120 906 1.684392827472564 -135 906 -.662048396190059 -143 906 -.40787747906863764 -173 906 -.2405077713864302 -177 906 -.1311287438743563 -187 906 -1.5062314599360211 -188 906 1.6034033708383983 -206 906 1.952221457240072 -217 906 2.5606600980847096 -219 906 .5451843294330346 -236 906 .34520085054092575 -237 906 .3398685762931535 -244 906 -.1425964878938627 -261 906 -.24867077102039536 -271 906 .4133041663198953 -276 906 -1.0641268087995246 -279 906 .9125699195750387 -306 906 -.8529740644334515 -314 906 .8955294100064607 -322 906 -1.0316925864401523 -332 906 -1.1789429928563038 -333 906 .5492239734312959 -338 906 -.44782083119409344 -339 906 1.5375558965579486 -350 906 .07964891882981483 -352 906 -1.1399489916688044 -358 906 2.8810703666050053 -361 906 -1.7135761661149598 -368 906 -1.5755284763356712 -373 906 .14807569495332118 -423 906 .200595763970218 -424 906 -.1457604096933609 -439 906 -.7964440147599825 -448 906 -.02112708321294819 -451 906 .8751804185509978 -461 906 -.30826168084372274 -463 906 -1.9062475159563443 -464 906 1.511069066483036 -473 906 1.0057872148197107 -476 906 1.0966594096317996 -491 906 -.6667879884767066 -499 906 .7179617937928642 -508 906 -.34853405207067867 -518 906 .6364700806239744 -526 906 -.8904439527253153 -535 906 -.582005125124246 -536 906 1.8936493099408942 -548 906 .8900225294249677 -562 906 -1.377722320153115 -564 906 .6272758234274255 -571 906 .8347726592334326 -574 906 1.1057025143348442 -581 906 -.48472526252877035 -594 906 .21437057608276205 -597 906 -1.1169507915753552 -599 906 .9071604729872631 -600 906 -.09025564645799979 -603 906 2.210912789169331 -609 906 -1.6996561590454458 -627 906 .5073875603090741 -634 906 2.8137926824576103 -649 906 .9235157741051778 -650 906 .657890048222247 -657 906 .6061986187133926 -666 906 -.6325573510532438 -670 906 -.696078050534091 -683 906 -.3840144277858693 -689 906 .4991084860442373 -690 906 2.7142337580257054 -696 906 -.13023276502490325 -710 906 .09879818399859304 -717 906 .28129691279975866 -719 906 -.678525912323558 -726 906 -.36144483824523466 -751 906 -.01190769071341232 -776 906 -1.1681872602718109 -802 906 1.6479474857986416 -811 906 .6175073677151026 -816 906 .3687164032178022 -825 906 2.171169342184488 -838 906 .9861269193205932 -840 906 -1.3636303894393058 -846 906 1.2346482813014257 -852 906 -.22519047728347727 -862 906 -.07626130411276566 -890 906 1.7914647340843128 -891 906 .1349609259791443 -906 906 -2.1624694498360815 -917 906 -.25385498506261844 -932 906 -2.0129121370273673 -938 906 .7598970624050146 -943 906 -.6756212214390185 -945 906 .30972165373241306 -946 906 .501592184400952 -963 906 1.4722352927444362 -976 906 .833451654675222 -991 906 .31255511946889863 -33 907 1.534384358766749 -42 907 .011395630354875397 -68 907 1.5399339598753408 -88 907 1.3999309900319723 -89 907 .9628660354637767 -101 907 2.505214336765009 -102 907 .31546388706545897 -112 907 -2.054631560606913 -138 907 -1.7832513928101925 -141 907 -1.1101305857291115 -151 907 -.8297647569826148 -161 907 -1.167517402670781 -187 907 -1.8982158419163466 -189 907 .8159506037735303 -242 907 1.919025201972527 -243 907 .34763562265899695 -268 907 1.771322949354724 -296 907 .456934459348771 -298 907 -.09769379754381685 -313 907 -.9025365903655759 -314 907 .4256329393052334 -327 907 -.6652273702480682 -338 907 -1.161313897551442 -345 907 -.27184132611282197 -367 907 -1.0554248472595644 -381 907 -.6845447719465249 -402 907 -1.0113048439353387 -403 907 .49830348665455193 -407 907 1.057465356857654 -411 907 1.0622411649241514 -433 907 1.2475895968353292 -435 907 .04197358063101175 -449 907 -.22099857511082682 -451 907 .010182263750269205 -456 907 .21667787398100607 -458 907 -.7406103579095248 -463 907 -1.4325626812164738 -491 907 -.20015030261357608 -492 907 1.6778218244711467 -493 907 -1.2855838847421388 -522 907 -1.2981080061851773 -524 907 -.8531661698153327 -526 907 .21421402923591906 -545 907 .2087721675851213 -550 907 .6155620012870106 -554 907 .07135387193487376 -573 907 -1.3666495625022692 -574 907 .4212998077555894 -609 907 .58841091716351 -614 907 -.18345381341396502 -623 907 -.9523513146781342 -639 907 .3954424333786088 -658 907 -.0386497989971903 -691 907 -.33006257936613476 -706 907 .3902389788824274 -721 907 -1.4539656448427967 -722 907 .5958206947139915 -726 907 .7291919110893578 -729 907 -.04242523099832089 -735 907 1.1957005924172908 -736 907 -.399507064864457 -738 907 .3453783206740939 -741 907 2.357209875626765 -744 907 .7394161529521978 -752 907 -.20219595273884194 -767 907 -.5104652463246779 -790 907 -1.3068579033469143 -791 907 -.26852244461694913 -827 907 1.6244515101642094 -830 907 .10047751030660551 -832 907 -.5424595525630425 -833 907 .7444068060678353 -835 907 .02091213564188457 -866 907 .28212622004219545 -876 907 .99798218998963 -882 907 .5814443963806263 -887 907 .07295524565197077 -888 907 -.07154033491097692 -891 907 -.7335946200532162 -896 907 2.6578597483211444 -922 907 -1.6184502327375143 -925 907 -1.0895439072903752 -933 907 .3319821649073764 -934 907 .3067175394042227 -945 907 -.2066985523630457 -946 907 -1.125437981909323 -949 907 .1817035180816082 -5 908 -.05635573708708971 -11 908 .07553022790103907 -42 908 1.31552718498934 -74 908 -.17098729173206598 -107 908 .5090318717776076 -129 908 2.459590010649069 -145 908 -.31493611111839154 -162 908 -.23134883401538117 -163 908 .07954147311087284 -164 908 -1.194800418531066 -175 908 -.756939301824332 -180 908 -.7304150768941701 -221 908 -1.4911748041816362 -228 908 -.5609784231373037 -238 908 .8498725170730443 -283 908 1.0012288942673706 -291 908 -.7759690358093668 -301 908 -.7927457325230194 -312 908 -1.5038113268918614 -316 908 -.727450899078628 -339 908 .24363071166448597 -351 908 .4562935827420825 -364 908 .9554999302015541 -374 908 .7882759876102441 -375 908 -.7377166345174767 -396 908 -.307590017740626 -404 908 -.7446296346891593 -419 908 -.3227340951532995 -426 908 .36101636027267114 -429 908 .31297448228179303 -431 908 1.4242054518958176 -438 908 -.1600503023685444 -441 908 -.11285927543394741 -472 908 1.3488378477535319 -490 908 .988609468958474 -492 908 .8729502760278005 -496 908 .13134273155555573 -504 908 .12128966260942965 -519 908 2.3293719101693555 -523 908 .6386860877653006 -570 908 .31713960870736113 -582 908 -.2447968380565451 -584 908 -.7053592998102418 -593 908 .19260439749357994 -595 908 1.6792134861450574 -600 908 -.1849729987308348 -609 908 -1.5432660809606016 -611 908 -.1584010669854766 -630 908 -1.668440098981726 -637 908 -.6324418110793418 -652 908 1.2427356495217583 -660 908 -.6232428899642892 -666 908 -1.4330403290217675 -667 908 .7647324263886691 -671 908 -.726905789984273 -684 908 .571687849852207 -701 908 1.1625084732208224 -713 908 .1656179697330599 -714 908 .7652116767795033 -717 908 1.0211568252807908 -736 908 .37220249501942665 -742 908 .24905927409713924 -755 908 -.17460763985015498 -756 908 .8500204403866684 -761 908 .4641454515328857 -770 908 2.142060765462731 -781 908 -1.2750946564963954 -783 908 -.012459184806020276 -791 908 -.37553056275270963 -802 908 -.01078496880194485 -823 908 .8877316872769124 -828 908 -1.054995180404265 -831 908 .6118465821798708 -832 908 -.93741697065965 -835 908 -1.2505525023032948 -844 908 2.2547851701503205 -856 908 .9457382064338805 -873 908 .21594387509934337 -886 908 -.23559623687531622 -887 908 .7274994706279431 -888 908 -.517334169270157 -936 908 -.13070446538609265 -953 908 .45043295109435944 -965 908 .267908292150847 -971 908 1.3670654621416458 -978 908 -.5164165006075179 -997 908 -.6090970719464006 -13 909 .3826766572693208 -16 909 -.24839073269817294 -20 909 -.889100429257443 -38 909 -1.1918270916070794 -92 909 -.36166682990858257 -93 909 -1.434424854852522 -97 909 -.37431310803559764 -144 909 1.5083496742734466 -152 909 -1.394839474666729 -180 909 -.5813089387495917 -202 909 1.7718789674829012 -208 909 -.6780456487089929 -212 909 -.30152134259002766 -215 909 -.22387959299610866 -227 909 .29961599774977815 -247 909 -.6988235084840272 -257 909 1.0137127551755505 -280 909 -.6592867525688817 -288 909 .02131743176311475 -299 909 1.0179925957653484 -306 909 1.6004958671499865 -307 909 .5403941576658517 -311 909 1.7501233643706362 -322 909 -1.3020964456649702 -331 909 .33957415584448797 -333 909 1.2313844488761059 -338 909 .1397156406163856 -346 909 .811890983764028 -349 909 1.0253522817952432 -350 909 -1.3669681022905975 -360 909 -2.6592509582681187 -367 909 -.731294806494388 -385 909 1.2375828279363914 -392 909 -.20227521352852001 -406 909 .17266416826305309 -408 909 -1.5686317532756513 -411 909 3.3674901040797662 -420 909 -.21079286018476723 -433 909 .03312078313402808 -446 909 -2.955513323986496 -447 909 -.4633792296905244 -457 909 -.6689091394892688 -467 909 1.7054935225102548 -473 909 -2.5400012599680175 -488 909 -1.8072347944179725 -492 909 -.7316504453771425 -503 909 1.4234761715635134 -508 909 1.6294978035602137 -520 909 -.9201650490020802 -521 909 .5535528619953936 -542 909 -1.4027862242489553 -566 909 -.6186809410104752 -573 909 -1.0255819130170853 -578 909 1.1088746053002678 -609 909 3.760673922799091 -615 909 1.178151244141178 -617 909 1.4909713034708658 -618 909 2.94572599597127 -627 909 .11777505774009334 -633 909 -.7358183190566617 -636 909 -2.5046332769259685 -644 909 .9373806001679802 -646 909 1.625483707602487 -653 909 -1.581712713900339 -669 909 -1.9646989571016151 -674 909 -.4110085278374639 -699 909 1.9938332568341135 -712 909 1.9461487381914555 -714 909 .47652329001395266 -721 909 .578548637043829 -731 909 -1.5789486196194662 -733 909 .3653737746749268 -736 909 -1.7177051226958069 -737 909 -.3838193682505957 -763 909 .5552854532495188 -766 909 .056544694566553894 -789 909 3.609500716635459 -793 909 .7977462562917602 -795 909 .7062803434449498 -803 909 .6041627877269755 -821 909 .12455495285031262 -823 909 -3.4959388630701556 -831 909 .957627060700966 -833 909 -.3950558588763158 -861 909 -3.710474598427156 -863 909 .5709615186569895 -865 909 -.4084848544518041 -869 909 3.5543308311875585 -878 909 -1.6708223471375299 -879 909 -.4017326511036141 -888 909 .671122403840852 -889 909 -1.156541635056344 -894 909 1.50019669998978 -895 909 -1.67974019311326 -902 909 -1.6657901938028252 -909 909 -.1913357282685042 -914 909 1.509062633696194 -922 909 -1.0157044658167864 -926 909 -1.4526496260248827 -927 909 .7266588798721684 -928 909 -1.6622031412379403 -929 909 -3.0791591388652177 -950 909 -1.657445895160238 -953 909 1.8631177718234866 -962 909 -1.3310274681878445 -968 909 1.5942045328825196 -982 909 -.9655399383663006 -993 909 -.6283113304559672 -999 909 -.02223362323774522 -11 910 .6036249338046957 -14 910 .6591812170569259 -27 910 -.5805798638554368 -38 910 .43506068145089904 -50 910 -.7401948394821349 -52 910 -.4033024677788061 -58 910 -.2882268200060313 -84 910 -.4880090312658643 -86 910 .026177100571879254 -89 910 -.5827043572160169 -94 910 .17352266663766014 -96 910 -.2828306753919202 -127 910 .8558237788466153 -131 910 -.1601705028481341 -136 910 -.20525434533283637 -149 910 .3223325708860896 -151 910 -.10862487940787979 -161 910 .6851841512779046 -168 910 .4330634997301504 -176 910 .02605059911876527 -187 910 -.9532515531115465 -190 910 -.3412512119059994 -206 910 .36138550922402884 -210 910 .8614346373907602 -228 910 -.2294705584589816 -236 910 -.36899838574925264 -246 910 -.4617502272980305 -247 910 .8293893577734274 -249 910 -.3347464504781229 -255 910 -.34400046465077 -269 910 -.7764085523623961 -277 910 .6170560781107878 -288 910 -.4368695372773397 -294 910 .14909744239591133 -303 910 -1.0889211620772468 -305 910 .22841525797231746 -310 910 .26201526692291655 -323 910 -.32895615875893647 -332 910 -.4213109315731482 -351 910 .31023719329692734 -352 910 -.11335652585063227 -354 910 1.198174924078837 -360 910 .18082726753482653 -376 910 .10458817671800333 -400 910 .5185925943104785 -409 910 .3113292059117702 -412 910 .16657627749905535 -424 910 -.9392069176301069 -430 910 -.9119757107897202 -437 910 -.2563907583199121 -439 910 -.42743712582761595 -455 910 1.3003324984818523 -459 910 .1585027274910985 -464 910 1.08429301732413 -479 910 .25423225466067984 -482 910 -.38330701690022906 -485 910 .3215507498338003 -516 910 -1.2960984571415806 -528 910 -.7402305431144831 -538 910 .3406254558196532 -553 910 .16028908716170898 -557 910 -.7518724518661071 -564 910 .36872393442580115 -573 910 .17260121937058945 -586 910 .1862270541234188 -594 910 .11132981751014909 -595 910 .33426648617909266 -623 910 .7559241073484516 -631 910 -.131965987916286 -646 910 .11262330045874513 -659 910 .4088394728647095 -660 910 -.7693214503070904 -674 910 .044653098826136155 -689 910 .2841492033737269 -692 910 .28088441862507935 -694 910 -.4187254214484948 -695 910 .1463414130748571 -730 910 -.8030849219271791 -732 910 1.0679473698603463 -735 910 .6875201978607104 -763 910 -1.1512340859749177 -765 910 .2575763414932521 -778 910 .3181790647489376 -801 910 -.030408648774277555 -805 910 .3738629200503493 -818 910 .48385993501596797 -836 910 .9315484821852138 -851 910 -1.2067325654544439 -855 910 .9449765339021263 -861 910 .17390727512208595 -880 910 .34808425206155913 -910 910 -1.2002383587189442 -917 910 -.48893048889618895 -918 910 1.2953305869982534 -919 910 .4027172470769165 -923 910 -.6376503139212579 -933 910 .06114918180391692 -938 910 .7718676324892628 -952 910 .31758178862363345 -960 910 .15542923080087312 -962 910 -.3087832477623766 -976 910 .4595830983024483 -992 910 -.6485103169586521 -998 910 -.3636262222955689 -22 911 -.11210203481160466 -50 911 -.8473026781724843 -55 911 .12863780773663203 -57 911 .14001915399427423 -65 911 .5635540099312815 -71 911 -1.0444701058353498 -80 911 1.6272399000150974 -90 911 .4661431651491783 -93 911 .2273169292733042 -101 911 -1.1500757108365443 -105 911 .10535301680740085 -108 911 .7238414851151957 -119 911 1.142689182112164 -134 911 -.45551169008719133 -147 911 -1.7138260851695355 -149 911 -.3342201779779276 -152 911 1.4102385937780504 -159 911 -.5342394517349147 -166 911 .34167841118263975 -178 911 .8034375907242967 -184 911 .516484746407497 -186 911 .845361528747641 -188 911 .8479030020166228 -194 911 .6221712072678603 -214 911 -.42099256626671633 -215 911 -.8009126724639543 -228 911 -.04414283036604248 -238 911 -.3229140742973936 -245 911 1.4466120822985238 -281 911 1.5517159190421075 -309 911 -.7764464879427848 -314 911 -.14442757044427348 -316 911 .030684272789009707 -319 911 -.009753228882310339 -338 911 -.3984691621291656 -339 911 .7680216646072913 -344 911 .27945408954419704 -359 911 -.10031477619049295 -373 911 -.6347037270614875 -388 911 .16139663171249535 -393 911 1.0671669684950789 -399 911 -.5289784000065132 -402 911 -.2641497486610064 -410 911 -.17741027356000658 -416 911 .5798285422797782 -420 911 -.289264773351128 -427 911 -1.2594458262377997 -431 911 .2737792397152039 -459 911 .31058483006201437 -460 911 .05815659504035098 -468 911 -.3376223961558886 -475 911 -.26145642119568807 -485 911 -.08182905497491344 -489 911 -1.168091504169751 -496 911 .2359960828734187 -517 911 -.07106303069539746 -518 911 .5520313571100155 -519 911 -.04490809530322909 -520 911 1.0249687339839197 -528 911 -.12770861925632115 -534 911 .18015878733479007 -538 911 .24631269088861937 -551 911 .284936886875408 -552 911 .46237577112332406 -554 911 .13998101205159186 -557 911 .9348101769897565 -559 911 -.5992018165146604 -568 911 .4725459490955021 -584 911 -.7104373030677343 -591 911 .12335044911259893 -593 911 .632883681720421 -597 911 -.9911398115690487 -604 911 .9255012482823782 -627 911 -1.1903908634644909 -649 911 -.06325508091314429 -650 911 -.44562521240002373 -653 911 -.26207031571435335 -654 911 -1.5325385221422314 -668 911 -.526606091757049 -676 911 -.684842096334367 -719 911 .509458790219466 -749 911 .5515277213274683 -750 911 .806971903223417 -761 911 -.6430764892227809 -766 911 -1.0681058699583394 -775 911 .11805721425368135 -777 911 .38203425221449766 -780 911 .10235064287502611 -810 911 .8627074831790036 -815 911 -.4125999909335345 -816 911 .09988979572162782 -852 911 .12029451406018737 -868 911 -1.6249539420133623 -889 911 -1.1133653569675648 -891 911 .40402444303377494 -899 911 .2643183848285076 -904 911 -.7489239671253342 -905 911 .7688652410960554 -929 911 1.2182483408583944 -940 911 -.17212687714553868 -942 911 -.4807667069746511 -954 911 1.2916615221318528 -976 911 -.33164965574083644 -981 911 .6777833241250288 -1000 911 -.41313471695557485 -29 912 -.26856468530805266 -32 912 .18086722059154636 -40 912 -.05633168718280955 -48 912 1.9080329023946283 -68 912 -.40121060830286703 -81 912 .11368607103607961 -82 912 -.27911941906615545 -89 912 .5820856998706745 -90 912 .13426190752491451 -93 912 -.2675341518588057 -99 912 .48329275134792027 -127 912 -.7511464863098946 -134 912 -.0013798236185523782 -135 912 .047792825064252906 -139 912 -.07041912266084514 -146 912 .5276736525384204 -150 912 -.477033224842378 -168 912 -1.3173137191338924 -176 912 .5676469815894729 -186 912 -1.4371662904273457 -244 912 -.7996697754691827 -245 912 -1.3511722222469964 -261 912 1.178022986064448 -275 912 -.9142800605876995 -277 912 -.45150446734441285 -283 912 -.2982233656716823 -289 912 1.301586090745743 -319 912 -1.9924117026338797 -320 912 -.09751627182503869 -323 912 -.024886891762386523 -344 912 -.7176513099044695 -346 912 1.5119868938403918 -348 912 .12118702645898602 -366 912 .16632864820604293 -373 912 -.05317855581823083 -385 912 -1.3365449108535736 -407 912 -2.168369291562659 -434 912 -1.2925285287657569 -442 912 .2823333612663831 -448 912 -.6802170747033984 -453 912 -1.2827381204732986 -461 912 .780805508254536 -464 912 -.018839107926879574 -466 912 -.9582909624657876 -467 912 -.08313125995275475 -474 912 -1.8191297503191863 -475 912 -.4662601032065789 -493 912 1.7820800149950242 -503 912 .10953859892342761 -510 912 .3118287949096803 -521 912 .4667503256672017 -523 912 .9989707472364902 -527 912 -.8065627165920342 -532 912 .4576682996909424 -539 912 .9614909655265691 -546 912 -.252611685024922 -561 912 -1.8207104584707583 -596 912 .9532183640930693 -609 912 -.5497463737066044 -612 912 -.0845772619851681 -623 912 -.7131011042037455 -643 912 .2507557528629204 -652 912 -.09725664647572643 -661 912 .6949929275825611 -668 912 .6701390787604552 -674 912 .2663397116293393 -681 912 .8046069673986758 -691 912 -.9363948224021321 -701 912 -1.8727629677729059 -703 912 1.0204374978462105 -714 912 -1.8144447907918582 -733 912 .7802176447576356 -753 912 -.2747040248269479 -767 912 .635476860695667 -778 912 -.8804718752456426 -790 912 .4292610743102723 -796 912 1.2676984635529722 -805 912 .9897325538019889 -810 912 .21484437538374737 -815 912 -.4226432416542687 -822 912 .6621526373412403 -830 912 -.30008198422735755 -853 912 .9275456215066507 -861 912 -1.302565160901311 -876 912 .04919161374104651 -894 912 1.451594905645128 -903 912 -2.064952375342352 -904 912 .47817220711831726 -905 912 -1.1096739124677901 -920 912 2.3682541426921397 -926 912 -.17288822843668208 -931 912 .226134868753835 -933 912 2.297116340420971 -943 912 1.2665527311454223 -945 912 1.6345144265915117 -953 912 -.7432003804958945 -954 912 -.13904597574464223 -962 912 .6919266608709966 -978 912 -1.0216264016822205 -984 912 .2908384319104874 -11 913 .19805548558603142 -12 913 .11059855828327775 -16 913 -.9919660794510468 -18 913 .6872826928405946 -25 913 .46432210675983465 -34 913 -.6268313465952712 -41 913 -.6045088774588989 -58 913 .042137590883802645 -89 913 .5506033772029141 -96 913 -.6655305640911614 -107 913 -.28029197190044725 -117 913 1.6828124578593544 -120 913 .9324622135095948 -123 913 .14625834368256085 -134 913 -.6375202453167956 -135 913 -.1773413862491869 -151 913 -.016602176680746927 -160 913 1.0946032076347159 -166 913 -1.3767824676979967 -181 913 .518578788871016 -188 913 -.7143186616693374 -212 913 -.2268524936749946 -217 913 .5822495705393864 -231 913 -.4411788766196987 -232 913 1.464969078070449 -235 913 1.0871221236710062 -236 913 .48194266960208 -246 913 .5368455579342318 -255 913 .0860663983858195 -257 913 1.2277378505036616 -259 913 .5533451849101071 -273 913 -.8585946588240226 -285 913 .4243499829962484 -296 913 .5107980037036934 -314 913 -.553162973874706 -322 913 .14249006374197565 -337 913 .677755805934807 -339 913 1.2094168588576766 -340 913 .17280875477058782 -358 913 -.9488788286609864 -378 913 -1.0964992351402136 -383 913 .13446041272492903 -411 913 1.0892208661150307 -426 913 .8997753984048726 -431 913 .49076281423261015 -441 913 -.5042039807786086 -455 913 .7103324164186556 -464 913 .02732077842793272 -467 913 .6196177017030939 -482 913 .6039447679384279 -483 913 -1.1061109761281207 -497 913 1.7151705986617498 -510 913 -1.947907043530609 -531 913 -.6954904471113074 -535 913 .33871027621517175 -550 913 -.27960062561773863 -569 913 -.8515424604133326 -583 913 1.239612073938194 -585 913 .8133960397632282 -595 913 .9314666986961934 -603 913 .06571058380472555 -606 913 .29790224581170366 -620 913 -.5083798632207704 -622 913 -.8313685194601576 -623 913 -.7650654541611706 -628 913 .9194625377722715 -632 913 -.5867505712789784 -639 913 -.6173903011776879 -654 913 -1.0694567218255218 -684 913 -.196056611401504 -688 913 -.7134601742192983 -695 913 -.6623183867228926 -700 913 -.09635084120146692 -701 913 -.6056654360691917 -735 913 -.25100845915165426 -741 913 1.4336150437880957 -768 913 -.510276415442157 -774 913 -.08552554814930584 -780 913 .01331953803292743 -783 913 -.41946910464748216 -788 913 -.38865970528293714 -798 913 .06371185194980412 -799 913 -.5204582030592518 -802 913 .05555290427445431 -806 913 -.5390290986585458 -816 913 -.2958722249742512 -820 913 .5925176207671797 -825 913 .34404506563909565 -830 913 -.07596504476430652 -840 913 -1.2199158438382296 -854 913 -.9746582003514306 -865 913 .794913870489161 -866 913 -.04368815544061258 -869 913 .09330771342729863 -876 913 .9202372289819799 -902 913 .8278941389607901 -906 913 .19857138166730556 -920 913 .44091441744599164 -931 913 -1.3048695464950288 -933 913 .871055776470143 -934 913 .9726099350584055 -955 913 -.2624140482919553 -959 913 .4538081056802321 -966 913 1.1858341666037486 -994 913 -1.1322179211412122 -15 914 -1.2595053852197786 -24 914 -.029690369276814982 -56 914 .5545274046736023 -71 914 -.5109998591106395 -79 914 -1.6330313655154634 -108 914 -1.6216708669168314 -123 914 -.36151871262515517 -124 914 .1780409760123628 -136 914 .7857433006089211 -144 914 -1.1602568553024428 -146 914 .22523207339570428 -149 914 .4184322830863088 -170 914 -.3885633364673158 -178 914 1.0936556052668545 -188 914 -1.4718044704097815 -193 914 -2.4633041917638234 -198 914 -.4996446048293556 -211 914 1.9669724532591415 -217 914 .6138390808856623 -236 914 .28438800558716737 -258 914 -2.1430831641941657 -260 914 -.3652531567317333 -265 914 -.9624433819250906 -293 914 1.3683798287594757 -297 914 .6475935399078304 -306 914 -.8566347040360576 -310 914 -.6215473918765552 -319 914 -.07688268974672535 -321 914 .7178613826398317 -337 914 -.3276612280241268 -342 914 -.3560657810410677 -350 914 -.2894172783835324 -356 914 1.2029979707999057 -358 914 1.039451129508431 -359 914 -1.8884035137297952 -402 914 -1.455096933660926 -409 914 2.328159383190644 -423 914 1.743814572225124 -425 914 .9143595993626301 -427 914 .21828407590646637 -437 914 .6054159608621532 -440 914 -1.8273376244245971 -447 914 1.6663841262852706 -456 914 -1.8324664373402357 -477 914 .9630000248530619 -493 914 -1.6439371873629813 -508 914 .7898913311906407 -540 914 .9288580941934195 -563 914 .3878359916608155 -568 914 -2.248825332954421 -588 914 .5349758250502338 -589 914 -1.4080647087790188 -606 914 -1.88664534596048 -624 914 -.6223342446471876 -631 914 .8822176398804653 -638 914 -.05350027299515788 -670 914 -1.6838288590377959 -671 914 -.7393395098538024 -674 914 1.5463732408232072 -677 914 -1.314046386972305 -688 914 .02918067417565587 -694 914 -.30774147374360317 -707 914 .5580546511396822 -715 914 .6369180647061813 -716 914 -2.1356893718456345 -740 914 -2.325305401481117 -748 914 -2.850172966004875 -761 914 .0013779211768207983 -766 914 1.0745156487217837 -770 914 1.0215377951449585 -784 914 1.338616889817092 -791 914 -1.813235400992577 -799 914 -.31121368129732263 -813 914 -.7913109227100219 -816 914 1.2573094026035228 -828 914 .2363704669384424 -881 914 -.041980906921368605 -886 914 -.5354472329553092 -899 914 -.17727530159429633 -906 914 -.4772110578571327 -909 914 .5060850454135564 -913 914 .9447774493210876 -918 914 .09426954892007364 -936 914 -2.169294858531885 -961 914 1.112039905510717 -962 914 -1.4020194497640455 -978 914 -.21671769096122467 -991 914 -1.1881062847315593 -996 914 .4846983644284239 -21 915 .8821985118519623 -35 915 -.454595020214862 -46 915 -.2015141493826121 -77 915 .34692238786706464 -88 915 .014647427042598096 -90 915 -.49056458826105537 -100 915 .6761308467776577 -128 915 -.24040744542248557 -138 915 -.16024419180523372 -140 915 1.5571149967239213 -155 915 -.4999321796188365 -157 915 -.7912331535751613 -164 915 -.890721706692252 -173 915 .14183863518299095 -189 915 .2643948893831912 -190 915 -.8861028810418753 -209 915 .7929609659722592 -210 915 -.5684392083086305 -218 915 -.5041388657514289 -236 915 -.0346765635372748 -249 915 -.2521832949328723 -262 915 -.170894464046707 -263 915 -.628237380562985 -282 915 .642936014959893 -286 915 -1.4268007634043844 -290 915 .629514223726433 -302 915 .8822606584714673 -316 915 -.5436328464665333 -353 915 .4428015802402384 -355 915 .3691327923647393 -356 915 .5636313094283789 -374 915 -.8899380677738458 -395 915 1.4986897649000557 -396 915 .005422563435880129 -412 915 .33769666275667504 -413 915 -1.956823078687608 -420 915 .3313088157413415 -422 915 .2896270306428337 -442 915 .10580234524273006 -445 915 1.3036305365597187 -476 915 .4910238942756008 -482 915 -.1327279557210893 -487 915 -.5613278342228534 -488 915 -.04985872672500835 -494 915 .5154740764114003 -534 915 .5369271195413915 -569 915 -.35312111409513525 -571 915 1.3070124141941473 -584 915 -.25234432804114393 -597 915 -.08334806470816006 -601 915 -.6731655882984028 -614 915 -.30591281428815426 -627 915 -.16997110667162574 -647 915 .12915355544326307 -661 915 .17939657456839553 -685 915 -1.2448089807459517 -688 915 -.8697934046066653 -692 915 -.5022490858293858 -700 915 -.3584221574169228 -702 915 -.021485401702099574 -709 915 -.15098879833554943 -714 915 .06032954896246292 -729 915 .4811030784049927 -731 915 .554869748381797 -748 915 -.2976254468728205 -750 915 .6449775988787725 -760 915 .6703358211668163 -770 915 1.052346724285731 -773 915 1.219873941922402 -781 915 -.015061308005231089 -789 915 -.998383594453278 -791 915 .40819379722277543 -805 915 1.5307575456214575 -818 915 -.4820173442768812 -833 915 .03491630242932568 -839 915 -.08234026916945324 -845 915 .3982589096597822 -868 915 .6106958946913909 -871 915 .6200454702273119 -873 915 -.2777526825043485 -874 915 .9590252214522117 -876 915 -.1891264113065744 -885 915 -.4883658052038613 -889 915 .8401135329091388 -912 915 .23642060249450453 -915 915 .3506306538825462 -922 915 .19757900068572243 -958 915 -.6418817511548223 -978 915 -.679178326238163 -984 915 .351239056944008 -997 915 .9126096557921382 -1 916 -.3539912185837498 -10 916 .6178748577929501 -15 916 -.24358099236138503 -21 916 .7545469354115403 -23 916 .43135663989634737 -39 916 .027149253426718672 -71 916 -.5338753589278161 -73 916 .11780094862115144 -77 916 .6097282378419516 -99 916 -.07443062267763331 -136 916 -1.814017031613358 -142 916 .4750836060193072 -146 916 1.1898065226895616 -169 916 .03636433884739738 -170 916 -.16945481784168312 -175 916 1.1814034103300783 -181 916 1.3619359098504233 -188 916 -.08455390443962418 -212 916 .09283276549840308 -229 916 -.7807603759046546 -262 916 -1.0323664479515762 -268 916 -.15798692955866483 -296 916 1.0045577562455272 -303 916 -1.0402810070993076 -304 916 -1.261847285434183 -309 916 .971992510835904 -320 916 -.8695037178261827 -321 916 1.2588257083010035 -342 916 1.1118614020294595 -343 916 1.1546514019871612 -374 916 -.4211187438556418 -376 916 -1.0813178425998267 -392 916 -.5520398649303615 -400 916 -.11782957290558793 -421 916 1.071772265357662 -436 916 -.4923333098848831 -453 916 1.1044652307388747 -454 916 -.5554616785736655 -466 916 .8606390842759267 -483 916 .007213605810443086 -485 916 -.1806488228933833 -487 916 .5463026401750294 -494 916 .473836429169079 -512 916 .26508797005643087 -534 916 -.43253763454396443 -550 916 -1.3757180801201416 -557 916 1.0686556305830408 -560 916 -1.6752583685230578 -578 916 -.4124765353177413 -584 916 -.6122615586020449 -587 916 -1.3301122668877228 -602 916 .6973892286896937 -609 916 .2316583193561328 -612 916 -.035868728489022506 -695 916 -.3870676715521598 -698 916 1.128124869374482 -699 916 -.669953390114648 -704 916 -.7472819681260386 -716 916 -.24829454943653037 -737 916 .048219106002654714 -750 916 -.6222866428284596 -754 916 -.8101210050280727 -755 916 .3055261050696962 -756 916 1.5938608328067936 -763 916 .354272629274776 -771 916 .05844237588433322 -772 916 .29494171343833253 -775 916 .40796835154944056 -823 916 .940251720917016 -831 916 .3572944668356841 -868 916 -.14154056994047026 -872 916 .0018339504474234603 -875 916 -.8170901978237624 -883 916 .7744348083633016 -904 916 -.36093454828186455 -905 916 1.3940551559957663 -923 916 .07066601449655899 -926 916 -.7879432977003229 -969 916 1.5685370075313958 -971 916 -.22842588970996586 -979 916 -1.1481750656821452 -984 916 -.022201449357748093 -991 916 .3624197682333146 -2 917 -1.2868908240555603 -3 917 .615664823133147 -5 917 .054408602843400516 -8 917 -1.4528303052172404 -13 917 -.2618599356243126 -24 917 1.3041316251233612 -41 917 -2.168353327558873 -51 917 .9632960538436002 -54 917 .2453283367053066 -60 917 1.488711986885433 -73 917 .9310943501012621 -75 917 .7280671136854722 -76 917 -.11730312389675097 -83 917 -.7758596112175865 -91 917 -.08347427777650468 -92 917 -.12531487528157226 -93 917 .8773044305736358 -103 917 -1.4262541278208147 -115 917 .7806281394828686 -119 917 .38110947738459544 -124 917 .5469042590480921 -126 917 .5590900162143355 -127 917 .6946214682309483 -135 917 -.045500609708131655 -138 917 1.6871934317818567 -152 917 .5931030347871766 -156 917 -.8544640409650885 -161 917 1.5136062807707167 -174 917 1.328810773168677 -183 917 -.18708445190438572 -188 917 -.3714850136116222 -199 917 .2690027545754834 -206 917 .17956061063903322 -217 917 -.6521454079314785 -220 917 .5403260983416819 -237 917 -.5886586939234807 -238 917 .43855747910672777 -262 917 -1.1597904378130144 -280 917 .578035926334378 -285 917 -.46698211239052717 -290 917 .24670611448104166 -317 917 .05016639340323745 -327 917 .5559206199709156 -330 917 -.35581477053718935 -331 917 -.19341846585164274 -332 917 .5459549522570322 -340 917 -.04038735780976606 -347 917 .22382715207820408 -361 917 .19356196370495551 -364 917 .2618940789328198 -374 917 .18138354142614696 -375 917 .02448694982725974 -377 917 .09152516237650932 -379 917 -1.0174764051959226 -389 917 .5991839162059058 -405 917 .12852678756559935 -413 917 -.49057934547091264 -414 917 .8864897985546785 -419 917 .777975285284212 -431 917 .5448037961206322 -455 917 -1.3979913734694145 -457 917 -.8701573453917045 -459 917 1.4057462828907792 -461 917 -1.099488969232695 -467 917 -.47244069762249574 -476 917 -.17984245429111653 -477 917 -.02281613597386943 -480 917 .21142805732110073 -483 917 .15661999113371342 -489 917 -.41933210670997884 -495 917 .2848385604416487 -507 917 .5949255084257214 -516 917 -1.0588238331661024 -521 917 -1.6035634995057915 -524 917 -.45028276649332644 -538 917 .6663713993857141 -555 917 .4297083629923324 -558 917 .4190532647388532 -565 917 -1.0858676727729817 -567 917 .05631638017871225 -568 917 -2.010792474539039 -569 917 .19934404878521078 -579 917 .4411438082005481 -587 917 -.5985498191222838 -590 917 -.002287106266722544 -592 917 1.8692756327935023 -610 917 -.9853186904138619 -623 917 .5640152043292218 -650 917 .2714336906360616 -665 917 -.4237318201715313 -669 917 -.6830438956055249 -678 917 .9261716052629727 -699 917 -.29974328939563677 -714 917 .22605082630259407 -728 917 1.019647279660056 -738 917 -.5906525907605487 -754 917 .21510715401196168 -761 917 -.09374938294862702 -777 917 .06246522909225513 -778 917 -1.6338716754475335 -782 917 .6454047771708258 -791 917 -.12276473159834383 -796 917 1.2465942445398335 -802 917 -1.0737829413328144 -803 917 -.9488316408915419 -815 917 -1.9984979416842414 -818 917 -.30678839556855164 -822 917 -.4607468305137149 -826 917 .20954480136415643 -830 917 -1.2698875941726215 -835 917 -.5635969571432379 -843 917 -.29414218974885414 -850 917 -.7524931960092169 -871 917 -1.0994705847904591 -873 917 .45964207696809684 -874 917 -.4611354891221614 -880 917 -.8966149718340156 -884 917 -.7392390305575893 -905 917 .7021993143744065 -909 917 .20676368340673348 -910 917 -.4033838878610824 -940 917 .7744728505744102 -957 917 1.410279946177179 -963 917 1.1565358679824378 -966 917 .45080311245925675 -984 917 -.08083257170976296 -1 918 .45228050894115 -14 918 .25819733343037393 -22 918 -1.5230515012263457 -23 918 -.860139866122527 -32 918 -.4409256902144924 -34 918 1.8354764169053832 -46 918 .617357888771429 -58 918 .08097810563865689 -81 918 -1.0763940452452527 -101 918 -2.381937865016745 -104 918 -1.2077887833583716 -108 918 .4732483013118599 -125 918 .43904526600228044 -137 918 -.45760322128006353 -143 918 .6976764352612785 -145 918 1.4097024117381836 -147 918 .4904586449962314 -154 918 .9840780788954328 -169 918 1.0525497634939585 -186 918 -.023497014405111954 -218 918 .559105942080757 -246 918 -1.5511902832259996 -249 918 -.36204740361723736 -253 918 -.432372144264537 -255 918 -.4644429504586518 -273 918 -.20748886062026675 -278 918 -1.5820091851467144 -293 918 -.7976420780297969 -302 918 -3.1418898471414893 -305 918 .06538667194265954 -307 918 .6232126626970999 -336 918 -.22844864382237082 -339 918 .43060687561063576 -342 918 -.4524544847403782 -344 918 1.5444194348815055 -353 918 -1.9704048539433823 -368 918 2.105085239329441 -381 918 -.41496380893388307 -386 918 -.25249125303406117 -387 918 -.5942445176315793 -389 918 .32026677183722824 -393 918 -.3913186770461802 -400 918 -1.3239314448735677 -401 918 -1.6773363246284512 -403 918 -1.2121527701906005 -410 918 -1.4882141934903925 -414 918 1.309400727457795 -415 918 .11133392891725676 -417 918 1.0671124225080166 -421 918 .10998425949723321 -422 918 -.7038858095648421 -429 918 -.7015142119600541 -460 918 -.9218805581802342 -461 918 1.9555591904482734 -483 918 .2045249730551661 -503 918 .460324194340071 -508 918 .4631198857763298 -513 918 -.2910463403171448 -520 918 .9343812375523212 -522 918 1.1456094546793323 -539 918 1.446930187501883 -564 918 -.10301084296965354 -573 918 1.6474690801414542 -578 918 -.35075778566625126 -584 918 -.6784773610024389 -601 918 -.3908365228714064 -612 918 -1.270602000311865 -617 918 -.11872581051450137 -635 918 .5126675311689016 -675 918 .7316654434028019 -677 918 -.23826747804951298 -678 918 .9535991821297031 -684 918 .5342785499832488 -686 918 .5902845652087798 -690 918 .32162355915011803 -701 918 .02038369342525498 -702 918 .9193753937025033 -738 918 -.8608940665924089 -744 918 -.5768418448842575 -748 918 -.38997091551782065 -759 918 -.31209267337658075 -768 918 -.015399925514249735 -787 918 -.11513958344461567 -789 918 1.3008020619374558 -806 918 .7626813391101109 -822 918 .6390374811837243 -828 918 1.364815460817553 -832 918 -.9429288745078118 -833 918 -1.5402607584644081 -841 918 1.1521584484216263 -857 918 -1.3025007246114264 -864 918 -2.485695444348272 -873 918 .6056039026565506 -879 918 -.6663948734729878 -884 918 1.2640265088969789 -932 918 -2.9234232975406287 -955 918 -1.3359570800088902 -962 918 -.21962477678542816 -964 918 2.2469244444375334 -976 918 -1.6823381543512612 -993 918 .15981042520966007 -1 919 .306972375439466 -5 919 .041638710009457375 -22 919 .7749806011265509 -30 919 -.6752432544397164 -36 919 -.253967674094778 -43 919 .7011555827331702 -45 919 -.9962908713058749 -48 919 1.1958905709819407 -49 919 1.0484139832341284 -71 919 -.024362572620526143 -95 919 -1.1438935778341175 -111 919 .39751643498416583 -113 919 -.05896495649363881 -166 919 -.046920313975722626 -183 919 .6499118210678492 -189 919 -1.02441378375405 -197 919 -.21502435465959022 -200 919 -.021754118450220322 -203 919 .9361377205877753 -207 919 .4402692535813021 -251 919 -.5870393255625533 -261 919 -.6844131127282185 -274 919 .7274914216625572 -289 919 .8671999593003619 -295 919 -.7431139149759383 -310 919 .2909258931254575 -313 919 .6339786724725399 -320 919 -.052534538748234216 -352 919 .5076699833111813 -359 919 .6715832876273382 -367 919 -.15702043087147755 -370 919 -.34657303419823265 -410 919 -.9282717115802424 -440 919 -.1173902207623743 -448 919 -.3790596961638867 -456 919 .23247608265887598 -460 919 -.17402574917534822 -465 919 -.7629311647912108 -472 919 -.6461923546049455 -478 919 .9765261958614115 -481 919 .29574577649411166 -484 919 -.8881379552645786 -489 919 .6676827247088817 -493 919 .15302680239345587 -499 919 .8152458465800667 -508 919 -.30423413752321704 -523 919 -.3559626925426279 -534 919 -.2388562856219961 -549 919 .13230337210510973 -551 919 -.472173512617627 -559 919 -.02816940457529228 -567 919 -.9309938881710271 -578 919 -.1159052475236795 -581 919 .3991173514281797 -583 919 -.8126079170064954 -584 919 .7304686745223138 -610 919 -.8564502304504366 -623 919 -.15840513005969153 -634 919 -.24791792732449863 -639 919 -.22808785391560907 -640 919 -.30562903593831225 -666 919 .9355100459360095 -733 919 .3854941021031708 -740 919 .755570128881733 -746 919 .06378609076775715 -753 919 -.0019444069745289394 -760 919 -.22283650631980312 -777 919 .5738548750031015 -778 919 -1.2684636001808807 -788 919 -.547371403482617 -792 919 -.19797180745801765 -801 919 .6307645565252578 -808 919 .5719013639427958 -810 919 -.5436092476454782 -824 919 1.0859210165197282 -830 919 .8323316014555 -839 919 .1717051847184973 -866 919 .7980519045191923 -879 919 -1.0009359981138548 -884 919 -.39631313426853076 -895 919 .9055516768765935 -916 919 .04911996321786801 -928 919 -.004556923277719338 -934 919 -.3457924732483869 -936 919 .40056914412378375 -940 919 -.2402071026076888 -956 919 .36844892536170615 -959 919 .7848058408830332 -983 919 -.5454108754692243 -985 919 .48285565474880376 -989 919 .9890919465560689 -1000 919 1.0830059731879313 -10 920 .5817735938115196 -14 920 .5210913586688364 -24 920 -.5426744746941056 -38 920 -.17849939290778305 -48 920 -1.7980426130587994 -50 920 .06936813772522185 -52 920 -1.5679526057740543 -56 920 -1.1642643492568785 -82 920 -.8479801708798055 -83 920 -.6745437187360418 -92 920 -1.063693069600544 -98 920 -.39345254672425756 -103 920 -2.745675160717717 -126 920 -2.1632769626710724 -165 920 .18246434359205205 -167 920 -1.755138360283225 -180 920 -.6518919885775287 -191 920 -.8814343240682769 -192 920 .08107715552626132 -195 920 -.5842340883221256 -199 920 .4137456289900842 -207 920 1.4585875608427565 -212 920 .18862424376023912 -217 920 .8996601958795107 -219 920 -1.0005062879222624 -227 920 -1.16617143841336 -228 920 1.3482472943667148 -232 920 -.9261630064384427 -243 920 .530617929028435 -244 920 .4596395414046695 -256 920 1.475661696131633 -257 920 -.5352952787945596 -265 920 -.6970485689928113 -271 920 .3719184951310973 -291 920 -2.215104365283717 -298 920 -1.307280884748046 -300 920 .04425577812672589 -301 920 -.25770390186898584 -310 920 .6134408501519701 -334 920 .8758029346436257 -346 920 .32085785379383797 -351 920 1.433205309879341 -355 920 .7363988550949864 -356 920 -.3600593525620561 -368 920 -.13240245230575526 -376 920 -.3551045405593982 -381 920 .0915487046514426 -387 920 .23990784813381721 -389 920 .06236728507455324 -409 920 3.1137985118777496 -418 920 -1.838505150868882 -420 920 2.5971079609527368 -423 920 .6066943163752966 -431 920 -.4898876593982723 -442 920 1.3570016955813158 -447 920 .5012855908913151 -448 920 .00047539174243232257 -450 920 .34645403025825167 -454 920 -.4497944642823473 -457 920 1.1387579293606707 -467 920 -.46912104765675533 -468 920 .5819611329937331 -469 920 -.679258811146288 -470 920 .511571917447661 -483 920 1.221758067222137 -498 920 .1348187516327086 -506 920 -.46259700694963646 -511 920 .35522164739718254 -522 920 -.3844151150463044 -528 920 -1.7008463747709337 -543 920 .1508632375806763 -547 920 .5101521581169749 -548 920 .03580530350762105 -551 920 .9318591081959883 -552 920 -.20884766076512962 -571 920 1.3419848618695271 -586 920 .46721637889445855 -588 920 .12240878408011144 -590 920 -.015857278480650383 -607 920 .3332322221823541 -625 920 -.7669743269639138 -629 920 -.4064751601259125 -634 920 1.1414779741817322 -640 920 -1.3242278583635965 -642 920 -.03789776677141368 -665 920 1.358623234328221 -676 920 -.5107372337555762 -682 920 .23139750454636548 -698 920 -.16806863107507392 -703 920 .6545998533114497 -709 920 -.5978536637087142 -742 920 1.5856963945122566 -772 920 1.1641623619770325 -776 920 .6809441209824479 -799 920 .22581303043221418 -803 920 -.14194495619741676 -810 920 -1.4338565917357657 -824 920 .6345785230037545 -845 920 -.7903524905026632 -848 920 .9678292312901193 -857 920 -.3403570367438067 -879 920 .4854934897595677 -898 920 -.16692161929774846 -900 920 -.0020433476932773323 -905 920 -1.8554966219522908 -910 920 -1.3988170012590257 -917 920 -.5354020058332299 -921 920 -1.2726200317458805 -948 920 .8464034778705014 -957 920 -.7210135277661383 -961 920 -.24383943687451234 -982 920 -.33229422373173045 -985 920 -1.237525152078417 -988 920 .018675964844794057 -1000 920 .7250778486745503 -3 921 .2612368087526711 -7 921 -2.9695052116443597 -13 921 -.968631851520461 -20 921 .3326727723391509 -24 921 -.2923479065042986 -25 921 -.9380267665965661 -26 921 -2.32895978481921 -37 921 1.8761527928217423 -44 921 1.6380679521804065 -54 921 -.5481626041732902 -58 921 -1.1396989772915282 -67 921 -.7669010956594167 -81 921 -.3357098076309021 -89 921 -1.0399086393007926 -101 921 -2.9423602194638447 -107 921 2.4107975996625495 -119 921 -1.0426851927959073 -123 921 -1.5507991853151086 -146 921 1.1313679524378741 -147 921 1.3541838118962577 -174 921 -.6684905644554057 -178 921 1.3322190802743212 -191 921 -1.7781881215669357 -200 921 .3596313848427956 -209 921 .04485944180780471 -237 921 -2.1984486031621087 -253 921 .8146671250384886 -271 921 -.37060382303587763 -273 921 -.078847858088788 -281 921 -.6208526881925333 -284 921 -1.512231871003085 -290 921 .16782164456591772 -293 921 -.32479306394233143 -298 921 -1.2098134963576608 -303 921 -1.2847855333864817 -345 921 .9769822948917499 -380 921 -1.38316706831689 -385 921 -.8299224733964432 -386 921 1.1690331953608513 -391 921 -.14520107259871323 -393 921 .7223906817429189 -399 921 -.8660228401751942 -413 921 -1.2277662460043124 -440 921 .7334942804896813 -449 921 1.753449606697782 -452 921 -.3597031036603542 -461 921 1.8909300573520484 -469 921 -.5690116358961499 -471 921 1.4771636304927271 -475 921 .49707337758381653 -476 921 .7239889026054399 -491 921 .17230619181009915 -494 921 .7112279492208187 -495 921 .4277859093505031 -497 921 -2.17320883908055 -501 921 1.0320636890893153 -508 921 -.9983420436686113 -516 921 -3.474882070761665 -518 921 -.6291216240917428 -524 921 .012226984356457457 -542 921 -1.5417030481926954 -544 921 .4753644326631715 -554 921 -1.6126792467252213 -555 921 1.1112485853119087 -569 921 1.1488992573627042 -581 921 -1.6215182630189664 -594 921 .8796790175842175 -603 921 -1.3059100797342778 -609 921 -1.038029365956433 -618 921 2.010441314005277 -620 921 .3675506196164424 -631 921 .5286682545700945 -647 921 2.3554479544887634 -649 921 1.1382236109083195 -662 921 -.6716345451407328 -663 921 -.09369586147922104 -675 921 -.26876552274002546 -676 921 -.47273975275096364 -682 921 2.3370250786835918 -700 921 1.8188987918633306 -720 921 .10145690066212135 -730 921 .17404328681958897 -731 921 .994538253626987 -732 921 .6651518798261722 -742 921 1.4466776168702036 -745 921 -.38297176215694223 -749 921 -.7474378151876029 -751 921 -.9142071321200913 -763 921 -2.586082197170479 -774 921 .5167657252696595 -775 921 .9437568579434832 -776 921 1.4130034363453512 -782 921 -.3646508653068433 -785 921 .760350129848858 -809 921 1.2552715498985296 -810 921 -.11226168095513177 -813 921 .6550574755363846 -842 921 -.93163412682793 -847 921 -.44700942796313914 -857 921 -.13011715739549443 -872 921 -1.282402679483975 -883 921 1.8314256055975748 -903 921 .8374506255291706 -904 921 -.3071400127413455 -912 921 1.602055904147972 -919 921 -.2504831013722285 -935 921 2.2059079031798685 -937 921 2.3002104846890044 -938 921 .9482576863037186 -945 921 -.40188515067707475 -965 921 1.158108267351664 -983 921 1.9032143080295907 -6 922 .2070205806873074 -37 922 -.18406829513416484 -38 922 .9494097377772603 -45 922 -.7804224828378146 -52 922 .5868968126404155 -69 922 -.006742461493034785 -86 922 1.1490221808961962 -87 922 -.06717907780922033 -95 922 .40421308936624095 -101 922 -.39339793360000114 -105 922 -.30837760623893934 -130 922 -.8969512475760378 -148 922 -.5716694634574215 -153 922 -.4222446394763098 -154 922 1.3284837429335012 -157 922 -2.134945274115313 -177 922 -.6676474713212129 -192 922 -.9203226427359974 -200 922 .491747952184573 -204 922 .45767278022835034 -206 922 1.3806189124044692 -217 922 1.8031375948081858 -221 922 2.6205449419727334 -224 922 -.9197184941826502 -236 922 .7185875063679825 -241 922 1.3258755147050034 -256 922 -2.2134621098305844 -274 922 1.634321586310416 -277 922 1.6947321575986962 -284 922 -.9397602706831413 -300 922 -.6867979253072779 -306 922 -2.024771999174786 -322 922 .9423708395203678 -341 922 -.24025663543593467 -362 922 -.25452378252532265 -376 922 -.41015873414858645 -378 922 -.2375873807709267 -390 922 -.8793513165427967 -394 922 1.0824956039907045 -403 922 -1.3490547115340845 -408 922 -1.075590277931808 -409 922 -1.9522757415377718 -412 922 -.4004371042544739 -417 922 1.714834333190036 -426 922 .2948982155579821 -429 922 -.36879527612938473 -433 922 .1556122492348468 -434 922 .1204829157029242 -447 922 -.9269863019388223 -450 922 -1.0274132594916265 -456 922 .9534015326200969 -458 922 -2.990290624116261 -470 922 1.207100017280612 -488 922 2.4122632645523785 -493 922 -2.0005103182753667 -498 922 .6116789577591588 -499 922 1.4601528877605756 -507 922 .6322690115703076 -508 922 .19274515219482197 -516 922 .19617305686460745 -523 922 -1.521582390127829 -528 922 .7207687647788285 -535 922 1.2227680495139632 -548 922 .042810633990879664 -550 922 -.45296305779143553 -560 922 -.9444421106730597 -561 922 -1.4177252684990789 -574 922 -.3504684492940678 -583 922 .7428280657453367 -615 922 -1.5437664579248238 -636 922 1.4454910635413192 -658 922 .4741881750164172 -659 922 -1.0110851624430484 -664 922 .9627472057598402 -681 922 1.091910591862647 -699 922 -1.2540962273545344 -703 922 .35292251658193347 -704 922 .09080213891574487 -706 922 1.457208743825328 -711 922 .2010056675231311 -720 922 .657760230372776 -755 922 .8940236190833746 -762 922 .6854860946190688 -790 922 -2.40146859662096 -797 922 1.1467521940530254 -820 922 .3267728306493626 -822 922 -1.3708512363013863 -826 922 -.1730957598030335 -837 922 -1.3898054376518223 -855 922 1.924903940810811 -859 922 -.03888376868601448 -896 922 1.5657373691350924 -906 922 -2.2559094987119965 -914 922 -.6780263210578508 -933 922 .74090429308182 -943 922 .7613392949984118 -950 922 -.43633768320430355 -959 922 .23860214616311726 -960 922 -2.284092754565779 -969 922 -.5484999602427083 -976 922 -.6886399178018268 -979 922 -1.5850550365264109 -980 922 -.015011274468930351 -981 922 1.2796984000736629 -18 923 1.083446836144494 -36 923 -1.3158637227478287 -43 923 1.8052347694576576 -51 923 .988100396299523 -73 923 .0520363742770095 -78 923 -.08637867891630718 -140 923 .5311835139408319 -147 923 .009302173360431959 -149 923 -.6128280616059396 -157 923 -.6909704714980724 -158 923 .9865414841680887 -194 923 1.1582271096317818 -195 923 -.8317743705124274 -201 923 .10306284590936533 -215 923 -.4344930197655374 -216 923 -.5326833925921115 -244 923 -1.6099321378818687 -259 923 -.5120957885680175 -267 923 -.017191873408148817 -268 923 -.32967559873652796 -283 923 .405802860095721 -290 923 .12984197883387816 -331 923 .3044117174437977 -353 923 -.46003617982575085 -362 923 .5210869073002786 -372 923 1.506484233334764 -385 923 -.10345132147566696 -397 923 -.44189978307737143 -400 923 -.981362858735478 -411 923 -.47309179250051514 -414 923 .7197537170940054 -416 923 -.40032067418219097 -436 923 -.7665470338073075 -456 923 -1.2051682521957654 -475 923 -.5730584121168251 -479 923 .5477357365991798 -486 923 -1.618816017733821 -492 923 -.30617130468910925 -507 923 .5212711498375542 -508 923 .37744895649890553 -513 923 -1.0933035019730364 -524 923 -1.6211771450848174 -529 923 .46681018216404735 -539 923 .9559227119143867 -552 923 1.1333369233545416 -578 923 -.5131494022089106 -587 923 -1.5994570842920357 -591 923 .07552903398844843 -593 923 -.692467657255712 -602 923 1.477830405180542 -607 923 .2572740349771847 -614 923 -.09470064167749685 -617 923 .15304561940648626 -631 923 .07050985696492981 -651 923 .11116752647669569 -659 923 -1.0011044493644004 -662 923 -.9802038451280181 -676 923 .41082816151009494 -704 923 1.1940999252945783 -717 923 1.6707652785049465 -719 923 .4749691762155274 -726 923 -1.3318795530690435 -733 923 .5958392112495188 -739 923 .5097945752681932 -740 923 1.4730338737622386 -757 923 -1.5524177257023053 -773 923 .49066789355788665 -774 923 1.2973292797081366 -794 923 -.009930859173287815 -823 923 -.10995194812979381 -867 923 .026557613819429088 -868 923 -1.7160172024338822 -887 923 .006992577062644646 -893 923 .8531745729380589 -901 923 -.3444659294553034 -911 923 .4617931596892418 -916 923 .4855087505621049 -941 923 .3102030667885236 -942 923 -.5124732324033148 -947 923 -.021158669766988644 -959 923 .7291167454991352 -966 923 -.0066548217042559366 -998 923 .6541473673351531 -7 924 -.7220164012742917 -15 924 .6516692915410596 -25 924 -.2986360671215864 -42 924 .6520588197714322 -53 924 -.030121675554170575 -54 924 -1.1464028916002371 -71 924 -1.7331545407080402 -72 924 .38798479251886275 -85 924 3.2747445512553384 -89 924 -.05610199800965421 -92 924 -.05962060723488624 -106 924 1.0317957923725436 -114 924 -.4931863374074643 -119 924 .00268502265128933 -123 924 -.984795560066264 -169 924 .545355734608924 -172 924 -1.6593303427459134 -178 924 .9449896445998497 -219 924 -1.4495993283514232 -221 924 -1.6613180513889065 -259 924 -.6845287037296277 -263 924 .24825306425693064 -265 924 2.210590175325435 -272 924 -1.4319775507263994 -274 924 1.158850464275357 -280 924 1.1082424305696317 -301 924 2.272940459826821 -317 924 .6654282402966506 -327 924 -.3172568087089853 -330 924 -.051373665965063695 -336 924 -.604577286544142 -339 924 -1.396528513818038 -348 924 .18112037310832146 -361 924 .8523970505547109 -373 924 1.3655315728523234 -374 924 -.7895896318161977 -376 924 .7141027422973261 -388 924 .9248986196808843 -396 924 -.23431002710963722 -411 924 -.33130820800402005 -415 924 .09649469819029793 -466 924 -.6051188911890001 -481 924 -.6921554496347969 -507 924 .2543334299678647 -508 924 .4470616649799369 -511 924 .4145657820523164 -514 924 .7803077824194996 -515 924 .4091494643733887 -520 924 -.23287768787905486 -525 924 -1.2239725235128212 -529 924 -.4313283758365296 -545 924 -1.3673401128785252 -547 924 -.33099235806371397 -557 924 -1.7055465518601984 -565 924 .3092714505150017 -569 924 .43300410030650194 -606 924 -.09917197262562598 -620 924 .1877008499345544 -624 924 .3597862366767153 -633 924 -.6811410168956533 -649 924 -.525326714610225 -651 924 -.44750903902082406 -657 924 -.16087305688361364 -669 924 -.8536249973039685 -670 924 1.5085952406492285 -673 924 .700426105376997 -678 924 -.9812669420070398 -691 924 .6746166707197198 -699 924 -.1712148136843354 -712 924 .7059885986273755 -714 924 -.691772924838872 -717 924 .6737881372880707 -725 924 -1.8999442896732692 -732 924 1.6254118983503156 -742 924 1.1043239295281864 -751 924 -1.5834024358317382 -755 924 -1.5354265911389915 -760 924 .8379754234266037 -761 924 -.8649699939899009 -767 924 .630288481690605 -769 924 -.9742905579566215 -777 924 -.7048341806585542 -783 924 .3449867973300993 -787 924 .3533058519151713 -810 924 -.9874423977230858 -816 924 1.914901595509375 -818 924 1.3764459630765917 -819 924 -2.1995526530733436 -821 924 -.19491133974007613 -824 924 .11214936676115683 -835 924 -.41980329710655906 -838 924 .2535249515318979 -860 924 .058209589004863976 -866 924 .07806327973361588 -883 924 .24274609591835428 -895 924 -1.5061818390389425 -897 924 1.583988604420928 -901 924 -1.1816825485168143 -906 924 .4498490519317758 -931 924 .8249359187457004 -942 924 .9002549076859889 -944 924 -.28481144754953314 -965 924 .8316625958704582 -973 924 -1.8972512859374162 -990 924 1.7100485595812418 -14 925 .27537009012286107 -22 925 .2594625805542383 -51 925 .031673811924536076 -54 925 -.7866811510656736 -65 925 .6552237469921098 -70 925 -.3347444470784331 -74 925 -.46573272361789153 -93 925 -.2161758551515568 -102 925 -1.0223003127853763 -105 925 .40045514005305444 -111 925 -.050778989229618016 -113 925 .280895794379699 -147 925 -.6326787516521177 -161 925 -.048889748401061 -176 925 -.3322857084628708 -182 925 .1511595742876396 -185 925 .31878645759521174 -199 925 -.046780426174059406 -201 925 .3110191287659021 -208 925 .10273004996016669 -219 925 -.8364570938864898 -220 925 1.3566363464923614 -236 925 -.7140396898827817 -244 925 1.1247787721383389 -245 925 .8318515008582409 -254 925 .21845289006446073 -256 925 1.177866751516114 -266 925 .39640181109763684 -296 925 -.3879224112199135 -308 925 -.20946013867724822 -336 925 -.11792414377284183 -344 925 -.058410990708998814 -347 925 .2625391761383905 -353 925 .569099821816336 -354 925 .9627242823855177 -372 925 -1.059341629317061 -381 925 .9180711928034028 -393 925 .2298740732028063 -399 925 -.5544598847083952 -408 925 .6676595034729262 -424 925 -.7616926206901864 -427 925 1.1050868115287906 -434 925 1.2677708158521865 -436 925 .7298692829346889 -454 925 -.08274434016681134 -465 925 -.6332835818978839 -479 925 -.4231171918655041 -487 925 .0480852537314707 -509 925 .2279133205987327 -517 925 .186861680170536 -523 925 -.4004202627531785 -549 925 .3867812094012285 -558 925 .2739077956995601 -582 925 -.18302897795652678 -584 925 -.07089003606748687 -592 925 -.8165161834222872 -598 925 .598705770396942 -615 925 .20864746800532913 -618 925 -.16583010664010361 -628 925 .3274905368398161 -650 925 -.5005288432117111 -660 925 -.9211125859996587 -677 925 1.4717339102753235 -688 925 -.9463263280228478 -696 925 -.5220509578823872 -707 925 .4297635120155717 -715 925 -.06258855804828573 -716 925 -.5727876434852469 -746 925 -.29779313258934476 -762 925 -.9845154949217059 -779 925 .14692041659433225 -782 925 -.5153924477317154 -825 925 .2813169781606885 -854 925 .6732015481931247 -865 925 -.25589176889984555 -872 925 -.5303880046641335 -878 925 .2184914078873429 -879 925 -.4953055620749147 -884 925 -.33456973828216474 -890 925 .6916920100078945 -898 925 -.5413110167729389 -899 925 .44133250931320556 -900 925 .0950957403652509 -917 925 -1.1457810289903527 -930 925 -.11310655030117206 -947 925 -.0026521362988437824 -948 925 .5162747950579711 -992 925 -.024816103941509765 -995 925 .18368164051011623 -999 925 -.6016076008590769 -33 926 -.20393532937150555 -41 926 .45219594785915745 -44 926 .6244242245941453 -65 926 -.00933100303992956 -69 926 1.0735922254864543 -77 926 -1.5964885462640055 -78 926 -.83965482376797 -79 926 -.6045382289006154 -85 926 .768568959957283 -94 926 -.0980546926878648 -117 926 .5825191395295425 -125 926 -.16089521449434968 -128 926 -.697714883706502 -150 926 -.5241253247580825 -160 926 .7407561627786683 -167 926 -.14328244034354504 -169 926 -.9174717400506636 -181 926 .14727948757436768 -182 926 -.009872373869882656 -198 926 -.5504851877938655 -213 926 -.3133350686282798 -219 926 -.8015058010817886 -224 926 .9537560878977395 -226 926 .4040406628719161 -228 926 .23782870473555873 -242 926 .7464540005378573 -246 926 -.920255357864316 -247 926 -.7279723638718588 -257 926 .7885244991256483 -258 926 -1.3916304760502045 -271 926 -.23865983167940458 -282 926 -.7903439252374048 -285 926 -.27619151046324264 -288 926 .11057199631851339 -300 926 .4972779467445352 -308 926 -.281405512369467 -311 926 -.5275509780659909 -328 926 -.4216138974432736 -331 926 .2050286814605518 -354 926 -.04790053198686137 -366 926 .3605087346945832 -374 926 .915676431389296 -391 926 1.145454720634567 -393 926 1.1839820756906936 -394 926 -.9567481460264956 -402 926 -.48159946951875254 -404 926 .34898750358082165 -415 926 .29277186274490563 -424 926 -2.0770117838882323 -429 926 1.2586670378005842 -439 926 -.2563416544301712 -449 926 1.5418601323932748 -462 926 -.2493324005017672 -469 926 -.602122334735893 -485 926 .0928136519804731 -514 926 .7384884721330258 -517 926 -.28744195622298574 -533 926 -.7267912849198062 -553 926 -.6684773070440067 -572 926 .8065074951015341 -579 926 .31273898507786024 -581 926 .3436483135050333 -590 926 -.715036466602682 -599 926 .44311170077475165 -603 926 -.9904069754578844 -612 926 1.1532419498185733 -628 926 .33448841579286687 -641 926 -1.3450501745742294 -663 926 -1.1094889040871392 -677 926 .893312380090934 -678 926 1.4191821113361054 -689 926 -.7399857345275854 -695 926 .07039428969218921 -696 926 -1.0753746607325683 -702 926 .11042142175737046 -705 926 .03180103069698158 -708 926 .0069443482153048325 -739 926 -.9552538094859687 -741 926 -.729334177422973 -742 926 .3971569554865424 -745 926 -1.7232541946672444 -761 926 -.03427747487076156 -785 926 -.9262852436672543 -787 926 1.342826878356406 -791 926 -1.4047096323794959 -800 926 .20595254038600164 -801 926 -.358988824542679 -806 926 -.6723472739024089 -814 926 -1.028895468382703 -816 926 .5933271492266637 -822 926 -.14732610628813592 -823 926 .35633788770660013 -842 926 .070659242712237 -844 926 .5509126880691508 -875 926 .3832314773570573 -877 926 .20558874100262728 -893 926 .9393417758533419 -894 926 -1.7456496433539268 -897 926 -1.1596238851436027 -901 926 -1.254162831262934 -948 926 -.20099085000099126 -958 926 -.12396045117638997 -982 926 -.7649631111118499 -995 926 -.58066596658542 -996 926 -1.1057861756714311 -1 927 .3969611131653116 -33 927 -.7341479387955716 -49 927 -.22378166739030245 -54 927 -.7628365618521695 -61 927 -.020571680756606675 -68 927 .9675185248748952 -69 927 1.017066656360574 -83 927 -.7435913169825158 -84 927 .16590348622129605 -123 927 -1.0154187971238464 -125 927 1.3487444355557885 -127 927 1.1777862963777534 -136 927 -.4155386891556039 -139 927 1.611064643558487 -143 927 1.2442197077739605 -144 927 -.7092383587740045 -155 927 .18174435019321822 -158 927 -.48439522574155686 -160 927 -.35285959685970214 -181 927 -.5405344974798433 -185 927 -.23742214521898225 -191 927 .27168796543779544 -195 927 -.23586712067819432 -211 927 .40479455353689353 -220 927 .13140244375964716 -227 927 -1.8365211816093274 -252 927 -.8019754203494373 -253 927 -.8881549898038147 -271 927 .3089793325132839 -295 927 -1.2617855767583162 -308 927 .8237260969253632 -314 927 -.12931447817823566 -317 927 -.1588652527506677 -326 927 -1.019481135034604 -327 927 -.4861457860362246 -328 927 -.7260096942846894 -342 927 -.6261663759708009 -352 927 .30988891253942086 -358 927 -.09353685166118683 -374 927 -.16815768006061632 -388 927 -.20941869119036735 -394 927 1.2807673377302133 -396 927 1.4864537220086809 -404 927 .21670107530088956 -417 927 1.41740876842674 -418 927 -.34107949109088137 -421 927 .9811850966410399 -424 927 -.5108084030379262 -426 927 .08709549957338926 -427 927 -.2504941497715391 -433 927 -1.5898814430198747 -440 927 1.179006956180579 -441 927 .7581010974416139 -456 927 -.03401925907603398 -459 927 .4864329162165707 -461 927 1.048551287129082 -468 927 .37115305097478757 -486 927 -.35302684045487365 -499 927 .6236561078155342 -504 927 .724475406139659 -507 927 -.006389840898800847 -510 927 .21839480502028377 -514 927 .14225807679091768 -530 927 1.5313853073853392 -540 927 .5675654708967697 -566 927 -.7251197858912617 -572 927 -.6225325761700956 -578 927 -.692030290699981 -624 927 1.1424153834500326 -626 927 .7297721173820102 -643 927 -1.4608103682248124 -649 927 -.2838965323816315 -658 927 .03366449006686836 -663 927 -.7541612947044685 -668 927 -.030854712002441727 -670 927 -.5225214214320109 -684 927 .7130654380996614 -688 927 .6453726407949505 -704 927 .6962053357377722 -709 927 -.09113129642431875 -716 927 -1.0574788102570007 -736 927 -.14375692303499865 -740 927 -.9464557258188946 -742 927 1.0641950898010828 -749 927 -.546733992959471 -757 927 -.22296771231386955 -758 927 -1.4869848252479538 -763 927 .1553595044042877 -784 927 -.7270242191576143 -790 927 .33675071998591277 -800 927 -.036050736640068165 -809 927 -1.4900897364390917 -811 927 1.496704221626242 -822 927 -.41792683632248123 -848 927 -.4792381619825331 -869 927 -.80584156197963 -891 927 1.2810055637351987 -907 927 .10384111400080386 -908 927 .431054580984524 -911 927 .4181570439839968 -916 927 -.13738394889609906 -922 927 .7160503086413069 -924 927 1.6358160566106053 -927 927 .1467898713011662 -933 927 -.749172763656332 -934 927 -.6900705447178741 -940 927 .0896891539071697 -959 927 -.35601294682534823 -966 927 -.2906290504998449 -985 927 -.08499215946771926 -990 927 .795822810574581 -3 928 2.2247290745593826 -14 928 .6343467673109312 -19 928 -2.1818179981472956 -27 928 2.1999698034145183 -29 928 -.26540546238109275 -41 928 .4543725917470254 -45 928 2.1906188539010176 -58 928 -.35168670517689243 -61 928 -1.0141989974020418 -63 928 -.5978656902605722 -71 928 1.0407369149555825 -95 928 .9835370000727985 -96 928 -2.287438741282525 -101 928 -2.2463327312069303 -104 928 -.22349148250881162 -107 928 1.3868834596214141 -140 928 .45143882747357167 -143 928 -.2793235413695212 -148 928 .19252603648575006 -151 928 1.0357894158387526 -158 928 -.4810224852282241 -228 928 .14945788283094597 -229 928 1.0996697116837342 -243 928 -1.412585041788578 -250 928 .4606132103019083 -256 928 1.7583347445087063 -261 928 .6066012568051038 -268 928 -.25230079848501474 -274 928 -.9530080443156328 -278 928 -.46944388793250136 -280 928 -.16179814526834846 -284 928 -1.432075954041108 -288 928 -1.7300192153148906 -293 928 -.05836452661421007 -298 928 .09246394197456075 -308 928 -1.5319471395018203 -311 928 .1926130128392632 -317 928 1.6207998386225884 -345 928 1.3971747158177419 -363 928 2.3760030810509827 -369 928 1.1208194882094908 -383 928 -1.3876746259551223 -409 928 -1.6952928962763383 -414 928 .9005628527157573 -418 928 -.2633948559030977 -426 928 .589203193283757 -433 928 .9664188271021916 -440 928 2.097227486547404 -447 928 -.41717994140065384 -466 928 1.0399058752920898 -473 928 -1.373503217401985 -474 928 1.0619935026647458 -485 928 .9556388107955379 -502 928 1.7021007447632 -535 928 -.8942446547718256 -537 928 -.9442993355973548 -542 928 -.16830107927844606 -545 928 -.8544343157301504 -570 928 -1.3818340768020567 -583 928 .666110445148358 -586 928 .5990982374834346 -590 928 -1.0852760680787634 -592 928 -.7074716753917988 -595 928 1.7191881972539131 -599 928 1.2623947851098207 -610 928 -.5594731882361702 -627 928 1.2675940665120795 -644 928 .48666574687415887 -659 928 -.9522359847056858 -667 928 -.855424947859228 -679 928 -.7864707849983265 -680 928 .8256967626931685 -702 928 -2.0668403531019788 -717 928 1.2122967026201004 -722 928 -1.3643207612199086 -760 928 2.3175477341843833 -769 928 .5209974556351694 -784 928 -1.0189554696418852 -797 928 -1.6855097369893917 -831 928 -.22026066264752753 -832 928 -2.1944587721924567 -844 928 1.0910613995781484 -852 928 -1.3835079618488004 -858 928 1.2119375595093167 -874 928 -1.7431629237867776 -881 928 .9068505202523058 -886 928 -.107792119314078 -917 928 -.6378931371525957 -922 928 1.3353173318409723 -927 928 1.4831059858588138 -967 928 .9009659098139249 -970 928 -1.349977062906917 -983 928 1.3093807889694282 -991 928 -.07996367403957466 -994 928 -1.000075784230012 -3 929 .16322076888913256 -10 929 .02504633683156217 -18 929 -2.1222404684404217 -53 929 -.12405803242865562 -56 929 1.3871294433341697 -79 929 .5355545161311468 -97 929 1.2827903038080322 -108 929 -1.4552349697082776 -129 929 .765970850200762 -149 929 -.47078004173814203 -169 929 -1.0950844973539495 -175 929 -1.1928991222011103 -185 929 .26279568038908574 -200 929 .223525714999216 -210 929 .41220475617974417 -220 929 .780615714370396 -227 929 -.6222122055842075 -258 929 -.5267803746907109 -259 929 -.17538739288895802 -276 929 .20207830182856604 -278 929 -1.09894256837189 -288 929 .14772894758338084 -302 929 -.9909927994411825 -325 929 .45573395746492074 -333 929 -.19189697607814735 -346 929 -.08596645653921317 -348 929 .5996094763301543 -367 929 -.30629563363739715 -373 929 1.258103115052295 -374 929 1.9504680260460674 -377 929 1.0829188247885309 -388 929 .5362947126137203 -389 929 -.9458511537660024 -395 929 .4522082410982764 -404 929 -.3507874977070038 -411 929 -.08907929388338293 -414 929 -.5663332004150707 -429 929 -.7352058852111009 -431 929 1.0328250636933827 -433 929 -.4494822846035734 -442 929 .016959172016598682 -445 929 1.2021691046565208 -447 929 1.663174696615428 -503 929 .3741781125548449 -526 929 -.35783265839861195 -533 929 -.43683774988249463 -538 929 -2.034591978338693 -539 929 -.5654144347849913 -544 929 -.8653997753131709 -564 929 -.8614553445594915 -590 929 -.40123407975434205 -614 929 .14314517098061463 -623 929 .7801136633097849 -638 929 -.21115896010300167 -647 929 -.7989713168405375 -654 929 1.3623088236322407 -662 929 -.4516670048242144 -667 929 1.0497132653132395 -668 929 .5464343201166276 -675 929 -1.4724943674611397 -688 929 -.11390768373078165 -691 929 -.25107310265797617 -697 929 .965302740706732 -700 929 -.782325426291215 -710 929 .42298379691931365 -713 929 -.12435010482912723 -750 929 .730063089294295 -754 929 1.094931739195988 -777 929 -.15168207927700111 -800 929 -1.0665835411287052 -804 929 -.7357470605669126 -806 929 -1.1676111639694742 -816 929 1.2690007421166993 -828 929 -.7880213484729335 -833 929 .310363679686413 -858 929 -.006097594987596287 -875 929 -.07653598004531878 -876 929 -1.0570281208942887 -882 929 .5106188706114115 -889 929 .725233434081578 -909 929 .5777635137788397 -913 929 -.4920008834090984 -914 929 .30277474229864276 -921 929 -.22855152704555629 -30 930 -.5749398576676481 -33 930 1.0457734346711869 -62 930 -.8886018425338771 -67 930 -.05128409606055333 -73 930 1.0557300179470743 -82 930 -.0430570731833988 -90 930 -.5574709126524011 -93 930 -.3258010250391278 -103 930 -.5839523293567038 -106 930 -.3215316030908748 -120 930 .43676164789717564 -132 930 -.6239483282045326 -154 930 .13918614836349896 -163 930 .6341735120082805 -164 930 -.12053688137388352 -167 930 -.9578420996522097 -180 930 .1040193396980522 -196 930 -.9160921164720284 -208 930 .5416216052374815 -213 930 .610391165584992 -220 930 -.5954058041160354 -224 930 -.4580826831348903 -229 930 -.17983189897802876 -231 930 -.4758442641404889 -239 930 -2.289258908803196 -241 930 -.9050000605949996 -243 930 .21191642895102766 -272 930 .6767366283791512 -292 930 -.08900097673440041 -306 930 -.8150045041166694 -310 930 .18762303131927263 -314 930 .8572831759662758 -329 930 .7400905893975855 -334 930 .13272293295744989 -342 930 .4163262703889916 -343 930 -.8776560757967411 -367 930 .15917360595619365 -377 930 -.20048437111852996 -383 930 -.10624736993302603 -389 930 .48674238387827823 -395 930 .543452290434039 -400 930 .4127257991141353 -401 930 -.7811718826057433 -405 930 .39556282107264 -410 930 -.047648586934889686 -421 930 .16663170842711977 -437 930 .3322310713757767 -440 930 -1.548555945810316 -442 930 -.15780196590278533 -445 930 -.16025891241086493 -451 930 -.601030950969071 -455 930 -1.0295936301495863 -459 930 -.79894824886245 -466 930 .21642769785787108 -468 930 -.21110640625333799 -482 930 -.6003029529453277 -485 930 -.3175543972669399 -492 930 .27481643190481747 -500 930 -.580168170989036 -515 930 .11404225809178356 -529 930 .4947929686126638 -536 930 -.6032568518182095 -544 930 .5778242905337205 -554 930 .2260671064463436 -568 930 -.736945599792846 -609 930 -1.5128051268359612 -613 930 .502429441445383 -628 930 .07539875679959951 -640 930 -.5438899459784534 -647 930 .24205975380514616 -650 930 .28512326445321445 -654 930 .3145163234724882 -669 930 1.2449912153777623 -686 930 .10652813854823628 -690 930 -.9127708849776779 -720 930 -.28442704873706637 -734 930 -1.26914297232578 -741 930 .413030607463576 -761 930 -.03700265554467926 -798 930 .6995396024281404 -805 930 -.0412490487781924 -818 930 -.7737945857653225 -855 930 .13998979549729146 -860 930 .4316411476783705 -878 930 1.3628534289925658 -880 930 -.33879662384223685 -895 930 1.0854926800394558 -922 930 -.6387402221156409 -936 930 -.05433418280186364 -942 930 -.8868900015955634 -985 930 -.646549090570154 -995 930 1.4726144013136508 -5 931 .013124140917946652 -8 931 -.8499221650500587 -22 931 -.011165331680322799 -23 931 1.198892954563054 -24 931 .25939943185272474 -27 931 .5571929954411463 -34 931 .30900019129783474 -35 931 .512871977678068 -45 931 -1.9851980618187701 -49 931 -1.4973443653878562 -56 931 -.24667233689938442 -65 931 .16852817181034413 -90 931 .03605476823396184 -94 931 -1.13361668876332 -95 931 -.09008402311834711 -110 931 -2.1194959171826553 -111 931 -.5493975857277336 -112 931 -.5855174625919058 -113 931 -.5388909550465335 -131 931 .2576735678820264 -135 931 .03114456495589253 -139 931 1.6503541792994958 -141 931 -.675078340382172 -144 931 -.10086605353815509 -158 931 .4110279050625347 -210 931 .23547215547433414 -222 931 -.8385206713008662 -236 931 .6634546707942349 -237 931 1.7839789303054532 -240 931 -.7602264997213187 -264 931 -.3261322895185416 -282 931 -.13741176389275023 -283 931 -.18922569728255295 -289 931 .31563480070749855 -297 931 .9364859404539045 -300 931 -.39105475948059293 -307 931 .45117437914884573 -344 931 1.5234361117598447 -348 931 1.1177918208112447 -350 931 -.8686101611758458 -352 931 -.45355665188086364 -367 931 -1.110012723154019 -372 931 1.0044107676595924 -374 931 .323503753599254 -378 931 .8599891707546349 -390 931 .6993982742194426 -391 931 1.0003750036665127 -423 931 .7140890928835733 -429 931 .15169688341794887 -434 931 .5035658599124685 -439 931 1.916607954476321 -443 931 .3224159099644883 -463 931 .05606625690009347 -501 931 -2.0661010517736416 -513 931 -1.6145053710033923 -520 931 .4079196084092148 -528 931 1.284464958204505 -557 931 -1.0567018836568915 -558 931 -.3740461234005656 -567 931 -1.078716704234421 -570 931 -.3787456777330752 -571 931 .24688549483738653 -577 931 -.15163104575780806 -604 931 1.1633013937546923 -611 931 -.8208431793060369 -618 931 .7221468650939166 -624 931 .7505724681664496 -658 931 .08717198221555592 -670 931 .5530759066498895 -675 931 .22746051266135375 -691 931 1.1612446412158002 -697 931 -.6237838070618542 -706 931 .20354971758341633 -720 931 -.14082768076921592 -740 931 -1.0482629851862346 -774 931 -.03376887283574129 -779 931 -.8512391376370535 -781 931 .09804640465950959 -785 931 -.915128492892901 -801 931 -.8173880054848978 -805 931 -1.4733738926437752 -810 931 -1.2612067588736193 -816 931 .6505855725795565 -817 931 -.4095087667729339 -826 931 .3785509677176414 -828 931 -.44735286802656504 -853 931 -.9815806874582658 -860 931 -.616158311750167 -874 931 -.047291054929044535 -898 931 .14156034501822506 -911 931 .9104404825985344 -927 931 .7467402009893287 -930 931 -.2907807228643473 -935 931 .8127316941083357 -954 931 1.37289943736805 -971 931 -.8923444583464657 -997 931 -.0047633899095858995 -1000 931 .6900326709864778 -3 932 1.5122228250080398 -5 932 .2727143752977574 -38 932 -1.1815830723232028 -61 932 -.6936604636662475 -63 932 -.20602204672577362 -65 932 2.7597642126325734 -66 932 -.3471586634720859 -75 932 .011790625657249004 -78 932 1.6825712855862507 -83 932 .14372010847421912 -85 932 -.32484778361811656 -108 932 -.22204837144376105 -129 932 .7808926238670659 -135 932 -.4452669262087032 -157 932 -.17182737979439694 -194 932 .6535130086047084 -204 932 -1.0204213689020734 -207 932 1.6611611290518429 -217 932 1.8699685250643001 -224 932 -.571733894462902 -230 932 -.4422849955491739 -246 932 -.10841544634742098 -248 932 -1.2645917729473921 -251 932 -1.487988679900362 -262 932 .3152896936254693 -289 932 -.5333680825521661 -293 932 .566383155415581 -323 932 .5473759979551386 -333 932 1.5057906302078807 -338 932 -1.273010041151096 -347 932 .7874347660697778 -357 932 -1.3786024846898532 -358 932 .4330444852853477 -386 932 -1.4063982984662127 -390 932 .9425846599965702 -406 932 -1.1133273869004867 -410 932 -.7379416239165656 -425 932 -2.1577690246078376 -432 932 .8248397064361744 -452 932 .7894496390731379 -465 932 -.6476504104578513 -472 932 2.011209648156463 -475 932 .18981659399478074 -480 932 .7190775066437576 -507 932 .946453389329462 -512 932 .8047841255362094 -515 932 -.6685933218057452 -520 932 2.5766147614846595 -532 932 .9348233798829734 -541 932 -.5165817853334982 -544 932 .960144375260363 -571 932 -1.3262724296052335 -573 932 -.7317079302268111 -578 932 -1.128209427049534 -579 932 -.5185243656956805 -581 932 -.8224048814261875 -583 932 .06688168001862801 -613 932 -.047275014527292714 -634 932 -.49093675209794585 -640 932 .7145539597713363 -646 932 -1.363498052193496 -649 932 1.6410982588230056 -655 932 -.6335525163760829 -672 932 2.7020970351539195 -674 932 1.1403559656976576 -679 932 -1.837943741472108 -681 932 .18863105917036632 -702 932 .010594081620510142 -709 932 -1.0260336398551466 -714 932 -1.4132196052690307 -733 932 1.7375759125206216 -734 932 .10780348191090061 -754 932 .8967279519658976 -757 932 -.21349818984688973 -768 932 -.4091756849228109 -771 932 .6399208816369333 -802 932 .6539682034032986 -803 932 -.6074765885406465 -807 932 .5832147226745558 -818 932 -1.8404449168202077 -827 932 -.5751432636887684 -832 932 -2.5496971994360473 -835 932 -1.3088546916468804 -877 932 -2.217100385159219 -884 932 -.056429479695619206 -891 932 -.37726554574699833 -909 932 -.6508675239261629 -910 932 1.9343134461765858 -930 932 .3490411832680533 -937 932 .8491291357518929 -939 932 .11378808302115839 -956 932 -.41444832723445957 -959 932 .1561354737937245 -961 932 .005005916871530652 -963 932 -.8764699989496103 -975 932 -.04064468817443857 -983 932 1.4121045515937807 -987 932 -.46761756504642016 -992 932 -.4854409787140353 -993 932 -.134868430835503 -997 932 -.8606314604706278 -999 932 -.9927156057079584 -14 933 .11548232560598128 -15 933 -.7191442532760933 -29 933 1.0320464186324076 -35 933 .5534692217635836 -37 933 -.8314194916563559 -38 933 -3.253482908768506 -44 933 -1.2493948869406801 -48 933 -.61678060482709 -54 933 -2.307495178822013 -55 933 -1.2553852058978234 -57 933 .03740164124972664 -71 933 -.31446524912070334 -72 933 .1441194200253028 -82 933 1.0113627414470714 -83 933 -.2481788538835042 -84 933 1.8464206872787892 -92 933 -1.1721089000423166 -94 933 -1.972700378650686 -121 933 .9756710917394257 -129 933 -2.253173326569829 -139 933 .21575826858747182 -140 933 -3.012307667727676 -165 933 -.993312863537097 -188 933 .5916160617153883 -196 933 1.1655652195641242 -197 933 -1.3721376760132735 -223 933 -1.1780938745054643 -236 933 -.9914312453399248 -246 933 -.09702392104073715 -254 933 -.5980762789359304 -260 933 -1.736998643775394 -275 933 -.8207383390965967 -281 933 -.6991119605994045 -282 933 .11135000162510145 -283 933 -.9458308547480893 -284 933 .7293691375997173 -296 933 -1.5328382700851566 -304 933 -1.4927780931225239 -312 933 1.6180217552709024 -314 933 -1.5876704516105453 -315 933 2.3783566238500184 -320 933 -.36442719356858055 -335 933 -1.0193923509930323 -340 933 -1.2424843302377118 -341 933 .8267417206362662 -346 933 -.9387681844062619 -356 933 .3954475826621461 -381 933 .5761646110269604 -382 933 -1.7539172361550894 -391 933 1.6433424374421797 -398 933 .0484504276637203 -405 933 -.4071095199296906 -422 933 -.7731248256226217 -437 933 -1.2406623675239075 -440 933 1.5807597478643454 -451 933 1.3033352206665623 -453 933 1.1103075686893265 -462 933 -.39073890959232266 -486 933 .6943501211593857 -488 933 .6310428980004197 -489 933 -.0794903444630557 -495 933 -1.8381500144283558 -499 933 1.4229206364944171 -510 933 -.5916802070212852 -515 933 -.6040004069878686 -519 933 .21309464569196884 -523 933 -2.5579015115988635 -529 933 .34375659739390924 -530 933 -.948133676080143 -535 933 2.7912328100055115 -543 933 -1.0935565324773413 -546 933 .13382736804627346 -566 933 -.9619748196349595 -571 933 -.9673250155118626 -579 933 -.7677200690796211 -603 933 -.984453412203606 -606 933 .2756143555777556 -632 933 -1.4156445390880945 -654 933 -1.0499000785677994 -670 933 .2907683064004377 -673 933 .30533631862412697 -676 933 .628795790945827 -682 933 1.36719687040284 -686 933 -.6415692310044221 -697 933 1.050678382521173 -709 933 1.7245082959807654 -720 933 -.4556843435396406 -731 933 -.13904957379932914 -737 933 .7448351712557826 -741 933 .6670555013561712 -744 933 1.176750148929066 -745 933 .38316986908169653 -760 933 -2.209405665355598 -770 933 -.6105836461714994 -772 933 -2.376480711820642 -779 933 .5195131684882645 -785 933 -.8563845382469433 -801 933 1.4227629734054827 -808 933 -3.852284658066708 -809 933 -1.642939545584206 -824 933 .13167619857596366 -853 933 -.08615067392460361 -854 933 -.28790675411152616 -862 933 .3026376726714066 -868 933 .5047481203389317 -883 933 -1.6933023510686467 -885 933 .2792827502091759 -889 933 -.1518219104026323 -918 933 1.6513119328713872 -922 933 -.37889095254011296 -936 933 -.8819371117640358 -939 933 -.08831220827157471 -946 933 -2.109352081640788 -968 933 -1.6709288277667935 -969 933 -1.5160563469745008 -972 933 .5778004753143988 -983 933 -1.5532125691715635 -984 933 -.9805194679504603 -997 933 -1.5556752016398732 -4 934 -.11238214128459244 -8 934 .3719011650811772 -11 934 -2.63989318828044 -12 934 .06780761041358072 -31 934 .5399557340536676 -38 934 .4078606912693992 -44 934 -.6109306700411703 -73 934 -.16992076780197912 -97 934 -.6452499353086738 -103 934 -2.0637800595265476 -134 934 -.19262393487306279 -140 934 2.3012932008014735 -151 934 -.8336683495127849 -160 934 -.2545339757283904 -165 934 -.1890459356060917 -167 934 -2.3819362885391895 -184 934 -.3145175720995852 -196 934 -1.7297182277783723 -197 934 .3370983427504625 -205 934 -.7012382744657001 -222 934 -.33378513431260437 -243 934 1.2917520203478632 -283 934 .21466157778832043 -305 934 -.18695338605723413 -310 934 -.026225973349196727 -317 934 .7401042846077772 -352 934 -.7924126322039573 -369 934 .494066319183033 -374 934 -3.0555610580147943 -394 934 -1.1585173603557792 -410 934 .1388304304235354 -450 934 .5841530301551106 -477 934 2.338340368736425 -489 934 -.012695228168296678 -501 934 -1.068896035690705 -512 934 -.6787165715721521 -516 934 -2.2583360985838588 -525 934 1.1498701229920985 -526 934 .5668212624044753 -534 934 -.31522402416691714 -537 934 -.01819498869521327 -544 934 -.04495379175139316 -554 934 -.8824810857964309 -560 934 -1.7503552515577077 -587 934 .006889725156792814 -596 934 .7366806300844935 -611 934 -.041209553754276124 -623 934 -.4601804538417097 -641 934 .5057516258175977 -662 934 .1320637951827936 -664 934 1.4427536288397822 -667 934 1.2521121579082446 -677 934 -.4324392860395001 -705 934 1.45700839643085 -707 934 1.2711397001568179 -722 934 .07307121871558854 -725 934 -.0955538047802439 -734 934 -1.1389934485006286 -737 934 .11028841819594253 -747 934 -1.5351965386384114 -758 934 2.38265908043057 -760 934 -.8281344627738704 -770 934 -1.0164080542188756 -783 934 .41221090410250544 -797 934 -1.0740016736387412 -800 934 1.0830268118041089 -842 934 -.032227370287248674 -845 934 -.9672577673017011 -877 934 1.2329518744342023 -882 934 -1.6394355426247922 -883 934 .8326811362957945 -884 934 -.08441536890445406 -901 934 -.8906323030959249 -905 934 -.7043067412558993 -917 934 .8457048385427142 -919 934 1.8934681419693002 -925 934 -.8488496314212854 -948 934 1.0050687341786049 -958 934 1.485556272166184 -959 934 .4408812094621134 -974 934 -.8503119404147937 -977 934 -.37259168938783976 -981 934 1.466422500617045 -983 934 1.6313649068396898 -986 934 -2.617156134642159 -995 934 .6494376758667489 -10 935 2.497456831712614 -56 935 .0851319456458734 -71 935 -.661184477844942 -76 935 .1281897225051535 -77 935 -.1762411296176769 -81 935 -1.3251399730995048 -93 935 -.12293167555027933 -98 935 -.906303001345784 -116 935 -1.935076159219564 -140 935 .4342399863972662 -151 935 .18870933861524877 -168 935 -.3147355413727483 -169 935 .8563972698694882 -184 935 -.31958989181233627 -189 935 -.39243306635253444 -190 935 1.691484657557941 -191 935 -1.3670065286821471 -192 935 .2062683131474396 -197 935 -.3692306383199607 -200 935 -1.1706876734661171 -205 935 -1.9375298281385864 -218 935 1.3017719451718017 -242 935 .2694650071758963 -255 935 1.0753121492351982 -260 935 -1.4747491308077005 -262 935 1.0301267749663765 -271 935 .10721897062546853 -277 935 .26231510236243943 -289 935 1.529129304014565 -299 935 1.366936278054352 -329 935 1.3088250501850454 -330 935 -.8182404731264064 -362 935 .8277470787356579 -409 935 1.6466892364716823 -410 935 .3366894553599368 -426 935 1.1451519347112404 -437 935 -.28627710397680195 -443 935 -1.7922309352628023 -448 935 .41577711168016884 -459 935 -.297910650454479 -461 935 .8202898805653135 -476 935 .3169039422950933 -479 935 .43136376707430263 -484 935 -.5285338157875275 -508 935 -.8387689047742144 -520 935 -.3907890436012187 -539 935 1.5911370800203513 -574 935 .5714237084092044 -576 935 -1.0745095984178294 -606 935 -.6134192979793027 -640 935 -.6910127378488958 -659 935 -.08789021817213019 -662 935 .4057282951146753 -674 935 -.4506297959313478 -692 935 1.3120405654093426 -699 935 -1.435251388169481 -713 935 -.8090880890983836 -714 935 -1.3465732678002675 -715 935 .44591851251882675 -719 935 -.061533585865979866 -732 935 -.1649382378469884 -747 935 -.5660295524913109 -753 935 -.11581337618773047 -776 935 .6925320327833542 -783 935 1.0164261424152339 -799 935 1.9331040978889982 -800 935 1.728306868949047 -817 935 -.06817349365772202 -824 935 .04962137508555104 -826 935 -2.499583898464197 -850 935 .16655560449365087 -857 935 -.2763738360522983 -873 935 .10825178486444738 -894 935 -.3995687256834845 -895 935 -.5899495296903429 -929 935 2.9657424105760652 -939 935 -1.3766030885658207 -940 935 .10014928622490979 -945 935 -.9787138919276162 -971 935 -.33552730019038135 -2 936 -.7635148972961319 -4 936 .09240827359918515 -9 936 -.5909803089504531 -11 936 .11842717519137148 -15 936 .5418379337357562 -29 936 -.1819257166194675 -36 936 -1.0022105371495416 -37 936 -.0987142622798445 -47 936 -.48030753059781334 -56 936 -.052619547209028374 -59 936 .18006690904415323 -66 936 .42381238332262694 -76 936 .15325839301449123 -101 936 -2.7876531690457766 -125 936 .9501909616615707 -127 936 1.4243515408459138 -133 936 -1.0305847955159593 -143 936 -.041676360789347916 -164 936 -.698183243017104 -167 936 -.19800815720379697 -187 936 2.1135426015755194 -197 936 .040250513658365045 -199 936 .7265279582822466 -214 936 -.5542801260802316 -218 936 -.7766698248655891 -220 936 .3035541088494467 -225 936 1.4323873882629474 -226 936 -.7647893538864676 -229 936 -.2147798310088228 -236 936 -.18231428875492223 -268 936 -1.2378300695752664 -271 936 -.31327936904286574 -278 936 -.4779758985310302 -281 936 1.2024120065807997 -284 936 -1.3622274459705492 -306 936 -.34505514448650765 -327 936 .639728321227961 -329 936 -.4630952102425435 -342 936 -.3898659242566948 -346 936 -.01716876741314568 -359 936 1.1002174884118587 -371 936 -.0003110962421147348 -390 936 -.7167757137137103 -391 936 -.7226454432514084 -394 936 1.0103832102165557 -408 936 .04703846677154842 -409 936 .28309371024828156 -416 936 .9764766597837711 -433 936 -.2930594050282031 -434 936 .7568041235592875 -446 936 .5847008897968695 -455 936 -.4924617666037379 -472 936 .1126100927084231 -475 936 .21597470207946146 -484 936 .5434803557030571 -486 936 -1.5402935008899763 -487 936 .33310004287543804 -508 936 -.1222901240777457 -515 936 .4721841180607922 -524 936 .3004803617978412 -525 936 -.9516819163874911 -529 936 -.4911124167669899 -532 936 -.3878324617614618 -537 936 .1958285008640088 -554 936 -.8325332602188803 -569 936 .8198483268598411 -583 936 -.3894925919480417 -586 936 .7467775227929161 -596 936 -.5233103509399184 -605 936 -.5219873717940751 -612 936 -1.2227500300401144 -628 936 -.05733351368055759 -632 936 .7759905069324101 -685 936 .009569169575470632 -686 936 -1.130533688807448 -688 936 -.1562106628525401 -694 936 -.9389094190103437 -701 936 1.9482300779192507 -703 936 .16410260695344991 -705 936 -.9807953154926813 -723 936 -.5104717003401361 -730 936 -.8158443163437226 -738 936 -.11993056502852124 -756 936 .37434778549211273 -763 936 -.39037831341288354 -771 936 .8067819183457392 -774 936 .4815342566266879 -776 936 -1.0106102192635518 -777 936 .03794135264635008 -785 936 -.08326114458316537 -787 936 -.2672539888094895 -802 936 .21441105525142543 -808 936 .026682671600131137 -812 936 1.117799027751202 -828 936 .7517946483386804 -854 936 .21999533761339246 -860 936 .6079711565449816 -870 936 -.8074333461281668 -889 936 .225225492635066 -895 936 .2983556888668142 -906 936 -1.8296645690063302 -907 936 -2.526690230919924 -913 936 -.5950199680536256 -924 936 .6152411117975948 -925 936 1.12074458678798 -940 936 -.6416203115153355 -1 937 .6870657785338413 -7 937 .5401113880789166 -21 937 .48114811017411657 -22 937 1.4169455499729111 -25 937 .9361698650288713 -26 937 -.4342054346396381 -29 937 1.3370398658877052 -32 937 -.3809711836851108 -38 937 .06465222498355497 -44 937 .14989211103340072 -62 937 -1.1012329344932588 -78 937 .7239260778563565 -87 937 1.698946920722117 -96 937 -1.3851992489776013 -102 937 1.0107662426857418 -106 937 -.2744999451994536 -116 937 -.7719574890926507 -129 937 1.0173805171777457 -142 937 .9569793258953955 -143 937 -.38435490886474566 -146 937 -.2865638871161779 -153 937 -.04118775545166159 -154 937 -.7606509711193569 -162 937 1.0817379801427884 -165 937 -.24827068613073738 -174 937 1.2459055818990572 -178 937 -.5769064744386421 -185 937 -.9761193483770243 -208 937 .08820420431642301 -220 937 .13240769725077114 -252 937 .59920884993201 -270 937 -1.2984323263781656 -271 937 .6754692952742053 -291 937 -2.034952872784 -297 937 -.6664669958044401 -335 937 .4255342601980878 -346 937 -.2502160644402222 -349 937 .9283759674246586 -350 937 -.5276712577541895 -352 937 1.5845300595641227 -356 937 .33593589897353154 -359 937 -.8675817145462384 -364 937 -.09896096012442636 -395 937 -.2610300458963948 -397 937 -.7096622233710721 -398 937 1.0800313088042632 -402 937 -.9236534955188462 -412 937 .3885526363193196 -413 937 .3356969200339916 -414 937 .12264650856686962 -433 937 -1.0992759651452397 -454 937 -.596480594542724 -466 937 .32428145618382304 -468 937 .7392317748894298 -471 937 1.049293029798642 -476 937 -.379883052266004 -477 937 1.0826298095672942 -479 937 .34252081675875995 -487 937 .38457461072895416 -496 937 .4766015474442167 -500 937 .12648428125233516 -505 937 .4612860266779369 -506 937 .3442420223520918 -534 937 -.8585438585276682 -538 937 .25309071874747935 -552 937 -1.1362049165223322 -570 937 -.41698542259547833 -582 937 -.08252435070694188 -588 937 .43941264047469936 -643 937 -.8394933818375997 -656 937 -.06907749305127571 -663 937 .4245694451098714 -665 937 -.050349288511306295 -675 937 -1.3093641313411315 -679 937 -2.155359629334292 -682 937 -.3659613908324227 -690 937 .1066982091864377 -698 937 .5475037582285978 -703 937 .346020902956321 -718 937 1.125448680236472 -723 937 -1.3453089667053626 -734 937 -1.206492670719483 -758 937 .003322913433565805 -762 937 .05636896046761096 -769 937 .08147754371646462 -774 937 1.0077889584369808 -779 937 -.206593329091173 -799 937 -.3700231426525544 -801 937 -1.3573859493175782 -809 937 .08313710852688512 -813 937 -1.1723485985156488 -823 937 .35569639354306726 -828 937 -1.015114290432027 -831 937 -.28893122645165736 -844 937 -1.385715211938459 -853 937 -.6832981036303751 -854 937 1.0213748316017515 -860 937 1.3182657226037167 -869 937 -2.2438256831792636 -870 937 -.42466734035177317 -891 937 -.12472223884979737 -903 937 2.097464141508827 -910 937 -.3283580884453714 -912 937 -.033514257395044225 -931 937 -1.0624875868375527 -939 937 .3914906161905189 -942 937 -.7958946643888246 -955 937 1.1307326788488403 -975 937 .134603579023779 -985 937 -1.5510138193361516 -996 937 -.27542353309378853 -1000 937 .4776032133556206 -18 938 -.17914295260467364 -35 938 1.0625627726367464 -44 938 1.363486694649419 -63 938 -1.4852569405993334 -65 938 -.22608836198071847 -71 938 1.2819431320659338 -84 938 -.3117853194736654 -85 938 1.3715801568180637 -105 938 -1.1003477444883205 -115 938 -.864764411052035 -130 938 -.071173696860654 -132 938 2.02994031744302 -180 938 -.4877538477266714 -199 938 .5567797924455762 -202 938 -.10603779443437786 -213 938 -1.5456191446347534 -214 938 -.0024806543721234697 -215 938 .3858775122941972 -221 938 -2.309552757643532 -222 938 1.649065992343196 -224 938 -.0030750025456495397 -235 938 1.960494823317752 -237 938 -2.8771583070694033 -240 938 -1.0090465872672838 -244 938 .515855465061055 -256 938 .985503963353137 -262 938 -1.0591236924691858 -263 938 3.0857574244014647 -282 938 -1.114522878285874 -293 938 -1.8415035291865984 -303 938 -2.0106052329539073 -312 938 -2.288674221692887 -329 938 .8331671896815471 -335 938 1.3919484873014132 -343 938 2.373278660722003 -365 938 1.7191995749773545 -367 938 1.456336936591049 -377 938 1.0206124388847797 -383 938 -.14320311764714105 -410 938 .457523997188667 -441 938 -4.101057253379942 -443 938 1.3193310890503245 -453 938 3.0273959296461976 -457 938 -.7460682844054694 -460 938 -1.4825999746315837 -464 938 3.593406114967462 -485 938 .4798997606321464 -489 938 -1.0579509650728722 -493 938 1.2766805677179764 -501 938 2.388408475730204 -509 938 1.910721402332818 -515 938 -1.6762145643230195 -542 938 .24478140842879073 -546 938 .5528356836481878 -556 938 -2.806306270229632 -558 938 -1.059236946617734 -568 938 1.022864865717738 -583 938 -.1834140410077547 -601 938 2.0728668330397277 -622 938 -.36432058184332333 -632 938 -.022710295553252824 -636 938 -1.0940543219166272 -655 938 1.2287737086909125 -656 938 -.54052425349067 -664 938 -1.1661432695518448 -670 938 2.220594286109233 -687 938 .4451293580514617 -691 938 -1.1626746735880669 -700 938 .30796601878085794 -702 938 -.9692925147281529 -707 938 1.1446080893490225 -721 938 -.42401958253482647 -750 938 -1.563511454696868 -751 938 .24036672130924336 -777 938 -1.7078222039438828 -813 938 -1.0870616818881578 -822 938 -.26745645768070636 -855 938 -1.219310020770355 -856 938 .17590406067469538 -869 938 -1.006975796980234 -915 938 -1.9186430612289584 -921 938 1.682778399576567 -927 938 1.266409509217983 -947 938 -.19027972167749163 -957 938 1.0665779489053915 -981 938 -1.8457524403197303 -983 938 -1.3488817171861887 -2 939 -.022124437501666552 -6 939 -.8835857208902702 -16 939 -.4709520480601254 -20 939 -.12907964174475745 -28 939 .08214718199530821 -32 939 .44403874114039277 -58 939 .7130757259176554 -87 939 .3263947289200948 -93 939 -1.8983952345544843 -96 939 -1.0891989670295876 -100 939 -.17535145011329126 -108 939 -.7524473906687043 -115 939 .362936159530576 -118 939 -.1018639464539389 -123 939 -.163362808356367 -129 939 -.23914559232785051 -134 939 -.7678874497183331 -140 939 -.11686696396868489 -150 939 -1.3194667993800666 -177 939 .8038875980075135 -181 939 -.48773477951366584 -198 939 -.8735126578983455 -221 939 -.8780065446956523 -234 939 1.1658758662859012 -235 939 1.1076890087910038 -237 939 -.5333774506064378 -241 939 -.5349045848358567 -242 939 .7710020903643634 -245 939 -.5014582160546235 -271 939 1.0735001176694117 -276 939 .2571500977860597 -281 939 -.25601431225474713 -297 939 -.9722464366769307 -300 939 -.5017218635311164 -306 939 -.20714515437633862 -308 939 -.4660638137294965 -316 939 -1.4902972243872248 -318 939 -.4561244823375592 -324 939 -.6743755481386752 -330 939 -.741268800596831 -332 939 1.3211553139741345 -345 939 -.5292074456528078 -348 939 -.7608968885302851 -356 939 .1931710458748246 -378 939 -.5133330838200998 -383 939 -.25433956454229245 -395 939 -.38331853669908167 -421 939 -.0748919358285422 -422 939 .5839136497889867 -423 939 .1491374828972434 -431 939 -.11434161970071566 -434 939 -.30353580698569965 -439 939 2.027269654901737 -445 939 -.41681731018662305 -457 939 .08267952872464646 -459 939 -.08081708674169424 -472 939 .5567759423707495 -477 939 .7319968623172528 -491 939 .13935215769790243 -499 939 -.44377867109435065 -509 939 .4664906330324218 -510 939 -.4273082027570754 -512 939 .19041414063914514 -534 939 -1.5990617066209165 -546 939 .8935203915713376 -548 939 -.6350625658022342 -549 939 -.3964002586484586 -570 939 .27983591184088613 -594 939 -.6634509637488049 -595 939 1.6620348233912416 -596 939 .07388491745306741 -609 939 1.08052057827244 -618 939 -.055234425488483035 -631 939 .9508103440058301 -633 939 1.5568799352872005 -638 939 .07410184434883971 -649 939 -.7249803558797883 -670 939 -.4062926564352199 -672 939 .8243943700409119 -687 939 -.053362578464631286 -689 939 -1.6517761078707216 -693 939 .6150870086608214 -695 939 .521776338420315 -698 939 .5940157375400187 -722 939 .6012862658052296 -732 939 -1.4181958632488272 -733 939 .22787485010881012 -741 939 1.603530152181886 -752 939 .38966452743857494 -765 939 .5151877150631701 -773 939 .02339927145302371 -774 939 .1246899692743868 -784 939 .5235630087187437 -788 939 .6043866890014569 -805 939 -1.1839416285257849 -810 939 -.9626151045465252 -823 939 -.07638064024687219 -903 939 1.0620681141631554 -918 939 .4014677377075507 -926 939 -1.0642033141761214 -927 939 .3904357152365753 -945 939 -.3917092827470141 -960 939 1.0364952339420366 -985 939 -.4223210782655301 -991 939 .05234967954358033 -992 939 -.17352942654472134 -47 940 .781317460222788 -61 940 .193583235986921 -80 940 .22548704053408514 -121 940 .010560798317796558 -128 940 -.06289749083678034 -132 940 -.249652030053916 -133 940 .06704110739382639 -147 940 -.963989753550374 -154 940 1.5318692800916827 -169 940 2.0369229912999454 -172 940 .42006823320701964 -179 940 -.46093435621129697 -181 940 -.39005027431458195 -190 940 1.8970887411820587 -195 940 -1.2220578036153202 -208 940 1.053291473423573 -215 940 -.07638207067800927 -227 940 -3.1463026959315634 -245 940 .15280913855390188 -248 940 -1.965985369492989 -264 940 -.04978390527854026 -267 940 1.8113283769578528 -314 940 -1.0196303384632814 -319 940 -.1769837309814289 -330 940 .5094438422166249 -360 940 -1.309488034099083 -386 940 -1.5414395306381248 -414 940 -.5598378631553155 -420 940 -.10832055951404819 -421 940 -.14491143710623727 -429 940 -.17753711908987171 -436 940 -.1951925115194456 -438 940 .8030891168653476 -440 940 .6458399806715008 -447 940 .29962174856115187 -453 940 -1.133978756513732 -467 940 -.19606537791823464 -485 940 .4208939424813281 -488 940 1.1646340762073504 -493 940 .2792657035513588 -498 940 .1276719002816511 -500 940 1.197473577893348 -501 940 -2.8178620048110474 -506 940 -.7341920828216073 -560 940 .40139991164253325 -564 940 -.14349272929801518 -572 940 -.47137220220292475 -580 940 -.810487536534328 -582 940 .4967586077323047 -587 940 -.8894438249356493 -599 940 .2894049907969289 -609 940 .9671718445646644 -616 940 -.6142675172500738 -623 940 .34568773837303135 -631 940 -2.097353366870852 -639 940 .5896859506160137 -660 940 -1.2157248783163628 -668 940 -.21241293716327747 -671 940 .5463553209544175 -691 940 .7947266064722543 -692 940 1.6957453616750753 -717 940 -.6882437510407234 -726 940 -1.030261352080703 -762 940 .6634415430743058 -769 940 1.183540662021561 -773 940 .1848980519636838 -781 940 .0415963255735147 -786 940 .5650109171971518 -801 940 1.202610339662379 -802 940 .23346438469811515 -805 940 -1.3960235242033168 -808 940 -.32684192710014215 -809 940 -1.7198899165941872 -822 940 .7150478052208507 -825 940 -.4616026494032879 -826 940 -.9293463219627902 -866 940 1.599332900810098 -875 940 .9477474448729218 -905 940 -1.332328231495422 -907 940 -.09999575754532639 -915 940 1.4254208386303573 -927 940 .07486531014851211 -930 940 -.24618376721531124 -938 940 -1.6301391615151626 -946 940 1.4269702245073195 -3 941 -3.286044449173777 -16 941 -1.7053562400339346 -35 941 2.276776642597904 -40 941 .5384046101288953 -53 941 1.3081999998440688 -70 941 1.0619093047459396 -74 941 1.501254074815724 -97 941 -.1439853706726133 -104 941 -1.0506473071078473 -132 941 -.3389288122419405 -144 941 .01799939902463782 -183 941 -1.9400826643073228 -188 941 .8631846390313495 -193 941 .5203780655424391 -204 941 .5326791256179243 -208 941 -1.2996638058965186 -209 941 1.8424189655428147 -212 941 -.889709913888327 -214 941 -1.0163096848579785 -216 941 -.9736024401863441 -217 941 -1.2875105822729016 -237 941 1.1546528754394554 -239 941 2.2173709944678888 -245 941 .7072874659397006 -247 941 .10719690500009828 -258 941 -.3183768172387792 -281 941 -.07992528541545567 -289 941 .27203991720688386 -322 941 .9239713059451848 -329 941 -3.1135599054517495 -330 941 1.3731667967590688 -332 941 -1.3106710461185678 -337 941 .3152293433314593 -341 941 2.56040270462479 -355 941 -1.0206660215073913 -358 941 .027923549640094764 -378 941 .013084979335945796 -385 941 1.070623859773617 -389 941 .5706740254761412 -390 941 -1.704422638579828 -391 941 3.224569354123638 -420 941 -1.738384599390219 -427 941 -.5375349099477761 -433 941 -.3294111130365864 -435 941 -1.4410660779225946 -439 941 -2.656694544754135 -445 941 -.8751435243356064 -450 941 .1415617734562526 -468 941 -.3456158657827387 -474 941 -.7772180466054343 -476 941 .1952358173558424 -489 941 -1.8265770904624516 -498 941 .7713819294905839 -505 941 -.15588484037663947 -512 941 1.2143163433068864 -543 941 -1.219565921140629 -548 941 .020866332531669307 -555 941 .1514711003777161 -560 941 -.3151230409889817 -564 941 .7935827936671898 -583 941 -.667899003363338 -588 941 -1.0185603775498997 -598 941 -1.5759427274792202 -602 941 .19424694465263284 -614 941 1.122238643068914 -630 941 -3.0268181643923597 -638 941 .7105858272759114 -639 941 -.46787599102821303 -650 941 1.290886204527201 -658 941 -1.0554794767775368 -661 941 .07301542540061573 -662 941 -2.7364794476629086 -670 941 .5427951403982546 -672 941 .7949231785269735 -680 941 .6431666629024692 -690 941 .3734424439281232 -691 941 -.21780454001421307 -697 941 .1002614878288736 -712 941 -.04265482410857008 -720 941 .710596481553296 -723 941 -.378781333075751 -727 941 .0026239084356648734 -736 941 -.975448072352455 -756 941 .334164648804212 -761 941 .8727299103043972 -762 941 .6363500671138522 -763 941 .2902751511374446 -764 941 .34657772589315705 -765 941 -1.8535296122437972 -767 941 1.9965946767813685 -784 941 -1.5387626526183944 -816 941 -1.3719551984887388 -817 941 .6926389788996328 -819 941 -.6772652265285892 -827 941 1.4035107695861226 -838 941 -1.3431024608335114 -852 941 2.4369824452817666 -853 941 .5707604564734866 -854 941 -1.9988598641114295 -860 941 -1.1479538239690295 -874 941 1.507934144945518 -904 941 -.622769429618738 -908 941 1.545951326604969 -918 941 .8928131554923826 -923 941 .5108736327124905 -945 941 -.6392540899512544 -959 941 .8812785557964737 -965 941 -.47537859952255024 -967 941 -1.47901762746339 -983 941 -1.2179759554550316 -986 941 .4261153855463722 -1000 941 -1.1782196590880574 -20 942 .3848189579443002 -25 942 -2.552107377088679 -34 942 -.5664623537136485 -50 942 .933340730555128 -55 942 -1.179956991840081 -63 942 -1.289045668685789 -75 942 .6267604612542954 -94 942 .6189397526424865 -111 942 .570129328806646 -125 942 -.3932928298131987 -134 942 .13272733929045533 -141 942 .8370225566652059 -150 942 -.7300852694700071 -160 942 1.9126461443452492 -176 942 -.034154922279106506 -187 942 -1.246870884121746 -209 942 .9542093519351816 -246 942 -.8894328049965018 -251 942 .20830644427709952 -278 942 -.07012896317153794 -287 942 -1.6788493340934854 -288 942 .20761703062366832 -297 942 .8358592642372054 -302 942 -1.2303519256099336 -351 942 -.11549561692362537 -377 942 .47275536160893794 -379 942 1.507176285007916 -392 942 -1.7178508027358579 -397 942 -.14395220750494994 -398 942 -.06517084646255064 -408 942 -.5376751282329495 -413 942 .4906713475313508 -415 942 -.3688922029189765 -417 942 -.41728042684799727 -420 942 -.5996090036725387 -433 942 -.5854530233988396 -462 942 -1.2226930191880685 -467 942 .06909966629386144 -468 942 .5887014278891374 -479 942 .7028999486933589 -512 942 1.3595644601632404 -517 942 -.16551707190910944 -524 942 -.07720926071465624 -545 942 .9486723307831254 -548 942 -.49359267641132476 -551 942 -2.0247168128094977 -576 942 -.5012100764904928 -586 942 -.2889325033481547 -587 942 -.8069496803537975 -599 942 -2.4135432188051285 -604 942 -.5947842061487815 -617 942 -1.4263246416692552 -623 942 -.3410418632770195 -624 942 -.596798043454839 -630 942 -1.3389054812547774 -633 942 -.08013185878944999 -641 942 -1.1912262303339138 -643 942 -.4191156395282015 -648 942 .4948341288778565 -668 942 -.7663622286385614 -676 942 1.0212248875293435 -684 942 -1.0338522511614936 -697 942 .1842384114684669 -699 942 .5267581290686738 -701 942 -1.3270683681684519 -720 942 -.4704008385107611 -730 942 .30445581272930655 -743 942 .8078959962904114 -750 942 -1.3512590087020315 -752 942 -.06932918484042033 -755 942 -1.2246885202078024 -767 942 .05622251574278622 -780 942 -.2301479234867896 -784 942 -.8047852616959044 -787 942 .9083994562263799 -792 942 .5448622566171041 -793 942 1.6077362682518754 -812 942 .10913405287596793 -817 942 -.15109750006290767 -818 942 .5400120225287026 -823 942 .4352597443033379 -829 942 -1.2841156712882367 -835 942 -.8306685876808084 -847 942 .8990414369965632 -849 942 -.03916056751548344 -852 942 1.0901034811083143 -867 942 -.4636475297699803 -874 942 -.604826635306404 -913 942 .8329596659254148 -915 942 -.4695501251559735 -916 942 .785486720644125 -918 942 -1.2304660295471752 -919 942 .3418465678071345 -922 942 -.5373827611223113 -923 942 1.6306891509647676 -932 942 1.6037113601325852 -940 942 .935023889225709 -942 942 -.13790749409661873 -961 942 .1725429704601881 -969 942 -.9069968887958026 -974 942 -.7367321635018652 -990 942 1.1839874080617183 -994 942 -1.1322151380903527 -997 942 -.12978380488477445 -998 942 1.8085824259286927 -3 943 -.1609964107780797 -28 943 -1.4374799860853773 -34 943 -.7335648958145595 -44 943 .37819030838802037 -56 943 .38519853454691527 -60 943 -1.0748329349418035 -66 943 .7689512789943027 -71 943 .5264293943918064 -84 943 1.1713749268769063 -85 943 -.8455195313456387 -94 943 .11999530617081697 -112 943 -.4318465515964429 -113 943 -1.4108335379966739 -133 943 -.1213598539705441 -148 943 -.3789191178071273 -150 943 -.9148154814171099 -156 943 .4406581957266031 -157 943 .6971539491046984 -161 943 -1.6972944302991753 -162 943 .9937633628768965 -167 943 2.0248085819098307 -174 943 -.53064189034913 -183 943 .14104347918136476 -192 943 .8098447743967283 -207 943 -.25023476192357336 -219 943 .9035390721148927 -255 943 -.07670830768603923 -263 943 -.376765195975832 -276 943 -1.9530436336068282 -278 943 -.24770299661454087 -280 943 -.1750976691735201 -287 943 .44983127487397284 -288 943 1.4617460337692243 -291 943 .29568644027334273 -294 943 -2.0043060621599307 -312 943 .38043705772706776 -317 943 -1.2787110257117713 -346 943 -.7559155165354765 -355 943 1.4527852898785645 -366 943 .3501117543189704 -368 943 -.8107437795210508 -380 943 1.1822745859956005 -392 943 -.2948424223505697 -401 943 1.6367256360516462 -408 943 -.1508554262979586 -412 943 -.19434918110516908 -420 943 -.35832170063681695 -431 943 .5868229951731512 -435 943 -.9351841470698656 -454 943 .46327181577507826 -460 943 .9645953514489463 -461 943 -.6397302631649093 -466 943 -.03968900936143584 -469 943 -.08940986740387839 -473 943 2.225711745625647 -489 943 1.1043578851210194 -512 943 -.26406263637269406 -514 943 -.4225388137441326 -518 943 -.02352917795802277 -519 943 -.7614025680051122 -559 943 .6704320360599313 -582 943 -1.1566863457821062 -591 943 -.7362969464212865 -596 943 -.675678196140239 -602 943 .13747354354318703 -616 943 -2.3183393934330976 -619 943 .18497035143377766 -621 943 -.24191879684069895 -622 943 -.9458834976040309 -624 943 -.9935847417355831 -638 943 -1.456654142621819 -644 943 -1.391058390069386 -680 943 -.0817145756538056 -683 943 -.5755260971412188 -712 943 -1.2687790338555585 -714 943 1.2341575012408663 -719 943 -.5822728352844896 -721 943 .23133661575309108 -745 943 1.024972071371666 -760 943 .4294550573966536 -765 943 -.07915456057380624 -773 943 .9728734768790087 -792 943 .26523044985181354 -800 943 -.659657390885407 -802 943 .9591102521229008 -804 943 -.09731613860967418 -809 943 .09425237478704479 -814 943 -1.0487241273776184 -821 943 -1.1973072825927975 -822 943 -.0633497739149504 -834 943 -.8245287151533873 -835 943 1.1564571794853062 -843 943 -.6578896992057438 -849 943 -.9263263753677001 -850 943 1.5946208339159917 -854 943 -.5145822258146089 -857 943 -.2401597360027073 -859 943 .3147263742241828 -880 943 1.3507737568407268 -881 943 .20643220533713405 -901 943 .6923039133036704 -910 943 -.6873558058696928 -913 943 -.2452214121422161 -920 943 -1.946442555692207 -934 943 -1.1737004894432463 -940 943 -1.656797474340939 -946 943 -.8962516680370868 -949 943 .9218301911015224 -967 943 .8460130413215268 -971 943 -.7091179567604728 -976 943 2.546772481763431 -979 943 .76361427176268 -9 944 -.6071337856292749 -26 944 -.721218270675788 -42 944 .7572838540092465 -59 944 .38855717912524895 -77 944 1.6131009675849952 -82 944 -1.4776764983964574 -104 944 .04631216870088082 -108 944 -.5764238454874745 -113 944 .4142963270418812 -115 944 1.162450079422626 -123 944 -.7829929061808457 -129 944 .5597904982991936 -136 944 -.07056028460432556 -138 944 1.9135394230257436 -141 944 .04101716363501243 -153 944 .8465830136154056 -171 944 -1.381164372241974 -180 944 -.3265852298521799 -191 944 .322869880302153 -197 944 .2757728945315153 -224 944 -.4583227154642767 -237 944 .2013022516071069 -258 944 .6414987186883452 -265 944 1.0583223298003532 -271 944 -1.2482018502300887 -315 944 .5036804990291234 -330 944 1.0581337921936496 -343 944 -.7511746660767563 -347 944 .26258709910246764 -377 944 -.5535295462850086 -378 944 2.130806329982523 -381 944 .6588193192120084 -397 944 1.1318162037525672 -398 944 -.513508785191678 -412 944 .18819399838439552 -414 944 .48685266048072784 -421 944 .1846173698160855 -427 944 .2925794273016781 -429 944 .38859803926364234 -436 944 1.1387046029840773 -439 944 -.19353308648107007 -441 944 .43455967402289264 -478 944 -.3722513822934802 -482 944 -.8284170868907026 -484 944 .684846412082355 -492 944 -1.0303738993175917 -498 944 .7437622587900811 -505 944 2.2024546061949195 -509 944 -.019641044225824092 -510 944 -.33219409608944717 -523 944 .11564489041411657 -529 944 -.48728977279612645 -560 944 .0799050913753751 -563 944 .5986630735879837 -583 944 -.7219683190900584 -594 944 .06999060431933515 -617 944 .36205395895307196 -619 944 -.34945582075136217 -620 944 .9210642065777559 -638 944 .1256614017149127 -648 944 .5203997398643887 -649 944 .5104296543468791 -654 944 .10407165050264097 -667 944 -.7727119193629498 -668 944 1.2465079134085908 -673 944 -1.2453869004968914 -680 944 .3006223598012326 -697 944 -.11627443790873657 -718 944 -.5821735726357323 -725 944 -1.1306519184541532 -729 944 .2994233121458035 -736 944 1.3562049117272919 -737 944 -.1209752079349162 -740 944 .046547747513745505 -744 944 .5804780717325992 -756 944 -.8401415273575126 -775 944 .5061901633164697 -788 944 -.7007506267782698 -808 944 .12948551027717847 -821 944 .2121709149203369 -825 944 .546451509846049 -831 944 -1.4877898070148279 -849 944 1.0195871398437955 -855 944 -.44218551573556747 -863 944 .34137202015995377 -864 944 -1.190958268568645 -870 944 -.8899283626526846 -881 944 .3096135055748025 -893 944 .33661273700631733 -894 944 .57701138031899 -906 944 -1.6079390760475725 -907 944 -2.581867334744107 -923 944 .10867477756974564 -932 944 -.8974561175391613 -937 944 -.27889871477178485 -947 944 -1.2144973736309037 -951 944 -.01352263464798134 -955 944 .7062593473764812 -963 944 .14006574670180516 -964 944 .46736448950175996 -967 944 -1.1533243461618257 -976 944 .41927392040826816 -985 944 .08256008148646635 -991 944 .6756984381903541 -993 944 -.36453262293460875 -11 945 -.48896545109284817 -16 945 .7488272883167544 -18 945 .46524129898796895 -46 945 -.06160882511244127 -61 945 -.05401115239705509 -63 945 .17683491684645675 -102 945 1.3985958078999672 -104 945 -.6481858007413742 -106 945 -.29473942365752087 -108 945 .6914710611257795 -110 945 1.2197905961825675 -113 945 -.9147258987517347 -122 945 .02822084573437762 -127 945 -1.5669258980389755 -129 945 1.634813910061223 -131 945 .30106156015941765 -133 945 .21293428861049024 -159 945 .7061012025903644 -163 945 .9423543830640905 -170 945 .029389011902608342 -182 945 -.04064922476646554 -187 945 -.035392389058775106 -209 945 -.8805264671907846 -222 945 -1.8726678611575278 -254 945 -1.2264365810845836 -255 945 1.2074922809351343 -259 945 .6738127707724602 -270 945 -2.0719130346101786 -281 945 -.38265754015023484 -294 945 .7921973111782564 -310 945 .643505337013974 -320 945 .687102648215677 -331 945 .15557035643609995 -350 945 .5809177642345991 -351 945 -.43797651886567324 -354 945 .7581273434686373 -356 945 -.5169527451734514 -365 945 -2.120437801505342 -379 945 -.017872402161998573 -388 945 -.9009442503285866 -401 945 -2.132003212646378 -410 945 -.34481519200711375 -420 945 .1702406713803139 -426 945 -.11567639775101118 -449 945 -2.0519443028579887 -466 945 -.1881445450167806 -468 945 .17944024565632835 -471 945 .9995056344129309 -472 945 .2865445867317013 -492 945 2.987333330451497 -495 945 .0534377186804746 -501 945 -2.1610263875674476 -522 945 .2128836288228108 -556 945 1.0061549953023536 -587 945 .4014959439551651 -588 945 .0064163796504472445 -610 945 -.40890842802165095 -620 945 .9864282347428224 -626 945 .03293945902937484 -633 945 -.016229279402788798 -645 945 .4758026218167762 -655 945 .04820678202897745 -664 945 .4402335660766552 -665 945 2.5163621705318833 -705 945 1.1766292040675983 -709 945 .7804431093416845 -722 945 -.498799463558654 -734 945 -.8447043305891063 -757 945 -.7584846676963111 -763 945 -.044721796123736814 -775 945 -.8565107180024304 -794 945 1.494761793985472 -795 945 .22868055214699348 -811 945 -.13796405811859816 -826 945 -.018116754669154786 -827 945 .6898313641576606 -833 945 -.4851436662389467 -840 945 .88032903354395 -845 945 -.23315633177627856 -862 945 1.7858102763757704 -867 945 -2.1428290287155134 -874 945 .621017530357959 -892 945 -.6268724864102615 -893 945 -1.673047338418325 -894 945 1.0866439972277384 -896 945 -.49470517599878716 -902 945 .8866596946071175 -907 945 -.3562591353621128 -914 945 -.9194087842907616 -918 945 .30934215052658576 -921 945 -.35834838133977814 -925 945 -1.7647629021048228 -928 945 -1.3981852030916158 -932 945 -.8989494671564938 -945 945 2.234566285360203 -948 945 1.2406970850489951 -949 945 -.5006831780103358 -957 945 -1.5862181105345534 -960 945 -1.319879853866805 -981 945 1.3998402478152312 -987 945 -.6043136998111747 -4 946 .26196611072238146 -10 946 .009043720341357836 -83 946 .6954087344154631 -95 946 -1.304516229166497 -96 946 1.825066302338364 -102 946 -1.45718630468554 -135 946 .09645927327753494 -149 946 .349550470970269 -168 946 .12774185478609035 -179 946 .08145396084132589 -190 946 -.08213540537285902 -213 946 .8911995837576079 -215 946 1.2877237688812966 -217 946 -1.2155314883470234 -227 946 -1.7290147612608047 -243 946 -1.0680049334680977 -246 946 .8689882963149431 -252 946 .08441649329978171 -264 946 .9407642931111481 -269 946 .1953458795579064 -275 946 -1.0737148348784114 -278 946 .39316553233177337 -285 946 1.4547081748317638 -297 946 -.8605246055696687 -325 946 1.7023104080441955 -329 946 1.2889574442069511 -333 946 -1.2867094393923677 -337 946 .5368602719631395 -372 946 .09159526533066481 -397 946 .11523229901574156 -405 946 -.10084679573835195 -426 946 -.7535355866207578 -430 946 -.19589588877048503 -432 946 -.1811401485458267 -436 946 1.1224376706826353 -440 946 .15503152742313392 -446 946 .13825353224281633 -447 946 1.1571400307575366 -466 946 .045636619268494126 -469 946 -.31171541338025727 -478 946 -.3946261516358777 -487 946 -.9373519887724171 -503 946 -.4338517959417112 -506 946 .5829563103327223 -508 946 -.1656004600049495 -511 946 -.3055793542774079 -532 946 -.8721063101933725 -533 946 -.38399756320712763 -542 946 .5241651265590073 -547 946 .6877459694969396 -552 946 -.5260086767964975 -556 946 -.7032326050502649 -564 946 -2.4984459767153573 -567 946 -.4957046987676988 -577 946 -.494544720530393 -583 946 .23125512664857847 -599 946 -.785770680119403 -610 946 -.5717399135524657 -614 946 .33647776051602596 -619 946 -.14618721306518714 -622 946 -.47835452955357094 -639 946 -1.1391231370703376 -643 946 -.398728586137383 -644 946 -2.6915420498899976 -650 946 -.8123374784587705 -658 946 -.3787963760924783 -671 946 -.6028335442315679 -680 946 -.4577716627870524 -745 946 1.3569063664415475 -769 946 .015876519336553763 -786 946 1.1250209759301957 -787 946 -.048194396621472964 -790 946 .23140193495105432 -793 946 1.6452724116493775 -803 946 -.01592380752034584 -832 946 .5313745461856415 -846 946 -.92947832901909 -849 946 .9753640885828023 -851 946 .32741825056351714 -852 946 .410781284221161 -876 946 -.12012963017942713 -883 946 -.6105730938082681 -887 946 -.8806578657234594 -888 946 -1.3244152581334927 -889 946 .18313898051921865 -912 946 -1.4108481631940903 -917 946 -.27898721640530694 -921 946 .6690695711034141 -928 946 1.0217788693381733 -932 946 1.7012587138302158 -944 946 .32828909685534013 -977 946 .23267832520709192 -992 946 .5699196416074491 -1000 946 .9545485166567889 -1 947 -.13431985096867718 -21 947 .06744273098169004 -26 947 .46507147430367296 -27 947 -.8850156274044878 -51 947 .05783405636576858 -52 947 -.3095364657072096 -53 947 -.4403671775092136 -54 947 -.2602490797023687 -72 947 -.04660827417425076 -77 947 -.09803830091473317 -79 947 -1.489011959818444 -94 947 -1.2548111706391367 -95 947 .38076987087476327 -97 947 -.7565562896386877 -110 947 -.21358905176604012 -117 947 1.1958275142845212 -120 947 .6355362256114493 -131 947 .0076373080579960895 -132 947 .5349587414952577 -136 947 .7966566887047696 -143 947 -.5498570804326861 -176 947 -.08769687233400703 -185 947 -.05201217619853387 -192 947 .14151045211258106 -197 947 .08323263279314072 -217 947 1.4976546635112484 -242 947 .9640565926553009 -246 947 1.030413106627153 -261 947 -.3948306916958104 -262 947 .9769790361840375 -269 947 .7987031551135354 -272 947 -.7165393223797059 -287 947 -.20072132909675924 -301 947 -.40100573886590873 -304 947 -.5491778326065863 -310 947 .4873909758790981 -334 947 .7282445799561624 -337 947 .4949654651741262 -341 947 -.6314634603368314 -342 947 .07473843899130747 -346 947 .029074458176659074 -347 947 .6949943667263694 -352 947 -.3176692270087974 -359 947 -.342752848051217 -367 947 -.14508771298843093 -375 947 -.030387226671989093 -381 947 -.1682866000179963 -389 947 .01942299500008422 -407 947 .42961059836174464 -416 947 -.49838768539369677 -435 947 .6194263453101156 -453 947 .10913722021040966 -463 947 -.08941670878081599 -470 947 1.1156181846739834 -477 947 .6358029136050821 -479 947 -.06672350755867562 -493 947 -.1615184465842004 -500 947 .1191892230609834 -523 947 -.7288797160486198 -526 947 .019257640616863636 -528 947 -.1534775293775186 -529 947 .0771870987762941 -540 947 .9293970063025779 -553 947 .6301640183019336 -554 947 .2845947291511583 -556 947 .3801210544985618 -562 947 .32253835061675173 -569 947 -.7371150935744807 -572 947 .5983768121883553 -584 947 .23675658950909823 -585 947 .041292934215582264 -587 947 -.02966597703921902 -596 947 .28443230568608163 -597 947 .3106697729160912 -618 947 .5272371185426976 -619 947 -.18109091633357827 -631 947 -.7136674328896807 -636 947 .029741897310489 -640 947 -.6084887690754127 -643 947 -1.1661082406101404 -664 947 .6018422564161768 -692 947 -.3016832929910319 -694 947 .07533692396523915 -708 947 -.2786070585073862 -725 947 .030487106756700886 -755 947 .7294003882188808 -757 947 -.7568170124297139 -759 947 -.4209069268485949 -766 947 -.4633634550833116 -782 947 -.3268529438776383 -797 947 -.18270768210291316 -801 947 .6402279792210201 -807 947 -.377230578123505 -825 947 .9558906441519316 -828 947 -.9974024402826999 -832 947 -.4187262601626581 -835 947 -.18118287819232554 -848 947 .0921291998641513 -853 947 .11617038149947173 -857 947 .3171916354764093 -862 947 .0635516131808337 -881 947 .8197012952936675 -887 947 -.039404018223429635 -898 947 -.5268985011607129 -899 947 1.071624162880733 -904 947 .09243414385284515 -907 947 .9326867209434752 -909 947 .27371249423738536 -922 947 -.3503775820296687 -929 947 -.0017024905062092144 -936 947 -.9531861899292569 -943 947 .07625230654339776 -946 947 -.9887347837666486 -953 947 .22946511418361354 -956 947 .04633824689032373 -960 947 .8596354612755512 -984 947 -.03517195995682543 -1 948 1.293580227469827 -18 948 .7847827203202907 -29 948 -.6088716384102084 -49 948 2.415214717183859 -51 948 .7076717717357112 -58 948 -1.5090050723244481 -68 948 .2701576214826533 -71 948 -1.7836900496229635 -77 948 1.349171535250822 -98 948 -.1907164552867164 -99 948 .8149565099225913 -104 948 -.13794099538758614 -105 948 -.9036852265819847 -106 948 .22411151403536556 -112 948 2.076031627620084 -118 948 -.980815415016621 -124 948 -.07168613471670723 -131 948 -.12104540684447257 -132 948 -1.7511455362167918 -136 948 -.5813743036815926 -138 948 1.1552061611401456 -144 948 -2.043106111469597 -152 948 .09062317861248154 -160 948 -2.6575523514892923 -161 948 2.0735662963486305 -174 948 1.6709336078033195 -200 948 -.04816891733523854 -204 948 2.3036779711864313 -210 948 .4881518059547053 -226 948 .40587512232064277 -227 948 -3.6352440833293445 -233 948 1.0356662850111285 -236 948 -.2737982234802474 -239 948 1.3854243361847893 -245 948 2.058610929403434 -273 948 .7606770545332188 -291 948 -1.0113314431422895 -293 948 .2734140818958135 -302 948 -1.5088069704937253 -318 948 -.5505552985021587 -334 948 .09520167196899984 -335 948 .7409355632478881 -338 948 1.538504176778828 -347 948 .3937765323577989 -350 948 -.5461337874543443 -351 948 -.26304391586759146 -356 948 -.06412570573530685 -371 948 .08890141564045903 -384 948 -.5481938561667442 -412 948 .24619050016289037 -413 948 1.5311608027229584 -428 948 1.3876934067864126 -432 948 .6646083670605948 -440 948 .8001838100475125 -441 948 2.400757637299243 -442 948 .616591384062486 -444 948 -1.5105467441906841 -458 948 .9364675430880541 -463 948 -.372650344844804 -468 948 .18698672489205687 -472 948 -1.0340088075297078 -493 948 -2.08678954712506 -511 948 -.4905783058273182 -520 948 -.5682556273209516 -532 948 -.46448717245729276 -536 948 -.04059671700948814 -553 948 -.9459155426845716 -559 948 -.3696996150709522 -560 948 -1.018710082489597 -579 948 1.6327833526369018 -592 948 -.5408212248233567 -597 948 .18389314552939995 -603 948 1.6073793030917263 -610 948 -.06681161685771823 -619 948 -.3660303766232683 -621 948 .7158191254734777 -632 948 .35941217151580507 -640 948 -1.289517651923846 -643 948 -.9670080670558585 -646 948 -.9854341834326673 -648 948 -1.7899316586089034 -650 948 -1.7910996335598175 -651 948 .016580668315290203 -675 948 -2.4565570256899187 -690 948 -.2616124083478863 -692 948 .5253149267184611 -694 948 -.447299934217211 -720 948 .951711103438834 -739 948 .05237324440441497 -756 948 -1.3885007524646404 -770 948 .9618988030703357 -775 948 -.33702671641602877 -776 948 -1.5899454685703225 -781 948 -1.25371248951589 -798 948 .28702598083226943 -813 948 .728064919876596 -815 948 -1.4657891584014673 -820 948 -.16644652063813864 -821 948 -.8096684288843325 -822 948 -.29563202972736 -827 948 1.0850572946361194 -858 948 1.1956668882392418 -871 948 -.02778861902511884 -877 948 -.6682809245928876 -878 948 -.7214988832139383 -880 948 -.5064181973332635 -882 948 -1.5065226965030412 -884 948 .34592364448390717 -886 948 -1.7520739715919809 -887 948 .9842242887280724 -898 948 -.3701923700915516 -913 948 -.545641465769023 -915 948 .7774307526985331 -922 948 2.5341324289512293 -935 948 1.7093049703325522 -953 948 1.265882224040117 -954 948 .141518418404864 -963 948 2.191248046131678 -968 948 1.2808156286030445 -970 948 -1.261258579743373 -975 948 .09108867353448469 -980 948 -1.0775933001243807 -982 948 .29393627648893367 -984 948 2.12152096692714 -986 948 .46801108175808614 -990 948 -1.1278175862197415 -991 948 .5464425639942261 -9 949 -.5679774694641064 -14 949 .09685998089873993 -18 949 -.4710948304438142 -23 949 .7240657283233153 -46 949 -.685552786140976 -50 949 -.5872409809808575 -56 949 -.31389796539189624 -68 949 .44983610053146095 -89 949 1.1580562116991988 -102 949 .5412168633593758 -125 949 .16274597898362425 -128 949 1.0923687206755504 -135 949 .19276201386217595 -137 949 1.8686919143282543 -145 949 -1.1705389043062258 -157 949 1.590213344431783 -163 949 -.3467399491832263 -172 949 -.39295694199720893 -174 949 -.25512090243829855 -176 949 -.0230160664734953 -177 949 .02238649792030703 -205 949 -.44110869264855845 -220 949 -.1422522761473637 -225 949 -.8094663350011252 -226 949 -.7945454102921143 -232 949 .18850186169793498 -242 949 .7907543586779845 -261 949 -.012165865647227998 -279 949 -.3846258997849993 -283 949 -.10817664763790599 -288 949 .4127546732527374 -291 949 -.07919609954712226 -293 949 -.08749053248708402 -304 949 -.3420765754444185 -305 949 .250852941949342 -318 949 .14630013091427663 -324 949 -.21227785313568248 -333 949 1.190531128866725 -334 949 .8039663505985359 -344 949 .19777683929870843 -346 949 -.019314242456255515 -357 949 -.984596596724065 -360 949 -.6642806656913229 -361 949 -1.6362149059426543 -376 949 .1264368033069198 -402 949 -.38453636849547046 -426 949 .629774347109929 -432 949 .3274999586033328 -455 949 .5404792897369404 -458 949 -.8137112805718759 -488 949 -.8062814191957084 -510 949 -.4137711842056354 -533 949 -.3207012521299928 -566 949 -.6776929845880454 -571 949 -.7212451417553354 -572 949 -.15563048147532405 -578 949 .1287435619697867 -589 949 -.647667350863048 -619 949 1.2316854189784714 -629 949 .133418330546602 -644 949 .8457424609032106 -645 949 -.04708497469334795 -667 949 .6573597061627424 -668 949 -1.0439093190401336 -678 949 .32895513245900243 -682 949 -.17470531556433005 -686 949 .3445513990248972 -691 949 -.5365463152528509 -693 949 .8525215871807146 -705 949 .38981476954573957 -716 949 .5014823760128541 -717 949 .07778468031995688 -719 949 -.14953450672872665 -726 949 1.537986045453494 -751 949 .6384386074346037 -765 949 .5725078488025696 -774 949 .15039131018222412 -783 949 -.31958640665893456 -794 949 -.15770257897025897 -803 949 .15375035953729244 -809 949 -1.1659619538597963 -849 949 -.45848965976765127 -859 949 1.5429978565229525 -865 949 .4414240777997205 -877 949 -1.4023203240353563 -882 949 .1458845802673487 -885 949 -.5389378215928462 -905 949 1.3458313456478488 -910 949 .43537054012778653 -918 949 -.029770316910421125 -923 949 .11165408967220085 -927 949 -.5103194209879632 -937 949 -.5892165367478049 -964 949 -.8597190879045206 -969 949 1.0701090325570923 -982 949 -.10445444310564267 -987 949 -2.6572079218615605 -993 949 -.20305300845185026 -998 949 .5919350359568094 -5 950 -.6021403842561699 -18 950 -.65881763592005 -31 950 -.7993178120297959 -35 950 -.2162724133724837 -41 950 .7734666478676366 -42 950 .4797821439549003 -51 950 -.15721334241450569 -62 950 .06600178961079471 -72 950 -.4691209955851606 -101 950 .9366305408880378 -112 950 -.09976701960226281 -116 950 1.33166949750712 -133 950 -.11019366117854729 -140 950 -.5089553901690875 -141 950 .26694251060619834 -151 950 .7670839673091213 -157 950 .7969210557483472 -164 950 -.25843708599903453 -165 950 .1106055072056153 -171 950 -1.3394673960625516 -172 950 .23593680615556478 -184 950 -.2684520218685481 -186 950 -.12815681300913057 -187 950 -.009093625357606439 -193 950 -.5776783647448885 -220 950 1.4700306309389382 -222 950 .3658951760370311 -240 950 .42473338696526947 -254 950 -.1061838075067928 -255 950 -.7924028814381987 -287 950 -.05335258408798593 -306 950 1.0591328828301994 -316 950 .24344252519662535 -318 950 -.6360912720727453 -326 950 -.6646798709104385 -330 950 .538292467260495 -359 950 .5464798607809102 -366 950 -.3989708587103447 -374 950 1.7590340168701213 -384 950 .6949575079747434 -389 950 -.018499145017005725 -405 950 -.8848496380355969 -412 950 -.5517552630946493 -444 950 -.2554328756588523 -452 950 1.1791282490511386 -453 950 .7103914908233218 -461 950 -.7522605920647404 -465 950 -.894369076051256 -469 950 .26750918806510016 -478 950 .050999191136041164 -479 950 -.33575433597597754 -499 950 -.3550636090733662 -508 950 -.43433448823247967 -517 950 .3609153302058818 -528 950 .7407713691720246 -549 950 1.572734862571986 -560 950 .40480176038478255 -563 950 -.06806417497133829 -566 950 .28503820593913304 -587 950 .37148132400487355 -593 950 .19254670271800955 -623 950 -.12806351220917345 -624 950 -.520354712741304 -630 950 -.6409100801243444 -642 950 -.16228005555092406 -651 950 1.6836268340471463 -658 950 .447723821015223 -672 950 .092802999403865 -675 950 .56626835189047 -690 950 -.008945869841379434 -711 950 .12280922769739243 -717 950 -.36174046351139116 -718 950 1.4612987668777935 -725 950 -.3549387682341493 -731 950 -.9332128060872367 -732 950 -1.0915812561220122 -734 950 .6830548809613565 -739 950 -.939465961994682 -749 950 -.2592563669827683 -755 950 -.3974998828490715 -760 950 .5948987551429042 -767 950 -.7665914903176486 -775 950 .5491600778611337 -776 950 -.3274802407196037 -779 950 1.0346504725540957 -783 950 -.05240952048501415 -788 950 -.025906830039753914 -789 950 -.5838029653334663 -811 950 -.29934859069151876 -814 950 -.14276496631061453 -820 950 -.1915909815199879 -825 950 .5548819436022161 -828 950 -1.494098683318148 -831 950 .9033187761516083 -833 950 .08563424248524423 -835 950 -.450696049493996 -840 950 .2437426236159283 -856 950 -.05308382084852753 -860 950 -.5880625029320495 -863 950 1.090192709690943 -864 950 -.10329939544522568 -868 950 1.3554101826216152 -880 950 -.0640872610594596 -886 950 .5668626772432118 -887 950 .157738605433017 -906 950 -.10205742767476214 -949 950 .7041110513002393 -954 950 .020164416854878825 -955 950 .5057898605013191 -966 950 1.0476067471422954 -972 950 -.02189157651597659 -976 950 -.04740948591562084 -987 950 .2798162443080864 -998 950 -.032413343091691776 -999 950 -.3263258394623586 -12 951 .1793333675958651 -20 951 .9980852949351207 -26 951 -.6719962077021302 -43 951 -2.0160538671478108 -58 951 -.29897032871344725 -65 951 3.4305807408851696 -68 951 1.342598110079945 -83 951 -1.4928703026517927 -88 951 -1.8666763451243704 -90 951 1.8877359347108729 -93 951 -1.835088929362577 -98 951 -.21533368078900691 -113 951 1.7072700590176788 -121 951 .4284995381525396 -127 951 2.070609695016982 -131 951 -1.2590118141814735 -148 951 .26764316174694597 -155 951 -.2303948264660331 -156 951 -1.0217738017819156 -160 951 .4677914473528545 -168 951 2.326684063269139 -194 951 -.5774872042378413 -200 951 -.6675673309872003 -203 951 1.6311247160963065 -225 951 1.76321709799976 -227 951 -.4459065550709987 -250 951 -.40069720144186416 -254 951 -.26260583629591994 -258 951 .28070685383414296 -261 951 -1.1237065212199964 -264 951 -2.3881974389544234 -275 951 -1.7694070969492195 -284 951 1.082669405087204 -285 951 .0954378000620952 -296 951 -.7461045483781454 -299 951 -.6608713656163345 -301 951 .47155673843196444 -322 951 .9868824760305174 -372 951 -1.2967630856673527 -382 951 -.1080536202323574 -386 951 -1.6887012213596273 -395 951 -2.73901908177623 -399 951 -1.4999776560722267 -412 951 -1.5885368050768405 -414 951 .7577776494436136 -420 951 1.1692625415292286 -433 951 -1.9164670792782623 -442 951 .7009617897773242 -460 951 -1.4963605415859567 -465 951 -.06920775029876675 -473 951 -.6023995556768549 -502 951 -1.373303268837959 -507 951 .2563017324617322 -508 951 -.9487303243657433 -511 951 .22549422112498227 -514 951 -.32520880632847543 -526 951 .13236665654586613 -530 951 1.8050078708389015 -532 951 -1.4331336472451868 -536 951 -2.983474207083542 -552 951 .6279468754457803 -564 951 .511748505884258 -571 951 -1.4239527426872247 -572 951 .31520839820451874 -580 951 1.8855389536392042 -592 951 -1.3132835071033286 -606 951 -1.9008350701294954 -616 951 .8343077003869318 -626 951 -.09261252455619612 -628 951 1.8382322764487031 -639 951 1.3054140263439915 -640 951 -1.2197317068577984 -681 951 2.02513230748971 -683 951 .8474854672551507 -692 951 -1.059677903724667 -703 951 1.5288365331508096 -706 951 1.8649127041527316 -717 951 1.705141849115662 -723 951 -2.062922380002475 -725 951 -2.501527007896548 -737 951 1.615538812369477 -748 951 .6681164051820923 -750 951 .7927420871840631 -751 951 -.488297810540861 -755 951 -.9519514388122017 -759 951 -.8230770918077575 -767 951 -1.7447961839537525 -774 951 1.1899193639818866 -789 951 -.3969138132710877 -791 951 -2.2499767544328857 -799 951 -.7954347639813357 -801 951 1.084601466007543 -814 951 -.5708615246225563 -829 951 .8512983321256128 -844 951 -.796025139926031 -856 951 1.496465416032153 -859 951 -1.3781415920767053 -867 951 .47527346355876365 -872 951 -1.613294826989717 -890 951 1.8609044279211457 -895 951 .4384778782174853 -907 951 .332479859070263 -914 951 .7949932996255745 -917 951 -1.1292877184055614 -921 951 .5620130357527025 -939 951 .014120767896022549 -948 951 1.38641162340703 -958 951 1.3886268685841114 -960 951 -1.1529411397527995 -962 951 1.7040320256259032 -963 951 1.085594753987695 -969 951 1.280940374155976 -972 951 .47289609472535105 -973 951 1.4509270822384521 -975 951 -.09425486324703021 -997 951 -2.009566907882416 -1000 951 1.6888493638678526 -8 952 .2886018922422182 -11 952 2.2756522532235444 -18 952 -.2167648619409009 -28 952 1.3494604527925753 -54 952 .945288749971421 -58 952 .5429026950971952 -65 952 -.7221890622326803 -69 952 -1.0789670208002708 -80 952 .4955386749413377 -91 952 -.17256845787926253 -94 952 1.3504648179621823 -95 952 .924554541299115 -108 952 -1.9320804772921467 -112 952 -.8301731311728775 -135 952 -.060261809499806224 -151 952 .289305712272026 -171 952 .04499540314415637 -175 952 -1.5034887331251343 -179 952 .6350485597877293 -198 952 -2.3204610216726924 -201 952 .31415340985173346 -206 952 1.0850647392846875 -230 952 .5999450962932075 -232 952 -.9735772592341877 -258 952 -1.0279149638671536 -267 952 1.217980165671635 -302 952 .5564398341954964 -303 952 -1.7181149001139426 -307 952 -.44355670764293365 -318 952 -2.2986777291234692 -326 952 -1.5164976263791687 -336 952 -1.2406555229004754 -340 952 .9905198701247551 -356 952 -.39939900011349416 -368 952 .8478832485990402 -369 952 1.703773620909209 -393 952 -.33777710721375537 -397 952 .202025348431226 -410 952 .5235306224554783 -417 952 .04868075893248855 -420 952 -.47078266196306484 -425 952 -.3331832719600791 -428 952 -1.2093915662043189 -439 952 .43472778292744496 -443 952 .914981741146911 -447 952 -.027725658986712545 -449 952 .4608120480477409 -451 952 -.33547116374798924 -456 952 .11575172634326451 -467 952 .7057113187201075 -471 952 .5525533879526379 -475 952 -.7713584642335125 -479 952 .6804804446073814 -484 952 .37934874434191146 -523 952 -.11797097553706351 -529 952 -.41918309386869845 -541 952 1.8815853822175035 -562 952 -1.2908488074706885 -595 952 2.469741847232091 -600 952 .1539423307093548 -603 952 2.3965896152504937 -608 952 .7165921532048733 -635 952 -.1594038683951191 -638 952 .4325859126403865 -651 952 .20506661568167375 -656 952 -2.166802522856128 -669 952 -.5458095269534324 -674 952 1.0103380732987575 -676 952 -.7825315479993525 -680 952 1.0565654969851568 -681 952 -2.4317784949230843 -696 952 .5697649608005131 -699 952 .38237489725124607 -700 952 .08018625366488447 -712 952 .3925529091909455 -715 952 .04922215924787561 -716 952 -.9417272207760935 -717 952 .5516895290495029 -723 952 .5808665942528485 -730 952 -.7122758131257377 -731 952 -.08970813982215539 -742 952 1.3695632045463428 -771 952 -1.6540083353980508 -776 952 -.4388355685120182 -781 952 -1.5707521490719165 -813 952 -.10122782933112133 -822 952 -1.3037542097032504 -847 952 .8749038817269456 -848 952 1.0711897197371985 -853 952 -1.553303474586405 -858 952 .16776365414113636 -872 952 -.14273405758498775 -875 952 -.8198239134572939 -876 952 -.6560569090521264 -884 952 .5222177873344014 -890 952 1.2458122928435778 -891 952 .8972133547567451 -892 952 1.3895856312295756 -900 952 .6611374346914904 -904 952 .8382801863730015 -905 952 1.6801089854809372 -907 952 .17635334586564066 -927 952 -1.2005978099976222 -928 952 .04346679948321955 -929 952 -1.033322596613632 -932 952 -.1238196687886266 -934 952 .49099000665717213 -946 952 .26411173038585084 -953 952 1.4925552505660453 -964 952 -1.2911929320893267 -973 952 -.8043444446416743 -975 952 -.7278076983483139 -976 952 .7832480127091906 -978 952 -.21650167334937492 -983 952 -.4539772263736113 -993 952 -1.0477713022939414 -1 953 .17032744278325324 -5 953 -.012367784432111652 -43 953 -.7810231492340236 -50 953 -.47581360446812815 -60 953 -.08310687169317942 -63 953 -.5318330827530616 -98 953 -.7252617049710268 -100 953 -1.0831747186831726 -102 953 -1.5573907387781083 -107 953 -.8848746303294434 -114 953 2.169320973722113 -129 953 1.8069636206016273 -132 953 -.5771527121201752 -145 953 -1.8627606538640336 -148 953 2.030608203306643 -155 953 1.4004609282174088 -158 953 -.7113188931166867 -164 953 -.22366259063804408 -171 953 .894449919788089 -172 953 -.37703250438757835 -182 953 .17042887628447317 -198 953 1.1568193436515848 -200 953 .12811133132092575 -212 953 1.3212300036313025 -220 953 -1.0624054778661645 -243 953 1.2445801418167295 -245 953 -.5671936289940547 -253 953 -.6861534210255679 -288 953 .663986302547293 -294 953 .452679494259914 -296 953 -1.6922939700836208 -311 953 -.252679900179969 -324 953 1.8413258352584638 -325 953 -1.5931990315800413 -337 953 .7417360454408414 -341 953 .7699533851207421 -344 953 1.3472753256398629 -352 953 1.2446121210419623 -354 953 1.3473216597687063 -366 953 .7664727617819872 -369 953 .13544983977299097 -391 953 .5631299933649853 -417 953 -.5133518358587138 -423 953 .44643270171038946 -425 953 2.6441043718370794 -430 953 1.5866263600333457 -442 953 .8407924334653767 -444 953 -.1739578685708389 -445 953 .7091200214154779 -449 953 .43888044933570614 -463 953 .2582811999626092 -476 953 -.03129718248007943 -487 953 -.6960627061566337 -501 953 -2.8902513416294986 -514 953 1.2994205540435513 -533 953 -.7375342063807225 -547 953 .8431699126896528 -548 953 1.515391905572198 -584 953 .2488445130233752 -587 953 1.5513825289391716 -590 953 .12830350920196693 -604 953 -1.3894781210134632 -609 953 .48275777876798454 -610 953 1.1869202837012043 -616 953 -1.0972175926914214 -618 953 -1.0379834907540721 -619 953 .32721302103145145 -645 953 1.3368137852876083 -654 953 1.101925773712575 -659 953 1.7844133389479955 -661 953 -1.8399250654812112 -675 953 -1.277065327100455 -691 953 -.7217517774162511 -712 953 1.6219648781878266 -719 953 -.6406445179459799 -730 953 -1.5090362487440494 -736 953 -.03334441158450659 -739 953 -.5439226621744861 -744 953 .009223608701701858 -745 953 -1.5108670428066104 -759 953 .013817610552114359 -765 953 -.12746950113512928 -767 953 .3253942200961942 -768 953 -.3013115682293432 -782 953 -.7199972643362129 -783 953 1.1640678207348674 -786 953 .1325383157821875 -804 953 -.2881761273902397 -807 953 .8897965717544203 -834 953 -.4278522752905059 -842 953 .6870864210525288 -844 953 1.9143158704634222 -858 953 .6125191332031793 -869 953 .7357687936411271 -874 953 -1.159665168958497 -884 953 .869148706314418 -885 953 .5237538294562638 -893 953 -1.3344493885968296 -906 953 .5196913601656368 -921 953 -.24612391826970667 -934 953 .06796675262237073 -936 953 -.7615407630342031 -943 953 2.04581999672317 -947 953 -1.9875728633323781 -950 953 1.2160667500422577 -952 953 -.34577384532770195 -959 953 -.17516529664214545 -965 953 -1.0302069312821296 -968 953 .10292913416177311 -978 953 -.9160530740459657 -983 953 -2.473660983073056 -995 953 .35706385512137956 -3 954 -.29789408535266715 -4 954 1.0621661980754296 -10 954 -.3641652238573486 -13 954 .37058624900790027 -14 954 -.8148078300359056 -19 954 -.3961923532298964 -25 954 -1.4136952532234632 -35 954 -.7896902186082945 -36 954 .5995045009825284 -37 954 -.7884941477071971 -38 954 -.5520167692684333 -49 954 1.7112437275462464 -54 954 -.09096232907915308 -57 954 .47885699858931846 -71 954 .5075970825797478 -84 954 1.564892131749386 -86 954 1.2524928750004747 -97 954 3.149001547218753 -113 954 1.0786061387584858 -115 954 -1.356115798240444 -126 954 .47515856959262825 -132 954 .1797030419293755 -134 954 -.5502017000310858 -136 954 1.2007947992591474 -151 954 -.29287576198816273 -152 954 -1.8868396353709138 -172 954 1.8906010118239516 -179 954 -.38180322947317885 -183 954 -.14251422946530556 -188 954 .4659067532808672 -203 954 1.1459128601404154 -205 954 1.871355776795902 -221 954 .47533255674598107 -222 954 -.2789652654386388 -238 954 .15219281793019185 -241 954 -1.4612164412298887 -250 954 .5278897028230585 -263 954 1.1484409038094845 -285 954 2.0071047265762325 -306 954 -.0965195610762162 -310 954 .4725750677013618 -313 954 .7594055278071874 -349 954 1.0263254662430359 -352 954 -.48927162798723767 -354 954 -1.0478813867785597 -355 954 -.45089840737112796 -366 954 -.31389584444075813 -369 954 -1.0888738424231463 -372 954 -.13039105714013977 -373 954 .8291995992606952 -382 954 -.5270561796479432 -403 954 -.13404901168509858 -414 954 -.6348617511921277 -453 954 -.46802303290360214 -470 954 1.0043048113904651 -472 954 -.5486162535862489 -485 954 .6754702848497303 -486 954 -.7242675912088423 -508 954 -1.4665802934977241 -530 954 -1.1788907590649018 -534 954 -.36636460475909327 -571 954 -1.0300065331059187 -582 954 .32711885906996596 -594 954 1.2310834043076169 -619 954 -.9202132541283952 -620 954 .09194098350117019 -629 954 .39879760620059185 -642 954 .9261796947158369 -647 954 1.3802934885818865 -654 954 .3376805378164857 -661 954 1.9136886688499044 -666 954 1.067149719280305 -670 954 .04405164526530024 -674 954 -.7968303325633792 -693 954 -.555578140720373 -701 954 -.2359493650484684 -702 954 .782716104791203 -710 954 -.42647493074227505 -715 954 -.21375748906838138 -719 954 -.8951128565637501 -724 954 .02359665528750038 -735 954 -.5784528668152686 -741 954 -1.2754409705246943 -773 954 -1.1271968358693623 -776 954 .022428096541030416 -778 954 -1.0884427200929014 -794 954 1.6889635663750462 -809 954 .23049024942644353 -835 954 .16427846023286496 -839 954 1.3409909789647456 -840 954 .17650111063636859 -843 954 1.5248385583002042 -852 954 1.4042762960711435 -880 954 -.8470262695115738 -893 954 -1.7621902294509848 -899 954 -.20387112365098084 -952 954 1.4137103428532063 -957 954 -1.2978794389696766 -974 954 .21935677354472752 -978 954 -.17762685705140674 -979 954 .37732552502530614 -993 954 .7644461850699216 -998 954 -.8898579606452626 -7 955 -2.236541263376002 -14 955 1.4533781749215373 -27 955 .9580381538521047 -33 955 -.4146229374303383 -34 955 -.9139527266196038 -38 955 .24348542417755092 -39 955 -.7360737721555934 -40 955 .5622506093887454 -49 955 2.0671041653000577 -77 955 -.19042609616578976 -83 955 -.7786096955923998 -89 955 -.8874253591093945 -92 955 .13642208342518813 -96 955 .2828285052053271 -100 955 -1.4539714705511813 -109 955 -1.4195725878087582 -110 955 1.8562415459521369 -131 955 -.8028937325242739 -156 955 -1.474094261143607 -162 955 .7754113873771851 -181 955 1.1131437234283452 -188 955 -1.2786447090803272 -196 955 1.6654512081416555 -199 955 -.6704711534310007 -203 955 2.3575645180966514 -205 955 1.7049911412610073 -209 955 1.1920525225712755 -222 955 .5355897996801411 -237 955 -1.6346908278474241 -240 955 .554921149990312 -242 955 -1.0429656999553203 -250 955 -.4042131801564895 -260 955 .646628981169332 -264 955 -.19917354795195907 -272 955 1.4716492460810153 -276 955 1.8307028968258758 -306 955 1.0017057351631136 -343 955 .18938787131377635 -344 955 .5095701047746628 -350 955 1.4357439027052539 -361 955 1.058554716893515 -369 955 1.6243172109285757 -385 955 -.6392276761992337 -420 955 1.0939225376312542 -425 955 .11193556351944361 -429 955 1.4008437539074747 -432 955 .060305095572966746 -433 955 -1.3996591543197443 -436 955 1.8360227697394849 -458 955 .5891966784523622 -461 955 -.6577407296252038 -488 955 .4298521542248947 -499 955 -.42109455920969796 -505 955 1.8640903809559686 -510 955 -.9502414932629826 -549 955 .9965902177171289 -564 955 -.37984823581239124 -565 955 -1.045600506283797 -567 955 -.20635083391585282 -579 955 1.4151300443101467 -625 955 2.2927976167399713 -646 955 -1.5009735739730745 -672 955 -1.4575614350759 -684 955 -.40380594919500673 -692 955 -.24198423965326052 -694 955 .007593511387017124 -696 955 .39661856854269784 -709 955 .538653643890744 -711 955 .3877695592985946 -714 955 -.0736878984241724 -716 955 -1.0224887718475957 -749 955 -.6288004769772332 -764 955 .25557079162902 -783 955 1.1039464657783462 -784 955 -1.103011077461899 -788 955 -1.0461586597039614 -802 955 -1.47505652581487 -813 955 -.7961969505216282 -816 955 .8479911836596881 -835 955 -1.141630546109242 -839 955 .4781428241818827 -849 955 1.7341119154930813 -853 955 -.4604634958500914 -854 955 .6497179694544313 -860 955 -.010026054024815365 -882 955 .03983325195333767 -893 955 .09983274612004946 -894 955 -1.2541214699782488 -895 955 .8690210195800538 -906 955 -.2577825479598829 -907 955 -.9794690791013416 -916 955 .35125019724070017 -924 955 -1.7369177868932066 -943 955 .9232289159698398 -952 955 .5249786070752549 -954 955 -.2929079556076338 -957 955 .9473757741331944 -959 955 -1.8374285760279887 -963 955 -.06295632702858935 -991 955 -.9824077522990221 -992 955 1.9997666175461304 -5 956 -1.857098328295597 -9 956 .25486883962850393 -11 956 -1.7192175581463407 -18 956 -1.49162582897092 -20 956 1.2688033607854237 -31 956 -.5936978778534139 -45 956 -.32225560113334484 -50 956 1.9978341645967983 -68 956 -.3118790289583676 -69 956 .926894402743576 -80 956 1.314721661958052 -84 956 1.1139560134070121 -93 956 .41727209807329213 -98 956 -.8434077959466971 -132 956 -.5123825081406936 -134 956 .20255418530512612 -152 956 -2.5925269746326283 -154 956 1.1960421681671087 -157 956 -.4305032021647921 -159 956 -.5933404989641773 -163 956 -1.1599052785767914 -175 956 2.918396832414424 -176 956 .12629741080040127 -188 956 -1.0096148480048919 -197 956 -1.2146251747125085 -208 956 -.6064786317417852 -224 956 -1.1194712074359026 -233 956 .348410276668038 -254 956 -.8025411284585182 -265 956 -.884716723928276 -321 956 -.8560453846195079 -358 956 -2.52421357159143 -360 956 .4410945094632583 -361 956 1.3241817338374622 -368 956 .6614556929280309 -375 956 .2426548959344252 -380 956 -.398406321887183 -384 956 -.3850812011601418 -390 956 -1.160886485071198 -395 956 -.09273643594645274 -400 956 -1.7671298247505505 -415 956 -.5001785624274877 -418 956 -.45459941897362155 -436 956 2.2920659807506905 -439 956 -2.998549546081802 -442 956 -.7886850557620584 -480 956 .3373545704500926 -496 956 -.029506157894383912 -497 956 -1.5513478097383766 -513 956 2.3250336945475674 -520 956 -.22330581532173624 -524 956 .31484232228481995 -528 956 -.375723810709316 -551 956 -1.8101965990891515 -562 956 -.7022578351834446 -566 956 -.1800985086738508 -600 956 -.5471828840371018 -609 956 .27321046711191993 -611 956 1.5498282592542747 -619 956 .608132944769255 -642 956 .8185509576226782 -643 956 .30145625511037283 -644 956 -1.5346157627836152 -666 956 .5007515830062459 -679 956 .9417003663452412 -701 956 -1.4217042662191628 -709 956 1.6448377481512246 -722 956 1.8540232886789798 -731 956 -.5280804478370191 -754 956 -.4066143348746817 -757 956 -.3862916684121932 -775 956 -.014048261512523585 -778 956 -1.6789660334854248 -782 956 1.2729221275182907 -785 956 -.6745072631344573 -795 956 2.9244308048958034 -799 956 1.6759695268338881 -807 956 .18078812036375924 -823 956 1.2143098759376778 -831 956 .027757137147325778 -844 956 1.543148419783486 -851 956 .5454981622271222 -853 956 1.2579570452561704 -863 956 1.770406467381957 -864 956 -.1659170563422377 -871 956 .9034869682806087 -907 956 -.5526453852435813 -912 956 -3.7922442439281876 -923 956 1.9636264634061236 -928 956 .43339283518461885 -946 956 -.02124295554723507 -969 956 -3.375395251421831 -971 956 1.3973133972548306 -987 956 1.2712736782752991 -999 956 .5567027945150539 -2 957 -.741462957676514 -4 957 -.5287539208107911 -9 957 2.309557206833361 -16 957 .17115265502549015 -29 957 1.2161649140810045 -30 957 .6714896526013364 -32 957 -.42717814074068317 -57 957 .35791162106962576 -58 957 -.977497412246737 -70 957 .3990279205717123 -82 957 .9445916772876017 -87 957 .8018230901813694 -92 957 -1.1546035222526665 -96 957 -.33003288850765916 -101 957 .9026457391959573 -102 957 1.2582679560484684 -116 957 -2.141023565160975 -126 957 .7427730186785135 -132 957 .00913640320647223 -151 957 -.2020967794988786 -152 957 2.0909399193845184 -156 957 .8504668565657812 -163 957 -.5388570752755123 -185 957 -1.020271416732245 -188 957 -.7842425172404321 -202 957 -1.3028002075974423 -203 957 -.7089172850996913 -212 957 -1.5352356400376508 -217 957 -.30768298287454376 -256 957 -2.7161551971230904 -265 957 2.129727034572843 -267 957 .10633611886154241 -270 957 .4846014484244135 -278 957 1.2481302518621813 -302 957 1.8022582985777627 -306 957 -2.718850241775644 -332 957 1.9699541418261377 -350 957 -.414834589530651 -373 957 -3.2265747717434468 -398 957 .5226416324166161 -445 957 .0371723737712131 -462 957 -.23610740934424068 -472 957 .22956259743712304 -489 957 -2.083711685281846 -497 957 1.115319596741695 -506 957 -.09115887044224358 -540 957 .14146889011090796 -541 957 -.8170480489132733 -544 957 .03871437896061671 -565 957 -.2746545294259086 -576 957 -.6452016720470534 -580 957 .21756717940603015 -608 957 1.0761771265742586 -618 957 -.8365911091562843 -633 957 .4252846149147792 -637 957 -1.5960179667396313 -638 957 1.1618788686778463 -641 957 .6179557477541106 -646 957 1.01421205931858 -662 957 -1.2760529652743258 -663 957 1.646131536731413 -678 957 -.4686412671309532 -685 957 .08776979640748772 -686 957 .5269658644610719 -689 957 1.5228409982944433 -694 957 -1.5237565881951292 -696 957 -.6561989823950966 -698 957 .7540677226789919 -702 957 .42548772077672564 -705 957 -.17364814796270853 -740 957 1.788524592732673 -744 957 -.5263593148723604 -751 957 -.7582004685277729 -753 957 -.6804712340281018 -767 957 1.064960314060982 -773 957 -.01640667671257874 -780 957 1.10927215679621 -787 957 -.6375941094115971 -806 957 -.26053950314616753 -839 957 -.7978999545262451 -850 957 -.09620356252097609 -853 957 2.21956494774128 -854 957 -.41467887765188405 -865 957 .08001891207016454 -872 957 .15741404720778118 -883 957 1.0940644182400656 -885 957 -.8081342851770645 -888 957 .08981433726499667 -912 957 -1.4342544260858583 -914 957 .6999482238639381 -919 957 -.705625980536024 -925 957 -.7079441646538298 -936 957 .9418979203432852 -937 957 -.1758265889157682 -951 957 .4641566288723105 -972 957 .3718220610650845 -990 957 -.05233305877904887 -1000 957 -2.081621061657079 -11 958 .25663976628714047 -14 958 1.1126214625406436 -23 958 1.379771422929995 -34 958 -.6666014869020906 -57 958 .3257312393392938 -59 958 1.8277305856449308 -62 958 .15486732633029754 -73 958 -.6391108904201883 -84 958 -1.1202383475849693 -110 958 -.1047049023247075 -120 958 .13698666521623887 -130 958 .9279467947092296 -137 958 .362075746128088 -140 958 1.2660943626225512 -150 958 .06920300696955828 -152 958 1.3893904164743904 -164 958 -1.3564831847468255 -169 958 -.8208748241472446 -184 958 .8828086423856225 -185 958 -.5487581240109792 -187 958 .35571325434558454 -193 958 -.5588734394047137 -202 958 -.38484208975099 -210 958 1.0423191681487005 -217 958 -.5386904182764649 -234 958 2.113653687321865 -240 958 -.659460984766258 -247 958 .9389424817272003 -271 958 .5873288871555951 -292 958 1.2526768605198433 -302 958 .1083055666516892 -304 958 -.3423179516738897 -310 958 -.0901455270542676 -324 958 -.04791986334422796 -329 958 -.10318248196304662 -341 958 .3697218843898021 -346 958 -.009313758842665353 -354 958 -.17192625434972134 -357 958 -.540208647246884 -371 958 .9133810456253733 -385 958 -.21760158414575492 -396 958 -.537036579440643 -399 958 -1.1408072312927313 -408 958 -.637241613227494 -411 958 -.5672350205791592 -425 958 -1.3305787550142083 -427 958 -.6366582189740512 -432 958 .4502970052682369 -479 958 1.0775607422297093 -484 958 .07687069115296745 -494 958 -.3202888025945416 -496 958 .47351866237736645 -517 958 -.18970094566496754 -518 958 -1.0718117561568983 -524 958 .15081386237756156 -528 958 -.3576378826771357 -529 958 -.8448930745370447 -531 958 1.7154364028597087 -548 958 .5125051035124594 -554 958 -1.3129771777716153 -560 958 -.24415266618585432 -563 958 -.10188408490129822 -579 958 .31292406436409065 -595 958 2.972415574284134 -605 958 -.04863827700688449 -617 958 1.6536688871909133 -646 958 -.1388237419345903 -655 958 1.1194811644074063 -669 958 -.6233922660719818 -677 958 -.9631769397528479 -686 958 -.25127554641375266 -687 958 .8358974152980923 -692 958 -.20774738349349675 -714 958 .28224573707947065 -715 958 -.9249942464641873 -718 958 .29066853669311826 -746 958 .4196950397032722 -753 958 .07053709676459052 -758 958 .6687299955494529 -761 958 .049274716820856865 -763 958 -.9512298270005177 -767 958 .33364368010531287 -781 958 -1.4586484875094732 -785 958 -.029193813208276784 -786 958 -1.6223758649949336 -798 958 -.7203712094688528 -827 958 -.3660273951695738 -848 958 .575191328099409 -851 958 -.18923347601610743 -861 958 .578661734357012 -886 958 .4116755234483102 -895 958 -1.3295776340054788 -907 958 .23518281981538186 -909 958 .4691788803411802 -910 958 -.6338753705675858 -937 958 .31735992325373197 -961 958 1.2880372328797447 -963 958 .455423976232497 -989 958 -1.5335032600558014 -994 958 -1.0773738382434659 -996 958 .6090827664147657 -8 959 1.9077882909824426 -29 959 -.733315341676344 -32 959 -.9721587097046027 -51 959 1.3690795442220836 -53 959 1.9983518452253834 -57 959 .4690939409576279 -61 959 -.06690069018336081 -69 959 .9558203911765579 -73 959 -.16914630219453297 -87 959 .19122775731667194 -108 959 .43579002998216176 -115 959 2.6679338709915412 -116 959 -1.320618350166066 -123 959 -1.819915620527074 -128 959 -.10357912555070084 -132 959 -.7946813509884102 -136 959 -2.8837870816568696 -163 959 .2922601075648024 -182 959 1.6166857106489045 -194 959 .711709570987191 -199 959 .18876244721790159 -203 959 -.8275171259032095 -211 959 1.6817623846416745 -225 959 .5255287471188999 -228 959 -2.062465242869788 -232 959 .07407658044499815 -241 959 2.5816989696873387 -244 959 -2.9056104460412113 -247 959 .12219358987409398 -256 959 -2.170996807670053 -261 959 1.2595563620866856 -265 959 .741060717676799 -281 959 -.1608372238967263 -283 959 1.6325150826435242 -284 959 .21301804631214388 -285 959 -2.193164379925643 -289 959 .30188935239706327 -314 959 -.928218743580891 -315 959 -2.597780195578507 -319 959 -2.084284736632379 -336 959 .3337472495983956 -339 959 4.5645308690595385 -355 959 .1793508811071305 -362 959 -.5625388965761975 -376 959 -1.7356282902814066 -393 959 -.12679912747047792 -404 959 -.21221637311974026 -406 959 -.40005567413066034 -430 959 .5183623534690371 -433 959 -1.6859410252110423 -437 959 -.33544849603292004 -466 959 1.3575576350894376 -481 959 -.6346136777234844 -482 959 1.9144923362220803 -502 959 .892256126019584 -505 959 .5124031144294857 -516 959 -.9876233404523606 -517 959 .36158974633030155 -526 959 1.1846038151089733 -533 959 .5934563600363252 -534 959 .5282867574150808 -545 959 .3176574904632196 -584 959 -.9984813438960998 -597 959 -2.1865251237040977 -615 959 -.8647707535024245 -626 959 -.5173828693397564 -636 959 .5315514039196707 -655 959 3.0892133124430003 -659 959 -1.261588978371755 -660 959 -1.3222894815907538 -662 959 -2.632381042379668 -663 959 -1.2312480259470586 -671 959 .6617984731990806 -711 959 -1.0033045160463085 -737 959 -.36448061499780404 -750 959 -.922141398779547 -753 959 .03704303065989528 -755 959 2.8057015915300685 -764 959 -.8231446857260132 -799 959 -2.5493570644337047 -856 959 -.026821592314599765 -880 959 -.9042755860216564 -881 959 .3728662661547858 -934 959 2.102386140554118 -950 959 .7725472598437646 -953 959 .13190359295881945 -970 959 -1.097799407925602 -2 960 -.3464274106942805 -6 960 .0074679628334299725 -22 960 .673935158590686 -32 960 .05500319721443545 -45 960 -.6042568069710541 -49 960 .08560843624643134 -83 960 -.48533034036034683 -94 960 -.32834189490629845 -102 960 1.4193507187692294 -120 960 2.129320197239083 -134 960 -.682528412463895 -151 960 -1.3416784742752095 -182 960 .6910317747306421 -183 960 -.9342739155926488 -186 960 .06422590643173855 -192 960 -.7546790047566903 -196 960 .2342506982432656 -206 960 -.19814767108467202 -221 960 .5123955648539087 -230 960 .17646425138137933 -238 960 .027411578307733546 -248 960 -1.5381611563741082 -251 960 -2.107070876467098 -257 960 -.8227212690073452 -262 960 .04894477114022286 -274 960 1.5103766261613671 -285 960 .6966157898382496 -287 960 -.29457272326740436 -298 960 -.015034932419642516 -300 960 -.0698706591771506 -329 960 -.5978260253626955 -330 960 -.2833749496146725 -336 960 1.2431312186442467 -337 960 -.975871939971118 -339 960 1.509821928224711 -340 960 -.858249749432092 -353 960 -.21012473655701558 -356 960 .8278024105810373 -394 960 -1.322597628381187 -397 960 .12489752983751086 -402 960 .6647832332362241 -406 960 -.3185305038655517 -407 960 -.3929150661431274 -422 960 .3024323863557515 -424 960 -.48549204270111407 -434 960 -.509533715841049 -435 960 .13529158426928375 -436 960 .13698175510002591 -450 960 -.4238454956926076 -455 960 -.8298297442483175 -466 960 .2785035623841082 -470 960 1.396140835971055 -471 960 -.36530045099546704 -506 960 .2484254779109913 -510 960 -.25820801777482255 -514 960 -.1991242087372357 -541 960 -1.171432619783375 -552 960 1.3640418597661508 -569 960 -.08416615867590971 -591 960 .20870693862505593 -594 960 .6172486350276927 -598 960 -.07516049583161649 -602 960 1.006365709720652 -607 960 .623334033872131 -609 960 -.4232961037847195 -611 960 .4309810267983054 -613 960 .5085221445996423 -621 960 .37823029643628 -624 960 1.1438029483060366 -630 960 -.22890536002383366 -634 960 -.0260825696562864 -657 960 -.46251225326269324 -659 960 -.9585221242586601 -662 960 -1.0590319424729935 -664 960 1.603845390183821 -667 960 -1.1891572246622268 -677 960 .21068166490415954 -684 960 -.5313139903015044 -696 960 -.7746101882836199 -705 960 .8173265310604125 -717 960 1.95123547646446 -731 960 .842177637555317 -732 960 -.7210662700683037 -734 960 -.028990239162568376 -740 960 2.758173879404232 -743 960 .5632204826425353 -753 960 -.9909002327905335 -773 960 -.6542007836271276 -799 960 -.16047239353211964 -823 960 .4666613806455403 -845 960 .11604332890496012 -865 960 -.34338073549238673 -879 960 -.12634574975625282 -886 960 -.5842197679822568 -902 960 -.10724507900089633 -903 960 -.499439645912345 -909 960 -.30742789325902253 -914 960 -.6863898465042332 -917 960 .7977997023917042 -921 960 1.4792068074080449 -941 960 .006211008854431324 -978 960 -.6171184068197033 -981 960 .9713407234957213 -993 960 1.622328454597912 -1000 960 -1.194717731438744 -3 961 .3258440287235605 -4 961 -.10612468775470052 -20 961 -.812647359312014 -21 961 -1.0436265662816104 -34 961 -.6696805130168565 -46 961 -1.4727304771218348 -87 961 -.6134044241756887 -90 961 -1.0763079857801159 -108 961 -.32554056279481214 -118 961 -.5224368459219303 -128 961 .05930492700137342 -159 961 -1.7101332940049812 -163 961 -.5321106198067539 -168 961 -.47484880127232576 -171 961 -.9373241841875409 -187 961 -1.5173973546821728 -197 961 .26271494632356 -200 961 .46584368094682593 -201 961 -.4125442251177468 -207 961 -1.14093274157359 -218 961 -.6759066948250951 -240 961 1.2170776155036342 -249 961 -.011664743595519018 -253 961 .07394969569387544 -254 961 -.3078681920132425 -258 961 .37448228668182576 -259 961 -.10536124722609846 -263 961 .42019189259136663 -268 961 .3619780348708232 -274 961 -.6701034017229038 -301 961 -.5460113319256101 -302 961 -.6319099916523646 -312 961 -.30830420315014667 -313 961 .5585764508696175 -317 961 -1.3079806023096985 -318 961 -2.593953965339576 -325 961 -.1686383289097662 -328 961 .05513878233314731 -329 961 .23089652231741234 -332 961 -1.3381646851848057 -340 961 .9921935676696907 -350 961 1.0337331952408384 -372 961 -.08992229779582804 -384 961 .7241644715911211 -385 961 .7460473150567295 -389 961 -.46683385467287 -397 961 .3666583394593217 -417 961 .03426917569180593 -421 961 -.44883746474158 -425 961 .6966349877779675 -429 961 -1.3503361602695858 -438 961 -.9302928552572394 -441 961 -1.3597544537678805 -448 961 .6381883430687345 -453 961 -.1222138692691847 -457 961 -1.289934900223232 -464 961 -.4540268804619907 -478 961 -.6601505246818424 -481 961 .8384146569652182 -483 961 -.13785430238621016 -494 961 -.5106355045501143 -500 961 -.30765935359514845 -528 961 1.4907410045107499 -537 961 .08423035048143526 -546 961 -.09886228053095389 -555 961 .029051921741464735 -562 961 -.7448438033802093 -576 961 1.217980906199562 -579 961 -.5075371022108985 -594 961 -1.0634225002543265 -601 961 .4229952339405309 -610 961 -.07678331167303065 -616 961 -1.5617761075581245 -628 961 -.3520335705212412 -642 961 -.4001447138454564 -654 961 1.7246045343299894 -660 961 .9581004985009184 -667 961 -.5996195762414447 -703 961 -.8286095507632377 -709 961 1.214173589817516 -756 961 -1.7179612640231385 -768 961 -.09195585445424911 -777 961 .33676264573631015 -778 961 .5412699349941441 -782 961 .30208455251186606 -786 961 -.18306596754855478 -789 961 -.1007001935907572 -798 961 -.07678264546295836 -818 961 -.264446552809934 -820 961 -.7488198837395584 -836 961 -.24350635260297332 -850 961 .3297391568059954 -852 961 -.161897523071835 -860 961 -.58747438075189 -866 961 .3260712454977946 -883 961 -.9491741034213707 -900 961 -.060302722572556325 -902 961 .05566614744757242 -916 961 -.47720270080148386 -931 961 .5597358154953521 -949 961 -.16435875423571195 -950 961 .9340948233409072 -959 961 -.04117772250836899 -960 961 .08413843924524733 -961 961 -.03169965536040867 -992 961 .2762751709256537 -997 961 .3635020053548207 -6 962 1.5676598308255756 -14 962 -1.3014284668968132 -52 962 1.1051341413291347 -53 962 -1.4089795392799782 -56 962 -.7908407143905664 -61 962 -.7686611463979564 -79 962 .13495168256578283 -106 962 -1.0710339907516881 -127 962 -.720353748206504 -150 962 -.5295861519620777 -151 962 -.048821199902085305 -152 962 .055767526189746175 -177 962 -.5766923580067534 -181 962 -.9606357252558946 -182 962 -1.0967101943988526 -197 962 -.29636143348050226 -199 962 -.7722051137203597 -227 962 .9652739796571784 -241 962 -1.787025503798039 -255 962 .6771017938867463 -279 962 .2884590855184025 -281 962 .562381585530356 -294 962 -2.0755599993890863 -299 962 2.158246640680416 -311 962 -.42973956923120626 -312 962 2.173779844970991 -334 962 .0017394190601540543 -338 962 -.8034906774365534 -348 962 -.3126466694072715 -351 962 .26556198096061906 -373 962 .6276859318596645 -388 962 -.5797781088877775 -393 962 -.28415842284260895 -397 962 -.11462938360880545 -411 962 1.1065325286614536 -418 962 .9506465946165461 -420 962 -1.3230245506052436 -427 962 -.046010284292450056 -428 962 .4042062813443133 -470 962 .5772382356855065 -481 962 -.7581197016413099 -490 962 -.612931853668615 -493 962 .8700652846717863 -499 962 1.3580983931826 -520 962 .9488314071575894 -531 962 -1.8093867816045195 -536 962 .09886784315554661 -543 962 -.3742635066596353 -548 962 -1.7555650849951987 -559 962 .030750438918552142 -561 962 .3874492829691149 -592 962 -1.3257075199832542 -629 962 1.425427397590565 -654 962 -.10924856381034886 -656 962 2.133314928825243 -658 962 -.16808638262095738 -679 962 1.6927270786001247 -719 962 -.5763607642243226 -725 962 .5620913359811421 -747 962 -.37414710564716785 -779 962 .2962139016308582 -782 962 .17131605924551274 -789 962 -.06088603456215552 -792 962 -1.5556486507957092 -795 962 -.8544857832913473 -812 962 -1.0591508745778022 -814 962 -1.0659515034724811 -822 962 -.007446695951045706 -841 962 -2.504254823410128 -849 962 -1.560081946510198 -850 962 .6924380022002958 -854 962 -.3277094785340776 -855 962 .41172524533270005 -858 962 -.4072758560445576 -863 962 -.09224605695648405 -885 962 -.07832573784896461 -888 962 .1255971892751874 -891 962 -1.1825351453001247 -900 962 .11498075660035752 -908 962 -.7455667809206443 -912 962 -1.0780282608482057 -914 962 -.5045107696498332 -931 962 -1.061558496460145 -941 962 .199132794421902 -949 962 .18372849361224855 -953 962 -1.1477732874823647 -956 962 1.007068256564466 -966 962 -.23304835798449247 -972 962 -.505411720854283 -998 962 -.08952948847728935 -20 963 .30838254795911024 -31 963 -.24123080167410188 -32 963 1.3014218601756462 -38 963 -.8443037126579133 -45 963 -1.1148634225217084 -66 963 -.11160518423234546 -113 963 .35350327186537733 -125 963 -.2714917567304822 -149 963 .8135632606050578 -151 963 .22327908906789554 -161 963 -.2637227392656727 -171 963 -.8887709965614867 -175 963 .15093014883205405 -189 963 .4369499276077307 -193 963 -.546892292331328 -199 963 -.3792304098801389 -208 963 -.2539221625332534 -217 963 -.875213800296751 -234 963 -.9984879289772961 -272 963 .8619989750902113 -273 963 -1.0521130828473386 -274 963 .2745965549344533 -281 963 -.35283482987656145 -283 963 -.46562634623877047 -285 963 -.4012206187028211 -294 963 .5985133020949264 -305 963 .47841741526969944 -325 963 1.256267871492798 -333 963 -.8715781029376768 -339 963 -.7730506092367871 -345 963 -.6910117207658115 -359 963 -.9799734351700455 -368 963 .05273027938376039 -377 963 .23815102787288195 -384 963 -.3800532786242078 -397 963 -.41378855152784677 -419 963 .5389711936764578 -423 963 .6116786034108173 -426 963 .18049535412227985 -429 963 .5418152298500953 -438 963 .43657410499955257 -440 963 .049828996198233125 -456 963 -.543144458598712 -458 963 -.26412281678852795 -472 963 -.8797472746042094 -476 963 -.916051134487548 -509 963 .616274951515157 -515 963 .505931548822808 -516 963 1.5626603348659491 -534 963 -.8876778571115302 -559 963 .15601950686310237 -566 963 -.7476069689341791 -577 963 -.6328340514735934 -585 963 -.3345994856112086 -588 963 .09363664308647679 -592 963 -.1522864735081245 -599 963 -.3268933132053291 -605 963 .9512392904512855 -610 963 1.1622556376246334 -617 963 -.4704993473388298 -620 963 -.8607406884918346 -622 963 -.10839795803620177 -628 963 .6228928228409946 -665 963 -.11074531267348413 -671 963 .5909745121088587 -673 963 .6322777711476105 -677 963 .518062588914752 -685 963 .5520036765102979 -700 963 -.9812398198202602 -728 963 -2.0692765667712574 -744 963 .28200235339526714 -759 963 .094658283758979 -761 963 -.5464312766479853 -766 963 -1.2961357924390127 -781 963 .047778325142634734 -785 963 -.849948297664997 -799 963 1.226773418001114 -800 963 -.30544581391248127 -808 963 -.921662973204546 -816 963 -.11915351427686194 -819 963 -.2731124986030721 -824 963 .8536491570391224 -831 963 .07311881855723945 -832 963 1.508561620958989 -848 963 -1.191352142213037 -861 963 -.5937235273203254 -862 963 -.4050022344693954 -863 963 1.1191008903495465 -865 963 -.7293633469746977 -869 963 .5516389248493825 -880 963 -.16369053450177432 -883 963 -1.304823200720525 -884 963 .05225890142338978 -889 963 -1.062712514632482 -894 963 -1.2363904283603904 -902 963 1.4188911880923265 -907 963 1.493759888488298 -914 963 1.0209752100201166 -927 963 .3121803900852041 -929 963 -.6250711857521732 -942 963 -.8095570453890718 -949 963 2.1595588843420623 -950 963 .039489811436369524 -953 963 .3074695589239281 -962 963 -.31795403054587057 -967 963 -.46592578696200515 -974 963 .04795302969003798 -980 963 -1.0507904323702844 -2 964 -.577138831682187 -12 964 -.6645124396800745 -13 964 .3915481200819022 -56 964 1.3627822185611314 -70 964 -.06698370091043149 -79 964 .24141525626067595 -82 964 .9176001835230265 -89 964 .6261868192547632 -100 964 -.3429423007976385 -120 964 -1.1754990084558017 -123 964 .7654865940282429 -147 964 .20518064128058908 -165 964 -.8526194263113744 -167 964 1.64109784935999 -177 964 -1.0254553008986356 -178 964 .12873448783970382 -179 964 .12607224219432056 -183 964 .5934293180701582 -199 964 -.388197277051768 -212 964 1.8141764690670255 -260 964 1.2377095302447598 -263 964 -.34878656419836623 -265 964 -.4844817012751016 -268 964 .14396146256907105 -274 964 .5207479796336716 -275 964 -.0066625916658256115 -287 964 -.7849527336968464 -336 964 -.2614865478057299 -345 964 -.7262655010351586 -350 964 1.0053720021713004 -354 964 .9128666290641896 -364 964 -.3436929593849603 -367 964 -.5396760801249708 -377 964 1.1544046750683792 -390 964 .3544257198020109 -419 964 .1514684847767835 -422 964 -.9545978826702826 -430 964 2.0160962524228636 -431 964 1.1752739519636797 -434 964 -.7660694384929079 -458 964 -1.0441737407904121 -461 964 -2.2616909338948292 -465 964 .39963235298906075 -472 964 1.1626883790057914 -480 964 -1.076968332607851 -486 964 .53053856950638 -489 964 -.13385655477668096 -503 964 -1.0492096871965793 -507 964 -.2462445478464926 -510 964 -.5793259370217462 -513 964 -.7804306312687392 -520 964 -.8280468405283335 -536 964 2.9831885730689374 -539 964 -.6246186097693308 -548 964 .9346910231726416 -552 964 -.035606968694809615 -559 964 -1.4497103699542808 -565 964 -.8327261873978157 -567 964 -.19849793570904145 -571 964 -.6820046150582731 -591 964 -.481543190250261 -594 964 -1.3001148033428342 -611 964 .39869139415675925 -618 964 -1.5245771971305573 -632 964 -.35632830575688773 -667 964 .39581322260038077 -679 964 1.235854358271713 -686 964 .5856106440444832 -699 964 1.0225825159648103 -704 964 -1.1378924780590238 -768 964 -.9075654345891395 -773 964 1.268763177928599 -784 964 1.0484055842794118 -790 964 -.7293624623759228 -804 964 .11531855032694427 -836 964 -.3684944145362244 -841 964 -.55149937467934 -847 964 .887587445387095 -859 964 2.324525020791034 -860 964 .2885072986525788 -889 964 .1802986648735726 -928 964 -.684937289987836 -929 964 -1.4550969671165817 -940 964 .04431845466073013 -954 964 -.5603141112377641 -956 964 .0938194363820988 -959 964 -.38816849007778725 -964 964 -.7303643054657392 -971 964 -.550713991170276 -974 964 -1.0475645618562566 -975 964 -1.0999272176970734 -993 964 -.23628487471791862 -6 965 1.2646821545000877 -8 965 .6431629322575759 -13 965 -.7543394468447735 -20 965 1.0224400226204773 -55 965 -1.5732001276244327 -56 965 -.7961244151944163 -66 965 -.11258715897019307 -69 965 1.2723176073687854 -73 965 -1.2899790435717469 -75 965 1.4095658822379538 -76 965 -.24767484895833547 -106 965 -.39800261145792254 -107 965 1.1813136115011267 -108 965 .9388040471192308 -134 965 -.7228123036569216 -153 965 -.25112697429073955 -159 965 -.6278414371522103 -160 965 -.5826200491359711 -162 965 -1.5986331348384621 -168 965 2.181131818314324 -176 965 .037745160600947125 -180 965 1.933906025300162 -198 965 .3117701359509231 -200 965 -1.8011980444597027 -216 965 .5211919874543594 -223 965 -1.0331018737024948 -237 965 .0005358269128835982 -243 965 .8485912737267768 -249 965 1.5330477869793178 -256 965 -.1096734775857282 -270 965 1.307561725346677 -275 965 -.6148567433057625 -289 965 1.0610701066960782 -311 965 .24844154060464707 -336 965 1.5780666910902716 -343 965 .1847242169292445 -350 965 -.786296409150628 -352 965 -1.3919271450595758 -369 965 -1.0706611124275698 -394 965 -.661822705594402 -412 965 -1.3246049845134698 -415 965 .8751956112423602 -417 965 .7225572641558404 -428 965 1.5727251572425889 -461 965 2.4733066734044438 -472 965 -1.7022211317322151 -474 965 .4506922730720174 -475 965 .8328721860594649 -476 965 -1.7448542570306722 -493 965 -1.0088983220712548 -497 965 .7564493807443289 -499 965 2.0414311720616296 -504 965 1.3003674114425372 -507 965 -.8779515771869875 -510 965 -.02448431016176663 -512 965 -.36037278326774497 -517 965 .6102981842478503 -519 965 .12561343140406467 -532 965 -2.2036037596925517 -554 965 1.3672768500923165 -574 965 -.05339650789021111 -583 965 -1.1804184836308969 -622 965 2.0019001016935647 -642 965 1.637725515012846 -682 965 .7208724658398499 -683 965 .6251382146825397 -697 965 1.0815221583990002 -703 965 .4752541940470818 -704 965 .6031298419792442 -718 965 -1.8121464759982062 -725 965 -1.8404624033079213 -726 965 -2.677624522785255 -730 965 -.4314192950678363 -733 965 .9716420675673126 -740 965 -1.3849776931367295 -756 965 1.8092482775296614 -779 965 -1.6172510697739357 -790 965 .5056392369419195 -793 965 1.588332889560896 -805 965 -1.4306238413913805 -818 965 .9989059506585286 -819 965 1.0235992291005553 -821 965 -.30953791943692743 -836 965 1.051999436739183 -846 965 .14541001653267965 -854 965 .8155943287735524 -861 965 .7901038096938333 -871 965 1.487940800345406 -881 965 2.5185047774043072 -883 965 .7515514668640735 -892 965 -2.0662945423177845 -931 965 -.34831072675686026 -932 965 .4299398359422119 -943 965 2.552056370239017 -950 965 -1.3284075058747358 -952 965 3.382095124652124 -958 965 1.8547711809563363 -964 965 2.343946311317788 -969 965 1.3017560405065158 -999 965 -1.372517990874556 -17 966 -1.9209626447524868 -36 966 -.5686889338962245 -41 966 .19875790483053135 -67 966 -1.3921109460937935 -69 966 -1.3113540328080175 -83 966 -1.1203607041205648 -84 966 -.12274104784406867 -96 966 -.15999843630715732 -103 966 .9581103935576409 -105 966 -.3802538362654333 -109 966 .1250523639911481 -111 966 1.5538227080069984 -120 966 .6734839920542214 -137 966 -2.1401261210360802 -152 966 -.3360102376172582 -169 966 .7323207812966332 -175 966 .12411650758326409 -177 966 .21975590607897738 -190 966 .6313782389926602 -235 966 -.12076893199578766 -236 966 -.3430176191151149 -246 966 -1.085817781768756 -259 966 -.3513774028270107 -267 966 -1.25043089185537 -273 966 .05883154506155493 -301 966 1.7482087943765858 -302 966 -1.6162457641223176 -303 966 -.37381623917141477 -309 966 .070183433872507 -310 966 -.22557164735161903 -327 966 .489662967318254 -329 966 -.3343530697966062 -336 966 -.6892256998216959 -337 966 -1.3773054611789397 -348 966 .12053088737876239 -349 966 .7951000886477291 -356 966 -1.2033551156762199 -360 966 .288097701725921 -367 966 .7904750050008111 -389 966 -.01327152493445237 -395 966 -.8111613116184847 -419 966 .8409526381297495 -420 966 .39069404641702465 -421 966 -1.4981088331147001 -429 966 -1.25448207318271 -450 966 -1.1394674121901691 -470 966 -.24774364473048777 -483 966 -.5312906569396612 -500 966 .800366324284496 -512 966 .5222583792848758 -517 966 1.0356372820939466 -527 966 -.08432149982482424 -528 966 .09998867895434883 -544 966 .1942198141610472 -545 966 .3030926790886565 -546 966 -.6616821595860897 -548 966 -.4734050567387514 -564 966 -.8017059842909188 -565 966 .8687767774805093 -583 966 -.4391722974301379 -589 966 -.049341392815930585 -591 966 -.13172573006746896 -592 966 .19534940804951423 -611 966 1.345532970194047 -612 966 -.7436497944191394 -625 966 -.08261719068965498 -630 966 .67438045977704 -638 966 1.4741948058341046 -648 966 1.7941827368533945 -660 966 .3555562734020337 -678 966 -.8586833409891491 -686 966 .6358177934045361 -701 966 -.8323091381516532 -717 966 -.2142463891778118 -738 966 .0688301801551623 -772 966 .42645390359553575 -775 966 .4596352653890669 -780 966 .13414095047610902 -783 966 .8014104041999158 -787 966 -.4443964052382345 -794 966 .33892984162263007 -801 966 -.1300356216542683 -803 966 -.9120720494317269 -810 966 .6369143702489432 -819 966 -1.6538697161725808 -829 966 .30087565620146683 -831 966 -.4143653158917048 -836 966 .33008670518292893 -846 966 -.044462102646645574 -851 966 1.7876564551576362 -858 966 .5979695835719264 -869 966 1.0133168938801667 -908 966 -1.9286177684455401 -922 966 .7483296947061033 -929 966 -.18405171553940014 -931 966 .9245798117126423 -935 966 .7528008415928092 -943 966 -.41166223588875506 -986 966 -.6418498679550857 -987 966 1.299925087538259 -992 966 -.22940881222353762 -6 967 -.3620029339184969 -18 967 1.2483164054874873 -19 967 .9087738145335903 -23 967 .9359344699225052 -32 967 .6476108711794775 -37 967 1.0878184708812877 -40 967 -.2165306587732856 -53 967 -.2007535621581973 -59 967 1.2462460655419354 -65 967 1.4134281572634162 -86 967 .9158520763257435 -89 967 .8863940497079338 -94 967 -1.368887495698052 -115 967 .6318157835302887 -119 967 .7130416184799961 -138 967 -1.7479999299906397 -139 967 .7133779723498762 -143 967 .05148322719578705 -148 967 -.20741183930577062 -163 967 .7809457187178963 -180 967 1.0696330779246326 -195 967 -.747805888911069 -211 967 -.015172568148709223 -212 967 .6024916914931715 -229 967 .47786830375437606 -261 967 -.4864950470869321 -263 967 -.9530795234598202 -276 967 -.38004407062139683 -299 967 .6523196284908757 -308 967 -.185125491999167 -316 967 -1.28270161229092 -325 967 .42932823587171304 -340 967 -.7320104616112737 -351 967 .8868475181483144 -363 967 .7096301370231902 -366 967 .5549413076846603 -369 967 -.767913583266547 -370 967 -.9979511139996138 -376 967 -.09130221907532018 -378 967 -.7915764975620173 -384 967 .11272165405637713 -403 967 -.983866218445723 -414 967 -.11089536050694888 -419 967 -.5633194327171994 -424 967 -1.0386099155932667 -427 967 -.305221766259027 -445 967 -.7864154237563883 -449 967 .22229776259533904 -452 967 -1.049555230608298 -467 967 .19718602107030775 -469 967 -.8169728374887294 -478 967 1.0820592036617205 -506 967 .03601999325204408 -512 967 -.9736897987506602 -515 967 -.9829807860094969 -536 967 -.31538516699539093 -540 967 .8781776498303133 -542 967 -.7394319602337391 -548 967 -.9492694194184025 -562 967 .9719315009499684 -582 967 .4545669272330993 -583 967 -.009410236439054143 -586 967 1.0680073564557602 -590 967 -.1443137497104333 -594 967 .8660269816008188 -596 967 -.00594922466044058 -597 967 .344241358645537 -620 967 -.9108855587425948 -621 967 .8148070563699841 -624 967 -.3964565258713503 -632 967 .15423317569692585 -633 967 .4910348190760828 -636 967 -.2793380666746703 -640 967 -1.465278594747951 -647 967 .6997851119949 -663 967 -1.2246858579071844 -669 967 1.0393777596116012 -676 967 .1877278362230757 -695 967 1.238261228835199 -703 967 .7243336975265559 -707 967 .15852433053985432 -712 967 -.9441415952230157 -718 967 -.29678577192232247 -722 967 .11822540824143858 -738 967 -.3336548173407624 -740 967 -1.832069867892459 -746 967 -.5274872831876477 -748 967 .9928012190300559 -759 967 -.7333768011355974 -761 967 -.6726499208539461 -762 967 -.4533712427029244 -763 967 -.6511028427618306 -769 967 .4099853025419055 -781 967 -.9840614626839782 -823 967 -.05612411746480041 -828 967 -.5272424857699312 -830 967 .21849792220845624 -841 967 -.7964669831372391 -843 967 1.217721412117434 -845 967 -1.2248063084112044 -849 967 1.5175380631473665 -858 967 .8984129837833496 -872 967 -1.6684565457485547 -884 967 .33363163255735157 -917 967 -.8227636394032032 -945 967 -.8271443206176832 -947 967 -.7269903188604497 -965 967 1.5057506797065645 -978 967 1.424185383275193 -985 967 -.5616082467555014 -996 967 -1.438818970176586 -14 968 .2521047067397629 -33 968 -.4576905930168994 -46 968 -.4117138736431712 -52 968 -.7266459222829933 -64 968 -1.1143673163391539 -65 968 -.14160864070333248 -88 968 -.19818619985590905 -94 968 .7739010071881893 -106 968 .8846136061051323 -111 968 -.044676332089837484 -123 968 -.0004517774283132603 -124 968 -.27089708867849305 -135 968 .5626279584169017 -181 968 .41025152401406045 -185 968 -.318058201920331 -190 968 -.6849542141315086 -197 968 1.7396884434225321 -212 968 .03074581649939842 -221 968 -1.9176274995497176 -228 968 -.13246261165133388 -236 968 -.26368840075952277 -243 968 -.27889095424711663 -246 968 -1.0437288508855405 -253 968 .13438477348561612 -259 968 -.6363812751488545 -264 968 -.39293516781602505 -270 968 -.7423273577862219 -288 968 -.8631323046044207 -289 968 -1.471543631716037 -293 968 .05371665892653146 -304 968 -.0942424885385218 -333 968 1.4990865419450061 -346 968 -.11814935836912104 -348 968 -.415304493577092 -350 968 -.0858202593956374 -360 968 -.42955178676643635 -361 968 1.133544861192072 -362 968 1.1744270555994558 -368 968 1.5295568366985794 -371 968 .8768750645805836 -388 968 .6938488747388827 -399 968 -.08247194504431403 -400 968 .5147686126230008 -413 968 -.9769056983813864 -414 968 .251508981426773 -423 968 .07052457324717103 -432 968 .22365854103521246 -438 968 -.12227813030330584 -447 968 .2549410839948443 -455 968 -1.3966337273695553 -460 968 .9345751537816032 -471 968 .05190908139327364 -476 968 .5731780017173977 -478 968 .021171018862432153 -497 968 -.9840153414120141 -498 968 -.4029820378888832 -504 968 -.7355008776750586 -507 968 .19456005913055685 -521 968 -.9462362498171257 -524 968 .38428811258244927 -538 968 .14455274244121127 -540 968 -.6806929907918009 -543 968 .22498099059334034 -555 968 .044517954851894984 -557 968 -.49160527099233 -563 968 .057089079546231845 -571 968 -.4926072897387992 -574 968 -.09052567080752474 -577 968 -.3549605717442761 -588 968 -.004815299958752503 -592 968 1.0200880901318687 -598 968 -.9707838639601822 -615 968 .8076058583691523 -618 968 .9969083223239757 -621 968 .6195711403433344 -625 968 .5366003425101437 -626 968 -.3679516697158219 -630 968 .6316220998625349 -638 968 1.398632757585631 -640 968 .43449695607952227 -659 968 -.29725884981069717 -673 968 -.8879967119208676 -692 968 -.3932537728951678 -709 968 -.8142774384033713 -713 968 -.12390194625225569 -719 968 .27957285354582173 -759 968 .013627678859028642 -770 968 .6632323173346855 -780 968 .17950697024078277 -795 968 -.05633006439657977 -797 968 -.5245015298417857 -798 968 -.1814510618863161 -801 968 -1.4599474821702227 -805 968 .7214711894567299 -824 968 -.238918284639892 -855 968 -.9307613470932319 -858 968 -.19497647148321873 -865 968 1.0831913006676372 -866 968 -.165182413889619 -874 968 -1.704130506185046 -876 968 .12507319491169883 -878 968 -1.2540557911695989 -888 968 .01651217935768387 -893 968 1.2303848073279768 -897 968 .44172503752987596 -898 968 .14712230450083638 -903 968 .2974995116745826 -906 968 -.24763157533395658 -909 968 .21895727933032424 -911 968 -.5762928628802808 -912 968 .9240029235657004 -925 968 1.173522911504348 -931 968 .2080979330027038 -941 968 -.44910318006420424 -948 968 -.4191128309555956 -966 968 -.0890845754051186 -968 968 1.3575907456404925 -971 968 1.4296066258903648 -981 968 -.806171948031516 -982 968 -.9203086440621141 -19 969 .5517364106195574 -43 969 -2.3730911281282596 -93 969 -.1516561517148057 -98 969 -.16394163150850408 -109 969 2.5827141582053343 -136 969 1.963247677524661 -158 969 -1.8765527290456416 -169 969 -.9348369447705096 -171 969 -1.0366130138779366 -187 969 -.22419242925507613 -193 969 -1.1073980422769751 -195 969 -.09962352941939005 -202 969 1.0252089861368787 -209 969 -2.4623989825115244 -238 969 .9571652670919977 -246 969 .4004426313423601 -288 969 .8841876871194886 -295 969 .3320670847420049 -297 969 .42668747624925996 -312 969 .9849251771777484 -313 969 -1.2123256559849485 -314 969 .3015559181433064 -330 969 1.8341090774958537 -337 969 1.7264339541797322 -340 969 -.8289522220373253 -341 969 -.5211203230391562 -342 969 -.9012396447063944 -347 969 -.22702570633791097 -357 969 .16734694890323748 -376 969 2.228305167452825 -377 969 .8342168314469229 -391 969 .20058718246313467 -406 969 1.6878934806297383 -407 969 1.0698913067725384 -416 969 .6624147958055262 -418 969 -1.1077684996709083 -429 969 1.1077396327535953 -437 969 -.5001302711623324 -444 969 -1.457868574158813 -460 969 .5509468096386486 -462 969 .6753858561709678 -467 969 -.0468202955770294 -482 969 -1.1807476199066085 -484 969 -1.3076346517805844 -485 969 -.21679564524818007 -489 969 .5286242495206551 -496 969 .06669694089694594 -504 969 .7157043576234544 -506 969 .835011147549519 -513 969 .21198817018686975 -517 969 -.12195253053241212 -526 969 -.6420255026074442 -546 969 .256809070565892 -551 969 .8153168268859677 -562 969 -.8371493211632387 -563 969 -.7355016552790483 -585 969 -1.220060567930197 -598 969 1.4374348469999974 -599 969 1.8592353633269318 -600 969 .7176087623881702 -612 969 .6130621692492985 -635 969 1.1571237050828618 -643 969 -1.476398984308065 -657 969 .05377951441370844 -658 969 -1.2581932201348833 -665 969 .4436847518544802 -667 969 .4574160946191572 -671 969 .5906293217500912 -688 969 -1.2343973312657908 -690 969 .6221363306881763 -691 969 1.0657641232154496 -696 969 -.62994575170602 -706 969 -.8185746008556676 -709 969 .263791503327614 -715 969 .4542024621015568 -724 969 -1.1082749505051512 -725 969 -.4785221121877654 -750 969 2.992120933125507 -760 969 -.10516247637258289 -763 969 -.8635696844771221 -772 969 -.34176830277355474 -793 969 1.0299072601479946 -795 969 -.31755219604406343 -797 969 .6077360669262932 -808 969 -3.204082532477678 -817 969 -1.977383933543739 -832 969 .6473448501358539 -833 969 1.4885141261168413 -843 969 .11718404732264892 -849 969 1.4784095840900606 -854 969 .39872165678828275 -867 969 1.4000746705582083 -871 969 .6812814645986409 -904 969 .6843001364863098 -905 969 -1.1108088108432808 -913 969 .9637691645270092 -933 969 -1.049695711903853 -936 969 -2.3346735004620567 -963 969 .5456382976740732 -969 969 1.541673035055846 -983 969 .1719307158943526 -991 969 -.014518043669175112 -996 969 -1.9869664099776465 -33 970 .0870617715331568 -35 970 .14393160419523376 -46 970 .7330499415392556 -47 970 -.6602376730358777 -62 970 .8755417265666942 -66 970 .5720263620374543 -92 970 -1.8621310830596551 -102 970 -.15229223728493543 -106 970 .8647117965282859 -117 970 1.0066887162236722 -120 970 .6861173820834995 -128 970 1.3417449449808274 -134 970 -.28057819368491904 -143 970 -.6804258973791987 -150 970 -1.0281138435459871 -166 970 -.631294642076455 -172 970 1.1443621295555113 -173 970 -.6169961371894572 -177 970 1.4007084210556606 -192 970 -.3088453239100438 -195 970 -.20783074434693147 -201 970 .7990302850952107 -218 970 .7529128635551157 -228 970 -.2568477624033575 -231 970 -.5265559919799335 -233 970 .5463619930997419 -235 970 .42666460497718883 -243 970 1.0310241734855168 -247 970 -.7620793134462732 -257 970 .8640564546173544 -269 970 -.0038900626231195903 -275 970 -.17238682511028056 -276 970 .19135070893899725 -291 970 -.10151794525190444 -296 970 -.03495892420634479 -311 970 .5888739017591423 -325 970 -1.2237057459686016 -326 970 2.203674558181767 -353 970 -.4731979478298157 -366 970 1.6325476195130793 -373 970 .6603756322285685 -375 970 1.187123175826984 -376 970 -2.680384573331926 -382 970 .49724655481357366 -412 970 -.0460863208038922 -413 970 -.13006350892792617 -416 970 -.6509767092287947 -428 970 -.5124138184888469 -439 970 -.32028578866314494 -450 970 2.5060503831786343 -457 970 -.5290145903963209 -467 970 .5166104602833503 -470 970 1.3387827250472693 -486 970 .43276684472863963 -504 970 -1.6728873860378042 -526 970 1.1658927922019457 -534 970 -1.4655157103703282 -557 970 -1.3165058986644935 -560 970 -.4540016265380431 -564 970 2.9868632673010906 -567 970 .533032688074149 -568 970 -2.344144012395605 -583 970 -.2569083179472322 -604 970 -1.3042821467013843 -606 970 -.8871082700747123 -629 970 -.7355347682225961 -638 970 .5105388021284755 -639 970 .3782188670119486 -642 970 -1.723889476660799 -649 970 .8152072063125848 -653 970 -.28402397817059144 -664 970 .3552948972400301 -669 970 .5302518818883779 -674 970 1.1487875625471173 -695 970 .2785871966300861 -698 970 1.1220315840166333 -710 970 .07237271058305345 -731 970 .07018562043552447 -739 970 -1.0468569698084427 -740 970 1.5155501133568416 -750 970 -1.2626015528939476 -753 970 -1.0197165932484598 -761 970 .5553784044768796 -774 970 .13052202591383405 -775 970 .3715325007826744 -784 970 .806563161906385 -790 970 .45857697964347005 -810 970 -.7311585339989148 -811 970 -1.7658054510172283 -813 970 -1.5816256311152814 -814 970 -.058234362696435726 -819 970 1.3096433284160125 -826 970 -.5155910620609438 -830 970 -.216940626068783 -832 970 -.5716588250262862 -836 970 -.445056274271362 -843 970 .4978212395522804 -856 970 1.2903943043108617 -878 970 -1.7644276735567075 -882 970 -.7102649502827244 -900 970 1.0699964785267146 -927 970 -.24505936687222965 -943 970 -.24143193906138935 -954 970 -.2807310183767699 -965 970 -.2602883636490887 -15 971 -1.0211167473798297 -32 971 -1.2683520310300367 -42 971 .17762793731675783 -44 971 -.4933851630740033 -54 971 1.8570571969822876 -56 971 -1.600243040353811 -63 971 -.4619393123041419 -71 971 -.3702359158471565 -74 971 1.1783518564394286 -87 971 .16169357959884523 -107 971 -.6603548293793946 -118 971 -.009466142130706706 -124 971 .7368763602494374 -127 971 -.05820771680953943 -137 971 2.541524416287894 -139 971 1.391839110900328 -148 971 1.0023284452477514 -154 971 -.7540838195665125 -159 971 .17877943600715612 -172 971 .8906505333448352 -218 971 -1.1928941488131772 -219 971 -.3585192384248415 -234 971 2.204536476382141 -239 971 -1.8197375484549343 -247 971 .4861863316481572 -252 971 -.6455315091063895 -261 971 -1.3630359014441378 -276 971 2.408447869041497 -293 971 .5885367233049479 -300 971 .5066025253261346 -310 971 1.7911114257425673 -320 971 -.9419804180549594 -323 971 .33811868956132024 -328 971 .913906411923667 -337 971 .6494158713946961 -343 971 -.8884751767531778 -348 971 -.6858889477729141 -355 971 .9945176009803824 -360 971 .7855662219957901 -363 971 -1.2870666746581076 -369 971 .26408984717596207 -374 971 -.6805211272979199 -385 971 -1.3177360658921347 -401 971 -2.261467389752863 -404 971 .8474043498195555 -406 971 .19550693031941938 -416 971 .7240320088782536 -428 971 .5997486841270456 -455 971 -.24941765096978424 -457 971 .34088720665135264 -460 971 -1.335501770332721 -484 971 .08085455402465727 -494 971 -1.3495117489126494 -526 971 -.9509860511281899 -527 971 .9051488982979827 -529 971 -.2742692785313635 -539 971 .1008649599273887 -545 971 -1.820519025923454 -565 971 .3755440024333354 -581 971 -.8223244197693864 -605 971 -1.8203214555610703 -612 971 .5944277544819236 -620 971 1.1180102496765534 -624 971 1.9098608621382007 -631 971 -2.0468634686560896 -636 971 .33805840880877414 -650 971 -.10814522984253662 -674 971 .9683332744910635 -680 971 .5143036094643737 -688 971 1.646090218818161 -693 971 1.398656436712762 -696 971 .6383696127763089 -697 971 1.8050260504694933 -739 971 -1.360317014264654 -746 971 .5908186713201737 -756 971 2.816716951274494 -759 971 -.8540728920169138 -768 971 -.579930440178522 -779 971 -.48368880840055206 -782 971 -.8984727406021233 -784 971 -.26035898402879254 -789 971 -1.2294213296846703 -796 971 -1.6508278248589603 -806 971 .44289625903331964 -807 971 .6980818621072192 -809 971 -1.1490623795499637 -816 971 1.5377544593405272 -821 971 -.3966251900309314 -822 971 -.39014298456977614 -825 971 2.156944843101753 -827 971 .42292118344286234 -830 971 .24940047587205874 -834 971 -.16610404498374115 -836 971 .09419664977450354 -864 971 -3.137846527939139 -867 971 -1.3534409626272972 -870 971 .7003216756457515 -887 971 1.3548254206482746 -890 971 1.1506522400030077 -906 971 -2.340082780180654 -910 971 .7940400312231777 -913 971 .34066114789819535 -924 971 1.6967004860369082 -925 971 -.03224318917536953 -986 971 -.8791825081362368 -6 972 1.6379479969552444 -13 972 .5123076084872304 -16 972 -.06838067817266713 -35 972 1.2056952773054688 -38 972 -.5002819525698907 -69 972 1.3638588457561307 -74 972 -1.6776433925800915 -96 972 .9292069497136228 -131 972 -1.8389262950508969 -183 972 -3.8391047994124636 -189 972 .584778584274509 -198 972 .23036558636090554 -206 972 -3.252673975956852 -211 972 1.7510922120913133 -237 972 -1.2510634617514798 -239 972 2.9033974334673593 -248 972 1.740222612726649 -253 972 1.4179995602958606 -254 972 .6106366531640732 -274 972 .6476026549469089 -308 972 -.12947565473998746 -318 972 .56443668311484 -323 972 -.5557656778110434 -329 972 -1.396624163488922 -335 972 .979120085401388 -342 972 .044500837096493294 -354 972 -3.129410169756098 -355 972 .14348345930060996 -361 972 -.32316700810003335 -367 972 .9330735726371197 -368 972 1.5321390498788592 -371 972 -.023160618435114327 -381 972 -1.3928551166896759 -402 972 1.3126718715211112 -409 972 -.7840688108343772 -410 972 1.3539568597897378 -421 972 1.208450846493827 -429 972 .2128272116858778 -445 972 .9510159882103622 -450 972 -.07780931293563477 -456 972 -1.7509922403739138 -457 972 -.3735209271412539 -461 972 -1.6289997371529226 -471 972 .9839404463599545 -473 972 -3.5049466072397975 -479 972 2.8592121401561625 -489 972 -.5742912605218145 -491 972 2.9231026719501543 -496 972 .13343862563880196 -500 972 -1.3602745403271448 -516 972 .6910148571745529 -527 972 -.7535497306271566 -538 972 1.255812492925309 -543 972 -.8570167327014115 -560 972 -.911386609362198 -564 972 2.1280389585324455 -584 972 -.3893355446809291 -589 972 -1.7167854859366776 -600 972 -2.216824791815023 -630 972 -2.1584543347653975 -641 972 -.7417752621063233 -642 972 -.40325716562149505 -643 972 .9889027508690114 -658 972 -2.3429494833650937 -697 972 .7041465464563664 -700 972 -1.645630601376019 -710 972 -.9614970265309455 -733 972 -1.5529054017671706 -743 972 .15427648026232477 -748 972 -4.151614481308827 -756 972 -2.062010885133251 -764 972 .3313301815173382 -768 972 .39780394818075904 -779 972 .19086092205844557 -787 972 1.260652293786198 -807 972 .5953546127060904 -811 972 -1.0797646921799742 -814 972 -.5529206852016058 -833 972 -.6156434751179145 -849 972 .0035635288708631262 -856 972 -.06636948232746818 -874 972 .5822008413841783 -879 972 -1.9183604779912116 -884 972 -.20617212573268234 -888 972 -1.447577606633689 -900 972 1.880147347872235 -903 972 -2.611357002592952 -905 972 -.9253683596204301 -910 972 -1.6688669730994237 -918 972 -.22865694239834583 -920 972 .9883988006104288 -930 972 .3949403205073854 -946 972 -.391235412179267 -960 972 -1.3286377793592676 -981 972 -.7267682729099568 -993 972 2.257861787123809 -995 972 -2.9015382574526094 -998 972 1.5172225641457253 -4 973 -.3852088934329899 -20 973 -.15597040383187993 -35 973 -.06750233940967207 -45 973 -.8498256378729568 -51 973 .5665129033819457 -53 973 1.9109465041426585 -56 973 .26430396101752496 -80 973 1.6676274037529562 -82 973 -1.526621008291853 -83 973 -3.0497195521886535 -87 973 .8205249224401905 -88 973 -1.860933613781362 -100 973 -1.812352666709609 -108 973 -2.4965683759254462 -123 973 -1.6248403355653422 -132 973 1.0584375041946514 -138 973 1.397342143787067 -141 973 -2.093136480220959 -146 973 1.8477829766613518 -148 973 1.6869718298726566 -159 973 2.174081085720857 -162 973 .43782813298723416 -168 973 .6679682542065883 -171 973 .8656139765694462 -187 973 1.4095627725421647 -191 973 1.1361822011908953 -192 973 1.107287667000133 -217 973 -1.9523190200856329 -222 973 .954782827374922 -224 973 .8211947005855307 -241 973 1.4508873894596304 -247 973 .11357970930794112 -262 973 -2.4206706195922596 -297 973 2.998934930401232 -300 973 -.5554033242620803 -321 973 .4023466093629943 -330 973 .4916727064594947 -334 973 -.43631612841198086 -343 973 1.9816636896630997 -368 973 3.429501731859397 -428 973 -.24363008437484465 -438 973 1.686534134812295 -450 973 1.190773487257241 -460 973 1.7194707880662572 -479 973 2.148889606228433 -492 973 -1.464772004964473 -500 973 .3391410414285857 -501 973 -1.6745088433067867 -515 973 -1.4759207640467362 -526 973 -.20384057728407573 -528 973 -1.096693561897783 -542 973 -1.5605978834672927 -548 973 .5040643741459253 -559 973 2.1524889208367677 -564 973 .37548937457003667 -572 973 -.03050424088606421 -575 973 -3.39466115385301 -601 973 2.4391926352128395 -624 973 -1.2955326257725712 -643 973 -.7986327925688371 -651 973 -.055431262573519186 -660 973 -.7735560622601597 -676 973 -.4543775430905383 -702 973 -.4563887111736768 -707 973 1.7736376364126227 -711 973 .6115196263043134 -736 973 -1.8049411213967321 -757 973 .37200495464010974 -787 973 2.4749384326657013 -790 973 1.5258809231707946 -792 973 .4287199767593817 -794 973 .24712730180281095 -809 973 -.3624148855351096 -816 973 3.0175421562903004 -828 973 -1.4745776463182612 -843 973 -.10891705724024364 -849 973 3.53079875816336 -853 973 -2.981198120904618 -855 973 -1.6604090613386615 -856 973 .9359781271913881 -859 973 1.4039364199994648 -860 973 .5152209380940393 -862 973 -.973600321606218 -864 973 -.7440083330883904 -872 973 -1.8119995124242885 -888 973 -1.8284331949263064 -904 973 .896806141608621 -905 973 -3.1544398986788034 -908 973 -1.9420956719971303 -920 973 -.9495345333298741 -930 973 2.228878435443916 -946 973 -.1319944008133977 -954 973 2.0369014348096806 -962 973 -2.797853957421638 -967 973 1.6396528173162954 -974 973 -.14665011584322823 -976 973 -2.24478668092562 -978 973 -.2487804001886946 -990 973 1.6577544454319249 -9 974 -1.2431737752055345 -10 974 -.6439132177591196 -18 974 -1.6305602499147713 -28 974 -.21708190907307046 -40 974 -.8499803006673491 -60 974 -.3185135918273172 -62 974 -.04715683320484357 -67 974 .3852289468744523 -69 974 .7645547421538599 -85 974 -.12800595996432645 -100 974 -.7700118960171091 -106 974 1.0984988848763457 -136 974 .6903423253581 -139 974 .823934051771446 -160 974 1.8762109234554898 -161 974 -.2485572596306519 -187 974 -.9937940339048901 -190 974 -.3299629741197234 -215 974 1.1205556621367 -247 974 -.8392328593110074 -251 974 .8919026288371364 -252 974 -.40928819922219484 -254 974 -.5097669705504257 -259 974 -.14830388314060303 -266 974 -.6747887050462296 -285 974 -.4715177502161425 -291 974 .9917518850709907 -296 974 -1.1166530629296043 -300 974 .40778685615560345 -304 974 -.4494371870629779 -314 974 -.28695338952967925 -323 974 .6190767714510145 -334 974 .15112766523505977 -349 974 1.3691778053577546 -362 974 -1.2149276622876972 -371 974 .807060775172228 -384 974 .7940541012882397 -427 974 .16549951082648298 -437 974 -.0767046241523022 -459 974 -.23565673618440758 -461 974 -.3306444968501937 -462 974 -.789641646740164 -466 974 -.9215550387417929 -470 974 -.22276377593102506 -473 974 -.7410401610298769 -479 974 .09829787715072524 -488 974 -.9126404911605878 -493 974 .3585538563265806 -500 974 -.3470166348384975 -512 974 1.1725734718865304 -517 974 -.03340630014849459 -523 974 -.19364865910021062 -531 974 -1.0984080501983198 -553 974 .3772264486087794 -554 974 .052521427756477404 -562 974 -.11187318880521954 -590 974 .08490164512077597 -595 974 .356108213045735 -624 974 -.9454562224487038 -655 974 .008980093898621935 -669 974 -.28315781384238187 -687 974 .21953488393896117 -695 974 .2553720645357617 -701 974 -.5821008868833544 -702 974 -.13655692308995165 -710 974 .09357857429686904 -715 974 -1.1732875070472712 -719 974 .11533196547401697 -725 974 -.6003131467989972 -727 974 -.3354691286479397 -738 974 -.04338216987974666 -773 974 -.18966621156129146 -800 974 -1.1330187634708926 -825 974 .010452999136156407 -829 974 -.4245889728246968 -838 974 .25904627323519247 -866 974 1.489557736001039 -869 974 -.5270399147677486 -870 974 .40212755736558703 -882 974 .6930240727704918 -899 974 -.6153723846299537 -905 974 -.26223007357848477 -908 974 -.27950243711375533 -926 974 -.05406178212423628 -935 974 .22496182600736567 -940 974 .4203106036700541 -948 974 .10390873296169095 -951 974 -.6831590494565579 -954 974 .37191114757817234 -984 974 -.843198626864844 -1 975 -.9644410743171055 -4 975 .33529095670825476 -12 975 .36844410088440094 -15 975 .7609529562983066 -24 975 .7714743020617042 -33 975 1.2681738683055421 -48 975 1.8680891877348211 -69 975 -1.2699999106576936 -89 975 -1.5188779511997001 -115 975 -1.224396921989527 -119 975 .32792940845923635 -132 975 -1.1933776378526553 -135 975 .007527487947666223 -148 975 .5342349334512014 -153 975 1.2224084763434668 -154 975 -.570890406785475 -169 975 -1.0954663083861278 -184 975 -1.4406683087406327 -201 975 -1.4033735234615206 -210 975 -.9069263201899603 -225 975 .2504428693235974 -233 975 1.025945490068521 -239 975 -.02269640940926508 -247 975 .5597794720539151 -252 975 .06110817648669309 -266 975 .4276756987976137 -271 975 -2.5993627880732397 -279 975 1.2643592406076734 -290 975 .022025775169217485 -293 975 -.12546515215204568 -307 975 -.7395166012889338 -309 975 .6965239348225462 -319 975 .3123251645285302 -326 975 .027135908404253548 -333 975 -.17411850736595674 -334 975 -1.1135470015004532 -345 975 .2861237588230815 -358 975 -.20255531158765006 -360 975 3.18577361912937 -413 975 -2.1196144657211926 -414 975 -.17787160177040576 -419 975 .6507740425762355 -421 975 .3573384428831628 -431 975 1.312079253609386 -446 975 2.358450829806382 -454 975 -.2618663252239051 -457 975 -.8239799695261167 -461 975 -1.8973604326005673 -479 975 -.35100297027994887 -495 975 -1.682376333904685 -498 975 .42468811182708427 -503 975 -1.0819641985115553 -519 975 1.5917949485350669 -520 975 -.46303613771824487 -532 975 .060995849447430334 -542 975 1.335991438130722 -545 975 .8066741465045363 -561 975 -.5955902951775949 -563 975 .2603008236083628 -575 975 -.8094185911574009 -588 975 .22872870593021544 -592 975 1.0893374970607512 -597 975 -.45869186656531413 -602 975 -.35721131527535005 -619 975 -.16110842933461145 -628 975 -.21046211969030815 -630 975 -1.1717240947188352 -636 975 1.600060920593969 -642 975 .9550854317908758 -651 975 1.4235960362713238 -675 975 .624483728398201 -682 975 .37062990611391655 -684 975 -.06721980563616961 -701 975 1.0720285804269232 -703 975 -.7500638045480177 -704 975 -.41006226043224864 -716 975 1.037588773119723 -731 975 -.09893612067166532 -740 975 .8874306343191548 -819 975 -.06124280021844161 -846 975 -.3624837231875803 -849 975 -1.5300472846262398 -855 975 -1.0010268180859319 -864 975 .09146978260588823 -866 975 -.6353698914175275 -884 975 -.7613603843054926 -885 975 1.1236853422485469 -913 975 -1.4454865425760206 -914 975 -1.2374987707146239 -919 975 -.5263552125788331 -922 975 -.369588066332163 -923 975 .7754375941661383 -937 975 .07737903291799911 -947 975 1.3683294163137716 -948 975 -.19033193248332783 -953 975 -2.2658136540640084 -962 975 1.4142221317606816 -978 975 -.8437290235744542 -983 975 -1.9292023734342427 -995 975 -.01055514682901773 -5 976 .20131482433998488 -8 976 .6634574890962808 -11 976 .3814873600712358 -15 976 -.8628953427598857 -26 976 .24661621946081366 -37 976 .9325830766275368 -44 976 .8654662088057632 -61 976 -.5113669899165931 -70 976 -.39299365233130323 -73 976 -.8046881444469811 -80 976 -1.810907897671486 -84 976 .4061074996751858 -86 976 -.8851101602411644 -139 976 -.7406079967794631 -142 976 .005589349240168018 -144 976 1.0522407985585838 -146 976 .2750053676216242 -171 976 1.9478126806715772 -183 976 .39547768745284384 -190 976 .9224326486168825 -197 976 2.057794861907923 -206 976 .08882852574705286 -222 976 .8421836909958971 -228 976 .6104601628768973 -231 976 .5772927226345548 -237 976 -.8427677148886479 -251 976 1.8000748101993378 -252 976 -.06544931326861571 -261 976 .27597784939015507 -267 976 .09078564307220927 -271 976 1.1595512443234284 -277 976 -1.1550647293981653 -283 976 -.8326857230621941 -318 976 .03128172331710106 -325 976 -.6322128369099773 -328 976 .4004567139491191 -335 976 -.1758511790558974 -358 976 -.3161998847738593 -373 976 .9635968392485409 -393 976 -1.6539098493701516 -407 976 -.44026361440923173 -410 976 .3005694720584011 -422 976 .2303369356733892 -435 976 .12413926752858834 -440 976 .12687770660414935 -454 976 1.5252406397735254 -477 976 1.9171059921574298 -482 976 -.3274895596281232 -489 976 .6297075322637595 -512 976 .06614525733256198 -532 976 1.2661988871303962 -536 976 .044816768645217483 -539 976 .17568814539327507 -547 976 -1.066984743691308 -549 976 .8651296466082263 -573 976 -.9624626162923103 -575 976 1.1560692423506647 -576 976 -.2129846444550601 -577 976 .8361701633997008 -606 976 .17656090620776443 -610 976 .918295953036879 -616 976 -.2643158922910444 -618 976 2.037880138144123 -620 976 -.6400641240868631 -621 976 -.28593335497255906 -624 976 -1.0176787617790202 -626 976 .29357440241799604 -628 976 -.3361437081531303 -642 976 -1.3540096777637636 -663 976 .1836581151296979 -689 976 -.422127127662856 -694 976 1.7277993503283104 -700 976 -.22779212125065218 -709 976 -.20375023036783213 -711 976 -.03451639990624525 -712 976 1.5461138525439688 -727 976 -.25434497862393657 -732 976 .3947127046481598 -733 976 .9766009062513078 -737 976 -.3071501886300004 -740 976 -.06662472799196234 -747 976 .37860912723542106 -754 976 -.11743160412479015 -756 976 .6379072915406119 -758 976 .6347991245396414 -760 976 .8377498547271086 -769 976 .09887685668537033 -775 976 -.24936070679293743 -788 976 1.5407193087006652 -799 976 -.2286059463413299 -819 976 1.1272170012462654 -825 976 1.3596443526365611 -830 976 1.0816153370825556 -837 976 .05023750935686522 -840 976 -.1039820934090639 -846 976 .8092764012873119 -852 976 -.5264509584752499 -872 976 -.2566680564889917 -874 976 -.5659390276012163 -878 976 .35821666975225425 -883 976 -.5242742447205012 -913 976 .4200327885756188 -916 976 -.18104932904149335 -920 976 .4332724413972892 -921 976 -.147828071107937 -922 976 -.5256449040843706 -928 976 .2625297069134936 -940 976 .37440894283321235 -949 976 .5615166555940079 -961 976 -.48820588249114105 -977 976 -.37253941123161144 -983 976 -.1683972174761053 -984 976 -1.2547999727867487 -999 976 .1477338354327272 -7 977 .04144805728108572 -17 977 -.24467089172763556 -19 977 -.8832470965664744 -50 977 .2983826663000443 -53 977 .6136266298497738 -82 977 -.3994723658926409 -88 977 -.39156280695918355 -92 977 -1.4259508745312146 -94 977 -1.239153350555113 -102 977 1.3371424223375568 -126 977 .3531538279771297 -127 977 1.8179294452835104 -136 977 .7372227359234935 -143 977 -.14970739257806046 -145 977 .5011278159731575 -150 977 -.953520750291958 -163 977 .107431167391504 -164 977 -1.6814443257084004 -170 977 -1.2972939355956146 -205 977 1.3642754677391675 -218 977 -1.3070999711137488 -232 977 .943614844405516 -257 977 1.260127160175876 -275 977 .2100172967445193 -279 977 -.5853971715375057 -282 977 -.726402127397791 -299 977 .047457340620928684 -314 977 1.0748058112518648 -316 977 -1.1853994328955277 -318 977 -.6452155128736737 -332 977 1.2364999647200055 -333 977 1.32338679046855 -350 977 -.19541828564922714 -386 977 -.6553727531695043 -387 977 -.17176175208318153 -388 977 1.3268037045421395 -397 977 -.7044017676361182 -406 977 -1.2157991406906408 -411 977 -.8418946328379476 -416 977 -.5116071459055714 -455 977 -2.61854086886482 -471 977 .7635986704519704 -487 977 .4721455757633967 -492 977 -2.4038966042788568 -508 977 -.8789726972481997 -520 977 .5651160717278966 -554 977 -1.1203199317364552 -555 977 -.7199992967204194 -569 977 -.942141652995533 -575 977 1.2854203131415887 -579 977 .016952905336161422 -586 977 1.3222257671016495 -615 977 -.7022975596974799 -620 977 -1.412522356311925 -638 977 1.2873061245810002 -649 977 -.32941965759751163 -655 977 -.7713149435159783 -681 977 .635116035477546 -684 977 -.09685756062848605 -710 977 1.3812311994670068 -716 977 -2.07870982230721 -718 977 1.7745710076027326 -720 977 -.7982841843249219 -721 977 .27956974682754343 -740 977 .09151060028024327 -744 977 .8052480556452247 -762 977 -.6145090563801566 -781 977 .9980691286368134 -783 977 -.15812070055097976 -791 977 .34249467505664727 -803 977 -.3424750092945111 -825 977 2.0425053471473174 -840 977 .25740618338801646 -848 977 2.3112954874662415 -871 977 -1.935882085714565 -874 977 -2.33965192242545 -883 977 -.0743140808120052 -885 977 -.9498116397675211 -895 977 -.5621857219397395 -906 977 -.11133602604265522 -907 977 .5316773912888405 -911 977 -.11675660974926483 -913 977 2.34315916947991 -924 977 -.010362029026824864 -929 977 -1.646391572792947 -943 977 -1.0919726146590516 -966 977 .642797655174167 -978 977 .7591542391560556 -998 977 1.3409694143418849 -1 978 .4757949610230907 -8 978 -.6064541147915097 -12 978 -1.6239514071219794 -18 978 -.11425187015780265 -24 978 -.29094200953716187 -26 978 -.13214506751996974 -29 978 -.05648609487000675 -53 978 -.38850383948313105 -54 978 -1.373323310617532 -63 978 -.30460441036817665 -64 978 3.0413093610877198 -69 978 -1.7695430945829271 -70 978 -.42934516712157056 -82 978 -1.2485405071272129 -86 978 -.2847321108035388 -91 978 .07845808963460263 -103 978 -.4380065991533556 -106 978 .1157919607921395 -116 978 -.899172640363517 -122 978 -.5038371755401163 -131 978 .11130267922633894 -134 978 1.0641151136741984 -147 978 -1.9012614877114098 -166 978 .7459875952622 -167 978 1.8114805685708812 -180 978 -.29707230039836946 -181 978 -1.436621714934091 -223 978 .2492993996653139 -228 978 .30553203063166234 -241 978 .8566347920490314 -256 978 .9040457566741616 -272 978 -1.4629216141330779 -273 978 .24617280657707308 -279 978 .23910759764731732 -288 978 -.7167103470943887 -290 978 .6949429035830198 -302 978 .8176161536897515 -306 978 .7768473743483904 -319 978 .8687883251089286 -329 978 .1687891688374001 -330 978 .8859954078465033 -340 978 .16726421478871567 -344 978 .9701639716769754 -364 978 1.6168603046304535 -374 978 1.2504553571762347 -375 978 -1.5408588663016372 -376 978 2.0940866261427376 -381 978 .2665642021187392 -386 978 2.5706646753629436 -403 978 -.2529724691929969 -412 978 .6463344271287936 -427 978 .3339184581438537 -430 978 -1.5686896145374825 -436 978 .07644786806418588 -437 978 -.4041173520780238 -446 978 -.2040484201558296 -449 978 2.0216445304920367 -456 978 .45952704967803015 -464 978 .4803368360883037 -467 978 -.4043297352982901 -468 978 -.4102086638477045 -471 978 .2100378368634768 -479 978 -.34748333943659276 -483 978 -.37095591410683126 -492 978 -1.8634255167353 -499 978 .7936546944318299 -506 978 -.3907863970450563 -509 978 .8660770837172723 -510 978 .17147376776064993 -517 978 -.20502192391413793 -536 978 .6237959345504958 -538 978 -.867965924220511 -541 978 2.3093744321747622 -559 978 .7629537524635391 -573 978 -.17004958871575676 -588 978 .6438482021343345 -594 978 -.7131917880783378 -597 978 -.48686382422575186 -602 978 -1.3789790029701123 -609 978 .4792268941572791 -611 978 -1.2292513655774837 -629 978 -.64607618888176 -634 978 2.290818566126771 -636 978 .6517599376690345 -650 978 -1.53699359064491 -662 978 -1.297492477256402 -675 978 -1.8676681026699844 -677 978 .20042407520978153 -679 978 .09340206953505269 -701 978 2.0522936456234855 -712 978 -.8952703044969152 -715 978 1.1922768834548552 -725 978 -.7003676531519727 -752 978 .003774320292402048 -783 978 .17666075719096244 -798 978 -1.1903620182007946 -804 978 -.10149271753859004 -819 978 -2.5312978008867066 -835 978 .6110102479423675 -837 978 -.25016546402656425 -844 978 1.9142712996231455 -874 978 -.6939010589482486 -881 978 1.4684466928748974 -902 978 -.07311563975662863 -915 978 1.2751593091269104 -923 978 -1.2423975613630762 -965 978 1.5030806782565127 -973 978 -.0439495466810133 -979 978 .31468235257695687 -1000 978 1.0799837946086748 -13 979 -.7560797263011805 -18 979 -.022031236600625656 -23 979 -.4873480036535774 -39 979 .12432261854348525 -51 979 -.642052259605183 -56 979 .23353609954744656 -66 979 .5282746532768023 -69 979 -2.518037396577582 -70 979 -1.3331521701994196 -74 979 -.17523540514727717 -106 979 -.4495920208323275 -113 979 -.28357570031408197 -115 979 -.15537214352459922 -135 979 .07702882749906967 -155 979 -.23477110415158614 -186 979 1.4842530948016188 -213 979 .6987405330613501 -223 979 -.44228889328282484 -225 979 -.26070068954929426 -232 979 -.22318362004204412 -246 979 -.7749469272923645 -250 979 .4381791968528628 -260 979 .08030934601965607 -271 979 -.8872411166307459 -297 979 -2.576407746495261 -303 979 -1.8972880213449648 -306 979 1.3981285499582095 -311 979 -.7192029305080407 -316 979 .3126711875617612 -326 979 -.8129975901130344 -353 979 .21663160601183967 -381 979 1.3995940657912442 -385 979 .5801088474724031 -389 979 -.6105565361347838 -396 979 -1.0604302452940022 -398 979 -.23652689499981427 -423 979 -.8199530586188148 -441 979 -1.378614062592124 -457 979 -.9558453316832584 -471 979 -1.6773233585115417 -473 979 .04017643589819675 -484 979 1.9286563945109294 -490 979 .40263731387979645 -493 979 -.2131155359427394 -510 979 -1.9659426069956811 -511 979 -2.292193136179972 -512 979 1.26388301826397 -516 979 -.11377120636736507 -529 979 -.01733421759550094 -545 979 -.3551244875567536 -567 979 1.4039296118167046 -581 979 1.5166349454104495 -584 979 .3803591229776423 -606 979 .3583589662793405 -609 979 -2.282125647618056 -645 979 -.9854855451358429 -653 979 .22662745489628056 -665 979 -2.0130860463183824 -669 979 .526679253606402 -674 979 .6039852148017367 -690 979 2.2973574787520543 -694 979 -.4412616571048734 -701 979 1.6571095301456042 -710 979 .5369587748740972 -715 979 .27028343215146877 -739 979 -.0294875466243155 -781 979 .4781096906116724 -787 979 .5045952004485881 -788 979 .7508966404461778 -795 979 -.017657895033136042 -796 979 -2.5944469120669003 -797 979 -.8660997276323535 -802 979 .6270320710464149 -815 979 1.5815987205634792 -817 979 .4602377648074736 -819 979 -.9906236527430399 -822 979 -.07571290108030486 -824 979 -2.030725008647841 -826 979 2.1948166897876353 -836 979 .5011609747261486 -847 979 -.2171732299148204 -852 979 -.2586994158415763 -885 979 .6623329825027826 -916 979 -.7285817521440423 -928 979 2.131141940698841 -934 979 .5372012849206972 -946 979 -.4588311448896006 -948 979 -.8411290070651373 -962 979 .5890076521142116 -963 979 -.8373844231425414 -964 979 -.23353791275614302 -981 979 -1.4151422804102194 -986 979 .761238407475926 -997 979 -.8687472852893584 -1 980 1.3226242297546293 -9 980 .006483635476057653 -17 980 -1.0896296026010006 -21 980 -.5292824456466405 -26 980 -1.0643939305904269 -48 980 1.669378556027262 -52 980 -.3281341200187437 -56 980 1.677241244570664 -87 980 -.7800060382293472 -90 980 .37997980827895944 -100 980 .34639282119740444 -103 980 .5800424546760254 -110 980 -.8919822900012968 -117 980 -2.612956096956074 -119 980 -.5933062521903723 -123 980 .04224939502049273 -132 980 -.48256356964816377 -159 980 1.9626713846895811 -165 980 .9029693713949523 -177 980 -.7329274631256214 -178 980 1.6397910963037734 -181 980 1.1299653812383033 -190 980 -.41819847856137804 -191 980 .7584036679029597 -208 980 .5461156244198535 -210 980 -.7333925096576334 -212 980 -.08992777644957234 -215 980 -.6869902893057407 -220 980 -1.7215630343002182 -224 980 -.3285508889279595 -247 980 .2676225656515008 -256 980 -1.6427018877113144 -257 980 -1.085783803349314 -258 980 .5767165948322002 -260 980 2.4311853806016956 -284 980 -1.9957669842899746 -287 980 -.05897081640040398 -300 980 -.1240551249365002 -328 980 -1.5371651535725663 -365 980 .6844113102682042 -372 980 1.3785880829732537 -376 980 -.9351496205474886 -389 980 .37846983656640737 -395 980 .3269433167929949 -398 980 -.5588998596908038 -399 980 1.2971001506370206 -400 980 -1.00105784173246 -415 980 -.9909827687100762 -419 980 2.1181091874731206 -429 980 -1.28202966083076 -437 980 .3221916603035617 -438 980 .525799337993771 -453 980 -.5028281770127112 -462 980 .11757697378439641 -464 980 -1.6275038635159673 -470 980 -.12140694069789287 -473 980 -1.3457363160226745 -479 980 .28411577625148754 -488 980 .8602358935892049 -497 980 -1.0454762857514208 -499 980 -.9600732453299334 -520 980 .37951253593683115 -530 980 .49298953267167883 -543 980 .2865107132140635 -555 980 .0497785839405081 -557 980 -.7596179768474226 -563 980 1.0978790563344183 -570 980 -1.0910296585346873 -576 980 -.20062749465324387 -579 980 .12941808408914027 -623 980 .9528388687957297 -662 980 -.9349168231536049 -681 980 1.0120463476730537 -689 980 1.8472502383122904 -698 980 1.1233065860913725 -712 980 1.1190704435731729 -714 980 -.5919291793826733 -720 980 .6937890270170585 -741 980 -.6458606630919724 -744 980 -1.3508577470455305 -755 980 -1.7613704891237643 -765 980 -.04379972002021084 -770 980 -.8230866456082371 -785 980 -.005710942790029878 -789 980 1.2329162438008954 -791 980 .8866565262384898 -813 980 1.7099115061890766 -816 980 -.22957439619100545 -823 980 -.30803868051757893 -833 980 -.9010207923182152 -841 980 1.557074414139053 -845 980 .8904378024452585 -858 980 -.474056816561115 -864 980 -.5726346088124703 -873 980 .8821579060360089 -878 980 -.5014685442804085 -880 980 -1.3063144927909958 -881 980 -1.1945102052965577 -882 980 -1.387377188408493 -890 980 -.7736827383782301 -894 980 2.648748031368351 -900 980 -.7943673833250254 -918 980 -1.1628699900241937 -925 980 .08408724849377669 -929 980 -.5462282901626867 -937 980 -.741680315154572 -940 980 .7380648571237021 -944 980 1.571869091418153 -945 980 -.12210902905562497 -962 980 -2.195411846436519 -967 980 -2.551348732433979 -971 980 .6550150454324275 -985 980 -1.4770550250304495 -990 980 .16716513302640937 -993 980 .00923391082221997 -999 980 1.3090597297822095 -27 981 1.1025822323619745 -35 981 .4031666965321312 -47 981 -.6561117283112123 -61 981 -1.1747411962556955 -68 981 .22654999213145086 -74 981 .017908667510876077 -79 981 1.4655634891364089 -85 981 -.1094919940380566 -115 981 .2106998124069724 -117 981 -.2439460474925268 -125 981 -.21837570006573284 -128 981 -.620511206301464 -154 981 -.40173087240981786 -166 981 1.16811774290736 -170 981 .4887051918653046 -173 981 .021693651924462223 -196 981 -.5394621604674087 -213 981 .04808949467340652 -219 981 .5531036056752427 -231 981 .1021905943917821 -257 981 -.3859978149986686 -268 981 -.7417916048459742 -273 981 .5149382990779134 -277 981 1.4224387290876386 -285 981 .3374480308457385 -295 981 .10053115807097529 -307 981 -.6919311418943458 -310 981 .5340836703443863 -349 981 -.971433639664399 -353 981 -.7849434798598165 -394 981 1.496173998667809 -396 981 -.9225497489986831 -414 981 .4898576714072393 -416 981 .5296989929160466 -425 981 .3492726695368443 -428 981 -.6911963853622218 -450 981 -.8722084967296335 -465 981 -.6185130674015966 -468 981 -1.2733489039534756 -480 981 -.747011517510247 -482 981 -.6109227339916817 -496 981 -.39996371654994345 -504 981 1.1442962434026207 -510 981 -.45237360569326995 -513 981 -.34895175104396636 -544 981 -.4838944316916621 -560 981 .8613567610703213 -561 981 .3354679669106392 -565 981 1.7012498727692937 -572 981 .46103579895884106 -583 981 -.8070946821782149 -588 981 .24297906160672025 -592 981 -1.1852681895565935 -607 981 -.7780424918972563 -608 981 .16569989545139788 -626 981 -.9246557411177672 -630 981 -.5334358517399951 -635 981 .7495775110336675 -643 981 .7857625607925482 -660 981 -.6196383263786943 -662 981 -.2526588085598537 -680 981 .583503083326267 -691 981 -.45578564916026965 -695 981 -.21307523851314747 -699 981 -.41462454699588447 -700 981 .6896171800966376 -717 981 -.8730497702212092 -723 981 .9231184042730013 -738 981 .3621052833747263 -742 981 -.07016231164884301 -761 981 .5176935833514582 -801 981 -.035448616133975784 -805 981 .28824805498157946 -848 981 .5291415263358747 -857 981 .4643597540054494 -872 981 .43155318207895327 -877 981 .6613799641156491 -898 981 -.8303458880797026 -911 981 -.5395871944737574 -912 981 1.9676520296947335 -915 981 .4194411255516615 -916 981 -.7032912293408407 -917 981 -.4035882054169796 -919 981 -.8687959076582132 -936 981 .2350992026444325 -939 981 .476715990293077 -941 981 .13186260487339468 -943 981 .004498084960453133 -969 981 -1.3131727867930383 -996 981 .008570171234434161 -9 982 -.04234705705447024 -11 982 .6118331727779933 -25 982 .716594168092029 -27 982 -1.6865847130191323 -34 982 .25242427089800334 -45 982 .5073914098671874 -46 982 2.403624024988519 -47 982 1.0080811066687063 -59 982 -1.8574984359310778 -71 982 .07615526267387189 -77 982 -2.1093344562375447 -89 982 .18626803673470393 -97 982 1.8770262626297711 -99 982 .6692355581136374 -112 982 .6590977280838132 -127 982 -1.2021202169126322 -158 982 -2.5682713741435403 -166 982 .4414286614343799 -178 982 .03805628621159152 -185 982 .6318865562037778 -189 982 -.29905959485362216 -202 982 -.08669768087840887 -238 982 .47587680665377224 -246 982 -.6786050708033127 -260 982 -1.6161949644587938 -262 982 -1.4303095933861427 -273 982 1.536509383762357 -284 982 1.46438675160488 -335 982 1.1011114784654648 -338 982 1.965815091191347 -357 982 .21317043206192302 -362 982 -.7845308345440443 -375 982 .2966473597264572 -422 982 -1.8365506727089715 -425 982 2.449752114009993 -430 982 .9128345742479665 -447 982 1.2410150803125395 -470 982 -.8767399620502938 -483 982 .9244592444446297 -494 982 .05227218906903337 -497 982 -.1938710746852844 -498 982 .6660366535176262 -502 982 -1.8407249231427518 -515 982 -2.289408160406333 -523 982 .8385186275196603 -527 982 -.1473533543251682 -533 982 -.754329247694857 -536 982 1.281547855524647 -547 982 .6796560058433831 -550 982 -.8063325512464665 -563 982 -.6889518093098655 -574 982 .2517913292808631 -579 982 1.8553692431000632 -592 982 -.10541522699953902 -593 982 -.5564106444203387 -605 982 -.6424707061774612 -609 982 -1.2223109042307483 -613 982 -.4192770341574237 -623 982 -.18609441394056594 -658 982 -1.15012158700277 -660 982 -.8395609860345805 -664 982 .15417726442516372 -671 982 -.7284609110027902 -689 982 -.861781662160692 -723 982 -1.8435067744883642 -728 982 -.2306759381270238 -762 982 -.8365768499627877 -787 982 .6077192165524321 -800 982 .7792996073421097 -806 982 -.6737048646974584 -809 982 -1.1298490976220277 -813 982 -1.2824052111233812 -817 982 -1.962776365172218 -839 982 -.6068436826832435 -862 982 -.08724311271466079 -898 982 -.5005942818686187 -900 982 1.1939080110199973 -901 982 -1.813560254430065 -906 982 -.06014586342056804 -911 982 -.45828483000727827 -929 982 1.6910935017427668 -931 982 -.30133971790400665 -943 982 1.2670669865733166 -946 982 -.4222640094735548 -955 982 1.9935261876918113 -959 982 -1.77370676741808 -960 982 .0923274099969692 -992 982 .628103285086674 -8 983 1.7228674255368222 -21 983 -.8251165678105893 -33 983 -.09405686912049174 -36 983 .8451270269587319 -42 983 -.7692517237121939 -64 983 .6550411747263537 -101 983 -.8161433329673101 -112 983 .7012345241457036 -117 983 .4795788306642532 -135 983 -.5094371884579785 -147 983 -1.0872747066571293 -155 983 -.6271360305005962 -168 983 -.3356206723153603 -176 983 -.6702619181464289 -177 983 -2.5095600944090237 -181 983 -1.7095389264611685 -191 983 -.6749828617447552 -202 983 -.42727918990412117 -221 983 .5150037659161192 -234 983 .6380724370636881 -252 983 -1.0756997560871082 -261 983 -1.4888485939408984 -262 983 .2515965283607251 -264 983 -.25233499454087477 -268 983 1.43294178375305 -284 983 .44765496997271775 -293 983 1.2951906153585493 -300 983 .45884095031642463 -307 983 -1.2947802082258746 -327 983 .10492053651485495 -329 983 .42065035721053856 -335 983 -.1506234406000181 -336 983 -1.0768890088285659 -343 983 -1.3320174035536787 -346 983 -.3587122027039993 -361 983 -.7383010485831789 -383 983 -1.0862469060890627 -428 983 1.207022514479015 -444 983 -2.002082077911241 -452 983 .23102100848073465 -455 983 .35022906203743637 -460 983 .04979000043536515 -472 983 -.019540912246349365 -482 983 -2.0728033468468094 -490 983 .594498128397702 -492 983 .2661460296275237 -498 983 -.6741190893185591 -508 983 -.2875238727960702 -521 983 .9614021371402897 -523 983 -.7690041362238538 -527 983 .3122832428170303 -541 983 .7892766202090523 -546 983 -.10824175530195401 -556 983 1.217318801910588 -559 983 .3166732067584187 -564 983 .14379180863143154 -583 983 -.9834643222884534 -588 983 1.0930748556565142 -597 983 1.1284469292450865 -611 983 -1.2556748069500623 -612 983 1.331963758330278 -622 983 -.2882356705034393 -627 983 2.3199900330018868 -629 983 -.7294026338315385 -633 983 .8138185562520318 -642 983 .222180859538189 -645 983 -1.3704473311136256 -647 983 -.2066404507037626 -674 983 1.3107785785941257 -699 983 .7597054255249089 -726 983 1.7512766689033379 -729 983 -.21533539854174727 -734 983 -1.4530665601415202 -743 983 .8583527638345964 -749 983 -.4164081263750615 -750 983 1.291658336629484 -762 983 -.997537104601331 -780 983 -.836695078955202 -796 983 -1.5919786443998387 -801 983 -.5776859267064649 -806 983 .43226101873071254 -807 983 -.0770847475433633 -823 983 .6072194237440991 -828 983 -1.4367049730263355 -837 983 -.7831785568507317 -846 983 1.1739990174796664 -847 983 -.7545873561655799 -851 983 -1.2102577964179484 -859 983 -1.0731680291696946 -868 983 -.9560021307259916 -871 983 -.2627160879585 -900 983 -.590055493843542 -902 983 .891714489259005 -903 983 .5616073361007257 -913 983 -.2840132308125767 -915 983 .35875006979905233 -916 983 -.8698417667085018 -918 983 -.08544844308115025 -920 983 -.8164477881702449 -927 983 -2.254333932081352 -932 983 -.16381885481311687 -942 983 -.8954449343586622 -962 983 .5496425215264266 -973 983 1.7644628480037925 -986 983 1.048985325258623 -997 983 -.816940561068502 -9 984 -2.041433885360236 -10 984 -.7093310040948901 -23 984 1.2964437641609607 -34 984 2.1722927522241093 -37 984 -.10637391054267983 -39 984 -.11527908917466143 -58 984 1.264866417633314 -81 984 .10073165664101948 -82 984 .2693408950079199 -94 984 -1.680020119000657 -117 984 -2.2252856848096054 -119 984 2.677095890276617 -124 984 -.2919150145732415 -135 984 -1.52568183804878 -145 984 -.6039844922488838 -151 984 -2.444392464189187 -180 984 1.401809092867224 -202 984 .4114045965415266 -210 984 1.9328892294319753 -212 984 2.5325635412522995 -224 984 1.3502606266328903 -229 984 .3353337925165326 -233 984 -.3608942255343654 -242 984 2.84629546865843 -267 984 1.6294988678551985 -276 984 .9086267329948613 -282 984 -2.139115891810876 -284 984 -.7690068519657471 -288 984 .9205261530372786 -294 984 1.3670648410163349 -314 984 .5950353846759249 -325 984 -.18488720191603858 -330 984 1.8074295597917978 -342 984 -1.2957772620919363 -345 984 1.0133131343195756 -346 984 1.0701516346350037 -351 984 -.901675521310783 -358 984 2.5010906688167096 -360 984 -.8267750489018816 -405 984 .1929904531530344 -411 984 -1.5439052567748062 -435 984 .8229386900466361 -442 984 .9409561118335542 -449 984 .9523882981846032 -459 984 .23871052545508417 -460 984 .2824468978671084 -462 984 1.588309942890796 -466 984 -.3486998514859612 -469 984 .22840126788498474 -479 984 -.13274512234506192 -480 984 -.4730465809983695 -489 984 .6143322744633745 -490 984 1.3170553457893228 -496 984 -.8990780924428206 -499 984 .873095348285775 -504 984 .4423825462823113 -507 984 -1.2497094464354088 -509 984 .8120365037081158 -510 984 1.6790959152540506 -522 984 .5222899995756173 -523 984 -1.3330619778411101 -525 984 -2.442362023365451 -541 984 1.5587807474396493 -560 984 .29755292073958517 -561 984 .12718588076633816 -572 984 -.5688901381171236 -584 984 -1.4822690065222281 -598 984 2.078647283464549 -601 984 -.6517379476604157 -606 984 -1.5904847656311614 -611 984 -2.566321677821949 -613 984 -.9515852036398269 -616 984 -.7709608776869058 -623 984 1.828415410346222 -624 984 1.9906160391086676 -656 984 -1.5711902098216304 -675 984 .2826347526412246 -697 984 .985158436993897 -700 984 1.5777695064696537 -711 984 -1.8650327781446279 -719 984 .6000491185608277 -732 984 1.9133058289439429 -744 984 1.7773432567107421 -754 984 .1498151279179696 -774 984 .3714211507764172 -776 984 -1.6649743873153153 -778 984 .4165667652059449 -786 984 -.680830056677569 -810 984 -2.715348188498685 -813 984 -.024655059225952417 -824 984 .7602539704276572 -827 984 2.014422074423621 -835 984 -.8654068985016367 -846 984 1.049828199622946 -881 984 1.418860138522636 -886 984 -.5445704120606888 -889 984 -1.8948356922629508 -892 984 -1.3016378336121037 -898 984 -.5576320865110752 -914 984 .5825903009388549 -921 984 -.8528197345566992 -926 984 1.9453196555611825 -939 984 .10402123261725713 -952 984 -.1336506458915652 -954 984 .7657379104891088 -968 984 .95226515546481 -969 984 2.344580283396646 -970 984 -1.5546690913885526 -5 985 .4305526175716812 -21 985 -.30060966385135224 -24 985 .16066834691759962 -35 985 -.14084757434099535 -48 985 -.44087301064626383 -83 985 -.7831382699050004 -99 985 1.4622127201041815 -104 985 -.35287259065214877 -118 985 1.159901421689583 -130 985 .13971484104985216 -132 985 1.9803134098902695 -135 985 .22553228546814746 -144 985 .9340925701788566 -151 985 -.7693835299121141 -154 985 1.5903176316831356 -193 985 1.8106043926074495 -208 985 -.4044955665779568 -209 985 .01497475832861471 -214 985 -.5495994275148928 -217 985 -.40933534556396023 -222 985 .683236133011973 -239 985 -.88680943151242 -256 985 .17571559385453478 -267 985 -.016958184472173992 -277 985 -3.1960425571842994 -283 985 .08805993539837734 -307 985 2.06710681608355 -317 985 .8377903152970715 -331 985 1.335301594065432 -354 985 -2.163497409240335 -359 985 .8619034248505033 -377 985 -1.5146209102807646 -379 985 -.4984805235913845 -383 985 1.127043924352562 -392 985 .8388021640398062 -411 985 .7680339151282931 -436 985 -.8329707805048254 -448 985 .29985627701194717 -451 985 -.32112930269161355 -486 985 -.25237185189159317 -494 985 .4561604935302726 -503 985 .3299325700879149 -505 985 -1.192801531191819 -518 985 -.43346716331170454 -526 985 .435793820010511 -535 985 1.6659518312083987 -536 985 -1.973532693449815 -552 985 .05453952817140918 -553 985 .7301648746352111 -559 985 .9071687388660687 -565 985 -.4642527053072902 -567 985 .3516686937153829 -585 985 -.25990397154702927 -597 985 .7830647413264312 -606 985 .06368917355507332 -618 985 2.8854773322398453 -631 985 .10897799501808755 -632 985 .9470786362343327 -634 985 -3.116039230114389 -637 985 -.09439276741113369 -639 985 -.26121337791811206 -641 985 -1.0604521734692167 -646 985 -.14353846240773768 -660 985 .05020534449666424 -669 985 .5608257996387205 -672 985 2.0668585032809803 -676 985 1.8328093190057897 -684 985 -.13795616650278258 -695 985 .9254580993610397 -699 985 .5437489979724341 -718 985 -.02019034471939196 -751 985 -.2765921255732071 -753 985 -1.1817312509366498 -760 985 -.3403520554682005 -763 985 -.13160099800200692 -766 985 -.4880995160635227 -779 985 -1.675690067691198 -786 985 -.713916162521952 -792 985 -1.6099197315734004 -793 985 -.9121171304064042 -795 985 .11735443576367946 -797 985 -1.1192448249358413 -803 985 .15624530025565098 -806 985 1.2716155471035813 -812 985 -1.79561552007804 -816 985 .05194385162513805 -855 985 .14999032996218767 -872 985 -1.2069726596061525 -877 985 .049216574637367394 -885 985 .41309931894527424 -887 985 -1.0096143738502563 -894 985 1.5876915401825709 -922 985 -.9159403433627595 -924 985 2.0784144049305153 -931 985 .1506231033985366 -933 985 .3617241103870482 -934 985 1.120651979295161 -939 985 -.2444629397993963 -943 985 -.0842079665998333 -954 985 1.7454341699881688 -980 985 .8340859096699531 -992 985 -.8362138854607161 -999 985 -1.710064148806585 -1000 985 -1.1411346885616307 -1 986 -1.7940838700973085 -9 986 .47803507403459966 -10 986 -.3212956044348694 -12 986 1.6963657246006059 -13 986 -.4823840266872651 -17 986 -2.0074172517672655 -24 986 -.0037867596242807285 -45 986 .5275948420815292 -60 986 -1.2952040036423589 -62 986 1.119114608671173 -63 986 -.2108590850417104 -86 986 -1.1079070858326525 -87 986 -2.2388393209307185 -88 986 2.5945391813281606 -99 986 -2.3246741179272643 -104 986 -.22212812114339978 -106 986 -.4764564670524397 -113 986 1.3434009104423414 -122 986 -.11149430788452323 -123 986 1.4491292901861226 -127 986 -2.655624163071165 -128 986 -.17580599561358218 -149 986 -.08014465073618526 -156 986 .9743158755379804 -170 986 .7154263615787324 -184 986 .07578870748054664 -185 986 .6903863757529901 -211 986 -.6066575986796311 -219 986 .9869620329680495 -225 986 -2.336823873007269 -235 986 .8134524796314514 -270 986 2.134446205300204 -273 986 -.3317937042868341 -280 986 -.978910731223014 -281 986 .37494794044618185 -288 986 .23939554827723636 -296 986 .08097547987873727 -297 986 -1.7794082385893277 -310 986 -.046669474497634644 -346 986 -1.2493508357737306 -349 986 -1.5014011642109582 -362 986 -1.2109714999019865 -364 986 -.4286389317074898 -365 986 .052161507246495105 -395 986 .7734303636778658 -396 986 -.9500186935551004 -404 986 -.5560172088531895 -406 986 -.5433569624888088 -408 986 .04014406276156029 -411 986 2.9669322913101306 -414 986 .006696584022503442 -464 986 -.18802115061195446 -479 986 -.29162335895489466 -488 986 1.422793756947475 -491 986 .014058940621820087 -500 986 .09817946024269594 -515 986 1.1305253271668692 -517 986 1.734828173872578 -518 986 1.3785466398130002 -527 986 .794174314214887 -542 986 .8510476128568698 -549 986 2.0372335871015914 -550 986 2.48884216267494 -569 986 .9225821192117586 -572 986 1.3741654147655002 -578 986 .22558101955424667 -586 986 -.4999814019776904 -595 986 -2.240825455046694 -596 986 1.027829115464001 -597 986 -1.136164340970575 -600 986 -.5725211529393207 -602 986 -.07664609449442966 -611 986 2.3004162048208032 -612 986 -.021986815200289583 -618 986 -.05285169449319076 -624 986 .5877469489422575 -645 986 -.22128403246864498 -664 986 -1.1368716473399427 -667 986 -2.5992685478348854 -672 986 .8460791034251623 -673 986 -.5279004465630932 -706 986 -.8486207755700506 -709 986 1.1876652599291744 -735 986 -.6066823767484756 -742 986 -2.572302024180982 -743 986 -1.4673027361754696 -770 986 -.6474052526509009 -803 986 .4454442862635676 -816 986 -1.4898624935512497 -834 986 .16832644589707074 -835 986 .3093389012332538 -844 986 1.5339872791497338 -848 986 -.8029094659612748 -861 986 .12458351543242983 -872 986 1.5329555889480537 -906 986 -.1564982193571953 -911 986 .3708811486509002 -912 986 -.18375594141696477 -914 986 -.17360838013354346 -925 986 -1.4591599493685095 -930 986 -2.141703301680397 -944 986 -.14311088070158762 -950 986 -.6687551588299339 -955 986 -1.2003221485882614 -959 986 1.5953481876716862 -986 986 1.7148765375579704 -989 986 1.314902674436773 -990 986 1.1005537071531337 -992 986 .45278577676690357 -998 986 .9540050290956222 -9 987 .9233947690655445 -10 987 .28678177314461234 -18 987 -2.4560836543763402 -27 987 .1936143107682152 -33 987 .4233986970847054 -43 987 .6068232343669535 -48 987 .36776478560733583 -75 987 -1.0191227190191265 -77 987 -.9281271391278001 -98 987 .3343106070593336 -103 987 .5449917931518188 -107 987 -.3564481649142841 -114 987 1.057956275092517 -118 987 -.12969576497257146 -136 987 -.9023733836921556 -141 987 .05503661099762007 -145 987 -.003008181093912765 -146 987 1.1308712704637884 -149 987 .09070533612147777 -154 987 .2792867719290917 -157 987 1.006771908520343 -158 987 .46919345811320967 -161 987 -1.1400305293375144 -164 987 -.26405717042250754 -168 987 -1.511283062632397 -170 987 -.12057193474482288 -193 987 .14533626014804962 -194 987 .10800802860735939 -195 987 .03137213704429734 -199 987 -.18450068500444866 -206 987 -.4775249548987729 -215 987 -.429252035139932 -216 987 -.4865301068555539 -238 987 .05480614304395137 -253 987 .8888571645705099 -272 987 .4818325372634187 -289 987 -.41450954516839683 -295 987 .3881666876319678 -304 987 .6523365087673627 -305 987 .1132130885601027 -319 987 .1862023621158732 -324 987 -1.4492149108891392 -340 987 .48008727376713256 -348 987 .6411751369623584 -359 987 -1.258281530760714 -364 987 .31380988214679556 -370 987 .20768492383640672 -393 987 -.16619810355908443 -407 987 -.2865080713508611 -415 987 -.8990678000198148 -435 987 -1.2869606183488342 -440 987 -.6804856563937917 -443 987 .8636894554762666 -471 987 -.624498318937932 -472 987 .11199684969309148 -473 987 -.8873457279606372 -486 987 1.211784645299652 -500 987 -.1130993105291213 -505 987 -.9017722420620662 -515 987 .26107538992942914 -539 987 .002727461544345609 -557 987 -.24929325929951332 -562 987 -.19969685538015353 -588 987 -.043324868177570794 -598 987 -1.0607820994409045 -612 987 1.0534260605885908 -618 987 .39352006390298017 -625 987 -.42934971768237334 -629 987 -.5831328490884589 -630 987 .7181873811832885 -632 987 -.1340385637853167 -648 987 .03405866753589663 -693 987 -.16607486100844998 -712 987 1.2337645871064384 -720 987 .07545110882920748 -721 987 .5202902397655793 -729 987 .1732400866018497 -744 987 -1.5781020289871375 -745 987 .8530948934335967 -759 987 .5095064302597446 -761 987 .39524030910655644 -769 987 -1.1173012305477776 -772 987 .6793761923434655 -792 987 .8847058865180516 -794 987 -.31411228318471823 -827 987 -1.60630909060321 -871 987 .22459375240877308 -873 987 1.235298118708931 -875 987 -.7885744638805942 -884 987 .46952022857772663 -885 987 -.48051703045300653 -893 987 .15710299205524844 -911 987 -.1499113940091728 -932 987 .22764950401145773 -937 987 -.01137689611755531 -943 987 -1.1711278382293777 -944 987 .9056532353575463 -949 987 .14723197218173004 -977 987 -.5814872197831893 -979 987 .2747648200836281 -996 987 1.2060258624474565 -16 988 1.1115993943773808 -26 988 -.8943454098572937 -31 988 -.3943715347759027 -43 988 .3405151901509388 -49 988 3.4206026698997345 -56 988 -.5205154841443392 -69 988 -1.3352999130746455 -82 988 -1.8627409363630072 -87 988 .8170140404092185 -91 988 -.3288663099845571 -92 988 1.8708769397731067 -99 988 1.3315831843676071 -104 988 .0906042022416951 -123 988 -.501354493093485 -146 988 -2.505404887939973 -160 988 -2.415694319582982 -191 988 -.4749873892004289 -208 988 1.784118064691092 -218 988 -.5323630066787468 -224 988 -.3226874666772533 -226 988 .13972646911732384 -239 988 -.4571846781091229 -244 988 .7905615606622685 -246 988 .5673771692766152 -252 988 1.0028683774523184 -255 988 -.4383469917037436 -259 988 -.6923825732980944 -269 988 .1606803666396776 -270 988 -.9916882797785537 -280 988 .8039567323727218 -281 988 1.1394212819053435 -288 988 .03739812866424319 -297 988 .2793343779003563 -321 988 -1.376665261421794 -348 988 .6660759286675354 -359 988 -.12442174328919486 -360 988 .2516910038233683 -364 988 -.6386940663300271 -368 988 -.8025014439253708 -376 988 1.123690684551864 -383 988 -.8254927654380447 -385 988 -1.1262104503561206 -399 988 .11887113526030635 -405 988 -.60291815894298 -406 988 .09907801876165158 -424 988 .5899344654390163 -432 988 .46695030513278313 -439 988 1.3796525729037166 -441 988 1.5846867263781887 -443 988 .3353747981994773 -444 988 -1.3164544340642352 -454 988 -.5341734575992827 -468 988 .2663313079027122 -478 988 1.6278850134059912 -487 988 -.0312849630990152 -494 988 -.8471183274735532 -498 988 .3786949643174194 -500 988 .8396452721301324 -507 988 -.040718542870048356 -511 988 -.33788581288126474 -514 988 -.8009993646660737 -523 988 1.0872070786895585 -535 988 -1.0508233879111815 -545 988 -2.501148601153693 -562 988 1.8888950069431507 -576 988 1.6356183849536954 -581 988 -1.7206693425333142 -584 988 -.28404860209659616 -585 988 -.37512163045530555 -595 988 -.5547638476522508 -598 988 2.0841504271200972 -603 988 .867311461526536 -606 988 -.5817036965905475 -624 988 .7354960406180953 -635 988 -1.9847702230571 -649 988 .08242788207226454 -653 988 2.1301687782770444 -659 988 .34503114649882516 -668 988 1.5719539046711677 -677 988 -.7072108267213694 -678 988 -1.5194953703617793 -682 988 -1.140906383222457 -687 988 .7547010529287299 -702 988 -1.1173670049835376 -714 988 -1.7471459098059696 -715 988 .8163880484088684 -734 988 -1.3133599224334183 -738 988 .9681185685958262 -739 988 .7210545350926452 -748 988 .27512308029744537 -749 988 1.009984179419116 -751 988 -.440172949538547 -763 988 -.6413124285582883 -764 988 .8023391260336974 -779 988 .7531890712229005 -786 988 .12276632776134441 -810 988 -.6176005058940219 -820 988 -.585549011735489 -822 988 1.351667916718673 -823 988 -.3681750554923088 -832 988 .08169680912315412 -836 988 .9347557071316739 -840 988 .2665360668868145 -854 988 .9961777110752785 -874 988 -1.973942092289961 -941 988 -1.4310799636665559 -948 988 .3344963645800919 -951 988 .6715472548804711 -966 988 -.8200613611467718 -968 988 2.241492045067796 -980 988 .0007006367421398341 -986 988 .27151267562910486 -993 988 -2.006637328905087 -998 988 -1.3343757920288464 -999 988 1.1909463196752774 -8 989 -.16012770089271613 -9 989 -2.257776633075236 -15 989 .12703174455507066 -20 989 -.4013373380317599 -33 989 -.21944804415210029 -42 989 .24671180151833433 -55 989 -.43717639306793027 -64 989 1.6603211478570432 -66 989 .6786680945009078 -73 989 .9432804212589225 -82 989 -1.4637773157649063 -84 989 2.3919458352240857 -91 989 .35719228850794177 -97 989 3.1509747977296363 -118 989 1.4983680137331457 -127 989 -2.4960173642662333 -141 989 1.263410899346192 -172 989 -.4776323353509687 -178 989 -2.605215588124793 -182 989 -.12315535513860457 -196 989 1.8100991517602536 -205 989 2.3041658063119685 -206 989 -2.1483277731557573 -215 989 2.161955730148533 -221 989 .3645980525401907 -231 989 1.8580646741081002 -241 989 -2.4203671964997873 -242 989 -1.0927345529972763 -260 989 .6619179150859406 -266 989 -.7594555866392615 -274 989 -.08232294961100478 -303 989 .6773402771291267 -304 989 -.6136360453146721 -319 989 .5362717963674971 -355 989 1.7700835570270728 -359 989 .9639718380949948 -381 989 1.1782282953743233 -403 989 1.6102630367132937 -404 989 .7609910971408576 -418 989 -1.3699147252124448 -434 989 .9381592289572733 -436 989 2.723979475387131 -448 989 -.848058984338798 -449 989 .618043187558586 -455 989 -1.3273923501435125 -457 989 -.48787681084541196 -461 989 -.7597045366659836 -465 989 -2.4148560817995786 -480 989 -.45519219979251563 -486 989 1.7874245429894842 -493 989 .31695520241940717 -509 989 1.6763996973824318 -513 989 2.697911272409339 -536 989 -.6498788195053102 -542 989 .32123563513831754 -547 989 1.1559321064250838 -553 989 .3341554319694624 -575 989 -3.242891090522618 -586 989 -1.2327990709884207 -593 989 .20300920212939924 -602 989 -1.759613594043981 -603 989 1.1822586651304277 -608 989 -.6193079219654014 -628 989 -.052964572767069215 -629 989 -.8368065410044223 -637 989 -.7128845356963427 -639 989 -1.727787646426631 -680 989 -1.8625969160232718 -705 989 .41459401646915267 -708 989 -1.611161635391244 -731 989 -1.9442692575091054 -733 989 -1.1503794490611252 -734 989 2.1584262714123437 -736 989 .8967904979447164 -747 989 .4976106079139073 -754 989 1.8073759812691648 -780 989 -1.3258943197127606 -788 989 .19172747411732383 -791 989 .38634156062445607 -813 989 -1.476299617257404 -832 989 .5778282151933734 -844 989 3.034810542921009 -847 989 .3760810804514977 -852 989 -.41334685078635713 -854 989 -.6182283094679834 -874 989 -2.885071391741739 -892 989 -1.2322116948191466 -894 989 -.7971376918847137 -898 989 -1.511089506333968 -900 989 .22408055779059857 -910 989 -.5278484988742659 -916 989 -.28114428696109806 -929 989 -2.469457158782321 -933 989 -.4048685900714438 -935 989 .7515778113607693 -940 989 -.39921065869214234 -960 989 -.7764759144077611 -983 989 -3.976447637124798 -993 989 -.8616455236740328 -1000 989 2.87770526357053 -1 990 -1.1048293010734451 -13 990 -.1475969737448516 -19 990 -.581608639563318 -21 990 -.7123352429214196 -46 990 -1.1669087294537281 -59 990 -2.432910243400053 -77 990 -1.1016650973064017 -78 990 .0714836749771669 -95 990 .49090959884271834 -109 990 -.32888902563000183 -110 990 -.6650137506993562 -122 990 -.5240023702876848 -135 990 .7412483431276031 -145 990 1.4248992302971486 -146 990 .07101779802974369 -157 990 -1.4370795225687691 -159 990 -1.9127895422298633 -168 990 -.21839174610607448 -176 990 -.5243910945772137 -205 990 -1.17897397952546 -234 990 -1.7867884068497581 -237 990 1.4473968178074492 -246 990 -.03656272380473674 -266 990 1.0164661847075795 -267 990 1.6587716813957887 -278 990 -.20195509126752098 -280 990 -2.1493604196507805 -284 990 -.829884545826372 -291 990 .8492125320095399 -311 990 -1.060951451618582 -326 990 .40069609281957314 -337 990 .4892919503211743 -358 990 1.0806147317772101 -374 990 .11083066015093497 -375 990 .7148556852968175 -393 990 -.48941274528298506 -395 990 1.9443813711121374 -412 990 .36212073131281286 -428 990 -1.5668945122635813 -445 990 -.023190734252327067 -479 990 -.8540779773373517 -485 990 -.6422053820062095 -490 990 .3849104245047777 -502 990 .37802169895246834 -506 990 -2.1409631164121534 -509 990 -.698230716655687 -517 990 .7864100220060875 -532 990 .5789935630469727 -539 990 -.8377261351426073 -552 990 .3749830176062657 -553 990 .32148778584403037 -556 990 .2623125610795022 -570 990 .2132582423165549 -571 990 .7390956977335346 -572 990 -.3820908873940249 -577 990 1.0177734485722447 -598 990 .18454955922411082 -606 990 1.4704851464413435 -611 990 1.4692722751032183 -621 990 -.8979468849242057 -623 990 -.8672606409304512 -626 990 -.5888613760641757 -631 990 .09565054805131662 -639 990 -.013033747643630592 -681 990 -1.2668159169584035 -689 990 1.6862893758894684 -706 990 -1.158457571845021 -725 990 2.998908270644559 -728 990 .6502650588427807 -729 990 .36309049337477434 -757 990 1.3051306864889234 -765 990 -.15417682035467145 -767 990 1.2848631720075274 -775 990 -.7493793079484249 -778 990 1.053619966699554 -795 990 -.2200895753170819 -797 990 .8127441190617748 -805 990 .7567370246730267 -806 990 -.27298930281986783 -812 990 .8267042235178729 -830 990 .07725360637174446 -844 990 1.3588634246274744 -857 990 .1329493188285713 -860 990 -.5334583593117782 -865 990 -.2857747787396576 -869 990 1.9429503749785813 -873 990 -.6837603635642084 -907 990 -1.0286629987550202 -911 990 -.23407193771618884 -916 990 -.8472173327751817 -922 990 -1.4634272552841228 -923 990 -1.7643450637716662 -953 990 -1.1659814487810785 -967 990 -.4932148446779948 -985 990 .9079327749995648 -994 990 -.4313423202355639 -997 990 1.23678043468656 -998 990 -.8151771593043504 -4 991 -.08361311241562262 -5 991 -.6617466941233211 -18 991 .2956557970043896 -31 991 -.3657299699677682 -42 991 1.0949456372681092 -48 991 .3890667382158822 -51 991 .32519799124013143 -53 991 .8848340042161302 -59 991 .4379235219932463 -70 991 .03746970472172859 -73 991 -.2256840254937685 -81 991 .49142056858171757 -82 991 -.2655534489302225 -104 991 1.0562060216836062 -107 991 .008287434679053242 -108 991 .06088242312306566 -114 991 -.18863934750623335 -152 991 -.059320586511535434 -172 991 -.4821497592881184 -181 991 1.4049171900806345 -191 991 .5902239841895871 -198 991 -1.3830936301908872 -200 991 .8426437976493488 -201 991 .2516676785284133 -202 991 .1288059326413942 -205 991 .7695852712290011 -229 991 -.23222968355689472 -235 991 .965246924333842 -247 991 -.12877070053299522 -249 991 .1828852105688612 -252 991 .28798780638383875 -254 991 .19660720075959084 -273 991 -.7017966800937661 -277 991 -.8383650659893729 -293 991 -1.1495554247291448 -304 991 -1.5576246826495477 -305 991 -.8353939548351548 -313 991 -.1848666766112392 -320 991 -1.839616387490161 -326 991 -.21833102976713153 -333 991 .7197940393943573 -346 991 -.28298877779224485 -356 991 .21089547111560003 -358 991 -.21372812119995682 -362 991 -.1275842161089437 -368 991 1.3051874781603312 -379 991 .34837720059038274 -380 991 .29570412074462954 -399 991 -.25052328035757515 -402 991 -.1685691499128832 -411 991 .39374394604817053 -422 991 .42273312496575144 -430 991 -.007005652497174358 -434 991 .0783214478342939 -440 991 .5392240515403582 -450 991 1.0441314886981565 -451 991 .4457151688651525 -464 991 1.2002360392149238 -465 991 -.2968120620179801 -475 991 .1991159962513825 -477 991 -.11346006906490247 -481 991 1.8671378476206744 -484 991 .9484179829188475 -497 991 -.4278136645296338 -514 991 .6753125525178926 -516 991 -.010040786110433693 -517 991 .3723250728608707 -518 991 .46446222566817136 -525 991 .7091276863427957 -536 991 -1.422711174768092 -576 991 .41085121738472513 -614 991 .9034282912189642 -629 991 .46970358659252914 -635 991 1.1200474481437295 -637 991 -1.8493542780661552 -657 991 -.903402322851615 -660 991 -.321773582037887 -671 991 -.034936846207012595 -693 991 .6205373741103181 -704 991 -.7132278771919551 -708 991 .18336340695673475 -714 991 .5726309853772232 -727 991 -1.024332085508097 -731 991 -.21560528015788227 -757 991 .03334105907478005 -764 991 -.1490124746937149 -789 991 .20172061849294315 -790 991 -.6542662624356012 -795 991 .47141474236598574 -801 991 -.24184351141526872 -819 991 -.3883803636837296 -827 991 .16099936790423106 -832 991 -.4911948941895048 -833 991 -.204903176022182 -837 991 1.1916159795697276 -867 991 .448905288987876 -880 991 -.7421790710880842 -881 991 .0013501725965229805 -888 991 -.4951860388124521 -902 991 .05741938061243123 -930 991 -.023063130486457827 -932 991 .15052125189276888 -937 991 .965166820926884 -951 991 -.9795381830407315 -971 991 1.6566135041376 -985 991 .6824724173217039 -986 991 -1.4400136317137922 -4 992 -.22159472155312374 -11 992 -.6374648579638281 -18 992 .5473090618369518 -24 992 .2512354325772669 -46 992 -1.2029276689243185 -48 992 .8719204126281903 -58 992 1.7188906433366176 -82 992 .9563967690804815 -92 992 -.7090088778009696 -115 992 .863012249269278 -120 992 1.7392448088256562 -121 992 -.10043552170179762 -132 992 1.0180620204700948 -192 992 -.6436303533884767 -211 992 -.2355080275027942 -213 992 -.8458734231621704 -218 992 -1.3748841735069934 -219 992 .20707317323154614 -233 992 .5107671738609001 -273 992 -.42426657545879326 -276 992 .7893002615338919 -302 992 -.3892724283549912 -312 992 -.8152753031320877 -314 992 .15988932070932194 -316 992 -.5015199793721742 -320 992 .009879817792522283 -328 992 1.1698451320042866 -329 992 -.09047087891423644 -332 992 .635253057249735 -335 992 .3931778960204487 -338 992 -.8829791674175713 -342 992 1.240998201451668 -359 992 .5117077977501029 -360 992 .01033041554612607 -370 992 .3356823935477571 -381 992 -.4711444476580488 -386 992 -1.2280932820895214 -418 992 .6338529715103813 -422 992 .3757006114123116 -426 992 .5464338538506267 -445 992 -1.2799226551391427 -453 992 .6161752072527407 -458 992 -.8905879803931273 -461 992 -.4178574255131599 -474 992 .2145336881337262 -495 992 .6315306124409802 -506 992 .5541240118905933 -529 992 .7140184452459967 -540 992 -.14745367667751588 -549 992 1.148112969683432 -553 992 .5191312577449892 -560 992 -.4840920760123254 -570 992 1.50458965157555 -588 992 -.6610920975192823 -589 992 .4159088042724516 -595 992 -.4218981204867852 -617 992 .4625354813494129 -619 992 .49787790709320123 -625 992 .9380953848373648 -645 992 -.11021770565681906 -662 992 1.0377505266440525 -674 992 1.1828064318944178 -678 992 .07675041715454045 -686 992 .6865381267071584 -690 992 .2230900430975688 -696 992 -.7998535139873204 -714 992 -.4981136022839263 -733 992 1.0772699180854155 -737 992 .24381055378454783 -745 992 -.07294522789934503 -748 992 1.585768945304313 -773 992 -.49114575506556457 -776 992 .5213697449988463 -793 992 -.6979155207165688 -794 992 .5239503785214856 -800 992 -.6348931607394348 -813 992 -1.3942778393339565 -814 992 1.096117767925367 -818 992 -1.8341828042304456 -841 992 -.9557636802368457 -853 992 .3062476687686816 -862 992 .054544898518017824 -863 992 .026308192677850298 -864 992 -.47548817308300245 -879 992 -.3380904857121358 -880 992 .37760975014373066 -883 992 -.12143640087907792 -886 992 1.1633169249425006 -891 992 -.6624686539348315 -904 992 -.2572403586459714 -906 992 -.8761171710004967 -911 992 -1.063704990907503 -918 992 .26084429465463527 -937 992 .7794162896248429 -951 992 -1.8050669501793157 -952 992 -1.0425203234457137 -953 992 -.47991589617614827 -968 992 -.10679629158278584 -969 992 -1.0368577748216354 -983 992 .2893334291273192 -987 992 -1.581792057654009 -2 993 .8247545590609451 -7 993 -.15979209598568478 -15 993 .4465121056912157 -28 993 1.9157375544000994 -40 993 .27942837491201233 -49 993 -.6222849327018244 -52 993 -.21259532314912535 -59 993 -.7734249752446575 -73 993 -.5646606436894172 -92 993 .8347531626296978 -125 993 -1.2836726885501715 -149 993 -1.2270582117983924 -151 993 -1.1033956531623315 -160 993 -1.0215063319886029 -174 993 -.7506242778360135 -182 993 1.324108606261478 -183 993 .15961750525805693 -212 993 .7500616269828714 -220 993 .37481300218039426 -243 993 -.36096522471904186 -251 993 -1.6149536800450104 -252 993 1.0887930097606704 -266 993 -.36875905941576964 -271 993 .06321296133717297 -272 993 -1.3887045081410043 -303 993 -3.064999215919031 -310 993 .251331700257747 -311 993 -.31488668958694893 -313 993 .4251486696336062 -333 993 1.2799963587232852 -343 993 .43414088128625183 -358 993 1.8369617410343524 -359 993 .6419878141489663 -378 993 -.5459104855930664 -386 993 1.5328366238086468 -395 993 1.3053915577653672 -401 993 -.9092379297782579 -410 993 -.015310165126989392 -418 993 1.5347458948078487 -425 993 -1.186873552491983 -431 993 1.7398719453909472 -442 993 -1.6660944747513378 -445 993 -.8499635522257879 -471 993 -.9862811057824186 -481 993 -.31947491441471176 -488 993 1.3865411216482577 -499 993 -.06923415922506973 -506 993 -.6007368589938364 -517 993 1.586065887869318 -528 993 .9057440261177621 -530 993 .008200322458017023 -552 993 .525766427735624 -553 993 .6774180523274621 -561 993 .5345090906581305 -565 993 1.4268228226360118 -605 993 -.9269251927034549 -611 993 1.226205507151123 -613 993 2.066894969328868 -614 993 1.1369466559182946 -631 993 .37238770716196207 -637 993 -.734785048068914 -645 993 -1.1497254904859424 -650 993 1.113509846216263 -668 993 .24159779585589872 -673 993 -.034132539437945364 -679 993 1.9747551192961539 -681 993 -.8198056752602955 -698 993 .09434807584416173 -708 993 .19871128374689342 -711 993 -.11240888222710452 -736 993 1.2742624339527198 -741 993 -.0833027118205331 -751 993 -.7107227682121747 -768 993 -1.431256874422601 -776 993 -1.1658847056552342 -777 993 -.34034783845401967 -784 993 -.05614790151680177 -786 993 -2.523325436658934 -804 993 .9734080161303933 -805 993 .532607529669092 -835 993 .4630036052013673 -843 993 -1.228289868907641 -844 993 1.0556417597848904 -848 993 -.3958637254282676 -854 993 -1.7451073708790135 -862 993 -.24600809002216814 -866 993 -.9200109660506088 -875 993 -.3937299615124335 -905 993 1.7546864988566622 -913 993 -1.8946288389715829 -925 993 -.7610202870313607 -931 993 .17401970025705285 -933 993 .7119808799429427 -947 993 .3376817245173604 -963 993 .7802885207813209 -966 993 .9107272224877401 -997 993 .7061278380992505 -1000 993 -1.4210472885483048 -3 994 -1.016382695124853 -13 994 .22458826193144818 -21 994 .03858920966681917 -28 994 -.00887384942977823 -31 994 -.0073326663562899505 -38 994 .06684200244654755 -39 994 -.4294994230482446 -40 994 .2887913185287428 -41 994 -1.6422483863251536 -49 994 -.02571339112532467 -57 994 -.4706068933177463 -102 994 .18964523226266977 -113 994 1.0619701194862043 -117 994 .9135306457717223 -131 994 -.25052969944535464 -143 994 .2530291615321504 -148 994 .5537910611135152 -149 994 -.9953859641573013 -153 994 -.2034216170111506 -157 994 .36692074629033744 -163 994 -.9011036067102208 -172 994 -.6150405103346778 -181 994 2.226988798680111 -183 994 -.4381457883017808 -200 994 1.6065149029548038 -201 994 -.8717944137783264 -204 994 -.614090739212771 -249 994 -.46517377012040684 -255 994 .20666307202496223 -256 994 -1.5804680427753077 -259 994 .4820017071265938 -270 994 -.5388943831247771 -280 994 .33284204286581665 -281 994 -.26752923046326466 -296 994 -.29598896127340946 -315 994 .4580410298854476 -327 994 .013424979701760764 -337 994 -.6783731318015255 -345 994 -.9609169543651815 -348 994 .9351118274113096 -363 994 -1.1449383132955517 -366 994 -1.1651450187123276 -367 994 .5436435791084553 -371 994 .732964067699712 -379 994 .816976326174058 -407 994 -1.512378070772321 -441 994 -.8228294902070757 -451 994 -1.4854397640216008 -459 994 .8251500228937466 -460 994 -.41287654202408325 -465 994 .24361413640246113 -467 994 -.4598885624982229 -472 994 .5330659527871546 -481 994 1.5837138014445489 -482 994 1.6466975728387796 -492 994 .5492922148199614 -509 994 .3586760574663331 -513 994 1.1097774947982004 -532 994 -.33424517609279203 -533 994 .09327902174626636 -538 994 .13976809576283156 -544 994 .6401789764999286 -553 994 -.882329962635162 -581 994 1.9259355338623116 -584 994 .4118630314136271 -599 994 -1.8593757231546204 -629 994 .2628974768201836 -642 994 -.0475152025494299 -650 994 .8606576663610632 -678 994 1.0188834066963681 -686 994 1.306426697471416 -687 994 .6661619729831165 -699 994 .3737996112778784 -719 994 .322256800870234 -721 994 1.3968327833384735 -726 994 .040053538001228906 -736 994 -.6649428275069125 -772 994 -1.3395003674396184 -775 994 .5629213194448228 -805 994 .945186305814974 -834 994 .649088356544036 -838 994 -1.2961335451940525 -849 994 -.21574754500407115 -858 994 -.7691832125812402 -860 994 -.7419130613398673 -864 994 -.5020005665852463 -872 994 1.0841904512344525 -873 994 1.1146006611667785 -877 994 -.03201893703181974 -879 994 -1.574387357528373 -904 994 .2067099868591945 -920 994 1.3586429195756204 -930 994 .3687684118149429 -938 994 -.2070918785193484 -946 994 .7797365399357014 -951 994 -.4446772760667713 -957 994 .5318243111146492 -960 994 -2.035870138307804 -965 994 -1.4015010546062674 -977 994 .7014011216330494 -978 994 -1.740325511902771 -993 994 .905876761940166 -5 995 .6920648410814991 -8 995 .0370335579603767 -9 995 -.543349006988704 -15 995 .10993362228628463 -20 995 .25136953058109623 -21 995 .23014449555604358 -52 995 .0354785187522781 -53 995 -.21810032762909082 -54 995 -.1919242539381874 -65 995 .5455495644753073 -96 995 .8264874486210602 -103 995 -.46184122911252945 -105 995 .2897160490608445 -111 995 .529723580418777 -138 995 .15681949769316555 -140 995 .26448992167421953 -157 995 -1.2437607489166946 -162 995 -.6184614253082563 -186 995 1.138140220326162 -201 995 -.32303969315168085 -229 995 -.4393843585813337 -245 995 .4909185737491886 -250 995 -.03938797646962014 -260 995 -.09574504179819417 -261 995 -.05969016828389082 -262 995 -.2681207457485635 -272 995 .5704508932439053 -273 995 .9006983073088155 -282 995 -.12921992777459462 -286 995 -.315776119172857 -317 995 .5991230165605635 -358 995 .1026165632336922 -369 995 .1485466322280186 -376 995 -.4312496523845926 -383 995 -.32787472842859555 -389 995 .12695019848675598 -404 995 .7184105090210041 -406 995 .47996434141139876 -409 995 1.748855360221691 -420 995 .7872942398079322 -442 995 .1277935936567574 -447 995 .9667686887252993 -454 995 -1.0277375267146258 -460 995 .1260678059539785 -462 995 1.2797418030210979 -465 995 -.08914918010291512 -471 995 -.09293796232064924 -475 995 .39729048747700924 -493 995 -.3540656948363712 -507 995 -.3234279931428323 -509 995 -.2957144869172624 -547 995 1.0107442330221867 -548 995 .7534493905031414 -564 995 -.5421007043714207 -577 995 -.1691882380373518 -609 995 -.6791769346145086 -620 995 .16974393355792078 -621 995 .20337906137394968 -640 995 -.7771525620884199 -641 995 -.24211844859931866 -653 995 .6997326145294243 -654 995 .19959137098919005 -664 995 .6886139850969638 -665 995 .41841963246396435 -673 995 .20656534475542093 -693 995 .07780144336317886 -721 995 .28344326892416044 -726 995 -.48655608439587217 -732 995 .013551146011825721 -734 995 -.25998637835935395 -758 995 .23429096594394275 -799 995 -.29956400940023653 -817 995 .16927446652533648 -829 995 -.3026708197877829 -842 995 -.5286013789060449 -844 995 .2274904702516817 -846 995 -.1557705021573467 -847 995 -.8431208449613827 -860 995 .13201137596495705 -881 995 .08185157412499777 -903 995 .14579508118522724 -916 995 .05256243349932177 -927 995 -.22909350393578148 -931 995 -.18189810283205993 -935 995 .30596995771360963 -940 995 -.33698541155848527 -943 995 1.43106145575587 -952 995 .7367437039018367 -969 995 .20696495272609666 -987 995 1.135772282152906 -30 996 -.12058449445790423 -31 996 .8320910083565788 -56 996 .7930541135463441 -60 996 1.657356751861191 -81 996 -.3921629139765027 -86 996 2.5885237944422106 -96 996 -.026507169367036815 -98 996 .46167741864340794 -103 996 -2.449282138109409 -111 996 1.3151896276163133 -126 996 -1.3741275085245008 -145 996 -1.464556459345041 -150 996 .269401916180355 -156 996 -.04281539269529569 -166 996 -1.0019009354250212 -184 996 .23468701165532097 -186 996 -1.221884340632145 -203 996 .31080335532237174 -227 996 -1.14262579009701 -248 996 .5677226726178547 -251 996 -.17478945864573683 -252 996 .35704135174659624 -264 996 -.5057468720753635 -279 996 .3415155481178288 -289 996 .7938073145453884 -297 996 2.4579286269327745 -300 996 -.7786121379365497 -329 996 -.5695923501084308 -340 996 -1.0269763347267096 -342 996 -.672211599177794 -345 996 .26439300050000497 -355 996 -.7725733857561421 -373 996 -.47178670930542166 -383 996 -.2319728097590785 -390 996 -1.6388905233159727 -394 996 -1.6287265010736607 -395 996 -.7178848452479061 -422 996 .1938905281792205 -424 996 -2.5256309336477947 -429 996 .9116567141229807 -435 996 -1.8376168540542446 -467 996 .4386545428901281 -470 996 .1316622297235806 -475 996 -.7164238777859174 -491 996 .9290662278167993 -506 996 -.1428927268166655 -524 996 -1.3497758082252524 -530 996 1.967022884951258 -532 996 -1.6603417585744227 -540 996 .10217276664274935 -546 996 .8070241622223921 -558 996 .9984064654872941 -586 996 .7443806160409918 -596 996 -.6466262423824852 -598 996 -.395711510051321 -601 996 .01465819706410438 -603 996 -1.9383092922170184 -616 996 2.220752802000534 -623 996 1.0192535973894654 -629 996 .07659103547411061 -630 996 .26177111232716715 -633 996 -.8234688909111615 -635 996 -.24847245785794117 -667 996 1.9836473016483345 -668 996 -.5012776300208719 -683 996 .15542277720928796 -689 996 .5391386767251614 -693 996 -.10882611578505194 -711 996 .7268215261828834 -734 996 .11002611828106007 -735 996 .33284222332057645 -740 996 .42748418706330393 -745 996 -2.6638279481087586 -749 996 .1827694142018504 -755 996 -1.5193134236839556 -757 996 -.9136330909783736 -766 996 -.446313679158308 -769 996 -1.9022934143635912 -774 996 1.3078643885865484 -780 996 1.8507235608355117 -785 996 -.21007767875506644 -789 996 1.448988679726815 -798 996 -1.2713895255448482 -806 996 -1.1404697413636242 -807 996 .24863091507600849 -813 996 1.2541057464291687 -817 996 -2.255902498595139 -851 996 .0857929993946995 -876 996 -2.239676125588837 -877 996 .3466908263608645 -885 996 -1.6533136760387095 -886 996 -.1292984193867525 -887 996 -.02946538727791667 -894 996 -.8670540477678403 -915 996 .31244536312680926 -937 996 .22125762118953046 -952 996 .8406235873872556 -966 996 -1.5847899952168045 -992 996 -.1688282267073539 -999 996 -1.8839949418486417 -10 997 -1.6382258940320449 -15 997 -1.1574853046458236 -23 997 .5783166635257981 -28 997 -1.1343045794202535 -29 997 .5761264466413222 -33 997 -.6107742128600206 -38 997 -1.2071617926101095 -42 997 -1.193217619210965 -45 997 -1.3459570274069932 -66 997 .7120444707187019 -75 997 .4544423295352631 -83 997 .7115072721255978 -92 997 -.2354570218337423 -93 997 -1.886693985724556 -94 997 -1.7100761526571597 -96 997 .2285861190518436 -102 997 -.8821083865390794 -113 997 -2.7111212784020355 -129 997 .3759709290543307 -131 997 .16009614371490088 -147 997 -.07455924304621417 -149 997 .8523998198207776 -166 997 -1.7740180822634084 -185 997 .6645605986543744 -189 997 -.512058934311151 -198 997 1.877446591414206 -201 997 .14966749153308864 -214 997 1.5487753040831203 -244 997 -.1531117650631659 -249 997 1.0215127725398288 -252 997 -1.57343270027596 -264 997 -1.88144503136555 -268 997 1.9290940003242611 -278 997 -.12498249369505082 -286 997 .20107872595589713 -290 997 -.4415479467601824 -307 997 -.227302451594959 -312 997 -.5939172097523537 -318 997 .1975828441877374 -320 997 .7976403277062182 -333 997 -1.4923620885750186 -344 997 .8847365898656852 -350 997 -.21033103473548784 -367 997 -.6809348101623353 -370 997 -1.2508278463175921 -380 997 .4370629396799709 -387 997 .332780068300669 -405 997 -.7516062770989763 -416 997 -1.0515467839440873 -427 997 .8155475950410821 -429 997 1.4571135928663266 -441 997 .37245435477268785 -462 997 1.8230782802326226 -464 997 .4658652103101443 -467 997 -.7697657860594322 -468 997 .6051212669223135 -473 997 2.153306361689897 -480 997 .13453979219992232 -494 997 -.7163655195545406 -495 997 1.371174430809519 -500 997 -.1965125255213862 -503 997 .22301311007518285 -506 997 .057942418781601404 -508 997 -.6376813163483319 -524 997 .9012175546934114 -536 997 -.3200524898117259 -540 997 1.4157541255027022 -548 997 -.3379499076006667 -559 997 1.7908125351209878 -562 997 1.7657658150907638 -566 997 -.8722076693150645 -571 997 .6590616160211067 -580 997 -.26377141808275184 -583 997 -1.1770814842188941 -602 997 .16528607603695156 -606 997 -1.1879990230376263 -613 997 -1.1266772544410788 -616 997 -2.285244968802623 -623 997 .012654104926451554 -641 997 -.6205051418625979 -645 997 -.22042391423680646 -646 997 -1.3259083715585838 -650 997 -1.2408821829506094 -655 997 -1.4988447288070152 -669 997 .9959474665930315 -693 997 .18046816680950192 -699 997 1.3779065649376652 -701 997 1.0773762270679845 -711 997 -1.0949409281909563 -713 997 .900844358013634 -723 997 -.46820860837199074 -733 997 1.282593822511242 -734 997 -1.1848178748692113 -745 997 -.39934047497953207 -746 997 -.6455713681214746 -748 997 .8623141446639495 -756 997 .42843991943244775 -794 997 -1.3654766450908182 -815 997 .19239817844308768 -817 997 -.04348037908230222 -824 997 1.4766358591705488 -830 997 1.2771299848387268 -834 997 -1.3357940147579002 -845 997 -2.0743952590260344 -855 997 -.6074998094829361 -873 997 -.7022408506122714 -879 997 -.1661164153014873 -901 997 .6150658843490249 -905 997 -1.3705640147831009 -910 997 .03412057507260602 -912 997 -.06589091702368899 -917 997 -.992260642310578 -924 997 1.426263757491196 -925 997 .3885084490412533 -952 997 -.49220463503030903 -964 997 -.5374878533341614 -965 997 .10078299289431944 -982 997 .9174626003964867 -993 997 -2.0950848104471484 -33 998 -.8489175991733867 -51 998 -.7646387299927061 -64 998 -.5525098805251751 -66 998 .11039161932484512 -77 998 .4579153923331278 -78 998 1.9431736526124046 -80 998 -.5913215203868172 -98 998 -.3998432668305414 -104 998 -.9837185756359463 -119 998 -.8794876786517475 -129 998 -2.6120856437075988 -153 998 -1.2044224303984201 -155 998 .7580799176809642 -165 998 -.6072419343471197 -170 998 1.0539927437662264 -172 998 1.11936758900207 -179 998 .6163569599937503 -189 998 -1.736438812756289 -200 998 -1.835230762382376 -202 998 1.8996478333546083 -238 998 -.5750565862725432 -241 998 1.195798347538099 -244 998 -2.330988022469915 -246 998 1.0607047802737208 -267 998 .9337763194140055 -274 998 -.7871954409879044 -275 998 1.4413788400354308 -277 998 -.9982571912321685 -283 998 -.544361752508396 -300 998 -.18803171950870667 -312 998 .2817552262263378 -313 998 -.5780132386389213 -314 998 .19181984851682699 -330 998 -.12240419349554077 -334 998 .107123611668511 -338 998 .9126285320092273 -351 998 -.6913571042745952 -362 998 .7544418016004595 -395 998 -1.3056265395280096 -403 998 -.8421867786456528 -404 998 -.006394371922704242 -407 998 -.1774031239245158 -414 998 -.14605130779688374 -426 998 .23850783357096506 -427 998 -1.0158693789232607 -436 998 -1.657371672452234 -445 998 -.8781086903388028 -470 998 1.2911607285008755 -484 998 .5383298811200553 -499 998 -.3706203488933232 -510 998 2.345274244942346 -518 998 .5552579667434048 -543 998 -.7284477927662132 -558 998 .056885978312805036 -585 998 -1.2197091610459116 -597 998 .5195703547986812 -613 998 1.1984626743154598 -631 998 -.6773614523856144 -638 998 -.11158825716462017 -655 998 -.3566709794445756 -664 998 1.172197656848668 -674 998 -.8600920829900617 -729 998 -.7253873465244207 -730 998 .5433287999280458 -739 998 1.0301119470923585 -751 998 -.17448763631122893 -757 998 .09571665355693348 -759 998 -.3241555495834263 -774 998 -.22870710090521007 -780 998 .07728223953421336 -786 998 1.0486948958766038 -788 998 1.6599763777786944 -791 998 .2829322337932055 -794 998 -1.4689564946816394 -804 998 .6805625037078363 -808 998 -1.022192861374713 -809 998 -.3080690750296175 -811 998 -1.0326033308300047 -814 998 -.32601140072897417 -833 998 .12606946953211826 -844 998 -1.8926807186548944 -847 998 -.6856285477267803 -859 998 -.8250401064719083 -889 998 -1.456469231180758 -915 998 1.5379773497401426 -916 998 -.00556760015497873 -927 998 -.1778565846042786 -935 998 1.5171209659072247 -936 998 -.996446900795374 -944 998 .7416703741848982 -955 998 -1.9134219222855808 -960 998 2.3907070098454963 -967 998 .8727259571859239 -979 998 .6375392591864633 -980 998 1.524282056433029 -995 998 -.9836038583202671 -11 999 -.12090603879375335 -13 999 .5241878296045349 -37 999 -.34489546613969146 -63 999 1.9035631643957824 -70 999 -.5640833695278413 -71 999 -.05705465359174683 -80 999 -1.682558238135425 -96 999 2.0178780632400772 -105 999 2.4099328536411178 -108 999 .9925509571859734 -131 999 .4594477262828381 -132 999 .3700069000742044 -154 999 1.0251039997914657 -162 999 .19781980547261652 -170 999 .44270900133978086 -191 999 -1.6446397753103643 -192 999 -.24492965545157275 -197 999 .617593247498331 -200 999 -1.6841130601593668 -205 999 -.013038677714213888 -220 999 -2.3319535809033223 -272 999 .08053823102203125 -285 999 1.1956289326447238 -293 999 .6650582374944904 -306 999 -.18328618383874823 -314 999 .6931809065326162 -346 999 .09157237319076922 -349 999 1.1560857711783943 -350 999 -1.082664069194733 -355 999 -1.0465353432102675 -359 999 -.4878735329899414 -362 999 .34944288839381005 -386 999 -.5337547071565975 -391 999 -1.4500039404914833 -400 999 -1.1054492561610882 -404 999 1.1793705336704081 -405 999 -.04528003203997537 -406 999 1.3514684935112533 -408 999 .6553895417037958 -409 999 3.3993123684220032 -411 999 -.45213414927483514 -413 999 -.062184401661818975 -437 999 .012520329957937615 -440 999 -.43281877991076356 -458 999 1.6844820877880422 -461 999 2.851729080882987 -466 999 -1.2681221292720979 -471 999 -1.2327067277521597 -480 999 .5481941806706387 -496 999 .2779625640159176 -497 999 -.8492343730109868 -521 999 1.048305054032314 -525 999 .6826291257653526 -532 999 .19224170631786652 -549 999 -.34659396285310234 -550 999 .906829861277113 -560 999 .91484805792619 -564 999 -1.4769379299405032 -597 999 1.5307280840496043 -604 999 1.0532181244428565 -628 999 -.532763555638355 -631 999 -1.2214991923449616 -656 999 2.5511578526432896 -669 999 .6963511543668591 -674 999 -.9028115015229966 -689 999 -.08410518156626343 -692 999 2.0472331432329747 -697 999 -1.0233187870678875 -699 999 .16608394590667028 -711 999 .3316682707750077 -736 999 .47732619300886964 -738 999 .5538668410130152 -763 999 .19635373543314455 -826 999 -1.8681418830336742 -829 999 -.0891372572499716 -853 999 1.1401688401154095 -882 999 1.1560603727958052 -905 999 -.6785095619264785 -906 999 1.2037631984336885 -970 999 1.7035234931097565 -974 999 .4909051988410007 -982 999 1.3699332995443543 -983 999 1.0596200657865138 -991 999 .8268244228676891 -993 999 -.672820826644255 -994 999 2.4047022548730297 -997 999 .049236687317485636 -7 1000 .582347001843086 -33 1000 .17369596151516525 -50 1000 -1.5869003748608042 -72 1000 1.5787445879572282 -83 1000 -.6790814223064674 -85 1000 1.0243360720652375 -86 1000 -.21421986595306358 -94 1000 1.1690069125239513 -99 1000 -.2869692877753785 -131 1000 .39046216586784416 -150 1000 .7749593221905432 -159 1000 -2.531743587711323 -179 1000 1.0603080807370917 -183 1000 -1.667105382500385 -198 1000 -1.0959316500897438 -202 1000 -.33088453339266893 -208 1000 -.5838662511895037 -220 1000 .5491325513421652 -235 1000 .8113478922642777 -242 1000 .6327580091277775 -264 1000 1.4568456090656337 -269 1000 -1.043493408147711 -279 1000 .10193664765720922 -291 1000 .7582576866816213 -295 1000 .07662440649445418 -303 1000 -1.132210147518989 -306 1000 -.11716349957203268 -326 1000 -1.498075345651936 -353 1000 -1.7403215455037637 -360 1000 .865338846892793 -377 1000 .25737749244861635 -379 1000 1.1532703482541116 -388 1000 -.39530795166478355 -392 1000 -1.9086681914245989 -403 1000 -.7445422763596912 -407 1000 .4565039139947302 -410 1000 1.0901435834862219 -411 1000 1.9263854373218507 -425 1000 -.08530685681570718 -428 1000 -2.3699126465524225 -432 1000 -.8436211814561195 -463 1000 -.6202798563906889 -483 1000 -1.2779196490085798 -487 1000 .09313684249990276 -498 1000 .7115016700213506 -514 1000 2.022727718263377 -516 1000 1.578507393903899 -524 1000 -.5928884611410038 -527 1000 2.2620975241888805 -539 1000 .04040712527979781 -545 1000 .20832506570180565 -550 1000 .6698292830241679 -553 1000 .009056904493356022 -554 1000 .2679837359342377 -557 1000 .10370963751473271 -559 1000 -1.4543560527243737 -566 1000 -.09969752293480022 -585 1000 -1.08509851808185 -586 1000 -.28760626583510995 -589 1000 -.7422434945624157 -590 1000 -.17709283061047865 -594 1000 -2.1293442464960464 -598 1000 -.8142321515970362 -599 1000 -2.225827731550893 -604 1000 1.241186429259729 -608 1000 .6085215353680972 -635 1000 1.6699786477437735 -653 1000 -2.546146210663726 -686 1000 .33614628730125495 -707 1000 -.8088985421338388 -742 1000 .8531433165535185 -750 1000 -.014101445413320219 -761 1000 .5013244193923687 -808 1000 -2.0130350073205783 -829 1000 -.09996079615444312 -838 1000 -.9110888492562805 -845 1000 1.5048143051187957 -865 1000 .04682725106125722 -872 1000 .6120954670937145 -882 1000 -1.0871728619517553 -884 1000 1.0092474331684114 -891 1000 1.0251415392206649 -907 1000 .48680613796198413 -935 1000 -.78526917700304 -960 1000 -.7231032874289289 -969 1000 1.0558624950000706 -973 1000 -.724688852683874 -983 1000 -.8139875434093897 -988 1000 -2.7078055971346435 From e8fc7cafe9c2918258b91264c542ab13c9d3f0d5 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 12:02:30 -0700 Subject: [PATCH 640/687] fix .gitignore --- .gitignore | 3 --- R/.gitignore | 5 +++++ 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 R/.gitignore diff --git a/.gitignore b/.gitignore index 2828096ae59a1..d162fa9cca994 100644 --- a/.gitignore +++ b/.gitignore @@ -7,9 +7,6 @@ *.iws *.pyc *.pyo -*.o -*.so -*.Rd .idea/ .idea_modules/ build/*.jar diff --git a/R/.gitignore b/R/.gitignore new file mode 100644 index 0000000000000..3e181a70ea1dd --- /dev/null +++ b/R/.gitignore @@ -0,0 +1,5 @@ +*.o +*.so +*.Rd +lib +pkg/man From c4a5bdf494491617079a86bbe839fc20f2d6e533 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 13:17:25 -0700 Subject: [PATCH 641/687] run sparkr tests in Spark --- R/install-dev.sh | 2 +- R/run-tests.sh | 6 ++++-- dev/run-tests | 10 ++++++++++ dev/run-tests-jenkins | 2 ++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/R/install-dev.sh b/R/install-dev.sh index 937ce0550cf4c..bb8a2fc955639 100755 --- a/R/install-dev.sh +++ b/R/install-dev.sh @@ -8,4 +8,4 @@ LIB_DIR="$FWDIR/lib" mkdir -p $LIB_DIR # Install R -R CMD INSTALL --library=$LIB_DIR pkg/ +R CMD INSTALL --library=$LIB_DIR $FWDIR/pkg/ diff --git a/R/run-tests.sh b/R/run-tests.sh index cea32d24cafc6..bf0adace452f1 100755 --- a/R/run-tests.sh +++ b/R/run-tests.sh @@ -3,12 +3,14 @@ FWDIR="$(cd `dirname $0`; pwd)" FAILED=0 -rm -f unit-tests.log +LOGFILE=unit-tests.log +rm -f $LOGFILE -$FWDIR/sparkR pkg/tests/run-all.R 2>&1 | tee -a unit-tests.log +$FWDIR/../bin/sparkR $FWDIR/pkg/tests/run-all.R >$LOGFILE 2>&1 FAILED=$((PIPESTATUS[0]||$FAILED)) if [[ $FAILED != 0 ]]; then + cat $LOGFILE echo -en "\033[31m" # Red echo "Had test failures; see logs." echo -en "\033[0m" # No color diff --git a/dev/run-tests b/dev/run-tests index d6935a61c6d29..bcf6f4774e7aa 100755 --- a/dev/run-tests +++ b/dev/run-tests @@ -228,6 +228,16 @@ CURRENT_BLOCK=$BLOCK_PYSPARK_UNIT_TESTS ./python/run-tests +echo "" +echo "=========================================================================" +echo "Running SparkR tests" +echo "=========================================================================" + +CURRENT_BLOCK=$BLOCK_SPARKR_UNIT_TESTS + +./R/install-dev.sh +./R/run-tests + echo "" echo "=========================================================================" echo "Detecting binary incompatibilities with MiMa" diff --git a/dev/run-tests-jenkins b/dev/run-tests-jenkins index 6a849e4f77207..da43c07e2d93c 100755 --- a/dev/run-tests-jenkins +++ b/dev/run-tests-jenkins @@ -215,6 +215,8 @@ function send_archived_logs () { failing_test="Spark unit tests" elif [ "$test_result" -eq "$BLOCK_PYSPARK_UNIT_TESTS" ]; then failing_test="PySpark unit tests" + elif [ "$test_result" -eq "$BLOCK_SPARKR_UNIT_TESTS" ]; then + failing_test="SparkR unit tests" elif [ "$test_result" -eq "$BLOCK_MIMA" ]; then failing_test="MiMa tests" else From f403b4a5e9bd7b1850ce23331a55329c431167eb Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 13:18:09 -0700 Subject: [PATCH 642/687] rm .travis.yml --- R/.travis.yml | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 R/.travis.yml diff --git a/R/.travis.yml b/R/.travis.yml deleted file mode 100644 index 5a8a5befbcf2c..0000000000000 --- a/R/.travis.yml +++ /dev/null @@ -1,26 +0,0 @@ -# Based on https://github.com/craigcitro/r-travis - -language: java - -before_install: - - cd pkg - - curl -OL http://raw.github.com/craigcitro/r-travis/master/scripts/travis-tool.sh - - chmod 755 ./travis-tool.sh - - ./travis-tool.sh bootstrap -install: - - sudo R CMD javareconf - - ./travis-tool.sh install_deps - - ./travis-tool.sh install_r_binary plyr - - cd .. - - ./install-dev.sh -script: - - ./run-tests.sh - -cache: - directories: - - $HOME/.m2 - - $HOME/.ivy2 - - $HOME/.sbt - -after_failure: - - ./travis-tool.sh dump_logs From ba53b0994773761a7141ee69fb78823b0f222e26 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 15:26:49 -0700 Subject: [PATCH 643/687] support R in spark-submit --- R/pkg/R/sparkR.R | 38 ++-------- R/pkg/R/sparkRClient.R | 40 ++--------- .../RRunner.scala} | 7 +- .../org/apache/spark/deploy/SparkSubmit.scala | 70 +++++++++++++++---- .../spark/deploy/SparkSubmitArguments.scala | 8 ++- .../launcher/SparkSubmitCommandBuilder.java | 56 ++++++++++++--- 6 files changed, 126 insertions(+), 93 deletions(-) rename core/src/main/scala/org/apache/spark/{api/r/SparkRRunner.scala => deploy/RRunner.scala} (97%) diff --git a/R/pkg/R/sparkR.R b/R/pkg/R/sparkR.R index cbfe9c31580d9..e1c357f58f71d 100644 --- a/R/pkg/R/sparkR.R +++ b/R/pkg/R/sparkR.R @@ -17,15 +17,8 @@ .sparkREnv <- new.env() -#TODO(davies): change to spark-submit -assemblyJarName <- "spark-assembly-1.3.0-SNAPSHOT-hadoop1.0.4.jar" - sparkR.onLoad <- function(libname, pkgname) { - assemblyJarPath <- paste(libname, "/../../assembly/target/scala-2.10/", assemblyJarName, sep = "") - packageStartupMessage("[SparkR] Initializing with classpath ", assemblyJarPath, "\n") - .sparkREnv$libname <- libname - .sparkREnv$assemblyJarPath <- assemblyJarPath } # Utility function that returns TRUE if we have an active connection to the @@ -111,8 +104,7 @@ sparkR.init <- function( } sparkMem <- Sys.getenv("SPARK_MEM", "512m") - jars <- suppressWarnings( - normalizePath(c(as.character(.sparkREnv$assemblyJarPath), as.character(sparkJars)))) + jars <- suppressWarnings(normalizePath(as.character(sparkJars))) # Classpath separator is ";" on Windows # URI needs four /// as from http://stackoverflow.com/a/18522792 @@ -123,34 +115,18 @@ sparkR.init <- function( collapseChar <- ";" uriSep <- "////" } - cp <- paste0(jars, collapse = collapseChar) - - yarn_conf_dir <- Sys.getenv("YARN_CONF_DIR", "") - if (yarn_conf_dir != "") { - cp <- paste(cp, yarn_conf_dir, sep = ":") - } sparkRExistingPort <- Sys.getenv("EXISTING_SPARKR_BACKEND_PORT", "") if (sparkRExistingPort != "") { sparkRBackendPort <- sparkRExistingPort } else { path <- tempfile(pattern = "backend_port") - if (Sys.getenv("SPARKR_USE_SPARK_SUBMIT", "") == "") { - launchBackend(classPath = cp, - mainClass = "org.apache.spark.api.r.SparkRBackend", - args = path, - javaOpts = paste("-Xmx", sparkMem, sep = "")) - } else { - # TODO: We should deprecate sparkJars and ask users to add it to the - # command line (using --jars) which is picked up by SparkSubmit - launchBackendSparkSubmit( - mainClass = "org.apache.spark.api.r.SparkRBackend", - args = path, - appJar = .sparkREnv$assemblyJarPath, - sparkHome = sparkHome, - sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "")) - } - # wait atmost 100 seconds for JVM to launch + launchBackend( + args = path, + sparkHome = sparkHome, + jars = jars, + sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "")) + # wait atmost 100 seconds for JVM to launch wait <- 0.1 for (i in 1:25) { Sys.sleep(wait) diff --git a/R/pkg/R/sparkRClient.R b/R/pkg/R/sparkRClient.R index 1fde20e86e9e9..26ecbd1f75a8c 100644 --- a/R/pkg/R/sparkRClient.R +++ b/R/pkg/R/sparkRClient.R @@ -34,37 +34,7 @@ connectBackend <- function(hostname, port, timeout = 6000) { con } -# Launch the SparkR backend using a call to 'system2'. -launchBackend <- function( - classPath, - mainClass, - args, - javaOpts = "-Xms2g -Xmx2g", - javaHome = Sys.getenv("JAVA_HOME")) { - if (.Platform$OS.type == "unix") { - java_bin_name = "java" - } else { - java_bin_name = "java.exe" - } - - if (javaHome != "") { - java_bin <- file.path(javaHome, "bin", java_bin_name) - } else { - java_bin <- java_bin_name - } - # Quote the classpath to make sure it handles spaces on Windows - classPath <- shQuote(classPath) - combinedArgs <- paste(javaOpts, "-cp", classPath, mainClass, args, sep = " ") - cat("Launching java with command ", java_bin, " ", combinedArgs, "\n") - invisible(system2(java_bin, combinedArgs, wait = F)) -} - -launchBackendSparkSubmit <- function( - mainClass, - args, - appJar, - sparkHome, - sparkSubmitOpts) { +launchBackend <- function(args, sparkHome, jars, sparkSubmitOpts) { if (.Platform$OS.type == "unix") { sparkSubmitBinName = "spark-submit" } else { @@ -77,11 +47,11 @@ launchBackendSparkSubmit <- function( sparkSubmitBin <- sparkSubmitBinName } - # Since this function is only used while launching R shell using spark-submit, - # the format we need to construct is - # spark-submit --class + if (jars != "") { + jars <- paste("--jars", jars) + } - combinedArgs <- paste("--class", mainClass, sparkSubmitOpts, appJar, args, sep = " ") + combinedArgs <- paste(sparkSubmitOpts, jars, "sparkr-shell", args, sep = " ") cat("Launching java with spark-submit command ", sparkSubmitBin, " ", combinedArgs, "\n") invisible(system2(sparkSubmitBin, combinedArgs, wait = F)) } diff --git a/core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala similarity index 97% rename from core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala rename to core/src/main/scala/org/apache/spark/deploy/RRunner.scala index e27fa14aa0f27..001777d172bae 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SparkRRunner.scala +++ b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.spark.api.r +package org.apache.spark.deploy import java.io._ import java.util.concurrent.{Semaphore, TimeUnit} @@ -24,11 +24,13 @@ import scala.collection.JavaConversions._ import org.apache.hadoop.fs.Path +import org.apache.spark.api.r.SparkRBackend + /** * Main class used to launch SparkR applications using spark-submit. It executes R as a * subprocess and then has it connect back to the JVM to access system properties etc. */ -object SparkRRunner { +object RRunner { def main(args: Array[String]) { val rFile = args(0) @@ -47,7 +49,6 @@ object SparkRRunner { rFile } - // Launch a SparkR backend server for the R process to connect to; this will let it see our // Java system properties etc. val sparkRBackend = new SparkRBackend() diff --git a/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala b/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala index 4f506be63fe59..10a91048406c6 100644 --- a/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala +++ b/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala @@ -77,6 +77,7 @@ object SparkSubmit { // Special primary resource names that represent shells rather than application jars. private val SPARK_SHELL = "spark-shell" private val PYSPARK_SHELL = "pyspark-shell" + private val SPARKR_SHELL = "sparkr-shell" private val CLASS_NOT_FOUND_EXIT_STATUS = 101 @@ -284,6 +285,13 @@ object SparkSubmit { } } + // Require all R files to be local + if (args.isR && !isYarnCluster) { + if (Utils.nonLocalPaths(args.primaryResource).nonEmpty) { + printErrorAndExit(s"Only local R files are supported: $args.primaryResource") + } + } + // The following modes are not supported or applicable (clusterManager, deployMode) match { case (MESOS, CLUSTER) => @@ -291,6 +299,9 @@ object SparkSubmit { case (STANDALONE, CLUSTER) if args.isPython => printErrorAndExit("Cluster deploy mode is currently not supported for python " + "applications on standalone clusters.") + case (STANDALONE, CLUSTER) if args.isR => + printErrorAndExit("Cluster deploy mode is currently not supported for R " + + "applications on standalone clusters.") case (_, CLUSTER) if isShell(args.primaryResource) => printErrorAndExit("Cluster deploy mode is not applicable to Spark shells.") case (_, CLUSTER) if isSqlShell(args.mainClass) => @@ -317,11 +328,32 @@ object SparkSubmit { } } - // In yarn-cluster mode for a python app, add primary resource and pyFiles to files - // that can be distributed with the job - if (args.isPython && isYarnCluster) { - args.files = mergeFileLists(args.files, args.primaryResource) - args.files = mergeFileLists(args.files, args.pyFiles) + // If we're running a R app, set the main class to our specific R runner + if (args.isR && deployMode == CLIENT) { + if (args.primaryResource == SPARKR_SHELL) { + args.mainClass = "org.apache.spark.api.r.SparkRBackend" + } else { + // If a R file is provided, add it to the child arguments and list of files to deploy. + // Usage: PythonAppRunner
[app arguments] + args.mainClass = "org.apache.spark.deploy.RRunner" + args.childArgs = ArrayBuffer(args.primaryResource) ++ args.childArgs + args.files = mergeFileLists(args.files, args.primaryResource) + } + } + + if (isYarnCluster) { + // In yarn-cluster mode for a python app, add primary resource and pyFiles to files + // that can be distributed with the job + if (args.isPython) { + args.files = mergeFileLists(args.files, args.primaryResource) + args.files = mergeFileLists(args.files, args.pyFiles) + } + + // In yarn-cluster mode for a R app, add primary resource to files + // that can be distributed with the job + if (args.isR) { + args.files = mergeFileLists(args.files, args.primaryResource) + } } // Special flag to avoid deprecation warnings at the client @@ -406,7 +438,7 @@ object SparkSubmit { // Add the application jar automatically so the user doesn't have to call sc.addJar // For YARN cluster mode, the jar is already distributed on each node as "app.jar" // For python files, the primary resource is already distributed as a regular file - if (!isYarnCluster && !args.isPython) { + if (!isYarnCluster && !args.isPython && !args.isR) { var jars = sysProps.get("spark.jars").map(x => x.split(",").toSeq).getOrElse(Seq.empty) if (isUserJar(args.primaryResource)) { jars = jars ++ Seq(args.primaryResource) @@ -439,14 +471,19 @@ object SparkSubmit { childMainClass = "org.apache.spark.deploy.yarn.Client" if (args.isPython) { val mainPyFile = new Path(args.primaryResource).getName - childArgs += ("--primary-py-file", mainPyFile) + childArgs +=("--primary-py-file", mainPyFile) if (args.pyFiles != null) { // These files will be distributed to each machine's working directory, so strip the // path prefix val pyFilesNames = args.pyFiles.split(",").map(p => (new Path(p)).getName).mkString(",") - childArgs += ("--py-files", pyFilesNames) + childArgs +=("--py-files", pyFilesNames) } - childArgs += ("--class", "org.apache.spark.deploy.PythonRunner") + childArgs +=("--class", "org.apache.spark.deploy.PythonRunner") + } else if (args.isR) { + // TODO(davies): support R in yarn + val mainFile = new Path(args.primaryResource).getName + childArgs +=("--primary-r-file", mainFile) + childArgs +=("--class", "org.apache.spark.deploy.RRunner") } else { if (args.primaryResource != SPARK_INTERNAL) { childArgs += ("--jar", args.primaryResource) @@ -591,15 +628,15 @@ object SparkSubmit { /** * Return whether the given primary resource represents a user jar. */ - private def isUserJar(primaryResource: String): Boolean = { - !isShell(primaryResource) && !isPython(primaryResource) && !isInternal(primaryResource) + private def isUserJar(res: String): Boolean = { + !isShell(res) && !isPython(res) && !isInternal(res) && !isR(res) } /** * Return whether the given primary resource represents a shell. */ - private[deploy] def isShell(primaryResource: String): Boolean = { - primaryResource == SPARK_SHELL || primaryResource == PYSPARK_SHELL + private[deploy] def isShell(res: String): Boolean = { + (res == SPARK_SHELL || res == PYSPARK_SHELL || res == SPARKR_SHELL) } /** @@ -623,6 +660,13 @@ object SparkSubmit { primaryResource.endsWith(".py") || primaryResource == PYSPARK_SHELL } + /** + * Return whether the given primary resource requires running R. + */ + private[deploy] def isR(primaryResource: String): Boolean = { + primaryResource.endsWith(".R") || primaryResource == SPARKR_SHELL + } + private[deploy] def isInternal(primaryResource: String): Boolean = { primaryResource == SPARK_INTERNAL } diff --git a/core/src/main/scala/org/apache/spark/deploy/SparkSubmitArguments.scala b/core/src/main/scala/org/apache/spark/deploy/SparkSubmitArguments.scala index 2250d5a28e4ef..9480e3385d51d 100644 --- a/core/src/main/scala/org/apache/spark/deploy/SparkSubmitArguments.scala +++ b/core/src/main/scala/org/apache/spark/deploy/SparkSubmitArguments.scala @@ -59,6 +59,7 @@ private[deploy] class SparkSubmitArguments(args: Seq[String], env: Map[String, S var verbose: Boolean = false var isPython: Boolean = false var pyFiles: String = null + var isR: Boolean = false var action: SparkSubmitAction = null val sparkProperties: HashMap[String, String] = new HashMap[String, String]() var proxyUser: String = null @@ -158,7 +159,7 @@ private[deploy] class SparkSubmitArguments(args: Seq[String], env: Map[String, S .getOrElse(sparkProperties.get("spark.executor.instances").orNull) // Try to set main class from JAR if no --class argument is given - if (mainClass == null && !isPython && primaryResource != null) { + if (mainClass == null && !isPython && !isR && primaryResource != null) { val uri = new URI(primaryResource) val uriScheme = uri.getScheme() @@ -211,9 +212,9 @@ private[deploy] class SparkSubmitArguments(args: Seq[String], env: Map[String, S printUsageAndExit(-1) } if (primaryResource == null) { - SparkSubmit.printErrorAndExit("Must specify a primary resource (JAR or Python file)") + SparkSubmit.printErrorAndExit("Must specify a primary resource (JAR or Python or R file)") } - if (mainClass == null && !isPython) { + if (mainClass == null && !isPython && !isR) { SparkSubmit.printErrorAndExit("No main class set in JAR; please specify one with --class") } if (pyFiles != null && !isPython) { @@ -414,6 +415,7 @@ private[deploy] class SparkSubmitArguments(args: Seq[String], env: Map[String, S opt } isPython = SparkSubmit.isPython(opt) + isR = SparkSubmit.isR(opt) false } diff --git a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java index 6ffdff63d3c78..0cba4458b3ae9 100644 --- a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java +++ b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java @@ -18,13 +18,7 @@ package org.apache.spark.launcher; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; import static org.apache.spark.launcher.CommandBuilderUtils.*; @@ -53,6 +47,20 @@ class SparkSubmitCommandBuilder extends AbstractCommandBuilder { */ static final String PYSPARK_SHELL_RESOURCE = "pyspark-shell"; + /** + * Name of the app resource used to identify the SparkR shell. The command line parser expects + * the resource name to be the very first argument to spark-submit in this case. + * + * NOTE: this cannot be "sparkr-shell" since that identifies the SparkR shell to SparkSubmit + * (see sparkR.R), and can cause this code to enter into an infinite loop. + */ + static final String SPARKR_SHELL = "sparkr-shell-main"; + + /** + * This is the actual resource name that identifies the SparkR shell to SparkSubmit. + */ + static final String SPARKR_SHELL_RESOURCE = "sparkr-shell"; + /** * This map must match the class names for available special classes, since this modifies the way * command line parsing works. This maps the class name to the resource to use when calling @@ -87,6 +95,10 @@ class SparkSubmitCommandBuilder extends AbstractCommandBuilder { this.allowsMixedArguments = true; appResource = PYSPARK_SHELL_RESOURCE; submitArgs = args.subList(1, args.size()); + } else if (args.size() > 0 && args.get(0).equals(SPARKR_SHELL)) { + this.allowsMixedArguments = true; + appResource = SPARKR_SHELL_RESOURCE; + submitArgs = args.subList(1, args.size()); } else { this.allowsMixedArguments = false; } @@ -98,6 +110,8 @@ class SparkSubmitCommandBuilder extends AbstractCommandBuilder { public List buildCommand(Map env) throws IOException { if (PYSPARK_SHELL_RESOURCE.equals(appResource)) { return buildPySparkShellCommand(env); + } else if (SPARKR_SHELL_RESOURCE.equals(appResource)) { + return buildSparkRCommand(env); } else { return buildSparkSubmitCommand(env); } @@ -223,7 +237,7 @@ private List buildPySparkShellCommand(Map env) throws IO firstNonEmptyValue(SparkLauncher.DRIVER_EXTRA_LIBRARY_PATH, conf, props)); // Store spark-submit arguments in an environment variable, since there's no way to pass - // them to shell.py on the comand line. + // them to shell.py on the command line. StringBuilder submitArgs = new StringBuilder(); for (String arg : buildSparkSubmitArgs()) { if (submitArgs.length() > 0) { @@ -243,6 +257,32 @@ private List buildPySparkShellCommand(Map env) throws IO return pyargs; } + private List buildSparkRCommand(Map env) throws IOException { + if (!appArgs.isEmpty() && appArgs.get(0).endsWith(".R")) { + appResource = appArgs.get(0); + appArgs.remove(0); + return buildCommand(env); + } + + Properties props = loadPropertiesFile(); + mergeEnvPathList(env, getLibPathEnvName(), + firstNonEmptyValue(SparkLauncher.DRIVER_EXTRA_LIBRARY_PATH, conf, props)); + + // Store spark-submit arguments in an environment variable, since there's no way to pass + // them to sparkR on the command line. + StringBuilder submitArgs = new StringBuilder(); + for (String arg : buildSparkSubmitArgs()) { + if (submitArgs.length() > 0) { + submitArgs.append(" "); + } + submitArgs.append(quoteForPython(arg)); + } + env.put("SPARKR_SUBMIT_ARGS", submitArgs.toString()); + + List args = new ArrayList(); + return args; + } + private boolean isClientMode(Properties userProps) { String userMaster = firstNonEmpty(master, (String) userProps.get(SparkLauncher.SPARK_MASTER)); // Default master is "local[*]", so assume client mode in that case. From 043959e7b2d256b9dbf66bca05061223dceb5da0 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 15:48:22 -0700 Subject: [PATCH 644/687] cleanup --- R/pkg/NAMESPACE | 45 +++++++++---------- R/pkg/inst/sparkR-submit | 94 ---------------------------------------- 2 files changed, 23 insertions(+), 116 deletions(-) delete mode 100755 R/pkg/inst/sparkR-submit diff --git a/R/pkg/NAMESPACE b/R/pkg/NAMESPACE index a5c142e0cae2b..4ec17d20fe720 100644 --- a/R/pkg/NAMESPACE +++ b/R/pkg/NAMESPACE @@ -125,37 +125,40 @@ exportMethods("columns", exportClasses("Column") -exportMethods("asc", +exportMethods("abs", + "alias", + "approxCountDistinct", + "asc", + "avg", + "cast", + "contains", + "countDistinct", "desc", + "endsWith", + "getField", + "getItem", + "isNotNull", + "isNull", "last", - "lower", - "upper", "like", + "lower", + "max", + "mean", + "min", "rlike", + "sqrt", "startsWith", - "endsWith", "substr", - "contains", - "getField", - "getItem", - "abs", - "sqrt", - "min", - "max", "sum", - "avg", - "mean", - "isNull", - "isNotNull", - "alias", - "cast", - "approxCountDistinct", - "countDistinct", - "sumDistinct") + "sumDistinct" + "upper") exportClasses("GroupedData") exportMethods("agg") +export("sparkRSQL.init", + "sparkRHive.init") + export("cacheTable", "clearCache", "createDataFrame", @@ -172,7 +175,5 @@ export("cacheTable", "toDF", "uncacheTable") -export("sparkRSQL.init", - "sparkRHive.init") export("print.structType", "print.structField") diff --git a/R/pkg/inst/sparkR-submit b/R/pkg/inst/sparkR-submit deleted file mode 100755 index 01a69baae6ed6..0000000000000 --- a/R/pkg/inst/sparkR-submit +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# This script launches SparkR through spark-submit. This accepts -# the same set of options as spark-submit and requires SPARK_HOME -# to be set. - -FWDIR="$(cd `dirname $0`; pwd)" - -export PROJECT_HOME="$FWDIR" - -export SPARKR_JAR_FILE="$FWDIR/../../../../assembly/target/scala-2.10/spark-assembly-1.3.0-SNAPSHOT-hadoop1.0.4.jar" - -# Exit if the user hasn't set SPARK_HOME -if [ ! -f "$SPARK_HOME/bin/spark-submit" ]; then - echo "SPARK_HOME must be set to use sparkR-submit" - exit 1 -fi - -source "$SPARK_HOME/bin/utils.sh" - -function usage() { - echo "Usage: ./sparkR-submit [options]" 1>&2 - "$SPARK_HOME"/bin/spark-submit --help 2>&1 | grep -v Usage 1>&2 - exit 0 -} - -if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then - usage -fi - -# Build up arguments list manually to preserve quotes and backslashes. -SUBMIT_USAGE_FUNCTION=usage -gatherSparkSubmitOpts "$@" - -SPARKR_SUBMIT_ARGS="" -whitespace="[[:space:]]" -for i in "${SUBMISSION_OPTS[@]}" -do - if [[ $i =~ \" ]]; then i=$(echo $i | sed 's/\"/\\\"/g'); fi - if [[ $i =~ $whitespace ]]; then i=\"$i\"; fi - SPARKR_SUBMIT_ARGS="$SPARKR_SUBMIT_ARGS $i" -done -export SPARKR_SUBMIT_ARGS -export SPARKR_USE_SPARK_SUBMIT=1 - -NUM_APPLICATION_OPTS=${#APPLICATION_OPTS[@]} - -# If a R file is provided, directly run spark-submit. -if [[ $NUM_APPLICATION_OPTS -gt 0 && "${APPLICATION_OPTS[0]}" =~ \.R$ ]]; then - - primary="${APPLICATION_OPTS[0]}" - shift - # Set the main class to SparkRRunner and add the primary R file to --files to make sure its copied to the cluster - echo "Running $SPARK_HOME/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files $primary ${SUBMISSION_OPTS[@]} $SPARKR_JAR_FILE $primary" "${APPLICATION_OPTS[@]:1}" - exec "$SPARK_HOME"/bin/spark-submit --class edu.berkeley.cs.amplab.sparkr.SparkRRunner --files "$primary" "${SUBMISSION_OPTS[@]}" "$SPARKR_JAR_FILE" "$primary" "${APPLICATION_OPTS[@]:1}" -else - - export R_PROFILE_USER="/tmp/sparkR.profile" - - # If we don't have an R file to run, run R shell -cat > /tmp/sparkR.profile << EOF -.First <- function() { - projecHome <- Sys.getenv("PROJECT_HOME") - Sys.setenv(NOAWT=1) - .libPaths(c(paste(projecHome,"/..", sep=""), .libPaths())) - require(SparkR) - sc <- sparkR.init() - sqlCtx <- sparkRSQL.init(sc) - assign("sc", sc, envir=.GlobalEnv) - assign("sqlCtx", sqlCtx, envir=.GlobalEnv) - cat("\n Welcome to SparkR!") - cat("\n Spark context is available as sc, SQL Context is available as sqlCtx\n") -} -EOF - R - -fi From f7b69363acf2ca31c41ea2a3e185f707682c20d4 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 16:07:25 -0700 Subject: [PATCH 645/687] remove Spark prefix for class --- .../r/{SparkRBackend.scala => RBackend.scala} | 12 +++---- ...endHandler.scala => RBackendHandler.scala} | 6 ++-- .../org/apache/spark/api/r/SparkRConf.scala | 35 ------------------- .../org/apache/spark/deploy/RRunner.scala | 6 ++-- .../org/apache/spark/deploy/SparkSubmit.scala | 2 +- 5 files changed, 13 insertions(+), 48 deletions(-) rename core/src/main/scala/org/apache/spark/api/r/{SparkRBackend.scala => RBackend.scala} (94%) rename core/src/main/scala/org/apache/spark/api/r/{SparkRBackendHandler.scala => RBackendHandler.scala} (97%) delete mode 100644 core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala diff --git a/core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala b/core/src/main/scala/org/apache/spark/api/r/RBackend.scala similarity index 94% rename from core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala rename to core/src/main/scala/org/apache/spark/api/r/RBackend.scala index 424ed8595ca01..18631e62e7973 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SparkRBackend.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RBackend.scala @@ -32,16 +32,16 @@ import io.netty.handler.codec.bytes.{ByteArrayDecoder, ByteArrayEncoder} /** * Netty-based backend server that is used to communicate between R and Java. */ -class SparkRBackend { +class RBackend { var channelFuture: ChannelFuture = null var bootstrap: ServerBootstrap = null var bossGroup: EventLoopGroup = null def init(): Int = { - bossGroup = new NioEventLoopGroup(SparkRConf.numServerThreads) + bossGroup = new NioEventLoopGroup(2) val workerGroup = bossGroup - val handler = new SparkRBackendHandler(this) + val handler = new RBackendHandler(this) bootstrap = new ServerBootstrap() .group(bossGroup, workerGroup) @@ -89,13 +89,13 @@ class SparkRBackend { } -object SparkRBackend { +object RBackend { def main(args: Array[String]) { if (args.length < 1) { - System.err.println("Usage: SparkRBackend ") + System.err.println("Usage: RBackend ") System.exit(-1) } - val sparkRBackend = new SparkRBackend() + val sparkRBackend = new RBackend() try { // bind to random port val boundPort = sparkRBackend.init() diff --git a/core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala b/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala similarity index 97% rename from core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala rename to core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala index 9d6f255856bb1..e73a2063b3268 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SparkRBackendHandler.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala @@ -28,12 +28,12 @@ import io.netty.channel.SimpleChannelInboundHandler import org.apache.spark.api.r.SerDe._ /** - * Handler for SparkRBackend - * TODO: This is marked as sharable to get a handle to SparkRBackend. Is it safe to re-use + * Handler for RBackend + * TODO: This is marked as sharable to get a handle to RBackend. Is it safe to re-use * this across connections ? */ @Sharable -class SparkRBackendHandler(server: SparkRBackend) +class RBackendHandler(server: RBackend) extends SimpleChannelInboundHandler[Array[Byte]] { override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { diff --git a/core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala b/core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala deleted file mode 100644 index eb69e49893467..0000000000000 --- a/core/src/main/scala/org/apache/spark/api/r/SparkRConf.scala +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.spark.api.r - -/** - * Configuration options for SparkRBackend server - */ -object SparkRConf { - - def getSystemProperty(name: String, default: String) = { - Option(System.getProperty(name)).getOrElse(default) - } - - def getIntProperty(name: String, default: Int) = { - Integer.parseInt(getSystemProperty(name, default.toString)) - } - - // Number of threads to use in the Netty server - val numServerThreads = getIntProperty("sparkr.backend.threads", 2) -} diff --git a/core/src/main/scala/org/apache/spark/deploy/RRunner.scala b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala index 001777d172bae..934965aa0d056 100644 --- a/core/src/main/scala/org/apache/spark/deploy/RRunner.scala +++ b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala @@ -24,7 +24,7 @@ import scala.collection.JavaConversions._ import org.apache.hadoop.fs.Path -import org.apache.spark.api.r.SparkRBackend +import org.apache.spark.api.r.RBackend /** * Main class used to launch SparkR applications using spark-submit. It executes R as a @@ -51,7 +51,7 @@ object RRunner { // Launch a SparkR backend server for the R process to connect to; this will let it see our // Java system properties etc. - val sparkRBackend = new SparkRBackend() + val sparkRBackend = new RBackend() @volatile var sparkRBackendPort = 0 val initialized = new Semaphore(0) val sparkRBackendThread = new Thread("SparkR backend") { @@ -63,7 +63,7 @@ object RRunner { } sparkRBackendThread.start() - // Wait for SparkRBackend initialization to finish + // Wait for RBackend initialization to finish if (initialized.tryAcquire(backendTimeout, TimeUnit.SECONDS)) { // Launch R val returnCode = try { diff --git a/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala b/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala index 10a91048406c6..26b6eaac0c28e 100644 --- a/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala +++ b/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala @@ -331,7 +331,7 @@ object SparkSubmit { // If we're running a R app, set the main class to our specific R runner if (args.isR && deployMode == CLIENT) { if (args.primaryResource == SPARKR_SHELL) { - args.mainClass = "org.apache.spark.api.r.SparkRBackend" + args.mainClass = "org.apache.spark.api.r.RBackend" } else { // If a R file is provided, add it to the child arguments and list of files to deploy. // Usage: PythonAppRunner
[app arguments] From e4f19379bf777c3c2a3571734fe38375d63c165b Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 16:17:03 -0700 Subject: [PATCH 646/687] Remove DFC example --- examples/src/main/r/dfc/DFC.R | 411 ----------- examples/src/main/r/dfc/README.txt | 19 - examples/src/main/r/dfc/example.mat | 1001 --------------------------- examples/src/main/r/dfc/maskUV.cpp | 52 -- 4 files changed, 1483 deletions(-) delete mode 100644 examples/src/main/r/dfc/DFC.R delete mode 100644 examples/src/main/r/dfc/README.txt delete mode 100644 examples/src/main/r/dfc/example.mat delete mode 100644 examples/src/main/r/dfc/maskUV.cpp diff --git a/examples/src/main/r/dfc/DFC.R b/examples/src/main/r/dfc/DFC.R deleted file mode 100644 index 0993637a0f9d3..0000000000000 --- a/examples/src/main/r/dfc/DFC.R +++ /dev/null @@ -1,411 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - - -# Import required matrix and C interface packages -library(SparkR) -library(MASS) -library('Matrix') -library(Rcpp) -library(svd) - -# Get the command line arguments -args <- commandArgs(trailing = TRUE) - -if (length(args) < 1) { - print("Usage: DFC.R [] ") - q("no") -} - -# Takes a pair (matrix, iterations) and applies the base factorization algorithm for the specified iterations -factorCols <- function(itersAndMat) { - iters <- itersAndMat[[1]][[1]] - mat <- itersAndMat[[1]][[2]] - UV <- apgBase(mat,iters) - list(UV) -} - -# Fast rBind for a list of matrices by pre-allocating -fastRowBind <- function(matrixList) { - rows <- sum(unlist(lapply(matrixList, function(mat) dim(mat)[1]))) - cols <- dim(matrixList[[1]])[2] - mat <- matrix(0.0,nrow=rows,ncol=cols) - rowIdx <- 1 - for (M in matrixList) { - Mrows <- dim(M)[1] - mat[rowIdx:(rowIdx + Mrows - 1),] <- as.matrix(M) - rowIdx <- rowIdx + Mrows - } - mat -} - -# Fast cBind for a list of matrices by pre-allocating -fastColBind <- function(matrixList) { - cols <- sum(unlist(lapply(matrixList, function(mat) dim(mat)[2]))) - rows <- dim(matrixList[[1]])[1] - mat <- matrix(0.0,nrow=rows,ncol=cols) - colIdx <- 1 - for (M in matrixList) { - Mcols <- dim(M)[2] - mat[,colIdx:(colIdx + Mcols - 1)] <- as.matrix(M) - colIdx = colIdx + Mcols - } - mat -} - -# Takes a list of factors of submatrices and projects them -# onto the column space of the first submatrix -# The factors (U,V) should be m-by-r and n-by-r respectively -dfcProject <- function(factorList) { - tproj <- proc.time() - U_1 <- factorList[[1]][[1]] - V_1 <- factorList[[1]][[2]] - #pseudoinverses - U_1pinv <- ginv(U_1) - V_1pinv <- ginv(V_1) - numParts <- length(factorList) - partSize <- dim(U_1)[1] %/% numParts - r <- dim(U_1)[2] - # To be returned - X_A <- U_1 - X_B <- V_1 - - for (pair in tail(factorList,-1)){ - U_i <- pair[[1]] - V_i <- pair[[2]] - # We want to have U_1*Vhat_i = U_i*V_i, so we basically just solve - Vhat_i <- t(((V_1pinv %*% V_1)%*%(U_1pinv %*% U_i)) %*% t(V_i)) - X_B <- rBind(X_B, Vhat_i) - } - projTime <- as.numeric((proc.time() - tproj)["elapsed"]) - list(X_A, X_B,projTime) -} - -# Randomized Projection method for the C step of DFC -dfcRandProject <- function(factorList) { - trproj <- proc.time() - V_1 <- factorList[[1]][[2]] - slices <- length(factorList) - partSize <- dim(V_1)[1] - n <- sum(unlist(lapply(factorList, function(UV) dim(UV[[2]])[1]))) - k <- dim(V_1)[2] - - # random projection default parameters - p <- 5 - q <- 2 - - # Random Gaussian matrix, break into chunks for simpler processing - G <- Matrix(rnorm(n*(k+p),mean = 0,sd = 1),n,k+p) - Glist <- lapply(1:slices, function(i) G[(1 + floor((i-1)*n/slices)):floor(i*n/slices),,drop=FALSE]) - - # Initial QR factorization - # Y = AG then factor Y = QR - Ylist <- mapply(function(UV,G) UV[[1]] %*% (t(UV[[2]]) %*% G),factorList,Glist,SIMPLIFY = F) - Y <- fastColBind(Ylist) - QR <- qr(Y) - Q <- qr.Q(QR) - - for (j in 1:q) { - # Yhat = A'*Q then factor Yhat = Qhat*Rhat - YhatList <- lapply(factorList, function(UV) UV[[2]] %*% (t(UV[[1]]) %*% Q)) - Yhat <- fastRowBind(YhatList) - QRhat <- qr(Yhat) - Qhat <- qr.Q(QRhat) - QhatList <- lapply(1:slices, function(i) Qhat[(1 + floor((i-1)*n/slices)):floor(i*n/slices),,drop=FALSE]) - - # Y = A*Qhat then factor Y = Q*R - Ylist <- mapply(function(UV,Qhat) UV[[1]] %*% (t(UV[[2]]) %*% Qhat),factorList,QhatList,SIMPLIFY =F) - Y <- Reduce('+',Ylist) - QR <- qr(Y) - Q <- qr.Q(QR) - } - - # Take only the first k columns of Q - Q <- Q[,1:k] - - # Finally project (Q*Q^+)*M - Qpinv <- ginv(Q) - Vlist <- lapply(factorList, function(UV) (Qpinv %*% UV[[1]]) %*% t(UV[[2]])) - V <- t(fastColBind(Vlist)) - randprojTime <- as.numeric((proc.time() - trproj)["elapsed"]) - list(Q,V,randprojTime) -} - -# Accelerated Proximal Gradient algorithm for factoring. -apgBase <- function(mat,maxiter) { - - tbase <- proc.time() # Timing code - - # load required packages - library('Matrix') - library(Rcpp) - library(svd) - - # Load and compile the fast C++ code - sourceCpp('maskUV.cpp') - - ######## Set Initial Parameters ##################################### - m <- dim(mat)[1] - n <- dim(mat)[2] - - IIJJ <- which(mat != 0,arr.ind = T) # list of nonzero indices - II <- IIJJ[,1] # nonzero row indices - JJ <- IIJJ[,2] # nonzero col indices - - L <- 1 # Lipschitz constant for 1/2*||Ax - b||_2^2 - t <- 1 - told <- t - beta <- 0 # beta = (told - 1)/t - num_sv <- 5 # number of SV to look at - num_pos_sv <- 5 # initial number of positive singular values - - U <- Matrix(0,m,1) # Factor of mat - Uold <- U - V <- Matrix(0,n,1) # Factor of mat - Vold <- V - mX <- sparseMatrix(m,n,x=0) # Sparse matrix approximating mat - mXold <- mX # mX of previous iteration - mY <- mX # Sparse matrix "average" of Xold and X - - # SVD Truncation Parameters - mu0 <- norm(mat,type="F") - mu <- 0.1*mu0 - muTarget <- 10^(-4)*mu0 - cat("mu :", mu, "\n") - ###################################################################### - - for(iter in 1:maxiter) { - cat("iteration: ",iter,"\n") - # Get query access to G = Y - 1/L*Grad - Grad <- mY - mat - # query oracle to Gk - f <- function(z) as.numeric((1+beta)*(U %*% (t(V) %*% z)) - beta*(Uold %*% (t(Vold) %*% z)) - 1/L*(Grad %*% z)) - # query oracle to Gk' - tf <- function(z) as.numeric((1+beta)*(V %*% (t(U) %*% z)) - beta*(Vold %*% (t(Uold) %*% z)) - 1/L*(t(Grad) %*% z)) - - # Create External Matrix - G <- extmat(f, tf, m, n) - - # Compute partial SVD - svd <- propack.svd(G, neig = num_sv) - - # Update Params - Uold <- U - Vold <- V - mXold <- mX - told <- t - - # Truncate the SV's and update the number of SV's to look at - s <- svd$d - Shlf <- sqrt(s[which(s > mu/L)]) - if(num_sv == num_pos_sv) { - num_sv <- num_pos_sv + 5 - } - else { - num_sv <- num_pos_sv + 1 - } - cat("num sv: ",num_sv,"\n") - # update number of positive singular values of X^k AFTER the above test - num_pos_sv <- length(Shlf) - - # Compute the factors U and V from the SVD - Sig <- diag(x = Shlf,num_pos_sv,num_pos_sv) - U <- (svd$u[,1:num_pos_sv] %*% Sig) - V <- (svd$v[,1:num_pos_sv] %*% Sig) - - # Compute mX = UV' using fast loops in C - msUV <- maskUV(as.matrix(U),as.matrix(V),II,JJ) # Call into C++ code - mX <- sparseMatrix(i=II,j=JJ,x=msUV,dims=c(m,n)) - - # Update Parameters - t <- (1+sqrt(1+4*t^2))/2 - beta <- (told - 1)/t - mY <- (1+beta)*mX - beta*mXold - mu <- max(0.7*mu,muTarget) - cat("mu: ",mu,"\n") - } - # Output - apgtime <- as.numeric((proc.time() - tbase)["elapsed"]) #Timing Code - cat("U: ", dim(U),"\n") - cat("V: ", dim(V),"\n") - cat("RMSE for submatrix: ",errorCal(mat,U,V),"\n") - - list(U,V,apgtime) -} - - -# Base stochastic gradient descent algorithm for matrix completion -sgdBase <- function(mat) { - - # Set Parameters - m <- dim(mat)[1] - n <- dim(mat)[2] - lrate <- .04 # learning rate - k <- .04 # parameter used to minimize over-fitting - min_impr <- .001 # min improvement - init <- 0.2 # initial value for features - rank <- 10 # rank of feature vector - min_itrs <- 10 - - # Initialize - minval <- min(mat) - maxval <- max(mat) - row_feats <- matrix(rnorm(rank*m,mean=0,sd = 0.2/sqrt(sqrt(rank))),rank,m) - col_feats <- matrix(rnorm(rank*m,mean = 0,sd = 0.2/sqrt(sqrt(rank))),rank,n) - rmse <- 2.0 # set rmse - rmse_prev <- 2.0 # set previous rmse - - # Find nonzero entries - nonzero_rowscols <- which(mat != 0,arr.ind = T) - nonzero_rows <- nonzero_rowscols[,1] - nonzero_cols <- nonzero_rowscols[,2] - nonzero_entries <- mat[nonzero_rowscols] - num_nonzeros <- length(nonzero_entries) - - # Each iterate descends in the space of rank i matrices - for(i in 1:rank) { - cat("rank: ", i, "\n") - t <- 0 - impr <- 0.0 - # Descend as long as we can make improvements - while(t < min_itrs || impr > min_impr) { - sq_err <- 0.0 - - for(j in 1:num_nonzeros) { - # find predicted val - predval <- t(row_feats[,nonzero_rows[j] ]) %*% col_feats[,nonzero_cols[j] ] - - # apply cut off - if(predval < minval) { predval <- minval } - if(predval > maxval) { predval <- maxval } - - # Find Error - err <- nonzero_entries[j] - predval - sq_err <- sq_err + err*err + k/2.0 * ((row_feats[i, nonzero_rows[j] ])^2) * ((col_feats[i, nonzero_cols[j] ])^2) - - # Update row and col features - new_row_feat <- (1-lrate*k)*row_feats[i, nonzero_rows[j] ] + lrate*err*col_feats[i, nonzero_cols[j] ] - new_col_feat <- (1-lrate*k)*col_feats[i, nonzero_cols[j] ] + lrate*err*row_feats[i, nonzero_rows[j] ] - row_feats[i, nonzero_rows[j] ] <- new_row_feat - col_feats[i, nonzero_cols[j] ] <- new_col_feat - } - # Calculate RMSE and improvement - rmse_prev <- rmse - rmse <- sqrt(sq_err/num_nonzeros) - cat("root mean squared error: ",rmse) - cat("\n") - impr <- rmse_prev - rmse - t <- t + 1 - } - } - cat("RMSE for submatrix: ",rmse,"\n") - list(row_feats,col_feats) -} - -# Calculate the root mean squared error of the matrix -# factorization UV' on the non-zero entries of mat -errorCal <- function(mat, U, V){ - # Find nonzero entries - IIJJ <- which(mat != 0,arr.ind = T) - numNonzero <- nnzero(mat) - II <- IIJJ[,1] - JJ <- IIJJ[,2] - mX <- sparseMatrix(i=II,j=JJ,x=maskUV(as.matrix(U),as.matrix(V),II,JJ),dims=dim(mat)) # Call into C++ code - # Frobenius norm/sqrt(num_nonzero) = root mean squared error - rmse <- norm(mat - mX,type = 'F')/sqrt(numNonzero) - rmse -} - -# Divide factor combine -dfc <- function(mat, sc, slices, iters, randProject=TRUE) { - sourceCpp('maskUV.cpp') - - # Cut the matrix by columns into several submatrices, one for each slice of computation - cols <- dim(mat)[2] - listMat <- lapply(1:slices, function(i) list(iters,mat[,(1 + floor((i-1)*cols/slices)):floor(i*cols/slices),drop=FALSE])) - - tover <- proc.time() # Timing Code - - # Create the RDD - subMatRDD <- parallelize(sc,listMat,slices) - - overhead <- as.numeric((proc.time() - tover)["elapsed"]) # Timing Code - - # factor each slice - factorsRDD <- lapplyPartition(subMatRDD,factorCols) - - # collect the results - factorList <- collect(factorsRDD) - matrixList <- lapply(seq(1,length(factorList)), function(i) list(factorList[[i]][[1]],factorList[[i]][[2]])) - subTimeList <- lapply(seq(1,length(factorList)), function(i) factorList[[i]][[3]]) - - # Timing Code - subTime <- max(unlist(subTimeList)) - cat("Time for subproblems: \n") - print(subTimeList) - - # Collect the results and project them onto a low rank matrix - if(randProject) { - cat("Doing random projection to combine submatrices...\n") - result <- dfcRandProject(matrixList) - } else { - cat("Projecting all submatrices onto first submatrix...\n") - result <- dfcProject(matrixList) - } - - # Timing Code - projTime <- result[[3]] - cat("Time for collection: ",projTime,"\n") - - # Compute the error in the prediction - error <- errorCal( mat, result[[1]], result[[2]]) - list(error,overhead,subTime,projTime) -} - -# Driver Code ############################################# - -# Initialize the spark context -sc <- sparkR.init(args[[1]], "DFCR") -slices <- ifelse(length(args) > 1, as.integer(args[[2]]),2) - -# Read matrix from file -maskedFile <- args[[3]] -maskedM <- readMM(maskedFile) -dims <- dim(maskedM)[1] -revealedEntries <- nnzero(maskedM) - -# Number of Iterations to run base algorithm -iterations <- args[[4]] - -# Determine Projection method -randProj <- T -if(length(args) > 4) { - if(args[[5]] == 'F') { - randProj <- F - } -} - -ttot <- proc.time() # Timing Code - -# Run DFC -outs <- dfc(maskedM, sc, slices, iterations, randProject=randProj) - -totalTime <- as.numeric((proc.time() - ttot)["elapsed"]) # Timing Code - -cat("RMSE for the entire matrix: ",outs[[1]],"\n") -cat("Total time for DFC: ",totalTime,"\n") -outs diff --git a/examples/src/main/r/dfc/README.txt b/examples/src/main/r/dfc/README.txt deleted file mode 100644 index d81c4812771b7..0000000000000 --- a/examples/src/main/r/dfc/README.txt +++ /dev/null @@ -1,19 +0,0 @@ -First, run R. Within the R interpreter, run: - -install.packages("Rcpp") -install.packages("svd") - -You are now ready to run our implementation of DFC with SparkR! -Type the following into the command line: - -./SparkR DFC.R [] - - Should be in matrix market format. We have included - a sample matrix file, called "example.mat", which is a - 100x100 entry noisy gaussain matrix with 10% revealed. - - is the number of iterations - - = T if you want to use the randomized projection, - F otherwise. - diff --git a/examples/src/main/r/dfc/example.mat b/examples/src/main/r/dfc/example.mat deleted file mode 100644 index cd0829b849cfc..0000000000000 --- a/examples/src/main/r/dfc/example.mat +++ /dev/null @@ -1,1001 +0,0 @@ -%%MatrixMarket matrix coordinate real general -100 100 999 -3 1 -.9650753891727823 -13 1 .027442759272197498 -17 1 .2733140617433729 -18 1 -.7340556416756879 -27 1 .15588124326702052 -33 1 .5152452067181288 -46 1 .7782024486888124 -47 1 -.046467679395642655 -52 1 2.5849127359270425 -70 1 -.6645107891628912 -94 1 -1.4008796914290222 -95 1 .029205396733255146 -6 2 1.0917691197736878 -9 2 1.2829334312850245 -11 2 -.6771057020935008 -30 2 1.392068464484814 -35 2 .8178866830669387 -43 2 2.583004235006646 -51 2 1.1056057642348962 -57 2 .7008387144910388 -60 2 1.3965055432991407 -62 2 -.15018293135481828 -96 2 1.269315340807692 -11 3 -1.0719098236708575 -15 3 .17479499000508555 -31 3 .25752051387941277 -34 3 -.011221359864719036 -37 3 -.03366266343777756 -62 3 .5308770016366252 -81 3 -.6006198758028332 -94 3 1.5664515498542577 -9 4 -2.222347545100131 -33 4 -.07275217848108888 -35 4 .16164355855860033 -42 4 -.46745196436470215 -45 4 -1.418917590113682 -51 4 -.24783087679019522 -55 4 -.09724093258671665 -65 4 1.18834324100774 -78 4 -.3724319385918872 -91 4 -.813073368541914 -3 5 .5802952119439417 -26 5 .7508738659433 -34 5 .1983679895836788 -43 5 -.4041519082679409 -45 5 .2644758766555975 -60 5 -.9548434758163352 -76 5 1.4606359276072767 -88 5 .3633759721002092 -99 5 .44185470031741747 -27 6 -.7036214465154359 -28 6 .11899233413999968 -31 6 -1.0297826767976141 -37 6 -1.1229068243819214 -40 6 .23647579440023325 -59 6 -.5394989649712639 -68 6 -.5171832181973068 -73 6 .697420086059468 -77 6 .28219078057589714 -100 6 -.5247532019579773 -5 7 1.6716266984909676 -13 7 .7674743791931149 -24 7 .9171772694010467 -28 7 -.44069243096180744 -38 7 -1.4100847590644683 -42 7 -.7873746333696605 -59 7 3.0794586412797273 -68 7 -.8809456780247451 -91 7 -1.6802601373883534 -5 8 -.4572407222034704 -11 8 1.6831183520240227 -12 8 .17103201256166278 -22 8 -1.6027535639813317 -49 8 -1.254770165813688 -58 8 1.220455639026425 -62 8 .6106402138558082 -65 8 -1.4203894663440857 -67 8 -.4210197883370592 -73 8 -.6457985842010214 -90 8 -.2846438143608595 -91 8 .6689373650801862 -92 8 .4507027005290763 -93 8 .013375040956371292 -98 8 .8000883276001304 -100 8 -.23166642865355933 -7 9 -.2695987639301383 -11 9 .08122949278860982 -19 9 -.4254467155741001 -57 9 1.1554682773488354 -93 9 -.3041621585664956 -99 9 .3333309067246158 -2 10 .20235070713936648 -5 10 -.39342765703074917 -15 10 .526449224539627 -17 10 -1.1289369517060661 -36 10 -.5954045660047362 -40 10 -1.3587057284982906 -73 10 -1.682319164199287 -75 10 -1.5835821504748968 -76 10 .1683552060088619 -81 10 -.9681792221938608 -83 10 -1.5022564522647506 -94 10 1.060613526913584 -100 10 .12213898768682727 -24 11 1.7926073783421628 -34 11 .13442534982389193 -42 11 -.3474116686316312 -53 11 .45496074402325803 -60 11 .13846668190804068 -65 11 -1.4426319734131623 -72 11 -.17315651553577982 -91 11 .6757652395015319 -9 12 .7253699533395683 -19 12 -.13452900334166526 -21 12 .3000679595863597 -31 12 .5807155245386809 -38 12 -.6555190261032318 -59 12 -.012975256197501108 -63 12 .2297454709640932 -67 12 .03215381943206927 -69 12 .5024819096630377 -79 12 -.15331803336218164 -17 13 -2.7279710181191827 -60 13 .3479597196471941 -94 13 .681388798273315 -5 14 -.6293419600550545 -13 14 .23752021998964926 -20 14 .29689040441722164 -24 14 1.240866582325607 -48 14 -.04497152654674779 -55 14 -1.013797193675181 -62 14 .7199580478284748 -79 14 1.0694141411835443 -88 14 .05578851780227162 -2 15 -2.1939443806859984 -5 15 .6950997299592981 -7 15 .9901792256766214 -16 15 1.1641995027967218 -19 15 1.4219368132012076 -21 15 .8095637560950488 -36 15 -.014548187482846558 -37 15 -.524655051422456 -54 15 -.12162921839430216 -73 15 1.1128204680932823 -93 15 .22629843107386427 -100 15 1.1506489936140627 -2 16 .08608785921803197 -4 16 -.19056880469303694 -8 16 1.1716882133757454 -36 16 .6507107469406057 -43 16 -1.095291659551676 -52 16 -1.0033701984223022 -54 16 1.5241895558221108 -55 16 .08499004068974017 -44 17 2.413697825242908 -48 17 -1.1884884817811106 -60 17 -.7969418638176379 -78 17 -.6591385147037204 -88 17 .0294211698408242 -5 18 -.14680606553487255 -22 18 .012065833767345852 -24 18 1.1789923122933506 -42 18 .3785696563562799 -45 18 1.1844146316673922 -50 18 -.44767873246245554 -65 18 -2.054447785638157 -68 18 -.7340096718154966 -75 18 -1.1052191173623094 -79 18 1.4622576175963728 -81 18 -1.7782489722198485 -82 18 -2.068687803283775 -4 19 -.17534731597203404 -31 19 .11450298053035049 -43 19 -2.6438681701130267 -57 19 .46290294044444663 -65 19 -.1701701271921887 -67 19 -.29825968589917184 -69 19 -.7623745273027625 -73 19 -1.1003895324844024 -75 19 .1417648820677111 -76 19 .5354821167484654 -85 19 1.345679017067255 -93 19 .05107962177424269 -12 20 -.6871097075184339 -16 20 .9073464198293397 -25 20 -.6389147101966118 -26 20 .08646891397296429 -48 20 -.8101653810047662 -66 20 1.2472630067601629 -74 20 -1.3814526881783082 -78 20 .060860988976387594 -91 20 -.8343741650290685 -20 21 -.1430173346485228 -34 21 1.1979882977654301 -62 21 .13255327348378948 -76 21 -.4458095205771501 -90 21 -.6106018871169578 -1 22 -.24339779814874588 -6 22 .5760078283484324 -15 22 .8621914658919236 -16 22 -.2448301478395037 -24 22 1.4861519551138007 -53 22 -.30375509450366023 -54 22 .21509524224074755 -60 22 -.1418954446752529 -77 22 -.9303058636360312 -96 22 .2536829129415404 -17 23 .6429764135852559 -21 23 -.6354952198226915 -22 23 -.6161891408446064 -25 23 -.4214625868365492 -27 23 1.5051405552915462 -38 23 .5165551103527026 -43 23 .15679242479151784 -61 23 -1.883054926037478 -63 23 .2687011300788329 -66 23 -.11017651229375537 -73 23 .4661697879795276 -74 23 .3486430622774991 -79 23 -.02276162103790169 -90 23 -1.0058635297205267 -92 23 -.25061623527633886 -93 23 -.6334186175301786 -7 24 .8778720925498023 -14 24 .069426847289812 -19 24 1.3639965656485844 -20 24 -.048463239318999526 -31 24 -.4217038752603968 -34 24 .9187807748614002 -39 24 .3271768908953827 -49 24 1.4041217315876702 -53 24 -.705270234614411 -56 24 .4295319231281637 -57 24 -.8003846627128524 -84 24 .5450701250109211 -1 25 -.6003378517358834 -6 25 -.572547865378922 -11 25 .39223024268169876 -22 25 -1.9618177853284424 -26 25 .5978950813654393 -38 25 .3745291779554377 -50 25 .3633351897627036 -51 25 -1.0828323997556863 -64 25 -.6457278763381132 -72 25 -1.6303897784966221 -81 25 1.0251765564243354 -83 25 .4927164381834852 -96 25 -2.298778368262911 -98 25 .3731635967971261 -11 26 .7322822994753085 -12 26 -.23526623649783307 -38 26 1.504272823092781 -56 26 .48770626105185766 -66 26 .5475017795794922 -73 26 .32887207747493086 -76 26 -.686936862204628 -78 26 -.2836929884863118 -85 26 .24028438431672508 -95 26 -1.6131455892039603 -1 27 -.29301331761452815 -13 27 .05850553142335145 -46 27 .19206782922375584 -64 27 -.45365123354963127 -71 27 .5361678650296222 -76 27 .5343342826805121 -85 27 -.5691665745651101 -92 27 -1.027641057002319 -95 27 -.2590187190976264 -96 27 -1.3494850904145084 -9 28 -.7585289143147049 -11 28 1.2201114941960678 -34 28 1.3185127131555585 -37 28 -.40931534466763175 -42 28 -.018571320196547364 -56 28 .7015434095004345 -58 28 1.2980400786906536 -75 28 .9832456877295159 -76 28 -.37299793588805163 -93 28 .1602054873696065 -2 29 -1.0538701031144937 -3 29 -1.286283616696739 -9 29 .3848661371422997 -21 29 -1.0999631035783912 -34 29 1.3596126192639115 -39 29 -.4279867778856937 -50 29 -.6207574420108635 -58 29 .11704292715922007 -60 29 .0683993108231899 -94 29 .2943584906535324 -5 30 .4613749701372738 -14 30 -.3964413219632601 -16 30 .1432645520460615 -43 30 -1.3617769900349719 -63 30 .39839220950385495 -74 30 -1.3289740162375883 -91 30 -.6469463252578471 -96 30 -.9963552823269065 -4 31 -.007709467817307185 -9 31 -2.1645381186636405 -23 31 -.008874212435669174 -27 31 2.7579023536457963 -44 31 -.018237205403642154 -53 31 -.6734179541888881 -54 31 2.3778091881843126 -68 31 -.8620927443235726 -89 31 -2.4597971759482498 -100 31 .3354984856648881 -3 32 .9313349828526281 -16 32 -.2731600265663719 -30 32 2.167709412097289 -31 32 .4469531218501233 -44 32 1.649605945851417 -54 32 1.885625705391134 -57 32 1.8467549349177033 -63 32 -.10749303916100461 -67 32 -.8178843781693027 -70 32 -.11921881136425719 -12 33 .3143625207161892 -52 33 .6208668235340186 -54 33 -.0014173551538826101 -61 33 .12841110404898154 -65 33 -.8262335291062044 -67 33 -.23126610015534482 -69 33 -.36578255628989514 -90 33 -.28007648017785197 -93 33 .02388314458621635 -97 33 .281522709380813 -15 34 -.5913174786129093 -18 34 -1.1528665899864394 -19 34 -.39144824177611526 -29 34 -.7938702950496384 -30 34 -.46649985973993613 -35 34 .5683118214380578 -45 34 .961459127279787 -50 34 -1.0660784981108578 -53 34 -1.1584141361306108 -62 34 1.5938774791102834 -81 34 -.3120439863456061 -87 34 -1.276522096609288 -95 34 1.1197212938089285 -100 34 -.7498477394284147 -6 35 2.1689432083540496 -8 35 -.7407265504320089 -15 35 -.006614733297172465 -16 35 .3353201784365649 -21 35 1.2085697378009717 -34 35 .7427883841735579 -41 35 .03382829507896494 -46 35 1.5474093028718212 -49 35 -.504683123265173 -58 35 -1.9550562634709725 -65 35 -2.281120079828359 -67 35 1.5938037670092986 -74 35 -1.1344170532877365 -98 35 -1.0157409432391509 -10 36 -1.596340409542879 -24 36 .4272664814164577 -25 36 -1.8019522069658649 -30 36 -.7123456234664192 -39 36 1.1508222665526187 -41 36 .19860845142999875 -61 36 -1.1893156940619831 -64 36 -2.2219261559238612 -66 36 .09063470233912946 -83 36 1.2365489718930514 -84 36 -.3360417633581673 -97 36 -1.1113293319966553 -14 37 .9662792026121622 -22 37 .5926078520498841 -27 37 -.1293835332180282 -28 37 .05560854064866062 -34 37 -.10735115290867886 -37 37 .2016348931299578 -44 37 .5325001825249113 -48 37 -2.5001076694957254 -49 37 .34873536512041264 -57 37 -.23133903533238037 -67 37 1.237316608096115 -68 37 .833306300470531 -71 37 -1.1604948081713766 -72 37 .9708444096064489 -76 37 -.2380665265432864 -87 37 .844210221420916 -94 37 -1.9371641560094501 -13 38 .2000829942029031 -25 38 -1.7848971273049732 -26 38 -1.4371864577295166 -31 38 -.702807183841329 -59 38 .10817109312291529 -61 38 .9901862902865257 -67 38 -.13636598045172973 -92 38 -.0435781178433918 -7 39 -.4990206613550514 -22 39 -.6468670531359176 -28 39 2.4358790981394636 -32 39 -.7658254542386883 -34 39 .18386373220202262 -36 39 -.5621169748532603 -55 39 .6220835804508342 -76 39 1.3060396267867582 -77 39 .27432786396835107 -99 39 2.486019846165284 -18 40 -.4366977852756713 -22 40 .03310506409941058 -65 40 .23624398838379884 -67 40 .3633202705383686 -72 40 -1.5161095229582893 -87 40 .7919242994514051 -91 40 .350665145797016 -94 40 -.23065651583339808 -97 40 2.9594955980551907 -99 40 -.7899705798491203 -13 41 -.5069184995400817 -16 41 -1.3614519389047672 -31 41 -.08230492086530203 -32 41 1.1028250756350388 -54 41 -1.631746291514681 -69 41 .7038822253444917 -78 41 -.37159367723206077 -85 41 .8827367874013101 -97 41 .7383079650386656 -1 42 .048775437331426585 -7 42 -.9005327496783775 -12 42 .4404090716936546 -33 42 -.7635655358460971 -35 42 -1.3976615164352484 -45 42 1.4429736573854675 -57 42 .6085325878954981 -69 42 -.903405172390316 -75 42 .2793247087014626 -98 42 -.6559009192145995 -1 43 .33006131589050003 -4 43 -.620278310538278 -15 43 .8553861631125746 -19 43 -1.7011827661456373 -46 43 -.7894244493238481 -50 43 1.5234353944271228 -58 43 -.4661429154792463 -100 43 .4348386714087092 -1 44 -1.518721354293485 -10 44 2.407583081799446 -25 44 -2.466916190345792 -44 44 .3900933587501718 -66 44 .8559995730866344 -67 44 -.22266899728748935 -68 44 -.6679731862834013 -98 44 -.7968355147331512 -100 44 -1.9506675448646646 -4 45 .11095005223714552 -6 45 .6124119622850043 -22 45 -1.5595912322701375 -66 45 .014354048324706995 -81 45 .08887904255721792 -4 46 .8452032751056596 -9 46 -.5092739912848748 -11 46 -.3273525650492035 -16 46 -.07843641183457345 -17 46 -.44155437572960693 -21 46 -.013255171731312798 -32 46 .30169817823094736 -70 46 .08262747769729345 -74 46 -.1378286015432833 -84 46 .5995890236107698 -89 46 -.9800529559114415 -21 47 .2199268709653181 -24 47 1.6187056586853845 -32 47 -.5593596912029791 -60 47 .6694865348928638 -72 47 .792124485703384 -78 47 -.12974465763259396 -97 47 -3.3061094102427973 -3 48 -.3902188586444468 -9 48 -.17750384693757046 -16 48 -.9073273207337 -17 48 -.5736106111807057 -21 48 .8996547642961651 -22 48 .4605166393774664 -23 48 .6686295897722146 -24 48 -.6641842344090942 -33 48 .22748692319693403 -38 48 -2.4423591573838044 -51 48 -.33399818819300015 -59 48 1.0647985791536367 -77 48 -1.5286906037592771 -92 48 -3.1151761768859787 -95 48 2.6326282028677186 -10 49 -.006435751981005933 -11 49 .35979709197017795 -15 49 -2.926462329441517 -23 49 .16217169397214343 -37 49 .9238413922297222 -41 49 .7599036178543502 -65 49 2.122769224423316 -70 49 .4143153667972035 -76 49 .46737154584691143 -84 49 .9532927408705753 -87 49 .8729465171286084 -93 49 -2.1495989686320987 -95 49 .825919186892836 -21 50 -.9550449756530952 -30 50 -.6952542300517942 -37 50 -.9961892892347993 -40 50 .45892016419333176 -42 50 -.06107884701333306 -49 50 -1.3610679363203277 -56 50 .2826388164572672 -68 50 .5883709502312635 -69 50 -.49279444474926426 -85 50 -.5695536254156546 -2 51 .11010983574279268 -22 51 .4584212194292005 -42 51 .261491304011092 -52 51 .9398670002877011 -54 51 -.7573332225795644 -59 51 -1.1065426840313344 -61 51 -1.321040286280434 -62 51 .41110934261158827 -82 51 -.0976867953047025 -94 51 -.5037126123345935 -2 52 -1.439045791845367 -23 52 -.37796382581496313 -32 52 .028302695678421363 -36 52 -.12190935523550508 -62 52 -.4655617541578018 -71 52 -.4495086758379814 -79 52 -.30189257766775174 -97 52 -.04768271251846936 -21 53 -.07928301894397798 -23 53 -1.4003109793148363 -25 53 .2535999169392763 -35 53 -.25685871296446133 -43 53 .647000013957117 -48 53 1.3366970447973767 -51 53 -.3865526024642751 -57 53 -.04998571498206783 -63 53 -.4609581095122742 -65 53 -.38555797886748155 -79 53 .3391913630277598 -84 53 1.0118511751208543 -98 53 -.9649697171984419 -11 54 -.9032681013715583 -17 54 .562430909621765 -19 54 1.5833879457261633 -31 54 .32022470756862087 -39 54 1.2851336346909141 -43 54 2.357108710734808 -73 54 .5044816800416451 -85 54 1.9776424869575628 -86 54 .4026467166901367 -96 54 1.395591494859416 -3 55 -.10191245199981926 -13 55 .07080730154702826 -32 55 .09797456598224805 -34 55 -1.99459184074729 -51 55 -.6644020566090855 -63 55 -1.1902108693676836 -74 55 -1.4087055183268846 -84 55 -.691218439569889 -89 55 1.218925985773041 -10 56 .2012398193661427 -35 56 -1.434979395193944 -44 56 1.4562262934147674 -58 56 .6875319829272969 -62 56 .1186138660833499 -66 56 1.2504621524333368 -86 56 -1.8025195378113295 -97 56 .901513783050596 -99 56 1.5377239258591207 -14 57 .05574688659457393 -28 57 .2065678146158031 -29 57 .23914309871691586 -37 57 1.2393901499722086 -38 57 1.0849805321092816 -45 57 .7067797486840872 -51 57 -.03216995496027959 -65 57 -.0011092104877748962 -66 57 -.07654948574946362 -87 57 1.179816133453425 -90 57 .05319632027250323 -27 58 -.34342581467865263 -45 58 -1.5125039074823896 -67 58 .6397784043100386 -73 58 -.8416027968428188 -83 58 -.5621515772362659 -85 58 1.6874799380962746 -91 58 -.43773254619140445 -3 59 -2.3168309560602465 -13 59 -.52046900708695 -18 59 1.040063759068556 -21 59 .5294395979333613 -27 59 -1.4487156626357467 -32 59 1.4114992463220148 -41 59 .248827678313175 -62 59 1.0517939736477353 -64 59 .33666747460981683 -72 59 -.9951567862189358 -78 59 -.38438116669566247 -99 59 -3.3955358749677713 -29 60 -1.0933314934145346 -38 60 -.24756292310930328 -48 60 -2.74651936946914 -55 60 .4100480550847626 -75 60 -1.643224492154072 -5 61 -.07266817923830671 -7 61 -.27532183665404303 -17 61 -.48255247036992427 -19 61 -.15356719683081269 -36 61 .48928380649991676 -48 61 1.7913616321928107 -49 61 1.2020877482176995 -51 61 .2276509468061581 -53 61 -.7219693862183543 -69 61 -1.3331712994281764 -71 61 .7000213777538005 -77 61 1.1393731715153883 -91 61 1.3982468038366962 -96 61 .9204718784964352 -2 62 -1.792712037063403 -20 62 -.006958376955603959 -34 62 .5991071199878302 -38 62 .20764095639418834 -58 62 -1.9249244230276714 -72 62 .008428318713927685 -74 62 -1.0473368258176883 -75 62 -.3897511613506442 -92 62 .40468819241762066 -94 62 -.9805258928518392 -100 62 -.00390708871269102 -1 63 -.6982653429246515 -5 63 -1.1851193898267671 -14 63 -.8198032548534686 -18 63 -.48877308234058336 -60 63 -.5516396277635692 -73 63 -.3015948375048896 -82 63 1.3354657736364812 -96 63 1.0162489473013254 -2 64 -.06915744576988792 -15 64 1.4066534380467348 -28 64 .08844398737586712 -36 64 .49525872010165967 -49 64 -1.3503775320464708 -71 64 .13721575026247365 -78 64 .35929524626249254 -85 64 1.0854869329875112 -4 65 .4577618577882367 -6 65 .6237298001570086 -10 65 -.37075919859281137 -19 65 -.02605924565067294 -31 65 .020417615869273792 -32 65 .006277519097091594 -35 65 -.1375979308437049 -39 65 -.3273526403558361 -67 65 .6374805900663102 -87 65 -.4781356183093925 -3 66 -.7418233880478399 -17 66 .739397254564165 -19 66 .9185517207950646 -23 66 .42324093523934125 -34 66 .34044247300338265 -44 66 -.15642732220323186 -46 66 .696386680277523 -55 66 -.3041431344713681 -84 66 -.5999445818280968 -97 66 .09403238316688736 -2 67 .29796903728550644 -4 67 -.25360253552095885 -25 67 1.286536984944269 -31 67 .5571972280151647 -74 67 1.3228531935532533 -79 67 1.1990645161223996 -5 68 -.33089908439426724 -24 68 .6419977382887232 -25 68 -.9511378692507768 -64 68 -1.3738016660170125 -79 68 .7876168525235718 -80 68 .9913196903679111 -82 68 .6287985080536747 -96 68 -.18858401647570766 -10 69 .4415800120417581 -12 69 -1.285414345481911 -17 69 -.5712059267527972 -20 69 .16685464592630406 -26 69 .425725583118378 -42 69 .5044056736700385 -52 69 1.218872228992608 -60 69 -.018439307635058966 -74 69 -.6620235974703608 -86 69 -1.110778753036815 -95 69 -.45981908725954734 -4 70 -.6254797879931551 -27 70 -.6502652002801268 -28 70 -.4569278926130901 -29 70 .7765752853021396 -49 70 -.8344697290421441 -54 70 -.26862242963497623 -57 70 .5434077411321786 -60 70 .2589603644632057 -62 70 .2160284486084424 -77 70 -1.4182105613027012 -84 70 .12065267754764201 -85 70 -.12044103126771578 -87 70 .3816152878134108 -2 71 -.5164337755451591 -21 71 -.07618020034516805 -33 71 -1.1380437251333733 -51 71 .15699754707962918 -61 71 1.0347885760618083 -90 71 1.0122576988596745 -98 71 .3944826223614321 -1 72 -.8781191067027555 -3 72 -.582907113753571 -14 72 .26762273558047567 -17 72 -2.1487783935527323 -19 72 -.7203552703030233 -27 72 2.555160039339903 -40 72 -.7408326622828103 -43 72 -.5382737185170272 -46 72 -.6464684748402152 -70 72 -1.1449157005820858 -84 72 1.342688283736807 -86 72 -.9286071730192668 -20 73 -1.8708070322264672 -21 73 -1.759254478534368 -71 73 -.16791249654757365 -76 73 -.8245001692582777 -79 73 1.2752531322831242 -93 73 .5780797504644989 -95 73 -1.4006427656020333 -42 74 .6733741777675256 -54 74 .021365285934321146 -57 74 .48568125488822733 -82 74 -.03191355773734878 -97 74 1.3655480224711654 -4 75 -.3786945714543113 -5 75 -.6025036843434799 -10 75 .7808806208619156 -16 75 -1.0776804910855502 -25 75 1.3840121665259906 -39 75 .5426849728773311 -40 75 .5354742377867243 -52 75 .13227079701338496 -60 75 .44891399262750653 -61 75 -.09423963914806305 -69 75 -1.064868035939743 -73 75 -.10084553161032078 -76 75 .9290062115096387 -27 76 -.7807339672116327 -29 76 .7639839896189005 -40 76 -.4074991136053617 -62 76 .4999870341431355 -66 76 .9753205695663314 -77 76 -.36529565690660815 -80 76 -1.5098122547024644 -90 76 -.5092812574196279 -96 76 -.47246491218910935 -98 76 -.06051437123784487 -5 77 -.21211954720829826 -6 77 .4466446006335213 -14 77 .38766238232910527 -15 77 .23873688448528269 -16 77 -.47743277954030827 -35 77 .42983082960383584 -40 77 .13262359038757668 -41 77 -1.2307663450841944 -47 77 .2490747916072881 -63 77 .36121984810135266 -66 77 -.62315307522792 -70 77 .5003450577427129 -80 77 1.0667831747983902 -96 77 .03946810110604465 -10 78 1.392798938814349 -12 78 -.7103989156155377 -16 78 -.9635972488519959 -19 78 1.996151258175941 -23 78 -.6060460422905246 -51 78 1.632875582977021 -64 78 1.7638922239444992 -81 78 -1.4579602910903147 -88 78 -1.6057065955790495 -90 78 1.1373214276622996 -96 78 1.8469253177284786 -99 78 -1.2569312033178803 -3 79 .27325601707986663 -17 79 .3884203404721352 -18 79 -.4965301545618842 -25 79 -.9782499335113873 -46 79 -1.446678722321188 -66 79 -.7542762921334372 -68 79 -.31932111798141405 -75 79 -.7285898586047139 -83 79 .3493116561336093 -99 79 .9201392231015406 -1 80 -.3573614032825329 -5 80 -.042512668724658434 -24 80 -1.0292861062758611 -30 80 -1.3127220832838382 -34 80 -1.0075481154181598 -38 80 .8719621721296225 -50 80 1.5606623543766003 -55 80 .24650541137476073 -76 80 -.6945848090273591 -83 80 1.5572292104977397 -4 81 .4172527319098459 -9 81 .025681801712732794 -12 81 -.31952546307562396 -15 81 .057778688217235086 -20 81 .21296284542066185 -25 81 2.877480861451683 -34 81 1.4727651090663736 -36 81 1.1184648642131563 -52 81 .8969266810326297 -56 81 .25315818094285775 -76 81 -.11247149166336332 -78 81 .48993215522892297 -82 81 1.3456699594475259 -83 81 .9533028993867301 -87 81 -.27136310757341064 -93 81 .8208902673295256 -96 81 1.14470654928624 -97 81 -.6735563228193139 -11 82 -.8390633651992045 -25 82 -.0037155601375555014 -26 82 -1.560443444893502 -41 82 -.20184741810948206 -42 82 .9597421058361759 -50 82 -.02416982783316306 -61 82 2.0779946085816383 -62 82 -.2146115716274667 -74 82 .06763384766600097 -75 82 -1.0023341348156378 -86 82 2.107375678349561 -7 83 .5417865369942256 -32 83 -.04403380434435167 -34 83 -.11092807149659432 -39 83 1.0701270185221405 -56 83 -2.2312858729764984 -61 83 .5344649588067965 -62 83 -1.8321513908791482 -65 83 2.651013417818035 -69 83 1.1162257305388361 -70 83 -.42364019200344005 -85 83 .9765067750158041 -7 84 .1586922737293448 -40 84 .0926714910485817 -50 84 .7223009335759153 -55 84 .8902341428129462 -58 84 -.008131352046529802 -61 84 -1.4833979775067203 -65 84 -1.249857681979614 -10 85 -.3330455813285108 -13 85 -.6514194741293058 -14 85 -.023776090264009397 -16 85 -.6499315764932921 -20 85 -.007884750912557241 -67 85 -1.9078260981631856 -77 85 .5677689225926744 -81 85 .4278510923380882 -89 85 -.8517654400158853 -13 86 -.7710915685089202 -18 86 1.4641899142246302 -65 86 1.724093871213153 -90 86 .9985967247016794 -30 87 -2.228675341855869 -35 87 .37878421621235464 -38 87 -.8433560217315914 -42 87 -1.5616368343810794 -88 87 -1.2086017769280792 -98 87 .3611539857960668 -5 88 .9635487641412909 -13 88 -.27461870921808185 -15 88 .2987197055353105 -16 88 -.07227617913641252 -53 88 -.388454335735834 -57 88 -.2802370171331273 -59 88 1.0517400983150322 -60 88 .09699986282629365 -69 88 .21980089990850332 -78 88 .362177942101478 -81 88 .00348613992841864 -85 88 -.019268221410424904 -95 88 -.5584951865238197 -3 89 .630203806573062 -16 89 -.16173210037770244 -19 89 -.7298077841331583 -21 89 .6122314789917697 -32 89 -.40603466872326044 -37 89 1.04759607489002 -38 89 -.7988261468071087 -41 89 -.5521904469457922 -42 89 .6263156461957605 -43 89 -1.8058491569062454 -46 89 .32603611349902406 -47 89 .470998476984054 -64 89 -.5148166841474167 -85 89 -1.8817955106744115 -4 90 -.1404672184747886 -5 90 1.0419896220873448 -8 90 -.7889801771060541 -17 90 -.11000881384131576 -18 90 1.5388405626753803 -21 90 .4136961781309969 -30 90 1.1818614259415796 -44 90 .5489105372368435 -46 90 .18409403895795612 -47 90 -.05351787247603401 -85 90 1.9202182053777488 -86 90 2.221352702285861 -10 91 -1.5258588513108653 -22 91 -.061571367729615356 -28 91 .42544887517484586 -51 91 -.2871500167016905 -54 91 1.2281545272557464 -56 91 -.9126432281958609 -71 91 .5165172813899349 -78 91 .018305783651845806 -93 91 .46817626079271035 -36 92 -.8314986988870438 -39 92 -.1988675825144179 -42 92 .5281709157732636 -44 92 -.5038376898577535 -53 92 .640634511844535 -67 92 -.5460538302570088 -74 92 1.1713560339311357 -77 92 1.7026156520691909 -84 92 -.6575372691841956 -93 92 1.246403165911745 -12 93 -1.122592501477699 -29 93 .3333197250034817 -42 93 1.0987678458666408 -51 93 -.13588321184540172 -64 93 .43721298468039055 -73 93 -.46549622631029486 -74 93 -.38842993052387553 -82 93 -.32734222360770526 -89 93 .10564002084154642 -90 93 .5861091616430683 -92 93 -.9747197538476169 -93 93 .2565721783108728 -94 93 .20584376643637523 -28 94 .4641366283977738 -40 94 .5040216895383361 -50 94 .23193418419133055 -54 94 1.7923680149602177 -77 94 1.3495664425840646 -87 94 .6508850344795004 -95 94 -.4138929350296118 -97 94 -1.850928301037939 -1 95 .24767881497470196 -18 95 -.4597149689510075 -20 95 .801770996098489 -22 95 .1546314632112301 -34 95 -.5234786067715668 -38 95 1.1880782185969976 -48 95 1.597308440680649 -100 95 .6797619992684956 -38 96 1.8575785640859537 -40 96 -.7076706976858326 -61 96 -2.2730165207094166 -98 96 -.346027620931064 -99 96 -.45972520277649054 -1 97 -.3462974934730866 -5 97 -2.4688478295486145 -8 97 -1.2809873152127966 -21 97 -.04673200970670763 -25 97 -3.5192077503862613 -29 97 -1.1983745246850117 -30 97 1.0729893343743395 -37 97 -.2978851378571989 -46 97 -1.4102632060398559 -50 97 1.3031192195254937 -66 97 -.01518361570588958 -86 97 -1.1100524451076677 -87 97 -.6518543232325322 -92 97 .30933395483567877 -99 97 -.7751895251156558 -11 98 -1.7347606580516066 -18 98 .42173563534369163 -20 98 -.24537589070184432 -35 98 .7056003341355063 -54 98 1.0620473999427489 -63 98 .023370472470798494 -67 98 .12381511531048484 -93 98 -.3945432549594946 -96 98 .048432929450472756 -21 99 -.40810025287110024 -30 99 -.8373358976514677 -36 99 .1954008007061444 -46 99 -.023222192824749 -59 99 1.5062460183608717 -65 99 1.9728746835261286 -69 99 .44826804112090485 -4 100 -.5104903222169305 -21 100 -.33623130017465924 -32 100 -.38941876854188684 -57 100 -.6994210683682378 -64 100 1.1463852680675484 -82 100 -.680260856997128 -96 100 -2.072838917588947 -97 100 -2.696652916660356 diff --git a/examples/src/main/r/dfc/maskUV.cpp b/examples/src/main/r/dfc/maskUV.cpp deleted file mode 100644 index 350c4712b2830..0000000000000 --- a/examples/src/main/r/dfc/maskUV.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include -using namespace Rcpp; - -// Given matrix factors U and V, and a list of entries (is,js) returns -// a list of entries in maskUV so that maskUV(k) = UV'(is,js) -// requires maskUV to be pre-allocated in the R code that calls this -// -// U is an m-by-r matrix -// V is an n-by-r matrix - -// [[Rcpp::export]] -NumericVector maskUV(NumericMatrix U, NumericMatrix V, IntegerVector is, IntegerVector js) -{ - // Get the length of the entries list and the rank of UV' - int l = is.size(); - int r = U.ncol(); - - // Initialize the output vector to all zeros - NumericVector maskUV(l,0.0); - - // Loop over non-zero entries and compute output vector - int i = is(1)-1; - int j = js(1)-1; - for(int n = 0; n < l; n++) - { - i = is(n)-1; // subtract 1 since R arrays start at 1 - j = js(n)-1; - maskUV(n) = 0; - for(int k = 0; k < r; k++) - { - maskUV(n) += U(i,k)*V(j,k); - } - } - return maskUV; -} From ff776aa668402e21ef24bbee5d976c0f1cf9bd6c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 16:18:32 -0700 Subject: [PATCH 647/687] Fix style --- core/src/main/scala/org/apache/spark/api/r/RRDD.scala | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/api/r/RRDD.scala b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala index 109dbe269b0d1..1a7d770479923 100644 --- a/core/src/main/scala/org/apache/spark/api/r/RRDD.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala @@ -186,9 +186,10 @@ private class PairwiseRRDD[T: ClassTag]( packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Object]) - extends BaseRRDD[T, (Int, Array[Byte])](parent, numPartitions, hashFunc, deserializer, - SerializationFormats.BYTE, packageNames, rLibDir, - broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { + extends BaseRRDD[T, (Int, Array[Byte])]( + parent, numPartitions, hashFunc, deserializer, + SerializationFormats.BYTE, packageNames, rLibDir, + broadcastVars.map(x => x.asInstanceOf[Broadcast[Object]])) { private var dataStream: DataInputStream = _ From aae881b2a18ba5ac9b894d9bccb8a18a14ab680c Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 16:18:43 -0700 Subject: [PATCH 648/687] fix rat --- .rat-excludes | 3 +++ R/SparkR_IDE_Setup.sh | 17 +++++++++++++++ R/SparkR_prep-0.1.sh | 17 +++++++++++++++ R/install-dev.bat | 17 +++++++++++++++ R/install-dev.sh | 17 +++++++++++++++ R/pkg/src/Makefile.win | 49 ++++++++++++++++-------------------------- R/run-tests.sh | 17 +++++++++++++++ bin/sparkR | 17 +++++++++++++++ 8 files changed, 123 insertions(+), 31 deletions(-) diff --git a/.rat-excludes b/.rat-excludes index 8c61e67a0c7d1..6b9e6af5a5e20 100644 --- a/.rat-excludes +++ b/.rat-excludes @@ -67,3 +67,6 @@ logs .*scalastyle-output.xml .*dependency-reduced-pom.xml known_translations +*.mat +R/pkg/DESCRIPTION +R/pkg/NAMESPACE diff --git a/R/SparkR_IDE_Setup.sh b/R/SparkR_IDE_Setup.sh index ff1e2f04ebbb8..b794c0b2d8cb1 100644 --- a/R/SparkR_IDE_Setup.sh +++ b/R/SparkR_IDE_Setup.sh @@ -1,5 +1,22 @@ #!/bin/sh +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Download RStudio if [ ! -f rstudio-0.98.1091-x86_64.rpm ]; then wget http://download1.rstudio.org/rstudio-0.98.1091-x86_64.rpm diff --git a/R/SparkR_prep-0.1.sh b/R/SparkR_prep-0.1.sh index 2ef0fefabcd09..932039ac6ccf6 100755 --- a/R/SparkR_prep-0.1.sh +++ b/R/SparkR_prep-0.1.sh @@ -1,5 +1,22 @@ #!/bin/sh +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Create and move to a new directory that can be easily cleaned up mkdir build_SparkR cd build_SparkR diff --git a/R/install-dev.bat b/R/install-dev.bat index 1de838946ae60..02e5e2cdcac79 100644 --- a/R/install-dev.bat +++ b/R/install-dev.bat @@ -1,5 +1,22 @@ @echo off +rem +rem Licensed to the Apache Software Foundation (ASF) under one or more +rem contributor license agreements. See the NOTICE file distributed with +rem this work for additional information regarding copyright ownership. +rem The ASF licenses this file to You under the Apache License, Version 2.0 +rem (the "License"); you may not use this file except in compliance with +rem the License. You may obtain a copy of the License at +rem +rem http://www.apache.org/licenses/LICENSE-2.0 +rem +rem Unless required by applicable law or agreed to in writing, software +rem distributed under the License is distributed on an "AS IS" BASIS, +rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +rem See the License for the specific language governing permissions and +rem limitations under the License. +rem + rem Install development version of SparkR rem diff --git a/R/install-dev.sh b/R/install-dev.sh index bb8a2fc955639..d0926a6203063 100755 --- a/R/install-dev.sh +++ b/R/install-dev.sh @@ -1,5 +1,22 @@ #!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Install development version of SparkR FWDIR="$(cd `dirname $0`; pwd)" diff --git a/R/pkg/src/Makefile.win b/R/pkg/src/Makefile.win index 2f77005fc9437..aa486d8228371 100644 --- a/R/pkg/src/Makefile.win +++ b/R/pkg/src/Makefile.win @@ -1,39 +1,26 @@ -SCALA_VERSION := 2.10 -SPARKR_VERSION := 0.1 -JAR_NAME := sparkr-assembly-$(SPARKR_VERSION).jar -SBT_TARGET_NAME := target/scala-$(SCALA_VERSION)/$(JAR_NAME) - -MAVEN_JAR_NAME := sparkr-$(SPARKR_VERSION)-assembly.jar -MAVEN_TARGET_NAME := target/$(MAVEN_JAR_NAME) - -SCALA_SOURCE_DIR := src/main/scala/edu/berkeley/cs/amplab/sparkr -RESOURCE_DIR := src/main/resources - -SCALA_FILES := $(wildcard $(SCALA_SOURCE_DIR)/*.scala) -RESOURCE_FILES := $(wildcard $(RESOURCE_DIR)/*) - -SPARK_VERSION ?= 1.3.0 -SPARK_HADOOP_VERSION ?= 1.0.4 -SPARK_YARN_VERSION ?= 2.4.0 - -TARGET_NAME := $(MAVEN_TARGET_NAME) - -all: $(TARGET_NAME) sharelib - -$(MAVEN_TARGET_NAME): $(SCALA_FILES) $(RESOURCE_FILES) - mvn.bat -Dhadoop.version=$(SPARK_HADOOP_VERSION) -Dspark.version=$(SPARK_VERSION) -Dyarn.version=$(SPARK_YARN_VERSION) -DskipTests clean package shade:shade - cp -f $(MAVEN_TARGET_NAME) ../inst/$(JAR_NAME) +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +all: sharelib sharelib: string_hash_code.c R CMD SHLIB -o SparkR.dll string_hash_code.c clean: - mvn.bat clean - rm -rf target - rm -rf project/target - rm -rf project/project - -rm sbt/sbt-launch-*.jar - rm -f ../inst/$(JAR_NAME) rm -f *.o rm -f *.dll diff --git a/R/run-tests.sh b/R/run-tests.sh index bf0adace452f1..d1ce16765bb92 100755 --- a/R/run-tests.sh +++ b/R/run-tests.sh @@ -1,5 +1,22 @@ #!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + FWDIR="$(cd `dirname $0`; pwd)" FAILED=0 diff --git a/bin/sparkR b/bin/sparkR index 49ac5db75fc11..1d7ef417d51d6 100755 --- a/bin/sparkR +++ b/bin/sparkR @@ -1,5 +1,22 @@ #!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + FWDIR="$(cd `dirname $0`; pwd)" export PROJECT_HOME="$FWDIR/../R/" From 2d235d485bbe48cc6371e016daff783183246653 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 16:18:50 -0700 Subject: [PATCH 649/687] Build SparkR with Maven profile --- core/pom.xml | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ pom.xml | 3 +++ 2 files changed, 52 insertions(+) diff --git a/core/pom.xml b/core/pom.xml index 81f8cba711df6..60c5ac2d8ed79 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -442,4 +442,53 @@ + + + Windows + + + Windows + + + + .bat + + + + unix + + + unix + + + + .sh + + + + sparkr + + + + org.codehaus.mojo + exec-maven-plugin + 1.3.2 + + + sparkr-pkg + compile + + exec + + + + + ../R/install-dev${script.extension} + + + + + + + diff --git a/pom.xml b/pom.xml index 6fc56a86d44ac..0c32fa5aeceb6 100644 --- a/pom.xml +++ b/pom.xml @@ -1728,5 +1728,8 @@ parquet-provided + + sparkr + From 52ca6e5a0b2cda693db5b88a958d51660c512918 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 16:23:18 -0700 Subject: [PATCH 650/687] Add missing comma --- R/pkg/NAMESPACE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/pkg/NAMESPACE b/R/pkg/NAMESPACE index 4ec17d20fe720..94c4a69b9b310 100644 --- a/R/pkg/NAMESPACE +++ b/R/pkg/NAMESPACE @@ -150,7 +150,7 @@ exportMethods("abs", "startsWith", "substr", "sum", - "sumDistinct" + "sumDistinct", "upper") exportClasses("GroupedData") From 479e3fe787a7f19ecb9015cb260ac9e5be01d723 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 16:33:08 -0700 Subject: [PATCH 651/687] change println() to logging --- .../scala/org/apache/spark/api/r/RBackend.scala | 6 ++++-- .../org/apache/spark/api/r/RBackendHandler.scala | 16 +++++++--------- .../main/scala/org/apache/spark/api/r/RRDD.scala | 12 +++++------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/api/r/RBackend.scala b/core/src/main/scala/org/apache/spark/api/r/RBackend.scala index 18631e62e7973..683e17a630e8e 100644 --- a/core/src/main/scala/org/apache/spark/api/r/RBackend.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RBackend.scala @@ -29,6 +29,8 @@ import io.netty.channel.socket.nio.NioServerSocketChannel import io.netty.handler.codec.LengthFieldBasedFrameDecoder import io.netty.handler.codec.bytes.{ByteArrayDecoder, ByteArrayEncoder} +import org.apache.spark.Logging + /** * Netty-based backend server that is used to communicate between R and Java. */ @@ -89,7 +91,7 @@ class RBackend { } -object RBackend { +object RBackend extends Logging { def main(args: Array[String]) { if (args.length < 1) { System.err.println("Usage: RBackend ") @@ -134,7 +136,7 @@ object RBackend { sparkRBackend.run() } catch { case e: IOException => - System.err.println("Server shutting down: failed with exception ", e) + logError("Server shutting down: failed with exception ", e) sparkRBackend.close() System.exit(1) } diff --git a/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala b/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala index e73a2063b3268..bc956735903a0 100644 --- a/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala @@ -22,9 +22,9 @@ import java.io.{ByteArrayInputStream, ByteArrayOutputStream, DataInputStream, Da import scala.collection.mutable.HashMap import io.netty.channel.ChannelHandler.Sharable -import io.netty.channel.ChannelHandlerContext -import io.netty.channel.SimpleChannelInboundHandler +import io.netty.channel.{ChannelHandlerContext, SimpleChannelInboundHandler} +import org.apache.spark.Logging import org.apache.spark.api.r.SerDe._ /** @@ -34,7 +34,7 @@ import org.apache.spark.api.r.SerDe._ */ @Sharable class RBackendHandler(server: RBackend) - extends SimpleChannelInboundHandler[Array[Byte]] { + extends SimpleChannelInboundHandler[Array[Byte]] with Logging { override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { val bis = new ByteArrayInputStream(msg) @@ -65,8 +65,7 @@ class RBackendHandler(server: RBackend) writeObject(dos, null) } catch { case e: Exception => - System.err.println(s"Removing $objId failed with " + e) - e.printStackTrace() + logError(s"Removing $objId failed", e) writeInt(dos, -1) } case _ => dos.writeInt(-1) @@ -118,10 +117,10 @@ class RBackendHandler(server: RBackend) matchMethod(numArgs, args, x.getParameterTypes) } if (methods.isEmpty) { - System.err.println(s"cannot find matching method ${cls}.$methodName. " + logWarning(s"cannot find matching method ${cls}.$methodName. " + s"Candidates are:") selectedMethods.foreach { method => - System.err.println(s"$methodName(${method.getParameterTypes.mkString(",")})") + logWarning(s"$methodName(${method.getParameterTypes.mkString(",")})") } throw new Exception(s"No matched method found for $cls.$methodName") } @@ -145,8 +144,7 @@ class RBackendHandler(server: RBackend) } } catch { case e: Exception => - System.err.println(s"$methodName on $objId failed with " + e) - e.printStackTrace() + logError(s"$methodName on $objId failed", e) writeInt(dos, -1) } } diff --git a/core/src/main/scala/org/apache/spark/api/r/RRDD.scala b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala index 109dbe269b0d1..e6d4e40e661cc 100644 --- a/core/src/main/scala/org/apache/spark/api/r/RRDD.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala @@ -29,7 +29,7 @@ import scala.util.Try import org.apache.spark.api.java.{JavaPairRDD, JavaRDD, JavaSparkContext} import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD -import org.apache.spark.{Partition, SparkConf, SparkEnv, SparkException, TaskContext} +import org.apache.spark._ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( parent: RDD[T], @@ -40,7 +40,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( packageNames: Array[Byte], rLibDir: String, broadcastVars: Array[Broadcast[Object]]) - extends RDD[U](parent) { + extends RDD[U](parent) with Logging { override def getPartitions = parent.partitions override def compute(split: Partition, context: TaskContext): Iterator[U] = { @@ -160,8 +160,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( } catch { // TODO: We should propogate this error to the task thread case e: Exception => - System.err.println("R Writer thread got an exception " + e) - e.printStackTrace() + logError("R Writer thread got an exception", e) } finally { Try(output.close()) } @@ -300,7 +299,7 @@ private class StringRRDD[T: ClassTag]( private[spark] class BufferedStreamThread( in: InputStream, name: String, - errBufferSize: Int) extends Thread(name) { + errBufferSize: Int) extends Thread(name) with Logging { val lines = new Array[String](errBufferSize) var lineIdx = 0 override def run() { @@ -309,8 +308,7 @@ private[spark] class BufferedStreamThread( lines(lineIdx) = line lineIdx = (lineIdx + 1) % errBufferSize } - // TODO: user logger - System.err.println(line) + logInfo(line) } } From 0e2412cee814c567f3760dc33fd44688d5988238 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 16:39:26 -0700 Subject: [PATCH 652/687] fix bin/sparkR --- bin/sparkR | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/sparkR b/bin/sparkR index 1d7ef417d51d6..2c2c8ce7a0718 100755 --- a/bin/sparkR +++ b/bin/sparkR @@ -17,8 +17,10 @@ # limitations under the License. # -FWDIR="$(cd `dirname $0`; pwd)" +# Figure out where Spark is installed +export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)" +FWDIR="$(cd `dirname $0`; pwd)" export PROJECT_HOME="$FWDIR/../R/" unset JAVA_HOME From ea90fabf4fae044c8fb9e58589a511bdd0b10aa6 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 17:35:31 -0700 Subject: [PATCH 653/687] fix spark-submit with R path and sparkR -h --- bin/sparkR | 19 +++++++++++++++++-- .../org/apache/spark/deploy/RRunner.scala | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/bin/sparkR b/bin/sparkR index 2c2c8ce7a0718..db3864cfa8750 100755 --- a/bin/sparkR +++ b/bin/sparkR @@ -20,8 +20,23 @@ # Figure out where Spark is installed export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)" -FWDIR="$(cd `dirname $0`; pwd)" -export PROJECT_HOME="$FWDIR/../R/" +source "$SPARK_HOME"/bin/load-spark-env.sh + +function usage() { + if [ -n "$1" ]; then + echo $1 + fi + echo "Usage: ./bin/sparkR [options]" 1>&2 + "$SPARK_HOME"/bin/spark-submit --help 2>&1 | grep -v Usage 1>&2 + exit $2 +} +export -f usage + +if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then + usage +fi + +export PROJECT_HOME="${SPARK_HOME}/R/" unset JAVA_HOME diff --git a/core/src/main/scala/org/apache/spark/deploy/RRunner.scala b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala index 934965aa0d056..c9a9d1207823d 100644 --- a/core/src/main/scala/org/apache/spark/deploy/RRunner.scala +++ b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala @@ -32,7 +32,7 @@ import org.apache.spark.api.r.RBackend */ object RRunner { def main(args: Array[String]) { - val rFile = args(0) + val rFile = PythonRunner.formatPath(args(0)) val otherArgs = args.slice(1, args.length) From d6f2bdd28c8829cb1d623a2a8daa4d40ef46386e Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 18:28:39 -0700 Subject: [PATCH 654/687] Fix run-tests path --- dev/run-tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/run-tests b/dev/run-tests index bcf6f4774e7aa..d9e8d39a29b4b 100755 --- a/dev/run-tests +++ b/dev/run-tests @@ -236,7 +236,7 @@ echo "=========================================================================" CURRENT_BLOCK=$BLOCK_SPARKR_UNIT_TESTS ./R/install-dev.sh -./R/run-tests +./R/run-tests.sh echo "" echo "=========================================================================" From baefd9ea6d0eb9424ca61a3c3bdc0631fe438ba5 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 19:15:12 -0700 Subject: [PATCH 655/687] Make bin/sparkR use spark-submit As a part of this move the R initialization functions into first.R and first-submit.R --- R/first-submit.R | 21 ++++++++++ R/first.R | 32 +++++++++++++++ R/pkg/R/sparkRClient.R | 2 +- bin/sparkR | 39 +------------------ .../org/apache/spark/deploy/RRunner.scala | 2 + examples/src/main/r/pi.R | 7 +--- .../launcher/SparkSubmitCommandBuilder.java | 3 ++ 7 files changed, 62 insertions(+), 44 deletions(-) create mode 100644 R/first-submit.R create mode 100644 R/first.R diff --git a/R/first-submit.R b/R/first-submit.R new file mode 100644 index 0000000000000..21fd4e7798d97 --- /dev/null +++ b/R/first-submit.R @@ -0,0 +1,21 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +.First <- function() { + projecHome <- Sys.getenv("PROJECT_HOME") + .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) +} diff --git a/R/first.R b/R/first.R new file mode 100644 index 0000000000000..5c71844285f98 --- /dev/null +++ b/R/first.R @@ -0,0 +1,32 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# NOTE: This file is only used by script bin/sparkR and hence should be +# outside the package definition + +.First <- function() { + projecHome <- Sys.getenv("PROJECT_HOME") + .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) + require(utils) + require(SparkR) + sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) + assign("sc", sc, envir=.GlobalEnv) + sqlCtx <- sparkRSQL.init(sc) + assign("sqlCtx", sqlCtx, envir=.GlobalEnv) + cat("\n Welcome to SparkR!") + cat("\n Spark context is available as sc, SQL context is available as sqlCtx\n") +} diff --git a/R/pkg/R/sparkRClient.R b/R/pkg/R/sparkRClient.R index 26ecbd1f75a8c..daa919d2b55a5 100644 --- a/R/pkg/R/sparkRClient.R +++ b/R/pkg/R/sparkRClient.R @@ -51,7 +51,7 @@ launchBackend <- function(args, sparkHome, jars, sparkSubmitOpts) { jars <- paste("--jars", jars) } - combinedArgs <- paste(sparkSubmitOpts, jars, "sparkr-shell", args, sep = " ") + combinedArgs <- paste(sparkSubmitOpts, jars, args, sep = " ") cat("Launching java with spark-submit command ", sparkSubmitBin, " ", combinedArgs, "\n") invisible(system2(sparkSubmitBin, combinedArgs, wait = F)) } diff --git a/bin/sparkR b/bin/sparkR index db3864cfa8750..b490d59a047ba 100755 --- a/bin/sparkR +++ b/bin/sparkR @@ -36,41 +36,6 @@ if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then usage fi -export PROJECT_HOME="${SPARK_HOME}/R/" +export PROJECT_HOME="${SPARK_HOME}/R" -unset JAVA_HOME - -export R_PROFILE_USER="/tmp/sparkR.profile" - -if [ $# -gt 0 ]; then - # If we are running an R program, only set libPaths and use Rscript -cat > /tmp/sparkR.profile << EOF -.First <- function() { - projecHome <- Sys.getenv("PROJECT_HOME") - .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) - Sys.setenv(NOAWT=1) -} -EOF - - Rscript "$@" -else - - # If we don't have an R file to run, initialize context and run R -cat > /tmp/sparkR.profile << EOF -.First <- function() { - projecHome <- Sys.getenv("PROJECT_HOME") - Sys.setenv(NOAWT=1) - .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) - require(utils) - require(SparkR) - sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) - assign("sc", sc, envir=.GlobalEnv) - sqlCtx <- sparkRSQL.init(sc) - assign("sqlCtx", sqlCtx, envir=.GlobalEnv) - cat("\n Welcome to SparkR!") - cat("\n Spark context is available as sc, SQL context is available as sqlCtx\n") -} -EOF - - R -fi +exec "$SPARK_HOME"/bin/spark-submit sparkr-shell-main "$@" diff --git a/core/src/main/scala/org/apache/spark/deploy/RRunner.scala b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala index c9a9d1207823d..db2d2aaf3ef82 100644 --- a/core/src/main/scala/org/apache/spark/deploy/RRunner.scala +++ b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala @@ -70,6 +70,8 @@ object RRunner { val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) val env = builder.environment() env.put("EXISTING_SPARKR_BACKEND_PORT", sparkRBackendPort.toString) + env.put("PROJECT_HOME", sys.env.getOrElse("SPARK_HOME", "") + "/R") + env.put("R_PROFILE_USER", sys.env.getOrElse("SPARK_HOME", "") + "/R/first-submit.R") builder.redirectErrorStream(true) // Ugly but needed for stdout and stderr to synchronize val process = builder.start() diff --git a/examples/src/main/r/pi.R b/examples/src/main/r/pi.R index 00fddc65543a6..eed44eed913ed 100644 --- a/examples/src/main/r/pi.R +++ b/examples/src/main/r/pi.R @@ -19,12 +19,7 @@ library(SparkR) args <- commandArgs(trailing = TRUE) -if (length(args) < 1) { - print("Usage: pi []") - q("no") -} - -sc <- sparkR.init(args[[1]], "PiR") +sc <- sparkR.init(appName="PiR") slices <- ifelse(length(args) > 1, as.integer(args[[2]]), 2) diff --git a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java index 0cba4458b3ae9..3a0be28bdc73b 100644 --- a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java +++ b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java @@ -278,8 +278,11 @@ private List buildSparkRCommand(Map env) throws IOExcept submitArgs.append(quoteForPython(arg)); } env.put("SPARKR_SUBMIT_ARGS", submitArgs.toString()); + // TODO: Is there a better way to get Spark Home here ? + env.put("R_PROFILE_USER", System.getenv("SPARK_HOME") + "/R/first.R"); List args = new ArrayList(); + args.add(firstNonEmpty(System.getenv("SPARKR_DRIVER_R"), "R")); return args; } From 95d2de3c2112621a1e1e17d557422ff4299250a7 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Tue, 17 Mar 2015 19:57:38 -0700 Subject: [PATCH 656/687] fix spark-submit with R scripot --- R/pkg/R/sparkR.R | 2 +- R/pkg/R/sparkRClient.R | 4 +- bin/sparkR | 40 ++----------------- .../org/apache/spark/deploy/RRunner.scala | 4 ++ .../launcher/SparkSubmitCommandBuilder.java | 1 + 5 files changed, 12 insertions(+), 39 deletions(-) diff --git a/R/pkg/R/sparkR.R b/R/pkg/R/sparkR.R index e1c357f58f71d..d86e6e7d9a8a7 100644 --- a/R/pkg/R/sparkR.R +++ b/R/pkg/R/sparkR.R @@ -125,7 +125,7 @@ sparkR.init <- function( args = path, sparkHome = sparkHome, jars = jars, - sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "")) + sparkSubmitOpts = Sys.getenv("SPARKR_SUBMIT_ARGS", "sparkr-shell")) # wait atmost 100 seconds for JVM to launch wait <- 0.1 for (i in 1:25) { diff --git a/R/pkg/R/sparkRClient.R b/R/pkg/R/sparkRClient.R index 26ecbd1f75a8c..4d7d86943cf40 100644 --- a/R/pkg/R/sparkRClient.R +++ b/R/pkg/R/sparkRClient.R @@ -51,7 +51,7 @@ launchBackend <- function(args, sparkHome, jars, sparkSubmitOpts) { jars <- paste("--jars", jars) } - combinedArgs <- paste(sparkSubmitOpts, jars, "sparkr-shell", args, sep = " ") - cat("Launching java with spark-submit command ", sparkSubmitBin, " ", combinedArgs, "\n") + combinedArgs <- paste(jars, sparkSubmitOpts, args, sep = " ") + cat("Launching java with spark-submit command", sparkSubmitBin, combinedArgs, "\n") invisible(system2(sparkSubmitBin, combinedArgs, wait = F)) } diff --git a/bin/sparkR b/bin/sparkR index db3864cfa8750..ba078da7192d9 100755 --- a/bin/sparkR +++ b/bin/sparkR @@ -37,40 +37,8 @@ if [[ "$@" = *--help ]] || [[ "$@" = *-h ]]; then fi export PROJECT_HOME="${SPARK_HOME}/R/" - -unset JAVA_HOME - -export R_PROFILE_USER="/tmp/sparkR.profile" - -if [ $# -gt 0 ]; then - # If we are running an R program, only set libPaths and use Rscript -cat > /tmp/sparkR.profile << EOF -.First <- function() { - projecHome <- Sys.getenv("PROJECT_HOME") - .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) - Sys.setenv(NOAWT=1) -} -EOF - - Rscript "$@" -else - - # If we don't have an R file to run, initialize context and run R -cat > /tmp/sparkR.profile << EOF -.First <- function() { - projecHome <- Sys.getenv("PROJECT_HOME") - Sys.setenv(NOAWT=1) - .libPaths(c(paste(projecHome,"/lib", sep=""), .libPaths())) - require(utils) - require(SparkR) - sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) - assign("sc", sc, envir=.GlobalEnv) - sqlCtx <- sparkRSQL.init(sc) - assign("sqlCtx", sqlCtx, envir=.GlobalEnv) - cat("\n Welcome to SparkR!") - cat("\n Spark context is available as sc, SQL context is available as sqlCtx\n") -} -EOF - - R +if [ $# -eq 0 ]; then + export R_PROFILE_USER="${SPARK_HOME}/R/lib/SparkR/profile/shell.R" fi + +exec "$SPARK_HOME"/bin/spark-submit sparkr-shell-main "$@" diff --git a/core/src/main/scala/org/apache/spark/deploy/RRunner.scala b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala index c9a9d1207823d..c42c8a1c3baa0 100644 --- a/core/src/main/scala/org/apache/spark/deploy/RRunner.scala +++ b/core/src/main/scala/org/apache/spark/deploy/RRunner.scala @@ -70,6 +70,10 @@ object RRunner { val builder = new ProcessBuilder(Seq(rCommand, rFileNormalized) ++ otherArgs) val env = builder.environment() env.put("EXISTING_SPARKR_BACKEND_PORT", sparkRBackendPort.toString) + val sparkHome = System.getenv("SPARK_HOME") + env.put("PROJECT_HOME", Seq(sparkHome, "R").mkString(File.separator)) + env.put("R_PROFILE_USER", + Seq(sparkHome, "R", "lib", "SparkR", "profile", "general.R").mkString(File.separator)) builder.redirectErrorStream(true) // Ugly but needed for stdout and stderr to synchronize val process = builder.start() diff --git a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java index 0cba4458b3ae9..0158e2ce30b32 100644 --- a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java +++ b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java @@ -280,6 +280,7 @@ private List buildSparkRCommand(Map env) throws IOExcept env.put("SPARKR_SUBMIT_ARGS", submitArgs.toString()); List args = new ArrayList(); + args.add("R"); return args; } From 05afef039adb9d6cc9466d8f68b6d5218f528da8 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 20:05:15 -0700 Subject: [PATCH 657/687] Only stop backend JVM if R launched it --- R/pkg/R/sparkR.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/R/pkg/R/sparkR.R b/R/pkg/R/sparkR.R index e1c357f58f71d..1c4927c77032f 100644 --- a/R/pkg/R/sparkR.R +++ b/R/pkg/R/sparkR.R @@ -42,7 +42,10 @@ sparkR.stop <- function(env = .sparkREnv) { rm(".sparkRjsc", envir = env) } - callJStatic("SparkRHandler", "stopBackend") + if (exists(".sparkRBackendLaunched", envir = env)) { + callJStatic("SparkRHandler", "stopBackend") + } + # Also close the connection and remove it from our env conn <- get(".sparkRCon", envir = env) close(conn) @@ -148,6 +151,7 @@ sparkR.init <- function( stop("JVM failed to launch") } assign(".monitorConn", socketConnection(port = monitorPort), envir = .sparkREnv) + assign(".sparkRBackendLaunched", 1, envir = .sparkREnv) } .sparkREnv$sparkRBackendPort <- sparkRBackendPort From 8030847fc611b88b9231b6e6000683783f726742 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 22:04:21 -0700 Subject: [PATCH 658/687] Set windows file separators, install dirs --- R/install-dev.bat | 6 ++++-- core/pom.xml | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/R/install-dev.bat b/R/install-dev.bat index 02e5e2cdcac79..008a5c668bc45 100644 --- a/R/install-dev.bat +++ b/R/install-dev.bat @@ -20,6 +20,8 @@ rem rem Install development version of SparkR rem -MKDIR .\lib +set SPARK_HOME=%~dp0.. -R.exe CMD INSTALL --library=".\lib" pkg\ +MKDIR %SPARK_HOME%\R\lib + +R.exe CMD INSTALL --library="%SPARK_HOME%\R\lib" %SPARK_HOME%\R\pkg\ diff --git a/core/pom.xml b/core/pom.xml index 60c5ac2d8ed79..e222cc8390271 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -451,6 +451,7 @@ + \ .bat @@ -462,6 +463,7 @@ + / .sh @@ -483,7 +485,7 @@ - ../R/install-dev${script.extension} + ..${path.separator}R${path.separator}install-dev${script.extension} From cb6e5e3e0fa13123c7a96ad460cf92ef28d18a4d Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 23:28:17 -0700 Subject: [PATCH 659/687] Add scripts to start SparkR on windows --- bin/sparkR.cmd | 23 +++++++++++++++++++++++ bin/sparkR2.cmd | 28 ++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 bin/sparkR.cmd create mode 100644 bin/sparkR2.cmd diff --git a/bin/sparkR.cmd b/bin/sparkR.cmd new file mode 100644 index 0000000000000..d7b60183ca8e0 --- /dev/null +++ b/bin/sparkR.cmd @@ -0,0 +1,23 @@ +@echo off + +rem +rem Licensed to the Apache Software Foundation (ASF) under one or more +rem contributor license agreements. See the NOTICE file distributed with +rem this work for additional information regarding copyright ownership. +rem The ASF licenses this file to You under the Apache License, Version 2.0 +rem (the "License"); you may not use this file except in compliance with +rem the License. You may obtain a copy of the License at +rem +rem http://www.apache.org/licenses/LICENSE-2.0 +rem +rem Unless required by applicable law or agreed to in writing, software +rem distributed under the License is distributed on an "AS IS" BASIS, +rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +rem See the License for the specific language governing permissions and +rem limitations under the License. +rem + +rem This is the entry point for running SparkR. To avoid polluting the +rem environment, it just launches a new cmd to do the real work. + +cmd /V /E /C %~dp0sparkR2.cmd %* diff --git a/bin/sparkR2.cmd b/bin/sparkR2.cmd new file mode 100644 index 0000000000000..d0fdf4f818996 --- /dev/null +++ b/bin/sparkR2.cmd @@ -0,0 +1,28 @@ +@echo off + +rem +rem Licensed to the Apache Software Foundation (ASF) under one or more +rem contributor license agreements. See the NOTICE file distributed with +rem this work for additional information regarding copyright ownership. +rem The ASF licenses this file to You under the Apache License, Version 2.0 +rem (the "License"); you may not use this file except in compliance with +rem the License. You may obtain a copy of the License at +rem +rem http://www.apache.org/licenses/LICENSE-2.0 +rem +rem Unless required by applicable law or agreed to in writing, software +rem distributed under the License is distributed on an "AS IS" BASIS, +rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +rem See the License for the specific language governing permissions and +rem limitations under the License. +rem + +rem Figure out where the Spark framework is installed +set SPARK_HOME=%~dp0.. + +rem Load environment variables from conf\spark-env.cmd, if it exists +if exist "%SPARK_HOME%\conf\spark-env.cmd" call "%SPARK_HOME%\conf\spark-env.cmd" + +set PROJECT_HOME=%SPARK_HOME%\R + +call %SPARK_HOME%\bin\spark-submit2.cmd sparkr-shell-main %* From a1870e85941c68a2e5d831751c1805f61ae2dac1 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Tue, 17 Mar 2015 23:32:54 -0700 Subject: [PATCH 660/687] Merge pull request #214 from sun-rui/SPARKR-156_3 [SPARKR-156] Phase 3: Implement zip() in the RDD class. Conflicts: pkg/inst/worker/worker.R --- pkg/NAMESPACE | 1 + pkg/R/RDD.R | 96 ++++++++++++++++++- pkg/R/generics.R | 4 + pkg/inst/tests/test_rdd.R | 29 ++++++ pkg/inst/worker/worker.R | 2 +- pkg/man/zipRDD.Rd | 37 +++++++ .../edu/berkeley/cs/amplab/sparkr/RRDD.scala | 15 ++- 7 files changed, 180 insertions(+), 4 deletions(-) create mode 100644 pkg/man/zipRDD.Rd diff --git a/pkg/NAMESPACE b/pkg/NAMESPACE index a5c142e0cae2b..dc97d66786d2e 100644 --- a/pkg/NAMESPACE +++ b/pkg/NAMESPACE @@ -64,6 +64,7 @@ exportMethods( "unpersist", "value", "values", + "zipRDD", "zipWithIndex", "zipWithUniqueId" ) diff --git a/pkg/R/RDD.R b/pkg/R/RDD.R index 30a083364ce43..462cbe1044b43 100644 --- a/pkg/R/RDD.R +++ b/pkg/R/RDD.R @@ -1368,7 +1368,6 @@ setMethod("zipWithIndex", lapplyPartitionsWithIndex(x, partitionFunc) }) - ############ Binary Functions ############# #' Return the union RDD of two RDDs. @@ -1401,3 +1400,98 @@ setMethod("unionRDD", } union.rdd }) + +#' Zip an RDD with another RDD. +#' +#' Zips this RDD with another one, returning key-value pairs with the +#' first element in each RDD second element in each RDD, etc. Assumes +#' that the two RDDs have the same number of partitions and the same +#' number of elements in each partition (e.g. one was made through +#' a map on the other). +#' +#' @param x An RDD to be zipped. +#' @param other Another RDD to be zipped. +#' @return An RDD zipped from the two RDDs. +#' @examples +#'\dontrun{ +#' sc <- sparkR.init() +#' rdd1 <- parallelize(sc, 0:4) +#' rdd2 <- parallelize(sc, 1000:1004) +#' collect(zipRDD(rdd1, rdd2)) +#' # list(list(0, 1000), list(1, 1001), list(2, 1002), list(3, 1003), list(4, 1004)) +#'} +#' @rdname zipRDD +#' @aliases zipRDD,RDD +setMethod("zipRDD", + signature(x = "RDD", other = "RDD"), + function(x, other) { + n1 <- numPartitions(x) + n2 <- numPartitions(other) + if (n1 != n2) { + stop("Can only zip RDDs which have the same number of partitions.") + } + + if (getSerializedMode(x) != getSerializedMode(other) || + getSerializedMode(x) == "byte") { + # Append the number of elements in each partition to that partition so that we can later + # check if corresponding partitions of both RDDs have the same number of elements. + # + # Note that this appending also serves the purpose of reserialization, because even if + # any RDD is serialized, we need to reserialize it to make sure its partitions are encoded + # as a single byte array. For example, partitions of an RDD generated from partitionBy() + # may be encoded as multiple byte arrays. + appendLength <- function(part) { + part[[length(part) + 1]] <- length(part) + 1 + part + } + x <- lapplyPartition(x, appendLength) + other <- lapplyPartition(other, appendLength) + } + + zippedJRDD <- callJMethod(getJRDD(x), "zip", getJRDD(other)) + # The zippedRDD's elements are of scala Tuple2 type. The serialized + # flag Here is used for the elements inside the tuples. + serializerMode <- getSerializedMode(x) + zippedRDD <- RDD(zippedJRDD, serializerMode) + + partitionFunc <- function(split, part) { + len <- length(part) + if (len > 0) { + if (serializerMode == "byte") { + lengthOfValues <- part[[len]] + lengthOfKeys <- part[[len - lengthOfValues]] + stopifnot(len == lengthOfKeys + lengthOfValues) + + # check if corresponding partitions of both RDDs have the same number of elements. + if (lengthOfKeys != lengthOfValues) { + stop("Can only zip RDDs with same number of elements in each pair of corresponding partitions.") + } + + if (lengthOfKeys > 1) { + keys <- part[1 : (lengthOfKeys - 1)] + values <- part[(lengthOfKeys + 1) : (len - 1)] + } else { + keys <- list() + values <- list() + } + } else { + # Keys, values must have same length here, because this has + # been validated inside the JavaRDD.zip() function. + keys <- part[c(TRUE, FALSE)] + values <- part[c(FALSE, TRUE)] + } + mapply( + function(k, v) { + list(k, v) + }, + keys, + values, + SIMPLIFY = FALSE, + USE.NAMES = FALSE) + } else { + part + } + } + + PipelinedRDD(zippedRDD, partitionFunc) + }) diff --git a/pkg/R/generics.R b/pkg/R/generics.R index fd8c214b1342b..1d81d82ba73bd 100644 --- a/pkg/R/generics.R +++ b/pkg/R/generics.R @@ -190,6 +190,10 @@ setGeneric("name", function(x) { standardGeneric("name") }) #' @export setGeneric("setName", function(x, name) { standardGeneric("setName") }) +#' @rdname zipRDD +#' @export +setGeneric("zipRDD", function(x, other) { standardGeneric("zipRDD") }) + #' @rdname zipWithUniqueId #' @seealso zipWithIndex #' @export diff --git a/pkg/inst/tests/test_rdd.R b/pkg/inst/tests/test_rdd.R index 5fa2f171ca436..90174060e9aa3 100644 --- a/pkg/inst/tests/test_rdd.R +++ b/pkg/inst/tests/test_rdd.R @@ -411,6 +411,35 @@ test_that("pipeRDD() on RDDs", { expect_equal(actual, expected) }) +test_that("zipRDD() on RDDs", { + rdd1 <- parallelize(sc, 0:4) + rdd2 <- parallelize(sc, 1000:1004) + actual <- collect(zipRDD(rdd1, rdd2)) + expect_equal(actual, + list(list(0, 1000), list(1, 1001), list(2, 1002), list(3, 1003), list(4, 1004))) + + mockFile = c("Spark is pretty.", "Spark is awesome.") + fileName <- tempfile(pattern="spark-test", fileext=".tmp") + writeLines(mockFile, fileName) + + rdd <- textFile(sc, fileName) + actual <- collect(zipRDD(rdd, rdd)) + expected <- lapply(mockFile, function(x) { list(x ,x) }) + expect_equal(actual, expected) + + rdd1 <- parallelize(sc, 0:1) + actual <- collect(zipRDD(rdd1, rdd)) + expected <- lapply(0:1, function(x) { list(x, mockFile[x + 1]) }) + expect_equal(actual, expected) + + rdd1 <- map(rdd, function(x) { x }) + actual <- collect(zipRDD(rdd, rdd1)) + expected <- lapply(mockFile, function(x) { list(x, x) }) + expect_equal(actual, expected) + + unlink(fileName) +}) + test_that("join() on pairwise RDDs", { rdd1 <- parallelize(sc, list(list(1,1), list(2,4))) rdd2 <- parallelize(sc, list(list(1,2), list(1,3))) diff --git a/pkg/inst/worker/worker.R b/pkg/inst/worker/worker.R index 1c01fdf72833e..00875d5590b14 100644 --- a/pkg/inst/worker/worker.R +++ b/pkg/inst/worker/worker.R @@ -52,7 +52,7 @@ if (isEmpty != 0) { # Now read as many characters as described in funcLen data <- SparkR:::readDeserialize(inputCon) } else if (deserializer == "string") { - data <- readLines(inputCon) + data <- as.list(readLines(inputCon)) } else if (deserializer == "row") { data <- SparkR:::readDeserializeRows(inputCon) } diff --git a/pkg/man/zipRDD.Rd b/pkg/man/zipRDD.Rd new file mode 100644 index 0000000000000..0a8e77bb7ac78 --- /dev/null +++ b/pkg/man/zipRDD.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2 (4.0.2): do not edit by hand +\docType{methods} +\name{zipRDD,RDD,RDD-method} +\alias{zipRDD} +\alias{zipRDD,RDD} +\alias{zipRDD,RDD,RDD-method} +\title{Zip an RDD with another RDD.} +\usage{ +\S4method{zipRDD}{RDD,RDD}(x, other) + +zipRDD(x, other) +} +\arguments{ +\item{x}{An RDD to be zipped.} + +\item{other}{Another RDD to be zipped.} +} +\value{ +An RDD zipped from the two RDDs. +} +\description{ +Zips this RDD with another one, returning key-value pairs with the +first element in each RDD second element in each RDD, etc. Assumes +that the two RDDs have the same number of partitions and the same +number of elements in each partition (e.g. one was made through +a map on the other). +} +\examples{ +\dontrun{ +sc <- sparkR.init() +rdd1 <- parallelize(sc, 0:4) +rdd2 <- parallelize(sc, 1000:1004) +collect(zipRDD(rdd1, rdd2)) +# list(list(0, 1000), list(1, 1001), list(2, 1002), list(3, 1003), list(4, 1004)) +} +} + diff --git a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala index 98eaa994a8267..a5f92d284e9f1 100644 --- a/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala +++ b/pkg/src/src/main/scala/edu/berkeley/cs/amplab/sparkr/RRDD.scala @@ -128,7 +128,8 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( } val printOut = new PrintStream(stream) - for (elem <- iter) { + + def writeElem(elem: Any): Unit = { if (deserializer == SerializationFormats.BYTE) { val elemArr = elem.asInstanceOf[Array[Byte]] dataOut.writeInt(elemArr.length) @@ -139,6 +140,16 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( printOut.println(elem) } } + + for (elem <- iter) { + elem match { + case (key, value) => + writeElem(key) + writeElem(value) + case _ => + writeElem(elem) + } + } stream.flush() } catch { // TODO: We should propogate this error to the task thread @@ -158,7 +169,7 @@ private abstract class BaseRRDD[T: ClassTag, U: ClassTag]( } /** - * Form an RDD[Int, Array[Byte])] from key-value pairs returned from R. + * Form an RDD[(Int, Array[Byte])] from key-value pairs returned from R. * This is used by SparkR's shuffle operations. */ private class PairwiseRRDD[T: ClassTag]( From 028cbfbfe450e4ee35738ffcee95a5d24cd36699 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 10:32:36 -0700 Subject: [PATCH 661/687] fix exit code of sparkr unit test --- dev/run-tests-codes.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/run-tests-codes.sh b/dev/run-tests-codes.sh index 1348e0609dda4..43627ced1d5d2 100644 --- a/dev/run-tests-codes.sh +++ b/dev/run-tests-codes.sh @@ -25,3 +25,4 @@ readonly BLOCK_BUILD=14 readonly BLOCK_SPARK_UNIT_TESTS=15 readonly BLOCK_PYSPARK_UNIT_TESTS=16 readonly BLOCK_MIMA=17 +readonly BLOCK_SPARKR_UNIT_TESTS=18 From 56670efe917672c8b14306f4e56ce8d673554366 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 10:35:41 -0700 Subject: [PATCH 662/687] rm man page --- pkg/man/zipRDD.Rd | 37 ------------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 pkg/man/zipRDD.Rd diff --git a/pkg/man/zipRDD.Rd b/pkg/man/zipRDD.Rd deleted file mode 100644 index 0a8e77bb7ac78..0000000000000 --- a/pkg/man/zipRDD.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2 (4.0.2): do not edit by hand -\docType{methods} -\name{zipRDD,RDD,RDD-method} -\alias{zipRDD} -\alias{zipRDD,RDD} -\alias{zipRDD,RDD,RDD-method} -\title{Zip an RDD with another RDD.} -\usage{ -\S4method{zipRDD}{RDD,RDD}(x, other) - -zipRDD(x, other) -} -\arguments{ -\item{x}{An RDD to be zipped.} - -\item{other}{Another RDD to be zipped.} -} -\value{ -An RDD zipped from the two RDDs. -} -\description{ -Zips this RDD with another one, returning key-value pairs with the -first element in each RDD second element in each RDD, etc. Assumes -that the two RDDs have the same number of partitions and the same -number of elements in each partition (e.g. one was made through -a map on the other). -} -\examples{ -\dontrun{ -sc <- sparkR.init() -rdd1 <- parallelize(sc, 0:4) -rdd2 <- parallelize(sc, 1000:1004) -collect(zipRDD(rdd1, rdd2)) -# list(list(0, 1000), list(1, 1001), list(2, 1002), list(3, 1003), list(4, 1004)) -} -} - From 1a16cd6530762b628b513f46dfb043cc68ee6d29 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 10:37:05 -0700 Subject: [PATCH 663/687] rm PROJECT_HOME --- bin/sparkR2.cmd | 2 -- 1 file changed, 2 deletions(-) diff --git a/bin/sparkR2.cmd b/bin/sparkR2.cmd index d0fdf4f818996..9f8a316e55156 100644 --- a/bin/sparkR2.cmd +++ b/bin/sparkR2.cmd @@ -23,6 +23,4 @@ set SPARK_HOME=%~dp0.. rem Load environment variables from conf\spark-env.cmd, if it exists if exist "%SPARK_HOME%\conf\spark-env.cmd" call "%SPARK_HOME%\conf\spark-env.cmd" -set PROJECT_HOME=%SPARK_HOME%\R - call %SPARK_HOME%\bin\spark-submit2.cmd sparkr-shell-main %* From d436f26264bc99d20d89b6b90e7fc4c0064b6d7a Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 11:05:14 -0700 Subject: [PATCH 664/687] add missing files --- R/pkg/inst/profile/general.R | 22 ++++++++++++++++++++++ R/pkg/inst/profile/shell.R | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 R/pkg/inst/profile/general.R create mode 100644 R/pkg/inst/profile/shell.R diff --git a/R/pkg/inst/profile/general.R b/R/pkg/inst/profile/general.R new file mode 100644 index 0000000000000..8fe711b622086 --- /dev/null +++ b/R/pkg/inst/profile/general.R @@ -0,0 +1,22 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +.First <- function() { + home <- Sys.getenv("SPARK_HOME") + .libPaths(c(file.path(home, "R", "lib"), .libPaths())) + Sys.setenv(NOAWT=1) +} diff --git a/R/pkg/inst/profile/shell.R b/R/pkg/inst/profile/shell.R new file mode 100644 index 0000000000000..29286374e0487 --- /dev/null +++ b/R/pkg/inst/profile/shell.R @@ -0,0 +1,32 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +.First <- function() { + home <- Sys.getenv("SPARK_HOME") + .libPaths(c(file.path(home, "R", "lib"), .libPaths())) + cat(.libPaths()) + Sys.setenv(NOAWT=1) + + require(utils) + require(SparkR) + sc <- sparkR.init(Sys.getenv("MASTER", unset = "")) + assign("sc", sc, envir=.GlobalEnv) + sqlCtx <- sparkRSQL.init(sc) + assign("sqlCtx", sqlCtx, envir=.GlobalEnv) + cat("\n Welcome to SparkR!") + cat("\n Spark context is available as sc, SQL context is available as sqlCtx\n") +} From 756ece0ee0a33af7e8255bdccccec032a69611d1 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Mar 2015 11:19:04 -0700 Subject: [PATCH 665/687] Update README remove outdated TODO --- R/README.md | 128 ++++++++-------------------------------------------- R/TODO.md | 25 ---------- 2 files changed, 18 insertions(+), 135 deletions(-) delete mode 100644 R/TODO.md diff --git a/R/README.md b/R/README.md index ff212549787f4..c0f57fc76cd9d 100644 --- a/R/README.md +++ b/R/README.md @@ -1,46 +1,19 @@ # R on Spark -SparkR is an R package that provides a light-weight frontend to use Spark from -R. +SparkR is an R package that provides a light-weight frontend to use Spark from R. +### SparkR development -## Installing SparkR +#### Build Spark -### Build Spark - -TBD - -### Package installation - -To develop SparkR, you can build the R package using - - ./R/install-dev.sh - -If you wish to try out the package directly from github, you can use [`install_github`](http://www.inside-r.org/packages/cran/devtools/docs/install_github) from [`devtools`](http://www.inside-r.org/packages/cran/devtools). Note that you can specify which branch, tag etc to install from. - - library(devtools) - install_github("apache/spark", subdir="R/pkg") - -#### Building from source from GitHub - -Run the following within R to pull source code from GitHub and build locally. It is possible -to specify build dependencies by starting R with environment values: - -1. Start R +Build Spark with [Maven](http://spark.apache.org/docs/latest/building-spark.html#building-with-buildmvn) and include the `-PsparkR` profile to build the R package. For example to use the default Hadoop versions you can run ``` -SPARK_VERSION=1.2.0 SPARK_HADOOP_VERSION=2.5.0 R + build/mvn -DskipTests -Psparkr package ``` -2. Run install_github -``` -library(devtools) -install_github("repo/SparkR-pkg", ref="branchname", subdir="pkg") -``` -*note: replace repo and branchname* +#### Running sparkR -## Running sparkR -If you have cloned and built SparkR, you can start using it by launching the SparkR -shell with +You can start using it by launching the SparkR shell with ./bin/sparkR @@ -48,34 +21,17 @@ The `sparkR` script automatically creates a SparkContext with Spark by default i local mode. To specify the Spark master of a cluster for the automatically created SparkContext, you can run - MASTER= ./sparkR - -If you have installed it directly from github, you can include the SparkR -package and then initialize a SparkContext. For example to run with a local -Spark master you can launch R and then run - - library(SparkR) - sc <- sparkR.init(master="local") - -To increase the memory used by the driver you can export the SPARK\_MEM -environment variable. For example to use 1g, you can run - - SPARK_MEM=1g ./sparkR + ./bin/sparkR --master "local[2]" -In a cluster setting to set the amount of memory used by the executors you can -pass the variable `spark.executor.memory` to the SparkContext constructor. +To set other options like driver memory, executor memory etc. you can pass in the [spark-submit](http://spark.apache.org/docs/latest/submitting-applications.html) arguments to `./bin/sparkR` - library(SparkR) - sc <- sparkR.init(master="spark://:7077", - sparkEnvir=list(spark.executor.memory="1g")) +#### Making changes to SparkR -Finally, to stop the cluster run - - sparkR.stop() - -sparkR.stop() can be invoked to terminate a SparkContext created previously via sparkR.init(). Then you can call sparR.init() again to create a new SparkContext that may have different configurations. +The [instructions](https://cwiki.apache.org/confluence/display/SPARK/Contributing+to+Spark) for making contributions to Spark also apply to SparkR. +If you only make R file changes (i.e. no Scala changes) then you can just re-install the R package using `R/install-dev.sh` and test your changes. +Once you have made your changes, please include unit tests for them and run existing unit tests using the `run-tests.sh` script as described below. -## Examples, Unit tests +### Examples, Unit tests SparkR comes with several sample programs in the `examples/src/main/r` directory. To run one of them, use `./bin/sparkR `. For example: @@ -87,62 +43,14 @@ You can also run the unit-tests for SparkR by running (you need to install the [ R -e 'install.packages("testthat", repos="http://cran.us.r-project.org")' ./R/run-tests.sh -## Running on EC2 - -Instructions for running SparkR on EC2 can be found in the -[SparkR wiki](https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-on-EC2). - -## Running on YARN -Currently, SparkR supports running on YARN with the `yarn-client` mode. These steps show how to build SparkR with YARN support and run SparkR programs on a YARN cluster: - -``` -# assumes Java, R, yarn, spark etc. are installed on the whole cluster. -cd SparkR-pkg/ -USE_YARN=1 SPARK_YARN_VERSION=2.4.0 SPARK_HADOOP_VERSION=2.4.0 ./install-dev.sh -``` - -Alternatively, install_github can be use (on CDH in this case): - -``` -# assume devtools package is installed by install.packages("devtools") -USE_YARN=1 SPARK_VERSION=1.1.0 SPARK_YARN_VERSION=2.5.0-cdh5.3.0 SPARK_HADOOP_VERSION=2.5.0-cdh5.3.0 R -``` -Then within R, -``` -library(devtools) -install_github("amplab-extras/SparkR-pkg", ref="master", subdir="pkg") -``` - -Before launching an application, make sure each worker node has a local copy of `lib/SparkR/sparkr-assembly-0.1.jar`. With a cluster launched with the `spark-ec2` script, do: -``` -~/spark-ec2/copy-dir ~/SparkR-pkg -``` -Or run the above installation steps on all worker node. - -Finally, when launching an application, the environment variable `YARN_CONF_DIR` needs to be set to the directory which contains the client-side configuration files for the Hadoop cluster (with a cluster launched with `spark-ec2`, this defaults to `/root/ephemeral-hdfs/conf/`): -``` -YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ MASTER=yarn-client ./sparkR -YARN_CONF_DIR=/root/ephemeral-hdfs/conf/ ./sparkR examples/pi.R yarn-client -``` - -## Running on a cluster using sparkR-submit - -sparkR-submit is a script introduced to facilitate submission of SparkR jobs to a Spark supported cluster (eg. Standalone, Mesos, YARN). -It supports the same commandline parameters as [spark-submit](http://spark.apache.org/docs/latest/submitting-applications.html). SPARK_HOME and JAVA_HOME must be defined. - -On YARN, YARN_CONF_DIR must be defined. sparkR-submit supports [YARN deploy modes](http://spark.apache.org/docs/latest/running-on-yarn.html): yarn-client and yarn-cluster. - -sparkR-submit is installed with the SparkR package. By default, it can be found under the default Library (['library'](https://stat.ethz.ch/R-manual/R-devel/library/base/html/libPaths.html) subdirectory of R_HOME) - -For example, to run on YARN (CDH 5.3.0), +### Running on YARN +The `./bin/spark-submit` and `./bin/sparkR` can also be used to submit jobs to YARN clusters. You will need to set YARN conf dir before doing so. For example on CDH you can run ``` -export SPARK_HOME=/opt/cloudera/parcels/CDH-5.3.0-1.cdh5.3.0.p0.30/lib/spark export YARN_CONF_DIR=/etc/hadoop/conf -export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera -/usr/lib64/R/library/SparkR/sparkR-submit --master yarn-client examples/pi.R yarn-client 4 +./bin/spark-submit --master yarn examples/src/main/r/pi.R 4 ``` -## Report Issues/Feedback +### Report Issues/Feedback For better tracking and collaboration, issues and TODO items are reported to a dedicated [SparkR JIRA](https://sparkr.atlassian.net/browse/SPARKR/). diff --git a/R/TODO.md b/R/TODO.md deleted file mode 100644 index 011a6bc95c44a..0000000000000 --- a/R/TODO.md +++ /dev/null @@ -1,25 +0,0 @@ -## Things to do for SparkR - -## Unit tests -1. utils.R - Check if dependencies are serialized correctly - -## Functions to support -1. Similar to `stats.py` in Python, add support for mean, median, stdev etc. -2. Extend `addPackage` so that any given R file can be sourced in the worker before functions are run. -3. Add a `lookup` method to get an element of a pair RDD object by key. -4. `hashCode` support for arbitrary R objects. -5. Support for other storage types like storing RDDs on disk. -6. Extend input formats to support `sequenceFile`. - -## Performance improvements -1. Write hash functions in C and use .Call to call into them. -2. Memoizations of frequently queried vals in RDD, such as numPartitions, count etc. -3. Profile serialization overhead and see if there is anything better we can do. - -## Feature wishlist - -1. Integration with ML Lib to run ML algorithms from R. -2. RRDDs are distributed lists. Extend them to create a distributed data frame. -3. Support accumulators in R. -4. Reduce code duplication between SparkR and PySpark. -5. Add more machine learning examples and some performance benchmarks. From 38cbf59605155f65e8101c25b73a598f6ab7acd9 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 11:21:06 -0700 Subject: [PATCH 666/687] fix test of zipRDD() --- R/pkg/inst/tests/test_rdd.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/pkg/inst/tests/test_rdd.R b/R/pkg/inst/tests/test_rdd.R index f6652f1db55af..7df95760fb60d 100644 --- a/R/pkg/inst/tests/test_rdd.R +++ b/R/pkg/inst/tests/test_rdd.R @@ -444,7 +444,8 @@ test_that("zipRDD() on RDDs", { expected <- lapply(mockFile, function(x) { list(x ,x) }) expect_equal(actual, expected) - rdd1 <- parallelize(sc, 0:1) + + rdd1 <- parallelize(sc, 0:1, numPartitions(rdd)) actual <- collect(zipRDD(rdd1, rdd)) expected <- lapply(0:1, function(x) { list(x, mockFile[x + 1]) }) expect_equal(actual, expected) From 2892e29b4c094eb7deaa3281f8ea6591dcc7a6f9 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 11:40:40 -0700 Subject: [PATCH 667/687] support R in YARN cluster --- .../scala/org/apache/spark/deploy/SparkSubmit.scala | 1 - .../apache/spark/deploy/yarn/ApplicationMaster.scala | 3 +++ .../deploy/yarn/ApplicationMasterArguments.scala | 6 ++++++ .../scala/org/apache/spark/deploy/yarn/Client.scala | 11 ++++++++++- .../apache/spark/deploy/yarn/ClientArguments.scala | 6 ++++++ 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala b/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala index 26b6eaac0c28e..c27d310850b7a 100644 --- a/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala +++ b/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala @@ -480,7 +480,6 @@ object SparkSubmit { } childArgs +=("--class", "org.apache.spark.deploy.PythonRunner") } else if (args.isR) { - // TODO(davies): support R in yarn val mainFile = new Path(args.primaryResource).getName childArgs +=("--primary-r-file", mainFile) childArgs +=("--class", "org.apache.spark.deploy.RRunner") diff --git a/yarn/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMaster.scala b/yarn/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMaster.scala index e966bfba7bb7d..04f888946f4fc 100644 --- a/yarn/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMaster.scala +++ b/yarn/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMaster.scala @@ -469,6 +469,9 @@ private[spark] class ApplicationMaster( System.setProperty("spark.submit.pyFiles", PythonRunner.formatPaths(args.pyFiles).mkString(",")) } + if (args.primaryRFile != null && args.primaryRFile.endsWith(".R")) { + // TODO(davies): add R dependencies here + } val mainMethod = userClassLoader.loadClass(args.userClass) .getMethod("main", classOf[Array[String]]) diff --git a/yarn/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMasterArguments.scala b/yarn/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMasterArguments.scala index e1a992af3aae7..5957149ce078a 100644 --- a/yarn/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMasterArguments.scala +++ b/yarn/src/main/scala/org/apache/spark/deploy/yarn/ApplicationMasterArguments.scala @@ -25,6 +25,7 @@ class ApplicationMasterArguments(val args: Array[String]) { var userJar: String = null var userClass: String = null var primaryPyFile: String = null + var primaryRFile: String = null var pyFiles: String = null var userArgs: Seq[String] = Seq[String]() var executorMemory = 1024 @@ -54,6 +55,10 @@ class ApplicationMasterArguments(val args: Array[String]) { primaryPyFile = value args = tail + case ("--primary-r-file") :: value :: tail => + primaryRFile = value + args = tail + case ("--py-files") :: value :: tail => pyFiles = value args = tail @@ -92,6 +97,7 @@ class ApplicationMasterArguments(val args: Array[String]) { | --jar JAR_PATH Path to your application's JAR file | --class CLASS_NAME Name of your application's main class | --primary-py-file A main Python file + | --primary-r-file A main R file | --py-files PY_FILES Comma-separated list of .zip, .egg, or .py files to | place on the PYTHONPATH for Python apps. | --args ARGS Arguments to be passed to your application's main class. diff --git a/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala b/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala index 61f8fc3f5a014..ab6a7f8a58dde 100644 --- a/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala +++ b/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala @@ -488,6 +488,12 @@ private[spark] class Client( } else { Nil } + val primaryRFile = + if (args.primaryRFile != null) { + Seq("--primary-r-file", args.primaryRFile) + } else { + Nil + } val amClass = if (isClusterMode) { Class.forName("org.apache.spark.deploy.yarn.ApplicationMaster").getName @@ -497,11 +503,14 @@ private[spark] class Client( if (args.primaryPyFile != null && args.primaryPyFile.endsWith(".py")) { args.userArgs = ArrayBuffer(args.primaryPyFile, args.pyFiles) ++ args.userArgs } + if (args.primaryRFile != null && args.primaryRFile.endsWith(".R")) { + args.userArgs = ArrayBuffer(args.primaryRFile) ++ args.userArgs + } val userArgs = args.userArgs.flatMap { arg => Seq("--arg", YarnSparkHadoopUtil.escapeForShell(arg)) } val amArgs = - Seq(amClass) ++ userClass ++ userJar ++ primaryPyFile ++ pyFiles ++ userArgs ++ + Seq(amClass) ++ userClass ++ userJar ++ primaryPyFile ++ pyFiles ++ primaryRFile ++ userArgs ++ Seq( "--executor-memory", args.executorMemory.toString + "m", "--executor-cores", args.executorCores.toString, diff --git a/yarn/src/main/scala/org/apache/spark/deploy/yarn/ClientArguments.scala b/yarn/src/main/scala/org/apache/spark/deploy/yarn/ClientArguments.scala index 3bc7eb1abf341..92f7dfa3f1868 100644 --- a/yarn/src/main/scala/org/apache/spark/deploy/yarn/ClientArguments.scala +++ b/yarn/src/main/scala/org/apache/spark/deploy/yarn/ClientArguments.scala @@ -32,6 +32,7 @@ private[spark] class ClientArguments(args: Array[String], sparkConf: SparkConf) var userClass: String = null var pyFiles: String = null var primaryPyFile: String = null + var primaryRFile: String = null var userArgs: ArrayBuffer[String] = new ArrayBuffer[String]() var executorMemory = 1024 // MB var executorCores = 1 @@ -150,6 +151,10 @@ private[spark] class ClientArguments(args: Array[String], sparkConf: SparkConf) primaryPyFile = value args = tail + case ("--primary-r-file") :: value :: tail => + primaryRFile = value + args = tail + case ("--args" | "--arg") :: value :: tail => if (args(0) == "--args") { println("--args is deprecated. Use --arg instead.") @@ -240,6 +245,7 @@ private[spark] class ClientArguments(args: Array[String], sparkConf: SparkConf) | mode) | --class CLASS_NAME Name of your application's main class (required) | --primary-py-file A main Python file + | --primary-r-file A main R file | --arg ARG Argument to be passed to your application's main class. | Multiple invocations are possible, each will be passed in order. | --num-executors NUM Number of executors to start (Default: 2) From 7da0049425980825f940350933fbae1e163b4540 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 11:59:13 -0700 Subject: [PATCH 668/687] fix build --- .rat-excludes | 1 - .../org/apache/spark/launcher/SparkSubmitCommandBuilder.java | 4 ++-- yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.rat-excludes b/.rat-excludes index 6b9e6af5a5e20..9d279d2283982 100644 --- a/.rat-excludes +++ b/.rat-excludes @@ -67,6 +67,5 @@ logs .*scalastyle-output.xml .*dependency-reduced-pom.xml known_translations -*.mat R/pkg/DESCRIPTION R/pkg/NAMESPACE diff --git a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java index 56d48e2aa4e11..567ec79cb332a 100644 --- a/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java +++ b/launcher/src/main/java/org/apache/spark/launcher/SparkSubmitCommandBuilder.java @@ -17,8 +17,8 @@ package org.apache.spark.launcher; +import java.io.File; import java.io.IOException; -import java.nio.file.Paths; import java.util.*; import static org.apache.spark.launcher.CommandBuilderUtils.*; @@ -281,7 +281,7 @@ private List buildSparkRCommand(Map env) throws IOExcept env.put("SPARKR_SUBMIT_ARGS", submitArgs.toString()); String sparkHome = System.getenv("SPARK_HOME"); env.put("R_PROFILE_USER", - Paths.get(sparkHome, "R", "lib", "SparkR", "profile", "shell.R").toString()); + join(File.separator, sparkHome, "R", "lib", "SparkR", "profile", "shell.R")); List args = new ArrayList(); args.add(firstNonEmpty(System.getenv("SPARKR_DRIVER_R"), "R")); diff --git a/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala b/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala index ab6a7f8a58dde..43b4baeefe5df 100644 --- a/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala +++ b/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala @@ -510,8 +510,8 @@ private[spark] class Client( Seq("--arg", YarnSparkHadoopUtil.escapeForShell(arg)) } val amArgs = - Seq(amClass) ++ userClass ++ userJar ++ primaryPyFile ++ pyFiles ++ primaryRFile ++ userArgs ++ - Seq( + Seq(amClass) ++ userClass ++ userJar ++ primaryPyFile ++ pyFiles ++ primaryRFile ++ + userArgs ++ Seq( "--executor-memory", args.executorMemory.toString + "m", "--executor-cores", args.executorCores.toString, "--num-executors ", args.numExecutors.toString) From ce3ca62af841b90230ee08dc30c0ed27f3c61cea Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 12:08:56 -0700 Subject: [PATCH 669/687] fix license check --- .rat-excludes | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.rat-excludes b/.rat-excludes index 9d279d2283982..8aca5a7f7a967 100644 --- a/.rat-excludes +++ b/.rat-excludes @@ -67,5 +67,5 @@ logs .*scalastyle-output.xml .*dependency-reduced-pom.xml known_translations -R/pkg/DESCRIPTION -R/pkg/NAMESPACE +DESCRIPTION +NAMESPACE From d8b24fc7f6f37ab91c04b7c3f6a3dfa9cddeae3d Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 12:27:43 -0700 Subject: [PATCH 670/687] disable spark and python tests temporary --- dev/run-tests | 70 +++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/dev/run-tests b/dev/run-tests index d9e8d39a29b4b..18b1a2a430643 100755 --- a/dev/run-tests +++ b/dev/run-tests @@ -185,39 +185,39 @@ echo "=========================================================================" CURRENT_BLOCK=$BLOCK_SPARK_UNIT_TESTS -{ - # If the Spark SQL tests are enabled, run the tests with the Hive profiles enabled. - # This must be a single argument, as it is. - if [ -n "$_RUN_SQL_TESTS" ]; then - SBT_MAVEN_PROFILES_ARGS="$SBT_MAVEN_PROFILES_ARGS -Phive -Phive-thriftserver" - fi - - if [ -n "$_SQL_TESTS_ONLY" ]; then - # This must be an array of individual arguments. Otherwise, having one long string - # will be interpreted as a single test, which doesn't work. - SBT_MAVEN_TEST_ARGS=("catalyst/test" "sql/test" "hive/test" "hive-thriftserver/test" "mllib/test") - else - SBT_MAVEN_TEST_ARGS=("test") - fi - - echo "[info] Running Spark tests with these arguments: $SBT_MAVEN_PROFILES_ARGS ${SBT_MAVEN_TEST_ARGS[@]}" - - if [ "${AMPLAB_JENKINS_BUILD_TOOL}" == "maven" ]; then - build/mvn test $SBT_MAVEN_PROFILES_ARGS --fail-at-end - else - # NOTE: echo "q" is needed because sbt on encountering a build file with failure - # (either resolution or compilation) prompts the user for input either q, r, etc - # to quit or retry. This echo is there to make it not block. - # NOTE: Do not quote $SBT_MAVEN_PROFILES_ARGS or else it will be interpreted as a - # single argument! - # "${SBT_MAVEN_TEST_ARGS[@]}" is cool because it's an array. - # QUESTION: Why doesn't 'yes "q"' work? - # QUESTION: Why doesn't 'grep -v -e "^\[info\] Resolving"' work? - echo -e "q\n" \ - | build/sbt $SBT_MAVEN_PROFILES_ARGS "${SBT_MAVEN_TEST_ARGS[@]}" \ - | grep -v -e "info.*Resolving" -e "warn.*Merging" -e "info.*Including" - fi -} +#{ +# # If the Spark SQL tests are enabled, run the tests with the Hive profiles enabled. +# # This must be a single argument, as it is. +# if [ -n "$_RUN_SQL_TESTS" ]; then +# SBT_MAVEN_PROFILES_ARGS="$SBT_MAVEN_PROFILES_ARGS -Phive -Phive-thriftserver" +# fi +# +# if [ -n "$_SQL_TESTS_ONLY" ]; then +# # This must be an array of individual arguments. Otherwise, having one long string +# # will be interpreted as a single test, which doesn't work. +# SBT_MAVEN_TEST_ARGS=("catalyst/test" "sql/test" "hive/test" "hive-thriftserver/test" "mllib/test") +# else +# SBT_MAVEN_TEST_ARGS=("test") +# fi +# +# echo "[info] Running Spark tests with these arguments: $SBT_MAVEN_PROFILES_ARGS ${SBT_MAVEN_TEST_ARGS[@]}" +# +# if [ "${AMPLAB_JENKINS_BUILD_TOOL}" == "maven" ]; then +# build/mvn test $SBT_MAVEN_PROFILES_ARGS --fail-at-end +# else +# # NOTE: echo "q" is needed because sbt on encountering a build file with failure +# # (either resolution or compilation) prompts the user for input either q, r, etc +# # to quit or retry. This echo is there to make it not block. +# # NOTE: Do not quote $SBT_MAVEN_PROFILES_ARGS or else it will be interpreted as a +# # single argument! +# # "${SBT_MAVEN_TEST_ARGS[@]}" is cool because it's an array. +# # QUESTION: Why doesn't 'yes "q"' work? +# # QUESTION: Why doesn't 'grep -v -e "^\[info\] Resolving"' work? +# echo -e "q\n" \ +# | build/sbt $SBT_MAVEN_PROFILES_ARGS "${SBT_MAVEN_TEST_ARGS[@]}" \ +# | grep -v -e "info.*Resolving" -e "warn.*Merging" -e "info.*Including" +# fi +#} echo "" echo "=========================================================================" @@ -226,7 +226,7 @@ echo "=========================================================================" CURRENT_BLOCK=$BLOCK_PYSPARK_UNIT_TESTS -./python/run-tests +#./python/run-tests echo "" echo "=========================================================================" @@ -245,4 +245,4 @@ echo "=========================================================================" CURRENT_BLOCK=$BLOCK_MIMA -./dev/mima +#./dev/mima From 410ec184c37bbea5239bc5be07bf96b4add2b992 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 13:07:31 -0700 Subject: [PATCH 671/687] fix zipRDD() tests --- R/pkg/inst/tests/test_rdd.R | 9 ++++----- R/run-tests.sh | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/R/pkg/inst/tests/test_rdd.R b/R/pkg/inst/tests/test_rdd.R index 7df95760fb60d..ba09172079d24 100644 --- a/R/pkg/inst/tests/test_rdd.R +++ b/R/pkg/inst/tests/test_rdd.R @@ -429,8 +429,8 @@ test_that("pipeRDD() on RDDs", { }) test_that("zipRDD() on RDDs", { - rdd1 <- parallelize(sc, 0:4) - rdd2 <- parallelize(sc, 1000:1004) + rdd1 <- parallelize(sc, 0:4, 2) + rdd2 <- parallelize(sc, 1000:1004, 2) actual <- collect(zipRDD(rdd1, rdd2)) expect_equal(actual, list(list(0, 1000), list(1, 1001), list(2, 1002), list(3, 1003), list(4, 1004))) @@ -439,13 +439,12 @@ test_that("zipRDD() on RDDs", { fileName <- tempfile(pattern="spark-test", fileext=".tmp") writeLines(mockFile, fileName) - rdd <- textFile(sc, fileName) + rdd <- textFile(sc, fileName, 1) actual <- collect(zipRDD(rdd, rdd)) expected <- lapply(mockFile, function(x) { list(x ,x) }) expect_equal(actual, expected) - - rdd1 <- parallelize(sc, 0:1, numPartitions(rdd)) + rdd1 <- parallelize(sc, 0:1, 1) actual <- collect(zipRDD(rdd1, rdd)) expected <- lapply(0:1, function(x) { list(x, mockFile[x + 1]) }) expect_equal(actual, expected) diff --git a/R/run-tests.sh b/R/run-tests.sh index d1ce16765bb92..a1fa079f13d86 100755 --- a/R/run-tests.sh +++ b/R/run-tests.sh @@ -23,7 +23,7 @@ FAILED=0 LOGFILE=unit-tests.log rm -f $LOGFILE -$FWDIR/../bin/sparkR $FWDIR/pkg/tests/run-all.R >$LOGFILE 2>&1 +SPARK_TESTING=1 $FWDIR/../bin/sparkR $FWDIR/pkg/tests/run-all.R >$LOGFILE 2>&1 FAILED=$((PIPESTATUS[0]||$FAILED)) if [[ $FAILED != 0 ]]; then From 974e4eaac85179de9f1b9745574b04ecdf0fccee Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 13:38:43 -0700 Subject: [PATCH 672/687] fix flaky test --- R/pkg/inst/tests/test_sparkSQL.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/pkg/inst/tests/test_sparkSQL.R b/R/pkg/inst/tests/test_sparkSQL.R index dd58bd100089b..4883c7833dcc1 100644 --- a/R/pkg/inst/tests/test_sparkSQL.R +++ b/R/pkg/inst/tests/test_sparkSQL.R @@ -285,12 +285,12 @@ test_that("objectFile() works with row serialization", { objectPath <- tempfile(pattern="spark-test", fileext=".tmp") df <- jsonFile(sqlCtx, jsonPath) dfRDD <- toRDD(df) - saveAsObjectFile(dfRDD, objectPath) + saveAsObjectFile(coalesce(dfRDD, 1L), objectPath) objectIn <- objectFile(sc, objectPath) expect_true(inherits(objectIn, "RDD")) - expect_true(SparkR:::getSerializedMode(objectIn) == "byte") - expect_true(collect(objectIn)[[2]]$age == 30) + expect_equal(SparkR:::getSerializedMode(objectIn), "byte") + expect_equal(collect(objectIn)[[2]]$age, 30) }) test_that("lapply() on a DataFrame returns an RDD with the correct columns", { From 423ea3caae19b2ef7201ae969743dfe715972a65 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Mar 2015 13:52:09 -0700 Subject: [PATCH 673/687] Ignore unknown jobj in cleanup --- R/pkg/R/jobj.R | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/R/pkg/R/jobj.R b/R/pkg/R/jobj.R index f01dd8e187914..4180f146b7fbc 100644 --- a/R/pkg/R/jobj.R +++ b/R/pkg/R/jobj.R @@ -77,14 +77,17 @@ print.jobj <- function(x, ...) { cleanup.jobj <- function(jobj) { if (isValidJobj(jobj)) { objId <- jobj$id - .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 + # If we don't know anything about this jobj, ignore it + if (exists(objId, envir = .validJobjs)) { + .validJobjs[[objId]] <- .validJobjs[[objId]] - 1 - if (.validJobjs[[objId]] == 0) { - rm(list = objId, envir = .validJobjs) - # NOTE: We cannot call removeJObject here as the finalizer may be run - # in the middle of another RPC. Thus we queue up this object Id to be removed - # and then run all the removeJObject when the next RPC is called. - .toRemoveJobjs[[objId]] <- 1 + if (.validJobjs[[objId]] == 0) { + rm(list = objId, envir = .validJobjs) + # NOTE: We cannot call removeJObject here as the finalizer may be run + # in the middle of another RPC. Thus we queue up this object Id to be removed + # and then run all the removeJObject when the next RPC is called. + .toRemoveJobjs[[objId]] <- 1 + } } } } From 9fb6af33593ea82365d592ef57ec6bddfd38afa0 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 14:01:50 -0700 Subject: [PATCH 674/687] mark R classes/objects are private --- core/src/main/scala/org/apache/spark/api/r/RBackend.scala | 4 ++-- .../main/scala/org/apache/spark/api/r/RBackendHandler.scala | 4 ++-- core/src/main/scala/org/apache/spark/api/r/RRDD.scala | 4 ++-- core/src/main/scala/org/apache/spark/api/r/SerDe.scala | 4 ++-- .../src/main/scala/org/apache/spark/sql/api/r/SQLUtils.scala | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/api/r/RBackend.scala b/core/src/main/scala/org/apache/spark/api/r/RBackend.scala index 683e17a630e8e..06e3e1f9f46eb 100644 --- a/core/src/main/scala/org/apache/spark/api/r/RBackend.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RBackend.scala @@ -34,7 +34,7 @@ import org.apache.spark.Logging /** * Netty-based backend server that is used to communicate between R and Java. */ -class RBackend { +private[spark] class RBackend { var channelFuture: ChannelFuture = null var bootstrap: ServerBootstrap = null @@ -91,7 +91,7 @@ class RBackend { } -object RBackend extends Logging { +private[spark] object RBackend extends Logging { def main(args: Array[String]) { if (args.length < 1) { System.err.println("Usage: RBackend ") diff --git a/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala b/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala index bc956735903a0..57b08a613a346 100644 --- a/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala @@ -33,7 +33,7 @@ import org.apache.spark.api.r.SerDe._ * this across connections ? */ @Sharable -class RBackendHandler(server: RBackend) +private[r] class RBackendHandler(server: RBackend) extends SimpleChannelInboundHandler[Array[Byte]] with Logging { override def channelRead0(ctx: ChannelHandlerContext, msg: Array[Byte]) { @@ -190,7 +190,7 @@ class RBackendHandler(server: RBackend) * Helper singleton that tracks JVM objects returned to R. * This is useful for referencing these objects in RPC calls. */ -object JVMObjectTracker { +private[r] object JVMObjectTracker { // TODO: This map should be thread-safe if we want to support multiple // connections at the same time diff --git a/core/src/main/scala/org/apache/spark/api/r/RRDD.scala b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala index 83e16f10c442f..d6a65b8cde06f 100644 --- a/core/src/main/scala/org/apache/spark/api/r/RRDD.scala +++ b/core/src/main/scala/org/apache/spark/api/r/RRDD.scala @@ -308,7 +308,7 @@ private class StringRRDD[T: ClassTag]( lazy val asJavaRDD : JavaRDD[String] = JavaRDD.fromRDD(this) } -private[spark] class BufferedStreamThread( +private[r] class BufferedStreamThread( in: InputStream, name: String, errBufferSize: Int) extends Thread(name) with Logging { @@ -333,7 +333,7 @@ private[spark] class BufferedStreamThread( } } -object RRDD { +private[r] object RRDD { // Because forking processes from Java is expensive, we prefer to launch // a single R daemon (daemon.R) and tell it to fork new workers for our tasks. // This daemon currently only works on UNIX-based systems now, so we should diff --git a/core/src/main/scala/org/apache/spark/api/r/SerDe.scala b/core/src/main/scala/org/apache/spark/api/r/SerDe.scala index eb5beaab81602..f2f63b1420c70 100644 --- a/core/src/main/scala/org/apache/spark/api/r/SerDe.scala +++ b/core/src/main/scala/org/apache/spark/api/r/SerDe.scala @@ -25,7 +25,7 @@ import scala.collection.JavaConversions._ /** * Utility functions to serialize, deserialize objects to / from R */ -object SerDe { +private[spark] object SerDe { // Type mapping from R to Java // @@ -334,7 +334,7 @@ object SerDe { } } -object SerializationFormats { +private[r] object SerializationFormats { val BYTE = "byte" val STRING = "string" val ROW = "row" diff --git a/sql/core/src/main/scala/org/apache/spark/sql/api/r/SQLUtils.scala b/sql/core/src/main/scala/org/apache/spark/sql/api/r/SQLUtils.scala index 965ab36390673..e1783597a42f2 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/api/r/SQLUtils.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/api/r/SQLUtils.scala @@ -26,7 +26,7 @@ import org.apache.spark.sql.catalyst.expressions.{Alias, Expression, NamedExpres import org.apache.spark.sql.types.{DataType, StructType} import org.apache.spark.sql.{Column, DataFrame, GroupedData, Row, SQLContext, SaveMode} -object SQLUtils { +private[r] object SQLUtils { def createSQLContext(jsc: JavaSparkContext): SQLContext = { new SQLContext(jsc) } From b44e37167000dc5dac31d63b3c840ba461132996 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Mar 2015 14:26:39 -0700 Subject: [PATCH 675/687] Include RStudio instructions in README --- R/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/R/README.md b/R/README.md index c0f57fc76cd9d..27bfc50395018 100644 --- a/R/README.md +++ b/R/README.md @@ -13,7 +13,7 @@ Build Spark with [Maven](http://spark.apache.org/docs/latest/building-spark.html #### Running sparkR -You can start using it by launching the SparkR shell with +You can start using SparkR by launching the SparkR shell with ./bin/sparkR @@ -25,6 +25,16 @@ SparkContext, you can run To set other options like driver memory, executor memory etc. you can pass in the [spark-submit](http://spark.apache.org/docs/latest/submitting-applications.html) arguments to `./bin/sparkR` +#### Using SparkR from RStudio + +If you wish to use SparkR from RStudio or other R frontends you will need to set some environment variables which point SparkR to your Spark installation. For example +``` +Sys.setenv(SPARK_HOME="/Users/shivaram/spark") # Set this to where Spark is installed +libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths())) # This line loads SparkR from the installed directory +library(SparkR) +sc <- sparkR.init(master="local") +``` + #### Making changes to SparkR The [instructions](https://cwiki.apache.org/confluence/display/SPARK/Contributing+to+Spark) for making contributions to Spark also apply to SparkR. From 05e737544e98d29cf6d08381b99edc1c55d20420 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 16:04:07 -0700 Subject: [PATCH 676/687] sort generics --- R/pkg/R/DataFrame.R | 114 ----------- R/pkg/R/RDD.R | 16 -- R/pkg/R/generics.R | 454 +++++++++++++++++++++++++++----------------- 3 files changed, 278 insertions(+), 306 deletions(-) diff --git a/R/pkg/R/DataFrame.R b/R/pkg/R/DataFrame.R index b29aedcda194f..d53bfd9ca1e48 100644 --- a/R/pkg/R/DataFrame.R +++ b/R/pkg/R/DataFrame.R @@ -67,8 +67,6 @@ dataFrame <- function(sdf, isCached = FALSE) { #' df <- jsonFile(sqlCtx, path) #' printSchema(df) #'} -setGeneric("printSchema", function(x) { standardGeneric("printSchema") }) - setMethod("printSchema", signature(x = "DataFrame"), function(x) { @@ -92,10 +90,6 @@ setMethod("printSchema", #' df <- jsonFile(sqlCtx, path) #' dfSchema <- schema(df) #'} -setGeneric("schema", function(x) { standardGeneric("schema") }) - -#' @rdname schema -#' @export setMethod("schema", signature(x = "DataFrame"), function(x) { @@ -118,10 +112,6 @@ setMethod("schema", #' df <- jsonFile(sqlCtx, path) #' explain(df, TRUE) #'} -setGeneric("explain", function(x, ...) { standardGeneric("explain") }) - -#' @rdname explain -#' @export setMethod("explain", signature(x = "DataFrame"), function(x, extended = FALSE) { @@ -151,10 +141,6 @@ setMethod("explain", #' df <- jsonFile(sqlCtx, path) #' isLocal(df) #'} -setGeneric("isLocal", function(x) { standardGeneric("isLocal") }) - -#' @rdname isLocal -#' @export setMethod("isLocal", signature(x = "DataFrame"), function(x) { @@ -178,10 +164,6 @@ setMethod("isLocal", #' df <- jsonFile(sqlCtx, path) #' showDF(df) #'} -setGeneric("showDF", function(x,...) { standardGeneric("showDF") }) - -#' @rdname showDF -#' @export setMethod("showDF", signature(x = "DataFrame"), function(x, numRows = 20) { @@ -213,10 +195,6 @@ setMethod("show", "DataFrame", #' df <- jsonFile(sqlCtx, path) #' dtypes(df) #'} -setGeneric("dtypes", function(x) { standardGeneric("dtypes") }) - -#' @rdname dtypes -#' @export setMethod("dtypes", signature(x = "DataFrame"), function(x) { @@ -241,10 +219,6 @@ setMethod("dtypes", #' df <- jsonFile(sqlCtx, path) #' columns(df) #'} -setGeneric("columns", function(x) {standardGeneric("columns") }) - -#' @rdname columns -#' @export setMethod("columns", signature(x = "DataFrame"), function(x) { @@ -279,10 +253,6 @@ setMethod("names", #' registerTempTable(df, "json_df") #' new_df <- sql(sqlCtx, "SELECT * FROM json_df") #'} -setGeneric("registerTempTable", function(x, tableName) { standardGeneric("registerTempTable") }) - -#' @rdname registerTempTable -#' @export setMethod("registerTempTable", signature(x = "DataFrame", tableName = "character"), function(x, tableName) { @@ -309,10 +279,6 @@ setMethod("registerTempTable", #' registerTempTable(df, "table1") #' insertInto(df2, "table1", overwrite = TRUE) #'} -setGeneric("insertInto", function(x, tableName, ...) { standardGeneric("insertInto") }) - -#' @rdname insertInto -#' @export setMethod("insertInto", signature(x = "DataFrame", tableName = "character"), function(x, tableName, overwrite = FALSE) { @@ -434,10 +400,6 @@ setMethod("repartition", #' df <- jsonFile(sqlCtx, path) #' newRDD <- toJSON(df) #'} -setGeneric("toJSON", function(x) { standardGeneric("toJSON") }) - -#' @rdname toJSON -#' @export setMethod("toJSON", signature(x = "DataFrame"), function(x) { @@ -463,10 +425,6 @@ setMethod("toJSON", #' df <- jsonFile(sqlCtx, path) #' saveAsParquetFile(df, "/tmp/sparkr-tmp/") #'} -setGeneric("saveAsParquetFile", function(x, path) { standardGeneric("saveAsParquetFile") }) - -#' @rdname saveAsParquetFile -#' @export setMethod("saveAsParquetFile", signature(x = "DataFrame", path = "character"), function(x, path) { @@ -513,13 +471,6 @@ setMethod("distinct", #' collect(sampleDF(df, FALSE, 0.5)) #' collect(sampleDF(df, TRUE, 0.5)) #'} -setGeneric("sampleDF", - function(x, withReplacement, fraction, seed) { - standardGeneric("sampleDF") - }) - -#' @rdname sampleDF -#' @export setMethod("sampleDF", # TODO : Figure out how to send integer as java.lang.Long to JVM so # we can send seed as an argument through callJMethod @@ -604,10 +555,6 @@ setMethod("collect", #' df <- jsonFile(sqlCtx, path) #' limitedDF <- limit(df, 10) #' } -setGeneric("limit", function(x, num) {standardGeneric("limit") }) - -#' @rdname limit -#' @export setMethod("limit", signature(x = "DataFrame", num = "numeric"), function(x, num) { @@ -697,10 +644,6 @@ setMethod("first", #' df <- jsonFile(sqlCtx, path) #' rdd <- toRDD(df) #' } -setGeneric("toRDD", function(x) { standardGeneric("toRDD") }) - -#' @rdname DataFrame -#' @export setMethod("toRDD", signature(x = "DataFrame"), function(x) { @@ -730,10 +673,6 @@ setMethod("toRDD", #' # Compute the max age and average salary, grouped by department and gender. #' agg(groupBy(df, "department", "gender"), salary="avg", "age" -> "max") #' } -setGeneric("groupBy", function(x, ...) { standardGeneric("groupBy") }) - -#' @rdname DataFrame -#' @export setMethod("groupBy", signature(x = "DataFrame"), function(x, ...) { @@ -881,10 +820,6 @@ setMethod("[", signature(x = "DataFrame", i = "missing"), #' select(df, c("col1", "col2")) #' select(df, list(df$name, df$age + 1)) #' } -setGeneric("select", function(x, col, ...) { standardGeneric("select") } ) - -#' @rdname select -#' @export setMethod("select", signature(x = "DataFrame", col = "character"), function(x, col, ...) { sdf <- callJMethod(x@sdf, "select", col, toSeq(...)) @@ -936,10 +871,6 @@ setMethod("select", #' df <- jsonFile(sqlCtx, path) #' selectExpr(df, "col1", "(col2 * 5) as newCol") #' } -setGeneric("selectExpr", function(x, expr, ...) { standardGeneric("selectExpr") }) - -#' @rdname selectExpr -#' @export setMethod("selectExpr", signature(x = "DataFrame", expr = "character"), function(x, expr, ...) { @@ -966,10 +897,6 @@ setMethod("selectExpr", #' df <- jsonFile(sqlCtx, path) #' newDF <- withColumn(df, "newCol", df$col1 * 5) #' } -setGeneric("withColumn", function(x, colName, col) { standardGeneric("withColumn") }) - -#' @rdname withColumn -#' @export setMethod("withColumn", signature(x = "DataFrame", colName = "character", col = "Column"), function(x, colName, col) { @@ -994,11 +921,6 @@ setMethod("withColumn", #' df <- jsonFile(sqlCtx, path) #' newDF <- withColumnRenamed(df, "col1", "newCol1") #' } -setGeneric("withColumnRenamed", function(x, existingCol, newCol) { - standardGeneric("withColumnRenamed") }) - -#' @rdname withColumnRenamed -#' @export setMethod("withColumnRenamed", signature(x = "DataFrame", existingCol = "character", newCol = "character"), function(x, existingCol, newCol) { @@ -1032,12 +954,7 @@ setMethod("withColumnRenamed", #' sortDF(df, "col1") #' sortDF(df, asc(df$col1), desc(abs(df$col2))) #' } -setGeneric("sortDF", function(x, col, ...) { standardGeneric("sortDF") }) - setClassUnion("characterOrColumn", c("character", "Column")) - -#' @rdname sortDF -#' @export setMethod("sortDF", signature(x = "DataFrame", col = "characterOrColumn"), function(x, col, ...) { @@ -1052,10 +969,6 @@ setMethod("sortDF", dataFrame(sdf) }) -#' @rdname sortDF -#' @export -setGeneric("orderBy", function(x, col) { standardGeneric("orderBy") }) - #' @rdname sortDF #' @export setMethod("orderBy", @@ -1083,10 +996,6 @@ setMethod("orderBy", #' filter(df, "col1 > 0") #' filter(df, df$col2 != "abcdefg") #' } -setGeneric("filter", function(x, condition) { standardGeneric("filter") }) - -#' @rdname filter -#' @export setMethod("filter", signature(x = "DataFrame", condition = "characterOrColumn"), function(x, condition) { @@ -1097,10 +1006,6 @@ setMethod("filter", dataFrame(sdf) }) -#' @rdname filter -#' @export -setGeneric("where", function(x, condition) { standardGeneric("where") }) - #' @rdname filter #' @export setMethod("where", @@ -1171,10 +1076,6 @@ setMethod("join", #' df2 <- jsonFile(sqlCtx, path2) #' unioned <- unionAll(df, df2) #' } -setGeneric("unionAll", function(x, y) { standardGeneric("unionAll") }) - -#' @rdname unionAll -#' @export setMethod("unionAll", signature(x = "DataFrame", y = "DataFrame"), function(x, y) { @@ -1200,10 +1101,6 @@ setMethod("unionAll", #' df2 <- jsonFile(sqlCtx, path2) #' intersectDF <- intersect(df, df2) #' } -setGeneric("intersect", function(x, y) { standardGeneric("intersect") }) - -#' @rdname intersect -#' @export setMethod("intersect", signature(x = "DataFrame", y = "DataFrame"), function(x, y) { @@ -1229,10 +1126,6 @@ setMethod("intersect", #' df2 <- jsonFile(sqlCtx, path2) #' subtractDF <- subtract(df, df2) #' } -setGeneric("subtract", function(x, y) { standardGeneric("subtract") }) - -#' @rdname subtract -#' @export setMethod("subtract", signature(x = "DataFrame", y = "DataFrame"), function(x, y) { @@ -1273,8 +1166,6 @@ setMethod("subtract", allModes <- c("append", "overwrite", "error", "ignore") -setGeneric("saveDF", function(df, path, source, mode, ...) { standardGeneric("saveDF") }) - setMethod("saveDF", signature(df = "DataFrame", path = 'character', source = 'character', mode = 'character'), @@ -1328,11 +1219,6 @@ setMethod("saveDF", #' df <- jsonFile(sqlCtx, path) #' saveAsTable(df, "myfile") #' } - -setGeneric("saveAsTable", function(df, tableName, source, mode, ...) { - standardGeneric("saveAsTable") -}) - setMethod("saveAsTable", signature(df = "DataFrame", tableName = 'character', source = 'character', mode = 'character'), diff --git a/R/pkg/R/RDD.R b/R/pkg/R/RDD.R index 0d0141199ab20..93e5248b4a58e 100644 --- a/R/pkg/R/RDD.R +++ b/R/pkg/R/RDD.R @@ -758,8 +758,6 @@ setMethod("take", #' rdd <- parallelize(sc, 1:10) #' first(rdd) #' } -setGeneric("first", function(x) { standardGeneric("first") }) - setMethod("first", signature(x = "RDD"), function(x) { @@ -1134,8 +1132,6 @@ setMethod("takeOrdered", #' rdd <- parallelize(sc, list(10, 1, 2, 9, 3, 4, 5, 6, 7)) #' top(rdd, 6L) # list(10, 9, 7, 6, 5, 4) #'} -setGeneric("top", function(x, num) { standardGeneric("top") }) - #' @rdname top #' @aliases top,RDD,RDD-method setMethod("top", @@ -1162,8 +1158,6 @@ setMethod("top", #' rdd <- parallelize(sc, list(1, 2, 3, 4, 5)) #' fold(rdd, 0, "+") # 15 #'} -setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) - #' @rdname fold #' @aliases fold,RDD,RDD-method setMethod("fold", @@ -1195,8 +1189,6 @@ setMethod("fold", #' combOp <- function(x, y) { list(x[[1]] + y[[1]], x[[2]] + y[[2]]) } #' aggregateRDD(rdd, zeroValue, seqOp, combOp) # list(10, 4) #'} -setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) - #' @rdname aggregateRDD #' @aliases aggregateRDD,RDD,RDD-method setMethod("aggregateRDD", @@ -1228,10 +1220,6 @@ setMethod("aggregateRDD", #' collect(pipeRDD(rdd, "more") #' Output: c("1", "2", ..., "10") #'} -setGeneric("pipeRDD", function(x, command, env = list()) { - standardGeneric("pipeRDD") -}) - #' @rdname pipeRDD #' @aliases pipeRDD,RDD,character-method setMethod("pipeRDD", @@ -1260,8 +1248,6 @@ setMethod("pipeRDD", #' rdd <- parallelize(sc, list(1,2,3)) #' name(rdd) # NULL (if not set before) #'} -setGeneric("name", function(x) { standardGeneric("name") }) - #' @rdname name #' @aliases name,RDD setMethod("name", @@ -1284,8 +1270,6 @@ setMethod("name", #' setName(rdd, "myRDD") #' name(rdd) # "myRDD" #'} -setGeneric("setName", function(x, name) { standardGeneric("setName") }) - #' @rdname setName #' @aliases setName,RDD setMethod("setName", diff --git a/R/pkg/R/generics.R b/R/pkg/R/generics.R index 6113707fb614e..2c14ffb3a2566 100644 --- a/R/pkg/R/generics.R +++ b/R/pkg/R/generics.R @@ -17,32 +17,31 @@ ############ RDD Actions and Transformations ############ -# The jrdd accessor function. -setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) +#' @rdname aggregateRDD +#' @seealso reduce +#' @export +setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) #' @rdname cache-methods #' @export setGeneric("cache", function(x) { standardGeneric("cache") }) -#' @rdname persist -#' @export -setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) - -#' @rdname unpersist-methods +#' @rdname coalesce +#' @seealso repartition #' @export -setGeneric("unpersist", function(x, ...) { standardGeneric("unpersist") }) +setGeneric("coalesce", function(x, numPartitions, ...) { standardGeneric("coalesce") }) #' @rdname checkpoint-methods #' @export setGeneric("checkpoint", function(x) { standardGeneric("checkpoint") }) -#' @rdname numPartitions +#' @rdname collect-methods #' @export -setGeneric("numPartitions", function(x) { standardGeneric("numPartitions") }) +setGeneric("collect", function(x, ...) { standardGeneric("collect") }) #' @rdname collect-methods #' @export -setGeneric("collect", function(x, ...) { standardGeneric("collect") }) +setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) #' @rdname collect-methods #' @export @@ -51,10 +50,6 @@ setGeneric("collectPartition", standardGeneric("collectPartition") }) -#' @rdname collect-methods -#' @export -setGeneric("collectAsMap", function(x) { standardGeneric("collectAsMap") }) - #' @rdname count #' @export setGeneric("count", function(x) { standardGeneric("count") }) @@ -63,45 +58,65 @@ setGeneric("count", function(x) { standardGeneric("count") }) #' @export setGeneric("countByValue", function(x) { standardGeneric("countByValue") }) -#' @rdname lapply +#' @rdname distinct #' @export -setGeneric("map", function(X, FUN) { - standardGeneric("map") }) +setGeneric("distinct", function(x, numPartitions = 1L) { standardGeneric("distinct") }) +#' @rdname filterRDD +#' @export +setGeneric("filterRDD", function(x, f) { standardGeneric("filterRDD") }) + +#' @rdname first +#' @export +setGeneric("first", function(x) { standardGeneric("first") }) #' @rdname flatMap #' @export -setGeneric("flatMap", function(X, FUN) { - standardGeneric("flatMap") }) +setGeneric("flatMap", function(X, FUN) { standardGeneric("flatMap") }) -#' @rdname lapplyPartition +#' @rdname fold +#' @seealso reduce +#' @export +setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) + +#' @rdname foreach #' @export -setGeneric("lapplyPartition", function(X, FUN) { - standardGeneric("lapplyPartition") }) +setGeneric("foreach", function(x, func) { standardGeneric("foreach") }) + +#' @rdname foreach +#' @export +setGeneric("foreachPartition", function(x, func) { standardGeneric("foreachPartition") }) + +# The jrdd accessor function. +setGeneric("getJRDD", function(rdd, ...) { standardGeneric("getJRDD") }) + +#' @rdname keyBy +#' @export +setGeneric("keyBy", function(x, func) { standardGeneric("keyBy") }) #' @rdname lapplyPartition #' @export -setGeneric("mapPartitions", function(X, FUN) { - standardGeneric("mapPartitions") }) +setGeneric("lapplyPartition", function(X, FUN) { standardGeneric("lapplyPartition") }) #' @rdname lapplyPartitionsWithIndex #' @export -setGeneric("lapplyPartitionsWithIndex", function(X, FUN) { - standardGeneric("lapplyPartitionsWithIndex") }) +setGeneric("lapplyPartitionsWithIndex", + function(X, FUN) { + standardGeneric("lapplyPartitionsWithIndex") + }) -#' @rdname lapplyPartitionsWithIndex +#' @rdname lapply #' @export -setGeneric("mapPartitionsWithIndex", function(X, FUN) { - standardGeneric("mapPartitionsWithIndex") }) +setGeneric("map", function(X, FUN) { standardGeneric("map") }) -#' @rdname filterRDD +#' @rdname lapplyPartition #' @export -setGeneric("filterRDD", - function(x, f) { standardGeneric("filterRDD") }) +setGeneric("mapPartitions", function(X, FUN) { standardGeneric("mapPartitions") }) -#' @rdname reduce +#' @rdname lapplyPartitionsWithIndex #' @export -setGeneric("reduce", function(x, func) { standardGeneric("reduce") }) +setGeneric("mapPartitionsWithIndex", + function(X, FUN) { standardGeneric("mapPartitionsWithIndex") }) #' @rdname maximum #' @export @@ -111,51 +126,37 @@ setGeneric("maximum", function(x) { standardGeneric("maximum") }) #' @export setGeneric("minimum", function(x) { standardGeneric("minimum") }) -#' @rdname foreach -#' @export -setGeneric("foreach", function(x, func) { standardGeneric("foreach") }) - -#' @rdname foreach -#' @export -setGeneric("foreachPartition", - function(x, func) { standardGeneric("foreachPartition") }) - -#' @rdname take +#' @rdname name #' @export -setGeneric("take", function(x, num) { standardGeneric("take") }) +setGeneric("name", function(x) { standardGeneric("name") }) -#' @rdname distinct +#' @rdname numPartitions #' @export -setGeneric("distinct", - function(x, numPartitions = 1L) { standardGeneric("distinct") }) +setGeneric("numPartitions", function(x) { standardGeneric("numPartitions") }) -#' @rdname sampleRDD +#' @rdname persist #' @export -setGeneric("sampleRDD", - function(x, withReplacement, fraction, seed) { - standardGeneric("sampleRDD") - }) +setGeneric("persist", function(x, newLevel) { standardGeneric("persist") }) -#' @rdname takeSample +#' @rdname pipeRDD #' @export -setGeneric("takeSample", - function(x, withReplacement, num, seed) { - standardGeneric("takeSample") - }) +setGeneric("pipeRDD", function(x, command, env = list()) { standardGeneric("pipeRDD")}) -#' @rdname keyBy +#' @rdname reduce #' @export -setGeneric("keyBy", function(x, func) { standardGeneric("keyBy") }) +setGeneric("reduce", function(x, func) { standardGeneric("reduce") }) #' @rdname repartition #' @seealso coalesce #' @export setGeneric("repartition", function(x, numPartitions) { standardGeneric("repartition") }) -#' @rdname coalesce -#' @seealso repartition +#' @rdname sampleRDD #' @export -setGeneric("coalesce", function(x, numPartitions, ...) { standardGeneric("coalesce") }) +setGeneric("sampleRDD", + function(x, withReplacement, fraction, seed) { + standardGeneric("sampleRDD") + }) #' @rdname saveAsObjectFile #' @seealso objectFile @@ -166,127 +167,104 @@ setGeneric("saveAsObjectFile", function(x, path) { standardGeneric("saveAsObject #' @export setGeneric("saveAsTextFile", function(x, path) { standardGeneric("saveAsTextFile") }) -#' @rdname sortBy +#' @rdname setName #' @export -setGeneric("sortBy", function(x, - func, - ascending = TRUE, - numPartitions = 1L) { - standardGeneric("sortBy") -}) +setGeneric("setName", function(x, name) { standardGeneric("setName") }) -#' @rdname takeOrdered +#' @rdname sortBy #' @export -setGeneric("takeOrdered", function(x, num) { standardGeneric("takeOrdered") }) +setGeneric("sortBy", + function(x, func, ascending = TRUE, numPartitions = 1L) { + standardGeneric("sortBy") + }) -#' @rdname top +#' @rdname take #' @export -setGeneric("top", function(x, num) { standardGeneric("top") }) +setGeneric("take", function(x, num) { standardGeneric("take") }) -#' @rdname fold -#' @seealso reduce +#' @rdname takeOrdered #' @export -setGeneric("fold", function(x, zeroValue, op) { standardGeneric("fold") }) +setGeneric("takeOrdered", function(x, num) { standardGeneric("takeOrdered") }) -#' @rdname aggregateRDD -#' @seealso reduce +#' @rdname takeSample #' @export -setGeneric("aggregateRDD", function(x, zeroValue, seqOp, combOp) { standardGeneric("aggregateRDD") }) +setGeneric("takeSample", + function(x, withReplacement, num, seed) { + standardGeneric("takeSample") + }) -#' @rdname pipeRDD +#' @rdname top #' @export -setGeneric("pipeRDD", function(x, command, env = list()) { - standardGeneric("pipeRDD") -}) +setGeneric("top", function(x, num) { standardGeneric("top") }) -#' @rdname name +#' @rdname unionRDD #' @export -setGeneric("name", function(x) { standardGeneric("name") }) +setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) -#' @rdname setName +#' @rdname unpersist-methods #' @export -setGeneric("setName", function(x, name) { standardGeneric("setName") }) +setGeneric("unpersist", function(x, ...) { standardGeneric("unpersist") }) #' @rdname zipRDD #' @export setGeneric("zipRDD", function(x, other) { standardGeneric("zipRDD") }) -#' @rdname zipWithUniqueId -#' @seealso zipWithIndex -#' @export -setGeneric("zipWithUniqueId", function(x) { standardGeneric("zipWithUniqueId") }) - #' @rdname zipWithIndex #' @seealso zipWithUniqueId #' @export setGeneric("zipWithIndex", function(x) { standardGeneric("zipWithIndex") }) - -############ Binary Functions ############# - - -#' @rdname unionRDD +#' @rdname zipWithUniqueId +#' @seealso zipWithIndex #' @export -setGeneric("unionRDD", function(x, y) { standardGeneric("unionRDD") }) +setGeneric("zipWithUniqueId", function(x) { standardGeneric("zipWithUniqueId") }) -#' @rdname lookup -#' @export -setGeneric("lookup", function(x, key) { standardGeneric("lookup") }) + +############ Binary Functions ############# #' @rdname countByKey #' @export setGeneric("countByKey", function(x) { standardGeneric("countByKey") }) +#' @rdname flatMapValues +#' @export +setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) + #' @rdname keys #' @export setGeneric("keys", function(x) { standardGeneric("keys") }) -#' @rdname values +#' @rdname lookup #' @export -setGeneric("values", function(x) { standardGeneric("values") }) +setGeneric("lookup", function(x, key) { standardGeneric("lookup") }) #' @rdname mapValues #' @export setGeneric("mapValues", function(X, FUN) { standardGeneric("mapValues") }) -#' @rdname flatMapValues +#' @rdname values #' @export -setGeneric("flatMapValues", function(X, FUN) { standardGeneric("flatMapValues") }) - +setGeneric("values", function(x) { standardGeneric("values") }) -############ Shuffle Functions ############ -#' @rdname partitionBy -#' @export -setGeneric("partitionBy", - function(x, numPartitions, ...) { - standardGeneric("partitionBy") - }) - -#' @rdname groupByKey -#' @seealso reduceByKey -#' @export -setGeneric("groupByKey", - function(x, numPartitions) { - standardGeneric("groupByKey") - }) +############ Shuffle Functions ############ -#' @rdname reduceByKey -#' @seealso groupByKey +#' @rdname aggregateByKey +#' @seealso foldByKey, combineByKey #' @export -setGeneric("reduceByKey", - function(x, combineFunc, numPartitions) { - standardGeneric("reduceByKey") +setGeneric("aggregateByKey", + function(x, zeroValue, seqOp, combOp, numPartitions) { + standardGeneric("aggregateByKey") }) -#' @rdname reduceByKeyLocally -#' @seealso reduceByKey +#' @rdname cogroup #' @export -setGeneric("reduceByKeyLocally", - function(x, combineFunc) { - standardGeneric("reduceByKeyLocally") - }) +setGeneric("cogroup", + function(..., numPartitions) { + standardGeneric("cogroup") + }, + signature = "...") #' @rdname combineByKey #' @seealso groupByKey, reduceByKey @@ -296,14 +274,6 @@ setGeneric("combineByKey", standardGeneric("combineByKey") }) -#' @rdname aggregateByKey -#' @seealso foldByKey, combineByKey -#' @export -setGeneric("aggregateByKey", - function(x, zeroValue, seqOp, combOp, numPartitions) { - standardGeneric("aggregateByKey") - }) - #' @rdname foldByKey #' @seealso aggregateByKey, combineByKey #' @export @@ -312,6 +282,15 @@ setGeneric("foldByKey", standardGeneric("foldByKey") }) +#' @rdname join-methods +#' @export +setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) + +#' @rdname groupByKey +#' @seealso reduceByKey +#' @export +setGeneric("groupByKey", function(x, numPartitions) { standardGeneric("groupByKey") }) + #' @rdname join-methods #' @export setGeneric("join", function(x, y, ...) { standardGeneric("join") }) @@ -320,75 +299,191 @@ setGeneric("join", function(x, y, ...) { standardGeneric("join") }) #' @export setGeneric("leftOuterJoin", function(x, y, numPartitions) { standardGeneric("leftOuterJoin") }) -#' @rdname join-methods +#' @rdname partitionBy #' @export -setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) +setGeneric("partitionBy", function(x, numPartitions, ...) { standardGeneric("partitionBy") }) -#' @rdname join-methods +#' @rdname reduceByKey +#' @seealso groupByKey #' @export -setGeneric("fullOuterJoin", function(x, y, numPartitions) { standardGeneric("fullOuterJoin") }) +setGeneric("reduceByKey", function(x, combineFunc, numPartitions) { standardGeneric("reduceByKey")}) -#' @rdname cogroup +#' @rdname reduceByKeyLocally +#' @seealso reduceByKey #' @export -setGeneric("cogroup", - function(..., numPartitions) { standardGeneric("cogroup") }, - signature = "...") +setGeneric("reduceByKeyLocally", + function(x, combineFunc) { + standardGeneric("reduceByKeyLocally") + }) + +#' @rdname join-methods +#' @export +setGeneric("rightOuterJoin", function(x, y, numPartitions) { standardGeneric("rightOuterJoin") }) #' @rdname sortByKey #' @export -setGeneric("sortByKey", function(x, - ascending = TRUE, - numPartitions = 1L) { +setGeneric("sortByKey", function(x, ascending = TRUE, numPartitions = 1L) { standardGeneric("sortByKey") }) - -############ Broadcast Variable Methods ############ - +################### Broadcast Variable Methods ################# #' @rdname broadcast #' @export setGeneric("value", function(bcast) { standardGeneric("value") }) -################### Column Methods ######################## -#' @rdname column +#################### DataFrame Methods ######################## + +#' @rdname schema #' @export -setGeneric("asc", function(x) { standardGeneric("asc") }) +setGeneric("columns", function(x) {standardGeneric("columns") }) -#' @rdname column +#' @rdname schema #' @export -setGeneric("desc", function(x) { standardGeneric("desc") }) +setGeneric("dtypes", function(x) { standardGeneric("dtypes") }) -#' @rdname column +#' @rdname explain #' @export -setGeneric("avg", function(x, ...) { standardGeneric("avg") }) +setGeneric("explain", function(x, ...) { standardGeneric("explain") }) + +#' @rdname filter +#' @export +setGeneric("filter", function(x, condition) { standardGeneric("filter") }) + +#' @rdname DataFrame +#' @export +setGeneric("groupBy", function(x, ...) { standardGeneric("groupBy") }) + +#' @rdname insertInto +#' @export +setGeneric("insertInto", function(x, tableName, ...) { standardGeneric("insertInto") }) + +#' @rdname intersect +#' @export +setGeneric("intersect", function(x, y) { standardGeneric("intersect") }) + +#' @rdname isLocal +#' @export +setGeneric("isLocal", function(x) { standardGeneric("isLocal") }) + +#' @rdname limit +#' @export +setGeneric("limit", function(x, num) {standardGeneric("limit") }) + +#' @rdname sortDF +#' @export +setGeneric("orderBy", function(x, col) { standardGeneric("orderBy") }) + +#' @rdname schema +#' @export +setGeneric("printSchema", function(x) { standardGeneric("printSchema") }) + +#' @rdname registerTempTable +#' @export +setGeneric("registerTempTable", function(x, tableName) { standardGeneric("registerTempTable") }) + +#' @rdname sampleDF +#' @export +setGeneric("sampleDF", + function(x, withReplacement, fraction, seed) { + standardGeneric("sampleDF") + }) + +#' @rdname saveAsParquetFile +#' @export +setGeneric("saveAsParquetFile", function(x, path) { standardGeneric("saveAsParquetFile") }) + +#' @rdname save +#' @export +setGeneric("saveAsTable", function(df, tableName, source, mode, ...) { + standardGeneric("saveAsTable") +}) + +#' @rdname save +#' @export +setGeneric("saveDF", function(df, path, source, mode, ...) { standardGeneric("saveDF") }) + +#' @rdname schema +#' @export +setGeneric("schema", function(x) { standardGeneric("schema") }) + +#' @rdname select +#' @export +setGeneric("select", function(x, col, ...) { standardGeneric("select") } ) + +#' @rdname select +#' @export +setGeneric("selectExpr", function(x, expr, ...) { standardGeneric("selectExpr") }) + +#' @rdname show +#' @export +setGeneric("showDF", function(x,...) { standardGeneric("showDF") }) + +#' @rdname sortDF +#' @export +setGeneric("sortDF", function(x, col, ...) { standardGeneric("sortDF") }) + +#' @rdname subtract +#' @export +setGeneric("subtract", function(x, y) { standardGeneric("subtract") }) + +#' @rdname toJSON +#' @export +setGeneric("toJSON", function(x) { standardGeneric("toJSON") }) + +#' @rdname DataFrame +#' @export +setGeneric("toRDD", function(x) { standardGeneric("toRDD") }) + +#' @rdname unionAll +#' @export +setGeneric("unionAll", function(x, y) { standardGeneric("unionAll") }) + +#' @rdname filter +#' @export +setGeneric("where", function(x, condition) { standardGeneric("where") }) + +#' @rdname withColumn +#' @export +setGeneric("withColumn", function(x, colName, col) { standardGeneric("withColumn") }) + +#' @rdname withColumnRenamed +#' @export +setGeneric("withColumnRenamed", function(x, existingCol, newCol) { + standardGeneric("withColumnRenamed") }) + + +###################### Column Methods ########################## #' @rdname column #' @export -setGeneric("last", function(x) { standardGeneric("last") }) +setGeneric("approxCountDistinct", function(x, ...) { standardGeneric("approxCountDistinct") }) #' @rdname column #' @export -setGeneric("lower", function(x) { standardGeneric("lower") }) +setGeneric("asc", function(x) { standardGeneric("asc") }) #' @rdname column #' @export -setGeneric("upper", function(x) { standardGeneric("upper") }) +setGeneric("avg", function(x, ...) { standardGeneric("avg") }) #' @rdname column #' @export -setGeneric("like", function(x, ...) { standardGeneric("like") }) +setGeneric("cast", function(x, dataType) { standardGeneric("cast") }) #' @rdname column #' @export -setGeneric("rlike", function(x, ...) { standardGeneric("rlike") }) +setGeneric("contains", function(x, ...) { standardGeneric("contains") }) +#' @rdname column +#' @export +setGeneric("countDistinct", function(x, ...) { standardGeneric("countDistinct") }) #' @rdname column #' @export -setGeneric("startsWith", function(x, ...) { standardGeneric("startsWith") }) +setGeneric("desc", function(x) { standardGeneric("desc") }) #' @rdname column #' @export @@ -404,30 +499,37 @@ setGeneric("getItem", function(x, ...) { standardGeneric("getItem") }) #' @rdname column #' @export -setGeneric("contains", function(x, ...) { standardGeneric("contains") }) +setGeneric("isNull", function(x) { standardGeneric("isNull") }) #' @rdname column #' @export -setGeneric("isNull", function(x) { standardGeneric("isNull") }) +setGeneric("isNotNull", function(x) { standardGeneric("isNotNull") }) #' @rdname column #' @export -setGeneric("isNotNull", function(x) { standardGeneric("isNotNull") }) +setGeneric("last", function(x) { standardGeneric("last") }) #' @rdname column #' @export -setGeneric("sumDistinct", function(x) { standardGeneric("sumDistinct") }) +setGeneric("like", function(x, ...) { standardGeneric("like") }) #' @rdname column #' @export -setGeneric("cast", function(x, dataType) { standardGeneric("cast") }) +setGeneric("lower", function(x) { standardGeneric("lower") }) #' @rdname column #' @export -setGeneric("approxCountDistinct", function(x, ...) { standardGeneric("approxCountDistinct") }) +setGeneric("rlike", function(x, ...) { standardGeneric("rlike") }) #' @rdname column #' @export -setGeneric("countDistinct", function(x, ...) { standardGeneric("countDistinct") }) +setGeneric("startsWith", function(x, ...) { standardGeneric("startsWith") }) + +#' @rdname column +#' @export +setGeneric("sumDistinct", function(x) { standardGeneric("sumDistinct") }) +#' @rdname column +#' @export +setGeneric("upper", function(x) { standardGeneric("upper") }) From 7100fb9e51bf123713948213a267096cd230d634 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Mar 2015 16:48:01 -0700 Subject: [PATCH 677/687] Fix libPaths in README --- R/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/README.md b/R/README.md index 27bfc50395018..cfdc44c54ece4 100644 --- a/R/README.md +++ b/R/README.md @@ -29,8 +29,10 @@ To set other options like driver memory, executor memory etc. you can pass in th If you wish to use SparkR from RStudio or other R frontends you will need to set some environment variables which point SparkR to your Spark installation. For example ``` -Sys.setenv(SPARK_HOME="/Users/shivaram/spark") # Set this to where Spark is installed -libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths())) # This line loads SparkR from the installed directory +# Set this to where Spark is installed +Sys.setenv(SPARK_HOME="/Users/shivaram/spark") +# This line loads SparkR from the installed directory +.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths())) library(SparkR) sc <- sparkR.init(master="local") ``` From d87a181c9338602862c9b0691cecb6e9d81ce6fb Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 17:01:21 -0700 Subject: [PATCH 678/687] fix flaky tests --- R/pkg/inst/tests/test_sparkSQL.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/pkg/inst/tests/test_sparkSQL.R b/R/pkg/inst/tests/test_sparkSQL.R index 4883c7833dcc1..a55939089e6ea 100644 --- a/R/pkg/inst/tests/test_sparkSQL.R +++ b/R/pkg/inst/tests/test_sparkSQL.R @@ -608,13 +608,13 @@ test_that("join() on a DataFrame", { joined3 <- join(df, df2, df$name == df2$name, "right_outer") expect_equal(names(joined3), c("age", "name", "name", "test")) expect_true(count(joined3) == 4) - expect_true(is.na(collect(joined3)$age[4])) + expect_true(is.na(collect(orderBy(joined3, joined3$age))$age[2])) joined4 <- select(join(df, df2, df$name == df2$name, "outer"), alias(df$age + 5, "newAge"), df$name, df2$test) expect_equal(names(joined4), c("newAge", "name", "test")) expect_true(count(joined4) == 4) - expect_true(first(joined4)$newAge == 24) + expect_equal(collect(orderBy(joined4, joined4$name))$newAge[3], 24) }) test_that("toJSON() returns an RDD of the correct values", { @@ -678,7 +678,7 @@ test_that("saveDF() on DataFrame and works with parquetFile", { saveDF(df, parquetPath, "parquet", mode="overwrite") parquetDF <- parquetFile(sqlCtx, parquetPath) expect_true(inherits(parquetDF, "DataFrame")) - expect_equal(collect(df), collect(parquetDF)) + expect_equal(collect(df)[order("name")], collect(parquetDF)[order("name")]) }) test_that("parquetFile works with multiple input paths", { From 0e5a83f692974752d794d5bc1c9cae17cbc65735 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 17:25:35 -0700 Subject: [PATCH 679/687] fix code style --- R/pkg/DESCRIPTION | 4 ++-- R/pkg/R/{sparkRBackend.R => backend.R} | 0 R/pkg/R/{sparkRClient.R => client.R} | 0 R/pkg/R/sparkR.R | 19 +++++++++---------- .../org/apache/spark/deploy/SparkSubmit.scala | 10 +++++----- 5 files changed, 16 insertions(+), 17 deletions(-) rename R/pkg/R/{sparkRBackend.R => backend.R} (100%) rename R/pkg/R/{sparkRClient.R => client.R} (100%) diff --git a/R/pkg/DESCRIPTION b/R/pkg/DESCRIPTION index 674e279c03316..440e3e6e98a4e 100644 --- a/R/pkg/DESCRIPTION +++ b/R/pkg/DESCRIPTION @@ -29,7 +29,7 @@ Collate: 'deserialize.R' 'serialize.R' 'sparkR.R' - 'sparkRBackend.R' - 'sparkRClient.R' + 'backend.R' + 'client.R' 'utils.R' 'zzz.R' diff --git a/R/pkg/R/sparkRBackend.R b/R/pkg/R/backend.R similarity index 100% rename from R/pkg/R/sparkRBackend.R rename to R/pkg/R/backend.R diff --git a/R/pkg/R/sparkRClient.R b/R/pkg/R/client.R similarity index 100% rename from R/pkg/R/sparkRClient.R rename to R/pkg/R/client.R diff --git a/R/pkg/R/sparkR.R b/R/pkg/R/sparkR.R index ba58e36879ec6..dff45959e2f8f 100644 --- a/R/pkg/R/sparkR.R +++ b/R/pkg/R/sparkR.R @@ -42,7 +42,7 @@ sparkR.stop <- function(env = .sparkREnv) { rm(".sparkRjsc", envir = env) } - if (exists(".sparkRBackendLaunched", envir = env)) { + if (exists(".backendLaunched", envir = env)) { callJStatic("SparkRHandler", "stopBackend") } @@ -79,7 +79,6 @@ sparkR.stop <- function(env = .sparkREnv) { #' @param sparkExecutorEnv Named list of environment variables to be used when launching executors. #' @param sparkJars Character string vector of jar files to pass to the worker nodes. #' @param sparkRLibDir The path where R is installed on the worker nodes. -#' @param sparkRBackendPort The port to use for SparkR JVM Backend. #' @export #' @examples #'\dontrun{ @@ -119,9 +118,9 @@ sparkR.init <- function( uriSep <- "////" } - sparkRExistingPort <- Sys.getenv("EXISTING_SPARKR_BACKEND_PORT", "") - if (sparkRExistingPort != "") { - sparkRBackendPort <- sparkRExistingPort + existingPort <- Sys.getenv("EXISTING_SPARKR_BACKEND_PORT", "") + if (existingPort != "") { + backendPort <- existingPort } else { path <- tempfile(pattern = "backend_port") launchBackend( @@ -142,21 +141,21 @@ sparkR.init <- function( stop("JVM is not ready after 10 seconds") } f <- file(path, open='rb') - sparkRBackendPort <- readInt(f) + backendPort <- readInt(f) monitorPort <- readInt(f) close(f) file.remove(path) - if (length(sparkRBackendPort) == 0 || sparkRBackendPort == 0 || + if (length(backendPort) == 0 || backendPort == 0 || length(monitorPort) == 0 || monitorPort == 0) { stop("JVM failed to launch") } assign(".monitorConn", socketConnection(port = monitorPort), envir = .sparkREnv) - assign(".sparkRBackendLaunched", 1, envir = .sparkREnv) + assign(".backendLaunched", 1, envir = .sparkREnv) } - .sparkREnv$sparkRBackendPort <- sparkRBackendPort + .sparkREnv$backendPort <- backendPort tryCatch({ - connectBackend("localhost", sparkRBackendPort) + connectBackend("localhost", backendPort) }, error = function(err) { stop("Failed to connect JVM\n") }) diff --git a/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala b/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala index c27d310850b7a..f1b222bda7635 100644 --- a/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala +++ b/core/src/main/scala/org/apache/spark/deploy/SparkSubmit.scala @@ -471,18 +471,18 @@ object SparkSubmit { childMainClass = "org.apache.spark.deploy.yarn.Client" if (args.isPython) { val mainPyFile = new Path(args.primaryResource).getName - childArgs +=("--primary-py-file", mainPyFile) + childArgs += ("--primary-py-file", mainPyFile) if (args.pyFiles != null) { // These files will be distributed to each machine's working directory, so strip the // path prefix val pyFilesNames = args.pyFiles.split(",").map(p => (new Path(p)).getName).mkString(",") - childArgs +=("--py-files", pyFilesNames) + childArgs += ("--py-files", pyFilesNames) } - childArgs +=("--class", "org.apache.spark.deploy.PythonRunner") + childArgs += ("--class", "org.apache.spark.deploy.PythonRunner") } else if (args.isR) { val mainFile = new Path(args.primaryResource).getName - childArgs +=("--primary-r-file", mainFile) - childArgs +=("--class", "org.apache.spark.deploy.RRunner") + childArgs += ("--primary-r-file", mainFile) + childArgs += ("--class", "org.apache.spark.deploy.RRunner") } else { if (args.primaryResource != SPARK_INTERNAL) { childArgs += ("--jar", args.primaryResource) From d6d3729dad49655929d3cc3cbee3d55e39e51786 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Wed, 18 Mar 2015 17:48:17 -0700 Subject: [PATCH 680/687] enable spark and pyspark tests --- dev/run-tests | 70 +++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/dev/run-tests b/dev/run-tests index 18b1a2a430643..d9e8d39a29b4b 100755 --- a/dev/run-tests +++ b/dev/run-tests @@ -185,39 +185,39 @@ echo "=========================================================================" CURRENT_BLOCK=$BLOCK_SPARK_UNIT_TESTS -#{ -# # If the Spark SQL tests are enabled, run the tests with the Hive profiles enabled. -# # This must be a single argument, as it is. -# if [ -n "$_RUN_SQL_TESTS" ]; then -# SBT_MAVEN_PROFILES_ARGS="$SBT_MAVEN_PROFILES_ARGS -Phive -Phive-thriftserver" -# fi -# -# if [ -n "$_SQL_TESTS_ONLY" ]; then -# # This must be an array of individual arguments. Otherwise, having one long string -# # will be interpreted as a single test, which doesn't work. -# SBT_MAVEN_TEST_ARGS=("catalyst/test" "sql/test" "hive/test" "hive-thriftserver/test" "mllib/test") -# else -# SBT_MAVEN_TEST_ARGS=("test") -# fi -# -# echo "[info] Running Spark tests with these arguments: $SBT_MAVEN_PROFILES_ARGS ${SBT_MAVEN_TEST_ARGS[@]}" -# -# if [ "${AMPLAB_JENKINS_BUILD_TOOL}" == "maven" ]; then -# build/mvn test $SBT_MAVEN_PROFILES_ARGS --fail-at-end -# else -# # NOTE: echo "q" is needed because sbt on encountering a build file with failure -# # (either resolution or compilation) prompts the user for input either q, r, etc -# # to quit or retry. This echo is there to make it not block. -# # NOTE: Do not quote $SBT_MAVEN_PROFILES_ARGS or else it will be interpreted as a -# # single argument! -# # "${SBT_MAVEN_TEST_ARGS[@]}" is cool because it's an array. -# # QUESTION: Why doesn't 'yes "q"' work? -# # QUESTION: Why doesn't 'grep -v -e "^\[info\] Resolving"' work? -# echo -e "q\n" \ -# | build/sbt $SBT_MAVEN_PROFILES_ARGS "${SBT_MAVEN_TEST_ARGS[@]}" \ -# | grep -v -e "info.*Resolving" -e "warn.*Merging" -e "info.*Including" -# fi -#} +{ + # If the Spark SQL tests are enabled, run the tests with the Hive profiles enabled. + # This must be a single argument, as it is. + if [ -n "$_RUN_SQL_TESTS" ]; then + SBT_MAVEN_PROFILES_ARGS="$SBT_MAVEN_PROFILES_ARGS -Phive -Phive-thriftserver" + fi + + if [ -n "$_SQL_TESTS_ONLY" ]; then + # This must be an array of individual arguments. Otherwise, having one long string + # will be interpreted as a single test, which doesn't work. + SBT_MAVEN_TEST_ARGS=("catalyst/test" "sql/test" "hive/test" "hive-thriftserver/test" "mllib/test") + else + SBT_MAVEN_TEST_ARGS=("test") + fi + + echo "[info] Running Spark tests with these arguments: $SBT_MAVEN_PROFILES_ARGS ${SBT_MAVEN_TEST_ARGS[@]}" + + if [ "${AMPLAB_JENKINS_BUILD_TOOL}" == "maven" ]; then + build/mvn test $SBT_MAVEN_PROFILES_ARGS --fail-at-end + else + # NOTE: echo "q" is needed because sbt on encountering a build file with failure + # (either resolution or compilation) prompts the user for input either q, r, etc + # to quit or retry. This echo is there to make it not block. + # NOTE: Do not quote $SBT_MAVEN_PROFILES_ARGS or else it will be interpreted as a + # single argument! + # "${SBT_MAVEN_TEST_ARGS[@]}" is cool because it's an array. + # QUESTION: Why doesn't 'yes "q"' work? + # QUESTION: Why doesn't 'grep -v -e "^\[info\] Resolving"' work? + echo -e "q\n" \ + | build/sbt $SBT_MAVEN_PROFILES_ARGS "${SBT_MAVEN_TEST_ARGS[@]}" \ + | grep -v -e "info.*Resolving" -e "warn.*Merging" -e "info.*Including" + fi +} echo "" echo "=========================================================================" @@ -226,7 +226,7 @@ echo "=========================================================================" CURRENT_BLOCK=$BLOCK_PYSPARK_UNIT_TESTS -#./python/run-tests +./python/run-tests echo "" echo "=========================================================================" @@ -245,4 +245,4 @@ echo "=========================================================================" CURRENT_BLOCK=$BLOCK_MIMA -#./dev/mima +./dev/mima From 02b48339a450a5e5d388649456f4171945af214a Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Mar 2015 18:03:30 -0700 Subject: [PATCH 681/687] Add a script to generate R docs (Rd, html) Also fix some issues with our documentation --- .gitignore | 4 ++++ R/create-docs.sh | 29 +++++++++++++++++++++++++++++ R/pkg/R/DataFrame.R | 2 +- R/pkg/R/SQLContext.R | 4 ++++ R/pkg/R/column.R | 5 +++-- R/pkg/R/group.R | 2 +- 6 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 R/create-docs.sh diff --git a/.gitignore b/.gitignore index d162fa9cca994..b10dcc326d435 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,7 @@ metastore/ warehouse/ TempStatsStore/ sql/hive-thriftserver/test_warehouses + +# SparkR docs +R/pkg/man +R/pkg/html diff --git a/R/create-docs.sh b/R/create-docs.sh new file mode 100644 index 0000000000000..a158039628716 --- /dev/null +++ b/R/create-docs.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Script to create API docs for SparkR +# This requires `devtools` and `knitr` to be installed on the machine. + +# After running this script the html docs can be found in +# $SPARK_HOME/R/pkg/html + +# Figure out where the script is +export FWDIR="$(cd "`dirname "$0"`"; pwd)" +pushd $FWDIR + +# Generate Rd file +Rscript -e 'library(devtools); devtools::document(pkg="./pkg", roclets=c("rd"))' + +# Install the package +./install-dev.sh + +# Now create HTML files + +# knit_rd puts html in current working directory +mkdir -p pkg/html +pushd pkg/html + +Rscript -e 'library(SparkR, lib.loc="../../lib"); library(knitr); knit_rd("SparkR")' + +popd + +popd diff --git a/R/pkg/R/DataFrame.R b/R/pkg/R/DataFrame.R index b29aedcda194f..6f85c2aaf3dbf 100644 --- a/R/pkg/R/DataFrame.R +++ b/R/pkg/R/DataFrame.R @@ -723,7 +723,7 @@ setMethod("toRDD", #' @rdname DataFrame #' @export #' @examples -#' \dontrun { +#' \dontrun{ #' # Compute the average for all numeric columns grouped by department. #' avg(groupBy(df, "department")) #' diff --git a/R/pkg/R/SQLContext.R b/R/pkg/R/SQLContext.R index 97ca7e58e15ca..740cf9d8878ab 100644 --- a/R/pkg/R/SQLContext.R +++ b/R/pkg/R/SQLContext.R @@ -427,6 +427,8 @@ uncacheTable <- function(sqlCtx, tableName) { #' Removes all cached tables from the in-memory cache. #' #' @param sqlCtx SQLContext to use +#' @examples +#' \dontrun{ #' clearCache(sqlCtx) #' } @@ -441,6 +443,8 @@ clearCache <- function(sqlCtx) { #' #' @param sqlCtx SQLContext to use #' @param tableName The name of the SparkSQL table to be dropped. +#' @examples +#' \dontrun{ #' sc <- sparkR.init() #' sqlCtx <- sparkRSQL.init(sc) #' df <- loadDF(sqlCtx, path, "parquet") diff --git a/R/pkg/R/column.R b/R/pkg/R/column.R index 406bf70a3af80..4f6be07ac9795 100644 --- a/R/pkg/R/column.R +++ b/R/pkg/R/column.R @@ -15,7 +15,7 @@ # limitations under the License. # -#' Column Class +# Column Class #' @include generics.R jobj.R NULL @@ -23,8 +23,9 @@ NULL setOldClass("jobj") #' @title S4 class that represents a DataFrame column +#' @description The column class supports unary, binary operations on DataFrame columns -#' @rdname column-class +#' @rdname column #' #' @param jc reference to JVM DataFrame column #' @export diff --git a/R/pkg/R/group.R b/R/pkg/R/group.R index 718758aea8f7e..662e46c8673e5 100644 --- a/R/pkg/R/group.R +++ b/R/pkg/R/group.R @@ -55,7 +55,7 @@ setMethod("show", "GroupedData", #' @return a DataFrame #' @export #' @examples -#' \dontrun { +#' \dontrun{ #' count(groupBy(df, "name")) #' } setMethod("count", From 6ff5ea2d83d84147becdb9c8135f484005f018fe Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Mar 2015 18:08:27 -0700 Subject: [PATCH 682/687] Add instructions to generate docs --- R/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/R/README.md b/R/README.md index cfdc44c54ece4..96acf4ce2d375 100644 --- a/R/README.md +++ b/R/README.md @@ -43,6 +43,10 @@ The [instructions](https://cwiki.apache.org/confluence/display/SPARK/Contributin If you only make R file changes (i.e. no Scala changes) then you can just re-install the R package using `R/install-dev.sh` and test your changes. Once you have made your changes, please include unit tests for them and run existing unit tests using the `run-tests.sh` script as described below. +#### Generating documentation + +The SparkR documentation (Rd files and HTML files) are not a part of the source repository. To generate them you can run the script `R/create-docs.sh`. This script uses `devtools` and `knitr` to generate the docs and these packages need to be installed on the machine before using the script. + ### Examples, Unit tests SparkR comes with several sample programs in the `examples/src/main/r` directory. From 52cc92db7ffa171a776e0a67f6640d6a7cc2b45c Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Mar 2015 18:48:49 -0700 Subject: [PATCH 683/687] Add license to create-docs.sh --- R/create-docs.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/R/create-docs.sh b/R/create-docs.sh index a158039628716..4194172a2e115 100644 --- a/R/create-docs.sh +++ b/R/create-docs.sh @@ -1,5 +1,22 @@ #!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + # Script to create API docs for SparkR # This requires `devtools` and `knitr` to be installed on the machine. From e1f83ab7c6e7e0dc9a0c4c223cf95b258400c41e Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Wed, 18 Mar 2015 22:17:39 -0700 Subject: [PATCH 684/687] Send Spark INFO logs to a file in SparkR tests --- R/BUILDING.md | 5 ++--- R/log4j.properties | 28 ++++++++++++++++++++++++++++ R/pkg/inst/profile/shell.R | 1 - R/run-tests.sh | 4 ++-- 4 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 R/log4j.properties diff --git a/R/BUILDING.md b/R/BUILDING.md index 08d9a8129009f..3f889c0ca3d1e 100644 --- a/R/BUILDING.md +++ b/R/BUILDING.md @@ -9,6 +9,5 @@ include Rtools and R in `PATH`. `JAVA_HOME` in the system environment variables. 3. Download and install [Maven](http://maven.apache.org/download.html). Also include the `bin` directory in Maven in `PATH`. -4. Get SparkR source code either using [`git`](http://git-scm.com/downloads) or by downloading a -source zip from github. -5. Open a command shell (`cmd`) in the SparkR directory and run `install-dev.bat` +4. Set `MAVEN_OPTS` as described in [Building Spark](http://spark.apache.org/docs/latest/building-spark.html). +5. Open a command shell (`cmd`) in the Spark directory and run `mvn -DskipTests -Psparkr package` diff --git a/R/log4j.properties b/R/log4j.properties new file mode 100644 index 0000000000000..701adb2a3da1d --- /dev/null +++ b/R/log4j.properties @@ -0,0 +1,28 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Set everything to be logged to the file target/unit-tests.log +log4j.rootCategory=INFO, file +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.append=true +log4j.appender.file.file=R-unit-tests.log +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n + +# Ignore messages below warning level from Jetty, because it's a bit verbose +log4j.logger.org.eclipse.jetty=WARN +org.eclipse.jetty.LEVEL=WARN diff --git a/R/pkg/inst/profile/shell.R b/R/pkg/inst/profile/shell.R index 29286374e0487..0658aab9fb1e1 100644 --- a/R/pkg/inst/profile/shell.R +++ b/R/pkg/inst/profile/shell.R @@ -18,7 +18,6 @@ .First <- function() { home <- Sys.getenv("SPARK_HOME") .libPaths(c(file.path(home, "R", "lib"), .libPaths())) - cat(.libPaths()) Sys.setenv(NOAWT=1) require(utils) diff --git a/R/run-tests.sh b/R/run-tests.sh index a1fa079f13d86..8e8c23d53e7f1 100755 --- a/R/run-tests.sh +++ b/R/run-tests.sh @@ -20,10 +20,10 @@ FWDIR="$(cd `dirname $0`; pwd)" FAILED=0 -LOGFILE=unit-tests.log +LOGFILE=$FWDIR/R-unit-tests.out rm -f $LOGFILE -SPARK_TESTING=1 $FWDIR/../bin/sparkR $FWDIR/pkg/tests/run-all.R >$LOGFILE 2>&1 +SPARK_TESTING=1 $FWDIR/../bin/sparkR --driver-java-options "-Dlog4j.configuration=file:$FWDIR/log4j.properties" $FWDIR/pkg/tests/run-all.R 2>&1 | tee $LOGFILE FAILED=$((PIPESTATUS[0]||$FAILED)) if [[ $FAILED != 0 ]]; then From a1493d7e903b886042daaaaa9db16c52222e59a6 Mon Sep 17 00:00:00 2001 From: Shivaram Venkataraman Date: Thu, 19 Mar 2015 10:39:01 -0700 Subject: [PATCH 685/687] Address comments --- R/run-tests.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/run-tests.sh b/R/run-tests.sh index 8e8c23d53e7f1..e82ad0ba2cd06 100755 --- a/R/run-tests.sh +++ b/R/run-tests.sh @@ -20,10 +20,10 @@ FWDIR="$(cd `dirname $0`; pwd)" FAILED=0 -LOGFILE=$FWDIR/R-unit-tests.out +LOGFILE=$FWDIR/unit-tests.out rm -f $LOGFILE -SPARK_TESTING=1 $FWDIR/../bin/sparkR --driver-java-options "-Dlog4j.configuration=file:$FWDIR/log4j.properties" $FWDIR/pkg/tests/run-all.R 2>&1 | tee $LOGFILE +SPARK_TESTING=1 $FWDIR/../bin/sparkR --driver-java-options "-Dlog4j.configuration=file:$FWDIR/log4j.properties" $FWDIR/pkg/tests/run-all.R 2>&1 | tee -a $LOGFILE FAILED=$((PIPESTATUS[0]||$FAILED)) if [[ $FAILED != 0 ]]; then From 733380de06bab53294d919c78a248f0f9275f76e Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 19 Mar 2015 12:33:47 -0700 Subject: [PATCH 686/687] update R examples (remove master from args) --- examples/src/main/r/kmeans.R | 12 ++++++------ examples/src/main/r/linear_solver_mnist.R | 12 +++--------- examples/src/main/r/logistic_regression.R | 12 ++++++------ examples/src/main/r/pi.R | 2 +- examples/src/main/r/wordcount.R | 8 ++++---- 5 files changed, 20 insertions(+), 26 deletions(-) diff --git a/examples/src/main/r/kmeans.R b/examples/src/main/r/kmeans.R index 403ca9fb107fa..6e6b5cb93789c 100644 --- a/examples/src/main/r/kmeans.R +++ b/examples/src/main/r/kmeans.R @@ -43,16 +43,16 @@ closestPoint <- function(P, C) { args <- commandArgs(trailing = TRUE) -if (length(args) != 4) { - print("Usage: kmeans ") +if (length(args) != 3) { + print("Usage: kmeans ") q("no") } -sc <- sparkR.init(args[[1]], "RKMeans") -K <- as.integer(args[[3]]) -convergeDist <- as.double(args[[4]]) +sc <- sparkR.init(appName = "RKMeans") +K <- as.integer(args[[2]]) +convergeDist <- as.double(args[[3]]) -lines <- textFile(sc, args[[2]]) +lines <- textFile(sc, args[[1]]) points <- cache(lapplyPartition(lines, parseVectors)) # kPoints <- take(points, K) kPoints <- do.call(rbind, takeSample(points, FALSE, K, 16189L)) diff --git a/examples/src/main/r/linear_solver_mnist.R b/examples/src/main/r/linear_solver_mnist.R index c29e2214b274f..c864a4232d010 100644 --- a/examples/src/main/r/linear_solver_mnist.R +++ b/examples/src/main/r/linear_solver_mnist.R @@ -17,19 +17,13 @@ # Instructions: https://github.com/amplab-extras/SparkR-pkg/wiki/SparkR-Example:-Digit-Recognition-on-EC2 -library(SparkR, lib.loc="./lib") +library(SparkR) library(Matrix) args <- commandArgs(trailing = TRUE) -if (length(args) < 1) { - print("Usage: linear_solver []") - q("no") -} -# Spark master url -master <- args[[1]] # number of random features; default to 1100 -D <- ifelse(length(args) > 1, as.integer(args[[2]]), 1100) +D <- ifelse(length(args) > 0, as.integer(args[[1]]), 1100) # number of partitions for training dataset trainParts <- 12 # dimension of digits @@ -41,7 +35,7 @@ NTest <- 10000 # scale of features gamma <- 4e-4 -sc <- sparkR.init(master, "SparkR-LinearSolver") +sc <- sparkR.init(appName = "SparkR-LinearSolver") # You can also use HDFS path to speed things up: # hdfs:///train-mnist-dense-with-labels.data diff --git a/examples/src/main/r/logistic_regression.R b/examples/src/main/r/logistic_regression.R index 697fc331a0c5d..2a86aa98160d3 100644 --- a/examples/src/main/r/logistic_regression.R +++ b/examples/src/main/r/logistic_regression.R @@ -19,15 +19,15 @@ library(SparkR) args <- commandArgs(trailing = TRUE) -if (length(args) != 4) { - print("Usage: logistic_regression ") +if (length(args) != 3) { + print("Usage: logistic_regression ") q("no") } # Initialize Spark context -sc <- sparkR.init(args[[1]], "LogisticRegressionR") -iterations <- as.integer(args[[3]]) -D <- as.integer(args[[4]]) +sc <- sparkR.init(appName = "LogisticRegressionR") +iterations <- as.integer(args[[2]]) +D <- as.integer(args[[3]]) readPartition <- function(part){ part = strsplit(part, " ", fixed = T) @@ -35,7 +35,7 @@ readPartition <- function(part){ } # Read data points and convert each partition to a matrix -points <- cache(lapplyPartition(textFile(sc, args[[2]]), readPartition)) +points <- cache(lapplyPartition(textFile(sc, args[[1]]), readPartition)) # Initialize w to a random value w <- runif(n=D, min = -1, max = 1) diff --git a/examples/src/main/r/pi.R b/examples/src/main/r/pi.R index eed44eed913ed..aa7a833e147a0 100644 --- a/examples/src/main/r/pi.R +++ b/examples/src/main/r/pi.R @@ -19,7 +19,7 @@ library(SparkR) args <- commandArgs(trailing = TRUE) -sc <- sparkR.init(appName="PiR") +sc <- sparkR.init(appName = "PiR") slices <- ifelse(length(args) > 1, as.integer(args[[2]]), 2) diff --git a/examples/src/main/r/wordcount.R b/examples/src/main/r/wordcount.R index 5f5e66e8fbd61..b734cb0ecf55b 100644 --- a/examples/src/main/r/wordcount.R +++ b/examples/src/main/r/wordcount.R @@ -19,14 +19,14 @@ library(SparkR) args <- commandArgs(trailing = TRUE) -if (length(args) != 2) { - print("Usage: wordcount ") +if (length(args) != 1) { + print("Usage: wordcount ") q("no") } # Initialize Spark context -sc <- sparkR.init(args[[1]], "RwordCount") -lines <- textFile(sc, args[[2]]) +sc <- sparkR.init(appName = "RwordCount") +lines <- textFile(sc, args[[1]]) words <- flatMap(lines, function(line) { From 3eacfc072758a445d1f01b29001c69683ac5b457 Mon Sep 17 00:00:00 2001 From: Davies Liu Date: Thu, 19 Mar 2015 13:10:02 -0700 Subject: [PATCH 687/687] fix flaky test --- R/pkg/inst/tests/test_sparkSQL.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/pkg/inst/tests/test_sparkSQL.R b/R/pkg/inst/tests/test_sparkSQL.R index a55939089e6ea..cf5cf6d1692af 100644 --- a/R/pkg/inst/tests/test_sparkSQL.R +++ b/R/pkg/inst/tests/test_sparkSQL.R @@ -678,7 +678,7 @@ test_that("saveDF() on DataFrame and works with parquetFile", { saveDF(df, parquetPath, "parquet", mode="overwrite") parquetDF <- parquetFile(sqlCtx, parquetPath) expect_true(inherits(parquetDF, "DataFrame")) - expect_equal(collect(df)[order("name")], collect(parquetDF)[order("name")]) + expect_equal(count(df), count(parquetDF)) }) test_that("parquetFile works with multiple input paths", {

_AWo#zp$RnhtKtNge(RVjUWqHg7 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 z z>wlC_CPrFgYwK$*SbODVlpZ^`B<2H z8Ijp(&+ANu+WQtOO|KvaGd=1JB&2~ET7o|jk~6aN7*hWf(Qv2X4pcLCOoXb*2~)Lk z#>_7W7DtjZxthhvIiTR4Q37We6g{r6rlq3wK6%Jxpk)FzGK>@aQ`AZ}vdcP3(3lRs z1p{OMAh-gt_qkw%I1Enz!Nk!q-r!traJ_81iqxT+KiIb|lTg#5oJ8h;%bbAP@Q)|x+{EunY8-pkjn?XVV5Bx| zUAUcuCOFbkc*bPpYy=}@VZ|ck8VV^I+JW((@`=tdo8qQpYyPb1GVI9r5m?)15Wf`! z_fI36?=Rma5N!dydi%Q~>Whlz+3Bs&RY~t~=D8H1c}P)>>sRzDj^@yq8?Pi&&Tt=p zn=(El`@ihYo}mGbg^`I(Z$g_Kl%a(GkxJo{3-k=&G<-L8qtm?I_Kc5lxp|M<$h7*) zVpLj-Ybce#g5cq#9n^|P&+1!wD1UWBdK;kP2)_Jifqocr{0x3Jt^CiKcW=Jwb z_zO1906?Gsh91zcPD(fS=D0sQBEV1!g9F~?OheI|j{V=(N`vg>!xb?EUtY<3KKh9L zGb(?tiQ>a>C_eWDED|hujBzR$7d)bD%rk7zctiGh9qg^o{)#+!1}~dqomU0ZXHQ73 z!j>i(EtHHiIdYp&;r8pWk>oh;(Z!K zHd6D#-cSGrV0k2X>B!B}=#MRDwz1!+`Qwdg+Ky$~hI9hcN&M)RuFqJ}wqK6>jm}-4Pq_%F(?_b4 z(FKLYbkuZxfiL!1>&u?2o?hbpI%wWEyJy8J4)(73GxVT4GTJcClYs|VM6t6eT1R?$ zxYEr&g8!7M2+8GI%!%d!KzkKFkuyG}8|%^rKL%6K@h}j_ZDE8Z0IB&ARZ9Q=wP`6BWLL67TQ3fA7?djvlh$Lc}tNPeKFv=Nk z(=b1$+?M;ow;%~)$DG8O98Vj99 zljpT0zVFI~4mDan_QYrJ*^Sz&4bNA#RPGwqO;pnnG>V(Z|0u1|c5E zWe;e}Uvr9zAlb9F69jb_j+eCY9?XY|E= zv(w2zQg=y?pW_FT^c26cd2ElY?e(PbeqT#kgt++d@j={*%7w%x0bp;$75>FKoCRy= zTV+jB=lhrUx#$SUci;hLFL7EQ3j_esnvPU2(?Ct z4%G;J(Y_E2MK!2{?3NV0qZTk>CdE%KY~x4{LH@Q;Z!;(elbb?96FjgYnKhUM^f6Lk zhQfRxcOasI*kFrLi9qJnq6`o|r8rQoMpGpqx@t&6U|b$#-qx#GW0Rov-X+# z-h10Ascg}yt!(!ZY4$Rgjc1e_W44zkdv(8i>Qm(w>=tJS&lB&S_ty)Yfmiprd!CThFYbxA-UOS?V%vm2Fk( z*@SBu086K#@Ax3V*cy(ONeByQiLE-WYnK4U;<+hk9vwUj*_0Xj`<1g$kw141sg>-eX3C2#g)b*oxs zYtX&}q+|WOJKYkqo9iY@4h8&3CW#dvQ%+9h42QdM4q64LQDxZvlTglB5fd!~^=P3x zZd#7K2r#H!i8$DVUw)4P!|ZCX9Q*p_6bV8 z&brC08P_AGM2k;~rI((zG)SS;m~Q=vKXUj@JxVU!L{I~26)(f(6@SR-WC+x(8s0)( z-6(8!B=2A)FUQf8c-|Hs;Z@40W`g1KEeGg!h7u#~t%Gxr-sFgClq{YgMVoonXR>38 z$mda@Vr|gkHWX^XTfhP3!YK$K9L}(3E)9B>a6vupC-f5?^{;&GDa5yZjowy8#qW#75|iHT6creaYM#%`H#iK zDAA`GbDSS9@Fouy)aLQGhCyxzu;iD$lR9pb&M8U;lC<%S=*id>y^>{F0!N|i48%8i zP*0oyJj0pnOmvTz=-DXx6LZkcXujTTewkUYZ@PeAtN=XySqaR?Q1o0J(-}CrbA-Sv z{n@B#uy3#cp2?gS#*^esHvE0AOM!Q}NL?bl3nHzS!v)aEAe1sY9&ZHH>EPzW{n!u1 z{=XHpd8e6`L1z~o+DXM^wh%8jOVL=f)>MKAb_S7CXNF>DkOtZqFOu_6{=c2^^#5({ zJQ_VGh4BOv^n(!eLmYIIjo1+*z&DZ)&vdql?z|d3SC$^_oG#FtCSYeghxPAJnF4wG zbDtPbU|`)AqGyXRABbSzzF z?Y5a?DoSQxXJ$)k`13`aJgL*>lWRctvJ`IWTLc;BrSOti6y0$Vf3?T<{wYkx?{~Z) z2UflAB}slz63r{C(R?XNMnli#qfd6Le#;~D^r;4L?$cjILEpfCr*fpX{Q28&nj5ug zZQ4nkXlk*{s4(fg|!{lYY{`MK6LD<{ac)MxfcFCw!aQqCk;P z?gpCNST%OlV1_Ya2dmzW4K{%ols!&(J(I1-OIui$$#x=e3Ya3c4t&FQ=IzqJp~^G7 z!2_v*mf+8=m&rTb=d|U&qgBnVl;l?bV0s@6NTpD%H`xw@oTRZ>a7)hWb%-|nBz?FJ zp6o-(DaTfGY(@oonPT{Cr@(l88+`=tpUA47KvVjSxpGY6oGjY^yOmBK{b32Y{XG9~ zLR}#XV}d`z^;Lvo%})kwLOg=QbJV|3TY&s{`cJnGS^jVxM92z6e|X*B7Lh-OiiPlg zsRM4{Mh+6|aR)^9A@W%Dlttd&O6Ev-(R(lN-Ui8W8Q<)rcx^X}*+7`t$BX%oSS7xH zlbryx?NRvtbT=3U3X;3Gp~rtOBSpFf?g9M$!VuSCtdN6QSz3K)5Eh0C70I;*gqRC^ z@&b|)>~9aAzp2)MLiz*y=+M3c-e#DPj(m$^XqYb-c@Nm2B_2%73+S{;<|?6{)R!am zZhlH?e!mYgW!fTDD$+4z$u^KQ;pTRqHQZU5wt#wGp->#v&FDYFkIJEkH^m@zRUph# z94#6 zmBp$^dhJh+K*Skk$U#Ryfj-$cc`zD3jdvW4Q6*jjvpe!187h5X^=YxrhUD65Z#8CY zI7Nez*mQI>BQ4GF=HHby@rUf6bPYjG;w29 z@i&SIj3QVFULktJJj@fyFsJfvolNn+HCfO_@+J$*aaH1yi8By-frS&5mrGkQF0N<(}vW9q4un*Mhvf-r9LpJ1R3>Bs_q#W&hkhp2i%s=|LZdF z%&cYmg$Do_=KXJ4_y6l2urmLrdvMhasjn>3O0V5bk`r?S0Bc}JZ;lN@Bmf(1&UQX# zbH=|`6i7@A3mHu8dSjw67c86nvVn<$W0sA9;eu@{YUUnGh;J$A?@tZ36<7|Ec0VE- zqXiMZb(>vzK|_7`c|x=M+q;^RwNW+0;c~H5QK{7SXlsGbDHx86t3qN-Wq^nEewyd% z?g_iO6V-+8X8)!dbGdi7UShJmLMeCrM{eHH%0WRyq{Lk3=pQ}}%1R?-nZYO3#ls}R zOIlIUo3hU6c;4-Tv9;$x_s+v~`sQ^caPzg6=QgJ3hU-=b()MO-E3H zjm#y>{m1lThMJ0Y*fWs+@Nz$mNwK0c=B6?2GJ zD-4}GqdtIdbHN1aP!uT6)3A)T$GG4l{`nd#NQp~74LG<&v%5{aah+X_=-lB#WMMX!9`B?&*n_{{U%TEQx8uz=I+Whj zWmF7nHIfaGF@bJsnoWCoIhIIA-Id2W;)yyHthZQ}K1JjApY^J?;+ zvkHEOq?Tvz(7MVtLEp>IcgX5d^U^bEmu|gakHhsRzD4h9B&M~y+6@@E1GAl{cL_Rt z^Ndw;qrm|}1!+y-V4`d&KT^*TV~d5yjuKyuu@z{lsObHO{7H0JcJhNj8qoMFw{peB zeTtsE@df^3chL|dPQpWZfMV>&Yk^>7n(5>l3k5FZAWS9BqtCM-zPZnuXFFz9_`>Dq zYc2rzM-#o&V40W9mF3Z$BD6%P@e4!uBQGy>X9F>-w>Z;?ona}gu(H0-2&dH%tJseXpKQ!7cQ!QkimBX_2Vdl#(c_7;PaE(X&u7MnpBR;X zhBxR{HR5SA;MqKYxIZ;l7ujLbtWf?7chJ@ra8~TBAo~pY5?3(;?J_BmO4e|xsWLg_ z7A7|)-U8G- zPXFiVHTwb3q+bqzFot=VNAe880J2lmKiG1RxUMpxHe{wf6b?^%lQ}Ss1O_G$Q~M#_ zEY*l=bSPLqP{*fA7nEE%hnZLTQq4>S!99`T5Ix@nR=uE4Ux1a`;EOIZ2xD1wrF9E? z4yb`&SDqIs{_r6{{QTuTTe6iyS$9kiqER#+ep2*!%3gF7bb9_N3k@@T`{6V23)X&U zbr3NDHMu&hT;6ahTCf86lY`m!xJXhK2En-3QB`a>;&`#6z8=VEQAw!*I9#}+PGVRhm$%O z^c`kQLSV(fMzclbjuk7U`Y@LcgEM@5=Ip)SixDa0*xclgIl^CzPe&$9rdZ=EBu)P< z_J9_I^36Um#x-Vruf_(c+Cn=m{W*fqr9F;&Og3SyJa~6P&s{5be^) zM<4*OV~*_Nsc_-C04X*YASS=pj+!fj6RJhPB%j*h={r{@5RvRK6SM=ar}X^N;n%#K ze0o)yrPf6;VP`vAMqix%1xhFDW}68{i%!R`?>=E$0-tIgFrvyqY+irn1dS>`VH2n6 zPvn%@NMoOg_|`#caFQwm?&195%9@7=@mvJ&NMLMB`dI#6?)AS;Ek3v z!!5^ZewCxm{Q2O0U<540qYSo5!RoeeC0Qu3@cU`;lw}9P`TT{)M;lc5M{j^WzvhbZ zFnf1eLWtEbxvk70fCK(L!dSF*dv5=(<2$(pXKox0-jr=H&PMtBH;Svao8{#j2%advL0z) zh;v+%v3E^JS49r8=-49+J~ z52m+Xsf>ev#4A;11v4vdFkk~!;F_P}dSFobX?qRmDVZMnuYFw9@o1=DV$ehTJXDX< z#N~QP;3C)B4lK!y@@&3aPJhB5D%NGNK(t}B(v+aQVPNfk5lQ)upXbqP?HI4~d?@QX z`95#szc+iK%Jk!Na@!9)`)@lQgv_tf`g-7c^MgE3jk=5AsNU6d+B!3k!s#YmxdG&?=_yd%Vb$+=nM;KaQq{ddVI&zjhBtARe z&Nn{}8&H=QHM1_W?SJL?>|tDeeV|o*aN&{i{>G!>3jAVb7iTgpZAcqKHl($M+-Gj= zIx*r0D(Q@0e157_fBaCt!IX3}FJ}30snT$8G&V(f5mF)dX3U3=ZICyTD;=$W(nVkC z3=6P)DxsgUbCnU@2)c*f1bFgPVG(u9@GQj*8+0(fC`tCKwiq%7wZMCPztXg$( zC4`FJX3Xcx_I^v*xjjsz*W`~UoNSPSBSg$-Z7MK&$h|UdH#cdJ?^vYa#C({p^f*e& zAtwF-?cMK$?J~GZeI!8emf%IFFA(q9>F40Cfclf{A6fzC1G)s;mxNG&k=xtDe?wm+ z4FN?`UL_=($ckTIxu(`)j@AHm2=dnyNuJprJo=tMDnZwe>L6#Ac869!PN{pURC^xw zgX!!gw9~HdM>B3cG9)6hOLI0X*nYt?q}U4U0ew>QB^@1_2!RwU2mjWzOAwqeUj!U_R4lk6ky25@&m-7iL9fO50rL+B zDUPoosH!gp;iH3rx`Y{I?UM5mp)sh*3q_=2$No)4_<~eO^7Mc>;AcpD2czT9lb%;I zGQ%0%0UO-f@VSljq-Dt)OWMM@P|KF$7#G}yoyZiU!$=c@4nDT24tnMb-^aB zWGhu5OyF08jRW#`qvzePVeu}(-tQ(l_Sj#9-!%O%2;4XyE4vD*ZK-zLmNHru5IHzc z*#hwR_dA7D47Uf)?$98FCF`P3Wlg<16gwNDY+S~%g0%Sw|=pt+T#8E%N*PL)X?=)gmT z%nLMTXO0@~I{0g6ZE&Aod_57j>9Qb*Gzko`a~ZIa#!O;V#} zM<+R*PBLx_pSZjjl@<_n|5dA{Z9u6x*- zU^Ec8{iL+CA8p8ruX5v+Z z4m2=CUDSpINx{JzaQW?B==(`~HDEF}6ZR()VB>Yk6d1H^Bcw2APnOChyhwNX-FODf ziD7aK%_B@rdn>*2z{Wu_RLxUYJ;C58MD{xem|Z!r!kN7{&y8w$_FNiq(~hTMH-wod@t$e z#bG2{7}f0oeTsZ7?$!G%QR$DXRA`$S`}fl7FSr$$sI#6lW(nDg9zNm)+-^{j4YF78 zlI;ll#4u8vJqbxC`+o$_h@_nY>b3{erG4eReT^{^k_id90O)Q9;yLu4oWd$DlUCB9 zF{I;SlvgLwpX+I5nw~@(xo%%DtD0_(#Ds*im3mJSG8u@Vx1DK-gE54sw2&m-Vu|j+ zIV{hnn-eC{57Ikv%1$(fsNga0M4dqFw@YGkz#}2{x=cW8N z&kk-yi823yU3d6OYrePm#ung8BO;$A_rc@2qsU47^wQmEsYEgq^tRY)f^Od^swF&` zB)^Fdi482w2Kp=!nXUQjdkM0&i#B?V&2I3e_<_0jC@p~7141KHPw|~-T)Q=hs1Fn( z#7I6gVZnwUHe{$yiw6y_6^)8}AbWph)U~e-Z`_}RJLmc7eB3*T2QP@JA_M)A1AfqO zPlj-PFv$Xh?^vOwXAr?B9R8;$_OH({7E_7ldSxV?^xx$p_|2P5@k^+2l5Gcc7A zhn5s8Vc7AHsAC;GU(X)D)P~peMw3{)RHFuuE__2~Mm6j*zu=Xk8|#8P(76eccRnb> z6WfLF&f_LS*~gA-nm=GbxMh2%^f@$hVD&L2L+2m{m8|R@e6&7}lQym|oad?kyq5K3x0_ga2fUAG>Dj^a!hg6oLUaU!2S^Xa5{4W@MPl06CdpojDl-{?Q~-!w`osRbt(NM zQ?fYq#zc|W#!j9D#7VY)_eo!Sx>r(|6A+5=0hV!Px&;4faO7{3j zYNT8gYeD;9UY&rz>4D6f;lDXV$yzsmrR3TG9=EXae8n5d0l=0~^0U}oa2fI5FjX?1 zfo6Y+G6VikQB(f8O%nC4G#m{?^&tZ9btgba_Z}ATFlO&sd14Fw0WrDSSjIASeA{V;yz56PM3TwHW&sQ zbKwX51a06~JKBW;5_onSg+epBd>Sk^<9){I1Zwr$jX!8(!5r2uItTh&E8pEUC)p~| z0ly9lMa+k}rMdOLEakhV`X=tIUIL)-r^cIXx}G zkx+Kgp%Y=zJ}erKZA6ZWbQ`@LuP%1{$!j6$B`e(our;@TWLVrRMInB$V~qVNsN?;8 zAOyXHincu3ft#a#c1ThBqqdQ_@b3A$E?y;Y0ATOT9emP^LCS4&(8*@1_y}bgx?9yM zen6Ep#DH-;ot_X4@c~oekb)N={&1R>yStNMGWaJH1WRkzG_FY0KgY`PSJNkZ$PrFt zTTIaP>=k}aI!8I+Vx{BR83RAkcrGOH_zAhgqn*6)gj&Qc$TT)BCh&w}Z-onye&WG8 z3lL)ZfBYd=90lzqQpwNqO#Z#s$8~#2K5ie@i*7Win&2G_uAaG2ELaOr@@~`Y=D#Cz z9r)A7q*ZZ#FxaM*ef4n3HJGAE6Qst0Q0Xks?Xzx#iEwL*-T=274+twQ29pO;?}LbX zGT2+@9a$PC!-{N|pLqzf{7`nTU3QL&qy>}2R=ve!srz2Ng~G(!*Ls@Nhd@4 zErAa6bABtcJi7-8UM%-kpy87dG7m8np%yxK9)uSFB;UcNjRGxTq=vRBQ(&x2&1o)A z_Q$+Vy;WJJ@T1HBd0S#8KE&;~4g|jkwQj>e!NAXlwSfA&B3-n&qL7X(!lTS2(t<1l zO^5i8aJLpWz9F&Z;S*LqI&h+6u$9H6@%6q-5m3z~sQ2NKa z$pB>rq&~+{J=eQ)o4THt5=-t+cyx-WR~nIuT}o{N(%c%r!SE#T zH>ii}1!dpEF0-s&H84bC*`|@27E$ICw_JeRyMUp;VaiQ%T7VW!aB^k%py1n8*O@Q= zuGG6KZw>W3V>%MAs#8BEf#Y}4El+=N9^{PM+lU%C9; z(Kik<4qw0WFS-u7G{edMP7FNPrq>2OY@t}vOB3xbvC-_c?pS`pN51&wU-;+~&cLrU zndF$C*jR3nTOJ$cfqau7= ze@TBz#TKy_=!C~Eo9B&1=O=Vd-T({oqJ|7cwPGGrGbAAAa@+cET+SB%fFHkpNrYn>sc7l^c)ER z0Lp4345dJK>!^ivR!FU;_T<_cqdKHwS(9wW#Ld^-&!}&-&;kzq&%kYD^&MYCcpXTq z2(-WEfSi;d9-qw{ z>F2!K6oSlj!}N9YqAkLbOX(ECdVrWInQBdU_CGO}N{JEO-=KxHsVuV`C}oJoHVMElH+g5 z*C$hr2Z~dTB!+pzPr-0cjrjbK+jn7OURb@>Q@p9&erceX$)~WKKd+y!uf=WZKQD}F z&R_v^O{E>yWmoLU@AvfkTwF=nV?SQ&KYoto&595f0WUzfA*Aa8UddXw1tMf87p#KB zvJyo)54!rjTgJ8gU_whd)?VUH&DIRw!j`7Um~gWMtr?;nI{l4d*tUr2 zAY}k-TDKj7u)X2E2Xy(ok(5fgQqvImI=>lDD8C*4%LfTX7AR4F0KO zP8+!yKr7E&ZD|E=dATW1pt2I9FW#n9jDsz$1!0j1CvImVz8NTfO0>ZGR6?|HjeRb? zyl@Rc_ze$ER$%Edi5TNN0AYPYB1XI*$7v7rBSUEj=2VYyvWJ`=R6`H`x-`1(%c(Q} zSyoJr=NsT7du_{2hVX5K&%Veyx7`KU-WT_HT5Nwfii(4Trto=o8q+qXsLosIy*{m6C0nog0r8m7K=su zFV3qv44gkf{wzBxdZ>^cXiPNX*JAX9VyXdx>6|IH5@~bDOi*DAI#JyE3|?GhYfNrH zXdEMY_gz;3sA!ITrH%Yy1#4Yl#0Fv9LY$tS#MtG1GCSl%!l63e+0afMOCVjD*2jUM zm~y`HQtWIe=#b2PbVLi%;eAgSa&NnfZfoW$Oq`s}>pM8@@~IBk;j7{k8ll~C*i1}IYPJd}VjYpM0Y z1LeU#@$_jV(s9!A*`w$DFx2u(NX{^!t@l(FwcGr&*vD-A+q{Q>upg$~Yv3Q7*bB98 z2d;sCP^ww=S#y+lj~>u49*?RNb9VBWm-0RGLvzeVH@`hNkB_|g+dR2bHp`H6!S46I z=gD6lf701*%#;ZtCZxXV?7P=BBc-e4=4w}jA;ct>@K%=htE7mta7jiI_qw(bb3 z7kxgIw_tz(@Pvzy%9$m6VX_imH<#Ujz%KCD?jc$M`%*vJz3V{xqg>v|-SbhS<$b+i zPCtB`dDLq|U+Gc|`E#v?szBa{moQxe&7kQrF)giwvx84T-CqVDsoYEVWAK7T@v2%#_hbqAWEW28X5F3y=AfP;8uQ zatZ{631ZRI6UgoS5EgQ7hB9j8F+NdIV0|q9LJWLmXnY`B7PBJ+SlRP%0fI@p(9U?( z$rgLzAK3TXVZ~AY5>c!5Q5$&7}s7? z;#YX5H@o5Hr8(I=_pO)u5#<1q?{_r(ibv7~(Yya9MR^7r%d@Tg4b4>|$#KHh&Ov$~ zkt?f+g+k~(#sMGw&Y;dTt>h9Mz0p0U6RViNWnvyA;P=WwyHrmaPP{c6pA;IOG=Bif z?aC(Il_Llk`m5W_#xcc7xxkDh=fh%N(i~*EEXg5n;RaWOydu@rY9RJ*+G7x&rlF_h z3i1d-TF=ebIzRL7i<6?PS38*S0D}dq0WRb66g&Mkk5?=7x$dP<*AZ7)A@OMuAbTte zv*K0&yUchLJ$%s#qyq<-6w{1NROsAIHq!iUCDjM`>jiGx=OuMX9(|yGj6A3$t)%r1wkHGyeuCS0F$)(I}~_K5KFs`Fq#fl)_D zY_x2_O*L~GgxK&CFBR!l9d`&xz)jZWMZrDmixyF~=!NNiTCcQ2r!zCdhT+Q<^d_S? z>=4)nd3jCpjT4H>4J)UF+W z%iH!-4*rrl}wb9;}eyeXlJxp=*3siXv%dirXi$3ym}2Mn0BdJMAURyM3{0o*xb5y!!U(4~&*qu##u+V$p!F zSAdTd49bdx1wfBg*IY#C05T_!%|Is;|;i(ryu5J4B5#KJ|bAdrRNXSA)y z;b)SK;b(uvYrv8XV96HnWJ~1a%T%BQtU&ur2YW%%8q7eZU35gW&?Z(OSr*G{;paAu z0;i+bVQt~1lf)zgP*UB0|0Dq_wVNXFB(Wg_SqPYdR(K?T0)MG7#jQYV6xfMQv-Qkp z?;FF)w2pEb@`W2XDJQf zbJ0#*vfZ@`VW^K^N%(xVwk_l+tDCa|9%5S@@ktA2JhteeuTDzxxEc;t6`{5?7`1&| zI~biHdODUUo7Raro?Se-b()NfXFLgtZbff-ox=ACz6H&w(ltY)Fo~ zG6280%zNyFr=%bDrap!0xqsWfF~o4!#rUM%@vw! zY`kOH8Za4{ylJr$cLW*Lve84*R==l51?`8Xb_GD0Qe-`XZgY7hYP=Gjn!tJ>ffSwb z5Bm4#=;ly92MN$AUHaLcSjlTU?_vJb!~BzBpeIB1XpOw0&!wLPO{!yhDG-TX#%kwy z)j)z?>vwgkwB5UO_qzCbZLl^=v|T`0wqpLVQVj2!|2B&Dw4=+Pld;KbsvA=3%Q8_y z`wdN93$C2arV=_BXCy$~t`1%`V_bV$D61u@NmeM?+y8@f{@AIHU$*iTjErX*fB5~=JOzM;rLUyT$t zbdhVJ>OKSyutKAH`S$=Ax6vLN0*nTK_52I&-aNKd`tEkl?Qy!ZB43@$K9ou85*r6k zNWUkcPSkZB+|ww1rD6I=C4uTOF*R7y>M^01;uYfy$msA68KGHN#h>xEt(FmWFx{Ov zTK^d)@WSQoPTZEMV{?`FV|kOI`zI--MjJ5NCWK0`QfV?v?o$ z?@q+4*~r2T24~Sbz@KJ(&}1mFhV-3I50!-)L2aFim5J6Ab*y3 z%k~nPK=i2?EkP?A1`7V*jLFo{Jfbc9^K&p+Z*GH}p5fD!cPHgzT1AVJ=a+!?q?TP+ zapeNu6V*Pro(%)pi6y3=^VA?JX*xzPf!Mdvg}DMf@sBzo3?8;!JkLq(7l#ohdWwRDYpHN4vOEE_8kx%#UK~PZ+{pdQ z^J{=54sJRR-Z{p5KzG01ypPS5YD=pDXRMn_$`UqkaPMg*Xs82^!ywJ5UP(#o2lCj9 zx9^DEX|q~DzowkdS?(wVPDRr6GR<5%dt$}NQHB{TJfJw6->6Gy#};8&{%p~ezW2=` zCOzq&l<^V0doJm5 zzk4p~5xy&t*Q2|G6&BpyiXj{CH)(|itAhnKC55^Ng>)t%?5q4(!M()_=baT#liTbL zQ#Sb#=rE})F3c(X;zBlm$dX*eXwI;lotV%1r+c^s)VOmDd#6KrckndjQqspU0Jg98 zq?opA$=I%N*74RRP}D5&;oHB6{B%IJGh6_Yn+H_4&H~H5 z?hSKpSyH)F7hT{bscI^E;FlIm)|4f03rEZY(ZrJF^eq#}E`37TY{BoyuzW(dmy*ty zmjcQx#Y=xfyFtuyVh>1kXVJTtq+$l+4~<>as^toxBwn)9HQ~K zEqroH?Y-DH9j1ieYhJ{XtE|AGhd&Ky@!}Yvnbf)kPc=SNBjEX+eN_X?5m25qIVx&` z4XouUcZQ}5uTuYnk_(j`g2Wpj_mrPH<`3tDq`y<&v~*Q$0lcRGdIfsb0}72Wgni}Y z_XM@Mob?}m z7UG!tr;fNTmB{%J8MCOBQQd5#X`m_9yhq9@v%G1-nueNvY$~+!Y57Uhb8OVl<87*y z0^IKeN{r>%Igd|Q9*k{ zcL=#USXI^S&DPagUz4^AZK2F#dki+y80en9;+@RxONGAX8^b9-m)-~q!Avi0O0nV; zOg)YPRZiK@oY7}fF)6kqa8iBwOIQi&VUZcoUV++t3tmd5tG?Kf(RvlikjhakG4Hv_ zl5jCTOOJM%Hy6FOmly|C1edk)9h)iQg2f}EBhzr;q9cRJu+Qt$rL^6tOH?ic5NfVT zEflOaPx~^DqNtXnD{ZLYiCHw8^vapV39|rmGG8DN&a0arAzIcUcj4^0Y2*Mtd6t}Y zUW?o;faM=rd>fdsPj<%s50!@wxSUikn8wY8YkEgowb#_v>CJ>J;5y`HXwAk9l#qk4 zPSXt=1AEzy6RKkD11orq!7cjI)r=CBOd*12C+RS>8N5N7jSCQ+BxnPEvSwMdC_-p8 zYhoE2WCj*Ztk#85q=lE-Sn;PetRi+C{fO{4%XzUD{6#GTOp;7JB(5<7%Jb1ENumsTJR$O1PVFEo3fp|A2lWb+0(TeS0yLcD3_|!ItVDkur zB8&5!8;)Y6U6cuur!jXeGIQ6u3$cYr6k`^kK0!I&?6Vbo5cKY~hs5CP!-&_dgIF!_ zZa{x0#Ch^M4FD4Wsc-JT2`0yN42<61gOLLiyWH9bCJUe6>puwd+d#NyG3eKf5KH;B zN->wPG~sE|ig}f?_ZeNQDB9&Z{upP(p77Xh;@WmEN8(Hah8W2CFuXq{AGq=1Z0$jz z>~}5EY~k(n)?{XpDAjh@p%A-ag#X`3V=-FK;RoilJ4 zSi79zfZj$xN0jDXB?j_qLIRr}hqWT8l;m+=L8_9{yvqVD^ErhRW?u zrtsH{Ez!7ALt~PgB65sd)db_Qm?A2jOy_Tg=bvN@>VZ;-DI#(d#P7~@ycnS5 znyENZzzL_RxQl?sgm(oac~*M9nZpUslhGU16?#9ckE--uoNtn;x_`Iyeos>n8TH;d zZ)fDIER^Cf6<0-167znJF`|DmYGXG%_0>*NdzO)xYvZis@;{WlV|1m_wk;als@S&e zRBYQ$D#nT{w(X>1+qR90ZQFX;d!KjCednIL+q-ME_5JzQk3QPyqt7uh=8z~lLZL_# zNXY)p*d6u#5XiQn^h_g|W=q7Ilrii|!olB(ek`!p9|r#Yexjz}4>#7|u%JRRz&mPW zr4fl`gm21(&S$mv_Qo8xn}bHFFa={$PhEjjA37Lm#AJ!2++ze$lj~a~yIuTx34*y4Px$r>Q*~V9byKv1+n9bQL$$dy`3kbO zoQ0zaQ|?E7IZK^N(x1P8oy02nr1IA>SgEs^8wEc-{sLaxyrl)%2ld@eA>&~@>;|#l zm6*njMkK6t{cDwR{0W6~BjNXZOI3~|?%>W}Zq~R$B~K$EGOd+0j&k`ter2M#kqT|$ zYlG%j9%9R@qvu6euBMIEUe44|jP*b);40S4_i2xE2h&u78HyMF z1W9YJ#zk$~gr%Z@Z6I4*%BL?fH&ww%J0b!fiBvYGLmb$bqPK_A^UHU@MoY^S4G<<( z&n=P1bO`=!d2&DiB@-PzSM>~$h>P8d!}RG4q1V&Ti>#~$qpt-yg^g|t71dTUh1f;f zqVE#1Ajk3!fx!B@${*0WQm-_flp9ndtw9|Q?eBWWFvBQbE}ES%HS>#BpnunCN8H7T z_HyeIE*XI`MtaDZYr?i{5U?SGWP!lke>nOiZPNrvx~hiTRD=%?b_vh;Nu#g5s$RIZ zlE~WvM)XrpPpn z!$&8m{B7izFkE}4#2_NkA2z9rOh-soJkGn(vW!d_2W4~Chv``57rGEOIfj2Dp9Qz;SX&uL2699U7`0#1a>0toxMijn~GiGFrsQ7Z^EoC=|8H-q;GvY&m#_yhl6YKr_ezyI?d5uE*jrsl@K4 zJd;5j)eDYLrU|Jik8pY>5B7b`-^x(`k3Yt>5##+xSgyzgy3CsaZ|z?OZUK@R6vC7E zE&DFvR9B6N7KC&qqpNe#hrR)>- zO0XPbl$eyvu zwE{oYzZ|)Ks|Visj~+a%j}_k5dw4#@Lp$T;Faw^rb-MhaN?ehn;vcChm#mA>3UMcX zl3HbNb-I*CrS!n0-Ig1wNU*}M-1XNU5~NNJeB_i>F88*CBbGJ<^u-Qmz*{5N=(aY) z_FNw)1Pj}fqp_Kr#zilW7MQg< z;tPt>_)~7NOFG{0zrnxvX<1p52>A z%@RGDOQDNk4@T?>6mNToYP|(cSqItAgA7y>4kh+0APmQ?wtgdyTC=`7WLa^}9IaSW zZG5E1XMs2Nuo+%TzB*n0BNPk@{0hCP58kA;xU{2fovbhH0}4+FLHym!nlee-xb${A z7TxM1!me*(6_nS!OymQRe1tj`4>5>PIXjf>Jj*=Gh~|+y_dFgazun1DUuU^mH%Pbb zM{vOGea}&#-kLRF>`msWOFjip_7DCD+I#sQNV$MZBr}z(BgTs+%JJ*5o|5T)@0+!e zt`W~yVsGGFEK#cJmayz8Dh8Ll$C{oIqU5^?guoxy`+WC01m{FETLVlL2|!LH&IpeI z?^SpVvAMR_+Fr0s6Ib_zcI3l8FBZ-z&&|7{J0emaYOJ@@+3L!0L+GQfX;n2GZ5Dv!x?R*!gGJ%Ecia)4FgDOzP>v3z! zL8%YBL8_s~AQ}F!ia{g8L^?=nM8Sv3lLiMNGAtvI=)2-Sn!!SqhoFtFB4uic?@pSDHF~Wp2bumnhVMu6Y`8Y!B)v|J7=9I zFH^|S2wMFqqLHzTStz@3DXb;75mUPhtVA@?aN8_=Gt1|Tz_gezq2Te6h1y5f+`5kq zHkf4U=Eck=KWto<+M8n_X`$V$1WeT>otR6 zO}QQ-uB>0t3h_cL1Wq0HrZd)BNqtm6$);M8ZB<5lQ{@^Cjv-|E?^W*V%Ij9aU;p}I zdUS>_B%Ul4P>j$j!`VjKbUYNGK)RWLUzRH3^&^j6&LDrr{^-ir8YI(4FHjf#!0*Ai zVeSE`zY3KR#Efdr1?|A0no)dg0%|%jr5v5@&+HN3+|mc?y!L_Jm@em&On8^fKibKj zM!%=d1>Tzf*@~sl3?4{1@CuV?7b#S@)=tir6Y9ENK1SLAa<1&E9Jz%Bssm@^)S7%2 zPo>YJU>JPL{75Cg3w#Q-Zw%u*eLcZj5e(TGHIor+eW+-0nIX>dE}{C&JvM{H%kyIk z))kC+@4ldR(B1$+TU*!sC~UB6I^{GktUFQ19ywemUVTef@lL;OAuZKQ@6 zJl~iG;xTgTjnn=b&-RLdrt!=iT+=x^R(c;h z^e9x&DaoDP*D)b)7(1lZ1{_k1b4$uCrEqByTrp7L?-dh;zXx*eI-d+0VcIFEPC{}M zVp4Jq6iB>8)TI4gL&o`@u*-uVwc`nOUgx)iM`R)uA6%rP_QuXCvR)Ok0v~*FAh^3J zd7qaXq(|)loNt1waA|btl6DW#pz0ofVlmktL{MPNF$`#3WHWROXRZs z7-2(3%PMwanwND3T)$i%<1=AVz#tGG1A$*yrpmHL1*BSmy9K2bt$aQY4Mp~eDG?N2 zoQCJDJ#jrS=-h@_{DzmG78RpZnu|8YHs8p zjBfRyo#rMz&I!WmRO=6ZQ$g63)kl?cdTlsu;>D#$JVzPG{e32kr{$#p55V8|3>R+x z9O@Lb+q^uo-p*A}zQ&-D4J^wRjkvq~Hg(enINMTie<6wu{UG;`PBnkD%zMZFok zl{_iQ@e0%i^JzwEyLVoz0GG^X0lvfx5u?z4L}l@A`Z? zRyR?<1IEpRzMQza(5j$|Ar8@ql&N3%ImTgE&&4!P*33*4F`rIjEkOkniQKy`O)JvER+a@s*<`|RoBU*j zmOlQ6PLa*=sT8DQof*xd)pqO$-^7zfj!wK2;PMZZe1zMGrB@08E{7heYy zu3Y*#ce3JsT9bx!tgTg{M>V?9<(ioie{xIHbq!r!qN`I&8%p}OE>FVFZu1pDyb1B142ZAiWX)gJL8wOqbH9AKZ`nX8K}m3o zuD|-7!;SBFCg@t7v8Wy&FV$tWvAsoXCkhFduhjwZRr!ANM+HC0{JMT{P$dnP#54T~ zGY{BN^9>g!8k<*IbcBC9C}BZ(9Gk19#mog9I9U1zhyAj~yHCI*7p~5AbzbUPBgi^G zp;};OB4Az9vk;M~M3a3WK*7#}nHBH(Uf>pRf%~MNP2tq+0b;iKTGr4#72LR?F1Y?P z7=44yl(tIAKIqww%BS!04$~N(#XTF@?1ySC*qvc^-jX3k9xk~vlG<}ym326R>An5e zUJxfWxRG?Oi7=0hoDs$vO8giUwASA~kR56G;}v5b!+3*#R>7%FSE@v_5ZG4aF1J*$ zNSEse@w~wOxi|v~P8 z#eGNJwW_L(!qhvMmKsh3R$IWOuec62)SCV*oIs~z*GH1?s`FeO@cof>3E?pG+)ndJ zlSrJ{z8qc58R`o`b}p!JOk(B86khBzU+R~6OX zY~LK-{^aoFaM{(fk+p8KciFri^*gzhq{R~tP;3ui0-UwHaRPGoE)g!99G;XfeFisJ z)@Ap*v6y4qQ=Gox6gxD>w&Pz`?Opb-dndO?t$Sy*6F5EPc&}2_ZAr^AYdvqt&}}`8r8B|B|EL|hY~u-OxN=i2N|2`rDQYFQ*G)Q(v_7_GtkhZ zj8oH86pAkXJrE_cwMHI@$n$hhvOuS)JV+8HQ>$IDnXH9aV_?wUr@F0ZN>&B(!Uxo9 zba}{l`Lwo|tlH33RUk!#i)s<)J<^m_E-I<27D6hmi;h=D0Q(*I;w}Jh9uE+xuauks~BesP8G`TvJ8byUZ!z@>B5dM3Rv`D<&HUZyA!i^7T zRH4_R`Jo*VF*aVyl#ABK+ScOeuBzGEK9KI};?Q~|b!JqWmpYf&r-=qpmZxCvWyoHndj3L<|&S7p$u&ud8^WID+- ziSLzO=dvv#xg0~9Uhz_kR-FtOTrJW4XK4xVy5w>OE6E`aVD|Ngnp%sYvmX2a$S^f= z_@CEmEP^P2X;QoYBY-SWdYxu0d_#!3?mbiPQdO1F$JZ&AJIB^eYpIjj($ zBT{NR)HKeN@oVs;A9hC`JtQMHhja*rFUW7$yM4cENGvYE?6wziB+PdDmU-LKKx`iv z7eXmWCF-ZH<~;!=3{cMf&5yxhU0^;<&DwQcB1bRA--n`iKircgQd_wL`3{TsY?z?9 zkRhE_O*MlsK@iJ@ZiZWMR66R6B-TU^m+I3SYCe)8-v@ zv5bc~b?B*=HfB$zW(>w}d=Z~Lk~8XBI`d4_R5eBA$XMZCl3V%EFC9xlVK|6V+s_nUZizdP^s*}Jw<2rL!VUTS4f!KQsTFe!3}El=qM{^tq)m)=zTG$8pXD$cZ0Gih1S8ZV5IAU_j*M4J zwBP>7ufpa#JiWIbGK*|~Y&&BamLEw^_3n>ie=EQhzm!b?KT0gE>ad)@GoQ$0^PF0D z2j|#wJbMRkrlY0RQqkGf>nLdWby9bGfS#n<>{%viIXI?Te%0bMx!Qh7{xvV~_pZzG z&((|N(Qk00uKngqkga3fMr8fT>36YY{U0}rpA&X96%XAR?_Y>sQ&;nIUseb+f!zX6 zsDr@i*XnO9-G&Iy>fK*(zuzB&>`W+`FU<2NZlV#sbiDfAo+4*|(&<}SExDhaUbO-` zulQelzP>MM=e@rs!NK=FPl@?DU6Ox4Z0`1S+`G#0cuf=FeH)hj{d%XL?fF^#d+pth z;r(MUrKzLCW$jVjwc~a5EJ~Iq18}i9UkBL2c|*kIy*E4CA+hWHm}3(@^zxsX5z3BZq5o7+FyZCb)wQmsob2=UAv;F4l z%JxgZTe!>Z^$Yd>MXX5=~y;ydijKujVB+Q>sBqvczI;rfl4prMI%+k@%9{0hI_DUG<2v&e-_Y zzTSRZOO@muhUyGqLxhdthX%*rum?k31s}G*K@SG*v?6BcVe!QUp?|+Gf{T2EO4Frw zFB2gWK5UhyUPnf*C&L&kugHz7C%wc7(?CofW==)CGvKCM>PoptSU5MP9}r>Q_n%OJ z2seU9BLG4s1os8D1tO>cG6A9xglGKulY~D&62(jC#OG1Vk*zf@R(zBtLGsPyxr($K zO`;u0U%-7`ay9F^GvwWh+A;@b%j)(gzU6d4wS*5(R)c&<_0Q}Hii?+P@6cbFLaXLI z0PvR&nK^#cF2salv$#jiYwtkb4JQn|pWQ#5;IX26RgJ@P9KyJfj9A1g$U7 z#Y4k>5f-hD!o|ykx|5}ezoN#UleZ2CO4uQ$NqV5piIdhFb`g22CuEEQ3DcsaiO>e# z(~!u4xZGEh&i^5fR}#Iwv0C@l9?c3J?g2NU({sQXDCOY{HAk-9d-<5LVve{cGSPr` z*v9H~VQLK~2MLalmSn1<{SrXy(E9;F?UqfL!Zfvbf=d<_QLs|oOqEvTvmG14z0Dw35M z10qeB#Ys?N+JIA-5n?5T4KEfd@^L@f=2#RZ;O%v(^#YWhOnHn1YQkxdy1@0#1pSfy zGiXids#r-V>>aM*di9TlSz7N?PT?{V!KwCWBwWHsM8Q}ckx($(PYvN21p_e%qUSEO z_cWe&)do#tDEIviHIbah*GJDa?+eE_zKgT9E9-6n^HZ^BEcZswtA@~Qfbbsm3WtpO8&YJWC!QN@>cEBPC*rf#<1mhPHCo}XoBLz6it zMcP2LW-_Xyc@dzc34=;E|_aimFtpDRp?Ck_}S1%s&4(EC`BpJ}5}I4r4rDtvJ9mW+&L+i8}) zKWLA`ptqT#WJ{#vnBo)T!Qz?evkNB9*H+tSbjg49n3nnUi!RZxr?!7)WfM1(J4vJG%T8-lh- zMFQ#52FcH_NqBsdfav#CZ6`KrISNbyk#ernTkOJoeBNJ*I2Mwk2Ng zw%lbtg?DZjzp*SD$9nlD-1{{$?+b}$_Epap?6rCn+%8P((1|2PAm1}de)rzPWq;afw`1tx0WL6T9oFD0rZ~R~_bGzjyqH5>k+ZQcA7!@S z9o}qBd`|1S#^o;w5U*2#F;GvgPUh3rZLMUjWT2uh)-D1E1o@&8IO#`XBAiuM-*agt zL9j`I;024^`mXV(iS}vSDi99md?33yehlG8+vO)?0@Ct#SSY`J?zcP*2ENI3Zrp!CypgMr-;Es6> z%vkN5C&>0++=1kU_IZs+Z&)1g{cgbT1-pi~(jR)97O$RD5AQ@wyh>=d%flAqH6~F5 zTN#kykEmoB=uX(!`E^mN2fa=}t0dbVnP=g`W5eM5nU)3en~T*cF8YU3-x>KOVkRS? zS74?gb;$F+z<7BWE0$3BA`ePhe8lFiE`H8=s-rN4cZT5)xtri&pHGv#-UH_+IEI9I zkLJen_l$Q+=49$I3;?j#jI|!3v=BsqL;j#H+z{+gdBq3K=4e5CKbRl|^Upe<1?vF? zKpPyxGTuj*i6rEbL2sSTQ^kN@q4^d$eI@8Lg%*`?ifx&odPykza6UV$IuD`G zs!~bm^v)l*9TWz_(D)=zE78|QRUdC}$BcFh4oG8$b%~~mC}O5iguBQ&lGH^|og&7_ zI8ORc^}2Ai0KLM!a!MBP96~ICV2mzRYs$K6nsM!8a-X@-Im(9g+ZhItodp9TbmUe{ z5I`wo8*pT)oq$-0{BVJ@L-(-puy{yD$R4#Ylk~r;nks#W34S=@Rtz3x zu-wqXsnfy4uNPd50esM$jEJ8l^MEeyb@jrReq?a`Y=$jMHB;?#p8+j;)B$hX= z#>m-+v7Zw_cFMPFceEiU7>E0mLFLhT+1<=U-gU1#fTqo_2R@*!XM4sZA?tb9rUeZ- z3N1uug|T%;gvtQV=Gj_e(E{p1!{B zM+uN@a*7XZ$2>6X_6-m8FrxQ%DtU1me$?L9aHW3XW5^*K9_?)MuJ`nNyS2oID7$e+ zg+PJ<@9p^Uwlrr4L4u#{?QDzvqC!MGF!T!vxv}@egVlC-Lq$Y9+L_eDI9wALnCLI} zzrMD&-|BY4gWW=|$O)Ogwa59MqdqT*&eJ^ia(2MxAH+nrd&uG77C)QGb-;hOWMwGs z0q|qD;tX%NWhW!W{f$WxT^cxJyW>1B-h7{R@&11AacLD3sUqpwtUP-M{9UBHK2Fpzk zIcpDJX9Rbm0=TacKA-bKZwxOw>zE;h`s*6|-9IkBMy9`<@sDp_zBr}94uZwXi>;u( z6Vsix#WR18r~2WvH_xsujW-h>)ju|XMFjxrzMaSGM{(tk(i}aeq4#y~6Z6C7??t%% z-*=_*IoJ~Xo>K0oe@OEb z$9yhQ3M0_h;A_4&m7RL*BaZDMdu^7x2ew+bw1>A71Ik;pr#6%>F&vwH+h5ij9XPVu zOV?$0Z1peGTQf#$PLty`+^y!r64IW~9%oJA7{^%ETfZ#?9e8H$6*VY*-2p!h zxF!`5eO8OJyry0HnbL3Us3V<6h1A7&AnLa1f28ep9n_`Xp8zS}8l1#6yksY&F8%rB zG>SNpw_;{y?C5i#=t^U-Z$D`R(@qc66G`=|T_ z)Nwmy!sVW9AN2YtpnU=4_Q1hR+4<}1`^pXB^^)E1enr?8h<>(f6}rvF7e>PBn3`i| zXY4qCt?D&w%50!*R^$||J*b2b#V{@epO8Fbp^~!*2#(?k)2_8&IT(AOf2K z9De!c2sz-=^tQJzf3X0ewsXn(uMvAq8ZxqnJ87SbaPyBHjrj>gIi?AHA>aJPZ}1yj zXA15J4bUUmHGXFPJ#S5H(P{&^9qkb9a=qKK#c$wPjnu6eS5?wn$6x&IMgD{TPlV8y)A&? z#R2)<#lM>3Sen@Nk51UjGmCI04ZLSksO9lI${kumt%ZdN~IiY=e!M6TrzlBvbHs|0mII#Jq5%YHG?Kg&<2|oDqiJ zdWUlbhgIOL;!{h3j)6l32Pu%|3&pRDVnhfE~tnHcm(XtpEH-#G8UuMuOA97pd= znP|Hi?hDOhpE>%u$ODF6LR(+{Igq#l{#_#6?%szds-%mC)rdD^(wG9Ohwv6y4me(C zl+%s4Et$J5Q2096N1PhB#?WH=hfK!!sJlnTpB)e<7j)&SkHDQ@FiYcLh#g~RGBZ~q ztTD#AWlSe2d9rP0_HWSl>QSA1wWvDL2>2dRZ}i7&M4vuVp~6wE&<7`~nZ>mT--Wwu zkNX46K3oRmd(#e5!$lmq_r71jZiv{WENs6@GT06Q<}H__qU&#h4*MtB!)!R~{MgTQ zi52xR#;+hbG?3YzpbzUy#-%P$E>O3`!luMIr}upM&t5c=p4j`147-f4o4`D5(C(7uA>Ca!1}OE zvU(V!yogw#@YmQc+N7R3UC%u^fNk#*y5`M4ga}^8SF_v0v5RgJZ{4Haz@+L*G(+Lb z9=S5pL$FH`OQJXzKiy4!ika#ZnTVO0>R}X+;jP5+wURF#1jDhBOj@vP%CNCa{$kmZ zS;JbZsdt^4S}W46iD)vF=2?|$tg93rx2$XqM0Melg0YoeTJkohmn+mbd>GnJ3G7#v8=43J$WdNwqeX z?2|>!NzKh1?ASY%b?@lDmFn)R+ni+W=5tZW9gxe2OgX$lA=Ji ztbgj9p)x0F)z1TW8uJppomW`R%F4i6DLcb1Jz9m1DNVetGyC|+-ER1mXEx3JcgVn_ z2VghZP-UxZ%O-bm^ajSF4}0e5_a8kuZj?GPFxUJ#gNSZI?>d6p*#4O-ff) zz$1Z&rIXEe9H%bwYknJBXzh*MhTZ)95?Pmnarq4*Mhf(sT-aa#Y;R3~b7JoJ-IrML z-!>M<{h#>zKXW%MMfS8vsJ-!S9L-;yk}5YgNlrCL#;C{2NW6(^?+Sn?On5Q#D$MkR zpW`{zYTFxog&|xdTt#Ruy2GC$)vrrQ`UQ8B-d@dBPY8FT<@;Nn!3#1>>V?IxSf=u4 zAF~4Z(gX}y4qpY#F6H|^>c}DuWO)zqgnxBlB7#2McmSN;^(xrqFrqVl%#p5#_LFNy zXV77_uniokb&;k~>mxT9IkI;uq_;rXng>|C3>Jcw@wgZf?EAFFq~@hAa&AmOOI1;b zbPeN*MS!vTlS3N2h7Vs|LB1aRb^WN)t-xd84hIOyD<%ilW;WKZa_3WB)a&-W5|ibJ zfF0*u$a|x$Ws2C_?^fh;u^8*Q;s@2Ate9|85mF34Xx*8>r8yZhVPRQ^jek)BXOWl_ z+Ckl0NEmb5N#MP0gfIB|BGZI@uCa-cD$bR_4XU{B#3q5&t7XuN-uY>c-}T)tyvY$_ zZpq`?f6w@W+~gI8F8HzaGkxpr8M%|;p$(>FF47L?)P(v-;UNtvw;RXQd+0to`nqRP(%jUk!Zk3p73i4lH+#{UaW-?ol9mBq_#0fS}Sg`QEA zpfg(A`nLy4q$bIett=sWItBY$C&j4?eMVeXRQ_HYKZ-rFO8TFYG^w$tGE$`_ZfVCy z|I~FtPuvl=EE*7aMsE0bXwkI=f4bOUl_};-jsx3Hd+6q00KcZ4+8~vi4>hY=t#j9}o@ag~_g4s<2Zs?D>S-v+b93R%;-*;UNxf`wg^|x>Ik#8=Q!#8xVu>X*DeRh@w;y6=f# znykai{d2+IuFduNmQkso#Y@8Azw%wgPr#zTjn7ff8L|5dm}=VT4M2~+?(PtLghV_0 zDbwnw!EyvUbL1X`gT&nT17bQ%XTYC=&`D)|fZ5aGSe4Y6P%2%>gB95!IglEv+QLvr~H@LpCiTw+u! zfmEWACL0ZgN`yO&KCL!-hz3z}$j!r?3ma6Umq(qU0bQb8A)g5g5wPYmNAZ4dtjpc5fc$w8MM_yCTTQ};5~r`Gqf3Np8s7}^C%CV4>?;}w zktZsP+pZ76sz#N#yDXt%p0b-0mQY5a00PUmfZoQlRzDneQUvaed5%C}P&@|a+YMSO zY+*C4_+#NBt{o*9K?c*fpC;V)#*CBjVpH-EowNP<;8kX=YsCDF#BDwi1M1Qar|`jV z=1*|sCKgz1{pR)%3&yfVqinSU`J|Rmx$x>{#cZus1*@ENW2>CU&qADS&~E__jJIDZ z@VpQliB72`V(|C#Up-5a6+KijCcD55Ja9VQL+87E^+b|Xi3JEQ-J{uPELv?9o8V@H zUUHue^vy(^CO2+SYH4rK+l#Il2*8$ZQ95B{6D=B*t>FzpB^t^~L$n9QKXFfVLv0poam=wenf4rCSc0bN`JWp+-S{q!~{E+!qmtW-{WRK6W|B&kA#e zyQIH}Mcom`h02=$CMQ-yp|Z)!2R6)inOx(arvY2_p7>@V^VAt|1lQ58vS#tvte$6! z--bl}{CNG6?;<%N1jiZPid?Qky1+~lA@Tb7^j$YlLS|fXU>Qc82CxZ>n5M7Xs9IQ#)K58 zF9UYt6KfwJlsWi-NKDaf??Gdg&sE$PkVk*Gb3Z7DwTD1g*EO7 zM23g1?J+FS{@3Giu>0CVB#I$~5ygDN1n(+}1$x@lf|2NwWrZqS| zYLGS^saPq-jk2R9v95sB_Uy+BPwnE^^j9GiNhRr-_-rEe~4YvZ>^2mLnxs z0_=Hp_rq#>RD>x?a`k~;AOKd8`eCwX<|I{mqPg`btSa?ZF4|;C&Ww3D{;NdTbuUsN zls5fw5n)DshY8|oE0A;Z#j-9Dsx-2AX$u-PxD3T|(oFq%=Pad+3Pt7D)@07!sW?8S zMY&#F4yi}(3z5%0UYa{^K->vJ>n(Tvp`;Dk!s!(RG~TfF9NOyDy3hz+g0}nE(jt^8 z!kb8Sx|mzA=GlVzuIFtb>5fbSX8Mr3!*}J))(YVMwY1~l7^<;wg8hV%zn@R?_De#y zZ<6B$crK!`aVSh_kqBkXXL@7oXQ_*Lh@zQF6 ztGp$5`FM-O7Qamm6c2X9*q`{0 z_0-ASx9M5_cv)m${FaOtjne}}vd-zbB)Usj!w+EyRUn__6C`U|ew%OCwPKH8_oMTgT3Jt&n8~=PIw@JJ;|nSzbYb1JLeZ#=jhP& zI(^#!<*5*Sryi~MSyFcAJIe~^m?$yDNb?SL8xmPH!QQ?+(cxiE>Csnk7cv;L{Rsu;58F#@dXHCKK0c9sq$_YP1~AYvsA05WyZli<+4zgx5%J&u zIkGp3Z96%D0Re?W|2y46`ER=QFTsjZQFKE67A%apO_O?!0xr2g4&7} zVPb0#l3KL<#}|j>^tP8n8}P<>1TUz(Tze7KXyz7;EM3g~U)OdeN4Ck>8IkE}nV#KO z*`Aj#Q=OiApEqZAKxQ{w{ljoMj1`O(%oR*3SeMLRWA-tBh7`;-%$E&Xrmr=>Z7Pf% z;KIYc9g{iZ^oQk+-nGe6+nQtYm&B8qRB{s+$2NC~-05I8!-k**<*-*w8z0kQx#r(g zJ}mOnPGzyjQHP`5Df44CgZByrz0)j6FQle(I$;2N*JW#HhVYL9)aYpDo~;)?_+D@mt8SDbrC7Ct}Xh7?crM5#el z#AwtS3f`C|8qIp+G5PweED>8TB0zkT91lQC{+E{u&8&R!;30{p2%_`Q#alZOuaRML zF_^)vc+b|F(W7L|@;Vkn8M&b|TC47DUxAp&qBInk0fz0=ah z?&DINcEMyE9krzXPDwPM^U@FaSyHdO5bJ{U_9;N;=^4{WBeV=cM`+tL0knWZm#Sq% z0HF=Ok7|Ln3i<*gn?yP~mKq3i-htB+@5uVq*o!NO?jcWnf&U{Re>gG=1AqbnN&nk)1MNSaQM$?lga z>AwQkMM+V9UIFd%5~fp|4h~a&ZNmq=-7c-tVP5Nbkiq%sQrRa*qriPl^r={v2W z<}S)!efO~WUaKkR>}<$Y=9@Rg7FRKsfRFbFgaMvvv`aK3E)Fgt7rq1Ufm?DPr6bHO z%%Rc@Q@Oz=P=BN!SRDlGIwPaMWdImR^cjq8y2enRzcx%V+B&-fVmUc&qU^f(=zwvO z&2Ci~g;b@1pJAIu8D6-tVQb%;!D2?p90CoTR&B#DovZRrtz+SRJUc zDb#f$ALRoeX;2H{WU{Y<}e3MrfTW)(_c=) zX)aKFtgldVh=E}^w%da(c-DAFEM88oI3GAmK@JbxRQVK%(n{iwuV`Bh&;6K!3c;1o zmC>#7d#cLO9D@c?1lXYS3(EwHNtcK=pNJMZGaB^6@(u+$-Iqh-+qqe5MA$8b4$V`~ zlf0ob(*rm;pIlr)NAYXj2R;gEQ5)u!QRK0odv>HR7pY=DoNJA*F72Oa_;5Ju8-JSa zeKBr=!?&nA5K!>yUS3$+XK8p1ur5FVMQs3M_rcvka{y^qWF^H<| z_qn`%mF9^|6)}kD{Q=$@R+0dqHnUv08Vv7HA9gVaatJX9Bm)ye69Z!dh+0eyKT=ds z*l&c8P(ax<&W_*6V!nU>XT(I`Z~v8Miy8jX&-#{|6 zw@7XluSg|qJAKGCA^G{fJj$iihakPg(r z!;Y2Ib6oRT!m=k+>!RjZKS20Uk*XxmLU$veb(5tisQCikFjgVkMA0{KmO@3uz5J8ns4K#|E>Ax|7E_5t+BJEoh{@4(Pzl;vj4l|c{ z=Q{S|C*FBM|3|O=9q{+hloEpgcCHl6GI)5k|M(RNCj%D=N7yscH_|iI182lk10qQd zf$>kTWx>W_JAZ?U`?s+1{x{f6q&CKqlB7=d{~f;VH{V?UK|Fdf2n=|6S^573vBMRJ6+Bj=G;WBao{@?Y^P z?SA$%n8ozEW%h77RDb1_MJe+kEB|p-)2qP2k?XPoxQy_cS9p}AB#tCFF z0+3^_!2%92yKDP@uHer=#(yM#8#VHOY1n^EVE+e6fc+mNK?Ye?hUkBB7|FkN*#A$8 zb&3eQx_!fL{J(_G^53cTpK8YNKR`G7$;uRjiS@i8br&zqe0LZ55T1bQgo1_D;(sR{ z5wE<#?4*Q+rGW|y<4BE#1vb+N;^Mz}*8fn?#LURV$m|P50!spl1IiLQ*aJhFhNl*sNor{T_S3>x0P&32ftRTW!=HG6iuzo0b^sUFsb?%0cO3sj4h6lSC{H~Q< zdbBFPxLKmY%Aq&PIk%=Li;KTEZ4pj1ZKS{yqdSRcmaV4te^Nxcm{bzK0x1Q- zYNFQbPl|>^gv|=VigW|R65jrQn0w2hI`IJ+U+x+zuXaZXj0jl-ylStB<@%5J0TCH<(sTmJRkJpb;orqw3P9r*4U z+EII}sU9ypE|ru~a^O;_p+v?L{ks=$V>bQ>@|7wdUT8jX4%sv0gFmJokWbVv%x^V7 z*grzMnE&a0^2TnaR^l!$jxK-PoM;t!M^t5W{%R!)Y^XI6+2pxE1`TX<9l>vscv$u} z?0IQg1;>4Z%zVxx%%Z^bq2w#i7T5hIO0aOsjOCDU!7;DR+y-$hhbjL14$tZKi-VVk z$7A@9?(505)TZJ?2(TxpRnjet+bO|o%2HCWEyPB`!q|rxawY~s62cJma0G=IBY~r7 zXmQH%k_v+udTP!X<+Nj3Dz(6hh)n9zWn?>WaSYEm^RRumsmLtj;|+%x5^ZV?-KRW* zTDNxX6_jt3{iitYo38Th(k`V+K4UfN-0pX!Uw44b+7%uM8*_9(Q|+Y87=7y>*#^xI z7vJnR8*tYt5?lR~6B+1O#hT>SZqHeQJ+q*w&Pe*z78~AAI(}*WA%@LL{=&&k7lWJq z_02l_RVVKpc&y@tS3G^bY~9OmqtEgZIB;R_xX;_3eDWFQK)SI7xFmk)WiI`AM0nxx zof1PTY2lW$wyd^n)^t~&rBJbOxa%z4zU#->76A*1K1n0M3PJrOd@vpFlzz+-1jV)BC<}jr{i^AdO>fl%-aN46AFI$`e`@!S_^06L@E?s# zbmHc(MrOF%6K`Dw&Tcn!Oe_EaCs*#70U2#JJx(qn9rvozEmc`X=Ts-~MP5KkE-PMa zx7)}=%B&{map84_za$sMKkFw zv=rl3up$#VpL)jhFj{(WkCP8QXucIipl>o&S7J z6ikE@@yVBKARZ^=U@C*?eYD2+5zJaX(JI?_fR!6EqqHbd<)aq2AKqpc8v3guXb%=QbGpad!cVn*|ZU z_ZSOzdHWK5>v@$6RwXJkvq(TXmpm)Y{cQO>p?K2w{cdAKf&ohs=iDAHS_A5kQS&tM zY6ooEK-3ij9AlmxhwZu@xCq(9mG{iDTQ2l&m~y_YARVvWTO0FpC7N=EYLA3fG!B^7 z8Bok_ffE|ryinc7rO^R~SmX>_Z890Ts+8a9pMgt7Ildv8>?;tTD1F}}{eQL7ywS*{Kr>`9ctRhS#t3 z+f7p{b!u$!)yFaYn2RWf$q{79*k!_*-ih92j|UE47Jpp&)>sO<|6>gH+&lKh9c=bE zQ4It#sA6VoBS;)zhjxRb-moh@*CpRJkoA&5yPQL`WCwOUg=?Eqbb>ycg+9Y$vDKY^ z`l`CZrAX#<($T%ODoKpsXRO$c`VG@f&T^0vyBcjPd6S;v6YIJ~n4>%9s)7>@Hqh=k zvcRH}6qhPOp6g7D0J4iZE{!O~Q}L`5ENB){H}V_c$$7@E#l(#m9z z@+fB)(m>od8RE6`OeH_ALYH$Sfz)jdiUbVNCVd`Egk!JkuCq!{&LG?XFYHo(g|o%d z(BQH~+yrdVlo{?k1K{c)2tR$@M+|2(>ckU`{DsK@-za$l6)d>v+RJ`|N9;8VxJmwHIWcF$w zAWU^rVcrxr@xW{~I6!fh=u#S*05loL*KH`)WnJ320+MKIb%pLjwQu^*n=fA+L0q(y z<5g>Oce)}%X$i};RIaqdyYQs-PJj`;$P%hXEg2&8!Q4YCN>2R2@#t;LNfKcFxDLbx z#&EkNa#kZI68(H{2%fWQKmYpNB?u5`F2_pU2Jo3B);2A!8NP2lc51e8P`eA>XJQ+O zPX7dB$SQ}2MaC$P+eYtnD98t^h#gWqNZ?QfUA4b9HyQ5`xpFCz!%h|LpB{;$CZzpV zvHADKc~O=J=2aWD=c6ys<=0NqA+msDU1NJswI;ZQDEK*A+Bde;K6TU-vsp1X2*4Rh z*^lNLhr9D8DY#6#B3f&6Y^%m>=#_sEc--~3WQ2^Vr?F4v?D8-Qmx|2mcBLs)J|yf< zuv?Hjced3`yL-ty<`JIs$SfYllb>Zifj{`{H3&Yune<(K8@8EN@1#bHEMT@&v~#iQ zrSHzOOq#a*q;Ty^EjZ9^4a#cl?hyyLw!z7e(f!?0cFFqXYft4!ko}{YjHFZQlunT> zWT%#w(=678g&A~B7_ZyJ{GR%;9Y$Tq1XbZtQRMy{?9--^lgBxPub~qKaQes>!Tp>e zDfVdU0BzqV;cZpX{SiQaKYl>!TJe$wDn=@Hn=wxW(@T*X@@K~msXH-m!r|7#bz_b0KTk@ zCR%AI#zSU$y}`_>=6aG6Y4d%0an9g8I9wr2v8t@+TYTWyZEQgy>iZ!H^BATSntE@4 z1^X^|Q@@U3Qj5ehV*PtvK3!{F*$Kp=9GT~^2E!mH!#g4v-Y=gQftB>fHdVQcAztik z+!xDK04mnr%RC(UU@-7rPEiIenaW}f2d$JkiBn%=JDDA?p~N%??3f-YuiGx>tP`50 zfo$e}zll<$M1z@A%lQn2?{JB?{jl>nE8k#Q4|I2?bS#Qc3{p}Eqb&o6DZanQrkiPP z8qdgE(Zn%Hv=BExqP7CQn=fT7TOtcEwYpcckQ0@U)O}HOmzakHZZauMVq9B8t#lq* zhxQXEPXN_5%FGJ!OMu^O0UtEfL>n9Gj%wx&yk+PVd5kC}LD~!ASV> z?a^iuQ_bHpTu0r;jcI<@ePJEfVJVVv@4W@X+y`-(O1sq0f|M&TDvd`7t)AeUSlf{zav-kjHXiYlZTEa=T#VHNyILO$+)=5Qq!b2D>` zKZo-F0t^UyKnZw2`FTKrGQOch8iY`YP`_{@gh^%zD2{)F75oM{I5Q_YCQy0bP^!b{ zq&K+JFK41dt$S|0a3Mc#pb$S7Mo~!FM#d(?z}dw_fs_nf)5*_T+2yk?rBn<@Z7y+1 zLVN%geHoH+S>Fh8V4tS+#Q3x-i-lR7IL4GT1EYrY)HJ9}V44sU3n)Jrm>eJw&;dAo zgWh%I%h)VV3`2oI?YF9mFu^+eA#NdHm|0+0FIj8Y zm|2~`-m3^@z>yOPm5Juge<;jec~ar6P|OMusYMrtz)(g@B!pw( z%px(63nLekXa1U6XEZuz;xBg_(&06eI244mC5qGCgpIaq-tA~fS)aHvU44%PLU4+q zq)}UBqB|H90gTW`z^Skv5uH~Ks49qY2WG6`PCXJdlY3e&QQs1HE}4&HRN6uf;x|A6 z++DGk^<2t{T0M@u97-~`2EX1ya~qG`<9~s*R#xZ?H=;%&(9DvIti7y$&_c~Od@>;| z9uCI|;=Cr^#Pp>)knw3vx*zHz1VkB)Dm@~&vt+~blJ^UeVB^vxtl|P&IP4U?85sbJ zNqDfE+jH-w(C~|h%L=9BD#X!;k``0>_;!2cQ5S0{kidW8BN7T{gJ3!x-g5E%iN=6% z!Y_a=aOdL(zJy4Zb446s_W^znoOU$K^_lRvFh7DCn#@nd77(k;vEZQy@B7q`TxbXZ zUux~i^iUUGMD*n`C&CN2yOANz0HbyYqBYFy_=XP#ZKw-ueiL8{kp2@YS!THluqn9O z4)_#F9O&$Ax!d}a% z?=e!1B=YG}S2r;5Nbe|7G1&%RJ8JaZ$!HyQ3H$1k*^lTVuKfm@GjNLQRo={V_m3v} ztGoI$GXG(cPZ}G)Xa}zwDR-Q*f;0?DI##Pv^XSxuD!E~ENmjN`B-{N;7|o-_`s=5_ zNhoSRV%i6WZ$WGidqGH34@SZ)HWug>S_qN@$|T!C>MXsZ9zKp*E#1L*1suQ# zFGqEh>7cl38sJ5}km;bh>KcGX{X#BqYs?YzFcSvTj|NbDs)357V`nMOCH#TTZqzM; z_5*tegT404#7y5z1UTH1iJCAT5Tju?H_+Wntk)Y~r3N&X_Nd1cj&r9bP$3w@%~-6L z^0YcMLK;{A7{-oa%QE5~y<`{7+D7kZ15C5>4Lh|F-bk?)Vjp~S25yUgy`Y#_*d?<9 zdol87&s0KicUoOa(4j?UZm{Ews{xGDxAlW{%HrlDFl-;C@RXL!^GJT;Xy{ElfRIur zI29zRp}^)Z$X10$Sj@u9%HS9Mw*8Wv)T5-m9btM-=(60j7*YlZt=|>YSml|YozH$Q z{UIc~I>wM^g|t3BjIYaeI0osw*^bHKfN#H#IbY1tn~pLKvRWTWnPO=+(3VRPo7v{dHI!zlSX;@P#_X2CN3Qf?##JMvlH6TNRgJ50RL@(Z zKKAMnZ1U@p@%V%eaA`fcz2nXTR86v6)LTwwNYRp~1pko03k0fsIG%vw z;7VPR8)gvPXE9Ev8CS484mo63t^Yo-;iBB&{m%3Vc7p};Xp*&|k3}wEu_>jE%0@3+ z7jBj!f9cU$x7lt(8~dh-#J!%EC+}VOBUzLE3i@0fAAE(r0nTD!#wnxX1tPPF))@UD3wu%OR#58mk<)mr3#M7XMae`->LuJH@t^P zX{%qCGJ;6y$<{hXp^4I(J^D#bqty%}{!9*$l}1kmd1YwNgVLArn5-^wG&EgJPld#V zA#p9O!gcf=X?xmwJNG5L&439g!c_oY({n>oVEJWYJE*{H02D66UNsipth6coUDAT)ZTvHSwhqnaz;&L=d*I$7iY|?# z`QwtxqqfZmd{~P0NVdwc<$}&P6<5Xgy!W$JNFiMko=244j=hFLvV`DyU>Q5_Z#P90 zK_}k_pMN*zwSgfk70vQ9o0_{AeeV{@WOWC5?s)Y2yYA3Za|gM51Ef&l|EWg9`!AWz z(ahb{?azw#&+%ht>Z2x_<{M@T9#9j7=U!I2g~|evO!0AN4h{w*@?*%V30J6DenBEm zmK^nJXJh5t&j0#eo}UHY-i|OjBNSqMCEY%T2c2)Y{gf}){p61y zIh!vaO3}tlUDrFdOkFoSADH|ucZPkuYBGuviavwDEuj-fQea`w+iHK-w$TctZ=`pp z|4x6RwN%euV`sE7QWtK{HjYNGSZ8OvGB(#YH+GFa&Y8lQaz?LM-%x)_EyjtfodNf@ z`U-=L6?ytwNu&Gh9=|{E?Wra`@n!kiy`ypm3QGMs zuq8qlTge%(`g2RrPgtYS*B{>mcIZDDZb}>)TJF~% znG*?TmswvSEMbsuFKkNTX!d>tr@ggHPJgCl zZppGw8fPhOcHq{$)!ds?h4y?&vXMZ5cu;>vprr<^{0#Lzl^C8yoP}OJQdQ+c zoh2}IH+1r~*Kct&d3{&Os7D056c=A(dY{<;M4a4)%`XX{tLVXF;qVNVAbXFp253G( zNzDyAvnn1f;3U||^S!mr!91CPww|#a(8>SF*s5eU@RCR#{edG$phuQatc=VdL%+#* z_Hm9Cdk&2%H*f{5Un(bSHW+*s+|==`7FBj%yD3>u_KXNYtHAVfcVf>pvP{xFat3FY zRL&Ut{`AJ$Y)rG#XuEJYCvY*bScVSLIumm(by?9c>?W`y<`{Z(G0i#cj-JW_m&As@ z%Htz$HE)xm>w0ZxX(b#G?_2qIXW#g(Hlv`S9|x;QG3%V8t|5{SA1A$})>5xGC5Xa6nt17Ynz9VigMQOZ~Cjf=dPgJP8BNmftw!$vF9hjP+ z2g~qj&@@1tOpBJmU&P{2>QucW%S`rozrO4{6ea_qa2bT*$83`p69{;UyM~FWTyurlL&1xKG{kXH9kPeXhZG;wN0qU|$M7b$HZ|wz6hNp$wBo#gawLUTB$KpHl91 zZANmcOuS0n+R7%uBu|vY?awRNz;=CudPZFfa>O&gLIN4GcyG-3ZVFN!>?aW!>LU(j zyJ|()4xWot9ERP%*I2lZ1hdS?pmXGZ=n(~$^yeIZx9b0hq|q--5E|!>pQi|UzqQf3 z{d*)tltEFt^OjrX{;_HKi*u>u@>@m!LXIK)gSq4Zst_fz0hysj??S;N17`y#LuLit=o@%rVNLb)^?(%e2(c?=A&^h? z!2K>E#)+;DgWiOwdi(sno&QCMe?h|x-ndt95_mun{vU-f{kQy{-$Fo;M*X76AQ+i# zLE6rTW`MCHg*Z+Ojr2_Pzy!+)L9^5|zkxJ0%*-Ixh}4s?`2p8kpbY+xqM-ewD8j+8zle-9QGgDk&L^dUkHGv(`DJXJG#u=J zIM^dvOiT$V4=7CHp!fiA8CMZ&Mq~uFVW?j`px+2wA$mn^%$qF#%)a_-4*up}Uhn_7 zfd7qo#rej^{98%R-#jZq=HH3|>b5VmXypE6#2*EqA1vds{%@SV-v7br8(t5laC|#$ z*gt9?`|W@KnA)qFyI33BS$i9s*qQ&$p?{M|g3nTZkTZ^wyw zY*BK5J6PmD9v%6wqdVIFd1QArS=V_D^cS<0t{5c|m|#-9Tu2>!JY=P8#2FD2V)k&= zEMv+IX0EAdGKmyD?J;ryFK3O(r*mD$G*An#!ZSduy5)m1;83TJyJ=;e~Z2E!`Q6PTJ_>R@K}4PGV*lzoXNKTkWa}+ z8tvdaJDNW2o`*)azN?-C_Eg6DBi`ZKPRa0@)|DMAX!8Z`>v$|>;&c4ETm6{5!_@n8 z72;9y={x~ug_K+I@!IEcxCFHG1f?3^RTr`4TRy`ESe$S)F(xjbarc;JIwhyUN;LKI zmHdTC{ed5M|6s7UV`5FRbHu7{ujVIDvj7clptsZK6E+UGMZ9g5DzB7N ze`*)mrc(IOuSgO-SyU;N96O=q^y1#)4m`NVPUHF3=6QxF*@N~c1}%~dU~8FUz!)s< zE_Eymaqng@%j~TF!mCvKT6G8L{EiAC?E*aEl1*++qa$skWR&k%_~!)TDTU__Co?9`B2m7{8R5^x}0$D)w0S(9sR{%lj49 zDZk%?8~ejb7Sp%EO~gOGZXo^Zf;yR-{%3Fzb+mUfc6cLW{1Ig+6y%Y5m5{R*ZOWF0 zKV^a=;(9vAbHk$UysQdbXLu*8K);Sj?`%OoD4XcEkJ?#Sc(UbOoFEtlrXYL)S{59C zRB|`&C&doh&Nh-y*7$kC)`TY97tuayMvk;AON}b*)MT9<;*tkf zO%R!RiIx}p@-EEWi^6L^`&IB8TAP0t|F}}P*hXZ@&8-`zP7y8vHhvlP&VgPOhec-s z_~IK(}urK*ME(Q)!d!z%>S%7qSf_P@zk;X z6uLYT?ZARXHb|Fr=t-pUdNpiw8~4Zag=&a1bOy~`Vb)gcb}UjsUttA>(w)8Y*f2{! z&EAdS_=kFaJxcbBxfpezj$5#1{gGWi{eJ2u`=*16s{8fF4HJljay$#Asmf4N6b~#N zsz7`V?Y1gxjx@FOgGygUa5cFV>Jr5f>XE%FNF?>_o}W`YNu&uaeW+#&_Bk()QxZd>08qi+ zrl~mbz>C*?kFfvJ`8r=$-=D;lbOY4U(0|dr!9DRudzKqQ{b}_b1?JW+L0WkUx(^y; zw#<)mtvXwC&A2kuR?bWRN(-{vJ#11mpgA`ej)-a_tL0G!7ybE49ch#J$~$dB-Ky56 zDNBUju!2A>uD9O8m%n#l{an7L3t%-QOYm#mb(xO zIz8Vr^ha&o|I-PA6fQ7bx6 zK5Vk*<^@Q6d{;M#VoA|+nV&}zz_V3 z#|}t{V|cxBdVr6jJyA!j5#ns3Z=jU*7P9XTuYC|pze)ZfNFY(^`=AWOx%;aaCjKKP zk}RG9Au8I9O8bSJxNl;gE~L)vOIV%1KP~9)B?!$c&gj4EDW_?Q6^;+cP@6fqkMR50 zCt$!^S*)Tb;Bx!mG1Z(oHt_mU(%f=%j#1=w)U11Ob7iiNjokA}@|-52NPNr?M!$F> zqz0E(Y{5x*tQ19^b^vZRutGvzn>k5^q>6S^818Hvi2I75;)JBR_`o*Oex$LhNK!sV zGIh4y0n#skjhWjPnkG|!@9cp^!9j`s0e)14B#%-zB0R;UPg4$Nu&_Gq5(7qo zoY6=yyY*(KRJ$e4^CgIA%4VlyW<(^(qx>R{2OvKMJ<{AHpSdr${eLxu-{>nB1>W#R zKbZeT^!c+@h}N)GU6VlPKS_;385*HfQ_5({3$K;egONuQo(t9#?eB-k7&s1s)5TUM zX|EH@dkrR2CjLSR-r+ z^e+Wz;XCux2axEHd?=S8ADJM1D7I`tDL~CZGd{Y5Vu0d--Et1ZA5iwoGXh~4hl#fe zuvafZxrkiYa76+A>rn$U;kGQ~4|ZUht$8bqfW`uXM~|?UzDZ&(ZIpZFp~=E9@%62P zt}w6*3@^v<`xLJW&|)$A-Iy?pb&M+>E+l8&0Wu#_k->&A`E~Rwh9MlS43ad$EOV(M z=tIs$dk)7^3ySWRrn2PI+WN~n`(ulcEx*7MibbWHqR+<2>eU&K+Pd{>?KaUI>_n`3 zQqxUU*&Ozj`B%s1^JrA<=5q{3dqA5qiaC51|W0aG#JIC_2R_ZT1a5v|0idyCje8*FOd%3@UK{h)cNh~|T{2|J&FyI#X0&o4=D^{9C>P5k#>%#Jyb-f#; zk-hO`;d&Z{=8j;uk7SR`?KSxW@E*sHf@`ZycF)H{InS&8_QPy2+pyPKtjxs~&$o-X z=Tb;Ro4MGwJz4oj2=ce6L`?aDp8ILI4lV(On|LPxK4u5&WGU?R^6k zKOdFECHjsNP0Xh}=d#le!EvOo)QLai8O$SZm{2xNRa>#bu&}5xDcHr7sg3JsC`d!m zg%RnLdGZ^~&4gpd>}5hpY0qTj98yiQHnr7uTn-hHMSiqU48H=A*N02-{lkw4QC*%P z^IZ;Ep6;CEgN%^?t~H)SEa@6VJC*#;q>*|oWo{VB!Rw1^a_ksr*(QN>9`7Sy6o)oM4t9MTaYzz*@c6(8T_HI1G9{hkNC-oxOuPBPNlLpqz=PsL zl?T)#Fb# z7W{rHxGps()m}|F0HiG(EgUDh7MugkgHAwYZdK2*Bp4*8IH%-F2bv`MBR9GavZNql zJx}j}8NPGJ_(3N(@X`-ono!;(0wEf4cNqlA$p?g%a#^m9r?0qh2Ts83CO(29%cMTn zB)z~qMuS^t+bX$0Jw{-V0^^IbusBXVtwYTt;84vc=7x5Or6fOKo;HJD<@wXS z+P-3?*k{Z&+gx+sCdix#dg~QwdvY~d+<|?!tV8cOf34J8uGj|S{^P3-B8#x5GO_oV zOT`^dz~!UFB06@P2~Tmi`}p%w5<@BdRT1z|VLK~)X%9QQ7iZ2fQ3`l zE~cJD=5-RGpmF;!0(Y|bSPjwyqd&d#42RR0@<)o$98$}kpN38*((Jc3sZ*j_H=#@z z{G+qR&+k2ZZJ8=^Y`qj3IX*O-aK6`t0N%Ti@B6nVdI)boX4$ngCd{(a;#rKgxmGVU zbY|=~$jJBGr#qAhsJ9ta;bm_a*ex)nJvS7qwsIL3l-bNPEkxNiUci#?omJQ`$%p1> zfNkW%0%Xi)Ilff37j9vBX`E}BX#TXWRu!l*YfCZK-F(#93sT9x>LYVTNr zfT&?tAkKsMvpFZMCr#0fzr=pgI_aY7{S@m4eqmc9o`9iHtLbufYmEZ5V<6(Nz`H#t z6p08V&UZ1YJ{9iI5x3<8f>I@B81u+!CGEa@kdFfUB-#PxW(5S~vV3T437W!TT|N7K z&&%M~yO)Ad7{_zR?-agFsEUo7#>TG=brD28>-YqMg9#>lSo4JT^$gP!>T}PEhaKMU zBMlkGM#`VV=?Z;9QxRU+7qWR5)`luI38AbBUbaF^+euFT{oP{tY`tPU{l(Vzq~#$$ z1FlxJk=S{D=VGcUmvu=CJjaeK^Q1bTtNhQMnfDe-#>esps)IyfLS)^lY0nCL8T8YF zk~>`wO%H(ZYjvGeLIDxFIWjXg?<6}7&4wDnc~b9g%*EY|d?fUSw5967Mo|7Tq+?iL zCCx@*`Tdo$I)RF!u29sk1J?ErT-15;Su?;KG7lnY`v)8ooo_4#YXg2zWT;Wh+)d#v z67|h_8^bv|ff)1N#T6xua+)j~>T~t1|COWjm+AL%k)*g~q(Dq>%Y)?|!(>7%K zgLaxMbQtv&+@u)wDlFp>WGe9%p6KH`2^jTHR@&3n1^R<}nk-Zpt`*$07_KTT!x06) zzoAWxpT8~rS#lfp>$iSN6B44RU?SjK(D^WHZ(4^WQs$(jo6@d7W1S}8kS0z0Y9KG{ zpUEim4IPEd#|53TIgS>+IgSy3MWi@4q&be^)aX{Z=UH69)alIeS4eb|t2>#03yE}a z|5V>m{%4>4MqaZs|NWqtNz&Xw`i&I-3(b?Ww*3AHGA|Z!g(BcXfFi2f za@$!m=Xbymi}CQON(=(I^Mo(N*`nvr!3y^^KS>>ARMK+;4c3oLaXis8Tlg-e)rID2bGB$z@lV?T9#M-Vs^E9)HMj`nl=SH)%Mse52x1 zTX2q4+RA+;k?L0VA-vWsCnabB1|!Km*ydTkNQS$Y1^GLAt0~cOnER7@QQJWL2?8-WsCi- zmmq{P_=e>+!~vH-4PDv|t3WJ{SV$!%tXNi~5DR3(mR!;Z8@Wja)}Ga@*qW!1pUSet zc}6{K5(_0#gGcE~+|IK$?X$~5MpKGt$ek_B@4wZg4ld3CefSMRla9!Cr@zVg@Q;AQyT5UXHyM9 z1{9)aJfI+PtWDq!g|gS|0FgOgy*}E)ASXZD&7|i!&(Euyc`Oj~^#kk!?Cq8j=kQ(D zVT_n^{4d-RJVV@7u2F|^;*N+sr|Kq#h-ch|LEAMkfV&f`eozX;Z!<>Um}^Q1-gyJE zdQd1Lpnyu8P7>j+M_f*XklT{fD&$&5rs=0vF=70z|| zOYn_Yw%xMDvcR?%Ygu1IntS-dBCV+FxEA*94?p}>mv!aUGD&j^D4bO>{ug zW`(bb(cctJQah-SA77&j%M;8F1;bg~nypxHezvFj3w2j!-}ir}05fKi8rRmV1LLZC zXRrY$rj?qfj@K}>*AcdHRAq>l7;t+~Xvrk6A%N$&6(?4ZsR^zE{nOhqXwDKlWSbC)bVYQeKZb44OsK7L#_11{ zxi@au=|Wc$U;%oOyfp~=zIe1L3| zUcH!YTxXt`B@0MvKX zy;Pjf2>kwgnUVx4pWx!#!;XiynELl<9mzjmoE zi`Z6KG^gnaKP9$V@hLMG>Z0cY)92nX>D>yQkEYc2xu;c}mPaqQnX`YY7K`gX>MO$@61U=eFU$So&Hw(Dh_HXeyul ziH+m@y3Svv;hR^eO_Y1ccn4dSB?p5A#_Wg`2aAny>0eeuNI*f>y!*NLoP|#;$R?;rRJvJD-bl?tL$yf7hF2FP`D`*_J0eg7mGs?koacX4O;Y|=y#RpM;iu(ETlOSw*jshf!|M}h(d5D zzr1Pa-T$NA-Tt^W?s1(CeM*3k*vEFEyburSu#h}a6qN#cb0cVVk#9nVTL)vgJ@#PI zWBu-1pkCC$;DHoowG6(8___l4ulFE&9n^f(?C2SAv2coT3?ZC(_X25y61rz;Gdi5% zL{L*nK|EBZBJ!)lIB4H)E}2;0c1fe@&~?toEcVVl-f5VS-Chj(P~clnUr!iDo^V(u zX2pv#b~ykITwy-}+E;)$4SOHSHVe0{vG$Q(9V!&WHp1Tj;MAel^W5{*fDuO?qs}F7 z1fwu4MBT<&bQ96H0c}M4Ri{B~+fC2EY3FTz`TyiYZh!fZyHdMC|J&9Z1WGL8xL`?0 zNXU?RqgE1en?O=+nfRD0V|9J&VJXq9M z)|cKVWL(NjsyDnlfoJb-LTkGcT<0>1)=m*hvrRjt@gz^B(Vl7+Uk#BHlLO0j^|gqA z&+bQs&;AdfB)5Ua_od5<208A9lSW^vTeNn%^~dprzj2E!)j@9Zqf(QqQ?12!;_D9%lFFA4P~GBhJK!?YSzGn^9ZC93F9g z-}CGeQp9%2+e3`;`+fbQ)#7|l-&AM!kE)}2`^Fz*>i=G|skssE%Y#@}bxZ;LhT(&IjrhiZCTR!~mJIB4m3Xr^NoX?XTs z9~OSDK-f@IxO4oe*{Ukc;QehNTeP|7ph#3WEWBQ8 zJ9~1Hn~ps%c~=JfuSXCbw3HG@`Bc`^o%gna-CqSkqL@dVlXlablmSE?Mw3M~I$CM1*GYIYo`)N7~I57Gij z^&CRhvvE|tA8{?Ae*8cQcBm1I9f4s$&PaBLp*jMIhaN#i;yNW!{_4vT>KOe<8sn-N@AIV;)MxgD-S;f2v1N?RrA9YR+og5Xu+l^)mO z?Sn7Zuh&r)y&$vp&S{lN#FUy#nOm3vagoZ?6j>GgY`Cc_%{fA*&AqAF6}vex^?cCD zb-~}6e&zr29wHI13aC0jdxVdwP%eYgH%edVE9Dk?-Hfw!di3W?IS@RxX7!(i`Zq7_5ng+^ z*nPqrZ607Y=bVrX=Pp^MXkmbW8$0T4t(Zz9?U7NhK6NF6uPB-|lpUs9Nq!o!I&HqJ z@A#Z$$UDw=wo#@z&Jx)>(t-1^8*>HZlcb-ImuFk-!>o;?!q^6^5?H13&UqLoL(Ogq zs{AxstbO}X`#nUE&ronC<%(Dd6Z63>GAh?KvN=f88hlX_4&nI4I~Z8Mc2IxCZ#_+m z-Gy5M?y5|4+<5UI*=10*;H^Ptll*m zy5nf@l;ygy@-oJhLffqg)*1~{TV8UCcemew%mFA~aXEXW9E|*IlBnBC^YL2W^h)O= zVpfdoa4cXo5iWQ0R7^Hhmj29{iXnW^oJy7?lbBr>i5V^BBR#&~OM9YjjZfq<$o(Z` z5FSNyWJ<=XPUxcA%J|V`wVNFWo_0S#k(NqR_CqS=K`*UN{4R}nDGVf>As!JQ!1L)E zqXM7Vo+U|I9>z0CoKTEox-2I8l{I>p~U9MROX!B$9J?tr;Y~5zf*p{jY}&Y z{Wyw8c_P2Yd!A6_^Fw3O&0j&jGrfz6>^^5fzO9IBI@FBXR9g~Xhi?7lIQTMF7qUFU zRN}69`LmHs4r1fryLW4ABLfS^fsrX3_C66bgZh}MzaK>LT3EA`9#0$5Y(($bnWBL48255 z%MnQH8@^FMAp@JReRN4Z+#=oHxJ`8&8bQ0s(AO!>s~#=ZCaNaQ!{@84_f)|qXzgp? z?_$KRybi0Ds~8K&BuMhEcogYx@C6b_0n>S+$)qBc{jB;M^W5Ypb7uTfnZ#P^D=2VCWkMQJ&!VwHXHWNdOhOt7hsWS<7w z0~6mHsAgk@nbq!p4t^Tu`Ia?egL9$Z^4_4n8!02Q!K_xj_@ypuje55$s3GcY92We8 zlMkm^+u}l;=l>(^t=r<@lC|Fif?IHRcMb0D?iSqLJ;54i+}(n^ySux)yIUYY;B=mu z*>kRa_B`)?uk!)=kM32yYTZ?L{mMN)!W+iiWF0cK12bmSxk-`Ey0{{;o{inKM&InF ziw1s~4=e6_!)P(#9vsT)9?L0|hrF<_>S4gyY{UvfUR2+t3Wo}XhDw>ZwsxH+E$dDN z%0315ucfD4Iz(JkP>;(xcYBbIeR$aY#yE9*$VA*H6ef%^U+IOilPdQzM(G`qI2T|# z9~~2;sADpZElV#uxHwb?J+cxt4i`P#QcJf+k=GeTcu=xdJP1*YP>YOfU8_mC_io3q zKtM|B;bOYaSDy2}O8&{Jl7UKKqy88tYl_i}o$ylAa7L`WJxXDtKTYdg*&zdP>S2X( zp@tRe&~(_pjLK2H%a2)kcd;JA%^UVGZzsX1cFeDQPch#9qyB4+{|Rgk&f@bg$hf_b@WzZ$iuR%K&8+6%F9^}Q4Oxg%)^=q@ zOl)HI>*GX8!xuPe?pW9{uq9f74aw8K33yDxLfB#%&t*3n8Ixy-GmBbH7?$l}3LN7k z+QGX91Ue6FnUc@zQ%uQ}RwfuON?KT+!SC~Fl#fr8#09qbCy@0?-o3?J0akAvPF|k1B=zMVDAb=ATXJN7U zteCr-7N3@$rlCAOOyr-7W(WIKO5Ci5RW~5kzle;m$JE%wz{uc}FowZ03&`Mm&05U@ zGWdRkbYq$r=!Q%%G}#8NBZ0^J>v3{)<)=CW`UL=g`}|`0``_pfK*QG3%hcpQOhN_v zQ^}qId8lw~;i+Ukb6BYb0mWtlv@f_#C^)%OdrXXGF54QsD=J)VFLssJT5)y%%s`Ra zMBBbcW^LkvQMCkx9^E@ky0cvQUiv<6xVNz0y?|EmfED-CGj=}iLNWT??nYn=c;AF$ zc6m9vec~-P&|(MkEFKLB81>n&-Zxa@2jpdt53^(!08BrQ2`3HE$!J<>5twR?-eQe8 zC2=Puf`+6J=*l$J>v(%+`)dKF^fIht+({3hL8*E)BFyMIHjM6Yt0Z(9?Hd3P;YoBr zzddJ{)u+^ma8v09Vpa7#WbC#TSasb91P?8J!qHL16D#+)zH!N|)n{tA6s%kv zOxUhP#I)tVJA~tYxp2eD67Q>tF|$0_pCFlcIlmRx;owH-7+4k(jg_1ZNIMg?+@zdn z5^u;9XDe*b60gH&fljA3G$TWC$ELAoF~&QH7*`GNnJyP1;;^zn-Yt~T&8FSNE3h$E zZla>P=K!YC9^S}erySbj1z}w&xUUb>D#TF4vBCwV&f_3B^0WvqpfGQ)yxj+4O!+l@ zFk>a*roDL#uXK`9kWb@z%1ZGBXLZ^fgn`68Fy!v$dXp^}R}vlH0A#r+G1TzEh2!cb zt&pS#&`ll(xK&f3GD$|#Pg?MVI;v6Z`AgTc=gs6SOmmVsbG=0jQ7=yWYTN8IvU+6i zLF&dMP^vB8mcz5UpFQXPlCmB3HN^Z?1ndW+)t2I|JSDsVK<9SlXOP#59q&~9Y zMlv1Q_JHWPgS@S%DWC-0-HuSsdx@=TeOmP@Z)qQck^li4fufBt_r&W_9DUykAAgYn z0)n{6Sfi|t7iZzPviikNj2DmnN9SnccJJvgFP(Q#4El6X;FbT#JXI;FhvKG& zWlhCM>uqqeo8=X=F_bN*xc^M-03EBSMs!&XZPl6zSl&jKab+d+X}A?lr1xNN4@8d` zPIA!Mz3nolP5RdYka~TNUQ+!;i*dRjR4R&dwc(g`cCC`s>wxbitNeD7<|A?bODaTU zYlGl9fg+SGq>JW6#|Qpf#jGoZ_+1g{grA^$d^}zZDyK~8wlN6CJ8ZifB_iV}=5jEz zE(oSF34QF|alDU~#wxqZK$5TvjPIGzHIN2lEjU0LKIaVU_`o*+Dj+|DxBFA8pr#P_ zP*(FzI9h_KkpHY6mycOCt|oK4Wqw(U4js(*tDcG*pY@8#nN58N%RnboBmZT0M z1@A^Bf0AjZ%h865;T`NM(1VBsUy4R z&O%r03d#yf)sHZBMopoZ(x7@>V{EKh0`!nK&Y%@I=8PzuCG^S{+X~ z3+NWxClsqZlGT2HiHDarR2ek@$7dVjYg)^p>eh(vZ25^&;fYN8)ClM7?C_HpmSJy) zA%W&N+|Y-mmFIewF=Akgsz-pTFH`BPq)lK$M{a}J6I_p~ZLQfH9QJ3gd{09OuRP;# z1c;>^n@+F?^_+VYF((Kl2J;qmsz1+u7P z)gFv`11g+;i{3*l^}2ZGxsr5vG_hzIX=Xw4nrYH3kt$g9AffCHjB+$=B)Av&_#_?{ zTv=1Y-=O{Et%v|-v+h3*hOg6h(PJ;_r#IpayQ%oue5yGuQCacxk(y-ssv+Jf46(tUyqV<{sQ$k`ibq#AaP=6^u2weeZg*7 z=K_A6l`mHrSAnEK)2QL4SSAaAH*IVEjSzh5KAs`hvsIYUGx3-C`|?~=dmr@fc?Y$W z{`33r|2~?`?43YZ^#4yZS+K9zbdx!)?>)-z_^Nm|oF4lIb3IAmTRn|| z${)GL+YB^aVtWGMpz2tMjVAkWfCL0aBYno}kJq2Z2u3wchm&Xtv7`^4Q?Z~cgHLY7 z&txHQ^i6B~t62~{MyquzAHj1W1Y~7D(^|Xzob4<-m`k_S*C{Jtny2g{v@lhDjU#Rn zcx!nWY$We{)|pE>s@+J)#xX4SIu&lr*5fcwsiGy_BJW6wkQbFf^>Q>~2wba|LK_xI z1hWfgnim0+A2#qX%wxdJh31#8gcKn-%`cP94k0-m3w?C^<$oS3IyBViP9!4LE6c=t zI(ToF+a=@mhCQi>r^t&n)U(wk;C?LD%LTjf*o<+Qe)v; z+}I-ctf=JR+i?fTIauk}Y?vTP060)AI=_qPhpAERI$Z!6 zOHOOy_g*$+`GZy+*VoYiOO+C~zLo4G`B+B@?0x|P0U>OLLq}9$Kp{;?E_au=I~FWX ziOK7Hu+ZIr@)>h;n#I9PS}H$NUDEjcEjobDq1(dn#|tW7w^?DE=9CLmi>yMmp(Mbz zj?wV!uW~))s-K%2=#V~uhF<>jKb`1*JfwfRaQ=xNja1T+0TV)d6Q6Kxl4EVNbOVP$ zS3do6l1tm8j-+*U#@#>N3b$uB(={3p6yPT)K*LRHEh#hIopHvo#pOJCw6q5G9lzX? z%2IPiak08I&`?_fwooX^kf=lymX+dmI90PZ041CPILxA2`lak@xpKqBXX!wm$fs%r z4!mve_E3mwogvv9e#GhmKs@K9yAx)RO}qh&n9tohfM2QmF7r^#Y-BvF)w_pjSk-5$ zGk`sMBfKYpPE&)f5Wd+QFO}ow=jmdLuW{_I;YWqet;Rhi8n7&zE1Bs!>;=70ST+%#LPHr=?VT=9PC7b#eZBoYZW}H20)xN6onf%k z*|5+pCwe6dI7r+c54Kpi23JL6vrEeRFtqFqDaT>-$L?9?ddL6;&bZZ8x85rVf(%RR zJ{&32_K4g@E+Olgi#IS8*4ga!N{+~WJPi(2r6Dk8)S876-`9fh78*YhKA+b@K83;8uIh^Qpk zJ#E}r=>3i~uYpbB9l3O=!f+zC_C6t0hTYnv@5}Tf z_bE_uB$>R*6JWUk6E~+o7@4!Tc?i4z(H4oTRs3X$=8zf-Lr`}x#SmKs0GGm^apeqy z3J9mdvdgvL43X+n8^^jd$cV!>JIN9`!T%GljPKOqwxE+6_}h4;`j3~1i@npo>LmZ1 zBm*I1+(Gu|p{_Z4J#lI4kJJgZpWrQt<>t^8EoEqfg$LBpbc;sv@g-SKOq5~mnggjq z=>mu<=}5pHhMAuNzkUCfFyuXlM%E%F!Zj2>cQxMr=m{#5Y+Yn}etW+=`ud^$X~Mq> z|7p?x3h!ytpAhe<27bW8;HIWNNyNVmk6d$XcDOccpl`N+*VNL?(h#)r!2HDE#AKzr zHr5n%Oa;V-;q99pn4OsIs|_wlE{HzRN~)myO}9p)_}vwqs^1KK%~5c`@Lb*T6R5%g zC_*RjC(<*Hp7pC7wu!Zh-AiLC417>4LaOr^VE z?z*B0rf~;3K$+08Czz>{W_XnWbS#?6+5>A3nSrTl5GuwIox`xCIXDHl23?vGP?@ui z%|wym$7&*uhSs|HleXBg0)M$k&LS%Y1N#9!>U{3^&%ygc;x!hMym?)P3Fa=0SzZ$| z(PBe!-rup``AeVx_l_i|qP>gs6YTV-?$W>elGt-~m~F}Ok;GrQ4a>;Jp+olAMY2AU z4(eBq%ORY=S7brd((A#YHtFtOrtc1b7%`NtRRN}zZ|k%b?hjMK<&LHR{q@LTu;r;r zx;XAQzPO77R^J=RS@bJ$$Tf4Qbkiz=6p};|qeUCkZXaz?V_MzRG06sa@n5Ma4=dQ7 zlvY6>+YZcDy`pJDm}gEVS|s-4v&Nj#h^n}qKh~M-0y2!vvDY)K9U5QP6P%~ZdDaDr zc52_bnpDQaL-1;n!>7;HqQ@L{_%jj=^*j;A_1e6T%t-U->^)U^=7QV2?aT=1Ry-lH z*o#S#7-Wz)S&MRiEi6|cne%Auz)y_KXPmhx@XsBr^G01fNYur-6!O>wfwg`)8aS}j z?@@f4)b@&jQBaT!A8@lkCM_PSZGY8(R-fy0A;Y|ThwM4?dLmDBNBi}Q+%C16WC{#Y-)L5Z}42gLjZr8G{>`hW?_jCk>Av0UE$xDQZ902sJe4311dVL`C)y7lbZrhvG+ zv9?VS{|IS>rah-syvTz1xxmW&ms0F|bO8ZAcs55)OM&)pX1-#v`319~*ixybvf=Ro z16p4#V6EzYa-HDvdKanWVQ1jemBZgl8FL)7tL0ysp61rp(tPCb z{V@nl;TyJeyu)m7bt2cR<-F*X&`#1`DbiaCKF?t{rpOoXbN+^XQj|Da1>;AYZAgpu zcF_x_;cr5IAmCe2?&?i=VJ`_ll9Y*~r*J&FHUgH(tU>@cVCY(jbB?ZZ8>s7Z6n86k z3(%S(3K_QfALBlq7Mw(no%@7!1n^Ne^0)YarUq)+{7q4OK9XVsa8W#jjTA=C_fWhs z{KE7&$*avj$1FoAPsQG(>j_Cvy%eho4k%Y^kk_Tgb+|BpD&@V!eYhkMp zA3iYrZPDU?l`lB|@zCi=`DeZWw-i~6^^KiHfKDk4u9rIjE3Q|}*QC-E4F4g|ii#!4 zV#?A}3lmCZmopqy+XAMx0xLE(L&!HIFuKbz)f&7d8Iz%7tSdLLG}0QWO*=qO`a)L$LXzp5S{iE&)n*lReAuhW zC`c_38-T=9tU=B$;RG~+#$puIGP(`XDGh7RHEz%mOE`n8fmJnP1D5@&8A46Ky5)*p zJRZ&|XH0{#=1^N22E$|^ZMzq`V^Sd9Rar9t5q+sfVZi-Kb71QH3K9>U16j#2{PB1I z8NJJ(3b<7*F`(C8v`gTnx;`Y2?#qO}@9p9oO=%HaQ5>KfjqVPw)8k?9Sr%}zdE1z| zN-#mV_+#z&g&t32PMyt@ONep$%mtgC^ju92#^UQfy=<|i*zXFZjbr9}L}L!*0TLlx zt0>dCRtfDb6KijHoc@{%4F&u;3%LQJ%rJJqC#N4mRd7VCE zr!R-)TcQ-j=omI=wA+6ts2v@zSWJ$M!j7u;!F#kqCIjSCe-L!mA_CRx_^itZ6JKEn~G_1~z< zxz5-~D1yqXH_d|Z0)&$)g8SO7X7Yp_pnO+z2NrSp>W|rt>7~A^Oe`C_F4XI>o=A0= zP}Q96?Oa2SMa)|2cm;^>N~rYg@1z!)&q*3e|laI zqo$bh#&A5s^ZSQHUI*_20xZqk;`5x_KGup__t>&_@N(L45NgRVdicA(Fy!sO%u7v>aZCucwMyu&8)UlkVxNJ(T$^ym{x8mne+|%|V>b`RZdKp?SVJ)irycjmFEKXd9m&JC zEhadM2%QTqKv_dItRu`_*@hb5n>W&KE8~Y>g48v7kT_@Mu|#fvR^kdaiucDg@}IwW zz`O}~$lQ_=>gQN^KYs=GKmT6Qc;80dW zx1Z4`)bTP*oMTI$XtVLH;Re$brQ3p9&Zl|KWlJm!08Uhnm;yv8+jcGPV zP}akd$cOIoi7s~$h*9Cl?%CPliY0`<4Wxr{e-*yURT0FLK2|#>4X<%h5&)WVQ<>(1 z_+m8aq`8z1Y{8Rx1Zg71{7}qm3(;XH-yEywU#XYsd>&)nu~jTmuAvWLzXaoHT!rd; z#6(o(lA5+N&y@P#=HJ*5Ml*CcdlKHpMft$mZ3Vx4oZmkZa%bg|KKQ&oYACA`m7~c8 zTjgYND}H)gg`}>=!rpX+Ohdpyz!@4~99p<74h*jQs(Zr$`}TeI*XLi~e$hN1a})gN z)=({1Q4|RtdFLBtFr$L9IE1@|<$NRjBUCCp4h2X-)pC>n|A~j|pNZ$+LZtxTKS_?N zUJ(pXAJcdO8(LqGXk^)=j^>a~5zoRj5@ezbcexu7nuM>4!GVFS#p?v^74>$^^`=B{ zB{xShB8M}|^>*u<`pAFP`EuFT!g_V}&F=+Vkk8L?n-;3mZ5tP=({-B%sx#YPc)pe` zQLyI}WxoauWR^gX!I$Ba0S`|uhy`Vk;DW@0NK^VTucRU^_G;d~+Sr0XQ&bsD8IG|! zx^yis&Bkipq1mz82DD$-2|qrZX|8HYAt)nVV><0$>C<>vX4 z!&+|yI~;Ya9n)NZ^4N`LA0^yKn%jn^+Uiw%RX@7G3Q;qgNZ@tDb_i#H)CR)WOGeZ~ zlS-Ml8s`SlBHS7wc_#9DGGjMF8!+(ws4=ZXyEsUIml2vUZ}yK^f3+#K!C`b(xkGS#Q;L;&>6Uv=?=f>e-BPgyzAWvxwIW-{5*w zUwEi)%ps6=VG}%;kyK*2bTX-%H0I@jw{{k7PQD{6G0ybc%VafuY^FWHe?2qu_#*{x zW+6tT-GZ>VV6>S>5hH4OA>hP;{SVNx<7}o$vwjmA`zIs>L}t=g4JPLwDV0(w%1mWT z&?mk%+c5;#`)cS31&LY^=vrewBj3@(pYH7fi>9Vu-yEmV(X4i=Jq3kIreF!N>Q_mT zBeM=81zh{VKJx9B6W%tmv;PWFe$lC?_~zWbCRq7Gs-DvLBU%|bVs_|j_ejS_(tV9> z=#;b$wY;0%@21b*58vf1x`BVFmKYuTzV{z5m-ED4?v-#{ux2U^mMJ7gBagqu75i$k z9`Ci^3ZcCi6}C*U2-nY5DrIMRh|r{D;+Wl1r8p3QFq(T1x&6um#Iy;z*6PxV=yc;) z%Fm^foQEz}Ci7Zbg*oiThb}6z?A9}UVW_UpoN~h>#hux_;W$ty39xyEJ9&-Wi$9h2 zswokR#cI^gH|Y2F9c+^~|lVsiq2F|41s1Kw+HVj;*4an?z2;V*(;nf|o>!Z|~1qW^R+<~{jVAT>vR`E{omDLG)?he!NX%tqn%%gFmQ-fsBNQMs}M zp~3;NYwliMlgfynA&b}`rc?7(Uqyb8ael~W`CfhP;JcC^hl~kth^9w;<4<#X&dFv= zn+2{{xnz7pXg;Ig?0oJS|744gUCD9FAer(T1SkB@Maln-Okw#K2{|R~4+(j&%U|$Q zp<20&SU>$LmSPZ5rJ9mb4VCshM#ET)tcy!ZkBP8STa{a#H@$6ztNli)I*|ovH~6aa zvqVD&$EW#y3J?Yvq*4qwUphdk;?c<*(DmNp1}=#H=CEhZG1+<(j+?yRd_IWI;pe(% z_3@Uu>Vw^r7DgQ%ZBRg(Fv$P2HzJHv#@G+7S~p)y2XgM#hMK~RDJLC(*vPb+>b2!Y zS`&X+e!xMNAMqpvIypLAE%qATiP`bmU{l&LR=Oz+V$8en?cPI@{oJer>ZAu6?dvF@ z?Gxz#bxhOQi%EmH=Zn78tvC}bpVXx06B0<%X?_XKt@`>MQx$Ju4CMGZ0@cH^fqS6x z*QYg}5!50F!2!!4kgQQ1;L75Q*3jBC^;8&uI9GH;wl6t0^XBsq6Jyj@M&9FlzV-)N zgLupK9&!T+;&!{P=uOuE;F^Q#x{#<)E~SNw2Uw$}4(u(T+x$!)tW!rF4qC*`q}6(b zt3_g=*+sdH)kXzW#=uD5g#2=~+w8RoPShthl`=AGid=xL8oQ=YhYAw=nRi$U8A^Tb z;j&@cqvTzBpLPgAlto41rU`^gZ=p=e%p!&>R;dje$@xM3xN6adX`XZ}!`dhfHi*zwPS$hkt@Yd5zTRs{YR+ymj4O)E*UFnhfZx<+Y-tZA{voxj>}O6R-7Ftsgrnhu{4C^t`Zig zvRWQ6d#|@5GKb2_53zohu5N2t{y44UP=}8Ib-w_4rIG^?_*+6Xrl_GQ{RIsT;{2y? z`bDdQW?oy(Z+F@sxiJJkRU4i$=f~k1DWa#A4k4^X-mJW6;YCjhR?*?tE=-i|t=)$u zJ2#~|;`Mu+MF<2Y0PwVu{K2vlT2;s#Bqr%S;(Ys`accY0EN{!@t|0yO?$;RTYlW`z zrJ9gSu9`SkL)TTjU3tC)Zk~)?LVgpOXX97}h#?nW!5`m1l?5n`tPn@9?jqJ-U_%Fv z0qwu^)>icElg2vgVZ5eS-sSp_B^^h`VpefBbbHPZ0Tfs~V4lZfWiICD^qB zV+Fm6T;V%h!X)<046J)leT5-VT%dfZw`jGiGEv}!vb4f zihJigKR3+FhPJq?w96`C$fB1fAExv^m*+-c&OU9g+~KDa7VHCz=jvjN}x zf0lNLKOWW1VgyJXLEIM!)sy)j?n~>!^PuWt+h+DTcZM;K$21C%)a{WqVz!~2n{fLu z=xua{6)<~{J>jjYz$XtWQq&BYx&`!S_3DSwchFT+A}1|}DNjd@o_mDxLFyP0Ccj?v zW_{v;V0iv0{xm8>IdGk_e-jDv0O!= zQdfoMYC7$R;xvl}bPa?k6AVhnUi4n7_NlfTlQkm|$^guz<=2BKM2(Vy-lC2m=4o@6 zkkO_o$?h?QyS`*HhMQy$P8?uBO#lOLw(MR{r@qp1~NY2OMxiz?A=5N36 zva&|r?}AYJlnavCTfgInMV6wPQ{6lmsAB$-c*zv%K}WkcFj;r1&GXG;R~iEesQ%}r zHecUj>EJdgq#Z%9N>a*Z0`r9T;2&p-+Fm!qa$h|;Y;|VjLQV$qI^Qx!-p8am-Sb3G za$~Dn)VAmT(S&DA7?d;vDV-00>-44kU$kWYN!J2Z*!~Iemt>OPI8|1}__B&M{lO5u z3`}@{WM0^|;f##ce`W+;o&xRS#~*-y#fENc%Y8`J+w_~sYS!G_ra)=YBj9`D`aiv^ zDKGy}I_s%BAf@w;Dv0V=-fhnBbKXbE?{nFQ$?tR0r{R}CbSy#L_`K6MM@O9Gl?0h& zOSh)gOBV@BNfUI)Nf=4$AXdLy5@M2k5b99H#@M zlbpR3CU2Vqat#$&@};;#uf795CBkNH%D(sQERQLRpb7 z8|qDNzni5y2EMuUqbw77WTqE}2dBJqz{vGTY#IHMpJVUPgB|t4-%zY}DNMDSYF4hc znXZq_RVA@%&TFUXh>7B)<}kZY_o>sIdpO|)VIH|qDaAAGmKNlvX-Dq$6hPI6bwL%j z*_qi=P-|hWLA`^Xz_Rdz%Tj92_Xuh$Q>oVI^v23=%qF(0@8YEBjzhChkyBT> zc9lX1W@{XuZFOZ3u~pcPS>t`fV4{UJEh*krK5ZDMNmWgc9hv!WlCTygm}~D4o0FmA zUe!ee8G8GwFq7Ub=RFRIQUvwaq)sHQqz)`z7fjZi!Ryyfj+;d*uGQ2Tsvi0pQ5TQ$ zVB|cH31CeReCggPfjKe2GPYM;tSo z!`Y3tJ@wAgGU7PXR&G$F(IcO4w&X_3Ycg<1lL*Dub}>!I$oaxHGIkKLBRJq8-q-Ey zAgfP-9=6Z?S$= zlqOABTLfmU?ian4R;q--v}}m`Jgs_~@T3Ikb-4(W798!?pdsP2+2YtF0n)lLvY(LR zbvE?A1j(}tnA%PJkybFB0UFMDOGP#6MpI+w(qSDzOJr^jRbbx8RWj!^)RyL^ZY}*; zeY7ZT!oWv1MAH@SQiRGVpyKc6Q#MuVT|!`aS{oKdDFspPBS>SD9f+RbL8(N3pd9=`6&l%4e88s(Iv8Y<1ij_7w-BB2iWff?Ki8#?y@67r!G_F zZW(udw~Lv!ziI!zD0Pev4|7Zb(*Y!H8Cb5SkEBWU(;5{n7?)Q2nGlrKtBSD^Ds~V4 z#1%SP%a$bh8X{KTQF;JXvWGaCby&}=O8s*JQYo$G`Cag2Cvnu5?v0ib zI{5u4sjlm#c$l65;>t0|UFrDq>g|wi+Ui*F?<$qRWAdQxW z08c44__P3Pg++n}p3a^6S^O-VhjLdoNIPZEp~{tnv`PG_e`ik80$E($I*Qs_7=5S& zm7cz@P$oY#b!-W<3-$1{YNu*lpEJGORPfy^KT*jpFmcH{y|<7rA*jdPpRe$=p{#H2y~lHz7Pmi~_kToc`8TLG-uB z{f{E$e=RM?RKHZG5r6~(r(mIR5u@7BXCoaHC1<9-Wg_3Xsl-q|Ue)43eWwje6H9)A zdXm6as7eeuS=OKAdd!;ol{L5K{q61f4g7l~w?ty!{_=sxaLrK7l%XS@!!lk2n3JaL zgdRG)SRx4vEQTtYV#eU7B({W_xHL5co#pxJNFXHm7`$oTX}h}^5gi9C*p%EWRlPoi zK3yD@9g{51f(oDr;7rXAP5XH#*mbs*tTHwc-&I7*gu@PVl|UxIYa#NRYuaWT^6f7X zj%yJC&t4|i6o?k{8J%duL&io%2rM&vfqQ+|HF`!rdhL(IXMGK>C|}zez6kJpz72Zj zvKCJibbT^s zQUy@DB8%tREe-k;M1u1XfS0bor|0Ex_iaKSw&R{k&C41o)Vrn=$VP2`Jl;&69g|mL z?zq}V_xgOMnS0KsO)m+%?Yr-l(vlSJDV)rjBg-#_b_Z9lfX1{=$wST|lmGC+8oM<% zcl{OM2@qRgnu(ghnvt1(k3M7v8^`tok0E3hw%)~?mS(hAlxOpKKEC7{9s|t+7Xmo) zAInr?E%V34d->>-nzK!S6U!uY`3xHDOio%c@y?U#hd@L6^Ytw|zVir28$hCuss&>s z5+uZiA9lRCdA+&E++a+=Ro`5F_&^_tRDNQIPze5&Q3@Y(aO8nfDVa!xxm>oPxPC#) z7`43ehVgb7%4IlJV!vjtYATD1^bK~!r0AQPK9_dEucPuSKh}ABg$YXLiLaU6P|0Lob2-J-a; z%I>919xwu+TBOH{5Bni@c5+7G`_QoXqK`FFtC;JVpgw=y3p;`|ycHiqQXCfVR&J}-a-uxdQ_tJ)L zh9dTMe;5-WV7c=@J)FTxax!2_XngLkSea~HwX5~e+Qp)QcJV|(7(W`AfJsv)$fSGY zOoVUAZ^4y8K{>YXq{kYfk8;W}a9g{Z?pHiV>tmi*Um2@Dta8pP%_%L_RPA+tAT}3N zArAKW*v6zv^;tRc5WmL;p2CP?oU<0+ndNx9Y(&Tfkwnx%2sxMsF7)F_JGO!cs<0!?>zG6SF>kU%d(BCg5@pa_MGC+522}5(so=3qFw(d2C(@b& zoVIdAo(PhJBl1eCv&znZMp3s|G|zKGbA)3iA)(R=j{NM{++VOIA&V%_8ErwZLwbYX z`D2O{R5`6rp_X1rCxO|9(q=a@BNP+tLp0_H2Y=BUHqZNtBtU0_`?t6D|2RJQ-_J%G z1UJ)gGIVhG*DCl9ZBGN$1LW+H2E#j{50UF3)q;{>#OXFDh+@zm!TfW=41Pc}w%HpR zMpr|9Zokq&Q)nN^OSYXUC7Y#LP%nQdUfgW>Sszl-f#khB+3x!y>1G~nuqJTpedT+_ zaW}!S<-@x5Sj+hBX}s=(Vqi2zUKy4`P3{n&6`_ND-KejEop%d>xqK~*t8da5ZtD?- zz}T>3%HF;X&{)2f#??3NE3@^8M5t=mab<7c1aK^04;m`MVY(Nn1_II8ifcSn?AMU1D`5C{ag-n@5C4H4R*sqz+5(j55jU|IX7#L*l_~TVpW-$s*PNhrnAyf2z#U6~2)r-+Z}=%DJhLaTK1`WzNDUUlGBNj|xfMRLf%yaDBhY9l(4_KaCn_z(fQxi9~?F4O2<2uJ)aFjS#&|giGU-= z!T`)|K8UY?ue2VqS5YK19x!)kKEYS|gCnq=KuT6s>hfTBEWf^MP>mL4TM}Ru9PaS3 zPdGTdMrp?qUZz@hM;Wi88s@E_Iu)HRqzS#U9~G^!`vq1bH`5T%tDaHeK;K?gjSxc3 zi@&Mp0f|9lBT-NdPD!PUL`b#%osxzZj*|L3pV$Diiw{=@Eh{h)mZLVnxkhk@qMmv^ z!Wi9(Q#u!EQ?(gig6e)x3Ksm8WLR66GuRMAq@@@CSP?7u8|^wwmqv5=!v#PC{b%jY z(T+o~_peJc53wEojIwKtjJ#`hbuS)VKdANs2LW}ec3c_s%|I3O&5%8`&FDEa{_k_> z{GkJ|NZr<-IK_8FuDL%>YCJK$YVMG7BKKTgKe=(Q6Mv%$RosVu3aEh=wtO8_Ix9U{ zWb-BHWvUa~@@HCYb)Wyj-G+O5$_E`BMIaE4fvXY7LF0H^pyIfT%g z>C^3)c@t5FCV!i2dZS9&PwO7~1>21^7k3v!CueWAb2z))L#41o&H1A${k#XoHA$=R z<}Y398;ht9!2$DZJyt(zo~1~?XjDxHI{LfVuen}&0`D8ik7wM^vfO;3m?^>{iU}55 ze|rr+&M2mA^5j3_8`>5TL{$UTx7_%kv~{K@>bX#C!wKg5_&K71RdTt4(HIdgX082? z5MVV_v=w#_V#{!IEOon;X|cg*2xr(_4 zH{&==@ayHB%B&tLtQA4_S}}FW?AgH~L!al!ggA?(oUMYra6ASZ#>A}yRm=eRSue4I ztUfZh)zJB;4${TFrA+LOFC0AX*I=%QQr)^4i>gTM#7aneT(#jU?%XPS2}vJ+kD+zCz&RX7I-Y0s*omEKie3cuoy1(0K<B}= zY4)77nb<~pcp{}zgO%7)U~ri2JEr7EDQxK)leFh0DmHBI+Y2d|razgya)n z)4W68+qC1!ui<|iZPSlPG2M-@%Q)oE5oge)MJuR`a;cVn7MYFbEIG_69OHyEIVj-L zaUn>yu;Y146q(DkY`YX-P#f~)wiqpFi*QZyUCU}qs=hQ8ca8rVF1lzTl&uk+Pn|Uz zLGH_mJuMYNaC~Du6Y&yY9Bi&bu@Po^yQOWT>_L{Eu$LU6t9qbmDLJMU~#nM;^k zzkoTvGzhlg)f_07>)e>%&URpZ>@e5ckehS4ZEt@fk-RLyI?-5YyOLTlff(d78)#sU zG|+38X~p82*;E4P31gDI^VpRaqRJDj2C+&Jy6 z`bRgdmXj`x0=*n z)V^!$8jk(P`qNFSGWg&xUD;cJguQ~0k*sTO`WYSvG*v7y0vkxaC0w3gVbjut69 znK@mPTZkW5kiA6gAP}NOp=GZ<=$CfyYun4oiMaD2eAgb%1~Sqo8A8-YNfu->h8Z3} z!G}OJQi4qq%)4u4Q6mBZ4vWoL%G-9##<;bIIydIk z6e1|e%AtgLRz?gvC~bHpA|z?TEk16jVmi))uFhwiXx5eu(0KHMUIUr}Id~G0EBo;a zqMY(;OD2W(-OJB@jiwD7c!*;mgjd)=CWZ^_)X5a=sVQhR>Z^E^C}Tx#D?HdtZwF4c zG!PMvi+#f~29feapDSq~`Phn7`g5UK8J!lDE^A4#NkwX0T0RYB3xklBd|9f<=I}To z$I^!&%auF2-hNqh=6JOv#yis2E>8<@ z!YtYAYMzB2tAEWOImIv>--eV3)R{ZtaBHJl6GbiYRAr0xJ8N%1Xt?_#{f)E&vUXa}}Fa|vR6Db2ILle<7h_;m_V4YHq|w2R_nu#29m zQcI(AB=MIb!pX_NNeBoDLus`i1++*%1G(YJGd-Zq@O;21@b*I-Azl+!!Qa1bocBoa zp-sEKekaHZ3cKehA)FiuK~Rf(4ZqH!{tDv>c!de1TTh{c+m(L`q;5{(X83VNS6;5I zSk2DBRoQ)9?<};VRIQaql_25YMknwkEiVO_=!jbikITJ;sK`ngiP7{WaZXBxKu?B7 z8>w%2a#Vy#2E_v49!H5b0dpbhp&PRdXP=I;R|1|iTo%Lj*!?KC3EDuNDQwExi_9sN z2FP1vQ;*s7X^pBhfcgXv^>im`mqGRz@WnT7z0t+#H4jE*Qq1YRR0=(_qA=Jr@%Q#& zI_gVLyt-IbfzkG71g_XFBtNU$p_;W6VowjkC=N>%3tnCl9kGLcev8E6rtT@_Vbs!R zgGj+c!mO12k;9a58k(0JWft{7LRc-su=>H|-nO_^uDI32>(2g)r2FS>IqEbCXSQUS z(WdZJn-bBD|A(}9jFL24*F`%kD{V)*(l#n>+qP}9(zb1@(zb2eR;7Kjy4TwKpjY2> z@A(lUe#IEy7xSHSzIXs?t?CsfZ^`H!-%Ioh!~92i5)2t(nmN&l+anK#c3xjQl-IXp z_Z9(7UnZqu6b#cjEm>7T)%a%YPV=iFi&fK3KQx$S|@$IHCJ6ng`<|7ENGp^=o zSi1L?pZ2cV;5epeH{(iD_pnBEsTuxBf+9_Vsa?3^0*p%9;6aVTJNqQN+^tyzHrU`1 z@s+Qpmt=+47$|ya)v)ZLr|~O)!;sP?%7drr(D!ak*0`tdo3Ya^9DPY!NedgylWVI= zI6(7o8xCJOF>?Pn5WOF=c(-gC&J+}n4N`Lhh_S=*%O2v{VELw$07bpJJDMwFT>3f{ zNO$jr^3zf=N#bRWh<`c#__H1-b8FX*hxy|VV!D3l9rt^Ti(-+;W8v2!XVs4jEpZx63kBV#ViJB3UAOr(>7;6Xjl- zjbB450vTFUeE2Br+V)+to4L`H^w7oanW*{F`8UR$-P-8={cwco50uAIze^65^X>0Ge5MblBG|U)R{25cu^>@i*P^hnV~EHpXfupGudmROgUQsO)-nFu_9K#J$YpH zrENn-*Ucx;#0f>aHeDbnRNh6XztM%SUo~)Yn<&wf(z=9Yat)-d^7k;0tgSc~Q% z%0l_NGF1C2^%Fj#+V9wwy927FXp7XUxW*^fkNc?5pXDOwvxv*&^g{3(KmrMTgMktb zHD+;Bcca8dJqfVxOm?nEzr#6+Um3(eHhlGoh851jV`UB0-Z+JKs| zn;1)lFfBnPpqk8>q^q7IL{WM9KT=aW|zqczQ@+GAi4$}(ux#{Cd{;%zF-Mi2!>%_RmV8R0#1h)-R>O0 z(JNs3jgwv(Fx)`ftb*@eV=AI{tU;a>GR{B}z0R)3&IF;ug-W+H#?yI5o_MEZt)K3V zRBNLnRC&eHty^nRNCg98_Z2BlD`k}+t066u;j5uy8WbSEH}T*WyRVr(>4pcUg`;RT zn|+Oi(3$lkeUNp)dWk0c{_ zLx+|@BTUG>Mqw*#>AF(MJz>{GlTmuIYJONn!ub`&a+^qTe!AiPzF*C;ju^Ev|28)g zTUjPoy>eC%4BfEuGRK~dm!GaTl>DksV!R-OfYc~$+K6*NX3U9kc273#;xPu6zW(%r zEklkphbE1QLDbcat*#H$6OPp-T)@+Ktzer@Xop*~p;VLMsJgRns9d4D_nH_Y1Bx(TPTH+%DB}Y7r9+t z?X`MlovYEnqQ+6lK0Y9|ez|CZ&mEA#t@FYp)4pgH66wJGNU&xOS$NP=Y@!O`iB>_R zdsa{iC!Q?i&lRR&Nn-80x{8&zz5!aSh8(%Dpm5}AQGK;zQ!y~Uv*LVF_im%^SfHee za%^3timX*fsD@IwLHKf>irmV)sX_*`D3#Ra&ovtr(5^k}NF#!=mz-}Cxh#n4rcIOM zY%7-ZK6rJC*WNqXW8&3GI4XQ=PTvksajOc?AziwKG^5vm9Qo}6nT>v}&H+nDg*IT= z`0H)j>d_vwnhdF}vW`L1F{2|;6i89N46&rQh|!>!#djxzB{{ctntW+#n~^zWBe5%0 z7FC~7`DFZR;Xm;uJbZd2n(#}zHbnPcB_=_JPU(F(-P9r2H2d!GMu8bV_|L#%zWee; z1+-!#j}IKJ2gD9J=3fxqprW9TI3Of-(|$}ui`np6tja;GLsFDkjvN-*WX1PX1AX?4 zUs*Sj?sdZzmi?Aeu#;1r>%MA#B2KncO?%mTjwV!-PVP zrdA+*3_im`IU96Op`A~W`}E8U#2_q!41k?@qQnD9+G?G()&d=FFTUcc@fbj3=X(E> zkY#VLyr}qz76JQ5w20{c$p!Y`JYOKTbPb=oXk|}^brV{ z%}YRVkW`FqKxV-fR1kZ2CcU2y8woID3pD6BN7t8~sFxZ-ip9O7UUYv#TJ2|sfX0T*@CNyto?7BUoKwoX(cb*Dpk)PxBV$0T#xtW z7#hqQC+YLeH_Ef6TI{f*LUo1~EtUI%9Q`I){3!_)IXen+(E~dJrQ1f5uE4WeF9LY^ zHGUeBlr|yR74=Wy((D0;vgdZ}!aKfG=Q0bv)TkI7<@8Hl_~%bC4655-16_!?1Ve){ zcd`sNA1qV%lUy?U(}WewtxNy%n`&LFc3En`4qKrkS$E7KrN6D0MM0LQ#f{b*iSx~>`TaoPEX^e8UW+VllqG@9m2SFBD zh0f|`UG{D;53&R&$&m{_<0gzI$&n$nQ?}tq7JjE+wkO4u@)X70sQF`IS`)88Y6`Yq zj0wGPr+<~;D@QZ;rE|3we3+0;&|Rtu=U!G~Q4w>rYEN&sqk&LfX80JA$0%)TW`|z> zC9gQmuERbGqanJIA@B&|uLMU@p=UZLDt+7l6)ZjaI(zix&=@U#T?p?Xz5F$+*x5p1 zMgFk60T?D!Ec!W->P?w~d{j}Kc-{pFdUV3+blx)&rnru(sY_39kQSc&cR}qFBAlZ4 zUL-Y!=gDfe_DGp3|E`>06u0kwbGHPy+%yTw)5;hc{S9)4C{Hs47T!~idXqzuQ`7-S z)_HfnRA^~temI#LrxR)D9ve9u*N$E(KjS{pF+ z+h5pgU5>LpKipydq5nwdEBBRxKGA@3)P<0MChyxWJGvoy8U2C*N6fXtzym!a`YHAi zPbsi0G?a*QHk98NE2trIliou}zDEh()*nA*2t>$bz6#ii^L`J^m5D*1#SnxOQdsN$ zPHvYBPfMmF)};ybpfI-W6ACg`s)Bq4uU-6zx=S7kkiQ0KmplS#Gx*0fT-qk(d}m7E zoOZq|FHu)to*96xa+!txKBQ50RG3+@R4B^a+fXCEm*d_berQ>;O#)QOa9c1T3}3`g zbykt`5hio5(Ype9mR52jNQq=S(csjqPEemnc{Cxf?2L6m9M@u~K3rXxZV^-N`0S1* zhSU^j3_W^fgwAJwPh2E5@wg8Ag~8zvCJgQE1k_pi4kj+ST1o%X0#&Y#DwD9itRx9b z78$+L`$~zJW)93xgLJ%VA1xMIZ25j2QkzjAWTuu5Xjfoq!CbK8kWL`nh%L}34m6Q; zGtnxMbA1=e9R(+TbjrJj^tte9iJ9^jm*5dAJFpuQNg-3&0ej@Rn@8YTj$dNI~nBr$9n(A&OM&vkaVh0*sy9|j2#ccy`t5%NfU#0EhM66Z5GH;(6QipFYe~11C*(kJLhF z*Lc{xG4DcEx6+fLDt_ZCilvIg&4~-Yc<;aVUIv@>bJNX!V|_-Xd-jwYgsI@!Y@Px) zZN8TP4n>8Vzb;9Hy3DKcv7$nP>t8)R`l$B_W>y=#>t(P!Lpr!JWVqwU2ota)y+O-` z@vmd6#3^KWIg(sNkgf$@GgunjzlGAsh3?Ea4w9ImfR>qszUdA(-uTml8lYYWDfPK| z3qLR7|Garw|Nm{?zcy`#ocbro2l<^iY26@h!CbGb0%JKyW2z$fn*bycDXA=EA}TJ) zsZ3!xyDkm>J27r~;}0NDcH%-NiBTmf zQ&c7h{Cq(Ia|7Z788_62b~F)?9#sS&W-*LHi*;hVe=1^y{J_(!IH!v*tG~zf8pvRY z&8!th!70g3iT9?rP+ZL!<-BMbx$(yo-DiIhuqOME_=;DMgE4nxdYC z1Z>ktMZ##?_M_1r;J)EZq685KV#G{jE_bbBR}g5awbdP4PZmh9K6GtRzVz+iR)g#{DyQX zAUnWCd`^qs{&8CT*;e@9wf_It&cS~tUVp81g1n{ltjuSEMb>IT@iT{%bR-PrK`f=1 zPzRc2+T{M1E@`*5bA7j-sqrepZCR(U_Rq&yk>HqbAvD^I*PqazMxtao?kVEKV^+@# z`%HJMmzT+;sz2xdD(ZY?oazhh2Qtenc2`llT^U*`IF@6z zdSZ=9%G!`4Hxah)9tB0gSS!+B(%NFX3B7QS-f-EG8xsSxYpAJ$1LH^_G8id%lX%tE zcJ-Qoy>1fekGHTKhlQKfZ8v|Tne$R7oZFC&98krrZL2wG82qjuiB(?{S}PbiQv|^3 zUHcp&kXsBY*+UbMC?S;TbY$Nnk!V%4;KM^1X*M|K4rM;2{y5h`#Nq_6#QC{Zo6jP; z%z{U-cLr}82zNVV6QD;*Dh?A$reP7cIkltJ14ii?oa{ftmAkz2Oe3&J&po}_#dE;$ z>?~UD<8lwi*9sW(5E3)2^Zf}c<60g` zq8ntJc-WTH^VJtxjoKr>G;#>K`mEU?z?)%4leUw|Y3J~Xbb%mV{z$He>yK!ZQDxgr zxf!2)GIGNCxLb$&V`4`L*NCaDNSC)aH;@R12xgJ7ttzKHCpV`wr%+e17wm1yrUsWy zjtw6$o3m3FNvZ`CDT+;(K1KIK-jErWwy?r{DL-ScUrci^v>j^YEt*@(aOsP zSzJcZipw5PX<+EpS+*0XSKLJ2aO^NevST@;1EyDwkf|F zXc@$W*`_-(w;E;WuR-ZMWoVXvt?Rc8EH;IbdZ0r%k_?RdC?sEMTc*4!)Lvr{OoI-b zUH7XYx;LZhY-rzWNUtzLBVT5ag60?A?9yRm>!Wf@{6OdDD-~3q3*dk7o4JAuxiv9W zz3XeJ7e-n$L7+YeX=xRQ!#t6Z+wO2JJ970AZVMy&H(U!}~^quV_K=zYvk1F*RT z?yyE{IIrqJc}rAI(elD_Ia?`C-DVRHw;*vAAx`#dAjH0NzQ{p>wr$MbmtnzuILa6a z&=(a{2eDuI)%F!dkkJkSO&@SeW)-O(GhU|=-~F~I5G8tEoO{o1YQ{IiO<9b{|^{@m#g|Coq; z`@7vPVQOWlYxjTTKjW1();8Cd`}g)ULZE-+jYjrAd81i;&<5B^=bpV$EmgEsLr%xxsC(!7*!#hw5pnHiQrw4!Cl(LEyV9qM z%O|6k9jyzDoqhbdWWmAd|BvH~gR4MQjUuFum`)eSi1`gixGkED#j}2L` zT_6f{5?#50O8?JPT^N4$UbR3+Xl&?Dyi@JwUSW$Z{X|dS7bcHTFPN+x*zqFCiUJ2$`_xv_o3@I|3k*t@Il7cP+`Vb zpK}bU9a$Lf9atFeZ6}ZzlaV!SNw!3NisEoK)kzza_WphI2Y;=2GRAI)8SM>h1u#;_Op08lYF;u&Awt(^gWpetfWlgg2OZo z&&F+|TdmQfhB(k^R1wD7PVQ5>l8)IioA{evRZh@2)JWc68vK_usLQnGk_&ZmpfoyK z0IDqDkuy}>MzZ1%M}HCnt8#tlfv4(eloK5|G!eL0l8Tb9WOpYSj1KrK6Ux z3Y!8RN9Hl6BzM3>NWF``@xP$PGh!)PuNcQq?pQa{8EXCDRxgg_cLu<33XMMcb>I zq(33SaHMw<SJBs=E=-7OWbrWJ?Aw zeW~}I?_uOb9r)C(nF6rC5GhsCTF$DMWVfx0qC-yXcQ?|lZkjixErs~rOaKDJJ>Vb@ zka25dH#8%dWKoJW*Ui5>SBA}WGz<>6i0ZcwUl1RcD0t~Ymc~wWou{SGSC-A*I}5$9 zrdqIBHcby~2&mu8C|KvTDQc&hiISw62$C(L%gE^7!nx#YnL^K4G4TJYGc6kOUYTj9 z&Hy0IMkbsv&fvt%M3$+eayuTaXP)J?a&gv91M-9RJp(5~jf^xm_81xL)#55PD%0xd zs#p{DBUDFQR_H9n##*}bw>xoBB*-X%&*@&?Se~6>t2p#98$kkyIvXy%a?h81cEuKl z45(riM-{V8SVkd@P%C16Rr@JK%D}5|Eoplpri-Pvg)mD{dc2Zd)pL;F&&A?>soH(} z1<6iJW-xChvNoru2|vh557G6}_L=oJcn?0iAj4K8oa=S3P=kuwcj)LXr5iSIQg?wb z<;{38Y6~+a>3HHKYDl9F7owA_cUqCeZb{6?lHLB+Aq)edYM&&ve{etK#SB? zx(lMo{`g8;NSTStT?!UWbdRRmJ$}0d>p*l3&hWw_&Ch&t*OR1j|SS;X_Mr@fAY;D77E)j)oBAgb4AD#lfdV zMywmJ+A(uz*eDo1qgNs1Ro10jDP$b-5PWuDTRVaSOb+plWG;_{;-QdMl^J;}kTq zQ|ObMGYTI#3F@tpI(F+m{8N#7C-4}^>5xXLS!Jm2gD6nbfuJo}BOk9I)GNSfP`^Oa zfL9NpeVo4YtGKoJA>_q*CL{!J+0E(A$D1DsM&p>ay^760!edBB8L&`6YW4U5H8T}Y zoV9Gq+`+_G4BA|TxU3_jBXJ8g=cWx8v3=i>Poo8fh;19z2d;YmQ}cKGefwwj=bi5H zk6nJk|JR%Eulh0|S`xD7(=T@O5$&U*$u_SH-%;O|stMt1&Q=dnA0i_LqD5Yi{WcIs zJU{?hmK>M?`f_(%zq0WLqzhmfh{2zc(>+Ca>#G|-pm9yhEEcjPme(7A0?|mE0{`53 zD`M6im%zfJgJEzKvlcdt>o)<$>GsqAWCSZtWvl?vzs3U;--X?4CuheEiF%RU_z>S{ zlLWd3X!CHz#9QLX%ZDbaaDBw#9ueHpe8W5>8n~If3HK1nA64u}8qSiwlB@&d=TBkx z*?*@5(e{=`gP*Vcn{D%-Q-Z(sF8r^A=f50Z{`z+!VkE^sT`vPSODyy5%DfafA@uxj z^+b4S+Fh#UNN;7Xwk*>m%uk$<;uNN`4!VEqb^?#I3Ua;|mts zlH-((4UfuoswQ9WDYHA$UA{-f*wQ5&2^OlQ@As&~oS6|gqzWPc$-rfQpd$0upqE|+1{uXG#DPX-25sFlqUdrG>VGa6m1q@YW1;|;xIOy+f82Bx{SFx(|O;jp*#RRKQB z=&_n;_G%+O!GaPm;`lsDQ9+^V5b$}~Sh5O;NGz3r2mfbl68{;Cfq*s5<)rnj#I^pD z%Ct$ji8T$$C$*b+$(UB&Q#}WC0ji$s&A^Ed0hYI*T}5{%`3cdbm%UDMfoEW<4TSF`xP)GFB0In3!Y?hp zM^y7H1+g1nq`Oa?t$nsTCbj>_?55I>=sj3ESlV9NH?d;@g-l+|G1CKuBFsSLqK8fT2`d5*Y76&7?(6oxtn0n?2Te#D~ws1@pO;M-kq@M0f0e;_5w+EFy;v zDq(@h|4tk;1s3?r2e(+HfCeB2#!A|-(_x^q$FM0IRs?a)t0^X<-Gr_S6BlJYXy z8@_CBD&G@i6rJN1@S!PlV1-C{B9z{)&5?y%Y!WO{gVjbM%IeHU%3n|hNWL&aB8#ie zlwi%)ag3Buu+~2U!*PEMt`(#)5?8v{%`TU+`|f-3E?3lC(sp(?rOq9b%{v;h#Ji@x zjXwX$Xhc%RDl7e5^1Xjta^nB6DFaH{4v`jYn-N!?7j-f@wdT2oW)REsm>EvJb4A?oDVQ@1O14H{wc7|tW;Um}oc z>2fGRl_j^d^VWDWUU!pL`ihiS?$kQGG2_JqG{f0(IzKiI9p45+_ zd{r5q6%%cXk{Es(JlX`LJ|HPzu;xqLeJX!Pr@a)O8tCuwae@PJ^IGQaOrbAETMFpy ze$QD~Te6bI#ra9K4k+9v$A}C{C`KeCk>zuo1-}QBGFO%WuV~?utMn{T_A^tZKG@#) zC4Q3JZ4F6F?=W>EexhI%4(dUu^K@%*Qsz2q;RSE^O=vT@vr{!>z>2HoXB^VbEG*~LX zu-nl)T=u0I9T4OVTX|@3BUv`t8(HC4b+Hm;ObHfX998BO>&wP{b?}jl$VP#;hmvr{{dnS~&(NIk*ASOqqJ`Njf)>ohi#F0#?pvkSKp4JBq;O8XDq~S}A zGUIY=dgSC3f)?b^rE_g)pp}{{Vv?!QL`a{zCt8LMq6g@v-E!pKPBY!rFh9}kCvu5F z9k<4PDe9!ZrW3*~rJz;zu$mqUa%lALkRfV00I`Y@dkl6^GTVc-HU8PVO)ls4qlX6( zs*>&~N&W~CY<%>vX>{q>CZWzDGZ`wLM0S|U+u!)m=8UNAo{-z0Pg^q`F{ zap)Fb{>km}F}-rlxIV-c@^7!6QqWkp!ccS}e zCh*_a!f&3tu7SZP(cRR__}@hL2zkxVxd^}u7V}hzJq3w48{8xV^OKlJZwUMvtYP^r zGWl#Iz1~>mY^A_l^h#Nj?}tdPmg{yDeMdnY0ANOwX`lJfHtE_a<^B5l3exo@Q;?2q zJH}rSB8rGolvLCOf4jv0lT{3n0Kf;_=~4!oHxcOn;cVz{BQ6BkrPmXAvRMs+K&O|3 zq))!btI&b1g@oi9+x6iCQUsyk((I4-Wm+=^m)=({0t7NFpHOe^g2bt_2eh057Nk<} z;)gp7MU3BBRxK_d$El2I(%#QqysQhV^p$ssX-pbS5x-lMP2Fp3FbYaP^e{+hvJhr{ zgsojuE}De(*bi>MSbyP*jqyS(rBa)g=%rs%3=}D7gy^hu?50&rZm%S7pM)YP0i6famnY!+}SBB0FB zjb=XJ;@{Eh9YUT{+O52QPuN|84S zW{Qj%!{%e{jv!QrwZ4^j;@9Bro5Km*4+Tk za5yY6C8h*Dfu+Bf9c7-m^oL#NpAAH=%g0;J&x8f_A6eFaE5q==MW>Oe#iyH!l(oaZ zqtj7d{dfNQUWlBSNCkongmP75M;2f3Ef`gl$Cu9ZG(azx#;8T&bjQJ|cAaR8`&v7g zOxA;z<0UWLcy$1ZD(#Gw;qW=b{^0fX?hWh*G&7?C$|?h~^f1A|%9Q0rXnBTaV6P#`Va0wAEjIYXtPD#ux_oww z1xo5>Q&zc|b*K0zg<=lpVXvmRw^gC^!daega=YIJ4Nl-!l%!hj z;DA5~evd^64)L=k-TNc0ZPggOU(~%*@{6oy&J+0-KmK$PnQF{r-O2QcFycG#_yi#$$+I8P6(^?xt)4{*%HA<>CI#pag z7{-)t$yw)ub6x2v=J)$GI!H2M#MP`*&2jH_hh-we?F{>IfA-o0zoLxk65ntdAs(E+ z9i#Jr)FS60>m%C+l=*wCi9Wh!#$?^$vhM z^wtMt!FQWH?XhFyVj`_dCvvOLe);#d-wjaFBUY6}Z+; zjhsp{Y`%usIlIIO(y#5VW57WueULb47S@>wjaZ)iVE9<8fFC2;_$HUrw6kH9hYdOg z=S*<7JWOg5G#re}JYGs~g!|Rg$dYVN#^17(R~|(Nk86)BasojJI$mZ!vs=}T_XK6G z#V5f{;GQ}$&p>a$U~56(uxvYgm@ZYzgXiKM?fB=gC*b+dvuT%-Sj*zGpc4GYg6jWf zVgE%%h>+X-Jg4B_?^#sbG%U%osor_6e>4;)Jr^Q|$hubdCnF+djybLOY}+kTx)VRr zJmEtG7Kc3V`FY3NRxUn%W4exgGdfILwsx{QJgl132CAFdQ#oiFMzATjDYq-PonyrS zX(C1IlD*!_-qXcEGwPx}%?oXYM)jcFu8BHLey{~r1`wY_Bte(m-TSyu@KNowU%6iL zh`waoX6mT`l0?4T+}+0@tNE*&Qd-9MRp4>9<2fP=-{bYp4Vdh5Noi38%CU#eJGm{% z8wuYs(k0k}7*8J4BeUyGMQ#+c_rm)vO3D$;E5(CsLN&S`RgtGZ44%Fk-d z)-&=}G(Z?wdZ?hBB64)3=|#j%;ymM{uYLUl}!gYeJN|66H3xEMD5-#d6WnBiI?UKm; zA)ZW7D5Mo*MEJ5K8n}`}bY;KOF>rHNVv0qna2infE6O)$G*0 zy*_E1ZhRb!kENwNEOwW>QIf1THOnYmFgNonTw$uOhSfSN>$T8O3VNdDwArq}QP^h1X+n1hRCTEgBGrYP z=wSe4_J5AhX#M(ae(3t+jo7gAhvQ8|>i`T{`l9tj7!1%Wby#|A;D59!)|YzIKo z=(*7KiUTV3T*!Jy0a_DRkb%l{ZK>P!&{g^_oV}QUjiD>z!0!xg0o#^Z3cCqfbKm;l zule`~!q~8kTq4kL5?!x6Xb!egpkL54&jmSSwZ{7AwZ?jRu@|=n*(&>Ov8@Mj9W@5C zDhHh%+JLjBuBAK#2MHeGdquImyR!iA<-4-48iV>x@`K!0uGmq#d2E?mRnj{Q(A+cE z)~^!EUHmO}+wIVua|xKZi;7HKWn~!Q3?A~z82nTn6=iHSg042Wz_M+1`7_rPn&Ul# z4osL?GxJy;n#y;Nv6ZM>LYh>4%8vEHhGEx+pffYUm-Mgx+eIyAJ!lT|;kYMe=r{|C zV5>WWFfAuL&Abg&n1c@W5S>%=Mjo=thdb^qE1}j$W|$pSWm>O1%B$C=ns?jgEh|2o z$ECQNa#w)uBVB^{a3Ul~`*0V=7)i|cACr(y_sNh$V5 zy|@tSG12JBYfIpZ0KX-4N}rmI1d3RtrTmi{v~sb3A}Wz%=v6%~Cxu6)hNM4~5qdG= zOd6?}zUVNH%c`hmCP2-fn2Myt8xDxO(s!?9Mhx_z4jQ_$s!`v@10^jrX?L&FcO6gh zz>(oD)FF!t?zqLMu<>FLaxK^LM8o}ThAIGZCnODLp|~6)K67L@$SZO=By3IoKm+d+ zBh0Otrvh1cGB{-xZ;KUeVZg}S0f-Tg*)SR?+g+cD8(e$2vqSbfX+fioilM#4S#| z->XHzg~7n!0cnYFXDDVVZF{rH$N+*wVwWCHG+M_I9B>!UJ4I!;;&AL?mN zeY)>go~ofaOu6|o{%CrCsu zg#Sh0?30@^?chC8<2rqtZ+Fbe)1AF6dzhO~+eoU6oR}GVJ~E((MwAD!^MDJX8u|R( z({@R%qOhUtB>_-GX~d4eO<&TG?rGVH7Y;G#sb0>g5fYt=X5Llu9t%|u zkyyEM{EDyHVI!QwF@^n09f;d=#fH#R_zrY3BO>qbt15h%JHX@C?Mrx$n$eX!z= z?+7+rDcf8=%RGRJ}@wy1@<+RxjqU0x;TgnIo^ zQE#~p@I`EfXk^-6IHSVr~0oGy0v2&Wj4I4x`uO1jKKhE zkps}H>@nQ*^5ExhW(7JfHdzMUprV%bW163m)VrF# z^<2aL->hilRv7~;5S91msU1g(3gr?Y&I~Jwl)gf3=fz|< zv;rNz0`FHfFNL(mpy2sz~94w%~Ng%JNK1S9GLP(bJGY(VEb*zf8V zi8IO79rBMqzI_gk{_{8&=O3!uf6Z{?w14+v`X_m8!I2@sL%)Tx%u$gWJ}rW2q3~1w zn)<$J)L1*-McZm>Ecra|aRvOC6Wllpigd)xah7Q?ak;VVE`5Kwe#!j@pU0ld=yfK) z&6%A7E0@hzET%}#z|f|7=F5=0INDe_Y+4J@dLx=dp@rQ!01A7?%JX+a8bc?gvxayA zXY+LTZ3Sf^A<0|K6(Vo8;x~h0&~fu8@r8)GjAum$$u-sUYlPkj6&sgsMP?JJsY8gV zCWys>>s!SvU)gC_D^F3D>hUk4@|(q;QM6o-#r}+(>pc_gd zV-fl)3XLhJVM4icw(KG3iAa_v!rXEsu=CrZyNtP#j>tJ04;`>NC;7ta1}bikPw~GZ zPUQLK7$ACu97bevky`3GqQhQhM*JYiE`1@u@?q=0Bi zLa9 z@0MOh_qRv6p@pg2Z+!A!5nw3E4*BUMo1P?)r?kM#jJndKq7JFV_qDxi^jEaMF{*PM zGR}ApunQ?&HBu1(^x(mbJM#}_KoOu&1R`wz1fG%t^HiaKA)st**`9*SrZQGhslk7_ z5~98pXW2e!W@p3w)H;TiwRu2&8I9cEbeIZr|3t5*?FupTV%AypH;qjT<>Gt=R34~e*SZS|Lvsw6Po#N%|AIw=~W(h&smRh%QZyA8OAzO zF}mozAM^GIU}6M#0r$}j&b#HYf{|2ML8Tudz(A0QB5y!%vWmtLY5ejfTy0NF-x;hq zUv3sZk=52y^jC5^{5tYF;ySAWu+og>$)q~VJp}QTu(;|&=A_vcd4Z)7pqb__y875C zm{qck+d2u+=Jjw8Qf2FDk6K&JUdUf(q!o}`c1?G%!DiO8N_D>NHj+I-buZlkqm&v% z$*hg1zqXougXn8dbSIC;E!@>d_nx`)U(vhl;Bai(e%=Ye_((~!?VBF-n{0o8jXH$x zHdqrK1y|xu9q2eC=NtgI#!dT0&Yg?1ev6lCW0-_#vpKqtQwiX&gxp^|lk-2}u18=- z{l$+yqVn|IcKRfW>`lPcVSRbv z1Wll!CSPtmfPxX|z6cE^(;b9^ z=!=5OHJ@J!sY`;-)|7-3Hly^EPQg`_JE1vFK+-Ycow$>mrkC8z^!txTCC{iGr?3T^ z<3hCZ+Laf~s5-af7`z$0z-9d^d-R6@*LMNbU*sX_uC##tMJ7PjYsXIdeE6+@jNZRh zNc?=g|9QHjZ*AqEYx=2U`7ao*eN@deA-_?0gzQA18jzSvR;GOK*NyV<35$-26Pe$97|U ze0_3#Vts0SRDtb5v4G)V#^CTHbdfMB)28V3@B?H~DpLRg3q4;4C^@<~p=O&5bwR&V z?$KH40yQ!b-UL{}^m`a)VbcrKsyZv(t8}eJgNYw@jh}Ei_ZIX-2BzE$W6I{Oe79%Y z1nz{6xz!3;^|Zmq8NEzDblraOWe^oOHdJ<*fyy!ks9adxqIf5n14>T?K5C2_`kK-!DX_qP>$T(zG=eSC~+87KBAIv_5;(g7e$*4rf7z z|7A!o1&5FB26Mqt)xdXGS1;leO4iF_fWMQ*lzPDkL$3P&u=bWgb*@Rfa0u@1?(PJK z;O_43?h@SH-QAtw?h;&s6WoGJ2>Pugd%v@1W>4n4=X^h&1y!t~>gl`htNUsd_Yr`l zlJ<;`<-#B~ikHDmx4bncr!vtc1aJ31l^=amWgAfxb-R3Jni^5Y7SWdV03m3*Q&#mF z9A~vtSM@4zg`uwb8djLaIk><|hMIcl4+(0r!eCwg0(H_Nm`g5ezn5?v)sB)RVunv4 z^TkB94@F#T+5$~dm%_7uT0G|I(Mdw@_~&xCrKoL9cEFXJ{jKfzKhsMib4Mq08^ixe z>m>b=)-eH8C0kWh5eds7pdU&vTHFX5UV4{F(@E8~v?bVO8pTBXhKePc7+114$BhbwWKiEIdB!u1g= z=JA-5QE@_XQH=eUvteBF$hWIeiv}E01leVVoFeGx4s;W&u(IjT(iH?b2qFX63SOyqQ`URy2U}m~9#z@i~tJ&EDOVX*>F9>6Q z#?YbyBqMkXk@T`M(^jrEIg?ir4D{n^b;p&xCoP1tR&j0U>H|m zoS!`}BdO7}K+9!kE`u_bf0Q_@K6tLc_EQlliou}59_;;qbt)FToXu396C{XfyB7&_ zJ%_h=AMz^hMB&;LW-f7NYa6`6*L7azdbI)3_XQ@O25z_b6PNnxv#BNwvw@GUPp+H= zrot=ZD<V*{%Ik>B9gFltJ*MI^`5H8B=@OrGY!aj?f3~;JsIvYn00awwMrctO$bj z@o@-QoCwo#10qLG$cHukZD(P3^JS2FF6 z{uYnaYXy||#^DkzFF#}R@1oKIh5&8=(QonSf2SmWW^d$2C4l)6ym*jJ>!T#swz1;m z>q7;(-54RL+`_|!I=)G1n4jJZsK0$s21A(%!2co|#v^V+wF0ZGt$ePG`pnC_xdAjU z&s1k-Fgj2lhKgK)c{pOs7;FVcX>>JWNEGw7k{gXdGPbFm2+rC?G&hAh1teo{ANEvU zRL=c0vz2W;;*M%l5v2Y7TfrEpW4A5@s{Jk}PJ1Ek-pu~g2v%qm`+_Gns%4V(3y>7< z6>Vs0QOuW43|OWFyW^`}6|1glp&J%+>FM+_qE+V(YF zy^SXzLHg}z(CnyB`s{`G)2L$Cv^lycW}Kcx?@O*!LbC%i02Fk zJ+KA7A7<=nzysT6HB{^4dl!%xlU_KPQvHjV=BVluw?_$|2V}AfLNDdb1?6u*6soeg zdzU^4YxEoX4@TApUlDK^L#N`%FQN)7@@iJ`^p|$^e0}xJQH=|3{kc%Cn@rQi5pbfh zzjf^XmYDu=?SIjdBt>aiY(^9uL9CL%z{Iz(MK_Ll86cs3NyJDL3WazMClfR_c5O?& zCj^b}qk!N0;s-r!uM;F%&8twKF4+!UKV_eW47Yo{!EIpQaPa(cKXMti!#s>0?Q0mL z&tc_+$=WAkOJO6-h4x|k#f333jw=oJTbA+%zAbGi^0-i8E+%^^1!Jf7lOI#sw@=(X zbvF={A=(o>GeF!SGqyaP@;;kn-?zthLGxwKJdF3F1I6lXiL1!yyHttw9VnRVeLvc&lu$x+lx;-E@(A7jl*Q0 z62qz~pHpfte+D2pt~XCJ0q0!w+nf6z_?gq6{48PBW)4t6{z_=i%33U~C_rfqX$?$5 zH&D(F*|_a5h^X);59F+QGM>)CYL{KO0~tM0FoJIz$chDYwVGP{oz z5hAmRT+FoD;_mURVz+Zj7~*I4{GMv)*ud@cYsHx zRsGi>;xOw;sm5d6FAd)?Noyn?Yr6%$;@+m^^xPz=Bb{rq-v4qp2O^1O)&NQ(@LMHe z`Fob<^v^Vi#Lmju@z=+nL`Z&2qMr|iXHNCOrYc5-e@)2Di)9|1iq;>(S&>QsQA=i< zLa`(vp3J}ciKHD#JJj;ML?+3g^eQI1<2la(Z|dXq<9ESSl=u@03_7ixEYs z0x06u3*#p8ePQ@@@S$uA&+%E8W_lq>LscxMgDy_bb!;N$GfqSb=5&8MRTUb3g8#dm!3K^nqP?na5)N;+^`gogMLs%i>( zu`5cmsr1V)B1Q*Ik3h8kY`PJkL1DQo6@7g^jkn@4_lsOeJD9V=w<2;6KdCvrziy)< z;Lzy*ZxH3GJAJa*wNU{pQL3KB`+0 zYnkNcLX7Z2g*ndR^vuNl;xb;Ta@_5sS~UkZHPib{VUBqMdqv@|_onRwav=TbI-oq9 zMfuslRzO&mOC!@gCc!7AMrs*j=liw$;r=ISgPq}=d7GV=%Xt327?KXSL zfmVBffssQL<}Aip4(~Kuh;9&!v`VTB!kspum*F2!KtpfXcdX2R5z{4 zkDN#>t;Q+AZXw${U|c%0ec|w6o7J{4zTUR8A3dTK6{qbVhAGhO>>p8VCd6=1E*sRD zuZHeMyT-Tz7RNxNQ@oR!8jW$HST(Yb5!&&skE3lr7wIB)G0xPl-@lH&2uRgUvK_QY z5hca_%2UBu*m6*2h~>JjVd}Q~K%3#Q=1y$2%+YjY+fWE+74ztKae9~DNu18DuqD~t zNz9#xExibD*?sjI823(jwALjq!r1=w*rc$kSSjzK z>QiltSAt>cqpOYVG5?_>`BTMq*{f8tKGCf6x6*x^_G%=pxd^eDc*XOEy&$)!qa>8= zEHWvgfYns86CCp$4F0FOIlA4Q)AKYuBo2Od)tA7pSE^DZ7ohv#QnA^DJSjb+qLEnx zR^tgcq#)jLnS)h2v7}IOB;!dbQ?ax)nS_cjk(YD4v$FAM`ftCz{0h#NXPuD&^l;&~ zxX$%=xc*;s@h@efK?>_K$ov>QbBi|W$=wo&!l3qpO&H{6Vp0TTR9oe~!9&nz#bXU{ zGN!C^>q8G@ynfB`W(^zZeoyCcevvtB1Jv#?_vuhld8#E%f^vWg3RvipFLb%Y~t^ zL+I+Dql9MVh)?lyG#dPuQRK!Z@GB-sh#y7zq=<#!| zF{{Ja7lDy5KK5LUx51&;g>HyfKLF#MG!#h14ENm@?yQr0iZ%(CCwy*dCpI*XE(!zl z$O=58fnyszAXS9fBXpq1LelWUN!P{nk6X~lM*dFv5hmlcATW<%u|W~JDM_YqwOL$j zQxk8pb)KZ0`g?>5y*-fx9ecWr^q9BVijU9fZIH|!e+H9Mq1$xPT*jCHf9og1w`_7` zyJV-uhcq5b<|?L}MwghlJVkNbw?z*R8>)$T&wR1{m`}17S2^+&nflw3tYMl;5%azE zZK0pU^pZdv=AR!P*b^L>=fD5`M zkV4DghfH51Uwhc+?)(~})}<%c(>%UqGn2b|zdm0g_t0@8XOJ~Xv6CH>X(7WROCzre z@79%W=|EnqQ3QOk!2~-?k>^|JL&DQk>#YyM!qcd&Guh%$q5b*=h=1@bj0W>s&6L=njkfq z@^jBpa2jV12{h|83osk2kr9e$kLh`P<0{O;7nlh&`+1+k3#Qs+#8Wq+K~uQBq~(^d zy~aBuWH9*~CrG)*+khfuof?_!1n7E)tOh}fb|@kQo2HyoiZmrwpO9BESqMhvbYwl{ z$-wTQgK(o37zO+XwsIVxu zA(NHw$~2T2z@KBOqoB`kOJfwes1`=kSJ|K3?4k^=v5HQ4D{;Jg4+{jQhjBX@x{u)8 zifeO;E=0GW@S?D+DQyG?%U4_YN3Az<54}adTYQo|0nWqzl_*o7swBAu=vK#XQHu3{ zg;G}fj{g(z3{tSB2SgaWn?$D;a>78ugcLyb9`CG-E!)XIbM@8;gcjmI zy#ZAGHp21`>M%JnPmN!XcXf1r)&;86?;U6e!$kf_wl6iFVMl{;*f6E)V z^d_Elh|$UrNszUep-;~!c@hJSIS8tI-+k~__@!0}(WbWRhHH=^j&feB+HC{gnV=#+ z2q)s|!@ykQ7FC&X?I^;g*|XDEw*!Ad^;iv@z=imWh>k*v1PgM8hX9||cEp2{fqAgU zSrf5Lx4iRkZA`|J2;OcqZ`xVP5y`sQ!vc93_`7hJtfym%bp?vVQiW0rzmFo~`@(3mD_#Mt%t*!oPKIyO~{ zH{*JO)K3C z>NBe9sdeOYf%}<_#a-0?_Oc$oDOA^IK1$9pzV=S`?QEp85Vi7X2xJ3)&hT4=xs?oQ z=0%6cu6PX*aG2%i88Sx-0`eD*nL%e4<^-7%1jN=eyDh!V9%&%^2-0z(*K!CcV>>|5ZR z*cN4CzC{I$<{9D-)yDJnsfpH;uYKDffNI6(St^n;reK9B+mbxW%`B2qGLt5bDJhkA zjgui2NDtA@(D-g7@Xq2CX`Tf=V|7@UccW*emH+G(7m9K%FSQR|u%EeH1nOSU8R(k$ z4h*u`oR+QGHqP>Ft(P)3(8QHU07Dt_LLXSyCzA({CQaHT!(Rt{fWZ9m z!+6v01#fgQ&S%LeDCocTcXGL!O!9o&;Mnx>dU%@~iV2Jib_E6nW`mi^q=(sJotr9z zgB~xI`<@9{+-XM(3T7F_07I&mk2Q)ebLtCGwK0Q#9?XzEPe4XXB0roVrj&>YRzHka zF%)p##8LXrnqxSeAUE5kzdpC>#+Qt>__YensdDT-I0@uoK^Wjy&inK&_v%Wg^=;nf z&p~@OHtJn4C)J-DJgYMVG^>IebXa%u%YzigBZ{lE-^+cFZXYO7vRTn`uq3?s+M}#f zhZ1+3-B@(e+KVG-&~!a_tF{2LAn(Fchr(Jepz5Zqu-jX9#e9Qb(8Dkvb~FvW7F>&0 zmRwqegt#JERVue?&>IyGuf(#6(uOHd*={>9-^*jr-geW_XBYg~wU)2LwT~Md*AGS) zq(DdgnHWk|qv@hx0LE3ex{%R&0y-pwNlhineG9sVjN8Mq4v!&GW(Fh}Fegt%Av}OA zRrHwY^O|0kM09rS(HutfO{9)7S3Oa~SkYq>Pe!ZD1;S@e$P|xHjsjCoiD*ip;-v*X zQ(O9tm}WNMKD)S2Q-v5G1Z&DQP;bR3DO*GpBx6m?C`fXw3Nhn#S!W@?v&Xmi6RzME zDZ`IaJuFT7oy4FlEVs#~814>VwTqn+so#fwWc1`a=ekh!?W*T09g+k&+CiPhWgVm^*5~ z&CFUJpLF(A*>XW@jCgezh5%r^Ux%qBNU}sh)=_F(?^kPRWS9 zmuq|o$;N0cxqIN!#8E|b5cc-melSXpUt4T!!cV1vIMvad{n4x;a*j24@3P85sda8K3QjcU zWgUNVW9K;hR(kN>r%}yX4yRFfuAKTqSf2Sqaz%)yQz>#kyG9@6I5Tcm^NpzCA&1{! z^o+c{Ylt)Ts#OSIbWYgPcKu%4B;Q-d0D9d9(l5@Wjo>U2_?Ci2QlwEQJr5uz51B5t z>fybgwiFS4;D{rlpgx-pfruLl@eT_2Ii;#hQG2J;A_QaN5iXLmr_#~;HHts-5RyFO zLRh`5Y9N+I!meRoNF1TT6F0z*(GQ%FK3lk{W^Mt|q8{#spGLH}sF&SG%fD=Sd8G7I zE(D~&WpSW3y~iL5u>msa2aLt!gL@TDHifunfcEu-zK*8Xo4KT1v-gB!!{uo?Xn~ZB zj$!5v^xr9nl>Jh@6A)>s{%jiS3RC}RFcc-FJ8^d2Pdm&+!*0`?xx>0P6n44fmgT?K z{R3O8RK$E406GW(=wSWN)j9u-0Lt1J8vg@O|E-Jl&*`3Y0ZGwBOngJ0m=;+cMUm*; zwW*cceF*V1%>Ernf zmg{ed#mb_F#R>@YS(z^_))o*48a zUwfmocXNrp=^n4`;&43$yro6rY=WJJ38 z`=Wlda9ZyMC3wCZ5FM7I4bP%sKXYR}?j9;<`E?d413Fd<`xykm&w-y$i`DZWw!&Bg z799d?%xq=^0+Qb$wyZh6hilTpUp^2K3|{vMN+nC_vJ#%%jb`@chmFmGp$Z<)QR^^s z>GxgT;wO1DSE70cClS2B$cKcZJ;O*nP>&H8luMMQ^p#+r6qWWNon3$v4EI}Hek#oR zewhBTeu`IP=-b8MYS+|!^d(9y{_egt^1?$F&5j{Y!88M&aj#(eyvQ5UYWs>y>MsIG z1DvBQj98VSAk_L{Npboa6!lO|qeG$d--6dA<|U)*wJ7dNb;?47^40=$?)`(tHW#)F zd!a~jrmdltbAIS#>@9dJH9#kIe~XKp|Ha<_vrd}WS{X?hoBWT{R!Bubw=H$d+BER#9m@$?ZeYxb_zQg4`VhHuo@FxM*AAlHH@Oc}R2U5wDQuSWtbq9q=* zzdne2k;ZB(I>@8Nq<4rG`kVb~A1f;+(%>w0@TtL0CScji?y>V}ix=Hmtxh^EBhEPC zi>YPf5=M*G)rx%K+Vu5;HxC_198_m^Xc@h5b2U#9y!H_#z2`tIXQWTO>~pl<$UAP* zbom-ue>7Xk^2$j?tu#cV5m|HI%gxY9%2QtO$I}o($8AwR>S*q&rVXh3AP6vxN3~W1 z*EP{QnT#n7n23(e6kBu3!bAD1$2(w7Spu*)m{YH-_j?gfvQ*?m7cDm%(s0VDDB8Lb zjAV<&PMCNv5eBPT-^;Nn+fT-11f2vuV)U=40(foU`+VECWCaJ7?#JFu5OmXpfw71i z4%aexn-7?oq2DCR%k&I5S0a80P>~#%hi{*^{|+j>{{aRUp|ICq(I%S*zpoM|u6PQE zNb@`9$@>7pTxVzOr``1`Ie}_rRm{=Do;?zlUwG_v6D8m$2pPzv( zDkFOM9|;TN-};RIjWYhT4mp~C_)F!2wInekg7<9Ix{Y?#fn?)Bd$mGE%Y!;c3v!@< z@;uf3gp+iqSbCBd;;m{Kg+Kli&`1mR&5j0hqj~6OO&HLHGke&`7}ybIAGwk`5E?}p$%s)@WEecCaOKXv>&MDWzqv3=MiGfCKK1f(#J{yc!xv(D5zDhCFLJ4+JH7-SE zI3v!xX~#9+L!QL=&`w5E#DzkwyJI+nc;mPkXp%t?H~Q*^5lCI!HIS=liVJx(XqGYF zT#QLN3l_`ei=)E`VN{H$n_^fM;D_@$klL<(OEc%<(WNX`d02S{nX0|h4&AXkJrSwQ zlG_Lmw0JNi>^{*)v7=v!c82yP66tmW3*NGc;iF|M&8vK;D2{!EjZw=G%IzLJdMxNs z`zQqW)$lEFR)I3qJ2CW6|z7b`iXt91cS1ggI4p zy#3X^Mb5e;J>#69-oO5w37T=nvY7@r{M_Gi$p7Y8{W$zzj#X6R7$Cce68uVOo>{D= zkuG=EIe-!ZY9p2_tS&DkFDHjyrdFG=w6ncE-f%~f&kZy+;15_bjxek!DjbGNB>BR_ zyqWoZY6j=^<@y@k7c5)d%}Rf)k5zE_u0QUyOiVo3Ql_(C&i;5^k$2l>U@vTS&YnVc z1qPcX%Z+=RZYJ)+skCr4uIrxcDVv?VZ<09LkQd3m?=cQAmz6%fFh zzq2YQS1@CSZxc{ZOq??f=9+v@iF+#xY3+KPgRyvxHvUOxQo?0vOD?@Yr{QD{razil zyL&C(dj#kpZ4_3;o^0*iiaD0%)c;$fME!S0$<)}! z*umV8UQpjgz}ei&NW{U``j=uENAdh9*$zAyd@4tuMFrE#wY4rf35sbb$1#i>}D>#Yk7!oKNe_af&0bcE63EiU~_4?eYL+{6_N+r)dF zC`cfP01A?UR2WG4bD+MTk(k><_rWy4`-}sg|Lhw6ZM*HCZ~TjDOWWG$8<`vadS&HE z#viXNbTFK%OwB(e3M0ErqVXqFTjQm)Cs^VSYFF{c{oC}Ydg__58&tPiP?fBxj zpV|Cv*z^sy+6-ffq0VrAG%4;FVjx14KOvfM4;%l$4u&XMGzyYEjh;XM*h)4vPOuf7 zZaYKkZm_u|rPSy8q?t>tjo7}WTbgAQnKXTxl=p^9;|nWK@!0Vd$@WWT$U1nVovDw~ zje$tf##oO6xED4_8P%sZpSmKOtSQIV^&wQg7VC-m2ucKq!Gxt339X;71Uep%F-Fq# zA@J1k45KKIeS^NVQN6=RexFd`p@6rXod15MomKcV{7~#u8V{(#wnZv=|4R1*YBiYB zLLC>(NkL}VJSt&1Pg0afPYsW=1c7^`I>`}P8^o^Xe%B$@f%%_hEi4s&Uo8MOp!l~o z;J4cQPiOjvC6ND>3P*=p&;T9yW|+qcrnc0gUtmuNX(NY@g`6Uo7E5@VIIq&LdnAG+ z4Tu(ha?@PCC$L95;GJxZS#y7Na|gByg+(4CQ<1JrQ)}i+t&0sX?(M0JLfThUtE~&< z=rgI>XuS@k*P_4iIvS*!KTDfGFmMyHdoc(gLDSZ4D+#;uU@}neQt2kNS}1mrINGk8 zrQ#*TsH!E0T%fO}?O=}-0avHYo0r$nA>mgQ`Fw=p?~FRG)7t;{$rK%pHTv{YBu- z9;^iXqz))`Er+JbCO_}asVYV@U}eNG13m{C4HFu3_2@_rYuS=Xh6!{OBb4m>!uCkz zCJrUupOka~BqX03*Sw4DHpa_dl z_o5IhM|+(s39lrn{QVnz(tSFtsI*<_jq!|>pPes5W?-e@W`PvFmOY}vx!f2wpig0} zoEcDV%8&H+>}*<%)bYY$1{;TM==wqY zy4!NZn*ic?1U&y)9)DY9^cNidOKj|)3JYM{NE;{e1rRKw+j*^T2NWQ@%v!_U=HY zkO00q=IVCyS=_wkCX_YYx zfPX3NiN)98=xxJqfG6iK9Os94=!T#NB9II3OTraP4!zIJP-|grs<#1=ybls@rN^&K zFbZ0jhQa=m)i6#Fqjm#?1N~ctp$B~9cZTYRGa_hfZKrPouwcKgQI_Jb2`NpqJXSTn z;i2!#b3>Ynwn%)<7x*r1K((v5>^f{E~J!dd6b|#jW%fjuxp8zm`*)m?d1Ma zf<&86Daz^-gB?5t!KugD-S>^zt5heN)o_jZh(xK-v`OP}o%B=&SLR#g5S9>Q>V-~T zZxl0?V9a)>2Kxn+Ci%Dijd&a6gS37J& z1GZXE;K@*jMsmzDB8r(*P01k&J}I%RF&R%F*mRNu@dsH7&Z0Jvp)W+-}8@;~QGlCfa8i2(Lt4Nu{V3 zD9x3$M+|k`vGkV<&~=NyeuT{MIT|mIwytpK?^cn5;PVE1;evvEyR}Mqhehz=C-Q3D zsTCFhuE{;%`Oir6x77;&B7?u6&A-SZc0xvg5g};mjlw0k_B~jeZxHJMDVMaK;I_cF zcPTNNho-{W-j>$=8{S0w4jtquvSM*rrt68!xvnmr?l%})BVT&HOy|n7N;xQVY1%qXwFqn=R72>L~7AZE5Y+s=gIAxZ!f&YWXgWqX1nFzYvX`bQHEE>H>g}ssvkeF zAXqSLBnE~wQ81ux+60Q0VJ?)&Iv>@GY-L(M9~v{bWe=?D0s~1!7*ts@lUb<56b`ev zxOws(v>Ekt$(_xS6#L8U_&Gvl#>S~Dqv@GXc@qx}&Jd$K1%7nf? zZJ05jO6?hy%B{67w5oO3KkpQqT{Qs^lM$zN@plk+1J?&s*ys)xhTDAMFc1t*MAIoN zwG58S$v6d(IBiv!v#iqP$VWP6FglqPR@jl)m`9Fgn;5QLLNQd=YJVV^R_S~f^`ZtE zJj1yR-9SIqr$ejk6~px+l542|`T)y#%pq9FT6SLI~z0$pD4<*7+YhqlCYb;8q$_*;4XZ+NM$(nHk7P^`#R^J zsyX4q+L+zuQv%r-G}f^%Zk0Oy(h)QLeOUtI*(gwMaoO2qa8-67SAfD#PKuHMr1Z^q zI^uC;fyNQU^`F++4>KvL1Ms>(XvcpBmA~!D`x8{et*!rO<<$SH^CCXAwl*98!*AIf zc>6oo1xf_0`peU7{;pE96oM#trPOQzp>ax#Xg_qSX*;ZVV}I1R z;-E1I-l|owzHL2ehl}ylwc8WUbEFm^35Bl1!t?MLYchD}ug7Ilb2dr*3 z)e+0XTUM-ZHt86(Ut^D6a(z|cofC)0*Pv`peTK>WY&{BX5OH#%bUM{IoUf5s3`?~1 zC@J>SsPzSqU=_H7@e#!(^zII&V0)bb54@W^ZFv?Hct~6@gOGF>P2@8Ak?6q_VfU}| zQ@)`RQkd8c`7Af$e)^Ccvm9;K^2zcIy82q5v*X;svHLs=QTn;fU6klzXB84ePf(m$ z6|spPZ=f5+(M4WSx_+KccoQ2mFW_Y8etU}+BrU z`Gbc9nm%(yLAe;{*ZAWt-uV-#9YSkOl9J${FQtaom}~*x%WYFGQPeYV)#5XMeYWoe zQp>NIRym{)g3|7DV_HXBWG}Ej!&y~K_vqxPOI^AQXL!1IrZXiLO&-K17kcbK89SM0 z)Q?U31c>1ujp~>QBXMJS&Q(z6QY?P$h3i#7N*bwHNZ5BOVjX_p$VS zn*y^( zMGV|6Yob%GYi^@pAund204FEZ!&cWr%h*cNU8+#S&cR3?7w1RK-rYdKu|SJVQUiuI zFFQFkDlSboIzBZgD?1@c`$=liRdzz~(AY?Bs0<-596&K34@G`b3_-ttqZn^~Pz=&P zD8^6Es8D}yq81>AE5P%gLF~8sApHx%{`IZ~#ZCQ;e{~mBXlAr7(^DT3h`+Emh;>60 z2>NMPMj$z9eJ+8iY-gM#dr@^3rwE;VmY<3I5c(;--(%b(hi#ModgFbzE|5~KvBA2~ z;y`eiG&G|c+IH$kJw0Af>QjwO|SRZ3vmMnRB+7Fx!RrS?mpNL8DyYrgDsSUICWPhmXm$pJA0f34M{Pw>7 zR!#pkhVlzAq`e3KRA!%4?DBT^A290n>c_;CI~{ACLCs* z&z9jWA#f_l1DKe@8~1uS`5%^s=6@^=6iKTez|x@q#4@Z51m{73-eUds3ja1n|3fza z0%NlLKUT+NRxOw*BV2v~2f5X|_}WPTf%o9gLRUmuh@m-H<9-3eD-nq&B&WWF8N9r{ zy!z|_S}UZROFNAi3epyM>D0twW}G-*#8_F;(ZICz9L{iqkaAYI7QMc0Oe7?(&NX3g zlgdCbFE3tTMb>P-6#`kHI|gx0&tW)5_t`jF-1e6x@H9a`5)mV ze^vwJI@w8KxNY2l!i$fUAU_&^kl4%>TA@FV8|w3Je#Y)W(#FTd*M9><9tf`5lRYW( zc0Qmd)_5treYAtu;;VD&3^^4znyyhCzk((*Zqq^1j&wByyZuzTy!2LhiKhP?8m!_g~9U&JNK`R6}$rO zH2fHeX`;`Hbu-6(5A>a4^iVvMz}c+4tv&pK2RHf+83siIDkqe-fFp|zQvD2j4J_AU zv4hNbb5+L+Oh=NO;}%J?E)%)a`*LZ9`dS%?7}ZB%RB!f5k`65`i2irB>Rfk4-t>zz zu@_GCz86pDg(&pBSYFf-vGXqYn|Q3e3e6w8#*2gZtW`RS>#!*D5vkdb1n_AICh_7+ z5oSNa-Tsu2<9VomFF-=5zr8B7fN%U8Z!`bXN2MnLBtmR$etrJo!YgUY&hr5#f-sSgdK0a-UhU}&FdHZ z%EKPnq1R*)6GgcLn^A=+*{SbhR82$2bVIWmZ6|D(LD-)8c$vgI}C9U>>T^7X-Olb^se7*p{o=J9@P_r^v(K<=BP;vZ+de zm(376wGe_9;)pdvtfW~nk~$Gy2#lBBS&w}V17oReX|ER!^Q8Urj4(**exx|Zx?e_o zM6Xg{GflyKWS(I)uzC3f<1vDGzDIj~tw!g1i^IUQ1mFhU(y_RQ0F zhj~Q|-bAEIM3WI45@^zR1(Qu3m5=g>*Qy568j$qL#FEgqMdZXj#`<@W9Xe-P058l= zvw_g+bNfY;%aLC526;%fEKlZ-3E8@!X$w$eNaqHDq+=SL`WnNO%zc$9p|nr2#sgyflU=%(&CYLBVmA%keAFP zk4BP?gB-_}mv1_&I*l0$s2yK^0^+x_&6Q|?tt|X)f!p5#;y)B!OyAKA;N1Pu?3|RK zNe?WKF#IaoynaSiG+$*?R49xBuM-NsKtxGI7dG4|!(NZBz8dnNLi4#R=zM?QT5*3k|s(B5MAB#fv zkvKsB{}c?P(N)lKV>PCRd^2poNp)@2Hd(VvLj`JZpKi&)+IIAG1nGoE4dhPc_7Yj$ zoKIaJi)FQo#l?2Aix*<3$W@SG@Uo}l9)XYWoc3y2jhmCFGFu?&+PmN-i~Y=?vCv2lh40c{Q{t1{GTE1lNcU;=kj+nrL4Nybuemx&p7VK)xs z4}z{3`D@UIVxX9Chw15rHvSLEnwCP*$wjv1j?%!*?~h-gOjE74KEOb~TEB(O6H**{ za-Ghg#TutTxgiqf^4h(f{_L@9Di$Mm?pcCOd6qGCL$CC?}&oCm;CRN+lY(f!MyD;WI2r zHHY|eX)teFzEF0Fzv3CE^fyROyGy}Y`8-m(w!>51yGiM)yPMIejpLxIdk z@v=hX3=x$LG^?znl=kXPwuf#@S@=kHW3zi@Om#3UNm@m6sHc=Evx?`P5j5XR2-598#50uH+Gpo?mv#yIb}!tJg$U)_*^ zT;Vr7s;xzU40I4Tt(dUgP!aGU7MIlA1#G0M^mAlQ!$d8eL~Rc%JMxC#-T3ddojT6p z|BxwL&Ajggz!-S{)?EB;%=q7B`iD6Gi0f6UYC0+^qrA8zIF*o>NJ9y+PlpT8np1&5 zsYn6!qLHL3kOU#gT{J9P3p(zQP@*6r%FkT#Zd@=CKsnE2La#u(IN1&PVZQpoPu?F# zzV9J-I^9K)z%s-099c1~>0E5?YP?%H`1<6sGn@ld*=LD^7>zPa2p2#+W}mtPF^n)Q zA8pDJZO=VypSj~6jf_KYm$~Z}x1$95RZSU)d{MkkCmdG6N=a{!7|QBGawb3bZ3YU3 zT3(M|5|mPL zK?cfd5rlZ1rZ8K!JmEB*a0!Zs(v3kyIImT*K}5KBLwRVv;2=MDp1~V_R7mbBq9|Z0 zrfKDlNNp;av7-tIW;JeDAh47Y!ql@F!?qgcjPS5xwBVJD@@yj-vJXr%Mt$fb5Q0-A zuo^Y=O?XkmA2B<*$UHS~oqXD})7Kd=q)o4ag^bzynPmIBW_@|G`6zpk=1(9KL9j-! z!Qqbs+USePA3Up`+w#82tqjM7?GwW6|tm4vu@I>7qX0CPgc9N zCT&Ze|1>56OgwbW4JxdWq*!w|4ugUe5OWXsB4Og6s$kfV4;#Fz($r#2zR0aN|(N)v%p%_ z&Ji~NNx~!wua1>}&HMC?8L)O@=I#h_$G8Fg2Ji* z*-}_uygb5nf%Kg0yOM+TUNb@~DYH=x44#){x*3NHAM3`WjXIaaJj@1@G_UazW*wOM4z?qRCnh z&BcL0SDtj56-CQ=%IfRUp=^c9t+>td@avIB)!YsO6`z8tvhkWY3tL41+XZI; z^Yna0RTOQ8Fp}R{sKoD-wl@+((hz;;y!!&%hTSFpc*VNW$90c!zRkVS584q^a{<)V z8`2UPb3r}%#Z}`OIOmJ3XL$Do=1Z^oS`SC@wj(S2fjUo@9_@X+^#CYZk1*N*!%5F) zE8lG;Lj>7$FLp66nn%0t)@$uoNBk?uwfEb!U%Spj1(B@DLiU_K6)sA9971Sz7^-2l zL9qf+t#1o_mfXb>OgYjJy%{r8!Y=xZ%95COqTn}de3gsca#ZK{f+rU9VcGe!UP^zc zYy4YT>sj_QSa4Cs_st5vw>;u)4;gCGfkp`-8>{RRUGEC)JW^r|{8T?myxOm+jtmkk zCwRDX-~KcddF5lwp8&2F9PIDHM>4KYj`V%B{>D0l8|%f24?KHjqYCEYI`kOM%y3uvQ$y(q_r-_fA-K zpYMtwNAyl{ZPgTJDD*XBMd!i5RI6$rx!D2^l#8jL{0cO~FCY zW5*Dv1CVxmkJqbgcOk6|EDCJ7f-6&-jaoYTDGAeePB{VV!?MQ^gC}x4K2v6v4f(09#wmaQlt-ojc5YeAIQV3d?=JX<`Rs=iRrq+-<{bF~-BTA^!yWsy_C!&4M-Xlez6TfYHw zL(xmPC|3UUJ4q00oCa4fg2ahZ%Z9v$r@$d9k4KQ@A)@v}2rh`SLqIq7!mQdhie9cW z9S_0Q>j0PdvhVv}Qq&3}_Mq+Og~0M3rKtahWBp%-U>V9*f8t!c8|!gs)hJZ@sX}+Z zOF_r03WEuM5h$(i1S0cfS~>#`T53CV7n|naS7Ss$k_eD9e^nS8AU=PKK!^NQspD%EzUu|9qLmC{QP#c zmy7>J3(kiS$>%FN@YRk6P{lEHHY_40l=Ucvu<|$QL96i5X8-u`HefPP>D|_FN)n^> zAzDoM=)`Lb5SWV41Fm&r(-2t0(#KdrEX{T0ruqDwPd%~dNv4t$86<)VaA6GC-*!Uw zBAYALq_HT?Axqkb?U@^@b6c9n*DyM(R-{MM7MsB4X~|AxuQd-*N74V# zE1Ex`SvfXhl8`aP0$xOIwBT}&S^D0&ZLyHQO2#V0?qm{L%Jv=K)uaO01Y$7*UhRRI zfy(G8*ZL-1bKJq>JAxhrJGGt~2qd6p?m!5AKMK^i+)78CuvBJIHr4=w=6hwuwVU?z zUFAO07)+)bbSPRfDvJZuwj=mjC!3{g2Hp|Km;i-y7uLDoll{wi31qhPP~|Z0&bRrLbRUrif?| zkfdN`s>Lc&0*WA}QZw<-H348~u`;Qa)2d~kFSYhtjgD_cq@u6K#dCJ;r6?Ncva_LD7dQ)*kl7=vGN+#-R8j3SA|Li%$MP$SE5 zE^XVf{k{$fLhP7*As1Tq-$QE0i0wv1zA6tO$cz@pP9g|tU_e4Lgpo8AQ115eK?WWK z^mwVcU=S<1i?Asej zX^x+UP*&7)RiF-9y4#9fX!Tx=%`a%hy8D9E1*+&e=)U^G2pTUAkgUoaC~mT_fq~os$O&szj#uzjH{xSVP08m zbv!Uz>Ga@FJ~chpf1kbaz>pUF*?=~#tipVIXuqO77Dzgg+gbXNM}7J%A6I!83b1}C zRv^y69k$)(`+#2+Al;*i@aN{72DHS%cHjs)?)Ybd;@O3)b{*f7U@g;d!Ycki?KXI$m9pml<#UD zufGCUq_Gxm#ZYP=MxJaTT%v3%4LRySuJ=-|b%yG|^Yvb_37X|ZQ21K8&e@5TxXbqt zhjxWp(_8np1x7-_S#BB)p>CnIIw#)eHxU+fY}#~ppyHHn*C^0&tVPeF;*{rZ3DJ43 zK@=HeNPgQvrBJzZ&AvKYc0uOZoGE!k=|Wl-T(cI~a6a8ae)kc2L{uU{w}no+M&|3c z@)T@^kRIn6(8;BHl7QnHxaaaRmy3EXJvLCL{XmMkn9qI`zNpzS4f;j+AwA)z?Iq;69q(Px6EZ^s%Xo%dbN zLX+XanDCEs2sKL}98R-tl$2&(j6X~rq5DulK`o+KQVvrtt5)X`R1rbRh``)ZA<45E z))edELSwN-6B&jpZrCuUr9@Pl-1=kXn8s&{HY8fCwWF$68fa`-V^kMTOh_GeY1L)w zUSR%)^Dru$NN;poJBKi@xN8#TU@2snCuQRale(QHCbS868&c`!Ex}?!8cH+(BM(?k zc^QW+iBU14AkIHa?6c{$j`M(}Br1ltK5lpnB#m1q`6-zGDFZ{py1Y*Bxs2aHNTz)~ z%9UMy`$;0`HrfKF3YoCdD9n*6lYKUBhpX*KC5s?=V+-qh7V-lX9bYU{{17iq+`pQn z)~`Fb+tAI&6n`|W8Cg|W8Ui#UG+D&Be-TWrw&Belf8@(Ch{L4;N?9#@;@{&a+2r4( z^LeG4{l_caeHy|lb3rah3oFy=`3g&02ursvZ#_~**ty^n0yi;KpD*_bQ) z$qkRGr%9KtI*-__ceh83ZU(wh4%)r&@H(c=SVmFk%?H~_5DM0q>F&gR2m+nDF1kH~MFf;2Py zeEcSf+CsMIXx2c#2i{kQ{z};#->+3U_BtKEG)>n znvZg1*eyt@JMJ8FzuQI6<#2u&rRHvt7M_+;v6J!X;-M*bvE-bx}C2- zUULX!l(L;UEJA7qSXo^EQZW8CsNV41i~(OKaRTc$rEJj}30QT6Y6|*CCF|pN?;?$+ z@fK9QtqyBcPBDk?xFt&yY2%!)Sz`!n z9p6$UBG;B4`80ocV+-0qYZJiKFH_(51@x$$(R685B_c$nC76>=Cgi)lXm^@@<4~0} zTMRY!7uhQ*xe5l66U$0gZodiPJa}xsEzgc~ndPB|zfub4t$`=$3T*6#?$v7)FuA1+ zy1~#SX1Q4?o$lg{|C){d%;*rkk`*?%dA4j%O)SysNKA~>*V%TA)ZiEbKMOLGtf=1K z3TBu8)p|o9sx3CO2``%#*-_A++HUKcw%*E+kfyR)@U$qOV+{Tqi5@zbZNQ_8zhLqp zbKxNIa)Btfx)0mr+d>|hRI4X(9)}8QmHDujK3kIT+t3zqw93G!O|iGh(U(I!d$)gE>DCVpLGa{=mq`-w1nH zh`e_Y_TB_k1eXST@tP9nQefmV@Ti=&kU!M;7>IHM_JQcj98hrE!>hTh%4NB8=Y9E3 z`w=So^faR4@(lp3y0fC~a^QTq6OZw&*Q6rX!~<8*X5}~^iEg7A2ddBqneEH-N6!cM z*I%m~p32WzZM^u(JcF!zaZ%Q**Pf)0;mEWpL#Im0zb28uNrIuV9P99?$A?}B^hXCK zrc_7!E-3u2ZhixCq@{U~c9^L@$i##(p-_@-C3@b`MPZ6L&@prGKbZ^-XFlFNP))2! zG77H?UsE6CgHZ&2DaJR5@2AA-#`JEWn~_~+30{luC1(kkqKIg#Pb1y%4~p0O{;+F; z)nmgFx>XW%kkOs}FmZRqPTfgj?M;!@9yL+cDazHq^D5Q{%|D1=pXD|Gli*bA(xDuk zFBMN+_$Y|)d3WW<4|-z9keqLBkEY;ytq>V>cI0$dlpj;q2x1rt`dx%8Uhq5nksi~r zH6FnXNs*}ePO{_p;SVTO@50=fS0l;Hx^RETg8!ya?K}QF5!)dD=|rUXUkM?9@17kR zkgmu}h?z(J4F@I$I5-R#45H5Amc&xEG-=GbmbUsJAu@g=0~#8bVA{t7(S_(8voCzJ z)TF$zWM*m6DAKd}oT-H}?u8FtTMu638Q&|=h$HeFZW|u=wl*H#Q`l`b+f$k>_^fqBW|0%Jpf8i>WbMD0ZLEq3f4mnsUvb_?ze={9=Qz*YD416+@lGxDS5@_mjGnPkCn?!`zGi+Njp*@3-khn8)>C~CoW#q9#U z3PPcJ(+{A$3PACD3WWl_N<+co#SuYtA?enA6%;#vSLZ-Ot)9k%6q%D~8#+r>RH+dA zR=|rVOCBPswwKdx@GID70M|mSN+qgzvKlMH`69Db^|pv@pDn5gDd(7lZOOo4whEwf zbm2;c5~e?AUk4ckpU1++?P5B^$f}d?qLrthYS%$LN=t!2;jbU$=bs!`!hoq&kfrC1)6qK?~+=^7ZB%n|f>WN`& zmN#!Ev>qkT2o0C`mI?O(y7(9)hry~J8oek2w@$;QfLMt`6p%Glc<)@9p|n1V}e6ocYRTkRIa5Q{GZ1*LPCPSD1DS zVIqdlu2Ir6ER9b*jL}1L!#Sf%!pU~2{khZDSC6i8*_S(9FFM(^_x3dOAn~U80)+I& zV-0GGu^^s)2V~KEVQ#hmfZty?_DYL9Y|@lYF8{jdykG7dbMlaQXs^&zkY#+5 z4P&Ix&@y?HnpUCXenM!{c*Ua}o0I)xV}R0Am9rcAAhE%u?i-$Qu*1=igcUulQNi|I zqGDfCc&DO%;H=)rNUdhUzF`GeNR)zssQ3)=^kIv{q1yTHTcv2;ZdAlUH*NL&E&USb zNf|IWE-h(&I?jj0*-(zD;{<}U?I%^Vu+t}>DPCaBP09h#38lb2muh~a(o=%26YIbj)((eqn zN@~(S%Whc3h3fq?LIC$t)Zuz|6H83kp6^OSYHJ4(i{rYX;01Jlp zFh3srHEO?+?y1ro#r2d6kkyOxlo!&d+EpHA-12t!jz~qVFNEi6J*=yT-+okhS4Or} z2`z~JN(lGesol&XW-8&<%Jm%?|oP7<(VvA(~OYA(5n~Iy2 z293^iYF&2)5NN;GZ$HP34IW*-_~juMbPhbKpzLGClPLShS}tX3x57#X+~i}NgQxe;q6BR?%KdHsZ}7~MQw z^3YffMohzSb8RDa?d(kG1#7bL>3PBTOO*{!1oW=+{DvlKcpylg27?Hd0VFF<;U-3B z^WzM*(_ki>AIg%UhLACsKKv-2aFUTWRn@#qfW_&%n&yOz2rW8JC2<f=pAnZ8F_Pg$0e(@*;|~FvA?@EtgYBERu6?=ZeKzmiz+jF;S4A+aKhpHe-FFeeu)NK|e5@HjuZD0~VXSk~8uqyZ z*m}#aP46zTTXzN~b7Lz>#~+7gI7ydT3&_pdvdn=*%@nz%rOI(L6HuvQbIyJTE)l!HCq_&wSPtBwF4D8eYM<&-aGFLE z>5jC(I%oY@0DmrOZ{}56(Q2Ydm@w%Oh?-)~*2gPhUn}&aYdY+qnN1GO;B8*zRnloX zz4(39`0(4+{TZYKZ~gnS^~C^K2}Xtz<4J-3Gg)PC*?SL(N7?0IsUwdM`PWsh#xubZ z|C9%0byz3)NPg&VpU&=DFbh{K>EMJ{U(5+_<<={Hpv_!XhF2QNgF7l6Hitpv!r1w4 z&PKNDG!Jc8bhEXVIF5H4N46sJjmigcmLeNtoECCpn&a~5%B$t(xM$@#fU6sz_X*)N zh0UG$b7LSk+M2&?JNvheW>bAy6N!;Vw$Ilm-6{ScO`Yyj(A<%j)S@5iK$2xVjI^KE zcx)1|3Y2{PQq9TL)|y6TtV=u81+!^$m4sb7hAqse5bPt7Zq-+iJ{f3BW@A2PlFj^+ z6!fh$QK2m}uW}!Kd4kp!#It{!4cnYrwwGygS;E0<3hN3%*>2wX5y#{kzezV$=Gjj3 z#ueY-S8NXC`yQ`!3;NyWF_{MH2<^^pU%le)q@Oe=II_v zZTKI$BWoPB9Y8Hn#7*7E=>{I07hI1(dw~%+zwOz&MLEp*r8=VX;Htqb4~oAod$xt; zf$uPPGVcaX^VaMRQ8ZiP?e1DPaomHx4QZqy6(+0|79hS*Q2)|vlT;*bMpye^0 zUfjMbsT!OKaWJRk2P<><-5PBRoXG^5o_!1~g_H5n`*fGpf7P0=lPgnUIR zv>d1>d|_?xmEIRSvgTlIhb?xVd#oBS9KQbW3sg)?p4pch&~@_^m`mR% z?0q&ztO}2cJO}%7YUIL-^kK+H{dd&?iapEkdaL@Glg8N*25f0IR3a(CQ^{4_CQTn^ z>X}&#fz=8a5Z6EcU^PM{JgigDKtRq^|MW=sU%+Xfto^^>wAeM-&!j}ahXkx<5$87! zRu)~m!)_LSj!PSyL6 zXAZX!k)&4NYqi!?6RS3yPsAG%iYjK8G8=i^O4}oO>Q$sT$s6w$$a~K}m>TvR-+*YW zMkei)o?tqY)A$M6*Xu1e7T-+-KaA@cOD|kR#Kq3-)gz;=jvH4`xPnG4z#1T!8Ph{8 z8?b`PILY5v{7J5@9>%=$R7ptEte5JPwZCS1QEfw{$cH6F9l$TH4#Epo9?k3*#WeC= zIyK)N6I*YwcRM?oJyi~g6lGq-G2reo1tc8lq*P-Nlg={bAZ1lD<#C7GuG){+Cl>h^ z?MSe>N>jex_5|EGVlyxX;ADl{vh-tl?!pbiDkkaa=KAzNPzd|j1@41U>xD19Un#?$ z@6dwdMc+YCwnXf76~-Z&(XDSU^sr^FWje~YL68T0=i zPy0V6fP9VYf5y`gbSbKf27#qy{WMIr>!<*d1lM0YQFd3Lm<1EFErOvAj7sfuCEw66aczr)sN0+YpT3+N?09u~hXg+n#q zV#&|PTtXDm_}Uj7$)OW_$ch_u6&i`xUf$PDX$HX^9>w=T6A_`EUnIPG>2d0^v zEHMcSR-)X9-I`yhw34=AI@~z&Qkt&4M@O&7$Sjx0*O{wp$^T@Y zr|3%Mz=G-*^xJ_dep$u9xD|Q>TFcq3f=m)!JIO}=uBO^l(VGYKftwY#G5Xg{y2ze5KB#qeubNxcg&WhvhVMlrC^&E^(vJdAC|Kv4U}aRR zK}{qoR2UH47`#U;>$%BIB*c;xb?n1ok`u)E$S&CHg&qY}UW8wZa3!AB5Pnq$RjUl4 zwl|C3)fPi7QH|DJ!TZH02D+rKV^OLgH2LYH;6SEGjZSm=eE8ivD=&c+WZJLSj#$*! zF;pA^B$`}SN*5=vT+Vt~sZAz0Yeumfn~s$ag=Lhbay8bQ6$?S_)RfZ;DPn3jBlmJD z8)HP&;`>iOS^OeANZL#;S3VRNeCb@}6gqWZ@`SjJI+GBCg|z`0N6f~3jozjAa$x_o z-z#9?BvkTcnh&O{yAc{89`l~=EyL_z5OUyoi{Gf-&Eul-vZCkY8Kk-Z!_@nEC-~D% zGU!l;BZHo{8O0*WUz`}SMeD!f@}#+jxsq?Y)vJWRR*)Q=zo9KLGd(!6@K=!LZuy#N zHb+l;e^qK?NSXE)F+}!){Dm%zG=mmtxswl?0HjR9Q4Pi`FvESkC9Ld`?M!7W{-q-n z7_4gsTb641wF@P`>1}*V_YpC?y_8Q>YhxgLU1V2?+m$em#6$lD(fwuw4X{587mN9P zL3Ayb_th(hPPNzyjHM)+-WLDiidFCJasM(lRp3)5A*KBoBCSEo+>&*H>rTqwF-R?F z1hBkqMIZazW0>nC0Nc~zSna5rtgE58pk9L85x=7V1FD|H+A(@=9&iyKMs#`u3G~As zsh&0+4+$Gso}w$A?b?}5GtP~E)*t;H^IB+Sl(zf1AuIo*TKB&|S^kd=B7iP_U+2*B*_Jw|E_mdv109d<4z*F#-elX+l|3tIOMp_2l}sK_%)36HyKn zqa+!~+Y$l^i zH8$)PvxOh_nXyOFsF5w}8@{)Dw%W*$b(~a=I#jPl=iUk|-n>^&Qy9|Ab||Uk(EWvy z4RsGu?dc+?5YaH}QiO@_{FVHQv+ID(ysL%KqLKK$xnm7~F^s`aAFut3+h?+#Q$230 z0D+2D@3CEr#sHL+@_06kT;n=Qow-ElO@aoY-xz~(JF1?9nJtY%=+CZOyD}kh0*Ibb z&>i2J)}oo*6dOi08!6A($+hJ^+V}y1-hl4vO}XUCw8%5dm&gnDv%;aXTcnr%OJomq z3lG}4n?=u}v}7L952j1z#2<5o?6-BGh{TewdJu?Ng0aHFqtW})YRFdNL5O`Miu8lqyo5fARaY3Kzobt%A&eDr$=5x>?XDQ4^B>2Mt_A*l`>TuR zAc<3x`?FMM{Ewz|{|lJpKTg}fW#AtUx`MDEg=*l0Z?N^DD6@m#NrKp z!1|?fQk=trZBnZhA)RT-$ruKnS4gm(FY?GaR5Op~pZ+l4(WT9M06}lY59ya_Da(O>fgZbf=W7W!<-eHTWrf;>hF(~LN^ zcFru*UV1Hb5I2(*ha21An5xOfn8|G@S?2aQIYu*iS9aWqeQy^RTqewhTr!zcEI8oX z(yj|NBm(-rl7{|FvyJc^z=@uVu}%DZx$(qGSl^V2JYz*aBa%Vcm=~|A8g1fWV82n} zmM8p>R*nDIn6W@*n`3uHZ#S7!txe(3a?^es=0RWP#%;;sD%>n(k`vr)Idcz&HPhc) zt-t&D-2%CAVCXjGdu9e&560=oL`G|EEfuwrGhf)jf47giR05uuIM2LO06;JJ`BlJ_4aJa03mCw|UtQo8=9@W2OFE@~XAE9Xr zp~o=ehnB4k`xa&igTUTB_WRgvnbtX*ssy^7bK(1oV-$Fe*3ps2`W^J-}aNR!xrNf_Zj5d@gN+zLdPWX3fxHquDN;fRm zg}iAH+sX5PMv)(rwPsmXbpAwDdEQZ>a7Q#RIY!(eZIYUN2mfy2yul0wjC3Ya#cuZAHHq1~MO_((pQZTz> zD5PYyXun*dsPs@)n&Rbe0Qu>%iOeTmtjH6mh%(tI%^kv=Ts50iuQ5mIz8hRIt<_GG zq|up^CXQRX;QbRtU38|u0tZjASIy~CB$oWeFlQN z{aptEWvzplr8KfS9pLm?!`@Ile|>x>j$$FidL;apxo7Y}wy#38Re-o=-n zexeCljrxMILHu6n4601CpRgK8|5>K8|*>% zTaWj8<+jeb5<{>o*jEHKTZAS`48bHn&}WozqTFo?7ulSs9^4CY2GBm-k(BVnIsFuU zx*`+lJoVsDuc!Q!fmt9S57xGrsU#UIrlKK0LkcqG22S-XZrwg;--Yea^=fW_tzTYn z05U5WiEBin?M=S3WY|G{ud=1#4T;+t;N2V`9P!ws3ZJ>XU8-Kng$y{XRp!7M4O#D=GmdgLqdVlUKBd;Q>*`f1rF){*uG_dkY4JLKCMM%3a^VYrYQF-U!CN za*fvLu@Lyj=NpAMU!o6(CJ~xUrNBrht*|s@_l`y=BXjPSS?j1s<{1s2D$$YF!4Id< zu`Z1*JjK6Jf+;<%Z@O7lK3DftiR+gHDen)S0uxHn8iil<3H2)oeT}dLkgBt;$+FeA zAJ@$F3*B@=^@DiP7kbC7HIa<{HZ%k%vrq$q!BmjUgL#g#T$RDtB|I4m(zzjp;o^B; zSb(%%Q|3ko@LLL^G`5hi%*aKV59ywvVvY09h|me>r~UNcC88SKe6`HLmF<3KyhNQb zwanhxYGvh)ki^P@`9-l>W`#lf{ct6j1nH<`Hr;7>1;%vG^UaRe5$xl%zFC@>FbL{E zs&$~2-^CkSsJl4QpZT%ZukbuNJ7~ayMWCmw|vQb_m^ZK?u=ehOmHhif*zjP+OIp;b?zv{w8(Q& zu5%Q@RHZBUFMdM4a;ThHaL_vT*LL8l)9vyn$@(TrRJcm0yGoMZciM5CBOTj2XXyui z*f^PHj6$|5cbf+%4oLzex-$HS((*8@#P>#KX7)beXU z81KWA{EGoK2|G`1y6ghF`_E%`sY{K zZ{#hvJu^6F+5zmdEfAbYTKSJgmRvtb?W3Wy z?%xc9mI~^-P3$3Q+!BlSEbB&*6_-S^G+A5$w$)rBcx+>`q73S_zLqhKYcqPyH9+fNBbKXI_Q+!t#RsjdJ2qyRoDANhr@@*Maxm9!-baw zzU%IV#~0W6Myyu}r8<^{?2?sKjp7ocRE^3K)Kra<5|vbq3d*9wMN{*N!bP*v?@DK^ z2c;soncu^{yC#C5x;B8QGzSo#cEj}Jepcna@zNQ)!U+ZJfWcJRPcw9Zz;bMN2G~ugS3;@8QH1q%(g{V13*+D3X8o0p{oQHG+5Up5A)p9^!i5o=vmL zP~Ph^2H)6~7w$)Ql+!D6*331BwV`WKB)P5XP+ap5weBUS0t~7v8Euu>{Zc3wW_cS{ z??P%=awipkb|z0jwT4HZN}R{|%F`~Pt z$sIYE{G>0}9q46k7<9qk05-Mt9{p>Z8>~q3#g;l-RSZ>bZ{0?N$vbe^GYSuzF=Ns{ z%?&zTDH0$=#3a_g?dESmU|)1xD^sA6&cvn%Tf)zoBDK*owb$6T^f&D85Xyk`+o?yhZu@QVzqwm}rCwTrerkX!>6Clc|d{%`={t4tQ;+vVPHz zX-1qV_pa!N7a=-9p?11tiw$CqRM$@BK#*jzP%%>#T}Y+;jX}Z=^YxuZni;0JceV11fvKjle3!Yr0ZG>D49M(rSle>;oOSItV*=G z`pxZgzR`#gQEASln`DSJTIcmsr{1&)>QS-!*Ayc{JXN%+b3FUd@R@=sb}mb1`U<+) zAwP!~CzQ7#)daWaug{Vn2{Z<4phi!a#k#d`t#{;_x`={cZYrb_6-}tR$$MYZCX5G- zDqTCKAEOo~p9`4HN0x{sD3x*-DH5ZvRh9ry%V?D7RAG)N(KU52tP$t;{mRpkE&A?I z3@@=s!Q-5IklsEP%6U0{3(v`6P%_=nix>qdm-x0kQzrm=ech6VZnJs`o}OIfTODLa zsOx^lNlE?cjM z{>TSw1~t`YS6@`?M)2W8gi2_k7ShgxN;}oNm6OeWN@bW#6f#&4ps+Ik=zm#ZXpKVW zUrE<;8hw;E$Yg7F86pMY&bSMdMFJa=r^&cVb9|r1X%HodzV_*bA;yEpCmt(b#JqlZ z;EuD?2-pg~;E84H6@D=J*_zlat!FN;N!ZXDK!Cza1J)%m8;$wVjZ~m z&flVW^NdR~L~#p^jGZep@t?%U&e0U$(nNi5#$*mJ1hIrhGBCrA0%DQvP1YzlL*@g| zGnA9H5jdb=pZG~qNJjf{C!}IVut#N_H%EgT28Rz;w4H<}sO`f_LI!gizw_4g7q11+ z<;u92o+oqT$wtlIx9o`$nUSr>z&*e*o96eGc-0KUF8WRon$%fMK|}SNA&3t|+NFnrhAt-=cmS610u#x=Z1Uc# zpX45>qI6VO-`$(9W=iRA)PxskRPeK~cv_?0{UWzqUqp4p{<%e25r%An7>a8rfTuzd z5Sd2PuxpR6vNWv#Rbc2&Vpez$9`fyg*pl@;{CR#yzLuUnr`K-;*raKT!NWt;Gv2(! zvLYp8bP?I6s;RAS4LO?Q~7*dWcmd6+6eCiqm3OR1R-H!z z$c?PS4E;cCkW>#7q_4K$W=9(((jKbPSB;$CmD@@OYjk$`0Bx2RP?85!<`!DCGEze| z_jEm>q>s(@&9?;uR-X+W1KI?b*GXC|G=+%^s>%{nWdk_(;_n*iw*n(rerHz_jJ|3T zlGLGwFK$Sf9JEiRD!WuEYh-q3S7<$u8AuJ<;Z+q#PLbljVv8L_Kw3%7>8(+Uxk*n| z!=>nslbV?w2JC7oR3nqX^bt3R3VyLZ1~)fQ7d(C1{A?%&yy5aEp)JzvqZ{qv28N~$ z*2qc@%DyTpwrkhAf^3qy>L&^R>iG@q6eMibU(&lfv&t4J!}O9D+ktIV>8NZK{rZC7 z?R!4M?EkJICTFomRO%`l@}bt=cgVg{S|+Qn!{>mD%VX8zPmXS!@KiG=+WxE+Pv7LW zDlyI*DDou9E1c=e%;ttj9pJ^EDt;TA5OpZIYi>_7cdA9ZUqPBsG#zgf5CyTc+n5WI zcz``C!>knszXqZaJekJ6v|x`Frg`#X4fDLD`}_P6{5sIrk0Vr%ZBplGYiC&aP56o% zG#bke_=F_`gOJyOySO-( z^z`i~s+n7KL>uUf@n2qKK)4Utdd&qVEUNoyok5Rb_OI!ieoA^j`UXbBnhq|D&tSk& zp@2(w^joRD7>=Go%a5kEd!b5ABYJ^aw>q__JJsf8_pwLGn|3RV;;uDXQ;dc!$~Ad5 zmY*gUQ$tb;W}}x50Mg=mq39tmm+7=EJlI3_Ay2Mu(!F0D@X?P(d(Fn_%OjzFHrAds z{T)i9+NtFA@Yx=N`RR!IKex#I$3TLAw^m448ydM98GgEy{a3j^BKEILWWZKV!B{1A zmLCxm8kT8`tx$V_t6mNue-sQqB&qLCo@`}u*Ae~T2P9dnc<*1iYL;lEpwTTH%npYs z51#w4&u_O#-B4&e<8H18Ij4G?Vvtc@@r*d%2w)g|#J;>N$1@`7BkfH}2PF5@GfxSP z>q}=V*wnvB4l*f9;KWHf>F3g6)@q2zm~9$yUDR97YN8fz4Bpo&Uksrf5PTn${5_c2 zo%X!ZdO32g?k3%M+1Z#ciR@8(>J3{_qK=)>iCSEa8f4FW65V}VcrvYaYB_hb)Kc3m zu8IAe{QG|7f`imo)9-XsCG-Q-yfXD=n%AC_bNr>cp>u7s7!q_%!Wgxo9vY?8qGN|$ z=tn3V1Pxgu_6Tta9Odi~xkBP8hdJ5dHy37V?R@R~J2141bA%)H`oIIc&o<8259r+% z%4z9kQw0OS|6cT=wP|AqpQvX^QmRk zn;?-vw|XegNSCAElk!i#+hpziBhv4%I<&f3PCB>n?e?S zN=Fd?Sor@WLH@~d>t9}*{~CUUzx+>m_fq$)(^T(`(B8`OzY^x)Pe+Ab&|$@ZPIRwFaXze%wcuyjTms$KOw{z$jMNM$u<3QzM*Et@ zh{>T9MgUu4la@0nTR6E;@N78}K zj<%4=I9FIsf(fh>Kg};rsbxgbMjZ}wosMfw+sC{=#4hP6Unp;voOpaXxNh)JG^(!b zRfk?tkmx`iE;@!*VFD=&C$(qE`M#<6MNYCnDJ#2xBYu3o0Hr8=cO)Hkiyz3r0nv^mH z*3@{KgoMIbxxkWv{dsj5`-^80I5uFOs0r?f1Yc~#JyG=2L0y3mrSR66kJ4*~Zr_If z#C+BuZd>~t08xKY1t|w>Rue*1fDj}W24f~HoG#7_w?H(uqZUMlMqFe>CmiI_qnd;! zr`4-zSm8t~BAV%Km(9G3G&;S9z&^*z7YrkrXfVzimC3Cwx6LgwnsrhQ4Yxa3JaiCT zf5val1Gk>)D|}F@2)Bpl_;`0!a*OYZ4@ik*x~U#^pT%=SBD|~rl|!RvmCJ|R>ZYgU zmd(>f_3ZVQSp9lr6%@EA=V0`>61A0Id#M6(OT1HAFKPPQI^N@Vm8F6a)%aomQ5rDJm?Y3%U=#yI0`TeTc9n)d2TkT*Bp_E|k zDB)DiCA!i*&3+-Exu!DNc<8aZ99hDkv=Xa%2tsu*@8uO=oJ^&5h+377g^FN0C=D41 z`WjHkW+oBTqzctk2jKd2jTzJyTSizn*kp3r09IyTdXPiY4Pe$29)OmHj00)$L3piHJeKI2o+oiHAx$i%XE#GiOVZk5 zn-+76%Cst5Q%F{ch!K~Pl8(`0d(za)tW=7*t;%`8!P0!v$?BQPTU1T-I@AnQk4R-( zV;wv38d}zZOdr!aCt%rL!INTvFqrS<(2krcqO_4RxYy z;LFFFk-L(BMITg#DV)$0W(8ziDPQ2-rj{n%NoMdYEl?}m>cLmpIu0c9yg27)vjxe# zS4y#9yj;DlAN9HzNx%d$CrA=FzE+0tF|IpmN|b~9Aosquu()3~rPRXu_r!v&aB{Cn z-eTtKjv-AsB{fDmMUnd?9+7)KebTmZ5+Wr-vhNfPE8F%kQvpG6(e95dy_p}cJf1!d zAEl1+xYhK*byecEHYC@$R_9;2R_t!QV0I(}Be={ADCP&b{i^otfn2~c^XL()h)Sfl zwl)hvm;|h(jDHBMRP~-%7koxn{tZS5u>$c`d`|wQf3zzg{pUmL&yM(S{qIi?Q;kto z%%Tr09EJfMG(&B~B}kktCJY&$I0HhQ18s$+FP$S0nOfQ`TgN4_Sz6;SQU$vJG;ypi_FwrrzTgO#z-Rzm(S%`(dCQF!>^CSiSaaco6P*8_lIpEpy^cGaFUlz9{!)#;LK zDFJPPCO=}RNUGzMFAjt(Aas6LFcd+-s5d<(V9=g}P*k85@=#x>$9)k23II(EKGQ%Z z4&A_~?WSJfD~5BEU?v>B=FA;%05+zzesju>3QU!;D{P+vV2PSi~)0P?1n$^hG}E?@?#(b<4W&^en1q1clt&=*bv5* zVRPzRJY0auX%YavFuY-W!LTuH9RUNi8wCrZHwhqoDTOuZ&A{BY0LJ$62Pm?V2M4gG zLSEPQQNN_ZnmD!~v0DYW+m%2)_cKvu4l1Bt31&b&540$|{kT_V4+;;z-xUwO{zuk> z2VoZ-8fuNri`S0}m$Xj~pV+N{k!A9V0C>XuQK^H{k^A-+Ne(65Z~--zw?dhgpZNZ% zPy_ywt3&Iq-m`dV3V*y&Ma4$=1~O*;J*BIW?v%}U5iZp7b-+GFdswM*b;zG3dm3&M zLytG2sBAa;A{eUn$nWAqv{%iTG%%Ecb>W(7zuBhc?6KcPhVbffS_UF0pZW?Yp9c7p zH-G+7y=8pq3V++RrMwCe#lTaXn-P2k@KJ&R2v7ytHHYZY$}oabl(|DeDe;0ED5L92 ziPTE>U~hC$Z3Asf-H-`^Vuf8yd$Dgu5b~VP3_Is6T;1V@@xw3pZJDiB;O#o>Cw%3& z|LS#4*61t+(6@LfU-Mq(s$4I<6FmYCyg8W~Sv%ZMi;eE%=N+vr;<#AoRQdeExCMD% zY-FDk+V?DDV_A8A(SFt6YEtC;9VroqI48JXt2*<-iv%(ECOrS96QjE#Q1|mlGH{iu z_%8@c1!Deh174u|@d)c)8+;KCH_37pMeWTqaSa*$h>G=@Ps{DN`hlseZDGtW5)L)azZ z@VFMbk}-PihFC+}g+zXY%Hi^g8gf>fLy=#*<9Q|z*MV78>$+p(ZyCsqnKH-ZSv4An z3>c`sKbM$XMiQitm>%O3?v}-P$BA}@sHs|=N1aYg&Qce$3ZD{}sVIu)GkFOYMq|cf zNDdnWHN1S{9M>_Q_i=v+)L)V}!M%)I{Ehw^a9dB786MpiG-e(ABKm8$=;&iGc;~SY zG#0)_l0-ov@Pq~GrlONx?sL-Fex%}V%f+^qR&H?Z9>#f1*h!TFV3fgod%A*7Fd#?f zyU41s=Li>FP3x#9*qVxbrL94Odp7rp(S$GI*bxULJvfgh@`E|+&Q=IBR!53Q6)ER< zMNR-7tY`QquPDGPV32(*NvEl}vcixDIHXhnLwG%8^>BUjsCK6i4Xv+dF|Waov%la4 z=vHwdRJto!4~VEIj(EB7C7I%0d3280>;Etr@9aT~45wB;z*=oDbqvXjU%&_n%49X` zE7%1eISgs}$>o9uY%>HJ>{~o@czRp_ehI`W-rI5@EOiRG4);XtANlg-yT9v$WH2G% zV8d9!1TmlKqIrfFxp?l|If_bFShBZuXPZs*0~!GXQg#w#BXqPvmH#y@N2 z{fN??MEA6eNLZalbLf~J5Bz&XZ~u4LdJ&~i_oA4uw`&WpCj!QG0qS&N70$Ky{A_6p z@d^RLT!*d)HZ~`-0D@`C*d!QaPPFO9%*ueKpj{-t(kpDqY;ggZH8Vo)3{qA-0b6vG zY;nVI*#M#;K`;bF!OmXmhJ?0uw&G2cuu$CoV)$j9NvPoX?Yk=ZZ6DeA@jQfd=>hz` zm=M=*R;&w+*zv(*rmyZbmyJ{4UQyPd-=lPUMX5*K)l%NpNVK;_9sW!S=_Sk1o2W1h ztFZMM=PIh=cg(vFJp%Nudf(~_2oGdI_*62k2w#2Z_aGS3{2F2>#$?ABt+D=8iS6wf z?-oAf26l$VmUUEh@xc?C>qt7BtEZrYr)5Zkx~+Bb-yOZcE^o$*%d!%@4jvp>g~TFE z2NeaLw0VKdJ#*dI*)_J1c!WI0eGXiG{#PRG{`|=h%RtmLNS6+gIX&CNMCnJw{&%Mm z%0QAei394yRJP<}B?6+#$=I>tFZu>{$-Bfw35gnrsWtLo{4Mz&9wd5XbHk%N4id?G zwo6fP^G^jv7gb*-3+L)G+&tDxycOv*TWk^rL#BEzcfkZgq9(lK-4#){xj|$BpVXz6 zKnfdj^}r~hM77sOXtyY6(V@xFQnJmY*l2oNkASYNvQtaWU`+~jp*>9zapG>8MrP)Y z>-ltz%&|*r*eO`t>SPm%%*AXm(I7;o zHq=?-b0?Z`S(kU#WUGQtKretFX%zA;mW&aLt5+krA7`{A21tb*%$JwEZvv3w%bt^s z#*gRy0}7V~+3wW7U6A_N^mo6G$2!D5X-n4n-D&&kT*e>qDf3n^04uqg+q)UwJo4H- zJ<2m4*PB9kEYfEmn{jVAWGN4U-NvpdsVgu8jZ>A&;=|(#Ch#^~Qj?P_OTYPQ2DsKJr{9=#x6LiD>_GQXmtv^g#{NhC(XxU z@^pW@OpzADmb#jbTYhJ5XDl`hQO#tC%sz#QNr}V7MMFQrxqd%Re*AiCQ!m5Mb7E_- zgRvc2^)|?E!l@0gunu?~`nHHDUtl>L7HG0uRYKd48R%CV$tCn#g*$;r4Sj`sNqI(U z2>7B=FN{hg7AQK|yn1a=7W2{+V&*Esf>aB~hwPuur6xGZ61YzTh9)7PLdVP8A%pj% zXv+qQ+C%nO|ljf~6aXmw(a~$=F_kFpG=t2M=aSCv_;s zcfe*REN)STU5d3@m9IvSoLQ_v)5N2fACT81v{C^&NL?WhNvCCmQ4W)k<>-v@Jq02_ zO)?MFiOV#1?fYtJ;(OMG&osi;Gg7xE<5od?5K3GMgluF4b%^4ycgg0d8^t$8(l%)A zxd8lqkSSuP19ZV|ImFHZ<8&m);gKpc{QG!k}q)j>sdx&X>;mg=kL^pw4II%^d8xlW{ zHlZyTJ{j%(CTHYYb(1eK#wy7p33vMhA?5=FXH6%_oiY$)M&RyRmVLTC77sz>~zK2 z4ST5SRFv;lD@eN4UeUP=5`OqzTWS7{$HW{C!j@Cwr5DZ* zOEMni%jBo8mS-~j%GU>CBh$QW-U!q{(9^yGjs4V_;{DdO5X$YZffD3&V@lKndyj>> zk*mg>xs<$y$Ql4EGR8U5G z#(Vn^N#vej`at%-!wF-5Cf3IzrT>(cfXoV~Ap=r}YR&{}XTx>kpD2bVFKRS4e7gQ9 z@bIX){2gX%g*<(Fd#k$ao#T4F$0zw@=(37re}EOAo-&DVC*0NvAOHyyO2&3@gF zPy5b+M`Gq&@Pow$g>Y8{(PGO^pJ#%JdZq)?eLd<{ZCYWZ-oGfj$ge1_D9o5-f--rD zTDGoIUwx$B&zMM(NfLU3G}%;rU2R>RQ;k!-xz@_qJ-R5Or~_qaRV&PjlhG)7Nd9`4V*q_ozOk8S+ zZnb(3#j)g;bRvWrzl=TL+lw*eN%`5&MoGIXjEa6694;AJ(K_i@t(OyC;ifv|+*!0o zx~*aleO=lbRT|EpOl9XOFq}(fmeE|4JKIsH+=p@<-<-9cd&I_4F|)JQp$N}e zA(GyaS*rgS=gymE$Un9CelSS9SWEM#0(Cy*K`x~`BeabWa3VidSHOG~H{4OMo{JY{ z-c`J94(i;GCXtF5Hi#SiZY>hoP&p~xWC;wSVg%md^wdlaejwybBcRnb$YVF8oV#u# zc?Ji1-&wUL$+)wT9*}x8rB$F3O|Ok57EO&N!bl^%$mN}RMkiHEph zQVybUGUd;MAAw=y=PIbxw@q1x&!wQ%^}KwGkk9>Z=3Zp+!$BDh_0eh(;w z(@a?zyvXplU-dG&Si#0$k+mq$;bUckx1DoG%|Rppp5e((F=9O555}A?F#HZ6+M+rc=UXeqGwJW?TQsP1nPTkc{BRyb zQ=@j9@_GRn&>)P)fo`Ql{rxkcyzl*B5UFXc7Th4hKL^HDNR_&3qUIsWJzpW(!4c{Y zc^XbF`C3di_l}3VrR~CvwWta6#GnHmq_9Rw4!aKQ*?#FfSK1tcXRly-z7MFydt7_~ z!#Y<9^blRgZbZ#{waZPOhY`N~DWQpu}VO0CCajJ zAfI9L+UN7SR5Qf+K!D|hS$8z*D@Y;5YVc)V?(Ch;FZk#_*mVtthpqeXe^ z*6mNll8G#iGi&+2$Vdjt-x+lgXWDU|VJI&Sf_O0^W$qRzN-^s}G)jM^H7fbmXtRH{ z;Aq=Ru?;ANrFLh?Ms_7C*-tY2J5f6@PtP5~Jogftx@Dawg9}JMvb+j5+vO6>7TU|Q zKLu=5kj-}Ft5j4$M>np}!BgA9EP#f>Il$nI7#dP`S=yGJp`o=+Qu3Ejh{9l8Sw+!0aXCijfd+*tr0qEV>CXa%msb@y|9nE{NszonZ5n0g51g zL8*ipQHGpMSuJ4Xk~EO*O`L5 zeq#ms36~>&PA^@4!5_$kt9UPyv`h6O;Lxciu}7+dMoCbu0mKF36c(rxK$@!q*%hP; z+9)9)J1}WAd{zXhH2NS@1_f=Ta#rsE$>Te-UB_$ zRls0qVR^n)u3S-PfoQ4STGx7`fVdv6v^By$`kR(S8vRvC2MrYTpW+NM>p%h2eVEC~ zG_SABw1J$MnHAR`!j(+ajMNO&Oh(^+Nfk_|V3y!aFjR5a0kNT6J!aB@Ird_D#1ZcK zK6=sAoz+U_ZwVQy*iwD-A?O@MrcIFr>n(6oRyWAH#cO|fFDTsXRol+a@IIYhi;)HZ z@#UMF+#lp{uLRJwgd{Hs!Uv~WVHL%tQc1F-WPs`mK)QtptC zY~b8-nAS<{&joYqOBCrEQ|Ty+k?eM&L%))89L*I^Kk%9eyWq-GwjBX>=HPC`9zvtP zmCUn3YV|?M{pKTYo1N5yFQXPEhbzDfRD>OUej?mI{Rdh`E#_C5xS<$y#eC-C>1l7u z{4x}?l!3sN)C75I!0>i%bDY~5$ae=0yk8K4TsFfUxoLkS&eF6EsWZV?9bUW-!2$-v zXH@KDaAC47QT8AHi!yjJcbr1Ar+@W#ribabMSQc3sQ;8lvi{f7?mu_fGw{$U-Nfr&s_sR*UOPQMb9!a>Iq`+IYESn#Mh#FsdMW0V<`fWp9c^AJp_CLz>$ z|F}Lcm~Q>6CUn)pZ>PMswlkb|3jb zpK2=Sl|;uTFY2RUsxGaXi%PZ3DkFWUe&H)&QcJ_c#`bDP?c^wDr{($q^S0WWo-vYd z3B)%0?ld-*dvQvkT=TLs=Bt@7^Xr*!Tc~#-;Mxy6L)kY~b}-3$8mt>S6dnZIs>)ly zMw-TMutsoi4s2@o#wjFV7FE zA5AY>gH(h%sJH2%E5e;5d#RxtI^5G^9(2X}Rp^IqfeBQ#RX*fJ?vKw7j-knDcoiC>l0Evo%$ZxgR*<+~WSm?DK23yu1V za4*dgSumzeP+nq13@%DFtBWJj%R#t-Hxrat;8JVbVr>}D^8ooP6H(h-D9lUv<5c3G zgMriGLfVXxY>WugmQnW7p=|W~|E3CEMuGSJ4S@VjL}+c$o)n^-FtC#&u-@{j|D;Y@ zg1+8viNi}`Ci(MI5L=g%!}vf(aY-%8+Po;Fh)K(|B3myg(uFarXi2D$!W!p*y}qr< zx45obdYNt}J+S!9!Ugwn6zgrMZSF*GQJ6v5bXnhWzrD=e>T*H~93&ByQ*Ef(lO}i? z=%LFE>B>P%&w)ah9tx4aslHpfx%fM(6vQ@(P7Tvn$gm~7Elz0hqZxrwT z*@p1)g)D#xxI?%IUC}bMtvD6wc;HaJ)+T_R6I0$4U6FG%Gu>ROxW3RLXI>#mQy1TYmIs)?@r&0e1Ukp9Rqtro6(pVk^9u z-3_7bl!c;8TvW(JjVrz^jJ3*3QexbKIR=(&-~qmX>^+rLIFx0Ai3D*IL;eeO?RB01 zSZ;1na9R9jO^QeyKmKtpS<*Z*p35=wjlXx3A$}?mqMD)jicGj+c+@y%W*a{UiRDaH z7@VpAk5F620xk;9jdm%|2ou*?H75TM1D5TOnKSkWoW`lEG_Wk@7ukZwAULoF2^LQ~ z0+|w8MV{W!wK`)UfE{9W0uOJSmH9H&%P4mOe&e8pW!( zHx2skW~{LT|9+-d@XQ}QOo{C{WG2R8AKGDGnA^6)-rxVw=HV0GMherPY+4($mvAA2 zfAP-h)p|xodw6ng=q0}M4F?dHTS0UsSc6|sP^PWVOoiW zZiA=ns02(JGl>GH)Ohmfg+0(3jIR+o?G=&9Q0#N@C0j9}Sk5Nlb2=lTY*trdhU#q* zoQ1#3;R4hMX3skO>PtnR9DJ#KpyzGYoRLY~6IaumCbA>yT@m!7pG1V$ke%;uj9aL6 z`lw}$#(`HDLJx76S)Ijr z?6LX`=)Pp#i7Gnzfu-}boBT<(8Btud6g-xPbVJ-UDH?t%>OJsGoE&Fferb;-lRNjN%ZI5HJG<2FwJpu?TVmb9z<0 zCfk7w12AbM`PNnIQ&*l%>r+KlDw->#gN+udnjP0~-Pavk*59^_qqs?&U~r!*ug_=u z>p#;x&zp|ZT`AmuABbXr%;Zy&cTbU&0V+Bz>$@tKHcJ4NESsf6mE+bW)|T}vmE-m$ zxE9Wts%h7XESsi@s`f357R|@Re25v^AZ%6olOi?W2_EvnP;gqUvpxZ>Njt~^Y##Cv zd3eejYIsWfH1G)fPyqb^xu7q>s2+VFMl^jSLm+0gQ7C;RlMp5;#<#5s6A4B<7-hgd zxB`O|v-;cHF>sGjZS2N7;0&|EwAp(D6pYT;844hQp)+>F9H7F`8M~njR%Pl;1~|ji zn7RQEWQ@y&r=;`+U<^1;$OWUP@DEsy%LQRi)IzM7wLbeEKoxM?X$-oi@L48SutWm?HoxjB*W)|4r~e7jh7zyB8@ zYgrDqGq=d;rL34?2S0$%tQ@kztQre?*ru@b|@%;LLab_V1ntcbohl8)8y%EA)af#H*17VuJ53ycP-+V7|IL7*E)|fT_ElVkMB=F^uUM`8 zbfd1Rul%!)UP*HB!ddM@#$!;Nbr~L;IrOyT!iEX`)$z@gHBU1py=?_MCTaq2HB+7~Gd&ce$~|R=l}iR8JLpn-}d&3ktqik=o zU5#P#n1E%kS9n^WLQu|dM0wk?FZw$aGTZHVQkMVdyF)y6+1V%CK19^;ep6|-u1WK%NJObbU=w^gUHhuD6@GFs&;6`JKZyPT+yq&i?O!2F1tv zzvd2Ju_DI>UulWY*qO2~JzRz+VPuLu7_wZrkVk*CA17r+r=dm4j~(X|+>_Ylm<)90 zOb@5*_IbJKiTR}PylT?d^WOt^@1noPU)aW|2tBGt*r$G4NQ z@9jT(N^B&zHlKTpJbxiY2Pbf$gtutoS6`{k%8_5gi$?h^zLX;3AN@r^Q{$=|$`r|y zm~ZW6H28(a()m6*b$mQoln{0W9MA#(^z4QTWex{ABS(!2kKq(Mw+NcjLf=T4c-E)q zaR?>+Iw*8tk-lKnweQ!>YwIs03FOgutR@kIz!Up70?~COUz`U=nmiHI09h4&#ASG& zb4<15&qfkdP-JV1@#4zbcjdInv+K#Hp6942Yiodrn5=L-6zXzHi}uP#mSzCIgDyQD z5jL9L{$mTM7~!l)v%(dzd9^}A73MJsEpty7F2R5qbTCjOIGASEZjAUH%b&o>fXst= zd|-z3ruomOW~{2uXqWmXi}soV#p|;>SEsl<0twZH43a!G;#J$g_)12!6(U5us5wV+ zdXZo?4qH%U>psMQR1!lE18Q8@Y6iiQA@^2s-CQx=%oB0Ca>`8h0;vmb0U6TMT4#Ae zHe+z8F0H9*B}SY)IZO%AVGqLLRz&G1DKHqxKLGgvCv;@EI+pJjiGylsQITO|R%AZj zUEHvA4o_M{fA$HU4P!A{`X?|*Ppgzq{7H2*%B0Y(;pwfSSnx~6~C+Q;X#@664c*~Y~5DA=9iYYV|$6CR{)f(+H=Bp(7fb zl>ll@5HwiF~AI^!sH#;%{$y(r$0`xw^^_7{;_t|a{{sU5Z=2cX}QRKlVp zD5U`__e}qR8vC5}On&Xd1)QzuZ?<+$(T~K)F)5Y`DHBQ+&CwOW`Ft6t(yDg>E=^T% zjD?^xBdfRe?!4DTK6f(mLRZ7dT)U-^J#q>W~V_xa% zM>5hNr`^AU3Qk(_#OK1fRf7@?Pe&k^^$DQleGQa;uEr?5gFf>EY92O#3cnQLQ>971 z2BKLS{e@7PKp&r(e*Ph%X7%(M+z9lf-nOu4Ybo`C(ne~+yhbhMax9am8u$Qey4Ug3 z2o0e=!(wdo9XZ1;-c6#m+byG$ovaR6(R$l8i=-P~G1-Bb-;C&k#jv%O;u zj3*i-GPe2QCbu4p7uGSW(lJ~PG4zPS z2#eGLQbKJ5tMve!xX4zi!4o7MPqcmmX>PwYzXu1<(YODIM-+CUudHRP>Ln@DB3UkC z6*sQ94CquwY}r$E5hgFhuZDn)QY=kMWCa)!{?!WWv;w4U~a za?Zif>macR5ZfY^#})=|mRuyLV|^B1MD!AK=<^+{YLd-DP1fMh(->SZPx(D0%}!&p z!fF0_$P}wd>_G8JPGi-Os7I1IuH0z><&5P1<4-cmvxErDK5ZZJx79|tRXg`8sT6#O zYse?89W>?$Eq%C{B9pFx?-$J_cN!J030I+`ZH@QuHG9QWT$qi}7A$zf*FnJP>0sIP z@~ZTtx#;6F_mnDt< zjCm`ZDr)9n_((lzNAyd`ac@udi>7^x;U_FAdO5ILNfzXSY7;-8T;#x_!)sX$AkgOw zg^m(>!MRCV%1d5xHPiuecOzwV>cau-4!;dZ>_oO5ese_L15tqrrx@g=wO17vQCb&S zb*-SNj7vRy;v%9;xS@EfW6X*rtKN}W`_*>xo-w%TS zAJDk}DVL)w1yWT}^}9Sch6W+qxlB?RVJMU!ms%gy5;QOzv<%d|>72;juY>?T0Ue~t z#kQ%Vx%sM@R=d&@HGroCKNr8ego(g6o*>LkMi%ai*zu3+)n?k*VfUX;?-w>-iFf0H z8P<1$fg09#lYwhitp-30PGJEdxcW)0Ab(p{_wrg?m`1V+7pztDKrk$I616h5O|nHY zR`R#5lpIAJMV+CRZR+l43@wTLFAf($eM!Bcu48a&wAMF2bjLU$ldP)N?id$bMZMt= z=f{f5<0d=A&{?pD?NzkL&Z}S##Ggz=**y|MDPtfu1b?D@OXO0)9;A<2f~a5*mK@%2 zv5T`YO;ouD#EgorU*0-ckiyV^$2$Q|SzVh#aS3X3CWkNl>*xwmAq zZ;9%9Qy1RBUb%-SqRidPkBW$+z!2>l9)h8y=js-vA2RZg@e}lPI^G2|B8vpqvq`^d zvj+5aqT}`H46nkzxNQRp%g=`qJ)YxW?p=d};}+Q>)$i`fR~3J*YwOjA5K5?jJ|Nu~ z%zTp|>KUX-p9f?9_1#0Yw*a|Wq(8E+uXaezJp^%&JR(7Hi!(qttPj%68fg^jZ2gyg z1+mRKs;QsD2KEvUlnUnta!KLrT6Un?S!9hoS52)HR%rAhBvBp9dcWTZlya28X++j- z5_*Py$B$wI#H=cp>CozWdqy&C!S}3G*ajwtZ8T_P4`U|O^3Al~G>nJjK_&(B;v`6I zIVIRIUt;eD2EZn9LIsj^cGV>-NoHbW|D|I(?MO~-rhzUuAd<(+h?sBkC9z66D1oz* zq9`mZ=3u$)Zzz{_3vX3Um|?TKjSU{3o}vUdYAG+MO>%?tb7pa|%dm|n<4zcy%vYw? z)Za`SapShYq5VxAPfofyz4U?LoeJ>d&Nh^9{3gS*ntNrK-#JthB#@=idvp4*fT*dL zwafB()<32}6U+2{wnn`FDz2FSdoVV-ZUh2j+29|EwopNpx}y*BfD7p3wKR8@TVdaV3Fq;^8h}1A*SQ^LO)>hIDp+wQ~BIRR#~Ien29LpNAk| z^o;qFE(maMsZt`M*F5v!$>o$I96JMJ;lme`?xcPLGh6bLrcn?-k3R#^BI~AU6oO|y zQu-sE-}McY$x$k0uCMf~&pQEo0z!z#7<}^g2dMpU5hj>A*-!rnG9FMA%cApEBb)R)y+CHNK0dX;as+ z0mABn#7fZh9IHlSa>e}V^ldZu=OOM$o+2k{6ISn6$?Du)L7s5lkvg;_)+y4o3F}Jq z#V!;mwvlHIFDQ*>p+{Ykj?jf_<-*;lhpI70GzC@?#ZCk}DRc8zuvbZPD~eFGP&ZtX z0-t)(S6GXT5hqgw*twwJGeQ1@$QE&OQyD*jblygnxuc8U;Nm3Va25W-+jS;DJ|}+Q z)j^&$fc!wVg+9@MjM|m{=`3+#3^T}Pxb_MGW!$bi-Y=1s)L!{pAZEV-LnBbiNCYaCDTrhOu1st#WaH&8(>;MdVU!kvBUyd4M$hIVbj@)pyQG%~}Q);_uCV&4H6 z3eEr-Lo0i-Xvg_a+jNzjD_&10Vku=z(utP$g^`qha{{iBG24B8&(qiZ-=ejDHkW@> zZ;}$$WH#i!Q-6OZ1PDSPC_FV&2UC})2Nx+T4+?Ak7NdY5sTwR|0Cys$i`#Fs$SF^Z z5c_regIj5-&JayrPFpj5$MIpxL1e#T=Q!m@IXUDcLiK%IaHleN5qunr+=f&}@&*+PHEb7(o-> zA2a+;B5{mz3e~ITEWuN@ezkr*tpnr4?Ap{^f&fVxG5~9q$<2pM>`UYGt)unAuflVk zjh2ICD9@7w0?|mtroqk5%cvk(UuSN7&xEfcI@gdV-3G! z$DqG|*re6O?3e^Nej2A%A7d%^SA5~3<)!~3Ud}*7MH;-gBfQzR>|8|YN&rya_soLh z%Elfi*guJ=4~T00KL6#2#le|PfDX*WkozIcR#%+8(VC-M~$Vh*lZ}6MR-TdD& zxqlvw|Ch=Ach5=eKjFaN&&j`-92zGBz3+dt*BAc~^!pc+gS5!X`yZLym+SLs%T;&x z4&TpAL-JaxTJ-;s$?YfnFPYrVHMB=Qc zHtYKH)=w|s`(!*?RR#+8*IA5vJD1Bx(Dc$T(eMNt90z>6<@sM)>E9AorvIABiT~G} z^PkK3k7oM)E8uKyWn}E|-)w#k#*WTbPXA%@OZs_x8VJb? zu?U7=%s%JPC_B};ja(09PN4ru8$Rk(wIm(XGEAoD@wVr5*W|~m&)W~Vq3CE>+zife z&Ss}XC##ZNf+PW)F&GE2w^)+UWU6Nn)5B$7UU@~izh>JHV3Q7XM?^_~5&GQQSei?7 zi;bc41U8dN@!@z%*1!_e`d~O@I@Z($X;scwXAinZoh!@8AsN z&L_iXGvly61zIXW!hPn>!|@v1s+_vb9}1f2JPub2(zKk8`MQ>);VVLuo&m`d*ZDWz z-Jc~XV}8Yk#r)N*BtkBp^aVkQ;YH-QYPQs%d4j9b3{PsLcu>s=QVzQP-BM2fT+xB; zvH({iCWV$*O@Yl1_*eENs+f4T-uF^T|4*%XZ2y05>%YBIt5mF27e!EfOb~%O_+!JD z_MpvtNg`+^mBZDVes#=N=Ytk?KagBZ3(#li)z20174_s_mernd@c2B5x_j6{G=&r* zaDT*_GBVA0k9D~+K7WL;{rO4Wt5jRLo98bIg-7)w-zN*@qjD1gB-j`3AMRfcwDuFU z4X$yYd%z6~h{(JVAdp^sjNueq$IR(Q6hJMQ4Ui0uFfX0OFl#{$fEj=x!Yrgu=ZA*E z#OaR>mwZVFa1OwtrZ5cHCFrXRwWJ!6m$gQ0P@>&Ng_CT`+r#UYwZ`O!n<590m|B_`I?L|5gk7tW+Jl1e6sM-H`Z3cQUnrgyikUj7*)lY z$Y)uoyEo~&Vv9tTJenw8QA?Dv8jIdUXHU#J)+gt}PttIRGM#@^tG42eQ-0gk67I4`Cr^N>Q;b? zcy#P28^I4SyEZowUxtra0olx|imj zZ1}yrC|#UlMl+!BaAzj9VH{nBOS%=umrAHnS*uEKSZNhF^6V=W{Z?ITJhblVCfp)1 znYSf=4~6y<@Vg}zwQKI4bE{*@qtB9dFatwYiFdFB9Ch7QlE&&dd9@HmkaDeCSXrsj znI$GydUDqzKS)+`s5DVq!unlpVHW;qoxi8?kk=Xm5D0rCvPsO7qH|aPjSzK2+?_rx z_jVVF$F1^t039O*s_9+ih9QvSygXCTJL+LdGg*yP|7~u@)vEe6+oL-K75Pb4WQGY_ zosdi16mIOct%EfXA0A=Ym|Ob5Lt$NxJmW=iER}K4?xItIyHh<*>5O=}2q)J!C%rw8 z!r+X?~A0{ie5@mSe4fi@l>|R;G zK(_PlQQOVbiw+Y|Y8ogs6m|373?<;e)8<=e1o4A`FB9^feCDTEHy%knn(dri3Be(I z;LnbicmDZ?=ZZ|n>-^qFyT3yh{`cST{|B=e|GfAA+bl+u@|5F(3c?qUW;2d(px4|m zWMDFsoe}0wND}-&A7a1aRf;Sp&IFxx^uwjl@%VH2V7pVN;^(JDOqokaU56jV1Td40 zhl4O*QeOe{-toS>rGm5_vgbQjpDxc`j}3qDKOlEuC@FbW>T(U_hvLJ($77Yf%J(GT z9Y!VXl?0&-u~0e-2m)M-*o*mxLcdMJk&?IBD8V9lL<*4-_G;looYDK0(Fv(b^06h3 z}$sPyxe3>ff&00#G~NOnG!fkRpT z4iYRF%z`U%G2K#Eg885@<6uC)&|l7;KI@n_<+p~%^M3OwhRk1%3jn;9tls<4Be3qv zWs6HR-RD4Umy9Z90zZ_)2|1r3Jv5gfjn-l8O#&!K&wa_8v8~-C7weBdaYX|D-gF%k z{W0Xy*YG(?Q+dRy`SgmbF@OB&9!Wj>9=Dc-!Hfx35tu9L&m&5A=?b|9{MdWT=)ni{ z=7l0Zlyj@VE`y0^+ZgSpA>Ywly|H=-x#fu%_ug2aPdfNGM=69ULe-22E$FDrH?+!^ zG&5iXAp?vtc6j(_Iav8Cr~Eln?lZ)t2jt19@dwlU~D4F|gzBAaF7vaSb* zS8f+DB01YBv1p$+HRtG~yV|Cl+;?CYRr<}Tq@R;>qv8u#eqWXpF_7c4Sf?d=y%u^h z{MzCCc;)rRC72R3o#e~iDgqvGk6)X8Vd6gpkp1>-&+9>GgkcKKF19kCCo=Kq*7EZ0 z+Ze^!&L5bSrBJ!z{wkSxQ@tx@LH3Lp4pTU-qTRF&EHFmh_sOMJpI2^ZRjA9SKBeJ= zNi<=yY>?n}1TUZO^U`sLV%h3b(sB2HuzomB>WP~+#mlb=D3~8LAW9ep#x--l^ZAiQ zNXfV-S9JgWOv~sR3PUrW8Yx`CA?&eQ$hbqwcYkGguspd3w|!=_jOLE_=kza;yNTF+ zerDgeMiI(fc0J*8GHU!)L#QJ~A-6?PWKmF(KsQGPO8rz&L!7@FPNp((P$%Jjw@3k9 z<}?rWK5sVxkFVq#_Pxv3F+2YXm4CG2Q2kM5rMuhACBcOdy#vdipSiu$HVOk2RGC*;qgeofvF{D0OyYpU*B-uK#9`A;);{}1^1_uBt& z&SmT&)X$ORuINs294?vBD&ma6xJ&kCYJ6g1dz_HeS6|M;Ce7%k#_$xej__!lhuosZ zpm_m`E=jr*e)GKFntQQmCtLI1jQq{U56xq)TfHifh-WN3@8iMyt8)AO{%I=Xd3$oy z=jPV)8hDoW)$%3->%AK6PkCPsYMmUSbGTYzC`BAn8y7EFf3J+|mLqNjmeba6XnXm66HEj+a$XPN+1P(vNTfvR&ms=mpn?38+GN(sG14`uI|!s z#~W$oi@_14I_Ml#VSJym@U546UsdP~(Z*QZCK^8r8WWAv!ruPL05phZ?5(V>_TNcp zG2_{wGF$}%8Hh$6*x4`npoIEFNb>!p`S<8z%?G zBIHdpy4=YUsmuIGD{<`KQ}7-eX57Z>XkjV`LPkD`A_=XRS_4>2h1o1x*SV;y(U<^+ zeR>9!y2!-1S+W9=vCqV;T%V}(ot)VijIcr_1|vMi@!Tj40&&YjGjP}mu~Y&Msg%wlb-DTj5;+=lB8zXH1X4*sD=i{D-G53R08X794>+3QMsDfP`PE!gvDA2>|JD* z#*#0`vAY}STVgIZEKS6swQFTXnOHxllB~uZ?=imbsAGK)Jg<~Yf5*?UP^1;IurT$| zDsmyM84Zd1?j`FOnIUHt&Eg>B@#r4ei39l-4=e4i(sHk2yYD89Y*d3;G>Fqo!($bk zNvXj8`hzapjx?LjMZmgLPG>XFXUjpr)3!hQR&iYVo6L8xGGqnJLi8Gm&BAv@Nq1vqeMx6|9kG(X0K z*^}isPR`5g4ELGaWKPn)uWCE_!^mJ~{Fm;1XK6rvZ;WP5iu*B%rS<{QBYBs+n8>wK zdR265;Hh_$85PH^ji>qdOrT?FMw045Br9)8-eK0#Q&!rQ0(jL)rqa}3trgwra|spO z(~XVnOtg{I3l+wdv7|B`y-F`bWDz08_16LqMh+?0*3dX=2OfaHuWLLpu5}+Gw3xH9 z`4I+Mg?pu`+Lpxeerpfpf{q&~;+4i0YEnniqB_g8y1xvL&J@#MY=r9>(_URE%+iyI z*Uguuc@te79v$XsWw=hamn{Qe+H>Frw~O{U=kz;?*$?W?GcpULClMRP!d1Qf1PhEJ z^L64xb-L-~xvjt;M;)@7IM`+1#l5sxnE5aqpF+)XePUB!@vQ1ln2b*sDat z@WwwE35LG=zNI6SmV+-|Za-Xf3G)_Sh9_ILPQ?br%q|oBvZwXj7BVj?x}sRd!VhOlfllf@_y z5_v-+(;Q32-{aeq&%b^Yo3qDb8t--)-fqI0F8xN6dUXhx2Xe7a{NqPKX zTw3QWOaGM}ZeA}W*^1sbj0CP5{cOI$TTmADj|y`ZN~4?}cPyW1F8CVbNjQ3wUBu3k z-5&^q68v<2*BLo;rBn%z~HRvejs@M8RefsqCV#wPkG{xa{Fh9!wubzF5*a zBr8%askpHxu~=ES*nMgwf2S1A`(oez$VfS7FUlqq?+hYR-4)EN(O|bBnXx`>ZE^$N z5BwzxTYK9SQLx;wNE^N0i#0nX-?BdiBy4db z;1S9#8D%eQ$Fbc{PybyVpy;K$IIMYp0Z!!F@q`C2+@^S;B1_Fl0 z=U35wx%fuP>^^7H*Iu0}iu%Hs=UhQ>U#Teiu0tIv36w$^6WNx&{wfa|;p-4nnfG6?U__x;K7^a&HG>4~L@! z>P;1Vo#)*3f~!^HrS`xk(4Eg9z65=d_W9^fM+S?U_Luw{xU*ruizT}t zZPc9xn1g%%`soespChqN9iC<%6om=@OaI`1WAgc5%RGr`hAP97&>Y)3ufDo%Wwj?; zfz=f&9;qJ~+}O_C8t30T{vlN|2|FEWAoEU66Y}n%WJE2I(!mwc_jvusH1}|CXm2m< zx^yhnc#1tECoWOezq>rEgt*Z@M9|gE&y++lkv4EViVTfm0n+Uzjz64hN>+KdI6IF{ z+x0|_^c5~HaP;2-SJalgSBxXp`im92ykrO)oTJ@NE@7$kF%ukyFTJE|>WrVKdEC3a z509~GXlj_%T8_mZqO0bFj}_J~Dy388Y`jyHKAS^jQP)|QYw4YHILZT)yPokP-T1A` z+I(xi@SOx0x{({2butTvew+24{YaxrZiQsgAUUi!Mm#F}BarnP72ma@l z&j0!j|7nyr9>scH%VIO$rBxpkB0bg*w-#xlGt4Rw;Zo=H!LE8oSAttu@f9c==tV0; zds|5$=5QicLcrEqfh2~UAy{5<>vr-_pFD*ms+fa)VWAmz0PWO~^8v?OzrfSg`T6?srgSy|$0|s?}YWU223Juxo)C;ei(c;vBNz9wEZurX{Sm6C6pgQRD)mIYx6u52F!9lMZ7=I};{xlUjFX z?VX^_S@_crw-6T2Kun^~2n*-_=jd->GyzX<C}zmzWdD zFp&genn-fZmuL?5jlOq!h8?hcVEcE%_nP3@=%4`&bI+R?^MHpq8ElrQaBY}44uKi= z<9&^#aCj#1a}Z5Rc0kx3g4os7cqrF81*@`P_J7l3OL9IOjWAl-t2J6lCz>4ZLw~5! zCze=r;=f#S!Vv$aN7G-mViIgrOTRq{v93Ehps&N<$1!3XI&O2ao3zqj32)#DPTqSm zVgoU>8O6Cfx4}`Y)x^7=9AR0uHy{Z(uf$V0wZRrGI??o(Kn3hdwQLWS`o`C6b?tj0 zb?pbJMi+wyxWTW${m&9#)GOJdgkE)ri02-m&Fh~nb4*eAUYmaUXE|;QbF9=kBjL@u znu>gA^Bno5O1ui1?V~ZsTi716y7pjCZ^TIJOdZ*%O63*4PddbQjF*i!#ZoIOU!c9* zwl(TWY~t=4rk`t8Jtb?kf;!jvUC8Ojuv1fcc*YbLS+|N*?5loo++9r(Dom?p>7mhK z1u98 zC&i0sNioyN?NghzXlg?4dGFz&!{3(@%I@W{cPNFcQb|?xPUR^^OTvcC*amSUrH#f0 z(X@iedRh zMl#Ks74e=vS1agg&vZk@>T6|%)zO)gZ%hO%V`pgcWL1N5nNj+(ng?Tg8}B|$-O8(r z%kodFO6@&x@Z_wv)v1O?eN{WYg^ultOeN;1oA$ao$)(w!JDGYwRBJ<{P7isR`X%-9 z%?}Z~zozK^q{n3K#&jtdqZC^7(3#woUQSpRK;sQSw_ zde=bO$t1bc`PSZKo6WQ!kML8vJbzD~IO~C3`-l?#1#n^fged)-N5@);#$b<$y&%B; zW2wG}c?*qSRB_e1*jo0%bEw9Ekuvb8@Ot@k z?#B2H({wuTv={wOdb_GbUq^;`XJ?R_PzS+fxT;H@70%1M>ZWb35Xxr1``sH3B4WtW zv6vF>DPV2u055p>qRg}kh7y-os;jP%xCNzHV* z5fLMqM5$B(b%4dvb90giz*0N^UM-nyD|@$af{?eL>8;&blw5%4bx^UYLxhxsDN7;2 z;~N7xHAycQk6QwRH%j7c`oK8nP@icNp{opQIz5S<=K-dlf}?C}o(o^V4ob_#Dn)Fb zogXWC#S72IBC7;x1>7vA=MyLW!3}26BJYyP{RRbZ#GWGNhQL)T>!S1RT@=kn8`JU*cq)Sm+Wo;X+ zTUay$Abanr(^xEQ+rZ{i^&UZds&~v(wji^e^qm-ycLJ@NA&o5t?M#N_Ve_jbC+QVn zBz*L@hdZxLv`niOy8TatI_@`q)k5yHSmzr+#oRNy0Z{k%O>95=WQY+HZ}zNkR8&R% zCCaPvqL!uOUmIN@zZ~?eq5owLrM9wo(Omf;Q^z16Dk<&In<45R0k_Q8^G2adUt7~= zX1JH*Xpe_`DqYRQ`6`Qykw7azjg*clGpu|EBHH3z7V9z~5CcFL%EL%NV!EM7`<_=OBUY{J_5`(1f)^Wu7+d8OyOOvNQ3n_~y0<5UFxcgTUP)$IVTKMpeytg=@Fi9_jg7 z{C#{-WTVXm-1fOTZ)8R@9KTk`Ho&??XJ<%F0cK?Di%0TR)_31Gd zgf{48u<|bWrhM?P$SyD+b$o%gu6BIq#}cAw7}UlS7DW4Q^#`5D$A{t(QwFwgMn~<+ z+d}@C;D#_8H^QrwcFVk0+c(b@b{}SGSCXh{;@Bs`%MYDX)v5tibmch$ppnNkONWdB@m!|uRp!0LUUQMF?g=9*a*FYA;n>xz&5S#f#B%2nLF z^m1?~4Hc2@QuKb=(RX1^%46g2Ghvvry@nv8&rV&$wT2p zoH2c)^5mG=v+BQ2cGO*3e=EsSx1lq5rvcd==3ORVO;&_BD!C%_LGp}@akFmm{;l<`1hY3R>O&lRXQDad0MajsA&r?1FOlcCYyD~$2A zL1Fe6UXs$CD??-Ph1+yd{wI`BJ08f_|3HhlT%HVBC|YnsMY#X_qzyVs``?{Up+{4$ z|8?DtGmaNxJ!NEU*68Umh#0{Im%yr!Wndlf-Znno%t0-oyS=%F zPt{*3LeOBgse$aube5TsI@on-owC?FY3uZ{7ipcU*dnw|I@n@qzcOWuXdmgCRIq#K zxF}<%=scrn5$U*SWA{)PV7Px8e$BgjeEw16a>e9F#G zU_uN|sQdvS6@ZyM#4Ft3eQz3A559rkpAB?|yekQj z4;R4d%?0a+cf8-0hd^Hp!r^r?8*$Cd0V|wpkW%HUPl6z4<~=L_PiP&(SGJuvAymTy zV5)FTtl&s+Su-P+B&7`%DAYzvT@&_4b`&}})dL0y(?$zWlr^gTP|sQeu7w{+ALV{X zXJx0}^?Hb7WsiQcZNi?#3YNn6fi$w7?tNp`2d&vO5r;6x^Fhj4SBLIx7LX;fM}>LS zc(v-tUa8{~ApwRi;T#jCL?Nv4GZ0t9&hN$if^rZ8!_GZ7L;pRJW``Jx$svVa4DG`h zbL{6&;N<3Ck?xbFs39!zDtl+mgj7rN)uV)l-2|7ZqahD1tYdq|&4MrkX`^ir97EDb z^QnE|heTEkP`0fnVF)d16l+dc(F8Tj8?HqQ((w2>tXQctT+R7HW0vxIpZI-bX_YJ7 zNx%r;@nO%blQ%eaSG|zjr_6uPPhzk%Ceq` zBWaeVG7B}|kb9CXoN;@6t2a}ySu{mzv^ku+HeuPS3N<6jPPJ@!8xzWj4d|(zK#%3* zB=niVIX9Tv>ion0%3sju3+|;Dg)Q$KHo9EWR!)YbEsA%wvHPg@pvVZHl$B zUL=0|<-`grtQ8%P2g3$4V6GBK{*`u#B!HY*Nyh`Xa0oX9M0!MWcywgHkHN7t8g+1B zbT|8>CP#N$yogvl*LQl2)to=quhGR~R%CrYd}OX_LS7N{F?egpXm)3+o8T*@Hwx1{ z;kb|Cr$=f(hP5GGi?1(HMy#~MJ6r?Qvpn*JaWP2Ta(@=S#+jK% z5!?Auu}{pn=6Ij3_lLZu7v5ACpVUVE9tO6ok75~QBuF$w z;+%jF*ee}^WZvw|+w6^$V!6i3SWcWEAAHc1_ZM<=-KBl?jvj)_p7~V1W=6euajJXV zB~wscO0bAgZ&oKUb#yI5DJ`~)KMO{6tmqSkfVGgonPEXf^#V{<3BT*!TjUVo{)~Fo zS^j6eHSS^eah7!c+g0I-o7sb?i)(*n6^TdX+>0k2zD|V5zNam5o^eNXn}=5(j7l=O zE`lz4G#}r`PzsvhUjM-Es(WU7kJ z(4}Q6-VAQ`V~lHPVI!1{K|B!NY>Y(dX%GuzgS&8GsgI=n)3(fb@tRW8jwAz{56EPd z%d1(!yd9+zbIZ?cMLwpZX{ur19H-eL=KkYMYWZjh9N)CvuNb7Cwb=1D5Jn3#HpN~~U%TDSI~j)603^^3|@f?j@~5?=11jsAQubCd5-Lr^;u&8`Ot=4KW_WW zq_fjS&uW?OSufQCY58KY4&#`vBZ>Xw#OilH$eu5h^*O1IUYMe)VydO}dGbY1I^ihm zUc^^v>8a44yCrih?_mUb9rn+L8QcYMdDM8#0ttItRw)sU9$hs|Mu8*uUv8fm)$_0c zKT^!5`E{xkuH_0}w4@|WcS&f>s!(?65tfg|&PwT6Zg%wH*W;B);8t;WG2p+ksY>FV z9b1AMdKmEoYaCy9l)`x2Q7*^%I!FkTQY|iEC$9+u0C$XPv4J1-)f;Jt1PF0#Wogu1 z8H3>}a(b!drCwOo)T403Hq79^b!uANBjL8ydJn~%apg{Ym`claStbAd*k_7D|M~Qr z%h1)IDl=8gHl>$m(DG#gBmh?22A!Y3Q~N;W1_PpBRL^Ur6tr{8PC6a?11vf2cX(M5_>G@hil)v|-4UL>-tT z_~kz9Rh}*qgRn5|V_RGa52`YuZBh=kcEy=_v563N`3wD|?zAGXZ&DAucuEhxI*568 zy>H{MnERj*a7Zf;tdkGBlMh?#U!Q#77VgI*-kHH;i8kv|PxiC3&9KdRTF=eLg3w>c z4KH~8Cx19XD9j`oTP=y*ppV4xE=th>qMwjJrwl~O&Z8_J%gZAX4WxTOZR> z*nsH?FKcgEE+AbQC!QbHYOuYzAWss8)$n9rpYkNzC@A06okCJ2=s7^+)a@h_A5&km ztAFze_-;ztMf^I3K0U+M$m}0nzrVsWKbCqwEFm~5laGbux%K5NmPP244`LQAJfziN zJqIxG)RhqB5?By4wznXddleLD4Jn**)%-|$H+f!}F5yP~eG4Y}OE0oI9FfTCzCVmU zW-?~mE<)NNZL3HTO!Y0TU_o-kp+4|b6bYYnx;tGnIc>4E9G5PUp=5jG@%^_xyqa0* zL%|wHLG-gL5d;=*w&lj-tn=^__=yyLBXWd*-dk3<+!Qx=3Na))o_XGPBwlU5s%*uA z7nk?BXOm!9jJ$C3KYgTYlo0rqWMIzp2lUj;<^Kw9DH3|1?4ru+B%X;Kauj=KklpAa zusu`NpJgBhcV+*5?I(@**EZ3gVvxf92^QdQ*etZG$Z=IK(gMrT-(h98{#7fnNmuM7 zSMAH06$i(Q!YaaHn`f-@@Oo>8oRO!K34}%}L)tn(Wob016jPt%6Yauv$fY6S)4)4% z=Rct&%2Q3f8w=dxw=l~k2zNWSJ6U_eDl9}aiGIds#EnhX>`&_2;}U-B+y3#O@DUl88moM_nvh^KWyx(QeWTTBWsKt)ib7PJ-VP zlYX_F*^Xp@FK|+cJRJBZiufogTeSh*t`q(*x9k4@@dEe%#S4Z2|9^Qw#mLYM0vr8# z7%J{bwY8b(=;GqfS&tsUkfn|MR*}gzA4U64ebJ;3+AT15>$VxquVySwl`~&n?wHPh zlF8qPqdzT0H9?nyp5o&M<+Zp zr7oPFhX`m2c~=D@PLc!C@YqJg?<@o(l4K0-@H0k*p+D8|Ge+c~;}3F?u$DLIy>A6k z6E=b9ir=H*L;_0TJ)!IX2&a{bvq%6lf&@W{@Enw#xnTToV}KjYKe&KwrV7Ch&&KWz z2WP@JQ2XJQ!9?uGrBu;LSCf&zrM;WCKArV0NAM?LT~+}^ecqn`;?AXouE5kg|< z4`yg~po!T82!lzX&;q@tvTcG5VT1w(i=hkkZ@a}UxKL{UXmC;UI*LTvDE~tqYake@ z8Il@`R5jlA^HNHX4i({*4OQY9hz|?Jh;WFpVZxxf4HrsirW|rVOS}xk*^rbTa|j;m zp^vq+6c{#xg-qu2V7&*_mCU8Vj!U8=Q)4T%l+z+X$RWFi0Mi_niOu8AR{x*?fgSBv zDPFpsF`2(U2i-%cR*H;@T*+1Gq!+Mwv&)1|42I%@{6z8MpgwwHDtB*p3x5m#uw182Flour8{Y6FVCS^em;~a+OW!%UiNFIl{QjKs9^p?qZKQxwWF-S zuEB@kUs6 z+5Yra;|W`l2$YgP6*g7j2XG9u>!b}<>AS#gjlM^1YP707ZSK8+>~;y7UFI8^zZWz0 z4V1RrmVarg!bbkvHYwJ3Z?@ZOKDFf1(jNO%x#it6Um@F8x{&@^?g9Cm+7x=?=x~j| z)h&-!!6T>XZCjjL{n~F)+yy2GwLv<9D0l-VM@mp*O1B z!GGNfs*UR(`3`J0M)EzIqv(`KXwoNAdIe(CTF!)CZqM`cBp-Lvzw*pFs}vq16vkX` zD1nQ`{svB04(;%@yeA;4yR3XCx+ZK^ELzmjD)@IPdW(MJekT0hpg$>B=QE4fl8D`o zH~(BIj>G~P0wb=kD0xnvHi*IM1N-A#Meh&&hp@LE9=qt^#oLYGO(V_m=LXju@1>kS zP9p_yEsIJ61bCDY2=#q1W=T&y?&_wfJv*2A1-|_(&i?A!-u+a5c-$ttWhqu7z)odp zbnM|BJpHtZkYG&AnhDZliViEotKaE}MA|ghjcLq~^JDc%Cih!}?X}kFz6`8MjJb=y zf^R=~mUIN3eAYGne59_nPq^;sGW<=@UDRkZJkQ-W-p562=fUT6Tfyo{8k#fKoDLA8 zVVO(P37m>rhkXL-`plEq^tUORv&1sqUG0Y0ns>-Za@CiGVUPG2nZve&)`3F}`>>J2 z>=u=D#lMPU2II*xB_)%KV0hG-M3c-M>uC0`E_`UUwoeU8cNE4lI2T_|D6+nj##d%& z@-h`KQ^Y4@jT*iJxE)c~d@@VBS=Dw(>qT#S9RA94$y0YC3YRD`TswnfX*qVIWPXvGCRF<=x9z z*&K<1oWNdpIUD|+;HtlkarkCHBG0k}+6cr^?x#%;CKBE}fDvY@Jl^~34`g`9h0o$F8L`rXfQs%KScq$@b%yfw^%&Ln(~ zVt}WZw4Fy67MTg96^k=ud5WNzgs1oQ{5MtFsjC^cqZ?HzW^JFXn#!J zViN8Zk1z3W*YI#!ar5=%mZ)`(r?{2TU-)~t~#(fP1lNL5qh$C zCZwKXkdgU~4_njZ053b!6l(x}BWJty3}b~rn;v3=>x|^b@h64v7m>sYO*Q4%T0O%~ zvWb;x7|9)U>!$$!mJ7CvSNgUJz|B|IvzjO&QAZZ5{*xbnXmwSUp3SO5DMnUwhDy%v z#9Vn2nvg?M8Q$6{2McdTv3}J4?$<>Drrk`&7n-DvrJPa~3%^xU7Sl_>(&^6* z4oYZ9vARorqlaa&6Q6|d^jbY5-!2yM%ywK^-~0Lw_J*gLyd+8|S(TZx(&ks7t5941 zC_Hj>QW+kLDbU#=|8MnzW-|*V#-R6+4S*Cgqo`w8H#@T z?*!M*nFGDN#w^_mD+2eXq{=<~hJDvR_FKjzdBj`qW(WyMHhFsH)8ZB?@XoB6D_zZ5 z+Be3QMn(+Kp@Ho1QZ<4SU zLF*1%iTvN%wo1ZZ4^SgH4?1iqArxVbaI1wQ`pBrIaxFVys^-yM@Cua9sp$tkgF+D< z+nT&03>G2^J1ECQP814vgEDAsXJ*kxfMmjDrw^^43x&=Yic`}~;gda0IKKA4ijQ^9 z&rH7Jj|G8j(J?>Q5?+7Tk!b6+DG|7-_9$D}cf5z&-=ZB%I?X8BK9` zh>X{TKegNsF#*Sff;e0H3CKEOZUk#^3inCZM}!*Fj(t5$1h%I}ELe_*+B`m?LQnKP zqBO>?=U(wROT~!??9p??+eY8`>0Rn(A8n@?iciF&chG-;=>-PW*x@lb)3?TjnmAhq zRT6e|Z1!nQUFtTbmE7h=DBUX}g1}q3re+Cm4%urx^cG|c-9-IkX;84}CjE&{x&dpx z54SbpNwP#^ADtE@@s{{v-C3)_|ZH%1@ay3?uHEQZ&ZfX!TUp5>h+>ikiB9ruz|o(>NcKw!-epR=}V%(5>^^$LL(! z=ttUW2jL_BVm8{x_!4)jj}!CbyE?boJ*{Y7g&#b3bff5CtgE6bWi(o01%q*M6e3N5l0kQRnpSsSWeJU| zVq643O}RU*@`U_kH|T1o^|<$**5$7vKKsnE##`p>%azb^VbEpQy_o;$h64FJm}EgK zJa0NK4Q#SBAV(~ETBkJjyR>zx*n+f9Wo!c#D^2VkTF*pUUlprl+WO3q6xu(^Rz5#JvcgzBmZ zd(|OD7wJ-EJA&v<=@>BurYD(>&?3P=-LeoTZ3IapzlR6x!^a?N!#jqff&K|Y6aYzB zqD5dicnv72c16=XbNB^<-r1C0hq}_0>ifeyOJLHV2p4Pz$JBO9u#C4kauMv z_~9Mcy#-)0_$%7Z7_ce)J$7#%SUmh*FC0ErIS1XnHj)`iNA1d0(Rs+bCID2h5BE0a zTk0Mx6bxJ-THzWv!Aam7cyr2!Qr4OgmvEuxDy$Y8t|ANAXMKFsJ*9AStY>w6--k-p ztic9bEmR45e|`MBQdNAF*bX#k&VVG!9G?l{1>M^;p@=iZ%lk{?*X}VidkhuX?uFai zET9dfjuJoAvTpw>2dea$S*FRM1{>gqJbYp`+DmSBh%ler_wsU}0nvxgKnTM*r>syD zCQ5Na=;PU;_|fesi^;Tu7^?6dn$a|og|Nq)J#?@>?tN`u*HA}vj8qnn0VlA^%XP70 z4070bzJH~PXM9$|=X&_cx(_8TT5wFWAbe2>B~E99LS8XW>gror}9r#TSwxP=ATX+2HB(1NN|SKZ&sk>pp4kofBoB zxVdPKdbBkSW4*K|bFnP$eUhv&X>y5!r+VZOjUe&prK{67b0yppGTjMfv9&D{)Eb2q zaB(0qQ5!2w9ew8BXQNgLG7YPNh_fG=x)`++xYfT^oKlpsO6W6B@@u*ADHX&3S^d?&huA+bbJb}t!_~H&`r2Y+tr&lJ?5a|~oFUiMq?&J1*oF5|{7HPey2nHv_PTU;G`>09OWYARG3iCaeEDG;5O6&P- zPBg~~UD&9or18tEvCG8m+Vh)jf3LO=9G}LuakrL3Jm}>oIN`X?@HNjz;oa1685z~> z45~C3k(00O*?^gAP0Fq+oHI6p_CyW4rav2dOgz=D4{kG!;B{5MyKytmW4C%QvEWMQ zzekwlHmTmpdyDQ5Lep;No6ffS7yY+Pd-Dp z#ymDk#;IoT?|2<>mn0e>?_0efE31_4|Hqr*u>2m4?jN!-on)NEoU0oZoV&<9aqNBY zS)cE0C>MY=%nM3WrY=G3piQ6TB88GoQq&TZ+Jz6K^ak_$JychISf5k(hdIrjvJMYQ zidG8$0yM81*)(LzW<2_RFkM=^c(0js##jvJnaHmn=E_;9gs3YTHh*qA-3p(v^NR|y zFG)wZe84c6pc6+b)6lw#g?{@-Si5SQSkr1JhFcl_BOR#jIn|LW{akE@-IG1u78H%dV|o87_mYT^7nMqE*fuiS>(5ms+ZK%utuVQURBf^gn~ zJ4t-HbZpNZ0RAkA`WPodmDq0g57?B~uz@sT{sU~7Ur_r37LOBaOXEFEo3Y~qah*k* z*{Cjh$B0hN5% z`Z|ZJ?~lLNNF6PwZjDIrLyid6M1n;~7mhM_1^tdzLyyW_a>2Dj_7~0T#$<$~yX2I6 zCB9FSPTJ6@B&kY^FH2oW)GV}W1?To?>g58q==9!_cxIx<(~?1UGBl+J4tzJER#tv1*kbiOn2|u@&g^D z$+#+p1RSTT4_WCY8G~^vfDmdU8DG1v3d7a2`FOCX^r)n+uyUqr;^*UH`Lp`tT_-LG zE`YzA!DqOv%z8o_9(m)nkB#Nabx;~V zxs0>rCR=N7z%#yBQTbEbj>#62sVIMEGvME1uDFxx5!gCj75f`Y^rBv0W)p4j9iK%s zccT;^u=vaCC>qRG`GOnoX2yaW_h##=FUaIEM&x}db|@R{r%;$mPY2!OpnsncMlnfQT1736 zq`mo@bP(Qg*S%ZcA;E(oe)S7|L2J!3^qQZdr~)Y9@909IN*sSJLJdnms(T;!L56Lt}dh=%(|3Jmak1-_mVGEA%w%|D)bSmsA zJb2ubqDL&qM`aEUN4;1f^$SpUEohozQ&)}fA??5yclIC|j0}a*w_i%z^n^%!Z+rra zK=&=Y(p3f(awgC{)mbOmAk^0P8M%U)X6>skd%9-1@lp%QNSK57-aWmfP{0xB8na~k z+KSXan$`gR?u?Qm;AO)QoQZmln6!mLVO2Umsukf9ZaS*f13dLj+ME%dpVBIG>D!sn z;(_q7!#@eS1zpk_+Eg9lRA!5L`a<&)ivAJy?7WsMcFEn5)U(K_JRnI2$Z3y92akg& zMn6fE`CI0`j3?5^s&Ym>{c z?zA$DV~hfmUEuHZJ>Q>y!8*d2$<aW7_@BlrdbM7 ztONb`wnXKo1HmNf`9fvYAa zVC88KEBYHQwRguloDG6{wz?T8?Y_n40Y=o;rD}(<&9Y}zLB|_*^G~lK14uVX~r1BUgOz5=M|{QynJng~DiYNi_p3B8L-ol22WX>)Q@7jI88PP}p0uhGXGs2WL z3py}HpuA75diR}BhQLH}k@;rBSf zVPF|}3i=0RkODwl9-2;Jg^M6x(mn`+K2}gl)!-h1Tq`s&8mK!faPf!k;3-(6=pepC zmjw7k|r)neKM!~Y-QLPNgICy)sI5Sh7STTTpsp@m&lTP7pxD>dV~zWMVU{Q0$!<5 zF-190Ii9uf#UHX+zi=roNNa4##|B2JYU>RLBs--H&SDk(c-(h`9K{zXS#h;pmZ4aMKx8{+@{C~#?@Fl`Kxo~X{)EzKR-3C zYpNdw_#_nEm=9yO*m+x%V+#xrcs`p7ofBSIK@%dpEDvZxRGZ7tyCf?$-C|3XEHF?` zj+$7L7_Uq*T-emfA8rlg)nfLtDkbFWxwu z$#wzE);;W#H@$;wJtxz&^Nt$*#P(^T?s=x4&xqJ6^2kKj*h(b>LUxZ7t#vBVJ5-yK zM-Unsg7J7rNV9+1=}!yCnffDUK192*OO`Yi+)s8f;q`8e9hbgYEj}eii9EkuaJ5V` zs1+4xK*2iaZKgTMjhJV5x6>4y@L}4Z1I`Be%On__x{kxj(ODV7m^GeN75U*PD9lhT zMA0vT>Y44wQr=I-YC=~X9lNkhq^DgSLPrj$ttN#|pjjCfkyHw9RFBD*DR&R{6>Twn z{rG_q+*>)botdENd%vBLe6x6&TiDG*5rgiNO>k>Cc-tjXosd*hk~mS$owVXgLVd0H z2nU-rE31gdIlzH!aFeq&@ONT@iXN6?plM1pz)RFbU@HD0UuxWf)RDwqVP z{C>^J2SE@K$9kd|I)m12`khxra$$uWjzeEpnyT*&9@wO`;F+MzV%lWk-oO&I|EC!H zYFDCCHkF)r;A5%~mIh0zzp|twCzo(PPstr(KhvpS-q?^O-^p*Zzngi+(lQ%=_$%m^ ziT_xlX)B_$STD4Oc^zce>S-Bmu0=_&mz3DRSu>Umtt^s`5QFRz@C>AhKh7*E8yExi z@?`cXlOmN)M}F;2MJ=K-&I>KVlbpB^D1lLJgnl7f*cYnT&ML&`z-Nt|6m1QEi)w9 z%IY<)U@+f$W3MKcci*k*%WCU1gT^e+KYkiCVzFU(zCaCo6xeFVC`tGqFc+iyNfs8b?a#PMny8e!%NYte3{bw}E@Z?{l(b6GXjQkyO)pJRWiI zGQ9k`TsY1uURzo9BB_RpuTZ^9bT`YRmf`12dq*qMN2hqqEdhx$a1>AAToRz5C_&jrDg8RAE)T$-}tPyuJH|kgIZE zWMW_pr~nF*wy%k@l6oO<%FDAugHs0YYlT9WxG&tl=k^A9v}t2HRBzyw@4$YwSKiS$ zsJtvnQ)8|EZt2R~#uR@*kwhxZQrTCfpHdWXlB!t4b09aEc7kYNtf?ik8Dr!@_jQJ} zi_-N7bkx`|vsPl^#5A`ay(wz85)*5yCG7dAc=j8;%^%O*n{#Wod$yxqY&l`)STe{C zYjY7G46BhgI(&OwrvDWo}^_Jj-l; zJj-~HZ&Gz5lJUQCdqS{{1UE7vq~op!AAL3ct|=U~ag@cSrJhVxaLXFPe(Gh$#G8YsOd zy|#!J^tlGG7eU4ZCDcZ+`JEX*9SeF!BdDG#H;HLS#EJ^d4Dcn?>5Ah){kD&QprMX+&yq%r*O#@%yL! zbYx!LK#4U>MAqmE?JKfYAi7HCE`94dno1kF(hHc0@k=CM`h1F5d{XI^{zKAU(133m zwEoDxOAOY40Cf4ty0%nT`E;Vs1Hbd7@0^0;2bC3s(3`U_S}2D)z|_vVnjasVy$7cl zx9NNa!bwy2d(qNApDM;HwQK1E#&6Di#{6@;38^eJ%t3;Ls28~Y;0d7kVLin!cbCBu zk)ZgdKeVhU#Wr+ieExcSdhrH65&Z3ENofO>YB#GB3vf+vxdOfGSUsI-E`q$zRyn_yKxn6YHC~@ z8{Ra-qQ(ya9SZ*3r@Qtjo|@$pxp@^ehr$00zX?b7sa{f}SR+T( z{#uXaYdL#9&*m0&Hvg2H8QtvnI$<^dTl8NI=$cskmRw$@PxSjQ=RYYT8TI_=3MMhV zvdhn<317SF)n>&b7bse;kF@(~5^7sKcAcbLlFzk!zIaDyA~hiUOS@4lcOetQ92Cpi zjB&{WFmGZ=Zpxqq8lolB=uF2TLm#TUlE>OQ>^J#WvtS zC1r_v#s)Y_?_Y((*(SpFKlYUf)=~k+zFA0`xWi`h5#UX;|5CC4AEdogbY*Y1?Ol~r zl8P%UcEz@B+qP|1P|=EQ+qP}nwp~$0-}=Ar-n)Gl=j?r2+ZVI7c|Yef+Hdq{jNVU9 zTH;evq}j*iZuM$-E5ftt$J385qSuTbjQNRi`=l0A%c{GowB$aYK8t<77~h2LGYoSN z)8WXm-{C++5sHQGQw%dj9pk{_gyYab>hH{b0n%eZ2yusf7tPyg!5~S;6vC$+o{27J z!0F>4nWAza0DgVL=>J)Tfzco67YLBpV5SeqP8h*z3FeaAV2SB3@Y9gSbPq}JV`PN% z>2L8%ZW**+saUlwx7bRV7`Yf|(8pjrpK=2l*$Ay`>cpx@Ni$|dMjxgp*$c1T;fQH= zUACTz&FRE^!1a4%x@{%HD>x9p$YlD~5~!NwgJS4kpWb^Us|xk^IajPs$AC7a83|J! zjcxX$0?!J#TUCpiU4$~tQtUtQshG4wkGI2AVqF7YId#f9NNy(7izNX4BFU6GPdh3#+(a=lV*NCZpC&|EC6P!b1AkN zFo@mYyhnVE*qqh{m}joxO_uwjFLn29!@zKShLFuh6N>Fa9|9WV|y#hRVG$S;Wt22))_xgB68+0zU}29n(mK*}Z$a*96?SK16&-@P7FdIqZZ%FbgQAxI)spLfX1Q;)z0%z{_Os9Smd$ zzaPA1WGo!SO}ufxPi$<=#SIi>D8KJ40IWnIb+-q=vL`N-d1@p@A**)Y=JF1dnTQWQhi~{+y;cSr52%u z93)%%?W-7=DVP|3G0-PgqG+O!vXH7j!u@c?85wH6f+`o(cOz;|qH<83`tjdZvj4$E zM%KdmKWyuRl-FgE6;O17(Td>uD;vmvD&|O1h!1l4qtl9{qlA^FEHvlx1ofUur%wI& zLw3{a{sM(ZOsY(Bdv_*=`D8&RzxM65X8OWqslq#blh3#N^9y}sAmTjl#-o8opAPgB z@q~B_oq=i}5p*=kgp_(r4Y@%nDlSIMu1I%;Dcq=euL)+Hy?0+jz8tCKAY4-}d@_pk zPwI&l|ML)vmH;Z4Jq(qbZ$vOzdz1lWj9L2Mg@@wT&#JKIRg9RD)>e)*el_9At|ysV z1GpvaDay|*sjbd96Y0BXjJGUXn6FI|fA zG`u3~g2aV6Pe!~V$L|Dw4X5fFT@}!cXkGgyo}qg-4lKhv=wc%i!S1={-3X^B;V2D? z+ARwmYpe&)x?{CUFA(z#j)l*TTo^Iccl4$0q z%q^KLB=d!2vnc2Wv^(d%#&61A2nAT``_IuirJYqd0eO`NgOVTq?-1}m933SShyOe} zF*0%>5&~}9#Lj^c?j1{n;`|oIo(3S6WR&5_BS)KPOpva#Ca@0qlHAS+1AKq;jj`K= zK{4Fc+}}=3Fr~k|d47Je590w}hjfLzNSo2u)F;IdnB&6F|Z{b=ypmi z&~0;IweV z^q~U-e9=A!HI{HW!vEeH6AE(Xi@Je#zW-50Ii*(+NKJ4V!_q*dN1Fkl9BU{Jqg8b5 z(nBSn&EO+rRAW|%Hl>^nD_4K)q#Y3>_i{s$BVeS!aT<(B<-@&13P+=8IWE&H<&N_B9g2Q@=aGa=(FDK&m<eT~05+y#GJs2}{linYB!Z*3N+Snq?L|HU8opBW>O@iubE0wBjPaGPc|NiD6! zV$E-q+ERy#U*Y|pAxjBL0rO?m$wm}rSAN>n#6DEB!T^cqFFxe`8xBA8LM}<#nYdow z%}nX)yFcIBz-9(CvF^d9za>GaeslIq=77fS6?FQo;JE}Cp0ljPd6oEs%KgKNhtRkXWrUcsiK=s*iH^^I-@*Z zNb*}FrT&nz;F$XPT_8W-|FUF+Owe<?3Hh$$H3WZ?1N&CTP2Zyp7`|LZc zP@O7=jW1ws*9y5hjb3xl7ERA4FmQli;7@?Z@p=&z^vUl!a1Noy)qq<;NMGS+n8oY@s!0Z;`JFu7glN6|(QvmaF7Q0eCgzzRNVC!pI7ncfE&lDT0T$(K_HA|A@8}_PP zwx62T+7_-{oh(Y9Iy{(&nat4qCHX#Hk2*fHeoeI=XZ*s~yXJO!#r?98R|(ebvZIIa zwoWjH+qe4z6+z+jhiq_(PVp$W$jtl$!tkkv$cLoE_h!ver!%RnfgV=Pn= zj^i+VQmX+w~)g2}(94G+Iz`DOp)&q4kM z{rDpS3FF%@=trc$@1Q*(uz39peLjJNpRzGO*~RTcK-WJ={>jMy-mj_>$%jFB zE|U)hS1IYMq9g~w1lYEsJ!)6pjthI~ju~jZ>m9}?0Ay5fH)!X2=V$}Pn=t?$o2<&B_6^32-nhVs=*010ecUKo?N zI)tM|776x%S%D570MA|)Lh2=l1nZDan05=A@9j-Snf0%x5*(xnQx8)LQwL^~8*+3} z?~0YH%j!GCVMg&#nMn963huo^5Bd4=*&3Wip8$2UtN=cWH2X({Yy;+jn)`It#)7o zT5zLtAAdNozmqF*L!PW|zjjS;BFHR4$B6l0~uUhEnOaq3*6?KI+m`kl5 z=Sz+q8Kdp1-$7;;xz--G$bTC{60_6uO;g+`F8?kl zOEiL)Cyi#1W{FXVRHGkzWiI@Lzn+lWjlU-JQ8dLKO}FW&R=KQTy3!4j}tD(b5b zJC)T5TDW;HY@cb+9@Lr9V9kW()Y8VPGFvE!uSg;7H1&j0Bs0qzoomz2diq=}+thK- zJw=C0#!MalHA|6bXV~`XSV{29aERrk&naa<&$tN%WP1>>TX$+f`S&D5TI}87NI)_tzml+OJfV{>e4?^y-BEP zNo5v#XMe*rXzluoSGJseG^vdgi>IA4sT4bV%x{N8AAT}${uR=sW~Jt<^7o`3hJs86 z!^Ahg+gZsC9v0H%{+#VIu>_V$JRT{fde_kzIGbG^E&j8))alrq`6@eMwa%l_HOnm2 zCTeCd$mu&0f^qu*c6fdfT<61-13Q7mNcgu&c%@j(Er#HZGW%6tnIZ~;HzRbPascyt z^f2PO@$k(^kyJ3G^2;t230NY4uI31qU2IZ#p?dsY7E84h0&J8XdSYg1SST36R5Ksz z5fP!R*5R~NFC6Yd&YVEvsrWTXS6p{j5rVFTRfn<1LN&}E@ejL#sSp|01f;DP*5Xr}<8aX1R207Z# z#b_2VTVvvFC9mO_3G=xx^@U*8+K`8z?JFvx&-eZ17e_pgb(eN=^9f zw7w`oSVrs3zj}J>YM|XJzb_9dv0Rz);+@lrRTR!?^gc?Noc;&HxfsnyNb_1CDF>kNg57kR zP|QzHoVwXqrv$aKWy+Lwq)=RQZ_nK+>|nBo%tp7Kxhp~1sj)hPpG*vL%OD>0=Lc!{= zMQ-OIV)YW|0k4Bg%4Yu?njpB>)Y1V?PK4`iPaj;54SI*myD5!DT5Khr9V^cy4DTTR+F z8h32uP*{#L!;a8g-e{*w4lm+%j|y#;uXNKN^k#PG(}%Jwh+>_ve1c~usRW<(QCW%Q zXC}i|dvE1Z_++OC6q6I*s~3LRxhjqAxkzpC&2wy7pF81*UD~81x4LH&f8yddk3JN{ zV5Dlb7n!!352Q1>w8!xp54mXZ1`T*WZQhKy)`?lwvexqr%D_L$6 z+G8{L>IOU&vJsz>&Ciisk1$(a3wzbx}{r;~ct+nf*qF(4PUxY!e&;Pwo_#f8s z|6xMV^I!H|Q0`ibs2|ldud8?AMqIG#s|q1R>*RGE05dLVhDPKPp^|w)kEASXKUHQy zK{g%dxw+Ii5iM~k3+RMh{@fW6DbW1YtWHi4ZO$<_5409%9O^vl$DQ8k#=ns;>(_QY zzWd(PuP^S4RakElN|9-na|>WHGz-e*MXHvTiAAbbmXSr;X`1DwOe~GEN;YYl)fCM| zYb=YorLr=aD&eHuxVBld|HeQ|~Y%qV*8A^U_~jQ&Ho zX(M;uepn3MksHGQGLkiNhv=umtTJ{-?JvjF?Z43kE-wr8=W;IWuEL=&3V^(>9^5@} zv3`^Y5mn7Np!($OTY59O;#J z)7#2OwGx0za0^=D+2>=S(I;gHPbZSYWG*a-dW$MNT{-0<&vjL3_sb;Dgy0nH;M=Cp z1pU#@ixJc3Wf0r*i;f%BREU@bZ64}~8fBgikyU?hm2_+dz}v8T+?*RB^yU{;z0}m! zZz*&@wzAHR$lXheKf7{woFN3ov_I6@(Nt2d!vgb83&xlCSzg=NuwWjl+}(jasYvwX z)b3~Dodz-c=9FIT6_gHH8$@zBtuC3$gFwDS?~MFDIW{`UGB_@ z-$ls8H~9Aow!dR%z27R6qmd|B$qKUuTQG<6n5EAu#6MKTcn0Tvy)VJUU_nGSN*xhT zg*M{0PP&jA1T0*~{Y4~>ATlK!r34BkrW&Jq)#Zo5j5S!duLe( zPHRH2DDXFI<_iMiMf+~%0dOda8p~~`2i~V6?g~e#HvZaa-Acr0)9rqD&#Ug*G4y*5 zOf^KY^ilBkD1oz3;UlAwgZ^G2P}H%U6JPfxBZb3K zu=;f=F+f-+#j$KwWZaadQ5Z6*L3z*a()!C}_9_CBv7?+>M0Wo2F6WI>-BM3SJ1eXh zSvZ@1aN@gUzUw4!S;pQPPdZjB_u~|6g*s-+q6R~znM+d#a{}pceC{8=b`_jNO0F4)WMoL2(*7`;S>!SBh@+H~++GP_nB}Ig`Nh4nG2miw7A=fBl_UY-L=eib%4v z?t^3OXTo5O8%6TWgG(DFjOJ5>Ip9g0>viaf80Z%*`!h>uVwqKD@tCBj;a*n_a6Ya+ zN-PBNXX9N{=7%J;Ef=#+7ZVz6I%IYbOZxk+JafWYnSAH!#|}mWgmlnLe{M;t2Lf*o zkepefOl|Tmsz(IJ#`v@9KG?1Oq&AZnrZLb=qaP(Bzt*|WZmw5^X#vZRe@HKg(z68~ zUn#|`u`0yZd?YacWLjQInjJOprcai5QAfu5f+&gk@A4z9quRmZ z8sx29`wB|r95#rTDLMLcCo$fa3g*<}KZ79pUQz1^KSjpi6j;9@jA>bBY#3LTMySh* z(N3EBF0yc>>iOeiog(sB#yBTr(;m1vH1jbp{6Z7PzT9ypEh~xGx#Ahky-*G- z<TweZy&zo!t=w;jG_d?L1{yHN( zyNi5s#?;yT@bb8Z+y;K|H%B+2jXI^bbE5A5B3o=$p3n@(vaEc9U5#FHU5LWiZ5WN> zpo1+WWs1hWG5lI4@2AP^56JMH|Ef>s{Rv-1Gzto%;Wqv#O|L9M^6me1QB}A=X^Gpc ze=AY6;}*D>Wc@wT61%D~m4+EwifRKetwd@EaaHF*B`?AE`^fe>rSG?}?a-^u9pm~0 z4gLwX-bo*)FC4 zRtkyZC>)2jDJNnj{9y;bHCj;ah77AqBQ98RySMcL%A*QD<8pAj$%jwubhl=F-V(uS zRlnA^`gW4W=pA9dwIzxSiqgwL76{AhL2im6ELn*qR|!ihW830^#aq?hdc4s zYkAEM-@^sk=4Q>tbp{BF_FaYzYbUin0Y3i7cJI?Vii&oP8beH8T8?HRM_aBfGIlm% z%-dyc)&}`;ODdeWF-?c|*8+E%$-x}s*51Vyxs7ux;zAV>n10Am?a=i?^-K~6T*hT0 zhvVH#!5^L^mdz=8TqI|Nv1@b+=;4so2_;%LvVNXT!ngytir=#c9FC9A%)={Hr;^cX zw``LshgF_aS{lj=U&_N{Iu(KMxZN>0T67n5YmsEIsC1cv=?$2#w^S0hw4-~K?$tj+ zI{_|CTLkh?;tNdnS_Zc#CmDUJsov$r*J!C!nU?8=&%A+pgunhM&qllaadu`^8q}gH zeLRYa-y3y8IQ3>$OQ0n+T5avTywa*Q-d+(uewe`_o7r^WYZyZYO%otS?U!7GViFvE zPN5rO3K)q>i6zdV7o459qLTJY95>Wc`PS(*7Gu^aY}3LEWun>@SX4)qqGbIj@9w

hU>jF8`UCnXVSf5L*fvd~rwV2=Zs+zmPx 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

_AWo#zp$RnhtKtNge(RVjUWqHg7 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 z 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